/usr/share/grafana/public/build
{"version":3,"file":"9414.642bfe0d5eb16efd0c16.js","mappings":"uLAYO,SAASA,EAAmB,CAAE,SAAAC,EAAU,KAAAC,EAAM,KAAAC,CAAK,EAA6B,CACrF,MAAMC,KAAe,WACnB,IAAM,CACJ,CACE,SAAO,KAAE,kEAAmE,SAAS,EACrF,MAAO,KAAa,QACtB,EACA,CACE,SAAO,KAAE,mEAAoE,UAAU,EACvF,MAAO,KAAa,YACtB,EACA,CACE,SAAO,KAAE,gEAAiE,OAAO,EACjF,MAAO,KAAa,SACtB,CACF,EACA,CAAC,CACH,EACMC,KAAQ,WACZ,IAAMD,EAAa,KAAME,GAAMA,EAAE,QAAUJ,CAAI,GAAG,OAASE,EAAa,CAAC,EAAE,MAC3E,CAACF,EAAME,CAAY,CACrB,EAEA,OAAID,IAAS,WACJ,QAIP,OAAC,IAAK,CAAC,SAAO,KAAE,6CAA8C,MAAM,EAClE,mBAAC,IAAgB,CAAC,QAASC,EAAc,SAAAH,EAAoB,MAAAI,CAAA,CAAc,EAC7E,CAEJ,C,uKCpCA,SAASE,EAAmBC,EAAiD,CAC3E,SAAO,MAAqBA,CAAsB,EAAI,UAAY,UACpE,CAEO,MAAMC,EAAuB,CAClC,KAAM,CACJ,QAAS,IAAoB,qBAC7B,SAAU,IAAoB,6BAChC,EACA,OAAQ,CACN,QAAS,IAAoB,uBAC7B,SAAU,IAAoB,8BAChC,EACA,OAAQ,CACN,QAAS,IAAoB,uBAC7B,SAAU,IAAoB,8BAChC,EACA,OAAQ,CACN,QAAS,IAAoB,uBAC7B,SAAU,IAAoB,8BAChC,CACF,EAEaC,EAA2B,CACtC,KAAM,CACJ,QAAS,IAAoB,0BAC7B,SAAU,IAAoB,iCAChC,EACA,OAAQ,CACN,QAAS,IAAoB,2BAC7B,SAAU,IAAoB,kCAChC,EACA,OAAQ,CACN,QAAS,IAAoB,2BAC7B,SAAU,IAAoB,kCAChC,EACA,OAAQ,CACN,QAAS,IAAoB,2BAC7B,SAAU,IAAoB,kCAChC,CACF,EAEaC,EAAsB,CACjC,KAAM,CACJ,QAAS,IAAoB,oBAC7B,SAAU,IAAoB,oBAChC,EACA,OAAQ,CACN,QAAS,IAAoB,sBAC7B,SAAU,IAAoB,8BAChC,EACA,OAAQ,CACN,QAAS,IAAoB,sBAC7B,SAAU,IAAoB,8BAChC,CACF,EAEaC,EAA0B,CACrC,KAAM,IAAoB,yBAC1B,YAAa,IAAoB,gCACjC,MAAO,IAAoB,yBAC7B,EAEMC,EAAmB,CACvB,KAAM,CACJ,QAAS,IAAoB,iBAC7B,SAAU,IAAoB,wBAChC,EACA,OAAQ,CACN,QAAS,IAAoB,mBAC7B,SAAU,IAAoB,yBAChC,EACA,OAAQ,CACN,QAAS,IAAoB,mBAC7B,SAAU,IAAoB,yBAChC,EACA,OAAQ,CACN,QAAS,IAAoB,mBAC7B,SAAU,IAAoB,yBAChC,CACF,EAEO,SAASC,EAAwBC,EAAyB,CAC/D,MAAMC,EAAaT,EAAmBQ,CAAe,EAErD,MAAO,CACL,KAAMN,EAAqB,KAAKO,CAAU,EAC1C,OAAQP,EAAqB,OAAOO,CAAU,EAC9C,OAAQP,EAAqB,OAAOO,CAAU,EAC9C,OAAQP,EAAqB,OAAOO,CAAU,CAChD,CACF,CAEO,SAASC,EAA4BF,EAAyB,CACnE,MAAMC,EAAaT,EAAmBQ,CAAe,EAErD,MAAO,CACL,KAAML,EAAyB,KAAKM,CAAU,EAC9C,OAAQN,EAAyB,OAAOM,CAAU,EAClD,OAAQN,EAAyB,OAAOM,CAAU,EAClD,OAAQN,EAAyB,OAAOM,CAAU,EAClD,aAAcJ,CAChB,CACF,CAEO,SAASM,EAAoBH,EAAyB,CAC3D,MAAMC,EAAaT,EAAmBQ,CAAe,EAErD,MAAO,CACL,KAAMF,EAAiB,KAAKG,CAAU,EACtC,OAAQH,EAAiB,OAAOG,CAAU,EAC1C,OAAQH,EAAiB,OAAOG,CAAU,EAC1C,OAAQH,EAAiB,OAAOG,CAAU,CAC5C,CACF,CAEO,SAASG,EAAeC,EAAgC,CAC7D,MAAO,IACE,KAAW,mBAAmBA,CAAO,CAEhD,CAEO,SAASC,GAAiB,CAC/B,MAAO,CACL,sBACE,KAAW,cAAc,IAAoB,WAAW,GACxD,KAAW,cAAcR,EAAiB,OAAO,OAAO,EAC1D,oBACE,KAAW,cAAc,IAAoB,eAAe,GAC5D,KAAW,cAAcA,EAAiB,OAAO,QAAQ,EAC3D,aAAeE,GACN,KAAW,cAAcG,EAAoBH,CAAe,EAAE,MAAM,CAE/E,CACF,CAEO,SAASO,GAAmC,CACjD,KAAM,CAAE,uBAAAC,CAAuB,KAAI,MAAU,EACvCC,EAAyB,KAAW,cAAcN,EAAoB,IAAyB,EAAE,IAAI,EACrGO,EAA2B,KAAW,cAAcP,EAAoB,IAAyB,EAAE,MAAM,EAG/G,OAFmCK,GAA0BC,GAExBC,CACvC,C,yGCnIO,MAAMC,KAAsB,QAAK,CAAC,CAAE,WAAAC,EAAY,MAAAC,EAAO,SAAAC,EAAU,SAAAC,EAAU,UAAAC,CAAU,IAAa,CACvG,KAAM,CAAE,oBAAAC,CAAoB,KAAI,MAAgB,EAC1C/B,KAAW,eACd2B,GACQI,EAAqBL,EAAYC,CAAK,EAE/C,CAACD,EAAYK,CAAmB,CAClC,EAEA,OAAIL,GAAcK,GAAuBJ,GAAS,CAACE,KAE/C,OAAC,KAAiB,CAAC,MAAAF,EAAc,SAAA3B,EAAoB,kBAAiB,GACnE,UAAC,CAAE,IAAAgC,EAAK,gBAAAC,EAAiB,gBAAAC,CAAgB,OACxC,OAAC,KACC,MAAAP,EACA,UAAU,UACV,IAAAK,EACA,QAASC,EACT,aAAcC,EACd,UAAAJ,CAAA,CACF,EAEJ,KAGG,OAAC,IAAU,CAAC,MAAAH,EAAc,SAAAC,EAAoB,UAAAE,CAAA,CAAsB,CAC7E,CAAC,EAEDL,EAAoB,YAAc,qB,wHCzC3B,SAASU,GAA2E,CACzF,OAAO,OAAO,OAAO,IAAO,WAAW,CACzC,CAEO,SAASC,EAAmCC,EAAkC,CAGnF,GAAI,IAAC,MAA0B,IAAO,gBAAgB,WAAW,EAC/D,MAAO,CAAE,YAAa,EAAG,aAAc,EAAM,EAG/C,MAAMC,KAA6B,MAA4B,IAAO,gBAAgB,WAAW,EAEjG,GAAI,CAACD,GAA2B,IAAC,MAA0BA,CAAuB,EAChF,MAAO,CAAE,YAAaC,EAA4B,aAAc,EAAM,EAGxE,MAAMC,KAAkB,MAA4BF,CAAuB,EAErEG,EAAeF,EAA6BC,GAAmBA,EAAkB,EAEvF,MAAO,CAAE,YAAaD,EAA4B,aAAAE,CAAa,CACjE,CAEO,SAASC,GAAwB,CACtC,OAAO,IAAgB,OAAO,IAAO,IACvC,CAEO,SAASC,GAAoC,CAClD,OAAOD,EAAsB,EAAI,IAAgB,IAAM,IAAgB,QACzE,CAEO,SAASE,GAAkC,CAChD,OAAOF,EAAsB,EAAI,IAAgB,IAAM,IAAgB,MACzE,C,kFCaO,MAAMG,EAAyBxC,GAAqE,CACzG,MAAMyC,EAAQzC,EAAM,MAAM,MAC1B,GAAI,GAACyC,GAASA,EAAM,SAAW,GAI/B,MAAO,CACL,SAAWC,GAA0C,CACnD,MAAMC,EAA0C,CAAC,EAEjD,GAAI3C,EAAM,KAAM,CACd,KAAM,CAAE,UAAA4C,CAAU,EAAI5C,EAAM,KAE5B2C,EAAW,SAAc,CACvB,MAAO,CACL,KAAMC,EAAU,KAChB,MAAOA,EAAU,KACnB,EACA,KAAM,EAAE,6CAA8C,QAAQ,CAChE,EAEA,MAAMC,EAAQ7C,EAAM,WAAa,OAAY4C,EAAU,OAAO5C,EAAM,QAAQ,EAAI,OAEhF,GAAI6C,EAAO,CAST,GARAF,EAAW,QAAa,CACtB,MAAO,CACL,KAAME,EAAM,KACZ,OAAQA,EAAM,MAChB,EACA,KAAM,EAAE,4CAA6C,OAAO,CAC9D,EAEI7C,EAAM,WAAa,QAAaA,EAAM,UAAY,EAAG,CACvD,KAAM,CAAE,UAAA8C,CAAU,EAAI,aAAaF,CAAS,EAC5CD,EAAW,QAAa,CACtB,MAAO,CACL,IAAKE,EAAM,OAAO7C,EAAM,QAAQ,EAChC,QAASA,EAAM,QAAQ,QACvB,KAAM,uBAAuBA,EAAM,OAAO,EAC1C,KAAM8C,EAAYA,EAAU,OAAO9C,EAAM,QAAQ,EAAI,MACvD,EACA,KAAM,EAAE,4CAA6C,OAAO,CAC9D,CACF,CAGIA,EAAM,OACR2C,EAAW,OAAY,CACrB,MAAO,CACL,KAAMC,EAAU,KAChB,MAAOA,EAAU,MACjB,OAAQ,2BAA2B,CACjC,MAAOA,EACP,SAAU5C,EAAM,QAClB,CAAC,CACH,EACA,KAAM,EAAE,2CAA4C,MAAM,CAC5D,EAEJ,MAEE2C,EAAW,QAAa,CACtB,MAAO,CACL,IAAK3C,EAAM,QAAQ,QACnB,QAASA,EAAM,QAAQ,QACvB,KAAM,uBAAuBA,EAAM,OAAO,EAC1C,KAAMA,EAAM,IACd,EACA,KAAM,EAAE,4CAA6C,OAAO,CAC9D,CAEJ,MACE,QAAQ,IAAI,QAASA,CAAK,EAG5B,MAAM+C,EAA+B,CAAC/C,EAAegD,EAA8BC,IAA4B,CAC7G,MAAMC,EAAwB,CAC5B,GAAGP,EACH,GAAGK,CACL,EACA,OAAON,EAAiB1C,EAAOkD,EAAWD,CAAG,CAC/C,EAEA,OAAOR,EAAM,IAAKU,GACT,WAAW,EAAE,mBAAmBA,EAAMJ,EAAS/C,CAAK,CAC5D,CACH,CACF,CACF,EAEaoD,EAAwB,CACnCC,EACAX,IAC8C,CAC9C,MAAMD,EAAQY,EAAM,MAEpB,GAAI,GAACZ,GAASA,EAAM,SAAW,GAI/B,MAAO,CACL,SAAU,IACDA,EAAM,IAAKU,MACT,MAAW,EAAE,mBAAmBA,EAAMT,GAAoBW,EAAM,iBAAkBA,CAAK,CAC/F,CAEL,CACF,EAEaC,EAA6B,CACxCD,EACAX,IAC4C,CAC5C,MAAMD,EAAQ,KAAoB,cAAcY,CAAK,GAAG,MAAM,SAE9D,GAAI,GAACZ,GAASA,EAAM,SAAW,GAI/B,MAAO,CACL,SAAU,IACDA,EAAM,IAAKU,MACT,MAAW,EAAE,mBAAmBA,EAAMT,EAAkBW,CAAK,CACrE,CAEL,CACF,C,4FCvKO,MAAME,EAA2F,CACtG,GAAI,IAAkB,mBACtB,KAAM,wBACN,YAAa,4BACb,eAAgB,CAAC,EAMjB,SAAU,CAACC,EAASC,IAASC,GAC3BA,EAAO,KACL,IAAwB,SACtB,CACE,QAASC,EAAiBH,EAAQ,QAASA,EAAQ,UAAU,EAC7D,QAASG,EAAiBH,EAAQ,QAASA,EAAQ,UAAU,CAC/D,EACAC,CACF,CACF,CACJ,EAGaE,EAAmB,CAC9BH,EACAI,IAC8B,CAC9B,GAAI,CAACJ,EACH,OAGF,KAAM,CAAE,MAAAK,EAAO,QAAAC,EAAS,SAAAC,CAAS,EAAIP,EAErC,GAAII,GAAcG,EAAU,CAC1B,MAAMC,EAAgBD,EAEtB,GAAI,WAAW,KAAKC,CAAa,EAAG,CAClC,MAAMC,EAAkBD,EAAc,MAAM,CAAC,EAAE,MAAM,EAAG,EAAE,EAAE,MAAM,GAAG,EACrE,MAAO,CAAE,GAAI,KAAe,QAAS,QAAS,CAAE,MAAOC,CAAgB,CAAE,CAC3E,CACA,MAAO,CAAE,GAAI,KAAe,QAAS,QAAS,CAAE,MAAOD,EAAc,MAAM,GAAG,CAAE,CAAE,CACpF,CAEA,GAAK,IAAC,MAAM,QAAQH,CAAK,GAAKA,EAAM,SAAW,IAAM,CAACC,GAItD,OAAKA,EAID,CAAC,MAAM,QAAQD,CAAK,GAAKA,EAAM,SAAW,EACrC,CAAE,GAAI,KAAe,SAAU,QAASC,CAAQ,EAGlD,CAAE,GAAI,KAAe,gBAAiB,QAAAN,CAAQ,EAP5C,CAAE,GAAI,KAAe,QAAS,QAAS,CAAE,MAAAK,CAAM,CAAE,CAQ5D,C,iJC1BO,MAAMK,EAAkG,CAC7G,GAAI,IAAkB,iBACtB,KAAM,qBACN,YAAa,6CACb,eAAgB,CACd,OAAQ,CAAC,EACT,YAAa,CAAC,CAAE,YAAa,OAAW,gBAAiB,OAAW,WAAY,OAAW,SAAU,MAAU,CAAC,CAClH,EAEA,SAAU,CAACV,EAASC,IAASC,GAC3BA,EAAO,QAAK,KAAKS,GAASD,EAA4B,YAAYV,EAASC,CAAG,EAAEU,CAAI,CAAC,CAAC,EAExF,YAAcX,GAAiDW,GACzD,CAAC,MAAM,QAAQA,CAAI,GAAKA,EAAK,SAAW,EACnCA,EAEFC,EAAkBZ,EAASW,CAAI,GAAK,CAAC,CAEhD,EAQO,SAASC,EAAkBZ,EAA6Ca,EAAkC,CAC/G,GAAI,CAACb,EAAQ,YAAY,OACvB,OAAOa,EAGT,MAAMC,EAAaD,EAAO,IAAKE,IAAW,CAAE,GAAGA,CAAM,EAAE,EAEvD,UAAWC,KAAchB,EAAQ,YAAa,CAC5C,GAAI,CAACgB,EAAW,YACd,SAEF,MAAMC,EAAU,KAAc,IAAI,KAAe,MAAM,EAAE,IAAID,EAAW,WAAW,EACnF,UAAWD,KAASD,EAClBC,EAAM,OAASA,EAAM,OAAO,IAAK1B,GAC3B4B,EAAQ5B,EAAO0B,EAAOD,CAAU,EAC3BI,EAAiB7B,EAAO2B,CAAU,EAEpC3B,CACR,CAEL,CAEA,OAAOyB,CACT,CAUO,SAASI,EAAiB7B,EAAc8B,EAAsC,CACnF,OAAQA,EAAK,gBAAiB,CAC5B,KAAK,KAAU,KACb,OAAOC,EAAgB/B,EAAO8B,EAAK,UAAU,EAC/C,KAAK,KAAU,OACb,OAAOE,EAAmBhC,CAAK,EACjC,KAAK,KAAU,OACb,OAAOiC,EAAmBjC,EAAO8B,EAAK,WAAY,CAAE,SAAUA,EAAK,QAAS,EAAGA,EAAK,QAAQ,EAC9F,KAAK,KAAU,QACb,OAAOI,EAAoBlC,CAAK,EAClC,KAAK,KAAU,KACb,OAAOmC,EAAiBnC,EAAO8B,EAAK,UAAU,EAChD,KAAK,KAAU,MACb,OAAOM,EAAoBpC,CAAK,EAClC,QACE,OAAOA,CACX,CACF,CAGA,MAAMqC,EAAe,2EAKd,SAASC,EAAiBtC,EAAcuC,EAA4B,CACzE,IAAIT,EAAOS,EAAa,CAAE,OAAQA,CAAW,EAAI,OAEjD,MAAMC,EAAaxC,EAAM,OAAO,MAAM,EAEtC,IAAIyC,EAAeD,EAAW,KAAME,GAAMA,GAAK,IAAI,EACnD,MAAMC,EAAc,OAAOF,GAAiB,UAAYF,IAAe,IACjEK,EAAY,OAAOH,GAAiB,UAAYJ,EAAa,KAAKI,CAAY,EAEpF,QAASI,EAAI,EAAGA,EAAIL,EAAW,OAAQK,IACrC,GAAIL,EAAWK,CAAC,EAAG,CACjB,IAAIC,EAASF,EAAY,KAAK,MAAMJ,EAAWK,CAAC,CAAC,KAAI,KAAcL,EAAWK,CAAC,EAAGf,CAAI,EAAE,QAAQ,EAC5F,OAAO,SAASgB,CAAM,EACxBN,EAAWK,CAAC,EAAIF,EAAcG,EAAS,IAAOA,EAE9CN,EAAWK,CAAC,EAAI,IAEpB,MACEL,EAAWK,CAAC,EAAI,KAIpB,MAAO,CACL,GAAG7C,EACH,KAAM,KAAU,KAChB,OAAQwC,CACV,CACF,CAEA,SAASR,EAAmBhC,EAAqB,CAC/C,MAAM+C,EAAY/C,EAAM,OAAO,MAAM,EAE/BgD,EAAkBD,EAAU,KAAML,GAAM,OAAOA,GAAM,QAAQ,EAEnE,QAASO,EAAI,EAAGA,EAAIF,EAAU,OAAQE,IAAK,CACzC,IAAIC,EAAgBH,EAAUE,CAAC,EAE3BD,GAAmBE,GAAiB,MAAQ,OAAOA,GAAkB,WAGvEA,EAAgBA,EAAc,QAAQ,KAAM,EAAE,GAGhD,MAAMC,EAAS,CAACD,EAEhBH,EAAUE,CAAC,EAAI,OAAO,SAASE,CAAM,EAAIA,EAAS,IACpD,CAEA,MAAO,CACL,GAAGnD,EACH,KAAM,KAAU,OAChB,OAAQ+C,CACV,CACF,CAEA,SAASb,EAAoBlC,EAAqB,CAChD,MAAMoD,EAAgBpD,EAAM,OAAO,MAAM,EAEzC,QAASqD,EAAI,EAAGA,EAAID,EAAc,OAAQC,IACxCD,EAAcC,CAAC,EAAI,EAAUD,EAAcC,CAAC,EAG9C,MAAO,CACL,GAAGrD,EACH,KAAM,KAAU,QAChB,OAAQoD,CACV,CACF,CAKO,SAASnB,EACdjC,EACAuC,EACAe,EACAC,EACO,CACP,IAAIC,EAASxD,EAAM,OAEnB,OAAQA,EAAM,KAAM,CAClB,KAAK,KAAU,KACbwD,EAASA,EAAO,IAAKd,MAAM,KAAcA,EAAGY,CAAY,EAAE,OAAOf,CAAU,CAAC,EAC5E,MAIF,KAAK,KAAU,OACf,KAAK,KAAU,MACbiB,EAASA,EAAO,IAAKd,GACfa,GAAU,QAAU,MAAM,QAAQb,CAAC,EAC9BA,EAAE,KAAKa,CAAQ,EAEjB,KAAK,UAAUb,CAAC,CACxB,EACD,MAEF,QACEc,EAASA,EAAO,IAAKd,GAAM,GAAGA,CAAC,EAAE,CACrC,CAEA,MAAO,CACL,GAAG1C,EACH,KAAM,KAAU,OAChB,OAAAwD,CACF,CACF,CAEA,SAASpB,EAAoBpC,EAAqB,CAChD,MAAMyD,EAAgBzD,EAAM,OAAO,MAAM,EAEzC,QAAS0D,EAAI,EAAGA,EAAID,EAAc,OAAQC,IACxC,GAAI,CACFD,EAAcC,CAAC,EAAI,KAAK,MAAMD,EAAcC,CAAC,CAAC,CAChD,MAAQ,CACND,EAAcC,CAAC,EAAI,IACrB,CAGF,MAAO,CACL,GAAG1D,EACH,KAAM,KAAU,MAChB,OAAQyD,CACV,CACF,CAUO,SAAS1B,EAAgB/B,EAAcuC,EAA4B,CACxE,MAAMoB,EAAyB,OAAO3D,EAAM,OAAO,CAAC,GAAM,SAEpD4D,EAAsBrB,IAAe,IAE3C,OAAIvC,EAAM,OAAS,KAAU,MAAQ2D,EAC5B3D,EAEL2D,GAA0B,CAACC,EACtB,CACL,GAAG5D,EACH,KAAM,KAAU,IAClB,EAEKsC,EAAiBtC,EAAOuC,CAAU,CAC3C,CAEA,SAASJ,EAAiBnC,EAAc6D,EAAiC,CACvE,MAAMC,EAAa,CAAE,GAAGD,CAAO,EACzBE,EAAa/D,EAAM,OAAO,MAAM,EAGhCgE,EAAS,IAAI,IACnB,GAAIF,EAAW,MAAQA,EAAW,KAAK,OAAS,EAC9C,QAASG,EAAI,EAAGA,EAAIH,EAAW,KAAK,OAAQG,IAC1CD,EAAO,IAAIF,EAAW,KAAKG,CAAC,EAAGA,CAAC,MAGlC,QAAOjE,EAIT,QAASiE,EAAI,EAAGA,EAAIF,EAAW,OAAQE,IAAK,CAC1C,MAAM9G,EAAQ4G,EAAWE,CAAC,EAC1BF,EAAWE,CAAC,EAAID,EAAO,IAAI7G,CAAK,CAClC,CAEA,MAAO,CACL,GAAG6C,EACH,OAAQ,CACN,GAAGA,EAAM,OACT,KAAM,CACJ,KAAM8D,CACR,CACF,EACA,KAAM,KAAU,KAChB,OAAQC,CACV,CACF,C,+CClTO,SAASG,EAAmBC,EAAsBC,EAA2B,CAClF,MAAMC,EAAa,uBACnB,OAAOF,EAAa,QAAQE,EAAY,CAACC,EAAGC,IAAQH,EAAUG,CAAE,EAAIH,EAAUG,CAAE,EAAIA,CAAG,CACzF,C,gHCaO,MAAMC,EAAuC,CAClD,KAAM,IAAe,SACrB,MAAO,CACL,CAAE,MAAO,KAAW,MAAO,OAAQ,EACnC,CAAE,MAAO,GAAI,MAAO,KAAM,CAC5B,CACF,EAEO,SAASC,EACdC,EACAC,EACAC,EACAC,EACgB,CAChB,MAAMC,EAAYF,GAAU,KACtBG,EAAyBF,IAAgB,KAAe,SAAWF,EAASD,EAC5EM,EAAgB,KAAK,IAAKD,EAAyB,IAAQ,IAAK,EAAE,EAClEE,EAAcD,EAAgB,IAC9BE,EAAkBJ,EAAYH,EAASM,EAAcN,EACrDQ,EAAc,KAAK,IAAID,EAAiBR,CAAK,EAEnD,MAAO,CACL,UAAAI,EACA,YAAAK,EACA,cAAAH,CACF,CACF,CAEO,SAASI,EACdC,EACArF,EACAsF,EACa,CACb,MAAMC,EAAavF,EAAM,YAAcwE,EACjCgB,EAAYD,EAAW,OAAS,IAAe,WAC/CE,EAAQF,EAAW,MAEzB,IAAIG,EAAM1F,EAAM,KAAO,KACnB2F,EAAM3F,EAAM,KAAO,KAEnBwF,IACFE,EAAM,EACNC,EAAM,KAGR,MAAMC,KAAQ,MAAmBF,EAAKD,CAAK,EACrCI,KAAO,MAAmBF,EAAKF,CAAK,EACpCK,EAAyB,CAC7B,CAAE,MAAO,CAACJ,EAAI,QAAQL,CAAQ,EAAG,MAAOC,EAAM,cAAc,eAAeM,EAAM,KAAK,CAAE,CAC1F,EACA,IAAIG,EAAO,GACX,QAAS9B,EAAI,EAAGA,EAAIwB,EAAM,OAAQxB,IAAK,CACrC,MAAM+B,EAAOP,EAAMxB,CAAC,EACpB,GAAI8B,EAAM,CACJH,IAAUI,IACZD,EAAO,IAET,QACF,CACA,MAAME,EAAOR,EAAMxB,EAAI,CAAC,EAExB,GADA6B,EAAU,KAAK,CAAE,MAAOE,EAAK,MAAO,MAAOV,EAAM,cAAc,eAAeW,EAAK,KAAK,CAAE,CAAC,EACvFD,IAASH,EACX,KAEJ,CACA,OAAAC,EAAU,KAAK,CAAE,MAAO,CAACH,EAAI,QAAQN,CAAQ,EAAG,MAAOC,EAAM,cAAc,eAAeO,EAAK,KAAK,CAAE,CAAC,EAChGC,CACT,C,u5QC9EO,MAAMI,EAA2BC,IAAwD,CAC9F,MAAMC,GAASD,GAAM,YAAY,WACjC,SACE,OAAC,IAAW,oBAAX,CAAgC,GAAGA,GAClC,mBAACE,EAAA,EAAI,CAAC,KAAMD,GAAS,WAAa,aAAc,MAAO,CAAE,UAAW,KAAM,EAAG,EAC/E,CAEJ,EAEA,EAAeF,ECRFI,EAAuCH,IAAoB,CACtE,KAAM,CAAE,SAAAI,EAAS,EAAIJ,GACrB,SACE,OAAC,IAAW,iBAAX,CAA6B,GAAGA,GAC/B,mBAAC,OAAI,UAAU,kCACb,mBAAC,OAAI,UAAU,wCAAyC,SAAAI,EAAA,CAAS,EACnE,EACF,CAEJ,EAEA,EAAeD,E,0HCRR,MAAME,EAAgBL,IAA+B,CAC1D,KAAM,CAAE,SAAAI,GAAU,WAAAE,GAAY,KAAAnF,EAAK,EAAI6E,GAEvC,SACE,OAAC,IAAW,OAAX,CAAmB,GAAGA,GACrB,oBAAC,OAAI,UAAU,kCACZ,UAAA7E,GAAK,WAAU,OAAC,OAAI,UAAU,uCAAuC,IAAKA,GAAK,OAAQ,IAAI,EAAG,MAC/F,QAAC,OAAI,UAAU,wCACb,oBAAC,OAAK,SAAAiF,EAAA,CAAS,EACdjF,GAAK,gBAAe,OAAC,OAAI,UAAU,wCAAyC,SAAAA,GAAK,YAAY,GAChG,EACCmF,OAAc,OAACJ,EAAA,EAAI,CAAC,KAAK,QAAQ,cAAY,MAAO,IACvD,EACF,CAEJ,EAEA,EAAe,K,qCCNf,MAAMK,KAA6BC,EAAA,GAAerB,KACzC,CACL,UAAQ,OAAI,CACV,QAAS,OACT,WAAY,SACZ,eAAgB,aAChB,aAAc,SACd,OAAQ,UACR,QAAS,WACT,MAAO,OACP,aAAc,aAAaA,GAAM,OAAO,WAAW,SAAS,GAE5D,UAAW,CACT,MAAOA,GAAM,OAAO,KAAK,WAC3B,CACF,CAAC,EACD,SAAO,OAAI,CACT,SAAU,CACZ,CAAC,EACD,QAAM,OAAI,CACR,aAAc,KAChB,CAAC,CACH,EACD,EAED,MAAMsB,UAAkC,eAAyC,CAAjF,kCACE,WAAQ,CACN,SAAU,EACZ,EAoBA,sBAAmB,IAAM,CACvB,KAAK,SAAUC,KAAe,CAC5B,SAAU,CAACA,GAAU,QACvB,EAAE,CACJ,EAtBA,mBAAoB,CAClB,GAAI,KAAK,MAAM,KAAK,SAClB,KAAK,SAAS,CAAE,SAAU,EAAK,CAAC,UACvB,KAAK,MAAM,aAAe,KAAK,MAAM,YAAY,MAAO,CACjE,KAAM,CAAE,MAAA1J,EAAM,EAAI,KAAK,MAAM,YAAY,MAErCA,IAAS,KAAK,MAAM,QAAQ,KAAM2J,IAAWA,GAAO,QAAU3J,EAAK,GACrE,KAAK,SAAS,CAAE,SAAU,EAAK,CAAC,CAEpC,CACF,CAEA,mBAAmB4J,GAA+B,CAC5CA,GAAU,YAAY,aAAe,IACvC,KAAK,SAAS,CAAE,SAAU,EAAK,CAAC,CAEpC,CAQA,QAAS,CACP,KAAM,CAAE,SAAAR,GAAU,MAAAS,GAAO,MAAA1B,EAAM,EAAI,KAAK,MAClC,CAAE,SAAA2B,EAAS,EAAI,KAAK,MACpBC,GAASR,EAA2BpB,EAAK,EAE/C,SACE,QAAC,OAGC,qBAAC,OAAI,UAAW4B,GAAO,OAAQ,QAAS,KAAK,iBAAkB,KAAK,eAClE,oBAAC,QAAK,UAAWA,GAAO,MAAQ,SAAAF,EAAA,CAAM,KACtC,OAACX,EAAA,EAAI,CAAC,UAAWa,GAAO,KAAM,KAAMD,GAAW,WAAa,aAAc,GAC5E,EACCA,IAAYV,EAAA,EACf,CAEJ,CACF,CAEO,MAAMY,KAAoB,MAAWP,CAAyB,ECnDxDQ,EAAYjB,OAErB,OAAC,IAAW,SAAX,CAAqB,GAAGA,GACvB,mBAACkB,EAAA,EAAe,CAAC,qBAAoB,GAAC,UAAU,SAAS,UAAU,UAChE,SAAAlB,GAAM,SACT,EACF,EAKG,MAAMmB,UAAkB,eAAoC,CAEjE,MAAO,CAAP,KAAO,YAAc,IAErB,MAAO,CAAP,KAAO,aAAoD,CACzD,UAAW,GACX,WAAY,GACZ,aAAc,GACd,YAAa,GACb,QAAS,GACT,gBAAiB,GACjB,UAAW,GACX,UAAW,GACX,sBAAuB,GACvB,cAAe,IACf,gBAAiB,GACjB,iBAAkB,GAClB,WAAY,CACV,OAAQd,EACR,YAAW,IACX,oBAAmB,EACnB,SAAAY,EACA,MAAOD,CACT,CACF,EAEA,QAAS,CACP,KAAM,CACJ,aAAAI,GACA,eAAAC,GACA,eAAAC,GACA,SAAA1K,GACA,QAAA4D,GACA,YAAA+G,GACA,MAAAhD,GACA,MAAAvH,GACA,UAAAwK,GACA,WAAAC,GACA,UAAAC,GACA,aAAAC,GACA,YAAAC,GACA,sBAAAC,GACA,QAAAC,GACA,UAAAC,GACA,gBAAAC,GACA,OAAAC,GACA,cAAAC,GACA,iBAAAC,GACA,OAAAlC,GACA,WAAAmC,GACA,eAAAC,GACA,gBAAAC,GACA,YAAAC,GACA,WAAAC,GACA,iBAAAC,GACA,kBAAAC,GACA,aAAcC,EAChB,EAAI,KAAK,MAET,IAAIC,GAAa,GACbrE,KACFqE,GAAa,SAAWrE,IAG1B,IAAIsE,GAAkB,KACtB,MAAMC,GAAwB,CAAC,EAE3BL,KACFI,GAAkB,IAClBC,GAAiB,kBAAoBJ,KAAuBK,IAAkBA,KAGhF,MAAMC,GAAmB,IAAW,gBAAiB,+BAAgCJ,GAAYpB,EAAS,EACpGyB,GAAmB,CAAE,GAAG9B,EAAO,aAAa,WAAY,GAAGiB,EAAW,EAC5E,SACE,OAACc,EAAA,CAAc,YAAAX,GAA0B,WAAAC,GAAwB,eAAAH,GAAgC,OAAApC,GAC9F,UAACkD,GAAoBC,QAElB,OAACP,GAAA,CACC,kBAAmB,GACnB,gBAAgB,qBAChB,UAAWG,GACX,WAAYC,GACZ,aAAA7B,GACA,MAAApK,GACA,eAAAqK,GACA,eAAAC,GACA,yBAA0B,GAC1B,aAAAK,GACA,SAAA/K,GACA,QAAA4D,GACA,YAAa+G,IAAe,SAC5B,UAAQ8B,EAAA,GAAkB,KAAK,OAAO,EACtC,WAAA5B,GACA,UAAAC,GACA,YAAAE,GACA,UAAAG,GACA,OAAAE,GACA,gBAAAD,GACA,cAAAE,GACA,iBAAAC,GACA,QAAAL,GACA,sBAAAD,GACA,WAAY5B,GACZ,WAAYkD,GACZ,YAAaC,GACb,gBAAAd,GACA,aAAYK,GACX,GAAGG,EAAA,CACN,CAEJ,CACF,CAEJ,CACF,CAGO,MAAMQ,UAAuB,eAA6B,CAC/D,MAAO,CAAP,KAAO,YAAc,IAErB,MAAO,CAAP,KAAO,aAA6C,CAClD,UAAW,GACX,WAAY,CAAC,EACb,eAAgB,IAAM,aACtB,WAAY,GACZ,YAAa,GACb,QAAS,GACT,aAAc,GACd,sBAAuB,GACvB,UAAW,GACX,gBAAiB,GACjB,cAAe,GACjB,EAEA,QAAS,CACP,KAAM,CACJ,aAAAlC,GACA,eAAAC,GACA,eAAAC,GACA,SAAA1K,GACA,YAAA2K,GACA,MAAAhD,GACA,MAAAvH,GACA,UAAAwK,GACA,YAAA+B,GACA,eAAAC,GACA,UAAA9B,GACA,eAAA+B,GACA,iBAAAtB,GACA,WAAAV,GACA,aAAAE,GACA,YAAAC,GACA,sBAAAC,GACA,UAAAE,GACA,OAAAE,GACA,gBAAAD,GACA,cAAAE,GACA,QAAAJ,GACA,eAAAO,GACA,YAAAE,GACA,WAAAC,GACA,OAAAvC,EACF,EAAI,KAAK,MAET,IAAI2C,GAAa,GACbrE,KACFqE,GAAa,SAAWrE,IAG1B,MAAMyE,GAAmB,IAAW,gBAAiB,+BAAgCJ,GAAYpB,EAAS,EAE1G,SACE,OAAC0B,EAAA,CAAc,YAAAX,GAA0B,WAAAC,GAAwB,eAAAH,GAAgC,OAAApC,GAC9F,UAACkD,GAAoBC,QAElB,OAAC,KACC,kBAAmB,GACnB,gBAAgB,qBAChB,UAAWJ,GACX,WAAY,CACV,OAAQ3C,EACR,YAAW,IACX,oBAAmB,EACnB,iBAAgB,CAClB,EACA,aAAAe,GACA,MAAApK,GAEA,eAAAqK,GAEA,eAAAC,GACA,yBAA0B,GAE1B,SAAA1K,GACA,YAAA2M,GACA,UAAA7B,GACA,eAAA8B,GACA,YAAajC,IAAe,SAE5B,UAAQ8B,EAAA,GAAkB,KAAK,OAAO,EACtC,eAAAI,GACA,iBAAAtB,GACA,WAAAV,GACA,aAAAE,GACA,YAAAC,GACA,UAAAG,GACA,OAAAE,GACA,gBAAAD,GACA,cAAAE,GACA,QAAAJ,GACA,sBAAAD,EAAA,CACF,CAEJ,CACF,CAEJ,CACF,CAcO,MAAMqB,UAAsB,eAAwD,CAApF,kCACL,WAA6B,CAC3B,eAAgB,EAClB,EAEA,gBAAa,IAAM,CACjB,KAAM,CAAE,WAAAV,EAAW,EAAI,KAAK,MACxBA,IACFA,GAAW,EAEb,KAAK,SAAS,CAAE,eAAgB,EAAK,CAAC,CACxC,EAEA,iBAAc,IAAM,CAClB,KAAM,CAAE,YAAAD,EAAY,EAAI,KAAK,MACzBA,IACFA,GAAY,EAEd,KAAK,SAAS,CAAE,eAAgB,EAAM,CAAC,CACzC,EAEA,QAAS,CACP,KAAM,CAAE,SAAAnC,GAAU,OAAAH,GAAQ,eAAAoC,EAAe,EAAI,KAAK,MAC5C,CAAE,eAAAqB,EAAe,EAAI,KAAK,MAEhC,IAAIC,GAMJ,OAJID,IAAkBzD,MACpB0D,GAAc,IAGZtB,MAEA,OAACuB,EAAA,EAAO,CAAC,KAAMD,GAAa,QAAStB,GAAgB,UAAU,SAC7D,mBAAC,OAEE,SAAAjC,GAAS,KAAK,WAAY,KAAK,WAAW,EAC7C,EACF,KAGK,OAAC,OAAK,SAAAA,GAAS,KAAK,WAAY,KAAK,WAAW,EAAE,CAE7D,CACF,CAEA,QAAe,K,cC/Sf,MAAMyD,UAAuB,eAA4B,CAAzD,kCACE,WAAQ,CACN,MAAI,YAAS,CACf,EAEA,sBAAoBC,IAA6C,CAC/DA,GAAM,gBAAgB,EACtB,KAAK,MAAM,SAASA,EAAK,CAC3B,EAEA,QAAS,CACP,KAAM,CACJ,WAAAC,GAAa,GACb,YAAAC,GAAc,GACd,MAAAnD,GACA,QAAAoD,GACA,SAAAC,GACA,YAAAC,GACA,UAAA3C,GACA,MAAArC,GACA,QAAAiF,GACA,iBAAAC,EACF,EAAI,KAAK,MACHtD,GAASuD,EAAUnF,EAAK,EAExBoF,GAAU,KAAK,MAAM,GACrBC,GAAiB,iBAAiBT,EAAU,IAAII,GAAc,6BAA+B,EAAE,WAC/FM,MAAkB,MAAG1D,GAAO,OAAQiD,GAAa,CACrD,CAACjD,GAAO,iBAAiB,EAAGoD,EAC9B,CAAC,EAED,SACE,OAAC,OAAI,UAAWpD,GAAO,UACrB,oBAAC,SAAM,QAASwD,GAAS,aAAW,MAAG,UAAWxD,GAAO,eAAgBS,EAAS,EAC/E,UAAAX,OACC,QAAC,OAAI,UAAW2D,GACb,UAAA3D,GACAuD,OACC,OAACR,EAAA,EAAO,CAAC,UAAWS,IAAsC,OAAQ,QAASD,GAAS,MAAO,OACzF,mBAAClE,EAAA,EAAI,CAAC,KAAK,cAAc,KAAK,KAAK,MAAO,CAAE,WAAY,MAAO,EAAG,EACpE,GAEJ,KAEF,QAAC,OAAI,UAAWuE,GACd,oBAAC,SACC,SAAAP,GACA,GAAIK,GACJ,KAAK,WACL,QAAAN,GACA,SAAU,KAAK,iBACjB,KACA,OAAC,QAAK,UAAWlD,GAAO,OAAQ,GAClC,GACF,EACF,CAEJ,CACF,CAEO,MAAM2D,KAAS,MAAWb,CAAc,EAEzCS,EAAanF,IAAyB,CAC1C,MAAMwF,MAAS,OAAI,CACjB,WAAYxF,GAAM,GAAG,QAAQ,MAC7B,aAAcA,GAAM,MAAM,OAAO,KACjC,OAAQ,OACR,MAAO,OACP,QAAS,QACT,SAAU,WAEV,YAAa,CACX,SAAU,WACV,QAAS,KACT,OAAQ,OACR,MAAO,OACP,KAAM,MACN,IAAK,MACL,WAAYA,GAAM,WAAW,MAAM,WACnC,CAACA,GAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAY,MACd,EACA,aAAcA,GAAM,MAAM,OAAO,OACjC,UAAWA,GAAM,QAAQ,EAC3B,CACF,CAAC,EACD,MAAO,CACL,aAAW,OAAI,CACb,QAAS,OACT,WAAY,CACd,CAAC,EACD,kBAAgB,OAAI,CAClB,QAAS,OACT,OAAQ,UACR,YAAaA,GAAM,QAAQ,EAAG,CAChC,CAAC,EACD,UAAQ,OAAI,CACV,QAAS,OACT,SAAU,WACV,MAAO,OACP,OAAQA,GAAM,QAAQ,CAAC,EACvB,WAAYA,GAAM,WAAW,MAAM,WACnC,OAAQ,aAAaA,GAAM,WAAW,MAAM,WAAW,GACvD,aAAcA,GAAM,MAAM,OAAO,QACjC,WAAY,SACZ,eAAgB,SAChB,MAAO,CACL,QAAS,EACT,MAAO,EACP,OAAQ,CACV,EACA,CAAC,oBAAoBwF,EAAM,EAAE,EAAG,CAC9B,WAAYxF,GAAM,OAAO,QAAQ,IACnC,EAEA,CAAC,oBAAoBwF,EAAM,UAAU,EAAG,CACtC,UAAW,kBACb,CACF,CAAC,EACD,qBAAmB,OAAI,CACrB,WAAY,cACZ,OAAQ,EACR,MAAO,MACT,CAAC,EACD,OAAAA,EACF,CACF,E,+FC5JI,OAAO,OAAW,KAAe,YAAa,QAAU,CAAC,QAAQ,UAAU,UAC7E,QAAQ,UAAU,QAAU,SAAqBpH,GAAW,CAC1D,MAAM9B,IAAW,KAAK,UAAY,KAAK,eAAe,iBAAiB8B,EAAC,EACxE,IAAIqH,GAAK,KACL9G,GAEJ,EAAG,CAGD,IAFAA,GAAIrC,GAAQ,OAEL,EAAEqC,IAAK,GAAKrC,GAAQ,KAAKqC,EAAC,IAAM8G,IAAI,CAC3CA,GAAKA,GAAG,aACV,OAAS9G,GAAI,GAAK8G,IAClB,OAAOA,EACT,GAGK,SAASC,EAAkBC,GAAmBC,GAAkB,CACrE,IAAIC,GAAUF,GAAK,eAAe,gBAC9BF,GACJ,KAAOI,IAAS,CAId,GAHIA,cAAmB,cACrBJ,GAAKI,GAAQ,cAAcD,EAAQ,GAEjCH,GACF,OAAOA,GAETI,GAAUA,GAAQ,eACpB,CAEF,CAEO,SAASC,EAAiBC,GAA4B,CAC3D,MAAMC,IAAaD,IAAU,QAAQ,aAAa,EAClD,GAAI,CAACC,IAAa,CAACA,GAAU,WAC3B,OAAO,KAGT,MAAMC,GAAQD,GAAU,WAAW,CAAC,EAC9BE,GAAOF,GAAU,WAAW,YAC5BG,GAASF,GAAM,YACrB,OAAOC,GAAM,MAAMC,GAAQA,GAAS,CAAC,CACvC,C,yNCTO,MAAMC,GAAkBvF,IAA+B,CAC5D,KAAM,CAAE,SAAApJ,GAAU,UAAA4K,GAAW,SAAAgE,GAAU,KAAAC,GAAM,YAAAC,GAAa,aAAAC,GAAc,QAAAC,GAAS,SAAA1B,GAAU,GAAG2B,EAAK,EAAI7F,GACjGe,MAAS,MAAW,EAAS,EAC7B+E,MAAiB,MAAW,IAAiB,EAInD,IAAIC,GAA2B/F,GAAM,SACrC,OAAK2F,KACHI,GAAU,CAAC/F,GAAM,YAAU,OAACE,EAAA,EAAI,CAAmB,KAAK,aAAa,UAAWa,GAAO,MAAM,OAAvD,WAA8D,CAAE,MAItG,OAAC,MACC,YAAU,MAAiBnK,EAAQ,EACnC,YAAU,MAAmB4O,EAAQ,EACrC,qBAAmB,MAAGM,GAAe,SAAU/E,GAAO,KAAK,EAC1D,GAAG8E,GACJ,WAAY,KAEZ,mBAACG,GAAA,GAAM,CAAC,KAAAP,GAAY,SAAAvB,GAAoB,QAAA0B,GAAmB,GAAIF,IAAe,CAAC,EAC5E,SAAAK,EAAA,CACH,EACF,CAEJ,EAEAR,GAAe,YAAc,iBAE7B,MAAM,GAAapG,KACV,CACL,SAAO,OAAI,CACT,MAAO,QACP,OAAQA,GAAM,OAAO,QACvB,CAAC,EACD,MAAO,CACL,SAAO,OAAI,CACT,OAAQ,aACV,CAAC,EACD,QAAM,OAAI,CACR,OAAQ,cACV,CAAC,CACH,CACF,G,wHCpDK,MAAM8G,MAAmB,cAC9B,CAAC,CAAE,MAAAjP,GAAQ,GAAI,SAAAJ,GAAU,cAAAsP,GAAgB,MAAO,GAAGC,EAAW,EAAGvN,KAAQ,CACvE,KAAM,CAACwN,GAAcC,EAAQ,KAAI,YAASrP,EAAK,EACzC,CAACiJ,GAAQqG,EAAS,KAAI,YAAS,EAAK,EACpCnH,MAAQ,MAAU,EAClB4B,MAAS,MAAW,EAAS,EAC7BwF,MAAgB,MAAW,IAAgB,KAEjDC,GAAA,GACGC,IAAM,CACL,GAAIA,KAAMzP,GACR,OAGF,GAAI,CAACyP,GAAG,CACN7P,GAAS,EAAE,EACX,MACF,CACA,MAAM2B,GAAQ4G,GAAM,cAAc,eAAesH,EAAC,EAEhD7P,GADEsP,KAAkB,MACXQ,GAAA,GAAiB,YAAYnO,EAAK,EAElCmO,GAAA,GAAiB,YAAYnO,EAAK,CAFC,CAIhD,EACA,IACA,CAAC6N,EAAY,CACf,EAEA,MAAMO,GAAcC,IAAsC,CAE/B,SAAS,cAAc,+BAA+B,GAAG,SAASA,GAAI,aAAa,GAE1GN,GAAU,EAAK,CAEnB,EAEA,SACE,OAACO,GAAA,EAAmB,CAAC,QAAS,IAAMP,GAAU,EAAK,EACjD,oBAAC,OAAI,UAAWvF,GAAO,QACpB,UAAAd,IAAU,CAACkG,GAAW,aACrB,OAAC,OACC,cAAa,gBACb,MAAOC,GACP,SAAUC,GACV,aAAW,MAAGE,GAAc,KAAMxF,GAAO,MAAM,EACjD,KAEF,OAAC+F,GAAA,GACE,GAAGX,GACJ,MAAAhH,GACA,MAAOiH,GACP,SAAUC,GACV,gBAAgB,oBAChB,QAAS,IAAMC,GAAU,EAAI,EAC7B,OAASS,IAAMJ,GAAWI,EAAC,EAC3B,IAAAnO,GACA,YAAW,GACb,GACF,EACF,CAEJ,CACF,EAEAqN,GAAiB,YAAc,mBAE/B,MAAM,GAAa9G,KACV,CACL,WAAS,OAAI,CACX,SAAU,UACZ,CAAC,EACD,UAAQ,OAAI,CACV,mBAAoB,CAClB,SAAU,WACV,MAAO,OACP,OAAQ,GACR,OAAQ,MACV,CACF,CAAC,EACD,SAAO,OAAI,CACT,SAAU,UACZ,CAAC,CACH,G,kPCpGK,MAAM6H,MAAmB,QAAK,IAAM,CACzC,MAAMjG,MAAS,MAAW,EAAS,EACnC,SACE,QAAC,OAAI,UAAWA,GAAO,SACrB,oBAAC,QAAK,UAAWA,GAAO,SAAW,aAAI,KACvC,OAAC,QAAK,UAAWA,GAAO,UAAY,aAAI,KACxC,OAAC,QAAK,UAAWA,GAAO,SAAW,aAAI,GACzC,CAEJ,CAAC,EAEDiG,GAAiB,YAAc,mBAE/B,MAAM,GAAa7H,KACV,CACL,YAAU,OAAI,CACZ,QAAS,QACX,CAAC,EACD,YAAU,OAAI,CACZ,CAACA,GAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,UAAW,GAAG8H,EAAQ,qBACxB,CACF,CAAC,EACD,aAAW,OAAI,CACb,CAAC9H,GAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,UAAW,GAAG+H,EAAS,qBACzB,CACF,CAAC,EACD,YAAU,OAAI,CACZ,CAAC/H,GAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,UAAW,GAAGgI,EAAQ,qBACxB,CACF,CAAC,CACH,GAGIF,MAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeXC,MAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBZC,MAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IClEXC,GAAwB,EAAI,IAgB3B,SAASC,GAA0BrH,GAAiB,CACzD,KAAM,CACJ,QAAAsH,GACA,QAAAC,GACA,eAAAC,GACA,iBAAAC,GAAmB,0BACnB,MAAAC,GACA,SAAAtH,GACA,SAAA8D,GACA,GAAGyD,EACL,EAAI3H,GAEE,CAAC4H,GAAYC,EAAa,EAAI,WAAe,CACjD,UAAW,GACX,YAAa,GACb,UAAWP,EACb,CAAC,EAEKQ,MAAW,UAAuB,IAAI,EAE5C,YAAgB,IAAM,CACpB,IAAIC,GACJ,GAAIH,GAAW,YAAa,CAC1B,MAAMI,GAAOJ,GAAW,UAAY,EAAIR,GACxCW,GAAY,WAAW,IAAM,CAC3BF,GAAc,CAAE,GAAGD,GAAY,YAAa,EAAM,CAAC,CACrD,EAAGI,EAAI,CACT,CAEA,MAAO,IAAM,CACX,OAAO,aAAaD,EAAS,CAC/B,CACF,EAAG,CAACH,EAAU,CAAC,EAEf,MAAMK,MAAe,eAClBC,IAAiB,CACZZ,KAGJO,GAAc,CAAE,GAAGD,GAAY,UAAW,GAAM,YAAa,EAAM,CAAC,EACpEJ,GAAeU,EAAS,EACrB,KAAK,IAAM,CACVL,GAAc,CACZ,UAAW,GACX,YAAa,GACb,UAAW,EACb,CAAC,CACH,CAAC,EACA,MAAM,IAAM,CACXA,GAAc,CACZ,GAAGD,GACH,UAAW,GACX,UAAW,EACb,CAAC,CACH,CAAC,EACL,EACA,CAACN,GAASM,GAAYJ,EAAc,CACtC,EAEMW,MAAiB,WAAQ,OAAM,YAASF,GAAc,IAAK,CAAE,QAAS,EAAM,CAAC,EAAG,CAACA,EAAY,CAAC,EAE9FG,GAAYd,IAAWM,GAAW,WAAa,OAK/C7G,MAAS,MAAW,EAAS,EAEnC,SACE,oBACE,oBAACsH,GAAA,GACE,GAAGV,GACJ,QAASJ,IAAW,OACpB,QAASa,GACT,SAAAlE,GACA,MAAOwD,IAAUE,GAAW,WAAaH,GACzC,IAAKK,GACL,UAAW/G,GAAO,gBAEjB,wBACCX,GAAUkI,IAAa,CACrBH,GAAeG,EAAQ,CACzB,CAAC,CACH,EACF,EACCV,GAAW,cACV,OAACW,GAAA,EAAW,CAAC,iBAAkBT,GAAS,QAAS,UAAU,QACzD,oBAAC,MAAK,CAAC,QAAQ,oCAAoC,uBAC1C,OAACd,GAAgB,EAAC,GAC3B,EACF,EAEDY,GAAW,gBACV,OAACW,GAAA,EAAW,CAAC,WAAY,QAAS,iBAAkBT,GAAS,QAAS,UAAU,QAC9E,mBAAC,MAAK,CAAC,QAAQ,mCAAmC,kBAAM,EAC1D,GAEJ,CAEJ,CAEAT,GAAc,YAAc,gBAE5B,MAAM,GAAY,KACT,CACL,mBAAiB,OAAI,CACnB,MAAO,aACT,CAAC,CACH,G,gKCzHK,MAAMmB,GAAkB,CAAC,CAAE,SAAApI,EAAS,IAAsC,CAC/E,MAAMW,MAAS,MAAW,EAAS,EAEnC,SACE,OAAC,OACC,mBAAC,OAAI,UAAWA,GAAO,OACrB,mBAAC,OAAI,UAAWA,GAAO,QAAU,SAAAX,EAAA,CAAS,EAC5C,EACF,CAEJ,EAEM,GAAajB,KAA0B,CAC3C,UAAQ,OAAI,CACV,QAAS,OACT,OAAQA,GAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,CAClC,CAAC,EACD,WAAS,OAAI,CACX,SAAU,CACZ,CAAC,CACH,G,uFCNO,MAAMsJ,WAA8B,eAA4B,CACrE,YAAYzI,GAAc,CACxB,MAAMA,EAAK,EASb,gBAAU,YAAS,IAAM,CACvB,KAAM,CAAE,OAAAtC,EAAO,EAAI,KAAK,MAClB,CAAE,KAAA2H,EAAK,EAAI,KAAK,MAEtB,KAAK,SAAS,CAAE,QAAM,OAAQA,GAAM,CAAE,OAAA3H,EAAO,CAAC,CAAE,CAAC,CACnD,EAAG,GAAG,EAmBN,kBAAgBoG,IAAkD,CAChE,KAAK,SAAS,CAAE,KAAMA,GAAM,OAAO,KAAM,CAAC,CAC5C,EAjCE,KAAM,CAAE,KAAAuB,GAAM,OAAA3H,EAAO,EAAIsC,GACzB,KAAK,MAAQ,CACX,KAAAqF,GACA,QAAM,OAAQA,GAAM,CAAE,OAAA3H,EAAO,CAAC,CAChC,CACF,CASA,mBAAmBgL,GAAkBhI,GAAkB,CACrD,KAAM,CAAE,KAAA2E,EAAK,EAAI,KAAK,OAElBA,KAAS3E,GAAU,MAAQ,KAAK,MAAM,SAAWgI,GAAU,SAC7D,KAAK,QAAQ,EAIX,KAAK,MAAM,OAASA,GAAU,MAAQ,KAAK,MAAM,OAASrD,IAC5D,KAAK,SAAS,CAAE,KAAM,KAAK,MAAM,IAAK,CAAC,EAGrC,KAAK,MAAM,OAAS3E,GAAU,MAChC,KAAK,MAAM,eAAe,KAAK,MAAM,KAAM,KAAK,MAAM,IAAI,CAE9D,CAMA,QAAS,CACP,KAAM,CAAE,MAAAnC,GAAO,OAAAC,GAAQ,MAAAW,EAAM,EAAI,KAAK,MAChC,CAAE,KAAAhE,EAAK,EAAI,KAAK,MAChB4F,GAAS,GAAU5B,EAAK,EAC9B,SACE,QAAC,OAAI,UAAW4B,GAAO,cACrB,oBAAC4H,GAAA,GACC,MAAO,CAAE,MAAApK,GAAO,OAAAC,EAAO,EACvB,eAAa,MAAE,mCAAoC,mBAAmB,EACtE,MAAO,KAAK,MAAM,KAClB,SAAU,KAAK,aACf,UAAWuC,GAAO,SACpB,EACC5F,OACC,OAAC,UAAO,UAAW4F,GAAO,OACvB,SAAA5F,GAAK,IAAI,CAACI,GAAOqN,KAAU,CAC1B,MAAMC,GAAOtN,GAAM,OACbuN,GAAUvN,GAAM,OAAO,OAC7B,SACE,QAAC,QACC,qBAAC,MAAK,CAAC,QAAQ,8BAA8B,kBACrC,CAAE,KAAAsN,EAAK,EAAE,aAAW,CAAE,QAAAC,EAAQ,GACtC,EAAQ,UAER,OAAC5I,EAAA,EAAI,CAAC,KAAK,cAAe,KALjB0I,EAMX,CAEJ,CAAC,EACH,GAEJ,CAEJ,CACF,CAOO,MAAMG,MAAgB,MAAWN,EAAqB,EAC7DM,GAAc,YAAc,gBAE5B,MAAM,MAAYvI,EAAA,GAAerB,KACxB,CACL,iBAAe,OAAI,CACjB,SAAU,UACZ,CAAC,EACD,YAAU,OAAI,CACZ,OAAQ,OACR,MAAO,MACT,CAAC,EACD,UAAQ,OAAI,CACV,SAAU,WACV,OAAQ,OACR,MAAO,OACP,OAAQ,aAAaA,GAAM,OAAO,QAAQ,MAAM,GAChD,WAAYA,GAAM,OAAO,QAAQ,KACjC,MAAOA,GAAM,OAAO,QAAQ,aAC5B,QAAS,OAAOA,GAAM,QAAQ,EAAG,CAAC,GAClC,SAAU,KACZ,CAAC,CACH,EACD,E,oDCxHM,MAAM6J,MAAc,cACzB,CAAC,CAAE,MAAAnI,GAAO,OAAAoI,GAAQ,KAAAxD,GAAM,QAAAyD,GAAS,UAAA1H,GAAW,OAAQ2H,GAAQ,YAAAC,GAAa,KAAAC,GAAM,GAAGC,EAAW,EAAG1Q,KAAQ,CACtG,MAAM2Q,MAAa,MAAWC,EAAY,EACpCzD,GAAU,OACd,oBACG,UAAAN,OAAQ,OAACvF,EAAA,EAAI,CAAC,KAAMuF,EAAA,CAAM,EAC1B5E,GACA,OAAOqI,IAAY,aAAY,OAACO,GAAA,EAAO,CAAC,MAAOP,EAAA,CAAS,EACxDC,OAAU,OAACA,GAAA,CAAO,UAAWI,GAAW,OAAQ,GACnD,EAGIG,MAAY,MAAGH,GAAW,KAAMN,IAAUM,GAAW,WAAW,EAEtE,SACE,OAAC,KACC,KAAAF,GACA,UAAWK,GACV,GAAGJ,GACJ,QAASF,GACT,aAAYE,GAAW,YAAY,GAAKK,GAAA,GAAU,WAAW,IAAI,MAAM9I,EAAK,EAC5E,KAAK,MACL,gBAAeoI,GACf,IAAArQ,GAEC,SAAAmN,GAAQ,EACX,CAEJ,CACF,EAEAiD,GAAY,YAAc,MAE1B,MAAMQ,GAAgBrK,KACb,CACL,QAAM,OAAI,CACR,QAAS,WACT,QAAS,QACT,OAAQ,OACR,OAAQ,UACR,SAAU,WAEV,MAAOA,GAAM,OAAO,KAAK,QAEzB,IAAK,CACH,YAAaA,GAAM,QAAQ,CAAC,CAC9B,EAEA,mBAAoB,CAClB,eAAgB,WAClB,CACF,CAAC,EACD,eAAa,OAAI,CACf,MAAO,iBACP,MAAOA,GAAM,OAAO,KAAK,YACzB,SAAU,SAEV,YAAa,CACX,QAAS,QACT,QAAS,MACT,SAAU,WACV,KAAM,EACN,MAAO,MACP,OAAQ,MACR,IAAK,MACL,aAAcA,GAAM,MAAM,OAAO,QACjC,gBAAiB,iDACnB,CACF,CAAC,EACD,UAAQ,OAAI,CACV,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,CACH,G,wFCvBK,MAAMyK,GAAa,CAAC,CAAE,QAAA7D,GAAS,SAAA8D,GAAU,OAAAvE,EAAO,IAAuB,CAC5E,MAAMvE,MAAS,MAAW,EAAS,EACnC,OAAI8I,MAEA,OAACC,GAAA,GAAM,CAAC,UAAW/I,GAAO,OACxB,mBAACgJ,GAAA,EAAmB,CAAC,SAAAF,GAAoB,OAAQvE,IAAU,CAAE,EAAG,EAAG,EAAG,CAAE,EACrE,SAAAS,EAAA,CACH,EACF,EAGG,IACT,EAEA6D,GAAW,YAAc,aAEzB,MAAM,GAAY,KACT,CACL,UAAQ,OAAI,CACV,SAAU,WACV,IAAK,EACL,KAAM,EACN,cAAe,OACf,MAAO,OACP,OAAQ,MACV,CAAC,CACH,G,8JCtEK,SAASI,GAAc,CAAE,MAAAvQ,EAAM,EAAU,CAC9C,MAAMsH,MAAS,MAAW,EAAS,EAEnC,GAAItH,GAAM,SAAW,EACnB,SAAO,OAACwQ,GAAA,EAAc,CAAC,KAAMxQ,GAAM,CAAC,EAAG,EAGzC,MAAMyQ,GAAgBzQ,GAAM,OAAQU,IAASA,GAAK,SAAW,QAAQ,EAC/DgQ,GAAgB1Q,GAAM,OAAQU,IAASA,GAAK,SAAW,OAAO,EAEpE,SACE,oBACG,UAAAgQ,GAAc,IAAI,CAAChQ,GAAM2D,QACjB,OAACmM,GAAA,EAAc,CAAS,KAAA9P,EAAA,EAAH2D,EAAe,CAC5C,KACD,QAAC,OAAI,UAAWiD,GAAO,QACrB,oBAAC,KAAE,UAAWA,GAAO,qBACnB,mBAAC,MAAK,CAAC,QAAQ,oDAAoD,0BAAc,EACnF,EACCmJ,GAAc,IAAI,CAAC/P,GAAM2D,QACxB,QAAC,KAAU,KAAM3D,GAAK,KAAM,OAAQA,GAAK,OAAQ,UAAW4G,GAAO,aACjE,oBAACb,EAAA,EAAI,CAAC,KAAK,mBAAoB,GAC9B/F,GAAK,QAFA2D,EAGR,CACD,GACH,GACF,CAEJ,CAEA,MAAM,GAAaqB,KAA0B,CAC3C,WAAS,OAAI,CACX,UAAW,QACX,MAAO,QACP,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,wBAAsB,OAAI,CACxB,MAAOA,GAAM,OAAO,KAAK,UACzB,WAAYA,GAAM,WAAW,kBAC7B,SAAUA,GAAM,WAAW,KAAK,GAChC,OAAQ,CACV,CAAC,EACD,gBAAc,OAAI,CAChB,MAAOA,GAAM,OAAO,KAAK,KACzB,WAAYA,GAAM,WAAW,kBAC7B,QAAS,QACT,WAAY,SACZ,SAAU,SACV,aAAc,WAEd,UAAW,CACT,eAAgB,WAClB,EAEA,IAAK,CACH,YAAaA,GAAM,QAAQ,CAAC,CAC9B,CACF,CAAC,CACH,GClEaiL,GAA2B,CAAC,CAAE,UAAA5I,GAAW,SAAApB,EAAS,IAAsC,CACnG,MAAMW,MAAS,MAAW,EAAS,EAEnC,SAAO,OAAC,OAAI,aAAW,MAAGA,GAAQS,EAAS,EAAI,SAAApB,EAAA,CAAS,CAC1D,EAEM,GAAY,OAChB,OAAI,CACF,QAAS,OAET,OAAQ,CACN,SAAU,EACV,eAAgB,QAClB,EAEA,MAAO,CACL,SAAU,CACZ,EAEA,MAAO,CACL,SAAU,EACV,UAAW,QACb,CACF,CAAC,E,yKChBI,MAAMiK,MAAiB,WAC5B,cAAgD,CAAC,CAAE,MAAA5L,GAAO,aAAA6L,GAAc,GAAGhB,EAAW,EAAG1Q,KAAQ,CAC/F,MAAMmI,MAAS,MAAWwJ,EAAuB,EAE3CC,GAAUF,MACd,oBACE,oBAAC,OAAI,UAAWvJ,GAAO,MACrB,mBAAC0J,GAAA,EAAY,CAAC,aAAAH,EAAA,CAA4B,EAC5C,KACA,OAAC,MAAI,SAAA7L,EAAA,CAAM,GACb,KAEA,OAAC,MAAI,SAAAA,EAAA,CAAM,EAEb,SAAO,OAACiM,GAAA,EAAO,CAAC,QAAO,GAAC,MAAOF,GAAS,SAAS,qBAAqB,IAAA5R,GAAW,GAAG0Q,EAAA,CAAY,CAClG,CAAC,CACH,EAEAe,GAAe,YAAc,iBAE7B,MAAME,GAA2BpL,KACxB,CACL,SAAO,OAAI,CACT,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,G,oGC5BK,SAASwL,GAA2C,CAAE,QAAAnQ,GAAS,gBAAAoQ,EAAgB,EAA0B,CAC9G,SACE,oBACE,oBAAC,MAAG,UAAU,eACZ,mBAAC,MAAK,CAAC,QAAQ,4DAA4D,oBAAQ,EACrF,KACA,OAAC,OAAI,UAAU,gBACb,mBAAC,OAAI,UAAU,iBACb,mBAAC,OAAI,UAAU,UACb,mBAACC,GAAA,GACC,WAAY,GACZ,SAAO,MAAE,0DAA2D,mCAAmC,EACvG,SAAUrQ,GAAQ,SAClB,WAAS,MACP,4DACA,+GACF,EAEA,mBAAC,MACC,MAAOA,GAAQ,SAAS,eAAiB,GACzC,SAAWsJ,IACT8G,GAAgB,CACd,GAAGpQ,GACH,SAAU,CAAE,GAAGA,GAAQ,SAAU,aAAcsJ,GAAO,cAAc,OAAQ,CAC9E,CAAC,EAEL,EACF,EACF,EACF,EACF,GACF,CAEJ,C,6JC1BA,MAAMgH,GAAY,GAKX,SAASC,GAAa,CAC3B,MAAOC,GACP,SAAApU,GACA,UAAAqU,GACA,UAAAzJ,GACA,YAAAD,GACA,iBAAA2J,GACA,SAAAhH,GACA,UAAAiH,GAAY,GACZ,iBAAAC,GACA,GAAGvF,EACL,EAA+C,CAC7C,MAAMjN,MAAM,UAAyB,IAAI,EACnC,CAAC5B,GAAOqU,EAAQ,KAAI,YAA0BL,EAAY,EAC1D,CAACM,GAAYC,EAAa,KAAI,eAAiBC,GAAA,KAAaR,IAAgB,IAAI,SAAS,EAAGF,EAAS,EAAE,KAAK,EAC5G,CAACW,GAAO,CAAE3K,GAAU4K,EAAW,KAAIC,GAAA,GAAmBR,GAAWC,EAAgB,EACjFrK,MAAS,MAAW,IAAgB,EAO1C,MALA6K,GAAA,GAAahT,GAAK,IAAM,CACtB8S,GAAY,EAAK,EACjB9U,GAASI,EAAK,CAChB,CAAC,EAEG,CAAC8J,GACH,SACE,OAAC2K,GAAA,CACC,SAAAvH,GACA,UACE+G,OACE,OAACY,GAAA,GACC,aAAW,MACT9K,GAAO,QACP,CACE,CAACA,GAAO,gBAAgB,EAAGQ,KAAgB,QAAa,CAACvK,GACzD,CAAC+J,GAAO,QAAQ,EAAGmD,EACrB,EACA1C,EACF,EAEC,SAAAwJ,IAAgBzJ,EAAA,CACnB,EAGN,EAIJ,MAAMuK,MAAkB,OAAI,CAC1B,MAAO,GAAG,KAAK,IAAIR,GAAa,GAAI,EAAE,CAAC,IACzC,CAAC,EAED,SACE,OAAC,SACE,GAAGzF,GACJ,IAAAjN,GAGA,UAAS,GACT,aAAW,MAAG,wBAAyBkT,EAAe,EACtD,MAAA9U,GACA,YAAakU,GACb,SAAWa,IAAS,CAClB,KAAM,CAAE,MAAAxN,EAAM,KAAIiN,GAAA,IAAYO,GAAK,OAAO,MAAOjB,EAAS,EAC1DS,GAAchN,EAAK,EACnB8M,GAASU,GAAK,OAAO,KAAK,CAC5B,EACA,OAAQ,IAAM,CACZL,GAAY,EAAK,EACjB9U,GAASI,EAAK,CAChB,EACA,UAAY+P,IAAM,CACZ,CAAC,GAAI,EAAE,EAAE,SAASA,GAAE,OAAO,IAC7B2E,GAAY,EAAK,EACjB9U,GAASI,EAAK,EAElB,EACF,CAEJ,C,uFCrFO,MAAMgV,GAAS,CAAC,CACrB,IAAAzM,GACA,IAAAC,GACA,SAAA5I,GACA,cAAAqV,GACA,YAAAvN,GAAc,aACd,QAAAwN,GACA,KAAArM,GACA,MAAA7I,GACA,mBAAAmV,GACA,MAAAC,GACA,SAAAC,GACA,QAAAC,GACA,UAAAC,GAAY,EACd,IAAmB,CACjB,MAAMC,GAAe9N,KAAgB,aAC/BqC,MAAS,MAAW,KAAWyL,GAAc,EAAQJ,EAAM,EAC3DK,GAAoB,KACpB,CAACC,GAAaC,EAAc,KAAI,YAAiB3V,IAASuI,EAAG,EAC7DqN,GACJT,OAAsB,MAAE,2CAA4C,oCAAoC,EAEpGU,MAAiB,eACpBtQ,IAAyB,CACxB,MAAMvF,GAAQ,OAAOuF,IAAM,SAAWA,GAAIA,GAAE,CAAC,EAE7CoQ,GAAe3V,EAAK,EACpBJ,KAAWI,EAAK,CAClB,EACA,CAAC2V,GAAgB/V,EAAQ,CAC3B,EAEMkW,MAAsB,eACzB/F,IAAqC,CACpC,IAAIxK,GAAI,CAACwK,GAAE,OAAO,MAEd,OAAO,MAAMxK,EAAC,IAChBA,GAAI,GAGNoQ,GAAepQ,EAAC,EAEZ3F,IACFA,GAAS2F,EAAC,EAGR0P,IACFA,GAAc1P,EAAC,CAEnB,EACA,CAAC3F,GAAUqV,EAAa,CAC1B,EAIMc,MAAoB,eACvBhG,IAAoC,CACnC,MAAMxK,GAAI,CAACwK,GAAE,OAAO,MAEhBxK,GAAIiD,GACNmN,GAAenN,EAAG,EACTjD,GAAIgD,IACboN,GAAepN,EAAG,CAEtB,EACA,CAACC,GAAKD,EAAG,CACX,EAEMyN,MAAuB,eAC1BzQ,IAAyB,CACxB,MAAMvF,GAAQ,OAAOuF,IAAM,SAAWA,GAAIA,GAAE,CAAC,EAC7C0P,KAAgBjV,EAAK,CACvB,EACA,CAACiV,EAAa,CAChB,EAEMgB,GAAyBT,GAA8C,CAAC,EAAhC,CAACzL,GAAO,mBAAmB,EACnEmM,GAA8BV,GAAmD,CAAC,EAArC,CAACzL,GAAO,wBAAwB,EAEnF,SACE,QAAC,OAAI,aAAW,MAAGA,GAAO,UAAWA,GAAO,MAAM,EAEhD,oBAAC,UAAM,CAAC,OAAQA,GAAO,QAAS,KAChC,QAAC,OAAI,aAAW,MAAGA,GAAO,YAAa,GAAGkM,EAAqB,EAC7D,oBAACR,GAAA,CACC,IAAAlN,GACA,IAAAC,GACA,KAAAK,GACA,aAAc7I,GACd,MAAO0V,GACP,SAAUG,GACV,iBAAkBG,GAClB,SAAU,CAACR,GACX,QAAAN,GACA,mBAAoBU,GACpB,MAAAR,GACA,SAAAC,EAAA,CACF,EAECE,OACC,OAAC,MACC,KAAK,OACL,MAAO,IACP,aAAW,MAAGxL,GAAO,iBAAkB,GAAGmM,EAA0B,EACpE,MAAOR,GACP,SAAUI,GACV,OAAQC,GACR,IAAAxN,GACA,IAAAC,GACA,GAAI8M,EAAA,CACN,GAEJ,GACF,CAEJ,EAEAN,GAAO,YAAc,S,sRCzHd,MAAMmB,GAAkC,CAAC,CAAE,KAAAC,GAAM,QAAAC,GAAS,SAAAjN,GAAU,GAAGyF,EAAK,IAAM,CACvF,KAAM,CAAE,OAAAyH,GAAQ,OAAAC,GAAQ,QAAAC,GAAS,OAAAC,GAAQ,KAAAC,GAAM,KAAAC,GAAM,OAAAC,EAAO,KAAI,OAAc,CAC5E,QAAAP,GACA,KAAAD,GACA,GAAGvH,EACL,CAAC,EACD,OAAOzF,GAAS,CAAE,OAAAkN,GAAQ,OAAAC,GAAQ,QAAAC,GAAS,OAAAC,GAAQ,KAAAC,GAAM,KAAAC,GAAM,OAAAC,EAAO,CAAC,CACzE,E,mVCGO,MAAMC,GAAiB,CAAC,CAAE,MAAAC,GAAO,QAAAC,GAAS,MAAAC,GAAQ,CAAE,IAA2B,CACpF,MAAMjN,MAAS,MAAW,EAAS,EACnC,GAAI,CAAC+M,GAAM,OACT,OAAO,KAGTE,GAAQA,GAAQ,EAAIA,GAAQ,EAC5B,MAAMC,GAAeH,GAAM,OAASE,GAC9BE,GAAaJ,GAAM,OAASE,GAE5BG,GAAeD,GAAa,GAElC,SACE,QAAC,OACC,UAAWnN,GAAO,UAClB,gBAAY,MAAE,6CAA8C,2BAA2B,EAEtF,UAAAkN,OACC,OAACG,GAAA,EAAQ,CAAC,QAAAL,GAAkB,SAAU,CAAE,KAAM,CAAE,KAAM,aAAc,EAAG,aAAc,EAAG,EAAG,YAAa,GACrG,SAAAI,GAEG,MACA,IAAID,EAAU,GACpB,EAEDJ,GACE,MAAM,EAAGG,GAAeD,GAAQA,GAAQ,CAAC,EACzC,QAAQ,EACR,IAAKK,OACJ,OAACD,GAAA,EAAQ,CAA0B,SAAAC,EAAA,EAApBA,GAAS,KAAK,IAA0B,CACxD,GACL,CAEJ,EAEM,GAAalP,KACV,CACL,aAAW,OAAI,CACb,QAAS,OACT,eAAgB,SAChB,cAAe,cACf,WAAYA,GAAM,QAAQ,CAAC,EAE3B,aAAc,CACZ,WAAYA,GAAM,QAAQ,EAAE,CAC9B,CACF,CAAC,EACD,QAAM,OAAI,CACR,aAAc,KAChB,CAAC,CACH,G,sTCvCK,MAAMmP,GAAmB,CAAC,CAC/B,qBAAAC,GACA,SAAAC,GACA,WAAAC,GACA,WAAAC,GACA,kBAAAC,GACA,GAAGrF,EACL,IAA6B,CAC3B,MAAM5O,GAAS6T,GAAqB,EAG9BK,GAAgBH,GAClBA,GAAW,IAAKI,KAAW,CACzB,GAAGA,GACH,MAAOA,GAAM,OAAO,OAAQ9C,IAASA,GAAK,KAAK,CACjD,EAAE,EACF,CAAC,EAEC+C,GAAe,IAAM,CACzB,GAAI,CAACpU,GACH,OAAO,KAIT,IAAI1D,GACJ,GAAI0X,IAAY,OAASC,IAAmB,QAAQ,CAAC,EAAG,CACtD,MAAMI,MAAsB,OAC1BL,GAAW,MACXC,GAAkB,MAAM,CAAC,EACzBA,GAAkB,MAAM,CAAC,CAC3B,EACMK,GAAUtU,GAAO,OAAO,WAAW,QACzC1D,GAAQgY,GAAQD,EAAmB,CACrC,CAEA,MAAME,MAAiB,OAAevU,GAAO,UAAU,CAAC,EAAG,CACzD,cAAeA,GAAO,OAAO,gBAC7B,SAAA8T,EACF,CAAC,EAED,SACE,OAACU,GAAA,CACC,UAAWD,GACX,YAAavU,GAAO,OAAO,MAC3B,YAAaA,GAAO,OAAO,OAASA,GAAO,OAAO,MAClD,aAAc1D,EAAA,CAChB,CAEJ,EACMmY,GAAuB,IACpBP,IAAe,IAAI,CAACC,GAAOjG,QAChC,OAACwG,GAAA,EAAS,CAAgC,MAAOP,GAAM,MACnD,UAAAA,GAAM,OAAS,CAAC,GAAG,IAAK9C,OACxB,OAACsD,GAAA,GAEC,IAAKtD,GAAK,IACV,MAAOA,GAAK,MACZ,OAAQA,GAAK,OACb,KAAMA,GAAK,KACX,OAAQA,GAAK,OACb,QAASA,GAAK,SANT,GAAGA,GAAK,KAAK,EAOpB,CACD,GAXa,GAAG8C,GAAM,KAAK,GAAGjG,EAAK,EAYtC,CACD,EAGH,SAAO,OAAC0G,GAAA,EAAW,CAAE,GAAGhG,GAAY,gBAAiB6F,GAAsB,aAAAL,EAAA,CAA4B,CACzG,EAGaI,GAAyB,CAAC,CACrC,UAAAK,GACA,YAAAC,GACA,YAAAC,GACA,aAAAC,EACF,IAKM,CACJ,MAAM3O,MAAS,MAAW,EAAS,EAEnC,SACE,QAAC,OAAI,UAAWA,GAAO,QACrB,oBAAC,UAAQ,SAAAwO,EAAA,CAAU,KACnB,QAAC,MAAe,CACd,qBAAC,OACC,oBAACI,GAAA,EAAU,CAAC,MAAOH,EAAA,CAAa,KAChC,OAAC,QAAK,UAAWzO,GAAO,YAAc,SAAA0O,EAAA,CAAY,GACpD,EACCC,OAAgB,OAACE,GAAA,EAAqB,CAAC,MAAOF,EAAA,CAAc,GAC/D,GACF,CAEJ,EAEA,SAAS,GAAUvQ,GAAsB,CACvC,MAAO,CACL,WAAS,OAAI,CACX,QAASA,GAAM,QAAQ,GAAK,CAAC,EAC7B,SAAUA,GAAM,WAAW,KAAK,GAChC,OAAQA,GAAM,OAAO,OACvB,CAAC,EACD,eAAa,OAAI,CACf,WAAY,SACZ,YAAaA,GAAM,QAAQ,EAAG,CAChC,CAAC,CACH,CACF,C,uCChIO,MAAM0Q,GAAyB,CAACC,GAAuBC,KAAiB,CAC7E,IAAIC,GAAQ,EACRC,GAAQH,GAAe,OAAO,OAAS,EACvCI,GAEJ,OAAa,CACX,GAAIF,GAAQC,GACV,OAAO,KAAK,IAAIA,GAAO,CAAC,EAE1BC,GAAS,KAAK,OAAOF,GAAQC,IAAS,CAAC,EACvC,MAAME,GAAYL,GAAe,OAAOI,EAAM,EAE9C,GAAIC,KAAcJ,GAChB,OAAOG,GACEC,IAAaA,GAAYJ,GAClCC,GAAQE,GAAS,EAEjBD,GAAQC,GAAS,CAErB,CACF,EAkBaE,GAA+B,CAE1CC,GACAC,GAEAC,GACA/B,KAIG,CACH,IAAI1Q,GAAGjE,GAAO2W,GAAYC,GAAeC,GAEzC,MAAMC,GAAkC,CAAC,EAEzC,IAAIC,GAAaC,GAEjB,IAAK/S,GAAI,EAAGA,GAAIuS,GAAgB,OAAQvS,KAAK,CAC3CjE,GAAQwW,GAAgBvS,EAAC,EACzB,MAAMkK,GAAOsI,GAAgBxS,EAAC,EAC9B0S,GAAaX,GAAuB7H,GAAMuI,EAAa,EACvDE,GAAgBF,GAAgBvI,GAAK,OAAOwI,EAAU,EACtDE,GAAY1I,GAAK,OAAOwI,EAAU,GAGhCI,KAAgB,QACfH,IAAiB,IAAMA,GAAgBG,IAAeA,GAAc,IACpEH,GAAgB,GAAKA,GAAgBG,MAEtCA,GAAcH,GACdI,GAAU7I,GAAK,WAAU,OAAuBA,GAAK,QAAQ0I,EAAS,CAAC,EAAIA,IAG7E,MAAMI,GAAOjX,GAAM,QAASA,GAAM,OAAO2W,EAAU,CAAC,EAEpDG,GAAQ,KAAK,CACX,SAAO,OAAuBG,EAAI,EAClC,eAAgBN,GAChB,YAAa1S,GACb,MAAOgT,GAAK,MACZ,SAAO,OAAoBjX,EAAK,EAChC,KAAMmO,GAAK,WAAU,OAAuBA,GAAK,QAAQ0I,EAAS,CAAC,EAAIA,EACzE,CAAC,CACH,CAEA,MAAO,CACL,QAAAC,GACA,KAAME,EACR,CACF,EAGaE,GAAqB,CAACC,GAAeC,QACzC,OAAeD,GAAO,CAC3B,OAAQC,IAAM,SAAS,WACvB,SAAUA,IAAM,SAAS,QAC3B,CAAC,EAIUC,GAAkB,CAACC,GAAsB5R,GAAoBC,KAA+B,CACvG,GAAID,IAAOC,IAAO2R,GAAO,CACvB,MAAM/L,GAAQ5F,GAAMD,GACd6R,GAAahM,GAAQ+L,GAAQ,IAG7BE,GAAS,SACTC,GAAU,QAEhB,OAAIF,IAAc,GACT,MAAkB,SAAS,YAEhCA,IAAc,GACT,MAAkB,SAAS,OAEhChM,IAASiM,GACJ,MAAkB,SAAS,OAEhCD,IAAc,IACT,MAAkB,SAAS,KAEhChM,IAASkM,GACJ,MAAkB,SAAS,IAEhCF,IAAc,QACT,MAAkB,SAAS,MAE7B,MAAkB,SAAS,IACpC,CAEA,OAAO,MAAkB,SAAS,MACpC,ECnIaG,GAAwB,CAAC,CAAE,WAAA7C,GAAY,iBAAA8C,GAAkB,IAAAC,GAAK,SAAAjD,EAAS,IAAa,CAC/F,IAAIkD,GAAmC,KAEvC,GAAIF,GAAiB,QAAU,KAC7B,OAAO,KAGLA,GAAiB,QACnBE,GAAoBF,GAAiB,MAAM,CAAC,GAI9C,MAAMxJ,GAAOwJ,GAAiB,MAAM,CAAC,KACjC,OAAsB9C,GAAW,MAAO8C,GAAiB,MAAM,CAAC,EAAGA,GAAiB,MAAM,CAAC,CAAC,EAC5FC,GAAI,EAEFE,GAAYvB,GAA6B1B,GAAW,MAAM,QAASA,GAAW,MAAM,QAAS1G,GAAMwG,EAAQ,EAC3Ge,GAAYoC,GAAU,KAEtBC,GAASD,GAAU,QAAQ,IAAI,CAACpU,GAAGO,MAChC,CACL,MAAOP,GAAE,MACT,MAAOA,GAAE,MACT,MAAOA,GAAE,MACT,SAAUmU,KAAsB5T,EAClC,EACD,EAED,SAAO,OAAC+T,GAAA,EAAW,CAAC,OAAAD,GAAgB,UAAArC,EAAA,CAAsB,CAC5D,EAEAgC,GAAsB,YAAc,wBClC7B,MAAMO,GAAyB,CAAC,CAAE,WAAApD,GAAY,iBAAA8C,GAAkB,SAAAhD,EAAS,IAAgC,CAE9G,GACEgD,GAAiB,QAAU,MAC3BA,GAAiB,MAAM,CAAC,IAAM,QAC9BA,GAAiB,QAAU,MAC3BA,GAAiB,MAAM,CAAC,IAAM,OAE9B,OAAO,KAET,MAAMxJ,MAAO,OAAsB0G,GAAW,MAAO8C,GAAiB,MAAM,CAAC,EAAGA,GAAiB,MAAM,CAAC,CAAC,EACnG1X,MAAY,OAAuB4U,GAAW,MAAO8C,GAAiB,MAAM,CAAC,CAAC,EAC9EO,GAAgBjY,GAAU,WAAU,OAAuBA,GAAU,QAAQkO,EAAI,CAAC,EAAIA,GAEtFgK,MAAa,OAAuBtD,GAAW,MAAO8C,GAAiB,MAAM,CAAC,CAAC,EAC/Exa,MAAQ,OAAsB0X,GAAW,MAAO8C,GAAiB,MAAM,CAAC,EAAGA,GAAiB,MAAM,CAAC,CAAC,EACpGxC,GAAUgD,GAAW,QACrBlB,GAAO9B,GAAQhY,EAAK,EAE1B,SACE,OAAC6a,GAAA,GACC,OAAQ,CACN,CACE,MAAOf,GAAK,MACZ,SAAO,OAAoBkB,EAAU,EACrC,SAAO,OAAuBlB,EAAI,CACpC,CACF,EACA,UAAWiB,EAAA,CACb,CAEJ,EAEAD,GAAuB,YAAc,yBCpC9B,MAAMG,GAAe,CAAC,CAC3B,KAAAC,GAAO,MAAmB,OAC1B,WAAAxD,GACA,iBAAA8C,GACA,IAAAC,GACA,SAAAjD,EACF,IAKM,CAACgD,IAAoB,CAACA,GAAiB,MAClC,KAGLU,KAAS,YACJ,OAACJ,GAAsB,CAAC,WAAApD,GAAwB,iBAAA8C,GAAoC,SAAAhD,EAAA,CAAoB,KAG7G,OAAC+C,GAAA,CACC,WAAA7C,GACA,iBAAA8C,GACA,IAAAC,GACA,SAAAjD,EAAA,CACF,EAKNyD,GAAa,YAAc,eCepB,MAAME,WAAc,eAAsC,CAA1D,kCASL,WAAoB,CAClB,iBAAkB,GAClB,iBAAkB,EACpB,EAEA,aAA8B,KAC9B,cAAuC,KAwBvC,oBAAiB,CAACrO,GAAqBsO,KAAoD,CACzF,KAAM,CAAE,2BAAAC,EAA2B,EAAI,KAAK,MACxCA,IACFA,GAA2BD,GAAO,MAAM,KAAMA,GAAO,MAAM,EAAE,CAEjE,EAEA,iBAAc,CAACtO,GAAqB2N,GAAmB1F,KAAmC,CACxF,KAAK,SAAS,CACZ,iBAAkB,GAClB,WAAYA,GACZ,IAAA0F,EACF,CAAC,CACH,EAEA,iBAAc,CAAC3N,GAAqBwO,GAA0BvG,KAAmC,CAC/F,KAAK,SAAS,CACZ,iBAAkB,GAClB,iBAAkB,GAClB,YAAaA,GACb,WAAAuG,EACF,CAAC,CACH,EAwBA,mBAAgB,IAAM,CACpB,KAAM,CAAE,SAAAlS,GAAU,OAAAwR,GAAQ,SAAApD,EAAS,EAAI,KAAK,MACtC,CAAE,IAAAiD,GAAK,WAAAc,GAAY,iBAAAC,EAAiB,EAAI,KAAK,MACnD,IAAIC,GAmBJ,GAjBI,CAACD,IAAoB,CAACf,IAAOG,GAAO,SAAW,IAKnD,WAAe,QAAQxR,GAAWqG,IAAM,CAEtC,GAAIgM,GACF,QAEgBhM,IAAKA,GAAE,OAASA,GAAE,KAAK,aAAeA,GAAE,KAAK,SAE7CmD,GAAW,cAC3B6I,GAAiBhM,GAErB,CAAC,EAEG,CAACgM,IACH,OAAO,KAET,MAAMC,GAAsBD,GAAe,MAErCE,GAAcD,GAAoB,MAAQ,SAGhD,GAAI,CAACH,IAAcI,KAAgB,SACjC,OAAO,KAIT,MAAMC,GAAyBF,GAAoB,kBAAoBT,GAEjEY,GAAcN,GAAaA,GAAW,OAAO,YAAc,EAE3DO,GAAWP,GAAaA,GAAW,UAAY,OAE/Cf,GAAsD,CAI1D,MAAO,CAACqB,GAAaC,EAAQ,EAE7B,MAAOP,GAAa,CAACA,GAAW,OAAO,YAAaA,GAAW,SAAS,EAAI,IAC9E,EAEMQ,GAA+D,CACnE,WAAY,CAEV,SAAO,OACL,QACAnB,GAAO,IAAKrU,IAAMA,GAAE,SAAS,CAC/B,EACA,SAAO,OACL,QACAqU,GAAO,IAAKrU,IAAMA,GAAE,UAAU,CAChC,CACF,EACA,iBAAAiU,GACA,IAAAC,GACA,KAAMiB,GAAoB,MAAQ,MAAmB,OACrD,SAAAlE,EACF,EAEMnM,GAAiB,gBAAoBuQ,GAAwB,CAAE,GAAGG,EAAoB,CAAC,EAE7F,OAAO,eAAmBN,GAAgB,CACxC,QAASpQ,GACT,SAAU,CAAE,EAAGoP,GAAI,MAAO,EAAGA,GAAI,KAAM,EACvC,OAAQ,CAAE,EAAG,GAAI,EAAG,EAAG,CACzB,CAAC,CACH,EAEA,uBAAoB,IAAM,CACxB,KAAM,CAAE,OAAAG,EAAO,EAAI,KAAK,MAClB,CAAE,WAAAU,GAAY,YAAAU,GAAa,iBAAAC,EAAiB,EAAI,KAAK,MAE3D,GAAI,CAACA,IAAoB,CAACX,IAAc,CAACU,IAAepB,GAAO,SAAW,EACxE,OAAO,KAIT,MAAMiB,GAAcG,GAAcA,GAAY,OAAO,YAAc,EAE7DF,GAAWE,GAAcA,GAAY,UAAY,OAEjDrE,GAAwD,CAE5D,MAAO,CAACkE,GAAaC,EAAQ,EAE7B,MAAOE,GAAc,CAACA,GAAY,OAAO,YAAaA,GAAY,SAAS,EAAI,IACjF,EAEMtE,GAA8B,CAElC,SAAO,OACL,QACAkD,GAAO,IAAKrU,IAAMA,GAAE,SAAS,CAC/B,EACA,SAAO,OACL,QACAqU,GAAO,IAAKrU,IAAMA,GAAE,UAAU,CAChC,CACF,EAEM2V,GAAe,IAAM,KAAK,SAAS,CAAE,iBAAkB,EAAM,CAAC,EAE9D3E,GAAuB,KACpB,CACL,UAAWyE,GAAY,UACvB,UAAWA,GAAY,UACvB,OAAQA,GAAY,OACpB,YAAaA,GAAY,OAAO,YAChC,MAAOV,GAAW,MAClB,MAAOA,GAAW,KACpB,GAGIa,GAA6C,CACjD,EAAGb,GAAW,MACd,EAAGA,GAAW,MACd,QAASY,GACT,qBAAA3E,GACA,SAAU,KAAK,MAAM,SACrB,WAAAG,GACA,kBAAAC,EACF,EAEA,SAAO,OAACL,GAAgB,CAAE,GAAG6E,EAAA,CAAqB,CACpD,EAEA,iBAAc,IAAM,CAClB,KAAM,CAAE,OAAAvB,EAAO,EAAI,KAAK,MACxB,OAAO,KAAK,IAAI,GAAGA,GAAO,IAAKrU,IAAMA,GAAE,QAAQ,CAAC,CAClD,EA9NA,MAAO,CAAP,KAAO,aAAe,CACpB,UAAW,GACX,WAAY,GACZ,SAAU,GACV,UAAW,GACX,UAAW,CACb,EAUA,mBAAmBmL,GAAuBhI,GAAuB,CAC3DgI,KAAc,KAAK,OACrB,KAAK,KAAK,CAEd,CAEA,mBAAoB,CAClB,KAAK,KAAK,EACN,KAAK,UACP,KAAK,SAAW,KAAE,KAAK,OAAO,EAC9B,KAAK,SAAS,KAAK,eAAgB,KAAK,cAAc,EACtD,KAAK,SAAS,KAAK,YAAa,KAAK,WAAW,EAChD,KAAK,SAAS,KAAK,YAAa,KAAK,WAAW,EAEpD,CAEA,sBAAuB,CACjB,KAAK,UACP,KAAK,SAAS,OAAO,eAAgB,KAAK,cAAc,CAE5D,CA0BA,SAASkJ,GAAyB,CAChC,OAAIA,GAAO,SAAW,EACb,CAAC,CAAE,KAAM,GAAM,IAAK,GAAI,IAAK,CAAE,CAAC,KAElC,UACLA,GAAO,IAAKrU,IAAM,CAChB,MAAMqL,GAAQrL,GAAE,MAAQA,GAAE,MAAM,MAAQ,EAClCgC,GAAMhC,GAAE,OAASA,GAAE,MAAM,KAAO,CAAC,MAAMA,GAAE,MAAM,GAAG,EAAIA,GAAE,MAAM,IAAM,KACpE6V,GACJ7V,GAAE,OAASA,GAAE,MAAM,cAAgB,CAAC,MAAMA,GAAE,MAAM,YAAY,EAAIA,GAAE,MAAM,aAAe,KAC3F,MAAO,CACL,KAAM,GACN,MAAAqL,GACA,SAAUA,KAAU,EAAI,OAAS,QACjC,IAAArJ,GACA,aAAA6T,EACF,CACF,CAAC,EACAC,IAAgBA,GAAY,KAC/B,CACF,CA8IA,MAAO,CACL,GAAI,KAAK,UAAY,KACnB,OAGF,KAAM,CACJ,MAAA9U,GACA,OAAAqT,GACA,UAAA0B,GACA,UAAAC,GACA,SAAAC,GACA,WAAAC,GACA,UAAAC,GACA,UAAAC,GACA,SAAAnF,GACA,2BAAA6D,EACF,EAAI,KAAK,MAET,GAAI,CAAC9T,GACH,OAGF,MAAM4S,GAAQ5S,GAAQ,IAChBgB,GAAM+T,GAAU,KAAK,QAAQ,EAC7B9T,GAAM8T,GAAU,GAAG,QAAQ,EAC3BM,GAAQ,KAAK,SAAShC,EAAM,EAE5BiC,GAAc,CAClB,OAAQ,CACN,KAAM,EACR,EACA,OAAQ,CACN,MAAOH,GACP,MAAO,CACL,KAAMH,GACN,UAAAI,GACA,KAAM,EACR,EACA,OAAQ,CACN,KAAMF,GACN,KAAM,EACN,UAAW,GACX,OAAQ,CACV,EACA,KAAM,CACJ,KAAMD,GACN,KAAM,EAEN,SAAUA,GAAW,KAAK,YAAY,EAAI,IAAM,EAChD,KAAM,GACN,UAAAG,EACF,EACA,WAAY,CACd,EACA,MAAO,CACL,SAAUnF,GACV,KAAM,GACN,KAAM,OACN,IAAAjP,GACA,IAAAC,GACA,MAAO,WACP,MAAA2R,GACA,WAAYD,GAAgBC,GAAO5R,GAAKC,EAAG,EAC3C,cAAeuR,EACjB,EACA,MAAA6C,GACA,KAAM,CACJ,gBAAiB,EACjB,SAAU,CAAC,EACX,gBAAiB,KACjB,YAAa,EACb,UAAW,GACX,UAAW,GACX,MAAO,UACP,OAAQ,CAAE,KAAM,EAAG,MAAO,CAAE,EAC5B,aAAc,EACd,kBAAmB,EACrB,EACA,UAAW,CACT,KAAMvB,GAA6B,IAAM,KACzC,MAAO,MACT,EACA,UAAW,CACT,KAAM,GACR,CACF,EAEA,GAAI,CACF,UACE,KAAK,QACLT,GAAO,OAAQrU,IAAMA,GAAE,SAAS,EAChCsW,EACF,CACF,OAASC,GAAK,CACZ,cAAQ,MAAM,wBAAyBA,GAAKD,GAAajC,EAAM,EACzD,IAAI,MAAM,uBAAuB,CACzC,CACF,CAEA,QAAS,CACP,KAAM,CAAE,UAAAjP,GAAW,OAAAnE,GAAQ,MAAAD,GAAO,OAAAqT,EAAO,EAAI,KAAK,MAC5CmC,GAAsBnC,GAAO,SAAW,EACxCxN,GAAU,KAAK,cAAc,EAC7B4P,GAAU,KAAK,kBAAkB,EACvC,SACE,QAAC,OAAI,UAAU,cAAc,aAAYrR,GACvC,oBAAC,OACC,UAAU,qBACV,IAAMoE,IAAO,KAAK,QAAUA,GAC5B,MAAO,CAAE,OAAAvI,GAAQ,MAAAD,EAAM,EACvB,aAAc,IAAM,CAClB,KAAK,SAAS,CAAE,iBAAkB,EAAM,CAAC,CAC3C,EACF,EACCwV,OAAuB,OAAC,OAAI,UAAU,qBAAqB,mBAAO,EAClE3P,GACA4P,EAAA,EACH,CAEJ,CACF,CAEA,SAAe,KCrXTC,GAAuB,CAAC9Y,GAA4B+Y,GAAY,GAAOC,GAAW,KAAU,CAChG,MAAMC,GAAmBjZ,GAAK,OAAO,CAACkZ,GAAKC,KAAYD,IAAOC,GAAQ,CAAC,GAAK,GAAI,CAAC,IAAM,EACjFC,GAAmB,CAACpZ,GAAK,OAAO,CAACkZ,GAAKC,KAAYD,IAAOC,GAAQ,CAAC,IAAM,KAAM,EAAI,EAExF,OAAQJ,IAAaK,IAAsBJ,IAAYC,EACzD,EAEaI,GAAmBxU,IAAgC,CAC9D,KAAM,CACJ,OAAA4R,GACA,UAAA0B,GACA,MAAA/U,GACA,OAAAC,GACA,SAAAgV,GACA,UAAAD,GACA,WAAAE,GACA,aAAAgB,GACA,eAAAC,GACA,kBAAAC,GACA,iBAAAC,GACA,UAAAC,GACA,eAAAC,GACA,aAAAC,GACA,UAAAb,GACA,SAAAC,GACA,UAAAT,GACA,UAAAC,GACA,2BAAAtB,GACA,SAAA7D,GACA,SAAApO,GACA,UAAAuC,EACF,EAAI3C,GACE,CAAE,eAAAgV,GAAgB,QAAAC,GAAS,gBAAAC,EAAgB,KAAI,MAAWC,GAA0BnV,GAAM,SAAS,EAEnGoV,GAAcxD,GAAO,OAAwB,CAACyC,GAAK9W,KAChD0W,GAAqB1W,GAAE,KAAM2W,GAAWC,EAAQ,EACnDE,GACAA,GAAI,OAAO,CACT,CACE,MAAO9W,GAAE,MACT,MAAOA,GAAE,OAAS,GAClB,SAAU,CAACA,GAAE,UACb,MAAOA,GAAE,MAAM,MACf,iBAAkB,IAAMA,GAAE,MAAQ,CAAC,CACrC,CACF,CAAC,EACJ,CAAC,CAAC,EAEL,SACE,QAAC,OAAI,UAAW0X,GAAS,aAAYtS,GACnC,oBAAC,OAAI,UAAWqS,GACd,mBAAC7C,GAAA,CACC,OAAAP,GACA,UAAA0B,GACA,SAAA9E,GACA,UAAA+E,GACA,WAAAE,GACA,SAAAD,GACA,MAAAjV,GACA,OAAAC,GACA,UAAAkV,GACA,UAAAC,GACA,2BAAAtB,GAEC,SAAAjS,EAAA,CACH,EACF,EAECwU,OACC,OAAC,OAAI,UAAWM,GACd,mBAACG,GAAA,EAAe,CAAC,oBAAmB,GAClC,mBAACC,GAAA,GACC,MAAOF,GACP,YAAaT,GACb,UAAAE,GACA,OAAQJ,GACR,SAAUC,GACV,aAAc,CAAC3I,GAAMjI,KAAU,CACzBgR,IACFA,GAAe/I,GAAK,MAAOjI,EAAK,CAEpC,EACA,aAAAiR,EAAA,CACF,EACF,EACF,GAEJ,CAEJ,EAEMI,GAA2B,CAACI,GAAuBV,MAAgC,CACvF,WAAS,OAAI,CACX,QAAS,OACT,cAAeA,KAAc,SAAW,SAAW,KACrD,CAAC,EACD,kBAAgB,OAAI,CAClB,UAAW,MACX,SAAU,CACZ,CAAC,EACD,mBAAiB,OAAI,CACnB,QAAS,SACT,UAAWA,KAAc,SAAW,MAAQ,MAC9C,CAAC,CACH,GCzGO,MAAMW,WAA2B,WAA4D,CAClG,YAAYxV,GAAgC,CAC1C,MAAMA,EAAK,EAEX,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EAEnD,KAAK,MAAQ,CACX,aAAc,CAAC,EACf,cAAeA,GAAM,MACvB,CACF,CAEA,mBAAmB0I,GAA8C,CAC/D,KAAM,CAAE,OAAAkJ,EAAO,EAAI,KAAK,SACnB,WAAQlJ,GAAU,OAAQkJ,EAAM,GACnC,KAAK,SAAS,CAAE,aAAc,CAAC,EAAG,cAAeA,EAAO,CAAC,CAE7D,CAEA,eAAe/Q,GAAeiD,GAAsC,CAClE,KAAM,CAAE,OAAA8N,GAAQ,sBAAA6D,EAAsB,EAAI,KAAK,MACzC,CAAE,aAAAC,EAAa,EAAI,KAAK,MAE9B,GAAI5R,GAAM,SAAWA,GAAM,SAAWA,GAAM,SAAU,CAEpD,MAAM6R,GACJD,GAAa,QAAQ7U,EAAK,EAAI,GAC1B6U,GAAa,OAAQ9D,IAAWA,KAAW/Q,EAAK,EAChD6U,GAAa,OAAO,CAAC7U,EAAK,CAAC,EAE3B+U,GAAgBhE,GAAO,IAAKA,KAAY,CAC5C,GAAGA,GACH,UAAW+D,GAAgB,QAAQ/D,GAAO,KAAK,IAAM,EACvD,EAAE,EACF,KAAK,SAAS,CAAE,aAAc+D,GAAiB,cAAAC,EAAc,EAAG,IAC9DH,GAAwBA,GAAsBE,EAAe,EAAI,MACnE,EACA,MACF,CAGA,MAAME,GAAkBjE,GAAO,IAAKA,IAAWA,GAAO,KAAK,EACrD+D,GACJD,GAAa,OAAS,IAAMG,GAAgB,OAAS,CAAC,KAAI,cAAWA,GAAiB,CAAChV,EAAK,CAAC,EACzF+U,GAAgBhE,GAAO,IAAKA,KAAY,CAC5C,GAAGA,GACH,UAAW+D,GAAgB,QAAQ/D,GAAO,KAAK,IAAM,EACvD,EAAE,EAEF,KAAK,SAAS,CAAE,aAAc+D,GAAiB,cAAAC,EAAc,EAAG,IAC9DH,GAAwBA,GAAsBE,EAAe,EAAI,MACnE,CACF,CAEA,QAAS,CACP,KAAM,CAAE,SAAAvV,EAAS,EAAI,KAAK,MACpB,CAAE,cAAAwV,EAAc,EAAI,KAAK,MAE/B,OAAOxV,GAAS,CACd,eAAgB,KAAK,eACrB,cAAAwV,EACF,CAAC,CACH,CACF,C,+GCnFA,MAAME,GAAe,CACnB,UAAW,CAAChW,GAAciW,GAAcC,KAAsBlW,GAAOkW,GACrE,SAAU,CAAClW,GAAciW,GAAcC,MAAuBlW,GAAOiW,IAAQ,EAE7E,QAAS,CAACjW,GAAciW,GAAcC,KAAsBlW,GAAO,CACrE,EAWO,SAASmW,GAAyBta,GAAoC,CAC3E,GAAIA,GAAK,MAAM,SAAW,EACxB,OAAOA,GAAK,MAGd,IAAIua,GAAW,GACX,CAAE,MAAA3a,GAAO,aAAA4a,GAAc,kBAAAC,GAAmB,kBAAAC,GAAmB,WAAAC,EAAW,EAAI3a,GAE3E2a,KACHA,GAAaR,GAAa,WAG5B,MAAMS,GAAWC,GAAYjb,GAAO4a,EAAY,EAEhD,GAAII,IAAY,KACd,OAAOhb,GAGTgb,GAAS,MAAQ,CACf,GAAGA,GAAS,MACZ,qBAAsB,EACxB,EAEA,MAAMnX,GAAa7D,GAAM,OAAO,IAAK1B,IAAUA,GAAM,OAAO,QAAQ,aAAe0c,GAAS,OAAO,UAAY,IAAI,EAE7GE,GAAmB,IAAI,IAAYrX,EAAU,EAInD,GAFAqX,GAAiB,OAAO,IAAW,EAE/BA,GAAiB,OAAS,EAC5B,OAAOlb,GAGT,GAAIkb,GAAiB,OAAS,EAAG,CAC/B,MAAMT,GAAYS,GAAiB,OAAO,EAAE,KAAK,EAAE,MAEnD,GAAI,CAACT,IAAaA,IAAa,EAC7B,OAAOza,GAGT,MAAMmb,GAAYH,GAAS,OAErBI,GAAcpb,GAAM,OAAO,IAAK1B,IAAUA,GAAM,MAAM,EAEtD+c,GAAoBC,GACxBH,GACAC,GACAX,GACAK,GACAD,GACAE,GACAJ,EACF,EAEA,OAAIU,KAAsBD,GACjBpb,GAGF,CACL,GAAGA,GACH,OAAQqb,GAAkB,CAAC,EAAE,OAC7B,OAAQrb,GAAM,OAAO,IAAI,CAAC1B,GAAOiE,MAAO,CACtC,GAAGjE,GACH,OAAQ+c,GAAkB9Y,EAAC,CAC7B,EAAE,CACJ,CACF,CAKA,OAAOvC,EACT,CAEA,SAASsb,GACPH,GACAC,GACAX,GACAK,GAAmC,KAEnCD,GAAmC,KACnCU,GAEAZ,GACA,CACA,MAAMa,GAAML,GAAU,OAChBM,GAAyB,CAAC,EAGhC,GAAIX,IAAqB,MAAQA,GAAoBK,GAAU,CAAC,EAAG,CACjE,IAAIO,GAAe,KAAK,MAAMP,GAAU,CAAC,EAAIL,IAAqBL,EAAS,EAEvEkB,GAAWR,GAAU,CAAC,EAAIO,GAAejB,GAE7C,KAAOkB,GAAWR,GAAU,CAAC,GAE3BM,GAAa,KAAKF,GAAeI,GAAWlB,GAAWkB,GAAUlB,EAAS,CAAC,EAC3EkB,IAAYlB,EAEhB,CAGAgB,GAAa,KAAKN,GAAU,CAAC,CAAC,EAE9B,IAAIS,GAAoBT,GAAU,CAAC,EAGnC,QAAS5Y,GAAI,EAAGA,GAAIiZ,GAAKjZ,KAAK,CAC5B,MAAMsZ,GAAWV,GAAU5Y,EAAC,EAE5B,KAAOsZ,GAAWD,GAAYnB,KAC5BgB,GAAa,KAAKF,GAAeK,GAAWC,GAAUpB,EAAS,CAAC,EAEhEmB,IAAanB,GAET,EAACE,KAAL,CAKFc,GAAa,KAAKI,EAAQ,EAE1BD,GAAYC,EACd,CAGA,GAAIhB,IAAqB,MAAQA,GAAoBe,GACnD,KAAOA,GAAYnB,GAAYI,IAC7BY,GAAa,KAAKF,GAAeK,GAAWf,GAAmBJ,EAAS,CAAC,EACzEmB,IAAanB,GAIjB,MAAMqB,GAAYL,GAAa,OAE/B,GAAIK,KAAcN,GAChB,OAAOJ,GAGT,MAAMC,GAA6B,CAAC,EAEpC,QAASU,MAAeX,GAAa,CACnC,IAAIY,GAEJ,GAAID,KAAgBZ,GAAW,CAC7Ba,GAAe,MAAMF,EAAS,EAE9B,QAASvZ,GAAI,EAAG0Z,GAAI,EAAG1Z,GAAIuZ,GAAWvZ,KACpCyZ,GAAazZ,EAAC,EAAI4Y,GAAUc,EAAC,IAAMR,GAAalZ,EAAC,EAAIwZ,GAAYE,IAAG,EAAI,IAE5E,MACED,GAAeP,GAGjBJ,GAAkB,KAAKW,EAAY,CACrC,CAEA,OAAOX,EACT,CC/KO,SAASa,GAAqBf,GAAqBY,GAAoBI,GAA6B,CACzG,IAAIC,GACAC,GAEJ,QAAS9Z,GAAI,EAAGA,GAAIwZ,GAAY,OAAQxZ,KAGtC,GAFewZ,GAAYxZ,EAAC,GAEZ,KACV8Z,IAAW,MAAQD,IAAW,OAChCC,GAAU9Z,QAEP,CACL,GAAI8Z,IAAW,KAAM,CACnB,GAAIlB,GAAU5Y,EAAC,EAAK6Z,GAAqBD,GACvC,KAAOE,GAAU9Z,IACfwZ,GAAYM,IAAS,EAAI,OAI7BA,GAAU,IACZ,CAEAD,GAAUjB,GAAU5Y,EAAC,CACvB,CAGF,OAAOwZ,EACT,CCjBA,SAASO,GAAkBC,GAAU,CACnC,OACEA,GAAE,OAAS,MAAU,QAAUA,GAAE,OAAO,QAAQ,YAAc,MAAe,MAAQ,CAACA,GAAE,OAAO,QAAQ,UAAU,GAErH,CAEO,SAAStB,GAAYjb,GAAkB4a,GAA8B,CAC1E,OAAO5a,GAAM,OAAO,KAAM1B,IAEjBsc,IAAgB,KAAOtc,GAAM,OAASsc,GAAetc,GAAM,OAAS,MAAU,IACtF,CACH,CAGA,SAASke,GAAyBxc,GAAkB4a,GAA8B,CAChF,MAAMI,GAAWC,GAAYjb,GAAO4a,EAAY,EAEhD,IAAIO,GAAYH,IAAU,OAE1B,QAASzY,GAAI,EAAGA,GAAIvC,GAAM,OAAO,OAAQuC,KAAK,CAC5C,IAAIjE,GAAQ0B,GAAM,OAAOuC,EAAC,EAE1B,GAAIjE,KAAU0c,IAAYsB,GAAkBhe,EAAK,EAC/C,SAGF,IAAIme,GAAYne,GAAM,OAAO,QAAQ,UAEjC,OAAOme,IAAc,UACnBA,KAAc,IAAMtB,KACtB7c,GAAM,OAAS4d,GAAqBf,GAAW7c,GAAM,OAAQme,EAAS,EAG5E,CAEA,OAAOzc,EACT,CAEO,SAAS,GAAiBF,GAAqB4c,GAA4B3E,GAA8B,CAC9G,IAAI4E,GACJC,EAAM,QAAS5c,MAASF,GACtB,QAASxB,MAAS0B,GAAM,OACtB,GAAI0c,GAAU,EAAEpe,GAAO0B,GAAOF,EAAM,EAAG,CACrC6c,GAASre,GACT,MAAMse,CACR,CAKJ9c,GAASA,GAAO,IAAKE,IACd2c,IAAQ,OAAO,qBAQX3c,GAPA0a,GAAyB,CAC9B,MAAA1a,GACA,aAAc2c,GAAO,KACrB,kBAAmB5E,IAAW,KAAK,QAAQ,EAC3C,kBAAmBA,IAAW,GAAG,QAAQ,CAC3C,CAAC,CAIJ,EAED,IAAI8E,GAAe,EAEnB/c,GAAO,QAASE,IAAU,CACxBA,GAAM,OAAO,QAASuc,IAAM,CACtBD,GAAkBC,EAAC,IAIrBA,GAAE,OAAO,OAAS,CAChB,GAAGA,GAAE,OAAO,OACZ,UAAW,EACb,EAEAM,KAEJ,CAAC,CACH,CAAC,EAGD,IAAIC,GAAY,IAEZD,GAAe,GACjB/c,GAAO,QAASE,IAAU,CACxB,GAAI,CAACA,GAAM,OAAO,KAAKsc,EAAiB,EACtC,OAGF,MAAMS,GAAQJ,GAAO,OAErB,QAASpa,GAAI,EAAGA,GAAIwa,GAAM,OAAQxa,KAC5BA,GAAI,IACNua,GAAY,KAAK,IAAIA,GAAWC,GAAMxa,EAAC,EAAIwa,GAAMxa,GAAI,CAAC,CAAC,EAG7D,CAAC,EAGH,IAAIya,MAAe,OAAoB,CACrC,OAAAld,GACA,OAAQ4c,GAAU,EAClB,KAAMA,GAAU,EAChB,kBAAmB,EACrB,CAAC,EAED,OAAIM,IACFA,GAAeR,GAAyBQ,GAAcL,GAAQ,IAAI,EAG9DG,KAAc,MAChBE,GAAa,OAAO,QAAQ,CAACT,GAAGU,KAAO,CACrC,IAAIC,GAAOX,GAAE,OAEb,GAAIU,KAAO,EAAG,CACZ,IAAIE,GAAUD,GAAKA,GAAK,OAAS,CAAC,EAClCA,GAAK,KAAKC,GAAUL,GAAWK,GAAU,EAAIL,EAAS,CACxD,MAAWR,GAAkBC,EAAC,EAC5BW,GAAK,KAAK,KAAM,IAAI,EAEpBA,GAAK,KAAK,OAAW,MAAS,CAElC,CAAC,EAEDF,GAAa,QAAU,GAGlBA,IAGF,IACT,CAEO,SAASI,GAAcjb,GAAuCkb,GAAsB,CAGzF,MAAMC,GAAa,GAAGnb,GAAO,MAAQ,OAAYA,GAAO,IAAM,IAAW,IACvEA,GAAO,MAAQ,OAAYA,GAAO,IAAM,IAC1C,GAEMob,GAAiB,GAAGpb,GAAO,QAAQ,cAAgB,OAAYA,GAAO,OAAO,YAAc,IAAW,IAC1GA,GAAO,QAAQ,cAAgB,OAAYA,GAAO,OAAO,YAAc,IACzE,GAEMqb,GAAiB,GACrBrb,GAAO,QAAQ,gBAAkB,OAAYA,GAAO,QAAQ,cAAgB,MAAc,IAC5F,GAEMsb,GAAYtb,GAAO,MAAQ,KAE3Bub,GAAoBvb,GAAO,QAAQ,kBACrCwb,GAAyBxb,GAAO,OAAO,iBAAiB,EACxD,MAAkB,OAEhByb,GAAqBzb,GAAO,QAAQ,UAAaA,GAAO,OAAQ,UAAY,KAElF,MAAO,GAAGsb,EAAS,IAAIH,EAAU,IAAIC,EAAc,IAAIC,EAAc,IAAIE,EAAiB,IAAIE,EAAU,IAAIP,EAAS,EACvH,CAEA,SAASM,GAAyBxb,GAAiC,CACjE,OAAIA,GAAO,OAAS,MAAkB,IAC7B,GAAGA,GAAO,IAAI,GAAGA,GAAO,GAAG,GAE7BA,GAAO,IAChB,CCjHA,SAAS0b,GAAU1Q,GAAgB9H,GAAgByY,GAA0C,CAAC,EAAG,CAC/F,UAAWC,MAAYD,GACrB,GAAI,OAAOC,IAAa,YACtB,GAAI,CAACA,GAAS5Q,GAAW9H,EAAS,EAChC,MAAO,WAEAA,GAAU0Y,EAAQ,IAAM5Q,GAAU4Q,EAAQ,EACnD,MAAO,GAIX,MAAO,EACT,CAgBO,MAAMC,WAAgB,WAAsC,CAOjE,YAAYvZ,GAAqB,CAC/B,MAAMA,EAAK,EANb,kBAA6B,CAAC,EAG9B,KAAQ,aAAe,IAAIwZ,GAAA,GAU3B,kBAAe,IAAM,KAAK,MAAM,UAN9B,IAAIC,GAAQ,KAAK,UAAUzZ,EAAK,EAChCyZ,GAAM,YAAcA,GAAM,OAAQ,SAAU,CAACA,GAAM,YAAY,CAAC,EAChE,KAAK,MAAQA,GACb,KAAK,aAAe,YAAgB,CACtC,CAZA,MAAO,CAAP,KAAO,YAAcC,GAAA,GAgBrB,UAAU1Z,GAAqB2Z,GAAa,GAAM,CAChD,IAAIF,GAAsB,KAE1B,KAAM,CAAE,OAAApe,GAAQ,OAAAiS,GAAQ,iBAAAsM,EAAiB,EAAI5Z,GAIvCuY,IAFqBqB,IAAoB,IAG7Cve,GACAiS,IAAU,CACR,EAAG,MAAc,IAAI,MAAe,cAAc,EAAE,IAAI,CAAC,CAAC,EAC1D,EAAG,MAAc,IAAI,MAAe,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,MAAU,OAAQ,MAAU,IAAI,CAAC,CAAC,CAC9F,EACAtN,GAAM,SACR,EAGA,MAFA,OAAU,UAAW,GAAO,eAAgBuY,EAAY,EAEpDA,GAAc,CAChB,IAAI7a,GAAS,KAAK,OAAO,OAErBic,KACFjc,GAASsC,GAAM,WAAWuY,GAAc,KAAK,MAAM,OAAQ,KAAK,YAAY,KAC5E,OAAU,UAAW,GAAO,kBAAmB7a,EAAM,GAGvD+b,GAAQ,CACN,aAAAlB,GACA,OAAA7a,EACF,KAEA,OAAU,UAAW,GAAO,gBAAiB+b,GAAM,WAAW,CAChE,CAEA,OAAOA,EACT,CAEA,mBAAmB7S,GAA6C,CAC9D,MAAMoB,GAAOpB,GAAI,SAAS,OAAO,KAC3BiT,GAAI,KAAK,aAAa,QAC5B,GAAIA,IAAK7R,GAAM,CAEb,MAAM8R,GAAOD,GAAE,SAAS7R,GAAM,GAAG,EACjC,IAAI+R,GAMJ,GALID,KAEFC,MAAM,OAAsBF,GAAGA,GAAE,SAASC,EAAI,CAAC,GAG7C,CAACC,IAAO,CAACD,GACX,OAGFD,GAAE,UAAU,CACV,KAAAC,GACA,IAAAC,EACF,CAAC,CACH,CACF,CAEA,mBAAoB,CAClB,KAAK,aAAe,KAAK,QACzB,KAAM,CAAE,SAAAC,EAAS,EAAI,KAAK,aAE1B,KAAK,aAAa,IAChBA,GACG,UAAU,KAAc,EACxB,QAAKC,GAAA,GAAa,EAAE,CAAC,EACrB,UAAU,CACT,KAAOrT,IAAQ,CACToT,KAAapT,GAAI,QAGrB,KAAK,mBAAmBA,EAAG,CAC7B,CACF,CAAC,CACL,EAGA,KAAK,aAAa,IAChBoT,GACG,UAAU,KAAqB,EAC/B,QAAKC,GAAA,GAAa,EAAE,CAAC,EACrB,UAAU,CACT,KAAOrT,IAAQ,KAAK,mBAAmBA,EAAG,CAC5C,CAAC,CACL,EAEA,KAAK,aAAa,IAChBoT,GACG,UAAU,KAAmB,EAC7B,QAAKC,GAAA,GAAa,EAAE,CAAC,EACrB,UAAU,CACT,KAAM,IAAM,CACV,MAAMJ,GAAI,KAAK,cAAc,QAGzBA,IAAK,CAACA,GAAE,OAAO,OACjBA,GAAE,UAAU,CACV,KAAM,IACN,IAAK,GACP,CAAC,CAEL,CACF,CAAC,CACL,CACF,CAEA,mBAAmBnR,GAAyB,CAC1C,KAAM,CAAE,OAAArN,GAAQ,aAAA6e,GAAc,SAAA1L,GAAU,YAAA6K,EAAY,EAAI,KAAK,MAEvDc,GAAe,CAACf,GAAU1Q,GAAW,KAAK,MAAO2Q,EAAW,EAElE,GAAIhe,KAAWqN,GAAU,QAAUyR,IAAgB3L,KAAa9F,GAAU,SAAU,CAClF,IAAI0R,GAAW,KAAK,UAAU,KAAK,MAAO,EAAK,EAE3CA,MAEA,KAAK,MAAM,SAAW,QACtB5L,KAAa9F,GAAU,UACvBwR,KAAiBxR,GAAU,cAC3B,CAACwR,IACDC,MAGAC,GAAS,OAAS,KAAK,MAAM,WAAWA,GAAS,aAAc,KAAK,MAAM,OAAQ,KAAK,YAAY,KACnG,OAAU,UAAW,GAAO,mBAAoBA,GAAS,MAAM,GAGjEA,GAAS,YAAcA,GAAS,OAAQ,SAAU,CAACA,GAAS,YAAY,CAAC,EAEzE,KAAK,SAASA,EAAQ,EAE1B,CACF,CAEA,sBAAuB,CACrB,KAAK,aAAa,YAAY,CAChC,CAEA,QAAS,CACP,KAAM,CAAE,MAAA7b,GAAO,OAAAC,GAAQ,SAAA4B,GAAU,aAAAia,EAAa,EAAI,KAAK,MACjD,CAAE,OAAA3c,GAAQ,aAAA6a,GAAc,YAAA+B,EAAY,EAAI,KAAK,MAEnD,OAAK5c,MAKH,OAAC6c,GAAA,GAAS,CAAC,MAAAhc,GAAc,OAAAC,GAAgB,OAAQ6b,GAAa3c,EAAM,EACjE,UAAC8c,GAAkBC,QAClB,OAAC,MACC,OAAA/c,GACA,KAAM4c,GACN,MAAOE,GACP,OAAQC,GACR,QAAUZ,IAAQ,KAAK,aAA+C,QAAUA,GAE/E,SAAAzZ,GAAWA,GAAS1C,GAAQ6a,EAAY,EAAI,KAC/C,EAEJ,EAhBO,IAkBX,CACF,C,4ECnPA,MAAMmC,GAAY,IAAI,IAAI,CACxB,QACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,OACA,SACA,OACA,SACA,OACA,SACA,OACA,SACA,OACA,QACF,CAAC,EAEKC,GAAY,MAAM,EAAE,EAE1B,QAAS7c,GAAI,EAAGA,GAAI6c,GAAU,OAAQ7c,KACpC6c,GAAU7c,EAAC,EAAI,GAAKA,GAQtB,MAAM8c,GAAmB,CAACre,GAAQ2C,GAAyB,IAAO3C,IAAK,KAAO,IAAMA,GAAE,QAAQ2C,EAAQ,EAEhG2b,GAAkC,CACtC,UAAW,MAAe,KAC1B,WAAY,MAAe,KAC3B,cAAe,MAAc,IAC/B,EAEaC,GAER,CAAC,CACJ,MAAAvf,GACA,MAAA4D,GACA,UAAA4b,GACA,aAAAC,GACA,KAAAC,GACA,UAAAC,GACA,UAAAC,GACA,WAAAC,GAAczf,IAASA,GACvB,UAAA0f,GAAa1f,IAASA,EACxB,IAAM,CACJ,MAAM2f,GAAc,YAEdC,GAAU,IAAIC,GAAA,EAAmBT,GAAU,CAAC,CAAC,EAEnD,IAAIxC,GAEJgD,GAAQ,YAAalgB,KAEnBkd,GAAeld,GAAO,CAAC,KAEhB,OAAiBA,GAAO,CAAC,EAAGkgB,GAAQ,kBAAkB,CAAC,EAC/D,EAGD,MAAMrD,GAAS3c,GAAM,OAAO,CAAC,EAC7B,GAAI,CAAC2c,GACH,OAAOqD,GAGT,MAAME,GAAY,IAClB,IAAIC,GAAY,GAEhB,MAAMC,GACJzD,GAAO,OAAO,QAAQ,gBAAkB,MAAc,OAAS,MAAc,OAAS,MAAc,OAChG0D,GAAiB1D,GAAO,OAAO,QAAQ,gBAAkB,MAAc,OAE7E,GAAIA,GAAO,OAAS,MAAU,KAAM,CAClCqD,GAAQ,SAAS,CACf,SAAUE,GACV,YAAa,MAAiB,WAC9B,UAAW,MAAe,MAC1B,OAAQ,GACR,MAAO,IAAM,CACX,MAAMI,GAAIb,GAAa,EACvB,MAAO,CAACa,GAAE,KAAK,QAAQ,EAAGA,GAAE,GAAG,QAAQ,CAAC,CAC1C,CACF,CAAC,EAGD,MAAMC,GACJf,GAAU,OAAS,EACf,CAAClB,GAAGkC,KACKA,GAAO,IAAI,CAACxf,GAAGuB,KAAOA,GAAI,EAAI,KAAOvB,EAAE,EAEhD,OAEN,QAASuB,GAAI,EAAGA,GAAIid,GAAU,OAAQjd,KAAK,CACzC,MAAM0Q,GAAWuM,GAAUjd,EAAC,EAC5Byd,GAAQ,QAAQ,CACd,SAAUE,GACV,OAAQ,GACR,UAAWE,GACX,KAAMC,GACN,MAAO1D,GAAO,OAAO,QAAQ,UAC7B,SAAA1J,GACA,MAAArP,GACA,KAAM,CAAE,KAAMrB,KAAM,GAAKoa,GAAO,OAAO,QAAQ,YAAa,EAC5D,OAAQ4D,EACV,CAAC,CACH,CAGIf,GAAU,OAAS,GACrBQ,GAAQ,QAAQ,WAAa1B,IAAa,CACxCA,GAAE,IAAI,KAAK,EAEXA,GAAE,IAAI,UAAY1a,GAAM,OAAO,KAAK,QACpC0a,GAAE,IAAI,UAAY,OAClBA,GAAE,IAAI,aAAe,SAErB,IAAI/b,GAAI,EACR+b,GAAE,KAAK,QAASmC,IAAM,CACpB,GAAIA,GAAE,OAAS,EAAG,CAEhB,IAAIC,GAAsBD,GAAE,KAAOA,GAAE,MACrCnC,GAAE,IAAI,SAASkB,GAAUjd,EAAC,EAAG+b,GAAE,KAAK,KAAMoC,GAAc,KAAM,OAAO,EACrEne,IACF,CACF,CAAC,EAED+b,GAAE,IAAI,QAAQ,CAChB,CAAC,CAEL,MACE0B,GAAQ,SAAS,CACf,SAAUE,GACV,YAAa,MAAiB,WAC9B,UAAW,MAAe,MAC1B,MAAO,CAAC5B,GAAGqC,GAASC,KAAY,CAACjE,GAAO,OAAO,KAAOgE,GAAShE,GAAO,OAAO,KAAOiE,EAAO,CAC7F,CAAC,EAEDZ,GAAQ,QAAQ,CACd,SAAUE,GACV,UAAWE,GACX,KAAMC,GACN,MAAO1D,GAAO,OAAO,QAAQ,UAC7B,MAAA/Y,GACA,KAAM,CAAE,KAAM+Y,GAAO,OAAO,QAAQ,YAAa,EACjD,YAAa,CAAC3b,GAAG2C,QAAa,OAAuBgZ,GAAO,QAAS3b,GAAG2C,EAAQ,CAAC,CACnF,CAAC,EAGH,IAAIkd,GACFjB,IAAW,QAASU,IAAM,OAAO,OAAOA,GAAE,QAAQ,EAAE,OAAQzO,IAASyO,GAAE,YAAY,QAAQzO,EAAI,IAAM,EAAE,CAAC,GAAK,CAAC,EAE5GiP,GAEJ,QAASve,GAAI,EAAGA,GAAIvC,GAAM,OAAO,OAAQuC,KAAK,CAC5C,MAAMjE,GAAQ0B,GAAM,OAAOuC,EAAC,EAEtBJ,GAAwC,CAC5C,GAAG7D,GAAM,OACT,OAAQ,CACN,GAAGghB,GACH,GAAGhhB,GAAM,OAAO,MAClB,CACF,EAEMyiB,GAAiC5e,GAAO,OAE9C,GAAI7D,KAAUqe,IAAWre,GAAM,OAAS,MAAU,QAAUA,GAAM,OAAS,MAAU,KACnF,SAGF,IAAII,GAAMJ,GAAM,SAAW+gB,GACvB/gB,GAAM,OAAO,QAAQ,UAAU,OAAS,MAAa,UACvDI,MAAM,MAAoB,CACxB,MAAO,CACL,GAAGJ,GACH,OAAQ,CACN,GAAGA,GAAM,OACT,KAAM,aACR,CACF,EACA,MAAAsF,EACF,CAAC,GAEH,MAAMod,GAAW5D,GAAcjb,GAAQ7D,GAAM,IAAI,EAC3C2iB,MAAY,OAA0B3iB,EAAK,EAE3C2V,MADa,OAAoB3V,GAAOsF,EAAK,EACpB,MA6C/B,GA1CAoc,GAAQ,SACNH,GACE,CACE,SAAAmB,GACA,YAAa,MAAiB,SAC9B,UAAW,MAAe,GAC1B,aAAcD,GAAa,mBAAmB,KAC9C,IAAKA,GAAa,mBAAmB,IACrC,gBAAiBA,GAAa,mBAAmB,gBACjD,IAAKziB,GAAM,OAAO,IAClB,IAAKA,GAAM,OAAO,IAClB,QAASyiB,GAAa,YACtB,QAASA,GAAa,YACtB,aAAcA,GAAa,iBAC3B,MACEA,GAAa,UAAU,OAAS,MAAa,QACzC,CAACzC,GAAUqC,GAAiBC,MAC1BD,GAAUA,GAAU,EAAI,GAAK,EAC7BC,GAAUA,GAAU,EAAI,EAAI,EACrB,CAACD,GAASC,EAAO,GAE1BtiB,GAAM,OAAS,MAAU,KACvB,CAACggB,GAAUqC,GAAiBC,KAInB,CAAC,GAFEtiB,GAAM,OAAO,KAAM,KAAM,KAAM,MAE1B,EAKjB,OACR,SAAUA,GAAM,OAAO,QACzB,EACAA,EACF,CACF,EAEK6hB,KACHA,GAAYa,IAGVD,GAAa,gBAAkB,MAAc,OAAQ,CACvD,IAAIG,GAEAH,GAAa,gBAAkB,MAAc,SAE7CE,GAAU,WACV3iB,GAAM,OAAO,QAAQ,eAAiB,MAAkB,QACxD2iB,GAAU,KAAO,KAAiB,WAElCC,MAAY,OAAmB,EAAGtd,GAAOqd,GAAW3iB,GAAM,OAAO,UAAU,EAE3E4iB,GAAYjN,IAIhB,MAAMkN,GAAqB,CACzB,OAAQ,CACN,KAAMJ,GAAa,gBAAkB,GACrC,MAAO,EAAI,iBACX,OAAQG,IAAatd,GAAM,OAAO,KAAK,OACzC,EACA,MAAO,CACL,KAAMmd,GAAa,gBAAkB,GACrC,OAAQG,IAAatd,GAAM,OAAO,KAAK,OACzC,EACA,MAAOsd,IAAatd,GAAM,OAAO,KAAK,OACxC,EAEA,IAAIwd,GAGAtf,GACA0e,GAEJ,GAAIrB,GAAU,IAAIhd,GAAO,IAAK,EAC5Bif,GAAQhC,WACC9gB,GAAM,OAAS,MAAU,KAAM,CACxC,IAAIwL,GAAOxL,GAAM,OAAO,KAAM,KAAM,KACpCkiB,GAAS1W,GAAK,IAAI,CAAC9I,GAAWuB,KAAcA,EAAC,EAC7CT,GAASgI,EACX,CAEAkW,GAAQ,QACNF,GACE,CACE,SAAAkB,GACA,MAAOD,GAAa,UACpB,KAAMA,GAAa,UACnB,UAAWA,GAAa,eAAiB,MAAc,KACvD,YAAa,CAAC/f,GAAG2C,QAAa,OAAuBjF,GAAIsC,GAAG2C,EAAQ,CAAC,EACrE,MAAAC,GACA,KAAM,CAAE,KAAMmd,GAAa,YAAa,EACxC,SAAUziB,GAAM,OAAO,SACvB,MAAOyiB,GAAa,mBAAmB,KACvC,OAAAP,GACA,OAAA1e,GACA,MAAAsf,GACA,GAAGD,EACL,EACA7iB,EACF,CACF,CACF,CAEA,MAAM4Z,GACJ6I,GAAa,YAAc,MAAe,OAAS,MAAe,OAASA,GAAa,WAE1F,IAAIM,GAA2C,IAAM,KAEjDN,GAAa,YAAc,KAC7BM,GAAe,CAAC/C,GAAGgD,GAAWC,GAAMC,KAAS,CAC3C,IAAIC,GAAW,CAAC,EAEZpL,GAASiI,GAAE,OAAOgD,EAAS,EAE/B,GAAI,CAACC,IAAQC,IAAQA,GAAK,OAAQ,CAChC,KAAM,CAACE,GAAUC,EAAO,EAAItL,GAAO,KAC7BuL,GAAQtD,GAAE,KAAK,CAAC,EAChBuD,GAAQvD,GAAE,KAAKgD,EAAS,EACxBQ,GAAW,KAAK,MAAMxD,GAAE,SAASsD,GAAMF,EAAQ,EAAG,IAAK,EAAI,CAAC,EAC5DK,GAAU,KAAK,MAAMzD,GAAE,SAASsD,GAAMD,EAAO,EAAG,IAAK,EAAI,CAAC,EAE5DH,GAAK,CAAC,EAAE,CAAC,IAAMM,IACjBL,GAAS,KAAKC,EAAQ,EAIxB,QAASnf,GAAI,EAAGA,GAAIif,GAAK,OAAQjf,KAAK,CACpC,IAAIyf,GAAUR,GAAKjf,EAAC,EAChB0f,GAAUT,GAAKjf,GAAI,CAAC,EAExB,GAAI0f,IAAWD,GAAQ,CAAC,IAAMC,GAAQ,CAAC,EAAG,CAExC,IAAIC,GAAY5D,GAAE,SAAS0D,GAAQ,CAAC,EAAG,EAAI,EAE3C,GAAIH,GAAMK,EAAS,GAAK,KAEtB,QAASjG,GAAI,EAAGA,GAAI,IAAKA,KAAK,CAC5B,GAAI4F,GAAMK,GAAYjG,EAAC,GAAK,KAAM,CAChCiG,IAAajG,GACb,KACF,CACA,GAAI4F,GAAMK,GAAYjG,EAAC,GAAK,KAAM,CAChCiG,IAAajG,GACb,KACF,CACF,CAGFwF,GAAS,KAAKS,EAAS,CACzB,CACF,CAEIV,GAAKA,GAAK,OAAS,CAAC,EAAE,CAAC,IAAMO,IAC/BN,GAAS,KAAKE,EAAO,CAEzB,CAEA,OAAOF,GAAS,OAASA,GAAW,IACtC,GAGF,GAAI,CAAE,YAAAU,EAAY,EAAIpB,GAElBqB,GAA+C,KAC/CC,GAAiD,KAErD,GAAI/jB,GAAM,OAAO,OAAQ,CAClBwiB,KACHA,GAAcwB,GAAqBtiB,GAAO2f,EAAS,GAGrD,MAAM4C,GAAc5C,GAAUrhB,GAAM,MAAM,OAAO,UAAU,EACrDkkB,GAAcD,IAAa,OAAOjkB,GAAM,MAAM,OAAO,UAAU,EAE/DmkB,MAAW,OAAoBD,IAAelkB,GAAOikB,GAAa5C,EAAS,EAGjF,GAAIkB,GAAqB,QAAQ4B,EAAQ,GAAK,EAC5CL,GAAc,IAAM,KACpBC,GAAgB,IAAG,WACVtB,GAAa,YAAc,MAAe,SAAU,CAE7D,MAAM2B,GAAiB,KAAM,MAAO,OAAQ,EAE5CN,GAAc,CAAC9D,GAAGgD,KAAc,CAE9B,MAAMqB,GAAgBrE,GAAU,MAI1BgC,GAAIb,GAAa,EACvB,IAAImC,GAAQ,CAACtB,GAAE,KAAK,QAAQ,EAAGA,GAAE,GAAG,QAAQ,CAAC,EACzCsC,GAASD,GAAMrB,EAAS,EAAE,KAAMtgB,IAAiCA,IAAK,IAAI,EAC1E6gB,GAAQ,CAACe,GAAQA,EAAM,EACvBC,GAAWF,GAAM,MAAM,EAC3B,OAAAE,GAAS,CAAC,EAAIjB,GACdiB,GAASvB,EAAS,EAAIO,GAGfa,GACL,CACE,GAAGpE,GACH,MAAOuE,EACT,EACAvB,GACA,EACA,CACF,CACF,CACF,CAEA,GAAIP,GAAa,YAAa,CAC5B,MAAM+B,GAAmB9iB,GAAM,OAAO,KACnCuc,IACCwE,GAAa,cAAgBxE,GAAE,MAC/BwE,GAAa,cAAgBxE,GAAE,QAAQ,mBACvCwE,GAAa,iBAAgB,OAAoBxE,GAAGvc,GAAO2f,EAAS,CACxE,EAEMoD,GAAoBD,MACtB,OAAoBA,GAAkB9iB,GAAO2f,EAAS,EACtDoB,GAAa,YAEX5f,GAAI2f,GAAY,IAAI2B,EAAQ,EAC5B9gB,GAAImf,GAAY,IAAIiC,EAAiB,KACvC,YAASphB,EAAC,MAAK,YAASR,EAAC,GAC3B6e,GAAQ,QAAQ,CACd,OAAQ,CAAC7e,GAAGQ,EAAC,EACb,KAAM,MACR,CAAC,EAEIwgB,KACHA,GAAc,KAGhBA,GAAc,CAElB,CACF,CAEA,IAAIa,GAEA/B,GAAU,KAAO,KAAiB,aACpC+B,GAAsB1B,OAAc,OAAoBtE,GAAa,OAAOsE,EAAS,EAAG1d,EAAK,EAAE,OAGjGoc,GAAQ,UAAU,CAChB,YAAAoC,GACA,cAAAC,GACA,SAAArB,GACA,WAAA9I,GACA,aAAAmJ,GACA,UAAAJ,GACA,YAAAkB,GACA,MAAAve,GACA,mBAAAof,GACA,UAAWjC,GAAa,UACxB,UAAWA,GAAa,WAAa9M,GACrC,UAAW8M,GAAa,UACxB,kBAAmBA,GAAa,kBAChC,UAAWA,GAAa,UACxB,aAAcA,GAAa,aAC3B,eAAgBA,GAAa,eAC7B,YAAaA,GAAa,YAC1B,UAAWA,GAAa,UACxB,UAAWA,GAAa,WAAa,GACrC,KAAM,CAACA,GAAa,UAAU,IAC9B,aAAcA,GAAa,aAC3B,WAAY5e,GAAO,WACnB,QAAS7D,GAAM,OAAO,IACtB,QAASA,GAAM,OAAO,IACtB,QAASyiB,GAAa,YACtB,QAASA,GAAa,YAEtB,oBAAqBziB,GAAM,OAAO,MACpC,CAAC,EAGGyiB,GAAa,iBAAmB5e,GAAO,aAChB4e,GAAa,gBAAgB,MAAQ,MAAyB,OAC9D,MAAyB,KAChDf,GAAQ,cAAc,CACpB,OAAQe,GAAa,gBACrB,WAAY5e,GAAO,WACnB,SAAA6e,GACA,MAAApd,GACA,QAAStF,GAAM,OAAO,IACtB,QAASA,GAAM,OAAO,IACtB,QAASyiB,GAAa,YACtB,QAASA,GAAa,WACxB,CAAC,CAGP,CAEA,IAAIkC,MAAiB,OAAkBjjB,EAAK,EAE5CggB,GAAQ,kBAAkBiD,EAAc,EAGxCrD,IAAW,QAASU,IAAM,CACnBQ,KACHA,GAAcwB,GAAqBtiB,GAAO2f,EAAS,GAErD,IAAIuD,GAAuC,CAAC,EAE5C,QAASC,MAAO7C,GAAE,SAAU,CAC1B,IAAImC,GAAWnC,GAAE,SAAS6C,EAAG,EAC7BD,GAAaC,EAAG,EAAIrC,GAAY,IAAI2B,EAAQ,CAC9C,CAEAnC,GAAE,KAAKN,GAASkD,EAAY,CAC9B,CAAC,EAEDlD,GAAQ,UAAY,CAACE,GAAWC,EAAS,EAGzC,MAAMiD,GAAmB,GAEzB,IAAIC,GAAgC,CAGlC,QAAS,CAACC,GAAMhC,GAAWiC,GAAYC,KAAe,CACpD,IAAIC,GAAaH,GAAK,KAAKhC,EAAS,EAEpC,GAAImC,GAAWF,EAAU,GAAK,KAAM,CAClC,IAAIG,GAAa,KACfC,GAAa,KACbphB,GAGF,IADAA,GAAIghB,GACGG,IAAc,MAAQnhB,MAAM,GAC7BkhB,GAAWlhB,EAAC,GAAK,OACnBmhB,GAAanhB,IAKjB,IADAA,GAAIghB,GACGI,IAAc,MAAQphB,KAAMkhB,GAAW,QACxCA,GAAWlhB,EAAC,GAAK,OACnBohB,GAAaphB,IAIjB,IAAIwa,GAAQuG,GAAK,KAAK,CAAC,EAEnBM,GAASN,GAAK,SAASE,GAAY,GAAG,EACtCK,GAASF,IAAc,KAAO,IAAWL,GAAK,SAASvG,GAAM4G,EAAU,EAAG,GAAG,EAC7EG,GAASJ,IAAc,KAAO,KAAYJ,GAAK,SAASvG,GAAM2G,EAAU,EAAG,GAAG,EAE9EK,GAAWH,GAASE,GACpBE,GAAWH,GAASD,GAEpBG,IAAYC,GACVD,IAAYX,KACdG,GAAaG,IAGXM,IAAYZ,KACdG,GAAaI,GAGnB,CAEA,OAAOJ,EACT,CACF,EAEA,OAAI7D,IAAQA,GAAK,IAAM,KAAoB,MACzC2D,GAAO,KAAO,CACZ,IAAKtD,GACL,OAAQ,CAACG,GAAW,IAAI,CAC1B,GAGFF,GAAQ,UAAUqD,EAAM,EAEjBrD,EACT,EAEO,SAASsC,GAAqBtiB,GAAkB2f,GAA6C,CAClG,MAAMsE,GAAc,IAAI,IACxB,OAAAjkB,GAAM,OAAO,QAAQ,CAAC1B,GAAOiE,KAAM,CACjC,MAAM2hB,GAAS5lB,GAAM,OAAO,OAC5B,GAAI4lB,GAAQ,CACV,MAAMC,GAAYxE,GAAUuE,GAAO,UAAU,GAAG,OAAOA,GAAO,UAAU,EACpEC,IACFF,GAAY,OAAI,OAAoBE,GAAWxE,GAAUuE,GAAO,UAAU,EAAGvE,EAAS,EAAGpd,EAAC,CAE9F,CACF,CAAC,EACM0hB,EACT,CCnmBA,MAAMnG,GAA0C,CAAC,SAAU,UAAW,OAAO,EAItE,MAAMsG,WAA2B,WAA2B,CAA5D,kCAIL,gBAAa,CAACpH,GAAyB2C,GAAwBF,KAAkC,CAC/F,KAAM,CAAE,KAAAC,EAAK,EAAI,KAAK,QAChB,CAAE,MAAA9b,GAAO,SAAAqP,GAAU,UAAA2M,GAAW,UAAAE,GAAW,WAAAD,EAAW,EAAI,KAAK,MAEnE,OAAON,GAAyB,CAC9B,MAAOvC,GACP,MAAApZ,GACA,UAAW,MAAM,QAAQqP,EAAQ,EAAIA,GAAW,CAACA,EAAQ,EACzD,aAAAwM,GACA,KAAAC,GACA,UAAAC,GACA,UAAAC,GACA,WAAAC,GACA,UAAAC,EACF,CAAC,CACH,EAEA,kBAAgB3d,IAA+B,CAC7C,KAAM,CAAE,OAAAkiB,GAAQ,OAAAvkB,EAAO,EAAI,KAAK,MAEhC,MAAI,CAACqC,IAAWkiB,IAAU,CAACA,GAAO,YAAe,IAAC,MAAuBliB,GAAQrC,EAAM,EAC9E,QAGF,OAACwkB,GAAA,EAAU,CAAC,KAAMxkB,GAAQ,OAAAqC,GAAiB,GAAGkiB,EAAA,CAAQ,CAC/D,EA5BA,MAAO,CAAP,KAAO,YAAclG,GAAA,GA8BrB,QAAS,CACP,SACE,OAACH,GAAA,CACE,GAAG,KAAK,MACT,WAAY,KAAK,WACjB,YAAAF,GACA,aAAc,KAAK,aACrB,CAEJ,CACF,CAEO,MAAMyG,MAAa,MAAWH,EAAkB,EACvDG,GAAW,YAAc,aC/ClB,MAAMC,MAAiB,iBAAkC,CAAC,CAAuB,EAG3EC,GAAoB,IAAM,CACrC,KAAM,CAAE,KAAA7kB,GAAM,UAAA8c,GAAW,oCAAAgI,EAAoC,KAAI,cAA+BF,EAAc,EAExGG,MAAgB,eAAY,IAAM,CACtC,MAAMC,GAAgBlI,GAAU,EAChC,IAAIC,GAAuB,KAE3B,QAASV,GAAI,EAAGA,GAAIrc,GAAK,OAAO,OAAQqc,KACtC,GAAI2I,GAAchlB,GAAK,OAAOqc,EAAC,EAAGrc,GAAM,CAACA,EAAI,CAAC,EAAG,CAC/C+c,GAAS/c,GAAK,OAAOqc,EAAC,EACtB,KACF,CAGF,OAAOU,EACT,EAAG,CAAC/c,GAAM8c,EAAS,CAAC,EAEpB,MAAO,CACL,UAAAA,GACA,oCAAAgI,GACA,cAAAC,GACA,YAAa/kB,EACf,CACF,EC7BMilB,GAAgB,EAEhBC,GAAmBtZ,IAA0BA,IAAK,MAAQ,CAACA,GAAE,SAAW,CAACA,GAAE,QAKpEuZ,GAAa,CAAC,CAAE,OAAAC,GAAQ,OAAA7iB,GAAQ,UAAA8iB,GAAY,EAAM,QAC7D,mBAAgB,IAAM,CACpB,IAAIC,GAAU,GACVC,GAAQ,GAERF,IACF9iB,GAAO,QAAQ,OAASmc,IAAM,CAC5BA,GAAE,KAAM,iBACN,YACC9S,IAAM,CACL,GAAKsZ,GAAgBtZ,EAAC,GAIlBA,GAAE,SAAW,GAAKA,GAAE,SAAU,CAChC2Z,GAAQ,GAER7G,GAAE,OAAQ,KAAM,EAAI,GACpBA,GAAE,OAAQ,KAAM,EAAI,GAEpB,IAAI8G,GAAQ5Z,IAAkB,CAC5B8S,GAAE,OAAQ,KAAM,EAAI,GACpBA,GAAE,OAAQ,KAAM,EAAI,GACpB,SAAS,oBAAoB,UAAW8G,GAAM,EAAI,CACpD,EAEA,SAAS,iBAAiB,UAAWA,GAAM,EAAI,CACjD,CACF,EACA,EACF,CACF,CAAC,EAGHjjB,GAAO,QAAQ,YAAcmc,IAAM,CACjC,MAAM+G,GAAoB/G,GAAE,OAAO,EAAE,MAAQ,EAC7C,GAAIwG,GAAgBxG,GAAE,OAAQ,KAAK,GACjC,GAAI2G,IAAaE,GAAO,CACtB,GAAI7G,GAAE,OAAO,QAAUuG,GAAe,CACpC,QAAS1B,MAAO7E,GAAE,OAChB,GAAI6E,KAAQ,IAAK,CACf,MAAMmC,GAAOD,GACT/G,GAAE,SAASA,GAAE,OAAO,IAAK6E,EAAG,EAC5B7E,GAAE,SAASA,GAAE,OAAO,KAAOA,GAAE,OAAO,MAAO6E,EAAG,EAC5CoC,GAAOF,GACT/G,GAAE,SAASA,GAAE,OAAO,IAAMA,GAAE,OAAO,OAAQ6E,EAAG,EAC9C7E,GAAE,SAASA,GAAE,OAAO,KAAM6E,EAAG,EACjC7E,GAAE,SAAS6E,GAAK,CAAE,IAAKoC,GAAM,IAAKD,EAAK,CAAC,CAC1C,CAGFJ,GAAU,EACZ,CAEAC,GAAQ,EACV,SACM7G,GAAE,OAAO,OAASuG,GAAe,CACnC,MAAMW,GAAOH,GACT/G,GAAE,SAASA,GAAE,OAAO,KAAM,GAAG,EAC7BA,GAAE,SAASA,GAAE,OAAO,IAAMA,GAAE,OAAO,OAAQ,GAAG,EAC5CmH,GAAOJ,GACT/G,GAAE,SAASA,GAAE,OAAO,KAAOA,GAAE,OAAO,MAAO,GAAG,EAC9CA,GAAE,SAASA,GAAE,OAAO,IAAK,GAAG,EAEhC0G,GAAO,CAAE,KAAMQ,GAAM,GAAIC,EAAK,CAAC,EAE/BP,GAAU,EACZ,EAKJ5G,GAAE,UAAU,CAAE,KAAM,EAAG,MAAO,EAAG,IAAK,EAAG,OAAQ,CAAE,EAAG,EAAK,CAC7D,CAAC,EAEDnc,GAAO,UAAU,CACf,KAAM,CACJ,SAAWmc,IAAM,IAAM,CACrB,GAAI,CAACwG,GAAgBxG,GAAE,OAAQ,KAAK,EAClC,OAAO,KAGT,GAAI2G,IAAaC,GAAS,CACxB,QAAS/B,MAAO7E,GAAE,OACZ6E,KAAQ,KAEV7E,GAAE,SAAS6E,GAAK,CAAE,IAAK,KAAM,IAAK,IAAK,CAAC,EAI5C+B,GAAU,EACZ,KAAO,CACL,IAAIQ,GAASpH,GAAE,OAAO,EAEtB,MAAMqH,GAAOD,GAAO,IACdE,GAAOF,GAAO,IACdG,IAAOD,GAAOD,IAAQ,EAE5BX,GAAO,CAAE,KAAMW,GAAOE,GAAK,GAAID,GAAOC,EAAI,CAAC,CAC7C,CAEA,OAAO,IACT,CACF,CACF,CAAC,CACH,EAAG,CAAC1jB,GAAQ6iB,GAAQC,EAAS,CAAC,EAEvB,M,2BCpFT,MAAMa,GAAiB,GAKVC,GAAgB,CAAC,CAC5B,KAAApP,GAAO,MAAmB,OAC1B,UAAAqP,GAAY,MAAU,KACtB,KAAAtG,GACA,SAAAzM,GACA,OAAA9Q,GACA,cAAA8jB,GACA,GAAGlY,EACL,IAA0B,CACxB,MAAMmY,MAAe,UAAc,EAC7BtiB,MAAQ,MAAU,EAClB,CAACuiB,GAAkBC,EAAmB,KAAI,YAAwB,IAAI,EACtE,CAACC,GAAiBC,EAAkB,KAAI,YAAwB,IAAI,EACpE,CAACC,GAAkBC,EAAmB,KAAI,YAA+B,CAAC,CAAC,EAC3E,CAACC,GAAQC,EAAS,KAAI,YAAmC,IAAI,EAC7D,CAACC,GAAUC,EAAW,KAAI,YAAkB,EAAK,EACjDC,MAAYC,GAAA,GAAgB,EAClC,IAAIC,GAAsC,KAE1C,MAAMC,MAAQ,MAAW,EAAS,EAyFlC,MAtFA,mBAAgB,IAAM,CACpB,IAAIC,GAEJ,MAAMC,GAAY,IAAM,CACjBL,GAAU,IAGfD,GAAY,EAAI,EAChBV,GAAa,SAAS,KAAK,UAAU,IAAI,aAAa,EACxD,EAEMiB,GAAY,IAAM,CACjBN,GAAU,IAGfH,GAAU,IAAI,EACdE,GAAY,EAAK,EACjBV,GAAa,SAAS,KAAK,UAAU,OAAO,aAAa,EAC3D,EAGA,OAAA/jB,GAAO,QAAQ,WAAY,CAACmc,GAAG8I,KAAUH,GAAOG,EAAK,EAErDjlB,GAAO,QAAQ,OAASmc,IAAM,CAC5B4H,GAAa,QAAU5H,GAEvBA,GAAE,KAAK,iBAAiB,aAAc4I,EAAS,EAC/C5I,GAAE,KAAK,iBAAiB,aAAc6I,EAAS,EAG/CJ,GAAkBzI,GAAE,KAAK,QAAQ,YAAY,EAEzCyI,KACFA,GAAgB,iBAAiB,QAASG,EAAS,EACnDH,GAAgB,iBAAiB,OAAQI,EAAS,GAGhDzH,IAAQA,GAAK,IAAM,KAAoB,WACzCpB,GAAE,KAAK,UAAU,IAAI,kBAAkB,CAE3C,CAAC,EAEDnc,GAAO,QAAQ,YAAcmc,IAAM,CAC5BuI,GAAU,IAGfP,GAAmBhI,GAAE,OAAO,GAAI,EAChCkI,GAAoBlI,GAAE,OAAO,KAAM,MAAM,CAAC,EAC5C,CAAC,EAGDnc,GAAO,QAAQ,YAAcmc,IAAM,CACjC,GAAI,CAAC2I,IAAQ,CAACJ,GAAU,EACtB,OAGF,KAAM,CAAE,EAAAQ,GAAG,EAAAC,EAAE,EAAIC,GAAgBjJ,GAAG2I,EAAI,EAEtCP,GADEW,KAAM,QAAaC,KAAM,OACjB,CAAE,EAAAD,GAAG,EAAAC,EAAE,EAEP,IAFQ,CAItB,CAAC,EAEDnlB,GAAO,QAAQ,YAAa,CAACS,GAAG4kB,KAAQ,CACjCX,GAAU,GAGfT,GAAoBoB,EAAG,CACzB,CAAC,EAEM,IAAM,CACXd,GAAU,IAAI,EAEVR,GAAa,UACfA,GAAa,QAAQ,KAAK,oBAAoB,aAAciB,EAAS,EACrEjB,GAAa,QAAQ,KAAK,oBAAoB,aAAcgB,EAAS,EAEjEH,KACFA,GAAgB,oBAAoB,QAASG,EAAS,EACtDH,GAAgB,oBAAoB,OAAQI,EAAS,GAG3D,CACF,EAAG,CAAChlB,GAAQukB,GAAWE,GAAaN,GAAoBE,EAAmB,CAAC,EAExEH,KAAoB,MAAS,CAACM,IAAYjH,IAAQA,GAAK,IAAM,KAAoB,UACnF,OAAO,KAIT,IAAI/C,GAAS5O,GAAW,KAAK,OAAO,CAAC,EACrC,GAAI,CAAC4O,GACH,OAAO,KAET,MAAM8K,GAAY9K,GAAO,YAAW,MAAoB,CAAE,MAAOA,GAAQ,SAAA1J,GAAU,MAAArP,EAAM,CAAC,EAC1F,IAAIiF,GAA2B,KAE3B6e,GAAOD,GAAU9K,GAAQ,OAAO0J,EAAe,CAAC,EAAE,KAEtD,GAAKJ,GA2EHpd,GAAUod,GAAclY,GAAW,KAAMoY,GAAkBE,EAAe,MA3ExD,CAElB,GAAI1P,KAAS,MAAmB,QAAUwP,KAAqB,KAAM,CACnE,MAAM7nB,GAAQyP,GAAW,KAAK,OAAOoY,EAAgB,EAErD,GAAI,CAAC7nB,GACH,OAAO,KAGT,MAAMqpB,GAAUpB,KAAmBJ,EAAgB,GAAKE,GACxDqB,GAAOD,GAAU9K,GAAQ,OAAOgL,EAAO,CAAC,EAAE,KAE1C,MAAMlU,IADWnV,GAAM,YAAW,MAAoB,CAAE,MAAAA,GAAO,SAAA2U,GAAU,MAAArP,EAAM,CAAC,GACvDtF,GAAM,OAAOqpB,EAAO,CAAC,EAE9C9e,MACE,OAACyN,GAAA,GACC,OAAQ,CACN,CACE,MAAO7C,GAAQ,OAAS,KACxB,SAAO,OAAoBnV,GAAOyP,GAAW,KAAMA,GAAW,MAAM,EACpE,MAAO0F,MAAU,OAAuBA,EAAO,EAAI,IACrD,CACF,EACA,UAAWiU,EAAA,CACb,CAEJ,CAEA,GAAI/Q,KAAS,MAAmB,MAAO,CACrC,IAAIN,GAAgC,CAAC,EACrC,MAAMrW,GAAQ+N,GAAW,KACnBgE,GAAS/R,GAAM,OACf4nB,GAAqB,CAAC,EAE5B,QAASrlB,GAAI,EAAGA,GAAIwP,GAAO,OAAQxP,KAAK,CACtC,MAAMjE,GAAQ0B,GAAM,OAAOuC,EAAC,EAC5B,GACE,CAACjE,IACDA,KAAUqe,IACVre,GAAM,OAAS,MAAU,MACzBA,GAAM,OAAS,MAAU,QACzBA,GAAM,OAAO,QAAQ,UAAU,SAC/BA,GAAM,OAAO,QAAQ,UAAU,IAE/B,SAGF,MAAM0C,GAAI+M,GAAW,KAAK,OAAOxL,EAAC,EAAE,OAAOgkB,GAAiBhkB,EAAC,CAAE,EACzDkR,GAAUnV,GAAM,QAAS0C,EAAC,EAEhC4mB,GAAQ,KAAK5mB,EAAC,EACdqV,GAAO,KAAK,CACV,MAAO5C,GAAQ,OAAS,KACxB,SAAO,OAAoBnV,GAAO0B,GAAO+N,GAAW,MAAM,EAC1D,MAAO0F,MAAU,OAAuBA,EAAO,EAAI,KACnD,SAAU0S,KAAqB5jB,EACjC,CAAC,CACH,CAEA,GAAIyjB,KAAc,MAAU,KAAM,CAEhC,MAAM6B,GAAU,CAAC,GAAGxR,EAAM,EACpByR,GAASC,GAAW,WAAW/B,EAAS,EAE9C3P,GAAO,KAAK,CAACoK,GAAG9e,KAAM,CAEpB,MAAMqmB,GAAOH,GAAQ,QAAQpH,EAAC,EACxBwH,GAAOJ,GAAQ,QAAQlmB,EAAC,EAC9B,OAAOmmB,GAAOF,GAAQI,EAAI,EAAGJ,GAAQK,EAAI,CAAC,CAC5C,CAAC,CACH,CAEApf,MAAU,OAACyN,GAAA,EAAW,CAAC,OAAAD,GAAgB,UAAWqR,EAAA,CAAM,CAC1D,CACF,CAIA,SACE,OAACnZ,GAAA,GAAM,CAAC,UAAWoY,GAAWK,GAAM,eAAiB,OAClD,SAAAne,IAAW4d,OACV,OAACjY,GAAA,EAAmB,CAAC,SAAU,CAAE,EAAGiY,GAAO,EAAG,EAAGA,GAAO,CAAE,EAAG,OAAQ,CAAE,EAAGX,GAAgB,EAAGA,EAAe,EACzG,SAAAjd,EAAA,CACH,EAEJ,CAEJ,EAEA,SAASqf,GAAsB,CAAE,KAAA3J,GAAM,IAAAC,EAAI,EAAiB2J,GAAiB,CAC3E,OAAI5J,KAAS,QAAaC,KAAQ,OACzB,GAEFD,GAAO,GAAKA,GAAO4J,GAAO,OAAS3J,GAAM,GAAKA,GAAM2J,GAAO,MACpE,CAOO,SAASZ,GAAgBjJ,GAAU2I,GAAe,CACvD,IAAII,GAAGC,GACP,MAAMc,GAAK9J,GAAE,OAAO,MAAQ,EACtB+J,GAAK/J,GAAE,OAAO,KAAO,EAE3B,GAAI4J,GAAsB5J,GAAE,OAAQ2I,EAAI,EAAG,CACzC,MAAMO,GAAMlJ,GAAE,SAAS8J,EAAE,EAEzB,GAAIC,GAAK,GAAKA,GAAKpB,GAAK,OAAQ,CAC9B,IAAI/Q,MAAM,OAAsBoI,GAAGkJ,EAAG,EAElCtR,KACFoR,GAAIL,GAAK,IAAM/Q,GACXkS,IAAM,GAAKA,IAAMnB,GAAK,QAExBI,GAAIJ,GAAK,KAAO3I,GAAE,SAASA,GAAE,KAAK,CAAC,EAAEA,GAAE,SAAS8J,EAAE,CAAC,EAAG9J,GAAE,OAAO,CAAC,EAAE,KAAM,GAG9E,CACF,MACE+I,GAAIJ,GAAK,KAAOmB,GAChBd,GAAIL,GAAK,IAAMoB,GAGjB,MAAO,CAAE,EAAAhB,GAAG,EAAAC,EAAE,CAChB,CAEA,MAAM,GAAa1jB,KAA0B,CAC3C,kBAAgB,OAAI,CAClB,UAAWA,GAAM,OAAO,OAAS,EAAI,aACvC,CAAC,CACH,G,+GC1SA,IAAI0kB,GAAgC,KAE7B,SAASC,IAAoB,CAClC,GAAID,KAAmB,KACrB,OAAOA,GAGT,GAAI,OAAO,SAAa,IAAa,CACnC,MAAME,GAAM,SAAS,cAAc,KAAK,EAClCC,GAAY,CAChB,MAAO,QACP,OAAQ,QACR,SAAU,WACV,IAAK,UACL,SAAU,SACV,gBAAiB,WACnB,EAEA,OAAO,KAAKA,EAAS,EAAE,IAAKzB,IAAU,CAEpCwB,GAAI,MAAMxB,EAAK,EAAIyB,GAAUzB,EAAK,CACpC,CAAC,EAED,SAAS,KAAK,YAAYwB,EAAG,EAC7BF,GAAiBE,GAAI,YAAcA,GAAI,YACvC,SAAS,KAAK,YAAYA,EAAG,CAC/B,MACEF,GAAiB,EAGnB,OAAOA,IAAkB,CAC3B,C,4EC9BYI,IAAAA,KACVA,GAAA,GAAK,KACLA,GAAA,MAAQ,QACRA,GAAA,SAAW,WACXA,GAAA,SAAW,WACXA,GAAA,cAAgB,gBAChBA,GAAA,OAAS,SACTA,GAAA,OAAS,SACTA,GAAA,OAAS,WACTA,GAAA,IAAM,QACNA,GAAA,MAAQ,QAVEA,KAAAA,IAAA,I,YCIL,SAASC,GACdC,GACAC,GACAC,GACAC,GACM,CACN,GAAIH,GAASC,GAAmB,CAC9B,MAAMG,GAAM,kDAAkDH,EAAiB,IAC/E,QAAQ,KAAKG,GAAK,CAChB,WAAY,GAAKJ,GACjB,kBAAmB,GAAKC,GACxB,kBAAmBE,IAAkB,GACrC,GAAID,IAAM,EACZ,CAAC,CACH,CACF,C,gBCpBA,IAAIG,GAGG,MAAMC,GAAW,CAACvS,GAAyB,SAC5CsS,GACKA,GAAUtS,EAAI,KAGhBwS,GAAA,GAAY,CAAE,OAAQ,CAAE,KAAAxS,EAAK,CAAE,CAAC,EAAE,GAI9ByS,GAAaC,KACxBJ,GAAYI,GACL,IAAM,CACXJ,GAAY,IACd,G,4BCdF,MAAMK,GAAiC,CACrC,IAAK,IACL,IAAK,IACL,IAAK,GACP,EAEMC,GAAa,cAEZ,SAASC,IAAuB,CACrC,MAAO,CACL,UAAUjhB,GAAOkhB,GAAQjP,GAAM,CAC7B,KAAM,CAAE,MAAA/e,EAAM,EAAIguB,GAElB,OAAQlhB,GAAM,IAAK,CACjB,IAAK,IACL,IAAK,IACL,IAAK,IAAK,CACR,KAAM,CACJ,MAAO,CAAE,OAAQmhB,GAAa,IAAKC,EAAS,EAC5C,IAAK,CAAE,OAAQC,GAAW,IAAKC,EAAO,EACtC,MAAO,CAAE,OAAQC,EAAY,CAC/B,EAAIruB,GAAM,UACJqO,GAAOrO,GAAM,UAAU,KAG7B,GAAIA,GAAM,UAAU,WAClB,OAAA8M,GAAM,eAAe,EACrBkhB,GACG,gBAAgBE,GAAUD,GAAanhB,GAAM,GAAG,EAChD,gBAAgBshB,GAAQD,GAAY,EAAGN,GAAO/gB,GAAM,GAAG,CAAC,EACxD,gBAAgB,CAAC,EACb,GACF,GAELuhB,KAAgBhgB,GAAK,QACrBA,GAAKggB,EAAW,IAAM,KACtB,OAAO,OAAOR,EAAM,EAAE,SAASxf,GAAKggB,EAAW,CAAC,EAChD,CACAvhB,GAAM,eAAe,EACrB,MAAMwhB,GAAaT,GAAO/gB,GAAM,GAAG,EAC7ByhB,GAAkB,CACtB,IAAK,GAAGT,EAAU,OAAI,MAAO,CAAC,GAC9B,KAAM,GAAGA,EAAU,IAAIQ,EAAU,GACjC,OAAQ,CACN,IAAKJ,GACL,OAAQD,GACR,OAAQ,OACV,EACA,MAAO,CACL,IAAKG,GACL,OAAQD,GAAY,EACpB,OAAQ,OACV,EACA,OAAQ,YACV,EACA,OAAAH,GAAO,WAAWlhB,GAAM,GAAG,EAAE,WAAWwhB,EAAU,EAAE,cAAcC,EAAe,EAAE,aAAa,CAAC,EAE1F,EACT,CACA,KACF,CAEA,IAAK,IACL,IAAK,IACL,IAAK,IAAK,CACR,MAAMlgB,GAAOrO,GAAM,WAAW,KACxBsO,GAAStO,GAAM,UAAU,OAAO,OAChCwuB,GAAWngB,GAAKC,EAAM,EAEtBggB,GAAaxhB,GAAM,IACnB2hB,GAAiB,GAAGX,EAAU,IAAIQ,EAAU,GAC5CI,GAAa1uB,GAAM,YAAY,KAClCglB,IAAMA,IAAG,OAASyJ,IAAkBzJ,GAAE,OAAO,MAAQhlB,GAAM,WAAW,GACzE,EACA,GAAI0uB,IAAcF,KAAaF,IAAc,CAACtuB,GAAM,UAAU,WAC5D,OAAA8M,GAAM,eAAe,EACrBkhB,GAAO,iBAAiB,CAAC,EAAE,iBAAiBU,EAAU,EAAE,kBAAkB,CAAC,EACpE,GAET,KACF,CAEA,IAAK,YAAa,CAChB,MAAMrgB,GAAOrO,GAAM,WAAW,KACxBsO,GAAStO,GAAM,UAAU,OAAO,OAChC2uB,GAAetgB,GAAKC,GAAS,CAAC,EAC9BkgB,GAAWngB,GAAKC,EAAM,EAC5B,GAAIuf,GAAOc,EAAY,GAAKd,GAAOc,EAAY,IAAMH,GACnD,OAAA1hB,GAAM,eAAe,EAErBkhB,GAAO,eAAe,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,EACzC,EAEX,CAEA,QACE,KAEJ,CAEA,OAAOjP,GAAK,CACd,CACF,CACF,C,oGCgOA,MAAM6P,GAAc,CAClB,gBAAe,IACf,UAAS,IACT,OAAM,EACN,YAAW,EACX,oBAAmB,EACnB,iBAAgB,EAChB,MAAK,IACL,OAAM,CACR,C,qLCrTO,MAAMC,KAAiC,MAC5C,kCACF,EAeaC,KAAmB,MAC9B,2BACA,MAAO,CAAE,WAAAC,EAAY,UAAAC,EAAW,QAAAxrB,CAAQ,EAA4B,CAAE,SAAAyrB,EAAU,SAAAC,CAAS,IAAM,CAC7F,MAAMC,EAAQF,EAAS,EAAE,KAAK,MACxB,CAAE,QAAAG,EAAS,SAAAC,CAAS,EAAI,QAAM,MAAsBF,EAAOJ,CAAU,EACrEO,EAA4BL,EAAS,EAAE,QAAQ,MAAMD,CAAS,EAAG,sBAEvE,MAAkB,oBAAqB,CACrC,MAAOM,GAA2B,MAAM,MAAQ,QAAUA,GAA2B,OAAS,UAC9F,GAAID,EAAS,KAAK,MAAQ,QAAUA,EAAS,KAC7C,UAAAL,CACF,CAAC,EACDE,EACEL,EAA+B,CAC7B,UAAAG,EACA,mBAAoBK,EACpB,QAAAD,CACF,CAAC,CACH,EAEA,MAAMG,EAAUN,EAAS,EAAE,QAAQ,MAAMD,CAAS,EAAG,QAE/CQ,KAAiB,MAAkBH,EAAS,IAAKE,CAAO,EACxDE,EAAe,QAAM,MAA4BD,CAAc,EACrEN,KAAS,MAAuB,CAAE,UAAAF,EAAsB,aAAcS,EAAa,cAAgB,CAAC,CAAE,CAAC,CAAC,EAEpGjsB,GAAS,eACX,MAAM0rB,KAAS,MAAcF,EAAWO,EAASD,EAA2BD,CAAQ,CAAC,EAGnFJ,EAAS,EAAE,QAAQ,MAAMD,CAAS,EAAG,QACvCE,KAAS,MAAsB,CAAE,UAAAF,EAAW,gBAAiB,KAAc,UAAU,KAAM,CAAC,CAAC,EAI3FxrB,GAAS,eACX0rB,KAAS,MAAW,CAAE,UAAAF,CAAU,CAAC,CAAC,CAEtC,CACF,EAcaU,EAAoB,CAACjN,EAAyBkN,IAAwC,CACjG,GAAId,EAA+B,MAAMc,CAAM,EAAG,CAChD,KAAM,CAAE,mBAAAC,EAAoB,QAAAR,CAAQ,EAAIO,EAAO,QAG/C,eAAelN,EAAM,iBAAiB,EAE/B,CACL,GAAGA,EACH,mBAAAmN,EACA,YAAa,KACb,YAAa,KACb,WAAY,KACZ,wBAAsB,MAAyB,EAC/C,iBAAe,MAAyB,EACxC,UAAW,CAAC,EACZ,QAAAR,CACF,CACF,CAEA,OAAO3M,CACT,C,sEC3Ge,MAAMoN,CAAgC,CAQnD,YAAYC,EAAa,CAMvB,GALA,KAAK,QAAU,CAAC,EAChB,KAAK,UAAY,CAAC,EAClB,KAAK,KAAO,CAAC,EACb,KAAK,KAAO,QAERA,EAAO,CACT,GAAIA,EAAM,QACR,UAAWC,KAAOD,EAAM,QACtB,KAAK,UAAUC,CAAG,EAGtB,GAAID,EAAM,KACR,UAAWE,KAAOF,EAAM,KACtB,KAAK,OAAOE,CAAG,CAGrB,CACF,CAEA,KAAKxsB,EAAyC,CAExCA,EAAQ,MAAQ,MAAQA,EAAQ,MAAQ,QAAa,KAAK,QAAQ,QAAUA,EAAQ,MAIxF,KAAK,KAAK,KAAK,CAACwhB,EAAG9e,KACjB8e,EAAIA,EAAExhB,EAAQ,GAAG,EACjB0C,EAAIA,EAAE1C,EAAQ,GAAG,EAEV,EAAEwhB,GAAK,MAAQ,EAAE9e,GAAK,OAAS,EAAE8e,EAAI9e,IAAM,EAAE8e,EAAI9e,GACzD,EAEG1C,EAAQ,MACV,KAAK,KAAK,QAAQ,EAGpB,KAAK,QAAQA,EAAQ,GAAG,EAAE,KAAO,GACjC,KAAK,QAAQA,EAAQ,GAAG,EAAE,KAAOA,EAAQ,KAC3C,CAEA,UAAUusB,EAAa,CAChB,KAAK,UAAUA,EAAI,IAAI,IAC1B,KAAK,QAAQ,KAAKA,CAAG,EACrB,KAAK,UAAUA,EAAI,IAAI,EAAIA,EAE/B,CAEA,OAAOC,EAAgB,CACrB,KAAK,KAAK,KAAKA,CAAG,CACpB,CACF,CAIA,SAASC,EAAgBne,EAAmBke,EAAgBE,EAAqB,CAC/E,IAAIC,EAAoB,GACxB,QAASC,EAAc,EAAGA,EAActe,EAAQ,OAAQse,IACtD,GAAIJ,EAAII,CAAW,IAAM,QAAaF,EAASE,CAAW,IAAM,QAC9D,GAAIJ,EAAII,CAAW,IAAMF,EAASE,CAAW,EAC3C,MAAO,QAEAJ,EAAII,CAAW,IAAM,QAAaF,EAASE,CAAW,IAAM,UACrED,EAAoB,IAGxB,OAAOA,CACT,CAEO,SAASE,EAAqBC,KAAqBC,EAAkC,CAC1F,MAAMC,EAAQF,GAAO,IAAIT,EAEzB,GAAI,UAAU,SAAW,EACvB,OAAOW,EAGT,GAAI,UAAU,SAAW,EACvB,OAAAA,EAAM,QAAUD,EAAO,CAAC,EAAE,eAAe,SAAS,EAAI,CAAC,GAAGA,EAAO,CAAC,EAAE,OAAO,EAAI,CAAC,EAChFC,EAAM,KAAOD,EAAO,CAAC,EAAE,eAAe,MAAM,EAAI,CAAC,GAAGA,EAAO,CAAC,EAAE,IAAI,EAAI,CAAC,EAChEC,EAIT,MAAMC,EAAkBF,EAAO,OAAQT,GAAU,CAAC,CAACA,EAAM,OAAO,EAG1DY,EAAyC,CAAC,EAG1CC,EAAeF,EAAgB,MAAM,EAAE,OAAwB,CAACpT,EAAKzC,KACzEA,EAAO,QAAQ,QAASmV,GAAQ,CAC9B,KAAM,CAAE,KAAA1hB,CAAK,EAAI0hB,EACbW,EAAYriB,CAAI,IAAM,SACxBqiB,EAAYriB,CAAI,EAAIgP,EAAI,OACxBA,EAAI,KAAK0S,CAAG,EAEhB,CAAC,EACM1S,GACN,CAAC,CAAC,EAKCuT,EAAoBH,EAAgB,IAAK7V,GAAWA,EAAO,QAAQ,IAAKmV,GAAQW,EAAYX,EAAI,IAAI,CAAC,CAAC,EAGtGc,EAAgBJ,EAAgB,OAA0B,CAACpT,EAAKzC,EAAQiB,IAAgB,CAC5F,MAAMiV,EAASF,EAAkB/U,CAAW,EAC5C,OAAAjB,EAAO,KAAK,QAASoV,GAAQ,CAC3B,MAAMe,EAA8B,CAAC,EAErCD,EAAO,QAAQ,CAACE,EAAIC,IAAS,CAC3BF,EAAWC,CAAE,EAAIhB,EAAIiB,CAAI,CAC3B,CAAC,EACD5T,EAAI,KAAK0T,CAAU,CACrB,CAAC,EACM1T,CACT,EAAG,CAAC,CAAC,EAGC6T,EAA8C,CAAC,EAE/CC,EAAgBN,EAAc,OAA0B,CAACxT,EAAK2S,EAAKlU,IAAa,CACpF,GAAI,CAACoV,EAAWpV,CAAQ,EAAG,CAEzB,IAAIxN,EAASwN,EAAW,EAExB,KAAOxN,EAASuiB,EAAc,QAAQ,CAEpC,MAAMO,EAAQ,UAAUP,EAAgBX,GAAaD,EAAgBU,EAAcX,EAAKE,CAAQ,EAAG5hB,CAAM,EACzG,GAAI8iB,EAAQ,GAAI,CACd,MAAMC,EAAaR,EAAcO,CAAK,EAEtC,QAAShB,EAAc,EAAGA,EAAcO,EAAa,OAAQP,IACvDJ,EAAII,CAAW,IAAM,QAAaiB,EAAWjB,CAAW,IAAM,SAChEJ,EAAII,CAAW,EAAIiB,EAAWjB,CAAW,GAI7Cc,EAAWE,CAAK,EAAIC,EAEpB/iB,EAAS8iB,EAAQ,CACnB,KAEE,MAEJ,CACA/T,EAAI,KAAK2S,CAAG,CACd,CACA,OAAO3S,CACT,EAAG,CAAC,CAAC,EAEL,OAAAmT,EAAM,QAAUG,EAChBH,EAAM,KAAOW,EACNX,CACT,C,8FCzKO,MAAMc,EAA2D,CACtE,GAAI,IAAkB,cACtB,KAAM,6BACN,YAAa,mGAEb,SAAU,CAAC9tB,EAASC,IAASC,GAC3BA,EAAO,QAAK,KAAKS,GAASmtB,EAAyB,YAAY9tB,EAASC,CAAG,EAAEU,CAAI,CAAC,CAAC,EAErF,YAAa,CAACotB,EAAU9tB,IAASY,GAAwB,CAEvD,MAAMmtB,EAAgBC,EAA4BptB,CAAM,EAExD,OAAIA,EAAO,OAAS,GAAKmtB,EAChB,IAAuB,YAC5B,CACE,QAASA,CACX,EACA/tB,CACF,EAAEY,CAAM,EAEHA,CACT,CACF,EAKA,SAASotB,EAA4BttB,EAAuC,CAC1E,IAAIiS,EACJ,UAAW7R,KAASJ,EAAM,CACxB,KAAM,CAAE,UAAArB,CAAU,KAAI,MAAayB,CAAK,EACxC,GAAI,CAACzB,EACH,OAEF,GAAI,CAACsT,EACHA,EAAOtT,EAAU,aACRsT,IAAStT,EAAU,KAE5B,MAEJ,CACA,OAAOsT,CACT,C,8FCpCO,MAAM3C,EAAe,CAAC,CAAE,aAAAH,EAAc,QAAAlG,CAAQ,IAAyB,CAC5E,MAAM4K,EAAU0Z,EAA+Bpe,CAAY,EAC3D,SAAO,OAAC,IAAK,CAAC,KAAM0E,EAAQ,KAAM,MAAOA,EAAQ,MAAO,KAAMA,EAAQ,KAAM,QAAA5K,CAAA,CAAkB,CAChG,EAEA,SAASskB,EAA+Bpe,EAAwC,CAC9E,OAAQA,EAAc,CACpB,KAAK,KAAa,MAChB,MAAO,CACL,KAAM,QACN,KAAM,uBACN,MAAO,QACT,EAEF,KAAK,KAAa,KAChB,MAAO,CACL,KAAM,OACN,KAAM,SACN,MAAO,MACT,EAEF,KAAK,KAAa,aAChB,MAAO,CACL,QAAM,KAAE,wCAAyC,cAAc,EAC/D,KAAM,uBACN,MAAO,QACT,EAEF,KAAK,KAAa,QAChB,MAAO,CACL,QAAM,KAAE,mCAAoC,SAAS,EACrD,KAAM,SACN,MAAO,MACT,EAEF,KAAK,KAAa,eAChB,MAAO,CACL,QAAM,KAAE,2CAA4C,iBAAiB,EACrE,KAAM,SACN,MAAO,MACT,EAEF,KAAK,KAAa,IAChB,MAAO,CACL,QAAM,KAAE,+BAAgC,MAAM,EAC9C,KAAM,SACN,MAAO,MACT,CACJ,CACF,C,+DCzDO,MAAMqe,EAA0E,CACrF,GAAI,IAAkB,KACtB,KAAM,OACN,YAAa,2BACb,eAAgB,CAAC,EAGjB,SAAWnuB,GAAqCE,GAAWA,EAG3D,YAAcF,GAAqCW,GAAsBA,CAC3E,C,uJCOO,SAASytB,EAAqB,CACnC,UAAAC,EACA,kBAAAC,EACA,oBAAAC,EACA,yBAAAC,EACA,mBAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,OAAAC,EAAS,EACX,EAA8B,CAC5B,MAAMC,EAAe,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAG,EAAE,IAAKC,IAAW,CAChG,MAAO,GAAGA,CAAK,GACf,MAAOA,CACT,EAAE,EACIxoB,KAAS,MAAWuD,CAAS,EAE7BklB,EAAYF,EAAa,KAAM3oB,GAAWA,EAAO,QAAUyoB,CAAa,GAAKE,EAAa,CAAC,EAEjG,SACE,oBACG,WAACD,MACA,OAAC,IAAc,CACb,mBAAC,KAAK,CAAC,QAAQ,0DAA0D,4BAAgB,EAC3F,KAEF,OAAC,KACC,aAAcR,EACd,QAAM,KAAE,qDAAsD,QAAQ,EAEtE,YAAY,qBACZ,OAAQC,EACR,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,iBAAiB,oBAC3E,MAAO,GACP,SAAQ,GACV,KAEA,OAAC,KACC,MAAOI,EACP,QAAM,KAAE,0DAA2D,aAAa,EAChF,eAAa,KACX,iEACA,+EACF,EACA,SAAUH,EACV,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,iBAAiB,oBAC7E,EACCG,MACC,QAAC,OAAI,UAAWnoB,EAAO,WACrB,oBAAC,KACC,QAAM,KAAE,yDAA0D,YAAY,EAC9E,eAAa,KACX,gEACA,gFACF,EACA,MAAOyoB,EACP,QAASF,EACT,SAAUL,EACV,MAAO,EACP,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,iBAAiB,wBAC7E,KACA,OAAC,KACC,MAAOE,EACP,QAAM,KAAE,2DAA4D,cAAc,EAClF,eAAa,KACX,sFACA,uDACF,EAEA,YAAY,MACZ,SAAUH,EACV,MAAO,GACP,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,iBAAiB,iBAC7E,GACF,GAEJ,CAEJ,CAEA,MAAM1kB,EAAanF,IACV,CACL,cAAY,OAAI,CACd,UAAWA,EAAM,QAAQ,CAAC,EAC1B,QAAS,OACT,cAAe,QACjB,CAAC,CACH,E,uRCtGF,MAAMsqB,EAAsB,EACtBC,EAAuB,EACvBC,EAAkB,GAClBC,EAAmB,EAElB,SAASC,EAAqBC,EAAwC,CAE3E,MAAMC,EAAW,IAAI,IACrB,IAAIlJ,EAAO,EAEX,SAASmJ,EAAmB3vB,EAA0B,CACpD,QAAS4vB,EAAK,EAAGA,EAAK5vB,EAAM,MAAM,MAAQ4vB,IACxC,QAASC,EAAK,EAAGA,EAAK7vB,EAAM,MAAM,OAAS6vB,IAAM,CAC/C,MAAMxL,EAAM,GAAGrkB,EAAM,MAAM,EAAK4vB,CAAE,IAAI5vB,EAAM,MAAM,EAAK6vB,CAAE,GACzDH,EAAS,IAAIrL,CAAG,EAEZrkB,EAAM,MAAM,EAAKA,EAAM,MAAM,OAAUwmB,IACzCA,EAAOxmB,EAAM,MAAM,EAAKA,EAAM,MAAM,OAExC,CAEJ,CAEA,UAAWA,KAASyvB,EAAK,MAAM,SAG7B,GAFAE,EAAmB3vB,CAAK,EAEpBA,aAAiB,KACnB,UAAW8vB,KAAY9vB,EAAM,MAAM,SACjC2vB,EAAmBG,CAAQ,EAMjC,QAAStH,EAAI,EAAGA,EAAI,IAAUA,IAAK,CACjC,QAASD,EAAI,EAAGA,GAAK,KAAoB6G,EAAqB7G,IAAK,CACjE,IAAIwH,EAAO,GAEX,QAASH,EAAK,EAAGA,EAAKR,EAAqBQ,IAAM,CAC/C,QAASC,GAAK,EAAGA,GAAKR,EAAsBQ,KAAM,CAChD,MAAMxL,EAAM,GAAGkE,EAAIqH,CAAE,IAAIpH,EAAIqH,EAAE,GAC/B,GAAIH,EAAS,IAAIrL,CAAG,EAAG,CACrB0L,EAAO,GACP,KACF,CACF,CACA,GAAI,CAACA,EACH,KAEJ,CAEA,GAAIA,EAEF,OAAOC,EAAeN,EADT,CAAE,EAAAnH,EAAG,EAAAC,EAAG,MAAO4G,EAAqB,OAAQC,CAAqB,EACxC7I,CAAI,CAE9C,CAEA,GAAIgC,EAAIhC,EAAO6I,EACb,KAEJ,CAGA,MAAO,CAAE,EAAG,EAAG,EAAG7I,EAAM,MAAO8I,EAAiB,OAAQC,CAAiB,CAC3E,CAKA,SAASS,EAAeN,EAAuBO,EAAgBzJ,EAAc,CAE3E,GAAIyJ,EAAK,GAAKzJ,EACZ,OAAAyJ,EAAK,MAAQX,EACbW,EAAK,OAASV,EACPU,EAIT,QAAS1H,EAAI0H,EAAK,EAAIA,EAAK,MAAQ,EAAG1H,GAAK,KAAmBA,IAAK,CACjE,IAAIwH,EAAO,GAEX,QAASvH,EAAIyH,EAAK,EAAGzH,EAAIyH,EAAK,EAAIA,EAAK,OAAQzH,IAAK,CAClD,MAAMnE,EAAM,GAAGkE,CAAC,IAAIC,CAAC,GACrB,GAAIkH,EAAS,IAAIrL,CAAG,EAAG,CACrB0L,EAAO,GACP,KACF,CACF,CAEA,GAAIA,EACFE,EAAK,MAAQ1H,EAAI0H,EAAK,MAEtB,MAEJ,CAGA,QAASzH,EAAIyH,EAAK,EAAIA,EAAK,OAAS,EAAGzH,GAAKhC,EAAMgC,IAAK,CACrD,IAAIuH,EAAO,GAGX,GAAIE,EAAK,QAAU,GACjB,MAGF,QAAS1H,EAAI0H,EAAK,EAAG1H,EAAI0H,EAAK,EAAIA,EAAK,MAAO1H,IAAK,CACjD,MAAMlE,EAAM,GAAGkE,CAAC,IAAIC,CAAC,GACrB,GAAIkH,EAAS,IAAIrL,CAAG,EAAG,CACrB0L,EAAO,GACP,KACF,CACF,CAEA,GAAIA,EACFE,EAAK,OAASzH,EAAIyH,EAAK,MAEvB,MAEJ,CAEA,OAAOA,CACT,C,eCpEO,MAAMC,UACH,IAEV,CAwBS,YAAY9Q,EAAsC,CACvD,MAAMA,CAAK,EAtBb,KAAgB,yBAA2B,GAmB3C,KAAgB,WAAa8Q,EAAyB,WAKpD,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CA3BA,YAAc,UAAYC,CAAA,CAI1B,YAAuB,WAAiC,CACtD,IAAI,MAAO,CACT,SAAO,KAAE,gCAAiC,QAAQ,CACpD,EACA,IAAI,aAAc,CAChB,SAAO,KAAE,uCAAwC,2CAA2C,CAC9F,EACA,GAAI,aACJ,iBAAkBD,EAAyB,iBAC3C,aAAc,GACd,KAAM,aACR,EAEO,WAAuC,CAC5C,SAAO,MAA2B,IAAI,CACxC,CAUO,UAAUE,EAA4B,CAC3C,IAAInlB,EAAS,EACb,UAAWolB,KAAS,KAAK,MAAM,KAAK,MAAM,SAAU,CAClD,MAAMC,GAAaD,EAAM,MAAM,GAAK,IAAMA,EAAM,MAAM,QAAU,GAC5DC,EAAYrlB,IACdA,EAASqlB,EAEb,CAEA,MAAMC,EACJH,aAAiBF,EACbE,EAAM,MAAM,KACZF,EAAyB,iBAAiBE,CAAK,EAAE,MAAM,KACvDI,EAAgB,CAAC,GAAGD,EAAW,MAAM,QAAQ,EAEnD,UAAWF,KAASG,EAAe,CACjC,MAAMC,EAAWJ,EAAM,MAAM,GAAK,EAClCA,EAAM,SAAS,CAAE,EAAGI,EAAWxlB,CAAO,CAAC,CACzC,CAGAslB,EAAW,SAAS,CAAE,SAAU,CAAC,CAAE,CAAC,EACpC,UAAWF,KAASG,EAClBH,EAAM,YAAY,EAEpB,KAAK,MAAM,KAAK,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,KAAK,MAAM,SAAU,GAAGG,CAAa,CAAE,CAAC,CAC9F,CAEQ,oBAAqB,CACvBntB,EAAA,EAAO,eAAe,qBACxB,KAAK,MAAM,IACT,KAAK,iBAAiB,KAA+B,CAAC,CAAE,QAAS,CAAE,IAAAkJ,EAAK,MAAAvM,CAAM,CAAE,OAC9E,MAAyB,IAAI,GAAG,kBAAkBuM,EAAKvM,CAAK,CAC9D,CACF,EAGF,KAAK,MAAM,IACT,KAAK,MAAM,KAAK,iBAAiB,CAAC,CAAE,SAAU0wB,CAAY,EAAG,CAAE,SAAUC,CAAa,IAAM,CACtFD,EAAY,SAAWC,EAAa,QACtC,KAAK,aAAa,IAAI,KAA8B,KAAK,MAAM,IAAI,EAAG,EAAI,CAE9E,CAAC,CACH,CACF,CAEO,SAASC,EAAoB,CAClC,MAAMC,EAAUC,EAAA,GAAoB,eAAe,IAAI,EAMvD,GAJAF,EAAS,SAAS,CAAE,OAAK,MAAyBC,CAAO,CAAE,CAAC,EAC5DD,EAAS,YAAY,EAGjBvtB,EAAA,EAAO,eAAe,oBAAqB,CAC7C,MAAM0tB,EAAavB,EAAqB,KAAK,MAAM,IAAI,EACjDwB,EAAc,IAAIC,EAAA,EAAkB,CACxC,GAAGF,EACH,KAAMH,EACN,OAAK,MAAyBC,CAAO,CACvC,CAAC,EAED,KAAqB,WAAW,CAC9B,YAAaD,EACb,OAAQ,KACR,QAAS,IAAM,CACb,KAAK,MAAM,KAAK,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,KAAK,MAAM,SAAUI,CAAW,CAAE,CAAC,CACzF,EACA,KAAM,IAAM,CACV,KAAK,MAAM,KAAK,SAAS,CACvB,SAAU,KAAK,MAAM,KAAK,MAAM,SAAS,OAAQX,GAAUA,IAAUW,CAAW,CAClF,CAAC,CACH,CACF,CAAC,CACH,KAAO,CACL,MAAMA,EAAc,IAAIC,EAAA,EAAkB,CACxC,OAAQ,KACR,MAAO,KACP,EAAG,EACH,EAAG,EACH,KAAML,EACN,OAAK,MAAyBC,CAAO,CACvC,CAAC,EAED,KAAK,MAAM,KAAK,SAAS,CAAE,SAAU,CAACG,EAAa,GAAG,KAAK,MAAM,KAAK,MAAM,QAAQ,CAAE,CAAC,CACzF,CACF,CAEO,YAAa,CAClB,MAAMD,EAAavB,EAAqB,KAAK,MAAM,IAAI,EACjDwB,KAAc,SAAkC,MAAqB,IAAI,EAAGD,CAAU,EAExF1tB,EAAA,EAAO,eAAe,oBACxB,KAAqB,KAAK,CACxB,eAAa,KAAE,qCAAsC,aAAa,EAClE,YAAa2tB,EAAY,MAAM,KAC/B,OAAQ,KACR,QAAS,IAAM,CACb,KAAK,MAAM,KAAK,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,KAAK,MAAM,SAAUA,CAAW,CAAE,CAAC,CACzF,EACA,KAAM,IAAM,CACV,KAAK,MAAM,KAAK,SAAS,CACvB,SAAU,KAAK,MAAM,KAAK,MAAM,SAAS,OAAQX,GAAUA,IAAUW,CAAW,CAClF,CAAC,CACH,CACF,CAAC,EAED,KAAK,MAAM,KAAK,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,KAAK,MAAM,SAAUA,CAAW,CAAE,CAAC,KAGzF,MAAe,CACjB,CAEO,YAAYhxB,EAAiB,CAClC,MAAMkxB,EAAWlxB,EAAM,OAEvB,GAAI,EAAEkxB,aAAoBD,EAAA,GACxB,MAAM,IAAI,MAAM,+DAA+D,EAGjF,MAAME,EAAS,KAAK,MAAM,KAE1B,IAAIxE,EAEJ,GAAI,CACFA,EAAM,KAAW,YAAYuE,EAAU,IAAY,CACrD,MAAQ,CACNvE,EAAM,MACR,CAEA,GAAIA,EAAK,CACPA,EAAI,SAAS,CAAE,SAAUA,EAAI,MAAM,SAAS,OAAQ0D,GAAUA,IAAUa,CAAQ,CAAE,CAAC,EACnFC,EAAO,YAAY,EACnB,MACF,CAEA,GAAI,CAAC9tB,EAAA,EAAO,eAAe,oBAAqB,CAE9C8tB,EAAO,SAAS,CAAE,SAAUA,EAAO,MAAM,SAAS,OAAQd,GAAUA,IAAUa,CAAQ,CAAE,CAAC,EACzF,MACF,CAEA,KAAqB,cAAc,CACjC,cAAeA,EAAS,MAAM,KAC9B,OAAQ,KACR,QAAS,IAAMC,EAAO,SAAS,CAAE,SAAUA,EAAO,MAAM,SAAS,OAAQd,GAAUA,IAAUa,CAAQ,CAAE,CAAC,EACxG,KAAM,IAAMC,EAAO,SAAS,CAAE,SAAU,CAAC,GAAGA,EAAO,MAAM,SAAUD,CAAQ,CAAE,CAAC,CAChF,CAAC,CACH,CAEO,eAAeN,EAAoB,CACxC,MAAMM,EAAWN,EAAS,OAC1B,GAAI,EAAEM,aAAoBD,EAAA,GAAoB,CAC5C,QAAQ,MAAM,oEAAoE,EAClF,MACF,CAEA,IAAIG,EACAC,EACAL,EAEJ,MAAMM,EAAaR,EAAA,GAAoB,eAAe,IAAI,EACpDrB,EAAO,KAAK,MAAM,KAEpByB,aAAoBD,EAAA,GACtBG,EAAa,KAAW,sBAAsBF,EAAS,MAAM,KAAK,KAAK,EACvEG,EAAY,KAAW,QAAQH,EAAS,MAAM,IAAI,EAAE,MAAM,IAE1DE,EAAa,KAAW,sBAAsBR,EAAS,KAAK,EAC5DS,EAAY,KAAW,QAAQT,CAAQ,EAAE,MAAM,GAIjD,OAAOS,EAAU,MAAM,MAAM,WAE7B,MAAME,GAAW,IAAI,KAAS,CAC5B,GAAGH,EACH,MAAOC,EACP,OAAK,MAAyBC,CAAU,CAC1C,CAAC,EAgBD,GAdAN,EAAc,IAAIC,EAAA,EAAkB,CAClC,EAAGC,EAAS,MAAM,EAClB,EAAGA,EAAS,MAAM,EAClB,OAAQA,EAAS,MAAM,OACvB,WAAYA,EAAS,MAAM,OAC3B,MAAOA,EAAS,MAAM,MACtB,aAAcA,EAAS,MAAM,aAC7B,gBAAiBA,EAAS,MAAM,gBAChC,UAAWA,EAAS,MAAM,UAC1B,OAAK,MAAyBI,CAAU,EACxC,KAAMC,EACR,CAAC,EAGG,CAACluB,EAAA,EAAO,eAAe,oBAAqB,CAC9C,GAAI6tB,EAAS,kBAAkB,KAAc,CAC3C,MAAMvE,GAAMuE,EAAS,OAErBvE,GAAI,SAAS,CAAE,SAAU,CAAC,GAAGA,GAAI,MAAM,SAAUqE,CAAW,CAAE,CAAC,EAC/DvB,EAAK,YAAY,EACjB,MACF,CAEAA,EAAK,SAAS,CAAE,SAAU,CAAC,GAAGA,EAAK,MAAM,SAAUuB,CAAW,CAAE,CAAC,EACjE,KAAK,aAAa,IAAI,KAA4BO,EAAQ,EAAG,EAAI,EACjE,MACF,CAEA,MAAMC,EAASN,EAAS,kBAAkB,KAAeA,EAAS,OAASzB,EAC3E,KAAqB,KAAK,CACxB,eAAa,KAAE,yCAA0C,iBAAiB,EAC1E,YAAauB,EAAY,MAAM,KAC/B,OAAQ,KACR,QAAS,IAAM,CACb,MAAMS,GAAmBD,EAAO,MAAM,SAAS,QAAQN,CAAQ,EACzDQ,GAAmB,CAAC,GAAGF,EAAO,MAAM,QAAQ,EAClDE,GAAiB,OAAOD,GAAmB,EAAG,EAAGT,CAAW,EAC5DQ,EAAO,SAAS,CAAE,SAAUE,EAAiB,CAAC,CAChD,EACA,KAAM,IAAM,CACVF,EAAO,SAAS,CACd,SAAUA,EAAO,MAAM,SAAS,OAAQnB,IAAUA,KAAUW,CAAW,CACzE,CAAC,CACH,CACF,CAAC,CACH,CAEO,WAAoC,CACzC,MAAMjrB,EAAW,KAAK,MAAM,KAAK,MAAM,SACjC4rB,EAAc5rB,EAAS,KAAMsqB,GAAUA,aAAiBY,EAAA,CAAiB,EACzEW,EAAsC,CAAC,EAE7C,GAAI7rB,EAAS,OAAQ,CACnB,IAAI8qB,EAAUc,EAAcb,EAAA,GAAoB,eAAea,EAAY,MAAM,IAAI,EAAI,EAEzF5rB,EAAS,QAASsqB,GAAU,CAC1B,GAAIA,aAAiBY,EAAA,EAAmB,CACtC,MAAMY,EAAQxB,EAAM,MAAM,CACxB,IAAK,OACL,KAAMA,EAAM,MAAM,KAAK,MAAM,CAC3B,OAAK,MAAyBQ,CAAO,CACvC,CAAC,CACH,CAAC,EAEDe,EAAe,KAAKC,CAAK,EACzBhB,GACF,MACEe,EAAe,KAAKvB,EAAM,MAAM,CAAE,IAAK,MAAU,CAAC,CAAC,CAEvD,CAAC,CACH,CAUA,OARc,KAAK,MAAM,CACvB,IAAK,OACL,KAAM,KAAK,MAAM,KAAK,MAAM,CAC1B,IAAK,OACL,SAAUuB,CACZ,CAAC,CACH,CAAC,CAGH,CAEO,cAA2B,CAChC,MAAME,EAAqB,CAAC,EAE5B,YAAK,MAAM,KAAK,aAAczB,GAAU,CACtC,GAAI,EAAEA,aAAiBY,EAAA,IAAsB,EAAEZ,aAAiB,MAC9D,MAAM,IAAI,MAAM,iEAAiE,EAG/EA,aAAiBY,EAAA,GAAqBZ,EAAM,MAAM,gBAAgB,KACpEyB,EAAO,KAAKzB,EAAM,MAAM,IAAI,EACnBA,aAAiB,MAC1BA,EAAM,aAAcA,GAAU,CACxBA,aAAiBY,EAAA,GAAqBZ,EAAM,MAAM,gBAAgB,MACpEyB,EAAO,KAAKzB,EAAM,MAAM,IAAI,CAEhC,CAAC,CAEL,CAAC,EAEMyB,CACT,CAEO,WAA0B,CAC/B,MAAM9H,EAAK8G,EAAA,GAAoB,eAAe,IAAI,EAE5CnE,EAAM,IAAI,KAAa,CAC3B,OAAK,MAAyB3C,CAAE,EAChC,SAAO,KAAE,kEAAmE,WAAW,EACvF,QAAS,IAAI+H,EAAA,EAAW,CAAC,CAAC,EAC1B,EAAG,CACL,CAAC,EAEKC,EAAkB,KAAK,MAAM,KAI7BC,EAAmBD,EAAgB,MAAM,SAAS,UAAW3B,GAAUA,aAAiB,IAAY,EACpG6B,EAAcF,EAAgB,MAAM,SACvC,OAAO,EAAGC,IAAqB,GAAKD,EAAgB,MAAM,SAAS,OAASC,CAAgB,EAC5F,IAAK5B,GAAUA,EAAM,MAAM,CAAC,EAE/B,OAAI6B,GACFvF,EAAI,SAAS,CAAE,SAAUuF,CAAY,CAAC,EAGxCF,EAAgB,SAAS,CAAE,SAAU,CAACrF,EAAK,GAAGqF,EAAgB,MAAM,QAAQ,CAAE,CAAC,EAE/E,KAAK,aAAa,IAAI,KAA4BrF,CAAG,EAAG,EAAI,EACrDA,CACT,CAEO,gBAAgBwF,EAAoB,CACzC,MAAMC,EAA0B,IAAM,CACpC,KAAK,MAAM,KAAK,SAAS,CAAE,YAAaD,EAAW,YAAaA,CAAU,CAAC,KAC3E,MAAoB,KAAK,MAAM,KAAM,EAAI,CAC3C,EAEA,GAAI9uB,EAAA,EAAO,eAAe,oBAAqB,CAG7C,WAAW+uB,EAAyB,EAAE,EACtC,MACF,CAEAA,EAAwB,CAC1B,CAEO,mBAAoB,CACpB,KAAK,UACR,KAAK,SAAS,EAGX,KAAK,MAAM,KAAK,UACnB,KAAK,MAAM,KAAK,SAAS,EAG3B,KAAK,MAAM,KAAK,aAAc/B,GAAU,CACtC,GAAIA,aAAiBY,EAAA,GAAqB,CAACZ,EAAM,SAAU,CACzDA,EAAM,SAAS,EACf,MACF,CAEA,GAAIA,aAAiB,MAAgBA,EAAM,MAAM,WAAY,CAC3D,UAAWgC,KAAYhC,EAAM,MAAM,WACjC,GAAIgC,aAAoBC,EAAA,GAAuB,CAACjC,EAAM,SAAU,CAC9DA,EAAM,SAAS,EACf,KACF,CAGFA,EAAM,MAAM,SAAS,QAASA,GAAU,CACtC,GAAIA,aAAiBY,EAAA,GAAqB,CAACZ,EAAM,SAAU,CACzDA,EAAM,SAAS,EACf,MACF,CACF,CAAC,CACH,CACF,CAAC,CACH,CAEO,oBAAoC,CACzC,MAAMtqB,EAA0B,CAAC,EAEjC,UAAWsqB,KAAS,KAAK,MAAM,KAAK,MAAM,SAEpCA,aAAiBY,EAAA,GACnBlrB,EAAS,KAAKsqB,EAAM,MAAM,KAAM,GAAIA,EAAM,MAAM,gBAAkB,CAAC,CAAE,EAIzE,OAAOtqB,CACT,CAEO,YAAYwsB,EAAqBC,EAA2C,CACjF,OAAO,KAAK,MAAM,CAAC,CAAC,CACtB,CAEO,UAAU7F,EAAmB8F,EAAe,GAAO,CACxD,MAAMT,EAAkB,KAAK,MAAM,KAE7BjsB,EAAWisB,EAAgB,MAAM,SAAS,OAAQ3B,GAAUA,EAAM,MAAM,MAAQ1D,EAAI,MAAM,GAAG,EAEnG,GAAI,CAAC8F,EAAc,CACjB,MAAMP,EAAcvF,EAAI,MAAM,SAAS,IAAK0D,GAAUA,EAAM,MAAM,CAAC,EAC7DqC,EAAaV,EAAgB,MAAM,SAAS,UAAW3B,GAAUA,EAAM,MAAM,MAAQ1D,EAAI,MAAM,GAAG,EAExG5mB,EAAS,OAAO2sB,EAAY,EAAG,GAAGR,CAAW,CAC/C,CAEA,KAAK,aAAa,IAAI,KAA6BvF,CAAG,EAAG,EAAI,EAE7DqF,EAAgB,SAAS,CAAE,SAAAjsB,CAAS,CAAC,CACvC,CAEO,iBAAkB,CACvB,KAAK,MAAM,KAAK,MAAM,SAAS,QAASsqB,GAAU,CAC1CA,aAAiB,OAIlBA,EAAM,MAAM,aACf,KAAK,MAAM,KAAK,UAAUA,CAAK,EAEnC,CAAC,CACH,CAEO,eAAgB,CACrB,KAAK,MAAM,KAAK,MAAM,SAAS,QAASA,GAAU,CAC1CA,aAAiB,MAInBA,EAAM,MAAM,aACd,KAAK,MAAM,KAAK,UAAUA,CAAK,CAEnC,CAAC,CACH,CAEA,OAAc,iBAAiBsC,EAAiE,CAC9F,MAAMb,EAASa,EAAc,aAAa,EACpCC,KAAS,SAAU,MAAqBD,CAAa,EAAE,MAAM,OAAO,EAC1E,OAAOzC,EAAyB,cAAc4B,EAAQc,CAAM,CAC9D,CAEA,OAAc,cAAcd,EAAqB,CAAC,EAAGc,EAAwD,CAC3G,MAAM7sB,EAAgC,CAAC,EAEjC8sB,EAAa,KAAoB,EACvC,IAAIpC,EAAW,EACXqC,EAAW,EAEf,QAAS9yB,MAAS8xB,EAAQ,CACxB,MAAMiB,EAAe/yB,GAAM,kBAAkBgzB,EAAA,EAAehzB,GAAM,OAAO,MAAM,aAAe,OAE9FA,GAAM,YAAY,EAElB+F,EAAS,KACP,IAAIkrB,EAAA,EAAkB,CACpB,OAAK,SAAyB,MAAsBjxB,EAAK,CAAC,EAC1D,EAAG8yB,EACH,EAAGrC,EACH,MAAOoC,EACP,OAAQ,GACR,WAAY,GACZ,KAAM7yB,GACN,aAAA+yB,CACF,CAAC,CACH,EAEAD,GAAYD,EAERC,EAAWD,EAAa,OAC1BC,EAAW,EACXrC,GAAY,GAEhB,CAEA,OAAO,IAAIP,EAAyB,CAClC,KAAM,IAAI,KAAgB,CACxB,SAAAnqB,EACA,YAAa,GACb,YAAa,GACb,OAAA6sB,CACF,CAAC,CACH,CAAC,CACH,CAEA,OAAc,cACZK,EACAC,EACAC,EACAP,EAC0B,CAC1B,MAAM7sB,EAAWktB,EAAU,OAA4B,CAACjZ,EAAKkX,KAC3DA,EAAS,YAAY,EACrBlX,EAAI,KAAKkX,CAAQ,EAEVlX,GACN,CAAC,CAAC,EAEL,OAAO,IAAIkW,EAAyB,CAClC,KAAM,IAAI,KAAgB,CACxB,SAAAnqB,EACA,YAAAmtB,EACA,YAAAC,EACA,OAAAP,CACF,CAAC,CACH,CAAC,CACH,CACF,CAEA,SAASzC,EAAiC,CAAE,MAAAhD,CAAM,EAAkD,CAClG,KAAM,CAAE,SAAApnB,CAAS,KAAI,MAAoBonB,EAAM,MAAM,KAAM,CAAE,0BAA2B,EAAK,CAAC,EACxFiG,KAAY,MAAajG,CAAK,EAC9B,CAAE,UAAAgF,CAAU,EAAIiB,EAAU,SAAS,EACnCC,KAAmB,MAAuBlG,CAAK,EAC/CzmB,KAAS,MAAWuD,CAAS,EAC7BqpB,EAAoBnB,GAAa9uB,EAAA,EAAO,eAAe,qBAAuB,CAACgwB,EAGrF,SAFyB,MAAoB,EAGpCttB,EAAS,IAAKsqB,OAAU,OAACA,GAAM,UAAN,CAAgB,MAAOA,EAAA,EAAYA,GAAM,MAAM,GAAM,CAAE,EAIrFlD,EAAM,SAAWiG,GAAartB,EAAS,SAAW,KAElD,OAACwtB,EAAA,EAAc,CAAC,UAAAH,EAAsB,UAAW,CAAC,CAACA,EAAU,MAAM,KAAK,SAAa,uBAAwB,KAK/G,QAAC,OAAI,aAAW,MAAG1sB,EAAO,UAAWyrB,GAAazrB,EAAO,gBAAgB,EACtE,UAAAymB,EAAM,MAAM,KAAK,cAAa,OAACA,EAAM,MAAM,KAAK,UAAjB,CAA2B,MAAOA,EAAM,MAAM,KAAM,EACnFmG,MACC,OAAC,OAAI,UAAW5sB,EAAO,eACrB,mBAAC8sB,EAAA,EAAoB,CAAC,cAAerG,CAAA,CAAO,EAC9C,GAEJ,CAEJ,CAEA,MAAMsG,EAA+B,KAAa,UAElD,KAAa,UAAYC,EAEzB,SAASA,EAAqB,CAAE,MAAAvG,CAAM,EAAsC,CAG1E,SAFyB,MAAoB,EAGpCA,EAAM,MAAM,SAAS,IAAKkD,MAAU,OAACA,EAAM,UAAN,CAAgB,MAAOA,CAAA,EAAYA,EAAM,MAAM,GAAM,CAAE,KAG9F,OAACoD,EAAA,CAA6B,MAAAtG,CAAA,CAAc,CACrD,CAEA,SAASljB,EAAUnF,EAAsB,CACvC,MAAO,CACL,aAAW,OAAI,CACb,MAAO,OACP,QAAS,OACT,SAAU,EACV,cAAe,QACjB,CAAC,EACD,oBAAkB,OAAI,CAGpB,oBAAqB,CACnB,SAAU,eACV,UAAW,OACb,EACA,GAAG,GACL,CAAC,EACD,kBAAgB,OAAI,CAClB,SAAU,WACV,cAAeA,EAAM,QAAQ,CAAC,CAChC,CAAC,CACH,CACF,C,oHC5oBO,MAAM6uB,EAAa,CAAC,CAAE,SAAAC,EAAU,SAAA3lB,EAAU,GAAG4lB,CAAU,IAA4B,CACxF,MAAM/uB,KAAQ,MAAU,EAElB4B,EAAS,CACb,UAAW,CAGT,KAAM,CACJ,qBAAsB5B,EAAM,OAAO,WAAW,OAC9C,gBAAiBA,EAAM,OAAO,KAAK,QACnC,mBAAiB,KAAUA,EAAM,GAAG,QAAQ,UAAU,EAAE,SAAS,EAAG,EAAE,SAAS,EAC/E,WAAY,QACZ,qBAAmB,KAAUA,EAAM,GAAG,QAAQ,QAAQ,EAAE,SAAS,EAAG,EAAE,SAAS,EAC/E,aAAc,QACd,uBAAqB,KAAUA,EAAM,GAAG,QAAQ,SAAS,EAAE,SAAS,EAAG,EAAE,SAAS,EAClF,yBAAuB,KAAUA,EAAM,GAAG,QAAQ,OAAO,EAAE,SAAS,EAAG,EAAE,SAAS,EAClF,yBAAuB,KAAUA,EAAM,GAAG,QAAQ,UAAU,EAAE,SAAS,EAAG,EAAE,SAAS,EACrF,2BAAyB,KAAUA,EAAM,GAAG,QAAQ,QAAQ,EAAE,SAAS,EAAG,EAAE,SAAS,EACrF,iBAAkBA,EAAM,OAAO,WAAW,QAC1C,qBAAsBA,EAAM,OAAO,WAAW,QAC9C,uBAAqB,KAAUA,EAAM,OAAO,QAAQ,IAAI,EAAE,SAAS,EAAG,EAAE,SAAS,EACjF,6BAA2B,KAAUA,EAAM,OAAO,QAAQ,KAAK,EAAE,SAAS,EAAG,EAAE,SAAS,EACxF,yBAA0BA,EAAM,OAAO,WAAW,UAClD,mBAAoBA,EAAM,OAAO,WAAW,UAC5C,oBAAqBA,EAAM,OAAO,WAAW,UAC7C,YAAaA,EAAM,OAAO,KAAK,SAC/B,iBAAkBA,EAAM,OAAO,KAAK,QACpC,mBAAoBA,EAAM,OAAO,KAAK,QACtC,qBAAsBA,EAAM,OAAO,KAAK,SACxC,0BAA2BA,EAAM,OAAO,WAAW,UACnD,qBAAsBA,EAAM,OAAO,KAAK,SACxC,2BAA4BA,EAAM,OAAO,OAAO,MAClD,CACF,EACA,SAAU,CACR,SAAUA,EAAM,WAAW,UAAU,QACvC,EACA,OAAQ,CACN,IAAK,CACH,SAAO,KAAUA,EAAM,OAAO,KAAK,QAAQ,EAAE,SAAS,CAAC,EAAE,SAAS,EAClE,QAAS,GACX,CACF,CACF,EAEA,SACE,OAAC,OACC,aAAW,OAAI,CACb,SAAUA,EAAM,WAAW,UAAU,SAErC,IAAK,CACH,IAAK,QACP,CACF,CAAC,EAED,mBAAC,KACC,OAAA4B,EACA,SAAAktB,EACA,SAAA3lB,EACA,UAAW,GACX,cAAe,aAAW,IAC1B,aAAcnJ,EAAM,OACnB,GAAG+uB,CAAA,CACN,EACF,CAEJ,C,mJCnEO,MAAMC,EAA2B,CACtC,MAAO,CAAC,EACR,YAAa,GACb,KAAM,EACN,QAAS,GACT,WAAY,EACZ,oBAAqB,KAAO,oBAC5B,wBAAyB,KAAO,wBAChC,uBAAwB,KAAO,uBAC/B,UAAW,GACX,aAAc,EAChB,EAgBMC,KAAa,MAAY,CAC7B,KAAM,QACN,aAAAD,EACA,SAAU,CACR,YAAa,CAAC1U,EAAOkN,IAAwD,CAC3E,KAAM,CAAE,WAAA0H,EAAY,QAAAC,EAAS,KAAAC,EAAM,SAAAC,CAAS,EAAI7H,EAAO,QACjD8H,EAAa,KAAK,KAAKJ,EAAaC,CAAO,EAEjD,MAAO,CACL,GAAG7U,EACH,UAAW,GACX,MAAO+U,EACP,QAAAF,EACA,KAAAC,EACA,WAAAE,CACF,CACF,EACA,mBAAoB,CAAChV,EAAOkN,KAEnB,CAAE,GAAGlN,EAAO,YAAakN,EAAO,QAAS,KAAMwH,EAAa,IAAK,GAE1E,mBAAoB,CAAC1U,EAAOkN,KACnB,CAAE,GAAGlN,EAAO,KAAMkN,EAAO,OAAQ,GAE1C,YAAa,CAAClN,EAAOkN,KAAmC,CACtD,GAAGlN,EACH,KAAMkN,EAAO,OACf,GACA,YAAa,CAAClN,EAAOkN,KAA+C,CAClE,GAAGlN,EACH,KAAMkN,EAAO,OACf,GACA,gBAAkBlN,IACT,CAAE,GAAGA,EAAO,UAAW,EAAK,GAErC,cAAgBA,IACP,CAAE,GAAGA,EAAO,UAAW,EAAM,GAEtC,gBAAkBA,IACT,CAAE,GAAGA,EAAO,aAAc,EAAK,GAExC,cAAgBA,IACP,CAAE,GAAGA,EAAO,aAAc,EAAM,EAE3C,CACF,CAAC,EAEY,CACX,mBAAAiV,EACA,mBAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,YAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,cAAAC,CACF,EAAId,EAAW,QAIf,EAAe,CACb,MAH0BA,EAAW,OAIvC,C,oGC5FO,SAASe,EAAaC,EAA2B,CACtD,MAAMC,EAAiB,CAAC,QAAS,OAAQ,MAAO,YAAa,YAAY,EAEzE,UAAW3Q,KAAO0Q,EAEhB,GAAI1Q,IAAQ,SAGR,CAAC2Q,EAAe,SAAS3Q,CAAG,EAC9B,MAAO,GAIX,MAAO,EACT,CAEO,SAAS4Q,EAAS/I,EAAsB6I,EAA4BrJ,EAAyC,CAClH,MAAMwJ,EAAe,CACnB,GAAGH,EACH,SAAO,KAAa7I,CAAO,EAC3B,KAAM,EACR,EAEA,MAAI,CAACgJ,EAAE,YAAcxJ,IACnBwJ,EAAE,WAAaxJ,GAGV,CAAC,GAAGQ,EAASgJ,CAAC,CACvB,CAEO,SAASC,EAAYC,EAAsB,CAChD,OAAIA,EAAI,QAAQ,uBAAuB,IAAM,IAAMA,EAAI,QAAQ,cAAc,IAAM,EAKrF,CAEO,SAASC,EAAWD,EAAa,CACtC,MAAO,CAACA,EAAI,MAAM,OAAO,CAC3B,CAQO,SAASE,EAAmB34B,EAAsD,CACvF,OAAOA,GAAS,MAClB,C,uECjDA,MAAM44B,EAAwB,kCAMvB,SAASC,EAAiBC,EAAsE,CAGrG,OAFuB,IAAM,UAAkCF,EAAuB,CAAC,CAAC,EAElEE,CAAiB,CACzC,CAEO,SAASC,EAAiBD,EAAiD94B,EAA4B,CAC5G,MAAMg5B,EAAiB,IAAM,UAAkCJ,EAAuB,CAAC,CAAC,EAExFI,EAAeF,CAAiB,EAAI94B,EACpC,IAAM,UAAU44B,EAAuBI,CAAc,CACvD,C,iICPO,SAASC,EAAe,CAAE,OAAAC,EAAS,MAAO,EAAU,CACzD,MAAMnvB,KAAS,MAAWuD,CAAS,EAC7B6rB,EAAkBD,EAAO,YAAY,EAE3C,SACE,OAAC,OAAI,UAAWnvB,EAAO,UAAW,cAAa,KAAU,WAAW,eAAe,UACjF,mBAAC,IAAU,CAAC,QAAS,GAAGmvB,CAAM,aAAc,QAAQ,YAClD,oBAAC,KAAK,CAAC,QAAQ,+BAA+B,uDACS,CAAE,gBAAAC,CAAgB,EAAE,kBAAgB,OACzF,OAAC,IAAQ,CAAC,KAAK,IAAI,gBAAI,EAAW,0BAAwB,OAC1D,OAAC,IAAQ,CAAC,KAAK,gCAAgC,SAAQ,GAAC,2BAExD,GACF,EACF,EACF,CAEJ,CAEO,SAAS7rB,EAAUnF,EAAsB,CAC9C,MAAO,CACL,aAAW,OAAI,CACb,QAASA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,CACnC,CAAC,CACH,CACF,C,iIC5BA,MAAMixB,KAAW,cACf,CAAC,CAAE,SAAAhwB,EAAU,KAAAqF,EAAM,MAAAlN,EAAQ,YAAa,UAAA83B,EAAY,MAAO,GAAGxqB,CAAK,EAAGjN,IAAQ,CAC5E,MAAMmI,KAAS,MAAWuD,CAAS,EAC7BgsB,EAAc,OAAOzqB,EAAK,SAAY,WAEtC0qB,EAAeF,IAAc,MAC7BG,EAAaD,EAAe,SAAW,aACvCE,EAAMF,EAAe,GAAM,EAEjC,SACE,OAAC,OACC,IAAA33B,EACA,aAAW,MAAG,CACZ,CAACmI,EAAO,WAAW,EAAGuvB,CACxB,CAAC,EAEA,GAAGzqB,EAEJ,mBAAC,IAAI,CAAC,QAAQ,YAAY,MAAAtN,EACxB,oBAAC,IAAK,CAAC,UAAA83B,EAAsB,WAAAG,EAAwB,IAAAC,EAAU,KAAM,OAClE,UAAAhrB,MAAQ,OAAC,IAAI,CAAC,KAAK,KAAK,KAAMA,CAAA,CAAM,EACpCrF,CAAA,EACH,EACF,EACF,CAEJ,CACF,EAEAgwB,EAAS,YAAc,WAEvB,MAAM9rB,EAAY,KAAO,CACvB,eAAa,OAAI,CACf,OAAQ,SACV,CAAC,CACH,E,iGCtCA,SAASosB,EAAcC,EAAuB,CAC5C,OAAOA,EAAM,MAAM,UAAU,MAAM,UACrC,CAEA,SAASC,EAAiBD,EAAuB,CAC/C,OAAOA,EAAM,MAAM,UAAU,MAAM,aACrC,CAEA,SAASE,EAAcx2B,EAAiB,CACtC,OAAIA,EAAM,MAAM,YAAc,MAAM,QAAQA,EAAM,MAAM,UAAU,EAE9CA,EAAM,MAAM,WAAW,KAAM0R,GAASA,aAAgB,GAAa,GACjE,KAGf,IACT,CAEA,SAAS+kB,EAAaH,EAAmC,CACvD,OAAOA,EAAM,MAAM,KAAK,aAAa,CACvC,CAMO,SAASI,EAAeJ,EAA4B,CACzD,IAAInxB,EAAM,EAEV,YACG,eACCmxB,EAAM,QAAQ,EACbK,IAASA,aAAe,MAAYA,aAAe,OAAiB,CAACA,EAAI,MAAM,eAClF,EACC,QAAS32B,GAAU,CAClB,MAAM6wB,KAAU,MAAsB7wB,CAAK,EACvC6wB,EAAU1rB,IACZA,EAAM0rB,EAEV,CAAC,EAEI1rB,EAAM,CACf,CAEA,SAASyxB,EAAcN,EAA8C,CACnE,MAAMx1B,EAAO,KAAW,QAAQw1B,CAAK,EAErC,GAAI,EAAEx1B,aAAgB,KACpB,MAAM,IAAI,MAAM,iCAAiC,EAGnD,OAAOA,CACT,CAEA,SAAS+1B,EAAsBP,EAAmC,CAChE,SACE,MAAqBA,CAAK,EACvB,MAAM,SAAS,MAAM,WAAW,oBAAoB,EACpD,IAAI,CAAC,CAAC,CAAE/3B,CAAG,IAAMA,EAAI,QAAQ,CAAC,GAAK,CAAC,CAE3C,CAEO,SAASu4B,EAAcR,EAAuB,CACnD,MAAMS,EAAaT,EAAM,MAAM,YAAY,KAAMzzB,GAAMA,aAAa,OAAoB,EAExF,GAAIk0B,aAAsB,QACxB,OAAOA,CAIX,CAEO,SAASC,EAAgCpG,EAA4B,CAC1E,MAAM0F,KAAQ,MAAqB1F,CAAQ,EACrCC,KAAU,MAAsBD,CAAQ,EAC9C,IAAIqG,EAAaX,EAAM,WAAW,qBAAqBzF,CAAO,EAE9D,OAAKoG,IAEHA,KAAa,MAAyBpG,CAAO,GAExCoG,CACT,CAEO,MAAMnG,EAAsB,CACjC,cAAAuF,EACA,iBAAAE,EACA,cAAAC,EACA,aAAAC,EACA,cAAAG,EACA,sBAAAC,EACA,cAAAC,EACA,oBAAmB,KACnB,eAAAJ,EACA,gCAAAM,CACF,C,gDCvGO,MAAME,EAAsC,CACjD,wBAAyB,CACvB,+BAAgC,CAC9B,QAAS,EACT,OAAQ,OACV,CACF,CACF,C,oJCgBO,eAAeC,EAAsBC,EAAiD,CAC3F,GAAIA,IAAkB,KACpB,MAAO,CACL,YAAa,UACb,SAAU,CACR,gBAAiB,EACnB,CACF,EAGF,MAAMC,KAAW,MAAwBD,CAAa,EACtD,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,6CAA6CD,CAAa,EAAE,EAG9E,KAAM,CAAE,IAAAhC,EAAK,KAAAriB,EAAM,KAAAtW,CAAK,EAAI46B,EAC5B,GAAI,CAACjC,EACH,MAAM,IAAI,MAAM,sCAAsC,EAGxD,GAAI,IAAC,MAAmC34B,CAAI,EAC1C,MAAM,IAAI,MACR,+CAA+CA,CAAI,0BAA0B,KAAqC,KAAK,CAAC,GAC1H,EAGF,OAAO66B,EAA2B,CAAE,KAAAvkB,EAAM,IAAAqiB,EAAK,KAAA34B,CAAK,CAAC,CACvD,CAUO,eAAe66B,EAA2BC,EAIpB,CAC3B,KAAM,CAAE,IAAAnC,EAAK,KAAAriB,EAAM,KAAAtW,CAAK,EAAI86B,EAKtBC,EAAoB/6B,IAAS,OAAS,OAAY,MAAMg7B,EAAmBrC,CAAG,EAMpF,GAAI,EAHiBoC,IAAsB,QAGxB,CAGjB,GAAI,CADuB,MAAME,EAAoB3kB,CAAI,EAEvD,MAAM,IAAI,MAAM,uCAAuCA,CAAI,mCAAmC,EAIhG,MAAM4kB,EAAiB,MAAMC,EAAgB7kB,CAAI,EAEjD,MAAO,CAEL,YAAatW,IAAS,OAAS,OAAS,KAAgB,OACxD,SAAU,CACR,gBAAiBk7B,CACnB,CACF,CACF,CAGA,KAAM,CAAE,SAAAE,CAAS,EAAIL,EAAkB,KACvC,OAAKK,EAUE,CACL,YAAa,KAAgB,MAC7B,SAAU,CACR,gBAAiBA,GAAU,mBAAqB,MAClD,CACF,EAdS,CACL,YAAa,KAAgB,WAC7B,SAAU,CACR,gBAAiB,EACnB,CACF,CAUJ,CAEO,eAAeC,EAA6BC,EAAwD,CACzG,GAAIA,IAAiB,KACnB,MAAO,CAAE,eAAgB,EAAM,EAGjC,MAAMV,EAAWW,EAAoBD,CAAY,EAE3C,CAAE,IAAA3C,EAAK,KAAA34B,CAAK,EAAI46B,EACtB,GAAI,CAACjC,EACH,MAAM,IAAI,MAAM,sCAAsC,EAGxD,GAAI34B,IAAS,eACX,MAAM,IAAI,MACR,uDAAuDA,CAAI,yCAC7D,EAGF,OAAO,MAAMw7B,EAAkC7C,CAAG,CACpD,CAEO,eAAe6C,EAAkC7C,EAA+C,CACrG,GAAI,CAEF,MAAO,CAAE,gBADS,MAAMqC,EAAmBrC,CAAG,IACV,MAAM,cAAgB,eAAgB,CAC5E,MAAY,CAEV,MAAO,CAAE,eAAgB,EAAM,CACjC,CACF,CAEA,SAAS4C,EAAoBD,EAAsB,CACjD,MAAMV,KAAW,MAAoBU,CAAY,EACjD,GAAI,CAACV,EACH,MAAM,IAAI,MAAM,6CAA6CU,CAAY,EAAE,EAE7E,OAAOV,CACT,CAEO,eAAeI,EAAmBrC,EAAyD,CAehG,OAdiB,QAAM,QACrB,MAAc,EAAE,MAA6B,CAC3C,IAAK,GAAGA,CAAG,2BACX,eAAgB,GAChB,iBAAkB,EACpB,CAAC,CACH,EAAE,MAAO1oB,GAAM,CACb,GAAI,aAAYA,GAAKA,EAAE,SAAW,KAIlC,MAAMA,CACR,CAAC,IAEgB,IACnB,CAKA,eAAegrB,EAAoBQ,EAAwB,CACzD,GAAI,CACF,eAAM,MAAWA,CAAc,EACxB,EACT,MAAY,CACV,MAAO,EACT,CACF,CAMA,eAAeN,EAAgBM,EAAwB,CACrD,GAAI,CACF,eAAM,MAAyBA,CAAc,EACtC,EACT,OAASxrB,EAAG,CACV,GAAIyrB,EAAkCzrB,CAAC,EACrC,MAAO,GAET,MAAMA,CACR,CACF,CAEA,SAASyrB,EAAkC9qB,EAAgB,CACzD,SAAO,MAAaA,CAAK,EACrBA,EAAM,KAAK,SAAS,SAAS,8CAA8C,GACzEA,EAAM,KAAK,SAAS,SAAS,gBAAgB,GAC7CA,EAAM,KAAK,SAAS,SAAS,IAAuB,EACtDA,aAAiB,OAASA,EAAM,SAAS,SAAS,gCAAgC,CACxF,C,6FC5LY+qB,GAAAA,IACVA,EAAA,cAAgB,iBAChBA,EAAA,gBAAkB,mBAClBA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,aAAe,eACfA,EAAA,QAAU,UACVA,EAAA,YAAc,eACdA,EAAA,YAAc,eARJA,IAAAA,GAAA,IAyCL,MAAMC,UAAiD,IAAgC,CAAvF,kCACL,KAAQ,yBAAoE,CAAC,EAC7E,KAAQ,uBAAgE,CAAC,EACzE,KAAQ,kBAAsD,CAAC,EAC/D,KAAQ,sBAA8D,CAAC,EAUvE,KAAKC,EAAwB,CAAC,CAQ9B,YAAYC,EAAsC,CAChD,YAAK,KAAOA,EACL,IACT,CAEA,+BAA+BC,EAA8B,CAG3D,MAFA,KAAeA,CAAa,EAExB,KAAK,MAAQ,KAAK,KAAK,UACzB,UAAWC,KAAW,KAAK,KAAK,SAC9B,GAAIA,EAAQ,OAAS,KAAkB,MAAQA,EAAQ,WAGjD,CAFQD,EAAcC,EAAQ,SAAS,EAEjC,CACR,QAAQ,KAAK,oCAAqCA,EAAQ,UAAW,KAAK,IAAI,EAC9E,QACF,EAIR,CAEA,IAAI,yBAA0B,CAC5B,OAAO,KAAK,wBACd,CAEA,IAAI,uBAAwB,CAC1B,OAAO,KAAK,sBACd,CAEA,IAAI,kBAAmB,CACrB,OAAO,KAAK,iBACd,CAEA,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACd,CAEA,QAAgCC,EAAqD,CACnF,YAAK,kBAAkB,KAAKA,CAA4C,EAEjE,IACT,CAEA,aAAyBC,EAAkE,CACzF,YAAK,uBAAuB,KAAKA,CAA2D,EAErF,IACT,CAEA,YAAuBC,EAAoE,CACzF,YAAK,sBAAsB,KAAKA,CAAmB,EAE5C,IACT,CAEA,gBAA4BC,EAA+D,CACzF,YAAK,yBAAyB,KAAKA,CAAwD,EAEpF,IACT,CACF,CAMO,IAAKC,GAAAA,IAEVA,EAAA,MAAQ,QAERA,EAAA,KAAO,OAEPA,EAAA,aAAe,eAEfA,EAAA,eAAiB,kBAEjBA,EAAA,QAAU,UAEVA,EAAA,IAAM,MAZIA,IAAAA,GAAA,G,8HC/IAC,GAAAA,IACVA,EAAA,aAAe,gBACfA,EAAA,SAAW,WACXA,EAAA,WAAa,gBACbA,EAAA,UAAY,aACZA,EAAA,uBAAyB,2BACzBA,EAAA,gBAAkB,mBANRA,IAAAA,GAAA,IAgBL,MAAMC,EAAoB,CAAC,CAAE,SAAAC,EAAU,GAAGztB,CAAK,OAElD,OAAC,KACC,SAAO,KAAE,0CAA2C,oDAAqD,CACvG,SAAAytB,CACF,CAAC,EACD,SAAS,OACR,GAAGztB,EAEJ,oBAAC,KAAK,CAAC,QAAQ,yCAAyC,kBAChD,CAAE,SAAAytB,CAAS,EAAE,+GACH,CAAE,SAAAA,CAAS,EAAE,KAC/B,EACF,EAISC,EAAoB,CAAC,CAChC,QAAAnvB,EACA,WAAAovB,CACF,IAMM,CACJ,MAAMC,KAAQ,OAAC,IAAK,CAAC,QAAM,KAAE,qDAAsD,aAAa,EAAG,MAAM,QAAS,GAElH,GAAIrvB,EAAS,CACX,MAAMsvB,KACJ,QAAC,KAAK,CAAC,QAAQ,iDAAiD,OAAQ,CAAE,WAAAF,CAAW,EAAG,oDAC9C,CAAE,WAAAA,CAAW,EAAE,wCACzD,EAGIG,KACJ,OAAC,KAAK,CAAC,QAAQ,+CAA+C,kFAE9D,EAGItxB,EAAiBmxB,EAAaE,EAAoBC,EACxD,SACE,OAAC,IAAO,CAAC,QAAStxB,EAChB,mBAAC,QAAM,SAAAoxB,CAAA,CAAM,EACf,CAEJ,CACA,OAAOA,CACT,C,6HCxDA,MAAMG,EACJ,CAACl2B,EAA+BjD,IAC/BC,GAAW,CACV,MAAMm5B,EAAO,IAA6B,IAAIn2B,EAAO,EAAE,EAEvD,GAAI,CAACm2B,EACH,OAAOn5B,EAIT,MAAMF,EAAU,CAAE,GADKq5B,EAAK,eAAe,gBAAkB,CAAC,EACzB,GAAGn2B,EAAO,OAAQ,EAKjDo2B,EAFW,OAAO,uBAAyB,KAG7Ct5B,EACAu5B,KAAY,aAAUv5B,CAAO,EAAI+B,GAC3B,OAAOA,GAAM,SACR9B,EAAI,YAAY8B,CAAC,EAEnBA,CACR,EAECy3B,EAAUt2B,EAAO,QAAQ,WAAU,MAAiBA,EAAO,MAAM,EAAI,OAC3E,OAAOhD,EAAO,QACZ,KAAUu5B,MACR,MAAGC,EAAYD,EAAQD,CAAO,CAAC,EAAE,KAC/BH,EAAK,eAAe,SAASC,EAAcr5B,CAAG,EAC9C05B,EAAqBF,EAAQJ,EAAMG,CAAO,CAC5C,CACF,CACF,CACF,EAEF,SAASE,EAAY/4B,EAAmB64B,EAAwB,CAC9D,OAAIA,EACK74B,EAAK,OAAQoB,GAAMy3B,EAAQz3B,CAAC,CAAC,EAE/BpB,CACT,CAEA,MAAMg5B,EACJ,CAACF,EAAqBJ,EAA+BG,IACpDt5B,GACCA,EAAO,QACL,KAAK05B,GAAU,CACb,GAAIA,IAAUH,EACZ,OAAOG,EAIT,GAAIJ,EAAS,CAEX,IAAIpmB,EAAS,EACb,MAAML,EAAS0mB,EAAO,OAAO,CAAC13B,EAAGwmB,IAAQ,CACvC,MAAMsR,EAAO,CAACL,EAAQz3B,CAAC,EACvB,OAAI83B,GAAQ,CAACzmB,IACXA,EAASmV,GAEJsR,CACT,CAAC,EACG9mB,EAAO,QACT6mB,EAAM,OAAOxmB,EAAQ,EAAG,GAAGL,CAAM,CAErC,CACA,OAAO6mB,CACT,CAAC,CACH,EAKG,SAASE,EACd95B,EACAW,EACAV,EACyB,CACzB,MAAM85B,KAAS,MAAgBp5B,CAAI,EAEnC,GAAI,CAACX,EAAQ,OACX,OAAO+5B,EAGT,MAAMC,EAA0D,CAAC,EAC3DxgB,EAAUvZ,GAAO,CAAE,YAAcg6B,GAAQA,CAAI,EAEnD,QAAS7rB,EAAQ,EAAGA,EAAQpO,EAAQ,OAAQoO,IAAS,CACnD,MAAMlL,EAASlD,EAAQoO,CAAK,EAE5B,GAAI8rB,EAAuBh3B,CAAM,EAC/B82B,EAAU,KAAK92B,EAAOsW,CAAO,CAAC,MACzB,CACL,GAAItW,EAAO,SACT,SAEF82B,EAAU,KAAKZ,EAAYl2B,EAAQsW,CAAO,CAAC,CAC7C,CACF,CAGA,OAAOugB,EAAO,KAAK,MAAMA,EAAQC,CAAS,CAC5C,CAEA,SAASE,EAAuBh4B,EAAkF,CAChH,OAAO,OAAOA,GAAM,UACtB,CAIA,SAASq3B,EAAY/C,EAAU2D,EAAyC,CACtE,GAAI,MAAM,QAAQ3D,CAAG,EACnB,OAAOA,EAAI,IAAK/5B,GAAM88B,EAAY98B,EAAG09B,CAAW,CAAC,EAGnD,GAAI,OAAO3D,GAAQ,SAAU,CAC3B,UAAWtS,KAAOsS,EAChBA,EAAItS,CAAG,EAAIqV,EAAY/C,EAAItS,CAAG,EAAGiW,CAAW,EAG9C,OAAO3D,CACT,KACE,QAAO2D,EAAY3D,CAAG,GAAKA,CAE/B,C,0IC1HA,MAAM4D,EAA2B,OAC/B,CAAC,CAAE,QAAAC,EAAS,QAAAC,CAAQ,OAClB,OAAC,KACC,SAAO,KAAE,gEAAiE,oBAAoB,EAC9F,SAAS,yEACT,QAAAA,EACA,KAAK,KAEL,mBAAC,IAAK,CAAC,UAAW,SAChB,mBAAC,KAAoB,CAAC,WAAW,WAC/B,mBAAC,kBACC,QAAAD,EACA,uBAAwB,KACxB,iBAAkBC,EAClB,SAAUA,CAAA,CACZ,EACF,EACF,EACF,EAEF,CAACpsB,EAAW9H,IAAc8H,EAAU,UAAY9H,EAAU,OAC5D,EACAg0B,EAAyB,YAAc,2BAEvC,QAAeA,C,aCbd,SAASG,GAAE,CAEV,SAASC,EAAKC,EAAM,CAElBA,EAAK,MAAM,kBAAkB,KAAK,SAASA,EAAMrjB,EAAQsjB,EAAY,CAE9DtjB,EAAO,OAAO,MAEnBqjB,EAAK,MAAM,KAAK,KAAK,SAASA,EAAMx6B,EAAK,CAEvC,IAAI06B,EAAaF,EAAK,cAAc,EAClCG,EAAQxjB,EAAO,MACfyjB,EAAQzjB,EAAO,MAEjB,SAAS0jB,EAAWC,EAASC,EAAS,CAEpC,IAAIC,EAASP,EAAW,OACtBQ,EAAKR,EAAW,UAChBS,EAAQ,KACRC,EAAQ,KACRC,EAAgB,EAChBC,EAAS,GACTC,EACAC,EAEEpkB,EAAO,OAAO,WAAW,CAAC,GAC5BmkB,EAAenkB,EAAO,OAAO,WAAW,CAAC,EACrCA,EAAO,OAAO,WAAW,CAAC,EAC5BokB,EAAgBpkB,EAAO,OAAO,WAAW,CAAC,EAE1CokB,EAAgBD,GAGlBC,EAAgBD,EAAenkB,EAAO,OAAO,WAG/CnX,EAAI,UAAU,EAEd,QAASqD,EAAI43B,EAAI53B,EAAI23B,EAAO,OAAQ33B,GAAK43B,EAAI,CAgE3C,IAASO,EAAT,SAA2BC,EAAe,CAExC,IAAIzvB,EAAI,KAAK,KAAK,KAAK,IAAI0vB,EAAMC,EAAK,CAAC,EAAI,KAAK,IAAIC,EAAMC,EAAK,CAAC,CAAC,EAEjE,GAAI7vB,GAAKyvB,EACP,MAAO,CACL,OAAQC,EAAMC,EACd,OAAQC,EAAMC,EACd,SAAU7vB,EACV,UAAWyvB,EAAgBzvB,CAC7B,EAEA,IAAI8vB,EAAQJ,EAAMC,EAAM,EAAI,GAC1BI,EAAQH,EAAMC,EAAM,EAAI,GAC1B,MAAO,CACL,OAAQC,EAAQ,KAAK,KAAK,KAAK,IAAIL,EAAe,CAAC,GAAK,EAAI,KAAK,KAAKG,EAAMC,IAAMH,EAAMC,GAAM,CAAC,EAAE,EACjG,OAAQI,EAAQ,KAAK,KAAK,KAAK,IAAIN,EAAe,CAAC,EAAI,KAAK,IAAIA,EAAe,CAAC,GAAK,EAAI,KAAK,KAAKG,EAAMC,IAAMH,EAAMC,GAAM,CAAC,EAAE,EAC9H,SAAUF,EACV,UAAW,CACb,CAEJ,EArBS,IAAAD,IA9DLQ,EAAKhB,EAAO33B,EAAI43B,CAAE,EACpBgB,EAAKjB,EAAO33B,EAAI43B,EAAK,CAAC,EACtBiB,EAAKlB,EAAO33B,CAAC,EACb84B,EAAKnB,EAAO33B,EAAI,CAAC,EAEnB,GAAI,EAAA24B,GAAM,MAAQE,GAAM,MAGxB,IAAID,GAAME,GAAMF,EAAKrB,EAAM,IAAK,CAC9B,GAAIuB,EAAKvB,EAAM,IAAK,SAEpBoB,GAAMpB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOC,EAAKF,GAAMA,EAChDC,EAAKrB,EAAM,GACb,SAAWuB,GAAMF,GAAME,EAAKvB,EAAM,IAAK,CACrC,GAAIqB,EAAKrB,EAAM,IAAK,SACpBsB,GAAMtB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOC,EAAKF,GAAMA,EAChDG,EAAKvB,EAAM,GACb,CAGA,GAAIqB,GAAME,GAAMF,EAAKrB,EAAM,IAAK,CAC9B,GAAIuB,EAAKvB,EAAM,IAAK,SACpBoB,GAAMpB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOC,EAAKF,GAAMA,EAChDC,EAAKrB,EAAM,GACb,SAAWuB,GAAMF,GAAME,EAAKvB,EAAM,IAAK,CACrC,GAAIqB,EAAKrB,EAAM,IAAK,SACpBsB,GAAMtB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOC,EAAKF,GAAMA,EAChDG,EAAKvB,EAAM,GACb,CAGA,GAAIoB,GAAME,GAAMF,EAAKrB,EAAM,IAAK,CAC9B,GAAIuB,EAAKvB,EAAM,IAAK,SACpBsB,GAAMtB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOG,EAAKF,GAAMA,EAChDD,EAAKrB,EAAM,GACb,SAAWuB,GAAMF,GAAME,EAAKvB,EAAM,IAAK,CACrC,GAAIqB,EAAKrB,EAAM,IAAK,SACpBwB,GAAMxB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOG,EAAKF,GAAMA,EAChDC,EAAKvB,EAAM,GACb,CAGA,GAAIqB,GAAME,GAAMF,EAAKrB,EAAM,IAAK,CAC9B,GAAIuB,EAAKvB,EAAM,IAAK,SACpBsB,GAAMtB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOG,EAAKF,GAAMA,EAChDD,EAAKrB,EAAM,GACb,SAAWuB,GAAMF,GAAME,EAAKvB,EAAM,IAAK,CACrC,GAAIqB,EAAKrB,EAAM,IAAK,SACpBwB,GAAMxB,EAAM,IAAMqB,IAAOE,EAAKF,IAAOG,EAAKF,GAAMA,EAChDC,EAAKvB,EAAM,GACb,EAEIqB,GAAMd,GAASe,GAAMd,IACvBn7B,EAAI,OAAO26B,EAAM,IAAIqB,CAAE,EAAIlB,EAASF,EAAM,IAAIqB,CAAE,EAAIlB,CAAO,EAG7D,IAAIY,EAAMhB,EAAM,IAAIqB,CAAE,EAAIlB,EACxBe,EAAMjB,EAAM,IAAIqB,CAAE,EAAIlB,EACtBW,EAAMf,EAAM,IAAIuB,CAAE,EAAIpB,EACtBc,EAAMhB,EAAM,IAAIuB,CAAE,EAAIpB,EACtBqB,EA0BF,GAEEA,EAAaZ,EACXJ,EAAgB,EAAIA,EAClBC,EAASC,EAAeC,CAAa,GAErCa,EAAW,QAAU,GAAKA,EAAW,QAAU,KAC7Cf,EACFr7B,EAAI,OAAO27B,EAAMS,EAAW,OAAQP,EAAMO,EAAW,MAAM,EAE3Dp8B,EAAI,OAAO27B,EAAMS,EAAW,OAAQP,EAAMO,EAAW,MAAM,GAI/Df,EAAS,CAACA,EACVD,EAAgBgB,EAAW,UAC3BT,GAAOS,EAAW,OAClBP,GAAOO,EAAW,aAEXA,EAAW,SAAW,GAE/BlB,EAAQgB,EACRf,EAAQgB,EACV,CAEAn8B,EAAI,OAAO,CACb,CAGAA,EAAI,KAAK,EACTA,EAAI,UAAU06B,EAAW,KAAMA,EAAW,GAAG,EAC7C16B,EAAI,SAAW,QAEf,IAAIq8B,EAAKllB,EAAO,OAAO,UACrBmlB,EAAKnlB,EAAO,WAGd,GAAIklB,EAAK,GAAKC,EAAK,EAAG,CAEpBt8B,EAAI,UAAYs8B,EAChBt8B,EAAI,YAAc,kBAElB,IAAIu8B,EAAQ,KAAK,GAAG,GACpB1B,EAAW,KAAK,IAAI0B,CAAK,GAAKF,EAAG,EAAIC,EAAG,GAAI,KAAK,IAAIC,CAAK,GAAKF,EAAG,EAAIC,EAAG,EAAE,EAC3Et8B,EAAI,UAAYs8B,EAAG,EACnBzB,EAAW,KAAK,IAAI0B,CAAK,GAAKF,EAAG,EAAIC,EAAG,GAAI,KAAK,IAAIC,CAAK,GAAKF,EAAG,EAAIC,EAAG,EAAE,CAC7E,CAEAt8B,EAAI,UAAYq8B,EAChBr8B,EAAI,YAAcmX,EAAO,MAErBklB,EAAK,GACPxB,EAAW,EAAG,CAAC,EAGjB76B,EAAI,QAAQ,CAEd,CAAC,CAGH,CAAC,CAGH,CAGAs6B,GAAE,KAAK,QAAQ,KAAK,CAClB,KAAMC,EACN,QAAS,CACP,OAAQ,CACN,OAAQ,CACN,KAAM,GACN,UAAW,EACX,WAAY,EACd,CACF,CACF,EACA,KAAM,SACN,QAAS,KACX,CAAC,CAEH,GAAG,MAAM,C,uJCrNF,SAASiC,EAAQ,CACtB,QAAAlxB,EACA,KAAA+W,EACA,UAAAjI,EACA,UAAArT,EACA,iBAAA01B,EACA,iBAAAC,EACA,YAAAC,EACA,WAAAC,EACA,MAAOC,EACP,GAAGzxB,CACL,EAAU,CACR,MAAM1G,KAAQ,MAAU,EAClBo4B,KAAW,UAAO,IAAI,EACtBC,KAAsB,KAAa3iB,CAAS,EAK5C4iB,EAAa,IAAC,MAAO,CAAC,EAAG,MAAG,4BAAyBD,CAAmB,CAAC,EAE3EJ,GACFK,EAAW,QACT,MAAM,CACJ,QAASF,CACX,CAAC,CACH,EAGF,KAAM,CAAE,QAAAvjB,EAAS,KAAA0jB,EAAM,eAAAC,CAAe,KAAI,MAAY,CACpD,KAAM7a,EACN,UAAW0a,EACX,WAAAC,EACA,qBAAsB,KACtB,SAAU,OACZ,CAAC,KAED,mBAAgB,IAAM,CACpBC,EAAK,aAAaP,CAAgB,CACpC,EAAG,CAACA,EAAkBO,CAAI,CAAC,EAE3B,KAAM,CAAE,OAAQE,CAAgB,KAAI,MAAoB5jB,EAAS,CAC/D,QAAS,KAAO,CACd,QAAS,CACX,GACA,SAAU7U,EAAM,YAAY,SAAS,cACvC,CAAC,EAED,OAAO2d,KACL,OAAC,KAAM,CACL,mBAAC,OACC,IAAK4a,EAAK,YACV,MAAO,CACL,GAAGC,EACH,GAAGC,EACH,GAAGN,CACL,EACA,UAAWJ,EACV,GAAGrxB,EAEJ,oBAAC,OAAI,UAAArE,EACF,UAAA41B,MAAe,OAAC,KAAa,CAAC,KAAMj4B,EAAM,OAAO,OAAO,KAAM,IAAKo4B,EAAU,QAAAvjB,CAAA,CAAkB,EAC/F,OAAOjO,GAAY,UAAYA,EAC/B,iBAAqBA,CAAO,GAAK,eAAmBA,CAAO,EAC3D,OAAOA,GAAY,YAAcA,EAAQ,CAAE,WAAAsxB,CAAW,CAAC,GAC1D,EACF,EACF,EACE,MACN,C,0ECjFO,MAAMQ,EAAmB,CAAC,CAAE,UAAAC,EAAW,MAAAr5B,EAAQ,eAAgB,IAA6B,CACjG,MAAMs5B,KAAmB,KAAoB,EAEvCC,KAAkB,eAAY,IAAM,CACxCD,EAAiBt5B,CAAK,CACxB,EAAG,CAACs5B,EAAkBt5B,CAAK,CAAC,EAE5B,SAAO,gBAAaq5B,EAAW,CAAE,QAASE,CAAgB,CAAC,CAC7D,C,kFCbO,SAASC,EACdvS,EAEAwS,EACAC,EAEAC,EACqB,CACrB,MAAMvpB,EAAQ6W,EAAW,QAAU,UAAYwS,EAEzC,CAEJ,OAAAG,EACA,KAAAxhC,EACA,UAAAyhC,EACA,KAAAlrB,EACA,QAAAmrB,EACA,OAAAC,EACA,SAAAC,EACA,WAAA1S,EACA,OAAA2S,EACA,aAAAC,EACA,KAAA7hC,EACA,UAAA+d,EAGA,GAAG+jB,CACL,EAAIlT,EAEEmT,EAA8B,CAClC,KAAM,kBACN,KAAM,CACJ,QAAS,EAAQnT,EAAW,QAC5B,KAAMA,EAAW,KACjB,OAAQ,EAAQ0S,GAAU,QAAW,EAAQ1S,EAAW,OACxD,KAAM,EAAQ0S,GAAU,MAAS,EAAQ1S,EAAW,KACpD,UAAWA,EAAW,UAEtB,MAAO,CACL,KAAM,YACN,WAAS,MAAqB,EAAE,QAChC,MAAA7W,EACA,KAAM6pB,GAAU,CAAC,CACnB,CACF,CACF,EAGA,OAAIhT,EAAW,YACbmT,EAAO,KAAK,UAAYnT,EAAW,WAGjCyS,IACFU,EAAO,KAAK,MAAM,WAAa,CAC7B,KAAMV,CACR,GAIE,OAAO,KAAKS,CAAa,EAAE,OAAS,IACtCC,EAAO,KAAK,cAAgBD,GAG1BlT,EAAW,QAAQ,KAAK,SAC1BmT,EAAO,KAAK,OAASnT,EAAW,QAK3BmT,CACT,CAEO,SAASC,EAA+BpT,EAAkD,CAC/F,GAAI,CAAE,MAAOqT,EAAW,GAAGC,CAAgB,EAAItT,EAAW,KAGtDuT,EAAiC,CACnC,OAAQvT,EAAW,KAAK,OACxB,KAAMA,EAAW,KAAK,KACtB,UAAWA,EAAW,KAAK,UAC3B,KAAMA,EAAW,KAAK,IAExB,EAGIA,EAAW,KAAK,YAClBuT,EAAc,UAAYvT,EAAW,KAAK,WAGxC,OAAO,KAAKqT,EAAU,IAAI,EAAE,OAAS,IAEvCE,EAAc,OAAS,CACrB,GAAGF,GAAW,IAChB,GAGErT,EAAW,KAAK,UAClBuT,EAAc,KAAO,YACrBA,EAAc,QAAU,GAGtBvT,EAAW,KAAK,SAClBuT,EAAc,OAASvT,EAAW,KAAK,QAKrCsT,EAAgB,gBAClBC,EAAgB,CACd,GAAGA,EACH,GAAGD,EAAgB,aACrB,GAIF,MAAMjT,KAAa,MAA0BgT,CAAS,EAEtD,OAAAE,EAAc,WAAalT,EAEpBkT,CACT,C,sGCzHO,MAAMC,EAAgB,CAC3B,KAAM,OAAO,IAAO,wBAAwB,GAC5C,GAAI,KACN,EAEaC,EAAW,OAAM,KAAO,EAAE,MAAM,EAAG,EAAE,EAErCC,EAAsB,CACjC,GAAID,EAAS,EACb,SAAU,GACZ,EAEaE,EAAuB,CAClC,iBAAkB,IAClB,oBAAqB,IACrB,aAAc,IACd,WAAY,IACZ,KAAM,CAACD,CAAmB,EAC1B,YAAa,GACb,iBAAkB,EACpB,C,8KClBYE,GAAAA,IACVA,EAAAA,EAAA,KAAO,CAAC,EAAR,OACAA,EAAAA,EAAA,KAAO,CAAC,EAAR,OAFUA,IAAAA,GAAA,IAeAC,GAAAA,IACVA,EAAA,WAAa,aACbA,EAAA,SAAW,WACXA,EAAA,aAAe,eAHLA,IAAAA,GAAA,IAMAC,GAAAA,IACVA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,UAAY,YAHFA,IAAAA,GAAA,IAsCL,MAAMC,EAAoD,CAC/D,KAAM,CAAE,UAAW,GAAI,QAAS,EAAG,EACnC,UAAW,CAAC,EACZ,OAAQ,EACR,OAAQ,CAAC,EACT,MAAO,KAAa,UACtB,EAEMC,KAAuB,MAAY,CACvC,KAAM,mBACN,aAAcD,EACd,SAAU,CACR,iBAAkB,CAAChgB,EAAoCkN,IAA+B,CACpFlN,EAAM,UAAY,CAChB,GAAGkN,EAAO,QAAQ,KAClB,GAAI,IACN,EACAlN,EAAM,KAAO,CAAE,UAAWkN,EAAO,QAAQ,UAAW,QAASA,EAAO,QAAQ,OAAQ,EACpFlN,EAAM,OAAS,EACfA,EAAM,MAAQ,KAAa,IAC7B,EACA,iBAAkB,CAACA,EAAoCkN,IAA+B,CACpFlN,EAAM,UAAY,CAChB,GAAGkN,EAAO,QACV,GAAI,IACN,EACAlN,EAAM,KAAOggB,EAA4B,KACzChgB,EAAM,OAAS,EACfA,EAAM,MAAQ,KAAa,IAC7B,EACA,eAAiBA,GAAuC,CACtDA,EAAM,UAAY,CAAC,EACnBA,EAAM,MAAQ,KAAa,UAC7B,EACA,UAAW,CAACA,EAAoCkN,IAAiC,CAC/ElN,EAAM,OAAS,CACb,YAAakN,EAAO,QAAQ,OAAQgT,GAAMA,EAAE,OAAS,YAAoB,EACzE,UAAWhT,EAAO,QAAQ,OAAQgT,GAAMA,EAAE,OAAS,UAAkB,EACrE,cAAelgB,EAAM,OAAO,eAAiB,CAAC,CAChD,CACF,EACA,sBAAuB,CAACA,EAAoCkN,IAA+C,CACzGlN,EAAM,OAAO,cAAgBkN,EAAO,OACtC,EACA,YAAclN,GAAuC,CACnDA,EAAM,UAAY,CAAC,EACnBA,EAAM,MAAQ,KAAa,KAC7B,EACA,eAAiBA,GAAuC,CACtDA,EAAM,MAAQ,KAAa,OAC7B,CACF,CACF,CAAC,EAEY,CACX,eAAAmgB,EACA,UAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,sBAAAC,EACA,YAAAC,EACA,eAAAC,CACF,EAAIR,EAAqB,QAIzB,EAAe,CACb,gBAHoCA,EAAqB,OAI3D,C,kHCtGA,SAASS,EAAkBnjC,EAAkE,CAC3F,GAAIA,EAAM,YACR,OAAOA,EAAM,YAGf,GAAIA,EAAM,YAAc,OACtB,MAAO,EAAQA,EAAM,UAGvB,GAAIA,EAAM,WAAa,OACrB,OAAO,OAAO,SAAS,OAAOA,EAAM,QAAQ,EAAG,EAAE,EAGnD,GAAIA,EAAM,YACR,OAAO,OAAO,WAAW,OAAOA,EAAM,WAAW,CAAC,EAGpD,GAAIA,EAAM,WAAY,CACpB,MAAMojC,EAAa,CAAC,EACpB,UAAWC,KAAWrjC,EAAM,WAAW,OACrCojC,EAAW,KAAKD,EAAkBE,CAAO,CAAC,EAE5C,OAAOD,CACT,CAEA,MAAO,EACT,CAEA,SAASE,EAAkBhH,EAA8E,CACvG,MAAMiH,EAAmC,CAAC,EAC1C,IAAIC,EAAc,4BAClB,GAAI,CAAClH,EACH,MAAO,CAAE,YAAAkH,EAAa,YAAAD,CAAY,EAGpC,UAAWE,KAAanH,EAAS,WAC3BmH,EAAU,MAAQ,2BAA2B,eAC/CD,EAAcC,EAAU,MAAM,aAAeD,GAE/CD,EAAY,KAAK,CAAE,IAAKE,EAAU,IAAK,MAAON,EAAkBM,EAAU,KAAK,CAAE,CAAC,EAGpF,MAAO,CAAE,YAAAD,EAAa,YAAAD,CAAY,CACpC,CAEA,SAASG,EAAYC,EAA4E,CAC/F,MAAMC,EAAgC,CAAC,EAEvC,GAAID,EAAK,WACP,UAAWF,KAAaE,EAAK,WAC3BC,EAAS,KAAK,CAAE,IAAKH,EAAU,IAAK,MAAON,EAAkBM,EAAU,KAAK,CAAE,CAAC,EAInF,OAAOG,CACT,CAEA,SAASC,EAAYF,EAAuD,CAC1E,IAAIG,EACJ,GAAIH,EAAK,KAAM,CACb,MAAMI,EAAQJ,EAAK,KAAK,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,EAC1DG,EAAOC,EAAM,OAASA,EAAMA,EAAM,OAAS,CAAC,EAAIJ,EAAK,KAAK,SAAS,CACrE,CACA,OAAOG,CACT,CAEA,SAASE,EAAcL,EAAuD,CAC5E,MAAMM,EAAmC,CAAC,EAC1C,GAAIN,EAAK,MACP,UAAWxgC,KAAQwgC,EAAK,MAAO,CAC7B,KAAM,CAAE,QAAAO,EAAS,OAAAC,CAAO,EAAIhhC,EACtBihC,EAA4B,CAAC,EACnC,GAAIjhC,EAAK,WACP,UAAWsgC,KAAatgC,EAAK,WAC3BihC,EAAK,KAAK,CAAE,IAAKX,EAAU,IAAK,MAAON,EAAkBM,EAAU,KAAK,CAAE,CAAC,EAG/EQ,EAAW,KAAK,CAAE,QAASC,EAAS,OAAQC,EAAQ,KAAAC,CAAK,CAAC,CAC5D,CAGF,OAAOH,CACT,CAEA,SAASI,EAAQV,EAAuD,CACtE,MAAMW,EAAmB,CAAC,EAC1B,GAAIX,EAAK,OACP,UAAW72B,KAAS62B,EAAK,OAAQ,CAC/B,MAAMrtB,EAA8B,CAAC,EACrC,GAAIxJ,EAAM,WACR,UAAW22B,KAAa32B,EAAM,WAC5BwJ,EAAO,KAAK,CAAE,IAAKmtB,EAAU,IAAK,MAAON,EAAkBM,EAAU,KAAK,CAAE,CAAC,EAGjFa,EAAK,KAAK,CAAE,OAAAhuB,EAAQ,UAAWxJ,EAAM,aAAe,IAAS,KAAMA,EAAM,IAAK,CAAC,CACjF,CAGF,OAAOw3B,CACT,CAEO,SAASC,EACdC,EACAC,EAAY,GACO,CACnB,MAAMlgC,EAAQ,IAAI,iBAAiB,CACjC,OAAQ,CACN,CAAE,KAAM,UAAW,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACtD,CAAE,KAAM,SAAU,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACrD,CAAE,KAAM,eAAgB,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC3D,CAAE,KAAM,gBAAiB,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC5D,CAAE,KAAM,cAAe,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC1D,CAAE,KAAM,OAAQ,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACnD,CAAE,KAAM,aAAc,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACzD,CAAE,KAAM,gBAAiB,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC5D,CAAE,KAAM,6BAA8B,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACzE,CAAE,KAAM,gCAAiC,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC5E,CAAE,KAAM,aAAc,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACzD,CAAE,KAAM,cAAe,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,EACzD,CAAE,KAAM,YAAa,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACxD,CAAE,KAAM,WAAY,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACvD,CAAE,KAAM,OAAQ,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,EAClD,CAAE,KAAM,aAAc,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,EACxD,CAAE,KAAM,OAAQ,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,CACpD,EACA,KAAM,CACJ,2BAA4B,QAC5B,OAAQ,CACN,YAAa,MACf,CACF,CACF,CAAC,EACD,GAAI,CACF,UAAWJ,KAAQqgC,EAAW,CAC5B,KAAM,CAAE,YAAAhB,EAAa,YAAAD,CAAY,EAAID,EAAkBn/B,EAAK,QAAQ,EACpE,UAAWugC,KAAevgC,EAAK,4BAC7B,UAAWw/B,KAAQe,EAAY,MAC7BngC,EAAM,IAAI,CACR,QAASo/B,EAAK,QACd,OAAQA,EAAK,OACb,aAAcA,EAAK,cAAgB,GACnC,cAAeA,EAAK,MAAQ,GAC5B,YAAAH,EACA,KAAMK,EAAYF,CAAI,EACtB,WAAYA,EAAK,QAAQ,KACzB,cAAeA,EAAK,QAAQ,QAC5B,2BAA4Be,EAAY,wBAAwB,KAChE,8BAA+BA,EAAY,wBAAwB,QACnE,WAAYf,EAAK,WACjB,YAAAJ,EACA,UAAWI,EAAK,kBAAqB,IACrC,UAAWA,EAAK,gBAAmBA,EAAK,mBAAsB,IAC9D,KAAMD,EAAYC,CAAI,EACtB,KAAMU,EAAQV,CAAI,EAClB,WAAYK,EAAcL,CAAI,CAChC,CAAC,CAGP,CACF,OAASjzB,EAAO,CACd,eAAQ,MAAMA,CAAK,EACZ,CAAE,MAAO,CAAE,QAAS,2CAA6CA,CAAM,EAAG,KAAM,CAAC,CAAE,CAC5F,CAEA,IAAIvM,EAAO,CAACI,CAAK,EACjB,OAAIkgC,GACFtgC,EAAK,KAAK,GAAI,sBAAsBI,CAAK,CAAwB,EAG5D,CAAE,KAAAJ,CAAK,CAChB,CAKO,SAASwgC,EAAgBxgC,EAE9B,CACA,IAAI09B,EAAkF,CACpF,QAAS,CAAC,CACZ,EAGI+C,EAAsC,CAAC,EAE3C,QAAS99B,EAAI,EAAGA,EAAI3C,EAAK,OAAQ2C,IAAK,CACpC,MAAM68B,EAAOx/B,EAAK,IAAI2C,CAAC,EAGlB89B,EAASjB,EAAK,WAAW,IAC5BiB,EAASjB,EAAK,WAAW,EAAI9B,EAAO,QAAQ,OAC5CA,EAAO,QAAQ,KAAK,CAClB,SAAU,CACR,WAAY,CAAC,EACb,uBAAwB,CAC1B,EACA,4BAA6B,CAC3B,CACE,MAAO,CAAC,CACV,CACF,CACF,CAAC,GAGH,IAAIgD,EAAaD,EAASjB,EAAK,WAAW,EAGtC9B,EAAO,QAAQgD,CAAU,EAAE,SAAU,WAAW,SAAW,IAC7DhD,EAAO,QAAQgD,CAAU,EAAE,SAAU,WAAaC,EAAiBnB,EAAK,WAAW,GAIhF9B,EAAO,QAAQgD,CAAU,EAAE,4BAA4B,CAAC,EAAE,wBACzDlB,EAAK,6BACP9B,EAAO,QAAQgD,CAAU,EAAE,4BAA4B,CAAC,EAAE,uBAAyB,CACjF,KAAMlB,EAAK,2BACX,QAASA,EAAK,8BAAgCA,EAAK,8BAAgC,EACrF,GAIJ9B,EAAO,QAAQgD,CAAU,EAAE,4BAA4B,CAAC,EAAE,MAAM,KAAK,CACnE,QAASlB,EAAK,QAAQ,SAAS,GAAI,GAAG,EACtC,OAAQA,EAAK,OACb,aAAcA,EAAK,cAAgB,GACnC,WAAYA,EAAK,YAAc,GAC/B,KAAMA,EAAK,cACX,KAAMoB,EAAgBpB,EAAK,IAAI,EAC/B,kBAAmBA,EAAK,UAAY,IACpC,iBAAkBA,EAAK,UAAYA,EAAK,UAAY,IACpD,WAAYA,EAAK,KAAOmB,EAAiBnB,EAAK,IAAI,EAAI,CAAC,EACvD,uBAAwB,EACxB,mBAAoB,EACpB,kBAAmB,EACnB,OAAQqB,EAAcrB,CAAI,EAC1B,OAAQsB,EAActB,EAAK,IAAI,EAC/B,MAAOuB,EAAkBvB,EAAK,UAAU,CAC1C,CAAC,CACH,CAEA,OAAO9B,CACT,CAEA,SAASkD,EAAgBjB,EAAkC,CACzD,IAAIqB,EACJ,GAAIrB,EACF,OAAQA,EAAM,CACZ,IAAK,SACHqB,EAAW,mBACX,MACF,IAAK,SACHA,EAAW,mBACX,MACF,IAAK,WACHA,EAAW,qBACX,MACF,IAAK,WACHA,EAAW,qBACX,MACF,IAAK,WACHA,EAAW,qBACX,KACJ,CAEF,OAAOA,CACT,CAKA,SAASL,EAAiBV,EAAmF,CAC3G,OAAOA,EAAK,OACV,CAACgB,EAAYC,IAAQ,CAAC,GAAGD,EAAY,CAAE,IAAKC,EAAI,IAAK,MAAOC,EAAiBD,CAAG,CAAE,CAAC,EACnF,CAAC,CACH,CACF,CAKA,SAASC,EAAiBD,EAA8E,CACtG,GAAI,OAAOA,EAAI,OAAU,SACvB,MAAO,CAAE,YAAaA,EAAI,KAAM,EAC3B,GAAI,OAAOA,EAAI,OAAU,UAC9B,MAAO,CAAE,UAAWA,EAAI,KAAM,EACzB,GAAI,OAAOA,EAAI,OAAU,SAC9B,OAAIA,EAAI,MAAQ,IAAM,EACb,CAAE,SAAUA,EAAI,KAAM,EAEtB,CAAE,YAAaA,EAAI,KAAM,EAE7B,GAAI,OAAOA,EAAI,OAAU,UAC1B,MAAM,QAAQA,EAAI,KAAK,EAAG,CAC5B,MAAMh/B,EAAiE,CAAC,EACxE,UAAWk/B,KAAOF,EAAI,MACpBh/B,EAAO,KAAKi/B,EAAiBC,CAAG,CAAC,EAGnC,MAAO,CAAE,WAAY,CAAE,OAAAl/B,CAAO,CAAE,CAClC,CAEF,MAAO,CAAE,YAAag/B,EAAI,KAAM,CAClC,CAEA,SAASL,EAAcrB,EAA4C,CACjE,IAAI6B,EACJ,OAAI7B,EAAK,aAAe,SACtB6B,EAAS,CACP,KAAM7B,EAAK,WACX,QAASA,EAAK,cAAgBA,EAAK,cAAgB,EACrD,GAEK6B,CACT,CAEA,SAASP,EAAcX,EAAuF,CAC5G,GAAI,CAACA,GAAQ,CAACA,EAAK,OACjB,OAGF,IAAImB,EAAkE,CAAC,EACvE,UAAWC,KAAOpB,EAAM,CACtB,IAAIx3B,EAA+D,CACjE,aAAc44B,EAAI,UAAY,IAC9B,WAAY,CAAC,EACb,uBAAwB,EACxB,KAAMA,EAAI,MAAQ,EACpB,EACA,UAAW7iC,KAAS6iC,EAAI,OACtB54B,EAAM,WAAY,KAAK,CACrB,IAAKjK,EAAM,IACX,MAAOyiC,EAAiBziC,CAAK,CAC/B,CAAC,EAEH4iC,EAAO,KAAK34B,CAAK,CACnB,CACA,OAAO24B,CACT,CAEA,SAASP,EACPjB,EACoE,CACpE,GAAI,CAACA,GAAc,CAACA,EAAW,OAC7B,OAGF,IAAIxhC,EAAgE,CAAC,EACrE,UAAWb,KAAOqiC,EAAY,CAC5B,IAAI9gC,EAA6D,CAC/D,QAASvB,EAAI,QACb,OAAQA,EAAI,OACZ,WAAY,CAAC,EACb,uBAAwB,CAC1B,EACA,GAAIA,EAAI,MAAM,OACZ,UAAWyjC,KAAOzjC,EAAI,KACpBuB,EAAK,YAAY,KAAK,CACpB,IAAKkiC,EAAI,IACT,MAAOC,EAAiBD,CAAG,CAC7B,CAAC,EAGL5iC,EAAM,KAAKU,CAAI,CACjB,CACA,OAAOV,CACT,CAEO,MAAMkjC,EAAuB,mBAE7B,SAASC,EACdC,EACAC,EACArB,EAAY,GACO,CACnB,MAAMlgC,EAAQshC,EAAS,KAAK,CAAC,EAE7B,GAAI,CAACthC,EACH,OAAOwhC,EAKT,MAAMC,EADuDF,GAAkB,UAC3B,iBACpD,IAAIG,EAKJ,GAJID,GAAwB,gBAC1BC,EAA6B,iBAAiB,EAAE,oBAAoBD,EAAuB,aAAa,GAGtGA,GAA0BC,EAA4B,CACxD,MAAMC,EAAcF,EAAuB,YAAcA,EAAuB,MAAQ,OAClFG,GAAqB,CACzB,MAAOR,EACP,IAAK,GACL,SAAU,CACR,cAAeM,EAA2B,IAC1C,eAAgBA,EAA2B,KAC3C,MAAO,CACL,cAAeC,GAA4B,cAC3C,QAAS,CAAC,EACV,cAAeF,EAAuB,eAAiB,GACvD,UAAW,UACX,aAAc,CAAC,wCAAwC,EACvD,MAAO,SACT,CACF,EACA,OAAQ,qBAAqB,UAC/B,EAEAzhC,EAAM,OAAO,QAAS1B,GAAiB,CACjCA,EAAM,OAAS,SACjBA,EAAM,OAAO,MAAQ,CAACsjC,EAAQ,EAElC,CAAC,CACH,CAEA,IAAIhiC,EAAO,CAAC,GAAG0hC,EAAS,IAAI,EAC5B,OAAIpB,GACFtgC,EAAK,KAAK,GAAG,sBAAsB,YAAYI,CAAK,CAAC,CAAC,EAGjD,CACL,GAAGshC,EACH,KAAA1hC,CACF,CACF,CAEA,SAASiiC,EAAqBjiC,EAA2B,CACvD,MAAO,CACL,QAASA,EAAK,QACd,UAAW,SAASA,EAAK,kBAAoB,EAAE,EAAI,IACnD,cAAeA,EAAK,WACpB,aAAcA,EAAK,iBAAmB,GACtC,UAAWA,EAAK,eAAiB,EACnC,CACF,CAEO,SAASkiC,EACdliC,EACA2hC,EACmB,CACnB,OAAA3hC,EAAK,MACD,OAAQ2c,GAAMA,EAAE,OAAS,YAAcA,EAAE,MAAM,YAAc,aAAa,EAC3E,IAAKvc,GAAU,CACd,MAAM+hC,EAAe/hC,EAAM,OAAO,KAAM1B,GAAiBA,EAAM,OAAS,SAAS,EACjF,GAAIyjC,EAAc,CAChB,MAAM7jC,EAAQ8jC,EAAaT,CAAgB,EACrCU,EAAgBF,EAAa,OAAO,OAAS,CAAC,EAG9CG,EAAWhkC,EAAM,OACpBU,GACC,CAACqjC,EAAc,KACZE,GACCA,EAAS,QAAUvjC,EAAK,OACxBujC,EAAS,UAAU,gBAAkBvjC,EAAK,UAAU,eACpD,QAAQujC,EAAS,UAAU,MAAOvjC,EAAK,UAAU,KAAK,CAC1D,CACJ,EAEAmjC,EAAa,OAAO,MAAQE,EAAc,OAAS,CAAC,GAAGA,EAAe,GAAGC,CAAQ,EAAIA,CACvF,CACA,OAAOliC,CACT,CAAC,EACIJ,CACT,CAEA,SAASoiC,EAAaT,EAA0D,CAC9E,MAAMa,EAAwB,CAAC,EAE/B,OAAIb,EAAiB,KACnBa,EAAU,KAAK,CACb,MAAO,aACP,IAAK,GACL,SAAU,CACR,MAAO,CAAE,MAAO,iBAAkB,UAAW,SAAU,EACvD,cAAeb,EAAiB,IAChC,eAAgBA,GAAkB,MAAQ,uBAC5C,CACF,CAAC,EAEIa,CACT,CAEO,SAASC,EACdziC,EACA2hC,EACAe,EACA,CACA,OAAQA,EAAW,CACjB,KAAK,gBAAgB,MACnB,OAAOC,EAAwC3iC,EAAM2hC,CAAgB,EACvE,KAAK,gBAAgB,IACnB,OAAOiB,EAAgC5iC,CAAI,EAC7C,QACE,OAAO6iC,EAAiC7iC,EAAM2hC,CAAgB,CAClE,CACF,CAEA,SAASiB,EAAgC5iC,EAA6B,CACpE,MAAO,CACL,gBAAgB,CACd,KAAM,eACN,MAAO,MACP,OAAQ,CAAC,CAAE,KAAM,WAAY,KAAM,UAAU,OAAQ,OAAQ,CAAC,KAAK,UAAUA,EAAM,KAAM,CAAC,CAAC,CAAE,CAAC,CAChG,CAAC,CACH,CACF,CAOO,SAAS6iC,EACd7iC,EACA2hC,EACa,CACb,MAAMvhC,EAAQ,gBAAgB,CAC5B,KAAM,SACN,MAAO,SACP,OAAQ,CACN,CACE,KAAM,UACN,KAAM,UAAU,OAChB,OAAQ,CACN,KAAM,SACN,kBAAmB,WACnB,OAAQ,CACN,MAAO,GACT,EACA,MAAO,CACL,CACE,MAAO,wBACP,IAAK,GACL,SAAU,CACR,cAAeuhC,EAAiB,IAChC,eAAgBA,EAAiB,KACjC,MAAO,CACL,MAAO,iBACP,UAAW,SACb,CACF,CACF,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,KAAM,UAAU,KAChB,OAAQ,CACN,kBAAmB,aACnB,OAAQ,CACN,MAAO,GACT,CACF,CACF,EACA,CAAE,KAAM,eAAgB,KAAM,UAAU,OAAQ,OAAQ,CAAE,kBAAmB,SAAU,CAAE,EACzF,CAAE,KAAM,YAAa,KAAM,UAAU,OAAQ,OAAQ,CAAE,kBAAmB,MAAO,CAAE,EACnF,CACE,KAAM,gBACN,KAAM,UAAU,OAChB,OAAQ,CACN,kBAAmB,WACnB,KAAM,KACN,OAAQ,CACN,MAAO,GACT,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,UAAU,YAClB,CACF,EACA,KAAM,CACJ,2BAA4B,QAC5B,kBAAmB,CAAC,CAAC,CACvB,CACF,CAAC,EAED,OAAK3hC,GAAM,QAGXI,EAAM,OAASJ,EAAK,OAEpBA,EAEG,KAAK,CAAC6gB,EAAG9e,IAAM,SAASA,GAAG,kBAAoB,EAAE,EAAI,IAAU,SAAS8e,GAAG,kBAAoB,EAAE,EAAI,GAAO,EAC5G,QAASiiB,GAAU,CAClB,MAAMzC,EAA4B4B,EAAqBa,CAAK,EAC5D1iC,EAAM,OAAO,CAAC,EAAE,OAAO,KAAKigC,EAAU,OAAO,EAC7CjgC,EAAM,OAAO,CAAC,EAAE,OAAO,KAAKigC,EAAU,SAAS,EAC/CjgC,EAAM,OAAO,CAAC,EAAE,OAAO,KAAKigC,EAAU,YAAY,EAClDjgC,EAAM,OAAO,CAAC,EAAE,OAAO,KAAKigC,EAAU,SAAS,EAI/CjgC,EAAM,OAAO,CAAC,EAAE,OAAO,KAAKigC,EAAU,cAAgBA,EAAU,cAAgB,MAAM,EAElFyC,EAAM,SACR1iC,EAAM,OAAO,CAAC,EAAE,OAAO,KACrB0iC,EAAM,SAAS,IAAKC,GACXC,EAAcF,EAAOC,EAASpB,CAAgB,CACtD,CACH,EACSmB,EAAM,SACf1iC,EAAM,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC4iC,EAAcF,EAAOA,EAAM,QAASnB,CAAgB,CAAC,CAAC,CAEvF,CAAC,EAEI,CAACvhC,CAAK,GA7BJ,CAACA,CAAK,CA8BjB,CAEO,SAASuiC,EACd3iC,EACA2hC,EACa,CACb,MAAMsB,EAA6C,CAAC,EACpD,IAAIC,EAAmB,GAEvBljC,GAAM,QAAS8iC,GACbK,EAAYL,CAAK,EAAE,QAASM,GAAO,CACjCA,EAAG,YAAY,QAASC,GAAS,CAC/BJ,EAAiBI,EAAK,GAAG,EAAI,CAC3B,KAAMA,EAAK,IACX,KAAM,UAAU,OAChB,OAAQ,CAAE,kBAAmBA,EAAK,GAAI,CACxC,CACF,CAAC,EACDD,EAAG,MAAM,QAAS5D,GAAS,CACrBA,EAAK,OACP0D,EAAmB,IAErB1D,EAAK,YAAY,QAAS6D,GAAS,CACjCJ,EAAiBI,EAAK,GAAG,EAAI,CAC3B,KAAMA,EAAK,IACX,KAAM,UAAU,OAChB,OAAQ,CAAE,kBAAmBA,EAAK,GAAI,CACxC,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,EAEA,MAAMjjC,EAAQ,IAAI,iBAAiB,CACjC,KAAM,QACN,MAAO,SACP,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UAAU,OAChB,OAAQ,CACN,OAAQ,CAAE,OAAQ,EAAK,CACzB,CACF,EACA,CACE,KAAM,eACN,KAAM,UAAU,OAChB,OAAQ,CACN,kBAAmB,gBACnB,OAAQ,CACN,MAAO,GACT,CACF,CACF,EACA,CACE,KAAM,YACN,KAAM,UAAU,OAChB,OAAQ,CACN,kBAAmB,aACnB,OAAQ,CACN,MAAO,GACT,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,UAAU,OAChB,OAAQ,CACN,KAAM,SACN,kBAAmB,UACnB,OAAQ,CACN,MAAO,GACT,EACA,MAAO,CACL,CACE,MAAO,uBACP,IAAK,GACL,SAAU,CACR,cAAeuhC,EAAiB,IAChC,eAAgBA,EAAiB,KACjC,MAAO,CACL,MAAO,iCACP,UAAW,SACb,EACA,YAAa,CACX,MAAO,CACL,OAAQ,gBACV,CACF,CACF,CACF,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,UAAU,KAChB,OAAQ,CACN,kBAAmB,YACrB,CACF,EACA,CACE,KAAM,OACN,KAAM,UAAU,OAChB,OAAQ,CAAE,kBAAmB,OAAQ,OAAQ,CAAE,OAAQ,CAACuB,CAAiB,CAAE,CAC7E,EACA,GAAG,OAAO,OAAOD,CAAgB,EAAE,KAAK,CAACpiB,EAAG9e,IAAM8e,EAAE,KAAK,cAAc9e,EAAE,IAAI,CAAC,EAC9E,CACE,KAAM,WACN,KAAM,UAAU,OAChB,OAAQ,CACN,kBAAmB,WACnB,KAAM,KACN,OAAQ,CACN,MAAO,GACT,CACF,CACF,CACF,EACA,KAAM,CACJ,2BAA4B,OAC9B,CACF,CAAC,EAED,MAAI,CAAC/B,GAAQ,CAACA,EAAK,OACV,CAACI,CAAK,GAGfJ,EAEG,KAAK,CAAC6gB,EAAG9e,IAAM,SAASA,GAAG,kBAAoB,EAAE,EAAI,IAAU,SAAS8e,GAAG,kBAAoB,EAAE,EAAI,GAAO,EAC5G,QAASiiB,GAAU,CAClBK,EAAYL,CAAK,EAAE,QAASC,GAAY,CACtCA,EAAQ,MAAM,QAASvD,GAAS,CAC9Bp/B,EAAM,IAAIkjC,EAAyB9D,EAAMuD,EAASD,CAAK,CAAC,CAC1D,CAAC,CACH,CAAC,CACH,CAAC,EAEI,CAAC1iC,CAAK,EACf,CAWA,MAAM+iC,EAAeL,GACZA,EAAM,WAAaA,EAAM,QAAU,CAACA,EAAM,OAAO,EAAI,CAAC,GAGzDE,EAAgB,CACpBF,EACAC,EACApB,IACc,CACd,MAAMsB,EAA6C,CAAC,EACpD,IAAIC,EAAmB,GAEvBH,EAAQ,YAAY,IAAKM,GAAS,CAChCJ,EAAiBI,EAAK,GAAG,EAAI,CAC3B,KAAMA,EAAK,IACX,KAAM,UAAU,OAChB,OAAQ,CAAE,kBAAmBA,EAAK,GAAI,EACtC,OAAQ,CAAC,CACX,CACF,CAAC,EACDN,EAAQ,MAAM,QAASvD,GAAS,CAC1BA,EAAK,OACP0D,EAAmB,IAErB1D,EAAK,YAAY,QAAS6D,GAAS,CACjCJ,EAAiBI,EAAK,GAAG,EAAI,CAC3B,KAAMA,EAAK,IACX,KAAM,UAAU,OAChB,OAAQ,CAAE,kBAAmBA,EAAK,GAAI,EACtC,OAAQ,CAAC,CACX,CACF,CAAC,CACH,CAAC,EAED,MAAME,EAAW,IAAI,iBAAiB,CACpC,OAAQ,CACN,CACE,KAAM,gBACN,KAAM,UAAU,OAChB,OAAQ,CACN,OAAQ,CAAE,OAAQ,EAAK,CACzB,EACA,OAAQ,CAAC,CACX,EACA,CACE,KAAM,SACN,KAAM,UAAU,OAChB,OAAQ,CAAC,EACT,OAAQ,CACN,KAAM,SACN,kBAAmB,UACnB,OAAQ,CACN,MAAO,GACT,EACA,MAAO,CACL,CACE,MAAO,uBACP,IAAK,GACL,SAAU,CACR,cAAe5B,EAAiB,IAChC,eAAgBA,EAAiB,KACjC,MAAO,CACL,MAAO,iCACP,UAAW,SACb,EACA,YAAa,CACX,MAAO,CACL,OAAQ,gBACV,CACF,CACF,CACF,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,UAAU,KAChB,OAAQ,CACN,kBAAmB,aACnB,OAAQ,CACN,MAAO,GACT,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,UAAU,OAChB,OAAQ,CAAC,EACT,OAAQ,CAAE,kBAAmB,OAAQ,OAAQ,CAAE,OAAQ,CAACuB,CAAiB,CAAE,CAC7E,EACA,GAAG,OAAO,OAAOD,CAAgB,EAAE,KAAK,CAACpiB,EAAG9e,IAAM8e,EAAE,KAAK,cAAc9e,EAAE,IAAI,CAAC,EAC9E,CACE,KAAM,WACN,KAAM,UAAU,OAChB,OAAQ,CAAC,EACT,OAAQ,CACN,kBAAmB,WACnB,KAAM,KACN,OAAQ,CACN,MAAO,GACT,CACF,CACF,CACF,EACA,KAAM,CACJ,2BAA4B,OAC9B,CACF,CAAC,EAGKiC,EAAQ,YAAY,EAC1B,UAAWtF,KAAS6kC,EAAS,OAC3B7kC,EAAM,QAAU,oBAAoB,CAAE,MAAAA,EAAO,MAAAsF,CAAM,CAAC,EAGtD,OAAA++B,EAAQ,MAAM,QAASvD,GAAS,CAC9B+D,EAAS,IAAID,EAAyB9D,EAAMuD,EAASD,CAAK,CAAC,CAC7D,CAAC,EAEMS,CACT,EAWA,SAASD,EAAyB9D,EAAYuD,EAAkBD,EAA4C,CAC1G,MAAMU,EAAsB,SAAShE,EAAK,kBAAmB,EAAE,EAAI,IAE7Dx/B,EAAuB,CAC3B,cAAe8iC,EAAM,QACrB,aAAcA,EAAM,iBAAmB,GACvC,UAAWA,EAAM,eAAiB,GAClC,OAAQtD,EAAK,OACb,KAAMgE,EACN,SAAU,SAAShE,EAAK,cAAe,EAAE,EACzC,KAAMA,EAAK,IACb,EAEA,IAAIiE,EAA0B,CAAC,EAC/B,OAAIV,EAAQ,aACVU,EAAQA,EAAM,OAAOV,EAAQ,UAAU,GAErCvD,EAAK,aACPiE,EAAQA,EAAM,OAAOjE,EAAK,UAAU,GAGtCiE,EAAM,QAASJ,GAAS,EAClBA,EAAK,MAAM,WAAaA,EAAK,MAAM,OAAO,cAC5CrjC,EAAKqjC,EAAK,GAAG,EAAIA,EAAK,MAAM,WAAaA,EAAK,MAAM,OAAO,aAEzDA,EAAK,MAAM,aAAeA,EAAK,MAAM,OAAO,gBAC9CrjC,EAAKqjC,EAAK,GAAG,EAAIA,EAAK,MAAM,aAAeA,EAAK,MAAM,OAAO,eAE3DA,EAAK,MAAM,UAAYA,EAAK,MAAM,OAAO,aAC3CrjC,EAAKqjC,EAAK,GAAG,EAAIA,EAAK,MAAM,UAAYA,EAAK,MAAM,OAAO,YAExDA,EAAK,MAAM,aAAeA,EAAK,MAAM,OAAO,gBAC9CrjC,EAAKqjC,EAAK,GAAG,EAAIA,EAAK,MAAM,aAAeA,EAAK,MAAM,OAAO,aAEjE,CAAC,EAEMrjC,CACT,CAEA,MAAM4hC,EAAyB,CAC7B,KAAM,CACJ,IAAI,IAAiB,CACnB,OAAQ,CACN,CACE,KAAM,QACN,KAAM,KAAU,MAChB,OAAQ,CAAC,CACX,CACF,EACA,KAAM,CACJ,2BAA4B,QAC5B,OAAQ,CACN,YAAa,MACf,CACF,CACF,CAAC,CACH,CACF,C,wDC15BA,IAAI8B,EAQG,MAAMC,EAAkBzY,GAA0B,CACvDwY,EAAoBxY,CACtB,EAQa0Y,EAAiB,IAAmBF,C,gDC9E1C,IAAKG,GAAAA,IACVA,EAAA,SAAW,uBACXA,EAAA,OAAS,qBACTA,EAAA,IAAM,kBACNA,EAAA,gBAAkB,iBAClBA,EAAA,OAAS,qBACTA,EAAA,IAAM,kBANIA,IAAAA,GAAA,G,wDCcZ,IAAIC,EAEG,SAASC,EAAiCC,EAAyC,CAExF,GAAIF,EACF,MAAM,IAAI,MACR,mGACF,EAGFA,EAAYE,CACd,CAEO,SAASC,EACd5kC,EACwC,CACxC,GAAI,CAACykC,EACH,MAAM,IAAI,MAAM,0FAA0F,EAG5G,OAAOA,EAAUzkC,CAAO,CAC1B,C,0IC9BO,MAAM6kC,EAAmB,KAC7B,iBAAiB,CAChB,UAAW,CACT,UAAW,CACT,aAAc,CAACxG,EAAQnxB,EAAO43B,IAASzG,EAAS,CAAC,CAAE,KAAM,SAAU,GAAIyG,EAAI,IAAK,CAAC,EAAI,CAAC,CACxF,EACA,WAAY,CACV,aAAezG,GACbA,EACI,CACE,CAAE,KAAM,SAAU,GAAI,MAAO,EAC7B,GAAGA,EAAO,MACP,IAAK0G,IAAY,CAAE,KAAM,SAAmB,GAAIA,EAAO,UAAU,IAAK,EAAE,EACxE,OAAO,OAAO,CACnB,EACA,CAAC,CAAE,KAAM,SAAU,GAAI,MAAO,CAAC,CACvC,EACA,aAAc,CAEZ,gBAAiB,CAAC1G,EAAQnxB,IAAWA,EAAQ,CAAC,EAAI,CAAC,CAAE,KAAM,SAAU,GAAI,MAAO,CAAC,CACnF,CACF,CACF,CAAC,EACA,gBAAgB,CACf,UAAY6T,IAAa,CACvB,iBAAkBA,EAAQ,MAAiF,CAGzG,kBAAmB,EACnB,QAAS,MAAO,CAAE,WAAAikB,EAAY,cAAAC,CAAc,EAAGC,IAAa,CAC1D,MAAMC,EAAiC,CACrC,QAASH,EAAW,OACpB,WAAYC,EAAc,OAC1B,iBAAkB,EAClB,WAAY,CACd,EAEMG,EAAWJ,EAAW,IAAI,MAAOK,GACrCH,EAAS,SAAS,KAAa,UAAU,gBAAgB,SAAS,CAAE,KAAMG,CAAU,CAAC,CAAC,CACxF,EACA,GAAI,CAiBF,MAAO,CAAE,MAhBO,MAAM,QAAQ,IAAID,CAAQ,GAEnB,OAAO,CAACvrB,EAAKwkB,IAAW,CAC7C,KAAM,CAAE,KAAA19B,EAAM,MAAAuM,CAAM,EAAImxB,EACxB,GAAInxB,EACF,MAAMA,EAGR,MAAMo4B,KAAS,KAAgB3kC,GAAM,QAAU,CAAC,CAAC,EACjD,OAAAkZ,EAAI,SAAWyrB,EAAO,QACtBzrB,EAAI,YAAcyrB,EAAO,WACzBzrB,EAAI,YAAcyrB,EAAO,WACzBzrB,EAAI,kBAAoByrB,EAAO,iBACxBzrB,CACT,EAAGsrB,CAAa,CAEM,CACxB,OAASj4B,EAAO,CACd,MAAO,CAAE,MAAAA,CAAM,CACjB,CACF,CACF,CAAC,CACH,EACF,CAAC,EAEU,CACX,kBAAAq4B,EACA,yBAAAC,EACA,wBAAAC,EACA,wBAAAC,EACA,wBAAAC,EACA,yBAAAC,EACA,yBAAAC,CACF,EAAIhB,C,qGCzEJ,MAAMiB,EAAgB,IAAI,KAAa,CACrC,KAAM,QACN,OAAQ,CACN,CAAE,KAAM,aAAc,KAAM,SAAU,cAAe,EAAK,EAC1D,CACE,KAAM,OACN,KAAM,SACN,QAAS,CAAC,MAAO,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,KAAM,MAAO,MAAO,KAAK,CAClF,EACA,CAAE,KAAM,KAAM,KAAM,SAAU,QAAS,CAAC,MAAO,SAAU,SAAU,UAAW,QAAQ,CAAE,CAC1F,EACA,cAAe,CAAC,KAAM,MAAO,MAAO,KAAK,CAC3C,CAAC,EAEKC,EAAiB,CAAC,CAAE,KAAM,QAAS,MAAO,OAAQ,CAAC,EAEnDC,EAAsB,CAC1B,SAAU,EACV,OAAQ,EACR,QAAS,EACT,QAAS,EACT,GAAI,EACJ,OAAQ,EACR,SAAU,CACZ,EAEO,IAAKC,GAAAA,IACVA,EAAA,QAAY,KACZA,EAAA,QAAY,KACZA,EAAA,QAAY,KACZA,EAAA,WAAe,KACfA,EAAA,mBAAuB,MACvBA,EAAA,gBAAoB,MACpBA,EAAA,eAAmB,gBACnBA,EAAA,cAAkB,eAClBA,EAAA,sBAA0B,wBAC1BA,EAAA,uBAA2B,yBAC3BA,EAAA,WAAe,WAXLA,IAAAA,GAAA,IAcZ,MAAMC,EAAgB,CACpB,CAAE,MAAO,KAAsB,KAAM,UAAW,EAChD,CAAE,MAAO,KAAsB,KAAM,UAAW,EAChD,CAAE,MAAO,KAAsB,KAAM,aAAc,EACnD,CAAE,MAAO,KAAyB,KAAM,iBAAkB,EAC1D,CAAE,MAAO,MAAiC,KAAM,sBAAuB,EACvE,CAAE,MAAO,MAA8B,KAAM,sBAAuB,EACpE,CAAE,MAAO,gBAA6B,KAAM,kBAAmB,EAC/D,CAAE,MAAO,eAA4B,KAAM,iBAAkB,EAC7D,CAAE,MAAO,yBAAqC,KAAM,2BAA4B,EAChF,CAAE,MAAO,wBAAoC,KAAM,0BAA2B,EAC9E,CAAE,MAAO,WAAyB,KAAM,cAAe,CACzD,EAEMC,EAAgB,CACpB,CAAE,KAAM,KAAM,MAAO,IAAK,EAC1B,CAAE,KAAM,MAAO,MAAO,KAAM,EAC5B,CAAE,KAAM,WAAY,MAAO,UAAW,CACxC,EAEMC,EAAe,CACnB,CAAE,KAAM,QAAS,MAAO,KAAM,EAC9B,CAAE,KAAM,QAAS,MAAO,KAAM,EAC9B,CAAE,KAAM,QAAS,MAAO,KAAM,EAC9B,CAAE,KAAM,QAAS,MAAO,KAAM,EAC9B,CAAE,KAAM,UAAW,MAAO,OAAQ,EAClC,CAAE,KAAM,SAAU,MAAO,MAAO,EAChC,CAAE,KAAM,WAAY,MAAO,QAAS,EACpC,CAAE,KAAM,SAAU,MAAO,MAAO,EAChC,CAAE,KAAM,aAAc,MAAO,UAAW,EACxC,CAAE,KAAM,iBAAkB,MAAO,cAAe,EAChD,CAAE,KAAM,qBAAsB,MAAO,kBAAmB,EACxD,CAAE,KAAM,mBAAoB,MAAO,gBAAiB,CACtD,EAEMC,EAAc,CAClB,CAAE,KAAM,WAAY,MAAO,UAAW,EACtC,CAAE,KAAM,UAAW,MAAO,SAAU,EACpC,CAAE,KAAM,kBAAmB,MAAO,YAAa,EAC/C,CAAE,KAAM,KAAM,MAAO,IAAK,CAC5B,EAEMC,EAAsB,CAC1B,CAAE,KAAM,WAAY,MAAO,UAAW,EACtC,CAAE,KAAM,kBAAmB,MAAO,YAAa,CACjD,EAEA,SAASC,EAAkBvZ,EAAY,CACrC,MAAMwZ,EAAM,IAAI,KAAa,CAAE,KAAMxZ,EAAM,KAAM,cAAe,CAAC,CAAE,CAAC,EACpE,OAAO,IAAI,KAAUA,EAAOwZ,CAAG,CACjC,CAIA,SAASC,EAAoBxnB,EAAe,CAC1C,OAAOA,EAAM,YAAY,EAAE,QAAQ,KAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,CAC3D,CAQA,SAASynB,EAAqBznB,EAAuC,CAGnE,OAFwBwnB,EAAoBxnB,CAAK,EAExB,CACvB,IAAK,SACL,IAAK,KACH,MAAO,CACL,QAAM,KAAE,2CAA4C,IAAI,EACxD,UAAW,QACX,WAAY,gBACd,EAEF,IAAK,WACH,MAAO,CACL,QAAM,KAAE,iDAAkD,UAAU,EACpE,UAAW,cACX,WAAY,sBACd,EAEF,IAAK,SACH,MAAO,CACL,QAAM,KAAE,gDAAiD,SAAS,EAClE,UAAW,kBACX,WAAY,qBACd,EAEF,IAAK,SACH,MAAO,CACL,QAAM,KAAE,+CAAgD,QAAQ,EAChE,UAAW,QACX,WAAY,oBACd,EAEF,IAAK,UACH,MAAO,CACL,QAAM,KAAE,gDAAiD,SAAS,EAClE,UAAW,YACX,WAAY,qBACd,EAEF,IAAK,aACH,MAAO,CACL,QAAM,KAAE,mDAAoD,YAAY,EACxE,UAAW,YACX,WAAY,qBACd,EAGF,IAAK,SACH,MAAO,CACL,QAAM,KAAE,+CAAgD,QAAQ,EAChE,UAAW,OACX,WAAY,EACd,EAGF,IAAK,WACH,MAAO,CACL,QAAM,KAAE,iDAAkD,UAAU,EACpE,UAAW,QACX,WAAY,EACd,EAGF,IAAK,QACH,MAAO,CACL,QAAM,KAAE,8CAA+C,OAAO,EAC9D,UAAW,cACX,WAAY,sBACd,EAGF,IAAK,UACL,QACE,MAAO,CACL,QAAM,KAAE,gDAAiD,SAAS,EAClE,UAAW,kBACX,WAAY,qBACd,CAEJ,CACF,CAEA,SAAS0nB,EAAgB1lC,EAAc2lC,EAAmB,CACxD,SAAO,UACL3lC,EACA,CAAC4lC,EAAKC,KACAA,EAAG,SAAW,QAAaA,EAAG,QAAU,QAC1CD,EAAI,KAAKC,EAAG,OAAS,IAAMA,EAAG,KAAK,EAIjCA,EAAG,SAAW,QAAaA,EAAG,QAAU,QAC1CD,EAAI,KAAKC,EAAG,OAAS,IAAMA,EAAG,KAAK,EAG9BD,GAET,CAAC,CACH,EAAE,KAAKD,CAAS,CAClB,CAEA,SAASG,EAAuBC,EAAS,CAKvC,SAAI,WAAQA,EAAG,IAAI,EACVL,EAAgBK,EAAG,KAAM,IAAI,KAC3B,WAAQA,EAAG,KAAK,WAAW,EAC7BL,EAAgBK,EAAG,KAAK,YAAa,IAAI,EAG9CA,EAAG,KAAK,MACH,UAAYA,EAAG,KAAK,MAGtB,EACT,CAGA,SAASC,EAAuBC,EAAqB,CAKnD,SAAI,WAAQA,CAAc,EACjBP,EAAgBO,EAAgB,IAAI,KAClC,WAAQA,EAAe,WAAW,EACpCP,EAAgBO,EAAe,YAAa,IAAI,EAGrDA,EAAe,MACV,UAAYA,EAAe,MAG7B,EACT,CAEA,QAAe,CACb,cAAApB,EACA,qBAAAY,EACA,eAAAX,EACA,cAAAG,EACA,cAAAC,EACA,YAAAE,EACA,oBAAAC,EACA,aAAAF,EACA,kBAAAG,EACA,uBAAAQ,EACA,uBAAAE,EACA,oBAAAjB,CACF,C,qFCvPO,MAAMmB,EAAiB,CAAC,CAAE,SAAAvhC,EAAU,UAAAoB,EAAW,GAAGxB,CAAM,IAAa,CAC1E,MAAMe,KAAS,MAAWuD,CAAS,EACnC,SACE,OAAC,OAAI,aAAW,MAAGvD,EAAQS,CAAS,EAAI,GAAGxB,EACxC,SAAAI,CAAA,CACH,CAEJ,EAEMkE,EAAanF,MACjB,OAAI,CACF,gBAAiBA,EAAM,WAAW,MAAM,WACxC,OAAQ,aAAaA,EAAM,WAAW,MAAM,WAAW,GACvD,aAAcA,EAAM,MAAM,OAAO,OACnC,CAAC,C,oFC3BI,MAAMyiC,EAAe,IAAM,IAAI,IAAO,IAAI,IAAI,iBAA2C,CAAC,E,qMCoC1F,MAAMC,CAA4B,CAKvC,YAAYpU,EAA2B,CACrC,KAAK,WAAaA,CACpB,CAEA,OAAO,yBAAyB,CAAE,QAAAqU,CAAQ,EAAiC,CACzE,MAAMC,EAAoB,OAAO,KAAKD,EAAQ,aAAa,EAG3D,OAAIC,EAAkB,SAAW,EACxB,GAKL,GAAAD,EAAQ,yBAAyBxW,EAAA,GAAqBwW,EAAQ,yBAAyBE,EAAA,GAIvFF,EAAQ,yBAAyB,OAC/BC,EAAkB,OAAS,GAAKA,EAAkB,CAAC,IAAM,mBAK3DD,EAAQ,yBAAyB,MAC/B,CAAC,OAAO,UAAU,eAAe,KAAKA,EAAQ,cAAe,MAAM,GAKrEA,EAAQ,yBAAyB,MAC/B,CAAC,OAAO,UAAU,eAAe,KAAKA,EAAQ,cAAe,MAAM,GAIrEA,EAAQ,yBAAyB,KAGjCA,EAAQ,yBAAyB,OAEjC,OAAO,UAAU,eAAe,KAAKA,EAAQ,cAAe,WAAW,GACvE,OAAO,UAAU,eAAe,KAAKA,EAAQ,cAAe,SAAS,IAKrEA,EAAQ,yBAAyBG,EAAA,GAC/B,OAAO,UAAU,eAAe,KAAKH,EAAQ,cAAe,MAAM,GAIpEA,EAAQ,yBAAyB,SAGjCA,EAAQ,yBAAyB,MAGjCA,EAAQ,yBAAyBxW,EAAA,GAGjCwW,EAAQ,yBAAyB,MAGjCA,EAAQ,yBAAyBI,EAAA,IAC/B,OAAO,KAAKJ,EAAQ,aAAa,EAAE,KAAMpjB,GAAQ,KAAgB,SAASA,CAAG,CAAC,GAIhFojB,EAAQ,yBAAyB,MAGjCA,EAAQ,yBAAyBK,EAAA,GAC/B,OAAO,UAAU,eAAe,KAAKL,EAAQ,cAAe,kBAAkB,GAIhFA,EAAQ,yBAAyB,MAGjCA,EAAQ,yBAAyBM,EAAA,GAC/B,CAAC,OAAO,UAAU,eAAe,KAAKN,EAAQ,cAAe,MAAM,GAIrEA,EAAQ,yBAAyB,YAGjC,MAAwBA,EAAQ,aAAa,GAI7CA,EAAQ,yBAAyBO,EAAA,GAGjCP,EAAQ,yBAAyBQ,EAAA,GAGjCR,EAAQ,yBAAyBS,EAAA,GAGjCT,EAAQ,yBAAyBU,EAAA,GAGjCV,EAAQ,yBAAyBW,EAAA,IAGjCX,EAAQ,yBAAyBzU,EAAA,GAIjCyU,EAAQ,yBAAyBY,EAAA,GAGjCZ,EAAQ,yBAAyBa,EAAA,GAGjCb,EAAQ,yBAAyBc,EAAA,GAGjCd,EAAQ,yBAAyBe,EAAA,EAKvC,CAEQ,wBAAyB,CAC/B,MAAMC,EAAmB,KAAK,WAAW,aAAa,EAChDC,EAAmB,KAAK,WAAW,oBAAoB,EAGvDC,EACJ,OAAOF,GAAqB,SAAW,KAAK,MAAM,KAAK,UAAUA,CAAgB,CAAC,EAAIA,EAClFG,EACJ,OAAOF,GAAqB,SAAW,KAAK,MAAM,KAAK,UAAUA,CAAgB,CAAC,EAAIA,EAExF,KAAK,gBAAgB,YAAY,CAAE,QAAAE,EAAS,QAAAD,CAAQ,CAAC,CACvD,CAEQ,oBAAqB,CAC3B,OAAO,KAAK,WAAW,MAAM,KAAK,YAAc,KAAK,WAAW,gBAAgB,GAAG,KAAK,SAC1F,CAEQ,cAAcE,EAAqB,CACrCA,GAAc,KAAK,mBAAmB,EACnC,KAAK,WAAW,MAAM,SACzB,KAAK,WAAW,SAAS,CAAE,QAAS,EAAK,CAAC,EAGxC,KAAK,WAAW,MAAM,SACxB,KAAK,WAAW,SAAS,CAAE,QAAS,EAAM,CAAC,CAGjD,CAEQ,MAAO,CACb,KAAK,eAAiBtB,EAAa,CACrC,CAEO,sBAAuB,CACvB,KAAK,gBACR,KAAK,KAAK,EAGZ,KAAK,eAAgB,UAAa76B,GAAyC,CACzE,KAAK,cAAc,CAAC,CAACA,EAAE,KAAK,UAAU,CACxC,EAEA,MAAMo8B,EAAuBC,EAA0B,KAAK,uBAAuB,KAAK,IAAI,CAAC,EAE7F,KAAK,kBAAoB,KAAK,WAAW,iBACvC,KACCt/B,GAAwC,CACnC+9B,EAA4B,yBAAyB/9B,CAAK,GAC5Dq/B,EAAqB,CAEzB,CACF,CACF,CAEO,qBAAsB,CAC3B,KAAK,mBAAmB,YAAY,CACtC,CAEO,WAAY,CACjB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,UAAU,EAC/B,KAAK,eAAiB,MACxB,CACF,CAKA,SAASC,EAA0BjE,EAAgB,CAKjD,SAAO,YAASA,EAAI,GAAG,CACzB,C,sZChPO,MAAMkE,EAAsB,CAAC,CAAE,SAAAC,GAAU,eAAAC,EAAe,OAE3D,OAACC,EAAA,GACC,SAAO,KACL,iDACA,8DACA,CACE,SAAAF,GACA,eAAAC,EACF,CACF,EACA,SAAS,QAER,iBAAE,uDAAwD,kDAAkD,EAC/G,E,eCTG,MAAME,EAAyB,CAAC,CACrC,SAAArjC,GACA,SAAAkjC,GACA,eAAAC,GACA,IAAA7G,GAAM,IACN,sBAAAgH,GAAwB,EAC1B,OAQI,OAACC,EAAA,GACC,QAAS,CAACj8B,GAAOk8B,KAAc,CAC7BlH,GAAI,MAAM,cAAc4G,EAAQ,IAAIC,EAAc,oBAAqB,CACrE,QAAS77B,GAAM,QACf,eAAgBk8B,GAAU,gBAAkB,GAC5C,OAAQA,GAAU,QAAU,EAC9B,CAAC,CACH,EACA,SAAU,IACJC,GAAiB,GAAKH,MACjB,OAACL,EAAmB,CAAC,SAAAC,GAAoB,eAAAC,EAAA,CAAgC,EAG3E,KAGR,SAAAnjC,EAAA,CACH,E,cCHG,SAAS0jC,EAAiB3E,GAAc4E,GAAqB,GAAI,CACtE,MAAO,IAAIC,KAAoB,CAC7B,GAAI,CACF,OAAO7E,GAAG,GAAG6E,EAAI,CACnB,OAASj9B,GAAG,CACNA,cAAa,OACf,QAAQ,KAAK,GAAGg9B,EAAkB,GAAGh9B,GAAE,OAAO,EAAE,CAEpD,CACF,CACF,CAEO,SAASk9B,EAAwBvmC,GAAyE,CAC/G,MAAO,OAAOlD,IAAY,CACxB,KAAM,CAAE,MAAAiE,GAAO,KAAAylC,GAAM,MAAA3lC,GAAO,OAAAC,EAAO,EAAIhE,GAEvC,IAAU,QACR,IAAI,KAAoB,CACtB,UAAW2pC,EAAyC,CAClD,SAAUzmC,GAAO,SACjB,eAAgBA,GAAO,MACvB,UAAW0mC,EAAgB,CAAE,MAAA3lC,GAAO,KAAAylC,GAAM,MAAA3lC,GAAO,OAAAC,GAAQ,OAAAd,EAAO,CAAC,EACjE,IAAK,GACP,CAAC,CACH,CAAC,CACH,CACF,CACF,CAMO,MAAMymC,EAAwB,CAAK,CACxC,SAAAb,GACA,eAAAC,GACA,UAAAt4B,GACA,IAAAyxB,EACF,IAMqC18B,IAA6C,CAC9E,KAAM,CACJ,MAAA0H,GACA,QAAAH,GACA,MAAO88B,EACT,KAAIC,EAAA,GAAS,OAAM,KAAkBhB,GAAU,CAAE,eAAgB,EAAM,CAAC,CAAC,EAEzE,OAAI/7B,GACK,KAGLG,IACFg1B,GAAI,MAAM,gDAAgD4G,EAAQ,iBAAiB57B,GAAM,OAAO,IAAK,CACnG,MAAOA,GAAM,OAAS,GACtB,QAASA,GAAM,OACjB,CAAC,EACM,MAGJ28B,MAMH,OAACE,EAAA,EAAqB,CAAC,KAAMF,GAC3B,mBAACZ,EAAsB,CAAC,SAAAH,GAAoB,eAAAC,GAAgC,IAAA7G,GAC1E,mBAAC8H,EAAA,EAA6B,CAAC,SAAAlB,GAC7B,mBAACr4B,GAAA,CACE,GAAGw5B,EAAczkC,GAAO,CAAE,IAAA08B,GAAK,OAAQ,YAAa,SAAA4G,GAAU,cAAee,GAAW,MAAM,OAAQ,CAAC,EAC1G,EACF,EACF,EACF,GAbA3H,GAAI,MAAM,iDAAiD4G,EAAQ,cAAc,EAC1E,KAcX,EAOIc,EAAkB,CAAC,CAEvB,MAAA3lC,GAEA,KAAMimC,GACN,MAAAnmC,GACA,OAAAC,GACA,OAAAd,EACF,IAA2E,CACzE,MAAM8D,MAAY,OAAI,CAAE,MAAAjD,GAAO,OAAAC,EAAO,CAAC,EAuBvC,MArBqB,CAAC,CAAE,UAAAmmC,EAAU,OAE9B,OAACC,EAAA,EAAK,CAAC,MAAAnmC,GAAc,UAAA+C,GAAsB,OAAM,GAAC,UAAAmjC,GAAsB,gBAAiBA,GAKvF,mBAAClB,EAAA,CACC,SAAU/lC,GAAO,SACjB,eAAgBA,GAAO,MACvB,sBAAuB,GACvB,IAAK,IAEL,mBAAC,OAAI,sBAAqBA,GAAO,SAAU,cAAY,yBACrD,mBAACgnC,GAAA,CAAK,UAAAC,EAAA,CAAsB,EAC9B,EACF,EACF,CAKN,EAOO,SAASE,EAAW7tC,GAA+D8tC,GAAc,IAAI,IAAO,CACjH,GAAI,CAAC9tC,IAAS,OAAOA,IAAU,UAAY,OAAO,SAASA,EAAK,EAC9D,OAAOA,GAIT,MAAM+tC,GAAc,MAAM,QAAQ/tC,EAAK,EAAI,CAAC,GAAGA,EAAK,EAAI,CAAE,GAAGA,EAAM,EAGnE,GAAI8tC,GAAY,IAAI9tC,EAAK,EACvB,OAAO8tC,GAAY,IAAI9tC,EAAK,EAE9B8tC,GAAY,IAAI9tC,GAAO+tC,EAAW,EAElC,MAAMC,GAAY,QAAQ,QAAQD,EAAW,EAE7C,UAAW33B,MAAQ43B,GAAW,CAC5B,MAAMC,GAAO,MAAM,QAAQF,EAAW,EAAIA,GAAY,OAAO33B,EAAI,CAAC,EAAI23B,GAAY33B,EAAI,EAKlF63B,KAAS,OAAOA,IAAS,UAAY,OAAOA,IAAS,cACnD,MAAM,QAAQF,EAAW,EAC3BA,GAAY,OAAO33B,EAAI,CAAC,EAAIy3B,EAAWI,GAAMH,EAAW,EAExDC,GAAY33B,EAAI,EAAIy3B,EAAWI,GAAMH,EAAW,EAGtD,CAEA,OAAO,OAAO,OAAOC,EAAW,CAClC,CAEO,SAASG,EAAoB5B,GAAkB6B,GAA0B1mC,GAAuB,CACrG,MAAMg2B,GAAM,GAAG6O,EAAQ,GAAG6B,EAAgB,GAAG1mC,EAAK,GAElD,OAAO,MAAM,KAAKg2B,EAAG,EAClB,OAAO,CAACl3B,GAAGkJ,KAAO,KAAK,KAAK,GAAIlJ,EAAC,EAAIkJ,GAAE,WAAW,CAAC,EAAK,EAAG,CAAC,EAC5D,SAAS,CACd,CAEA,MAAM2+B,EAAmB,OAAO,iBAAiB,EAC3CC,EAA2B,OAAO,yBAAyB,EAE1D,MAAMC,UAA2B,KAAM,CAC5C,YAAYC,GAAkB,CAC5B,MAAMA,IAAW,mCAAmC,EACpD,KAAK,KAAO,oBACd,CACF,CASO,SAASC,EAAmCxU,GAAW,CAC5D,GAAI,CAACA,IAAO,OAAOA,IAAQ,UAAYyU,EAAgBzU,EAAG,EACxD,OAAOA,GAGT,MAAM0U,GAAQ,IAAI,QAElB,OAAO,IAAI,MAAM1U,GAAK,CACpB,eAAgB,IAAM,GACtB,eAAgB,IAAM,GACtB,aAAc,IAAM,GACpB,IAAK,IAAM,GACX,IAAI0H,GAAQuM,GAAMU,GAAU,CAC1B,GAAIV,KAASG,EACX,MAAO,GAGT,MAAMpuC,GAAQ,QAAQ,IAAI0hC,GAAQuM,GAAMU,EAAQ,EAKhD,SAAI,MAAW3uC,EAAK,KACX,MAASA,EAAK,KAGnB,YAASA,EAAK,MAAK,WAAQA,EAAK,GAC7B0uC,GAAM,IAAI1uC,EAAK,GAClB0uC,GAAM,IAAI1uC,GAAOwuC,EAAiBxuC,EAAK,CAAC,EAEnC0uC,GAAM,IAAI1uC,EAAK,GAGjBA,EACT,CACF,CAAC,CACH,CAqBO,SAAS4uC,EAA2C5U,GAAQx2B,GAA2B,CAC5F,GAAI,CAACw2B,IAAO,OAAOA,IAAQ,UAAY6U,EAAwB7U,EAAG,EAChE,OAAOA,GAGT,KAAM,CAAE,IAAA0L,GAAM,IAAS,OAAAhiC,GAAS,YAAa,SAAA4oC,GAAW,UAAW,cAAAwC,GAAgB,SAAU,EAAItrC,IAAW,CAAC,EACvGkrC,GAAQ,IAAI,QACZK,GAAclC,GAAiB,EAAInH,GAAI,MAAM,KAAKA,EAAG,EAAIA,GAAI,QAAQ,KAAKA,EAAG,EAEnF,OAAO,IAAI,MAAM1L,GAAK,CACpB,eAAe0H,GAAQuM,GAAM,CAC3B,OAAAc,GACE,wCAAwC,OAAOd,EAAI,CAAC,UAAUvqC,EAAM,YAAY4oC,EAAQ,gBAAgBwC,EAAa,GACrH,CACE,MAAO,IAAI,MAAM,EAAE,OAAS,EAC9B,CACF,EACA,QAAQ,eAAepN,GAAQuM,EAAI,EAC5B,EACT,EACA,eAAevM,GAAQuM,GAAMe,GAAY,CAGvC,OAAAtJ,GAAI,MACF,wCAAwC,OAAOuI,EAAI,CAAC,UAAUvqC,EAAM,YAAY4oC,EAAQ,gBAAgBwC,EAAa,GACrH,CACE,MAAO,IAAI,MAAM,EAAE,OAAS,EAC9B,CACF,EACA,QAAQ,eAAepN,GAAQuM,GAAMe,EAAU,EACxC,EACT,EACA,IAAItN,GAAQuM,GAAM38B,GAAU,CAC1B,OAAAy9B,GACE,wCAAwC,OAAOd,EAAI,CAAC,UAAUvqC,EAAM,YAAY4oC,EAAQ,gBAAgBwC,EAAa,GACrH,CACE,MAAO,IAAI,MAAM,EAAE,OAAS,EAC9B,CACF,EACA,QAAQ,IAAIpN,GAAQuM,GAAM38B,EAAQ,EAC3B,EACT,EACA,IAAIowB,GAAQuM,GAAMU,GAAU,CAC1B,GAAIV,KAASI,EACX,MAAO,GAGT,MAAMruC,GAAQ,QAAQ,IAAI0hC,GAAQuM,GAAMU,EAAQ,EAG1CK,GAAa,QAAQ,yBAAyBtN,GAAQuM,EAAI,EAChE,OAAIe,IAAc,CAACA,GAAW,cAAgB,CAACA,GAAW,SACjDhvC,MAML,MAAWA,EAAK,KACX,MAASA,EAAK,KAGnB,YAASA,EAAK,MAAK,WAAQA,EAAK,GAC7B0uC,GAAM,IAAI1uC,EAAK,GAClB0uC,GAAM,IAAI1uC,GAAO4uC,EAAyB5uC,GAAO,CAAE,IAAA0lC,GAAK,OAAAhiC,GAAQ,SAAA4oC,GAAU,cAAAwC,EAAc,CAAC,CAAC,EAErFJ,GAAM,IAAI1uC,EAAK,GAGjBA,EACT,CACF,CAAC,CACH,CAaO,SAASytC,EAAiBztC,GAAUwD,GAA2B,CAEpE,GAAI,CAACxD,IAAS,OAAOA,IAAU,SAC7B,OAAOA,GAGT,KAAM,CAAE,IAAA0lC,GAAM,IAAS,OAAAhiC,GAAS,YAAa,SAAA4oC,GAAW,UAAW,cAAAwC,GAAgB,SAAU,EAAItrC,IAAW,CAAC,EAG7G,OAAOorC,KAAyB,aAAU5uC,EAAK,EAAG,CAAE,IAAA0lC,GAAK,SAAA4G,GAAU,cAAAwC,GAAe,OAAAprC,EAAO,CAAC,CAC5F,CAEA,SAASurC,EAASjvC,GAAoE,CACpF,OAAO,OAAOA,IAAU,UAAYA,KAAU,IAChD,CAEO,SAASyuC,EAAgBzuC,GAAyB,CACvD,OAAOivC,EAASjvC,EAAK,GAAKA,GAAMouC,CAAgB,IAAM,EACxD,CAEO,SAASS,EAAwB7uC,GAAyB,CAC/D,OAAOivC,EAASjvC,EAAK,GAAKA,GAAMquC,CAAwB,IAAM,EAChE,CAEO,SAASa,EACdxoC,GACgC,CAChC,MAAMq1B,GAAgD,CACpD,GAAGr1B,EACL,EACA,OACOq1B,EACT,CAEA,SAASoT,EACPzoC,GACkD,CAAC,CAE9C,SAAS0oC,EAAc3nC,GAAe4nC,GAAwB,CACnE,OAAI5nC,GAAM,OAAS4nC,GACV5nC,GAGF,GADMA,GAAM,MAAM,EAAG4nC,GAAS,CAAC,EACvB,QAAQ,CAAC,KAC1B,CAEO,SAASC,EAAuBC,GAAoD,CACzF,MAAMC,GAA+C,CAAC,EAChDC,GAAiC,CAAC,EAExC,UAAWC,MAAaH,GAAY,CAClC,MAAMI,GAAWD,GAAU,SAE3B,GAAI,CAACC,GAAU,CACbF,GAAc,KAAK,CACjB,KAAML,EAAcM,GAAU,MAAO,EAAE,EACvC,KAAMA,GAAU,KAChB,QAASA,GAAU,OACrB,CAAC,EACD,QACF,CAEK,MAAM,QAAQF,GAAYG,EAAQ,CAAC,IACtCH,GAAYG,EAAQ,EAAI,CAAC,GAG3BH,GAAYG,EAAQ,EAAE,KAAK,CACzB,KAAMP,EAAcM,GAAU,MAAO,EAAE,EACvC,KAAMA,GAAU,KAChB,QAASA,GAAU,OACrB,CAAC,CACH,CAEA,MAAME,GAAU,OAAO,KAAKJ,EAAW,EAAE,OAAO,CAACI,GAA0BD,MACzEC,GAAQ,KAAK,CACX,KAAMR,EAAcO,GAAU,EAAE,EAChC,KAAM,QACN,QAASH,GAAYG,EAAQ,CAC/B,CAAC,EACMC,IACN,CAAC,CAAC,EAEL,OAAIH,GAAc,OAAS,IACrBG,GAAQ,OAAS,GACnBA,GAAQ,KAAK,CAEX,KAAM,UACN,KAAM,SACR,CAAC,EAGH,MAAM,UAAU,KAAK,MAAMA,GAASH,EAAa,GAG5CG,EACT,CAEO,SAASC,GACdvD,GACA5lC,GACAg/B,GACA1oB,GACA,CACA,GAAI,CACF,MAAM8yB,GAAYppC,GAAO,YAAYsW,EAAO,EAG5C,GAAI8yB,KAAc,OAChB,OAGF,GAAI,CACF,MAAAroC,GAAQf,GAAO,MACf,YAAAqpC,GAAcrpC,GAAO,YACrB,KAAAspC,GAAOtpC,GAAO,KACd,KAAA+H,GAAO/H,GAAO,KACd,SAAAipC,GAAWjpC,GAAO,SAClB,GAAGmI,EACL,EAAIihC,GAEJ,eACEA,GACA,iCAAiCppC,GAAO,KAAK,yCAC/C,KAEA,MAAkB,CAAE,MAAAe,GAAO,YAAAsoC,EAAY,EAAG,CAAC,QAAS,aAAa,CAAC,EAE9D,OAAO,KAAKlhC,EAAI,EAAE,OAAS,GAC7B62B,GAAI,QACF,cAAch/B,GAAO,KAAK,mDAAmD,OAAO,KAAKmI,EAAI,EAAE,KAC7F,IACF,CAAC,yBACH,EAGK,CACL,MAAApH,GACA,YAAAsoC,GACA,KAAAC,GACA,KAAAvhC,GACA,SAAAkhC,EACF,CACF,OAASj/B,GAAO,CACVA,cAAiB,OACnBg1B,GAAI,MAAM,wCAAwCh/B,GAAO,KAAK,IAAK,CACjE,MAAOgK,GAAM,OAAS,GACtB,QAASA,GAAM,OACjB,CAAC,EAKH,MACF,CACF,CAEO,SAASu/B,EACd3D,GACA6B,GACAznC,GACAg/B,GACA1oB,GACkD,CAClD,KAAM,CAAE,QAAAjG,EAAQ,EAAIrQ,GAEpB,GAAKqQ,GAIL,OAAO,SAA8BjK,GAA0B,CAC7D,GAAI,IACF,MAAkB,4BAA6B,CAC7C,SAAAw/B,GACA,iBAAA6B,GACA,MAAOznC,GAAO,MACd,SAAUA,GAAO,QACnB,CAAC,EAED,MAAMwpC,GAAuC,CAC3C,QAAAlzB,GACA,iBAAAmxB,GACA,UAAWlB,EAAwBvmC,EAAM,EACzC,YAAa,CAACypC,GAAgBnzB,KAAY,CACxC,IAAU,QACR,IAAI,KAA0B,CAC5B,MAAOA,GACP,SAAAsvB,GACA,eAAA6D,EACF,CAAC,CACH,CACF,EACA,aAAc,IAAM,CAClB,IAAU,QAAQ,IAAI,IAA4B,CACpD,EACA,cAAe,CAACA,GAAgBnzB,KAAY,CAC1C,IAAU,QACR,IAAI,KAA4B,CAC9B,MAAOA,GACP,SAAAsvB,GACA,eAAA6D,EACF,CAAC,CACH,CACF,CACF,EAEAzK,GAAI,MAAM,YAAYh/B,GAAO,KAAK,SAASynC,EAAgB,GAAG,EAC9D,MAAMtM,GAAS9qB,GAAQjK,GAAOojC,EAAO,KAEjC,MAAUrO,EAAM,GAClBA,GAAO,MAAOnxB,IAAU,CAClBA,cAAiB,OACnBg1B,GAAI,MAAMh1B,GAAM,QAAS,CACvB,QAASA,GAAM,QACf,MAAOA,GAAM,OAAS,EACxB,CAAC,CAEL,CAAC,CAEL,OAASA,GAAO,CACVA,cAAiB,OACnBg1B,GAAI,MAAMh1B,GAAM,QAAS,CACvB,QAASA,GAAM,QACf,MAAOA,GAAM,OAAS,EACxB,CAAC,CAEL,CACF,CACF,CAEO,SAAS0/B,GAAiC9D,GAAkB0D,GAAc7B,GAAkC,CACjH,OAAO1V,EAAA,GAAQ,iBACbuX,GACAvX,EAAA,GAAQ,YAAY,CAClB,QAAS6T,GACT,SAAU6B,EACZ,CAAC,CACH,CACF,CAIO,MAAMtB,GAAmB,IAAMnmC,EAAA,EAAO,UAAU,MAAQ,cAElD2pC,EAAsB,CAACC,GAAsB,CAAC,IACzD,OAAO,OAAO5pC,EAAA,EAAO,IAAI,EAAE,OAAQ6pC,IAAQD,GAAU,SAASC,GAAI,EAAE,CAAC,EAE1DC,EAAwCC,IAC5CA,GAAmB,MAAM,GAAG,EAAE,CAAC,EAM3BC,EAAuCvC,IAC3C,OAAO,OAAOznC,EAAA,EAAO,IAAI,EAC7B,OACE6pC,IACCA,GAAI,WAAW,WAAW,KAAMptC,IAASA,GAAK,QAAQ,SAASgrC,EAAgB,CAAC,GAChFoC,GAAI,WAAW,gBAAgB,KAAMzP,IAAcA,GAAU,QAAQ,SAASqN,EAAgB,CAAC,CACnG,EACC,IAAKoC,IAAQA,GAAI,EAAE,EACnB,OAAO,CAAClzB,GAAegQ,KACf,CAAC,GAAGhQ,GAAKgQ,GAAI,GAAGsjB,GAAyBtjB,EAAE,CAAC,EAClD,CAAC,CAAC,EAgBIujB,EAA+BzC,IACnC,IAAI,IACTuC,EAAoCvC,EAAgB,EACjD,IAAK7B,IAAa,CACjB,MAAMiE,GAAM7pC,EAAA,EAAO,KAAK4lC,EAAQ,EAEhC,GACE,GAACiE,IACA,CAACA,GAAI,WAAW,gBAAgB,KAAMzP,IAAcA,GAAU,QAAQ,SAASqN,EAAgB,CAAC,GAC/F,CAACoC,GAAI,WAAW,WAAW,KAAMptC,IAASA,GAAK,QAAQ,SAASgrC,EAAgB,CAAC,GAIrF,MAAO,CACL7B,GACA,CACE,gBAAiBiE,GAAI,WAAW,gBAAgB,OAAQzP,IACtDA,GAAU,QAAQ,SAASqN,EAAgB,CAC7C,EACA,WAAYoC,GAAI,WAAW,WAAW,OAAQptC,IAASA,GAAK,QAAQ,SAASgrC,EAAgB,CAAC,CAChG,CACF,CACF,CAAC,EACA,OAAQ1+B,IAAkCA,KAAM,MAAS,CAC9D,EAKWohC,GAAyCJ,IAG7C,CAFUD,EAAqCC,EAAkB,CAExD,EAAE,OAAO,CAACpzB,GAAeivB,KAChC,CAAC,GAAGjvB,GAAKivB,GAAU,GAAGqE,GAAyBrE,EAAQ,CAAC,EAC9D,CAAC,CAAC,EAMMqE,GAA2B,CAACrE,GAAkBwE,GAAoB,CAAC,IAAgB,CAC9F,GAAI,CAACpqC,EAAA,EAAO,KAAK4lC,EAAQ,EACvB,MAAO,CAAC,EAIV,GAAIwE,GAAQ,SAASxE,EAAQ,EAC3B,MAAO,CAAC,EAGV,MAAMyE,GAAuBrqC,EAAA,EAAO,KAAK4lC,EAAQ,EAAE,aAAa,WAAW,kBAAkB,IAC3FkE,CACF,EAEA,OACEO,GACG,OAAO,CAAC1zB,GAAK2zB,KACL,CAAC,GAAG3zB,GAAK,GAAGszB,GAAyBK,GAAW,CAAC,GAAGF,GAASxE,EAAQ,CAAC,CAAC,EAC7EyE,EAAoB,EAEtB,OAAQ1jB,IAAOA,KAAOif,EAAQ,CAErC,EAGa2E,GAAuB,IAAM,CACxC,MAAMX,GAAY,CAEhB,gBACF,EAEA,OAAO,OAAO,OAAO5pC,EAAA,EAAO,IAAI,EAAE,OAAQ6pC,IAAQD,GAAU,SAASC,GAAI,EAAE,CAAC,CAC9E,EAGaW,EAAyB,IAAM,CAE1C,MAAMC,GAA8BT,EAAoC,KAAsB,kBAAkB,EAC1GU,GAAmBH,GAAqB,EAAE,IAAKV,IAAQA,GAAI,EAAE,EAC7Dc,GAAgBd,IAAyB,CAACa,GAAiB,SAASb,GAAI,EAAE,EAEhF,OAAO,OAAO,OAAO7pC,EAAA,EAAO,IAAI,EAAE,OAAQ6pC,IACjCc,GAAad,EAAG,IAAMA,GAAI,SAAWY,GAA4B,SAASZ,GAAI,EAAE,EACxF,CACH,C,qFCxsBO,MAAMe,EAAU,CAAC,CAAE,UAAAjY,EAAY,aAAc,QAAAkY,EAAU,CAAE,IAAoB,CAClF,MAAMxnC,KAAS,MAAWuD,EAAWikC,CAAO,EAE5C,OAAIlY,IAAc,cACT,OAAC,OAAI,UAAWtvB,EAAO,gBAAiB,KAExC,OAAC,MAAG,UAAWA,EAAO,kBAAmB,CAEpD,EAEAunC,EAAQ,YAAc,UAEtB,MAAMhkC,EAAY,CAACnF,EAAsBopC,KAChC,CACL,qBAAmB,OAAI,CACrB,UAAW,aAAappC,EAAM,OAAO,OAAO,IAAI,GAChD,OAAQA,EAAM,QAAQopC,EAAS,CAAC,EAChC,MAAO,MACT,CAAC,EACD,mBAAiB,OAAI,CACnB,YAAa,aAAappC,EAAM,OAAO,OAAO,IAAI,GAClD,OAAQA,EAAM,QAAQ,EAAGopC,CAAO,EAChC,OAAQ,MACV,CAAC,CACH,E,0HClBK,SAASC,EAAiCC,EAA8C,CAC7F,OAAQA,EAAS,CACf,IAAK,QACH,OAAO,KAAkB,MAC3B,IAAK,kBACH,OAAO,KAAkB,gBAC3B,IAAK,qBACH,OAAO,KAAkB,mBAC3B,QACE,OAAO,KAAkB,KAC7B,CACF,CAEO,SAASC,EAA8B7xC,EAAqC,CACjF,OAAQA,EAAM,CACZ,IAAK,WACH,OAAO,KAAe,SACxB,IAAK,YACH,OAAO,KAAe,UACxB,IAAK,eACH,OAAO,KAAe,aACxB,IAAK,iBACH,OAAO,KAAe,eACxB,QACE,OAAO,KAAe,QAC1B,CACF,CAEO,SAAS8xC,EAA8BC,EAAqC,CACjF,OAAQA,EAAM,CACZ,IAAK,WACH,OAAO,KAAe,SACxB,IAAK,eACH,OAAO,KAAe,aACxB,IAAK,iCACH,OAAO,KAAe,+BACxB,IAAK,kCACH,OAAO,KAAe,gCACxB,IAAK,gBACH,OAAO,KAAe,cACxB,IAAK,aACH,OAAO,KAAe,WACxB,IAAK,cACH,OAAO,KAAe,YACxB,IAAK,kBACH,OAAO,KAAe,gBACxB,IAAK,mBACH,OAAO,KAAe,iBACxB,QACE,OAAO,KAAe,QAC1B,CACF,CAEO,SAASC,EAA0BzX,EAAwD,CAChG,OAAQA,EAAY,CAClB,IAAK,YACH,OAAO,KAAsB,UAC/B,IAAK,UACH,OAAO,KAAsB,QAC/B,IAAK,MACH,OAAO,KAAsB,IAC/B,QACE,OAAO,IACX,CACF,CAEA,SAAS0X,EAA+B1gB,EAA+C,CACrF,OAAQA,EAAO,CACb,IAAK,OACH,OAAO,IAAoB,KAC7B,IAAK,QACH,OAAO,IAAoB,MAC7B,IAAK,OACH,OAAO,IAAoB,KAC7B,IAAK,MACH,OAAO,IAAoB,IAC7B,IAAK,WACH,OAAO,IAAoB,WAC7B,IAAK,QACH,OAAO,IAAoB,MAC7B,QACE,MAAM,IAAI,MAAM,uBAAuBA,CAAK,EAAE,CAClD,CACF,CAEO,SAAS2gB,EAAsBC,EAAqD,CACzF,MAAMC,EAAqB/2B,GAA2C,CACpE,OAAQA,EAAM,CACZ,IAAK,WACH,OAAO,KAAiB,SAC1B,IAAK,aACH,OAAO,KAAiB,WAC1B,QACE,OAAO,KAAiB,QAC5B,CACF,EAEMg3B,EAA2B,CAC/B,GAAGF,EAAY,QACjB,EAEA,OAAIA,EAAY,SAAS,WACvBE,EAAoB,SAAWF,EAAY,SAAS,SAAS,IAAKG,GAAY,CAC5E,OAAQA,EAAQ,KAAM,CACpB,IAAK,QACH,MAAO,CACL,GAAGA,EACH,KAAM,KAAc,WACtB,EACF,IAAK,QACH,MAAO,CACL,GAAGA,EACH,KAAM,KAAc,WACtB,EACF,IAAK,QACH,MAAO,CACL,GAAGA,EACH,KAAM,KAAc,WACtB,EACF,IAAK,UACH,MAAO,CACL,GAAGA,EACH,QAAS,CACP,GAAGA,EAAQ,QACX,MAAOL,EAA+BK,EAAQ,QAAQ,KAAK,CAC7D,EACA,KAAM,KAAc,YACtB,EACF,QACE,OAAOA,CACX,CACF,CAAC,GAGCH,EAAY,SAAS,aACvBE,EAAoB,WAAa,CAC/B,GAAGF,EAAY,SAAS,WACxB,KAAMC,EAAkBD,EAAY,SAAS,WAAW,IAAI,CAC9D,GAGK,CACL,GAAGA,EACH,SAAUE,CACZ,CACF,C,kFC5JA,MAAME,EAAY,UAOX,SAASC,EAAY3qB,EAAa9V,EAAuB,CAC9D,MAAO,GAAG8V,CAAG,GAAG0qB,CAAS,GAAGxgC,CAAK,EACnC,CAEO,SAAS0gC,EAAuB3Y,EAA6B,CAClE,IAAIK,EAA+BL,EAEnC,EAAG,CACD,GAAI,oBAAqBK,EAAI,OAASA,EAAI,MAAM,gBAC9C,MAAO,GAGTA,EAAMA,EAAI,MACZ,OAASA,GAET,MAAO,EACT,CAEO,SAASuY,EACdxuC,EACA/D,EACAqO,EACkB,CAClB,OAAO,IAAI,KAAiB,CAC1B,UAAW,CACT,IAAI,KAAmB,CACrB,KAAMtK,EAAS,MAAM,KACrB,MAAA/D,EACA,KAAAqO,EACA,QAAStK,EAAS,MAAM,QACxB,WAAYA,EAAS,MAAM,UAC7B,CAAC,CACH,CACF,CAAC,CACH,C,gGCtCO,MAAM4Q,EAAqB,CAChC69B,EACAp+B,IACoF,CACpF,MAAMxS,KAAM,UAA0B,IAAI,EACpC6wC,KAAe,MAAW,IAAiB,EAC3C,CAAC3oC,EAAU4K,CAAW,KAAI,YAAkB89B,CAAe,EAC3D,CAACjrC,EAAOmrC,CAAQ,KAAI,YAAS,CAAC,EAE9BC,EAAsB7oC,GAAsB,CAChD4K,EAAY5K,CAAQ,EAChBsK,GACFA,EAAiBtK,CAAQ,CAE7B,EAoBA,MAAO,CAlBO,CAAC,CAAE,UAAAmK,EAAW,QAAA8C,EAAS,SAAA7J,CAAS,OAC5C,OAAC,UACC,KAAK,SACL,UAAWulC,EACX,IAAA7wC,EACA,SAAAsL,EACA,QAAS,IAAM,CACbylC,EAAmB,EAAI,EACnB/wC,GAAOA,EAAI,SACb8wC,EAAS9wC,EAAI,QAAQ,YAAc,IAAI,EAEzCmV,IAAU,CACZ,EAEC,SAAA9C,CAAA,CACH,EAGa1M,EAAOuC,EAAU6oC,CAAkB,CACpD,C,gGCzCA,MAAMC,EAA0D,IAAO,eAAe,qBAClF,CAGE,4BAA6B,KAA+B,2BAC9D,EACA,CAAC,EAIE,SAASpF,EAA8B,CAC5C,SAAApkC,EACA,SAAAkjC,CACF,EAA0D,CACxD,SACE,OAAC,MACC,SAAAA,EACA,KAAMsG,EACN,aAAc,IAAO,SAAS,SAAS,8BACvC,aAAc,IAAO,SAAS,SAAS,8BAEtC,SAAAxpC,CAAA,CACH,CAEJ,C,wDC9BO,MAAMypC,EAAsB7Y,GAC1B,OAAO,KAAKA,CAAG,EAAE,OAAO,CAAC3c,EAAiCqK,KAC3DsS,EAAItS,CAAG,IAAM,SACfrK,EAAIqK,CAAG,EAAIsS,EAAItS,CAAG,GAEbrK,GACN,CAAC,CAAC,EAGMy1B,EAAiB9yC,GACrB,OAAOA,GAAU,UAAYA,IAAU,MAAQ,OAAO,KAAKA,CAAK,EAAE,SAAW,C,qLCFtF,MAAMsN,EAAY,CAACnF,EAAsB4qC,KAAiC,CACxE,cAAY,OAAI,CACd,SAAU,WACV,SAAUC,EACV,aAAc,KAChB,CAAC,EACD,YAAU,OAAI,CACZ,WAAY,SACZ,UAAW,OACX,gBAAiB,OACjB,eAAgB,OAChB,QAAS,QACT,aAAc,OAEd,uBAAwB,CACtB,QAAS,MACX,EAEA,WAAY,CACV,cAAe,OACf,QAAS,KACT,MAAO,OACP,OAAQ,OACR,SAAU,WACV,KAAM,EACN,IAAK,EACL,WAAY,4DAA4D7qC,EAAM,OAAO,WAAW,OAAO,GACzG,CACF,CAAC,EACD,iBAAe,OAAI,CACjB,YAAa8qC,EACb,MAAO,QAAQF,CAAmB,MAAMC,CAAsB,IAC9D,QAAS,MACX,CAAC,CACH,GAEaE,EAAa,CAAC,CACzB,oBAAAH,EACA,OAAA1sC,EACA,wBAAA8sC,CACF,IAIM,CACJ,MAAMppC,KAAS,MAAWuD,EAAWylC,CAAmB,EACxD,SACE,OAAC,OAAI,KAAM,OAAQ,UAAWhpC,EAAO,cAClC,SAAA1D,GAAQ,IAAKrG,GACRmzC,IAA4BnzC,EAAM,QAAU,QAAaA,EAAM,QAAU,KACpE,QAIP,OAAC,QAAqB,UAAW+J,EAAO,WACtC,mBAAC,QAAK,UAAWA,EAAO,SAAW,SAAA/J,EAAM,MAAM,GADtCA,EAAM,GAEjB,CAEH,EACH,CAEJ,EC9DM,EAAamI,GAAyB,CAE1C,MAAMirC,EAAUjrC,EAAM,OAAS,UAAY,UACrCkrC,EAAWlrC,EAAM,OAAS,UAAY,UAE5C,MAAO,CACL,cAAY,OAAI,CACd,MAAOkrC,CACT,CAAC,EACD,eAAa,OAAI,CACf,MAAOD,CACT,CAAC,EACD,YAAU,OAAI,CACZ,QAAS,QACT,WAAY,KACd,CAAC,CACH,CACF,EAiCA,EA/B8B,CAAC,CAC7B,MAAApzC,EACA,MAAA4R,EACA,OAAAy9B,EACA,eAAAiE,CACF,IAKM,CACJ,MAAMvpC,KAAS,MAAW,CAAS,EAG7BwpC,EAAgBvzC,EAAM,IAGtBwzC,EAAiBxzC,EAAM,MAE7B,SACE,QAAC,QAAK,UAAWszC,EAAiBvpC,EAAO,SAAW,GAClD,oBAAC,QAAK,UAAWA,EAAO,WAAa,SAAAwpC,CAAA,CAAc,KACnD,OAAC,QAAK,aAAC,KACP,OAAC,QAAK,aAAM,KACZ,OAAC,QAAK,UAAWxpC,EAAO,YAAc,SAAAypC,CAAA,CAAe,KACrD,OAAC,QAAK,aAAM,EACX5hC,EAAQy9B,EAAS,MAAK,OAAC,QAAK,cAAE,IAN4Bz9B,CAO7D,CAEJ,EChCa6hC,EAA+B,OAC/BT,EAAyB,OACzBC,EAAuC,OAE9C,EAAY,CAAC9qC,EAAsB4qC,EAA6BO,KAA6B,CACjG,cAAY,OAAI,CACd,aAAc,aAAanrC,EAAM,OAAO,OAAO,MAAM,GACrD,QAAS,OACT,SAAU,WACV,YAAa,OACb,WAAamrC,EAA4B,GAAX,SAC9B,OAASA,EAA0B,GAAT,MAC5B,CAAC,EACD,0BAAwB,OAAI,CAC1B,SAAU,WACV,KAAM,EACN,OAASA,EAAuB,GAAN,IAC1B,IAAKA,EAAiB,MAAQ,IAC9B,OAAQ,OACR,OAAQ,EACR,OAAQ,OACR,MAAO,MACT,CAAC,EACD,oBAAkB,OAAI,CACpB,SAAU,WACV,MAAO,gBAAgBP,CAAmB,MAAMC,CAAsB,OAAOC,CAAoC,GACnH,CAAC,EACD,gBAAc,OAAI,CAChB,WAAY,SACZ,UAAW,OACX,gBAAiB,OACjB,eAAgB,OAChB,aAAcQ,EAEd,uBAAwB,CACtB,QAAS,MACX,EAEA,UAAW,CACT,cAAe,OACf,QAAS,KACT,MAAO,OACP,OAAQ,OACR,SAAU,WACV,KAAM,EACN,IAAK,EACL,WAAY,qDAAqDA,CAA4B,MAAMtrC,EAAM,OAAO,WAAW,OAAO,GACpI,CACF,CAAC,CACH,GAEA,SAASurC,EAAeC,EAAgF,CACtG,IAAIC,EAAkC,CAAC,EACnCvtC,EAAyB,CAAC,EAC9B,UAAWqhB,KAAOisB,EACZjsB,KAAOisB,GAAaA,EAAUjsB,CAAG,GAAK,CAACA,EAAI,SAAS,OAAO,EAC7DksB,EAAgB,KAAK,CACnB,IAAAlsB,EACA,MAAOisB,EAAUjsB,CAAG,CACtB,CAAC,EACQA,KAAOisB,GAAaA,EAAUjsB,CAAG,GAAKA,EAAI,SAAS,OAAO,GACnErhB,EAAO,KAAK,CACV,IAAAqhB,EACA,MAAOisB,EAAUjsB,CAAG,CACtB,CAAC,EAGL,MAAO,CACL,OAAArhB,EACA,gBAAAutC,CACF,CACF,CAkFA,QAhFoB,CAAC,CAAE,aAAAC,EAAc,QAAAC,EAAS,oBAAAf,EAAqB,YAAAgB,EAAa,eAAAT,CAAe,IAAoB,CACjH,KAAM,CAAE,SAAAU,EAAU,GAAGL,CAAU,EAAIE,EAE7BI,KAAiB,MAAkBD,GAAY,EAAE,EACjD,CAAC7sC,EAAG+sC,CAAe,KAAIC,EAAA,GAAmB,EAC1CC,EAAgBL,GAAa,QAAUhB,EACvChpC,KAAS,MAAW,EAAWqqC,EAAed,CAAc,EAE5D,CAAE,OAAAjtC,EAAQ,gBAAAutC,CAAgB,EAAIF,EAAeC,CAAS,EAKtDU,EAAsBr0C,GACtBA,IAAU,UAAOA,IAAU,WACtB,OAEFA,EAIHs0C,EAAY,GAAGL,EAAiBD,EAAW,EAAE,IAAIC,EAAiB,GAAK,IAAID,CAAQ,KAAK,GAAGJ,EAAgB,IAC9G5zC,GAEQ,MAAG,MAAYA,EAAM,GAAG,CAAC,KAAKq0C,EAAmBr0C,EAAM,KAAK,CAAC,GAExE,CAAC,IAEKmzC,EAA0B,GAAQY,GAAeA,GAAa,QAEpE,SACE,oBACG,UAAAA,IAAgB,QAAaT,MAC5B,OAACiB,EAAA,EAAU,CAAC,YAAAR,EAA0B,SAAUT,CAAA,CAAgB,KAElE,QAAC,OAAkB,UAAWvpC,EAAO,WACnC,oBAAC,QAAK,UAAWA,EAAO,uBACtB,mBAACyqC,EAAA,GACC,WAAS,KAAE,kDAAmD,mBAAmB,EACjF,QAAS,IAAM,IACb,MAAkB,+DAA+D,EACjFN,EAAgBI,CAAS,CAC3B,EACA,KAAK,OACP,EACF,KACA,OAAC,QAAK,KAAM,OAAQ,UAAWvqC,EAAO,iBACpC,oBAAC,OAAI,UAAWA,EAAO,aACpB,WAAC,CAACiqC,GAAYC,MAAkB,OAAC,QAAM,SAAAD,CAAA,CAAS,KACjD,OAAC,QAAM,aAAI,EACV,CAACC,GAAkB,CAAC,CAACD,GAAYA,IAAa,OAC7C,QAAC,QAAK,cACEA,EAAS,IAAM,MACvB,KAEF,OAAC,QACE,SAAAJ,EAAgB,IAAI,CAAC5zC,EAAO4R,OAC3B,OAAC,GACC,eAAA0hC,EACA,MAAAtzC,EAEA,MAAA4R,EACA,OAAQgiC,EAAgB,QAFnBhiC,CAGP,CACD,EACH,KACA,OAAC,QAAM,aAAI,GACb,EACF,KAGA,OAACshC,EAAA,CACC,wBAAAC,EACA,oBAAqBiB,EACrB,OAAA/tC,CAAA,CACF,IAxCQytC,CAyCV,GACF,CAEJ,C,gDCxJO,SAASW,EAAsBza,EAA8C,CAClF,MAAO,0BAA2BA,CACpC,C,2UCqBA,MAAM0a,EAAuB,CAAC,CAAE,KAAA7X,EAAK,IAA+B,CAClE,KAAM,CAAE,UAAA8X,GAAW,UAAAC,EAAW,QAAAC,GAAS,QAAAtG,GAAU,EAAG,EAAI1R,GAClDiY,MAAY,MAAsBH,EAAS,EACjD,SACE,QAAC,KAAK,CAAC,QAAQ,6CAA6C,qBACjD,CAAE,QAAAE,EAAQ,EAAE,eAAa,CAAE,UAAAD,CAAU,EAAE,KAAG,CAAE,UAAAE,EAAU,EAAE,KAAG,CAAE,QAAAvG,EAAQ,GAChF,CAEJ,EAEawG,EAA2B,CAAyB,CAC/D,WAAAC,GACA,WAAAC,GACA,WAAAC,EACA,WAAAC,GACA,kBAAAC,GAAoB,WACpB,kBAAAC,GAAoB,GACpB,UAAAC,EACF,IAAwB,CACtB,MAAMC,MAAO,MAASH,GAAkBF,CAAU,EAAGE,GAAkBD,EAAU,CAAC,EAC5EK,GAAuB,OAAO,QAAQD,EAAI,EAAE,SAAW,EACvD,CAACE,GAAcC,EAAe,KAAI,YAASF,EAAoB,EAErE,SACE,QAACG,EAAA,EAAK,CAAC,IAAK,EAAG,UAAU,SACvB,oBAACC,EAAA,EAAG,CACF,oBAACC,EAAA,EAAI,CAAC,QAAQ,KAAK,QAAQ,KACzB,oBAACnB,EAAA,CAAqB,KAAMM,EAAA,CAAY,KACxC,OAAC9rC,EAAA,EAAI,CAAC,KAAK,aAAc,MACzB,OAACwrC,EAAA,CAAqB,KAAMO,EAAA,CAAY,GAC1C,EACF,KACA,QAACW,EAAA,EAAG,CACD,UAAAJ,OACC,OAACM,EAAA,GACC,WAAS,KAAE,4CAA6C,gCAAgC,EACxF,QAAQ,YACR,UAAS,GAET,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,6CAAiC,EACvF,EAED,OAAO,QAAQP,EAAI,EAAE,IAAI,CAAC,CAAC7tB,GAAKquB,EAAK,OACpC,OAACC,EAAA,EAAS,CAAC,MAAAD,GAAwB,MAAOruB,EAAA,EAAZA,EAAiB,CAChD,KACD,OAAC4pB,EAAA,EAAO,EAAC,GACX,KACA,QAACqE,EAAA,EAAK,CAAC,IAAK,EAAG,UAAU,MAAM,eAAe,gBAC5C,qBAAC3mC,EAAA,IACC,QAAQ,YACR,QAAS,IAAM,CACE0mC,GAAf,CAAAD,EAAoC,CACtC,EAEC,UAAAA,OACC,OAAC,KAAK,CAAC,QAAQ,uDAAuD,2BAAe,EAEtF,CAACA,OACA,OAAC,KAAK,CAAC,QAAQ,uDAAuD,2BAAe,GAEzF,EACCJ,OACC,OAACrmC,EAAA,GAAM,CAAC,QAAQ,cAAc,QAASsmC,GAAW,KAAK,UACrD,oBAAC,KAAK,CAAC,QAAQ,+CAA+C,gCACxC,CAAE,QAASN,GAAW,OAAQ,GACpD,EACF,GAEJ,EACCS,OACC,OAACze,EAAA,EAAU,CAAC,SAAU,KAAK,UAAUke,EAAY,KAAM,CAAC,EAAG,SAAU,KAAK,UAAUC,GAAY,KAAM,CAAC,EAAG,GAE9G,CAEJ,E,sGChHO,SAASc,GAAoB,CAClC,KAAM,CAACC,EAAqB,KAAI,MAAyB,EAEzD,SAAO5I,EAAA,IACL,MACE6H,GACAgB,IACG,CACH,MAAMC,MAAsB,MAAyCD,CAAgB,EAC/EE,MAAiB,MAAoCD,GAAqBjB,EAAU,EAE1F,OAAOe,GAAsB,QAAQE,GAAqBC,GAAgBlB,GAAY,CACpF,eAAgB,KAChB,cAAeA,GAAW,cAAc,cACxC,UAAWA,GAAW,cAAc,UACtC,CAAC,CACH,CACF,CACF,C,eCEO,MAAMmB,EAA6B,CAAC,CACzC,OAAArtC,GACA,YAAAstC,GACA,iBAAAC,EACA,eAAAH,GACA,UAAA1I,GACA,gBAAA8I,GACA,eAAAC,EACF,IAAkB,CAChB,KAAM,CAAE,OAAQP,EAAiB,KAAI,MAAoB,CAAE,eAAAE,EAAe,CAAC,EACrEM,MAAW,MAAY,EACvB,CAACC,GAAe,CAAE,MAAAlmC,EAAM,CAAC,EAAIulC,EAAkB,EAE/CxuC,MAAQ,KAAE,mDAAoD,iBAAiB,EAC/EovC,MAAa,KAAE,mDAAoD,uCAAuC,EAC1GC,GAAepmC,GAEjB,2BADA,KAAE,qDAAsD,4BAA4B,EAGlF6kC,GACJgB,IAAeC,KACX,SAAS,MAA6BD,EAAW,KAAG,MAA6BC,CAAgB,CAAC,EAClG,OAEN,eAAeO,IAAmB,CAChC,GAAI,GAACP,GAAoB,CAACL,IAG1B,OAAOS,GACJ,QAAQJ,EAAkBL,EAAgB,EAC1C,KAAK,IAAM,CACVxI,GAAU,EACV8I,GAAgB,CAClB,CAAC,EACA,MAAO35B,IAAQ,CACd45B,GAAe55B,EAAG,CACpB,CAAC,CACL,CAEA,eAAek6B,IAAkB,CAC/B,GAAI,CAACR,GAAoB,CAACL,GACxB,OAEF,MAAMrL,MAAU,MAAsB,CAAE,GAAGqL,GAAkB,KAAMK,CAAiB,CAAC,EAC/ES,GAAcxe,EAAA,GAAQ,UAAU,aAAa4d,GAAe,GAAG,QAAS,CAC5E,gBAAiB,GACjB,SAAU,KAAK,UAAUvL,EAAO,EAChC,SAAU,OAAO,SAAS,SAAW,OAAO,SAAS,MACvD,CAAC,EAED6L,GAASM,EAAW,CACtB,CAEA,SACE,OAACC,EAAA,GACC,OAAAjuC,GACA,MAAAxB,GACA,YAAAqvC,GACA,qBAAuBpmC,GAAwB,UAAhB,cAC/B,QACE,QAACilC,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC5B,WAACjlC,OACA,OAAC,KAAK,CAAC,QAAQ,kDAAkD,yHAGjE,KAEF,OAACmlC,EAAA,EAAI,CAAC,QAAQ,KACZ,mBAAC,KAAK,CAAC,QAAQ,qDAAqD,6CAEpE,EACF,KACA,OAAC,OACE,SAAAN,IAAQ,OAAO,QAAQA,EAAI,EAAE,IAAI,CAAC,CAAC7tB,GAAKquB,EAAK,OAAM,OAACC,EAAA,EAAS,CAAC,MAAAD,GAAwB,MAAOruB,EAAA,EAAZA,EAAiB,CAAE,EACvG,EACChX,OACC,QAAC87B,EAAA,EAAK,CAAC,SAAS,UAAU,MAAOqK,GAC/B,oBAAC,KAAK,CAAC,QAAQ,gDAAgD,kLAG/D,KACA,OAAC,OAAI,MAAO,CAAE,aAAc,CAAE,EAC5B,mBAAC,QAAM,kBAAmBnmC,EAAK,EAAE,EACnC,GACF,GAEJ,EAEF,UAAYA,GAA2BsmC,GAAnBD,GACpB,UAAApJ,EAAA,CACF,CAEJ,EClGawJ,EAAmB,CAAC,CAC/B,WAAAjC,GACA,WAAAC,GACA,eAAAkB,EACA,YAAAe,GACA,cAAAC,GACA,iBAAAC,GACA,eAAAZ,GACA,WAAAa,EACF,IAA6B,CAC3B,KAAM,CAACC,GAAkBC,EAAmB,KAAI,YAAS,EAAK,EACxD9J,MAAY,eAAY,IAAM0J,GAAc,EAAK,EAAG,CAACA,EAAa,CAAC,EAEnEK,MAAoB,MAA0BxC,EAAU,EACxDyC,MAAoB,MAA0BxC,EAAU,EAC9D,SACE,oBACE,oBAACyC,EAAA,GACC,QAAS,IAAMP,GAAc,EAAK,EAClC,SAAO,KAAE,kDAAmD,oBAAoB,EAEhF,mBAACtC,EAAA,CACC,WAAY2C,GACZ,WAAAxC,GACA,WAAYyC,GACZ,WAAAxC,GACA,kBAAmB,KACnB,kBAAmBiC,IAAeG,GAClC,UAAW,IAAME,GAAoB,EAAI,EAC3C,EACF,EACCD,OACC,OAAClB,EAAA,CACC,eAAAD,EACA,YAAalB,GACb,iBAAkBD,GAClB,OAAQsC,GACR,UAAA7J,GACA,gBAAiB2J,GACjB,eAAAZ,EAAA,CACF,GAEJ,CAEJ,E,8DCrDA,MAAMmB,EAAqB,GAYpB,SAASC,EAAoB,CAClC,kBAAAC,GACA,uBAAAC,GACA,aAAAC,EACA,iBAAAC,GACA,gBAAAC,GACA,iBAAAb,GACA,eAAAZ,GACA,WAAAa,EACF,EAA6B,CAC3B,KAAM,CAACC,GAAkBC,EAAmB,KAAI,YAAS,EAAK,EACxD,CAACW,GAAeC,EAAgB,KAAI,YAAqD,EACzFC,GAAmBF,IAAe,eAAe,KAAO,GACxD/B,MAAiC,WACrC,KAAO,CAAE,eAAgB,KAA2B,IAAKiC,EAAiB,GAC1E,CAACA,EAAgB,CACnB,EAEMC,GAAoBH,IAA8D,CACtFX,GAAoB,EAAI,EACxBY,GAAiBD,EAAa,CAChC,EAEMI,GAAmB,IAAM,CAC7Bf,GAAoB,EAAK,CAC3B,EAEMgB,MAAU,KAAE,uCAAwC,SAAS,EAE7D3mC,GAAqE,CACzE,CACE,YAAa,GACb,GAAI,KACJ,UAAQ,KAAE,oCAAqC,SAAS,EACxD,KAAM,CAAC,CAAE,IAAAke,EAAI,IAAM,CACjB,MAAM3C,GAAK,OAAO2C,GAAI,SAAS,cAAc,OAAO,EAC9C0oB,GAAYP,GAAgB,IAAI,OAAO9qB,IAAM,EAAK,CAAC,GAAK,GAC9D,SACE,OAACsoB,EAAA,EAAK,CAAC,UAAU,MACf,mBAACgD,EAAA,GACC,MAAOtrB,GACP,QAASqrB,GACT,SAAUR,IAAoB,CAACQ,GAC/B,SAAU,IAAM,CACdX,GAAkB1qB,EAAE,CACtB,EACF,EACF,CAEJ,CACF,EACA,CACE,GAAI,YACJ,UAAQ,KAAE,sCAAuC,YAAY,EAC7D,YAAa,GACb,KAAM,CAAC,CAAE,IAAA2C,EAAI,OACJ,OAAC4oB,GAAA,EAAa,CAAC,KAAM5oB,GAAI,SAAS,cAAc,WAAY,CAEvE,EACA,CACE,GAAI,UACJ,UAAQ,KAAE,oCAAqC,MAAM,EACrD,YAAa,GACb,KAAM,CAAC,CAAE,IAAAA,EAAI,IAAM,CACjB,MAAMhwB,GAAQgwB,GAAI,SAAS,cAAc,QACzC,OAAKhwB,MAGE,MAAeA,EAAK,EAAI,QAAO,MAAsBA,EAAK,EAAI,IAF5Dy4C,EAGX,CACF,EACA,CACE,GAAI,OACJ,YAAa,GACb,KAAM,CAAC,CAAE,KAAA5mC,GAAM,IAAAme,EAAI,IAAM,CAGvB,MAAM6oB,GAFa7oB,GAAI,QAAUioB,EAAa,OAAS,EAEtB,CAAC,EAAIpmC,GAAKme,GAAI,MAAQ,CAAC,GAAG,SACrD8oB,GAAiB9oB,GAAI,SACrBulB,MAAO,MAAmBsD,GAAaC,EAAc,EAErDC,GAAQ,IAAIxD,GAAK,KAAK,GACtByD,GAAU,IAAIzD,GAAK,OAAO,GAChC,SACE,QAACI,EAAA,EAAK,CAAC,WAAW,WAAW,IAAK,GAChC,oBAACE,EAAA,EAAI,CAAC,MAAM,UAAU,QAAQ,YAC3B,SAAAkD,EAAA,CACH,KACA,OAAClD,EAAA,EAAI,CAAC,MAAM,QAAQ,QAAQ,YACzB,SAAAmD,EAAA,CACH,GACF,CAEJ,CACF,EACA,CACE,GAAI,UACJ,YAAa,GACb,KAAM,CAAC,CAAE,IAAAhpB,EAAI,IAAM,CACjB,MAAMipB,GAAcjpB,GAAI,QAAU,EAC5BkpB,MAAoB,KAAE,mDAAoD,6BAA6B,EAE7G,SACE,QAACvD,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,eAAe,WACvD,UAAAsD,OAAe,OAACE,GAAA,EAAK,CAAC,QAAM,KAAE,sCAAuC,QAAQ,EAAG,MAAM,MAAO,GAC7F,CAACF,IAAe1B,OACf,oBACE,oBAACvoC,EAAA,IACC,QAAQ,YACR,KAAK,KACL,KAAK,cACL,QAAS,IAAM,CACbgpC,GAAuBhoB,GAAI,QAAQ,CACrC,EACA,QAASkpB,GAET,mBAAC,KAAK,CAAC,QAAQ,uCAAuC,mBAAO,EAC/D,KACA,OAAClqC,EAAA,IACC,QAAQ,YACR,KAAK,KACL,KAAK,UACL,QAAS,IAAM,CACbghB,GAAI,SAAS,cAAc,SAAWuoB,GAAiBvoB,GAAI,QAAQ,CACrE,EAEA,mBAAC,KAAK,CAAC,QAAQ,uCAAuC,mBAAO,EAC/D,GACF,GAEJ,CAEJ,CACF,CACF,EAEA,SACE,oBACE,oBAACopB,EAAA,GACC,SAAUvB,EACV,QAAA/lC,GACA,KAAMmmC,EACN,SAAWjoB,IAAQ,GAAGA,GAAI,cAAc,OAAO,GACjD,KACA,OAACsmB,EAAA,CACC,eAAAD,GACA,YAAa4B,EAAa,CAAC,EAC3B,iBAAkBG,GAClB,OAAQZ,GACR,UAAWgB,GACX,gBAAiBlB,GACjB,eAAAZ,EAAA,CACF,GACF,CAEJ,CC5JA,KAAM,CAAE,+BAAA2C,CAA+B,EAAIC,EAAA,GAO9BC,EAAqE,CAChF,KACA,MACA,UACA,aACA,SACF,EAMO,SAASC,GAAoB,CAAE,KAAAC,EAAK,EAA6B,CACtE,MAAM5b,GAAU4b,GAAK,cAAc,IAC7B,CAAE,UAAA/uC,EAAW,YAAautC,GAAe,CAAC,EAAG,MAAAvnC,EAAM,EAAI2oC,EAA+B,CAAE,IAAKxb,EAAQ,CAAC,EAEtGwY,MAAiC,WACrC,KAAO,CAAE,eAAgB,KAA2B,IAAKxY,EAAQ,GACjE,CAACA,EAAO,CACV,EAEM,CAACqX,GAAYwE,EAAa,KAAI,YAAqD,EACnF,CAACvE,GAAYwE,EAAa,KAAI,YAAqD,EACnF,CAACC,GAAYvC,EAAa,KAAI,YAAS,EAAK,EAE5C,CAACc,GAAiB0B,EAAkB,KAAI,YAAS,IAAI,GAAa,EAClEC,MAAa,WAAQ,IAAM3B,GAAgB,KAAO,EAAG,CAACA,EAAe,CAAC,EAGtE4B,GAAyC,CAC7C,UAAW,CAAE,IAAKN,GAAK,cAAc,aAAc,EACnD,UAAWA,GAAK,cAAc,WAC9B,YAAa,SACf,EACM,CAACO,GAAkBC,EAAc,KAAI,MAAoBR,GAAMM,GAAiB,KAAgB,OAAO,EACvGxC,GACJ0C,IAAkBD,IAAoB,EAAQtzC,EAAA,EAAO,eAAe,kCAGhE4wC,MAAmB,eACtB7uB,IAAmB,IAClB,MAAgC,CAC9B,OAAAA,GACA,OAAQ0sB,KAAe8C,GAAa,CAAC,EACrC,WAAY/C,IAAY,cAAc,SAAW,EACjD,WAAYC,IAAY,cAAc,SAAW,CACnD,CAAC,CACH,EACA,CAACD,GAAYC,GAAY8C,EAAY,CACvC,EAEMiC,MAAgB,eACpB,CAACzxB,GAAgB/X,KAAiB,IAChC,MAA6B,CAC3B,OAAA+X,GACA,OAAQ0sB,KAAe8C,GAAa,CAAC,EACrC,WAAY/C,IAAY,cAAc,SAAW,EACjD,WAAYC,IAAY,cAAc,SAAW,EACjD,MAAAzkC,EACF,CAAC,CACH,EACA,CAACwkC,GAAYC,GAAY8C,EAAY,CACvC,EAEA,GAAIvnC,GACF,SACE,OAAC87B,EAAA,EAAK,CAAC,SAAO,KAAE,4CAA6C,oCAAoC,EAC9F,kBAAmB97B,EAAK,EAC3B,EAIJ,GAAIhG,EACF,SAAO,OAACyvC,EAAA,EAAkB,CAAC,QAAM,KAAE,0BAA2B,YAAY,EAAG,EAG/E,GAAI,CAAClC,GAAa,OAEhB,eAAQ,KAAY,yBAA0B,CAAE,QAAApa,EAAQ,CAAC,KAEvD,OAACiY,EAAA,GACC,QAAQ,YACR,WAAS,KAAE,+CAAgD,iCAAiC,EAC9F,EAIJ,MAAMsE,GAA0B,IAAM,CAEpC,KAAM,CAACC,GAAOC,EAAK,EAAIrC,GACpB,OAAQwB,IAAS,CAChB,MAAM5E,GAAU4E,GAAK,cAAc,QACnC,GAAI,GAAC5E,IAAWA,KAAY,GAG5B,OAAOsD,GAAgB,IAAI,OAAOsB,GAAK,cAAc,OAAO,CAAC,CAC/D,CAAC,EACA,KAAK,CAACz0B,GAAG9e,KAAM,CACd,MAAMq0C,GAAWv1B,GAAE,cAAc,QAC3Bw1B,GAAWt0C,GAAE,cAAc,QACjC,OAAIq0C,KAAa,QAAaC,KAAa,OAClC,EAEFD,GAAWC,EACpB,CAAC,KAEH,MAAiC,CAC/B,OAAQF,KAAUrC,GAAa,CAAC,EAChC,WAAYoC,IAAO,cAAc,SAAW,EAC5C,WAAYC,IAAO,cAAc,SAAW,CAC9C,CAAC,EAGDG,GAAgBJ,GAAOC,EAAK,CAC9B,EAEMG,GAAkB,CACtBC,GACAC,KACG,CACHjB,GAAcgB,EAAO,EACrBf,GAAcgB,EAAO,EACrBtD,GAAc,EAAI,CACpB,EAEA,SAASuD,GAA2BvtB,GAAY,CAC9CwsB,GAAoBnwC,IAAc,CAChC,MAAM0Z,GAAW,IAAI,IAAI1Z,EAAS,EAClC,OAAA0Z,GAAS,IAAIiK,EAAE,EAAIjK,GAAS,OAAOiK,EAAE,EAAIjK,GAAS,IAAIiK,EAAE,EACjDjK,EACT,CAAC,EACDs2B,GAAc,MAAS,EACvBC,GAAc,MAAS,CACzB,CAEA,MAAMvC,GAAca,GAAa,CAAC,EAAE,cAAc,UAAY9C,IAAY,cAAc,QAExF,SACE,QAACQ,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACE,EAAA,EAAI,CAAC,QAAQ,OACZ,mBAAC,KAAK,CAAC,QAAQ,2CAA2C,iIAG1D,EACF,KACA,OAACF,EAAA,EAAK,CACJ,mBAAC/oC,EAAA,GACC,WAAS,KAAE,wCAAyC,wCAAwC,EAC5F,UAAU,SAEV,mBAACoC,EAAA,GAAM,CAAC,KAAK,SAAS,SAAU,CAAC8qC,GAAY,QAASM,GAAyB,KAAK,cAClF,mBAAC,KAAK,CAAC,QAAQ,+CAA+C,4BAAgB,EAChF,EACF,EACF,EACCR,IAAc1E,IAAcC,OAC3B,OAACgC,EAAA,CACC,WAAAjC,GACA,WAAAC,GACA,eAAAkB,GACA,YAAAe,GACA,cAAAC,GACA,iBAAkB,IAAMC,GAAiB,mBAAmB,EAC5D,eAAiBx6B,IAAeo9B,GAAc,oBAAqBp9B,EAAG,EACtE,WAAAy6B,EAAA,CACF,KAEF,OAACO,EAAA,CACC,uBAAyB2B,IAASgB,GAAgBhB,GAAMxB,GAAa,CAAC,CAAC,EACvE,kBAAmB2C,GACnB,aAAA3C,GACA,iBAAkB6B,GAClB,gBAAA3B,GACA,iBAAkB,IAAMb,GAAiB,cAAc,EACvD,eAAiBx6B,IAAeo9B,GAAc,eAAgBp9B,EAAG,EACjE,WAAAy6B,EAAA,CACF,GACF,CAEJ,C,mEClNO,MAAMsD,EAAsB,OAAO,iBAAiB,EAC9CC,EAAoB,OAAO,mBAAmB,EAC9CC,EAA2B,OAAO,0BAA0B,C,gGCWlE,SAASC,EAA2D,CACzE,QAAAx3C,EACA,gBAAAoQ,CACF,EAA0B,CACxB,SACE,QAAC,OACC,oBAAC,MAAG,UAAU,eACZ,mBAAC,KAAK,CAAC,QAAQ,uDAAuD,8BAAkB,EAC1F,KACA,OAAC,OAAI,UAAU,gBACb,mBAAC,OAAI,UAAU,iBACb,mBAAC,OAAI,UAAU,UACb,mBAAC,KACC,WAAY,GACZ,SAAO,KAAE,qDAAsD,SAAS,EACxE,WAAS,KACP,uDACA,wDACF,EAEA,mBAAC,KACC,MAAOpQ,EAAQ,SAAS,wBAA0B,GAClD,SAAWsJ,GACT8G,EAAgB,CACd,GAAGpQ,EACH,SAAU,CAAE,GAAGA,EAAQ,SAAU,uBAAwBsJ,EAAO,cAAc,OAAQ,CACxF,CAAC,EAEL,EACF,EACF,EACF,EACF,GACF,CAEJ,C,6SCvBO,MAAMmuC,EAAgB1zC,GAAkB,OAAO,WAAW,eAAeA,CAAK,KAAK,EAAE,QAgB/E2zC,EAAqB,CAAC,CAAE,QAAAC,EAAS,eAAAC,EAAgB,KAAA3B,EAAM,YAAA4B,CAAY,IAAa,CAC3F,MAAMnsB,KAAW,MAAY,EAEvBosB,EAAqB,CAAAH,EACrB,CAACI,EAAaC,CAAe,KAAI,KAAeF,CAAkB,EAElE,CAACG,EAAmBC,CAAoB,KAAI,YAAkB,EAAK,EACnE,CAACC,EAAsBC,CAAuB,KAAI,YAAkB,EAAK,EAEzE,CAACC,EAAiBC,CAAkB,KAAI,YAE5C,MAAS,EAEL,CAAE,UAAAC,EAAW,MAAAlkC,EAAO,UAAAmkC,EAAU,EAAIvC,EAClC,CAAE,iBAAAwC,CAAiB,KAAI,MAAe,EAEtCC,GAAgB,IAAc,QAAQ,KAAKzC,EAAK,SAAS,GAAK,EAAQA,EAAK,UAAU,cAAc,WAEnG,CAAC0C,GAAmBC,CAAe,KAAI,MAAoB3C,EAAM,KAAgB,MAAM,EAEvF4C,EAAcF,IAAqBC,EAEnCE,EAAyB,CAAC,EAC1BC,EAAapB,EAAU,KAAO,KAE9BqB,MAAa,MAAmBnB,CAAW,EAE3CoB,GAAa,KAAwBD,GAAY/C,CAAI,EACrDiD,GAAU,KAAgB,iBAAiBjD,CAAI,EAiBrD,GAfI2B,GACFkB,EAAQ,QACN,OAAC,MACC,SAAO,KAAE,2CAA4C,MAAM,EAC3D,KAAMC,EAEN,QAAQ,YACR,KAAK,MACL,QAAM,MAAelB,EAAa5B,CAAI,EAEtC,mBAAC,KAAK,CAAC,QAAQ,cAAc,gBAAI,GAL7B,MAMN,CACF,EAGEuC,IAAaK,EAAa,CAC5B,MAAMI,GAAa,KAAqBD,GAAYT,EAAU,KAAMlkC,EAAM,KAAMmkC,EAAS,EAEnFW,MAAU,KAAkB,aAAa,mBAAmB,KAA2BF,EAAU,CAAC,CAAC,OAAO,EAEhHH,EAAQ,QACN,OAAC,MACC,SAAO,KAAE,2CAA4C,MAAM,EAC3D,KAAMC,EAEN,QAAQ,YACR,KAAK,MACL,KAAMI,GAEN,mBAAC,KAAK,CAAC,QAAQ,cAAc,gBAAI,GAL7B,MAMN,CACF,CACF,CAEA,GAAI,CAAClD,EAAK,UAAY,CAACA,EAAK,UAC1B,OAAO,KAIT,MAAM5b,KAAU,MAAW4b,EAAK,WAAaA,EAAK,QAAQ,EACpDmD,MACJ,YAAS/e,CAAO,IACf,IAAc,QAAQ,aAAa4b,EAAK,SAAS,GAAK,KAAmB,QAAQ,aAAaA,EAAK,QAAQ,GAE9G,SACE,QAAC,IAAK,CAAC,IAAK,EAAG,WAAW,SAAS,KAAK,SACrC,UAAA6C,KACD,OAAC,KACC,UAAW7C,EAAK,UAChB,SAAUA,EAAK,SACf,WAAAgD,GACA,gBAAiBC,GACjB,aAAc,IAAM,CAClB,GAAIjD,EAAK,UAAW,CAClB,MAAMoD,GAAyB,KAAyCH,GAASjD,EAAK,SAAS,EAC/F+B,EAAgBqB,GAAwBH,EAAO,CACjD,CACF,EACA,cAAe,IAAMhB,EAAqB,EAAI,EAC9C,wBAAyB,IAAME,EAAwB,EAAI,EAC3D,oBAAqB,IAAME,EAAmB,CAAE,WAAAW,GAAY,cAAAP,EAAc,CAAC,EAC3E,cAAe,IAAM,CAGnB,MAAMY,GAAcb,EAAmB,OAAY,KAA0B,EAI7E/sB,KAAS,MAA6B,CAAE,gBAAiB,KAA2B,YAAA4tB,EAAY,CAAC,CAAC,CACpG,EACA,WAAAP,CAAA,CACF,EACChB,EACAqB,IAAmBnB,MAClB,OAAC,IAAwB,CAAC,QAAA5d,EAAkB,QAAS,IAAM6d,EAAqB,EAAK,EAAG,EAEzF7d,GAAW8d,MACV,OAAC,IAAyB,CAAC,QAAA9d,EAAkB,QAAS,IAAM+d,EAAwB,EAAK,EAAG,EAE7FC,GAAiB,eAChB,OAAC,KACC,WAAYA,EAAgB,WAC5B,cAAeA,EAAgB,cAC/B,UAAW,IAAMC,EAAmB,MAAS,EAC/C,GAEJ,CAEJ,C,0EClJO,SAASiB,EAAgBC,EAA4C,CAC1E,KAAM,CAAE,QAAAzsC,EAAS,MAAAG,EAAO,MAAA1Q,CAAM,KAAI,KAAS,OAAM,KAAkBg9C,EAAQ,CAAE,eAAgB,EAAM,CAAC,CAAC,EAE/FC,EAAYj9C,GAAS,CAAC0Q,GAAS,CAACH,EAChC2sC,EAAUl9C,GAAO,QAGvB,OAFkBuQ,GAAW,CAACvQ,EAGrB,CAAE,QAAS,EAAK,EAGrB,CAACi9C,GAAa,CAACC,EACV,CAAE,QAAS,GAAO,UAAW,EAAM,EAGrC,CAAE,QAAA3sC,EAAS,UAAW,GAAM,SAAUvQ,CAAM,CACrD,C,mOCDA,SAASm9C,EAAmB,CAAE,aAAAC,EAAc,KAAAj6C,CAAK,EAA4B,CAC3E,MAAM4G,KAAS,MAAWuD,CAAS,EAC7B+vC,EAAgBC,EAAiB,CAAE,aAAAF,EAAc,KAAAj6C,CAAK,CAAC,EAE7D,MAAI,CAACk6C,GAAiBA,EAAc,SAAW,KAE3C,OAAC,IAAI,CACH,mBAAC,IAAK,KAAL,CACC,SAAQ,GACR,SAAO,KAAE,2DAA4D,qBAAqB,EAC5F,EACF,KAKF,OAAC,IAAI,CACH,mBAAC,OAAI,UAAWtzC,EAAO,SACrB,mBAAC,IAAe,CAAC,UAAU,UACxB,SAAAszC,EAAc,IAAI,CAACE,EAAc3rC,OAE9B,OAAC,IAAK,KAAL,CACC,IAAK2rC,EAAa,IAClB,OAAQp6C,EAAK,YAAc,SAAW,OAEtC,MAAOo6C,EAAa,MACpB,OAAQ,KAAU,WAAW,eAAe,KAC5C,gBAAY,KACV,2DACA,8BACA,CAAE,cAAeA,EAAa,KAAM,CACtC,GAPK,2BAA2BA,EAAa,GAAG,IAAI3rC,CAAK,EAQ3D,CAEH,EACH,EACF,EACF,CAEJ,CAEO,MAAM4rC,EAA0B,CAAC,CAAE,KAAAr6C,EAAM,SAAAs6C,EAAU,aAAAL,CAAa,IAAa,CAClF,KAAM,CAAE,MAAA31C,CAAM,EAAIg2C,EACZJ,EAAgBC,EAAiB,CAAE,KAAAn6C,EAAM,aAAAi6C,CAAa,CAAC,EACvDrzC,KAAS,MAAWuD,CAAS,EAEnC,OAAInK,EAAK,cAEL,OAAC,IAAQ,CAAC,WAAS,OAACg6C,EAAA,CAAmB,KAAAh6C,EAAY,aAAAi6C,CAAA,CAA4B,EAC7E,oBAACM,EAAA,CACC,iBAAe,SACf,cAAY,WACZ,gBAAc,gBACd,gBAAc,OACd,KAAK,UACL,QAAQ,YACR,cAAa,KAAU,WAAW,eAAe,SAEjD,oBAAC,IAAI,CAAC,cAAW,GAAC,KAAK,OAAO,UAAW3zC,EAAO,WAAY,KAC5D,OAAC,QAAM,SAAAtC,CAAA,CAAM,GACf,EACF,KAKF,mBACG,SAAA41C,EAAc,OAAS,GACtBA,EAAc,IAAI,CAACE,EAAc3rC,OAE7B,OAAC8rC,EAAA,CAEC,KAAK,OACL,QAAQ,YACR,KAAK,UACL,KAAMH,EAAa,IACnB,OAAQp6C,EAAK,YAAc,SAAW,OACtC,IAAI,aACJ,cAAa,KAAU,WAAW,eAAe,KAEhD,SAAAo6C,EAAa,OATT,uBAAuBA,EAAa,GAAG,IAAI3rC,CAAK,EAUvD,CAEH,EACL,CAEJ,EAEM0rC,EAAmB,CAAC,CAAE,KAAAn6C,EAAM,aAAAi6C,CAAa,IAA+D,CAC5G,KAAM,CAAE,KAAAhZ,CAAK,EAAIjhC,EACX0+B,KAAS,KAAS,IAAM8b,EAAcvZ,CAAI,EAAG,CAACA,CAAI,CAAC,EACzD,OAAKvC,EAAO,MAGL+b,EAAaR,EAAcj6C,EAAM0+B,EAAO,MAAM,IAAI,EAFhD,CAAC,CAGZ,EAQO,eAAe8b,EAAcvZ,EAAgB,CAClD,SAAO,KAAmB,EAAE,OAAO,CAAE,MAAO,IAAK,KAAAA,EAAM,KAAM,CAAC,WAAW,CAAE,CAAC,CAC9E,CAEO,SAASwZ,EACdR,EACAj6C,EACA06C,EACAC,EAA8G,CAC5G,WAAU,KACV,SAAQ,KACR,YAAW,IACb,EACmB,CACnB,MAAMC,EAA0B,CAAC,EACjC,UAAWC,KAAaH,EAAY,CAClC,GAAIG,EAAU,MAAQZ,EACpB,SAEF,MAAMa,EAAMD,EAAU,IAChBv2C,EAAQq2C,EAAa,SAASE,EAAU,IAAI,EAC5CT,EAAeO,EAAa,WAAW,EAAE,WAAW,CAAE,GAAG36C,EAAM,IAAK66C,EAAU,GAAI,CAAC,EACnFvlB,EAAMqlB,EAAa,YAAYP,CAAY,EACjDQ,EAAK,KAAK,CAAE,IAAAE,EAAK,MAAAx2C,EAAO,IAAAgxB,CAAI,CAAC,CAC/B,CACA,OAAOslB,CACT,CAEA,SAASzwC,EAAUnF,EAAsB,CACvC,MAAO,CACL,cAAY,OAAI,CACd,YAAaA,EAAM,QAAQ,EAAG,CAChC,CAAC,EACD,YAAU,OAAI,CACZ,SAAU,mBACV,UAAW,MACb,CAAC,EACD,UAAQ,OAAI,CACV,MAAOA,EAAM,OAAO,KAAK,OAC3B,CAAC,EACD,cAAY,OAAI,CACd,SAAUA,EAAM,WAAW,UAAU,SACrC,YAAaA,EAAM,QAAQ,CAAC,EAC5B,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,CACF,CAEO,MAAMu1C,KAAsB,cAAqC,CAAC,CAAE,UAAAlzC,EAAW,GAAG8H,CAAW,EAAG1Q,IAAQ,CAC7G,MAAMmI,KAAS,MAAWuD,CAAS,EAC7B2G,EAAY3B,EAAW,KAAO,KAAa,KACjD,SACE,OAAC2B,EAAA,CACE,GAAG3B,EACJ,QAAQ,YACR,KAAK,UACL,aAAW,MAAG9H,EAAWT,EAAO,UAAU,EAC1C,IAAAnI,CAAA,CACF,CAEJ,CAAC,EAED87C,EAAoB,YAAc,qB,0KCjL3B,MAAMQ,EAAgB,CAAoB,CAC/C,MAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,aAAAC,EACA,UAAA1gC,EACA,UAAArT,EACA,SAAA/I,CACF,IAAgB,CACd,MAAMsI,KAAS,MAAWuD,CAAS,EAE9B8wC,IAEHA,EAAgBrpC,MACd,OAACypC,EAAA,GACC,KAAAzpC,EACA,aAAAwpC,EACA,iBAAAF,EACA,gBAAAC,EACA,SAAA78C,CAAA,CACF,GAIJ,MAAMg9C,EAAc1pC,GAA2B,GAAGA,EAAK,WAAaA,EAAK,WAAW,EAAIA,EAAK,KAAK,GAElG,OAAQ8I,EAAW,CACjB,IAAK,QAAS,CACZ,MAAM6gC,EAAa,CAAC3pC,EAAwBnD,OACnC,OAAC,QAAK,UAAW7H,EAAO,UAAY,SAAAq0C,EAAcrpC,EAAMnD,CAAK,EAAE,EAGxE,SACE,OAAC,OAAI,aAAW,MAAG7H,EAAO,aAAcS,CAAS,EAC/C,mBAACm0C,EAAA,EAAI,CAAC,MAAAR,EAAc,WAAAO,EAAwB,WAAAD,CAAA,CAAwB,EACtE,CAEJ,CACA,IAAK,SACL,QAAS,CACP,MAAMG,EAAYT,EAAM,OAAQppC,GAASA,EAAK,QAAU,CAAC,EACnD8pC,EAAaV,EAAM,OAAQppC,GAASA,EAAK,QAAU,CAAC,EAEpD2pC,EAAa,CAAC3pC,EAAwBnD,QACnC,OAAC,QAAK,UAAW7H,EAAO,WAAa,SAAAq0C,EAAcrpC,EAAMnD,EAAK,EAAE,EAGzE,SACE,QAAC,OAAI,aAAW,MAAG7H,EAAO,cAAeS,CAAS,EAC/C,UAAAo0C,EAAU,OAAS,MAClB,OAAC,OAAI,UAAW70C,EAAO,QACrB,mBAAC+0C,EAAA,EAAU,CAAC,MAAOF,EAAW,WAAAF,EAAwB,WAAAD,CAAA,CAAwB,EAChF,EAEDI,EAAW,OAAS,MACnB,OAAC,OAAI,aAAW,MAAG90C,EAAO,QAASA,EAAO,YAAY,EACpD,mBAAC+0C,EAAA,EAAU,CAAC,MAAOD,EAAY,WAAAH,EAAwB,WAAAD,CAAA,CAAwB,EACjF,GAEJ,CAEJ,CACF,CACF,EAEAP,EAAc,YAAc,gBAE5B,MAAM5wC,EAAanF,GAAyB,CAC1C,MAAM42C,KAAa,OAAI,CACrB,aAAc,OACd,QAAS,OACT,SAAU52C,EAAM,WAAW,UAAU,SACrC,WAAY,QACd,CAAC,EAED,MAAO,CACL,WAAY42C,EACZ,aAAW,MACTA,KACA,OAAI,CACF,aAAc52C,EAAM,QAAQ,EAAG,CACjC,CAAC,CACH,EACA,gBAAc,OAAI,CAChB,QAASA,EAAM,QAAQ,EAAG,CAC5B,CAAC,EACD,iBAAe,OAAI,CACjB,QAAS,OACT,SAAU,OACV,eAAgB,gBAChB,MAAO,OACP,QAASA,EAAM,QAAQ,EAAG,EAC1B,IAAK,WACP,CAAC,EACD,WAAS,OAAI,CACX,QAAS,MACX,CAAC,EACD,gBAAc,OAAI,CAChB,eAAgB,WAChB,SAAU,EACV,UAAW,KACb,CAAC,CACH,CACF,E,wDCxFO,MAAM62C,EAAkB,CAAC,CAC9B,KAAAjqC,EACA,aAAAwpC,EACA,iBAAAF,EACA,gBAAAC,EACA,UAAA9zC,EACA,SAAA/I,CACF,IAAa,CACX,MAAMsI,KAAS,MAAW,CAAS,EAE7Bk1C,KAAc,eACjBnyC,GAAiG,CAC5FuxC,GACFA,EAAiBtpC,EAAMjI,CAAK,CAEhC,EACA,CAACiI,EAAMspC,CAAgB,CACzB,EAEMa,KAAa,eAChBpyC,GAAiG,CAC5FwxC,GACFA,EAAgBvpC,EAAMjI,CAAK,CAE/B,EACA,CAACiI,EAAMupC,CAAe,CACxB,EAEMvnC,KAAU,eACbjK,GAA2D,CACtDyxC,GACFA,EAAaxpC,EAAMjI,CAAK,CAE5B,EACA,CAACiI,EAAMwpC,CAAY,CACrB,EAEA,SACE,QAAC,MAAG,aAAW,MAAGx0C,EAAO,IAAKS,CAAS,EACrC,oBAAC,MACC,oBAAC,QAAK,UAAWT,EAAO,YACtB,oBAAC1I,EAAA,GACC,MAAO0T,EAAK,MACZ,WAAYA,EAAK,WAAaA,EAAK,MACnC,SAAAtT,EACA,UAAWsT,EAAK,UAClB,KACA,QAAC,UACC,SAAUtT,EACV,KAAK,SACL,MAAOsT,EAAK,MACZ,OAAQmqC,EACR,QAASD,EACT,YAAAA,EACA,WAAAC,EACA,QAAUz9C,EAAqB,OAAVsV,EACrB,aAAW,MAAGhN,EAAO,MAAOgL,EAAK,UAAYhL,EAAO,aAAa,EAEhE,UAAAgL,EAAK,MAAO,IACZA,EAAK,QAAU,MACd,OAAC,QAAK,UAAWhL,EAAO,WACtB,mBAAC,KAAK,CAAC,QAAQ,6CAA6C,0BAAc,EAC5E,GAEJ,GACF,EACF,EACCgL,EAAK,kBACJA,EAAK,iBAAiB,EAAE,IAAI,CAACoqC,EAAMvtC,OAE/B,OAAC,MAAG,UAAW7H,EAAO,MACnB,kBAAuBo1C,CAAI,GADI,GAAGA,EAAK,KAAK,IAAIvtC,CAAK,EAExD,CAEH,GACL,CAEJ,EAEAotC,EAAgB,YAAc,kBAE9B,MAAM,EAAa72C,GAAyB,CAC1C,MAAMi3C,KAAa,cAAWj3C,EAAM,OAAO,WAAW,QAASA,CAAK,EAEpE,MAAO,CACL,OAAK,OAAI,CACP,MAAO,YACP,SAAUA,EAAM,GAAG,WAAW,KAAK,GACnC,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,GACnD,GAAI,CACF,QAASA,EAAM,QAAQ,IAAM,CAAC,EAC9B,WAAY,QACd,EAEA,UAAW,CACT,WAAYi3C,CACd,CACF,CAAC,EACD,SAAO,OAAI,CACT,MAAO,cACP,WAAY,SACZ,WAAY,OACZ,OAAQ,OACR,SAAU,UACV,QAAS,EACT,SAAU,QACV,aAAc,WACd,SAAU,SACV,WAAY,MACd,CAAC,EACD,iBAAe,OAAI,CACjB,MAAO,sBACP,MAAOj3C,EAAM,OAAO,KAAK,QAC3B,CAAC,EACD,eAAa,OAAI,CACf,QAAS,OACT,WAAY,SACZ,WAAY,QACd,CAAC,EACD,SAAO,OAAI,CACT,UAAW,OACb,CAAC,EACD,cAAY,OAAI,CACd,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,CACH,CACF,ECpJMk3C,EAAc,OACdC,EAAiB,IAAI,KAAK,SAAS,OAAW,CAAE,QAAS,GAAM,YAAa,MAAO,CAAC,EAAE,QAK/EC,EAAiB,CAAoB,CAChD,MAAApB,EACA,OAAQqB,EACR,SAAAC,EACA,aAAArB,EACA,UAAA5zC,EACA,aAAAuT,EACA,aAAAwgC,EACA,iBAAAF,EACA,gBAAAC,EACA,SAAA78C,EACA,WAAAi+C,CACF,IAA2C,CACzC,MAAM31C,KAAS,MAAW,CAAS,EAC7B41C,EAAiC,CAAC,EAEpCD,IACFC,EAAON,CAAW,EAAI,IAGxB,UAAWtqC,KAAQopC,EACjB,GAAIppC,EAAK,iBACP,UAAW2D,MAAgB3D,EAAK,iBAAiB,EAC/C4qC,EAAOjnC,GAAa,OAAS,GAAG,EAAIA,GAAa,aAAe,GAKtE,GAAI8mC,GAAW,KAAM,CACnB,IAAII,EAAW,IAAI,IAEnBzB,EAAM,QAASppC,GAAS,CACtB,GAAIyqC,IAAYH,GAAetqC,EAAK,iBAAkB,CACpD,MAAMoqC,GAAOpqC,EAAK,iBAAiB,EAAE,KAAMoqC,GAASA,EAAK,QAAUK,CAAO,EACpEja,GAAM4Z,IAAQ,MAAQ,OAAO,MAAMA,GAAK,OAAO,EAAI,KAAYA,GAAK,QAC1ES,EAAS,IAAI7qC,EAAMwwB,EAAG,CACxB,CACF,CAAC,EAED,IAAIsa,GAAWJ,EAAW,GAAK,EAE3BD,IAAYH,EAEdlB,EAAM,KAAK,CAACn5B,EAAG9e,KACN25C,GAAWP,EAAet6B,EAAE,MAAO9e,GAAE,KAAK,CAClD,EAGDi4C,EAAM,KAAK,CAACn5B,EAAG9e,KAAM,CACnB,MAAM45C,GAAOF,EAAS,IAAI56B,CAAC,GAAK,EAC1B+6B,EAAOH,EAAS,IAAI15C,EAAC,GAAK,EAEhC,OAAO25C,IAAYC,GAAOC,EAC5B,CAAC,CAEL,CAEA,OAAK3B,IAEHA,EAAe,CAACrpC,EAAMnD,QACpB,OAACotC,EAAA,CAEC,KAAAjqC,EACA,aAAAwpC,EACA,iBAAAF,EACA,gBAAAC,EACA,SAAA78C,CAAA,EALK,GAAGsT,EAAK,KAAK,IAAInD,EAAK,EAM7B,MAKF,QAAC,SAAM,aAAW,MAAG7H,EAAO,MAAOS,CAAS,EAC1C,oBAAC,SACC,oBAAC,MACE,WAACk1C,MAAc,OAAC,OAAG,EACnB,OAAO,KAAKC,CAAM,EAAE,IAAKK,MACxB,QAAC,MACC,MAAOL,EAAOK,CAAW,EAEzB,aAAW,MAAGj2C,EAAO,OAAQgU,GAAgBhU,EAAO,eAAgB21C,GAAc31C,EAAO,WAAY,CACnG,CAACA,EAAO,QAAQ,EAAGy1C,IAAYQ,CACjC,CAAC,EACD,QAAS,IAAM,CACTjiC,GACFA,EAAaiiC,CAAW,CAE5B,EAEC,UAAAA,EACAR,IAAYQ,MAAe,OAAC92C,EAAA,EAAI,CAAC,KAAK,KAAK,KAAMu2C,EAAW,aAAe,WAAY,IAXnFO,CAYP,CACD,GACH,EACF,KACA,OAAC,SAAO,SAAA7B,EAAM,IAAIC,CAAa,EAAE,GACnC,CAEJ,EAEM,EAAaj2C,IAA0B,CAC3C,SAAO,OAAI,CACT,MAAO,OACP,iBAAkB,CAChB,MAAO,OACP,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,EACrD,CACF,CAAC,EACD,UAAQ,OAAI,CACV,MAAOA,EAAM,OAAO,QAAQ,KAC5B,WAAYA,EAAM,WAAW,iBAC7B,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,GACnD,QAASA,EAAM,QAAQ,IAAM,EAAG,IAAM,CAAC,EACvC,SAAUA,EAAM,WAAW,UAAU,SACrC,UAAW,QACX,WAAY,QACd,CAAC,EACD,cAAY,OAAI,CACd,UAAW,OACX,YAAa,MACf,CAAC,EAED,YAAU,OAAI,CACZ,aAAc,KAChB,CAAC,EACD,kBAAgB,OAAI,CAClB,OAAQ,SACV,CAAC,CACH,G,eC9IO,SAAS83C,EAAoBnzC,EAAqD,CACvF,OAAIA,EAAM,SAAWA,EAAM,SAAWA,EAAM,SACnC,IAA2B,kBAE7B,IAA2B,eACpC,CCWO,SAASwR,EAAa,CAC3B,MAAA6/B,EACA,eAAA+B,EACA,aAAAC,EACA,YAAAC,EACA,OAAQZ,EACR,+BAAAa,EAAiC,IAA+B,QAChE,SAAAZ,EACA,aAAAlB,EACA,aAAAxgC,EACA,UAAAF,EACA,UAAArT,EACA,aAAA4zC,EACA,SAAA38C,EACA,WAAAi+C,CACF,EAAmB,CACjB,KAAM,CAAE,SAAA18B,GAAU,yBAAAs9B,EAA0B,mBAAAC,EAAmB,KAAI,MAAgB,EAE7EtB,MAAc,eAClB,CACElqC,EACAjI,KACG,CACHkW,IAAU,QAAQ,CAChB,KAAM,KAAe,KACrB,QAAS,CACP,IAAKlW,GACL,EAAG,EACH,EAAG,EACH,OAAQiI,EAAK,KACf,CACF,CAAC,CACH,EACA,CAACiO,EAAQ,CACX,EAEMk8B,KAAa,eACjB,CACEnqC,EACAjI,KACG,CACHkW,IAAU,QAAQ,CAChB,KAAM,KAAoB,KAC1B,QAAS,CACP,IAAKlW,GACL,EAAG,EACH,EAAG,EACH,OAAQiI,EAAK,KACf,CACF,CAAC,CACH,EACA,CAACiO,EAAQ,CACX,EAEMw9B,KAAqB,eACzB,CAACzrC,EAAqBjI,KAA2D,CAC3EyxC,GACFA,EAAaxpC,EAAMjI,EAAK,EAEtBwzC,GACFA,EACEvrC,EAAK,WAAaA,EAAK,MACvBsrC,IAAmC,IAA+B,KAC9D,IAA2B,kBAC3BJ,EAAoBnzC,EAAK,CAC/B,CAEJ,EACA,CAACwzC,EAA0B/B,EAAc8B,CAA8B,CACzE,EAEMI,KAAoB,eACvBtC,MAEG,OAACD,EAAA,CACC,UAAA1zC,EACA,UAAAqT,EACA,iBAAkBohC,GAClB,gBAAiBC,EACjB,aAAcsB,EACd,aAAApC,EACA,SAAA38C,EACA,MAAO08C,CAAA,CACT,EAGJ,CAAC3zC,EAAWqT,EAAWohC,GAAaC,EAAYsB,EAAoBpC,EAAc38C,CAAQ,CAC5F,EAEA,OAAQ2+C,EAAa,CACnB,KAAK,KAAkB,MACrB,SACE,OAACb,EAAA,CACC,UAAA/0C,EACA,MAAA2zC,EACA,UAAAtgC,EACA,OAAQ2hC,EACR,SAAAC,EACA,aAAce,EACd,aAAcziC,GAAgBwiC,GAC9B,iBAAkBtB,GAClB,gBAAiBC,EACjB,aAAAd,EACA,SAAA38C,EACA,WAAAi+C,CAAA,CACF,EAEJ,KAAK,KAAkB,KACrB,MAAMgB,EAAsBR,GAAkBA,EAAe,OAAS,EAChES,GAAwBR,GAAgBA,EAAa,OAAS,EACpE,SACE,oBAIG,WAACO,IAAwB,CAACC,IAAyBxC,EAAM,OAAS,IAAMsC,EAAkBtC,CAAK,EAE/FuC,GAAuBD,EAAkBP,CAAc,EAEvDS,IAAyBF,EAAkBN,CAAY,GAC1D,EAEJ,QACE,OAAO,IACX,CACF,CAEA7hC,EAAU,YAAc,W,sUCnHjB,MAAMsiC,EAAoB53C,IAAiB,CAChD,KAAM,CACJ,SAAAwO,GACA,qBAAAqpC,GACA,UAAAtoC,GAAY,KAAK,IAAI,EACrB,iBAAAuoC,GACA,6BAAAC,EACF,EAAI/3C,GACE,CAACwsB,GAAWwrB,EAAU,KAAI,YAAS,EAAK,EACxC,CAACC,GAAUC,EAAW,KAAI,YAAS,IAAI,EAEvCC,MAAiB,SAAM,EACvBC,MAAqB,SAAM,EAC3BC,MAAuB,SAAM,EAE7BC,MAA6B,eAChCx0C,IAA6B,CACxBA,IACFA,GAAM,gBAAgB,EAExBk0C,GAAW,CAACxrB,EAAS,CACvB,EACA,CAACA,GAAWwrB,EAAU,CACxB,EAEMz1B,MAAQ,MAAWg2B,CAAQ,EAEjC,GAAI,IAAC,YAAS/pC,EAAQ,EACpB,OAAO,KAGT,MAAMqlB,MAAO,MAAgBrlB,GAAUe,EAAS,EAEhD,OAAKskB,MAKH,QAAC,OACC,qBAAC,WACC,gBAAY,KAAE,yCAA0C,qBAAqB,EAC7E,UAAWtR,GAAM,UAEjB,qBAAC,OAAI,UAAWA,GAAM,kBACpB,qBAAC,OAAI,UAAWA,GAAM,SACpB,oBAACi2B,EAAA,EAAa,CAAC,MAAO3kB,GAAK,KAAM,KACjC,OAAC,OAAI,UAAWtR,GAAM,OAAQ,KAC9B,OAACk2B,EAAA,EAAmB,CAAC,KAAA5kB,EAAA,CAAY,GACnC,KACA,OAAC6kB,EAAA,EAAc,CAAC,SAAAlqC,GAAoB,UAAAe,EAAA,CAAsB,GAC5D,KACA,OAAC,OAAI,UAAWgT,GAAM,OAAQ,KAC9B,OAACvc,EAAA,IACC,cAAa2D,EAAA,GAAU,WAAW,eAAe,yBACjD,QAAQ,YACR,QAAS2uC,GACT,KAAK,KACL,gBAAe9rB,GACf,gBAAe2rB,GACf,KAAM3rB,GAAY,WAAa,aAE/B,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,gCAAoB,EACjF,GACF,EACCA,MACC,QAAC,OAAI,UAAWjK,GAAM,cAAe,GAAI41B,GACvC,qBAACQ,EAAA,EAAO,CACN,oBAACC,EAAA,GACC,SAAO,KAAE,sCAAuC,WAAW,EAC3D,OAAQX,KAAa,KACrB,YAAa,IAAM,CACjBC,GAAY,IAAI,CAClB,EACA,gBAAeE,EAAA,CACjB,KACA,OAACQ,EAAA,GACC,SAAO,KAAE,wCAAyC,aAAa,EAC/D,OAAQX,KAAa,KACrB,YAAa,IAAM,CACjBC,GAAY,IAAI,CAClB,EACA,gBAAeG,EAAA,CACjB,GACF,KACA,OAACQ,EAAA,EAAU,CAAC,UAAWt2B,GAAM,aAC1B,SAAA01B,KAAa,QACZ,OAAC,WACC,KAAK,WACL,cAAatuC,EAAA,GAAU,WAAW,eAAe,YACjD,GAAIyuC,GACJ,aAAW,MAAG71B,GAAM,kBAAmBA,GAAM,oBAAoB,EAEjE,mBAACu2B,EAAA,GACC,gBAAiB,GACjB,SAAWtqC,IAAa,CACtB8pC,GAA2B,KAEvB,YAAS9pC,EAAQ,GACnBspC,GAAiBtpC,EAAQ,CAE7B,EACA,OAAQ8pC,GACR,iBAAkB,GACpB,EACF,KAEA,OAAC,WACC,KAAK,WACL,cAAa3uC,EAAA,GAAU,WAAW,eAAe,YACjD,GAAI0uC,GACJ,aAAW,MAAG91B,GAAM,kBAAmBA,GAAM,oBAAoB,EAEjE,mBAACla,EAAA,GACC,UAAWka,GAAM,gBACjB,SAAO,KAAE,uCAAwC,yBAAyB,EAE1E,mBAACw2B,EAAA,GACC,MAAOlB,IAAwB,KAC/B,WAAS,KAAgB,EACzB,SAAW7gD,IAAU,CACf+gD,IACFA,GAA6B/gD,IAAO,OAAS,CAAC,CAElD,EACF,EACF,EACF,EAEJ,GACF,EACE,MACN,EAjGO,IAmGX,EAEMuhD,EAAYp5C,KAA0B,CAC1C,aAAW,OAAI,CACb,UAAW,aAAaA,GAAM,OAAO,OAAO,IAAI,GAChD,QAASA,GAAM,QAAQ,GAAG,EAC1B,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,WAAY,QACd,CAAC,EACD,iBAAe,OAAI,CACjB,UAAW,aAAaA,GAAM,OAAO,OAAO,IAAI,GAChD,QAASA,GAAM,QAAQ,GAAG,EAC1B,WAAY,EACZ,eAAgB,gBAChB,WAAY,QACd,CAAC,EACD,UAAQ,OAAI,CACV,WAAY,KACd,CAAC,EACD,wBAAsB,OAAI,CACxB,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,gBAAc,OAAI,CAChB,WAAY,SACd,CAAC,EACD,mBAAiB,OAAI,CACnB,aAAc,CAChB,CAAC,EACD,qBAAmB,OAAI,CACrB,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,WAAY,SACZ,SAAU,CACZ,CAAC,EACD,YAAU,OAAI,CACZ,QAAS,OACT,cAAe,MACf,WAAY,WACZ,SAAU,CACZ,CAAC,CACH,G,8JCvMO,SAAS65C,GAAO,CAAE,QAAAlkB,GAAS,QAAAmkB,EAAQ,EAA4B,CACpE,SACE,QAACtM,EAAA,EAAK,CAAC,IAAK,EAAG,eAAe,gBAC5B,oBAAC3mC,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS8uB,GACnC,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,kBAAM,EAC5D,KAEA,OAAC9uB,EAAA,GAAM,CAAC,QAASizC,GACf,mBAAC,KAAK,CAAC,QAAQ,oCAAoC,4BAAgB,EACrE,GACF,CAEJ,CAEAD,GAAO,YAAc,S,eCZd,SAASE,GAAO,CAAE,QAAApkB,EAAQ,EAA4B,CAC3D,SACE,QAAC6X,EAAA,EAAK,CAAC,eAAe,gBACpB,oBAACwM,EAAA,EAAe,CACd,mBAAC,KAAK,CAAC,QAAQ,mCAAmC,+BAAmB,EACvE,KAEA,OAAC3N,EAAA,GACC,cAAa7hC,EAAA,GAAU,WAAW,WAAW,SAAS,YACtD,WAAS,KAAE,6BAA8B,gBAAgB,EACzD,KAAK,QACL,QAAQ,YACR,QAASmrB,EAAA,CACX,GACF,CAEJ,CAEAokB,GAAO,YAAc,SCVd,MAAM50C,GAAY,CAACnF,GAAsBi6C,GAAa,MACpD,CACL,aAAW,OAAI,CACb,IAAK,EACL,SAAU,WACV,CAAC,GAAGA,GAAa,OAAS,OAAO,EAAE,EAAG,OACxC,CAAC,EAED,kBAAgB,OAAI,CAClB,MAAO,iBACP,OAAQ,QACV,CAAC,EAED,YAAU,OAAI,CACZ,QAAS,OACT,cAAe,SACf,IAAKj6C,GAAM,QAAQ,CAAC,EACpB,QAASA,GAAM,QAAQ,CAAC,EACxB,MAAO,WACP,UAAWA,GAAM,QAAQ,GACzB,gBAAiBA,GAAM,OAAO,WAAW,SACzC,OAAQ,aAAaA,GAAM,OAAO,OAAO,IAAI,GAC7C,aAAcA,GAAM,MAAM,OAAO,OACnC,CAAC,EAED,SAAO,OAAI,CACT,MAAO,QACP,UAAWA,GAAM,QAAQ,GACzB,KAAM,MACN,SAAU,QACV,IAAK,MACL,UAAW,wBACX,OAAQA,GAAM,OAAO,KACvB,CAAC,CACH,GAqBF,SAASk6C,EAAmBr5C,GAAgC,CAC1D,MAAMb,MAAQ,MAAU,EAClB,CAAE,cAAAm6C,EAAc,KAAI,MAAWC,EAAA,CAAc,EAC7Cx4C,GAASuD,GAAUnF,GAAOa,GAAM,UAAU,EAC1C,CAAE,OAAAC,GAAQ,aAAcu5C,GAAkB,QAAA1kB,EAAQ,EAAI90B,GACtDpH,MAAM,aAAuB,EAC7B,CAAE,YAAA6gD,EAAY,KAAIC,EAAA,GACtB,CACE,aAAc/vC,EAAA,GAAU,WAAW,WAAW,SAAS,KACzD,EACA/Q,EACF,EACM,CAAE,aAAA+gD,EAAa,KAAIC,EAAA,GACvB,CACE,cAAe,GACf,OAAA35C,GACA,QAAA60B,EACF,EACAl8B,EACF,EAGMihD,GAAc,CAACL,GAErB,GAAI,CAACv5C,GACH,OAAO,KAGT,MAAM65C,MACJ,QAAC,WACC,UAAW/4C,GAAO,SAClB,IAAAnI,GACC,GAAG+gD,GACH,GAAGF,GACJ,cAAa9vC,EAAA,GAAU,WAAW,WAAW,SAAS,MAEtD,oBAACuvC,GAAM,CAAE,GAAGl5C,EAAA,CAAO,KACnB,OAAC,KAAI,CAAE,GAAGA,EAAA,CAAO,EAChB65C,OAAe,OAACb,GAAM,CAAE,GAAGh5C,EAAA,CAAO,GACrC,EAGF,OAAK65C,MASH,QAAC,KAAgB,CACf,oBAAC,OAAI,UAAWP,EAAA,CAAe,KAE/B,OAACS,EAAA,GAAU,CAAC,QAAO,GAAC,UAAS,GAAC,aAAY,GACxC,mBAAC,OAAI,UAAWh5C,GAAO,MACrB,mBAAC,OAAI,UAAWA,GAAO,eAAiB,SAAA+4C,EAAA,CAAS,EACnD,EACF,GACF,KAfE,OAACC,EAAA,GAAU,CAAC,QAAO,GAAC,aAAY,GAAC,UAAS,GACxC,mBAAC,OAAI,UAAWh5C,GAAO,UAAY,SAAA+4C,EAAA,CAAS,EAC9C,CAeN,CACA,WAAe,QAAKT,CAAkB,EACtCA,EAAmB,YAAc,qBCvFjC,MAAMW,EAAiB,CACrB,QAAS,OAAM,KAAE,0CAA2C,wCAAyC,CAAE,IAAK,KAAM,CAAC,EACnH,MAAO,OAAM,KAAE,wCAAyC,4BAA6B,CACvF,EAEaC,EAAoBj6C,IAAiB,CAChD,KAAM,CACJ,MAAAhJ,GACA,aAAAkjD,GAAe,GACf,SAAA1rC,GACA,QAAS2rC,GACT,WAAAf,GACA,qBAAAvB,GACA,QAAAuC,GACA,UAAAC,EACF,EAAIr6C,GACE,CAACs6C,GAAWC,EAAO,EAAIC,GAAaxjD,GAAM,IAAI,KAAMA,GAAM,IAAI,GAAIwX,EAAQ,EAC1E+T,MAAQ,MAAW,CAAS,EAE5B,CAAC0F,GAAMwyB,EAAO,KAAI,YAAqBH,EAAS,EAChD,CAACtyB,GAAI0yB,EAAK,KAAI,YAAqBH,EAAO,EAC1C,CAACt6C,GAAQ06C,EAAO,KAAI,YAAS,EAAK,EAElCC,MAAc,SAAM,EACpBC,MAAY,SAAM,KAGxB,aAAU,IAAM,CACd,KAAM,CAACP,GAAWC,EAAO,EAAIC,GAAaxjD,GAAM,IAAI,KAAMA,GAAM,IAAI,GAAIwX,EAAQ,EAChFisC,GAAQH,EAAS,EACjBI,GAAMH,EAAO,CACf,EAAG,CAACvjD,GAAM,IAAI,KAAMA,GAAM,IAAI,GAAIwX,EAAQ,CAAC,EAE3C,MAAMssC,MAAS,eACZh3C,IAAkC,CACjCA,GAAM,eAAe,EACrB62C,GAAQ,EAAI,CACd,EACA,CAACA,EAAO,CACV,EAEM1B,MAAU,eAAY,IAAM,CAChC,GAAIjxB,GAAG,SAAWC,GAAK,QACrB,OAGF,MAAM8yB,GAAoB,CAAE,KAAM9yB,GAAK,MAAO,GAAID,GAAG,KAAM,EACrD1U,GAAY,oBAA4BynC,GAAKvsC,GAAUqpC,GAAsBmD,EAAA,CAAY,EAE/Fb,GAAiB7mC,EAAS,CAC5B,EAAG,CAAC2U,GAAK,QAASA,GAAK,MAAOkyB,GAAkB3rC,GAAUwZ,GAAG,QAASA,GAAG,MAAO6vB,EAAoB,CAAC,EAE/FjhD,MAAW,eACf,CAACqxB,GAAyBD,KAA0B,CAClD,KAAM,CAACsyB,GAAWC,EAAO,EAAIC,GAAavyB,GAAMD,GAAIxZ,EAAQ,EAC5DisC,GAAQH,EAAS,EACjBI,GAAMH,EAAO,CACf,EACA,CAAC/rC,EAAQ,CACX,EAEMysC,GAAiBn3C,IAAiD,CAClEA,GAAM,MAAQ,SAChBm1C,GAAQ,CAEZ,EAEMiC,GAAS,IAAM,CACnB,MAAMC,GAA0BnkD,GAAM,IAChCokD,GAAmB,qBAA6BD,EAAS,EAC/D,UAAU,UAAU,UAAU,KAAK,UAAUC,EAAgB,CAAC,CAChE,EAEMC,GAAU,SAAY,CAC1B,MAAMN,GAAM,MAAM,UAAU,UAAU,SAAS,EAC/C,IAAI31C,GAEJ,GAAI,CACFA,GAAQ,KAAK,MAAM21C,EAAG,CACxB,MAAgB,CACVX,IACFA,GAAQW,EAAG,EAEb,MACF,CAEA,KAAM,CAACT,GAAWC,EAAO,EAAIC,GAAap1C,GAAM,KAAMA,GAAM,GAAIoJ,EAAQ,EACxEisC,GAAQH,EAAS,EACjBI,GAAMH,EAAO,CACf,EAEMe,GAAa,oBAA4B,CAAE,KAAM,SAAU,GAAI,QAAS,EAAG9sC,GAAUqpC,EAAoB,EAEzG0D,MACJ,OAAC,OAAI,UAAWh5B,GAAM,QACnB,oBAAmBvrB,EAAK,KACvB,OAAC4M,EAAA,GACC,WAAS,KAAE,wCAAyC,iCAAkC,CACpF,KAAM03C,GAAW,KAAK,OAAO,QAAQ,EACrC,GAAIA,GAAW,GAAG,OAAO,QAAQ,CACnC,CAAC,EAED,mBAACp7C,EAAA,EAAI,CAAC,KAAK,aAAc,GAC3B,EACE,KACN,EAGIuF,MACJ,OAACO,EAAA,IACC,gBAAY,KAAE,gDAAiD,eAAe,EAC9E,cAAa2D,EAAA,GAAU,WAAW,WAAW,SAAS,WACtD,KAAK,eACL,QAAQ,YACR,KAAK,SACL,QAASmxC,EAAA,CACX,EAGF,SACE,QAAC,OACC,qBAAC,OAAI,UAAWv4B,GAAM,eACpB,oBAACla,EAAA,GACC,SAAO,KAAE,uCAAwC,MAAM,EACvD,QAAS4f,GAAK,QACd,MAAOA,GAAK,aAEZ,mBAACuzB,EAAA,GACC,GAAIZ,GACJ,QAAU92C,IAAUA,GAAM,gBAAgB,EAC1C,SAAWA,IAAUlN,GAASkN,GAAM,cAAc,MAAOkkB,GAAG,KAAK,EACjE,WAAYviB,GACZ,UAAWw1C,GACX,cAAatxC,EAAA,GAAU,WAAW,WAAW,UAC7C,MAAOse,GAAK,MACd,EACF,EACCszB,EAAA,EACH,KACA,QAAC,OAAI,UAAWh5B,GAAM,eACpB,oBAACla,EAAA,EAAK,CAAC,SAAO,KAAE,qCAAsC,IAAI,EAAG,QAAS2f,GAAG,QAAS,MAAOA,GAAG,aAC1F,mBAACwzB,EAAA,GACC,GAAIX,GACJ,QAAU/2C,IAAUA,GAAM,gBAAgB,EAC1C,SAAWA,IAAUlN,GAASqxB,GAAK,MAAOnkB,GAAM,cAAc,KAAK,EACnE,WAAY2B,GACZ,UAAWw1C,GACX,cAAatxC,EAAA,GAAU,WAAW,WAAW,QAC7C,MAAOqe,GAAG,MACZ,EACF,EACCuzB,EAAA,EACH,KACA,QAAC,OAAI,UAAWh5B,GAAM,iBACpB,oBAACvc,EAAA,IACC,cAAa2D,EAAA,GAAU,WAAW,WAAW,cAC7C,KAAK,OACL,QAAQ,YACR,WAAS,KAAE,sCAAuC,8BAA8B,EAChF,KAAK,SACL,QAASuxC,EAAA,CACX,KACA,OAACl1C,EAAA,IACC,cAAa2D,EAAA,GAAU,WAAW,WAAW,eAC7C,KAAK,gBACL,QAAQ,YACR,WAAS,KAAE,uCAAwC,kBAAkB,EACrE,KAAK,SACL,QAAS0xC,EAAA,CACX,KACA,OAACr1C,EAAA,GAAM,CAAC,cAAa2D,EAAA,GAAU,WAAW,WAAW,eAAgB,KAAK,SAAS,QAASsvC,GAC1F,mBAAC,KAAK,CAAC,QAAQ,yCAAyC,4BAAgB,EAC1E,GACF,KAEA,OAAC,GACC,aAAAiB,GACA,OAAAj6C,GACA,QAAM,KAAcgoB,GAAK,MAAO,CAAE,SAAAzZ,EAAS,CAAC,EAC5C,MAAI,KAAcwZ,GAAG,MAAO,CAAE,SAAAxZ,EAAS,CAAC,EACxC,QAAAyqC,GACA,QAAS,IAAM0B,GAAQ,EAAK,EAC5B,SAAA/jD,GACA,SAAA4X,GACA,WAAA4qC,GACA,UAAAiB,EAAA,CACF,GACF,CAEJ,EAEA,SAASoB,GAAexzB,GAAcD,GAAY0zB,GAA4B,CAC5E,MAAMX,GAAoB,CAAE,KAAA9yB,GAAM,GAAAD,EAAG,EAC/B1U,GAAY,oBAA4BynC,GAAKW,GAAU,OAAWV,EAAA,CAAY,EAGpF,MAAO,EAFO1nC,GAAU,KAAK,OAAOA,GAAU,EAAE,GAAKA,GAAU,KAAK,SAASA,GAAU,EAAE,EAG3F,CAEA,SAASknC,GACPmB,GACAC,GACAptC,GAC0B,CAC1B,MAAM8rC,GAAYuB,GAAcF,GAASntC,EAAQ,EAC3C+rC,GAAUsB,GAAcD,GAAOptC,EAAQ,EACvCstC,GAAc,IAAC,KAAQxB,GAAW,GAAO9rC,EAAQ,EACjDutC,GAAY,IAAC,KAAQxB,GAAS,GAAM/rC,EAAQ,EAE5CwtC,GAAeP,GAAenB,GAAWC,GAAS/rC,EAAQ,GAAK,CAACutC,GAEtE,MAAO,CACL,CACE,MAAOzB,GACP,QAASwB,IAAeE,GACxB,aAAcA,IAAgB,CAACF,GAAc9B,EAAe,MAAM,EAAIA,EAAe,QAAQ,CAC/F,EACA,CAAE,MAAOO,GAAS,QAASwB,GAAW,aAAc/B,EAAe,QAAQ,CAAE,CAC/E,CACF,CAEA,SAAS6B,GAAc7kD,GAA0BwX,GAA6B,CAC5E,MAAI,MAAWxX,EAAK,EAClB,SAAO,MAAeA,GAAO,CAAE,SAAAwX,GAAU,OAAQwsC,EAAA,CAAa,CAAC,EAGjE,GAAIhkD,GAAM,SAAS,GAAG,EAAG,CACvB,MAAMilD,MAAK,KAAcjlD,EAAK,EAC9B,SAAO,MAAeilD,GAAI,CAAE,SAAAztC,GAAU,OAAQwsC,EAAA,CAAa,CAAC,CAC9D,CAEA,OAAOhkD,EACT,CAEA,SAAS,EAAUmI,GAAsB,CACvC,MAAO,CACL,kBAAgB,OAAI,CAClB,QAAS,MACX,CAAC,EACD,oBAAkB,OAAI,CACpB,QAAS,OACT,IAAKA,GAAM,QAAQ,EAAG,EACtB,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,WAAS,OAAI,CACX,YAAaA,GAAM,QAAQ,CAAC,EAC5B,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,CACH,CACF,C,4BCjSO,MAAM+8C,GAAuB,CAACv7C,GAAoB6N,KAChD,oBAA4B,CAAE,KAAM7N,GAAO,KAAM,GAAIA,GAAO,EAAG,EAAG6N,GAAU,OAAWwsC,EAAA,CAAY,EAM/FmB,GAAuB,CAAC/2C,GAAkBoJ,KAAoC,CACzF,MAAMyZ,MAAO,MAAe7iB,GAAM,KAAM,CAAE,SAAAoJ,GAAU,OAAQwsC,EAAA,CAAa,CAAC,EACpEhzB,MAAK,MAAe5iB,GAAM,GAAI,CAAE,SAAAoJ,GAAU,OAAQwsC,EAAA,CAAa,CAAC,EAEtE,IAAIhsC,GAAU,GAAGiZ,EAAI,OAAOD,EAAE,GAE9B,SAAI,MAAiB,wBAAwB,IAC3ChZ,GAAU,oBAA4B5J,GAAOoJ,EAAQ,GAGhD,CACL,KAAAyZ,GACA,GAAAD,GACA,QAAAhZ,EACF,CACF,ECkBaotC,GAAmCp8C,IAA+B,CAC7E,KAAM,CACJ,aAAAq8C,GAAe,CAAC,EAChB,WAAAjD,GACA,aAAAc,GACA,gBAAAoC,GACA,SAAA9tC,GACA,qBAAAqpC,GACA,MAAA7gD,GACA,SAAAJ,GACA,QAAAwvB,GACA,YAAAm2B,GACA,UAAA/6C,GACA,aAAAg7C,GACA,iBAAA1E,GACA,6BAAAC,EACF,EAAI/3C,GACEy8C,GAAiB,CAACr2B,IAAS,OAC3Bs2B,GACHxC,IAAgBqC,IAAiB,CAACrC,KAAkBqC,IAAe,CAACE,IAAmB,CAACH,IACrFv7C,MAAS,MAAW,GAAWq4C,GAAYkD,GAAiBI,GAAiBxC,EAAY,EACzFyC,GAAiBC,GAAoBx2B,GAAS5X,EAAQ,EACtDquC,GAAaC,GAAc9lD,GAAM,IAAKqlD,EAAY,EAClD,CAACU,GAAYC,EAAc,KAAI,YAAS,EAAE,EAE1CC,GAAuBZ,GAAa,OAAQplD,IAAMA,GAAE,QAAQ,YAAY,EAAE,SAAS8lD,GAAW,YAAY,CAAC,CAAC,EAE5GG,GAAsBL,IACnBjmD,GAASslD,GAAqBW,EAAU,CAAC,EAGlD,SACE,QAAC,OAAI,GAAG,oBAAoB,aAAW,MAAG97C,GAAO,UAAWS,EAAS,EACnE,qBAAC,OAAI,UAAWT,GAAO,KACnB,YAACm5C,IAAgB,CAACoC,QAClB,QAAC,OAAI,UAAWv7C,GAAO,UACrB,oBAAC,OAAI,UAAWA,GAAO,gBACrB,mBAACo8C,EAAA,GACC,MAAO,EACP,MAAOJ,GACP,SAAUC,GACV,eAAa,KAAE,yCAA0C,qBAAqB,EAChF,EACF,KACA,QAAC,OAAI,UAAWj8C,GAAO,cACpB,WAACm5C,OAAgB,OAACkD,GAAA,CAAkB,GAAGp9C,GAAO,eAAA28C,EAAA,CAAgC,EAC9E,CAACL,OACA,OAACe,GAAA,EAAa,CAAC,QAASJ,GAAsB,SAAUC,GAAoB,MAAOL,EAAA,CAAY,GAEnG,GACF,EAED3C,OACC,OAAC,OAAI,UAAWn5C,GAAO,SACrB,mBAACu8C,GAAA,CAAgB,GAAGt9C,GAAO,eAAA28C,EAAA,CAAgC,EAC7D,GAEJ,EACC,CAACH,IAAgBtC,OAChB,OAACtC,EAAA,CACC,SAAAppC,GACA,qBAAAqpC,GACA,iBAAAC,GACA,6BAAAC,EAAA,CACF,GAEJ,CAEJ,EAEawF,GAAqBv9C,IAAiB,CACjD,KAAM,CAAE,cAAAw9C,EAAc,EAAIx9C,GACpBb,MAAQ,MAAU,EAClB+6C,IAAgBsD,IAAiB,OAAO,aAAer+C,GAAM,YAAY,OAAO,GACtF,SAAO,OAACi9C,GAAA,CAAiC,GAAGp8C,GAAO,aAAAk6C,EAAA,CAA4B,CACjF,EAEMkD,GAAoBp9C,IAAqB,CAC7C,KAAM,CAAE,MAAAhJ,GAAO,gBAAAslD,GAAiB,SAAA1lD,GAAU,SAAA4X,GAAU,eAAAmuC,GAAiB,CAAC,EAAG,YAAAJ,GAAa,QAAAnC,GAAS,UAAAC,EAAU,EAAIr6C,GACvGe,MAAS,MAAW08C,EAAqB,EACzCC,MAAa,MAAW1mD,GAAM,IAAI,IAAI,MAAK,MAAWA,GAAM,IAAI,EAAE,EAClE,CAAC2mD,GAAeC,EAAgB,KAAI,YAAS,CAACF,EAAU,EACxDG,GAAYvB,GAAkB,GAAQqB,GAEtCT,GAAsBL,IACnBjmD,GAASslD,GAAqBW,GAAYruC,EAAQ,CAAC,EAG5D,SACE,QAAC,YACC,oBAAC,OAAI,UAAWzN,GAAO,OACrB,oBAAC,UACC,KAAM,SACN,UAAWA,GAAO,aAClB,QAAS,IAAM,CACRu7C,IACHsB,GAAiB,CAACC,EAAS,CAE/B,EACA,cAAal0C,EAAA,GAAU,WAAW,WAAW,uBAC7C,gBAAe,CAACk0C,GAChB,gBAAc,qBAEd,oBAAC1E,EAAA,EAAe,CACd,mBAAC,KAAK,CAAC,QAAQ,6BAA6B,+BAAmB,EACjE,EACC,CAACmD,OAAmB,OAACp8C,EAAA,EAAI,CAAC,KAAO29C,GAAyB,aAAb,UAAa,CAAc,GAC3E,EACF,EACC,CAACA,OACA,QAAC,OAAI,UAAW98C,GAAO,KAAM,GAAG,qBAC9B,oBAAC,OAAI,UAAWA,GAAO,KACrB,mBAACk5C,EAAA,CACC,MAAAjjD,GACA,QAASJ,GACT,SAAA4X,GACA,aAAc,GACd,QAAA4rC,GACA,UAAAC,EAAA,CACF,EACF,EACCkC,OACC,OAACc,GAAA,GACC,SAAO,KAAE,oCAAqC,+BAA+B,EAC7E,QAASV,GACT,SAAUO,GACV,iBAAkB,KACpB,GAEJ,GAEJ,CAEJ,EAEMI,GAAkBt9C,IAAqB,CAC3C,KAAM,CAAE,SAAApJ,GAAU,MAAAI,GAAO,SAAAwX,GAAU,qBAAAqpC,GAAsB,WAAAuB,GAAY,eAAAuD,GAAgB,QAAAvC,GAAS,UAAAC,EAAU,EAAIr6C,GACtGe,MAAS,MAAW+8C,GAAqB99C,GAAM,eAAe,EAC9Dk9C,GAAsBL,IACnBjmD,GAASslD,GAAqBW,GAAYruC,EAAQ,CAAC,EAG5D,SACE,oBACE,qBAAC,OAAI,UAAWzN,GAAO,UACrB,oBAAC,OAAI,UAAWA,GAAO,MAAO,cAAa4I,EAAA,GAAU,WAAW,WAAW,uBACzE,mBAACwvC,EAAA,EAAe,CACd,mBAAC,KAAK,CAAC,QAAQ,6BAA6B,+BAAmB,EACjE,EACF,KACA,OAACc,EAAA,CACC,MAAAjjD,GACA,SAAAwX,GACA,qBAAAqpC,GACA,QAASjhD,GACT,aAAc,GACd,WAAAwiD,GACA,QAAAgB,GACA,UAAAC,EAAA,CACF,GACF,EACCr6C,GAAM,gBACL,OAAC,OAAI,UAAWe,GAAO,OACrB,mBAACs8C,GAAA,GACC,SAAO,KAAE,oCAAqC,+BAA+B,EAC7E,QAASV,IAAkB,CAAC,EAC5B,SAAUO,GACV,oBAAkB,OAACa,GAAA,EAAgB,EACrC,EACF,GAEJ,CAEJ,EAEMA,MAAkB,QAAK,IAAM,CACjC,MAAMh9C,MAAS,MAAWi9C,EAAkB,EACtCC,MAAsB,KAC1B,6CACA,6IACF,EAEA,SACE,QAAC,OAAI,UAAWl9C,GAAO,UACrB,oBAAC,OACC,mBAAC,QAAM,SAAAk9C,EAAA,CAAoB,EAC7B,KACA,OAAC,KAAK,CAAC,QAAQ,6CACb,oBAAC,OACC,oBAACC,EAAA,EAAQ,CAAC,KAAK,yEAAyE,SAAQ,GAAC,kCAEjG,KACA,OAAC,QAAK,oEAAwD,GAChE,EACF,GACF,CAEJ,CAAC,EAED,SAAStB,GAAoBxqC,GAAsB5D,GAAmC,CACpF,MAAI,CAAC,MAAM,QAAQ4D,EAAM,GAAKA,GAAO,SAAW,EACvC,CAAC,EAGHA,GAAO,IAAKhN,IAAU+2C,GAAqB/2C,GAAOoJ,EAAQ,CAAC,CACpE,CAEAuvC,GAAgB,YAAc,kBAE9B,MAAMjB,GAAgB,CAAC/B,GAAmBsB,QACjC,WAAQ,IAAM,CACnB,GAAK,sBAA8BtB,EAAG,EAGtC,OAAOsB,GAAa,KAAM17C,IACjBA,GAAO,OAASo6C,GAAI,MAAQp6C,GAAO,KAAOo6C,GAAI,EACtD,CACH,EAAG,CAACA,GAAKsB,EAAY,CAAC,EAGlB,GAAY,CAChBl9C,GACAi6C,GACAkD,GACAI,GACAxC,MACI,CACJ,aAAW,OAAI,CACb,WAAY/6C,GAAM,OAAO,WAAW,SACpC,UAAWA,GAAM,QAAQ,GACzB,MAAO,GAAG+6C,GAAe,QAAU,OAAO,GAC1C,aAAc/6C,GAAM,MAAM,OAAO,QACjC,OAAQ,aAAaA,GAAM,OAAO,OAAO,IAAI,GAC7C,CAAC,GAAGi6C,GAAa,OAAS,OAAO,EAAE,EAAG,EACtC,QAAS,OACT,cAAe,QACjB,CAAC,EACD,QAAM,OAAI,CACR,QAAS,OACT,cAAe,cACf,OAAQ,GAAGsD,GAAkB,QAAU,OAAO,GAC9C,UAAW,OACb,CAAC,EACD,YAAU,OAAI,CACZ,QAAS,OACT,cAAe,SACf,YAAa,GAAGtD,GAAa,OAAS,aAAaj6C,GAAM,OAAO,OAAO,IAAI,EAAE,GAC7E,MAAO,GAAIm9C,GAA0B,OAAR,KAAc,GAC3C,SAAU,OACV,eAAgB,OAChB,MAAOlD,GAAa,EAAI,CAC1B,CAAC,EACD,aAAW,OAAI,CACb,MAAO,GAAGc,GAAe,MAAQ,MAAM,eACvC,YAAad,GAAa,aAAaj6C,GAAM,OAAO,OAAO,IAAI,GAAK,OACpE,QAAS,OACT,cAAe,QACjB,CAAC,EACD,mBAAiB,OAAI,CACnB,QAASA,GAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,WAAS,OAAI,CACX,UAAW,MACb,CAAC,EACD,iBAAe,OAAI,CACjB,UAAW,OACX,eAAgB,MAClB,CAAC,CACH,GAEMs+C,GAAyBt+C,KAA0B,CACvD,UAAQ,OAAI,CACV,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,WAAY,SACZ,aAAc,aAAaA,GAAM,OAAO,OAAO,IAAI,GACnD,QAAS,iBACX,CAAC,EACD,gBAAc,OAAI,CAChB,gBAAiB,cACjB,OAAQ,OACR,QAAS,OACT,MAAO,OAEP,qBAAmB,kBAAeA,EAAK,CACzC,CAAC,EACD,QAAM,OAAI,CACR,aAAc,aAAaA,GAAM,OAAO,OAAO,IAAI,EACrD,CAAC,EACD,QAAM,OAAI,CACR,QAAS,iBACX,CAAC,CACH,GAEM2+C,GAAsB,CAAC3+C,GAAsBm9C,MAA+B,CAChF,aAAW,OAAI,CACb,WAAY,MACZ,YAAa,OACb,aAAeA,GAA0B,OAAR,KACnC,CAAC,EACD,SAAO,OAAI,CACT,aAAc,MAChB,CAAC,EACD,UAAQ,OAAI,CACV,SAAU,EACV,QAAS,OACT,cAAe,SACf,eAAgB,WAChB,WAAYn9C,GAAM,QAAQ,CAAC,CAC7B,CAAC,CACH,GAEM6+C,GAAsB7+C,KAA0B,CACpD,aAAW,OAAI,CACb,QAAS,OACT,OAAQ,OAER,UAAW,CACT,SAAU,MACZ,CACF,CAAC,CACH,E,qFC3WA,MAAMg/C,EAAW,IAQjB,MAAMC,CAAU,CAAhB,cACE,eAA4B,CAAC,EAE7B,YAAS,EACT,eAAY,IACZ,QAAK,IAAI,IAAgB,EAAI,EAC7B,gBAAa,KAAK,IAAI,EAEtB,YAAS,GAET,oBAAiB,EA8CjB,aAAU,IAAM,CACd,MAAMC,EAAM,KAAK,IAAI,EACrB,KAAK,QAAUA,EAAM,KAAK,YAAcF,EAExC,MAAMG,EAAQ,KAAK,GAAG,SAAS,EACzBC,EAAQ,KAAK,QAAU,KAAK,UAOlC,GANID,IAAUC,GACZ,KAAK,GAAG,KAAKA,CAAK,EAEpB,KAAK,WAAaF,EAGd,KAAK,QAAU,KAAK,GAAG,SAAS,GAAK,KAAK,UAAW,CAEvD,IAAIG,EACJ,UAAWC,KAAY,KAAK,UAAW,CACrC,GAAI,CAACA,EAAS,MAAM,MAAM,SACxB,SAIF,GADgBJ,EAAMI,EAAS,MAChBA,EAAS,WAAY,CAClC,GAAI,CAACD,EAAI,CACP,KAAM,CAAE,IAAAzD,CAAI,EAAI,KAAK,UACrByD,EAAK,CACH,IAAAzD,EACA,QAAM,MAASsD,EAAM,KAAK,cAAc,EACxC,MAAI,MAASA,CAAG,CAClB,CACF,CACAI,EAAS,MAAM,gBAAgBD,CAAE,EACjCC,EAAS,KAAOJ,CAClB,CACF,CACF,CACF,EA9EA,iBAAiB9hD,EAAe,CAI9B,GAHA,KAAK,UAAYA,EACjB,KAAK,OAASA,GAAG,KAAK,KAAO,MAEzB,KAAK,OAAQ,CACf,MAAM0rB,EAAO,QAAe1rB,EAAG,IAAI,KAAM,EAAK,GAAG,QAAQ,EACnDyrB,EAAK,QAAezrB,EAAG,IAAI,GAAI,EAAI,GAAG,QAAQ,EACpD,KAAK,eAAiByrB,EAAKC,EAE3B,UAAWw2B,KAAY,KAAK,UAC1BA,EAAS,WAAaC,EAAqB,KAAK,eAAgBD,EAAS,MAAM,MAAM,KAAK,CAE9F,CACF,CAEA,OAAOpkD,EAA0B,CAC/B,KAAK,UAAU,KAAK,CAClB,KAAM,KAAK,WACX,MAAAA,EACA,WAAYqkD,EACV,IACArkD,EAAM,MAAM,KACd,CACF,CAAC,CACH,CAEA,OAAOA,EAA0B,CAC/B,KAAK,UAAY,KAAK,UAAU,OAAQkC,GAAMA,EAAE,QAAUlC,CAAK,CACjE,CAEA,eAAeA,EAA0B,CACvC,GAAI,GAAC,KAAK,WAAa,CAAC,KAAK,SAG7B,UAAWokD,KAAY,KAAK,UAC1B,GAAIA,EAAS,QAAUpkD,EAAO,CAC5BokD,EAAS,WAAaC,EAAqB,KAAK,eAAgBD,EAAS,MAAM,MAAM,KAAK,EAC1F,MACF,EAEJ,CAuCF,CAEA,MAAME,EAAY,IAAS,IAEpB,SAASD,EAAqBE,EAAergD,EAAuB,CACzE,MAAMsgD,EAAiB,KAAK,KAAKD,EAAQrgD,EAAQ,GAAG,EAAI,IACxD,OAAIsgD,EAAiBF,EACZA,EAEFE,CACT,CAEO,MAAMC,EAAY,IAAIV,EAC7B,YAAYU,EAAU,QAASX,CAAQ,C,0ECpHvC,MAAMY,EAAyB,kCAKzBC,EAAiBC,GACd,GAAGF,CAAsB,IAAIE,CAAc,GAMvCC,EAAgB,IAAM,CACjC,MAAMC,KAAgB,eAAaF,GAA2D,CAC5F,GAAI,CAACA,EACH,OAEF,MAAMvgC,EAAMsgC,EAAcC,CAAc,EACxC,OAAO,IAAM,IAAIvgC,CAAG,GAAK,MAC3B,EAAG,CAAC,CAAC,EAEC0gC,KAAgB,eAAY,CAACH,EAAoCI,IAA+B,CACpG,GAAI,CAACJ,GAAkB,CAACI,EACtB,OAEF,MAAM3gC,EAAMsgC,EAAcC,CAAc,EACxC,IAAM,IAAIvgC,EAAK2gC,CAAM,CACvB,EAAG,CAAC,CAAC,EAEL,MAAO,CAAE,cAAAF,EAAe,cAAAC,CAAc,CACxC,C,oRCjBO,SAASE,EAAsB,CACpC,MAAAC,EAAQ,CAAC,EACT,OAAAC,EAAS,CAAC,EACV,SAAAn5B,EAAW,CAAC,EACZ,YAAAo5B,EAAc,CAAC,EACf,aAAcC,CAChB,EAMoB,CAClB,MAAMC,GAAkC,CAAC,EACnCC,EAAkBC,EAAsBH,CAAM,EAE9CI,GAAY,IAAI,IAAYN,GAAQ,IAAKxL,GAAWA,EAAO,IAAI,CAAC,EAChE+L,GAAW,IAAI,IAAyBR,EAAM,IAAKvL,GAAW,CAACA,EAAO,GAAIA,CAAM,CAAC,CAAC,EAClFgM,EAAe,IAAI,IAA4B35B,GAAU,IAAK2tB,GAAW,CAACA,EAAO,WAAYA,CAAM,CAAC,CAAC,EACrGiM,EAAiB,IAAI,IAAYR,GAAa,IAAKzL,GAAWA,EAAO,IAAI,CAAC,EAGhF,OAAAuL,EAAM,QAASW,GAAgB,CAC7B,MAAMx4C,EAAQk4C,EAAgBM,EAAY,EAAE,EAE5C,GAAI,CAACJ,GAAU,IAAII,EAAY,EAAE,EAAG,CAClC,IAAIC,GAAgBC,EAAoBF,EAAa,OAAWx4C,CAAK,EACjE,IAAO,mCACTy4C,GAAgBE,EACdF,GACAH,EACAC,EAAe,IAAIC,EAAY,EAAE,EACjCH,GAAS,IAAIG,EAAY,EAAE,CAC7B,GAEFP,GAAe,KAAKQ,EAAa,CACnC,CACF,CAAC,EAGDX,EAAO,QAASc,GAAiB,CAC/B,MAAMC,EAAmBR,GAAS,IAAIO,EAAa,IAAI,EACjD54C,GAAQk4C,EAAgBU,EAAa,IAAI,EAG/C,GAAI,EAFeA,EAAa,SAAW,KAAmB,YAAc,CAACC,GAE5D,CACf,IAAIJ,GAAgBC,EAAoBG,EAAkBD,EAAc54C,EAAK,EACzE,IAAO,mCACTy4C,GAAgBE,EACdF,GACAH,EACAC,EAAe,IAAIK,EAAa,IAAI,EACpCP,GAAS,IAAIO,EAAa,IAAI,CAChC,GAEFX,GAAe,KAAKQ,EAAa,CACnC,CACF,CAAC,EAEMR,EACT,CAEO,SAASS,EAAoBb,EAAqBC,EAAuB93C,EAAoC,CAClH,MAAI,CAAC63C,GAASC,EACLgB,EAAmBhB,EAAQ93C,CAAK,EAGrC63C,GAAS,CAACC,EACLiB,EAAkBlB,EAAO73C,CAAK,EAGhCg5C,EAAmBnB,EAAOC,EAAQ93C,CAAK,CAChD,CAEO,SAAS84C,EAAmBxM,EAAsBtsC,EAAoC,CAC3F,KAAM,CACJ,KAAA0F,EACA,KAAMiX,EACN,YAAA0iB,EACA,QAAA8E,GACA,QAAA8U,EACA,WAAAC,GACA,UAAAC,GACA,SAAAC,EACA,UAAAC,EACA,UAAWC,EACX,OAAAxkB,EACA,gBAAAykB,GACA,SAAAC,GACA,cAAAC,GACA,qBAAAC,EACA,uBAAAC,GACA,IAAA5xB,EACF,EAAIukB,EAEEvyC,GAAa,CAAC,CAACiG,EACrB,MAAO,CACL,YAAAq/B,EACA,UAAA8Z,GACA,GAAAx8B,EACA,KAAM,CACJ,MAAO,CACL,MAAO,GAAG,IAAO,SAAS,qBAAqBA,CAAE,aAAawnB,EAAO,eACrE,MAAO,GAAG,IAAO,SAAS,qBAAqBxnB,CAAE,aAAawnB,EAAO,cACvE,EACA,SAAAqV,EACF,EACA,KAAA9zC,EACA,QAAAuzC,EACA,WAAAC,GACA,YAAAI,EACA,UAAWM,EAAmB,CAAE,OAAQtN,EAAQ,MAAAtsC,CAAM,CAAC,EACvD,cAAey5C,IAAiBC,GAAwB,OACxD,aAAcC,GACd,UAAAN,EACA,UAAW,GACX,YAAa,GACb,YAAat/C,GACb,WAAAA,GACA,UAAW8/C,EAAgBl9B,CAAE,EAC7B,eAAgBm9B,EAAqBn9B,CAAE,EACvC,aAAcmY,IAAW,KAAmB,WAC5C,OAAQwX,EAAO,SACf,MAAO,GACP,aAAcxX,IAAW,KAAmB,WAC5C,KAAMskB,EACN,MAAOp5C,GAAO,UACd,gBAAAu5C,GACA,iBAAkBx/C,GAClB,cAAeuyC,EAAO,QACtB,IAAAvkB,EACF,CACF,CAEO,SAASgxB,EAAkBzM,EAAqBtsC,EAAoC,CACzF,KAAM,CACJ,KAAA0F,EACA,KAAM,CAAE,YAAA25B,EAAa,QAAA8E,EAAS,MAAA4V,GAAO,QAAAC,EAAS,OAAAC,GAAQ,SAAAT,EAAS,EAC/D,GAAA78B,EACA,IAAAu9B,EACA,KAAA9qD,EACA,UAAA+qD,EACA,aAAAC,GACA,cAAAX,GACA,UAAAY,GACA,cAAAC,EACA,gBAAAf,EACF,EAAIjN,EAEEvyC,GAAa,CAAC,CAACiG,EACrB,MAAO,CACL,YAAAq/B,EACA,UAAW,EACX,GAAA1iB,EACA,KAAM,CAAE,MAAAo9B,GAAO,SAAAP,EAAS,EACxB,KAAA9zC,EACA,QAASu0C,GAAO,KAChB,WAAY,EACZ,YAAa,GACb,UAAWL,EAAmB,CAAE,MAAOtN,EAAQ,MAAAtsC,CAAM,CAAC,EACtD,aAAAo6C,GACA,cAAAX,GACA,UAAWO,EACX,iBAAkB7V,EAClB,UAAAkW,GACA,YAAa,GACb,WAAAtgD,GACA,OAAQogD,IAAc,WACtB,YAAa,GACb,aAAc,GACd,MAAO,EAAQD,EACf,aAAc,GACd,UAAWL,EAAgBl9B,CAAE,EAC7B,eAAgBm9B,EAAqBn9B,CAAE,EACvC,KAAAvtB,EACA,MAAO4Q,GAAO,UACd,cAAAs6C,EACA,gBAAAf,GACA,iBAAkB,GAClB,IAAKjN,EAAO,IACZ,cAAeA,EAAO,aACxB,CACF,CAGO,SAAS0M,EAAmBnB,EAAqBC,EAAuB93C,EAAoC,CACjH,MAAMu6C,EAAmB1C,GAAO,KAAK,QAC/Bl7B,EAAKm7B,GAAQ,MAAQD,GAAO,IAAM,GAClCzoD,GAAOyoD,GAAO,MAAQC,GAAQ,SAC9B/9C,EAAa,CAAC,CAACiG,EACfw5C,GAAW1B,GAAQ,UAAYD,GAAO,KAAK,UAAY,CAAC,EAE9D,IAAIkC,GAAQ,CACV,MAAO,yBAAyB3qD,EAAI,OACpC,MAAO,yBAAyBA,EAAI,MACtC,EAEA,OAAI0oD,EACFiC,GAAQ,CACN,MAAO,GAAG,IAAO,SAAS,qBAAqBp9B,CAAE,aAAam7B,EAAO,OAAO,eAC5E,MAAO,GAAG,IAAO,SAAS,qBAAqBn7B,CAAE,aAAam7B,EAAO,OAAO,cAC9E,EACSD,GAASA,EAAM,KAAK,QAC7BkC,GAAQlC,EAAM,KAAK,OAGd,CACL,YAAaA,GAAO,KAAK,aAAeC,GAAQ,aAAe,GAC/D,UAAWA,GAAQ,WAAa,EAChC,UAAWD,GAAO,WAAa,GAC/B,GAAAl7B,EACA,KAAM,CACJ,MAAAo9B,GACA,SAAAP,EACF,EACA,OAAQ,GAAQ1B,GAAQ,UAAYD,GAAO,YAAc,KAAsB,UAC/E,MAAO,EAAQA,GAAO,IACtB,aAAcC,GAAQ,SAAW,KAAmB,WACpD,YAAa,EAAQD,GAAU99C,EAC/B,WAAAA,EACA,aAAc+9C,GAAQ,SAAW,KAAmB,WACpD,YAAa,GACb,UAAW+B,EAAgBl9B,CAAE,EAC7B,eAAgBm9B,EAAqBn9B,CAAE,EAEvC,KAAMm7B,GAAQ,MAAQD,GAAO,MAAQ,GAErC,QAASC,GAAQ,SAAWD,GAAO,KAAK,OAAO,MAAQ,GACvD,WAAYC,GAAQ,YAAc,EAClC,YAAaA,GAAQ,WAAa,GAClC,KAAA1oD,GACA,UAAWwqD,EAAmB,CAAE,MAAA/B,EAAO,OAAAC,EAAQ,MAAA93C,CAAM,CAAC,EACtD,aAAc63C,GAAO,cAAgBC,GAAQ,uBAC7C,cAAeD,GAAO,eAAiBC,GAAQ,sBAAwBA,GAAQ,eAAiB,OAEhG,UAAWA,GAAQ,WAAaD,GAAO,KAAK,SAAW,GACvD,iBAAA0C,EACA,MAAOv6C,GAAO,UAEd,cAAe63C,GAAO,cACtB,gBAAiBA,GAAO,iBAAmBC,GAAQ,gBACnD,iBAAkB,EAAQD,GAAU99C,EACpC,IAAK89C,GAAO,IACZ,cAAeA,GAAO,eAAiBC,GAAQ,SAAW,GAC1D,IAAKA,GAAQ,KAAO,EACtB,CACF,CAEO,MAAM0C,EAAyB5e,GAAqB,GAAG,IAAO,gBAAgB,GAAGA,CAAQ,GAEzF,IAAK6e,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,UAAY,YALFA,IAAAA,GAAA,IAQL,MAAMC,EAAc,CAACC,EAA0BC,IAAoB,CACxE,MAAMC,EAA8E,CAClF,QAAS,CAACvmC,EAAkB9e,IAAqB8e,EAAE,KAAK,cAAc9e,EAAE,IAAI,EAC5E,SAAU,CAAC8e,EAAkB9e,IAAqBA,EAAE,KAAK,cAAc8e,EAAE,IAAI,EAC7E,QAAS,CAACA,EAAkB9e,OAC1B,KAAcA,EAAE,SAAS,EAAE,QAAQ,KAAI,KAAc8e,EAAE,SAAS,EAAE,QAAQ,EAC5E,UAAW,CAACA,EAAkB9e,OAC5B,KAAcA,EAAE,WAAW,EAAE,QAAQ,KAAI,KAAc8e,EAAE,WAAW,EAAE,QAAQ,EAChF,UAAW,CAACA,EAAkB9e,IAAqBA,EAAE,UAAY8e,EAAE,SACrE,EAEA,OAAIumC,EAAQD,CAAM,EACTD,EAAQ,KAAKE,EAAQD,CAAM,CAAC,EAG9BD,CACT,EAEA,SAASxC,EAAsBH,EAAwB,CAAC,EAA4C,CAClG,OAAOA,EAAO,OAAgD,CAAC8C,EAAM96C,KACnE86C,EAAK96C,EAAM,QAAQ,EAAIA,EAChB86C,GACN,CAAC,CAAC,CACP,CAEA,SAASlB,EAAmB9mD,EAIF,CACxB,KAAM,CAAE,MAAAkN,EAAO,MAAA63C,EAAO,OAAAC,CAAO,EAAIhlD,EAEjC,GAAIkN,EACF,OAAQA,EAAM,UAAW,CACvB,KAAK,KAAgB,iBACnB,OAAO,KAAsB,QAC/B,KAAK,KAAgB,iBACnB,OAAO,KAAsB,QAC/B,KAAK,KAAgB,kBACnB,OAAO,KAAsB,QACjC,CAGF,OAAI63C,GAAO,UACFA,EAAM,UAGXC,GAAQ,eAAiBA,GAAQ,qBAC5B,KAAsB,MAGxB,KAAsB,OAC/B,CAEO,SAASiD,EAA2BC,EAAsD,CAC/F,GAAI,CAACA,EACH,OAEF,KAAM,CAACC,CAAM,EAAID,EAAS,OAAQnmD,GAAM,EAAQA,EAAE,YAAa,EAE/D,OAAOomD,CACT,CAEO,MAAMC,EAA2B,IAAM,IAAO,mBAExCC,EAA2B,CACtC7O,EACA8O,EACAC,IACG,CACH,MAAMC,EAAsB,IAAO,iCAC7BC,EAAgB,KAAW,cAAc,IAAoB,cAAc,EAC3EC,GAAe,EAAQH,EAC7B,OACE/O,EAAO,OAAS,KAAW,UAC1BA,EAAO,cAAgB,IAAC,KAAe,oBAAoB,GAC5DA,EAAO,OACN,CAACiP,GAAiB,CAACD,GACpB,CAAChP,EAAO,aACR,CAACkP,IACD,CAACJ,CAEL,EAEaK,EAAgCxpB,GAAmBypB,EAAoBzpB,EAAE,EAAE,EAE3E0pB,EAAiC1pB,GAAoBypB,EAAoBzpB,EAAE,IAAI,EAE5F,SAASypB,EAAoB/+B,EAAY,CACvC,KAAM,CAAE,2BAAAi/B,CAA2B,EAA8C,IAEjF,MAAO,CAACA,EAA2B,SAASj/B,CAAE,CAChD,CAEO,SAASk9B,EAAgBl9B,EAAY,CAC1C,KAAM,CAAE,4BAAAk/B,CAA4B,EAA+C,IAEnF,OAAOA,GAA6B,SAASl/B,CAAE,CACjD,CAEO,SAASm9B,EAAqBn9B,EAAsD,CACzF,KAAM,CAAE,iCAAAm/B,CAAiC,EAAI,IAEvCxP,EAASwP,GAAkC,KAAM7pB,GAAMA,EAAE,KAAOtV,CAAE,EACxE,MAAO,CAAE,MAAO,CAAC,CAAC2vB,GAAQ,GAAI,YAAa,CAAC,CAACA,GAAQ,OAAQ,CAC/D,CAEO,SAASyP,EAAkBlE,EAA8B,CAC9D,OAAeA,GAAO,YAAc,UACtC,CAEA,SAASmE,EAAMC,EAA6B,CAE1C,OADcA,EAAY,MAAM,KAAK,EACxB,CAAC,CAChB,CAEA,SAASC,EAA+BvB,EAAoC,CAC1E,OAAOA,EAAQ,OAAO,CAACxpB,EAAkB,CAAE,GAAAxU,EAAI,KAAAjX,EAAM,KAAAtW,EAAM,QAAA6pD,GAAS,KAAA9sB,CAAK,IAAqB,CAC5F,MAAMgwB,GAAoBhwB,EAAK,UAAU,KAAK,GAAG,EAAE,YAAY,EACzDiwB,GAAe,GAAGz/B,CAAE,MAAMjX,CAAI,MAAMtW,CAAI,MAAM6pD,EAAO,MAAMkD,EAAiB,GAClF,OAAAhrB,EAAO,KAAKirB,EAAY,EACjBjrB,CACT,EAAG,CAAC,CAAC,CACP,CACO,SAASkrB,EAAgB1B,EAA0BjzB,EAAe,CACvE,MAAM40B,EAAYJ,EAA+BvB,CAAO,EAExD,IAAI4B,EADK,IAAI,IAAO,CAAE,UAAW,EAAG,SAAU,CAAE,CAAC,EACnC,OAAOD,EAAW50B,CAAK,EACrC,OAAI60B,IAAS,KACJ,KAEFA,EAAK,IAAK5/B,IAAOq/B,EAAMM,EAAU3/B,EAAE,CAAC,CAAC,CAC9C,CAEA,SAAS6/B,EAAmBlQ,EAAuB,CACjD,MACE,EAAAA,EAAO,eACPA,EAAO,QACPA,EAAO,OAAS,KAAW,UAC3BA,EAAO,eAAe,aACtBA,EAAO,UAMX,CAEO,SAASmQ,EAAkBnQ,EAAuB,CAWvD,MAVI,GAACkQ,EAAmBlQ,CAAM,GAK1B,CAACA,EAAO,WAKRA,EAAO,uBAKb,CAEO,SAASoQ,EAA2BpQ,EAAuB,CAChE,MACE,IAACkQ,EAAmBlQ,CAAM,GACzBA,EAAO,cAAgB,IAAC,KAAe,oBAAoB,GAC5D,CAACA,EAAO,aACRA,EAAO,YACP,CAAC4O,EAAyB,EAM9B,CAEO,SAASyB,EAAoBxY,EAAmB,CACrD,OAAKA,EAIEA,EAAQ,kBAAoB,GAH1B,EAIX,CAEO,SAASyY,EAAwBtQ,EAAuB,CAC7D,OAAOA,EAAO,YAAcA,EAAO,QAAU,KAAgB,OAC/D,CAEO,SAASqM,EACdF,EACAoE,EACArR,EACAsR,EACA,CACA,MAAMC,EAAiBF,EAAY,IAAIpE,EAAc,EAAE,EAEvD,MAAO,CACL,GAAGA,EACH,iBAAkBA,EAAc,OAC5B,IACCoE,EAAY,IAAIpE,EAAc,EAAE,GAAKjN,IAAkBiN,EAAc,YAC1E,YAAaoE,EAAY,IAAIpE,EAAc,EAAE,GAAKA,EAAc,YAChE,uBACEoE,EAAY,IAAIpE,EAAc,EAAE,GAChCA,EAAc,WACdA,EAAc,mBAAqBsE,GAAgB,QACrD,UAAW,GAAQA,GAAgB,SAAWA,GAAgB,UAAYtE,EAAc,eACxF,2BAA4BqE,GAAY,CAACD,EAAY,IAAIpE,EAAc,EAAE,EACzE,cAAAjN,CACF,CACF,C,6KCrdO,MAAMvQ,UAA0C,IAAwD,CAWtG,YAAYlpB,EAA+C,CAChE,MAAMA,CAAK,EAHb,KAAgB,sBAAwB,6BAKtC,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CAdA,YAAc,UAAYirC,CAAA,CAE1B,YAAc,WAAmE,CAC/E,GAAI,oCACJ,KAAM,kBACN,YAAa,KAAK,WACpB,EAUQ,oBAAqB,CAC3B,KAAK,aAAch6B,GAAU,CACtBA,EAAM,UACT,KAAK,MAAM,IAAIA,EAAM,SAAS,CAAC,CAEnC,CAAC,EAED,KAAK,OAAO,EAEZ,KAAK,MAAM,IAAI,KAAW,aAAa,IAAI,EAAE,iBAAiB,IAAM,KAAK,OAAO,CAAC,CAAC,CACpF,CAEQ,QAAS,CACf,MAAMmO,EAAS,KAAK,UAAU,EAE9B,OAAIA,IAAW,KAAK,MAAM,SACxB,KAAK,SAAS,CAAE,GAAG,KAAK,MAAO,OAAAA,CAAO,CAAC,KACvC,MAAW,IAAI,GAGVA,CACT,CAEQ,WAAiC,CACvC,GAAI,CACF,GAAI,CAAC,KAAK,sBAAsB,KAAK,KAAK,MAAM,KAAK,EACnD,OAGF,MAAMslB,EAAW,oBAA4B,KAAK,MAAM,KAAK,EACvD7qC,EAAY,KAAW,aAAa,IAAI,EAE9C,OAAOA,EAAU,MAAM,MAAM,GAAG,KAAK,EAAIA,EAAU,MAAM,MAAM,KAAK,KAAK,GAAK6qC,CAChF,MAAQ,CACN,MACF,CACF,CAEO,YAAYnnD,EAAe,CAC5B,KAAK,MAAM,QAAUA,IACvB,KAAK,SAAS,CAAE,MAAAA,CAAM,CAAC,EACvB,KAAK,OAAO,EAEhB,CAEO,WAA0B,CAC/B,SAAO,OAAC,KAAK,UAAL,CAAe,MAAO,MAAW,KAAK,MAAM,GAAK,CAC3D,CAEO,WAAmD,CACxD,MAAO,CAAE,KAAM,oCAAqC,KAAM,CAAE,MAAO,KAAK,MAAM,KAAM,CAAE,CACxF,CAEA,OAAc,YAAYwwB,EAAiF,CACzG,OAAO,IAAImb,EAAkC,CAAE,MAAOnb,EAAM,KAAK,MAAO,OAAQ,MAAU,CAAC,CAC7F,CAEA,OAAc,aAAiD,CAC7D,OAAO,IAAImb,EAAkC,CAAE,MAAO,KAAM,OAAQ,MAAU,CAAC,CACjF,CACF,CAEA,SAAS+hB,EAA0C,CAAE,MAAAl9B,CAAM,EAA2D,CACpH,KAAM,CAAE,MAAAxwB,CAAM,EAAIwwB,EAAM,SAAS,EAC3B,CAACm9B,EAASC,CAAU,KAAI,YAASp9B,EAAM,sBAAsB,KAAKxwB,CAAK,CAAC,KAE9E,aAAU,IAAM4tD,EAAWp9B,EAAM,sBAAsB,KAAKxwB,CAAK,CAAC,EAAG,CAACwwB,EAAOxwB,CAAK,CAAC,EAEnF,MAAM6tD,KAAgB,WACpB,IAAM,CACJ,CACE,SAAO,KAAE,4EAA6E,oBAAqB,CACzG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,4EAA6E,oBAAqB,CACzG,MAAO,EACT,CAAC,EACD,MAAO,KACT,EACA,CACE,SAAO,KAAE,4EAA6E,oBAAqB,CACzG,MAAO,EACT,CAAC,EACD,MAAO,KACT,EACA,CACE,SAAO,KAAE,yEAA0E,iBAAkB,CACnG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,0EAA2E,kBAAmB,CACrG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,0EAA2E,kBAAmB,CACrG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,0EAA2E,kBAAmB,CACrG,MAAO,EACT,CAAC,EACD,MAAO,KACT,EACA,CACE,SAAO,KAAE,0EAA2E,kBAAmB,CACrG,MAAO,EACT,CAAC,EACD,MAAO,KACT,EACA,CACE,SAAO,KAAE,yEAA0E,iBAAkB,CACnG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,yEAA0E,iBAAkB,CACnG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,yEAA0E,iBAAkB,CACnG,MAAO,EACT,CAAC,EACD,MAAO,KACT,EACA,CACE,SAAO,KAAE,yEAA0E,iBAAkB,CACnG,MAAO,EACT,CAAC,EACD,MAAO,KACT,EACA,CACE,SAAO,KAAE,2EAA4E,mBAAoB,CACvG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,yEAA0E,iBAAkB,CACnG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,0EAA2E,kBAAmB,CACrG,MAAO,CACT,CAAC,EACD,MAAO,IACT,EACA,CACE,SAAO,KAAE,0EAA2E,kBAAmB,CACrG,MAAO,CACT,CAAC,EACD,MAAO,IACT,CACF,EACA,CAAC,CACH,EAEMrqD,KAAU,WAAQ,IAClBqqD,EAAc,KAAMlkD,GAAWA,EAAO,QAAU3J,CAAK,EAChD6tD,EAGF,CAAC,CAAE,MAAO7tD,EAAO,MAAAA,CAAM,EAAG,GAAG6tD,CAAa,EAChD,CAACA,EAAe7tD,CAAK,CAAC,EAEnBiR,KAAe,eAClBK,GAAiC,CAChC,KAAqB,KAAK,CACxB,eAAa,KAAE,8CAA+C,wBAAwB,EACtF,OAAQkf,EACR,QAAS,IAAMA,EAAM,YAAYlf,GAAY,EAAE,EAC/C,KAAM,IAAMkf,EAAM,YAAYxwB,CAAK,CACrC,CAAC,CACH,EACA,CAACwwB,EAAOxwB,CAAK,CACf,EAEA,SACE,OAAC,KACC,QAAM,KACJ,kEACA,iGACA,CAAE,QAAM,SAA6B,MAAcwwB,CAAK,CAAC,CAAE,CAC7D,EACA,kBAAmB,GACnB,MAAAA,EACA,SAAO,KAAE,mEAAoE,sBAAsB,EAEnG,mBAAC,KACC,QAAS,CAACm9B,EACV,SAAO,KAAE,6EAA8E,kBAAkB,EACzG,SAAQ,GAER,mBAAC,MACC,YAAa,GACb,iBAAgB,GAChB,eAAiB3tD,GAAUiR,EAAajR,CAAK,EAC7C,MAAAA,EACA,QAAAwD,EACA,SAAU,CAAC,CAAE,MAAAxD,CAAM,IAAMiR,EAAajR,CAAK,EAC7C,EACF,EACF,CAEJ,C,+KC5PO,MAAM8tD,EAAsB,KAAa,iBAAiB,CAC/D,UAAW,CACT,eAAiBC,GAAuB,CACtC,MAAMC,EAAgBD,EAAmB,MACpCC,IAILD,EAAmB,MAASE,GAAmB,CAExCA,EAAe,SAAS,WAC3BA,EAAe,SAAS,SAAW,CAAC,GAGtC,MAAMC,EAAWD,EAAe,SAAS,SACzC,MAAI,CAACC,EAAS,MAAQ,CAACA,EAAS,eAG9BA,EAAS,aAAe,MAEnBF,EAAcC,CAAc,CACrC,EACF,CACF,CACF,CAAC,E,oECPD,SAASE,GAAe,CACtB,MAAO,GAAG,OAAO,SAAS,QAAQ,KAAK,OAAO,SAAS,IAAI,GAAGznD,EAAA,EAAO,SAAS,EAChF,CAEO,SAAS0nD,EAAcC,EAAuB,CACnD,MAAM3mC,EAAM2mC,EAAY,SAAS,KAC3Bl/B,EAAQk/B,EAAY,SAAS,UAEnC,MAAO,GADSF,EAAa,CACZ,SAASzmC,CAAG,UAAUyH,CAAK,EAC9C,CAEA,SAASm/B,EAAmB71B,EAAa,CACvC,IAAIuX,EAAOvX,EAAI,QAAQ01B,EAAa,EAAG,EAAE,EACzC,OAAOne,EAAK,WAAW,GAAG,EAAIA,EAAK,UAAU,EAAGA,EAAK,MAAM,EAAIA,CACjE,CAGA,MAAMue,KAAwB,WAAW,MAAOve,IAC5B,QAAM,MAAc,EAAE,KAAK,kBAAmB,CAC9D,KAAMse,EAAmBte,CAAI,CAC/B,CAAC,GACgB,GAClB,EAEYwe,EAAkB,eAAgBxe,EAAc,CAC3D,GAAI,CACF,GAAItpC,EAAA,EAAO,eAAe,0BAA2B,CAEnD,MAAMm7B,EAAS,QAAM,MACnBisB,EAAoB,UAAU,eAAe,SAAS,CACpD,SAAU,CACR,WAAY,gCACZ,KAAM,WACN,SAAU,CAAC,EACX,KAAM,CACJ,KAAMQ,EAAmBte,CAAI,CAC/B,CACF,CACF,CAAC,CACH,EAEA,GAAI,SAAUnO,GAAUA,EAAO,KAC7B,OAAOusB,EAAcvsB,EAAO,IAAI,EAGlC,GAAI,UAAWA,EAAQ,CACrB,MAAM4sB,KAAe,MAAoB5sB,EAAO,KAAK,EACrD,MAAM,IAAI,MAAM4sB,GAAgB,4BAA4B,CAC9D,CAEA,MAAM,IAAI,MAAM,4BAA4B,CAC9C,KAEE,QAAO,MAAMF,EAAsBve,CAAI,CAE3C,OAASlzB,EAAK,CACZ,cAAQ,MAAM,uCAAwCA,CAAG,KACzD,SAAS,SAAU,MAAwB,iCAAiC,CAAC,CAAC,EACxEA,CACR,CACF,EAQM4xC,EAAgC1e,GAC7B,IAAI,cAAc,CACvB,aAAcwe,EAAgBxe,CAAI,CACpC,CAAC,EAGU2e,EAAyB,MAAO3e,GAAiB,CAC5D,GAAI,CACF,GAAI,OAAO,cAAkB,KAAe,UAAU,UAAU,MAC9D,MAAM,UAAU,UAAU,MAAM,CAAC0e,EAA6B1e,CAAI,CAAC,CAAC,KACpE,SAAS,SAAU,MAA0B,oCAAoC,CAAC,CAAC,MAC9E,CACL,MAAM4e,EAAY,MAAMJ,EAAgBxe,CAAI,KAC5C,MAAsB4e,CAAS,KAC/B,SAAS,SAAU,MAA0B,oCAAoC,CAAC,CAAC,CACrF,CACF,OAASl+C,EAAO,CAEd,QAAQ,MAAM,mCAAoCA,CAAK,CACzD,CACF,EAEam+C,EAAkC,MAC7Cp4B,EACA9xB,EACAtB,IACG,CACH,MAAMyrD,EAAWC,EAAwBt4B,EAAW9xB,EAAMtB,CAAK,EAC/D,GAAIsB,EAAK,YACP,OAAO,MAAMgqD,EAAuBG,CAAQ,KAE5C,MAAsBA,CAAQ,KAC9B,SAAS,SAAU,SAA0B,KAAE,+BAAgC,0BAA0B,CAAC,CAAC,CAAC,CAEhH,EAEaC,EAA0B,CAACt4B,EAA2B9xB,EAA8BtB,IAAqB,CACpH,MAAM2rD,EAAW,KAAgB,YAAY,EACvC1yC,EAAY,KAAW,aAAajZ,GAASozB,CAAS,EAEtDw4B,EAAkBC,EAAkBvqD,EAAM2X,EAAWjZ,CAAK,EAEhE,SAAO8rD,EAAA,GAAgB,CACrB,IAAK14B,EAAU,MAAM,IACrB,KAAMA,EAAU,MAAM,KAAK,KAC3B,mBAAoBu4B,EAAS,OAC7B,YAAaC,EACb,SAAU,CAACtqD,EAAK,WAClB,CAAC,CACH,EAEauqD,EAAoB,CAC/BvqD,EACA2X,EACAjZ,IACG,CACH,MAAM4rD,EAA+B,CAAC,EAEtC,OAAI5rD,IACF4rD,EAAgB,UAAY5rD,EAAM,UAAU,GAG1CsB,EAAK,uBACPsqD,EAAgB,KAAO3yC,EAAU,MAAM,MAAM,KAAK,YAAY,EAC9D2yC,EAAgB,GAAK3yC,EAAU,MAAM,MAAM,GAAG,YAAY,GAGxD3X,EAAK,QAAU,YACjBsqD,EAAgB,MAAQtqD,EAAK,OAGxBsqD,CACT,EAEA,SAASG,EAAep/B,EAAkBq/B,EAA4C,CACpF,QAASvoD,EAAIuoD,EAAQ,QAAQr/B,CAAG,EAAI,EAAGlpB,GAAK,EAAGA,IAC7C,GAAIuoD,EAAQvoD,CAAC,EAAE,YAAckpB,EAAI,YAC/B,OAAOq/B,EAAQvoD,CAAC,EAIpB,OAAO,IACT,CAEO,SAASwoD,EAAsBt/B,EAAkBne,EAAqB09C,EAAkC,CAC7G,MAAMnhD,EAAQ,CACZ,KAAM,IAAI,KAAKmhD,EAAc,IAAI,EAAE,YAAY,EAC/C,GAAI,IAAI,KAAKA,EAAc,EAAE,EAAE,YAAY,CAC7C,EACA,GAAI,CAAC7oD,EAAA,EAAO,eAAe,sBACzB,OAAO0H,EAKT,MAAMihD,EAAUx9C,EAAK,OAAQ29C,GAAWA,EAAO,UAAU,QAAUx/B,EAAI,UAAU,KAAK,EAChFy/B,EAAUL,EAAep/B,EAAKq/B,CAAO,EAE3C,OAAIr/B,EAAI,YAAcu/B,EAAc,IAAM,CAACE,EAGlC,CACL,KAAM,IAAI,KAAKF,EAAc,IAAI,EAAE,YAAY,EAE/C,GAAI,IAAI,KAAKv/B,EAAI,YAAc,CAAC,EAAE,YAAY,CAChD,EAGK,CACL,KAAM,IAAI,KAAKu/B,EAAc,IAAI,EAAE,YAAY,EAC/C,GAAI,IAAI,KAAKE,EAAUA,EAAQ,YAAcF,EAAc,EAAE,EAAE,YAAY,CAC7E,CACF,C,kHCrLYG,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UAFAA,IAAAA,GAAA,IAkBZ,MAAMC,EAA6C,CACjD,GAAI,KAAe,OACnB,KAAM,aACN,YAAa,uBACb,eAAgB,GAEhB,IAAMv5C,GAA+B,CAGnC,MAAMw5C,EAAWC,EAFG,IAAI,IAAY,CAACz5C,CAAI,CAAC,CAEI,EAE9C,MAAO,CAACvT,EAAc0B,EAAkB2f,IAEpC9N,IAASvT,EAAM,MACfuT,OAAS,MAAoBvT,EAAO0B,EAAO2f,CAAS,GACpD,GAAQ0rC,GAAYA,EAAS/sD,EAAO0B,EAAO2f,CAAS,EAG1D,EAEA,sBAAwB9N,GACf,eAAeA,CAAI,EAE9B,EAEM05C,EAAqE,CACzE,GAAI,KAAe,QACnB,KAAM,cACN,YAAa,yCACb,eAAgB,CACd,KAAM,UACN,MAAO,CAAC,CACV,EAEA,IAAMtsD,GAAiD,CACrD,KAAM,CAAE,MAAAK,EAAO,KAAAqX,EAAO,SAA2B,EAAI1X,EAC/CusD,EAAc,IAAI,IAAYlsD,GAAS,CAAC,CAAC,EAEzC+rD,EAAWC,EAAkBE,CAAW,EAExC/yB,EAAU,CAACn6B,EAAc0B,EAAkBF,IAE7C0rD,EAAY,IAAIltD,EAAM,IAAI,GAC1BktD,EAAY,OAAI,MAAoBltD,EAAO0B,EAAOF,CAAM,CAAC,GACzD,GAAQurD,GAAYA,EAAS/sD,EAAO0B,EAAOF,CAAM,GAIrD,OAAI6W,IAAS,UACJ,CAACrY,EAAc0B,EAAkBF,IAC/B,CAAC24B,EAAQn6B,EAAO0B,EAAOF,CAAM,EAGjC24B,CACT,EAEA,sBAAwBx5B,GAA2C,CACjE,KAAM,CAAE,MAAAK,EAAO,KAAAqX,CAAK,EAAI1X,EAClBwsD,GAAensD,GAAS,CAAC,GAAG,KAAK,IAAI,EAC3C,OAAIqX,IAAS,UACJ,eAAe80C,CAAW,GAE5B,WAAWA,CAAW,EAC/B,CACF,EAMO,SAASH,EAAkBv5C,EAAqB,CACrD,IAAIs5C,EAKJ,OAD2B,OAAO,iBAAiB,UAAU,gBAAgB,4BAEvEt5C,EAAO,IAAI,IAA4B,EACzCs5C,EAAW,CAAC/sD,EAAc0B,IAEtB,EAAQ1B,EAAM,QACdA,EAAM,QAAQ,WAAaA,EAAM,MAG5ByT,EAAO,IAAI,MAAM,GAAKA,EAAO,IAAI,MAAM,KAChDs5C,EAAW,CAAC/sD,EAAc0B,IACjBA,EAAM,MAAM,aAAe,MAAQ1B,EAAM,OAAS,KAAU,OAKlE+sD,CACT,CAEA,MAAMK,EAAmD,CACvD,GAAI,KAAe,SACnB,KAAM,uBACN,YAAa,iDACb,eAAgB,OAEhB,IAAMnsD,GAAkC,CACtC,MAAMosD,EAASC,EAAersD,CAAO,EAErC,MAAO,CAACjB,EAAc0B,EAAkB2f,IAA2B,CACjE,MAAMzL,KAAc,MAAoB5V,EAAO0B,EAAO2f,CAAS,EAC/D,MAAO,CAAC,CAACgsC,GAAUA,EAAO,KAAKz3C,CAAW,CAC5C,CACF,EAEA,sBAAwB3U,GACf,0BAA0BA,CAAO,EAE5C,EAOMssD,EAAiD,CACrD,GAAI,KAAe,aACnB,KAAM,wBACN,YAAa,sDACb,eAAgB,GAEhB,IAAMC,GACG,CAACxtD,EAAc0B,EAAkB2f,IAC/B3f,EAAM,QAAU8rD,EAI3B,sBAAwBA,GACf,wDAAwDA,CAAK,EAExE,EAEMC,EAA8E,CAClF,GAAI,KAAe,gBACnB,KAAM,gCACN,YAAa,gEACb,eAAgB,CACd,QAAS,OACT,MAAO,CAAC,CACV,EAEA,IAAM9sD,GAAuD,CAC3D,MAAM+sD,EAAgBN,EAAuB,IAAIzsD,GAAS,SAAW,EAAE,EACjEgtD,EAAeV,EAA0B,IAAI,CACjD,KAAM,UACN,MAAOtsD,GAAS,OAAS,CAAC,CAC5B,CAAC,EAED,MAAO,CAACX,EAAc0B,EAAkB2f,IAC/BssC,EAAa3tD,EAAO0B,EAAO2f,CAAS,GAAKqsC,EAAc1tD,EAAO0B,EAAO2f,CAAS,CAEzF,EAEA,sBAAwB1gB,GAAiD,CACvE,MAAMM,EAAUN,GAAS,SAAW,GAC9BK,EAAQL,GAAS,OAAO,KAAK,GAAG,GAAK,GAC3C,MAAO,0BAA0BM,CAAO,cAAcD,CAAK,EAC7D,CACF,EAEMssD,EAAkBrsD,GAAyC,CAC/D,GAAKA,EAIL,GAAI,CACF,SAAO,MAAgBA,CAAO,CAChC,OAAS4M,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnB,MACF,CACF,EAGM+/C,EAA6C,CACjD,GAAI,KAAe,OACnB,KAAM,aACN,YAAa,uBACb,eAAgB,OAEhB,IAAM3sD,GAAoB,CACxB,MAAM4sD,KAAQ,MAAgB5sD,CAAO,EACrC,OAAQS,GACCmsD,EAAM,KAAKnsD,EAAM,MAAQ,EAAE,CAEtC,EAEA,sBAAwBT,GACf,eAAeA,CAAO,EAEjC,EAKO,SAAS6sD,GAA2C,CACzD,MAAO,CACLhB,EACAM,EACAH,EACAQ,EACAF,CACF,CACF,CAEO,SAASQ,GAA2C,CACzD,MAAO,CAACH,CAAgB,CAC1B,C,wIC5OO,MAAMI,EAAoD,CAC/D,MAAO,GACP,cAAe,GACf,MAAO,GACP,uBAAwB,GACxB,sBAAuB,GACvB,kBAAmB,EACrB,EAMO,MAAMC,UAAoB,GAAmC,CAU3D,aAAc,CACnB,MAAM,CAAE,UAAW,EAAM,CAAC,EAT5B,KAAQ,KAAiB,CAAC,EAC1B,KAAQ,MAAQ,EAGhB,KAAQ,cAAgB,EAOtB,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,CACvD,CAEQ,oBAAoBC,EAAsB,GAAO,CACvD,MAAMt4B,EAAM,KAAK,KAAK,KAAK,KAAK,EAC1Bu4B,EAAc,KAAgB,gBAAgB,EAC9CC,KAAiB,UAAOD,EAAa,CAAChxD,EAAgB0nB,IAAgBmpC,EAAsBnpC,CAAG,CAAC,EAChGwpC,EAAmB,IAAa,iBAAiBz4B,CAAG,EAE1D,KAAK,QACL,KAAK,iBAAmBy4B,EACxB,KAAK,cAAgB,WAAW,IAAM,KAAK,KAAK,EAAG,KAAK,QAAQ,EAEhE,MAAMC,EAAgBD,EAAmB,IAAM,KAAQ,YAAYD,CAAc,EAK7EF,EACF,KAAgB,WAAW,EAAE,QAAQI,CAAa,EAElD,KAAgB,KAAKA,CAAa,CAEtC,CAEA,MAAO,CAIL,GAHA,aAAa,KAAK,aAAa,EAEH,KAAK,MAAQ,KAAK,KAAK,OAAS,EACnC,CAKvB,GAJA,KAAK,gBAID,KAAK,eAAiB,EAAG,CAC3B,OAAO,SAAS,KAAO,KAAK,SAC5B,MACF,CACA,KAAK,MAAQ,CACf,CAEA,KAAK,oBAAoB,CAC3B,CAEA,MAAO,CACL,KAAK,MAAQ,KAAK,IAAI,KAAK,MAAQ,EAAG,CAAC,EACvC,KAAK,KAAK,CACZ,CAGA,gBAAgBnC,EAAoB,CAC9BA,EAAS,WAAa,KAAK,kBAC7B,KAAK,KAAK,CAEd,CAEA,MAAM,MAAMoC,EAAoB,CAC9B,KAAK,KAAK,EAEV,KAAK,SAAW,OAAO,SAAS,KAChC,KAAK,MAAQ,EAEb,KAAK,SAAS,CAAE,UAAW,EAAK,CAAC,EAGjC,KAAK,sBAAwB,KAAgB,WAAW,EAAE,OAAO,KAAK,eAAe,EACrF,MAAMC,EAAiB,CAAC,EAExB,GAAI,CAACD,EAAS,MAAM,OAAO,OAEzB,OAGF,KAAK,SAAW,eAAuBA,EAAS,MAAM,QAAQ,EAE9D,MAAMjT,EAAQ,QAAM,MAAeiT,EAAS,MAAM,KAAK,EACvD,UAAWr8C,KAAQopC,EACjB,GAAIppC,EAAK,WACP,UAAWu8C,KAAQv8C,EAAK,WACtBs8C,EAAK,KAAKC,EAAK,GAAG,EAKnBD,EAAK,SAKV,KAAK,KAAOA,EACZ,KAAK,SAAS,CAAE,UAAW,EAAK,CAAC,EAIjC,KAAK,oBAAoB,EAAI,EAE/B,CAEA,MAAO,CACA,KAAK,MAAM,YAIhB,KAAK,MAAQ,EAEb,KAAK,SAAS,CAAE,UAAW,EAAM,CAAC,EAE9B,KAAK,uBACP,KAAK,sBAAsB,EAGzB,KAAK,eACP,aAAa,KAAK,aAAa,EAG7B,KAAgB,gBAAgB,EAAE,OACpC,KAAgB,QAAQ,CAAE,MAAO,IAAK,CAAC,EAE3C,CACF,CAEO,MAAME,EAAc,IAAIT,C,uQC5JhB,SAASU,EAAWC,EAAuB,CACxD,OAAO,MAAM,KAAK,IAAI,MAAMA,EAAM,CAAC,EAAG,CAACtqD,GAAGL,KAAMA,EAAC,EAAE,OAAQA,IAAM2qD,EAAM3qD,KAAM,CAAC,CAChF,C,4FC4DA,IAAwB,QAAQ,GAAmB,EACnD4qD,EAAA,EAAkC,QAAQ,GAA0B,EAwB7D,MAAMC,EAA2B,GACjC,MAAMC,CAAkB,CAG7B,YAAYC,GAAgC,CAC1C,KAAK,UAAYA,MAGZ,KAAiB,MACpB,KAAiB,IAAI,IAAe,CAExC,CAEA,aAAaC,GAAUC,GAA8B,CACnD,IAAIjrD,EAAG0Z,EAAGwxC,EAAGlsD,EACb,MAAMovC,GAAa,KAAK,UAAU,cAC5B+c,GAA6C,CAAC,EAC9CC,GAAqBH,IAAuBJ,EAElD,GAAIzc,KAAegd,GA6BnB,IAxBIhd,GAAa,GAAKgd,IAAsB,GACtCJ,GAAI,UACFA,GAAI,SAAS,SACf,KAAK,UAAU,KAAOA,GAAI,SAAS,OAAO,KAC1C,KAAK,UAAU,WAAW,KAAOA,GAAI,SAAS,OAAO,MAAQ,CAAC,GAShE5c,GAAa,GAAKgd,IAAsB,EAMxChd,GAAa,GAAKgd,IAAsB,EAKxChd,GAAa,GAAKgd,IAAsB,EAAG,CAE7C,MAAMC,KAAc,QAAKL,GAAI,UAAW,CAAE,KAAM,aAAc,CAAC,EAS/D,IAPIK,IACF,KAAK,UAAU,YAAc,CAC3B,KAAMA,EAAY,aAAe,CAAC,CACpC,GAIGrrD,EAAI,EAAGA,EAAI,KAAK,UAAU,WAAW,KAAK,OAAQA,IAAK,CAC1D,MAAM/C,GAAW,KAAK,UAAU,WAAW,KAAK+C,CAAC,EAC7C/C,GAAS,aAAe,SAC1BA,GAAS,WAAa,MAEpBA,GAAS,OAAS,WACpBA,GAAS,KAAO,SAEdA,GAAS,OAAS,SACpBA,GAAS,KAAO,SAEdA,GAAS,YAAc,QACzB,OAAOA,GAAS,SAEpB,CACF,CA+KA,GA7KImxC,GAAa,GAAKgd,IAAsB,GACtCJ,GAAI,KAAOA,GAAI,IAAI,SACrB,KAAK,UAAU,WAAaA,GAAI,IAAI,CAAC,GAIrC5c,GAAa,GAAKgd,IAAsB,GAC1CD,GAAc,KAAM5uD,OAClB,QAAKA,EAAM,QAAUq+B,IAAW,CAE1BA,GAAO,QAAUA,GAAO,MAAQA,GAAO,UACrCA,GAAO,UACT,OAAOA,GAAO,OACd,OAAOA,GAAO,OAEdA,GAAO,UAAS,OAAIA,GAAO,OAAS7+B,IAAU,CAC5C,MAAMuvD,GAAQ,CAAC,EACf,OAAAA,GAAM,KAAK,CAAE,KAAM,QAAS,OAAQ,CAACvvD,GAAM,IAAI,CAAE,CAAC,EAClDuvD,GAAM,KAAK,CAAE,KAAMvvD,GAAM,KAAM,OAAQ,CAAC,CAAE,CAAC,EACvCA,GAAM,UACRuvD,GAAM,KAAK,CAAE,KAAM,OAAQ,OAAQ,CAACvvD,GAAM,QAAQ,CAAE,CAAC,EAEnDA,GAAM,QACRuvD,GAAM,KAAK,CAAE,KAAM,QAAS,OAAQ,CAACvvD,GAAM,MAAM,CAAE,CAAC,EAE/CuvD,EACT,CAAC,EACD,OAAO1wB,GAAO,UACd,QAAKA,GAAO,QAAU2wB,IAAS,CACzBA,GAAK,OAAS,QAAUA,GAAK,WAC/BA,GAAK,OAAS,CAACA,GAAK,QAAQ,EAC5B,OAAOA,GAAK,UAEVA,GAAK,OAAS,OAASA,GAAK,MAC9BA,GAAK,OAAS,CAACA,GAAK,GAAG,EACvB,OAAOA,GAAK,IAEhB,CAAC,EAEG3wB,GAAO,OACTA,GAAO,QAAQ,KAAK,CAAE,KAAM,OAAQ,OAAQ,CAACA,GAAO,IAAI,CAAE,CAAC,EAC3D,OAAOA,GAAO,OAItB,CAAC,EAEMr+B,EACR,EAIC6xC,GAAa,GAAKgd,IAAsB,EAMxChd,GAAa,IAAMgd,IAAsB,IAE3CD,GAAc,KAAM5uD,IACdA,EAAM,OAAS,YAInB,QAAKA,EAAM,OAASkoB,IAAU,CAC5B,GAAIA,GAAM,YAAcA,GAAM,WAAW,QAAU,EAAG,CACpD,MAAMymC,GAAIzmC,GAAM,WAChBymC,GAAE,MAAM,EACRzmC,GAAM,WAAaymC,EACrB,CACF,CAAC,EAEM3uD,EACR,EAGC6xC,GAAa,IAAMgd,IAAsB,OAE3C,QAAK,KAAK,UAAU,aAAa,EAAII,GAAqB,CACpD,YAAaA,IACXA,EAAiB,UACnBA,EAAiB,QAAU,GAExBA,EAAiB,UACpBA,EAAiB,QAAU,IAG3B,iBAAkBA,GAAoBA,EAAiB,aACzDA,EAAiB,KAAO,EACf,cAAeA,GAAoBA,EAAiB,YAC7DA,EAAiB,KAAO,EAE5B,CAAC,EAGCpd,GAAa,IAAMgd,IAAsB,GAKzChd,GAAa,IAAMgd,IAAsB,KAC3C,KAAK,UAAU,aAAeJ,GAAI,gBAAkB,EAAI,GAGtD5c,GAAa,IAAMgd,IAAsB,IAC3C,KAAK,oBAAoBJ,EAAG,EAG1B5c,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,GAAe,CACjC,GAAIA,EAAM,QAAS,CACjB,MAAMmF,GAAM,KAAoBnF,EAAM,QAChCkvD,GAAUf,EAAW,IAAiB,EAG5CnuD,EAAM,UACJkvD,MACE,aAAUA,GAAUtyD,IACXA,GAAIuI,EACZ,EAAI,CACP,CACJ,CAEA,cAAOnF,EAAM,QAENA,CACT,CAAC,EAGC6xC,GAAa,IAAMgd,IAAsB,IAE3CD,GAAc,KAAM5uD,IACdA,EAAM,eAAe,IACvBA,EAAM,QAAUA,EAAM,eAAe,EACrCA,EAAM,QAAQ,aAAe,CAC3B,KAAMA,EAAM,QAAQ,KACpB,KAAMA,EAAM,QAAQ,KACpB,SAAUA,EAAM,QAAQ,SACxB,OAAQA,EAAM,QAAQ,OACtB,OAAQA,EAAM,QAAQ,MACxB,EAGIA,EAAM,QAAQ,YAChBA,EAAM,QAAQ,WAAW,QAAQ,EAInC,OAAOA,EAAM,QAAQ,QACrB,OAAOA,EAAM,QAAQ,KACrB,OAAOA,EAAM,QAAQ,KACrB,OAAOA,EAAM,QAAQ,SACrB,OAAOA,EAAM,QAAQ,OACrB,OAAOA,EAAM,QAAQ,OACrB,OAAOA,EAAM,eAAe,GAGvBA,EACR,EAGC6xC,GAAa,IAAMgd,IAAsB,IAE3CD,GAAc,KAAM5uD,IACdA,EAAM,UAAS,WAAQA,EAAM,KAAK,IACpCA,EAAM,MAAQA,EAAM,MAAM,IAAImvD,CAAgB,GAGzCnvD,EACR,EAGC6xC,GAAa,IAAMgd,IAAsB,GAAI,CAC/C,MAAMO,EAAetvD,KACZ,CACL,GAAGA,GACH,IAAKuvD,EAAsBvvD,GAAK,GAAG,CACrC,GAEF8uD,GAAc,KAAM5uD,KAEdA,GAAM,SAAWA,GAAM,QAAQ,cAAa,WAAQA,GAAM,QAAQ,SAAS,IAC7EA,GAAM,QAAQ,UAAYA,GAAM,QAAQ,UAAU,IAAIovD,CAAW,GAI/DpvD,GAAM,SAAWA,GAAM,QAAQ,cAAgBA,GAAM,QAAQ,aAAa,WACxEA,GAAM,QAAQ,aAAa,SAAS,UAAS,WAAQA,GAAM,QAAQ,aAAa,SAAS,KAAK,IAChGA,GAAM,QAAQ,aAAa,SAAS,MAAQA,GAAM,QAAQ,aAAa,SAAS,MAAM,IAAIovD,CAAW,GAEnGpvD,GAAM,QAAQ,aAAa,SAAS,QACtCA,GAAM,QAAQ,aAAa,SAAS,MAAQqvD,EAC1CrvD,GAAM,QAAQ,aAAa,SAAS,KACtC,IAIGA,GACR,CACH,CAEA,GAAI6xC,GAAa,IAAMgd,IAAsB,GAAI,CAC/C,MAAMO,EAAetvD,KACZ,CACL,GAAGA,GACH,IAAKA,GAAK,IAAI,QAAQ,mBAAoB,gBAAgB,CAC5D,GAEF8uD,GAAc,KAAM5uD,KAEdA,GAAM,SAAWA,GAAM,QAAQ,cAAa,WAAQA,GAAM,QAAQ,SAAS,IAC7EA,GAAM,QAAQ,UAAYA,GAAM,QAAQ,UAAU,IAAIovD,CAAW,GAI/DpvD,GAAM,SAAWA,GAAM,QAAQ,cAAgBA,GAAM,QAAQ,aAAa,UACxEA,GAAM,QAAQ,aAAa,SAAS,UAAS,WAAQA,GAAM,QAAQ,aAAa,SAAS,KAAK,IAChGA,GAAM,QAAQ,aAAa,SAAS,MAAQA,GAAM,QAAQ,aAAa,SAAS,MAAM,IAAIovD,CAAW,GAIlGpvD,GACR,CACH,CAgBA,GAdI6xC,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,IACdA,EAAM,OAAS,YAInB,QAAKA,EAAM,OAASkoB,IAAU,CAC5BA,GAAM,MAAQ,MAChB,CAAC,EAEMloB,EACR,EAGC6xC,GAAa,IAAMgd,IAAsB,GAC3C,UAAWnuD,KAAY,KAAK,UAAU,WAAW,KAAM,CACrD,GAAI,IAAC,MAAQA,CAAQ,EACnB,SAEF,KAAM,CAAE,MAAA4uD,GAAO,QAAAr1C,EAAQ,EAAIvZ,KACvB,KAAcuZ,EAAO,IAGzBvZ,EAAS,WAAU,KAAsBuZ,GAASq1C,EAAK,EACzD,CAwEF,GArEIzd,GAAa,IAAMgd,IAAsB,IAG3CD,GAAc,KAAM5uD,GAAe,CACjC,MAAMuvD,GAAkBvvD,EAAM,OAAS,QACvC,GAAIuvD,IAAmB,CAACvvD,EAAM,OAC5B,OAAOA,EAET,MAAMwvD,GAAgBxvD,EAAM,QAAU,SACtC,GAAI,CAACuvD,IAAmBC,GACtB,OAAOxvD,EAIT,GAFAA,EAAM,KAAOuvD,GAAkB,YAAc,QAEzCvvD,EAAM,OAAS,YAAa,CAC9B,MAAMyvD,MAAUC,EAAA,GAA0B1vD,CAAK,EAC3CyvD,KACFzvD,EAAM,gBAAkBA,EAAM,KAC9BA,EAAM,KAAOyvD,GAEjB,CACA,OAAOzvD,CACT,CAAC,EAGC6xC,GAAa,IAAMgd,IAAsB,GAIzChd,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,IACGA,EAAM,OAAS,UAKpCA,EAAM,KAAO,OACb,OAAOA,EAAM,QAAQ,SACdA,EACR,EAGC6xC,GAAa,IAAMgd,IAAsB,KAE3C,KAAK,qBAAqB,EAE1B,KAAK,UAAU,WAAW,KAAO,KAAK,UAAU,WAAW,KAAK,IAAKnuD,GAAa,CAChF,GAAI,IAAC,MAAWA,CAAQ,EACtB,OAAOA,EAGT,MAAMivD,GAA4D,CAChE,GAAGjvD,CACL,EAKA,OAHAivD,GAAY,QAAU,CAAE,SAAU,GAAM,KAAMA,GAAY,OAAS,GAAI,MAAOA,GAAY,OAAS,EAAG,EACtGA,GAAY,QAAU,CAACA,GAAY,OAAO,EAEtCA,GAAY,OAAS,KAAa,UAAYA,GAAY,OAAS,KAAa,UAC3E,CACL,GAAGA,GACH,KAAM,SACR,EAGKA,EACT,CAAC,GAGC9d,GAAa,IAAMgd,IAAsB,GAC3C,UAAWnuD,KAAY,KAAK,UAAU,WAAW,KAC3CA,EAAS,MACX,OAAOA,EAAS,KAGdA,EAAS,WACX,OAAOA,EAAS,UAGdA,EAAS,gBACX,OAAOA,EAAS,eAGdA,EAAS,SACX,OAAOA,EAAS,QAKtB,GAAImxC,GAAa,IAAMgd,IAAsB,GAC3C,UAAWnuD,KAAY,KAAK,UAAU,WAAW,KAC3CA,EAAS,OAAS,UAIlBA,EAAS,UAAY,GAAKA,EAAS,UAAY,IACjDA,EAAS,QAAU,GAGjBA,EAAS,SAAS,SACpBA,EAAS,QAAU,CAAC,IA+D1B,GA1DImxC,GAAa,IAAMgd,IAAsB,KAC3CD,GAAc,KAAKgB,CAA4B,EAC/ChB,GAAc,KAAKiB,CAAqB,GAGtChe,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,GAAsB,CACxC,GAAIA,EAAM,iBACR,UAAWqC,MAAKrC,EAAM,gBACpB,GAAIqC,GAAE,KAAOytD,EAAA,EAA0B,GACrC,OAAOC,EAAuB/vD,EAAO8vD,EAAA,EAA0B,GAAI,CACjE,GAAIE,EAAA,EAAiB,GACrB,QAAS,CAAC,CACZ,CAAC,EAIP,OAAOhwD,CACT,CAAC,EAGC6xC,GAAa,IAAMgd,IAAsB,GAKzChd,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,GAAU,CAG5B,GAFAA,EAAM,WAAaiwD,EAA2BjwD,EAAM,WAAY,CAAE,oBAAqB,EAAK,CAAC,EAEzF,CAACA,EAAM,QACT,OAAOA,EAGT,UAAWq+B,MAAUr+B,EAAM,QAAS,CAClC,MAAMkwD,GAAYD,EAA2B5xB,GAAO,WAAY,CAAE,oBAAqB,EAAK,CAAC,EACzF6xB,IAAa,OACf7xB,GAAO,WAAa6xB,GAExB,CAEA,OAAOlwD,CACT,CAAC,EAGC6xC,GAAa,IAAMgd,IAAsB,KAC3CD,GAAc,KAAM5uD,IAClB,KAAK,yBAAyBA,CAAK,EAC5BA,EACR,EAED,KAAK,iCAAiC,GAGpC6xC,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAKuB,CAAqB,EAGtCte,GAAa,IAAMgd,IAAsB,GAAI,CAE/C,UAAW95B,MAAS,KAAK,UAAU,YAAY,KAC7CA,GAAM,WAAak7B,EAA2Bl7B,GAAM,WAAY,CAAE,oBAAqB,EAAM,CAAC,EAIhG,MAAMq7B,KAAY,KAAiB,EAAE,oBAAoB,IAAI,EAC7D,GAAIA,EAAW,CACb,UAAW1vD,MAAY,KAAK,UAAU,WAAW,KAC3CA,GAAS,OAAS,SAAWA,GAAS,aAAe,OACvDA,GAAS,cAAa,MAAiB0vD,CAAS,GAIpDxB,GAAc,KAAM5uD,IAAsB,CACxC,GAAIA,GAAM,QAAS,CACjB,IAAIqwD,GAA4B,GAC5BrwD,GAAM,YAAc,MAAQA,GAAM,QAAQ,OAAS,IACrDA,GAAM,cAAa,MAAiBowD,CAAS,EAC7CC,GAA4B,IAG9B,UAAWhyB,MAAUr+B,GAAM,SACrBq+B,GAAO,YAAc,MAAQA,GAAO,WAAW,KAAO,QACpDr+B,GAAM,YAAY,MAAQ,KAC5Bq+B,GAAO,WAAa,CAAE,GAAGr+B,GAAM,UAAW,EAE1Cq+B,GAAO,WAAa4xB,EAA2B5xB,GAAO,WAAY,CAAE,oBAAqB,EAAM,CAAC,GAIhGgyB,IAA6BhyB,GAAO,YAAY,MAAQ,aAG1Dr+B,GAAM,WAAaq+B,GAAO,WAGhC,CACA,OAAOr+B,EACT,CAAC,CACH,CACF,CAoHA,GAlHI6xC,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,IACdA,EAAM,SAAS,QAAU,OAAOA,EAAM,QAAQ,QAAW,WAEvDA,EAAM,QAAQ,OAAO,cAAgB,UAAYA,EAAM,QAAQ,OAAO,aAAe,IACvFA,EAAM,QAAQ,OAAO,YAAc,OACnCA,EAAM,QAAQ,OAAO,WAAa,IAElCA,EAAM,QAAQ,OAAS,CAAE,GAAGA,EAAM,QAAQ,OAAQ,WAAY,EAAK,GAIhEA,EACR,EAKC6xC,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,GAAsB,CACxC,GAAIA,EAAM,OAAS,SAAWA,EAAM,cAAgB,OAAW,CAC7D,MAAM+8C,GAAc/8C,EAAM,YAAY,UAAU,QAAQ,YAYxD,GATI+8C,KAAgB,SAElB/8C,EAAM,YAAY,SAAS,OAAO,eAAc,MAAqC+8C,EAAW,EAGhG,OAAO/8C,EAAM,YAAY,SAAS,OAAO,aAIvCA,EAAM,aAAa,UACrB,UAAW+9B,MAAY/9B,EAAM,YAAY,UACvC,QAASmd,GAAI,EAAGA,IAAK4gB,GAAS,YAAY,QAAU,GAAI5gB,KAAK,CAC3D,IAAImzC,GAAsBvyB,GAAS,WAAW5gB,EAAC,EAAE,MAC7C4gB,GAAS,WAAW5gB,EAAC,EAAE,KAAO,uBAChC4gB,GAAS,WAAW5gB,EAAC,EAAE,GAAK,qBAC5B4gB,GAAS,WAAW5gB,EAAC,EAAE,SAAQ,MAAqCmzC,EAAmB,EAE3F,CAGN,CAEA,OAAOtwD,CACT,CAAC,EAKC6xC,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAM5uD,IAClBA,EAAM,iBAAiB,QAASuwD,IAAmB,CAGjD,GACEA,GAAe,KAAO,mBACtBA,GAAe,UAAY,QAC3BA,GAAe,QAAQ,cAAgB,OACvC,CACA,IAAIC,GAA2D,CAAC,EAKhE,SAAW,CAACxD,GAAOlR,EAAI,IAAK,OAAO,QAAQyU,GAAe,QAAQ,WAAW,EAAG,CAC9E,IAAIE,GAAuC,CAAC,EAG5CA,GAAY,KAAO3U,GACnB0U,GAAsBxD,EAAK,EAAIyD,EACjC,CAGAF,GAAe,QAAUC,EAC3B,CACF,CAAC,EAEMxwD,EACR,EAGC6xC,GAAa,IAAMgd,IAAsB,IAEvC,OAAO,KAAK,UAAU,SAAY,WACpC,KAAK,UAAU,QAAU,IAIzBhd,GAAa,IAAMgd,IAAsB,IAGvC,iBAAkB,KAAK,UAAU,YACnC,OAAO,KAAK,UAAU,WAAW,aAIjChd,GAAa,IAAMgd,IAAsB,IAC3CD,GAAc,KAAK8B,EAA4B,EAc7C9B,GAAc,OAAS,EACzB,IAAKzxC,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAO,OAAQA,IAC5C,IAAKwxC,EAAI,EAAGA,EAAIC,GAAc,OAAQD,IAAK,CACzC,KAAK,UAAU,OAAOxxC,CAAC,EAAIyxC,GAAcD,CAAC,EAAE,KAAK,KAAM,KAAK,UAAU,OAAOxxC,CAAC,CAAC,EAC/E,MAAMwzC,EAAY,KAAK,UAAU,OAAOxzC,CAAC,EAAE,OAC3C,GAAIwzC,EACF,IAAKluD,EAAI,EAAGA,EAAIkuD,EAAU,OAAQluD,IAChCkuD,EAAUluD,CAAC,EAAImsD,GAAcD,CAAC,EAAE,KAAK,KAAMgC,EAAUluD,CAAC,CAAC,CAG7D,CAMAovC,GAAagd,KACf,KAAK,UAAU,cAAgBA,IAEnC,CAEQ,sBAAuB,CAC7B,MAAM+B,GAAY,CAAC,EAEnB,UAAW5wD,MAAS,KAAK,UAAU,OAE7BA,GAAM,eAAiBA,GAAM,cAK7BA,GAAM,OAAS,OAAS,MAAM,QAAQA,GAAM,MAAM,IACpDA,GAAM,OAASA,GAAM,OAAO,OAAQuoB,GAAM,CAACA,EAAE,aAAa,GAG5DqoC,GAAU,KAAK5wD,EAAK,GAGtB,KAAK,UAAU,OAAS4wD,EAC1B,CAKA,yBAAyB5wD,GAAmB,CAC1C,UAAWq+B,MAAUr+B,GAAM,SAAW,CAAC,EACrC,GAAI6wD,EAAkBxyB,EAAM,OAC1B,MAAuBA,EAAM,EACzBA,GAAO,eAAe,YAAY,GAAG,CAEvC,MAAMyyB,KAAa,MAAiCzyB,GAAQ,CAAC,GAAGr+B,GAAM,OAAO,CAAC,EAC9E,UAAW+wD,KAAYD,EACrB9wD,GAAM,QAAQ,KAAK+wD,CAAQ,CAE/B,CAGN,CAMA,kCAAmC,CACjC,UAAW1lC,MAAc,KAAK,UAAU,YAAY,KAClD,GAAI2lC,EAAkC3lC,EAAU,EAAG,CACjD,MAAM4lC,MAAuB,MAAoC5lC,EAAU,EAC3E,UAAW6lC,KAAsBD,GAC/B,KAAK,UAAU,YAAY,KAAK,KAAKC,CAAkB,CAE3D,CAEJ,CAEA,oBAAoBzC,GAAU,CAC5B,IAAI0C,GAAO,EACX,MAAMC,EAAc,KAAoB,GAUxC,IAAIC,MAPF,UACE,kBACE,OAAI5C,GAAI,KAAO9hC,OACN,OAAIA,GAAI,OAAQ,IAAI,CAC5B,CACH,EAAE,OAAQ3C,IAAOA,IAAM,IAAI,CAC7B,GAAK,GACsB,EAE7B,GAAI,CAACykC,GAAI,KACP,OAIF,MAAM6C,KAAW,QAAK7C,GAAI,KAAO9hC,IAAQA,GAAI,UAAYA,GAAI,WAAaA,GAAI,MAAM,EAEpF,UAAWA,MAAO8hC,GAAI,KAAM,CAC1B,GAAI9hC,GAAI,gBACN,SAGF,MAAMxoB,GAASwoB,GAAI,QAAU,KACvB4kC,GAAgBC,EAAcrtD,EAAM,EAEpCstD,EAAgB,CAAC,EACvB,IAAIC,GAEAJ,IAEFG,EAAS,GAAKJ,EACdI,EAAS,KAAO,MAChBA,EAAS,MAAQ9kC,GAAI,MACrB8kC,EAAS,UAAY9kC,GAAI,SACzB8kC,EAAS,OAAS9kC,GAAI,OACtB8kC,EAAS,OAAS,CAAC,EACnBA,EAAS,QAAU,CACjB,EAAG,EACH,EAAGN,GACH,EAAG,KACH,EAAGI,EACL,EACAG,GAAgB,IAAIC,EAAA,GAAWF,CAAQ,EACvCJ,IACAF,MAGF,MAAMS,GAAU,IAAIC,EAAQN,GAAe,KAAmBJ,EAAI,EAElE,UAAWnxD,MAAS2sB,GAAI,OAAQ,CAC9B3sB,GAAM,KAAOA,GAAM,MAAQ,KACvBA,GAAM,UACRA,GAAM,QAAU,KAAK,IAAI,KAAoB,KAAoB,GAAMA,GAAM,OAAO,GAEtF,MAAM6yB,GAAa,KAAK,MAAM7yB,GAAM,IAAI,EAAIoxD,EACtCU,GAAc9xD,GAAM,OAASwxD,EAAcxxD,GAAM,MAAM,EAAIuxD,GAE3DQ,GAAWH,GAAQ,iBAAiBE,GAAaj/B,EAAU,EACjEs+B,GAAOS,GAAQ,KACf5xD,GAAM,QAAU,CACd,EAAG+xD,GAAS,EACZ,EAAGZ,GAAOY,GAAS,EACnB,EAAGl/B,GACH,EAAGi/B,EACL,EACAF,GAAQ,SAAS5xD,GAAM,OAAO,EAE9B,OAAOA,GAAM,KAET0xD,IAAiBD,EAAS,UAC5BC,GAAc,QAAQ,KAAK1xD,EAAK,EAEhC,KAAK,UAAU,OAAO,KAAK,IAAI2xD,EAAA,GAAW3xD,EAAK,CAAC,CAEpD,CAEI0xD,IACF,KAAK,UAAU,OAAO,KAAKA,EAAa,EAGpCA,IAAiBD,EAAS,YAC9BN,IAAQI,GAEZ,CACF,CACF,CAEA,SAASC,EAAcrtD,EAAyB,CAC9C,SAAI,YAASA,CAAM,IACjBA,EAAS,SAASA,EAAO,QAAQ,KAAM,EAAE,EAAG,EAAE,GAG5CA,EAAS,OACXA,EAAS,MAGQ,KAAK,KAAKA,GAAU,KAAmB,KAAkB,CAE9E,CAYA,MAAM0tD,CAAQ,CAKZ,YAAY1tD,GAAgBD,GAAQ,KAAmB8tD,EAAU,EAAG,CAClE,KAAK,KAAO,IAAI,MAAM9tD,EAAK,EAAE,KAAK,CAAC,EACnC,KAAK,KAAO8tD,EACZ,KAAK,OAAS7tD,EAChB,CAEA,OAAQ,CACN,KAAK,KAAK,KAAK,CAAC,CAClB,CAKA,SAAS8tD,GAAc,CACrB,QAASxuD,GAAIwuD,GAAQ,EAAGxuD,GAAIwuD,GAAQ,EAAIA,GAAQ,EAAGxuD,MAC7C,CAAC,KAAK,KAAKA,EAAC,GAAKwuD,GAAQ,EAAIA,GAAQ,EAAI,KAAK,KAAO,KAAK,KAAKxuD,EAAC,KAClE,KAAK,KAAKA,EAAC,EAAIwuD,GAAQ,EAAIA,GAAQ,EAAI,KAAK,MAGhD,OAAO,KAAK,IACd,CAKA,iBAAiBH,GAAqBj/B,GAAoBq/B,EAAW,GAAY,CAC/E,IAAIC,EAAYC,EACZC,EACJ,QAAS5uD,GAAI,KAAK,KAAK,OAAS,EAAGA,IAAK,GAClC,KAAK,OAAS,KAAK,KAAKA,EAAC,EAAI,EADQA,KAEvC,GAAI2uD,IAAa,OACfA,EAAW3uD,WAEPA,GAAI,KAAK,KAAK,OAAS,GAAK,KAAK,KAAKA,EAAC,GAAK,KAAK,KAAKA,GAAI,CAAC,EAC7D0uD,EAAa1uD,OAEb,OAQR,GAAI0uD,IAAe,QAAaC,IAAa,QAAaA,EAAWD,GAAct/B,GAAa,EAAG,CACjG,MAAMs+B,MAAO,OAAI,KAAK,KAAK,MAAMgB,CAAU,CAAC,EAC5CE,EAAQ,CACN,EAAGF,EACH,EAAGhB,EACL,CACF,KAAO,QAAKe,EAMH,MAJP,KAAK,MAAQ,KAAK,OAClB,KAAK,MAAM,EACJ,KAAK,iBAAiBJ,GAAaj/B,GAAY,EAAI,GAK5D,OAAOw/B,CACT,CACF,CAEA,SAASlD,EAAiBrvD,EAAqB,CAC7C,IAAIs1B,GAAMt1B,EAAK,IAEf,MAAI,CAACs1B,IAAOt1B,EAAK,YACfs1B,GAAM,gBAAgBk9B,EAAA,EAAI,cAAcxyD,EAAK,SAAS,CAAC,IAGrD,CAACs1B,IAAOt1B,EAAK,UACfs1B,GAAM,aAAat1B,EAAK,OAAO,IAI5Bs1B,KACHA,GAAM,KAGJt1B,EAAK,WACPs1B,GAAM,KAAQ,iBAAiBA,GAAK,IAAI,IAAoB,QAAQ,EAAE,GAGpEt1B,EAAK,cACPs1B,GAAM,KAAQ,iBAAiBA,GAAK,IAAI,IAAoB,WAAW,EAAE,GAGvEt1B,EAAK,SACPs1B,GAAM,KAAQ,iBAAiBA,GAAKt1B,EAAK,MAAM,GAG1C,CACL,IAAAs1B,GACA,MAAOt1B,EAAK,MACZ,YAAaA,EAAK,WACpB,CACF,CAEA,SAASuvD,EAAsBrkD,EAAc,CAC3C,MAAMunD,GAA2B,oFAEjC,OAAOvnD,EAAK,QAAQunD,GAA0B,CAACxkC,GAAO9vB,EAAYu0D,EAAaC,EAAWC,EAAWC,KAC/F10D,EACK,gBAELu0D,EACK,mBAELC,EACK,eAELC,EACK,eAELC,GACK,kBAEF5kC,EACR,CACH,CAMO,SAASkiC,EACd2C,EACAzyD,GACsB,CACtB,GAAIA,GAAQ,sBAAwByyD,GAAa,MAAQA,IAAc,WACrE,OAAO,KAGT,MAAI,MAAgBA,CAAS,EAC3B,OAAOA,EAGT,MAAMC,MAAK,KAAiB,EAAE,oBAAoBD,CAAS,EAC3D,OAAKC,MAIE,MAAiBA,EAAE,EAHjB,CAAE,IAAKD,GAAwB,MAAU,CAIpD,CAGA,SAAS7C,EAAuB/vD,EAAmBgqB,GAAY8oC,GAA4B,CACzF,GAAI9yD,EAAM,gBAAiB,CACzB,MAAM+yD,EAA2C,CAAC,EAClD,UAAW1wD,KAAKrC,EAAM,gBACpB+yD,EAAgB,KAAK1wD,CAAC,EAClBA,EAAE,KAAO2nB,IACX+oC,EAAgB,KAAK,CAAE,GAAGD,EAAI,CAAC,EAGnC9yD,EAAM,gBAAkB+yD,CAC1B,CACA,OAAO/yD,CACT,CAEA,SAAS4vD,EAA6B5vD,EAAmB,CACvD,MAAM2uC,GAAc3uC,EAAM,YAC1B,GAAI,CAAC2uC,GACH,OAAO3uC,EAWT,GARI2uC,GAAY,UAAYA,GAAY,SAAS,WAC/CA,GAAY,SAAS,SAAWqkB,EAC9BrkB,GAAY,SAAS,SACrBA,GAAY,SAAS,UACvB,GAIE,MAAM,QAAQA,GAAY,SAAS,EACrC,UAAW5Q,MAAY4Q,GAAY,UACjC,UAAW/D,KAAQ7M,GAAS,WACtB6M,EAAK,KAAO,aACdA,EAAK,MAAQooB,EAAqBpoB,EAAK,KAAK,GAMpD,OAAO5qC,CACT,CAEA,SAAS6wD,EAAkBxyB,EAAqD,CAC9E,OACEA,EAAO,eAAe,YAAY,GAClCA,EAAO,eAAe,WAAW,GACjCA,EAAO,eAAe,QAAQ,GAC9BA,EAAO,eAAe,YAAY,CAEtC,CAEA,SAAS2yB,EACP3yB,EACkD,CAClD,OACEA,EAAO,eAAe,YAAY,GAClCA,EAAO,eAAe,WAAW,GACjCA,EAAO,eAAe,QAAQ,GAC9BA,EAAO,eAAe,gBAAgB,GACtCA,EAAO,eAAe,YAAY,CAEtC,CAEA,SAAS20B,EAAqBC,EAAkBluD,GAA2D,CACzG,GAAI,CAACkuD,EACH,OAGF,MAAMC,GAAsB,CAAE,KAAM,IAAY,YAAa,QAAS,CAAC,CAAE,EACnEC,EAA8B,CAAC,EAErC,UAAW1E,KAAOwE,EAAa,CAE7B,GAAIxE,EAAI,MAAQA,EAAI,QAAS,CAEvBA,EAAI,OAAS,IAAY,YAC3ByE,GAAU,QAAU,CAClB,GAAGA,GAAU,QACb,GAAGzE,EAAI,OACT,EAEA0E,EAAY,KAAK1E,CAAG,EAEtB,QACF,CAGA,IAAIvwD,EACJ,MAAMk1D,EAAU,WAAW3E,EAAI,IAAI,EACnC,GAAI1pD,IAAc,CAAC,MAAMquD,CAAO,EAAG,CACjC,MAAMC,MAAQ,MAAmBD,EAASruD,GAAW,KAAK,EACtDsuD,IAASA,GAAM,QACjBn1D,EAAQm1D,GAAM,MAElB,CAEA,OAAQ5E,EAAI,KAAM,CAChB,IAAK,GACCA,EAAI,OAAS,OACXA,EAAI,QAAU,OAChB0E,EAAY,KAAK,CACf,KAAM,IAAY,aAClB,QAAS,CACP,MAAO,IAAkB,KACzB,OAAQ,CAAE,KAAM1E,EAAI,KAAM,MAAAvwD,CAAM,CAClC,CACF,CAAC,EAEDg1D,GAAU,QAAQ,OAAOzE,EAAI,KAAK,CAAC,EAAI,CACrC,KAAMA,EAAI,KACV,MAAAvwD,CACF,GAGJ,MACF,IAAK,GACHi1D,EAAY,KAAK,CACf,KAAM,IAAY,YAClB,QAAS,CACP,KAAM,CAAC1E,EAAI,KACX,GAAI,CAACA,EAAI,GACT,OAAQ,CAAE,KAAMA,EAAI,KAAM,MAAAvwD,CAAM,CAClC,CACF,CAAC,EACD,KACJ,CACF,CAEA,OAAI,OAAO,KAAKg1D,GAAU,OAAO,EAAE,OAAS,GAC1CC,EAAY,QAAQD,EAAS,EAGxBC,CACT,CAEA,SAAStD,EAAsB7vD,EAAmB,CAChD,OAAIA,EAAM,OAAS,cAAgBA,EAAM,OAAS,WAAaA,EAAM,OAAS,aACxEA,EAAM,QAAQ,iBAChBA,EAAM,QAAU,CACd,GAAGA,EAAM,QACT,QAASA,EAAM,QAAQ,cACzB,EACA,OAAOA,EAAM,QAAQ,gBAIlBA,CACT,CAIA,SAASmwD,EAAsBnwD,EAAmB,CAChD,OAAIA,EAAM,OAAS,cAEdA,EAAM,aAAqD,SAAS,QAAQ,gBAC7E,KAAc,SAEdA,EAAM,YAAc,CAClB,GAAGA,EAAM,YACT,UAAW,CACT,GAAGA,EAAM,YAAY,UACrB,CACE,QAAS,CACP,GAAI,KAAe,OACnB,QAAS,KAAU,IACrB,EACA,WAAY,CACV,CACE,GAAI,uBACJ,MAAO,KAAc,IACvB,CACF,CACF,CACF,CACF,GAIGA,CACT,CAEA,SAAS0wD,GAA6B1wD,EAAmB,CAGvD,OAAIA,EAAM,aAAeA,EAAM,YAAY,YACzCA,EAAM,YAAY,UAAYA,EAAM,YAAY,UAAU,IAAK+9B,KACzDA,GAAS,aACXA,GAAS,WAAaA,GAAS,WAAW,IAAKu1B,KACzCA,GAAS,KAAO,mBAAqBA,GAAS,OAAO,MAAQ,KAC/DA,GAAS,MAAM,QAAU,IAEpBA,GACR,GAEIv1B,GACR,GAGI/9B,CACT,C,sKCpvCO,MAAMuzD,EAA0B,WAEhC,IAAKC,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,QAAU,qBACVA,EAAA,UAAY,YACZA,EAAA,IAAM,MANIA,IAAAA,GAAA,IASL,MAAMC,EAAsBh3D,GAA8B,CAC/D,OAAQA,EAAM,CACZ,IAAK,OACH,MAAO,OACT,IAAK,SACH,MAAO,SACT,IAAK,WACH,MAAO,WACT,IAAK,qBACH,MAAO,6BACT,IAAK,YACH,MAAO,YACT,IAAK,MACH,MAAO,KACX,CACF,EAEai3D,EAA+D,CAC1E,CACE,MAAO,OACP,MAAO,OACP,YAAa,wDACf,EACA,CACE,MAAO,SACP,MAAO,SACP,YACE,kHACJ,EACA,CACE,MAAO,WACP,MAAO,WACP,YAAa,iFACf,EACA,CACE,MAAO,qBACP,MAAO,6BACP,YACE,4KACJ,EACA,CACE,MAAO,YACP,MAAO,YACP,YACE,qIACJ,EACA,CACE,MAAO,MACP,MAAO,MACP,YAAa,kDACf,CACF,EAAE,OAAQC,GACJA,EAAK,QAAU,MACV,MAAQ,gBAAgB,eAE1B,EACR,EAEYptB,EAA+C,CAC1D,CAAE,MAAO,KAAU,IAAK,MAAO,MAAO,YAAa,uBAAwB,EAC3E,CAAE,MAAO,KAAU,IAAK,MAAO,MAAO,YAAa,uBAAwB,EAC3E,CAAE,MAAO,KAAU,KAAM,MAAO,OAAQ,YAAa,uBAAwB,EAC7E,CAAE,MAAO,KAAU,OAAQ,MAAO,SAAU,YAAa,sBAAuB,EAChF,CAAE,MAAO,KAAU,IAAK,MAAO,MAAO,YAAa,2BAA4B,EAC/E,CAAE,MAAO,KAAU,MAAO,MAAO,QAAS,YAAa,0BAA2B,EAClF,CAAE,MAAO,KAAU,KAAM,MAAO,OAAQ,YAAa,oBAAqB,CAC5E,EAEO,IAAKqtB,GAAAA,IACVA,EAAA,OAAS,GACTA,EAAA,kBAAoB,YACpBA,EAAA,eAAiB,SAHPA,IAAAA,GAAA,IAML,MAAMC,EAAoD,CAC/D,CACE,MAAO,GACP,MAAO,SACP,YAAa,uDACf,EACA,CACE,MAAO,SACP,MAAO,0BACP,YAAa,6DACf,EACA,CACE,MAAO,YACP,MAAO,6BACP,YAAa,oEACf,CACF,EAEaC,EAAoD,CAC/D,CAAE,MAAO,KAAU,KAAM,MAAO,OAAQ,YAAa,0BAA2B,EAChF,CAAE,MAAO,KAAU,IAAK,MAAO,MAAO,YAAa,6BAA8B,EACjF,CAAE,MAAO,KAAU,IAAK,MAAO,MAAO,YAAa,6BAA8B,EACjF,CAAE,MAAO,KAAU,KAAM,MAAO,OAAQ,YAAa,6BAA8B,EACnF,CAAE,MAAO,KAAU,IAAK,MAAO,MAAO,YAAa,iCAAkC,CACvF,EAEaC,EAAkD,CAC7D,CAAE,MAAO,MAAO,MAAO,MAAO,YAAa,gCAAiC,EAC5E,CAAE,MAAO,cAAe,MAAO,cAAe,YAAa,gCAAiC,EAC5F,CAAE,MAAO,SAAU,MAAO,SAAU,YAAa,gBAAiB,CACpE,EAEaC,EAA2D,CACtE,CAAE,MAAO,IAAa,QAAS,MAAO,UAAW,EACjD,CAAE,MAAO,IAAa,QAAS,MAAO,UAAW,EACjD,CAAE,MAAO,IAAa,QAAS,MAAO,aAAc,EACpD,CAAE,MAAO,IAAa,WAAY,MAAO,iBAAkB,EAC3D,CAAE,MAAO,IAAa,mBAAoB,MAAO,sBAAuB,EACxE,CAAE,MAAO,IAAa,gBAAiB,MAAO,sBAAuB,EACrE,CAAE,MAAO,IAAa,cAAe,MAAO,iBAAkB,EAC9D,CAAE,MAAO,IAAa,eAAgB,MAAO,kBAAmB,EAChE,CAAE,MAAO,IAAa,sBAAuB,MAAO,0BAA2B,EAC/E,CAAE,MAAO,IAAa,uBAAwB,MAAO,2BAA4B,CACnF,C,gICzHO,MAAMC,EAAW,CAAC,CAAE,WAAAC,EAAa,OAAQ,SAAA33D,EAAU,OAAA43D,EAAQ,MAAAp/B,CAAM,IAAa,CACnF,MAAMq/B,EAAc,KAAkB,KAAMx3D,GAAMA,EAAE,QAAUm4B,EAAM,WAAW,EACzEs/B,EAAY,KAAgB,KAAMz3D,GAAMA,EAAE,QAAUm4B,EAAM,SAAS,EAEnEu/B,EAAkB7qD,GAAyC,CAC/DlN,EAAS,CAAE,GAAGw4B,EAAO,OAAQtrB,EAAM,OAAO,KAAM,CAAC,CACnD,EAEM8qD,EAAiB53D,GAAmC,CACxDJ,EAAS,CAAE,GAAGw4B,EAAO,WAAYp4B,EAAM,KAAM,CAAC,CAChD,EAEM63D,EAAuB73D,GAAmC,CAC9DJ,EAAS,CAAE,GAAGw4B,EAAO,YAAap4B,EAAM,KAAM,CAAC,CACjD,EAEM83D,EAAqB93D,GAAmC,CAC5DJ,EAAS,CAAE,GAAGw4B,EAAO,UAAWp4B,EAAM,KAAM,CAAC,CAC/C,EAEA,SACE,oBACE,oBAAC,IAAc,CACb,mBAAC,IAAW,CAAC,SAAO,KAAE,mCAAoC,OAAO,EAAG,WAAAu3D,EAClE,mBAAC,KAAM,CAAC,SAAUK,EAAe,QAASJ,EAAQ,MAAOp/B,EAAM,WAAY,MAAO,GAAI,EACxF,EACF,KACA,QAAC,IAAc,CACb,oBAAC,KACC,SAAO,KAAE,yCAA0C,aAAa,EAChE,WAAAm/B,EACA,WAAS,KAAE,qCAAsC,kBAAkB,EAEnE,mBAAC,IAAK,CAAC,SAAUI,EAAgB,MAAOv/B,EAAM,OAAQ,MAAO,GAAI,EACnE,KACA,OAAC,IAAW,CAAC,SAAO,KAAE,wCAAyC,YAAY,EACzE,mBAAC,KAAM,CAAC,QAAS,KAAmB,MAAOq/B,EAAa,SAAUI,EAAqB,MAAO,GAAI,EACpG,KACA,OAAC,IAAW,CAAC,SAAO,KAAE,sCAAuC,UAAU,EACrE,mBAAC,KAAM,CAAC,QAAS,KAAiB,MAAOH,EAAW,SAAUI,EAAmB,MAAO,GAAI,EAC9F,GACF,GACF,CAEJ,C,qFCrDO,SAASC,EAAkBC,EAA6C,CAC7E,OAAO,IAAI,IAA8BC,GAAe,CACtD,IAAIC,EAAiB,EACrBF,EAAM,QAASG,GAAS,CACtB,MAAMC,EAAS,IAAI,WACnBA,EAAO,kBAAkBD,CAAI,EAC7BC,EAAO,OAAS,IAAM,CACpB,MAAMv2B,EAASu2B,EAAO,OACtB,GAAIv2B,GAAUA,aAAkB,YAAa,CAE3C,MAAMw2B,EADU,IAAI,YAAY,OAAO,EACZ,OAAOx2B,CAAM,EACxC,GAAIs2B,EAAK,OAAS,mBAAoB,CACpC,MAAMG,EAAO,KAAK,MAAMD,CAAU,EAClCJ,EAAW,KAAK,CAAE,WAAY,IAAC,MAAYK,CAAI,CAAC,EAAG,KAAAH,CAAW,CAAC,CACjE,MACEF,EAAW,KAAK,CAAE,cAAY,MAAQI,CAAU,EAAG,KAAAF,CAAW,CAAC,EAE7D,EAAED,GAAkBF,EAAM,QAC5BC,EAAW,SAAS,CAExB,CACF,CACF,CAAC,CACH,CAAC,CACH,C,mNC9BO,MAAMM,EACX,+KAEWC,EAAoC,CAAClsB,EAAkB6B,IAClE,6GAA6G7B,CAAQ,IAAI6B,CAAgB,KAE9HsqB,EAA6CtqB,GACxD,8HAA8HA,CAAgB,KAEnIuqB,EAA6C,oOAE7CC,EACX,kOAEWC,EAAgB,oBAEhBC,EAAsB,0BAEtBC,EAA6B,yDAE7BC,EAA6B,gEAE7BC,EAA2B,0CAE3BC,EACX,4IAEWC,EAAmC,wDAEnCC,EACX,wQAEWC,EACX,8KAEWC,EACX,4PAEWC,EAA+B,+DAE/BC,EACX,kPAEWC,EACX,yPAEWC,EACX,2EAEWC,EACX,+MAEWC,EAAiBrtB,GAAqB,kCAAkCA,CAAQ,kB,kGCJtF,MAAMstB,EAAyC,OAAO,OAAO,CAClE,MAAO,GACP,KAAM,KAAkB,MACxB,MAAO,EACT,CAAC,EAaM,IAAKC,GAAAA,IACVA,EAAA,KAAO,oBACPA,EAAA,IAAM,gBACNA,EAAA,OAAS,mBACTA,EAAA,GAAK,SAJKA,IAAAA,GAAA,IAOAC,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,QAFEA,IAAAA,GAAA,IAKAC,GAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,IAAM,MACNA,EAAA,OAAS,SAHCA,IAAAA,GAAA,IAMAC,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,OAAS,SAFCA,IAAAA,GAAA,G,2JC7DL,SAASC,EAAwBC,EAAiE,CACvG,KAAM,CAAE,eAAAC,EAAgB,WAAAC,EAAY,YAAAC,EAAa,UAAAC,EAAW,OAAA9lC,CAAO,EAAI0lC,EAAc,MAC/EK,KAAW,MAA0B,EAE3C,MAAO,CACL,KAAM,iBACN,KAAM,CACJ,eAAAJ,EACA,WAAYC,IAAeG,EAAS,WAAa,OAAYH,EAC7D,GAAGI,EAA6BH,CAAW,EAC3C,GAAGI,EAA2BH,CAAS,EACvC,MAAO9lC,EAAO,MAAM,SAAS,IAAIkmC,CAAqB,CACxD,CACF,CACF,CAEO,SAASA,EAAsB3lD,EAA4C,CAIhF,MAAM4lD,EAAqC,CACzC,KAAM,qBACN,KAAM,CACJ,QAAS,CACP,KAAM,mBACN,KAPa,KAAoB,gCAAgC5lD,EAAK,OAAO,IAAI,CAQnF,CACF,CACF,EAEM6lD,EAAgC7lD,EAAK,MAAM,sBAAsB,UAAU,EAEjF,OAAI6lD,GAA+B,KAAK,MAAM,SAC5CD,EAAW,KAAK,qBAAuBC,GAGrC7lD,EAAK,MAAM,eACb4lD,EAAW,KAAK,OAAS,CACvB,KAAM,WACN,MAAO5lD,EAAK,MAAM,YACpB,GAGK4lD,CACT,CAEO,SAASE,EACdrmC,EACAsmC,EACAC,EACAC,EACuB,CACvB,GAAIxmC,EAAO,OAAS,iBAClB,MAAM,IAAI,MAAM,qBAAqB,EAGvC,MAAM+lC,KAAW,MAA0B,EACrC,CAAE,eAAAJ,EAAgB,gBAAAc,EAAiB,YAAAZ,EAAa,cAAAa,EAAe,UAAAZ,EAAW,WAAAF,CAAW,EAAI5lC,EAAO,KAEhGprB,EAAWorB,EAAO,KAAK,MAAM,IAAKzf,GAASomD,EAAwBpmD,EAAM+lD,EAAUE,CAAgB,CAAC,EAEpGI,EAAsBH,IAAoB,SAAWZ,EAAcY,EACnEI,EAAoBH,IAAkB,SAAWZ,EAAYY,EAEnE,OAAO,IAAI,KAAsB,CAC/B,eAAAf,EACA,YAAaiB,EACb,UAAWC,EACX,WAAYjB,GAAcG,EAAS,WACnC,OAAQ,IAAI,IAAe,CACzB,mBAAiB,MACfJ,GAAkBI,EAAS,eAC3Ba,GAAuB,GACzB,EACA,YAAU,MAAoBC,GAAqB,KAA8BjB,GAAc,EAAK,EACpG,SAAAhxD,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAASoxD,EAA6BH,EAAkC,CACtE,MAAO,CACL,gBAAiB,OAAOA,GAAgB,SAAW,SAAWA,EAC9D,YAAa,OAAOA,GAAgB,SAAWA,EAAc,MAC/D,CACF,CAEA,SAASI,EAA2BH,EAA8B,CAChE,MAAO,CACL,cAAe,OAAOA,GAAc,SAAW,SAAWA,EAC1D,UAAW,OAAOA,GAAc,SAAWA,EAAY,MACzD,CACF,CAEO,SAASa,EACdpmD,EACA+lD,EACAE,EACc,CACd,MAAM33D,EAAQy3D,EAAS/lD,EAAK,KAAK,QAAQ,IAAI,EAC7C,GAAI,CAAC1R,EACH,MAAM,IAAI,MAAM,kBAAkB0R,EAAK,KAAK,QAAQ,IAAI,sCAAsC,EAEhG,IAAIsY,EACJ,OAAI2tC,IACF3tC,EAAK2tC,EAAiB,GAEjB,IAAI,IAAa,CACtB,OAAK,MAAyB3tC,GAAMhqB,EAAM,KAAK,EAAE,EACjD,KAAMA,EAAM,OAAS,kBAAiB,MAAkBA,EAAOgqB,CAAE,KAAI,MAAchqB,EAAOgqB,CAAE,EAC5F,aAActY,EAAK,KAAK,QAAQ,MAChC,wBAAsB,MAAwBA,CAAI,CACpD,CAAC,CACH,C,gGChIO,MAAMumD,EAAiB,IAAM,CAClC,MAAMC,KAAc,MAA2B,OAAW,CAAE,KAAM,CAAC,KAAW,KAAK,UAAW,CAAC,EACzFC,KAAc,WAAQ,IAAMD,EAAY,MAAM,QAAQ,cAAgB,CAAC,EAAG,CAACA,CAAW,CAAC,EAE7F,OAAI,IAAO,eAAe,YACjBC,EAEF,CAAC,CACV,C,qFCVO,MAAMC,CAAyB,CAIpC,YAAYh5C,EAAe,CAH3B,KAAQ,SAAW,IAAI,IAIrB,KAAK,OAASA,CAChB,CAEA,UAAW,CAET,OAAOi5C,EAAe,IAAI,CAC5B,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CAEA,SAASC,EAAyB,CAChC,KAAK,OAAS,CACZ,GAAG,KAAK,OACR,GAAGA,CACL,EACA,KAAK,SAAS,KAAK,KAAK,MAAM,CAChC,CAKA,iBAAiBC,EAA0D,CACzE,OAAO,KAAK,SAAS,UAAUA,CAAc,CAC/C,CACF,CAKA,SAASF,EAAuBlrC,EAAyC,CACvE,MAAMqrC,KAAc,KAAe,EAEnC,sBAAU,IAAM,CACd,MAAMt1D,EAAIiqB,EAAM,iBAAiB,CAAE,KAAMqrC,CAAY,CAAC,EACtD,MAAO,IAAMt1D,EAAE,YAAY,CAC7B,EAAG,CAACiqB,EAAOqrC,CAAW,CAAC,EAEhBrrC,EAAM,KACf,C,gGC1CO,SAASsrC,EAAyB3zB,EAAkC,CACzE,MAAM4zB,KAAmB,UAAe,CAAC,EAuBzC,SArBkB,eACf/7D,GAAa,CACZ+7D,EAAiB,UACjB,MAAMC,EAAeD,EAAiB,QAEtC,OAAO,IAAI,QAAW,CAACE,EAASC,IAAW,CACzC/zB,EAAGnoC,CAAK,EACL,KAAM6hC,GAAW,CAEZm6B,IAAiBD,EAAiB,QACpCE,EAAQp6B,CAAM,EAEdq6B,EAAO,IAAIC,CAAkB,CAEjC,CAAC,EACA,MAAMD,CAAM,CACjB,CAAC,CACH,EACA,CAAC/zB,CAAE,CACL,CAGF,CAEO,MAAMg0B,UAAyB,KAAM,CAC1C,aAAc,CACZ,MAAM,uCAAuC,EAC7C,KAAK,KAAO,mBACZ,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CACF,CCzBA,MAAMC,EAAY,IAAM,QAAQ,QAAQ,CAAC,CAAC,EAE7BC,EAAmB,IAWzB,SAASC,EAAsCC,EAA6BC,EAA4B,CAC7G,MAAMC,EAAU,OAAOF,GAAe,WAEhChwD,EAAcuvD,EAAmBW,EAAUF,EAAaH,CAAS,EAEjEM,KAAuB,WAC3B,OACE,YAAU3W,GACDx5C,EAAYw5C,CAAU,EAC1B,KAAMviD,GAAY,CACjBm5D,EAAgBn5D,CAAO,EACvBo5D,EAAgB,EAAK,EACrBC,EAAc,EAAK,CACrB,CAAC,EACA,MAAOnsD,GAAU,CACVA,aAAiByrD,IACrBU,EAAc,EAAI,EAClBD,EAAgB,EAAK,EAEjBlsD,GACF,QAAQ,MAAM,2CAA4CA,CAAK,EAGrE,CAAC,EACF2rD,CAAgB,EACrB,CAAC9vD,CAAW,CACd,EAEM,CAACuwD,EAAcH,CAAe,KAAI,YAAmC,CAAC,CAAC,EACvE,CAACI,EAAcH,CAAe,KAAI,YAAS,EAAK,EAChD,CAACI,EAAYH,CAAa,KAAI,YAAS,EAAK,EAI5C,CAACI,EAAiBC,CAAkB,KAAI,YAAS,EAAE,EAEnDC,KAAiB,eACpBx4D,GAAmC,CAClC,IAAIy4D,EAA2Cz4D,EAC/C,OAAI63D,GAAqBS,IAGGt4D,EAAK,KAAM04D,GAAQA,EAAI,QAAUJ,CAAe,IAGxEG,EAAiBA,EAAe,MAAM,EACtCA,EAAe,QAAQ,CACrB,MAAOH,EACP,MAAOA,EACP,eAAa,KAAE,oCAAqC,kBAAkB,CACxE,CAAC,IAGEG,CACT,EACA,CAACZ,EAAmBS,CAAe,CACrC,EAEMK,KAAgB,eACnBC,GAAuB,CACtBL,EAAmBK,CAAU,EACzBd,IACFG,EAAgB,EAAI,EACpBF,EAAqBa,CAAU,EAEnC,EACA,CAACb,EAAsBD,CAAO,CAChC,EAEMe,KAAqB,WAAQ,IAC1Bf,EAAU,CAAC,EAAIF,EAAW,IAAI,GAAY,EAChD,CAACE,EAASF,CAAU,CAAC,EAIlBkB,KAAkB,WAAQ,IAC1BhB,EACKK,KAGF,KAAUP,EAAYiB,EAAoBP,CAAe,EAC/D,CAACH,EAAcL,EAASF,EAAYiB,EAAoBP,CAAe,CAAC,EAErE,CAACS,EAAcC,CAAiB,KAAI,WAAQ,IAAM,CACtD,KAAM,CAAE,QAAAn6D,EAAS,kBAAAm6D,CAAkB,EAAIC,EAAYH,CAAe,EAElE,MAAO,CAACN,EAAe35D,CAAO,EAAGm6D,CAAiB,CACpD,EAAG,CAACF,EAAiBN,CAAc,CAAC,EAEpC,MAAO,CAAE,QAASO,EAAc,kBAAAC,EAAmB,cAAAL,EAAe,aAAAP,EAAc,WAAAC,CAAW,CAC7F,CAKO,SAASY,EAAuCp6D,EAAmC,CAExF,MAAMq6D,EAAiB,IAAI,IACrBF,EAAoB,IAAI,IAE9B,UAAWh0D,KAAUnG,EAAS,CAC5B,MAAMqU,EAAQlO,EAAO,MACf+8B,EAAWm3B,EAAe,IAAIhmD,CAAK,EACrC6uB,EACFA,EAAS,KAAK/8B,CAAM,EAEpBk0D,EAAe,IAAIhmD,EAAO,CAAClO,CAAM,CAAC,CAEtC,CAGA,GAAIk0D,EAAe,MAAQ,EACzB,OAAIr6D,EAAQ,CAAC,GAAG,OACdm6D,EAAkB,IAAIn6D,EAAQ,CAAC,GAAG,MAAO,CAAC,EAGrC,CACL,QAAAA,EACA,kBAAAm6D,CACF,EAIF,MAAM97B,EAAmC,IAAI,MAAMr+B,EAAQ,MAAM,EAEjE,IAAIs6D,EAAe,EAGnB,SAAW,CAACjmD,EAAOkmD,CAAY,IAAKF,EAAgB,CAC9ChmD,GACF8lD,EAAkB,IAAI9lD,EAAOimD,CAAY,EAE3C,UAAWn0D,KAAUo0D,EACnBl8B,EAAOi8B,GAAc,EAAIn0D,CAE7B,CAEA,MAAO,CACL,QAASk4B,EACT,kBAAA87B,CACF,CACF,C,2MChJA,MAAMK,EAAsB,gBAAyC,MAAS,EAQxEC,EAAuB,CAAC,CAAE,SAAA70D,EAAU,WAAA80D,EAAY,uBAAAC,CAAuB,IAAa,CACxF,MAAMnN,EAAc,KAAgB,UAAU,EACxCoN,EAAoB,KAAgB,QACpCC,KAA4B,KAA6BH,CAAU,EACnEI,EAAuB,IAAO,eAAe,8BAAgC,GAE7E,CAAE,KAAMC,CAAc,KAAI,KAAsBD,EAAuB,KAA4B,OAAW,CAClH,eAAgB,GAChB,mBAAoB,EACtB,CAAC,EACKE,EAAkB,GAAQD,GAAe,cAAgBA,EAAc,aAAa,OAAS,GAE7FE,EAAyB,UAAc,IAAM,CACjD,MAAMC,EAAuBL,EAA0B,6BAA6B,OAClFA,EAA0B,4BAC5B,EAEMM,EACJL,GAAwBE,EACpB,CACE,CACE,KAAM,IACN,YAAa,qBACb,OAAQ,EACR,oBAAqB,GACrB,2BAA4B,EAC9B,CACF,EACA,CAAC,EAGDI,GAAsBF,EAAqB,KAAMG,IAAOA,GAAG,OAAS,IAAyB,EAC7FC,EAA0BJ,EAAqB,OAAQG,IAAOA,GAAG,OAAS,IAAyB,EACnGE,GAAiD,CAAC,EAExD,OAAIH,IACFG,GAAqB,KAAKH,EAAmB,EAG/CG,GAAqB,KAAK,GAAGJ,CAAqB,EAClDI,GAAqB,KAAK,GAAGD,CAAuB,EAE7CC,EACT,EAAG,CAACV,EAA2BC,EAAsBE,CAAe,CAAC,EAE/DQ,EAA6B,cAChCC,GAAiC,CAC3BC,EAAwBT,EAAwBQ,CAAoB,IAIrEA,IAAyB,MAC3B,IAAM,OAAO,IAAmC,EAChDb,EAAkB,CAAE,CAAC,IAA2B,EAAG,MAAU,CAAC,IAE9D,IAAM,IAAI,KAAqCa,CAAoB,EACnEb,EAAkB,CAAE,CAAC,IAA2B,EAAGa,CAAqB,CAAC,GAE7E,EACA,CAACR,EAAwBL,CAAiB,CAC5C,EAEMe,EAAkBnO,EAAY,IAAI,IAA2B,EAC7DoO,EAAkB,IAAM,IAAI,IAAmC,EAC/DC,EAAgB,KAKtB,YAAgB,IAAM,CAChBF,GAAmBA,IAAoBC,GACzC,IAAM,IAAI,KAAqCD,CAAe,CAElE,EAAG,CAACA,EAAiBC,CAAe,CAAC,EAGrC,MAAME,EAAsBnB,GAA0BgB,GAAmBC,GAAmBC,EACtFE,EAAuBL,EAAwBT,EAAwBa,CAAmB,EAC5FA,EACA,OAEEE,EAA6B,UAAc,IAC3CD,MAAwB,KAAcA,CAAoB,EACb,CAC7C,eAAgB,KAA2B,WAC3C,2BAA4B,EAC9B,KAGK,MAAgCA,CAAoB,GAAG,SAC7D,CAACA,CAAoB,CAAC,EAGnBE,EAAwBF,IAAyB,KACjDG,EAA8BF,EAChCG,EAA4BH,CAA0B,EACtD,GAIEx/D,EAAiB,CACrB,qBAAAu/D,EACA,oBAJ0BE,GAAyBC,EAKnD,sBAAAD,EACA,2BAAAD,EACA,uBAAAf,EACA,wBAAyBO,CAC3B,EAEA,SAAO,OAAChB,EAAoB,SAApB,CAA6B,MAAAh+D,EAAe,SAAAoJ,CAAA,CAAS,CAC/D,EAEA,SAASw2D,GAAkB,CACzB,MAAM5iD,EAAU,aAAiBghD,CAAmB,EAEpD,GAAIhhD,IAAY,OACd,MAAM,IAAI,MAAM,2DAA2D,EAG7E,OAAOA,CACT,CAIA,SAASkiD,EAAwBT,EAAkDoB,EAA0B,CAE3G,OADoCpB,EAAuB,IAAKI,GAAOA,EAAG,IAAI,EAC3C,SAASgB,CAAgB,CAC9D,CAIA,MAAMC,EAA0C,CAC9C,KAA2B,MAC3B,KAA2B,OAC3B,MACF,EAEO,SAASH,EAA4BI,EAA2D,CACrG,OAAOD,EAAwC,SAASC,EAAiB,cAAc,CACzF,C,qFCnKO,SAASC,EAAoB,CAAE,UAAAx1D,EAAW,qBAAAy1D,CAAqB,EAAU,CAC9E,MAAMl2D,KAAS,MAAWuD,CAAS,EAEnC,OAAI2yD,KACK,OAAC,OAAI,aAAW,MAAGz1D,EAAWT,EAAO,oBAAoB,EAAG,KAG9D,OAAC,OAAI,aAAW,MAAGS,EAAWT,EAAO,IAAI,EAAG,CACrD,CAEA,MAAMuD,EAAanF,IACV,CACL,wBAAsB,OAAI,CACxB,QAAS,OACT,SAAU,CACZ,CAAC,EACD,QAAM,OAAI,CACR,MAAO,EACP,gBAAiBA,EAAM,OAAO,OAAO,OACrC,OAAQ,GACR,WAAY,EACZ,SAAU,EACV,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,QAAS,MACX,CACF,CAAC,CACH,E,wGC5BK,SAAS+3D,GAA2B,CACzC,MAAMC,KAAY,UAAO,IAAI,GAA8B,EAC3D,MAAO,CACL,eAAgBA,EAAU,QAC1B,UAAYpwD,GAA6C,CACvD,OAAQA,EAAE,KAAM,CACd,IAAK,YACL,IAAK,UACL,IAAK,YACL,IAAK,aACL,IAAK,QACL,IAAK,SACHowD,EAAU,QAAQ,KAAKpwD,CAAC,EAC1B,QAEF,CACF,CACF,CACF,CAOO,SAASqwD,EACdC,EACAC,EACAz6B,EACe,CACf,MAAM06B,KAAoB,UAAsB,CAAE,EAAG,EAAG,EAAG,EAAG,CAAC,EACzD,CAACC,EAAgBC,CAAiB,KAAI,YAAwB,CAAE,EAAG,EAAG,EAAG,EAAG,CAAC,EAC7EC,KAAU,UAAc,EAG9B,sBAAU,IAAM,CACdA,EAAQ,QAAU76B,EAAS,KAAK,OAAO,IACvC06B,EAAkB,QAAQ,EAAI,EAC9BA,EAAkB,QAAQ,EAAI,GAC9BE,EAAkB,CAAE,GAAGF,EAAkB,OAAQ,CAAC,CACpD,EAAG,CAAC16B,CAAQ,CAAC,KAEb,aAAU,IAAM,CACd,MAAM86B,EAAMN,EAAe,UAAU,CACnC,KAAOO,GAAa,CAClB,OAAQA,GAAU,KAAM,CACtB,IAAK,YAAa,CAChBL,EAAkB,QAAQ,IAC1BE,EAAkB,CAAE,GAAGF,EAAkB,OAAQ,CAAC,EAClD,KACF,CACA,IAAK,UACHA,EAAkB,QAAQ,EAAI,KAAK,IAAI,EAAGA,EAAkB,QAAQ,EAAI,CAAC,EACzEE,EAAkB,CAAE,GAAGF,EAAkB,OAAQ,CAAC,EAClD,MACF,IAAK,aAAc,CACbD,EAAa,IACfC,EAAkB,QAAQ,EAAI,KAAK,IAAID,EAAYC,EAAkB,QAAQ,EAAI,CAAC,EAClFE,EAAkB,CAAE,GAAGF,EAAkB,OAAQ,CAAC,GAEpD,KACF,CACA,IAAK,YAAa,CACZD,EAAa,IACfC,EAAkB,QAAQ,EAAI,KAAK,IAAI,EAAGA,EAAkB,QAAQ,EAAI,CAAC,EACzEE,EAAkB,CAAE,GAAGF,EAAkB,OAAQ,CAAC,GAEpD,KACF,CACA,IAAK,QACH,GAAI,CAACG,EAAQ,QACX,MAEF,MAAM30C,EAAMw0C,EAAkB,QAAQ,EAAID,EAAaC,EAAkB,QAAQ,EACjF,GAAIx0C,EAAM,EAAG,CACXw0C,EAAkB,QAAQ,EAAI,EAC9BA,EAAkB,QAAQ,EAAI,EAC9BE,EAAkB,CAAE,GAAGF,EAAkB,OAAQ,CAAC,EAClD,KACF,CACA,MAAM9nC,EAAeioC,EAAQ,QAAQ,SAAS30C,CAAG,EAC7C,OAAO0M,GAAQ,UACjB,KAAgB,KAAK,IAAa,iBAAiBA,CAAG,CAAC,CAE7D,CACF,CACF,CAAC,EAED,MAAO,IAAMkoC,EAAI,YAAY,CAC/B,EAAG,CAACN,EAAgBC,CAAU,CAAC,EAExBE,CACT,C,kFCpGA;AAAA;AAAA,GAsBA,SAASK,EAAU7wB,EAAc5X,EAAwC,CACvE,OAAIA,GAAS,OAAO,KAAKA,CAAK,EAAE,OAAS,IACvC4X,GAAQ,IAAM8wB,EAAY1oC,CAAK,GAE1B4X,CACT,CAEA,SAAS+wB,EAA8Bx7B,EAA+By7B,EAA2B,CAC/F,OAAO,mBAAmBz7B,CAAG,EAC1B,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,OAAQ,GAAG,EACnB,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,OAAQy7B,EAAkB,MAAQ,GAAG,EAC7C,QAAQ,WAAY,SAAUvxD,EAAG,CAChC,MAAO,IAAMA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CACxD,CAAC,CACL,CAOA,SAASqxD,EAAY97C,EAAQi8C,EAAoB,GAAM,CACrD,MAAM16D,EAAW,CAAC,EACZ26D,EAAW,QAEXC,EAAmBF,EACrB,CAACjhE,EAAiCghE,IAChCD,EAA8B/gE,EAAOghE,CAAe,EACtD,CAAChhE,EAAiCmH,IAAe,mBAAmBnH,CAAK,EAEvEohE,EAAWpnC,GACR,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,iBAG3CqnC,EAAM,CAACrP,EAAWzsD,IAAW,CACjCA,EAAI,OAAOA,GAAM,WAAaA,EAAE,EAAIA,IAAM,MAAYA,IAAM,OAAX,GAA4BA,EAC7EgB,EAAEA,EAAE,MAAM,EAAI46D,EAAiBnP,EAAG,EAAI,EAAI,IAAMmP,EAAiB57D,EAAG,EAAI,CAC1E,EAEM+7D,EAAc,CAACC,EAAgBvnC,IAAa,CAChD,IAAIlzB,EAAGiZ,EAAK2H,EAEZ,GAAI65C,EACF,GAAIH,EAAQpnC,CAAG,EACb,IAAKlzB,EAAI,EAAGiZ,EAAMia,EAAI,OAAQlzB,EAAIiZ,EAAKjZ,IACjCo6D,EAAS,KAAKK,CAAM,EACtBF,EAAIE,EAAQvnC,EAAIlzB,CAAC,CAAC,EAElBw6D,EAAYC,EAAQvnC,EAAIlzB,CAAC,CAAC,UAGrBkzB,GAAO,OAAOA,CAAG,IAAM,kBAChC,IAAKtS,KAAOsS,EACVsnC,EAAYC,EAAS,IAAM75C,EAAM,IAAKsS,EAAItS,CAAG,CAAC,OAGhD25C,EAAIE,EAAQvnC,CAAG,UAERonC,EAAQpnC,CAAG,EACpB,IAAKlzB,EAAI,EAAGiZ,EAAMia,EAAI,OAAQlzB,EAAIiZ,EAAKjZ,IACrCu6D,EAAIrnC,EAAIlzB,CAAC,EAAE,KAAMkzB,EAAIlzB,CAAC,EAAE,KAAK,MAG/B,KAAK4gB,KAAOsS,EACVsnC,EAAY55C,EAAKsS,EAAItS,CAAG,CAAC,EAG7B,OAAOnhB,CACT,EAEA,OAAO+6D,EAAY,GAAIt8C,CAAC,EAAE,KAAK,GAAG,CACpC,CAQA,SAASw8C,EAAgBC,EAAyB,CAChD,OAAOX,EAAYW,EAAQ,EAAK,CAClC,CAEA,SAASC,EAAiBjpC,EAAakpC,EAAwB,CAC7D,GAAoCA,GAAmB,MAAQA,IAAmB,GAAI,CACpF,MAAMlnD,EAAMge,EAAI,QAAQ,GAAG,EACvBhe,IAAQ,GACNge,EAAI,OAAShe,EAAM,IACrBge,GAAO,KAGTA,GAAO,IAETA,GAAOkpC,CACT,CAEA,OAAOlpC,CACT,CAKA,SAASmpC,GAAkC,CAEzC,MAAMC,EADS,OAAO,SAAS,OAAO,UAAU,CAAC,EACb,MAAM,GAAG,EACvCJ,EAAsB,CAAC,EAC7B,UAAW9+B,KAAKk/B,EAAsB,CACpC,MAAMC,EAAen/B,EAAE,MAAM,GAAG,EAChC,GAAIm/B,EAAa,OAAS,EAAG,CAE3B,MAAMp6C,EAAM,mBAAmBo6C,EAAa,CAAC,CAAC,EACxC9hE,EAAQ,mBAAmB8hE,EAAa,CAAC,CAAC,EAC5Cp6C,KAAO+5C,EACTA,EAAO/5C,CAAG,EAAI,CAAC,GAAI+5C,EAAO/5C,CAAG,EAAa1nB,CAAK,EAE/CyhE,EAAO/5C,CAAG,EAAI,CAAC1nB,CAAK,CAExB,SAAW8hE,EAAa,SAAW,EAAG,CAEpC,MAAMp6C,EAAM,mBAAmBo6C,EAAa,CAAC,CAAC,EAC9CL,EAAO/5C,CAAG,EAAI,EAChB,CACF,CACA,OAAO+5C,CACT,CAOO,SAASM,EAAcC,EAAkB,CAC9C,MAAMhoC,EAAW,CAAC,EACZo4B,GAAS4P,GAAY,IAAI,MAAM,GAAG,EAExC,QAASA,KAAY5P,EAAO,CAC1B,IAAI6P,EACAv6C,EACA6d,EAEJ,GAAIy8B,IACFt6C,EAAMs6C,EAAWA,EAAS,QAAQ,MAAO,KAAK,EAC9CC,EAAaD,EAAS,QAAQ,GAAG,EAE7BC,IAAe,KACjBv6C,EAAMs6C,EAAS,UAAU,EAAGC,CAAU,EACtC18B,EAAMy8B,EAAS,UAAUC,EAAa,CAAC,GAGzCv6C,EAAMw6C,EAAsBx6C,CAAG,EAE3BA,IAAQ,QAAW,CACrB6d,EAAMA,IAAQ,OAAY28B,EAAsB38B,CAAa,EAAI,GAEjE,IAAI48B,EACA,OAAO58B,GAAQ,UAAYA,IAAQ,GACrC48B,EAAY58B,IAAQ,QAAUA,IAAQ,QAAUA,IAAQ,OAASA,EAEjE48B,EAAY58B,EAGTvL,EAAI,eAAetS,CAAG,EAEhB,MAAM,QAAQsS,EAAItS,CAAG,CAAC,EAC/BsS,EAAItS,CAAG,EAAE,KAAK6d,CAAG,EAEjBvL,EAAItS,CAAG,EAAI,CAACsS,EAAItS,CAAG,EAAG,MAAMy6C,CAAS,EAAI58B,EAAM48B,CAAS,EAJxDnoC,EAAItS,CAAG,EAAI,MAAMy6C,CAAS,EAAI58B,EAAM48B,CAMxC,CAEJ,CAEA,OAAOnoC,CACT,CAEA,SAASkoC,EAAsBliE,EAAmC,CAChE,GAAI,CACF,OAAO,mBAAmBA,CAAK,CACjC,MAAY,CACV,MACF,CACF,CAEO,MAAMoiE,EAAU,CACrB,UAAAvB,EACA,YAAAC,EACA,iBAAAY,EACA,mBAAAE,EACA,cAAAG,EACA,gBAAAP,CACF,EAUO,SAASa,EAAyBC,EAAoCnnB,EAA2B,CACtG,OAAIA,IAAY,QACd,QAAQ,KAAK,2EAA2E,EAEnF,KAAK,UAAUmnB,CAAQ,CAChC,CAOO,MAAMC,EAAcn0D,GAAkC,CAC3D,IAAI6iB,EAAO7iB,EAAM,QACb,MAAW6iB,CAAI,IACjBA,EAAOA,EAAK,QAAQ,EAAE,SAAS,GAGjC,IAAID,EAAK5iB,EAAM,GACf,SAAI,MAAW4iB,CAAE,IACfA,EAAKA,EAAG,QAAQ,EAAE,SAAS,GAGtB,CACL,KAAAC,EACA,GAAAD,CACF,CACF,C,qFClPO,MAAM2tB,UAAgB,eAA4B,CACvD,QAAS,CACP,SAAO,OAAC,IAAY,CAAE,GAAG,KAAK,MAAO,CACvC,CACF,C,oJCyCO,MAAM6jB,EACX,IACA,MAAO,CAAE,KAAAt1B,EAAM,oBAAAu1B,EAAsB,CAAC,EAAG,GAAGxU,CAAe,EAAGyU,EAAKC,IAA2C,CAC5G,KAAM,CAAE,aAAAlU,EAAc,eAAAmU,EAAgB,eAAAC,EAAgB,iBAAAC,CAAiB,EAAIL,EACrE,CAAE,iBAAAM,CAAiB,EAAIJ,GAAgB,CAAC,EAE9C,GAAI,CACF,MAAMK,EAA4C,CAChD,GAAG/U,EACH,GAAI/gB,GAAQ,CAAE,KAAMA,CAAK,EACzB,MAAI,aAAU41B,CAAgB,GAAK,CAAE,iBAAAA,CAAiB,EACtD,MAAI,aAAUF,CAAc,GAAK,CAAE,eAAAA,CAAe,EAClD,GAAIC,GAAkB,CAAE,iBAAkB,EAAM,EAChD,IAAKpU,GAAgBsU,IAAqB,CAAE,eAAgB,EAAM,CACpE,EAEME,EAAiB,YAAY,IAAI,EAEjC,CAAE,KAAA9+D,EAAM,GAAGw3B,CAAK,EAAI,QAAM,QAAc,MAAc,EAAE,MAAMqnC,CAAsB,CAAC,EAE3F,eACE,sBACA,CACE,WAAY,YAAY,IAAI,EAAIC,CAClC,EACA,CACE,IAAKhV,EAAe,IACpB,OAAQA,EAAe,QAAU,MACjC,eAAgBtyB,EAAK,UACvB,CACF,EAEIknC,GAAkBC,IAAqB,IACzC,IAAU,KAAK,KAAU,aAAc,CAACD,CAAc,CAAC,EAElD,CAAE,KAAA1+D,EAAM,KAAAw3B,CAAK,CACtB,OAASjrB,EAAO,CACd,OAAI+9C,GAAgBmU,IAAmB,IACrC,IAAU,KAAK,KAAU,WAAY,CAACnU,CAAY,CAAC,EAE9C,CAAE,MAAA/9C,CAAM,CACjB,CACF,EAEWwyD,KAAc,MAAU,CACnC,YAAa,cACb,UAAWV,EAAoB,EAU/B,mBAAqBx1B,MAAS,SAA0B,QAAKA,EAAM,+BAA+B,CAAC,EACnG,SAAU,CACR,wBACA,4BACA,+BACA,qBACA,uBACA,qBACA,qBACA,gBACA,oBACA,mBACA,0BACA,aACA,YACA,gBACA,eACA,sBACA,WACA,eACA,yBACF,EACA,UAAW,KAAO,CAAC,EACrB,CAAC,C,0EC3HM,SAAS/5B,EAAe,CAAE,KAAA9P,EAAM,YAAAuL,CAAY,EAAwB,CACzE,SACE,OAAC,KACC,KAAMvL,EAAK,KACX,OAAQA,EAAK,OACb,IAAI,aACJ,QACEA,EAAK,QACA2J,GAAU,CACL,EAAEA,EAAM,SAAWA,EAAM,SAAWA,EAAM,WAAa3J,EAAK,UAC9D2J,EAAM,eAAe,EACrB3J,EAAK,QAAQ2J,CAAK,EAEtB,EACA,OAGN,mBAAC,MACC,KAAM3J,EAAK,SAAW,SAAW,oBAAsB,OACvD,QAAQ,UACR,KAAK,KACJ,GAAGuL,EAEH,SAAAvL,EAAK,MACR,EACF,CAEJ,C,8HCnBO,SAASggE,EAAYnjE,EAAmC,CAC7D,MAAO,CAAC,WAAY,SAAU,QAAQ,EAAE,SAASA,CAAK,CACxD,CAMO,SAASojE,EAAahiC,EAA8B,CACzD,GAAIA,GAAY+hC,EAAY/hC,CAAQ,EAClC,OAAOA,EAGT,MAAMiiC,EAAa,QAAQ,iBAAiB,MAAM,UAClD,OAAIA,GAAcF,EAAYE,CAAU,EAC/BA,EAGF,QACT,CAKO,MAAMC,EAAmBt6D,GAAiB,CAC/C,KAAM,CAAE,SAAApJ,EAAU,MAAA2H,EAAO,UAAAwD,EAAY,GAAO,OAAAE,EAAQ,MAAAjL,EAAO,SAAAkN,EAAW,GAAO,QAAAoI,CAAQ,EAAItM,EACnFu6D,KAA+B,WACnC,IAAM,CACJ,CAAE,MAAO,GAAI,SAAO,KAAE,wDAAyD,SAAS,CAAE,EAC1F,CAAE,MAAO,WAAY,SAAO,KAAE,yDAA0D,UAAU,CAAE,EACpG,CAAE,MAAO,SAAU,SAAO,KAAE,uDAAwD,QAAQ,CAAE,EAC9F,CAAE,MAAO,SAAU,SAAO,KAAE,uDAAwD,QAAQ,CAAE,CAChG,EACA,CAAC,CACH,EAEMC,KAAoB,eACvBC,GAAsC,CACjCA,GAAcA,EAAW,QAAU,QACrC7jE,EAASujE,EAAYM,EAAW,KAAK,EAAIA,EAAW,MAAQ,MAAS,CAEzE,EACA,CAAC7jE,CAAQ,CACX,EAEM8jE,KAAW,WAAQ,IAAMH,EAAW,KAAMxuD,GAASA,EAAK,QAAU/U,CAAK,GAAG,OAAS,GAAI,CAACA,EAAOujE,CAAU,CAAC,EAEhH,SACE,OAAC,KACC,GAAIjuD,EACJ,MAAOouD,EACP,YAAa,KAAU,WAAW,gBAAgB,YAClD,UAAA34D,EACA,MAAAxD,EACA,QAASg8D,EACT,SAAUC,EACV,OAAAv4D,EACA,SAAAiC,CAAA,CACF,CAEJ,C,kKC5EA,MAAMy2D,EAAqE,KAAqB,IAAKp4C,IAAW,CAC9G,MAAOA,EAEP,MAAOA,EAAM,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,EAAE,QAAQ,IAAK,GAAG,CACjE,EAAE,EAOK,SAASq4C,EAAkB56D,EAAc,CAC9C,KAAM,CAAE,WAAA66D,EAAY,mBAAAC,CAAmB,EAAI96D,EAC3C,SACE,OAAC+6D,EAAA,EAAgB,CAAC,KAAK,KAAK,QAASJ,EAAyB,MAAOE,EAAY,SAAUC,CAAA,CAAoB,CAEnH,C,eCjBA,MAAME,EAAkB,8BACXC,EAAmBJ,GAA6B,CAC3D,MAAM,IAAIG,EAAiBH,CAAU,CACvC,EAEaK,EAAiB,IACrBC,EAAa,IAAM,IAAIH,CAAe,CAAC,EAG1CI,EAAyC,QAUlCD,EAAgBhgE,GACb,KAAqB,KAAMoB,GAAMA,IAAMpB,CAAI,GACzCigE,ECAZC,EAA4B,GAiBrBC,EAAiB,CAAC,CAC7B,KAAAngE,EACA,SAAA6e,EACA,OAAAxb,EACA,MAAAD,EACA,UAAA+U,EACA,SAAA9E,EACA,YAAA26C,EACA,aAAAoS,EACA,YAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,aAAAC,EACA,cAAAC,CACF,IAAa,CACX,KAAM,CAACC,EAAeC,CAAmB,KAAIC,EAAA,GAAU,EAAK,EACtD,CAAClB,EAAYmB,CAAa,KAAI,YAASd,CAAc,EAErDe,KAAqB,eAAapB,GAAkC,IACxE,MAAgBA,CAAU,EAC1BmB,EAAcnB,CAAU,CAC1B,EAAG,CAAC,CAAC,EAECqB,KAAa,WAAQ,IAClBL,EAAgB1gE,EAAOA,EAAK,MAAM,EAAGkgE,CAAyB,EACpE,CAAClgE,EAAM0gE,CAAa,CAAC,EAExB,SACE,OAACM,EAAA,IACC,SAAO,KAAE,wBAAyB,OAAO,EACzC,WAAY,CACV,CAACN,GAAiBR,EAA4BlgE,EAAK,WACjD,OAACihE,EAAA,GAEC,oBAAAN,EACA,QACE,QAAC,KAAK,CAAC,QAAS,mCAAoC,0BACpC,CAAE,0BAAAT,CAA0B,EAAE,WAC9C,EAEF,eAAa,QAAC,KAAK,CAAC,QAAS,kCAAmC,sBAAU,CAAE,OAAQlgE,EAAK,MAAO,GAAE,EAClG,WAAS,KACP,0BACA,kIACF,GAXI,YAYN,CAEJ,EAAE,OAAO,OAAO,EAChB,MAAAoD,EACA,OAAAC,EACA,aAAAm9D,EACA,cAAAC,EACA,WAAS,OAAChB,EAAiB,CAAC,WAAAC,EAAwB,mBAAoBoB,CAAA,CAAoB,EAE3F,UAACI,EAAYC,OACZ,OAACC,EAAA,GACC,WAAA1B,EACA,KAAMqB,EACN,OAAQI,EACR,MAAOD,EACP,UAAA/oD,EACA,aAAAioD,EACA,SAAA/sD,EACA,YAAA26C,EACA,YAAAqS,EACA,aAAAG,EACA,iBAAAF,EACA,gBAAAC,EACA,SAAA1hD,CAAA,CACF,EAEJ,CAEJ,C,sLC7FO,MAAMwiD,EACX,IAAIC,EAAA,EAA+D,IAC1D,CACL/5B,EAAA,EAA6B,WAC7BG,EAAA,EAAyB,WACzBF,EAAA,EAAkC,UACpC,CACD,E,0BCZI,MAAM+5B,EAA+B,CAAC,CAAE,WAAAC,EAAY,aAAAC,EAAc,MAAAC,CAAM,IAAa,CAC1F,MAAMriE,KAAU,WAA6D,IAAM,CACjF,MAAMsiE,EAAkE,CACtE,CAAE,SAAO,KAAE,4DAA6D,cAAc,EAAG,MAAO,MAAO,EACvG,CACE,SAAO,KAAE,gEAAiE,mBAAmB,EAC7F,MAAO,WACP,WAAY,CAACF,CACf,EACA,CACE,SAAO,KAAE,uEAAwE,sBAAsB,EACvG,MAAO,eACT,CACF,EAEA,OAAID,IAAe,SACjBG,EAAW,MAAM,EAGZA,CACT,EAAG,CAACH,EAAYC,CAAY,CAAC,EAE7B,SACE,OAACG,EAAA,GACC,YAAW,GACX,KAAK,KACL,KAAK,OACL,QAAQ,YACR,SAAO,KAAE,8DAA+D,UAAU,EAClF,QAAAviE,EACA,SAAWmG,GAAWk8D,EAAMl8D,CAAM,EACpC,CAEJ,E,0BCpCO,MAAMq8D,EAAqC,CAAC,CAAE,MAAAhmE,EAAO,SAAAJ,CAAS,IAAa,CAChF,MAAM4D,KAA2D,WAC/D,IAAM,CACJ,CAAE,SAAO,KAAE,iEAAkE,WAAW,EAAG,MAAO,KAAM,EACxG,CAAE,SAAO,KAAE,iEAAkE,WAAW,EAAG,MAAO,IAAK,CACzG,EACA,CAAC,CACH,EAEA,SACE,OAAC6N,EAAA,EAAK,CAAC,SAAO,KAAE,mEAAoE,aAAa,EAAG,SAAQ,GAC1G,mBAAC0yD,EAAA,EAAgB,CAAC,UAAS,GAAC,QAAAvgE,EAAkB,MAAAxD,EAAc,SAAAJ,CAAA,CAAoB,EAClF,CAEJ,ECXaqmE,EAAsC,CAAC,CAAE,WAAAN,EAAY,MAAA3lE,EAAO,SAAAJ,CAAS,IAAa,CAC7F,MAAM4D,KAA4D,WAChE,IAAM,CACJ,CAAE,SAAO,KAAE,mEAAoE,MAAM,EAAG,MAAO,MAAO,EACtG,CAAE,SAAO,KAAE,mEAAoE,MAAM,EAAG,MAAO,MAAO,CACxG,EACA,CAAC,CACH,EAEA,SACE,OAAC6N,EAAA,GACC,SAAO,KAAE,oEAAqE,sBAAuB,CACnG,QAAM,MAAwBs0D,CAAU,CAC1C,CAAC,EACD,SAAQ,GAER,mBAAC5B,EAAA,EAAgB,CAAC,UAAS,GAAC,QAAAvgE,EAAkB,MAAAxD,EAAc,SAAAJ,CAAA,CAAoB,EAClF,CAEJ,ECLO,MAAMgsC,UAAkC,IAAgD,CAC7F,YAAc,UAAYs6B,CAAA,CAKnB,YAAYzjD,EAAuC,CACxD,MAAMA,CAAK,EACX,KAAK,YAAcA,EAAM,aAAe,OACxC,KAAK,gBAAkBA,EAAM,YAAc,MAE3C,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CAEQ,oBAAqB,CAC3B,KAAK,aAAciR,GAAU,CACtBA,EAAM,UACT,KAAK,MAAM,IAAIA,EAAM,SAAS,CAAC,CAEnC,CAAC,EAED,KAAK,MAAM,CACb,CAEO,OAAQ,CAGb,MAAMyyC,EAAkB,KAAK,MAAM,WAAW,OAAQC,GAAcA,EAAU,MAAM,SAAW,MAAS,EAExG,IAAIvkC,EAAS,GAETskC,EAAgB,OAAS,IAC3BtkC,EAAS,KAAK,gBACVskC,EAAgB,MAAOC,GAAcA,EAAU,MAAM,MAAM,EAC3DD,EAAgB,KAAMC,GAAcA,EAAU,MAAM,MAAM,EAEzD,KAAK,cACRvkC,EAAS,CAACA,IAIVA,IAAW,KAAK,MAAM,SACxB,KAAK,SAAS,CAAE,GAAG,KAAK,MAAO,OAAAA,CAAO,CAAC,EACvC,KAAK,aAAa,IAAI,KAAiC,IAAI,EAAG,EAAI,EAEtE,CAEO,iBAAiBwkC,EAAsC,CACxDA,IAAe,KAAK,MAAM,aAC5B,KAAK,YAAcA,IAAe,OAClC,KAAK,SAAS,CAAE,WAAAA,CAAW,CAAC,EAC5B,KAAK,MAAM,EAEf,CAEO,gBAAgBD,EAAoC,CACrDA,IAAc,KAAK,MAAM,YAC3B,KAAK,gBAAkBA,IAAc,MACrC,KAAK,SAAS,CAAE,UAAAA,CAAU,CAAC,EAC3B,KAAK,MAAM,EAEf,CAEO,gBAAgBE,EAA4E,CACjG,OAAQA,EAAe,CACrB,IAAK,OACH,OAAOz6B,EAAA,EAAyB,YAAY,EAE9C,IAAK,gBACH,OAAOF,EAAA,EAAkC,YAAY,EAEvD,IAAK,WACH,OAAOD,EAAA,EAA6B,YAClC,KAAW,gBAAa,MAAqB,IAAI,CAAC,EAAE,MAAM,UAAU,CAAC,EAAE,MAAM,IAC/E,CACJ,CACF,CAEO,aAAa06B,EAA2C,CAC7D,MAAMG,EAAa,CAAC,GAAG,KAAK,MAAM,WAAYH,CAAS,EACvD,KAAK,SAAS,CACZ,WAAAG,EACA,aAAcA,EAAW,KAAMH,GAAcA,aAAqBv6B,EAAA,CAAwB,CAC5F,CAAC,EAEG,KAAK,UAAY,CAACu6B,EAAU,UAC9BA,EAAU,SAAS,EAGrB,KAAK,MAAM,CACb,CAEO,gBAAgBA,EAA2C,CAChE,MAAMG,EAAa,KAAK,MAAM,WAAW,OAAQC,GAAqBA,IAAqBJ,CAAS,EAEpG,KAAK,SAAS,CACZ,WAAAG,EACA,aAAcA,EAAW,KAAMH,GAAcA,aAAqBv6B,EAAA,CAAwB,CAC5F,CAAC,EACD,KAAK,MAAM,CACb,CAEO,oBAAoBu6B,EAA2Cx0D,EAAe,CACnF,MAAM20D,EAAa,CAAC,GAAG,KAAK,MAAM,UAAU,EAC5CA,EAAW,OAAO30D,EAAO,EAAGw0D,CAAS,EACrC,KAAK,SAAS,CAAE,WAAAG,CAAW,CAAC,EAC5B,KAAK,MAAM,CACb,CAEO,qBAAsB,CAC3B,MAAMA,EAAa,CAAC,GAAG,KAAK,MAAM,UAAU,EAC5CA,EAAW,IAAI,EACf,KAAK,SAAS,CAAE,WAAAA,CAAW,CAAC,EAC5B,KAAK,MAAM,CACb,CAEO,kBAAkBH,EAAmD,CAC1E,OAAO,KAAK,MAAM,WAAW,UAAWI,GAAqBA,IAAqBJ,CAAS,CAC7F,CAEO,WAA2C,CAChD,MAAO,CACL,KAAM,4BACN,KAAM,CACJ,WAAY,KAAK,MAAM,WACvB,UAAW,KAAK,MAAM,UACtB,MAAO,KAAK,MAAM,WAAW,IAAKA,GAAcA,EAAU,UAAU,CAAC,CACvE,CACF,CACF,CAEA,OAAc,aAAyC,CACrD,OAAO,IAAIx6B,EAA0B,CACnC,UAAW,MACX,WAAY,OACZ,WAAY,CAAC,EACb,OAAQ,GACR,aAAc,EAChB,CAAC,CACH,CAEA,OAAc,YAAYpb,EAAiE,CACzF,MAAM+1C,EAAa/1C,EAAM,KAAK,MAAM,IAAKzb,GACvCywD,EAAuC,IAAIzwD,EAAK,IAAI,EAAE,YAAYA,CAAI,CACxE,EAEA,OAAO,IAAI62B,EAA0B,CACnC,UAAWpb,EAAM,KAAK,UACtB,WAAYA,EAAM,KAAK,WACvB,WAAA+1C,EACA,OAAQ,GACR,aAAcA,EAAW,KAAMH,GAAcA,aAAqBv6B,EAAA,CAAwB,CAC5F,CAAC,CACH,CACF,CAEA,SAASq6B,EAAkC,CAAE,MAAA11C,CAAM,EAAmD,CACpG,KAAM,CAAE,UAAA41C,EAAW,WAAAC,EAAY,WAAAE,CAAW,EAAI/1C,EAAM,SAAS,EACvD,CAAE,UAAAi2C,CAAU,EAAI,KAAW,aAAaj2C,CAAK,EAAE,SAAS,EACxDm1C,KAAa,WAAQ,OAAM,MAAkBn1C,EAAM,MAAM,EAAG,CAACA,CAAK,CAAC,EAEzE,SACE,QAACmlB,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACswB,EAAA,CACC,WAAAN,EACA,MAAOU,EACP,SAAWrmE,GAAU,CACnB,KAAqB,KAAK,CACxB,eAAa,KAAE,oEAAqE,sBAAuB,CACzG,QAAM,MAAwB2lE,CAAU,CAC1C,CAAC,EACD,OAAQn1C,EACR,QAAS,IAAMA,EAAM,iBAAiBxwB,CAAK,EAC3C,KAAM,IAAMwwB,EAAM,iBAAiB61C,CAAU,CAC/C,CAAC,CACH,EACF,EACCE,EAAW,OAAS,MACnB,OAACP,EAAA,CACC,MAAOI,EACP,SAAWpmE,GAAU,CACnB,KAAqB,KAAK,CACxB,eAAa,KAAE,mEAAoE,aAAa,EAChG,OAAQwwB,EACR,QAAS,IAAMA,EAAM,gBAAgBxwB,CAAK,EAC1C,KAAM,IAAMwwB,EAAM,gBAAgB41C,CAAS,CAC7C,CAAC,CACH,EACF,EAEDG,EAAW,IAAKC,GAAqBA,EAAiB,UAAU,CAAC,KAClE,OAACd,EAAA,CACC,WAAAC,EACA,aAAcc,EAAU,OAAS,EACjC,MAAO,CAAC,CAAE,MAAAzmE,EAAO,MAAA6J,CAAM,IAAM,CAC3B,MAAMu8D,EAAY51C,EAAM,gBAAgBxwB,CAAM,EAE9C,KAAqB,KAAK,CACxB,eAAa,KAAE,8CAA+C,+BAAgC,CAC5F,mBAAiB,aAAU6J,CAAK,CAClC,CAAC,EACD,OAAQ2mB,EACR,QAAS,IAAMA,EAAM,aAAa41C,CAAS,EAC3C,KAAM,IAAM51C,EAAM,oBAAoB,CACxC,CAAC,CACH,EACF,GACF,CAEJ,C,iICnOO,SAASk2C,EAAuB,CAAE,QAAA93D,EAAS,QAAAmI,CAAQ,EAAgC,CACxF,MAAM4vD,EAAkB,KAAW,cAAc,IAAoB,iBAAiB,EAChFC,EAAmB,IAAa,cAAc,IAAmB,cAAc,EAErF,SACE,OAAC,MACC,QAASh4D,GAAW,UACpB,KAAMg4D,EACN,SAAU,CAACD,EACX,QACGA,EAKG,UAJA,KACE,+DACA,0DACF,EAGN,QAAA5vD,EACA,OAAO,SAEP,mBAAC,KAAK,CAAC,QAAQ,yCAAyC,uCAA2B,EACrF,CAEJ,C,kKC2BO,MAAM8vD,EAAe,CAAmB,CAC7C,KAAAC,EACA,MAAA3oB,EACA,aAAA4oB,EAAe,GACf,WAAAC,EACA,SAAAC,EACA,WAAAC,EACA,sBAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,iBAAAC,EAGA,iBAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,WAAAC,CACF,IAA4B,CAC1B,MAAMC,KAA0B,MAAW,GAAmB,EAE9D,IAAKX,GAAcC,GAAYC,IAAe,EAAEF,GAAcC,GAAYC,GACxE,MAAM,IAAI,MAAM,0EAA0E,EAE5F,IAAKH,GAAgBI,IAA0B,EAAEJ,GAAgBI,GAC/D,MAAM,IAAI,MAAM,+EAA+E,EAEjG,MAAMp9D,KAAS,MAAWuD,EAAUw5D,EAAMC,EAAc,CAAC,CAACS,CAAkB,CAAC,EAEvE,CAACI,EAAaC,CAAc,KAAI,YAA6C,CAAC,CAAC,EAE/EC,EAAkB/yD,GAAmC,CACrDmyD,GAAcF,GAAcC,EAC9BC,EAAWnyD,CAAI,EAAIiyD,EAAWjyD,CAAI,EAAIkyD,EAASlyD,CAAI,EAEnD8yD,EACED,EAAY,SAAS7yD,EAAK,EAAE,EAAI6yD,EAAY,OAAQG,GAAWA,IAAWhzD,EAAK,EAAE,EAAI,CAAC,GAAG6yD,EAAa7yD,EAAK,EAAE,CAC/G,CAEJ,EAEMizD,EAAeX,GAAY,cAAgBlpB,EAAM,OACjD,CAAE,KAAA5mB,EAAM,cAAA0wC,EAAe,aAAAC,EAAc,UAAAC,CAAU,KAAI,KAAchqB,EAAO,EAAG6pB,CAAY,EAE7F,SACE,oBACE,qBAAC,OAAI,UAAWj+D,EAAO,UAAW,cAAa29D,GAAc,gBAC3D,qBAAC,OAAI,UAAW39D,EAAO,IAAK,cAAY,SACrC,UAAAy9D,GAAsBA,EAAmB,EACzCT,MAAgB,OAAC,OAAI,UAAWh9D,EAAO,KAAK,EAAG,EAC/C+8D,EAAK,IAAK/2C,MACT,OAAC,OAAI,UAAWhmB,EAAO,KAAKgmB,EAAI,WAAW,EACxC,SAAAA,EAAI,OAD4CA,EAAI,EAEvD,CACD,GACH,EAECo4C,EAAU,IAAI,CAACpzD,EAAMnD,IAAU,CAC9B,MAAMw2D,EAAiBlB,EAAaA,EAAWnyD,CAAI,EAAI6yD,EAAY,SAAS7yD,EAAK,EAAE,EACnF,SACE,QAAC,OACC,UAAWhL,EAAO,IAElB,cAAaq9D,IAAkBryD,EAAMnD,CAAK,GAAK,MAE9C,UAAA21D,GAAoBA,EAAiBxyD,EAAMnD,EAAOusC,CAAK,EACvD4oB,MACC,OAAC,OAAI,aAAW,MAAGh9D,EAAO,KAAK,EAAGA,EAAO,UAAU,EACjD,mBAAC,KACC,QACEq+D,KACI,KAAE,8CAA+C,cAAc,KAC/D,KAAE,4CAA6C,YAAY,EAEjE,cAAa,KAAU,WAAW,WAAW,OAC7C,KAAMA,EAAiB,aAAe,cACtC,QAAS,IAAMN,EAAe/yD,CAAI,EACpC,EACF,EAED+xD,EAAK,IAAK/2C,MACT,OAAC,OACC,aAAW,MAAGhmB,EAAO,KAAKgmB,EAAI,WAAW,EAAGhmB,EAAO,SAAUgmB,EAAI,SAAS,EAC1E,cAAaA,EAAI,MAGhB,SAAAA,EAAI,WAAWhb,EAAMnD,CAAK,GAFtB,GAAGmD,EAAK,EAAE,IAAIgb,EAAI,EAAE,EAG3B,CACD,EACAq4C,GAAkBjB,MACjB,OAAC,OACC,UAAWp9D,EAAO,mBAClB,cAAa,KAAU,WAAW,WAAW,gBAE5C,SAAAo9D,EAAsBpyD,EAAMnD,EAAOusC,CAAK,EAC3C,IAjCG,GAAGppC,EAAK,EAAE,IAAInD,CAAK,EAmC1B,CAEJ,CAAC,EACA61D,MAAa,OAAC,OAAI,aAAW,MAAG19D,EAAO,IAAKA,EAAO,SAAS,EAAI,SAAA09D,CAAA,CAAU,GAC7E,EACCJ,MACC,OAAC,KACC,aAAW,MAAGM,EAAyBL,CAAgB,EACvD,YAAa/vC,EACb,cAAA0wC,EACA,WAAYC,EACZ,mBAAkB,GACpB,GAEJ,CAEJ,EAEM56D,EAAY,CAChBw5D,EACAC,EACAsB,IACG,CACH,MAAMC,EAAQxB,EAAK,IAAK/2C,GACjBA,EAAI,KAIL,OAAOA,EAAI,MAAS,SACf,GAAGA,EAAI,IAAI,KAGbA,EAAI,KAPF,MAQV,EAED,OAAIg3C,GACFuB,EAAM,QAAQ,kBAAkB,EAG9BD,GACFC,EAAM,QAAQ,GAAG,EAGXngE,IAA0B,CAChC,aAAW,OAAI,CACb,OAAQ,aAAaA,EAAM,OAAO,OAAO,IAAI,GAC7C,aAAcA,EAAM,MAAM,OAAO,QACjC,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,EACD,OAAK,OAAI,CACP,QAAS,OACT,oBAAqBmgE,EAAM,KAAK,GAAG,EACnC,iBAAkB,WAElB,sBAAuB,CACrB,gBAAiBngE,EAAM,OAAO,WAAW,SAC3C,EAEA,kBAAmB,CACjB,gBAAiBA,EAAM,OAAO,WAAW,OAC3C,EAEA,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,oBAAqB,WACrB,kBAAmB,aACnB,QAAS,KAAKA,EAAM,QAAQ,EAAG,CAAC,GAEhC,gBAAiB,CACf,QAAS,MACX,EAEA,oBAAqB,CACnB,QAASkgE,EAAgB,OAAS,MACpC,CACF,CACF,CAAC,EACD,aAAW,OAAI,CACb,QAAS,OACT,QAASlgE,EAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,KAAOogE,MACL,OAAI,CACF,QAAS,OACT,WAAY,SACZ,QAASpgE,EAAM,QAAQ,CAAC,EACxB,eAAgBogE,GAAe,UAE/B,CAACpgE,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,QAAS,GAAGA,EAAM,QAAQ,CAAC,CAAC,KAC5B,oBAAqB,KACvB,CACF,CAAC,EACH,YAAU,OAAI,CACZ,SAAU,SAEV,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,cAAe,QACf,gBAAiB,QAEjB,YAAa,CACX,QAAS,oBACT,QAAS,QACT,MAAOA,EAAM,OAAO,KAAK,OAC3B,CACF,CACF,CAAC,EACD,cAAY,OAAI,CACd,eAAgB,SAEhB,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,WAAY,QACZ,SAAU,MACZ,CACF,CAAC,EACD,sBAAoB,OAAI,CACtB,cAAemgE,EAAM,OAAS,EAC9B,gBAAiBD,EAAgB,EAAI,EACrC,QAAS,EACT,QAAS,KAAKlgE,EAAM,QAAQ,CAAC,CAAC,MAAMA,EAAM,QAAQ,CAAC,CAAC,GACpD,SAAU,WAEV,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,gBAAiB,EACjB,UAAW,aAAaA,EAAM,OAAO,OAAO,MAAM,GAClD,QAAS,OACT,QAAS,GAAGA,EAAM,QAAQ,CAAC,CAAC,QAC9B,CACF,CAAC,CACH,EACF,C,0DC1RO,MAAMqgE,EAAkC,mBAExC,IAAKC,GAAAA,IACVA,EAAA,OAAS,SADCA,IAAAA,GAAA,IAIL,MAAMC,EAAyB,CAACjwC,EAAakwC,IAC3CA,EAAiB,SAASlwC,CAAG,EAGzBmwC,EAAmB,CAACj6B,EAAoBk6B,IAAyC,CAC5F,GAAI,CAACl6B,EAAS,iCACZ,MAAO,GAIT,MAAMm6B,EAAqBn6B,EAAS,iCAAiC,SAAW,EAC1Eo6B,EAAWL,EACf/5B,EAAS,iCAAiC,CAAC,GAAG,UAAU,KAAO,GAC/Dk6B,EAAa,IAAK/hE,GAAMA,EAAE,eAAe,CAC3C,EACA,OAAOgiE,GAAsBC,CAC/B,C,0MCdO,SAASC,EAAuB3iE,EAAwC,CAG7E,GAAI,EAF6B,IAAO,eAAe,qCAAuC,IAG5F,MAAO,CACL,GAAGA,EACH,eAAgB,CACd,sBAAuB,GACvB,6BAA8B,EAChC,CACF,EAIF,MAAM4iE,EAAc5iE,EAAO,QAAQ,OAAQ+xB,GAAU,IAAC,KAAkBA,EAAM,KAAK,CAAC,EAG9E8wC,EAAoB7iE,EAAO,QAAQ,OAAQ+xB,GAAU+wC,EAAyB/wC,CAAK,CAAC,EAEpFgxC,EAA8BC,EAAyCJ,EAAaC,CAAiB,EAC3G,MAAO,CACL,GAAG7iE,EACH,eAAgB,CACd,sBAAuB+iE,EACvB,6BAA8B,EAChC,CACF,CACF,CAEO,SAASE,EAAkBjjE,EAAwC,CACxE,MAAO,CACL,GAAGA,EACH,QAASA,EAAO,SAAS,IAAK+xB,GAAU,CACtC,MAAI,KAAkBA,EAAM,KAAK,EAC/B,OAAOA,EAGT,MAAMmxC,EAAmBnxC,EAAM,MAAM,YAAY,QAC7C,MAAmCA,EAAM,MAAM,WAAW,IAAI,EAC9D,GACEoxC,EACJ,YAAapxC,EAAM,OAASA,EAAM,MAAM,UAAY,OAAYA,EAAM,MAAM,QAAUmxC,EACxF,MAAO,CACL,GAAGnxC,EACH,MAAO,CACL,GAAGA,EAAM,MACT,QAASoxC,EACT,MAAO,CAACA,CACV,CACF,CACF,CAAC,CACH,CACF,CAUO,SAASH,EACdJ,EACAC,EACA,CAOA,GALID,EAAY,SAAW,GAKvBC,EAAkB,OAAS,EAC7B,MAAO,GAGT,MAAMnnC,EAAYknC,EAAY,GAAG,CAAC,EAG5BQ,EAAmBP,EAAkB,KAAM9wC,GAAUA,EAAM,MAAM,OAAS,KAAoB,MAAM,EACpGsxC,EAAsBR,EAAkB,KAAM9wC,GAAUA,EAAM,MAAM,OAAS,KAAoB,SAAS,EAG1GuxC,EAAkBF,KAAmB,MAAgBA,EAAiB,KAAK,EAAI,GAE/EG,EACJF,GAAqB,MAAM,YAAY,MAAOtD,MACrC,WAAQA,EAAU,eAAe,CACzC,GAAK,GAEFyD,EAAyBJ,GAAoBE,EAC7CG,EAA2BJ,GAAuBE,EAElDG,EAA6BL,GAAqB,MAAM,aAAeD,GAAkB,MACzFO,EAA6BP,GAAkB,MAAM,aAAe1nC,GAAW,MAGrF,GAAI8nC,GAA0BG,GAA8BF,GAA4BC,EACtF,MAAO,GAIT,MAAME,EAAqBloC,KAAY,MAAwBA,CAAS,EAAI,GACtEmoC,EAA+BhB,EAAkB,SAAW,GAAKQ,EACjES,EAA+BT,GAAqB,MAAM,aAAe3nC,GAAW,MAE1F,MAAI,GAAAkoC,GAAsBC,GAAgCJ,GAA4BK,EAKxF,CAEO,SAAShB,EACd/wC,EACsC,CACtC,SAAO,KAAkBA,EAAM,KAAK,CACtC,CAEO,SAASgyC,EACdhyC,EACqC,CACrC,MAAO,IAAC,KAAkBA,EAAM,KAAK,CACvC,CAMO,MAAMiyC,EAAuBC,IAC3B,CACL,GAAGA,EACH,QAASA,EAAe,SAAS,IAAKlyC,MAAU,QAAKA,EAAO,YAAY,CAAC,CAC3E,GAGK,SAASmyC,EAA4BpY,EAAyB,CACnE,MAAMqY,EAAqB,CAAC,GAAGrY,CAAW,EAG1C,OAF8B,KAAmB,IAAKzjC,GAAeA,EAAW,GAAG,EAE7D,QAAQ,CAAC+7C,EAAsB74D,IAAU,CAC7D,MAAM84D,EAAaF,EAAmB,UAAW3nE,GAAUA,EAAM,MAAQ4nE,CAAoB,EAE7F,GAAIC,IAAe,GAAI,CAErB,MAAMC,EAAa,CAAE,IAAKF,EAAsB,MAAO,EAAG,EAC1DD,EAAmB,OAAO54D,EAAO,EAAG+4D,CAAU,CAChD,MAAWD,IAAe94D,GAExB44D,EAAmB,OAAO54D,EAAO,EAAG44D,EAAmB,OAAOE,EAAY,CAAC,EAAE,CAAC,CAAC,CAEnF,CAAC,EACMF,CACT,C,wDCpKA,IAAI3iC,EAAwC,KAQrC,SAAS+iC,EAAev7C,EAAuB,CACpD,GAAIwY,EACF,MAAM,IAAI,MAAM,yDAAyD,EAE3EA,EAAoBxY,CACtB,CAQO,SAASw7C,GAA8B,CAC5C,GAAI,CAAChjC,EACH,MAAM,IAAI,MAAM,2DAA2D,EAE7E,OAAOA,CACT,C,4LCAO,MAAMijC,EAAiC,CAC5CC,EACAt7C,EACAu7C,KAEAD,EAAW,QAASnoE,GAAc,CAChC,MAAMqoE,EAAaroE,EAAU,MAC7B,GAAI,CAACqoE,EACH,OAEF,IAAIxwC,EAAgBuwC,EAA8BC,CAAU,EAG5D,GAAIxwC,IAAkB,QAAa73B,EAAU,MAAM,6BAA+B,gBAAiB,CACjG,MAAMsoE,KAAiB,KAAgBD,CAAU,EACjDxwC,EAAgBuwC,EAA8BE,CAAc,CAC9D,CAEA,MAAMC,EAAqB17C,EAAa,OAAQ27C,GAAgBA,EAAY,OAAO,MAAQ3wC,CAAa,EACxG4wC,EAAuCzoE,EAAW0oE,EAAuBH,EAAoBvoE,CAAS,CAAC,CACzG,CAAC,EAEMmoE,GAGHM,EAAyC,CAACzoE,EAAsB6sB,IAAoC,CACxG7sB,EAAU,OAAO,QAASC,GAAU,CAClCA,EAAM,OAAO,MAAQA,EAAM,OAAO,OAAO,OAAQM,GAASA,EAAK,SAAW,KAAqB,YAAY,GAAK,CAAC,EACjHssB,EAAa,IAAK27C,GAAgB,CAChC,GAAIA,EAAY,OAAO,QAAUvoE,EAAM,MACrC,GAAIuoE,EAAY,OAAS,QAAS,CAChC,MAAMG,EAAcH,EAAY,OAAO,QAAU,CAAC,EAClDvoE,EAAM,OAAO,MAAO,KAAK,CACvB,SAAU,CACR,MAAO,CAAE,GAAG0oE,EAAa,WAAY,CAAE,IAAKH,EAAY,OAAO,GAAI,CAAE,EACrE,cAAeA,EAAY,OAAO,IAClC,eAAgBA,EAAY,OAAO,IACrC,EACA,IAAK,GACL,MAAOA,EAAY,OAASA,EAAY,OAAO,KAC/C,OAAQ,KAAqB,aAC7B,KAAM,CACJ,gBAAiBA,EAAY,OAAO,eACtC,CACF,CAAC,CACH,SAAWA,EAAY,OAAS,WAAY,CAC1C,MAAMI,EAAiBJ,EAAY,OAAO,OAC1CvoE,EAAM,OAAO,MAAO,KAAK,CACvB,IAAK2oE,EAAe,IACpB,MAAOJ,EAAY,OAAS,eAC5B,OAAQ,KAAqB,aAC7B,KAAM,CAAE,gBAAiBA,EAAY,QAAQ,eAAgB,CAC/D,CAAC,CACH,EAEJ,CAAC,CACH,CAAC,CACH,EAOME,EAAyB,CAAC77C,EAAiC7sB,IACxD6sB,EAAa,IAAK27C,GAAgB,CACvC,GACEA,EAAY,OAAO,MAAM,KAAO,QAChC,IAAO,eAAe,oBAAsB,IAC5CA,EAAY,OAAO,QAAU,OAC7B,CACA,MAAMK,KAAY,MAAe7oE,CAAS,EACtC6oE,GAAa,MAAQA,EAAU,UAAU,OAAS,SACpDL,EAAY,OAAO,MAAQK,GAAW,UAAU,KAEpD,CACA,OAAOL,CACT,CAAC,EAGUM,EAA8B,MAAOC,MACzC,QACL,MAAc,EAAE,MAA4B,CAC1C,IAAK,gCACL,OAAQ,MACR,eAAgB,GAChB,OAAQ,CACN,UAAWA,CACb,CACF,CAAC,CACH,EACG,KAAK,IAAO,EACZ,KAAK,IAA0B,EAGvBC,EAAoB,MAC/BC,EACAT,OAEO,MAAc,EAAE,KAAgC,wBAAwBS,CAAS,gBAAiBT,CAAW,EAGhHU,EAAuB,MAAOC,GAC9BA,EAAK,oBAAoB,KAAK,MACzB,QAAM,KAAiB,EAAE,IAAIA,EAAK,QAAQ,CAAC,EAAE,UAAU,EAEvDA,EAAK,mBAIHC,EAAuB,MAAOC,EAA8BC,IAChE,QAAQ,IAAI,CAACJ,EAAqBG,CAAU,EAAGH,EAAqBI,CAAU,CAAC,CAAC,EAAE,KAAMC,GACtFA,EAAY,CAAC,GAAG,OAAS,QAAaA,EAAY,CAAC,GAAG,OAAS,OAClE,GAAGA,EAAY,CAAC,GAAG,IAAI,OAAOA,EAAY,CAAC,GAAG,IAAI,GAClD,EACL,EAGUC,KAAqB,MAAuB,uBAAuB,C,gHC5IzE,MAAMC,EAAW,OAAO,M,oFCqGxB,IAAKC,GAAAA,IACVA,EAAA,KAAO,iBACPA,EAAA,IAAM,gBACNA,EAAA,SAAW,qBACXA,EAAA,OAAS,mBACTA,EAAA,aAAe,yBACfA,EAAA,SAAW,qBACXA,EAAA,OAAS,mBACTA,EAAA,SAAW,qBACXA,EAAA,OAAS,mBATCA,IAAAA,GAAA,IAYAC,GAAAA,IACVA,EAAA,WAAa,cACbA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,OAAS,SACTA,EAAA,UAAY,YALFA,IAAAA,GAAA,IAaAC,GAAAA,IACVA,EAAA,KAAO,OADGA,IAAAA,GAAA,IAkBL,MAAMC,EAAwB,wBAE9B,SAASC,EAAmBC,EAA+E,CAChH,MAAO,gBAAiBA,CAC1B,C,4IC9HO,MAAMC,EAAuB,CAAC,CAAE,SAAAxjE,EAAU,MAAA3G,EAAO,MAAA8oB,CAAM,IAAiC,CAC7F,MAAMxhB,KAAS,MAAWuD,CAAS,EAE7BmK,EAA+B,CACnC,CAAE,SAAO,KAA4BhV,CAAK,EAAG,MAAeA,EAAM,EAAE,OAAU,aAAe,EAAG,CAClG,EAEMoqE,EAAep1D,EAAW,CAAC,EAAE,MAAM,OACnCU,EAAuB,IACpBV,EAAW,IAAI,CAACI,EAAOi1D,OAC5B,OAAC,IAAS,CAAmC,MAAOj1D,EAAM,MACtD,UAAAA,EAAM,OAAS,CAAC,GAAG,IAAI,CAAC9C,EAAMg4D,OAC9B,OAAC,KAEC,IAAKh4D,EAAK,IACV,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,QAASA,EAAK,QACd,UAAWhL,EAAO,aAPb,GAAG8N,EAAM,KAAK,IAAIi1D,CAAQ,IAAIC,CAAO,GAQ5C,CACD,GAZa,GAAGl1D,EAAM,KAAK,GAAGi1D,CAAQ,EAazC,CACD,EAIGE,KAAkB,OAAI,CAC1B,OAAQ,cACV,CAAC,EAED,GAAIH,EAAe,EACjB,SACE,OAAC,IAAe,CAAC,gBAAiB10D,EAC/B,UAAC,CAAE,SAAA80D,CAAS,IACJ7jE,EAAS,CAAE,SAAA6jE,EAAU,gBAAAD,CAAgB,CAAC,CAC/C,CACF,EAEG,CACL,MAAME,EAAYzqE,EAAM,EAAE,CAAC,EAC3B,SACE,OAAC,KACC,KAAMyqE,EAAU,KAChB,QAASA,EAAU,QACnB,OAAQA,EAAU,OAClB,MAAOA,EAAU,MACjB,MAAO,CAAE,GAAG3hD,EAAO,SAAU,SAAU,QAAS,MAAO,EACvD,cAAa,KAAU,WAAW,qBAAqB,WAEtD,SAAAniB,EAAS,CAAC,CAAC,EACd,CAEJ,CACF,EAEMkE,EAAanF,IAA0B,CAC3C,eAAa,OAAI,CACf,SAAU,EACZ,CAAC,CACH,E,4HCjFO,SAASglE,EAAoBjT,EAA6D,CAC/F,MAAO,CACL,KAAM,aACN,KAAM,CACJ,KAAMA,EAAc,MAAM,KAAK,OAAQkT,GAAQ,CAACA,EAAI,MAAM,eAAe,EAAE,IAAIC,CAAY,CAC7F,CACF,CACF,CAEO,SAASA,EAAaD,EAAiC,CAC5D,MAAM54C,EAAS44C,EAAI,MAAM,OAAO,UAAU,EACpCE,EAA6B,CACjC,KAAM,gBACN,KAAM,CACJ,MAAOF,EAAI,MAAM,MACjB,OAAA54C,EACA,GAAI44C,EAAI,MAAM,kBAAoB,CAChC,OAAQ,CACN,KAAM,WACN,MAAOA,EAAI,MAAM,gBACnB,CACF,CACF,CACF,EAEMxS,EAAgCwS,EAAI,MAAM,sBAAsB,UAAU,EAEhF,OAAIxS,GAA+B,KAAK,MAAM,SAC5C0S,EAAQ,KAAK,qBAAuB1S,GAG/B0S,CACT,CAEO,SAASC,EACd/4C,EACAsmC,EACAC,EACAC,EACmB,CACnB,GAAIxmC,EAAO,OAAS,aAClB,MAAM,IAAI,MAAM,qBAAqB,EAGvC,MAAMg5C,EAAOh5C,EAAO,KAAK,KAAK,IAAK44C,GAC1BK,EAAeL,EAAKtS,EAAUC,EAASC,CAAgB,CAC/D,EAED,OAAO,IAAI,IAAkB,CAAE,KAAAwS,CAAK,CAAC,CACvC,CAEO,SAASC,EACdL,EACAtS,EACAC,EACAC,EACS,CACT,MAAMxmC,EAAS44C,EAAI,KAAK,OAExB,OAAO,IAAI,IAAQ,CACjB,MAAOA,EAAI,KAAK,MAChB,OAAQ,IAA2B,IAAI54C,EAAO,IAAI,EAAE,YAAYA,EAAQsmC,EAAUC,EAASC,CAAgB,EAC3G,iBAAkBoS,EAAI,KAAK,QAAQ,MACnC,wBAAsB,MAAwBA,CAAG,CACnD,CAAC,CACH,C,oQCjDO,SAASv2C,EAAqB,CAAE,cAAAqjC,CAAc,EAAU,CAC7D,MAAMnwD,KAAS,MAAWuD,CAAS,EAC7B,CAAE,eAAAogE,CAAe,KAAI,KAAkB,EAEvC,CAAE,gBAAAC,EAAiB,YAAAC,CAAY,KAAI,WAAQ,IAAM,CACrD,GAAI,IAAO,eAAe,wBACxB,MAAO,CAAE,gBAAiB,GAAO,YAAa,EAAM,EAGtD,IAAI/4C,EAASqlC,EAAc,OAC3B,MAAM2T,EAAU,CAAC,EAEjB,KAAOh5C,GAAQ,CAKb,MAJI,KAAyBA,CAAM,GACjCg5C,EAAQ,KAAKh5C,EAAO,WAAW,EAAE,EAG/Bg5C,EAAQ,SAAW,EAAG,CACxBh5C,EAAS,OACT,KACF,CAEAA,EAASA,EAAO,MAClB,CAEA,OAAIg5C,EAAQ,SAAW,EACd,CAAE,gBAAiB,GAAM,YAAa,EAAK,EAGhDA,EAAQ,SAAW,GAAKA,EAAQ,CAAC,IAAM,IAAkB,WAAW,GAC/D,CAAE,gBAAiB,GAAO,YAAa,EAAK,EAG9C,CAAE,gBAAiB,GAAO,YAAa,EAAM,CACtD,EAAG,CAAC3T,CAAa,CAAC,EAElB,SACE,QAAC,OAAI,aAAW,MAAGnwD,EAAO,UAAW,6BAA6B,EAChE,oBAAC,MACC,QAAQ,UACR,KAAK,OACL,KAAK,OACL,cAAa,KAAU,WAAW,qBAAqB,SACvD,QAAS,IAAM,CACbmwD,EAAc,YAAS,MAAmB,CAAC,EAC3C,IAAsB,mBAAmB,CAC3C,EAEA,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,qBAAS,EAC/D,KACA,OAAC,KACC,WACE,QAAC,IAAI,CACH,oBAAC,IAAK,KAAL,CACC,KAAK,UACL,SAAO,KAAE,0CAA2C,gBAAgB,EACpE,OAAQ,KAAU,WAAW,qBAAqB,OAClD,QAAS,IAAM,IACb,KAAYA,CAAa,EACzB,IAAsB,mBAAmB,CAC3C,EACD,KACD,OAAC,IAAK,KAAL,CACC,KAAK,SACL,OAAQ,KAAU,WAAW,qBAAqB,OAClD,SAAO,KAAE,0CAA2C,gBAAgB,EACpE,SAAU0T,EACV,YACEA,KACI,KAAE,gDAAiD,yCAAyC,EAC5F,OAEN,QAAS,IAAM,IACb,KAAY1T,CAAa,EACzB,IAAsB,mBAAmB,CAC3C,EACD,GACH,EAGF,mBAAC,MACC,QAAQ,UACR,KAAK,OACL,KAAK,SACL,cAAa,KAAU,WAAW,qBAAqB,YACvD,SAAUyT,EACV,QACEA,KACI,KAAE,oDAAqD,iCAAiC,EACxF,OAGN,mBAAC,KAAK,CAAC,QAAQ,wCAAwC,wBAAY,EACrE,EACF,EACCG,EAAoB5T,CAAa,EACjCwT,GAAkBxT,EAAc,eAC/B,OAAC,MACC,cAAa,KAAU,WAAW,qBAAqB,WACvD,QAAQ,UACR,KAAK,OACL,KAAK,gBACL,QAAS,IAAM,CACbA,EAAc,aAAa,EAC3B,IAAsB,qBAAqB,CAC7C,EAEA,mBAAC,KAAK,CAAC,QAAQ,uCAAuC,uBAAW,EACnE,GAEJ,CAEJ,CAEA,SAAS4T,EAAoB5T,EAAuC,CAGlE,GAFeA,EAAc,kBAEP,KACpB,OAAO,KAGT,MAAM6T,EAAe,KAAoB,oBAAoB7T,EAAc,MAAO,EAE5E8T,EAAY,IAAM,CACtB,IAAsB,kBAAkB,KACxC,KAAcD,EAAc7T,CAAa,CAC3C,EAEA,OAAI6T,aAAwB,OACnB,OAACE,EAAA,CAAkB,aAAAF,EAA4B,QAASC,CAAA,CAAW,EAGrE,IACT,CAOA,SAASC,EAAkB,CAAE,aAAAF,EAAc,QAAAh3D,CAAQ,EAA0C,CAC3F,KAAM,CAAE,KAAAy2D,CAAK,EAAIO,EAAa,SAAS,EAEvC,OAAIP,EAAK,OAAS,EACT,QAIP,OAAC,MACC,QAAQ,UACR,KAAK,OACL,KAAK,eACL,QAAAz2D,EACA,cAAa,KAAU,WAAW,qBAAqB,QAEvD,mBAAC,KAAK,CAAC,QAAQ,2CAA2C,mBAAO,EACnE,CAEJ,CAEA,MAAMzJ,EAAanF,IAA0B,CAC3C,aAAW,OAAI,CACb,SAAU,WACV,QAASA,EAAM,QAAQ,EAAG,CAAC,EAC3B,OAAQA,EAAM,QAAQ,CAAC,EACvB,OAAQ,EACR,KAAM,EACN,MAAO,EACP,QAAS,EACT,CAACA,EAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,WAAYA,EAAM,YAAY,OAAO,SAAS,CAChD,CACF,CAAC,CACH,E,kHC3LY+lE,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,aAAe,eAHLA,IAAAA,GAAA,IAWL,MAAMC,EAA6E,CACxF,GAAI,IAAkB,YACtB,SAAU,CAAC,IAAkB,eAAe,EAC5C,KAAM,gBACN,YACE,+LACF,eAAgB,CACd,QAAS,OACT,KAAM,OACR,EAEA,SAAU,CAAC3qE,EAASC,IAASC,GAC3BA,EAAO,QAAK,KAAKS,GAASgqE,EAAuB,YAAY3qE,EAASC,CAAG,EAAEU,CAAI,CAAC,CAAC,EAEnF,YAAa,CAACX,EAA6BC,IAA8B,CACvE,IAAI2qE,EACJ,OAAQjqE,GAAsB,CAC5B,GAAIA,EAAK,OAAS,EAAG,CACfX,EAAQ,SAAW,CAAC4qE,IACtBA,EAAS,KAAc,IAAI,KAAe,MAAM,EAAE,IAAI5qE,EAAQ,OAAO,GAEvE,MAAM6qE,KAAS,MAAe,CAAE,OAAQlqE,EAAM,OAAAiqE,EAAQ,KAAM5qE,EAAQ,IAAK,CAAC,EAC1E,GAAI6qE,EACF,OAAAA,EAAO,MAAQ,GAAG,IAAkB,WAAW,IAAIlqE,EAAK,IAAKI,GAAUA,EAAM,KAAK,EAAE,KAAK,GAAG,CAAC,GACtF,CAAC8pE,CAAM,CAElB,CACA,OAAOlqE,CACT,CACF,CACF,C,iHC7CA,MAAMmqE,EAAqD,CACzD,GAAI,KAAU,SACd,KAAM,MACN,YAAa,yBACb,kBAAmB,GACnB,eAAgB,CAAC,EAEjB,IAAM9qE,GAA6B,CACjC,MAAM4F,EAAW5F,EAAQ,IAAKmG,MACrB,MAAgBA,CAAM,CAC9B,EACD,MAAO,CAAC9G,EAAc0B,EAAkB2f,IAA2B,CACjE,UAAWwP,KAAStqB,EAClB,GAAIsqB,EAAM7wB,EAAO0B,EAAO2f,CAAS,EAC/B,MAAO,GAGX,MAAO,EACT,CACF,EAEA,sBAAwB1gB,GAA6B,CACnD,IAAI6K,EAAO,GACX,UAAWsyD,KAAOn9D,EAAS,CACrB6K,EAAK,OAAS,IAChBA,GAAQ,QAEV,MAAM2uB,EAAU,KAAc,IAAI2jC,EAAI,EAAE,EACxCtyD,GAAQ2uB,EAAQ,sBAAwBA,EAAQ,sBAAsB2jC,CAAG,EAAI3jC,EAAQ,IACvF,CACA,OAAO3uB,CACT,CACF,EAEMkgE,EAAqD,CACzD,GAAI,KAAU,SACd,KAAM,MACN,YAAa,yBACb,kBAAmB,GACnB,eAAgB,CAAC,EAEjB,IAAM/qE,GAA6B,CACjC,MAAM4F,EAAW5F,EAAQ,IAAKmG,MACrB,MAAiBA,CAAM,CAC/B,EACD,OAAQpF,GAAqB,CAC3B,UAAWmvB,KAAStqB,EAClB,GAAIsqB,EAAMnvB,CAAK,EACb,MAAO,GAGX,MAAO,EACT,CACF,EAEA,sBAAwBf,GAA6B,CACnD,IAAI6K,EAAO,GACX,UAAWsyD,KAAOn9D,EAAS,CACrB6K,EAAK,OAAS,IAChBA,GAAQ,QAEV,MAAM2uB,EAAU,KAAc,IAAI2jC,EAAI,EAAE,EACxCtyD,GAAQ2uB,EAAQ,sBAAwBA,EAAQ,sBAAsB2jC,CAAG,EAAI3jC,EAAQ,IACvF,CACA,OAAO3uB,CACT,CACF,EAEMmgE,EAAsD,CAC1D,GAAI,KAAU,SACd,KAAM,MACN,YAAa,2BACb,kBAAmB,GACnB,eAAgB,CAAC,EAEjB,IAAMhrE,GAA6B,CACjC,MAAM4F,EAAW5F,EAAQ,IAAKmG,MACrB,MAAgBA,CAAM,CAC9B,EACD,MAAO,CAAC9G,EAAc0B,EAAkB2f,IAA2B,CACjE,UAAWwP,KAAStqB,EAClB,GAAI,CAACsqB,EAAM7wB,EAAO0B,EAAO2f,CAAS,EAChC,MAAO,GAGX,MAAO,EACT,CACF,EAEA,sBAAwB1gB,GAA6B,CACnD,IAAI6K,EAAO,GACX,UAAWsyD,KAAOn9D,EAAS,CACrB6K,EAAK,OAAS,IAChBA,GAAQ,SAEV,MAAM2uB,EAAU,KAAc,IAAI2jC,EAAI,EAAE,EACxCtyD,GAAQ2uB,EAAQ,sBAAwBA,EAAQ,sBAAsB2jC,CAAG,EAAI3jC,EAAQ,IACvF,CACA,OAAO3uB,CACT,CACF,EAEMogE,EAAsD,CAC1D,GAAI,KAAU,SACd,KAAM,MACN,YAAa,2BACb,kBAAmB,GACnB,eAAgB,CAAC,EAEjB,IAAMjrE,GAA6B,CACjC,MAAM4F,EAAW5F,EAAQ,IAAKmG,MACrB,MAAiBA,CAAM,CAC/B,EACD,OAAQpF,GAAqB,CAC3B,UAAWmvB,KAAStqB,EAClB,GAAI,CAACsqB,EAAMnvB,CAAK,EACd,MAAO,GAGX,MAAO,EACT,CACF,EAEA,sBAAwBf,GAA6B,CACnD,IAAI6K,EAAO,GACX,UAAWsyD,KAAOn9D,EAAS,CACrB6K,EAAK,OAAS,IAChBA,GAAQ,SAEV,MAAM2uB,EAAU,KAAc,IAAI2jC,EAAI,EAAE,EACxCtyD,GAAQ2uB,EAAQ,sBAAwBA,EAAQ,sBAAsB2jC,CAAG,EAAI3jC,EAAQ,IACvF,CACA,OAAO3uB,CACT,CACF,EAEMqgE,EAAmD,CACvD,GAAI,KAAU,YACd,KAAM,MACN,YAAa,yBACb,kBAAmB,GAEnB,IAAM/kE,GAA0B,CAC9B,MAAMglE,KAAQ,MAAgBhlE,CAAM,EACpC,MAAO,CAAC9G,EAAc0B,EAAkB2f,IAC/B,CAACyqD,EAAM9rE,EAAO0B,EAAO2f,CAAS,CAEzC,EAEA,sBAAwB1gB,GAA2B,CACjD,MAAMw5B,EAAU,KAAc,IAAIx5B,EAAQ,EAAE,EAE5C,MAAO,QADMw5B,EAAQ,sBAAwBA,EAAQ,sBAAsBx5B,EAAQ,OAAO,EAAIw5B,EAAQ,KAExG,CACF,EAEM4xC,EAAmD,CACvD,GAAI,KAAU,YACd,KAAM,MACN,YAAa,yBACb,kBAAmB,GAEnB,IAAMjlE,GAA0B,CAC9B,MAAMglE,KAAQ,MAAiBhlE,CAAM,EACrC,OAAQpF,GACC,CAACoqE,EAAMpqE,CAAK,CAEvB,EAEA,sBAAwBf,GAA2B,CACjD,MAAMw5B,EAAU,KAAc,IAAIx5B,EAAQ,EAAE,EAE5C,MAAO,QADMw5B,EAAQ,sBAAwBA,EAAQ,sBAAsBx5B,EAAQ,OAAO,EAAIw5B,EAAQ,KAExG,CACF,EAEa6xC,EAAsBhsE,GAC1B,GAGHisE,EAAsBvqE,GACnB,GAGHwqE,EAAqBlsE,GAClB,GAGImsE,EAAuBnsE,GAC3BA,EAAM,OAAS,KAAU,KAG5BosE,EAAqB1qE,GAClB,GAGH2qE,EAA2C,CAC/C,GAAI,KAAU,YACd,KAAM,aACN,YAAa,eAEb,IAAMC,GACGN,EAGT,sBAAwBt9C,GACf,QAEX,EAEM69C,EAA2C,CAC/C,GAAI,KAAU,YACd,KAAM,aACN,YAAa,eAEb,IAAMD,GACGL,EAGT,sBAAwBv9C,GACf,QAEX,EAEM89C,EAA0C,CAC9C,GAAI,KAAU,WACd,KAAM,YACN,YAAa,cACb,kBAAmB,GAEnB,IAAMF,GACGJ,EAGT,sBAAwBx9C,GACf,OAEX,EAEM+9C,EAA0C,CAC9C,GAAI,KAAU,WACd,KAAM,YACN,YAAa,cAEb,IAAMH,GACGF,EAGT,sBAAwB19C,GACf,OAEX,EAEO,SAASg+C,GAAgD,CAC9D,MAAO,CAACjB,EAAiBE,EAAkBE,EAAiBQ,EAAwBG,CAAqB,CAC3G,CAEO,SAASG,GAAgD,CAC9D,MAAO,CAACjB,EAAiBE,EAAkBG,EAAiBQ,EAAwBE,CAAqB,CAC3G,C,uOCnOO,MAAMG,EAAgB,CAAC,CAC5B,SAAArmE,EACA,UAAAoB,EACA,eAAAklE,EACA,YAAA54B,EAAc,OACd,eAAA64B,EAAiB,UACjB,SAAAziE,EAAW,GACX,SAAA0iE,EACA,QAAA74D,EACA,UAAA84D,EACA,KAAAC,EAAO,IACT,IAAa,CACX,MAAMC,KAAgB,UAA0B,IAAI,EAC9CC,KAAmB,UAA0B,IAAI,EACjD,CAACC,EAAaC,CAAc,KAAI,YAAS,EAAK,EAC9C,CAACC,EAAoBC,CAAqB,KAAI,YAAS,EAAK,EAC5DrmE,KAAS,MAAWuD,CAAS,KAEnC,aAAU,IAAM,CACV2iE,GACFD,EAAiB,SAAS,MAAM,EAChCI,EAAsB,EAAI,GAEtBD,IACFJ,EAAc,SAAS,MAAM,EAC7BK,EAAsB,EAAK,EAGjC,EAAG,CAACD,EAAoBF,CAAW,CAAC,EAEpC,MAAMI,EAAiBvjE,GAA+C,CAChEA,GACFA,EAAM,eAAe,EAGvBojE,EAAe,EAAI,EACnBn5D,IAAU,CACZ,EAEMu5D,EAAiBxjE,GAA+C,CAChEA,GACFA,EAAM,eAAe,EAEvBojE,EAAe,EAAK,EACpBH,EAAc,SAAS,MAAM,EAC7BH,IAAW,CACb,EAEMW,EAAkBzjE,GAA+C,CACjEA,GACFA,EAAM,eAAe,EAEvB+iE,IAAY,EACRH,GACFQ,EAAe,EAAK,CAExB,EAEMM,KAAc,MAAGhmE,EAAWT,EAAO,WAAY,CACnD,CAACA,EAAO,cAAc,EAAGkmE,CAC3B,CAAC,EACKQ,KAAqB,MAAG1mE,EAAO,cAAe,CAClD,CAACA,EAAO,iBAAiB,EAAG,CAACkmE,CAC/B,CAAC,EACKS,KAA8B,MAAG3mE,EAAO,uBAAwB,CACpE,CAACA,EAAO,0BAA0B,EAAG,CAACkmE,CACxC,CAAC,EAED,SACE,QAAC,OAAI,UAAWlmE,EAAO,UACrB,oBAAC,QAAK,UAAWymE,EACd,gBAAOpnE,GAAa,YACnB,OAAC,KAAM,CAAC,SAAA8D,EAAoB,KAAA4iE,EAAY,KAAK,OAAO,QAASO,EAAe,IAAKN,EAC9E,SAAA3mE,CAAA,CACH,EAEA,eAAmBA,EAAU,CAAE,SAAA8D,EAAU,QAASmjE,EAAe,IAAKN,CAAc,CAAC,EAEzF,KACA,OAAC,OAAI,UAAWW,EACd,oBAAC,QAAK,UAAWD,EACf,oBAAC,KAAM,CAAC,KAAAX,EAAY,QAASH,EAAgB,QAASY,EAAgB,IAAKP,EACxE,SAAAl5B,CAAA,CACH,KACA,OAAC,KAAM,CAAC,KAAAg5B,EAAY,KAAK,OAAO,QAASQ,EACvC,mBAAC,KAAK,CAAC,QAAQ,mCAAmC,kBAAM,EAC1D,GACF,EACF,GACF,CAEJ,EACAb,EAAc,YAAc,gBAE5B,MAAMniE,EAAanF,IACV,CACL,aAAW,OAAI,CACb,WAAY,SACZ,QAAS,OACT,eAAgB,WAChB,SAAU,UACZ,CAAC,EACD,cAAY,OAAI,CACd,QAAS,EACT,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAYA,EAAM,YAAY,OAAO,CAAC,SAAS,EAAG,CAChD,SAAUA,EAAM,YAAY,SAAS,SACrC,OAAQA,EAAM,YAAY,OAAO,OACnC,CAAC,CACH,EACA,OAAQ,CACV,CAAC,EACD,kBAAgB,OAAI,CAClB,QAAS,EACT,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAYA,EAAM,YAAY,OAAO,CAAC,UAAW,YAAY,EAAG,CAC9D,SAAUA,EAAM,YAAY,SAAS,SACrC,OAAQA,EAAM,YAAY,OAAO,MACnC,CAAC,CACH,EACA,WAAY,SACZ,OAAQ,CACV,CAAC,EACD,0BAAwB,OAAI,CAC1B,SAAU,UACV,SAAU,WACV,cAAe,MACf,MAAO,CACT,CAAC,EACD,8BAA4B,OAAI,CAC9B,SAAU,SACV,cAAe,MACjB,CAAC,EACD,iBAAe,OAAI,CACjB,WAAY,aACZ,WAAYA,EAAM,OAAO,WAAW,QACpC,QAAS,OACT,QAAS,EACT,UAAW,gBACX,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAYA,EAAM,YAAY,OAAO,CAAC,UAAW,WAAW,EAAG,CAC7D,SAAUA,EAAM,YAAY,SAAS,SACrC,OAAQA,EAAM,YAAY,OAAO,OACnC,CAAC,CACH,EACA,OAAQ,CACV,CAAC,EACD,qBAAmB,OAAI,CACrB,QAAS,EACT,UAAW,mBACX,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAYA,EAAM,YAAY,OAAO,CAAC,UAAW,YAAa,YAAY,EAAG,CAC3E,SAAUA,EAAM,YAAY,SAAS,SACrC,OAAQA,EAAM,YAAY,OAAO,MACnC,CAAC,CACH,EACA,WAAY,QACd,CAAC,CACH,E,0HC3LK,SAASwoE,EACdza,EACA54C,EACS,CAIT,MAHI,CAAC44C,GAGD,CAAC54C,EACI,GAEL,OAAOA,GAAY,SACd44C,EAAG,MAAQ54C,EAEb44C,EAAG,MAAQ54C,EAAQ,GAC5B,CAEO,SAASszD,EACdC,EACA,CACA,GAAKA,EAIL,IAAI,OAAOA,GAAe,SACxB,MAAO,GAAGA,CAAU,eAGtB,GAAI,SAAUA,EACZ,OAAOA,EAAW,KAGpB,GAAIA,EAAW,IACb,MAAO,GAAGA,EAAW,GAAG,eAI5B,CAEO,SAASC,EACdxzD,EACAyzD,EACAC,EACAC,EAAgC,CAAC,EACjC,CAsDA,MArDuB,CAACjsD,EAA+B9e,IAAkC,CACvF,MAAMgrE,EAAQlsD,EAAE,KAAK,YAAY,EAC3BmsD,EAAQjrE,EAAE,KAAK,YAAY,EAGjC,GAAIoX,GAAWqzD,EAAkB3rD,EAAG1H,CAAO,EACzC,MAAO,GACF,GAAIA,GAAWqzD,EAAkBzqE,EAAGoX,CAAO,EAChD,MAAO,GAIT,MAAM8zD,EAAcH,EAAoB,SAASjsD,EAAE,GAAG,EAChDqsD,EAAcJ,EAAoB,SAAS/qE,EAAE,GAAG,EACtD,GAAIkrE,GAAe,CAACC,EAClB,MAAO,GACF,GAAIA,GAAe,CAACD,EACzB,MAAO,GACF,GAAIA,GAAeC,EAExB,OAAOH,EAAQC,EAAQ,GAAK,EAI9B,MAAMG,EAASP,EAAwB,QAAQ/rD,EAAE,GAAG,EAC9CusD,EAASR,EAAwB,QAAQ7qE,EAAE,GAAG,EACpD,GAAIorE,EAAS,IAAMA,EAASC,EAC1B,MAAO,GAET,GAAIA,EAAS,IAAMA,EAASD,EAC1B,MAAO,GAIT,MAAME,EAAcR,EAAuB,SAAShsD,EAAE,GAAG,EACnDysD,EAAcT,EAAuB,SAAS9qE,EAAE,GAAG,EACzD,OAAIsrE,GAAe,CAACC,EACX,GACEA,GAAe,CAACD,GAKvBxsD,EAAE,KAAK,SAAW,CAAC9e,EAAE,KAAK,QACrB,EACEA,EAAE,KAAK,SAAW,CAAC8e,EAAE,KAAK,SAK9BksD,EAAQC,EAJN,GAImB,CAC9B,CAGF,CASO,SAASO,EAA0Bxb,EAAgCnQ,EAAa,GAAI,CACzF,OAAOmQ,EAAG,KAAK,YAAY,EAAE,SAASnQ,EAAW,YAAY,CAAC,CAChE,CAEO,SAAS4rB,EAAsC5iD,EAAkC,CACtF,GAAI,CAACA,EAAW,IACd,OAGF,MAAM6iD,KAAe,MAAgB,EAAE,WAAW,GAAG,KAAO,GAE5D,GAAI7iD,EAAW,MAAQ,KACrB,SAAO,MAAsC6iD,CAAa,KAG5D,MAAqCA,EAAc7iD,EAAW,GAAG,CACnE,C,yNC3GO,MAAMkc,UAA6B,IAA2C,CACnF,YAAc,4BAA8B,+BAErC,YAAYxoB,EAAkC,CACnD,MAAMA,CAAK,EAEX,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CAEQ,oBAAqB,CACtB,KAAK,MAAM,UACd,KAAK,+BAA+B,CAExC,CAEO,qBAAqBovD,EAAwB,CAClD,GAAI,KAAK,MAAM,cAAc,UAAYA,EAAS,QAChD,OAGF,MAAM59C,EAAW,KAAK,OAEtB,GAAI,EAAEA,aAAoB,MACxB,OAGF,MAAM69C,EAAgB,IAAI,KAAWD,EAAS,KAAK,EAG7CE,KAAmB,MAAsB99C,CAAQ,EACvD69C,EAAc,GAAKC,EAEnB,MAAMC,EAA4B,CAAC,EAEnCA,EAAW,KACT,IAAI,IAAc,CAChB,SAAUF,EAAc,MACxB,KAAM,IAAI,IAAkB,CAAE,WAAY,CAAC,IAAkB,CAAE,CAAC,CAClE,CAAC,CACH,EACAE,EAAW,KAAK,IAAI,GAAc,EAElC,IAAIvqE,EACA,IAAO,eAAe,wBACxBA,EAAQqqE,EAAc,OAAS79C,EAAS,MAAM,MAE9CxsB,EAAQwsB,EAAS,MAAM,OAAS69C,EAAc,MAGhD,MAAMG,EAA+B,CACnC,MAAAxqE,EACA,QAASqqE,EAAc,SAAW,CAAC,EACnC,YAAaA,EAAc,YAC3B,SAAUA,EAAc,KACxB,cAAeA,EAAc,cAC7B,YAAaA,EAAc,YAAc,cAAgB,OACzD,YAAaA,EAAc,YAC3B,WAAAE,EACA,SAAO,KAAwBF,CAAa,CAC9C,GAEIA,EAAc,UAAYA,EAAc,aAC1CG,EAAc,WAAa,IAAI,IAAe,CAC5C,SAAUH,EAAc,SACxB,UAAWA,EAAc,UACzB,iBAAkBA,EAAc,gBAClC,CAAC,GAGH79C,EAAS,SAASg+C,CAAa,EAC/Bh+C,EAAS,iBAAiB69C,EAAc,KAAMG,EAAc,QAASA,EAAc,WAAW,EAE9F,KAAK,SAAS,CAAE,aAAcJ,EAAU,SAAU,GAAM,KAAMA,EAAS,IAAK,CAAC,EAE7E,MAAMK,EAAgBj+C,EAAS,OAG3B69C,EAAc,QAAUI,aAAyB,MACnDA,EAAc,SAAS,CACrB,aAAcJ,EAAc,OAC5B,gBAAiBA,EAAc,kBAAoB,IAAM,IAAM,IAC/D,UAAWA,EAAc,UACzB,WAAYI,EAAc,MAAM,QAAU,EAC5C,CAAC,EACDA,EAAc,cAAc,EAEhC,CAKO,QAAS,CACd,MAAM7uE,EAAQ,KAAK,OACfA,aAAiB,MACnBA,EAAM,SAAS,CAAE,WAAYA,EAAM,MAAM,YAAY,OAAQ6C,GAAMA,IAAM,IAAI,CAAE,CAAC,CAEpF,CAEA,MAAc,gCAAiC,CAC7C,IAAI+tB,EAAW,KAAK,OAEpB,GAAMA,aAAoB,KAI1B,GAAI,CACF,MAAM49C,EAAW,QAAM,MAAgB,KAAK,MAAM,IAAK,EAAI,EAC3D,KAAK,qBAAqBA,CAAQ,CACpC,MAAc,CACZ59C,EAAS,SAAS,CAChB,iBAAkB,iCAAiC,KAAK,MAAM,GAAG,EACnE,CAAC,CACH,CACF,CACF,CAEA,MAAMk+C,EAAwB,IAAI,IAAYC,CAAe,EAE7D,SAASA,EAAgBppE,EAAmB,CAC1C,SACE,OAAC,IAAK,CAAC,UAAW,SAAU,eAAgB,gBAC1C,mBAAC,KAAK,CAAC,QAAQ,oCAAoC,iCAAqB,EAC1E,CAEJ,CAEA,KAAW,2BAA2B,CACpC,SAAUiiC,EAAqB,4BAC/B,OAAQknC,CACV,CAAC,C,6FCxIM,SAASE,EAA2B7uE,EAIV,CAC/B,OAAO,IAAI,MACT,CAAC,EACD,CACE,IAAK,CAACw2B,EAAKtS,IAAkC,CAE3C,IAAI7kB,EAAQW,EAAQ,MAAM,OAAO,KAAMsd,GAAM4G,IAAQ5G,EAAE,IAAI,EAC3D,GAAI,CAACje,EAAO,CAEV,MAAMmvD,KAAI,YAAStqC,CAAG,EACtB7kB,EAAQW,EAAQ,MAAM,OAAOwuD,CAAC,CAChC,CAcA,GAbKnvD,IAEHA,EAAQW,EAAQ,MAAM,OAAO,KAAMsd,GAAM4G,IAAQ5G,EAAE,OAAO,WAAW,GAElEje,IAEHA,EAAQW,EAAQ,MAAM,OAAO,KAAMsd,GAC7BA,EAAE,OACG4G,IAAQ5G,EAAE,OAAO,KAEnB,EACR,GAEC,CAACje,EACH,OAIF,MAAMyvE,EAAmBzvE,EAAM,YAAW,KAAoB,EACxDkhD,EAAMlhD,EAAM,OAAOW,EAAQ,QAAQ,EACnCsW,EAAOw4D,EAAiBvuB,CAAG,EACjC,OAAAjqC,EAAK,SAAW,OAAM,MAAuBA,CAAI,EAC1CA,CACT,CACF,CACF,CACF,C,mEChCO,IAAKy4D,GAAAA,IACVA,EAAAA,EAAA,iBACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,2CAHUA,IAAAA,GAAA,IAMAC,GAAAA,IACVA,EAAAA,EAAA,uBACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,uCACAA,EAAAA,EAAA,+BACAA,EAAAA,EAAA,iCACAA,EAAAA,EAAA,mEACAA,EAAAA,EAAA,qEACAA,EAAAA,EAAA,2BACAA,EAAAA,EAAA,6BATUA,IAAAA,GAAA,IAYAC,GAAAA,IACVA,EAAAA,EAAA,uBACAA,EAAAA,EAAA,yBACAA,EAAAA,EAAA,+BACAA,EAAAA,EAAA,mCAJUA,IAAAA,GAAA,G,+RCjBL,MAAMC,UACH,IAEV,CAKS,YAAYv7C,EAAyC,CAC1D,MAAM,CACJ,UAAW,GACX,GAAGA,EACH,SAAU,EACZ,CAAC,EATH,KAAQ,cAAgB,GAExB,KAAO,MAAQ,KAAU,YA8JzB,KAAQ,YAAera,GAAiB,CACtC,MAAM61D,KAAe,MAAwB,0BAAwB,MAAoB71D,CAAG,CAAC,KAC7F,SAAS,MAAU61D,CAAY,CAAC,CAClC,CAzJA,CAEO,UAAiB,CACtB,MAAMr2D,EAAY,KAAW,aAAa,IAAI,EAE9C,KAAK,cAAgBA,EAAU,iBAAiB,IAAM,CACpD,KAAK,iBAAiBA,CAAS,CACjC,CAAC,CACH,CAEO,WAAkB,CACvB,KAAK,eAAe,YAAY,CAClC,CAEO,UAAW,CAChB,MAAMA,EAAY,KAAW,aAAa,IAAI,EAC9C,KAAK,iBAAiBA,CAAS,CACjC,CAEA,MAAc,iBAAiBA,EAA+B,CAC5D,MAAMma,KAAY,MAAqB,IAAI,EACrC,CAAE,IAAAwnB,EAAK,GAAA5wB,CAAG,EAAIoJ,EAAU,MAM9B,GAJI,KAAK,UACP,KAAK,SAAS,YAAY,EAGxB,CAAC,KAAK,QAAQna,CAAS,EACzB,OAEF,MAAMs2D,EAA4C,SAAY,CAC5D,MAAMC,EAAY,QAAM,MACtB,KAAa,UAAU,yBAAyB,SAC9C,CACE,eAAgB,KAChB,aAAc50B,CAChB,EACA,CAAE,aAAc,EAAK,CACvB,CACF,EACA,GAAI40B,EAAU,MACZ,MAAM,IAAI,MAAM,kCAAkC,EAEpD,OAAOA,EAAU,IACnB,EAKMC,KAJsC,KAAKF,EAAU,CAAC,EAAE,QAC5D,KAAKG,MAAgC,MAAuBA,CAAU,CAAC,CACzE,EAEgC,QAC9B,KAAKC,GAA+B,CAClC,KAAK,cAAgB,GACrB,MAAMC,EAAsD,CAAC,EAC7D,OAAAD,EAAO,QAASn7D,GACdA,EAAM,MAAM,QAAS4hC,GAAS,CAC5B,GAAI,KAAmB,aAAaA,CAAI,GAAKA,EAAK,cAAc,KAAW,OAAO,EAAG,CACnF,KAAK,cAAgB,GACrB,MAAMvlB,EAAU,OAAOulB,EAAK,YAAY,KAAW,OAAO,CAAC,EACrDh3B,EAAQywD,EAA2Bz5B,EAAK,KAAK,EAI9Cw5B,EAAoB/+C,CAAO,EAOrBzR,IAAU,IAAW,UAAYwwD,EAAoB/+C,CAAO,EAAE,QAAU,IAAW,SAC5F++C,EAAoB/+C,CAAO,EAAE,MAAQ,IAAW,SAEhDzR,IAAU,IAAW,SACrBwwD,EAAoB/+C,CAAO,EAAE,QAAU,IAAW,UAClD++C,EAAoB/+C,CAAO,EAAE,QAAU,IAAW,UAElD++C,EAAoB/+C,CAAO,EAAE,MAAQ,IAAW,SAbhD++C,EAAoB/+C,CAAO,EAAI,CAC7B,MAAAzR,EACA,GAAI,OAAO,KAAKwwD,CAAmB,EAAE,OACrC,QAAA/+C,EACA,YAAa7G,CACf,CAUJ,CACF,CAAC,CACH,EACO,OAAO,OAAO4lD,CAAmB,CAC1C,CAAC,CACH,EAEA,KAAK,SAAWH,EAAoB,UAAU,CAC5C,KAAOK,GAAgB,CACrB,MAAM5uE,KAAQ,MAAY4uE,CAAW,EACrC,KAAK,eAAe,CAClB,MAAO,KAAa,KACpB,OAAQ,CACN,CACE,GAAG5uE,EACH,KAAM,CACJ,GAAGA,EAAM,KACT,UAAW,KAAU,WACvB,CACF,CACF,EACA,UAAW+X,EAAU,MAAM,KAC7B,CAAC,CACH,EACA,MAAQQ,GAAQ,CACd,KAAK,YAAYA,CAAG,EACpB,KAAK,eAAe,CAClB,MAAO,KAAa,MACpB,OAAQ,CAAC,EACT,OAAQ,CACN,CACE,WAAS,MAAoBA,CAAG,CAClC,CACF,EACA,UAAWR,EAAU,MAAM,KAC7B,CAAC,CACH,CACF,CAAC,CACH,CAEQ,QAAQA,EAAwC,CACtD,MAAMma,KAAY,MAAqB,IAAI,EACrC,CAAE,IAAAwnB,CAAI,EAAIxnB,EAAU,MAuB1B,MArBI,GAACwnB,GAKD,IAAO,4BAIP3hC,EAAU,MAAM,MAAM,IAAI,KAAO,OAIjC,KAAK,gBAAkB,IAQvB,EAHF,KAAW,cAAc,IAAoB,gBAAgB,GAC7D,KAAW,cAAc,IAAoB,wBAAwB,GAOzE,CAMF,CAEO,SAAS42D,EAA2BzwD,EAA0C,CACnF,OAAIA,IAAU,KAAsB,OAC3B,IAAW,SACTA,IAAU,KAAsB,QAClC,IAAW,QAEb,IAAW,EACpB,C,0GC1LO,SAAS2wD,EAAa,CAAE,GAAA/lD,EAAI,OAAAoY,EAAQ,kBAAA4tC,EAAmB,mBAAAC,EAAoB,OAAA5sE,CAAO,EAAsB,CAC7G,MAAM+jB,KAAe,UAAc,EAG7B,CAAC8oD,EAAaC,CAAc,KAAI,YAAS,CAAC,EAC1CpoD,KAAY,KAAgB,KAElC,mBAAgB,IAAM,CACpB1kB,EAAO,QAAQ,OAASmc,GAAM,CAC5B4H,EAAa,QAAU5H,CACzB,CAAC,EAEDnc,EAAO,QAAQ,OAAQ,IAAM,CACtB0kB,EAAU,GAGfooD,EAAgBjtE,GAAMA,EAAI,CAAC,CAC7B,CAAC,CACH,EAAG,CAACG,EAAQ8sE,CAAc,CAAC,EAE3B,MAAMC,KAAe,WAAQ,IAAM,CACjC,MAAMC,EAA6B,CAAC,EAEpC,GAAI,CAACjpD,EAAa,SAAWgb,EAAO,SAAW,EAC7C,OAAOiuC,EAGT,QAAS5sE,EAAI,EAAGA,EAAI2+B,EAAO,OAAQ3+B,IAAK,CACtC,MAAMvC,EAAQkhC,EAAO3+B,CAAC,EAEtB,QAAS0Z,EAAI,EAAGA,EAAIjc,EAAM,OAAQic,IAAK,CACrC,MAAMwK,EAASsoD,EAAmB/uE,EAAOic,CAAC,EACrCwK,GAGL0oD,EAAQ,QACN,iBAAC,IAAM,CAAE,GAAG1oD,EAAQ,IAAK,GAAGqC,CAAE,WAAWvmB,CAAC,IAAI0Z,CAAC,IAC5C6yD,EAAkB9uE,EAAOic,CAAC,CAC7B,CACF,CACF,CACF,CAEA,SAAO,mBAAG,SAAAkzD,CAAA,CAAQ,CACpB,EAAG,CAACjuC,EAAQ4tC,EAAmBE,CAAW,CAAC,EAE3C,OAAK9oD,EAAa,WAKhB,OAAC,KACC,KAAMA,EAAa,QAAQ,KAAK,KAAO,OAAO,iBAC9C,IAAKA,EAAa,QAAQ,KAAK,IAAM,OAAO,iBAE3C,SAAAgpD,CAAA,CACH,EATO,IAWX,C,oKC1EO,SAASE,EAAiBxvE,EAAgC,CAC/D,MAAMyvE,EAAQzvE,EAAK,MAAM,IAAKoC,GAAMstE,EAAUttE,EAAGpC,EAAK,SAAS,CAAC,EAE1DI,EAAQ,IAAI,iBAAiB,CACjC,OAAQ,CACN,CAAE,KAAM,UAAW,KAAM,UAAU,MAAO,EAC1C,CAAE,KAAM,SAAU,KAAM,UAAU,MAAO,EACzC,CAAE,KAAM,eAAgB,KAAM,UAAU,MAAO,EAC/C,CAAE,KAAM,gBAAiB,KAAM,UAAU,MAAO,EAChD,CAAE,KAAM,cAAe,KAAM,UAAU,MAAO,EAC9C,CAAE,KAAM,cAAe,KAAM,UAAU,KAAM,EAC7C,CAAE,KAAM,YAAa,KAAM,UAAU,MAAO,EAC5C,CAAE,KAAM,WAAY,KAAM,UAAU,MAAO,EAC3C,CAAE,KAAM,OAAQ,KAAM,UAAU,KAAM,EACtC,CAAE,KAAM,aAAc,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,EACxD,CAAE,KAAM,OAAQ,KAAM,UAAU,KAAM,EACtC,CAAE,KAAM,WAAY,KAAM,UAAU,KAAM,EAC1C,CAAE,KAAM,cAAe,KAAM,UAAU,KAAM,CAC/C,EACA,KAAM,CACJ,2BAA4B,QAC5B,OAAQ,CACN,YAAa,QACf,CACF,CACF,CAAC,EAED,UAAWo/B,KAAQiwC,EACjBrvE,EAAM,IAAIo/B,CAAI,EAGhB,OAAOp/B,CACT,CAEA,SAASsvE,EAAUlwC,EAAYmwC,EAAuD,CACpF,MAAMC,EAAepwC,EAAK,YAAY,KAAM9e,GAAMA,EAAE,UAAY,UAAU,GAAG,OAE7E,MAAO,CACL,OAAQ8e,EAAK,OACb,QAASA,EAAK,QACd,aAAAowC,EACA,cAAepwC,EAAK,cAEpB,UAAWA,EAAK,UAAY,IAC5B,SAAUA,EAAK,SAAW,IAC1B,KAAMA,EAAK,KAAK,IAAKqwC,IAAO,CAC1B,GAAGA,EACH,UAAWA,EAAE,UAAY,GAC3B,EAAE,EACF,KAAMrwC,EAAK,KACX,SAAUA,EAAK,UAAY,OAC3B,YAAaA,EAAK,YAClB,WAAYA,EAAK,YAAY,OAAQ9e,GAAMA,EAAE,SAAWkvD,CAAY,GAAK,CAAC,EAC1E,YAAaD,EAAUnwC,EAAK,SAAS,EAAE,YACvC,YAAamwC,EAAUnwC,EAAK,SAAS,EAAE,IACzC,CACF,CAEO,SAASswC,EAAkB9vE,EAAwC,CACxE,IAAI+vE,EAA+B,CACjC,QAAS,GACT,MAAO,CAAC,EACR,UAAW,CAAC,EACZ,SAAU,IACZ,EACIJ,EAAsB,CAAC,EAE3B,QAAShtE,EAAI,EAAGA,EAAI3C,EAAK,OAAQ2C,IAAK,CACpC,MAAM68B,EAAOx/B,EAAK,IAAI2C,CAAC,EAGlBotE,EAAc,UACjBA,EAAc,QAAUvwC,EAAK,SAI1BmwC,EAAU,KAAMnxC,GAAMA,IAAMgB,EAAK,WAAW,IAC/CmwC,EAAU,KAAKnwC,EAAK,WAAW,EAC/BuwC,EAAc,UAAU,IAAIJ,EAAU,MAAM,EAAE,EAAI,CAChD,YAAanwC,EAAK,YAClB,KAAMA,EAAK,WACb,GAIFuwC,EAAc,MAAM,KAAK,CACvB,QAASvwC,EAAK,QACd,OAAQA,EAAK,OACb,SAAUA,EAAK,SAAW,IAC1B,WAAYA,EAAK,aACb,CACE,CACE,QAAS,WACT,OAAQA,EAAK,aACb,QAASA,EAAK,OAChB,CACF,EACA,CAAC,EACL,MAAO,EACP,KAAMA,EAAK,KAAK,IAAKqwC,IAAiB,CACpC,GAAGA,EACH,UAAWA,EAAE,UAAY,GAC3B,EAAE,EACF,cAAerwC,EAAK,cACpB,UACE,OAAO,KAAKuwC,EAAc,SAAS,EAAE,KAClCxsD,GAAQwsD,EAAc,UAAUxsD,CAAG,EAAE,cAAgBic,EAAK,WAC7D,GAAK,GACP,UAAWA,EAAK,UAAY,IAC5B,KAAMA,EAAK,KACX,SAAUA,EAAK,SAAWA,EAAK,SAAW,IAC5C,CAAC,CACH,CAEA,MAAO,CAAE,KAAM,CAACuwC,CAAa,EAAG,MAAO,EAAG,MAAO,EAAG,OAAQ,EAAG,OAAQ,IAAK,CAC9E,CChHO,SAASC,EAAkBC,EAAiC,CACjE,MAAMC,EAAWD,EAAO,IAAIE,CAAa,EACnC/vE,EAAQ,IAAI,iBAAiB,CACjC,OAAQ,CACN,CAAE,KAAM,UAAW,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACtD,CAAE,KAAM,SAAU,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACrD,CAAE,KAAM,eAAgB,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC3D,CAAE,KAAM,gBAAiB,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC5D,CAAE,KAAM,cAAe,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EAC1D,CAAE,KAAM,cAAe,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,EACzD,CAAE,KAAM,YAAa,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACxD,CAAE,KAAM,WAAY,KAAM,UAAU,OAAQ,OAAQ,CAAC,CAAE,EACvD,CAAE,KAAM,OAAQ,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,EAClD,CAAE,KAAM,OAAQ,KAAM,UAAU,MAAO,OAAQ,CAAC,CAAE,CACpD,EACA,KAAM,CACJ,2BAA4B,QAC5B,OAAQ,CACN,YAAa,QACf,CACF,CACF,CAAC,EAED,UAAWo/B,KAAQ0wC,EACjB9vE,EAAM,IAAIo/B,CAAI,EAGhB,OAAOp/B,CACT,CAEA,SAAS+vE,EAAc3wC,EAAgC,CACrD,MAAM3T,EAAM,CACV,QAAS2T,EAAK,QACd,OAAQA,EAAK,GACb,aAAcA,EAAK,SACnB,cAAeA,EAAK,KACpB,YAAaA,EAAK,eAAe,aAAeA,EAAK,gBAAgB,aAAe,UACpF,YAAaJ,EAAYI,CAAI,EAC7B,UAAWA,EAAK,UAAY,IAC5B,SAAUA,EAAK,SAAW,IAC1B,KAAMA,EAAK,aAAa,IAAI4wC,CAAmB,GAAK,CAAC,EACrD,KAAM,OAAO,KAAK5wC,EAAK,MAAQ,CAAC,CAAC,EAAE,OAA4B,CAACtmB,EAAKqK,IAE/DA,IAAQ,SACVrK,EAAI,KAAK,CACP,IAAK,QACL,MAAO,EACT,CAAC,EAEDA,EAAI,KAAK,CACP,IAAK,aACL,MAAOsmB,EAAK,KAAM,KACpB,CAAC,EACMtmB,IAETA,EAAI,KAAK,CAAE,IAAAqK,EAAK,MAAOic,EAAK,KAAMjc,CAAG,CAAE,CAAC,EACjCrK,GACN,CAAC,CAAC,CACP,EAEA,OAAIsmB,EAAK,OACP3T,EAAI,KAAO,CACT,CACE,IAAK,OACL,MAAO2T,EAAK,IACd,EACA,GAAI3T,EAAI,MAAQ,CAAC,CACnB,GAGE2T,EAAK,SACP3T,EAAI,KAAO,CACT,CACE,IAAK,SACL,MAAO2T,EAAK,MACd,EACA,GAAI3T,EAAI,MAAQ,CAAC,CACnB,GAGKA,CACT,CAMA,SAASukD,EAAoB7lD,EAAwC,CACnE,MAAO,CACL,UAAWA,EAAW,UACtB,OAAQ,CACN,CACE,IAAK,aACL,MAAOA,EAAW,KACpB,CACF,CACF,CACF,CAEA,SAAS6U,EAAYI,EAAuC,CAC1D,MAAM6wC,EAAW7wC,EAAK,eAAiBA,EAAK,eAC5C,OAAK6wC,EAGE,CACLC,EAAW,OAAQD,EAAS,IAAI,EAChCC,EAAW,OAAQD,EAAS,IAAI,EAChCC,EAAW,OAAQD,EAAS,IAAI,EAChCC,EAAW,eAAgB9wC,EAAK,cAAgB,QAAU,QAAQ,CACpE,EAAE,OAAQ5uB,GAAoC,EAAQA,CAAK,EAPlD,CAAC,CAQZ,CAEA,SAAS0/D,EAAc/sD,EAAa1nB,EAA4C,CAC9E,GAAKA,EAGL,MAAO,CACL,IAAA0nB,EACA,MAAA1nB,CACF,CACF,CAKO,MAAM00E,EAAqBvwE,GAAuD,CACvF,IAAI0hC,EAAyB,CAAC,EAE9B,QAAS/+B,EAAI,EAAGA,EAAI3C,EAAK,OAAQ2C,IAAK,CACpC,MAAM68B,EAAOx/B,EAAK,IAAI2C,CAAC,EACvB++B,EAAS,KAAK,CACZ,QAASlC,EAAK,QACd,SAAUA,EAAK,aACf,KAAMA,EAAK,cACX,GAAIA,EAAK,OACT,UAAWA,EAAK,UAAY,IAC5B,SAAUA,EAAK,SAAW,IAC1B,GAAGgxC,EAAYhxC,CAAI,EACnB,YAAaA,EAAK,MAAM,OACpBA,EAAK,KAAK,IAAKqwC,IAAiB,CAAE,UAAWA,EAAE,UAAW,MAAOA,EAAE,OAAO,CAAC,EAAE,KAAM,EAAE,EACrF,OACJ,KAAMrwC,EAAK,MAAM,OACbA,EAAK,KACF,OAAQj+B,GAAyBA,EAAE,MAAQ,QAAUA,EAAE,MAAQ,gBAAkBA,EAAE,MAAQ,QAAQ,EACnG,OAAO,CAAC0+B,EAAiC1+B,IACpCA,EAAE,MAAQ,QACL,CACL,GAAG0+B,EACH,CAAC1+B,EAAE,GAAG,EAAGi+B,EAAK,MAAM,KAAMj+B,GAAyBA,EAAE,MAAQ,YAAY,GAAG,OAAS,EACvF,EAEK,CAAE,GAAG0+B,EAAM,CAAC1+B,EAAE,GAAG,EAAGA,EAAE,KAAM,EAClC,CAAC,CAAC,EACP,OACJ,KAAMi+B,EAAK,MAAM,KAAMj+B,GAAyBA,EAAE,MAAQ,MAAM,GAAG,MACnE,OAAQi+B,EAAK,MAAM,KAAMj+B,GAAyBA,EAAE,MAAQ,QAAQ,GAAG,KACzE,CAAC,CACH,CAEA,OAAOmgC,CACT,EAGM8uC,EAAehxC,GAAsE,CACzF,MAAMjc,EACJic,EAAK,YAAY,KAAMj+B,GAAyBA,EAAE,MAAQ,cAAc,GAAG,QAAU,QACjF,gBACA,iBACN,OAAOi+B,EAAK,cAAgB,UACxB,CACE,CAACjc,CAAG,EAAG,CACL,YAAaic,EAAK,YAClB,KAAMA,EAAK,YAAY,KAAMj+B,GAAyBA,EAAE,MAAQ,MAAM,GAAG,MACzE,KAAMi+B,EAAK,YAAY,KAAMj+B,GAAyBA,EAAE,MAAQ,MAAM,GAAG,MACzE,KAAMi+B,EAAK,YAAY,KAAMj+B,GAAyBA,EAAE,MAAQ,MAAM,GAAG,KAC3E,CACF,EACA,MACN,EClKO,SAASkvE,EAAuBC,EAA6CptE,EAAQ,GAAI6O,EAAmB,CAAC,EAAG,CACrH,IAAIw+D,EAAiB,GAErBD,EAAU,MAAM,QAASE,GAAa,CACpC,MAAMC,EAAS,GAAGD,EAAS,KAAK,KAAK,KAAK,UAAUA,EAAS,KAAK,CAAC;AAAA,EACnED,EAAiBA,EAAiBE,CACpC,CAAC,EACDF,EAAiBA,EAAiB;AAAA;AAAA,EAElCD,EAAU,KAAK,QAAS7kD,GAAQ,CAC9B,MAAMilD,EAAS3+D,EAAO,OAAqBA,EAAO,IAAKzT,GAAUmtB,EAAI,OAAOntB,CAAK,GAAK,EAAE,EAAE,KAAK,GAAG,EAAnEmtB,EAAI,MAC7BklD,EAASllD,EAAI,YAAc,OAAO,MAASA,EAAI,WAAW,EAAE,YAAY,EAAI,IAAOilD,EAAQ;AAAA,EACjGH,EAAiBA,EAAiBI,CACpC,CAAC,EAED,MAAMC,EAAO,IAAI,KAAK,CAACL,CAAc,EAAG,CACtC,KAAM,0BACR,CAAC,EACKM,EAAW,GAAG3tE,EAAQ,GAAGA,CAAK,QAAU,MAAM,OAAI,MAAe,IAAI,IAAM,CAAC,OAClF,IAAO0tE,EAAMC,CAAQ,CACvB,CAUO,SAASC,EACdzyE,EACA6E,EACA6tE,EACAC,EAAiC,IAAkB,KACnDC,EAAyB,GACzB,CACA,IAAIL,EAEJ,GAAIK,EAAwB,CAU1B,MAAMC,KAAe,MAAM,CAAC7yE,CAAS,EAAG,CAAE,GAAG0yE,EAAW,eAAgB,GAAO,UAAW,GAAK,CAAC,EAC1FI,EAAU,IAAI,YAAY,MAAM,KAAK,SAAWD,CAAY,EAAE,IAAKE,GAASA,EAAK,WAAW,CAAC,CAAC,CAAC,EACrGR,EAAO,IAAI,KAAK,CAACO,CAAO,EAAG,CACzB,KAAM,2BACR,CAAC,CACH,KAAO,CACL,MAAMD,KAAe,MAAM,CAAC7yE,CAAS,EAAG0yE,CAAS,EACjDH,EAAO,IAAI,KAAK,CAACM,CAAY,EAAG,CAC9B,KAAM,wBACR,CAAC,CACH,CAEA,MAAM7hB,EAAiB2hB,IAAgB,IAAkB,KAAO,OAASA,EAAY,kBAAkB,EAAI,GACrGH,EAAW,GAAG3tE,CAAK,QAAQmsD,CAAc,OAAI,MAAe,IAAI,IAAM,CAAC,OAC7E,IAAOuhB,EAAMC,CAAQ,CACvB,CAQO,SAASQ,EAAetd,EAAe7wD,EAAe,CAC3D,MAAM0tE,EAAO,IAAI,KAAK,CAAC,KAAK,UAAU7c,CAAI,CAAC,EAAG,CAC5C,KAAM,kBACR,CAAC,EAEK8c,EAAW,GAAG3tE,CAAK,OAAI,MAAe,IAAI,IAAM,CAAC,QACvD,IAAO0tE,EAAMC,CAAQ,CACvB,CAQO,SAASS,EAAoBtxE,EAAkBkD,EAAuB,CAC3E,IAAIquE,EAAc,OAClB,OAAQvxE,EAAM,MAAM,QAAQ,YAAa,CACvC,IAAK,SAAU,CACb,IAAI8lC,EAAM4pC,EAAkB,IAAI,IAAiB1vE,CAAK,CAAC,EACvDqxE,EAAevrC,EAAK5iC,CAAK,EACzBquE,EAAc,SACd,KACF,CACA,IAAK,SAAU,CACb,IAAIzrC,EAAMqqC,EAAkB,IAAI,IAAiBnwE,CAAK,CAAC,EACvDqxE,EAAevrC,EAAK5iC,CAAK,EACzBquE,EAAc,SACd,KACF,CACA,IAAK,OACL,QAAS,CACP,IAAIzrC,KAAM,MAAgB,IAAI,IAAiB9lC,CAAK,CAAC,EACrDqxE,EAAevrC,EAAK5iC,CAAK,EACzB,KACF,CACF,CACA,OAAOquE,CACT,C,6DCzHO,MAAMhnC,EAAgB,SAYhBtiC,EAAmC,CAC9C,UAAW,KAAyB,MACpC,UAAW,KAAyB,KACpC,YAAa,KAA2B,KACxC,uBAAwB,KAA8B,SACtD,kBAAmB,GACnB,SAAU,KAAwB,KAClC,WAAY,EACd,C,mECpBO,IAAKupE,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,KAAO,OAFGA,IAAAA,GAAA,IAKAC,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,OAAS,SAHCA,IAAAA,GAAA,IAMAC,GAAAA,IACVA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,WAAa,aACbA,EAAA,WAAa,aAJHA,IAAAA,GAAA,IAOAC,GAAAA,IACVA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,KAAO,OAHGA,IAAAA,GAAA,G,wRChBZ,MAAMC,EAAc,IAAI,IAAsB,CAAC,UAAW,QAAS,cAAe,aAAa,CAAC,EAEzF,SAASC,EAAY94D,EAAuBnZ,EAAqC,CACtF,MAAMgxB,EAAuB,CAAC,EACxB0H,EAAuB,CAC3B,QAAS,GACT,QAAS,CACP,IAAK,CAAC,EACN,OAAQ,CAAC,EACT,QAAS,CAAC,EACV,OAAQ,CAAC,EACT,KAAM,CAAC,CACT,EACA,OAAA1H,CACF,EAEA,IAAIkhD,EAAS,EACb,MAAMC,EAAc,IAAI,IACxB,QAAS3zC,KAAKx+B,EAAM,CAClB,GAAI,CAAE,GAAAkpB,CAAG,EAAIsV,EACRtV,IACEgpD,IACHA,EAASE,EAAgB,CAACj5D,EAASnZ,CAAI,CAAC,GAE1CkpB,EAAKgpD,IACL1zC,EAAI,CAAE,GAAGA,EAAG,GAAAtV,CAAG,GAEjBipD,EAAY,IAAIjpD,EAAIsV,CAAC,CACvB,CAEA,UAAWt/B,KAASia,EAAS,CAC3B,MAAMokB,EAAS40C,EAAY,IAAIjzE,EAAM,EAAE,EACvC,GAAI,CAACq+B,EAAQ,CACX7E,EAAK,QAAU,GACfA,EAAK,QAAQ,OAAO,KAAKx5B,EAAM,EAAE,EACjCA,EAAM,QAAQ,EACd,QACF,CAIA,GAHAizE,EAAY,OAAOjzE,EAAM,EAAE,EAGvBq+B,IAAWr+B,EAAO,CACpB8xB,EAAO,KAAK9xB,CAAK,EACjBw5B,EAAK,QAAQ,KAAK,KAAKx5B,EAAM,EAAE,EAC/B,QACF,CAGA,GAAIA,EAAM,OAASq+B,EAAO,KAAM,CAC9B,MAAM80C,EAAOnzE,EAAM,aAAa,EAChC,IAAIozE,GAAS,GACTC,EAAW,GACf,SAAW,CAAChvD,GAAK1nB,EAAK,IAAK,OAAO,QAAQ0hC,CAAM,EAC9C,GAAI,IAAC,eAAY1hC,GAAOw2E,EAAK9uD,EAAG,EAAGivD,CAAkB,EAGnD,GAFA95C,EAAK,QAAU,GACf45C,GAAS,GACLN,EAAY,IAAIzuD,EAAU,EAC3BrkB,EAAcqkB,EAAG,EAAI1nB,GACtB02E,EAAW,OACN,CACLA,EAAW,GACX,KACF,CAIJ,GAAID,GAAQ,CACVthD,EAAO,KAAK9xB,CAAK,EACjBw5B,EAAK,QAAQ,KAAK,KAAKx5B,EAAM,EAAE,EAC/B,QACF,CAEA,GAAIqzE,EAAU,CACZvhD,EAAO,KAAK9xB,CAAK,EACjBw5B,EAAK,QAAQ,OAAO,KAAKx5B,EAAM,EAAE,EACjC,QACF,CACF,CACAA,EAAM,QAAQ,EAEd,MAAM0b,EAAO,IAAIi2C,EAAA,GAAWtzB,CAAM,EAClC3iB,EAAK,IAAM,GAAGA,EAAK,EAAE,WAAW,KAAK,IAAI,CAAC,GAC1CoW,EAAO,KAAKpW,CAAI,EAChB8d,EAAK,QAAU,GACfA,EAAK,QAAQ,QAAQ,KAAKx5B,EAAM,EAAE,CACpC,CAGA,UAAWqC,KAAK4wE,EAAY,OAAO,EACjCnhD,EAAO,KAAK,IAAI6/B,EAAA,GAAWtvD,CAAC,CAAC,EAC7Bm3B,EAAK,QAAU,GACfA,EAAK,QAAQ,IAAI,KAAKn3B,EAAE,EAAE,EAG5B,OAAOm3B,CACT,CAGA,SAAS85C,EAAmB3xD,EAAY9e,EAAY,CAIlD,GAHI8e,GAAK,OAAS9e,IAAM,KAAYA,IAAM,MAAaA,GAAK,OAGxDA,GAAK,OAAS8e,IAAM,KAAYA,IAAM,MAAaA,GAAK,MAC1D,MAAO,EAGX,CAEA,SAASuxD,EAAgBvpC,EAA+B,CACtD,IAAIxkC,EAAM,EACV,UAAW2sB,KAAU6X,EACnB,UAAW3pC,KAAS8xB,EACd9xB,EAAM,GAAKmF,IACbA,EAAMnF,EAAM,IAIlB,OAAOmF,EAAM,CACf,C,cChIO,SAASouE,EAAmBC,EAAyBC,EAAiC,CAC3F,OAAID,EAAY,kBAAoB,KAC3B,GAIPC,EAAW,QAAQ,GAAKD,EAAY,QAAQ,EAAIA,EAAY,QAAQ,GACpEC,EAAW,QAAQ,IAAMD,EAAY,QAAQ,CAMjD,CAEO,SAASE,EAAgB5hD,EAAsB,CACpD,UAAW9xB,KAAS8xB,EAElB,GADA,OAAO9xB,EAAM,WACTA,EAAM,QAAQ,OAChB,UAAW2zE,KAAkB3zE,EAAM,OACjC,OAAO2zE,EAAe,UAI9B,CCwCO,MAAMC,CAAoC,CAmE/C,YACE9yE,EACAw3B,EACAn4B,EAMA,CAxCF,KAAQ,iCAAmC,GAC3C,KAAQ,kBAAsC,KAwC5C,KAAK,sBAAwBA,GAAS,uBAAyB,KAC/D,KAAK,OAAS,IAAI0zE,EAAA,EAClB,KAAK,GAAK/yE,EAAK,IAAM,KAErB,KAAK,IAAMA,EAAK,KAAOw3B,GAAM,KAAO,KACpC,KAAK,SAAWx3B,EAAK,UAAY,OACjC,KAAK,MAAQA,EAAK,OAAS,WAC3B,KAAK,YAAcA,EAAK,YACxB,KAAK,KAAOA,EAAK,MAAQ,CAAC,EAC1B,KAAK,SAAWA,EAAK,UAAY,GACjC,KAAK,UAAYA,EAAK,WAAa,GACnC,KAAK,SAAWA,EAAK,WAAa,GAClC,KAAK,QAAUA,EAAK,QACpB,KAAK,aAAeA,EAAK,cAAgB,EACzC,KAAK,KAAOA,EAAK,MAAQ,CAAE,KAAM,SAAU,GAAI,KAAM,EACrD,KAAK,WAAaA,EAAK,YAAc,CAAC,EACtC,KAAK,QAAUA,EAAK,QACpB,KAAK,WAAa,KAAK,8BAA8B,KAAK,gBAAgBA,EAAK,UAAU,CAAC,EAC1F,KAAK,YAAc,KAAK,gBAAgBA,EAAK,WAAW,EACxD,KAAK,QAAUA,EAAK,QACpB,KAAK,SAAWA,EAAK,SACrB,KAAK,cAAgBA,EAAK,eAAiB,EAC3C,KAAK,qBAAuBA,EAAK,sBAAwB,EACzD,KAAK,QAAUA,EAAK,SAAW,EAC/B,KAAK,MAAQA,EAAK,OAAS,CAAC,EAC5B,KAAK,OAASA,EAAK,QAAU,KAC7B,KAAK,UAAS,OAAIA,EAAK,QAAU,CAAC,EAAIuwB,GAAc,IAAIsgC,EAAA,GAAWtgC,CAAS,CAAC,EAE7E,KAAK,UAAYvwB,EAAK,UAEtB,KAAK,qBAAoB,aAAUA,CAAI,EACvC,KAAK,sBAAqB,aAAU,KAAK,UAAU,EACnD,KAAK,gBAAe,aAAU,KAAK,IAAI,EAEvC,KAAK,0BAA0B,EAC/B,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAE3C,KAAK,SAASw3B,CAAI,EAClB,KAAK,aAAax3B,EAAMX,GAAS,mBAAmB,EAEpD,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,+BAAiC,KACtC,KAAK,sBAAwB,IAAIgf,EAAA,GACjC,KAAK,YAAc,KAAK,IAAI,EAC5B,KAAK,sBAAsB,IAAI,KAAU,UAAU,KAAkB,KAAK,wBAAwB,KAAK,IAAI,CAAC,CAAC,EAC7G,KAAK,sBAAsB,IACzB,KAAU,UAAU,KAA+B,KAAK,qCAAqC,KAAK,IAAI,CAAC,CACzG,EACA,KAAK,sBAAsB,IACzB,KAAU,UAAU,KAAuB,KAAK,6BAA6B,KAAK,IAAI,CAAC,CACzF,CACF,CAjFA,MAAO,CAAP,KAAO,uBAAqD,CAC1D,OAAQ,GACR,KAAM,GACN,OAAQ,GACR,WAAY,GACZ,aAAc,GACd,mBAAoB,GACpB,sBAAuB,GACvB,YAAa,GACb,YAAa,GACb,sBAAuB,GACvB,WAAY,GACZ,sBAAuB,GACvB,+BAAgC,GAChC,YAAa,GACb,iCAAkC,GAClC,kBAAmB,EACrB,EAkEA,2BAA4B,CACZ,KAAK,YAAY,KAAK,KAAMzN,GAASA,EAAK,UAAY,CAAC,GAKrE,KAAK,YAAY,KAAK,QAAQ,CAC5B,WAAY,CAAE,IAAK,gBAAiB,KAAM,SAAU,EACpD,KAAM,uBACN,KAAM,YACN,UAAW,KACX,OAAQ,GACR,KAAM,GACN,QAAS,CACX,CAAC,CACH,CAEQ,SAAS4mB,EAAsB,CACrCA,EAAOA,GAAQ,CAAC,EAEhBA,EAAK,SAAWA,EAAK,WAAa,GAClCA,EAAK,QAAUA,EAAK,UAAY,GAChCA,EAAK,QAAUA,EAAK,UAAY,GAChCA,EAAK,QAAUA,EAAK,UAAY,GAChCA,EAAK,UAAYA,EAAK,YAAc,GAEpCA,EAAK,aAAeA,EAAK,QACzBA,EAAK,gBAAkBA,EAAK,SAAW,CAAC,KAAK,SAC7CA,EAAK,uBAAyB,GAEzB,KAAK,WACRA,EAAK,QAAU,GACfA,EAAK,UAAY,GACjBA,EAAK,QAAU,IAGjB,KAAK,KAAOA,CACd,CAKA,qBAAqBn4B,EAAwC,CAC3D,MAAM2zE,KAAsB,YAAU3zE,GAAW,CAAC,EAAG,CACnD,cAAe,GACf,cAAe,EACjB,CAAC,EAGD,IAAI4zE,EAAY,CAAC,EACjB,UAAWzgB,KAAY,KACjBsgB,EAAe,uBAAuBtgB,CAAQ,GAAK,CAAC,KAAK,eAAeA,CAAQ,IAIpFygB,EAAKzgB,CAAQ,KAAI,aAAU,KAAKA,CAAQ,CAAC,GAG3C,OAAAygB,EAAK,WAAa,KAAK,uBAAuBD,CAAmB,EAE5DA,EAAoB,gBACvBC,EAAK,KAAO,KAAK,cAInBA,EAAK,OAAS,KAAK,mBAAmB,EAGtCA,KAAO,KAA4BA,CAAI,EACvCA,EAAK,aAAe,IAAMA,EAAK,WAAW,KAEnCA,CACT,CAKA,kBAAkB5zE,EAAmC,CACnD,MAAM0xB,EAAQ,KAAK,qBAAqB1xB,CAAO,EAGzC6zE,EAAY,KAAK,UAAUniD,CAAK,EAGtC,OAFkB,KAAK,MAAMmiD,CAAS,CAGxC,CAcA,aAAaliD,EAAuC,CAClD,MAAM0H,EAAOu5C,EAAY,KAAK,OAAQjhD,GAAU,CAAC,CAAC,EAClD,OAAI0H,EAAK,UACP,KAAK,OAASA,EAAK,QAAU,CAAC,EAC9B,KAAK,oBAAoB,EACzB,KAAK,OAAO,QAAQ,IAAI,IAA6B,GAEhDA,CACT,CAEQ,oBAAqB,CAC3B,OAAO,KAAK,OACT,OAAQx5B,GAAU,KAAK,iBAAiB,GAAK,EAAEA,EAAM,eAAiBA,EAAM,cAAc,EAC1F,IAAKA,GAAU,CAEd,GAAIA,EAAM,aAAc,CACtB,KAAM,CAAE,GAAAgqB,EAAI,MAAA5lB,EAAO,aAAA6vE,EAAc,QAAAhiB,CAAQ,EAAIjyD,EAC7C,MAAO,CACL,GAAAgqB,EACA,MAAA5lB,EACA,QAAA6tD,EACA,aAAc,CACZ,IAAKgiB,EAAa,IAClB,KAAMA,EAAa,IACrB,CACF,CACF,CAIA,OAAI,KAAK,aAAe,KAAK,YAAY,KAAOj0E,EAAM,GAC7C,KAAK,YAAY,aAAa,EAGhCA,EAAM,aAAa,CAC5B,CAAC,EACA,IAAKmtB,IACA,KAAK,iBAAiB,IAK1B,OAAOA,EAAM,WAGTA,EAAM,OAAS,OAASA,EAAM,QAAUA,EAAM,OAAO,OAAS,IAChEA,EAAM,OAASA,EAAM,OAClB,OAAQskC,GAAyB,CAACA,EAAS,aAAa,EACxD,IAAKtkC,IACJ,OAAOA,EAAM,WACNA,EACR,IAGEA,EACR,CACL,CAEQ,uBAAuBhtB,EAAuB,CACpD,MAAM+zE,EAAoB,KAAK,oBAAoB,MAAQ,CAAC,EAGtDC,EAFmB,KAAK,sBAAsB,KAAK,GAAG,EAExB,IAAKzzE,GAAa,CACpD,MAAM0zE,EAAoB,IAAiB,IAAI1zE,EAAS,IAAI,EAAE,aAAaA,EAAUP,EAAQ,aAAa,EAE1G,GAAI,CAACA,EAAQ,cAAe,CAC1B,MAAMk0E,EAAWH,EAAkB,KACjC,CAAC,CAAE,KAAAnhE,EAAM,KAAAtW,EAAK,IAAWsW,IAASrS,EAAS,MAAQjE,KAASiE,EAAS,IACvE,EAEA,GAAI,CAAC2zE,EACH,OAAOD,EAGL1zE,EAAS,OAAS,QACpB0zE,EAAkB,QAAUC,EAAS,SAErCD,EAAkB,QAAUC,EAAS,QACrCD,EAAkB,QAAUC,EAAS,QAEzC,CAEA,OAAOD,CACT,CAAC,EAGD,MAAO,CAAE,QADqB,KAA4BD,CAAU,CAC/B,CACvC,CAEA,iBAAiBl7D,EAAsB,CACrC,KAAK,OAAO,QAAQ,IAAI,KAAsBA,CAAS,CAAC,KACxD,SAAS,MAAmB,KAAK,IAAKA,CAAS,CAAC,GAE5C,KAAK,aAAe,KAAK,eAC3B,KAAK,iCAAmC,GAE5C,CAEA,aAAaxP,EAA+B,CAAE,WAAY,GAAM,SAAU,CAAC,CAAE,EAAG,CAI9E,GAHA,KAAK,OAAO,QAAQ,IAAI,GAAc,EACtC,KAAK,YAAc,KAAK,IAAI,EAExB,KAAK,cAAgBA,EAAM,YAAcA,EAAM,SAAS,SAAS,KAAK,YAAY,EAAE,GAAI,CAC1F,KAAK,YAAY,QAAQ,EACzB,MACF,CAEA,MAAM6qE,EAAkB,KAAK,OAAO,OACjCt0E,GAAU,CAAC,KAAK,uBAAuBA,CAAK,IAAMyJ,EAAM,YAAcA,EAAM,SAAS,SAASzJ,EAAM,EAAE,EACzG,EAKA,GAAI,CAAC,KAAK,WAAW,EACnB,UAAWA,KAASs0E,EAClBt0E,EAAM,kBAAoB,GAI9B,UAAWA,KAASs0E,EAClBt0E,EAAM,QAAQ,CAElB,CAEA,QAAS,CACP,KAAK,OAAO,QAAQ,IAAI,IAAa,EACrC,UAAWA,KAAS,KAAK,OACvBA,EAAM,OAAO,CAEjB,CAEA,iBAAiBA,EAAmB,CAClC,MAAMu0E,EAAav0E,EAAM,eAAe,EAAE,cAAc,EAEpD,CAAC,KAAK,uBAAuBA,CAAK,GAAK,CAACu0E,GAC1Cv0E,EAAM,QAAQ,CAElB,CAEA,uBAAuBA,EAAmB,CACxC,OAAQ,KAAK,aAAe,KAAK,cAAgB,EAAEA,EAAM,WAAaA,EAAM,UAC9E,CAEA,cAAcwzE,EAAqC,CACjD,eAAW,EAAE,gBAAgB,EAC7B,KAAK,YAAcA,EAAY,aAAa,EAC5C,KAAK,iCAAmC,GACjC,KAAK,WACd,CAEA,iBAAkB,CAChB,KAAK,YAAa,QAAQ,EAC1B,KAAK,YAAc,UAEnB,MAAW,EAAE,kBAAkB,EAE/B,KAAK,0DAA0D,CACjE,CAEA,cAAcxzE,EAAmB,CAC/B,KAAK,YAAcA,EACnB,KAAK,iCAAmC,GACxCA,EAAM,aAAa,EAAI,CACzB,CAEA,cAAcA,EAAmB,CAC/B,KAAK,YAAc,OACnBA,EAAM,aAAa,EAAK,EACxB,KAAK,0DAA0D,CACjE,CAEQ,2DAA4D,EAC9D,KAAK,gCAAkC,KAAK,oCAC9C,KAAK,aAAa,CAChB,SAAU,KAAK,gCAAkC,CAAC,EAClD,WAAY,KAAK,gCACnB,CAAC,EACD,KAAK,+BAAiC,KACtC,KAAK,iCAAmC,GAE5C,CAEQ,2BAA4B,CAClC,MAAMw0E,EAAM,IAAI,IAChB,IAAIC,EAAc,KAAK,eAAe,EACtC,UAAWz0E,KAAS,KAAK,cAAc,GACjC,CAACA,EAAM,IAAMw0E,EAAI,IAAIx0E,EAAM,EAAE,KAC/BA,EAAM,GAAKy0E,KAEbD,EAAI,IAAIx0E,EAAM,EAAE,CAEpB,CAEQ,8BAA8B00E,EAAuC,CAC3E,GAAI,CAACA,EAAW,KAAK,OACnB,OAAOA,EAGT,UAAWh0E,KAAYg0E,EAAW,KAC5Bh0E,EAAS,UAKTA,EAAS,QAAQ,QAAU,MAE1B,MAAM,QAAQA,EAAS,QAAQ,KAAK,GAAKA,EAAS,QAAQ,MAAM,SAAS,IAAI,KAE9EA,EAAS,QAAU,QAIzB,OAAOg0E,CACT,CAEQ,gBAAgB5zE,EAAY,CAAC,EAAG,CACtC,OAAAA,EAAK,OAAS,CAAC,EACRA,CACT,CAEA,gBAAiB,CACf,IAAIqE,EAAM,EAEV,UAAWnF,KAAS,KAAK,cAAc,EACjCA,EAAM,GAAKmF,IACbA,EAAMnF,EAAM,IAIhB,OAAOmF,EAAM,CACf,CAEA,CAAC,eAAgB,CACf,UAAWnF,KAAS,KAAK,OAAQ,CAC/B,MAAMA,EAEN,MAAM2wD,EAAY3wD,EAAM,QAAU,CAAC,EACnC,UAAWyxD,KAAYd,EACrB,MAAMc,CAEV,CACF,CAEA,aAAakjB,EAAsD,CACjE,QAASlxE,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtCkxE,EAAS,KAAK,OAAOlxE,CAAC,EAAGA,CAAC,CAE9B,CAEA,aAAaumB,EAAY4qD,EAAmB,GAA0B,CACpE,GAAI,KAAK,aAAe,KAAK,YAAY,KAAO5qD,EAC9C,OAAO,KAAK,YAGd,GAAI4qD,EAAkB,CACpB,UAAW50E,KAAS,KAAK,cAAc,EACrC,GAAIA,EAAM,KAAOgqB,EACf,OAAOhqB,EAIX,OAAO,IACT,KACE,QAAO,KAAK,OAAO,KAAMs/B,GAAMA,EAAE,KAAOtV,CAAE,GAAK,IAEnD,CAEA,aAAahqB,EAAuD,CAClE,MAAO,GAAQ,KAAK,KAAK,SAAWA,GAAS,CAACA,EAAM,eAAiBA,EAAM,OAAS,MACtF,CAEA,iBAAiBgqB,EAAwC,CACvD,OAAO,KAAK,aAAa,KAAK,aAAaA,CAAE,CAAC,CAChD,CAEA,SAASqH,EAAgB,CACvBA,EAAU,GAAK,KAAK,eAAe,EAEnC,KAAK,OAAO,QAAQ,IAAIsgC,EAAA,GAAWtgC,CAAS,CAAC,EAE7C,KAAK,oBAAoB,EAEzB,KAAK,OAAO,QAAQ,IAAI,IAA6B,CACvD,CAEA,WAAWwjD,EAAiC,CAC1C,KAAK,KAAO,CAAE,GAAG,KAAK,KAAM,GAAGA,CAAQ,EACvC,KAAK,OAAO,QAAQ,IAAI,IAA2B,CACrD,CAEA,cAAe,CACb,KAAK,SAAW,GAChB,KAAK,WAAW,CACd,gBAAiB,GACjB,QAAS,GACT,QAAS,EACX,CAAC,CACH,CAEA,qBAAsB,CACpB,KAAK,OAAO,KAAK,CAACC,EAAQC,IACpBD,EAAO,QAAQ,IAAMC,EAAO,QAAQ,EAC/BD,EAAO,QAAQ,EAAIC,EAAO,QAAQ,EAElCD,EAAO,QAAQ,EAAIC,EAAO,QAAQ,CAE5C,CACH,CAEA,oBAAoBC,EAAuB70E,EAAuB,CAChE,UAAWH,KAAS,KAAK,OACvBA,EAAM,UAAY,EAGhB,KAAK,cAEP,KAAK,YAAY,wBAA0B,KAAK,YAAY,UAAY,EACxE,KAAK,YAAY,UAAY,GAG/B,KAAK,kBAAoBg1E,EACzB,KAAK,mBAAqBA,EAAW,WAEjC70E,EAAQ,gBACV,KAAK,aAAe60E,EAAW,KAEnC,CAEA,mBAAoB,CAElB,MAAO,EADc,KAAK,OAAO,KAAM11C,GAAMA,EAAE,UAAU,CAE3D,CAEA,gBAAiB,CACf,GAAI,KAAK,iBAAiB,GAAK,CAAC,KAAK,aAAa,EAChD,OAIFo0C,EAAgB,KAAK,MAAM,EAE3B,MAAMuB,EAAiB,KAAK,OAAO,OAAQ31C,IAAO,CAACA,EAAE,QAAUA,EAAE,gBAAkBA,EAAE,aAAa,KAGlG,QAAK,KAAK,OAAQ,GAAG21C,CAAc,EACnCA,EAAe,IAAK31C,GAAMA,EAAE,QAAQ,CAAC,EACrC,KAAK,oBAAoB,CAC3B,CAEA,gBAAiB,CACf,GAAI,OAAK,iBAAiB,GAAK,CAAC,KAAK,aAAa,GAAK,KAAK,aAI5D,MAAK,eAAe,EAEpB,QAAS77B,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAAK,CAC3C,MAAMzD,EAAQ,KAAK,OAAOyD,CAAC,EACvBzD,EAAM,QACR,KAAK,YAAYA,EAAOyD,CAAC,CAE7B,CAEA,KAAK,oBAAoB,EACzB,KAAK,OAAO,QAAQ,IAAI,IAA6B,EACvD,CAEA,kBAAkBktD,EAAyB,CACzC,MAAMukB,EAAWvkB,EAAU,IAAKhkC,GAAQA,EAAI,EAAE,EAExCsoD,EAAiBtkB,EAAU,OAAQrxB,GAAM,CAACA,EAAE,QAAUA,EAAE,eAAiB41C,EAAS,SAAS51C,EAAE,aAAa,CAAC,KAEjH,QAAKqxB,EAAW,GAAGskB,CAAc,KACjC,QAAK,KAAK,OAAQ,GAAGA,CAAc,CACrC,CAEA,kBAAkBtoD,EAAiB,CACjC,GAAI,KAAK,iBAAiB,GAAK,CAAC,KAAK,aAAa,EAChD,OAGF,IAAIgkC,EAAYhkC,EAAI,QAAU,CAAC,EAC/B,GAAI,CAACA,EAAI,UAAW,CAClB,MAAMwoD,EAAgB,KAAK,OAAO,UAAW71C,GAAMA,EAAE,KAAO3S,EAAI,EAAE,EAClEgkC,EAAY,KAAK,aAAawkB,CAAa,CAC7C,CAEA,KAAK,kBAAkBxkB,CAAS,EAEhC,UAAW3wD,KAAS2wD,EAClB,GAAI3wD,EAAM,OAAQ,CAChB,MAAMo1E,EAAa,KAAK,OAAO,UAAW91C,GAAMA,EAAE,KAAOt/B,EAAM,EAAE,EACjE,KAAK,YAAYA,EAAOo1E,CAAU,CACpC,CAEJ,CAEA,oBAAoB5B,EAAyB6B,EAAoBC,EAA0B,CAEzF,GAAID,IAAe,EACjB,OAAO7B,EAGT,MAAM+B,EAAI/B,EAAY,aAAa,EACnC+B,EAAE,GAAK,KAAK,eAAe,EAC3B,MAAM1jD,EAAQ,IAAI8/B,EAAA,GAAW4jB,CAAC,EAG9B,YAAK,OAAO,OAAOD,EAAmBD,EAAY,EAAGxjD,CAAK,EAE1DA,EAAM,cAAgB2hD,EAAY,GAClC3hD,EAAM,OAAS,OAEX,KAAK,aAAa,KAAOA,EAAM,KACjCA,EAAM,aAAa,EAAI,EACvB,KAAK,YAAcA,GAGdA,CACT,CAEA,kBAAkB2jD,EAA4BH,EAAoBC,EAA0B,CAE1F,GAAID,IAAe,EAAG,CACpB,GAAI,CAACG,EAAe,UAAW,CAC7B,MAAM7kB,EAAY,KAAK,aAAa2kB,CAAgB,EACpDE,EAAe,OAAS7kB,CAC1B,CAEA,OAAO6kB,CACT,CAEA,MAAM3jD,EAAQ,IAAI8/B,EAAA,GAAW6jB,EAAe,aAAa,CAAC,EAE1D,IAAI7kB,EAAyB8kB,EAC7B,OAAID,EAAe,WACjB7kB,KAAY,aAAU6kB,EAAe,MAAM,GAAK,CAAC,EACjD3jD,EAAM,OAAS8+B,EAGf8kB,EAAYH,EAAmBD,IAE/B1kB,EAAY,KAAK,aAAa2kB,CAAgB,EAC9CzjD,EAAM,OAAS8+B,EAAU,IAAK3wD,GAAUA,EAAM,aAAa,CAAC,EAG5Dy1E,EAAYH,GAAoB3kB,EAAU,OAAS,GAAK0kB,GAE1D,KAAK,OAAO,OAAOI,EAAW,EAAG5jD,CAAK,EAEtC,KAAK,uBAAuBA,CAAK,EAC1BA,CACT,CAEA,YAAY7xB,EAAmBo1E,EAAoB,CACjD,MAAM10E,EAAW,KAAK,uBAAuBV,CAAK,EAClD,GAAI,CAACU,EACH,OAGF,GAAIV,EAAM,OAAS,MAAO,CACxB,KAAK,UAAUA,EAAOo1E,EAAY10E,CAAQ,EAC1C,MACF,CAEA,MAAMg1E,EAAkB,KAAK,2BAA2Bh1E,CAAQ,EAE1Di1E,EAAY31E,EAAM,WAAa,EACrC,IAAI0V,EAAO,EACPy7C,EAAOnxD,EAAM,QAAQ,EAEzB,QAASuO,EAAQ,EAAGA,EAAQmnE,EAAgB,OAAQnnE,IAAS,CAC3D,MAAMjI,GAASovE,EAAgBnnE,CAAK,EACpC,IAAIwlE,EAEJA,EAAO,KAAK,oBAAoB/zE,EAAOuO,EAAO6mE,CAAU,EACxDrB,EAAK,aAAe,CAAC,EACrBA,EAAK,WAAWrzE,EAAS,IAAI,EAAI4F,GAE7BtG,EAAM,kBAAoB,MACxBuO,EAAQ,IACV4iD,GAAQ4iB,EAAK,QAAQ,GAEvBA,EAAK,QAAQ,EAAI5iB,IAIjB4iB,EAAK,QAAQ,EAAI,KAAK,IAAI,KAAoB2B,EAAgB,OAAQ,KAAoBC,CAAS,EACnG5B,EAAK,QAAQ,EAAIr+D,EACjBq+D,EAAK,QAAQ,EAAI5iB,EAEjBz7C,GAAQq+D,EAAK,QAAQ,EAGjBr+D,EAAOq+D,EAAK,QAAQ,EAAI,OAC1Br+D,EAAO,EACPy7C,GAAQ4iB,EAAK,QAAQ,GAG3B,CAGA,MAAM6B,EAAUzkB,EAAOnxD,EAAM,QAAQ,EACrC,GAAI41E,EAAU,EAAG,CACf,MAAMC,EAAkBT,EAAaM,EAAgB,OACrD,UAAWI,MAAY,KAAK,OAAO,MAAMD,CAAe,EAClDtC,EAAmBvzE,EAAO81E,EAAQ,IAItCA,GAAS,QAAQ,GAAKF,EAE1B,CACF,CAEA,UAAU51E,EAAmBo1E,EAAoB10E,EAA8B,CAC7E,MAAMg1E,EAAkB,KAAK,2BAA2Bh1E,CAAQ,EAEhE,QAASq1E,EAAc,EAAGA,EAAcL,EAAgB,OAAQK,IAAe,CAC7E,MAAMC,EAAYN,EAAgBK,CAAW,EACvCE,EAAW,KAAK,kBAAkBj2E,EAAO+1E,EAAaX,CAAU,EAEtEc,EAAcD,EAAUv1E,EAAUs1E,CAAS,EAE3C,MAAM/e,EAAY,KAAK,aAAagf,CAAQ,EACtCE,EAAcF,EAAS,QAAU,CAAC,EACxC,IAAIJ,GAEJ,GAAI71E,EAAM,UAAW,CAEnB,UAAWo2E,KAAcD,EACvBD,EAAcE,EAAY11E,EAAUs1E,CAAS,EACzCD,EAAc,GAChB,KAAK,uBAAuBK,EAAY,EAAI,EAKhDH,EAAS,QAAQ,GAAKF,EACtBF,GAAkBT,EAAaW,EAAc,CAC/C,KAAO,CAEL,MAAMN,EAAYL,GAAce,EAAY,OAAS,GAAKJ,EAAc,EACxEI,EAAY,QAAQ,CAACC,GAAY3yE,KAAM,CAGrC,GAFAyyE,EAAcE,GAAY11E,EAAUs1E,CAAS,EAEzCD,EAAc,EAAG,CACnB,MAAMM,EAAkB,IAAI1kB,EAAA,GAAWykB,EAAU,EACjD,KAAK,uBAAuBC,EAAiB,EAAI,EAGjDA,EAAgB,QAAQ,GAAKpf,EAAY8e,EACzC,KAAK,OAAO,OAAON,EAAYhyE,GAAG,EAAG4yE,CAAe,CACtD,CACF,CAAC,EAEDJ,EAAS,OAAS,CAAC,EACnBA,EAAS,QAAQ,GAAKhf,EAAY8e,EAClCF,GAAkBJ,EAAYU,EAAY,MAC5C,CAGA,GAAIT,EAAgB,OAAS,EAC3B,UAAW11E,KAAS,KAAK,OAAO,MAAM61E,EAAe,EACnD71E,EAAM,QAAQ,GAAKi3D,CAGzB,CACF,CAEA,uBAAuBj3D,EAAmBs2E,EAAyB,CACjE,OAAAt2E,EAAM,cAAgBA,EAAM,GAC5BA,EAAM,GAAK,KAAK,eAAe,EAE3Bs2E,EACFt2E,EAAM,cAAgB,GAEtBA,EAAM,OAAS,OAGVA,CACT,CAEA,2BAA2BU,EAAe,CACxC,IAAIg1E,EACJ,SAAI,MAAch1E,CAAQ,EACxBg1E,EAAkBh1E,EAAS,QAAQ,MAAM,EAAGA,EAAS,QAAQ,MAAM,EAEnEg1E,KAAkB,UAAOh1E,EAAS,QAAS,CAAE,SAAU,EAAK,CAAC,EAExDg1E,CACT,CAEA,aAAajkB,EAA8B,CACzC,GAAI,CAACA,EAAS,QAAUA,EAAS,OAAO,SAAW,EACjD,MAAO,GACF,GAAIA,EAAS,UAElB,MAAO,GAGT,MAAM8kB,KAAU,SAAM9kB,EAAS,OAAQ,CAAC,CAAE,QAAAQ,CAAQ,IAAMA,EAAQ,EAAIA,EAAQ,CAAC,EAAG,QAChF,OAAOskB,EAAQ,EAAIA,EAAQ,EAAI9kB,EAAS,QAAQ,CAClD,CAEA,YAAYzxD,EAAmB,CAC7B,KAAK,OAAS,KAAK,OAAO,OAAQ0R,GAASA,IAAS1R,CAAK,EACzDA,EAAM,QAAQ,EACd,KAAK,OAAO,QAAQ,IAAI,IAA6B,CACvD,CAEA,UAAU2sB,EAAiB8F,EAAuB,EAC5B,CAACA,GAAgB9F,EAAI,WAAe8F,GAAgB,CAAC9F,EAAI,YAG3E,KAAK,UAAUA,CAAG,EAGpB,KAAK,YAAYA,CAAG,CACtB,CAEA,YAAa,CACX,MAAM6pD,EAAgB,KAAK,OAAO,OAAQl3C,GAAMA,EAAE,OAAS,OAASA,EAAE,SAAS,EAC/E,UAAW3S,KAAO6pD,EAChB,KAAK,UAAU7pD,CAAG,CAEtB,CAEA,cAAe,CACb,MAAM6pD,EAAgB,KAAK,OAAO,OAAQl3C,GAAMA,EAAE,OAAS,OAAS,CAACA,EAAE,SAAS,EAChF,UAAW3S,KAAO6pD,EAChB,KAAK,UAAU7pD,CAAG,CAEtB,CAEA,kBAAmB,CACjB,OACE,KAAK,MAAM,OAAS,GACpB,KAAK,aAAa,EAAE,KAAMjsB,GAAaA,EAAS,OAAS,CAAC,GAC1D,KAAK,YAAY,KAAK,KAAM2qB,GAAe,CAACA,EAAW,IAAI,CAE/D,CAEA,iBAAiBwF,EAAiB,CAChC,MAAMukD,EAAa,KAAK,OAAO,UAAW91C,GAAMA,EAAE,KAAOzO,CAAO,EAChE,OAAOukD,GAAc,EAAI,CAAE,MAAO,KAAK,OAAOA,CAAU,EAAG,MAAOA,CAAW,EAAI,IACnF,CAEA,eAAep1E,EAAmB,CAChC,MAAMuxB,EAAWvxB,EAAM,aAAa,EACpC,OAAAuxB,EAAS,GAAK,KAAK,eAAe,EAElC,OAAOA,EAAS,OAChB,OAAOA,EAAS,gBAChB,OAAOA,EAAS,cAChB,OAAOA,EAAS,WAEZA,EAAS,OACX,OAAOA,EAAS,WAGlB,OAAOA,EAAS,MAGZvxB,EAAM,QAAQ,EAAIA,EAAM,QAAQ,EAAI,GAAK,KAC3CuxB,EAAS,QAAQ,GAAKvxB,EAAM,QAAQ,EAGpCuxB,EAAS,QAAQ,GAAKvxB,EAAM,QAAQ,EAGtC,KAAK,SAASuxB,CAAQ,EACfA,CACT,CAEA,WAAWklD,EAAqBC,EAAiB,CAC/C,SAAO,MAAeD,EAAM,CAC1B,OAAAC,EACA,SAAU,KAAK,YAAY,CAC7B,CAAC,CACH,CAEA,SAAU,CACR,KAAK,sBAAsB,YAAY,EACvC,KAAK,OAAO,mBAAmB,EAC/B,UAAW12E,KAAS,KAAK,OACvBA,EAAM,QAAQ,CAElB,CAEA,UAAU2sB,EAAiB,CACzB,MAAMlU,KAAW,WAAQ,KAAK,OAAQkU,CAAG,EAEzC,GAAI,CAACA,EAAI,UAAW,CAClB,MAAMgkC,EAAY,KAAK,aAAal4C,CAAQ,KAG5C,QAAK,KAAK,OAAQ,GAAGk4C,CAAS,EAE9BhkC,EAAI,OAASgkC,EAAU,IAAK3wD,GAAsBA,EAAM,aAAa,CAAC,EACtE2sB,EAAI,UAAY,GAEZgkC,EAAU,KAAM3wD,GAAUA,EAAM,UAAU,GAC5C2sB,EAAI,YAIN,KAAK,OAAO,QAAQ,IAAI,IAA6B,EACrD,MACF,CAEAA,EAAI,UAAY,GAChB,MAAMgkC,EAAYhkC,EAAI,QAAU,CAAC,EAC3BgqD,EAAYhmB,EAAU,KAAMrxB,GAAkBA,EAAE,MAAM,EAGtDs3C,EAAoBjqD,EAAI,OAE9B,GAAIgkC,EAAU,OAAS,EAAG,CAKxB,MAAMkmB,GADiBlmB,EAAU,CAAC,EAAE,QAAQ,GAAKhkC,EAAI,QAAQ,IAC7BA,EAAI,QAAQ,EAAIA,EAAI,QAAQ,GAG5D,IAAI8oD,EAAYh9D,EAAW,EAGvBq+D,EAAOnqD,EAAI,QAAQ,EAEvB,UAAW3sB,KAAS2wD,EAAW,CAE7B,GAAIimB,EAAmB,CACrB,MAAMl2E,GAAW,KAAK,uBAAuBisB,CAAG,EAEhD,GADA3sB,EAAM,aAAe,CAAC,EAClBU,GAAU,CACZ,MAAMg1E,GAAkB,KAAK,2BAA2Bh1E,EAAQ,EAChEV,EAAM,WAAa,CACjB,GAAGA,EAAM,WACT,CAACU,GAAS,IAAI,EAAGg1E,GAAgB,CAAC,CACpC,CACF,CACF,CAEA11E,EAAM,QAAQ,IAAMA,EAAM,QAAQ,EAAI2sB,EAAI,QAAQ,GAElD3sB,EAAM,QAAQ,GAAK62E,EAEnB,KAAK,OAAO,OAAOpB,EAAW,EAAG,IAAI9jB,EAAA,GAAW3xD,CAAK,CAAC,EAEtDy1E,GAAa,EACbqB,EAAO,KAAK,IAAIA,EAAM92E,EAAM,QAAQ,EAAIA,EAAM,QAAQ,CAAC,CACzD,CAEA,MAAM+2E,GAAiBD,EAAOnqD,EAAI,QAAQ,EAAI,EAG9C,UAAW3sB,KAAS,KAAK,OAAO,MAAMy1E,CAAS,EAC7Cz1E,EAAM,QAAQ,GAAK+2E,GAGrBpqD,EAAI,OAAS,CAAC,EAEVgqD,GACF,KAAK,kBAAkBhqD,CAAG,CAE9B,CAGA,KAAK,oBAAoB,EAGzB,KAAK,OAAO,QAAQ,IAAI,IAA6B,CACvD,CAKA,aAAalU,EAAgC,CAC3C,MAAMu+D,EAAiB,KAAK,OAAO,MAAMv+D,EAAW,CAAC,EAC/Cw+D,EAAeD,EAAe,UAAW13C,GAAMA,EAAE,OAAS,KAAK,EAKrE,OAFkB03C,EAAe,MAAM,EAAGC,GAAgB,EAAIA,EAAe,KAAK,OAAO,MAAM,CAGjG,CAGA,GAAMxtE,EAAoBkrE,EAAiC,CACzD,QAAQ,IAAI,sDAAsD,EAClE,KAAK,OAAO,GAAGlrE,EAAOkrE,CAAQ,CAChC,CAGA,IAAOlrE,EAAoBkrE,EAAiC,CAC1D,QAAQ,IAAI,kCAAkC,EAC9C,KAAK,OAAO,IAAIlrE,EAAOkrE,CAAQ,CACjC,CAEA,mBAAoB,CAClB,KAAK,cAAgB,KAAK,aAAe,GAAK,CAChD,CAEA,0BAA2B,CACzB,OAAO,KAAK,aAAe,CAC7B,CAEA,yBAA0B,CACxB,OAAO,KAAK,eAAiB,CAC/B,CAEA,gBAAgB8B,EAAqB,CACnC,SAAO,MAAsBA,EAAM,CACjC,SAAU,KAAK,YAAY,CAC7B,CAAC,CACH,CAEA,YAAa,CACX,OAAO,KAAK,WAAa,MAC3B,CAEA,aAAwB,CACtB,OAAO,KAAK,SAAW,KAAK,SAAW,MAAY,MAAM,QAC3D,CAEQ,aAAahoB,EAAUyoB,EAAwB,CACpC,IAAI3oB,EAAA,GAAkB,IAAI,EAClC,aAAaE,EAAKyoB,CAAa,CAC1C,CAEA,gBAAiB,CACf,KAAM,CAAE,KAAAvpE,EAAM,aAAAwpE,CAAa,EAAI,KAG/B,MAAO,KACL,WAAQxpE,EAAMwpE,CAAY,MACzB,cAAQ,MAASxpE,GAAM,IAAI,KAAG,MAASwpE,GAAc,IAAI,CAAC,MACzD,cAAQ,MAASxpE,GAAM,EAAE,KAAG,MAASwpE,GAAc,EAAE,CAAC,EAE5D,CAEA,cAAcC,EAAoBC,EAA2B,CAC3D,MAAMC,EAAoB,KAAK,IAAI,GAAG,KAAK,OAAO,IAAKt3E,GAAUA,EAAM,QAAQ,EAAIA,EAAM,QAAQ,CAAC,CAAC,EAE7Fu3E,EAAe,GAGrB,IAAIC,EAAgBJ,EAAaG,EAFlB,GAKXF,IACFG,GAAiBD,GAGnB,MAAME,EAAoB,KAAK,MAAMD,GAAiB,KAAmB,KAAkB,EACrFE,EAAcJ,EAAoBG,EAExC,UAAWz3E,KAAS,KAAK,OACvBA,EAAM,QAAQ,EAAI,KAAK,MAAMA,EAAM,QAAQ,EAAI03E,CAAW,GAAK,EAC/D13E,EAAM,QAAQ,EAAI,KAAK,MAAMA,EAAM,QAAQ,EAAI03E,CAAW,GAAK,CAEnE,CAEA,8BAA+B,CAC7B,KAAK,eAAe,EACpB,KAAK,OAAO,KAAK,IAA4B,CAC/C,CAEA,gBAAgBC,EAAoB,CAClC,MAAM9mD,EAAU,SAAS8mD,GAAc,IAAK,EAAE,EAGxCC,EAAkB,KAAK,OAAO,OAAQt4C,GAAMA,EAAE,SAAS,EAC7D,UAAWt/B,KAAS43E,EACD53E,EAAM,QAAQ,KAAM63E,GAAOA,EAAG,KAAOhnD,CAAO,GACjD,KAAK,UAAU7wB,CAAK,EAGlC,OAAO,KAAK,aAAa6wB,CAAO,CAClC,CAEA,qBAAsB,CACpB,MAAMinD,EAAoB,KAAK,OAAO,OAAOC,CAAiB,EAGxDC,EAAUF,EAAkB,OAAQ93E,GAAUA,EAAM,OAAO,IAAI,EAAE,OACjEi4E,EAAWH,EAAkB,OAASE,EACtCE,EAAiBF,GAAWC,EAElC,UAAWj4E,KAAS83E,EAClB93E,EAAM,OAAO,KAAO,CAACk4E,EACrBl4E,EAAM,OAAO,CAEjB,CAEA,uBAAwB,CACtB,UAAWA,KAAS,KAAK,OACvB,UAAWq+B,KAAUr+B,EAAM,QAAS,CAClC,GACE,EACEq+B,EAAO,aACNA,EAAO,WAAW,OAAS,cAC1BA,EAAO,WAAW,OAAS,uCAC3BA,EAAO,WAAW,OAAS,uCAG/B,SAGF,MAAM85C,EAAa95C,EACnB85C,EAAW,SAAW,CAACA,EAAW,QACpC,CAGF,KAAK,aAAa,CACpB,CAEA,cAAe,CACb,OAAO,KAAK,sBAAsB,KAAK,GAAG,CAC5C,CAEA,mBAAmBp+B,EAAuB,CACxC,IAAIq+B,EAAU,GASd,OANKr+B,EAGHq+B,EAAU,CAAC,CAAC,KAAK,KAAK,wBAAwB,UAAU,QAFxDA,EAAU,CAAC,CAAC,KAAK,KAAK,wBAAwB,aAAa,SAKzD/0E,EAAA,EAAO,eAAe,4BAGnB,KAAK,iBAAiB,IAAK+0E,CACpC,CAEA,qBAAqBr+B,EAAuB,CAC1C,IAAIs+B,EAAY,GAShB,OANKt+B,EAGHs+B,EAAY,CAAC,CAAC,KAAK,KAAK,wBAAwB,UAAU,UAF1DA,EAAY,CAAC,CAAC,KAAK,KAAK,wBAAwB,aAAa,UAK3Dh1E,EAAA,EAAO,eAAe,2BACjBg1E,EAEFA,GAAa,KAAK,iBAAiB,CAC5C,CAEA,mBAAoB,CAGlB,OADc,KAAK,YAAY,KAAK,KAAM3mE,GAASA,EAAK,UAAY,CAAC,GAC1D,SAAW,GACb,GAILrO,EAAA,EAAO,eAAe,2BACjB,EAAQ,KAAK,KAAK,wBAAwB,UAAU,OAGtD,EAAQ,KAAK,KAAK,wBAAwB,UAAU,QAAW,KAAK,iBAAiB,CAC9F,CAEA,kBAAmB,CACjB,MAAO,GAAQ,KAAK,KAAK,SAAW,KAAK,KAAK,gBAChD,CAEA,mBAAoB,CAClB,OAAO,KAAK,iBAAiB,CAC/B,CAEA,mCAAmCi1E,EAA0Bt4E,EAAmB,CACvC,IAAC,WAAQs4E,GAAc,QAASt4E,GAAO,OAAO,GAEnF,KAAK,OAAO,QAAQ,IAAI,IAA6B,CAEzD,CAEA,gBAAiB,CACf,OAAO,KAAK,YACd,CAEQ,uBAAuBA,EAAmB,CAChD,OAAO,KAAK,sBAAsB,KAAK,GAAG,EAAE,KAAMU,GAAaA,EAAS,OAASV,EAAM,MAAM,CAC/F,CAEQ,kBAAmB,CACzB,OAAO,KAAK,QACd,CAEQ,cAAe,CACrB,OAAO,KAAK,sBAAsB,KAAK,GAAG,EAAE,OAAS,CACvD,CAEO,qBAA+B,CACpC,MAAMk0E,EAAoB,KAAK,oBAAoB,MAAQ,CAAC,EACtDqE,EAAmB,KAAK,uBAAuB,CAAE,cAAe,EAAK,CAAC,EAAE,KAE9E,OAAIrE,EAAkB,SAAWqE,EAAiB,OACzC,GAGF,IAAC,WAAQA,EAAkBrE,CAAiB,CACrD,CAEQ,qCAAqCzqE,EAAsC,CACjF,MAAM+uE,EAAiB/uE,EAAM,QAAQ,YAAY,OAAS,EAC1D,KAAK,wBAAwB,IAAI,KAAiB,CAAE,SAAU,CAAC,EAAG,WAAY,EAAK,CAAC,EAAG+uE,CAAc,CACvG,CAEQ,wBAAwB/uE,EAAyB+uE,EAAiB,GAAM,CAK9E,GAJIA,GACF,KAAK,eAAe,EAGlB/uE,EAAM,QAAQ,eAAc,MAAW,EAAE,0BAA0B,KAAK,WAAW,EAAG,CACxF,KAAK,aAAa,CAAE,WAAY,GAAM,SAAU,CAAC,CAAE,CAAC,EACpD,MACF,EAEI,KAAK,aAAe,KAAK,eAC3B,KAAK,+BAAiCA,EAAM,QAAQ,SAAS,OAC1DugB,GAAOA,KAAQ,KAAK,aAAa,IAAM,KAAK,aAAa,GAC5D,GAGF,KAAK,aAAavgB,EAAM,OAAO,CACjC,CAEQ,6BAA6BA,EAA8B,CACjE,KAAK,6BAA6B,EAClC,KAAK,aAAaA,EAAM,OAAO,CACjC,CAEA,sBAAuB,CACrB,OAAO,KAAK,iBACd,CACF,CAEA,SAASsuE,EAAkB/3E,EAA+E,CACxG,MAAO,EAAQA,EAAM,MACvB,CAEA,SAASk2E,EAAcl2E,EAAmBU,EAA8B+3E,EAAqB,CAC3Fz4E,EAAM,aAAe,CAAC,EACtBA,EAAM,WAAWU,EAAS,IAAI,EAAI+3E,CACpC,C,kKCxxCO,MAAMC,KAAgB,cAC3B,CACE,CACE,QAAA3uE,EACA,KAAAqB,EACA,SAAAutE,EACA,UAAAxxE,EACA,SAAApB,EACA,OAAA6yE,EACA,OAAAC,EACA,UAAAC,EACA,OAAAlzE,EACA,OAAAmzE,EACA,QAAAxtE,EAAU,UACV,SAAAytE,EACA,aAAc1wE,EACd,cAAA2wE,EACA,GAAGztE,CACL,EACAjN,IACG,CACH,MAAMmI,KAAS,MAAWuD,CAAS,EAE7BmlC,KAAe,MACnB,CACE,CAAC1oC,EAAO,MAAM,EAAG,GACjB,CAACA,EAAO,eAAe,EAAGoyE,EAC1B,CAACpyE,EAAO,MAAM,EAAGqyE,CACnB,EACAryE,EAAO6E,CAAO,EACdpE,CACF,EAEM+xE,KAAgB,MAAG,CACvB,CAACxyE,EAAO,OAAO,EAAG,GAClB,CAACA,EAAO,eAAe,EAAG,CAAC,CAAC0E,EAC5B,CAAC1E,EAAO,oBAAoB,EAAGd,IAAW,MAC5C,CAAC,EAEKikC,KACJ,QAAC,UACC,IAAAtrC,EACA,UAAW6wC,EACX,aAAY+pC,EAAmB7wE,EAAWyB,CAAO,EACjD,gBAAenE,EACf,KAAK,SACJ,GAAG4F,EAEH,UAAA4tE,EAAWhuE,EAAMutE,CAAQ,EACzBC,MAAU,OAAC,OAAI,UAAWlyE,EAAO,IAAK,IAAKkyE,EAAQ,IAAKC,GAAU,GAAI,EACtE9yE,GAAY,CAACizE,MAAY,OAAC,OAAI,UAAWE,EAAgB,SAAAnzE,CAAA,CAAS,EAClEH,IAAW,OAAS,OAAC,IAAI,CAAC,KAAK,YAAa,GAC5CA,IAAW,OAAQ,OAAC,IAAI,CAAC,KAAK,UAAW,GACzCqzE,MAAiB,OAAC,OAAI,UAAWvyE,EAAO,UAAW,GACtD,EAGF,OAAOqD,KACL,OAAC,IAAO,CAAC,IAAAxL,EAAU,QAASwL,EAAS,UAAU,SAC5C,SAAA8/B,CAAA,CACH,EAEAA,CAEJ,CACF,EAEA6uC,EAAc,YAAc,gBAE5B,SAASS,EAAmB7wE,EAA+ByB,EAA6B,CACtF,OAAOzB,IAAwByB,EAAU,KAAU,WAAW,YAAY,KAAKA,CAAO,EAAI,OAC5F,CAEA,SAASqvE,EAAWhuE,EAAkCutE,EAAqB,CACzE,OAAKvtE,KAID,MAAWA,CAAI,KACV,OAAC,IAAI,CAAC,KAAMA,EAAM,KAAM,GAAGutE,GAAsB,IAAI,GAAI,EAG3DvtE,EAPE,IAQX,CAEA,MAAMnB,EAAanF,GAAyB,CAC1C,MAAMu0E,KAAiB,MAAwBv0E,EAAO,UAAW,OAAO,EAClEw0E,KAAqB,MAAwBx0E,EAAO,cAAe,OAAO,EAE1Ey0E,KAAa,OAAI,CACrB,MAAOz0E,EAAM,OAAO,KAAK,QACzB,WAAYA,EAAM,OAAO,UAAU,KAEnC,mBAAoB,CAClB,MAAOA,EAAM,OAAO,KAAK,QACzB,WAAYA,EAAM,OAAO,UAAU,MACnC,OAAQ,aAAaA,EAAM,OAAO,OAAO,MAAM,EACjD,EAEA,WAAY,CACV,MAAG,MAAsBA,EAAM,OAAO,UAAW,OAAO,CAC1D,CACF,CAAC,EAED,MAAO,CACL,UAAQ,OAAI,CACV,MAAO,iBACP,SAAU,WACV,QAAS,OACT,WAAY,SACZ,OAAQA,EAAM,QAAQA,EAAM,WAAW,OAAO,EAAE,EAChD,QAASA,EAAM,QAAQ,EAAG,CAAC,EAC3B,aAAcA,EAAM,MAAM,OAAO,QACjC,WAAY,GAAGA,EAAM,WAAW,OAAO,GAAKA,EAAM,QAAQ,SAAW,CAAC,KACtE,WAAYA,EAAM,WAAW,iBAC7B,OAAQ,aAAaA,EAAM,OAAO,UAAU,MAAM,GAClD,WAAY,SACZ,CAACA,EAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,WAAYA,EAAM,YAAY,OAAO,CAAC,mBAAoB,eAAgB,OAAO,EAAG,CAClF,SAAUA,EAAM,YAAY,SAAS,KACvC,CAAC,CACH,EAEA,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,MAAO,iBACT,EAEA,2BAA4B,CAC1B,MAAG,kBAAeA,CAAK,EACvB,OAAQ,CACV,EAEA,iCAA+B,uBAAoBA,CAAK,EAExD,0BAA2B,CACzB,OAAQ,cACR,QAASA,EAAM,OAAO,OAAO,gBAC7B,WAAYA,EAAM,OAAO,OAAO,mBAChC,UAAW,OAEX,UAAW,CACT,MAAOA,EAAM,OAAO,KAAK,SACzB,WAAYA,EAAM,OAAO,OAAO,mBAChC,UAAW,MACb,CACF,CACF,CAAC,EACD,WAAS,OAAI,CACX,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAY,cACZ,OAAQ,wBAER,mBAAoB,CAClB,MAAOA,EAAM,OAAO,KAAK,QACzB,WAAYA,EAAM,OAAO,OAAO,KAClC,EAEA,WAAY,CACV,MAAG,MAAsBA,EAAM,OAAO,UAAW,OAAO,CAC1D,CACF,CAAC,EACD,OAAQy0E,EACR,UAAQ,MACNA,KACA,OAAI,CACF,YAAa,CACX,QAAS,QACT,QAAS,MACT,SAAU,WACV,KAAM,EACN,MAAO,EACP,OAAQ,MACR,OAAQ,EACR,aAAcz0E,EAAM,MAAM,OAAO,QACjC,gBAAiBA,EAAM,OAAO,UAAU,eAC1C,CACF,CAAC,CACH,EACA,WAAS,OAAIu0E,CAAc,EAC3B,eAAa,OAAIC,CAAkB,EACnC,UAAQ,OAAI,CACV,QAASx0E,EAAM,QAAQ,EAAG,EAAG,CAC/B,CAAC,EACD,OAAK,OAAI,CACP,MAAO,OACP,OAAQ,OACR,YAAaA,EAAM,QAAQ,CAAC,CAC9B,CAAC,EACD,mBAAiB,OAAI,CACnB,SAAU,CACZ,CAAC,EACD,WAAS,OAAI,CACX,QAAS,OACT,SAAU,CACZ,CAAC,EACD,mBAAiB,OAAI,CACnB,QAAS,OACT,YAAaA,EAAM,QAAQ,CAAC,EAE5B,CAAC,aAAU,WAAQA,EAAM,GAAG,YAAY,EAAE,CAAC,EAAE,EAAG,CAC9C,QAAS,OACX,CACF,CAAC,EACD,wBAAsB,OAAI,CACxB,aAAcA,EAAM,QAAQ,EAAG,CACjC,CAAC,EACD,aAAW,OAAI,CACb,gBAAiBA,EAAM,OAAO,QAAQ,KACtC,aAAcA,EAAM,MAAM,OAAO,OACjC,MAAO,MACP,OAAQ,MACR,SAAU,WACV,IAAK,OACL,MAAO,OACP,OAAQ,CACV,CAAC,CACH,CACF,C,yIC3PO,MAAM00E,EAAuB,CAAC,CACnC,QAAA9lE,EAAU,OACV,YAAAw/B,EAAc,EACd,WAAApB,EAAa,EACb,YAAAiC,EAAc,EAChB,IAAiC,CAC/B,MAAMrtC,KAAS,MAAWuD,CAAS,EAEnC,SACE,QAAC,MAAG,UAAWvD,EAAO,OACpB,oBAAC,KACC,KAAK,aACL,KAAK,KACL,QAAAgN,EACA,WAAS,KAAE,+DAAgE,eAAe,EAC5F,KACA,QAAC,QACC,qBAAC,KAAK,CAAC,QAAQ,0DAA0D,uBAC5D,CAAE,YAAAw/B,CAAY,EAAE,OAAC,OAAC,IAAI,CAAC,KAAK,UAAW,GAAE,IAAE,CAAE,WAAApB,CAAW,GACrE,EAAS,IACRiC,MACC,OAAC,QAAK,UAAU,QACd,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,oBAAQ,EACzE,GAEJ,GACF,CAEJ,EAEM9pC,EAAanF,IAA0B,CAC3C,UAAQ,OAAI,CACV,SAAUA,EAAM,WAAW,GAAG,SAC9B,QAAS,OACT,IAAKA,EAAM,QAAQ,CAAC,EACpB,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,E,sKCfO,MAAM20E,EACXt5E,MAEO,KAAc,CACnB,KAA0B,wBAAwB,aAAa,EAC/D,KAA0B,mBAAmB,aAAa,CAC5D,CAAC,EAAE,QACD,KAAO,CAAC,CAAC4H,EAAY3I,CAAK,IAAM,EAAQ2I,GAAe,EAAQ3I,CAAM,KACrE,KAAI,CAAC,CAAC2I,EAAY3I,CAAK,IACrBs6E,EAAoB,CAClB,GAAGv5E,EACH,wBAAyB4H,EACzB,mBAAoB3I,CACtB,CAAC,CACH,CACF,EAGWu6E,EAAsDx5E,GAC1Ds5E,EAA8Bt5E,CAAO,EAAE,QAC5C,KAAKxD,GAAUA,EAAM,WAAW,OAAQ0vC,GAAcA,EAAU,OAAS,KAAqB,IAAI,CAAC,CACrG,EAGWtH,EAAgE5kC,GACpEs5E,EAA8Bt5E,CAAO,EAAE,QAC5C,KAAKxD,GAAUA,EAAM,WAAW,OAAQ0vC,GAAcA,EAAU,OAAS,KAAqB,SAAS,CAAC,CAC1G,EAGK,SAASutC,EAA6BC,EAA4D,CACvG,IAAIC,EACAC,EAIJ,OAAAF,EAAW,wBAAwB,aAAa,EAAE,UAAWG,GAAuB,CAClFF,EAA0BE,CAC5B,CAAC,EAEDH,EAAW,mBAAmB,aAAa,EAAE,UAAWI,GAAkB,CACxEF,EAAqBE,CACvB,CAAC,EAEO95E,GAAYu5E,EAAoB,CAAE,GAAGv5E,EAAS,wBAAA25E,EAAyB,mBAAAC,CAAmB,CAAC,CACrG,CAGO,MAAML,EAAqC,CAAC,CACjD,QAAA//D,EACA,iBAAAmxB,EACA,eAAAovC,EACA,mBAAAH,EACA,wBAAAD,CACF,IAAM,CACJ,MAAMK,EAAgBxgE,KAAU,MAAiBA,CAAO,EAAI,CAAC,EAEvDuyB,EAAgC,CAAC,EACjCkuC,EAA6C,CAAC,EAEpD,UAAWC,KAAaN,IAAqBjvC,CAAgB,GAAK,CAAC,EACjE,GAAI,CACF,KAAM,CAAE,SAAA7B,CAAS,EAAIoxC,EAErB,GAAIH,GAAkBE,EAAmBnxC,CAAQ,GAAKixC,EACpD,SAGEE,EAAmBnxC,CAAQ,IAAM,SACnCmxC,EAAmBnxC,CAAQ,EAAI,GAGjC,MAAMqxC,EAAU,IAAI,MAAM,CACxB,SAAArxC,EACA,iBAAA6B,EACA,KAAMuvC,EAAU,MAAQ,GACxB,MAAOA,EAAU,MACjB,YAAaA,EAAU,aAAe,GACtC,QAAS,OAAOA,EAAU,OAC5B,CAAC,EAEK5tC,KAAY,MAA0BxD,EAAUoxC,EAAWC,EAASH,CAAa,EAGvF,GAAIE,EAAU,WAAa5tC,IAAc,OACvC,SAGF,MAAME,EAAOF,GAAW,MAAQ4tC,EAAU,KACpChuC,EAAiC,CACrC,MAAI,MAAoBpD,EAAU6B,EAAkBuvC,EAAU,KAAK,EACnE,KAAM,KAAqB,KAC3B,SAAApxC,EACA,WAAS,MAAwBA,EAAU6B,EAAkBuvC,EAAWC,EAASH,CAAa,EAG9F,KAAM1tC,GAAW,MAAQ4tC,EAAU,KACnC,MAAO5tC,GAAW,OAAS4tC,EAAU,MACrC,YAAa5tC,GAAW,aAAe4tC,EAAU,aAAe,GAChE,QAAM,YAAS1tC,CAAI,KAAI,MAAiC1D,EAAU0D,EAAM7B,CAAgB,EAAI,OAC5F,SAAU2B,GAAW,UAAY4tC,EAAU,QAC7C,EAEAnuC,EAAW,KAAKG,CAAS,EACzB+tC,EAAmBnxC,CAAQ,GAAK,CAClC,OAAS57B,EAAO,CACVA,aAAiB,OACnB,IAAI,MAAMA,EAAM,QAAS,CACvB,MAAOA,EAAM,OAAS,GACtB,QAASA,EAAM,OACjB,CAAC,CAEL,CAGF,MAAMktE,EAAkBT,IAA0BhvC,CAAgB,GAAK,CAAC,EACxE,UAAW0vC,KAAkBD,EAAiB,CAE5C,GAAIL,GAAkBE,EAAmBI,EAAe,QAAQ,GAAKN,EACnE,SAGEE,EAAmBI,EAAe,QAAQ,IAAM,SAClDJ,EAAmBI,EAAe,QAAQ,EAAI,GAGhD,MAAMC,EAAe,IAAI,MAAM,CAC7B,MAAOD,EAAe,MACtB,YAAaA,EAAe,aAAe,GAC3C,SAAUA,EAAe,QAC3B,CAAC,EAEKnuC,EAAsC,CAC1C,MAAI,MAAoBmuC,EAAe,SAAU1vC,EAAkB0vC,EAAe,KAAK,EACvF,KAAM,KAAqB,UAC3B,SAAUA,EAAe,SACzB,MAAOA,EAAe,MACtB,YAAaA,EAAe,aAAe,GAC3C,aAAW,MAAsB,CAC/B,SAAUA,EAAe,SACzB,eAAgBA,EAAe,MAC/B,UAAWA,EAAe,UAC1B,IAAKC,CACP,CAAC,CACH,EAEAvuC,EAAW,KAAKG,CAAS,EACzB+tC,EAAmBI,EAAe,QAAQ,GAAK,CACjD,CAEA,MAAO,CAAE,WAAAtuC,CAAW,CACtB,C,yIChJA,MAAMwuC,EAAc,gBAKV,IAAI,EAQDC,EAAsB,CAAC,CAClC,SAAA9wE,EACA,KAAAmF,EACA,QAAA0E,EACA,SAAA3N,EACA,WAAAE,EACA,UAAA20E,EACA,UAAAzzE,EACA,SAAA0zE,EACA,GAAGC,CACL,IAAM,CACJ,MAAMC,KAAsB,WAC1B,IAAM,WAAe,QAAQh1E,CAAQ,EAAE,KAAMqG,GAAM,iBAAqBA,CAAC,GAAKA,EAAE,OAAS4uE,CAAO,EAChG,CAACj1E,CAAQ,CACX,EAEMk1E,EAAepxE,GAAa,CAAC6J,GAAW,CAAC1E,EACzCksE,EAAcxnE,GAAW,CAAC7J,EAAW6J,EAAU,OAC/ChN,KAAS,MAAW,IAAwBmD,EAAUoxE,EAAch1E,EAAY20E,EAAWC,CAAQ,EAEzG,SACE,OAAC,KACC,cAAehxE,EACf,aAAAoxE,EACA,WAAAh1E,EACA,aAAW,MAAGS,EAAO,UAAWS,CAAS,EACzC,SAAA0zE,EACC,GAAGC,EAEJ,oBAACJ,EAAY,SAAZ,CAAqB,MAAO,CAAE,KAAA1rE,EAAM,QAASksE,EAAa,SAAArxE,EAAU,WAAA5D,CAAW,EAC7E,WAAC80E,MAAuB,OAACC,EAAA,EAAQ,EACjCj1E,CAAA,EACH,EACF,CAEJ,EACA40E,EAAK,YAAc,OASnB,MAAMK,EAAU,CAAC,CAAE,SAAAj1E,EAAU,UAAAoB,EAAW,aAAcmB,CAAU,IAA8C,CAC5G,MAAMqR,KAAU,cAAW+gE,CAAW,EAChCh0E,KAAS,MAAWy0E,CAAgB,EAEpC,CAAE,KAAAnsE,EAAM,QAAA0E,EAAS,WAAAzN,CAAW,EAAI0T,GAAW,CAC/C,KAAM,OACN,QAAS,OACT,WAAY,MACd,EACMyhE,KAAc,KAAE,yBAA0B,QAAQ,EAExD,SACE,QAAC,MAAG,aAAW,MAAG10E,EAAO,QAASS,CAAS,EACxC,UAAA6H,KACC,OAAC,KAAE,KAAAA,EAAY,UAAWtI,EAAO,SAAU,aAAY4B,EAAW,QAAAoL,EAC/D,SAAA3N,CAAA,CACH,EACE2N,KACF,OAAC,UAAO,QAAAA,EAAkB,UAAWhN,EAAO,SAAU,aAAY4B,EAAW,KAAK,SAC/E,SAAAvC,CAAA,CACH,KAEA,mBAAG,SAAAA,CAAA,CAAS,EAGbE,IAAe,WAAa,OAAC,SAAM,aAAYm1E,EAAa,KAAK,QAAQ,QAASn1E,EAAY,SAAQ,GAAC,GAC1G,CAEJ,EACA+0E,EAAQ,YAAc,UAEtB,MAAMG,EAAoBr2E,IAA0B,CAClD,WAAS,OAAI,CACX,SAAU,UACV,YAAa,QACb,QAAS,OACT,eAAgB,gBAChB,WAAY,SACZ,MAAO,OACP,aAAc,EACd,SAAUA,EAAM,WAAW,KAAK,GAChC,cAAe,UACf,WAAYA,EAAM,WAAW,KAAK,WAClC,MAAOA,EAAM,OAAO,KAAK,QACzB,WAAYA,EAAM,WAAW,iBAC7B,oBAAqB,CACnB,OAAQ,SACV,CACF,CAAC,EACD,YAAU,OAAI,CACZ,IAAK,QACL,WAAY,CACV,SAAU,WACV,QAAS,KACT,IAAK,EACL,OAAQ,EACR,KAAM,EACN,MAAO,EACP,aAAcA,EAAM,MAAM,OAAO,OACnC,EAEA,kBAAmB,CACjB,QAAS,OACT,cAAe,EACf,UAAW,OAEX,WAAY,CACV,MAAG,kBAAeA,CAAK,EACvB,OAAQ,CACV,CACF,CACF,CAAC,CACH,GAEMu2E,EAAO,CAAC,CAAE,SAAAt1E,EAAU,UAAAoB,CAAU,IAAkB,CACpD,MAAMT,KAAS,MAAW40E,CAAY,EACtC,SAAO,OAAC,OAAI,aAAW,MAAG50E,EAAO,QAASS,CAAS,EAAI,SAAApB,CAAA,CAAS,CAClE,EACAs1E,EAAK,YAAc,OAEnB,MAAMC,EAAgBx2E,IAA0B,CAC9C,WAAS,OAAI,CACX,SAAU,WACV,SAAU,OACV,UAAW,QACb,CAAC,CACH,GAGMy2E,EAAc,CAAC,CAAE,SAAAx1E,EAAU,UAAAoB,CAAU,IAAkB,CAC3D,MAAMT,KAAS,MAAW80E,CAAoB,EACxCC,EAAU,OAAO11E,GAAa,SAAW,IAAM,MACrD,SAAO,OAAC01E,EAAA,CAAQ,aAAW,MAAG/0E,EAAO,YAAaS,CAAS,EAAI,SAAApB,CAAA,CAAS,CAC1E,EACAw1E,EAAY,YAAc,cAE1B,MAAMC,EAAwB12E,IAA0B,CACtD,eAAa,OAAI,CACf,MAAO,OACP,SAAU,cACV,OAAQA,EAAM,QAAQ,EAAG,EAAG,CAAC,EAC7B,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAYA,EAAM,WAAW,KAAK,UACpC,CAAC,CACH,GAEM42E,EAAS,CAAC,CAAE,SAAA31E,EAAU,MAAA41E,EAAQ,QAAS,UAAAx0E,CAAU,IAAmD,CACxG,MAAMT,KAAS,MAAWk1E,CAAe,EACzC,SACE,OAAC,OACC,aAAW,MACTl1E,EAAO,MACPS,KACA,OAAI,CACF,UAAWw0E,CACb,CAAC,CACH,EAEC,SAAA51E,CAAA,CACH,CAEJ,EACA21E,EAAO,YAAc,SAErB,MAAME,EAAmB92E,IAA0B,CACjD,SAAO,OAAI,CACT,SAAU,WACV,SAAU,SAEV,YAAaA,EAAM,QAAQ,CAAC,EAC5B,MAAO,OAEP,QAAS,CACP,MAAO,MACT,EAEA,UAAW,CACT,QAAS,MACX,CACF,CAAC,CACH,GAEM+2E,KAAO,QAAK,CAAC,CAAE,SAAA91E,EAAU,UAAAoB,EAAW,UAAA4/B,EAAY,GAAI,IAA2C,CACnG,MAAMrgC,KAAS,MAAWo1E,CAAa,EACvC,IAAIxjD,EAAOvyB,EAEX,MAAM4c,EAAW,WAAe,QAAQ5c,CAAQ,EAAE,OAAO,OAAO,EAChE,OAAK4c,EAAS,QAGd2V,EAAO3V,EAAS,IAAI,CAACo5D,EAASt4E,OAC5B,OAAC,OAAyB,UAAWiD,EAAO,aACzC,SAAAq1E,CAAA,EADO,WAAWt4E,CAAC,EAEtB,CACD,EAEGkf,EAAS,OAAS,GAAKokB,IACzBzO,EAAO3V,EAAS,OAAO,CAACld,EAAMu2E,EAAMv4E,IAAM,CACxCgC,KACA,OAAC,QAA4B,UAAWiB,EAAO,UAC5C,SAAAqgC,CAAA,EADQ,aAAatjC,CAAC,EAEzB,EACAu4E,CACF,CAAC,MAEI,OAAC,OAAI,aAAW,MAAGt1E,EAAO,SAAUS,CAAS,EAAI,SAAAmxB,CAAA,CAAK,GAjBpD,IAkBX,CAAC,EACDujD,EAAK,YAAc,OAEnB,MAAMC,EAAiBh3E,IAA0B,CAC/C,YAAU,OAAI,CACZ,SAAU,OACV,QAAS,OACT,WAAY,SACZ,MAAO,OACP,SAAUA,EAAM,WAAW,KAAK,GAChC,MAAOA,EAAM,OAAO,KAAK,UACzB,OAAQA,EAAM,QAAQ,GAAK,EAAG,CAAC,EAC/B,WAAYA,EAAM,WAAW,UAAU,WACvC,aAAc,UAChB,CAAC,EACD,gBAAc,OAAI,CAEhB,OAAQ,CACV,CAAC,EACD,aAAW,OAAI,CACb,OAAQ,KAAKA,EAAM,QAAQ,CAAC,CAAC,EAC/B,CAAC,CACH,GAOMm3E,EAAc,CAAC,CAAE,SAAAl2E,EAAU,SAAA8D,EAAU,QAAA0B,EAAS,UAAApE,CAAU,IAAoB,CAChF,MAAMT,KAAS,MAAWw1E,CAAe,EAEnC90E,KADU,cAAWszE,CAAW,GACV,UAAY7wE,EAElCsyE,EAAM5wE,IAAY,UAAY7E,EAAO,QAAUA,EAAO,iBAC5D,SACE,OAAC,OAAI,aAAW,MAAGy1E,EAAKh1E,CAAS,EAC9B,oBAAe,IAAIpB,EAAWsqB,GACtB,iBAAqBA,CAAK,KAAI,gBAAaA,EAAO,CAAE,SAAUjpB,EAAY,GAAGipB,EAAM,KAAM,CAAC,EAAI,IACtG,EACH,CAEJ,EAEM6rD,EAAmBp3E,IAA0B,CACjD,WAAS,OAAI,CACX,QAAS,OACT,cAAe,MACf,SAAU,OACV,IAAKA,EAAM,QAAQ,CAAC,EACpB,SAAU,UACV,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,oBAAkB,OAAI,CACpB,UAAW,SACX,MAAOA,EAAM,OAAO,KAAK,UACzB,QAAS,OACT,cAAe,MACf,SAAU,OACV,IAAKA,EAAM,QAAQ,CAAC,EACpB,SAAU,YACV,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,CACH,GAEMs3E,EAAU,CAAC,CAAE,SAAAr2E,EAAU,SAAA8D,EAAU,UAAA1C,CAAU,OAE7C,OAAC80E,EAAA,CAAY,QAAQ,UAAU,SAAApyE,EAAoB,UAAA1C,EAChD,SAAApB,CAAA,CACH,EAGJq2E,EAAQ,YAAc,UAEtB,MAAMC,EAAmB,CAAC,CAAE,SAAAt2E,EAAU,SAAA8D,EAAU,UAAA1C,CAAU,OAEtD,OAAC80E,EAAA,CAAY,QAAQ,YAAY,SAAApyE,EAAoB,UAAA1C,EAClD,SAAApB,CAAA,CACH,EAGJs2E,EAAiB,YAAc,mBAMxB,MAAMC,EAAiBx3E,IACrB,CACL,SAAO,OAAI,CACT,QAAS,OACT,eAAgB,gBAChB,WAAY,SACZ,MAAO,OACP,SAAU,MACZ,CAAC,EACD,GAAGq2E,EAAiBr2E,CAAK,EACzB,GAAGg3E,EAAch3E,CAAK,EACtB,GAAG02E,EAAqB12E,CAAK,EAC7B,GAAG82E,EAAgB92E,CAAK,EACxB,GAAGo3E,EAAgBp3E,CAAK,EACxB,GAAGw2E,EAAax2E,CAAK,CACvB,GAGF61E,EAAK,QAAUK,EACfL,EAAK,KAAOU,EACZV,EAAK,OAASe,EACdf,EAAK,KAAOkB,EACZlB,EAAK,QAAUyB,EACfzB,EAAK,iBAAmB0B,EACxB1B,EAAK,YAAcY,C,4EChXZ,IAAKgB,GAAAA,IACVA,EAAA,iBAAmB,eACnBA,EAAA,YAAc,cACdA,EAAA,SAAW,WACXA,EAAA,YAAc,cAGdA,EAAA,WAAa,aACbA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,WAAa,aAXHA,IAAAA,GAAA,IAwCL,MAAMC,EAA6B,CACxC,MAAO,IACP,UAAW,YACb,EAEaC,EAAuC,CAClD,MAAO,IACP,WAAY,CACV,KAAM,UACN,IAAK,SACP,EACA,UAAW,WACX,SAAU,CAAC,CACb,EAMO,IAAKC,GAAAA,IACVA,EAAA,UAAY,YACZA,EAAA,KAAO,OAFGA,IAAAA,GAAA,G,gDCnEL,SAASC,EAAcC,EAAmB5yC,EAAwB,CACvE,OAAIA,EAAW,KAAO4yC,EACb,GAGLC,EAAaD,CAAS,EACjBC,EAAa7yC,EAAW,EAAE,EAG/BA,EAAW,SACNA,EAAW,SAAS,SAAS4yC,CAAS,EAGxC,EACT,CAEA,SAASC,EAAa5zC,EAA2B,CAC/C,OAAIA,IAAa,aACR,GAEK,IAAI,OAAO,0CAA0C,EACtD,KAAKA,CAAQ,CAC5B,C,0ECJO,SAASz8B,EAAoB,CAClC,mBAAAswE,EAAqB,GACrB,OAAAtrD,EAAS,OACT,WAAAurD,EAAa,GACb,QAAArpE,EACA,SAAA3N,CACF,EAAU,CACR,MAAMi3E,KAAa,UAAuB,IAAI,EACxCC,KAAiB,eACpBxzE,GAAiB,CAChB,MAAMyzE,EAAUF,EAAW,SAEvB,CAACE,GAAYzzE,EAAM,kBAAkB,MAAQ,CAACyzE,EAAQ,SAASzzE,EAAM,MAAM,IAC7EiK,EAAQ,CAEZ,EACA,CAACA,CAAO,CACV,EAEA,sBAAU,KACR8d,EAAO,iBAAiB,QAASyrD,EAAgBF,CAAU,EACvDD,GAEFtrD,EAAO,iBAAiB,QAASyrD,EAAgBF,CAAU,EAGtD,IAAM,CACXvrD,EAAO,oBAAoB,QAASyrD,EAAgBF,CAAU,EAC1DD,GACFtrD,EAAO,oBAAoB,QAASyrD,EAAgBF,CAAU,CAElE,GACC,CAACD,EAAoBG,EAAgBzrD,EAAQurD,CAAU,CAAC,KAEpD,OAAC,OAAI,IAAKC,EAAa,SAAAj3E,CAAA,CAAS,CACzC,C,wNCGA,MAAMo3E,EAAc,CAClB,GAAI,CAAE,MAAO,OAAQ,SAAU,GAAI,EACnC,GAAI,CAAE,MAAO,OAAQ,SAAU,GAAI,EACnC,GAAI,CAAE,MAAO,OAAQ,SAAU,GAAI,CACrC,EAOO,SAAS5oC,EAAO,CACrB,SAAAxuC,EACA,QAAA00B,EACA,iBAAA2iD,EAAmB,GACnB,kBAAAC,EAAoB,GACpB,MAAAj5E,EACA,SAAAk5E,EACA,MAAAp5E,EACA,KAAAuoE,EAAO,KACP,KAAAtC,CACF,EAAU,CACR,KAAM,CAACoT,EAAaC,EAAaC,CAAY,EAAIC,EAAmB,EAE9Dh3E,KAAS,MAAWuD,CAAS,EAC7B0zE,KAAgB,MAAWC,EAAkBnR,CAAI,EACjDoR,KAAa,MAAW,GAAa,EAErCC,EAAa,SAAa,IAAI,EAC9B,CAAE,YAAA1+B,EAAa,WAAA2+B,CAAW,KAAI,KAAU,CAAC,EAAGD,CAAU,EACtD,CAAE,aAAAx+B,CAAa,KAAI,KACvB,CACE,cAAe,GACf,OAAQ,GACR,QAAA7kB,CACF,EACAqjD,CACF,EAGAE,EAAsB,EAEtB,MAAMtyE,MAAU,OAAC,OAAI,UAAWhF,EAAO,QAAU,SAAAX,CAAA,CAAS,EACpDk4E,EAAgBV,GAAer5E,GAASi5E,EAAY1Q,CAAI,EAAE,MAC1DyR,GAAWf,EAAY1Q,CAAI,EAAE,SAEnC,SACE,OAAC,KACC,KAAM,GACN,QAAAhyC,EACA,UAAU,QACV,aAAc,aACd,UAAW/zB,EAAO,cAClB,cAAeA,EAAO,OACtB,WAAY,CACV,QAASi3E,CACX,EACA,OAAQ,CACN,QAAS,CACP,MAAOM,EACP,SAAAC,EACF,CACF,EACA,MAAO,GACP,OAAQ,CACN,aAAc,GACd,WAAYx3E,EAAO,YACrB,EACA,cAAeA,EAAO,KACtB,aAAc02E,EACd,WAAY,CACV,aAAc,GACd,WAAY12E,EAAO,UACrB,EAEA,mBAAC,KAAU,CAAC,aAAY,GAAC,QAAO,GAAC,UAAS,GACxC,oBAAC,OACC,aACE,OAAOtC,GAAU,SACb,KAAU,WAAW,OAAO,QAAQ,MAAMA,CAAK,EAC/C,KAAU,WAAW,OAAO,QAAQ,MAAM,UAAU,EAE1D,UAAWsC,EAAO,UACjB,GAAG44C,EACH,GAAGF,EACJ,IAAK0+B,EAGL,oBAAC,OACC,aAAW,MAAGD,EAAW,mBAAoBn3E,EAAO,OAAO,EAC3D,YAAA82E,EACA,aAAAC,CAAA,CACF,KACA,QAAC,OAAI,aAAW,MAAG/2E,EAAO,OAAQ,EAAQyjE,GAASzjE,EAAO,cAAc,EACtE,oBAAC,OAAI,UAAWA,EAAO,QACrB,mBAAC,KACC,KAAK,QACL,QAAQ,YACR,QAAS+zB,EACT,cAAa,KAAU,WAAW,OAAO,QAAQ,MACjD,WAAS,KAAE,0BAA2B,OAAO,EAC/C,EACF,EACC,OAAOr2B,GAAU,YAChB,QAAC,IAAK,CAAC,UAAU,SACf,oBAAC,IAAI,CAAC,QAAQ,KAAK,SAAQ,GAAE,GAAG25E,EAC7B,SAAA35E,CAAA,CACH,EACCk5E,MACC,OAAC,OAAI,UAAW52E,EAAO,SAAU,cAAa,KAAU,WAAW,OAAO,QAAQ,SAC/E,SAAA42E,CAAA,CACH,GAEJ,EAEAl5E,EAED+lE,MAAQ,OAAC,OAAI,UAAWzjE,EAAO,YAAc,SAAAyjE,CAAA,CAAK,GACrD,EACEkT,KAA8B,OAAC,IAAe,CAAC,qBAAoB,GAAE,SAAA3xE,EAAA,CAAQ,EAAzDA,EAAyD,EACjF,EACF,EACF,CAEJ,CAEA,SAASgyE,GAIP,CACA,KAAM,CAACH,EAAaY,CAAc,KAAI,YAA6B,MAAS,EAEtEC,KAAc,eAAa1xE,GAAkB,CACjDyxE,EAAeE,EAAqB3xE,EAAE,OAAO,CAAC,CAChD,EAAG,CAAC,CAAC,EAEC4xE,KAAc,eAAa5xE,GAAkB,CACjD,MAAM6xE,EAAQ7xE,EAAE,QAAQ,CAAC,EACzByxE,EAAeE,EAAqBE,EAAM,OAAO,CAAC,CACpD,EAAG,CAAC,CAAC,EAECC,KAAY,eACf9xE,GAAkB,CACjB,SAAS,oBAAoB,YAAa0xE,CAAW,EACrD,SAAS,oBAAoB,UAAWI,CAAS,CACnD,EACA,CAACJ,CAAW,CACd,EAEMK,KAAa,eAChB/xE,GAAkB,CACjB,SAAS,oBAAoB,YAAa4xE,CAAW,EACrD,SAAS,oBAAoB,WAAYG,CAAU,CACrD,EACA,CAACH,CAAW,CACd,EAEA,SAASd,EAAY9wE,EAAqC,CACxDA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,EAEjB,SAAS,iBAAiB,YAAa0xE,CAAW,EAClD,SAAS,iBAAiB,UAAWI,CAAS,CAChD,CAEA,SAASf,EAAa/wE,EAAqC,CACzDA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,EAEjB,SAAS,iBAAiB,YAAa4xE,CAAW,EAClD,SAAS,iBAAiB,WAAYG,CAAU,CAClD,CAEA,MAAO,CAAClB,EAAaC,EAAaC,CAAY,CAChD,CAEA,SAASY,EAAqBK,EAAiB,CAC7C,IAAIC,EAAc,SAAS,KAAK,aAAeD,EAAU,SAAS,KAAK,YAEvE,MAAO,GADY,KAAK,IAAKC,EAAc,SAAS,KAAK,YAAe,IAAK,EAAE,EAAE,QAAQ,CAAC,CACpE,IACxB,CAEA,SAASX,GAAwB,IAC/B,aAAU,IAAM,CACd,GAAK,SAAS,KAId,gBAAS,KAAK,UAAU,IAAI,kBAAkB,EAEvC,IAAM,CACX,SAAS,KAAK,UAAU,OAAO,kBAAkB,CACnD,CACF,EAAG,CAAC,CAAC,CACP,CAEA,MAAM/zE,EAAanF,IACV,CACL,aAAW,OAAI,CACb,QAAS,OACT,cAAe,SACf,OAAQ,OACR,KAAM,QACN,UAAW,OACX,SAAU,UACZ,CAAC,EACD,UAAQ,OAAI,CACV,IAAK,EAEL,6BAA8B,CAC5B,UAAWA,EAAM,QAAQ,EAC3B,CACF,CAAC,EACD,iBAAe,OAAI,CACjB,gBAAiB,GAAGA,EAAM,OAAO,WAAW,OAAO,cACnD,QAAS,OACT,SAAU,mBACV,cAAe,QACjB,CAAC,EACD,gBAAc,OAAI,CAChB,WAAY,CACV,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,UAAW,mBACX,WAAY,iBACd,EACA,CAACA,EAAM,YAAY,aAAa,QAAQ,CAAC,EAAG,CAC1C,QAAS,CACX,EACA,WAAY,CACV,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,UAAW,gBACX,WAAY,GAAGA,EAAM,YAAY,OAAO,WAAW,CAAC,aACtD,EACA,CAACA,EAAM,YAAY,aAAa,QAAQ,CAAC,EAAG,CAC1C,WAAY,2BACZ,QAAS,CACX,CACF,CACF,CACF,CAAC,EAKD,QAAM,OAAI,CAER,gBAAiB,yBAEjB,SAAU,mBAEV,WAAY,CACV,gBAAiB,GAAGA,EAAM,WAAW,QAAQ,UAAU,cACvD,OAAQ,EACR,QAAS,KACT,KAAM,EACN,SAAU,QACV,MAAO,EACP,IAAK,CACP,CACF,CAAC,EACD,cAAY,OAAI,CACd,WAAY,CACV,QAAS,EAET,WAAY,CACV,QAAS,EACT,CAACA,EAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,WAAYA,EAAM,YAAY,OAAO,SAAS,CAChD,CACF,CACF,CACF,CAAC,EACD,UAAQ,OAAI,CACV,MAAO,gBACP,SAAU,EACV,QAASA,EAAM,QAAQ,EAAG,EAAG,CAAC,EAC9B,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,EACrD,CAAC,EACD,kBAAgB,OAAI,CAClB,aAAc,MAChB,CAAC,EACD,WAAS,OAAI,CACX,SAAU,WACV,MAAOA,EAAM,QAAQ,CAAC,EACtB,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,YAAU,OAAI,CACZ,MAAO,kBACP,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,EACD,WAAS,OAAI,CACX,QAASA,EAAM,QAAQA,EAAM,WAAW,QAAQ,SAAW,CAAC,EAC5D,OAAQ,OACR,SAAU,EACV,UAAW,CACb,CAAC,EACD,eAAa,OAAI,CACf,MAAO,cACP,YAAaA,EAAM,QAAQ,CAAC,EAC5B,OAAQA,EAAM,QAAQ,EAAG,GAAI,GAAI,EAAE,CACrC,CAAC,EACD,WAAS,OAAI,CACX,IAAK,EACL,KAAMA,EAAM,QAAQ,EAAE,EACtB,OAAQ,EACR,SAAU,WACV,OAAQA,EAAM,OAAO,KACvB,CAAC,CACH,GAGF,SAAS84E,EAAiB94E,EAAsB2nE,EAA0B,CACxE,SAAO,OAAI,CACT,MAAO,0BAA0BA,CAAI,GACrC,SAAU,mBAEV,CAAC3nE,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,MAAO,eAAeA,EAAM,QAAQ,CAAC,CAAC,eACtC,SAAU,cACZ,CACF,CAAC,CACH,C,oKCzXA,MAAM85E,EAAe,EAKRC,EAA2B,uBAK3BC,EAAW,uBAKXC,EAAiB,uBAKjBC,EAAgB,yBAKhBC,EAAgB,wBAKhBC,EAAoB,IACpBC,EAAS,CACpB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAEA,SAASC,EAAgBC,EAAqB,CAC5C,MAAMC,KAAY,OAAID,EAAWE,CAAQ,EAEnCC,KAAkB,UAAOF,EAAW,CAAC,GAAG,CAAC,EACzCG,KAAmB,SAAMD,EAAiBZ,CAAY,EACtDc,KAAyB,OAAID,EAAmBE,MAC7C,UAAOA,EAAO,GAAG,CACzB,EACKC,KAAwC,kBAAY,OAAI,GAAGF,CAAsB,CAAC,EAExF,SAAO,OAAIE,EAAuCC,CAAQ,CAC5D,CAEA,SAASN,EAASrhF,EAAe,CAC/B,SAAO,KAAUA,CAAK,EAAE,MAAM,CAChC,CAEA,SAAS2hF,EAAS3hF,EAAoC,CACpD,SAAO,KAAUA,CAAK,EAAE,YAAY,CACtC,CAEO,SAAS4hF,EAA0B5hF,EAAe,CAGvD,SAFU,KAAUA,CAAK,EAAE,cAAc,EAE9B,IAAM,kBAAoB,oBACvC,CAEO,SAAS6hF,EAA+B7hF,EAAe8hF,EAAsB,CAClF,MAAMC,KAAS,KAAU/hF,CAAK,EACxB2E,EAAIo9E,EAAO,cAAc,EAG/B,OAFUA,EAAO,SAAS,EAElB,GACCD,EAAc,qBAAuB,kBAGvCn9E,EAAI,IAAM,kBAAoB,oBACvC,CAEO,IAAIq9E,EAAed,EAAgBD,CAAM,C,yKClHhD,MAAMgB,EAA+B,CAAC,CACpC,aAAAC,EACA,QAAAC,EACA,aAAAC,EACA,QAAA7lD,CACF,IAAyC,CACvC,KAAM,CAAE,YAAa8lD,EAAqB,GAAI,WAAAC,CAAW,EAAIvqC,EAAA,GAAa,uBAAuB,CAC/F,aAAAmqC,EACA,QAAAC,EACA,OAAQC,CACV,CAAC,EAEKG,EAAmB,MAAML,CAAY,IAAI,IAAI,KAAK,EAAE,QAAQ,CAAC,GAEnE,OAAII,KACK,OAAC1pC,EAAA,EAAkB,CAAC,QAAM,KAAE,wDAAyD,aAAa,EAAG,KAI5G,OAAC4pC,EAAA,GACC,OAAQJ,EACR,eAAgBC,EAChB,iBAAAE,EACA,QAAAhmD,CAAA,CACF,CAEJ,EAQakmD,EAA0B,CAAC,CAAE,QAAAlmD,EAAS,aAAA2lD,EAAc,QAAAC,CAAQ,IAAoC,CAC3G,KAAM,CAACO,EAAWC,CAAY,KAAI,YAAwB,MAAM,EAEhE,SACE,OAACC,EAAA,GACC,UAAAF,EACA,YAAaC,EACb,QAAApmD,EACA,gBAAiB,OAAO,OAAO,IAAyB,EAExD,mBAAC0lD,EAAA,CACC,aAAAC,EACA,QAAAC,EACA,aAAcO,EACd,QAAAnmD,CAAA,CACF,EACF,CAEJ,ECrDMsmD,EAAgC,CAAC,CAAE,QAAAV,EAAS,aAAAC,EAAc,QAAA7lD,CAAQ,IAA0C,CAChH,KAAM,CAAE,YAAa8lD,EAAqB,GAAI,WAAAC,CAAW,EAAIvqC,EAAA,GAAa,wBAAwB,CAChG,QAAAoqC,EACA,OAAQC,CACV,CAAC,EAEKG,EAAmB,kBAAkB,IAAI,KAAK,EAAE,QAAQ,CAAC,GAE/D,OAAID,KACK,OAAC1pC,EAAA,EAAkB,CAAC,QAAM,KAAE,yDAA0D,aAAa,EAAG,KAI7G,OAAC4pC,EAAA,GACC,OAAQJ,EACR,eAAgBC,EAChB,iBAAAE,EACA,QAAAhmD,CAAA,CACF,CAEJ,EAOaumD,EAA2B,CAAC,CAAE,QAAAvmD,EAAS,QAAA4lD,CAAQ,IAAqC,CAC/F,KAAM,CAACO,EAAWC,CAAY,KAAI,YAAwB,MAAM,EAEhE,SACE,OAACC,EAAA,GACC,UAAAF,EACA,YAAaC,EACb,QAAApmD,EACA,gBAAiB,OAAO,OAAO,IAAyB,EAExD,mBAACsmD,EAAA,CAA8B,QAAAV,EAAkB,aAAcO,EAAW,QAAAnmD,CAAA,CAAkB,EAC9F,CAEJ,EClDawmD,EAAqB,OAAO,oBAAoB,EAIhDC,EAAwB,IAAmB,CACtD,KAAM,CAACd,EAAce,CAAe,KAAI,YAAoD,IAAI,EAC1F,CAACC,EAAoBC,CAAsB,KAAI3f,EAAA,GAAU,EAAK,EAC9D,CAAC4f,EAAyBC,CAAqB,KAAI,MAAuB,KAAmB,cAAc,EAE3GC,EAAiBF,GAA2BC,EAE5CE,KAAc,eAAY,IAAM,CACpCN,EAAgB,IAAI,EACpBE,EAAuB,EAAK,CAC9B,EAAG,CAACA,CAAsB,CAAC,EAErBK,EAActB,GAAqD,CACvEe,EAAgBf,CAAY,EAC5BiB,EAAuB,EAAI,CAC7B,EAgBA,MAAO,IAdQ,WAAQ,IACjB,CAACjB,GAAgB,CAACgB,EACb,KAGLhB,IAAiBa,KAEZ,OAACD,EAAwB,CAAC,QAASQ,EAAgB,QAASC,CAAA,CAAa,KAGzE,OAACd,EAAuB,CAAC,aAAAP,EAA4B,QAASoB,EAAgB,QAASC,CAAA,CAAa,EAE5G,CAACD,EAAgBJ,EAAoBK,EAAarB,CAAY,CAAC,EAElDsB,CAAU,CAC5B,C,0ECxCO,SAASC,EAAchrD,EAAsB,CAClD,IAAInV,EAAI,GACR,GAAI,CACFA,EAAI,KAAK,UAAUmV,EAAKirD,EAAoB,EAAG,CAAC,CAClD,OAASl1E,EAAG,CAERA,aAAa,QACZA,EAAE,SAAS,EAAE,SAAS,YAAY,GAAKA,EAAE,SAAS,EAAE,SAAS,0BAA0B,GAExF,IAAU,KAAK,KAAU,WAAY,CAACA,EAAE,SAAS,EAAG,6CAA6C,CAAC,EAElG,IAAU,KAAK,KAAU,WAAY,CAACA,aAAa,MAAQA,EAAE,SAAS,EAAIA,CAAC,CAAC,CAEhF,CACA,OAAO8U,CACT,CAEA,SAASogE,GAAsB,CAC7B,MAAMC,EAAO,IAAI,QAEjB,MAAO,CAACx9D,EAAa1nB,IAAmB,CACtC,GAAI0nB,IAAQ,iBAAmBA,IAAQ,gBACrC,MAAO,qCAGT,GAAI,OAAO1nB,GAAU,UAAYA,IAAU,KAAM,CAC/C,GAAIklF,EAAK,IAAIllF,CAAK,EAChB,OAEFklF,EAAK,IAAIllF,CAAK,CAChB,CACA,OAAOA,CACT,CACF,C,uEC/BO,MAAMmlF,EAAsC,IAAM,CACvD,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,yDAA0D,gBAAgB,CAAE,EACpH,CACE,KAAM,UACN,GAAI,MACJ,WAAS,KAAE,0DAA2D,iBAAiB,CACzF,EACA,CACE,KAAM,UACN,GAAI,MACJ,WAAS,KAAE,0DAA2D,iBAAiB,CACzF,EACA,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,yDAA0D,aAAa,CAAE,EACjH,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,0DAA2D,cAAc,CAAE,EACnH,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,0DAA2D,cAAc,CAAE,EACnH,CACE,KAAM,UACN,GAAI,MACJ,WAAS,KAAE,2DAA4D,eAAe,CACxF,EACA,CACE,KAAM,UACN,GAAI,MACJ,WAAS,KAAE,2DAA4D,eAAe,CACxF,EACA,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,yDAA0D,aAAa,CAAE,EACjH,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,yDAA0D,aAAa,CAAE,EACjH,CAAE,KAAM,UAAW,GAAI,MAAO,WAAS,KAAE,0DAA2D,cAAc,CAAE,EACpH,CAAE,KAAM,UAAW,GAAI,MAAO,WAAS,KAAE,0DAA2D,cAAc,CAAE,EACpH,CACE,KAAM,SACN,GAAI,MACJ,WAAS,KAAE,2DAA4D,eAAe,CACxF,EACA,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,yDAA0D,aAAa,CAAE,EACjH,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,0DAA2D,cAAc,CAAE,EACnH,CAAE,KAAM,SAAU,GAAI,MAAO,WAAS,KAAE,0DAA2D,cAAc,CAAE,EACnH,CAAE,KAAM,WAAY,GAAI,WAAY,WAAS,KAAE,uDAAwD,WAAW,CAAE,EACpH,CACE,KAAM,WACN,GAAI,WACJ,WAAS,KAAE,kEAAmE,sBAAsB,CACtG,EACA,CACE,KAAM,WACN,GAAI,WACJ,WAAS,KAAE,gEAAiE,oBAAoB,CAClG,EACA,CACE,KAAM,WACN,GAAI,WACJ,WAAS,KAAE,2DAA4D,eAAe,CACxF,EACA,CACE,KAAM,WACN,GAAI,WACJ,WAAS,KAAE,4DAA6D,gBAAgB,CAC1F,EACA,CACE,KAAM,YACN,GAAI,YACJ,WAAS,KAAE,qEAAsE,yBAAyB,CAC5G,EACA,CACE,KAAM,WACN,GAAI,WACJ,WAAS,KAAE,2DAA4D,eAAe,CACxF,EACA,CACE,KAAM,YACN,GAAI,YACJ,WAAS,KAAE,kEAAmE,sBAAsB,CACtG,EACA,CAAE,KAAM,QAAS,GAAI,QAAS,WAAS,KAAE,mDAAoD,OAAO,CAAE,EACtG,CAAE,KAAM,QAAS,GAAI,MAAO,WAAS,KAAE,0DAA2D,cAAc,CAAE,EAClH,CAAE,KAAM,QAAS,GAAI,QAAS,WAAS,KAAE,uDAAwD,WAAW,CAAE,EAC9G,CACE,KAAM,QACN,GAAI,MACJ,WAAS,KAAE,8DAA+D,kBAAkB,CAC9F,EACA,CAAE,KAAM,QAAS,GAAI,QAAS,WAAS,KAAE,wDAAyD,YAAY,CAAE,EAChH,CACE,KAAM,QACN,GAAI,MACJ,WAAS,KAAE,+DAAgE,mBAAmB,CAChG,EACA,CAAE,KAAM,QAAS,GAAI,QAAS,WAAS,KAAE,uDAAwD,WAAW,CAAE,EAC9G,CACE,KAAM,QACN,GAAI,MACJ,WAAS,KAAE,8DAA+D,kBAAkB,CAC9F,EACA,CACE,KAAM,SACN,GAAI,MACJ,WAAS,KAAE,wEAAyE,4BAA4B,CAClH,EACA,CACE,KAAM,SACN,GAAI,SACJ,WAAS,KAAE,iEAAkE,qBAAqB,CACpG,EACA,CACE,KAAM,SACN,GAAI,MACJ,WAAS,KAAE,qEAAsE,yBAAyB,CAC5G,EACA,CACE,KAAM,SACN,GAAI,SACJ,WAAS,KAAE,8DAA+D,kBAAkB,CAC9F,CACF,EAEaC,EAAuD,IAAM,CACxE,CAAE,SAAO,KAAE,2DAA4D,SAAS,EAAG,MAAO,CAAE,EAC5F,CAAE,SAAO,KAAE,4DAA6D,UAAU,EAAG,MAAO,CAAE,EAC9F,CAAE,SAAO,KAAE,yDAA0D,OAAO,EAAG,MAAO,CAAE,EACxF,CAAE,SAAO,KAAE,yDAA0D,OAAO,EAAG,MAAO,CAAE,EACxF,CAAE,SAAO,KAAE,uDAAwD,KAAK,EAAG,MAAO,CAAE,EACpF,CAAE,SAAO,KAAE,wDAAyD,MAAM,EAAG,MAAO,CAAE,EACtF,CAAE,SAAO,KAAE,wDAAyD,MAAM,EAAG,MAAO,CAAE,EACtF,CAAE,SAAO,KAAE,0DAA2D,QAAQ,EAAG,MAAO,CAAE,EAC1F,CAAE,SAAO,KAAE,6DAA8D,WAAW,EAAG,MAAO,CAAE,EAChG,CAAE,SAAO,KAAE,2DAA4D,SAAS,EAAG,MAAO,CAAE,EAC5F,CAAE,SAAO,KAAE,4DAA6D,UAAU,EAAG,MAAO,EAAG,EAC/F,CAAE,SAAO,KAAE,4DAA6D,UAAU,EAAG,MAAO,EAAG,CACjG,C,sGC3HO,MAAMC,EAAgB,gBAAwC,CACnE,UAAW,KACX,MAAO,CAAC,EACR,UAAW,IAAM,CAAC,EAClB,UAAW,IAAM,CAAC,CACpB,CAAC,EAcM,MAAMC,UAAuB,WAAmD,CACrF,YAAYt8E,EAA4B,CACtC,MAAMA,CAAK,EASb,eAAY,CAAK83B,EAAmC93B,IAAa,CAC/D,KAAK,SAAS,CACZ,UAAA83B,EACA,MAAA93B,CACF,CAAC,CACH,EAEA,eAAY,IAAM,CAChB,KAAK,SAAS,CACZ,UAAW,KACX,MAAO,CAAC,CACV,CAAC,CACH,EApBE,KAAK,MAAQ,CACX,UAAWA,EAAM,WAAa,KAC9B,MAAOA,EAAM,OAAS,CAAC,EACvB,UAAW,KAAK,UAChB,UAAW,KAAK,SAClB,CACF,CAgBA,QAAS,CACP,SAAO,OAACq8E,EAAc,SAAd,CAAuB,MAAO,KAAK,MAAQ,cAAK,MAAM,SAAS,CACzE,CACF,CAEO,MAAME,EAAY,OACvB,OAACF,EAAc,SAAd,CACE,UAAC,CAAE,UAAWpxE,EAAW,MAAAjL,CAAM,IACvBiL,KAAY,OAACA,EAAA,CAAW,GAAGjL,CAAA,CAAO,EAAK,IAChD,CACF,EAGWw8E,EAAmBH,EAAc,Q,2FC9DvC,IAAII,EAEJ,SAASC,EAASC,EAA6B,CACpDF,EAAQE,CACV,CAEO,SAAS12D,GAAuB,CACrC,MAAI,CAACw2D,GAAS,CAACA,EAAM,SACZ,CAAE,WAAY,CAAE,GAAG,KAA4B,QAAS,KAAM,CAAE,EAGlEA,EAAM,SAAS,CACxB,CAEO,SAASv2D,EAASS,EAAa,CACpC,GAAI,GAAC81D,GAAS,CAACA,EAAM,UAIrB,OAAOA,EAAM,SAAS91D,CAAM,CAC9B,C,uEC4BYi2D,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,mBAAqB,qBACrBA,EAAA,uBAAyB,yBACzBA,EAAA,OAAS,SACTA,EAAA,yBAA2B,2BAC3BA,EAAA,SAAW,WACXA,EAAA,iBAAmB,mBAPTA,IAAAA,GAAA,IAcL,MAAMC,EAA+B,IAAI,G,wDCnEzC,MAAMC,EAAkBC,GAC7BA,EAAQ,SAAW,YAGd,SAASC,EAA2Ch0B,EAAM/xD,EAAmC,CAClG,OAAO+xD,KAAK/xD,CACd,C,iKCEO,SAASgmF,EAAkB9hF,EAAiC,CACjE,KAAM,CAAE,UAAArB,CAAU,KAAI,MAAaqB,EAAK,CAAC,CAAC,EAC1C,GAAIrB,EACF,OAAO,KAAc,IAAI,KAAe,cAAc,EAAE,IAAI,CAAC,CAAC,EAEhE,IAAIojF,EAAmB,CAAC,EACxB,UAAWplE,KAAK3c,EAAK,CAAC,EAAE,OAClB2c,EAAE,OAAS,KAAU,QACvBolE,EAAO,KAAKplE,EAAE,IAAI,EAItB,QAASha,EAAI,EAAGA,EAAI3C,EAAK,OAAQ2C,IAAK,CACpC,MAAMjD,EAAkB,CAAC,EACzB,UAAWid,KAAK3c,EAAK,CAAC,EAAE,OAClB2c,EAAE,OAAS,KAAU,QACvBjd,EAAM,KAAKid,EAAE,IAAI,EAGrBolE,EAASA,EAAO,OAAQ3gF,GAAM,CAAC1B,EAAM,SAAS0B,CAAC,CAAC,CAClD,CAEA,OAAO,KAAc,IAAI,KAAe,MAAM,EAAE,IAAI2gF,EAAO,CAAC,CAAC,CAC/D,CA0CA,SAASC,EAAe3iF,EAAoC,CAC1D,OAAOA,EAAQ,QAAUyiF,EAAkBziF,EAAQ,MAAM,CAC3D,CAKO,SAAS4iF,EAAe7hF,EAAkB8hF,EAAkB,CACjE,GAAIA,GAAY,EAAG,CACjB,IAAIC,EAAc/hF,EAAM,OAAO8hF,CAAQ,EAEnCC,EAAY,OAAS,KAAU,QAAU,CAACC,EAAwBD,EAAY,MAAM,IACtF/hF,KAAQ,MAAcA,EAAO8hF,CAAQ,EAEzC,CAEA,OAAO9hF,CACT,CAMO,SAASiiF,EAAehjF,EAA6C,CAC1E,GAAI,CAACA,EAAQ,QAAQ,OACnB,OAGF,MAAMijF,EACJjjF,EAAQ,WACNX,GAAiB,CACjB,IAAIme,EAAYne,EAAM,OAAO,QAAQ,UACrC,OAAOme,IAAc,GAAO0lE,EAAc1lE,IAAc,GAAK2lE,EAAcC,CAC7E,GAEF,GAAIpjF,EAAQ,OAAO,SAAW,EAAG,CAC/B,IAAIe,EAAQf,EAAQ,OAAO,CAAC,EACxBqjF,EAAYtiF,EAEhB,MAAMuiF,EAAmBX,EAAe3iF,CAAO,EAC/C,IAAIujF,EAAYF,EAAU,OAAO,UAAW/lE,GAAMgmE,EAAiBhmE,EAAG+lE,EAAWrjF,EAAQ,MAAM,CAAC,EAEhG,GAAIA,EAAQ,oBACVqjF,EAAY,CACV,GAAGtiF,EACH,OAAQA,EAAM,OAAO,IAAI,CAACuc,EAAG4pD,IAAe,CAC1C,MAAM0M,EAAO,CAAE,GAAGt2D,CAAE,EACd2H,EAAS,CACb,WAAY,EACZ,WAAAiiD,CACF,EACA,OAAI0M,EAAK,MACPA,EAAK,MAAM,OAAS3uD,EAEpB2uD,EAAK,MAAQ,CAAE,OAAA3uD,CAAO,EAEjB2uD,CACT,CAAC,CACH,EAGI2P,EAAY,GAAG,CACjB,MAAMC,EAAYH,EAAU,OAAOE,CAAS,EACtCzwE,EAASuwE,EAAU,OAAO,OAAO,CAAC/lE,EAAGiL,IAAQA,IAAQg7D,CAAS,EACpEzwE,EAAO,QAAQ0wE,CAAS,EACxBH,EAAU,OAASvwE,EACnBywE,EAAY,CACd,CAOF,GAJIA,GAAa,IACfF,EAAYT,EAAeS,EAAWE,CAAS,GAG7CvjF,EAAQ,KAAM,CAChB,IAAI8S,EAASuwE,EAAU,OAAO,OAC5B,CAAC/lE,EAAGulE,IAAaA,IAAaU,GAAavjF,EAAQ,KAAMsd,EAAG+lE,EAAWrjF,EAAQ,MAAM,CACvF,EAGIe,IAAUsiF,EACZA,EAAU,OAASvwE,EAEnBuwE,EAAY,CACV,GAAGtiF,EACH,OAAA+R,CACF,CAEJ,CAEA,OAAOuwE,CACT,CAEA,MAAMI,EAA8B,CAAC,EAC/BC,EAAyB,CAAC,EAC1BC,EAA0B,CAAC,EAC3BL,EAAmBX,EAAe3iF,CAAO,EAE/C,QAAS4jF,EAAa,EAAGA,EAAa5jF,EAAQ,OAAO,OAAQ4jF,IAAc,CACzE,MAAM7iF,EAAQf,EAAQ,OAAO4jF,CAAU,EAEvC,GAAI,CAAC7iF,GAAS,CAACA,EAAM,QAAQ,OAC3B,SAGF,MAAM8iF,EAAiC,CAACX,CAAW,EACnD,IAAIY,EACAhxE,EAAkB,CAAC,EAEvB,QAASo0D,EAAa,EAAGA,EAAanmE,EAAM,OAAO,OAAQmmE,IAAc,CACvE,MAAM7nE,EAAQ0B,EAAM,OAAOmmE,CAAU,EAGrC,GAFA7nE,EAAM,MAAQA,EAAM,OAAS,CAAC,EAE1B,CAACykF,GAAQR,EAAiBjkF,EAAO0B,EAAOf,EAAQ,MAAM,EACxD8jF,EAAOzkF,MACF,CACL,GAAIW,EAAQ,MAAQ,CAACA,EAAQ,KAAKX,EAAO0B,EAAOf,EAAQ,MAAM,EAC5D,SAIF6jF,EAAe,KAAKZ,EAAS5jF,CAAK,CAAC,EAEnC,IAAI0kF,EAAS1kF,EAAM,QAAU,CAAC,EAC1BuT,EAAOvT,EAAM,KACb0B,EAAM,OACJ1B,EAAM,OAAS,KACjBuT,EAAO7R,EAAM,KACJgjF,EAAO,MAAQ,OAExBA,EAAS,CAAE,GAAGA,EAAQ,KAAMhjF,EAAM,IAAK,IAI3C+R,EAAO,KAAK,CACV,GAAGzT,EACH,KAAAuT,EACA,OAAAmxE,CACF,CAAC,CACH,CAEI/jF,EAAQ,oBACVX,EAAM,MAAM,OAAS,CACnB,WAAAukF,EACA,WAAA1c,CACF,EAEJ,CAEA,GAAI,CAAC4c,EACH,SAGEH,EAAe,SAAW,GAC5BA,EAAe,KAAKG,CAAI,EAG1BL,EAAU,KAAKI,CAAc,EAC7B,MAAMriE,EAAiB,CAACsiE,EAAK,MAAM,EAEnC,UAAWzkF,KAASyT,EAClB0O,EAAE,KAAKniB,EAAM,MAAM,EACnBskF,EAAe,KAAKtkF,CAAK,EACpBW,EAAQ,kBAEX,OAAOX,EAAM,OAAO,YAGxBqkF,EAAQ,KAAKliE,CAAC,CAChB,CAEA,IAAIqpD,EAA2D,CAAC,EAEhE,OAAI7qE,EAAQ,OAAS,IAAS,aAC5B6qE,EAASmZ,EAAYN,EAAS,EAAI,EACzB1jF,EAAQ,OAAS,IAAS,MACnC6qE,EAASmZ,EAAYN,CAAO,EAE5B7Y,EAASiZ,EAAKJ,EAASD,EAAWzjF,EAAQ,IAAI,EAGzC,CAEL,OAAQ6qE,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAE,OAAS,EACvC,OAAQ8Y,EAAe,IAAI,CAACrmE,EAAGlP,KAAW,CACxC,GAAGkP,EACH,OAAQutD,EAAOz8D,CAAK,CACtB,EAAE,CACJ,CACF,CAKA,SAAS41E,EAAYj3D,EAAuBk3D,EAAQ,GAAO,CAGzD,IAAIC,EAASn3D,EAAO,CAAC,EACjBo3D,EAASD,EAAO,CAAC,EAIrB,QAASE,EAAK,EAAGA,EAAKr3D,EAAO,OAAQq3D,IAAM,CACzC,IAAIC,EAASt3D,EAAOq3D,CAAE,EAClBE,EAASD,EAAO,CAAC,EAOjBj2E,EAA2C,CAAC,EAEhD,QAAS9K,EAAI,EAAGA,EAAIghF,EAAO,OAAQhhF,IAAK,CACtC,IAAIy+B,EAAMuiD,EAAOhhF,CAAC,EAEdmmD,EAAOr7C,EAAM2zB,CAAG,EAEhB0nB,GAAQ,OACVA,EAAOr7C,EAAM2zB,CAAG,EAAI,CAAC,GAGvB0nB,EAAK,KAAKnmD,CAAC,CACb,CAUA,IAAIihF,EAAc,IAAI,IAClBC,EAAgB,CAAC,EACjBC,EAAiB,CAAC,EAGlBC,EAAkD,CAAC,EAInD31D,EAAQ,EAEZ,QAASzrB,EAAI,EAAGA,EAAI6gF,EAAO,OAAQ7gF,IAAK,CACtC,IAAIvB,EAAIoiF,EAAO7gF,CAAC,EAEhB,GAAIvB,GAAK,KAAM,CACb,IAAI0nD,EAAOr7C,EAAMrM,CAAC,EAEd0nD,GAAQ,MACVi7B,EAAQ,KAAK,CAACphF,EAAGmmD,CAAI,CAAC,EACtB16B,GAAS06B,EAAK,OACdw6B,GAASM,EAAY,IAAIxiF,CAAC,GACjBkiF,GACTO,EAAc,KAAKlhF,CAAC,CAExB,MAAW2gF,GACTO,EAAc,KAAKlhF,CAAC,CAExB,CAQA,GAPAyrB,GAASy1D,EAAc,OAOnBP,EAAO,CACT,QAASz1B,KAAKpgD,EACPm2E,EAAY,IAAI/1B,CAAC,GACpBi2B,EAAe,KAAK,GAAGr2E,EAAMogD,CAAC,CAAC,EAGnCz/B,GAAS01D,EAAe,MAC1B,CA8CA,IAAIE,EAAe,MAAM,KAAK,CAAE,OAAQT,EAAO,OAASG,EAAO,OAAS,CAAE,EAAG,IAAM,SAASt1D,CAAK,GAAG,EAAE,KAAK,GAAG,EAC1G61D,EAAiBV,EAAO,IAAI,CAACj4E,EAAG3I,IAAM,UAAUA,CAAC,sBAAsBA,CAAC,SAAS,EAAE,KAAK,GAAG,EAE3FuhF,EAAkBR,EACnB,MAAM,CAAC,EACP,IAAI,CAACp4E,EAAG3I,IAAM,UAAU4gF,EAAO,OAAS5gF,CAAC,sBAAsBA,EAAI,CAAC,SAAS,EAC7E,KAAK,GAAG,EAKPwhF,EAAiBZ,EAClB,IAAI,CAACj4E,EAAG3I,IAAM,UAAUA,CAAC,eAAeA,IAAM,EAAI,UAAUA,CAAC,UAAY,MAAM,EAAE,EACjF,KAAK,GAAG,EAEPyhF,EAAkBV,EAAO,MAAM,CAAC,EAAE,IAAI,CAACp4E,EAAG3I,IAAM,UAAU4gF,EAAO,OAAS5gF,CAAC,kBAAkB,EA0CjG4gF,EAxCkB,IAAI,SACpB,UACA,gBACA,iBACA,SACA,SACA;AAAA,wBACkBS,CAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASxBC,CAAc;AAAA,YACdC,CAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMjBD,CAAc;AAAA,UACdG,CAAe;AAAA;AAAA;AAAA;AAAA;AAAA,UAKfD,CAAc;AAAA,UACdD,CAAe;AAAA;AAAA;AAAA;AAAA,OAKrB,EAEyBH,EAASF,EAAeC,EAAgBP,EAAQG,CAAM,EAI/EF,EAASD,EAAO,CAAC,CACnB,CAKA,OAAOA,CACT,CAyBO,MAAMhB,EAAc,EACdC,EAAc,EACdC,EAAc,EAK3B,SAAS4B,EAAWC,EAA6BC,EAAoBC,EAAoB,CACvF,QAAS7hF,EAAI,EAAG8hF,EAAIC,EAAc,GAAI/hF,EAAI4hF,EAAS,OAAQ5hF,IAAK,CAC9D,IAAI8Z,EAAU8nE,EAAS5hF,CAAC,EAExB,GAAI8Z,EAAUioE,EAAa,CAEzB,IADAD,EAAKhoE,EAAU,EACRgoE,GAAM,GAAKH,EAAMG,CAAE,GAAK,MAC7BH,EAAMG,GAAI,EAAI,KAIhB,IADAA,EAAKhoE,EAAU,EACRgoE,EAAKD,GAAcF,EAAMG,CAAE,GAAK,MACrCH,EAAOI,EAAcD,GAAK,EAAI,IAElC,CACF,CACF,CAGO,SAAStB,EAAK/2D,EAAuB02D,EAAwB/rE,EAAiB,IAAS,MAAO,CACnG,IAAIoG,EAAqB,IAAI,IAE7B,QAASsmE,EAAK,EAAGA,EAAKr3D,EAAO,OAAQq3D,IAAM,CAEzC,IAAIkB,EADIv4D,EAAOq3D,CAAE,EACN,CAAC,EACR7nE,EAAM+oE,EAAG,OAEb,QAAShiF,EAAI,EAAGA,EAAIiZ,EAAKjZ,IACvBwa,EAAM,IAAIwnE,EAAGhiF,CAAC,CAAC,CAEnB,CAEA,IAAI3C,EAAO,CAAC,MAAM,KAAKmd,CAAK,EAAE,KAAK,CAAC0D,EAAG9e,IAAM8e,EAAI9e,CAAC,CAAC,EAE/CyiF,EAAaxkF,EAAK,CAAC,EAAE,OAErB4kF,EAAQ,IAAI,IAEhB,QAASjiF,EAAI,EAAGA,EAAI6hF,EAAY7hF,IAC9BiiF,EAAM,IAAI5kF,EAAK,CAAC,EAAE2C,CAAC,EAAGA,CAAC,EAGzB,QAAS8gF,EAAK,EAAGA,EAAKr3D,EAAO,OAAQq3D,IAAM,CACzC,IAAIliF,EAAI6qB,EAAOq3D,CAAE,EACbkB,EAAKpjF,EAAE,CAAC,EAEZ,QAASsjF,EAAK,EAAGA,EAAKtjF,EAAE,OAAQsjF,IAAM,CACpC,IAAIC,EAAKvjF,EAAEsjF,CAAE,EAETP,EAAQ,MAAME,CAAU,EAAE,KAAK,MAAS,EAExClC,EAAWQ,EAAYA,EAAUW,CAAE,EAAEoB,CAAE,EAAIrC,EAE3C+B,EAAW,CAAC,EAEhB,QAAS5hF,EAAI,EAAGA,EAAImiF,EAAG,OAAQniF,IAAK,CAClC,IAAIoiF,EAAOD,EAAGniF,CAAC,EACXqiF,EAAaJ,EAAM,IAAID,EAAGhiF,CAAC,CAAC,EAE5BoiF,IAAS,KACPzC,IAAaC,IACf+B,EAAMU,CAAU,EAAID,EAEhBzC,IAAaG,GACf8B,EAAS,KAAKS,CAAU,GAI5BV,EAAMU,CAAU,EAAID,CAExB,CAEAV,EAAWC,EAAOC,EAAUC,CAAU,EAEtCxkF,EAAK,KAAKskF,CAAK,CACjB,CACF,CAEA,OAAOtkF,CACT,CAIO,SAASoiF,EAAwBpiF,EAAiBilF,EAAU,GAAI,CACrE,MAAMrpE,EAAM5b,EAAK,OAGjB,GAAI4b,GAAO,EACT,MAAO,GAIT,IAAIkG,EAAW,EACXC,EAAUnG,EAAM,EAEpB,KAAOkG,GAAYC,GAAW/hB,EAAK8hB,CAAQ,GAAK,MAC9CA,IAGF,KAAOC,GAAWD,GAAY9hB,EAAK+hB,CAAO,GAAK,MAC7CA,IAIF,GAAIA,GAAWD,EACb,MAAO,GAGT,MAAMojE,EAAS,KAAK,IAAI,EAAG,KAAK,OAAOnjE,EAAUD,EAAW,GAAKmjE,CAAO,CAAC,EAEzE,QAASE,EAAUnlF,EAAK8hB,CAAQ,EAAGnf,EAAImf,EAAWojE,EAAQviF,GAAKof,EAASpf,GAAKuiF,EAAQ,CACnF,MAAM9jF,EAAIpB,EAAK2C,CAAC,EAEhB,GAAIvB,GAAK,MAAQ+jF,GAAW,KAAM,CAChC,GAAI/jF,GAAK+jF,EACP,MAAO,GAGTA,EAAU/jF,CACZ,CACF,CAEA,MAAO,EACT,C,sHCzjBA,MAAMgkF,EAAmD,CACvD,OAASC,MAA+B,MAAc,EAAE,KAA6B,iBAAkBA,CAAG,EAC1G,aAAc,OAAM,MAAc,EAAE,IAAgB,0BAA0B,EAC9E,kBAAmB,OAAM,MAAc,EAAE,IAA4B,8BAA8B,EACnG,eAAiB9hE,MAAgB,MAAc,EAAE,OAAO,kBAAoBA,CAAG,EAC/E,YAAa,MAAOA,GAAgB,CAClC,GAAI,CACF,MAAMilD,EAAM,QAAM,MAAc,EAAE,IAAkB,kBAAoBjlD,CAAG,EAC3E,OAAAilD,EAAI,KAAK,SAAW,GACbA,CACT,OAAS58D,EAAG,CACV,MAAMA,CACR,CACF,CACF,EA+BA,MAAM05E,CAAuC,CAI3C,aAAc,CAHd,KAAS,WAAa,yCAIpB,KAAK,IAAM,SAAS,KAAK,UAAU,kBAAe,MAAgB,CAAC,qBACrE,CAEA,MAAM,OAAOD,EAA4B,CACvC,SAAO,MAAc,EAAE,KAA6B,KAAK,IAAM,UAAWA,CAAG,CAC/E,CAEA,MAAM,cAAoC,CAExC,OADe,QAAM,MAAc,EAAE,IAA2B,KAAK,GAAG,GAC1D,MAAM,IAAK,IAChB,CACL,IAAK,EAAE,SAAS,KAChB,KAAM,EAAE,KAAK,MACb,SAAU,EAAE,KAAK,aAAe,KAChC,YAAa,EAAE,KAAK,WACtB,EACD,CACH,CAEA,eAAevrC,EAAa,CAC1B,SAAO,MAAc,EAAE,OAAa,KAAK,IAAM,IAAMA,CAAG,CAC1D,CAEA,MAAM,mBAAoB,CAIxB,SAAO,MAAc,EAAE,IAA4B,8BAA8B,CACnF,CAEA,MAAM,YAAYA,EAAoC,CACpD,MAAMyrC,EAAkC,CAAC,EACzC,GAAI,CAAC,KAAW,WAAY,CAC1B,MAAM,mDAAmD,EACzD,MAAMC,EAAQ,2CAA2C,KAAW,MAAM,IAAI,QAC9ED,EAAQ,cAAmB,UAAUC,CAAK,EAC5C,CACA,SAAO,QACL,MAAc,EACX,MAA4B,CAC3B,IAAK,KAAK,IAAM,IAAM1rC,EAAM,QAC5B,OAAQ,MACR,QAAAyrC,CACF,CAAC,EACA,QACC,KAAK7jD,IACI,CACL,UAAWA,EAAS,KAAK,UACzB,KAAM,CACJ,WAAY,GACZ,QAAS,GACT,QAAS,GACT,SAAU,GACV,QAAS,GACT,SAAU,GACV,UAAW,GACX,SAAU,GACV,YAAa,EACf,CACF,EACD,CACH,CACJ,CACF,CACF,CAEO,SAAS+jD,GAAgD,CAC9D,OAAI,IAAO,eAAe,oBACjB,IAAIH,EAENF,CACT,C,wWC1JO,SAASM,EAAe3vB,EAAmE,CAChG,MAAM12D,EAAuC,CAAC,EAE9C,OAAAA,EAAQ,KACN,IAAIsmF,EAAA,EAA0B,CAC5B,GAAI,kCACJ,SAAO,KAAE,wDAAyD,gBAAgB,EAClF,UAAW,GACX,OAAQ,OAAM,OAACC,EAAA,CAAkB,cAAA7vB,CAAA,CAA8B,CACjE,CAAC,CACH,EAEA12D,EAAQ,KACN,IAAIsmF,EAAA,EAA0B,CAC5B,GAAI,8BACJ,SAAO,KAAE,4DAA6D,oBAAoB,EAC1F,UAAW,GACX,OAAQ,OAAM,OAACE,EAAA,CAAe,cAAA9vB,CAAA,CAA8B,CAC9D,CAAC,CACH,EAEO12D,CACT,CAEA,SAASumF,EAAkB,CAAE,cAAA7vB,CAAc,EAA6C,CACtF,KAAM,CAAE,eAAAC,EAAgB,YAAAE,CAAY,EAAIH,EAAc,SAAS,EACzD,CAAC+vB,GAAUC,CAAW,EAAI,WAAwC,IAAI,EACtE,CAACC,GAAYC,EAAa,EAAI,WAAe,EAAK,EAClD,CAACC,EAAqBC,CAAsB,EAAI,WAAe,EAAK,EACpEvgF,KAAS,MAAWuD,CAAS,KAEnC,aAAU,IAAM,CACV68E,IAAcF,KAChBA,GAAS,MAAM,EACfG,GAAc,EAAK,EAEvB,EAAG,CAACD,GAAYF,EAAQ,CAAC,EAEzB,MAAMM,EAA8D,CAClE,SACA,WACA,OACA,QACF,EAAE,IAAKvqF,KAAW,CAChB,SAAO,cAAWA,EAAK,EACvB,MAAAA,EACF,EAAE,EAEIwqF,GAAqB,OAAOnwB,GAAgB,SAE5CowB,GAAgBD,MAClB,KAAE,wCAAyC,kBAAkB,KAC7D,KAAE,+CAAgD,kBAAkB,EAClEE,GAAa,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,EAAE,IAAK1qF,KAAW,CAAE,MAAOA,GAAO,MAAAA,EAAM,EAAE,EAEzG2qF,EAA2B56E,IAA2C,CAC1E,MAAM66E,GAAS,SAAS76E,GAAE,OAAO,MAAO,EAAE,EAC1C,GAAI,MAAM66E,EAAM,GAAKA,GAAS,IAAMA,GAAS,IAAM,CACjDN,EAAuB,EAAI,EAC3B,MACF,MAAWD,GACTC,EAAuB,EAAK,EAG9BpwB,EAAc,qBAAqB0wB,EAAM,CAC3C,EAEMC,GAA0B7qF,IAA+C,CACzEA,GAAM,QAAU,UAClBoqF,GAAc,EAAI,EAEpBlwB,EAAc,qBAAqBl6D,GAAM,KAAK,CAChD,EAEM8qF,GAAwB,IAAM,CAC9BT,GACFC,EAAuB,EAAK,EAG9BpwB,EAAc,qBAAqB,UAAU,CAC/C,EAEA,SACE,QAACvkB,EAAA,EAAK,CAAC,UAAW,EAAG,OAAQ,EAAG,KAAI,GAClC,oBAACtkC,EAAA,GACC,MAAOo5E,GACP,QAASJ,EACT,MACEA,KACI,KAAE,8CAA+C,0CAA0C,EAC3F,OAEN,UAAWtgF,EAAO,aAEjB,SAAAygF,MACC,OAACzoC,EAAA,GACC,GAAG,mBACH,QAASwoC,EACT,MAAOlwB,EACP,SAAUwwB,GACV,cAAal4E,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,eAC/E,KAEA,OAAC6xC,EAAA,GACC,GAAG,mBACH,aAAc6V,EACd,OAAQswB,EACR,IAAM/oF,IAAQsoF,EAAYtoF,EAAG,EAC7B,KAAK,SACL,IAAK,GACL,IAAK,IACL,QAASyoF,EACT,cAAa13E,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,qBAC7E,UACE,OAAC3D,EAAA,IACC,KAAK,KACL,KAAK,OACL,KAAK,QACL,WAAS,KAAE,qDAAsD,mCAAmC,EACpG,QAAS87E,GACT,cAAan4E,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,0BAE5E,iBAAE,qDAAsD,OAAO,EAClE,EAEJ,EAEJ,KACA,OAACtB,EAAA,EAAK,CAAC,SAAO,KAAE,0CAA2C,aAAa,EAAG,UAAWtH,EAAO,eAC3F,mBAACg4C,EAAA,GACC,GAAG,cACH,QAAS2oC,GACT,MAAO,OAAOvwB,CAAc,EAC5B,SAAU,CAAC,CAAE,MAAAn6D,EAAM,IAAMk6D,EAAc,wBAAwB,SAASl6D,GAAO,EAAE,CAAC,EAClF,MAAO,IACP,cAAa2S,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,WAC/E,EACF,GACF,CAEJ,CAEA,SAASq3E,EAAe,CAAE,cAAA9vB,CAAc,EAA6C,CACnF,KAAM,CAAE,UAAAI,EAAW,WAAAF,CAAW,EAAIF,EAAc,SAAS,EACnD,CAAC+vB,GAAUC,CAAW,EAAI,WAAwC,IAAI,EACtE,CAACC,GAAYC,EAAa,EAAI,WAAe,EAAK,EAClD,CAACC,EAAqBC,CAAsB,EAAI,WAAe,EAAK,EACpEvgF,KAAS,MAAWuD,CAAS,KAEnC,aAAU,IAAM,CACV68E,IAAcF,KAChBA,GAAS,MAAM,EACfG,GAAc,EAAK,EAEvB,EAAG,CAACD,GAAYF,EAAQ,CAAC,EAEzB,MAAMM,EAA4D,CAChE,QACA,WACA,OACA,QACF,EAAE,IAAKvqF,KAAW,CAChB,SAAO,cAAWA,EAAK,EACvB,MAAAA,EACF,EAAE,EAEI+qF,GAAmB,OAAOzwB,GAAc,SACxC0wB,GAAiB1wB,KACnB,KAAE,yCAA0C,YAAY,KACxD,KAAE,gDAAiD,mBAAmB,EAEpE2wB,GAAyBl7E,IAA2C,CACxE,MAAM66E,GAAS,SAAS76E,GAAE,OAAO,MAAO,EAAE,EAC1C,GAAI,MAAM66E,EAAM,GAAKA,GAAS,IAAMA,GAAS,IAAM,CACjDN,EAAuB,EAAI,EAC3B,MACF,MAAWD,GACTC,EAAuB,EAAK,EAG9BpwB,EAAc,mBAAmB0wB,EAAM,CACzC,EAEMM,EAA2BlrF,IAA6C,CACxEA,GAAM,QAAU,UAClBoqF,GAAc,EAAI,EAEpBlwB,EAAc,mBAAmBl6D,GAAM,KAAK,CAC9C,EAEMmrF,GAAyB,IAAM,CAC/Bd,GACFC,EAAuB,EAAK,EAG9BpwB,EAAc,mBAAmB,UAAU,CAC7C,EAEA,SACE,QAACvkB,EAAA,EAAK,CAAC,UAAW,EAAG,OAAQ,EAAG,KAAI,GAClC,oBAACtkC,EAAA,GACC,MAAO25E,GACP,QAASX,EACT,MACEA,KACI,KAAE,+CAAgD,0CAA0C,EAC5F,OAEN,UAAWtgF,EAAO,aAEjB,SAAAghF,MACC,OAAChpC,EAAA,GACC,GAAG,aACH,QAASwoC,EACT,MAAOjwB,EACP,SAAU4wB,EACV,cAAav4E,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,UAC/E,KAEA,OAAC6xC,EAAA,GACC,GAAG,aACH,aAAc8V,EACd,OAAQ2wB,GACR,IAAMrpF,IAAQsoF,EAAYtoF,EAAG,EAC7B,KAAK,SACL,IAAK,GACL,IAAK,IACL,QAASyoF,EACT,cAAa13E,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,gBAC7E,UACE,OAAC3D,EAAA,IACC,KAAK,KACL,KAAK,OACL,KAAK,QACL,WAAS,KAAE,qDAAsD,mCAAmC,EACpG,QAASm8E,GACT,cAAax4E,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,qBAE5E,iBAAE,sDAAuD,OAAO,EACnE,EAEJ,EAEJ,KACA,OAACtB,EAAA,EAAK,CAAC,SAAO,KAAE,0CAA2C,aAAa,EAAG,UAAWtH,EAAO,eAC3F,mBAAC,KACC,GAAG,qBACH,MAAOqwD,EACP,SAAU,IAAMF,EAAc,oBAAoB,CAACE,CAAU,EAC7D,cAAaznD,EAAA,GAAU,WAAW,YAAY,gBAAgB,eAAe,WAC/E,EACF,GACF,CAEJ,CAEA,MAAMrF,EAAanF,IAA0B,CAC3C,gBAAc,OAAI,CAChB,SAAUA,EAAM,QAAQ,EAAE,EAC1B,KAAM,OAAOA,EAAM,QAAQ,EAAE,CAAC,EAChC,CAAC,EACD,kBAAgB,OAAI,CAClB,MAAOA,EAAM,QAAQ,EAAE,CACzB,CAAC,CACH,GC/OaijF,EAAqC,EACrCC,EAAiC,WACjCC,EAA+B,WAErC,MAAM7/C,UAA8B,IAA2E,CAwB7G,YAAYhpB,EAA4C,CAC7D,MAAM03C,EAAiB13C,EAAM,gBAAkB2oE,EACzC/wB,GAAc53C,EAAM,aAAe4oE,EACnC/wB,EAAY73C,EAAM,WAAa6oE,EAC/BlxB,GAAa33C,EAAM,YAAc,GAEvC,MAAM,CACJ,GAAGA,EACH,eAAA03C,EACA,YAAAE,GACA,UAAAC,EACA,WAAAF,GACA,OACE33C,EAAM,QACN,IAAI8oE,EAAA,EAAe,CACjB,YAAa,GACb,gBAAiBC,EAA2BrxB,EAAgBE,EAAW,EACvE,SAAUoxB,EAAoBnxB,EAAWF,EAAU,CACrD,CAAC,CACL,CAAC,EAxCH,KAAgB,yBAA2B,GAmB3C,KAAgB,WAAa3uB,EAAsB,UAsBnD,CA3CA,YAAc,UAAYigD,CAAA,CAI1B,YAAuB,WAAiC,CACtD,IAAI,MAAO,CACT,SAAO,KAAE,2BAA4B,WAAW,CAClD,EACA,IAAI,aAAc,CAChB,SAAO,KAAE,kCAAmC,6CAA6C,CAC3F,EACA,GAAI,iBACJ,iBAAkBjgD,EAAsB,iBACxC,aAAc,GACd,KAAM,MACR,EAEO,WAAuC,CAC5C,SAAO,MAAwB,IAAI,CACrC,CA0BO,oBAAoC,CACzC,MAAMriC,EAA0B,CAAC,EAEjC,UAAWsqB,KAAS,KAAK,MAAM,OAAO,MAAM,SAC1CtqB,EAAS,KAAKsqB,EAAM,MAAM,KAAM,GAAIA,EAAM,MAAM,gBAAkB,CAAC,CAAE,EAGvE,OAAOtqB,CACT,CAEO,SAAS6qB,EAAoB,CAClC,MAAMC,EAAUC,EAAA,GAAoB,eAAe,IAAI,EAEvDF,EAAS,SAAS,CAAE,OAAK,MAAyBC,CAAO,CAAE,CAAC,EAC5DD,EAAS,YAAY,EAErB,MAAMI,GAAc,IAAIgC,EAAA,EAAa,CAAE,KAAMpC,CAAS,CAAC,EAEvD,KAAqB,WAAW,CAC9B,YAAaA,EACb,OAAQ,KACR,QAAS,IAAM,CACb,KAAK,MAAM,OAAO,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,OAAO,MAAM,SAAUI,EAAW,CAAE,CAAC,CAC7F,EACA,KAAM,IAAM,CACV,KAAK,MAAM,OAAO,SAAS,CACzB,SAAU,KAAK,MAAM,OAAO,MAAM,SAAS,OAAQX,GAAUA,IAAUW,EAAW,CACpF,CAAC,CACH,CACF,CAAC,CACH,CAEO,YAAa,CAClB,MAAMhxB,KAAQ,SAA6B,MAAqB,IAAI,CAAC,EACjEqD,EAAA,EAAO,eAAe,oBACxB,KAAqB,KAAK,CACxB,eAAa,KAAE,qCAAsC,aAAa,EAClE,YAAarD,EAAM,MAAM,KACzB,OAAQ,KACR,QAAS,IAAM,CACb,KAAK,MAAM,OAAO,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,OAAO,MAAM,SAAUA,CAAK,CAAE,CAAC,CACvF,EACA,KAAM,IAAM,CACV,KAAK,MAAM,OAAO,SAAS,CACzB,SAAU,KAAK,MAAM,OAAO,MAAM,SAAS,OAAQqwB,GAAUA,IAAUrwB,CAAK,CAC9E,CAAC,CACH,CACF,CAAC,GAED,KAAK,MAAM,OAAO,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,OAAO,MAAM,SAAUA,CAAK,CAAE,CAAC,EACrF,KAAK,aAAa,IAAI,KAA4BA,CAAK,EAAG,EAAI,MAGhE,MAAe,CACjB,CAEO,YAAYA,EAAiB,CAClC,MAAMkxB,EAAWlxB,EAAM,OACvB,GAAI,EAAEkxB,aAAoB8B,EAAA,GACxB,OAGF,MAAMs1D,GAAgB,KAAK,MAAM,OAAO,MAAM,SAAS,QAAQp3D,CAAQ,EAEvE,KAAqB,cAAc,CACjC,cAAelxB,EACf,OAAQ,KACR,QAAS,IAAM,CACb,KAAK,MAAM,OAAO,SAAS,CACzB,SAAU,KAAK,MAAM,OAAO,MAAM,SAAS,OAAQqwB,GAAUA,IAAUa,CAAQ,CACjF,CAAC,CACH,EACA,KAAM,IAAM,CACV,KAAK,MAAM,OAAO,SAAS,CACzB,SAAU,CACR,GAAG,KAAK,MAAM,OAAO,MAAM,SAAS,MAAM,EAAGo3D,EAAa,EAC1Dp3D,EACA,GAAG,KAAK,MAAM,OAAO,MAAM,SAAS,MAAMo3D,EAAa,CACzD,CACF,CAAC,CACH,CACF,CAAC,CACH,CAEO,WAAoC,CACzC,MAAMviF,EAAW,KAAK,MAAM,OAAO,MAAM,SACnC6rB,EAAiC,CAAC,EAExC,GAAI7rB,EAAS,OAAQ,CACnB,IAAI8qB,GAAUC,EAAA,GAAoB,eAAe/qB,EAAS,CAAC,EAAE,MAAM,IAAI,EAEvEA,EAAS,QAASsqB,GAAU,CAC1B,MAAMwB,GAAQxB,EAAM,MAAM,CACxB,IAAK,OACL,KAAMA,EAAM,MAAM,KAAK,MAAM,CAC3B,OAAK,MAAyBQ,EAAO,CACvC,CAAC,CACH,CAAC,EAEDe,EAAe,KAAKC,EAAK,EACzBhB,IACF,CAAC,CACH,CAEA,OAAO,KAAK,MAAM,CAChB,IAAK,OACL,OAAQ,KAAK,MAAM,OAAO,MAAM,CAC9B,IAAK,OACL,SAAUe,CACZ,CAAC,CACH,CAAC,CACH,CAEO,UAAUxB,EAA4B,CAC3C,MAAMm4D,EACJn4D,aAAiBgY,EACbhY,EAAM,MAAM,OACZgY,EAAsB,iBAAiBhY,CAAK,EAAE,MAAM,OACpDI,GAAgB,CAAC,GAAG+3D,EAAa,MAAM,QAAQ,EAGrDA,EAAa,SAAS,CAAE,SAAU,CAAC,CAAE,CAAC,EACtC/3D,GAAc,QAASH,GAAU,CAC/BA,EAAM,YAAY,CACpB,CAAC,EACD,KAAK,MAAM,OAAO,SAAS,CAAE,SAAU,CAAC,GAAG,KAAK,MAAM,OAAO,MAAM,SAAU,GAAGG,EAAa,CAAE,CAAC,CAClG,CAEO,eAAexwB,EAAiB,CACrC,MAAMkxB,EAAWlxB,EAAM,OACvB,GAAI,EAAEkxB,aAAoB8B,EAAA,GAAe,CACvC,QAAQ,MAAM,oEAAoE,EAClF,MACF,CAEA,MAAM1B,GAAaR,EAAA,GAAoB,eAAe,IAAI,EACpDrB,EAAO,KAAK,MAAM,OAElB8B,GAAWvxB,EAAM,MAAM,CAC3B,OAAK,MAAyBsxB,EAAU,CAC1C,CAAC,EAEKN,GAAcE,EAAS,MAAM,CACjC,OAAK,MAAyBI,EAAU,EACxC,KAAMC,EACR,CAAC,EAEKi3D,EAAc/4D,EAAK,MAAM,SAAS,QAAQyB,CAAQ,EAClDR,EAAc,CAAC,GAAGjB,EAAK,MAAM,QAAQ,EAG3CiB,EAAY,OAAO83D,EAAc,EAAG,EAAGx3D,EAAW,EAElDvB,EAAK,SAAS,CAAE,SAAUiB,CAAY,CAAC,EAEvC,KAAK,aAAa,IAAI,KAA4Ba,EAAQ,EAAG,EAAI,CACnE,CAEO,cAA2B,CAChC,MAAMO,EAAqB,CAAC,EAE5B,UAAWzB,KAAS,KAAK,MAAM,OAAO,MAAM,SACtCA,aAAiB2C,EAAA,GACnBlB,EAAO,KAAKzB,EAAM,MAAM,IAAI,EAIhC,OAAOyB,CACT,CAEO,gBAAgBK,EAAoB,CACzC,KAAK,MAAM,OAAO,SAAS,CAAE,YAAaA,CAAU,CAAC,KACrD,MAAoB,KAAK,MAAM,OAAQ,EAAI,CAC7C,CAEO,YAAYI,EAAqBC,EAA2C,CACjF,OAAO,KAAK,MAAM,CAAC,CAAC,CACtB,CAEO,YAA0C,CAC/C,OAAOg0D,EAAe,IAAI,CAC5B,CAEO,wBAAwB1vB,EAAwB,CACrD,KAAK,SAAS,CAAE,eAAAA,CAA+B,CAAC,EAChD,KAAK,MAAM,OAAO,SAAS,CACzB,gBAAiBqxB,EAA2BrxB,EAAgB,KAAK,MAAM,WAAW,CACpF,CAAC,CACH,CAEO,qBAAqBE,EAAkC,CACxDA,IAAgB,WAClBA,EAAcyxB,EAA2B,KAAK,MAAM,WAAW,GAGjE,KAAK,SAAS,CAAE,YAAAzxB,CAAyB,CAAC,EAC1C,KAAK,MAAM,OAAO,SAAS,CACzB,gBAAiBmxB,EAA2B,KAAK,MAAM,eAAgB,KAAK,MAAM,WAAW,CAC/F,CAAC,CACH,CAEO,oBAAoBpxB,EAAqB,CAC9C,KAAK,SAAS,CAAE,WAAAA,CAAW,CAAC,EAC5B,KAAK,MAAM,OAAO,SAAS,CACzB,SAAUqxB,EAAoB,KAAK,MAAM,UAAWrxB,CAAU,CAChE,CAAC,CACH,CAEO,mBAAmBE,EAA8B,CAClDA,IAAc,WAChBA,EAAYyxB,EAAuB,KAAK,MAAM,SAAS,GAGzD,KAAK,SAAS,CAAE,UAAAzxB,CAAU,CAAC,EAC3B,KAAK,MAAM,OAAO,SAAS,CACzB,SAAUmxB,EAAoBnxB,EAAW,KAAK,MAAM,UAAU,CAChE,CAAC,CACH,CAEA,OAAc,aAAqC,CACjD,OAAO,IAAI7uB,EAAsB,CAAC,CAAC,CACrC,CAEA,OAAc,iBAAiBjX,EAAuD,CACpF,MAAMW,EAASX,EAAO,aAAa,EAC7BprB,GAA2B,CAAC,EAElC,QAAS/F,MAAS8xB,EAAQ,CACxB,MAAMiB,GAAe/yB,GAAM,kBAAkBixB,EAAA,EAAoBjxB,GAAM,OAAO,MAAM,aAAe,OACnG+F,GAAS,KAAK,IAAIitB,EAAA,EAAa,CAAE,KAAMhzB,GAAM,MAAM,EAAG,aAAA+yB,EAAa,CAAC,CAAC,CACvE,CAEA,MAAM8jC,EAAgBzuB,EAAsB,YAAY,EACxD,OAAAyuB,EAAc,MAAM,OAAO,SAAS,CAClC,SAAA9wD,GACA,eAAa,MAAqBorB,CAAM,EAAE,MAAM,SAClD,CAAC,EAEM0lC,CACT,CACF,CAEA,SAASwxB,EAA8B,CAAE,MAAAl7D,CAAM,EAA+C,CAC5F,SAAO,OAACA,EAAM,MAAM,OAAO,UAAnB,CAA6B,MAAOA,EAAM,MAAM,OAAQ,CAClE,CAEO,SAASg7D,EAA2BrxB,EAAwBE,EAAkC,CACnG,MAAO,0CAA0CF,CAAc,MAAM,IAAiB,OAAO2xB,EAA2BzxB,CAAW,CAAC,mBACtI,CAEA,SAASyxB,EAA2BzxB,EAAkC,CACpE,GAAI,OAAOA,GAAgB,SACzB,OAAOA,EAGT,OAAQA,EAAa,CACnB,IAAK,SACH,MAAO,KACT,IAAK,OACH,MAAO,KACT,IAAK,SACL,IAAK,WACL,QACE,MAAO,IACX,CACF,CAEA,SAAS0xB,EAAuBzxB,EAA8B,CAC5D,GAAI,OAAOA,GAAc,SACvB,OAAOA,EAGT,OAAQA,EAAW,CACjB,IAAK,QACH,MAAO,KACT,IAAK,OACH,MAAO,KACT,IAAK,SACL,IAAK,WACL,QACE,MAAO,IACX,CACF,CAEO,SAASmxB,EAAoBnxB,EAA8BF,EAAqB,CACrF,MAAM4xB,EAAkBD,EAAuBzxB,CAAS,EAClD2xB,GAAoB7xB,EAAa,OAAS,GAAG4xB,CAAe,KAClE,MAAO,UAAUA,CAAe,OAAOC,EAAiB,GAC1D,C,8FCvXO,MAAMC,EAAkB,uCAClBC,EAAoB,MACpBC,EAAqB,SACrBC,EAAqB,OACrBC,EAAsB,GACtBC,EAAkB,M,+FCEnBC,GAAAA,IAIVA,EAAA,KAAO,OAMPA,EAAA,UAAY,QAMZA,EAAA,MAAQ,QAhBEA,IAAAA,GAAA,IAwBL,MAAMC,EAA6E,CACxF,GAAI,IAAkB,YACtB,KAAM,qBACN,YACE,iHACF,eAAgB,CACd,cAAe,QACf,eAAgB,OAClB,EACA,SAAWjpF,GAAaE,GACtBA,EAAO,QACL,KAAKqnE,GACC,CAAC,MAAM,QAAQA,CAAU,GAAKA,EAAW,OAAS,EAC7CA,EAEF,CAAC2hB,EAAkB3hB,EAAYvnE,CAAO,CAAC,CAC/C,CACH,CACJ,EAKO,SAASkpF,EAAkBvoF,EAAmBQ,EAAgD,CACnG,IAAIgoF,EAAa,GACbC,EAAYzoF,EAAK,CAAC,EAAE,OACxB,MAAM0oF,EAAiBloF,EAAK,gBAAkB,QAC9C,IAAI2R,EAAkB,CAAC,EAEvB,UAAW/R,KAASJ,EAAM,CACpByoF,IAAcroF,EAAM,SACtBooF,EAAa,GACbC,EAAY,KAAK,IAAIA,EAAWroF,EAAM,MAAM,GAG9C,UAAWuc,KAAKvc,EAAM,OAAQ,CAC5B,MAAM6yE,EAAO,CAAE,GAAGt2D,CAAE,EACpBs2D,EAAK,MAAQ,OACT7yE,EAAM,OACJI,EAAK,gBAAkB,SAEhBA,EAAK,gBAAkB,SAChCyyE,EAAK,OAAS,CAAE,GAAGt2D,EAAE,MAAO,EAC5Bs2D,EAAK,OAAOyV,CAAc,EAAItoF,EAAM,MAC3B,CAAC6yE,EAAK,MAAQA,EAAK,OAAS,KACrCA,EAAK,KAAO7yE,EAAM,KAElB6yE,EAAK,KAAO,GAAG7yE,EAAM,IAAI,SAAMuc,EAAE,IAAI,KAGzCxK,EAAO,KAAK8gE,CAAI,CAClB,CACF,CAGA,OAAKuV,IACHr2E,EAASA,EAAO,IAAKwK,GAAM,CACzB,GAAIA,EAAE,OAAO,SAAW8rE,EACtB,OAAO9rE,EAET,MAAMza,EAASya,EAAE,OAAO,MAAM,EAC9B,OAAAza,EAAO,OAASumF,EACT,CACL,GAAG9rE,EACH,OAAAza,CACF,CACF,CAAC,GAGI,CACL,OAAAiQ,EACA,OAAQs2E,CACV,CACF,C,sHC/FA,MAAME,EAAY,CAAC,IAAK,IAAK,GAAG,EAOhC,SAASC,EAAS,CAAE,MAAAhhF,EAAO,UAAAihF,EAAY,CAAC,KAAM,IAAI,CAAE,EAAmB,CACrE,MAAMjjF,KAAS,MAAWuD,CAAS,EAE7B,CAAC2/E,EAAMC,CAAK,EAAIF,EAShBt8B,EAAQ,IAAI,OAAO,kBAAkBu8B,CAAI,gBAAgBC,CAAK,MAAO,IAAI,EACzEC,EAAQphF,EAAM,MAAM;AAAA,CAAI,EAExBqhF,EAA+B,CAAC,EAEtC,OAAAD,EAAM,QAAQ,CAACE,EAAMC,IAAc,CACjB,MAAM,KAAKD,EAAK,SAAS38B,CAAK,CAAC,EAEvC,QAAQ,CAACt/B,EAAOm8D,IAAe,CACrC,MAAMtwD,EAAS7L,EAAM,QAAQ,OACvBu4D,EAAQv4D,EAAM,QAAQ,OAAO,KAAK,EAMxC,GAJI6L,GACFmwD,EAAO,QAAK,OAAC,QAAgD,SAAAnwD,CAAA,EAAtC,GAAGqwD,CAAS,IAAIC,CAAU,SAAmB,CAAO,EAGzE5D,EAAO,CACT,MAAM7pF,EAAO0tF,EAAU7D,CAAK,EACtB55C,EAAcjwC,IAAS,WAAqB6pF,EAAQ,GACpD8D,EAAe,GAAGR,CAAI,IAAItD,CAAK,IAAIuD,CAAK,GAE9CE,EAAO,QACL,OAACM,EAAA,CAEC,QAASD,EACT,KAAA3tF,EACA,YAAAiwC,CAAA,EAHK,GAAGu9C,CAAS,IAAIC,CAAU,QAIjC,CACF,CACF,CACF,CAAC,EAEDH,EAAO,QAAK,OAAC,QAAQ,GAAGE,CAAS,UAAY,CAAE,CACjD,CAAC,KAEM,OAAC,QAAK,UAAWvjF,EAAO,QAAU,SAAAqjF,CAAA,CAAO,CAClD,CAEA,IAAKO,GAAAA,IACHA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,QAAU,UAJPA,IAAAA,GAAA,IAaL,SAASD,EAAM,CAAE,QAAA3+E,EAAS,YAAAghC,EAAa,KAAAjwC,CAAK,EAAe,CACzD,MAAMiK,KAAS,MAAWuD,CAAS,EAE7BsgF,EAAc,CAAQ9tF,EAE5B,SACE,OAAC,KACC,UAAU,YACV,SAAU8tF,EACV,WACE,QAAC,OAAI,UAAW7jF,EAAO,eACrB,oBAAC,IAAK,CAAC,SAAU,EAAG,QAAM,mBAAG,SAAAjK,CAAA,CAAK,EAAK,MAAO,OAAQ,EAAE,IAAEiwC,MAAe,OAAC,QAAM,SAAAA,CAAA,CAAY,GAC9F,EAGF,mBAAC,QACC,mBAAC,IAAK,CAAC,SAAU,EAAG,UAAWhmC,EAAO,MAAO,KAAMgF,EAAS,MAAO,OAAQ,EAC7E,EACF,CAEJ,CAEA,SAAS8+E,EAAW9hF,EAAe,CACjC,OAAO+gF,EAAU,KAAMgB,GAAc/hF,EAAM,WAAW+hF,CAAS,CAAC,CAClE,CAEA,SAASC,EAAUhiF,EAAe,CAChC,OAAO,WAAS,KAAMiiF,GAAYjiF,EAAM,WAAWiiF,CAAO,CAAC,CAC7D,CAEA,SAASC,EAAWliF,EAAe,CACjC,OAAO,mBAAU,KAAMmiF,GAAiBniF,EAAM,WAAWmiF,CAAY,CAAC,CACxE,CAEA,SAASV,EAAUzhF,EAAe,CAChC,IAAIyhF,EACJ,OAAIK,EAAW9hF,CAAK,EAClByhF,EAAY,WACHO,EAAUhiF,CAAK,EACxByhF,EAAY,UACHS,EAAWliF,CAAK,EACzByhF,EAAY,WAEZA,EAAY,UAGPA,CACT,CAEA,MAAMlgF,EAAanF,IAA0B,CAC3C,WAAS,OAAI,CACX,WAAY,UACd,CAAC,EACD,SAAO,OAAI,CACT,OAAQ,UACR,WAAYA,EAAM,WAAW,mBAC/B,CAAC,EACD,WAAS,OAAI,CACX,aAAcA,EAAM,MAAM,OAAO,QACjC,UAAWA,EAAM,QAAQ,GACzB,WAAYA,EAAM,OAAO,WAAW,QACpC,OAAQ,aAAaA,EAAM,OAAO,OAAO,MAAM,GAE/C,QAASA,EAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,kBAAgB,OAAI,CAClB,QAAS,OACT,cAAe,MACf,WAAY,SACZ,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,CACH,E,+KCrIO,SAASgmF,EACdz+C,EACA+e,EAAe,oCAC2B,CAC1C,GAAI,CAAC,sBAAsB/e,CAAS,EAClC,MAAM,IAAI,MAAM+e,CAAY,CAEhC,CAEO,SAAS2/B,EAAuBttD,EAAgC,CACrE,GAAI,CAACutD,EAAiBvtD,CAAS,EAC7B,MAAM,IAAI,MAAM,4FAA4F,CAEhH,CAEO,SAASwtD,EAAuB5nF,EAAwC,CAC7E,GAAI,CAAC6nF,EAAmB7nF,EAAO,SAAS,EACtC,MAAM,IAAI,MACR,sBAAsBA,EAAO,KAAK,yEACpC,CAEJ,CAEO,SAAS8nF,EAAkB9+C,EAAoC1mC,EAAiB,CACrF,UAAWilC,KAAQjlC,EACjB,GAAI,CAACylF,EAAkB/+C,EAAUzB,CAAI,CAAC,EACpC,MAAM,IAAI,MACR,sBAAsByB,EAAU,KAAK,gBAAgBzB,CAAI,iEAC3D,CAGN,CAEO,SAASygD,EAAmB1uF,EAAgByuD,EAAe,mCAA0C,CAC1G,GAAIkgC,EAAU3uF,CAAK,EACjB,MAAM,IAAI,MAAMyuD,CAAY,CAEhC,CAEO,SAASmgC,EAAwB,CACtC,iBAAAzgD,EACA,SAAA7B,EACA,eAAAuiD,EACA,oBAAAC,EACA,IAAAppD,CACF,EAMG,CACD,MAAMqpD,EACJ5gD,EAAiB,WAAW,GAAG7B,CAAQ,GAAG,GAAK6B,EAAiB,WAAW,WAAW7B,CAAQ,GAAG,EAEnG,OAAIuiD,GAAkB,CAACC,GAAuB,CAACC,GAC7CrpD,EAAI,MAAM,KAAyC4G,EAAU6B,CAAgB,CAAC,EACvE,IAGL,CAAC0gD,GAAkB,CAAC1gD,EAAiB,WAAW,UAAU,GAC5DzI,EAAI,MAAM,KAAiDyI,CAAgB,CAAC,EACrE,IAIP,CAAC0gD,GACD,CAAC,OAAO,OAAe,IAAqB,EAAE,SAAS1gD,CAAgB,GACvE,CAAC,OAAO,OAAe,IAA4B,EAAE,KAAM6gD,GACzD7gD,EAAiB,MAAM6gD,CAAqB,CAC9C,GAEAtpD,EAAI,MAAM,IAAiD,EACpD,IAGF,EACT,CAEO,SAASupD,EAA8B9gD,EAA0B,CACtE,OAAOA,EAAiB,MAAM,WAAW,CAC3C,CAEO,SAAS+gD,EAA4B/gD,EAA0B,CACpE,OAAO,OAAO,OAAO,qBAAqB,EACvC,IAAK5oC,GAAMA,EAAE,SAAS,CAAC,EACvB,SAAS4oC,CAAgB,CAC9B,CAEO,SAASogD,EAAmBY,EAA+D,CAChG,OAAOA,EAAY,OAAOA,GAAc,WAAa,EACvD,CAEO,SAASV,EAAkBxgD,EAAe,CAC/C,OAAO,OAAOA,GAAS,UAAYA,EAAK,OAAS,CACnD,CAEO,SAAS0gD,EAAU3uF,EAA2C,CACnE,OACEA,aAAiB,SAAY,OAAOA,GAAU,UAAYA,IAAU,MAAQ,SAAUA,GAAS,UAAWA,CAE9G,CAEO,SAASquF,EAAiBvtD,EAAsD,CACrF,MAAMsuD,EAAoBp1D,GACxB,OAAOA,GAAQ,UAAYA,IAAQ,MAAQ,aAAcA,EAQ3D,OAAO,OAAO8G,GAAc,aALD9G,GACzBo1D,EAAiBp1D,CAAG,GAAKA,EAAI,WAAa,OAAO,IAAI,YAAY,GAIP8G,CAAS,CACvE,CAGO,MAAMuuD,EAAkC,CAAClhD,EAA0BmhD,IAAqC,CAC7G,MAAMC,EAAkBD,EAAc,MAAM,YAAY,gBAExD,MAAO,CAACC,GAAmB,CAACA,EAAgB,KAAMC,GAAOA,EAAG,KAAOrhD,CAAgB,CACrF,EAGashD,EAAsC,CAACpiE,EAAYiiE,IAAqC,CACnG,MAAMI,EAAgCJ,EAAc,MAAM,cAAc,YAAY,kBAEpF,MAAO,CAACI,GAAiC,CAACA,EAA8B,SAASriE,CAAE,CACrF,EAEasiE,EAA6B,CACxCrjD,EACAsjD,EACAlqD,IACG,CACH,MAAMmqD,EAAY,6CACZt/C,EAAM,IAAO,KAAKjE,CAAQ,EAC1BwjD,EAAqBv/C,EAAMA,EAAI,WAAW,WAAW,OAAO,CAAC,CAAE,MAAA9oC,CAAM,IAAMA,IAAUmoF,EAAS,KAAK,EAAI,KAE7G,OAAKr/C,EAKD,CAACu/C,GAAsBA,EAAmB,SAAW,GACvDpqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAAmC,EAAE,EACxD,KAGO,MAAM,QAAQD,EAAS,OAAO,EAAIA,EAAS,QAAU,CAACA,EAAS,OAAO,GACzE,MAAOluD,GAAWouD,EAAmB,KAAK,CAAC,CAAE,QAAAC,CAAQ,IAAMA,EAAQ,SAASruD,CAAM,CAAC,CAAC,GAK7FouD,EAAmB,KAAK,CAAC,CAAE,YAAA//C,CAAY,IAAMA,IAAgB6/C,EAAS,WAAW,GACnFlqD,EAAI,QAAQ,IAAyC,EAGhD,KARLA,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAAoC,EAAE,EACzD,KAZPnqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,KAAqBvjD,CAAQ,CAAC,EAAE,EACnD,GAmBX,EAEa0jD,EAAiC,CAC5C1jD,EACAsjD,EACAlqD,IACG,CACH,MAAMmqD,EAAY,iDACZt/C,EAAM,IAAO,KAAKjE,CAAQ,EAC1BwjD,EAAqBv/C,EAAMA,EAAI,WAAW,eAAe,OAAO,CAAC,CAAE,MAAA9oC,CAAM,IAAMA,IAAUmoF,EAAS,KAAK,EAAI,KAEjH,OAAKr/C,EAKD,CAACu/C,GAAsBA,EAAmB,SAAW,GACvDpqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAAuC,EAAE,EAC5D,KAGO,MAAM,QAAQD,EAAS,OAAO,EAAIA,EAAS,QAAU,CAACA,EAAS,OAAO,GACzE,MAAOluD,GAAWouD,EAAmB,KAAK,CAAC,CAAE,QAAAC,CAAQ,IAAMA,EAAQ,SAASruD,CAAM,CAAC,CAAC,GAK7FouD,EAAmB,KAAK,CAAC,CAAE,YAAA//C,CAAY,IAAMA,IAAgB6/C,EAAS,WAAW,GACnFlqD,EAAI,QAAQ,IAAyC,EAGhD,KARLA,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAAoC,EAAE,EACzD,KAZPnqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,KAAqBvjD,CAAQ,CAAC,EAAE,EACnD,GAmBX,EAEa2jD,EAAkC,CAC7C3jD,EACAsjD,EACAlqD,IACG,CACH,MAAMmqD,EAAY,kDACZt/C,EAAM,IAAO,KAAKjE,CAAQ,EAC1BwjD,EAAqBv/C,EACvBA,EAAI,WAAW,gBAAgB,OAAO,CAAC,CAAE,MAAA9oC,CAAM,IAAMA,IAAUmoF,EAAS,KAAK,EAC7E,KAEJ,OAAKr/C,EAKD,CAACu/C,GAAsBA,EAAmB,SAAW,GACvDpqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAAwC,EAAE,EAC7D,KAGO,MAAM,QAAQD,EAAS,OAAO,EAAIA,EAAS,QAAU,CAACA,EAAS,OAAO,GACzE,MAAOluD,GAAWouD,EAAmB,KAAK,CAAC,CAAE,QAAAC,CAAQ,IAAMA,EAAQ,SAASruD,CAAM,CAAC,CAAC,GAK7FouD,EAAmB,KAAK,CAAC,CAAE,YAAA//C,CAAY,IAAMA,IAAgB6/C,EAAS,WAAW,GACnFlqD,EAAI,QAAQ,IAAyC,EAGhD,KARLA,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAAoC,EAAE,EACzD,KAZPnqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,KAAqBvjD,CAAQ,CAAC,EAAE,EACnD,GAmBX,EAEa4jD,EAAoC,CAC/C5jD,EACAsjD,EACAlqD,IACG,CACH,MAAMmqD,EAAY,0DACZt/C,EAAM,IAAO,KAAKjE,CAAQ,EAC1BwjD,EAAqBv/C,EAAMA,EAAI,WAAW,kBAAkB,OAAO,CAAC,CAAE,GAAAljB,CAAG,IAAMA,IAAOuiE,EAAS,EAAE,EAAI,KAE3G,OAAKr/C,EAKD,CAACu/C,GAAsBA,EAAmB,SAAW,GACvDpqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAA0C,EAAE,EAC/D,IAGLC,EAAmB,KAAK,CAAC,CAAE,MAAAroF,CAAM,IAAMA,IAAUmoF,EAAS,KAAK,GACjElqD,EAAI,MAAM,GAAGmqD,CAAS,IAAI,IAAmC,EAAE,EACxD,KAGLC,EAAmB,KAAK,CAAC,CAAE,YAAA//C,CAAY,IAAMA,IAAgB6/C,EAAS,WAAW,GACnFlqD,EAAI,QAAQ,IAAyC,EAGhD,KAlBLA,EAAI,MAAM,GAAGmqD,CAAS,IAAI,KAAqBvjD,CAAQ,CAAC,EAAE,EACnD,GAkBX,C,8MClQO,MAAM6jD,EAAgB,CAAC,CAAE,eAAAC,EAAgB,mBAAAC,CAAmB,IAAa,CAC9E,MAAMtmF,KAAS,MAAWuD,CAAS,EAE7B,CAACgjF,EAAaC,CAAc,KAAI,YAAiBF,GAAsB,EAAE,KAE/E,KACE,IAAM,IACJ,MAAQ,KAAY,aAAa,EACjCD,EAAeE,CAAW,CAC5B,EACA,IACA,CAACA,CAAW,CACd,EAEA,MAAME,KAAa,OAAC,IAAI,CAAC,KAAM,SAAU,EACzC,IAAIC,EAAa,GAAQJ,GAAsBA,EAAmB,QAAU,GAC5E,GAAI,CACGA,KAGH,MAA6BA,CAAkB,EAF/CI,EAAa,EAIjB,MAAc,CACZA,EAAa,EACf,CAEA,SACE,OAAC,KACC,UAAW1mF,EAAO,UAClB,QAAS,CAAC0mF,EACV,MAAQA,EAA4F,KAA/E,6EACrB,SACE,OAAC,IAAK,CACJ,oBAAC,IAAK,CAAC,IAAK,GAAK,WAAW,SAC1B,oBAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,0CAA0C,2BAAe,EAC1E,KACA,OAAC,KACC,WACE,QAAC,OACC,oBAAC,KAAK,CAAC,QAAQ,4EAA4E,kEAE3F,KACA,OAAC,OAAK,4DAAmD,KACzD,OAAC,KAAK,CAAC,QAAQ,gDAAgD,kCAAsB,KACrF,OAAC,OAAK,kCAAyB,KAC/B,OAAC,OAAK,kCAAyB,KAC/B,OAAC,KAAK,CAAC,QAAQ,8CAA8C,gCAAoB,KACjF,OAAC,OAAK,kCAAyB,KAC/B,OAAC,KAAK,CAAC,QAAQ,4EAA4E,kEAE3F,KACA,OAAC,OAAK,0DAAiD,GACzD,EAGF,mBAAC,IAAI,CAAC,KAAK,cAAc,KAAK,IAAK,GACrC,GACF,EACF,EAGF,mBAAC,KACC,eAAa,KAAE,gEAAiE,QAAQ,EACxF,MAAOH,EACP,SAAWvgF,GAAMwgF,EAAexgF,EAAE,cAAc,KAAK,EACrD,cAAY,qBACZ,OAAQygF,EACR,UAAWzmF,EAAO,WACpB,EACF,CAEJ,EAEMuD,EAAanF,IAA0B,CAC3C,aAAW,OAAI,CACb,aAAc,CAChB,CAAC,EACD,cAAY,OAAI,CACd,MAAO,IACP,SAAU,CACZ,CAAC,CACH,E,iDC9FO,SAASuoF,GAA4B,CAC1C,MAAMC,EAAO,UAAU,UAAU,QAAQ,MAAM,EAAI,GAC7CC,EAAS,UAAU,UAAU,QAAQ,OAAO,EAAI,IAAM,UAAU,UAAU,QAAQ,MAAM,EAAI,GAC5FC,EAAY,UAAU,UAAU,YAAY,EAAE,QAAQ,SAAS,EAAI,GACnEC,EAAW,SAAS,KAAK,UAAU,SAAS,GAAK,aAAa,KAAK,UAAU,MAAM,EAQnFC,EAAgB,kBAAkB,KAAK,UAAU,SAAS,EAEhE,OAAIJ,GAAQ,WAAW,qBAAqB,KAAK,UAAU,SAAS,EAAG,CAAC,CAAC,GAAK,GAG5EC,IACEG,GAAiB,WAAWA,EAAc,CAAC,CAAC,GAAK,IACjD,WAAW,iBAAiB,KAAK,UAAU,SAAS,EAAG,CAAC,CAAC,GAAK,KAGvDF,GAAa,WAAW,qBAAqB,KAAK,UAAU,SAAS,EAAG,CAAC,CAAC,GAAK,GAPjF,GASE,EAAAC,GAAY,WAAW,oBAAoB,KAAK,UAAU,SAAS,EAAG,CAAC,CAAC,GAAK,GAK1F,CAEO,SAASE,GAAmB,CAEjC,MADgB,oBACD,KAAK,UAAU,QAAQ,CACxC,CAEO,SAASC,GAAY,CAC1B,OAAOD,EAAiB,EAAI,SAAM,MACpC,C,0EC7BO,SAASE,EAA8Bz6D,EAA2B,CACvE,KAAM,CAAE,IAAAwnB,EAAK,MAAAx2C,CAAM,EAAIgvB,EAAU,MAEjC,GAAI,CAACwnB,EAAK,CACR,QAAQ,KAAK,yDAAyD,EACtE,MACF,IAEA,MAAoB,MAAO,oDAAoD,EAG/E,MAAMkzC,KAAa,MAAgC,EACnD,OAAAA,EAAW,WAAWlzC,EAAKx2C,GAAS,oBAAoB,KAExD,MAAoB,MAAO,8CAA+C,CAAE,IAAAw2C,EAAK,MAAAx2C,CAAM,CAAC,EAGjF,IAAM,CAEX0pF,EAAW,QAAQ,KAEnB,MAAoB,MAAO,gDAAgD,CAC7E,CACF,C,+FCzBO,SAASC,EAA0B,CAAE,WAAA7hD,EAAY,SAAA8hD,CAAS,EAA+B,CAC9F,KAAM,CAAE,YAAAC,EAAa,cAAAC,CAAc,EAAIC,EAA4BjiD,CAAU,EACvEkiD,EAAcF,EAAc,OAAS,GAAK,OAAO,KAAKD,CAAW,EAAE,OAAS,EAElF,SACE,OAAC,IAAI,CACH,gCACG,iBAAO,KAAKA,CAAW,EAAE,IAAK3hD,MAC7B,OAAC,IAAK,MAAL,CAA0B,SAAO,MAAcA,EAAU,EAAE,EACzD,SAAA+hD,EAAYJ,EAAY3hD,CAAQ,EAAG0hD,CAAQ,GAD7B1hD,CAEjB,CACD,EACA8hD,MAAe,OAAC,IAAK,QAAL,GAAiB,SAAU,EAC3CC,EAAYH,EAAeF,CAAQ,GACtC,EACF,CAEJ,CAEA,SAASK,EAAYniD,EAAmC8hD,EAA8D,CACpH,OAAO9hD,EAAW,IAAKG,MACrB,OAAC,IAAK,KAAL,CACC,UAAWA,EAAU,MACrB,KAAMA,GAAW,MAAQ,OAEzB,SAAO,MAAcA,EAAU,MAAO,EAAE,EACxC,QAAU5iC,GAAU,CAClB,GAAI4iC,EAAU,KACZ,OAAO2hD,EAAS3hD,CAAS,EAE3BA,EAAU,UAAU5iC,CAAK,CAC3B,GAPK4iC,EAAU,EAQjB,CACD,CACH,CAOA,SAAS8hD,EAA4BjiD,EAAyD,CAC5F,SAAO,WAAQ,IAAM,CACnB,MAAMgiD,EAAuC,CAAC,EACxCD,EAAqD,CAAC,EAE5D,UAAWnuF,KAAQosC,EAAY,CAC7B,GAAI,CAACpsC,EAAK,SAAU,CAClBouF,EAAc,KAAKpuF,CAAI,EACvB,QACF,CAEK,MAAM,QAAQmuF,EAAYnuF,EAAK,QAAQ,CAAC,IAC3CmuF,EAAYnuF,EAAK,QAAQ,EAAI,CAAC,GAEhCmuF,EAAYnuF,EAAK,QAAQ,EAAE,KAAKA,CAAI,CAEtC,CAEA,MAAO,CACL,cAAAouF,EACA,YAAAD,CACF,CACF,EAAG,CAAC/hD,CAAU,CAAC,CACjB,C,gDC3EO,MAAMoiD,EAAyB,kBACzBC,EAAiC,W,2ECOvC,MAAMC,CAAW,CAMtB,YAAY1tF,EAAiB,CAL7B,YAA2B,CAAC,EAE5B,KAAQ,YAAiD,CAAC,EAC1D,KAAQ,YAAmD,CAAC,EAG1D,KAAK,OAASA,EAAK,OAAO,IAAI,CAACtB,EAAOkpB,KAAS,CAC7C,GAAGlpB,EACH,MAAOkpB,CACT,EAAE,EAEF,QAASjlB,EAAI,EAAGA,EAAI3C,EAAK,OAAO,OAAQ2C,IAAK,CAC3C,MAAMjE,EAAQsB,EAAK,OAAO2C,CAAC,EAE3B,GAAIjE,EAAM,OAAS,KAAU,MAAO,CAClC,MAAM6C,KAAI,MAAuB7C,CAAK,EAClC6C,IACF7C,EAAM,KAAO6C,EAEjB,CACK,KAAK,YAAY7C,EAAM,IAAI,IAC9B,KAAK,YAAYA,EAAM,IAAI,EAAI,CAAC,GAElC,KAAK,YAAYA,EAAM,IAAI,EAAE,KAAK,CAChC,GAAGA,EACH,MAAOiE,CACT,CAAC,EAEG,KAAK,YAAYjE,EAAM,IAAI,EAC7B,QAAQ,KAAK,uCAAwCA,EAAM,IAAI,EAE/D,KAAK,YAAYA,EAAM,IAAI,EAAI,CAAE,GAAGA,EAAO,MAAOiE,CAAE,CAExD,CACF,CAEA,UAAUhH,EAAoC,CAC5C,GAAI,CAACA,EACH,MAAO,CAAC,GAAG,KAAK,MAAM,EAExB,MAAMwW,EAAS,KAAK,YAAYxW,CAAI,EACpC,OAAIwW,EACK,CAAC,GAAGA,CAAM,EAEZ,CAAC,CACV,CAEA,eAAexW,EAA0B,CACvC,MAAMgyF,EAAQ,KAAK,YAAYhyF,CAAI,EACnC,OAAOgyF,GAASA,EAAM,OAAS,CACjC,CAEA,oBAAoBhyF,EAAiBiyF,EAAgB,GAAmC,CAGtF,OAFe,KAAK,YAAYjyF,CAAI,GACT,KAAM+C,GAAUkvF,GAAiB,CAAClvF,EAAM,OAAO,QAAQ,MAAM,CAE1F,CAEA,cAAcuT,EAAuB,CACnC,MAAO,CAAC,CAAC,KAAK,YAAYA,CAAI,CAChC,CAEA,wBAAwBA,EAActW,EAA0B,CAC9D,MAAO,CAAC,CAAC,KAAK,YAAYsW,CAAI,GAAK,KAAK,YAAYtW,CAAI,EAAE,OAAQ+C,GAAUA,EAAM,OAASuT,CAAI,EAAE,OAAS,CAC5G,CAKA,eAAeA,EAA0C,CACvD,OAAO,KAAK,YAAYA,CAAI,CAC9B,CAKA,iBAAiBvM,EAAe7J,EAAiC,CAC/D,OAAO,OAAO,OAAO,KAAK,WAAW,EAAE,OAAQ8gB,GACtCA,EAAE,QAAUA,EAAE,OAAOjX,CAAK,IAAM7J,CACxC,CACH,CACF,C,4IC1EO,IAAIgyF,EAAiB,IACnB,CACL,CACE,OAAQ,SACR,GAAI,gBACJ,QAAM,KAAE,yBAA0B,eAAe,EACjD,KAAM,gBACN,IAAK,oEACP,EACA,CACE,OAAQ,SACR,GAAI,UACJ,QAAM,KAAE,mBAAoB,SAAS,EACrC,KAAM,kBACN,IAAK,oEACP,EACA,CACE,OAAQ,SACR,GAAI,YACJ,QAAM,KAAE,qBAAsB,WAAW,EACzC,KAAM,eACN,IAAK,0DACP,CACF,EAGK,SAASC,EAAep9C,EAAiB,CAG9C,MAAO,CACL,gBAAiB,GACjB,OAJaA,EAAQ,SAAS,OAAO,CAKvC,CACF,CAEO,SAASq9C,EAAgBC,EAAqC,CACnE,KAAM,CAAE,UAAAC,EAAW,YAAAC,CAAY,EAAI,IAC7B5vF,EAAsB,CAAC,EACvB6vF,EAAYD,EAAY,UAAY,KAAKA,EAAY,SAAS,IAAM,GAW1E,GATKF,GACH1vF,EAAM,KAAK,CACT,OAAQ,SACR,GAAI,UACJ,KAAM,GAAG2vF,EAAU,OAAO,GAAGE,CAAS,GACtC,IAAKD,EAAY,UACnB,CAAC,EAGCD,EAAU,YACZ,OAAO3vF,EAGT,KAAM,CAAE,gBAAA8vF,CAAgB,EAAIN,EAAeG,EAAU,OAAO,EAE5D,OAAA3vF,EAAM,KAAK,CACT,OAAQ,SACR,GAAI,UACJ,KAAM2vF,EAAU,cAChB,IAAKG,EAAkB,4DAA8D,MACvF,CAAC,EAEGH,EAAU,WACZ3vF,EAAM,KAAK,CACT,OAAQ,SACR,GAAI,gBACJ,KAAM,yBACN,KAAM,eACN,IAAK,gEACP,CAAC,EAGIA,CACT,CAEO,SAAS+vF,EAAiBrqD,EAA2B,CAC1D6pD,EAAiB7pD,CACnB,CAQO,MAAM6Z,KAAS,QAAK,CAAC,CAAE,YAAAywC,EAAa,YAAAN,CAAY,IAAa,CAClE,MAAM1vF,GAASgwF,GAAeT,EAAe,GAAG,OAAOE,EAAgBC,CAAW,CAAC,EAC7EpoF,KAAS,MAAWuD,CAAS,EAEnC,SACE,OAAC,UAAO,UAAWvD,EAAO,OACxB,mBAAC,OAAI,UAAU,cACb,mBAAC,MAAG,UAAWA,EAAO,KACnB,SAAAtH,EAAM,IAAI,CAACU,EAAMyO,OAChB,OAAC,MAAG,UAAW7H,EAAO,SACpB,mBAAC2oF,EAAA,CAAW,KAAMvvF,CAAA,CAAM,GADWyO,CAErC,CACD,EACH,EACF,EACF,CAEJ,CAAC,EAEDowC,EAAO,YAAc,SAErB,SAAS0wC,EAAW,CAAE,KAAA39E,CAAK,EAAyB,CAClD,MAAMhG,EAAUgG,EAAK,OACnB,OAAC,KAAE,KAAMA,EAAK,IAAK,OAAQA,EAAK,OAAQ,IAAI,sBAAsB,GAAIA,EAAK,GACxE,SAAAA,EAAK,KACR,EAEAA,EAAK,KAGP,SACE,oBACG,UAAAA,EAAK,SAAQ,OAAC,IAAI,CAAC,KAAMA,EAAK,KAAM,EAAG,IAAEhG,CAAA,EAC5C,CAEJ,CAEA,MAAMzB,EAAanF,IAA0B,CAC3C,UAAQ,OAAI,CACV,GAAGA,EAAM,WAAW,UACpB,MAAOA,EAAM,OAAO,KAAK,QACzB,QAAS,QACT,QAASA,EAAM,QAAQ,EAAG,CAAC,EAC3B,SAAU,WACV,MAAO,MAEP,UAAW,CACT,MAAOA,EAAM,OAAO,KAAK,YACzB,eAAgB,WAClB,EAEA,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,QAAS,MACX,CACF,CAAC,EACD,QAAM,OAAI,CACR,UAAW,MACb,CAAC,EACD,YAAU,OAAI,CACZ,QAAS,eACT,UAAW,CACT,QAAS,QACT,QAASA,EAAM,QAAQ,EAAG,CAAC,CAC7B,EACA,qBAAsB,CACpB,QAAS,KACT,YAAa,CACf,CACF,CAAC,CACH,E,gEClKA,SAASwqF,EAAgB,CAAE,SAAAvpF,EAAU,WAAAwpF,EAAY,KAAAC,CAAK,EAAyBC,EAAwB,CACrG,OAAOF,KAAa,gBAAaC,EAAKzpF,CAAQ,CAAC,EAAIA,CACrD,CAEA,WAAe,cAAWupF,CAAe,C,gCCPrC,OAAO,kBACT,IAA0B,OAAO,iBAInC,OAAO,wBACL,IAAwB,UAAU,EAAG,IAAwB,YAAY,QAAQ,CAAC,GAAK,IAErF,OAAO,QACT,KAAoB,OAAO,OAI7B,OAAO,4BAA8B,GAErC,eAAeI,GAAsB,CAGnC,MAAM,OAAO,4BAIb,MAAM,uCACR,CAEAA,EAAoB,EAAE,MAAOriF,GAAU,CACrC,QAAQ,MAAM,8BAA+BA,CAAK,EAClD,OAAO,sBAAsB,CAC/B,CAAC,C,wECzBM,SAASsiF,EAA+BhzF,EAAUizF,EAA8B,CACrF,SAAI,WAAQjzF,CAAK,EACRA,EAAM,IAAK+U,GAASi+E,EAA4Bj+E,EAAMk+E,CAAe,CAAC,KAE3E,iBAAcjzF,CAAK,EACd,OAAO,KAAKA,CAA+B,EAC/C,KAAK,EACL,OAAO,CAACqd,EAAUqK,IAAQ,CACzB,MAAMniB,EAAKvF,EAAc0nB,CAAG,EAE5B,OAAIniB,GAAK,OACP8X,EAAIqK,CAAG,EAAIsrE,EAA4BztF,EAAG0tF,CAAe,GAGvDA,IAAoB1tF,IAAM,KAAYA,IAAM,QAC9C8X,EAAIqK,CAAG,EAAI,GAGNrK,CACT,EAAG,CAAC,CAAC,EAEFrd,CACT,C,uHCnBO,MAAMkzF,EAAyB,CAAC,CACrC,QAAAC,EACA,WAAAr5C,EACA,YAAAs5C,EACA,QAAAC,EACA,WAAAC,CACF,OAEI,QAAC,IAAK,CACH,UAAAH,MACC,OAAC,MACC,KAAK,SACL,QAAS,IAAM,CACbC,EAAY,EAAI,EAChB,IAAsB,wBAAwB,CAChD,EACA,QAAQ,YACR,SAAUE,EAEV,mBAAC,KAAK,CAAC,QAAQ,8DAA8D,8BAAkB,EACjG,KAEF,OAAC,KACC,WAAS,KACP,0FACA,wCACF,EACA,UAAU,SAEV,mBAAC,KAAM,CAAC,KAAK,SAAS,SAAU,CAACx5C,EAAY,QAASu5C,EAAS,KAAK,cAClE,mBAAC,KAAK,CAAC,QAAQ,4DAA4D,4BAAgB,EAC7F,EACF,GACF,C,wJCrBG,MAAME,EAAU,CAAC,CAAE,KAAAn9E,EAAM,SAAAlJ,EAAU,SAAAsmF,EAAU,WAAAC,EAAa,EAAK,IAAa,CACjF,MAAM1pF,KAAS,MAAWuD,CAAS,EAI7BomF,KAAW,WAAQ,IAAM,CAC7B,GAAID,EAAY,CACd,KAAM,CAAE,MAAAlyF,EAAO,YAAAoyF,CAAY,KAAI,MAAqBv9E,CAAI,EACxD,MAAO,CAAE,gBAAiB7U,EAAO,YAAAoyF,CAAY,CAC/C,CAEF,EAAG,CAACv9E,EAAMq9E,CAAU,CAAC,EAErB,SACE,QAAC,MAAG,aAAW,MAAG1pF,EAAO,UAAW,CAAC2pF,GAAY3pF,EAAO,eAAe,EAAG,MAAO2pF,EAC/E,oBAAC,QAAK,UAAW3pF,EAAO,UAAY,SAAAqM,CAAA,CAAK,KACzC,OAACo+B,EAAA,GACC,KAAK,QACL,KAAK,KACL,SAAAtnC,EACA,WAAS,KAAE,+BAAgC,uBAAwB,CAAE,KAAAkJ,CAAK,CAAC,EAC3E,QAAS,IAAMo9E,EAASp9E,CAAI,EAC5B,UAAWrM,EAAO,aACpB,GACF,CAEJ,EAEMuD,EAAanF,GAAyB,CAC1C,MAAMX,EAASW,EAAM,QAAQ,SAAW,EAExC,MAAO,CACL,aAAW,OAAI,CACb,QAAS,OACT,IAAK,MACL,WAAY,SACZ,OAAQ,GAAGX,CAAM,KACjB,WAAY,GAAGA,EAAS,CAAC,KACzB,YAAa,MACb,YAAa,QACb,aAAcW,EAAM,MAAM,OAAO,QACjC,QAAS,KAAKA,EAAM,QAAQ,EAAG,CAAC,GAChC,WAAY,SACZ,WAAY,OACZ,WAAY,IACZ,SAAUA,EAAM,WAAW,KAAK,GAChC,MAAO,MACT,CAAC,EACD,mBAAiB,OAAI,CACnB,gBAAiBA,EAAM,OAAO,WAAW,UACzC,YAAaA,EAAM,WAAW,MAAM,YACpC,MAAOA,EAAM,OAAO,KAAK,OAC3B,CAAC,EACD,aAAW,OAAI,CACb,SAAU,OACV,aAAc,WACd,SAAU,QACZ,CAAC,EACD,gBAAc,OAAI,CAChB,OAAQ,EACR,kBAAmB,CACjB,QAAS,MACX,CACF,CAAC,CACH,CACF,ECpDayrF,KAAY,cACvB,CACE,CACE,YAAaC,EACb,KAAAzvD,EAAO,CAAC,EACR,SAAAxkC,EACA,MAAA2H,EACA,UAAAiD,EACA,SAAA0C,EACA,UAAA4mF,EACA,QAAAxjF,EACA,GAAA+c,EACA,WAAAomE,EAAa,EACf,EACA7xF,IACG,CACH,MAAM2I,EAAcspF,MAAmB,KAAE,4CAA6C,4BAA4B,EAC5G,CAACE,EAAYC,CAAa,KAAI,YAAS,EAAE,EACzCjqF,KAAS,MAAW,CAAS,EAC7B5B,KAAQ,MAAU,EAElB8rF,KAAe,eAAannF,GAA+C,CAC/EknF,EAAclnF,EAAM,OAAO,KAAK,CAClC,EAAG,CAAC,CAAC,EAEC0mF,EAAYU,GAAwB,CACxCt0F,EAASwkC,EAAK,OAAQxY,GAAMA,IAAMsoE,CAAW,CAAC,CAChD,EAEMruB,EAAS/4D,GAAmD,CAChEA,GAAO,eAAe,EACjBs3B,EAAK,SAAS2vD,CAAU,GAC3Bn0F,EAASwkC,EAAK,OAAO2vD,CAAU,CAAC,EAElCC,EAAc,EAAE,CAClB,EAEM/oF,EAAS,IAAM,CACf6oF,GAAaC,GACfluB,EAAM,CAEV,EAEMsuB,EAAiBrnF,GAA+B,CAChDA,EAAM,MAAQ,SAAWinF,IAAe,IAC1CluB,EAAM/4D,CAAK,CAEf,EAEA,SACE,QAAC,OAAI,aAAW,MAAG/C,EAAO,QAASS,EAAWjD,KAAQ,OAAI,CAAE,MAAOY,EAAM,QAAQZ,CAAK,CAAE,CAAC,EAAI,EAAE,EAC7F,oBAACi9C,EAAA,GACC,IAAA5iD,EACA,GAAAyrB,EACA,SAAAngB,EACA,YAAA3C,EACA,SAAU0pF,EACV,MAAOF,EACP,UAAWI,EACX,OAAAlpF,EACA,QAAAqF,EACA,UACE,OAACtB,EAAA,IACC,KAAK,OACL,UAAWjF,EAAO,eAClB,QAAS87D,EACT,KAAK,KACL,SAAUkuB,EAAW,QAAU,EAE/B,mBAAC,KAAK,CAAC,QAAQ,4BAA4B,eAAG,EAChD,EAEJ,EACC3vD,GAAM,OAAS,MACd,OAAC,MAAG,UAAWr6B,EAAO,KACnB,SAAAq6B,EAAK,IAAKiB,MACT,OAACkuD,EAAO,CAAW,KAAMluD,EAAK,SAAAmuD,EAAoB,SAAAtmF,EAAoB,WAAAumF,CAAA,EAAxDpuD,CAAgF,CAC/F,EACH,GAEJ,CAEJ,CACF,EAEAuuD,EAAU,YAAc,YAExB,MAAM,EAAazrF,IAA0B,CAC3C,WAAS,OAAI,CACX,UAAWA,EAAM,QAAQ,CAAC,EAC1B,QAAS,OACT,cAAe,SACf,IAAKA,EAAM,QAAQ,CAAC,EACpB,SAAU,MACZ,CAAC,EACD,QAAM,OAAI,CACR,QAAS,OACT,eAAgB,aAChB,SAAU,OACV,IAAKA,EAAM,QAAQ,EAAG,CACxB,CAAC,EACD,kBAAgB,OAAI,CAClB,OAAQ,MAAMA,EAAM,QAAQ,CAAC,CAAC,EAChC,CAAC,CACH,E,2LCtHO,MAAMisF,EAAoD,CAC/D,KAAuB,WACvB,KAAuB,UACzB,EAEMC,EAAmCv0F,GAAiC,8BAA8BA,CAAI,GAE/Fw0F,EAAiC,CAACp3C,EAAkBp9C,IAAuC,CACtG,IAAM,IAAIu0F,EAAgCv0F,CAAI,EAAGo9C,EAAU,OAAS,OAAO,CAC7E,EAEaq3C,EAA2B,IAA4B,CAElE,IAAIC,EAA6C,CAC/C,CAAC,KAAuB,UAAU,EAAG,CAAE,QAAS,EAAK,EACrD,CAAC,KAAuB,UAAU,EAAG,CAAE,QAAS,EAAM,CACxD,EAEA,UAAW10F,KAAQs0F,EAAyB,CAE1C,GAAIt0F,IAAS,KAAuB,WAClC,SAIsB,IAAM,IAAIu0F,EAAgCv0F,CAAI,CAAC,IAC/C,UACtB00F,EAAqB10F,CAAI,EAAI,CAAE,QAAS,EAAM,EAElD,CACA,OAAO00F,CACT,EAEMC,EAAkC,CACtCC,EACAC,EACAC,IAEO,IAAI,IAA+BC,GACjCH,EAAiB,UAAWI,GAAgB,CACjD,GACEA,EAAY,YACZA,EAAY,WAAW,MACvBA,EAAY,WAAW,cACvBA,EAAY,WAAW,aAAe,QACtCA,EAAY,QAAU,KAAa,KACnC,CACA,MAAMC,EAAaD,EAAY,WAAW,WACpCE,EAAeL,EAAa,IAAKv8D,GAAUA,EAAM,KAAK,EACtD68D,KAAc,WAAQH,EAAY,WAAW,KAAM,iBAAiB,EAC1E,IAAII,EAAyB,CAAC,EAC9BF,EAAa,QAAS3kC,GAAU,CAC9B,GAAI4kC,EAAY5kC,CAAK,GAAG,OAAQ,CAC9B,MAAMz1C,KAAS,MAAsBq6E,EAAY5kC,CAAK,EAAG0kC,CAAU,EACnEG,EAAY,CAAC,GAAGA,EAAW,GAAGt6E,CAAM,EACpC,MAAMu6E,EAAoD,CACxD,eAAgB,KAAe,QAC/B,cAAeL,EAAY,YAAY,aACvC,eAAAF,EACA,YAAaD,EAAa,KAAMv8D,GAAUA,EAAM,QAAUi4B,CAAK,CACjE,EAEAwkC,EAAS,KAAK,CACZ,KAAMK,EAAU,IAAKE,GAAM,CACzB,MAAMC,EAASD,EAAE,MAAM,QAAU,CAAC,EAClC,MAAO,CACL,GAAGA,EACH,KAAM,CACJ,OAAQ,CACN,GAAGC,EACH,GAAGF,CACL,CACF,CACF,CACF,CAAC,EACD,MAAOL,EAAY,KACrB,CAAC,CACH,CACF,CAAC,EACDD,EAAS,SAAS,CACpB,CACF,CAAC,CACF,EAGGS,EAAgC,CACpCx1F,EACA40F,EACAC,EACAC,IACG,CACH,GAAI90F,IAAS,KAAuB,WAClC,OAAO20F,EAAgCC,EAAkBC,EAAcC,CAAc,CAIzF,EAEaW,EAAgC,CAC3CC,EACA11F,EACA21F,EACAf,IAC8C,CAyB9C,MAAMgB,EAxBYF,EAAe,IAAI,CAAC,CAAE,WAAAzmE,EAAY,QAAAghE,CAAQ,EAAGjpF,IAAM,CACnE,MAAM6uF,KAAY,aAAUF,CAAO,EAInC,GAHAE,EAAU,UAAY,GAAGA,EAAU,WAAa,EAAE,IAAI7uF,CAAC,GACvD6uF,EAAU,QAAU5F,KAEhB,MAA6BhhE,EAAYjvB,CAAI,EAAG,CAClD,GAAIivB,EAAW,gBACb,OAAOA,EAAW,gBAAgBjvB,EAAM61F,CAAS,EAC5C,GAAI5mE,EAAW,wBAAyB,CAC7C,MAAM0mE,EAAU1mE,EAAW,wBAAwBjvB,EAAM61F,CAAS,EAClE,OAAKF,EAGE31F,IAAS,KAAuB,cACnC,MAAgBivB,EAAY0mE,EAAS,CAAE,QAASE,EAAU,OAAQ,CAAC,KACnE,MAAgB5mE,EAAY0mE,CAAO,EAJrC,MAKJ,KACE,OAEJ,KACE,QAAOH,EAA8Bx1F,EAAM40F,EAAkB3E,EAAShhE,EAAW,IAAI,CAEzF,CAAC,EAEkC,OAAO,IAAQ,EAElD,GAAI2mE,EAAiB,SAAW,EAEzB,OAAIA,EAAiB,SAAW,EAC9BA,EAAiB,CAAC,KAGpB,KAAM,GAAGA,CAAgB,EAAE,QAChC,KACE,CAACr4E,EAAK0B,IACC1B,EAAI,QAAUA,EAAI,OAAO,QAAW0B,EAAK,QAAU,KAAa,WAC5D1B,EAGL0B,EAAK,QAAU,KAAa,SAAW1B,EAAI,QAAU,KAAa,WAC7D,CACL,GAAGA,EACH,MAAO,KAAa,OACtB,EAGE0B,EAAK,OAASA,EAAK,QAAU,KAAa,KACrC1B,EAGF,CACL,GAAGA,EACH,KAAM,CAAC,GAAGA,EAAI,KAAM,GAAG0B,EAAK,IAAI,EAChC,MAAO,KAAa,IACtB,EAEF,CAAE,KAAM,CAAC,EAAG,MAAO,KAAa,UAAW,CAC7C,KACA,KAAS,CACX,CACF,C,8NCvLO,SAAS62E,EAAiBC,EAA+C,CAC9E,SAAO,KAAiB,EACrB,SAASA,CAAQ,EACjB,KAAMh0D,GACEA,GAAQ,KAAKi0D,CAAgB,CACrC,CACL,CAEO,SAASA,EAAiB9wE,EAAqB9e,EAA6B,CACjF,MAAM6vF,EAAc,CAAC/wE,EAAW9e,IAE1B8e,EAAI9e,EACC,GAGLA,EAAI8e,EACC,EAEF,EAGHgxE,EAASD,EAAY/wE,EAAE,QAAS9e,EAAE,OAAO,EAC/C,GAAI8vF,EACF,OAAOA,EAGT,MAAMC,EAAUF,EAAY/wE,EAAE,KAAM9e,EAAE,IAAI,EAC1C,OAAI+vF,GAIGF,EAAY/wE,EAAE,GAAI9e,EAAE,EAAE,CAC/B,C,uGCZO,MAAMgwF,KAAuB,MAClC,iCACA,MACE,CACE,gBAAAx1F,EACA,OAAA8gC,EACA,YAAAsb,EACA,QAAA9f,EACA,MAAAva,EACA,WAAAg6B,CACF,EAQA05C,IAC6B,CAC7B,MAAMC,KAAwB,MAA6B,iCAAkC,KAAY,CACvG,eAAgB11F,EAChB,MAAO,gCACT,CAAC,EAED,OAAO,QAAM,MACX01F,EAAsB11F,EAAiB8gC,EAAQsb,EAAa9f,EAASva,EAAOg6B,CAAU,CACxF,CACF,CACF,EAEa45C,KAAwB,MACnC,kCACA,MACE,CACE,gBAAA31F,EACA,OAAA8gC,CACF,EAIA,CAAE,SAAAtS,EAAU,SAAAD,CAAS,IACmB,CACxC,KAAM,CAAE,KAAMqnE,CAAW,EAAI,MAAMpnE,EACjCqnE,EAAA,EAAoB,UAAU,mBAAmB,SAAS,CAAE,gBAAA71F,CAAgB,CAAC,CAC/E,EAEA,GAAI,CAAC41F,GAAY,YACf,OAAO,KAGT,MAAME,KAA6B,MACjC,kCACA,KACA,CACE,eAAgB91F,EAChB,MAAO,iCACT,CACF,EAEA,OAAO,QAAM,MAAoB81F,EAA2BF,EAAW,YAAa90D,CAAM,CAAC,CAC7F,CACF,EAEO,SAASi1D,EAA6B,CAC3C,gBAAA/1F,EACA,WAAA+7C,EACA,OAAAjb,EACA,YAAAsb,EACA,QAAA9f,EACA,MAAAva,CACF,EAO+B,CAC7B,MAAO,OAAOyM,GAAa,CACzB,KAAM,CAAE,KAAMonE,CAAW,EAAI,MAAMpnE,EACjCqnE,EAAA,EAAoB,UAAU,mBAAmB,SAAS,CAAE,gBAAA71F,CAAgB,CAAC,CAC/E,EAEA,MAAM,QAAQ,IAAI,CAChBwuB,EAASgnE,EAAqB,CAAE,gBAAAx1F,EAAiB,WAAA+7C,EAAY,OAAAjb,EAAQ,YAAAsb,EAAa,QAAA9f,EAAS,MAAAva,CAAM,CAAC,CAAC,EACnG6zE,GAAY,YAAcpnE,EAASmnE,EAAsB,CAAE,gBAAA31F,CAAgB,CAAC,CAAC,EAAI,QAAQ,QAAQ,CACnG,CAAC,CACH,CACF,CASO,SAASg2F,EACdC,EAAQ,GACRnzF,EAA0C,CAAC,EACf,CAC5B,MAAO,OAAO0rB,EAAU0nE,IAAa,CACnC,MAAMC,EAAoB,YAAY,IAAI,EAE1C,MAAM,QAAQ,cACZ,MAAuB,EAAE,IAAI,MAAOn2F,GAAoB,CACtD,KAAM,CAAE,KAAM41F,CAAW,EAAI,MAAMpnE,EACjCqnE,EAAA,EAAoB,UAAU,mBAAmB,SAAS,CAAE,gBAAA71F,CAAgB,CAAC,CAC/E,EAEM,CAAE,UAAAmyE,EAAW,WAAAikB,CAAW,EAAIF,EAAS,EAAE,gBAE7C,GAAI,CAACN,EACH,OAGF,MAAMS,EAAiBJ,GAAS,CAAC9jB,EAAUnyE,CAAe,GAAG,QACvDs2F,GAAmBL,GAAS,CAACG,EAAWp2F,CAAe,GAAG,UAAY,EAAQ41F,GAAY,YAEhG,MAAM,QAAQ,WAAW,CACvBS,GAAkB7nE,EAASgnE,EAAqB,CAAE,gBAAAx1F,EAAiB,GAAG8C,CAAQ,CAAC,CAAC,EAChFwzF,GAAmB9nE,EAASmnE,EAAsB,CAAE,gBAAA31F,CAAgB,CAAC,CAAC,CACxE,CAAC,CACH,CAAC,CACH,KAEA,MAAe,kDAAmD,CAChE,WAAY,YAAY,IAAI,EAAIm2F,CAClC,CAAC,CACH,CACF,CAEO,SAASI,EACdN,EAAQ,GACRnzF,EAA0C,CAAC,EACf,CAC5B,MAAO,OAAO0rB,EAAU0nE,IAAa,CACnC,KAAM,CAAE,UAAA/jB,CAAU,EAAI+jB,EAAS,EAAE,mBACjC,MAAuB,EAAE,IAAKl2F,GAAoB,EAC5Ci2F,GAAS,CAAC9jB,EAAUnyE,CAAe,GAAG,UACxCwuB,EAASgnE,EAAqB,CAAE,gBAAAx1F,EAAiB,GAAG8C,CAAQ,CAAC,CAAC,CAElE,CAAC,CACH,CACF,CAEO,MAAM0zF,KAAgC,MAC3C,0CACCC,MAAiD,MAAoBvB,EAAiBuB,CAAO,CAAC,CACjG,EAWaC,KAAiC,MAC5C,iCACA,CACE,CAAE,uBAAAj3F,EAAwB,UAAAk3F,EAAW,UAAAC,EAAW,eAAAz0B,EAAgB,aAAA00B,EAAc,eAAAC,CAAe,EAC7FrB,OAEA,SACE,OACG,SAAY,CACX,MAAMsB,EAAe,MAAMtB,EACxB,SACCuB,EAAA,EAAgB,UAAU,6BAA6B,SAASv3F,EAAwB,CACtF,aAAc,EAChB,CAAC,CACH,EACC,OAAO,EAEJw3F,KAAsB,WAAQF,EAAa,mBAAmB,MAAK,WAAQA,EAAa,cAAc,EACtGG,EAAuB,KAAK,UAAUH,CAAY,IAAM,KAAK,UAAUJ,CAAS,EAEtF,GAAI,CAACM,GAAuBC,EAC1B,MAAM,IAAI,MACR,wHACF,EAWF,GATA,QAAM,MAAyBz3F,KAAwB,MAAgCm3F,CAAS,CAAC,EACjGnB,EAAS,SACPuB,EAAA,EAAgB,KAAK,eAAe,CAClC,4BACA,eACA,sBACA,UACF,CAAC,CACH,EACIH,EAAc,CAChB,MAAM/zF,EAAU,IAAI,gBAAgBg0F,GAAkB,EAAE,EACxD,KAAgB,QAAK,MAAWD,EAAcp3F,EAAwBqD,CAAO,CAAC,CAChF,CACF,GAAG,CACL,EACA,CACE,eAAAq/D,CACF,CACF,CACJ,EAEag1B,KAAyB,MACpC,mCACC13F,MACQ,SAAoB,MAAiBA,CAAsB,CAAC,CAEvE,EAEa23F,KAAiC,MAC5C,2CACA,MAAO33F,EAAgCg2F,OAC9B,SACL,OACG,SAAY,CACX,QAAM,MAAyBh2F,CAAsB,EACrD,MAAMg2F,EAAS,SAASuB,EAAA,EAAgB,KAAK,eAAe,CAAC,2BAA2B,CAAC,CAAC,CAC5F,GAAG,CACL,EACA,CACE,aAAc,6CACd,eAAgB,mCAClB,CACF,CAEJ,EAEaK,EAAiC,CAACC,EAAuBC,IAC7DD,EAAM,OAAQv+C,GAAuB,CAC1C,KAAM,CAAE,YAAAy+C,CAAY,KAAI,MAAaz+C,EAAMw+C,CAAa,EAClDE,EAAYD,KAAc,MAA4BA,CAAW,EAAI,KACrEE,KAAc,MAA4BH,CAAa,EAE7D,OAAOE,EAAYA,IAAc,GAAKA,EAAYC,EAAc,EAClE,CAAC,C,qFCvPH,QATmB,CAAC,CAAE,SAAAC,EAAW,EAAG,IAAa,CAC/C,MAAMC,EAAc,WAAWD,CAAQ,MACvC,SACE,OAAC,IAAG,CAAC,QAAQ,OAAO,WAAW,SAAS,UAAU,SAAS,eAAe,SAAS,WAAY,GAC7F,mBAAC,IAAkB,CAAC,KAAMC,CAAA,CAAa,EACzC,CAEJ,C,mFCkCYC,GAAAA,IACVA,EAAA,WAAa,cACbA,EAAA,MAAQ,QAFEA,IAAAA,GAAA,IAuDL,MAAMC,EAAuB,CAClC,CAAE,MAAO,cAAe,MAAO,aAAuB,EACtD,CAAE,MAAO,QAAS,MAAO,OAAkB,CAC7C,EAEMC,EAAoBz4F,IAAmB,CAAE,MAAOA,EAAO,MAAAA,CAAM,GAEtD04F,EAAW,KAAoBD,C,4LC1ErC,MAAME,KAAuB,MAAoC,wBAAwB,EAc1FC,EAAyB,CAAC,CAAE,aAAAC,EAAc,UAAAC,CAAU,IACjD,MAAO5pE,EAAUD,IAAa,CACnC,MAAM8pE,EAAc9pE,EAAS,EAAE,QAAQ,YAGjC+pE,EAAiBD,EACpB,IAAK3gE,GAAWA,EAAM,KAAOygE,GAAc,GAAKA,EAAezgE,CAAM,EACrE,OAAQA,GAAUA,EAAM,KAAO0gE,CAAS,EAErCG,EAAeF,EAAY,OAASC,EAAe,OACzD9pE,KACE,MAAyB,CACvB,mBAAoB,CAClB,YAAa8pE,EACb,MAAO/pE,EAAS,EAAE,QAAQ,iBAAoBgqE,CAChD,CACF,CAAC,CACH,CACF,EAGWC,EAAiB,CAC5BC,EACAC,EACAxE,EACArlE,EACA8pE,IAEO,MAAOnqE,EAAUD,IAAa,CACnC,MAAMqqE,EAAYD,EACd,CAAE,mBAAoB,GAAO,qBAAsB,GAAO,YAAa,EAAM,EAC7E,CACE,mBAAoB,CAACpqE,EAAS,EAAE,QAAQ,uBACxC,qBAAsB,CAACA,EAAS,EAAE,QAAQ,oCAC5C,EACE,CAAE,uBAAAsqE,EAAwB,cAAAC,CAAc,EAAI,QAAM,MAAiB,CACvE,cAAAL,EACA,WAAY,CAAE,IAAKC,EAAe,KAAMxE,CAAe,EACvD,QAAArlE,EACA,QAAS,GACT,UAAA+pE,CACF,CAAC,EACID,IACCE,GACFrqE,KAAS,MAA6B,CAAC,EAErCsqE,GACFtqE,KAAS,KAA+B,CAAC,EAG/C,EAGWuqE,EAAkB,CAACpsE,EAAYqsE,IACnC,MAAOxqE,EAAUD,IAAa,CACnC,MAAM4pE,EAAe,QAAM,MAA2BxrE,EAAIqsE,CAAO,EACjExqE,EAAS0pE,EAAuB,CAAE,aAAAC,CAAa,CAAC,CAAC,CACnD,EAGWc,EAAqB,CAACtsE,EAAYusE,IACtC,MAAO1qE,GAAa,CACzB,MAAM2pE,EAAe,QAAM,MAA2BxrE,EAAIusE,CAAO,EACjE1qE,EAAS0pE,EAAuB,CAAE,aAAAC,CAAa,CAAC,CAAC,CACnD,EAGWgB,EAAqBxsE,GACzB,MAAO6B,GAAa,CACzB,MAAM4pE,EAAY,QAAM,MAAyBzrE,CAAE,EACnD6B,EAAS0pE,EAAuB,CAAE,UAAAE,CAAU,CAAC,CAAC,CAChD,EAGWgB,EAAoB,IACxB,MAAO5qE,GAAa,CACzB,QAAM,MAAyB,EAC/BA,KAAS,MAAyB,CAAE,mBAAoB,CAAE,YAAa,CAAC,EAAG,MAAO,CAAE,CAAE,CAAC,CAAC,EACxFA,KAAS,MAAyB,CAAE,mBAAoB,CAAE,YAAa,CAAC,EAAG,MAAO,CAAE,CAAE,CAAC,CAAC,CAC1F,EAGW6qE,EAAkB,IACtB,MAAO7qE,EAAUD,IAAa,CACnC,MAAM+qE,EAAU/qE,EAAS,EAAE,QAAQ,yBACnC,GAAI+qE,EAAS,CACX,MAAMC,EAAqB,QAAM,MAAeD,CAAO,EACvD9qE,KAAS,MAAyB,CAAE,mBAAA+qE,CAAmB,CAAC,CAAC,CAC3D,CACF,EAGWC,EAAsB,IAC1B,MAAOhrE,EAAUD,IAAa,CACnC,MAAMkrE,EAAiBlrE,EAAS,EAAE,QAAQ,yBACpCmrE,EAAqBnrE,EAAS,EAAE,QAAQ,YAC9C,GAAIkrE,GAAkBC,EAAoB,CACxC,MAAMC,EAAc,CAAE,GAAGF,EAAgB,MAAOA,GAAgB,MAAQ,GAAK,CAAE,EACzEG,EAAkB,QAAM,MAAeD,CAAW,EAClDtB,EAAc,CAAC,GAAGqB,EAAoB,GAAGE,EAAgB,WAAW,EAC1EprE,KAAS,MAAsC,CAAE,QAASmrE,CAAY,CAAC,CAAC,EACxEnrE,KAAS,MAAyB,CAAE,mBAAoB,CAAE,YAAA6pE,EAAa,MAAOuB,EAAgB,KAAM,CAAE,CAAC,CAAC,CAC1G,CACF,EAGWC,EAA0B,IAC9B,MAAOrrE,GAAa,CACzBA,KAAS,MAAsC,CAAE,QAAS,MAAU,CAAC,CAAC,EACtEA,KAAS,MAAyB,CAAE,mBAAoB,CAAE,YAAa,CAAC,EAAG,MAAO,CAAE,CAAE,CAAC,CAAC,CAC1F,EAOWsrE,EAAkB,IACtB,MAAOtrE,EAAUD,IAAa,CACnC,IAAIwrE,EAAWxrE,EAAS,EAAE,QAAQ,oBAC7BwrE,IACHA,EAAW,QAAM,MAAuB,EACxCvrE,KAAS,MAAiCurE,CAAQ,CAAC,EAEvD,EAGWC,EAAyBD,GAC7B,MAAOvrE,GAAa,CACzBA,KAAS,MAAiCurE,CAAQ,CAAC,EACnD,QAAM,MAA0BA,CAAQ,CAC1C,EAMWE,EAA8BX,GAClC,MAAO9qE,EAAUD,IAAa,CACnC,MAAMC,KAAS,MAAsC,CAAE,QAAS,CAAE,GAAG8qE,CAAQ,CAAE,CAAC,CAAC,EACjF,MAAMY,EAAkB3rE,EAAS,EAAE,QAAQ,uBACvC,MAAkB,EAAE,8BACtB,MAAMC,EACJwrE,EAAsB,CACpB,GAAGE,EACH,0BAA2BZ,EAAQ,iBACrC,CAAC,CACH,CAEJ,C,oHCzLK,MAAMa,EAAW,CAAC,CAAE,MAAAtoE,EAAO,MAAA1oB,EAAO,QAAAkN,EAAS,WAAA+jF,CAAW,IAAa,CACxE,KAAM,CAAE,MAAAv5F,CAAM,KAAI,MAAqBsI,CAAK,EACtCE,KAAS,MAAWuD,CAAS,EAE7BytF,EAAaxoE,IAAU,MAAK,OAAC,QAAK,MAAO,CAAE,WAAY,KAAM,EAAI,aAAIA,CAAK,IAAI,EAEpF,SACE,QAAC,QACC,UAAWxoB,EAAO,MAClB,MAAO,CACL,gBAAiBxI,CACnB,EAEC,UAAAu5F,MAAc,OAAC,IAAI,CAAC,QAAA/jF,EAAkB,KAAK,OAAQ,GACnDlN,EAAM,IAAEkxF,CAAA,EACX,CAEJ,EAEaztF,EAAanF,IAA0B,CAClD,SAAO,OAAI,CACT,GAAGA,EAAM,WAAW,UACpB,gBAAiBA,EAAM,GAAG,QAAQ,MAClC,aAAcA,EAAM,MAAM,OAAO,GACjC,MAAOA,EAAM,GAAG,QAAQ,MACxB,QAAS,eACT,OAAQ,OACR,WAAY,OACZ,QAASA,EAAM,QAAQ,EAAG,GAAI,EAC9B,cAAe,WACf,WAAY,SACZ,UAAW,CACT,QAAS,GACX,CACF,CAAC,CACH,E,8OCzCO,MAAM6yF,EAA6B,KAA4B,CACrE,KAAM,kBACN,KAAMC,EAA2B,CAClC,GAgBaA,EAA6B,KAA4B,CACrE,MAAOC,EAAqB,EAC5B,OAAQ,GACR,KAAM,GACN,UAAW,GACX,KAAM,GACN,QAAS,GACT,UAAWC,CACZ,GAcaD,EAAuB,KAAsB,CACzD,KAAM,YACN,MAAO,GACP,QAAS,KACT,KAAM,CAAC,CACR,GASaE,EAA+B,KAA8B,CACzE,QAAS,GACT,IAAK,CAAC,CACP,GAIaD,EAA2B,iBAO3BE,EAA6B,IAA4B,MAMzDC,EAAiB,IAAgBC,EAAiB,EAOlDA,EAAmB,KAAkB,CACjD,KAAM,QACN,KAAMC,EAAiB,CACxB,GAYaA,EAAmB,KAAkB,CACjD,GAAI,EACJ,MAAO,GACP,YAAa,GACb,MAAO,CAAC,EACR,KAAMC,EAAsB,EAC5B,UAAWC,EAAqB,CACjC,GAQaC,EAAkB,KAAiB,CAC/C,MAAO,GACP,IAAK,EACN,GAOaF,EAAwB,KAAuB,CAC3D,KAAM,aACN,KAAMG,EAAsB,CAC7B,GAQaA,EAAwB,KAAuB,CAC3D,QAAS,CAAC,EACV,gBAAiB,CAAC,EAClB,aAAcC,EAAwB,CACvC,GAOaC,EAAwB,KAAuB,CAC3D,KAAM,aACN,KAAMC,EAAsB,CAC7B,GAQaA,EAAwB,KAAuB,CAC3D,MAAOb,EAAqB,EAC5B,MAAO,GACP,OAAQ,EACT,GAQac,EAA4B,KAA2B,CACnE,KAAM,GACN,KAAMC,EAA6B,CACpC,GAmBaA,EAA+B,KAA8B,CACzE,GAAI,GACJ,QAAS,CAAC,CACX,GAWaC,EAAuB,KAAsB,CACzD,GAAI,EACL,GAMaC,EAAmB,IAAkB,SAarCN,EAA0B,KAAyB,CAChE,GAUaH,EAAuB,KAAsB,CACzD,KAAM,YACN,MAAO,GACP,QAAS,GACT,KAAMU,EAAqB,CAC5B,GAQaA,EAAuB,KAAsB,CACzD,QAAS,CAAC,EACV,YAAaC,EAAyB,CACvC,GAeaA,EAA2B,KAA0B,CACjE,SAAUC,EAAmB,EAC7B,UAAW,CAAC,CACb,GA4DaA,EAAqB,KAAoB,CACtD,GAIaC,EAAsB,IAAqBC,EAAgB,EAU3DA,EAAkB,KAAiB,CAC/C,KAAM,QACN,QAAS,CAAC,CACX,GASaC,EAAqB,IAAoB,QAczCC,EAA4B,KAA2B,CACpE,GAiBaC,EAAkB,KAAiB,CAC/C,KAAM,QACN,QAAS,CACT,KAAM,EACN,GAAI,EACJ,OAAQD,EAA0B,CACnC,CACA,GAeaE,EAAkB,KAAiB,CAC/C,KAAM,QACN,QAAS,CACT,QAAS,GACT,OAAQF,EAA0B,CACnC,CACA,GAeaG,EAAyB,KAAwB,CAC7D,KAAM,UACN,QAAS,CACT,MAAO,OACP,OAAQH,EAA0B,CACnC,CACA,GAKaI,EAA2B,IAA0B,OAOrDC,EAA0B,KAAyB,CAC/D,KAAM,WACN,MAAO,CAAC,CACT,GAIaC,EAAwB,IAAuB,WAO/CC,EAAmB,KAAkB,CACjD,MAAO,EACP,MAAO,EACR,GAYaC,EAAoB,KAAmB,CACnD,KAAM,YACP,GAsBaC,EAA0B,IAAyB,aAKnDC,EAAgC,IAA+B,MAe/DC,EAAgB,KAAe,CAC3C,KAAM,QACN,MAAO,EACR,GAIaC,EAAoB,IAAmB,QAavCC,EAAsB,KAAqB,CACvD,OAAQ,MACR,IAAK,EACN,GAIaC,EAA2B,IAA0B,MAcrDC,GAAyB,KAAwB,CAC7D,OAAQ,MACR,IAAK,GACL,cAAe,EAChB,GAQaC,EAAwB,KAAuB,CAC3D,IAAK,GACL,KAAM,GACN,KAAMC,EACP,GAGaA,GAAqB,SAOrBC,GAA4B,KAA2B,CACnE,GAAI,EACL,GAOaC,EAA0B,KAAyB,CAC/D,KAAM,eACN,KAAMC,EAA4B,CACnC,GAUaA,EAA8B,KAA6B,CACvE,GAAI,EACJ,MAAO,GACP,aAAcC,EAAuB,CACtC,GAYaA,EAAyB,KAAwB,CAC7D,KAAM,GACN,IAAK,EACN,GAOaC,EAAwB,KAAuB,CAC3D,KAAM,aACN,KAAMC,GAAsB,CAC7B,GAMaA,GAAwB,KAAuB,CAC3D,MAAO,CAAC,CACT,GAOaC,GAA4B,KAA2B,CACnE,KAAM,iBACN,KAAMC,GAA0B,CACjC,GAYaA,GAA4B,KAA2B,CACnE,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,EACR,QAASC,EAAwB,CAClC,GAOaA,EAA0B,KAAyB,CAC/D,KAAM,mBACN,KAAM,EACP,GASaC,GAAuB,KAAsB,CACzD,KAAMC,GACN,MAAO,EACR,GAGaA,GAAa,WAObC,GAAwB,KAAuB,CAC3D,KAAM,aACN,KAAMC,GAAsB,CAC7B,GAMaA,GAAwB,KAAuB,CAC3D,KAAM,CAAC,CACR,GAOaC,GAA2B,KAA0B,CACjE,KAAM,gBACN,KAAMC,GAAyB,CAChC,GAYaA,GAA2B,KAA0B,CACjE,OAAQV,EAAsB,CAC/B,GAOaW,GAAuC,KAAsC,CACzF,KAAM,4BACN,KAAMC,GAAqC,CAC5C,GAQaA,GAAuC,KAAsC,CACzF,WAAY,OACZ,UAAW,MACX,MAAO,CAAC,CACT,GAOaC,GAA0C,KAAyC,CAC/F,KAAM,+BACN,KAAMC,GAAwC,CAC/C,GAQaA,GAA0C,KAAyC,CAC/F,SAAU,GACV,SAAU,SACV,MAAO,EACR,GAOaC,GAAsC,KAAqC,CACvF,KAAM,2BACN,KAAMC,GAAoC,CAC3C,GAMaA,GAAsC,KAAqC,CACvF,MAAO,EACR,GAOaC,GAA+C,KAA8C,CACzG,KAAM,oCACN,KAAMC,GAA6C,CACpD,GAMaA,GAA+C,KAA8C,CACzG,MAAO,EACR,GAOaC,GAA0B,KAAyB,CAC/D,KAAMb,GACN,MAAO,EACR,GAOac,GAA4B,KAA2B,CACnE,KAAM,iBACN,KAAMC,GAA0B,CACjC,GAYaA,GAA4B,KAA2B,CACnE,eAAgB,EAChB,gBAAiB,WACjB,cAAe,WACf,WAAY,GACZ,MAAO,CAAC,CACT,GAOaC,GAAgC,KAA+B,CAC3E,KAAM,qBACN,KAAMC,GAA8B,CACrC,GAQaA,GAAgC,KAA+B,CAC3E,QAASnB,EAAwB,CAClC,GAOaoB,GAA+B,KAA8B,CACzE,KAAMlB,GACN,MAAO,EACR,GAOamB,GAAwB,KAAuB,CAC3D,KAAM,aACN,KAAMC,GAAsB,CAC7B,GAMaA,GAAwB,KAAuB,CAC3D,KAAM,CAAC,CACR,GAOaC,GAA2B,KAA0B,CACjE,KAAM,gBACN,KAAMC,GAAyB,CAChC,GASaA,GAA2B,KAA0B,CACjE,OAAQ5B,EAAsB,CAC/B,GAOa6B,GAA0B,KAAyB,CAC/D,KAAMvB,GACN,MAAO,EACR,GA6BawB,GAAuB,KAAsB,CACzD,MAAO,GACP,KAAM,OACN,KAAM,GACN,QAAS,GACT,KAAM,CAAC,EACP,WAAY,GACZ,YAAa,GACb,YAAa,GACb,SAAU,GACV,UAAWC,EACZ,GAKaC,GAA2B,IAA0B,OAIrDD,GAAyB,iBAkCzBE,GAA0B,KAAyB,CAC/D,SAAU,UACV,KAAM,SACN,GAAI,MACJ,YAAa,GACb,qBAAsB,CACvB,KACA,MACA,MACA,KACA,KACA,MACA,MACA,KACA,KACA,IACA,EACC,eAAgB,GAChB,qBAAsB,CACvB,GAQaC,GAAyB,KAAwB,CAC7D,QAAS,eACT,KAAM,SACN,GAAI,KACL,GAIaC,GAAsB,IAAqBC,GAAyB,EAQpEA,GAA2B,KAA0B,CACjE,KAAM,gBACN,KAAMC,GAAyB,CAChC,GAyBaA,GAA2B,KAA0B,CACjE,KAAM,GACN,QAAS,CAAE,KAAM,GAAI,MAAO,EAAI,EAChC,KAAM,WACN,QAAS,QACT,YAAa,GACb,MAAOnF,EAAqB,EAC5B,MAAO,GACP,KAAM,WACN,QAAS,CAAC,EACV,MAAO,GACP,WAAY,GACZ,iBAAkB,EACnB,GAYaoF,GAAwB,KAAuB,CAC3D,KAAM,GACN,MAAO,EACR,GAMaC,GAAsB,IAAqB,WAQ3CC,GAAyB,IAAwB,QAgBjDC,GAAsB,IAAqB,WAQ3CC,GAA0B,KAAyB,CAC/D,KAAM,eACN,KAAMC,GAAwB,CAC/B,GAaaA,GAA0B,KAAyB,CAC/D,KAAM,GACN,QAAS,CAAE,KAAM,GAAI,MAAO,EAAI,EAChC,MAAO,GACP,KAAM,WACN,YAAa,EACd,GAQaC,GAA8B,KAA6B,CACvE,KAAM,mBACN,KAAMC,GAA4B,CACnC,GAaaA,GAA8B,KAA6B,CACvE,KAAM,GACN,MAAO,GACP,QAAS,CAAE,KAAM,GAAI,MAAO,EAAI,EAChC,KAAM,WACN,YAAa,EACd,GAQaC,GAAgC,KAA+B,CAC3E,KAAM,qBACN,KAAMC,GAA8B,CACrC,GAoBaA,GAAgC,KAA+B,CAC3E,KAAM,GACN,SAAU,GACV,QAAS,QACT,MAAO,GACP,QAAS,CAAE,KAAM,GAAI,MAAO,EAAI,EAChC,QAAS,CAAC,EACV,MAAO,GACP,WAAY,GACZ,KAAM,WACN,YAAa,GACb,iBAAkB,EACnB,GAQaC,GAA8B,KAA6B,CACvE,KAAM,mBACN,KAAMC,GAA4B,CACnC,GAkBaA,GAA8B,KAA6B,CACvE,KAAM,GACN,MAAO,GACP,QAAS,CAAE,KAAM,GAAI,MAAO,EAAI,EAChC,QAAS,CAAC,EACV,KAAM,GACN,SAAU,GACV,WAAY,EACZ,QAAS,QACT,KAAM,WACN,YAAa,EACd,GAQaC,GAA4B,KAA2B,CACnE,KAAM,iBACN,KAAMC,GAA0B,CACjC,GAkBaA,GAA4B,KAA2B,CACnE,KAAM,GACN,MAAO,GACP,QAASb,GAAsB,EAC/B,QAAS,CAAC,EACV,MAAO,GACP,WAAY,GACZ,KAAM,WACN,YAAa,GACb,iBAAkB,EACnB,GAYac,GAA6B,KAA4B,CACrE,KAAM,kBACN,MAAO,GACP,KAAMC,GAA2B,CAClC,GAeaA,GAA6B,KAA4B,CACrE,KAAM,GACN,QAAS,CAAE,KAAM,GAAI,MAAO,EAAI,EAChC,QAAS,CAAC,EACV,MAAO,GACP,KAAM,WACN,YAAa,EACd,GAYaC,GAA2B,KAA0B,CACjE,KAAM,gBACN,MAAO,GACP,KAAMC,GAAyB,CAChC,GAeaA,GAA2B,KAA0B,CACjE,KAAM,GACN,YAAa,CAAC,EACd,QAAS,CAAC,EACV,YAAa,CAAC,EACd,KAAM,WACN,YAAa,GACb,iBAAkB,EACnB,GAgBaC,GAA+B,KAA8B,CACzE,IAAK,GACL,SAAU,GACV,MAAO,GACP,OAAQC,EACT,GAGaA,GAAe,YAUfC,GAAyB,KAAwB,CAC7D,KAAM,EACP,GAOaC,GAA4B,KAA2B,CACnE,KAAM,iBACN,KAAMC,GAA0B,CACjC,GAaaA,GAA4B,KAA2B,CACnE,KAAM,GACN,QAAS,QACT,aAAc,OACd,cAAe,QACf,KAAM,WACN,YAAa,EACd,GAmCaC,GAAc,KAAa,CACvC,YAAa,CAAC,EACd,WAAY,MACZ,SAAU,GACV,SAAU,CAAC,EACX,OAAQ7D,EAAsB,EAC9B,MAAO,CAAC,EACR,QAAS,GACT,KAAM,CAAC,EACP,aAAciC,GAAwB,EACtC,MAAO,GACP,UAAW,CAAC,CACb,E,uFCp/CO,MAAM6B,KAAW,MAFC,uBACE,UACiC,EAE/Cp/B,KAAM,MAAU,CAC3B,YAAa,sBACb,aAAWq/B,EAAA,GAAgB,CACzB,QAASD,CACX,CAAC,EACD,UAAW,KAAO,CAAC,EACrB,CAAC,ECdYE,EAAc,CAAC,gBAAiB,UAAU,EACjDC,EAAiBv/B,EACpB,iBAAiB,CAChB,YAAAs/B,CACF,CAAC,EACA,gBAAgB,CACf,UAAYE,IAAW,CACrB,gBAAiBA,EAAM,MAAyD,CAC9E,MAAO,KAAO,CAAE,IAAK,sCAAuC,GAC5D,aAAc,CAAC,eAAe,CAChC,CAAC,EACD,aAAcA,EAAM,MAAmD,CACrE,MAAQC,IAAc,CACpB,IAAK,aACL,OAAQ,CACN,OAAQA,EAAS,OACjB,oBAAqBA,EAAS,oBAC9B,SAAUA,EAAS,SACnB,cAAeA,EAAS,cACxB,cAAeA,EAAS,cACxB,MAAOA,EAAS,MAChB,gBAAiBA,EAAS,gBAC1B,qBAAsBA,EAAS,qBAC/B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,eACzB,MAAOA,EAAS,KAClB,CACF,GACA,aAAc,CAAC,UAAU,CAC3B,CAAC,EACD,eAAgBD,EAAM,SAA0D,CAC9E,MAAQC,IAAc,CACpB,IAAK,aACL,OAAQ,OACR,KAAMA,EAAS,SACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,UAAU,CAC9B,CAAC,EACD,yBAA0BD,EAAM,SAA8E,CAC5G,MAAQC,IAAc,CACpB,IAAK,aACL,OAAQ,SACR,OAAQ,CACN,OAAQA,EAAS,OACjB,SAAUA,EAAS,SACnB,OAAQA,EAAS,OACjB,cAAeA,EAAS,cACxB,mBAAoBA,EAAS,mBAC7B,iDAAkDA,EAAS,iDAC3D,cAAeA,EAAS,cACxB,MAAOA,EAAS,MAChB,iBAAkBA,EAAS,iBAC3B,kBAAmBA,EAAS,kBAC5B,gBAAiBA,EAAS,gBAC1B,qBAAsBA,EAAS,qBAC/B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,cAC3B,CACF,GACA,gBAAiB,CAAC,UAAU,CAC9B,CAAC,EACD,YAAaD,EAAM,MAAiD,CAClE,MAAQC,IAAc,CACpB,IAAK,cAAcA,EAAS,IAAI,GAChC,OAAQ,CACN,OAAQA,EAAS,MACnB,CACF,GACA,aAAc,CAAC,UAAU,CAC3B,CAAC,EACD,gBAAiBD,EAAM,SAA4D,CACjF,MAAQC,IAAc,CACpB,IAAK,cAAcA,EAAS,IAAI,GAChC,OAAQ,MACR,KAAMA,EAAS,SACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,UAAU,CAC9B,CAAC,EACD,eAAgBD,EAAM,SAA0D,CAC9E,MAAQC,IAAc,CACpB,IAAK,cAAcA,EAAS,IAAI,GAChC,OAAQ,SACR,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,mBAAoBA,EAAS,mBAC7B,iDAAkDA,EAAS,iDAC3D,iBAAkBA,EAAS,iBAC3B,kBAAmBA,EAAS,iBAC9B,CACF,GACA,gBAAiB,CAAC,UAAU,CAC9B,CAAC,EACD,eAAgBD,EAAM,SAA0D,CAC9E,MAAQC,IAAc,CACpB,IAAK,cAAcA,EAAS,IAAI,GAChC,OAAQ,QACR,KAAMA,EAAS,MACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,gBAC1B,MAAOA,EAAS,KAClB,CACF,GACA,gBAAiB,CAAC,UAAU,CAC9B,CAAC,EACD,kBAAmBD,EAAM,MAA6D,CACpF,MAAQC,IAAc,CACpB,IAAK,cAAcA,EAAS,IAAI,UAChC,OAAQ,CACN,OAAQA,EAAS,MACnB,CACF,GACA,aAAc,CAAC,UAAU,CAC3B,CAAC,EACD,sBAAuBD,EAAM,SAAwE,CACnG,MAAQC,IAAc,CACpB,IAAK,cAAcA,EAAS,IAAI,UAChC,OAAQ,MACR,KAAMA,EAAS,SACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,UAAU,CAC9B,CAAC,EACD,qBAAsBD,EAAM,SAAsE,CAChG,MAAQC,IAAc,CACpB,IAAK,cAAcA,EAAS,IAAI,UAChC,OAAQ,QACR,KAAMA,EAAS,MACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,gBAC1B,MAAOA,EAAS,KAClB,CACF,GACA,gBAAiB,CAAC,UAAU,CAC9B,CAAC,CACH,GACA,iBAAkB,EACpB,CAAC,EAqbU,CACX,wBAAAC,EACA,4BAAAC,EACA,qBAAAC,EACA,yBAAAC,EACA,0BAAAC,EACA,oCAAAC,EACA,oBAAAC,EACA,wBAAAC,EACA,2BAAAC,EACA,0BAAAC,EACA,0BAAAC,EACA,0BAAAC,EACA,8BAAAC,EACA,iCAAAC,EACA,gCAAAC,CACF,EAAIjB,EClmBSkB,EAAe,EAAO,iBAAiB,CAAC,CAAC,C,2ECE/C,SAASC,EAAiB3pD,EAAwC,CACvE,SAAO,WAAQ,OAAM,MAAiBA,CAAI,EAAG,CAACA,CAAI,CAAC,CACrD,C,0KCmCO,MAAM4pD,EAAmB,2BAEnBC,EAAkB,CAAC,CAC9B,WAAAC,EAAa,EACb,SAAAC,EAAW,GACX,YAAAC,EAAc,GACd,MAAAzjG,EACA,KAAA8vE,EAAO,OACP,SAAA5iE,EACA,cAAAw2F,EACA,gBAAAC,EACA,gBAAAC,EACA,GAAAv2E,EACA,YAAA9iB,EAGA,GAAGoG,CACL,IAAa,CACX,MAAM5G,KAAS,MAAWuD,CAAS,EAC7Bu2F,EAAalzF,EAAU,YAAc,GAE3C,SACE,OAAC,MACC,GAAA0c,EACA,eAAc,IACd,OAAM,IACN,WACEw2E,GAAc,CACZ,aAAW,OAAC,IAAI,CAAC,KAAK,QAAQ,UAAW95F,EAAO,UAAW,CAC7D,EAEF,aAAW,SAAG,MAAW,EAAE+lE,CAAI,EAAG/lE,EAAO,KAAK,EAC9C,WAAY,CACV,SAAO,MAAGA,EAAO,OAAQs5F,CAAgB,CAC3C,EACA,aAAc1yF,EAAU,WAAa,UAAY,MAAiB,EAClE,SAAAzD,EACA,aAAc,KAAO,CACnB,cAAAw2F,EACA,gBAAAC,EACA,gBAAAC,CACF,GACA,OAAQE,EAAeN,EAAUC,CAAW,EAC5C,WAAAF,EACA,SAAWvjG,GAAU,CACnB,MAAI,MAAgBA,CAAK,EACvB,OAAI2Q,EAAU,WACLA,EAAU,SAAS3Q,KAAQ,MAASA,CAAK,EAAI,MAAS,EAEtD2Q,EAAU,YAAS,MAAS3Q,CAAK,CAAC,CAG/C,EACA,OAAO,OACP,YAAAuK,EACA,QAAS,GACT,YAAa,GACb,cAAY,OAACw5F,EAAA,CAAM,aAAch6F,EAAO,aAAc,EACtD,MAAO/J,MAAQ,MAAiBA,CAAK,CAAI,CAC3C,CAEJ,EAEA,SAAS8jG,EAAeN,EAAW,GAAMC,EAAc,GAAO,CAC5D,MAAMO,EAAYR,EAAW,MAAQ,GAC/BS,EAAcR,EAAc,MAAQ,GAC1C,OAAOO,EAAY,KAAOC,CAC5B,CAMA,MAAMF,EAAQ,CAAC,CAAE,aAAAG,EAAe,EAAG,OAE/B,OAAC,OAAI,UAAWA,EACd,mBAAC,IAAI,CAAC,KAAK,YAAa,GAC1B,EAIE52F,EAAanF,GAAyB,CAC1C,MAAMg8F,EAAUh8F,EAAM,WAAW,MAAM,WACjCi8F,EAAgBj8F,EAAM,OAAO,OAAO,MACpCk8F,EAAel8F,EAAM,MAAM,OAAO,QAClCwrF,EAAcxrF,EAAM,WAAW,MAAM,YAE3C,MAAO,CACL,gBAAc,OAAI,CAChB,SAAU,WACV,IAAK,MACL,UAAW,mBACX,QAAS,eACT,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,EACD,aAAW,OAAI,CACb,MAAOA,EAAM,OAAO,KAAK,UAEzB,UAAW,CACT,MAAOA,EAAM,OAAO,KAAK,WAC3B,CACF,CAAC,EACD,UAAQ,OAAI,CACV,uBAAwB,CACtB,UAAW,OACX,OAAQA,EAAM,OAAO,MACvB,EACA,+BAAgC,CAC9B,SAAUA,EAAM,WAAW,aAC3B,gBAAiBg8F,EACjB,MAAOh8F,EAAM,OAAO,KAAK,UACzB,QAAS,QACT,UAAW,OACX,eAAgB,OAChB,MAAOA,EAAM,QAAQ,CAAC,EACtB,GAAI,CACF,aAAcA,EAAM,QAAQ,CAAC,EAC7B,MAAO,OACP,uCAAwC,CACtC,gBAAiB,UACjB,OAAQ,aAAaA,EAAM,OAAO,OAAO,cAAc,GACvD,aAAAk8F,EACA,MAAOl8F,EAAM,OAAO,KAAK,OAC3B,EAEA,UAAW,CACT,WAAYi8F,EACZ,MAAOj8F,EAAM,OAAO,KAAK,OAC3B,EAEA,uCAAwC,CACtC,MAAOA,EAAM,OAAO,OAAO,YAC7B,CACF,EAEA,mCAAoC,CAClC,MAAO,SACT,EAEA,uBAAwB,CACtB,YAAa,aAAawrF,CAAW,EACvC,CACF,EAEA,mBAAoB,CAClB,UAAWxrF,EAAM,QAAQ,GACzB,gBAAiBg8F,EACjB,YAAAxQ,EACA,aAAA0Q,EACA,SAAU,QACZ,CACF,CAAC,EACD,SAAO,OAAI,CACT,sBAAuB,CACrB,OAAQ,OAER,sBAAoB,kBAAel8F,CAAK,CAC1C,EAEA,uBAAwB,CACtB,mBAAoB,CAClB,gBAAiBA,EAAM,OAAO,OAAO,mBACrC,MAAOA,EAAM,OAAO,OAAO,aAC3B,OAAQ,aAAaA,EAAM,OAAO,OAAO,kBAAkB,GAC3D,UAAW,CACT,UAAW,MACb,CACF,CACF,EAEA,mBAAoB,CAClB,gBAAiBg8F,EACjB,aAAAE,EACA,YAAA1Q,EACA,YAAa,QACb,YAAa,MACb,MAAOxrF,EAAM,OAAO,KAAK,QACzB,OAAQA,EAAM,QAAQ,CAAC,EACvB,QAASA,EAAM,QAAQ,EAAG,CAAC,EAE3B,MAAO,CACL,MAAO,QACP,gBAAiB,QACjB,UAAW,CACT,QAAS,MACX,EAEA,iBAAkB,CAChB,MAAOA,EAAM,OAAO,KAAK,QAC3B,CACF,CACF,EAEA,mBAAoB,CAClB,WAAY,SACZ,QAAS,OACT,eAAgB,QAChB,SAAU,UACZ,CACF,CAAC,CACH,CACF,C,2TCxOO,SAASm8F,EAAoBtqE,GAAuC,CACzE,MAAO,aAAcA,EACvB,C,eCNO,MAAMuqE,CAAwE,CAGnF,YAAoBC,GAAgC,CAAhC,eAAAA,GAFpB,KAAgB,2BAA6B,EAEQ,CAE9C,oBAAsD,CAC3D,MAAO,CAAC,CACV,CAEO,wBAAuD,CAC5D,MAAO,CAAE,YAAU,KAAE,uCAAwC,SAAS,EAAG,KAAM,SAAU,aAAc,EAAG,CAC5G,CAEO,iBAAkB,CACvB,KAAU,QACR,IAAI,KAAsB,CACxB,SAAO,KAAE,iDAAkD,mBAAmB,EAC9E,QAAM,KACJ,6DACA,iDACF,EACA,UAAW,IAAM,KAAK,SAAS,CACjC,CAAC,CACH,CACF,CAEO,UAAW,CAChB,KAAK,UAAU,QAASzvF,IAASA,GAAK,SAAS,CAAC,CAClD,CACF,C,eC5BO,MAAM0vF,CAAiB,CAM5B,YAAYp+F,GAAsD,CAFlE,KAAQ,cAAgB,GAGtB,KAAK,gBAAkB,IAAI,IAAIA,EAAM,EACrC,KAAK,kBAAoBA,GAAO,OAAS,EAErC,KAAK,mBACP,KAAK,SAAW,KAAK,cAAc,EAEvC,CAEO,kBAAmB,CACxB,KAAK,cAAgB,EACvB,CAEO,cAAe,CACpB,OAAO,KAAK,aACd,CAEQ,eAAgB,CACtB,MAAMA,GAAS,KAAK,gBAAgB,OAAO,EACrCq+F,GAAYr+F,GAAO,KAAK,EAAE,OAAO,QAAQ,EAAE,YAAY,KAE7D,GAAI,CAACq+F,GACH,MAAO,GAGT,QAAS1qE,MAAO3zB,IAAU,CAAC,EACzB,GAAI2zB,GAAI,QAAQ,EAAE,YAAY,OAAS0qE,GACrC,MAAO,GAIX,MAAO,EACT,CAEO,SAASr3E,GAAY,CAC1B,OAAO,KAAK,gBAAgB,IAAIA,EAAE,CACpC,CAEO,YAAYA,GAAY,CAC7B,KAAK,gBAAgB,OAAOA,EAAE,EAE1B,KAAK,gBAAgB,KAAO,IAC9B,KAAK,SAAW,OAChB,KAAK,kBAAoB,GAE7B,CAEO,kBACLA,GACA2M,GACAlvB,GAC0G,CAC1G,MAAMlJ,GAAMo4B,GAAI,OAAO,EACvB,IAAI2qE,GAAe,CAAC,CAAE,GAAAt3E,EAAG,CAAC,EACtBlf,GAA0D,CAAC,CAACkf,GAAIzrB,EAAG,CAAC,EAExE,MAAMgjG,GAAU,KAAK,oBAAoB,GAAK,CAAC,EACzCzmD,GAAQymD,GAAQ,IAAI,CAAC,CAACl9E,EAAG,KAAO,CAAE,GAAIA,EAAI,EAAE,EAElD,OAAI5c,KACFqD,GAAY,CAAC,CAACkf,GAAIzrB,EAAG,EAAG,GAAGgjG,EAAO,EAClCD,GAAe,CAAC,CAAE,GAAAt3E,EAAG,EAAG,GAAG8wB,EAAK,GAG3B,CAAE,UAAAhwC,GAAW,aAAAw2F,EAAa,CACnC,CAEO,uBAAuBt3E,GAG5B,CACA,KAAK,YAAYA,EAAE,EACnB,MAAMu3E,GAAU,KAAK,oBAAoB,GAAK,CAAC,EACzCD,GAAeC,GAAQ,IAAI,CAAC,CAACl9E,EAAG,KAAO,CAAE,GAAIA,EAAI,EAAE,EAEzD,MAAO,CAAE,QAAAk9E,GAAS,aAAAD,EAAa,CACjC,CAEO,cAAwD,CAC7D,OAAI,KAAK,iBACA,KAAK,gBAAgB,EAGvB,KAAK,eAAe,CAC7B,CAEO,qBAAoE,CACzE,OAAO,MAAM,KAAK,KAAK,gBAAgB,QAAQ,CAAC,CAClD,CAEO,gBAA0C,CAC/C,OAAO,KAAK,gBAAgB,OAAO,EAAE,KAAK,EAAE,OAAO,QAAQ,CAC7D,CAEA,IAAW,kBAA4B,CACrC,OAAO,KAAK,iBACd,CAEQ,iBAAiC,CACvC,OAAO,MAAM,KAAK,KAAK,gBAAgB,OAAO,GAAK,CAAC,CAAC,EAAE,IAAK3qE,IAAQA,GAAI,QAAQ,CAAC,CACnF,CAEO,wBAA+D,CACpE,MAAM6qE,GAAe,KAAK,gBAAgB,EAE1C,GAAIA,GAAa,SAAW,EAC1B,OAGF,MAAMC,MAAe,MAAsBD,GAAa,CAAC,CAAC,EAE1D,GAAI,CAACC,GACH,OAGF,GAAID,GAAa,SAAW,EAC1B,OAAOC,GAGT,GAAI,KAAK,UAAYA,GAAa,2BAA4B,CAC5D,MAAMhqC,GAAW+pC,GAAa,IAAK7qE,OAAQ,MAAsBA,EAAG,CAAE,EACtE,OAAO8qE,GAAa,2BAA2BhqC,EAAQ,CACzD,CAEA,MAAMiqC,GAAqB,CAAC,EAE5B,UAAWC,MAAeH,GAAc,CACtC,MAAMzlB,MAAU,MAAsB4lB,EAAW,EAE7C5lB,IAAWklB,EAAoBllB,EAAO,GACxC2lB,GAAmB,KAAK3lB,EAAO,CAEnC,CAEA,GAAI2lB,GAAmB,OACrB,OAAO,IAAIR,EAAoCQ,EAAkB,CAIrE,CACF,CC7HO,MAAME,UAA0B,IAAwC,CACtE,aAAc,CACnB,MAAM,CACJ,iBAAkB,CAChB,QAAS,GACT,SAAU,CAAC,EACX,SAAU,CAAClwF,GAAMvR,KAAY,KAAK,cAAcuR,GAAMvR,EAAO,EAC7D,QAAS,IAAM,KAAK,eAAe,CACrC,EACA,UAAW,CAAC,EACZ,UAAW,CAAC,CACd,CAAC,EAED,KAAK,qBAAqB,KAAK,WAAW,KAAK,IAAI,CAAC,CACtD,CAIO,mBAAmB0hG,GAAsC,CAC9D,KAAK,gBAAkBA,EACzB,CAEQ,YAAa,CACnB,MAAMzuE,MAAY,MAAqB,IAAI,EAE3C,KAAK,MAAM,IACTA,GAAU,iBAAiB,KAA0B,CAAC,CAAE,QAAAqU,EAAQ,IAAM,CACpE,KAAK,iBAAiBA,EAAO,CAC/B,CAAC,CACH,EAEA,KAAK,MAAM,IACTrU,GAAU,iBAAiB,KAA6B,CAAC,CAAE,QAAAqU,EAAQ,IAAM,CACvE,KAAK,uBAAuBA,EAAO,CACrC,CAAC,CACH,EAEA,KAAK,MAAM,IACTrU,GAAU,iBAAiB,KAA8B,CAAC,CAAE,QAAAqU,EAAQ,IAAM,CACxE,KAAK,eAAe,CACtB,CAAC,CACH,EAEA,KAAK,MAAM,IACTrU,GAAU,iBAAiB,KAA+B,CAAC,CAAE,QAAAqU,EAAQ,IAAM,CACzE,KAAK,YAAY,CACnB,CAAC,CACH,EAEA,KAAK,MAAM,IACTrU,GAAU,iBAAiB,KAAkC,CAAC,CAAE,QAAAqU,EAAQ,IAAM,CAC5E,KAAK,YAAY,CACnB,CAAC,CACH,EAEI,KAAK,kBACP,KAAK,uBAAuB,KAAK,eAAe,EAChD,KAAK,gBAAkB,OAE3B,CAEQ,uBAAuBnb,GAAkC,CAE/D,GAAI,CAACA,GAAO,QAAQ,OAAO,SAAU,CACnCw1E,EAAwBx1E,GAAO,QAAQ,MAAM,EAC7C,WAAW,IAAM,KAAK,uBAAuBA,EAAM,CAAC,EACpD,MACF,CAEAA,GAAO,QAAQ,OAAO,aAAaA,GAAQ,EAAI,CACjD,CAOQ,iBAAiBA,GAAyC,CAG5D,KAAK,MAAM,UAAU,OAAS,GAChC,KAAK,SAAS,CAAE,UAAW,CAAC,CAAE,CAAC,EAGjC,KAAK,cAAcA,EAAM,EAEzB,KAAK,SAAS,CAAE,UAAW,CAAC,GAAG,KAAK,MAAM,UAAWA,EAAM,CAAE,CAAC,CAChE,CAKO,YAAa,CAClB,MAAMy1E,GAAY,KAAK,MAAM,UAAU,MAAM,EACvCz1E,GAASy1E,GAAU,IAAI,EACxBz1E,KAILA,GAAO,KAAK,EACZA,GAAO,OAAO,aAAa,IAAI,KAA2B,CAAE,OAAQA,GAAO,MAAO,CAAC,EAAG,EAAI,EAKtFA,GAAO,aACT,KAAK,eAAe,EAGlBA,GAAO,aACT,KAAK,aAAaA,GAAO,YAAaA,GAAO,YAAY,MAAM,IAAM,CAAE,MAAO,EAAK,CAAC,EAGlFA,GAAO,eACT,KAAK,uBAAuBA,GAAO,aAAa,EAGlD,KAAK,SAAS,CAAE,UAAAy1E,GAAW,UAAW,CAAC,GAAG,KAAK,MAAM,UAAWz1E,EAAM,CAAE,CAAC,EAC3E,CAKQ,cAAcA,GAAyC,CAC7DA,GAAO,QAAQ,EACfA,GAAO,OAAO,aAAa,IAAI,KAA2B,CAAE,OAAQA,GAAO,MAAO,CAAC,EAAG,EAAI,EAEtFA,GAAO,aACT,KAAK,uBAAuBA,GAAO,WAAW,EAG5CA,GAAO,aACT,KAAK,aAAaA,GAAO,YAAaA,GAAO,YAAY,MAAM,IAAM,CAAE,MAAO,EAAK,CAAC,EAGlFA,GAAO,eACT,KAAK,eAAe,CAExB,CAKO,YAAa,CAClB,MAAM01E,GAAY,KAAK,MAAM,UAAU,MAAM,EACvC11E,GAAS01E,GAAU,IAAI,EACxB11E,KAIL,KAAK,cAAcA,EAAM,EAEzB,KAAK,SAAS,CAAE,UAAA01E,GAAW,UAAW,CAAC,GAAG,KAAK,MAAM,UAAW11E,EAAM,CAAE,CAAC,EAC3E,CAEO,iBAAkB,CAEvB,KAAK,SAAS,CAAE,iBAAkB,CAAE,GAAG,KAAK,MAAM,iBAAkB,QAAS,EAAK,CAAE,CAAC,CACvF,CAEO,kBAAmB,CACxB,KAAK,SAAS,CACZ,iBAAkB,CAAE,GAAG,KAAK,MAAM,iBAAkB,SAAU,CAAC,EAAG,QAAS,EAAM,EACjF,UAAW,MACb,CAAC,CACH,CAEQ,cAAcyvD,GAAsC57E,GAA0C,CACpG,IAAIw2B,GAAM,KAAW,UAAU,KAAMolD,GAAQ,EAAE,EAC/C,GAAIplD,GAAK,CAEP,MAAI,MAAuBA,EAAG,EAC5B,OAGF,KAAK,aAAaA,GAAKolD,GAAQ,GAAI57E,EAAO,CAC5C,CACF,CAEO,cAAwD,CAC7D,OAAO,KAAK,MAAM,WAAW,aAAa,CAC5C,CAEO,aAAaw2B,GAAkB3M,GAAY,CAAE,MAAAslC,GAAO,MAAAgkC,EAAM,EAAqC,CAAC,EAAG,CACxG,GAAI,CAACA,IACH,GAAIhkC,IACF,GAAI,KAAK,MAAM,WAAW,SAAStlC,EAAE,EAAG,CACtC,KAAK,0BAA0BA,EAAE,EACjC,MACF,UAEI,KAAK,MAAM,WAAW,eAAe,IAAM2M,GAAK,CAClD,KAAK,eAAe,EACpB,MACF,EAIJ,MAAMsrE,GAAmB,KAAK,MAAM,WAAa,IAAIb,EAAiB,CAAC,CAACp3E,GAAI2M,GAAI,OAAO,CAAC,CAAC,CAAC,EAEpF,CAAE,UAAA7rB,GAAW,aAAcu1D,EAAS,EAAI4hC,GAAiB,kBAAkBj4E,GAAI2M,GAAK,CAAC,CAAC24B,EAAK,EAEjG,KAAK,gBAAgB,IAAI8xC,EAAiBt2F,EAAS,EAAGu1D,EAAQ,CAChE,CAEQ,0BAA0Br2C,GAAY,CAC5C,GAAI,CAAC,KAAK,MAAM,UACd,OAGF,KAAM,CAAE,QAAAu3E,GAAS,aAAclhC,EAAS,EAAI,KAAK,MAAM,UAAU,uBAAuBr2C,EAAE,EAE1F,GAAIu3E,GAAQ,SAAW,EAAG,CACxB,KAAK,eAAe,EACpB,MACF,CAEA,KAAK,gBAAgB,IAAIH,EAAiB,CAAC,GAAGG,EAAO,CAAC,EAAGlhC,EAAQ,CACnE,CAEQ,gBAAgBv1D,GAAyCu1D,GAAyC,CAGpG,SAAS,yBAAyB,aACpC,SAAS,cAAc,KAAK,EAG9B,KAAK,SAAS,CAAE,UAAAv1D,GAAW,iBAAkB,CAAE,GAAG,KAAK,MAAM,iBAAkB,SAAAu1D,EAAS,CAAE,CAAC,CAC7F,CAEO,gBAAiB,CACjB,KAAK,MAAM,WAIhB,KAAK,gBAAgB,OAAW,CAAC,CAAC,CACpC,CAEQ,uBAAuB1pC,GAAkB,CAC/C,KAAK,aAAaA,GAAKA,GAAI,MAAM,GAAI,EACrC,KAAK,MAAM,WAAW,iBAAiB,CACzC,CACF,CAEA,SAASmrE,EAAwBzhG,GAAqB,CACpD,GAAIA,GAAO,SAAW,OAItB,GAAIA,GAAO,kBAAkB8nC,EAAA,EAAS,CACpC,MAAM4hC,GAAM1pE,GAAO,OACb6hG,GAAa7hG,GAAO,OAAO,gBAAgB,EAC7C6hG,GAAW,MAAM,iBAAmBn4B,GAAI,QAAQ,GAClDm4B,GAAW,YAAYn4B,EAAG,CAE9B,MACE+3B,EAAwBzhG,GAAO,MAAM,CAEzC,C,qQCvQO,SAAS8hG,GAAuB90F,GAAe,CACpD,SAAO,MAAaA,EAAK,GAAKA,GAAM,MAAQA,GAAM,KAAK,SAAW,kBACpE,CAEO,SAAS+0F,GAAkB/0F,GAAe,CAC/C,SAAO,MAAaA,EAAK,GAAKA,GAAM,MAAQA,GAAM,KAAK,SAAW,aACpE,CAEO,SAASg1F,GAAuBh1F,GAAe,CACpD,SAAO,MAAaA,EAAK,GAAKA,GAAM,MAAQA,GAAM,KAAK,SAAW,kBACpE,CAOO,SAASi1F,GAAuB,CAAE,aAAAC,GAAc,WAAAC,EAAW,EAAgC,CAEhG,OADmCn/F,EAAA,EAAO,eAAe,qBAEvD,QAAC8lC,GAAA,EAAK,CAAC,SAAO,KAAE,oCAAqC,+BAA+B,EAAG,SAAS,QAC9F,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,2CAA2C,wHAE1D,EACF,KACA,OAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,iDAAiD,qDAEhE,EACF,GACF,KAEA,QAACA,GAAA,GACC,SAAO,KAAE,sEAAuE,qBAAqB,EACrG,SAAS,QAET,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,qEAAqE,0HAEpF,EACF,KACA,OAACoJ,GAAA,EAAG,CAAC,WAAY,EACf,oBAACD,EAAA,EAAK,CAAC,WAAW,SACf,UAAAiwD,GACAC,GAAW,EAAI,GAClB,EACF,GACF,CAEJ,CASO,SAASC,GAAW,CAAE,UAAAC,GAAW,UAAAr7F,GAAW,QAAAijD,GAAS,OAAAq4C,EAAO,EAAoB,CACrF,SACE,OAACh3F,EAAA,IACC,SAAU,CAAC2+C,IAAWjjD,GACtB,KAAMA,GAAY,UAAY,OAC9B,QAAS,IAAMs7F,GAAOD,EAAS,EAC/B,QAASA,GAAY,cAAgB,UACrC,cAAapzF,EAAA,GAAU,WAAW,OAAO,oBAAoB,WAE5D,SAAAjI,MACG,KAAE,qCAAsC,WAAW,EACnDq7F,MACE,KAAE,iDAAkD,oBAAoB,KACxE,KAAE,mCAAoC,MAAM,EACpD,CAEJ,C,oGChFO,SAASE,GAAiBC,GAAS,GAAO,CAC/C,MAAMh3E,MAAW,OAAY,EACvBi3E,MAAY,OAAmB,EAC/B,CAACC,EAAqB,KAAI,OAAyB,EAEnD,CAAC3jF,GAAO4jF,EAAe,KAAIC,GAAA,GAC/B,MACE3sE,GACAn2B,KAKG,CACH,CACE,IAAI+iG,GAAY/iG,GAAQ,kBAAoBm2B,GAAM,aAAa,EAE3Dn2B,GAAQ,aACV+iG,GAAY5sE,GAAM,eAAe,CAC/B,MAAOn2B,GAAQ,MACf,MAAOA,GAAQ,MACf,YAAaA,GAAQ,YACrB,SAAUA,GAAQ,QACpB,CAAC,GAGH,MAAMq+B,GAAS,MAAMukE,GAAsB,CACzC,UAAWG,GACX,UAAW/iG,GAAQ,UACnB,QAASA,GAAQ,QACjB,UAAWA,GAAQ,UACnB,eAAgB,GAChB,IAAKA,GAAQ,GACf,CAAC,EAED,GAAI,UAAWq+B,GACb,MAAMA,GAAO,MAIf,MAAM2kE,GAAiC,CAAE,GAAG3kE,GAAO,IAAK,EAKxD,GAAI,CAACA,GAAO,KAAK,MAAQlI,GAAM,MAAM,KAAK,KAAM,CAC9C,MAAM8sE,GAAO9sE,GAAM,MAAM,KAAK,KAC9B6sE,GAAW,KAAOC,GAClBD,GAAW,IAAM,GAAG3kE,GAAO,KAAK,GAAG,IAAI4kE,EAAI,EAC7C,CAEA9sE,GAAM,cAAc4sE,GAAWC,GAAYhjG,GAAQ,SAAS,EAG5D,IAAU,QAAQ,IAAI,IAAqB,EAC3C2iG,GAAU,WAAQ,KAAE,6DAA8D,iBAAiB,CAAC,KAEpG,OAAqCK,GAAW,GAAG,EAE/CN,GACF,KAAsB,gBAAgB,CAAE,KAAMK,GAAU,OAAS,GAAI,IAAKC,GAAW,GAAI,CAAC,KAE1F,OAAkC,CAAC,CAAChjG,GAAQ,MAAOm2B,GAAO,CACxD,KAAM4sE,GAAU,OAAS,GACzB,IAAKC,GAAW,KAAO,GACvB,iBAAkB7sE,GAAM,mBAAmB4sE,EAAS,CACtD,CAAC,EAGH,MAAMG,GAAkB,KAAgB,YAAY,EAC9CC,GAAS,IAAa,iBAAiBH,GAAW,GAAG,EAE3D,OAAIG,KAAWD,GAAgB,UAC7B,WAAW,IAAM,CACf,KAAgB,KAAK,CAAE,SAAUC,GAAQ,OAAQD,GAAgB,MAAO,CAAC,CAC3E,CAAC,EAGC/sE,GAAM,MAAM,KAAK,WACnBzK,MACE,OAAoB,CAClB,GAAIs3E,GAAW,IACf,MAAO7sE,GAAM,MAAM,MACnB,IAAKgtE,EACP,CAAC,CACH,EAGK9kE,GAAO,IAChB,CACF,EACA,CAAC3S,GAAUi3E,EAAS,CACtB,EAEA,MAAO,CAAE,MAAA1jF,GAAO,gBAAA4jF,EAAgB,CAClC,CCzFO,SAASO,GAAkB,CAAE,UAAAnwE,GAAW,OAAAowE,GAAQ,WAAAC,EAAW,EAAU,CAC1E,KAAM,CAAE,WAAA56D,GAAY,gBAAA66D,GAAiB,iBAAAC,EAAiB,EAAIF,GAEpD,CAAE,MAAArkF,GAAO,gBAAA4jF,EAAgB,EAAIJ,GAAiB,EAAK,EACnD,CAACziG,GAASyjG,EAAU,KAAI,YAA+B,CAC3D,UAAWxwE,GAAU,MAAM,KAAK,UAGhC,IAAK,CACH,GAAGA,GAAU,WAAW,eAAe,CACzC,CACF,CAAC,EAEKuvE,GAAS,MAAOD,IAAuB,EAC5B,MAAMM,GAAgB5vE,GAAW,CAAE,GAAGjzB,GAAS,iBAAkBwjG,GAAkB,UAAAjB,EAAU,CAAC,GAClG,SAAW,YACpBtvE,GAAU,WAAW,EACrBowE,GAAO,MAAM,gBAAgB,EAEjC,EAEMjB,MACJ,OAAC52F,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS,IAAMynB,GAAU,WAAW,EAAG,KAAK,UACtE,mBAAC,KAAK,CAAC,QAAQ,2DAA2D,kBAAM,EAClF,EAGIovE,GAAcE,OAClB,OAACD,GAAU,CAAC,QAAS55D,GAAY,UAAWzpB,GAAM,QAAS,OAAAujF,GAAgB,UAAAD,EAAA,CAAsB,EAG7FmB,GAAyB34D,IACtBA,IAAWA,GAAQ,OAAS,IAGrC,SAAS44D,GAAaz2F,GAAe,CACnC,GAAIw2F,GAAsB1jG,GAAQ,OAAO,EAAG,CAC1C,MAAM4jG,GAAgB5jG,GAAQ,SAAS,QAAU,EAEjD,SACE,OAACgpC,GAAA,EAAK,CAAC,SAAO,KAAE,uCAAwC,kBAAkB,EAAG,SAAS,QACpF,mBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,sCAAsC,4BACnC,CAAE,cAAA46D,EAAc,EAAE,qGAEpC,EACF,EACF,CAEJ,CAEA,OAAI5B,GAAuB90F,EAAK,KAE5B,QAAC87B,GAAA,GACC,SAAO,KACL,kGACA,yCACF,EACA,SAAS,QAET,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,0EAA0E,wDAEzF,EACF,KACA,OAACoJ,GAAA,EAAG,CAAC,WAAY,EACf,oBAACD,EAAA,EAAK,CAAC,WAAW,SACf,UAAAiwD,GACAC,GAAW,EAAI,GAClB,EACF,GACF,EAIAJ,GAAkB/0F,EAAK,KAClB,OAACi1F,GAAsB,CAAC,aAAAC,GAA4B,WAAAC,EAAA,CAAwB,EAGjFH,GAAuBh1F,EAAK,KAE5B,QAAC87B,GAAA,GACC,SAAO,KAAE,2EAA4E,kBAAkB,EACvG,SAAS,QAET,oBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,0EAA0E,0EAC7B,OAAC,UAAO,mBAAO,EAAS,8BAEpF,EACF,KACA,OAACoJ,GAAA,EAAG,CAAC,WAAY,EACf,oBAACD,EAAA,EAAK,CAAC,WAAW,SACf,UAAAiwD,GACAC,GAAW,EAAI,GAClB,EACF,GACF,KAKF,oBACG,UAAAn1F,OACC,OAAC87B,GAAA,GACC,SAAO,KACL,mFACA,0BACF,EACA,SAAS,QAET,mBAAC,KAAG,SAAA97B,GAAM,QAAQ,EACpB,KAEF,QAACilC,EAAA,EAAK,CAAC,WAAW,SACf,UAAAiwD,GACAC,GAAW,EAAK,EAChB,CAAC35D,OACA,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,uEAAuE,8BAEtF,EACF,GAEJ,GACF,CAEJ,CAEA,SACE,QAACyJ,EAAA,EAAK,CAAC,IAAK,EAAG,UAAU,SACvB,oBAAC0xD,GAAA,CAA+B,OAAAR,GAAgB,WAAAC,EAAA,CAAwB,EACvEC,OACC,OAACv6D,GAAA,GACC,SAAO,KACL,0EACA,gCACF,EACA,SAAS,UAET,mBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,yEAAyE,6VAKxF,EACF,EACF,KAEF,OAACn7B,GAAA,EAAK,CAAC,SAAO,KAAE,oDAAqD,SAAS,EAC5E,mBAACM,EAAA,GACC,gBAAY,KAAE,yDAA0D,SAAS,EACjF,MAAOnO,GAAQ,SAAW,GAC1B,SAAWuM,IAAM,CACfk3F,GAAW,CACT,GAAGzjG,GACH,QAASuM,GAAE,cAAc,KAC3B,CAAC,CACH,EACA,eAAa,KACX,4EACA,iDACF,EACA,UAAS,GACT,KAAM,EACR,EACF,EACCo3F,GAAa1kF,GAAM,KAAK,GAC3B,CAEJ,CAOO,SAAS4kF,GAA+B,CAAE,OAAAR,GAAQ,WAAAC,EAAW,EAAwC,CAC1G,KAAM,CACJ,cAAAQ,GAAgB,GAChB,cAAAC,GAAgB,GAChB,YAAAC,GAAc,GACd,qBAAAC,GAAuB,EACzB,EAAIZ,GAAO,SAAS,EACd,CAAE,eAAAa,GAAgB,wBAAAC,GAAyB,iBAAAC,EAAiB,EAAId,GAEtE,SACE,QAACnxD,EAAA,EAAK,CAAC,UAAW,SAAU,WAAY,aACrC,UAAA+xD,OACC,OAAC/uD,GAAA,GACC,GAAG,iBACH,QAAS4uD,GACT,SAAUV,GAAO,sBACjB,SAAO,KACL,oGACA,2BACF,EACA,eAAa,KACX,sGACA,8CACF,EACA,cAAal0F,EAAA,GAAU,MAAM,mBAAmB,cAClD,EAEDi1F,OACC,OAACjvD,GAAA,GACC,GAAG,eACH,SAAO,KACL,qGACA,8BACF,EACA,eAAa,KACX,sGACA,+CACF,EACA,QAAS6uD,GACT,SAAUX,GAAO,oBACjB,cAAal0F,EAAA,GAAU,MAAM,mBAAmB,YAClD,EAEDg1F,OACC,oBACE,oBAAChvD,GAAA,GACC,GAAG,iBACH,SAAO,KACL,yGACA,gCACF,EACA,eAAa,KACX,uGACA,8CACF,EACA,QAAS2uD,GACT,SAAUT,GAAO,sBACjB,cAAal0F,EAAA,GAAU,MAAM,mBAAmB,cAClD,EACC20F,IAAiBG,OAChB,OAACj7D,GAAA,GACC,cAAa75B,EAAA,GAAU,MAAM,mBAAmB,sBAChD,SAAO,KACL,wFACA,yBACF,EACA,SAAS,UAET,mBAAC,KAAK,CAAC,QAAQ,uFAAuF,4PAItG,EACF,GAEJ,GAEJ,CAEJ,C,oDCnRO,SAASk1F,GAAgCzxF,GAAe,CAC7D,KAAM,CAAC0xF,GAAQC,EAAa,KAAI,OAAyC,EACnE,CAACpsC,GAAQqsC,EAAa,KAAI,OAA0C,EAU1E,MAAO,IARgB,eACpB7jG,KACiBiS,GAAOulD,GAASmsC,IACjB3jG,EAAI,EAErB,CAAC2jG,GAAQ1xF,GAAMulD,EAAM,CACvB,EAEwBvlD,GAAO4xF,GAAgBD,EAAa,CAC9D,C,sFCbO,eAAeE,GAAmBC,GAAoB,CAC3D,GAAI,CAACA,IAAa,CAACxhG,EAAA,EAAO,eAAe,aACvC,MAAO,CAAC,EAGV,MAAMyhG,IADc,QAAM,OAAS,MAAU,UAAU,UAAU,SAAS,CAAE,KAAMD,EAAU,CAAC,CAAC,EAAE,OAAO,GAC1E,SAAS,cAAc,IAAsB,EAE1E,OAAKC,GAIE,CACL,IAAK,CACH,YAAa,CACX,CAAC,IAAsB,EAAGA,GAC1B,CAAC,IAAkB,EAAG,KAAY,IACpC,CACF,CACF,EAVS,CAAC,CAWZ,CCaO,SAASC,GAA6B,CAC3C,cAAAC,GACA,UAAA5xE,GACA,OAAAowE,GACA,WAAAC,GACA,MAAAwB,GACA,gBAAAC,GACA,SAAAC,GACA,WAAAC,EACF,EAAU,CACR,MAAM9xD,MAAW,MAAY,EACvB+xD,MAAY,MAAa,EACzB,CAAE,QAAAC,GAAS,UAAWC,EAAY,EAAInyE,GAAU,SAAS,EAEzD,CAACoyE,GAAoBpT,EAAO,EAAIoS,GAAgCS,GAAQ,OAAYD,GAAc,IAAI,EAEtGS,MAAU,MAAsC,CAAE,cAAAT,EAAc,CAAC,EACjE,CAAE,aAAAU,GAAc,MAAAC,GAAO,QAAA3yF,GAAS,MAAA4yF,GAAO,SAAAC,EAAS,EAAIJ,GACpD,CAACK,GAAUvnG,GAAKouC,EAAI,EAAIg5D,GAAM,CAAC,WAAY,MAAO,MAAM,CAAC,KAG/D,aAAU,IAAM,CACdC,GAAMZ,EAAa,CACrB,EAAG,CAACA,GAAeY,EAAK,CAAC,EAEzB,MAAMG,GAAkB14F,IAAmB,CACzCg4F,GAAU,QAAQ,CAChB,KAAM,KAAU,WAAW,KAC3B,QAAS,IAAC,KAAE,4DAA6D,wBAAwB,EAAGh4F,EAAK,CAC3G,CAAC,CACH,EAEM24F,MAAqB,eACxBC,IAAgC,CAE/B,MAAM7wE,GAAM,IAAa,iBACvB02B,GAAA,GAAgB,CACd,IAAKm6C,GAAO,SAAS,KACrB,KAAM3zC,EAAA,EAAI,cAAc2zC,GAAO,KAAK,OAAS,EAAE,EAC/C,mBAAoB,OAAO,SAAS,MACtC,CAAC,CACH,EACA3yD,GAASle,EAAG,CACd,EACA,CAACke,EAAQ,CACX,EAEM4yD,MAAoB,eACxB,CAAC3nG,GAAaouC,GAAcw5D,KAAsB,CAChD,MAAM/wE,MAAM,MAA+B,CACzC,QAAS,GAAG,KAAgB,IAAI4vE,GAAc,IAAI,sBAAsBr4D,EAAI,GAC5E,UAAW,MACX,WAAYpuC,GACZ,SAAA4nG,EACF,CAAC,EACD7yD,GAASle,EAAG,CACd,EACA,CAACke,GAAU0xD,GAAc,IAAI,CAC/B,EAEMoB,MAAgB,eAAY,IAAM,CACtCb,IAAa,UAAU,EAEvB,MAAMp4E,GAAQiG,GAAU,aAAa,EAC/BizE,GAAejU,IAAS,MAAM,SAAS,QAAUA,IAAS,MAAM,SAAS,OACzEkU,GAAeC,GAA+BF,EAAY,EAChEjzE,GAAU,cAAcjG,GAAOm5E,GAActB,GAAc,QAAQ,GAAG,EAEtExB,GAAO,QAAQ,CACjB,EAAG,CAACpwE,GAAW4xE,GAAc,QAAQ,IAAKxB,GAAQ+B,GAAanT,IAAS,MAAM,QAAQ,CAAC,EAEjFoU,MAAiB,eACpBP,IAAgC,CAO/B,GANAG,GAAc,EACVnB,IAASgB,IAAQ,SAAS,MAC5BD,GAAmBC,EAAM,EAIvB1nG,KAAQ6mG,IAAY,QAAU7mG,GAAK,CACrC2nG,GAAkB3nG,GAAKouC,GAAMy4D,IAAY,IAAI,EAC7C,MACF,CAEA,KAAgB,QAAQ,CACtB,UAAW,KACX,UAAW,IACb,CAAC,CACH,EACA,CAACH,GAAOt4D,GAAMpuC,GAAK6mG,IAAY,OAAQA,IAAY,KAAMgB,GAAeJ,GAAoBE,EAAiB,CAC/G,EAEMO,MAAkB,eACtB,CAACloG,GAAaouC,GAAcnT,GAAgCysE,KAAgC,CAC1FG,GAAc,EACVnB,IAASgB,IAAQ,UAAU,KAC7BD,GAAmBC,EAAM,EAEzBC,GAAkB3nG,GAAKouC,GAAMnT,GAAK,QAAQ,CAE9C,EACA,CAACyrE,GAAOiB,GAAmBF,GAAoBI,EAAa,CAC9D,KAEAM,GAAA,GAAwC,CACtC,UAAW1B,GAAc,QAAQ,IACjC,QAAA5S,GACA,SAAA0T,GACA,aAAc,YACd,WAAAV,GACA,eAAgBK,GAAQ,UAAU,EAAE,IACpC,SAAU,CACR,gBAAiB,CAAC,CAAE,IAAAlnG,GAAK,KAAAouC,EAAK,EAAGnT,GAAMP,KAAawtE,GAAgBloG,GAAKouC,GAAMnT,GAAMP,EAAQ,EAC7F,eAAAutE,GACA,QAAST,EACX,CACF,CAAC,EAGD,MAAMY,GAAmB,MAAO,CAAE,MAAAviG,GAAO,YAAAsoC,GAAa,KAAAk6D,GAAM,KAAAj6D,GAAM,QAAA4pD,GAAS,IAAAh4F,EAAI,IAAoC,CAEjH,GAAI,CAACqoG,IAAQ,CAACj6D,GAAM,CAClB,QAAQ,MAAM,sCAAuC,CAAE,KAAAi6D,GAAM,KAAAj6D,EAAK,CAAC,EACnE,MACF,CAQA,MAAMzB,GAAUqrD,IAAW,mBAAmBnjE,GAAU,MAAM,KAAK,GAE7DyW,GAAOzW,GAAU,gBAAgB,CACrC,MAAA6xE,GACA,MAAA7gG,GACA,YAAAsoC,GACA,SAAU,EACZ,CAAC,KAED,OAAkB,gDAAiD,CACjE,SAAAo5D,GACA,eAAgBc,GAChB,eAAgBxB,IAAY,MAAQ,SACtC,CAAC,EAEDI,GAAmB,CAEjB,IAAKjnG,KAAQ6mG,IAAY,OAAS,OAAY7mG,GAC9C,KAAMqoG,GACN,KAAAj6D,GACA,QAAAzB,GACA,KAAArB,EACF,CAAC,CACH,EAEA,SACE,OAAC,KAAY,CAAE,GAAG47D,GAChB,mBAAC,QAAK,SAAUC,GAAaiB,EAAgB,EAAG,KAAK,wBACnD,oBAACr0D,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC5B,UAAA6yD,OACC,OAAC0B,GAAA,GACC,aAAc,GACd,eAAgB,GAChB,gBAAgB,6EAClB,EAGD5B,OACC,oBACE,oBAACj3F,GAAA,GACC,SAAQ,GACR,SAAO,KAAE,8DAA+D,OAAO,EAC/E,QAAS,CAAC,CAACy3F,GAAQ,UAAU,OAAO,MACpC,MAAOA,GAAQ,UAAU,OAAO,OAAO,QAEvC,mBAACtkD,GAAA,GACC,GAAG,kBACF,GAAG0kD,GAAS,QAAS,CACpB,YAAU,KACR,iEACA,6BACF,EACA,SAAUiB,EACZ,CAAC,EACH,EACF,KACA,OAAC94F,GAAA,GACC,SAAQ,GACR,SAAO,KAAE,oEAAqE,aAAa,EAC3F,QAAS,CAAC,CAACy3F,GAAQ,UAAU,OAAO,YACpC,MAAOA,GAAQ,UAAU,OAAO,aAAa,QAE7C,mBAACn3F,EAAA,EAAQ,CAAC,GAAG,wBAAyB,GAAGu3F,GAAS,aAAa,EAAG,EACpE,KAEA,OAAC73F,GAAA,GACC,SAAQ,GACR,SAAO,KAAE,sEAAuE,eAAe,EAE/F,mBAAC,MACC,QAAAgF,GACA,KAAM,SACN,OAAQ,CAAC,CAAE,MAAO,CAAE,IAAAzU,GAAK,MAAA5B,GAAO,SAAAJ,GAAU,GAAGiD,EAAM,CAAE,OAEjD,OAACunG,GAAA,GACC,SAAU,MAAOnsD,GAAcx2C,KAAmB,CAChD7H,GAAS,CAAE,IAAAq+C,GAAK,MAAAx2C,EAAM,CAAC,EACvB4iG,GAAgB,YAAapsD,EAAG,EAChC,MAAMtiB,GAAO,MAAMssE,GAAmBhqD,EAAG,EACzCxnB,GAAU,SAAS,CACjB,KAAM,CACJ,GAAGkF,GACH,UAAWsiB,EACb,CACF,CAAC,CACH,EACA,MAAOj+C,GAAM,IACZ,GAAG6C,GACJ,eAAc,GAChB,CAEJ,CACF,EACF,GACF,EAGD,CAACylG,IAAS,CAACE,OAAY,OAACnB,GAA8B,CAAC,OAAAR,GAAgB,WAAAC,EAAA,CAAwB,KAEhG,OAACwD,GAAA,GACC,aAAa,YACb,SAAA9B,GACA,SAAAW,GACA,gBAAAZ,GACA,WAAAE,GACA,MAAAH,EAAA,CACF,KAEA,QAAC3yD,EAAA,EAAK,CAAC,IAAK,EACV,oBAAC3mC,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS63F,GAAO,QAAS,KAAK,UACxD,mBAAC,KAAK,CAAC,QAAQ,yDAAyD,kBAAM,EAChF,KACA,OAAC73F,EAAA,GAAM,CAAC,QAAQ,UAAU,KAAK,SAAS,SAAUymF,GAAQ,WAAa,CAACkT,IAAWH,GAChF,SAAA/S,GAAQ,aACL,KAAE,yDAA0D,WAAW,KACvE,KAAE,uDAAwD,MAAM,EACtE,GACF,GACF,EACF,EACF,CAEJ,CAMA,eAAe0U,GAAc1iG,GAAe8iG,GAA0C,CACpF,GAAI9iG,KAAU8iG,GAAW,OAAO,OAAO,KAAK,EAC1C,SAAO,KACL,uEACA,sDACF,EAEF,GAAI,CACF,aAAM,KAAc,yBAAyBA,GAAW,OAAO,KAAO,UAAW9iG,EAAK,EAC/E,EACT,OAASiJ,GAAO,CACd,OAAOA,cAAiB,MACpBA,GAAM,WACN,KACE,0EACA,oCACF,CACN,CACF,CAGA,SAAS25F,GAAgBG,GAAexqG,GAAgB,CAEtD,GAA2BA,IAAU,KACnC,OAEF,MAAMy4B,GAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EACxCA,GAAI,aAAa,IAAI+xE,GAAOxqG,EAAK,EACjC,OAAO,QAAQ,aAAa,CAAC,EAAG,GAAIy4B,EAAG,CACzC,CAMA,SAASmxE,GAA+BttE,GAAmD,CACzF,MAAM2hB,GAAM3hB,IAAU,UAAU,KAC1B70B,GAAQ60B,IAAU,MAAM,MACxBmqE,GAAO9wC,EAAA,EAAI,cAAcluD,EAAK,EAEpC,MAAO,CACL,IAAAw2C,GAEA,QAAS3hB,IAAU,UAAU,WAC7B,GAAIA,IAAU,MAAM,IAAM,EAC1B,OAAQ,UACR,IAAK,IAAa,iBAChB6yB,GAAA,GAAgB,CACd,IAAAlR,GACA,KAAAwoD,GACA,mBAAoB,EACtB,CAAC,CACH,EACA,KAAAA,EACF,CACF,CCrVO,SAASgE,GAAyB,CAAE,OAAA5D,GAAQ,WAAAC,GAAY,UAAArwE,EAAU,EAAkC,CACzG,KAAM,CAAE,MAAA6xE,GAAO,cAAAD,GAAe,gBAAAE,GAAiB,SAAAC,GAAU,WAAAC,EAAW,KAAIiC,EAAA,GAA4Bj0E,EAAS,EAE7G,OAAK4xE,MAKH,OAACD,GAAA,CACC,UAAA3xE,GACA,OAAAowE,GACA,WAAAC,GACA,MAAAwB,GACA,cAAAD,GACA,WAAAI,GACA,gBAAAF,GACA,SAAAC,EAAA,CACF,EAbO,IAeX,C,gBC3BO,SAASmC,GAAmBl0E,GAAoC,CAErE,MAAMm0E,GADS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAC/B,IAAI,WAAW,GAAK,OAExC,CAAE,WAAAnC,GAAY,kBAAAoC,EAAkB,KAAIC,GAAA,GAA6B,CAAE,WAAAF,EAAW,CAAC,EAErF,OAAKlkG,EAAA,EAAO,eAAe,aAGpB+vB,GAAU,oBAAoB,GAAK,EAAQgyE,IAAeoC,GAFxD,EAGX,C,wCCYO,SAASE,GAAoB,CAAE,UAAAt0E,GAAW,WAAAqwE,EAAW,EAAU,CACpE,KAAM,CAAE,iBAAAE,EAAiB,EAAIF,GAEvB,CAAE,SAAAoC,GAAU,aAAAH,GAAc,SAAA10F,GAAU,UAAA22F,GAAW,UAAAC,GAAW,MAAAjC,GAAO,QAAAkC,EAAQ,KAAI,MAAgC,CACjH,KAAM,SACN,cAAe,CACb,MAAOpE,GAAW,MAAQE,GAAiB,MAAS,GAAGA,GAAiB,KAAK,QAC7E,YAAaA,GAAiB,aAAe,GAC7C,OAAQ,CACN,IAAKvwE,GAAU,MAAM,KAAK,UAC1B,MAAOA,GAAU,MAAM,KAAK,WAC9B,EACA,SAAU,EACZ,CACF,CAAC,EAEK,CAAE,OAAAiyB,GAAQ,QAAAiF,EAAQ,EAAIq9C,GACtBT,GAAavB,GAAM,EAEnB,CAAE,MAAAvmF,GAAO,gBAAA4jF,EAAgB,EAAIJ,GAAiB,EAAK,EAEnD,CAACkF,GAAaC,EAAc,KAAI,YAAiD,CAAC,CAAC,EAEnFC,MAAuB,UAAuB,KAGpD,aAAU,IAAM,CACdH,GAAQ,OAAO,CACjB,EAAG,CAACA,EAAO,CAAC,KAGZ,aAAU,IACD,IAAM,CACX,aAAaG,GAAqB,OAAO,CAC3C,EACC,CAAC,CAAC,EAEL,MAAMC,MAAoB,eACvBv7F,IAAqC,CACpCsE,GAAS,QAAStE,GAAE,OAAO,MAAO,CAAE,YAAa,EAAK,CAAC,EACvD,aAAas7F,GAAqB,OAAO,EACzCA,GAAqB,QAAU,WAAW,IAAM,CAC9CH,GAAQ,OAAO,CACjB,EAAG,GAAG,CACR,EACA,CAAC72F,GAAU62F,EAAO,CACpB,EAEMlF,GAAS,MAAOD,IAAuB,CAM3C,GALA,aAAasF,GAAqB,OAAO,EAKrC,CAHiB,MAAMH,GAAQ,OAAO,EAIxC,OAGF,MAAM/mG,GAAO8mG,GAAU,GAER,MAAM5E,GAAgB5vE,GAAW,CAC9C,UAAAsvE,GACA,UAAW5hG,GAAK,OAAO,IACvB,iBAAkB6iG,GAGlB,WAAY,GACZ,MAAOF,GAAW,MAClB,SAAU3iG,GAAK,SACf,MAAOA,GAAK,MACZ,YAAaA,GAAK,WACpB,CAAC,GAEU,SAAW,UACpBsyB,GAAU,WAAW,EAErB20E,GAAe,CACb,MAAOjnG,GAAK,MACZ,UAAWA,GAAK,OAAO,GACzB,CAAC,CAEL,EAEMyhG,MACJ,OAAC52F,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS,IAAMynB,GAAU,WAAW,EAAG,KAAK,UACtE,mBAAC,KAAK,CAAC,QAAQ,8DAA8D,kBAAM,EACrF,EAGIovE,GAAcE,OACX,OAACD,GAAU,CAAC,QAAAn4C,GAAkB,UAAWlrC,GAAM,QAAS,OAAAujF,GAAgB,UAAAD,EAAA,CAAsB,EAEvG,SAASoB,GAAaz2F,GAAe,CACnC,MAAM66F,GACJhB,GAAW,MAAM,KAAK,IAAMY,GAAY,OAASZ,GAAW,OAAO,MAAQY,GAAY,UACzF,OAAI1F,GAAkB/0F,EAAK,GAAK66F,MACvB,OAAC5F,GAAsB,CAAC,aAAAC,GAA4B,WAAAC,EAAA,CAAwB,KAGnF,oBACG,UAAAn1F,IAAS66F,OACR,OAAC/+D,GAAA,GACC,SAAO,KACL,sFACA,0BACF,EACA,SAAS,QAER,SAAA97B,GAAM,YAAW,OAAC,KAAG,SAAAA,GAAM,QAAQ,EACtC,KAEF,QAACilC,EAAA,EAAK,CAAC,WAAW,SACf,UAAAiwD,GACAC,GAAW,EAAK,GACnB,GACF,CAEJ,CAEA,SACE,OAAC,QAAK,SAAUkD,GAAa,IAAM/C,GAAO,EAAK,CAAC,EAC9C,oBAACrwD,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACtkC,GAAA,GACC,SAAQ,GACR,SAAO,OAACm6F,GAAA,CAAgB,SAAUn3F,EAAA,CAAU,EAC5C,QAAS,CAAC,CAACq0C,GAAO,MAClB,MAAOA,GAAO,OAAO,QAErB,mBAAClE,GAAA,GACE,GAAG0kD,GAAS,QAAS,CACpB,YAAU,KAAE,kDAAmD,UAAU,EACzE,SAAUuC,GACV,SAAUH,EACZ,CAAC,EACD,gBAAY,KACV,+EACA,4BACF,EACA,cAAa34F,EAAA,GAAU,WAAW,OAAO,oBAAoB,iBAC/D,EACF,KACA,OAACtB,GAAA,GACC,SAAQ,GACR,SAAO,OAACq6F,GAAA,CAAiB,SAAUr3F,EAAA,CAAU,EAC7C,QAAS,CAAC,CAACq0C,GAAO,YAClB,MAAOA,GAAO,aAAa,QAE3B,mBAAC/2C,EAAA,GACE,GAAGu3F,GAAS,cAAe,CAAE,SAAU,EAAM,CAAC,EAC/C,gBAAY,KACV,qFACA,kCACF,EACA,UAAS,GACX,EACF,KAEA,OAAC73F,GAAA,EAAK,CAAC,SAAQ,GAAC,SAAO,KAAE,sDAAuD,QAAQ,EACtF,mBAACs6F,GAAA,GACC,SAAU,MAAO1tD,GAAyBx2C,KAA8B,CACtE4M,GAAS,SAAU,CAAE,IAAA4pC,GAAK,MAAAx2C,EAAM,CAAC,EACjC,MAAMk0B,GAAO,MAAMssE,GAAmBhqD,EAAG,EACzCxnB,GAAU,SAAS,CACjB,KAAM,CACJ,GAAGkF,GACH,UAAWsiB,EACb,CACF,CAAC,EAEDitD,GAAQ,OAAO,CACjB,EACA,MAAOX,GAAW,QAAQ,IAC5B,EACF,EACC,CAACzD,GAAW,UACX,OAACz1F,GAAA,EAAK,CAAC,SAAQ,GAAC,SAAO,KAAE,yDAA0D,WAAW,EAC5F,mBAAC3D,GAAA,EAAM,CAAE,GAAGw7F,GAAS,UAAU,EAAG,EACpC,KAEF,OAACtzD,GAAA,EAAG,CAAC,WAAY,EAAI,SAAAuxD,GAAa1kF,GAAM,KAAK,EAAE,GACjD,EACF,CAEJ,CAMO,SAAS+oF,GAAgBxiG,GAAwB,CACtD,SACE,OAAC2sC,EAAA,EAAK,CAAC,eAAe,gBACpB,mBAAClhC,GAAA,EAAK,CAAC,QAAQ,cACb,mBAAC,KAAK,CAAC,QAAQ,0CAA0C,iBAAK,EAChE,EAOF,CAEJ,CAMO,SAASi3F,GAAiB1iG,GAA8B,CAC7D,SACE,OAAC2sC,EAAA,EAAK,CAAC,eAAe,gBACpB,mBAAClhC,GAAA,EAAK,CAAC,QAAQ,cACb,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,uBAAW,EAC5E,EAOF,CAEJ,CAEA,eAAeg3F,GAAsBhkG,GAAe8iG,GAAoC,CACtF,GAAI9iG,KAAU8iG,GAAW,OAAO,OAAO,KAAK,EAC1C,MAAO,mDAGT,GAAI,CACF,aAAM,KAAc,yBAAyBA,GAAW,OAAO,KAAO,UAAW9iG,EAAK,EAC/E,EACT,OAASsI,GAAG,CACV,OAAOA,cAAa,MAAQA,GAAE,QAAU,2BAC1C,CACF,C,2ECpPO,SAAS,GAA6B,CAAE,UAAA0mB,GAAW,OAAAowE,GAAQ,WAAAC,EAAW,EAAU,CACrF,MAAM8E,MAAgB,WAAQ,IAAM,KAAK,UAAU9E,GAAW,iBAAkB,KAAM,CAAC,EAAG,CAACA,EAAU,CAAC,EAEhG+E,MAAa,eAAY,IAAM,CACnC,MAAM12B,GAAO,IAAI,KAAK,CAACy2B,EAAa,EAAG,CACrC,KAAM,gCACR,CAAC,KACD,WAAOz2B,GAAM2xB,GAAW,iBAAiB,MAAQ,IAAM,IAAI,KAAK,EAAE,QAAQ,EAAI,OAAO,CACvF,EAAG,CAACA,GAAW,iBAAkB8E,EAAa,CAAC,EAE/C,SACE,OAAC,OAAI,UAAW7hG,GAAO,UACrB,oBAAC4rC,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAAG,KAAM,EACtC,qBAAC,OACC,oBAAC,KAAK,CAAC,QAAQ,kEAAkE,4NAGjF,KACA,OAAC,OAAG,KACJ,OAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,2DAA2D,gBACpE,OACJ,OAACuR,GAAA,EAAQ,CAAC,KAAK,kFAAkF,SAAQ,GAAC,yBAE1G,EAAY,IAAI,4CAElB,EACF,KACA,OAAC,OAAG,EAAE,OAAC,OAAC,OAAG,KACX,QAAC,MACC,QAAQ,4DACR,OAAQ,CAAE,SAAUzwB,GAAU,MAAM,KAAK,qBAAsB,EAE/D,oBAAC,UAAO,sBAAU,EAAS,IAAE,gBAC/B,GACF,KAEA,OAAC4wE,GAA8B,CAAC,OAAAR,GAAgB,WAAAC,EAAA,CAAwB,KAExE,OAAC,OAAI,UAAW/8F,GAAO,KACrB,mBAAC,MAAS,CAAC,aAAY,GACpB,UAAC,CAAE,OAAAvC,EAAO,OACT,OAACskG,GAAA,GACC,MAAM,OACN,OAAAtkG,GACA,SAAS,OACT,gBAAiB,GACjB,YAAaokG,GAAc,OAAS,IACpC,MAAOA,GACP,SAAU,GACZ,EAEJ,EACF,KACA,OAACh2D,GAAA,EAAG,CAAC,WAAY,EACf,oBAACD,EAAA,EAAK,CAAC,IAAK,EACV,oBAAC3mC,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS63F,GAAO,QAAS,KAAK,UACxD,mBAAC,KAAK,CAAC,QAAQ,yDAAyD,kBAAM,EAChF,KACA,OAACkF,GAAA,EAAe,CAAC,KAAK,OAAO,QAAS,IAAMH,GAC1C,mBAAC,KAAK,CAAC,QAAQ,yEAAyE,kCAExF,EACF,KACA,OAAC58F,EAAA,GAAM,CAAC,KAAK,SAAS,QAAS68F,GAC7B,mBAAC,KAAK,CAAC,QAAQ,oEAAoE,6BAEnF,EACF,GACF,EACF,GACF,EACF,CAEJ,CAEA,MAAM9hG,GAAS,CACb,aAAW,QAAI,CACb,OAAQ,OACR,QAAS,MACX,CAAC,EACD,QAAM,QAAI,CACR,SAAU,EACV,UAAW,OACb,CAAC,CACH,ECjFO,MAAMiiG,WAA4B,IAA0C,CAA5E,kCACL,KAAO,QAAU,IAAM,CACrB,MAAMv1E,GAAY,KAAK,MAAM,aAAa,QAAQ,EAC5CqwE,GAAarwE,GAAU,oBAAoB,EACjDA,GAAU,SAAS,CACjB,QAAS,OAET,KAAMqwE,GAAW,MAAQrwE,GAAU,gBAAgB,GAAG,KAAOA,GAAU,MAAM,IAC/E,CAAC,CACH,EAEA,KAAO,sBAAwB,IAAM,CACnC,KAAK,SAAS,CAAE,cAAe,CAAC,KAAK,MAAM,aAAc,CAAC,CAC5D,EAEA,KAAO,sBAAwB,IAAM,CACnC,KAAK,SAAS,CAAE,cAAe,CAAC,KAAK,MAAM,aAAc,CAAC,CAC5D,EAEA,KAAO,oBAAsB,IAAM,CACjC,KAAK,SAAS,CAAE,YAAa,CAAC,KAAK,MAAM,WAAY,CAAC,CACxD,EAEA,MAAO,CAAP,KAAO,UAAYw1E,EAAA,CACrB,CAEA,SAASA,GAA6B,CAAE,MAAAz7E,EAAM,EAA6C,CACzF,KAAM,CAAE,SAAA07E,GAAU,WAAAC,GAAY,cAAA5E,GAAe,cAAAD,GAAe,YAAAE,EAAY,EAAIh3E,GAAM,SAAS,EAErFs2E,GAAat2E,GAAM,MAAM,aAAa,QAAQ,EAAE,oBAAoB+2E,GAAeD,GAAeE,EAAW,EAE7G,CAAE,iBAAAR,GAAkB,iBAAAoF,GAAkB,MAAAr2D,GAAO,UAAAs2D,GAAW,iBAAAC,GAAkB,gBAAAvF,EAAgB,EAAID,GAC9FyF,GAAeF,IAAaC,GAAmB,EAAI,GACnD71E,GAAYjG,GAAM,MAAM,aAAa,QAAQ,EAC7C,CAAE,KAAAmL,EAAK,EAAIlF,GAAU,SAAS,EAC9B,CAAE,YAAaylB,GAAe,YAAAswD,EAAY,EAAI7wE,GAC9C8wE,GAAgCh2E,GAAU,8BAA8B,EACxEi2E,GAAkB/B,GAAmBl0E,EAAS,EAE9C+2C,MACJ,QAAC7rB,EAAA,EAAO,CACN,oBAACC,EAAA,GACC,SAAO,KAAE,2DAA4D,SAAS,EAC9E,OAAQ,CAACsqD,GACT,YAAa,IAAM17E,GAAM,SAAS,CAAE,SAAU,EAAM,CAAC,EACvD,EACC+7E,GAAe,GAAK,CAACE,OACpB,OAAC7qD,EAAA,GACC,SAAO,KAAE,2DAA4D,SAAS,EAC9E,OAAQsqD,GACR,YAAa,IAAM17E,GAAM,SAAS,CAAE,SAAU,EAAK,CAAC,EACpD,QAAS+7E,EAAA,CACX,GAEJ,EAGF,IAAI9kG,MAAQ,KAAE,mDAAoD,gBAAgB,EAC9E0kG,GACF1kG,MAAQ,KAAE,wDAAyD,qBAAqB,GAC/Ey0C,IAAiBwwD,MAC1BjlG,MAAQ,KAAE,+DAAgE,uBAAuB,GAGnG,MAAMklG,GAAa,IACbT,MAEA,OAACU,EAAA,GACC,KAAM72D,GACN,SAAUq2D,GACV,SAAUpF,GACV,iBAAAsF,GACA,gBAAAvF,GACA,UAAWtwE,GAAU,gBAAgB,GAAG,KAAK,YAC7C,UAAW+1E,EAAA,CACb,EAIAE,MACK,OAACjC,GAAwB,CAAC,UAAAh0E,GAAsB,WAAAqwE,GAAwB,OAAQt2E,EAAA,CAAO,EAG5F27E,IAAcrF,GAAW,SACpB,OAACiE,GAAmB,CAAC,UAAAt0E,GAAsB,WAAAqwE,EAAA,CAAwB,EAGxE5qD,IAAiBuwD,MACZ,OAAC,GAA4B,CAAC,UAAAh2E,GAAsB,WAAAqwE,GAAwB,OAAQt2E,EAAA,CAAO,KAG7F,OAACo2E,GAAiB,CAAC,UAAAnwE,GAAsB,WAAAqwE,GAAwB,OAAQt2E,EAAA,CAAO,EAGzF,SACE,OAAConB,EAAA,EAAM,CAAC,MAAAnwC,GAAc,SAAUgvB,GAAU,MAAM,MAAO,QAASjG,GAAM,QAAS,KAAAg9C,GAC5E,SAAAm/B,GAAW,EACd,CAEJ,C,mGClBO,MAAME,EAEb,CAFO,cAKL,KAAU,gBAAkB,IAAI,IAChC,KAAU,uBAAyB,CACjC,OAAQ,IAAI,IACZ,UAAW,IAAI,IACf,YAAa,IAAI,GACnB,EAEA,yBAAyBtG,GAAkC,CACzD,KAAK,gBAAgB,MAAM,EAEvB,GAACA,IAAa,CAACA,GAAU,SAG7BA,GAAU,QAAQ,QAASljG,IAAU,CACnC,GAAIA,GAAM,GAAI,CACZ,MAAMi3B,MAAa,MAAyBj3B,GAAM,EAAE,EACpD,KAAK,gBAAgB,IAAIi3B,GAAYj3B,GAAM,EAAE,CAC/C,CACF,CAAC,CACH,CAEA,wBAAyB,CACvB,OAAO,KAAK,eACd,CAEA,8BAA8BkjG,GAAkC,CAE9D,MAAO,CAAC,CACV,CAEA,wBAAyB,CACvB,OAAO,KAAK,sBACd,CAEA,qBAAqBuG,GAAmB,CACtC,OAAO,KAAK,gBAAgB,IAAIA,EAAS,CAC3C,CAEA,qBAAqB54E,GAAiB,CAEpC,SAAW,CAAC44E,GAAWz/E,EAAE,IAAK,KAAK,gBAAgB,QAAQ,EACzD,GAAIA,KAAO6G,GACT,OAAO44E,GAKX,MAAMC,MAAe,MAAyB74E,EAAO,EAErD,YAAK,gBAAgB,IAAI64E,GAAc74E,EAAO,EACvC64E,EACT,CAEA,aAAaxmG,GAAmB,CAC9B,SAAOymG,GAAA,IAA0BzmG,EAAC,CACpC,CAEA,eAAeA,GAAmB/C,GAAiC,CACjE,MAAM+iG,GAAY,KAAK,aAAahgG,EAAC,EAErC,MAAO,CACL,GAAGggG,GACH,GAAI,KACJ,IAAK,GACL,MAAO/iG,GAAQ,OAAS,GACxB,YAAaA,GAAQ,aAAe,OACpC,KAAMA,GAAQ,OAASA,GAAQ,SAAW+iG,GAAU,KAAO,CAAC,CAC9D,CACF,CAEA,6BACE5sE,GACAn2B,GACA,CACA,MAAMwjG,GAAmB,KAAK,aAAartE,EAAK,EAC1CmtE,MAAa,OACjB,KAAK,iBACLE,GACAxjG,GAAQ,cACRA,GAAQ,cACRA,GAAQ,WACV,EAEM8oG,GAAmB3yE,GAAM,gBAAgB,GAAG,KAAK,YAAcA,GAAM,MAAM,KAAK,UAEtF,MAAO,CACL,GAAGmtE,GACH,iBAAAwF,GACA,WAAYxF,GAAW,YAAcwF,GACrC,gBAAiB,EACnB,CACF,CAEA,eAAe/F,GAAsB1kE,GAAwC,CAC3E,KAAK,iBAAmB,CACtB,GAAG0kE,GACH,GAAI1kE,GAAO,GACX,IAAKA,GAAO,IACZ,QAASA,GAAO,OAClB,EACA,KAAK,SAAW,CACd,GAAG,KAAK,SACR,IAAK,CACH,GAAG,KAAK,UAAU,IAClB,WAAYA,GAAO,OACrB,CACF,CACF,CAEA,gBAAiB,CACf,OAAO,KAAK,UAAU,GACxB,CAEA,wBAA4D,CAC1D,MAAMorE,GAAa,KAAK,kBAAkB,QAAQ,IAAKtqE,IAAMA,GAAE,IAAI,GAAK,CAAC,EACnExN,MAAS,OAAqB83E,EAAU,EACxCxmC,MAAY,OAAqB,KAAK,kBAAkB,YAAY,MAAQ,CAAC,CAAC,EAEpF,GAAI,KAAK,iBACP,MAAO,CACL,IAAK,KAAK,iBAAiB,IAC3B,MAAO,KAAK,iBAAiB,MAC7B,cAAe,KAAK,iBAAiB,cACrC,aAAc,KAAK,iBAAiB,QAAQ,QAAU,EACtD,kBAAmB,OACnB,iBAAkB,CAAC,CAAC,KAAK,iBAAiB,QAC1C,GAAGtxC,GACH,GAAGsxC,EACL,CAGJ,CAEA,yCAAqD,CAGrD,CAEA,gBAAiB,CACf,OAAO,KAAK,kBAAkB,UAAU,WAC1C,CAEA,MAAM,yBAAyBlgE,GAAmB,CAChD,MAAMggG,GAAY,KAAK,aAAahgG,EAAC,EAC/B2mG,GAAW,IAAIj2B,EAAA,EAAesvB,GAAW,OAAW,CACxD,sBAAuB,OACd4G,GAAA,GAA0B,OAAO,qBAAqB,CAEjE,CAAC,EACD,OAAO,QAAM,MAAiBD,EAAQ,CACxC,CACF,CAEO,MAAME,EAOb,CAPO,cAUL,KAAU,gBAAkB,IAAI,IAEhC,KAAU,uBAAyB,CACjC,OAAQ,IAAI,IACZ,UAAW,IAAI,IACf,YAAa,IAAI,GACnB,EAEA,wBAAyB,CACvB,OAAO,KAAK,eACd,CAEA,yBAAyB7G,GAAwC,CAG/D,GAFA,KAAK,gBAAgB,MAAM,EAEvB,CAACA,IAAa,CAACA,GAAU,SAC3B,OAGkB,OAAO,KAAKA,GAAU,QAAQ,EACtC,QAAS7+E,IAAQ,CAC3B,MAAM2lF,GAAe9G,GAAU,SAAS7+E,EAAG,EACvC2lF,GAAa,OAAS,SACxB,KAAK,gBAAgB,IAAI3lF,GAAK2lF,GAAa,KAAK,EAAE,CAEtD,CAAC,CACH,CAEA,8BAA8B9G,GAAwC,CAIpE,GAAIA,KAAc,QAAcA,IAAa,IAAC,OAAkBA,EAAS,EACvE,OAiCF,GA9BA,KAAK,uBAAyB,CAC5B,OAAQ,IAAI,IACZ,UAAW,IAAI,IACf,YAAa,IAAI,GACnB,EAGoB,OAAO,KAAKA,IAAW,UAAY,CAAC,CAAC,EAC7C,QAAS7+E,IAAQ,CAC3B,MAAM2lF,GAAe9G,IAAW,SAAS7+E,EAAG,EAC5C,GAAI2lF,IAAc,OAAS,QAAS,CAElC,MAAMC,GAAeD,GAAa,KAAK,KAAK,KAAK,QAEjD,UAAWj1E,MAASk1E,GAClB,GAAI,CAACl1E,GAAM,KAAK,MAAM,YAAY,KAAM,CACtC,MAAM00E,GAAY,KAAK,qBAAqBO,GAAa,KAAK,EAAE,EAC3D,KAAK,uBAAuB,OAAO,IAAIP,EAAS,GACnD,KAAK,uBAAuB,OAAO,IAAIA,GAAW,IAAI,GAAK,EAGtC,KAAK,uBAAuB,OAAO,IAAIA,EAAS,EAExD,IAAI10E,GAAM,KAAK,KAAK,CACrC,CAEJ,CACF,CAAC,EAGGmuE,IAAW,UACb,UAAWxiG,MAAYwiG,GAAU,UAE3BxiG,GAAS,OAAS,iBAAmB,CAACA,GAAS,KAAK,MAAM,YAAY,MACxE,KAAK,uBAAuB,UAAU,IAAIA,GAAS,KAAK,IAAI,EAMlE,GAAIwiG,IAAW,YACb,UAAW73E,MAAc63E,GAAU,YAC5B73E,GAAW,KAAK,OAAO,YAAY,MACtC,KAAK,uBAAuB,YAAY,IAAIA,GAAW,KAAK,IAAI,CAIxE,CAEA,wBAAyB,CACvB,OAAO,KAAK,sBACd,CAEA,qBAAqBo+E,GAAmB,CACtC,OAAO,KAAK,gBAAgB,IAAIA,EAAS,CAC3C,CAEA,qBAAqB54E,GAAiB,CAEpC,SAAW,CAAC44E,GAAWz/E,EAAE,IAAK,KAAK,gBAAgB,QAAQ,EACzD,GAAIA,KAAO6G,GACT,OAAO44E,GAKX,MAAMC,MAAe,MAAyB74E,EAAO,EAErD,YAAK,gBAAgB,IAAI64E,GAAc74E,EAAO,EACvC64E,EACT,CAEA,aAAaxmG,GAAmB,CAC9B,SAAOgnG,GAAA,IAAkChnG,EAAC,CAC5C,CAEA,eAAeA,GAAmB/C,GAAiC,CACjE,MAAM+iG,GAAY,KAAK,aAAahgG,EAAC,EACrC,MAAO,CACL,GAAGggG,GACH,MAAO/iG,GAAQ,OAAS,GACxB,YAAaA,GAAQ,aAAe,GACpC,KAAMA,GAAQ,OAASA,GAAQ,SAAW+iG,GAAU,KAAO,CAAC,CAC9D,CACF,CAEA,6BACE5sE,GACAn2B,GACA,CACA,MAAMwjG,GAAmB,KAAK,aAAartE,EAAK,EAC1CmtE,MAAa,OACjB,KAAK,iBACLE,GACAxjG,GAAQ,cACRA,GAAQ,cACRA,GAAQ,WACV,EAEM8oG,GAAmB3yE,GAAM,gBAAgB,GAAG,KAAK,YAAcA,GAAM,MAAM,KAAK,UAChF2uE,GAAQ,CAAS3uE,GAAM,gBAAgB,GAAG,IAEhD,MAAO,CACL,GAAGmtE,GACH,iBAAAwF,GACA,WAAYxF,GAAW,YAAcwF,GACrC,MAAAhE,GACA,gBAAiB,CAAC,CAACxB,GAAW,eAChC,CACF,CAEA,eAAeP,GAA4B1kE,GAAwC,CACjF,KAAK,iBAAmB,CACtB,GAAG0kE,EACL,EACI,KAAK,WACP,KAAK,SAAW,CACd,GAAG,KAAK,SACR,WAAY1kE,GAAO,OACrB,EAEJ,CAEA,gBAAiB,CACf,OAAO,KAAK,QACd,CAEA,uBAAuBt7B,GAAsD,CAC3E,GAAI,CAAC,KAAK,iBACR,OAGF,MAAMinG,GACJ,aAAc,KAAK,iBACf,OAAO,OAAO,KAAK,iBAAiB,QAAQ,EAAE,OAAiB,CAACnwF,GAAKtN,MAC/DA,GAAE,OAAS,SAIfsN,GAAI,KAAKtN,GAAE,KAAK,UAAU,KAAK,EAExBsN,IACN,CAAC,CAAC,EACL,CAAC,EACD8X,MAAS,OAAqBq4E,EAAc,EAC5C/mC,GACJ,cAAe,KAAK,oBAAoB,OAAqB,KAAK,iBAAiB,SAAS,EAAI,CAAC,EAEnG,MAAO,CACL,cAAe,MACf,IAAKlgE,GAAE,MAAM,IACb,MAAO,KAAK,iBAAiB,MAC7B,aAAcinG,GAAe,QAAU,EACvC,kBAAmB,OACnB,iBAAkB,CAAC,CAAC,KAAK,iBAAiB,QAC1C,GAAGr4E,GACH,GAAGsxC,EACL,CACF,CAEA,yCAA4F,CAC1F,GAAI,CAAC,KAAK,kBAAoB,IAAC,OAAkB,KAAK,gBAAgB,EACpE,OAGF,MAAMgnC,GAAoE,CAAC,EACrE5rE,GAAS,KAAK,+BAClB,CACE,gBAAiB,EACjB,sBAAuB,EACvB,gBAAiB,EACjB,gBAAiB,EACjB,WAAY,EACZ,SAAU,EACV,SAAU,EACV,gBAAiB,EACjB,4BAA6B,EAC7B,cAAA4rE,EACF,EACA,KAAK,iBAAiB,OACtB,EACAA,EACF,EAEA,MAAO,CACL,GAAG5rE,GACH,cAAe,KAAK,UAAUA,GAAO,aAAa,EAClD,sBAAuB,KAAK,iBAAiB,WAAW,QAAU,EAClE,uBAAwB,OAAO,OAAO,KAAK,iBAAiB,QAAQ,EAAE,OACpE,CAAC6rE,GAAW,CAAE,KAAA5pE,GAAM,KAAM6pE,EAAU,IAC9B7pE,KAAS,QACJ4pE,GAGFC,GAAU,KAAK,KAAK,QAAQ,OAAO,CAACC,GAAY,CAAE,KAAMC,EAAU,KAClEA,GAAU,MAAM,aAIrBD,GAAWC,GAAU,MAAM,KAAK,EAAID,GAAWC,GAAU,MAAM,KAAK,GAAK,EACzED,GAAWC,GAAU,MAAM,KAAK,KAEzBD,IACNF,EAAS,EAEd,CAAC,CACH,CACF,CACF,CAEA,gBAAiB,CACf,OAAO,KAAK,UAAU,cAAc,IAAmC,CACzE,CAEA,MAAM,yBAAyBnnG,GAAmB,CAChD,OAAO,QAAM,MAAiB,KAAK,aAAaA,EAAC,CAAC,CACpD,CAEQ,+BACNs7B,GACArN,GACAs5E,GACAC,GACmD,CAGnD,OAFAlsE,GAAO,gBAAkB,KAAK,IAAIA,GAAO,gBAAiBisE,EAAY,EAE9Dt5E,GAAO,KAAM,CACnB,IAAK,aACH,OAAAqN,GAAO,wBACPA,GAAO,YAAcrN,GAAO,KAAK,MAAM,OACvCu5E,GAAgB,KAAK,GAAGv5E,GAAO,KAAK,MAAM,IAAI,KAAO,CAAE,KAAM,OAAQ,EAAE,CAAC,EACjEqN,GAET,IAAK,iBACH,OAAAA,GAAO,kBACPA,GAAO,YAAcrN,GAAO,KAAK,MAAM,OACvCu5E,GAAgB,KAAK,GAAGv5E,GAAO,KAAK,MAAM,IAAI,KAAO,CAAE,KAAM,OAAQ,EAAE,CAAC,EACxEqN,GAAO,4BAA8BrN,GAAO,KAAK,MAAM,OACrD,CAACnX,GAAKtI,KAASsI,IAAOtI,GAAK,KAAK,sBAAsB,MAAM,OAAO,QAAU,GAC7E8sB,GAAO,2BACT,EACOA,GAET,IAAK,aACHA,GAAO,kBACPA,GAAO,UAAYrN,GAAO,KAAK,KAAK,OACpC,MAAMw5E,GAAmBF,GAAe,EACxC,OAAOt5E,GAAO,KAAK,KAAK,OAAO,CAACnX,GAAK2S,KAAQ,CAC3C3S,GAAI,6BAA+B2S,GAAI,KAAK,sBAAsB,MAAM,OAAO,QAAU,EACzF,MAAM5mB,GAA+D,CAAC,EACtE,OAAA2kG,GAAgB,KAAK,CAAE,KAAM,MAAO,SAAA3kG,EAAS,CAAC,EACtC4mB,GAAI,KAAK,OAEb,KAAK,+BAA+B3S,GAAK2S,GAAI,KAAK,OAAQg+E,GAAkB5kG,EAAQ,EADpFiU,EAEN,EAAGwkB,EAAM,EAEX,IAAK,aACHA,GAAO,kBACPA,GAAO,UAAYrN,GAAO,KAAK,KAAK,OACpC,MAAMy5E,GAAmBH,GAAe,EACxC,OAAOt5E,GAAO,KAAK,KAAK,OAAO,CAACnX,GAAK+vD,KAAQ,CAC3C/vD,GAAI,6BAA+B+vD,GAAI,KAAK,sBAAsB,MAAM,OAAO,QAAU,EACzF,MAAMhkE,GAA+D,CAAC,EACtE,OAAA2kG,GAAgB,KAAK,CAAE,KAAM,MAAO,SAAA3kG,EAAS,CAAC,EACtCgkE,GAAI,KAAK,OAEb,KAAK,+BAA+B/vD,GAAK+vD,GAAI,KAAK,OAAQ6gC,GAAkB7kG,EAAQ,EADpFiU,EAEN,EAAGwkB,EAAM,EAEX,QACE,OAAOA,EACX,CACF,CACF,CAmBO,SAASqsE,GACdr5D,GAMA,CACA,OAAIA,KAAY,KACP,IAAIu4D,GAGN,IAAIP,EACb,C,mJCtlBO,MAAMsB,EAAmC,CAIvC,YAAoBC,GAAwB,CAAxB,YAAAA,GAH3B,KAAO,OAAS,IAAIl3B,GAAA,EACpB,KAAQ,MAAQ,IAAI10D,GAAA,GAGlB,MAAMlG,GAAY,KAAW,aAAa8xF,EAAM,EAGhD,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAE3C,KAAK,MAAM,IACT9xF,GAAU,iBAAiB,CAACmG,GAAO3Z,KAAS,CACtC2Z,GAAM,QAAU3Z,GAAK,OACvB,KAAK,OAAO,QAAQ,IAAI,KAAsB2Z,GAAM,KAAK,CAAC,CAE9D,CAAC,CACH,CACF,CAEA,IAAW,IAAoB,CAC7B,OAAO,KAAK,OAAO,MAAM,IAAM,IACjC,CAEA,IAAW,KAAM,CACf,OAAO,KAAK,OAAO,MAAM,KAAO,IAClC,CAEA,IAAW,OAAQ,CACjB,OAAO,KAAK,OAAO,MAAM,KAC3B,CAEA,IAAW,aAAc,CACvB,OAAO,KAAK,OAAO,MAAM,WAC3B,CAEA,IAAW,UAAW,CACpB,OAAO,KAAK,OAAO,MAAM,QAC3B,CAEA,IAAW,cAAe,CACxB,OAAO,KAAK,aAAa,CAC3B,CAEA,IAAW,YAAa,CACtB,MAAO,CACL,kBAAmB,KAAK,OAAO,MAAM,SAAU,MAAM,cAAc,MAAM,UACzE,OAAQ,KAAK,OAAO,MAAM,SAAU,MAAM,kBAAoB,EAChE,CACF,CAEA,IAAW,UAAW,CACpB,OAAO,KAAK,YAAY,CAC1B,CAEA,IAAW,WAAY,CACrB,OAAO,KAAW,aAAa,KAAK,MAAM,EAAE,MAAM,SACpD,CAEA,IAAW,MAAO,CAChB,OAAO,KAAK,OAAO,MAAM,IAC3B,CAEA,IAAW,OAAQ,CACjB,OAAO,KAAK,OAAO,MAAM,KAC3B,CAEA,IAAW,MAAO,CAChB,OAAO,KAAK,OAAO,MAAM,IAC3B,CAEA,IAAW,MAAO,CAChB,MAAMzR,GAAO,KAAW,aAAa,KAAK,MAAM,EAChD,MAAO,CACL,KAAMA,GAAK,MAAM,KACjB,GAAIA,GAAK,MAAM,EACjB,CACF,CAEA,IAAW,QAAS,CAIlB,OAHeq9F,GAAe,KAAK,OAASpuG,IAC3BA,cAAa,IAC7B,EACa,IAAK0iC,IAAM,IAAI2rE,GAAA,EAA+B3rE,EAAa,CAAC,CAC5E,CAKA,IAAW,aAA2C,CACpD,MAAMwvB,GAA2C,CAAE,KAAM,CAAC,CAAE,EAE5D,OAAI,KAAK,OAAO,MAAM,iBAAiBo8C,GAAA,IACrCp8C,GAAY,QAAOq8C,GAAA,GAAwB,KAAK,OAAO,MAAM,MAAM,MAAM,gBAAgB,GAGpFr8C,EACT,CAEO,aAAc,CAEnB,OADa,KAAW,aAAa,KAAK,MAAM,EACpC,YAAY,CAC1B,CAEO,0BAA2B,CAChC,OAAO,KAAK,aAAa,EAAI,CAC/B,CAEO,yBAA0B,CAC/B,OAAO,KAAK,aAAa,IAAM,CACjC,CAEQ,cAAe,CACrB,GAAI,KAAK,OAAO,MAAM,YACpB,UAAWz8B,MAAY,KAAK,OAAO,MAAM,WACvC,GAAIA,cAAoB,QACtB,OAAOA,GAAS,MAAM,KAK5B,OAAO,KAAoB,GAC7B,CAEO,uBAAuBryB,GAAgB,CAC5C,MAAO,EACT,CAEO,WAAWy2E,GAAqBC,GAAiB,CACtD,SAAO,OAAeD,GAAM,CAC1B,OAAAC,GACA,SAAU,KAAK,YAAY,CAC7B,CAAC,CACH,CAEO,aAAa1sD,GAAmD,CACrE,MAAM4G,MAAW,MAAkB,KAAK,UAAQ,MAAyB5G,EAAE,CAAC,EAC5E,OAAI4G,GACK,IAAIq6E,GAAA,EAA+Br6E,EAAQ,EAG7C,IACT,CAKO,YAAY5wB,GAAuC,CACxD,MAAM4wB,MAAW,MAAkB,KAAK,UAAQ,MAAyB5wB,GAAM,EAAE,CAAC,EAClF,GAAI,CAAC4wB,GAAU,CACb,QAAQ,MAAM,uDAAwD5wB,EAAK,EAC3E,MACF,CAEA,KAAK,OAAO,YAAY4wB,EAAQ,CAClC,CAEO,mBAAmBmpB,GAAuB,CAC/C,OAAK,KAAK,OAAO,iBAAiB,EAI9BA,GACK,EAAQ,KAAK,OAAO,MAAM,KAAK,wBAAwB,UAAU,QAGnE,EAAQ,KAAK,OAAO,MAAM,KAAK,wBAAwB,aAAa,QAPlE,EAQX,CAEO,kBAAmB,CAAC,CAEpB,SAAU,CACf,KAAK,OAAO,mBAAmB,EAC/B,KAAK,MAAM,YAAY,CACzB,CAEO,mBAAoB,CACzB,OAAO,KAAK,OAAO,MAAM,OAC3B,CACF,CAEA,SAASixD,GAAezyE,GAAmB+yC,GAAoC,CAC7E,IAAI9sC,GAAwB,CAAC,EAC7B,OAAAjG,GAAK,aAAclI,IAAU,CACvBi7C,GAAMj7C,EAAK,EACbmO,GAAO,KAAKnO,EAAK,EAEjBmO,GAASA,GAAO,OAAOwsE,GAAe36E,GAAOi7C,EAAK,CAAC,CAEvD,CAAC,EAEM9sC,EACT,C,uCChMO,MAAM4sE,WAA6B,IAA2C,CACnF,YAAYhsF,GAAoD,CAC9D,MAAM,CACJ,GAAGA,GACH,SAAU,EACZ,CAAC,EAUH,KAAO,QAAU,IAAM,CACrB,KAAK,MAAM,aAAa,QAAQ,EAAE,SAAS,CAAE,QAAS,MAAU,CAAC,CACnE,EAEA,KAAQ,OAAS,IAAM,CAUvB,EAtBE,KAAK,qBAAqB,IAAM,KAAK,SAAS,CAAE,SAAU,KAAK,YAAY,CAAE,CAAC,CAAC,CACjF,CAEQ,aAAsB,CAC5B,MAAMgU,GAAY,KAAK,MAAM,aAAa,QAAQ,EAClD,OAAO,KAAK,aAAU82E,GAAA,IAAkC92E,EAAS,EAAG,KAAM,CAAC,CAC7E,CAkBA,MAAO,CAAP,KAAO,UAAY,CAAC,CAAE,MAAAjG,EAAM,IAAiD,CAC3E,KAAM,CAAE,SAAAk+E,EAAS,EAAIl+E,GAAM,SAAS,EAC9BzmB,MAAS,OAAWuD,EAAS,EAE7Bq/F,GAAa,OAEf,QAAC,OAAI,UAAW5iG,GAAO,QACrB,oBAAC+hG,GAAA,GACC,MAAM,OACN,MAAO4C,GACP,SAAS,OACT,gBAAiB,GACjB,YAAa,GACb,gBAAiB3kG,GAAO,WACxB,OAAS/J,IAAUwwB,GAAM,SAAS,CAAE,SAAUxwB,EAAM,CAAC,EACvD,KACA,OAAC41C,GAAA,EAAG,CAAC,WAAY,EAEb,mBAAC5mC,EAAA,GAAM,CAAC,QAASwhB,GAAM,OAAQ,SAAQ,GAAC,4BAExC,EAEJ,GACF,EAIJ,SACE,OAAConB,EAAA,GACC,MAAO,yBACP,SAAU,6EACV,QAASpnB,GAAM,QAEd,SAAAm8E,GAAW,EACd,CAEJ,EACF,CAEA,MAAMr/F,GAAanF,KAA0B,CAC3C,WAAS,QAAI,CACX,QAAS,OACT,OAAQ,OACR,cAAe,SACf,IAAKA,GAAM,QAAQ,CAAC,CACtB,CAAC,EACD,cAAY,QAAI,CACd,SAAU,CACZ,CAAC,CACH,G,sCC7EO,MAAMwmG,WAA8B,IAA4C,CAAhF,kCACL,KAAO,QAAU,IAAM,IACrB,MAAqB,IAAI,EAAE,WAAW,CACxC,EAEA,KAAO,kBAAqBC,IAA4B,CACtD,MAAMn4E,MAAY,MAAqB,IAAI,EACrC7B,MAAW,MAAmB,EAEpCA,GAAS,SAAS,CAEhB,MAAOg6E,GAAU,MAAM,MACvB,YAAa,CAACA,GAAU,MAAM,MAC9B,WAAY,CAAC,IAAI3jE,GAAA,EAAqB,CAAE,IAAK2jE,GAAU,IAAK,KAAMA,GAAU,IAAK,CAAC,CAAC,CACrF,CAAC,EAED,MAAMC,GAAiB,KAAK,MAAM,mBAAmB,QAAQ,EAE7D,GAAIA,GAAgB,CAClB,MAAMl0C,GAAak0C,GAAe,OAE9Bl0C,OAAc,MAAsBA,EAAU,IAGhD/lC,GAAS,SAAS,CAAE,IAAKi6E,GAAe,MAAM,GAAI,CAAC,EACnDl0C,GAAW,eAAe/lC,EAAQ,EAEtC,MACE6B,GAAU,SAAS7B,EAAQ,EAG7B,KAAK,QAAQ,CACf,EAEA,MAAO,CAAP,KAAO,UAAY,CAAC,CAAE,MAAApE,EAAM,IAAkD,CAC5E,MAAM/oB,MAAQ,KAAE,iCAAkC,8BAA8B,EAEhF,SACE,OAACmwC,EAAA,EAAM,CAAC,MAAAnwC,GAAc,QAAS+oB,GAAM,QACnC,mBAACs+E,GAAA,GACC,QAASt+E,GAAM,kBACf,QAASs+E,GAAA,EAA2B,MACpC,gBAAe,GACjB,EACF,CAEJ,EACF,C,gBCxDO,SAASC,GAAsBp1E,GAAkD,CACtF,MAAO,0BAA2BA,IAASA,GAAM,wBAA0B,EAC7E,CCCO,MAAMq1E,WAAoC,IAAkD,CAM1F,aAAc,CACnB,MAAM,CAAC,CAAC,EANV,KAAQ,kBAAgD,KACxD,KAAQ,gBAA8C,KACtD,KAAQ,oBAAmB,MAAsB,EACjD,KAAQ,kBAAoB,GAK1B,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EAEzD,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CAEQ,oBAAqB,CAC3B,MAAO,IAAM,CACX,SAAS,KAAK,oBAAoB,cAAe,KAAK,cAAc,EACpE,SAAS,KAAK,oBAAoB,YAAa,KAAK,iBAAiB,CACvE,CACF,CAEO,kBAAkBp/F,GAAwBvM,GAAuB,CACtE,KAAK,iBAAiB,IAAIuM,EAAG,EAC7B,KAAK,kBAAoB,GAEzB,MAAMq/F,GAAa,KAAW,WAAW5rG,GAAO0rG,EAAqB,EAEjE,CAACE,IAAc,CAACF,GAAsBE,EAAU,IAIpD,KAAK,kBAAoBA,GACzB,KAAK,gBAAkBA,GAEvB,SAAS,KAAK,iBAAiB,cAAe,KAAK,cAAc,EACjE,SAAS,KAAK,iBAAiB,YAAa,KAAK,iBAAiB,EAElE,KAAK,SAAS,CAAE,cAAe5rG,GAAM,OAAO,CAAE,CAAC,EACjD,CAEQ,kBAAkB6rG,GAAoB,CAC5C,MAAM7rG,GAAQ,KAAK,MAAM,eAAe,QAAQ,EAE5C,KAAK,oBAAsB,KAAK,iBAGlC,WAAW,IAAM,CACf,KAAK,mBAAmB,sBAAsBA,EAAM,EACpD,KAAK,iBAAiB,qBAAqBA,EAAM,CACnD,CAAC,EAGH,SAAS,KAAK,oBAAoB,cAAe,KAAK,cAAc,EACpE,SAAS,KAAK,oBAAoB,YAAa,KAAK,iBAAiB,EAErE,KAAK,SAAS,CAAE,cAAe,MAAU,CAAC,CAC5C,CAEQ,eAAeuM,GAAmB,CACxC,GAAI,CAAC,KAAK,mBAAqB,KAAK,MAAM,eAAiB,KAAK,iBAAiB,MAAMA,EAAG,EAAG,CAC3F,KAAK,kBAAoB,GACzB,MAAMvM,GAAQ,KAAK,MAAM,eAAe,QAAQ,EAChD,KAAK,cAAc,EAAE,MAAM,SAAS,aAAaA,GAAOA,GAAM,MAAM,IAAM,CAAE,MAAO,GAAM,MAAO,EAAM,CAAC,CACzG,CAEA,MAAM4rG,GAAa,KAAK,yBAAyBr/F,EAAG,GAAK,KAAK,kBAEzDq/F,IAIDA,KAAe,KAAK,kBACtB,KAAK,iBAAiB,kBAAkB,EAAK,EAC7C,KAAK,gBAAkBA,GAEnBA,KAAe,KAAK,mBACtBA,GAAW,kBAAkB,EAAI,EAGvC,CAEQ,eAAgC,CACtC,GAAI,EAAE,KAAK,kBAAkB/jE,IAC3B,MAAM,IAAI,MAAM,gCAAgC,EAGlD,OAAO,KAAK,MACd,CAEQ,yBAAyBt7B,GAA6C,CAC5E,MAAMu/F,GAAqB,SAAS,kBAAkBv/F,GAAI,QAASA,GAAI,OAAO,EAK9E,GAJ+Bu/F,GAAmB,KAC/CvhG,IAAOA,GAAG,aAAa,gCAAgC,IAAM,KAAK,mBAAmB,MAAM,GAC9F,EAGE,OAAO,KAGT,MAAM8Z,GAAMynF,IACR,KAAM/vB,IAAYA,GAAQ,aAAa,gCAAgC,CAAC,GACxE,aAAa,gCAAgC,EAEjD,GAAI,CAAC13D,GACH,OAAO,KAGT,MAAMs9E,GAAc,KAAW,UAAU,KAAK,cAAc,EAAGt9E,EAAG,EAElE,MAAI,CAACs9E,IAAe,CAAC+J,GAAsB/J,EAAW,EAC7C,KAGFA,EACT,CACF,C,uLCtHO,SAASoK,GAAiBC,GAA2C,CAC1E,KAAM,CAAC5sF,GAAO6sF,EAAQ,KAAI,YAA6B,CAAC,CAAC,EAEnDC,GAAuB3/F,IAA0B,CAChDy/F,GAAgB,cAIrBC,GAAS,CAAE,WAAY,GAAM,aAAcD,GAAgB,uBAAuB,EAAE,YAAa,CAAC,CACpG,EAEMG,GAAc,IAAM,CACpB/sF,GAAM,OACR4sF,GAAgB,aAAc5sF,GAAM,YAAa,EAGnD6sF,GAAS,CAAC,CAAC,CACb,EAEMG,MAAiB,WAAQ,IACrB7tG,IAAiC,CACvCA,IAAK,MAAM,EACXA,IAAK,OAAO,CACd,EACC,CAAC,CAAC,EAEC8tG,GAAgB9/F,IAA6C,CACjE,MAAMiyB,GAASwtE,GAAgB,aAAcz/F,GAAI,OAAO,KAAK,EACzDiyB,IAAQ,aACVytE,GAAS,CAAE,GAAG7sF,GAAO,MAAOof,GAAO,YAAa,CAAC,EACxCpf,GAAM,OACf6sF,GAAS,CAAE,GAAG7sF,GAAO,MAAO,MAAU,CAAC,CAE3C,EAEMktF,GAAkB//F,IAA6B,CAC/CA,GAAI,MAAQ,SACd4/F,GAAY,CAEhB,EAEA,MAAO,CACL,WAAY/sF,GAAM,WAClB,oBAAA8sF,GACA,eAAAE,GACA,aAAAC,GACA,YAAAF,GACA,eAAAG,EACF,CACF,CCtCO,SAASC,GAAiB,CAAE,SAAAC,EAAS,EAAU,CACpD,MAAMp5E,MAAY,MAAqBo5E,EAAQ,EAE/C,SACE,OAACj6D,GAAA,EAAG,CAAC,QAAS,EAAG,IAAK,EAAG,QAAQ,OAAO,UAAU,SAAS,QAAQ,KAAK,KAAK,OAAO,SAAS,WAC3F,mBAACk6D,GAAA,CAAqB,YAAar5E,GAAW,SAAAo5E,GAAoB,MAAO,EAAG,MAAO,EAAG,EACxF,CAEJ,CASA,SAASC,GAAqB,CAAE,YAAA9K,GAAa,SAAA6K,GAAU,MAAAE,GAAO,MAAAn+F,EAAM,EAA8B,CAChG,MAAM7H,MAAS,OAAW,EAAS,EAC7B,CAAE,IAAA2d,EAAI,EAAIs9E,GAAY,SAAS,EAC/B,CAACgL,GAAaC,EAAc,KAAI,YAASF,GAAQ,CAAC,EAClD,CAAE,WAAAzmG,GAAY,SAAA+nF,EAAS,KAAI,MAAoB3pE,EAAG,EAClDwoF,MAAW,WAAQ,OAAM,MAAuBlL,EAAW,EAAG,CAACA,EAAW,CAAC,EAC3EqK,MAAkB,WAAQ,OAAM,MAAsBrK,EAAW,EAAI,CAACA,EAAW,CAAC,EAElFmL,MAAc,KAAE,uCAAwC,YAAY,EAEpE/mG,GAAWimG,GAAgB,qBAAqB,GAAK,CAAC,EACtDe,GAAcf,GAAgB,uBAAuB,EACrDgB,GAAeD,GAAY,eAAiB,GAAKD,GAAcC,GAAY,aAC3EE,GAAgBlB,GAAiBC,EAAe,EAChDkB,GAAc,EAAAlB,GAAgB,mBAE9BmB,GAAiBzgG,IAAwB,CAC7CA,GAAE,gBAAgB,EAGbzG,IACH+nF,KAAWthF,EAAC,EAGds/F,GAAgB,iBAAiB,EACjC,KAAsB,mBAAmB,CAAE,MAAAz9F,GAAO,MAAAm+F,EAAM,CAAC,CAC3D,EAEMU,GAAoB7gG,IAA0B,CAClDA,GAAI,gBAAgB,EACpBqgG,GAAe,CAACD,EAAW,CAC7B,EAEA,SAGE,QAAC,MACC,KAAK,WACL,gBAAe1mG,GACf,UAAWS,GAAO,UAClB,QAASymG,GACT,MAAO,CAAE,UAAWT,EAAM,EAE1B,qBAAC,OAAI,aAAW,OAAGhmG,GAAO,IAAK,CAAE,CAACA,GAAO,WAAW,EAAGT,EAAW,CAAC,EACjE,oBAAC,OAAI,UAAWS,GAAO,YAAa,EACnCwmG,OACC,OAAC,UACC,UAAWxmG,GAAO,YAClB,QAAS0mG,GACT,cAAa99F,EAAA,GAAU,WAAW,YAAY,QAAQ,KAAK09F,EAAY,EAEvE,mBAACnnG,GAAA,EAAI,CAAC,KAAM8mG,GAAc,cAAgB,aAAc,EAC1D,KAEF,QAAC,UACC,aAAW,OAAGjmG,GAAO,SAAU,CAAE,CAACA,GAAO,aAAa,EAAGmmG,EAAS,CAAC,EACnE,cAAeI,GAAc,oBAC7B,cAAa39F,EAAA,GAAU,WAAW,YAAY,QAAQ,KAAK09F,EAAY,EAEvE,oBAACnnG,GAAA,EAAI,CAAC,KAAK,KAAK,KAAMknG,GAAY,KAAM,EACvCE,GAAc,cACb,OAAC,SACC,IAAKA,GAAc,eACnB,KAAK,OACL,MAAOF,GAAY,aACnB,UAAWrmG,GAAO,aAClB,SAAUumG,GAAc,aACxB,OAAQA,GAAc,YACtB,UAAWA,GAAc,eAC3B,KAEA,oBACE,qBAAC36D,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,GAAK,WAAW,SAAS,KAAM,EACzD,oBAAC,QAAM,SAAA06D,EAAA,CAAa,EACnBD,GAAY,aAAY,OAAClnG,GAAA,EAAI,CAAC,KAAK,YAAY,KAAK,KAAK,UAAWa,GAAO,WAAY,GAC1F,EACCmmG,OACC,OAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,kBAAM,EACzD,GAEJ,GAEJ,GACF,EAECK,IAAe,CAACP,OACf,OAAC,MAAG,UAAWjmG,GAAO,aAAc,KAAK,QACtC,SAAAX,GAAS,OAAS,EACjBA,GAAS,IAAI,CAACsqB,GAAO5sB,QACnB,OAACgpG,GAAA,CAEC,YAAap8E,GACb,SAAAm8E,GACA,MAAOE,GAAQ,EACf,MAAOjpG,EAAA,EAJF4sB,GAAM,MAAM,GAKnB,CACD,KAED,OAACmiB,GAAA,EAAI,CAAC,MAAM,YAAY,QAAQ,KAC9B,mBAAC,KAAK,CAAC,QAAQ,oCAAoC,mBAAO,EAC5D,EAEJ,GAEJ,CAEJ,CAEA,SAAS,GAAU1tC,GAAsB,CACvC,MAAO,CACL,aAAW,QAAI,CACb,QAAS,OACT,IAAKA,GAAM,QAAQ,EAAG,EACtB,SAAU,EACV,cAAe,SACf,aAAcA,GAAM,MAAM,OAAO,QACjC,MAAOA,GAAM,OAAO,KAAK,SAC3B,CAAC,EACD,qBAAmB,QAAI,CACrB,QAAS,cAAcA,GAAM,OAAO,QAAQ,MAAM,cAClD,cAAe,MACf,MAAOA,GAAM,OAAO,KAAK,OAC3B,CAAC,EACD,OAAK,QAAI,CACP,QAAS,OACT,IAAKA,GAAM,QAAQ,EAAG,EACtB,aAAcA,GAAM,MAAM,OAAO,QAEjC,UAAW,CACT,MAAOA,GAAM,OAAO,KAAK,QACzB,QAAS,cAAcA,GAAM,OAAO,OAAO,MAAM,GACjD,gBAAiBA,GAAM,OAAO,UAAUA,GAAM,OAAO,WAAW,QAAS,GAAI,CAC/E,CACF,CAAC,EACD,eAAa,QAAI,CACf,MAAOA,GAAM,OAAO,KAAK,QACzB,QAAS,cAAcA,GAAM,OAAO,QAAQ,MAAM,cAClD,gBAAiBA,GAAM,OAAO,UAAUA,GAAM,OAAO,WAAW,QAAS,GAAI,CAC/E,CAAC,EACD,eAAa,QAAI,CACf,WAAY,uBAAuBA,GAAM,QAAQ,CAAC,CAAC,GACrD,CAAC,EACD,eAAa,QAAI,CACf,UAAW,OACX,OAAQ,OACR,WAAY,cACZ,aAAcA,GAAM,MAAM,OAAO,QACjC,QAAS,EACT,MAAO,UACP,WAAY,CACd,CAAC,EACD,YAAU,QAAI,CACZ,UAAW,OACX,OAAQ,OACR,WAAY,cACZ,QAAS,EACT,aAAcA,GAAM,MAAM,OAAO,QACjC,MAAO,UACP,QAAS,OACT,SAAU,EACV,WAAY,SACZ,IAAKA,GAAM,QAAQ,EAAG,EACtB,SAAU,SACV,SAAU,CACR,WAAY,SACZ,SAAU,SACV,aAAc,UAChB,CACF,CAAC,EACD,cAAY,QAAI,CACd,MAAOA,GAAM,OAAO,KAAK,UACzB,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,iBAAe,QAAI,CACjB,MAAOA,GAAM,OAAO,KAAK,UACzB,OAAQ,aACV,CAAC,EACD,gBAAc,QAAI,CAChB,OAAQ,aAAaA,GAAM,WAAW,MAAM,WAAW,GACvD,OAAQA,GAAM,QAAQ,CAAC,EACvB,aAAcA,GAAM,MAAM,OAAO,QAEjC,UAAW,CACT,QAAS,OACT,UAAW,MACb,CACF,CAAC,EACD,gBAAc,QAAI,CAChB,QAAS,OACT,cAAe,SACf,SAAU,WACV,IAAKA,GAAM,QAAQ,EAAG,EAGtB,YAAa,CACX,QAAS,KACT,SAAU,WACV,MAAO,MACP,OAAQ,OACR,cAAe,OACf,OAAQ,EACR,WAAYA,GAAM,OAAO,OAAO,KAChC,WAAY,eAAeA,GAAM,QAAQ,CAAC,CAAC,kBAC7C,CACF,CAAC,CACH,CACF,C,wCCpOO,SAASuoG,GAAe,CAAE,QAAAtxB,GAAS,SAAAywB,EAAS,EAAwB,CACzE,MAAMO,GAAchxB,GAAQ,uBAAuB,EAC7Cr1E,MAAS,OAAW,EAAS,EAE7Bm6C,GAASk7B,GAAQ,QAAQ,KAAKA,EAAO,EACrCuxB,GAAcvxB,GAAQ,aAAa,KAAKA,EAAO,EAC/CwxB,GAAWxxB,GAAQ,UAAU,KAAKA,EAAO,EACzCyxB,GAAkBzxB,GAAQ,iBAAiB,KAAKA,EAAO,EAEvD0xB,GAAW,IAAMjB,GAAS,eAAe,EACzCkB,GAAYlB,GAAS,MAAM,UAE3BmB,GAAkB,IAAM,CACxBH,GACFA,GAAgB,EACPD,IACTA,GAAS,KAEX,OAA4BR,EAAW,CACzC,EAEA,SACE,QAAC,OAAI,UAAWrmG,GAAO,QACrB,qBAAC4rC,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,GACzB,UAAAo7D,OACC,OAACv8D,GAAA,GACC,KAAK,aACL,KAAK,KACL,QAASs8D,GACT,WAAS,KAAE,sCAAuC,SAAS,EAC3D,gBAAY,KAAE,sCAAuC,SAAS,EAC9D,cAAan+F,EAAA,GAAU,WAAW,eAAe,WACnD,KAEF,OAACkjC,GAAA,EAAI,CAAE,SAAAu6D,GAAY,SAAS,GAC9B,KACA,QAACz6D,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,EACzB,UAAAypC,GAAQ,eAAiBA,GAAQ,cAAc,GAC9Cl7B,IAAUysD,QACV,OAACM,GAAA,GACC,WACE,QAACC,GAAA,EAAI,CACF,UAAAhtD,MACC,OAACgtD,GAAA,EAAK,KAAL,CAAU,KAAK,OAAO,SAAO,KAAE,+BAAgC,MAAM,EAAG,QAAShtD,EAAA,CAAQ,EACxF,KACHysD,MACC,OAACO,GAAA,EAAK,KAAL,CACC,KAAK,gBACL,SAAO,KAAE,oCAAqC,WAAW,EACzD,QAASP,EAAA,CACX,EACE,MACN,EAGF,mBAAC3hG,EAAA,IACC,WAAS,KAAE,4CAA6C,mBAAmB,EAC3E,iBAAiB,SACjB,QAAQ,YACR,KAAK,KACL,KAAK,OACL,cAAa2D,EAAA,GAAU,WAAW,eAAe,aAEjD,mBAACzJ,GAAA,EAAI,CAAC,KAAK,YAAa,GAC1B,EACF,GAGA0nG,IAAYC,QACZ,OAAC7hG,EAAA,IACC,QAASgiG,GACT,KAAK,KACL,QAAQ,cACR,KAAK,UACL,KAAK,YACL,WAAS,KAAE,iCAAkC,QAAQ,EACrD,cAAar+F,EAAA,GAAU,WAAW,eAAe,aACnD,GAEJ,GACF,CAEJ,CAEA,SAAS,GAAUxK,GAAsB,CACvC,MAAO,CACL,WAAS,QAAI,CACX,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,QAASA,GAAM,QAAQ,EAAG,CAAC,EAC3B,aAAc,aAAaA,GAAM,OAAO,OAAO,IAAI,EACrD,CAAC,CACH,CACF,CC/FO,SAASgpG,GAAgB,CAAE,QAAA/xB,GAAS,SAAAywB,GAAU,aAAAuB,EAAa,EAAU,CAC1E,MAAMC,GAAajyB,GAAQ,mBAAqBA,GAAQ,mBAAmBgyB,EAAY,EAAI,CAAC,EACtFrnG,MAAS,OAAW,EAAS,EAEnC,SACE,QAAC,OAAI,UAAWA,GAAO,QACrB,oBAAC2mG,GAAc,CAAC,QAAAtxB,GAAkB,SAAAywB,EAAA,CAAoB,KACtD,OAAC3lG,GAAA,EAAe,CAAC,qBAAsB,GACrC,mBAAC,OAAI,UAAWH,GAAO,WAAa,SAAAsnG,GAAW,IAAKC,IAAQA,GAAI,OAAO,CAAC,EAAE,EAC5E,GACF,CAEJ,CAEA,SAAS,GAAUnpG,GAAsB,CACvC,MAAO,CACL,WAAS,QAAI,CACX,QAAS,OACT,cAAe,SACf,KAAM,QACN,OAAQ,MACV,CAAC,EACD,cAAY,QAAI,CACd,QAAS,OACT,cAAe,SACf,aAAc,aAAaA,GAAM,OAAO,OAAO,IAAI,EACrD,CAAC,CACH,CACF,CCpCO,SAASopG,GACdpjG,GACA0hG,GACsC,CACtC,SAAO,WAAQ,IAAM,CACnB,GAAI,CAAC1hG,GAAW,CACd,MAAMsoB,MAAY,MAAqBo5E,EAAQ,EAC/C,OAAO,IAAIpL,EAAiB,CAAC,CAAChuE,GAAU,MAAM,IAAMA,GAAU,OAAO,CAAC,CAAC,CAAC,EAAE,uBAAuB,CACnG,CAEA,OAAOtoB,GAAU,uBAAuB,CAC1C,EAAG,CAACA,GAAW0hG,EAAQ,CAAC,CAC1B,CCOO,SAAS2B,GAA0B,CAAE,SAAA3B,GAAU,oBAAA4B,GAAqB,iBAAAhB,GAAkB,YAAAiB,EAAY,EAAU,CACjH,KAAM,CAAE,UAAAvjG,EAAU,KAAI,MAAoB0hG,GAAU,CAAE,0BAA2B,EAAK,CAAC,EACjF9lG,MAAS,OAAW,EAAS,EAC7B4nG,MAAc,OAAW,IAAiB,EAC1CtC,GAAkBkC,GAAmBpjG,GAAW0hG,EAAQ,EACxD+B,GAAiBzjG,IAAW,eAAe,EAE3CijG,GAAejjG,IAAW,aAAa,GAAK,GAC5C,CAAC0jG,GAAkBC,EAAmB,KAAIC,GAAA,GAC9C,gDACA,EACF,EACM,CAACC,GAAkB,GAAKC,EAAkB,KAAIF,GAAA,GAAgB,2CAA4C,EAAG,EAG7GG,MAAWC,GAAA,GAAY,CAC3B,UAAW,SACX,WAAY,KAEZ,YAAa,EAAIH,GACjB,aAAc,SACd,cAAgBliC,IAAS,CACvBmiC,GAAmB,EAAIniC,EAAI,CAC7B,CACF,CAAC,EAED,OAAKu/B,GAIDoC,MAEA,oBACE,oBAAC,OAAI,UAAW1nG,GAAO,qBACrB,mBAACgyE,GAAA,GACC,WAAS,KAAE,2BAA4B,mBAAmB,EAC1D,KAAK,iBACL,QAAS00B,GACT,QAAQ,SACR,OAAQ,GACR,UAAW1mG,GAAO,UAClB,gBAAY,KAAE,2BAA4B,mBAAmB,EAC/D,EACF,EAEC2nG,OACC,OAAC,KAAS,CAAC,UAAW3nG,GAAO,eAAgB,YAAa,CAAE,OAAQ,OAAQ,MAAO,OAAQ,EACzF,mBAAConG,GAAA,CACC,QAAS9B,GAET,SAAAQ,GACA,aAAAuB,EAAA,EAFKQ,IAAgB,MAAM,GAG7B,EACF,GAEJ,GAIAC,IACFK,GAAS,aAAa,MAAM,SAAW,EACvCA,GAAS,aAAa,MAAM,UAAY,QACxCA,GAAS,eAAe,MAAM,SAAW,EACzCA,GAAS,eAAe,MAAM,UAAY,gBAE1CA,GAAS,aAAa,MAAM,UAAY,QACxCA,GAAS,eAAe,MAAM,UAAY,YAI1C,OAAC,OAAI,UAAWnoG,GAAO,QACrB,oBAAC,OAAK,GAAGmoG,GAAS,eAChB,oBAAC,OAAK,GAAGA,GAAS,aAAc,aAAW,OAAGA,GAAS,aAAa,UAAWnoG,GAAO,WAAW,EAC/F,mBAAConG,GAAA,CACC,QAAS9B,GAET,SAAAQ,GACA,aAAAuB,EAAA,EAFKQ,IAAgB,MAAM,GAG7B,EACF,KACA,OAAC,OACE,GAAGM,GAAS,cACb,aAAW,OAAGA,GAAS,cAAc,UAAWnoG,GAAO,QAAQ,EAC/D,0BAAyB,GAC3B,KACA,QAAC,OAAK,GAAGmoG,GAAS,eAAgB,aAAW,OAAGA,GAAS,eAAe,UAAWnoG,GAAO,WAAW,EACnG,qBAAC,UACC,KAAK,SACL,QAAS,IAAM,CACb,KAAsB,wBAAwB,EAC9C+nG,GAAoB,CAACD,EAAgB,CACvC,EACA,aAAW,OAAGF,GAAa5nG,GAAO,qBAAqB,EACvD,cAAa4I,EAAA,GAAU,WAAW,YAAY,QAAQ,QAEtD,oBAACkjC,GAAA,EAAI,CAAC,OAAO,SACX,mBAAC,KAAK,CAAC,QAAQ,uDAAuD,mBAAO,EAC/E,KACA,OAAC3sC,GAAA,EAAI,CAAC,KAAM2oG,GAAmB,WAAa,aAAc,GAC5D,EACC,CAACA,OACA,OAAC,OAAI,UAAW9nG,GAAO,iBACrB,mBAACG,GAAA,EAAe,CAAC,qBAAsB,GACrC,mBAAC0lG,GAAgB,CAAC,SAAAC,EAAA,CAAoB,EACxC,EACF,GAEJ,GACF,EACF,GAlFO,IAoFX,CAEA,SAAS,GAAU1nG,GAAsB,CACvC,MAAO,CACL,WAAS,QAAI,CACX,QAAS,OACT,cAAe,SACf,KAAM,QACN,UAAWA,GAAM,QAAQ,CAAC,EAC1B,WAAY,aAAaA,GAAM,OAAO,OAAO,IAAI,GACjD,UAAW,aAAaA,GAAM,OAAO,OAAO,IAAI,GAChD,WAAYA,GAAM,OAAO,WAAW,QACpC,oBAAqBA,GAAM,MAAM,OAAO,OAC1C,CAAC,EACD,kBAAgB,QAAI,CAClB,MAAO,EACP,OAAQ,EACR,IAAKA,GAAM,QAAQ,CAAC,EACpB,SAAU,sBACV,WAAYA,GAAM,OAAO,WAAW,QACpC,WAAY,aAAaA,GAAM,OAAO,OAAO,IAAI,GACjD,UAAW,aAAaA,GAAM,OAAO,OAAO,IAAI,GAChD,UAAWA,GAAM,QAAQ,GACzB,OAAQA,GAAM,OAAO,YACrB,SAAU,CACZ,CAAC,EACD,eAAa,QAAI,CACf,SAAU,SACV,QAAS,OACT,cAAe,QACjB,CAAC,EACD,aAAW,QAAI,CACb,OAAQ,QACV,CAAC,EACD,WAAS,QAAI,CACX,QAASA,GAAM,QAAQ,EAAG,CAAC,EAC3B,OAAQA,GAAM,QAAQ,GAAK,CAAC,CAC9B,CAAC,EACD,wBAAsB,QAAI,CACxB,QAAS,OACT,cAAe,SACf,QAASA,GAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,CACnC,CAAC,EACD,YAAU,QAAI,CACZ,WAAY,CACV,WAAY,cACZ,UAAW,QACX,MAAO,OACP,OAAQ,MACR,IAAK,OACL,KAAM,GACR,CACF,CAAC,EACD,yBAAuB,QAAI,CACzB,QAAS,OACT,QAASA,GAAM,QAAQ,GAAK,CAAC,EAC7B,IAAKA,GAAM,QAAQ,CAAC,EACpB,eAAgB,gBAChB,WAAY,SACZ,WAAYA,GAAM,OAAO,WAAW,UAEpC,UAAW,CACT,WAAYA,GAAM,OAAO,OAAO,KAClC,CACF,CAAC,EACD,oBAAkB,QAAI,CACpB,QAAS,OACT,cAAe,SACf,SAAU,EACV,SAAU,QACZ,CAAC,CACH,CACF,CC1LO,SAASiqG,GAA0B,CAAE,UAAA37E,GAAW,UAAAjB,GAAW,KAAA0X,GAAM,SAAAmlE,EAAS,EAAU,CACzF,MAAMC,MAAe,MAAsB,EACrC,CAAE,SAAAzC,EAAS,EAAIp5E,GAAU,MACzB1sB,MAAS,OAAW,GAAWuoG,IAAgB,CAAC,EAChD,CAACtC,GAAaC,EAAc,KAAI,MAAqB,EAE3D,GAAI,CAACvpG,EAAA,EAAO,eAAe,oBACzB,SACE,OAAC6rG,GAAA,EAAe,CAAC,eAAgB97E,GAAU,eACzC,oBAAC,OAAI,UAAW1sB,GAAO,kBACrB,oBAACyoG,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAAC,OAAI,UAAW1sB,GAAO,sBAAwB,SAAAsoG,EAAA,CAAS,KACxD,OAAC,OAAI,UAAWtoG,GAAO,KAAO,SAAAmjC,EAAA,CAAK,GACrC,EACF,EAIJ,KAAM,CAAE,eAAAulE,GAAgB,aAAAC,GAAc,eAAAC,GAAgB,cAAAC,GAAe,cAAAC,GAAe,iBAAApC,EAAiB,KACnGqC,GAAA,GAAoB,CAClB,UAAW,MACX,aAAc,MACd,YAAa,IACb,WAAY,KACZ,UAAW,GACX,oBAAqB,IACrB,UAAW9C,EACb,CAAC,KAEH,aAAU,IAAM,CACdC,GAAe4C,GAAc,SAAS,CACxC,EAAG,CAACA,GAAc,UAAW5C,EAAc,CAAC,KAK5C,aAAU,IAAM,CACVz6E,GACFq6E,GAAS,gBAAgB,EAEzBA,GAAS,iBAAiB,CAE9B,EAAG,CAACr6E,GAAWq6E,EAAQ,CAAC,EAExB,KAAM,CAAE,iBAAAkD,EAAiB,KAAI,MAAoBlD,GAAU,CAAE,0BAA2B,EAAK,CAAC,EACxFmD,GAAgC,CAAC,EAElCx9E,KACHk9E,GAAa,MAAM,SAAW,EAC9BA,GAAa,MAAM,MAAQ,OAC3BA,GAAa,MAAM,SAAW,QAC9BM,GAAe,SAAW,SAG5B,MAAMC,GAAarxG,IAA+B,CAC5CA,IACF60B,GAAU,eAAe,IAAI,KAAiB70B,EAAG,CAAC,CAEtD,EAEA,SACE,OAAC,OAAK,GAAG6wG,GAAgB,MAAOO,GAC9B,oBAACE,GAAA,EAAwB,SAAxB,CAAiC,MAAOH,GACvC,qBAAC,OACE,GAAGL,GACJ,aAAW,OAAGA,GAAa,UAAW3oG,GAAO,kBAAkB,EAC/D,cAAgB6F,IAAQ,CAClBA,GAAI,UAIRigG,GAAS,eAAe,CAC1B,EAEA,oBAAC2C,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAAC,OAAI,aAAW,OAAG,CAACjB,IAAazrB,GAAO,qBAAqB,EAAI,SAAAsoG,EAAA,CAAS,KAC1E,OAAC,OAAI,UAAWtoG,GAAO,YACrB,mBAAC,OACC,aAAW,OAAGA,GAAO,KAAMyrB,IAAazrB,GAAO,WAAW,EAC1D,cAAa4I,EAAA,GAAU,WAAW,0BAA0B,YAC5D,IAAKsgG,GAEJ,SAAA/lE,EAAA,CACH,EACF,GACF,EACC1X,OACC,oBACE,oBAAC,OACE,GAAGo9E,GACJ,aAAW,OAAGA,GAAc,UAAW7oG,GAAO,QAAQ,EACtD,0BAAyB,GAC3B,KACA,OAAC,OAAK,GAAG4oG,GAAgB,aAAW,OAAGA,GAAe,UAAW5oG,GAAO,QAAQ,EAC9E,mBAACynG,GAAA,CACC,SAAA3B,GACA,oBAAqBG,GACrB,iBAAAS,GACA,YAAasC,GAAiB,SAAS,OAAS,EAClD,EACF,GACF,GAEJ,EACF,CAEJ,CAEA,SAAS,GAAU5qG,GAAsBmqG,GAAsB,CAC7D,MAAO,CACL,qBAAmB,QAAI,CACrB,MAAO,qBACP,QAAS,OACT,cAAe,SACf,SAAU,CACZ,CAAC,EACD,sBAAoB,QAAI,CACtB,SAAU,QACV,QAAS,OACT,cAAe,SACf,SAAU,CACZ,CAAC,EACD,6BAA2B,QAAI,CAC7B,SAAU,OACZ,CAAC,EACD,eAAa,QAAI,CACf,MAAO,eACP,QAAS,OACT,cAAe,SACf,SAAU,EACV,SAAU,UACZ,CAAC,EACD,QAAM,QAAI,CACR,MAAO,OACP,QAAS,OACT,SAAU,EACV,IAAKnqG,GAAM,QAAQ,CAAC,EACpB,UAAW,aACX,cAAe,SAEf,QAASA,GAAM,QAAQ,KAAO,EAAG,EAAG,CAAC,CACvC,CAAC,EACD,eAAa,QAAI,CACf,SAAU,WACV,KAAM,EACN,IAAK,EACL,MAAO,EACP,OAAQ,EACR,SAAU,OACV,eAAgB,OAChB,gBAAiB,SAEjB,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,YAAU,QAAI,CACZ,cAAe,QAGjB,CAAC,EACD,YAAU,QAAI,CACZ,UAAW,CACT,QAAS,MACX,CACF,CAAC,EACD,yBAAuB,QAAI,CACzB,CAACA,GAAM,YAAY,GAAG,IAAI,CAAC,EAAG,CAC5B,SAAU,SACV,OAAQA,GAAM,OAAO,YACrB,WAAYA,GAAM,OAAO,WAAW,OACpC,IAAKmqG,EACP,CACF,CAAC,CACH,CACF,C,uCCpLA,MAAMa,GAAqB,mBAEpB,SAASC,GAAkB,CAAE,UAAA38E,GAAW,YAAA48E,GAAc,GAAI,aAAAC,EAAa,EAAU,CACtF,KAAM,CAAE,KAAApmE,EAAK,EAAIzW,GAAU,MACrB1sB,MAAS,OAAW,EAAS,EAC7BwpG,MAAmB,WAAQ,IAAM,IAAIC,GAA4CH,EAAW,EAAG,CAACA,EAAW,CAAC,EAElH,SACE,OAAC,OACC,UAAW,KAAWtpG,GAAO,KAAM,CAAE,CAACA,GAAO,MAAM,EAAGupG,KAAiB,MAAU,CAAC,EAClF,MAAO,CAAE,CAACH,EAAkB,EAAGG,EAAa,EAE5C,mBAACG,GAAA,GAAwB,CAAC,MAAOF,GAAkB,YAAa,GAAO,UAAA98E,GACrE,mBAACyW,GAAK,UAAL,CAAe,MAAOA,EAAA,CAAM,EAC/B,EACF,CAEJ,CAEA,SAAS,GAAU/kC,GAAsB,CACvC,MAAO,CACL,QAAM,QAAI,CACR,QAAS,OACT,oBAAqB,uCACrB,IAAKA,GAAM,QAAQ,CAAC,EACpB,aAAc,OAChB,CAAC,EACD,UAAQ,QAAI,CACV,oBAAqB,cAAcgrG,EAAkB,YACvD,CAAC,EACD,UAAQ,QAAI,CACV,QAAS,OACT,WAAY,QACd,CAAC,CACH,CACF,CAEO,MAAMK,EAA4C,CAGhD,YAAoBE,GAAqB,CAArB,iBAAAA,GAF3B,KAAO,WAAa,EAE6B,CAE1C,QAAQrwG,GAA0B,CACvC,MAAMswG,GAA2B,KAAW,YAAYtwG,GAAO,KAAK,WAAW,EAAE,YAAY,EAGvF+tB,GAFoB/tB,GAAM,YAAYA,GAAM,MAAM,MAAO,OAAW,MAAM,EAAE,YAAY,EAE9D,SAASswG,EAAwB,EACjE,OAAIviF,KACF,KAAK,WAAa,IAGbA,EACT,CACF,CCtDO,SAASwiF,GAAuB,CAAE,MAAApjF,EAAM,EAAwC,CACrF,KAAM,CACJ,SAAA6hF,GACA,QAAAwB,GACA,SAAAC,GACA,KAAA5mE,GACA,UAAA6mE,GACA,UAAAC,GACA,YAAAX,GACA,aAAAC,GACA,UAAA99E,GACA,mBAAAy+E,EACF,EAAIzjF,GAAM,SAAS,EACb,CAAE,KAAA1wB,EAAK,KAAI,KAAU,EACrBkvD,MAAW,MAAY,EACvBklD,MAAgB,cAAWC,GAAA,CAAa,EACxCC,MAAW,OAAa3xF,IAAUA,GAAM,QAAQ,EAChD4xF,GAAU7jF,GAAM,WAAWw+B,GAAUolD,EAAQ,EAC7CE,GACJx0G,KAAS,cACL,MACEs0G,GACA,0BAEA,MAAYA,GAAU,MAAM,CAC9B,KACA,MAAYA,GAAU,mBAAmB,EACzCG,GAAiBT,KAAa,OAC9BP,MAAmB,OAA0BS,EAAS,EA4B5D,MAzBA,WAAQ,IAAM,EACRA,IAAaO,IAAkBR,KACjCvjF,GAAM,kBAAkB,CAE5B,EAAG,CAAC+jF,GAAgBR,GAAWC,GAAWxjF,EAAK,CAAC,KAGhD,aAAU,IAAM,CACV,CAACwjF,IAAa,CAACO,IAAkB,CAACR,IACpCvjF,GAAM,iBAAiB,CAE3B,EAAG,CAAC+jF,GAAgBR,GAAWC,GAAWxjF,EAAK,CAAC,KAEhD,aAAU,IAAM,CACd,GAAI0jF,IAAiB1+E,GACnB,OAAA0+E,GAAc,YAAY,EAAI,EAEvB,IAAM,CACXA,GAAc,YAAY,EAAK,CACjC,CAIJ,EAAG,CAACA,GAAe1+E,EAAS,CAAC,EAEzBs+E,GACF,SACE,oBACE,oBAACA,GAAS,UAAT,CAAmB,MAAOA,EAAA,CAAU,EACpCD,OAAW,OAACA,GAAQ,UAAR,CAAkB,MAAOA,EAAA,CAAS,GACjD,EAIJ,SAASlH,IAAa,CACpB,MAAI,CAACqH,KAAcX,IAAeC,OACzB,OAACF,GAAiB,CAAC,YAAAC,GAA0B,aAAAC,GAA4B,UAAW9iF,EAAA,CAAO,EAGhG+iF,MAEA,OAACE,GAAA,GAAwB,CAAC,MAAOF,GAAkB,YAAa,GAAM,UAAW/iF,GAC/E,mBAAC0c,GAAK,UAAL,CAAe,MAAOA,EAAA,CAAM,EAC/B,KAIG,OAACA,GAAK,UAAL,CAAe,MAAOA,EAAA,CAAM,CACtC,CAEA,SACE,oBACG,UAAA+mE,OAAsB,OAACA,GAAmB,UAAnB,CAA6B,MAAOA,EAAA,CAAoB,KAChF,QAACO,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,OAChE,UAAAN,OAAa,OAACA,GAAU,UAAV,CAAoB,MAAOA,EAAA,CAAW,EACpD,CAACA,OACA,OAAC3B,GAAA,CACC,UAAW5hF,GACX,UAAAgF,GACA,SAAU68E,OAAY,OAACA,GAAS,UAAT,CAAmB,MAAOA,EAAA,CAAU,EAC3D,KAAM1F,GAAW,EACnB,EAEDkH,OAAW,OAACA,GAAQ,UAAR,CAAkB,MAAOA,EAAA,CAAS,GACjD,GACF,CAEJ,C,0EC1GO,MAAMY,EAA8D,CACzE,YAAoBrG,GAA6B,CAA7B,YAAAA,EAA8B,CAElD,SAAoB,CAClB,MAAO,CAAC,WAAW,CACrB,CAEA,aAAoC,CAClC,MAAM3rF,GAAQ,KAAK,OAAO,MAC1B,MAAO,CACL,UAAWA,GAAM,YAAc,OAAY,OAAOA,GAAM,SAAS,EAAI,MACvE,CACF,CAEA,cAAcpc,GAAoC,CAChD,IAAIs1D,GAAqC,CAAC,EACtC,OAAOt1D,GAAO,WAAc,SAC9Bs1D,GAAS,CAAE,UAAW,OAAOt1D,GAAO,SAAS,CAAE,EAE/Cs1D,GAAS,CAAE,UAAW,MAAU,EAG9B,OAAO,KAAKA,EAAM,EAAE,OAAS,GAC/B,KAAK,OAAO,SAASA,EAAM,CAE/B,CACF,C,4ECDO,MAAM+4C,GAAoB,iBAEpBC,GAAyB,CAAC,CAAE,WAAAjmF,GAAY,UAAAkmF,GAAW,OAAAz/E,GAAQ,SAAA0/E,GAAU,aAAAC,GAAc,SAAAlE,EAAS,IAAa,CACpH,MAAM7mG,MAAS,OAAW,EAAS,EAE7BgrG,MAAc,WAAQ,IACrBrmF,GAAW,OAGTA,GAAW,OAAO,QAAU,EAAgC,EAF1D,EAGR,CAACA,GAAW,MAAM,CAAC,EAEhB,CAAE,MAAOwnC,EAAG,KAAI5oB,GAAA,GAAS,OACtB,MAAiB,EAAE,IAAI5e,GAAW,UAAU,EAClD,CAACA,GAAW,UAAU,CAAC,EAEpBsmF,MAAM,MAAiB,EAAE,oBAAoBtmF,GAAW,UAAU,EAElEulE,GAAgB3pD,IAA2C,CAC/DuqE,GACE,CACE,GAAGnmF,GACH,KAAM4b,GAAG,cAAc,KACzB,EACAsqE,EACF,CACF,EAEMK,GAAsB/+C,IAAmC,CAC7D,MAAMg/C,MAAQ,OAAiBh/C,EAAE,EAE7BxnC,GAAW,YAAY,OAASwmF,GAAM,KACxCL,GACE,CACE,WAAYK,GACZ,QAASxmF,GAAW,QACpB,OAAQA,GAAW,OACnB,UAAWA,GAAW,UACtB,KAAMA,GAAW,KACjB,KAAMA,GAAW,KACjB,OAAQA,GAAW,OACnB,SAAUA,GAAW,SACrB,KAAMA,GAAW,IACnB,EACAkmF,EACF,EAEAC,GACE,CACE,GAAGnmF,GACH,WAAYwmF,EACd,EACAN,EACF,CAEJ,EAEMh1G,GAAY0qC,IAA2C,CAC3D,MAAM5I,GAAS4I,GAAG,cAClBuqE,GACE,CACE,GAAGnmF,GACH,CAACgT,GAAO,IAAI,EAAGA,GAAO,OAAS,WAAaA,GAAO,QAAUA,GAAO,KACtE,EACAkzE,EACF,CACF,EAEMO,GAAiB5zG,IAAmB,CACxCszG,GACE,CACE,GAAGnmF,GACH,UAAWntB,EACb,EACAqzG,EACF,CACF,EAEMQ,GAAsB7vG,IAAwC,CAClE,IAAIi8B,GACFj8B,GAAE,QAAU,EACR,OACA,CACE,QAASA,GAAE,QAAU,EACrB,IAAKmpB,GAAW,QAAQ,KAAO,CAAC,CAClC,EACNmmF,GAAS,CAAE,GAAGnmF,GAAY,OAAA8S,EAAO,EAAGozE,EAAS,CAC/C,EAEMS,GAAsBC,IAA+C,CACzE,GAAI,CAAC,MAAM,QAAQA,EAAU,EAC3B,OAGF,MAAM9zE,GAAgC,CACpC,QAASuzE,KAAgB,EACzB,IAAK,CAAC,CACR,EAEAO,GAAW,QAASnnG,IAAcA,GAAU,OAASqzB,GAAO,IAAI,KAAKrzB,GAAU,KAAK,CAAC,EACrF0mG,GAAS,CAAE,GAAGnmF,GAAY,OAAA8S,EAAO,EAAGozE,EAAS,CAC/C,EAEMW,GAAuB,IAAM,CACjC3E,GAASgE,EAAS,EAClBE,GAAa,CACf,EAEMU,GAAkB9mF,GAAW,OAASgmF,GAEtCroF,GAAS,CAACrH,GAA4B9e,KACtC8e,GAAE,OAAS9e,GAAE,MACR8e,GAAE,MAAM,YAAY,EAAE,cAAc9e,GAAE,MAAM,YAAY,CAAC,EAG3D,GAGHuvG,MAAmD,WACvD,IACEtgF,GAIG,OAAQ9xB,IAAUqD,EAAA,EAAO,OAAOrD,GAAM,MAAM,QAAQ,CAAC,EACrD,IAAKA,KAAW,CACf,SAAO,MAAsBA,EAAK,EAClC,MAAOA,GAAM,MAAM,OAAS,YAAS,MAAsBA,EAAK,CAAC,GACjE,YAAaA,GAAM,MAAM,YACzB,OAAQqD,EAAA,EAAO,OAAOrD,GAAM,MAAM,QAAQ,EAAE,KAAK,MAAM,KACzD,EAAE,EACD,KAAKgpB,EAAM,GAAK,CAAC,EACtB,CAAC8I,EAAM,CACT,EAEA,SACE,QAAC,OACC,qBAACugF,GAAA,EAAQ,CAAC,UAAW3rG,GAAO,aAC1B,oBAACsH,GAAA,EAAK,CAAC,SAAO,KAAE,sDAAuD,MAAM,EAC3E,mBAACmzC,GAAA,GACC,cAAa7xC,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,SAAS,KACrE,KAAK,OACL,GAAG,OACH,UAAW6iG,GACX,MAAO9mF,GAAW,KAClB,SAAUulE,EAAA,CACZ,EACF,KACA,OAAC5iF,GAAA,GACC,SAAO,KAAE,6DAA8D,aAAa,EACpF,QAAQ,qBAER,mBAACskG,GAAA,GAAgB,CAAC,YAAW,GAAC,UAAS,GAAC,QAASjnF,GAAW,WAAY,SAAUumF,EAAA,CAAoB,EACxG,EACC,CAAC/+C,IAAI,KAAK,gBACT,OAAC1pB,GAAA,GACC,SAAO,KACL,2EACA,4CACF,EACA,SAAS,QAET,mBAAC,KAAK,CAAC,QAAQ,mDAAmD,yGAElE,EACF,KAEF,OAACn7B,GAAA,GACC,SAAO,KAAE,yDAA0D,SAAS,EAC5E,eAAa,KACX,uGACA,qEACF,EAEA,mBAACsnC,GAAA,GACC,KAAK,SACL,GAAG,SACH,MAAOjqB,GAAW,OAClB,SAAA9uB,GACA,cAAa+S,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,cAAc,OAC5E,EACF,KACA,OAACtB,GAAA,GACC,SAAO,KAAE,wDAAyD,QAAQ,EAC1E,eAAa,KACX,8DACA,+HACF,EAEA,mBAACsnC,GAAA,GACC,KAAK,OACL,GAAG,OACH,MAAOjqB,GAAW,KAClB,SAAA9uB,GACA,cAAa+S,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,cAAc,KAC5E,EACF,KACA,OAACtB,GAAA,GACC,SAAO,KAAE,uDAAwD,OAAO,EACxE,eAAa,KACX,sFACA,+CACF,EAEA,mBAACskC,EAAA,EAAK,CACJ,mBAAC,KAAgB,CAAC,MAAOjnB,IAAY,UAAW,SAAUymF,EAAA,CAAe,EAC3E,EACF,KACA,OAAC9jG,GAAA,GACC,SAAO,KAAE,yDAA0D,SAAS,EAC5E,cAAasB,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,cAAc,YAE1E,gCACE,oBAACxI,GAAA,IACC,QAASyrG,GAAgB,EACzB,MAAOb,GACP,SAAUK,GACV,cAAaziG,EAAA,GAAU,WAAW,YAAY,qBAChD,EACCoiG,KAAgB,MACf,OAAC,OACC,QAASU,GACT,MAAOA,GAAiB,OAAQpyG,IAAUqrB,GAAW,QAAQ,IAAI,SAASrrB,GAAM,KAAM,CAAC,EACvF,SAAUgyG,GACV,YAAa,GACb,eAAa,KAAE,qEAAsE,eAAe,EACpG,MAAO,IACP,kBAAmB,GACnB,UAAWtrG,GAAO,OAClB,cAAa4I,EAAA,GAAU,WAAW,YAAY,4BAChD,GAEJ,EACF,GACF,KACA,QAAC+iG,GAAA,EAAQ,CACP,oBAAC,MAAG,UAAU,eACZ,mBAAC,KAAK,CAAC,QAAQ,iDAAiD,iBAAK,EACvE,EACCx/C,IAAI,aAAe8+C,OAClB,OAACa,GAAA,GACC,WAAY3/C,GACZ,2BAA4B8+C,GAC5B,WAAAtmF,GACA,SAAWA,IAAemmF,GAASnmF,GAAYkmF,EAAS,EAC1D,GAEJ,KACA,QAACj/D,EAAA,EAAK,CACH,WAACjnB,GAAW,YACX,OAAC1f,EAAA,IACC,QAAQ,cACR,QAASumG,GACT,cAAa5iG,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,cAAc,OAE1E,mBAAC,KAAK,CAAC,QAAQ,kDAAkD,kBAAM,EACzE,KAEF,OAAC3D,EAAA,IACC,QAAQ,YACR,QAAS8lG,GACT,cAAaniG,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,cAAc,MAE1E,mBAAC,KAAK,CAAC,QAAQ,wDAAwD,wBAAY,EACrF,GACF,GACF,CAEJ,EAEM,GAAaxK,KACV,CACL,gBAAc,QAAI,CAChB,SAAUA,GAAM,QAAQ,EAAE,EAC1B,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,UAAQ,QAAI,CACV,UAAW,KACb,CAAC,CACH,GAIF,IAAK2tG,IAAAA,KACHA,GAAAA,GAAA,yBACAA,GAAAA,GAAA,iCACAA,GAAAA,GAAA,iCAHGA,KAAAA,IAAA,IAML,MAAMF,GAAkB,IAAM,CAC5B,CACE,SAAO,KAAE,qDAAsD,YAAY,EAC3E,MAAO,EACP,eAAa,KACX,sFACA,iEACF,CACF,EACA,CACE,SAAO,KAAE,0DAA2D,iBAAiB,EACrF,MAAO,EACP,eAAa,KACX,qFACA,sDACF,CACF,EACA,CACE,SAAO,KAAE,4DAA6D,mBAAmB,EACzF,MAAO,EACP,eAAa,KACX,4EACA,qDACF,CACF,CACF,E,wCCxUO,MAAMG,GAAe,uBAEfC,GAAyB,CAAC,CAAE,YAAA7jD,GAAa,MAAA8jD,GAAO,OAAAC,GAAQ,OAAAC,GAAQ,SAAAvF,EAAS,IAAa,CACjG,MAAM7mG,MAAS,OAAW,EAAS,EAE7BqsG,GAAmBjkD,GAAY,SAAW,GAAMA,GAAY,SAAW,GAAKA,GAAY,CAAC,EAAE,QAE3FkkD,GAAqBC,IACrBA,GAAK,SAAW,MAEhB,OAAC,MAAG,UAAU,QACZ,oBAAC,KAAK,CAAC,QAAQ,oDAAoD,OAAQ,CAAE,SAAUA,GAAK,IAAK,EAAG,wBACtF,gBACd,EACF,EAIAA,GAAK,WAEL,OAAC,MAAG,UAAU,QACZ,oBAAC,KAAK,CAAC,QAAQ,oDAAoD,OAAQ,CAAE,SAAUA,GAAK,IAAK,EAC9F,yBAAe,eAClB,EACF,KAIG,mBAAG,SAAAA,GAAK,KAAK,EAGhBC,MAAgB,MAAiB,EACvC,SACE,QAAC5gE,EAAA,EAAK,CAAC,UAAU,SACd,UAAAwc,GAAY,OAAS,MACpB,OAAC,OAAI,UAAWpoD,GAAO,MACrB,oBAAC,SAAM,KAAK,OAAO,UAAU,mCAC3B,oBAAC,SACC,oBAAC,MACC,oBAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,sDAAsD,sBAAU,EACjF,KACA,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,uDAAuD,uBAAW,EACnF,KACA,OAAC,MAAG,QAAS,EAAG,GAClB,EACF,KACA,OAAC,SAAM,cAAa4I,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,KAAK,YACrE,SAAAw/C,GAAY,IAAI,CAACzjC,GAAY3C,QAC5B,QAAC,MACE,UAAA2C,GAAW,WACV,OAAC,MAAG,KAAK,WAAW,MAAO,CAAE,MAAO,KAAM,EAAG,UAAU,UAAU,QAAS,IAAMwnF,GAAOnqF,EAAG,EACxF,mBAAC/c,EAAA,GAAM,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,YACnC,SAAAqnG,GAAkB3nF,EAAU,EAC/B,EACF,KAEA,OAAC,MAAG,KAAK,WAAW,UAAU,UAAU,QAAS,IAAMwnF,GAAOnqF,EAAG,EAC/D,mBAAC/c,EAAA,GAAM,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,YACnC,SAAAqnG,GAAkB3nF,EAAU,EAC/B,EACF,KAEF,OAAC,MAAG,KAAK,WAAW,UAAU,UAAU,QAAS,IAAMwnF,GAAOnqF,EAAG,EAC9D,SAAAwqF,GAAc,oBAAoB7nF,GAAW,UAAU,GAAG,MAAQA,GAAW,YAAY,IAC5F,KACA,OAAC,MAAG,KAAK,WAAW,MAAO,CAAE,MAAO,IAAK,EACtC,SAAA3C,KAAQ,MACP,OAACyoB,GAAA,GACC,KAAK,WACL,QAAS,IAAM2hE,GAAOpqF,GAAKyqF,GAAc,EAAE,EAC3C,WAAS,KAAE,2DAA4D,SAAS,EAClF,EAEJ,KACA,OAAC,MAAG,KAAK,WAAW,MAAO,CAAE,MAAO,IAAK,EACtC,SAAArkD,GAAY,OAAS,GAAKpmC,KAAQomC,GAAY,OAAS,KACtD,OAAC3d,GAAA,GACC,KAAK,aACL,QAAS,IAAM2hE,GAAOpqF,GAAKyqF,GAAc,IAAI,EAC7C,WAAS,KAAE,6DAA8D,WAAW,EACtF,EACE,KACN,KACA,OAAC,MAAG,KAAK,WAAW,MAAO,CAAE,MAAO,IAAK,EACtC,UAAC9nF,GAAW,YACX,OAAC+nF,GAAA,GACC,KAAK,KACL,UAAW,IAAM7F,GAAS7kF,EAAG,EAC7B,gBAAY,KACV,6DACA,sCACA,CAAE,MAAO2C,GAAW,IAAK,CAC3B,EACF,EAEJ,IA/CO,GAAGA,GAAW,IAAI,IAAI3C,EAAG,EAgDlC,CACD,EACH,GACF,EACF,EAEDqqF,OACC,OAACzgE,EAAA,EAAK,CAAC,UAAU,SACf,oBAACG,GAAA,GACC,QAAQ,iBACR,UACE,OAAC9mC,EAAA,IACC,cAAa2D,EAAA,GAAU,WAAW,iBAAiB,SAAS,sBAAsB,EAClF,KAAK,cACL,QAASsjG,GACT,KAAK,KAEL,mBAAC,KAAK,CAAC,QAAQ,uCAAuC,gCAAoB,EAC5E,EAEF,WAAS,KAAE,gCAAiC,kDAAkD,EAE9F,oBAAC,KAAK,CAAC,QAAQ,2CACb,mBAAC,KAAE,6YAKH,EACF,KACA,QAAC,KAAK,CAAC,QAAQ,6CAA6C,yBAC7C,OACb,OAAC/uD,GAAA,EAAQ,CAAC,SAAQ,GAAC,KAAK,iDAAiD,qCAEzE,EAAY,IAAI,yBAElB,GACF,EACF,EAED,CAACkvD,OACA,OAACM,GAAA,GACC,cAAa/jG,EAAA,GAAU,MAAM,UAAU,SAAS,YAAY,KAAK,mBACjE,QAASsjG,GAET,mBAAC,KAAK,CAAC,QAAQ,qDAAqD,qBAAS,EAC/E,GAEJ,CAEJ,EAEM,GAAY,KAAO,CACvB,SAAO,QAAI,CACT,MAAO,OACP,UAAW,MACb,CAAC,CACH,GC7JO,IAAKO,IAAAA,KACVA,GAAAA,GAAA,GAAK,EAAE,EAAP,KACAA,GAAAA,GAAA,KAAO,CAAC,EAAR,OAFUA,KAAAA,IAAA,IASL,MAAMG,WAA4B,IAAuE,CAAzG,kCAOL,KAAU,SAAW,IAAIlC,GAAyB,IAAI,EAqBtD,KAAO,8BAAgC,IAAM,CAG3C,MAAMmC,MAAoB,MAAiB,EAAE,oBAAoB,IAAI,EAErE,GAAI,CAACA,IAAqB,CAACA,GAAkB,KAAK,YAAa,CAC7D,QAAQ,MAAM,iDAAiD,EAC/D,MACF,CACA,SAAO,OAAiBA,EAAiB,CAC3C,EAEA,KAAO,MAAQ,SAAY,CACzB,MAAMriD,GAAsC,CAC1C,KAAMmgD,GACN,OAAQ,GACR,WAAY,KAAK,8BAA8B,EAC/C,UAAW,KACb,EAEMmC,GAAgB,IAAIzrE,GAAA,EAA8B,CACtD,MAAOmpB,GACP,KAAMA,GAAmB,KACzB,UAAW,EAAQA,GAAmB,OACtC,SAAU,EAAQA,GAAmB,IACvC,CAAC,EAEKpwD,GAAOgwB,GAAA,GAAoB,cAAc,KAAK,UAAU,EAE9DhwB,GAAK,mBAAmB0yG,EAAa,EACrC,KAAK,SAAS,CAAE,UAAW1yG,GAAK,MAAM,iBAAiB,OAAS,CAAE,CAAC,CACrE,EAEA,KAAO,OAAU4nB,IAAgB,CAC/B,KAAK,SAAS,CAAE,UAAWA,EAAI,CAAC,CAClC,EAEA,KAAO,aAAe,IAAM,CAC1B,KAAK,SAAS,CAAE,UAAW,MAAU,CAAC,CACxC,EAEA,KAAO,OAAS,CAACA,GAAasN,KAA6B,CACzD,MAAMl1B,GAAOgwB,GAAA,GAAoB,cAAc,KAAK,UAAU,EACxD2iF,GAAS,CAAC,GAAG3yG,GAAK,MAAM,gBAAgB,EAExC,CAAC4yG,EAAK,EAAID,GAAO,OAAO/qF,GAAK,CAAC,EACpC+qF,GAAO,OAAO/qF,GAAMsN,GAAW,EAAG09E,EAAK,EAEvC5yG,GAAK,SAAS,CAAE,iBAAkB2yG,EAAO,CAAC,CAC5C,EAEA,KAAO,SAAY/qF,IAAgB,CACjC,MAAM5nB,GAAOgwB,GAAA,GAAoB,cAAc,KAAK,UAAU,EACxD2iF,GAAS,CAAC,GAAG3yG,GAAK,MAAM,gBAAgB,EAE9C2yG,GAAO,OAAO/qF,GAAK,CAAC,EAEpB5nB,GAAK,SAAS,CAAE,iBAAkB2yG,EAAO,CAAC,CAC5C,EAEA,KAAO,SAAW,CAACpoF,GAA6BkmF,KAAsB,CACpE,MAAMmC,GAAQ,KAAK,aAAanC,EAAS,EAEzCmC,GAAM,SAAS,CACb,KAAMroF,GAAW,KACjB,UAAW,EAAQA,GAAW,OAC9B,SAAU,EAAQA,GAAW,KAC7B,MAAOA,EACT,CAAC,EAIDqoF,GAAM,SAAS,CACjB,EApGA,MAAO,CAAP,KAAO,UAAYC,EAAA,CAEZ,WAAoB,CACzB,MAAO,aACT,CAIA,IAAY,YAA6B,CACvC,SAAO,MAAqB,IAAI,CAClC,CAEO,aAAapC,GAAoD,CAEtE,MAAMmC,GADO5iF,GAAA,GAAoB,cAAc,KAAK,UAAU,EAC3C,MAAM,iBAAiBygF,EAAS,EAEnD,GAAI,EAAEmC,cAAiB,QACrB,MAAM,IAAI,MAAM,2CAA6CnC,EAAS,EAGxE,OAAOmC,EACT,CAEO,cAA+B,CACpC,OAAO,KAAK,UACd,CA4EF,CAEA,SAASC,GAAwB,CAAE,MAAAxmF,EAAM,EAA6C,CACpF,MAAMiG,GAAYjG,GAAM,aAAa,EAC/B,CAAE,iBAAAymF,EAAiB,EAAI9iF,GAAA,GAAoB,cAAcsC,EAAS,EAAE,SAAS,EAC7E,CAAE,SAAA69E,GAAU,QAAAD,EAAQ,EAAI6C,GAAwBzgF,GAAWjG,GAAM,UAAU,CAAC,EAC5E,CAAE,UAAAokF,EAAU,EAAIpkF,GAAM,SAAS,EAC/B2E,GAAShB,GAAA,GAAoB,aAAasC,EAAS,EAEnD07B,MAAiCq8C,GAAA,GAAwByI,EAAgB,EAE/E,OAAIrC,IAAa,MAAQA,GAAYqC,GAAiB,UAElD,OAACE,GAAA,CACC,gBAAiB3mF,GAAM,aAAaokF,EAAS,EAC7C,QAAAP,GACA,OAAAl/E,GACA,UAAAy/E,GACA,SAAAN,GACA,UAAA79E,GACA,SAAUjG,GAAM,SAChB,aAAcA,GAAM,aACpB,SAAUA,GAAM,SAClB,KAKF,QAACgkF,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,SACjE,oBAAC7B,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAACu/E,GAAA,CACC,YAAA7jD,GACA,MAAO3hC,GAAM,MACb,OAAQA,GAAM,OACd,SAAUA,GAAM,SAChB,OAAQA,GAAM,OAChB,GACF,CAEJ,CAcA,SAAS2mF,GAA4B,CACnC,gBAAAC,GACA,QAAA/C,GACA,SAAAC,GACA,OAAAn/E,GACA,UAAAy/E,GACA,UAAAn+E,GACA,SAAAo+E,GACA,aAAAC,GACA,SAAAlE,EACF,EAAqC,CACnC,KAAM,CAAE,KAAAx6F,GAAM,MAAAgiB,EAAM,EAAIg/E,GAAgB,SAAS,EAE3CC,GAAwB,CAC5B,KAAMjhG,GACN,WAAYi+F,EACd,EAEA,SACE,QAACG,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAS+C,GAAuB,OAAQ,KAAe,SAC/E,oBAAC7E,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAACk+E,GAAA,CACC,WAAYv8E,GACZ,UAAAw8E,GACA,OAAAz/E,GACA,SAAA0/E,GACA,aAAAC,GACA,SAAAlE,EAAA,CACF,GACF,CAEJ,C,oDClMO,MAAM0G,WAA+B,IAA0E,CAA/G,kCAGL,KAAU,SAAW,IAAI7C,GAAyB,IAAI,EAkBtD,KAAO,UAAY,IAAM,CACvB,KAAK,MAAQ,CAAC,GAAG,KAAK,MAAO,IAAQ,EACrC,KAAK,SAAS,CAAE,UAAW,KAAK,MAAM,OAAS,CAAE,CAAC,CACpD,EAEA,KAAO,SAAY1oF,IAAgB,CACjC,KAAK,MAAQ,CAAC,GAAG,KAAK,MAAM,MAAM,EAAGA,EAAG,EAAG,GAAG,KAAK,MAAM,MAAMA,GAAM,CAAC,CAAC,EAEvE,KAAK,SAAS,CAAE,UAAW,MAAU,CAAC,CACxC,EAEA,KAAO,YAAe5oB,IAAwB,CAC5C,KAAK,MAAQ,CAAC,GAAG,KAAK,MAAO,CAAE,GAAGA,EAAK,CAAC,CAC1C,EAEA,KAAO,cAAgB,CAAC4oB,GAAasN,KAAsB,CACzD,KAAK,MAAQ/M,GAAW,kBAAkB,KAAK,MAAOP,GAAKA,GAAMsN,EAAS,CAC5E,EAEA,KAAO,OAAUu7E,IAAsB,CACrC,KAAK,SAAS,CAAE,UAAAA,EAAU,CAAC,CAC7B,EAEA,KAAO,aAAgBzxG,IAAwB,CAC7C,MAAM4oB,GAAM,KAAK,MAAM,UAEnBA,KAAQ,SAIZ,KAAK,MAAQ,CAAC,GAAG,KAAK,MAAM,MAAM,EAAGA,EAAG,EAAG5oB,GAAM,GAAG,KAAK,MAAM,MAAM4oB,GAAM,CAAC,CAAC,EAC/E,EAEA,KAAO,SAAW,IAAM,CACtB,KAAK,SAAS,CAAE,UAAW,MAAU,CAAC,CACxC,EAvDA,MAAO,CAAP,KAAO,UAAYwrF,EAAA,CAIZ,WAAoB,CACzB,MAAO,OACT,CAEA,IAAY,WAA4B,CACtC,SAAO,MAAqB,IAAI,CAClC,CAEA,IAAY,OAAyB,CACnC,OAAO,KAAK,UAAU,MAAM,KAC9B,CAEA,IAAY,MAAM90G,GAAwB,CACxC,KAAK,UAAU,SAAS,CAAE,MAAAA,EAAM,CAAC,CACnC,CAsCF,CAEA,SAAS80G,GAA+B,CAAE,MAAA/mF,EAAM,EAAgD,CAC9F,KAAM,CAAE,UAAAokF,EAAU,EAAIpkF,GAAM,SAAS,EAC/BiG,MAAY,MAAqBjG,EAAK,EACtC,CAAE,MAAA/tB,EAAM,EAAIg0B,GAAU,SAAS,EAC/B,CAAE,SAAA69E,GAAU,QAAAD,EAAQ,EAAI6C,GAAwBzgF,GAAWjG,GAAM,UAAU,CAAC,EAC5EgnF,GAAa5C,KAAc,OAAYnyG,GAAMmyG,EAAS,EAAI,OAEhE,OAAI4C,MAEA,OAACC,GAAA,CACC,QAAApD,GACA,SAAAC,GACA,KAAMkD,GACN,UAAA/gF,GACA,SAAUjG,GAAM,aAChB,SAAUA,GAAM,SAClB,KAKF,QAACgkF,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,SACjE,oBAAC7B,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAACihF,GAAA,GACC,MAAAj1G,GACA,MAAO+tB,GAAM,UACb,OAAQA,GAAM,OACd,SAAUA,GAAM,SAChB,YAAaA,GAAM,YACnB,cAAeA,GAAM,cACvB,GACF,CAEJ,CAWA,SAASinF,GAAa,CAAE,QAAApD,GAAS,KAAAlxG,GAAM,SAAAmxG,GAAU,UAAA79E,GAAW,SAAA72B,GAAU,SAAAkxG,EAAS,EAAsB,CACnG,MAAM6G,GAAkB,CACtB,QAAM,KAAE,mEAAoE,WAAW,EACvF,WAAYtD,EACd,EAEA,SACE,QAACG,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAASqD,GAAiB,OAAQ,KAAe,SACzE,oBAACnF,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAACmhF,GAAA,EAAiB,CAAC,KAAAz0G,GAAa,SAAUvD,GAAU,SAAAkxG,EAAA,CAAoB,GAC1E,CAEJ,C,oJCzFO,SAAS+G,GAA6B,CAC3C,UAAAphF,GACA,cAAA4xE,GACA,cAAAyP,GACA,SAAAtP,GACA,MAAAF,GACA,gBAAAC,GACA,gBAAAwP,GACA,kBAAAC,GACA,WAAAvP,GACA,UAAA96D,GACA,UAAAsqE,EACF,EAAU,CACR,MAAMnP,MAAU,MAAsC,CAAE,cAAAT,EAAc,CAAC,EACjE,CAAE,UAAWO,EAAY,EAAInyE,GAAU,SAAS,EAEhD,CAAE,aAAAsyE,GAAc,MAAAC,EAAM,EAAIF,GAC1BJ,MAAY,MAAa,EAEzB,CAAC9mG,GAAKunG,EAAQ,EAAIH,GAAM,CAAC,MAAO,UAAU,CAAC,EAE3C,CAAE,KAAMkP,GAAiB,UAAWC,EAAkB,KAAI,OAAmC,CACjG,KAAM9P,GAAc,KACpB,KAAMA,GAAc,IACtB,CAAC,EAEK,CAAE,KAAM+P,EAAa,KAAI,OAAkBL,GAAkB,CAAE,KAAMA,EAAiB,EAAI,KAAS,EAEnG,CAAE,cAAAM,GAAe,UAAWC,EAAc,KAAIC,GAAA,GAAiB,EAC/D,CAACC,GAAUC,EAAW,KAAI,OAAyC,EACnE,CAACC,GAAYC,EAAa,KAAI,YAAiB,EAAE,EACjD,CAACC,GAAKC,EAAM,KAAI,YAAc,EAC9B,CAACC,GAAcC,EAAe,KAAI,YAAS,EAAK,EAChD,CAACC,GAAUC,EAAW,KAAI,YAA8B,EAExDtiE,MAAW,MAAY,KAE7B,aAAU,IAAM,CACd,MAAMuiE,GAAoBhB,IAAiB,UAAU,QAAQ,UAAU,cAAc,IAAiB,EACtG,GAAI,CAACgB,IAAqBnB,KAAoB,OAC5C,OAGF,MAAMoB,GAAWD,GAAkB,MAAM,GAAG,EAAE,IAAI,EAO5CE,GAAU,MANS,OAA0B,CACjD,gBAAArB,GACA,aAAAK,GACA,SAAU3P,IAAY,KACtB,iBAAkB,EACpB,CAAC,CACkC,GAAG0Q,EAAQ,GAC9CR,GAAcS,EAAO,CACvB,EAAG,CAAClB,GAAiBE,GAAcL,GAAiBC,GAAmBvP,EAAU,CAAC,EAGlF,MAAM4Q,GAAa3oG,IAAoB,CACrC,MAAMo6B,GAAU,IAAC,KAAE,4DAA6D,0BAA0B,EAAGp6B,EAAK,EAElHg4F,GAAU,QAAQ,CAChB,KAAM,KAAU,WAAW,KAC3B,QAAA59D,EACF,CAAC,CACH,EAEMwuE,GAAmB,MAAO,CAAE,KAAArP,GAAM,KAAAj6D,GAAM,QAAA4pD,EAAQ,IAAoC,CACxF,GAAI,CAACqQ,IAAQ,CAACxB,GAAY,CACxB4Q,GAAU,EACV,MACF,CAEA,MAAME,MAAmB,OAA0B,CACjD,gBAAAxB,GACA,aAAAK,GACA,SAAU3P,IAAY,IACxB,CAAC,EAED,GAAI,CAAC8Q,GAAkB,CACrBF,GAAU,EACV,MACF,CASA,MAPA,OAAkB,gDAAiD,CACjE,SAAAlQ,GACA,eAAgBc,GAChB,eAAgBxB,IAAY,MAAQ,SACtC,CAAC,EAGGU,KAAa,SAAU,CACzB,GAAI,CAAC+O,IAAiB,UAAU,KAAM,CACpCxP,GAAU,QAAQ,CAChB,KAAM,KAAU,WAAW,KAC3B,QAAS,IACP,KACE,yEACA,2CACF,CACF,CACF,CAAC,EACD,MACF,CAEA,MAAM8Q,GAAY53G,GACZ63G,GAAgB7f,IAAW,mBAAmBnjE,GAAU,MAAM,KAAK,GAEzE,GAAI,CACF,MAAM+hF,GAAS,CACb,KAAMvO,GACN,KAAMyO,GACN,IAAKc,GACL,QAASC,GACT,KAAMvB,GAAgB,SAAS,KAC/B,aAAcloE,EAChB,CAAC,EAAE,OAAO,CACZ,OAASt/B,GAAO,CACd2oG,GAAU3oG,EAAK,CACjB,CACA,MACF,CAIA,MAAMgpG,GAAU,CACd,OAAQ,OACR,KAAM,CACJ,IAJiBpR,GAAQ,OAAYwP,GAKrC,WAAYyB,GACZ,UAAW,CACT,CACE,KAAM9iF,GAAU,MAAM,KAAK,KAAOA,GAAU,MAAM,KAAK,KAAK,MAAQ,GACpE,MAAO,wBACP,KAAM,WACR,CACF,CACF,CACF,EAEA,GAAI,CACF,MAAMoL,GAAS,MAAMw2E,GAAc5P,GAAYiR,EAAO,EACtD,GAAI,CAAC73E,GAAO,QAAS,CACnBw3E,GAAU,EACV,MACF,CAEIx3E,GAAO,MACTg3E,GAAOh3E,GAAO,GAAG,EACjBk3E,GAAgB,EAAI,EAExB,OAASroG,GAAO,CACd2oG,GAAU3oG,EAAK,CACjB,CACF,EAEMo5F,GAAmBjtE,IAAmC,CAC1DpG,GAAU,SAAS,CAAE,QAAS,EAAM,CAAC,EACrCmyE,IAAa,UAAU,EACvB,MAAMnwE,MAAM,MAA+B,CACzC,UAAW,uBACX,WAAYggF,IAAa,MAAM,MAAM,kBACrC,SAAU57E,GAAK,QACjB,CAAC,EACD8Z,GAASle,EAAG,CACd,EAEMkhF,MAAwB,eAC3BC,IAA+B,CAC1BA,GAAW,SAAW,YACxBnjF,GAAU,SAAS,CAAE,QAAS,EAAM,CAAC,EACrCmyE,IAAa,UAAU,EACvBjyD,GAAS,aAAa,GAGpBijE,GAAW,SAAW,SAAWA,GAAW,OAC9CX,GAAYW,GAAW,KAAK,CAEhC,EACA,CAACnjF,GAAWmyE,GAAajyD,EAAQ,CACnC,KAEAozD,GAAA,GAA6B,CAC3B,QAAS0O,GACT,SAAAtP,GACA,aAAc,YACd,WAAAV,GACA,eAAgB7mG,IAAOk2G,GACvB,kBAAgB,KACd,kEACA,8BACF,EACA,SAAU,CACR,gBAAiB,CAAC3wG,GAAG01B,KAASitE,GAAgBjtE,EAAI,EAClD,UAAA8Q,GACA,QAAS0rE,EACX,CACF,CAAC,EAED,MAAM3uG,GAAY4tG,IAAiBG,GAAY,UAE/C,SACE,OAAC7gE,EAAA,GACC,SAAO,KAAE,+DAAgE,4BAA4B,EACrG,SAAUnhB,GAAU,MAAM,MAC1B,QAASkX,GAER,SAAAmrE,IAAgBF,MACf,oBACE,oBAACv8E,GAAA,EAAiB,CAAC,MAAO28E,EAAA,CAAU,KACpC,OAACa,GAAA,EAAS,CAAC,MAAOjB,GAAK,QAAQ,OAAO,eAAgBe,EAAA,CAAuB,GAC/E,KAEA,OAAC,KAAY,CAAE,GAAG7Q,GAChB,mBAAC,QAAK,SAAUC,GAAauQ,EAAgB,EAC3C,oBAAC3jE,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC5B,UAAA6yD,OACC,OAACh8D,GAAA,GACC,SAAO,KACL,qFACA,8BACF,EAEA,mBAAC,KAAK,CAAC,QAAQ,yEAAyE,0KAGxF,EACF,EAGD2rE,OACC,QAACxiE,EAAA,EAAK,CAAC,WAAW,SAAS,IAAK,EAC9B,oBAACmkE,GAAA,EAAO,EAAC,KACT,OAAC,OACE,iBACC,yEACA,wBACF,EACF,GACF,EAGD5B,IAAiB,QAAQ,QAAUA,GAAgB,OAAO,OAAS,MAClE,OAAC1rE,GAAA,GACC,SAAO,KACL,kEACA,yBACF,EACA,SAAS,QAER,SAAA0rE,GAAgB,OAAO,IAAI,CAACxnG,GAAOkB,QAClC,OAAC,OAAiB,SAAAlB,EAAA,EAARkB,EAAc,CACzB,EACH,KAGF,OAACP,GAAA,GACC,SAAQ,GACR,SAAO,KAAE,oEAAqE,aAAa,EAE3F,mBAACmzC,GAAA,EAAK,CAAC,SAAQ,GAAC,MAAOk0D,EAAA,CAAY,EACrC,KAEA,OAACpO,GAAA,GACC,aAAa,YACb,MAAAhC,GACA,SAAAE,GACA,SAAAW,GACA,gBAAAZ,GACA,WAAAE,EAAA,CACF,KAEA,QAAC9yD,EAAA,EAAK,CAAC,IAAK,EACV,oBAAC3mC,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS2+B,GAAW,KAAK,UACnD,mBAAC,KAAK,CAAC,QAAQ,gEAAgE,kBAAM,EACvF,KACA,OAAC3+B,EAAA,IACC,QAAQ,UACR,KAAK,SACL,SAAUtE,IAAa89F,IAAY2P,IAAqB,CAACD,IAAiB,UAAU,KAEnF,SAAAxtG,MACG,KAAE,yDAA0D,WAAW,KACvE,KAAE,8DAA+D,gBAAgB,EACvF,GACF,GACF,EACF,EACF,EAEJ,CAEJ,CC/TO,SAASqvG,GAA+B,CAC7C,UAAAtjF,GACA,gBAAAshF,GACA,kBAAAC,GACA,UAAArqE,GACA,UAAAsqE,EACF,EAAU,CACR,KAAM,CAAE,cAAA5P,GAAe,cAAAyP,GAAe,SAAAtP,GAAU,gBAAAD,GAAiB,MAAAD,GAAO,WAAAG,EAAW,KACjFiC,EAAA,GAA4Bj0E,EAAS,EAEvC,OAAK4xE,MAKH,OAACwP,GAAA,CACC,UAAAphF,GACA,cAAA4xE,GACA,cAAAyP,GACA,SAAAtP,GACA,WAAAC,GACA,MAAAH,GACA,gBAAAC,GACA,gBAAAwP,GACA,kBAAAC,GACA,UAAArqE,GACA,UAAAsqE,EAAA,CACF,EAhBO,IAkBX,C,4BCCO,MAAM+B,WACH,IAEV,CAHO,kCAyCL,KAAO,cAAiBh6G,IAAkB,CACxC,KAAK,WAAW,SAAS,CAAE,MAAOA,EAAM,CAAC,CAC3C,EAEA,KAAO,oBAAuBA,IAAkB,CAC9C,KAAK,WAAW,SAAS,CAAE,YAAaA,EAAM,CAAC,CACjD,EAEA,KAAO,aAAgBA,IAAoB,CACzC,KAAK,WAAW,SAAS,CAAE,KAAMA,EAAM,CAAC,CAC1C,EAEA,KAAO,eAAiB,MAAOi6G,GAA4BC,KAAiC,CAC1F,MAAMC,GAAU,CACd,GAAG,KAAK,WAAW,MAAM,KACzB,UAAWF,IAAU,KAAK,WAAW,MAAM,KAAK,UAChD,YAAaC,IAAY,KAAK,WAAW,MAAM,KAAK,WACtD,EAEIC,GAAQ,WACV,QAAM,MAAeA,GAAQ,SAAS,EAGxC,KAAK,WAAW,SAAS,CAAE,KAAMA,EAAQ,CAAC,CAC5C,EAEA,KAAO,iBAAoBn6G,IAAmB,CAC5C,KAAK,WAAW,SAAS,CAAE,SAAUA,EAAM,CAAC,CAC9C,EAEA,KAAO,iBAAoBA,IAAoB,CAC7C,KAAK,aAAa,EAAE,SAAS,CAC3B,SAAUA,EACZ,CAAC,CACH,EAEA,KAAO,kBAAqBA,IAAsB,CAChD,KAAK,aAAa,EAAE,SAAS,CAAE,UAAWA,EAAM,CAAC,CACnD,EAEA,KAAO,wBAA2BA,IAAoB,CACpC,KAAK,iBAAiB,GAC7B,SAAS,CAChB,UAAWA,EACb,CAAC,CACH,EAEA,KAAO,iBAAoBA,IAAkB,CACzB,KAAK,aAAa,GAEzB,SAAS,CAClB,gBAAiBA,EACnB,CAAC,CACH,EAEA,KAAO,uBAA0BA,IAAmB,CAClD,KAAK,qBAAqB,GAAG,SAAS,CACpC,iBAAkBA,EACpB,CAAC,CACH,EAEA,KAAO,gBAAmBqhC,IAAoB,CAC5C,GAAI,CACF,MAAM+4E,GAAU,KAAK,gBAAgB,EACrC/4E,GAAS+4E,GAAQ,OAAO,EAAIA,GAAQ,QAAQ,CAC9C,OAASt9F,GAAK,CACZ,QAAQ,MAAMA,EAAG,CACnB,CACF,EAEA,KAAO,gBAAmB9c,IAAkB,CAC1C,KAAK,cAAc,GAAG,SAAS,CAAE,KAAMA,EAAM,CAAC,CAChD,EAEA,KAAO,gBAAmB+6D,IAAqB,CAC7C,KAAK,WAAW,SAAS,CAAE,QAAAA,EAAQ,CAAC,CACtC,EAEA,KAAO,kBAAoB,IAAM,CAAC,EAElC,KAAO,0BAA4B,MAAOk/C,GAAiBC,KAAsB,CAC3ED,KAAW,KAAK,WAAW,MAAM,KAAK,WACxC,KAAK,SAAS,CACZ,cAAe,GACf,eAAgB,CACd,gBAAiBA,GACjB,kBAAmBC,EACrB,CACF,CAAC,CAEL,EAEA,KAAO,mBAAqB,IAAM,CAChC,KAAK,SAAS,CACZ,cAAe,GACf,eAAgB,MAClB,CAAC,CACH,EAEA,KAAO,cAAgB,CAACrxE,GAAmB2jE,KAAwB,CACjE,MAAM2N,GAAU,CACd,GAAG,KAAK,WAAW,MAAM,KACzB,UAAWtxE,GACX,YAAA2jE,EACF,EACA,KAAK,WAAW,SAAS,CAAE,KAAM2N,EAAQ,CAAC,EAC1C,KAAK,mBAAmB,CAC1B,EAhJA,IAAY,YAA6B,CACvC,SAAO,MAAqB,IAAI,CAClC,CAEO,WAAoB,CACzB,MAAO,UACT,CAEO,cAA+B,CACpC,OAAO,KAAK,UACd,CAEO,cAAe,CACpB,OAAO,KAAW,aAAa,KAAK,UAAU,CAChD,CAEO,kBAAmB,CACxB,OAAO,KAAK,qBAAqB,EAAE,MAAM,aAC3C,CAEO,eAAgB,CACrB,OAAOhmF,GAAA,GAAoB,cAAc,KAAK,UAAU,CAC1D,CAEO,iBAA0C,CAC/C,MAAMkmF,GAAe,KAAW,WAAW,KAAK,WAAa9zG,IAAMA,cAAa,OAAsB,EACtG,GAAI8zG,cAAwB,QAC1B,OAAOA,GAEP,MAAM,IAAI,MAAM,iCAAiC,CAErD,CAEO,sBAAuB,CAC5B,OAAO,KAAK,WAAW,MAAM,QAC/B,CA+GA,MAAO,CAAP,KAAO,UAAYC,EAAA,CACrB,CAEA,SAASA,GAAiC,CAAE,MAAA9pF,EAAM,EAAiD,CACjG,MAAMiG,GAAYjG,GAAM,aAAa,EAC/B,CAAE,SAAA8jF,GAAU,QAAAD,EAAQ,EAAI6C,GAAwBzgF,GAAWjG,GAAM,UAAU,CAAC,EAC5E,CAAE,MAAA/oB,GAAO,YAAAsoC,GAAa,KAAA3L,GAAM,KAAAzI,GAAM,SAAA4+E,EAAS,EAAI9jF,GAAU,SAAS,EAClE,CAAE,cAAA+jF,GAAe,eAAAC,EAAe,EAAIjqF,GAAM,SAAS,EACnD,CAAE,KAAMkqF,EAAa,EAAIlqF,GAAM,cAAc,GAAG,SAAS,GAAK,CAAC,EAC/D,CAAE,SAAAhZ,GAAU,UAAA6rC,GAAW,gBAAiBs3D,EAAS,EAAInqF,GAAM,aAAa,EAAE,SAAS,EACnF,CAAE,UAAAqB,EAAU,EAAIrB,GAAM,iBAAiB,EAAE,SAAS,EAClD,CAAE,iBAAAoqF,EAAiB,EAAIpqF,GAAM,qBAAqB,EAAE,SAAS,EAC7D,CAAE,QAAS4pF,EAAQ,EAAI5pF,GAAM,gBAAgB,EAAE,SAAS,EACxDqqF,GAAmB,CACvB,CACE,SAAO,KAAE,6EAA8E,UAAU,EACjG,MAAO,EACT,EACA,CACE,SAAO,KAAE,6EAA8E,WAAW,EAClG,MAAO,EACT,CACF,EAEMC,GAAwB,CAC5B,CACE,MAAO,EACP,SAAO,KAAE,iFAAkF,SAAS,CACtG,EACA,CACE,MAAO,EACP,SAAO,KACL,0FACA,kBACF,CACF,EACA,CACE,MAAO,EACP,SAAO,KACL,wFACA,gBACF,CACF,CACF,EAEA,SACE,QAACtG,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,SACjE,oBAAC7B,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,QAAC,OAAI,MAAO,CAAE,SAAU,OAAQ,EAC9B,qBAACmf,GAAA,EAAG,CAAC,QAAQ,OAAO,UAAU,SAAS,IAAK,EAAG,aAAc,EAC3D,oBAACvkC,GAAA,GACC,SAAQ,GACR,SACE,QAACskC,EAAA,EAAK,CAAC,eAAe,gBACpB,oBAAClhC,GAAA,EAAK,CAAC,QAAQ,cACb,mBAAC,KAAK,CAAC,QAAQ,yCAAyC,iBAAK,EAC/D,EACC/N,EAAA,EAAO,eAAe,YACrB,OAACq0G,GAAA,EAAoB,CAAC,WAAatzG,IAAU+oB,GAAM,cAAc/oB,EAAK,EAAG,GAE7E,EAGF,mBAAC+8C,GAAA,GACC,GAAG,cACH,KAAK,QACL,MAAO/8C,GACP,SAAWsI,IAAqCygB,GAAM,cAAczgB,GAAE,OAAO,KAAK,EACpF,EACF,KACA,OAACsB,GAAA,GACC,SAAQ,GACR,SACE,QAACskC,EAAA,EAAK,CAAC,eAAe,gBACpB,oBAAClhC,GAAA,EAAK,CAAC,QAAQ,oBACZ,iBAAE,+CAAgD,aAAa,EAClE,EACC/N,EAAA,EAAO,eAAe,YACrB,OAACs0G,GAAA,EAA0B,CAAC,WAAajrE,IAAgBvf,GAAM,oBAAoBuf,EAAW,EAAG,GAErG,EAGF,mBAACp+B,EAAA,GACC,GAAG,oBACH,KAAK,cACL,MAAOo+B,GACP,SAAWhgC,IAAwCygB,GAAM,oBAAoBzgB,GAAE,OAAO,KAAK,EAC7F,EACF,KACA,OAACsB,GAAA,EAAK,CAAC,SAAQ,GAAC,SAAO,KAAE,wCAAyC,MAAM,EACtE,mBAACuiF,GAAA,EAAS,CAAC,GAAG,aAAa,KAAAxvD,GAAY,SAAU5T,GAAM,aAAc,MAAO,GAAI,EAClF,KACA,OAACnf,GAAA,EAAK,CAAC,SAAQ,GAAC,SAAO,KAAE,0CAA2C,QAAQ,EAC1E,mBAAC+4F,GAAA,GACC,MAAOzuE,GAAK,UACZ,SAAUlF,GAAU,oBAAoB,EAAIjG,GAAM,0BAA4BA,GAAM,eACpF,eAAgBiG,GAAU,mBAAmB,EAC7C,YAAakF,IAAM,UAAY,CAACA,GAAK,SAAS,EAAI,OACpD,EACF,KAEA,OAACtqB,GAAA,GACC,SAAQ,GACR,SAAO,KAAE,4CAA6C,UAAU,EAChE,eAAa,KACX,kDACA,0FACF,EAEA,mBAAC0yD,GAAA,EAAgB,CAAC,MAAOw2C,GAAU,QAASM,GAAkB,SAAUrqF,GAAM,iBAAkB,EAClG,GACF,KAEA,OAACyqF,GAAA,GACC,iBAAkBzqF,GAAM,iBACxB,kBAAmBA,GAAM,kBACzB,wBAAyBA,GAAM,wBAC/B,iBAAkBA,GAAM,iBACxB,uBAAwBA,GAAM,uBAC9B,gBAAiBA,GAAM,gBACvB,iBAAkBqB,GAClB,iBAAkB+oF,GAClB,SAAUD,IAAY,GACtB,QAAAP,GACA,SAAU5iG,IAAY,GACtB,UAAA6rC,EAAA,CACF,KAGA,OAAC63D,GAAA,EAAkB,CAAC,SAAO,KAAE,iDAAkD,eAAe,EAAG,OAAQ,GACvG,oBAACvlE,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACtkC,GAAA,GACC,SAAQ,GACR,SAAO,KAAE,+DAAgE,eAAe,EACxF,eAAa,KACX,qEACA,wHACF,EAEA,mBAAC0yD,GAAA,EAAgB,CAAC,SAAUvzC,GAAM,gBAAiB,QAASsqF,GAAuB,MAAOJ,EAAA,CAAc,EAC1G,KAEA,OAACrpG,GAAA,GACC,SAAQ,GACR,SAAO,KAAE,kDAAmD,gBAAgB,EAC5E,eAAa,KACX,wDACA,sFACF,EAEA,mBAAC3D,GAAA,GACC,GAAG,mCACH,MAAO+oB,GAAU,MAAM,QACvB,SAAW1mB,IAAMygB,GAAM,gBAAgBzgB,GAAE,cAAc,OAAO,EAChE,EACF,GACF,EACF,KAEA,OAAC6lC,GAAA,EAAG,CAAC,UAAW,EAAI,SAAAja,GAAK,cAAa,OAACw/E,GAAA,EAAqB,CAAC,UAAA1kF,EAAA,CAAsB,EAAG,GACxF,EAEC+jF,IAAiBC,OAChB,OAACV,GAAA,CACC,UAAAtjF,GACA,gBAAiBgkF,GAAe,gBAChC,kBAAmBA,GAAe,kBAClC,UAAWjqF,GAAM,mBACjB,UAAWA,GAAM,cACnB,GAEJ,CAEJ,C,uCC9UO,MAAM4qF,WAA0B,IAAqE,CAC1G,YAAY34F,GAAqE,CAC/E,MAAM,CACJ,GAAGA,GACH,SAAU,EACZ,CAAC,EAqBH,KAAO,iBAAoBziB,IAAkB,CAC3C,KAAK,SAAS,CAAE,SAAUA,EAAM,CAAC,CACnC,EAEA,KAAO,cAAgB,MAAO6hC,IAAqC,CACjE,MAAMw5E,GAAgD,KAAK,MAAM,KAAK,MAAM,QAAQ,EAC9E5kF,GAAY,KAAK,aAAa,EAE9B6kF,MAAO,OAAkBD,EAAS,EACxC,IAAIE,GAEJ,GAAID,GAAM,CAER,MAAM3uC,GAAM,QAAM,MAAgB,IAAI,EAAE,gBAAgB9qC,GAAO,GAAG,EAClE05E,MAAoBC,GAAA,IAAkC7uC,EAAG,EACzD,MAAMvpD,GAAW,KAAW,sBAAsBm4F,GAAkB,MAAO,CAAE,IAAK9kF,GAAU,MAAM,GAAI,CAAC,EAEvGA,GAAU,qBAAqB,EAC/BA,GAAU,oBAAoBk2C,GAAI,KAAMA,GAAI,QAAQ,EACpDl2C,GAAU,SAASrT,EAAQ,CAC7B,KAAO,CACLi4F,GAAU,QAAUx5E,GAAO,QAC3B05E,MAAoBE,GAAA,IAA0B,CAC5C,UAAWJ,GACX,KAAM5kF,GAAU,MAAM,IACxB,CAAC,EACD,MAAMrT,GAAW,KAAW,sBAAsBm4F,GAAkB,MAAO,CAAE,IAAK9kF,GAAU,MAAM,GAAI,CAAC,EAEvGA,GAAU,qBAAqB,EAC/BA,GAAU,oBAAoB4kF,GAAW5kF,GAAU,MAAM,IAAI,EAC7DA,GAAU,SAASrT,EAAQ,CAC7B,CAEA,KAAK,SAAS,CAAE,SAAU,KAAK,YAAY,CAAE,CAAC,EAG9CqT,GAAU,sBAAsB,CAClC,EAxDE,KAAK,qBAAqB,IAAM,KAAK,SAAS,CAAE,SAAU,KAAK,YAAY,CAAE,CAAC,CAAC,CACjF,CACO,WAAoB,CACzB,MAAO,YACT,CAEO,cAA+B,CACpC,SAAO,MAAqB,IAAI,CAClC,CAEO,cAA4C,CACjD,OAAO,KAAK,aAAa,EAAE,aAAa,CAC1C,CAEO,aAAsB,CAC3B,MAAMilF,GAAW,KAAK,aAAa,EACnC,SAAO,MAAcA,EAAQ,CAC/B,CAyCA,MAAO,CAAP,KAAO,UAAYC,EAAA,CACrB,CAEA,SAASA,GAA2B,CAAE,MAAAnrF,EAAM,EAA2C,CACrF,KAAM,CAAE,MAAA/N,GAAO,gBAAA4jF,EAAgB,EAAIJ,GAAiB,EAAK,EACnD,CAAC2V,GAAUC,EAAW,KAAI,YAAS,EAAK,EAExCplF,GAAYjG,GAAM,aAAa,EAE/B,CAAE,SAAA8jF,GAAU,QAAAD,EAAQ,EAAI6C,GAAwBzgF,GAAWjG,GAAM,UAAU,CAAC,EAC5EsrF,GAAUrlF,GAAU,SAAS,EAAE,KAAK,QACpC,CAAE,SAAAi4E,EAAS,EAAIl+E,GAAM,SAAS,EAE9Bw1E,GAAS,MAAOD,IAAuB,CAC3C,MAAMlkE,GAAS,MAAMwkE,GAAgB5vE,GAAW,CAC9C,UAAWA,GAAU,MAAM,KAAK,UAChC,UAAAsvE,GACA,iBAAkB,KAAK,MAAMv1E,GAAM,MAAM,QAAQ,EACjD,IAAKiG,GAAU,MAAM,KAAK,GAC5B,CAAC,EAEDolF,GAAY,EAAI,EACZh6E,GAAO,SAAW,WACpB,MAAMrR,GAAM,cAAcqR,EAAM,EAChCg6E,GAAY,EAAK,GAEjBA,GAAY,EAAI,CAEpB,EAEMhW,GAAcE,OAClB,OAAC/2F,EAAA,IACC,KAAK,SACL,QAAS,IAAM,CACbg3F,GAAOD,EAAS,CAClB,EACA,QAASA,GAAY,cAAgB,UAEpC,SAAAA,MACC,OAAC,KAAK,CAAC,QAAQ,0DAA0D,gCAAoB,KAE7F,OAAC,KAAK,CAAC,QAAQ,6CAA6C,wBAAY,EAE5E,EAGIH,MACJ,OAAC52F,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS,IAAM6sG,GAAY,EAAK,EAAG,KAAK,UAClE,mBAAC,KAAK,CAAC,QAAQ,4DAA4D,kBAAM,EACnF,EAEI9xG,MAAS,OAAW,EAAS,EAEnC,SAASgyG,GAAyBrrG,GAAe,CAC/C,GAAIA,IAASkrG,GAAU,CACrB,GAAIpW,GAAuB90F,EAAK,EAC9B,SACE,QAAC87B,GAAA,GACC,SAAO,KACL,kHACA,yCACF,EACA,SAAS,QAET,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,0FAA0F,wDAEzG,EACF,KACA,OAACoJ,GAAA,EAAG,CAAC,WAAY,EACf,oBAACD,EAAA,EAAK,CAAC,WAAW,SACf,UAAAiwD,GACAC,GAAW,EAAI,GAClB,EACF,GACF,EAIJ,GAAIJ,GAAkB/0F,EAAK,EACzB,SAAO,OAACi1F,GAAsB,CAAC,WAAAE,GAAwB,aAAAD,EAAA,CAA4B,EAGrF,GAAIF,GAAuBh1F,EAAK,EAC9B,SACE,QAAC87B,GAAA,GACC,SAAO,KACL,2FACA,kBACF,EACA,SAAS,QAET,oBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,0FAA0F,0EAC7C,OAAC,UAAO,mBAAO,EAAS,8BAEpF,EACF,KACA,OAACoJ,GAAA,EAAG,CAAC,WAAY,EACf,mBAACD,EAAA,EAAK,CAAC,WAAW,SAAU,SAAAkwD,GAAW,EAAI,EAAE,EAC/C,GACF,CAGN,CAEA,SACE,oBACG,UAAAn1F,IAASkrG,OACR,OAACpvE,GAAA,GACC,SAAO,KACL,mGACA,0BACF,EACA,SAAS,QAET,mBAAC,KAAG,SAAA97B,GAAM,QAAQ,EACpB,KAEF,OAACilC,EAAA,EAAK,CAAC,WAAW,SAAU,SAAAkwD,GAAW,EAAK,EAAE,GAChD,CAEJ,CACA,SACE,QAAC2O,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,SACjE,oBAAC7B,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,QAAC,OAAI,UAAW1sB,GAAO,QACrB,oBAAC,KAAK,CAAC,QAAQ,0CAA0C,gKAGzD,KACA,OAAC+hG,GAAA,GACC,MAAM,OACN,MAAO4C,GACP,SAAS,OACT,gBAAiB,GACjB,YAAa,GACb,gBAAiB3kG,GAAO,WACxB,OAAQymB,GAAM,iBAChB,EACCsrF,OAAW,OAAClmE,GAAA,EAAG,CAAC,WAAY,EAAI,SAAAmmE,GAAyBt5F,GAAM,KAAK,EAAE,GACzE,GACF,CAEJ,CAEA,MAAM,GAAata,KAA0B,CAC3C,WAAS,QAAI,CACX,QAAS,OACT,OAAQ,OACR,cAAe,SACf,IAAKA,GAAM,QAAQ,CAAC,CACtB,CAAC,EACD,cAAY,QAAI,CACd,SAAU,CACZ,CAAC,CACH,G,gBChPO,MAAM6zG,WAA4B,IAAuE,CAC9G,YAAc,UAAYC,EAAA,CAE1B,IAAY,YAA6B,CACvC,SAAO,MAAqB,IAAI,CAClC,CAEO,WAAoB,CACzB,MAAO,aACT,CAEO,cAA+B,CACpC,OAAO,KAAK,UACd,CACF,CAEA,SAASA,GAA0B,CAAE,MAAAzrF,EAAM,EAA6C,CACtF,MAAMiG,GAAYjG,GAAM,aAAa,EAC/B,CAAE,IAAAytB,EAAI,EAAIxnB,GAAU,SAAS,EAC7B,CAAE,SAAA69E,GAAU,QAAAD,EAAQ,EAAI6C,GAAwBzgF,GAAWjG,GAAM,UAAU,CAAC,EAC5E0rF,GAAoB,KAAW,cAAc,KAAoB,0BAA0B,EAEjG,SACE,QAAC1H,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,SACjE,oBAAC7B,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAAC0lF,GAAA,EAAW,CAAC,SAAU,aAAc,WAAYl+D,IAAO,GAAI,kBAAAi+D,EAAA,CAAsC,GACpG,CAEJ,C,4BCrCO,MAAME,GAAgB,8EAEtB,SAASC,GAAsB51C,GAAkE,CACtG,OAAOA,GAAU,IAAK1iE,KAAc,CAAE,GAAIA,GAAS,MAAM,KAAM,MAAO,GAAGA,GAAS,MAAM,IAAI,EAAG,EAAE,CACnG,CAEO,SAASu4G,GAA4BC,GAAoBC,GAAiC,CAC/F,OAAOD,GAAM,OAAQzuG,IAAS0uG,GAAM,KAAMC,IAASA,GAAK,OAAS3uG,GAAK,IAAM2uG,GAAK,KAAO3uG,GAAK,EAAE,CAAC,CAClG,CAEO,MAAM4uG,GAAyBj2C,IAAqE,CACzG,MAAM+1C,GAAqB,CAAC,EAC5B,UAAWz4G,MAAY0iE,GACrB,UAAWhzC,MAASgzC,GAAW,CAC7B,GAAI1iE,KAAa0vB,GACf,SAGgB1vB,GAAS,oBAAoB,gBAAgB0vB,GAAM,MAAM,IAAI,GAE7E+oF,GAAM,KAAK,CAAE,KAAMz4G,GAAS,MAAM,KAAM,GAAI0vB,GAAM,MAAM,IAAK,CAAC,CAElE,CAGF,OAAO+oF,EACT,EAeO,SAASG,GAAoBl2C,GAAqDhwC,GAAsB,CAC7G,GAAI,CAACA,GACH,MAAO,CAAC,EAGV,IAAImmF,GAA8B,CAAC,EAEnC,UAAW74G,MAAY0iE,GAAW,CAChC,MAAMo2C,GAAa94G,GAAS,MAAM,KAC5BiF,MAAQ,OAAqB6zG,GAAY,CAAE,IAAK,QAAS,MAAOpmF,EAAU,EAAG,CAAC,CAAC,EAEjF,OAAO,KAAKztB,EAAK,EAAE,QACrB4zG,GAAO,KAAK,CAAE,SAAA74G,GAAU,KAAMiF,EAAM,CAAC,CAEzC,CAEA,OAAO4zG,EACT,CAEO,SAASE,GACdF,GACmB,CACnB,MAAMjjG,GAA6B,CAAC,EAEpC,UAAWojG,MAASH,GAAQ,CAC1B,KAAM,CAAE,SAAA74G,GAAU,KAAAi5G,EAAK,EAAID,GACrBl7E,GAA0B,CAC9B,SAAA99B,GACA,MAAO,CACL,CACE,GAAI,YACJ,SAAO,KAAE,qEAAsE,WAAW,CAC5F,CACF,EACA,MAAO,CAAC,EACR,UAAW,EACb,EACA4V,GAAQ,KAAKsjG,GAAap7E,GAAQ,CAAE,GAAI,YAAa,MAAOm7E,EAAK,CAAC,CAAC,CACrE,CAEA,OAAOrjG,EACT,CAEO,MAAMsjG,GAAe,CAACF,GAAwBloF,KAA4D,CAC/G,KAAM,CAAE,GAAAxH,GAAI,MAAArtB,EAAM,EAAI60B,GAChB,CAAE,MAAA0nF,GAAO,MAAAC,EAAM,EAAIO,GAEzB,GAAI/8G,IAAS,OAAOA,IAAU,SAAU,CACtC,MAAMk9G,GAAS,GAAGroF,GAAO,EAAE,IAAI70B,EAAK,GACpC,OAAAu8G,GAAM,KAAK,CAAE,GAAIW,GAAQ,MAAOl9G,EAAM,CAAC,EACvCw8G,GAAM,KAAK,CAAE,KAAMU,GAAQ,GAAI7vF,EAAG,CAAC,EAE5B0vF,EACT,CAEA,GAAI9tE,GAASjvC,EAAK,EAAG,CACnB,MAAMm9G,GAAO,OAAO,KAAKn9G,EAAK,EAC9B,UAAW0nB,MAAOy1F,GAAM,CACtB,MAAMD,GAAS,GAAGroF,GAAO,EAAE,IAAInN,EAAG,GAClC60F,GAAM,KAAK,CAAE,GAAIW,GAAQ,MAAOx1F,EAAI,CAAC,EACrC80F,GAAM,KAAK,CAAE,KAAMU,GAAQ,GAAI7vF,EAAG,CAAC,EACnC0vF,GAAQE,GAAaF,GAAO,CAAE,GAAIG,GAAQ,MAAOl9G,GAAM0nB,EAAG,CAAE,CAAC,CAC/D,CAEA,OAAOq1F,EACT,CAEA,OAAOA,EACT,EAEaK,GAAoB,CAACP,GAAoBD,KAAwC,CAC5F,MAAMG,GAAQH,GAAO,KAAMG,IAAUA,GAAM,SAAS,MAAM,OAASF,EAAU,EAC7E,OAAKE,IAID9tE,GAAS8tE,GAAM,IAAI,EACdM,GAAYN,GAAM,IAAI,EAJtB,CAQX,EAEMM,GAAeC,IACL,OAAO,OAAOA,EAAM,EAAE,OAAe,CAAC/qF,GAAOvyB,KACrD,OAAOA,IAAU,SACZuyB,GAAQ8qF,GAAYr9G,EAAK,EAG3BuyB,GAAQ,EACd,CAAC,EAKC,eAAegrF,GACpB92C,GACAhwC,GAC4B,CAC5B,OAAO,IAAI,QAAQ,CAACwlC,GAASC,KAAW,CAEtC,WAAW,IAAM,CACf,GAAI,CACF,MAAMshD,GAAWC,GAAsBh3C,GAAWhwC,EAAS,EAC3DwlC,GAAQ6gD,GAAyBU,EAAQ,CAAC,CAC5C,OAASztG,GAAG,CACVmsD,GAAOnsD,EAAC,CACV,CACF,EAAG,GAAG,CACR,CAAC,CACH,CAOA,SAAS0tG,GACPh3C,GACAhwC,GAC4B,CAC5B,GAAI,CAACA,GACH,MAAO,CAAC,EAGV,IAAIgiB,GAAsC,CAAC,EAC3C,MAAMilE,GAAmBC,GAA0Bl3C,GAAWhwC,EAAS,EACvE,UAAWmnF,MAAmBF,GAAkB,CAC9C,MAAM10G,MAAQ,OAAqB40G,GAAiB,CAAE,IAAK,QAAS,MAAOnnF,EAAU,EAAG,CAAC,CAAC,EACtF,OAAO,KAAKztB,EAAK,EAAE,QACrByvC,GAAQ,KAAK,CAAE,SAAUmlE,GAAiB,KAAM50G,EAAM,CAAC,CAE3D,CAEA,OAAOyvC,EACT,CAEO,MAAMklE,GAA4B,CAACl3C,GAAqDj2C,KAAqB,CAClH4rF,GAAc,UAAY,EAC1B,MAAMyB,GAAiC,CAAC,EAElCp5G,MADgB,OAAmB+rB,GAAO,CAAC,EACnB,MAAM4rF,EAAa,EAEjD,GAAI,CAAC33G,GACH,OAAOo5G,GAGT,UAAWzsF,MAAS3sB,GAAS,CAe3B,GAdI,CAAC2sB,IAIDA,GAAM,QAAQ,KAAK,IAAM,IAKzBA,GAAM,QAAQ,MAAM,IAAM,IAK1BA,GAAM,QAAQ,UAAU,IAAM,GAEhC,SAGF,MAAMgF,GAAe0nF,GAAgB1sF,EAAK,EAEtCq1C,GAAU,KAAM1iE,IAAaA,GAAS,MAAM,OAASqyB,EAAY,GAKjEynF,GAAqB,KAAMznG,IAASA,KAASggB,EAAY,GAIzDA,IACFynF,GAAqB,KAAKznF,EAAY,CAE1C,CAEA,OAAOynF,EACT,EAEO,SAASC,GAAgBC,GAAoB,CAClD,MAAM3sF,GAAQ4sF,GAAkBD,EAAU,EAC1C,GAAI,CAAC3sF,GACH,OAEF,MAAMgF,GAAehF,GAAM,MAAM,CAAC,EAAE,KAAMA,IAAUA,KAAU,MAAS,EAGvE,GAAI,EAAAgF,KAAiB,CAAC,GAItB,OAAOA,EACT,CAGO,MAAM4nF,GAAqBC,KAChC7B,GAAc,UAAY,EACnBA,GAAc,KAAK6B,EAAc,GAG1C,SAAShvE,GAASjvC,GAAkD,CAClE,OAAO,OAAOA,IAAU,UAAYA,KAAU,MAAQ,CAAC,MAAM,QAAQA,EAAK,CAC5E,C,2JClPO,SAASk+G,GAAmB,CAAE,SAAAt+G,GAAU,KAAAE,EAAK,EAA6B,CAC/E,MAAM0D,MAAU,WAAQ,OAAM,OAA6B,EAAG,CAAC,CAAC,EAC1DxD,MAAQ,WACZ,IAAMwD,GAAQ,KAAMvD,IAA6CA,GAAE,QAAUH,EAAI,GAAK0D,GAAQ,CAAC,EAC/F,CAACA,GAAS1D,EAAI,CAChB,EAEA,SACE,OAACq+G,GAAA,GACC,QAAM,KAAE,0DAA2D,eAAe,EAClF,MAAAn+G,GACA,QAAAwD,GACA,SAAA5D,GACA,OAAQ+S,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,oBACpE,CAEJ,CCIO,SAASyrG,GAAmB,CAAE,SAAAr6G,GAAU,aAAAs6G,GAAc,SAAAvN,GAAU,SAAAF,EAAS,EAA4B,CAC1G,MAAM7mG,MAAS,OAAW,EAAS,EAC7B,CAACu0G,GAAWC,EAAY,KAAI,YAAiB,EAC7C,CAAE,KAAAnoG,GAAM,KAAAtW,GAAM,MAAA+J,GAAO,YAAAkmC,GAAa,KAAAlwC,EAAK,EAAIkE,GAAS,SAAS,EAC7Dy6G,MAAiB,OAAuB1+G,EAAI,KAAI,OAAkBA,EAAI,EAAI,OAC1E,CAAC2+G,GAAeC,EAAU,KAAIpY,GAAA,GAAW,SAAY,CACzD,QAAMqY,GAAA,GAAc56G,GAAS,kBAAmB,CAAC,CACnD,EAAG,CAACA,EAAQ,CAAC,EACP66G,GAAwBj1G,IAAkD,CAC1EA,GAAO,OACT00G,GAAa10G,GAAO,KAAK,CAE7B,EAEMsqF,MAAe,eAClBlkF,IAAmC,CAClC,MAAM8xB,MAAS,OAAqB99B,GAAUgM,GAAE,cAAc,KAAK,EAC/D8xB,GAAO,eAAiBy8E,IAC1BC,GAAa18E,GAAO,YAAY,CAEpC,EACA,CAAC99B,GAAUu6G,EAAS,CACtB,EAEMO,GAAc9uG,IAAmC,CAChDuuG,IACHv6G,GAAS,SAAS,CAAE,KAAMgM,GAAE,cAAc,KAAM,CAAC,CAErD,EAEM+uG,GAAe/uG,IAAmChM,GAAS,SAAS,CAAE,MAAOgM,GAAE,cAAc,KAAM,CAAC,EACpGgvG,GAAqBhvG,IACzBhM,GAAS,SAAS,CAAE,YAAagM,GAAE,cAAc,KAAM,CAAC,EACpDivG,GAAgBn/G,IAAuBkE,GAAS,SAAS,CAAE,KAAAlE,EAAK,CAAC,EAEjEo/G,MAAuB,OAAmBl7G,EAAQ,EAElDm7G,GAAoBC,IAA0B,IAAM,IACxD,OAAkB,iBAAiB,EACnCvO,GAASx6F,EAAI,EACb+oG,GAAU,CACZ,EAEA,SACE,QAAC,QACC,gBAAY,KAAE,uEAAwE,sBAAsB,EAE5G,oBAACjB,GAAkB,CAAC,SAAUU,GAAsB,KAAA9+G,EAAA,CAAY,KAEhE,OAACs/G,GAAA,EAAc,CACb,mBAAC,KAAK,CAAC,QAAQ,+CAA+C,mBAAO,EACvE,KACA,OAACC,GAAA,GACC,QAAM,KAAE,iDAAkD,MAAM,EAChE,eAAa,KACX,gFACA,yDACF,EACA,eAAa,KAAE,iEAAkE,eAAe,EAChG,aAAcjpG,IAAQ,GACtB,SAAU69E,GACV,OAAQ4qB,GACR,OAAQlsG,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,mBAClE,UAAW,KAAwB,QACnC,SAAQ,GACR,QAAS,CAAC,CAAC2rG,GACX,MAAOA,EAAA,CACT,KACA,OAACe,GAAA,GACC,QAAM,KAAE,kDAAmD,OAAO,EAClE,eAAa,KACX,yEACA,uBACF,EACA,eAAa,KAAE,8DAA+D,YAAY,EAC1F,aAAcx1G,IAAS,GACvB,OAAQi1G,GACR,OAAQnsG,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,oBACpE,KACA,OAAC2sG,GAAA,GACC,QAAM,KAAE,wDAAyD,aAAa,EAC9E,aAAcvvE,IAAe,GAC7B,eAAa,KAAE,oEAAqE,kBAAkB,EACtG,OAAQgvE,GACR,MAAO,GACT,KAEA,OAACp/G,GAAA,EAAkB,CAAC,SAAUq/G,GAAc,KAAMn/G,IAAQ,MAAqB,KAAO,KAAAC,EAAA,CAAY,EAEjG0+G,OAAkB,OAACA,GAAA,CAAe,SAAAz6G,GAAoB,WAAA26G,EAAA,CAAwB,EAE9EO,OAAwB,OAACM,GAAA,EAAqB,CAAC,QAASx7G,GAAS,oBAAoB,EAAK,EAAG,KAE9F,OAAC,OAAI,UAAWgG,GAAO,gBACrB,oBAAC4rC,EAAA,EAAK,CAAC,IAAK,EACV,oBAAC,MAAgB,CACd,UAAC,CAAE,UAAA6pE,GAAW,UAAAL,EAAU,OACvB,OAACnwG,EAAA,IACC,QAAQ,cACR,KAAK,UACL,QAAS,IAAM,CACbwwG,GAAUtoE,GAAA,EAAc,CACtB,SAAO,KAAE,6DAA8D,iBAAiB,EACxF,KAAM,oCAAoC9gC,EAAI,IAC9C,eAAa,KACX,mEACA,iBACF,EACA,UAAW8oG,GAAiBC,EAAS,EACrC,UAAWA,GACX,OAAQ,EACV,CAAC,CACH,EAEA,mBAAC,KAAK,CAAC,QAAQ,8CAA8C,kBAAM,EACrE,EAEJ,KACA,OAACnwG,EAAA,IACC,QAAQ,YACR,cAAa2D,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,YACvE,QAASm+F,GAET,mBAAC,KAAK,CAAC,QAAQ,oDAAoD,wBAAY,EACjF,EAECmO,OACC,OAACjwG,EAAA,IACC,SAAUyvG,GAAc,QACxB,QAAQ,YACR,cAAa9rG,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,aACvE,QAAS+rG,GAER,SAAAD,GAAc,WACb,OAACtkE,GAAA,GACC,UAAWpwC,GAAO,mBAClB,QAAM,KAAE,0DAA2D,kBAAkB,EACvF,KAEA,KAAE,iDAAkD,WAAW,EAEnE,GAEJ,EACF,GACF,CAEJ,CAEA,MAAM,GAAa5B,KAA0B,CAC3C,mBAAiB,QAAI,CACnB,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,sBAAoB,QAAI,CACtB,aAAc,CAChB,CAAC,CACH,G,wCChLO,MAAMs3G,GAA8B,CAAC,CAAE,UAAAh5C,EAAU,IAAa,CACnE,MAAM81C,MAAQ,WAAQ,IAAMF,GAAsB51C,EAAS,EAAG,CAACA,EAAS,CAAC,EACnE+1C,MAAQ,WAAQ,IAAME,GAAsBj2C,EAAS,EAAG,CAACA,EAAS,CAAC,EAEzE,OAAK+1C,GAAM,UAKT,OAACkD,GAAA,GACC,KAAM,GACN,SAAO,KAAE,mDAAoD,cAAc,EAC3E,MAAOpD,GAA4BC,GAAOC,EAAK,EAC/C,MAAAA,GAEC,UAAC,CAAE,UAAAgD,EAAU,OAEV,OAACxwG,EAAA,IACC,QAAS,IAAM,IACb,OAAkB,4BAA4B,EAC9CwwG,GAAU,CACZ,EACA,KAAK,cACL,QAAQ,YAER,mBAAC,KAAK,CAAC,QAAS,oDAAqD,6BAAiB,EACxF,CAEJ,CACF,EAxBO,IA0BX,E,gBC9BO,MAAMG,GAAuB,CAAC,CAAE,GAAAtyF,GAAI,OAAAuvF,GAAQ,QAAAgD,EAAQ,IAAa,CACtE,MAAMC,MAAU,WACd,IAAMjD,GAAO,KAAM92G,KAAO,OAAOA,GAAE,UAAa,SAAWA,GAAE,SAAWA,GAAE,SAAS,MAAM,QAAUunB,EAAE,EACrG,CAACuvF,GAAQvvF,EAAE,CACb,EAEA,GAAIuvF,GAAO,SAAW,GAAKgD,IAAW,CAACC,GACrC,OAAO,KAGT,MAAMtD,GAAQsD,GAAQ,MAAM,IAAK/5G,IAC3BA,GAAE,MAAM,SAAS,IAAIunB,EAAE,EAAE,EACpB,CAAE,GAAGvnB,GAAG,MAAO,SAAU,EAE3BA,EACR,EAED,SACE,OAAC45G,GAAA,GACC,KAAM,GACN,SAAO,KAAE,2DAA4D,qCAAsC,CACzG,WAAY,IAAIryF,EAAE,EACpB,CAAC,EACD,MAAAkvF,GACA,MAAOsD,GAAQ,MAEd,UAAC,CAAE,UAAAL,EAAU,OAEV,OAAChrE,GAAA,GACC,QAAS,IAAM,IACb,OAAkB,sBAAsB,EACxCgrE,GAAU,CACZ,EACA,KAAK,cACL,WAAS,KAAE,6DAA8D,aAAa,EACxF,CAEJ,CACF,CAEJ,EC7BO,SAASM,GAAsB,CACpC,MAAAluG,GACA,SAAA7N,GACA,UAAAg8G,GACA,cAAAC,GACA,OAAQC,GACR,YAAaC,GACb,SAAUC,EACZ,EAA6C,CAC3C,MAAMh4G,MAAQ,OAAU,EAClB4B,MAAS,OAAW,EAAS,EAE7Bq2G,MAAa,OAAcr8G,EAAQ,EACnCs8G,GAAgBt8G,GAAS,MACzB04C,GAAa4jE,GAAc,KAE3BC,GADSlD,GAAkB3gE,GAAYsjE,EAAS,EAC9B,GAAKM,GAAc,OAAS,QAC9C,CAAC7kE,GAAiB+kE,EAAkB,KAAI,YAAS,EAAK,EACtDC,GAA6B16F,IAAkB,IAAM,CACzDy6F,GAAmBz6F,EAAI,CACzB,EACMo5F,GAAmB,IAAM,IAC7B,OAAkB,iBAAiB,EACnCiB,GAAc1jE,EAAU,CAC1B,EAEA,SACE,OAAC,MAAS,CAAC,YAAa,KAAK,UAAUA,EAAU,EAAG,MAAA7qC,GACjD,UAAC6uG,GAAUC,QACV,QAAC,MACC,IAAKD,GAAS,SACb,GAAGA,GAAS,eACb,MAAO,CACL,WAAYC,GAAS,WAAa,OAAS,OAC3C,WAAYA,GAAS,WAAav4G,GAAM,OAAO,WAAW,UAAY,OACtE,GAAGs4G,GAAS,eAAe,KAC7B,EAEA,oBAAC,MAAG,KAAK,WAAW,UAAW12G,GAAO,OACpC,mBAACiF,EAAA,IACC,KAAK,KACL,KAAK,OACL,QAAUlC,IAAU,CAClBA,GAAM,eAAe,EACrBmzG,GAAYxjE,EAAU,CACxB,EACA,UAAW1yC,GAAO,SAClB,cAAa4I,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,mBAAmB0tG,GAAc,IAAI,EAEnG,SAAAA,GAAc,KACjB,EACF,KACA,OAAC,MACC,KAAK,WACL,UAAWt2G,GAAO,iBAClB,QAAU+C,IAAU,CAClBA,GAAM,eAAe,EACrBmzG,GAAYxjE,EAAU,CACxB,EACA,cAAa9pC,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,yBAAyB0tG,GAAc,IAAI,EAEzG,SAAAD,EAAA,CACH,KAEA,OAAC,MAAG,KAAK,WAAW,UAAWr2G,GAAO,OACpC,oBAAC,OAAI,UAAWA,GAAO,MACrB,oBAAC42G,GAAA,CAAuB,OAAAL,EAAA,CAAgB,KACxC,OAACX,GAAA,CACC,GAAIU,GAAc,KAClB,QAASA,GAAc,OAAS,QAChC,OAAQL,EAAA,CACV,KACA,OAACxrE,GAAA,GACC,QAAU1nC,IAAU,CAClBA,GAAM,eAAe,KACrB,OAAkB,oBAAoB,EACtCozG,GAAiBzjE,EAAU,CAC7B,EACA,KAAK,OACL,WAAS,KAAE,sEAAuE,oBAAoB,EACtG,cAAa9pC,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,yBAC7D0tG,GAAc,IAChB,EACF,KACA,OAAC7rE,GAAA,GACC,QAAU1nC,IAAU,CAClBA,GAAM,eAAe,EACrByzG,GAAmB,EAAI,CACzB,EACA,KAAK,YACL,WAAS,KAAE,mEAAoE,iBAAiB,EAChG,cAAa5tG,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,sBAC7D0tG,GAAc,IAChB,EACF,KACA,OAACnpE,GAAA,GACC,OAAQsE,GACR,SAAO,KAAE,iEAAkE,iBAAiB,EAC5F,QAAM,KACJ,gEACA,iDACA,CAAE,SAAU6kE,GAAc,IAAK,CACjC,EACA,eAAa,KACX,uEACA,iBACF,EACA,UAAWnB,GACX,UAAWsB,GAA0B,EAAK,EAC5C,KAEA,OAAC,OAAK,GAAGC,GAAS,gBAAiB,UAAW12G,GAAO,WACnD,mBAACb,GAAA,EAAI,CAAC,KAAK,gBAAgB,KAAK,IAAK,GACvC,GACF,EACF,GACF,EAEJ,CAEJ,CAMA,SAASy3G,GAAuB,CAAE,OAAAL,EAAO,EAA8C,CACrF,MAAMv2G,MAAS,OAAW,EAAS,EAEnC,OAAIu2G,MAEA,OAAC1zG,GAAA,GACC,WAAS,KACP,iGACA,8DACF,EAEA,mBAAC1D,GAAA,GACC,KAAK,QACL,UAAWa,GAAO,WAClB,gBAAY,KACV,oGACA,8DACF,EACF,EACF,KAKF,OAAC6C,GAAA,GACC,WAAS,KACP,qGACA,kEACF,EAEA,mBAAC1D,GAAA,GACC,KAAK,uBACL,UAAWa,GAAO,WAClB,gBAAY,KACV,oFACA,+DACF,EACF,EACF,CAEJ,CAEA,SAAS,GAAU5B,GAAsB,CACvC,MAAO,CACL,cAAY,QAAI,CACd,OAAQ,OACR,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,UAAQ,QAAI,CACV,MAAO,IACT,CAAC,EACD,YAAU,QAAI,CACZ,OAAQ,UACR,MAAOA,GAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,oBAAkB,QAAI,CACpB,MAAO,OACP,SAAU,QACV,OAAQ,UACR,SAAU,SACV,aAAc,WACd,WAAY,QACd,CAAC,EACD,cAAY,QAAI,CACd,MAAOA,GAAM,GAAG,QAAQ,UACxB,YAAaA,GAAM,QAAQ,CAAC,CAC9B,CAAC,EACD,cAAY,QAAI,CACd,MAAOA,GAAM,GAAG,QAAQ,OACxB,YAAaA,GAAM,QAAQ,CAAC,CAC9B,CAAC,EACD,SAAO,QAAI,CACT,QAAS,OACT,IAAKA,GAAM,QAAQ,CAAC,EACpB,WAAY,QACd,CAAC,CACH,CACF,CCxMO,SAASy4G,GAAmB,CACjC,UAAAn6C,GACA,OAAAm2C,GACA,cAAAoD,GACA,cAAAa,GACA,SAAAjQ,GACA,YAAAD,GACA,MAAA9qC,GACA,OAAAqwC,EACF,EAAwB,CACtB,MAAMnsG,MAAS,OAAW,EAAS,EAE7B+2G,GAAaj/E,IAAuB,CACpC,CAACA,GAAO,aAAe,CAACA,GAAO,YAInC,OAAkB,wBAAwB,EAC1Cg/E,GAAch/E,GAAO,OAAO,MAAOA,GAAO,YAAY,KAAK,EAC7D,EAEMk/E,GAAgB,IAAM,CAC1Bl7C,GAAM,EACN,KAAsB,yBAAyB,CAAE,OAAQ,eAAgB,CAAC,CAC5E,EAIA,OAF0BY,GAAU,OAAO,KAAkB,EAEpC,QAAU,KACjC,OAACu6C,GAAA,CAAmB,MAAOD,EAAA,CAAe,KAE1C,QAACprE,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,qBAAC,SACC,UAAW,KAAW,eAAgB,sBAAuB5rC,GAAO,cAAc,EAClF,cAAa4I,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,MAC/D,KAAK,OAEL,oBAAC,SACC,oBAAC,MACC,oBAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,oBAAQ,EACzE,KACA,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,kDAAkD,sBAAU,EAC7E,KACA,OAAC,MAAG,QAAS,EAAG,GAClB,EACF,KACA,OAAC,MAAe,CAAC,UAAAmuG,GACf,mBAAC,MAAS,CAAC,YAAY,iBAAiB,UAAU,WAC/C,SAACL,OACA,QAAC,SAAM,IAAKA,GAAS,SAAW,GAAGA,GAAS,eACzC,UAAAh6C,GAAU,IAAI,CAACw6C,GAAervG,KAAU,CACvC,GAAI,IAAC,OAAmBqvG,EAAa,EACnC,OAAO,KAGT,MAAMZ,GAAgBY,GAAc,MACpC,SACE,OAACnB,GAAA,CACC,MAAAluG,GAEA,SAAUqvG,GACV,SAAArQ,GACA,YAAAD,GACA,OAAAuF,GACA,UAAW0G,GACX,cAAAoD,EAAA,EANK,GAAGK,GAAc,IAAI,IAAIzuG,EAAK,EAOrC,CAEJ,CAAC,EACA6uG,GAAS,aACZ,EAEJ,EACF,GACF,KACA,QAAC9qE,EAAA,EAAK,CACJ,oBAAC8pE,GAA2B,CAAC,UAAAh5C,EAAA,CAAsB,KACnD,OAACz3D,EAAA,IACC,cAAa2D,EAAA,GAAU,MAAM,UAAU,SAAS,UAAU,KAAK,UAC/D,QAASouG,GACT,KAAK,OAEL,mBAAC,KAAK,CAAC,QAAQ,oDAAoD,wBAAY,EACjF,GACF,GACF,CAEJ,CAEA,SAASC,GAAmB,CAAE,MAAAn7C,EAAM,EAA0B,CAC5D,SACE,OAAClwB,EAAA,EAAK,CAAC,UAAU,SACf,oBAACG,GAAA,GACC,QAAQ,iBACR,UACE,OAAC9mC,EAAA,IACC,cAAa2D,EAAA,GAAU,WAAW,iBAAiB,SAAS,cAAc,EAC1E,KAAK,iBACL,QAASkzD,GACT,KAAK,KAEL,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,wBAAY,EAClE,EAEF,WAAS,KAAE,8BAA+B,kCAAkC,EAE5E,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,yCAAyC,oVAKxD,EACF,KACA,QAAC,KAAK,CAAC,QAAQ,2CAA2C,0BAC1C,OACd,OAAC3e,GAAA,EAAQ,CAAC,SAAQ,GAAC,KAAK,qDAAqD,iDAE7E,EAAY,IAAI,yBAElB,GACF,EACF,CAEJ,CAEA,MAAM,GAAY,KAAO,CACvB,kBAAgB,QAAI,CAClB,SAAU,MACZ,CAAC,CACH,GCnJag6D,GAAqC,IAO3C,SAASC,GAAsB,CAAE,UAAA16C,GAAW,UAAAhwC,EAAU,EAA6C,CACxG,KAAM,CAACw2D,GAAMtpC,EAAO,KAAI,YAAS,EAAK,EAChC,CAAC3X,GAASo1E,EAAU,KAAI,YAAS,CAAC,EAClC71F,MAAQ,OAAW,EAAS,KAElC,aAAU,IAAM61F,GAAY13G,IAAcA,GAAY,CAAC,EAAG,CAAC+8D,GAAWhwC,EAAS,CAAC,EAEhF,KAAM,CAAC,CAAE,QAAAlmB,GAAS,MAAOqsG,EAAO,EAAGyE,EAAW,KAAI/a,GAAA,GAAW,SAAY,CACvE,MAAMgb,GAAQ,KAAK,IAAI,EACjBC,GAAkB,MAAMhE,GAAmB92C,GAAWhwC,EAAS,EAE/D+qF,GADO,KAAK,IAAI,EACCF,GACvB,OAAIE,IAAWN,OACb,OAAkB,mCAAoC,CAAE,QAAAM,EAAQ,CAAC,EAEnEJ,GAAW,CAAC,EAELG,EACT,EAAG,CAAC96C,GAAWhwC,EAAS,CAAC,EAEnBgrF,GAAYx4G,IAAoB,CAChCA,QACF,OAAkB,oCAAoC,EAGlD+iC,GAAU,GACZq1E,GAAY,GAIhB19D,GAAQ16C,EAAM,CAChB,EAEA,SACE,OAAC,OAAI,UAAWsiB,GAAM,UACpB,mBAAC2vF,GAAA,EAAkB,CAAC,SAAO,OAACwG,GAAA,EAAc,EAAI,OAAQz0B,GAAM,SAAAw0B,GACzD,SAAAlxG,IAAW,CAACqsG,MACX,OAACjnE,EAAA,EAAK,CAAC,eAAe,SAAS,UAAU,SACvC,oBAACA,EAAA,EAAK,CAAC,eAAe,SACpB,oBAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,sBAAU,EAC7D,KACA,OAACmkE,GAAA,EAAO,EAAC,GACX,EACF,EACE8C,GAAO,OAAS,KAClB,OAAC+E,GAAA,CAAa,OAAA/E,EAAA,CAAgB,KAE9B,OAACgF,GAAA,EAAW,EAEhB,EACF,CAEJ,CAEA,SAASF,IAA8B,CACrC,MAAMn2F,MAAQ,OAAW,EAAS,EAElC,SACE,QAAC,MACC,oBAAC,KAAK,CAAC,QAAQ,uDAAuD,wCAA4B,KAClG,OAAC3e,GAAA,GACC,WAAS,KACP,+DACA,+GACF,EAEA,mBAAC1D,GAAA,EAAI,CAAC,KAAK,cAAc,UAAWqiB,GAAM,SAAU,EACtD,GACF,CAEJ,CAEA,SAASq2F,IAA2B,CAClC,SACE,OAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,sCAAsC,kDAAsC,EAC7F,CAEJ,CAEA,SAASD,GAAa,CAAE,OAAA/E,EAAO,EAAgD,CAC7E,MAAMrxF,MAAQ,OAAW,EAAS,EAClC,SACE,QAAC,SAAM,UAAU,mCACf,oBAAC,SACC,oBAAC,MACC,oBAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,mCAAmC,oBAAQ,EAC5D,KACA,OAAC,MAAG,QAAS,EAAG,GAClB,EACF,KACA,OAAC,SACE,SAAAqxF,GAAO,IAAKG,IAAU,CACrB,MAAM3mG,GAAO,OAAO2mG,GAAM,UAAa,SAAWA,GAAM,SAAWA,GAAM,SAAS,MAAM,KACxF,SACE,QAAC,MACC,oBAAC,MAAG,UAAWxxF,GAAM,YACnB,mBAAC,QAAM,SAAAnV,EAAA,CAAK,EACd,KACA,OAAC,MAAG,UAAWmV,GAAM,cAAe,KACpC,OAAC,MAAG,UAAWA,GAAM,cAAe,KACpC,OAAC,MAAG,UAAWA,GAAM,cAAe,KACpC,OAAC,MAAG,UAAWA,GAAM,WACnB,mBAACo0F,GAAoB,CAAC,GAAIvpG,GAAM,OAAAwmG,GAAgB,QAAS,GAAO,EAClE,IATOxmG,EAUT,CAEJ,CAAC,EACH,GACF,CAEJ,CAEA,MAAM,GAAajO,KAA0B,CAC3C,aAAW,QAAI,CACb,UAAWA,GAAM,QAAQ,CAAC,EAC1B,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,YAAU,QAAI,CACZ,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,iBAAe,QAAI,CACjB,MAAO,IACT,CAAC,EACD,eAAa,QAAI,CACf,MAAO,KACP,cAAe,MACf,MAAOA,GAAM,OAAO,KAAK,WAC3B,CAAC,EACD,cAAY,QAAI,CACd,SAAU,SACV,aAAc,WACd,WAAY,SACZ,MAAO,OACP,UAAW,OACb,CAAC,CACH,GClIO,MAAM05G,WAA0B,IAAqE,CAArG,kCAOL,KAAU,SAAW,IAAIpN,GAAyB,IAAI,EAUtD,KAAQ,iBAAoBh4D,IACR,KAAK,aAAa,EACnB,UAAW14C,IAAaA,GAAS,MAAM,OAAS04C,EAAU,EAG7E,KAAQ,oBAAuBuW,IAA+B,CAE5D,MAAM8uD,GAAgB,KAAK,MAAM,WAAa,GACxC,CAAE,UAAAr7C,EAAU,EAAI,KAAK,eAAe,EAAE,MAG5C,GAAI,CAFaA,GAAUq7C,EAAa,EAEzB,CAEb,QAAQ,MAAM,oBAAoB,EAClC,MACF,CAEA,MAAMC,GAAmB,CAAC,GAAGt7C,GAAU,MAAM,EAAGq7C,EAAa,EAAG9uD,GAAa,GAAGyT,GAAU,MAAMq7C,GAAgB,CAAC,CAAC,EAGlH,KAAK,eAAe,EAAE,SAAS,CAAE,UAAWC,EAAiB,CAAC,CAChE,EAEA,KAAO,SAAYtlE,IAAuB,CAExC,MAAMqlE,GAAgB,KAAK,iBAAiBrlE,EAAU,EAChD,CAAE,UAAAgqB,EAAU,EAAI,KAAK,eAAe,EAAE,MAC5C,GAAIq7C,KAAkB,GAAI,CAExB,QAAQ,MAAM,oBAAoB,EAClC,MACF,CAGA,MAAMC,GAAmB,CAAC,GAAGt7C,GAAU,MAAM,EAAGq7C,EAAa,EAAG,GAAGr7C,GAAU,MAAMq7C,GAAgB,CAAC,CAAC,EAGrG,KAAK,eAAe,EAAE,SAAS,CAAE,UAAWC,EAAiB,CAAC,EAE9D,KAAK,SAAS,CAAE,UAAW,MAAU,CAAC,CACxC,EAMA,KAAO,aAAgBtlE,IAAuB,CAC5C,MAAMqlE,GAAgB,KAAK,iBAAiBrlE,EAAU,EAChDgqB,GAAY,KAAK,eAAe,EAAE,MAAM,UAE9C,GAAIq7C,KAAkB,GAAI,CACxB,QAAQ,MAAM,oBAAoB,EAClC,MACF,CAEA,MAAME,GAAmBv7C,GAAUq7C,EAAa,EAChD,IAAIG,GAAa,EACbC,GAAU,WAAWF,GAAiB,MAAM,IAAI,GAGpD,KAAOv7C,GAAU,KAAMlhE,IAAMA,GAAE,MAAM,OAAS28G,EAAO,GACnDD,KACAC,GAAU,WAAWF,GAAiB,MAAM,IAAI,IAAIC,EAAU,GAIhE,MAAMjvD,GAAcgvD,GAAiB,MAAMA,GAAiB,KAAK,EAEjEhvD,GAAY,SAAS,CAAE,KAAMkvD,EAAQ,CAAC,EAEtC,MAAMH,GAAmB,CACvB,GAAGt7C,GAAU,MAAM,EAAGq7C,GAAgB,CAAC,EACvC9uD,GACA,GAAGyT,GAAU,MAAMq7C,GAAgB,CAAC,CACtC,EAEA,KAAK,eAAe,EAAE,SAAS,CAAE,UAAWC,EAAiB,CAAC,CAChE,EAEA,KAAO,eAAiB,CAACI,GAAmBC,KAAoB,CAC9D,MAAM37C,GAAY,KAAK,eAAe,EAAE,MAAM,UAC9C,GAAI,CAAC,KAAK,eAAe,EACvB,OAGF,GAAI07C,GAAY,GAAKA,IAAa17C,GAAU,QAAU27C,GAAU,GAAKA,IAAW37C,GAAU,OAAQ,CAChG,QAAQ,MAAM,eAAe,EAC7B,MACF,CACA,MAAMs7C,GAAmB,CAAC,GAAGt7C,EAAS,EAEhC47C,GAAYN,GAAiB,OAAOI,GAAW,CAAC,EACtDJ,GAAiB,OAAOK,GAAS,EAAGC,GAAU,CAAC,CAAC,EACzB,KAAK,eAAe,EAC5B,SAAS,CAAE,UAAWN,EAAiB,CAAC,CACzD,EAEA,KAAO,OAAUtlE,IAAuB,CACtC,MAAMqlE,GAAgB,KAAK,iBAAiBrlE,EAAU,EACtD,GAAIqlE,KAAkB,GAAI,CACxB,QAAQ,MAAM,oBAAoB,EAClC,MACF,CACA,KAAK,SAAS,CAAE,UAAWA,EAAc,CAAC,CAC5C,EAEA,KAAO,MAAQ,IAAM,CACnB,MAAMr7C,GAAY,KAAK,aAAa,EAC9Bq7C,GAAgBr7C,GAAU,OAE1B67C,MAAqB,OAAmB77C,EAAS,EAEvD,KAAK,eAAe,EAAE,SAAS,CAAE,UAAW,CAAC,GAAG,KAAK,aAAa,EAAG67C,EAAkB,CAAE,CAAC,EAC1F,KAAK,SAAS,CAAE,UAAWR,EAAc,CAAC,CAC5C,EAEA,KAAO,aAAgBhiH,IAA+B,CAEpD,MAAMgiH,GAAgB,KAAK,MAAM,WAAa,GACxC,CAAE,UAAAr7C,EAAU,EAAI,KAAK,eAAe,EAAE,MACtC1iE,GAAW0iE,GAAUq7C,EAAa,EAExC,GAAI,CAAC/9G,GAAU,CAEb,QAAQ,MAAM,oBAAoB,EAClC,MACF,CAEA,KAAM,CAAE,KAAAqS,GAAM,MAAAvM,EAAM,EAAI9F,GAAS,MAC3BivD,MAAc,OAAiBlzD,GAAM,CAAE,KAAAsW,GAAM,MAAAvM,EAAM,CAAC,EAC1D,KAAK,oBAAoBmpD,EAAW,CACtC,EAEA,KAAO,SAAW,IAAM,CACtB,KAAK,SAAS,CAAE,UAAW,MAAU,CAAC,CACxC,EAEA,KAAO,uBAAyB,CAAC58C,GAAcsR,KAA4D,CACzG,IAAI66F,GAAY,KACX,MAAoC,KAAKnsG,EAAI,IAChDmsG,GAAY,yFAGT,MAAsB,KAAKnsG,EAAI,IAClCmsG,GAAY,sDAGd,MAAMx+G,GAAW,KAAK,eAAe,EAAE,UAAUqS,EAAI,GAAG,MAMxD,OAJIrS,IAAYA,GAAS,MAAQ2jB,KAC/B66F,GAAY,8CAGVA,GACK,CAAC,GAAMA,EAAS,EAGlB,CAAC,GAAO,IAAI,CACrB,EAEA,KAAO,aAAe,OACbvV,GAAA,IAA0B,KAAK,aAAa,CAAC,EAGtD,KAAO,UAAY,IAAM,CACvB,MAAMx8E,GAAQ,KAAK,aAAa,EAEhC,OADemsF,GAAoB,KAAK,aAAa,EAAGnsF,EAAK,CAE/D,EAEA,KAAO,iBAAmB,IAAM,CAC9B,MAAMosF,GAAS,KAAK,UAAU,EAE9B,OADsBE,GAAyBF,EAAM,CAEvD,EA9LA,YAAc,UAAY4F,EAAA,CAEnB,WAAoB,CACzB,MAAO,WACT,CAIO,cAA+B,CACpC,SAAO,MAAqB,IAAI,CAClC,CAEO,gBAAiC,CACtC,OAAO,KAAW,aAAa,KAAK,aAAa,CAAC,CACpD,CA4CO,cAAe,CACpB,OAAO,KAAK,eAAe,EAAE,MAAM,SACrC,CAmIF,CAEA,SAASA,GAA+B,CAAE,MAAAhyF,EAAM,EAA2C,CACzF,MAAMiG,GAAYjG,GAAM,aAAa,EAC/B,CAAE,SAAA8jF,GAAU,QAAAD,EAAQ,EAAI6C,GAAwBzgF,GAAWjG,GAAM,UAAU,CAAC,EAE5E,CAAE,SAAAogF,GAAU,aAAA6R,GAAc,eAAAC,GAAgB,OAAAxM,GAAQ,aAAAmI,GAAc,SAAAvN,GAAU,MAAAjrC,EAAM,EAAIr1C,GACpF,CAAE,UAAAi2C,EAAU,EAAIj2C,GAAM,eAAe,EAAE,SAAS,EAChD,CAAE,UAAAokF,EAAU,EAAIpkF,GAAM,SAAS,EAC/BwvF,MAAgB,WAAQ,IAAMxvF,GAAM,iBAAiB,EAAG,CAACA,EAAK,CAAC,EAC/DosF,MAAS,WAAQ,IAAMpsF,GAAM,UAAU,EAAG,CAACA,EAAK,CAAC,EACjD+1E,GAAY/1E,GAAM,aAAa,EAErC,GAAIokF,KAAc,QAAanuC,GAAUmuC,EAAS,EAAG,CACnD,MAAM7wG,GAAW0iE,GAAUmuC,EAAS,EACpC,GAAI7wG,GACF,SACE,OAAC4+G,GAAA,CACC,SAAA5+G,GACA,aAAAs6G,GACA,SAAAvN,GACA,QAAAuD,GACA,SAAAC,GACA,UAAA79E,GACA,SAAAm6E,EAAA,CACF,CAGN,CAEA,SACE,QAAC4D,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,SACjE,oBAAC7B,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAACmqF,GAAA,CACC,UAAAn6C,GACA,OAAAm2C,GACA,cAAAoD,GACA,SAAApP,GACA,YAAa6R,GACb,cAAeC,GACf,MAAA78C,GACA,OAAAqwC,EAAA,CACF,KACA,OAACiL,GAAqB,CAAC,UAAA16C,GAAsB,UAAW8/B,EAAA,CAAW,GACrE,CAEJ,CAYA,SAASoc,GAA2B,CAClC,SAAA5+G,GACA,QAAAswG,GACA,SAAAC,GACA,UAAA79E,GACA,aAAA4nF,GACA,SAAAvN,GACA,SAAAF,EACF,EAAwC,CACtC,KAAM,CAAE,KAAAx6F,EAAK,EAAIrS,GAAS,SAAS,EAE7B6+G,GAAsB,CAC1B,KAAMxsG,GACN,WAAYi+F,EACd,EACA,SACE,QAACG,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAASsO,GAAqB,OAAQ,KAAe,SAC7E,oBAACpQ,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,OAAC2nF,GAAA,CACC,SAAAr6G,GACA,aAAAs6G,GACA,SAAAvN,GACA,SAAAF,EAAA,EAEK7sG,GAAS,MAAM,GACtB,GACF,CAEJ,C,uCCtSO,MAAM8+G,GAAuB,CAAC,CAAE,UAAA1D,GAAW,UAAA7pE,GAAW,QAAAT,EAAQ,IAAiC,CACpG,MAAMsxD,MAAY,OAAmB,EAE/B2c,GAAqB,SAAY,CACrB,MAAMxtE,GAAUT,EAAO,GAGrCsxD,GAAU,QAAQ,qBAAsB,yBAAyBtxD,GAAQ,OAAO,EAAE,EAClF,KAAsB,sBAAsB,CAAE,QAASA,GAAQ,QAAS,QAAS,EAAK,CAAC,GAEvFsxD,GAAU,MAAM,2BAA4B,kCAAkCtxD,GAAQ,OAAO,EAAE,EAGjGsqE,GAAU,CACZ,EAEA,SACE,OAACjoE,GAAA,GACC,OAAQ,GACR,SAAO,KAAE,+DAAgE,iBAAiB,EAC1F,KAAK,UACL,UAAWioE,GACX,UAAW2D,GACX,QACE,OAAC,KACC,oBAAC,MACC,QAAQ,8DACR,OAAQ,CAAE,QAASjuE,GAAQ,OAAQ,EACpC,uEAC4D,cAAc,uCAC3E,EACF,EAEF,eAAa,KACX,qEACA,sCACA,CAAE,QAASA,GAAQ,OAAQ,CAC7B,EACF,CAEJ,E,gBChCO,MAAME,GAA2B,CAAC,CAAE,SAAAguE,GAAU,QAAAC,GAAS,SAAAC,GAAU,YAAA7rE,GAAa,UAAA9B,EAAU,IAAqB,CAClH,MAAMC,MAAO,OAAS0tE,GAAS,IAAKA,GAAS,GAAG,EAC1Cl5G,MAAS,OAAW,EAAS,EAEnC,SACE,QAAC4rC,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,qBAACA,EAAA,EAAK,CAAC,eAAe,gBAAgB,WAAW,SAC/C,qBAACA,EAAA,EAAK,CAAC,WAAW,SAChB,qBAAC,QAAK,aAAW,OAAG5rC,GAAO,YAAaA,GAAO,cAAc,EAC3D,qBAAC,MACC,QAAQ,iEACR,OAAQ,CAAE,QAASg5G,GAAS,QAAS,OAAQA,GAAS,UAAW,QAASA,GAAS,SAAU,EAE7F,qBAAC,UAAO,qBAAS,eAAc,EAAS,eAAa,aAAa,IAAE,eACtE,EACCA,GAAS,SACZ,KACA,OAAC75G,GAAA,EAAI,CAAC,KAAK,cAAc,KAAK,IAAK,MACnC,QAAC,QAAK,UAAWa,GAAO,YACtB,qBAAC,MACC,QAAQ,iEACR,OAAQ,CAAE,QAASi5G,GAAQ,QAAS,OAAQA,GAAQ,UAAW,QAASA,GAAQ,SAAU,EAE1F,qBAAC,UAAO,qBAAS,eAAc,EAAS,eAAa,aAAa,IAAE,eACtE,EACCA,GAAQ,SACX,GACF,EACC5rE,OACC,OAAC,MAAgB,CACd,UAAC,CAAE,UAAAooE,GAAW,UAAAL,EAAU,OACvB,OAACnwG,EAAA,IACC,QAAQ,cACR,KAAK,UACL,QAAS,IAAM,CACbwwG,GAAUqD,GAAsB,CAC9B,QAASE,GACT,UAAAztE,GACA,UAAA6pE,EACF,CAAC,CACH,EAEA,oBAAC,MACC,QAAQ,4DACR,OAAQ,CAAE,QAAS4D,GAAS,OAAQ,EACrC,gCACqB,eACtB,EACF,EAEJ,GAEJ,EAEC,OAAO,QAAQxtE,EAAI,EAAE,IAAI,CAAC,CAAC7tB,GAAKquB,EAAK,OACpC,OAACC,GAAA,EAAS,CAAC,MAAAD,GAAwB,MAAOruB,EAAA,EAAZA,EAAiB,CAChD,KAED,OAACkuB,GAAA,EAAG,CAAC,WAAY,EACf,mBAACslE,GAAA,GACC,OAAQ,GACR,SAAO,KAAE,kEAAmE,gBAAgB,EAE5F,mBAAClkF,GAAA,GACC,SAAU,KAAK,UAAUisF,GAAS,IAAK,KAAM,CAAC,EAC9C,SAAU,KAAK,UAAUA,GAAS,IAAK,KAAM,CAAC,EAChD,EACF,EACF,GACF,CAEJ,EAEM,GAAa96G,KAA0B,CAC3C,eAAa,QAAI,CACf,MAAOA,GAAM,OAAO,KAAK,UACzB,SAAUA,GAAM,WAAW,UAAU,QACvC,CAAC,EACD,kBAAgB,QAAI,CAClB,aAAc,CAChB,CAAC,CACH,G,2BCnFO,MAAM2vC,GAAsB,CAAC,CAAE,SAAA4T,GAAU,WAAA5R,GAAY,QAAAopE,GAAS,UAAA5tE,EAAU,IAA0B,CACvG,MAAMvrC,MAAS,OAAW,EAAS,EAEnC,SACE,OAAC,OAAI,UAAWA,GAAO,OACrB,oBAAC,SAAM,aAAW,OAAG,eAAgBA,GAAO,KAAK,EAC/C,oBAAC,SACC,oBAAC,MACC,oBAAC,MAAG,UAAU,UAAU,KACxB,OAAC,MAAG,UAAU,UACZ,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,mBAAO,EACxE,KACA,OAAC,MAAG,UAAU,WACZ,mBAAC,KAAK,CAAC,QAAQ,6CAA6C,gBAAI,EAClE,KACA,OAAC,MAAG,UAAU,WACZ,mBAAC,KAAK,CAAC,QAAQ,mDAAmD,sBAAU,EAC9E,KACA,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,8CAA8C,iBAAK,EACpE,KACA,OAAC,OAAG,GACN,EACF,KACA,OAAC,SACE,SAAA2hD,GAAS,IAAI,CAAC7W,GAAS9oB,QACtB,QAAC,MACC,oBAAC,MACC,mBAAC4sB,GAAA,GACC,gBAAY,KACV,oEACA,0CACA,CAAE,QAAS9D,GAAQ,OAAQ,CAC7B,EACA,aAAW,QAAI,CACb,QAAS,QACX,CAAC,EACD,QAASA,GAAQ,QACjB,SAAWvK,IAAO44E,GAAQ54E,GAAIuK,GAAQ,EAAE,EACxC,SAAU,CAACA,GAAQ,SAAWiF,EAAA,CAChC,EACF,KACA,OAAC,MAAI,SAAAjF,GAAQ,QAAQ,KACrB,OAAC,MAAI,SAAAA,GAAQ,kBAAkB,KAC/B,OAAC,MAAI,SAAAA,GAAQ,UAAU,KACvB,OAAC,MAAI,SAAAA,GAAQ,QAAQ,KACrB,OAAC,MAAG,UAAU,aACX,SAAA9oB,KAAQ,KACP,OAACo3F,GAAA,EAAG,CAAC,QAAM,KAAE,oDAAqD,QAAQ,EAAG,WAAY,GAAI,KAE7F,OAAC,MAAgB,CACd,UAAC,CAAE,UAAA3D,GAAW,UAAAL,EAAU,OACvB,OAACnwG,EAAA,IACC,QAAQ,YACR,KAAK,KACL,KAAK,UACL,QAAS,IAAM,CACbwwG,GAAUqD,GAAsB,CAC9B,QAAAhuE,GACA,UAAAsqE,GACA,UAAA7pE,EACF,CAAC,EACD,KAAsB,sBAAsB,CAC1C,QAAST,GAAQ,QACjB,MAAO9oB,GACP,QAAS,GACT,aAAc8oB,GAAQ,OACxB,CAAC,CACH,EAEA,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,mBAAO,EACxE,EAEJ,EAEJ,IAjDOA,GAAQ,EAkDjB,CACD,EACH,GACF,EACF,CAEJ,EAEA,SAAS,GAAU1sC,GAAsB,CACvC,MAAO,CACL,UAAQ,QAAI,CACV,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,SAAO,QAAI,CACT,GAAI,CACF,WAAY,mBACd,CACF,CAAC,CACH,CACF,CChGO,MAAMi7G,GAAuB,GAkB7B,MAAMC,WAAyB,IAAoE,CAMxG,YAAY5gG,GAA8B,CACxC,MAAM,CACJ,GAAGA,GACH,SAAU,CAAC,EACX,UAAW,GACX,YAAa,GACb,SAAU,OACV,YAAa,GACb,SAAU,CACR,IAAK,GACL,IAAK,EACP,CACF,CAAC,EAhBH,KAAQ,OAAiB2gG,GACzB,KAAQ,OAAS,EACjB,KAAQ,eAAiB,GAyDzB,KAAO,cAAgB,CAAC7sG,GAAS,KAAgB,CAC/C,MAAM0nC,GAAM,KAAK,WAAW,MAAM,IAElC,GAAI,CAACA,GACH,OAGF,KAAK,SAAS,CAAE,YAAa1nC,EAAO,CAAC,EAErC,MAAM03C,GAAiB,KAAK,eACxB,CAAE,MAAO,KAAK,OAAQ,MAAO,KAAK,OAAQ,cAAe,KAAK,cAAe,EAC7E,CAAE,MAAO,KAAK,OAAQ,MAAO,KAAK,MAAO,EAE7C,KACG,eAAehQ,GAAKgQ,EAAc,EAClC,KAAMpsB,IAAW,CAChB,KAAK,SAAS,CACZ,UAAW,GACX,SAAU,CAAC,GAAItrB,GAAU,KAAK,MAAM,UAAY,CAAC,EAAK,CAAC,EAAI,GAAG,KAAK,iBAAiBsrB,GAAO,QAAQ,CAAC,CACtG,CAAC,EACD,KAAK,QAAU,KAAK,OAEpB,KAAK,eAAiBA,GAAO,eAAiB,EAChD,CAAC,EACA,MAAO/kB,IAAQ,QAAQ,IAAIA,EAAG,CAAC,EAC/B,QAAQ,IAAM,KAAK,SAAS,CAAE,YAAa,EAAM,CAAC,CAAC,CACxD,EAEA,KAAO,QAAU,SAAY,CAC3B,MAAMwmG,GAAmB,KAAK,SAAS,OAAQzuE,IAAYA,GAAQ,OAAO,EACpE,CAACmuE,GAASD,EAAQ,EAAIO,GACtBlsE,GAAc4rE,GAAQ,UAAY,KAAK,WAAW,MAAM,QAM9D,GAJA,KAAK,SAAS,CACZ,UAAW,EACb,CAAC,EAEG,CAAC,KAAK,WAAW,MAAM,IACzB,OAGF,IAAIO,GAAM,MAAM,KAAW,oBAAoB,KAAK,WAAW,MAAM,IAAKR,GAAS,EAAE,EACjFS,GAAM,MAAM,KAAW,oBAAoB,KAAK,WAAW,MAAM,IAAKR,GAAQ,EAAE,EAEpF,KAAK,SAAS,CACZ,SAAAD,GACA,UAAW,GACX,YAAA3rE,GACA,QAAA4rE,GACA,SAAU,UACV,SAAU,CACR,IAAKO,GAAI,KACT,IAAKC,GAAI,IACX,CACF,CAAC,CACH,EAEA,KAAO,MAAQ,IAAM,CACnB,KAAK,eAAiB,GACtB,KAAK,SAAS,CACZ,SAAU,OACV,SAAU,CACR,IAAK,GACL,IAAK,EACP,EACA,YAAa,GACb,QAAS,OACT,SAAU,KAAK,SAAS,IAAK3uE,KAAa,CAAE,GAAGA,GAAS,QAAS,EAAM,EAAE,EACzE,SAAU,MACZ,CAAC,CACH,EAEA,KAAO,QAAU,CAACvK,GAAuCm5E,KAAsB,CAC7E,KAAK,SAAS,CACZ,SAAU,KAAK,SAAS,IAAK5uE,IAC3BA,GAAQ,KAAO4uE,GAAY,CAAE,GAAG5uE,GAAS,QAASvK,GAAG,cAAc,OAAQ,EAAIuK,EACjF,CACF,CAAC,CACH,EAvHE,KAAK,qBAAqB,IAAM,CAC9B,KAAK,cAAc,CACrB,CAAC,CACH,CAtBA,YAAc,UAAY6uE,EAAA,CAwB1B,IAAY,YAA6B,CACvC,SAAO,MAAqB,IAAI,CAClC,CAEA,IAAW,UAAyC,CAClD,OAAO,KAAK,MAAM,UAAY,CAAE,IAAK,GAAI,IAAK,EAAG,CACnD,CAEA,IAAW,UAAqC,CAC9C,OAAO,KAAK,MAAM,UAAY,CAAC,CACjC,CAEA,IAAW,OAAgB,CACzB,OAAO,KAAK,MACd,CAEA,IAAW,OAAgB,CACzB,OAAO,KAAK,MACd,CAEA,IAAW,eAAwB,CACjC,OAAO,KAAK,cACd,CAEO,WAAoB,CACzB,MAAO,UACT,CAEO,cAA+B,CACpC,OAAO,KAAK,UACd,CAEO,cAAe,CACpB,OAAO,KAAW,aAAa,KAAK,UAAU,CAChD,CAkFQ,iBAAiBh4D,GAAsD,CAC7E,MAAMl0C,GAAW,KAAK,aAAa,EAAE,YAAY,EAEjD,OAAOk0C,GAAS,IAAK7W,KACZ,CACL,GAAGA,GACH,qBAAmB,OAAeA,GAAQ,QAAS,CAAE,SAAAr9B,EAAmB,CAAC,EACzE,aAAW,OAAsBq9B,GAAQ,QAAS,CAAE,SAAAr9B,EAAmB,CAAC,EACxE,QAAS,EACX,EACD,CACH,CACF,CAEA,SAASksG,GAA+B,CAAE,MAAAlzF,EAAM,EAA0C,CACxF,MAAMiG,GAAYjG,GAAM,aAAa,EAC/B,CAAE,UAAA9lB,GAAW,YAAAi5G,GAAa,SAAAC,GAAU,SAAAb,GAAU,QAAAC,GAAS,YAAA5rE,EAAY,EAAI5mB,GAAM,SAAS,EACtF,CAAE,SAAA8jF,GAAU,QAAAD,EAAQ,EAAI6C,GAAwBzgF,GAAWjG,GAAM,UAAU,CAAC,EAC5EspB,GAAatpB,GAAM,SAAS,OAAQqkB,IAAYA,GAAQ,OAAO,EAAE,SAAW,EAC5EgvE,GAAcrzF,GAAM,SAAS,OAAS,EACtC2iE,GAAU3iE,GAAM,SAAS,QAAUA,GAAM,MAE/C,IAAI8iE,GACF9iE,GAAM,SAAS,KAAMszF,IAAQA,GAAI,UAAY,CAAC,GAC9CtzF,GAAM,SAAS,OAASA,GAAM,QAAU,GACxCA,GAAM,gBAAkB,GAE1B,MAAMuzF,MACJ,oBACE,oBAAClnC,GAAA,GACC,QAASrsD,GAAM,MACf,YAAauyF,IAAU,QACvB,WAAYC,IAAS,QACrB,YAAA5rE,EAAA,CACF,EACC1sC,MACC,OAACs5G,GAAA,CAAuB,IAAI,yBAA2B,KAEvD,OAACjvE,GAAA,CACC,QAAAiuE,GACA,SAAAD,GACA,YAAA3rE,GACA,SAAU5mB,GAAM,SAChB,UAAWiG,GAAU,UACvB,GAEJ,EAGIwtF,MACJ,oBACG,UAAAv5G,MACC,OAACs5G,GAAA,CAAuB,IAAI,8BAAgC,KAE5D,OAAClsE,GAAA,CACC,SAAUtnB,GAAM,SAChB,QAASA,GAAM,QACf,WAAAspB,GACA,UAAWrjB,GAAU,UACvB,EAEDktF,OAAe,OAACK,GAAA,CAAuB,IAAI,8BAAgC,EAC3EH,OACC,OAAC,MACC,QAAA1wB,GACA,WAAAr5C,GACA,YAAatpB,GAAM,cACnB,QAASA,GAAM,QACf,WAAY,CAAC,CAAC8iE,EAAA,CAChB,GAEJ,EAGF,SACE,QAACkhB,GAAA,EAAI,CAAC,SAAAF,GAAoB,QAAAD,GAAkB,OAAQ,KAAe,SACjE,oBAAC7B,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,EACxCmtF,KAAa,UAAYG,GAAkBE,EAAA,EAC9C,CAEJ,CAEA,MAAMD,GAAyB,CAAC,CAAE,IAAAz2F,EAAI,OACpC,QAACooB,EAAA,EAAK,CACJ,oBAACmkE,GAAA,EAAO,EAAC,KACT,OAAC,MAAI,SAAAvsF,EAAA,CAAI,GACX,ECxOK,SAAS2pF,GAAwBzgF,GAA2BytF,GAAyB,CAC1F,MAAMl1D,MAAW,MAAY,EACvBolD,MAAW,OAAa3xF,IAAUA,GAAM,QAAQ,EAChD6xF,MAAW,MAAYF,GAAU,mBAAmB,EACpD+P,GAAmB1tF,GAAU,WAAWu4B,GAAUolD,EAAQ,EAE1DC,GAAwB,CAC5B,QAAM,KAAE,qEAAsE,UAAU,EACxF,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,WAAY,UAAW,IAAK,CAAC,EACtF,SAAU,CAAC,EACX,WAAYm1D,EACd,EAEA,OAAI1tF,GAAU,MAAM,KAAK,UACvB49E,GAAQ,SAAU,KAAK,CACrB,QAAM,KAAE,mCAAoC,SAAS,EACrD,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,WAAY,UAAW,IAAK,CAAC,EACtF,OAAQk1D,KAAoB,UAC9B,CAAC,EACD7P,GAAQ,SAAU,KAAK,CACrB,QAAM,KAAE,uCAAwC,aAAa,EAC7D,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,cAAe,UAAW,IAAK,CAAC,EACzF,OAAQk1D,KAAoB,aAC9B,CAAC,EACD7P,GAAQ,SAAU,KAAK,CACrB,QAAM,KAAE,qCAAsC,WAAW,EACzD,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,YAAa,UAAW,IAAK,CAAC,EACvF,OAAQk1D,KAAoB,WAC9B,CAAC,EACD7P,GAAQ,SAAU,KAAK,CACrB,QAAM,KAAE,iCAAkC,OAAO,EACjD,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,QAAS,UAAW,IAAK,CAAC,EACnF,OAAQk1D,KAAoB,OAC9B,CAAC,GAGCztF,GAAU,MAAM,KAAOA,GAAU,MAAM,KAAK,SAC9C49E,GAAQ,SAAU,KAAK,CACrB,QAAM,KAAE,oCAAqC,UAAU,EACvD,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,WAAY,UAAW,IAAK,CAAC,EACtF,OAAQk1D,KAAoB,UAC9B,CAAC,EAGCztF,GAAU,MAAM,KAAOA,GAAU,MAAM,KAAK,UAC1C,KAAW,cAAc,KAAoB,yBAAyB,GACxE49E,GAAQ,SAAU,KAAK,CACrB,QAAM,KAAE,uCAAwC,aAAa,EAC7D,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,cAAe,UAAW,IAAK,CAAC,EACzF,OAAQk1D,KAAoB,aAC9B,CAAC,EAIL7P,GAAQ,SAAU,KAAK,CACrB,QAAM,KAAE,uCAAwC,YAAY,EAC5D,IAAK,IAAa,iBAAiBrlD,GAAU,CAAE,SAAU,aAAc,UAAW,IAAK,CAAC,EACxF,OAAQk1D,KAAoB,YAC9B,CAAC,EAEM,CAAE,SAAA5P,GAAU,QAAAD,EAAQ,CAC7B,CAEO,SAAS+P,GAA2BtQ,GAAqC,CAC9E,OAAQA,GAAU,CAChB,IAAK,cACH,OAAO,IAAI6C,GAAoB,CAAC,CAAC,EACnC,IAAK,YACH,OAAO,IAAIkL,GAAkB,CAAC,CAAC,EACjC,IAAK,QACH,OAAO,IAAIvK,GAAuB,CAAC,CAAC,EACtC,IAAK,WACH,OAAO,IAAI+L,GAAiB,CAAC,CAAC,EAChC,IAAK,aACH,OAAO,IAAIjI,GAAkB,CAAC,CAAC,EACjC,IAAK,cACH,OAAO,IAAIY,GAAoB,CAAC,CAAC,EACnC,IAAK,WACL,QACE,OAAO,IAAIhC,GAAwB,CAAC,CAAC,CACzC,CACF,C,2BCnGO,MAAMqK,EAA2D,CACtE,YAAoBjW,GAAwB,CAAxB,YAAAA,EAAyB,CAE7C,SAAoB,CAClB,MAAO,CAAC,UAAW,YAAa,YAAa,WAAY,gBAAiB,QAAS,WAAW,CAChG,CAEA,aAAoC,CAClC,MAAM3rF,GAAQ,KAAK,OAAO,MAE1B,MAAO,CACL,cAAe,KAAK,iBAAiB,EACrC,UAAWA,GAAM,UACjB,SAAUA,GAAM,UAAU,UAAU,EACpC,UAAWA,GAAM,WAAW,UAAU,GAAK,OAC3C,MAAOA,GAAM,YAAc,MAAU,KAAO,OAAS,OACrD,UAAWA,GAAM,UACjB,MAAO,KAAW,KAAK,MAAM,SAAS,CACxC,CACF,CAEQ,kBAAuC,CAC7C,GAAI,KAAK,OAAO,MAAM,gBAAgB8Q,GAAA,EACpC,OAAO,KAAK,OAAO,MAAM,KAAK,MAAM,KAAK,MAAM,iBAAmB,OAAS,MAI/E,CAEA,cAAcltB,GAAoC,CAChD,KAAM,CAAE,UAAA2tG,GAAW,UAAAx+E,GAAW,UAAAu+E,GAAW,UAAAuQ,EAAU,EAAI,KAAK,OAAO,MAC7D3oD,GAAuC,CAAC,EA2B9C,GAzBI,OAAOt1D,GAAO,UAAa,UAAY,KAAK,OAAO,iBAAiB,GACtEs1D,GAAO,SAAWyoD,GAA2B/9G,GAAO,QAAQ,EAGvDmvB,KACC,KAAK,OAAO,MAAM,SAGpB,WAAW,IAAM,KAAK,OAAO,gBAAgB,CAAC,EAE9CmmC,GAAO,SAAW,SAGbt1D,GAAO,eAAe,UAAU,IACzCs1D,GAAO,SAAW,QAIhB,OAAOt1D,GAAO,WAAc,SAC9Bs1D,GAAO,UAAYt1D,GAAO,UACjB2tG,IAAa3tG,GAAO,YAAc,OAC3Cs1D,GAAO,UAAY,QAIjB,OAAOt1D,GAAO,WAAc,SAAU,CACxC,MAAMhD,MAAQ,MAAc,KAAK,OAAQgD,GAAO,SAAS,EAEzD,GAAI,CAAChD,GAAO,CACV,QAAQ,KAAK,SAASgD,GAAO,SAAS,YAAY,EAClD,MACF,CAGI,KAAK,OAAO,MAAM,YACpBs1D,GAAO,UAAY,QAIhBnmC,IACH,KAAK,OAAO,gBAAgB,EAG9B,MAAM+uF,MAAmB,MAAwBlhH,EAAK,EACtD,GAAIkhH,IAAoB,CAACA,IAAkB,MAAM,SAAU,CACzD,KAAK,8CAA8ClhH,GAAOkhH,EAAgB,EAC1E,MACF,CAEA5oD,GAAO,aAAY,MAAoBt4D,EAAK,CAC9C,MAAW0wG,IAAa1tG,GAAO,YAAc,OAC3Cs1D,GAAO,UAAY,QAGjB,OAAOt1D,GAAO,WAAc,UAC9Bs1D,GAAO,UAAYt1D,GAAO,UAC1Bs1D,GAAO,QAAU,IAAI6oD,GAAA,EAAY,CAC/B,UAAWn+G,GAAO,SACpB,CAAC,GACQi+G,IAAaj+G,GAAO,YAAc,OAC3Cs1D,GAAO,QAAU,OACjBA,GAAO,UAAY,QAGrB,MAAMnnC,GAAS,KAAK,OAAO,MAAM,KACjC,GAAIA,cAAkBjB,GAAA,EAA0B,CAC9C,MAAMkxF,GAAmB,OAAOp+G,GAAO,eAAkB,SAErD,CAAC,CAACmuB,GAAO,MAAM,KAAK,MAAM,mBAAqBiwF,IACjDjwF,GAAO,MAAM,KAAK,SAAS,CAAE,iBAAAiwF,EAAiB,CAAC,CAEnD,CAEI,OAAOp+G,GAAO,OAAU,WACtBA,GAAO,QAAU,QAAUA,GAAO,QAAU,MAC9Cs1D,GAAO,UAAY,MAAU,MAI7B,OAAO,KAAKA,EAAM,EAAE,OAAS,GAC/B,KAAK,OAAO,SAASA,EAAM,CAE/B,CAKQ,8CAA8Ct4D,GAAiBwuE,GAAgC,CACrG,MAAMlR,GAAMkR,GAAS,iBAAkBpvD,IAAU,CAC3CA,GAAM,WACR,KAAK,OAAO,SAAS,CAAE,aAAW,MAAoBpf,EAAK,CAAE,CAAC,EAC9Ds9D,GAAI,YAAY,EAEpB,CAAC,CACH,CACF,C,4BC/HO,MAAM+jD,EAAc,CAApB,cACL,KAAQ,OAA2B,CAAC,EAEpC,WAAW3vG,GAAsB,CAC/B4vG,GAAA,EAAU,KACR5vG,GAAK,IACJnF,IAAQ,CACPA,GAAI,eAAe,EACnBA,GAAI,gBAAgB,EACpBA,GAAI,YAAc,GAClBmF,GAAK,UAAU,CACjB,EACAA,GAAK,MAAQ,SACf,EACA,KAAK,OAAO,KAAK,CACf,GAAGA,GACH,KAAMA,GAAK,MAAQ,SACrB,CAAC,CACH,CAEA,WAAY,CACV,KAAK,OAAO,QAASA,IAAS,CAC5B4vG,GAAA,EAAU,OAAO5vG,GAAK,IAAKA,GAAK,IAAI,CACtC,CAAC,EACD,KAAK,OAAS,CAAC,CACjB,CACF,C,oDCpCO,SAAS6vG,GAAqBjrF,GAAoBkrF,GAAiC,CAEpF,QAAQ,KAAKA,EAAM,IACrBA,MAAS,MAAyB,SAASA,GAAQ,EAAE,CAAC,GAGxD,MAAMxhH,GAAQ,KAAW,WAAWs2B,GAAQK,IACpCA,cAAe,KAId6qF,KAAW7qF,GAAI,UAAU,EAHvB,EAIV,EAED,GAAI32B,GAAO,CACT,GAAIA,cAAiB,KACnB,OAAOA,GAEP,MAAM,IAAI,MAAM,wBAAwBwhH,EAAM,4BAA4B,CAE9E,CAEA,OAAO,IACT,CAEO,SAASC,GAAwBp9F,GAAsB,CAC5D,OAAOA,GAAI,SAAS,iBAAiB,CACvC,C,4BCVO,SAASq9F,GAAuBprF,GAAuB,CAC5D,MAAMqrF,GAAc,IAAIN,GACxB,IAAIO,GAAgC,KAEpC,MAAMxpC,GAAU9hD,GAAM,iBAAiB,EAEjCurF,GAA6B,IAAU,UAAU,MAAyBp4G,IAAU,CACpF,OAAOA,GAAM,QAAQ,SAAY,WACnCm4G,GAAiBn4G,GAAM,QAAQ,QAEnC,CAAC,EAED,SAASq4G,GAAiBxrF,GAAuBwO,GAAkC,CACjF,MAAO,IAAM,CACX,GAAI88E,IAAkB,KACpB,OAGF,MAAMhxF,GAAW2wF,GAAqBjrF,GAAOsrF,EAAc,EAC3D,GAAIhxF,GAAU,CACZkU,GAAGlU,EAAQ,EACX,MACF,CACF,CACF,CAGA,OAAA+wF,GAAY,WAAW,CACrB,IAAK,IACL,UAAWG,GAAiBxrF,GAAQ1F,IAAuB,CACrD0F,GAAM,MAAM,UACd,KAAgB,QAAQ,CAAE,UAAW,MAAU,CAAC,EAEhD,KAAgB,QAAQ,CAAE,UAAW1F,GAAS,UAAU,EAAG,UAAW,MAAU,CAAC,CAErF,CAAC,CACH,CAAC,EAGD+wF,GAAY,WAAW,CACrB,IAAK,MACL,UAAWG,GAAiBxrF,GAAO,MAAO1F,IAAuB,CAC/D,MAAM4yE,GAAS,IAAI2d,GAAA,EAAY,CAC7B,UAAW,MAAmB,KAC9B,SAAUvwF,GAAS,OAAO,CAC5B,CAAC,EAED0F,GAAM,UAAUktE,EAAM,CACxB,CAAC,CACH,CAAC,EACDme,GAAY,WAAW,CACrB,IAAK,MACL,UAAWG,GAAiBxrF,GAAO,MAAO1F,IAAuB,CAC/D,MAAM4yE,GAAS,IAAI2d,GAAA,EAAY,CAC7B,UAAW,MAAmB,MAC9B,SAAUvwF,GAAS,OAAO,CAC5B,CAAC,EAED0F,GAAM,UAAUktE,EAAM,CACxB,CAAC,CACH,CAAC,EAGC,MAAW,YACXngG,EAAA,EAAO,iBACP,MAAW,cAAc,KAAoB,eAAe,GAE5Ds+G,GAAY,WAAW,CACrB,IAAK,MACL,UAAWG,GAAiBxrF,GAAO,MAAO1F,IAAuB,CAC/D,MAAM4yE,GAAS,IAAI2d,GAAA,EAAY,CAC7B,UAAW,MAAmB,SAC9B,SAAUvwF,GAAS,OAAO,CAC5B,CAAC,EAED0F,GAAM,UAAUktE,EAAM,CACxB,CAAC,CACH,CAAC,EAIHme,GAAY,WAAW,CACrB,IAAK,IACL,UAAWG,GAAiBxrF,GAAO,MAAO1F,IAAuB,CAC/D0F,GAAM,UAAU,IAAIyrF,GAAA,EAAmB,CAAE,SAAUnxF,GAAS,OAAO,EAAG,WAAY,KAAW,IAAK,CAAC,CAAC,CACtG,CAAC,CACH,CAAC,EAGD+wF,GAAY,WAAW,CACrB,IAAK,MACL,UAAWG,GAAiBxrF,GAAO,MAAO1F,IAAuB,CAC/D,MAAMwE,GAAM,QAAM,OAAyBxE,EAAQ,EAC/CwE,IACF,KAAgB,KAAKA,EAAG,CAE5B,CAAC,CACH,CAAC,EAGDusF,GAAY,WAAW,CACrB,IAAK,MACL,UAAWG,GAAiBxrF,GAAO,KAAoB,CACzD,CAAC,EAGDqrF,GAAY,WAAW,CACrB,IAAK,MACL,UAAW,IAAM,KAAW,aAAarrF,EAAK,EAAE,UAAU,CAC5D,CAAC,EAGDqrF,GAAY,WAAW,CACrB,IAAK,MACL,UAAW,IAAM,CACfK,GAAc1rF,EAAK,CACrB,CACF,CAAC,EAEDqrF,GAAY,WAAW,CACrB,IAAK,SACL,UAAW,IAAM,CACfK,GAAc1rF,EAAK,CACrB,CACF,CAAC,EAGDqrF,GAAY,WAAW,CACrB,IAAK,MACL,UAAW,IAAM,CACI7wF,GAAA,GAAoB,cAAcwF,EAAK,GAC9C,WAAW,CACzB,CACF,CAAC,EAEDqrF,GAAY,WAAW,CACrB,IAAK,SACL,UAAW,IAAM,CACfM,GAAqB3rF,GAAO,MAAM,CACpC,CACF,CAAC,EAEDqrF,GAAY,WAAW,CACrB,IAAK,UACL,UAAW,IAAM,CACfM,GAAqB3rF,GAAO,OAAO,CACrC,CACF,CAAC,EAEDqrF,GAAY,WAAW,CACrB,IAAK,QACL,UAAW,IAAM,CACf,MAAM5qF,GAAaT,GAAM,MAAM,YAAY,KAAMzzB,IAAMA,cAAa,OAAoB,EACxF,GAAIk0B,cAAsB,QAAsB,CAE9C,MAAMmrF,IADcnrF,GAAW,MAAM,KACL,GAAK,EACrCA,GAAW,SAAS,CAAE,KAAMmrF,EAAS,CAAC,EACtC,IAAU,QAAQ,IAAI,IAA4B,EAClD,KAAW,aAAa5rF,EAAK,EAAE,UAAU,CAC3C,CACF,CACF,CAAC,EAEG8hD,KAEFupC,GAAY,WAAW,CACrB,IAAK,IACL,UAAWG,GAAiBxrF,GAAO,MAAO1F,IAAuB,CAE/D,GADkBA,GAAS,QAAQ,YACViX,GAAgB,CACvC,MAAMhX,MAAU,MAAsBD,EAAQ,EAC9C,GAAI0F,GAAM,MAAM,UACd,KAAgB,KACd,IAAa,iBAAiB,KAAgB,YAAY,EAAG,CAC3D,UAAW,MACb,CAAC,CACH,MACK,CACL,MAAMlB,GAAM,IAAa,oBAAiB,OAAgBvE,EAAO,CAAC,EAClE,KAAgB,KAAKuE,EAAG,CAC1B,CACF,CACF,CAAC,CACH,CAAC,EAGDusF,GAAY,WAAW,CACrB,IAAK,MACL,UAAWrrF,GAAM,cACnB,CAAC,EAGDqrF,GAAY,WAAW,CACrB,IAAK,QACL,UAAW,IAAMrrF,GAAM,eAAe,CAAC,CAAC,CAC1C,CAAC,EAGDqrF,GAAY,WAAW,CACrB,IAAK,MACL,UAAWG,GAAiBxrF,GAAQ1F,IAAuB,CACrD0F,GAAM,MAAM,cACd,OAAcA,GAAO1F,EAAQ,CAEjC,CAAC,CACH,CAAC,EAGD+wF,GAAY,WAAW,CACrB,IAAK,MACL,UAAWG,GAAiBxrF,GAAQ1F,IAAuB,CACrD0F,GAAM,MAAM,WACdA,GAAM,eAAe1F,EAAQ,CAEjC,CAAC,CACH,CAAC,EAGD+wF,GAAY,WAAW,CACrB,IAAK,YACL,UAAW,IAAM,CACXrrF,GAAM,MAAM,gBAAgBpG,GAAA,GAC9BoG,GAAM,MAAM,KAAK,gBAAgB,CAErC,CACF,CAAC,EAGDqrF,GAAY,WAAW,CACrB,IAAK,YACL,UAAW,IAAM,CACXrrF,GAAM,MAAM,gBAAgBpG,GAAA,GAC9BoG,GAAM,MAAM,KAAK,cAAc,CAEnC,CACF,CAAC,GAMI,IAAM,CACXqrF,GAAY,UAAU,EACtBE,GAA2B,YAAY,CACzC,CACF,CAEA,SAASG,GAAc1rF,GAAuB,CACzBxF,GAAA,GAAoB,cAAcwF,EAAK,GAC9C,OAAO,CACrB,CAEA,SAAS2rF,GAAqB3rF,GAAuBN,GAA6B,CAChF,MAAMmsF,GAAarxF,GAAA,GAAoB,cAAcwF,EAAK,EAErD6rF,KAIDnsF,KAAc,QAChBmsF,GAAW,eAAe,EAExBnsF,KAAc,SAChBmsF,GAAW,cAAc,EAE7B,C,gEC/LO,MAAMC,GAAkB,CAAC,QAAS,cAAe,OAAQ,WAAY,eAAgB,QAAS,OAAQ,SAAS,EACzGC,GAAmB,uBACnBC,GAAqB,0BA2D3B,MAAMz6E,WAAuB,IAA6D,CAwCxF,YAAYzoB,GAAqCmjG,GAAiC,KAAM,CAC7F,MAAM,CACJ,SAAO,KAAE,kDAAmD,WAAW,EACvE,KAAM,CAAC,EACP,SAAU,GACV,WAAYnjG,GAAM,YAAc,IAAI,KAAe,CAAC,CAAC,EACrD,KAAMA,GAAM,MAAQ8Q,GAAA,EAAyB,cAAc,CAAC,KAAG,OAAU9Q,GAAM,OAAO,CAAC,EACvF,MAAOA,GAAM,OAAS,CAAC,EACvB,GAAGA,GACH,SAAU,IAAIwiF,EACd,mBAAoB,IAAI+J,EAC1B,CAAC,EA7CH,KAAU,SAAW,IAAIqV,GAAsB,IAAI,EAInD,KAAU,oBAAsB,IAAIwB,GAA4B,IAAI,EAqBpE,KAAU,wBAA0B,GAoFpC,KAAO,gBAAkB,IAAM,CAE7B,KAAK,cAAgB,KAAW,sBAAsB,KAAK,KAAK,EAChE,KAAK,iBAAmB,KAAgB,YAAY,EAGpD,KAAK,SAAS,CAAE,UAAW,EAAK,CAAC,EAGjC,KAAK,MAAM,KAAK,kBAAkB,EAAI,EAEtC,KAAK,eAAe,qBAAqB,CAC3C,EAuGA,KAAO,UAAY,MAAOhxE,IAAsD,CAE9E,IAAIixE,GAAa,MAAM,KAAW,iBAAiBjxE,GAAQ,IAAKA,GAAQ,EAAE,EAE1E,GAAI,CAAC,OAAO,UAAUixE,GAAW,OAAO,EACtC,MAAO,GAGT,MAAMC,GAA6B,CACjC,UAAW,IAAI9uC,EAAA,EAAepiC,GAAQ,IAAI,EAC1C,KAAM,KAAK,MAAM,IACnB,EAEMmxE,MAAYvK,GAAA,IAA0BsK,EAAY,EAClD3iG,GAAW,KAAW,sBAAsB4iG,GAAU,KAAK,EACjE,OAAA5iG,GAAS,QAAU0iG,GAAW,QAE9B,KAAK,SAAS1iG,EAAQ,EACtB,KAAK,aAAa,CAAE,YAAa,GAAM,oBAAqB,EAAM,CAAC,EAE5D,EACT,EA8MA,KAAO,eAAiB,IAAM,CAC5B,KAAgB,QAAQ,CAAE,SAAU,UAAW,CAAC,CAClD,EAsFA,KAAO,eAAiB,IACf,KAAK,WAAW,eAAe,EA0GxC,KAAO,eAAkB6iG,IAA0C,CACjE,KAAK,WAAaA,EACpB,EAzlBE,KAAK,WAC0B/X,GAA7B0X,KAAsB,KAAmC,KAAoC,IAAhC,EAE/D,KAAK,eAAiB,IAAI/6E,EAAA,EAA4B,IAAI,EAE1D,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CA1DA,MAAO,CAAP,KAAO,UAAY+oE,EAAA,CA4DX,oBAAqB,CAC3B,IAAIsS,GAAmB,OAAO,sBAC9B,MAAM5d,GAAQ,KAAgB,YAAY,EAAE,WAAa,iBAEzD,OAAO,sBAAwB,KAE/B,KAAK,uBAAuB,EAExB,KAAK,MAAM,YACb,KAAK,iBAAmB,KAAgB,YAAY,EACpD,KAAK,eAAe,qBAAqB,GAGvCA,KACF,KAAK,gBAAgB,EACrB,KAAK,SAAS,CAAE,QAAS,EAAK,CAAC,GAG7B,CAAC,KAAK,MAAM,KAAK,YAAc,KAAK,MAAM,KAC5C6d,EAAA,EAAiB,MAAM,KAAK,MAAM,GAAG,EAGvC,IAAIC,GAAmB,IAAM,CAAC,EACzB1/G,EAAA,EAAO,6BACV0/G,GAAmBrB,GAAuB,IAAI,GAEhD,MAAMsB,GAAsB,IAAIlY,GAAmC,IAAI,EAGvE,eAAgB,EAAE,WAAWkY,EAAmB,EAGzC,IAAM,CACX,OAAO,sBAAwBH,GAC/BE,GAAiB,EACjB,KAAK,eAAe,UAAU,EAC9BC,GAAoB,QAAQ,EAC5BF,EAAA,EAAiB,MAAM,CACzB,CACF,CAEQ,wBAAyB,CAC/B,MAAMG,GAAoB,KAAW,eAAeZ,GAAkB,IAAI,GAAG,SAAS,EAClF,OAAOY,IAAsB,UAC/B,KAAK,SAAS,CAAE,YAAaA,EAAkB,CAAC,EAGlD,MAAMhT,GAAe,KAAW,eAAeqS,GAAoB,IAAI,GAAG,SAAS,EACnF,GAAI,OAAOrS,IAAiB,SAAU,CACpC,MAAMiT,GAAS,OAAO,SAASjT,GAAc,EAAE,EAC/C,KAAK,SAAS,CAAE,aAAc,OAAO,UAAUiT,EAAM,EAAIA,GAAS,MAAU,CAAC,CAC/E,CACF,CAgBO,cAAchgB,GAAwC1kE,GAAkCqmE,GAAoB,CACjH,KAAK,WAAW,eAAe3B,GAAW1kE,EAAM,EAEhD,KAAK,eAAe,oBAAoB,EAExC,KAAK,SAAS,CACZ,QAASA,GAAO,QAChB,QAAS,GACT,IAAKA,GAAO,IACZ,GAAIA,GAAO,GACX,KAAM,CACJ,GAAG,KAAK,MAAM,KACd,IAAKA,GAAO,IACZ,IAAKA,GAAO,IACZ,KAAMA,GAAO,KACb,UAAAqmE,GACA,QAASrmE,GAAO,OAClB,EACA,QAAS,MACX,CAAC,EAED,KAAK,MAAM,WAAW,eAAe,EAErC,KAAK,cAAgB,KAAW,sBAAsB,KAAK,KAAK,EAChE,KAAK,iBAAmB,KAAgB,YAAY,EAEpD,KAAK,eAAe,qBAAqB,CAC3C,CAEO,aAAa,CAAE,YAAA2kF,GAAa,oBAAAC,EAAoB,EAA4D,CACjH,GAAI,CAAC,KAAK,WAAW,EAAG,CACtB,QAAQ,MAAM,+EAA+E,EAC7F,MACF,CAEA,GAAI,CAAC,KAAK,MAAM,SAAWD,IAAe,IAAC,MAAqB,IAAI,GAAK,KAAK,8BAA8B,EAAG,CAC7G,KAAK,sBAAsBC,IAAuB,KAAK,MAAM,OAAO,EACpE,MACF,CAEA,IAAU,QACR,IAAI,KAAsB,CACxB,SAAO,KAAE,qEAAsE,+BAA+B,EAC9G,KAAM,qFACN,KAAM,YACN,QAAS,UACT,UAAW,IAAM,CACf,KAAK,sBAAsB,CAC7B,CACF,CAAC,CACH,CACF,CAEQ,sBAAsBA,GAAsB,GAAM,CAExD,KAAK,eAAe,oBAAoB,EAKxC,MAAMhuF,GAAM,IAAa,iBAAiB,KAAK,iBAAmB,CAChE,UAAW,KACX,SAAU,KACV,QAAS,KACT,WAAY,KACZ,UAAW,IACb,CAAC,EAED,KAAgB,QAAQ,IAAa,iBAAiBA,EAAG,CAAC,EAEtDguF,GAEF,KAAK,SAAS,CAAE,GAAG,KAAK,cAAe,UAAW,EAAM,CAAC,EAGzD,KAAK,SAAS,CAAE,UAAW,EAAM,CAAC,EAMhC,KAAK,MAAM,WACb,KAAK,MAAM,UAAU,UAAU,EAIjC,KAAK,MAAM,KAAK,kBAAkB,EAAK,CACzC,CAEO,YAAa,CAClB,OAAO,KAAK,gBAAkB,MAChC,CAEO,sBAAuB,CAC5B,KAAK,eAAe,oBAAoB,CAC1C,CAEO,uBAAwB,CAC7B,KAAK,eAAe,qBAAqB,CAC3C,CAyBO,eAAe,CAAE,WAAAta,GAAY,cAAAua,EAAc,EAAyD,CACpG,KAAK,MAAM,WAIhB,KAAK,SAAS,CACZ,QAAS,IAAI1a,GAAoB,CAC/B,aAAc,KAAK,OAAO,EAC1B,WAAAG,GACA,cAAAua,GACA,qBAAsB,KAAK,kBAAkB,CAC/C,CAAC,CACH,CAAC,CACH,CAEO,oBAAqB,CAC1B,KAAK,SAAS,CACZ,QAAS,IAAIjY,GAAqB,CAChC,aAAc,KAAK,OAAO,CAC5B,CAAC,CACH,CAAC,CACH,CAEO,WAAWz/C,GAAsBolD,GAAoB,CAC1D,KAAM,CAAE,KAAAz4E,GAAM,UAAAq4E,GAAW,UAAAD,GAAW,MAAAtsG,GAAO,IAAAw2C,EAAI,EAAI,KAAK,MAClDqqD,GAAQ,CAASrqD,GAEvB,IAAIo2D,GAAwB,CAC1B,KAAM5sG,GACN,OAAK0nD,GAAA,GAAgB,CACnB,IAAAlR,GACA,KAAMtiB,GAAK,KACX,mBAAoBqzB,GAAS,OAC7B,YAAa,CAAE,UAAW,KAAM,QAAS,KAAM,SAAU,KAAM,UAAW,KAAM,IAAK,KAAM,UAAW,IAAK,EAC3G,gBAAiB,CAACrzB,GAAK,KAAO,CAACA,GAAK,MAAQ,CAAC2sE,IAAS,CAAC3sE,GAAK,WAC5D,WAAYA,GAAK,UACnB,CAAC,CACH,EAEA,KAAM,CAAE,UAAAusE,EAAU,EAAIvsE,GAEtB,GAAIusE,GAAW,CACb,MAAMye,MAAiB,MAAYvS,GAAU,qBAAqBlM,EAAS,EAAE,EAAE,KAG3Eye,GAAe,KAAO,cACxBtS,GAAU,CACR,GAAGA,GACH,WAAYsS,EACd,EAEJ,CAEA,OAAI3S,KACFK,GAAU,CACR,QAAM,KAAE,kDAAmD,YAAY,EACvE,WAAYA,GACZ,IAAK,IAAa,iBAAiB,KAAgB,YAAY,EAAG,CAChE,UAAAL,GACA,UAAW,MACb,CAAC,CACH,GAGED,KACFM,GAAU,CACR,QAAM,KAAE,kDAAmD,YAAY,EACvE,WAAYA,EACd,GAGKA,EACT,CAEO,iBAAmD,CACxD,OAAO,KAAK,aACd,CAEO,SAASpgF,GAA0B,CACnC,KAAK,MAAM,WACd,KAAK,gBAAgB,EAIvB,KAAK,MAAM,KAAK,SAASA,EAAQ,CACnC,CAEO,mBAAmB46E,GAA0Bh9B,GAAwB,CAC1E,MAAM3kC,GAAO2hE,GAAe,MAAM,CAChC,WAAY,CAAC,IAAI5jE,GAAA,EAAqB,CAAE,IAAK4mC,GAAS,IAAK,KAAMA,GAAS,IAAK,CAAC,CAAC,CACnF,CAAC,EAEKt9C,GAAWs6E,GAAe,OAEhC,GAAI,EAAEt6E,cAAoBD,GAAA,GACxB,MAAM,IAAI,MAAM,gEAAgE,EAGlFC,GAAS,SAAS,CAAE,KAAA2Y,EAAK,CAAC,CAC5B,CAEO,eAAejZ,GAAoB,IACxC,MAAoBA,EAAQ,EAAE,iBAAiBA,EAAQ,CACzD,CAEO,UAAUA,GAAoB,CACnC,GAAIvtB,EAAA,EAAO,eAAe,oBAAqB,CAC7C,MAAM6tB,GAAWN,GAAS,OAE1B,GAAIM,cAAoB8B,GAAA,EAAc,CACpC,MAAMykC,MAAW,OAAWvmC,GAAU,IAAI,EACpCqyF,MAAe,OAAsBryF,EAAQ,KAEnD,OAAe,EACfkxD,EAAA,EAAM,IAAI,KAAmB,KAAK,UAAU,CAAE,SAAA3qB,GAAU,SAAU8rD,EAAa,CAAC,CAAC,CACnF,SAAWryF,cAAoBD,GAAA,EAAmB,CAChD,MAAMwmC,MAAW,OAAWvmC,GAAU,IAAI,EACpCqyF,MAAe,OAA6BryF,EAAQ,KAE1D,OAAe,EACfkxD,EAAA,EAAM,IAAI,KAAmB,KAAK,UAAU,CAAE,SAAA3qB,GAAU,SAAU8rD,EAAa,CAAC,CAAC,CACnF,KACE,eAAQ,MAAM,4DAA4D,EACpE,IAAI,MAAM,4DAA4D,EAE9E,MACF,CAEA,GAAI,CAAC3yF,GAAS,OACZ,OAGF,IAAIM,GAAWN,GAAS,OAExB,GAAI,EAAEM,cAAoBD,GAAA,GACxB,cAAQ,MAAM,4DAA4D,EACpE,IAAI,MAAM,4DAA4D,EAG9E,MAAMonF,MAAW,OAAgBnnF,EAAQ,KAEzC,OAAe,EACfkxD,EAAA,EAAM,IAAI,KAAmB,KAAK,UAAUi2B,EAAQ,CAAC,CACvD,CAEO,YAAa,CAClB,MAAMA,GAAWj2B,EAAA,EAAM,IAAI,IAAiB,EACtCohC,GAAU,KAAK,MAAMnL,EAAQ,EAC7BoL,GAAa,IAAI9xD,EAAA,GAAW6xD,EAAO,EAEnCxjH,MADW,OAAsByjH,EAAU,EAC1B,MAAM,KAE7B,KAAK,SAASzjH,EAAK,EAEnBoiF,EAAA,EAAM,OAAO,IAAiB,CAChC,CAEO,YAAYpiF,GAAiB,IAClC,MAAoBA,EAAK,EAAE,cAAcA,EAAK,CAChD,CAEO,mBAAmBA,GAAiB,CACzC,GAAI,CAACA,GAAM,OACT,OAGF,MAAMkxB,GAAWlxB,GAAM,OAEvB,GAAI,EAAEkxB,cAAoBD,GAAA,GAAoB,CAC5C,QAAQ,MAAM,wEAAwE,EACtF,MACF,CAEAC,GAAS,MAAM,KAAK,SAAS,CAAE,WAAY,MAAU,CAAC,CACxD,CAEO,UAAUwyF,GAAoB,CACnC,KAAK,SAAS,CAAE,QAASA,EAAM,CAAC,CAClC,CAEO,YAAa,CAClB,KAAK,SAAS,CAAE,QAAS,MAAU,CAAC,CACtC,CAEA,MAAa,gBAAgBC,GAAqB,CAChD,KAAM,CAAE,KAAArrF,GAAM,IAAAsiB,EAAI,EAAI,KAAK,MAE3B,GADA+oE,GAAYA,IAAa,EAAQrrF,GAAK,UAClC,EAACsiB,GAGL,GAAI,CACF,MAAMpc,GAAS,QAAM,MAAgB,EAAE,cAAcoc,GAAK+oE,EAAS,EAEnE,KAAK,SAAS,CACZ,KAAM,CACJ,GAAGrrF,GACH,UAAWkG,EACb,CACF,CAAC,CACH,OAAS/kB,GAAK,CACZ,QAAQ,MAAM,2BAA4BA,EAAG,CAC/C,CACF,CAMO,4BAA4BmqG,GAA8C,CAC/E,KAAK,SAAS,CACZ,QAAS,IAAItY,GAAsB,CAAE,kBAAAsY,EAAkB,CAAC,CAC1D,CAAC,CACH,CAEO,gBAAiB,CACtB,SAAOC,GAAA,GAAY,KAAK,MAAM,IAAI,CACpC,CAEO,kBAA6B,CAClC,MAAMC,MAAW,MAA0B,EACrClzF,MAAW,MAAmB,EACpC,OAAAkzF,GAAS,sBAAsBlzF,EAAQ,EAEvC,KAAK,SAASA,EAAQ,EACfA,EACT,CAEO,aAAaO,GAAgC4yF,GAAoB,CACtE,MAAMpxF,GAAgB,KAAK,MAAM,KAC3BqxF,GAAU,IAAM,KAAK,SAAS,CAAE,KAAM7yF,EAAO,CAAC,EAC9C8yF,GAAO,IAAM,KAAK,SAAS,CAAE,KAAMtxF,EAAc,CAAC,EACpDoxF,GACFC,GAAQ,EAER,KAAqB,KAAK,CACxB,eAAa,KAAE,uCAAwC,eAAe,EACtE,OAAQ,KACR,QAAAA,GACA,KAAAC,EACF,CAAC,CAEL,CAEO,WAAoC,CACzC,OAAO,KAAK,MAAM,IACpB,CAKO,kBAAkBtiB,GAAqD,CAC5E,MAAMvuE,MAAY,MAAqBuuE,EAAW,EAElD,IAAI3hG,MAAQ,MAAmB2hG,EAAW,EAEtCvuE,GAAU,MAAM,WAAaA,GAAU,MAAM,YAC/CpzB,GAAQozB,GAAU,MAAM,UAAU,MAAM,SAAS,QAAQ,GAG3D,IAAIvC,GAAU,EAEd,OAAI7wB,IAASA,GAAM,MAAM,SACnB,MAAuBA,EAAK,EAE9B6wB,MAAUqzF,GAAA,GAASlkH,GAAM,UAAU,CAAC,EAIpC6wB,MAAU,MAAsB7wB,EAAK,GAIlC,CACL,IAAK,KAAQ,UACb,aAAc,KAAK,MAAM,IACzB,QAAA6wB,GACA,UAAW7wB,IAAO,OAAO,MACzB,cAAeA,IAAO,MAAM,SAC5B,eAAgB,KAAK,MAAM,KAC7B,CACF,CAEA,kBAAmB,CACjB,KAAM,CAAE,KAAAs4B,EAAK,EAAI,KAAK,MAEtB,MAAO,GAAQA,GAAK,SAAWA,GAAK,iBAAmBj1B,EAAA,EAAO,eAChE,CAEO,qBAAsB,CAC3B,OAAO,KAAK,WAAW,gBACzB,CAaO,oBACL6/F,GACA5qE,GACA6rF,GACM,CACN,KAAK,WAAW,yBAAyBjhB,EAAS,EAClD,KAAK,WAAW,8BAA8BA,EAAS,EACvD,MAAMkhB,MAAc,KAA4BlhB,EAAS,EACzD,KAAK,WAAW,iBAAmBkhB,GACnC,KAAK,WAAW,SAAW9rF,GAC3B,KAAK,WAAW,WAAa6rF,EAC/B,CAEO,wBAAyB,CAC9B,OAAO,KAAK,WAAW,uBAAuB,IAAI,CACpD,CAEO,yCAA0C,CAC/C,OAAO,KAAK,WAAW,wCAAwC,IAAI,CACrE,CAEA,MAAa,mBAAoB,CAE/B,KAAK,SAAS,CAAE,QAAS,EAAM,CAAC,EAChC,KAAgB,QAAQ,GAAG,CAC7B,CAEO,oBAAqB,CAC1B,OAAOrzF,GAAA,GAAoB,aAAa,IAAI,CAC9C,CAEO,mBAAmBoyE,GAA+D,CACvF,MAAM/1E,GAAQ+1E,IAAa,KAAK,aAAa,EAEvCxvC,GAAkB,IAAI,IAG5B,GAAI,WAAYvmC,IAASA,GAAM,QAC7B,UAAWntB,MAASmtB,GAAM,OAExB,GAAI,IAAE,YAAantB,KAAU,CAACA,GAAM,SAAS,QAI7C,UAAWq+B,MAAUr+B,GAAM,QAAS,CAElC,MAAM+1F,GACJ13D,IAAQ,YAAc,OAAOA,GAAO,YAAe,UAAY,QAASA,GAAO,WAC3EA,GAAO,WAAW,IAClB,OAEAgmF,GAAahmF,IAAQ,KACvB03D,KAAkB,YAAc,OAAOsuB,IAAe,UAAYA,IACpE3wD,GAAgB,IAAI2wD,EAAU,CAElC,EAKJ,GAAI,aAAcl3F,IAASA,GAAM,SAC/B,UAAW4uD,MAAW,OAAO,OAAO5uD,GAAM,QAAQ,EAAG,CAEnD,GAAI4uD,GAAQ,OAAS,QACnB,SAGF,MAAM7vD,GAAU6vD,GAAQ,KAAK,MAAM,MAAM,QACzC,GAAK,MAAM,QAAQ7vD,EAAO,EAI1B,UAAW6I,MAAS7I,GAAS,CAC3B,MAAMs+E,GAAYz1E,IAAO,MAAM,MAC/B,GAAI,CAACy1E,IAAa,OAAOA,IAAc,SACrC,SAGF,MAAM9+E,GAAa8+E,GAAU,WACvBjZ,GACJ7lE,IAAc,OAAOA,IAAe,UAAY,SAAUA,GAAaA,GAAW,KAAO,OAErF44F,GAAO9Z,GAAU,KACjB+Z,GAAYD,IAAQ,OAAOA,IAAS,UAAY,SAAUA,GAAOA,GAAK,KAAO,OAE/E/yB,KAAmB,YAAc,OAAOgzB,IAAc,UAAYA,IACpE7wD,GAAgB,IAAI6wD,EAAS,CAEjC,CACF,CAIF,OAAO7wD,GAAgB,KAAO,EAAI,MAAM,KAAKA,EAAe,EAAI,MAClE,CAMO,mBAAoB,CACzB,KAAK,eAAiB,KAAK,YAAY,SACzC,CAEO,kBAAmB,CACpB,KAAK,iBAAmB,QAC1B,KAAK,YAAY,SAAS,EAAG,KAAK,cAAe,CAErD,CAEA,cAA4C,CAC1C,OAAO,KAAK,WAAW,aAAa,IAAI,CAC1C,CAGA,gBAAgBvzD,GAA6D,CAC3E,KAAM,CAAE,KAAAm4B,EAAK,EAAI,KAAK,MAChBgsF,GAAO,KAAK,eAAenkH,EAAO,EAGxC,MAAO,CACL,WAAY,yBAFK,KAAK,sBAAsB4pG,GAAwB,UAAY,SAEjC,GAC/C,KAAM,YACN,SAAU,CACR,GAAGzxE,GAAK,IACR,KAAMA,GAAK,KAAOA,GAAK,KAAK,KAC5B,aAAcn4B,GAAQ,MAAQ,IAAM,MACtC,EACA,KAAAmkH,EACF,CACF,CAEA,eAAenkH,GAA8D,CAC3E,OAAO,KAAK,WAAW,eAAe,KAAMA,EAAO,CACrD,CAEA,oBAAoB+jG,GAAyBD,GAAyBE,GAA4C,CAChH,OAAO,KAAK,WAAW,6BAA6B,KAAM,CAAE,cAAAD,GAAe,cAAAD,GAAe,YAAAE,EAAY,CAAC,CACzG,CAEA,gBAA0C,CACxC,OAAO,KAAK,MAAM,KAAK,KAAK,cAAc,IAAkB,CAC9D,CAEA,oBAAyC,CAEvC,OAAO,KAAK,MAAM,KAAK,KAAK,cAAc,IAAsB,CAClE,CAEA,WAAY,CACV,MAAO,EAAQ,KAAK,eAAe,CACrC,CAEA,qBAAsB,CACpB,OAAK9gG,EAAA,EAAO,eAAe,aAGZ,KAAK,eAAe,IAAM,KAAY,KAF5C,EAGX,CAEA,+BAAgC,CAC9B,OACE,KAAK,UAAU,GAAK,CAAC,KAAK,oBAAoB,GAAK,CAAC,KAAK,MAAM,KAAK,KAAK,cAAc,IAAyB,CAEpH,CAEA,SAAU,CACR,OAAO,KAAK,MAAM,KAAK,KAAK,cAAc,IAAiB,CAC7D,CAEQ,mBAA6B,CACnC,MAAO,EAAQ,KAAK,MAAM,YAAY,MAAM,UAAU,KAAMnB,IAAM,EAAQA,GAAE,MAAM,KAAM,CAC1F,CACF,CAEO,MAAMsgH,EAAyE,CAG7E,YAAoBgC,GAA4B,CAA5B,gBAAAA,GAF3B,KAAQ,UAAY,IAAI,GAEgC,CAExD,UAAwB,CACtB,OAAO,KAAK,SACd,CAEO,iBAA2B,CAChC,MAAO,EACT,CAEO,wBAAwB9jH,GAAyB+jH,GAAqB,CAS3E,GARIA,KAEF,IAAU,QAAQ,IAAI,KAAiB,CAAE,WAAY,GAAM,SAAU,CAAC,CAAE,CAAC,CAAC,EAG1E,KAAK,WAAW,aAAa,IAAI,GAAc,GAG7C/jH,GAAS,MAAM,OAAS2hH,GAAkB,CAC5C,MAAMqC,GAAchkH,GAAS,SAAS,EAClC,OAAOgkH,IAAgB,UACzB,KAAK,WAAW,SAAS,CAAE,YAAaA,EAAY,CAAC,CAEzD,SAAWhkH,GAAS,MAAM,OAAS4hH,GAAoB,CACrD,MAAMrS,GAAevvG,GAAS,SAAS,EACvC,GAAI,OAAOuvG,IAAiB,SAAU,CACpC,MAAMiT,GAAS,OAAO,SAASjT,GAAc,EAAE,EAC/C,KAAK,WAAW,SAAS,CAAE,aAAc,OAAO,UAAUiT,EAAM,EAAIA,GAAS,MAAU,CAAC,CAC1F,CACF,CACF,CACF,C,wKC33BA,MAAMyB,EAAiC,CACrC,cAAe,GACf,2BAA4B,GAC5B,aAAc,GACd,0BAA2B,GAC3B,gBAAiB,GACjB,6BAA8B,GAC9B,gBAAiB,EACnB,EAEO,SAASC,EAAoBzkH,EAAqD,CACvF,GAAI,CAACA,MAAW,WAAQA,CAAO,GAAK,CAACA,EAAQ,MAC3C,OAAO0kH,EAGT,MAAMrlH,EAAQW,EAAQ,MAChBkD,EAAS7D,EAAM,QAAU,CAAC,EAC1B,CAAE,QAAAslH,CAAQ,EAAI3kH,EAAQ,MAAM,cAElC,IAAI4kH,EAAO1hH,EAAO,KACd2hH,EAAc,GAAQD,IAASJ,EAAYI,CAAI,GAAKA,EAAK,WAAW,OAAO,IAC3EE,EAAS,GAEb,GAAIzlH,EAAM,OAAS,KAAU,MAAQ,CAACwlH,GAGpC,GAFAD,EAAO,mBACPC,EAAc,GACVxlH,EAAM,QAAUA,EAAM,OAAO,OAAS,EAAG,CAC3C,IAAIy+G,EAAQz+G,EAAM,OAAO,CAAC,EACtB0lH,EAAM1lH,EAAM,OAAOA,EAAM,OAAO,OAAS,CAAC,EAC1C,OAAOy+G,GAAU,UACnBA,KAAQ,KAAcA,CAAK,EAAE,KAAK,EAClCiH,KAAM,KAAcA,CAAG,EAAE,KAAK,IAE9BjH,GAAS,IACTiH,GAAO,KAETD,EAAS,KAAK,IAAIC,EAAMjH,CAAK,EAAI,EACnC,OACSz+G,EAAM,OAAS,KAAU,WAC7B,MAAculH,CAAI,IACrBA,EAAO,QAEA,CAACA,GAAQvlH,EAAM,OAAS,KAAU,SAC3CulH,EAAO,UAGT,MAAMI,EAAkBJ,GAAM,WAAW,UAAU,EAC7CK,KAAc,MAAcL,CAAI,EAChCM,EAAY7lH,EAAM,OAAS,KAAU,OAErC8lH,EACJ,CAACN,GAAe,CAACG,GAAmB,CAACC,GAAe,EAF/BL,IAAS,WAEyCM,GAAahiH,EAAO,UAAY,KAEnGkiH,KAAa,MAAeR,GAAQ,MAAM,EAC1CS,KAAY,MAAmBhmH,EAAOW,EAAQ,KAAK,EAEzD,MAAO,CAACxD,EAAgB8oH,IAAoC,CAC1D,KAAM,CAAE,SAAArnF,CAAS,EAAI/6B,EACfqiH,EAAeX,IAAS,SAE1BC,GAAe,OAAOroH,GAAU,WAClCA,KAAQ,MAAMA,CAAK,EAAE,QAAQ,GAG/B,IAAIy2D,EAAUsyD,EAAe,OAAM,KAAY/oH,CAAK,EAChDqO,EACAkzD,EACAynD,EACAznH,EACAkN,EACAw6G,EAEJ,GAAIxnF,GAAYA,EAAS,OAAS,EAAG,CACnC,MAAMynF,MAAgB,MAAsBznF,EAAUzhC,CAAK,EAEvDkpH,KACEA,GAAc,MAAQ,OACxB76G,EAAO66G,GAAc,MAGnBA,GAAc,OAAS,OACzB3nH,EAAQiC,EAAQ,MAAM,cAAc,eAAe0lH,GAAc,KAAK,GAGpEA,GAAc,MAAQ,OACxBz6G,EAAOy6G,GAAc,MAG3B,SAAWrmH,EAAM,OAAS,KAAU,KAAM,CAExC,GAAI7C,GAAS,KACX,MAAO,CACL,KAAM,GACN,QAAS,GACX,EAGF,MAAMmpH,GAAY,CAACnpH,EACnB,GAAI0G,GAAUA,EAAO,MAAQA,EAAO,KAAK,KAAM,CAC7C,KAAM,CAAE,KAAM0iH,EAAU,MAAOC,EAAU,EAAI3iH,EAAO,KAAK,KAMzD,GAJA2H,EAAO+6G,EAAWA,EAASD,EAAS,EAAI,GAAGnpH,CAAK,GAEhDuB,EAAQ8nH,GAAYA,GAAUF,EAAS,EAAI,OAEvC5nH,GAAS,KAAM,CACjB,MAAM+nH,GAAanB,EAAQgB,GAAYhB,EAAQ,MAAM,EACrD5mH,EAAQiC,EAAQ,MAAM,cAAc,eAAe8lH,EAAU,CAC/D,CACF,CACF,CAEA,GAAI,CAAC,OAAO,MAAM7yD,CAAO,EAAG,CAC1B,GAAIpoD,GAAQ,MAAQ,IAAC,aAAUrO,CAAK,EAAG,CACrC,IAAIuF,GAEJ,GAAIojH,GAA+BG,GAAoB,KAAM,CAC3DvjH,GAAIqjH,EAAWnyD,EAASqyD,EAAkB,KAAMtlH,EAAQ,SAAU8kH,CAAM,EAOxE,MAAMiB,EAAQ,CAAChkH,GAAE,KACZ,OAAO,MAAMgkH,CAAK,IACrBhkH,GAAE,KAAOgkH,EAAQ,GAErB,MACEhkH,GAAIqjH,EAAWnyD,EAAS/vD,EAAO,SAAU,KAAMlD,EAAQ,SAAU8kH,CAAM,EAGzEj6G,EAAO9I,GAAE,KACTyjH,EAASzjH,GAAE,OACXg8D,EAASh8D,GAAE,MACb,CAGA,GAAIhE,GAAS,KAAM,CACjB,MAAMioH,GAAcX,EAAUpyD,CAAO,EACrCl1D,EAAQioH,GAAY,MACpBP,EAAUO,GAAY,OACxB,CACF,CAiBA,GAfIn7G,GAAQ,SAAQ,WAAQrO,CAAK,IAC/BqO,KAAO,QAAKrO,EAAO,IAAI,GAGrBqO,GAAQ,OACVA,KAAO,YAASrO,CAAK,EAChBqO,IACC3H,EAAO,QACT2H,EAAO3H,EAAO,QAEd2H,EAAO,KAKT,CAAC9M,EAAO,CACV,MAAMioH,GAAcX,EAAU,IAAS,EACvCtnH,EAAQioH,GAAY,MACpBP,EAAUO,GAAY,OACxB,CAEA,MAAMxxG,EAAwB,CAC5B,KAAA3J,EACA,QAAAooD,EACA,OAAA8K,EACA,OAAAynD,EACA,MAAAznH,CACF,EAEA,OAAIkN,GAAQ,OACVuJ,EAAQ,KAAOvJ,GAGbw6G,GAAW,OACbjxG,EAAQ,QAAUixG,GAGbjxG,CACT,CACF,CAEA,SAASkwG,EAAkBloH,EAA8B,CACvD,MAAO,CAAE,QAAM,YAASA,CAAK,EAAG,WAAS,KAAYA,CAAK,CAAE,CAC9D,CAEO,SAASypH,GAA2C,CACzD,OAAQzpH,IAAoB,CAC1B,QAAM,MAAsBA,CAAK,IAAM,QAAU,GAAG,KAAK,UAAUA,EAAOilF,EAAoB,CAAC,CAAC,GAAK,GAAGjlF,CAAK,GAC7G,QAAS,IACX,EACF,CAEA,MAAMilF,EAAsB,IAAM,CAChC,MAAMC,EAAO,IAAI,QACjB,MAAO,CAACwkC,EAAc1pH,IAAyB,CAC7C,GAAI,OAAOA,GAAU,UAAYA,IAAU,KAAM,CAC/C,GAAIklF,EAAK,IAAIllF,CAAK,EAChB,OAEFklF,EAAK,IAAIllF,CAAK,CAChB,CACA,OAAOA,CACT,CACF,C,2GC3LO,MAAM2pH,CAAkF,CAAxF,cACL,KAAQ,aAAe,IAAI,IAC3B,KAAQ,aAAe,GACvB,KAAQ,eAAiB,GA+BzB,iCAA+BxlH,GAA+D,CAE5F,KAAK,aAAa,CACpB,EAEA,qCAAmC+iB,GAAoE,CAEvG,EAEA,oCAAkC/iB,GAAkE,CAElG,KAAK,oBAAoBA,CAAI,CAC/B,EAGA,2BAAyBA,GAAsD,CAE7E,KAAK,kBAAkBA,EAAK,SAAUA,EAAK,QAASA,EAAK,SAAUA,EAAK,aAAa,CACvF,EAEA,8BAA4BA,GAAsD,CAEhF,MAAMd,EAAQ,KAAK,aAAa,IAAIc,EAAK,QAAQ,EACjD,GAAI,CAACd,EAAO,CACV,QAAQ,KAAK,4CAA6Cc,EAAK,QAAQ,EACvE,MACF,CAEA,MAAMylH,EAAWzlH,EAAK,UAAY,EAElC,OAAQA,EAAK,UAAW,CACtB,IAAK,cACHd,EAAM,sBAAwBumH,EAC9BvmH,EAAM,sBAAsB,KAAK,CAC/B,SAAAumH,EACA,UAAWzlH,EAAK,SAClB,CAAC,EACD,MAEF,IAAK,YACHd,EAAM,yBAA2BumH,EACjCvmH,EAAM,yBAAyB,KAAK,CAClC,SAAAumH,EACA,UAAWzlH,EAAK,UAChB,iBAAkBA,EAAK,SAAS,iBAChC,QAASA,EAAK,SAAS,OACzB,CAAC,EACD,MAEF,IAAK,QACHd,EAAM,gBAAkBumH,EACxBvmH,EAAM,gBAAgB,KAAK,CACzB,SAAAumH,EACA,UAAWzlH,EAAK,UAChB,UAAWA,EAAK,SAAS,SAC3B,CAAC,EACD,MAEF,IAAK,SACHd,EAAM,iBAAmBumH,EACzBvmH,EAAM,iBAAiB,KAAK,CAC1B,SAAAumH,EACA,UAAWzlH,EAAK,SAClB,CAAC,EACD,MAEF,IAAK,cACHd,EAAM,gBAAkBumH,EACxB,KACJ,CACF,EAGA,kBAAgB1iG,GAAuD,CAEvE,EAEA,qBAAmBA,GAAuD,CAE1E,EA5GO,WAAW+2B,EAAax2C,EAAe,CAE5C,KAAK,aAAa,MAAM,EACxB,KAAK,aAAew2C,EACpB,KAAK,eAAiBx2C,CACxB,CAEO,SAAU,CAEf,KAAK,aAAa,MAAM,EACxB,KAAK,aAAe,GACpB,KAAK,eAAiB,EACxB,CAKO,cAAe,CACpB,KAAK,aAAa,MAAM,CAC1B,CAKO,iBAA2C,CAChD,OAAO,MAAM,KAAK,KAAK,aAAa,OAAO,CAAC,CAC9C,CAuFQ,kBACNoiH,EACA31F,EACAoY,EACAwC,EACuB,CACvB,IAAIzrC,EAAQ,KAAK,aAAa,IAAIwmH,CAAQ,EAC1C,OAAKxmH,IACHA,EAAQ,CACN,QAAA6wB,EACA,SAAA21F,EACA,SAAAv9E,EACA,cAAAwC,EACA,eAAgB,EAChB,qBAAsB,EACtB,wBAAyB,EACzB,gBAAiB,EACjB,eAAgB,EAChB,gBAAiB,CAAC,EAClB,sBAAuB,CAAC,EACxB,yBAA0B,CAAC,EAC3B,iBAAkB,CAAC,CACrB,EACA,KAAK,aAAa,IAAI+6E,EAAUxmH,CAAK,GAEhCA,CACT,CAKQ,oBAAoBc,EAA+D,CACzF,MAAM2mC,EAAU,CACd,SAAU3mC,EAAK,UAAY,EAC3B,gBAAiBA,EAAK,iBAAmB,EACzC,QAASA,EAAK,UACd,MAAOA,EAAK,WAAaA,EAAK,UAAY,GAC1C,cAAe,YAAY,QAAQ,kBAAmB,oCAAoC,EAAE,SAC5F,gBAAiBA,EAAK,gBACtB,oBAAqBA,EAAK,oBAC1B,MAAG,MAAqB,CAC1B,EAEM2lH,EAAe,KAAK,gBAAgB,EAE1C,KAAK,2BAA2B3lH,EAAM2mC,EAASg/E,CAAY,KAE3D,MAAkB,mBAAoB,CACpC,gBAAiB3lH,EAAK,gBACtB,IAAK,KAAK,aACV,GAAG2mC,CACL,CAAC,KAED,MAAe,mBAAoBA,EAAS,CAC1C,gBAAiB3mC,EAAK,gBACtB,UAAW,KAAK,aAChB,MAAO,KAAK,cACd,CAAC,CACH,CAKQ,2BACNA,EACA2mC,EACAg/E,EACM,CACN,MAAMC,EAAaD,GAAc,QAAU,EACrCE,EAAeD,EAAa,GAAGA,CAAU,mBAAqB,mBAG9DE,EACJH,GAAc,OACXnnF,GACCA,EAAE,eAAiBA,EAAE,wBAA0BA,EAAE,gBAAkBA,EAAE,qBAAuBA,EAAE,eAC9F,IACJ,EAAE,QAAU,KAEd,MACE,MACA,eAAex+B,EAAK,eAAe,MAAM6lH,CAAY,GAAGC,EAAiB,EAAI,MAAMA,CAAc,4BAAoB,EAAE,EACzH,KAGA,MAAyB,MAAO,4BAAsB,CACpD,SAAU,KAAK,OAAO9lH,EAAK,UAAY,GAAK,EAAE,EAAI,GAClD,QAAS,KAAK,OAAOA,EAAK,iBAAmB,GAAK,EAAE,EAAI,GACxD,gBAAiBA,EAAK,gBACtB,WAAY8lH,CACd,CAAC,KAGD,MAAyB,MAAO,+BAAyBn/E,CAAO,EAG5Dg/E,GAAgBA,EAAa,OAAS,GACxCA,EAAa,QAASzmH,GAAU,CAC9B,MAAM6mH,EACJ7mH,EAAM,eACNA,EAAM,wBACNA,EAAM,gBACNA,EAAM,qBACNA,EAAM,eAEF8mH,EAAcD,EAAiB,KAC/BE,EAAcD,EAAc,qBAAa,MAE/C,MACE,MACA,mBAAY9mH,EAAM,QAAQ,IAAIA,EAAM,OAAO,KAAK6mH,EAAe,QAAQ,CAAC,CAAC,WAAWE,CAAW,EACjG,KAEA,MAAyB,MAAO,oBAAc,CAC5C,GAAI/mH,EAAM,SACV,QAASA,EAAM,eAAiB,UAChC,QAASA,EAAM,QACf,SAAUA,EAAM,QAClB,CAAC,KAED,MAAyB,MAAO,2BAAuB,CACrD,UAAW,KAAK,MAAM6mH,EAAiB,EAAE,EAAI,GAC7C,YAAAC,EACA,UAAW,CACT,MAAO,KAAK,MAAM9mH,EAAM,eAAiB,EAAE,EAAI,GAC/C,UAAW,KAAK,MAAMA,EAAM,wBAA0B,EAAE,EAAI,GAC5D,OAAQ,KAAK,MAAMA,EAAM,gBAAkB,EAAE,EAAI,GACjD,YAAa,KAAK,MAAMA,EAAM,qBAAuB,EAAE,EAAI,GAC3D,WAAY,KAAK,MAAMA,EAAM,eAAiB,EAAE,EAAI,EACtD,CACF,CAAC,EAEGA,EAAM,gBAAgB,OAAS,MACjC,MAAyB,MAAO,qBAAe,CAC7C,MAAOA,EAAM,gBAAgB,OAC7B,QAASA,EAAM,gBAAgB,IAAI,CAACgnH,EAAIz4G,KAAW,CACjD,UAAWA,EAAQ,EACnB,SAAU,KAAK,MAAMy4G,EAAG,SAAW,EAAE,EAAI,GACzC,UAAWA,EAAG,UACd,UAAWA,EAAG,WAAa,SAC7B,EAAE,CACJ,CAAC,EAGChnH,EAAM,yBAAyB,OAAS,MAC1C,MAAyB,MAAO,6BAAuB,CACrD,MAAOA,EAAM,yBAAyB,OACtC,QAASA,EAAM,yBAAyB,IAAI,CAACgnH,EAAIz4G,KAAW,CAC1D,UAAWA,EAAQ,EACnB,SAAU,KAAK,MAAMy4G,EAAG,SAAW,EAAE,EAAI,GACzC,UAAWA,EAAG,UACd,iBAAkBA,EAAG,kBAAoB,UACzC,QAASA,EAAG,UAAY,EAC1B,EAAE,CACJ,CAAC,EAGChnH,EAAM,iBAAiB,OAAS,MAClC,MAAyB,MAAO,qBAAe,CAC7C,MAAOA,EAAM,iBAAiB,OAC9B,QAASA,EAAM,iBAAiB,IAAI,CAACgnH,EAAIz4G,KAAW,CAClD,UAAWA,EAAQ,EACnB,SAAU,KAAK,MAAMy4G,EAAG,SAAW,EAAE,EAAI,GACzC,UAAWA,EAAG,SAChB,EAAE,CACJ,CAAC,EAGChnH,EAAM,sBAAsB,OAAS,MACvC,MAAyB,MAAO,6BAAoB,CAClD,MAAOA,EAAM,sBAAsB,OACnC,QAASA,EAAM,sBAAsB,IAAI,CAACgnH,EAAIz4G,KAAW,CACvD,UAAWA,EAAQ,EACnB,SAAU,KAAK,MAAMy4G,EAAG,SAAW,EAAE,EAAI,GACzC,UAAWA,EAAG,SAChB,EAAE,CACJ,CAAC,KAGH,MAAyB,CAC3B,CAAC,KAGH,MAAyB,CAC3B,CACF,CAGA,IAAIC,EAAoE,KAEjE,SAASC,GAAuE,CACrF,OAAKD,IACHA,EAA+B,IAAIX,KAGnC,MAA4BW,EAA8B,KAAK,GAE1DA,CACT,CAEO,SAASE,GAAgE,CAC9E,OAAOD,EAAuC,CAChD,C,mFC/WA,KAAM,CAAE,2BAAAE,CAA2B,EAAI,IAIhC,SAASC,EAAYrvE,EAA0B,CACpD,MAAM36C,KAAkB,MAAmB26C,CAAW,EAEhD,CAAE,YAAai7C,CAAW,EAAIm0B,EAA2B,CAAE,gBAAA/pH,CAAgB,CAAC,EAGlF,MAAO,CAAE,SAFQ,EAAQ41F,GAAY,YAElB,YAAaA,GAAY,WAAY,CAC1D,CAEO,SAASq0B,EAAc9sF,EAAmD,CAC/E,KAAM,CAAE,YAAay4D,CAAW,EAAIm0B,EAA2B,CAAE,IAAK5sF,CAAQ,CAAC,EAG/E,MAAO,CAAE,SAFQ,EAAQy4D,GAAY,YAElB,YAAaA,GAAY,WAAY,CAC1D,C,0GCfO,SAASs0B,EAAwBjxF,EAAuB,CAC7D,MAAMgzC,EAAM,IAAM,UAAwB,IAAqB,EAE/D,GAAIA,EAAK,CACP,MAAMn8C,EAAQ,IAAI,IAAem8C,EAAI,SAAS,EAE9C,UAAWtpE,KAASmtB,EAAM,OAAQ,CAChC,MAAM+D,KAAW,MAAsBlxB,CAAK,EAC5Cs2B,EAAM,SAASpF,EAAS,MAAM,IAAI,CACpC,CAEA,GAAIo4C,EAAI,UAAU,KAAM,CACtB,MAAMk+C,EAAe,IAAI,KAAe,CAAE,KAAMl+C,EAAI,UAAU,KAAK,KAAM,GAAIA,EAAI,UAAU,KAAK,EAAG,CAAC,EAC9FrwD,EAAYqd,EAAM,MAAM,WAC1Brd,GACFA,EAAU,SAAS,CACjB,MAAOuuG,EAAa,MAAM,MAC1B,KAAMA,EAAa,MAAM,KACzB,GAAIA,EAAa,MAAM,EACzB,CAAC,CAEL,CACF,CAEA,IAAM,OAAO,IAAqB,CACpC,C,2GC5BO,eAAeC,EAA2BznH,EAAmB6kG,EAA+C,CACjH,MAAM6iB,EAAiBC,EAAiB3nH,CAAK,EACvC4nH,EAAa,MAAMC,EAAyBH,EAAgB7iB,CAAS,EAC3E,OAAAijB,EAA2B9nH,EAAO4nH,CAAU,EACrCA,CACT,CAEA,SAASD,EAAiB3nH,EAAmB,CAC3C,GAAI,CAAE,WAAAV,EAAY,GAAGooH,CAAe,EAAI1nH,EAAM,aAAa,EAC3D,OAAA0nH,EAAiB,CACf,aAAc,CACZ,KAAM1nH,EAAM,MACZ,IAAK,MACP,EACA,GAAG0nH,CACL,EAEOA,CACT,CAEA,SAASI,EAA2B9nH,EAAmBqnD,EAAkC,CACvFrnD,EAAM,aAAa,CACjB,GAAGqnD,EAAQ,MACX,UAAW,EACX,aAAcA,EACd,MAAOrnD,EAAM,KACf,CAAC,EACDA,EAAM,wBAA0B,GAChCA,EAAM,QAAQ,CAChB,CAEA,SAAS6nH,EAAyB7nH,EAAmC6kG,EAA+C,CAClH,OAAK7kG,EAAM,aAIPA,EAAM,cAAgBA,EAAM,aAAa,MAAQ,MAC5C,MAAgBA,EAAO6kG,CAAU,KAGnC,MAAmB7kG,CAAK,EAPtB,QAAQ,OAAO,CAQ1B,CCrCO,MAAM+nH,EAAe,IAAM,CAChC,MAAMjlB,KAAY,MAAmB,EAE/B,CAAC1jF,EAAO4oG,CAAgB,KAAI/kB,EAAA,SAAW,MAAOjjG,EAAmB6kG,IAAsB,CAC3F,GAAI,CACF,MAAMojB,EAAQ,MAAMR,EAA2BznH,EAAO6kG,CAAS,EAC/D,OAAA/B,EAAU,WAAQ,KAAE,8BAA+B,qBAAqB,CAAC,EAClEmlB,CACT,OAASxuG,EAAK,CACZ,QAAI,MAAaA,CAAG,IAClBA,EAAI,UAAY,GAChBqpF,EAAU,SACR,KAAE,4BAA6B,6CAA8C,CAC3E,SAAUrpF,EAAI,SAAWA,EAAI,KAAK,OACpC,CAAC,CACH,GAEIA,CACR,CACF,EAAG,CAAC,CAAC,EAEL,MAAO,CAAE,MAAA2F,EAAO,iBAAA4oG,CAAiB,CACnC,C,+JC3BA,MAAME,EAA2B,GACpBC,EAAc,gBACdC,EAAiB,GAAGD,CAAW,YAG/Br0F,EAAsC,CACjD,KAAMu0F,EAAyB,EAC/B,SAAU,OAAO,SAAS,OAAO,aAAa,QAAQD,CAAc,GAAK,GAAG,KAAK,IAAI,CAAC,GAAI,EAAE,CAC9F,EAQME,KAAwB,MAAY,CACxC,KAAM,mBACN,aAAAx0F,EACA,SAAU,CACR,UAAW,CAAC1U,EAAO,CAAE,QAASmpG,CAAS,IAAsC,CACvE,OAAO,OAAOnpG,EAAM,IAAI,EAAE,KAAMopG,GAAUC,EAAUF,EAAUC,CAAK,GAAKA,EAAM,OAAO,IAIzFppG,EAAM,KAAKmpG,EAAS,EAAE,EAAIA,EAC1BG,EAAuBtpG,EAAM,IAAI,EACnC,EACA,oBAAqB,CAACA,EAAO,CAAE,QAASupG,CAAQ,IAA6B,CACrEA,KAAWvpG,EAAM,OAIvBA,EAAM,KAAKupG,CAAO,EAAE,QAAU,GAC9BD,EAAuBtpG,EAAM,IAAI,EACnC,EACA,kBAAmB,CAACA,EAAO,CAAE,QAASupG,CAAQ,IAA6B,CACzE,OAAOvpG,EAAM,KAAKupG,CAAO,EACzBD,EAAuBtpG,EAAM,IAAI,CACnC,EACA,sBAAwBA,GAAU,CAChCA,EAAM,KAAO,CAAC,EACdspG,EAAuBtpG,EAAM,IAAI,CACnC,EACA,qBAAsB,CAACA,EAAO,CAAE,QAASlK,CAAU,IAA6B,CAC9EkK,EAAM,SAAWlK,CACnB,CACF,CACF,CAAC,EAEY,CAAE,UAAA4tF,EAAW,oBAAA8lB,EAAqB,kBAAAC,EAAmB,sBAAAC,EAAuB,qBAAAC,CAAqB,EAC5GT,EAAsB,QAEXU,EAA0BV,EAAsB,QAIhDW,EAA2B7pG,GAAiCA,EAAM,SAClE8pG,EAAc9pG,GAAiCA,EAAM,KACrD+pG,KAAY,MAAeD,EAAa/gE,GACnD,OAAO,OAAOA,CAAI,EAAE,KAAK,CAACxmC,EAAG9e,IAAMA,EAAE,UAAY8e,EAAE,SAAS,CAC9D,EACaynG,KAA0B,MAAeD,EAAYE,GAAQA,EAAI,OAAOC,CAAgB,CAAC,EACzFC,KAAgB,MAAeL,EAAa/gE,GAAS,OAAO,OAAOA,CAAI,EAAE,OAAQ1lD,GAAMA,EAAE,OAAO,CAAC,EAI9G,SAASgmH,EAAU9mG,EAAoB9e,EAA6B,CAClE,OAAO8e,EAAE,OAAS9e,EAAE,MAAQ8e,EAAE,WAAa9e,EAAE,UAAY8e,EAAE,OAAS9e,EAAE,MAAQ8e,EAAE,QAAU9e,EAAE,KAC9F,CAEA,SAASymH,EAAiBE,EAAwB,CAChD,OAAOA,EAAM,WAAa,KAAwB,SAAWA,EAAM,WAAa,KAAwB,KAC1G,CAEA,SAASC,EAAqB9yF,EAAyC,CACrE,OAAO,OAAOA,GAAQ,UAAYA,IAAQ,MAAQ,OAAQA,GAAO,SAAUA,GAAO,UAAWA,GAAO,SAAUA,CAChH,CAIO,SAAS0xF,GAA+D,CAC7E,MAAMqB,EAAkB,OAAO,aAAa,QAAQvB,CAAW,EAC/D,GAAI,CAACuB,EACH,MAAO,CAAC,EAGV,MAAMpnH,EAAS,KAAK,MAAMonH,CAAe,EACzC,OAAK,OAAO,OAAOpnH,CAAM,EAAE,MAAOJ,GAAMunH,EAAqBvnH,CAAC,CAAC,EAIxDI,EAHE,CAAC,CAIZ,CAEA,SAASomH,EAAuBiB,EAA4C,CAC1E,MAAMC,EAAgB,OAAO,OAAOD,CAAM,EACvC,OAAOL,CAAgB,EACvB,KAAK,CAAC3nG,EAAG9e,IAAMA,EAAE,UAAY8e,EAAE,SAAS,EACxC,MAAM,EAAGumG,CAAwB,EACjC,OAA2C,CAACziH,EAAMokH,KACjDpkH,EAAKokH,EAAI,EAAE,EAAI,CACb,GAAIA,EAAI,GACR,SAAUA,EAAI,SACd,KAAMA,EAAI,KACV,MAAOA,EAAI,MACX,KAAMA,EAAI,KACV,QAASA,EAAI,QACb,UAAWA,EAAI,UAGf,QAAS,EACX,EAEOpkH,GACN,CAAC,CAAC,EAEP,GAAI,CACF,OAAO,aAAa,QAAQ0iH,EAAa,KAAK,UAAUyB,CAAa,CAAC,CACxE,OAASnwG,EAAK,CACZ,QAAQ,MAAM,kDAAkD,EAChE,QAAQ,MAAMA,CAAG,CACnB,CACF,C,sFCtHO,MAAMqwG,EAAc,CAAC,CAAE,OAAAlkH,EAAQ,UAAA4mE,EAAW,UAAAliC,CAAU,OAEvD,OAAC,KACC,SAAO,KAAE,yDAA0D,0CAA0C,EAC7G,KAAK,kBACL,QAAM,KACJ,iDACA,8LACF,EACA,eAAa,KAAE,sDAAuD,aAAa,EACnF,UAAW,IAAM,CACfkiC,EAAU,EACVliC,EAAU,CACZ,EACA,UAAAA,EACA,OAAA1kC,CAAA,CACF,C,0ICPJ,MAAM6G,KAAa,cACjB,CAAC,CAAE,MAAAvO,EAAO,SAAA3B,EAAU,YAAAgL,EAAc,GAAO,QAAAmM,EAAS,OAAA9L,EAAQ,SAAAiC,EAAU,gBAAAkgH,EAAiB,GAAGj+G,CAAW,EAAGvN,IAAQ,CAC5G,KAAM,CAAC5B,EAAOqU,CAAQ,KAAI,YAAS9S,CAAK,EAClC,CAAC8rH,EAAeC,CAAgB,KAAI,YAAS/rH,CAAK,EAElDgsH,KAAc,WAAQ,OAAM,YAAS3tH,EAAU,GAAG,EAAG,CAAC,CAAC,KAE7D,aAAU,IAAM,CACd,MAAM4tH,KAAW,KAAUjsH,CAAK,EAC5BisH,EAAS,QAAQ,GAAKjsH,IAAU8rH,IAClCh5G,EAASm5G,EAAS,SAAS,CAAC,EAC5BF,EAAiB/rH,CAAK,EAE1B,EAAG,CAACA,EAAO8rH,CAAa,CAAC,EAEzB,MAAMI,EAAiB3gH,GAAkD,CACvE,KAAM,CAAE,MAAO4gH,CAAW,EAAI5gH,EAAM,cAGpC,GADAuH,EAASq5G,CAAU,EACfA,IAAe,IAAM9iH,EAAa,CACpC2iH,EAAYG,CAAU,EACtB,MACF,CACA,MAAMF,KAAW,KAAUE,CAAU,EAEjCF,EAAS,QAAQ,GACnBD,EAAYC,EAAS,SAAS,CAAC,CAEnC,EAEMG,EAAe7gH,GAA8C,IAChD,KAAU9M,CAAK,EAElB,QAAQ,GACpBqU,EAAS9S,CAAK,EAGhB0J,IAAS6B,CAAK,CAChB,EAEA,SACE,OAAC,KACE,GAAGqC,EACJ,MAAAnP,EACA,SAAUytH,EACV,SAAAvgH,EACA,QAAA6J,EACA,OAAQ42G,EACR,eAAa,OAACC,EAAA,CAAa,QAAA72G,EAAkB,UAAWq2G,EAAiB,SAAAlgH,EAAoB,MAAA3L,CAAA,CAAc,EAC3G,IAAAK,CAAA,CACF,CAEJ,CACF,EAEAkO,EAAW,YAAc,aAEzB,QAAeA,EAST89G,EAAe,CAAC,CAAE,MAAArsH,EAAO,QAAAwV,EAAS,SAAA7J,EAAU,UAAAvB,CAAU,IAAyB,CACnF,MAAM5B,KAAS,MAAW8jH,CAAqB,EAE/C,SACE,OAAC,UACC,KAAK,SACL,QAAA92G,EACA,aAAYpL,EACZ,SAAUuB,GAAY,CAAC6J,EACvB,aAAW,MACThN,KACA,OAAI,CACF,gBAAiBxI,CACnB,CAAC,CACH,EACF,CAEJ,EAEMssH,EAAyB1lH,MAC7B,OAAI,CACF,OAAQ,OACR,MAAO,GAAGA,EAAM,QAAQ,SAAW,CAAC,KACpC,aAAc,GAAGA,EAAM,MAAM,OAAO,OAAO,QAAQA,EAAM,MAAM,OAAO,OAAO,GAC7E,OAAQ,aAAaA,EAAM,OAAO,OAAO,MAAM,EACjD,CAAC,C,qNCjFI,MAAM2lH,EAAuC,CAClD,UAAW,KAAe,KAC1B,kBAAmB,KAAkB,OACrC,UAAW,EACX,YAAa,EACb,aAAc,KAAkB,KAChC,aAAc,KAAa,OAC3B,eAAgB,GAChB,SAAU,CACR,KAAM,KAAa,KACnB,MAAO,GACT,EACA,aAAc,GACd,iBAAkB,GAClB,eAAgB,GAChB,WAAY,EACd,EAIO,SAASC,EAAoB53D,EAAuB63D,EAAS,GAAmD,CACrH,MAAMC,KAAoB,KAAqB,EACzCC,EAAiB,IAAC,KAAE,iEAAkE,cAAc,CAAC,EAC3G,MAAO,CACL,gBAAiB,CACf,CAAC,KAAoB,KAAK,EAAG,CAC3B,SAAU,CACR,eAAgB,GAChB,gBAAiB,GACjB,qBAAsB,EACxB,EACA,aAAc,CACZ,KAAM,IAAiB,cACzB,CACF,EACA,CAAC,KAAoB,KAAK,EAAG,CAC3B,SAAU,CACR,aAAc,EAChB,CACF,EACA,CAAC,KAAoB,OAAO,EAAG,CAC7B,iBAAkB,EACpB,CACF,EACA,gBAAkB3pG,GAAY,CAC5BA,EACG,SAAS,CACR,KAAM,YACN,QAAM,KAAE,sDAAuD,OAAO,EACtE,SAAU2pG,EACV,aAAc/3D,EAAI,UAClB,SAAU,CACR,QAAS83D,EAAkB,SAC7B,CACF,CAAC,EACA,SAAS,CACR,KAAM,oBACN,QAAM,KAAE,mEAAoE,oBAAoB,EAChG,SAAUC,EACV,aAAc/3D,EAAI,kBAClB,SAAU,CACR,QAAS83D,EAAkB,iBAC7B,EACA,OAASvnH,GAAWA,EAAO,YAAc,KAAe,IAC1D,CAAC,EACA,SAAS,CACR,KAAM,eACN,QAAM,KAAE,8DAA+D,eAAe,EACtF,SAAUwnH,EACV,aAAc/3D,EAAI,aAClB,SAAU,CACR,QAAS83D,EAAkB,YAC7B,EACA,OAASvnH,GAAWA,EAAO,YAAc,KAAe,IAC1D,CAAC,EACA,eAAe,CACd,KAAM,iBACN,QAAM,KAAE,iEAAkE,kBAAkB,EAC5F,SAAUwnH,EACV,aAAc/3D,EAAI,eAClB,SAAU,CACR,IAAK,GACL,IAAK,EACL,KAAM,GACN,sBAAoB,KAClB,uEACA,kBACF,CACF,EACA,OAASzvD,GAAWA,EAAO,YAAc,KAAe,IAC1D,CAAC,EACA,eAAe,CACd,KAAM,YACN,QAAM,KAAE,2DAA4D,YAAY,EAChF,SAAUwnH,EACV,aAAc/3D,EAAI,UAClB,SAAU,CACR,IAAK,EACL,IAAK,GACL,KAAM,EACN,sBAAoB,KAAE,iEAAkE,YAAY,CACtG,EACA,OAASzvD,GAAWA,EAAO,YAAc,KAAe,MAC1D,CAAC,EACA,eAAe,CACd,KAAM,cACN,QAAM,KAAE,6DAA8D,cAAc,EACpF,SAAUwnH,EACV,aAAc/3D,EAAI,YAClB,SAAU,CACR,IAAK,EACL,IAAK,IACL,KAAM,EACN,sBAAoB,KAAE,mEAAoE,cAAc,CAC1G,EACA,OAASzvD,GAAWA,EAAO,YAAc,KAAe,MAC1D,CAAC,EACA,SAAS,CACR,KAAM,eACN,QAAM,KAAE,8DAA+D,eAAe,EACtF,SAAUwnH,EACV,aAAcD,EAAkB,aAAa,CAAC,EAAE,MAChD,SAAU,CACR,QAASA,EAAkB,YAC7B,EACA,OAASvnH,GAAWA,EAAO,YAAc,KAAe,MAC1D,CAAC,EACA,mBAAmB,CAClB,KAAM,cACN,QAAM,KAAE,8DAA+D,eAAe,EACtF,SAAUwnH,EACV,iBAAkB,GAClB,SAAU,CACR,OAASrrH,GAAiBA,EAAM,OAAS,KAAU,MACrD,CACF,CAAC,EACA,gBAAiC,CAChC,GAAI,YACJ,KAAM,YACN,QAAM,KAAE,2DAA4D,YAAY,EAChF,SAAUqrH,EACV,OAASxnH,GAAWA,EAAO,YAAc,KAAe,KACxD,OAAQ,IACR,SAAU,IACV,QAAS,KACT,YAAc7D,GAAUA,EAAM,OAAS,KAAU,MACnD,CAAC,EACA,gBAA6C,CAC5C,GAAI,YACJ,KAAM,YACN,QAAM,KAAE,8DAA+D,qBAAqB,EAC5F,SAAUqrH,EACV,aAAc,GACd,OAAQ,IACR,SAAU,IACV,OAASxnH,GAAWA,EAAO,YAAc,KAAe,KACxD,YAAc7D,GAAUA,EAAM,OAAS,KAAU,KACjD,QAAS,KACT,SAAU,CAAE,OAAAmrH,CAAO,CACrB,CAAC,EACA,gBAA6C,CAC5C,GAAI,cACJ,KAAM,cACN,QAAM,KAAE,kEAAmE,mBAAmB,EAC9F,SAAUE,EACV,aAAc,GACd,OAAQ,IACR,SAAU,IACV,OAASxnH,GAAWA,EAAO,YAAc,KAAe,KACxD,YAAc7D,GAAUA,EAAM,OAAS,KAAU,KACjD,QAAS,KACT,SAAU,CAAE,OAAAmrH,CAAO,CACrB,CAAC,EACA,SAAS,CACR,KAAM,aACN,QAAM,KAAE,4DAA6D,aAAa,EAClF,SAAUE,EACV,aAAcD,EAAkB,WAAW,CAAC,EAAE,MAC9C,SAAU,CACR,QAASA,EAAkB,UAC7B,EACA,OAASvnH,GAAWA,EAAO,YAAc,KAAe,MAC1D,CAAC,EACA,iBAAiB,CAChB,KAAM,aACN,QAAM,KAAE,4DAA6D,aAAa,EAClF,SAAUwnH,EACV,aAAc,GACd,OAASxnH,GAAWA,EAAO,aAAe,KAAe,OAASA,EAAO,YAAc,KAAe,MACxG,CAAC,EACA,eAAe,CACd,KAAM,YACN,QAAM,KAAE,2DAA4D,YAAY,EAChF,SAAUwnH,EACV,aAAc,EACd,SAAU,CACR,IAAK,EACL,IAAK,GACL,KAAM,EACN,sBAAoB,KAAE,iEAAkE,YAAY,CACtG,EACA,OAASxnH,GAAWA,EAAO,aAAe,KAAe,OAASA,EAAO,YAAc,KAAe,MACxG,CAAC,EAEH,IAAuC6d,EAAS4xC,EAAI,SAAU+3D,CAAc,EAE5E3pG,EAAQ,UAAU,CAChB,SAAU2pG,EACV,QAAM,KAAE,0DAA2D,WAAW,EAC9E,KAAM,YACN,SAAU,CACR,QAAS,CACP,CACE,SAAO,KAAE,4EAA6E,UAAU,EAChG,MAAO,KAAe,SACtB,eAAa,KACX,kFACA,kDACF,CACF,EACA,CACE,SAAO,KAAE,yEAA0E,YAAY,EAC/F,MAAO,KAAe,UACtB,eAAa,KACX,+EACA,mDACF,CACF,CACF,EACA,YAAa,EACf,EACA,iBAAkB,EACpB,CAAC,EAED,KAAmC3pG,EAAS4xC,CAAG,EAC/C,IAAiC5xC,CAAO,EAExCA,EAAQ,gBAAgB,CACtB,GAAI,kBACJ,KAAM,kBACN,QAAM,KAAE,gEAAiE,iBAAiB,EAC1F,SAAU,IAAC,KAAE,+DAAgE,YAAY,CAAC,EAC1F,aAAc,CAAE,KAAM,KAAyB,GAAI,EACnD,SAAU,CACR,QAAS0pG,EAAkB,sBAC7B,EACA,OAAQ,IACR,SAAU,IACV,QAAS,KACT,YAAa,IAAM,EACrB,CAAC,CACH,CACF,CACF,C,6GC9QYE,GAAAA,IACVA,EAAA,OAAS,UACTA,EAAA,OAAS,SACTA,EAAA,OAAS,SAHCA,IAAAA,GAAA,IAMAC,GAAAA,IACVA,EAAA,QAAU,IACVA,EAAA,mBAAqB,IACrBA,EAAA,OAAS,IAHCA,IAAAA,GAAA,IA+CAC,GAAAA,IACVA,EAAAA,EAAA,2BACAA,EAAAA,EAAA,6BAFUA,IAAAA,GAAA,G,mHClDZ,MAAMC,EAA2D,CAC/D,qBAAsB,GACtB,YAAa,GACb,MAAO,SACT,EAEaC,EAAgB,MAAO93F,EAA2BpzB,IAAqB,CAClF,KAAM,CAAE,qBAAAmrH,EAAsB,YAAAC,EAAa,MAAAtmH,CAAM,EAAIumH,EAA0B,EAC/E,WAAsB,gBAAgB,CACpC,iBAAkBF,EAClB,MAAArmH,EACA,WAAYsmH,EACZ,iBAAe,MAAkBprH,GAAO,OAAO,CAAC,CAClD,CAAC,EACM,QAAM,MAAgCozB,EAAW,CACtD,qBAAA+3F,EACA,MAAArmH,EACA,YAAAsmH,CACF,CAAC,CACH,EAEME,EAA2B,4CAE1B,SAASD,GAAoD,CAClE,OAAI,IAAM,OAAOC,CAAwB,GAChC,IAAM,UAAUA,CAAwB,GAAKL,CAIxD,CAEO,SAASM,EAA6BloH,EAAgC,CAC3E,IAAM,UAAUioH,EAA0BjoH,CAAM,CAClD,C,iDCoBA,IAAImoH,EAA8B,CAChC,EAAG,YACH,EAAG,MACH,GAAI,QACJ,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,GAAI,WACJ,GAAI,MACJ,GAAI,QACJ,GAAI,SACJ,GAAI,WACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,KACJ,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,IAAK,MACP,EAQIC,EAAsC,CACxC,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,GACP,EAUIC,EAAoC,CACtC,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACP,EAMIC,EAA0C,CAC5C,OAAQ,MACR,QAAS,OACT,OAAQ,QACR,OAAQ,MACR,KAAM,IACN,IAAK,uBAAuB,KAAK,UAAU,QAAQ,EAAI,OAAS,MAClE,EAOIC,EAA6C,KAMjD,QAASnoH,EAAI,EAAGA,EAAI,GAAI,EAAEA,EACxB+nH,EAAI,IAAM/nH,CAAC,EAAI,IAAMA,EAMvB,QAASA,EAAI,EAAGA,GAAK,EAAG,EAAEA,EAMxB+nH,EAAI/nH,EAAI,EAAE,EAAIA,EAAE,SAAS,EAM3B,SAASooH,EAAmBpiH,EAA8B,CAExD,GAAIA,EAAM,OAAS,WAAY,CAC7B,IAAIghF,EAAY,OAAO,aAAahhF,EAAM,KAAK,EAW/C,OAAKA,EAAM,WACTghF,EAAYA,EAAU,YAAY,GAG7BA,CACT,CAGA,OAAI+gC,EAAI/hH,EAAM,KAAK,EACV+hH,EAAI/hH,EAAM,KAAK,EAGpBgiH,EAAYhiH,EAAM,KAAK,EAClBgiH,EAAYhiH,EAAM,KAAK,EAQzB,OAAO,aAAaA,EAAM,KAAK,EAAE,YAAY,CACtD,CAKA,SAASqiH,EAAeC,EAAsBC,EAA+B,CAC3E,OAAOD,EAAW,KAAK,EAAE,KAAK,GAAG,IAAMC,EAAW,KAAK,EAAE,KAAK,GAAG,CACnE,CAKA,SAASC,EAAexiH,EAAgC,CACtD,IAAIyiH,EAAY,CAAC,EAEjB,OAAIziH,EAAM,UACRyiH,EAAU,KAAK,OAAO,EAGpBziH,EAAM,QACRyiH,EAAU,KAAK,KAAK,EAGlBziH,EAAM,SACRyiH,EAAU,KAAK,MAAM,EAGnBziH,EAAM,SACRyiH,EAAU,KAAK,MAAM,EAGhBA,CACT,CAKA,SAASC,EAAe1iH,EAA4B,CAClD,GAAIA,EAAM,eAAgB,CACxBA,EAAM,eAAe,EACrB,MACF,CAEAA,EAAM,YAAc,EACtB,CAKA,SAAS2iH,EAAgB3iH,EAA4B,CACnD,GAAIA,EAAM,gBAAiB,CACzBA,EAAM,gBAAgB,EACtB,MACF,CAEAA,EAAM,aAAe,EACvB,CAKA,SAAS4iH,EAAWhoG,EAAsB,CACxC,OAAOA,IAAQ,SAAWA,IAAQ,QAAUA,IAAQ,OAASA,IAAQ,MACvE,CAMA,SAASioG,GAAgB,CACvB,GAAI,CAACV,EAAa,CAChBA,EAAc,CAAC,EACf,QAASvnG,KAAOmnG,EAAK,CACnB,MAAMe,EAAY,SAASloG,EAAK,EAAE,EAG9BkoG,EAAY,IAAMA,EAAY,KAI9Bf,EAAI,eAAennG,CAAG,IACxBunG,EAAYJ,EAAInnG,CAAG,CAAC,EAAIA,EAE5B,CACF,CACA,OAAOunG,CACT,CAKA,SAASY,EAAenoG,EAAa6nG,EAAqB5/F,EAAyB,CAGjF,OAAKA,IACHA,EAASggG,EAAc,EAAEjoG,CAAG,EAAI,UAAY,YAK1CiI,IAAW,YAAc4/F,EAAU,SACrC5/F,EAAS,WAGJA,CACT,CAKA,SAASmgG,EAAeC,EAA+B,CACrD,OAAIA,IAAgB,IACX,CAAC,GAAG,GAGbA,EAAcA,EAAY,QAAQ,SAAU,OAAO,EAC5CA,EAAY,MAAM,GAAG,EAC9B,CAKA,SAASC,EAAWD,EAAqBpgG,EAA0B,CACjE,IAAIwtF,EACAz1F,EACA5gB,EACAyoH,EAAY,CAAC,EAMjB,IAFApS,EAAO2S,EAAeC,CAAW,EAE5BjpH,EAAI,EAAGA,EAAIq2G,EAAK,OAAQ,EAAEr2G,EAC7B4gB,EAAMy1F,EAAKr2G,CAAC,EAGRkoH,EAAgBtnG,CAAG,IACrBA,EAAMsnG,EAAgBtnG,CAAG,GAMvBiI,GAAUA,IAAW,YAAco/F,EAAUrnG,CAAG,IAClDA,EAAMqnG,EAAUrnG,CAAG,EACnB6nG,EAAU,KAAK,OAAO,GAIpBG,EAAWhoG,CAAG,GAChB6nG,EAAU,KAAK7nG,CAAG,EAItB,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,mBAAmB,EAKrC,OAAAiI,EAASkgG,EAAenoG,EAAK6nG,EAAW5/F,CAAM,EAEvC,CACL,IAAAjI,EACA,UAAA6nG,EACA,OAAA5/F,CACF,CACF,CAEA,SAASsgG,EAAU7wC,EAAiD8wC,EAA8B,CAChG,OAAI9wC,IAAY,MAAQA,IAAY,SAC3B,GAGLA,IAAY8wC,EACP,GAGFD,EAAU7wC,EAAQ,WAAY8wC,CAAQ,CAC/C,CAEO,MAAMC,CAAU,CA0CrB,YAAYviH,EAA4B,CApCxC,gBAA6C,CAAC,EAK9C,gBAAuC,CAAC,EAMxC,qBAA0C,CAAC,EAK3C,iBAAkC,OAKlC,sBAAqC,GAKrC,yBAAsB,GAMtB,yBAAwC,GAExC,sBAA4C,CAAC,EAyB7C,KAAQ,gBAAmBwiH,GAA6C,CACtEA,EAAaA,GAAc,CAAC,EAE5B,IAAIC,EAAkB,GACpB3oG,EAEF,IAAKA,KAAO,KAAK,gBAAiB,CAChC,GAAI0oG,EAAW1oG,CAAG,EAAG,CACnB2oG,EAAkB,GAClB,QACF,CACA,KAAK,gBAAgB3oG,CAAG,EAAI,CAC9B,CAEK2oG,IACH,KAAK,oBAAsB,GAE/B,EAMA,KAAQ,YAAc,CACpBviC,EACAyhC,EACAziH,EACAwjH,EACAP,EACAr5D,IACmB,CACnB,IAAI5vD,EACAkxE,EACAvzE,EAAU,CAAC,EACXkrB,EAAS7iB,EAAM,KAGnB,GAAI,CAAC,KAAK,WAAWghF,CAAS,EAC5B,MAAO,CAAC,EAUV,IANIn+D,IAAW,SAAW+/F,EAAW5hC,CAAS,IAC5CyhC,EAAY,CAACzhC,CAAS,GAKnBhnF,EAAI,EAAGA,EAAI,KAAK,WAAWgnF,CAAS,EAAE,OAAQ,EAAEhnF,EAKnD,GAJAkxE,EAAW,KAAK,WAAW8V,CAAS,EAAEhnF,CAAC,EAInC,GAACwpH,GAAgBt4C,EAAS,KAAO,KAAK,gBAAgBA,EAAS,GAAG,IAAMA,EAAS,QAMjFroD,IAAWqoD,EAAS,SAYrBroD,IAAW,YAAc,CAAC7iB,EAAM,SAAW,CAACA,EAAM,SACnDqiH,EAAeI,EAAWv3C,EAAS,SAAS,GAC5C,CAMA,IAAIu4C,EAAc,CAACD,GAAgBt4C,EAAS,QAAU+3C,EAClDS,EAAiBF,GAAgBt4C,EAAS,MAAQs4C,GAAgBt4C,EAAS,QAAUthB,GACrF65D,GAAeC,IACjB,KAAK,WAAW1iC,CAAS,EAAE,OAAOhnF,EAAG,CAAC,EAGxCrC,EAAQ,KAAKuzE,CAAQ,CACvB,CAGF,OAAOvzE,CACT,EAWA,KAAQ,cAAgB,CAACuzE,EAAoBjoE,EAAkB0gH,EAAeC,IAAsB,CAElG,MAAMhvF,EAAS3xB,EAAE,QAAUA,EAAE,WACzB2xB,GAAUA,aAAkB,aAAe,KAAK,aAAa3xB,EAAG2xB,EAAQ+uF,EAAOC,CAAQ,GAIvF14C,EAASjoE,EAAG0gH,CAAK,IAAM,KACzBjB,EAAez/G,CAAC,EAChB0/G,EAAgB1/G,CAAC,EAErB,EAKA,KAAQ,WAAa,CAAC+9E,EAAmByhC,EAAqBx/G,IAAqB,CACjF,IAAI4gH,EAAY,KAAK,YAAY7iC,EAAWyhC,EAAWx/G,CAAC,EACpDjJ,EACAspH,EAAqC,CAAC,EACtCQ,EAAW,EACXC,EAA4B,GAGhC,IAAK/pH,EAAI,EAAGA,EAAI6pH,EAAU,OAAQ,EAAE7pH,EAC9B6pH,EAAU7pH,CAAC,EAAE,MACf8pH,EAAW,KAAK,IAAIA,EAAUD,EAAU7pH,CAAC,EAAE,OAAS,CAAC,GAKzD,IAAKA,EAAI,EAAGA,EAAI6pH,EAAU,OAAQ,EAAE7pH,EAAG,CAMrC,MAAMgqH,EAAMH,EAAU7pH,CAAC,EAAE,IACzB,GAAIgqH,EAAK,CASP,GAAIH,EAAU7pH,CAAC,EAAE,QAAU8pH,EACzB,SAGFC,EAA4B,GAG5BT,EAAWU,CAAG,EAAI,EAClB,KAAK,cAAcH,EAAU7pH,CAAC,EAAE,SAAUiJ,EAAG4gH,EAAU7pH,CAAC,EAAE,MAAOgqH,CAAG,EAKpE,MAAMC,EAAoBD,EAAI,YAAYhjC,CAAS,EAC7CkjC,EAAiBF,EAAI,MAAM,EAAGC,CAAiB,EACrD,SAAW,CAACD,EAAKp6D,CAAK,IAAK,OAAO,QAAQ,KAAK,eAAe,EACxDA,EAAQ,GAAKo6D,EAAI,WAAWE,CAAc,IAC5CZ,EAAWU,CAAG,EAAI,GAItB,QACF,CAIKD,GACH,KAAK,cAAcF,EAAU7pH,CAAC,EAAE,SAAUiJ,EAAG4gH,EAAU7pH,CAAC,EAAE,KAAK,CAEnE,CAIA,UAAWkxE,KAAY,KAAK,WAAW8V,CAAS,GAAK,CAAC,EAChD9V,EAAS,SAAWjoE,EAAE,MAAQioE,EAAS,KAAOA,EAAS,QAAU,IACnEo4C,EAAWp4C,EAAS,GAAG,EAAI,GAyB/B,IAAIi5C,EAAqBlhH,EAAE,OAAS,YAAc,KAAK,oBACnDA,EAAE,OAAS,KAAK,qBAAuB,CAAC2/G,EAAW5hC,CAAS,GAAK,CAACmjC,GACpE,KAAK,gBAAgBb,CAAU,EAGjC,KAAK,oBAAsBS,GAA6B9gH,EAAE,OAAS,SACrE,EAKA,KAAQ,gBAAmBmhH,GAAoB,CAC7C,GAAI,EAAEA,aAAoB,eACxB,MAAM,IAAI,MAAM,4BAA4B,EAE9C,MAAMpkH,EAAuBokH,EAG7B,GAAIpkH,EAAM,OACR,OAKE,OAAOA,EAAM,OAAU,WAEzBA,EAAM,MAAQA,EAAM,SAGtB,IAAIghF,EAAYohC,EAAmBpiH,CAAK,EAGxC,GAAKghF,EAKL,IAAIhhF,EAAM,OAAS,SAAW,KAAK,mBAAqBghF,EAAW,CACjE,KAAK,iBAAmB,GACxB,MACF,CAEA,KAAK,UAAUA,EAAWwhC,EAAexiH,CAAK,EAAGA,CAAK,EACxD,EAQA,KAAQ,oBAAsB,IAAM,CAClC,aAAa,KAAK,WAAW,EAC7B,KAAK,YAAc,WAAW,KAAK,gBAAiB,GAAI,CAC1D,EAKA,KAAQ,cAAgB,CAAC2jH,EAAetT,EAAgBnlC,EAA6BroD,IAA0B,CAG7G,KAAK,gBAAgB8gG,CAAK,EAAI,EAM9B,MAAMU,EAAqBC,GAClB,IAAM,CACX,KAAK,oBAAsBA,EAC3B,EAAE,KAAK,gBAAgBX,CAAK,EAC5B,KAAK,oBAAoB,CAC3B,EAOIY,EAAqBthH,GAA2B,CACpD,KAAK,cAAcioE,EAAUjoE,EAAG0gH,CAAK,EAKjC9gG,IAAW,UACb,KAAK,iBAAmBu/F,EAAmBn/G,CAAC,GAK9C,KAAK,oBAAoB,CAC3B,EAWA,QAASjJ,EAAI,EAAGA,EAAIq2G,EAAK,OAAQ,EAAEr2G,EAAG,CAEpC,IAAIwqH,EADUxqH,EAAI,IAAMq2G,EAAK,OACGkU,EAAoBF,EAAkBxhG,GAAUqgG,EAAW7S,EAAKr2G,EAAI,CAAC,CAAC,EAAE,MAAM,EAC9G,KAAK,YAAYq2G,EAAKr2G,CAAC,EAAGwqH,EAAiB3hG,EAAQ8gG,EAAO3pH,CAAC,CAC7D,CACF,EAKA,KAAQ,YAAc,CACpBipH,EACA/3C,EACAroD,EACA2gG,EACA55D,IACS,CAET,KAAK,WAAWq5D,EAAc,IAAMpgG,CAAM,EAAIqoD,EAG9C+3C,EAAcA,EAAY,QAAQ,OAAQ,GAAG,EAE7C,IAAIW,EAAWX,EAAY,MAAM,GAAG,EAChClzF,EAIJ,GAAI6zF,EAAS,OAAS,EAAG,CACvB,KAAK,cAAcX,EAAaW,EAAU14C,EAAUroD,CAAM,EAC1D,MACF,CAEAkN,EAAOmzF,EAAWD,EAAapgG,CAAM,EAIrC,KAAK,WAAWkN,EAAK,GAAG,EAAI,KAAK,WAAWA,EAAK,GAAG,GAAK,CAAC,EAG1D,MAAM00F,EAAY,CAAE,KAAM10F,EAAK,OAAQ,QAAS,GAAO,QAAS,EAAM,EACtE,KAAK,YAAYA,EAAK,IAAKA,EAAK,UAAW00F,EAAWjB,EAAcP,EAAar5D,CAAK,EAEtF,MAAM86D,EAA6B,CACjC,SAAAx5C,EACA,UAAWn7C,EAAK,UAChB,OAAQA,EAAK,OACb,IAAKyzF,EACL,MAAA55D,EACA,MAAOq5D,CACT,EAQA,KAAK,WAAWlzF,EAAK,GAAG,EAAEyzF,EAAe,UAAY,MAAM,EAAEkB,CAAY,CAC3E,EAKA,KAAQ,cAAgB,CAACC,EAAwBz5C,EAA6BroD,IAAqC,CACjH,QAAS7oB,EAAI,EAAGA,EAAI2qH,EAAa,OAAQ,EAAE3qH,EACzC,KAAK,YAAY2qH,EAAa3qH,CAAC,EAAGkxE,EAAUroD,CAAM,CAEtD,EAWA,UAAO,CAACwtF,EAAyBnlC,EAA6BroD,IAAoB,CAChF,IAAI9H,EAAO,KACX,OAAAs1F,EAAOA,aAAgB,MAAQA,EAAO,CAACA,CAAI,EAC3C,KAAK,cAAcA,EAAMnlC,EAAUroD,CAAM,EAClC9H,CACT,EAeA,YAAS,CAACs1F,EAAyBxtF,IAC1B,KAAK,KAAKwtF,EAAM,UAAY,CAAC,EAAGxtF,CAAM,EAK/C,gBAAa,CAACwtF,EAAyBnlC,EAA6BroD,IAAoB,CAGtF,GAFA,KAAK,KAAKwtF,EAAMnlC,EAAUroD,CAAM,EAE5BwtF,aAAgB,MAAO,CACzB,QAASr2G,EAAI,EAAGA,EAAIq2G,EAAK,OAAQr2G,IAC/B,KAAK,iBAAiBq2G,EAAKr2G,CAAC,CAAC,EAAI,GAEnC,MACF,CAEA,KAAK,iBAAiBq2G,CAAI,EAAI,EAChC,EAIA,kBAAe,CAACA,EAAyBxtF,IAAoB,CAG3D,GAFA,KAAK,OAAOwtF,EAAMxtF,CAAM,EAEpBwtF,aAAgB,MAAO,CACzB,QAASr2G,EAAI,EAAGA,EAAIq2G,EAAK,OAAQr2G,IAC/B,KAAK,iBAAiBq2G,EAAKr2G,CAAC,CAAC,EAAI,GAEnC,MACF,CAEA,KAAK,iBAAiBq2G,CAAI,EAAI,EAChC,EAKA,aAAU,CAACA,EAAcxtF,IAA+B,CACtD,IAAI9H,EAAO,KACX,OAAIA,EAAK,WAAWs1F,EAAO,IAAMxtF,CAAM,GACrC9H,EAAK,WAAWs1F,EAAO,IAAMxtF,CAAM,EAAE,CAAC,EAAGwtF,CAAI,EAExCt1F,CACT,EAOA,WAAQ,KACN,KAAK,WAAa,CAAC,EACnB,KAAK,WAAa,CAAC,EACZ,MAMT,kBAAe,CAAC9X,EAAUqvE,EAAsBqxC,EAAeC,IAA+B,CAW5F,GATI,KAAK,iBAAiBD,CAAK,GAAMC,GAAY,KAAK,iBAAiBA,CAAQ,IAK1E,IAAMtxC,EAAQ,UAAY,KAAK,QAAQ,aAAa,EAAI,IAIzD6wC,EAAU7wC,EAAS,KAAK,MAAM,EAChC,MAAO,GAST,GAAI,iBAAkBrvE,GAAK,OAAOA,EAAE,cAAiB,WAAY,CAE/D,IAAI2hH,EAAqB3hH,EAAE,aAAa,EAAE,CAAC,EACvC2hH,IAAuB3hH,EAAE,QAAU2hH,aAA8B,cACnEtyC,EAAUsyC,EAEd,CAGA,MAAO,GACLtyC,EAAQ,UAAY,SAClBA,EAAQ,UAAY,UACpBA,EAAQ,UAAY,YACnB,sBAAuBA,GAAWA,EAAQ,kBAEjD,EAKA,eAAoC,IAAIpyC,IAC/B,KAAK,WAAW,GAAGA,CAAI,EAMhC,iBAAeswE,GAAmC,CAChD,QAAS51F,KAAO41F,EACVA,EAAO,eAAe51F,CAAG,IAC3BmnG,EAAInnG,CAAG,EAAI41F,EAAO51F,CAAG,GAGzBunG,EAAc,IAChB,EAniBE,KAAK,OAASrhH,EAEd,KAAK,OAAO,iBAAiB,WAAad,GAAU,CAC9CA,aAAiB,eACnB,KAAK,gBAAgBA,CAAK,CAE9B,CAAC,EACD,KAAK,OAAO,iBAAiB,UAAYA,GAAU,CAC7CA,aAAiB,eACnB,KAAK,gBAAgBA,CAAK,CAE9B,CAAC,EACD,KAAK,OAAO,iBAAiB,QAAUA,GAAU,CAC3CA,aAAiB,eACnB,KAAK,gBAAgBA,CAAK,CAE9B,CAAC,CACH,CAmhBF,CCp+BO,MAAM63G,EAAY,IAAIwL,EAAU,QAAQ,C,sFCO/C,MAAMwB,EAAoB,IAAM,CAC9B,CACE,GAAI,WACJ,OAAQ,WACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAU58G,CAAK,CAAE,IAAmBA,EAAK,IAC3D,EACA,CACE,GAAI,UACJ,OAAQ,UACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAUA,CAAK,CAAE,IAAmBA,EAAK,QAAQ,SAAS,GAAK,GACjF,EACA,CACE,GAAI,UACJ,OAAQ,UACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAUA,CAAK,CAAE,IAAmBA,EAAK,QAAQ,SAAS,GAAK,GACjF,EACA,CACE,GAAI,UACJ,OAAQ,UACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAUA,CAAK,CAAE,IAAmBA,EAAK,QAAQ,SAAS,GAAK,GACjF,EACA,CACE,GAAI,YACJ,OAAQ,YACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAUA,CAAK,CAAE,IAAmBA,EAAK,MAAM,SAAS,GAAK,GAC/E,EACA,CACE,GAAI,SACJ,OAAQ,SACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAUA,CAAK,CAAE,IAAmBA,EAAK,OAAO,SAAS,GAAK,GAChF,EACA,CACE,GAAI,QACJ,OAAQ,QACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAUA,CAAK,CAAE,MAChBA,EAAK,QAAU,IAAMA,EAAK,QAAU,IAAMA,EAAK,QAAU,IAAMA,EAAK,MAAQ,IAAMA,EAAK,OAAS,IAClG,SAAS,CAE1B,CACF,EAMO,SAAS68G,EAAW,CAAE,QAAAC,CAAQ,EAAU,CAC7C,SACE,OAAC,IAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,mBAAC,KACC,KAAMA,EACN,QAASF,EAAkB,EAC3B,SAAW58G,GAASA,EAAK,MAAQ,GACjC,SAAU,GACZ,EACF,CAEJ,C,sFC1DO,MAAM+pC,UAAsB,eAA4B,CAC7D,QAAS,CACP,SAAO,OAAC,IAAY,CAAC,OAAM,GAAE,GAAG,KAAK,MAAO,CAC9C,CACF,C,iGCQO,MAAMgzE,EAAyB,CAAC,CACrC,SAAA1oH,EACA,WAAA2oH,EACA,UAAAvnH,CACF,IAA4D,CAC1D,MAAMT,KAAS,MAAWioH,CAA+B,EACnDC,KAAU,MAAGF,EAAahoH,EAAO,WAAaA,EAAO,SAAUS,CAAS,EAE9E,SACE,QAAC,OAAI,KAAK,QAAQ,UAAWynH,EAC3B,oBAAC,IAAI,CAAC,UAAWloH,EAAO,2BAA4B,KAAK,sBAAuB,GAC/EX,CAAA,EACH,CAEJ,EAEa4oH,EAAmC7pH,GAAyB,CACvE,MAAM+pH,EAAY;AAAA,mBACD/pH,EAAM,WAAW,KAAK,EAAE;AAAA,qBACtBA,EAAM,WAAW,gBAAgB;AAAA,iBACrCA,EAAM,QAAQ,GAAK,CAAC,CAAC;AAAA,eACvBA,EAAM,OAAO,MAAM,YAAY;AAAA,oBAC1BA,EAAM,OAAO,MAAM,IAAI;AAAA,uBACpBA,EAAM,MAAM,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMhCA,EAAM,OAAO,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS9C,MAAO,CACL,YAAU,OAAI+pH,EAAW,CACvB,OAAQ/pH,EAAM,QAAQ,GAAK,EAAG,EAAG,CAAC,EAElC,WAAY,CACV,QAAS,KACT,SAAU,WACV,KAAM,MACN,IAAK,OACL,MAAO,EACP,OAAQ,EACR,YAAa,gBACb,YAAa,2BAA2BA,EAAM,OAAO,MAAM,IAAI,eAC/D,YAAa,OACf,CACF,CAAC,EACD,cAAY,OAAI+pH,EAAW,CACzB,WAAY,OAEZ,WAAY,CACV,QAAS,KACT,SAAU,WACV,KAAM,OACN,IAAK,MACL,MAAO,EACP,OAAQ,EACR,YAAa,gBACb,YAAa,8CACb,YAAa,OACf,CACF,CAAC,EACD,8BAA4B,OAAI,CAC9B,YAAa/pH,EAAM,QAAQ,CAC7B,CAAC,CACH,CACF,C,gGC1FO,SAASgqH,KACXzxF,EACH,CACA,MAAM6yB,EAAY,SAAuB,IAAI,EAE7C,mBAAgB,IAAM,CACpB7yB,EAAK,QAAS9+B,GAAQ,CACfA,IAID,OAAOA,GAAQ,WACjBA,EAAI2xD,EAAU,OAAO,EAErB3xD,EAAI,QAAU2xD,EAAU,QAE5B,CAAC,CACH,EAAG,CAAC7yB,CAAI,CAAC,EAEF6yB,CACT,C,qCCLO,MAAMpN,KAAc,cACzB,CAAC,CAAE,MAAAnmD,EAAO,MAAAuH,EAAO,SAAA3H,EAAU,YAAAwyH,EAAc,GAAM,GAAGzhH,CAAU,EAAG/O,IAAQ,CACrE,MAAMywH,KAAW,UAAgC,IAAI,EAC/CC,EAAcH,EAAkCvwH,EAAKywH,CAAQ,EAE7DrJ,EACJhpH,IAAU,MACR,OAACgP,EAAA,IACC,KAAK,QACL,KAAK,OACL,KAAK,KACL,QAAUe,GAAM,CACdsiH,EAAS,SAAS,MAAM,EACxBzyH,EAAS,EAAE,EACXmQ,EAAE,gBAAgB,CACpB,EAEA,mBAAC,KAAK,CAAC,QAAQ,gCAAgC,iBAAK,EACtD,EACE,KAEN,SACE,OAACy0C,EAAA,GACC,UAAQ,OAACt7C,EAAA,EAAI,CAAC,KAAK,QAAS,GAC5B,OAAA8/G,EACA,MAAAzhH,EACA,KAAK,OACL,MAAO6qH,KAAc,MAAwBpyH,GAAS,EAAE,EAAIA,EAC5D,SAAW8M,GACTlN,EAASwyH,KAAc,MAAqBtlH,EAAM,cAAc,KAAK,EAAIA,EAAM,cAAc,KAAK,EAEnG,GAAG6D,EACJ,IAAK2hH,CAAA,CACP,CAEJ,CACF,EAEAnsE,EAAY,YAAc,a,yGCtCnB,SAASosE,EAAkB7xH,EAAyB+4C,EAAgC,CACzF,KAAM,CACJ,YAAa68C,EACb,UAAA5rF,EACA,MAAAgG,CACF,EAAI,IAAoB,UAAU,mBAAmB,SAAS,CAC5D,gBAAAhQ,CACF,CAAC,EAEKmoC,EAAY4Q,GAAQ,IAAc,QAAQ,KAAKA,CAAI,EAAIA,EAAK,cAAc,cAAgB,OAE1F+4E,KAAiB,MAAoB9xH,CAAe,EACpD,CAAE,OAAA6nC,EAAQ,QAAAh4B,CAAQ,KAAI,KAAUs4B,CAAS,EAG/C,GAAIn4B,EACF,MAAO,CACL,WAAY,GACZ,YAAa,GACb,QAAS,GACT,iBAAkB,GAClB,MAAAA,CACF,EAGF,GAAI,CAAC+oC,EACH,MAAO,CAAE,WAAY,GAAO,YAAa,GAAO,QAAS,EAAM,EAMjE,GAAI,IAAc,QAAQ,KAAKA,CAAI,EAAG,CACpC,GAAI,CAAC5Q,EACH,MAAM,IAAI,MACR,QAAQ4Q,EAAK,cAAc,KAAK,kEAClC,EAGF,GAAI,CAAClR,EAEH,MAAO,CACL,iBAAkB,GAClB,WAAY,GACZ,YAAa,GACb,QAAAh4B,CACF,EAGF,MAAMkiH,EAAsB,KAAW,wBAAwBD,EAAe,OAAQjqF,CAAM,EACtFmqF,EAAwB,KAAW,wBAAwBF,EAAe,OAAQjqF,CAAM,EAE9F,MAAO,CACL,iBAAkB,GAClB,WAAYkqF,EACZ,YAAaC,EACb,QAASniH,GAAW7F,CACtB,CACF,CAGA,MAAMioH,EAAmB,EAAQr8B,GAAY,YACvCs8B,EAAoB,KAAW,cAAcJ,EAAe,MAAM,EAClEK,EAAsB,KAAW,cAAcL,EAAe,MAAM,EAE1E,MAAO,CACL,iBAAAG,EACA,WAAYC,GAAqBD,EACjC,YAAaE,GAAuBF,EACpC,QAASjoH,CACX,CACF,C,2HClFA,MAAMooH,EAA+B3qF,GAAO,IAAQA,EAAI,CAAE,QAAS,GAAU,CAAC,EAExE4qF,EAAkB,KAAO,eAAe,uBAExCC,EAA0BF,EAAY,CAACG,EAAgBzvH,IAAwC,CACnG,GAAI,CACF,OAAO,IAAI,KAAK,eAAeyvH,EAAQzvH,CAAO,CAChD,MAAQ,CACN,OAAO,IAAI,KAAK,eAAe,QAASA,CAAO,CACjD,CACF,CAAC,EAEK0vH,EAA0BJ,EAAY,CAACG,EAAgBzvH,IACpD,IAAI,KAAK,eAAeyvH,EAAQzvH,CAAO,CAC/C,EAEY2vH,EAAaL,EACxB,CAAC9yH,EAA+B+5E,EAAqC,CAAC,IAAc,CAClF,GAAI,OAAO/5E,GAAU,SACnB,OAAOmzH,EAAW,IAAI,KAAKnzH,CAAK,EAAG+5E,CAAM,EAG3C,MAAMq5C,EAAgBL,EAAkB,KAAO,kBAAiB,MAAY,EAG5E,OADsBC,EAAwBI,EAAer5C,CAAM,EAC9C,OAAO/5E,CAAK,CACnC,CACF,EAEaqzH,EAAiBP,EAC5B,CAAClJ,EAA8BpmH,EAAsC,CAAC,IAAc,CAClF,MAAM4vH,EAAgBL,EAAkB,KAAO,kBAAiB,MAAY,EAG5E,OADsBG,EAAwBE,EAAe5vH,CAAO,EAC/C,OAAOomH,CAAQ,CACtC,CACF,C,wECxCY0J,GAAAA,IACVA,EAAA,IAAM,IACNA,EAAA,SAAW,IACXA,EAAA,OAAS,IACTA,EAAA,SAAW,IAJDA,IAAAA,GAAA,IAcL,MAAMC,EAAkB,IAAI,IAA6B,IACvD,CACL,CACE,GAAI,IACJ,KAAM,MACN,UAAW,CAACvuG,EAAW9e,IAAc8e,EAAI9e,EACzC,kBAAmB,GACrB,EACA,CACE,GAAI,IACJ,KAAM,WACN,UAAW,CAAC8e,EAAW9e,IAAc8e,EAAI9e,EACzC,kBAAmB,GACrB,EACA,CACE,GAAI,IACJ,KAAM,WACN,UAAW,CAAC8e,EAAW9e,IAAc8e,EAAI9e,EACzC,kBAAmB,GACrB,EACA,CACE,GAAI,IACJ,KAAM,SACN,UAAW,CAAC8e,EAAW9e,IAAc8e,EAAI9e,EACzC,kBAAmB,GACrB,CACF,CACD,C,4GC7BD,SAASwF,EAAkBK,EAAe,CACxC,MAAO,gBAAgBA,CAAK,EAC9B,CAKO,MAAMynH,UAAmB,eAA+B,CAAxD,kCACL,cAAYxzH,GAAmC,CAC7C,KAAK,MAAM,SAASA,EAAM,KAAK,CACjC,EAEA,QAAS,CACP,KAAM,CAAE,MAAAA,EAAO,MAAAuH,EAAO,GAAA8lB,CAAG,EAAI,KAAK,MAGlC,IAAI/P,EAMJ,MAAMygD,KAHa,MAAgB,EAGe,IAAKlmD,GAAU,CAC/D,MAAMrU,EAAUqU,EAAM,QAAQ,IAAKuwG,GAAS,CAC1C,MAAMqL,EAAM,CACV,MAAOrL,EAAK,KACZ,MAAOA,EAAK,KACd,EACA,OAAIA,EAAK,QAAUpoH,IACjBsd,EAAUm2G,GAELA,CACT,CAAC,EAED,MAAO,CACL,MAAO57G,EAAM,KACb,MAAOA,EAAM,KACb,MAAOrU,CACT,CACF,CAAC,EAGD,OAAIxD,GAAS,CAACsd,IACZA,EAAU,CAAE,MAAAtd,EAAO,MAAOA,CAAM,MAIhC,OAAC,KACC,GAAAqtB,EACA,MAAA9lB,EACA,aAAc+V,GAAWA,EAAQ,MACjC,iBAAgB,GAChB,eAAgB,GAChB,kBAAA5R,EACA,QAASqyD,EACT,eAAa,KAAE,qCAAsC,QAAQ,EAC7D,YAAW,GACX,SAAU,KAAK,MAAM,SACvB,CAEJ,CACF,C,6FCjEO,SAAS21D,EAAqBC,EAAiCl9F,EAAwC,CAC5G,MAAMm9F,EAA8B,CAAC,EACrC,IAAIC,EAAY,GAEhB,UAAWlkG,KAAUgkG,EACdhkG,EAAO,YAIRA,EAAO,OAASkkG,GAAaA,IAAclkG,EAAO,OACpDikG,EAAe,QAAK,OAAC,IAAmB,GAAM,GAAGjkG,EAAO,KAAK,YAAc,CAAE,EAG/EikG,EAAe,QAAK,OAACjkG,EAAO,UAAP,CAAkC,UAAA8G,CAAA,EAAZ9G,EAAO,GAA2B,CAAE,EAC/EkkG,EAAYlkG,EAAO,OAGrB,OAAOikG,CACT,CAEO,SAASE,EACdC,EACAl8G,EACAuuD,EACiB,CACjB,MAAM3vC,KAAY,MAAgB,EAAE,WAAW,EAE/C,OAAOs9F,EAAkB,OAAwB,CAAC12G,EAAKsS,IAAW,CAChE,MAAM3mB,EAAQ,CAAE,UAAAytB,CAAU,EAE1B,OAAK9G,EAAO,KAAK3mB,CAAK,GAItBqU,EAAI,KAAK,CACP,IAAKA,EAAI,OAAO,SAAS,EACzB,MAAAxF,EACA,UAAAuuD,EACA,UAAW,OAAM,OAACz2C,EAAO,UAAP,CAAkB,GAAG3mB,CAAA,CAAO,CAChD,CAAC,EAEMqU,CACT,EAAG,CAAC,CAAC,CACP,C,wEC9CO,SAAS22G,EAAYh0H,EAAwB,CAClD,OAAI,OAAOA,GAAU,SACZA,EAGLA,IAAU,IAAMA,IAAU,MAAQA,IAAU,QAAa,MAAM,QAAQA,CAAK,EACvE,IAGL,OAAOA,GAAU,UACZA,EAAQ,EAAI,KAGd,YAASA,CAAK,CACvB,C,2EChBO,SAASmtG,EAA0BnI,EAAgD,CACxF,MAAMivB,EAAM,KAAW,aAAajvB,CAAW,EAc/C,SAPqB,MAA6BivB,EANzB,EAM8C,CAQzE,C,qJCTYC,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QAFEA,IAAAA,GAAA,IAcL,MAAMC,EAAc,aACzB,CAAC,CAAE,MAAA5yH,EAAO,MAAAsI,EAAO,QAAA+E,EAAU,QAA0B,WAAAtF,EAAY,aAAcqC,EAAW,GAAG2G,CAAW,EAAG1Q,IAAQ,CACjH,MAAMuG,KAAQ,MAAU,EAClB,CAAE,eAAAisH,EAAgB,WAAAC,CAAW,KAAI,KAAa,EAC9CtqH,EAASuD,EAAUnF,EAAOyG,EAASrN,EAAO6yH,EAAgB9qH,CAAU,EACpEgrH,EAAW,CAAC,CAACzqH,EACb0qH,EAAa5oH,GAAa9B,EAChC,SACE,QAAC,OAAI,IAAAjI,EAAU,UAAWmI,EAAO,QAAS,cAAa,KAAU,WAAW,YAAY,KAAO,GAAGuI,EAC/F,UAAAgiH,MAAY,OAAC,QAAK,UAAWvqH,EAAO,MAAQ,SAAAF,CAAA,CAAM,KACnD,OAAC,UACC,UAAWE,EAAO,OACjB,GAAGsqH,EACJ,aACEE,KACI,KAAE,oDAAqD,uBAAwB,CAAE,WAAAA,CAAW,CAAC,KAC7F,KAAE,6CAA8C,cAAc,EAEpE,KAAK,SACP,GACF,CAEJ,CACF,EAEMjnH,EAAY,CAChBnF,EACAyG,EACArN,EACA6yH,EACA9qH,IACG,CACH,MAAMkrH,KAAK,KAAUjzH,CAAK,EAEpBkzH,EADU7lH,IAAY,QACC,OAAS,OACtC,IAAI8lH,EAAS,OAEb,OAAIF,EAAG,SAAS,EAAI,KAClBE,EAAS,aAAavsH,EAAM,OAAO,OAAO,MAAM,IAG3C,CACL,WAAS,OAAI,CACX,QAAS,OACT,WAAY,SACZ,OAAQ,SACV,CAAC,EACD,SAAO,OAAI,CACT,YAAaA,EAAM,QAAQ,CAAC,CAC9B,CAAC,EACD,UAAQ,OAAI,CACV,MAAOssH,EACP,OAAQA,EACR,WAAY,GAAGlzH,CAAK,GACpB,OAAAmzH,EACA,aAAcvsH,EAAM,MAAM,OAAO,OACjC,cAAe,MACf,QAASisH,EAAiB,cAAcjsH,EAAM,OAAO,QAAQ,IAAI,GAAK,OACtE,UAAWmB,EACP,mBAAmB/H,CAAK,qBAAqB4G,EAAM,OAAO,gBAAgB5G,CAAK,CAAC,GAChF,OACJ,CAAC4G,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAYA,EAAM,YAAY,OAAO,CAAC,WAAW,EAAG,CAClD,SAAUA,EAAM,YAAY,SAAS,KACvC,CAAC,CACH,EACA,UAAW,CACT,UAAW,YACb,EACA,iCAAkC,CAChC,kBAAmB,MACrB,CACF,CAAC,CACH,CACF,EAEAgsH,EAAY,YAAc,a,gEC/FnB,SAASQ,EAAyCC,EAAmD,CAC1G,MAAM/qH,EAAQ,KAAO+qH,EAAI,MAAQ,IAC3BC,EAASD,EAAI,QAAUA,EAAI,MAAQA,EAAI,OAAS,GAAGA,EAAI,KAAK,MAAMA,EAAI,MAAM,GAElF,MAAO,CACL,MAAA/qH,EACA,KAAM,IAA6B,SACnC,OAAAgrH,EACA,cAAeD,EAAI,aACrB,CACF,C,oEChBO,MAAME,EAAoB,CAE/B,kBAAmB,CAACjL,EAAkBkL,IACpCA,EAAc,4BAA4BlL,CAAQ,IAAIkL,CAAW,GAAK,4BAA4BlL,CAAQ,GAC5G,gBAAiB,CAACA,EAAkBkL,IAClCA,EAAc,0BAA0BlL,CAAQ,IAAIkL,CAAW,GAAK,0BAA0BlL,CAAQ,GACxG,wBAAyB,CAACA,EAAkBkL,IAC1CA,EACI,iCAAiClL,CAAQ,IAAIkL,CAAW,GACxD,iCAAiClL,CAAQ,GAC/C,sBAAuB,CAACA,EAAkBkL,IACxCA,EAAc,+BAA+BlL,CAAQ,IAAIkL,CAAW,GAAK,+BAA+BlL,CAAQ,GAClH,yBAA0B,CAACA,EAAkBkL,IAC3CA,EACI,kCAAkClL,CAAQ,IAAIkL,CAAW,GACzD,kCAAkClL,CAAQ,GAChD,uBAAwB,CAACA,EAAkBkL,IACzCA,EACI,gCAAgClL,CAAQ,IAAIkL,CAAW,GACvD,gCAAgClL,CAAQ,GAC9C,mBAAoB,CAACA,EAAkBkL,IACrCA,EAAc,6BAA6BlL,CAAQ,IAAIkL,CAAW,GAAK,6BAA6BlL,CAAQ,GAC9G,iBAAkB,CAACA,EAAkBkL,IACnCA,EAAc,2BAA2BlL,CAAQ,IAAIkL,CAAW,GAAK,2BAA2BlL,CAAQ,GAC1G,sBAAuB,CAACA,EAAkBmL,EAA0BD,IAClEA,EACI,gCAAgClL,CAAQ,IAAImL,CAAgB,IAAID,CAAW,GAC3E,gCAAgClL,CAAQ,IAAImL,CAAgB,GAClE,oBAAqB,CAACnL,EAAkBmL,EAA0BD,IAChEA,EACI,8BAA8BlL,CAAQ,IAAImL,CAAgB,IAAID,CAAW,GACzE,8BAA8BlL,CAAQ,IAAImL,CAAgB,GAChE,sBAAuB,CAACnL,EAAkBmL,EAA0BD,IAClEA,EACI,gCAAgClL,CAAQ,IAAImL,CAAgB,IAAID,CAAW,GAC3E,gCAAgClL,CAAQ,IAAImL,CAAgB,GAGlE,4BAA8BD,GAAwB,sCAAsCA,CAAW,GACvG,0BAA4BA,GAAwB,oCAAoCA,CAAW,GACnG,oBAAqB,CAACA,EAAqBE,IACzC,8BAA8BA,CAAS,IAAIF,CAAW,GAGxD,YAAa,CAAC7gG,EAAiBghG,IAAoB,sBAAsBhhG,CAAO,IAAIghG,CAAO,GAC3F,UAAW,CAAChhG,EAAiBghG,IAAoB,oBAAoBhhG,CAAO,IAAIghG,CAAO,EACzF,EAGaC,EAAuB,CAElC,YAAa,CAACtL,EAAkBkL,IAC9BA,EAAc,+BAA+BlL,CAAQ,IAAIkL,CAAW,GAAK,+BAA+BlL,CAAQ,GAClH,kBAAmB,CAACA,EAAkBkL,IACpCA,EACI,oCAAoClL,CAAQ,IAAIkL,CAAW,GAC3D,oCAAoClL,CAAQ,GAClD,mBAAoB,CAACA,EAAkBkL,IACrCA,EACI,qCAAqClL,CAAQ,IAAIkL,CAAW,GAC5D,qCAAqClL,CAAQ,GACnD,aAAc,CAACA,EAAkBkL,IAC/BA,EACI,gCAAgClL,CAAQ,IAAIkL,CAAW,GACvD,gCAAgClL,CAAQ,GAC9C,gBAAiB,CAACA,EAAkBmL,EAA0BD,IAC5DA,EACI,mCAAmClL,CAAQ,IAAImL,CAAgB,IAAID,CAAW,GAC9E,mCAAmClL,CAAQ,IAAImL,CAAgB,GAGrE,sBAAwBD,GAAwB,yCAAyCA,CAAW,GAGpG,MAAO,CAAC7gG,EAAiBghG,IAAoB,yBAAyBhhG,CAAO,IAAIghG,CAAO,EAC1F,EAKaE,EAA8B,G,sLCrEpC,MAAMC,EAAa,CAAC,CAAE,MAAAr1H,EAAO,SAAAJ,EAAU,KAAAmV,CAAK,IAA2D,CAC5G,KAAM,CAAC3D,EAAWkkH,CAAU,KAAI,YAAkB,EAAK,EAEjDC,KAAoB,UAAO,CAAC,EAE5BC,EAA8D,CAClE,CACE,SAAO,KAAE,mDAAoD,MAAM,EACnE,MAAO,KAAuB,KAC9B,eAAa,KACX,oFACA,iCACF,CACF,EACA,CACE,SAAO,KAAE,oDAAqD,OAAO,EACrE,MAAO,KAAuB,MAC9B,eAAa,KACX,qFACA,kCACF,CACF,CACF,EAEMC,EAAiE,CACrE,CACE,SAAO,KAAE,wDAAyD,OAAO,EACzE,MAAO,KAAuB,KAC9B,eAAa,KACX,wFACA,iCACF,CACF,CACF,EAEMC,EAAgB3gH,EAAK,UAAU,eAAiB,GAEhD4gH,EAAgB,CAAC,CAAE,KAAAz6G,EAAM,MAAA06G,EAAO,MAAA51H,EAAQ,EAAG,IAAsC,CACrF,IAAI2tD,EAAU,GAEVzyC,IAAS,KAAuB,QAC7Bw6G,EAEM11H,IAAU,OACF,MAA8BA,CAAK,IACjC,SACjB2tD,EAAU,IAJZA,KAAU,MAA0B3tD,CAAK,GAS7Cs1H,EAAW,CAAC3nE,CAAO,EACnB/tD,EAAS,CAAE,KAAAsb,EAAM,MAAA06G,EAAO,MAAA51H,CAAM,CAAC,CACjC,EAGMymE,KADc,KAAe,EACL,aAAa,EAAE,IAAKlhE,IACzC,CAAE,MAAOA,EAAE,KAAM,MAAOA,EAAE,OAASA,EAAE,KAAM,OAAQ,KAAe,QAAS,EACnF,EAED,SACE,QAACowC,EAAA,EAAK,CACJ,oBAACouB,EAAA,GACC,MAAO/jE,GAAO,MAAQ,KAAuB,KAC7C,QAASA,GAAO,OAAO,OAAS,KAAkB,IAAMy1H,EAAiBD,EACzE,SAAWt6G,GAAS,CAClBq6G,EAAkB,UAElBI,EAAc,CACZ,GAAG31H,EACH,MAAO,GACP,KAAAkb,CACF,CAAC,CACH,EACF,KACA,OAAC26G,EAAA,GAIC,QAASzkH,EACT,MAAO,6CACP,MAAOpR,GAAO,OAAS,GACvB,eAAa,KAAE,4CAA6C,MAAM,EAClE,SAAWqO,GAAS,CAClBsnH,EAAc,CAAE,GAAG31H,EAAO,MAAOqO,CAAK,CAAC,CACzC,EACA,YAAao4D,CAAA,EARR8uD,EAAkB,OASzB,GACF,CAEJ,EC/FO,SAASO,EACdv0D,EACAh9C,EACA7gB,EACAisC,EACA,CACAprB,EAAQ,gBAAgB,CACtB,GAAI,WACJ,KAAM,GAAGg9C,CAAM,WACf,QAAM,KAAE,+EAAgF,UAAU,EAClG,OAAQ8zD,EACR,SAAA1lF,EACA,aAAc,CACZ,KAAM,KAAuB,IAC/B,EACA,SAAU,CACR,cAAe,EACjB,CACF,CAAC,EAEDprB,EAAQ,gBAAgB,CACtB,GAAI,WACJ,KAAM,GAAGg9C,CAAM,WACf,QAAM,KAAE,+EAAgF,UAAU,EAClG,OAAQ8zD,EACR,SAAA1lF,EACA,aAAc,CACZ,KAAM,KAAuB,IAC/B,CACF,CAAC,EAEDprB,EAAQ,gBAAgB,CACtB,GAAI,iBACJ,KAAM,GAAGg9C,CAAM,iBACf,QAAM,KAAE,qFAAsF,gBAAgB,EAC9G,SAAA5xB,EACA,OAAQ,KACR,aAAc,CAAE,KAAM,KAAkB,MAAO,CACjD,CAAC,CACH,C,iMClCO,MAAMomF,EAAkD,CAC7D,eAAgB,CAAC,EACjB,UAAW,GACX,OAAQ,CAAC,CACX,EAEaC,KAA6B,MAAY,CACpD,KAAM,iBACN,aAAcD,EACd,SAAU,CACR,yBAA2BtzG,IAClB,CAAE,GAAGA,EAAO,UAAW,EAAK,GAErC,uBAAyBA,IAChB,CAAE,GAAGA,EAAO,UAAW,EAAM,GAEtC,qBAAsB,CAACA,EAAOkN,KACrB,CAAE,GAAGlN,EAAO,eAAgBkN,EAAO,QAAS,UAAW,EAAM,GAEtE,2BAA4B,CAAClN,EAAOkN,KAC3B,CAAE,GAAGlN,EAAO,OAAQkN,EAAO,QAAS,UAAW,EAAM,GAE9D,gBAAkBlN,IACT,CAAE,GAAGA,EAAO,aAAc,EAAK,GAExC,cAAgBA,IACP,CAAE,GAAGA,EAAO,aAAc,EAAM,EAE3C,CACF,CAAC,EAEYwzG,EAA+BD,EAA2B,QAC1D,CACX,qBAAAE,EACA,2BAAAC,EACA,yBAAAC,EACA,uBAAAC,EACA,gBAAAp+F,EACA,cAAAC,CACF,EAAI89F,EAA2B,QAGlBM,EAAyC,CACpD,gBAAiB,CAAC,EAClB,UAAW,GACX,YAAa,CAAC,EACd,MAAO,GACP,KAAM,EACN,QAAS,GACT,WAAY,EACZ,WAAY,GACZ,0BAA2B,IAA0B,GACvD,EASMC,KAAuB,MAAY,CACvC,KAAM,kBACN,aAAcD,EACd,SAAU,CACR,uBAAwB,CAAC7zG,EAAOkN,IAAwE,CACtG,KAAM,CAAE,WAAA0H,EAAY,QAAAC,EAAS,GAAGzoB,CAAK,EAAI8gB,EAAO,QAC1C8H,EAAa,KAAK,KAAKJ,EAAaC,CAAO,EAEjD,MAAO,CACL,GAAG7U,EACH,GAAG5T,EACH,WAAA4oB,EACA,QAAAH,EACA,WAAYG,EAAa,EACzB,UAAW,EACb,CACF,EACA,0BAA4BhV,IACnB,CAAE,GAAGA,EAAO,UAAW,EAAK,GAErC,wBAA0BA,IACjB,CAAE,GAAGA,EAAO,UAAW,EAAM,GAEtC,gBAAiB,CAACA,EAAOkN,KAChB,CAAE,GAAGlN,EAAO,YAAakN,EAAO,OAAQ,GAEjD,aAAc,CAAClN,EAAOkN,KACb,CACL,GAAGlN,EACH,MAAOkN,EAAO,QACd,KAAM,CACR,GAEF,YAAa,CAAClN,EAAOkN,KAAmC,CACtD,GAAGlN,EACH,KAAMkN,EAAO,OACf,GACA,mBAAoB,CAAClN,EAAOkN,KAAsD,CAChF,GAAGlN,EACH,0BAA2BkN,EAAO,OACpC,EACF,CACF,CAAC,EACY6mG,EAAyBD,EAAqB,QAE9C,CACX,0BAAAE,EACA,wBAAAC,EACA,uBAAAC,EACA,gBAAAC,EACA,YAAA7+F,EACA,mBAAA8+F,EACA,aAAAC,CACF,EAAIP,EAAqB,QAEzB,EAAe,CACb,sBAAuBN,EACvB,gBAAiBO,CACnB,C,wGCnHO,IAAKO,GAAAA,IACVA,EAAA,KAAO,eACPA,EAAA,OAAS,iBACTA,EAAA,QAAU,kBAHAA,IAAAA,GAAA,IAMAC,GAAAA,IACVA,EAAA,IAAM,OACNA,EAAA,WAAa,WACbA,EAAA,MAAQ,cACRA,EAAA,SAAW,UAJDA,IAAAA,GAAA,IA6HAC,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,WAAa,aALHA,IAAAA,GAAA,IAuFAC,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,OAAS,SACTA,EAAA,UAAY,YACZA,EAAA,UAAY,YALFA,IAAAA,GAAA,IAQAC,GAAAA,IACVA,EAAA,SAAW,WACXA,EAAA,SAAW,kBACXA,EAAA,OAAS,SACTA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,cAAgB,iBAChBA,EAAA,uBAAyB,0BACzBA,EAAA,YAAc,cAVJA,IAAAA,GAAA,IAaAC,GAAAA,IACVA,EAAA,SAAW,WACXA,EAAA,SAAW,kBACXA,EAAA,OAAS,SACTA,EAAA,WAAa,aACbA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,cAAgB,cAChBA,EAAA,uBAAyB,yBACzBA,EAAA,YAAc,cAVJA,IAAAA,GAAA,IAaAC,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,SAAW,WAHDA,IAAAA,GAAA,G,6ICjQL,MAAMC,EAAe,CAAC,CAAE,UAAA5sH,EAAW,SAAAtB,EAAU,UAAAoB,CAAU,IAAa,CACzE,IAAIuE,GAAUvE,KAAY,OAAC,OAAI,UAAAA,EAAuB,SAAApB,CAAA,CAAS,EAASA,EAExE,SAAO,mBAAG,SAAAsB,KAAY,OAAC6sH,EAAA,EAAU,EAAC,EAAKxoH,EAAA,CAAQ,CACjD,ECHO,SAASyoH,EAAS,CAAE,KAAA36F,CAAK,EAAU,CACxC,MAAM9yB,KAAS,MAAWuD,CAAS,EAEnC,SACE,OAAC,OAAI,UAAWvD,EAAO,UACpB,SAAA8yB,EAAK,IAAI,CAAC46F,EAAU7lH,QACnB,QAAC,WAAQ,CACP,qBAAC,OAAI,UAAW7H,EAAO,SACrB,oBAAC,OAAI,UAAWA,EAAO,MAAQ,SAAA0tH,EAAS,MAAM,EAC7CA,EAAS,OACZ,EACC7lH,GAAQ,EAAIirB,EAAK,WAAU,OAAC,OAAI,cAAY,sBAAsB,UAAW9yB,EAAO,UAAW,IALnF6H,EAMf,CACD,EACH,CAEJ,CAEA,MAAMtE,EAAanF,IACV,CACL,aAAW,OAAI,CACb,QAAS,OACT,cAAe,MACf,IAAKA,EAAM,QAAQ,GAAG,EACtB,SAAU,MACZ,CAAC,EACD,YAAU,OAAI,CACZ,GAAGA,EAAM,WAAW,UACpB,QAAS,OACT,cAAe,SACf,IAAKA,EAAM,QAAQ,EAAG,CACxB,CAAC,EACD,SAAO,OAAI,CACT,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,EACD,aAAW,OAAI,CACb,WAAY,aAAaA,EAAM,OAAO,OAAO,IAAI,EACnD,CAAC,CACH,G,sECpCK,MAAMuvH,EAAgB,CAAC,CAAE,MAAA13H,EAAO,OAAAk2G,CAAO,IAAa,CACzD,MAAMnsG,KAAS,MAAW,CAAS,EAC7B,CAAC4tH,GAAYC,CAAa,KAAI,YAAS53H,CAAK,EAC5C,CAACw1B,GAAWqiG,EAAY,KAAI,YAAS,EAAK,EAC1C,CAACntH,EAAWotH,CAAY,KAAI,YAAS,EAAK,EAC1C,CAACrpE,EAAcspE,CAAe,KAAI,YAAiB,KAGzD,aAAU,IAAM,CACdH,EAAc53H,CAAK,CACrB,EAAG,CAACA,CAAK,CAAC,EAEV,MAAMg4H,MAAiB,eACrB,MAAOlrH,IAA6C,CAClD,MAAMwE,GAAWxE,GAAM,cAAc,MAErC,GAAI,CAACwE,GACHymH,EAAgB,sBAAsB,UAC7BzmH,KAAatR,EAGtB+3H,EAAgB,MAAS,EACzBF,GAAa,EAAK,MACb,CACLC,EAAa,EAAI,EACjB,GAAI,CACF,MAAM5hB,EAAO5kG,EAAQ,EACrBymH,EAAgB,MAAS,EACzBF,GAAa,EAAK,CACpB,OAASnnH,EAAO,IACV,MAAaA,CAAK,EACpBqnH,EAAgBrnH,EAAM,KAAK,OAAO,EACzBA,aAAiB,OAC1BqnH,EAAgBrnH,EAAM,OAAO,CAEjC,CACAonH,EAAa,EAAK,CACpB,CACF,EACA,CAAC5hB,EAAQl2G,CAAK,CAChB,EAEA,OAAQw1B,MAoBN,OAAC,OAAI,UAAWzrB,EAAO,eACrB,mBAACsH,EAAA,EAAK,CAAC,UAAWtH,EAAO,MAAO,QAASW,EAAW,QAAS,CAAC,CAAC+jD,EAAc,MAAOA,EAClF,mBAACjK,EAAA,GACC,UAAWz6C,EAAO,MAClB,aAAc4tH,GACd,UAAY7qH,IAAU,CAChBA,GAAM,MAAQ,SAChBkrH,GAAelrH,EAAK,CAExB,EAGA,UAAS,GACT,OAAQkrH,GACR,SAAWlrH,IAAU8qH,EAAc9qH,GAAM,cAAc,KAAK,EAC5D,QAAS,IAAM+qH,GAAa,EAAI,EAClC,EACF,EACF,KArCA,OAAC,OAAI,UAAW9tH,EAAO,cACrB,oBAAC,OAAI,UAAWA,EAAO,YAMrB,oBAAC8rC,EAAA,EAAI,CAAC,QAAQ,KAAK,SAAQ,GACxB,SAAA8hF,EAAA,CACH,KACA,OAACnjF,EAAA,GACC,KAAK,MACL,KAAK,KACL,WAAS,KAAE,mCAAoC,YAAY,EAC3D,QAAS,IAAMqjF,GAAa,EAAI,EAClC,GACF,EACF,CAsBJ,EAEAH,EAAc,YAAc,gBAE5B,MAAM,EAAavvH,IACV,CACL,iBAAe,OAAI,CACjB,SAAU,CACZ,CAAC,EACD,SAAO,OAAI,CACT,KAAM,EAGN,KAAM,SAASA,EAAM,QAAQ,CAAC,CAAC,UAC/B,SAAU,WACV,aAAc,CAChB,CAAC,EACD,SAAO,OAAI,CACT,MAAO,CACL,GAAGA,EAAM,WAAW,EACtB,CACF,CAAC,EACD,kBAAgB,OAAI,CAClB,QAAS,OACT,KAAM,CACR,CAAC,EACD,eAAa,OAAI,CACf,WAAY,SACZ,QAAS,OACT,IAAKA,EAAM,QAAQ,CAAC,EACpB,OAAQA,EAAM,QAAQA,EAAM,WAAW,OAAO,EAAE,CAClD,CAAC,CACH,GC5GK,SAAS8vH,EAAW,CAAE,QAAAC,EAAS,YAAAC,EAAa,QAAAp3H,EAAS,KAAA87B,GAAM,SAAAu7F,EAAU,YAAAC,EAAY,EAAU,CAChG,MAAMtuH,MAAS,MAAW,CAAS,EAC7B42D,EAAMy3D,GAAYF,EAAQ,SAE1BI,EAAeD,MACnB,OAACX,EAAa,CAAC,MAAOQ,EAAQ,KAAM,OAAQG,EAAA,CAAa,KAEzD,QAAC,OAAI,UAAWtuH,GAAO,MACpB,UAAAmuH,EAAQ,QAAO,OAAC,OAAI,UAAWnuH,GAAO,IAAK,IAAKmuH,EAAQ,IAAK,IAAK,YAAYA,EAAQ,IAAI,GAAI,EAC9FC,EAAcA,EAAYD,EAAQ,IAAI,KAAI,OAAC,MAAI,SAAAA,EAAQ,KAAK,GAC/D,EAGF,SACE,QAAC,OAAI,UAAWnuH,GAAO,WACrB,qBAAC,OAAI,UAAWA,GAAO,OACrB,qBAAC,OAAI,UAAWA,GAAO,mBACpB,UAAAuuH,EACAz7F,OAAQ,OAAC26F,EAAQ,CAAC,KAAA36F,EAAA,CAAY,GACjC,KACA,OAAC,OAAI,UAAW9yB,GAAO,QAAU,SAAAhJ,CAAA,CAAQ,GAC3C,EACC4/D,MAAO,OAAC,OAAI,UAAW52D,GAAO,SAAW,SAAA42D,CAAA,CAAI,GAChD,CAEJ,CAEA,MAAM,EAAax4D,IACV,CACL,UAAQ,OAAI,CACV,WAAY,aACZ,QAAS,OACT,cAAe,MACf,SAAU,OACV,IAAKA,EAAM,QAAQ,EAAG,CAAC,CACzB,CAAC,EACD,SAAO,OAAI,CACT,QAAS,OACT,cAAe,MACf,SAAU,OACV,KAAM,EACN,GAAI,CACF,aAAc,CAChB,CACF,CAAC,EACD,WAAS,OAAI,CACX,QAAS,OACT,cAAe,MACf,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,sBAAoB,OAAI,CACtB,QAAS,OACT,MAAO,uBACP,KAAM,EACN,SAAU,OACV,IAAKA,EAAM,QAAQ,EAAG,CAAC,EACvB,eAAgB,gBAChB,SAAU,OACV,SAAU,OACZ,CAAC,EACD,cAAY,OAAI,CACd,MAAO,cACP,QAAS,OACT,cAAe,SACf,IAAKA,EAAM,QAAQ,CAAC,EACpB,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,YAAU,OAAI,CACZ,SAAU,WACV,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,EACD,OAAK,OAAI,CACP,MAAO,OACP,OAAQ,OACR,YAAaA,EAAM,QAAQ,CAAC,CAC9B,CAAC,CACH,G,qCCvFK,SAASowH,EAAS,CAAE,QAAAL,CAAQ,EAAU,CAC3C,MAAMnuH,KAAS,MAAW,CAAS,EAEnC,SACE,OAAC,OAAI,UAAWA,EAAO,YACrB,mBAAC43C,EAAA,EAAO,CACL,SAAAu2E,EAAQ,SAAU,IAAI,CAACxkG,EAAO9hB,KAAU,CACvC,MAAMnD,EAAOilB,EAAM,QAAO,MAAWA,EAAM,IAAI,EAAI,OACnD,MACE,CAACA,EAAM,iBACL,OAACkuB,EAAA,GACC,MAAOluB,EAAM,KACb,OAAQA,EAAM,OAEd,KAAAjlB,EACA,QAASilB,EAAM,WACf,KAAMA,EAAM,IACZ,OAAQA,EAAM,UACd,YAAaA,EAAM,SALd,GAAGA,EAAM,GAAG,IAAI9hB,EAAK,EAM5B,CAGN,CAAC,EACH,EACF,CAEJ,CAEA,MAAM,EAAazJ,IACV,CACL,eAAa,OAAI,CACf,cAAeA,EAAM,QAAQ,CAAC,CAChC,CAAC,CACH,G,+CCnCK,SAASqwH,EAAWC,EAAgBC,EAA0C,CACnF,GAAIA,EACF,OAAOA,EAGT,GAAKD,GAKAhzC,EAAA,GAKL,SAAO,SAAY,MAAekzC,EAAcvkB,MAAa,MAAYA,EAAUqkB,GAAS,MAAM,CAAC,CAAC,CACtG,CAEA,SAASE,EAAYlzC,EAAmB,CACtC,OAAOA,EAAM,QACf,C,qCClBO,SAASmzC,EAAatkB,EAAqBD,EAAwB,CACxE,MAAMwkB,KAAU,MAAap2G,IAAUA,GAAM,QAAQ,IAAI,IAAW,KACpE,aAAU,IAAM,CACd,MAAMq2G,IAAcxkB,GAAU,OAASA,GAAU,KAAOA,GAAU,KAAOA,GAAU,OAAS,CAAE,KAAM,SAAU,EACxGliD,KAAkB,KAAiB0mE,GAAYzkB,EAASwkB,CAAO,EAClE,IAAKE,IAAUA,GAAM,IAAI,EACzB,QAAQ,EAGX3mE,EAAMA,EAAM,OAAS,CAAC,EAAI4mE,EAAA,EAAS,SAEnC,SAAS,MAAQ5mE,EAAM,KAAK,KAAK,CACnC,EAAG,CAACymE,EAASvkB,EAAUD,CAAO,CAAC,CACjC,CCNO,MAAMG,EAAiB,CAAC,CAC7B,MAAAikB,EACA,SAAUQ,EACV,QAAA5kB,EACA,YAAA8jB,GACA,YAAAE,EACA,QAAAt3H,GACA,SAAAq3H,GACA,SAAAhvH,EACA,UAAAoB,EACA,KAAAqyB,EACA,OAAArI,EAAS,IAAe,SACxB,eAAA0kG,GACA,GAAG5mH,EACL,IAAM,CACJ,MAAMvI,MAAS,MAAW,CAAS,EAC7BuqG,EAAWkkB,EAAWC,EAAOQ,CAAU,EACvC,CAAE,OAAAE,EAAO,KAAI,MAAW,EAE9BP,EAAatkB,EAAUD,CAAO,EAE9B,MAAM+kB,GAAgB/kB,GAAWC,GAAU,KAI3C,4BAAgB,IAAM,CAChBA,GACF6kB,GAAO,OAAO,CACZ,WAAY7kB,EACZ,QAAAD,EACA,OAAA7/E,CACF,CAAC,CAEL,EAAG,CAAC8/E,EAAUD,EAAS8kB,GAAQ3kG,CAAM,CAAC,KAGpC,QAAC,OAAI,aAAW,MAAGzqB,GAAO,QAASS,CAAS,EAAI,GAAG8H,GAChD,UAAAkiB,IAAW,IAAe,aACzB,OAAC+9E,EAAA,GAEC,MAAM,iBACN,eAAA2mB,GAEA,oBAAC,OAAI,UAAWnvH,GAAO,UACpB,UAAAqvH,OACC,OAACnB,EAAA,CACC,QAAAl3H,GACA,YAAAs3H,EACA,QAASe,GACT,YAAAjB,GACA,KAAAt7F,EACA,SAAAu7F,EAAA,CACF,EAED/jB,GAAWA,EAAQ,aAAY,OAACkkB,EAAQ,CAAC,QAASlkB,CAAA,CAAS,KAC5D,OAAC,OAAI,UAAWtqG,GAAO,YAAc,SAAAX,CAAA,CAAS,GAChD,EACF,EAGDorB,IAAW,IAAe,WACzB,OAAC+9E,EAAA,GAEC,MAAM,iBACN,eAAA2mB,GAEA,mBAAC,OAAI,UAAWnvH,GAAO,cAAgB,SAAAX,CAAA,CAAS,EAClD,EAGDorB,IAAW,IAAe,QAAUprB,CAAA,EACvC,CAEJ,EAEAorG,EAAK,SAAW8iB,EAEhB,MAAM,EAAanvH,IACV,CACL,WAAS,OAAI,CACX,MAAO,eACP,QAAS,OACT,KAAM,QACN,cAAe,SACf,SAAU,UACZ,CAAC,EACD,eAAa,OAAI,CACf,MAAO,eACP,SAAU,CACZ,CAAC,EACD,aAAW,OAAI,CACb,WAAYA,EAAM,OAAO,WAAW,OACtC,CAAC,EACD,aAAW,OAAI,CACb,MAAO,aACP,QAASA,EAAM,QAAQ,CAAC,EACxB,aAAc,OACd,WAAYA,EAAM,OAAO,WAAW,QACpC,QAAS,OACT,cAAe,SACf,SAAU,EACV,OAAQA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EAEhC,CAACA,EAAM,YAAY,GAAG,IAAI,CAAC,EAAG,CAC5B,QAASA,EAAM,QAAQ,CAAC,CAC1B,CACF,CAAC,EACD,iBAAe,OAAI,CACjB,MAAO,iBACP,QAAS,OACT,cAAe,SACf,QAASA,EAAM,QAAQ,CAAC,EACxB,UAAW,OACX,SAAU,CACZ,CAAC,CACH,E,sFCrHK,MAAM05C,EAAa,CAAC,CAAE,SAAAz4C,EAAU,UAAAoB,EAAW,GAAGmG,CAAU,IAAa,CAC1E,MAAM5G,KAAS,MAAWsvH,CAAkB,EAE5C,SACE,OAAC,OAAK,GAAG1oH,EAAW,aAAW,MAAG5G,EAAO,WAAYS,CAAS,EAC3D,SAAApB,CAAA,CACH,CAEJ,EAEMiwH,EAAsBlxH,IAA0B,CACpD,cAAY,OAAI,CACd,WAAYA,EAAM,OAAO,WAAW,OACtC,CAAC,CACH,E,4GCaO,MAAMmxH,KAAO,cAAsC,CAACtwH,EAAOpH,IAAQ,CACxE,KAAM,CAAE,WAAA43B,EAAY,SAAApwB,EAAU,IAAAqwB,EAAK,OAAA8/F,EAAQ,UAAAC,EAAW,QAAA1nH,EAAS,eAAA2nH,EAAgB,GAAG5qH,CAAK,EAAI7F,EACrFe,KAAS,MAAW2vH,EAAejgG,EAAK8/F,EAAQC,EAAW1nH,EAAS2nH,EAAgBjgG,CAAU,EAEpG,SACE,OAAC,OAAI,IAAA53B,EAAW,GAAGiN,EAAM,UAAW9E,EAAO,KACxC,SAAAX,CAAA,CACH,CAEJ,CAAC,EAEDkwH,EAAK,YAAc,OAEnB,MAAMI,EAAgB,CACpBvxH,EACAsxB,EACA8/F,EACAC,EACA1nH,EACA2nH,EACAjgG,KAEO,CACL,QAAM,OAAI,CACR,CAAE,QAAS,MAAO,KAClB,KAAmBrxB,EAAOsxB,EAAM8L,IAAS,CACvC,IAAKp9B,EAAM,QAAQo9B,CAAG,CACxB,EAAE,KACF,KAAmBp9B,EAAOoxH,EAASh0F,IAAS,CAC1C,OAAQp9B,EAAM,QAAQo9B,CAAG,CAC3B,EAAE,KACF,KAAmBp9B,EAAOqxH,EAAYj0F,IAAS,CAC7C,UAAWp9B,EAAM,QAAQo9B,CAAG,CAC9B,EAAE,EACFk0F,MACE,KAAmBtxH,EAAOsxH,EAAiBl0F,IAAS,CAClD,oBAAqB,4BAA4Bp9B,EAAM,QAAQo9B,CAAG,CAAC,SACrE,EAAE,EACJzzB,MACE,KAAmB3J,EAAO2J,EAAUyzB,IAAS,CAC3C,oBAAqB,UAAUA,CAAG,QACpC,EAAE,KACJ,KAAmBp9B,EAAOqxB,EAAa+L,IAAS,CAC9C,WAAYA,CACd,EAAE,CACJ,CAAC,CACH,E,4GCpEK,MAAMo0F,CAEb,CAIE,aAAc,CACZ,KAAK,SAAW,IAAI,IACpB,KAAK,SAAW,IAAI,GACtB,CAGA,MAAM,gBAAgB17E,EAAa,CACjC,GAAI,CACF,OAAO,MAAM,KAAK,SAAS,gBAAgBA,CAAG,CAChD,OAASvtC,EAAO,CACd,GAAIA,aAAiB,QAAyB,KAAkBA,EAAM,KAAK,aAAa,EACtF,OAAO,MAAM,KAAK,SAAS,gBAAgButC,CAAG,EAEhD,MAAMvtC,CACR,CACF,CAGA,MAAM,cAAclN,EAA4D,CAC9E,MAAI,MAAqBA,CAAO,EAC9B,OAAO,MAAM,KAAK,SAAS,cAAcA,CAAO,EAElD,MAAI,MAAqBA,CAAO,EAC9B,OAAO,MAAM,KAAK,SAAS,cAAcA,CAAO,EAElD,MAAM,IAAI,MAAM,2BAA2B,CAC7C,CAGA,MAAM,gBAAgBy6C,EAAa6kB,EAA2B,CAC5D,OAAO,MAAM,KAAK,SAAS,gBAAgB7kB,EAAK6kB,CAAgB,CAClE,CAWA,MAAM,sBACJt/D,EACoD,CACpD,MAAMo2H,EAAa,MAAM,KAAK,SAAS,sBAAsBp2H,CAAO,EAC9Dq2H,EAAkBD,EAAW,MAAM,OAAQ7kH,GAAS,IAAC,MAAkBA,EAAM,CAAC,IAAI,CAAC,CAAC,EAE1F,GAAI8kH,EAAgB,SAAWD,EAAW,MAAM,OAC9C,OAAOA,EAGT,MAAME,EAAa,MAAM,KAAK,SAAS,sBAAsBt2H,CAAO,EAC9Du2H,EAAkBD,EAAW,MAAM,OAAQ/kH,GAAS,IAAC,MAAkBA,EAAM,CAAC,KAAM,IAAI,CAAC,CAAC,EAEhG,MAAO,CACL,GAAG+kH,EAEH,MAAO,CAAC,GAAGD,EAAiB,GAAGE,CAAe,EAAE,OAAO,GAAU,CACnE,CACF,CAEA,MAAM,iBAAiBtjG,EAAyD,CAE9E,MAAI,MAAkBA,EAAU,IAAI,MAAK,KAA4BA,CAAS,EAC5E,OAAO,MAAM,KAAK,SAAS,iBAAiBA,CAAS,EAGvD,MAAI,KAA6BA,CAAS,EACxC,OAAO,MAAM,KAAK,SAAS,iBAAiBA,CAAS,EAEvD,MAAM,IAAI,MAAM,kDAAkD,CACpE,CACF,C,2DCpFO,MAAMujG,CAAoE,CAC/E,aAAc,CAAC,CAEf,cAAcx2H,EAA6E,CACzF,OAAA2iH,EAAA,EAAiB,eAAe,KAEzB,MAAc,EAAE,KAA+B,sBAAuB,CAC3E,UAAW3iH,EAAQ,UACnB,QAASA,EAAQ,SAAW,GAC5B,UAAWA,EAAQ,WAAa,GAChC,UAAWA,EAAQ,SACrB,CAAC,CACH,CAEA,gBAAgBy6C,EAAa6kB,EAA6D,CACxF,SAAO,MAAc,EAAE,OAAgC,uBAAuB7kB,CAAG,GAAI,OAAW,CAC9F,iBAAA6kB,EACA,aAAc,EAChB,CAAC,CACH,CAEA,MAAM,gBAAgB7kB,EAAawjB,EAAsB,CACvD,MAAM5/B,EAAS,QAAM,MAAc,EAAE,IAAkB,uBAAuBoc,CAAG,GAAIwjB,EAAQ,OAAW,CACtG,aAAc,EAChB,CAAC,EAED,GAAI5/B,EAAO,KAAK,SACd,UAAU,KAAK,KAAU,WAAY,CAAC,qBAAqB,CAAC,EAC7B,CAC7B,OAAQ,IACR,OAAQ,CAAE,IAAK,uBAAuBoc,CAAG,EAAG,EAC5C,KAAM,CACJ,WAAS,KAAE,yEAA0E,qBAAqB,CAC5G,CACF,EAIF,OAAOpc,CACT,CAKA,sBAAsBr+B,EAAyE,CAC7F,OAAO,QAAQ,QAAQ,CACrB,WAAY,KACZ,KAAM,OACN,SAAU,CAAE,gBAAiB,GAAI,EACjC,MAAO,CAAC,CACV,CAAC,CACH,CAKA,iBAAiBizB,EAA8D,CAC7E,OAAO,QAAQ,OAAO,IAAI,MAAM,mDAAmD,CAAC,CACtF,CACF,CCvDA,IAAIwjG,EAEG,SAASC,EAAgB94F,EAAoD,CAEhF,MAAM,IAAI,MAAM,yDAAyD,CAG7E,CAWO,SAAS+4F,EACdC,EACoG,CACpG,MAAM70H,KAAI,MAAwB60H,CAAc,EAWhD,GATKH,IACHA,EAAU,CACR,OAAQ,IAAID,EACZ,GAAI,IAAI,IACR,GAAI,IAAI,IACR,QAAS,IAAIL,CACf,GAGE,CAACM,EAAQ10H,CAAC,EACZ,MAAM,IAAI,MAAM,kCAAkCA,CAAC,EAAE,EAGvD,OAAO00H,EAAQ10H,CAAC,CAClB,C,kICvCO,SAAS80H,EAAoB,CAClC,WAAA59E,EACA,cAAAP,EACA,WAAAo+E,EAAa,GACb,UAAA3sF,CACF,EAA+B,CAG7B,MAAMqhB,KAAW,MAAY,EACvB,CAACurE,EAAOC,CAAQ,KAAI,YAAiCt+E,EAAgB,UAAY,UAAU,EAEjG,GAAIq+E,IAAU,WAAY,CACxB,MAAME,EAAW,KAA2Bh+E,CAAU,EAChDi+E,EAAW1rE,EAAS,SAAWA,EAAS,OAExCgC,EAAc,IAAI,gBAAgB,CACtC,SAAAypE,EACA,SAAUH,EAAaI,EAAW,EACpC,CAAC,EAED,SAAO,OAAC,KAAQ,CAAC,GAAI,iBAAmB1pE,EAAY,SAAS,EAAG,QAAS,GAAO,CAClF,CAEA,SACE,OAAC,KACC,OAAQupE,IAAU,UAClB,SAAO,KAAE,oEAAqE,6BAA6B,EAC3G,QACE,QAAC,OACC,oBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,uDAAuD,kCAClD,OAAC,UAAO,eAAG,EAAS,qCACxC,EACF,KACA,OAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,wDAAwD,yKAGvE,EACF,GACF,EAEF,eAAa,KAAE,mDAAoD,MAAM,EACzE,UAAW,IAAMC,EAAS,UAAU,EACpC,UAAA7sF,CAAA,CACF,CAEJ,CASO,MAAMgtF,KAAkB,cAC7B,CAAC,CAAE,KAAAtsH,EAAM,eAAAgoC,EAAgB,cAAA6F,EAAe,UAAA1xC,CAAU,EAAG5I,IAAQ,CAC3D,KAAM,CAACi6C,EAAiBC,CAAkB,KAAI,YAAS,EAAK,EAE5D,SACE,oBACE,oBAAC,MACC,SAAO,KAAE,wCAAyC,MAAM,EACxD,UAAAtxC,EACA,KAAK,KAEL,QAAQ,YACR,KAAK,OACL,QAAS,IAAMsxC,EAAmB,EAAI,EACtC,IAAAl6C,EAEC,SAAAyM,CAAA,EANG,OAON,EAECwtC,MACC,OAACw+E,EAAA,CACC,WAAYhkF,EACZ,cAAA6F,EACA,UAAW,IAAMJ,EAAmB,EAAK,EAC3C,GAEJ,CAEJ,CACF,EAEA6+E,EAAgB,YAAc,iB,gEC9FvB,SAASC,EACdr2G,EACA/gB,EACA,CACA,MAAMmsC,EAAW,IAAC,KAAE,6CAA8C,WAAW,CAAC,EAC1EnsC,EAAQ,WACV+gB,EAAQ,eAAe,CACrB,KAAM,iBACN,SAAAorB,EACA,QAAM,KAAE,qCAAsC,OAAO,EACrD,SAAU,CACR,eAAa,KAAE,4CAA6C,MAAM,EAClE,QAAS,GACT,IAAK,EACL,IAAK,GACP,EACA,aAAc,MAChB,CAAC,EAGCnsC,EAAQ,YAAc,IACxB+gB,EAAQ,eAAe,CACrB,KAAM,iBACN,SAAAorB,EACA,QAAM,KAAE,qCAAsC,OAAO,EACrD,SAAU,CACR,eAAa,KAAE,4CAA6C,MAAM,EAClE,QAAS,GACT,IAAK,EACL,IAAK,GACP,EACA,aAAc,MAChB,CAAC,EAGCnsC,EAAQ,mBACV+gB,EAAQ,eAAe,CACrB,KAAM,mBACN,SAAAorB,EACA,QAAM,KAAE,8CAA+C,gBAAgB,EACvE,SAAU,CACR,eAAa,KAAE,qDAAsD,MAAM,EAC3E,QAAS,GACT,IAAK,EACL,IAAK,GACP,EACA,aAAc,MAChB,CAAC,CAEL,C,iDC1DO,MAAMkrF,EAAe,CAAC/tH,EAA4BuzB,IAA2B,CAC9EvzB,EAAM,MAAQ,OAASA,EAAM,QAAUA,EAAM,SAAWA,EAAM,UAIlEA,EAAM,gBAAgB,EAElBA,EAAM,MAAQ,UAChBuzB,EAAW,EAIf,C,0ICGO,MAAMy6F,EAAyB32H,MACtB,KAAS,SAAY42H,EAA2B52H,CAAI,EAAG,CAACA,CAAI,CAAC,EAC9D,MAGR,eAAe42H,EAA2B52H,EAAsD,CACrG,MAAM4rF,EAAU5rF,GAAM,SAAS,SAAW,CAAC,EAE3C,GAAIA,GAAQA,EAAK,QAAU4rF,EAAQ,QACjC,UAAWxrF,KAASJ,EAAK,OACvB,GAAII,EAAM,MAAQA,EAAM,KAAK,OAAQ,CAEnC,MAAMssE,EAAa,QAAM,KAAiB,EAAE,IAAIkf,EAAQ,CAAC,EAAE,UAAU,EACrE,GAAIlf,GAAcA,EAAW,YAAY,kBACvC,OAAOA,CAEX,EAKN,CAKO,MAAMmqD,EAAiB,CAC5B33H,EACAozB,EACAumB,EACAi+E,EACAC,OAEO,WAAQ,IAAM,CACnB,MAAM1tD,EAAO,CAAC,EACd,SAAI,KAAkBxwB,CAAM,IAC1BwwB,EAAK,KAAK,CAAE,SAAO,KAAE,6BAA8B,MAAM,EAAG,MAAO,IAAW,IAAK,CAAC,EACpFA,EAAK,KAAK,CAAE,SAAO,KAAE,8BAA+B,OAAO,EAAG,MAAO,IAAW,KAAM,CAAC,GAGrF0tD,GACF1tD,EAAK,KAAK,CAAE,SAAO,KAAE,6BAA8B,WAAW,EAAG,MAAO,IAAW,IAAK,CAAC,EAG3FA,EAAK,KAAK,CAAE,SAAO,KAAE,6BAA8B,MAAM,EAAG,MAAO,IAAW,IAAK,CAAC,EAEhFytD,GACFztD,EAAK,KAAK,CAAE,SAAO,KAAE,8BAA+B,OAAO,EAAG,MAAO,IAAW,KAAM,CAAC,EAGrF/2C,EAAU,KAAK,YAAW,KAAkBumB,CAAM,GACpDwwB,EAAK,KAAK,CAAE,SAAO,KAAE,8BAA+B,OAAO,EAAG,MAAO,IAAW,KAAM,CAAC,EAElFA,CACT,EAAG,CAACxwB,EAAQk+E,EAAQzkG,EAAWwkG,CAAQ,CAAC,C,wECpCnC,IAAIE,EAA6C,CAAC,CAAE,QAAA5sF,CAAQ,OAC1D,QAAC,OAAI,oCAAwBA,EAAQ,KAAC,EASxC,SAAS6sF,EAAsBC,EAAkC,CACtEF,EAAqBE,CACvB,C,iDC7CO,IAAKpuG,GAAAA,IAEVA,EAAA,GAAK,KAELA,EAAA,MAAQ,QAERA,EAAA,SAAW,WAEXA,EAAA,SAAW,WAEXA,EAAA,cAAgB,gBAEhBA,EAAA,IAAM,QAGNA,EAAA,KAAO,OAGPA,EAAA,MAAQ,QAGRA,EAAA,OAAS,SAETA,EAAA,OAAS,SAGTA,EAAA,OAAS,WAGTA,EAAA,WAAa,aAGbA,EAAA,UAAY,YAIZA,EAAA,YAAc,cAGdA,EAAA,gBAAkB,kBAGlBA,EAAA,OAAS,SAGTA,EAAA,OAAS,SAGTA,EAAA,eAAiB,iBAhDPA,IAAAA,GAAA,G,uGCMZ,MAAMyhB,EAAoC,CAAC,EAUpC,SAAS4sF,EAA0B,CAAE,KAAAtrF,EAAM,QAAA6E,EAAS,gBAAA0mF,CAAgB,EAA6B,CACtG,MAAM7zG,EAAM8zG,EAAwBxrF,CAAI,EAEpCtoB,GAAO,CAACgnB,EAAMhnB,CAAG,IACnBgnB,EAAMhnB,CAAG,EAAI,CACX,QAAS,UAAUmtB,CAAO,EAC1B,gBAAA0mF,CACF,EAEJ,CAEO,SAASE,EAAuBnvF,EAAwB,CAC7D,MAAM0D,EAAO1D,EACToC,EAAMsB,CAAI,GACZ,OAAOtB,EAAMsB,CAAI,KAEnB,KAAyB1D,CAAQ,CACnC,CAEO,SAASovF,EAA0BjjG,EAAakjG,EAAc,KAA8B,CACjG,MAAM3rF,EAAO4rF,EAAYnjG,CAAG,EAC5B,GAAI,CAACuX,EACH,MAAO,GAAGvX,CAAG,WAAWkjG,CAAW,GAGrC,MAAME,EADUntF,EAAMsB,CAAI,GAAG,SACL2rF,EACxB,MAAO,GAAGljG,CAAG,WAAWojG,CAAI,EAC9B,CAEO,SAASC,EAAuB9rF,EAAsC,CAC3E,MAAMtoB,EAAMk0G,EAAY5rF,CAAI,EAC5B,GAAKtoB,EAGL,OAAOgnB,EAAMhnB,CAAG,CAClB,CAEO,SAAS8zG,EAAwBxrF,EAA6B,CACnE,MAAM5e,EAAQ4e,EAAK,MAAM,IAAiB,EAE1C,GAAI5e,EACF,OAAOA,EAAM,CAAC,EAIhB,MAAM2qG,EAAuB/rF,EAAK,MAAM,IAAsB,EAE9D,OAAI+rF,EACKA,EAAqB,CAAC,EAGxB,IACT,CAEA,SAASH,EAAY5rF,EAAkC,CACrD,MAAMtoB,EAAM,OAAO,KAAKgnB,CAAK,EAAE,KAAMhnB,GAAQsoB,EAAK,SAAStoB,CAAG,CAAC,EAC/D,GAAKA,EAGL,OAAOA,CACT,C,wECrEO,SAASs0G,EAAWC,EAAkBC,EAAyB,CACpE,GAAI,CAACC,CAAS,EAAIF,EACd,CAACG,CAAS,EAAIF,EAEdG,EAAOF,EAAU,OACjBG,EAASH,EAAU,CAAC,EACpBI,EAAOJ,EAAUE,EAAO,CAAC,EAEzBG,EAAOJ,EAAU,OACjBK,EAASL,EAAU,CAAC,EACpBM,EAAON,EAAUI,EAAO,CAAC,EAEzBG,EAEJ,GAAIN,EACF,GAAIG,GAEF,GAAIC,EAASF,EACXI,EAAWV,EAAU,IAAI,CAAC90H,EAAGL,IAAMm1H,EAAUn1H,CAAC,EAAE,OAAOo1H,EAAUp1H,CAAC,CAAC,CAAC,UAG7D41H,EAAOJ,EACdK,EAAWT,EAAU,IAAI,CAAC/0H,EAAGL,IAAMo1H,EAAUp1H,CAAC,EAAE,OAAOm1H,EAAUn1H,CAAC,CAAC,CAAC,UAG7D21H,GAAUH,GAAUI,GAAQH,EACnCI,EAAWT,UAGJO,EAASH,GAAUI,EAAOH,EAAM,CAEvC,IAAIK,KAAW,MAAWH,EAAQN,CAAS,EAC3CS,EAAWT,EAAUS,CAAQ,EAAIH,EAASG,EAAW,EAAIA,EACzD,IAAIC,KAAS,MAAWH,EAAMP,CAAS,EACvCU,EAASV,EAAUU,CAAM,EAAIH,EAAOG,EAAS,EAAIA,EAEjDF,EAAWV,EAAU,IAAI,CAAC90H,EAAGL,IAC3Bm1H,EAAUn1H,CAAC,EACR,MAAM,EAAG81H,CAAQ,EACjB,OAAOV,EAAUp1H,CAAC,CAAC,EACnB,OAAOm1H,EAAUn1H,CAAC,EAAE,MAAM+1H,EAAS,CAAC,CAAC,CAC1C,CACF,SAESJ,GAAUH,EAAQ,CACzB,IAAIvwG,KAAM,MAAW0wG,EAAQN,CAAS,EACtCpwG,EAAMowG,EAAUpwG,CAAG,EAAI0wG,EAAS1wG,EAAM,EAAIA,EAC1C4wG,EAAWV,EAAU,IAAI,CAAC90H,EAAGL,IAAMm1H,EAAUn1H,CAAC,EAAE,MAAM,EAAGilB,CAAG,EAAE,OAAOmwG,EAAUp1H,CAAC,CAAC,CAAC,CACpF,SAES41H,GAAQJ,EAAQ,CACvB,IAAIvwG,KAAM,MAAW2wG,EAAMP,CAAS,EACpCpwG,EAAMowG,EAAUpwG,CAAG,EAAI2wG,EAAO3wG,EAAMA,EAAM,EAC1C4wG,EAAWT,EAAU,IAAI,CAAC/0H,EAAGL,IAAMo1H,EAAUp1H,CAAC,EAAE,OAAOm1H,EAAUn1H,CAAC,EAAE,MAAMilB,CAAG,CAAC,CAAC,CACjF,OAEA4wG,EAAWV,OAGTO,EACFG,EAAWT,EAEXS,EAAW,CAAC,CAAC,CAAC,EAIlB,OAAOA,CACT,CAEO,SAASG,EAAUhtG,EAAcitG,EAAkBC,EAAuB,CAC/E,GAAI,CAACC,EAAO,GAAGx7G,CAAI,EAAIqO,EACnBotG,EACAC,EAGJ,OAAIF,EAAM,CAAC,EAAIF,IACbG,KAAU,MAAWH,EAAUE,CAAK,EAEhCA,EAAMC,CAAO,EAAIH,GACnBG,KAIAD,EAAMA,EAAM,OAAS,CAAC,EAAID,IAC5BG,KAAQ,MAAWH,EAAQC,CAAK,EAE5BA,EAAME,CAAK,EAAIH,GACjBG,MAIAD,GAAW,MAAQC,GAAS,QAC9BF,EAAQA,EAAM,MAAMC,GAAW,EAAGC,CAAK,EACvC17G,EAAOA,EAAK,IAAK27G,GAAUA,EAAM,MAAMF,GAAW,EAAGC,CAAK,CAAC,GAGtD,CAACF,EAAO,GAAGx7G,CAAI,CACxB,C,kbCzBO,MAAM47G,KAAsB,MAAU,CAC3C,SAAU,CAAC,WAAW,EACtB,YAAa,sBACb,aAAW,KAAgB,CAAE,QAAS,MAAO,CAAC,EAC9C,UAAY94G,IAAa,CACvB,YAAaA,EAAQ,MAAgD,CACnE,aAAesd,IACbA,IAAUA,GAAO,OAAS,EACtBA,GAAO,IAAK0G,IAAY,CAAE,KAAM,YAAa,GAAIA,EAAO,GAAI,EAAE,EAC9D,CAAC,CAAE,KAAM,YAAa,GAAI,cAAe,CAAC,EAChD,MAAO,CAAC,CAAE,UAAA+0F,GAAW,MAAAtmH,EAAO,KAAAugB,GAAM,WAAAgmG,EAAW,KAAO,CAClD,IAAK,WACL,OAAQ,CAAE,UAAAD,GAAW,MAAAtmH,EAAO,KAAAugB,GAAM,WAAAgmG,EAAW,CAC/C,EACF,CAAC,EAGD,UAAWh5G,EAAQ,MAAyB,CAC1C,aAAc,CAACi5G,GAASC,EAAQ50F,KAAc,CAAC,CAAE,KAAM,YAAa,GAAIA,EAAU,CAAC,EACnF,MAAQA,KAAe,CAAE,IAAK,YAAYA,EAAS,GAAI,OAAQ,CAAE,cAAe,EAAK,CAAE,EACzF,CAAC,EAGD,UAAWtkB,EAAQ,SAA2D,CAC5E,gBAAiB,CAAC,WAAW,EAC7B,MAAO,CAAC,CAAE,MAAA9c,GAAO,UAAA61H,CAAU,KAAO,CAChC,OAAQ,OACR,IAAK,WACL,KAAM,CACJ,MAAA71H,GACA,UAAA61H,CACF,CACF,GACA,eAAgB,CAAC,CAAE,UAAAA,EAAU,EAAG,CAAE,eAAAI,EAAgB,SAAAxuG,EAAS,IAAM,CAC/DwuG,EAAe,KAAK,MAAO,CAAE,KAAMn1F,EAAO,IAAM,CAC9CrZ,MACE,MAAgB,CACd,UAAWouG,GACX,SAAU,IACZ,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGD,WAAY/4G,EAAQ,SAAgF,CAIlG,gBAAiB,CAAC,WAAW,EAC7B,MAAO,CAAC,CAAE,IAAA05B,GAAK,MAAAx2C,EAAO,QAAAotC,EAAQ,KAAO,CACnC,OAAQ,MACR,IAAK,YAAYoJ,EAAG,GACpB,KAAM,CACJ,MAAAx2C,EACA,QAAAotC,EACF,CACF,GACA,eAAgB,CAAC,CAAE,UAAAyoF,EAAU,EAAG,CAAE,eAAAI,EAAgB,SAAAxuG,EAAS,IAAM,CAC/DwuG,EAAe,KAAK,IAAM,CACxBxuG,MACE,MAAgB,CACd,UAAWouG,GACX,SAAU,IACZ,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGD,WAAY/4G,EAAQ,SAA+B,CACjD,gBAAiB,CAAC,WAAW,EAC7B,MAAO,CAAC,CAAE,UAAAskB,GAAW,eAAA80F,CAAe,KAAO,CACzC,IAAK,YAAY90F,EAAS,QAC1B,OAAQ,OACR,KAAM,CAAE,UAAW80F,CAAe,CACpC,GACA,eAAgB,CAAC,CAAE,UAAA90F,GAAW,eAAA80F,CAAe,EAAG,CAAE,eAAAD,GAAgB,SAAAxuG,EAAS,IAAM,CAC/EwuG,GAAe,KAAK,IAAM,CACxBxuG,MAAS,MAAe,CAAC2Z,EAAS,CAAC,CAAC,EACpC3Z,MACE,MAAgB,CACd,UAAWyuG,EACX,SAAU,IACZ,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGD,aAAcp5G,EAAQ,SAA0B,CAC9C,gBAAiB,CAAC,WAAW,EAC7B,MAAO,CAAC,CAAE,IAAA05B,EAAI,KAAO,CACnB,IAAK,YAAYA,EAAG,GACpB,OAAQ,SACR,OAAQ,CAGN,iBAAkB,EACpB,CACF,GACA,eAAgB,CAAC,CAAE,UAAAq/E,EAAU,EAAG,CAAE,eAAAI,EAAgB,SAAAxuG,EAAS,IAAM,CAC/DwuG,EAAe,KAAK,IAAM,CACxBxuG,MACE,MAAgB,CACd,UAAWouG,GACX,SAAU,IACZ,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAGD,iBAAkB/4G,EAAQ,MAA0E,CAElG,kBAAmB,EACnB,QAAS,MAAO,CAAE,WAAAikB,GAAY,cAAAC,CAAc,IAAM,CAChD,GAAI,CACF,MAAMG,GAAWJ,GAAW,IAAKK,MACxB,MAAc,EAAE,IAAwB,gBAAgBA,CAAS,SAAS,CAClF,EACKlvB,GAAU,MAAM,QAAQ,IAAIivB,EAAQ,EAEpCg1F,EAA+B,CACnC,QAASp1F,GAAW,OACpB,WAAYC,EAAc,OAC1B,iBAAkB,EAClB,WAAY,CACd,EAEA,UAAWo1F,KAAgBlkH,GACzBikH,EAAY,SAAWC,EAAa,OACpCD,EAAY,YAAcC,EAAa,UACvCD,EAAY,YAAcC,EAAa,UACvCD,EAAY,kBAAoBC,EAAa,aAG/C,MAAO,CAAE,KAAMD,CAAY,CAC7B,OAASltH,GAAO,CACd,MAAO,CAAE,MAAAA,EAAM,CACjB,CACF,CACF,CAAC,EAGD,eAAgB6T,EAAQ,SAAmC,CACzD,gBAAiB,CAAC,WAAW,EAC7B,QAAS,MAAO,CAAE,cAAAkkB,GAAe,eAAAk1F,CAAe,EAAGG,GAAMC,GAAeC,IAAc,CAGpF,UAAW5gF,KAAgB3U,GAAe,CACxC,MAAMw1F,EAAW,QAAM,KAAgB,EAAE,gBAAgB7gF,CAAY,EAC/D3mB,KAAY,MAAsBwnG,CAAQ,EAAIA,EAAS,KAAOA,EAAS,UACvEC,MAAM,MAAsBD,CAAQ,EAAIA,EAAS,SAAW,OAElE,GAAI,IAAO,eAAe,iBACpB,KAAuBA,CAAQ,EAAG,CACpC,IAAU,QAAQ,CAChB,KAAM,KAAU,aAAa,KAC7B,QAAS,CAAC,mCAAmC,CAC/C,CAAC,EACD,QACF,CAEF,QAAM,KAAgB,EAAE,cAAc,CACpC,UAAAxnG,EACA,UAAWknG,EACX,UAAW,GACX,QAAS,GACT,IAAAO,EACF,CAAC,CACH,CACA,MAAO,CAAE,KAAM,MAAU,CAC3B,EACA,eAAgB,CAAC,CAAE,eAAAP,GAAgB,cAAAl1F,CAAc,EAAG,CAAE,eAAAi1F,GAAgB,SAAAxuG,EAAS,IAAM,CACnFwuG,GAAe,KAAK,IAAM,CACxBxuG,MACE,MAAgB,CACd,UAAWyuG,GACX,SAAU,IACZ,CAAC,CACH,EACAzuG,MAAS,MAAeuZ,CAAa,CAAC,CACxC,CAAC,CACH,CACF,CAAC,EAGD,YAAalkB,EAAQ,SAAgC,CACnD,gBAAiB,CAAC,WAAW,EAC7B,QAAS,MAAO,CAAE,WAAAikB,GAAY,eAAAm1F,CAAe,EAAGG,GAAMC,GAAeC,IAAc,CAGjF,UAAWn1F,KAAaL,GAEpB,QAAM,KAAyB,KAAUK,EAAW,CAClD,WAAS,KACP,4CACA,6GACF,CACF,CAAC,GAKH,MAAMm1F,EAAU,CACd,IAAK,YAAYn1F,CAAS,QAC1B,OAAQ,OACR,KAAM,CAAE,UAAW80F,CAAe,CACpC,CAAC,EAGH,MAAO,CAAE,KAAM,MAAU,CAC3B,EACA,eAAgB,CAAC,CAAE,eAAAA,GAAgB,WAAAn1F,CAAW,EAAG,CAAE,eAAAk1F,GAAgB,SAAAxuG,EAAS,IAAM,CAChFwuG,GAAe,KAAK,IAAM,CACxBxuG,MACE,MAAgB,CACd,UAAWyuG,GACX,SAAU,IACZ,CAAC,CACH,EACAzuG,MAAS,MAAesZ,CAAU,CAAC,CACrC,CAAC,CACH,CACF,CAAC,EAGD,cAAejkB,EAAQ,SAAkC,CACvD,gBAAiB,CAAC,WAAW,EAC7B,QAAS,MAAO,CAAE,WAAAikB,EAAW,EAAGs1F,EAAMC,GAAeC,KAAc,CAGjE,UAAWn1F,KAAaL,GAElB,QAAM,KAAyB,KAAUK,CAAS,GAGtD,MAAMm1F,GAAU,CACd,IAAK,YAAYn1F,CAAS,GAC1B,OAAQ,SACR,OAAQ,CAGN,iBAAkB,EACpB,CACF,CAAC,EAEH,MAAO,CAAE,KAAM,MAAU,CAC3B,EACA,eAAgB,CAAC,CAAE,WAAAL,EAAW,EAAG,CAAE,eAAAk1F,EAAgB,SAAAxuG,EAAS,IAAM,CAChEwuG,EAAe,KAAK,IAAM,CACxBxuG,MAAS,MAAesZ,EAAU,CAAC,EAEnC,IAAuB,MAAM,CAC/B,CAAC,CACH,CACF,CAAC,EAGD,iBAAkBjkB,EAAQ,SAAqC,CAC7D,gBAAiB,CAAC,WAAW,EAC7B,QAAS,MAAO,CAAE,cAAAkkB,EAAc,IAAM,CACpC,MAAM01F,KAAmB,MAAkC,EAG3D,UAAW/gF,MAAgB3U,GAAe,CACxC,GAAI,IAAO,eAAe,aAAc,CACtC,MAAMkkC,GAAM,QAAM,KAAgB,EAAE,gBAAgBvvB,EAAY,EAChE,MAAI,KAAuBuvB,EAAG,EAAG,CAC/B,IAAU,QAAQ,CAChB,KAAM,KAAU,aAAa,KAC7B,QAAS,CACP,wHACF,CACF,CAAC,EAED,QACF,CACF,CAEA,QAAM,KAAgB,EAAE,gBAAgBvvB,GAAc,EAAI,EAE1D+gF,EAAiB,oBAAoB,EACrCA,EAAiB,iBAAiB/gF,EAAY,EAC9C,IAAuB,MAAM,EAIzB,IAAO,eAAe,sBACxB,IAAU,QAAQ,CAChB,KAAM,KAAU,aAAa,KAC7B,QAAS,CAAC,mBAAmB,CAC/B,CAAC,CAEL,CACA,MAAO,CAAE,KAAM,MAAU,CAC3B,EACA,eAAgB,CAAC,CAAE,cAAA3U,EAAc,EAAG,CAAE,eAAAi1F,EAAgB,SAAAzuG,EAAS,IAAM,CACnEyuG,EAAe,KAAK,IAAM,IACxB,SAAS,MAAej1F,EAAa,CAAC,KACtC,MAAS,KAAc,KAAK,eAAe,CAAC,gBAAgB,CAAC,CAAC,EAC9D,UAAWwV,MAAOxV,MAChB,SACE,MAAW,CACT,GAAIwV,GAEJ,MAAO,GACP,IAAK,GACL,UAAW,EACb,CAAC,CACH,CAEJ,CAAC,CACH,CACF,CAAC,EAGD,cAAe15B,EAAQ,SAAsF,CAC3G,QAAS,MAAOilE,IAAQ,CACtB,GAAI,CACF,MAAI,MAAqBA,EAAG,EAE1B,MAAO,CAAE,KADQ,QAAM,KAAgB,IAAI,EAAE,cAAcA,EAAG,CACtC,EAG1B,MAAI,MAAqBA,EAAG,EAE1B,MAAO,CAAE,KADG,QAAM,KAAgB,EAAE,cAAcA,EAAG,CAClC,EAErB,MAAM,IAAI,MAAM,2BAA2B,CAC7C,OAAS94E,EAAO,CACd,SAAO,MAAmBA,CAAK,CACjC,CACF,EAEA,eAAgB,CAAC,CAAE,UAAAw3F,EAAU,EAAG,CAAE,eAAAw1B,EAAgB,SAAAxuG,EAAS,IAAM,CAC/D,IAAiB,eAAe,EAChCwuG,EAAe,KAAK,SAAY,CAC9B,MAAM,KAAW,qBAAqB,EACtCxuG,MACE,MAAgB,CACd,UAAWg5E,GACX,SAAU,IACZ,CAAC,CACH,CACF,CAAC,CACH,CACF,CAAC,EAED,gBAAiB3jF,EAAQ,SAAoD,CAC3E,MAAO,CAAC,CAAE,UAAAkS,GAAW,UAAAsvE,EAAW,OAAAq4B,GAAQ,UAAAl2B,EAAU,KAAO,CACvD,OAAQ,OACR,IAAK,qBACL,KAAM,CACJ,UAAAzxE,GACA,UAAAsvE,EACA,OAAAq4B,GACA,UAAAl2B,EACF,CACF,GACA,eAAgB,MAAO,CAAE,UAAAzxE,GAAW,UAAAyxE,CAAU,EAAG,CAAE,eAAAw1B,GAAgB,SAAAxuG,EAAS,IAAM,CAEhF,IAAImvG,EACJ,GAAI5nG,GAAU,IACZ,GAAI,CACF,MAAM6nG,EAAoB,QAAM,KAAgB,EAAE,gBAAgB7nG,GAAU,GAAG,EAC/E4nG,KAAmB,MAAsBC,CAAiB,EACtDA,EAAkB,UAAU,KAC5BA,EAAkB,MAAM,SAC9B,OAAS5tH,EAAO,IACV,MAAaA,CAAK,IAChBA,EAAM,SAAW,IACnB,QAAQ,MAAM,2BAA4BA,CAAK,EAI/CA,EAAM,UAAY,GAGxB,CAGFgtH,GAAe,KAAK,MAAO73F,GAAa,CAEtC3W,MACE,MAAgB,CACd,UAAWg5E,EACX,SAAU,IACZ,CAAC,CACH,EAGIm2B,GAAoBA,IAAqBn2B,GAC3Ch5E,MACE,MAAgB,CACd,UAAWmvG,EACX,SAAU,IACZ,CAAC,CACH,EAGF,MAAME,EAAe,IAAa,iBAAiB14F,EAAS,KAAK,WAAW,EAC5E,KAAgB,KAAK04F,CAAY,CACnC,CAAC,CACH,CACF,CAAC,EAGD,sBAAuBh6G,EAAQ,MAAuD,CACpF,aAAc,CAAC,WAAW,EAC1B,QAAS,SAAY,CACnB,GAAI,CAIF,MAAO,CAAE,KAFQ,QADL,KAAgB,EACD,sBAAsB,CAAC,CAAC,CAE3B,CAC1B,OAAS7T,GAAO,CACd,SAAO,MAAmBA,EAAK,CACjC,CACF,CACF,CAAC,EAGD,iBAAkB6T,EAAQ,SAAiD,CACzE,gBAAiB,CAAC,WAAW,EAC7B,QAAS,MAAO,CAAE,UAAAkS,EAAU,IAAM,CAChC,GAAI,CAEF,MAAMoP,GAAW,QADL,KAAgB,EACD,iBAAiBpP,EAAS,EAC/CrgB,GAAOyvB,GAAS,KAAK,OAAS,GAC9B24F,EAAe34F,GAAS,UAAU,cAAc,IAAa,EAGnE,kBACE,MAAgB,CACd,UAAW24F,EACX,SAAU,IACZ,CAAC,CACH,EAEO,CAAE,KAAM,CAAE,KAAApoH,EAAK,CAAE,CAC1B,OAAS1F,EAAO,CACd,SAAO,MAAmBA,CAAK,CACjC,CACF,CACF,CAAC,CACH,EACF,CAAC,EAEY,CACX,UAAA+tH,EACA,wBAAAx1F,EACA,yBAAAy1F,EACA,4BAAAC,EACA,yBAAAt1F,EACA,kBAAAN,EACA,sBAAA61F,EACA,sBAAAC,EACA,0BAAAC,EACA,uBAAAC,EACA,qBAAAC,EACA,yBAAAC,EACA,sBAAAC,EACA,4BAAAC,EACA,8BAAAC,CACF,EAAI/B,C,iICvgBJ,MAAMgC,EAA6Br2H,GAAoB,CACrD,KAAM,CAAE,UAAAwB,EAAW,QAAAhH,EAAS,MAAAxD,EAAO,SAAAJ,EAAU,OAAAw8E,EAAQ,QAAAxtE,EAAS,KAAAgtB,EAAM,GAAGjrB,CAAU,EAAI3H,EAC/E,CAACC,EAAQqG,CAAS,KAAI,YAAS,EAAK,EAEpCgwH,EAAa,OACjB,OAAC,IAAI,CAAC,SAAU,GAAI,QAAS,IAAMhwH,EAAU,EAAK,EAChD,mBAAC,IAAe,CAAC,UAAU,QACxB,SAAA9L,EAAQ,IAAKuR,MACZ,OAAC,KAEC,MAAOA,EAAK,OAAS,OAAOA,EAAK,KAAK,EACtC,QAAS,IAAMnV,EAASmV,CAAI,EAC5B,OAAQA,EAAK,QAAU/U,GAAO,MAC9B,YAAa+U,EAAK,QAAU/U,GAAO,MACnC,UAAW+U,EAAK,WAAaA,EAAK,MAClC,SAAUA,EAAK,WACf,UAAWA,EAAK,UAChB,KAAK,iBARA,GAAGA,EAAK,KAAK,EASpB,CACD,EACH,EACF,EAGF,SACE,OAAC,IAAQ,CAAC,KAAA6mB,EAAY,QAAS0jG,EAAY,UAAU,aACnD,mBAAC,IAAa,CAAC,UAAA90H,EAAsB,OAAAvB,EAAgB,OAAAmzE,EAAgB,QAAAxtE,EAAmB,GAAG+B,EACxF,SAAA3Q,GAAO,QAAUA,GAAO,OAAS,KAAO,OAAOA,GAAO,KAAK,EAAI,MAClE,EACF,CAEJ,EAEAq/H,EAAsB,YAAc,eAK7B,MAAME,KAAe,QAAKF,CAAqB,C,0HC7D/C,MAAMG,KAAoB,MAAuB,cAAc,EACzDC,KAAuB,MAAmD,iBAAiB,EAC3FC,KAAuB,MAAqB,iBAAiB,EAEpEvoG,EAAyC,CAC7C,oBAAqB,CAAC,EACtB,eAAgB,CAAC,CACnB,EAMawoG,KAAmB,MAAcxoG,EAAe5S,GAAY,CACvEA,EAEG,QAAQi7G,EAAmB,CAACI,EAAO,CAAE,QAASC,CAAY,IAAM,CAE/D,MAAMC,EAAoBF,EAAM,oBAAoB,UAAYA,EAAM,oBAAoB,WAAa,CAAC,EAIxG,GADmBE,EAAiB,KAAMnxF,GAAaA,EAAS,OAASkxF,EAAY,IAAI,EAEvF,MAAM,IAAI,MAAM,2BAA2BA,EAAY,IAAI,EAAE,EAI/DC,EAAiB,KAAKD,CAAW,CACnC,CAAC,EAEA,QAAQJ,EAAsB,CAACG,EAAO,CAAE,QAAA90F,CAAQ,IAAM,CACrD,KAAM,CAAE,KAAA10B,EAAM,SAAAu4B,CAAS,EAAI7D,EACrBi1F,EAAW3pH,IAASu4B,EAAS,KAE7BqxF,EAAYJ,EAAM,oBAAoB,WAAa,CAAC,EAEpDK,EAAcD,EAAU,UAAWrxF,GAAaA,EAAS,OAASv4B,CAAI,EAI5E,GAAI,EAHiB6pH,EAAc,IAIjC,MAAM,IAAI,MAAM,qBAAqB7pH,CAAI,8CAA8C,EAIzF,GAAI2pH,GACiBC,EAAU,KAAME,GAAgBA,EAAY,OAASvxF,EAAS,IAAI,EAEnF,MAAM,IAAI,MAAM,2BAA2BA,EAAS,IAAI,EAAE,EAK9DqxF,EAAUC,CAAW,EAAItxF,EAGzB,MAAMwxF,EAAYP,EAAM,oBAAoB,MAExCO,GAAaJ,IACfH,EAAM,oBAAoB,SAAQ,MAAsBO,EAAW/pH,EAAMu4B,EAAS,IAAI,EAE1F,CAAC,EAEA,QAAQ+wF,EAAsB,CAACE,EAAO,CAAE,QAASxpH,CAAK,IAAM,IAC3D,UAAOwpH,EAAM,oBAAoB,WAAa,CAAC,EAAIjxF,GAAaA,EAAS,OAASv4B,CAAI,CACxF,CAAC,CACL,CAAC,C,gIC9DM,SAASgqH,EAAcpgI,EAAiC,CAC7D,MAAMoxB,EAAQpxB,EAAM,MAAM,YAAY,EACtC,GAAIoxB,EACF,MAAO,CAAC,OAAOA,EAAM,CAAC,CAAC,EAAGA,EAAM,CAAC,CAAC,EAEpC,MAAM,IAAI,MAAM,iCAAiCpxB,CAAK,EAAE,CAC1D,CAEO,SAASqgI,EAAkBl5E,EAA0B,CAC1D,KAAM,CAAE,IAAAm5E,EAAK,MAAA/tG,CAAM,EAAI,UAAU,iBAAiB40B,CAAQ,EAC1D,OAAOm5E,EAAM/tG,CACf,CAEO,MAAMguG,EAAc,OAAO,QAAQ,GAAW,EAAE,IAAI,CAAC,CAAC74G,EAAK1nB,CAAK,KAAO,CAC5E,MAAO0nB,EAAI,CAAC,EAAE,YAAY,EAAIA,EAAI,MAAM,CAAC,EACzC,MAAA1nB,CACF,EAAE,EAEK,SAASwgI,EAA0B5W,EAA2B,CACnE,GAAI,CACF,OAAA6W,EAAwB7W,CAAQ,EACzB,EACT,MAAc,CACZ,MAAO,EACT,CACF,CAEA,MAAM8W,EAAuD,CAC3D,GAAI,EACJ,EAAG,IACH,EAAG,GAAK,IACR,EAAG,KAAU,IACb,EAAG,KAAU,GAAK,IAClB,EAAG,MAAc,GAAK,IACtB,EAAG,IAAM,GAAK,GAAK,GAAK,GAC1B,EAEMC,EAAkB,IAAI,OAAO,8CAA8C,EAC3EC,EAAiB,IAAI,MACzB,uFAAuF,OAAO,OAC5F,GACF,EAAE,KAAK,IAAI,CAAC,EACd,EAQO,SAASH,EAAwB7W,EAA0B,CAChE,IAAI79G,EAAQ69G,EACZ,MAAMx3D,EAAiC,CAAC,EAExC,SAASyuE,EAAcxuE,EAAc,CACnC,MAAMjhC,EAAQuvG,EAAgB,KAAKtuE,CAAI,EACjCyuE,EAAkB1vG,GAAO,QAAQ,OAASA,GAAO,QAAQ,KAE/D,GAAI,CAACA,GAAS,CAAC0vG,EACb,MAAMF,EAGJxvG,GAASA,EAAM,QAAQ,OAASA,EAAM,QAAQ,OAChDrlB,EAAQA,EAAM,QAAQqlB,EAAM,CAAC,EAAG,EAAE,EAClCghC,EAAM,KAAK,CAAC,OAAOhhC,EAAM,OAAO,KAAK,EAAGA,EAAM,OAAO,IAAI,CAAC,GAGxDrlB,GACF80H,EAAc90H,CAAK,CAEvB,CAIA,GAFA80H,EAAcjX,CAAQ,EAElB,CAACx3D,EAAM,OACT,MAAMwuE,EAQR,OALsBxuE,EAAM,OAAO,CAAC/0C,EAAK,CAACrd,EAAOF,CAAI,IAAM,CACzD,MAAM8pH,EAAW5pH,EAAQ0gI,EAA6B5gI,CAAI,EAC1D,OAAOud,EAAMusG,CACf,EAAG,CAAC,CAGN,CAQO,SAASmX,EAAyBC,EAA8B,CACrE,MAAMC,EAAU,KAAK,MAAMD,EAAe,GAAI,EACxCE,EAAU,KAAK,MAAMD,EAAU,EAAE,EACjCE,EAAQ,KAAK,MAAMD,EAAU,EAAE,EAC/BE,EAAO,KAAK,MAAMD,EAAQ,EAAE,EAC5BE,EAAQ,KAAK,MAAMD,EAAO,CAAC,EAC3BE,EAAQ,KAAK,MAAMF,EAAO,GAAG,EAGnC,OAAIJ,IAAiB,EACZ,KAGkC,CACzC,CAACM,EAAO,GAAG,EACX,CAACD,EAAQ,GAAI,GAAG,EAChB,CAAED,EAAO,IAAO,GAAKC,EAAQ,IAAK,GAAG,EACrC,CAACF,EAAQ,GAAI,GAAG,EAChB,CAACD,EAAU,GAAI,GAAG,EAClB,CAACD,EAAU,GAAI,GAAG,EAClB,CAACD,EAAe,IAAM,IAAI,CAC5B,EAKK,OAAO,CAAC,CAAChwH,CAAI,IAAMA,EAAO,CAAC,EAE3B,IAAI,CAAC,CAACA,EAAMo3G,CAAI,IAAMp3G,EAAOo3G,CAAI,EACjC,KAAK,EAAE,CAEd,CASO,MAAMmZ,EAA+B3X,GAA6B,CACvE,GAAI,CACF,OAAO6W,EAAwB7W,CAAQ,CACzC,MAAY,CACV,MAAO,EACT,CACF,EAEa4X,EAAc1nD,GAClBA,EAAK,SAAS,eAAe,EAI/B,SAAS2nD,EAAuBC,EAAyB,CAC9D,OAAIA,GAAW,IAAO,GAAK,MAAQ,EAC1BA,GAAW,IAAO,GAAK,IAAM,IAElCA,GAAW,IAAO,MAAQ,EACrBA,GAAW,IAAO,IAAM,IAE7BA,EAAU,MAAS,EACdA,EAAU,IAAO,IAEnBA,EAAQ,QAAQ,EAAI,IAC7B,C,yDCvKO,MAAMC,EAAmB,6BAYzB,SAASC,EAAcxrH,EAAuB,CACnD,OAAOA,IAASurH,CAClB,C,uHCDO,SAASv8D,EAAsBp8D,EAAc,CAClD,KAAM,CAAE,oBAAA87D,EAAqB,KAAAjoC,EAAM,QAAAzvB,EAAS,YAAAy0H,CAAY,EAAI74H,EACtDe,KAAS,MAAWuD,CAAS,EAEnC,SACE,QAAC,OAAqB,UAAWvD,EAAO,WACtC,qBAAC,QAAK,UAAWA,EAAO,eACtB,oBAAC,IAAI,CAAC,KAAK,uBAAuB,cAAY,MAAO,GACpD8yB,CAAA,EACH,KAEA,OAAC,IAAO,CAAC,QAASzvB,EAChB,mBAAC,KAAM,CAAC,QAAQ,YAAY,KAAK,KAAK,QAAS03D,EAC5C,SAAA+8D,CAAA,CACH,EACF,IAVO,YAWT,CAEJ,CAEA,MAAMv0H,EAAanF,IAA0B,CAC3C,cAAY,OAAI,CACd,MAAO,oBACP,QAAS,OACT,WAAY,SACZ,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,kBAAgB,OAAI,CAClB,QAAS,OACT,WAAY,SACZ,IAAKA,EAAM,QAAQ,EAAG,EACtB,MAAOA,EAAM,OAAO,QAAQ,KAC5B,SAAUA,EAAM,WAAW,UAAU,QACvC,CAAC,CACH,E,iDC1BO,SAAS25H,EAAe9nG,EAAuC,CACpE,MAAO,iBAAkBA,CAC3B,C,4GCVO,MAAM+nG,EAAc,CAAC,CAAE,QAAAhrH,EAAS,aAAcpL,EAAW,MAAA4f,CAAM,IAAa,CACjF,MAAMxhB,KAAS,MAAWuD,CAAS,EAEnC,SACE,OAAC,KACC,aAAY3B,GAAa,QACzB,UAAW5B,EACX,KAAK,QACL,QAAAgN,EACA,MAAAwU,EACA,WAAS,KAAE,uBAAwB,OAAO,EAC5C,CAEJ,EAEMje,EAAanF,MACjB,OAAI,CACF,SAAU,WACV,MAAOA,EAAM,QAAQ,EAAG,EACxB,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,C,8FCLI,MAAM65H,KAA+B,iBAAgD,CAAC,CAAC,EAWvF,SAASC,EAAqCj5H,EAA+C,CAClG,KAAM,CAAE,SAAAI,EAAU,SAAAkjC,EAAU,KAAA41F,EAAM,aAAAC,EAAc,aAAAC,CAAa,EAAIp5H,EAC3Dq5H,KAAc,WAAQ,IAAM,CAChC,MAAMA,EAAgD,CAAC,EAGvD,UAAW3/D,KAAO,OAAO,KAAKw/D,CAAI,EAAoD,CACpF,GACEC,GACAA,EAAaz/D,CAAG,IACfy/D,EAAaz/D,CAAG,EAAE,SAASp2B,CAAQ,GAClC61F,EAAaz/D,CAAG,EAAE,KAAMsrB,GAAYA,aAAmB,QAAUA,EAAQ,KAAK1hD,CAAQ,CAAC,GACzF,CACA+1F,EAAY3/D,CAAG,EAAIw/D,EAAKx/D,CAAG,EAC3B,QACF,EAIG,CAACy/D,GAAgB,OAAO,KAAKA,CAAY,EAAE,SAAW,IACvDC,GACAA,EAAa1/D,CAAG,GAChB,EACE0/D,EAAa1/D,CAAG,EAAE,SAASp2B,CAAQ,GACnC81F,EAAa1/D,CAAG,EAAE,KAAMsrB,GAAYA,aAAmB,QAAUA,EAAQ,KAAK1hD,CAAQ,CAAC,KAGzF+1F,EAAY3/D,CAAG,EAAIw/D,EAAKx/D,CAAG,EAE/B,CAEA,OAAO2/D,CACT,EAAG,CAACH,EAAMC,EAAcC,EAAc91F,CAAQ,CAAC,EAE/C,SAAO,OAAC01F,EAA6B,SAA7B,CAAsC,MAAOK,EAAc,SAAAj5H,CAAA,CAAS,CAC9E,CAEO,SAASk5H,GAA6D,CAC3E,MAAMtlH,KAAU,cAAWglH,CAA4B,EAEvD,GAAI,CAAChlH,EACH,MAAM,IAAI,MACR,4HACF,EAGF,OAAOA,CACT,C,wJC9EO,SAASulH,EAAmB,CAAE,KAAAlxE,EAAM,QAAAmxE,CAAQ,EAAU,CAC3D,MAAMC,EAAiBpxE,GAAM,kBACvBqxE,EAAarxE,GAAM,WACnBsxE,EAAYtxE,GAAM,UAExB,OAAImxE,IAAY,OACP,QAIP,QAAC7sF,EAAA,EAAK,CACJ,oBAAC,KAAU,CAAC,KAAMgtF,EAAW,KAAK,oBAAoB,QAAQ,YAAY,OAAO,SAC/E,mBAAC,KAAK,CAAC,QAAQ,8DAA8D,uBAAW,EAC1F,KACA,OAAC,KAAU,CAAC,KAAMD,EAAY,KAAK,oBAAoB,QAAQ,YAAY,OAAO,SAChF,mBAAC,KAAK,CAAC,QAAQ,iEAAiE,0BAAc,EAChG,KACA,OAAC,KAAU,CAAC,KAAMD,EAAgB,KAAK,oBAAoB,QAAQ,YAAY,OAAO,SACpF,mBAAC,KAAK,CAAC,QAAQ,oEAAoE,6BAAiB,EACtG,GACF,CAEJ,C,qCCjBO,SAASG,EAAe,CAAE,KAAAxsH,EAAM,QAAAosH,CAAQ,EAAwB,CACrE,MAAMK,KAAY,MAAsBzsH,EAAO,CAAE,KAAAA,CAAK,EAAI,IAAS,EAC7D6zF,EAAO44B,EAAU,KAEvB,GAAI,CAAC54B,GAAQ44B,EAAU,UACrB,OAAO,KAGT,MAAMC,KAAW,MAAY74B,EAAK,MAAM,MAAM,EAE9C,OAAIu4B,IAAY,UAEZ,oBACE,oBAAC3sF,EAAA,EAAI,CACH,mBAAC,KAAK,CAAC,QAAQ,yDAAyD,yKAGxE,EACF,EAECitF,MACC,OAACntF,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,EAC1B,mBAACuR,EAAA,EAAQ,CAAC,KAAM47E,EAAU,SAAQ,GAChC,mBAAC,KAAK,CAAC,QAAQ,wDAAwD,2BAAe,EACxF,EACF,GAEJ,KAKF,mBACG,SAAAA,MACC,OAACntF,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,EAC1B,mBAAC,KAAU,CAAC,KAAMmtF,EAAU,KAAK,oBAAoB,QAAQ,YAAY,OAAO,SAC9E,mBAAC,KAAK,CAAC,QAAQ,kEAAkE,2BAAe,EAClG,EACF,EAEJ,CAEJ,C,0BC5CA,MAAMC,EAAc,CAAC,CAAE,SAAAC,EAAU,iBAAAC,CAAiB,IAAwB,CACxE,MAAMl5H,KAAS,MAAWuD,EAAW21H,CAAgB,EAC/CC,KAAmB,UAAO,CAAC,EAC3BC,EAAgBH,IAAa,QAAaA,EAAWE,EAAiB,QAQ5E,SANA,aAAU,IAAM,CACVF,IAAa,SACfE,EAAiB,QAAUF,EAE/B,EAAG,CAACA,CAAQ,CAAC,EAETA,IAAa,OACR,QAIP,OAAC,OACC,UAAWj5H,EAAO,UAClB,gBAAY,KAAE,8CAA+C,cAAc,EAC3E,KAAK,cACL,gBAAei5H,EACf,gBAAe,EACf,gBAAe,IAEf,mBAAC,OAAI,UAAWG,EAAgBp5H,EAAO,eAAiBA,EAAO,OAAQ,MAAO,CAAE,MAAO,GAAGi5H,CAAQ,GAAI,EAAG,EAC3G,CAEJ,EAEM11H,EAAY,CAACnF,EAAsB86H,EAAmB,KAAO,CACjE,aAAW,OAAI,CACb,OAAQ,OACR,MAAO,QACP,gBAAiB96H,EAAM,OAAO,WAAW,UACzC,aAAcA,EAAM,MAAM,OAAO,KACjC,SAAU,SACV,OAAQA,EAAM,QAAQ86H,EAAkB,CAAC,CAC3C,CAAC,EACD,UAAQ,OAAI,CACV,OAAQ,OACR,WAAY96H,EAAM,OAAO,QAAQ,IACnC,CAAC,EACD,kBAAgB,OAAI,CAClB,OAAQ,OACR,WAAYA,EAAM,OAAO,QAAQ,KACjC,CAACA,EAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,WAAY,wBACd,CACF,CAAC,CACH,GAEA,EAAe46H,E,eC1CR,SAASK,EAAW,CAAE,QAAAZ,EAAS,IAAA5pB,EAAK,cAAAyqB,EAAgB,GAAO,eAAAC,CAAe,EAAoB,CACnG,MAAMC,KAAc,UAAO,EAAK,EAE1B,CAAE,MAAA9gH,EAAO,QAAA8rB,EAAS,SAAAy0F,EAAU,QAAAnR,EAAS,OAAAnpE,CAAO,EAAIkwD,GAAK,QAAU,CAAC,EAChEzQ,EAAWyQ,GAAK,UAAU,SAAS,qCAAqC,EACxE6pB,EAAiB7pB,GAAK,QAAQ,KAAK,kBA6CzC,SA1CA,aAAU,IAAM,CACd,GAAKn2F,EAIL,OAAQA,EAAO,CACb,IAAK,UACH6gH,IAAiB,CAAE,OAAQ,SAAU,CAAC,EACtC,MACF,IAAK,UACEC,EAAY,UACfD,IAAiB,CACf,OAAQ,UACR,QAAS,CACP,SAAO,KAAE,2DAA4D,6BAA6B,EAClG,QAAS56E,GAAQ,OAASA,EAASna,CACrC,CACF,CAAC,EACDg1F,EAAY,QAAU,IAExB,MACF,IAAK,QACEA,EAAY,UACfD,IAAiB,CACf,OAAQ,QACR,MAAO,CACL,SAAO,KAAE,yDAA0D,mBAAmB,EACtF,QAAS56E,GAAQ,OAASA,EAASna,CACrC,CACF,CAAC,EACDg1F,EAAY,QAAU,IAExB,MACF,IAAK,UACL,IAAK,UACHD,IAAiB,CAAE,OAAQ,SAAU,CAAC,EACtC,MACF,QACE,KACJ,CACF,EAAG,CAAC7gH,EAAO8rB,EAASma,EAAQ46E,CAAc,CAAC,EAEtC1qB,GAAK,UAKR,OAACjjE,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACA,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC5B,WAAC,UAAW,SAAS,EAAE,SAASlzB,GAAS,EAAE,MAC1C,QAACkzB,EAAA,EAAK,CAAC,UAAU,SAAS,WAAW,SACnC,qBAACA,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,eAAe,SAAS,IAAK,EACtE,oBAACmkE,EAAA,EAAO,CAAC,KAAM,GAAI,KACnB,OAACjkE,EAAA,EAAI,CAAC,QAAQ,KAAK,QAAQ,KAAK,MAAM,YACnC,SAAAtH,GAAW9rB,MAAS,KAAE,mCAAoC,aAAa,EAC1E,GACF,KACA,OAAC,EAAW,CAAC,SAAUugH,GAAY,EAAG,GACxC,EAEDK,GAAiBxR,MAChB,QAACl8E,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACE,EAAA,EAAI,CAAC,QAAQ,KACZ,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,mBAAO,EAC1D,KACA,OAAC+7E,EAAA,EAAU,CAAC,QAAAC,CAAA,CAAkB,GAChC,EAEDpvG,IAAU,UACTggH,KACE,OAACF,EAAkB,CAAC,KAAM3pB,EAAI,QAAQ,IAAK,QAAA4pB,CAAA,CAAkB,KAE7D,OAACI,EAAc,CAAC,KAAMz6B,EAAU,QAAAq6B,CAAA,CAAkB,KAGpD,OAAC,IAAkB,CAAC,SAAO,KAAE,6CAA8C,cAAc,EAAG,OAAQ,GAClG,mBAAC,OAAK,cAAK,UAAU5pB,EAAK,KAAM,CAAC,EAAE,EACrC,GAEJ,EACF,EArCO,IAuCX,CC7FO,SAAS4qB,EAAkB,CAAE,OAAAC,EAAQ,eAAAx7E,EAAgB,QAAAu6E,EAAS,eAAAc,CAAe,EAAqB,CACvG,MAAMI,KAAa,UAAO,EAAK,EACzBC,KAAgB,MAAkC,CACtD,KAAM17E,EACN,IAAKw7E,CACP,CAAC,EACKG,EAAcF,EAAW,SAAWC,EAAc,QAElD/qB,EAAM+qB,EAAc,KA+D1B,SA7DA,aAAU,IAAM,CACd,MAAME,EAAc,CAACjrB,GAAO,CAAC8qB,EAAW,SAAW,CAACC,EAAc,WAClE,IAAI5yH,EASJ,GAPI8yH,IACFH,EAAW,QAAU,GACrB3yH,EAAY,WAAW,IAAM,CAC3B4yH,EAAc,QAAQ,CACxB,EAAG,GAAI,GAGLC,EAAa,CACfN,IAAiB,CACf,OAAQ,QACR,MAAO,CACL,SAAO,KAAE,uCAAwC,cAAc,EAC/D,WAAS,KACP,+CACA,sGACF,CACF,CACF,CAAC,EACD,MACF,CAEA,GAAIK,EAAc,WAAa/qB,GAAK,OAAQ,CAC1C,KAAM,CAAE,MAAAn2F,EAAO,QAAA8rB,EAAS,OAAAma,CAAO,EAAIkwD,EAAI,OAEnCn2F,IAAU,QACZ6gH,IAAiB,CACf,OAAQ,QACR,MAAO,CACL,SAAO,KAAE,yDAA0D,mBAAmB,EACtF,QAAS56E,GAAQ,OAASA,EAASna,CACrC,CACF,CAAC,EACQ9rB,IAAU,UACnB6gH,IAAiB,CACf,OAAQ,UACR,QAAS,CACP,SAAO,KAAE,2DAA4D,4BAA4B,CACnG,CACF,CAAC,EACQ7gH,IAAU,WACnB6gH,IAAiB,CACf,OAAQ,UACR,QAAS,CACP,SAAO,KAAE,2DAA4D,6BAA6B,EAClG,QAAS56E,GAAQ,OAASA,EAASna,CACrC,CACF,CAAC,CAEL,CAEA,MAAO,IAAM,CACPx9B,GACF,aAAaA,CAAS,CAE1B,CACF,EAAG,CAAC4yH,EAAe/qB,EAAK0qB,EAAgBM,CAAW,CAAC,EAEhD,CAAChrB,GAAO+qB,EAAc,WAAaA,EAAc,cAEjD,QAAChuF,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,eAAe,SAAS,IAAK,EACtE,oBAACmkE,EAAA,EAAO,CAAC,KAAM,GAAI,KACnB,OAACjkE,EAAA,EAAI,CAAC,QAAQ,KAAK,MAAM,YACvB,mBAAC,KAAK,CAAC,QAAQ,+CAA+C,mCAAuB,EACvF,GACF,KAIG,OAACutF,EAAU,CAAC,IAAAxqB,EAAU,cAAe,GAAM,eAAA0qB,EAAgC,QAAAd,CAAA,CAAkB,CACtG,CCrFO,SAAS3oB,EAAU,CAAE,QAAA2oB,EAAS,MAAAx5B,EAAO,eAAAs6B,CAAe,EAAmB,CAC5E,MAAMQ,KAAc,MAAgB,CAClC,cAAe,iBAAiB96B,EAAM,UAAU,IAAI,GACpD,MAAO,EACT,CAAC,EACK+6B,EAAYD,GAAa,MAAM,QAAQ,CAAC,EACxCE,EAAYh7B,EAAM,UAAU,SAAS,qCAAqC,EAI1Ei7B,EADuB,CAACH,EAAY,iBAAmB,CAACA,EAAY,WAClB,CAACC,GAAa,CAAC,CAACC,EAExE,OAAIF,EAAY,aAEZ,QAACnuF,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,eAAe,SAAS,IAAK,EACtE,oBAACmkE,EAAA,EAAO,CAAC,KAAM,GAAI,KACnB,OAACjkE,EAAA,EAAI,CAAC,QAAQ,KAAK,MAAM,YACvB,mBAAC,KAAK,CAAC,QAAQ,mCAAmC,uBAAW,EAC/D,GACF,EAIAiuF,EAAY,SACdR,IAAiB,CACf,OAAQ,QACR,MAAO,CACL,SAAO,KAAE,0DAA2D,2BAA2B,CACjG,CACF,CAAC,EACM,MAGLS,KACK,OAACX,EAAU,CAAC,IAAKW,EAAW,cAAe,GAAO,eAAAT,EAAgC,QAAAd,CAAA,CAAkB,EAGzGyB,KAEA,OAACT,EAAA,CACC,OAAQx6B,EAAM,UAAU,IACxB,eAAgBg7B,EAChB,eAAAV,EACA,QAAAd,CAAA,CACF,KAKF,QAAC7sF,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,eAAe,SAAS,IAAK,EACtE,oBAACmkE,EAAA,EAAO,CAAC,KAAM,GAAI,KACnB,OAACjkE,EAAA,EAAI,CAAC,QAAQ,KAAK,OAAO,OACxB,mBAAC,KAAK,CAAC,QAAQ,mCAAmC,uBAAW,EAC/D,GACF,CAEJ,C,0LCvDA,MAAMquF,EAAyB,KAAa,MAAM,UAAU,QAAQ,eAAe,KAenF,IAAIC,EAAgD,CAAC,EAE9C,SAASC,EAA4BrvH,EAA2B,CACrEovH,EAAuB,KAAKpvH,CAAI,CAClC,CAEO,SAASsvH,GAAiC,CAC/CF,EAAyB,CAAC,CAC5B,CAEe,SAASG,EAAU,CAAE,UAAA7tG,EAAW,MAAApzB,CAAM,EAAoD,CACvG,MAAMkhI,EAAmBjgB,GAAsB,CAC7C,KAAgB,QAAQ,CAAE,UAAAA,CAAU,CAAC,CACvC,EAEMkgB,KAAiB,eAAY,IAAM,CACvC,MAAMC,EAAmC,CAAC,EAE1C,OAAAA,EAAU,KAAK,CACb,QAAS,KAAmB,KAC5B,OAAQP,EAAuB,gBAC/B,KAAM,WACN,SAAO,KAAE,8CAA+C,kBAAkB,EAC1E,gBAAiB,GACjB,QAAS,IAAMK,EAAgB,KAAmB,IAAI,CACxD,CAAC,EAEDE,EAAU,KAAK,CACb,QAAS,KAAmB,gBAC5B,OAAQP,EAAuB,gBAC/B,KAAM,YACN,SAAO,KAAE,8CAA+C,kBAAkB,EAC1E,gBAAiB,CAAC7gI,MAAS,MAA0B,EACrD,QAAS,IAAM,CACbkhI,EAAgB,KAAmB,eAAe,CACpD,CACF,CAAC,EAEDE,EAAU,KAAK,CACb,QAAS,KAAmB,SAC5B,OAAQP,EAAuB,cAC/B,KAAM,SACN,SAAO,KAAE,4CAA6C,gBAAgB,EACtE,gBACE,KAAW,YACX,IAAO,iBACP,KAAW,cAAc,IAAoB,eAAe,EAC9D,QAAS,IAAM,CACbK,EAAgB,KAAmB,QAAQ,CAC7C,CACF,CAAC,EAEDJ,EAAuB,QAAS/uC,GAAMqvC,EAAU,KAAKrvC,CAAC,CAAC,EAEhDqvC,EAAU,OAAQ1vH,GAASA,EAAK,eAAe,CACxD,EAAG,CAAC1R,CAAK,CAAC,EAEJ0T,EAAWhC,GAA8B,CAC7C,IAAsB,uBAAuB,CAC3C,KAAMA,EAAK,QACX,iBAAe,MAAkB1R,GAAO,OAAO,CAAC,CAClD,CAAC,EAED0R,EAAK,QAAQ0hB,CAAS,CACxB,EAEA,SACE,OAAC,IAAI,CAAC,cAAaytG,EAAuB,UACvC,SAAAM,EAAe,EAAE,IAAKzvH,MACrB,QAAC,YACE,UAAAA,EAAK,uBAAsB,OAAC,IAAK,QAAL,EAAa,KAC1C,OAAC,IAAK,KAAL,CACC,OAAQA,EAAK,OACb,MAAOA,EAAK,MACZ,KAAMA,EAAK,KACX,YAAaA,EAAK,YAClB,UAAWA,EAAK,UAChB,UAAWA,EAAK,UAChB,QAAS,IAAMgC,EAAQhC,CAAI,EAC7B,IAVmBA,EAAK,OAW1B,CACD,EACH,CAEJ,C,iDChHO,SAAS2vH,GAAsB,CACpC,MAAO,CACL,UAAU53H,EAAOkhB,EAAQjP,EAAM,CAC7B,MAAM/e,EAAQguB,EAAO,MAErB,GAAIhuB,EAAM,UAAU,WAClB,OAAO+e,EAAK,EAGd,GAAIjS,EAAM,MAAQ,KAAOA,EAAM,QAAS,CACtCA,EAAM,eAAe,EACrB,MAAMuB,EAAOrO,EAAM,WAAW,KACxBsO,EAAStO,EAAM,UAAU,OAAO,OAEhC2kI,EADSt2H,EAAK,OACKC,EACzB,OAAA0f,EAAO,cAAc22G,CAAO,EACrB,EACT,CAEA,OAAO5lH,EAAK,CACd,CACF,CACF,C,mFClBO,MAAM6lH,EAAc,CAAC,CAAE,QAAA71H,CAAQ,OAA2B,OAAC,IAAI,CAAC,MAAM,UAAW,SAAAA,CAAA,CAAQ,EACnF81H,EAAW,CAAC,CAAE,QAAA91H,CAAQ,OAA2B,OAAC,IAAI,CAAC,QAAQ,OAAQ,SAAAA,CAAA,CAAQ,C,6OCMrF,MAAM+1H,EAAyB,CAAC,CACrC,YAAAC,EACA,cAAA98D,EACA,WAAA+8D,GACA,mBAAAC,EACA,UAAAz6H,EACF,IAAmC,CACjC,MAAMT,MAAS,MAAWuD,CAAS,EAEnC,OAAI23H,GAAsBh9D,GAAiB,EAClC,QAIP,QAAC,OAAI,aAAW,MAAGl+D,GAAO,QAASS,EAAS,EAC1C,oBAACgqC,EAAA,GACC,KAAK,aACL,KAAK,KACL,WAAS,KAAE,qDAAsD,UAAU,EAC3E,QAAS,IAAMwwF,GAAWD,EAAc,CAAC,EACzC,SAAUA,IAAgB,EAC5B,KACA,QAAC,KAAK,CAAC,QAAQ,+CACZ,WAAE,YAAAA,CAAY,EAAE,OAAK,CAAE,cAAA98D,CAAc,GACxC,KACA,OAACzzB,EAAA,GACC,KAAK,cACL,KAAK,KACL,WAAS,KAAE,iDAAkD,MAAM,EACnE,QAAS,IAAMwwF,GAAWD,EAAc,CAAC,EACzC,SAAUA,IAAgB98D,CAAA,CAC5B,GACF,CAEJ,EAEM36D,EAAanF,IAA0B,CAC3C,WAAS,OAAI,CACX,QAAS,OACT,cAAe,MACf,IAAK,GACL,WAAY,MACd,CAAC,CACH,GC5Ca+8H,EAA4B,CAAC,CAAE,QAAA91G,EAAS,MAAAxd,EAAO,WAAAozH,EAAW,IAAsC,CAC3G,MAAMj7H,KAAS,MAAW,CAAS,EAC7Bo7H,GAAc/1G,EAAQ,OAE5B,SACE,oBACE,oBAAC,OAAI,UAAWrlB,EAAO,eACrB,mBAAC8rC,EAAA,EAAI,CAAC,QAAQ,IAAI,MAAM,YACrB,SAAAzmB,EAAQxd,EAAQ,CAAC,EACpB,EACF,KACA,OAACkzH,EAAA,CACC,YAAalzH,EACb,cAAeuzH,GACf,WAAAH,GACA,mBAAoB,GACpB,UAAWj7H,EAAO,kBACpB,GACF,CAEJ,EAEM,EAAa5B,IAA0B,CAC3C,qBAAmB,OAAI,CACrB,QAAS,OACT,cAAe,MACf,eAAgB,WAChB,UAAW,EACb,CAAC,EACD,kBAAgB,OAAI,CAClB,QAAS,OACT,UAAW,OACX,SAAU,EACV,WAAY,WACZ,UAAW,IACX,UAAW,SACX,gBAAiBA,EAAM,OAAO,WAAW,UACzC,OAAQ,aAAaA,EAAM,OAAO,OAAO,IAAI,GAC7C,QAASA,EAAM,QAAQ,CAAC,EACxB,UAAW,EACb,CAAC,CACH,G,eC1CO,MAAMi9H,EAAgB,CAAC,CAAE,kBAAAC,EAAmB,aAAAC,CAAa,IAAyB,CACvF,MAAMv7H,MAAS,MAAW,CAAS,EAEnC,SACE,QAAC,OAAI,UAAWA,GAAO,wBACrB,oBAACiF,EAAA,IACC,QAAS,IAAMq2H,EAAkB,KAAkB,OAAO,EAC1D,KAAK,KACL,QAAQ,YACR,KAAK,YACL,SAAUC,EAET,cAAkB,QACrB,KACA,OAACt2H,EAAA,IACC,QAAS,IAAMq2H,EAAkB,KAAkB,eAAe,EAClE,KAAK,KACL,QAAQ,YACR,KAAK,uBACL,SAAUC,EAET,cAAkB,gBACrB,KACA,OAACt2H,EAAA,IACC,QAAS,IAAMq2H,EAAkB,KAAkB,UAAU,EAC7D,KAAK,OACL,KAAK,KACL,QAAQ,YACR,SAAUC,EAET,sBACH,GACF,CAEJ,EAEM,EAAan9H,IAA0B,CAC3C,2BAAyB,OAAI,CAC3B,QAAS,OACT,cAAe,MACf,IAAK,CACP,CAAC,CACH,G,gDCxCA,MAAMo9H,KAAc,MAAuB,2BAA2B,EAE/D,IAAKC,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,WAAa,aACbA,EAAA,UAAY,YAHFA,IAAAA,GAAA,IAML,MAAMC,EAAU,IASjBj5H,EAAiB,CACrB,MAAO,KACP,YAAa,EACb,QAASi5H,CACX,EAgBO,SAASC,EAAaliI,EAAmBgJ,EAAsC,CACpF,KAAM,CAAE,MAAAgkB,EAAO,YAAAm1G,GAAa,WAAAC,EAAY,QAAAC,EAAQ,EAAI,CAAE,GAAGr5H,EAAgB,GAAGhJ,CAAQ,EAE9E,CAACsiI,GAAUC,CAAW,KAAI,YAAoB,CAAC,CAAC,EAGhD,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAE,EAC/B,CAACC,EAAcC,EAAe,KAAI,YAAuB,MAAiB,EAC1E,CAACz1H,GAAO01H,EAAQ,KAAI,YAAgB,EACpC,CAAE,MAAOC,CAAY,KAAI,MAAmB,EAElD,IAAIC,GAAe,GAEnB,MAAMljF,MAAU,eACbrzC,IAAa,CACZo2H,GAAgB,MAAiB,EACjCJ,EAAY,CAAC,CAAC,EACdK,GAASr2H,EAAC,EACVs2H,EACE,uCACA,+EACF,EACA,QAAQ,MAAMt2H,EAAC,EACfw1H,EAAY,SAASx1H,GAAG,CAAE,SAAU,KAAK,UAAU+1H,EAAQ,EAAG,MAAAt1G,EAAO,YAAa,OAAOm1G,EAAW,CAAE,CAAC,CACzG,EACA,CAACG,GAAUt1G,EAAOm1G,GAAaU,CAAW,CAC5C,KAEA,aAAU,IAAM,CACVP,GAAS,OAAS,GACpBG,EAAS,EAAE,CAEf,EAAG,CAACH,EAAQ,CAAC,EAEb,KAAM,CAAE,MAAOS,GAAc,MAAOrpF,EAAQ,KAAI5P,EAAA,GAC9C,SAAY,QAAM,MAAmB,EACrC,CAAC,IAAkB,CACrB,EAEM,CAAE,MAAO0vB,GAAY,MAAAh9D,EAAM,KAAIstC,EAAA,GAAS,SAAY,CACxD,GAAI,CAAC4P,IAAW,CAAC4oF,GAAS,OACxB,MAAO,CAAE,QAAA5oF,EAAQ,EAGnBipF,GAAgB,YAAuB,EACvCC,GAAS,MAAS,EAElB,MAAM7oG,GAASipG,EAAA,GACU,CACrB,MAAAh2G,EACA,YAAAm1G,GACA,SAAAG,EACF,CAAC,EACA,KAGCU,EAAA,GAAsB,CAMxB,EAEF,MAAO,CACL,QAAAtpF,GACA,OAAQ3f,GAAO,UAAU,CACvB,KAAOyoG,IAAU,CACfM,GAAeN,EACjB,EACA,MAAO5iF,GACP,SAAU,IAAM,CACd6iF,EAASK,EAAY,EACrBH,GAAgB,WAAsB,EACtCP,IAAaU,EAAY,EACzBP,EAAY,CAAC,CAAC,EACdK,GAAS,MAAS,CACpB,CACF,CAAC,CACH,CACF,EAAG,CAACN,GAAU5oF,EAAO,CAAC,KAGtB,aAAU,IACD,IAAM,CACXl9C,IAAO,QAAQ,YAAY,CAC7B,EACC,CAACA,EAAK,CAAC,EAGV,MAAMymI,MAAiB,eAAY,IAAM,CACvCzmI,IAAO,QAAQ,YAAY,EAC3BmmI,GAAgB,MAAiB,EACjCC,GAAS,MAAS,EAClBL,EAAY,CAAC,CAAC,CAChB,EAAG,CAAC/lI,EAAK,CAAC,EAGV,sBAAU,IAAM,CACd,IAAI+Q,GACJ,OAAIm1H,IAAiB,cAA2BF,IAAU,KACxDj1H,GAAY,WAAW,IAAM,CAC3BqyC,GAAQ,IAAI,MAAM,8BAA8ByiF,EAAO,IAAI,CAAC,CAC9D,EAAGA,EAAO,GAGL,IAAM,CACX,aAAa90H,EAAS,CACxB,CACF,EAAG,CAACm1H,EAAcF,EAAO5iF,GAASyiF,EAAO,CAAC,GAEtC7oE,IAAcupE,KAChBH,GAASppE,IAAcupE,EAAY,EAG9B,CACL,YAAAR,EACA,eAAAU,GACA,SAAAX,GACA,MAAAE,EACA,aAAAE,EACA,MAAAx1H,GACA,MAAA1Q,EACF,CACF,C,eCxJA,MAAM2lI,EAAc,GAEPe,EAAe,CAAC,CAC3B,iBAAAC,EACA,QAAAv3G,EACA,SAAA02G,GACA,kBAAAc,EACA,cAAAC,GACA,QAAAhB,EACF,IAAyB,CACvB,MAAM97H,KAAS,MAAW,CAAS,EAE7B,CAAC+zD,EAAcgpE,CAAe,KAAI,YAAS,CAAC,EAC5C,CAACC,EAAgBC,EAAe,KAAI,YAAS,EAAE,EAG/CC,MAAc,UAAOnB,EAAQ,EACnCmB,GAAY,QAAUnB,GAEtB,MAAMF,MAAa,eAChB//F,IAAqB,CACpBghG,MAAc,MAAchhG,EAAQ,CAAC,CACvC,EACA,CAACghG,EAAa,CAChB,EAEM,CAAE,YAAAd,EAAa,eAAAU,GAAgB,MAAAT,GAAO,aAAAE,GAAc,MAAAx1H,EAAM,EAAIg1H,EAAa,CAC/E,MAAO,KACP,YAAAC,EACA,WAAAC,GACA,QAAAC,EACF,CAAC,EAEKqB,GAAoB,CAACnyH,GAAwBoyH,QACjD,MAA8BR,EAAkB5xH,GAAMoyH,EAAa,EAE/DC,GAA0B/4H,IAAiB,CAC/Cg5H,GAAuBh5H,EAAI,EAC3B64H,GAAkB,KAAiB,eAAgB,CAAE,eAAgB74H,EAAK,CAAC,CAC7E,EAEMi5H,GAAmB,IAAM,CAC7Bb,GAAe,EACfT,IAASJ,GAAWI,EAAK,CAC3B,EAEM/jF,GAAU,IAAM,CACpB2kF,EAAkBx3G,EAAQ0uC,EAAe,CAAC,CAAC,CAC7C,EAEMknE,GAAcpzH,IAAkB,CACpCk1H,EAAgBl1H,EAAK,EACrBs1H,GAAkBt1H,GAAQksD,EAAe,KAAiB,gBAAkB,KAAiB,kBAAkB,CACjH,EAEMupE,GAA0BE,IAAuB,CACrDxB,EAAY,IAAM,CAAC,GAAGkB,GAAY,QAAS,MAAG,MAAmB73G,EAAQ0uC,EAAe,CAAC,EAAGypE,EAAU,CAAC,CAAC,EAEpGA,MAAc,MAChBL,GAAkB,KAAiB,cAAe,CAAE,kBAAmBK,EAAW,CAAC,CAEvF,EAEMC,GAAgCz3H,IACpCA,GAAE,MAAQ,SAAWq3H,GAAuBL,CAAc,EAEtDU,GAA0B13H,IAAyCi3H,GAAgBj3H,GAAE,cAAc,KAAK,EAExG23H,GAA8B,IAAMN,GAAuBL,CAAc,EAEzEY,GAAc,IAAMT,GAAkB,KAAiB,UAAU,EAEjEU,GAAqB1B,KAAiBV,EAAa,WACnDnsB,GAAY3oG,IAAS,CAACk3H,GAE5B,SACE,QAAC,OAAI,UAAW79H,EAAO,UACpB,UAAAsvG,OACC,OAAC7sE,EAAA,EAAK,CAAC,MAAM,GACX,mBAACmJ,EAAA,EAAK,CAAC,UAAU,SACf,mBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,2EAEjD,EACF,EACF,EACF,KAGF,OAACuvF,EAAyB,CAAC,QAAA91G,EAAkB,MAAO0uC,EAAc,WAAAknE,EAAA,CAAwB,KAC1F,OAAC,OAAI,UAAWj7H,EAAO,cACrB,mBAACq7H,EAAa,CAAC,kBAAmBiC,GAAwB,aAAcO,EAAA,CAAoB,EAC9F,KAEA,OAACpjF,EAAA,GACC,eAAa,KAAE,8DAA+D,4BAA4B,EAC1G,UACE,OAACx1C,EAAA,IACC,KAAK,QACL,QAAQ,YACR,KAAK,OACL,gBAAY,KAAE,0DAA2D,sBAAsB,EAC/F,QAAS04H,GACT,SAAU,CAACX,EAEX,mBAAC,KAAK,CAAC,QAAQ,8BAA8B,gBAAI,EACnD,EAEF,MAAOA,EACP,SAAUU,GACV,UAAWD,EAAA,CACb,KAEA,OAAC,OAAI,UAAWz9H,EAAO,gBACrB,mBAAC4rC,EAAA,EAAK,CAAC,eAAe,WAAW,UAAU,MACxC,SAAAiyF,MACC,OAAC54H,EAAA,GAAM,CAAC,KAAK,gBAAgB,QAASs4H,GACnC,SAAAO,CAAoB,CACvB,KAEA,OAAC74H,EAAA,GAAM,CAAC,KAAK,QAAQ,QAASizC,GAC5B,mBAAC,KAAK,CAAC,QAAQ,0BAA0B,iBAAK,EAChD,EAEJ,EACF,KAEA,QAAC,OAAI,UAAWl4C,EAAO,OACrB,oBAACb,EAAA,EAAI,CAAC,KAAK,qBAAqB,UAAWa,EAAO,UAAW,KAC7D,OAAC8rC,EAAA,EAAI,CAAC,QAAQ,YAAY,MAAM,YAC9B,oBAAC,KAAK,CAAC,QAAQ,sCAAsC,mDACZ,OACvC,OAACqR,EAAA,GACC,QAAQ,YACR,OAAQ,GACR,KAAK,uFACL,SAAQ,GACR,QAASygF,GACV,8BAED,GACF,EACF,GACF,GACF,CAEJ,EAEM,EAAax/H,IAA0B,CAC3C,aAAW,OAAI,CACb,QAAS,OACT,cAAe,SACf,MAAO,IACP,UAAW,IAEX,cAAe,EACjB,CAAC,EACD,mBAAiB,OAAI,CACnB,WAAYA,EAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,WAAS,OAAI,CACX,QAAS,OACT,cAAe,MACf,SAAU,MACZ,CAAC,EACD,UAAQ,OAAI,CAEV,SAAU,WACV,OAAQ,EACR,KAAM,EACN,MAAO,OACP,QAAS,OACT,cAAe,MACf,OAAQ,EACR,QAASA,EAAM,QAAQ,CAAC,EACxB,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAY,SACZ,IAAKA,EAAM,QAAQ,CAAC,EACpB,UAAW,aAAaA,EAAM,OAAO,OAAO,IAAI,GAChD,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,aAAW,OAAI,CACb,MAAOA,EAAM,OAAO,KAAK,IAC3B,CAAC,EACD,iBAAe,OAAI,CACjB,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,QAAS,cACX,CAAC,CACH,GC1Ka0/H,EAAuB,kBAEvBC,EAAc,CAAC,CAC1B,KAAAz5H,EAAO,gBACP,eAAA05H,EAAiB,GACjB,QAASC,GACT,MAAAx3G,EAAQ,KACR,SAAAs1G,GACA,WAAAmC,GACA,YAAAtC,EAAc,EACd,iBAAAgB,EACA,SAAAz5H,EACA,QAAAE,EACA,gBAAA86H,GACA,QAAArC,GAAUJ,CACZ,IAAwB,CACtB,MAAM17H,MAAS,MAAW,CAAS,EAE7B,CAACqlB,EAAS+4G,EAAU,KAAI,YAAmB,CAAC,CAAC,EAC7CC,MAAsB,eACzBC,IAAyB,CACxBF,GAAYG,IACS,CAACD,GAAc,GAAGC,EAAC,CAEvC,EACDJ,KAAkB,CAACG,GAAc,GAAGj5G,CAAO,CAAC,CAC9C,EACA,CAAC84G,GAAiB94G,CAAO,CAC3B,EAEMw2G,MAAa,eAChBI,IAAkB,CACjB,MAAMuC,MAAiB,MAAcvC,EAAK,EAC1CiC,GAAWM,EAAc,EACzBH,GAAoBG,EAAc,CACpC,EACA,CAACN,GAAYG,EAAmB,CAClC,EAEM,CAAE,YAAArC,GAAa,eAAAU,GAAgB,MAAAzmI,GAAO,MAAA0Q,GAAO,aAAAw1H,EAAa,EAAIR,EAAa,CAC/E,MAAAl1G,EACA,YAAAm1G,EACA,WAAAC,GACA,QAAAC,EACF,CAAC,EAEK,CAACtgF,GAAaijF,EAAc,KAAI,YAAS,EAAK,EAC9CC,GAAar5G,EAAQ,OAAS,EAC9Bs5G,GAAsB,CAACD,GAEvBnD,GAAeY,KAAiBV,EAAa,WAC7CmD,GAAmBz7H,GAAalN,IAAS,CAACA,GAAM,SAAW,CAAC0Q,GAC5Dw2H,MAAoB,eACvBnyH,OAA2B,MAA8B4xH,EAAkB5xH,EAAI,EAChF,CAAC4xH,CAAgB,CACnB,EAEMh6H,GAAc+D,IAAStD,EAAU,OAAY,GAC7C/B,GAAiBqF,GACnB,sHACAtD,GAAW,GAET2J,GAAWhH,IAA2C,CACtDm2H,KAAiBV,EAAa,WAChCiB,GAAe,EAEVgC,GAIHD,GAAe,EAAI,GAHnBR,KAAcj4H,EAAC,EACfg2H,GAAY6C,GAAY,CAAC,GAM7B,MAAMC,GAAan4H,GACf,KAAiB,mBACjB40H,GACE,KAAiB,qBACjBoD,GACE,KAAiB,mBACjB,KAAiB,cACzBxB,GAAkB2B,EAAU,CAC9B,EAGA,GAAI,CAAC7oI,IAAO,QACV,OAAO,KAGT,MAAM4mI,GAAqBW,IAAuB,CAChDL,GAAkB,KAAiB,eAAe,EAClDe,GAAWV,EAAU,EACrBiB,GAAe,EAAK,CACtB,EAEMM,GAAU,IAAM,CACpB,GAAI,CAAAxD,GAIJ,OAAI50H,IAAU1Q,IAAS,CAACA,GAAM,QACrB,qBAGF,IACT,EAEM+oI,GAAU,IAAM,CACpB,IAAIC,GAAa36H,EAEjB,OAAIqC,KACFs4H,GAAa,SAGX1D,KACF0D,GAAanB,GAGXY,KACFO,GAAa,WAGRA,EACT,EAEMC,MACJ,OAACj6H,EAAA,IACC,KAAM85H,GAAQ,EACd,QAAA/xH,GACA,KAAK,OACL,KAAK,KACL,SAAU4xH,GACV,QAASj4H,GAAQ,cAAgB,UAEhC,SAAAq4H,GAAQ,EACX,EAGIH,GAAc,IAAO,OAAO9C,IAAa,WAAaA,GAAS,EAAIA,GAEnEoD,GAA4B,IAAM,CACtC,GAAIT,GAAY,CACd,MAAMhhI,MAAQ,OAACouC,EAAA,EAAI,CAAC,QAAQ,IAAK,SAAAkyF,CAAA,CAAe,EAEhD,SACE,OAACoB,EAAA,GACC,MAAA1hI,GACA,WACE,OAACi/H,EAAA,CACC,QAAAt3G,EACA,SAAUw5G,GAAY,EACtB,kBAAAhC,GACA,cAAewB,GACf,iBAAAzB,EACA,QAAAd,EAAA,CACF,EAEF,UAAU,aACV,WAAY,GACZ,KAAMtgF,GACN,QAAS,IAAMijF,GAAe,EAAK,EACnC,OAAQ,IAAMA,GAAe,EAAI,EAEhC,SAAAS,EAAA,CACH,CAEJ,CAEA,OAAOA,EACT,EAEA,SACE,QAACtzF,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,GAAK,WAAW,SACzC,UAAA2vF,OAAgB,OAACxrB,EAAA,EAAO,CAAC,KAAK,KAAK,UAAW/vG,GAAO,QAAS,EAC9D2+H,MACC,OAAC97H,EAAA,EAAO,CAAC,KAAMD,GAAa,YAAW,GAAC,QAAStB,GAC9C,SAAA49H,EAAA,CACH,EAEAC,GAA0B,GAE9B,CAEJ,EAEM,EAAa/gI,IAA0B,CAC3C,WAAS,OAAI,CACX,MAAOA,EAAM,OAAO,KAAK,IAC3B,CAAC,CACH,E,oHC3MO,SAASihI,EAA+D,CAC7E,KAAAhzH,EACA,GAAAiX,EACA,QAAA7pB,EACA,MAAAxD,EACA,SAAAJ,EACA,UAAA4K,EACA,SAAA0C,EACA,gBAAAm8H,EAAkB,CAAC,CACrB,EAA4B,CAC1B,MAAMt/H,KAAS,MAAWuD,CAAS,EAC7Bg8H,EAAaj8G,MAAM,YAAS,kBAAkB,EAEpD,SACE,OAAC,OAAI,GAAAA,EAAQ,aAAW,MAAGtjB,EAAO,UAAWS,CAAS,EAAG,KAAK,aAC3D,SAAAhH,EAAQ,IAAI,CAACmG,EAAQiI,IAAU,CAC9B,MAAMm2D,EAAS,GAAGuhE,CAAU,IAAI13H,CAAK,GAE/B23H,EAAYvpI,GAASA,IAAU2J,EAAO,MACtCc,EAAayC,GAAYm8H,EAAgB,KAAMG,GAAgBA,IAAgB7/H,EAAO,KAAK,EAE3FsH,EAAe,IAAMrR,GAAY+J,EAAO,OAAS/J,EAAS+J,EAAO,KAAK,EAE5E,SACE,OAAC,KAEC,GAAIo+D,EACJ,KAAA3xD,EACA,MAAOzM,EAAO,MACd,YAAaA,EAAO,YACpB,QAAS4/H,EACT,MAAO5/H,EAAO,MACd,SAAUc,EACV,SAAUwG,CAAA,EARLW,CASP,CAEJ,CAAC,EACH,CAEJ,CAEA,MAAMtE,EAAanF,IAA0B,CAC3C,aAAW,OAAI,CACb,QAAS,OACT,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,CACH,E,+HCoBO,MAAMshI,UAGH,IAA+B,CA+BvC,YAAYpmI,EAAmD,CAC7D,MAAM,EA9BR,KAAQ,qBAA+D,CACrE,SAAU,CAAC,EACX,UAAW,CAAC,CACd,EAGA,KAAQ,oBAAsB,IACrB,IAAI,IAYb,iBAAsC,CACpC,YAAa,GACb,YAAa,EACf,EASE,KAAK,MAAQA,CACf,CAEA,IAAI,UAAW,CACb,IAAIw+B,EAAS,KAAK,WAAa,CAAC,EAEhC,GAAI,CAAC,KAAK,WAAa,KAAK,gBAAiB,CAC3C,MAAMtd,EAAU,IAAI,KACpB,KAAK,gBAAgBA,EAAS,CAAE,KAAM,CAAC,CAAE,CAAC,EAC1C,UAAWxP,KAAQwP,EAAQ,SAAS,EAC9BxP,EAAK,cAAgB,SACvB,OAAI8sB,EAAQ9sB,EAAK,KAAMA,EAAK,YAAY,CAG9C,CAEA,OAAO8sB,CACT,CAEA,IAAI,qBAA8D,CAChE,MAAM6nG,EAAiB,KAAK,qBAAqB,SACjDA,EAAe,OAAS,CAAC,EAEzB,UAAW//H,KAAU,KAAK,oBAAoB,KAAK,EAC7CA,EAAO,eAAiB,WAI5B,OAAI+/H,EAAgB//H,EAAO,GAAIA,EAAO,YAAY,EAGpD,MAAO,CACL,SAAU,CACR,GAAG+/H,CACL,EACA,UAAW,KAAK,qBAAqB,SACvC,CACF,CAKA,YAAYnvE,EAAoB,CAC9B,cAAmB,cAAe,cAAe,iBAAiB,EAClE,KAAK,UAAYA,EACV,IACT,CAEA,IAAI,qBAAsB,CACxB,OAAK,KAAK,uBACR,KAAK,qBAAuB,KAAK,oBAAoB,GAGhD,KAAK,oBACd,CAKA,UAAUvsC,EAAoD,CAC5D,cAAmB,cAAe,YAAa,iBAAiB,EAChE,KAAK,OAASA,EACP,IACT,CAEA,cAAe,CACb,YAAK,UAAY,GACV,IACT,CAYA,oBAAoB27G,EAA0CC,EAAgD,CAC5G,YAAK,iBAAmBD,EACxB,KAAK,cAAgBC,EACd,IACT,CAUA,sBAAsBD,EAAkC,CACtD,YAAK,mBAAqBA,EACnB,IACT,CAgCA,gBAAgBplH,EAAyC,CAEvD,YAAK,gBAAkBA,EAChB,IACT,CAOA,yBAA0D,CACxD,OAAO,KAAK,kBAAoB,IAAM,CAAC,EACzC,CAwBA,eAAeslH,EAA0C,CACvD,YAAK,YAAc,CAAE,GAAG,KAAK,YAAa,GAAGA,CAAQ,EAC9C,IACT,CA8DA,eAAenjI,EAAyD,CAAC,EAAG,CAE1E,YAAK,oBAAsB,OAAM,KAA0BA,EAAQ,KAAK,KAAK,IAAI,EAE1E,IACT,CAMA,uBAAuBojI,EAA4C,CACjE,YAAK,oBAAsBA,EACpB,IACT,CAMA,wBAAuE,CACrE,OAAO,KAAK,mBACd,CAEA,YAAYx9F,EAAkB,CAC5B,OAAO,KAAK,KAAK,KAAOA,CAC1B,CACF,C,seC1WA,MAAM80F,EAAO,CAAC,SAAU,UAAW,YAAa,WAAY,SAAU,WAAY,QAAQ,EAAE,IAAI,CAAC77H,GAAGwmB,MAC3F,CACL,MAAOxmB,GACP,MAAOwmB,GAAM,CACf,EACD,EAEYg+G,EAAmB,CAAC,CAAE,MAAA/pI,GAAO,SAAAJ,EAAS,IAAa,CAC9D,MAAMmK,MAAS,MAAWuD,EAAS,EAE7BiL,GAAY,KAAK,IAAI,EACrByxH,MAAe,MAAgBhqI,GAAM,UAAY,MAAOuY,EAAS,EACjE0xH,MAAsB,MAAgB,EAAE,WAAW,GAAG,YAAY,IAAMjqI,GAAM,SAE9E,CAACw1B,GAAWwrB,EAAU,KAAI,YAAS,EAAK,EAExCkpF,GAAyB,IAAM,CACnClpF,GAAW,CAACxrB,EAAS,CACvB,EAEM20G,GAAWn5H,IAAiD,CAChE,GAAI,CAACA,GACH,OAGF,MAAM8oE,GAAO,IAAO,EAEpB,GAAI9oE,GAAM,CACR,MAAMogB,GAAQpgB,GAAK,MAAM,GAAG,EAC5B8oE,GAAK,IAAI,OAAQ,SAAS1oD,GAAM,CAAC,EAAG,EAAE,CAAC,EACvC0oD,GAAK,IAAI,SAAU,SAAS1oD,GAAM,CAAC,EAAG,EAAE,CAAC,CAC3C,CAEA,OAAO0oD,EACT,EAEMswD,GAAmB,IAAM,CAC7B,IAAI7/H,GAAc,WAClB,OAAIvK,GAAM,eAAiB,CAACA,GAAM,cAChCuK,GAAc62H,EAAKphI,GAAM,cAAgB,CAAC,EAAE,OAGvCuK,EACT,EAEM8/H,GAAuB,IAAM,CACjC,MAAM3lF,MACJ,oBACE,oBAAClD,EAAA,EAAa,CAAC,MAAOwoF,IAAc,KAAM,KAC1C,OAACtoF,EAAA,EAAc,CAAC,SAAU1hD,GAAM,SAAU,UAAAuY,EAAA,CAAsB,GAClE,EAGF,OAAI0xH,MACK,oBAAE,iCAAqBvlF,GAAS,KAAC,EAGnCA,EACT,EAEM4lF,GAAe,CAAC/kI,GAAuB1C,KAAkB,CAC7D,MAAMmO,GAAOzL,GAAIA,GAAE,OAAO,OAAO,EAAI,OAEnC3F,GADEiD,KAAU,OACH,CAAE,GAAG7C,GAAO,KAAMgR,EAAK,EAEvB,CAAE,GAAGhR,GAAO,GAAIgR,EAAK,CAFG,CAIrC,EAEMu5H,GAAoBhlI,IAA0B,CAClD3F,GAAS,CAAE,GAAGI,GAAO,SAAUuF,EAAE,CAAC,CACpC,EAEMilI,GAAgBjlI,IAAsB,CAC1C3F,GAAS,CAAE,GAAGI,GAAO,KAAMuF,EAAE,CAAC,CAChC,EAEMklI,GAAoBllI,IAAc,CACtC3F,GAAS,CAAE,GAAGI,GAAO,SAAUuF,EAAE,CAAC,CACpC,EAEMmlI,GAAoBnlI,IAAc,CACtC3F,GAAS,CAAE,GAAGI,GAAO,SAAUuF,EAAE,CAAC,CACpC,EAEMolI,GAAyBplI,IAA+B,CAC5D,MAAMqlI,GAAgBrlI,GAAIA,GAAE,MAAQ,OAC9BslI,GAActlI,GAAIvF,GAAM,YAAc,OAC5CJ,GAAS,CAAE,GAAGI,GAAO,cAAA4qI,GAAe,YAAAC,EAAY,CAAC,CACnD,EAEMC,GAAuBvlI,IAA+B,CAC1D3F,GAAS,CAAE,GAAGI,GAAO,YAAauF,GAAIA,GAAE,MAAQ,MAAU,CAAC,CAC7D,EAEMwlI,GAAiB,IACjBv1G,MAEA,OAACssB,EAAA,GACC,MAAO9hD,GAAM,SACb,gBAAiB,GACjB,SAAWuF,IAAMglI,GAAiBhlI,EAAC,EACnC,OAAQ,IAAMy7C,GAAW,EAAK,EAC9B,gBAAiB,GACjB,MAAO,IACP,UAAS,GACX,KAKF,QAAC,OAAI,UAAWj3C,GAAO,kBACrB,oBAAC,OAAI,UAAWA,GAAO,SAAW,SAAAsgI,GAAqB,EAAE,KACzD,OAACr7H,EAAA,GAAM,CAAC,QAAQ,YAAY,QAASk7H,GAAwB,KAAK,KAAK,2BAEvE,GACF,EAIEj5G,GAAOk5G,GAAQnqI,GAAM,IAAI,EACzBgxB,GAAKm5G,GAAQnqI,GAAM,EAAE,EAE3B,SACE,QAAC01G,EAAA,EAAQ,CAAC,UAAW3rG,GAAO,QAC1B,oBAACsH,EAAA,GACC,SAAO,KAAE,iDAAkD,UAAU,EACrE,eACE,oBACG,kBAAE,2DAA4D,MAAM,KACrE,OAAC,KAAE,KAAK,uBAAuB,OAAO,SAAS,IAAI,aAChD,iBAAE,4DAA6D,aAAa,EAC/E,KACC,KACC,4DACA,+CACF,GACF,EAGF,mBAAC3D,EAAA,GACC,GAAG,mCACH,MAAO1N,GAAM,OAAS,OACtB,SAAW+P,IAAqCy6H,GAAaz6H,GAAE,cAAc,QAAU,OAAS,IAAI,EACtG,EACF,EAEC/P,GAAM,MAAQ,SACb,oBACE,oBAACqR,EAAA,EAAK,CAAC,MAAM,OACX,oBAACskC,EAAA,EAAK,CAAC,IAAK,GACV,oBAACxrC,EAAA,IACC,QAASi3H,EACT,YAAW,GACX,YAAY,WACZ,MAAOphI,GAAM,eAAiB,KAC9B,SAAWuF,IAAMolI,GAAsBplI,EAAC,EACxC,MAAO,GACT,KACA,OAAC+9F,EAAA,GACC,SAAO,MAAWryE,EAAI,EAAIA,GAAO,OACjC,SAAW1rB,IAAM+kI,GAAa/kI,OAAI,MAAiBA,EAAC,EAAO,MAAM,EACjE,WAAY,GACZ,YAAY,QACZ,KAAK,KACP,GACF,EACF,KACA,OAAC8L,EAAA,EAAK,CAAC,MAAM,KACX,oBAACskC,EAAA,EAAK,CAAC,IAAK,GACR,WAAA31C,GAAM,eAAiBA,GAAM,iBAC7B,OAACmK,EAAA,IACC,QAASi3H,EACT,YAAW,GACX,YAAagJ,GAAiB,EAC9B,MAAOpqI,GAAM,aAAe,KAC5B,SAAWuF,IAAMulI,GAAoBvlI,EAAC,EACtC,MAAO,GACT,KAEF,OAAC+9F,EAAA,GACC,SAAO,MAAWtyE,EAAE,EAAIA,GAAK,OAC7B,SAAWzrB,IAAM+kI,GAAa/kI,OAAI,MAAiBA,EAAC,EAAO,IAAI,EAC/D,WAAY,GACZ,YAAY,QACZ,KAAK,KACP,GACF,EACF,GACF,EAEDvF,GAAM,OAAS,WACd,oBACE,oBAACqR,EAAA,EAAK,CAAC,MAAM,kBACX,mBAACmzC,EAAA,GACC,SAAWz0C,IAAqC06H,GAAiB16H,GAAE,OAAO,KAAK,EAC/E,MAAO/P,GAAM,SACb,YAAY,cACZ,MAAO,GACT,EACF,KACA,OAACqR,EAAA,EAAK,CAAC,MAAM,WACX,mBAACmzC,EAAA,GACC,SAAWz0C,IAAqC26H,GAAiB36H,GAAE,OAAO,KAAK,EAC/E,MAAO/P,GAAM,SACb,YAAY,KACZ,MAAO,GACT,EACF,GACF,KAEF,OAACqR,EAAA,EAAK,CAAC,MAAM,WAAY,SAAA05H,GAAe,EAAE,GAC5C,CAEJ,EAEMz9H,GAAanF,KACV,CACL,WAAS,OAAI,CACX,SAAUA,GAAM,QAAQ,EAAE,EAC1B,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,qBAAmB,OAAI,CACrB,QAAS,MACT,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,WAAY,SACZ,SAAU,MACZ,CAAC,EACD,YAAU,OAAI,CACZ,YAAa,KACf,CAAC,CACH,GCrPI6iI,EAAsB,+EAEtBC,MACJ,OAAC,OAAI,mGAAuF,EAGxFC,GAAiE,CACrE,CACE,MAAO,YACP,MAAO,KAAsB,UAC7B,YAAa,iGACf,EACA,CACE,MAAO,OACP,MAAO,KAAsB,KAC7B,YAAa,kEACf,CACF,EAEMC,EAAuD,CAC3D,CACE,MAAO,uBACP,MAAO,KAAiB,YACxB,YAAa,+CACf,EACA,CACE,MAAO,eACP,MAAO,KAAiB,YACxB,YAAa,mCACf,CACF,EAEMC,EAAe,CAAC,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAM,GAAI,EAAE,IAAKp0H,KAAW,CAC5E,MAAO,OAAOA,EAAK,EACnB,MAAOA,EACT,EAAE,EAOa,SAASq0H,EAAsB,CAAE,MAAAjzG,GAAO,SAAAx4B,EAAS,EAAU,CACxE,MAAMoiC,GAAkB5J,GAClB,CAAE,MAAAphB,GAAO,SAAAs0H,GAAU,KAAAlnG,GAAM,KAAAtkC,GAAM,UAAA8nH,EAAU,EAAI5lF,GACnD,IAAIupG,GAAmB3jB,IAAa,KAAiB,YACrD,MAAM4jB,MAAkB,WAAQ,OAAM,MAAgB,EAAE,WAAW,YAAY,EAAG,CAAC,CAAC,EAC9EzhI,MAAS,MAAW,CAAS,EAE7B0hI,GAAoBn6H,IACxB1R,GAAS,CACP,GAAGoiC,GACH,KAAM1wB,GAAS,KACjB,CAAC,EAEGo6H,GAAoBp6H,IACxB1R,GAAS,CACP,GAAGoiC,GACH,MAAO1wB,GAAS,KAClB,CAAC,EAEGq6H,GAAoBr6H,IACxB1R,GAAS,CACP,GAAGoiC,GACH,SAAU1wB,GAAS,OAAO,OAC5B,CAAC,EAEGs6H,GAAgBxnG,IACpBxkC,GAAS,CACP,GAAGoiC,GACH,KAAAoC,EACF,CAAC,EAEGynG,GAAqBv6H,IAAgD,CACzE,MAAM8iD,GAAmC,CAAE,GAAGpyB,GAAiB,UAAW1wB,GAAS,KAAO,EACtF8iD,GAAS,YAAc,KAAiB,YACrCA,GAAS,aACZA,GAAS,WAAa,CACpB,SAAUo3E,EACZ,GAGF,OAAOp3E,GAAS,WAGlBx0D,GAASw0D,EAAQ,CACnB,EACM03E,GAAsBC,IAAkC,CAC5DnsI,GAAS,CACP,GAAGoiC,GACH,WAAA+pG,EACF,CAAC,CACH,EAEA,SACE,QAACr2B,EAAA,EAAQ,CAAC,UAAW3rG,GAAO,UAC1B,oBAACsH,EAAA,EAAK,CAAC,MAAM,aACX,mBAAClH,EAAA,IACC,QAAQ,kCACR,QAASghI,EACT,MAAOI,GACP,SAAUM,EAAA,CACZ,EACF,EACCN,KAAqB,KAAiB,gBACrC,oBACE,oBAACl6H,EAAA,EAAK,CAAC,MAAM,YACX,mBAAClH,EAAA,IACC,QAAQ,iCACR,QAAS+gI,GACT,MAAOprI,GACP,SAAU2rI,EAAA,CACZ,EACF,KACA,OAACp6H,EAAA,EAAK,CAAC,MAAM,YACX,mBAAClH,EAAA,IACC,QAAQ,6BACR,MAAO,GACP,QAASihI,EACT,MAAOp0H,GACP,SAAU00H,EAAA,CACZ,EACF,EACC5rI,KAAS,KAAsB,SAC9B,oBACE,oBAACuR,EAAA,EAAK,CAAC,MAAM,YAAY,YAAa25H,EACpC,mBAACt9H,EAAA,EAAM,CAAC,GAAG,iCAAiC,MAAO49H,GAAU,SAAUK,EAAA,CAAkB,EAC3F,KACA,OAACt6H,EAAA,EAAK,CAAC,MAAM,OAAO,YAAa45H,GAC/B,mBAACe,EAAA,GACC,iBAAgB,GAChB,QAAQ,4BACR,SAAUJ,GACV,cAAY,KAAiB,EAAE,KAC/B,KAAMxnG,IAAQ,CAAC,EACjB,EACF,GACF,GAEJ,EAEDmnG,KAAqB,KAAiB,aAAevpG,GAAgB,eACpE,OAAC+nG,EAAgB,CAAC,MAAO/nG,GAAgB,WAAY,SAAU8pG,EAAA,CAAoB,GAEvF,CAEJ,CAEA,MAAM,EAAa3jI,KACV,CACL,aAAW,OAAI,CACb,SAAUA,GAAM,QAAQ,EAAE,EAC1B,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,G,wCCrJF,MAAM8jI,EAAY,GAAK,KAEvB,SAASC,GACPC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA,CACA,IAAIpL,GAAOkL,GAAQH,GAGf/K,GAAO,IACTA,IAAQ,GAGV,IAAIqL,GAAWL,GAAW,KAAOC,GAAU,GACvCK,GAASH,GAAS,KAAOC,GAAQ,GAEjCG,GAAU,EAGd,OAAIvL,KAAS,GAAKsL,GAASD,GACzBE,GAAU,EAAIV,GAAaQ,GAAWC,IAGtCC,GADevL,GAAO6K,EACDQ,GAAWC,GAG3BC,EACT,CAEO,SAASC,GACdT,GACAl7G,GACAq7G,GACAt7G,GACA,CAEA,GAAIm7G,IAAW,MAAQl7G,IAAQ,KAC7B,OAGF,MAAM47G,GAAU,CACd,SAAU,GACV,SAAU,CACZ,EAEMC,GAAaX,IAAW,MAAQG,IAAS,KAEzCS,GAAWZ,IAAW,MAAQl7G,IAAQ,MAAQD,IAAM,KAE1DC,KAAS,QAGT,GAAI,CAACm7G,GAAUC,EAAO,EAAIp7G,GAAK,MAAM,GAAG,EAAE,IAAK1rB,IAAM,CAACA,EAAC,EAEvDsnI,GAAQ,SAAW,GAAGR,EAAO,IAAID,EAAQ,QAAQD,IAAW,GAAG,GAG/DA,KAAY,EACZG,KAAUH,GAGNY,KACF/7G,GAAK,QACLs7G,IAASA,KAAU,EAAI,GAAK,GAG9Bt7G,KAAOC,GAEP,GAAI,CAACs7G,GAAQC,EAAK,EAAIx7G,GAAG,MAAM,GAAG,EAAE,IAAKzrB,IAAM,CAACA,EAAC,EAE7CknI,GAAWL,GAAW,KAAOC,GAAU,GACvCK,GAASH,GAAS,KAAOC,GAAQ,GAIrC,OAAIM,IAAcJ,GAASD,KACzBH,IAASA,KAAU,EAAI,GAAK,GAG9BO,GAAQ,SAAWX,GAAgBC,GAASC,GAAUC,GAASC,GAAOC,GAAQC,EAAK,EAE5EK,EACT,CAEO,SAASG,GAAqB72E,GAAuB82E,GAAwC,CAClG,MAAM7xH,GAA8B,CAAC,EAErC,IAAI8xH,GAAW,GACXC,GAAa,EAEb,CAAE,cAAAvC,GAAe,KAAA35G,GAAM,YAAA45G,GAAa,GAAA75G,GAAI,SAAA44F,GAAW,EAAG,EAAIzzD,GAE9D,GAAIA,GAAI,OAAS,OACf+2E,GAAW/2E,GAAI,UAAY,GAC3Bg3E,MAAa,UAAuB,OAAcvjB,EAAQ,CAAC,MACtD,CAEL34F,GAAOA,KAAS,GAAK,OAAYA,GACjCD,GAAKA,KAAO,GAAK,OAAYA,GAE7B,MAAMo8G,GAAOR,GAAchC,GAAe35G,GAAM45G,GAAa75G,EAAE,EAE3Do8G,IAAQ,OACVF,GAAWE,GAAK,SAChBD,GAAaC,GAAK,SAAW,IAEjC,CAEA,GAAIF,KAAa,GACf,MAAO,CAAC,EAGV,GAAI,CACF,IAAIG,GAAKl3E,GAAI,WAAa,UAAY,OAAYA,GAAI,WAAa,MAAQ,UAAYA,GAAI,SAEvFyiD,GAAM,IAAI,MAAKs0B,GAAU,CAAE,SAAUG,EAAG,CAAC,EAGzCC,GAAwB,IAAI,KAAKL,GAAO,KAAK,QAAQ,EAAIE,EAAU,EAEnEI,GAAON,GAAO,GAAG,QAAQ,EACzBO,GAAW50B,GAAI,QAAQ00B,EAAQ,EAEnC,KAAOE,IAAY,MAAM,CACvB,IAAIC,GAAS,CAACD,GAEd,GAAIC,GAASF,GACX,MAEAnyH,GAAO,KAAK,CACV,KAAMqyH,GACN,GAAIA,GAASN,EACf,CAAC,EACDK,GAAW50B,GAAI,QAAQ40B,EAAQ,CAEnC,CACF,OAASz9H,GAAG,CAEV,QAAQ,MAAMA,EAAC,CACjB,CAEA,OAAOqL,EACT,CCnKO,SAASsyH,GAAkBt3H,GAAc1P,GAA0B0H,GAAyC,CACjH,KAAM,CAAE,KAAA8M,GAAM,SAAA0uG,GAAU,SAAAsjB,GAAU,KAAAj8G,GAAM,cAAA25G,EAAc,EAAIlkI,GAEpDinI,GAAgBzyH,IAAQ,OAAS0vH,IAAiB,MAAQ35G,IAAQ,MAClE28G,GAAkB1yH,KAAS,QAAUgyH,IAAY,MAAQtjB,IAAY,KAE3E,GAAI+jB,IAAiBC,GAAiB,CACpC,MAAMxyH,GAAS4xH,GAAqBtmI,GAAQ0H,EAAK,EAEjD,GAAIgN,GAAO,OAAS,EAUlB,MATyB,CACvB,OAAQ,CACN,CAAE,KAAM,OAAQ,KAAM,MAAU,KAAM,OAAQA,GAAO,IAAKyJ,IAAMA,GAAE,IAAI,EAAG,OAAQ,CAAC,CAAE,EACpF,CAAE,KAAM,UAAW,KAAM,MAAU,KAAM,OAAQzJ,GAAO,IAAKyJ,IAAMA,GAAE,EAAE,EAAG,OAAQ,CAAC,CAAE,EACrF,CAAE,KAAM,OAAQ,KAAM,MAAU,OAAQ,OAAQ,MAAMzJ,GAAO,MAAM,EAAE,KAAKhF,EAAI,EAAG,OAAQ,CAAC,CAAE,CAC9F,EACA,OAAQgF,GAAO,MACjB,CAIJ,CAGF,CCQA,IAAIlJ,GAAU,IAEP,MAAM27H,WAA0BC,EAAA,EAAoC,CACzE,YAAYhoG,GAA8C,CACxD,MAAMA,EAAgB,EACtB,KAAK,YAAc,CACjB,YAAaulG,EACb,kBAAkB/yE,GAA+C,CAG/D,OAAAA,GAAK,OAASA,GAAK,QAAU,CAC3B,KAAMA,GAAK,MAAQ,KAAsB,UACzC,MAAOA,GAAK,OAAS,IACrB,KAAMA,GAAK,MAAQ,CAAC,EACpB,SAAUA,GAAK,UAAY,EAC7B,EACOA,EACT,EACA,aAAag+C,GAA6D,CACxE,IAAIvnF,GACJ,MAAI,YAASunF,GAAK,UAAU,EAAG,CAC7B,MAAM10G,MAAM,MAA2B00G,GAAK,WAAY,CAAE,oBAAqB,EAAM,CAAC,EAClF10G,KACFmtB,GAAantB,GAEjB,MACEmtB,GAAaunF,GAAK,WAIpB,KAAM,CAAE,OAAA90E,GAAQ,GAAG3yB,EAAK,EAAIynG,GAE5B,MAAO,CAAE,GAAGznG,GAAM,MAAOynG,GAAK,KAAM,UAAW,KAAiB,YAAa,WAAAvnF,EAAW,CAC1F,CACF,CACF,CAEA,iBAAyC,CACvC,MAAO,CACL,UAAW,KAAiB,UAC9B,CACF,CAEA,MAAM0mE,GAAwE,CAC5E,MAAM97E,GAAgD,CAAC,EACjDo2E,GAA0B,CAAC,EAC3Bg+C,MAAc,KAAe,EACnC,UAAWrsG,MAAU+zD,GAAQ,QAAS,CACpC,GAAI/zD,GAAO,YAAc,KAAiB,YACxC,SAAOzQ,EAAA,GACL,KAAK,eAAe,CAClB,MAAOwkE,GAAQ,MACf,SAAUA,GAAQ,MAAM,IACxB,WAAY/zD,GACZ,aAAW,MAAgB,EAAE,WAAW,CAC1C,CAAC,CACH,EAEF,GAAI,CAAAA,GAAO,KAGX,IAAIA,GAAO,YAAc,KAAiB,SAAU,CAClD/nB,GAAQ,QACNq0H,EAAA,IAAG,CAID,MAAOtsG,GAAO,UAAY,CAAC,GAAG,IAAKn8B,OAAM,MAAkBA,EAAC,CAAC,EAC7D,MAAO,KAAa,IACtB,CAAC,CACH,EACA,QACF,CACA,GAAIm8B,GAAO,YAAc,KAAiB,YAAa,CACrD,MAAMn9B,GAAQmpI,GAAkB,GAAIhsG,GAAO,WAAa+zD,GAAQ,KAAK,EACrE97E,GAAQ,QACNq0H,EAAA,IAAG,CACD,KAAMzpI,GAAQ,CAACA,EAAK,EAAI,CAAC,EACzB,MAAO,KAAa,IACtB,CAAC,CACH,EACA,QACF,CACA,GAAIm9B,GAAO,YAAc,KAAiB,iBAAkB,CAC1D,IAAIusG,GAAUF,GAAY,QAAQrsG,GAAO,QAAS+zD,GAAQ,UAAU,EACpE,KAAM,CAAE,OAAAj0D,EAAO,EAAIE,GAEbwsG,MAAO,MAAwBD,EAAO,EAC5C,GAAI,IAAC,MAA0BC,EAAI,EACjC,SAEF,MAAMC,GAAyC,CAC7C,UAAW14C,GAAQ,eAAiB,GACtC,EACI/zD,GAAO,QACTysG,GAAO,SAAWzsG,GAAO,OACzBysG,GAAO,UAAYA,GAAO,UAAa,GAC9B14C,GAAQ,UAAU,KAAO,QAClC04C,GAAO,SAAW14C,GAAQ,MAAM,GAAG,QAAQ,EAAIA,GAAQ,MAAM,KAAK,QAAQ,GAG5E97E,GAAQ,QACN,MAAkB,EAAE,cAAc,CAChC,IAAK,GAAG87E,GAAQ,SAAS,IAAIvjF,IAAS,GACtC,KAAAg8H,GACA,OAAA1sG,GACA,OAAA2sG,EACF,CAAC,CACH,CACF,MACOzsG,GAAO,YACVA,GAAO,UAAY,KAAiB,YAEtCquD,GAAQ,KAAKruD,EAAM,EAEvB,CAWA,OATIquD,GAAQ,QACVp2E,GAAQ,KACN,MAAM,MAAM,CACV,GAAG87E,GACH,QAAA1F,EACF,CAAC,CACH,EAGEp2E,GAAQ,OAENA,GAAQ,SAAW,EACdA,GAAQ,CAAC,KAEX05C,EAAA,GAAM,GAAG15C,EAAO,KAElBq0H,EAAA,IAAG,CACZ,CAEA,UAAUh+F,GAAco+F,GAAgE,CACtF,OAAO,KAAK,MAAM,CAChB,QAAS,CACP,CACE,MAAO,IACP,UAAW,KAAiB,KAC5B,KAAAp+F,EACF,CACF,EACA,cAAAo+F,EACF,CAAmC,EAAE,QACnCC,EAAA,GAAK9oI,IAAM,CACT,MAAMhB,GAAQgB,GAAE,KAAK,CAAC,GAAK,IAAI+oI,EAAA,EAC/B,OAAO,IAAIC,EAAA,EAA2BhqI,EAAK,CAC7C,CAAC,CACH,CACF,CAEA,iBAAkB,CAChB,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAC3B,CAEA,MAAM,eAAef,GAA2E,CAC9F,MAAM40B,GAAQ50B,GAAQ,WAAW,OACjC,GAAI40B,IAAO,YAAc,KAAiB,YAAa,CACrD,MAAM7zB,GAAQmpI,GAAkBlqI,GAAQ,WAAW,KAAM40B,GAAM,WAAa50B,GAAQ,KAAK,EACzF,OAAO,QAAQ,QAAQ,CAAE,KAAMe,GAAQ,CAACA,EAAK,EAAI,CAAC,CAAE,CAAC,CACvD,CAEA,MAAMmqB,GAAalrB,GAAQ,WACrBk+B,GAAShT,GAAW,OACpB+yC,GAAc,CAClB,KAAMj+D,GAAQ,MAAM,KAAK,QAAQ,EACjC,GAAIA,GAAQ,MAAM,GAAG,QAAQ,EAC7B,MAAOk+B,GAAO,MACd,KAAMA,GAAO,KACb,SAAUA,GAAO,QACnB,EAEA,GAAIA,GAAO,OAAS,KAAsB,UAAW,CAEnD,GAAI,CAACl+B,GAAQ,WAAW,IACtB,OAAO,QAAQ,QAAQ,CAAE,KAAM,CAAC,CAAE,CAAC,EAGrCi+D,GAAO,aAAej+D,GAAQ,UAAU,IAExC,OAAOi+D,GAAO,IAChB,KAAO,CAEL,GAAI,CAAC,MAAM,QAAQ//B,GAAO,IAAI,GAAKA,GAAO,KAAK,SAAW,EACxD,OAAO,QAAQ,QAAQ,CAAE,KAAM,CAAC,CAAE,CAAC,EAErC,MAAMqsG,MAAc,KAAe,EAC7B/gD,GAAY,gBACZ5oD,GAAO,CAAC,EACd,UAAW1+B,MAAK+7D,GAAO,KAAM,CAC3B,MAAM+sE,GAAiBT,GAAY,QAAQroI,GAAG,CAAC,EAAI1F,IAC7C,OAAOA,IAAU,SACZA,GAGFA,GAAM,KAAKgtF,EAAS,CAC5B,EACD,UAAWyhD,MAAMD,GAAe,MAAMxhD,EAAS,EAC7C5oD,GAAK,KAAKqqG,EAAE,CAEhB,CACAhtE,GAAO,KAAOr9B,EAChB,CAMA,MAAO,CAAE,KAAM,CAJJ,QAAM,KAAiB,EAAE,MAClCq9B,GACA,mCAAmC/yC,GAAW,IAAI,IAAIlrB,GAAQ,WAAW,GAAG,EAC9E,CACkB,CAAE,CACtB,CAEA,gBAAkD,CAChD,OAAO,QAAQ,QAAQ,CAAE,QAAS,GAAI,OAAQ,EAAG,CAAC,CACpD,CACF,CAGO,eAAekrI,IAAuB,CAC3C,OAAQ,QAAM,KAAiB,EAAE,IAAI,eAAe,CACtD,C,sFCpPO,MAAMC,EAAW,CAAC,CAAE,SAAAvlI,EAAU,KAAA0Z,EAAM,IAAAC,CAAI,IAA8C,CAC3F,MAAMvY,KAAY,WAAQ,OACjB,OAAI,CACT,SAAU,WACV,SAAU,UACV,KAAM,GAAGsY,CAAI,KACb,IAAK,GAAGC,CAAG,IACb,CAAC,EACA,CAACD,EAAMC,CAAG,CAAC,EAEd,SAAO,OAAC,OAAI,UAAAvY,EAAuB,SAAApB,CAAA,CAAS,CAC9C,C,2HCVO,SAASwlI,EAAoBrqI,EAAkBqN,EAAgB,CACpE,GAAIrN,EAAM,KACR,OAAOA,EAAM,KAGf,MAAMsqI,EAA4B,CAAC,EACnC,UAAWhsI,KAAS0B,EAAM,OACxB,GAAI1B,EAAM,OAAS,KAAU,KAK7B,IAAIgsI,EAAgB,OAAS,EAC3B,MAGFA,EAAgB,KAAKC,EAAoBjsI,EAAO0B,CAAK,CAAC,EAIxD,OAAIsqI,EAAgB,SAAW,EACtBA,EAAgB,CAAC,EAItBj9H,IAAU,QAAarN,EAAM,OAAO,OAAS,EACxCA,EAAM,OACV,OAAQuc,GAAMA,EAAE,OAAS,KAAU,IAAI,EACvC,IAAKA,GAAMguH,EAAoBhuH,EAAGvc,CAAK,CAAC,EACxC,KAAK,IAAI,EAGVA,EAAM,MACD,WAAWA,EAAM,KAAK,IAGxB,WAAWqN,CAAK,GACzB,CAEO,SAASm9H,EAAuB1qI,EAAqB,CAC1DA,EAAO,QAASE,GAAU,CACxBA,EAAM,OAAO,QAAS1B,GAAU,CAC9BisI,EAAoBjsI,EAAO0B,EAAOF,CAAM,CAC1C,CAAC,CACH,CAAC,CACH,CAOO,SAAS2qI,EAAsB3qI,EAAqB2tC,EAAgC,CACzF3tC,EAAO,QAASE,GAAU,CACxBA,EAAM,OAAO,QAAS1B,GAAU,CAC9B,MAAMosI,EAAW,CACf,OAAQ,GACR,QAAS,GACT,IAAK,GACL,GAAGj9F,EAAY,SAAS,QAAQ,QAClC,EAGMk9F,EAAgBrsI,EAAM,OAAO,QAAQ,SAE3CmvC,EAAY,UAAU,QAAS/xC,GAAM,CACnC,GAAI,gBAAiBA,EACnB,OAKF,MAFU,MAAgBA,EAAE,OAAO,EAE7B4C,EAAO0B,EAAOF,CAAM,EACxB,UAAWs+B,KAAK1iC,EAAE,WACZ0iC,EAAE,KAAO,mBACX,OAAO,OAAOssG,EAAUtsG,EAAE,KAAK,CAIvC,CAAC,EAED9/B,EAAM,MAAQ,CACZ,GAAGA,EAAM,MACT,SAAU,CACR,GAAGqsI,CACL,CACF,EAGArsI,EAAM,OAAO,OAAO,SAAWosI,CACjC,CAAC,CACH,CAAC,CACH,CAEO,SAASH,EAAoBjsI,EAAc0B,EAAmB2f,EAAiC,CACpG,MAAMirH,EAAgBtsI,EAAM,OAAO,YAC7BusI,EAAiB,GAAQlrH,GAAaA,EAAU,OAAS,GAE/D,GAAIirH,GAAiBC,IAAmBvsI,EAAM,OAAO,eACnD,OAAOssI,EAGT,MAAM12H,EAAc42H,EAA0BxsI,EAAO0B,EAAO2f,CAAS,EACrE,OAAArhB,EAAM,MAAQA,EAAM,OAAS,CAAC,EAC9BA,EAAM,MAAM,YAAc4V,EAC1B5V,EAAM,MAAM,eAAiBusI,EAEtB32H,CACT,CAKO,SAAS42H,EAA0BxsI,EAAc0B,EAAmB2f,EAAiC,CAC1G,MAAMorH,EAAiBzsI,EAAM,QAAQ,aAAeA,EAAM,QAAQ,YAAY,OACxE0sI,EAAqB,EAAQhrI,GAAO,MAAM,aAAa,iBAC7D,IAAIkU,EAAc62H,EAAiBzsI,EAAM,OAAQ,YAAeA,EAAM,KAEtE,GAAIysI,EACF,OAAOC,EAAqB,GAAG92H,CAAW,gBAAkBA,EAG9D,GAAIlU,GAAS1B,EAAM,QAAQ,kBACzB,OAAO0sI,EAAqB,GAAG1sI,EAAM,OAAO,iBAAiB,gBAAkBA,EAAM,OAAO,kBAM9F,GAAIA,EAAM,OAAS,KAAU,MAAQ,CAACA,EAAM,OAC1C,OAAO4V,GAAe,KAGxB,IAAI25C,EAAkB,CAAC,EACnBo9E,EAAmB,GAEvB,GAAItrH,GAAaA,EAAU,OAAS,GAClC,QAASpd,EAAI,EAAGA,EAAIod,EAAU,OAAQpd,IAEpC,GADcod,EAAUpd,CAAC,EACf,OAASod,EAAUpd,EAAI,CAAC,EAAE,KAAM,CACxC0oI,EAAmB,GACnB,KACF,EAIJ,IAAIC,EAAiB,GACjBC,EAAc,GAWlB,GATIF,GAAoBjrI,GAAO,OAC7B6tD,EAAM,KAAK7tD,EAAM,IAAI,EACrBkrI,EAAiB,IAGf5sI,EAAM,MAAQA,EAAM,OAAS,MAC/BuvD,EAAM,KAAKvvD,EAAM,IAAI,EAGnBA,EAAM,QAAU0B,EAAO,CACzB,IAAIorI,EAAkBC,EAAmB1rH,GAAa,CAAC3f,CAAK,CAAC,EAE7D,GAAKorI,EAMM9sI,EAAM,OAAO8sI,CAAe,IACrCv9E,EAAM,KAAKvvD,EAAM,OAAO8sI,CAAe,CAAC,EACxCD,EAAc,QARM,CACpB,IAAI/7F,KAAY,MAAa9wC,EAAM,MAAM,EACrC8wC,IACFye,EAAM,KAAKze,CAAS,EACpB+7F,EAAc,GAElB,CAIF,CAGA,OAAInrI,GAAS,CAACkrI,GAAkB,CAACC,GAAe7sI,EAAM,OAAS,MACzD0B,EAAM,MAAQA,EAAM,KAAK,OAAS,IACpC6tD,EAAM,KAAK7tD,EAAM,IAAI,EACrBkrI,EAAiB,IAIjBr9E,EAAM,OACR35C,EAAc25C,EAAM,KAAK,GAAG,EACnBvvD,EAAM,KACf4V,EAAc5V,EAAM,KAEpB4V,EAAc,KAIZA,IAAgB5V,EAAM,OACxB4V,EAAco3H,EAAmBhtI,EAAO0B,CAAK,GAG3CgrI,IACF92H,EAAc,GAAGA,CAAW,iBAEvBA,CACT,CAEO,SAASo3H,EAAmBhtI,EAAc0B,EAAmB,CAClE,IAAIurI,EAAY,EACZC,EAAY,GAEhB,GAAIxrI,EACF,QAASuC,EAAI,EAAGA,EAAIvC,EAAM,OAAO,OAAQuC,IAAK,CAC5C,MAAMkpI,EAAazrI,EAAM,OAAOuC,CAAC,EAEjC,GAAIjE,IAAUmtI,GAGZ,GAFAD,EAAY,GAERD,EAAY,EAAG,CACjBA,IACA,KACF,UACSjtI,EAAM,OAASmtI,EAAW,OACnCF,IAEIC,GACF,KAGN,CAGF,OAAID,EACK,GAAGjtI,EAAM,IAAI,IAAIitI,CAAS,GAG5BjtI,EAAM,IACf,CAKA,SAAS+sI,EAAmBvrI,EAAoC,CAC9D,IAAI4rI,EAA4B,KAEhC,QAASnpI,EAAI,EAAGA,EAAIzC,EAAO,OAAQyC,IAAK,CACtC,MAAMvC,EAAQF,EAAOyC,CAAC,EAEtB,UAAWjE,KAAS0B,EAAM,OACxB,GAAK1B,EAAM,QAKX,UAAWqtI,KAAYrtI,EAAM,OAC3B,GAAIotI,IAAe,KACjBA,EAAaC,UACJA,IAAaD,EACtB,OAAO,KAIf,CAEA,OAAOA,CACT,C,yGC5QA,KAAM,CAAE,IAAAE,EAAK,IAAAC,CAAI,EAAI,KAERC,EAAW,IAAI,IAErB,SAASC,EAASC,EAAcC,EAAgBC,EAAgBC,EAAiB,CACtF,IAAI/qH,EAAQ,CAAC,EAETgrH,EAAUD,EAAM,IAAI,GAAa,EAErC,QAASE,EAAMJ,EAAQI,EAAMH,EAAQG,IAAO,CAC1C,IAAIC,EAAOV,EAAIS,CAAG,EACdE,KAAM,KAAcV,EAAIG,EAAMK,CAAG,EAAGC,CAAI,EAE5C,QAAS/pI,EAAI,EAAGA,EAAI4pI,EAAM,OAAQ5pI,IAAK,CACrC,IAAIiqI,EAAQL,EAAM5pI,CAAC,EAAIgqI,EACnBE,GAAOD,GAAS,GAAKH,GAAO,EAAI,EAAIC,IAASD,GAAOD,EAAQ7pI,CAAC,EAAI,EAAI6pI,EAAQ7pI,CAAC,GAC9EmqI,KAAO,KAAcF,EAAOC,CAAG,EACnCrrH,EAAM,KAAKsrH,CAAI,EACfZ,EAAS,IAAIY,EAAMD,CAAG,CACxB,CACF,CAEA,OAAOrrH,CACT,CAEA,MAAMurH,EAAa3rI,GAAcA,EAAI,IAAM,EAErC4rI,EAAW,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,GAAG,EAG3EC,EAAWd,EAAS,GAAI,IAAK,EAAGa,CAAQ,EAGxCE,EAAWf,EAAS,GAAI,EAAG,GAAIa,CAAQ,EAGvCG,EAAaD,EAAS,OAAOH,CAAS,EAEtCK,EAAWH,EAAS,OAAOC,CAAQ,EAEnCG,EAAkBJ,EAAS,OAAOE,CAAU,EAEnDhR,EAAM,EAAI,IACV/3H,EAAM,GAAK+3H,EACXmR,EAAO,GAAKlpI,EACZmpI,EAAM,GAAKD,EACXE,EAAO,IAAMD,EAGNE,EAAgB,CAC3B,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IAEAtR,EACA,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,GAAKA,EACL,GAAKA,EACL,GAAKA,EACL,GAAKA,EAEL/3H,EACA,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,GAAKA,EACL,GAAKA,EACL,GAAKA,EACL,GAAKA,EAELkpI,EACA,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,GAAKA,EACL,GAAKA,EAELC,EACA,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,GAAKA,EACL,GAAKA,EACL,GAAKA,EACL,GAAKA,EACL,GAAKA,EACL,GAAKA,EACL,IAAMA,EAENC,EACA,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,EAAIA,EACJ,GAAKA,CACP,EAIaE,EAAiCjoB,GAAyC,CAErF,MADgC,MAA0BA,CAAQ,EACrC,CAC3B,MAAMujB,EAAa,OAAO,SAASvjB,EAAU,EAAE,EAC/C,OAAO,OAAO,MAAMujB,CAAU,EAAI,OAAYA,CAChD,KAAO,CAEL,MADsB,MAAgBvjB,CAAQ,EAE5C,SAAO,SAAuB,MAAcA,CAAQ,CAAC,EAChD,CACL,MAAMx4F,EAAQw4F,EAAS,MAAM,WAAW,EACxC,GAAIx4F,EAAO,CACT,MAAM+7G,EAAa,OAAO,SAAS/7G,EAAM,CAAC,EAAG,EAAE,EAC/C,OAAO,OAAO,MAAM+7G,CAAU,EAAI,OAAYA,CAChD,KACE,OAEJ,CACF,CACF,C,sFCvIO,MAAM2E,EAAO,CAAC,CAAE,SAAA1oI,EAAU,UAAAoB,CAAU,IAAa,CACtD,MAAMT,KAAS,MAAWuD,CAAS,EACnC,SAAO,OAAC,OAAI,aAAW,MAAGvD,EAAO,QAASS,CAAS,EAAI,SAAApB,CAAA,CAAS,CAClE,EACakE,EAAanF,IAA0B,CAClD,WAAS,OAAI,CACX,gBAAiBA,EAAM,WAAW,MAAM,WACxC,OAAQ,aAAaA,EAAM,WAAW,MAAM,WAAW,GACvD,aAAcA,EAAM,MAAM,OAAO,QACjC,QAASA,EAAM,QAAQ,GAAK,CAAC,EAC7B,WAAYA,EAAM,WAAW,mBAC/B,CAAC,CACH,E,8FCnBA,MAAM85F,KCGa,MAAU,CAC3B,YAAa,gBACb,aAAWF,EAAA,GAAgB,CAAE,QAAS,MAAO,CAAC,EAC9C,UAAW,KAAO,CAAC,EACrB,CAAC,EDP0B,gBAAgB,CACzC,UAAYG,IAAW,CACrB,qBAAsBA,EAAM,SAAsE,CAChG,MAAQC,IAAc,CAAE,IAAK,6BAA6BA,EAAS,YAAY,GAAI,OAAQ,QAAS,EACtG,CAAC,EACD,mBAAoBD,EAAM,SAAkE,CAC1F,MAAQC,IAAc,CAAE,IAAK,6BAA6BA,EAAS,YAAY,GAAI,OAAQ,MAAO,EACpG,CAAC,CACH,GACA,iBAAkB,EACpB,CAAC,EAyBY,CAAE,gCAAA4vC,EAAiC,8BAAAC,CAA8B,EAAI/vC,C,8VEItEgwC,GAAAA,IAEVA,EAAA,0BAA4B,8BAC5BA,EAAA,4BAA8B,gCAG9BA,EAAA,mBAAqB,uBACrBA,EAAA,iBAAmB,qBACnBA,EAAA,mBAAqB,sBACrBA,EAAA,mBAAqB,uBACrBA,EAAA,mBAAqB,uBAGrBA,EAAA,2BAA6B,+BAC7BA,EAAA,yBAA2B,6BAC3BA,EAAA,2BAA6B,6BAC7BA,EAAA,2BAA6B,+BAC7BA,EAAA,eAAiB,kBAGjBA,EAAA,yBAA2B,6BAC3BA,EAAA,2BAA6B,gCAC7BA,EAAA,6BAA+B,kCAC/BA,EAAA,yBAA2B,6BAC3BA,EAAA,2BAA6B,+BAC7BA,EAAA,4BAA8B,iCAG9BA,EAAA,cAAgB,iBAChBA,EAAA,YAAc,eACdA,EAAA,cAAgB,iBAChBA,EAAA,yBAA2B,0BAG3BA,EAAA,iBAAmB,qBACnBA,EAAA,mBAAqB,uBACrBA,EAAA,mBAAqB,uBACrBA,EAAA,mBAAqB,uBACrBA,EAAA,oBAAsB,wBAGtBA,EAAA,gBAAkB,oBAzCRA,IAAAA,GAAA,IA6CAC,GAAAA,IACVA,EAAA,UAAY,uBACZA,EAAA,KAAO,kBACPA,EAAA,OAAS,oBACTA,EAAA,OAAS,oBACTA,EAAA,QAAU,qBACVA,EAAA,QAAU,qBACVA,EAAA,aAAe,qBACfA,EAAA,MAAQ,mBACRA,EAAA,QAAU,qBACVA,EAAA,kBAAoB,gCAVVA,IAAAA,GAAA,IAcAC,GAAAA,IACVA,EAAA,MAAQ,eACRA,EAAA,OAAS,gBAFCA,IAAAA,GAAA,IAOAC,GAAAA,IAEVA,EAAA,gBAAkB,oBAClBA,EAAA,cAAgB,kBAChBA,EAAA,gBAAkB,oBAClBA,EAAA,gBAAkB,oBAClBA,EAAA,0BAA4B,+BAC5BA,EAAA,wBAA0B,4BAG1BA,EAAA,wBAA0B,6BAC1BA,EAAA,sBAAwB,2BACxBA,EAAA,wBAA0B,6BAC1BA,EAAA,wBAA0B,6BAbhBA,IAAAA,GAAA,IAiBZ,MAAMC,EAAkB,GAClBC,EAAe,GASRC,EAA+B,KACnC,CACJ,eAAyB,CAACF,KAAiB,MAAQ,CAAC,EACpD,gBAA0B,CAACA,KAAiB,MAAQ,CAAC,CACxD,GAGWG,EAA8B7iH,GACpB4iH,EAA6B,EAC9B5iH,CAAM,EAMf8iH,EAAuB,KAC3B,CAEJ,oBAAiCC,GAAUL,EAAiB,IAAoB,kBAAkB,EAClG,kBAA+BK,GAAUL,EAAiB,IAAoB,gBAAgB,EAC9F,oBAAiCK,GAAUL,EAAiB,IAAoB,kBAAkB,EAClG,oBAAiCK,GAAUL,EAAiB,IAAoB,kBAAkB,EAClG,+BAA2CK,GAAUL,EAAiB,IAAoB,gBAAgB,EAC1G,4BAAyC,CACxCA,EACA,KAAI,cAAc,IAAoB,oBAAoB,GACxD,KAAI,cAAc,IAAoB,yBAAyB,CACnE,EAGC,6BAAyCK,GAAUL,EAAiB,IAAoB,yBAAyB,EACjH,2BAAuCK,GAAUL,EAAiB,IAAoB,wBAAwB,EAC9G,6BAAyCK,GAAUL,EAAiB,IAAoB,yBAAyB,EACjH,6BAAyCK,GAAUL,EAAiB,IAAoB,yBAAyB,CACpH,GAGWM,EAAsBhjH,GACZ8iH,EAAqB,EACtB9iH,CAAM,EAMrB,SAASijH,EAAoBn5F,EAAoB9pB,EAAkC,CACxF,MAAMkjH,EAAYC,EAAyBr5F,CAAI,EAE/C,SAAO,WAAQ,IACNo5F,EAAUljH,CAAM,EACtB,CAACkjH,EAAWljH,CAAM,CAAC,CACxB,CAEO,SAASojH,EAAsBt5F,EAAoB14C,EAAuC,CAC/F,MAAM8xI,EAAYC,EAAyBr5F,CAAI,EAE/C,OAAO,QAAQ,IACN14C,EAAQ,IAAK4uB,GAAWkjH,EAAUljH,CAAM,CAAC,EAC/C,CAACkjH,EAAW9xI,CAAO,CAAC,CACzB,CAEO,SAASiyI,EACdv5F,EACAM,EACApqB,EACS,CACT,MAAMkjH,EAAYI,EAAyBx5F,EAAMM,CAAe,EAEhE,SAAO,WAAQ,IACN84F,EAAUljH,CAAM,EACtB,CAACkjH,EAAWljH,CAAM,CAAC,CACxB,CAEO,SAASujH,EACdz5F,EACAM,EACAh5C,EACW,CACX,MAAM8xI,EAAYI,EAAyBx5F,EAAMM,CAAe,EAEhE,SAAO,WAAQ,IACNh5C,EAAQ,IAAK4uB,IAAWkjH,EAAUljH,EAAM,CAAC,EAC/C,CAACkjH,EAAW9xI,CAAO,CAAC,CACzB,CAKO,SAAS+xI,EAAyBr5F,EAAgD,CAKvF,MAAM05F,KAAoB,WAAQ,IAAM,KAAgB,iBAAiB15F,CAAI,EAAG,CAACA,CAAI,CAAC,EACtF,OAAOw5F,EAAyBx5F,EAAK,UAAW05F,CAAiB,CACnE,CAEO,SAASF,EACdx5F,EACAM,EAC4B,CAC5B,MAAMr5C,KAAkB,MAAmBq5C,CAAe,EAEpD,CAAE,WAAAq5F,EAAY,YAAAC,GAAa,iBAAA1gB,GAAmB,GAAO,QAAApiH,EAAQ,KAAI,KAAkB7P,EAAiB+4C,CAAI,EACxG,CAACtyC,EAAGmsI,EAAa,EAAIX,EAAmB,8BAAwC,EAChFY,GAAaC,EAAc/5F,CAAI,EAyCrC,SAvCkB,WAAoC,IAAM,CAC1D,MAAMyC,GAAgBzC,KAAO,MAAkBA,CAAI,EAAI,GAGjDg6F,GAAc,GACdC,GAA4B,IAAc,QAAQ,KAAKj6F,CAAI,EAC3Dk6F,MAAmB,MAAqBl6F,CAAI,EAG5Cm6F,GAAgB13F,IAAiBu3F,IAAeE,GAGhDE,GAAiBtjI,GAAU+hI,EAAe3f,GAC1CmhB,GAAgCF,GAAgBtB,EAAeuB,GAG/DE,GAAqBJ,GAAmBrB,EAAeuB,GAEvDrzI,MAAmB,MAAoBE,CAAe,EAkB5D,MAhB8C,CAC3C,uBAA4BgyI,GAAUqB,GAAoBvzI,GAAiB,MAAM,EACjF,kBAAuBkyI,GAAUL,EAAiB7xI,GAAiB,IAAI,EACvE,oBAAyB,CAACszI,GAA+BV,GAAc,EAAK,EAC5E,oBAAyB,CAACU,GAA+BT,IAAe,EAAK,EAC7E,qBAA0BX,GAAUL,EAAiB,IAAoB,kBAAkB,EAC3F,qBAA0BkB,GAC1B,qBAA+B,CAACG,GAA2BJ,EAAa,EACxE,mBAAwB,CAACQ,IAAiCJ,GAA2BN,GAAc,EAAK,EACxG,qBAA0B,CAACU,IAAiCJ,GAA2BN,GAAc,EAAK,EAC1G,gCAAoC,CACnCU,IAAiCJ,IAChCL,OAAe,MAAQ,IAAM,EAChC,CACF,CAGF,EAAG,CAAC55F,EAAMlpC,GAASoiH,GAAkBjyH,EAAiB0yI,EAAYC,GAAaE,GAAYD,EAAa,CAAC,CAG3G,CAMO,SAASU,EAA+Bv6F,EAAkE,CAE/G,KAAM,CAAE,WAAA25F,EAAY,YAAAC,EAAa,QAAA9iI,CAAQ,EAAI0jI,EAA6Bx6F,CAAI,EACxE,CAACtyC,GAAGmsI,EAAa,EAAIX,EAAmB,8BAAwC,EAEhFuB,GAAmBC,EAA8B,EACjDC,EAAqBC,GAAsB56F,GAAM,SAAS,EA2ChE,SAzCkB,WAAoC,IAAM,CAC1D,MAAMyC,GAAgBzC,KAAO,MAAsBA,CAAI,EAAI,GAIrDg6F,GAAc,GAEda,GAAiB,KAAmB,QAAQ,aAAa76F,CAAI,EAC7Dk6F,MAAmB,MAAqBl6F,CAAI,EAG5Cm6F,GAAgB13F,IAAiBu3F,IAAeE,GAGhDE,GAAiBtjI,EAAU+hI,EAAeD,EAC1CyB,GAAgCF,GAAgBtB,EAAeuB,GAG/DE,GAAqBJ,GAAmBrB,EAAeuB,GAEvDrzI,MAAmB,MAAoB,SAAS,EAkBtD,MAhB8C,CAC3C,uBAA4BkyI,GAAUqB,GAAoBvzI,GAAiB,MAAM,EACjF,kBAAuBkyI,GAAUL,EAAiB7xI,GAAiB,IAAI,EACvE,oBAAyB,CAACszI,GAA+BV,GAAc,EAAK,EAC5E,oBAAyB,CAACU,GAA+BT,GAAe,EAAK,EAC7E,qBAA0BX,GAAUL,EAAiB,IAAoB,kBAAkB,EAC3F,qBAA0B,CAAC6B,GAAkBE,GAAsBE,EAAc,EACjF,qBAA+B,CAACA,GAAgBhB,EAAa,EAC7D,mBAAwB,CAACQ,IAAiCQ,GAAgBlB,GAAc,EAAK,EAC7F,qBAA0B,CAACU,IAAiCQ,GAAgBlB,GAAc,EAAK,EAC/F,gCAAoC,CACnCU,IAAiCQ,IAChCjB,MAAe,MAAQ,IAAM,EAChC,CACF,CAGF,EAAG,CAAC55F,EAAMlpC,EAAS6iI,EAAYC,EAAae,EAAoBd,GAAeY,EAAgB,CAAC,CAGlG,CAYA,SAASD,EAA6Bx6F,EAA4D,CAChG,MAAM5Q,EAAY4Q,GAAM,UAClB,CAAE,OAAAlR,EAAQ,QAAAh4B,CAAQ,KAAI,KAAUs4B,CAAS,EAE/C,SAAO,WAAQ,IAAM,CACnB,GAAI,CAAC4Q,GAAQ,CAAC5Q,EACZ,MAAO,CAAE,WAAY,GAAO,YAAa,GAAO,QAAS,EAAM,EAGjE,GAAI,CAACN,EAEH,MAAO,CACL,WAAY,GACZ,YAAa,GACb,QAAAh4B,CACF,EAIF,MAAM/P,MAAmB,MAAoB,SAAS,EAChDiyH,GAAsB,KAAI,wBAAwBjyH,GAAiB,OAAQ+nC,CAAM,EACjFmqF,GAAwB,KAAI,wBAAwBlyH,GAAiB,OAAQ+nC,CAAM,EAEzF,MAAO,CACL,WAAYkqF,GACZ,YAAaC,GACb,QAAAniH,CACF,CACF,EAAG,CAACkpC,EAAM5Q,EAAWN,EAAQh4B,CAAO,CAAC,CACvC,CAEO,MAAMgkI,EAAY,OAAO,oBAAoB,EAM7C,SAASC,EAA0B/6F,EAAsC9pB,EAAkC,CAChH,MAAMkjH,EAAYmB,EAA+Bv6F,IAAS86F,EAAY,OAAY96F,CAAI,EAEtF,SAAO,WAAQ,IACNo5F,EAAUljH,CAAM,EACtB,CAACkjH,EAAWljH,CAAM,CAAC,CACxB,CAKO,SAAS8kH,EACdh7F,EACA14C,EACW,CACX,MAAM8xI,EAAYmB,EAA+Bv6F,IAAS86F,EAAY,OAAY96F,CAAI,EAEtF,SAAO,WAAQ,IACN14C,EAAQ,IAAK4uB,GAAWkjH,EAAUljH,CAAM,CAAC,EAC/C,CAACkjH,EAAW9xI,CAAO,CAAC,CACzB,CAEO,SAAS2zI,GAA6D,CAC3E,KAAM,CACJ,qBAAAn1E,EACA,oBAAAo1E,EACA,sBAAuBC,CACzB,KAAI,MAAgB,EAIdv0I,KAA2B,MAA4Bk/D,CAAqB,EAC5Es1E,MAAsB,MAAwBt1E,CAAqB,EAqHzE,MAlHiD,CAE9C,8BAA+CmzE,GAC9CL,EACA,IAAoB,iCACtB,EACC,gCAAiDK,GAChDiC,EACA,IAAoB,kCACtB,EAEC,uBAAwCjC,GACvCiC,EACAt0I,EAAyB,OAEzB,GAAIu0I,EAAgC,CAAC,IAAoB,uBAAuB,EAAI,CAAC,CACvF,EACC,qBAAsClC,GACrCL,EACAhyI,EAAyB,KACzB,GAAIu0I,EAAgC,KAAkC,CAAC,CACzE,EACC,sBAAwClC,GACvCiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,CAAC,IAAoB,sBAAsB,EAAI,CAAC,CACtF,EACC,uBAAwClC,GACvCiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,CAAC,IAAoB,sBAAsB,EAAI,CAAC,CACtF,EAIC,uBAAwC,CAACA,EAA+BA,CAA6B,EAErG,+BAAgDlC,GAC/CiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,CAAC,IAAoB,sBAAsB,EAAI,CAAC,CACtF,EACC,6BAA8ClC,GAC7CL,EACAhyI,EAAyB,KACzB,GAAIu0I,EAAgC,CAAC,IAAoB,qBAAqB,EAAI,CAAC,CACrF,EACC,6BAAgDlC,GAC/CiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,CAAC,IAAoB,sBAAsB,EAAI,CAAC,CACtF,EACC,+BAAgDlC,GAAUiC,EAAqBt0I,EAAyB,MAAM,EAE9G,6BAA8CqyI,GAC7CiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,KAA2C,CAAC,CAClF,EACC,gCAAgDlC,GAC/CL,EACAhyI,EAAyB,KACzB,GAAIu0I,EAAgC,KAAyC,CAAC,CAChF,EACC,kCAAkDlC,GACjDiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,KAA2C,CAAC,CAClF,EACC,6BAA8ClC,GAC7CiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,KAA2C,CAAC,CAClF,EACC,+BAAgDlC,GAC/CkC,EACAv0I,EAAyB,IAC3B,EACC,kBAAoCqyI,GACnCkC,EACAv0I,EAAyB,aAAa,WACxC,EACC,iCAAiD,CAACu0I,KAA+B,MAAQ,CAAC,EAG1F,iBAAmClC,GAAUL,EAAiBwC,GAAoB,MAAM,EACxF,eAAiCnC,GAAUL,EAAiBwC,GAAoB,IAAI,EACpF,iBAAmCnC,GAAUL,EAAiBwC,GAAoB,MAAM,EACxF,0BAA8CnC,GAAUL,EAAiBwC,GAAoB,IAAI,EAEjG,uBAAwCnC,GACvCiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,KAAoC,CAAC,CAC3E,EACC,qBAAsClC,GACrCL,EACAhyI,EAAyB,KACzB,GAAIu0I,EAAgC,KAAkC,CAAC,CACzE,EACC,uBAAwClC,GACvCiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,KAAoC,CAAC,CAC3E,EACC,uBAAwClC,GACvCiC,EACAt0I,EAAyB,OACzB,GAAIu0I,EAAgC,KAAoC,CAAC,CAC3E,EACC,wBAAyClC,GAAUkC,EAA+Bv0I,EAAyB,IAAI,EAC/G,oBAAqCqyI,GAAUL,EAAiBwC,GAAoB,IAAI,CAC3F,CAGF,CAEO,SAASC,EAAuBnlH,EAAqC,CAC1E,MAAMkjH,EAAY6B,EAA4B,EAE9C,SAAO,WAAQ,IACN7B,EAAUljH,CAAM,EACtB,CAACkjH,EAAWljH,CAAM,CAAC,CACxB,CAEO,SAASolH,EAAyBh0I,EAA0C,CACjF,MAAM8xI,EAAY6B,EAA4B,EAE9C,SAAO,WAAQ,IACN3zI,EAAQ,IAAK4uB,GAAWkjH,EAAUljH,CAAM,CAAC,EAC/C,CAACkjH,EAAW9xI,CAAO,CAAC,CACzB,CAEA,KAAM,CAAE,8CAAAi0I,CAA8C,EAAI,IAM1D,SAASxB,EAAc/5F,EAAyC,CAC9D,MAAM5Q,EAAY,IAAc,QAAQ,KAAK4Q,CAAI,EAAIA,EAAK,cAAc,cAAgB,OAClF,CAAE,QAASw7F,EAAiB,OAAA1sG,CAAO,KAAI,KAAUM,CAAS,EAE1DqsG,GAAuBz7F,GAAQ,IAAc,QAAQ,KAAKA,CAAI,EAC9D07F,GAAqB,IAAc,QAAQ,cAAc17F,CAAI,EAE7Dy6F,GAAmBC,EAA8B,EACjDC,EAAqBC,GAAsBxrG,CAAS,EAE1D,OAAK4Q,EAMD,CAACy7F,IAAwBC,IAAsBF,GAAmB,CAAC1sG,EAC9D,CAAC,GAAO,EAAK,EAGf,CAAC2rG,GAAkBE,CAAkB,EATnC,CAAC,GAAO,EAAK,CAUxB,CAEA,SAASC,GAAsBxrG,EAAoB,CAGjD,MAAMusG,EAFoBC,GAAqBxsG,CAAS,EAEH,IAAoB,qBAAqB,GAAK,GAMnG,OALmC,KAAI,cAAc,IAAoB,sBAAsB,GAIxCusG,CAEzD,CAEA,SAASjB,GAAgC,CACvC,KAAM,CAAE,YAAamB,EAAgB,UAAA5qI,CAAU,EAAIsqI,EAA8C,MAAS,EAEpGO,EAA+BD,GAAgB,sBAAwB,KAAmB,SAC1FE,EAAmBF,GAAgB,sBAAwB,KAAmB,IAGpF,OAAO5qI,EAAY,GAFM,CAAC6qI,GAAgCC,CAG5D,CAEA,SAASH,GAAqBxsG,EAA6C,CACzE,KAAM,CAAE,OAAAN,CAAO,KAAI,KAAUM,CAAS,EACtC,OAAON,GAAQ,eAAiB,CAAC,CACnC,CAGA,MAAMmqG,GAAY,CAChB+C,KAEG10I,IACS,CAAC00I,EAAW10I,EAAQ,KAAM4uB,GAAWA,GAAU,KAAI,cAAcA,CAAM,CAAC,CAAC,C,iGCjlBhF,MAAM+lF,EAAW,CAAC,CAAE,MAAA7rG,EAAO,SAAAT,EAAU,UAAAoB,EAAW,GAAGqE,CAAK,IAAa,CAC1E,MAAM9E,KAAS,MAAWuD,CAAS,EAEnC,SACE,QAAC,YAAS,aAAW,MAAGvD,EAAO,QAASS,CAAS,EAAI,GAAGqE,EACrD,UAAAhF,MAAS,OAAC,IAAM,CAAE,SAAAA,CAAA,CAAM,EACxBT,CAAA,EACH,CAEJ,EAEMkE,EAAanF,IAA0B,CAC3C,WAAS,OAAI,CACX,aAAcA,EAAM,QAAQ,CAAC,EAE7B,eAAgB,CACd,aAAc,CAChB,CACF,CAAC,CACH,E,wEC5BO,MAAM2mC,EAAgB,SAyBhBtiC,EAAmC,CAC9C,WAAY,OACZ,YAAa,GACb,QAAS,GACT,UAAW,GACX,UAAW,KAAkB,IAC/B,EAOa8vF,EAA2C,CACtD,YAAa,GACb,UAAW,CACb,C,mKCnDA,MAAMo5C,EAAmB,SACvB,MAAM,mEACFC,EAAoB,SACxB,MAAM,gCACFC,EAAsB,SAC1B,MAAM,6EACFC,EAAiB,SACrB,MAAM,+BACFC,EAAgB,SACpB,MAAM,gCACFC,EAAiB,SACrB,MAAM,gCACFC,EAAc,SAClB,MAAM,gCACFC,EAAmB,SACvB,MAAM,mEACFC,EAAqB,SACzB,MAAM,yDAGFC,EAAiB,SACrB,MAAM,gCACFC,EAAgB,SACpB,MAAM,gCACFC,EAAgB,SACpB,MAAM,mEACFC,EAAgB,SACpB,MAAM,gCACFC,EAAmB,SACvB,MAAM,6EACFC,EAAgB,SACpB,MAAM,gCACFC,EAAgB,SACpB,MAAM,yDACFC,EAAa,SAAY,MAAM,yDAC/BC,EAAkB,SACtB,MAAM,4EACFC,EAAa,SAAY,MAAM,gCAC/BC,EAAsB,SAC1B,MAAM,gCACFC,EAAiB,SACrB,MAAM,wDACFC,EAAY,SAAY,MAAM,wDAC9BC,EAAY,SAAY,MAAM,0GAC9BC,EAAY,SAAY,MAAM,gCAC9BC,EAAgB,SACpB,MAAM,gCACFC,EAAY,SAAY,MAAM,gCAC9BC,EAAqB,SACzB,MAAM,6EACFC,EAAqB,SACzB,MAAM,6EACFC,EAAa,SAAY,MAAM,yDAC/BC,EAAY,SAAY,MAAM,+BAC9BC,EAAkB,SACtB,MAAM,4EACFC,GAAc,SAAY,MAAM,qFAChCC,EAAa,SAAY,MAAM,mEAC/BC,GAAgB,SACpB,MAAM,gCAEFC,GAAc,SAAY,MAAM,gGAChCC,EAAc,SAAY,MAAM,yDAChCC,EAAe,SAAY,MAAM,wDACjCC,EAAe,SACnB,MAAM,yGAEFtzG,EAAY,SAChB,MAAM,mEAEFuzG,GAAY,SAChB,MAAM,gCA+CR,GA7CuF,CAErF,yBAA0BtC,EAC1B,wBAAyBC,EACzB,4BAA6BC,EAC7B,uBAAwBC,EACxB,sBAAuBC,EACvB,uBAAwBC,EACxB,oBAAqBC,EACrB,yBAA0BC,EAC1B,2BAA4BC,EAE5B,mBAAoBqB,EACpB,yBAA0BC,EAC1B,oBAAqBE,EACrB,6BAA8BN,EAC9B,6BAA8BC,EAC9B,0BAA2Bd,EAC3B,sBAAuBuB,EACvB,qBAAsBF,GACtB,qBAAsBC,EACtB,uBAAwBrB,EACxB,wBAAyBL,EACzB,uBAAwBC,EACxB,sBAAuB2B,EACvB,oBAAqBT,EACrB,mBAAoBL,EACpB,mBAAoBF,EACpB,mBAAoBI,EACpB,uBAAwBV,EACxB,oBAAqBC,EACrB,yBAA0BC,EAC1B,6BAA8BE,EAC9B,oBAAqBnwI,EAAA,EAAO,eAAe,SAAWsxI,GAAYpB,EAClE,uBAAwBM,EACxB,uBAAwBZ,EACxB,uBAAwBD,EACxB,mBAAoBW,EACpB,qBAAsBS,GACtB,sBAAuBE,GACvB,wBAAyBlzG,EACzB,wBAAyBqyG,EACzB,wBAAyBkB,EAC3B,E,sFC7GA,SAASC,GAAmBx/G,GAAsB,CAChD,MAAMy/G,GAAc,IAAI,IAAI,OAAO,SAAS,IAAI,EAC1CC,GAAW,IAAI,IAAI1/G,EAAG,EAC5B,OAAOy/G,GAAY,OAASC,GAAS,IACvC,CAEO,eAAeC,GAAsB3/G,GAAa4/G,GAAgC,CACvF,IAAIC,GAAa,GAyBjB,GAtBIL,GAAmBx/G,EAAG,GAExB6/G,GAAa,MADI,MAAM,MAAM7/G,EAAG,GACJ,KAAK,EAEjC6/G,MAAa,MAA4B,CACvC,IAAA7/G,GACA,OAAQ6/G,GACR,sBAAuB,GACvB,gBAAiB,EACnB,CAAC,MAEQ,OAAc7/G,EAAG,IAE1B6/G,GAAa,MADI,MAAM,MAAM7/G,EAAG,GACJ,KAAK,EACjC6/G,MAAa,MAA4B,CACvC,IAAA7/G,GACA,OAAQ6/G,GACR,sBAAuB,GACvB,gBAAiB,EACnB,CAAC,GAGCA,GAAW,SAAW,EACxB,MAAM,IAAI,MAAM,2DAA2D,EAG7EA,GAAaC,GAAgBD,EAAU,EACvCD,GAAW,SAASC,EAAU,CAChC,CAEO,eAAeE,GAAc78G,GAA0C,CAC5E,MAAI,OAAcA,GAAK,MAAM,EAAG,CAE9B,MAAMlD,GAAMkD,GAAK,OAGjB,IAAI88G,GAAa,MAFA,MAAM,MAAMhgH,EAAG,GAEA,KAAK,EACrC,GAAI,CAACigH,GAAUD,GAAY98G,GAAK,UAAU,EACxC,MAAM,IAAI,MAAM,oCAAoC,EAGtD,OAAA88G,MAAa,MAA4B,CACvC,IAAAhgH,GACA,OAAQggH,GACR,sBAAuB,GACvB,gBAAiB,EACnB,CAAC,EACMA,EACT,KAAO,CACL,IAAIE,MAAa,OAAkBh9G,GAAK,MAAM,EAG9C,MAAMi9G,MAAgB,MAA0BD,EAAU,EAG1D,IAAIF,GAAa,MAFA,MAAM,MAAMG,EAAa,GAEV,KAAK,EACrC,GAAI,CAACF,GAAUD,GAAY98G,GAAK,UAAU,EACxC,MAAM,IAAI,MAAM,oCAAoC,EAGtD,OAAA88G,MAAa,MAA4B,CACvC,IAAKG,GACL,OAAQH,GACR,sBAAuB,GACvB,gBAAiB,EACnB,CAAC,EACDA,GAAaF,GAAgBE,EAAU,EAChCA,EACT,CACF,CAEA,eAAeC,GAAUD,GAAoBI,GAAuC,CAKlF,GAJI,CAACnyI,EAAA,EAAO,eAAe,kBAIvB,CAACmyI,IAAcA,GAAW,SAAW,EACvC,MAAO,GAGT,KAAM,CAACC,GAAW3xI,EAAC,EAAI0xI,GAAW,MAAM,GAAG,EACrCE,GAAiBD,GAAU,QAAQ,MAAO,MAAM,EAGhD30I,GADU,IAAI,YAAY,EACX,OAAOs0I,EAAU,EAEhCO,GAAS,MAAM,OAAO,OAAO,OAAOD,GAAgB50I,EAAI,EACxD80I,GAAa,KAAK,OAAO,aAAa,GAAG,IAAI,WAAWD,EAAM,CAAC,CAAC,EAEtE,MAAO,GAAGF,EAAS,IAAIG,EAAU,KAAOJ,EAC1C,CAEA,SAASN,GAAgBE,GAA4B,CACnD,OAAOA,GAAW,QAAQ,qBAAsB,wBAAwB,CAC1E,CAEO,SAASS,GAAiCC,GAAwC,CAGvFA,GAAmB,SACjB,GAAG,KAAiC,SAAS,CAAC,IAAI,KAAiC,IAAI,IACzF,CACF,CAEO,SAASC,GAAkB9sG,GAAqC,CAErE,UAAWvd,MAAc,OAAO,OAAOroB,EAAA,EAAO,WAAW,EACvD,GAAIqoB,GAAW,OAASud,GACtB,OAAOvd,GAAW,KAKtB,UAAW1rB,MAAS,OAAO,OAAOqD,EAAA,EAAO,MAAM,EAC7C,GAAIrD,GAAM,KAAOipC,GACf,OAAOjpC,GAMX,UAAWktC,MAAO,OAAO,OAAO7pC,EAAA,EAAO,IAAI,EACzC,GAAI6pC,GAAI,KAAOjE,GACb,MAAO,CACL,GAAIA,GACJ,KAAM,KAAW,IACjB,OAAQiE,GAAI,KACZ,WAAYA,GAAI,UAClB,EAIJ,MAAM,IAAI,MAAM,yBAAyBjE,EAAQ,EAAE,CACrD,C,2BCxJO,MAAM+sG,GAAoB,CAAC,QAAQ,E,0ECSnC,SAASC,GAAwBt5I,GAAgD,CACtF,MAAO,CAAC,CAACA,IAAS,OAAOA,IAAU,UAAYA,IAAO,eAAe,QAAQ,CAC/E,CAEO,SAASu5I,GAAY3tH,GAAiB,CAC3C,MAAM,IAAI,MAAM,sBAAsBA,EAAC,6BAA6B,CACtE,CAEA,MAAM4tH,MAAgB,OAAuB,SAAS,EAE/C,SAASC,GAAsBz/G,GAAsC,CAC1E,OAAOA,cAAe,YACxB,CAEO,SAAS0/G,GAAWnrG,GAAiBvxB,GAAsB,CAChEw8H,GAAc,WAAWjrG,GAASvxB,EAAO,CAC3C,CAEO,SAAS28H,GAASjpI,GAAcsM,GAAsB,CAC3Dw8H,GAAc,SAAS9oI,GAAOsM,EAAO,CACvC,CAEO,SAAS48H,GAAQrrG,GAAiBvxB,GAAsB,CAC7Dw8H,GAAc,QAAQjrG,GAASvxB,EAAO,CACxC,CAEA,SAAS68H,GAAQ75I,GAAiC,CAChD,OAAOA,IAAO,aAAa,OAAS,QACtC,CAQO,SAAS85I,GAA8BC,GAA6B,CACzE,OAAKA,KAMDF,GAAQE,EAAS,MAAK,MAAoBA,EAAS,EAC9C,IAAI,OAAOA,EAAS,EAGzB,MAAM,QAAQA,EAAS,EAClBA,GAAU,IAAID,EAA6B,EAEhD,OAAOC,IAAc,SAChB,OAAO,KAAKA,EAAS,EAAE,OAAO,CAAC18H,GAAKqK,MACzC,QAAQ,IAAIrK,GAAKqK,GAAKoyH,GAA8B,QAAQ,IAAIC,GAAWryH,EAAG,CAAC,CAAC,EACzErK,IACN,CAAC,CAAC,EAEA08H,GACT,CAEO,SAASC,GAAyBD,GAA6B,CACpE,OAAKA,QAID,MAAoBA,EAAS,KACxB,cAAUA,EAAS,EAGxB,MAAM,QAAQA,EAAS,EAClBA,GAAU,IAAIC,EAAwB,EAE3C,OAAOD,IAAc,SAChB,OAAO,KAAKA,EAAS,EAAE,OAAO,CAAC18H,GAAKqK,MACzC,QAAQ,IAAIrK,GAAKqK,GAAKsyH,GAAyB,QAAQ,IAAID,GAAWryH,EAAG,CAAC,CAAC,EACpErK,IACN,CAAC,CAAC,EAEA08H,GACT,CC7EA,MAAME,GAAqB,OAAO,IAAI,sBAAsB,EAErD,SAASC,GAAyB96D,GAAkB9yC,GAA2B,CACpF,MAAM6tG,GAAW,QAAQ,IAAI/6D,GAAS,UAAU,EAGhD,GAAI+6D,KAAa,QAAU/6D,KAAY,SAAS,KAC9C,OAAO,SAAS,KAUlB,GALI+6D,KAAa,QAAU/6D,KAAY,SAAS,MAK5CA,KAAY,SAAS,gBACvB,OAAOA,GAGT,GAAIi6D,GAAkB,SAASc,EAAQ,EACrC,MAAAT,GAAW,IAAMS,GAAW,wCAAyC,CACnE,SAAA7tG,GACA,MAAO6tG,EACT,CAAC,EAEK,IAAI,MAAM,IAAMA,GAAW,uCAAuC,EAQ1E,GAJIC,GAA0Bh7D,GAAS9yC,EAAQ,GAI3C8yC,GAAQ,aAAe,SAAS,MAAQA,GAAQ,QAAQ,YAAY,IAAM,KAC5E,OAAOA,GAIT,MAAMi7D,GAAc,SAAS,cAAcF,EAAQ,EACnD,OAAAE,GAAY,QAAQ,4BAA8B,OAE3CA,EACT,CAEO,SAASC,GAAatgH,GAA8B,CACzD,GAAI,OAAOA,IAAQ,UAAYA,cAAe,QAC5C,GAAI,CACF,OAAOA,GAAI,WAAa,MAC1B,MAAY,CACV,MAAO,EACT,CAEF,MAAO,EACT,CASO,SAASugH,GAAiC3sI,GAAa,CAC5D,MAAM2d,GAAQ,QAAQ,IAAI3d,GAAI,OAAO,EAChC,OAAO,OAAO2d,GAAO0uH,EAAkB,GAC1C,QAAQ,eAAe1uH,GAAO0uH,GAAoB,CAAC,CAAC,CAExD,CAEO,SAASO,GAAiCxgH,GAAc,CACxDA,KAGD,MAAM,QAAQA,EAAG,GACnBA,GAAI,QAAQwgH,EAAgC,EAC5CC,GAAuCzgH,EAAG,GACjC,OAAOA,IAAQ,WACxB,OAAO,OAAOA,EAAG,EAAE,QAAQwgH,EAAgC,EAC3DC,GAAuCzgH,EAAG,GAE9C,CAEA,SAASygH,GAAuCzgH,GAAc,CAC5D,GAAKA,GAIL,OAAI,OAAO,OAAOA,GAAKigH,EAAkB,GAIzC,QAAQ,eAAejgH,GAAKigH,GAAoB,CAAC,CAAC,EAC3CjgH,EACT,CAUO,SAAS0gH,GAAwB1gH,GAAc,CAC/CA,KAKD,OAAO,OAAOA,GAAKigH,EAAkB,OAMvC,MAAoBjgH,EAAG,GAEvB,EAAEA,cAAe,YAGhBy/G,GAAsBz/G,EAAG,GAAKA,cAAe,MAAiBA,cAAe,OAE9E,QAAQ,eAAeA,GAAKigH,GAAoB,CAAC,CAAC,EAO9CjgH,KAAQ,gBACV,OAAO,eAAeA,GAAKigH,GAAoB,CAAC,CAAC,GAGvD,CAEO,SAASU,GAAa/sI,GAAiB,CAC5C,OAAO,OAAO,OAAOA,GAAIqsI,EAAkB,CAC7C,CAQO,SAASG,GAA0BxsI,GAAa0+B,GAA2B,CAChF,MAAO,CAAC,SAAS,SAAS1+B,EAAE,GAAKA,GAAG,QAAQ,wBAAwB0+B,EAAQ,GAAG,IAAM,IACvF,CAEA,IAAIsuG,GAEG,SAASC,IAA8B,CAC5C,OAAKD,KACHA,GAAc,SAAS,cAAc,KAAK,EAC1CA,GAAY,aAAa,KAAM,6BAA6B,EAG5DA,GAAY,aAAa,sBAAuB,MAAM,EACtDA,GAAY,QAAQ,cAAgB,mBAEpCA,GAAY,MAAM,MAAQ,OAC1BA,GAAY,MAAM,OAAS,KAC3BA,GAAY,MAAM,SAAW,SAC7BA,GAAY,MAAM,IAAM,IACxBA,GAAY,MAAM,KAAO,IACzB,SAAS,KAAK,YAAYA,EAAW,GAEhCA,EACT,CAEA,IAAIE,GAAoB,GAEjB,SAASC,IAAe,CACxBD,KACHA,GAAoB,GACpBE,GAAyB,EACzBC,GAAuB,EAE3B,CAYA,SAASA,IAAyB,CAChC,MAAMC,GAAsB,OAAO,UAAU,YAC7C,OAAO,eAAe,OAAO,UAAW,cAAe,CACrD,MAAO,YAAaluG,GAAuD,CAEzE,OAAOkuG,GAAoB,MAAM,KAAMlB,GAAyBhtG,EAAI,CAAgB,CACtF,CACF,CAAC,CACH,CAoBA,SAASguG,IAA2B,CAClC,MAAMtjE,GAAW,OAAO,QAAQ,aAChC,OAAO,eAAe,OAAO,QAAS,eAAgB,CACpD,MAAO,YAAa1qC,GAAsD,CACxE,IAAImuG,GAAUnuG,GACd,GAAI,CACFmuG,MAAU,cAAUnuG,EAAI,CAC1B,OAASj9B,GAAG,CACV2pI,GAAW,oDAAqD,CAC9D,MAAO,OAAO3pI,EAAC,CACjB,CAAC,CACH,CACA,OAAO,QAAQ,MAAM2nE,GAAU,KAAMyjE,EAAO,CAC9C,EACA,SAAU,GACV,aAAc,GACd,WAAY,EACd,CAAC,CACH,CCrLA,MAAMC,GAAsC,IAAI,IAE1CC,GAA2B,OAAO,IAAI,2BAA2B,EAEhE,SAASC,IAAiC,CAC/C,OAAIF,GAAqB,OAAS,IAEhCG,GAAwBH,EAAoB,EAC5CI,GAAeJ,EAAoB,EACnCK,GAAaL,EAAoB,EACjCM,GAAcN,EAAoB,EAClCO,GAAcP,EAAoB,EAClCQ,GAAiBR,EAAoB,EACrCS,GAAqBT,EAAoB,EACzCU,GAAeV,EAAoB,EACnCW,GAAgBX,EAAoB,EACpCY,GAAoBZ,EAAoB,EACxCa,GAAmBb,EAAoB,EACvCc,GAAcd,EAAoB,GAE7BA,EACT,CAEA,SAASe,GAAUC,GAA+BzgH,GAAyB,CACzE,OAAA+9G,GAAW,UAAU/9G,GAAK,EAAE,qCAAsC,CAChE,SAAUA,GAAK,GACf,aAAc,OAAOygH,EAAoB,EACzC,OAAQ,QACV,CAAC,EACM,IAAM,CACX,MAAM,IAAI,MAAM,qDAAqD,CACvE,CACF,CAGA,SAASb,GAAwBc,GAA4B,CAC3D,MAAMC,GAAgC,CAAC,kBAAmB,gBAAiB,MAAO,SAAU,YAAa,QAAQ,EAEjH,UAAW3lF,MAAY2lF,GAA+B,CACpD,MAAMttG,GAAa,OAAO,yBAAyB,kBAAkB,UAAW2nB,EAAQ,EACxF,GAAI3nB,GAAY,CACd,IAASutG,GAAT,SAAcH,GAA+BzgH,GAAyB,CACpE,MAAM2Q,GAAW3Q,GAAK,GACtB,OAAA+9G,GAAW,UAAUptG,EAAQ,2BAA2BqqB,EAAQ,GAAI,CAClE,SAAArqB,GACA,aAAcqqB,GACd,OAAQ,QACV,CAAC,EAEM,IAAM,CACX,MAAM,IAAI,MAAM,UAAYA,GAAW,sCAAsC,CAC/E,CACF,EAXS,IAAA4lF,GAAAA,GAaLvtG,GAAW,OACbqtG,GAAY,IAAIrtG,GAAW,MAAOutG,EAAI,EAEpCvtG,GAAW,KACbqtG,GAAY,IAAIrtG,GAAW,IAAKutG,EAAI,EAElCvtG,GAAW,KACbqtG,GAAY,IAAIrtG,GAAW,IAAKutG,EAAI,CAExC,CACF,CACF,CAGA,SAASf,GAAea,GAA4B,CAClD,MAAMrtG,GAAa,OAAO,yBAAyB,OAAQ,SAAS,EACpE,GAAIA,IAAY,MAAO,CACrB,IAASwtG,GAAT,SAA2BJ,GAA+BzgH,GAAyB,CACjF,MAAM2Q,GAAW3Q,GAAK,GAEtB,SAAS8gH,MAAczvG,GAAiB,CACtC,QAAQ,IAAI,WAAWV,EAAQ,IAAK,GAAGU,EAAI,CAC7C,CACA,MAAO,CACL,IAAKyvG,GACL,KAAMA,GACN,MAAOA,GACP,KAAMA,GACN,MAAOA,GACP,MAAOA,EACT,CACF,EAdS,IAAAD,GAAAA,GAgBTH,GAAY,IAAIrtG,GAAW,MAAOwtG,EAAiB,CACrD,CACIxtG,IAAY,KACdqtG,GAAY,IAAIrtG,GAAW,IAAKmtG,EAAS,CAE7C,CAGA,SAASV,GAAaY,GAA4B,CAChD,SAASK,GAAmBN,GAA+BzgH,GAAyB,CAClF,MAAM2Q,GAAW3Q,GAAK,GACtB,OAAA+9G,GAAW,UAAUptG,EAAQ,yBAA0B,CACrD,SAAAA,GACA,aAAc,QACd,OAAQ,QACV,CAAC,EAEM,YAAaU,GAAiB,CACnC,QAAQ,IAAI,WAAWV,EAAQ,IAAK,GAAGU,EAAI,CAC7C,CACF,CACA,MAAMgC,GAAa,OAAO,yBAAyB,OAAQ,OAAO,EAC9DA,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,MAAO0tG,EAAkB,EAElD1tG,IAAY,KACdqtG,GAAY,IAAIrtG,GAAW,IAAKmtG,EAAS,CAE7C,CAEA,SAASP,GAAiBS,GAA4B,CACpD,SAASM,GAAuBC,GAAyBjhH,GAAyB,CAChF,MAAM2Q,GAAW3Q,GAAK,GACtB,OAAO,YAAmDqR,GAAgB,CACxE,QAASlmC,GAAI,EAAGA,GAAIkmC,GAAK,OAAQlmC,KAAK,CACpC,MAAMwhC,GAAM0E,GAAKlmC,EAAC,EAIZ+1I,GAAY,OAAOv0G,IAAO,EAAE,EAAE,YAAY,EAChD,UAAWw0G,MAAoBzD,GAC7B,GAAIwD,GAAU,SAAS,IAAMC,EAAgB,EAC3C,MAAApD,GAAW,UAAUptG,EAAQ,iBAAiBwwG,EAAgB,gBAAiB,CAC7E,SAAAxwG,GACA,aAAc,YACd,MAAOwwG,GACP,OAAQ,aACV,CAAC,EAEK,IAAI,MAAM,IAAMA,GAAmB,uCAAuC,EAIhFD,GAAU,MAAM,yCAAyC,IAC3DnD,GAAW,UAAUptG,EAAQ,iDAAkD,CAC7E,SAAAA,GACA,aAAc,YACd,MAAOhE,GACP,OAAQ,aACV,CAAC,EACD0E,GAAKlmC,EAAC,EAAI,KAAU,SAASkmC,GAAKlmC,EAAC,CAAC,EAExC,CAEA,MAAI,eAAW81I,EAAc,EAC3B,OAAOA,GAAe,MAAM,KAAM5vG,EAAI,CAE1C,CACF,CACA,MAAM+vG,GAAc,CAClB,OAAO,yBAAyB,QAAQ,UAAW,WAAW,EAC9D,OAAO,yBAAyB,QAAQ,UAAW,WAAW,EAC9D,OAAO,yBAAyB,QAAQ,UAAW,oBAAoB,EACvE,OAAO,yBAAyB,UAAU,UAAW,iBAAiB,CACxE,EAEA,UAAW/tG,MAAc+tG,GACnB/tG,IAAY,KACdqtG,GAAY,IAAIrtG,GAAW,IAAK2tG,EAAsB,EAEpD3tG,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,MAAO2tG,EAAsB,CAG9D,CAEA,SAASd,GAAqBQ,GAA4B,CACxD,SAASW,GAA2BJ,GAAyBjhH,GAAyB,CACpF,MAAM2Q,GAAW3Q,GAAK,GACtB,OAAO,SAAoD2M,GAAc9kC,GAAmB,CAC1F,GAAI8kC,IAAO+wG,GAAkB,SAAS/wG,EAAG,EACvC,OAAAoxG,GAAW,UAAUptG,EAAQ,oBAAoBhE,EAAG,GAAI,CACtD,SAAAgE,GACA,aAAc,gBACd,MAAOhE,GACP,OAAQ,UACV,CAAC,EACM,SAAS,uBAAuB,EAEzC,MAAI,eAAWs0G,EAAc,EAC3B,OAAOA,GAAe,MAAM,KAAM,CAACt0G,GAAK9kC,EAAO,CAAC,CAEpD,CACF,CACA,MAAMwrC,GAAa,OAAO,yBAAyB,SAAS,UAAW,eAAe,EAClFA,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,MAAOguG,EAA0B,CAEhE,CAEA,SAASrB,GAAcU,GAA4B,CACjD,SAASY,GAAoBL,GAAyBjhH,GAAyB,CAC7E,MAAM2Q,GAAW3Q,GAAK,GACtB,OAAO,SAAkD7tB,GAAalM,GAAY,CAChF,MAAMs7I,GAAWpvI,IAAM,UAAU,YAAY,GAAK,GAElD,GAAIA,IAAQurI,GAAkB,SAAS6D,EAAQ,EAC7C,OAAAxD,GAAW,UAAUptG,EAAQ,oBAAoB4wG,EAAQ,GAAI,CAC3D,SAAA5wG,GACA,aAAc,cACd,MAAO4wG,GACP,OAAQ,aACV,CAAC,EACM,SAAS,uBAAuB,EAEzC,MAAI,eAAWN,EAAc,EAC3B,OAAOA,GAAe,KAAK,KAAM9uI,GAAMlM,EAAG,CAE9C,CACF,CAEA,SAASu7I,GAAmCP,GAAyBjhH,GAAyB,CAC5F,MAAM2Q,GAAW3Q,GAAK,GACtB,OAAO,SAA4D9oB,GAAmB/E,GAAa,CACjG,MAAMovI,GAAWpvI,IAAM,UAAU,YAAY,GAAK,GAClD,GAAIA,IAAQurI,GAAkB,SAAS6D,EAAQ,EAC7C,OAAAxD,GAAW,UAAUptG,EAAQ,oBAAoB4wG,EAAQ,GAAI,CAC3D,SAAA5wG,GACA,aAAc,wBACd,MAAO4wG,GACP,OAAQ,aACV,CAAC,EAEM,SAAS,uBAAuB,EAEzC,MAAI,eAAWN,EAAc,EAC3B,OAAOA,GAAe,KAAK,KAAM/pI,GAAU/E,EAAI,CAEnD,CACF,CAEA,MAAMivI,GAAc,CAClB,OAAO,yBAAyB,KAAK,UAAW,cAAc,EAC9D,OAAO,yBAAyB,KAAK,UAAW,cAAc,CAChE,EAEA,UAAW/tG,MAAc+tG,GACnB/tG,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,IAAKiuG,EAAmB,EAIvD,MAAMG,GAAqB,OAAO,yBAAyB,QAAQ,UAAW,uBAAuB,EACjGA,IAAoB,OACtBf,GAAY,IAAIe,GAAmB,IAAKD,EAAkC,CAE9E,CAGA,SAASzB,GAAcW,GAA4B,CAEjD,SAASgB,GAAoBT,GAAyBjhH,GAAyB,CAC7E,MAAM2Q,GAAW3Q,GAAK,GACtB,OAAO,YAAgDqR,GAAc,CACnE,IAAIswG,GAAgBtwG,GACpB,MAAMuwG,GAAwBvwG,IAAM,OAAQl/B,IAAS,CAACurI,GAAkB,SAASvrI,GAAK,SAAS,YAAY,CAAC,CAAC,EAC7GwvI,GAAgBC,GAEZD,GAAc,SAAWC,GAAsB,QACjD7D,GAAW,UAAUptG,EAAQ,oCAAqC,CAChE,SAAAA,GACA,aAAc,SACd,MAAOU,IAAM,OAAQl/B,IAASurI,GAAkB,SAASvrI,GAAK,SAAS,YAAY,CAAC,CAAC,GAAG,KAAK,GAAG,GAAK,GACrG,OAAQ,aACV,CAAC,KAGC,eAAW8uI,EAAc,GAC3BA,GAAe,MAAM,KAAMU,EAAa,CAI5C,CACF,CAGA,SAASE,GAAyBZ,GAAyBjhH,GAAyB08G,GAAiC,CACnH,MAAM/rG,GAAW3Q,GAAK,GACtB,OAAO,SAAkD2M,GAAY,CACnE,MAAM40G,GAAW50G,IAAK,UAAU,YAAY,GAAK,GACjD,GAAIA,IAAO+wG,GAAkB,SAAS6D,EAAQ,EAC5C,OAAAxD,GAAW,UAAUptG,EAAQ,oBAAoB4wG,EAAQ,GAAI,CAC3D,SAAA5wG,GACA,aAAc,cACd,MAAO4wG,GACP,OAAQ,aACV,CAAC,EAEM,SAAS,uBAAuB,EAKzC,GAAI7E,IAAc/vG,IAAO40G,KAAa,UAAY50G,cAAe,kBAAmB,CAClF8vG,GAAsB9vG,GAAI,IAAK+vG,EAAU,EACtC,KAAK,IAAM,CACV/vG,GAAI,QAAQ,KAAKA,GAAK,IAAI,MAAM,MAAM,CAAC,CACzC,CAAC,EACA,MAAOxrB,IAAQ,CACdwrB,GAAI,SAAS,KAAKA,GAAK,IAAI,WAAW,QAAS,CAAE,MAAOxrB,EAAI,CAAC,CAAC,CAChE,CAAC,EACH,MACF,CACA,MAAI,eAAW8/H,EAAc,EAC3B,OAAOA,GAAe,KAAK,KAAMt0G,EAAG,CAExC,CACF,CAEA,MAAMy0G,GAAc,CAClB,OAAO,yBAAyB,QAAQ,UAAW,QAAQ,EAC3D,OAAO,yBAAyB,QAAQ,UAAW,SAAS,EAC5D,OAAO,yBAAyB,QAAQ,UAAW,OAAO,EAC1D,OAAO,yBAAyB,QAAQ,UAAW,QAAQ,EAC3D,OAAO,yBAAyB,SAAS,UAAW,QAAQ,EAC5D,OAAO,yBAAyB,SAAS,UAAW,SAAS,CAC/D,EAEA,UAAW/tG,MAAc+tG,GACnB/tG,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,MAAOquG,EAAmB,EAIzD,MAAMI,GAAwB,OAAO,yBAAyB,KAAK,UAAW,aAAa,EACvFA,IAAuB,OACzBpB,GAAY,IAAIoB,GAAsB,MAAOD,EAAwB,CAEzE,CAGA,SAAS1B,GAAeO,GAA4B,CAClD,MAAMrtG,GAAa,OAAO,yBAAyB,OAAO,UAAW,aAAa,EAClF,SAAS0uG,GAAyBd,GAAyB,CACzD,OAAO,YAAgD5vG,GAAiB,CAItE,GAAI,CACF,MAAMmuG,MAAqB,cAAUnuG,EAAI,KACrC,eAAW4vG,EAAc,GAC3BA,GAAe,MAAM,KAAMzB,EAAO,CAEtC,MAAY,CACV,MAAM,IAAI,MAAM,2CAA2C,CAC7D,CACF,CACF,CACInsG,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,MAAO0uG,EAAwB,CAE9D,CAGA,SAAS3B,GAAgBM,GAA4B,CACnD,MAAMrtG,GAAa,OAAO,yBAAyB,SAAS,UAAW,aAAa,EAChFA,IAAY,KACdqtG,GAAY,IAAIrtG,GAAW,IAAK,IACvB,IACE,MAEV,EAGH,MAAM2uG,GAA2B,CAAC,OAAO,EACzC,UAAWC,MAAUD,GAA0B,CAC7C,MAAM3uG,GAAa,OAAO,yBAAyB,SAAS,UAAW4uG,EAAM,EACzE5uG,IAAY,KACdqtG,GAAY,IAAIrtG,GAAW,IAAKmtG,EAAS,EAEvCntG,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,MAAOmtG,EAAS,CAE/C,CACF,CAEA,eAAeH,GAAoBK,GAA4B,CAO7D,MAAMwB,GAAuB,QAAQ,IAAI,OAAQ,QAAQ,EAGzD,GAAI,CAACA,IAAgB,OAAO,OAAOA,GAAcxC,EAAwB,EACvE,OAEF,MAAMyC,GAAmCD,GAAa,UAAU,yBAIhE,SAASE,IAA8B,CACrC,OAAO,YAAa/wG,GAA2D,CAC7E,OAAIA,GAAK,SAAW,EACX8wG,GAAiC,MAAMD,GAAc7wG,EAAI,EAE3D8wG,GAAiC,KACtCD,GACA7wG,GAAK,CAAC,EACN8sG,GAA8B9sG,GAAK,CAAC,CAAC,CACvC,CACF,CACF,CACAqvG,GAAY,IAAIwB,GAAa,UAAU,yBAA0BE,EAA2B,EAC5F,QAAQ,IAAIF,GAAcxC,GAA0B,CAAC,CAAC,CACxD,CAEA,eAAeY,GAAmBI,GAA4B,CAC5D,MAAMrtG,GAAa,OAAO,yBAAyB,OAAQ,aAAa,EAExE,SAAS0uG,GAAyBd,GAAyB,CACzD,OAAO,YAAgD5vG,GAAiB,CAItE,GAAI,CACF,MAAMmuG,MAAqB,cAAUnuG,EAAI,KACrC,eAAW4vG,EAAc,GAC3BA,GAAe,MAAM,KAAMzB,EAAO,CAEtC,MAAY,CACV,MAAM,IAAI,MAAM,2CAA2C,CAC7D,CACF,CACF,CAEInsG,IAAY,OACdqtG,GAAY,IAAIrtG,GAAW,MAAO0uG,EAAwB,CAE9D,CAQO,SAASM,GAAgBC,GAAsD,CACpFjC,GAAoBZ,EAAoB,CAE1C,CAEO,SAASc,GAAcG,GAA4B,CAWxD,SAAS6B,GAAoBC,GAAwB,CAEnD,SAAK,eAAWA,EAAa,EAGtB,YAA4BnxG,GAAiB,CAClD,MAAMoxG,GAASD,GAAc,MAAM,KAAMnxG,EAAI,EAC7C,OAAAwtG,GAAiC4D,EAAM,EAChCA,EACT,EANSD,EAOX,CACA9B,GAAY,IAAI,aAAW6B,EAAmB,CAChD,C,4BC5fO,eAAeG,GACpBxiH,GACAF,GACgD,CAChD,GAAI,CAAC29G,GAAwBz9G,EAAa,EAExC,OAAOA,GAGT,MAAMyiH,GAAe,MAAM,QAAQ,QAAQziH,GAAc,MAAM,EAU/D,GALI,QAAQ,IAAIyiH,GAAc,OAAO,GACnC,QAAQ,IAAIA,GAAc,QAASC,GAAmB,QAAQ,IAAID,GAAc,OAAO,EAAG3iH,EAAI,CAAC,EAI7F,QAAQ,IAAI2iH,GAAc,YAAY,EAAG,CAC3C,MAAMlzI,GAA4C,QAAQ,IAAIkzI,GAAc,YAAY,EACxF,OAAO,QAAQlzI,EAAU,EAAE,QAAQ,CAAC,CAACsc,GAAK1nB,EAAK,IAAM,CACnD,QAAQ,IAAIoL,GAAYsc,GAAK62H,GAAmBv+I,GAAO27B,EAAI,CAAC,CAC9D,CAAC,EACD,QAAQ,IAAI2iH,GAAc,aAAclzI,EAAU,CACpD,CAQA,GALI,QAAQ,IAAIkzI,GAAc,MAAM,GAClC,QAAQ,IAAIA,GAAc,OAAQC,GAAmB,QAAQ,IAAID,GAAc,MAAM,EAAG3iH,EAAI,CAAC,EAI3F,QAAQ,IAAI2iH,GAAc,uBAAuB,EAAG,CACtD,MAAM1gE,GAAyD,QAAQ,IAAI0gE,GAAc,uBAAuB,EAChH,UAAWzgE,MAAkBD,GACvB,QAAQ,IAAIC,GAAgB,WAAW,GACzC,QAAQ,IAAIA,GAAgB,YAAa0gE,GAAmB,QAAQ,IAAI1gE,GAAgB,WAAW,EAAGliD,EAAI,CAAC,EAG/G,QAAQ,IAAI2iH,GAAc,wBAAyB1gE,EAAe,CACpE,CAGA,GAAI,QAAQ,IAAI0gE,GAAc,yBAAyB,EAAG,CACxD,MAAME,GAA6D,QAAQ,IACzEF,GACA,yBACF,EACA,UAAWG,MAAoBD,GACzB,QAAQ,IAAIC,GAAkB,WAAW,GAC3C,QAAQ,IACNA,GACA,YACAF,GAAmB,QAAQ,IAAIE,GAAkB,WAAW,EAAG9iH,EAAI,CACrE,EAGJ,QAAQ,IAAI2iH,GAAc,0BAA2BE,EAAiB,CACxE,CAGA,GAAI,QAAQ,IAAIF,GAAc,aAAa,EAAG,CAC5C,MAAMI,GAAyD,QAAQ,IAAIJ,GAAc,aAAa,GAAK,CAAC,EAE5G,SAAW,CAAC52H,GAAK1nB,EAAK,IAAK,OAAO,QAAQ0+I,EAAW,EAC/C,CAAC1+I,GAAM,MAAQ,IAAC,eAAWA,GAAM,IAAI,GAGzC,QAAQ,IAAI0+I,GAAah3H,GAAK,CAC5B,GAAG1nB,GACH,KAAMu+I,GAAmBv+I,GAAM,KAAM27B,EAAI,CAC3C,CAAC,EAEH,QAAQ,IAAI2iH,GAAc,cAAeI,EAAW,CACtD,CAEA,OAAO7iH,EACT,CAEA,MAAM0iH,GAAqB,CACzBI,GACAtxG,KACqC,CACrC,MAAMuxG,GAAc,QAAY51I,OAE5B,QAAC,OACC,sBAAqBqkC,GAAW,GAChC,MAAO,CAAE,OAAQA,GAAW,OAAS,KAAW,KAAOA,GAAW,OAAS,KAAW,MAAQ,OAAS,MAAO,EAE9G,oBAACsxG,GAAA,CAAkB,GAAG31I,EAAA,CAAO,EAC/B,CAEH,EACD,OAAA41I,GAAY,YAAc,kBAAkBD,GAAiB,aAAeA,GAAiB,MAAQ,WAAW,IACzGC,EACT,ECtGMC,GAAoB,IAAI,IACxBC,GAA0C,CAAC,EAE1C,eAAeC,GAA4B,CAAE,SAAAzyG,EAAS,EAAiD,CAC5GyuG,GAAa,EACb,GAAI,CACF,MAAM1tG,GAAa+rG,GAAkB9sG,EAAQ,EAC7C,OAAKuyG,GAAkB,IAAIvyG,EAAQ,GACjCuyG,GAAkB,IAAIvyG,GAAU0yG,GAA8B3xG,EAAU,CAAC,EAEpEwxG,GAAkB,IAAIvyG,EAAQ,CACvC,OAASv8B,GAAG,CACV,MAAMW,GAAQ,IAAI,MAAM,2BAA2B47B,EAAQ,oBAAsBv8B,EAAC,EAClF,MAAA4pI,GAASjpI,GAAO,CACd,SAAA47B,GACA,MAAO,OAAOv8B,EAAC,CACjB,CAAC,EACKW,EACR,CACF,CAEA,eAAesuI,GAA8BrjH,GAAiD,CAC5F,OAAAi+G,GAAQ,uBAAwB,CAC9B,SAAUj+G,GAAK,EACjB,CAAC,EACM,IAAI,QAAQ,MAAOsgC,GAASC,KAAW,CAC5C,MAAMk/E,GAAuBE,GAA+B,EAC5D,IAAInC,GAKJ,SAAS8F,GAAmBd,GAAyC,CACnE,GAAI7D,GAAa6D,EAAa,EAAG,CAC/B,MAAM/+D,GAAU86D,GAAyBiE,GAAexiH,GAAK,EAAE,EAE/D,OAAA4+G,GAAiCn7D,EAAO,EACjCA,EACT,MACEs7D,GAAwByD,EAAa,EAIvC,MAAMe,GAAmB9D,GAAqB,IAAI+C,EAAa,EAC/D,GAAIe,GACF,OAAOA,GAAiBf,GAAexiH,GAAMw9G,EAAkB,EAIjE,MAAMgG,GAAiBnB,GAAgBG,EAAa,EACpD,OAAIgB,IAGGhB,EACT,CAGAhF,MAAqB,MAAyB,OAAQ,CAGpD,mBAAA8F,GACA,cAAe,KACf,mBAAoBtE,GAEpB,WAAY,OAAO,0BAA0B,CAK3C,gBAAiB,OAAO,SACxB,aAAc,SAAUxyG,MAAiB6E,GAAiB,CACxD,OAAO,WAAW7E,GAAI,EAAG,GAAG6E,EAAI,CAClC,EACA,IAAI,QAAS,CAGX,OAAO,QAAQ,IAAI,OAAQ,QAAQ,CACrC,EACA,IAAI,OAAQ,CAEV,OAAO,QAAQ,IAAI,OAAQ,OAAO,CACpC,EACA,IAAI,QAAS,CACX,OAAO,QAAQ,IAAI,OAAQ,QAAQ,CACrC,EACA,IAAI,GAAI,CACN,OAAO,QAAQ,IAAI,OAAQ,QAAQ,CACrC,EACA,IAAI,iBAA4B,CAgB9B,GAfK8xG,GAAenjH,GAAK,GAAK,kBAAkB,IAC9CmjH,GAAenjH,GAAK,GAAK,kBAAkB,EAAI,GAC/Ci+G,GAAQ,sCAAuC,CAC7C,QAAS,OACT,SAAUj+G,GAAK,GACf,kBAAmBA,GAAK,GACxB,OAAQ,SACR,YAAa,SACb,IAAK,iBACP,CAAC,GAMCj1B,EAAA,EAAO,UAAU,MAAQ,cAC3B,MAAM,IAAI,MACR,YAAYi1B,GAAK,EAAE,gGACrB,EAEA,eAAQ,MACN,GAAGA,GAAK,GAAG,YAAY,CAAC,gGAC1B,EAEKj1B,EAAA,EAAO,QAChB,EAOA,MAAM,OACJ04I,GACAC,GACAC,GACe,CACf,IAAIxhG,GACAyhG,GACA,MAAM,QAAQH,EAAgB,GAChCthG,GAAeshG,GACfG,GAAUF,KAEVvhG,GAAeuhG,GACfE,GAAUD,IAGZ,GAAI,CACF,MAAME,GAAe,MAAMC,GAA0B3hG,GAAcniB,EAAI,EAEjE+jH,GAAmBH,GAAQ,MAAM,KAAMC,EAAY,EAInD3jH,GAAgB,MAAMwiH,GAAwBqB,GAAkB/jH,EAAI,EAC1EsgC,GAAQpgC,EAAa,CACvB,OAAS9rB,GAAG,CACV,MAAMW,GAAQ,IAAI,MAAM,qCAAqCirB,GAAK,EAAE,KAAO5rB,EAAC,EAC5E4pI,GAASjpI,GAAO,CACd,SAAUirB,GAAK,GACf,MAAO,OAAO5rB,EAAC,CACjB,CAAC,EACDmsD,GAAOxrD,EAAK,CACd,CACF,CACF,CAAC,CACH,CAAC,EAEDwoI,GAAiCC,EAAkB,EAGnD,IAAIV,GAAa,GACjB,GAAI,CACFA,GAAa,MAAMD,GAAc78G,EAAI,CACvC,OAAS5rB,GAAG,CACV,MAAMW,GAAQ,IAAI,MAAM,8BAA8BirB,GAAK,EAAE,KAAO5rB,EAAC,EACrE4pI,GAASjpI,GAAO,CACd,SAAUirB,GAAK,GACf,MAAO,OAAO5rB,EAAC,CACjB,CAAC,EACDmsD,GAAOxrD,EAAK,CACd,CAEA,GAAI,CAIFyoI,GAAmB,SAASV,EAAU,CACxC,OAAS1oI,GAAG,CACV,MAAMW,GAAQ,IAAI,MAAM,wBAAwBirB,GAAK,EAAE,oBAAsB5rB,EAAC,EAC9E4pI,GAASjpI,GAAO,CACd,SAAUirB,GAAK,GACf,MAAO,OAAO5rB,EAAC,CACjB,CAAC,EACDmsD,GAAOxrD,EAAK,CACd,CACF,CAAC,CACH,CASA,eAAe+uI,GAA0BE,GAAgBtyG,GAA+B,CACtF,MAAMxR,GAAgB,CAAC,EACjB+jH,GAA8B,CAClC,GAAIvyG,GAAW,GACf,IAAKA,GAAW,OAChB,QAASxR,EACX,EAGM2jH,GAA8C,CAAC,EACrD,UAAWK,MAAOF,GAAM,CACtB,IAAIG,GAAc,KAA0B,IAAID,EAAG,EAiBnD,GAfI,OAAOC,IAAgB,aACzBA,GAAc,MAAMA,GAAY,GAE9BA,IAAa,eACfA,GAAcA,GAAY,SAGxBD,KAAQ,WACVC,GAAcF,IAGZC,KAAQ,YACVC,GAAcjkH,IAGZ,CAACikH,GAAa,CAChB,MAAMpvI,GAAQ,IAAI,MAAM,0CAA0CmvI,EAAG,EAAE,EACvE,MAAAlG,GAASjpI,GAAO,CACd,SAAU28B,GAAW,GACrB,WAAYwyG,GACZ,MAAO,OAAOnvI,EAAK,CACrB,CAAC,EACKA,EACR,CACA8uI,GAAa,KAAKM,EAAW,CAC/B,CACA,OAAON,EACT,C,wCCrPA,IAAIO,GAA2CC,GAExC,SAASC,GAAuBC,GAA8B,CACnEH,GAAsBG,EACxB,CAEO,eAAeC,GAAkC,CAAE,SAAA7zG,EAAS,EAAoD,CAErH,OAAM,MAAM8zG,GAAgC,CAAE,SAAA9zG,EAAS,CAAC,EAIjDyzG,GAAoB,CAAE,SAAAzzG,EAAS,CAAC,EAH9B,EAIX,CAMO,eAAe8zG,GAAgC,CAAE,SAAA9zG,EAAS,EAAoD,CAkBnH,MAhBI,CAAS5lC,EAAA,EAAO,eAAe,wBAMjC,OAAO,SAAS,OAAO,SAAS,WAAW,GAAKA,EAAA,EAAO,UAAU,MAAQ,eAUvE,CAAC,MAAW,WACP,GAIF25I,GAAoC,CAAE,SAAA/zG,EAAS,CAAC,CACzD,CAEA,eAAe+zG,GAAoC,CAAE,SAAA/zG,EAAS,EAAoD,CAChH,GAAI,CAEF,MAAMe,GAAa,QAAM,MAAkBf,GAAU,CAAE,eAAgB,EAAM,CAAC,EAC9E,OAAOe,GAAW,gBAAkB,KAAoB,SAAWA,GAAW,YAAc,UAC9F,MAAY,CACV,GAAI,CAEF,MAAMizG,GAAU,QAAM,OAAiBh0G,EAAQ,EAC/C,OAAOg0G,GAAQ,gBAAkB,KAAoB,SAAWA,GAAQ,YAAc,UACxF,MAAY,CACV,MAAO,EACT,CACF,CACF,CAKO,eAAeN,GAA+B,CAAE,SAAA1zG,EAAS,EAAoD,CAClH,MAAO,EAAQ5lC,EAAA,EAAO,iCAAiC,SAAS4lC,EAAQ,CAC1E,CCvEO,eAAei0G,GAAsB,CAC1C,iBAAAC,GACA,iBAAAC,GACA,SAAAn0G,GACA,aAAAo0G,EACF,EAAgD,CAC9C,MAAMC,GAAeD,GAAaF,EAAgB,EAC5CI,GAAeF,GAAaD,EAAgB,EAC5CzwG,GAAO2wG,IAAgBC,GAE7B,GAAI,CAAC5wG,GAAM,CACT,QAAQ,KAAK,6CAA6C1D,EAAQ,GAAI,CAAE,iBAAAk0G,GAAkB,iBAAAC,EAAiB,CAAC,EAC5G,MACF,CAEA,GAAI,CACF,MAAMI,GAAS,MAAM,KAAS,UAAO,OAAkB7wG,EAAI,CAAC,EAC5D,GAAI,CAAC6wG,GAAO,QAAS,CACnB,QAAQ,KAAK,4CAA4Cv0G,EAAQ,GAAI,CACnE,iBAAAk0G,GACA,iBAAAC,GACA,KAAAzwG,EACF,CAAC,EACD,MACF,CAEA,MAAM8wG,GAAWH,GAAeH,GAAmBC,MACnD,MAAkBK,GAAUx0G,GAAUu0G,GAAO,OAAO,CACtD,OAASnwI,GAAO,CACd,QAAQ,KAAK,yCAAyC47B,EAAQ,GAAI,CAChE,iBAAAk0G,GACA,iBAAAC,GACA,MAAA/vI,GACA,KAAAs/B,EACF,CAAC,CACH,CACF,CCjCO,eAAe+wG,GAAmB,CACvC,KAAA/wG,GACA,SAAA1D,GACA,gBAAAivF,GACA,QAAA1mF,GACA,WAAAgkG,GACA,aAAA6H,EACF,EAA6C,CACvC7rG,OACF,MAA0B,CAAE,KAAA7E,GAAM,QAAA6E,GAAS,gBAAA0mF,EAAgB,CAAC,EAI1DmlB,IACF,MAAMH,GAAsB,CAC1B,oBAAkB,MAAoB,EACtC,iBAAkB,KAClB,SAAAj0G,GACA,aAAAo0G,EACF,CAAC,EAGH,MAAMn/G,GAAU,GAAeyO,EAAI,EACnC,GAAIzO,GAEF,OAAI,OAAOA,IAAY,WACd,MAAMA,GAAQ,EAEdA,GAIX,MAAMo3G,MAAa,OAAkB3oG,EAAI,EAGzC,GAAItpC,EAAA,EAAO,eAAe,iBAAkB,CAC1C,MAAMs6I,GAAiB,OAAO,QAAQrI,EAAU,EAC1CsI,GAAe,OAAO,aAAa,EAAE,UAEvCpI,IAAcoI,IAAgB,CAACA,GAAaD,EAAc,GAC5D,KAAS,aAAa,CACpB,UAAW,CACT,CAACA,EAAc,EAAGnI,EACpB,CACF,CAAC,CAEL,CAGA,OAAI,MAAMsH,GAAkC,CAAE,SAAA7zG,EAAS,CAAC,EAC/CyyG,GAA4B,CAAE,SAAAzyG,EAAS,CAAC,EAG1C,KAAS,OAAOqsG,EAAU,EAAE,MAAO5oI,IAAM,CAC9C,IAAIW,GAAQ,IAAI,MAAM,wBAAyB,CAAE,MAAOX,EAAE,CAAC,EAC3D,cAAQ,MAAMW,EAAK,EACnB,KAAc,SAASA,GAAO,CAC5B,KAAAs/B,GACA,SAAA1D,GACA,cAAeuI,IAAW,GAC1B,aAAcgkG,IAAc,GAC5B,gBAAiBtd,GAAgB,SAAS,EAC1C,iBAAkB,OAAO,EAAQ70H,EAAA,EAAO,eAAe,gBAAiB,EACxE,qBAAsBqJ,GAAE,aAAa,SAAW,GAChD,mBAAoBA,GAAE,aAAa,OAAS,GAC5C,oBAAqBA,GAAE,aAAa,SAAW,EACjD,CAAC,EACKW,EACR,CAAC,CACH,CCvDA,MAAMwwI,GAAuClkG,IAAW,IACtDmkG,EAAA,GAAenkG,EAAM,EACrB,MAAMokG,GAA0BpkG,GAAO,iBAAmB,KAAsB,MAWhF,MATa,CACX,KAAMA,GAAO,OACb,QAASA,GAAO,MAAM,QACtB,gBAAiBokG,GACjB,SAAUpkG,GAAO,GACjB,WAAYA,GAAO,WACnB,aAAcA,GAAO,YACvB,CAGF,EAEMqkG,GAA0E,MAAO1lH,GAAMklH,KAAW,CACtG,GAAI,CACF,MAAMhlH,GAAgB,MAAMglH,GAE5B,GAAIhlH,GAAc,OAAQ,CAExB,MAAMmhB,GAAsB,MAAMnhB,GAAc,OAChD,OAAAmhB,GAAO,KAAOrhB,GACd2lH,GAAa,IAAI3lH,GAAK,GAAIqhB,EAAM,EACzBA,EACT,CAEA,QAAAmkG,EAAA,GAAetlH,EAAa,EACtB,IAAI,MAAM,wBAAwB,CAC1C,OAASnrB,GAAO,CAEd,eAAQ,KAAK,+BAAiCirB,GAAK,GAAIjrB,EAAK,KACrD,KAAwBirB,GAAMjrB,EAAK,CAC5C,CACF,EAEM6wI,GAAgG,MACpG5lH,GACAklH,KACG,CACH,MAAMhlH,GAAgB,MAAMglH,GAE5B,GAAIhlH,GAAc,OAAQ,CACxB,MAAM2lH,GAAoC3lH,GAAc,OACxD,OAAA2lH,GAAS,KAAO7lH,GAChB2lH,GAAa,IAAI3lH,GAAK,GAAI6lH,EAAQ,EAC3BA,EACT,CAEA,GAAI3lH,GAAc,WAAY,CAC5B,MAAM2lH,GAAW,IAAI,KACnB3lH,GAAc,UAChB,EACA,OAAA2lH,GAAS,+BAA+B3lH,EAAa,EACrD2lH,GAAS,KAAO7lH,GAChB2lH,GAAa,IAAI3lH,GAAK,GAAI6lH,EAAQ,EAC3BA,EACT,CAEA,MAAM,IAAI,MAAM,4EAA4E,CAC9F,EAEMC,GAAoE,MAAO9lH,GAAMklH,KAAW,CAChG,MAAMhlH,GAAgB,MAAMglH,GAEtB,CAAE,OAAA7jG,GAAS,IAAI,IAAY,EAAInhB,GACrC,OAAAmhB,GAAO,KAAKrhB,EAAI,EAChBqhB,GAAO,KAAOrhB,GACdqhB,GAAO,+BAA+BnhB,EAAa,EAEnD,KAA0B,SAAS,CAAE,SAAUF,GAAK,GAAI,QAASqhB,GAAO,yBAA2B,CAAC,CAAE,CAAC,EACvG,KAAwB,SAAS,CAAE,SAAUrhB,GAAK,GAAI,QAASqhB,GAAO,uBAAyB,CAAC,CAAE,CAAC,EACnG,KAAmB,SAAS,CAAE,SAAUrhB,GAAK,GAAI,QAASqhB,GAAO,kBAAoB,CAAC,CAAE,CAAC,EACzF,KAAuB,SAAS,CAAE,SAAUrhB,GAAK,GAAI,QAASqhB,GAAO,sBAAwB,CAAC,CAAE,CAAC,EAEjGskG,GAAa,IAAI3lH,GAAK,GAAIqhB,EAAM,EACzBA,EACT,EAEM0kG,GAAyF,IAAI,IAE7FC,GACJhmH,IACe,CACf,MAAMimH,GAASF,GAAc,IAAI/lH,GAAK,EAAE,EACxC,GAAIimH,GAEF,OAAOA,GAGT,MAAM,IAAI,MAAM,qCAAqCjmH,GAAK,IAAI,0BAA0BA,GAAK,EAAE,EAAE,CACnG,EAEM2lH,GAA+E,IAAI,IAEnFO,GAAmFx0H,IAA8B,CACrH,MAAMu0H,GAASN,GAAa,IAAIj0H,EAAE,EAClC,GAAIu0H,GAEF,OAAOA,EAIX,EAEME,GAAe,CACnBnmH,GACAomH,GACAC,GAA0Cd,KAC3B,CACf,MAAMU,GAASC,GAAsBlmH,GAAK,EAAE,EAC5C,GAAIimH,GACF,YAAc,SAAS,+BAAgC,CACrD,KAAMjmH,GAAK,OACX,SAAUA,GAAK,GACf,cAAeA,GAAK,MAAM,SAAW,GACrC,aAAcA,GAAK,YAAc,GACjC,gBAAiBA,GAAK,iBAAmB,KAAsB,MAC/D,iBAAkB,OAAO,EAAQj1B,EAAA,EAAO,eAAe,gBAAiB,CAC1E,CAAC,EACM,QAAQ,QAAQk7I,EAAM,EAG/B,GAAIF,GAAc,IAAI/lH,GAAK,EAAE,EAC3B,YAAc,SAAS,sDAAuD,CAC5E,KAAMA,GAAK,OACX,SAAUA,GAAK,GACf,cAAeA,GAAK,MAAM,SAAW,GACrC,aAAcA,GAAK,YAAc,GACjC,gBAAiBA,GAAK,iBAAmB,KAAsB,MAC/D,iBAAkB,OAAO,EAAQj1B,EAAA,EAAO,eAAe,gBAAiB,CAC1E,CAAC,EACMi7I,GAAoBhmH,EAAI,EAGjC,MAAMqR,GAAOg1G,GAAkBrmH,EAAI,EAC7BklH,GAASE,GAAmB/zG,EAAI,EAChCgQ,GAAS+kG,GAAmBpmH,GAAMklH,EAAM,EAC9C,OAAAa,GAAc,IAAI/lH,GAAK,GAAIqhB,EAAM,EAE1B2kG,GAAoBhmH,EAAI,CACjC,EAEasmH,GAAiC,CAC5C,YAActmH,IAA0BmmH,GAAanmH,GAAM0lH,EAAqB,EAChF,iBAAmB1lH,IAA+BmmH,GAAanmH,GAAM4lH,EAA0B,EAC/F,UAAY5lH,IAAwBmmH,GAAanmH,GAAM8lH,EAAmB,EAC1E,SAAWp0H,IAAew0H,GAAgCx0H,EAAE,CAC9D,EAEa60H,GAAc,IAAM,CAC/BR,GAAc,MAAM,EACpBJ,GAAa,MAAM,CACrB,C,8HC3KO,SAASa,EAAY3tH,EAAyC,CACnE,MAAM4tH,EAAe5tH,EAAO,OAC5B,GAAI,IAAC,KAAe4tH,CAAY,EAC9B,MAAM,IAAI,MAAM,qCAAqC,EAGvD,GAAI5tH,aAAkB,IACpB,OAAOA,EAAO,UAAU,EAI1B,MAAM+wE,EAAa,IAAkB,YAAY,EACjDA,EAAW,MAAM,KAAK,CAAC,EAAE,SAAS,CAAE,OAAQ/wE,EAAO,MAAM,CAAE,CAAC,EAE5D4tH,EAAa,aAAa78C,CAAU,EAEpC,MAAMn4B,EAAMm4B,EAAW,MAAM,KAAK,CAAC,EACnC,OAAA/wE,EAAO,aAAa,IAAI,KAA4B44C,CAAG,EAAG,EAAI,EAEvDA,CACT,CAEO,SAASi1E,EAAY7tH,EAAwD,CAIlF,GAAI,CAAC,IAAO,eAAe,oBAAqB,CAC9C,GAAIA,aAAkB,IACpB,OAAOA,EAAO,UAAU,EAExB,MAAM,IAAI,MAAM,gEAAgE,CAEpF,CAEA,GAAIA,aAAkB,IACpB,OAAOA,EAAO,UAAU,EAG1B,GAAIA,aAAkB,IAAmB,CACvC,MAAM8tH,EAAa9tH,EAAO,cAAc,EACxC,GAAI,CAAC8tH,EACH,MAAM,IAAI,MAAM,iCAAiC,EAEnD,OAAOD,EAAYC,EAAW,MAAM,MAAM,CAC5C,CAEA,MAAMF,EAAe5tH,EAAO,OAC5B,GAAI,IAAC,KAAe4tH,CAAY,EAC9B,MAAM,IAAI,MAAM,qCAAqC,EAMvD,MAAMG,EAAa,IAAkB,iBAAiBH,EAAa,UAAU,CAAC,EAC9EA,EAAa,aAAaG,CAAU,EAEpC,MAAMvyH,EAAMuyH,EAAW,MAAM,KAAK,CAAC,EACnC,OAAA/tH,EAAO,aAAa,IAAI,KAA4BxE,CAAG,EAAG,EAAI,EAEvDA,CACT,C,0UCtDO,MAAMwyH,EAAc,CAAC/rH,EAA2BpzB,EAAmBo/I,IAAiB,CAEzF,GAAIA,IAAQ,GAAO,CACjB,MAAM3rG,EAAczzC,EAAM,MAAQ,MAAQ,OAE1C,IAAU,QACR,IAAI,KAAsB,CACxB,SAAO,KAAE,4CAA6C,cAAc,EACpE,QAAM,KAAE,2CAA4C,6CAA6C,EACjG,KAAM,YACN,YAAAyzC,EACA,QAAS,SACT,UAAW,IAAM0rG,EAAY/rH,EAAWpzB,EAAO,EAAK,CACtD,CAAC,CACH,EACA,MACF,CAEAozB,EAAU,YAAYpzB,CAAK,KAC3B,SAAS,MAAkBA,EAAM,GAAG,CAAC,CACvC,EAEaq/I,EAAiB,CAACjsH,EAA2BpzB,IAAsB,CAC9EozB,EAAU,eAAepzB,CAAK,CAChC,EAEas/I,EAAat/I,GAAuB,CAC/C,IAAIkjG,EAAYljG,EACZA,aAAiB,OACnBkjG,EAAYljG,EAAM,aAAa,GAGjC,IAAM,IAAI,KAAmB,KAAK,UAAUkjG,CAAS,CAAC,EACtD,IAAU,KAAK,KAAU,aAAc,CAAC,kDAAkD,CAAC,CAC7F,EAEaq8C,EAAa,CAACnsH,EAA2BpzB,IAAsB,CAC1E,IAAU,QACR,IAAI,KAAoB,CACtB,UAAW,KACX,MAAO,CACL,UAAAozB,EACA,MAAApzB,CACF,CACF,CAAC,CACH,CACF,EAEaw/I,EAAkB,CAACpsH,EAA2BpzB,IAAsB,CAC/E,IAAU,QACR,IAAI,KAAoB,CACtB,UAAW,IACX,MAAO,CACL,MAAAA,EACA,iBAAkBozB,EAAU,KAAK,UACjC,OAAQ,EACV,CACF,CAAC,CACH,CACF,EAEaqsH,EAAsBz/I,GAAsB,CACvD,IAAU,QACR,IAAI,KAAoB,CACtB,UAAW,IACX,MAAO,CACL,UAAW,IAAMA,EAAM,mBAAmB,EAC1C,OAAQ,EACV,CACF,CAAC,CACH,CACF,EAEa0/I,EAAgB1/I,GAAsB,CACjDA,EAAM,QAAQ,CAChB,EAEa2/I,EAAgB3/I,GAAsB,CACjD,MAAM4/I,EAAa,CAAE,GAAG5/I,EAAM,OAAQ,EACtC4/I,EAAW,OAAO,aAAe,GAC5BA,EAAW,OAAO,WAAa,GAC/BA,EAAW,OAAO,WAAa,GACpC5/I,EAAM,cAAc4/I,CAAU,CAChC,EAOO,SAASC,EAAwB7/I,EAAmBiZ,EAA0C,CACnG,MAAM6mI,EAAc,CAClB,SAAU,GACV,UAAA7mI,CACF,EAEA,GAAIjZ,EAAM,SAAU,CAClB,MAAM+/I,KAAuB,KAAe,EAAE,QAAQ//I,EAAM,SAAUA,EAAM,UAAU,EAChFggJ,EAAe,oBAA4BD,CAAoB,EACrE,GAAIC,EAAa,QACf,OAAAF,EAAY,SAAW,wBAChBA,EAGT,MAAI,YAAU7mI,EAAU,IAAI,IAAI,EAAG,CACjC,MAAMgnI,KAAe,MAAiBhnI,EAAU,IAAI,EAAE,GAAG,EACnDinI,KAAa,MAAiBjnI,EAAU,EAAE,EAAE,GAAG,EAC/CknI,EAAe,QAAeH,EAAa,KAAM,OAAWC,CAAY,EAC9EH,EAAY,SAAWE,EAAa,QACpCF,EAAY,UAAY,CACtB,KAAMK,EACN,GAAI,QAAeH,EAAa,GAAI,OAAWE,CAAU,EACzD,IAAK,CACH,KAAMF,EAAa,KACnB,GAAIA,EAAa,EACnB,CACF,CACF,CACF,CAEA,GAAIhgJ,EAAM,UAAW,CACnB,MAAMogJ,KAAwB,KAAe,EAAE,QAAQpgJ,EAAM,UAAWA,EAAM,UAAU,EAExF,GADsB,oBAA4BogJ,CAAqB,EACrD,QAChB,OAAAN,EAAY,SAAW,oBAChBA,EAGT,MAAMO,EAAY,IAAMD,EACxBN,EAAY,UAAY,cAAgBO,EACxC,MAAMzyH,EAAO,gBAAuByyH,EAAWP,EAAY,UAAU,KAAM,EAAK,EAC1EnyH,EAAK,gBAAuB0yH,EAAWP,EAAY,UAAU,GAAI,EAAI,EAE3EA,EAAY,UAAY,CACtB,KAAAlyH,EACA,GAAAD,EACA,IAAK,CACH,KAAAC,EACA,GAAAD,CACF,CACF,CACF,CAEA,OAAI3tB,EAAM,mBACR8/I,EAAY,SAAW,IAGlBA,CACT,CAEO,SAASQ,EAActgJ,EAA2B,CAEvD,MAAMkE,EADS,SAAS,qBAAqB,MAAM,EAAE,CAAC,EACjC,sBAAsB,EAAE,MAE7C,OAAOlE,EAAM,cAAgBA,EAAM,cAAgB,KAAK,KAAKkE,GAASlE,EAAM,QAAQ,EAAI,GAAG,CAC7F,CAEO,SAASugJ,EAA0BvgJ,EAAmBwgJ,EAAiC,CAC5F,MAAMC,EAAgBzgJ,EAAM,QAAUA,EAAM,OAAO,UAAY,EAAI,OAAO,MAAM,aAAe,EACzFivG,EAAejvG,EAAM,SAAS,EAAI,OAAO,MAAM,kBAAoB,EACzE,OAAOwgJ,EAAkBvxC,EAAewxC,EAAgB,YAC1D,CAEO,SAASC,EAAyBttH,EAAkD,CAKzF,UAAWpzB,KAASozB,EAAU,cAAc,EAC1CpzB,EAAM,QAAQ,GAAK,EAGrB,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,CAAqB,CACtD,C,4MC/KA,MAAM2gJ,EAAS,CAACh/H,EAAWlf,IAAckf,EAAIlf,EAAI,KAAK,MAAMkf,EAAIlf,CAAC,EAC3Dm+I,EAAuB,EAEtB,IAAKC,GAAAA,IACVA,EAAA,aAAe,QACfA,EAAA,gBAAkB,WAFRA,IAAAA,GAAA,IAkBZ,MAAM52I,EAAY,CAACnF,EAAsBg8I,KAChC,CACL,sBAAoB,OAAI,CACtB,UAAWh8I,EAAM,QAAQ,EAC3B,CAAC,EACD,gBAAc,OAAI,CAChB,SAAU,WACV,IAAKg8I,EAAcF,EAAuB,KAC1C,OAAQ97I,EAAM,OAAO,OACvB,CAAC,EACD,gBAAc,OAAI,CAChB,SAAU,UACZ,CAAC,CAGH,GAGW0tH,EAAmB,CAAC,CAC/B,MAAA71H,EAAQ,GACR,SAAAJ,EACA,YAAAwkJ,EACA,YAAA75I,EACA,MAAAmG,EACA,QAAAJ,EACA,KAAAxQ,EAAO,QACP,MAAAyrB,EACA,UAAAxgB,EAAY,EACd,IAA6B,CAC3B,KAAM,CAACs5I,EAAoBC,CAAqB,KAAI,YAAS,EAAK,EAC5D,CAACC,EAAkBC,CAAmB,KAAI,YAAS,CAAC,EACpD,CAACC,EAAeC,CAAgB,KAAI,YAAiB1kJ,EAAM,SAAS,CAAC,EACrE2kJ,KAAY,UAAuB,IAAI,EACvC,CAACC,EAAWC,CAAY,KAAI,YAAS,CAAC,EACtC,CAACV,EAAaW,CAAc,KAAI,YAAiB,CAAC,EAClD,CAACC,EAAUC,CAAW,KAAI,YAAiB,CAAC,EAC5CnnI,GAAY,eAEZ1V,KAAQ,MAAU,EAClB4B,GAASuD,EAAUnF,EAAOg8I,CAAW,EAErCl6D,MAAW,UAA+C,KAEhE,aAAU,IAAM,CACd06D,EAAU,SAAS,SAAS,EAAGC,CAAS,CAC1C,EAAG,CAACA,CAAS,CAAC,EAGd,MAAMnkH,EAAa,2BAAuC5iB,EAAS,EAE7D,CAAE,KAAA6iB,EAAM,eAAAC,CAAe,KAAI,MAAY,CAC3C,KAAM0jH,EACN,UAAAxmI,GACA,aAAcymI,EACd,WAAA7jH,EACA,qBAAsB,KACtB,SAAU,OACZ,CAAC,EAEKwkH,KAAY,eACfrjJ,IAAgD,CAC/C8+B,EAAK,aAAa9+B,EAAG,EAErBqoF,GAAS,QAAUroF,EACrB,EACA,CAAC8+B,CAAI,CACP,EAGMwkH,MAAY,UAAuB,IAAI,KAC7C,aAAU,IAAM,CACdL,EAAaM,EAAmBD,GAAU,QAASX,CAAgB,CAAC,CACtE,EAAG,CAACA,CAAgB,CAAC,EAErB,MAAMa,GAAmB,cACvB,CAACrwI,GAA0BhJ,GAAQk+E,GAAS,UAAa,CACvD,MAAM9hE,GAASpc,GAAM,eACf6f,GAAI7f,GAAM,MAEZ6f,GAAEm5H,EAAW,CAAC,IAAM,IACtBh5I,GAAM,MAAQ6f,GAAE,MAAM,EAAGm5H,CAAQ,EAAIhwI,GAAK,MAAQ6W,GAAE,MAAMzD,EAAM,EAEhEpc,GAAM,MAAQ6f,GAAE,MAAM,EAAGm5H,CAAQ,EAAI,MAAUhwI,GAAK,KAAK,IAAM6W,GAAE,MAAMzD,EAAM,EAG/Eu8H,EAAiB34I,GAAM,KAAK,EAC5Bu4I,EAAsB,EAAK,EAE3BE,EAAoB,CAAC,EACrB5kJ,EAASmM,GAAM,KAAK,CACtB,EACA,CAACnM,EAAUmlJ,CAAQ,CACrB,EAEMM,GAAY,cACfv4I,IAA+B,CAC9B,GAAI,CAACu3I,EAAoB,CACvB,GAAIv3I,GAAM,MAAQ,KAAQA,GAAM,MAAQ,KAAOA,GAAM,QAAU,CAC7Dk4I,EAAY/6D,GAAS,QAAS,gBAAkB,CAAC,EACjDq6D,EAAsB,EAAI,EAC1B,MACF,CACA,MACF,CAEA,OAAQx3I,GAAM,IAAK,CACjB,IAAK,YACL,IAAK,SACL,IAAK,YACL,IAAK,aACH,OAAAw3I,EAAsB,EAAK,EACpBE,EAAoB,CAAC,EAE9B,IAAK,QACH,OAAA13I,GAAM,eAAe,EACds4I,GAAiBhB,EAAYG,CAAgB,CAAC,EAEvD,IAAK,YACL,IAAK,UACHz3I,GAAM,eAAe,EACrB,MAAMusB,GAAYvsB,GAAM,MAAQ,YAAc,EAAI,GAClD,OAAO03I,EAAqB5yI,IAAUoyI,EAAOpyI,GAAQynB,GAAW+qH,EAAY,MAAM,CAAC,EACrF,QACE,MACJ,CACF,EACA,CAACC,EAAoBD,EAAaG,EAAkBa,EAAgB,CACtE,EAEME,EAAiB,cAAmBx4I,IAA6D,CACrG43I,EAAiB53I,GAAM,cAAc,KAAK,CAC5C,EAAG,CAAC,CAAC,EAEC7B,GAAS,cACZ6B,IAA6D,CAC5DlN,EAASkN,GAAM,cAAc,KAAK,CACpC,EACA,CAAClN,CAAQ,CACX,KAEA,aAAU,IAAM,CACdklJ,EAAe76D,GAAS,QAAS,YAAY,CAC/C,EAAG,CAAC,CAAC,EAEL,MAAM96E,GAAa,CACjB,YAAA5E,EACA,QAAA+F,EACA,MAAOm0I,EACP,SAAUa,EACV,OAAAr6I,GACA,UAAAo6I,EACF,EAEA,SACE,QAAC,OAAI,UAAWt7I,GAAO,aAAc,MAAOwhB,GAAS,CAAC,EACnD,UAAA84H,MACC,OAAC,KAAM,CACL,mBAAC,OAAI,IAAK3jH,EAAK,YAAa,MAAOC,EAAgB,UAAW52B,GAAO,mBACnE,mBAAC,KACC,UAAU,QACV,SAAW+C,IAAU+3I,EAAa/3I,GAAM,cAAc,WAAa,CAAC,EACpE,IAAK63I,EAML,mBAAC,KACC,UAAAO,GACA,YAAAd,EACA,mBAAoBgB,GACpB,QAAS,IAAMd,EAAsB,EAAK,EAC1C,YAAaC,CAAA,CACf,EACF,EACF,EACF,EAEDj0I,GAAWI,MACV,OAAC,OAAI,UAAW3G,GAAO,aACrB,mBAAC,IAAsB,CAAE,SAAA2G,CAAA,CAAM,EACjC,EAED5Q,IAAS,WACR,OAAC,IAAK,CAAE,GAAGqP,GAAY,IAAK81I,EAA2D,UAAAl6I,CAAA,CAAsB,KAE7G,OAAC,KACE,GAAGoE,GACJ,IAAK81I,EACL,UAAAl6I,EACA,KAAM,EACR,GAEJ,CAEJ,EAEA8qH,EAAiB,YAAc,mBAE/B,SAASsvB,EAAmBI,EAAuCC,EAAqB,CACtF,OAAQD,GAAmB,cAAgB,GAAKC,CAClD,C,kIClOO,SAASC,EAAkB,CAAE,SAAAn5G,EAAU,KAAAwjC,EAAO,IAAK,EAA2B,CACnF,KAAM,CAAE,MAAOziC,EAAY,QAAA98B,CAAQ,KAAI,KAAS,OAAM,KAAkB+7B,CAAQ,CAAC,EAMjF,GAJI/7B,GAIA,CAAC88B,EACH,OAAO,KAGT,MAAMq4G,EAAOr4G,EAAW,KAAK,OAAO,MAC9Bs4G,EAAat4G,EAAW,KACxBu4G,KAAY,MAAW91E,CAAI,EAE3B+1E,EAAYH,KAChB,OAAC,OAAI,IAAKA,EAAM,IAAKC,EAAY,OAAQC,CAAA,CAAW,KAEpD,OAAC,IAAK,CAAC,KAAMt5G,EAAU,MAAM,QAAS,GAGxC,SACE,OAAC,KACC,WAAS,KACP,yDACA,oDACA,CAAE,WAAAq5G,CAAW,CACf,EAEC,SAAAE,CAAA,CACH,CAEJ,C,4JCzBO,SAASC,EACd5rF,EACA6rF,EAC2B,CAC3B,MAAO,CACL,KAAM,aACN,KAAM,CACJ,MAAOC,EAAmB9rF,EAAe6rF,CAAU,CACrD,CACF,CACF,CAEO,SAASE,EACdzxH,EACAsmC,EACAC,EACAC,EAC0B,CAC1B,GAAIxmC,EAAO,OAAS,aAClB,MAAM,IAAI,MAAM,qBAAqB,EAEvC,OAAO,IAAI,IAAyB,CAClC,KAAM,IAAI,KAAgB,CACxB,UAAQ,MAAUumC,CAAO,EACzB,SAAUmrF,EAA8B1xH,EAAQsmC,EAAUE,CAAgB,CAC5E,CAAC,CACH,CAAC,CACH,CAEA,SAASgrF,EAAmB94G,EAAgC64G,EAA4C,CACtG,IAAI5nG,EAA8B,CAAC,EACnC,UAAWzqB,KAASwZ,EAAK,MAAM,KAAK,MAAM,SACpCxZ,aAAiB,MAEfA,EAAM,MAAM,aACdyqB,EAAQA,EAAM,OAAOgoG,EAAsBzyH,EAAOqyH,CAAU,CAAC,EAE7D5nG,EAAM,KAAKioG,EAA6B1yH,CAAK,CAAC,GAKpD,OAAOyqB,CACT,CAEO,SAASioG,EAA6B7xH,EAA6B8xH,EAAwC,CAChH,IAAIC,EACA16H,EAAI,EACNC,EAAI,EACJtkB,EAAQ,EACRC,EAAS,EAEP++I,EAAYhyH,EAEhB,GAAI,EAAEgyH,EAAU,MAAM,gBAAgB,MACpC,MAAM,IAAI,MAAM,gDAAgD,EAIlE/+I,GAAU++I,EAAU,MAAM,aAAeA,EAAU,MAAM,WAAaA,EAAU,MAAM,SAAW,EACjG36H,EAAI26H,EAAU,MAAM,GAAK,EACzB16H,EAAI06H,EAAU,MAAM,GAAK,EACzBh/I,EAAQg/I,EAAU,MAAM,OAAS,EACjC,MAAMC,EAAYD,EAAU,MAAM,aAGlC,IAAIjsH,EAAa,KAAoB,gCAAgCisH,EAAU,MAAM,IAAI,EAgBzF,GAdAD,EAAkB,CAChB,KAAM,iBACN,KAAM,CACJ,EAAA16H,EACA,EAAGy6H,GAAax6H,EAChB,MAAAtkB,EACA,OAAAC,EACA,QAAS,CACP,KAAM,mBACN,KAAM8yB,CACR,CACF,CACF,EAEIksH,EAAW,CACb,MAAMC,EAAwB,CAC5B,KAAM,WACN,MAAOD,CACT,EAEID,EAAU,MAAM,YAClBE,EAAO,UAAYF,EAAU,aAAa,GAGxCA,EAAU,MAAM,kBAClBE,EAAO,UAAYF,EAAU,mBAAmB,GAGlDD,EAAgB,KAAK,OAASG,CAChC,CAEA,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,4BAA4B,EAG9C,OAAOA,CACT,CAEA,SAASH,EAAsBO,EAA6BX,EAAa,GAA6B,CACpG,GAAKA,EAEE,CACL,GAAIW,EAAS,MAAM,gBAAgB,SAAY,MAAeA,EAAS,MAAM,IAAI,EAI/E,MAAO,CAAC,EAGV,GAAIA,EAAS,MAAM,eAAgB,CACjC,KAAM,CAAE,EAAApe,EAAG,EAAAqe,EAAG,YAAAC,CAAY,KAAI,MAA4BF,CAAQ,EAoClE,OAnCeA,EAAS,MAAM,eAAgB,IAAI,CAACrjJ,EAAOuO,IAAU,CAClE,IAAIga,EAAI,EACNC,EAAI,EACF66H,EAAS,MAAM,kBAAoB,KACrC96H,EAAI86H,EAAS,MAAM,EACnB76H,EAAIja,EAAQ02H,IAEZ18G,EAAKha,EAAQg1I,EAAeD,EAC5B96H,EAAI66H,EAAS,MAAM,EAAK,KAAK,MAAM90I,EAAQg1I,CAAW,EAAIte,GAG5D,MAAMhzE,EAAU,CAAE,EAAA1pC,EAAG,EAAAC,EAAG,EAAA86H,EAAG,EAAAre,CAAE,EAqB7B,MAnBmC,CACjC,KAAM,iBACN,KAAM,CACJ,EAAGhzE,EAAQ,EACX,EAAGA,EAAQ,EACX,MAAOA,EAAQ,EACf,OAAQA,EAAQ,EAChB,OAAQ,CACN,KAAM,WACN,MAAOoxF,EAAS,MAAM,aACtB,UAAWA,EAAS,aAAa,EACjC,UAAWA,EAAS,MAAM,eAC5B,EACA,QAAS,CACP,KAAM,mBACN,KAAMrjJ,EAAM,MAAM,GACpB,CACF,CACF,CAEF,CAAC,CAGH,CACA,MAAO,CAAC,CACV,KAjDE,OAAO,CAAC+iJ,EAA6BM,CAAQ,CAAC,CAkDlD,CAEA,SAASR,EACP1xH,EACAsmC,EACAE,EACqB,CAGrB,OAFkBxmC,EAAO,KAAK,MAEb,IAAKzf,GAAS,CAC7B,GAAIA,EAAK,OAAS,iBAChB,OAAO8xI,EAAoB9xI,EAAM+lD,EAAUE,CAAgB,EAE3D,MAAM,IAAI,MAAM,gCAAgCjmD,EAAK,IAAI,EAAE,CAE/D,CAAC,CACH,CAEA,SAAS+xI,EACPvyH,EACAlxB,EACAgjJ,EACAh5H,EACmB,CACnB,IAAI4G,EACJ,OAAI5wB,EAAM,OAAS,QACjB4wB,KAAW,MAAc5wB,EAAOgqB,CAAE,EAElC4G,KAAW,MAAkB5wB,EAAOgqB,CAAE,EAEjC,IAAI,IAAkB,CAC3B,IAAK,aAAaA,GAAMhqB,EAAM,KAAK,EAAE,GACrC,EAAGkxB,EAAS,EACZ,EAAG8xH,GAAa9xH,EAAS,EACzB,MAAOA,EAAS,QAAQ,YAAc,IAAM,GAAKA,EAAS,MAC1D,OAAQA,EAAS,OACjB,WAAYA,EAAS,OACrB,KAAMN,EACN,aAAcM,EAAS,QAAQ,MAC/B,gBAAiBA,EAAS,QAAQ,UAClC,UAAWA,EAAS,QAAQ,SAC9B,CAAC,CACH,CAEO,SAASsyH,EACd9xI,EACA+lD,EACAE,EACmB,CACnB,MAAM33D,EAAQy3D,EAAS/lD,EAAK,KAAK,QAAQ,IAAI,EAE7C,GAAI,CAAC1R,EACH,MAAM,IAAI,MAAM,kBAAkB0R,EAAK,KAAK,QAAQ,IAAI,sCAAsC,EAGhG,IAAIsY,EACJ,OAAI2tC,IACF3tC,EAAK2tC,EAAiB,GAEjB8rF,EAAc/xI,EAAK,KAAM1R,EAAO,OAAWgqB,CAAE,CACtD,C,gECxOO,MAAM05H,EAAwB,CACnC,IAAoB,sBACpB,IAAoB,uBACpB,IAAoB,uBACtB,C,oJCJA,MAAMC,EAAuB,IAEtB,SAASC,EAAkB1iJ,EAAkB,CAElD,GAAIA,EAAM,OAAO,OAAS,EACxB,MAAO,GAIT,MAAM2iJ,EAAc3iJ,EAAM,OAAO,KAAM1B,GAAUA,EAAM,OAAS,KAAU,MAAM,EAMhF,IAAIskJ,EAAiB,GACrB,UAAWtkJ,KAAS0B,EAAM,OACxB,GAAI6iJ,EAAkBvkJ,CAAK,EAAG,CAC5BskJ,EAAiB,GACjB,KACF,CAGF,OAAOA,GAAkBD,IAAgB,MAC3C,CAEO,SAASG,EAAmBljJ,EAAmB,CACpD,MAAO,CAACA,EAAK,KAAMI,GAAU,CAAC0iJ,EAAkB1iJ,CAAK,CAAC,CACxD,CAUO,SAAS6iJ,EAAkBvkJ,EAAc,CAC9C,GAAIA,EAAM,OAAS,KAAU,KAC3B,MAAO,GAGT,IAAIykJ,EAA8B,KAC9BC,EAAa1kJ,EAAM,OAAO,OAASmkJ,EAAuBA,EAAuBnkJ,EAAM,OAAO,OAGlG,QAASiE,EAAI,EAAGA,EAAIygJ,EAAYzgJ,IAAK,CACnC,MAAMkK,EAAOnO,EAAM,OAAOiE,CAAC,EAK3B,GAAIwgJ,IAAiB,MAASt2I,IAAS,MAAQA,EAAOs2I,EACpDA,EAAet2I,MAEf,OAAO,EAEX,CAEA,MAAO,EACT,CAMO,SAASw2I,EAAuBrjJ,EAAmB,CACxD,QAAS2C,EAAI,EAAGA,EAAI3C,EAAK,OAAQ2C,IAAK,CACpC,MAAMhE,KAAY,MAAaqB,EAAK2C,CAAC,CAAC,EACtC,GAAIhE,EAAU,YAAc,QAAaA,EAAU,YAAc,OAC/D,MAAO,EAEX,CACA,MAAO,EACT,CAMO,SAAS2kJ,EAAatjJ,EAA0B,CACrD,OAAOA,EAAK,OAAO,KAAMtB,GAAUA,EAAM,OAAS,KAAU,IAAI,CAClE,CAOO,SAAS6kJ,EAAe9kJ,EAAsBkZ,EAAkB,CACrE,GAAIlZ,EAAU,MAAM,oBAAsB,OAG1C,OAAOA,EAAU,KAAK,kBAAkB,IAAK8nE,GAAe9nE,EAAU,OAAO8nE,CAAU,EAAE,OAAO5uD,CAAQ,CAAC,EAAE,KAAK,GAAG,CACrH,CAQO,SAAS6rI,EAAO/kJ,EAAsBotB,EAA0C,CACrF,GAAIA,aAAe,MACjB,QAASlpB,EAAI,EAAGA,EAAIkpB,EAAI,OAAQlpB,IAC9BlE,EAAU,OAAOkE,CAAC,EAAE,OAAO,KAAKkpB,EAAIlpB,CAAC,CAAC,MAGxC,WAAWjE,KAASD,EAAU,OAC5BC,EAAM,OAAO,KAAKmtB,EAAIntB,EAAM,IAAI,CAAC,EAGrC,GAAI,CACFD,EAAU,QACZ,MAAY,CAIZ,CACF,CAQO,SAASglJ,EAA0BhtI,EAAmB26B,EAAcptC,EAAsB,CAC/FyS,EAAO,OAAO,QAAS/X,GAAiB,CAElCA,EAAM,OAAS,KAAU,OAC3BA,EAAM,OAASA,EAAM,OAAO,IAAK0C,GACxBgwC,EAAO,EAAIhwC,EAAIgwC,EAAOhwC,EAAIgwC,CAClC,GAGH1yC,EAAM,OAAS,CACb,GAAIA,EAAM,QAAU,CAAC,EACrB,OAAQ,CACN,GAAIA,EAAM,QAAQ,QAAU,CAAC,EAC7B,YAAa,CACX,OAAQ0yC,EACR,iBAAkB,EACpB,CACF,CACF,GAGI1yC,EAAM,OAAS,KAAU,QAAUA,EAAM,OAAS,KAAU,SAAWA,EAAM,OAAS,KAAU,QAClGA,EAAM,OAAO,OAAS,CACpB,GAAIA,EAAM,OAAO,QAAU,CAAC,EAC5B,UAAW,CACT,KAAM,OACN,KAAM,CAAC,EAAG,EAAG,EAAG,CAAC,CACnB,CACF,EAEJ,CAAC,CACH,CAUO,SAASglJ,EAAuBC,EAAyB5jI,EAAwB5H,EAA+B,CAErH,MAAMyrI,EAAeD,EAAa,MAClC,GAAI,CAACC,GAAgB,CAACA,EAAa,SAAS,UAAU,EACpD,MAAO,GAGT,MAAMC,EAAgBD,EAAa,QAAQ,WAAY,EAAE,EACnDE,EAAgB/jI,EAAU,KAC7B3f,GAAUA,EAAM,QAAUyjJ,GAAiB,CAACzjJ,EAAM,MAAM,aAAa,gBACxE,EAEA,GAAI,CAAC0jJ,EACH,MAAO,GAIT,MAAMC,EAAmBJ,EAAa,OAAO,KAAMjlJ,GAAUA,EAAM,OAAS,KAAU,IAAI,EACpFslJ,EAAoBF,EAAc,OAAO,KAAMplJ,GAAUA,EAAM,OAAS,KAAU,IAAI,EAE5F,GAAI,CAACqlJ,GAAkB,OAAO,QAAU,CAACC,GAAmB,OAAO,OACjE,MAAO,GAIT,MAAMC,EAAmBF,EAAiB,OAAO,KAAMloJ,GAAUA,GAAS,IAAI,EACxEqoJ,EAAoBF,EAAkB,OAAO,KAAMnoJ,GAAUA,GAAS,IAAI,EAEhF,OAAIooJ,GAAoB,MAAQC,GAAqB,KAC5C,GAIFD,EAAmB9rI,EAAU,KAAK,QAAQ,CACnD,C,iDC7MO,SAASgsI,EACdtrI,EAC2C,CAC3C,MAAO,qBAAsBA,GAAW,SAAUA,CACpD,C,qFCHO,MAAMma,EAA4B,CACvC,GAAI,EACJ,IAAK,UACL,MAAO,UACP,IAAK,GACL,QAAS,GACT,UAAW,GACX,WAAY,GACZ,QAAS,CACX,EAEMoxH,EAAoB,CAAC9lI,EAAoBkN,KACtC,CACL,GAAGlN,EACH,GAAGkN,EAAO,QACV,WAAY,EACd,GAGI64H,KAAc,MAAY,CAC9B,KAAM,SACN,aAAArxH,EACA,SAAU,CACR,WAAYoxH,EACZ,eAAgB,CAAC9lI,EAAOkN,KACf,CACL,GAAGlN,EACH,MAAOkN,EAAO,QACd,WAAYA,EAAO,QAAQ,KAAK,EAAE,OAAS,CAC7C,EAEJ,EACA,cAAgBpL,GAAY,CAC1BA,EAAQ,WAAW,KAAU,UAAU,eAAgBgkI,CAAiB,CAC1E,CACF,CAAC,EAEY,CAAE,WAAAE,EAAY,eAAAC,CAAe,EAAIF,EAAY,QAI1D,EAAe,CACb,OAH2BA,EAAY,OAIzC,C,yLC9BO,MAAMG,EAA2B,CAAC,CAAE,aAAArxE,EAAc,gBAAAsxE,EAAiB,UAAAj7G,EAAW,UAAAkiC,EAAW,UAAAg5E,CAAU,IAAa,CACrH,KAAM,CAACC,EAAcC,CAAe,KAAI,YAAS,EAAE,EAC7CC,KAAY,KAAS,SAAY,CACrC,MAAMnrG,EAAa,QAAM,MAAuBy5B,EAAa,MAAM,GAAG,EACtE,OAAIz5B,GAAcA,EAAW,OAAS,EAC7BA,EAAW,IAAKyT,GAASA,EAAK,IAAI,EAGpC,CAAC,CACV,EAAG,CAACgmB,EAAa,MAAM,GAAG,CAAC,EAErB,CAAC2xE,EAAoBC,CAAqB,KAAI,YAAmB,CAAC,CAAC,KACzE,KACE,IACOF,EAAU,MAIRE,EACLF,EAAU,MAAM,OAAQG,GAAaA,EAAS,YAAY,EAAE,SAASL,EAAa,YAAY,CAAC,CAAC,CAClG,EALSI,EAAsB,CAAC,CAAC,EAOnC,IACA,CAACF,EAAU,MAAOF,CAAY,CAChC,EAEA,MAAM/+I,KAAS,MAAW,GAAc,EAClCq/I,KAAkB,eAAY,IAAM,CACxCP,EAAU,CACZ,EAAG,CAACA,CAAS,CAAC,EAERphJ,EAAQmhJ,EAAkB,gCAAkC,qBAElE,SACE,OAAC,IAAK,CAAC,MAAAnhJ,EAAc,UAAAkmC,EAAsB,OAAQ,GACjD,oBAAC,OACC,oBAAC,KAAE,UAAW5jC,EAAO,SACnB,oBAAC,MACC,QAAQ,mEACR,MAAOutE,EAAa,MAAM,cAAc,MAAM,oBAC/C,wCACyB,QAAC,UAAQ,sBAAY,gBAAY,EAAS,+DAEpE,EACF,KACA,OAAC,KACC,UAAWvtE,EAAO,gBAClB,UAAQ,OAAC,IAAI,CAAC,KAAK,QAAS,GAC5B,eAAa,KACX,sFACA,4BACF,EACA,MAAO++I,EACP,SAAW/4I,GAAMg5I,EAAgBh5I,EAAE,cAAc,KAAK,EACxD,EACCi5I,EAAU,WACT,OAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,4EAA4E,2CAE3F,EACF,KAEA,QAAC,SAAM,UAAWj/I,EAAO,QACvB,oBAAC,SACC,mBAAC,MACC,mBAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,8DAA8D,0BAAc,EAC7F,EACF,EACF,KACA,OAAC,SACE,SAAAk/I,EAAmB,IAAI,CAACE,EAAUriJ,OACjC,OAAC,MACC,mBAAC,MAAI,SAAAqiJ,CAAA,CAAS,GADP,WAAWriJ,CAAC,EAErB,CACD,EACH,GACF,KAEF,QAAC,IAAM,UAAN,CACC,oBAAC,KAAM,CAAC,QAAQ,YAAY,QAAS6mC,EAAW,KAAK,UACnD,mBAAC,KAAK,CAAC,QAAQ,sDAAsD,kBAAM,EAC7E,EACCi7G,MACC,OAAC,KAAM,CAAC,QAAQ,cAAc,QAASQ,EACrC,mBAAC,KAAK,CAAC,QAAQ,uDAAuD,mBAAO,EAC/E,KAEF,OAAC,MACC,QAAS,IAAM,CACbv5E,EAAU,CACZ,EAEA,mBAAC,KAAK,CAAC,QAAQ,0DAA0D,sBAAU,EACrF,GACF,GACF,EACF,CAEJ,C,kJCvFO,MAAMw5E,EAAkD,CAC7D,GAAI,GACJ,QAAS,GACT,OAAQ,CAAC,EACT,KAAM,GACN,SAAU,IACZ,EAEMC,KAA6B,MAAY,CAC7C,KAAM,oBACN,aAAcD,EACd,SAAU,CACR,sBAAuB,CAAC5mI,EAA4BkN,IAAwD,CAC1GlN,EAAM,KAAOkN,EAAO,QAAQ,KAC5BlN,EAAM,GAAKkN,EAAO,QAAQ,EAC5B,EACA,wBAAyB,CAAClN,EAA4BkN,IAC7C05H,EAET,4BAA6B,CAC3B5mI,EACAkN,IACG,CACHlN,EAAM,KAAOkN,EAAO,QAAQ,KAAK,QACjC,OAAOlN,EAAM,OAAO,KACpBA,EAAM,QAAU,OAAO,KAAKA,EAAM,MAAM,EAAE,SAAW,CACvD,EACA,yBAA0B,CACxBA,EACAkN,IACG,CACHlN,EAAM,KAAOkN,EAAO,QAAQ,QAC5BlN,EAAM,OAAO,KAAOkN,EAAO,QAAQ,UACnClN,EAAM,QAAU,OAAO,KAAKA,EAAM,MAAM,EAAE,SAAW,CACvD,EACA,uBAAwB,CACtBA,EACAkN,IACG,CACHlN,EAAM,OAAOkN,EAAO,QAAQ,SAAS,EAAIA,EAAO,QAAQ,UACxDlN,EAAM,QAAU,OAAO,KAAKA,EAAM,MAAM,EAAE,SAAW,CACvD,EACA,0BAA2B,CAACA,EAA4BkN,IAAiD,CACvG,OAAOlN,EAAM,OAAOkN,EAAO,QAAQ,SAAS,EAC5ClN,EAAM,QAAU,OAAO,KAAKA,EAAM,MAAM,EAAE,SAAW,CACvD,EACA,6BAA8B,CAACA,EAA4BkN,IAAmD,CAC5GlN,EAAM,SAAW,CACf,GAAGA,EAAM,SACT,GAAGkN,EAAO,OACZ,CACF,EACA,iBAAkB,IAAM05H,CAC1B,CACF,CAAC,EAEYE,EAAwBD,EAA2B,QAEnD,CACX,4BAAAE,EACA,yBAAAC,EACA,sBAAAC,EACA,wBAAAC,EACA,6BAAAC,EACA,uBAAAC,EACA,0BAAAC,EACA,iBAAAC,CACF,EAAIT,EAA2B,O,+FC5FxB,MAAMU,EAA4B,6CAGlC,SAASC,EAAsCxzH,EAA2B,CAC/E,MAAMyzH,EAAoB,OAAO,eAAe,QAAQF,CAAyB,EAEjF,GAAIE,EAAmB,CACrB,MAAMC,EAAuB,IAAI,gBAAgBD,CAAiB,EAC5DE,EAAqB,KAAgB,UAAU,EAC/CC,EAAqB,IAAI,gBAG/BF,EAAqB,QAAQ,CAACnqJ,EAAO0nB,IAAQ,EAGvC,CAAC0iI,EAAmB,IAAI1iI,CAAG,GAAK0iI,EAAmB,IAAI1iI,CAAG,IAAM,KAClE0iI,EAAmB,OAAO1iI,EAAK1nB,CAAK,CAExC,CAAC,EAGDoqJ,EAAmB,QAAQ,CAACpqJ,EAAO0nB,IAAQ,CACrC1nB,IAAU,IACZqqJ,EAAmB,OAAO3iI,EAAK1nB,CAAK,CAExC,CAAC,EAED,UAAW0nB,KAAO,MAAM,KAAK2iI,EAAmB,KAAK,CAAC,EAE/C3iI,EAAI,WAAW,MAAM,IAKrB+O,EAAU,MAAM,YAAY,UAAU/O,EAAI,QAAQ,OAAQ,EAAE,CAAC,GAChE2iI,EAAmB,OAAO3iI,CAAG,GAIjC,MAAM4iI,EAAcD,EAAmB,SAAS,EAC5CC,GACF,KAAgB,QAAQ,CAAE,OAAQA,CAAY,CAAC,CAEnD,CACF,CAKO,SAASC,EAA0CC,EAAyBvsG,EAAc,CAM/F,GALI,CAAC,IAAO,eAAe,sCAKvB,CAACA,EACH,OAGF,MAAM+S,EAAsC,CAAC,EAC7Cw5F,EAAO,QAAQ,CAACxqJ,EAAO0nB,IAAQ,CAC7BspC,EAAYtpC,CAAG,EAAI1nB,CACrB,CAAC,EAED,MAAMyqJ,EAAyB,OAAO,YACpC,OAAO,QAAQz5F,CAAW,EAAE,OAC1B,CAAC,CAACtpC,CAAG,IAAMA,EAAI,WAAW,MAAM,GAAKA,IAAQ,QAAUA,IAAQ,MAAQA,IAAQ,UACjF,CACF,EAEMgjI,EAAoB,OAAO,YAC/B,OAAO,QAAQD,CAAS,EAAE,OAAO,CAAC,CAAC/iI,EAAK1nB,CAAK,IAAM,EAAE,MAAM,QAAQA,CAAK,GAAKA,EAAM,SAAW,EAAE,CAClG,EAGI,OAAO,KAAK0qJ,CAAiB,EAAE,OAAS,EAC1C,OAAO,eAAe,QAAQV,EAA2B,KAAQ,UAAU,GAAIU,CAAiB,CAAC,EAEjG,OAAO,eAAe,WAAWV,CAAyB,CAE9D,C,oHCnEO,SAASW,EAAI3wH,EAAUmjF,EAAgB,CAC5C,GAAI,CACF,IAAI53E,EAAMvL,EACV,UAAWtS,KAAOy1F,EAChB53E,EAAMA,EAAI7d,CAAG,EAEf,OAAO6d,CACT,MAAc,CACZ,MACF,CACF,CAEO,SAASqlH,EAAU5lI,EAAsB9e,EAAsB,CACpE,OACE,OAAO8e,GAAM,OAAO9e,IAClB,OAAO8e,GAAM,UAAYA,IAAM9e,GAC9B,MAAM,QAAQ8e,CAAC,GAAKA,EAAE,SAAW9e,EAAE,QAAU8e,EAAE,MAAM,CAACugB,EAAKz+B,IAAMy+B,IAAQr/B,EAAEY,CAAC,CAAC,EAEpF,CAEO,SAAS+jJ,EAAQ7lI,EAA+B9e,EAA+B,CACpF,OAAO8e,IAAM9e,GAAM8e,GAAK9e,GAAK8e,EAAE,WAAa9e,EAAE,UAAY0kJ,EAAU5lI,EAAE,KAAM9e,EAAE,IAAI,GAAK0kJ,EAAU5lI,EAAE,MAAO9e,EAAE,KAAK,CACnH,CAEO,SAAS4kJ,EACd7+G,EACAD,EACAu7D,EACAD,EACAE,EACA,CAIA,MAAM4E,EAAmB2+C,EAAwB9+G,CAAO,EAClD+6D,EAAmBh7D,EACnBg/G,EAAiBC,EAAkBjkD,EAAiB,aAAcoF,EAAiB,YAAY,EAC/FzE,EAA0BujD,EAAuBlkD,EAAkBoF,EAAkB9E,CAAa,EAClG6jD,EAAoBnkD,EAAiB,aAAa,cAAgBoF,EAAiB,aAAa,YAEjG7E,IACHP,EAAiB,aAAa,KAAOoF,EAAiB,aAAa,KACnEpF,EAAiB,aAAa,GAAKoF,EAAiB,aAAa,IAG9D5E,IACHR,EAAiB,aAAa,YAAcoF,EAAiB,aAAa,aAI5E,MAAM72D,KAAO,MAAStJ,EAAS+6D,CAAgB,EACzCqF,EAAY,OAAO,OAAO92D,CAAI,EAAE,OAAO,CAACl4B,EAAK6vG,IAAQ7vG,EAAM6vG,EAAI,OAAQ,CAAC,EAE9E,MAAO,CACL,iBAAAlmB,EACA,iBAAAoF,EACA,MAAO72D,EACP,UAAA82D,EACA,WAAYA,EAAY,EACxB,eAAgB2+C,EAChB,wBAAArjD,EACA,iBAAkBwjD,EAClB,gBAAiB,IAAC,MAAkBl/G,CAAO,CAC7C,CACF,CAEA,SAAS8+G,EAAwB9+G,EAAuD,CACtF,MAAI,MAAkBA,CAAO,EAC3B,OAAOA,EAGT,MAAM0gC,EAAoB,CACxB,UAAW1gC,EACX,KAAM,CAAC,CACT,EACA,OAAO,KAAqB,iBAAiB0gC,CAAG,EAAE,IACpD,CAEO,SAASy+E,EACdn/G,EACAD,EACAu7D,EACAD,EACAE,EACA,CACA,MAAM4E,EAAmBngE,EACnB+6D,EAAmBh7D,EACnBg/G,EAAiBC,EAAkBjkD,EAAiB,KAAMoF,EAAiB,IAAI,EAC/EzE,EAA0B0jD,EAAqBrkD,EAAkBoF,EAAkB9E,CAAa,EAChG6jD,EAAoBnkD,EAAiB,UAAYoF,EAAiB,QAEnE7E,IACHP,EAAiB,KAAOoF,EAAiB,MAGtC5E,IACHR,EAAiB,QAAUoF,EAAiB,SAG9C,MAAM72D,KAAO,MAAS62D,EAAkBpF,CAAgB,EAClDqF,EAAY,OAAO,OAAO92D,CAAI,EAAE,OAAO,CAACl4B,EAAK6vG,IAAQ7vG,EAAM6vG,EAAI,OAAQ,CAAC,EAE9E,MAAO,CACL,iBAAAlmB,EACA,iBAAAoF,EACA,MAAO72D,EACP,UAAA82D,EACA,WAAYA,EAAY,EACxB,eAAgB2+C,EAChB,MAAOhkD,EAAiB,UAAY,EACpC,wBAAAW,EACA,iBAAkBwjD,CACpB,CACF,CAMO,SAASF,EACdK,EAAsC,CAAC,EACvCC,EAA2C,CAAC,EAC5C,CACA,OAAOD,EAAS,OAASC,EAAc,MAAQD,EAAS,KAAOC,EAAc,EAC/E,CAEO,SAASC,EAA0BC,EAAoCC,EAAoC,CAChH,GAAID,IAAa,QAAaC,IAAa,OACzC,eAAQ,KAAK,6CAA6C,EACnD,GAGT,GAAKD,IAAa,QAAaC,IAAa,QAAeA,IAAa,QAAaD,IAAa,OAChG,eAAQ,KAAK,6CAA6C,EACnD,GAGT,GAAIA,GAAU,SAAWC,GAAU,OACjC,MAAO,GAGT,QAAS5kJ,EAAI,EAAGA,GAAK2kJ,GAAU,QAAU,GAAI3kJ,IAAK,CAChD,MAAM6kJ,EAAUF,IAAW3kJ,CAAC,EACtB8kJ,EAAUF,IAAW5kJ,CAAC,EAC5B,GAAI6kJ,GAAS,MAAQC,GAAS,KAAOD,GAAS,WAAaC,GAAS,UAAYD,GAAS,QAAUC,GAAS,MAC1G,MAAO,EAEX,CACA,MAAO,EACT,CAEO,SAASV,EACd3kD,EACAslD,EACAvkD,EACA,CACA,MAAM/vB,EAAoBs0E,EAAkB,WAAa,CAAC,EACpDC,EAAkBvlD,EAAU,WAAa,CAAC,EAChD,IAAIoB,EAA0B,GAE9B,UAAW5jG,KAAY+nJ,EAAiB,CACtC,MAAMC,EAAyBxmJ,GAC7BA,EAAE,OAAS,iBACXA,EAAE,OAAS,kBACXA,EAAE,OAAS,sBACXA,EAAE,OAAS,oBACXA,EAAE,OAAS,oBACXA,EAAE,OAAS,gBACXA,EAAE,OAAS,kBAEPymJ,EAAoBzmJ,GACxBA,EAAE,OAAS,iBACXA,EAAE,OAAS,kBACXA,EAAE,OAAS,sBACXA,EAAE,OAAS,oBACXA,EAAE,OAAS,kBAEPmyE,EAAWH,EAAkB,KACjC,CAAC,CAAE,KAAAowC,EAAM,KAAA7jF,CAAK,IAAM6jF,EAAK,OAAS5jH,EAAS,KAAK,MAAQ+/B,IAAS//B,EAAS,IAC5E,EAEK2zE,KAKHq0E,EAAsBhoJ,CAAQ,GAC9BgoJ,EAAsBr0E,CAAQ,GAC9B,CAACmzE,EAAQ9mJ,EAAS,KAAK,QAAS2zE,EAAS,KAAK,OAAO,GAIrD3zE,EAAS,OAAS,iBAClB2zE,EAAS,OAAS,iBAClB,CAAC8zE,EAA0BznJ,EAAS,KAAK,QAAS2zE,EAAS,KAAK,OAAO,KAEvEiwB,EAA0B,IAGvBL,IACCvjG,EAAS,OAAS,gBACpBA,EAAS,KAAK,QAAW2zE,EAAS,KAA2B,QACpD3zE,EAAS,OAAS,iBAC3BA,EAAS,KAAK,MAAS2zE,EAAS,KAA0B,OAGxD3zE,EAAS,OAAS,kBAChBgoJ,EAAsBhoJ,CAAQ,GAAKgoJ,EAAsBr0E,CAAQ,IACnE3zE,EAAS,KAAK,QAAU2zE,EAAS,KAAK,SAEpCs0E,EAAiBjoJ,CAAQ,GAAKioJ,EAAiBt0E,CAAQ,IACzD3zE,EAAS,KAAK,QAAU2zE,EAAS,KAAK,WAI9C,CAEA,OAAOiwB,CACT,CAEO,SAAS0jD,EAAqB9kD,EAAsBslD,EAA8BvkD,EAAyB,CAChH,MAAM/vB,EAAoBs0E,EAAkB,YAAY,MAAQ,CAAC,EAC3DC,EAAkBvlD,EAAU,YAAY,MAAQ,CAAC,EACvD,IAAIoB,EAA0B,GAE9B,UAAW5jG,KAAY+nJ,EAAiB,CACtC,MAAMp0E,EAAWH,EAAkB,KAAK,CAAC,CAAE,KAAAnhE,EAAM,KAAAtW,CAAK,IAAMsW,IAASrS,EAAS,MAAQjE,IAASiE,EAAS,IAAI,EAE5G,GAAK2zE,IAKDA,EAAS,SACX,OAAOA,EAAS,QAAQ,SAGrBmzE,EAAQ9mJ,EAAS,QAAS2zE,EAAS,OAAO,EAG7C3zE,EAAS,OAAS,SAClB,CAACynJ,KACC,MAAuBznJ,GAA6C,OAAO,KAC3E,MAAuB2zE,GAA6C,OAAO,CAC7E,IAEAiwB,EAA0B,IAR1BA,EAA0B,GAWxB,CAACL,GAAe,CAClB,MAAM2kD,EAAQloJ,EAEVkoJ,EAAM,OAAS,QACjBA,EAAM,QAAWv0E,EAAgC,QACxCu0E,EAAM,OAAS,YACxBA,EAAM,MAASv0E,EAAkC,OAG/Cu0E,EAAM,OAAS,UACjBloJ,EAAS,QAAU2zE,EAAS,QAC5B3zE,EAAS,QAAU2zE,EAAS,QAEhC,CACF,CAEA,OAAOiwB,CACT,CAEO,SAASukD,EAAgB3lD,EAAkBslD,EAA0B,CAC1E,MAAMt2G,KAAO,MAASs2G,EAAmBtlD,CAAS,EAC5C8F,EAAY,OAAO,OAAO92D,CAAI,EAAE,OAAO,CAACl4B,EAAK6vG,IAAQ7vG,EAAM6vG,EAAI,OAAQ,CAAC,EAE9E,MAAO,CACL,iBAAkB3mB,EAClB,iBAAkBslD,EAClB,MAAOt2G,EACP,UAAA82D,EACA,WAAYA,EAAY,CAC1B,CACF,C,4GCjSO,MAAM8/C,EAAoB,CAAC,CAAE,MAAAnsJ,EAAO,SAAAJ,EAAU,KAAAmV,CAAK,IAAa,CACrE,MAAMq3I,EAA+D,CACnE,CACE,SAAO,KAAE,gEAAiE,OAAO,EACjF,MAAO,EACT,EACA,CACE,SAAO,KAAE,oEAAqE,WAAW,EACzF,MAAO,IACT,CACF,EACMC,EAAc,OAAOrsJ,GAAU,SACrC,OAAAosJ,EAAmB,CAAC,EAAE,MAAQC,EAAcrsJ,EAAQ,QAGlD,QAAC,IAAK,CACJ,oBAAC,IAAgB,CAAC,MAAAA,EAAc,QAASosJ,EAAoB,SAAAxsJ,CAAA,CAAoB,EAChFysJ,MACC,OAAC,KACC,MAAArsJ,EACA,SAAAJ,EACA,YAAa,IAAY,YACzB,OAAQmV,EAAK,UAAU,QAAU,GACnC,GAEJ,CAEJ,C,kICCO,MAAMlB,EAAc,CAAC,CAC1B,SAAAzK,EACA,MAAAS,EACA,QAAAuD,EACA,WAAAmqD,EAAa,OACb,QAAAjnD,EACA,QAAAC,EACA,SAAArD,EACA,SAAAo/I,EACA,UAAA9hJ,EACA,QAAA+hJ,EACA,KAAAC,EACA,OAAAC,EACA,MAAA/7I,EACA,YAAAvD,EACA,YAAAmsB,EACA,oCAAAozH,EACA,GAAGvuE,CACL,IAAa,CACX,MAAMh2E,KAAQ,MAAU,EAClB4B,EAASuD,EAAUnF,EAAOqkJ,EAAMC,CAAM,EACtCn3I,EAAUi3I,MAAW,cAAWnjJ,CAAQ,EAExCujJ,EACJ,OAAO9iJ,GAAU,YACf,OAAC,KACC,YAAAyvB,EACA,MAAOi+B,EACP,QAAAnqD,EACA,QAASkI,EACT,YAAAnI,EAEC,YAAGtD,CAAK,GAAGyiJ,EAAW,KAAO,EAAE,GAClC,EAEAziJ,EAGJ,SACE,QAAC,OAAI,aAAW,MAAGE,EAAO,UAAWS,CAAS,EAAI,GAAG2zE,EAClD,UAAAwuE,KACD,QAAC,OAAI,UAAW5iJ,EAAO,eACpB,6BAAaX,EAAU,CAAE,QAAAkH,EAAS,SAAApD,EAAU,QAAAqD,CAAQ,CAAC,EACrDD,GAAWI,MACV,OAAC,OACC,aAAW,MAAG3G,EAAO,uBAAwB,CAC3C,CAACA,EAAO,mCAAmC,EAAG,CAAC,CAAC2iJ,CAClD,CAAC,EAED,mBAAC,IAAsB,CAAE,SAAAh8I,CAAA,CAAM,EACjC,GAEJ,GACF,CAEJ,EAEAmD,EAAY,YAAc,cAE1B,MAAMvG,EAAY,CAACnF,EAAsBqkJ,EAAgBC,KAChD,CACL,aAAW,OAAI,CACb,QAAS,OACT,cAAe,MACf,WAAY,aACZ,UAAW,OACX,SAAU,WACV,KAAM,GAAGD,EAAO,EAAI,CAAC,IAAIC,EAAS,EAAI,CAAC,QACvC,OAAQ,KAAKtkJ,EAAM,QAAQ,EAAG,CAAC,IAAIA,EAAM,QAAQ,EAAG,CAAC,IACvD,CAAC,EACD,kBAAgB,OAAI,CAClB,KAAM,GAAGqkJ,EAAO,EAAI,CAAC,IAAIC,EAAS,EAAI,CAAC,OACzC,CAAC,EACD,0BAAwB,OAAI,CAC1B,UAAWtkJ,EAAM,QAAQ,EAAG,CAC9B,CAAC,EACD,uCAAqC,OAAI,CACvC,MAAO,EACP,UAAW,UAEX,QAAS,CACP,WAAY,QACd,CACF,CAAC,CACH,E,2EC/GK,MAAMykJ,CAAqD,CAChE,QAAQ,CAAE,UAAAn2H,CAAU,EAAyC,CAC3D,OAAOA,GAAW,aAAa,MAAM,KAAMzR,GAAMA,EAAE,QAAU,EAAQA,EAAE,YAAa,CACtF,CAEA,KAAKxhB,EAAoF,CACvF,GAAI,CAAC,KAAK,QAAQA,CAAO,EACvB,SAAO,KAAY,EAGrB,MAAM2uD,EAAc,KAAK,2BAA2B3uD,EAAQ,SAAS,EACrE,SAAO,MAAG,CAAE,YAAA2uD,EAAa,YAAa,CAAC,CAAE,CAAC,CAC5C,CAEQ,2BAA2B17B,EAA8C,CAQ/E,OAPwBA,GAAW,aAAa,MAAM,OAAQzR,GAAMA,EAAE,MAAM,GAC1C,OAAQA,GAAM,EAAQA,EAAE,YAAa,EACzC,OAC5B,CAAC3H,EAAKgiE,IAAShiE,EAAI,UAAO,MAAqBgiE,EAAMA,EAAK,YAAY,CAAC,EACvE,CAAC,CACH,CAGF,CAEA,yBAAyB5oD,EAA2BvC,EAAqC,CACvF,MAAMi+B,EAAc,KAAK,2BAA2B17B,CAAS,EAC7D,SAAO,MAAwB07B,EAAaj+B,CAAO,CACrD,CACF,C,qLCdO,MAAM24H,EAA6B,CACxC,CAAE,MAAO,KAAM,MAAO,KAAoB,EAAG,EAC7C,CAAE,MAAO,KAAM,MAAO,KAAoB,GAAI,EAC9C,CAAE,MAAO,IAAK,MAAO,KAAoB,EAAG,EAC5C,CAAE,MAAO,KAAM,MAAO,KAAoB,GAAI,EAC9C,CAAE,MAAO,IAAK,MAAO,KAAoB,EAAG,EAC5C,CAAE,MAAO,KAAM,MAAO,KAAoB,GAAI,CAChD,EAGA,SAASC,EAAiBjoI,EAAc,CACtC,OAAOA,IAAM,KAAU,WAAaA,IAAM,KAAU,SACtD,CAEO,MAAMkoI,EAA0B,CAAC,CAAE,QAAAvpJ,EAAS,SAAA5D,CAAS,IAAa,CACvE,MAAMmK,KAAS,MAAWuD,CAAS,EAC7B0/I,KAAU,WAAQ,IAAM,KAAc,cAAc,CAACxpJ,GAAS,OAAO,CAAC,EAAG,CAACA,GAAS,OAAO,CAAC,EAE3FypJ,KAAe,eAClB9+I,GACQvO,EAAS,CAAE,GAAG4D,EAAS,QAAS2K,EAAU,KAAoB,CAAC,EAExE,CAAC3K,EAAS5D,CAAQ,CACpB,EAEMstJ,KAAa,eAChB3nJ,GACQ3F,EAAS,CAAE,GAAG4D,EAAS,GAAI+B,EAAE,KAAO,CAAC,EAE9C,CAAC/B,EAAS5D,CAAQ,CACpB,EAEMutJ,KAAgB,eACnBp9I,GAAyC,CACxC,MAAM/P,EAAQ+P,EAAE,cAAc,cAC9B,OAAOnQ,EAAS,CAAE,GAAG4D,EAAS,MAAAxD,CAAM,CAAC,CACvC,EACA,CAACwD,EAAS5D,CAAQ,CACpB,EAEM+E,EAAOnB,GAAW,CAAC,EACnB4pJ,EAASN,EAAiBnoJ,EAAK,OAAO,EAE5C,SACE,QAAC,OAAI,UAAWoF,EAAO,KACrB,oBAAC,MACC,MAAOijJ,EAAQ,QACf,QAASA,EAAQ,QACjB,SAAUC,EACV,eAAa,KAAE,0DAA2D,sBAAsB,EAClG,EACCtoJ,EAAK,SAAW,CAACyoJ,MAChB,oBACE,oBAAC,MACC,MAAOP,EAA2B,KAAMtnJ,GAAMA,EAAE,QAAUZ,EAAK,EAAE,EACjE,QAASkoJ,EACT,SAAUK,EACV,gBAAY,KAAE,gDAAiD,qBAAqB,EACpF,MAAO,GACT,KAEA,OAAC,IAAK,CAAC,KAAK,SAAS,MAAOvoJ,EAAK,MAAO,SAAUwoJ,CAAA,CAAe,GACnE,GAEJ,CAEJ,EAEM7/I,EAAanF,IACV,CACL,QAAM,OAAI,CACR,QAAS,OACT,cAAe,MACf,WAAY,SACZ,aAAc,WACd,IAAK,KACP,CAAC,CACH,GAGWklJ,EAAsF,KAAO,CACxG,GAAI,KAAe,QACnB,UAAWN,EACX,QAAS,KAAc,IAAI,KAAe,OAAO,EACjD,QAAM,KAAE,gDAAiD,oBAAoB,EAC7E,eAAa,KACX,uDACA,kDACF,EACA,eAAiBvpJ,GAAY,GAAGA,GAAS,OAAO,IAAIA,GAAS,EAAE,IAAIA,GAAS,KAAK,EACnF,E,qUC7FO,MAAM8pJ,EAAiB,CAAC,CAAE,OAAA7G,EAAQ,MAAAh/I,EAAO,aAAA8lJ,EAAc,mBAAAC,EAAoB,SAAA34C,EAAU,SAAAjlC,CAAS,IAAa,CAChH,KAAM,CAAC69E,EAAWC,CAAY,KAAI,YAA6BjH,CAAM,EAC/DkH,KAAiB,eAAav3I,IAAkBs3I,EAAat3I,EAAI,EAAG,CAACs3I,CAAY,CAAC,EAElF,CAAE,aAAA3kD,GAAc,SAAAG,CAAS,KAAI,MAAQ,CACzC,cAAe,CAAE,MAAAzhG,CAAM,CACzB,CAAC,EAEKmmJ,GAAUC,IAAgC,CAC9Ch5C,EAASg5C,GAAS,MAAOJ,CAAS,CACpC,EAEA,SACE,QAAC,QAAK,SAAU1kD,GAAa6kD,EAAM,EACjC,oBAACv8I,EAAA,EAAK,CAAC,SAAO,KAAE,kDAAmD,OAAO,EACxE,mBAACmzC,EAAA,EAAK,CAAE,GAAG0kD,EAAS,OAAO,EAAG,KAAK,MAAO,GAC5C,KACA,OAAC73F,EAAA,EAAK,CAAC,SAAO,KAAE,6DAA8D,YAAY,EACxF,mBAACy8I,EAAA,EAAgB,CAAC,aAAAP,EAA4B,OAAQE,EAAW,SAAUE,CAAA,CAAgB,EAC7F,EACCH,MACC,OAAChhH,EAAA,GACC,cAAa75B,EAAA,GAAU,MAAM,UAAU,KAAK,SAAS,cAAc,eACnE,SAAS,UACT,MAAM,GACN,WAAY,EACZ,cAAe,EAEf,oBAAC,OACC,oBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,oEAAoE,wCACrD,CAAE,uBAAsB,GAAC,EAAE,+GAEzD,EACF,KACA,OAACu0C,EAAA,GACC,SAAQ,GACR,KACE,iHAGF,mBAAC,KAAK,CAAC,QAAQ,kEAAkE,sBAAU,EAC7F,GACF,EACF,KAEF,QAACtZ,EAAA,EAAM,UAAN,CACC,oBAAC5+B,EAAA,GAAM,CAAC,KAAK,SAAS,QAAQ,YAAY,QAAS4gE,EAAU,KAAK,UAChE,mBAAC,KAAK,CAAC,QAAQ,mDAAmD,kBAAM,EAC1E,KACA,OAAC5gE,EAAA,GAAM,CAAC,KAAK,SACX,mBAAC,KAAK,CAAC,QAAQ,mDAAmD,kBAAM,EAC1E,GACF,GACF,CAEJ,EC5Da++I,EAAkB,CAAC,CAC9B,OAAAtH,EACA,MAAAh/I,EACA,OAAAotB,EACA,UAAA8Y,EACA,SAAAknE,EACA,mBAAA24C,CACF,IAA4B,CAC1B,MAAMzjJ,KAAS,MAAWuD,CAAS,EAEnC,SACE,OAACsgC,EAAA,GACC,OAAQ,GACR,SAAO,KAAE,mDAAoD,aAAa,EAC1E,UAAAD,EACA,UAAW5jC,EAAO,MAElB,mBAACujJ,EAAA,CACC,aAAcz4H,EACd,OAAA4xH,EACA,MAAAh/I,EACA,SAAUkmC,EACV,SAAAknE,EACA,mBAAA24C,CAAA,CACF,EACF,CAEJ,EAEMlgJ,EAAY,KAAO,CACvB,SAAO,OAAI,CACT,MAAO,kBACP,MAAO,OACT,CAAC,CACH,GCpCa0gJ,EAAmB,CAAC,CAAE,OAAAvH,EAAQ,MAAAh/I,EAAO,OAAAotB,EAAQ,SAAAggF,EAAU,mBAAA24C,CAAmB,OAEnF,OAAC,KAAgB,CACd,UAAC,CAAE,UAAAhuC,EAAW,UAAAL,CAAU,OAErB,OAAC,UACC,KAAK,SACL,UAAU,UACV,gBAAY,KAAE,oDAAqD,aAAa,EAChF,QAAS,IAAM,CACbK,EAAUuuC,EAAiB,CACzB,MAAAtmJ,EACA,OAAAg/I,EACA,OAAA5xH,EACA,UAAWsqF,EACX,SAAU,CAAC13G,EAAeg/I,IAA2B,CACnD5xC,EAASptG,EAAOg/I,CAAM,EACtBtnC,EAAU,CACZ,EACA,mBAAAquC,CACF,CAAC,CACH,EAEA,mBAACtkJ,EAAA,EAAI,CAAC,KAAK,KAAM,GACnB,CAEJ,CACF,EAIJ8kJ,EAAiB,YAAc,mBC7BxB,SAASC,EAAmB,CAAE,MAAAz9H,CAAM,EAAoC,CAC7E,MAAMR,EAAMQ,EAAM,UAAU,EACtB,CAAE,MAAA/oB,EAAO,SAAA2B,CAAS,EAAI4mB,EAAI,SAAS,EACnCyG,KAAY,MAAajG,CAAK,EAC9B,CAAE,KAAAmL,EAAM,UAAAnG,CAAU,KAAI,MAAkBhF,CAAK,EAC7CzmB,KAAS,MAAW,CAAS,EAE7ByjJ,KAAqB,WACzB,IACEpkJ,EAAS,KAAMmrB,GAAa,CAC1B,GAAI,EAAEA,aAAoBD,EAAA,GACxB,MAAO,GAGT,GAAIC,EAAS,MAAM,gBAAgB,KAAU,CAC3C,MAAM25H,MAAS,MAAkB35H,EAAS,MAAM,IAAI,EACpD,OACE25H,IAAQ,MAAM,YAAY,MAAQ,KACjCA,IAAQ,MAAM,YAAY,MAAQ,MACjCA,IAAQ,MAAM,QAAQ,KAAM91H,IAAUA,GAAM,YAAY,MAAQ,GAAsB,CAE5F,CAEA,MAAO,EACT,CAAC,EACH,CAAChvB,CAAQ,CACX,EAEM+kJ,GAAYn+H,EAAI,MAAM,YAAY,KAAM9pB,GAAMA,aAAayvB,EAAA,CAAmB,EAEpF,SACE,mBACG,SAAAgG,EAAK,SAAWnG,MACf,mBACE,oBAAC,OAAI,UAAWzrB,EAAO,WACrB,oBAACikJ,EAAA,CACC,MAAAvmJ,EACA,OAAQ0mJ,cAAqBx4H,EAAA,EAAsBw4H,GAAU,MAAM,aAAe,OAClF,OAAQ13H,EACR,SAAU,CAAChvB,EAAOg/I,KAAWj2H,EAAM,SAAS/oB,EAAOg/I,EAAM,EACzD,mBAAA+G,CAAA,CACF,KACA,OAAC,UACC,KAAK,SACL,QAAS,IAAMh9H,EAAM,SAAS,EAC9B,gBAAY,KAAE,8CAA+C,YAAY,EAEzE,mBAACtnB,EAAA,EAAI,CAAC,KAAK,WAAY,GACzB,GACF,EACF,EAEJ,CAEJ,CAEA,MAAM,EAAaf,IACV,CACL,cAAY,OAAI,CACd,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAY,OAEZ,OAAQ,CACN,MAAOA,EAAM,OAAO,KAAK,UACzB,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAY,cACZ,OAAQ,OAER,UAAW,CACT,MAAOA,EAAM,OAAO,KAAK,WAC3B,CACF,CACF,CAAC,CACH,GC9EK,MAAMitB,UAAmB,IAAiC,CAC/D,MAAO,CAAP,KAAO,UAAY64H,CAAA,CAEZ,WAA0B,CAC/B,GAAI,EAAE,KAAK,kBAAkB,MAC3B,MAAM,IAAI,MAAM,4CAA4C,EAG9D,OAAO,KAAK,MACd,CAEO,UAAUn4H,EAAwB,CACvB,KAAW,YAAY,KAAMvC,EAAA,CAAwB,EAC7D,UAAU,KAAK,UAAU,EAAGuC,CAAY,CAClD,CAEO,SAASruB,EAAeg/I,EAAmC,CAChE,MAAMz2H,EAAM,KAAK,UAAU,EAC3B,IAAIo+H,EAEJ,GAAIp+H,EAAI,MAAM,WACZ,QAAS9pB,KAAK8pB,EAAI,MAAM,WAClB9pB,aAAayvB,EAAA,IACfy4H,EAAiBloJ,GAKnBuB,IAAUuoB,EAAI,MAAM,OACtBA,EAAI,SAAS,CAAE,MAAAvoB,CAAM,CAAC,EAGpBg/I,GAEE2H,GACFA,EAAe,eAAe,EAGhCA,EAAiB,IAAIz4H,EAAA,EAAoB,CAAE,aAAc8wH,CAAO,CAAC,EACjEz2H,EAAI,SAAS,CAAE,WAAY,CAAC,GAAIA,EAAI,MAAM,YAAc,CAAC,EAAIo+H,CAAc,CAAE,CAAC,GAE9EA,GAAgB,eAAe,CAEnC,CAEO,UAAW,CAChB,IAAU,QACR,IAAI,KAAsB,CACxB,SAAO,KAAE,mDAAoD,YAAY,EACzE,QAAM,KACJ,kDACA,8DACF,EACA,iBAAe,KAAE,wDAAyD,iBAAiB,EAC3F,KAAM,YACN,UAAW,IAAM,KAAK,UAAU,EAAI,EACpC,YAAa,IAAM,KAAK,UAAU,CACpC,CAAC,CACH,CACF,CACF,C,8KCvDA,MAAMC,EACJ,6IAGWC,EAAO,CAAC,CAAE,WAAA/2F,EAAY,SAAA33D,EAAU,MAAAw4B,EAAO,WAAAsmF,CAAW,IAAa,CAC1E,MAAM6vC,EAAsBzhJ,GAA4C,CACtElN,EAAS,CAAE,GAAGw4B,EAAO,WAAYtrB,EAAM,OAAO,KAAM,CAAC,CACvD,EAEM/C,KAAS,MAAWuD,CAAS,EAE7BkhJ,EAAe,IAAM,CACrBp2H,EAAM,YACRsmF,EAAW,CAEf,EAEA,SACE,OAAC,IAAK,CACJ,mBAAC,KACC,SACE,OAAC,IAAW,CAAC,MAAM,OACjB,mBAAC,KACC,WAAU,GACV,WACE,QAAC,OAAI,UAAW30G,EAAO,uBACrB,oBAAC,OACC,oBAAC,MACC,QAAQ,uCACR,OAAQ,CACN,WAAY,WACZ,KAAM,KACN,KAAM,KACN,KAAM,KACN,QAAS,SACX,EACD,oFACyE,iBAAiB,OAAK,IAC7F,WAAW,KAAG,WAAW,KAAG,WAAW,UAExC,OAAC,OAAG,EAAE,eACG,OAAC,QAAM,uBAAc,GAChC,EACF,KACA,OAAC,UAAO,UAAWA,EAAO,oBACxB,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,oCAAwB,EACrF,KACA,QAAC,OAAI,UAAWA,EAAO,uBACrB,oBAAC0kJ,EAAA,CACC,KAAK,MACL,eAAa,KACX,kCACA,8EACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,SACL,eAAa,KACX,qCACA,0HACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,SACL,eAAa,KACX,qCACA,mGACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,UACL,eAAa,KACX,sCACA,oGACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,YACL,eAAa,KACX,wCACA,6GACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,MACL,eAAa,KACX,kCACA,kFACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,2BACL,eAAa,KACX,2CACA,4IACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,QACL,eAAa,KACX,oCACA,oFACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,OACL,eAAa,KACX,mCACA,sGACF,EACF,KACA,OAACA,EAAA,CACC,KAAK,QACL,eAAa,KACX,oCACA,wGACF,EACF,GACF,GACF,EAEF,SACE,QAAC,IAAK,CAAC,IAAK,EAAG,UAAU,MACvB,oBAAC,IAAI,CAAC,KAAK,WAAY,GAAE,OAAC,OAAC,KAAK,CAAC,QAAQ,iCAAiC,yBAAa,GACzF,EAEF,UACE,OAAC,OACC,oBAAC,KAAK,CAAC,QAAQ,kCAAkC,gDACX,OACpC,OAAC,KACC,SAAQ,GACR,KAAK,gIACN,4BAED,EAAW,KAEb,EACF,EAEF,YAAa,GACb,UAAU,eAEV,oBAAC,OAAI,UAAW1kJ,EAAO,KACrB,oBAAC,KAAK,CAAC,QAAQ,mCAAmC,sBAAU,EAAQ,OAAC,OAAC,IAAI,CAAC,KAAK,aAAc,IAChG,EACF,EACF,EAEF,WAAAwtD,EACA,KAAM,GACN,OAAQ,GAER,mBAAC,KACC,MAAOn/B,EAAM,WACb,SAAUm2H,EACV,KAAM,EACN,YAAaF,EACb,OAAQG,EACR,MAAO,CAAE,SAAU,IAAK,WAAY,OAAQ,UAAW,EAAG,EAC5D,EACF,EACF,CAEJ,EAMMC,EAAqB,CAAC,CAAE,KAAAr4I,EAAM,YAAA25B,CAAY,IAA+B,CAC7E,MAAMhmC,KAAS,MAAW2kJ,CAA2B,EAErD,SACE,oBACE,oBAAC,QAAK,UAAW3kJ,EAAO,KAAO,SAAAqM,CAAA,CAAK,KACpC,OAAC,QAAK,UAAWrM,EAAO,YAAc,SAAAgmC,CAAA,CAAY,GACpD,CAEJ,EAEMziC,EAAanF,IAA0B,CAC3C,uBAAqB,OAAI,CACvB,SAAUA,EAAM,WAAW,GAAG,SAC9B,WAAYA,EAAM,WAAW,GAAG,UAClC,CAAC,EACD,0BAAwB,OAAI,CAC1B,QAAS,OACT,KAAM,EACN,cAAe,SACf,IAAKA,EAAM,QAAQ,CAAC,EAEpB,QAASA,EAAM,QAAQ,EAAG,CAAC,CAC7B,CAAC,EACD,0BAAwB,OAAI,CAC1B,QAAS,OACT,oBAAqB,mBACrB,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,QAAM,OAAI,CACR,QAAS,OACT,cAAe,MACf,WAAY,SACZ,OAAQ,UACR,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,CACH,GAEMumJ,EAA+BvmJ,IAA0B,CAC7D,QAAM,OAAI,CACR,WAAYA,EAAM,WAAW,cAC/B,CAAC,EACD,eAAa,OAAI,CACf,SAAUA,EAAM,WAAW,UAAU,SACrC,MAAOA,EAAM,OAAO,KAAK,QAC3B,CAAC,CACH,E,mKC5NO,MAAMo3G,EAAwB,CAAC,CAAE,QAAA/7G,CAAQ,IAAkC,CAChF,KAAM,CAACmrJ,EAAcC,CAAe,KAAI,YAAS,EAAE,EAC7C,CAACC,EAAgBC,CAAiB,KAAI,YAAgC,CAAC,CAAC,EACxEC,KAAkB,eACrBjiJ,GAAsB,CACrBA,EAAM,eAAe,EACrB8hJ,EAAgBD,EAAe,EAAE,CACnC,EACA,CAACA,EAAcC,CAAe,CAChC,EACM7kJ,KAAS,MAAWuD,CAAS,EAGnC,SAFA,aAAU,IAAMwhJ,EAAkBtrJ,EAAQ,MAAM,EAAGmrJ,CAAY,CAAC,EAAG,CAACA,EAAcnrJ,CAAO,CAAC,EAErFqrJ,EAAe,UAKlB,QAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,UAAW,MAAO,EACxE,oBAAC,IAAI,CAAC,QAAQ,YAAY,OAAO,SAC/B,mBAAC,KAAK,CAAC,QAAQ,4DAA4D,6BAAiB,EAC9F,KACA,OAAC,IAAc,CACZ,SAAAA,EAAe,IAAI,CAAC5uJ,EAAG2R,OACtB,OAAC,IAAc,CAA6B,UAAW7H,EAAO,gBAC5D,mBAAC,IAAW,CAAC,cAAa,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,sBAClF,mBAAC,OAAI,UAAWA,EAAO,MAAQ,SAAA9J,EAAE,MAAM,EACzC,GAHmB,GAAGA,EAAE,KAAK,IAAI2R,CAAK,EAIxC,CACD,EACH,EACCpO,EAAQ,OAASmrJ,MAChB,OAAC,IAAc,CAAC,UAAW5kJ,EAAO,gBAChC,mBAAC,KAAM,CAAC,QAASglJ,EAAiB,QAAQ,YAAY,KAAK,KACzD,mBAAC,KAAK,CAAC,QAAQ,oDAAoD,qBAAS,EAC9E,EACF,GAEJ,EAxBO,IA0BX,EACAxvC,EAAsB,YAAc,wBAEpC,SAASjyG,EAAUnF,EAAsB,CACvC,MAAO,CACL,WAAS,OAAI,CACX,QAAS,OACT,cAAe,SACf,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,mBAAiB,OAAI,CACnB,WAAYA,EAAM,QAAQ,EAAG,EAC7B,aAAcA,EAAM,QAAQ,EAAG,CACjC,CAAC,EACD,SAAO,OAAI,CACT,WAAY,SACZ,SAAU,SACV,aAAc,WACd,SAAU,MACZ,CAAC,CACH,CACF,C,wEC9DO,SAAS6mJ,EAAU/wG,EAAyB,CACjD,MAAMgxG,KAAmB,MAAwBhxG,CAAG,EAEpD,MAAO,CACL,QAASgxG,EAAiB,UAC1B,OAAQA,EAAiB,IAC3B,CACF,CAEO,SAASC,EAAgB,CAAE,MAAAznJ,EAAO,QAAA0nJ,CAAQ,EAAc,CAC7D,OAAOA,GAAWA,GAAS,OACvB,CAAC,GAAGA,EAAQ,IAAKxsH,GAAMA,EAAE,KAAK,EAAGl7B,CAAK,EAAE,IAAI2nJ,CAAW,EAAE,KAAK,GAAG,EACjEA,EAAY3nJ,CAAK,CACvB,CAEA,SAAS2nJ,EAAY3nJ,EAAuB,CAC1C,OAAOA,EAAM,WAAW,IAAK,KAAK,CACpC,C,gPClBO,MAAM0vB,EAAiC,CAC5C,YAAa,CAAC,EACd,QAAS,CAAC,EACV,WAAY,CAAC,EACb,WAAY,CAAC,EACb,WAAY,IAAY,KACxB,YAAa,GACb,iBAAkB,EAClB,0BAA2B,GAC3B,qBAAsB,GACtB,2BAA4B,GAC5B,eAAgB,CAAC,EACjB,gBAAiB,EACnB,EAEak4H,KAAmB,MAAiC,8BAA8B,EAClFC,KAAkB,MAAmB,6BAA6B,EAClEC,KAAoB,MAAmC,+BAA+B,EACtFC,KAAuB,MAAmC,kCAAkC,EAC5FC,KAAwB,MAAa,mCAAmC,EACxEC,KAA0B,MACrC,qCACF,EACaC,KAA4B,MAAqB,uCAAuC,EACxFC,KAA2B,MAAyB,sCAAsC,EAC1FC,KAA+B,MAAqB,0CAA0C,EAC9FC,KAAoB,MAAqB,+BAA+B,EACxEC,KAAe,MAAsB,0BAA0B,EAC/DC,KAAqB,MAAsB,gCAAgC,EAO3EC,EAAqB,CAACxtI,EAA0B0U,EAAcxH,IACrE2/H,EAAgB,MAAM3/H,CAAM,EACvB,CAAE,GAAGlN,EAAO,qBAAsB,EAAK,EAG5C8sI,EAAkB,MAAM5/H,CAAM,EACzB,CACL,GAAGlN,EACH,qBAAsB,GACtB,YAAakN,EAAO,QACpB,iBAAkBA,EAAO,QAAQ,MACnC,EAGE0/H,EAAiB,MAAM1/H,CAAM,EACxB,CAAE,GAAGlN,EAAO,WAAYkN,EAAO,OAAQ,EAG5CggI,EAA0B,MAAMhgI,CAAM,EACjC,CAAE,GAAGlN,EAAO,YAAakN,EAAO,OAAQ,EAG7CigI,EAAyB,MAAMjgI,CAAM,EAChC,CAAE,GAAGlN,EAAO,WAAYkN,EAAO,OAAQ,EAG5C8/H,EAAsB,MAAM9/H,CAAM,EAC7B,CAAE,GAAGlN,EAAO,QAAS,CAAC,EAAG,2BAA4B,EAAK,EAG/DitI,EAAwB,MAAM//H,CAAM,EAC/B,CACL,GAAGlN,EACH,QAASkN,EAAO,QAAQ,QACxB,WAAYA,EAAO,QAAQ,WAC3B,2BAA4B,EAC9B,EAGEkgI,EAA6B,MAAMlgI,CAAM,EACpC,CAAE,GAAGlN,EAAO,0BAA2BkN,EAAO,OAAQ,EAG3D6/H,EAAqB,MAAM7/H,CAAM,EAC5B,CAAE,GAAGlN,EAAO,eAAgBkN,EAAO,OAAQ,EAGhDmgI,EAAkB,MAAMngI,CAAM,EACzB,CAAE,GAAGlN,EAAO,WAAY,CAAE,GAAGA,EAAM,WAAY,KAAMkN,EAAO,OAAQ,CAAE,EAG3EogI,EAAa,MAAMpgI,CAAM,EACpB,CACL,GAAGlN,EACH,WAAY,CAAE,GAAGA,EAAM,WAAY,UAAWkN,EAAO,OAAQ,CAC/D,EAGEqgI,EAAmB,MAAMrgI,CAAM,EAC1B,CACL,GAAGlN,EACH,gBAAiBkN,EAAO,OAC1B,EAGKlN,EAGIytI,EAA0D,CACrE,cAAe,CAAC,EAChB,UAAW,KACX,QAAS,GACT,OAAQ,IACV,EAEaC,KAAkC,MAC7C,oDACF,EAEaC,KAA+B,MAAoB,iDAAiD,EAEpGC,KAAyB,MAAwB,2CAA2C,EAE5FC,KAA0B,MAA4B,4CAA4C,EAElGC,KAAuB,MAA4B,yCAAyC,EAoDzG,EAAe,CACb,YAAaN,EACb,mBApDuC,CACvCxtI,EAAiCytI,EACjCvgI,IAEIwgI,EAAgC,MAAMxgI,CAAM,EACvC,CAAE,GAAGlN,EAAO,OAAQkN,EAAO,QAAS,UAAW,KAAM,QAAS,EAAM,EAGzEygI,EAA6B,MAAMzgI,CAAM,EACpC,CAAE,GAAGlN,EAAO,OAAQ,KAAM,UAAWkN,EAAO,QAAQ,QAAS,QAAS,EAAM,EAGjF0gI,EAAuB,MAAM1gI,CAAM,EAC9B,CACL,GAAGlN,EACH,cAAe,CACb,WAAS,KACP,gFACA,sDACF,EACA,OAAQ,MACV,CACF,EAGE6tI,EAAwB,MAAM3gI,CAAM,EAC/B,CACL,GAAGlN,EACH,cAAe,CACb,OAAQkN,EAAO,SAAS,OACxB,QAASA,EAAO,SAAS,QACzB,QAASA,EAAO,SAAS,OAC3B,CACF,EAGE4gI,EAAqB,MAAM5gI,CAAM,EAC5B,CACL,GAAGlN,EACH,cAAe,CACb,OAAQ,QACR,QAASkN,EAAO,SAAS,QACzB,QAASA,EAAO,SAAS,OAC3B,CACF,EAGKlN,CAMT,C,kICxKA,MAAM+tI,EAA2B,OACxB,KAAmB,EAAE,eAAe,EAGtC,SAASC,EAAW,CAAE,SAAA7wJ,EAAU,MAAAI,EAAO,YAAAuK,EAAa,OAAAi3B,EAAQ,eAAAkvH,EAAgB,YAAA9lJ,EAAa,SAAAsC,CAAS,EAAU,CAEjH,MAAM1J,KAAU,KAA2C,SAAY,CACrE,MAAMie,EAAO,MAAOivI,GAAkBF,GAA0B,EAChE,OAAIhvH,EACK/f,EAAK,OAAQlc,GAAMi8B,EAAO,SAASj8B,EAAE,KAAK,CAAC,EAE7Ckc,CACT,EAAG,CAACivI,EAAgBlvH,CAAM,CAAC,EAE3B,GAAIh+B,EAAQ,QACV,OAAO,KAGT,MAAMmtJ,EAAS,GAAQ3wJ,GAAO,SAAS,MAAM,GAAKA,GAAO,WAAW,GAAG,GACvE,SACE,OAAC,MAEC,MAAO,GACP,SAAAJ,EACA,MAAO4D,EAAQ,OAAO,KAAM65D,GAAQA,EAAI,QAAUr9D,CAAK,GAAK,KAC5D,QAASwD,EAAQ,MACjB,gBAAY,KAAE,gCAAiC,MAAM,EACrD,YAAa+G,GAAe,iBAAiB,KAAa,KAAK,IAC/D,UAAQ,OAAC,IAAI,CAAC,KAAMomJ,EAAS,mBAAqB,iBAAkB,EACpE,YAAA/lJ,EACA,SAAAsC,CAAA,EATKlN,CAUP,CAEJ,C,yDChDO,IAAK4wJ,GAAAA,IACVA,EAAA,YAAc,QACdA,EAAA,YAAc,QACdA,EAAA,YAAc,QACdA,EAAA,aAAe,UAJLA,IAAAA,GAAA,IA0EAC,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,KAAO,OACPA,EAAA,IAAM,MACNA,EAAA,WAAa,WACbA,EAAA,MAAQ,QANEA,IAAAA,GAAA,G,iDCzEL,SAASC,EACdh4B,EACAzkB,EACAwkB,EACAk4B,EACA,CACA,MAAMC,EAAuB,CAAC,EAC9B,IAAIC,EAAY,GACZC,EAEJ,SAASC,EAAUrjJ,EAAoBsjJ,EAAe,GAAO,CAC3D,GAAIH,EACF,OAIF,MAAMI,EAAWvjJ,EAAK,KAAK,MAAM,GAAG,GAAK,CAAC,GAAI,EAAE,EAChD,IAAIwjJ,EAAaD,EAAS,CAAC,EAC3B,MAAME,EAAkB,IAAI,gBAAgBF,EAAS,CAAC,CAAC,EAMvD,GALIE,EAAgB,IAAI,UAAU,IAChCD,GAAc,aAAaC,EAAgB,IAAI,UAAU,CAAC,IAIxD14B,GAAWy4B,IAAez4B,EAAQ,IAAK,CACpCk4B,GACHC,EAAO,QAAQ,CAAE,KAAMn4B,EAAQ,KAAM,KAAM/qH,EAAK,KAAO,EAAG,CAAC,EAE7DmjJ,EAAY,GACZ,MACF,CAEA,MAAMO,EAA6BF,EAAW,OAAS,GAAKJ,IAAaI,EAOzE,GAJAJ,EAAWI,EAEY,CAACxjJ,EAAK,qBAAuB,EAAEsjJ,GAAgBI,GAElD,CAClB,MAAMC,EAAmB3jJ,EAAK,UAAU,UAAW4lB,GAAUA,EAAM,MAAM,GAAK,GAE9E,GAAI+9H,EAAmB,EAAG,CACxB,MAAMC,EAAc5jJ,EAAK,WAAW2jJ,CAAgB,EAChDC,GACFV,EAAO,QAAQ,CAAE,KAAMU,EAAY,KAAM,KAAMA,EAAY,KAAO,EAAG,CAAC,CAE1E,CACAV,EAAO,QAAQ,CAAE,KAAMljJ,EAAK,KAAM,KAAMA,EAAK,KAAO,EAAG,CAAC,CAC1D,CAEIA,EAAK,YACPqjJ,EAAUrjJ,EAAK,UAAU,CAE7B,CAEA,OAAIumG,GACF88C,EAAU98C,CAAO,EAInB88C,EAAUr4B,EAAY,EAAI,EAEnBk4B,CACT,C,sQCjDO,MAAMW,EAAwB,cACxBC,EAAuB,SAEvBC,EAAiB,CAACC,EAAkBC,IAC/C,GAAGH,CAAoB,GAAGE,CAAQ,IAAIC,GAAa,EAAE,GAQhD,MAAMC,UAAwB,IAAyB,CAC5D,YAAYlsH,EAA8C,CACxD,MAAMA,CAAgB,CACxB,CAEA,MAAM2vD,EAAqE,CAEzE,MAAMlmE,EAAUkmE,EAAQ,QAAQ,OAAQ/vF,GAC/BA,EAAE,YAAY,MAAQisJ,CAC9B,EAED,GAAI,CAACpiI,EAAQ,OACX,SAAO,MAAG,CAAE,KAAM,CAAC,CAAE,CAAC,EAIxB,MAAM0iI,KAAuC,WAAQ1iI,EAAS,gBAAgB,EACxE2iI,EAA4B,CAAC,EAEnC,UAAWxqI,KAAOuqI,EAGZvqI,IAAQ,IACVuqI,EAAKvqI,CAAG,EAAE,QAAS1C,GAAM,CACvBktI,EAAQ,KAAK,GAAG,KAAK,qBAAqB,CAACltI,CAAC,EAAGywE,CAAO,CAAC,CACzD,CAAC,EAEDy8D,EAAQ,KAAK,GAAG,KAAK,qBAAqBD,EAAKvqI,CAAG,EAAG+tE,CAAO,CAAC,EAKjE,OAAKy8D,EAAQ,OAIN,KAAK,aAAaA,EAASz8D,CAAO,KAHhC,MAAG,CAAE,KAAM,CAAC,CAAE,CAAC,CAI1B,CAMQ,qBAAqBlmE,EAAsBkmE,EAAsC,CACvF,MAAMyf,EAAQ3lF,EAAQ,CAAC,EAAE,WACnB2iI,EAA4B,CAAC,EAI7B94D,KAAgB,KAAe,EAAE,QACrC8b,GAAO,IACPzf,EAAQ,WACR,CAACz1F,EAA0B+D,IAAsC,CAE/D,GAAI,CAAC,MAAM,QAAQ/D,CAAK,EACtB,OAAOA,EAGT,UAAWi+C,KAAOj+C,EAAO,CACvB,GAAIi+C,IAAQ,UACV,SAGF,MAAMrjB,KAAa,KAAiB,EAAE,oBAAoBqjB,CAAG,EAE7Di0G,EAAQ,KAAK,CACX,cAAY,KAAiB,EAAE,IAAIj0G,CAAG,EACtC,WAAS,aAAU1uB,CAAO,EAC1B,WAAY,CACV,GAAGkmE,EAAQ,WACX,CAAC1xF,EAAS,IAAI,EAAG,CAAE,MAAOk6C,EAAK,KAAMrjB,GAAY,IAAK,CACxD,CACF,CAAC,CACH,CAEA,MAAO,EACT,CACF,EAEA,OAAIw+D,IAAkB,IACpB84D,EAAQ,KAAK,CACX,cAAY,KAAiB,EAAE,IAAI94D,CAAa,EAChD,WAAS,aAAU7pE,CAAO,EAC1B,WAAY,CACV,GAAGkmE,EAAQ,UACb,CACF,CAAC,EAGIy8D,CACT,CAEA,aAAaC,EAAyB18D,EAAqE,CACzG,MAAM28D,EAAiBD,EAAM,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC/5H,EAAOtxB,OAChE,KAAKsxB,EAAM,UAAU,EAAE,QACrB,KAAUsqC,GAAuB,CAC/B,MAAMizB,KAAY,aAAUF,CAAO,EACnC,OAAAE,EAAU,UAAYk8D,EAAe/qJ,EAAG6uF,EAAU,SAAS,EAC3DA,EAAU,QAAUv9D,EAAM,QAC1Bu9D,EAAU,WAAav9D,EAAM,cAEtB,KAAKsqC,EAAI,MAAMizB,CAAS,CAAC,EAAE,QAChC,KAAK9vD,IACI,CACL,GAAGA,EACH,KAAMA,EAAS,MAAQ,CAAC,EACxB,MAAO,KAAa,QACpB,IAAKgsH,EAAe/qJ,EAAG++B,EAAS,GAAG,CACrC,EACD,KACD,KAAQ,KACR,KAAY/oB,IACVA,KAAM,KAAiBA,CAAG,EAC1BA,EAAI,QAAU,GAAG4lD,EAAI,IAAI,KAAK5lD,EAAI,OAAO,MAElC,MAAwB,CAC7B,CACE,KAAM,CAAC,EACP,MAAO,KAAa,MACpB,MAAOA,EACP,IAAK+0I,EAAe/qJ,EAAG6uF,EAAU,SAAS,CAC5C,CACF,CAAC,EACF,CACH,CACF,CAAC,CACH,CACF,EAEA,SAAO,KAASy8D,CAAc,EAAE,KAAKC,EAAiB,KAAG,KAAI,KAAK,iBAAiB,KAAG,KAAS,CAAC,CAClG,CAEA,gBAAkD,CAChD,OAAO,QAAQ,QAAQ,CAAE,QAAS,GAAI,OAAQ,EAAG,CAAC,CACpD,CAEQ,YAAYj6H,EAAgC,CAClD,OAAOA,GAAS,MAAM,QAAQA,EAAM,OAAO,GAAKA,EAAM,QAAQ,OAAS,CACzE,CAEQ,kBAAkBk6H,EAAqD,CAC7E,KAAM,CAAE,OAAAjjH,CAAO,EAAIijH,EAEnB,GAAIjjH,IAAW,EACb,OAAOijH,EAGT,MAAM5hJ,EAAQ4hJ,EAAU,KAAMzsH,GAAaA,EAAS,QAAU,KAAa,KAAK,EAChF,OAAIn1B,EACF4hJ,EAAU,KAAK5hJ,CAAK,EAEpB4hJ,EAAUjjH,EAAS,CAAC,EAAE,MAAQ,KAAa,KAGtCijH,CACT,CACF,CAEA,SAASD,GAAiF,CACxF,SAAO,KAAO,CAAC3lC,EAA0BpvG,IAChCA,EAAQ,OAAO,CAACi1I,EAAUC,KAC/BD,EAAS,KAAK,MAAMA,EAAUC,CAAY,EACnCD,GACN7lC,CAAG,EACL,CAAC,CAAC,CACP,C,+HC3KO,MAAM+lC,EAAiB,CAAC,CAAE,OAAA/rJ,EAAQ,SAAAsc,EAAU,MAAAze,CAAM,IAA2B,CAClF,MAAMmuJ,KAAW,UAA8BnuJ,CAAK,EACpD,OAAAmuJ,EAAS,QAAUnuJ,KAEnB,mBAAgB,IAAM,CACpB,IAAIse,EAAkB,KAEtB,MAAMioB,EAA4B,CAChC,MAAO,CACL,KAAM,IACR,EACA,KAAM4nH,EAAS,OACjB,EAEAhsJ,EAAO,QAAQ,OAASisJ,GAAO,CAC7B9vI,EAAI8vI,CACN,CAAC,EAED,IAAIC,EAAkC,KAEtClsJ,EAAO,QAAQ,YAAa,CAACmc,EAAGgD,IAAc,CAC5C+sI,EAAmB/sI,CACrB,CAAC,EAEDnf,EAAO,QAAQ,YAAa,IAAM,CAGhC,GAAI,EAFUmc,EAAG,OAAO,OAAS,MAEnB,CACZ,IAAIqJ,EAAUrJ,EAAG,OAAO,KAAM,KAAMtd,GAAMA,GAAK,IAAI,EAEnD,GAAI2mB,GAAW,KACb2mI,EAAe,MACV,CACL,IAAIC,EAAS5mI,EACT6mI,EAASH,EAETzsI,EAAQtD,EAAG,KAAK,CAAC,GAAKA,EAAG,KAAK,CAAC,EAAE,CAAC,EAEtCioB,EAAQ,MAAM,KAAO3kB,EAAM2sI,CAAM,EACjChoH,EAAQ,SAAWgoH,GAAU,OAC7BhoH,EAAQ,YAAcioH,GAAU,OAChCjoH,EAAQ,KAAO4nH,EAAS,QAGxB,IAAI3vI,EAAMF,EAAG,OAAO,IACpBioB,EAAQ,MAAM,UAAY/nB,IAAQ,EAAI,KAAQA,EAAM,EAAIA,EAAMF,EAAG,KAAK,OAAS,EAE/EmwI,EAAe,CACjB,CACF,CACF,CAAC,EAED,SAASC,EAAmBrjJ,EAA6C,CACvE,MAAMoB,EAAOpB,EAAI,SAAS,OAAO,KAEjC,GAAIoB,EAAM,CAER,MAAM8R,EAAOD,EAAG,SAAS7R,EAAM,GAAG,EAYlC6R,EAAG,UAAU,CACX,KAAAC,EACA,IAAKD,EAAG,KAAK,OAAS,CACxB,CAAC,CACH,CACF,CAEA,MAAMqwI,EAAe,IAAI,KAEnBC,EAAa,IAAI,KAAeroH,CAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC1DsoH,EAAa,IAAI,KAAoB,EAAE,QAAQ,CAAC,OAAO,CAAC,EAE9D,IAAIJ,KAAiB,YAAS,IAAM,CAClChwI,EAAS,QAAQmwI,CAAU,CAC7B,EAAG,GAAG,EAEFN,KAAiB,YAAS,IAAM,CAClC7vI,EAAS,QAAQowI,CAAU,CAC7B,EAAG,GAAG,EAEN,OAAAF,EAAa,IACXlwI,EAAS,UAAU,IAAc,EAAE,UAAU,CAC3C,KAAOpT,GAAQ,CAEToT,IAAapT,EAAI,QAAUA,EAAI,MAAM,IAAI,OAAO,GAIpDqjJ,EAAmBrjJ,CAAG,CACxB,CACF,CAAC,CACH,EAGAsjJ,EAAa,IACXlwI,EAAS,UAAU,IAAqB,EAAE,UAAU,CAClD,KAAOpT,GAAQqjJ,EAAmBrjJ,CAAG,CACvC,CAAC,CACH,EAEAsjJ,EAAa,IACXlwI,EACG,UAAU,IAAmB,EAC7B,QAAK,KAAa,EAAE,CAAC,EACrB,UAAU,CACT,KAAOpT,GAAQ,CAEToT,IAAapT,EAAI,QAAUA,EAAI,MAAM,IAAI,OAAO,GAK/CiT,EAAG,OAAO,OACbA,EAAG,UAAU,CACX,KAAM,IACN,IAAK,GACP,CAAC,CAEL,CACF,CAAC,CACL,EAEO,IAAM,CACXqwI,EAAa,YAAY,CAC3B,CACF,EAAG,CAACxsJ,CAAM,CAAC,EAEJ,IACT,C,6FC/JO,SAAS2sJ,EAAgBrzJ,EAAgB6C,EAAc,CAS5D,OARKA,EAAM,OACLA,EAAM,OAAS,QAAUA,EAAM,OAAS,OAC1CA,EAAM,KAAO,KAAU,KAEvBA,EAAM,QAAO,MAAwB7C,CAAK,GAI1C6C,EAAM,OAAS,KAAU,OACnB7C,GACC,WAAWA,CAAK,EAKvB6C,EAAM,OAAS,KAAU,QACnB7C,GACC,EAAEA,EAAM,CAAC,IAAM,KAAOA,EAAM,CAAC,IAAM,KAAOA,EAAM,CAAC,IAAM,KAK1DA,GAAkBA,CAC5B,C,eCZO,MAAMszJ,EAAgB,OAOtB,MAAMhlB,UAAkCilB,EAAA,CAAyC,CAStF,YAAY7vJ,EAAmC8vJ,EAAgC,CAW7E,GAVA,MAAM,EANR,YAAyB,CAAC,EAE1B,KAAQ,MAAe,CAAC,EA2HxB,KAAQ,QAAsD,OApH5D,KAAK,QAAUA,IAEVrlB,GACQA,GAAU,CAAC,GAIpBzqI,EAAQ,CACV,KAAM,CAAE,KAAA0S,EAAM,MAAAi6C,EAAO,KAAA10B,EAAM,OAAArlB,CAAO,EAAI5S,EAUtC,GATI0S,IACF,KAAK,KAAOA,GAEVi6C,IACF,KAAK,MAAQA,GAEX10B,IACF,KAAK,KAAOA,GAEVrlB,EACF,UAAWwK,KAAKxK,EACd,KAAK,SAASwK,CAAC,CAGrB,CAGA,OAAO,eAAe,KAAM,SAAU,CACpC,WAAY,GACZ,IAAK,IACI,KAAK,MAAM,MAEtB,CAAC,CACH,CAGA,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MACpB,CAEA,YAAY9gB,EAAgBoW,EAAsB,CAChD,OAAO,KAAK,SAAS,CACnB,KAAMA,GAAQ,GACd,QAAM,MAAwBpW,CAAK,CACrC,CAAC,CACH,CAEA,SAAS8gB,EAAqB2yI,EAA6B,CACzD,IAAItlB,EAEArtH,EAAE,SACJqtH,EAASrtH,EAAE,QAGb,IAAIhhB,EAAOghB,EAAE,KAET,CAAChhB,IAAoBghB,EAAE,OAAb,QAAgCA,EAAE,OAAb,QACjChhB,EAAO,KAAU,MAEb,CAACA,GAAQquI,GAAUA,EAAO,SAC5BruI,KAAO,MAAwBquI,EAAO,CAAC,CAAC,GAErCruI,IACHA,EAAO,KAAU,QAKrB,IAAIsW,EAAO0K,EAAE,KACR1K,IACHA,EAAO,SAAS,KAAK,OAAO,OAAS,CAAC,IAGxC,MAAMvT,EAAe,CACnB,GAAGie,EACH,KAAA1K,EACA,KAAAtW,EACA,OAAQghB,EAAE,QAAU,CAAC,EACrB,OAAQ,KAAK,QAAQqtH,CAAM,CAC7B,EAaA,GAXIruI,IAAS,KAAU,QACrBA,KAAO,MAAuB+C,CAAK,EAC/B/C,IACF+C,EAAM,KAAO/C,IAIjB,KAAK,OAAO,KAAK+C,CAAK,EACtB,KAAK,MAAQ,KAAK,OAAO,CAAC,EAAE,OAGxB4wJ,EACF,KAAO5wJ,EAAM,OAAO,OAAS4wJ,GAC3B5wJ,EAAM,OAAO,KAAKywJ,CAAa,OAGjC,KAAK,SAAS,EAGhB,OAAOzwJ,CACT,CAEA,UAAW,CAET,MAAMwsC,EAAS,KAAK,OAAO,OAAO,CAAC9pC,EAAWub,IACrC,KAAK,IAAIvb,EAAGub,EAAE,OAAO,MAAM,EACjC,CAAC,EAGJ,UAAWje,KAAS,KAAK,OACvB,KAAOA,EAAM,OAAO,SAAWwsC,GAC7BxsC,EAAM,OAAO,KAAKywJ,CAAa,CAGrC,CAOA,UAAUzwJ,EAAc6wJ,EAA4B,CAClD,OAAK,KAAK,UACR,KAAK,QAAU,IAAI,KAErB,KAAK,QAAQ,IAAI7wJ,EAAO6wJ,CAAM,EACvBA,CACT,CAEQ,WAAW7wJ,EAAc0C,EAAW,CAC1C,IAAIo9B,EAAI,KAAK,SAAS,IAAI9/B,CAAK,EAC/B,OAAK8/B,IACHA,EAAI,KAAK,UAAU9/B,EAAOwwJ,EAAgB9tJ,EAAG1C,CAAK,CAAC,GAE9C8/B,EAAEp9B,CAAC,CACZ,CAKA,UAAUyqB,EAAgB,CAExB,QAASlpB,EAAI,KAAK,OAAO,OAAQA,EAAIkpB,EAAI,OAAQlpB,IAC/C,KAAK,SAAS,CACZ,KAAM,SAASA,EAAI,CAAC,GACpB,QAAM,MAAwBkpB,EAAIlpB,CAAC,CAAC,CACtC,CAAC,EAIH,GAAI,KAAK,OAAS,EAChB,QAASA,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAAK,CAC3C,MAAMga,EAAI,KAAK,OAAOha,CAAC,GACnB,CAACga,EAAE,MAAQA,EAAE,OAAS,KAAU,SAClCA,EAAE,QAAO,MAAwBkP,EAAIlpB,CAAC,CAAC,EAE3C,CAGF,QAASA,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAAK,CAC3C,MAAMga,EAAI,KAAK,OAAOha,CAAC,EACvB,IAAIvB,EAAIyqB,EAAIlpB,CAAC,EACTga,EAAE,OAAS,KAAU,WAAU,YAASvb,CAAC,IAC3CA,EAAI,KAAK,WAAWub,EAAGvb,CAAC,GAE1Bub,EAAE,OAAO,KAAKvb,CAAC,CACjB,CACF,CAGA,QAAQkc,EAAmB,CACzB,UAAWlc,KAAKkc,EACd,KAAK,IAAIlc,CAAC,EAEZ,OAAO,KAAK,MACd,CAEA,SAAU,CACR,UAAW1C,KAAS,KAAK,OACvBA,EAAM,OAAO,QAAQ,EAEvB,OAAO,IACT,CAKA,IAAI7C,EAAgB,CAElB,MAAMg6B,EAAMh6B,EACZ,UAAW6C,KAAS,KAAK,OAAQ,CAC/B,IAAI0iC,EAAMvL,EAAIn3B,EAAM,IAAI,EAEpBA,EAAM,OAAS,KAAU,WAAU,YAAS0iC,CAAG,IACjDA,EAAM,KAAK,WAAW1iC,EAAO0iC,CAAG,GAG9BA,IAAQ,SACVA,EAAM+tH,GAGRzwJ,EAAM,OAAO,KAAK0iC,CAAG,CACvB,CACF,CAEA,IAAI3zB,EAAe5R,EAAU,CAC3B,GAAI4R,EAAQ,KAAK,OACf,MAAM,IAAI,MAAM,2CAA2C,EAG7D,MAAMooB,EAAOh6B,GAAqC,CAAC,EACnD,UAAW6C,KAAS,KAAK,OACvBA,EAAM,OAAO+O,CAAK,EAAIooB,EAAIn3B,EAAM,IAAI,CAExC,CAKA,IAAIkpB,EAAgB,CAClB,MAAMxmB,EAA6B,CAAC,EACpC,UAAW1C,KAAS,KAAK,OACvB0C,EAAE1C,EAAM,IAAI,EAAIA,EAAM,OAAOkpB,CAAG,EAElC,OAAOxmB,CACT,CAKA,QAAS,CACP,SAAO,MAAe,IAAI,CAC5B,CACF,C,gECxQO,MAAMouJ,EAAuBxrJ,MAC3B,OAAI,CACT,MAAO,OACP,QAAS,OACT,eAAgB,aAChB,OAAQA,EAAM,QAAQ,EAAG,CAAC,CAC5B,CAAC,C,sFCJI,SAASyrJ,EAAwBvwJ,EAAkD,CAOxF,GALI,CAACA,EAAM,SAAS,QAKhB,IAAO,OAAOA,EAAM,IAAI,GAAG,cAC7B,OAGF,IAAIwwJ,EAEJ,OAAAA,EAAe,IAAI,KAAiB,CAClC,WAAYxwJ,EAAM,YAAc,OAChC,QAASA,EAAM,QACf,cAAeA,EAAM,eAAiB,OACtC,uBAAwB,GACxB,aAAcA,EAAM,aACpB,gBAAiBA,EAAM,gBACvB,YAAaA,EAAM,UAAY,OAC/B,gBAAiB,CACf,QAASA,EAAM,EACjB,EACA,WAAY,CAAC,IAAI,IAA6B,CAAC,CAAC,CAAC,CACnD,CAAC,EAGM,IAAI,KAAqB,CAC9B,MAAOwwJ,EACP,gBAAiBxwJ,EAAM,iBAAmB,CAAC,CAC7C,CAAC,CACH,C,wEChCO,SAASywJ,EAAYr7B,EAA2B,CAErD,OAAQA,EAAO,CACb,IAAK,OACH,SAAO,KAAE,iBAAkB,MAAM,EACnC,IAAK,mBACH,SAAO,KAAE,wBAAyB,uBAAuB,EAC3D,IAAK,MACH,SAAO,KAAE,gBAAiB,KAAK,EACjC,IAAK,SACH,SAAO,KAAE,mBAAoB,QAAQ,EACvC,IAAK,mBACH,SAAO,KAAE,6BAA8B,WAAW,EACpD,IAAK,SACH,SAAO,KAAE,0BAA2B,QAAQ,EAC9C,IAAK,SACH,SAAO,KAAE,0BAA2B,kBAAkB,EACxD,IAAK,QACH,SAAO,KAAE,yBAA0B,gBAAgB,EACrD,IAAK,YACH,SAAO,KAAE,sBAAuB,WAAW,EAC7C,IAAK,kBACH,SAAO,KAAE,4BAA6B,wCAAwC,EAChF,IAAK,UACH,SAAO,KAAE,oBAAqB,SAAS,EACzC,IAAK,gBACH,SAAO,KAAE,0BAA2B,0CAA0C,EAChF,IAAK,aACH,SAAO,KAAE,uBAAwB,YAAY,EAC/C,IAAK,oBACH,SAAO,KAAE,uBAAwB,YAAY,EAC/C,IAAK,uBACH,SAAO,KAAE,sBAAuB,WAAW,EAC7C,IAAK,uBACH,SAAO,KAAE,sBAAuB,WAAW,EAC7C,IAAK,4BACH,SAAO,KAAE,2BAA4B,gBAAgB,EACvD,IAAK,UACH,SAAO,KAAE,sBAAuB,WAAW,EAC7C,IAAK,oBACH,SAAO,KAAE,6BAA8B,mBAAmB,EAC5D,IAAK,8BACH,SAAO,KAAE,6BAA8B,kBAAkB,EAC3D,IAAK,iBACH,SAAO,KAAE,0BAA2B,eAAe,EACrD,IAAK,wBACH,SAAO,KAAE,uBAAwB,YAAY,EAC/C,IAAK,oBACH,SAAO,KAAE,0BAA2B,kBAAkB,EACxD,IAAK,SACH,SAAO,KAAE,mBAAoB,QAAQ,EACvC,IAAK,UACH,SAAO,KAAE,oBAAqB,SAAS,EACzC,IAAK,YACH,SAAO,KAAE,sBAAuB,WAAW,EAC7C,IAAK,WACH,SAAO,KAAE,qBAAsB,UAAU,EAC3C,IAAK,iCACH,SAAO,KAAE,mBAAoB,QAAQ,EACvC,IAAK,kBACH,SAAO,KAAE,4BAA6B,mBAAmB,EAC3D,IAAK,mBACH,SAAO,KAAE,6BAA8B,kBAAkB,EAC3D,IAAK,aACH,SAAO,KAAE,0BAA2B,MAAM,EAC5C,IAAK,aACH,SAAO,KAAE,0BAA2B,aAAa,EACnD,IAAK,oBACH,SAAO,KAAE,8BAA+B,aAAa,EACvD,IAAK,YACH,SAAO,KAAE,+BAAgC,gBAAgB,EAC3D,IAAK,YACH,SAAO,KAAE,+BAAgC,uBAAuB,EAClE,IAAK,WACH,SAAO,KAAE,8BAA+B,uBAAuB,EACjE,IAAK,WACH,SAAO,KAAE,8BAA+B,UAAU,EACpD,IAAK,SACH,SAAO,KAAE,4BAA6B,sBAAsB,EAC9D,IAAK,iBACH,SAAO,KAAE,2BAA4B,UAAU,EACjD,IAAK,0BACH,SAAO,KAAE,oCAAqC,kBAAkB,EAClE,IAAK,MACH,SAAO,KAAE,mBAAoB,gBAAgB,EAC/C,IAAK,cACH,SAAO,KAAE,2BAA4B,SAAS,EAChD,IAAK,cACH,SAAO,KAAE,2BAA4B,kBAAkB,EACzD,IAAK,aACH,SAAO,KAAE,0BAA2B,kBAAkB,EACxD,IAAK,cACH,SAAO,KAAE,wBAAyB,cAAc,EAClD,IAAK,iBACH,SAAO,KAAE,2BAA4B,gBAAgB,EACvD,IAAK,YACH,SAAO,KAAE,qCAAsC,0BAA0B,EAC3E,IAAK,kBACH,SAAO,KAAE,6BAA8B,kBAAkB,EAC3D,IAAK,eACH,SAAO,KAAE,yBAA0B,cAAc,EACnD,IAAK,QACH,SAAO,KAAE,kBAAmB,OAAO,EACrC,IAAK,QACH,SAAO,KAAE,kBAAmB,OAAO,EACrC,IAAK,UACH,SAAO,KAAE,oBAAqB,SAAS,EACzC,IAAK,eACH,SAAO,KAAE,yBAA0B,qBAAqB,EAC1D,IAAK,kBACH,SAAO,KAAE,6BAA8B,kBAAkB,EAC3D,IAAK,QACH,SAAO,KAAE,kBAAmB,cAAc,EAC5C,IAAK,kBACH,SAAO,KAAE,4BAA6B,iBAAiB,EACzD,IAAK,eACH,SAAO,KAAE,yBAA0B,OAAO,EAC5C,IAAK,cACH,SAAO,KAAE,wBAAyB,eAAe,EACnD,IAAK,kBACH,SAAO,KAAE,4BAA6B,UAAU,EAClD,IAAK,UACH,SAAO,KAAE,oBAAqB,SAAS,EACzC,IAAK,mBACH,SAAO,KAAE,6BAA8B,0BAA0B,EACnE,IAAK,YACH,SAAO,KAAE,sBAAuB,mBAAmB,EACrD,IAAK,aACH,SAAO,KAAE,uBAAwB,eAAe,EAClD,IAAK,iBACH,SAAO,KAAE,2BAA4B,gBAAgB,EACvD,IAAK,WACH,SAAO,KAAE,qBAAsB,UAAU,EAC3C,IAAK,OACH,SAAO,KAAE,iBAAkB,WAAW,EACxC,IAAK,uBACH,SAAO,KAAE,iCAAkC,cAAc,EAC3D,IAAK,yBACH,SAAO,KAAE,mCAAoC,sBAAsB,EACrE,IAAK,mCACH,SAAO,KAAE,sBAAuB,UAAU,EAC5C,IAAK,6BACH,SAAO,KAAE,6BAA8B,uBAAuB,EAChE,IAAK,8BACH,SAAO,KAAE,gBAAiB,KAAK,EACjC,IAAK,qBACH,SAAO,KAAE,eAAgB,aAAa,EACxC,IAAK,8BACH,SAAO,KAAE,uBAAwB,YAAY,EAC/C,IAAK,iCACH,SAAO,KAAE,sBAAuB,UAAU,EAC5C,IAAK,4CACH,SAAO,KAAE,wBAAyB,aAAa,EACjD,IAAK,oCACH,SAAO,KAAE,qBAAsB,UAAU,EAC3C,IAAK,mCACH,SAAO,KAAE,yBAA0B,UAAU,EAC/C,IAAK,+CACH,SAAO,KAAE,uBAAwB,YAAY,EAC/C,IAAK,OACH,SAAO,KAAE,iBAAkB,MAAM,EACnC,IAAK,mBACH,SAAO,KAAE,6BAA8B,SAAS,EAClD,IAAK,wBACH,SAAO,KAAE,kCAAmC,sBAAsB,EACpE,IAAK,mBACH,SAAO,KAAE,6BAA8B,iBAAiB,EAC1D,IAAK,WACH,SAAO,KAAE,qBAAsB,UAAU,EAC3C,IAAK,SACH,SAAO,KAAE,8BAA+B,mBAAmB,EAC7D,IAAK,cACH,SAAO,KAAE,wBAAyB,aAAa,EACjD,IAAK,iCACH,SAAO,KAAE,gCAAiC,oBAAoB,EAChE,IAAK,gDACH,SAAO,KAAE,sBAAuB,WAAW,EAC7C,IAAK,0BACH,SAAO,KAAE,yBAA0B,cAAc,EACnD,IAAK,qDACH,SAAO,KAAE,yBAA0B,cAAc,EACnD,IAAK,mDACH,SAAO,KAAE,yBAA0B,cAAc,EACnD,IAAK,sEACH,SAAO,KAAE,4CAA6C,6BAA6B,EACrF,IAAK,iCACH,SAAO,KAAE,mBAAoB,QAAQ,EACvC,IAAK,mCACH,SAAO,KAAE,6BAA8B,kBAAkB,EAC3D,QACE,MACJ,CACF,CAEO,SAASs7B,EAAet7B,EAA2B,CACxD,OAAQA,EAAO,CACb,IAAK,aACH,SAAO,KAAE,0BAA2B,qDAAqD,EAC3F,IAAK,oBACH,SAAO,KAAE,0BAA2B,qDAAqD,EAC3F,IAAK,gBACH,SAAO,KAAE,6BAA8B,0CAA0C,EACnF,IAAK,uBACH,SAAO,KAAE,yBAA0B,uDAAuD,EAC5F,IAAK,uBACH,SAAO,KACL,yBACA,2FACF,EACF,IAAK,uBACH,KAAE,gCAAiC,yDAAyD,EAC9F,IAAK,4BACH,SAAO,KAAE,8BAA+B,0DAA0D,EACpG,IAAK,8BACH,SAAO,KACL,gCACA,2GACF,EACF,IAAK,WACH,SAAO,KAAE,wBAAyB,+DAA+D,EACnG,IAAK,mBACH,SAAO,KACL,gCACA,2FACF,EACF,IAAK,iBACH,SAAO,KACL,8BACA,gFACF,EACF,IAAK,aACH,SAAO,KAAE,6BAA8B,iDAAiD,EAC1F,IAAK,YACH,SAAO,KACL,kCACA,uEACF,EACF,IAAK,YACH,SAAO,KAAE,kCAAmC,mDAAmD,EACjG,IAAK,WACH,SAAO,KAAE,iCAAkC,oDAAoD,EACjG,IAAK,SACH,SAAO,KAAE,+BAAgC,8CAA8C,EACzF,IAAK,0BACH,SAAO,KAAE,uCAAwC,kCAAkC,EACrF,IAAK,cACH,SAAO,KAAE,2BAA4B,gCAAgC,EACvE,IAAK,eACH,SAAO,KAAE,4BAA6B,gCAAgC,EACxE,IAAK,QACH,SAAO,KAAE,qBAAsB,kCAAkC,EACnE,IAAK,QACH,SAAO,KAAE,qBAAsB,iEAAiE,EAClG,IAAK,UACH,SAAO,KAAE,uBAAwB,4CAA4C,EAC/E,IAAK,eACH,SAAO,KAAE,4BAA6B,2CAA2C,EACnF,IAAK,kBACH,SAAO,KAAE,gCAAiC,4DAA4D,EACxG,IAAK,YACH,SAAO,KAAE,yBAA0B,8DAA8D,EACnG,IAAK,eACH,SAAO,KAAE,4BAA6B,yBAAyB,EACjE,IAAK,cACH,SAAO,KAAE,2BAA4B,0DAA0D,EACjG,IAAK,kBACH,SAAO,KAAE,+BAAgC,kDAAkD,EAC7F,IAAK,UACH,SAAO,KAAE,uBAAwB,qBAAqB,EACxD,IAAK,mBACH,SAAO,KAAE,gCAAiC,qEAAqE,EACjH,IAAK,kBACH,SAAO,KAAE,+BAAgC,0BAA0B,EACrE,IAAK,QACH,SAAO,KACL,qBACA,gGACF,EACF,IAAK,cACH,SAAO,KAAE,8BAA+B,wDAAwD,EAClG,IAAK,cACH,SAAO,KAAE,8BAA+B,2DAA2D,EACrG,IAAK,aACH,SAAO,KAAE,6BAA8B,oEAAoE,EAC7G,IAAK,OACH,SAAO,KAAE,oBAAqB,gDAAgD,EAChF,IAAK,aACH,SAAO,KAAE,0BAA2B,wCAAwC,EAC9E,IAAK,iBACH,SAAO,KAAE,8BAA+B,yCAAyC,EACnF,IAAK,WACH,SAAO,KAAE,wBAAyB,oCAAoC,EACxE,IAAK,uBACH,SAAO,KAAE,oCAAqC,uCAAuC,EACvF,IAAK,yBACH,SAAO,KAAE,sCAAuC,gEAAgE,EAClH,IAAK,iCACH,SAAO,KAAE,2BAA4B,mCAAmC,EAC1E,IAAK,0BACH,SAAO,KAAE,4BAA6B,wDAAwD,EAChG,IAAK,8CACH,SAAO,KACL,+CACA,2IACF,EACF,IAAK,6BACH,SAAO,KAAE,gCAAiC,0CAA0C,EACtF,QACE,MACJ,CACF,C,yIC9SO,eAAeu7B,EAAe71G,EAAoD,CACvF,IAAIpyB,EAAM,EACV,GAAI,CAACoyB,GAAO,OACV,MAAO,CAAC,EAGV,MAAM4xC,EAA0B,CAAC,EACjC,UAAWh7E,KAAQopC,EAAO,CACxB,MAAM/lB,EAAqB,CACzB,MAAO,IACP,KAAM,CAAC,WAAW,EAClB,MAAO,GACT,EAEA,OAAQrjB,EAAK,KAAM,CACjB,IAAK,kBACH,MAAM,IAAI,MAAM,wBAAwB,EAE1C,IAAK,mBACHqjB,EAAM,IAAM,CAACrjB,EAAK,KAAK,EACvB,MAEF,IAAK,mBACHqjB,EAAM,KAAO,CAACrjB,EAAK,KAAK,EACxB,KACJ,CACAg7E,EAAQ,KAAK,CACX,MAAO,GAAGhkE,GAAK,GACf,UAAW,KAAiB,OAC5B,OAAQqM,CACV,CAAC,CACH,CAGA,GAAI,CAAC,IAAO,eAAe,iBAAkB,CAC3C,MAAM67H,KAAW,KAAmB,EAC9B5pH,EAAwB,CAAC,EAC/B,QAASvjC,EAAI,EAAGA,EAAIipF,EAAQ,OAAQjpF,IAAK,CACvC,MAAMotJ,GAAQ,MAAMD,EAAS,OAAOlkE,EAAQjpF,CAAC,EAAE,MAAO,GAAG,KACzDujC,EAAI,KAAK,CAAE,GAAG8T,EAAMr3C,CAAC,EAAG,WAAYotJ,EAAK,IAAK3uJ,IAAO,CAAE,GAAGA,CAAE,EAAE,CAAE,CAAC,CACnE,CACA,OAAO8kC,CACT,CAGA,MAAM6rB,EAAK,QAAM,KAAqB,EAEhCi+F,EAAM,QAAM,KAAcj+F,EAAG,MAAM,CAAE,QAAA65B,CAAQ,CAA8C,CAAC,EAClG,GAAIokE,EAAI,KAAK,SAAWh2G,EAAM,OAC5B,MAAM,IAAI,MAAM,wBAAwB,EAE1C,OAAOA,EAAM,IAAI,CAACppC,EAAMgX,IAAQ,CAC9B,MAAMmoI,EAAO,IAAI,IAAoCC,EAAI,KAAKpoI,CAAG,CAAC,EAClE,MAAO,CAAE,GAAGhX,EAAM,WAAYm/I,EAAK,IAAK3uJ,IAAO,CAAE,GAAGA,CAAE,EAAE,CAAE,CAC5D,CAAC,CACH,CAEO,SAAS6uJ,GAA+B,CAC7C,MAAO,CACL,WAAY,gCACZ,KAAM,WACN,KAAM,CACJ,MAAO,CAAC,EACR,SAAU,KACV,MAAO,EACT,EACA,SAAU,CACR,KAAM,EACR,EACA,OAAQ,CAAC,CACX,CACF,CAEO,SAASC,EAAgBC,EAAuBl8H,EAA4B,CACjF,OAAKA,GAAO,QAGZA,EAAQA,EAAM,YAAY,EACnBk8H,EAAU,OAAQ/uJ,GAAMA,EAAE,MAAM,MAAM,YAAY,EAAE,SAAS6yB,CAAM,CAAC,GAHlEk8H,CAIX,C,maCjFO,SAASC,EAAiBC,GAAwBC,GAA+B,CACtF,MAAM75I,GAAS85I,EAAiB,CAAE,KAAMF,GAAY,MAAO,EAAG,CAAE,KAAMC,GAAQ,MAAO,CAAC,EAAE,KACxF,MAAO,CAAE,GAAGD,GAAa,OAAA55I,EAAO,CAClC,CAEO,SAAS85I,EAAiBC,GAAyCC,GAA8B,CACtG,GAAI,CAACD,GACH,OAAOE,EAAmBD,EAAS,EAGrCA,GAAU,KAAK,QAASE,IAAa,CACnC,MAAMC,GAAeJ,GAAc,KAAK,KAAMpwJ,IAAUywJ,EAAczwJ,GAAOuwJ,EAAQ,CAAC,EACtF,GAAI,CAACC,GAAc,CACjBJ,GAAc,KAAK,KAAKM,EAAeH,EAAQ,CAAC,EAChD,MACF,CACAI,EAAcH,GAAcD,EAAQ,CACtC,CAAC,EAED,MAAMK,GAAe,CAAC,GAAIR,GAAc,QAAU,CAAC,EAAI,GAAIC,GAAU,QAAU,CAAC,CAAE,EAK9EO,GAAa,OAAS,IACxBR,GAAc,OAASQ,IAQzB,MAAMC,GAAcT,GAAc,OAASC,GAAU,MACjDQ,IAAe,OACjBT,GAAc,MAAQS,IAGxB,MAAMC,GAAiB,CAAC,GAAIV,GAAc,UAAY,CAAC,EAAI,GAAIC,GAAU,UAAY,CAAC,CAAE,EACxF,OAAIS,GAAe,OAAS,IAC1BV,GAAc,SAAWU,IAGpBV,EACT,CAEA,SAASO,EAAcI,GAAiB5xJ,GAAmB,CAEzD,MAAM6xJ,GAAc,KAAK,IAAID,GAAK,OAAO,OAAQ5xJ,GAAO,OAAO,MAAM,EACrE,QAASoD,GAAI,EAAGA,GAAIyuJ,GAAazuJ,KAAK,CAEpC,GAAI,CAACwuJ,GAAK,OAAOxuJ,EAAC,EAChB,SAIF,MAAM0uJ,GAAcC,EAAgBH,GAAK,OAAOxuJ,EAAC,EAAGpD,GAAO,OAAQoD,EAAC,EACpE,GAAK0uJ,KAGLF,GAAK,OAAOxuJ,EAAC,EAAE,OAAS,CAAC,EAAE,OAAO,MAAM0uJ,GAAY,OAAQF,GAAK,OAAOxuJ,EAAC,EAAE,MAAM,EAC7E0uJ,GAAY,OAAO,CACrB,MAAME,GAAkBJ,GAAK,OAAOxuJ,EAAC,EAAE,OAAO,MAAM,GAAK,CAAC,EAC1DwuJ,GAAK,OAAOxuJ,EAAC,EAAE,MAAQpD,GAAO,OAAOoD,EAAC,EAAE,OAAO,OAAO4uJ,EAAK,CAC7D,CACF,CACAJ,GAAK,QAAU5xJ,GAAO,OACtB4xJ,GAAK,KAAO,CACV,GAAGA,GAAK,KACR,MAAOK,EAAyBL,GAAK,MAAM,OAAS,CAAC,EAAG5xJ,GAAO,MAAM,OAAS,CAAC,CAAC,CAClF,CACF,CAEA,SAAS+xJ,EAAgBG,GAAuBC,GAAuBjkJ,GAAe,CACpF,MAAMkkJ,GAAaD,GAAa,OAAQ/0I,IAAMA,GAAE,OAAS80I,GAAe,IAAI,EAE5E,OAAIE,GAAW,SAAW,EACjBA,GAAW,CAAC,EAGjBF,GAAe,OACVE,GAAW,KAAMC,OAAc,MAAeH,GAAe,QAAU,CAAC,EAAGG,GAAU,QAAU,CAAC,CAAC,CAAC,EAGpGF,GAAajkJ,EAAK,CAC3B,CAEA,MAAMokJ,EAAmB,iCAEzB,SAASL,EACPM,GACAC,GACuB,CAEvB,MAAMC,GAAWF,GAAU,KAAM1vJ,IAAMA,GAAE,cAAgByvJ,CAAgB,EACnEI,GAAaF,GAAY,KAAM3vJ,IAAMA,GAAE,cAAgByvJ,CAAgB,EAE7E,GAAII,IAAc,MAAQD,IAAY,KACpC,MAAO,CAAC,CAAE,MAAOC,GAAW,MAAQD,GAAS,MAAO,YAAaH,EAAkB,KAAMG,GAAS,IAAK,CAAC,EAI1G,MAAME,GAAaD,IAAcD,GACjC,OAAIE,IAAc,KACT,CAACA,EAAU,EAGb,CAAC,CACV,CAKO,SAASxB,EAAmBhvH,GAAgD,CAKjF,MAJoB,CAClB,GAAGA,GACH,KAAMA,GAAS,KAAK,IAAIovH,CAAc,CACxC,CAEF,CAEA,SAASA,EAAe1wJ,GAAqD,CAC3E,MAAO,CACL,GAAGA,GACH,OAAQA,GAAM,OAAO,IAAK1B,KAAkB,CAC1C,GAAGA,GACH,OAAQA,GAAM,MAChB,EAAE,CACJ,CACF,CAEA,SAASmyJ,EAAcsB,GAAmBC,GAA4B,CACpE,GAAID,GAAO,QAAUC,GAAO,OAASD,GAAO,OAASC,GAAO,KAC1D,MAAO,GAGT,MAAMC,GAAaF,GAAO,MAAM,KAC1BG,GAAaF,GAAO,MAAM,KAEhC,GAAIC,KAAeC,GAEjB,MAAO,GAIT,GAAID,KAAe,IAAc,gBAAiB,CAChD,MAAME,GAASJ,GAAO,OAAO,KAAMx1I,IAAMA,GAAE,OAAS,KAAU,MAAM,EAC9D61I,GAASJ,GAAO,OAAO,KAAMz1I,IAAMA,GAAE,OAAS,KAAU,MAAM,EACpE,OAAI41I,KAAW,QAAaC,KAAW,OAE9B,MAGF,MAAeD,GAAO,QAAU,CAAC,EAAGC,GAAO,QAAU,CAAC,CAAC,CAChE,CAKA,MAAMC,GAAcN,GAAO,MAAM,QAAQ,UACnCO,GAAcN,GAAO,MAAM,QAAQ,UAEzC,OAAIK,KAAgB,qBAAuBC,KAAgB,oBAClD,GACED,KAAgBC,EAO7B,C,4OCxJO,MAAMC,EAAiC3yJ,IAAsC,CAClF,MAAM4yJ,GAA2B,CAAC,EAC5BC,GAA2B,CAAC,EAC5BC,GAAmC,CAAC,EACpCC,GAA0B,CAAC,EAC3BC,GAA2B,CAAC,EAC5BC,GAA+B,CAAC,EAChCC,GAAgC,CAAC,EACjCC,GAA4B,CAAC,EAEnC,UAAW/yJ,MAASJ,GAAK,OAAQ,CAC/B,GAAIozJ,GAAahzJ,EAAK,EAAG,CACvB+yJ,GAAa,KAAK/yJ,EAAK,EACvB,QACF,CACA,OAAQA,GAAM,MAAM,2BAA4B,CAC9C,IAAK,OACH2yJ,GAAW,KAAK3yJ,EAAK,EACrB,MACF,IAAK,QACHwyJ,GAAY,KAAKxyJ,EAAK,EACtB,MACF,IAAK,QACH4yJ,GAAY,KAAK5yJ,EAAK,EACtB,MACF,IAAK,QACHyyJ,GAAY,KAAKzyJ,EAAK,EACtB,MACF,IAAK,gBACH0yJ,GAAoB,KAAK1yJ,EAAK,EAC9B,MACF,IAAK,YACH6yJ,GAAgB,KAAK7yJ,EAAK,EAC1B,MACF,IAAK,aACH8yJ,GAAiB,KAAK9yJ,EAAK,EAC3B,MACF,QACMizJ,GAAajzJ,EAAK,GACpBwyJ,GAAY,KAAKxyJ,EAAK,EACtByyJ,GAAY,KAAKzyJ,EAAK,CAK5B,CACF,CAEA,MAAO,CACL,GAAGJ,GACH,YAAA4yJ,GACA,YAAAC,GACA,WAAAE,GACA,YAAAC,GACA,gBAAAC,GACA,aAAAE,GACA,iBAAAD,GACA,oBAAAJ,GACA,YAAa,KACb,YAAa,KACb,WAAY,KACZ,oBAAqB,IACvB,CACF,EAEaQ,EAA2B,CAAC,CACvC,2BAAAC,GACA,QAAAnoI,GACA,aAAAE,GACA,wBAAAkoI,EACF,IAMUxzJ,IAA+B,CACrC,GAAIuzJ,IAA8BC,GAChC,UAAWpzJ,MAASJ,GAAK,OACvB,UAAWtB,MAAS0B,GAAM,OAAQ,CAChC1B,GAAM,OAAO,MAAQ,CAAC,EAEtBA,GAAM,QAAUA,GAAM,YAAW,KAAuB,EAExD,MAAM+0J,GAAwC,CAAC,EAC/CrzJ,GAAM,OAAO,IAAK1B,IAAU,CAC1B+0J,GAAc,GAAG/0J,GAAM,IAAI,EAAE,EAAI,sBAA0BA,GAAM,IAAI,KACvE,CAAC,EAEDA,GAAM,OAAO,MAAM,KAAK,CACtB,IAAK,GACL,OAAQ,MAAqB,0BAC7B,MAAO,kBAAkBA,GAAM,IAAI,GACnC,SAAU,CACR,cAAe80J,GAAwB,IACvC,eAAgBA,GAAwB,KACxC,MAAO,CAAE,WAAY,CAAE,IAAKA,GAAwB,GAAI,CAAE,CAC5D,EACA,KAAM,CACJ,gBAAiB,CAAE,YAAa90J,GAAM,KAAM,KAAM+0J,GAAe,SAAUA,EAAc,CAC3F,CACF,CAAC,CACH,SAEOroI,IAAS,QAAUE,IAAc,OAAQ,CAClD,MAAMooI,MAA4B,gBAAU,WAAQtoI,GAAS,OAAO,EAAG,kBAAkB,KACzF,MAA+BprB,GAAK,OAAQsrB,GAAcooI,EAAyB,CACrF,CACA,OAAO1zJ,EACT,EAGW2zJ,GAA2B3zJ,IACjCA,GAAK,YAAY,OAIf,CAAE,GAAGA,GAAM,YAAaA,GAAK,WAAY,EAHvC,CAAE,GAAGA,GAAM,YAAa,IAAK,EAW3B4zJ,GAA2B5zJ,IAAyD,CAC/F,GAAIA,GAAK,YAAY,SAAW,EAC9B,SAAO6pI,EAAA,IAAG,CAAE,GAAG7pI,GAAM,YAAa,IAAK,CAAC,EAG1CA,GAAK,YAAY,KAAK,CAAC6zJ,GAAmBC,KAAsB,CAC9D,MAAMC,GAAcF,GAAO,MACrBG,GAAcF,GAAO,MAE3B,OAAIC,GAAcC,GACT,EAELD,GAAcC,GACT,GAEF,CACT,CAAC,EAED,MAAMC,GAAoBj0J,GAAK,YAAY,MAAOk0J,IAAOb,GAAaa,EAAE,CAAC,EACnEC,GAAmB,CACvB,YAAc/yJ,IAAcA,EAC9B,EASA,OAJoB6yJ,MAChBpqB,EAAA,IAAG7pI,GAAK,WAAW,EAAE,KAAK,IAAqB,uBAAuB,SAAS,CAAC,EAAGm0J,EAAgB,CAAC,KACpGtqB,EAAA,IAAG7pI,GAAK,WAAW,EAAE,KAAK,IAAqB,iBAAiB,SAAS,CAAC,EAAGm0J,EAAgB,CAAC,GAE/E,QACjBjqB,EAAA,GAAKhqI,IAAW,CACd,UAAWE,MAASF,GAElB,UAAWxB,MAAS0B,GAAM,OACxB1B,GAAM,QACJA,GAAM,YACN,KAAoB,CAClB,MAAAA,GACA,MAAO6D,EAAA,EAAO,OACd,SAAUvC,GAAK,SAAS,UAAY,SACtC,CAAC,EAIP,MAAO,CAAE,GAAGA,GAAM,YAAaE,EAAO,CACxC,CAAC,CACH,CACF,EAEak0J,GAAmCp0J,IAAyD,CAEvG,MAAM6yJ,GAAc7yJ,GAAK,oBAEzB,GAAI,CAAC6yJ,IAAeA,GAAY,SAAW,EACzC,SAAOhpB,EAAA,IAAG,CAAE,GAAG7pI,GAAM,YAAa,IAAK,CAAC,EAG1C6yJ,GAAY,KAAK,CAACgB,GAAmBC,KAAsB,CACzD,MAAMC,GAAcF,GAAO,MACrBG,GAAcF,GAAO,MAE3B,OAAIC,GAAcC,GACT,EAELD,GAAcC,GACT,GAEF,CACT,CAAC,EAED,MAAMC,GAAoBpB,GAAY,MAAOqB,IAAOb,GAAaa,EAAE,CAAC,EAC9DC,GAAmB,CACvB,YAAc/yJ,IAAcA,EAC9B,EASA,OAJoB6yJ,MAChBpqB,EAAA,IAAGgpB,EAAW,EAAE,KAAK,IAAqB,uBAAuB,SAAS,CAAC,EAAGsB,EAAgB,CAAC,KAC/FtqB,EAAA,IAAGgpB,EAAW,EAAE,KAAK,IAAqB,iBAAiB,SAAS,CAAC,EAAGsB,EAAgB,CAAC,GAE1E,QACjBjqB,EAAA,GAAKhqI,IAAW,CACd,MAAME,GAAQF,GAAO,CAAC,EAGtB,UAAWxB,MAAS0B,GAAM,OACxB1B,GAAM,QACJA,GAAM,YACN,KAAoB,CAClB,MAAAA,GACA,MAAO6D,EAAA,EAAO,OACd,SAAUvC,GAAK,SAAS,UAAY,SACtC,CAAC,EAGL,MAAO,CAAE,GAAGA,GAAM,oBAAqBI,EAAM,CAC/C,CAAC,CACH,CACF,EAEai0J,EACX,CACEh1J,GAKI,CAAC,IAENW,IAA6C,CAC5C,GAAIA,GAAK,WAAW,SAAW,EAC7B,MAAO,CAAE,GAAGA,GAAM,WAAY,IAAK,EAGrC,MAAMs0J,GAAat0J,GAAK,SAAS,WAC3Bu0J,MAAa,OACjBv0J,GAAK,WACLs0J,GACAj1J,GAAQ,cACRA,GAAQ,QACRA,GAAQ,WACV,EACM+mB,MAAY,MAA2B/mB,GAAQ,eAAe,EAC9Dm1J,MAAmB,MAAeD,GAAYnuI,EAAS,EACvD1Y,GAAO8mJ,GAAiB,KACxB/9I,GAAS+9I,GAAiB,OAC1BC,GAAa,CAAE,GAAGD,GAAkB,KAAA9mJ,GAAM,OAAA+I,EAAO,EAEvD,MAAO,CAAE,GAAGzW,GAAM,WAAAy0J,EAAW,CAC/B,EAGK,SAASC,GACd10J,GACA20J,GACAC,GACAxpI,GACAE,GACAioI,GACAsB,GAC8B,CAC9B,SAAOhrB,EAAA,IAAG7pI,EAAI,EAAE,QACdkqI,EAAA,GAAKlqI,OAAoB,OAAoBA,GAAM20J,EAAa,CAAC,KACjEzqB,EAAA,GACEopB,EAAyB,CACvB,wBAAyBuB,GACzB,2BAAAtB,GACA,QAAAnoI,GACA,aAAAE,EACF,CAAC,CACH,KACA4+G,EAAA,GAAIyoB,CAA6B,KACjCzoB,EAAA,GAAIypB,EAAuB,KAC3BzpB,EAAA,GAAI0qB,EAAmB,KACvBE,EAAA,GAASV,EAA+B,KACxCU,EAAA,GAASlB,EAAuB,CAClC,CACF,CAKA,SAASP,GAAajzJ,GAA2B,CAC/C,MAAM20J,MAAU,WAAQ30J,GAAM,OAAS1B,IAAUA,GAAM,IAAI,EAC3D,MAAO,GACL,OAAO,KAAKq2J,EAAO,EAAE,SAAW,GAAKA,GAAQ,KAAU,IAAI,GAAG,SAAW,GAAKA,GAAQ,KAAU,MAAM,EAE1G,CAOA,SAAS3B,GAAahzJ,GAA2B,CAC/C,OAAMA,GAAM,MAAM,kCACT,MAAeA,GAAM,MAAM,8BAA8B,EAE3D,EACT,C,wFCtQO,MAAM40J,GAA0BnqI,IAC7BvM,IAAsB,CAC5B,MAAMgS,GAAahS,GAAM,QAAQ,MAAMuM,EAAS,EAChD,OAAKyF,IAGEA,GAAW,cACdA,GAAW,cAAc,QAAU,KAAa,SAC9CA,GAAW,cAAc,QAAU,KAAa,UAJ7C,EAMX,EAWW2kI,MAAoB,MAAiC,qBAAqB,EAa1EC,MAAsB,MAAmC,uBAAuB,EAQhFC,MAAsB,MAAmC,uBAAuB,EAMhFC,MAAwB,MAAqC,yBAAyB,EAOtFC,MAA+B,MAC1C,gCACF,EAEMC,MAAqC,MAIxC,4CAA4C,EAgBlCC,MAA4C,MACvD,mDACF,EAEaC,MAA4C,MACvD,mDACF,EAEaC,MAAgC,MAC3C,uCACF,EAWMC,MAAgD,MACpD,uDACF,EAKMC,MAAqC,MAIxC,4CAA4C,EAMlCC,MAA2B,MAAgC,4BAA4B,EASvFC,MAAmB,MAAgC,oBAAoB,EAMvEC,MAA2B,MAAwC,oBAAoB,EAMvFC,MAAuB,MAAoC,wBAAwB,EAKnFC,MAAY,MAA+B,mBAAmB,EAS9DC,MAAkB,MAA+B,mBAAmB,EAQpEC,MAAiB,MAA8B,kBAAkB,EAWjEC,MAA0B,MAAuC,2BAA2B,EAQ5FC,MAAmB,MAAgC,oBAAoB,EAK7E,SAASC,GAAYxrI,GAAmBpd,GAA2C,CACxF,MAAO,OAAOsd,GAAUD,KAAa,CACnC,MAAM88C,GAAO98C,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAC/C,IAAIyrI,GAGC1uF,GAAK,oBAAoB,KAAK,MAIjC0uF,MAAqB,YAAS1uF,GAAK,QAAU3zC,IAAU,CAAC,CAACA,GAAM,UAAU,GAAG,YAAc,OAH1FqiI,GAAqB1uF,GAAK,oBAAoB,OAAO,EAMvD,MAAM3zC,GAAQ,QAAM,MAAmB2zC,GAAK,QAASn6D,GAAO6oJ,EAAkB,EAE9EvrI,GAASkqI,GAAkB,CAAE,UAAApqI,GAAW,MAAApd,GAAO,MAAAwmB,EAAM,CAAC,CAAC,CACzD,CACF,CAIO,SAASsiI,GAAc1rI,GAAsC,CAClE,MAAO,CAACE,GAAUD,KAAa,CAC7BC,GAASmrI,GAAe,CAAE,UAAArrI,EAAU,CAAC,CAAC,EACtCE,GAASoqI,GAAoB,CAAE,UAAAtqI,EAAU,CAAC,CAAC,EAE3C,MAAMwlE,GAAuBvlE,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,qBAElE,UAAWlvB,MAAQ,MACjBovB,GAASyqI,GAA0C,CAAE,UAAA3qI,GAAW,KAAAlvB,EAAK,CAAC,CAAC,EAGnE00F,GAAqB10F,EAAI,GAAG,MAAM,QAAU,KAAa,MAC3DovB,GAAS0qI,GAA8B,CAAE,UAAA5qI,GAAW,KAAAlvB,EAAK,CAAC,CAAC,CAGjE,CACF,CAEA,MAAM66J,GAAyB,CAAC5rI,GAA2BQ,KAAyB,CAClF,MAAMqrI,GAAgB7rI,GAAW,OAAO,EACxC,OAAOQ,GAAQ,IAAK6I,KACX,CAAE,GAAGA,GAAO,WAAYwiI,EAAc,EAC9C,CACH,EAEMC,GAAuB,MAC3BC,GACAC,GACAxrI,KACyB,CACzB,IAAIyrI,GAA0B,CAAC,EAC/B,GAAID,GAAiB,MAAM,KAAOD,GAAiB,MAAM,GACvDE,GAAazrI,cACJ,MAAsBwrI,EAAgB,MAAK,MAAsBD,EAAgB,EAAG,CAC7F,MAAMG,GAAkB,MAAMF,GAAiB,wBAAwBxrI,EAAO,EAC9EyrI,GAAa,MAAMF,GAAiB,0BAA0BG,EAAe,CAC/E,MAAWH,GAAiB,gBAE1BE,GAAa,MAAMF,GAAiB,cAAcvrI,GAASwrI,EAAgB,GAG7E,OAAOJ,GAAuBG,GAAkBE,EAAU,CAC5D,EAEaE,MAAgB,MAC3B,wBACA,MAAO,CAAE,QAAA3rI,GAAS,UAAAP,GAAW,QAAAxrB,EAAQ,EAAG,CAAE,SAAAyrB,GAAU,SAAAC,EAAS,IAAM,CACjE,IAAIisI,GAAkB,GACtB,MAAMC,GAAansI,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,QAClDqsI,GAAUpsI,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,oBAAoB,IACnEssI,GAAqBrsI,GAAS,EAAE,QAAQ,yBACxCssI,GAA2BD,IAAoB,YAAc,GAG/D,EAFe,OAAO,KAAKrsI,GAAS,EAAE,QAAQ,KAAK,EAAE,CAAC,IAAMD,KAE7CusI,IAA4B,CAACD,IAAoB,kBAClEpsI,MAAS,OAA+B,CAAE,iBAAkB,EAAK,CAAC,CAAC,EAGrE,UAAWklC,MAAY7kC,GACrB,UAAWisI,MAAYJ,GAAY,CACjC,GAAIhnG,GAAS,QAAUonG,GAAS,OAASpnG,GAAS,YAAY,OAASonG,GAAS,YAAY,MAEtF,CAACh4J,IAAS,eAAgB,CAC5B,MAAMi4J,GAAkB,QAAM,KAAiB,EAAE,IAAID,GAAS,UAAU,EAClEE,GAAW,QAAM,KAAiB,EAAE,IAAI,CAAE,IAAKtnG,GAAS,YAAY,GAAI,CAAC,EAC/E,MAAMllC,GAASysI,GAAc3sI,GAAWosI,GAAYK,GAAiBC,GAAUtnG,GAAS,KAAK,CAAC,EAC9F+mG,GAAkB,EACpB,CAGF,GACEE,KAAY,MACZjnG,GAAS,QAAUonG,GAAS,OAC5BpnG,GAAS,YAAY,MAAQonG,GAAS,YAAY,IAClD,CACA,MAAMhsI,MAAiB,OAAkB,KAAuBD,EAAO,EACjEE,GAAe,QAAM,MAA4BD,EAAc,EACrEN,MAAS,OAAuB,CAAE,UAAAF,GAAsB,aAAcS,GAAa,cAAgB,CAAC,CAAE,CAAC,CAAC,CAC1G,CACF,CAIG0rI,IACHjsI,GAASmqI,GAAoB,CAAE,QAAA9pI,GAAS,UAAAP,EAAU,CAAC,CAAC,EAIlDO,GAAQ,OAAS6rI,GAAW,QAC9BlsI,GAAS0sI,GAAW,CAAE,UAAA5sI,EAAU,CAAC,CAAC,CAEtC,CACF,EAUa2sI,GAAgB,CAC3B3sI,GACAO,GACAwrI,GACAD,GACAe,KAEO,MAAO3sI,IAAa,CACzB,GAAI,CAAC6rI,GAAkB,CAErB7rI,GAASqqI,GAAsB,CAAE,UAAAvqI,GAAW,QAAAO,EAAQ,CAAC,CAAC,EACtD,MACF,CAEA,IAAIusI,GAAkBvsI,GAEtB,GAAIurI,GAAiB,MAAQ,KAC3BgB,GAAkBvsI,GAAQ,IAAK6I,KACtB,CAAE,GAAGA,GAAO,WAAY2iI,GAAiB,OAAO,CAAE,EAC1D,UAGMA,GAAiB,MAAQ,KAAuB,CACvD,MAAMvlE,MAAiB,WAAQjmE,GAAU6I,IAAUA,GAAM,YAAY,GAAG,EAClE2jI,GAA2B,MAAM,QAAQ,IAC7C,OAAO,KAAKvmE,EAAc,EAAE,IAAI,MAAO9tE,IAAgB,CACrD,MAAM+zI,GAAkB,QAAM,KAAiB,EAAE,IAAI,CAAE,IAAK/zI,EAAI,CAAC,EACjE,OAAO,MAAMmzI,GAAqBC,GAAkBW,GAAiBjmE,GAAe9tE,EAAG,CAAC,CAC1F,CAAC,CACH,EACAo0I,MAAkB,WAAQC,GAAyB,OAAQC,IAAQA,GAAI,OAAS,CAAC,CAAC,CACpF,KAAO,CACL,IAAIC,GAAkB1sI,GACtB,GAAIssI,KAAyB,OAAW,CACtC,MAAMK,GAAe3sI,GAAQ,KAAM6I,IAAUA,GAAM,QAAUyjI,EAAoB,EAC7EK,KACFD,GAAkB,CAACC,EAAY,EAEnC,CACAJ,GAAkB,MAAMjB,GAAqBC,GAAkBC,GAAkBkB,EAAe,CAClG,CAGA,IAAIE,GAAc,QAAM,MAAcL,GAAiBhB,GAAiB,OAAO,CAAC,EAEhF,GAAIe,KAAyB,OAAW,CAElCC,GAAgB,SAAW,IAE7BA,GAAkB,CADF,QAAM,MAAmB,CAAC,EAAG,OAAWhB,GAAiB,OAAO,CAAC,CACvD,GAI5B,MAAMsB,GAAkB7sI,GAAQ,UAAW6I,IAAUA,GAAM,QAAUyjI,EAAoB,EAEnFK,GAAe,CAAE,GAAGC,GAAY,CAAC,EAAG,MAAO5sI,GAAQ6sI,EAAe,EAAE,KAAM,EAChFD,GAAc,CAAC,GAAG5sI,EAAO,EAGzB4sI,GAAYC,EAAe,EAAIF,EACjC,CAEA,OAAAhtI,GAASqqI,GAAsB,CAAE,UAAAvqI,GAAW,QAASmtI,EAAY,CAAC,CAAC,EAC5DA,EACT,EASK,SAASE,GACdrtI,GACAstI,GACAC,GACmB,CACnB,MAAO,OAAOrtI,GAAUD,KAAa,CACnC,MAAMxM,GAAQwM,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAE1C,CAAE,QAAAO,EAAQ,EAAI9M,GAId05I,IAFiB,MAAM,QAAQ,IAAI5sI,GAAQ,IAAK6I,IAAUmkI,GAAS,CAAE,GAAGnkI,EAAM,EAAGkkI,EAAY,CAAC,CAAC,GAElE,IAAI,CAACE,GAAW11J,QAC1C,MAAmC01J,GAAWjtI,GAASzoB,EAAC,CAChE,EAEDooB,GAAS8qI,GAAiB,CAAE,UAAAhrI,GAAW,QAASmtI,EAAY,CAAC,CAAC,EACzDG,GAAa,eAChBptI,GAAS0sI,GAAW,CAAE,UAAA5sI,EAAU,CAAC,CAAC,CAEtC,CACF,CAEA,SAASshE,GAAYvhE,GAA2BqJ,GAAkB,CAChE,GAAI,EAAArJ,GAAW,aAAe,CAACA,GAAW,YAAYqJ,EAAK,GAGzD,OAAOA,EAEX,CAEA,eAAeqkI,GACbvtI,GACAzM,GACAsM,GACAQ,GACA,CAYA,MAAMmtI,IAXqB,MAAM,QAAQ,IACvCntI,GAAQ,IAAI,MAAO6I,IAAU,CAC3B,GAAIA,GAAM,YAAY,MAAQrJ,GAAW,IACvC,OAAOuhE,GAAYvhE,GAAYqJ,EAAK,EAC/B,CACL,MAAMukI,GAAU,QAAM,MAAiB,EAAE,IAAIvkI,GAAM,UAAU,EAC7D,OAAOk4D,GAAYqsE,GAASvkI,EAAK,CACnC,CACF,CAAC,CACH,GAE2C,OAAQA,IAA8B,CAAC,CAACA,EAAK,EAEpFskI,GAAgB,OAAS,IAK3BxtI,MAAS,OAAe,GAAMH,GAAW,IAAKA,GAAW,KAAM2tI,GAAiBh2J,EAAA,EAAO,mBAAmB,CAAC,EACvGA,EAAA,EAAO,qBAETwoB,MAAS,OAAe,GAAOH,GAAW,IAAKA,GAAW,KAAM2tI,GAAiB,EAAK,CAAC,EAKzF,MAAMxtI,MAAS,OAAgB,CAAC,EAEpC,CASO,MAAM0sI,MAAa,MACxB,qBACA,MAAO,CAAE,UAAA5sI,GAAW,cAAA4tI,EAAc,EAAG,CAAE,SAAA1tI,GAAU,SAAAD,EAAS,IAAM,CAEzDA,GAAS,EAAE,SAAS,MAAMD,EAAS,GAAG,UACzCE,GAASwrI,GAAc1rI,EAAS,CAAC,EAGnC,KAAM,CAAE,mCAAA6tI,GAAoC,WAAAl6J,GAAY,2BAAA+0J,EAA2B,EAAI,QAAM,OAC3FzoI,GAAS,EACTD,EACF,EACM8tI,MAAgB,MAAgB9tI,EAAS,EAE/CE,MAAS,OAAW,CAAE,UAAAF,EAAU,CAAC,CAAC,EAG9B4tI,KAAkB,IACpB1tI,GAAS6tI,GAAW/tI,EAAS,CAAC,EAIhC,MAAMguI,GADe/tI,GAAS,EACQ,QAAQ,MAAMD,EAAS,EACvD,CACJ,mBAAAY,GACA,eAAAqtI,GACA,OAAQC,GACR,MAAA9uJ,GACA,SAAA+uJ,GACA,cAAArE,GACA,kBAAAsE,GACA,gBAAAC,GACA,cAAA9tG,GACA,MAAA7gB,GACA,qBAAA8lD,EACF,EAAIwoE,GAEJ,IAAIM,GACAC,GAEJ,MAAMhuI,GAAUytI,GAAiB,QAAQ,IAAK5kI,KAAW,CACvD,GAAGA,GACH,WAAYA,GAAM,YAAcxI,IAAoB,OAAO,CAC7D,EAAE,EAEEA,IAAsB,MACxB6sI,GAAcvtI,GAAUD,GAAS,EAAE,QAASW,GAAoBL,EAAO,EAGzE,MAAMiuI,MAAc,OAAoB9uH,GAAO6gB,EAAa,EAG5D,GAAIiuG,GACFF,MAAiBG,EAAA,GAAc,IAACzvB,EAAA,IAAGwvB,EAAW,EAAGV,EAAa,CAAC,EAAE,QAC/D7D,EAAA,GAAS,CAAC,CAAC90J,GAAMsrB,EAAY,IAC3BopI,GACE10J,GACA20J,GACAN,EAAuB,CAAE,cAAAjpG,GAAe,gBAAA8tG,GAAiB,QAAA9tI,EAAQ,CAAC,EAClEA,GACAE,GACAioI,GACAmF,EACF,CACF,CACF,EAEAU,GAAuBD,GAAe,UAAWn5J,IAAS,CACxD+qB,GAAS6qI,GAAyB,CAAE,UAAA/qI,GAAW,SAAU7qB,EAAK,CAAC,CAAC,CAClE,CAAC,MAGI,CACL,GAAI,IAAC,MAAiBorB,EAAO,GAAK,CAACK,GACjC,OAKF,MAAM8tI,GAAc9tI,IAAoB,YAExC,MAAewtI,EAAiB,EAEhC,MAAMO,GAA6B,CACjC,YAAAD,GAOA,cAAeT,GACf,cAAeC,EACjB,EAEM1lJ,MAAW,KAAYyX,GAAS,EAAE,IAAI,EACtC2uI,MAAc,MAClB5uI,GACAO,GACAouI,GACAvvJ,GACA+uJ,GACA3lJ,GACA7U,EACF,EA0DA,GAxDAusB,GAAS+qI,GAAyB,CAAE,UAAAjrI,GAAW,aAAc,KAAa,OAAQ,CAAC,CAAC,EAEpFsuI,MAAiBG,EAAA,GAAc,IAC7BI,EAAA,IAAWjuI,GAAoBguI,GAAY,OAAO,EAI/C,KAAKV,MAAOj6I,EAAA,GAAa,GAAG,EAAI66I,EAAA,CAAQ,EAC3ChB,EACF,CAAC,EAAE,QACD7D,EAAA,GAAS,CAAC,CAAC90J,GAAMsrB,EAAY,IAC3BopI,GACE10J,GACA20J,GACAN,EAAuB,CAAE,cAAAjpG,GAAe,gBAAA8tG,GAAiB,QAAA9tI,EAAQ,CAAC,EAClEA,GACAE,GACAioI,GACAmF,EACF,CACF,CACF,EAEAU,GAAuBD,GAAe,UAAU,CAC9C,KAAKn5J,GAAM,CACT,MAAM45J,GAAe9uI,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAIvD,GAHAE,GAAS6qI,GAAyB,CAAE,UAAA/qI,GAAW,SAAU7qB,EAAK,CAAC,CAAC,EAG5D45J,GAAc,SAEhB,GADA,QAAQ,IAAI55J,GAAK,MAAM,EACnBA,GAAK,QAAU,KAAa,MAAQA,GAAK,OAAO,SAAW,EAAG,CAChE,MAAMiK,MAAQ,MAAoB,GAAI2vJ,GAAc,KAAK,EACzD7uI,MAAS,OAAW,CAAE,UAAAF,GAAW,cAAe5gB,EAAM,CAAC,CAAC,EACxD8gB,GAAS0sI,GAAW,CAAE,UAAA5sI,EAAU,CAAC,CAAC,CACpC,MAAW7qB,GAAK,OAAO,CAAC,GAAG,OAAS,GAAKA,GAAK,QAAU,KAAa,OAEnE+qB,GAASmrI,GAAe,CAAE,UAAArrI,EAAU,CAAC,CAAC,CAG5C,EACA,MAAMte,GAAO,CACXwe,MAAS,SAAU,MAAwB,yBAA0Bxe,EAAK,CAAC,CAAC,EAC5Ewe,GAAS+qI,GAAyB,CAAE,UAAAjrI,GAAW,aAAc,KAAa,KAAM,CAAC,CAAC,EAClF,QAAQ,MAAMte,EAAK,CACrB,EACA,UAAW,CAILue,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,cAAc,QAAU,KAAa,SAC5EE,GAAS+qI,GAAyB,CAAE,UAAAjrI,GAAW,aAAc,KAAa,IAAK,CAAC,CAAC,CAErF,CACF,CAAC,EAEGkuI,GACF,UAAWp9J,MAAQ,MACjBovB,GACEyqI,GAA0C,CACxC,UAAA3qI,GACA,KAAAlvB,EACF,CAAC,CACH,EACAovB,GAAS0qI,GAA8B,CAAE,UAAA5qI,GAAW,KAAAlvB,EAAK,CAAC,CAAC,OAG7DovB,GACE8uI,GAA2B,CACzB,UAAAhvI,GACA,mBAAAY,GACA,YAAAguI,GACA,eAAAN,GACA,qBAAA9oE,GACA,QAAAjlE,GACA,cAAAggC,EACF,CAAC,CACH,CAEJ,CAEArgC,GAASsqI,GAA6B,CAAE,UAAAxqI,GAAW,kBAAmBuuI,EAAqB,CAAC,CAAC,CAC/F,CACF,EASaU,MAAyB,MACpC,6BACA,MAAO,CAAE,UAAAjvI,GAAW,cAAAugC,EAAc,EAAG,CAAE,SAAArgC,GAAU,SAAAD,EAAS,IAAM,CAC9DC,GAASwrI,GAAc1rI,EAAS,CAAC,EAEjC,KAAM,CAAE,mBAAAY,GAAoB,eAAAqtI,GAAgB,cAAAnE,EAAc,EAAI7pI,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAC1F,CAAE,mCAAA6tI,GAAoC,WAAAl6J,GAAY,2BAAA+0J,EAA2B,EAAI,QAAM,OAC3FzoI,GAAS,EACTD,EACF,EACM8tI,MAAgB,MAAgB9tI,EAAS,EAE/C,IAAIsuI,GAEJ,MAAM/tI,GAAUupI,GAAc,YAAY,SAAW,CAAC,EAChDoF,GAAYpF,GAAc,WAAW,IAAKv0J,IAAUA,GAAM,KAAK,EAC/D45J,GAAa5uI,GAChB,OAAQ6I,IAAU8lI,GAAU,SAAS9lI,GAAM,KAAK,CAAC,EACjD,IAAKA,KAAsB,CAC1B,GAAGA,GACH,WAAYA,GAAM,YAAcxI,IAAoB,OAAO,EAC3D,MAAOwI,GAAM,MACb,oBAAqB,KAAoB,cAC3C,EAAE,EAEJ,GAAI,IAAC,MAAiB+lI,EAAU,GAAK,CAACvuI,GACpC,OAGF,MAAM+tI,GAA6B,CACjC,YAAa/tI,IAAoB,SACjC,cAAeqtI,EACjB,EAEMzlJ,MAAW,KAAYyX,GAAS,EAAE,IAAI,EACtC7gB,MAAQ,MACZoJ,GACA,CACE,QAAM,MAAoBA,GAAU+3C,GAAc,IAAI,EACtD,MAAI,MAAoB/3C,GAAU+3C,GAAc,EAAE,CACpD,KACA,KAAwBtgC,GAAS,EAAE,IAAI,CACzC,EACM2uI,MAAc,MAAsB5uI,GAAWmvI,GAAYR,GAAcvvJ,GAAO,GAAOoJ,GAAU7U,EAAU,EAEjHusB,GAAS+qI,GAAyB,CAAE,UAAAjrI,GAAW,aAAc,KAAa,OAAQ,CAAC,CAAC,EAEpFsuI,MAAiBG,EAAA,GAAc,IAACI,EAAA,IAAWjuI,GAAoBguI,GAAY,OAAO,EAAGd,EAAa,CAAC,EAAE,QACnG7D,EAAA,GAAS,CAAC,CAAC90J,GAAMsrB,EAAY,IAEvBtrB,GAAK,QAAU,KAAa,QAEvB6pI,EAAA,IAAG,CAAE,GAAG8qB,GAAe,MAAO,KAAa,OAAQ,CAAC,EAEtDD,GAELtE,EAAiBuE,GAAe30J,EAAI,EACpC20J,GACAN,EAAuB,CAAE,cAAAjpG,GAAe,QAAAhgC,GAAS,YAAa,EAAK,CAAC,EACpE4uI,GACA1uI,GACAioI,GACAmF,EACF,CACD,CACH,EAEAS,GAAe,UAAU,CACvB,KAAKn5J,GAAM,CACT+qB,GAAS6qI,GAAyB,CAAE,UAAA/qI,GAAW,SAAU7qB,EAAK,CAAC,CAAC,CAClE,EACA,MAAMuM,GAAO,CACXwe,MAAS,SAAU,MAAwB,yBAA0Bxe,EAAK,CAAC,CAAC,EAC5Ewe,GAAS+qI,GAAyB,CAAE,UAAAjrI,GAAW,aAAc,KAAa,KAAM,CAAC,CAAC,EAClF,QAAQ,MAAMte,EAAK,CACrB,EACA,UAAW,CACTwe,GAAS+qI,GAAyB,CAAE,UAAAjrI,GAAW,aAAc,KAAa,IAAK,CAAC,CAAC,CACnF,CACF,CAAC,CACH,CACF,EAEMovI,GAAmB,MAAOC,GAA0B17J,KAA2B,CACnF,MAAM27J,GAAsBD,GAAY,OAAQ34J,IACvCA,GAAE,YAAY,MAAQ,IAC9B,EACKusJ,MAAuC,WAAQqM,GAAqB,gBAAgB,EAE1F,OAAO,MAAM,QAAQ,IACnB,OAAO,OAAOrM,EAAI,EAAE,IAAI,MAAOliE,KAEtB,CACL,WAFiB,QAAM,KAAiB,EAAE,IAAIA,GAAQ,CAAC,EAAE,WAAYptF,EAAU,EAG/E,QAAAotF,EACF,EACD,CACH,CACF,EAYMiuE,MAA6B,MACjC,qCACA,MACE,CACE,mBAAApuI,GACA,UAAAZ,GACA,YAAA4uI,GACA,eAAAN,GACA,qBAAA9oE,GACA,QAAAjlE,GACA,cAAAggC,EACF,EACA,CAAE,SAAArgC,EAAS,IACR,CACH,IAAIsmE,GACA5lE,GAAmB,KAAK,MAC1B4lE,GAAiB,MAAM4oE,GAAiBR,GAAY,QAAQ,QAASA,GAAY,QAAQ,UAAU,EAEnGpoE,GAAiB,CAAC,CAAE,WAAY5lE,GAAoB,QAASguI,GAAY,QAAQ,OAAQ,CAAC,EAG5F,UAAW99J,MAAQ,MAAyB,CAG1C,MAAM+zJ,MAAe,OACnBr+D,GACA11F,GACA,CACE,GAAG89J,GAAY,QACf,UAAW,GAAGA,GAAY,QAAQ,SAAS,OAAI,aAAU99J,EAAI,CAAC,EAChE,EACAw9J,EACF,EAEIzJ,IACF3kI,GACEwqI,GAA0C,CACxC,UAAA1qI,GACA,KAAAlvB,GACA,aAAA+zJ,EACF,CAAC,CACH,EAEK0K,GAA+B/pE,GAAqB10F,EAAI,EAAE,KAAMyvB,GAASggC,EAAa,IACzFrgC,GAAS0qI,GAA8B,CAAE,UAAA5qI,GAAW,KAAAlvB,EAAK,CAAC,CAAC,EACvD00F,GAAqB10F,EAAI,EAAE,SAC7BovB,GAASsvI,GAA2BxvI,GAAWlvB,EAAI,CAAC,IAKxDovB,GACEyqI,GAA0C,CACxC,UAAA3qI,GACA,KAAAlvB,EACF,CAAC,CACH,CAEJ,CACF,CACF,EAMA,SAASy+J,GACPE,GACAtqG,GACAuqG,GACS,CACT,GAAI,CAACD,GACH,MAAO,GAGT,MAAME,MAAoB,gBAAU,OAAIxqG,GAAY,OAAO,EAAGA,EAAU,EAElEyqG,MAAsB,gBAC1B,WACEH,GAAuB,KAAK,IAAK77J,IAAyBA,GAAU,MAAM,QAAQ,WAAW,EAC7F,OACF,EACA,MACF,EAEMi8J,GAAsBJ,GAAuB,KAAK,MAAOt6J,IAGtDA,GAAK,MAAM,QAAQ,iBAAmB,KAAe,SAC7D,EAEK26J,GAAuB,IAAUH,GAAmBC,EAAmB,EAEvEG,GAA2BN,GAAuB,KAAK,MAAOt6J,IAAoB,CACtF,MAAM66J,GAAY76J,GAAK,MAAM,QAAQ,cAErC,OAAK66J,GAGiBA,IAAaA,GAAU,MAAQN,GAAkB,MAAQA,GAAkB,IAAMM,GAAU,GAFxG,EAIX,CAAC,EAED,OAAOH,IAAuBC,IAAwBC,EACxD,CAMO,SAASE,GAAWjwI,GAAmBkwI,GAA4C,CACxF,MAAO,CAAChwI,GAAUD,KAAa,CAE7B,MAAMM,GAAUN,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,QAC/CmtI,GAAc+C,GAAW,IAAI,CAAC9mI,GAAOxmB,QAAU,MAAmCwmB,GAAO7I,GAAS3d,EAAK,CAAC,EAC9Gsd,GAAS8qI,GAAiB,CAAE,UAAAhrI,GAAW,QAASmtI,EAAY,CAAC,CAAC,EAC9DjtI,GAAS0sI,GAAW,CAAE,UAAA5sI,EAAU,CAAC,CAAC,CACpC,CACF,CAOO,SAASmwI,GAAUnwI,GAAsC,CAC9D,MAAO,CAACE,GAAUD,KAAa,CAE7BC,GAASkrI,GAAgB,CAAE,UAAAprI,EAAU,CAAC,CAAC,EAEvC,MAAM5gB,MAAQ,MAAoB,GAAI6gB,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,KAAK,EAEhFE,MAAS,OAAW,CAAE,UAAAF,GAAW,cAAe5gB,EAAM,CAAC,CAAC,EACxD8gB,GAAS0sI,GAAW,CAAE,UAAA5sI,EAAU,CAAC,CAAC,CACpC,CACF,CAEO,SAASowI,GAAkBpwI,GAAsC,CACtE,MAAO,CAACE,GAAUD,KAAa,CAC7B,MAAM6pI,GAAgB7pI,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,cACrDugC,GAAgBtgC,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAAG,cACrDqwI,MAAW,OAAe9vG,EAAa,EAGzCupG,GAAc,QAAU,KAAa,MACvC5pI,GAASorI,GAAwB,CAAE,UAAAtrI,GAAW,SAAAqwI,GAAU,cAAAvG,EAAc,CAAC,CAAC,CAE5E,CACF,CAEO,SAASiE,GAAW/tI,GAAsC,CAC/D,MAAO,CAACE,GAAUD,KAAa,CAC7BC,GAASqrI,GAAiB,CAAE,UAAAvrI,EAAU,CAAC,CAAC,CAC1C,CACF,CAKO,SAASwvI,GAA2BxvI,GAAmBlvB,GAAiD,CAC7G,MAAO,CAACovB,GAAUD,KAAa,CAC7B,KAAM,CAAE,qBAAAulE,EAAqB,EAAIvlE,GAAS,EAAE,QAAQ,MAAMD,EAAS,EAC7D6kI,GAAer/D,GAAqB10F,EAAI,EAAE,aAEhD,GAAI+zJ,GAAc,CAChB,MAAMyL,GAAmBzL,GAAa,UAAU,CAC9C,KAAO4K,IAA8C,CACnDvvI,GAAS4qI,GAAmC,CAAE,UAAA9qI,GAAW,KAAAlvB,GAAM,KAAM2+J,EAAuB,CAAC,CAAC,CAChG,CACF,CAAC,EACDvvI,GACE2qI,GAA8C,CAC5C,UAAA7qI,GACA,KAAAlvB,GACA,iBAAAw/J,EACF,CAAC,CACH,CACF,CACF,CACF,CAEO,SAASC,GACdvwI,GACAkuB,GACAp9C,GACmB,CACnB,MAAO,CAACovB,GAAUD,KAAa,CAC7BC,GAASuqI,GAAmC,CAAE,UAAAzqI,GAAW,QAAAkuB,GAAS,KAAAp9C,EAAK,CAAC,CAAC,KACzE,OAA+Bo9C,GAASp9C,EAAI,EACxCo9C,IACFhuB,GAASsvI,GAA2BxvI,GAAWlvB,EAAI,CAAC,CAExD,CACF,CAWO,MAAM0/J,GAAe,CAAC/8I,GAAyBkN,KAAwC,CAC5F,GAAIypI,GAAkB,MAAMzpI,EAAM,EAAG,CACnC,KAAM,CAAE,QAAAJ,EAAQ,EAAI9M,GACd,CAAE,MAAA7Q,GAAO,MAAAwmB,EAAM,EAAIzI,GAAO,QAG1BwsI,GAAc,CAAC,GAAG5sI,GAAQ,MAAM,EAAG3d,GAAQ,CAAC,EAAG,CAAE,GAAGwmB,EAAM,EAAG,GAAG7I,GAAQ,MAAM3d,GAAQ,CAAC,CAAC,EAE9F,MAAO,CACL,GAAG6Q,GACH,QAAS05I,GACT,aAAW,MAAaA,EAAW,CACrC,CACF,CAEA,GAAI9C,GAAoB,MAAM1pI,EAAM,EAAG,CACrC,KAAM,CAAE,QAAAJ,EAAQ,EAAII,GAAO,QAE3B,MAAO,CACL,GAAGlN,GACH,QAAA8M,EACF,CACF,CAEA,GAAI+pI,GAAoB,MAAM3pI,EAAM,EAClC,eAAelN,GAAM,iBAAiB,EAE/B,CACL,GAAGA,GAEH,GAAIA,GAAM,cACN,CACE,cAAe,CACb,GAAGA,GAAM,cACT,MAAO,KAAa,IACtB,CACF,EACA,CAAC,CACP,EAGF,GAAIu3I,GAAiB,MAAMrqI,EAAM,EAAG,CAClC,KAAM,CAAE,QAAAJ,EAAQ,EAAII,GAAO,QAC3B,MAAO,CACL,GAAGlN,GACH,QAAS8M,GAAQ,MAAM,EACvB,aAAW,MAAaA,EAAO,CACjC,CACF,CAEA,GAAIiqI,GAA6B,MAAM7pI,EAAM,EAAG,CAC9C,KAAM,CAAE,kBAAAytI,EAAkB,EAAIztI,GAAO,QACrC,MAAO,CACL,GAAGlN,GACH,kBAAA26I,EACF,CACF,CAEA,GAAI3D,GAAmC,MAAM9pI,EAAM,EAAG,CACpD,KAAM,CAAE,QAAAutB,GAAS,KAAAp9C,EAAK,EAAI6vB,GAAO,QAC3B,CAAE,qBAAA6kE,EAAqB,EAAI/xE,GAC3B68I,GAAmB9qE,GAAqB10F,EAAI,EAAE,iBAChD,CAACo9C,IAAWoiH,IACdA,GAAiB,YAAY,EAG/B,MAAMG,GAAiD,CACrD,GAAGjrE,GAGH,CAAC10F,EAAI,EAAG,CAAE,GAAG00F,GAAqB10F,EAAI,EAAG,QAAAo9C,GAAS,KAAM,MAAU,CACpE,EAEA,MAAO,CACL,GAAGz6B,GACH,qBAAsBg9I,EACxB,CACF,CAEA,GAAI/F,GAA0C,MAAM/pI,EAAM,EAAG,CAC3D,KAAM,CAAE,aAAAkkI,GAAc,KAAA/zJ,EAAK,EAAI6vB,GAAO,QAChC,CAAE,qBAAA6kE,EAAqB,EAAI/xE,GAC3Bi9I,GAAqBlrE,GAAqB10F,EAAI,EAEhD4/J,IAAoB,kBACtBA,GAAmB,iBAAiB,YAAY,EAGlD,MAAMD,GAA2B,CAC/B,GAAGjrE,GACH,CAAC10F,EAAI,EAAG,CAAE,GAAG4/J,GAAoB,aAAA7L,GAAc,iBAAkB,MAAU,CAC7E,EAEA,MAAO,CACL,GAAGpxI,GACH,qBAAsBg9I,EACxB,CACF,CAEA,GAAI9F,GAA0C,MAAMhqI,EAAM,EAAG,CAC3D,KAAM,CAAE,KAAA7vB,EAAK,EAAI6vB,GAAO,QAClB,CAAE,qBAAA6kE,EAAqB,EAAI/xE,GAC3Bi9I,GAAqBlrE,GAAqB10F,EAAI,EAEhD4/J,IAAoB,kBACtBA,GAAmB,iBAAiB,YAAY,EAGlD,MAAMD,GAA2B,CAC/B,GAAGjrE,GACH,CAAC10F,EAAI,EAAG,CAAE,GAAG4/J,GAAoB,aAAc,OAAW,iBAAkB,MAAU,CACxF,EAEA,MAAO,CACL,GAAGj9I,GACH,qBAAsBg9I,EACxB,CACF,CAEA,GAAI7F,GAA8B,MAAMjqI,EAAM,EAAG,CAC/C,KAAM,CAAE,KAAA7vB,EAAK,EAAI6vB,GAAO,QAClB,CAAE,qBAAA6kE,EAAqB,EAAI/xE,GAC3Bg9I,GAA2B,CAC/B,GAAGjrE,GACH,CAAC10F,EAAI,EAAG,CAAE,GAAG00F,GAAqB10F,EAAI,EAAG,KAAM,MAAU,CAC3D,EACA,MAAO,CACL,GAAG2iB,GACH,qBAAsBg9I,EACxB,CACF,CAEA,GAAI5F,GAA8C,MAAMlqI,EAAM,EAAG,CAC/D,KAAM,CAAE,iBAAA2vI,GAAkB,KAAAx/J,EAAK,EAAI6vB,GAAO,QAEpC,CAAE,qBAAA6kE,EAAqB,EAAI/xE,GAC3Bg9I,GAA2B,CAC/B,GAAGjrE,GACH,CAAC10F,EAAI,EAAG,CAAE,GAAG00F,GAAqB10F,EAAI,EAAG,iBAAAw/J,EAAiB,CAC5D,EAEA,MAAO,CACL,GAAG78I,GACH,qBAAsBg9I,EACxB,CACF,CAEA,GAAI3F,GAAmC,MAAMnqI,EAAM,EAAG,CACpD,GAAI,CAAE,KAAAxrB,GAAM,KAAArE,EAAK,EAAI6vB,GAAO,QAC5B,KAAM,CAAE,qBAAA6kE,EAAqB,EAAI/xE,GAE3Bg9I,GAA2B,CAC/B,GAAGjrE,GACH,CAAC10F,EAAI,EAAG,CAAE,GAAG00F,GAAqB10F,EAAI,EAAG,KAAAqE,EAAK,CAChD,EAEA,MAAO,CACL,GAAGse,GACH,qBAAsBg9I,EACxB,CACF,CAEA,GAAI1F,GAAyB,MAAMpqI,EAAM,EACvC,OAAOgwI,GAAqBl9I,GAAOkN,EAAM,EAG3C,GAAI4pI,GAAsB,MAAM5pI,EAAM,EAAG,CACvC,KAAM,CAAE,QAAAJ,EAAQ,EAAII,GAAO,QAC3B,MAAO,CACL,GAAGlN,GACH,QAAA8M,GACA,aAAW,MAAaA,EAAO,CACjC,CACF,CAEA,GAAI0qI,GAAyB,MAAMtqI,EAAM,EAAG,CAC1C,KAAM,CAAE,aAAAg1C,EAAa,EAAIh1C,GAAO,QAChC,MAAO,CACL,GAAGlN,GACH,cAAe,CACb,GAAGA,GAAM,cACT,MAAOkiD,EACT,CACF,CACF,CAEA,GAAIu1F,GAAqB,MAAMvqI,EAAM,EAAG,CACtC,KAAM,CAAE,SAAAiwI,EAAS,EAAIjwI,GAAO,QAC5B,MAAO,CACL,GAAGlN,GACH,SAAAm9I,EACF,CACF,CAEA,GAAIxF,GAAgB,MAAMzqI,EAAM,EAC9B,MAAO,CAAE,GAAGlN,GAAO,SAAU,EAAK,EAGpC,GAAI43I,GAAe,MAAM1qI,EAAM,EAC7B,MAAO,CACL,GAAGlN,GACH,SAAU,GACV,UAAW,MACb,EAGF,GAAI63I,GAAwB,MAAM3qI,EAAM,EAAG,CAEzC,KAAM,CAAE,MAAA+e,EAAM,EAAIjsB,GACZ,CAAE,cAAAq2I,GAAe,SAAAuG,EAAS,EAAI1vI,GAAO,QAE3C,IAAIkwI,GAAW,CAAC,GAAGnxH,EAAK,EAGxB,OAFuBmxH,GAAS,KAAMpwJ,IAAMA,GAAE,MAAQ4vJ,EAAQ,IAI5DQ,GAAW,CADU,CAAE,IAAKR,GAAU,MAAOvG,EAAc,EACjC,GAAG+G,EAAQ,EAAE,MAAM,EAAG,CAAW,GAGtD,CACL,GAAGp9I,GACH,MAAOo9I,EACT,CACF,CAEA,GAAItF,GAAiB,MAAM5qI,EAAM,EAC/B,MAAO,CACL,GAAGlN,GACH,MAAO,CAAC,CACV,EAGF,GAAI03I,GAAU,MAAMxqI,EAAM,EAAG,CAC3B,GAAI,CAAClN,GAAM,WACT,MAAO,CACL,GAAGA,GACH,eAAgB,IAClB,EAKF,GAAIA,GAAM,cAAc,QAAU,KAAa,QAC7C,MAAO,CACL,GAAGA,GACH,eAAgB,KAChB,WAAY,CACV,GAAGA,GAAM,WACT,KAAM,CAAC,CACT,CACF,EAGF,MAAMq9I,GAAgBr9I,GAAM,eACxBA,GAAM,eAAiBA,GAAM,WAAW,KAAK,OAC7CA,GAAM,WAAW,KAAK,OAAS,EAEnC,MAAO,CACL,GAAGA,GACH,eAAgBq9I,GAChB,WAAY,CACV,GAAGr9I,GAAM,WACT,KAAM,CAAC,CACT,CACF,CACF,CAEA,OAAOA,EACT,EAEMk9I,GAAuB,CAACl9I,GAAyBkN,KAA+D,CACpH,KAAM,CAAE,SAAAkW,EAAS,EAAIlW,GAAO,QACtB,CACJ,QAAA8lE,GACA,MAAA/kF,GACA,YAAAqvJ,GACA,WAAAnH,GACA,YAAAoH,GACA,oBAAAC,GACA,YAAA9I,GACA,gBAAAC,GACA,iBAAAC,GACA,oBAAAJ,GACA,aAAAK,EACF,EAAIzxH,GAEJ,OAAIn1B,KACEA,GAAM,OAAS,KAAmB,SAAWA,GAAM,OAAS,KAAmB,WAC1E,CAAE,GAAG+R,EAAM,EAIjBgzE,GAIE,CACL,GAAGhzE,GACH,cAAeojB,GACf,YAAAk6H,GACA,YAAAC,GACA,oBAAAC,GACA,WACEx9I,GAAM,QAAUm2I,GACZ,CAAE,GAAGA,GAAY,QAAM,OAAqBn2I,GAAM,eAAgBm2I,GAAW,IAAI,CAAE,EACnFA,GACN,SAAU,CAAC,CAACA,GACZ,YAAa,CAAC,CAACmH,GACf,UAAW,CAAC,CAACC,IAAa,OAC1B,UAAW,CAAC,CAAC7I,GAAY,OACzB,cAAe,CAAC,CAACC,GAAgB,OACjC,kBAAmB,CAAC,CAACH,GAAoB,OACzC,eAAgB,CAAC,CAACI,GAAiB,OACnC,WAAY,CAAC,CAACC,IAAc,OAC5B,eAAgB70I,GAAM,OAASA,GAAM,eAAiB,IACxD,EAtBS,CAAE,GAAGA,EAAM,CAuBtB,C,gECzzCO,MAAMy9I,CAAW,CACtB,eAAe9iH,EAAsB55C,EAA0B,CAC7D,OAAI,OAAO45C,GAAiB,SACnB,QAAQ,QAAQ,CAAC,CAAC,KAGpB,MAAc,EAAE,IAAI,sBAAsBA,CAAY,YAAa55C,CAAO,CACnF,CAEA,oBAAoB45C,EAAsBvI,EAAiB,CACzD,OAAI,OAAOuI,GAAiB,SACnB,QAAQ,QAAQ,CAAC,CAAC,KAGpB,MAAc,EAAE,IAAI,sBAAsBA,CAAY,aAAavI,CAAO,EAAE,CACrF,CAEA,iBAAiBuI,EAAsBvI,EAAiB,CACtD,GAAI,OAAOuI,GAAiB,SAC1B,OAAO,QAAQ,QAAQ,CAAC,CAAC,EAG3B,MAAM3kB,EAAM,sBAAsB2kB,CAAY,WAE9C,SAAO,MAAc,EAAE,KAAK3kB,EAAK,CAAE,QAAAoc,CAAQ,CAAC,CAC9C,CACF,CAEA,MAAMsrH,EAAa,IAAID,C,aCjDvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYC,SAASniI,GAAG,CAQT,IAAIqiI,EAAS,UAAW,CAOpB,IAAIpjJ,EAOAzS,EAOA/G,EAOA68J,EAOAzlJ,EAOA0lJ,EASAF,EAAQ,SAASniI,EAAMx6B,EAAK,CAC5BuZ,EAAUvZ,EACV8G,EAAc0zB,EAAK,eAAe,EAClCz6B,EAAUy6B,EAAK,WAAW,EAC1BoiI,EAAe78J,EAAQ,OAAO,OAC9BoX,EAASqjB,EAAK,QAAQ,EACtBqiI,EAASC,EAAUF,EAAa,KAAK,CACzC,EAQAD,EAAM,UAAU,gBAAkB,UAAW,CAEzC,IAAII,EAAcj2J,EAAY,MAAM,EAChCk2J,EAAel2J,EAAY,OAAO,EAKlCuH,EAAU,KAAK,IAAI8I,EAAO,OAAQylJ,EAAa,OAAO,OAAO,EAC7DxuJ,EAAO,KAAK,KAAK+I,EAAO,OAAS9I,CAAO,EAIxC4uJ,EAASL,EAAa,OAAO,OAC7BM,EAAUN,EAAa,OAAO,QAC9BO,EAAUP,EAAa,OAAO,QAC9BQ,GAAaL,EAAeE,EAAS,EAAMC,GAAW7uJ,EAAU,IAAOA,EACvEgvJ,GAAcL,EAAgBC,EAAS,EAAME,GAAW/uJ,EAAO,IAAOA,EAC1E,GAAIwuJ,EAAa,OAAO,OAAQ,CAC5B,IAAI/sI,EAAO,KAAK,IAAIutI,EAAWC,CAAU,EACzCD,EAAYvtI,EACZwtI,EAAaxtI,CACjB,CAKAytI,EAAoBV,EAAcQ,CAAS,EAG3C,IAAIG,EAAaX,EAAa,KAAK,OAC/BY,EAAc,EACdC,EAAgB,EAChBb,EAAa,MAAM,OACnBY,EAAcZ,EAAa,MAAM,OACjCa,EAAgBb,EAAa,MAAM,KAAK,MAE5C,IAAIc,EAAc,EACdC,EAAgB,EAChBf,EAAa,MAAM,OACnBc,EAAcd,EAAa,MAAM,OACjCe,EAAgBf,EAAa,MAAM,KAAK,MAE5C,IAAIgB,EAAiB,EACjBhB,EAAa,UAAU,OACvBgB,EAAiBhB,EAAa,UAAU,OAE5C,IAAIiB,EAAuB,EACvBC,EAAyB,EACzBlB,EAAa,UAAU,MAAM,OAC7BiB,EAAuBjB,EAAa,UAAU,MAAM,OACpDkB,EAAyBlB,EAAa,UAAU,MAAM,KAAK,MAS/D,QANImB,EAAcX,EAAY,EAAKG,EAAaK,EAAkBC,EAAuB,EAAKC,EAE1FE,EAAapB,EAAa,MAAM,WAChCqB,GAAWrB,EAAa,MAAM,SAC9BsB,GAAUD,GAAWD,GAAc,IACnCG,GAAe,GACV58I,GAAIy8I,EAAYz8I,GAAI08I,GAAU18I,IAAK28I,EACxCC,GAAe,KAAK,IAAIA,GAAc,KAAK,IAAIC,EAAM78I,EAAC,CAAC,CAAC,EAE5D48I,GAAe,KAAK,IAAIA,GAAc,KAAK,IAAIC,EAAMH,EAAQ,CAAC,CAAC,EAC/D,IAAII,GAAgBhB,EAAcE,EAAa,EAAMC,EAAc,EAAKC,IAAkB,EAAIU,IAC1FE,EAAeF,GAAeT,EAAeC,EAAgB,IAC7DU,EAAehB,EAAcE,EAAa,EAAMC,EAAc,EAAKC,EAAgBC,EAAeC,EAAgB,GAEtH,IAAIW,EAAaD,EAAgBR,EAAuB,EAAKC,EAAyBF,EAElFW,EAAS,KAAK,IAAIR,EAAYO,CAAU,EAGxCx6J,EAAQ84J,EAAa,MAAM,MAC3B94J,GAASy6J,IACTz6J,EAAQ,KAAK,IAAI,EAAGy6J,EAAS,CAAC,GAIlC,IAAIC,GAAeX,EAAuB,EAAKC,EAAyBF,EAAiBW,EACrFE,GAAmB,KAAK,IAAID,IAAe,EAAIL,IAAeK,GAAcd,EAAeC,EAAgB,CAAE,EAEjH,MAAO,CACH,YAAaZ,EACb,aAAcC,EACd,OAAQC,EACR,QAASC,EACT,QAASC,EACT,QAAS9uJ,EACT,KAAMD,EACN,UAAWgvJ,EACX,WAAYC,EACZ,WAAYE,EACZ,YAAaC,EACb,cAAeC,EACf,YAAaC,EACb,cAAeC,EACf,MAAO75J,EACP,OAAQy6J,EACR,eAAgBX,EAChB,qBAAsBC,EACtB,uBAAwBC,EACxB,iBAAkBW,EACtB,CACJ,EASA,SAASnB,EAAoBoB,EAAetB,EAAW,CAE/CsB,EAAc,MAAM,QAAU,SAC9BA,EAAc,MAAM,MAAQ,KAAK,IAAI,EAAGtB,EAAY,CAAC,GAErDsB,EAAc,MAAM,SAAW,SAC/BA,EAAc,MAAM,OAAS,KAAK,IAAI,EAAGtB,EAAY,EAAE,GAEvDsB,EAAc,MAAM,KAAK,OAAS,SAClCA,EAAc,MAAM,KAAK,KAAO,KAAK,IAAI,EAAGtB,EAAY,CAAC,GAEzDsB,EAAc,MAAM,SAAW,SAC/BA,EAAc,MAAM,OAAS,KAAK,IAAI,EAAGtB,EAAY,EAAE,GAEvDsB,EAAc,MAAM,KAAK,OAAS,SAClCA,EAAc,MAAM,KAAK,KAAO,KAAK,IAAI,EAAGtB,EAAY,CAAC,GAEzDsB,EAAc,UAAU,QAAU,SAClCA,EAAc,UAAU,MAAQ,KAAK,IAAI,EAAGtB,EAAY,GAAG,GAE3DsB,EAAc,UAAU,MAAM,SAAW,SACzCA,EAAc,UAAU,MAAM,OAAS,KAAK,IAAI,EAAGtB,EAAY,EAAE,GAEjEsB,EAAc,UAAU,MAAM,KAAK,OAAS,SAC5CA,EAAc,UAAU,MAAM,KAAK,KAAO,KAAK,IAAI,EAAGtB,EAAY,EAAE,EAG5E,CACAT,EAAM,UAAU,oBAAsBW,EAWtCX,EAAM,UAAU,oBAAsB,SAAS+B,EAAe3tI,EAAQ1tB,EAAG,CAGrE,IAAI2I,EAAIsgB,EAAIyE,EAAO,QAAS1tB,CAAC,EACzB+d,EAAImL,EAAIwE,EAAO,QAAS1tB,CAAC,EACzB8kB,EAAI4I,EAAO,QAAUA,EAAO,UAAYA,EAAO,SAAW/kB,EAC1Doc,EAAI2I,EAAO,QAAUA,EAAO,WAAaA,EAAO,SAAW3P,EAC3Du9I,EAAKx2I,EAAK4I,EAAO,UAAY,EAC7B6tI,EAAKx2I,EAAI2I,EAAO,WAAcA,EAAO,YAAc,EAAKA,EAAO,cAAgBA,EAAO,eAC5EA,EAAO,uBAA0BA,EAAO,qBAAuB,EAAKA,EAAO,OACrF8tI,EAAQ9tI,EAAO,WAAcA,EAAO,WAAa,EAAMA,EAAO,YAAc,EAAKA,EAAO,cAAgBA,EAAO,iBAC/G+tI,EAAU,EACd,OAAIJ,EAAc,KAAK,SAAW,SAC9BI,EAAWD,EAAQ,EACZH,EAAc,KAAK,SAAW,WACrCI,EAAUD,GAEdD,GAAME,EAEC,CACH,IAAK9yJ,EACL,IAAKoV,EACL,EAAG+G,EACH,EAAGC,EACH,QAAS02I,EACT,UAAW/tI,EAAO,UAClB,WAAYA,EAAO,WACnB,WAAYA,EAAO,WACnB,GAAI4tI,EACJ,GAAIC,CACR,CACJ,EAQAjC,EAAM,UAAU,eAAiB,SAAS5rI,EAAQ,CAEzC6rI,EAAa,MAAM,OAGxBrjJ,EAAQ,KAAK,EACbA,EAAQ,YAAcxZ,EAAQ,KAAK,YACnCwZ,EAAQ,UAAYxZ,EAAQ,KAAK,YACjCwZ,EAAQ,WAAW,EAAG,EAAGwX,EAAO,YAAaA,EAAO,YAAY,EAC5DhxB,EAAQ,KAAK,kBACbwZ,EAAQ,UAAYxZ,EAAQ,KAAK,gBACjCwZ,EAAQ,SAAS,EAAG,EAAGwX,EAAO,YAAaA,EAAO,YAAY,GAElExX,EAAQ,QAAQ,EACpB,EASAojJ,EAAM,UAAU,mBAAqB,SAAS+B,EAAeK,EAAY,CAErExlJ,EAAQ,KAAK,EACTmlJ,EAAc,KAAK,QAAUA,EAAc,KAAK,OAAO,MAAQA,EAAc,KAAK,OAAO,OAASA,EAAc,KAAK,OAAO,QAC5HnlJ,EAAQ,YAAcmlJ,EAAc,KAAK,OAAO,MAChDnlJ,EAAQ,UAAYmlJ,EAAc,KAAK,OAAO,MAC9CnlJ,EAAQ,WAAWwlJ,EAAW,EAAGA,EAAW,EAAGA,EAAW,UAAWA,EAAW,UAAU,GAE1FL,EAAc,KAAK,YAAcA,EAAc,KAAK,WAAW,QAC/DnlJ,EAAQ,UAAYmlJ,EAAc,KAAK,WAAW,MAClDnlJ,EAAQ,SAASwlJ,EAAW,EAAGA,EAAW,EAAGA,EAAW,UAAWA,EAAW,UAAU,GAE5FxlJ,EAAQ,QAAQ,CACpB,EAYAojJ,EAAM,UAAU,UAAY,SAAS+B,EAAe3tI,EAAQguI,EAAY34J,EAAO1F,EAAM,CAEjF,IAAIs+J,EAAON,EAAc,MAAM,OAAO,KAAOA,EAAc,MAAM,OAAO,KAAO,EAC3E5gK,EAAQmhK,EAASP,EAAeh+J,CAAI,EACpCw+J,EAASC,EAAwBT,EAAe3tI,EAAQrwB,CAAI,EAGhE0+J,EACIL,EAAW,GACXA,EAAW,GACXhuI,EAAO,OACPA,EAAO,MACPqtI,EAAMM,EAAc,MAAM,UAAU,EACpCN,EAAMM,EAAc,MAAM,QAAQ,EAClCA,EAAc,MAAM,OAAO,MAC3BA,EAAc,MAAM,OAAO,MAC3BA,EAAc,MAAM,WAAW,MAC/BM,CAAI,EAGRI,EACIL,EAAW,GACXA,EAAW,GACXhuI,EAAO,OAAS,EAChBA,EAAO,MAAQ,EACfqtI,EAAMc,EAAO,EAAE,EACfd,EAAMc,EAAO,EAAE,EACfphK,EACA,EACAA,EACAkhK,CAAI,EAELN,EAAc,MAAM,cAAgB,MACnCW,EAAeX,EAAe3tI,EAAQguI,EAAYjhK,CAAK,CAE/D,EAWA,SAASqhK,EAAwBT,EAAe3tI,EAAQrwB,EAAM,CAC1D,IAAIw+J,EAAS,CAAC,EACd,IAAII,EAAUZ,EAAc,MAAM,aAElC,OAAIY,GAAW,KACP5+J,EAAO4+J,GACPJ,EAAO,GAAKK,EAAeb,EAAe3tI,EAAQrwB,CAAI,EACtDw+J,EAAO,GAAKK,EAAeb,EAAe3tI,EAAQuuI,CAAO,IAEzDJ,EAAO,GAAKK,EAAeb,EAAe3tI,EAAQuuI,CAAO,EACzDJ,EAAO,GAAKK,EAAeb,EAAe3tI,EAAQrwB,CAAI,IAG1Dw+J,EAAO,GAAKR,EAAc,MAAM,WAChCQ,EAAO,GAAKK,EAAeb,EAAe3tI,EAAQrwB,CAAI,GAGnDw+J,CACX,CAWA,SAASG,EAAeX,EAAe3tI,EAAQguI,EAAYjhK,EAAO,CAC9D,IAAIg0C,GAAQ4sH,EAAc,MAAM,IAAMA,EAAc,MAAM,KAAO,IAEjEc,EAAQjmJ,EACJwlJ,EAAW,GACXA,EAAW,GACXhuI,EAAO,OAAS,EAChBA,EAAO,MAAQ,EACfqtI,EAAMmB,EAAeb,EAAe3tI,EAAQ2tI,EAAc,MAAM,aAAa5sH,CAAI,CAAC,EAClFssH,EAAMmB,EAAeb,EAAe3tI,EAAQ2tI,EAAc,MAAM,aAAa5sH,CAAI,CAAC,EAClFh0C,EACA,EACA4gK,EAAc,MAAM,WAAW,KAAK,CAC5C,CAUA,SAASO,EAASP,EAAeh+J,EAAM,CAEnC,QADI5C,EACKuF,EAAI,EAAGA,EAAIq7J,EAAc,UAAU,OAAO,OAAQr7J,IAAK,CAC5D,IAAIkY,EAAYmjJ,EAAc,UAAU,OAAOr7J,CAAC,EAEhD,GADAvF,EAAQyd,EAAU,MACd7a,EAAO6a,EAAU,MACjB,KAER,CACA,OAAOzd,CACX,CAWA,SAASyhK,EAAeb,EAAe3tI,EAAQrwB,EAAM,CACjD,IAAI6gB,EACAm9I,EAAc,MAAM,YACbA,EAAc,MAAM,SAAWA,EAAc,MAAM,cAC9Ch+J,EAAOg+J,EAAc,MAAM,MAAQA,EAAc,MAAM,IAAMA,EAAc,MAAM,MAEjG,OAAIn9I,EAAIm9I,EAAc,MAAM,WACxBn9I,EAAIm9I,EAAc,MAAM,WACjBn9I,EAAIm9I,EAAc,MAAM,WAC/Bn9I,EAAIm9I,EAAc,MAAM,UAErBn9I,CACX,CAUAo7I,EAAM,UAAU,cAAgB,SAAS+B,EAAe3tI,EAAQguI,EAAY,CAGxE,QADIU,EAAKf,EAAc,MAAM,WACpBr7J,EAAI,EAAGA,EAAIq7J,EAAc,UAAU,OAAO,OAAQr7J,IAAK,CAC5D,IAAIkY,EAAYmjJ,EAAc,UAAU,OAAOr7J,CAAC,EAChD,GAAKkY,EAAU,MACf,GAAKgkJ,EAAeb,EAAe3tI,EAAQxV,EAAU,KAAK,EAC1DikJ,EACIjmJ,EACAwlJ,EAAW,GACXA,EAAW,GACXhuI,EAAO,OAASA,EAAO,eACvBA,EAAO,eAAiB,EACxBqtI,EAAMqB,CAAE,EACRrB,EAAM,EAAE,EACR,GACA,EACA,EAAE,EACNqB,EAAK,EACT,CACJ,EAkBA,SAASL,EAAkBT,EAAIC,EAAIx9I,EAAG8hI,EAAGwc,EAAKC,EAAKC,EAAIvjI,EAAIwjI,EAAIb,EAAM,CAC7DU,IAAQC,IAGZpmJ,EAAQ,KAAK,EAEbimJ,EAAQjmJ,EAASolJ,EAAIC,EAAIx9I,EAAG8hI,EAAGwc,EAAKC,EAAKC,EAAIvjI,EAAIwjI,CAAE,EAE/Cb,IACAQ,EAAQjmJ,EAASolJ,EAAIC,EAAIx9I,EAAG8hI,EAAGwc,EAAKC,CAAG,EACvCpmJ,EAAQ,KAAK,EACbA,EAAQ,cAAgB,EACxBA,EAAQ,cAAgB,EACxBA,EAAQ,WAAa,GACrBA,EAAQ,YAAc,OACtBimJ,EAAQjmJ,EAASolJ,EAAIC,EAAIx9I,EAAI,EAAG8hI,EAAI,EAAGwc,EAAKC,EAAKC,EAAI,CAAC,GAE1DrmJ,EAAQ,QAAQ,EACpB,CAYAojJ,EAAM,UAAU,UAAY,SAAS+B,EAAe3tI,EAAQguI,EAAY17J,EAAGiO,EAAM,CAE7EwuJ,EACIf,EAAW,GACXA,EAAW,EAAIA,EAAW,WAAahuI,EAAO,YAAcguI,EAAW,QACvE,iBAAmB17J,EACnBq7J,EAAc,MAAM,UAAYA,EAAc,MAAM,UAAUptJ,EAAK,MAAOA,EAAK,KAAK,CAAC,EAAE,CAAC,CAAC,EAAI,KAC7FotJ,EAAc,KAAK,CAC3B,EAYA/B,EAAM,UAAU,UAAY,SAAS+B,EAAe3tI,EAAQguI,EAAY17J,EAAGiO,EAAM,CAE7EwuJ,EACIf,EAAW,GACXA,EAAW,GAAML,EAAc,MAAM,KAAK,KAAO,EACjD,iBAAmBr7J,EACnBq7J,EAAc,MAAM,UAAYA,EAAc,MAAM,UAAUptJ,EAAK,MAAOA,EAAK,KAAK,CAAC,EAAE,CAAC,CAAC,EAAI,KAC7FotJ,EAAc,KAAK,CAC3B,EAWA/B,EAAM,UAAU,oBAAsB,SAAS+B,EAAe3tI,EAAQguI,EAAY17J,EAAG,CAGjF08J,EAAmBrB,EAAe3tI,EAAQguI,EAAY,MAAQ17J,EAAGq7J,EAAc,MAAM,IAAKA,EAAc,MAAM,UAAU,EACxHqB,EAAmBrB,EAAe3tI,EAAQguI,EAAY,MAAQ17J,EAAGq7J,EAAc,MAAM,IAAKA,EAAc,MAAM,QAAQ,EAEtH,QAAS3hJ,EAAI,EAAGA,EAAI2hJ,EAAc,UAAU,OAAO,OAAQ3hJ,IAAK,CAC5D,IAAIxB,EAAYmjJ,EAAc,UAAU,OAAO3hJ,CAAC,EAChD,GAAIxB,EAAU,MAAQmjJ,EAAc,MAAM,KAAOnjJ,EAAU,MAAQmjJ,EAAc,MAAM,IAAK,CACxF,IAAIn9I,EAAIg+I,EAAeb,EAAe3tI,EAAQxV,EAAU,KAAK,EAC7DwkJ,EAAmBrB,EAAe3tI,EAAQguI,EAAY17J,EAAI,IAAM0Z,EAAGxB,EAAU,MAAOgG,CAAC,CACzF,CACJ,CAEA,IAAI+9I,EAAUZ,EAAc,MAAM,aAC9BY,GAAW,MACXA,EAAQZ,EAAc,MAAM,KAC5BY,EAAQZ,EAAc,MAAM,KAC5BqB,EAAmBrB,EAAe3tI,EAAQguI,EAAY,UAAY17J,EAAGi8J,EAASC,EAAeb,EAAe3tI,EAAQuuI,CAAO,CAAC,CAEpI,EAaA,SAASS,EAAmBrB,EAAe3tI,EAAQguI,EAAY17J,EAAG9G,EAAOglB,EAAG,CACxEu+I,EACIf,EAAW,IACHhuI,EAAO,qBAAwBA,EAAO,uBAAyB,EAAKA,EAAO,QACzE,KAAK,IAAIqtI,EAAM78I,CAAC,CAAC,EAC3Bw9I,EAAW,IACHhuI,EAAO,qBAAwBA,EAAO,uBAAyB,EAAKA,EAAO,QACzE,KAAK,IAAIqtI,EAAM78I,CAAC,CAAC,EAC3B,0BAA4Ble,EAC5Bq7J,EAAc,UAAU,MAAM,UAAYA,EAAc,UAAU,MAAM,UAAUniK,CAAK,EAAIA,EAC3FmiK,EAAc,UAAU,MACxBn9I,CAAC,CACT,CA4BA,SAASu+I,EAAS33I,EAAGC,EAAGwB,EAAIhf,EAAMo1J,EAAaz+I,EAAG,CAC9C,IAAI2e,EAAO5F,GAAExzB,CAAW,EAAE,KAAK,IAAM8iB,CAAE,EACnCq2I,EAAS//H,EAAK,OACb+/H,IACD//H,EAAO5F,GAAE,eAAe,EACxB4F,EAAK,KAAK,KAAMtW,CAAE,EAClBsW,EAAK,KAAK,QAAS,gBAAgB,EACnCp5B,EAAY,OAAOo5B,CAAI,GAG3BA,EAAK,IAAI,WAAY,UAAU,EAC/BA,EAAK,IAAI,MAAO9X,EAAI,IAAI,EACxB8X,EAAK,IAAI,cAAe,QAAQ,EAE5B8/H,EAAY,KAAK,MACnB9/H,EAAK,IAAI,YAAa8/H,EAAY,KAAK,KAAO,IAAI,EAEhDA,EAAY,KAAK,QACnB9/H,EAAK,IAAI,cAAe8/H,EAAY,KAAK,MAAM,EAE7CA,EAAY,OACd9/H,EAAK,IAAI,QAAS8/H,EAAY,KAAK,EAEjCA,EAAY,WAAW,OACzB9/H,EAAK,IAAI,mBAAoB8/H,EAAY,WAAW,KAAK,EAEvDA,EAAY,WAAW,SACzB9/H,EAAK,IAAI,UAAW8/H,EAAY,WAAW,OAAO,EAEpD9/H,EAAK,KAAKt1B,CAAI,EAEds1B,EAAK,IAAI,OAAQ/X,EAAI,IAAI,EACzB+X,EAAK,IAAI,OAAS,SAASA,EAAK,IAAI,MAAM,CAAC,EAAKA,EAAK,MAAM,EAAG,EAAM,IAAI,EAGpE,CAAC+/H,GAAU1+I,IACX2e,EAAK,IAAI,MAAQ,SAASA,EAAK,IAAI,KAAK,CAAC,EAAKA,EAAK,OAAO,EAAG,EAAM,IAAI,EACvEA,EAAK,IAAI,YAAa,WAAc,IAAM3e,EAAK,IAAM,MAAM,EAEnE,CAEA,OAAOo7I,CACX,EAAG,EASH,SAASG,EAAUoD,EAAc,CAC7B,OAAO,OAAO,OAAW,IAAc,IAAI,OAAOA,CAAY,EAAI,IACtE,CAWA,SAAS5zI,EAAIje,EAAShL,EAAG,CACrB,OAAOA,EAAIgL,CACf,CAWA,SAASke,EAAIle,EAAShL,EAAG,CACrB,OAAO,KAAK,MAAMA,EAAIgL,CAAO,CACjC,CAaA,SAAS+vJ,EAAM78I,EAAG,CACd,OAAOA,EAAI,KAAK,EACpB,CAkBA,SAASi+I,EAAQjmJ,EAASolJ,EAAIC,EAAIx9I,EAAG8hI,EAAGwc,EAAKC,EAAKC,EAAIvjI,EAAIwjI,EAAI,CAC1D,GAAIH,IAAQC,EAGZ,KAAIQ,EAAmB,GACvB5mJ,EAAQ,KAAK,EACbA,EAAQ,UAAU,EAClBA,EAAQ,IAAIolJ,EAAIC,EAAIx9I,EAAGs+I,EAAKC,EAAKQ,CAAgB,EACjD5mJ,EAAQ,OAAOolJ,GAAMv9I,EAAI8hI,GAAK,KAAK,IAAIyc,CAAG,EAC3Bf,GAAMx9I,EAAI8hI,GAAK,KAAK,IAAIyc,CAAG,CAAC,EAC3CpmJ,EAAQ,IAAIolJ,EAAIC,EAAIx9I,EAAI8hI,EAAGyc,EAAKD,EAAK,CAACS,CAAgB,EACtD5mJ,EAAQ,UAAU,EACd8iB,IACA9iB,EAAQ,UAAY8iB,GAEpBujI,IACArmJ,EAAQ,YAAcqmJ,EACtBrmJ,EAAQ,OAAO,GAEfsmJ,IACAtmJ,EAAQ,UAAYsmJ,EACpBtmJ,EAAQ,KAAK,GAEjBA,EAAQ,QAAQ,EACpB,CAUA,SAASghB,EAAMC,EAAM,CAEjBA,EAAK,MAAM,eAAe,KAAK,SAASA,EAAMz6B,EAAS,CACnD,IAAI88J,EAASC,EAAU/8J,EAAQ,OAAO,OAAO,KAAK,EAM9CA,EAAQ,OAAO,OAAO,OACtBA,EAAQ,KAAK,KAAO,GACpBA,EAAQ,OAAO,KAAO,IAI1B,IAAI4E,EAAa5E,EAAQ,OAAO,OAAO,UAAU,OAEjD4E,EAAW,KAAK,SAAS4c,EAAG9e,EAAG,CAC3B,OAAI8e,EAAE,MAAQ9e,EAAE,MACL,GACA8e,EAAE,MAAQ9e,EAAE,MACZ,EAEA,CAEf,CAAC,CAIL,CAAC,EAGD+3B,EAAK,MAAM,KAAK,KAAK,SAASA,EAAMjhB,EAAS,CACzC,IAAIxZ,EAAUy6B,EAAK,WAAW,EAC1BoiI,EAAe78J,EAAQ,OAAO,OAE9B88J,EAASC,EAAUF,EAAa,KAAK,EAGzC,GAAKA,EAAa,KAIlB,KAAIzlJ,EAASqjB,EAAK,QAAQ,EAE1B,GAAI,GAACrjB,GAAU,CAACA,EAAO,QAIvB,KAAIipJ,EAAQ,IAAIzD,EAAMniI,EAAMjhB,CAAO,EAG/BwX,EAASqvI,EAAM,gBAAgB,EAG/BxD,EAAa,MAAM,OAKvBwD,EAAM,eAAervI,CAAM,EAG3B,QAAS1tB,EAAI,EAAGA,EAAI8T,EAAO,OAAQ9T,IAAK,CACpC,IAAIiO,EAAO6F,EAAO9T,CAAC,EAEfq7J,EAAgBpkI,GAAE,OAAO,CAAC,EAAGsiI,EAActrJ,EAAK,MAAM,EACtDA,EAAK,QAEL8uJ,EAAM,oBAAoB1B,EAAe3tI,EAAO,SAAS,EAI7D,IAAIguI,EAAaqB,EAAM,oBAAoB1B,EAAe3tI,EAAQ1tB,CAAC,EAGnE+8J,EAAM,mBAAmB1B,EAAeK,CAAU,EAE9CL,EAAc,MAAM,OAIpBA,EAAc,MAAM,MACpB0B,EAAM,UAAU1B,EAAe3tI,EAAQguI,EAAY17J,EAAGiO,CAAI,EAG9D8uJ,EAAM,UAAU1B,EAAe3tI,EAAQguI,EAAYztJ,EAAK,MAAOA,EAAK,KAAK,CAAC,EAAE,CAAC,CAAC,EAE1EotJ,EAAc,UAAU,MACxB0B,EAAM,cAAc1B,EAAe3tI,EAAQguI,CAAU,EAErDL,EAAc,UAAU,MAAM,MAC9B0B,EAAM,oBAAoB1B,EAAe3tI,EAAQguI,EAAY17J,CAAC,EAG9Dq7J,EAAc,MAAM,MACpB0B,EAAM,UAAU1B,EAAe3tI,EAAQguI,EAAY17J,EAAGiO,CAAI,CAElE,GACJ,CAAC,CACL,CAQA,IAAIwlD,EAAW,CACX,OAAQ,CACJ,OAAQ,CACJ,MAAO,CACH,IAAK,GACL,OAAQ,GACR,MAAO,EACX,EACA,KAAM,GACN,OAAQ,CACJ,OAAQ,EACR,QAAS,EACT,QAAS,EACT,QAAS,EACT,OAAQ,EACZ,EACA,MAAO,CACH,KAAM,EACV,EACA,KAAM,CACF,WAAY,CACR,MAAO,IACX,EACA,OAAQ,CACJ,KAAM,GACN,MAAO,QACP,MAAO,CACX,EACA,OAAQ,EACR,OAAQ,QACZ,EACA,MAAO,CACH,MAAO,OACP,WAAY,GACZ,SAAU,IACV,IAAK,EACL,IAAK,IACL,WAAY,CACR,MAAO,OACX,EACA,OAAQ,CACJ,MAAO,YACP,MAAO,CACX,EACA,OAAQ,CACJ,KAAM,GACN,KAAM,CACV,CACJ,EACA,MAAO,CACH,KAAM,GACN,OAAQ,OACR,WAAY,CACR,MAAO,KACP,QAAS,CACb,EACA,KAAM,CACF,KAAM,OACN,OAAQ,YACZ,EACA,MAAO,KACP,UAAW,SAAS1wD,EAAO7J,EAAO,CAC9B,OAAO6J,CACX,CACJ,EACA,MAAO,CACH,KAAM,GACN,OAAQ,OACR,WAAY,CACR,MAAO,KACP,QAAS,CACb,EACA,KAAM,CACF,KAAM,OACN,OAAQ,YACZ,EACA,MAAO,KACP,UAAW,SAASA,EAAO7J,EAAO,CAC9B,OAAO,SAASA,CAAK,CACzB,CACJ,EACA,UAAW,CACP,KAAM,GACN,MAAO,OACP,MAAO,CACH,KAAM,GACN,OAAQ,OACR,WAAY,CACR,MAAO,KACP,QAAS,CACb,EACA,KAAM,CACF,KAAM,OACN,OAAQ,aACZ,EACA,MAAO,KACP,UAAW,SAASA,EAAO,CACvB,OAAOA,CACX,CACJ,EACA,OAAQ,CAER,CACJ,CACJ,CACJ,CACJ,EAGA+9B,GAAE,KAAK,QAAQ,KAAK,CAChB,KAAMC,EACN,QAASu8B,EACT,KAAM,QACN,QAAS,OACb,CAAC,CAEL,GAAG,MAAM,C,uFCj/BF,MAAMunC,KAAW,MAFC,qBACE,SACiC,EAE/Cp/B,KAAM,MAAU,CAC3B,YAAa,mBACb,aAAWq/B,EAAA,GAAgB,CACzB,QAASD,CACX,CAAC,EACD,UAAW,KAAO,CAAC,EACrB,CAAC,ECdYE,EAAc,CAAC,gBAAiB,QAAQ,EAC/CC,EAAiBv/B,EACpB,iBAAiB,CAChB,YAAAs/B,CACF,CAAC,EACA,gBAAgB,CACf,UAAYE,IAAW,CACrB,gBAAiBA,EAAM,MAAyD,CAC9E,MAAO,KAAO,CAAE,IAAK,mCAAoC,GACzD,aAAc,CAAC,eAAe,CAChC,CAAC,EACD,WAAYA,EAAM,MAA+C,CAC/D,MAAQC,IAAc,CACpB,IAAK,WACL,OAAQ,CACN,OAAQA,EAAS,OACjB,oBAAqBA,EAAS,oBAC9B,SAAUA,EAAS,SACnB,cAAeA,EAAS,cACxB,cAAeA,EAAS,cACxB,MAAOA,EAAS,MAChB,gBAAiBA,EAAS,gBAC1B,qBAAsBA,EAAS,qBAC/B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,eACzB,MAAOA,EAAS,KAClB,CACF,GACA,aAAc,CAAC,QAAQ,CACzB,CAAC,EACD,aAAcD,EAAM,SAAsD,CACxE,MAAQC,IAAc,CACpB,IAAK,WACL,OAAQ,OACR,KAAMA,EAAS,OACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,QAAQ,CAC5B,CAAC,EACD,uBAAwBD,EAAM,SAA0E,CACtG,MAAQC,IAAc,CACpB,IAAK,WACL,OAAQ,SACR,OAAQ,CACN,OAAQA,EAAS,OACjB,SAAUA,EAAS,SACnB,OAAQA,EAAS,OACjB,cAAeA,EAAS,cACxB,mBAAoBA,EAAS,mBAC7B,iDAAkDA,EAAS,iDAC3D,cAAeA,EAAS,cACxB,MAAOA,EAAS,MAChB,iBAAkBA,EAAS,iBAC3B,kBAAmBA,EAAS,kBAC5B,gBAAiBA,EAAS,gBAC1B,qBAAsBA,EAAS,qBAC/B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,cAC3B,CACF,GACA,gBAAiB,CAAC,QAAQ,CAC5B,CAAC,EACD,UAAWD,EAAM,MAA6C,CAC5D,MAAQC,IAAc,CACpB,IAAK,YAAYA,EAAS,IAAI,GAC9B,OAAQ,CACN,OAAQA,EAAS,MACnB,CACF,GACA,aAAc,CAAC,QAAQ,CACzB,CAAC,EACD,cAAeD,EAAM,SAAwD,CAC3E,MAAQC,IAAc,CACpB,IAAK,YAAYA,EAAS,IAAI,GAC9B,OAAQ,MACR,KAAMA,EAAS,OACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,QAAQ,CAC5B,CAAC,EACD,aAAcD,EAAM,SAAsD,CACxE,MAAQC,IAAc,CACpB,IAAK,YAAYA,EAAS,IAAI,GAC9B,OAAQ,SACR,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,mBAAoBA,EAAS,mBAC7B,iDAAkDA,EAAS,iDAC3D,iBAAkBA,EAAS,iBAC3B,kBAAmBA,EAAS,iBAC9B,CACF,GACA,gBAAiB,CAAC,QAAQ,CAC5B,CAAC,EACD,aAAcD,EAAM,SAAsD,CACxE,MAAQC,IAAc,CACpB,IAAK,YAAYA,EAAS,IAAI,GAC9B,OAAQ,QACR,KAAMA,EAAS,MACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,gBAC1B,MAAOA,EAAS,KAClB,CACF,GACA,gBAAiB,CAAC,QAAQ,CAC5B,CAAC,EACD,gBAAiBD,EAAM,MAAyD,CAC9E,MAAQC,IAAc,CAAE,IAAK,YAAYA,EAAS,IAAI,SAAU,GAChE,aAAc,CAAC,QAAQ,CACzB,CAAC,EACD,kBAAmBD,EAAM,MAA6D,CACpF,MAAQC,IAAc,CAAE,IAAK,YAAYA,EAAS,IAAI,WAAY,GAClE,aAAc,CAAC,QAAQ,CACzB,CAAC,EACD,gBAAiBD,EAAM,MAAyD,CAC9E,MAAQC,IAAc,CAAE,IAAK,YAAYA,EAAS,IAAI,SAAU,GAChE,aAAc,CAAC,QAAQ,CACzB,CAAC,EACD,iBAAkBD,EAAM,MAA2D,CACjF,MAAQC,IAAc,CAAE,IAAK,YAAYA,EAAS,IAAI,UAAW,GACjE,aAAc,CAAC,QAAQ,CACzB,CAAC,CACH,GACA,iBAAkB,EACpB,CAAC,EAuaU,CACX,wBAAAC,EACA,4BAAAC,EACA,mBAAAyhE,EACA,uBAAAC,EACA,wBAAA76H,EACA,kCAAA86H,EACA,kBAAAj7H,EACA,sBAAA61F,EACA,yBAAAx1F,EACA,wBAAAH,EACA,wBAAAE,EACA,wBAAA86H,EACA,4BAAAC,EACA,0BAAAC,EACA,8BAAAC,EACA,wBAAAC,EACA,4BAAAC,EACA,yBAAAt7H,EACA,6BAAAu7H,CACF,EAAItiE,EClkBSkB,EAAe,EAAO,iBAAiB,CAAC,CAAC,C,oHC4B/C,MAAMqhE,UAAoB,eAA4B,CAAtD,kCACL,WAAe,CAAE,KAAM,GAAI,eAAgB,EAAM,EACjD,cAAW,YAAkC,EAiB7C,iBAAc,IAAM,CAClB,MAAMC,EAAM,KAAK,SAAS,SAAS,MACnC,IAAIC,EAAY,GACZpzJ,EAAW,GACf,MAAM/I,EAAM,KAAK,MAAM,IACjBC,EAAM,KAAK,MAAM,IACvB,IAAIm8J,EAAeF,IAAQ,GAAK,OAAOA,CAAG,EAAI,OAE1CE,GAAgB,CAAC,OAAO,MAAMA,CAAY,IACxCp8J,GAAO,MAAQo8J,EAAep8J,GAChC+I,EAAW/I,EAAI,SAAS,EACxBm8J,EAAY,IACHl8J,GAAO,MAAQm8J,EAAen8J,GACvC8I,EAAW9I,EAAI,SAAS,EACxBk8J,EAAY,IAEZpzJ,EAAWmzJ,GAAO,GAGpB,KAAK,SAAS,CACZ,KAAMnzJ,EACN,eAAgBozJ,CAClB,CAAC,GAGCA,GACF,KAAK,qBAAqB,EAGxB,CAAC,OAAO,MAAMC,CAAY,GAAKA,IAAiB,KAAK,MAAM,OAC7D,KAAK,MAAM,SAASA,CAAY,CAEpC,EAEA,6BAAuB,YAAS,KAAK,YAAa,GAAG,EAErD,cAAY50J,GAA0C,CACpD,KAAK,SAAS,CACZ,KAAMA,EAAE,cAAc,KACxB,CAAC,EACD,KAAK,qBAAqB,CAC5B,EAEA,gBAAcA,GAA6C,CACrDA,EAAE,MAAQ,SACZ,KAAK,YAAY,CAErB,EA9DA,mBAAoB,CAClB,KAAK,SAAS,CACZ,KAAM,MAAM,KAAK,MAAM,KAAM,EAAI,GAAK,GAAG,KAAK,MAAM,KAAK,EAC3D,CAAC,CACH,CAEA,mBAAmB60J,EAAiB,CAClC,GAAI,KAAK,MAAM,QAAUA,EAAS,MAAO,CACvC,MAAMv2J,EAAO,MAAM,KAAK,MAAM,KAAM,EAAI,GAAK,GAAG,KAAK,MAAM,KAAK,GAC5DA,IAAS,KAAK,MAAM,MACtB,KAAK,SAAS,CAAE,KAAAA,CAAK,CAAC,CAE1B,CACF,CAmDA,aAAc,CACZ,SACE,OAAC,KACC,KAAK,SACL,GAAI,KAAK,MAAM,GACf,IAAK,KAAK,SACV,IAAK,KAAK,MAAM,IAChB,IAAK,KAAK,MAAM,IAChB,KAAM,KAAK,MAAM,KACjB,UAAW,KAAK,MAAM,UACtB,MAAO,KAAK,MAAM,KAClB,SAAU,KAAK,SACf,OAAQ,KAAK,YACb,WAAY,KAAK,WACjB,YAAa,KAAK,MAAM,YACxB,SAAU,KAAK,MAAM,cACrB,MAAO,KAAK,MAAM,MAClB,OAAQ,KAAK,MAAM,OACrB,CAEJ,CAEA,QAAS,CACP,KAAM,CAAE,eAAAw2J,CAAe,EAAI,KAAK,MAChC,GAAIA,EAAgB,CAClB,IAAIz2J,EAAQ,GACR,CAAE,IAAA7F,EAAK,IAAAC,CAAI,EAAI,KAAK,MACxB,OAAIA,GAAO,KACLD,GAAO,OACT6F,EAAQ,KAAK7F,CAAG,IAETA,GAAO,KAChB6F,EAAQ,GAAG7F,CAAG,QAAQC,CAAG,GAEzB4F,EAAQ,KAAK5F,CAAG,MAGhB,OAAC,KACC,QAASq8J,EACT,MAAO,gBAAgBz2J,CAAK,GAC5B,oCAAqC,GACrC,MAAO,CAAE,UAAW,KAAM,EAEzB,cAAK,YAAY,EACpB,CAEJ,CAEA,OAAO,KAAK,YAAY,CAC1B,CACF,C,iFC7IO,SAAS02J,EAAuB90H,EAAuB,CAC5D,MAAI,CAACA,GAAQ,OAAOA,GAAS,SACpB,GAKKA,EAAK,QAAQ,IAAI,EAAI,EAEpBA,EAAO,GAAG,OAAO,uBAAuB,SAASA,CAAI,EACtE,CAEO,SAAS+0H,EACdxgK,EACAmC,EAC2B,CAC3B,MAAMwU,EAAOxU,EAAO,MAAQ,KAAsB,MAClD,GAAIwU,IAAS,KAAsB,MAAO,CACxC,MAAM3V,EAAIu/J,EAAuBp+J,EAAO,KAAK,EAC7C,MAAO,CACL,UAAW,CAASnB,EACpB,MAAOA,EACP,MAAO,IAAMA,EACb,IAAMuB,GAAMvB,CACd,CACF,CAEA,MAAM1C,KAAQ,MAAU0B,EAAOmC,EAAO,KAAK,EAC3C,GAAI,CAAC7D,EAEH,MAAO,CACL,UAAW,GACX,MAAO,GACP,MAAO,IAAM,GACb,IAAMiE,GAAM,EACd,EAGF,GAAIoU,IAAS,KAAsB,QAAS,CAC1C,MAAM4V,EAAUvrB,GAAcu/J,EAAuB,GAAGv/J,CAAC,EAAE,EAC3D,MAAO,CACL,MAAA1C,EACA,IAAMiE,GAAMgqB,EAAOjuB,EAAM,OAAOiE,CAAC,CAAC,EAClC,MAAO,IAAMgqB,KAAO,MAAyBjuB,CAAK,CAAC,CACrD,CACF,CAGA,MAAMmiK,EAAkBhlK,GAA2B,CACjD,GAAI,OAAOA,GAAU,SACnB,MAAO,GAGT,IAAIy4B,EAAMz4B,EACV,GAAI6C,GAASA,EAAM,QAAS,CAC1B,MAAM6V,EAAe7V,EAAM,QAAQ7C,CAAK,EACpC0Y,EAAa,OACf+f,EAAM/f,EAAa,KAEvB,CAEA,OAAOosJ,EAAuBrsI,CAAG,CACnC,EAEA,MAAO,CACL,MAAA51B,EACA,IAAM+O,GAA0BozJ,EAAeniK,EAAM,OAAO+O,CAAK,CAAC,EAClE,MAAO,IAAMozJ,KAAe,MAAyBniK,CAAK,CAAC,CAC7D,CACF,C,gECpEO,MAAMoiK,KAAgB,MAA6B,mBAAmB,C,mICFtE,SAASC,EAAiBlgE,EAAyD,CACxF,IAAInwE,EAASmwE,EAAY,OAEzB,KAAOnwE,GAAQ,CACb,GAAI,yBAAyBA,CAAM,EACjC,OAAOA,EAGTA,EAASA,EAAO,MAClB,CAEA,OAAO,IACT,CAMO,SAASswI,EAA0B,CAAE,UAAAp6J,CAAU,EAAiC,CAAC,EAAG,CACzF,MAAMnJ,KAAM,UAAyB,IAAI,EAEzC,sBAAU,IAAM,CACVA,EAAI,SAAWmJ,GAEjB,WAAW,IAAMnJ,EAAI,SAAS,MAAM,EAAG,GAAG,CAE9C,EAAG,CAACmJ,CAAS,CAAC,EAEPnJ,CACT,CAEO,SAASwjK,EAAoB39J,EAA2B49J,EAAqC,CAClG,MAAMC,EAAY79J,GAAS,GAE3B,GAAI49J,EAAe,IAAIC,CAAS,EAAG,CACjC,MAAMC,EAAaD,EAAU,MAAM,cAAc,EACjD,GAAIC,EAAY,CAEd,MAAMD,EAAYC,EAAW,CAAC,EACxBC,EAAgB,SAASD,EAAW,CAAC,EAAG,EAAE,EAChD,IAAIrrD,EAAW,GAAGorD,CAAS,GAAGE,EAAgB,CAAC,GAG/C,KAAOH,EAAe,IAAInrD,CAAQ,GAAG,CACnC,MAAMurD,EAAa,SAASvrD,EAAS,MAAM,MAAM,EAAG,CAAC,EAAG,EAAE,EAAI,EAC9DA,EAAW,GAAGorD,CAAS,GAAGG,CAAU,EACtC,CACA,OAAOvrD,CACT,KAAO,CAEL,IAAIpzG,EAAI,EACJozG,EAAW,GAAGorD,CAAS,IAAIx+J,CAAC,GAChC,KAAOu+J,EAAe,IAAInrD,CAAQ,GAChCpzG,IACAozG,EAAW,GAAGorD,CAAS,IAAIx+J,CAAC,GAE9B,OAAOozG,CACT,CACF,CAEA,OAAOorD,CACT,CAEO,SAASI,EAAclxI,EAAgCmxI,EAAqCv+C,EAAoB,CACrH,MAAMg7B,EAAe5tH,EAAO,UACxB,KAAe4tH,CAAY,IAC7BujB,EAAY,YAAY,EACxBvjB,EAAa,aAAaujB,EAAav+C,CAAQ,EAEnD,CAEO,SAASw+C,EAAU7qG,EAAuC,CAE/D,MAAO,EAAEA,GAAY,KAAW,MAAQ,KAAW,KAAK,kBAAoB,SAC9E,CAEO,IAAK8qG,GAAAA,IACVA,EAAA,eAAiB,iBACjBA,EAAA,WAAa,aAFHA,IAAAA,GAAA,IAKL,SAASC,EAAsBz4I,EAAyC,CAC7E,OAAQA,EAAI,CACV,IAAK,iBACH,MAAO,iBACT,IAAK,aACH,MAAO,aACT,QACE,MACJ,CACF,C,wEC5FO,SAAS04I,EAAmB5nH,EAAgB6nH,EAAmCjgH,EAA6B,CACjH,GAAI,CAACA,EAAW,KAAK,EACnB,OAAO5H,EAGT,MAAM8nH,EAAW9nH,EAAM,IAAI6nH,CAAQ,EAEnC,SADwB,KAAYC,EAAUlgH,CAAU,EACjC,IAAKh6B,GAAQoyB,EAAMpyB,CAAG,CAAC,CAChD,CAMO,SAASm6I,EAAaxkI,EAAgBqkB,EAA6B,CACxE,GAAI,CAACA,EAAW,KAAK,EACnB,MAAO,GAGT,MAAMkgH,EAAW,CAACvkI,CAAM,EAExB,SADwB,KAAYukI,EAAUlgH,CAAU,EACjC,OAAS,CAClC,C,sWCqCO,MAAMogH,EAAqB,iCACrBC,EAA8B,yCAEpC,SAASC,EAAyBhgK,EAAsC,CAC7E,KAAM,CAAE,KAAA+P,EAAM,WAAA2nG,EAAY,QAAAuoD,GAAS,YAAAC,GAAa,kBAAAC,GAAmB,sBAAAC,EAAuB,KAAA3mK,EAAK,EAAIuG,EAE7F8rD,MAAc,MAAcu0G,EAAiBrgK,EAAO,WAAW,CAAC,EAChEkhF,MAAS,MAAco/E,EAAYtgK,EAAO,MAAM,CAAC,EAEvD,GAAIvG,KAAS,IAAa,cAAe,CACvC,IAAI8mK,GACJ,OAAIJ,IAAqBC,IACvBG,GAAgB,GAAGJ,EAAiB,GAAGC,CAAqB,IAGvD,CACL,MAAOrwJ,EACP,IAAK,GAAGkwJ,EAAO,GAAGC,EAAW,GAC7B,gBAAiBK,GACjB,YAAAz0G,GACA,OAAAo1B,GACA,KAAMw2B,CACR,CACF,SAAWj+G,KAAS,IAAa,eAC/B,MAAO,CACL,OAAQsW,EACR,OAAAmxE,GACA,KAAMw2B,CACR,EAEF,MAAM,IAAI,MAAM,yBAAyBj+G,EAAI,EAAE,CACjD,CAEO,SAAS+mK,EAA2B9xJ,EAAwC+xJ,EAA+B,CAChH,MAAMC,EAAO,CAAC,MAAG,MAAchyJ,GAAQ,CAAC,CAAC,CAAC,EAC1C,OAAI+xJ,GACFC,EAAK,KAAK,CAAE,IAAK,GAAI,MAAO,EAAG,CAAC,EAE3BA,CACT,CAEO,SAASC,EACdC,EACAC,EACyC,CACzC,GAAIA,GAAe,SAAS,sBAAwBD,EAClD,MAAO,CACL,SAAUC,GAAe,SAAS,qBAClC,oBAAqBA,GAAe,SAAS,kBAC7C,sBAAuBA,GAAe,SAAS,oBAC/C,SAAUA,GAAe,SAAS,iBAAmBA,GAAe,SAAS,QAAU,OACvF,WACEA,GAAe,SAAS,iBAAmBA,GAAe,SAAS,eAC/DA,GAAe,SAAS,eACxB,OACN,eACEA,GAAe,SAAS,iBAAmBA,GAAe,SAAS,mBAC/DA,GAAe,SAAS,mBACxB,OACN,gBACEA,GAAe,SAAS,iBAAmBA,GAAe,SAAS,oBAC/DA,GAAe,SAAS,oBACxB,MACR,CAGJ,CAEA,SAASC,EAAwBC,EAAoC,CACnE,MAAO,CACL,yCAA0CA,EAAiB,sBAC3D,iCAAkCA,EAAiB,4BACrD,CACF,CAEO,SAASC,EAAgChhK,EAAoD,CAClG,KAAM,CACJ,KAAA+P,EACA,UAAAgwD,EACA,YAAAkhG,GACA,aAAAC,GACA,YAAAC,GACA,cAAAZ,EACA,QAAAr3I,GACA,SAAAqwI,GACA,cAAAsH,GACA,cAAAD,GACA,KAAAnnK,GACA,OAAA2nK,GACA,oBAAAC,GACA,4BAAAC,EACF,EAAIthK,EACJ,GAAI,CAAC+/D,EACH,MAAM,IAAI,MAAM,wEAAwE,EAG1F,MAAMwhG,GAAuBZ,EAA8BC,GAAeC,EAAa,EACjFh5G,GAAW7nD,EAAO,eACpB,CAAE,gBAAiB8gK,EAAwB9gK,EAAO,cAAc,CAAE,EAClE,OAEE8rD,MAAc,MAAcu0G,EAAiBrgK,EAAO,WAAW,CAAC,EAChEkhF,MAAS,MAAco/E,EAAYtgK,EAAO,MAAM,CAAC,EAEjDwhK,MAAoB,MAA4B/nK,EAAI,EACpDgoK,MAAqB,MAA6BhoK,EAAK,EAE7D,GAAI+nK,GACF,MAAO,CACL,cAAe,CACb,MAAOzxJ,EACP,UAAAgwD,EACA,KAAM72C,GAAQ,IAAIw4I,CAA2B,EAC7C,UAAW,EAAQnI,GAGnB,cAAe0H,GACf,eAAgBC,GAChB,sBAAuBK,GACvB,SAAA15G,GACA,gCAAiCy5G,GAC7B,OAAOA,EAA2B,EAElC,CACN,EACA,YAAAx1G,GACA,OAAAo1B,GAGA,IAAKigF,GACL,gBAAiBZ,CACnB,EACK,GAAIkB,GACT,MAAO,CACL,cAAe,CACb,MAAO1xJ,EACP,UAAAgwD,EACA,KAAM72C,GAAQ,IAAIw4I,CAA2B,EAC7C,UAAW,EAAQnI,GAGnB,OAAQ,CACN,OAAQ6H,IAAUrxJ,EAClB,KAAMgwD,EACN,sBAAuBshG,EACzB,CACF,EACA,YAAAv1G,GACA,OAAAo1B,EACF,EAGF,MAAM,IAAI,MAAM,+DAA+DznF,EAAI,EAAE,CACvF,CAEO,MAAM4mK,EAAoBsB,GAC/BA,EAAI,IAAIC,CAAe,EAAE,OAAO,CAAC,CAAE,IAAAvgJ,EAAK,MAAA1nB,CAAM,IAAyB,EAAQ0nB,GAAQ,EAAQ1nB,CAAM,EAE1F2mK,EAAeqB,GAC1BA,EAAI,IAAIC,CAAe,EAAE,OAAO,CAAC,CAAE,IAAAvgJ,CAAI,IAAyB,EAAQA,CAAI,EAExEugJ,EAAkB,CAAC,CAAE,IAAAvgJ,EAAK,MAAA1nB,CAAM,KAA2B,CAC/D,IAAK0nB,EAAI,KAAK,EACd,MAAO1nB,EAAM,KAAK,CACpB,GAEO,SAASkoK,EAAwBC,EAAkE,CACxG,MAAMC,EAAyCD,EAAG,sBAC9C,CACE,qBAAsBA,EAAG,sBAAsB,SAC/C,kBAAmBA,EAAG,sBAAsB,qBAAuB,CAAC,EACpE,oBAAqBA,EAAG,sBAAsB,uBAAyB,CAAC,EACxE,iBACE,MAAM,QAAQA,EAAG,sBAAsB,QAAQ,GAAKA,EAAG,sBAAsB,SAAS,OAAS,EACjG,gBAAiB,CACfA,EAAG,sBAAsB,WACzBA,EAAG,sBAAsB,eACzBA,EAAG,sBAAsB,eAC3B,EAAE,KAAK,OAAO,EACd,QAASA,EAAG,sBAAsB,UAAY,CAAC,EAC/C,eAAgBA,EAAG,sBAAsB,YAAc,GACvD,mBAAoBA,EAAG,sBAAsB,gBAAkB,GAC/D,oBAAqBA,EAAG,sBAAsB,iBAAmB,EACnE,EACA,OAMJ,OAL+DC,EAC3D,CACE,CAAC,IAAyB,EAAGA,CAC/B,EACA,MAEN,CAEA,SAASC,EAAyBF,EAA2B,CAE3D,GAAK,IAAO,eAAe,oCAI3B,OAAIA,EAAG,UAAU,gBACR,CACL,sBAAuBA,EAAG,SAAS,gBAAgB,yCACnD,6BAA8BA,EAAG,SAAS,gBAAgB,gCAC5D,EAGK,CACL,sBAAuB,GACvB,6BAA8B,EAAQA,EAAG,qBAC3C,CACF,CAEO,SAASG,EAAsBnyH,EAAoD,CACxF,KAAM,CAAE,eAAAoyH,EAAgB,UAAAxsH,EAAW,MAAAlkC,GAAO,KAAA4hC,EAAK,EAAItD,EAC7CqyH,GAAyB,IAAc,QAAQ,cAAc/uH,EAAI,EAEjEgvH,KAAoB,MAAqBD,GAAyB,IAAa,iBAAmB,MAAS,EACjH,MAAI,MAAqBD,CAAc,EAErC,GAAIC,GAAwB,CAE1B,MAAML,GAAK1uH,GAAK,cAChB,MAAO,CACL,GAAGgvH,EACH,KAAMN,GAAG,MACT,KAAM,IAAa,iBACnB,MAAOtwJ,GAAM,KACb,cAAeA,GAAM,UAAY4wJ,EAAkB,cACnD,QAASN,GAAG,KACZ,UAAWA,GAAG,UACd,eAAa,MAA4BtB,EAA2BptH,GAAK,YAAa,EAAK,CAAC,EAC5F,OAAQotH,EAA2BptH,GAAK,OAAQ,EAAI,EACpD,OAAQ,CAAE,MAAOsC,EAAW,IAAKosH,GAAG,aAAc,EAClD,SAAUA,GAAG,UACb,OAAQA,GAAG,QAAQ,OACnB,oBAAqBA,GAAG,QAAQ,uBAAyBM,EAAkB,mBAC7E,CACF,SAAW,IAAc,QAAQ,KAAKhvH,EAAI,EAAG,CAE3C,MAAM0uH,GAAK1uH,GAAK,cACVivH,GAAyDR,EAAwBC,EAAE,EACzF,GAAIA,GAAG,gBAAkB,QAAaA,GAAG,iBAAmB,OAC1D,MAAO,CACL,GAAGM,EACH,KAAMN,GAAG,MACT,KAAM,IAAa,QACnB,MAAOtwJ,GAAM,KACb,cAAeA,GAAM,UAAY4wJ,EAAkB,cACnD,YAAahvH,GAAK,KAAO,IACzB,cAAeA,GAAK,iBAAmB,IACvC,YAAa0uH,GAAG,cAChB,aAAcA,GAAG,eACjB,QAASA,GAAG,KACZ,UAAWA,GAAG,UACd,eAAa,MAA4BtB,EAA2BptH,GAAK,YAAa,EAAK,CAAC,EAC5F,OAAQotH,EAA2BptH,GAAK,OAAQ,EAAI,EACpD,OAAQ,CAAE,MAAOsC,EAAW,IAAKosH,GAAG,aAAc,EAClD,SAAUA,GAAG,UAEb,cAAeO,GACf,cAAe,EAAQA,GAEvB,eAAgBL,EAAyBF,EAAE,EAE3C,4BAA6BA,GAAG,+BAClC,EAEA,MAAM,IAAI,MAAM,kDAAkD,CAEtE,KACE,OAAM,IAAI,MAAM,kDAAkD,UAIhE,IAAc,WAAW,aAAa1uH,EAAI,EAAG,CAG/C,MAAMomC,GAAe,CACnB,MAAO,IACP,iBAJoB,KAAiB,EAAE,oBAAoB0oF,CAAc,GAAG,KAAO,GAKnF,UAAW,GACX,qBAAmB,MAA4B,EAC/C,KAAM9uH,GAAK,KACX,MAAO,CACL,MAAO,IACP,KAAM,GACN,KAAMA,GAAK,IACb,CACF,EAEMkvH,GAAqBC,EAA4BnvH,EAAI,EAE3D,MAAO,CACL,GAAGgvH,EACH,GAAGE,GACH,QAAS,CAAC9oF,EAAY,EACtB,eAAa,MAA4BgnF,EAA2BptH,GAAK,YAAa,EAAK,CAAC,EAC5F,KAAM,IAAa,cACnB,eAAgB8uH,EAChB,UAAAxsH,EACA,MAAOlkC,GAAM,IACf,CACF,SAAW,IAAc,WAAW,cAAc4hC,EAAI,EAAG,CACvD,MAAMovH,GAAsBC,EAA6BrvH,EAAI,EAE7D,MAAO,CACL,GAAGgvH,EACH,GAAGI,GACH,KAAM,IAAa,eACnB,eAAgBN,EAChB,UAAAxsH,EACA,MAAOlkC,GAAM,IACf,CACF,KACE,OAAM,IAAI,MAAM,gDAAgD,CAGtE,CAEO,SAASkxJ,EAA2BtvH,EAA2BsC,EAAmC,CACvG,MAAMysH,EAAyB,IAAc,QAAQ,cAAc/uH,CAAI,EACjEgvH,MAAoB,MAAqBD,EAAyB,IAAa,iBAAmB,MAAS,EAE3GL,GAAK1uH,EAAK,cACVmwE,GAAWnwE,EAAK,IAChBmtH,EAAgBntH,EAAK,gBACrB0Y,GAAc1Y,EAAK,YACnB8tC,GAAS9tC,EAAK,OAEduvH,GAAmB,CACvB,GAAGP,GACH,KAAMN,GAAG,MACT,QAASA,GAAG,KACZ,UAAWA,GAAG,UACd,eAAa,MAA4BtB,EAA2B10G,GAAa,EAAK,CAAC,EACvF,OAAQ00G,EAA2Bt/E,GAAQ,EAAI,EAC/C,OAAQ,CAAE,MAAOxrC,EAAW,IAAKosH,GAAG,aAAc,EAClD,SAAUA,GAAG,SACf,EAEA,GAAI,IAAc,QAAQ,cAAc1uH,CAAI,EAE1C,MAAO,CACL,GAAGuvH,GACH,KAAM,IAAa,iBACnB,MAAOb,GAAG,WACV,OAAQA,GAAG,QAAQ,MACrB,EAIF,MAAMO,GAAyDR,EAAwBC,EAAE,EACzF,GAAIA,GAAG,gBAAkB,QAAaA,GAAG,iBAAmB,OAC1D,MAAO,CACL,GAAGa,GACH,KAAM,IAAa,QACnB,MAAOb,GAAG,WACV,YAAav+C,IAAY,IACzB,cAAeg9C,GAAiB,IAChC,YAAauB,GAAG,cAChB,aAAcA,GAAG,eAEjB,cAAeO,GACf,cAAe,EAAQA,GAEvB,eAAgBL,EAAyBF,EAAE,CAC7C,EAEA,MAAM,IAAI,MAAM,kDAAkD,CAEtE,CAEO,SAASS,EACdnvH,EAWA,CACA,MAAMgvH,KAAoB,MAAqB,EAEzC,CAACnC,EAASC,EAAW,EAAI9sH,EAAK,OAAM,MAAcA,EAAK,GAAG,EAAI,CAAC,EAAG,GAAG,EAErE,CAAC+sH,GAAmBC,EAAqB,EAAIhtH,EAAK,mBACpD,MAAcA,EAAK,eAAe,EAClC,CAACgvH,EAAkB,kBAAmBA,EAAkB,qBAAqB,EAEjF,MAAO,CACL,KAAMhvH,EAAK,MACX,WAAYA,EAAK,KACjB,QAAA6sH,EACA,YAAAC,GACA,kBAAAC,GACA,sBAAAC,GACA,YAAaI,EAA2BptH,EAAK,YAAa,EAAK,EAC/D,OAAQotH,EAA2BptH,EAAK,OAAQ,EAAI,CACtD,CACF,CAEO,SAASqvH,EACdrvH,EACwD,CACxD,MAAO,CACL,KAAMA,EAAK,OACX,WAAYA,EAAK,KACjB,OAAQotH,EAA2BptH,EAAK,OAAQ,EAAI,CACtD,CACF,CAEO,MAAMwvH,EAAoB,CAACC,EAAkB,KAAwB,CAC1E,MAAMr4F,KAAa,MAAsC,EACzD,GAAI,CAACA,EAEH,MAAO,CAAC,GADYq4F,EAAkBC,EAAkC,GAAG,EAAIC,EAAsB,IAAK,GAAG,CACvF,EAExB,MAAMC,KAAoB,MAA4B,EAEhDC,GAAcJ,EAAkBC,EAAkC,GAAG,EAAIC,EAAsB,IAAK,GAAG,EACvGG,GAAqB14F,KAAa,MAAmCA,EAAW,IAAI,EAAI,GAC9F,MAAO,CACL,CACE,MAAO,IACP,cAAeA,EAAW,IAC1B,UAAW,GACX,kBAAAw4F,EACA,MAAO,CACL,MAAO,IACP,QAASE,GAAqB,GAAO,MACvC,CACF,EACA,GAAGD,EACL,CACF,EAEaE,EACXC,GACiB,CACjB,MAAMJ,EAAoB,4BAA4B,EAEtD,MAAO,CACL,CACE,MAAO,IACP,cAAeI,EAAsB,CAAC,GAAG,KAAO,GAChD,UAAW,GACX,kBAAAJ,EACA,MAAO,CACL,MAAO,GACT,CACF,CACF,CACF,EACMD,EAAwB,IAAI5xG,IAA2C,CAC3E,MAAMkyG,EAASlyG,EAAO,CAAC,EACjBmyG,EAASnyG,EAAO,CAAC,EAEjBiS,GAAoC,CACxC,MAAOjS,EAAO,CAAC,EACf,KAAM,KAAoB,OAC1B,WAAY,CACV,IAAK,KACL,KAAM,KAAwB,IAChC,EACA,WAAY,CACV,CACE,KAAM,QACN,UAAW,CACT,OAAQ,CAAC,EACT,KAAM,IAAa,OACrB,EACA,SAAU,CACR,KAAM,KACR,EACA,MAAO,CACL,OAAQ,CAACkyG,CAAM,CACjB,EACA,QAAS,CACP,OAAQ,CAAC,EACT,KAAM,MACR,CACF,CACF,EACA,QAAS,OACT,WAAY,GACd,EAEMhgG,GAAuC,CAC3C,MAAOigG,EACP,KAAM,KAAoB,UAC1B,WAAY,CACV,IAAK,KACL,KAAM,KAAwB,IAChC,EACA,WAAY,CACV,CACE,KAAM,QACN,UAAW,CACT,OAAQ,CAAC,CAAC,EACV,KAAM,IAAa,OACrB,EACA,SAAU,CACR,KAAM,KACR,EACA,MAAO,CACL,OAAQ,CAACA,CAAM,CACjB,EACA,QAAS,CACP,OAAQ,CAAC,EACT,KAAM,MACR,CACF,CACF,EACA,WAAYD,CACd,EAEA,MAAO,CACL,CACE,MAAOA,EACP,cAAe,KACf,UAAW,GACX,MAAOjgG,EACT,EACA,CACE,MAAOkgG,EACP,cAAe,KACf,UAAW,GACX,MAAOjgG,EACT,CACF,CACF,EACMy/F,EAAqCO,GAAiC,CAC1E,MAAMjgG,EAAoC,CACxC,MAAOigG,EACP,KAAM,KAAoB,OAC1B,WAAY,CACV,IAAK,KACL,KAAM,KAAwB,IAChC,EACA,WAAY,CACV,CACE,KAAM,QACN,UAAW,CACT,OAAQ,CAAC,EACT,KAAM,IAAa,OACrB,EACA,SAAU,CACR,KAAM,KACR,EACA,MAAO,CACL,OAAQ,CAACA,CAAM,CACjB,EACA,QAAS,CACP,OAAQ,CAAC,EACT,KAAM,MACR,CACF,CACF,EACA,QAAS,OACT,WAAY,GACd,EAEA,MAAO,CACL,CACE,MAAOA,EACP,cAAe,KACf,UAAW,GACX,MAAOjgG,CACT,CACF,CACF,EAEMmgG,EAA8B,MAClCr6I,EACA85I,EACA1mK,EACAknK,GACAz7B,GACAsvB,KAC0B,CAC1B,MAAM77H,EAAuB,CAAC,EAE9B,UAAWH,MAAUnS,EAAS,CAC5B,MAAMR,GAAa,QAAM,KAAiB,EAAE,IAAI2S,GAAO,YAAY,IAAMA,GAAO,WAAamoI,EAAkB,EACzG30D,GAAQ,CAAE,IAAKnmF,GAAW,IAAK,KAAMA,GAAW,IAAK,EAErD3gB,GAAQ,sBAA8Bi7J,CAAiB,EACvD,CAAE,SAAAliH,GAAU,WAAAsxG,EAAW,EAAIqR,GAAa17J,GAAOsvJ,IAAe3uI,GAAW,SAAUq/G,EAAa,EAChG27B,GAAiB,CACrB,WAAY,CAAE,KAAM5iH,GAAU,MAAOA,EAAS,EAC9C,cAAe,CAAE,KAAMsxG,GAAY,MAAOA,EAAW,EACrD,GAAG91J,CACL,EAEMqnK,GAAqBj7I,GAAW,8BAClCA,GAAW,8BAA8B,CAAC2S,EAAM,EAAGqoI,EAAc,EAAE,CAAC,EACpEroI,GAGJ,GAAIwzE,GAAM,MAAQ,KAAyB,CACzC,MAAM9gD,GAAuB,CAC3B,MAAO41G,GAAmB,MAC1B,UAAW,GACX,kBAAAX,EACA,cAAe,KACf,MAAOW,EACT,EACAnoI,EAAO,KAAKuyB,EAAQ,CAEtB,KAAO,CACL,MAAM61G,MAAqB,KAAiB,EAAE,oBAAoB/0D,EAAK,EACvE,GAAI+0D,IAAsBA,GAAmB,KAAK,SAAU,CAC1D,MAAM71G,GAAuB,CAC3B,MAAO41G,GAAmB,MAC1B,UAAWA,GAAmB,WAAa,GAC3C,kBAAAX,EACA,cAAeY,GAAmB,IAClC,MAAO,CACL,GAAGD,GACH,cAAA57B,GACA,WAAAqqB,EACF,CACF,EACA52H,EAAO,KAAKuyB,EAAQ,CACtB,CACF,CACF,CACA,OAAOvyB,CACT,EAEaqoI,EAAwB,MACnC7mK,EACAozB,IACiD,CACjD,KAAM,CAAE,QAAAs5D,CAAQ,EAAI1sF,EACpB,GAAI,CAACA,EAAM,IAAM,CAACozB,EAAU,IAC1B,OAGF,MAAM4yI,GAAoB,sBAA8B,oBAA4B5yI,EAAU,IAAI,CAAC,EAC7FlH,GAAU,MAAMq6I,EACpB75E,EACAs5E,GACAhmK,EAAM,YAAc,CAAC,EACrBA,EAAM,YAAc,OACpBA,EAAM,eAAiB,OACvBA,EAAM,UAAY,MACpB,EAEA,GAAI,CAACksB,GAAQ,QAAU,CAACA,GAAQ,KAAM6I,IAAUA,GAAM,gBAAkB,IAAuB,EAC7F,OAGF,GAAI,CAAC7I,GAAQ,KAAM6I,IAAUA,GAAM,gBAAkB,IAAuB,EAAG,CAC7E,KAAM,CAACqxC,GAAkB0gG,EAAoB,EAAIf,KAAsB,KAAa75I,EAAO,EAAG,GAAG,EACjGA,GAAQ,KAAKk6C,EAAgB,EAE7B,KAAM,CAAC2gG,GAAmB1gG,EAAmB,EAAI0/F,EAC/C3/F,GAAiB,SACjB,KAAal6C,EAAO,CACtB,EACAA,GAAQ,KAAKm6C,EAAmB,CAClC,CAEA,KAAM,CAAE,YAAA8iC,GAAa,UAAAtE,CAAU,EAAIzxE,EAAU,KACvC8R,GACJ2/D,GAAasE,GACT,CACE,KAAM,SACN,IAAKtE,EACL,MAAOsE,EACT,EACA,OAmBN,MAjBmB,CACjB,KAAM,IAAa,QACnB,OAAAjkE,GACA,QAAAhZ,GACA,KAAMlsB,EAAM,MACZ,UAAWksB,GAAQA,GAAQ,OAAS,CAAC,EAAE,MACvC,YAAa,CACX,CACE,IAAK,KAAW,aAChB,MAAOkH,EAAU,GACnB,EACA,CACE,IAAK,KAAW,QAChB,MAAO,OAAOpzB,EAAM,EAAE,CACxB,CACF,CACF,CAEF,EAEagnK,EAA8B,MAAOp2I,GAAqE,CACrH,GAAI,CAACA,EAAS,MAAM,IAClB,OAGF,MAAM3X,EAAY,KAAW,aAAa2X,CAAQ,EAC5Cq2I,KAAc,MAAkBr2I,CAAQ,EAC9C,GAAI,CAACq2I,EACH,OAEF,KAAM,CAAE,QAAA/6I,GAAS,WAAAR,GAAY,cAAAq/G,GAAe,YAAAsvB,CAAY,EAAI4M,EAAY,MAElE7zI,MAAY,MAAqBxC,CAAQ,EAC/C,GAAI,CAACwC,IAAa,CAACA,GAAU,MAAM,IACjC,OAGF,MAAM8zI,GAAiB,MAAMX,EAC3Br6I,GACA,sBAA8B,oBAA4BjT,EAAU,MAAM,MAAM,GAAG,CAAC,EACpF,CAAE,cAAe,CAAE,MAAO2X,CAAS,CAAE,EACrClF,GACAq/G,GACAsvB,CACF,EAGA,GAAI,CAAC6M,GAAe,QAAU,CAACA,GAAe,KAAMnyI,IAAUA,GAAM,gBAAkB,IAAuB,EAC3G,OAGF,GAAI,CAACmyI,GAAe,KAAMnyI,IAAUA,GAAM,gBAAkB,IAAuB,EAAG,CACpF,KAAM,CAACqxC,GAAkB0gG,EAAoB,EAAIf,KAAsB,KAAamB,EAAc,EAAG,GAAG,EACxGA,GAAe,KAAK9gG,EAAgB,EAEpC,KAAM,CAAC2gG,GAAmB1gG,EAAmB,EAAI0/F,EAC/C3/F,GAAiB,SACjB,KAAa8gG,EAAc,CAC7B,EACAA,GAAe,KAAK7gG,EAAmB,CACzC,CAEA,KAAM,CAAE,YAAA8iC,GAAa,UAAAtE,EAAU,EAAIzxE,GAAU,MAAM,KAE7C8R,GACJ2/D,IAAasE,GACT,CACE,KAAM,SACN,IAAKtE,GACL,MAAOsE,EACT,EACA,OAqBN,MAnBmB,CACjB,KAAM,IAAa,QACnB,OAAAjkE,GACA,QAASgiI,GACT,KAAMt2I,EAAS,MAAM,MACrB,UAAWs2I,GAAeA,GAAe,OAAS,CAAC,EAAE,MACrD,YAAa,CACX,CACE,IAAK,KAAW,aAChB,MAAO9zI,GAAU,MAAM,GACzB,EACA,CACE,IAAK,KAAW,QAEhB,MAAO,UAAO,MAAsBxC,CAAQ,CAAC,CAC/C,CACF,CACF,CAGF,EAEO,SAAS61I,GAAa17J,EAAkBo8J,EAAmBC,EAAqC,CACrG,OAAKA,EAUE,oBAA4Br8J,EAAOq8J,EAAYD,CAAQ,EATxDA,GAAY,eAAuBA,CAAQ,EAAI,IAC1C,CACL,SAAUA,EACV,WAAY,eAAuBA,CAAQ,CAC7C,EAEK,CAAE,SAAU,KAAM,WAAY,GAAK,CAI9C,CAEO,SAASzC,EAA4B3vI,EAAmB,CAC7D,MAAM5H,EAAQ4H,EAAM,MAEpB,OAAKsyI,GAAYl6I,CAAK,GAIQA,EAAM,SAAWA,EAAM,MAE5C,CAAE,GAAG4H,EAAO,MAAO,CAAE,GAAG5H,EAAO,MAAO,GAAM,QAAS,EAAM,CAAE,EAL7D4H,CASX,CAEA,SAASsyI,GAAYl6I,EAA2C,CAC9D,MAAO,SAAUA,GAAS,YAAaA,GAAS,UAAWA,CAC7D,CAEO,SAASm6I,GAAkBn6I,EAAiD,CACjF,MAAO,SAAUA,CACnB,CAEO,SAASo6I,EAAwBxyI,EAAwD,CAC9F,MAAMyyI,EAAgBzyI,EAAM,eAAiBA,EAAM,MAAM,YAAY,IACrE,GAAI,CAACyyI,EACH,OAIF,MAAM/qK,KAAO,KAAiB,EAAE,oBAAoB+qK,CAAa,GAAG,KAMpE,GALI,CAAC/qK,GAKD,IAAC,MAAmCA,CAAI,EAC1C,OAGF,KAAM,CAAE,MAAA0wB,EAAM,EAAI4H,EAGZ0yI,GAAyB,YAAat6I,IAASA,GAAM,UAAY,OAAYA,GAAM,QAAU,GAC7Fu6I,GAAmB,cAAev6I,IAASA,GAAM,YAAc,OAAYA,GAAM,YAAc,UAAY,GAIjH,SAF2C,MAAqD1wB,CAAI,EAC7CgrK,GAAyBC,EAElF,C,yMCz3BA,MAAMC,EAA+B,CACnCC,EACApxB,IAEA,OAAO,QAAQoxB,GAAY,CAAC,CAAC,EAAE,OAC7B,CAAC5tJ,EAAK,CAACjH,EAAMpW,CAAK,IAAM,CACtB,GAAGqd,EACH,CACE,KAAAjH,EACA,MAAApW,EACA,SAAU65I,EAAU,KAAgB,MAAQ,KAAgB,KAC9D,CACF,EACA,CAAC,CACH,EAEIqxB,EAA2BC,GAAqDA,EAAgB,MAEhGC,EAA6BpP,IAChCA,GAAO,CAAC,GAAG,IAAIkP,CAAuB,EAE5BG,EAA4C,CACvD,KAAM,GACN,MAAO,GACP,SAAU,KAAgB,KAC5B,EAGaC,EAAiB,CAAC,iBAAkB,WAAW,EAG/CC,EAAuB,CAClC,CAAE,MAAO,iBAAkB,MAAO,iBAAkB,QAAS,EAAK,EAClE,CAAE,MAAO,YAAa,MAAO,YAAa,QAAS,EAAK,EACxD,CAAE,MAAO,gBAAiB,MAAO,KAAM,CACzC,EAEaC,EAA0B,CACrC,GAAI,GACJ,iBAAkB,GAClB,QAASF,EACT,gBAAiB,CAAC,EAClB,OAAQ,CAAC,EACT,SAAU,GACV,SAAU,GACV,gBAAiB,GACjB,eAAgB,GAChB,mBAAoB,GACpB,oBAAqB,GACrB,kBAAmB,CAAC,EACpB,oBAAqB,CAAC,CACxB,EAIO,SAASG,EAA2BC,EAAc74J,EAAW,IAAkB,CACpF,MAAM84J,KAAY,MAAUD,CAAK,EAC3BE,EAASF,EAAM,QAAU,CAAC,EAEhC,MAAO,CACL,GAAI,GAAG74J,CAAQ,IAAI84J,CAAS,GAC5B,GAAGD,EACH,OAAQE,EAAO,IAAI,CAACF,EAAO95J,IAAU65J,EAA2BC,EAAO,GAAG74J,CAAQ,IAAIjB,CAAK,EAAE,CAAC,CAChG,CACF,CAGO,MAAMi6J,EAAwBH,GAAgD,CACnF,GAAI,CAACA,EACH,OAAOF,EAGT,MAAMn+I,EAAKq+I,EAAM,GAEjB,GAAI,OAAO,KAAKA,CAAK,EAAE,SAAW,EAEhC,MADoB,CAAE,GAAGF,EAAY,GAAAn+I,CAAG,EAI1C,MAAMy+I,EAA4B,CAAC,EACnCJ,EAAM,QAAQ,QAASK,GAAa,CAClC,MAAMC,EAAeH,EAAqBE,CAAQ,EAClDD,EAAW,KAAKE,CAAY,CAC9B,CAAC,EAED,MAAMC,EACJP,EAAM,iBAAiB,IAAK1uI,IAAa,CAAE,KAAMA,EAAQ,CAAC,EAAG,SAAUA,EAAQ,CAAC,EAAG,MAAOA,EAAQ,CAAC,CAAE,EAAE,GAAK,CAAC,EAEzGiuI,EACJS,EAAM,UACF,QAAS1uI,MAEF,MAAoBA,CAAO,EAAE,QAAQ,IAAqB,CAClE,EACA,IAAI,CAAC,CAAE,KAAA5mB,EAAM,SAAA81J,EAAU,MAAAlsK,CAAM,KAAO,CACnC,QAAM,MAAoBoW,CAAI,EAC9B,SAAA81J,EACA,SAAO,MAAoBlsK,CAAK,CAClC,EAAE,GAAK,CAAC,EAEZ,MAAO,CACL,GAAAqtB,EAEA,gBAAiB,CACf,GAAG49I,EACH,GAAGgB,EACH,GAAGjB,EAA6BU,EAAM,MAAO,EAAK,EAClD,GAAGV,EAA6BU,EAAM,SAAU,EAAI,CACtD,EACA,SAAUA,EAAM,UAAY,GAC5B,SAAUA,EAAM,UAAY,GAC5B,iBAAkB,MAAM,QAAQA,EAAM,QAAQ,GAAKA,EAAM,SAAS,OAAS,EAC3E,QAASA,EAAM,UAAY,OAC3B,gBAAiB,CAACA,EAAM,WAAYA,EAAM,eAAgBA,EAAM,eAAe,EAAE,KAAK,OAAO,EAC7F,eAAgBA,EAAM,YAAc,GACpC,mBAAoBA,EAAM,gBAAkB,GAC5C,oBAAqBA,EAAM,iBAAmB,GAC9C,OAAQI,EACR,kBAAmBJ,EAAM,qBAAuB,CAAC,EACjD,oBAAqBA,EAAM,uBAAyB,CAAC,CACvD,CACF,EAGaS,EAAuB,CAClChsK,EACAisK,EACAjsC,IACU,CACV,MAAMz5F,KAAW,MAAkB0lI,EAAY,IAAM,GAAIjsC,CAAS,EAE5D,CACJ,iBAAAksC,EACA,QAAAC,EACA,gBAAAC,EACA,eAAAC,EACA,mBAAAC,EACA,oBAAAC,EACA,SAAA/9H,CACF,EAAIy9H,EAGEO,EAAsB,OAEtBC,EAAWP,EAAmBC,EAAUK,EAGxCE,EADoBN,GAAmBC,EACNA,EAAiBG,EAGlDG,EADwBP,GAAmBE,EACFA,EAAqBE,EAG9DI,EADyBR,GAAmBG,EACDA,EAAsBC,EAGjEK,GAA+CZ,EAAY,iBAC7D,OAAQV,IAAUA,GAAM,MAAQA,GAAM,UAAYA,GAAM,QAAU,MAAQA,GAAM,QAAU,MAAS,EACpG,IAAI,CAAC,CAAE,KAAAt1J,GAAM,SAAA81J,EAAU,MAAAlsK,CAAM,IAAM,CAACoW,GAAM81J,EAAUlsK,CAAK,CAAC,EAEvD4rK,EAASQ,EAAY,QAAQ,IAAKL,IACtCI,EAAqBhsK,EAAwB4rK,GAAU5rC,CAAS,CAClE,EAEM8sC,GAAiB,CACrB,GAAIvmI,GAAY,CAAC,EACjB,SAAU0lI,EAAY,SACtB,SAAAQ,EACA,gBAAAI,GACA,MAAO,OACP,SAAU,OACV,WAAAH,EACA,eAAAC,EACA,gBAAAC,EACA,OAAAnB,EACA,oBAAqBQ,EAAY,kBACjC,sBAAuBA,EAAY,oBACnC,SAAAz9H,CACF,EAKA,OAAIxuC,IAA2B,MAE7B8sK,GAAQ,SAAWb,EAAY,iBAAiB,IAAI,IAAa,EACjEa,GAAQ,gBAAkB,SAE1BA,GAAQ,mBAAkB,MAAkBA,EAAO,EACnDA,GAAQ,SAAW,QAGjBb,EAAY,WACda,GAAQ,SAAWb,EAAY,UAG1Ba,EACT,EAEaC,EAA2BzvI,IAA0C,CAChF,MAAOA,EACP,MAAOA,CACT,GAEa0vI,EAA6BnR,IACvCA,GAAO,CAAC,GAAG,IAAIkR,CAAuB,EAE5BE,EACXC,GAEKA,EAIEjC,EAA0BiC,CAAgB,EAHxC,CAAC,EAML,SAASC,EAAsB1jD,EAAmB,CACvD,MAAI,CAACA,GAAYA,EAAS,SAAW,EAC5B,MAGF,MAA0BA,CAAQ,GAAK,sDAChD,CAGO,MAAM2jD,EAA0BtC,GAC9BA,EAAS,IAAKjuI,GAAY,CAC/B,KAAM,CAAC5mB,EAAM81J,EAAUlsK,CAAK,EAAIg9B,EAChC,MAAO,GAAG5mB,CAAI,GAAG81J,CAAQ,GAAGlsK,CAAK,EACnC,CAAC,EAGUwtK,EAA0B,CAACC,EAAwBC,EAAgB,KAAO,CACrF,GAAID,EAAe,SAAW,EAC5B,MAAO,GAGT,MAAME,EAAsBL,EAAsBG,CAAc,EAC1DG,EAAqBN,EAAsBI,CAAa,EAE9D,GAAIC,IAAwB,GAC1B,OAAOA,EAGT,GAAIC,IAAuB,GACzB,OAAOA,EAGT,MAAMC,KAAiB,MAA4BJ,CAAc,EAC3DK,KAAgB,MAA4BJ,CAAa,EAI/D,OAFuCI,IAAkB,GAAKD,EAAiBC,EAEvC,8DAAgE,EAC1G,C,2EC5PA,SAASC,EAAgB37G,EAAwB/iB,EAA0B,CACzE,MAAM2+H,EAAoB,CAAC,EAC3B,OAAA57G,EAAM,QAASC,GAAS,CACtB27G,EAAQ,KAAK37G,EAAK,MAAOA,EAAK,IAAM,CAAC,CACvC,CAAC,EACG27G,EAAQ,CAAC,IAAM,GACjBA,EAAQ,QAAQ,CAAC,EAEfA,EAAQA,EAAQ,OAAS,CAAC,IAAM3+H,GAClC2+H,EAAQ,KAAK3+H,CAAM,EAEd2+H,CACT,CAEO,MAAMC,EAAsBjlK,GAAiB,CAClD,GAAI,CAAE,eAAAklK,EAAgB,KAAA7/J,EAAM,mBAAA8/J,CAAmB,EAAInlK,EAEnD,GAAI,CAACklK,GAAgB,OACnB,OAAO,KAGT,IAAI9kK,EAAW,CAAC,EACZ4kK,EAAUD,EAAgBG,EAAgB7/J,EAAK,MAAM,EACrD+/J,EAAcF,EAAe,CAAC,EAAE,QAAU,EAE9C,QAASpnK,EAAI,EAAGA,EAAIknK,EAAQ,OAAQlnK,IAAK,CACvC,IAAIw6G,EAAQ0sD,EAAQlnK,EAAI,CAAC,EACrByhH,EAAMylD,EAAQlnK,CAAC,EAEnBsC,EAAS,QACP,iBACEglK,EAAc,OAAS,OACvB,CACE,IAAKtnK,EAAI,EACT,UAAWsnK,EAAcD,EAAqB,MAChD,EACA9/J,EAAK,UAAUizG,EAAOiH,CAAG,CAC3B,CACF,EACA6lD,EAAc,CAACA,CACjB,CAEA,SAAO,OAAC,OAAK,SAAAhlK,CAAA,CAAS,CACxB,C,4JCnDO,MAAMilK,EAAe5rJ,GAAuCA,EAAM,QAAQ,MACpE6rJ,EAAqB7rJ,GAAuCA,EAAM,QAElE8rJ,EAA6B9rJ,GAAuCA,EAAM,QAAQ,oBAElF+rJ,KAAqB,MAGhCH,EAAa,OAAO,OAAO,EAEhBI,KAAU,MAAeD,EAAqBE,GAAUA,EAAM,OAAS,CAAC,EACxEC,KAAwB,MAAeH,EAAqBE,GACvEA,EAAM,KAAM3iG,GAASA,EAAK,CAAC,EAAE,8BAAgC,MAAS,CACxE,EAEa6iG,EAAsB5/I,MACjC,MAAeq/I,EAAcK,GACpB,OAAO,KAAKA,CAAK,EAAE,CAAC,IAAM1/I,CAClC,EAEU6/I,EAA0B7/I,MAAsB,MAAeq/I,EAAcK,GAAUA,EAAM1/I,CAAS,CAAC,EAEvG8/I,KAA2B,MAAeR,EAAoB7rJ,GAAUA,EAAM,wBAAwB,EAEtGssJ,KAAsB,MAAeP,EAAqBE,GAAU,CAC/E,MAAMM,EAAeN,EAClB,IAAI,CAAC,CAAC1/I,EAAW+8C,CAAI,IAAM,CAC1B,MAAMkjG,EAAiB,CAACljG,GAAM,oBAAoB,OAAO,CAAC,EACpDmjG,EAAmBnjG,GAAM,QAAQ,IAAKxzC,GAAMA,EAAE,UAAU,GAAK,CAAC,EAC9D8lI,EAAc,CAAC,GAAG4Q,EAAgB,GAAGC,CAAgB,EAAE,OAC1DngJ,GAA4C,CAAC,CAACA,CACjD,EAEA,GAAI,EAAAsvI,IAAgB,QAAaA,EAAY,SAAW,GAGtD,MAAO,CACL,UAAArvI,EACA,eAAa,UAAOqvI,EAAcnoG,GAAOA,EAAG,GAAG,CACjD,CAEJ,CAAC,EACA,OAAQ6V,GAAsE,CAAC,CAACA,CAAI,EAIjFojG,KAFoB,aAAO,WAAQH,EAAa,IAAKjjG,GAASA,EAAK,WAAW,CAAC,EAAI7V,GAAOA,EAAG,GAAG,EAE7D,IAAKA,GAAO,CACnD,IAAIk5G,EAAuB,CAAC,EAC5B,OAAAJ,EAAa,QAASK,GAAQ,CACxBA,EAAI,YAAY,KAAMC,GAAUA,EAAM,MAAQp5G,EAAG,GAAG,GACtDk5G,EAAW,KAAKC,EAAI,SAAS,CAEjC,CAAC,EACM,CACL,WAAYn5G,EACZ,WAAAk5G,CACF,CACF,CAAC,EAED,MAAO,CAAE,YAAaJ,EAAc,YAAaG,CAAe,CAClE,CAAC,C,iDC7DM,SAASI,EAAe7nJ,EAAa8nJ,EAAiBlP,EAAiB,CAiB9E,C,kICVO,SAASmP,EAAuBzmK,EAA4B,CACjE,KAAM,CAAE,UAAA2kC,EAAW,KAAAqC,EAAM,MAAAvoC,CAAM,EAAIuB,EAC7B0mK,EAAe,IAAM,CACzB,IAAO,KAAK,IAAa,cAAc1/H,CAAI,EAAG,QAAQ,EACtDrC,EAAU,CACZ,EACMgiI,EAAmB,IAAM,KAAgB,KAAK3/H,CAAI,EAExD,SACE,QAAC,IAAK,CAAC,MAAAvoC,EAAc,OAAM,GAAC,UAAAkmC,EAC1B,oBAAC,IAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,mBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,2CAA2C,wEAE1D,EACF,EACF,KACA,QAAC,IAAM,UAAN,CACC,oBAAC,KAAM,CAAC,QAASA,EAAW,KAAK,UAAU,QAAQ,YACjD,mBAAC,KAAK,CAAC,QAAQ,0CAA0C,kBAAM,EACjE,KACA,OAAC,KAAM,CAAC,KAAK,SAAS,QAAQ,YAAY,QAAS+hI,EAAc,KAAK,oBACpE,mBAAC,KAAK,CAAC,QAAQ,mDAAmD,2BAAe,EACnF,KACA,OAAC,KAAM,CAAC,KAAK,SAAS,QAAQ,UAAU,QAASC,EAAkB,KAAK,OACtE,mBAAC,KAAK,CAAC,QAAQ,wCAAwC,gBAAI,EAC7D,GACF,GACF,CAEJ,C,2ECjCO,SAASpiI,EAAsBvkC,EAAoE,CACxG,KAAM,CAAE,SAAAI,EAAU,GAAGyF,CAAK,EAAI7F,EAC9B,SAAO,OAAC,IAAc,SAAd,CAAuB,MAAO6F,EAAO,SAAAzF,CAAA,CAAS,CACxD,C,4GCHO,MAAMwmK,KAAO,cAAqC,CAAC,CAAE,KAAAv9J,EAAM,SAAAjJ,EAAU,GAAGyF,CAAK,EAAGjN,IAAQ,CAC7F,MAAMiuK,EAAW,IAAa,iBAAiB,KAAS,YAAYx9J,GAAQ,EAAE,CAAC,EAE/E,SACE,OAAC,OAAU,CAAC,IAAAzQ,EAAU,GAAIiuK,EAAW,GAAGhhK,EACrC,SAAAzF,CAAA,CACH,CAEJ,CAAC,EAEDwmK,EAAK,YAAc,M,sFCfZ,SAASE,GAGd,CACA,KAAM,CAAE,OAAAtlB,CAAO,KAAI,MAAY,EACzBx5F,KAAc,WAAQ,IAAM,IAAI,gBAAgBw5F,CAAM,EAAG,CAACA,CAAM,CAAC,EAEjE7uF,KAAS,eAAY,CAACo0G,EAA6DhtK,IAAsB,CAC7G,KAAgB,QAAQgtK,EAAchtK,CAAO,CAC/C,EAAG,CAAC,CAAC,EAEL,MAAO,CAACiuD,EAAa2K,CAAM,CAC7B,C,4ICRA,MAAMq0G,EAAiBhnK,GAMjB,CACJ,KAAM,CAAE,MAAAhJ,EAAO,SAAAoJ,EAAU,QAAA6mK,EAAS,UAAApyJ,EAAW,aAAAqyJ,EAAc,GAAGv/J,CAAU,EAAI3H,EAEtEmnK,KAAa,UAAmB,IAAI,EACpCC,KAAS,UAAsB,IAAI,EACnCrmK,KAAS,MAAWsmK,CAAa,EAEvC,SAASC,GAAkB,CACrBF,EAAO,UAAY,MACrB,qBAAqBA,EAAO,OAAO,CAEvC,CAEA,SAASG,GAAY,CACnBH,EAAO,QAAU,sBAAsB,IAAM,CAC3CD,EAAW,SAAS,WAAW,CACjC,CAAC,CACH,CAEA,sBAAU,KACJF,EACFM,EAAU,EAEVD,EAAgB,EAGXA,GACN,CAACtwK,EAAOiwK,CAAO,CAAC,KAGjB,OAAC,KACC,iBAAkBlmK,EAAO,QACzB,UAAA8T,EACA,QAASqyJ,GAAgBlwK,EACzB,kBAAmB,CAAE,UAAW,MAAO,EACvC,IAAKmwK,EACL,QAAAF,EACC,GAAGt/J,EAEH,SAAAvH,CAAA,CACH,CAEJ,EAEMinK,EAAiBloK,IACd,CACL,WAAS,OAAI,CACX,SAAU,WACV,QAAS,QACT,WAAY,UACZ,SAAUA,EAAM,WAAW,UAAU,SACrC,QAAS,GACT,QAAS,EACT,OAAQA,EAAM,OAAO,OACvB,CAAC,CACH,GAGF,EAAe6nK,E,eCrDR,MAAMQ,EAAc,CAAC,CAC1B,IAAAjoK,EACA,IAAAC,EACA,SAAA5I,EACA,cAAAqV,EACA,YAAAvN,EAAc,aACd,QAAAwN,EACA,KAAArM,EACA,oBAAA4nK,EACA,MAAAzwK,EACA,qBAAA0wK,EAAuB,EACzB,IAAwB,CACtB,MAAMz/J,KAAe,eAClB1L,GAAyB,CAExB3F,IADc,OAAO2F,GAAM,SAAW,CAACA,EAAGA,CAAC,EAAIA,CAC/B,CAClB,EACA,CAAC3F,CAAQ,CACX,EAEMoW,KAAuB,eAC1BzQ,GAAyB,CAExB0P,IADc,OAAO1P,GAAM,SAAW,CAACA,EAAGA,CAAC,EAAIA,CAC1B,CACvB,EACA,CAAC0P,CAAa,CAChB,EAEMO,EAAe9N,IAAgB,aAC/BqC,KAAS,MAAW,IAAWyL,CAAY,EAC3CI,KAAsB,KAAE,iDAAkD,oCAAoC,EAE9G+6J,EAA+C,CAAC7iK,EAAM8iK,OAExD,OAAC,GACC,MAAOA,EAAY,MACnB,QAASF,GAAwBE,EAAY,SAC7C,aAAcH,EAAsB,IAAMA,EAAoBG,EAAY,KAAK,EAAI,OACnF,UAAWp7J,EAAe,MAAQ,QAEjC,SAAA1H,CAAA,CACH,EAIJ,SACE,QAAC,OAAI,aAAW,MAAG/D,EAAO,UAAWA,EAAO,MAAM,EAEhD,oBAAC,SAAM,CAAC,OAAQA,EAAO,QAAS,KAChC,OAAC,KACC,IAAAxB,EACA,IAAAC,EACA,KAAAK,EACA,aAAc7I,EACd,MAAO,GACP,SAAUiR,EACV,iBAAkB+E,EAClB,SAAU,CAACR,EACX,QAAAN,EACA,aAAcy7J,EACd,mBAAoB/6J,CAAA,CACtB,GACF,CAEJ,EAEA46J,EAAY,YAAc,a,2EChF1B,MAAMK,KAAY,aAAU,CAC1B,KAAM,CACJ,QAAS,EACT,gBAAiB,QACjB,UAAW,aACb,EAEA,OAAQ,CACN,QAAS,EACT,gBAAiB,QACjB,UAAW,WACb,CACF,CAAC,EAEKC,KAAa,aAAU,CAC3B,KAAM,CACJ,QAAS,EACT,gBAAiB,QACjB,UAAW,WACb,EAEA,OAAQ,CACN,QAAS,EACT,gBAAiB,QACjB,UAAW,aACb,CACF,CAAC,EAEKC,KAAc,aAAU,CAC5B,KAAM,CACJ,QAAS,EACT,gBAAiB,UACjB,UAAW,aACb,EAEA,OAAQ,CACN,QAAS,EACT,gBAAiB,UACjB,UAAW,WACb,CACF,CAAC,EAEKC,KAAe,aAAU,CAC7B,KAAM,CACJ,QAAS,EACT,gBAAiB,UACjB,UAAW,WACb,EAEA,OAAQ,CACN,QAAS,EACT,gBAAiB,UACjB,UAAW,aACb,CACF,CAAC,EAEYC,EAAqB9oK,GAAyB,CACzD,MAAM+oK,KAAW,MAAY,aAAa,EAC1C,MAAO,CACL,YAAU,OAAI,CACZ,yBAA0B,CACxB,SAAU,WAEV,OAAQ,KAER,WAAY,CACV,QAAS,MACX,CACF,EACA,eAAgB,CACd,UAAW,CACT,SAAU,SACV,WAAY/oK,EAAM,OAAO,WAAW,SACpC,OAAQ,OACR,aAAcA,EAAM,MAAM,OAAO,QACjC,UAAWA,EAAM,QAAQ,GACzB,WAAY,SAEZ,sCAAuC,CACrC,kBAAmB,OACnB,kBAAmB,OACnB,gBAAiB,MACjB,QAAS,EACT,wBAAyB,oCACzB,mBAAoB,QACtB,EAEA,2IACE,CACE,eAAgB,CACd,cAAe0oK,EACf,mBAAoB,SACtB,EAEA,YAAa,CACX,cAAeE,EACf,mBAAoB,SACtB,CACF,EAEF,mBAAoB,CAClB,kBAAmB,OACnB,kBAAmB,OACnB,gBAAiB,MACjB,QAAS,EACT,wBAAyB,sCACzB,mBAAoB,SAEpB,sDAAuD,CACrD,eAAgB,CACd,cAAeD,EACf,mBAAoB,SACtB,EAEA,YAAa,CACX,cAAeE,EACf,mBAAoB,SACtB,CACF,CACF,CACF,EAEA,SAAU,CACR,QAAS,eACT,SAAU,OACV,OAAQ,QACR,UAAW,OACX,OAAQ,EACR,QAAS7oK,EAAM,QAAQ,EAAG,EAC1B,YAAa,aAAaA,EAAM,OAAO,OAAO,IAAI,GAClD,SAAU,OAEV,eAAgB,CACd,YAAa,CACf,EAEA,SAAU,CACR,OAAQA,EAAM,QAAQ,CAAC,EACvB,WAAYA,EAAM,QAAQ,CAAC,EAC3B,QAASA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EACjC,aAAcA,EAAM,MAAM,OAAO,QACjC,OAAQ,UACR,WAAY,SACZ,SAAU,SACV,aAAc,WACd,WAAY,gBACZ,SAAU,WAEV,UAAW,CACT,WAAYA,EAAM,OAAO,OAAO,KAClC,EAEA,aAAc,CACZ,OAAQ,cACR,MAAOA,EAAM,OAAO,KAAK,SAEzB,UAAW,CACT,WAAY,aACd,EAEA,UAAW,CACT,SAAU,WACV,MAAO,OACP,QAAS,YACT,MAAOA,EAAM,OAAO,KAAK,SACzB,UAAW,QACb,CACF,EAEA,WAAY,CACV,MAAOA,EAAM,OAAO,KAAK,YACzB,WAAYA,EAAM,OAAO,WAAW,UAEpC,UAAW,CACT,WAAYA,EAAM,OAAO,OAAO,KAClC,CACF,EAEA,WAAY,CACV,SAAU,WAEV,UAAW,CACT,WAAYA,EAAM,OAAO,KAAK,QAC9B,QAAS,KACT,OAAQA,EAAM,QAAQ,CAAC,EACvB,KAAM,OAAO+oK,CAAQ,IACrB,SAAU,YACV,SAAU,WACV,MAAO,EACP,IAAK/oK,EAAM,QAAQ,EAAG,EACtB,MAAOA,EAAM,QAAQ,CAAC,CACxB,CACF,CACF,CACF,CACF,CACF,CAAC,CACH,CACF,C,gGCjMO,SAASgpK,EAAmB,CAAE,YAAAphI,EAAa,KAAA1hC,EAAM,IAAAoqB,CAAI,EAAU,CACpE,MAAM1uB,KAAS,MAAWuD,CAAS,EACnC,SACE,QAAC,IAAI,CAAC,SAAQ,GAAC,UAAWvD,EAAO,KAAM,KAAM0uB,EAC3C,oBAAC,IAAK,QAAL,CAAc,SAAApqB,CAAA,CAAK,KACpB,OAAC,IAAK,YAAL,CAAiB,UAAWtE,EAAO,YAAc,SAAAgmC,CAAA,CAAY,GAChE,CAEJ,CAEA,MAAMziC,EAAanF,IAA0B,CAC3C,QAAM,OAAI,CACR,iBAAkB,WACpB,CAAC,EAGD,eAAa,OAAI,CACf,gBAAiB,EACjB,gBAAiB,WACjB,QAAS,cACT,SAAU,QACZ,CAAC,CACH,E,6FCRO,MAAMipK,EAA6E,IAAM,CAC9F,MAAMC,EAAe,CACnB,QAAM,KAAE,4CAA6C,cAAc,EACnE,kBAAgB,KACd,+DACA,0CACF,EACA,WAAY,QACd,EAEA,MAAO,CACL,aAAc,CACZ,QAAM,KAAE,wCAAyC,UAAU,EAC3D,kBAAgB,KACd,2DACA,mLACF,EACA,WAAY,SACZ,KAAM,MACR,EACA,QAASA,EACT,iBAAkBA,CACpB,CACF,EAKO,SAASC,EAA6Bt1H,EAAuD,CAClG,KAAM,CAAE,cAAAu1H,EAAe,GAAG1iK,CAAK,EAAImtC,EAG7Bw1H,EAAuE,CAC3E,OAAK,KAAE,6CAA8C,gBAAgB,EACrE,eAAa,KAAE,2CAA4C,aAAa,EACxE,UAAQ,KAAE,sCAAuC,QAAQ,CAC3D,EAGMC,EAAgF,CACpF,SAAO,KAAE,oCAAqC,MAAM,EACpD,iBAAe,KAAE,6CAA8C,YAAY,EAC3E,QAAM,KAAE,sDAAuD,2BAA2B,EAC1F,yBAAuB,KAAE,mDAAoD,uBAAuB,EACpG,iBAAe,KAAE,2CAA4C,0BAA0B,EACvF,kBAAgB,KAAE,8CAA+C,kCAAkC,EACnG,aAAW,KAAE,sCAAuC,cAAc,EAClE,cAAY,KAAE,0CAA2C,YAAY,EACrE,aAAW,KAAE,yCAA0C,iBAAiB,EACxE,mBAAiB,KAAE,+CAAgD,qBAAqB,CAC1F,EAEMC,EAAoB,OAAO,QAAQ7iK,CAAI,EAAE,OAAO,CAACwO,EAAK,CAACqK,EAAK1nB,CAAK,IAAM,CAG3E,MAAM2xK,EAA2BH,EADT9pJ,CACuC,GAAKA,EACpE,MAAO,CACL,GAAGrK,EACH,CAACs0J,CAAwB,EAAG3xK,CAC9B,CACF,EAAG,CAAC,CAAC,EAEC4xK,EAAwB,OAAO,QAAQL,CAAa,EAAE,OAAO,CAACl0J,EAAK,CAACqK,EAAK1nB,CAAK,IAAM,CAExF,MAAM6xK,EAAiBnqJ,EAEvB,GAAI,IAA+B,SAASmqJ,CAAc,EACxD,OAAOx0J,EAGT,MAAMs0J,EAA2BF,EAA2BI,CAAc,GAAKnqJ,EAC/E,MAAO,CACL,GAAGrK,EACH,CAACs0J,CAAwB,EAAG3xK,CAC9B,CACF,EAAG,CAAC,CAAC,EAEL,MAAO,CACL,GAAG0xK,EACH,GAAGE,CACL,CACF,CAMO,SAASE,EAA0Bj9H,EAAoE,CAC5G,MAAM4D,KAAU,KAAE,uCAAwC,SAAS,EAC7Ds5H,EAAkBX,EAAyB,EAC3Cx8H,GAAa,IAAM,CACvB,MAAMo9H,EAAYn9H,GAAS,cAAc,WACnCoJ,EAAM+zH,GAAW,IACjB57J,EAAO47J,GAAW,KAExB,OAAKA,EAGD/zH,GAAO8zH,EAAgB9zH,CAAG,EACrB8zH,EAAgB9zH,CAAG,EAAE,KAE1B7nC,IAGG6nC,KAAM,KAAE,uCAAwC,kBAAmB,CAAE,IAAAA,CAAI,CAAC,EAAIxF,GAR5EA,CASX,GAAG,EAEH,MAAO,CACL,UAAW5D,EAAQ,cAAc,SAAW4D,EAC5C,UAAA7D,EACA,QAASC,EAAQ,cAAc,SAAW4D,CAC5C,CACF,C,6IC5HO,MAAMw5H,EAAoB,CAAC,CAAE,MAAAjyK,EAAO,SAAAJ,EAAU,KAAAmV,EAAM,GAAAsY,CAAG,IAAa,CAEzE,MAAM48D,KAAW,UAAwB,IAAI,EAGvC,CAAE,SAAAwQ,CAAS,EAAI1lF,EACfxM,EAAMkyF,GAAU,KAAO,EACvBjyF,EAAMiyF,GAAU,KAAO,IACvB5xF,EAAO4xF,GAAU,KACjBrlF,EAAQqlF,GAAU,OAAS,CAAE,CAAClyF,CAAG,EAAGA,EAAK,CAACC,CAAG,EAAGA,CAAI,EACpD6M,EAAWolF,GAAU,SACrBtlF,EAAqBslF,GAAU,mBAG/By3E,EAAoB,GACpB18J,EAAe,GACfrN,KAAQ,MAAU,EAClB,CAACuN,EAAaC,CAAc,KAAI,YAAiB3V,GAASuI,CAAG,EAC7D,CAAC+L,EAAYC,CAAa,KAAI,YAAiB29J,CAAiB,KAGtE,aAAU,IAAM,CACVlyK,GAAS,MAAQA,IAAU0V,GAC7BC,EAAe3V,CAAK,CAExB,EAAG,CAACA,EAAO0V,CAAW,CAAC,KAGvB,aAAU,IAAM,CACd,MAAMy8J,EAAe,iBAAiBloF,EAAS,OAAQ,EACjDmoF,EAAaD,EAAa,iBAAiB,aAAa,GAAK,SAC7DE,EAAWF,EAAa,iBAAiB,WAAW,GAAK,OACzDG,EAAaH,EAAa,iBAAiB,aAAa,GAAK,QAC7DI,EAAyB,IACzBC,EAAe,EACfC,GAAe,EACfC,EACJ,KAAK,KAAKlqK,GAAOK,GAAQ,IAAI,SAAS,EAAE,QAASL,GAAOK,GAAQ,IAAI,SAAS,EAAE,MAAM,EAAI2pK,EACrFG,GAAYJ,EAAuB,OAAOG,CAAS,EACnDE,GAAsBC,EAAaF,GAAW,GAAGP,CAAU,IAAIC,CAAQ,IAAIC,CAAU,EAAE,EACzFM,IACFr+J,EAAcq+J,GAAsBH,GAAe,CAAC,CAExD,EAAG,CAACjqK,EAAKK,CAAI,CAAC,EAEd,MAAMgN,KAAiB,eACpBtQ,GAAyB,CACxB,MAAMvF,EAAQ,OAAOuF,GAAM,SAAWA,EAAIA,EAAE,CAAC,EAC7CoQ,EAAe3V,CAAK,EAEhBJ,GACFA,EAASI,CAAK,CAElB,EACA,CAAC2V,EAAgB/V,CAAQ,CAC3B,EAEMkW,KAAsB,eACzB9V,GAAmB,CAClB,IAAIuF,EAAIvF,GAEJ,OAAO,MAAMuF,CAAC,GAAK,CAACA,KACtBA,EAAI,GAGNoQ,EAAepQ,CAAC,EAEZ3F,GACFA,EAAS2F,CAAC,CAEd,EACA,CAAC3F,CAAQ,CACX,EAGMmK,KAAS,KAAgB5B,EAAOqN,EAAc,EAAQJ,CAAM,EAC5D09J,EAAeC,EAAgB5qK,EAAOmM,CAAU,EAChD2B,EAAyBT,EAA8C,CAAC,EAAhC,CAACzL,EAAO,mBAAmB,EAEzE,SACE,QAAC,OAAI,aAAW,MAAGA,EAAO,UAAWA,EAAO,MAAM,EAEhD,oBAAC,SAAM,CAAC,OAAQA,EAAO,OAAQ,KAC/B,QAAC,OAAI,aAAW,MAAGA,EAAO,YAAa,GAAGkM,CAAqB,EAC7D,oBAAC,KACC,IAAA1N,EACA,IAAAC,EACA,KAAAK,EACA,aAAc7I,EACd,MAAO0V,EACP,SAAUG,EACV,SAAU,CAACL,EACX,QAAS,GACT,mBAAAL,EACA,MAAAC,EACA,SAAAC,CAAA,CACF,KACA,OAAC,QAAK,UAAWy9J,EAAa,mBAAoB,IAAK7oF,EACrD,mBAAC,IAAW,CAAC,GAAA58D,EAAQ,MAAO3X,EAAa,SAAUI,EAAqB,IAAAtN,EAAU,IAAAD,EAAU,KAAAM,CAAA,CAAY,EAC1G,GACF,GACF,CAEJ,EAGA,SAASgqK,EAAaxkK,EAAc2kK,EAA6B,CAE/D,MAAMh2J,EADS,SAAS,cAAc,QAAQ,EACvB,WAAW,IAAI,EACtC,OAAIA,GACFA,EAAQ,KAAOg2J,EACCh2J,EAAQ,YAAY3O,CAAI,EACzB,OAEV,IACT,CAEA,MAAM0kK,EAAkB,CAAC5qK,EAAsBZ,KACtC,CACL,sBAAoB,OAAI,CACtB,WAAYY,EAAM,QAAQ,CAAC,EAC3B,UAAW,OACX,SAAUZ,EACV,SAAUA,EACV,SAAU,UACV,MAAO,MACT,CAAC,CACH,E,iDC1IF,SAAS0rK,EAAU5kK,EAAc,CAC/B,IAAIC,EAASD,EAAK,OAASA,EAAK,SAAS,EAAE,OAC3C,GAAIC,EAAQ,CACV,IAAI4kK,EAAS7kK,EAAK,CAAC,EACnB,KAAO,EAAEC,GACP4kK,GAAU7kK,EAAK,CAAC,EAElB,OAAO6kK,CACT,CACA,MAAO,EACT,CAEO,SAASC,GAAwB,CACtC,MAAO,CACL,UAAUrmK,EAAOkhB,EAAQjP,EAAM,CAC7B,MAAM/e,EAAQguB,EAAO,MAErB,GAAIhuB,EAAM,UAAU,WAClB,OAAO+e,EAAK,EAGd,GAAIjS,EAAM,MAAQ,QAAS,CACzBA,EAAM,eAAe,EAErB,KAAM,CAAE,WAAAsmK,CAAW,EAAIpzK,EACjBqzK,EAAkBD,EAAW,KAC7BF,EAASD,EAAUI,CAAe,EAExC,OAAOrlJ,EAAO,WAAW,EAAE,WAAWklJ,CAAM,EAAE,MAAM,CACtD,CAEA,OAAOn0J,EAAK,CACd,CACF,CACF,C,2MCCO,MAAMu0J,EAAqD,CAChE,KAAM,CAAC,CACT,EAaal4E,EAA+D,CAC1E,QAAS,GACT,IAAK,CAAC,CACR,EAeam4E,EAA2D,CACtE,KAAM,CAAC,CACT,EAkDaC,EAAmD,CAC9D,QAAS,EACT,OAAQ,GACR,KAAM,EACR,EAqFaC,EAA+C,CAC1D,iBAAkB,GAClB,WAAY,GACZ,MAAO,GACP,QAAS,CAAC,EACV,YAAa,GACb,cAAe,CAAC,CAClB,EA0BO,IAAKlhG,GAAAA,IACVA,EAAAA,EAAA,MAAQ,CAAC,EAAT,QACAA,EAAAA,EAAA,gBAAkB,CAAC,EAAnB,kBACAA,EAAAA,EAAA,mBAAqB,CAAC,EAAtB,qBAHUA,IAAAA,GAAA,IAUAE,GAAAA,IACVA,EAAAA,EAAA,SAAW,CAAC,EAAZ,WACAA,EAAAA,EAAA,UAAY,CAAC,EAAb,YACAA,EAAAA,EAAA,aAAe,CAAC,EAAhB,eACAA,EAAAA,EAAA,eAAiB,CAAC,EAAlB,iBAJUA,IAAAA,GAAA,IAoBAD,GAAAA,IACVA,EAAAA,EAAA,gBAAkB,CAAC,EAAnB,kBACAA,EAAAA,EAAA,+BAAiC,CAAC,EAAlC,iCACAA,EAAAA,EAAA,gCAAkC,CAAC,EAAnC,kCACAA,EAAAA,EAAA,iBAAmB,CAAC,EAApB,mBACAA,EAAAA,EAAA,SAAW,CAAC,EAAZ,WACAA,EAAAA,EAAA,WAAa,CAAC,EAAd,aACAA,EAAAA,EAAA,YAAc,CAAC,EAAf,cACAA,EAAAA,EAAA,aAAe,CAAC,EAAhB,eACAA,EAAAA,EAAA,cAAgB,CAAC,EAAjB,gBATUA,IAAAA,GAAA,IA4EL,MAAMstB,EAA+C,CAC1D,WAAY,GACZ,YAAa,GACb,SAAU,GACV,KAAM,CAAC,EACP,YAAa,EACf,EAwCavC,EAA6C,CACxD,QAAS,CAAC,EACV,YAAa,CAAC,CAChB,EAmBaE,EAAmD,CAC9D,QAAS,CAAC,EACV,YAAa,CAAC,CAChB,EA+BaJ,EAAiC,CAC5C,UAAW,CAAC,CACd,EAoCO,IAAKq2E,GAAAA,IACVA,EAAA,eAAiB,kBACjBA,EAAA,iBAAmB,oBACnBA,EAAA,gBAAkB,mBAClBA,EAAA,iBAAmB,oBACnBA,EAAA,iBAAmB,oBACnBA,EAAA,kBAAoB,qBACpBA,EAAA,iBAAmB,oBACnBA,EAAA,eAAiB,kBACjBA,EAAA,eAAiB,kBACjBA,EAAA,eAAiB,kBACjBA,EAAA,MAAQ,QACRA,EAAA,eAAiB,kBACjBA,EAAA,qBAAuB,0BACvBA,EAAA,OAAS,SACTA,EAAA,WAAa,aAfHA,IAAAA,GAAA,IAmEL,MAAMC,EAAmC,CAC9C,EAAG,EACH,EAAG,GACH,EAAG,EACH,EAAG,CACL,EAqBO,IAAKC,GAAAA,IACVA,EAAA,SAAW,WACXA,EAAA,WAAa,aAFHA,IAAAA,GAAA,IAmBL,MAAM72E,EAAqD,CAChE,MAAO,CAAC,CACV,EAcO,IAAK6zD,GAAAA,IACVA,EAAA,YAAc,QACdA,EAAA,YAAc,QACdA,EAAA,aAAe,UACfA,EAAA,YAAc,QAJJA,IAAAA,GAAA,IAuFAC,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,WAAa,WACbA,EAAA,KAAO,OANGA,IAAAA,GAAA,IA4FL,MAAMgjB,EAAqD,CAChE,OAAQ,GACR,aAAc,CAAC,EACf,kBAAmB,CAAC,KAAM,MAAO,MAAO,KAAM,KAAM,MAAO,MAAO,KAAM,KAAM,IAAI,CACpF,EAOO,IAAKC,GAAAA,IACVA,EAAAA,EAAA,UAAY,CAAC,EAAb,YACAA,EAAAA,EAAA,IAAM,CAAC,EAAP,MACAA,EAAAA,EAAA,QAAU,CAAC,EAAX,UAHUA,IAAAA,GAAA,IAML,MAAMz4E,EAAkD,EA8HlD04E,EAA+B,CAC1C,MAAO,CAAC,EACR,gBAAiB,IACjB,QAAS,CAAC,EACV,gBAAiB,CAAC,EAClB,YAAa,EACf,EAwBa13E,EAAuD,CAClE,UAAW,CAAC,CACd,EAiCaH,EAA+C,CAC1D,GAAI,EACN,EAgGaI,EAA2C,CACtD,QAAS,CAAC,EACV,MAAO,CAAC,EACR,SAAU,CAAC,CACb,EAwCa03E,EAAqC,CAChD,UAAW,GACX,OAAQ,CAAC,CACX,EAwKaC,EAAuC,CAClD,SAAU,GACV,qBAAsB,EACtB,aAAc,EACd,MAAO,CAAC,EACR,OAAQ,CAAC,EACT,cAAe,GACf,KAAM,CAAC,EACP,SAAU,SACZ,C,6JC1xCO,MAAMvmK,KAAS,cACpB,CAAC,CAAE,MAAA1N,EAAO,QAAAiN,EAAS,SAAArN,EAAU,GAAAytB,EAAI,MAAAxjB,EAAO,SAAAqD,EAAU,QAAAoD,EAAU,GAAO,GAAGnB,CAAW,EAAGvN,IAAQ,CACtFqL,MACF,KAAmB,SAAU,eAAgB,OAAO,EAGtD,MAAMlD,KAAS,MAAWmqK,CAAe,EACnCC,KAAc,UAAO9mJ,MAAU,YAAS,SAAS,CAAC,EAExD,SACE,QAAC,OAAI,aAAW,MAAGtjB,EAAO,OAAQuG,GAAWvG,EAAO,OAAO,EACzD,oBAAC,SACC,KAAK,WACL,KAAK,SACL,SAAAmD,EACA,QAASlN,EACT,SAAW8M,GAAU,CACnB,CAACI,GAAYtN,IAAWkN,CAAK,CAC/B,EACA,GAAIqnK,EAAY,QACf,GAAGhlK,EACJ,IAAAvN,CAAA,CACF,KACA,OAAC,SAAM,QAASuyK,EAAY,QAAS,aAAYtqK,EAC/C,mBAAC,IAAI,CAAC,KAAK,QAAQ,KAAK,IAAK,GAC/B,GACF,CAEJ,CACF,EAEA6D,EAAO,YAAc,SASd,MAAM0mK,KAAe,cAC1B,CAAC,CAAE,YAAAjnK,EAAa,UAAA3C,EAAW,UAAA7C,EAAW,MAAAkC,EAAO,MAAA7J,EAAO,GAAAqtB,EAAI,QAAA/c,EAAS,GAAGtH,CAAM,EAAGpH,IAAQ,CACnF,MAAMmI,KAAS,MAAWmqK,EAAiB/mK,CAAW,EAEtD,SACE,QAAC,OACC,aAAW,MAAGpD,EAAO,gBAAiBS,EAAWxB,EAAM,UAAYe,EAAO,SAAUuG,GAAWvG,EAAO,OAAO,EAE5G,UAAApC,MACC,OAAC,SACC,QAAS0lB,EACT,aAAW,MAAGtjB,EAAO,YAAa/J,GAAS+J,EAAO,mBAAoB,qBAAqB,EAE1F,SAAAF,CAAA,CACH,KAEF,OAAC6D,EAAA,CAAQ,GAAG1E,EAAO,GAAAqkB,EAAQ,MAAAxjB,EAAc,IAAAjI,EAAU,MAAA5B,CAAA,CAAc,GACnE,CAEJ,CACF,EAEAo0K,EAAa,YAAc,SAE3B,MAAMF,EAAkB,CAAC/rK,EAAsBgF,KAA2B,CACxE,UAAQ,OAAI,CACV,MAAOhF,EAAM,QAAQ,CAAC,EACtB,OAAQA,EAAM,QAAQ,CAAC,EACvB,SAAU,WACV,WAAY,EAEZ,MAAO,CACL,OAAQ,OACR,MAAO,kBACP,QAAS,EACT,OAAQ,KACR,SAAU,WAEV,oBAAqB,CACnB,WAAYA,EAAM,OAAO,QAAQ,KACjC,YAAaA,EAAM,OAAO,QAAQ,KAElC,UAAW,CACT,WAAYA,EAAM,OAAO,QAAQ,KACnC,EAEA,IAAK,CACH,UAAW,eAAeA,EAAM,QAAQ,IAAI,CAAC,aAC7C,WAAYA,EAAM,OAAO,QAAQ,aACjC,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CACF,EAEA,qBAAsB,CACpB,WAAYA,EAAM,OAAO,OAAO,mBAChC,YAAaA,EAAM,OAAO,OAAO,KACjC,OAAQ,cAER,IAAK,CACH,WAAYA,EAAM,OAAO,KAAK,QAChC,CACF,EAEA,6BAA8B,CAC5B,WAAYA,EAAM,OAAO,QAAQ,YAEjC,IAAK,CACH,MAAOA,EAAM,OAAO,QAAQ,YAC9B,CACF,EAEA,8CAA4C,kBAAeA,CAAK,EAEhE,yCAAuC,uBAAoBA,CAAK,CAClE,EAEA,MAAO,CACL,MAAO,OACP,OAAQ,OACR,OAAQ,UACR,aAAcA,EAAM,MAAM,OAAO,KACjC,WAAYA,EAAM,WAAW,MAAM,WACnC,OAAQ,aAAaA,EAAM,WAAW,MAAM,WAAW,GACvD,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAY,eACd,EAEA,UAAW,CACT,YAAaA,EAAM,WAAW,MAAM,WACtC,EAEA,IAAK,CACH,SAAU,WACV,QAAS,QACT,MAAO,cACP,MAAOA,EAAM,QAAQ,GAAG,EACxB,OAAQA,EAAM,QAAQ,GAAG,EACzB,aAAcA,EAAM,MAAM,OAAO,OACjC,WAAYA,EAAM,OAAO,KAAK,UAC9B,UAAWA,EAAM,QAAQ,GACzB,KAAM,EACN,IAAK,MACL,UAAW,eAAeA,EAAM,QAAQ,GAAI,CAAC,aAC7C,CAACA,EAAM,YAAY,aAAa,eAAe,CAAC,EAAG,CACjD,WAAY,+CACd,EAEA,iCAAkC,CAChC,OAAQ,aAAaA,EAAM,OAAO,QAAQ,YAAY,EACxD,CACF,CACF,CACF,CAAC,EACD,mBAAiB,OAAI,CACnB,QAASA,EAAM,QAAQ,EAAG,CAAC,EAC3B,OAAQA,EAAM,QAAQA,EAAM,WAAW,OAAO,EAAE,EAChD,QAAS,cACT,WAAY,SACZ,WAAYgF,EAAc,cAAgBhF,EAAM,WAAW,MAAM,WACjE,OAAQ,aAAagF,EAAc,cAAgBhF,EAAM,WAAW,MAAM,WAAW,GACrF,aAAcA,EAAM,MAAM,OAAO,QAEjC,UAAW,CACT,OAAQ,aAAagF,EAAc,cAAgBhF,EAAM,WAAW,MAAM,WAAW,GAErF,uBAAwB,CACtB,MAAOA,EAAM,OAAO,KAAK,OAC3B,CACF,CACF,CAAC,EACD,YAAU,OAAI,CACZ,gBAAiBgF,EAAc,cAAgB,4BAC/C,MAAO,2BACP,OAAQ,aAAaA,EAAc,cAAgB,2BAA2B,EAChF,CAAC,EACD,eAAa,OAAI,CACf,OAAQ,UACR,aAAchF,EAAM,QAAQ,CAAC,EAC7B,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAY,QACd,CAAC,EACD,sBAAoB,OAAI,CACtB,MAAOA,EAAM,OAAO,KAAK,OAC3B,CAAC,EACD,WAAS,OAAI,CACX,4DAA6D,CAC3D,OAAQ,aAAaA,EAAM,OAAO,MAAM,MAAM,EAChD,CACF,CAAC,CACH,E,mFCtMO,MAAMksK,EAAoB,CAC/B,iBAVa,aAAU,CACvB,KAAM,CACJ,QAAS,CACX,EACA,OAAQ,CACN,QAAS,CACX,CACF,CAAC,EAIC,eAAgB,QAChB,wBAAyB,UACzB,kBAAmB,QACnB,kBAAmB,WACrB,EAoBaC,EAAiB,CAAsBrgK,EAAcsgK,IAWzD,OAAO,OAAOtgK,EAAW,CAAE,SAVTjL,MAErB,OAACurK,EAAA,CACE,GAAGvrK,EACJ,UAAW,CACT,MAAOqrK,CACT,EACF,CAGwD,CAAC,C,gECvC/D,SAASG,EAAwBnC,EAAkB,CACjD,OAAIA,EAAW,GACN,GAELA,EAAW,GACN,GAEF,EACT,CAOO,MAAMz5J,EAAwB,CAAC,CAAE,MAAA5Y,EAAO,UAAAwK,EAAW,MAAA+gB,EAAO,GAAG4yD,CAAU,IAAa,CACzF,MAAMs2F,GAAaz0K,EAAM,QAAU,IAAI,OAAS,EAC1C00K,GAAa10K,EAAM,QAAU,IAAI,OAAS,EAChD,IAAI20K,EAEJ,GAAIppJ,GAAS,OAAOA,EAAM,UAAa,UAAY,CAAC,OAAO,MAAMA,EAAM,QAAQ,EAAG,CAChF,MAAM8mJ,EAAW9mJ,EAAM,SACjBqpJ,EAAkBJ,EAAwBnC,CAAQ,EACxDsC,EAAc,CAAE,SAAUtC,EAAWuC,CAAgB,CACvD,CAEA,SACE,OAAC,OAAI,UAAApqK,EAAsB,MAAA+gB,EAAe,GAAG4yD,EAC3C,oBAAC,OACE,UAAAs2F,MAAa,OAAC,QAAM,SAAAz0K,EAAM,OAAO,KAClC,OAAC,QAAM,SAAAA,EAAM,KAAK,EACjB00K,MAAa,OAAC,QAAK,MAAOC,EAAc,SAAA30K,EAAM,OAAO,GACxD,EACF,CAEJ,EAEA4Y,EAAsB,YAAc,uB,mKCrC7B,SAASi8J,EAAkB,CAAE,YAAAjsE,CAAY,EAAU,CACxD,KAAM,CAAE,UAAAksE,GAAW,SAAAC,EAAS,EAAInsE,EAAY,SAAS,EAErD,SACE,mBACG,SAAAmsE,OACC,OAAC,KACC,SAAO,KAAE,kEAAmE,YAAY,EACxF,UAAW,GACX,GAAG,aACH,MAAO,EAAAD,GACP,QAASlsE,EAAY,kBACrB,gBAAY,KACV,4EACA,mBACF,EACA,cAAaj2F,EAAA,GAAU,WAAW,YAAY,gBAChD,EAEJ,CAEJ,C,sICZO,SAASqiK,EAAsB,CAAE,KAAA7xK,EAAM,aAAAi6C,GAAc,OAAA63H,EAAO,EAAU,CAC3E,MAAMx3H,MAAW,MAAW,EAAE,cAAct6C,CAAI,EAEhD,GAAIA,EAAK,OAAS,aAChB,SAAO,OAACq6C,EAAA,GAAuB,CAAC,KAAAr6C,EAAY,SAAAs6C,GAAoB,aAAAL,EAAA,CAA4B,EAG9F,MAAM3uC,EAAO,IAActL,EAAK,IAAI,EAE9B+xK,GAAcD,MAClB,OAAC58J,EAAA,GACC,KAAA5J,EACA,OAAK0mK,EAAA,IAAY13H,GAAS,IAAI,EAC9B,MAAOA,GAAS,MAChB,OAAQt6C,EAAK,YAAc,SAAW,OACtC,cAAawP,EAAA,GAAU,WAAW,eAAe,KACnD,KAEA,OAAC,MACC,KAAAlE,EACA,QAAM0mK,EAAA,IAAY13H,GAAS,IAAI,EAC/B,OAAQt6C,EAAK,YAAc,SAAW,OACtC,IAAI,aACJ,cAAawP,EAAA,GAAU,WAAW,eAAe,KAEhD,SAAA8qC,GAAS,MACZ,EAGF,SACE,OAAC,OAAI,cAAa9qC,EAAA,GAAU,WAAW,eAAe,UACnD,SAAAxP,EAAK,WAAU,OAACyJ,EAAA,EAAO,CAAC,QAAS6wC,GAAS,QAAU,SAAAy3H,EAAA,CAAY,EAAaA,EAAA,CAChF,CAEJ,C,iFC3CO,SAASE,EAAkB,CAAE,UAAA3+I,CAAU,EAAkC,CAC9E,KAAM,CAAE,UAAAjB,EAAU,EAAIiB,EAAU,SAAS,EAEnC4+I,MAAyC,eAC5CzlK,IAAQ,CACPA,GAAI,gBAAgB,KACpB,KAAoB6mB,CAAS,EAC7B,IAAsB,yBAAyB,CAAE,OAAQ,mBAAoB,CAAC,CAChF,EACA,CAACA,CAAS,CACZ,EAEA,OAAKjB,MAKH,OAACxmB,EAAA,GAAM,CAAC,KAAK,OAAO,QAAQ,UAAU,KAAK,OAAO,cAAeqmK,GAC/D,mBAAC,KAAK,CAAC,QAAQ,iDAAiD,eAAG,EACrE,EANO,IAQX,CCZO,SAASC,EAAiB,CAAE,UAAA7+I,CAAU,EAAkC,CAC7E,KAAM,CAAE,UAAAgwC,EAAU,EAAI,KAAW,aAAahwC,CAAS,EAAG,SAAS,EAEnE,SACE,oBACG,UAAAgwC,GACE,OAAQlhE,IAAMA,GAAE,MAAM,OAAS,KAAa,cAAc,EAC1D,IAAKxB,OACJ,OAACwxK,EAAA,CAAoD,SAAAxxK,EAAA,EAApBA,GAAS,MAAM,GAAyB,CAC1E,EACF2C,EAAA,EAAO,eAAe,uBAAsB,OAAC0uK,EAAiB,CAAC,UAAA3+I,CAAA,CAAsB,EAAK,MAC7F,CAEJ,CAOO,SAAS8+I,EAA2B,CAAE,SAAAxxK,EAAU,OAAAkxK,EAAO,EAAwB,CACpF,MAAMxyJ,MAAQ,MAAwC1e,EAAU,CAAE,0BAA2B,EAAK,CAAC,EAC7F,CAAE,WAAAuF,GAAY,SAAA+nF,EAAU,aAAAmkF,EAAa,KAAI,KAAoBzxK,EAAS,MAAM,GAAG,EAC/EgG,MAAS,MAAWuD,CAAS,EAEnC,GAAImV,GAAM,OAAS,KAAa,aAC9B,OAAI1e,EAAS,yBACJ,OAACA,EAAS,UAAT,CAAmB,MAAOA,CAAA,CAAU,EAGvC,KAGT,MAAM0xK,GAAiB7lK,IAA4B,CACjD,GAAK4lK,GAKL,IAAI5lK,GAAI,kBAAkB,SAAW,CAACA,GAAI,OAAO,QAAQ,OAAO,EAAG,CAEjEA,GAAI,gBAAgB,EACpB,MACF,CAEI4lK,IAAgBnkF,IAClBzhF,GAAI,gBAAgB,EACpByhF,EAASzhF,EAAG,GAEhB,EAGA,OAAIqlK,IAAU,KAAW,iBAAiBlxK,CAAQ,KAE9C,QAAC,OAAI,UAAWgG,GAAO,oBAAqB,cAAa4I,EAAA,GAAU,MAAM,UAAU,QAAQ,YACzF,oBAAC,OAAI,UAAW5I,GAAO,cACrB,mBAAChG,EAAS,UAAT,CAAmB,MAAOA,CAAA,CAAU,EACvC,KACA,OAAC2xK,EAAA,CAAc,SAAA3xK,EAAoB,OAAQ,WAAY,UAAWgG,GAAO,YAAa,GACxF,EAIAkrK,MAEA,QAAC,OAAI,UAAWlrK,GAAO,kBAAmB,cAAa4I,EAAA,GAAU,MAAM,UAAU,QAAQ,YACvF,oBAAC+iK,EAAA,CAAc,SAAA3xK,EAAoB,OAAQ,WAAY,KACvD,OAACA,EAAS,UAAT,CAAmB,MAAOA,CAAA,CAAU,GACvC,KAKF,QAAC,OACC,aAAW,MACTgG,GAAO,UACPT,IAAc,6BACdksK,IAAgB,CAAClsK,IAAc,8BACjC,EACA,cAAAmsK,GACA,cAAa9iK,EAAA,GAAU,MAAM,UAAU,QAAQ,YAE/C,oBAAC+iK,EAAA,CAAc,SAAA3xK,EAAoB,aAAW,MAAGyxK,IAAgBzrK,GAAO,eAAe,EAAG,KAC1F,OAAChG,EAAS,UAAT,CAAmB,MAAOA,CAAA,CAAU,GACvC,CAEJ,CAEA,SAAS2xK,EAAc,CACrB,SAAA3xK,EACA,UAAAyG,GACA,OAAAgqB,EACF,EAIG,CACD,KAAM,CAAE,MAAA/R,EAAM,EAAI1e,EAElB,GAAIA,EAAS,MAAM,OAAS,KAAa,UACvC,OAAO,KAGT,MAAM4xK,EAAclzJ,GAAM,OAASA,GAAM,KACnCqqF,GAAY,OAAOrqF,GAAM,GAAG,GAElC,SACE,OAAC,MACC,QAASqqF,GACT,UAAWrqF,GAAM,QACjB,SAAU,IAAM1e,EAAS,WAAW,EACpC,MAAO4xK,EACP,MAAOlzJ,GAAM,MACb,OAAQ+R,IAAU,aAClB,YAAa/R,GAAM,aAAe,OAClC,UAAAjY,EAAA,CACF,CAEJ,CAEA,MAAM8C,EAAanF,IAA0B,CAC3C,aAAW,OAAI,CACb,QAAS,OAET,qBAAmB,OAAI,CACrB,oBAAqB,QACrB,uBAAwB,OAC1B,CAAC,CACH,CAAC,EACD,qBAAmB,OAAI,CACrB,QAAS,OACT,cAAe,QACjB,CAAC,EACD,uBAAqB,OAAI,CACvB,QAAS,OACT,WAAY,SACZ,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,iBAAe,OAAI,CACjB,UAAW,CACT,OAAQ,OACR,WAAY,cACZ,aAAcA,EAAM,QAAQ,EAAG,EAC/B,OAAQA,EAAM,QAAQ,CAAC,CACzB,CACF,CAAC,EACD,eAAa,OAAI,CACf,UAAW,EACX,aAAc,CAChB,CAAC,EACD,gBAAc,OAAI,CAChB,QAAS,OACT,WAAY,QACd,CAAC,EACD,mBAAiB,OAAI,CACnB,OAAQ,SACV,CAAC,CACH,GClKaytK,EAAqC,0BACrCC,EAAgC,qBAEtC,SAASC,EAAwB,CAAE,UAAAr/I,CAAU,EAAkC,CACpF,KAAM,CAAE,MAAAh0B,GAAO,IAAAw7C,EAAI,EAAIxnB,EAAU,SAAS,EAKpCs/I,GAAgBtzK,GAAM,OAAQU,IAASA,GAAK,YAAc,kBAAoBA,GAAK,OAAS,YAAY,EACxGsjE,EAAY,KACf,aAAahwC,CAAS,EACtB,SAAS,EACT,UAAU,OAAQlxB,IAAMA,GAAE,MAAM,OAAS,KAAa,cAAc,EACjEywK,GAAY,KAAW,QAAQv/I,CAAS,EAAE,SAAS,EAEnDw/I,OADmB,KAA6BD,EAAS,EAAIA,GAAU,iBAAmB,CAAC,GAC/C,OAAQj/D,IAAUA,GAAM,MAAM,YAAc,gBAAgB,EAE9G,OAAKtwC,EAAU,SAAW,GAAKsvG,GAAc,SAAW,GAAKE,GAAyB,SAAW,GAAM,CAACh4H,GAC/F,QAIP,OAACgzD,EAAA,GACC,UAAU,aACV,WACE,OAACilE,EAAA,CACC,UAAAzvG,EACA,MAAOsvG,GACP,iBAAkBE,GAClB,aAAch4H,EAAA,CAChB,EAGF,mBAAC89B,EAAA,GACC,gBAAY,KAAE,qCAAsC65F,CAAkC,EACtF,SAAO,KAAE,gCAAiCC,CAA6B,EACvE,KAAK,aACL,SAAS,KACT,OAAM,GACN,QAAQ,SACV,EACF,CAEJ,CASA,SAASK,EAAsB,CAAE,UAAAzvG,EAAW,MAAAhkE,GAAO,iBAAAw0G,GAAkB,aAAA75D,EAAa,EAA+B,CAC/G,MAAMrzC,KAAS,MAAW,EAAS,EAEnC,SACE,QAAC6rC,EAAA,GACC,SAAU,GACV,YAAa,OACb,YAAa,QACb,UAAW,KACX,QAAS,OACT,UAAW,SACX,aAAc,UACd,gBAAiB,UACjB,QAAS,IACT,IAAK,GACL,QAAU7lC,IAAM,CAGdA,GAAE,gBAAgB,CACpB,EAGC,UAAA02D,EAAU,IAAI,CAAC1iE,GAAU6N,QACxB,OAAC,OAAI,aAAW,MAAG,CAAE,CAAC7H,EAAO,YAAY,EAAG6H,GAAQ,CAAE,CAAC,EACrD,mBAAC2jK,EAA0B,CAAC,SAAAxxK,GAAoB,OAAM,GAAC,GADMA,GAAS,MAAM,GAE9E,CACD,EAGAkzG,GAAiB,OAAS,GACzBA,GAAiB,IAAI,CAACF,GAAOnlG,QAC3B,OAAC,OAAI,aAAW,MAAGA,GAAQ,GAAK7H,EAAO,YAAY,EACjD,mBAACosK,EAAA,EAAgB,CAAC,MAAAp/D,GAAc,OAAM,GAAC,GADkBA,GAAM,MAAM,GAEvE,CACD,EAGFt0G,GAAM,OAAS,MACd,oBACI,WAAAgkE,EAAU,OAAS,GAAKwwC,GAAiB,OAAS,OAAM,OAACm/D,EAAA,EAAY,EACtE3zK,GAAM,IAAI,CAACU,GAAMyO,QAChB,OAAC,OACC,mBAACojK,EAAqB,CAAC,KAAA7xK,GAAY,aAAAi6C,GAA4B,OAAM,GAAC,GAD9D,GAAGj6C,GAAK,KAAK,IAAIyO,EAAK,EAEhC,CACD,GACH,GAEJ,CAEJ,CAEA,SAASwkK,GAAc,CACrB,MAAMrsK,KAAS,MAAW,EAAS,EAEnC,SACE,OAAC,OAAI,UAAWA,EAAO,QACrB,mBAACmnG,EAAA,EAAK,QAAL,EAAa,EAChB,CAEJ,CAEA,MAAM,GAAa/oG,IAA0B,CAC3C,WAAS,OAAI,CACX,UAAWA,EAAM,QAAQ,CAAC,EAC1B,QAASA,EAAM,QAAQ,EAAG,EAAG,CAC/B,CAAC,EACD,gBAAc,OAAI,CAChB,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,CACH,GCjIO,SAASkuK,EAA2B,CAAE,UAAA5/I,CAAU,EAAkC,CAGvF,MAAMhU,GAAQ,KAAW,QAAQgU,CAAS,EAAE,SAAS,EAG/C6/I,GAAsBv/D,IAAkCA,GAAM,MAAM,YAAc,OAExF,SAAI,KAA6Bt0F,EAAK,KAElC,mBACG,SAAAA,GAAM,iBAAiB,OAAO6zJ,EAAkB,EAAE,IAAKv/D,OACtD,OAACo/D,EAAA,EAAgB,CAAC,MAAAp/D,EAAA,EAAmBA,GAAM,MAAM,GAAK,CACvD,EACH,EAIG,IACT,CCfO,SAASw/D,GAAuB,CAAE,MAAA9zK,EAAO,UAAAg0B,EAAU,EAAU,CAClE,KAAW,aAAaA,EAAS,EAAE,SAAS,EAC5C,MAAMwnB,GAAMxnB,GAAU,MAAM,IAE5B,MAAI,CAACh0B,GAAS,CAACw7C,GACN,QAIP,mBACG,SAAAx7C,EACE,OAAQU,IAASA,GAAK,YAAc,MAAS,EAC7C,IAAI,CAACA,GAAqByO,OACzB,OAACojK,EAAqB,CAAC,KAAA7xK,GAAY,aAAc86C,EAAA,EAAU,GAAG96C,GAAK,KAAK,KAAKyO,CAAK,EAAI,CACvF,EACL,CAEJ,CCUO,MAAMu5B,WAA0B,IAAwC,CA2CtE,YAAY1oB,GAAwC,CACzD,MAAM,CACJ,WAAYA,GAAM,YAAc,IAAI,KAAgB,CAAC,CAAC,EACtD,cAAeA,GAAM,eAAiB,IAAI,KAAmB,CAAC,CAAC,EAC/D,GAAGA,EACL,CAAC,EA7CH,KAAU,oBAAsB,IAAI,KAAyB,KAAM,CACjE,qBAAsB,KAAK,sBAAsB,KAAK,IAAI,CAC5D,CAAC,EAED,KAAU,SAAW,IAAI,KAAyB,KAAM,CACtD,KAAM,CAAC,uBAAwB,sBAAuB,kBAAmB,6BAA6B,CACxG,CAAC,EAyCC,KAAK,qBAAqB,IAAM,CAC9B,IAAI+zJ,GAEJ,OAAI,KAAK,MAAM,mBACbA,GAA4B,KAAK,MAAM,cAAc,SAAS,GAGzD,IAAM,CACPA,IACFA,GAA0B,CAE9B,CACF,CAAC,CACH,CA9DA,MAAO,CAAP,KAAO,UAAYC,CAAA,CAcnB,aAAc,CACZ,MAAO,CAAC,CACV,CAEA,cAAcpwK,GAA8B,CAC1C,KAAM,CAAE,iBAAAu0G,GAAkB,qBAAA87D,GAAsB,kBAAAC,EAAmB,sBAAAC,EAAsB,EAAI,KAAK,MAC5FC,GAAmBnvJ,IAAgBrhB,GAAOqhB,EAAG,IAAM,QAAUrhB,GAAOqhB,EAAG,IAAM,GAK/E,CAACkzF,IAAoBi8D,GAAgB,sBAAsB,GAC7D,KAAK,SAAS,CAAE,iBAAkB,EAAK,CAAC,EAGtC,CAACH,IAAwBG,GAAgB,qBAAqB,GAChE,KAAK,SAAS,CAAE,qBAAsB,EAAK,CAAC,EAG1C,CAACF,GAAqBE,GAAgB,iBAAiB,GACzD,KAAK,SAAS,CAAE,kBAAmB,EAAK,CAAC,EAGvC,CAACD,IAAyBC,GAAgB,6BAA6B,GACzE,KAAK,SAAS,CAAE,sBAAuB,EAAK,CAAC,CAEjD,CA2BQ,uBAA8B,IAClB,MAAqB,IAAI,EAC7B,MAAM,OAAO,OAAS,GAClC,KAAK,YAAY,CAErB,CAGO,sBAAgC,CACrC,MAAMpgJ,MAAY,MAAqB,IAAI,EACrC,CAAE,MAAAh0B,EAAM,EAAIg0B,GAAU,MACtBqgJ,GAA0B,KAC7B,aAAargJ,EAAS,GACrB,MAAM,UAAU,KAAMlxB,IAAMA,GAAE,MAAM,OAAS,KAAa,cAAc,EACtEwxK,EAAsBt0K,GAAM,KAAMU,IAASA,GAAK,YAAc,gBAAgB,EAEpF,OAAO2zK,IAA2BC,CACpC,CAEO,aAAuB,CAC5B,MAAMnxG,GAAe,KAClB,aAAa,IAAI,GAChB,MAAM,UAAU,KAAMrgE,IAAMA,GAAE,MAAM,OAAS,KAAa,YAAY,EACpEyxK,GAAiB,KAAW,cAAc,IAAI,EAAE,KAAM5hF,IAAMA,GAAE,MAAM,WAAa,CAACA,GAAE,MAAM,QAAQ,EAClG6hF,MAAW,MAAqB,IAAI,EAAE,MAAM,OAAO,OAAS,EAC5DC,EAAY,KAAK,MAAM,mBAAqB,CAACD,GAC7CE,GAAgB,KAAK,MAAM,sBAAyB,CAACH,IAAkB,CAACpxG,GACxEwxG,GAAiB,KAAK,MAAM,iBAC5BR,GAAwB,KAAK,MAAM,uBAAyB,CAAC,KAAK,qBAAqB,EAE7F,MAAO,EAAEO,IAAiBD,GAAaE,IAAkBR,GAC3D,CACF,CAEA,SAASH,EAA0B,CAAE,MAAAjmJ,CAAM,EAA2C,CACpF,KAAM,CACJ,cAAA6mJ,GACA,WAAA7xD,GACA,iBAAA5K,GACA,qBAAA87D,EACA,kBAAAC,GACA,sBAAAC,EACF,EAAIpmJ,EAAM,SAAS,EACbiG,MAAY,MAAqBjG,CAAK,EACtC,CAAE,MAAA/tB,GAAO,UAAAsxG,EAAU,EAAIt9E,GAAU,SAAS,EAC1C1sB,MAAS,MAAW,CAAS,EAC7ButK,GAAe,OAAO,SAAS,OAAO,SAAS,gBAAgB,EAErE,OAAK9mJ,EAAM,YAAY,KAOrB,QAAC,OACC,cAAa7d,EAAA,GAAU,MAAM,UAAU,SACvC,aAAW,MAAG5I,GAAO,SAAUgqG,IAAahqG,GAAO,iBAAiB,EAEpE,qBAAC4rC,EAAA,EAAK,CAAC,KAAM,EAAG,KAAM,OACnB,WAAC+gI,MACA,oBACE,oBAACpB,EAAgB,CAAC,UAAA7+I,EAAA,CAAsB,KACxC,OAAC4/I,EAA0B,CAAC,UAAA5/I,EAAA,CAAsB,GACpD,KAEF,OAACmf,EAAA,EAAG,CAAC,KAAM,EAAG,EACb,CAAC+gI,IAAqB,CAAC5iE,OAAa,OAACwiE,GAAsB,CAAC,MAAA9zK,GAAc,UAAAg0B,EAAA,CAAsB,EAChGs9E,OAAa,OAAC8gE,EAAiB,CAAC,YAAa9gE,EAAA,CAAW,GAC3D,EACC,CAAC6G,OACA,QAAC,OAAI,aAAW,MAAG7wG,GAAO,aAAcgqG,IAAahqG,GAAO,gBAAgB,EAC1E,oBAACy7G,GAAW,UAAX,CAAqB,MAAOA,EAAA,CAAY,KACzC,OAAC6xD,GAAc,UAAd,CAAwB,MAAOA,EAAA,CAAe,GACjD,EAED,CAACT,IAAyBpmJ,EAAM,qBAAqB,MACpD,OAACmlB,EAAA,EAAK,CACJ,mBAACmgI,EAAuB,CAAC,UAAAr/I,EAAA,CAAsB,EACjD,EAED6gJ,OAAgB,OAAC,KAAa,CAAC,MAAO9mJ,CAAA,EAAY,gBAAkB,GACvE,KA/BO,OAAColB,EAAA,EAAG,CAAC,QAAS,EAAI,SAAA2hI,EAAsB9gJ,EAAS,EAAE,CAiC9D,CAEA,SAAS8gJ,EAAsB9gJ,EAA2B,CACxD,KAAM,CAAE,UAAAgwC,EAAU,EAAI,KAAW,aAAahwC,CAAS,EAAE,SAAS,EAC5D+gJ,GAA0B/wG,GAAU,OAAQlhE,IAAMA,GAAE,qBAAqB,EAC/E,OAAIiyK,IAA2BA,GAAwB,OAAS,KAE5D,mBACG,SAAAA,GAAwB,IAAKjyK,OAC5B,OAACA,GAAE,UAAF,CAAY,MAAOA,EAAA,EAAQA,GAAE,MAAM,GAAK,CAC1C,EACH,EAGG,IACT,CAEA,SAAS,EAAU4C,EAAsB,CACvC,MAAO,CACL,YAAU,OAAI,CACZ,QAAS,OACT,WAAY,aACZ,KAAM,OACN,IAAKA,EAAM,QAAQ,CAAC,EACpB,QAASA,EAAM,QAAQ,CAAC,EACxB,cAAe,MACf,SAAU,SACV,SAAU,WACV,MAAO,OACP,WAAY,OACZ,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,cAAe,iBACf,WAAY,SACd,CACF,CAAC,EACD,qBAAmB,OAAI,CACrB,SAAU,eAEV,aAAc,CAChB,CAAC,EACD,YAAU,OAAI,CACZ,WAAY,QACZ,SAAU,OACZ,CAAC,EACD,gBAAc,OAAI,CAChB,QAAS,OACT,eAAgB,WAChB,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,oBAAkB,OAAI,CACpB,SAAU,OACV,WAAY,MACd,CAAC,CACH,CACF,C,gEClOO,SAASsvK,EAAsB,CAAE,aAAAr6H,EAAc,QAAAlpB,EAAS,KAAAwjJ,EAAO,EAAM,EAAuB,CACjG,KAAM,CAAE,OAAQC,EAAoB,QAAApnK,EAAS,MAAAG,CAAM,KAAI,MAAiB0sC,EAAclpB,EAASwjJ,CAAI,EAGnG,MAAO,CACL,MAHYC,EAAqBA,EAAmB,QAASC,GAAOA,EAAG,MAAM,EAAE,QAAS//J,GAAUA,EAAM,KAAK,EAAI,CAAC,EAIlH,OAAQnH,EAAQ,CAACA,CAAK,EAAI,CAAC,EAC3B,QAAAH,CACF,CACF,C,oEC3BO,IAAKsnK,GAAAA,IACVA,EAAAA,EAAA,SAAW,CAAC,EAAZ,WACAA,EAAAA,EAAA,yBACAA,EAAAA,EAAA,2BACAA,EAAAA,EAAA,qBACAA,EAAAA,EAAA,uBALUA,IAAAA,GAAA,IAQAC,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,OAAS,SAFCA,IAAAA,GAAA,IAKAC,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,KAAO,OAFGA,IAAAA,GAAA,G,kICNL,SAASC,EACdnjF,EACAojF,EACM,CACU,gCAA4C,EACpD,YAAYpjF,CAAQ,KAE5B,MAAoBojF,EAAY,6DAA6D,CAC/F,CAqBA,SAASC,EAAqBC,EAAkD,CAC9E,MAAO,WAAYA,CACrB,CAMO,SAASC,GAA0C,CACxD,OAAIF,EAAqB,WAAW,EAC3B,CACL,gBAAiB,YAAY,QAAQ,iBAAmB,EACxD,eAAgB,YAAY,QAAQ,gBAAkB,EACtD,gBAAiB,YAAY,QAAQ,iBAAmB,CAC1D,EAIK,CACL,gBAAiB,EACjB,eAAgB,EAChB,gBAAiB,CACnB,CACF,CAKA,SAASG,GAAuC,CAC9C,OAAI,OAAO,OAAW,IACb,IAAM,IAAI,8BAA8B,IAAM,OAEhD,EACT,CAKO,SAASC,EAA2BhY,EAAgB/xH,EAAuB,CAC5E8pI,EAA4B,GAE9B,QAAQ,eAAe,GAAG/X,CAAM,KAAK/xH,CAAO,EAAE,CAElD,CAKO,SAASgqI,EAAyBjY,EAAgB/xH,EAAiBpqC,EAAsB,CAC1Fk0K,EAA4B,IAC1Bl0K,EAEF,QAAQ,IAAIoqC,EAASpqC,CAAI,EAGzB,QAAQ,IAAIoqC,CAAO,EAGzB,CAKO,SAASiqI,GAAiC,CAC3CH,EAA4B,GAE9B,QAAQ,SAAS,CAErB,CAKO,SAASI,EAAsBriK,EAAcmC,EAA0B,CAC5E,GAAI,CACE,OAAO,YAAgB,KAAe,YAAY,OAChDA,IAAc,OAChB,YAAY,KAAKnC,EAAM,CAAE,UAAWmC,CAAU,CAAC,EAE/C,YAAY,KAAKnC,CAAI,EAG3B,OAAS1F,EAAO,CACd,QAAQ,MAAM,6CAAwC0F,CAAI,GAAI,CAAE,UAAAmC,EAAW,MAAA7H,CAAM,CAAC,CACpF,CACF,CAKO,SAASgoK,EAAyBtiK,EAAcuiK,EAAmBC,EAAwB,CAChG,GAAI,CACE,OAAO,YAAgB,KAAe,YAAY,UAChDA,EACF,YAAY,QAAQxiK,EAAMuiK,EAAWC,CAAO,EAE5C,YAAY,QAAQxiK,EAAMuiK,CAAS,EAGzC,OAASjoK,EAAO,CACd,QAAQ,MAAM,gDAA2C0F,CAAI,GAAI,CAAE,UAAAuiK,EAAW,QAAAC,EAAS,MAAAloK,CAAM,CAAC,CAChG,CACF,C,4GC3HA,MAAMmoK,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAQWC,EAA8B,CAAC,CAAE,WAAA7wC,EAAY,MAAA5kI,CAAM,OAE5D,OAAC,KACC,SAAU,IAAMulI,EAAYvlI,CAAK,EACjC,WAAA4kI,EACA,iBAAkB,KAAiB,iBACnC,eAAgB,iCAClB,EAIJ,SAASW,EAAYvlI,EAAyB,CAC5C,MAAMozB,KAAY,MAAgB,EAAE,WAAW,EACzCsiJ,KAAc,MAAuB11K,CAAK,EAEhD,MAAO,CACL,CACE,QAASw1K,EACT,KAAM,KAAK,MACb,EACA,CACE,QACE,oDAAoDpiJ,EAAU,KAAK;AAAA,yDACTA,EAAU,WAAW;AAAA,4CAClCsiJ,CAAW,GAC1D,KAAM,KAAK,IACb,CACF,CACF,C,iIC5CO,SAASC,EAAgB/kJ,EAAoB,CAClD,OAAO,aAAa,iBAAiB,gBAAgB,YAAY,EAAG,CAClE,UAAWA,EAAS,UAAU,EAC9B,UAAW,MACb,CAAC,CACH,CAEO,SAASglJ,EAAgB/kJ,EAAiB,CAC/C,OAAO,IAAa,iBAAiB,KAAgB,YAAY,EAAG,CAAE,UAAWA,EAAS,UAAW,MAAU,CAAC,CAClH,CAEO,SAASglJ,EAAyBjlJ,EAAiD,CAExF,MAAMklJ,EAAcllJ,EAAS,UAAU,EACjCq2I,KAAc,MAAkBr2I,CAAQ,EAE9C,GAAI,CAAC,KAAW,mBAAmB,GAAKklJ,GAAa,KAAK,eAAiB,CAAC7O,EAC1E,OAAO,QAAQ,QAAQ,MAAS,EAGlC,MAAMhuJ,EAAY,KAAW,aAAa2X,CAAQ,EAElD,SAAO,MAAc,CACnB,QAASq2I,EAAY,MAAM,QAC3B,MAAOA,EAAY,MAAM,WACzB,UAAWhuJ,EAAU,MAAM,MAC3B,WAAY,CAAE,cAAe,CAAE,MAAO2X,CAAS,CAAE,EACjD,aAAcq2I,EAAY,MAAM,MAAM,SAAS,OACjD,CAAC,CACH,C,kHC3BO,SAAS8O,EAAsB1pI,EAA0E,CAC9G,OAAKA,EAGEA,EAAU,OAAS,KAAqB,OAAS,SAAUA,GAAa,YAAaA,GAFnF,EAGX,CAEO,SAAS2pI,EACd3pI,EACuC,CACvC,OAAKA,EAGEA,EAAU,OAAS,KAAqB,WAAa,cAAeA,EAFlE,EAGX,CAEO,SAAS4pI,EAA+C,CAC7D,MAAAtwK,EACA,WAAAoC,EACA,MAAA4L,EACA,SAAAs1B,CACF,EAKG,CACD,GAAI,CAAClhC,EAAW,OACd,OAAO,KAGT,MAAMmuK,EAAmE,CAAC,EAE1E,UAAWtlK,KAAa7I,EAAY,CAClC,KAAM,CAAE,KAAAuwB,CAAK,EAAI1nB,EAEjB,GAAI,EAAAq4B,GAAY,OAAOA,GAAa,UAAYA,IAAa3Q,EAAK,WAI9D,EAAA2Q,GAAY,MAAM,QAAQA,CAAQ,GAAK,CAACA,EAAS,SAAS3Q,EAAK,QAAQ,IAIvE,EAAA2Q,aAAoB,QAAU,CAACA,EAAS,KAAK3Q,EAAK,QAAQ,GAK9D,IAAI3kB,IAAU,OAAW,CACvBuiK,EAAmB,KAAKtlK,CAAS,EACjC,QACF,CAQA,GALI,gBAA2BA,EAAWjL,CAAK,IAAM,MACnDuwK,EAAmB,KAAKtlK,CAAS,EAI/BslK,EAAmB,QAAUviK,EAC/B,MAEJ,CAEA,OAAOuiK,CACT,CAEO,SAASC,EAA0C,CACxD,MAAAxwK,EACA,WAAAoC,EACA,MAAA4L,EACA,SAAAs1B,CACF,EAKG,CACD,MAAMmtI,EAAoBH,EAA6B,CAAE,MAAAtwK,EAAO,WAAAoC,EAAY,MAAA4L,EAAO,SAAAs1B,CAAS,CAAC,EAE7F,OAAKmtI,GAAmB,UAKtB,mBACG,SAAAA,EAAkB,IAAKxlK,MACtB,OAACA,EAAA,CAAmC,GAAGjL,CAAA,EAAvBiL,EAAU,KAAK,EAAe,CAC/C,EACH,EARO,IAUX,C,iVC/EO,SAASylK,EAAqBr2K,EAAgD,CACnF,MAAM2rC,EAAa,IAAI,IAA8B,CACnD,SAAO,KAAE,yEAA0E,eAAe,EAClG,GAAI,gBACJ,cAAe,EACjB,CAAC,EAEK2qI,EAAmB,KAAoB,cAAct2K,CAAK,EAC1DZ,EAAQk3K,GAAkB,MAAM,UAAY,CAAC,EAC7CljJ,KAAY,MAAqBpzB,CAAK,EACtC6uE,EAAgB7uE,EAAM,OAE5B,OAAA2rC,EACG,QACC,IAAI,IAA0B,CAC5B,SAAO,KAAE,sDAAuD,OAAO,EACvE,GAAI,4BACJ,MAAO3rC,EAAM,MAAM,MACnB,YAAa,EACb,OAAQ,SAAqB2rC,EAAY,CACvC,SAAO,OAAC4qI,EAAA,CAAqB,GAAI5qI,EAAW,MAAM,GAAI,MAAA3rC,CAAA,CAAc,CACtE,EACA,MAAO,IAAO,eAAe,YAC3B,OAAC,KACC,WAAaoE,GAAUoyK,EAAqBx2K,EAAOoE,CAAK,EACxD,SAAO,MAAgBpE,CAAK,EAC5B,aAAW,MAA0BozB,CAAS,EAChD,CAEJ,CAAC,CACH,EACC,QACC,IAAI,IAA0B,CAC5B,SAAO,KAAE,4DAA6D,aAAa,EACnF,GAAI,kCACJ,MAAOpzB,EAAM,MAAM,YACnB,OAAQ,SAA2B2rC,EAAY,CAC7C,SAAO,OAAC8qI,EAAA,CAAyB,GAAI9qI,EAAW,MAAM,GAAI,MAAA3rC,CAAA,CAAc,CAC1E,EACA,MAAO,IAAO,eAAe,YAC3B,OAAC,KACC,WAAa0sC,GAAgB1sC,EAAM,SAAS,CAAE,YAAA0sC,CAAY,CAAC,EAC3D,SAAO,MAAgB1sC,CAAK,EAC9B,CAEJ,CAAC,CACH,EACC,QACC,IAAI,IAA0B,CAC5B,SAAO,KAAE,uEAAwE,wBAAwB,EACzG,GAAI,qCACJ,OAAQ,SAA2B2rC,EAAY,CAC7C,SAAO,OAAC+qI,EAAA,CAAsB,GAAI/qI,EAAW,MAAM,GAAI,MAAA3rC,CAAA,CAAc,CACvE,CACF,CAAC,CACH,EACC,YACC,IAAI,IAA8B,CAChC,SAAO,KAAE,4DAA6D,aAAa,EACnF,GAAI,cACJ,cAAe,GACf,WAAYZ,GAAO,MACrB,CAAC,EAAE,QACD,IAAI,IAA0B,CAC5B,SAAO,KAAE,4DAA6D,aAAa,EACnF,GAAI,kCACJ,OAAQ,OAAM,OAACu3K,EAAA,CAAsB,WAAYL,GAAoB,OAAW,CAClF,CAAC,CACH,CACF,KAEE,KAAsBznG,CAAa,GACrCA,EAAc,aAAa,EAAE,QAASviC,GAAaX,EAAW,YAAYW,CAAQ,CAAC,EAG9EX,CACT,CAMA,SAASgrI,EAAsB,CAAE,WAAAC,CAAW,EAA+B,CACzE,KAAM,CAAE,SAAUx3K,CAAM,EAAIw3K,EAAaA,EAAW,SAAS,EAAI,CAAE,SAAU,CAAC,CAAE,EAEhF,SACE,OAAC,KACC,MAAAx3K,EACA,SAAWA,GAAUw3K,GAAY,SAAS,CAAE,SAAUx3K,CAAM,CAAC,EAC7D,eAAgB,KAChB,KAAM,CAAC,EACT,CAEJ,CAEO,SAASm3K,EAAqB,CACnC,MAAAv2K,EACA,aAAA+tG,EACA,GAAA/jF,CACF,EAIG,CACD,KAAM,CAAE,MAAA5lB,CAAM,EAAIpE,EAAM,SAAS,EAC3B62K,EAAiB72K,EAAM,gBAAgB,EAAE,MAAQ,KAAQ,YACzD,CAAC82K,EAAWC,CAAY,EAAI,WAAe/2K,EAAM,MAAM,KAAK,EAElE,IAAIzB,KAAM,MAA0B,CAClC,UAAWs4K,GAAkB9oE,CAC/B,CAAC,EAED,SACE,OAAC,KACC,IAAAxvG,EACA,cAAa,KAAU,WAAW,YAAY,YAAY,WAAW,OAAO,EAC5E,GAAAyrB,EACA,MAAO5lB,EACP,QAAS,IAAM2yK,EAAa3yK,CAAK,EACjC,OAAQ,IAAMoyK,EAAqBx2K,EAAOoE,EAAO0yK,CAAS,EAG1D,SAAWpqK,GAAMsqK,EAAsBh3K,EAAO0M,EAAE,cAAc,KAAK,EACrE,CAEJ,CAEO,SAAS+pK,EAAyB,CAAE,MAAAz2K,EAAO,GAAAgqB,CAAG,EAAqC,CACxF,KAAM,CAAE,YAAA0iB,CAAY,EAAI1sC,EAAM,SAAS,EACjC,CAACi3K,EAAiBC,CAAkB,EAAI,WAAel3K,EAAM,MAAM,WAAW,EAEpF,SACE,OAAC,KACC,GAAAgqB,EACA,MAAO0iB,EACP,SAAWngC,GAAQvM,EAAM,SAAS,CAAE,YAAauM,EAAI,cAAc,KAAM,CAAC,EAC1E,QAAS,IAAM2qK,EAAmBl3K,EAAM,MAAM,WAAW,EACzD,OAAQ,IAAM,CACZ,KAAqB,KAAK,CACxB,eAAa,KAAE,2CAA4C,0BAA0B,EACrF,OAAQA,EACR,QAAS,IAAMA,EAAM,SAAS,CAAE,YAAA0sC,CAAyB,CAAC,EAC1D,KAAM,IAAM1sC,EAAM,SAAS,CAAE,YAAai3K,CAAgB,CAAC,CAC7D,CAAC,CACH,EACF,CAEJ,CAEO,SAASP,EAAsB,CAAE,MAAA12K,EAAO,GAAAgqB,CAAG,EAAqC,CACrF,KAAM,CAAE,YAAA+yB,EAAc,SAAU,EAAI/8C,EAAM,SAAS,EAE7CzD,EAAW,IAAM,CACrB,MAAM46K,EAAiBp6H,IAAgB,UAAY,cAAgB,UAEnE,KAAqB,KAAK,CACxB,eAAa,KAAE,0CAA2C,yBAAyB,EACnF,OAAQ/8C,EACR,QAAS,IAAMA,EAAM,SAAS,CAAE,YAAam3K,CAAe,CAAC,EAC7D,KAAM,IAAMn3K,EAAM,SAAS,CAAE,YAAA+8C,CAAyB,CAAC,CACzD,CAAC,CACH,EAEA,SAAO,OAAC,IAAM,CAAC,MAAOA,IAAgB,cAAe,GAAA/yB,EAAQ,SAAAztB,CAAA,CAAoB,CACnF,CAEA,SAASy6K,EAAsBh3K,EAAiBoE,EAAe,CAC7DpE,EAAM,SAAS,CAAE,MAAAoE,EAAO,YAAagzK,EAAsBhzK,EAAOpE,EAAM,MAAM,UAAU,CAAE,CAAC,CAC7F,CAEO,SAASw2K,EAAqBx2K,EAAiBoE,EAAe0yK,EAAoB92K,EAAM,MAAM,MAAO,CACtGoE,IAAU0yK,GAId,KAAqB,KAAK,CACxB,eAAa,KAAE,qCAAsC,oBAAoB,EACzE,OAAQ92K,EACR,QAAS,IAAMg3K,EAAsBh3K,EAAOoE,CAAK,EACjD,KAAM,IAAM4yK,EAAsBh3K,EAAO82K,CAAS,CACpD,CAAC,CACH,CAEO,SAASM,EAAsBhzK,EAAe6U,EAAoD,CAKvG,MAJI,EAAA7U,IAAU,IAIV6U,aAAqB,KAAkB,CAACA,EAAU,MAAM,mBACtDA,EAAU,MAAM,UAAYA,EAAU,MAAM,WAMpD,C,6IC/LO,MAAMo+J,CAAa,CAGxB,aAAc,CAgBd,mBAAiBxmJ,GAAoB,CACnC,MAAMuC,EAAY,KAAK,WAAW,EAC9BA,MACF,MAAYA,EAAWA,EAAU,aAAavC,CAAO,EAAI,EAAI,CAEjE,EApBE,IAAU,UAAU,KAAmBnkB,GAAM,KAAK,cAAcA,EAAE,OAAO,CAAC,CAC5E,CAEA,OAAO0mB,EAAsBkF,EAAqB,CAChD,OAAO,IAAI,IAAelF,EAAWkF,CAAI,CAC3C,CAEA,WAAWlF,EAAuC,CAChD,KAAK,UAAYA,CACnB,CAEA,YAAyC,CACvC,OAAO,KAAK,SACd,CASA,kBAAkB6hC,EAAc,CAC9B,MAAMqiH,EAAa,KAAK,MAAMriH,CAAI,EAClC,SAAO,KAAgB,EAAE,cAAc,CACrC,UAAWqiH,EACX,UAAW,KAAK,WAAW,KAAK,WAAaA,EAAW,UACxD,WAAS,KAAE,sDAAuD,qBAAqB,EACvF,IAAK,KAAK,WAAW,KAAK,GAC5B,CAAC,CACH,CAEA,cACEx2K,EACA8pD,EACA,CACA,SAAO,KAAgB,EAAE,cAAc,CACrC,QAAS9pD,EAAK,QACd,UAAWA,EAAK,UAChB,UAAWA,EAAK,UAAU,kBAAkB,EAC5C,eAAgB8pD,GAAgB,cAClC,CAAC,CACH,CAEA,cAAc2jB,EAAsBo1C,EAAoB,CACtD,MAAM4zD,KAAa,MAAc,EAE3BnlF,EAAU,CACd,iBAAkB,GAClB,IAAK,iCAAmC7jB,EACxC,OAAQo1C,EAAY,SAAW,MACjC,EAEA,OAAO4zD,EAAW,QAAQnlF,CAAO,EAAE,KAAK,IAAM,CAC5C,MAAMolF,EAAe,CAAC7zD,EAElB,KAAK,WAAW,MAAQp1C,IAC1B,KAAK,UAAU,KAAK,UAAYipG,GAGlC,MAAMtsI,EAAUssI,KACZ,KAAE,kCAAmC,mBAAmB,KACxD,KAAE,oCAAqC,qBAAqB,EAEhE,WAAU,KAAK,KAAU,aAAc,CAACtsI,CAAO,CAAC,EAEzCssI,CACT,CAAC,CACH,CACF,CAMA,IAAIhzI,EAEG,SAASizI,EAAgBzrJ,EAAwB,CACtDwY,EAAoBxY,CACtB,CAEO,SAAS0rJ,GAAgC,CAC9C,OAAKlzI,IACHA,EAAoB,IAAI6yI,GAEnB7yI,CACT,C,sFCrGO,MAAM8E,UAA4B,WAAoE,CAC3G,MAAO,CAAP,KAAO,YAAc,IAIrB,YAAY3jC,EAAiC,CAC3C,MAAMA,CAAK,EACX,KAAK,MAAQ,CAAE,SAAU,GAAO,MAAO,KAAM,UAAW,IAAK,CAC/D,CAEA,OAAO,yBAAyB0H,EAAwC,CACtE,MAAO,CAAE,SAAU,GAAM,MAAAA,EAAc,UAAW,IAAK,CACzD,CAEA,kBAAkBA,EAAcmsB,EAAuB,CACjD,KAAK,MAAM,QACb,KAAK,MAAM,QAAQnsB,EAAOmsB,CAAI,EAE9B,QAAQ,MAAM,WAAW,KAAK,SAAS,KAAK,EAAE,oBAAqBnsB,EAAOmsB,CAAI,EAGhF,KAAK,SAAS,CAAE,MAAAnsB,EAAO,UAAWmsB,CAAK,CAAC,CAC1C,CAEA,QAAS,CACP,MAAMm+I,EAAW,KAAK,MAAM,SAC5B,OAAI,KAAK,MAAM,SACNA,KAAW,OAACA,EAAA,CAAS,MAAO,KAAK,MAAM,MAAO,UAAW,KAAK,MAAM,UAAW,EAAK,KAGtF,KAAK,MAAM,QACpB,CACF,C,4EC5CO,MAAMC,EAAwB,yBAGxBC,EAAkB,OAExB,IAAKC,GAAAA,IACVA,EAAA,WAAa,yBAGbA,EAAA,YAAc,2BAEdA,EAAA,WAAa,0BAGbA,EAAA,YAAc,8BAEdA,EAAA,YAAc,8BAEdA,EAAA,aAAe,+BAbLA,IAAAA,GAAA,IAmBL,MAAMC,EAAkB,c,+DCtBxB,SAASC,EAAa59I,EAAqB,CAChD,OAAOA,EAAI,QAAQ,MAAO,MAAM,EAAE,QAAQ,KAAM,KAAK,CACvD,CAKO,SAAS69I,EAASt7K,EAAyB,CAEhD,MAAO,CAAC,CAACA,GADI,OAAOA,IACO,QAC7B,CAOO,SAASu7K,EAAcj+D,EAAwB,CACpD,GAAIA,IAAW,OACb,MAAO,GAKT,GAHIA,IAAW,MAGX,OAAOA,GAAW,UAAY,CAACA,EAAO,YACxC,MAAO,SAIT,MAAM3jG,EADgB,mBACQ,KAAK2jG,EAAO,YAAY,SAAS,CAAC,EAChE,OAAI3jG,GAAWA,EAAQ,OAAS,EACvBA,EAAQ,CAAC,EAET,EAEX,CAKO,SAAS6hK,EAAQl+D,EAAwB,CAC9C,OAAIA,IAAW,KACN,OAEF,OAAOA,CAChB,CAKO,SAASm+D,EAAgBn+D,EAAgBt9G,EAAuB,CACrE,MAAMF,EAAO07K,EAAQl+D,CAAM,EAE3B,OAAIx9G,IAAS,QAAUA,IAAS,YACvBA,GAGLA,IAAS,WACXE,EAAQ,IAAMq7K,EAAar7K,CAAK,EAAI,KAElCF,IAAS,WAGTw9G,EACG,SAAS,EACT,QAAQ,UAAW,EAAE,EACrB,QAAQ,SAAU,EAAE,EAAI,WAGxBt9G,EACT,CAKA,IAAIA,EAAQ,GACL,SAAS07K,EAAW1hJ,EAAqB,CAC9C,OAAIshJ,EAASthJ,CAAG,GACdh6B,EAAQu7K,EAAcvhJ,CAAG,EACrB,MAAM,QAAQA,CAAG,IACnBh6B,GAAS,IAAMg6B,EAAI,OAAS,MAG9Bh6B,EAAQy7K,EAAgBzhJ,EAAKA,EAAI,SAAS,CAAC,EAEtCh6B,CACT,CAKO,SAAS27K,EAASnxK,EAA2B,CAClD,MAAO,kBAAkBA,CAAS,EACpC,CAMO,SAASoxK,EACd97K,EACA0K,EACAuE,EACA,CACA,MAAMnB,EAAK,SAAS,cAAc9N,CAAI,EACtC,OAAI0K,GACFoD,EAAG,UAAU,IAAI+tK,EAASnxK,CAAS,CAAC,EAElCuE,IAAY,SACVA,aAAmB,KACrBnB,EAAG,YAAYmB,CAAO,EAEtBnB,EAAG,YAAY,SAAS,eAAe,OAAOmB,CAAO,CAAC,CAAC,GAGpDnB,CACT,CCnHA,MAAMiuK,EACJ,oGACIC,EAAqB,8BACrBC,EAAkB,6CAGlBC,EAA4B,GAE5BC,EACH,OAAO,OAAW,KAAe,OAAO,wBACvCC,IACAA,EAAG,EACI,IASLC,EAAqC,CACzC,YAAa,GACb,aAAc,EAChB,EAQO,MAAMC,CAAa,CAqCxB,YACS9jH,EACC20B,EAAO,EACPvmF,EAA6By1K,EAC7Bz0J,EACR,CAJO,UAAA4wC,EACC,UAAA20B,EACA,YAAAvmF,EACA,SAAAghB,EAvCV,KAAQ,QAA0B,KAGlC,KAAQ,QAAiC,KAEzC,KAAQ,aAAe,EAmCpB,CAKH,IAAY,QAAkB,CAC5B,OAAI,KAAK,UAAY,KACZ,KAAK,QAEL,KAAK,KAAO,CAEvB,CAKA,IAAY,OAAO1nB,EAAgB,CACjC,KAAK,QAAUA,CACjB,CAKA,IAAY,QAAkB,CAC5B,OACE,KAAK,OAAS,WACb67K,EAAkB,KAAK,KAAK,IAAI,GAAKE,EAAgB,KAAK,KAAK,IAAI,GAAKD,EAAmB,KAAK,KAAK,IAAI,EAE9G,CAKA,IAAY,OAAiB,CAC3B,OAAO,KAAK,OAAS,UAAY,KAAK,KAAK,QAAQ,MAAM,IAAM,CACjE,CAKA,IAAY,SAAmB,CAC7B,OAAO,MAAM,QAAQ,KAAK,IAAI,CAChC,CAMA,IAAY,UAAoB,CAC9B,OAAOR,EAAS,KAAK,IAAI,CAC3B,CAKA,IAAY,eAAyB,CACnC,MAAO,CAAC,KAAK,KAAK,QAAU,CAAC,KAAK,OACpC,CAKA,IAAY,SAAmB,CAC7B,OAAO,KAAK,eAAkB,KAAK,MAAQ,CAAC,KAAK,KAAK,QAAU,KAAK,OACvE,CAMA,IAAY,QAAkB,CAC5B,OAAO,OAAO,KAAK,IAAQ,GAC7B,CAKA,IAAY,iBAA0B,CACpC,OAAOC,EAAc,KAAK,IAAI,CAChC,CAMA,IAAY,MAAe,CACzB,OAAOC,EAAQ,KAAK,IAAI,CAC1B,CAMA,IAAY,MAAiB,CAC3B,OAAI,KAAK,SACA,OAAO,KAAK,KAAK,IAAI,EAAE,IAAK9zJ,GAASA,GAAY,IAAK,EAEtD,CAAC,CAEZ,CAMA,YAAa,CACX,KAAK,OAAS,CAAC,KAAK,OAEhB,KAAK,UACH,KAAK,OACP,KAAK,eAAe,KAAK,OAAO,WAAW,EAE3C,KAAK,eAAe,KAAK,OAAO,YAAY,EAE9C,KAAK,QAAQ,UAAU,OAAOi0J,EAAS,MAAM,CAAC,EAElD,CAOA,YAAY5rE,EAAQ,EAAG,CACjBA,EAAQ,IAIZ,KAAK,KAAOA,EACZ,KAAK,OAASA,IAAU,EAEpB,KAAK,UACP,KAAK,eAAe,EAAK,EAErBA,IAAU,EACZ,KAAK,QAAQ,UAAU,OAAO4rE,EAAS,MAAM,CAAC,GAE9C,KAAK,eAAe,KAAK,OAAO,WAAW,EAC3C,KAAK,QAAQ,UAAU,IAAIA,EAAS,MAAM,CAAC,IAGjD,CAEA,eAAgB,CACd,OAAO,KAAK,KAAK,OAAS,GAAK,KAAK,KAAK,OAAS,OAAM,YAAS,KAAK,KAAK,CAAC,CAAC,MAAK,YAAS,KAAK,KAAK,CAAC,CAAC,EACzG,CAEA,aAAc,CACZ,MAAMU,EAAmBT,EAAc,MAAM,EAC7C,OAAAS,EAAiB,YAAYT,EAAc,OAAQ,UAAW,GAAG,CAAC,EAG9D,KAAK,cAAc,GACrB,KAAK,KAAK,QAAQ,CAACr2I,EAAU3zB,IAAkB,CACzCA,EAAQ,GACVyqK,EAAiB,YAAYT,EAAc,OAAQ,cAAe,GAAG,CAAC,EAExES,EAAiB,YAAYT,EAAc,OAAQ,SAAUr2I,CAAG,CAAC,CACnE,CAAC,EACD,KAAK,aAAe,IAEpB82I,EAAiB,YAAYT,EAAc,OAAQ,SAAU,KAAK,KAAK,MAAM,CAAC,EAGhFS,EAAiB,YAAYT,EAAc,OAAQ,UAAW,GAAG,CAAC,EAC3DS,CACT,CAOA,OAAOC,EAAW,GAAuB,CAEvC,KAAK,QAAUV,EAAc,MAAO,KAAK,EAGzC,MAAMW,EAAcX,EAAc,IAAK,cAAc,EAC/CY,EAAcZ,EAAc,OAAQ,SAAS,EAanD,GAVI,KAAK,UACPW,EAAY,YAAYC,CAAW,EAIjC,KAAK,QACPD,EAAY,YAAYX,EAAc,OAAQ,MAAO,GAAG,KAAK,GAAG,GAAG,CAAC,EAIlE,KAAK,SAAU,CAEjB,MAAM57K,EAAQ47K,EAAc,OAAQ,OAAO,EAGrCa,EAAoBb,EAAc,MAAM,EAGxCc,EAAkBd,EAAc,OAAQ,mBAAoB,KAAK,eAAe,EAItF,GAHAa,EAAkB,YAAYC,CAAe,EAGzC,KAAK,QAAS,CAChB,MAAML,EAAmB,KAAK,YAAY,EAC1CI,EAAkB,YAAYJ,CAAgB,CAChD,CAGAr8K,EAAM,YAAYy8K,CAAiB,EACnCF,EAAY,YAAYv8K,CAAK,CAE/B,KAAO,CAEL,MAAMA,EAAQ,KAAK,MAAQ47K,EAAc,GAAG,EAAIA,EAAc,MAAM,EAGpE57K,EAAM,UAAU,IAAI27K,EAAS,KAAK,IAAI,CAAC,EACnC,KAAK,QACP37K,EAAM,UAAU,IAAI27K,EAAS,MAAM,CAAC,EAElC,KAAK,QACP37K,EAAM,UAAU,IAAI27K,EAAS,KAAK,CAAC,EACnC37K,EAAM,aAAa,OAAQ,KAAK,IAAI,GAItC,MAAM28K,EAAelB,EAAgB,KAAK,KAAM,KAAK,IAAI,EACzDz7K,EAAM,YAAY,SAAS,eAAe28K,CAAY,CAAC,EAGvDJ,EAAY,YAAYv8K,CAAK,CAC/B,CAGA,MAAMoJ,EAAWwyK,EAAc,MAAO,UAAU,EAGhD,OAAI,KAAK,UACPxyK,EAAS,UAAU,IAAIuyK,EAAS,QAAQ,CAAC,EAEvC,KAAK,SACPvyK,EAAS,UAAU,IAAIuyK,EAAS,OAAO,CAAC,EAEtC,KAAK,SACPvyK,EAAS,UAAU,IAAIuyK,EAAS,OAAO,CAAC,EAItC,KAAK,QAAU,KAAK,OAAO,OAC7B,KAAK,QAAQ,UAAU,IAAIA,EAAS,KAAK,OAAO,KAAK,CAAC,EAEpD,KAAK,QACP,KAAK,QAAQ,UAAU,IAAIA,EAAS,MAAM,CAAC,EAIxCW,GACH,KAAK,QAAQ,YAAYC,CAAW,EAGjC,KAAK,aAIRA,EAAY,YAAYC,CAAW,EAHnC,KAAK,QAAQ,YAAYpzK,CAAQ,EAO/B,KAAK,UAAY,KAAK,QACxB,KAAK,eAAe,EAIlB,KAAK,UACPmzK,EAAY,iBAAiB,QAAS,KAAK,WAAW,KAAK,IAAI,CAAC,EAG3D,KAAK,OACd,CAMA,eAAeK,EAAW,GAAO,CAC/B,MAAMxzK,EAAW,KAAK,SAAW,KAAK,QAAQ,cAAc,OAAOuyK,EAAS,UAAU,CAAC,EAAE,EAEzF,GAAI,GAACvyK,GAAY,KAAK,SAItB,GAAIwzK,EAAU,CACZ,IAAIhrK,EAAQ,EACZ,MAAMirK,EAAY,IAAM,CACtB,MAAMn1J,EAAM,KAAK,KAAK9V,CAAK,EACrBkrK,EAAY,IAAIV,EAAa,KAAK,KAAK10J,CAAG,EAAG,KAAK,KAAO,EAAG,KAAK,OAAQA,CAAG,EAClFte,EAAS,YAAY0zK,EAAU,OAAO,CAAC,EAEvClrK,GAAS,EAELA,EAAQ,KAAK,KAAK,SAChBA,EAAQoqK,EACVa,EAAU,EAEVZ,EAAsBY,CAAS,EAGrC,EAEAZ,EAAsBY,CAAS,CACjC,MACE,KAAK,KAAK,QAASn1J,GAAQ,CACzB,MAAMo1J,EAAY,IAAIV,EAAa,KAAK,KAAK10J,CAAG,EAAG,KAAK,KAAO,EAAG,KAAK,OAAQA,CAAG,EAClFte,EAAS,YAAY0zK,EAAU,OAAO,CAAC,CACzC,CAAC,CAEL,CAMA,eAAeF,EAAW,GAAO,CAC/B,MAAMG,EAAkB,KAAK,SAAW,KAAK,QAAQ,cAA8B,OAAOpB,EAAS,UAAU,CAAC,EAAE,EAEhH,GAAIiB,EAAU,CACZ,IAAII,EAAkB,EACtB,MAAMC,EAAe,IAAM,CACrBF,GAAmBA,EAAgB,SAAS,SAC9CA,EAAgB,YAAYA,EAAgB,SAAS,CAAC,CAAC,EACvDC,GAAmB,EACfA,EAAkBhB,EACpBiB,EAAa,EAEbhB,EAAsBgB,CAAY,EAGxC,EACAhB,EAAsBgB,CAAY,CACpC,MACMF,IACFA,EAAgB,UAAY,GAGlC,CACF,C,6HC5ZO,SAASG,EAA0B75K,EAAmBgB,EAAuC,CAClG,OAAO,IAAI,QAAkB43D,GAAY,CACvC,GAAI54D,EAAM,YAAY,MAAQ,KAAyB,CACrD85K,EAAmB94K,EAAQhB,CAAK,EAChC44D,EAAQ,EAAI,EACZ,MACF,CAEA,IAAU,QACR,IAAI,KAAsB,CACxB,MAAO,gCACP,KAAM,iMACN,QAAS,WACT,KAAM,MACN,UAAW,IAAM,CACfkhH,EAAmB94K,EAAQhB,CAAK,EAChC44D,EAAQ,EAAI,CACd,EACA,UAAW,IAAM,CACfA,EAAQ,EAAK,CACf,CACF,CAAC,CACH,CACF,CAAC,CACH,CAEA,SAASkhH,EAAmB94K,EAAqBhB,EAAmB,CAClE,MAAMq9G,EAA4Br8G,EAAO,IAAKyc,MAAM,MAAgBA,CAAC,CAAC,EAEhEsX,EAAsB,CAC1B,MAAO,IACP,UAAW,KAAiB,SAC5B,SAAAsoF,EACA,WAAY,CAAE,IAAK,IAAwB,CAC7C,EAEAr9G,EAAM,cAAc,CAClB,WAAY,CAAE,IAAK,IAAwB,EAC3C,QAAS,CAAC+0B,CAAK,CACjB,CAAC,EAED/0B,EAAM,QAAQ,CAChB,CAEO,SAAS+5K,EACdC,EACA,CACA,MAAO,CAACC,EAAuBC,EAAiCzwK,IAAqB,IACnF,KAAkBwwK,CAAa,EAAE,UAAU,MAAOv+J,GAAS,CACzD,MAAM2hG,EAA4B,CAAC,EACnC3hG,EAAK,WAAW,QAASs5I,GAAkB,CACzC,MAAMmlB,KAAgB,MAAgBnlB,CAAE,EACxC33C,EAAS,KAAK88D,CAAa,CAC7B,CAAC,EACDH,EAAa,CAAE,GAAG,KAA6B,SAAA38D,EAAoB,KAAM3hG,EAAK,IAAO,EAAGw+J,CAAc,CACxG,CAAC,CACH,CACF,C,oMCpBO,SAAS3vI,EAAM5kC,EAAiC,CACrD,KAAM,CACJ,MAAAvB,EACA,UAAAkE,EACA,SAAAvC,EACA,OAAAH,EAAS,GACT,cAAAw0K,EAAgB,GAChB,qBAAAC,EAAuB,GACvB,UAAAlzK,EACA,iBAAAmzK,EACA,UAAAhwI,EACA,gBAAAiwI,EACA,UAAAC,EAAY,EACd,EAAI70K,EACEe,KAAS,MAAW,GAAc,EAElCnI,KAAM,UAAuB,IAAI,EAIjC,CAAE,aAAA+gD,EAAc,cAAAm7H,CAAc,KAAI,KACtC,CAAE,0BAA2B,CAACL,EAAe,OAAAx0K,EAAQ,QAAS0kC,CAAU,EACxE/rC,CACF,EAGM,CAAE,YAAA6gD,EAAa,WAAA2+B,CAAW,KAAI,KAClC,CACE,aAAcz1E,CAChB,EACA/J,CACF,EAEA,GAAI,CAACqH,EACH,OAAO,KAGT,MAAM80K,KAAc,MAAGh0K,EAAO,YAAa,OAAOtC,GAAU,UAAYsC,EAAO,mBAAmB,EAElG,SACE,QAAC,KAAgB,CACf,oBAAC,OACC,KAAK,eACL,UAAWA,EAAO,cAClB,QAAS6zK,IAAoBF,EAAuB/vI,EAAY,QAC/D,GAAGmwI,CAAA,CACN,KACA,OAAC,KAAU,CAAC,QAASD,EAAW,UAAS,GAAC,aAAY,GACpD,oBAAC,OAAI,aAAW,MAAG9zK,EAAO,MAAOS,CAAS,EAAG,IAAA5I,EAAW,GAAG+gD,EAAe,GAAGF,EAC3E,qBAAC,OAAI,UAAWs7H,EACb,iBAAOt2K,GAAU,aAAY,OAACu2K,EAAA,CAAoB,GAAGh1K,EAAO,MAAAvB,EAAc,GAAI25E,EAAW,GAAI,EAI5F,OAAO35E,GAAU,UAAYA,KAE/B,OAAC,OAAI,UAAWsC,EAAO,iBACrB,mBAAC,KACC,KAAK,QACL,KAAK,KACL,QAAS4jC,EACT,gBAAY,KAAE,iCAAkC,OAAO,EACzD,EACF,GACF,KACA,OAAC,OAAI,aAAW,MAAG5jC,EAAO,aAAc4zK,CAAgB,EAAI,SAAAv0K,CAAA,CAAS,GACvE,EACF,GACF,CAEJ,CAEA,SAAS60K,EAAe,CAAE,UAAAr/H,EAAW,SAAAx1C,CAAS,EAA+D,CAC3G,MAAMW,KAAS,MAAW,GAAc,EAExC,OAAI60C,KAEA,OAAC,OAAI,UAAW70C,EAAO,eACrB,oBAAC,IAAK,CAAC,eAAe,gBACpB,oBAAC,IAAK,CAAC,eAAe,aAAa,IAAK,EACrC,SAAA60C,CAAA,CACH,KACA,OAAC,IAAK,CAAC,eAAe,WAAW,IAAK,EACnC,SAAAx1C,CAAA,CACH,GACF,EACF,KAKF,OAAC,OAAI,UAAWW,EAAO,eACrB,mBAAC,IAAK,CAAC,eAAe,WAAW,IAAK,EAAG,KAAK,OAC3C,SAAAX,CAAA,CACH,EACF,CAEJ,CAEAwkC,EAAM,UAAYqwI,EASlB,SAASD,EAAmB,CAAE,KAAAvvK,EAAM,YAAAyvK,EAAa,MAAAz2K,EAAO,GAAA4lB,CAAG,EAAyC,CAClG,SAAO,OAAC,IAAW,CAAC,KAAA5e,EAAY,YAAAyvK,EAA0B,MAAAz2K,EAAc,GAAA4lB,CAAA,CAAQ,CAClF,C,iDC9JO,IAAK8wJ,GAAAA,IACVA,EAAAA,EAAA,qBACAA,EAAAA,EAAA,eAFUA,IAAAA,GAAA,G,+YCWL,SAASC,EAAiB,CAAE,KAAA3kI,EAAK,EAA0B,CAChE,MAAM1vC,MAAS,MAAWuD,CAAS,EAC7B4nI,GAAuB,IAAc,QAAQ,KAAKz7F,GAAK,SAAS,EAMtE,SAJqB,WAAQ,IACpBy7F,MAAuB,MAAmCz7F,GAAK,MAAM,QAAQ,EAAE,aAAe,GACpG,CAACA,GAAK,MAAM,SAAUy7F,EAAoB,CAAC,KAO5C,OAACtoI,EAAA,GACC,MAAM,QACN,WACE,OAAC,OACC,oBAAC,MACC,QAAQ,mDACR,OAAQ,CAAE,YAAalG,EAAA,EAAO,gBAAgB,YAAa,aAAc+yC,GAAK,MAAM,QAAS,EAC9F,iDACkC,OAAC,QAAK,UAAW1vC,GAAO,iBAAmB,2BAAkB,EAAO,mEACzC,mBAAmB,4CAEjF,EACF,EAGF,mBAACb,EAAA,EAAI,CAAC,KAAK,kBAAkB,UAAWa,GAAO,KAAM,EACvD,EApBO,IAsBX,CAEA,SAASuD,EAAUnF,GAAsB,CACvC,MAAO,CACL,oBAAkB,OAAI,CACpB,WAAYA,GAAM,WAAW,cAC/B,CAAC,EACD,QAAM,OAAI,CACR,KAAMA,GAAM,OAAO,QAAQ,IAC7B,CAAC,CACH,CACF,C,0BC7CO,MAAMk2K,EAAa,CAAC,CAAE,KAAA5kI,EAAK,IAAY,CAC5C,MAAMluB,MAAQ,MAAWg2B,CAAQ,EAEjC,SAAI,MAAc9H,GAAK,MAAM,KAEzB,OAAC7sC,EAAA,EAAO,CAAC,MAAM,QAAQ,QAAS6sC,GAAK,WAAa,6BAChD,oBAAC,OAAI,UAAWluB,GAAM,KACpB,oBAACriB,EAAA,EAAI,CAAC,KAAK,sBAAuB,MAClC,OAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,6BAA6B,iBAAK,EACnD,GACF,EACF,KAIG,mBAAG,SAAAuwC,GAAK,OAAO,CACxB,EAEM8H,EAAYp5C,KAA0B,CAC1C,QAAM,OAAI,CACR,QAAS,cACT,cAAe,MACf,WAAY,SACZ,IAAKA,GAAM,QAAQ,CAAC,EAEpB,MAAOA,GAAM,OAAO,QAAQ,IAC9B,CAAC,CACH,G,uECpBO,MAAMm2K,GAAY,CAAC,CAAE,KAAA7kI,GAAM,WAAA8kI,GAAY,WAAAC,GAAY,SAAA5e,EAAS,IAAa,CAC9E,MAAMr0I,MAAQ,MAAW,EAAQ,EAE3B,CAAE,SAAAkzJ,GAAU,UAAAziI,EAAU,EAAIvC,GAE1BilI,GAAqB,IACrB9e,IAAY,IAAc,QAAQ,cAAc5jH,EAAS,KAEzD,OAACpvC,EAAA,GACC,WAAS,KACP,iGACA,+CACF,EACA,UAAU,MAEV,oBAAC+xK,GAAA,EAAQ,CAAC,MAAM,UACd,oBAACz1K,EAAA,EAAI,CAAC,KAAK,QAAQ,KAAK,IAAK,MAC7B,OAAC,KAAK,CAAC,QAAQ,6BAA6B,kBAAM,GACpD,EACF,KAGK,OAAC,KAAK,CAAC,QAAQ,qCAAqC,0BAAc,EAGvEo9J,MAAU,WAAQ,IAAM,CAC5B,GACE,KAAmB,aAAamY,EAAQ,GACxCA,GAAS,QAAQ,QACjBA,GAAS,QAAU,KAAsB,SACzC,CAEA,MAAMG,GAAgBH,GAAS,SAAW,IAAI,KAAKA,GAAS,QAAQ,KAAI,MAAiBA,EAAQ,EAGjG,GAAIG,GACF,SACE,QAAC,QAAK,MAAO,OAAOA,EAAa,EAAG,UAAWrzJ,GAAM,IACnD,qBAAC,MACC,QAAQ,0BACR,OAAQ,CACN,YAAU,MACR,CACE,MAAOqzJ,GACP,IAAK,IAAI,IACX,EACA,EACF,CACF,EACD,iBACM,gBACP,EAAS,KACX,CAGN,CACA,OAAO,IACT,EAAG,CAACH,GAAUlzJ,EAAK,CAAC,EAEpB,OAAIgzJ,MAEA,QAAC5oI,EAAA,EAAK,CAAC,IAAK,EACV,oBAACmkE,EAAA,EAAO,EAAC,KACT,OAAC,KAAK,CAAC,QAAQ,+BAA+B,oBAAQ,GACxD,EAEO0kE,MAEP,QAAC7oI,EAAA,EAAK,CAAC,IAAK,EACV,oBAACmkE,EAAA,EAAO,EAAC,KACT,OAAC,KAAK,CAAC,QAAQ,+BAA+B,oBAAQ,GACxD,EAEO,KAAmB,aAAa2kE,EAAQ,KAE/C,QAAC9oI,EAAA,EAAK,CAAC,IAAK,EACV,oBAACkpI,EAAA,EAAa,CAAC,MAAOJ,GAAS,MAAO,SAAA7e,EAAA,CAAoB,EACzD,CAACA,IAAY0G,EAAA,EAChB,EAEOmY,IAAY,KAAmB,cAAcA,EAAQ,KACvD,OAACC,GAAA,EAAmB,KAEtB,OAAC,KAAK,CAAC,QAAQ,yBAAyB,eAAG,CACpD,EAEM,GAAYv2K,KAA0B,CAC1C,OAAK,OAAI,CACP,SAAUA,GAAM,WAAW,UAAU,SACrC,MAAOA,GAAM,OAAO,KAAK,UACzB,WAAY,SACZ,WAAY,KACd,CAAC,CACH,GClEM22K,KAAyB,MAAgC,EAEzD,CAAE,qCAAAC,CAAqC,EAAIzlI,EAAA,GAC3C,CAAE,+BAAA0lI,CAA+B,EAAIzoF,EAAA,EAE9B0oF,EAAa,CAAC,CACzB,MAAAjnF,GACA,UAAAxtF,GACA,eAAA00K,GAAiB,GACjB,aAAAC,GAAe,kBACf,gBAAAC,GAAkB,GAClB,kBAAAC,GAAoB,GACpB,yBAAAC,GAA2B,EAC7B,IAAa,CACX,MAAMv1K,MAAS,MAAW,EAAS,EAC7Bw1K,MAAe,MAAGx1K,GAAO,QAASS,GAAW,CAAE,CAACT,GAAO,aAAa,EAAGm1K,EAAe,CAAC,EAEvF,CAAE,UAAA/2G,GAAW,KAAA5wC,GAAM,cAAA0wC,GAAe,aAAAC,EAAa,KAAIs3G,EAAA,GAAcxnF,GAAO,EAAG,IAA2B,EAEtG,CAAE,OAAQynF,GAA2B,OAAQC,EAAwB,EAAIC,GAAsBx3G,EAAS,EAExGy3G,GAAsBF,KAA4B,UAElDvhI,MAAQ,WAAQ,IACbshI,GAA0B,IAAI,CAAChmI,GAAMomI,MACnC,CACL,GAAI,GAAGpmI,GAAK,UAAU,IAAI,IAAIA,GAAK,MAAM,IAAI,IAAIA,GAAK,IAAI,IAAIomI,EAAO,GACrE,KAAMpmI,EACR,EACD,EACA,CAACgmI,EAAyB,CAAC,EAExB3tK,GAAUguK,GAAWT,GAAmBD,GAAiBE,GAA0BM,EAAmB,EAE5G,GAAI,CAACz3G,GAAU,OACb,SAAO,OAAC,OAAI,aAAW,MAAGo3G,GAAcx1K,GAAO,YAAY,EAAI,SAAAo1K,EAAA,CAAa,EAG9E,MAAMY,GAAiBb,GAAiBc,EAAA,EAA6Bn5G,EAAA,EAErE,SACE,QAAC,OAAI,UAAW04G,GAAc,cAAY,cACxC,oBAACQ,GAAA,CACC,KAAMjuK,GACN,aAAc,GACd,MAAAqsC,GACA,sBAAuB,CAAC,CAAE,KAAM1E,EAAK,OAAM,OAACwmI,EAAA,GAAW,CAAC,KAAAxmI,EAAA,CAAY,EACtE,KACA,OAACymI,EAAA,GACC,YAAa3oJ,GACb,cAAA0wC,GACA,WAAYC,GACZ,mBAAkB,GAClB,UAAWn+D,GAAO,WACpB,GACF,CAEJ,EASA,SAAS41K,GAAsB3nF,GAAuB,CACpD,KAAM,CAACmoF,EAAmB,EAAIpB,EAAqC,EAC7D,CAACqB,EAAe,EAAIpB,EAA+B,EAEnD,CAACj+K,GAAS0hB,EAAK,KAAI6qB,EAAA,IAAS,SACjB,QAAQ,IACrB0qD,GAAM,IAAI,MAAOv+C,IAAS,CACxB,MAAM68C,GAAa,MAAM8pF,GACvB,CAAE,mBAAiB,MAAmB3mI,GAAK,UAAU,WAAW,CAAE,EAClE,EACF,EAAE,OAAO,EAGT,GAAI68C,GAAW,aAAe78C,GAAK,UAAU,cAAgB,KAA2B,CAEtF,MAAM4mI,GAAiB,MAAMF,GAC3B,CACE,UAAW1mI,GAAK,UAAU,KAC1B,MAAOA,GAAK,MAAM,KAClB,YAAa68C,GAAW,WAC1B,EACA,EACF,EAAE,OAAO,KAET,MAA8B78C,GAAM4mI,EAAc,CACpD,CAEA,OAAO5mI,EACT,CAAC,CACH,EAECu+C,EAAK,EAER,sBAAU,IAAM,CACV8mF,EACF/9K,GAAQ,QAAQ,EAIhBA,GAAQ,MAAM,CAElB,EAAG,CAACi3F,GAAOj3F,EAAO,CAAC,EAEZ0hB,EACT,CAEO,MAAM,GAAata,KAA0B,CAClD,iBAAe,OAAI,CACjB,CAACA,GAAM,YAAY,GAAG,IAAI,CAAC,EAAG,CAC5B,WAAY,MACd,CACF,CAAC,EACD,gBAAc,OAAI,CAChB,QAASA,GAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,WAAS,OAAI,CACX,MAAO,OACP,aAAcA,GAAM,MAAM,OAAO,OACnC,CAAC,EACD,mBAAiB,OAAI,CACnB,KAAM,CACR,CAAC,EACD,cAAY,OAAI,CACd,QAAS,OACT,OAAQ,EACR,WAAYA,GAAM,QAAQ,CAAC,EAC3B,cAAeA,GAAM,QAAQ,GAAI,EACjC,eAAgB,SAChB,WAAY,aAAaA,GAAM,OAAO,OAAO,MAAM,GACnD,YAAa,aAAaA,GAAM,OAAO,OAAO,MAAM,GACpD,aAAc,aAAaA,GAAM,OAAO,OAAO,MAAM,GACrD,MAAO,MACT,CAAC,CACH,GAEA,SAAS23K,GACPT,GACAD,GACAE,GACAgB,GACA,CACA,SAAO,WAAQ,IAA8B,CAC3C,MAAMxuK,GAAkC,CACtC,CACE,GAAI,QACJ,SAAO,KAAE,2CAA4C,OAAO,EAC5D,WAAY,CAAC,CAAE,KAAM2nC,EAAK,OAAM,OAAC8mI,EAAA,CAAc,KAAA9mI,EAAA,CAAY,EAC3D,KAAM,OACR,EACA,CACE,GAAI,OACJ,SAAO,KAAE,0CAA2C,MAAM,EAE1D,WAAY,CAAC,CAAE,KAAMA,EAAK,IAAMA,GAAK,KACrC,KAAM6lI,GAA2B,EAAI,CACvC,EACA,CACE,GAAI,WACJ,MAAO,GAEP,WAAY,CAAC,CAAE,KAAM7lI,EAAK,IAAM,CAC9B,KAAM,CAAE,SAAAglI,GAAU,UAAAziI,EAAU,EAAIvC,GAE1B+mI,MAAa,MAAoB/B,IAAYziI,EAAS,EAC5D,OAAIwkI,MACK,OAAC/6B,EAAA,EAAiB,CAAC,SAAU+6B,GAAW,SAAU,EAG9B,IAAc,QAAQ,KAAKxkI,EAAS,GAK9CA,GAAU,cAAc,cACvB,OAACykI,EAAA,GAAiB,EAAC,EAJ9B,IAKX,EACA,KAAM,OACR,EACA,CACE,GAAI,WACJ,MAAO,GACP,WAAY,CAAC,CAAE,KAAMC,EAAa,OAAM,OAACtC,EAAgB,CAAC,KAAMsC,EAAA,CAAc,EAC9E,KAAM,MACR,EACA,CACE,GAAI,SACJ,SAAO,KAAE,4CAA6C,QAAQ,EAE9D,WAAY,CAAC,CAAE,KAAM,CAAE,SAAAjC,GAAU,MAAA5mK,EAAM,CAAE,IAAO4mK,MAAW,OAACJ,EAAU,CAAC,KAAMI,EAAA,CAAU,EAAK,KAC5F,KAAM,MACR,CACF,EACA,OAAIY,IACFvtK,GAAQ,KAAK,CACX,GAAI,UACJ,SAAO,KAAE,qCAAsC,SAAS,EAExD,WAAY,CAAC,CAAE,KAAM2nC,EAAK,OACjB,OAACszC,EAAA,EAAQ,CAAC,MAAOtzC,GAAK,YAAY,KAAW,OAAO,GAAK,GAAI,EAEtE,KAAM6lI,GAA2B,EAAI,CACvC,CAAC,EAGCA,IACFxtK,GAAQ,KAAK,CACX,GAAI,iBACJ,SAAO,KAAE,6CAA8C,iBAAiB,EACxE,WAAY,CAAC,CAAE,KAAM2nC,EAAK,IAAM,CAC9B,MAAMknI,MAAe,MAAgClnI,GAAK,UAAU,eAAgBA,GAAK,MAAM,QAAQ,EAEvG,OACEknI,OACE,OAAC/zK,EAAA,GACC,UAAU,MAEV,QAAS,GAAG+zK,IAAc,QAAQ,GAClC,MAAM,OAEN,mBAAC,QAAM,SAAAA,IAAc,UAAU,EACjC,CAGN,EACA,KAAM,CACR,CAAC,EAGCvB,IACFttK,GAAQ,KAAK,CACX,GAAI,QACJ,SAAO,KAAE,mCAAoC,OAAO,EAEpD,WAAY,CAAC,CAAE,KAAM2nC,EAAK,IAAM,CAC9B,KAAM,CAAE,UAAAsC,GAAW,MAAAlkC,EAAM,EAAI4hC,GAS7B,OAPoB5hC,GAAM,OAAS,aAEjC,OAAC+oK,EAAA,EAAY,CAAC,UAAW7kI,GAAU,KAAM,KAEzC,OAAC6kI,EAAA,EAAY,CAAC,UAAW7kI,GAAU,KAAM,MAAOlkC,GAAM,KAAM,CAIhE,EACA,KAAM,CACR,CAAC,EAEH/F,GAAQ,KAAK,CACX,GAAI,UACJ,SAAO,KAAE,qCAAsC,SAAS,EAExD,WAAY,CAAC,CAAE,KAAM2nC,EAAK,OAAM,OAAConI,GAAA,CAAgB,KAAApnI,GAAY,eAAgB6mI,EAAA,CAAgB,EAC7F,KAAM,OACR,CAAC,EAEMxuK,EACT,EAAG,CAACwtK,GAA0BD,GAAmBD,GAAiBkB,EAAc,CAAC,CACnF,CAEA,SAASC,EAAc,CAAE,KAAA9mI,EAAK,EAA2B,CACvD,KAAM,CAAE,WAAA8kI,GAAY,WAAAC,GAAY,SAAA5e,EAAS,EAAIkhB,GAAcrnI,EAAI,EAC/D,SAAO,OAAC6kI,GAAS,CAAC,KAAA7kI,GAAY,WAAA8kI,GAAwB,WAAAC,GAAwB,SAAA5e,EAAA,CAAoB,CACpG,CAEA,SAASihB,GAAgB,CAAE,KAAApnI,GAAM,eAAAsnI,EAAe,EAAoD,CAClG,MAAMh3K,MAAS,MAAW,EAAS,EAC7B,CAAE,WAAAw0K,GAAY,WAAAC,EAAW,EAAIsC,GAAcrnI,EAAI,EAErD,OAAIsnI,MACK,OAAC,IAAQ,CAAC,mBAAoBh3K,GAAO,gBAAiB,KAI7D,OAACmxC,EAAA,GACC,QAAO,GACP,eAAgB,CAACqjI,IAAc,CAACC,GAChC,KAAA/kI,GACA,YAAaA,GAAK,UAAU,YAC9B,CAEJ,CAEO,SAASunI,GAAkB3lI,GAA0B,CAC1D,MAAMy7C,MAAamqF,EAAA,GAA4Bx+J,IAAUA,GAAM,UAAU,EACnE/hB,MAAkB,MAAmB26C,EAAW,EAGtD,MADyB,EAAQy7C,GAAWp2F,EAAe,GAAG,MAEhE,CAEA,SAASogL,GAAcrnI,GAAoB,CACzC,MAAM4B,GAAc5B,GAAK,UAAU,YAE7BynI,GAAmBF,GAAkB3lI,EAAW,EAChD,CAAE,SAAA8lI,EAAS,KAAIz2D,EAAA,GAAYrvE,EAAW,EAEtC,CAAE,SAAAojI,GAAU,UAAAziI,EAAU,EAAIvC,GAIhC,GAAIqlI,GAA0B,CAAC,IAAc,QAAQ,KAAK9iI,EAAS,EACjE,MAAO,CAAE,WAAY,GAAO,WAAY,GAAO,SAAU,EAAM,EAGjE,MAAMuiI,GAAa,GAAQ4C,IAAYD,IAAoBzC,IAAY,CAACziI,IAClEwiI,GAAa,GAAQ2C,IAAYD,IAAoBllI,IAAa,CAACyiI,IACnE7e,GAAW,IAAc,QAAQ,KAAK5jH,EAAS,MAAK,MAAaA,EAAS,EAEhF,MAAO,CAAE,WAAAuiI,GAAY,WAAAC,GAAY,SAAA5e,EAAS,CAC5C,C,yDCzVA,MAAMwhB,CAAsB,CAA5B,cACE,wBAA6C,CAAC,EAI9C,mCAAyE,IAAI,GAAI,CAEjF,qBAAqBC,EAA6B,CAChD,KAAK,mBAAqB,KAAK,mBAAmB,OAAOA,CAAK,CAChE,CAGA,0BAA0B35J,EAAa25J,EAAmC,CACxE,KAAK,8BAA8B,IAAI35J,EAAK25J,CAAK,CACnD,CAGA,yBAAkD,CAChD,OAAO,KAAK,kBACd,CAEA,2BAA2BC,EAAwC,CAKjE,OAJsB,MAAM,KAAK,KAAK,8BAAgCthL,GAAUA,EAAM,CAAC,CAAC,EAAE,OACvFuhL,GAAQA,EAAI,QAAUD,CACzB,EAEqB,IAAKE,GAAOA,EAAG,oBAAoB,CAC1D,CACF,CAKO,MAAMC,EAAwB,IAAIL,EAK5BM,EAAsB,IAAIN,C,kDC7ChC,MAAMtyI,EAAgB,SAKtB,IAAK6yI,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MAFIA,IAAAA,GAAA,IAWAC,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAHEA,IAAAA,GAAA,IAWAC,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAFEA,IAAAA,GAAA,IASL,MAAMC,EAA+D,CAC1E,OAAQ,CAAC,CACX,EASat1K,EAAmC,CAC9C,cAAe,CAAC,CAClB,C,4RClDO,MAAMu1K,EAAwB,CAAC,CAAE,MAAA/hL,EAAO,SAAAJ,CAAS,IAAa,CACnE,KAAM,CAAC8nB,EAAKs6J,CAAM,KAAI,YAAS,EAAE,EAC3B,CAAC5rK,GAAM6rK,CAAO,KAAI,YAAS,EAAE,EAC7B,CAACniL,GAAMoiL,EAAO,KAAI,YAA6B,KAAmB,MAAM,EAExEC,EAAaz6J,GAAgB,CACjCs6J,EAAOt6J,CAAG,CACZ,EAEM06J,EAAchsK,GAAiB,CACnC6rK,EAAQ7rK,CAAI,CACd,EAEMisK,EAAcviL,GAAyB,CAE3CoiL,GAAQpiL,EAAK,KAA2B,CAC1C,EAEMwiL,EAAc,IAAM,CACxB,IAAIC,EAEAviL,EACFuiL,EAAeviL,EAAM,OAAQ+P,IAAMA,GAAE,MAAQ2X,CAAG,EAEhD66J,EAAe,CAAC,EAGlBA,EAAa,KAAK,CAAE,IAAA76J,EAAK,KAAAtR,GAAM,KAAAtW,EAAK,CAAC,EACrCyiL,EAAa,KAAK,CAACv9J,GAAG9e,KAAM8e,GAAE,IAAI,cAAc9e,GAAE,GAAG,CAAC,EACtDtG,EAAS2iL,CAAY,EAErBP,EAAO,EAAE,EACTC,EAAQ,EAAE,EACVC,GAAQ,KAAmB,MAAM,CACnC,EAEMM,GAAkB96J,GAAgB,IAAM,CAC5C,MAAMq6F,GAAmB/hH,EAAM,OAAQ+D,IAAaA,GAAS,MAAQ2jB,CAAG,EACxE9nB,EAASmiH,EAAgB,CAC3B,EAEM0gE,GAAsBrsK,KAAS,IAAMsR,IAAQ,GAE7Cg7J,GAAwC,CAC5C,CAEE,MAAO,SACP,MAAO,KAAmB,MAC5B,CACF,EAEA,SACE,QAAC,OACC,qBAAC/sI,EAAA,EAAK,CAAC,UAAU,MACf,oBAAC6O,EAAA,GACC,MAAO98B,EACP,SAAW3X,GAAMoyK,EAAUpyK,EAAE,cAAc,KAAK,EAChD,eAAa,KAAE,wCAAyC,KAAK,EAC7D,MAAO,IACT,KACA,OAACy0C,EAAA,GACC,MAAOpuC,GACP,SAAWrG,GAAMqyK,EAAWryK,EAAE,cAAc,KAAK,EACjD,eAAa,KAAE,yCAA0C,MAAM,EAC/D,MAAO,IACT,KACA,OAACgyC,EAAA,GACC,MAAOjiD,GACP,SAAUuiL,EACV,eAAa,KAAE,4CAA6C,MAAM,EAClE,QAASK,GACT,SAAU,IACV,SAAU,GACV,MAAO,OACT,KACA,OAACluI,EAAA,GACC,gBAAY,KAAE,uCAAwC,KAAK,EAC3D,KAAK,cACL,QAAS,IAAM8tI,EAAY,EAC3B,SAAUG,EAAA,CACZ,GACF,KAEA,OAAC9sI,EAAA,EAAK,CAAC,UAAU,SACd,SAAA31C,EAAM,IAAKi1E,MACV,QAACt/B,EAAA,EAAK,CAAiB,UAAU,MAC/B,oBAAC6O,EAAA,EAAK,CAAC,SAAQ,GAAC,MAAOywB,EAAM,IAAK,MAAO,IAAK,KAC9C,OAACzwB,EAAA,EAAK,CAAC,SAAQ,GAAC,MAAOywB,EAAM,KAAM,MAAO,IAAK,KAC/C,OAACzwB,EAAA,EAAK,CAAC,SAAQ,GAAC,MAAOywB,EAAM,KAAM,MAAO,IAAK,KAC/C,OAACzgC,EAAA,GACC,gBAAY,KAAE,0CAA2C,QAAQ,EACjE,QAASguI,GAAevtG,EAAM,GAAG,EACjC,KAAK,YACP,IARUA,EAAM,GASlB,CACD,EACH,GACF,CAEJ,E,gDCvFA,MAAM0tG,EAAsB,SAEtBC,EAA0B,OACR,KAAiB,EAElB,QAAQ,CAC3B,OAAS1sH,GAAOA,EAAG,OAAS,IAC9B,CAAC,EAGU2sH,EAAmB,CAAC,CAAE,WAAAC,EAAY,cAAA1pF,EAAe,SAAAx5F,CAAS,IAA6B,CAClG,MAAMmjL,KAAwC,WAAQ,IAAM,CAC1D,MAAMv/K,GAA8B,CAClC,CACE,SAAO,KAAE,yDAA0D,qBAAqB,EACxF,MAAOm/K,EACP,eAAa,KACX,+DACA,oCACF,EACA,KAAM,eACR,CACF,EAEA,OAAIj8K,EAAA,EAAO,eAAe,gBACKk8K,EAAwB,EAEhC,QAAS1sH,GAAO,CACnC1yD,GAAQ,KAAK,CACX,MAAO0yD,EAAG,KACV,MAAOA,EAAG,IACV,OAAQA,EAAG,KAAK,KAAK,MAAM,KAC7B,CAAC,CACH,CAAC,EAGI1yD,EACT,EAAG,CAAC,CAAC,EAECw/K,GAAkB,IAClBF,IAAe,KAAW,MACrBH,EACEG,IAAe,KAAW,UAAY1pF,EACxCA,EAEFupF,EAGHM,EAA0BC,IAA0B,CACxD,GAAIA,KAAkBP,EACpB/iL,EAAS+iL,CAAmB,MACvB,CAEL,MAAMQ,EADuBP,EAAwB,EACL,KAAM1sH,GAAOA,EAAG,MAAQgtH,EAAa,EACjFC,EACFvjL,EAASujL,CAAkB,EAE3B,QAAQ,MAAM,wDAAyDD,EAAa,CAExF,CACF,EAEMve,GAAeqe,GAAgB,EAErC,SACE,OAAC74K,EAAA,IACC,MAAOw6J,GACP,QAASoe,EACT,SAAWr/G,IAAau/G,EAAuBv/G,GAAS,KAAM,EAC9D,eAAa,KAAE,wDAAyD,mBAAmB,EAC7F,CAEJ,EC/Ea0/G,EAAe,CAAC,CAAE,MAAApjL,EAAO,SAAAJ,EAAU,YAAAwkJ,EAAa,kBAAAi/B,EAAoB,EAAM,IAAa,CAClG,MAAMt5K,MAAS,MAAWuD,CAAS,EAE7Bg2K,EAAqBtjL,EAAM,KAAK,CAAC,CAAC0nB,GAAK1nB,EAAK,IAAM0nB,KAAQ,cAAc,EAExE,CAAC67J,GAAWC,EAAY,KAAI,YAAS,EAAE,EACvC,CAACC,EAAYC,CAAa,KAAI,YAAS,EAAE,EACzC,CAACC,EAAuBC,CAAwB,KAAI,YAAS,EAAE,KAErE,aAAU,IAAM,CACVD,IAA0B,GAC5BC,EAAyBD,CAAqB,EACrCL,GACTM,EAAyBN,EAAmB,CAAC,CAAC,CAElD,EAAG,CAACK,EAAuBL,CAAkB,CAAC,EAG9C,KAAM,CAACO,GAAUC,EAAW,KAAI,YAAS,KAAK,OAAO,EAAE,SAAS,CAAC,EAE3DC,GAAoBN,IAAuB,CAC/CC,EAAcD,EAAU,CAC1B,EAEMO,EAAmBT,IAAsB,CAC7CC,GAAaD,EAAS,CACxB,EAEMU,GAAev8J,IAAgB,IAAM,CACzC,MAAMw8J,GAAgBlkL,EAAM,OAAQwqG,IAAUA,GAAM,CAAC,IAAM9iF,EAAG,EAC9D9nB,EAASskL,EAAa,CACxB,EAEMC,GAAYC,IAAmC,CACnD,IAAIC,GAEArkL,EACFqkL,GAAYrkL,EAAM,OAAQ+P,IAAMA,GAAE,CAAC,KAAOq0K,GAAcA,GAAY,CAAC,EAAIb,GAAU,EAEnFc,GAAY,CAAC,EAGfA,GAAU,KAAKD,IAAe,CAACb,GAAWE,CAAU,CAAC,EACrDY,GAAU,KAAK,CAACr/J,GAAG9e,KAAM8e,GAAE,CAAC,EAAE,cAAc9e,GAAE,CAAC,CAAC,CAAC,EACjDtG,EAASykL,EAAS,EAElBb,GAAa,EAAE,EACfE,EAAc,EAAE,EAChBI,GAAY,KAAK,OAAO,EAAE,SAAS,CAAC,CACtC,EAEMQ,GAA+BtkL,IAAkB,CACrD4jL,EAAyB5jL,EAAK,EAC9BmkL,GAAS,CAAC,eAAgBnkL,EAAK,CAAC,CAClC,EAEMukL,GAAsBhB,KAAc,IAAME,IAAe,GAE/D,SACE,QAAC,OACC,qBAAC9tI,EAAA,EAAK,CAAC,UAAU,MACf,oBAACkgF,EAAA,GACC,MAAO0tD,GACP,SAAUS,EACV,YAAA5/B,EACA,eAAa,KAAE,wCAAyC,KAAK,EAC7D,MAAO,CAAE,MAAO,GAAI,EACtB,KACA,OAACvuB,EAAA,GACC,MAAO4tD,EACP,SAAUM,GACV,YAAA3/B,EACA,eAAa,KAAE,0CAA2C,OAAO,EACjE,MAAO,CAAE,MAAO,GAAI,EACtB,KACA,OAAC5vG,EAAA,GACC,gBAAY,KAAE,uCAAwC,KAAK,EAC3D,KAAK,cACL,QAAS,IAAM2vI,GAAS,EACxB,SAAUI,EAAA,CACZ,IApB0BV,EAqB5B,KAEA,OAACluI,EAAA,EAAK,CAAC,UAAU,SACd,eAAM,KAAK31C,EAAM,OAAQwqG,IAAUA,GAAM,CAAC,IAAM,cAAc,GAAK,CAAC,CAAC,EAAE,IAAKv1B,OAC3E,QAACt/B,EAAA,EAAK,CAAgB,UAAU,MAC9B,oBAAC6O,EAAA,EAAK,CAAC,SAAQ,GAAC,MAAOywB,GAAM,CAAC,EAAG,KACjC,OAACzwB,EAAA,EAAK,CAAC,SAAQ,GAAC,MAAOywB,GAAM,CAAC,EAAG,KACjC,OAACzgC,EAAA,GACC,gBAAY,KAAE,0CAA2C,QAAQ,EACjE,QAASyvI,GAAYhvG,GAAM,CAAC,CAAC,EAC7B,KAAK,YACP,IAPUA,GAAM,CAAC,CAQnB,CACD,EACH,EAECouG,MACC,OAAC,OAAI,UAAWt5K,GAAO,YACrB,oBAAC4rC,EAAA,EAAK,CAAC,UAAU,MACf,oBAAC6O,EAAA,EAAK,CAAC,MAAO,eAAgB,SAAQ,GAAC,KACvC,OAACr6C,EAAA,IACC,SAAWq6K,IAAWF,GAA4BE,GAAO,KAAe,EACxE,QAAS,KACT,MAAOb,CAAA,CACT,GACF,EACF,GAEJ,CAEJ,EAEMr2K,EAAanF,IAA0B,CAC3C,eAAa,OAAI,CACf,UAAWA,EAAM,QAAQ,CAAC,EAC1B,aAAcA,EAAM,QAAQ,CAAC,EAC7B,SAAU,GACZ,CAAC,CACH,GC7FMs8K,EAAc,GAEdC,EAAoC,CACxC,OAAQ,KAAkB,KAC1B,IAAK,GACL,KAAM,KACN,YAAa,CAAC,EACd,QAAS,CAAC,CAAC,eAAgB,kBAAkB,CAAC,CAChD,EAEaC,KAAe,QAAK,CAAC,CAAE,MAAA/yK,EAAO,MAAA5R,EAAO,SAAAJ,EAAU,YAAAwkJ,EAAa,aAAAwgC,EAAa,IAAyB,CAC7G,MAAM76K,KAAS,MAAW,CAAS,EAC7B5B,MAAQ,MAAU,EAElB08K,GAAkB,IAClB7kL,EAAM,OAAS,KAAW,SAE1BA,EAAM,KAAW,QAAQ,GAAK,CAC5B,GAAG0kL,EACH,cAAe,EACjB,EAIG1kL,EAAM,KAAW,KAAK,GAAK0kL,EAG9BI,EAAsB5sG,IAAqD,CAC/E,MAAM6sG,GAAY/kL,EAAM,OAAS,KAAW,SAAW,KAAW,SAAW,KAAW,MAClFglL,GAAaH,GAAgB,EAE7BI,GAAgB,CACpB,GAAGD,GACH,GAAG9sG,GACH,GAAIl4E,EAAM,OAAS,KAAW,UAAY,CAExC,cAAgBglL,GAA+B,eAAiB,EAClE,CACF,EAEAplL,EAASgS,EAAO,CACd,GAAG5R,EACH,CAAC+kL,EAAS,EAAGE,EACf,CAAC,CACH,EAEMC,EAC+CriL,IAClDyO,IAAkD,CACjDwzK,EAAmB,CAAE,CAACjiL,EAAK,EAAGyO,EAAS,CAAC,CAC1C,EAEI6zK,EAAiB19K,IAAkB,CACvC7H,EAASgS,EAAO,CAAE,GAAG5R,EAAO,MAAAyH,EAAM,CAAC,CACrC,EAEM29K,EAAwBC,IAAyB,CACrDzlL,EAASgS,EAAO,CAAE,GAAG5R,EAAO,aAAAqlL,EAAa,CAAC,CAC5C,EAEMC,GAAqB7+G,IAAgC,CACzD7mE,EAASgS,EAAO,CACd,GAAG5R,EACH,UAAAymE,EACF,CAAC,CACH,EAEM8+G,GAAoB,IAAM,CAC9B3lL,EAASgS,EAAO,CAAE,GAAG5R,EAAO,SAAU,CAACA,EAAM,QAAS,CAAC,CACzD,EAEMwlL,GAAcN,EAAa,KAAK,EAChCO,EAAeP,EAAa,MAAM,EAClCQ,GAAiBR,EAAa,QAAQ,EACtCS,GAAsBT,EAAa,aAAa,EAChDU,GAAkBV,EAAa,SAAS,EAExCW,GAA2BC,IAA4B,CAC3DlmL,EAASgS,EAAO,CACd,GAAG5R,EACH,MAAO,CACL,GAAGA,EAAM,MACT,gBAAA8lL,EACF,CACF,CAAC,CACH,EAEMC,GAAsBC,IAAwD,CAClF,MAAMC,GAAa,CACjB,MAAOjmL,EAAM,MACb,aAAcA,EAAM,aACpB,SAAUA,EAAM,SAChB,UAAWA,EAAM,UACjB,MAAOA,EAAM,KACf,EAEI,OAAOgmL,IAAmB,SAC5BpmL,EAASgS,EAAO,CACd,GAAGq0K,GACH,KAAM,KAAW,MACjB,CAAC,KAAW,KAAK,EAAGpB,GAAgB,CACtC,CAAC,EAEDjlL,EAASgS,EAAO,CACd,GAAGq0K,GACH,KAAM,KAAW,SACjB,CAAC,KAAW,QAAQ,EAAG,CACrB,GAAGpB,GAAgB,EACnB,cAAemB,GAAe,GAChC,CACF,CAAC,CAEL,EAEME,GAAa,CAAC/hL,GAAO,OAAS,CAClC,GAAI,CACF,MAAMm0D,GAAO,KAAK,MAAMn0D,EAAI,EAC5B,SAAO,OAACgiL,EAAA,EAAa,CAAC,KAAA7tH,EAAA,CAAY,CACpC,OAAS5nD,GAAO,CACd,OAAIA,cAAiB,MACZ,0BAA0BA,GAAM,OAAO,GAEvC,uBAEX,CACF,EAEM01K,GAAevB,GAAgB,EAC/BwB,GACJD,GAAa,SAAW,KAAkB,KAC1CA,GAAa,SAAS,KACpB,CAAC,CAAChwK,GAAMpW,EAAK,IAAwBoW,KAAS,gBAAkBpW,KAAU,kBAC5E,EAEF,SACE,QAAC,OAAI,UAAW+J,EAAO,SACrB,oBAACsH,EAAA,EAAK,CAAC,SAAO,KAAE,8CAA+C,OAAO,EAAG,UAAWtH,EAAO,WACzF,mBAAC8rH,EAAA,GACC,MAAO71H,EAAM,MACb,SAAUmlL,EACV,YAAA/gC,EACA,UAAWpkJ,EAAM,QAAU,GAC3B,eAAa,KAAE,0DAA2D,cAAc,EAC1F,EACF,KAEA,OAACqR,EAAA,GACC,SAAO,KAAE,oDAAqD,sBAAsB,EACpF,eAAa,KACX,sDACA,+DACF,EACA,UAAWtH,EAAO,WAElB,mBAAC8rH,EAAA,GACC,MAAO71H,EAAM,aACb,SAAUolL,EACV,YAAAhhC,EACA,eAAa,KACX,gEACA,8CACA,CAAE,YAAapkJ,EAAM,OAAS,MAAO,CACvC,EACF,EACF,EACC4kL,OACC,OAACvzK,EAAA,GACC,SAAO,KAAE,+CAAgD,WAAW,EACpE,eAAa,KACX,uDACA,8DACF,EAEA,mBAAC3D,EAAA,EAAM,CAAC,MAAO1N,EAAM,UAAY,GAAO,SAAUulL,EAAA,CAAmB,EACvE,KAGF,OAACe,EAAA,EAAc,CACb,mBAACzyK,EAAA,EAAW,CAAC,SAAO,KAAE,4CAA6C,YAAY,EAAG,WAAY4wK,EAC5F,mBAAC5B,EAAA,CACC,WAAY7iL,EAAM,KAClB,cAAeA,IAAQ,KAAW,QAAQ,GAAG,cAC7C,SAAU+lL,EAAA,CACZ,EACF,EACF,KAEA,OAACO,EAAA,EAAc,CACb,mBAACzyK,EAAA,EAAW,CAAC,SAAO,KAAE,+CAAgD,QAAQ,EAAG,WAAY4wK,EAC3F,mBAAC1gH,EAAA,GACC,MAAOqiH,GAAa,OACpB,QAAS,KACT,SAAUV,GACV,UAAS,GACX,EACF,EACF,KAEA,OAACY,EAAA,EAAc,CACb,mBAACzyK,EAAA,EAAW,CAAC,SAAO,KAAE,kCAAmC,KAAK,EAAG,WAAY4wK,EAAa,KAAM,GAC9F,mBAAC5uD,EAAA,GACC,MAAOuwD,GAAa,IACpB,SAAUZ,GACV,YAAAphC,EACA,eAAa,KAAE,wCAAyC,KAAK,EAC/D,EACF,EACF,KAEA,OAAC/yI,EAAA,GACC,SAAO,KAAE,kDAAmD,WAAW,EACvE,UAAWtH,EAAO,SAClB,SAAQ,GAER,mBAACg4K,EAAqB,CAAC,SAAUuD,GAAmB,MAAOtlL,EAAM,WAAa,CAAC,EAAG,EACpF,KAEA,OAACqR,EAAA,GACC,SAAO,KAAE,qDAAsD,kBAAkB,EACjF,UAAWtH,EAAO,SAElB,mBAACq5K,EAAY,CAAC,MAAOgD,GAAa,aAAe,CAAC,EAAG,SAAUT,GAAqB,YAAAvhC,CAAA,CAA0B,EAChH,KAEA,OAAC/yI,EAAA,EAAK,CAAC,SAAO,KAAE,sCAAuC,SAAS,EAC9D,mBAAC+xK,EAAA,CACC,MAAOgD,GAAa,SAAW,CAAC,EAChC,SAAUR,GACV,YAAAxhC,EACA,kBAAmB,GACrB,EACF,EAECgiC,GAAa,SAAW,KAAkB,QACzC,OAAC/0K,EAAA,EAAK,CAAC,SAAO,KAAE,6CAA8C,MAAM,EAAG,UAAWtH,EAAO,WACvF,mBAAC8rH,EAAA,GACC,MAAOuwD,GAAa,KACpB,SAAUX,EACV,YAAArhC,EACA,KAAM,IAAgB,gBACxB,EACF,EAGDiiC,OACC,oBACE,oBAAC,OAAG,EACHH,GAAWE,GAAa,IAAI,GAC/B,KAGF,OAAC/0K,EAAA,EAAK,CAAC,SAAO,KAAE,wCAAyC,cAAc,EAAG,MAAO,CAAE,UAAW,KAAM,EAClG,mBAACwC,EAAA,GACC,SAAO,KAAE,sDAAuD,OAAO,EACvE,WAAY4wK,EACZ,UAAW16K,EAAO,YAElB,mBAACw8K,EAAA,IACC,MAAOvmL,GAAO,OAAO,iBAAmBmI,GAAM,OAAO,UAAU,KAC/D,SAAU09K,EAAA,CACZ,EACF,EACF,GACF,CAEJ,CAAC,EAEK,EAAa19K,IAA0B,CAC3C,YAAU,OAAI,CACZ,aAAcA,EAAM,QAAQ,CAC9B,CAAC,EACD,YAAU,OAAI,CACZ,cAAeA,EAAM,QAAQ,CAAC,EAC9B,WAAY,OACZ,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,EACD,YAAU,OAAI,CACZ,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,cAAY,OAAI,CACd,YAAa,CACf,CAAC,EACD,eAAa,OAAI,CACf,QAAS,OACT,WAAY,QACd,CAAC,CACH,GAEAw8K,EAAa,YAAc,eCxTpB,MAAM6B,EAA2B,CAAC,CACvC,OAAA72J,EACA,MAAA/d,EACA,OAAAo0F,EACA,SAAAp2B,EACA,eAAA62G,GACA,aAAA7B,CACF,IAAqC,CACnC,KAAM,CAAC8B,GAAaC,EAAc,KAAI,YAASh3J,CAAM,EAE/Ci3J,EACJF,GAAY,MAAM,KAAK,IAAM,IAC7B,CAACA,GAAYA,GAAY,IAAI,GAAG,KAAK,KAAK,GACzCA,GAAY,OAAS,KAAW,UAAY,CAACA,GAAY,KAAW,QAAQ,GAAG,cAElF,SACE,oBACE,oBAAC/B,EAAA,CACC,MAAO+B,GACP,MAAA90K,EACA,SAAU,CAACA,EAAO+d,IAAW,CAC3Bg3J,GAAeh3J,CAAM,CACvB,EACA,YAAa82J,GAAe,EAC5B,aAAA7B,CAAA,CACF,KACA,QAACh3I,EAAA,EAAM,UAAN,CACC,oBAAC5+B,EAAA,GAAM,CAAC,QAAQ,YAAY,QAAS,IAAM4gE,EAASh+D,CAAK,EAAG,KAAK,UAC/D,mBAAC,KAAK,CAAC,QAAQ,oCAAoC,kBAAM,EAC3D,KACA,OAAC5C,EAAA,IACC,QAAS,IAAM,CACbg3F,EAAOp0F,EAAO80K,EAAW,CAC3B,EACA,SAAUE,EAEV,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,gBAAI,EACvD,GACF,GACF,CAEJ,EChDaC,EAAsB,CAAC,CAClC,QAAA9lL,EACA,eAAA0lL,EACA,aAAA7B,EAAe,GACf,GAAG/1K,CACL,OACE,OAACi4K,EAAA,EAAyB,CAAS,KAAK,SAAS,MAAO/lL,EAAU,GAAG8N,EAClE,UAACkG,GAAMnD,EAAOo0F,GAAQp2B,QACrB,OAAC42G,EAAA,CACC,MAAA50K,EACA,OAAQmD,IAAQ,KAChB,KAAMlG,EAAK,KACX,OAAAm3F,GACA,SAAAp2B,GACA,eAAA62G,EACA,aAAA7B,CAAA,CACF,EAEJ,C,+GCvBK,MAAMmC,EAAsB,CAAC1tJ,EAAmB2tJ,IAA4C,CACjG,MAAM54K,EAAQ,CACZ,QAAM,MAAM44K,EAAU,IAAI,EAC1B,MAAI,MAAMA,EAAU,EAAE,CACxB,EAEMC,GAAY74K,EAAM,GAAG,QAAQ,EAAIA,EAAM,KAAK,QAAQ,GAAK,EAC/D,IAAI4iB,EAAYC,EAEhB,OAAIoI,IAAc,IAChBrI,EAAK5iB,EAAM,GAAG,QAAQ,EAAI64K,EAC1Bh2J,EAAO7iB,EAAM,KAAK,QAAQ,EAAI64K,GACrB5tJ,IAAc,GACvBrI,EAAK5iB,EAAM,GAAG,QAAQ,EAAI64K,EAC1Bh2J,EAAO7iB,EAAM,KAAK,QAAQ,EAAI64K,EAC1Bj2J,EAAK,KAAK,IAAI,GAAK5iB,EAAM,GAAG,QAAQ,EAAI,KAAK,IAAI,IACnD4iB,EAAK,KAAK,IAAI,EACdC,EAAO7iB,EAAM,KAAK,QAAQ,KAG5B4iB,EAAK5iB,EAAM,GAAG,QAAQ,EACtB6iB,EAAO7iB,EAAM,KAAK,QAAQ,GAGrB,CAAE,KAAA6iB,EAAM,GAAAD,CAAG,CACpB,EAEak2J,EAAqB,CAAC94K,EAAkB+4K,IAAsC,CACzF,MAAMF,EAAW74K,EAAM,GAAG,QAAQ,EAAIA,EAAM,KAAK,QAAQ,EACnDg5K,EAASh5K,EAAM,GAAG,QAAQ,EAAI64K,EAAW,EAEzCI,EAAcJ,IAAa,EAAI,IAAQA,EAAWE,EAElDn2J,EAAKo2J,EAASC,EAAc,EAGlC,MAAO,CAAE,KAFID,EAASC,EAAc,EAErB,GAAAr2J,CAAG,CACpB,EAEO,eAAes2J,GAAqD,CACzE,MAAMvjI,EAAM,MAAM,UAAU,UAAU,SAAS,EAC/C,IAAI31C,EAEJ,GAAI,CAGF,OAFAA,EAAQ,KAAK,MAAM21C,CAAG,EAElB,CAAC31C,EAAM,MAAQ,CAACA,EAAM,GACjB,CAAE,MAAO21C,EAAK,QAAS,EAAK,EAG9B,CAAE,MAAA31C,EAAO,QAAS,EAAM,CACjC,MAAY,CACV,MAAO,CAAE,MAAO21C,EAAK,QAAS,EAAK,CACrC,CACF,CAEO,MAAMwjI,EAA4BvnL,MACnC,YAASA,CAAK,GAAKA,EAAM,SAAS,GAAG,KAChC,MAASA,CAAK,EAAE,IAAI,EAEtBA,C,0PCxDF,MAAMwnL,EAAuD,CAACC,EAASC,IAAc,CAC1F,MAAMnyI,EAAOmyI,EAAU,UAAU,KAAK,KAAKD,EAAQ,UAAU,IAAI,EACjE,OAAAC,EAAU,OAAO,QAAS9sK,GAAW,CACnCA,EAAO,MAAQ+sK,EAAsB/sK,EAAO,OAAS,EAAE,EACvDA,EAAO,KAAO,CACZ,GAAGA,EAAO,KAEV,YAAa,CACX,OAAQ26B,EACR,iBAAkB,EACpB,CACF,CACF,CAAC,KACMy4F,EAAA,IAAG05C,CAAS,CACrB,EAEaC,EAAyBt3H,GAAkB,GAAGA,CAAK,WAE1Du3H,EAAwB,mBAEvB,SAASC,EAAoBvrK,EAAsBwrK,EAAwD,CAChH,IAAIC,EACAC,EAEJ,GAAIF,EAAa,CACf,GAAIA,IAAgBF,EAAuB,CACzC,MAAMK,EAAS3rK,EAAU,GAAG,KAAKA,EAAU,IAAI,EAC/CyrK,KAAc,MAASzrK,EAAU,IAAK,EAAE,SAAS2rK,CAAM,EACvDD,KAAY,MAAS1rK,EAAU,EAAG,EAAE,SAAS2rK,CAAM,CACrD,MACEF,KAAc,MAASzrK,EAAU,IAAK,EAAE,SAAS,eAAuBwrK,CAAW,CAAC,EACpFE,KAAY,MAAS1rK,EAAU,EAAG,EAAE,SAAS,eAAuBwrK,CAAW,CAAC,EAGlF,MAAO,CACL,KAAMC,EACN,GAAIC,EACJ,IAAK,CACH,KAAMD,EACN,GAAIC,CACN,CACF,CACF,CAGF,CCrBO,MAAMh9I,UAAuB,IAAiF,CAG5G,YAAYvoB,EAAsC,CAAC,EAAG,CAC3D,MAAM,CACJ,GAAGA,EAEH,KAAM,SACN,GAAI,MACJ,SAAO,MAAoB,CAC7B,CAAC,EAKH,KAAU,oBAAqE,IAAI,KAAyB,KAAM,CAChH,WAAY,CAAC,WAAY,WAAW,CACtC,CAAC,EA2HD,KAAO,eAAiB,IAAM,CAC5B,MAAMpf,EAAQ,KAAK,OACbozB,KAAY,MAAqB,IAAI,EACvCpzB,aAAiB,MACnBozB,EAAU,UAAU,IAAIyxJ,EAAA,EAAqB,CAAE,SAAU7kL,EAAM,OAAO,CAAE,CAAC,CAAC,CAE9E,EAtIE,KAAK,qBAAqB,IAAM,KAAK,YAAY,CAAC,CACpD,CAZA,YAAc,UAAY8kL,CAAA,CAkBlB,aAAc,CACpB,KAAK,MAAM,IACT,KAAK,iBAAkBriL,GAAM,CAC3B,KAAM,CAAE,SAAAsiL,EAAU,UAAA9rK,CAAU,EAAI,KAAK,gBAAgB,KAAK,qBAAqB,EAAE,MAAM,KAAK,EAKxFxW,EAAE,WAAasiL,GACjB,KAAK,SAAS,CAAE,SAAAA,EAAU,MAAO9rK,CAAU,CAAC,CAEhD,CAAC,CACH,EAEA,KAAM,CAAE,UAAAA,CAAU,EAAI,KAAK,gBAAgB,KAAK,qBAAqB,EAAE,MAAM,KAAK,EAGlF,KAAK,SAAS,CACZ,MAAOA,EACP,KAAMA,EAAU,IAAI,KAAK,SAAS,EAClC,GAAIA,EAAU,IAAI,GAAG,SAAS,CAChC,CAAC,CACH,CAEU,yBAAyBA,EAAsC,CACvE,GAAI,KAAK,MAAM,UAAY,KAAK,MAAM,eAAiB,YACrD,OAGF,MAAM+rK,EAAiB,KAAK,gBAAgB/rK,EAAU,KAAK,EAC3D,KAAK,SAAS,CAAE,MAAO+rK,EAAe,UAAW,SAAUA,EAAe,QAAS,CAAC,CACtF,CAGO,gBAAgB5yF,EAAmD,CACxE,MAAM6yF,EAAuC,CAAC,EACxCC,EAAeV,EAAoBpyF,EAAQ,MAAO,KAAK,MAAM,WAAW,EAC9E,GAAI,CAAC8yF,EACH,OAAOD,EAGT,MAAMv4F,EAAU0F,EAAQ,QAAQ,OAAQr9D,GAA0BA,EAAM,mBAAqB,EAAK,EAClG,OAAI23D,EAAQ,QACVu4F,EAAa,KAAK,CAChB,IAAK,CACH,GAAG7yF,EACH,QAAA1F,EACA,MAAOw4F,CACT,EACA,UAAWf,CACb,CAAC,EAEIc,CACT,CAGO,YAAYx/K,EAA2BiW,EAA2BwQ,EAAoC,CAC3G,OACEzmB,EAAK,cAAgBiW,EAAK,aAAewQ,EAAQ,KAAM6I,GAAUA,EAAM,mBAAqB,EAAK,IAAM,MAE3G,CAEQ,gBAAgBowJ,EAAgD,CACtE,KAAM,CAAE,SAAAC,EAAU,UAAA/kC,EAAW,YAAAokC,CAAY,EAAI,KAAK,MAC5CY,EAAa,CAAC,EACdvlC,EAAc,CAAE,SAAU,GAAI,UAAWqlC,CAAgB,EAE/D,GAAIC,EAAU,CACZ,MAAMrlC,EAAuB,KAAW,YAAY,KAAM,KAAK,MAAM,QAAQ,EACvEC,EAAe,oBAA4BD,CAAoB,EAErE,GAAIC,EAAa,QACf,OAAAF,EAAY,SAAW,wBAChBA,EAIT,GAAI,sBAA8BqlC,EAAgB,GAAG,EAAG,CACtD,MAAMhxK,EAAW,KAAK,YAAY,EAClC2rI,EAAY,UAAY,CACtB,KAAM,QAAeE,EAAa,KAAM,OAAW7rI,CAAQ,EAC3D,GAAI,QAAe6rI,EAAa,GAAI,OAAW7rI,CAAQ,EACvD,IAAK,CAAE,KAAM6rI,EAAa,KAAM,GAAIA,EAAa,EAAG,CACtD,EACAqlC,EAAW,KAAKrlC,EAAa,OAAO,CACtC,CACF,CAEA,GAAIK,EAAW,CACb,MAAMD,EAAwB,KAAW,YAAY,KAAM,KAAK,MAAM,SAAS,EAG/E,GAFsB,oBAA4BA,CAAqB,EAErD,QAChB,OAAAN,EAAY,SAAW,oBAChBA,EAGT,MAAMO,EAAY,IAAMD,EACxBilC,EAAW,KAAK,aAAehlC,CAAS,EAExC,MAAMzyH,EAAO,gBAAuByyH,EAAWP,EAAY,UAAU,KAAM,EAAK,EAC1EnyH,EAAK,gBAAuB0yH,EAAWP,EAAY,UAAU,GAAI,EAAI,EAE3E,GAAI,CAAClyH,GAAQ,CAACD,EACZ,OAAAmyH,EAAY,SAAW,oBAChBA,EAGTA,EAAY,UAAY,CAAE,KAAAlyH,EAAM,GAAAD,EAAI,IAAK,CAAE,KAAAC,EAAM,GAAAD,CAAG,CAAE,CACxD,CAEA,GAAI82J,EAAa,CACf,MAAMn+K,EAAS,IAAwB,KAAMiiB,GAAMA,EAAE,QAAUk8J,CAAW,EACpEz5K,EAAO1E,EAAS,eAAeA,EAAO,MAAM,YAAY,CAAC,GAAK,GACpE++K,EAAW,KAAKr6K,CAAI,CACtB,CAEA,OAAA80I,EAAY,YAAW,cAAWulC,EAAW,KAAK,KAAK,CAAC,EACjDvlC,CACT,CASF,CAEA,SAASglC,EAAuB,CAAE,MAAA33J,CAAM,EAAwC,CAC9E,KAAM,CAAE,SAAA43J,EAAU,iBAAAO,CAAiB,EAAIn4J,EAAM,SAAS,EAChDzmB,KAAS,MAAWuD,CAAS,EAEnC,GAAI,CAAC86K,GAAYO,EACf,OAAO,KAGT,MAAM5xK,EAAUrQ,EAAA,EAAO,eAAe,kBAAoB8pB,EAAM,eAAiB,OAEjF,SACE,OAAC5jB,EAAA,EAAO,CAAC,WAAS,OAAC,KAAiB,CAAC,UAAW4jB,EAAM,MAAM,MAAO,SAAUA,EAAM,YAAY,EAAG,EAChG,mBAAC20C,EAAA,GAAY,UAAZ,CAAsB,UAAWp7D,EAAO,UAAW,QAAAgN,EAClD,oBAAC4+B,EAAA,EAAK,CAAC,IAAK,EAAG,WAAY,SACzB,oBAACzsC,EAAA,EAAI,CAAC,KAAK,aAAa,KAAK,IAAK,MAClC,OAAC,OAAK,SAAAk/K,CAAA,CAAS,GACjB,EACF,EACF,CAEJ,CAEA,MAAM96K,EAAanF,IACV,CACL,aAAW,OAAI,CACb,MAAOA,EAAM,OAAO,KAAK,KACzB,IAAKA,EAAM,QAAQ,EAAG,EACtB,WAAY,QACd,CAAC,CACH,E,+PCtKK,SAASygL,EACdloL,EACAmoL,EACyB,CACzB,MAAMC,KAAqB,KAA4BrmK,GAAUA,EAAM,SAAS,EAC1EsmK,KAAsB,KAA4BtmK,GAAUA,EAAM,UAAU,EAG5EisB,KAAQ,UAAmC,CAAC,CAAC,EAE7Cs6I,KAAe,WAAQ,IAAqB,CAChD,GAAItoL,EAAiB,CACnB,MAAM26C,KAAc,MAAqB36C,CAAe,EACxD,GAAI,CAAC26C,EACH,MAAM,IAAI,MAAM,yBAAyB36C,CAAe,EAAE,EAE5D,MAAO,CAAC26C,CAAW,CACrB,CACA,SAAO,MAAmB,CAC5B,EAAG,CAAC36C,CAAe,CAAC,EAEpB,SAAO,WAAQ,IACNsoL,EACJ,IAAK3tI,GAAyC,CAC7C,MAAM36C,KAAkB,MAAmB26C,CAAW,EAAIA,EAAY,KAAOA,EACvEy7C,EAAaiyF,EAAoBroL,CAAe,GAAG,OAEzD,IAAImyE,EAAYi2G,EAAmBpoL,CAAe,GAAG,OACjDA,IAAoB,MAA6BmoL,IACnDh2G,EAAYg2G,GAGd,MAAMjnC,GAASlzG,EAAM,QAAQhuC,CAAe,EAC5C,GAAIkhJ,IAAUA,GAAO,YAAc/uE,GAAa+uE,GAAO,aAAe9qD,EACpE,OAAO8qD,GAAO,OAEhB,MAAM7uE,EAAoD,CAAC,EAG3D,OAAO,QAAQ+jB,GAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACmyF,GAAej2G,CAAM,IAAM,CACpE,MAAMj3B,EAAmC,CACvC,YAAAV,EACA,KAAM4tI,GACN,OAAQ,CAAC,CACX,EAII,IAAc,QAAQ,KAAKj2G,EAAO,CAAC,EAAE,MAAM,CAAC,CAAC,IAC/Cj3B,EAAU,IAAMi3B,EAAO,CAAC,EAAE,MAAM,CAAC,EAAE,cAAc,eAGnDD,EAAWk2G,EAAa,EAAIltI,EAC5BmtI,EAAkCntI,EAAWi3B,CAAM,CACrD,CAAC,EAGDH,GAAW,QAAQ,CAAC,CAAE,KAAMo2G,GAAe,OAAAj2G,CAAO,IAAM,CACtD,MAAM4kG,EAAM7kG,EAAWk2G,EAAa,EAAIl2G,EAAWk2G,EAAa,GAAK,CACnE,YAAA5tI,EACA,KAAM4tI,GACN,OAAQ,CAAC,CACX,EAEAE,EAAiCvR,EAAI5kG,CAAM,CAC7C,CAAC,EAED,MAAMnxC,GAAS,OAAO,OAAOkxC,CAAU,EAEvC,OAAArkC,EAAM,QAAQhuC,CAAe,EAAI,CAAE,UAAAmyE,EAAW,WAAAikB,EAAY,OAAAj1D,EAAO,EAC1DA,EACT,CAAC,EACA,KAAK,EACP,CAACinJ,EAAoBC,EAAqBC,EAAcH,CAAyB,CAAC,CACvF,CAEO,SAASO,EACd/tI,EACAguI,EACAvyF,EACyB,CACzB,MAAM/jB,EAAoD,CAAC,EAG3D,cAAO,QAAQ+jB,GAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACmyF,EAAej2G,CAAM,IAAM,CACpE,MAAMj3B,EAAmC,CACvC,YAAAV,EACA,KAAM4tI,EACN,OAAQ,CAAC,CACX,EACAl2G,EAAWk2G,CAAa,EAAIltI,EAC5BmtI,EAAkCntI,EAAWi3B,CAAM,CACrD,CAAC,EAGDq2G,GAAgB,QAAQ,CAAC,CAAE,KAAMJ,EAAe,OAAAj2G,CAAO,IAAM,CAC3D,MAAM4kG,EAAM7kG,EAAWk2G,CAAa,EAAIl2G,EAAWk2G,CAAa,GAAK,CACnE,YAAA5tI,EACA,KAAM4tI,EACN,OAAQ,CAAC,CACX,EAEAE,EAAiCvR,EAAI5kG,CAAM,CAC7C,CAAC,EAEM,OAAO,OAAOD,CAAU,CACjC,CAEO,SAASu2G,EACdjuI,EACAkuI,EACAC,EACuB,CACvB,MAAM5R,EAA4B,CAChC,YAAAv8H,EACA,KAAMkuI,EAAc,KACpB,OAAQ,CAAC,CACX,EAGA,OAAAL,EAAkCtR,EAAI4R,CAAW,EACjDL,EAAiCvR,EAAI2R,EAAc,MAAM,EAIzD3R,EAAG,OAAO,QAAS//J,GAAU,CAC3BA,EAAM,MAAQA,EAAM,MAAM,OAAQ4hC,GAASA,EAAK,QAAQ,CAC1D,CAAC,EAEMm+H,CACT,CAEO,SAAS6R,EAA8BhwI,EAAoBiwI,EAAqC,CACrG,GAAI,CAACjwI,EAAK,SACR,OAMF,MAAMkwI,EAHyBD,EAAW,MAAM,IAAK1tI,GACnD4tI,EAAwB5tI,EAAWvC,EAAK,UAAWA,EAAK,KAAK,CAC/D,EAC6D,OAAO,CAACp8B,EAAKo8B,IAAS,CACjF,MAAMowI,EAAqBxsK,EAAI,IAAIysK,EAAerwI,CAAI,CAAC,EACvD,OAAIowI,EACFA,EAAmB,KAAKpwI,CAAI,EAE5Bp8B,EAAI,IAAIysK,EAAerwI,CAAI,EAAG,CAACA,CAAI,CAAC,EAE/Bp8B,CACT,EAAG,IAAI,GAA6B,EAE9B0sK,EAAoBC,EACxBvwI,EAAK,SACLkwI,EACAlwI,EAAK,UAAU,WACjB,EACIswI,IACFtwI,EAAK,UAAYswI,EAAkB,UACnCtwI,EAAK,MAAQswI,EAAkB,MAC/BtwI,EAAK,OAASswI,EAAkB,OAChCtwI,EAAK,YAAcswI,EAAkB,YAEzC,CAEO,SAASE,EACdrS,EACAsS,EACAV,EACuB,CACvB,OAAAN,EAAkCtR,EAAI4R,CAAW,EACjDL,EAAiCvR,EAAIsS,CAAU,EACxCtS,CACT,CAGO,SAASuS,EAA2Bp3G,EAAqC,CAC9E,OAAOA,EAAW,IAAKh3B,GAAc,CACnC,MAAMquI,EAAsC,CAC1C,GAAGruI,EACH,OAAQ,CAAC,CACX,EAGA,OAAAquI,EAAa,OAAO,KAAK,CACvB,KAAM,UACN,MAAOC,EAAgBtuI,EAAU,OAAO,QAASlkC,GAAUA,EAAM,KAAK,CAAC,EACvE,OAAQyyK,EAAyBvuI,EAAU,MAAM,CACnD,CAAC,EAEMquI,CACT,CAAC,CACH,CAEO,SAASC,EAAgBryF,EAAuB,CACrD,OAAOA,EAAM,KAAK,CAAChzE,EAAG9e,IAAM8e,EAAE,KAAK,cAAc9e,EAAE,IAAI,CAAC,CAC1D,CAEO,SAASgjL,EACdntI,EACAi3B,EAA8B,CAAC,EACzB,CACNj3B,EAAU,OAASi3B,EAAO,IAAKn7D,GAAU,CACvC,MAAM0yK,EAAoB1yK,EAAM,MAAM,OAAQ4hC,GAAS,IAAc,IAAI,cAAcA,CAAI,CAAC,EAAE,OACxF+wI,EAAY3yK,EAAM,MAAM,OAAQ4hC,GAC7B,IAAc,QAAQ,aAAaA,CAAI,MAAK,MAAaA,CAAI,CACrE,EAAE,OAEGgxI,EAAmC,CACvC,KAAM5yK,EAAM,KACZ,SAAUA,EAAM,SAChB,eAAgBA,EAAM,eACtB,MAAO,CAAC,EACR,OAAQ,CACN,OAAQ2yK,EACR,UAAWD,CACb,CACF,EACA,OAAAE,EAAc,MAAQ5yK,EAAM,MAAM,IAAK4hC,GAASmwI,EAAwBnwI,EAAMsC,EAAW0uI,CAAa,CAAC,EAChGA,CACT,CAAC,CACH,CAEO,SAAStB,EAAiCptI,EAAkCi3B,EAA2B,CAC5G,MAAM03G,EAAuB,IAAI,IACjC3uI,EAAU,OAAO,QAASlkC,GAAU6yK,EAAqB,IAAI7yK,EAAM,KAAMA,CAAK,CAAC,EAE/Em7D,EAAO,QAASn7D,GAAU,CACxB,IAAI4yK,EAAgBC,EAAqB,IAAI7yK,EAAM,IAAI,EAClD4yK,IACHA,EAAgB,CACd,KAAM5yK,EAAM,KACZ,MAAO,CAAC,EACR,OAAQ8yK,EAAqB9yK,CAAK,CACpC,EACAkkC,EAAU,OAAO,KAAK0uI,CAAa,EACnCC,EAAqB,IAAI7yK,EAAM,KAAM4yK,CAAa,GAIpDA,EAAc,OAAS,CACrB,GAAGA,EAAc,OACjB,GAAGE,EAAqB9yK,CAAK,CAC/B,EAEA,MAAM+yK,EAA2B,IAAI,IACrCH,EAAe,MAAM,QAAS5lK,GAAM,CAElC,MAAMgmK,EAAeD,EAAyB,IAAId,EAAejlK,CAAC,CAAC,EACnEgmK,EAAeA,EAAa,KAAKhmK,CAAC,EAAI+lK,EAAyB,IAAId,EAAejlK,CAAC,EAAG,CAACA,CAAC,CAAC,CAC3F,CAAC,GAEAhN,EAAM,OAAS,CAAC,GAAG,QAAS4hC,GAAS,CACpC,MAAMoxI,EAAeb,EAAuBvwI,EAAMmxI,EAA0B7uI,EAAU,WAAW,EAC7F8uI,GACFA,EAAa,SAAWpxI,EACxBoxI,EAAa,eAAiB,KAAmB,aAAapxI,CAAI,EAAIqxI,EAAoBrxI,CAAI,EAAI,CAAC,EACnGoxI,EAAa,uBAAyB,KAAmB,aAAapxI,CAAI,EACtEsxI,EAA4BtxI,CAAI,EAChC,CAAC,GAELgxI,EAAe,MAAM,KAAKO,EAAuBvxI,EAAMsC,EAAW0uI,CAAc,CAAC,CAErF,CAAC,CACH,CAAC,CACH,CAEO,SAASK,EAAoBrxI,EAAoE,CACtG,MAAM5X,KAAS,WAAQ4X,EAAK,OAAQ,OAAO,EAE3C,GAAIA,EAAK,OAAQ,CACf,KAAM,CAAE,OAAAwxI,EAAQ,GAAGC,CAAO,EAAIzxI,EAAK,OACnC,MAAO,CAAE,GAAGyxI,EAAQ,SAAUD,CAAO,CACvC,CAEA,MAAO,CACL,SAAUppJ,EAAO,KAAwB,QAAQ,GAAKA,EAAO,OAC7D,QAASA,EAAO,KAAwB,OAAO,EAC/C,WAAYA,EAAO,KAAwB,UAAU,EACrD,SAAUA,EAAO,KAAwB,MAAM,EAC/C,OAAQA,EAAO,KAAwB,MAAM,EAC7C,MAAOA,EAAO,KAAwB,KAAK,GAAKA,EAAO,KAAO,MAChE,CACF,CAEO,SAASkpJ,EACdtxI,EACqB,CACrB,GAAIA,EAAK,eAAgB,CACvB,KAAM,CAAE,OAAAwxI,EAAQ,GAAGC,CAAO,EAAIzxI,EAAK,eACnC,MAAO,CAAE,GAAGyxI,EAAQ,SAAUD,CAAO,CACvC,CACA,MAAO,CAAC,CACV,CAEO,SAASN,EAAqB9yK,EAA8D,CACjG,GAAIA,EAAM,OAAQ,CAChB,KAAM,CAAE,OAAAszK,EAAQ,GAAGD,CAAO,EAAIrzK,EAAM,OAEpC,MAAO,CACL,GAAGqzK,EACH,SAAUC,CACZ,CACF,CAEA,MAAMC,KAAgB,WAAQvzK,EAAM,MAAQ4hC,GAAS,KAAmB,aAAaA,CAAI,GAAKA,EAAK,KAAK,EAClG4xI,KAAiB,WAAQxzK,EAAM,MAAQ4hC,GAASA,EAAK,MAAM,EAC3D6xI,EAAiBzzK,EAAM,MAAM,OAAQ4hC,GAAS,KAAmB,cAAcA,CAAI,CAAC,EAAE,OAE5F,MAAO,CACL,SAAU2xI,EAAc,KAAsB,MAAM,EACpD,MAAOC,EAAe,MACtB,OAAQA,EAAe,OACvB,SAAUD,EAAc,KAAsB,QAAQ,EACtD,QAASA,EAAc,KAAsB,OAAO,EACpD,WAAYA,EAAc,KAAsB,UAAU,EAC1D,UAAWE,CACb,CACF,CAEA,SAAShB,EAAyBt3G,EAA+C,CAC/E,MAAMk4G,EAAiC,CAAC,EAExC,OAAAl4G,EAAO,QAASn7D,GAAU,CACxB,MAAM0zK,EAAc1zK,EAAM,OAC1B,OAAO,QAAQ0zK,CAAW,EAAE,QAAQ,CAAC,CAAC7jK,EAAK1nB,CAAK,IAAM,CAC/CkrL,EAAOxjK,CAAG,IACbwjK,EAAOxjK,CAAG,EAAI,GAGW1nB,GAAU,OACnCkrL,EAAOxjK,CAAG,GAAK1nB,EAEnB,CAAC,CACH,CAAC,EAEMkrL,CACT,CAEA,SAASF,EAAuBvxI,EAAYsC,EAAkClkC,EAAwC,CACpH,MAAO,CACL,KAAM4hC,EAAK,KACX,MAAOA,EAAK,MACZ,OAAQA,EAAK,QAAU,CAAC,EACxB,YAAa,KAAmB,aAAaA,CAAI,KAAI,MAAeA,CAAI,EAAI,CAAC,EAC7E,SAAUA,EACV,UAAAsC,EACA,MAAAlkC,EACA,eAAgB,KAAmB,aAAa4hC,CAAI,EAAIqxI,EAAoBrxI,CAAI,EAAI,CAAC,EACrF,uBAAwB,KAAmB,aAAaA,CAAI,EAAIsxI,EAA4BtxI,CAAI,EAAI,CAAC,CACvG,CACF,CAEA,SAASmwI,EACPnwI,EACAsC,EACAlkC,EACc,CACd,MAAM2zK,EAAc,CAClB,OAAQ/xI,EAAK,QAAU,CAAC,EACxB,UAAWA,EACX,UAAAsC,EACA,MAAAlkC,EACA,eAAgB,CAAC,EACjB,uBAAwB,CAAC,EACzB,IAAK,IAAc,QAAQ,KAAK4hC,CAAI,EAAIA,EAAK,cAAc,IAAM,MACnE,EAEA,OAAI,IAAc,WAAW,aAAaA,CAAI,EACrC,CACL,GAAG+xI,EACH,KAAM/xI,EAAK,MACX,MAAOA,EAAK,KACZ,YAAaA,EAAK,aAAe,CAAC,CACpC,EAEE,IAAc,WAAW,cAAcA,CAAI,EACtC,CACL,GAAG+xI,EACH,KAAM/xI,EAAK,OACX,MAAOA,EAAK,KACZ,YAAa,CAAC,CAChB,EAEK,CACL,GAAG+xI,EACH,KAAM/xI,EAAK,cAAc,MACzB,MAAO,GACP,YAAaA,EAAK,aAAe,CAAC,CACpC,CACF,CAGA,SAASuwI,EACPvwI,EACAgyI,EACApwI,EAC0B,CAI1B,MAAMqwI,EAAgB5B,EAAerwI,CAAI,EACnCkyI,EAAyBF,EAAyB,IAAIC,CAAa,EACzE,GAAI,CAACC,EACH,OAGF,MAAI,MAAqBtwI,CAAW,EAClC,OAAOswI,EAAuB,CAAC,EAIjC,MAAMC,EAAuBD,EAAuB,KACjDjL,GAAiB,CAACA,EAAa,UAAYmL,EAA8BnL,EAAcjnI,EAAM,EAAI,CACpG,EACA,GAAImyI,EACF,OAAOA,EAKT,MAAME,EAAsBH,EAAuB,KAChDjL,GAAiB,CAACA,EAAa,UAAYmL,EAA8BnL,EAAcjnI,EAAM,EAAK,CACrG,EACA,GAAIqyI,EACF,OAAOA,CAIX,CAEA,SAASD,EAA8BnL,EAA4BjnI,EAAYsyI,EAAa,GAAe,CACzG,MAAMC,EAAsB,KAAmB,aAAavyI,CAAI,KAAI,MAAeA,CAAI,EAAI,CAAC,EACtFwyI,EAAiBxyI,EAAK,QAAU,CAAC,EACjCyyI,EAAYH,KAAa,MAAUtyI,EAAK,KAAK,EAAI,GAEjD0yI,EAA0BzL,EAAa,YACvC0L,EAAqB1L,EAAa,OAClC2L,EAAoBN,KAAa,MAAUrL,EAAa,KAAK,EAAI,GAEvE,OAAIA,EAAa,OAASjnI,EAAK,QACtB,WACL,CAAC4yI,EAAmBD,EAAoBD,CAAuB,EAC/D,CAACD,EAAWD,EAAgBD,CAAmB,CACjD,EAEK,EACT,CAKO,SAASM,EACdlvI,EACAlpB,EACAwjJ,EAKA,CACA,MAAM6U,EAAiB,CAASnvI,EAE1B,CACJ,YAAaovI,EACb,UAAWC,EACX,MAAOC,CACT,EAAI,KAAa,UAAU,yBAAyB,SAClD,CACE,eAAgB,KAChB,aAActvI,GAAgB,OAC9B,QAAAlpB,CACF,EACA,CACE,KAAMq4J,EACN,gBAAiB7U,EAAO,KAA6B,MACvD,CACF,EAEM,CACJ,YAAa5gF,EACb,UAAW61F,EACX,MAAOC,CACT,EAAI,KAAa,UAAU,WAAW,SACpC,CACE,YAAa,IACb,OAAQ,CAAE,aAAcxvI,GAAgB,OAAW,QAAAlpB,CAAQ,CAC7D,EACA,CACE,gBAAiBwjJ,EAAO,KAA6B,OACrD,KAAM6U,CACR,CACF,EAIM79I,MAAQ,UAAmC,CAAC,CAAC,EAE7C2M,KAAc,MAAqB,IAAyB,EAE5D28C,MAAQ,WAAQ,IAAM,CAC1B,GAAI,CAAC38C,EACH,MAAO,CAAC,EAGV,MAAMumG,GAASlzG,GAAM,QAAQ,IAAyB,EACtD,GAAIkzG,IAAUA,GAAO,YAAc4qC,GAAc5qC,GAAO,aAAe9qD,EACrE,OAAO8qD,GAAO,OAEhB,MAAM7uE,EAAoD,CAAC,EAG3D,OAAO,QAAQ+jB,GAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACmyF,EAAej2G,CAAM,IAAM,CACpE,MAAMj3B,GAAmC,CACvC,YAAAV,EACA,KAAM4tI,EACN,OAAQ,CAAC,CACX,EAII,IAAc,QAAQ,KAAKj2G,EAAO,CAAC,EAAE,MAAM,CAAC,CAAC,IAC/Cj3B,GAAU,IAAMi3B,EAAO,CAAC,EAAE,MAAM,CAAC,EAAE,cAAc,eAGnDD,EAAWk2G,CAAa,EAAIltI,GAC5BmtI,EAAkCntI,GAAWi3B,CAAM,CACrD,CAAC,EAGDw5G,GAAY,QAAQ,CAAC,CAAE,KAAMvD,EAAe,OAAAj2G,CAAO,IAAM,CACvD,MAAM4kG,GAAM7kG,EAAWk2G,CAAa,EAAIl2G,EAAWk2G,CAAa,GAAK,CACnE,YAAA5tI,EACA,KAAM4tI,EACN,OAAQ,CAAC,CACX,EAEAE,EAAiCvR,GAAI5kG,CAAM,CAC7C,CAAC,EAED,MAAMnxC,EAAS,OAAO,OAAOkxC,CAAU,EAEvC,OAAArkC,GAAM,QAAQ,IAAyB,EAAI,CAAE,UAAW89I,EAAY,WAAA11F,EAAY,OAAAj1D,CAAO,EAChFA,CACT,EAAG,CAAC2qJ,EAAY11F,EAAYz7C,CAAW,CAAC,EAExC,MAAO,CACL,QAASoxI,GAAsBE,EAC/B,MAAOD,GAAmBE,EAC1B,OAAQ50F,EACV,CACF,CAMA,SAAS8xF,EAAerwI,EAAmC,CACzD,OAAYA,EAAK,IACRA,EAAK,KAAO,GAEdA,EAAK,IACd,C,2EC1lBA,IAAIozI,EAAqB,GASlB,MAAMC,EAAwB,CAEnC,qBACEC,GAGG,CACHC,EAA2B,2BAA4BD,CAAU,CACnE,EAEA,gBAAkBA,GAA8C,IAC9D,MAAkB,2BAA4BA,CAAU,CAC1D,EAEA,wBAAyB,CACvBzkF,EACAykF,IAYG,CACHC,EAA2B1kF,EAAQ,UAAY,QAASykF,EAAY,mBAAmB,CACzF,EAIA,kBAAoBA,GAAoE,CACtFC,EAA2B,sBAAuBD,CAAU,CAC9D,EAIA,sBAAuB,IAAM,CAC3BC,EAA2B,0BAA0B,CACvD,EAIA,wBAAyB,IAAM,CAC7BA,EAA2B,iBAAiB,CAC9C,EAIA,mBAAqBD,GAAiD,CACpEC,EAA2B,uBAAwBD,CAAU,CAC/D,EAIA,yBAA2BA,GAAgF,CACzGC,EAA2B,8BAA+BD,CAAU,CACtE,EAKA,oBAAqB,CACnBC,EAA2B,sBAAuB,CAAE,KAAM,WAAY,CAAC,CACzE,EACA,oBAAqB,CACnBA,EAA2B,sBAAuB,CAAE,KAAM,WAAY,CAAC,CACzE,EACA,oBAAqB,CACnBA,EAA2B,sBAAuB,CAAE,KAAM,WAAY,CAAC,CACzE,EACA,mBAAoB,CAClBA,EAA2B,sBAAuB,CAAE,KAAM,SAAU,CAAC,CACvE,EACA,sBAAuB,CACrBA,EAA2B,sBAAuB,CAAE,KAAM,aAAc,CAAC,CAC3E,EACA,qBAAsB,CACpBA,EAA2B,sBAAuB,CAAE,KAAM,YAAa,CAAC,CAC1E,EACA,qBAAsB,CACpBA,EAA2B,sBAAuB,CAAE,KAAM,YAAa,CAAC,CAC1E,EAEA,iBAAmBD,GAAyC,CAC1DC,EAA2B,+BAAgCD,CAAU,CACvE,EACA,0BAA4BA,GAAyC,CACnEC,EAA2B,oCAAqCD,CAAU,CAC5E,EACA,wBAA0BA,GAAyC,CACjEC,EAA2B,kCAAmCD,CAAU,CAC1E,EAGA,sBAAuB,IAAM,CAC3BC,EAA2B,0BAA2B,CAAE,KAAM,WAAY,CAAC,CAC7E,EACA,qBAAsB,IAAM,CAC1BA,EAA2B,0BAA2B,CAAE,KAAM,UAAW,CAAC,CAC5E,EACA,kBAAmB,IAAM,CACvBA,EAA2B,0BAA2B,CAAE,KAAM,OAAQ,CAAC,CACzE,EACA,0BAA2B,IAAM,CAC/BA,EAA2B,0BAA2B,CAAE,KAAM,gBAAiB,CAAC,CAClF,EACA,gBAAiB,IAAM,CACrBA,EAA2B,0BAA2B,CAAE,KAAM,KAAM,CAAC,CACvE,EAGA,uBAAyBD,GAAyC,CAChEE,EAAyB,2BAA4BF,CAAU,CACjE,EACA,gBAAkBA,GAAyC,CACzDE,EAAyB,4BAA6BF,CAAU,CAClE,EACA,iBAAmBA,GAAyC,CAC1DE,EAAyB,6BAA8BF,CAAU,CACnE,EACA,0BAA4BA,GAAyC,CACnEE,EAAyB,sCAAuCF,CAAU,CAC5E,EACA,0BAA4BA,GAAyC,CACnEE,EAAyB,sCAAuCF,CAAU,CAC5E,EACA,uBAAyBA,GAAyC,CAChEE,EAAyB,mCAAoCF,CAAU,CACzE,EACA,4BAA8BA,GAAyC,CACrEE,EAAyB,iCAAkCF,CAAU,CACvE,EACA,0BAA4BA,GAAyC,CACnEE,EAAyB,uCAAwCF,CAAU,CAC7E,EACA,sBAAwBA,GAAyC,CAC/DE,EAAyB,mCAAoCF,CAAU,CACzE,EACA,sBAAwBA,GAAyC,CAC/DE,EAAyB,mCAAoCF,CAAU,CACzE,EACA,sBAAwBA,GAAyC,CAC/DE,EAAyB,mCAAoCF,CAAU,CACzE,EACA,kCAAoCA,GAAyC,CAC3EE,EAAyB,sCAAuCF,CAAU,CAC5E,EACA,kCAAoCA,GAAyC,CAC3EE,EAAyB,sCAAuCF,CAAU,CAC5E,EACA,kCAAoCA,GAAyC,CAC3EE,EAAyB,sCAAuCF,CAAU,CAC5E,EACA,kCAAoCA,GAAyC,CAC3EE,EAAyB,sCAAuCF,CAAU,CAC5E,EACA,+BAAiCA,GAAyC,CACxEE,EAAyB,kCAAmCF,CAAU,CACxE,EACA,oCAAsCA,GAAyC,CAC7EE,EAAyB,qCAAsCF,CAAU,CAC3E,EACA,2CAA6CA,GAAyC,CACpFE,EAAyB,qCAAsCF,CAAU,CAC3E,EACA,yBAA2BA,GAAyC,CAClEE,EAAyB,kCAAmCF,CAAU,CACxE,EACA,mCAAqCA,GAAyC,CAC5EE,EAAyB,+BAAgCF,CAAU,CACrE,EACA,6BAA+BA,GAAyC,CACtEE,EAAyB,gCAAiCF,CAAU,CACtE,EAGA,4BAA8BA,GAAyC,CACrEC,EAA2B,yBAA0BD,CAAU,CACjE,EAGA,wBAA0BA,GAAyC,CACjEC,EAA2B,sBAAuBD,CAAU,CAC9D,EACA,iBAAkB,KAChBF,EAAqB,GAEd,IAAM,CACXA,EAAqB,EACvB,GAIF,sBAAwBE,GAA2F,CACjHC,EAA2B,0BAA2BD,CAAU,CAClE,EACA,wBAAyB,IAAM,CAC7BC,EAA2B,4BAA4B,CACzD,EAGA,8BAAgCD,GAAyC,CACvEC,EAA2B,4BAA6BD,CAAU,CACpE,EACA,8BAAgCA,GAAyC,CACvEC,EAA2B,6BAA8BD,CAAU,CACrE,EACA,oBAAsBA,GAAyC,CAC7DC,EAA2B,6BAA8BD,CAAU,CACrE,CACF,EAEMC,EAA6B,CACjC52K,EACA22K,EACAG,EAAoB,eACjB,CACH,MAAMvxJ,EAAOkxJ,EAAqB,CAAE,WAAY,EAAK,EAAI,CAAC,EACpDM,EAAqB,IAAO,gBAAgB,qBAAuB,GAErEJ,KACF,MAAkB,GAAGG,CAAiB,IAAI92K,CAAI,GAAI,CAAE,GAAG22K,EAAY,GAAGpxJ,EAAM,mBAAAwxJ,CAAmB,CAAC,KAEhG,MAAkB,GAAGD,CAAiB,IAAI92K,CAAI,GAAI,CAAE,mBAAA+2K,CAAmB,CAAC,CAE5E,EAEMF,EAAqD,CAAC72K,EAAM22K,IAAe,CAC/E,MAAMpxJ,EAAOkxJ,EAAqB,CAAE,WAAY,EAAK,EAAI,CAAC,EAEtDE,KACF,MAAkB,cAAc32K,CAAI,GAAI,CAAE,GAAG22K,EAAY,GAAGpxJ,CAAK,CAAC,KAElE,MAAkB,cAAcvlB,CAAI,EAAE,CAE1C,C,wKC1OO,SAASg3K,GAAwB,CACtC,KAAM,CAACC,CAAmB,KAAI,KAAuB,EAC/C,CAACC,CAAe,EAAI,KAAa,UAAU,4BAA4B,YAAY,EAEnFzqH,KAAiB,KAAE,kCAAmC,yBAAyB,EAErF,SAAO,MAAS,MAAO0qH,EAAgC9zI,EAAuB0N,IAAsB,CAClG,KAAM,CAAE,cAAA8hI,CAAc,EAAIsE,EAGpB59J,KAAS,MAAc,CAAE,KAAA8pB,EAAM,SAAA0N,EAAU,UAAWomI,EAAU,SAAU,CAAC,EACzE,CAAE,uBAAAC,EAAwB,YAAAC,CAAY,EAAI,MAAMJ,EAAoBE,EAAW,CAAC59J,CAAM,CAAC,EAS7F,OAPe29J,EAAgB,CAC7B,YAAAG,EACA,UAAWxE,EACX,QAASuE,EACT,oBAAqB,CAAE,eAAA3qH,CAAe,CACxC,CAAC,EAAE,OAAO,CAGZ,CAAC,CACH,CAKO,SAAS6qH,GAA2B,CACzC,KAAM,CAACL,CAAmB,KAAI,KAAuB,EAC/C,CAACM,CAAe,EAAIC,EAAuB,EAC3C,CAACN,CAAe,EAAI,KAAa,UAAU,4BAA4B,YAAY,EAEnFzqH,KAAiB,KAAE,qCAAsC,2BAA2B,EAE1F,SAAO,MACL,MACE0qH,EACAl3I,EACAi0B,EACAujH,EACA1mI,IACG,CACH,KAAM,CAAE,cAAA8hI,CAAc,EAAIsE,EACpBO,EAAsBC,EAAe13I,EAAgBi0B,CAAc,EAGnE0jH,KAAsB,WAAQT,EAAWM,CAAe,EAC9D,GAAIA,GAAmB,CAACG,EAEtB,OADeL,EAAgB,QAAQJ,EAAWM,EAAiBx3I,EAAgBi0B,EAAgBnjB,CAAQ,EAI7G,MAAMx3B,KAAS,MAAiB,CAAE,WAAY0mB,EAAgB,KAAMy3I,CAAoB,CAAC,EACnF,CAAE,uBAAAN,EAAwB,YAAAC,CAAY,EAAI,MAAMJ,EAAoBE,EAAW,CAAC59J,CAAM,CAAC,EAE7F,OAAO29J,EAAgB,CACrB,YAAAG,EACA,UAAWxE,EACX,QAASuE,EACT,oBAAqB,CAAE,eAAA3qH,CAAe,CACxC,CAAC,EAAE,OAAO,CACZ,CACF,CACF,CAMO,SAAS+qH,GAAyB,CACvC,KAAM,CAACP,CAAmB,KAAI,KAAuB,EAC/C,CAACY,CAAmB,KAAI,KAAuB,EAC/C,CAACX,CAAe,EAAI,KAAa,UAAU,4BAA4B,YAAY,EAEnFzqH,KAAiB,KAAE,qCAAsC,2BAA2B,EAE1F,SAAO,MACL,MACEqrH,EACAL,EACAx3I,EACAi0B,EACAnjB,IACG,CACH,MAAM2mI,EAAsBC,EAAe13I,EAAgBi0B,CAAc,EAGnE6jH,KAAiB,MAAc,CAAE,KAAML,EAAqB,SAAA3mI,CAAS,CAAC,EACtE,CAAE,uBAAwBinI,EAAgB,YAAaC,CAAuB,EAAI,MAAMhB,EAC5FQ,EACA,CAACM,CAAc,CACjB,EAEMtsJ,EAAS,MAAMyrJ,EAAgB,CACnC,YAAae,EACb,UAAWR,EAAgB,cAC3B,QAASO,EACT,oBAAqB,CAAE,eAAAvrH,CAAe,CACxC,CAAC,EAAE,OAAO,EAGV,SAAK,MAAwBxsB,CAAc,GACzC,MAAM43I,EAAoB,QAAQC,EAAkB73I,CAAc,EAG7DxU,CACT,CACF,CACF,CAEA,SAASksJ,EAAe13I,EAAwCi0B,EAAiC,CAC/F,MAAMgkH,KAAiC,MAAwBj4I,CAAc,EAI7E,SAAO,MAAQi0B,EAAiBs1D,GAAU,CACxC,MAAM2uD,EAAiC,IAAc,QAAQ,KAAK3uD,CAAK,EAEnE0uD,GAAkCC,IACpC3uD,EAAM,cAAc,IAAMvpF,EAAe,IAE7C,CAAC,CACH,C,6JChGO,MAAMm4I,EAAuB,GAI9BC,EAA8B,IAC9BC,EAAwB,GACxBC,EAAuB,GAEvBC,EAAwB,GACxBC,EAAmB,GAEnBC,EAAW,EAEV,MAAMC,UAAyB,GAAmC,CACvE,MAAM/lL,EAAkB,CACtB,KAAK,MAAM,QAAO,KAAU,MAAO,KAAK,MAAM,KAAMA,EAAM,IAAI,EACzD,KAAK,MAAM,QACd,KAAK,MAAM,MAAQA,EAAM,OAEvB,KAAK,MAAM,YAAc,KAAc,OACzC,KAAK,MAAM,UAAYA,EAAM,UAEjC,CAEA,WAAkB,CAChB,GAAI,CACF,SAAAuc,EACA,MAAA1b,EACA,KAAAic,EAAO,GACP,UAAAjI,EAAY,KAAc,KAC1B,KAAAiV,EAAO,CAAE,KAAM,EAAK,EACpB,MAAA3Y,EACA,MAAA60K,EACA,OAAAxtJ,EACA,IAAA/H,EAAM,EACN,YAAAw1J,EACA,OAAAlqK,EACA,OAAA1e,EACA,MAAAsf,EACA,OAAAqoG,EACA,SAAAx2G,EACA,MAAArP,EACA,kBAAA+mL,EACA,KAAAp/G,EACA,MAAAvuE,EACA,OAAAmzH,GACA,SAAAxsH,EACA,MAAAinL,GAAQ,KAAkB,MAC5B,EAAI,KAAK,MAET,MAAMnc,GAAO,GAAGwb,CAAoB,MAAMrmL,EAAM,WAAW,UAAU,GAE/DinL,EAAYjnL,EAAM,OAAS,4BAA8B,2BAG3D,MAAcod,CAAQ,IACxBR,EAAS,CAAC,EAAG,CAAC,GAGZ7c,IAAa,GAAKinL,KAAU,KAAkB,SAChD3tJ,EAAS,CAAC3e,EAAGkC,IAAWA,EAAO,IAAKxf,IAAO,OAAO,UAAUA,EAAC,EAAIA,GAAI,IAAK,GAG5E,IAAImB,EAAe,CACjB,MAAO6e,EACP,KAAAO,EACA,OAAQvkB,GAAS4G,EAAM,OAAO,KAAK,QACnC,KAAMknL,EAAqBxxK,CAAS,EACpC,KAAAm1J,GACA,KACEljG,IACC,CAACjoD,EAAMxhB,EAAQipL,KACPC,EAAkB1nK,EAAMxhB,EAAQipL,EAAO,GAElD,OAAQJ,EACR,IAAAz1J,EAEA,SAAU,EAEV,KAAM,CACJ,KAAM3G,EAAK,KACX,OAAQs8J,EACR,MAAO,EAAI,gBACb,EACA,MAAO,OAAO,OACZ,CACE,KAAM,GACN,OAAQ16D,IAAQ,KAAQnzH,GAAS4G,EAAM,OAAO,KAAK,QAAWinL,EAC9D,MAAO,EAAI,iBACX,KAAM,CACR,EACAj1K,CACF,EACA,OAAA4K,EACA,OAAA1e,EACA,MACE2oL,IACC,CAACnnK,EAAMynK,EAASE,GAAUC,GAAUC,KAC5BC,EAAe9nK,EAAMynK,EAASE,GAAUC,GAAUC,GAAST,CAAW,GAEjF,OAAAztJ,EACA,MAAA7b,CACF,EAEA,OAAI+uG,IAAQ,OACVhuH,EAAO,OAAS,CACd,OAAQnF,GAAS4G,EAAM,OAAO,KAAK,QACnC,MAAO,EAAI,iBACX,GAAGusH,EACL,GAGE7qH,GAAS,MAAQA,EAAM,OAAS,IAClCnD,EAAO,MAAQmD,EACfnD,EAAO,UAAY8nL,EAAuBM,EAC1CpoL,EAAO,UAAYssK,GACnBtsK,EAAO,SAAWooL,GAGhBzoL,EACFK,EAAO,OAASL,EACP4oL,EACTvoL,EAAO,OAAS,CAACmc,EAAUkC,EAAQuqK,GAASM,GAAWC,KAAa,CAClE,IAAI3nL,KAAW,QAAc,KAAc2nL,GAAU,CAAC,CAAC,EACvD,OAAO9qK,EAAO,IAAKxf,IACbA,IAAK,KACA,KAEA0pL,EAAa1pL,GAAG2C,EAAW,EAAIA,EAAW,MAAS,CAE7D,CACH,EACS8lH,IACTtnH,EAAO,OAASopL,GAIjBppL,EAAe,SAAW8Q,EAEpB9Q,CACT,CACF,CAGO,MAAMqpL,EAAe,CAC1B,OAAQ,IACR,OAAQ,GAAK,IACb,KAAM,KAAU,IAChB,IAAK,KAAU,GAAK,IACpB,MAAO,IAAU,GAAK,GAAK,IAC3B,KAAM,IAAM,GAAK,GAAK,GAAK,GAC7B,EAGO,SAASD,EACdjoK,EACA9C,EACAuqK,EACAU,EACAC,EACU,CACV,MAAMh2K,EAAO4N,EAAK,KAAKynK,CAAO,EACxB93K,EAAW,aAAcyC,GAAQ,OAAOA,EAAK,UAAa,SAAWA,EAAK,SAAW,OACrF27G,EAAQ/tG,EAAK,OAAO,EACpBzZ,GAASwnH,GAAO,KAAO,IAAMA,GAAO,KAAO,GAC3Cs6D,EAAmB,KAAK,MAAMH,EAAa,KAAOA,EAAa,GAAG,EAAIA,EAAa,IACnFI,EAAwB,KAAK,MAAMF,EAAYF,EAAa,GAAG,EAAIA,EAAa,IAEtF,IAAIh2G,EAAS,KAAkB,SAAS,KAExC,OAAIk2G,EAAYF,EAAa,OAC3Bh2G,EAAS,KAAkB,SAAS,YAC3Bk2G,GAAaF,EAAa,OACnCh2G,EAAS,KAAkB,SAAS,OAC3B3rE,GAAS2hL,EAAa,IAC/Bh2G,EAAS,KAAkB,SAAS,OAC3Bk2G,GAAaF,EAAa,IACnCh2G,EAAS,KAAkB,SAAS,KAC3B3rE,EAAQ2hL,EAAa,KAC9Bh2G,EAAS,KAAkB,SAAS,IAC3Bo2G,IAA0BD,EACnCn2G,EAAS,KAAkB,SAAS,KAC3Bk2G,GAAaF,EAAa,OACnCh2G,EAAS,KAAkB,SAAS,OAG/Bh1D,EAAO,IAAKxf,GAAOA,GAAK,KAAO,MAAK,MAAeA,EAAG,CAAE,OAAAw0E,EAAQ,SAAAviE,CAAS,CAAC,CAAE,CACrF,CAGA,SAASm4K,EACP9nK,EACAynK,EACAE,EACAC,EACAC,EACAT,EACQ,CACR,MAAMh1K,EAAO4N,EAAK,KAAKynK,CAAO,EACxB15D,EAAQ/tG,EAAK,OAAO5N,EAAK,KAAM,EAGrC,GAAIA,EAAK,OAAS,GAAK,CAAC27G,EACtB,OAAO85D,GAAWjB,EAA8BE,EAAuBD,EAGzE,MAAM0B,EAAWV,EAAUd,EACrByB,GAAaZ,EAAWD,GAAYY,EAIpCE,EAAW,KAAK,IAAI,KAAK,IAAId,CAAQ,EAAG,KAAK,IAAIC,CAAQ,CAAC,EAEhE,IAAIc,EAAS,GAEb,GAAI36D,EAAM,KACR26D,EAAST,EAAWjoK,EAAM,CAACyoK,CAAQ,EAAGhB,EAASV,EAAuByB,CAAS,EAAE,CAAC,UACzEpB,GAAe,KACxBsB,EAAStB,EAAYqB,CAAQ,MAE7B,QAAO1B,EAKT,SAFmB,MAAY2B,EAAQ/B,CAAoB,EAAE,MAEzCK,CACtB,CAGA,SAASU,EAAkB1nK,EAAaxhB,EAAkBipL,EAAiB,CACzE,MAAMr1K,EAAO4N,EAAK,KAAKynK,CAAO,EAE9B,IAAIkB,EAAWv2K,EAAK,MAAO,KAE3B,GAAIA,EAAK,OAAS,EAChBu2K,GAAYv2K,EAAM,IAAOu0K,UAChBnoL,GAAQ,OAAQ,CACzB,IAAIoqL,EAAepqL,EAAO,OAAO,CAACgX,EAAKrd,IAAU,KAAK,IAAIqd,KAAK,MAAYrd,EAAOwuL,CAAoB,EAAE,KAAK,EAAG,CAAC,EAEjH,MAAMkC,EAAqB,KAAK,IAAI7oK,EAAK,MAAQ,GAAK4oK,CAAY,EAElED,GAAYv2K,EAAM,IAAOA,EAAM,SAAYy2K,CAC7C,CAEA,OAAO,KAAK,KAAKF,CAAQ,CAC3B,CAEO,SAASnB,EAAqBp1K,EAAqB,CACxD,OAAQA,EAAM,CACZ,KAAK,KAAc,IACjB,MAAO,GACT,KAAK,KAAc,MACjB,MAAO,GACT,KAAK,KAAc,OACjB,MAAO,GACT,KAAK,KAAc,KACrB,CAEA,MAAO,EACT,C,mOCjSO,MAAM02K,UAA2B,IAAsE,CACrG,YAAYluK,GAAgC,CACjD,MAAM,CACJ,OAAQA,GAAM,OACd,KAAMA,GAAM,OAAO,QAAQ,EAAE,MAAM,IACrC,CAAC,EAED,KAAK,qBAAqB,IAAM,CAC9B,KAAK,MAAM,IACT,KAAK,MAAM,OAAO,QAAQ,EAAE,iBAAiB,CAACW,GAAUwtK,KAAa,CAC/DxtK,GAAS,OAASwtK,GAAS,MAC7B,KAAK,SAAS,CAAE,KAAMxtK,GAAS,IAAK,CAAC,CAEzC,CAAC,CACH,CACF,CAAC,CACH,CAEO,kBAAkB7b,GAAe,CACtC,KAAK,MAAM,OAAO,QAAQ,EAAE,oBAAoBA,EAAK,CACvD,CAEO,sBAAuB,CAC5B,OAAO,KAAK,MAAM,OAAO,QAAQ,EAAE,uBAAuB,GAAK,EACjE,CAEO,aAAc,CACnB,KAAK,MAAM,OAAO,QAAQ,EAAE,cAAc,CAC5C,CAEO,kBAAwD,CAC7D,OAAO,KAAK,MAAM,OAAO,QAAQ,EAAE,iBAAiB,CACtD,CACF,C,mRChCO,MAAMspL,EAA+B,CAAC,CAAE,MAAAxtL,GAAO,UAAAmH,EAAU,IAAyC,CACvG,MAAMwkD,MAAW,MAAY,EAEvB,CAAE,QAAAz+C,GAAS,MAAOg6F,EAAW,KAAIj9D,EAAA,GAAS,OAAM,OAA4BjqC,EAAK,EAAG,CAACA,EAAK,CAAC,EAEjG,GAAIkN,GACF,SACE,OAACvB,EAAA,GAAM,CAAC,SAAU,GAChB,mBAAC,KAAK,CAAC,QAAQ,mEAAmE,0BAAc,EAClG,EAIJ,GAAI,CAACu7F,GACH,SACE,OAAC/9D,EAAA,GACC,SAAS,OACT,SAAO,KACL,0FACA,iCACF,EAEA,mBAAC,KAAK,CAAC,QAAQ,yFAAyF,6GAExG,EACF,EAIJ,MAAMz1B,GAAU,SAAY,IAC1B,MAAQ,KAAY,kBAAkB,EAEtC,MAAM+5K,GAAyB,QAAM,OAA4BztL,EAAK,EAEhE4zC,GAAcxe,EAAA,GAAQ,UAAU,gBAAiB,CACrD,SAAU,KAAK,UAAUq4J,EAAsB,EAC/C,SAAU9hI,GAAS,SAAWA,GAAS,MACzC,CAAC,EAED,KAAgB,KAAK/X,EAAW,CAClC,EAEA,SACE,OAACjoC,EAAA,GAAM,CAAC,KAAK,OAAO,QAAA+H,GAAkB,UAAAvM,GAAsB,cAAY,2BACtE,mBAAC,KAAK,CAAC,QAAQ,mEAAmE,0BAAc,EAClG,CAEJ,EC5DO,IAAKumL,IAAAA,KACVA,GAAA,QAAU,UACVA,GAAA,gBAAkB,kBAClBA,GAAA,MAAQ,QAHEA,KAAAA,IAAA,ICoBL,MAAMC,WAA6B,IAAuE,CAA1G,kCAEL,KAAO,MAAQD,GAAM,MADrB,MAAO,CAAP,KAAO,UAAYE,CAAA,CAGZ,UAAUjoL,GAAgC,CAC/C,SAAO,OAACkoL,EAAA,CAAqC,MAAO,KAAO,GAAGloL,EAAA,EAArC,KAAK,YAAY,CAA2B,CACvE,CAEO,aAAc,CACnB,SAAO,KAAE,oDAAqD,OAAO,CACvE,CAEO,iBAAkB,CAEvB,OADkB,KAAK,aAAa,EACnB,MAAM,GACzB,CAEO,cAAe,CACpB,SAAO,MAAqB,IAAI,CAClC,CAEO,kBAAmB,CACxB,SAAO,MAAsB,KAAK,MAAM,SAAS,QAAQ,CAAC,CAC5D,CAEO,mBAAoB,CACzB,MAAMxI,MAAmB,MAAoB,SAAS,EACtD,OACEkG,EAAA,EAAO,iBACP,KAAK,aAAa,EAAE,MAAM,KAAK,SAC/B,KAAW,cAAclG,GAAiB,MAAM,CAEpD,CACF,CAEO,SAASywL,EAA6B,CAAE,MAAAzgK,EAAM,EAA8C,CACjG,MAAMzmB,MAAS,MAAWuD,CAAS,EAE7B,CAAE,OAAAo7C,GAAQ,QAAAn4C,GAAS,MAAAynF,EAAM,KAAIy/E,EAAA,GAAsB,CACvD,aAAcjnJ,GAAM,gBAAgB,EACpC,QAASA,GAAM,iBAAiB,CAClC,CAAC,EAEKq7F,GAAQnjE,GAAO,UACnB,OAAClc,EAAA,GACC,SAAO,KACL,oFACA,sBACF,EACA,SAAS,QAER,SAAAkc,GAAO,IAAI,CAACh4C,GAAOkB,QAClB,OAAC,OACC,oBAAC,MACC,QAAQ,wEACR,OAAQ,CAAE,kBAAgB,MAAmBlB,EAAK,CAAE,EACrD,iDACsC,sBACvC,GANQkB,EAOV,CACD,EACH,EACE,KAEJ,GAAIrB,IAAW,CAACynF,GAAM,OACpB,SACE,oBACG,UAAA6zB,MACD,OAAC1xE,EAAA,GACC,QAAM,KAAE,sEAAuE,kBAAkB,EACnG,GACF,EAIJ,MAAM92C,GAAQmtB,GAAM,MAAM,SAAS,QAAQ,EACrC2gK,GAAiB3gK,GAAM,kBAAkB,EAE/C,GAAIwnE,GAAM,OACR,SACE,oBACE,oBAACinF,EAAA,GAAU,CAAC,MAAAjnF,EAAA,CAAc,EACzBm5F,OAAkB,OAACN,EAA4B,CAAC,UAAW9mL,GAAO,UAAW,MAAA1G,EAAA,CAAc,GAC9F,EAIJ,MAAMilG,GAAQ,CAAS93E,GAAM,gBAAgB,EACvCiG,GAAYjG,GAAM,aAAa,EAErC,SACE,QAAC,OAAI,UAAWzmB,GAAO,eACpB,WAACu+F,OACA,oBACE,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,6CAA6C,0DAE5D,EACF,EACC6oF,OAAkB,OAACN,EAA4B,CAAC,MAAAxtL,EAAA,CAAc,GACjE,EAEDilG,IAAS,CAAC,CAAC7xE,GAAU,MAAM,KAAK,YAC/B,OAAC+V,EAAA,GACC,SAAS,OACT,SAAO,KAAE,6EAA8E,qBAAqB,EAE5G,mBAAC,KAAK,CAAC,QAAQ,wDAAwD,+DAEvE,EACF,GAEJ,CAEJ,CAEA,MAAMl/B,EAAanF,KAA0B,CAC3C,aAAW,OAAI,CACb,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,kBAAgB,OAAI,CAClB,OAAQA,GAAM,QAAQ,CAAC,EACvB,gBAAiBA,GAAM,OAAO,WAAW,UACzC,QAASA,GAAM,QAAQ,CAAC,CAC1B,CAAC,CACH,GAKA,SAAS+oL,EAAYloL,GAAwC,CAC3D,KAAM,CAAE,MAAAwnB,EAAM,EAAIxnB,GAEZ,CAAE,MAAAgvF,EAAM,KAAIy/E,EAAA,GAAsB,CACtC,aAAcjnJ,GAAM,gBAAgB,EACpC,QAASA,GAAM,iBAAiB,EAChC,KAAM,EACR,CAAC,EAED,SACE,OAACoxB,EAAA,GACC,MAAOpxB,GAAM,YAAY,EACzB,KAAK,OACL,QAASwnE,GAAM,OACf,OAAQhvF,GAAM,OACd,YAAaA,GAAM,YACrB,CAEJ,C,sQC3HO,MAAMooL,WAA4B,IAAsE,CAItG,YAAY3uK,GAAiC,CAClD,MAAMA,EAAK,EAHb,WAAQsuK,GAAM,QA6Hd,KAAO,gBAAkB,IAAM,IACX,MAAqB,IAAI,EACjC,UAAU,IAAI3rE,GAAA,EAAmB,CAAE,SAAU,KAAK,MAAM,SAAU,WAAY,KAAW,KAAM,CAAC,CAAC,CAC7G,EAEA,KAAO,mBAAqB,MAAOtxD,GAAyCu9H,KAAsC,CAChH,KAAM,CAAE,WAAAz2J,EAAW,EAAI,KAAK,MACtB0vI,GAAc,KAAK,YAEnBgnB,GAAY12J,GAAa,QAAM,MAAiB,EAAE,IAAI,CAAE,IAAKA,GAAW,GAAI,CAAC,EAAI,OACjF22J,GAAS,QAAM,MAAiB,EAAE,IAAI,CAAE,IAAKz9H,GAAY,GAAI,CAAC,EAE9D09H,GAAiBlnB,GAAY,MAAM,QAGnC/6I,GAAU8hK,IAAmB,QAAMI,GAAA,GAAcF,GAAQz9H,GAAY,IAAK09H,GAAgBF,EAAS,EAEzGhnB,GAAY,SAAS,CAAE,cAAY,MAAiBx2G,EAAW,EAAG,QAAAvkC,EAAQ,CAAC,EAEvE8hK,IACF/mB,GAAY,WAAW,EAGzB,KAAK,eAAe,CACtB,EAEA,KAAO,qBAAwB9mK,IAA+B,CAC5D,MAAMH,GAAQ,KAAK,MAAM,SAAS,QAAQ,EACpCquL,GAAU,KAAK,YAEfC,GAAyD,CAAC,EAC1DC,GAA+C,CAAC,EAElDpuL,GAAQ,gBAAkBkuL,GAAQ,MAAM,gBAC1CC,GAAmB,cAAgBnuL,GAAQ,eAAiB,QAG1DA,GAAQ,cAAgBkuL,GAAQ,MAAM,cACxCC,GAAmB,YAAcnuL,GAAQ,aAAe,QAG1D,MAAMilL,GAAWjlL,GAAQ,WAAW,MAAQ,OACtCkgJ,GAAYlgJ,GAAQ,WAAW,OAAS,OACxCmlL,GAAmBnlL,GAAQ,WAAW,KAExCilL,KAAa,QAAa/kC,KAAc,QAC1CkuC,GAAiB,WAAa,IAAI5mJ,GAAA,EAAe,CAAE,SAAAy9I,GAAU,UAAA/kC,GAAW,iBAAAilC,EAAiB,CAAC,EAC1FiJ,GAAiB,eAAc,OAAsBvuL,GAAM,MAAM,MAAOuuL,GAAiB,UAAU,IAEnGA,GAAiB,WAAa,OAC9BA,GAAiB,eAAc,OAAsBvuL,GAAM,MAAM,MAAO,MAAS,GAG/EG,GAAQ,eAAiBkuL,IAAS,MAAM,eAC1CC,GAAmB,aAAenuL,GAAQ,cAGxCA,GAAQ,kBAAoBkuL,IAAS,MAAM,kBAC7CC,GAAmB,gBAAkBnuL,GAAQ,iBAG/CH,GAAM,SAASuuL,EAAgB,EAE/BF,GAAQ,SAASC,EAAkB,EACnCD,GAAQ,WAAW,CACrB,EAEA,KAAO,gBAAmBniK,IAA8B,CACvC,KAAK,YACb,SAAS,CAAE,QAAAA,EAAQ,CAAC,CAC7B,EAEA,KAAO,aAAe,IAAM,CAC1B,KAAK,YAAY,WAAW,CAC9B,EAyBA,KAAO,cAAgB,IAAM,CAC3B,MAAMA,GAAU,KAAK,WAAW,EAChC,KAAK,mBAAgB,MAASA,GAAS,KAAK,SAAS,CAAC,CAAC,CACzD,EAEA,KAAO,WAAc6I,IAA8B,CACjD,MAAM7I,GAAU,KAAK,WAAW,EAC1BqL,GAAa,KAAK,MAAM,WAE9B,KAAK,mBACH,MAASrL,GAAS6I,GAAOwC,MAAa,MAAiBA,EAAU,EAAI,CAAE,KAAM,OAAW,IAAK,MAAU,CAAC,CAC1G,CACF,EAMA,KAAO,sBAAyB96B,IAA8B,CAC5D,MAAMyvB,GAAU,KAAK,WAAW,EAG1BsiK,GAAgB,CAAE,GADN,MAAqB,SAAS,EACV,KAAA/xL,EAAK,EAErCgyL,MAAoB,OAAYD,EAAa,EAEnD,KAAK,mBAAgB,MAAStiK,GAASuiK,EAAiB,CAAC,CAC3D,EAsBA,KAAO,yBAA2B,MAAOC,IAAmD,CAC1F,KAAM,CAAE,WAAAhjK,EAAW,EAAI,KAAK,MAE5B,GAD+BA,IAAY,MAAQgjK,GAAiB,IACxC,CAC1B,MAAMC,MAAgB,OAAiB,EAAE,oBAAoBD,EAAgB,EACzEC,IACF,MAAM,KAAK,mBAAmBA,EAAa,CAE/C,CACF,EAtRE,KAAK,qBAAqB,IAAM,KAAK,WAAW,CAAC,CACnD,CANA,MAAO,CAAP,KAAO,UAAYC,EAAA,CAQZ,aAAc,CACnB,SAAO,KAAE,mDAAoD,SAAS,CACxE,CAEO,eAAgB,CACrB,OAAO,KAAK,WAAW,EAAE,MAC3B,CAEO,UAAUjpL,GAAgC,CAC/C,SAAO,OAACkpL,GAAA,CAAoC,MAAO,KAAO,GAAGlpL,EAAA,EAArC,KAAK,YAAY,CAA2B,CACtE,CAEQ,YAAa,CACnB,KAAK,eAAe,CACtB,CAEA,MAAc,gBAAiB,CAI7B,GAAI,CAHU,KAAK,MAAM,SAAS,QAAQ,EACpB,MAAM,MAG1B,OAGF,IAAImpL,GAAmB,KAAK,YAAY,MAAM,WAE9C,GAAI,CACF,IAAIpjK,GACA6L,GAEJ,GAAKu3J,GAwBHpjK,GAAa,QAAM,MAAiB,EAAE,IAAIojK,EAAgB,EAC1Dv3J,MAAa,MAAiB,EAAE,oBAAoBu3J,EAAgB,MAzB/C,CAErB,MAAMvgH,MADiB,MAAqB,IAAI,EACZ,MAAM,KAAO,GAC3CwgH,MAAqB,MAAiCxgH,EAAa,EAGrEwgH,IAAoB,gBAAkB,OAExCx3J,MAAa,MAAiB,EAAE,oBAAoB,CAAE,IAAKw3J,IAAoB,aAAc,CAAC,EAC1Fx3J,KACF7L,GAAa,QAAM,MAAiB,EAAE,IAAI,CACxC,IAAKqjK,IAAoB,cACzB,KAAMx3J,GAAW,IACnB,CAAC,EAED,KAAK,YAAY,SAAS,CACxB,WAAY,CACV,MAAG,MAAiBA,EAAU,EAC9B,IAAKw3J,IAAoB,aAC3B,CACF,CAAC,GAGP,CAKIrjK,IAAc6L,KAChB,KAAK,SAAS,CAAE,WAAA7L,GAAY,WAAA6L,EAAW,CAAC,KACxC,UAAsC,MAAiBA,EAAU,GAAK,CAAE,QAAS,EAAK,CAAC,EAE3F,OAAS9d,GAAK,CAEZ,MAAMiS,GAAa,QAAM,MAAiB,EAAE,IAAIroB,EAAA,EAAO,iBAAiB,EAClEk0B,MAAa,MAAiB,EAAE,oBAAoBl0B,EAAA,EAAO,iBAAiB,EAE9EqoB,IAAc6L,KAChB,KAAK,SAAS,CACZ,WAAA7L,GACA,WAAA6L,EACF,CAAC,EAED,KAAK,YAAY,SAAS,CACxB,cAAY,MAAiBA,EAAU,CACzC,CAAC,GAGH,QAAQ,MAAM9d,EAAG,CACnB,CACF,CAEO,mBAAuC,CAC5C,MAAMzZ,GAAQ,KAAK,MAAM,SAAS,QAAQ,EACpCinK,MAAc,MAAkBjnK,EAAK,EACrCgvL,GAAe,KAAW,aAAahvL,EAAK,EAElD,IAAIivL,GAAgD,CAClD,KAAM,OACN,MAAO,OACP,KAAM,MACR,EAEID,cAAwBrnJ,GAAA,IAC1BsnJ,GAAgB,CACd,KAAMD,GAAa,MAAM,SACzB,MAAOA,GAAa,MAAM,UAC1B,KAAMA,GAAa,MAAM,gBAC3B,GAGF,IAAI9iK,GAAwC+6I,GAAY,MAAM,QAC9D,MAAM1vI,GAAa,KAAK,MAAM,WAE9B,MAAO,CACL,aAAcA,IAAY,KAAK,cAAc,aAAe0vI,GAAY,MAAM,aAAe,OAC7F,gBAAiB1vI,IAAY,eAAe,QAAU0vI,GAAY,MAAM,gBAAkB,OAC1F,WAAY,CACV,QAAS1vI,IAAY,UACrB,GAAIA,MAAa,MAAiBA,EAAU,EAAI,CAAE,KAAM,OAAW,IAAK,MAAU,CACpF,EACA,QAAArL,GACA,cAAe+6I,GAAY,MAAM,cACjC,YAAaA,GAAY,MAAM,YAC/B,UAAWgoB,EACb,CACF,CA8EO,YAAa,CAClB,OAAO,KAAK,YAAY,MAAM,OAChC,CAEO,UAA+B,CACpC,KAAM,CAAE,WAAA13J,GAAY,WAAA7L,EAAW,EAAI,KAAK,MACxC,IAAImnC,GAEJ,OAAKt7B,IAAY,KAAK,MAEV7L,IAAY,KAAK,MAI3BmnC,MAAK,MAAiB,EAAE,oBAAoBxvD,EAAA,EAAO,iBAAiB,EAHpEwvD,GAAKnnC,GAFLmnC,GAAKt7B,GAQA,CACL,GAAG7L,IAAY,kBAAkB,MAAQ,WAAW,EACpD,WAAY,CAAE,IAAKmnC,IAAI,IAAK,KAAMA,IAAI,IAAK,CAC7C,CACF,CAgBO,uBAAuBt7B,GAAiD,CAC7E,OAAQA,GAAW,KAAK,SAAWA,GAAW,KAAK,UAAYA,GAAW,KAAK,SAAW,EAC5F,CAaO,oBAAqB,CAC1B,OAAO,KAAsB,wBAAwB,EAClD,IAAI,CAACjL,GAAQ/d,KACZ+d,GAAO,CACL,WAAY,KAAK,WACjB,mBAAoB,KAAK,mBACzB,IAAK/d,EACP,CAAC,CACH,EACC,OAAO,OAAO,CACnB,CAEA,IAAW,aAAgC,CACzC,SAAO,MAAkB,KAAK,MAAM,SAAS,QAAQ,CAAC,CACxD,CAgBF,CAEO,SAASqgL,GAA4B,CAAE,MAAAzhK,EAAM,EAA6C,CAC/F,KAAM,CAAE,WAAAzB,GAAY,WAAA6L,EAAW,EAAIpK,GAAM,SAAS,EAC5C,CAAE,KAAArsB,GAAM,QAAAorB,EAAQ,EAAIiB,GAAM,YAAY,SAAS,EAC/C,CAAE,WAAY+hK,GAAwB,oBAAAC,EAAoB,KAAI,MAAuB,EAE3F,GAAI,CAACzjK,IAAc,CAAC6L,IAAc,CAACz2B,GACjC,OAAO,KAGT,MAAMsuL,GAAgB,IAAC,MAAuB73J,GAAW,IAAI,EACvD83J,GAA2B,MAAOt6J,IAAqB,CAE3D,MAAMu6J,GAAkBpjK,GAAQ,IAAKgJ,IACnCA,GAAE,WACEA,GACA,CACE,GAAGA,GACH,WAAYxJ,GAAW,OAAO,CAChC,CACN,EACMolC,MAAa,MAASw+H,GAAiBv6J,EAAK,EAGlD,GAFA5H,GAAM,gBAAgB2jC,EAAU,EAE5B/7B,GAAM,YAAY,IAAK,CAKzB,MAAM25J,GAAmB,CACvB,IALwB,IAAI,IAC5B59H,GAAW,IAAK57B,IAAMA,GAAE,YAAY,GAAG,EAAE,OAAQ0lB,IAAQA,KAAQ,KAAuB,CAC1F,EACkC,KAAO,EAExB,MAAwB7lB,GAAM,WAAW,GAC1D,EACA,MAAM5H,GAAM,yBAAyBuhK,EAAgB,CACvD,CACF,EAEA,SACE,QAAC,OAAI,cAAap/K,EAAA,GAAU,WAAW,SAAS,QAC9C,oBAACigL,GAAA,GACC,KAAAzuL,GACA,WAAAy2B,GACA,WAAY7L,GACZ,QAASyB,GAAM,kBAAkB,EACjC,mBAAoBA,GAAM,mBAC1B,gBAAiBA,GAAM,qBACvB,qBAAsBA,GAAM,gBAC9B,KAEA,OAACqiK,GAAA,GACC,KAAA1uL,GACA,QAAAorB,GACA,WAAAqL,GACA,WAAYpK,GAAM,WAClB,gBAAiBA,GAAM,gBACvB,aAAcA,GAAM,aACpB,oBAAqBgiK,GAAsBhiK,GAAM,yBAA2B,OAC5E,IAAK,MAAQ,YACf,KAEA,QAACmlB,GAAA,EAAK,CAAC,IAAK,EACT,UAAA88I,OACC,oBACE,oBAACzjL,EAAA,IACC,KAAK,OACL,QAASwhB,GAAM,cACf,QAAQ,YACR,cAAa7d,EAAA,GAAU,WAAW,SAAS,SAE3C,mBAAC,KAAK,CAAC,QAAQ,4DAA4D,qBAAS,EACtF,EACC6/K,OACC,OAACxjL,EAAA,IACC,KAAK,OACL,QAAS,IACPujL,GAAuB,CACrB,cAAeG,GACf,QAAS,CACP,QAAS,MAAQ,WACnB,CACF,CAAC,EAEH,QAAQ,YACR,cAAa//K,EAAA,GAAU,WAAW,SAAS,oBAE3C,mBAAC,KAAK,CAAC,QAAS,kDAAmD,kCAAsB,EAC3F,GAEJ,EAEDjM,EAAA,EAAO,oBAAsB8pB,GAAM,uBAAuBoK,EAAU,MACnE,OAACk4J,GAAA,EAAsB,CAAC,eAAgBtiK,GAAM,sBAC5C,mBAACxhB,EAAA,GAAM,CAAC,KAAK,OAAO,QAAQ,YAAY,cAAa2D,EAAA,GAAU,WAAW,SAAS,cACjF,mBAAC,KAAK,CAAC,QAAQ,6DAA6D,0BAAgB,EAC9F,EACF,EAED6d,GAAM,mBAAmB,GAC5B,GACF,CAEJ,CAMA,SAAS0hK,GAAWlpL,GAAwB,CAC1C,KAAM,CAAE,MAAAwnB,EAAM,EAAIxnB,GAEZ+pL,GAAmBviK,GAAM,YAAY,SAAS,EAEpD,SACE,OAACoxB,EAAA,GACC,MAAOpxB,GAAM,YAAY,EACzB,KAAK,WACL,QAASuiK,GAAiB,QAAQ,OAClC,OAAQ/pL,GAAM,OACd,YAAaA,GAAM,YACrB,CAEJ,C,2HC7aO,SAASgqL,GAAsBhqL,GAAmC,CACvE,KAAM,CAAE,OAAAC,GAAQ,OAAA2R,GAAQ,QAAAkjB,GAAS,oBAAAm1J,EAAoB,EAAIjqL,GAEnD,CAACkqL,GAAaC,EAAc,KAAI,aAAsB,CAC1D,OAAQ,GACR,kBAAmB,EACrB,CAAC,EAEKC,GAAkBrjL,IACtBojL,GAAe,CAAE,GAAGD,GAAkB,OAAQnjL,GAAE,cAAc,KAAQ,CAAC,EAEnEsjL,GAA6BC,IACjCH,GAAe,CAAE,GAAGD,GAAkB,kBAAAI,EAAoB,CAAC,EAEvDC,GAA0BC,IAC9BL,GAAe,CAAE,GAAGD,GAAkB,eAAAM,EAAiB,CAAC,EAEpDC,MAAqB,YACzB,IAAM5tG,GAAA,EAA6B,KAAK,EAAE,KAAK,CAAC7gE,GAAG9e,KAAO8e,GAAE,KAAO9e,GAAE,KAAO,EAAIA,GAAE,KAAO8e,GAAE,KAAO,GAAK,CAAE,EACzG,CAAC,CACH,EAEMoxC,GAAkBq9H,GAAmB,OAAQ/tL,IAAM,CACvD,GACEwtL,GAAY,gBACZA,GAAY,iBAAmB,MAC/B,CAACxtL,GAAE,YAAY,IAAIwtL,GAAY,cAAc,EAE7C,MAAO,GAET,MAAMQ,GAAcR,GAAY,OAAO,kBAAkB,EACnDS,GACJjuL,GAAE,KAAK,kBAAkB,EAAE,SAASguL,EAAW,GAAKhuL,GAAE,aAAa,kBAAkB,EAAE,SAASguL,EAAW,EACvGE,GAAWluL,GAAE,MAAM,KACrB,MAAM,KAAKA,GAAE,IAAI,EAAE,KAAM2/B,IAAQA,GAAI,kBAAkB,EAAE,SAASquJ,EAAW,CAAC,EAC9E,GACJ,OAAOC,IAAaC,EACtB,CAAC,EAEKC,MACJ,oBACG,UAAAz9H,GAAgB,OAAO,MAAIq9H,GAAmB,OAAO,eACtD,OAACj/I,GAAA,GACC,KAAK,QACL,QAAS,IAAM,CACb2+I,GAAe,CAAE,GAAGD,GAAkB,OAAQ,EAAK,CAAC,CACtD,EACA,WAAS,KAAE,gFAAiF,cAAc,EAC5G,GACF,EAGF,GAAKjqL,GAIL,SACE,OAAC6qL,GAAA,GACC,KAAMl5K,GACN,oBAAAq4K,GACA,OAAQ78H,GACR,OAAQ88H,GAAY,OACpB,aAAc,GACd,OAAQA,GAAY,SAAW,GAAKW,MAAkB,oBAAE,EACxD,eAAgBX,GAAY,eAC5B,eAAAE,GACA,gBAAiB,IAAM,CAAC,EACxB,kBAAmBF,GAAY,kBAC/B,0BAAAG,GACA,uBAAAE,GACA,QAAAz1J,EAAA,CACF,CAEJ,CCpEO,MAAMi2J,WACH,IAEV,CAHO,kCAKL,WAAQhD,GAAM,gBADd,MAAO,CAAP,KAAO,UAAYiD,EAAA,CAGnB,aAAc,CACZ,SAAO,KAAE,2DAA4D,iBAAiB,CACxF,CAEO,UAAUhrL,GAAgC,CAC/C,SAAO,OAACirL,GAAA,CAA4C,MAAO,KAAO,GAAGjrL,EAAA,EAArC,KAAK,YAAY,CAA2B,CAC9E,CAEO,gBAAmC,CACxC,SAAO,MAAkB,KAAK,MAAM,SAAS,QAAQ,CAAC,CACxD,CAEO,oBAA2C,CAChD,MAAMkrL,GAAW,KAAK,MAAM,SAAS,QAAQ,EAAE,MAAM,MAErD,GAAI,CAACA,IAAY,EAAEA,cAAoB,MACrC,MAAM,IAAI,MAAM,+CAA+C,EAEjE,OAAOA,EACT,CAEO,wBAAwB99H,GAA0C,CACvE,MAAM+9H,GAAc,KAAK,mBAAmB,EAC5CA,GAAY,SAAS,CAAE,gBAAA/9H,EAAgB,CAAC,EACxC+9H,GAAY,yBAAyB,CACvC,CACF,CAEO,SAASH,GAAoC,CAAE,MAAAxjK,EAAM,EAAqD,CAC/G,MAAMzmB,MAAS,MAAW,EAAS,EAC7BqqL,GAAa5jK,GAAM,eAAe,EAAE,SAAS,EAC7C,CAAE,KAAArsB,GAAM,gBAAiBkwL,EAAoB,EAAI7jK,GAAM,mBAAmB,EAAE,SAAS,EAErF4lC,GAA2Ci+H,GAE3C,CAACC,GAAYC,EAAa,KAAI,aAAkB,EAAK,EACrD,CAACC,GAAkBC,EAAmB,KAAI,aAAkB,EAAK,EAEjEC,GAAa,IAAMH,GAAc,EAAI,EACrCI,GAAc,IAAMJ,GAAc,EAAK,EAE7C,GAAI,CAACpwL,IAAQ,CAACiwL,GAAW,KACvB,OAGF,MAAMQ,MACJ,OAAC5B,GAAA,CACC,QAAS2B,GACT,oBAAsBjxH,IAAa,CAC7BA,GAAS,QAAU,SAGvBlzC,GAAM,wBAAwB,CAAC,GAAG4lC,GAAiB,CAAE,GAAIsN,GAAS,MAAO,QAAS,CAAC,CAAE,CAAC,CAAC,EACvFixH,GAAY,EACd,EACA,OAAQL,GACR,OAAQnwL,GAAK,OACd,EAGH,OAAIiyD,GAAgB,OAAS,KAEzB,oBACE,oBAACy+H,GAAA,EAA2B,CAAC,aAAcH,EAAA,CAAY,EACtDE,EAAA,EACH,KAKF,oBACE,oBAAC,GAAqB,CAAC,KAAMR,GAAW,KAAM,gBAAAh+H,GAAkC,MAAA5lC,EAAA,CAAc,KAC9F,QAACskK,GAAA,EAAW,CACV,oBAAC9lL,EAAA,IACC,KAAK,OACL,QAAQ,YACR,QAAS0lL,GACT,cAAa/hL,EAAA,GAAU,WAAW,WAAW,wBAE7C,mBAAC,KAAK,CAAC,QAAQ,qFAAqF,sCAEpG,EACF,KACA,OAAC3D,EAAA,IACC,cAAa2D,EAAA,GAAU,WAAW,WAAW,+BAC7C,UAAW5I,GAAO,UAClB,KAAK,QACL,QAAQ,YACR,QAAS,IAAM0qL,GAAoB,EAAI,EAEvC,mBAAC,KAAK,CAAC,QAAQ,qFAAqF,sCAEpG,EACF,GACF,KACA,OAACv9I,GAAA,GACC,OAAQs9I,GACR,SAAO,KACL,2FACA,6BACF,EACA,QAAM,KACJ,0FACA,iFACF,EACA,eAAa,KAAE,iFAAkF,YAAY,EAC7G,UAAW,IAAM,CACfhkK,GAAM,wBAAwB,CAAC,CAAC,EAChCikK,GAAoB,EAAK,CAC3B,EACA,UAAW,IAAMA,GAAoB,EAAK,EAC5C,EACCG,EAAA,EACH,CAEJ,CAQA,SAAS,GAAsB,CAAE,gBAAAx+H,GAAiB,MAAA5lC,GAAO,KAAArsB,EAAK,EAA8B,CAC1F,MAAM4wL,GAA2B3+H,GAAgB,IAAI,CAAC1wD,GAAGoB,MAAO,CAAE,GAAI,GAAGA,EAAC,MAAMpB,GAAE,EAAE,GAAI,eAAgBA,EAAE,EAAE,EAEtGo7G,GAAaj/E,IAAuB,CACxC,GAAI,CAACA,IAAU,CAACA,GAAO,YACrB,OAGF,MAAMmzJ,GAAanzJ,GAAO,OAAO,MAC3BozJ,GAAWpzJ,GAAO,YAAY,MACpC,GAAImzJ,KAAeC,GACjB,OAEF,MAAMt5H,GAAS,MAAM,KAAKo5H,EAAwB,EAC5C,CAAC/7I,EAAO,EAAI2iB,GAAO,OAAOq5H,GAAY,CAAC,EAC7Cr5H,GAAO,OAAOs5H,GAAU,EAAGj8I,EAAO,EAClCxoB,GAAM,wBAAwBmrC,GAAO,IAAKj2D,IAAMA,GAAE,cAAc,CAAC,CACnE,EAEA,SACE,OAAC,MAAe,CAAC,UAAAo7G,GACf,mBAAC,MAAS,CAAC,YAAY,uBAAuB,UAAU,WACrD,SAACL,OAEE,QAAC,OAAI,IAAKA,GAAS,SAAW,GAAGA,GAAS,eACxC,oBAACy0E,GAAA,GACC,SAAU,CAACtjL,GAAOgiD,KAAmB,CACnC,MAAMuhI,GAAqB/+H,GAAgB,MAAM,EACjD++H,GAAmBvjL,EAAK,EAAIgiD,GAC5BpjC,GAAM,wBAAwB2kK,EAAkB,CAClD,EACA,SAAWvjL,IAAU,CACnB,MAAMujL,GAAqB/+H,GAAgB,MAAM,EACjD++H,GAAmB,OAAOvjL,GAAO,CAAC,EAClC4e,GAAM,wBAAwB2kK,EAAkB,CAClD,EACA,QAASJ,GACT,KAAA5wL,EAAA,CACD,EACAs8G,GAAS,aACZ,CAEJ,CACF,EACF,CAEJ,CAEA,MAAM,GAAat4G,KAA0B,CAC3C,aAAW,OAAI,CACb,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,CACH,GAMA,SAAS8rL,GAAmBjrL,GAAgC,CAC1D,KAAM,CAAE,MAAAwnB,EAAM,EAAIxnB,GACZosL,GAAmB5kK,GAAM,mBAAmB,EAAE,SAAS,EAE7D,SACE,OAACoxB,EAAA,GACC,MAAOpxB,GAAM,YAAY,EACzB,KAAK,UACL,QAAS4kK,GAAiB,gBAAgB,OAC1C,OAAQpsL,GAAM,OACd,YAAaA,GAAM,YACrB,CAEJ,CCxMO,MAAMqsL,WAAsB,IAAoC,CAAhE,kCAEL,KAAU,SAAW,IAAI,KAAyB,KAAM,CAAE,KAAM,CAAC,KAAK,CAAE,CAAC,EAoBzE,KAAO,YAAejoH,IAA0B,CAC9C,KAAK,SAAS,CAAE,IAAKA,GAAI,KAAM,CAAC,CAClC,EAvBA,MAAO,CAAP,KAAO,UAAYkoH,EAAA,CAGnB,OAAc,UAAUjyL,GAAiB,CACvC,MAAMkyL,GAAWlyL,GAAM,OAAO,EACxBmqE,GAA2B,CAC/B,IAAI4jH,GAAoB,CAAE,SAAAmE,EAAS,CAAC,EACpC,IAAIxB,GAA4B,CAAE,SAAAwB,EAAS,CAAC,CAC9C,EAEA,OAAIC,GAAsBnyL,GAAM,MAAM,QAAQ,GAC5CmqE,GAAK,KAAK,IAAIwjH,GAAqB,CAAE,SAAAuE,EAAS,CAAC,CAAC,EAG3C,IAAIF,GAAc,CACvB,SAAAE,GACA,KAAA/nH,GACA,IAAKujH,GAAM,OACb,CAAC,CACH,CAMO,aAAc,CACnB,MAAO,CAAE,IAAK,KAAK,MAAM,GAAI,CAC/B,CAEO,cAAc1qL,GAA8B,CAC5CA,GAAO,KAGR,OAAOA,GAAO,KAAQ,UACxB,KAAK,SAAS,CAAE,IAAKA,GAAO,GAAa,CAAC,CAE9C,CACF,CAEA,SAASivL,GAAsB,CAAE,MAAA9kK,EAAM,EAAuC,CAC5E,KAAM,CAAE,IAAA48C,GAAK,KAAAI,EAAK,EAAIh9C,GAAM,SAAS,EAC/BzmB,MAAS,MAAW,EAAS,EAEnC,GAAI,CAACyjE,IAAQ,CAACA,GAAK,OACjB,OAGF,MAAM80E,GAAa90E,GAAK,KAAM9nE,IAAMA,GAAE,QAAU0nE,EAAG,EAEnD,SACE,QAAC,OAAI,UAAWrjE,GAAO,SAAU,cAAa4I,EAAA,GAAU,WAAW,YAAY,SAAS,QACtF,oBAACgvC,EAAA,EAAO,CAAC,WAAU,GAAC,UAAW53C,GAAO,QACnC,SAAAyjE,GAAK,IAAK9nE,IAAMA,GAAE,UAAU,CAAE,OAAQA,GAAE,QAAU0nE,GAAK,YAAa,IAAM58C,GAAM,YAAY9qB,EAAC,CAAE,CAAC,CAAC,EACpG,KACA,OAAC,OAAI,UAAWqE,GAAO,UACrB,mBAACG,EAAA,EAAe,CACd,mBAAC23C,EAAA,EAAU,CAAC,UAAW93C,GAAO,WAC5B,mBAAC,KAAS,CAAE,SAAAu4I,OAAc,OAACA,GAAW,UAAX,CAAqB,MAAOA,EAAA,CAAY,EAAG,EACxE,EACF,EACF,GACF,CAEJ,CAEO,SAASkzC,GAAsBlpJ,GAAkB,CACtD,KAAM,CAAE,uBAAAprC,GAAyB,EAAM,KAAI,MAAU,EAC/CC,GAAyB,KAAW,iBAAc,MAAoB,IAAyB,EAAE,IAAI,EAE3G,OAD4BD,IAA0BC,GAKtCmrC,KAAa,SACRA,KAAa,aAJzB,EAOX,CAEA,SAAS,GAAUnkC,GAAsB,CACvC,MAAO,CACL,YAAU,OAAI,CACZ,QAAS,OACT,cAAe,SACf,SAAU,EACV,UAAW,EACX,OAAQ,OACR,MAAO,MACT,CAAC,EACD,aAAW,OAAI,CACb,WAAYA,GAAM,OAAO,WAAW,QACpC,OAAQ,aAAaA,GAAM,OAAO,OAAO,IAAI,GAC7C,WAAY,OACZ,aAAc,OACd,qBAAsBA,GAAM,MAAM,OAAO,QACzC,SAAU,EACV,SAAU,QACZ,CAAC,EACD,cAAY,OAAI,CACd,QAASA,GAAM,QAAQ,CAAC,EACxB,OAAQ,MACV,CAAC,EACD,WAAS,OAAI,CACX,WAAY,EACZ,YAAaA,GAAM,QAAQ,CAAC,CAC9B,CAAC,CACH,CACF,C,uFCnIO,MAAMstL,GAA6B,sBAKnC,SAASC,IAAgC,CAC9C,SAAOC,GAAA,GAASF,EAA0B,CAC5C,CCKO,SAASG,GAAoB,CAAE,MAAAplK,EAAM,EAAqC,CAC/E,MAAMiG,MAAY,MAAqBjG,EAAK,EACtC,CAAE,YAAAqlK,EAAY,EAAIrlK,GAAM,SAAS,EACjCzmB,MAAS,MAAW,EAAS,EAC7B,CAAC+rL,GAAsB7lF,EAAc,KAAI,MAAqB,EAE9D8lF,GAAoBL,GAAqB,EAEzC,CAAE,eAAAjjF,GAAgB,aAAAC,GAAc,eAAAC,GAAgB,cAAAC,GAAe,cAAAC,GAAe,iBAAApC,EAAiB,KACnGqC,GAAA,GAAoB,CAClB,UAAW,MACX,aAAc,MACd,YAAa,IACb,UAAW,GACX,UAAWgjF,GACX,oBAAqB,IACrB,SAAUC,EACZ,CAAC,EAEH,uBAAU,IAAM,CACd9lF,GAAe4C,GAAc,SAAS,CACxC,EAAG,CAACA,GAAc,UAAW5C,EAAc,CAAC,KAG1C,oBACE,oBAACuC,GAAA,EAAiB,CAAC,UAAA/7E,EAAA,CAAsB,KACzC,QAAC,OACE,GAAGg8E,GACJ,aAAW,MAAGA,GAAe,UAAW1oG,GAAO,OAAO,EACtD,cAAa4I,EAAA,GAAU,WAAW,YAAY,QAAQ,QAEtD,oBAAC,OAAK,GAAG+/F,GAAc,aAAW,MAAGA,GAAa,UAAW3oG,GAAO,IAAI,EACtE,mBAACisL,GAAA,CAAe,MAAAxlK,EAAA,CAAc,EAChC,KACA,OAAC,OAAK,GAAGoiF,EAAA,CAAe,KACxB,QAAC,OAAK,GAAGD,GAAgB,aAAW,MAAGA,GAAe,UAAW5oG,GAAO,WAAW,EAChF,UAAA8oG,GAAc,cACb,OAAC,OAAI,UAAW9oG,GAAO,qBACrB,mBAACgyE,GAAA,GACC,WAAS,KAAE,kEAAmE,mBAAmB,EACjG,KAAM,iBACN,QAAS00B,GACT,QAAQ,SACR,UAAW1mG,GAAO,UAClB,gBAAY,KACV,qEACA,mBACF,EACF,EACF,EAED,CAAC8oG,GAAc,WAAagjF,OAAe,OAACA,GAAY,UAAZ,CAAsB,MAAOA,EAAA,CAAa,EACtF,CAAChjF,GAAc,WAAa,CAACgjF,OAAe,OAAC/7E,GAAA,EAAO,EAAC,GACxD,GACF,GACF,CAEJ,CAEA,SAASk8E,GAAe,CAAE,MAAAxlK,EAAM,EAAqC,CACnE,MAAMiG,MAAY,MAAqBjG,EAAK,EACtC,CAAE,SAAAukJ,GAAU,0BAAAkhB,GAA2B,4BAAAC,GAA6B,UAAAphB,EAAU,EAAItkJ,GAAM,SAAS,EACjGntB,GAAQmtB,GAAM,SAAS,EACvB8mD,MAAe,MAAwBj0E,EAAK,EAC5C,CAAE,SAAAgvG,EAAS,EAAI57E,GAAU,SAAS,EAClC1sB,MAAS,MAAW,EAAS,EAE7BgsL,GAAoBL,GAAqB,EAEzC,CAAE,eAAAjjF,GAAgB,aAAAC,GAAc,eAAAC,GAAgB,cAAAC,GAAe,cAAAC,GAAe,iBAAApC,EAAiB,KACnGqC,GAAA,GAAoB,CAClB,UAAW,SACX,aAAc,QACd,YAAa,GACb,oBAAqB,IACrB,SAAUijF,EACZ,CAAC,EAEH,OAAAtjF,GAAe,aAAY,MAAGA,GAAe,UAAW1oG,GAAO,SAAS,EAEpE,CAACgrK,IAAY,CAACghB,KAChBrjF,GAAa,MAAM,SAAW,MAI9B,QAAC,OAAI,aAAW,MAAG3oG,GAAO,cAAesoG,IAAYtoG,GAAO,yBAAyB,EAClF,UAAAsoG,OACC,OAAC,OAAI,UAAWtoG,GAAO,gBACrB,mBAACsoG,GAAS,UAAT,CAAmB,MAAOA,EAAA,CAAU,EACvC,KAEF,QAAC,OAAK,GAAGI,GACP,oBAAC,OAAK,GAAGC,GAAc,aAAW,MAAGA,GAAa,UAAWqjF,IAAqBhsL,GAAO,YAAY,EACnG,mBAACosL,GAAA,CAAW,MAAA9yL,GAAc,UAAAyxK,EAAA,CAAsB,EAClD,EACCmhB,IAA6B3+G,OAC5B,OAACqxE,GAAA,GACC,aAAArxE,GACA,UAAW9mD,GAAM,+BACjB,UAAWA,GAAM,0BACjB,UAAWA,GAAM,UAClB,EAEF0lK,IAA+B5+G,OAC9B,OAAC61C,GAAA,GACC,UAAW38F,GAAM,iCACjB,UAAWA,GAAM,4BACjB,OAAM,GACR,EAEDukJ,OACC,oBACE,oBAAC,OAAK,GAAGniE,EAAA,CAAe,KACxB,QAAC,OACE,GAAGD,GACJ,aAAW,MAAGA,GAAe,UAAWojF,IAAqBhsL,GAAO,cAAc,EAEjF,UAAA8oG,GAAc,cACb,OAAC,OAAI,UAAW9oG,GAAO,eACrB,mBAACiF,EAAA,IACC,WAAS,KAAE,4DAA6D,iBAAiB,EACzF,KAAM,iBACN,QAASyhG,GACT,QAAQ,YACR,KAAK,KACL,UAAW1mG,GAAO,mBAClB,gBAAY,KAAE,+DAAgE,iBAAiB,EACjG,EACF,EAED,CAAC8oG,GAAc,cAAa,OAACkiE,GAAS,UAAT,CAAmB,MAAOA,EAAA,CAAU,GACpE,GACF,GAEJ,GACF,CAEJ,CAOA,SAASohB,GAAW,CAAE,MAAA9yL,GAAO,UAAAyxK,EAAU,EAAoB,CACzD,MAAM/qK,MAAS,MAAW,EAAS,EAC7BqsL,GAActhB,IAAazxK,GAEjC,SACE,OAAC,OAAI,UAAW0G,GAAO,WACrB,mBAACqsL,GAAY,UAAZ,CAAsB,MAAOA,EAAA,CAAa,EAC7C,CAEJ,CAEA,SAAS,GAAUjuL,GAAsB,CACvC,MAAMkuL,GAAyB,UAAYZ,GAC3C,MAAO,CACL,iBAAe,OAAI,CACjB,QAAS,OACT,kBAAmB;AAAA,kBAEnB,oBAAqB,MACrB,iBAAkB,MAClB,OAAQ,OACR,CAACY,EAAsB,EAAG,CACxB,oBAAqB,MACvB,CACF,CAAC,EACD,6BAA2B,OAAI,CAC7B,kBAAmB;AAAA;AAAA,kBAGnB,iBAAkB,UACpB,CAAC,EACD,aAAW,OAAI,CACb,SAAU,SACV,OAAQ,MACV,CAAC,EACD,iBAAe,OAAI,CACjB,MAAO,iBACP,QAAS,OACT,cAAe,SACf,UAAW,OACX,SAAU,EACV,UAAW,EACX,MAAO,MACT,CAAC,EACD,WAAS,OAAI,CACX,SAAU,WACV,MAAO,OACP,OAAQ,OACR,SAAU,QACV,CAACA,EAAsB,EAAG,CACxB,OAAQ,OACR,QAAS,OACT,oBAAqB,2BACrB,iBAAkB,MAClB,IAAKluL,GAAM,QAAQ,CAAC,EACpB,SAAU,SACV,MAAO,MACT,CACF,CAAC,EACD,QAAM,OAAI,CACR,MAAO,OACP,SAAU,EACV,QAAS,OACT,cAAe,SACf,UAAW,CACb,CAAC,EACD,eAAa,OAAI,CACf,cAAe,SACf,WAAY,aAAaA,GAAM,OAAO,OAAO,IAAI,GACjD,WAAYA,GAAM,OAAO,WAAW,QACpC,UAAWA,GAAM,QAAQ,CAAC,EAC1B,UAAW,aAAaA,GAAM,OAAO,OAAO,IAAI,GAChD,oBAAqBA,GAAM,MAAM,OAAO,OAC1C,CAAC,EACD,wBAAsB,OAAI,CACxB,QAAS,OACT,cAAe,SACf,QAASA,GAAM,QAAQ,EAAG,CAAC,CAC7B,CAAC,EACD,kBAAgB,OAAI,CAClB,QAAS,OACT,cAAe,MACf,QAASA,GAAM,QAAQ,CAAC,EACxB,UAAW,aAAaA,GAAM,OAAO,OAAO,IAAI,GAChD,YAAa,aAAaA,GAAM,OAAO,OAAO,IAAI,GAClD,WAAYA,GAAM,OAAO,WAAW,QACpC,SAAU,EACV,eAAgB,cAClB,CAAC,EACD,aAAW,OAAI,CACb,OAAQ,QACV,CAAC,EACD,mBAAiB,OAAI,CACnB,QAAS,OACT,cAAe,SACf,SAAU,EACV,SAAU,UACZ,CAAC,EACD,sBAAoB,OAAI,CACtB,MAAOA,GAAM,QAAQ,CAAC,EACtB,eAAgB,SAChB,IAAK,CACH,OAAQ,QACV,CACF,CAAC,EACD,cAAY,OAAI,CACd,OAAQ,OACR,MAAO,OACP,YAAaA,GAAM,QAAQ,CAAC,CAC9B,CAAC,EACD,gBAAc,OAAI,CAChB,OAAQ,OACV,CAAC,EACD,kBAAgB,OAAI,CAClB,OAAQ,aACV,CAAC,CACH,CACF,C,2HChQO,MAAMmuL,GAAe,QAAkB,CAAC,CAAE,MAAAjzL,GAAO,YAAAqwG,GAAa,SAAA6iF,GAAU,KAAApyL,EAAK,IAAM,CACxF,KAAM,CAAE,QAAAX,GAAS,YAAAwuC,GAAa,qBAAAwkJ,EAAqB,EAAInzL,GAAM,SAAS,EAEhEozL,MAAoB,YAAQ,OAAM/c,GAAA,IAAqBr2K,EAAK,EAAG,CAACA,EAAK,CAAC,EAEtEqzL,MAAuB,YAAQ,IAAM,CACzC,MAAM15I,GAAS35C,GAAM,UAAU,EAC/B,GAAK25C,GAIL,SAAO25I,GAAA,IAAyB,CAC9B,MAAAtzL,GACA,KAAAc,GACA,OAAA64C,GACA,SAAU35C,GAAM,gBAAgB,EAAE,SAClC,cAAemzL,EACjB,CAAC,CAEH,EAAG,CAACryL,GAAMd,GAAOG,GAASwuC,GAAawkJ,EAAoB,CAAC,EAEtDI,MAAsB,YAAQ,IAAM,CACxC,GAAIvzL,cAAiB,SAAY,MAAeA,EAAK,EAAG,CACtD,MAAMqyB,MAAW,MAAwBryB,EAAK,EAE9C,OAAMqyB,cAAoBuV,GAAA,KAInB,OAAkCvV,EAAQ,EAH/C,MAIJ,CAEF,EAAG,CAACryB,EAAK,CAAC,EAEJwzL,MAAgB,YACpB,OACE,MACE7kJ,GACA3uC,GAAM,UAAU,GAAG,oBACnBc,IAAM,QAAU,CAAC,EACjBuvG,GACCpc,IAAc,CACbj0F,GAAM,oBAAoBi0F,GAAW,EAAI,CAC3C,CACF,EAEF,CAACnzF,GAAMuvG,GAAarwG,GAAO2uC,EAAW,CACxC,EAEM8kJ,GAAcpjF,GAAY,OAAS,EACnCqjF,GAAqC,CAAC,EAE5C,GAAID,GACFC,GAAgB,QACd,MACE,CAACN,GAAmB,GAAIG,GAAsB,CAACA,EAAmB,EAAI,CAAC,EAAI,GAAIF,IAAwB,CAAC,CAAE,EAC1GG,GACAnjF,EACF,CACF,MAEA,QAAQ6iF,GAAU,CAChB,KAAK,KAAa,IACZK,IAEFG,GAAgB,KAAKH,GAAoB,OAAO,CAAC,EAEnDG,GAAgB,KAAKN,GAAkB,OAAO,CAAC,EAE/C,UAAW1hL,MAAQ2hL,IAAwB,CAAC,EAC1CK,GAAgB,KAAKhiL,GAAK,OAAO,CAAC,EAGpC,UAAWA,MAAQ8hL,GACjBE,GAAgB,KAAKhiL,GAAK,OAAO,CAAC,EAEpC,MACF,KAAK,KAAa,UAChB,UAAWA,MAAQ8hL,GACjBE,GAAgB,KAAKhiL,GAAK,OAAO,CAAC,EAEtC,QACE,KACJ,CAGF,OAAOgiL,EACT,CAAC,EAEDT,GAAa,YAAc,e,wFCjHpB,MAAMU,GAAyB,yCACzBC,GAAmB,CAC9B,gBAAiB,6BACjB,oBAAqB,sBACrB,WAAY,aACZ,OAAQ,QACV,ECsBO,SAASC,GAAmB,CAAE,MAAA7zL,GAAO,KAAAc,GAAM,SAAAvE,GAAU,QAAAk+B,EAAQ,EAAU,CAC5E,MAAM/zB,MAAS,MAAW,EAAS,EAC7B,CAAC2pG,GAAa1tD,EAAc,KAAI,aAAS,EAAE,EAC3CmxI,MAAc,YAClB,OACE,YAAS,CAAC5+J,GAAGhG,KAAU,CACjBgG,OACF,OAAkBy+J,GAAwB,CACxC,KAAMC,GAAiB,OACvB,MAAO1+J,GACP,aAAchG,GACd,aAAc,0BACd,eAAgB,OAClB,CAAC,CAEL,EAAG,GAAG,EACR,CAAC,CACH,EAEM6kK,GAAsBp3L,IAAkB,CAC5CgmD,GAAehmD,EAAK,CACtB,EAEMq3L,GAAS,MACTC,GAAa,MAA2B,eACxCxwE,MAAa,YAAQ,IAAM,IAAIxY,GAAA,EAA+BjrG,EAAK,EAAG,CAACA,EAAK,CAAC,EAE7Ek0L,MAAqB,YACzB,IAAM,IAAI,IAAI,CAAC,MAA2B,eAAgB,MAA2B,WAAW,CAAC,EACjG,CAAC,CACH,EACM,CAAChB,GAAUiB,EAAW,KAAIzlF,GAAA,GAAgBslF,GAAQC,EAAU,EAC5DG,GAAwBz3L,IAAsC,IAClE,OAAkBg3L,GAAwB,CACxC,KAAMC,GAAiB,WACvB,IAAK,MAA2Bj3L,EAAK,EACrC,aAAc,0BACd,eAAgB,OAClB,CAAC,EACDw3L,GAAYx3L,EAAK,CACnB,KAEA,cAAU,IAAM,CACVu2L,IAAY,CAACgB,GAAmB,IAAIhB,EAAQ,GAC9CiB,GAAYF,EAAU,CAE1B,EAAG,CAACA,GAAYf,GAAUiB,GAAaD,EAAkB,CAAC,EAE1D,MAAMG,GAAmE,CACvE,CACE,SAAO,KAAE,2EAA4E,gBAAgB,EACrG,MAAO,MAA2B,cACpC,EACA,CACE,SAAO,KAAE,wEAAyE,aAAa,EAC/F,MAAO,MAA2B,WACpC,CACF,EAEA,SACE,QAAC,OAAI,UAAW3tL,GAAO,QACrB,qBAAC,OAAI,UAAWA,GAAO,UACrB,oBAACo8C,GAAA,GACC,UAAWp8C,GAAO,OAClB,MAAO2pG,GACP,SAAU0jF,GACV,UAAW,GACX,eAAa,KAAE,+DAAgE,eAAe,EAChG,KACA,OAACpoL,EAAA,IACC,gBAAY,KAAE,oDAAqD,OAAO,EAC1E,QAAQ,YACR,KAAK,WACL,UAAWjF,GAAO,YAClB,cAAa4I,EAAA,GAAU,WAAW,YAAY,gBAC9C,QAASmrB,EAAA,CACX,GACF,KACA,OAACzsB,GAAA,EAAK,CAAC,UAAWtH,GAAO,kBACvB,mBAACg6D,GAAA,EAAgB,CAAC,QAAS2zH,GAAc,MAAOnB,GAAU,SAAUkB,GAAsB,UAAS,GAAC,EACtG,KACA,QAACvtL,EAAA,EAAe,CACb,UAAAqsL,KAAa,MAA2B,mBACvC,OAACoB,GAAA,GACC,SAAUt0L,GAAM,MAAM,SACtB,YAAAqwG,GACA,YAAAyjF,GACA,SAAAv3L,EAAA,CACF,EAED22L,KAAa,MAA2B,gBACvC,OAACqB,GAAA,GACC,SAAAh4L,GACA,YAAAu3L,GACA,YAAAzjF,GACA,MAAOoT,GACP,KAAA3iH,EAAA,CACF,GAEJ,GACF,CAEJ,CAEA,MAAM,GAAagE,KAA0B,CAC3C,WAAS,OAAI,CACX,QAAS,OACT,cAAe,SACf,SAAU,EACV,QAASA,GAAM,QAAQ,EAAG,CAAC,EAC3B,OAAQ,OACR,IAAKA,GAAM,QAAQ,CAAC,EACpB,OAAQ,aAAaA,GAAM,OAAO,OAAO,IAAI,GAC7C,YAAa,OACb,aAAc,OACd,oBAAqBA,GAAM,MAAM,OAAO,OAC1C,CAAC,EACD,aAAW,OAAI,CACb,QAAS,OACT,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,eAAa,OAAI,CACf,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,qBAAmB,OAAI,CACrB,aAAcA,GAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,UAAQ,OAAI,CACV,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,CACH,GC9GO,MAAM0vL,WAAyB,IAAuC,CAAtE,kCACL,KAAQ,qBAAuE,CAAC,EAEhF,uBAAoB,IAAM,IACxB,OAAkBb,GAAwB,CACxC,KAAMC,GAAiB,gBACvB,KAAM,CAAC,KAAK,MAAM,eACpB,CAAC,EACD,KAAK,SAAS,CAAE,gBAAiB,CAAC,KAAK,MAAM,eAAgB,CAAC,CAChE,EAEA,yBAAuBzzL,IAAkC,CACvD,MAAMH,GAAQ,KAAK,MAAM,SAAS,QAAQ,EACpC,CAAE,QAASy0L,GAAa,YAAaC,GAAiB,SAAUC,EAAa,EAAI30L,GAAM,MACvFipC,GAAW9oC,GAAQ,YAEzB,OAAkBwzL,GAAwB,CACxC,KAAMC,GAAiB,oBACvB,UAAW3qJ,EACb,CAAC,EAGD,IAAI2rJ,GAAoC,CACtC,SAAU,CACR,GAAGF,GAAgB,SACnB,OAAQ,CAAC,CACX,EACA,aAAW,OAA2BA,GAAgB,UAAW,KAAmB,CACtF,EAEA,KAAK,qBAAqBC,EAAY,EAAI,CAAE,QAASF,GAAa,YAAaC,EAAgB,EAE/F,MAAMG,GAAgB,KAAK,qBAAqB5rJ,EAAQ,GAAG,QACrD6rJ,GAAoB,KAAK,qBAAqB7rJ,EAAQ,GAAG,YAY/D,GAVI6rJ,KACFF,MAAiB,OAA2BA,GAAgBE,EAAiB,GAG/E90L,GAAM,iBAAiBipC,GAAU4rJ,GAAeD,EAAc,EAE1Dz0L,GAAQ,SACVH,GAAM,gBAAgBG,GAAQ,QAAS,EAAI,EAGzCA,GAAQ,YAAa,CACvB,MAAM40L,GAA2B,CAC/B,GAAG50L,GAAQ,YACX,UAAWy0L,GAAe,SAC5B,EACA50L,GAAM,oBAAoB+0L,GAA0B,EAAI,CAC1D,CAEA,KAAK,kBAAkB,CACzB,EAEA,sBAAoB1kF,IAAwB,CAC1C,KAAK,SAAS,CAAE,YAAAA,EAAY,CAAC,CAC/B,EAEA,mBAAiB6iF,IAA2B,CAC1C,KAAK,SAAS,CAAE,SAAAA,EAAS,CAAC,CAC5B,EAEA,qBAAmBtiK,IAAuB,CACxC,KAAgB,QAAQ,CACtB,QAASA,GAAS,MAAM,IACxB,WAAY,MACd,CAAC,CACH,EAEA,uBAA8D,CAC5D,MAAO,CACL,CAAE,MAAO,KAAa,IAAK,MAAO,KAAa,GAAI,EACnD,CAAE,MAAO,KAAa,UAAW,MAAO,KAAa,SAAU,CACjE,CACF,CAEA,MAAO,CAAP,KAAO,UAAYokK,EAAA,CACrB,CAEA,SAASA,GAA0B,CAAE,MAAA7nK,EAAM,EAA0C,CACnF,KAAM,CAAE,gBAAA8nK,GAAiB,YAAA5kF,GAAa,SAAA6iF,GAAU,SAAAhB,EAAS,EAAI/kK,GAAM,SAAS,EACtEntB,GAAQkyL,GAAS,QAAQ,EACzB,CAAE,SAAAjpJ,EAAS,EAAIjpC,GAAM,SAAS,EAC9B,CAAE,KAAAc,EAAK,EAAI,KAAW,QAAQd,EAAK,EAAE,SAAS,EAC9C0G,MAAS,MAAW,EAAS,EAE7BwuL,GAAiB,EADH7kF,GAAY,OAAS,IACF,CAACrwG,GAAM,UAAU,GAAG,oBAAoB,QAAQ,EACjF,CAACm1L,GAAoBC,EAAqB,KAAI1zH,GAAA,GAAU,EAAK,EAC7D2zH,GAAgBnC,KAAa,KAAa,UAC1CR,GAAoBL,GAAqB,EAE/C,SACE,oBACG,WAAC4C,OACA,oBACE,qBAAC,OAAI,UAAWvuL,GAAO,IACrB,oBAACsH,GAAA,EAAK,CAAC,SAAO,KAAE,kDAAmD,eAAe,EAAG,SAAQ,GAC3F,oBAACskC,GAAA,EAAK,CAAC,IAAK,EACV,oBAACgjJ,GAAA,CAAoB,SAAArsJ,GAAoB,OAAQ9b,GAAM,kBAAmB,KAC1E,OAACxhB,EAAA,IACC,KAAK,SACL,QAAQ,YACR,QAASypL,GACT,WAAS,KAAE,oDAAqD,gBAAgB,EAClF,EACCF,OACC,OAACx8G,GAAA,GACC,KAAK,SACL,WAAS,KAAE,qDAAsD,qBAAqB,EACtF,QAAS28G,GAAgB,SAAW,SACpC,QAAS,IAAM,CACbloK,GAAM,cAAckoK,GAAgB,KAAa,IAAM,KAAa,SAAS,CAC/E,EACF,GAEJ,EACF,EAECF,OACC,OAACryI,GAAA,GACC,UAAWp8C,GAAO,cAClB,MAAO2pG,GACP,eAAa,KAAE,kDAAmD,gBAAgB,EAClF,SAAUljF,GAAM,iBAChB,UAAW,GACX,OAAQ,IAAM,CACRkjF,GAAY,SAAW,GACzB+kF,GAAsB,EAAK,CAE/B,EACF,GAEJ,KACA,OAACvuL,EAAA,EAAe,CAAC,UAAW6rL,GAAoB,cAAgB,EAC9D,mBAACO,GAAY,CAAC,MAAAjzL,GAAc,YAAAqwG,GAA0B,SAAA6iF,GAAoB,KAAApyL,EAAA,CAAY,EACxF,GACF,EAEDm0L,OACC,OAACpB,GAAA,CACC,MAAA7zL,GACA,SAAUmtB,GAAM,oBAChB,QAASA,GAAM,kBACf,KAAArsB,EAAA,CACF,GAEJ,CAEJ,CAEA,SAAS,GAAUgE,GAAsB,CACvC,MAAO,CACL,OAAK,OAAI,CACP,QAAS,OACT,cAAe,SACf,QAASA,GAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EACjC,IAAKA,GAAM,QAAQ,CAAC,CACtB,CAAC,EACD,iBAAe,OAAI,CACjB,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,iBAAe,OAAI,CACjB,QAASA,GAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,CACnC,CAAC,EACD,cAAY,OAAI,CACd,OAAQ,QACV,CAAC,CACH,CACF,CAOO,SAASwwL,GAAoB,CAAE,SAAArsJ,GAAU,OAAAwX,EAAO,EAA6B,CAClF,MAAM/5C,MAAS,MAAW6uL,EAAkB,EAC5C,IAAIvrJ,MAA0C,YAC5C,OAAM,OAAsB,EAAE,OAAQ1K,IAAMA,GAAE,KAAO2J,EAAQ,EAAE,CAAC,EAChE,CAACA,EAAQ,CACX,EAEA,OAAKe,KAEHA,MADiB,MAAuB,2BAA2Bf,EAAQ,IAAK,EAAI,EAC9D,SAItB,OAACyvC,GAAA,GACC,UAAWhyE,GAAO,UAClB,WAAS,KACP,6EACA,+BACF,EACA,OAAQsjC,GAAW,KAAK,MAAM,MAC9B,QAASyW,GACT,cAAanxC,EAAA,GAAU,WAAW,YAAY,gBAC9C,gBAAY,KAAE,uEAAwE,sBAAsB,EAC5G,QAAQ,SACR,OAAQ,GACR,UAAS,GAER,SAAA06B,GAAW,KACd,CAEJ,CAEA,SAASurJ,GAAmBzwL,GAAsB,CAChD,MAAO,CACL,aAAW,OAAI,CACb,UAAW,MACb,CAAC,CACH,CACF,CC5MO,MAAM0wL,WAAoB,IAAkC,CAQ1D,YAAYp2K,GAAyB,CAC1C,MAAMA,EAAK,EAHb,KAAQ,qBAAuB,GAoH/B,KAAO,sBAAwB,GAiI/B,KAAO,UAAY,IAAM,CACvB,KAAK,SAAS,CAAE,QAAS,EAAM,CAAC,EAEhC,MAAMpf,GAAQ,KAAK,MAAM,SAAS,QAAQ,EAEtC,KAAK,MAAM,cACb,MAAqB,IAAI,EAAE,YAAYA,EAAK,EAG5C,KAAK,YAAa,SAAS,KAAK,gBAAiB,EAGnD,KAAgB,QAAQ,CAAE,UAAW,IAAK,CAAC,CAC7C,EAUA,KAAO,mBAAqB,IAAM,CAChC,KAAK,SAAS,CAAE,0BAA2B,EAAK,CAAC,CACnD,EAEA,KAAO,0BAA4B,IAAM,IACvC,MAAa,KAAK,MAAM,SAAS,QAAQ,CAAC,EAC1C,KAAK,SAAS,CAAE,QAAS,EAAM,CAAC,EAChC,KAAgB,QAAQ,CAAE,UAAW,IAAK,CAAC,CAC7C,EAEA,KAAO,+BAAiC,IAAM,CAC5C,KAAK,SAAS,CAAE,0BAA2B,EAAM,CAAC,CACpD,EAEA,KAAO,qBAAuB,IAAM,CAClC,KAAK,SAAS,CAAE,4BAA6B,EAAK,CAAC,CACrD,EAEA,KAAO,iCAAmC,IAAM,CAC9C,KAAK,SAAS,CAAE,4BAA6B,EAAM,CAAC,CACtD,EAEA,KAAO,4BAA8B,IAAM,CACzC,MAAMkhH,MAAmB,MAAwB,KAAK,SAAS,CAAC,EAC3DA,KAILA,GAAiB,OAAO,EAExB,KAAK,SAAS,CAAE,4BAA6B,EAAM,CAAC,EACtD,EAEA,KAAO,kBAAoB,IAAM,CAC/B,GAAI,KAAK,MAAM,UAAW,CACxB,KAAK,SAAS,CAAE,UAAW,MAAU,CAAC,EACtC,MACF,CAGA,MAAMsvC,GADQ,KAAK,MAAM,SAAS,QAAQ,EACf,MAAM,MAC5BA,IAIL,KAAK,SAAS,CACZ,UAAW,KAAc,MAAM,EAC5B,SAAS,EAAE,EACX,UAAU,gBAAiB,EAAI,EAC/B,UAAU,aAAc,EAAI,EAC5B,QAAQ,IAAI88B,EAAmB,CAAE,OAAQ98B,GAAa,OAAO,CAAE,CAAC,CAAC,EACjE,MAAM,CACX,CAAC,CACH,EA3TE,MAAMl5F,GADQ,KAAK,MAAM,SAAS,QAAQ,EACjB,OACzB,GAAI,CAACA,IAAc,IAAC,KAAsBA,EAAU,EAClD,MAAM,IAAI,MAAM,sDAAsD,EAGxE,KAAK,YAAcA,GAEnB,KAAK,iBAAiB,KAAK,MAAM,QAAQ,EACzC,KAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI,CAAC,CAC9D,CApBA,MAAO,CAAP,KAAO,UAAYi7H,EAAA,CAsBX,oBAAqB,CAC3B,MAAMvyL,GAAQ,KAAK,MAAM,SAAS,QAAQ,EAEtCA,GAAM,MAAM,WAAa,KAC3BA,GAAM,iBAAiB,YAAY,EAGrC,KAAK,MAAM,IACT,KAAK,YAAY,iBAAiB,KAA0B,CAAC,CAAE,QAAAynC,EAAQ,IAAM,CAE3EA,GAAQ,QAAQ,CAClB,CAAC,CACH,EAEA,MAAMguJ,MAAoB,MAAiCz1L,EAAK,EAG1D01L,GAAgB11L,GAAM,MAAM,cAClC,OAAI01L,KACD,MAAM,QAAQA,EAAa,EAAIA,GAAgB,CAACA,EAAa,GAAG,QAASppK,IAAW,IAC/E,MAAcA,EAAM,GACtBA,GAAO,SAAS,CAEpB,CAAC,EAGH,KAAK,cAAc,EAEZ,IAAM,CACX,KAAK,cAAc,EAEfmpK,IACFA,GAAkB,CAEtB,CACF,CAEQ,eAAgB,CACtB,GAAI,CAAC,KAAK,MAAM,SAAW,CAAC,KAAK,qBAE/B,OAGF,MAAMn+H,GAAa,KAAK,YAClBq+H,GAAer+H,GAAW,MAC1Bs+H,GAAgB,KAAK,iBAG3B,GAAI,KAAK,uBAAuB3kK,EAAA,GAAqB,CAAC5tB,EAAA,EAAO,eAAe,oBAAqB,CAC/F,KAAK,YAAY,iBAAiB,EAClC,MACF,CAEA,MAAMw+F,GAAa,IAAI,KAAyB,CAC9C,eAAa,KAAE,oCAAqC,eAAe,EACnE,OAAQ,KAAK,YACb,QAAS,IAAM,CAGTvqC,GAAW,QAAUq+H,IACvBr+H,GAAW,SAASq+H,EAAY,CAEpC,EACA,KAAM,IAAMr+H,GAAY,SAASs+H,EAAa,CAChD,CAAC,KAKiB,MAAqB,IAAI,EACjC,MAAM,SAAS,mBAAmB/zF,EAAU,CACxD,CAEQ,cAAcg0F,GAAQ,EAAG,CAC/B,MAAM71L,GAAQ,KAAK,SAAS,EACtB25C,GAAS35C,GAAM,UAAU,EAE/B,GAAI,CAAC25C,IAAUA,GAAO,KAAK,KAAO35C,GAAM,MAAM,SAAU,CAClD61L,GAAQ,IACV,WAAW,IAAM,KAAK,cAAcA,GAAQ,CAAC,EAAGA,GAAQ,EAAE,EAE1D,KAAK,SAAS,CAAE,iBAAkB,6BAA8B,CAAC,EAEnE,MACF,CAEA,KAAK,eAAel8I,EAAM,CAC5B,CAEQ,iBAAiBu4I,GAAoC,CAC3D,MAAMlyL,GAAQkyL,GAAS,QAAQ,EAE/B,KAAK,sBAAqB,MAAgBlyL,EAAK,EAC/C,KAAK,iBAAmB,KAAW,sBAAsB,KAAK,YAAY,KAAK,CACjF,CAUQ,uBAAwB,CAC9B,MAAMA,GAAQ,KAAK,MAAM,SAAS,QAAQ,EACpC8oC,GAAuB,IAAM,CACjC,KAAM,CAAE,WAAAD,EAAW,KAAI,MAAgB,KAAK,sBAAoB,MAAgB7oC,EAAK,CAAC,EACtF,KAAK,SAAS,CAAE,QAAS6oC,EAAW,CAAC,CACvC,EAEMitJ,GAAgC,KAAK,yBACvC,YAAShtJ,GAAsB,GAAG,EAClCA,GAEEitJ,GAAqBtsL,IAAwC,CAC7D+9B,EAAA,EAA4B,yBAAyB/9B,EAAK,GAC5DqsL,GAA8B,CAElC,EAGA,KAAK,MAAM,IAAI,KAAK,YAAY,iBAAiB,KAA8BC,EAAiB,CAAC,CACnG,CAEO,UAAqB,CAC1B,OAAO,KAAK,MAAM,UAAU,QAAQ,CACtC,CAEQ,eAAep8I,GAAqB,CAC1C,MAAM35C,GAAQ,KAAK,SAAS,EAGxB,KAAK,MAAM,gBACb,KAAK,iBAAiB,KAAK,MAAM,QAAQ,EAEzC,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB25C,EAAM,EAG3B,KAAK,MAAM,IACT35C,GAAM,iBAAiB,CAACyC,GAAG68B,KAAM,CAC3B78B,GAAE,WAAa68B,GAAE,UACnB,KAAK,cAAc,CAEvB,CAAC,CACH,EAGA,KAAK,SAAS,CACZ,YAAa,IAAIk1J,GAAiB,CAChC,SAAU,KAAK,MAAM,SACrB,YAAa,GACb,SAAU,KAAa,GACzB,CAAC,EACD,eAAgB,EAClB,CAAC,GAID,KAAK,gBAAgB76I,EAAM,CAE/B,CAEQ,gBAAgBA,GAAqB,CAC3C,MAAMq8I,GAAgBr8I,GAAO,KAAK,cAE5B35C,GAAQ,KAAK,MAAM,SAAS,QAAQ,EAc1C,GAZIg2L,KACE,KAAK,MAAM,WACb,KAAgB,QAAQ,CAAE,IAAK,IAAK,EAAG,EAAI,EAC3C,KAAK,SAAS,CAAE,SAAU,MAAU,CAAC,GAInCh2L,GAAM,MAAM,OACdA,GAAM,SAAS,CAAE,MAAO,MAAU,CAAC,GAInC,CAACg2L,GAAe,CAClB,GAAI,CAAC,KAAK,MAAM,SAAU,CACxB,MAAMtkB,GAAWsgB,GAAc,UAAU,KAAK,SAAS,CAAC,EACxD,KAAK,SAAS,CAAE,SAAAtgB,EAAS,CAAC,EAE1B,KAAK,aAAa,IAAI,KAAyBA,EAAQ,EAAG,EAAI,CAChE,CAGA,GAAI,CAAC1xK,GAAM,MAAM,MAAO,CACtB,IAAI6yD,MAAK,SAAiC,MAAqB,IAAI,EAAE,MAAM,GAAI,GAAG,cAC7EA,KACHA,GAAKxvD,EAAA,EAAO,mBAGdrD,GAAM,SAAS,CACb,MAAO,IAAI,KAAqB,CAC9B,MAAO,IAAI,KAAiB,CAC1B,WAAY,CACV,IAAK6yD,EACP,EACA,QAAS,CAAC,CAAE,MAAO,GAAI,CAAC,CAC1B,CAAC,EACD,gBAAiB,CAAC,CACpB,CAAC,CACH,CAAC,CACH,CACF,CACF,CAEO,WAAY,CACjB,OAAO,KAAK,WAAW,EAAE,SAAS,CACpC,CAEO,YAAa,CAClB,SAAO,MAAsB,KAAK,MAAM,SAAS,QAAQ,CAAC,CAC5D,CAEO,WAAWlH,GAAsBolD,GAAoB,CAC1D,MAAM39E,MAAY,MAAqB,IAAI,EAE3C,MAAO,CACL,QAAM,KAAE,+CAAgD,YAAY,EACpE,WAAYA,GAAU,WAAWu4B,GAAUolD,EAAQ,CACrD,CACF,CAiBO,gBAAiB,CACtB,KAAK,iBAAiB,KAAK,MAAM,QAAQ,EACzC,KAAK,SAAS,CAAE,QAAS,EAAM,CAAC,EAGhC,KAAK,qBAAuB,EAC9B,CAwDF,CAEO,SAASklF,GAAoBj2L,GAAiBk2L,GAAa,GAAoB,CACpF,OAAO,IAAIV,GAAY,CACrB,eAAgB,GAChB,SAAUx1L,GAAM,OAAO,EACvB,WAAAk2L,EACF,CAAC,CACH,C,oHCtWO,MAAMC,EAAkB,CAAC,CAC9B,MAAA3vL,EAAQ,WACR,WAAA0tD,EACA,WAAAjjD,EAAa,GACb,QAAAmlL,EACA,aAAAC,EACA,QAAAtsL,EACA,YAAA7C,EAAc,WACd,YAAA+uB,EACA,GAAGnqB,CACL,OAEI,OAAC,KACC,MAAAtF,EACA,QAAAuD,EACA,YAAAksB,EACA,WAAAi+B,EACA,QACEmiI,KACE,oBACE,oBAAC,SACC,KAAK,OACL,UAAW,uBAAuBplL,CAAU,GAC5C,SAAU,GACV,MAAM,aACL,MAAG,QAAKnF,EAAY,OAAO,EAC9B,KACA,OAAC,KAAM,CAAC,QAASsqL,EAAS,QAAQ,YAAY,KAAK,SACjD,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,iBAAK,EAC3D,GACF,KAEA,OAAC,SACC,KAAK,WACL,UAAW,uBAAuBnlL,CAAU,GAC5C,YAAA/J,EACC,GAAG4E,CAAA,CACN,EAGN,EAIJqqL,EAAgB,YAAc,iB,4GCpEvB,SAASG,EAAqB,CAAE,SAAA/5L,EAAU,cAAAg6L,CAAc,EAA8B,CAC3F,SACE,oBACE,oBAAC,IAAc,CACb,mBAAC,KAAK,CAAC,QAAQ,0DAA0D,4BAAgB,EAC3F,KACA,OAAC,KACC,aAAcA,EACd,KAAK,QACL,eAAa,KAAE,wEAAyE,oBAAoB,EAC5G,OAAQh6L,EACR,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,iBAAiB,4BAC3E,MAAO,GACT,GACF,CAEJ,C,4eCVA,MAAMi6L,EAAgB,CAAC,CAAE,UAAArvL,GAAW,SAAA8hJ,GAAU,QAAAzuH,EAAQ,IAAa,CACjE,MAAM9zB,MAAS,MAAWuD,CAAS,EAC7BwsL,MAAU,MAAkC,EAC5C,CACJ,QAAAzjL,GACA,SAAA6yF,GACA,UAAW,CAAE,OAAAxgD,EAAO,CACtB,EAAIoxI,GAEE,CAAE,OAAQ7uB,GAAW,CAAC,EAAG,OAAA10J,GAAQ,OAAAE,EAAO,KAAI,MAAiC,CAAE,KAAM,UAAW,CAAC,EAEjG,CAACsjL,GAAc,CAAE,KAAMC,EAAU,CAAC,EAAI1gJ,EAAA,GAAa,UAAU,aAAa,aAAa,EAC7F,sBAAU,IAAM,CAEVzb,IACFk8J,GAAa,CAAE,IAAKl8J,EAAQ,CAAC,CAEjC,EAAG,CAACk8J,GAAcl8J,EAAO,CAAC,KAGxB,OAAC,OAAI,UAAArzB,GACH,mBAAC6G,EAAA,GACC,SAAO,KAAE,uDAAwD,wBAAwB,EACzF,SAAAi7I,GAEA,oBAAC,OACC,qBAAC,OAAI,aAAW,MAAGviJ,GAAO,SAAUA,GAAO,MAAM,EAC9C,UAAAiwL,OACC,QAAC,OACC,oBAAC3oL,EAAA,EAAK,CAAC,SAAO,KAAE,2CAA4C,YAAY,EAAG,SAAQ,GACjF,mBAACmzC,EAAA,EAAK,CAAC,GAAG,kBAAkB,aAAcw1I,GAAU,cAAc,MAAO,SAAQ,GAAC,EACpF,KACA,OAAC1oJ,EAAA,EAAO,EAAC,GACX,EAED25H,GAAS,IAAI,CAACjuI,GAASprB,QAEpB,QAAC,OAAI,UAAW7H,GAAO,IAA2B,cAAY,UAC5D,oBAACsH,EAAA,GACC,SAAO,KAAE,sCAAuC,OAAO,EACvD,QAAS,CAAC,CAACq3C,IAAQ,WAAW92C,EAAK,GAAG,KACtC,MAAO82C,IAAQ,WAAW92C,EAAK,GAAG,MAAM,QAExC,mBAAC4yC,EAAA,GACE,GAAG0kD,GAAS,YAAYt3F,EAAK,QAAkB,CAC9C,SAAU,CACR,MAAO06I,GACP,WAAS,KAAE,2CAA4C,WAAW,CACpE,CACF,CAAC,EACD,aAActvH,GAAQ,KACtB,eAAa,KAAE,4CAA6C,OAAO,EACnE,GAAI,WAAWprB,EAAK,SACtB,EACF,KACA,OAACP,EAAA,EAAK,CAAC,SAAO,KAAE,yCAA0C,UAAU,EAClE,mBAAC,MACC,QAAAgF,GACA,OAAQ,CAAC,CAAE,MAAO,CAAE,SAAAzW,GAAU,IAAAgC,GAAK,GAAGiB,EAAM,CAAE,OAC5C,OAACsH,EAAA,IACE,GAAGtH,GACJ,SAAW7C,IAAUJ,GAASI,GAAM,KAAK,EACzC,UAAW+J,GAAO,eAClB,QAAS,KACT,gBAAY,KAAE,8CAA+C,UAAU,EACvE,GAAI,WAAW6H,EAAK,YACtB,EAEF,aAAcorB,GAAQ,UAAY,KAAoB,CAAC,EAAE,MACzD,KAAM,YAAYprB,EAAK,YACvB,MAAO,CACL,SAAU,CACR,MAAO06I,GACP,WAAS,KAAE,2CAA4C,WAAW,CACpE,CACF,EACF,EACF,KACA,OAACj7I,EAAA,GACC,SAAO,KAAE,sCAAuC,OAAO,EACvD,QAAS,CAAC,CAACq3C,IAAQ,WAAW92C,EAAK,GAAG,MACtC,MAAO82C,IAAQ,WAAW92C,EAAK,GAAG,OAAO,QAEzC,mBAAC4yC,EAAA,GACE,GAAG0kD,GAAS,YAAYt3F,EAAK,SAAmB,CAC/C,SAAU,CACR,MAAO06I,GACP,WAAS,KAAE,2CAA4C,WAAW,CACpE,CACF,CAAC,EACD,aAActvH,GAAQ,MACtB,eAAa,KAAE,4CAA6C,OAAO,EACnE,GAAI,WAAWprB,EAAK,SACtB,EACF,GACEq5J,GAAS,OAAS,GAAK,CAAC3e,QACxB,OAAC93G,EAAA,GACC,gBAAY,KAAE,oDAAqD,gBAAgB,EACnF,UAAWzqC,GAAO,aAClB,KAAK,YACL,QAAS,IAAM0M,GAAO7E,EAAK,EAE3B,mBAAC,KAAK,CAAC,QAAQ,iCAAiC,kBAAM,EACxD,IAlE6B,GAAGorB,GAAQ,EAAE,EAoE9C,CAEH,GACH,KACA,OAAChuB,EAAA,IACC,UAAWjF,GAAO,OAClB,WAAS,KACP,kFACA,uEACF,EACA,KAAK,SACL,KAAK,OACL,QAAQ,YACR,QAAS,IAAM,CACb,MAAMkwL,GAAa,CAAE,KAAM,GAAI,MAAO,GAAI,SAAU,KAAgB,KAAM,EAC1E1jL,GAAO0jL,EAAU,CACnB,EAEA,mBAAC,KAAK,CAAC,QAAQ,sCAAsC,uBAAW,EAClE,GACF,EACF,EACF,CAEJ,EAEM3sL,EAAanF,KACV,CACL,WAAS,OAAI,CACX,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,OAAK,OAAI,CACP,UAAWA,GAAM,QAAQ,CAAC,EAC1B,QAAS,OACT,WAAY,aACZ,cAAe,MACf,gBAAiBA,GAAM,OAAO,WAAW,UACzC,QAAS,GAAGA,GAAM,QAAQ,CAAC,CAAC,IAAIA,GAAM,QAAQ,CAAC,CAAC,MAAMA,GAAM,QAAQ,CAAC,CAAC,GACtE,YAAa,CACX,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CACF,CAAC,EACD,gBAAc,OAAI,CAChB,WAAYA,GAAM,QAAQ,CAAC,EAC3B,UAAWA,GAAM,QAAQ,GAAG,CAC9B,CAAC,EACD,kBAAgB,OAAI,CAClB,SAAU,OACZ,CAAC,EACD,YAAU,OAAI,CACZ,SAAU,GAAGA,GAAM,YAAY,OAAO,EAAE,KACxC,OAAQ,GAAGA,GAAM,QAAQ,CAAC,CAAC,KAC3B,WAAYA,GAAM,QAAQ,EAAG,CAC/B,CAAC,EACD,UAAQ,OAAI,CACV,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,CACH,GAGF,EAAe0xL,E,eC/KR,MAAMK,GAAgB,IAAM,CACjC,KAAM,CAAE,QAAA7jL,GAAS,UAAA40F,EAAU,KAAI,MAAkC,EAE3D,CACJ,MAAO,CAAE,SAAUkvF,GAAkB,MAAOC,EAAS,EACrD,WAAY,CAAE,QAASC,EAAgB,CACzC,KAAI,MAAc,CAChB,KAAM,WACN,QAAAhkL,GACA,MAAO,CACL,SAAWrW,IAAUirG,GAAU,EAAE,OAASjrG,EAC5C,CACF,CAAC,EAEK,CACJ,MAAO,CAAE,SAAUs6L,GAAgB,MAAOC,EAAO,EACjD,WAAY,CAAE,QAASC,EAAc,CACvC,KAAI,MAAc,CAChB,KAAM,SACN,QAAAnkL,GACA,MAAO,CACL,SAAWrW,IAAUirG,GAAU,EAAE,SAAWjrG,EAC9C,CACF,CAAC,EAEK,CACJ,MAAO,CAAE,SAAU8gD,GAAkB,MAAOtpC,EAAS,CACvD,KAAI,MAAc,CAChB,KAAM,WACN,QAAAnB,EACF,CAAC,EAEK/F,GAAU+pL,IAAmBG,GAE7BvpK,MAAO,MAASmpK,EAAQ,EACxBppK,MAAK,MAASupK,EAAM,EAE1B,SACE,OAAClpL,EAAA,GACC,UAAWtH,EAAO,UAClB,SAAO,KAAE,sDAAuD,uBAAuB,EACvF,MAAOuG,GAAU,mCAAqC,GACtD,QAAAA,GAEA,mBAACmqL,EAAA,GACC,MAAO,CACL,KAAAxpK,GACA,GAAAD,GACA,IAAK,CACH,KAAAC,GACA,GAAAD,EACF,CACF,EACA,SAAAxZ,GACA,SAAWlG,IAAa,CACtB6oL,MAAiB,MAAS7oL,GAAS,IAAI,CAAC,EACxCgpL,MAAe,MAAShpL,GAAS,EAAE,CAAC,CACtC,EACA,iBAAmBA,IAAawvC,GAAiBxvC,EAAQ,EACzD,aAAc,GACd,gBAAiB,GACjB,eAAa,KAAE,wDAAyD,mBAAmB,EAC7F,EACF,CAEJ,EAEMvH,EAAS,CACb,aAAW,OAAI,CACb,MAAO,OACT,CAAC,CACH,E,2GCpDA,MAAM2wL,EAA0B,CAACxe,GAAgBye,GAAoB78I,KAA4B,CAC/F,KAAM,CAACr7B,GAAO6sF,EAAQ,KAAI,YAAoB,KAE9CsrF,EAAA,GAAY1e,GAAIye,GAAY,CAACl4K,EAAK,CAAC,KAEnCo4K,GAAA,GAAqB,IAAM,CACzBvrF,GAASxxD,EAAY,CACvB,EAAG,CAACA,EAAY,CAAC,CACnB,EAEag9I,GAA2B,CAAC,CAAE,aAAA1/J,GAAc,SAAU2/J,GAAe,QAAAl9J,EAAQ,IAAa,CACrG,MAAMotI,GAAsB,CAC1B,GAAIptI,GAAU,CAAC,CAAE,KAAM,KAAwB,MAAOA,GAAS,SAAU,KAAgB,KAAM,CAAC,EAAI,CAAC,EACrG,GAAGk9J,EACL,EAAE,IAAI,IAAqB,EACrBC,GAAetjG,EAAA,EAAgB,UAAU,sBAAsB,aAC/D3tF,MAAS,MAAW,EAAS,EAC7B+H,GAAUguK,GAAW,EAIrBmb,GAAmBp9J,IAAWk9J,GAAc,KAAM/9J,IAAYA,GAAQ,OAASA,GAAQ,IAAI,EAE3F,CAACk+J,GAAuB,CAAE,YAAaC,GAAS,CAAC,EAAG,WAAAt3G,GAAY,QAAAu3G,EAAQ,CAAC,EAAIJ,GAAa,EAehG,GAVAN,EACE,IAAM,CACAO,IACFC,GAAsB,CAAE,aAAA9/J,GAAc,OAAQ,CAAE,SAAA6vI,EAAS,CAAE,CAAC,CAEhE,EACA,IACA,CAAC7vI,GAAc6vI,EAAQ,CACzB,EAEImwB,GACF,SACE,OAAC5uJ,EAAA,GACC,SAAO,KAAE,kEAAmE,uBAAuB,EACnG,SAAS,QAET,mBAAC,KAAK,CAAC,QAAQ,+DAA+D,+FAE9E,EACF,EAIJ,MAAM6uJ,GAAkBF,GAAO,IAA+CtvE,KAAW,CACvF,GAAIA,GAAM,YACV,KAAMA,EACR,EAAE,EAEF,SACE,QAAC,OACC,qBAAC,MAAG,UAAW9hH,GAAO,MACpB,oBAAC,KAAK,CAAC,QAAQ,uCAAuC,oCAAwB,KAC9E,OAAC6C,EAAA,GACC,WACE,QAAC,OACC,oBAAC,KAAK,CAAC,QAAQ,+CAA+C,iEAE9D,KACA,OAAC,OAAG,KACJ,OAAC,KAAK,CAAC,QAAQ,0CAA0C,mEAEzD,GACF,EAGF,oBAAC,QAAK,oBAEJ,OAAC1D,EAAA,EAAI,CAAC,KAAK,cAAc,KAAK,IAAK,IACrC,EACF,EACCmyL,GAAgB,OAAS,KACxB,OAACliJ,EAAA,EAAK,CAAC,UAAWpvC,GAAO,MAAO,MAAM,OAAO,KAAMsxL,GAAgB,OAAQ,EACzE,MACN,EACC,CAACJ,OACA,OAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,oEAAoE,sDAEnF,EACF,EAGDp3G,OACC,OAAC1pC,EAAA,GACC,QAAM,KACJ,iFACA,0CACF,EACF,EAED,CAAC0pC,IAAc,CAACu3G,IAAWH,OAC1B,OAAC,OAAI,UAAWlxL,GAAO,MACpB,SAAAsxL,GAAgB,OAAS,KACxB,OAACx0H,GAAA,GACC,MAAOw0H,GACP,aAAc,GACd,KAAMvpL,GACN,WAAY,CAAE,aAAc,EAAG,EACjC,KAEA,OAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,sEAAsE,2CAErF,EACF,EAEJ,GAEJ,CAEJ,EAEA,SAASguK,IAAgE,CACvE,MAAM/1K,MAAS,MAAW,EAAS,EAEnC,MAAO,CACL,CACE,GAAI,QACJ,SAAO,KAAE,mCAAoC,OAAO,EACpD,WAAY,SAAwB,CAAE,KAAA5F,EAAK,EAAG,CAC5C,SAAO,OAACm3L,GAAA,EAAe,CAAC,MAAOn3L,GAAK,OAAO,MAAO,CACpD,EACA,KAAM,QACN,UAAW4F,GAAO,WACpB,EACA,CACE,GAAI,SACJ,SAAO,KAAE,oCAAqC,QAAQ,EACtD,WAAY,SAAoB,CAAE,KAAA5F,EAAK,EAAG,CACxC,SAAO,OAACo3L,GAAA,EAAW,CAAC,OAAQp3L,GAAK,OAAQ,KAAK,IAAK,EACrD,EACA,KAAM,MACR,EACA,CACE,GAAI,UACJ,SAAO,KAAE,qCAAsC,SAAS,EACxD,WAAY,SAAuB,CAAE,KAAAA,EAAK,EAAG,CAC3C,SAAO,mBAAG,mBAAWA,GAAK,QAAQ,EAAI,OAAM,MAASA,GAAK,QAAQ,EAAE,OAAO,qBAAqB,EAAE,CACpG,EACA,KAAM,OACR,CACF,CACF,CAEA,MAAM,GAAagE,KAA0B,CAC3C,SAAO,OAAI,CACT,SAAU,GAAGA,GAAM,YAAY,OAAO,EAAE,IAC1C,CAAC,EACD,eAAa,OAAI,CACf,UAAWA,GAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,SAAO,OAAI,CACT,QAAS,OACT,WAAY,QACd,CAAC,EACD,SAAO,OAAI,CACT,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,eAAa,OAAI,CACf,QAAS,OACT,WAAY,QACd,CAAC,CACH,G,gBChJA,MAAMqzL,GAAwB,IAAM,CAClC,KAAM,CAAE,GAAIC,GAAY,EAAG,KAAI,KAAU,EACnC,CAAE,qBAAsBt7L,GAAyB,EAAG,KAAI,MAAgB,EACxE,CACJ,KAAMu7L,GACN,UAAWC,GACX,MAAOC,EACT,EAAIC,EAAA,EAAiB,UAAU,WAAW,SAAS,CACjD,GAAIJ,GACJ,iBAAe,MAAoBt7L,EAAsB,EACzD,aAAc,GACd,cAAe,EACjB,CAAC,EACK09B,GAAU69J,IAAS,UAAU,KAAM9iH,IAAMA,GAAE,OAAS,IAAsB,GAAG,MAC7EkjH,GAAwB37L,KAA2B,KAEnDkoG,MAAgB,WAAQ,IAAM,CAClC,GAAI,CAACqzF,GACH,OAEF,MAAMK,GAAmBL,GAAQ,UAAU,OAAQ9iH,IAAMA,GAAE,OAAS,IAAsB,EAC1F,SAAO,OAAwB,CAAE,GAAG8iH,GAAS,SAAUK,EAAiB,CAAC,CAC3E,EAAG,CAACL,EAAO,CAAC,EAEZ,OAAID,IAAaE,MAEb,OAACxhJ,EAAA,GACC,QAAM,KACJ,6EACA,yCACF,EACF,KAKF,MAAayhJ,EAA2B,GAAKA,GAA4B,SAAW,OAIlF,OAACpvJ,EAAA,GACC,SAAO,KACL,2DACA,6CACA,CAAE,UAAAivJ,EAAU,CACd,EACA,SAAS,UACX,GAImBK,GAAwBJ,IAAS,eAAe,MAAQ,OAe7E,oBACE,oBAACM,EAAA,EAA0B,CAAC,oBAAqB77L,EAAA,CAAwB,KACzE,OAAC87L,GAAA,CAAe,QAAAp+J,GAAkB,WAAYwqE,GAAe,uBAAAloG,EAAA,CAAgD,GAC/G,KAdE,OAACqsC,EAAA,GACC,SAAO,KACL,yEACA,0DACF,EACA,SAAS,QACX,CAUN,EAcayvJ,GAAiB,CAAC,CAC7B,WAAA1xF,MAAa,OAA4B,EACzC,uBAAApqG,GACA,iBAAA+7L,GACA,SAAAtsH,GACA,QAAA/xC,EACF,IAA2B,CACzB,KAAM,CAACs+J,GAAwBC,EAAoB,KAAI,MACrD,KAAmB,wBACrB,EACMC,GAAaF,IAA0BC,GAEvC,CAACE,GAAe,CAAE,UAAA5xL,EAAU,CAAC,EAAImxL,EAAA,EAAiB,UAAU,cAAc,YAAY,EACtFU,MAAU,MAAQ,CAAE,cAAehyF,EAAW,CAAC,EAC/CxgG,MAAS,MAAW,EAAS,EAE7B,CAAE,SAAAm/F,GAAU,aAAAH,GAAc,UAAAiC,GAAW,MAAAhC,GAAO,SAAA30F,GAAU,YAAAmoL,EAAY,EAAID,GAEtE,CAAC3yE,GAAUwwE,GAAUG,GAAQtvB,EAAQ,EAAIjiE,GAAM,CAAC,WAAY,WAAY,SAAU,UAAU,CAAC,EAG7FyzF,GAAiB,IAAM,CAC3B,KAAgB,QAAK,MAAW,qBAAsBt8L,EAAsB,CAAC,CAC/E,EAEMu8L,GAA0BR,IAAoBO,GAC9CE,GAAkB/sH,IAAY6sH,GAE9BG,GAAW,MAAOz4L,IAA4B,CAClD,KAAM,CAAE,GAAAkpB,GAAI,SAAA+sK,GAAU,OAAAG,GAAQ,QAAA3gG,GAAS,UAAAhlD,GAAW,SAAUioJ,EAAe,EAAI14L,GAE3E05B,IACFg/J,GAAe,KAAK,CAAE,KAAM,KAAwB,MAAOh/J,GAAS,SAAU,KAAgB,KAAM,CAAC,EAGvG,MAAMi/J,GAAiBD,GAAe,IAAI,IAAqB,EAAE,OAAQh6L,IAAUA,GAAM,MAAQA,GAAM,KAAK,EACtGioC,MAAU,UACd,CACE,GAAAzd,GACA,SAAA+sK,GACA,OAAAG,GACA,QAAA3gG,GACA,UAAAhlD,GACA,SAAUkoJ,EACZ,EACC98L,IAAU,CAAC,CAACA,EACf,EACA,MAAMs8L,GAAc,CAAE,iBAAe,MAAoBn8L,EAAsB,EAAG,QAAA2qC,EAAQ,CAAC,EACxF,OAAO,EACP,KAAMiyJ,IAAuB,CAC5BL,KAA0BK,EAAkB,CAC9C,CAAC,CACL,EAGM,CAACC,GAAcC,EAAe,KAAI,YAASrzE,EAAQ,KACzDgxE,EAAA,GACE,IAAM,CACJ,MAAI,MAAYR,EAAQ,MAAK,MAAYG,EAAM,EAC7C,GAAI3wE,KAAaozE,GACf3oL,GAAS,YAAU,SAAS,MAAkB,IAAI,KAAK+lL,EAAQ,KAAG,MAAcxwE,EAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,EACzGqzE,GAAgBrzE,EAAQ,MACnB,CACL,MAAMszE,GAAa,IAAI,KAAK9C,EAAQ,EAAE,QAAQ,EAE9C,GADiB,IAAI,KAAKG,EAAM,EAAE,QAAQ,EAC3B2C,GAAY,CACzB,MAAMC,MAAe,MAAoC,CACvD,MAAO,IAAI,KAAK/C,EAAQ,EACxB,IAAK,IAAI,KAAKG,EAAM,CACtB,CAAC,EACDlmL,GAAS,WAAY8oL,EAAY,EACjCF,GAAgBE,EAAY,CAC9B,CACF,CAEJ,EACA,IACA,CAACX,GAAa5yE,GAAU2wE,GAAQyC,GAAc3oL,GAAU+lL,EAAQ,CAClE,EAEA,MAAMgD,GAAa,GAAQ,KAAW,KAAK,YAAc,KAAW,KAAK,MAEzE,SACE,OAAC,KAAY,CAAE,GAAGb,GAChB,oBAAC,QAAK,SAAUxzF,GAAa6zF,EAAQ,EACnC,qBAAClnF,EAAA,EAAQ,CAAC,UAAW3rG,GAAO,cAC1B,qBAAC,OAAI,UAAWA,GAAO,cACrB,oBAACmwL,GAAa,EAAC,KACf,OAAC7oL,EAAA,GACC,SAAO,KAAE,0CAA2C,UAAU,EAC9D,QAAS,CAAC,CAAC25F,GAAU,OAAO,SAC5B,MACEA,GAAU,OAAO,WAChBA,GAAU,OAAO,SAAS,OAAS,WAAa,iBAAmBA,GAAU,OAAO,SAAS,SAGhG,mBAACxmD,EAAA,GACE,GAAG0kD,GAAS,WAAY,CACvB,SAAWlpG,IACT,OAAO,QAAK,MAAcA,EAAK,CAAC,EAAE,SAAW,EACzC,gFACA,MACR,CAAC,EACD,GAAG,WACL,EACF,GACF,KAEA,OAAC,EAAa,CAAC,SAAkB,CAAC69B,GAAU,QAAAA,EAAA,CAAkB,KAE9D,OAACxsB,EAAA,GACC,SAAO,KAAE,yCAA0C,SAAS,EAC5D,SAAQ,GACR,MAAO25F,GAAU,OAAO,SAAS,QACjC,QAAS,CAAC,CAACA,GAAU,OAAO,QAE5B,mBAACr5F,EAAA,GACE,GAAGu3F,GAAS,UAAW,CACtB,SAAU,CAAE,MAAO,GAAM,WAAS,KAAE,4CAA6C,WAAW,CAAE,CAChG,CAAC,EACD,KAAM,EACN,eAAa,KACX,yEACA,2BACF,EACA,GAAG,UACL,EACF,EACC,CAACk0F,OACA,OAAC/rL,EAAA,GACC,SAAO,KAAE,4CAA6C,YAAY,EAClE,SAAQ,GACR,MAAO25F,GAAU,OAAO,WAAW,QACnC,QAAS,CAAC,CAACA,GAAU,OAAO,UAE5B,mBAACxmD,EAAA,GACE,GAAG0kD,GAAS,YAAa,CACxB,SAAU,CAAE,MAAO,GAAM,WAAS,KAAE,4CAA6C,WAAW,CAAE,CAChG,CAAC,EACD,eAAa,KACX,iEACA,4BACF,EACF,EACF,EAEDmzF,OACC,OAACvB,GAAwB,CAAC,aAAc36L,GAAwB,SAAA8qK,GAAoB,QAAAptI,EAAA,CAAkB,GAE1G,KACA,QAAC8X,EAAA,EAAK,CAAC,IAAK,EACT,UAAAjrC,OACC,OAACsE,EAAA,GAAM,CAAC,SAAU,GAAM,KAAK,UAAU,QAAQ,UAC7C,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,qBAAS,EAC5D,EAED,CAACtE,OACA,OAACsE,EAAA,GAAM,CAAC,KAAK,SACX,mBAAC,KAAK,CAAC,QAAQ,wCAAwC,wBAAY,EACrE,KAEF,OAAC,KAAU,CAAC,QAAS2tL,GAAiB,QAAS,YAC7C,mBAAC,KAAK,CAAC,QAAQ,yBAAyB,kBAAM,EAChD,GACF,GACF,EACF,CAEJ,EAEM,GAAax0L,KAA0B,CAC3C,iBAAe,OAAI,CACjB,SAAUA,GAAM,YAAY,OAAO,EACrC,CAAC,EACD,aAAW,OAAI,CACb,cAAeA,GAAM,QAAQ,CAAC,CAChC,CAAC,EACD,iBAAe,OAAI,CACjB,QAAS,OACT,cAAe,MACf,eAAgB,aAChB,IAAKA,GAAM,QAAQ,CAAC,EACpB,SAAUA,GAAM,YAAY,OAAO,GACnC,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,CACH,GAEA,SAASk1L,IAA4B,CACnC,MAAMhpF,GAAU,CACd,GAAI,eACJ,QAAM,KAAE,mEAAoE,cAAc,EAC1F,SAAU,8EACZ,EACA,SACE,OAAC,IAAuB,CAAC,MAAM,WAAW,QAAAA,GAAkB,WAAW,WACrE,mBAACmnF,GAAA,EAAsB,EACzB,CAEJ,CAEA,YAAe8B,EAAA,GAAsBD,EAAyB,C,oMC/TvD,SAASE,EAAW,CACzB,QAAArpK,EACA,SAAAu0J,EACA,UAAAhyJ,EACA,MAAAroB,EACA,cAAAovL,EACA,YAAAC,EAAc,IAChB,EAAU,CACR,KAAM,CAACC,EAAqBC,CAAsB,KAAI,YAAS,EAAI,EAC7D,CAACC,EAAeC,CAAgB,KAAI,YAAS,SAAS,EACtD,CAACC,EAAYC,CAAa,KAAI,YAAS,EAAE,KAE/C,aAAU,IAAM,CACd,MAAMC,EAAgBP,EAAYC,EAAqBjnK,EAAU,IAAKmnK,EAAe1pK,EAASu0J,EAAUr6K,CAAK,EAC7G2vL,EAAcC,CAAa,CAC7B,EAAG,CAACJ,EAAeF,EAAqBjnK,EAAWvC,EAASu0J,EAAUr6K,EAAOqvL,CAAW,CAAC,EAEzF,MAAMQ,EAAsBnxL,GAA0C,CACpEixL,EAAcjxL,EAAM,cAAc,KAAK,CACzC,EAEMoxL,EAA8B,IAAM,CACxCP,EAAwBQ,GAAoB,CAACA,CAAe,CAC9D,EAEMC,EAAiBp+L,GAAkB,CACvC69L,EAAiB79L,CAAK,CACxB,EAEMq+L,KACJ,OAAC,KACC,KAAK,OACL,QAAQ,UACR,QAAS,IAAMP,EACf,gBAAiB,IAAM,CACrB,IAAsB,iBAAiB,CACrC,iBAAkBJ,EAClB,MAAOE,EACP,iBAAe,MAAkB1pK,CAAO,CAC1C,CAAC,CACH,EAEA,mBAAC,KAAK,CAAC,QAAQ,yBAAyB,6BAAiB,EAC3D,EAGF,SACE,oBACE,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,yBAAyB,iEAAqD,EAC/F,KACA,OAAC,IAAK,CACJ,oBAAC,IAAK,CAAC,IAAK,EAAG,WAAW,QACxB,oBAAC,KACC,SAAO,KAAE,+BAAgC,iBAAiB,EAC1D,GAAG,2BACH,MAAOwpK,EACP,SAAUQ,CAAA,CACZ,KACA,OAAC,KACC,eAAa,KACX,qCACA,kEACF,EAEA,mBAAC,KAAK,CAAC,QAAQ,+BAA+B,2BAAe,EAC/D,GACF,EACF,KACA,OAAC,IAAW,CAAC,cAAAN,EAA8B,SAAUQ,CAAA,CAAe,KACpE,OAAC,KACC,SAAO,KAAE,yBAA0B,YAAY,EAC/C,eAAa,KACX,qCACA,2LACF,EAEA,mBAAC,KACC,cAAY,mBACZ,GAAG,wCACH,KAAM,EACN,MAAON,EACP,SAAUG,CAAA,CACZ,EACF,KACA,QAAC,IAAK,CAAC,IAAK,EAAG,eAAgB,QAC5B,UAAAI,KACD,OAAC,KAAM,CAAC,QAAQ,YAAY,KAAK,UAAU,QAASb,EAClD,mBAAC,KAAK,CAAC,QAAQ,+BAA+B,kBAAM,EACtD,GACF,GACF,CAEJ,C,2MCvGYc,GAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,MAAQ,QAFEA,IAAAA,GAAA,IAmCL,MAAMC,EAAiC93H,GACrCA,EAAU,OAAS,EAGf+3H,EAA4BC,GAChCA,GAAiB,MAAQ,IAAMA,GAAiB,MAAQ,OAMpDC,EAAqC,MAAOvpK,GAA4C,CACnG,IAAIwpK,EAAgB,IAAI,IAExB,UAAWt7L,KAAS8xB,EAClB,UAAWuM,KAAUr+B,EAAM,QAAS,CAClC,MAAM69B,EAASQ,GAAQ,YAAY,KAC/BR,IACG,IAAqB,IAAIA,CAAM,GAGvB,QAAM,MAAiB,EAAE,IAAIQ,EAAO,UAAU,YACrC,MAClBi9J,EAAc,IAAIz9J,CAAM,EAIhC,CAGF,OAAO,MAAM,KAAKy9J,CAAa,EAAE,KAAK,CACxC,EAUaC,EAA8BC,GAClC,MAAG,MAAU,EAAE,MAAM,qBAAqBA,CAAW,GAGjDC,EAAmC,CAACltH,EAAsBmtH,IAC9D,MAAMntH,CAAY,IAAImtH,CAAa,cAAc,KAAmB,eAAe,GAG/EC,EAAkB,yCAElBC,EAA4B,IAChC,IAAO,wBAGHC,EAAwB,IACnCD,EAA0B,GAC1B,CAAC,CAAC,IAAO,eAAe,iCACxB,KAAe,8BAA8B,C,8MCxFxC,SAASE,EACdC,GACAC,GACA,IACA,aAAU,IAAM,CACd,GAAID,GAA6B,SAAWC,GAAY,QAAS,CAC/D,MAAMC,GAA4BF,GAA6B,QAAQ,cAAc,iBAAiB,EAGhGG,GAAqBF,GAAY,QAAQ,WAG3CE,IAAsBD,KACxBA,GAA0B,OAAO,EAC7BC,cAA8B,cAChCA,GAAmB,cAAc,0BAA0B,GAAG,OAAO,EACrEA,GAAmB,OAAOD,EAAyB,GAGzD,CACF,CAAC,CACH,CAOO,SAASE,EACdC,GACAC,GACAv7L,GACAw7L,GACA,CAEA,MAAMC,GAAmB,KAAK,UAAU,OAAO,KAAKH,GAAc,QAAQ,CAAC,KAE3E,aAAU,IAAM,CAEd,IAAII,GAAa,EAIZF,KAEC,OAAO,SAASF,GAAc,4BAA4B,IAC5DI,GAAaJ,GAAc,8BAI7BI,GACEJ,GAAc,YAAc,EACxBI,GAAa,EACbA,GAAaJ,GAAc,UAAYA,GAAc,UAAYA,GAAc,UAGvFC,GAAQ,SAAS,gBAAgB,KAAK,IAAIG,GAAY,CAAC,CAAC,CAE1D,EAAG,CACDJ,GAAc,6BACdA,GAAc,SACdA,GAAc,UACdC,GACAv7L,GACAy7L,GACAD,EACF,CAAC,CACH,C,eCjEO,SAASG,EAAqB,CAAE,eAAAC,GAAgB,eAAAC,GAAgB,KAAA77L,EAAK,EAA2B,CACrG,SAAO,eACL,CAACif,GAA6BuM,KAAuB,CACnD,OAAQA,GAAO,KAAM,CACnB,IAAK,qBACH,GAAIowK,GAAgB,CAElB,MAAME,GADQ78K,GAAS,gBAAgB,iBAAyB,CAAC,IACnC,CAAC,EACzBsnD,GAAa,SAASu1H,GAAgB,EAAE,EACxC14L,GAAQ,KAAK,MAAM6b,GAAS,eAAe,eAAe68K,EAAc,CAAC,EAEzEp9L,GAAQsB,GAAK,SAASumE,EAAU,EACtC,GAAI,CAAC7nE,GACH,OAAOugB,GAGT,MAAM88K,MAAmB,MAAoBr9L,GAAOsB,EAAI,EACxD47L,GAAeG,GAAkB34L,EAAK,CACxC,CACF,IAAK,eACH,GAAIy4L,GAAgB,CAClB,MAAMG,GAAwC,CAAC,EAE/C,UAAWC,MAAYh9K,GAAS,OAAQ,CACtC,MAAMvgB,GAAQsB,GAAK,OAAO,SAASi8L,GAAS,GAAI,EAAE,CAAC,EAC9Cv9L,IAILs9L,GAAa,KAAK,CAChB,eAAa,MAAoBt9L,GAAOsB,EAAI,EAC5C,KAAMi8L,GAAS,IACjB,CAAC,CACH,CAEAJ,GAAeG,EAAY,CAC7B,CACF,IAAK,oBACH,GAAIxwK,GAAO,GACT,MAAO,CACL,GAAGvM,GACH,6BAA8B,SAASuM,GAAO,GAAI,EAAE,CACtD,CAGN,CAEA,OAAOvM,EACT,EACA,CAACjf,GAAM47L,GAAgBC,EAAc,CACvC,CACF,CAEO,SAASK,EACdC,GACAxuL,GAC4B,CAC5B,MAAM2Q,GAAoC,CAAC,EAE3C,GAAI69K,GAAe,CACjB79K,GAAM,OAAS,CAAC,EAEhB,UAAW6oC,MAAUg1I,GACnB,UAAWvwK,MAAOje,GACZie,GAAI,SAAWu7B,GAAO,aACxB7oC,GAAM,OAAO,KAAK,CAAE,GAAIsN,GAAI,GAAK,KAAMu7B,GAAO,IAAK,CAAC,CAI5D,CAEA,OAAO7oC,EACT,C,kJC9DA,MAAM89K,EAAc,GACdC,EAAaD,EAAc,EAE3BE,EAAuE,CAC3E,SAAU,CAAE,MAAO,WAAY,MAAO,WAAY,YAAa,UAAW,EAC1E,IAAK,CAAE,MAAO,IAAK,MAAO,IAAK,YAAa,QAAS,EACrD,KAAM,CAAE,MAAO,KAAM,MAAO,KAAM,YAAa,YAAa,EAC5D,IAAK,CAAE,MAAO,IAAK,MAAO,IAAK,YAAa,SAAU,EACtD,KAAM,CAAE,MAAO,KAAM,MAAO,KAAM,YAAa,kBAAmB,EAClE,IAAK,CAAE,MAAO,IAAK,MAAO,IAAK,YAAa,MAAO,EACnD,KAAM,CAAE,MAAO,KAAM,MAAO,KAAM,YAAa,eAAgB,EAC/D,WAAY,CACV,MAAO,aACP,MAAO,aACP,YAAa,mGACf,CACF,EACMC,EAAY,OAAO,OAAOD,CAAwB,EAC3CE,EAAiBF,EAAyB,SACjDG,EAAeH,EAAyB,WAExCI,EAAmB7gM,IAAoD,CAI3E,GAHAA,GAAQA,GAAM,KAAK,EAAE,QAAQ,MAAO,EAAE,EAGlC,2CAA2C,KAAKA,EAAK,EAAG,CAC1D,MAAM85E,GAAO,IAAI,KAAK95E,EAAK,EAC3B,GAAI,CAAC,MAAM85E,GAAK,QAAQ,CAAC,EAAG,CAC1B,MAAM72E,MAAM,MAAe,eAAe,EAC1C,SAAO,MAAuBA,GAAI62E,GAAK,QAAQ,CAAC,CAAC,CACnD,CACF,CAEA,MAAMroB,GAAM,WAAWzxD,EAAK,EAC5B,GAAI,CAAC,MAAMyxD,EAAG,EACZ,OAAOA,GAGT,MAAMqvI,GAAS9gM,GAAM,YAAY,EACjC,OAAI8gM,KAAW,QAAUA,KAAW,QAC3BA,KAAW,OAGb9gM,EACT,EAEa+gM,EAAa,CAAC,CACzB,QAAAv9L,GACA,OAAA6C,GACA,cAAA26L,GACA,cAAAC,GACA,SAAArhM,GACA,aAAAshM,GACA,gBAAAC,GACA,SAAAj1B,GACA,YAAAk1B,EACF,IAAa,CACX,MAAM1wI,MAAQ,WAAQ,IAAM,IAAI,OAAOwwI,GAAcF,GAAgB,OAAY,GAAG,EAAG,CAACE,GAAcF,EAAa,CAAC,EAC9G7iJ,MAAQ,WACZ,IACE36C,GAAQ,OAAQmG,IAAW,CACzB,GAAI,CAACs3L,IAAiB,CAACC,IAAgBh1B,GAAS,QAAUy0B,EAAe,MACvE,OAAIh3L,GAAO,QAAU,OACZ,GAEF+mD,GAAM,KAAK/mD,GAAO,KAAK,EACzB,GAAIuiK,GAAS,QAAU00B,EAAa,MAAO,CAChD,GAAIj3L,GAAO,QAAU,OACnB,MAAO,GAET,GAAI,CACF,MAAM03L,GAAMH,GAAa,QAAQ,MAAO,EAAE,EACpCI,GAAM,IAAI,SAAS,IAAK,wBAAwBD,EAAG,GAAG,EACtD97J,GAAMs7J,EAAgBl3L,GAAO,KAAK,EACxC,OAAO23L,GAAI/7J,EAAG,CAChB,MAAY,CAAC,CACb,MAAO,EACT,KAAO,CACL,GAAI57B,GAAO,QAAU,OACnB,MAAO,GAGT,MAAM43L,GAASV,EAAgBl3L,GAAO,KAAK,EACrC63L,GAASX,EAAgBK,EAAY,EAE3C,OAAQh1B,GAAS,MAAO,CACtB,IAAK,IACH,OAAOq1B,KAAWC,GACpB,IAAK,KACH,OAAOD,KAAWC,GACpB,IAAK,IACH,OAAOD,GAASC,GAClB,IAAK,KACH,OAAOD,IAAUC,GACnB,IAAK,IACH,OAAOD,GAASC,GAClB,IAAK,KACH,OAAOD,IAAUC,EACrB,CACA,MAAO,EACT,CACF,CAAC,EACH,CAACh+L,GAASktD,GAAOuwI,GAAe/0B,GAAUg1B,EAAY,CACxD,EACMO,MAAgB,WAAQ,IAAMtjJ,GAAM,OAAQppC,IAAS1O,GAAO,SAAS0O,EAAI,CAAC,EAAG,CAACopC,GAAO93C,EAAM,CAAC,EAE5Fq7L,MAAmB,WAAQ,IAAMvjJ,GAAM,SAAWsjJ,GAAc,OAAQ,CAACtjJ,GAAOsjJ,EAAa,CAAC,EAC9FE,MAA2B,WAC/B,IAAMF,GAAc,OAAS,GAAKtjJ,GAAM,OAASsjJ,GAAc,OAC/D,CAACtjJ,GAAOsjJ,EAAa,CACvB,EACMG,MAAmB,WACvB,IAAOH,GAAc,OAAS,GAAGA,GAAc,MAAM,YAAc,aACnE,CAACA,EAAa,CAChB,EACMI,MAAyB,WAC7B,IACE1jJ,GAAM,SAAWsjJ,GAAc,OAC3B,yCACA,8CACN,CAACtjJ,GAAOsjJ,EAAa,CACvB,EAEM13L,MAAS,MAAWuD,EAAS,EAE7Bw0L,MADQ,MAAU,EACH,QAAQ,SACvBt6L,MAAS,WAAQ,IAAM,KAAK,IAAI22C,GAAM,OAASoiJ,EAAaC,CAAU,EAAIsB,GAAQ,CAACA,GAAQ3jJ,GAAM,MAAM,CAAC,EAExG4jJ,MAAmB,eACtBp4L,IAA6BmD,IAA6C,CACzE,MAAMk1L,GAAYl1L,GAAM,cAAc,QAClCzG,GAAO,OAAOsD,EAAM,EACpBtD,GAAO,OAAQoJ,IAAMA,GAAE,QAAU9F,GAAO,KAAK,EAEjD/J,GAASoiM,EAAS,CACpB,EACA,CAACpiM,GAAUyG,EAAM,CACnB,EAEM47L,MAAkB,eAAY,IAAM,CACxC,GAAI9jJ,GAAM,SAAWsjJ,GAAc,OAAQ,CACzC,MAAMO,GAAY37L,GAAO,OAAQ0O,IAAS,CAACopC,GAAM,SAASppC,EAAI,CAAC,EAC/DnV,GAASoiM,EAAS,CACpB,KAAO,CACL,MAAMA,GAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG37L,GAAQ,GAAG83C,EAAK,CAAC,CAAC,EACpDv+C,GAASoiM,EAAS,CACpB,CACF,EAAG,CAACpiM,GAAUyG,GAAQ83C,GAAOsjJ,EAAa,CAAC,EAE3C,SACE,QAAC9rJ,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,IAC5B,WAACsrJ,OACA,OAAC96I,EAAA,GACC,eAAa,KAAE,sCAAuC,eAAe,EACrE,SAAUg7I,GACV,MAAOD,EAAA,CACT,EAEDD,OACC,QAACtrJ,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,EAC1B,oBAAC4pF,EAAA,GACC,QAAQ,SACR,QAASmhE,EACT,SAAUU,GACV,MAAOl1B,GACP,QAASA,GAAS,YACpB,KACA,OAAC/lH,EAAA,GACC,eAAa,KAAE,sCAAuC,eAAe,EACrE,SAAUg7I,GACV,MAAOD,EAAA,CACT,GACF,EAED/iJ,GAAM,OAAS,KACd,oBACE,oBAAC,MACC,OAAA32C,GACA,UAAW22C,GAAM,OACjB,SAAUoiJ,EACV,SAAU,CAAE,MAAApiJ,GAAO,OAAQsjJ,GAAe,iBAAAM,GAAkB,UAAWh4L,GAAO,aAAc,EAC5F,MAAM,OACN,UAAWA,GAAO,WAEjB,SAAAm4L,CAAA,CACH,KACA,QAACvsJ,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,IAC7B,oBAAC,OAAI,aAAW,MAAG5rC,GAAO,aAAa,EAAG,KAC1C,OAAC,OAAI,aAAW,MAAGA,GAAO,aAAa,EACrC,mBAAC4uC,EAAA,GACC,MAAO+oJ,GACP,cAAeC,GACf,MAAOC,GACP,YAAaC,GACb,SAAUI,EAAA,CACZ,EACF,GACF,GACF,KAEA,OAACxtL,EAAA,EAAK,CAAC,UAAW1K,GAAO,cACvB,mBAAC,KAAK,CAAC,QAAQ,mCAAmC,qBAAS,EAC7D,GAEJ,CAEJ,EAWA,SAASm4L,EAAa,CAAE,MAAAtwL,GAAO,MAAA2Z,GAAO,KAAM,CAAE,iBAAAw2K,GAAkB,MAAA5jJ,GAAO,OAAA93C,GAAQ,UAAAmE,EAAU,CAAE,EAAsB,CAC/G,MAAMb,GAASw0C,GAAMvsC,EAAK,EACpB,CAAE,MAAA5R,GAAO,MAAA6J,EAAM,EAAIF,GACnB4/H,GAAYljI,GAAO,KAAME,IAAMA,GAAE,QAAUvG,EAAK,IAAM,OAE5D,SACE,OAAC,OAAI,UAAAwK,GAAsB,MAAA+gB,GAAc,MAAO1hB,GAC9C,mBAAC8uC,EAAA,EAAQ,CAAC,MAAO4wF,GAAW,MAAA1/H,GAAc,SAAUk4L,GAAiBp4L,EAAM,EAAG,EAChF,CAEJ,CAEA,MAAM2D,GAAanF,KAA0B,CAC3C,cAAY,OAAI,CACd,MAAO,YACT,CAAC,EACD,iBAAe,OAAI,CACjB,MAAO,gBACP,OAAQ,UACR,WAAY,SACZ,SAAU,SACV,aAAc,WACd,QAASA,GAAM,QAAQ,EAAG,EAE1B,SAAU,CACR,gBAAiBA,GAAM,OAAO,OAAO,KACvC,CACF,CAAC,EACD,iBAAe,OAAI,CACjB,MAAO,gBACP,MAAO,OACP,UAAW,aAAaA,GAAM,OAAO,OAAO,MAAM,GAClD,QAASA,GAAM,QAAQ,GAAK,CAAC,CAC/B,CAAC,EACD,iBAAe,OAAI,CACjB,WAAYA,GAAM,QAAQ,CAAC,CAC7B,CAAC,CACH,G,sCC5PO,MAAMg6L,EAAc,CAAC,CAC1B,OAAQ,CAAE,gBAAAC,GAAiB,YAAAC,GAAa,UAAAC,EAAU,EAClD,QAAAxkK,GACA,MAAAj7B,GACA,aAAAq+L,GACA,gBAAAC,GACA,SAAAj1B,GACA,YAAAk1B,EACF,IAAa,CACX,MAAMj5L,MAAQ,MAAU,EAClBo6L,MAAe,WAAQ,OAAM,MAA2BH,GAAiBv/L,EAAK,EAAG,CAACu/L,GAAiBv/L,EAAK,CAAC,EACzGW,MAAU,WAAQ,OAAM,MAAgB++L,EAAY,EAAG,CAACA,EAAY,CAAC,EACrE9kI,MAAkB,WAAQ,OAAM,MAAmBj6D,GAAS6+L,EAAW,EAAG,CAAC7+L,GAAS6+L,EAAW,CAAC,EAChG,CAACh8L,GAAQm8L,EAAS,KAAI,YAA4B/kI,EAAe,EACjE,CAACglI,GAAWC,EAAY,KAAI,YAAS,EAAK,EAE1C9yH,MAAW,eAAa9iE,IAA6BgxB,GAAQ,EAAG,CAACA,EAAO,CAAC,EAEzE6kK,MAAW,eACd71L,IAA4B,CAC3B,MAAMkZ,GAAW3f,GAAO,OAASA,GAAS,OAE1Ci8L,GAAUt8K,EAAQ,EAClB8X,GAAQ,CACV,EACA,CAACwkK,GAAWj8L,GAAQy3B,EAAO,CAC7B,EAEM8kK,MAAgB,eACnB91L,IAA4B,CAC3Bw1L,GAAU,MAAS,EACnBxkK,GAAQ,CACV,EACA,CAACwkK,GAAWxkK,EAAO,CACrB,EAEM+kK,MAAqB,WAAQ,IAAMR,KAAgB,OAAW,CAACA,EAAW,CAAC,EAC3Et4L,MAAS,MAAW,CAAS,EAEnC,SACE,OAAC8F,GAAA,EAAmB,CAAC,QAAS+/D,GAAU,WAAY,GAGlD,mBAAC,OAAI,aAAW,MAAG7lE,GAAO,eAAe,EAAG,QAAS0lH,EACnD,oBAAC95E,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,qBAACA,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,GAC7B,qBAACA,EAAA,EAAK,CAAC,eAAe,gBAAgB,WAAW,SAC/C,oBAAClhC,EAAA,EAAK,CAAC,UAAW1K,GAAO,MACvB,mBAAC,KAAK,CAAC,QAAQ,wCAAwC,6BAAiB,EAC1E,KACA,OAACyqC,GAAA,GACC,KAAK,cACL,WAAS,KAAE,2CAA4C,YAAY,EACnE,MAAO,CAAE,MAAOiuJ,GAAYt6L,GAAM,OAAO,KAAK,KAAOA,GAAM,OAAO,KAAK,QAAS,EAChF,QAAS,IAAM,CACbu6L,GAAcn8L,IAAM,CAACA,EAAC,CACxB,EACF,GACF,KACA,OAAC,OAAI,aAAW,MAAGwD,GAAO,WAAW,EAAG,KACxC,OAACg3L,EAAA,CACC,SAAUyB,GACV,OAAAn8L,GACA,QAAA7C,GACA,cAAei/L,GACf,cAAe,GACf,aAAAvB,GACA,gBAAAC,GACA,SAAAj1B,GACA,YAAAk1B,EAAA,CACF,GACF,KACA,QAACzrJ,EAAA,EAAK,CAAC,IAAK,EACV,qBAACA,EAAA,EAAK,CACJ,oBAAC3mC,EAAA,GAAM,CAAC,KAAK,KAAK,QAAS2zL,GACzB,mBAAC,KAAK,CAAC,QAAQ,sCAAsC,cAAE,EACzD,KACA,OAAC3zL,EAAA,GAAM,CAAC,KAAK,KAAK,QAAQ,YAAY,QAAS4gE,GAC7C,mBAAC,KAAK,CAAC,QAAQ,uCAAuC,kBAAM,EAC9D,GACF,EACCizH,OACC,OAACltJ,EAAA,EAAK,CACJ,mBAAC3mC,EAAA,GAAM,CAAC,KAAK,OAAO,KAAK,KAAK,QAAS4zL,GACrC,mBAAC,KAAK,CAAC,QAAQ,sCAAsC,wBAAY,EACnE,EACF,GAEJ,GACF,EACF,EACF,CAEJ,EAEM,EAAaz6L,KAA0B,CAC3C,mBAAiB,OAAI,CACnB,MAAO,kBACP,MAAO,OACP,SAAU,QACV,OAAQ,OACR,UAAW,QACX,gBAAiBA,GAAM,OAAO,WAAW,QACzC,OAAQ,aAAaA,GAAM,OAAO,OAAO,IAAI,GAC7C,QAASA,GAAM,QAAQ,CAAC,EACxB,UAAWA,GAAM,QAAQ,GACzB,aAAcA,GAAM,MAAM,OAAO,OACnC,CAAC,EACD,eAAa,OAAI,CACf,MAAO,cACP,MAAO,OACP,UAAW,aAAaA,GAAM,OAAO,OAAO,MAAM,GAClD,QAASA,GAAM,QAAQ,GAAK,CAAC,CAC/B,CAAC,EACD,SAAO,OAAI,CACT,aAAc,CAChB,CAAC,CACH,GAEMsnH,EAAmB3iH,IAA4B,CACnDA,GAAM,gBAAgB,CACxB,ECnIag2L,EAAS,CAAC,CAAE,OAAAC,GAAQ,MAAAlgM,GAAO,YAAAmgM,EAAY,IAAa,CAC/D,MAAMphM,MAAM,UAA0B,IAAI,EACpC,CAACqhM,GAAkBC,EAAiB,KAAI,YAAkB,EAAK,EAC/Dn5L,MAAS,MAAW,EAAS,EAC7Bo5L,MAAgB,WAAQ,IAAM,EAAQJ,GAAO,YAAc,CAACA,GAAO,WAAW,CAAC,EAC/EK,MAAgB,eAAY,IAAMF,GAAkB,EAAI,EAAG,CAACA,EAAiB,CAAC,EAC9EG,MAAiB,eAAY,IAAMH,GAAkB,EAAK,EAAG,CAACA,EAAiB,CAAC,EAChF,CAAChC,GAAcC,EAAe,KAAI,YAAS,EAAE,EAC7C,CAACj1B,GAAUk1B,EAAW,KAAI,YAAkCT,CAAc,EAEhF,MAAI,CAAC99L,IAAS,CAACA,GAAM,OAAO,QAAQ,WAC3B,QAGP,QAAC,UACC,aAAW,MAAGmgM,GAAY,aAAcG,GAAgBp5L,GAAO,kBAAoBA,GAAO,kBAAkB,EAC5G,IAAAnI,GACA,KAAK,SACL,QAASwhM,GAET,oBAACl6L,EAAA,EAAI,CAAC,KAAK,QAAS,GACnB+5L,IAAoBrhM,GAAI,YACvB,OAACq+B,EAAA,GACC,WACE,OAACkiK,EAAA,CACC,OAAAY,GACA,YAAAC,GACA,MAAAngM,GACA,QAASwgM,GACT,aAAAnC,GACA,gBAAAC,GACA,SAAAj1B,GACA,YAAAk1B,EAAA,CACF,EAEF,UAAU,eACV,iBAAkBx/L,GAAI,QACtB,KAAI,GACN,GAEJ,CAEJ,EAEM,GAAauG,KAA0B,CAC3C,qBAAmB,OAAI,CACrB,MAAO,oBACP,MAAOA,GAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,sBAAoB,OAAI,CACtB,MAAO,qBACP,MAAOA,GAAM,OAAO,KAAK,QAC3B,CAAC,CACH,GCtDam7L,GAAat6L,IAA0B,CAClD,KAAM,CAAE,aAAAu6L,GAAc,cAAAC,GAAe,YAAAR,EAAY,EAAIh6L,GAC/Cy6L,GAAoB9wL,EAAA,GAAU,WAAW,OAAO,cAAc,MAEpE,SACE,OAAC,OAAI,KAAK,WAAW,UAAWqwL,GAAY,UACzC,SAAAO,GAAa,IAAKG,IAA6B,CAC9C,KAAM,CAAE,IAAAh8K,GAAK,GAAGi8K,EAAiB,EAAID,GAAY,oBAAoB,EACrE,SACE,iBAAC,OACC,UAAWV,GAAY,MACtB,GAAGW,GACJ,IAAAj8K,GACA,aAAY+7K,GAAkB,OAC9B,KAAK,OAEJC,GAAY,QAAQ,IAAI,CAACX,GAAgBnxL,KACxCgyL,GAAiBb,GAAQC,GAAaQ,EAAa,CACrD,CACF,CAEJ,CAAC,EACH,CAEJ,EAEA,SAASI,GAAiBb,GAAaC,GAA0BQ,GAAyB,CACxF,KAAM,CAAE,IAAA97K,GAAK,GAAGm8K,EAAY,EAAId,GAAO,eAAe,EAChDlgM,GAAekgM,GAAO,OAAS,KAC/Be,GAAmDjhM,IAAO,OAAO,OAEnEkgM,GAAO,YACTc,GAAY,MAAM,WAAad,GAAO,WAAa,OAAS,QAG9Dc,GAAY,MAAM,SAAW,WAC7BA,GAAY,MAAM,eAAiBd,GAAO,eAC1Cc,GAAY,MAAM,KAAOd,GAAO,UAEhC,IAAIgB,GAAgBhB,GAAO,OAAO,QAAQ,EAEtCiB,GAAoBjB,GAAO,YAC7B,oBACE,qBAAC,UAAQ,GAAGA,GAAO,qBAAqB,EAAG,UAAWC,GAAY,gBAC/D,UAAAQ,OACC,OAACt6L,EAAA,EAAI,CAAC,QAAM,MAAiBrG,EAAK,EAAG,MAAOA,IAAO,KAAM,KAAK,KAAK,UAAWmgM,GAAY,SAAU,KAEtG,OAAC,OAAK,SAAAe,EAAA,CAAc,EACnBhB,GAAO,WACLA,GAAO,gBACN,OAAC75L,EAAA,EAAI,CAAC,KAAK,KAAK,KAAK,aAAa,UAAW85L,GAAY,SAAU,KAEnE,OAAC95L,EAAA,EAAI,CAAC,KAAK,WAAW,KAAK,KAAK,UAAW85L,GAAY,SAAU,IAEvE,EACCD,GAAO,cAAa,OAACD,EAAM,CAAC,OAAAC,GAAgB,YAAAC,GAA0B,MAAAngM,EAAA,CAAc,GACvF,EAEF,OAAImhM,IAAqBF,IAAmB,gBAC1CE,MAAoB,OAACF,GAAkB,gBAAlB,CAAkC,MAAAjhM,GAAc,eAAgBmhM,EAAA,CAAmB,EAC/FF,IAAmB,kBAC5BC,MAAgB,OAACD,GAAkB,gBAAlB,CAAkC,MAAAjhM,GAAc,eAAgBkhM,EAAA,CAAe,MAIhG,QAAC,OAAI,UAAWf,GAAY,WAAuB,GAAGa,GAAa,KAAK,eACrE,UAAAd,GAAO,SAAWiB,GAClB,CAACjB,GAAO,SAAWgB,GACnB,CAAChB,GAAO,SAAWA,GAAO,cAAa,OAACD,EAAM,CAAC,OAAAC,GAAgB,YAAAC,GAA0B,MAAAngM,EAAA,CAAc,EACvGkgM,GAAO,cAAa,OAAC,OAAK,GAAGA,GAAO,gBAAgB,EAAG,UAAWC,GAAY,aAAc,IAJlDt7K,EAK7C,CAEJ,C,+DCrEO,SAASu8K,GAAY,CAAE,YAAAjB,GAAa,WAAAkB,GAAY,SAAApoL,GAAU,MAAAvU,GAAO,WAAAu5J,EAAW,EAAU,CAC3F,MAAMz8J,GAAwB6/L,GAAW,OACnCC,GAA+B,CAAC,EAChCh8L,MAAQ,MAAU,EAClB4B,MAAS,MAAW,EAAS,EAEnC,IAAIgZ,GAAMigL,GAAY,UAAY76L,GAAM,QAAQ,SAEhD,OAAA9D,GAAOyX,EAAQ,EAAE,QAAQ,CAACsoL,GAAeC,KAAoB,CAC3D,MAAMC,GAAW,CAAC,CAACF,GAAG,MAAM,QAAQ,SAC9B58L,GAASw7L,GAAY,WAAaoB,GAAG,QAAUE,GAAW,EAAI,IAE9DC,GAA0B,CAC9B,OAAA/8L,GACA,YAAa,KACb,SAAU,WACV,IAAAub,GACA,gBAAiB5a,GAAM,OAAO,WAAW,QACzC,MAAOA,GAAM,OAAO,KAAK,OAC3B,EAEA4a,IAAOvb,GAASW,GAAM,QAAQ,SAE9Bg8L,GAAU,QACR,OAAC,OAAI,MAAOI,GACV,mBAACC,GAAA,CACC,KAAMJ,GACN,MAAO78L,GAAQ,KACf,OAAQy7L,GAAY,WAAaoB,GAAG,OAAS,GAC7C,SAAAE,GACA,WAAAxjC,EAAA,CACF,GAPyB,YAAYhlJ,EAAQ,IAAIuoL,EAAO,EAQ1D,CACF,CACF,CAAC,KAEM,OAAC,OAAI,UAAWt6L,GAAO,UAAY,SAAAo6L,EAAA,CAAU,CACtD,CAEA,MAAM,GAAah8L,KACV,CACL,aAAW,OAAI,CACb,WAAY,CACV,QAAS,KACT,SAAU,WACV,MAAO,MACP,IAAKA,GAAM,QAAQ,CAAC,EACpB,KAAMA,GAAM,QAAQ,CAAC,EACrB,OAAQA,GAAM,QAAQ,CAAC,EACvB,WAAYA,GAAM,OAAO,OAAO,MAClC,CACF,CAAC,CACH,GAGK,SAASs8L,GAAqBP,GAAmBpoL,GAAkBknL,GAA0B,CAWlG,OAV8BkB,GAAW,OAEnBpoL,EAAQ,EAAE,OAAO,CAACuB,GAAa9Y,KAAqB,CACxE,GAAIA,GAAM,OAAQ,CAChB,MAAM+/L,GAAW,CAAC,CAAC//L,GAAM,MAAM,QAAQ,SACvC,OAAO8Y,GAAM2lL,GAAY,WAAaz+L,GAAM,QAAU+/L,GAAW,EAAI,IAAM,CAC7E,CACA,OAAOjnL,EACT,EAAG2lL,GAAY,SAAS,GAEPA,GAAY,SAC/B,CCpBO,MAAM0B,GAAY17L,IAAyB,CAChD,KAAM,CACJ,KAAA7E,GACA,KAAA0N,GACA,aAAAygG,GACA,wBAAAqyF,GACA,UAAArqI,GACA,UAAAsqI,GACA,UAAAC,GACA,WAAAC,GACA,WAAAC,GACA,kBAAAC,GACA,MAAAz9L,GACA,WAAAu5J,GAAa,KAAgB,GAC7B,UAAAxkJ,GACA,YAAA0mL,GACA,gBAAAiC,GACA,WAAAC,GACA,QAAAxF,GACA,sBAAAyF,GAAwB,GACxB,gBAAAC,GAAkB,OAClB,aAAA7B,GACA,aAAA8B,GACA,cAAAC,GACA,WAAAC,GACA,iBAAA7iM,GACA,eAAA8iM,EACF,EAAIx8L,GAEE,CAACy8L,GAAmBC,EAAoB,KAAI,YAA6BN,EAAe,EAC1FA,KAAoB,QAAaK,KAAsB,QACzDC,GAAqB,MAAS,EAGhC,MAAMv9L,MAAQ,MAAU,EAClBw9L,MAAe,OAAgB,EAKrC,IAAIC,GAAY,KACZ,OAAO,kBAAoB,SAI7BA,GAAY,IAAI,gBAAgB,IAAK,IAAI,EAAE,WAAW,IAAI,GAK7BA,IAAc,OAC3CA,GAAU,KAAO,GAAGz9L,GAAM,WAAW,QAAQ,MAAMA,GAAM,WAAW,KAAK,UAAU,IAGrF,MAAM6W,MAAY,WAAQ,IAAM,CAC9B,MAAMlc,GAAYqB,GAAK,OAAO,KAAM2c,IAAMA,GAAE,OAAS,KAAU,IAAI,EAEnE,OAAKhe,MAIE,MAA8BA,EAAS,EAHrC,CAIX,EAAG,CAACqB,EAAI,CAAC,EAEH0hM,MAAa,eACjB,CAAC95K,GAAaxnB,KAAqB,CACjC,GAAI,CAACohM,IAAgB,CAACR,GACpB,OAGF,MAAMriM,GAAmByB,GAAO,OAAO,KAAMuc,IAAMA,GAAE,OAAS,KAAU,IAAI,EAEvEhe,IAIL6iM,GAAa,SAAS,QACpB,IAAI,MAAe,CACjB,MAAO,CACL,KAAM7iM,GAAU,OAAOipB,EAAG,CAC5B,CACF,CAAC,CACH,CACF,EACA,CAACo5K,GAAuBQ,EAAY,CACtC,EAEMG,MAAa,eAAY,IAAM,CAC/B,CAACH,IAAgB,CAACR,IAItBQ,GAAa,SAAS,QAAQ,IAAI,KAAqB,CACzD,EAAG,CAACR,GAAuBQ,EAAY,CAAC,EAElCI,MAAmB,eACtBn2L,IAAwB,CACvB,GAAIA,GAAI,QAAQ,OAAO,MAAQA,GAAI,QAAQ,WAAa,OAAW,CACjE,MAAM9M,GAAYqB,GAAK,OAAO,KAAM2c,IAAMA,GAAE,OAAS,KAAU,IAAI,EAC7D9P,GAAOlO,GAAW,OAAO8M,GAAI,QAAQ,QAAQ,EAC7C8J,GAAY9J,GAAI,QAAQ,MAAM,KAIpC,MAAI,MAAiC8J,GAAW1I,GAAMgO,EAAS,EAAG,CAChE0mL,GAAqB91L,GAAI,QAAQ,QAAQ,EACzC,MACF,CAIA,MAAMo2L,GAAkBljM,GAAW,OAAO,UAAW4C,OACnD,MAAiCgU,GAAWhU,GAAGsZ,EAAS,CAC1D,EAEA,GAAIgnL,KAAoB,GAAI,CAC1BN,GAAqBM,EAAe,EACpC,MACF,CAEAN,GAAqB,MAAS,CAChC,CACF,EACA,CAACvhM,GAAK,OAAQ6a,EAAS,CACzB,KAEA,aAAU,IAAM,CACd,GAAI,CAAC2mL,IAAgB,CAACR,IAAyB,IAAC,MAAahhM,EAAI,GAAKwgM,GACpE,OAGF,MAAMsB,GAAO,IAAIzjL,EAAA,GAEjB,OAAAyjL,GAAK,IACHN,GAAa,SACV,UAAU,KAAc,EACxB,QAAKO,GAAA,GAAa,GAAG,CAAC,EACtB,UAAU,CACT,KAAOt2L,IAAQ,CACT+1L,GAAa,WAAa/1L,GAAI,QAIlCm2L,GAAiBn2L,EAAG,CACtB,CACF,CAAC,CACL,EAEAq2L,GAAK,IACHN,GAAa,SACV,UAAU,KAAmB,EAC7B,QAAKO,GAAA,GAAa,GAAG,CAAC,EACtB,UAAU,CACT,KAAOt2L,IAAQ,CACT+1L,GAAa,WAAa/1L,GAAI,QAIlC81L,GAAqB,MAAS,CAChC,CACF,CAAC,CACL,EAEO,IAAM,CACXO,GAAK,YAAY,CACnB,CACF,EAAG,CAAC9hM,GAAMghM,GAAuBR,GAAyBoB,GAAkBJ,EAAY,CAAC,EAEzF,IAAI/gD,GACJ,GAAI6gD,KAAsB,OAAW,CACnC,MAAMU,GAAuBt0L,GAAK,UAAWme,IAAQA,GAAI,QAAUy1K,EAAiB,EAEhFU,KAAyB,KAC3BvhD,GAAYtyC,IAAgB6zF,GAAuB,GAAK7rI,GAE5D,CAEA,MAAM8rI,MAAwB,eAC3Bx0L,IACQkzL,GAAW,UAAYA,GAAW,SAAWlzL,GAEtD,CAACkzL,GAAW,UAAWA,GAAW,QAAQ,CAC5C,EAEA,IAAIuB,GACAC,GACJ,UAAWzjM,MAASsB,GAAK,OAAQ,CAE/B,MAAMoiM,GAAe1jM,GAAM,OAAO,OACT0jM,KAAiB,QAAaA,GAAa,cAAgB,QAIlFA,GAAa,YAAY,OAAS,KAAqB,iBACvDA,GAAa,YAAY,aAEzBF,GAASvqL,IAAiC,CACxC,MAAM9D,GAAUnV,GAAM,QAASA,GAAM,OAAO,IAAIiZ,EAAQ,CAAC,EAEzD,SADe,MAAcknL,GAAY,MAAOuD,GAAa,YAAavuL,EAAO,CAEnF,GAGEstL,KAAkB,OACpBgB,GAAgBhB,GACPD,KAAiB,SAC1BiB,GAAgBjB,GAEpB,CAEA,MAAMmB,MAAY,eAChB,CAAC,CAAE,MAAA50L,GAAO,MAAA2Z,GAAO,kBAAAk6K,EAAkB,IAA2E,CAC5G,MAAMgB,GAAqBL,GAAsBx0L,EAAK,EAChDoe,GAAMne,GAAK40L,EAAkB,EACnC,IAAIC,GAAwD,CAAC,EAC7D3B,GAAW/0K,EAAG,EAEd,MAAM22K,GAAmB7B,GAAW,SAAS90K,GAAI,EAAE,KAAI,OAAI,CAAE,UAAW,CAAE,WAAY,SAAU,CAAE,CAAC,EAAI,CAAC,EAClG42K,GAAc3B,IAAmBH,GAAW,SAAS90K,GAAI,EAAE,EAUjE,GARIy1K,KAAsB,QAAaz1K,GAAI,QAAUy1K,KACnDl6K,GAAQ,CAAE,GAAGA,GAAO,gBAAiBpjB,GAAM,WAAW,MAAM,WAAY,EACxEu+L,GAAkB,CAChB,gBAAiB,MACnB,GAIEL,GAAO,CACT,KAAM,CAAE,QAAAliG,GAAS,UAAA0iG,EAAU,EAAIR,GAAMr2K,GAAI,KAAK,EAC9CzE,GAAM,WAAa44E,GACnB54E,GAAM,MAAQs7K,GACdt7K,GAAM,WAAa,aAAa44E,EAAO,EACzC,CAGA,GAAImiG,GAAe,CAEjB,MAAMzqL,GADgB1X,GAAK,OAAO,OAAQtB,IAAU,CAASA,GAAM,OAAO,QAAQ,MAAO,EACvD,UAAWA,IAAUA,GAAM,OAASyjM,GAAc,IAAI,EAClFQ,GAAe3+L,GAAM,WAAW,KAAK,WAAaA,GAAM,WAAW,SACnEqjB,MAAO,MACX86K,GAAc,OAAOt2K,GAAI,KAAK,EAC9BuzK,GAAa,CAAC,EAAE,QAAQ1nL,EAAW,EACnC+pL,GACAkB,GACA9D,GAAY,UACZA,GAAY,WACd,EACAz3K,GAAM,OAASC,GAAK,MACtB,CACA,KAAM,CAAE,IAAA9D,GAAK,GAAGq/K,EAAS,EAAI/2K,GAAI,YAAY,CAAE,MAAAzE,GAAO,GAAGm7K,EAAgB,CAAC,EAE1E,SACE,QAAC,OAEE,GAAGK,GACJ,aAAW,MAAG/D,GAAY,IAAK2D,EAAgB,EAC/C,aAAc,IAAMd,GAAW71K,GAAI,MAAO7rB,EAAI,EAC9C,aAAc2hM,GAGb,UAAAc,OACC,OAAC3C,GAAA,CACC,WAAYgB,GACZ,YAAAjC,GAGA,SAAUhzK,GAAI,MACd,MAAAzoB,GACA,WAAAu5J,EAAA,CACF,EAED9wI,GAAI,MAAM,IAAI,CAACsD,GAAY1hB,QAC1B,OAACo1L,GAAA,GAEC,YAAAhE,GACA,KAAA1vK,GACA,kBAAA0xK,GACA,YAAapzL,GACb,YAAaoe,GAAI,MAAM,OACvB,UAAA1T,GACA,MAAOnY,GACP,UAAWkiM,KAAU,OACrB,YAAAO,GACA,YAAaN,KAAkB,OAG/B,OAAQ,OAAO/6K,GAAM,MAAM,EAAI,EAC/B,WAAAg6K,GACA,iBAAA7iM,GACA,eAAA8iM,EAAA,EAhBK5zL,EAiBP,CACD,IAtCI8V,EAuCP,CAEJ,EACA,CACE0+K,GACAv0L,GACAkzL,GACAD,GAAW,SACXG,GACAoB,GACAC,GACAtD,GACA8C,GACAv+L,GACAu5J,GACA34J,GAAM,WAAW,MAAM,YACvBA,GAAM,WAAW,KAAK,WACtBA,GAAM,WAAW,SACjBhE,GACAo/L,GACAqC,GACAC,GACAb,GACA1oL,GACAipL,GACA7iM,GACA8iM,EACF,CACF,EAEMyB,GAAer1L,IAA0B,CAC7C,MAAM60L,GAAqBL,GAAsBx0L,EAAK,EAChDoe,GAAMne,GAAK40L,EAAkB,EAEnC,GAAI3B,GAAW,SAAS90K,GAAI,EAAE,GAAKi1K,GACjC,OAAOR,GAAqBQ,GAAiBj1K,GAAI,MAAOgzK,EAAW,EAGrE,GAAIsD,GAAe,CAEjB,MAAMzqL,GADgB1X,GAAK,OAAO,OAAQtB,IAAU,CAASA,GAAM,OAAO,QAAQ,MAAO,EACvD,UAAWA,IAAUA,GAAM,OAASyjM,GAAc,IAAI,EAClFQ,GAAe3+L,GAAM,WAAW,SAAWA,GAAM,WAAW,KAAK,WACvE,SAAO,MACLm+L,GAAc,OAAOt2K,GAAI,KAAK,EAC9BuzK,GAAa,CAAC,EAAE,QAAQ1nL,EAAW,EACnC+pL,GACAkB,GACA9D,GAAY,UACZA,GAAY,WACd,EAAE,MACJ,CAEA,OAAOA,GAAY,SACrB,EAEMkE,GAAgCp6L,IAAU,CAC9C,KAAM,CAAE,UAAA83I,EAAU,EAAI93I,GAAM,cAExB4yL,GAAQ,UAAY,MACtBA,GAAQ,QAAQ,SAAS96C,EAAS,CAEtC,EAKA,sBAAU,IAAM,CACV86C,GAAQ,SACVA,GAAQ,QAAQ,gBAAgB,CAAC,CAErC,EAAG,CAAC7tL,GAAM6tL,EAAO,CAAC,KAGhB,OAACrhL,EAAA,EAAe,CAAC,SAAU6oL,GAAc,oBAAqB,GAAM,UAAAtiD,GAClE,mBAAC,MAEC,OAAQsgD,GACR,UAAAN,GACA,SAAUqC,GACV,MAAO,OACP,IAAKvH,GACL,MAAO,CAAE,SAAU,MAAU,EAE5B,UAAC,CAAE,MAAA9tL,GAAO,MAAA2Z,EAAM,IAAMi7K,GAAU,CAAE,MAAA50L,GAAO,MAAA2Z,GAAO,kBAAAk6K,EAAkB,CAAC,GAR/D,GAAGnrI,EAAS,GAAGuqI,EAAS,EAS/B,EACF,CAEJ,E,gBC1ZA,MAAMsC,GAAmB,IACnBC,GAAoB,GACpBC,GAAe,UAOR7C,MAAQ,QAAMx7L,IAAiB,CAC1C,KAAM,CACJ,UAAA2C,GACA,KAAAxH,GACA,OAAAqD,GACA,kBAAAw9L,GACA,eAAAjF,GACA,MAAAx4L,GACA,eAAA+/L,GAAiBH,GACjB,SAAA7C,GACA,UAAAiD,GAAY,GACZ,cAAAjH,GACA,cAAAkH,GACA,cAAAhE,GACA,aAAAiE,GACA,iBAAAC,GACA,WAAA5mC,GAAa,KAAgB,GAC7B,UAAAxkJ,GACA,sBAAA6oL,GAAwB,GACxB,gBAAAC,GAAkB,OAClB,YAAApzJ,GACA,WAAAuzJ,GACA,iBAAA7iM,EACF,EAAIsG,GAEE02L,MAAU,UAAyB,IAAI,EACvCL,MAAc,UAAuB,IAAI,EACzCD,MAA+B,UAAuB,IAAI,EAC1Dj3L,MAAQ,MAAU,EAClB66L,MAAc,MAAe76L,GAAO24J,EAAU,EAC9CxuD,GAAegyF,GAAW,EAAItB,GAAY,UAC1C,CAAC2E,GAAaC,EAAc,KAAI,YAAmCH,EAAY,EAC/EI,GAAsB71J,IAAa,UAAU,SAAWq1J,GACxD,CAACS,GAAatC,EAAc,KAAI,YAA6B,IAAI,EAEjEuC,MAAe,WAAQ,IAAM,CACjC,MAAMC,GAAsBZ,GAC5B,IAAI/3J,GAAS,EAEb,GAAI,CAACs4J,GACH,MAAO,GAGT,UAAWM,MAAMN,GACX,MAAM,QAAQM,EAAE,GAAKA,GAAG,OAAS54J,KACnCA,GAAS44J,GAAG,QAIhB,OAAI54J,GAAS,EACJ24J,GAAsB34J,GAGxB24J,EACT,EAAG,CAACL,EAAW,CAAC,EAIVO,MAAe,WAAQ,IACtB/jM,GAAK,OAAO,OAMV,MAAMA,GAAK,MAAM,EAAE,KAAK,CAAC,EALvB,CAAC,EAMT,CAACA,EAAI,CAAC,EAGHgkM,GAAiB,GACrBX,IAAe,WACbA,GAAc,SACdA,GAAc,QAAQ,QACtBA,GAAc,QAAQ,CAAC,IAAM,KAAU,OAGrCvC,GAAkB9gM,GAAK,OAAO,KAAM2c,IAAMA,GAAE,OAAS,KAAU,YAAY,EAC3EsnL,GAAgBnD,KAAoB,OAGpCoD,MAAkB,WACtB,OAAM,MAAWlkM,GAAMoD,GAAO+/L,GAAgBc,GAAeT,GAAaQ,EAAc,EACxF,CAAChkM,GAAMoD,GAAO+/L,GAAgBc,GAAeT,GAAaQ,EAAc,CAC1E,EAOMG,MAA2B,UAAkC,EAG7DC,GAAezI,EAAqB,CACxC,eAAAC,GACA,eAAiBt9K,IAAU,CAGzB6lL,GAAyB,QAAS,EAAK,EAEnCt/L,GAAM,gBACRA,GAAM,eAAeyZ,EAAK,CAE9B,EACA,KAAAte,EACF,CAAC,EAEKw7L,GAAc,CAAC,CAACx7L,GAAK,MAAM,mBAAmB,OAE9CX,MAAe,WAAQ,IAAM,CAGjC,MAAMA,GAAe,CACnB,QAAS6kM,GACT,KAAMH,GACN,gBAAiB,CAACX,GAClB,aAAAgB,GACA,cAAe,GACf,aAAclI,EAAgBC,GAAe+H,EAAe,EAC5D,iBAAkB,GAClB,UAAW,CAET,OAAQ,KAGR,2BAA4B,IAC9B,CACF,EACA,OAAI1I,KAGFn8L,GAAQ,SAAW,CAACwsB,GAA8Bw4K,QAA0B,MAAerkM,GAAMqkM,EAAa,EAI9GhlM,GAAQ,kBAAoB,IAEvBA,EACT,EAAG,CAAC88L,GAAe+H,GAAiBH,GAAcX,GAAWgB,GAAc5I,GAAax7L,EAAI,CAAC,EAEvF,CACJ,cAAAskM,GACA,aAAAlF,GACA,aAAAmF,GACA,KAAA72L,GACA,WAAAkzL,GACA,kBAAA4D,GACA,KAAApxK,GACA,MAAA9U,GACA,SAAAmmL,GACA,YAAAC,GACA,YAAAC,GACA,sBAAAC,EACF,KAAI,YAASvlM,GAAS,aAAY,YAAW,oBAAmB,mBAAkB,cAAa,eAAa,EAEtGi8L,GAAgBh9K,GACtB6lL,GAAyB,QAAUS,MAQnC,aAAU,IAAM,CACTvB,IACHI,GAAeH,EAAY,CAE/B,EAAG,CAACA,GAAcD,EAAa,CAAC,KAEhC,aAAU,IAAM,CACd,GAAI,CAACA,GACH,OAGF,GAAI,CAACA,GAAc,KAAM,CACvBI,GAAe,MAAS,EACxB,MACF,CAEA,GAAIO,GAAgB,CAClB,MAAMa,GAAqC,CAAC,EAC5CA,GAAqB,CAAC,EAAIn3L,GAAK,OAAO,SAAS,GAAK1N,GAAK,OAAO,SAAS,EACzEyjM,GAAeoB,EAAoB,EACnC,MACF,CAEA,MAAMrB,MAAc,MAClBpE,GAAa,CAAC,EAAE,WAChB,MAA8B1xL,EAAI,EAClC21L,GACAr/L,EACF,EAEAy/L,GAAeD,EAAW,CAE5B,EAAG,CAACH,GAAer/L,GAAOsa,GAAM,QAASte,EAAI,CAAC,EAE9C,IAAI+gM,GAAa19L,IAAU8qG,GAAey1F,IAEtCL,KACFxC,IAAclC,GAAY,YAG5B,MAAMiG,GAAW,KAAK,MAAM/D,GAAalC,GAAY,SAAS,EAAI,KAElE,aAAU,IAAM,CAEViG,IAAY,GAGhBJ,GAAYI,EAAQ,CACtB,EAAG,CAACA,GAAUJ,EAAW,CAAC,KAE1B,aAAU,IAAM,CAKV1kM,GAAK,OAAS8kM,GAAWxmL,GAAM,WACjCmmL,GAAS,CAAC,CAGd,EAAG,CAACzkM,EAAI,CAAC,EAETq7L,EAA8BC,GAAeC,GAASv7L,GAAMw7L,EAAW,EACvER,EAAyBC,GAA8BC,EAAW,EAElE,MAAMr6D,MAAa,eAChBkkE,IAAmB,CAClBN,GAASM,GAAS,CAAC,CACrB,EACA,CAACN,EAAQ,CACX,EAEMhE,GAAY8C,GAAmBnwK,GAAK,OAAS1lB,GAAK,OACxD,IAAIs3L,GAAe,KACnB,GAAIzB,GAAkB,CACpB,MAAM0B,GAAkB3mL,GAAM,UAAYA,GAAM,SAAW,EAC3D,IAAI4mL,GAAgBD,GAAkB3mL,GAAM,SAAW,EACvD,MAAM6mL,GAAU/hM,GAAQ,IACpB8hM,GAAgBllM,GAAK,SACvBklM,GAAgBllM,GAAK,QAEvB,MAAMolM,GAAU13L,GAAK,OACf23L,GAAeH,GAAgBx3L,GAAK,OAASw3L,GAAgBx3L,GAAK,OACxEs3L,MACE,QAAC,OAAI,UAAWnG,GAAY,kBAC1B,oBAAC9iB,EAAA,GACC,YAAaz9J,GAAM,UAAY,EAC/B,cAAeqmL,GAAY,OAC3B,iBAAkBQ,GAClB,WAAAtkE,EAAA,CACF,EACCskE,GAAU,QACT,OAAC,OAAI,UAAWtG,GAAY,kBAC1B,oBAAC,KAAK,CAAC,QAAQ,sCACZ,WAAE,gBAAAoG,EAAgB,EAAE,MAAI,CAAE,aAAAI,EAAa,EAAE,OAAK,CAAE,QAAAD,EAAQ,EAAE,SAC7D,EACF,GAEJ,CAEJ,CAKA,MAAMlE,GAAerzJ,MAAc,MAAkBA,GAAa7tC,EAAI,EAAI,OAC1E,IAAImhM,GACJ,OAAItzJ,KAAgB,QAClB7tC,GAAK,OAAO,QAAStB,IAAU,CAC7BmvC,GAAY,UAAU,QAAS5Q,IAAa,CAE1C,MADgB,MAAgBA,GAAS,OAAO,EACpCv+B,GAAOsB,GAAM,CAACA,EAAI,CAAC,EAC7B,UAAWwyD,MAAYv1B,GAAS,WAC1Bu1B,GAAS,KAAO,sBAAwBA,GAAS,MAAM,WACzD2uI,GAAgBziM,GAIxB,CAAC,CACH,CAAC,KAID,oBACE,qBAAC,OACE,GAAG4lM,GAAc,EAClB,UAAWzF,GAAY,MACvB,aAAYr3L,GACZ,KAAK,QACL,IAAK0zL,GACL,MAAO,CAAE,MAAA93L,GAAO,OAAAC,EAAO,EAEvB,oBAAC6W,EAAA,EAAe,CAAC,kBAAmB,GAClC,oBAAC,OAAI,UAAW2kL,GAAY,oBAAoB2F,EAAiB,EAC9D,WAACrE,OACA,OAAChB,GAAS,CAAC,aAAAC,GAA4B,cAAAC,GAA8B,YAAAR,EAAA,CAA0B,EAEhG4B,GAAY,KACX,OAAC,OACC,cAAajyL,EAAA,GAAU,WAAW,OAAO,cAAc,MAAM,KAC7D,IAAKysL,GAEL,mBAACsF,GAAA,CACC,aAAAnB,GACA,KAAAp/L,GACA,KAAA0N,GACA,MAAAtK,GACA,WAAAu5J,GACA,aAAAxuD,GACA,UAAW0wF,GAAY,UACvB,UAAA4B,GACA,UAAWniL,GAAM,UACjB,WAAAyiL,GACA,QAAAxF,GACA,WAAYj9K,GACZ,WAAAsiL,GACA,UAAAzoL,GACA,kBAAA0oL,GACA,gBAAAC,GACA,YAAAjC,GACA,wBAAyB,EAAQ0E,GACjC,sBAAAvC,GACA,gBAAAC,GACA,aAAAC,GACA,cAAAC,GACA,WAAAC,GACA,iBAAA7iM,GACA,eAAA8iM,EAAA,CACF,EACF,KAEA,OAAC,OAAI,MAAO,CAAE,OAAQh+L,GAAS8qG,GAAc,MAAA/qG,EAAM,EAAG,UAAWy7L,GAAY,OAC1E,SAAA6E,EAAA,CACH,EAEDF,OACC,OAAC8B,EAAA,GACC,oBAAqB,EAAQ/B,GAC7B,aAAcC,GACd,aAAAe,GACA,kBAAAC,GACA,YAAA3F,EAAA,CACF,GAEJ,EACF,EACCmG,EAAA,EACH,EAECrB,KAAgB,SACf,OAAC4B,EAAA,GACC,KAAM5B,GAAY,KAClB,MAAOA,GAAY,MACnB,UAAW,IAAM,CACftC,GAAe,IAAI,CACrB,EACF,GAEJ,CAEJ,CAAC,EAEDhB,GAAM,YAAc,O,gHC3Yb,MAAMmF,EAAwD,CACnE,aAAc,KAAa,QAC3B,cAAe,CAAC,EAChB,WAAY,EACZ,QAAS,GACT,KAAM,EACN,cAAe,EACf,eAAgB,MAClB,EAEaC,KAAa,MAAa,+BAA+B,EACzDC,KAAkB,MAE7B,oCAAoC,EAEzBC,KAAa,MAAmD,+BAA+B,EAE/FC,EAA2B,CAACtnL,EAA+BkN,IAAsB,CAC5F,GAAIi6K,EAAW,MAAMj6K,CAAM,EACzB,MAAO,CAAE,GAAGlN,EAAO,aAAc,KAAa,OAAQ,EAGxD,GAAIonL,EAAgB,MAAMl6K,CAAM,EAAG,CACjC,KAAM,CAAE,cAAAq6K,EAAe,KAAAzyK,EAAM,QAAAD,EAAS,WAAAD,CAAW,EAAI1H,EAAO,QACtDs4C,EAAgB,KAAK,KAAK5wC,EAAaC,CAAO,EACpD,MAAO,CACL,GAAG7U,EACH,cAAAunL,EACA,QAAA1yK,EACA,WAAAD,EACA,aAAc,KAAa,KAC3B,cAAA4wC,EACA,KAAM1wC,EAAO0wC,EAAgB1wC,EAAO,EAAIA,CAC1C,CACF,CAEA,OAAIuyK,EAAW,MAAMn6K,CAAM,EAClB,CAAE,GAAGlN,EAAO,KAAMkN,EAAO,QAAQ,IAAK,EAGxClN,CACT,C,2KChDO,SAASwnL,EAAa,CAAE,SAAArqM,CAAS,EAAmC,CACzE,KAAM,CAACI,EAAOqU,CAAQ,KAAI,YAA2B,CAAC,CAAC,EACjD61L,KAAuB,eAC1BC,GAA8B,CAC7B,MAAMC,EAAmBD,EAAQ,OAAQrpL,GAAM,EAAQA,EAAE,KAAM,EAAE,IAAKA,GAAMA,EAAE,KAAM,EACpFlhB,EAASwqM,CAAgB,EACzB/1L,EAAS81L,CAAO,CAClB,EACA,CAACvqM,CAAQ,CACX,EAEA,SACE,OAACyqM,EAAA,GACC,WAAW,SACX,SAAU,GACV,MAAM,OACN,QAASC,EACT,MAAAtqM,EACA,SAAUkqM,EACV,YAAW,GACX,eAAa,KAAE,mCAAoC,kBAAkB,EACrE,gBAAY,KAAE,kCAAmC,eAAe,EAClE,CAEJ,CAEA,eAAeI,EAAoBxhD,EAAsB,CAUvD,MAAMtlJ,GAPgB,QADL,KAAmB,EACC,OAAO,CAC1C,MAAOslJ,EACP,KAAM,CAAC,QAAQ,EACf,MAAO,IACP,WAAY,MACd,CAAC,GAE6B,KAAK,IAAK/zI,IAAU,CAChD,MAAOA,EAAK,KACZ,MAAOA,EAAK,GACd,EAAE,EAEF,OAAI,CAAC+zI,GAAgB,aAAa,SAASA,EAAa,YAAY,CAAC,IACnEtlJ,EAAQ,QAAQ,CAAE,MAAO,aAAc,MAAO,SAAU,CAAC,EAGpDA,CACT,C,gDCzCY+mM,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,SAAW,WAFDA,IAAAA,GAAA,IAiBL,MAAMz7F,EAAsB,CAAC,CAClC,QAAA/3F,EACA,QAAAnI,EAAU,WACV,eAAA47L,EACA,iBAAAC,EACA,QAAAnzK,EAAU,KACV,gBAAAozK,EAAkB,GAClB,iBAAAC,EAAmB,GACnB,SAAAC,EAAW,GACX,qBAAAC,EAAuB,EACzB,IAA6C,CAC3C,MAAM9gM,KAAS,MAAWuD,EAAWsB,CAAO,EAEtC,CAAC8kG,EAAa1tD,CAAc,KAAI,YAAS,EAAE,EAC3C,CAAC8kJ,EAAsBC,CAAuB,KAAI,YAAS,EAAE,KACnEnQ,EAAA,GAAY,IAAMmQ,EAAwBr3F,CAAW,EAAG,IAAK,CAACA,CAAW,CAAC,EAE1E,KAAM,CAACs3F,EAAeC,CAAgB,KAAI,YAAkC,CAAC,CAAC,EACxE,CAACC,EAAcC,CAAe,KAAI,YAAmBV,EAAmB,CAACA,CAAgB,EAAI,CAAC,CAAC,EAC/F,CAAC11F,EAAaq2F,CAAc,KAAI,YAAmB,CAAC,CAAC,EAErDC,GAAuBT,GAAYF,GAAmBC,EACtDW,EAAuB18L,IAAY,QAAmC,EAAI,GAEhF,SACE,OAAC,OAAI,UAAW7E,EAAO,UACrB,oBAAC4rC,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK21J,EAC7B,qBAAC,OACC,aAAW,MAAGvhM,EAAO,cAAe,CAClC,CAACA,EAAO,WAAW,EAAG6E,IAAY,OACpC,CAAC,EAED,oBAAC,OAAI,UAAW7E,EAAO,mBACrB,mBAACo8C,EAAA,GACC,MAAOutD,EACP,SAAU1tD,EACV,eAAa,KACX,iFACA,4CACF,EACA,MAAO,EACP,YAAa,GACf,EACF,EACCqlJ,OACC,OAACE,EAAA,CACC,SAAAX,EACA,gBAAAF,EACA,iBAAAC,EACA,aAAcM,EACd,qBAAsBE,EACtB,oBAAqBC,EACrB,cAAeJ,EAAc,MAC7B,QAAAp8L,CAAA,CACF,GAEJ,KAEA,OAAC,OAAI,UAAW7E,EAAO,kBACrB,mBAACyhM,EAAA,GACC,YAAaz0L,EACb,aAAc+zL,EACd,cAAeE,EAAc,MAC7B,YAAAj2F,EACA,aAAAm2F,EACA,eAAAV,EACA,qBAAAK,EACA,QAAAvzK,CAAA,CACF,EACF,GACF,EACF,CAEJ,EAEA,SAAShqB,EAAUnF,EAAsByG,EAAqC,CAC5E,MAAO,CACL,sBAAoB,OAAI,CACtB,SAAUA,IAAY,QAAmC,EAAI,SAC/D,CAAC,EACD,aAAW,OAAI,CACb,MAAO,OACP,UAAW,OACX,QAASzG,EAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,qBAAmB,OAAI,CACrB,MAAO,MACT,CAAC,EACD,iBAAe,OAAI,CACjB,QAAS,OACT,cAAe,SACf,MAAO,OACP,UAAWA,EAAM,QAAQ,CAAC,EAC1B,OAAQA,EAAM,QAAQ,CAAC,EACvB,cAAeA,EAAM,QAAQ,CAAC,CAChC,CAAC,EACD,eAAa,OAAI,CACf,cAAe,MACf,OAAQA,EAAM,QAAQ,CAAC,CACzB,CAAC,CACH,CACF,CAaA,MAAMojM,KAAiB,QACrB,CAAC,CACC,QAAA38L,EAAU,WACV,SAAAg8L,EACA,gBAAAF,EACA,iBAAAC,EACA,cAAAK,EACA,aAAAS,EACA,qBAAAC,EACA,oBAAAC,CACF,IAA2B,CACzB,MAAM5hM,KAAS,MAAW6hM,CAAY,EAChCC,KAAqB,eACxBxgJ,GAA+BsgJ,EAAoBtgJ,EAAQ,IAAK1oB,GAAMA,EAAE,EAAE,CAAC,EAC5E,CAACgpK,CAAmB,CACtB,EACMG,KAAsB,eACzB3B,GAAsBuB,EAAqBvB,CAAO,EACnD,CAACuB,CAAoB,CACvB,EAEA,SACE,QAAC,OACC,aAAW,MAAG3hM,EAAO,UAAW,CAC9B,CAACA,EAAO,cAAc,EAAG6E,IAAY,OACvC,CAAC,EAEA,UAAAg8L,MAAY,OAACn6C,EAAA,EAAU,CAAC,MAAOu6C,EAAe,SAAUS,EAAc,OAAQ,CAAC,YAAa,YAAY,EAAG,GAC1Gd,GAAoBD,OACpB,QAAC,OACC,aAAW,MAAG3gM,EAAO,gBAAiB,CACpC,CAACA,EAAO,oBAAoB,EAAG6E,IAAY,OAC7C,CAAC,EAEA,UAAA+7L,MAAoB,OAACV,EAAY,CAAC,SAAU6B,CAAA,CAAqB,EACjEpB,MAAmB,OAACqB,EAAA,EAAe,CAAC,SAAUF,CAAA,CAAoB,GACrE,GAEJ,CAEJ,CACF,EACAN,EAAe,YAAc,iBAE7B,SAASK,EAAazjM,EAAsB,CAC1C,MAAO,CACL,aAAW,OAAI,CACb,QAAS,OACT,IAAKA,EAAM,QAAQ,CAAC,EACpB,SAAU,EACV,cAAe,MACf,eAAgB,gBAChB,SAAU,MACZ,CAAC,EACD,kBAAgB,OAAI,CAClB,SAAU,UACV,cAAe,SACf,eAAgB,QAClB,CAAC,EACD,mBAAiB,OAAI,CACnB,QAAS,OACT,cAAe,MACf,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,wBAAsB,OAAI,CACxB,cAAe,SACf,WAAY,SACd,CAAC,CACH,CACF,C,2NC3LO,SAAS6jM,EAAY/gC,EAA0B1jF,EAAsC,CAC1F,MAAM9iF,EAAUwnM,EAAehhC,EAAU1jF,CAAM,EAGzC+4D,EAAU/4D,EAAO,IAAuB,CAAC2kH,EAAQt6L,KAAW,CAChE,WAAYA,EACZ,MAAO,GACP,QAAS,IACX,EAAE,EAGF,OAAAq5J,EAAS,QAASjuI,GAAY,CAC5B,MAAMmvK,EAAqB5kH,EAAO,UAAW19E,GAAUuiM,EAAapvK,EAASnzB,CAAK,CAAC,EAG/EsiM,EAAqB,KACvB7rD,EAAQ6rD,CAAkB,EAAE,MAAQ,GACpC7rD,EAAQ6rD,CAAkB,EAAE,QAAUnvK,EAE1C,CAAC,EAEM,CAAE,QAAAv4B,EAAS,QAAA67I,CAAQ,CAC5B,CAKO,SAAS8rD,EAAapvK,EAAuBnzB,EAAuB,CACzE,KAAM,CAACqmI,EAAUm8D,CAAU,EAAIxiM,EACzB,CAAE,MAAOyiM,EAAc,KAAMC,EAAa,MAAOC,CAAa,EAAIxvK,EAExE,GAAIkzG,IAAao8D,EACf,MAAO,GAGT,MAAMG,GAAgBC,EAAkBH,CAAW,EACnD,OAAOE,GAAcJ,EAAYG,CAAY,CAC/C,CAEO,SAASP,EAAehhC,EAA0B1jF,EAA0B,CACjF,UAAWvqD,KAAWiuI,EACpB,GAAI,CAAC0hC,EAAkB3vK,EAASuqD,CAAM,EACpC,MAAO,GAGX,MAAO,EACT,CAIA,SAASolH,EAAkB3vK,EAAuBuqD,EAA0B,CAC1E,KAAM,CAAE,MAAA19E,EAAO,KAAA/J,EAAM,MAAAE,CAAM,EAAIg9B,EAE/B,IAAIqvK,EAAa,GACjB,MAAMO,EAAkB,OAAO,YAAYrlH,CAAM,EAAE19E,CAAK,EACpD+iM,IACFP,EAAaO,GAGf,MAAMH,GAAgBC,EAAkB5sM,CAAI,EAC5C,GAAI,CAKF,OAAO2sM,GAAcJ,EAAYrsM,CAAK,CACxC,MAAc,CACZ,MAAO,EACT,CACF,CAGA,MAAM0sM,EAAqE,CACzE,IAAK,CAACG,EAAIC,IAAOD,IAAOC,EACxB,KAAM,CAACD,EAAIC,IAAOD,IAAOC,EAIzB,KAAM,CAACD,EAAIC,IAAO,CAChB,MAAMC,KAAuB,MAAW,OAAOD,CAAE,IAAI,EAErD,OADW,IAAI,OAAOC,EAAqB,QAASA,EAAqB,KAAK,EACpE,KAAKF,CAAE,CACnB,EACA,KAAM,CAACA,EAAIC,IAAO,CAChB,MAAMC,KAAuB,MAAW,OAAOD,CAAE,IAAI,EAErD,MAAO,CADI,IAAI,OAAOC,EAAqB,QAASA,EAAqB,KAAK,EACnE,KAAKF,CAAE,CACpB,CACF,E,yDCzFO,SAASG,EAAgCtmM,EAA4D,CAE1G,OAAKA,EAAO,oBAAoB,YAC9BA,EAAO,oBAAoB,UAAY,CAAC,CAAE,KAAM,UAAW,CAAC,GAGzDA,EAAO,oBAAoB,QAC9BA,EAAO,oBAAoB,MAAQ,CACjC,SAAUA,EAAO,oBAAoB,UAAW,CAAC,EAAE,IACrD,GAEGA,EAAO,iBACVA,EAAO,eAAiB,CAAC,GAEpBA,CACT,CAEO,SAASumM,EAA4BC,EAAoBxhC,EAAqB,CAOnF,MANwB,CACtB,GAAGA,EACH,oBAAqBA,EAAM,qBAAqB,OAAQyhC,GAAaA,IAAaD,CAAU,GAAK,CAAC,EAClG,sBAAuBxhC,EAAM,uBAAuB,OAAQyhC,GAAaA,IAAaD,CAAU,GAAK,CAAC,EACtG,OAAQxhC,EAAM,QAAQ,IAAKK,GAAakhC,EAA4BC,EAAYnhC,CAAQ,CAAC,CAC3F,CAEF,CAEO,SAASqhC,EAAmBlrF,EAAiBmrF,EAAiB3hC,EAAqB,CACxF,MAAO,CACL,GAAGA,EACH,oBAAqBA,EAAM,qBAAqB,IAAKt1J,GAAUA,IAASi3L,EAAUnrF,EAAU9rG,CAAK,EACjG,sBAAuBs1J,EAAM,uBAAuB,IAAKt1J,GAAUA,IAASi3L,EAAUnrF,EAAU9rG,CAAK,EACrG,OAAQs1J,EAAM,QAAQ,IAAKK,GAAaqhC,EAAmBlrF,EAASmrF,EAASthC,CAAQ,CAAC,CACxF,CACF,CAEO,SAASuhC,EAAuBriC,EAA4C,CACjF,OAAOA,EAAS,IAAI,CAAC,CAAC70J,EAAM81J,EAAUlsK,CAAK,IAAM,CAACoW,EAAM81J,EAAU,oBAAoBlsK,CAAK,CAAC,CAAC,CAC/F,CAEO,SAASutM,EAAkBvwK,EAAmC,CACnE,OAAIA,EAAQ,QACNA,EAAQ,QACH,KAAgB,MAEhB,KAAgB,MAEhBA,EAAQ,QACV,KAAgB,SAEhB,KAAgB,QAE3B,CAEO,SAASwwK,EAAuBthC,EAA2B,CAChE,OAAQA,EAAU,CAChB,KAAK,KAAgB,MACnB,MAAO,CAAE,QAAS,GAAM,QAAS,EAAM,EACzC,KAAK,KAAgB,SACnB,MAAO,CAAE,QAAS,GAAO,QAAS,EAAM,EAC1C,KAAK,KAAgB,MACnB,MAAO,CAAE,QAAS,GAAM,QAAS,EAAK,EACxC,KAAK,KAAgB,SACnB,MAAO,CAAE,QAAS,GAAO,QAAS,EAAK,CAC3C,CACF,CAEO,SAASuhC,EAAsBzwK,EAAqC,CACzE,MAAO,CACL,KAAMA,EAAQ,KACd,MAAOA,EAAQ,MACf,SAAUuwK,EAAkBvwK,CAAO,CACrC,CACF,CAEO,SAAS0wK,EAAsB7qM,EAAmC,CACvE,MAAO,CACL,KAAMA,EAAM,KACZ,MAAOA,EAAM,MACb,GAAG2qM,EAAuB3qM,EAAM,QAAQ,CAC1C,CACF,CAEO,SAAS8qM,EAAiB1iC,EAAqB,CAQpD,MAAO,KAPeA,EAAS,IAAIwiC,CAAqB,EAEjB,OAAO,CAACpwL,EAAKC,IAAY,CAC9D,MAAMswL,EAAuB,GAAGtwL,EAAQ,IAAI,GAAGA,EAAQ,QAAQ,IAAIA,EAAQ,KAAK,IAChF,OAAOD,EAAM,GAAGA,CAAG,KAAKuwL,CAAoB,GAAKA,CACnD,EAAG,EAAE,CAEuB,IAC9B,CAEO,MAAMC,EAAyC,CACpD,CAAE,MAAO,KAAgB,MAAO,YAAa,SAAU,MAAO,KAAgB,KAAM,EACpF,CAAE,MAAO,KAAgB,SAAU,YAAa,iBAAkB,MAAO,KAAgB,QAAS,EAClG,CAAE,MAAO,KAAgB,MAAO,YAAa,gBAAiB,MAAO,KAAgB,KAAM,EAC3F,CAAE,MAAO,KAAgB,SAAU,YAAa,uBAAwB,MAAO,KAAgB,QAAS,CAC1G,EAEO,SAASC,EAAuB9wK,EAAiC,CACtE,MAAMkvI,EAAWqhC,EAAkBvwK,CAAO,EAC1C,MAAO,CAACA,EAAQ,KAAMkvI,EAAUlvI,EAAQ,KAAK,CAC/C,CAEO,SAAS+wK,EAAoBxmH,EAAgB0jF,EAA8B,CAChF,MAAM+iC,KAAc,MAAoBzmH,CAAM,EACxC0mH,EAAgBhjC,EAAS,IAAI6iC,CAAsB,EAAE,IAAI,IAA4C,EAE3G,OAAO7B,EAAegC,EAAeD,CAAW,CAClD,CAEO,SAASE,KAAyBC,EAAkC,CACzE,MAAMljC,EAAWkjC,EAAe,IAAI,IAAgC,EAAE,KAAK,EACrEC,KAAiB,YAASnjC,EAAU,SAAO,EACjD,OAAO0iC,EAAiBS,CAAc,CACxC,CAEO,SAASC,EAAsBlwI,EAAmD,CACvF,OAAOA,IAA2B,KAA4B,UAAY,SAC5E,CAEO,SAASmwI,GAAgC,CAC9C,OAAO,kBAAkB,EAAE,OAAQp4I,GAAOA,EAAG,OAAS,eAAe,YAAY,CACnF,CAEO,SAASq4I,EAAqBtwJ,EAAc,CACjD,OAAOqwJ,EAA8B,EAAE,KAAMp4I,GAAOjY,IAAQiY,EAAG,GAAG,CACpE,CAEO,SAASs4I,EAAqBC,EAAoC,CACvE,KAAM,CAAE,MAAAxxE,EAAO,SAAAyxE,EAAU,cAAAC,EAAe,OAAAC,EAAQ,MAAAttE,EAAO,SAAAtyE,CAAS,EAAIy/I,EAC9DI,GAAaC,EAAc7xE,EAAOjuE,CAAQ,EAC1C+/I,EAAgBC,EAAiBN,CAAQ,EACzCO,GAAaC,EAAqBP,CAAa,EAC/CQ,GAAeC,EAAgBR,CAAM,EACrCS,EAAcC,EAAehuE,CAAK,EAExC,MAAO,CAACutE,GAAYE,EAAeE,GAAYE,GAAcE,CAAW,EAAE,KAAK,IAAI,CACrF,CAEO,SAASP,EAAc7xE,EAAqBjuE,EAA2B,CAC5E,MACE,WACCiuE,EACGA,GAAO,IAAI,CAAC,CAAE,WAAAsyE,EAAY,SAAAC,CAAS,IAAM,GAAGD,CAAU,MAAMC,CAAQ,KAAKxgJ,GAAY,KAAK,GAAG,EAAE,KAAK,OAAO,EAC3G,MAER,CAEO,SAASggJ,EAAiBN,EAA6B,CAC5D,MACE,cACCA,GACG,IAAKh9D,GAAQ,CACb,GAAIA,EAAI,SAAS,GAAG,EAClB,OAAOA,EACJ,MAAM,GAAG,EACT,IAAKt8C,GAAM,CACV,MAAMq6G,EAAcr6G,EAAE,MAAM,EAAG,CAAC,EAChC,OAAOq6G,EAAY,CAAC,EAAE,kBAAkB,EAAIA,EAAY,MAAM,CAAC,CACjE,CAAC,EACA,KAAK,GAAG,EACN,CACL,MAAMA,EAAc/9D,EAAI,MAAM,EAAG,CAAC,EAClC,OAAO+9D,EAAY,CAAC,EAAE,kBAAkB,EAAIA,EAAY,MAAM,CAAC,CACjE,CACF,CAAC,EACA,KAAK,IAAI,GAAK,MAErB,CAEO,SAASP,EAAqBQ,EAAgC,CACnE,MAAO,uBAAyBA,GAAa,KAAK,IAAI,GAAK,MAC7D,CAEO,SAASN,EAAgBR,EAA2B,CACzD,MAAO,YAAcA,GAAQ,KAAK,IAAI,GAAK,MAC7C,CAEO,SAASU,EAAehuE,EAA0B,CACvD,MAAO,WAAaA,GAAO,KAAK,IAAI,GAAK,MAC3C,C,mICxMO,IAAKquE,GAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,QAAU,UALAA,IAAAA,GAAA,IAQAC,GAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,WAAa,aACbA,EAAA,OAAS,SACTA,EAAA,MAAQ,QANEA,IAAAA,GAAA,IAaL,SAASC,EAAwBptL,EAA+C,CACrF,OAAO,OAAO,OAAektL,CAAqB,EAAE,SAASltL,CAAK,CACpE,CAEO,SAASqtL,EAAoBrtL,EAA2C,CAC7E,OAAO,OAAO,OAAOmtL,CAAiB,EAAE,KAAMG,GAAcA,IAActtL,CAAK,CACjF,CAIO,SAASutL,EACdvtL,EACsC,CACtC,MAAMwtL,EAAwC,OAAO,OAAON,CAAqB,EACjF,OAAOltL,GAAU,MAA+B,CAACwtL,EAA4B,SAASxtL,CAAK,CAC7F,CAEO,SAASytL,EAA2BztL,EAA4C,CACrF,MAAM2O,EAAQ3O,EAAM,MAAM,WAAW,EACrC,OAAO2O,EAAQA,EAAM,CAAC,EAAI,EAC5B,CAQO,SAAS++K,EACd1tL,EAC2F,CAC3F,OAAIutL,EAAuBvtL,CAAK,EACfA,EAAM,MAAM,GAAG,EAChB,CAAC,EAERA,CAEX,CAEO,IAAK2tL,GAAAA,IACVA,EAAA,SAAW,WACXA,EAAA,UAAY,YAFFA,IAAAA,GAAA,IAKAC,GAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,WAAa,aACbA,EAAA,OAAS,SAJCA,IAAAA,GAAA,IAiJAC,GAAAA,IACVA,EAAA,SAAW,WACXA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,GAAK,KACLA,EAAA,MAAQ,QALEA,IAAAA,GAAA,G,8FC5ML,MAAMC,EAAY,CAAC,CAAE,QAAAxvM,EAAS,SAAAqI,CAAS,IAAsB,CAClE,MAAMonM,KAAsB,UAAOzvM,EAAS0vM,CAAoB,EAC1DC,KAAqB,UAAO3vM,EAAS4vM,CAAgB,EAE3D,OAAIH,EAAoB,UACf,OAACI,EAAA,CAAsB,QAASJ,EAAsB,SAAApnM,CAAA,CAAS,EAGpEsnM,EAAmB,UACd,OAACG,EAAA,CAAqB,QAASH,EAAqB,SAAAtnM,CAAA,CAAS,EAG/D,IACT,EAMMwnM,EAAwB,CAAC,CAAE,QAAA7vM,EAAS,SAAAqI,CAAS,IAAwC,CACzF,MAAM0nM,KAAuB,MAA4B,EAGzD,OAFgBC,EAAeD,EAAsB/vM,CAAO,KAGnD,mBAAG,SAAAqI,CAAA,CAAS,EAEZ,IAEX,EAEMynM,EAAuB,CAAC,CAAE,QAAA9vM,EAAS,SAAAqI,CAAS,IAAoC,CACpF,MAAM4nM,KAAuB,MAAqB,EAGlD,OAFgBD,EAAeC,EAAsBjwM,CAAO,KAGnD,mBAAG,SAAAqI,CAAA,CAAS,EAEZ,IAEX,EAKA,SAAS2nM,EAAiCl+D,EAAyB9xI,EAAc,CAC/E,SAAO,SAAM8xI,CAAS,EACnB,KAAK9xI,CAAO,EACZ,OAAO,EACP,MAAM,EACN,KAAK,CAAC,CAACkwM,EAAYC,CAAO,IAAMA,IAAY,EAAI,CACrD,CAEA,SAAST,EAAqB9gL,EAA4B,CACxD,OAAO,OAAO,OAAO,IAAkB,EAAE,SAASA,CAAM,CAC1D,CAEA,SAASghL,EAAiBhhL,EAAwB,CAChD,OAAO,OAAO,OAAO,IAAc,EAAE,SAASA,CAAM,CACtD,C,gXCvEO,MAAMwhL,EAA0B,OAEnC,OAACh4J,EAAA,GACC,QAAM,KAAE,kDAAmD,QAAQ,EACnE,gBAAY,KAAE,wDAAyD,QAAQ,EAC/E,MAAM,SACN,KAAK,uBACL,WAAS,KACP,qDACA,yEACF,EACF,E,eCkBG,MAAMi4J,EAAqB,CAAC,CAAE,aAAAhpC,GAAc,SAAAx3D,EAAS,IAA+B,CACzF,KAAM,CAAE,KAAAx6F,GAAM,GAAAiX,EAAI,YAAAo7B,GAAa,SAAA4oJ,GAAW,CAAC,CAAE,EAAIjpC,GAC3Cr+J,MAAS,MAAWuD,CAAS,EAC7B,CAACgkM,GAAuBC,EAAwB,KAAI,YAAS,EAAK,EAClE,CAAE,qBAAAhyI,EAAqB,KAAI,MAAgB,EAE3CiyI,MAAc,MAAgBjyI,EAAqB,EAEnD,CAACkyI,GAAiBn+D,EAAa,KAAI,MAAuB,KAAmB,kBAAkB,EAC/F,CAACo+D,GAAeC,EAAW,KAAI,MAAuB,KAAmB,kBAAkB,EAC3F,CAACC,GAAiBC,EAAa,KAAI,MAAuB,KAAmB,kBAAkB,EAC/F,CAACC,GAAcC,EAAgB,KAAIxtH,EAAA,GAAsB,EAEzDytH,MAAwB,MAAkCzyI,GAAuB6oG,EAAY,EAE7F6pC,GAA0BZ,GAAS,OAAQzvM,IAAQA,GAAI,MAAM,OAAS,gBAAgB,EAEtFswM,MAAiB,MAAc9pC,GAAc,IAAe,WAAW,EAOvE+pC,GAAmBX,GAAc,OAAOU,EAAc,EAAIb,GAAS,OAEnEe,GAAqCZ,GAAc,OAAOU,EAAc,EAAID,GAAwB,OAGpGI,GAAgB,UAAO,MAAcjqC,GAAc,IAAe,UAAU,CAAC,GAAK,EAOlFkqC,GAAyBd,GAAc,GAAQW,IAAoBE,IAAiBhB,GAAS,OAAS,EAEtGkB,GAAmBf,MAAc,MAAcppC,EAAY,EAAIupC,GAI/Dl2H,GAAUi2H,IAAiBa,IAFF,CAAC9pJ,GAK1B+pJ,GAAqBhB,MAAc,MAAgBppC,EAAY,EAAIypC,GAInEY,GAAeb,IAAmBY,KAFP,CAAC/pJ,IAAe,CAAC2pJ,IAAsC,CAACC,IAInFK,GAA6B,CAAC,EA6BpC,GA5BIV,IACFU,GAAY,QACV,OAACC,EAAAA,SAAA,CACC,mBAACzhG,EAAA,EAAK,KAAL,CACC,KAAK,SACL,SAAO,KAAE,yDAA0D,oBAAoB,EACvF,QAAS,IAAMqgG,GAAyB,EAAI,EAC9C,GALY,oBAMd,CACF,EAGEE,IACFiB,GAAY,QACV,QAACC,EAAAA,SAAA,CACC,oBAACzhG,EAAA,EAAK,KAAL,CACC,KAAK,eACL,SAAO,KAAE,oDAAqD,QAAQ,EACtE,aAAW,KAAE,wDAAyD,QAAQ,EAC9E,SAAU,CAACoiC,GACX,cAAY,SACZ,QAAS,IAAMy+D,GAAiB37L,EAAI,EACtC,KACA,OAAC86F,EAAA,EAAK,QAAL,EAAa,IATF,sBAUd,CACF,EAGE0gG,GAAiB,CACnB,MAAMgB,MAA4B,KAChC,wDACA,sEACF,EACMC,MAA0B,KAC9B,qDACA,+DACF,EACMC,MAAuB,KAC3B,kDACA,kEACF,EACMC,MAAoB,KACxB,+CACA,wDACF,EAEMC,GAA0B,CAC7BR,GAAiD,GAA5BI,GACtBnqJ,GAAcoqJ,GAA0B,GACxCT,GAAqC,EAAIU,GAAuB,GAChET,GAAgBU,GAAoB,EACtC,EAAE,OAAO,OAAO,EAEVE,MACJ,oBACE,oBAAC,KAAK,CAAC,QAAQ,iDAAiD,sEAEhE,KACA,OAAC,OAAG,EACHD,GAAwB,IAAKE,OAC5B,OAAC,MAAiB,SAAAA,EAAA,EAATA,EAAgB,CAC1B,GACH,EAGFR,GAAY,QACV,OAAC//G,EAAA,GAEC,WAAY,CAAC8/G,GACb,KAAOrpM,OACL,OAACwD,EAAA,EAAO,CAAC,QAASqmM,GAAsB,UAAU,MAChD,mBAAC,QAAM,SAAA7pM,EAAA,CAAS,EAClB,EAGF,mBAAC8nG,EAAA,EAAK,KAAL,CACC,SAAO,KAAE,6CAA8C,QAAQ,EAC/D,aAAW,KAAE,iDAAkD,QAAQ,EACvE,KAAK,YACL,YAAW,GACX,SAAU,CAACuhG,GACX,QAAS,IAAM7hG,GAASw3D,EAAY,EACtC,GAfI,sBAgBN,CACF,CACF,CAEA,MAAM+qC,MAA2B,KAAE,kCAAmC,0CAA2C,CAC/G,MAAOhB,EACT,CAAC,EAEKiB,MAAwB,KAAE,wCAAyC,iCAAkC,CACzG,MAAOf,EACT,CAAC,EAIKgB,GAAQhmL,GAAMjX,GAEpB,SACE,QAAC,OAAI,UAAWrM,GAAO,cACrB,qBAAC4rC,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,oBAACA,EAAA,EAAK,CAAC,WAAW,SAAS,IAAK,EAAG,SAAU,EAC3C,mBAACE,EAAA,EAAI,CAAC,QAAQ,KAAK,QAAQ,OAAO,OAAO,SAAS,SAAQ,GACvD,SAAAz/B,EAAA,CACH,EACF,EACC+7L,GAAmB,MAClB,OAACjrJ,EAAA,GACC,QAAM,KAAkB,mBAAoB,CAAE,aAAc9wC,EAAK,CAAC,EAClE,QAAQ,YACR,MAAM,UACN,OAAQ,GAEP,SAAA+8L,EAAA,CACH,EAEDd,GAAgB,MACf,OAACnrJ,EAAA,GACC,QAAM,KAAkB,iBAAkB,CAAE,OAAQ,iBAAiB9wC,EAAI,GAAI,CAAC,EAC9E,QAAQ,YACR,MAAM,UACN,OAAQ,GAEP,SAAAg9L,EAAA,CACH,EAED3qJ,OACC,OAACg4H,EAAA,GAAiB,CAAC,QAAO,GAAC,cAAY,MAAcrY,GAAc,IAAe,UAAU,EAAG,EAEhG,CAACkqC,OAA0B,OAACnB,EAAuB,EAAC,KACrD,OAACmC,EAAA,EAAM,EAAC,KACR,OAAC,MACC,iBAAiB,MACjB,QACE7qJ,MACI,KACE,mEACA,uDACF,EACA,OAEN,QAAQ,YACR,KAAK,KACL,KAAMgzB,GAAU,MAAQ,MACxB,KAAK,SACL,cAAa,GAAGA,GAAU,OAAS,MAAM,UACzC,KAAM,qCAAqC,mBAAmB43H,EAAK,CAAC,QAEnE,SAAA53H,MACG,KAAE,4CAA6C,MAAM,KACrD,KAAE,4CAA6C,MAAM,EAC3D,EACCi3H,GAAY,OAAS,MACpB,OAACzhG,EAAA,EAAQ,CAAC,WAAS,OAACC,EAAA,EAAI,CAAE,SAAAwhG,EAAA,CAAY,EACpC,mBAACa,EAAA,GACC,gBAAY,KACV,wDACA,wDACA,CAAE,iBAAkBnrC,GAAa,IAAK,CACxC,EACF,EACF,GAEJ,EACC0pC,GACAR,OACC,OAACkC,EAAA,GACC,SAAS,YACT,WAAYprC,GAAa,GACzB,aAAcA,GAAa,KAC3B,QAAS,IAAMmpC,GAAyB,EAAK,EAC/C,GAEJ,CAEJ,EAEMjkM,EAAanF,KAA0B,CAC3C,iBAAe,OAAI,CACjB,WAAY,GAAGA,GAAM,OAAO,WAAW,SAAS,GAChD,QAAS,GAAGA,GAAM,QAAQ,CAAC,CAAC,IAAIA,GAAM,QAAQ,GAAG,CAAC,GAElD,aAAc,aAAaA,GAAM,OAAO,OAAO,IAAI,GACnD,oBAAqB,GAAGA,GAAM,MAAM,OAAO,OAAO,GAClD,qBAAsB,GAAGA,GAAM,MAAM,OAAO,OAAO,EACrD,CAAC,CACH,G,0BCrQO,MAAMsrM,EACXC,IACG,CACH,KAAM,CAACl0F,GAAWm0F,EAAY,KAAI,YAAS,EAAK,EAC1C,CAACvrC,EAAcwrC,EAAe,KAAI,YAAqD,EACvF,CAACljM,GAAO01H,EAAQ,KAAI,YAA8B,EAClD,CAAC17H,GAAWotH,EAAY,KAAI,YAAS,EAAK,EAE1CruB,MAAgB,eAAY,IAAM,CAClC/+F,KAGJkpM,GAAgB,MAAS,EACzBD,GAAa,EAAK,EAClBvtE,GAAS,MAAS,EACpB,EAAG,CAAC17H,EAAS,CAAC,EAERmpM,MAAa,eAAY,CAAC,CAAE,KAAAz9L,GAAM,gBAAA09L,EAAgB,IAAkD,CACxGF,GAAgB,CAAE,KAAAx9L,GAAM,gBAAA09L,EAAgB,CAAC,EACzCH,GAAa,EAAI,EACjBvtE,GAAS,MAAS,CACpB,EAAG,CAAC,CAAC,EAECr9B,MAAe,eAAY,IAAM,CACjCq/D,IACFtwC,GAAa,EAAI,EACjB47E,GAAatrC,CAAY,EACtB,KAAK,IAAMurC,GAAa,EAAK,CAAC,EAC9B,MAAMvtE,EAAQ,EACd,QAAQ,IAAM,CACbtO,GAAa,EAAK,CACpB,CAAC,EAEP,EAAG,CAAC47E,GAActrC,CAAY,CAAC,EA2C/B,MAAO,IAzCc,WAAQ,IACvB13J,MACK,OAACqjM,EAAA,CAAW,OAAQv0F,GAAW,UAAW/V,GAAe,MAAA/4F,EAAA,CAAc,KAI9E,QAACk9B,EAAA,GACC,OAAQ4xE,GACR,UAAW/V,GACX,qBAAsB,CAAC/+F,GACvB,cAAe,CAACA,GAChB,SAAO,KACL,mFACA,sBACF,EAEA,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,kGAAkG,mEAEjH,EACF,KACA,OAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,6EAA6E,+DAE5F,EACF,KAEA,QAACkjC,EAAA,EAAM,UAAN,CACC,oBAAC5+B,EAAA,GAAM,CAAC,KAAK,SAAS,QAAQ,cAAc,QAAS+5F,GAAc,SAAUr+F,GAC1E,SAAAA,MACG,KAAE,mDAAoD,aAAa,KACnE,KAAE,yDAA0D,2BAA2B,EAC7F,KACA,OAACsE,EAAA,GAAM,CAAC,KAAK,SAAS,QAAQ,YAAY,QAASy6F,GAAe,SAAU/+F,GAC1E,mBAAC,KAAK,CAAC,QAAQ,yBAAyB,kBAAM,EAChD,GACF,GACF,EAED,CAACgG,GAAO+4F,GAAeV,GAAcr+F,GAAW80G,EAAS,CAAC,EAEvCq0F,GAAYpqG,EAAa,CACjD,EAKMsqG,EAAa,CAAC,CAAE,OAAA9qM,GAAQ,UAAA0kC,GAAW,MAAAj9B,EAAM,OAE3C,QAACk9B,EAAA,GACC,OAAA3kC,GACA,UAAA0kC,GACA,qBAAsB,GACtB,cAAe,GACf,SAAO,KAAE,kDAAmD,sBAAsB,EAElF,oBAAC,KACC,mBAAC,KAAK,CAAC,QAAQ,2DAA2D,gDAE1E,EACF,KACA,OAAC,OACC,mBAAC,QAAM,kBAAmBj9B,EAAK,EAAE,EACnC,GACF,E,eC7GG,MAAMsjM,EAA4C,CACvD,UAAW,YACX,SAAU,WACV,MAAO,QACP,SAAU,WACV,QAAS,UACT,UAAW,YACX,OAAQ,SACR,QAAS,UACT,MAAO,oBACP,IAAK,aACL,SAAU,WACV,QAAS,iBACX,ECXaC,EAA8C,CACzD,QAAS,UACT,MAAO,WACP,WAAY,sBACZ,QAAS,UACT,KAAM,OACN,UAAW,YACX,MAAO,QACP,MAAO,YACP,SAAU,eACV,QAAS,OACT,IAAK,QACP,E,cCFO,MAAMC,EAAwB,CAAC,CAAE,SAAU,CAAE,KAAAzlM,GAAM,MAAAhH,GAAO,YAAA0sM,GAAa,QAAAC,CAAQ,CAAE,IAAa,CACnG,MAAMrqM,MAAS,MAAW,EAAS,EAEnC,SACE,QAAC4rC,EAAA,EAAK,CAAC,WAAW,SAAS,IAAK,GAC9B,qBAACA,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,IAAK,GAC7C,UAAAy+J,KACC,OAACxnM,EAAA,EAAO,CAAC,QAASwnM,EAAS,MAAM,QAC/B,mBAAClrM,EAAA,EAAI,CAAC,KAAK,uBAAuB,UAAWa,GAAO,SAAU,EAChE,KAEA,OAAC,OAAI,IAAK0E,GAAM,IAAKhH,GAAO,OAAO,MAAO,MAE5C,OAAC,QAAM,SAAAA,EAAA,CAAM,GACf,EACC0sM,OACC,OAAC,MACC,gBAAY,KAAE,iEAAkE,oBAAoB,EACpG,KAAK,oBACL,KAAMA,GACN,OAAO,SACP,QAAQ,YACR,KAAK,KACP,GAEJ,CAEJ,EAEM,GAAahsM,KAA0B,CAC3C,YAAU,OAAI,CACZ,KAAMA,GAAM,OAAO,QAAQ,IAC7B,CAAC,CACH,G,cClBO,MAAMksM,GAAe,CAAC,CAAE,aAAAjsC,EAAa,IAAyB,CACnE,KAAM,CAAE,iCAAkCpoC,EAAU,EAAIooC,GAClDr+J,MAAS,MAAW,CAAS,EAC7B,CAAE,qBAAAw1D,CAAqB,KAAI,MAAgB,EAC3C,CAAC+0I,EAAa,KAAI,MAAsB,CAAE,aAAc/0I,CAAsB,CAAC,EAC/E,CAACg1I,GAAa/4J,EAAe,EAAIi4J,EAA2Ba,GAAc,OAAO,EAGjFE,GAAmBx0E,GAAU,KAAMrxF,IAAa,EAAQA,GAAS,IAAiB,CAAE,EAE1F,SACE,QAAC,OAAI,UAAW5kC,GAAO,oBAAqB,cAAY,gBACtD,qBAAC4rC,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACy7J,EAAA,CACC,aAAAhpC,GACA,SAAWqsC,IACTj5J,GAAgB,CACd,KAAMi5J,GAAqB,IAAMA,GAAqB,KACtD,gBAAiBA,GAAqB,UAAU,eAClD,CAAC,EAEL,EAECD,MACC,OAAC,OACE,SAAAx0E,GAAU,IAAI,CAACrxF,GAAU/8B,KAAU,CAClC,MAAM8iM,GAAc/lK,GAAS,IAAmB,EAC1Cuf,GAAWvf,GAAS,IAAiB,EACrCgmK,GAAkB,CAAShmK,GAAS,sBACpCimK,GAAiBjmK,GAAS,IAAwB,EAClDjnB,GAAMwmC,GAAS,KAAOt8C,GAE5B,SACE,OAACijM,GAAA,CAEC,KAAM3mJ,GAAS,KACf,KAAMvf,GAAS,KACf,eAAa,MAAuBA,EAAQ,EAC5C,YAAA+lK,GACA,eAAAE,GACA,gBAAAD,EAAA,EANKjtL,EAOP,CAEJ,CAAC,EACH,KAEA,OAAC,OAAI,UAAW3d,GAAO,mBACrB,mBAAC+qM,EAAA,CAA4B,UAAA90E,EAAA,CAAsB,EACrD,GAEJ,EACCu0E,EAAA,EACH,CAEJ,EAWMM,GAAwB7rM,IAAqC,CACjE,KAAM,CAAE,KAAAoN,GAAM,KAAAtW,GAAM,YAAAiwC,EAAa,YAAA2kK,GAAa,eAAAE,GAAgB,gBAAAD,GAAkB,EAAK,EAAI3rM,GACnFe,MAAS,MAAW,CAAS,EAE7BgrM,GAAcL,KAAgB,OAEpC,SACE,OAAC,OAAI,UAAW3qM,GAAO,mBACrB,oBAAC4rC,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,GAC7B,oBAACq/J,EAAA,CACC,KAAA5+L,GACA,KAAAtW,GACA,YAAAiwC,EACA,eAAA6kK,EAAA,CACF,EACCG,OAAe,OAACE,EAAA,CAAgC,YAAAP,GAA0B,gBAAAC,EAAA,CAAkC,GAC/G,EACF,CAEJ,EASO,SAASK,EAA6BhsM,GAA0C,CACrF,KAAM,CAAE,KAAAoN,GAAM,KAAAtW,GAAM,YAAAiwC,EAAa,eAAA6kK,EAAe,EAAI5rM,GAE9CksM,GAAWjB,EAAkBn0M,EAAI,EAEvC,SACE,QAAC61C,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,qBAACA,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,IAAK,GAC7C,UAAAu/J,OAAY,OAAChsM,EAAA,EAAI,CAAC,KAAMgsM,EAAA,CAAU,EAClCN,MACC,OAACV,EAAqB,CAAC,SAAUU,EAAA,CAAgB,KAEjD,OAAC/+J,EAAA,EAAI,CAAC,QAAQ,OAAO,MAAM,UACxB,SAAAz/B,EAAA,CACH,GAEJ,EACC25B,MACC,OAAC8F,EAAA,EAAI,CAAC,QAAQ,YAAY,MAAM,YAC7B,SAAA9F,CAAA,CACH,GAEJ,CAEJ,CAgBO,MAAM+kK,EAA8B,CAAC,CAAE,UAAA90E,GAAW,MAAAhpH,EAAM,IAAwC,CAErG,MAAMm+L,GAAqBn+L,IAAS,OAAO,UACrCo+L,KAAc,WAAQp1E,GAAYrxF,IAAaA,GAAS,IAAI,EAE5D0mK,MAA6B,QAAKD,CAAW,EAC7CE,GAAoB,OAAO,QAAQF,CAAW,EAAE,MAAM,EAAGD,EAAkB,EAC3EI,GAA+BF,GAA6BF,GAElE,SACE,OAACx/J,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACA,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,IAAK,EAC7C,UAAA2/J,GAAkB,SAAW,MAC5B,OAACl8K,EAAA,EAAQ,CAAC,MAAM,UAAU,KAAK,uBAC7B,mBAAC,KAAK,CAAC,QAAQ,0CAA0C,sCAA0B,EACrF,EAEDk8K,GAAkB,IAAI,CAAC,CAACx1M,GAAMkgI,EAAS,EAAGpuH,KAAU,CACnD,MAAMsjM,GAAWjB,EAAkBn0M,EAAI,EACjC2jF,GAAeuwH,EAAkBl0M,EAAI,MAAK,cAAWA,EAAI,EACzD01M,MAAa,QAAKJ,CAAW,EAAI,IAAMxjM,GAIvC+8B,GAAWqxF,GAAU,CAAC,EAE5B,SACE,QAAC2yE,EAAAA,SAAA,CACC,qBAACh9J,EAAA,EAAK,CAAC,UAAU,MAAM,WAAW,SAAS,IAAK,GAC7C,UAAAhH,GAAS,IAAwB,GAAG,SACnC,OAAC,OACC,MAAM,OACN,IAAKA,GAAS,IAAwB,GAAG,KACzC,IAAKA,GAAS,IAAwB,GAAG,MAC3C,EAEDumK,OAAY,OAAChsM,EAAA,EAAI,CAAC,KAAMgsM,EAAA,CAAU,KACnC,QAAC,QACE,UAAAzxH,GACAu8C,GAAU,OAAS,GAAK,KAAKA,GAAU,MAAM,KAChD,GACF,EACC,CAACw1E,IAAc,WAfH11M,EAgBf,CAEJ,CAAC,EACAy1M,GAA+B,MAAK,OAAC,QAAM,aAAIA,EAA4B,QAAQ,GACtF,EACF,CAEJ,EAEMN,EAAkC,CAAC,CAAE,YAAAP,GAAa,gBAAAC,EAAgB,IAAoC,CAC1G,MAAM5qM,MAAS,MAAW,CAAS,EAE7B0rM,EAAe,EAAQf,GAAY,uBACnCgB,MAAsB,MAAShB,GAAY,iBAAiB,EAC5DiB,GAA8BjB,GAAY,0BAC1CkB,GAAqBF,GAAoB,QAAQ,EAEvD,SACE,OAAC,OAAI,UAAW3rM,GAAO,YACrB,mBAAC4rC,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,EAEzB,SAAA8/J,KACC,OAACr8K,EAAA,EAAQ,CAAC,MAAM,QAAQ,KAAK,qBAC3B,mBAACxsB,EAAA,EAAO,CAAC,QAAS8nM,GAAY,uBAC5B,mBAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,+CAA+C,wCAA4B,EAC5F,EACF,EACF,KAEA,oBAEG,UAAAkB,OACC,oBACE,qBAACx8K,EAAA,EAAQ,CAAC,KAAK,aACb,oBAAC,KAAK,CAAC,QAAQ,gDAAgD,iCAAqB,KACpF,OAACxsB,EAAA,EAAO,CAAC,QAAS8oM,GAAoB,eAAe,EACnD,mBAAC,QACC,mBAAC7/J,EAAA,EAAI,CAAC,MAAM,UAAW,SAAA6/J,GAAoB,OAAO,IAAI,EAAE,QAAQ,EAAE,EACpE,EACF,GACF,KACA,OAACt8K,EAAA,EAAQ,CAAC,KAAK,YACb,oBAAC,KAAK,CAAC,QAAQ,4CAA4C,mCACtC,OAAC,IAAW,CAAC,QAASu8K,EAAA,CAA6B,GACxE,EACF,GACF,EAGD,CAACC,OACA,OAACx8K,EAAA,EAAQ,CAAC,KAAK,aACb,mBAAC,KAAK,CAAC,QAAQ,+CAA+C,gCAAoB,EACpF,EAGD,CAACu7K,OACA,OAACv7K,EAAA,EAAQ,CAAC,KAAK,cACb,oBAAC,KAAK,CAAC,QAAQ,sCAAsC,2BACxC,OAACyc,EAAA,EAAI,CAAC,MAAM,UAAU,uBAAW,EAAO,kBACrD,EACF,GAEJ,EAEJ,EACF,CAEJ,EAEM,EAAa1tC,KAA0B,CAC3C,uBAAqB,OAAI,CACvB,aAAcA,GAAM,MAAM,OAAO,QACjC,OAAQ,aAAaA,GAAM,OAAO,OAAO,IAAI,GAC7C,aAAc,MAChB,CAAC,EACD,sBAAoB,OAAI,CACtB,SAAU,WAEV,WAAY,GAAGA,GAAM,OAAO,WAAW,OAAO,GAC9C,QAAS,GAAGA,GAAM,QAAQ,CAAC,CAAC,IAAIA,GAAM,QAAQ,GAAG,CAAC,GAElD,aAAc,aAAaA,GAAM,OAAO,OAAO,IAAI,EACrD,CAAC,EACD,eAAa,OAAI,CACf,uBAAwB,GAAGA,GAAM,MAAM,OAAO,OAAO,GACrD,wBAAyB,GAAGA,GAAM,MAAM,OAAO,OAAO,EACxD,CAAC,EACD,2BAAyB,OAAI,CAC3B,WAAY,GAAGA,GAAM,QAAQ,GAAG,CAAC,GACjC,YAAa,GAAGA,GAAM,QAAQ,GAAG,CAAC,EACpC,CAAC,CACH,E,yDC9LA,IAAI0/B,EAQG,SAASguK,EAAuBxmL,EAA+B,CACpEwY,EAAoBxY,CACtB,CAOO,SAASymL,GAA8C,CAC5D,OAAOjuK,CACT,C,gGC1GO,SAASs8C,EAAoB,CAClC,UAAAF,EACA,YAAA8xH,EACA,SAAA3sM,EACA,QAAA00B,EACA,gBAAAk4K,EACA,MAAAvuM,EAAQ,QACV,EAA6B,CAC3B,MAAMwuM,EAAmB,OAAO,OAAOD,CAAe,EAAE,IAAK9hB,IAAc,CACzE,MAAOA,EAAS,KAChB,MAAOA,EAAS,YAClB,EAAE,EACIvzG,EACJq1H,EAAgB,OAAS,KACrB,KACE,mCACA,2EACF,KACA,KAAE,sCAAuC,qDAAqD,EACpG,SACE,OAAC,KACC,MAAAvuM,EACA,SAAAk5E,EACA,QACE,OAAC,KAAiB,CAAgB,KAAMs1H,EAAkB,aAAcF,EAAa,UAAA9xH,CAAA,CAAsB,EAE7G,QAAAnmD,EACA,KAAK,KAEJ,SAAA10B,CAAA,CACH,CAEJ,C,6ZCuBA,QAlDqB,CAAC,CAAE,UAAAqtB,EAAU,IAAa,CAC7C,MAAMy/K,MAAoB,WAAQ,OAAM,MAAqB,EAAG,CAAC,CAAC,EAC5DhnL,MAAW,MAAY,EACvBinL,MAAoB,MAAa1zL,IAAUA,GAAM,UAAU,iBAAiB,EAElF,SACE,QAACyuF,EAAA,EAAI,CACH,oBAACA,EAAA,EAAK,KAAL,CAEC,OAAQv+F,EAAA,GAAU,MAAM,aAAa,WAAW,iCAAiC,EACjF,SAAO,KAAE,mCAAoC,eAAe,EAC5D,QAAS,IAAM,CACb,MAAM0a,MAAK,MAAiBoJ,GAAW0/K,EAAiB,EACxD,IAAsB,wBAAwB,CAAE,KAAM,mBAAoB,CAAC,EAC3E,KAAgB,QAAQ,CAAE,UAAW9oL,EAAG,CAAC,EACzC6B,MAAS,MAAqB,MAAS,CAAC,CAC1C,GARI,mBASN,KACA,OAACgiF,EAAA,EAAK,KAAL,CAEC,OAAQv+F,EAAA,GAAU,MAAM,aAAa,WAAW,uBAAuB,EACvE,SAAO,KAAE,yBAA0B,KAAK,EACxC,QAAS,IAAM,CACb,IAAsB,wBAAwB,CAAE,KAAM,SAAU,CAAC,KACjE,MAAe8jB,EAAS,CAC1B,GANI,SAON,KACA,OAACy6E,EAAA,EAAK,KAAL,CAEC,OAAQv+F,EAAA,GAAU,MAAM,aAAa,WAAW,4CAA4C,EAC5F,SAAO,KAAE,4BAA6B,qBAAqB,EAC3D,QAAS,IAAM,CACb,IAAsB,wBAAwB,CAAE,KAAM,qBAAsB,CAAC,KAC7E,MAAkB8jB,EAAS,CAC7B,GANI,eAON,KACA,OAACy6E,EAAA,EAAK,KAAL,CAEC,OAAQv+F,EAAA,GAAU,MAAM,aAAa,WAAW,wCAAwC,EACxF,SAAO,KAAE,iCAAkC,aAAa,EACxD,QAAS,IAAM,CACb,IAAsB,wBAAwB,CAAE,KAAM,aAAc,CAAC,KACrE,MAAmB8jB,GAAWy/K,EAAiB,CACjD,EACA,SAAU,CAACA,EAAA,EAPP,qBAQN,GACF,CAEJ,EC5BA,EA7BuB,CAAC,CAAE,UAAAz/K,GAAW,qBAAA2/K,EAAqB,IAAa,CACrE,KAAM,CAACC,GAAYC,EAAa,KAAI,YAAS,EAAK,EAElD,sBAAU,IAAM,CACVD,IAAcD,IAChBA,GAAqB,CAEzB,EAAG,CAACC,GAAYD,EAAoB,CAAC,KAGnC,OAACnlG,EAAA,GACC,QAAS,OAAM,OAAC,EAAY,CAAC,UAAAx6E,EAAA,CAAsB,EACnD,UAAU,SACV,OAAQ,CAAC,EAAG,CAAC,EACb,gBAAiB6/K,GAEjB,oBAACtnM,EAAA,IACC,QAAQ,YACR,KAAK,KACL,KAAK,UACL,cAAa2D,EAAA,GAAU,WAAW,YAAY,WAAW,YAAY,EAErE,oBAAC,KAAK,CAAC,QAAQ,wBAAwB,eAAG,KAC1C,OAACzJ,EAAA,EAAI,CAAC,KAAMmtM,GAAa,WAAa,aAAc,KAAK,IAAK,IAChE,EACF,CAEJ,E,oHChCO,MAAME,EAAc,CAAC,CAAE,UAAA9/K,EAAU,OAEpC,OAACznB,EAAA,IACC,cAAa,KAAa,MAAM,UAAU,QAAQ,YAClD,QAAQ,UACR,KAAK,KACL,QAAS,IAAM,CACb,IAAsB,kBAAkB,EACxC,KAAgB,QAAQ,CAAE,UAAW,KAAmB,IAAK,CAAC,CAChE,EAEA,mBAAC,KAAK,CAAC,QAAQ,iCAAiC,iBAAK,EACvD,EC0BEwnM,EAAqB,CACzB,eAAc,KACd,WAAU,KACV,yBAAwB,KACxB,eAAc,IAChB,EAEMC,EAAmBh0L,KAAuB,CAC9C,SAAUA,GAAM,QAClB,GAEMi0L,MAAY,WAAQD,EAAiBD,CAAkB,EAWtD,SAASG,GAAoB5nM,GAAoC,CACtE,6BAA6B,OAAQA,EAAO,CAC9C,CAEO,SAAS6nM,GAAqB7nM,GAAoC,IACvE,KAA6B,QAASA,EAAO,CAC/C,CAIO,MAAM8nM,KAAU,QAAa7tM,IAAU,IAE5C,MAAY,EACZ,MAAM6yD,MAAci7I,EAAA,GAAe,KAGnCC,EAAA,GAAY/tM,GAAM,UAAU,OAAQ,KAAyB,EAE7D,MAAMguM,GAAchuM,GAAM,UAAU,UAAU,aAAe,GACvDiuM,GAAqB,IAAM,CAC/B,OAAO,SAAS,KAAO,KAAS,YAAYjuM,GAAM,UAAU,SAAS,WAAW,CAClF,EAEMm9F,MAAY,MAAmB,EAE/B+wG,GAAyB,IAAM,CACnC,GAAI,CACF,MAAMC,GAAe,IAAI,IAAI,KAAS,YAAYH,EAAW,EAAGtwM,EAAA,GAAO,MAAM,EACvE0wM,GAAS,IAAI,IAAI1wM,EAAA,GAAO,MAAM,EAChCywM,GAAa,OAASC,GAAO,KAC/B,KAAU,QACR,IAAI,MAAoB,CACtB,UAAWlgK,EAAA,EACX,MAAO,CACL,SAAO,KACL,8EACA,2BACF,EACA,WAAYmgK,GACZ,QACE,oBACE,qBAAC,KACE,yDAA+C,OAAC,OAAC,QAAM,SAAAL,EAAA,CAAY,GACtE,KACA,OAAC,KAAG,+CAAsC,GAC5C,EAEF,eAAgB,UAChB,eAAa,KAAE,mEAAoE,SAAS,EAC5F,UAAWC,EACb,CACF,CAAC,CACH,EAEAA,GAAmB,CAEvB,OAASn6L,GAAK,CACZqpF,GAAU,MAAM,cAAerpF,cAAe,MAAQA,GAAI,QAAU,MAAS,CAC/E,CACF,EAEMw6L,GAAkB,IAAM,CAC5B,IAAsB,sBAAsB,EAC5C,MAAMC,MAAe,MAAgB,EAC/B,CAAE,UAAA9gL,GAAW,SAAA29E,GAAU,eAAAojG,GAAgB,WAAAC,GAAY,eAAAC,EAAe,EAAI1uM,GAE5EuuM,GAAa,cAAc9gL,GAAU,IAAK,EAAQA,GAAU,KAAK,SAAU,EAAE,KAAMrT,IAAa,CAC9Fq0L,GAAW,CAAE,GAAIhhL,GAAU,IAAK,MAAOA,GAAU,MAAO,IAAKA,GAAU,KAAK,KAAO,GAAI,UAAWrT,EAAS,CAAC,EAC5G,MAAMu0L,GAAiBvjG,GAAS,QAChC,GAAIhxF,GACFu0L,GAAe,UAAU,KAAK,CAC5B,GAAI,KAAYlhL,GAAU,IAC1B,KAAMA,GAAU,MAChB,IAAKA,GAAU,KAAK,KAAO,GAC3B,WAAYkhL,EACd,CAAC,MACI,CACLH,GAAe,KAAY/gL,GAAU,GAAG,EACxC,MAAMmhL,GAAgBD,GAAe,UAAU,UAAWv4H,IAAYA,GAAQ,KAAO,KAAY3oD,GAAU,GAAG,EAC1GmhL,IACFD,GAAe,UAAU,OAAOC,GAAe,CAAC,CAEpD,CACAF,GAAeC,EAAc,EAC7BlhL,GAAU,KAAK,UAAYrT,GAC3By4C,GAAY,CACd,CAAC,CACH,EAEMg8I,GAAiB,IAAM,CAC3B,IAAsB,qBAAqB,EAC3C,KAAgB,QAAQ,CAAE,SAAU,UAAW,CAAC,CAClD,EAEMC,GAAiB,IAAM,CAC3B,KAAY,KAAK,CACnB,EAEMC,GAAiB,IAAM,CAC3B,KAAY,KAAK,CACnB,EAEMC,GAAiB,IAAM,CAC3B,KAAY,KAAK,EACjBn8I,GAAY,CACd,EAEMo8I,GAAmB,CAACl3M,GAAsCu7C,KAAyB,CACvFv7C,GAAQ,IAAI,CAAC4uB,GAAQ/d,KAAU,CAC7B,MAAMqC,GAAY0b,GAAO,UACnByvD,MAAU,iBAACnrE,GAAA,CAAW,GAAGjL,GAAO,IAAK,iBAAiB4I,EAAK,GAAI,EACrE,OAAO+d,GAAO,OAAU,SAAW2sB,GAAQ,OAAO3sB,GAAO,MAAO,EAAGyvD,EAAO,EAAI9iC,GAAQ,KAAK8iC,EAAO,CACpG,CAAC,CACH,EAEM84H,GAAoB,IACjB,KAAY,MAAM,UAGrBC,GAAoB,IAAM,CAC9B,MAAMC,GAAW1xM,EAAA,GAAO,UAAU,MAAQ,cAEpC,CAAE,UAAA+vB,GAAW,UAAAikD,EAAU,EAAI1xE,GAC3B,CAAE,QAAAqvM,GAAS,UAAArxF,EAAU,EAAIvwF,GAAU,KACnC6lB,GAAuB,CAAC,EAE9B,GAAIo+B,IAAaw9H,GAAkB,EACjC,MAAO,CAAC,EAGV,GAAIG,GAAS,CACX,IAAIC,GAAOtxF,MACP,KAAE,oCAAqC,oBAAoB,KAC3D,KAAE,kCAAmC,kBAAkB,EAC3D1qE,GAAQ,QACN,OAACi8J,GAAA,GACC,QAASD,GACT,KAAMtxF,GAAY,WAAa,OAC/B,SAAUA,GAAY,OAAS,UAC/B,SAAS,KACT,QAASswF,EAAA,EACL,aACN,CACF,CACF,CAEA,OAAI7gL,GAAU,KACZ6lB,GAAQ,QAAK,OAACk8J,EAAA,EAA0B,CAA8B,IAAK/hL,GAAU,KAAxC,wBAA6C,CAAE,EAG1F2hL,IAAY1xM,EAAA,GAAO,eAAe,gBACpC41C,GAAQ,QACN,OAACi8J,GAAA,GAEC,WAAS,KAAE,+DAAgE,eAAe,EAC1F,KAAK,OACL,QAAS,IAAM,CACb,KAAgB,QAAQ,CAAE,OAAQ,EAAK,CAAC,CAC1C,GALI,eAMN,CACF,EAGFN,GAAiB,IAAsB,KAAM37J,EAAO,EAC7CA,EACT,EAEMm8J,GAAyB,OAE3B,QAAC3jB,EAAA,EAAW,CACV,oBAAC/4G,EAAA,GACC,WAAS,KAAE,sCAAuC,0BAA0B,EAC5E,KAAK,WACL,QAAS+7H,GACT,OAAM,GACR,KACA,OAAC/7H,EAAA,EAAa,CAAC,QAASi8H,GACtB,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,yBAAa,EAChE,KACA,OAACj8H,EAAA,GACC,WAAS,KAAE,kCAAmC,sBAAsB,EACpE,KAAK,UACL,QAASg8H,GACT,OAAM,GACR,IAfe,kBAgBjB,EAIEW,GAAqB,IAAM,CAC/B,KAAM,CAAE,UAAAjiL,GAAW,yBAAAkiL,GAA0B,eAAAvhC,EAAe,EAAIpuK,GAEhE,OAAIouK,GACK,QAGP,OAACwhC,GAAA,EAAmB,CAAC,UAAAniL,GAAsB,iBAAkBkiL,EAAAA,EAA8B,eAAgB,CAE/G,EAEME,GAAqB,IAAM,CAC/B,KAAM,CAAE,UAAApiL,GAAW,aAAAysB,GAAc,eAAAk0H,EAAe,EAAIpuK,GAC9C,CAAE,QAAA8yG,GAAS,QAAArgC,GAAS,aAAAq9H,GAAc,SAAAC,EAAS,EAAItiL,GAAU,KACzD,CAAE,SAAAiqF,EAAS,EAAIjqF,GACfuiL,GAAct4F,IAAYA,GAAS,YACnCpkE,GAAuB,CAAC,EAE9B,OAAI47J,GAAkB,EACb,CAACO,GAAuB,EAAGC,GAAmB,CAAC,GAGpDM,IACF18J,GAAQ,QACN,OAACy/B,EAAA,GACC,WAAS,KAAE,kCAAmC,yBAAyB,EACvE,QAASm7H,GACT,KAAK,QACD,iBACN,CACF,EAGEp7F,IAAW,CAAC54D,IACd5G,GAAQ,QACN,OAAC,KAAgB,CACd,UAAC,CAAE,UAAAkjE,GAAW,UAAAL,EAAU,OACvB,OAACpjC,EAAA,GACC,WAAS,KAAE,yBAA0B,gBAAgB,EACrD,KAAK,OACL,QAAS,IAAM,CACbyjC,GAAUxT,EAAA,EAAqB,CAC7B,UAAAv1E,GACA,UAAW0oF,EACb,CAAC,CACH,EACF,GAXkB,aAatB,CACF,EAGF84F,GAAiB,IAAsB,MAAO37J,EAAO,EAEjDw8J,IACFx8J,GAAQ,QACN,OAACy/B,EAAA,GACC,WAAS,KAAE,6BAA8B,oBAAoB,EAC7D,KAAK,MACL,QAAS87H,EAAA,EACL,iBACN,CACF,EAGEp8H,IAAW,CAACv4B,IACd5G,GAAQ,QACN,OAAC,GACC,qBAAsB,IAAsB,gBAC5C,UAAA7lB,EAAA,EACI,oBACN,CACF,EAGEsiL,IACFz8J,GAAQ,QAAK,OAACi6J,EAAW,CAAoB,UAAA9/K,EAAA,EAAf,cAAqC,CAAE,EAIlE2gJ,IACH96H,GAAQ,QAAK,OAAC0jB,EAAA,EAAmB,GAAK,mBAAoB,CAAE,EAG9D1jB,GAAQ,KAAKo8J,GAAmB,CAAC,EAE1Bp8J,GACT,EAEA,SACE,OAAC28J,EAAA,GACC,WACE,oBACG,UAAAd,GAAkB,KACnB,OAACn4I,EAAA,EAAmB,CAAC,qBAAoB,GAAC,KAC1C,OAACk5I,EAAA,EAAgB,CAAC,UAAU,QAAS,SAAAL,GAAmB,EAAE,GAC5D,EAEJ,CAEJ,CAAC,EAEDhC,EAAQ,YAAc,UAEtB,SAAeH,GAAUG,CAAO,EAE1BQ,MAAc,OAAI,CACtB,MAAO,cACP,SAAU,MACZ,CAAC,C,+IClWM,MAAM8B,EAAqD,CAChE,GAAG,KACH,KAAM,QACN,WAAY,KACZ,QAAS,CAAC,CACZ,EAEaC,KAAqB,MAAY,CAC5C,KAAM,mBACN,aAAc,IACd,SAAU,CACR,YAAa,CAAC32L,EAAuBkN,IAAgE,CACnG,MAAM0pL,KAAgB,MAAiB52L,EAAOkN,EAAO,QAAQ,EAAE,EAC3D0pL,EAAc,OAAS,SAI3BA,EAAc,QAAQ,KAAK1pL,EAAO,QAAQ,IAAI,CAChD,EACA,cAAe,CAAClN,EAAuBkN,IAAmD,CACxF,MAAM0pL,KAAgB,MAAiB52L,EAAOkN,EAAO,QAAQ,EAAE,EAC/D,GAAI0pL,EAAc,OAAS,QACzB,OAGF,MAAMznM,EAAQ+d,EAAO,QAAQ,KAC7B0pL,EAAc,QAAQ,OAAOznM,EAAO,CAAC,CACvC,EACA,cAAe,CAAC6Q,EAAuBkN,IAAsE,CAC3G,MAAM0pL,KAAgB,MAAiB52L,EAAOkN,EAAO,QAAQ,EAAE,EAC/D,GAAI0pL,EAAc,OAAS,QACzB,OAGF,KAAM,CAAE,OAAA73K,EAAQ,MAAA5vB,CAAM,EAAI+d,EAAO,QAAQ,KACzC0pL,EAAc,QAAQznM,CAAK,EAAI4vB,CACjC,EACA,gBAAiB,CAAC/e,EAAuBkN,IAAkE,CACzG,MAAM0pL,KAAgB,MAAiB52L,EAAOkN,EAAO,QAAQ,EAAE,EAC3D0pL,EAAc,OAAS,UAI3BA,EAAc,QAAU1pL,EAAO,QAAQ,KACzC,CACF,CACF,CAAC,EAEY,CAAE,YAAA2pL,EAAa,cAAAC,EAAe,cAAAC,EAAe,gBAAAC,CAAgB,EAAIL,EAAmB,QACpFM,EAAuBN,EAAmB,O,qFC5DhD,SAASO,EAAWlhL,EAAamhL,EAAQ,GAAO,CACrD,OAAO,IAAI,QAAS39I,GAAY,CAC9B,MAAM49I,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,OAAS59I,EAChB49I,EAAO,IAAMphL,EACbohL,EAAO,MAAQD,EACf,SAAS,KAAK,YAAYC,CAAM,CAClC,CAAC,CACH,CAGO,MAAMC,KAAa,KAAa,SAAS,EACnCC,EAAUD,EAAW,UAElC,KAAe,OAAQ,OAAWA,CAAU,C,gKCJrC,MAAME,EAA8B,GACrCC,EAA0B,EAEhC,IAAKC,GAAAA,IACHA,EAAA,UAAY,YACZA,EAAA,QAAU,UAFPA,IAAAA,GAAA,IAcE,MAAMC,EAAgF,CAC3F,GAAI,IAAkB,mBACtB,KAAM,yBACN,YAAa,6EACb,eAAgB,CACd,oBAAqBH,EACrB,OAAQ,CAAC,CACX,EACA,aAAe71M,MAGK,KAAcA,CAAI,GAEhB81M,EAChB,IAAkC,WAClC,IAAkC,cAExC,wBAA0B91M,GAAsB,CAC9C,MAAMi2M,KAAY,KAAcj2M,CAAI,EACpC,MAAO,4EAA4E81M,CAAuB,sEAAsEG,CAAS,EAC3L,EAKA,SAAW52M,GAAaE,GACtBA,EAAO,QACL,KAAKS,GAAS,CAIZ,GAAI,CAHmB,OAAO,KAAKX,EAAQ,MAAM,EAAE,KAChD4S,GAAS5S,EAAQ,OAAO4S,CAAI,EAAE,YAAc,SAC/C,EAEE,OAAOjS,EAGT,MAAMk2M,EAAyB,CAAC,EAEhC,UAAW91M,KAASJ,EAAM,CAGxB,MAAMm2M,EAAyB/1M,EAAM,OAAO,OAAQ1B,GAAU03M,EAAmB13M,EAAOW,CAAO,CAAC,EAChG,GAAI82M,EAAc,SAAW,EAC3B,SAKF,MAAME,KAAmB,MAAiBj2M,EAAO+1M,CAAa,EAGxDhkM,KAAkB,MAAoBgkM,EAAeE,CAAgB,EAGrEC,EAA2BC,EAAiBF,EAAkBh3M,CAAO,EAG3E,QAASsD,EAAI,EAAGA,EAAIvC,EAAM,OAAO,OAAQuC,IAAK,CAC5C,MAAMjE,EAAQ0B,EAAM,OAAOuC,CAAC,EAE5B,GAAI,CAAC6zM,EAAqB93M,EAAOW,CAAO,EACtC,SAGF,MAAMuyD,KAAY,MAAoBlzD,CAAK,EACrC+3M,EAAep3M,EAAQ,OAAOuyD,CAAS,EAAE,aACzC8kJ,EAAiD,CAAC,EAExDL,EAAiB,QAASx6M,GAAU,CAClC,MAAM86M,EAA0B96M,EAAM+1D,CAAS,EACzCp8C,KAAU,MAAY,CAC1B,MAAOmhM,EACP,SAAUF,CACZ,CAAC,EAED,UAAWG,KAAeH,EACnB,MAAM,QAAQC,EAAoBE,CAAW,CAAC,IACjDF,EAAoBE,CAAW,EAAI,CAAC,GAEtCF,EAAoBE,CAAW,EAAE,KAAKphM,EAAQohM,CAAW,CAAC,CAE9D,CAAC,EAED,UAAWA,KAAeH,EAAc,CACtC,MAAMI,EAA0B,CAC9B,KAAM,GAAGjlJ,CAAS,KAAKglJ,CAAW,IAClC,OAAQF,EAAoBE,CAAW,EACvC,KAAM,KAAU,MAChB,OAAQ,CAAC,CACX,EAEAC,EAAiB,KAAOC,EAAgBF,EAAal4M,EAAOm4M,CAAgB,EAC5E1kM,EAAO,KAAK0kM,CAAgB,CAC9B,CACF,CAEA1kM,EAAO,KAAK,CACV,OAAQ,CAAC,EACT,KAAM,iBACN,KAAM,KAAU,aAChB,OAAQmkM,CACV,CAAC,EAEDJ,EAAU,KAAK,CACb,OAAA/jM,EACA,OAAQkkM,EAAiB,IAC3B,CAAC,CACH,CAEA,OAAOH,CACT,CAAC,CACH,CACJ,EAMA,SAASa,EAAe5kM,EAAiB6kM,EAAqB33M,EAA+C,CAI3G,MAAO,CACL,KAAM,CAAE,OAAQ,CAAE,SAAU,EAH5BA,EAAQ,sBAAwB,OAAYw2M,EAA8Bx2M,EAAQ,oBAGzC,CAAE,EAC3C,OAAQ23M,EACR,OAAA7kM,CACF,CACF,CAQA,MAAMikM,EAAqB,CAAC13M,EAAcW,IAA2D,CACnG,MAAMuyD,KAAY,MAAoBlzD,CAAK,EAC3C,OAAOW,GAAS,OAAOuyD,CAAS,GAAG,YAAc,SACnD,EAOM4kJ,EAAuB,CAAC93M,EAAcW,IAA2D,CACrG,MAAMuyD,KAAY,MAAoBlzD,CAAK,EAC3C,OACEW,GAAS,OAAOuyD,CAAS,GAAG,YAAc,aAC1C,MAAM,QAAQvyD,GAAS,OAAOuyD,CAAS,EAAE,YAAY,GACrDvyD,GAAS,OAAOuyD,CAAS,EAAE,aAAa,OAAS,CAErD,EAKMklJ,EAAkB,CAACF,EAAqBvlD,EAAoB4lD,IAAkC,CAClG,OAAQL,EAAa,CACnB,KAAK,KAAU,UACb,OAAO,KAAU,QACnB,KAAK,KAAU,KACf,KAAK,KAAU,YACf,KAAK,KAAU,MACf,KAAK,KAAU,aACb,OAAOvlD,EAAY,KACrB,QACE,SAAO,MAAuB4lD,CAAW,GAAK,KAAU,MAC5D,CACF,EAYA,SAASV,EACPF,EACAh3M,EACe,CACf,MAAMi3M,EAA2B,CAAC,EAIlC,SAAW,CAAC,CAAEz6M,CAAK,IAAKw6M,EAAkB,CACxC,MAAMa,EAAwB,CAAC,EAE/B,SAAW,CAACtlJ,EAAWlzD,CAAK,IAAK,OAAO,QAAQ7C,CAAK,EAAG,CACtD,MAAMs7M,EAAY93M,EAAQ,OAAOuyD,CAAS,GAEtCulJ,IAAc,QAKhBA,EAAU,eAAiB,QAC1BA,EAAU,YAAc,aAAgCA,EAAU,aAAa,SAAW,GAC3FA,EAAU,YAAc,MACxBA,EAAU,YAAc,SAExBD,EAAa,KAAKx4M,CAAK,CAE3B,CAKIw4M,EAAa,OAAS,EACxBZ,EAAU,KAAK,CAACS,EAAeG,EAAcA,EAAa,CAAC,EAAE,OAAO,OAAQ73M,CAAO,CAAC,CAAC,EAErFi3M,EAAU,KAAK,CAACS,EAAe,CAAC,EAAG,EAAG13M,CAAO,CAAC,CAAC,CAEnD,CAEA,OAAOi3M,CACT,C,yHC5OO,SAASc,EAAmBC,EAA2D,CAc5F,MAAO,UAbSA,EAAW,IAAK/rM,GAAM,CACpC,IAAIgsM,EAAY,GAChB,OAAIhsM,EAAE,MAAQA,EAAE,MACdgsM,GAAa,GAAGhsM,EAAE,IAAI,IAAIA,EAAE,YAAY,IAAKkzB,GAAM,GAAGA,EAAE,IAAI,EAAE,CAAC,QAAQlzB,EAAE,KAAK,GACrEA,EAAE,KACXgsM,GAAa,GAAGhsM,EAAE,IAAI,IAAIA,EAAE,YAAY,IAAKkzB,GAAM,GAAGA,EAAE,IAAI,EAAE,CAAC,IACtDlzB,EAAE,MACXgsM,GAAa,GAAGhsM,EAAE,YAAY,IAAKkzB,GAAM,GAAGA,EAAE,IAAI,EAAE,CAAC,OAAOlzB,EAAE,KAAK,GAEnEgsM,GAAa,GAAGhsM,EAAE,YAAY,IAAKkzB,GAAM,GAAGA,EAAE,IAAI,EAAE,CAAC,GAEhD84K,CACT,CAAC,EACwB,KAAK,IAAI,CAAC,GACrC,CAEO,MAAMC,EAAe5pM,GAAwF,CAClH,GAAI,CAACA,EACH,MAAO,GAGT,MAAM6pM,EAAa7pM,EAAQ,KAAMrC,GAAMA,EAAE,YAAY,QAAUA,EAAE,YAAY,KAAMkzB,GAAMA,EAAE,IAAI,CAAC,EAC1Fi5K,EAAe9pM,EAAQ,KAAMrC,GAAMA,EAAE,IAAI,EAC/C,OAAOksM,GAAcC,CACvB,EAKO,SAASC,EAAgBh5M,EAA8C,CAC5E,MAAO,CACL,KAAM,IAA0B,QAChC,SAAU,CACR,KAAM,IAAwB,OAC9B,KAAMA,CACR,CACF,CACF,CAKO,SAASi5M,EAAiBj5M,EAA+C,CAC9E,MAAO,CACL,KAAM,IAA0B,SAChC,SAAU,CACR,KAAM,IAAwB,OAC9B,KAAMA,CACR,CACF,CACF,CAEO,SAASk5M,EAAoB7tH,EAAsD,CACxF,MAAO,CACL,KAAM,IAA0B,SAChC,KAAMA,EACN,WAAY,CAAC,CACf,CACF,CAQO,SAAS8tH,EACdjZ,EACgC,CAChC,OAAIA,GAAQ,QACH,KAASA,EAAO,IAAI,EAEtB,IACT,C,iDC5EO,MAAMj0J,EAAgB,SAUhBtiC,EAAmC,CAC9C,UAAW,EACb,C,+HCAO,SAAS8yG,EAAsB,CACpC,MAAAt/G,EACA,aAAAoK,EACA,KAAAgM,EACA,YAAA25B,EACA,YAAAxlC,EACA,SAAA3K,EACA,OAAAqL,EACA,UAAAU,EACA,SAAA2gJ,EACA,MAAA/kJ,EACA,OAAA00M,CACF,EAAgE,CAC9D,MAAMlyM,KAAS,MAAWuD,CAAS,EAC7B+f,KAAK,MAAM,EAEjB,SACE,OAAC,IAAK,CAAC,MAAOjX,EAAM,YAAA25B,EAA0B,QAAS1iB,EACrD,mBAAC,KACC,GAAAA,EACA,KAAM,EACN,MAAArtB,EACA,aAAAoK,EACA,SAAAxK,EACA,OAAAqL,EACA,YAAAV,EACA,SAAA+hJ,EACA,aAAY3gJ,EACZ,KAAMpE,EACN,UAAWwC,EAAO,SAClB,cAAakyM,CAAA,CACf,EACF,CAEJ,CAEO,SAAS3uM,EAAUnF,EAAsB,CAC9C,MAAO,CACL,YAAU,OAAI,CACZ,WAAY,WACZ,UAAWA,EAAM,QAAQ,CAAC,EAC1B,OAAQ,OACR,SAAU,OACV,QAAS,GAAGA,EAAM,QAAQ,GAAI,CAAC,IAAIA,EAAM,QAAQ,CAAC,CAAC,GACnD,MAAO,UAEP,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,MAAO,MACT,CACF,CAAC,CACH,CACF,C,sFCnEO,SAASiuK,GAAc,CAC5B,MAAMrsK,KAAS,MAAWuD,CAAS,EACnC,SAAO,OAAC,OAAI,UAAWvD,EAAO,QAAS,CACzC,CAEA,MAAMuD,EAAanF,IACV,CACL,WAAS,OAAI,CACX,OAAQ,EACR,gBAAiBA,EAAM,OAAO,OAAO,KACrC,OAAQA,EAAM,QAAQ,GAAK,CAAC,CAC9B,CAAC,CACH,E,mQCQK,MAAM+zM,EAA2B,CAAC,CACvC,SAAAvlJ,EACA,QAAA35C,EACA,SAAAm/L,EACA,SAAAv8M,EACA,SAAA4zF,EACA,iBAAA4oH,EACA,YAAA1oG,CACF,IAAqC,CACnC,MAAM3pG,KAAS,MAAWuD,CAAS,EAE7ByH,EAAOonM,GAAU,YAAYxlJ,EAAS,EAAE,EAExC0lJ,KAAc,SAAM,EAE1B,GAAI,CAACtnM,EACH,OAAO,KAGT,MAAMunM,GACJ,MAAM,QAAQ3lJ,EAAS,KAAK,GAC5BA,EAAS,KAAO,KAAoB,YACpCA,EAAS,KAAO,KAAoB,OACpCA,EAAS,KAAO,KAAoB,SAEhC4lJ,EAAgBxnM,EAAK,UAAU,OAAQtF,GAAMA,IAAMsF,EAAK,IAAI,EAClE,IAAIiZ,GAGJ,MAAMwuL,GACJ,CAACC,EAAqB,GAAMC,EAAiB,KAC7C,CAACx1I,EAAa,QACZ,QAACvxB,EAAA,EAAK,CAAC,eAAe,gBACpB,qBAAClhC,EAAA,GACC,SAAU8nM,EACV,YAAaE,EAAqB1nM,EAAK,YAAc,OACrD,QAASsnM,EAET,oBAAC,KACC,gBAAiBtnM,EAAK,KACtB,YAAa,CAAC2+F,CAAW,EACzB,mBAAoB,4BACtB,EACC,CAACxsC,GAAcw1I,GAAkB3nM,EAAK,kBACrC,OAACtC,EAAA,EAAO,CAAC,MAAOsC,EAAK,cAAc4hD,EAAS,KAAK,EAAG,GAExD,EACC,CAACylJ,MACA,OAAC,OACC,mBAAC5nK,EAAA,GACC,KAAK,QACL,QAASg/C,EACT,WAAS,KACP,6EACA,iBACF,EACF,EACF,GAEJ,EAIJ,OAAI8oH,GACFtuL,MACE,OAAC2uL,EAAA,GACC,GAAI5nM,EAAK,KACT,YAAaynM,GAAY,GAAO,EAAI,EACpC,aAAW,OAAI,CACb,YAAa,EACb,aAAc,CAChB,CAAC,EACD,SAAQ,GACR,cAAe7lJ,EAAS,QAAU,OAElC,mBAAC5hD,EAAK,SAAL,CACC,MAAO4hD,EAAS,MAChB,SAAW32D,GAAU,CACnBJ,EAASI,CAAK,CAChB,EACA,KAAA+U,EACA,QAAAiI,CAAA,CACF,EACF,EAGFgR,MACE,OAAC,OACC,mBAAC3c,EAAA,EAAK,CAAC,MAAOmrM,GAAY,EAAE,EAAG,YAAaznM,EAAK,YAC/C,mBAACA,EAAK,SAAL,CACC,MAAO4hD,EAAS,MAChB,SAAW32D,GAAU,CACnBJ,EAASI,CAAK,CAChB,EACA,KAAA+U,EACA,QAAAiI,EACA,GAAIq/L,CAAA,CACN,EACF,EACF,KAKF,OAAC,OACC,aAAW,MACTC,IAAiBvyM,EAAO,0BACxB,CAACuyM,IAAiB,0CACpB,EAEC,SAAAtuL,EAAA,CACH,CAEJ,EAEM1gB,EAAanF,IAA0B,CAC3C,6BAA2B,OAAI,CAC7B,MAAO,4BACP,gDAAiD,CAC/C,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CACF,CAAC,CACH,G,gDCrIO,MAAMy0M,EAAwB,CAAC,CACpC,WAAA11I,EACA,SAAAi1I,EACA,UAAAU,EACA,aAAAC,EACA,SAAA17K,EACA,iBAAA27K,CACF,IAAa,CACX,MAAMhzM,KAAS,MAAW,CAAS,EAG7BizM,EADa57K,EAAS,WAAW,IAAKuB,IAAMw5K,EAAS,YAAYx5K,GAAE,EAAE,CAAC,EAAE,OAAQsL,IAAS,CAAC,CAACA,EAAI,EACpE,IAAKtL,IAAMA,IAAG,IAAI,EAAE,KAAK,IAAI,EACxDs6K,EAAiBJ,EAAU,eAAez7K,EAAS,QAAQ,OAAO,EAExE,SACE,QAAC,OACC,qBAACuU,EAAA,EAAK,CAAC,eAAe,gBACpB,oBAAC,OAAK,SAAAmnK,CAAA,CAAa,KACnB,OAAC9tM,EAAA,IACC,QAAQ,YACR,KAAK,OACL,KAAK,YACL,QAAS+tM,EACT,WAAS,KAAE,4DAA6D,iBAAiB,EACzF,gBAAY,KAAE,+DAAgE,iBAAiB,EACjG,GACF,EACC,CAAC71I,MACA,OAAC,OAAI,UAAWn9D,EAAO,gBACrB,oBAAC,OAAI,UAAWA,EAAO,QAAS,MAAOkzM,EACpC,UAAAA,EAAe,OAAC,OAAC/zM,EAAA,EAAI,CAAC,KAAK,aAAc,GAAE,IAAE8zM,CAAA,EAChD,EACF,GAEJ,CAEJ,EAEAJ,EAAsB,YAAc,gBAEpC,MAAM,EAAaz0M,IACV,CACL,aAAW,OAAI,CACb,QAASA,EAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,yBAAuB,OAAI,CACzB,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,EACD,mBAAiB,OAAI,CACnB,SAAUA,EAAM,WAAW,UAAU,SACrC,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAYA,EAAM,WAAW,iBAC/B,CAAC,EACD,WAAS,OAAI,CACX,SAAU,SACV,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,gBAAc,OAAI,CAChB,aAAc,CAChB,CAAC,CACH,GChDK,SAAS+0M,EACdlrK,EACAmqK,EACAh4M,EACAuvG,EACAypG,EACiC,CACjC,MAAM9rG,EAA8C,CAAC,EAC/C+rG,EAAqBprK,EAE3B,GAAI,CAACmqK,GAAYA,EAAS,QAAQ,EAChC,MAAO,CAAC,EAGV,MAAMkB,EAAmB,CAACzrM,EAAewvB,KAAiC,CACxE,IAAI0O,MAAY,aAAUstK,EAAmB,SAAS,EACtDttK,GAAUl+B,CAAK,EAAIwvB,GACnB+7K,EAAqB,CAAE,GAAGC,EAAoB,UAAAttK,EAAU,CAAC,CAC3D,EAEMitK,EAAoBO,GAA0B,CAClD,IAAIxtK,MAAY,aAAUstK,EAAmB,SAAS,EACtDttK,GAAU,OAAOwtK,EAAe,CAAC,EACjCH,EAAqB,CAAE,GAAGC,EAAoB,UAAAttK,EAAU,CAAC,CAC3D,EAEMytK,EAAiBv9M,GAAmC,CACxD,MAAM68B,GAAO,KAAc,IAAI78B,EAAM,KAAM,EACtC68B,IAILsgL,EAAqB,CACnB,GAAGC,EACH,UAAW,CACT,GAAGA,EAAmB,UACtB,CAAE,QAAS,CAAE,GAAIvgL,GAAK,GAAI,QAASA,GAAK,cAAe,EAAG,WAAY,CAAC,CAAE,CAC3E,CACF,CAAC,CACH,EAEM7f,GAAU,CACd,KAAA7Y,EACA,eAAiBm9K,MAAqC,MAAgCn9K,EAAMm9K,CAAK,EACjG,WAAY,EACd,EAKA,QAASv1J,EAAM,EAAGA,EAAMqxL,EAAmB,UAAU,OAAQrxL,IAAO,CAClE,MAAMqV,GAAWg8K,EAAmB,UAAUrxL,CAAG,EAC3C+wL,MAAe,KAAE,wDAAyD,2BAA4B,CAC1G,YAAa/wL,EAAM,CACrB,CAAC,EACKyxL,EAAa,0BAA0BzxL,CAAG,GAC1C8wL,EAAYY,EAAA,EAAgB,IAAIr8K,GAAS,QAAQ,EAAE,EACnDs8K,EAA0BC,EAAsBxB,CAAQ,EACxDC,KAAmB,MAAsBh7K,EAAQ,EAEjDw8K,GAAYx8K,GAAS,WAAW,SAAW,EAE3CuO,GAAW,IAAIkuK,EAAA,EAA8B,CACjD,MAAOf,GACP,GAAIU,EACJ,UAAAI,GACA,YAAa,SAA6B12I,GAAqB,CAC7D,SACE,OAAC01I,EAAA,CACC,SAAAx7K,GACA,WAAA8lC,GACA,SAAAi1I,EACA,aAAAW,GACA,UAAAD,EACA,iBAAkB,IAAME,EAAiBhxL,CAAG,EAC9C,CAEJ,CACF,CAAC,EAEK+xL,GAAyBt6M,IAAqB,CAClD65M,EAAiBtxL,EAAK,CAAE,GAAGqV,GAAU,QAAS,CAAE,GAAGA,GAAS,QAAS,QAAA59B,EAAQ,CAAE,CAAC,CAClF,EAEMu6M,EAA0B,CAAC38K,GAA8BphC,KAAmC,CAChG,MAAMg+M,GAAe7B,EAAS,IAAIn8M,GAAM,KAAM,EACxCi+M,GAAqC,CAAE,GAAID,GAAa,GAAI,MAAOA,GAAa,YAAa,EAE7FjxB,GAAa3rJ,GAAS,YAAc,CAAC,EAC3C2rJ,GAAW,KAAKkxB,EAAc,EAE9BZ,EAAiBtxL,EAAK,CAAE,GAAGqV,GAAU,WAAA2rJ,EAAW,CAAC,CACnD,EAKMmxB,GAAS,GAAGV,CAAU,WAC5B7tK,GAAS,QACP,IAAIm6C,EAAA,EAA0B,CAC5B,GAAIo0H,GACJ,MAAOrB,EAAU,KACjB,OAAQ,UAA2B,CACjC,SACE,OAACA,EAAU,UAAV,CACC,GAAIqB,GACJ,QAASrB,EAAU,QACnB,KAAM14M,GAAQ,CAAC,EACf,QAASi9B,GAAS,QAAQ,QAC1B,SAAU08K,EAAA,CACZ,CAEJ,CACF,CAAC,CACH,EAKA,QAASK,GAAU,EAAGA,GAAU/8K,GAAS,WAAW,OAAQ+8K,KAAW,CACrE,MAAMxnJ,GAAWv1B,GAAS,WAAW+8K,EAAO,EAG5C,GAAI,CAF4BhC,EAAS,YAAYxlJ,GAAS,EAAE,EAG9D,SAGF,MAAMynJ,GAAoBp+M,IAA8B,CACtDq9M,EAAiBtxL,EAAK,CACpB,GAAGqV,GACH,WAAYA,GAAS,WAAW,IAAI,CAAC6M,GAAMnnC,KACrCA,KAAMq3M,GACD,CAAE,GAAGlwK,GAAM,MAAAjuC,EAAa,EAG1BiuC,EACR,CACH,CAAC,CACH,EAEMowK,GAAmB,IAAM,CAC7BhB,EAAiBtxL,EAAK,CAAE,GAAGqV,GAAU,WAAYA,GAAS,WAAW,OAAO,CAACj6B,GAAGL,KAAMA,KAAMq3M,EAAO,CAAE,CAAC,CACxG,EAEMD,GAAS,GAAGV,CAAU,aAAa7mJ,GAAS,EAAE,GAKpDhnB,GAAS,QACP,IAAIm6C,EAAA,EAA0B,CAC5B,UAAW,GACX,GAAIo0H,GACJ,OAAQ,UAAgC,CACtC,SACE,OAAChC,EAAA,CAEC,iBAAAE,EACA,SAAUgC,GACV,SAAUC,GACV,SAAA1nJ,GACA,SAAAwlJ,EACA,QAAAn/L,GACA,YAAA02F,CAAA,EAPKwqG,EAQP,CAEJ,CACF,CAAC,CACH,CACF,CAKI,CAAC9B,GAAoBh7K,GAAS,QAAQ,SACxCuO,GAAS,QACP,IAAIm6C,EAAA,EAA0B,CAC5B,UAAW,GACX,GAAI,GAAG0zH,CAAU,cACjB,OAAQ,UAAmC,CACzC,SACE,OAACz3I,EAAA,GAEC,SAAO,KACL,sEACA,uBACF,EACA,QAAQ,YACR,YAAa,GACb,KAAK,OACL,cAAc,OACd,QAAS23I,EACT,SAAWn4M,IAAMw4M,EAAwB38K,GAAU77B,EAAC,GAVhD,uBAWN,CAEJ,CACF,CAAC,CACH,EAGF8rG,EAAW,KAAK1hE,EAAQ,CAC1B,CAEA,OAAA0hE,EAAW,KACT,IAAIwsG,EAAA,EAA8B,CAChC,SAAO,KAAE,2DAA4D,YAAY,EACjF,GAAI,aACJ,aAAc,UAA2B,CACvC,SACE,OAACS,EAAA,CACC,mBAACv4I,EAAA,GACC,KAAK,OACL,SAAO,KAAE,mEAAoE,oBAAoB,EACjG,QAAQ,YACR,cAAc,OACd,YAAa,GACb,KAAK,KACL,QAAS03I,EAAA,EACN,KAAK,EACL,OAAQx9M,IAAM,CAACA,GAAE,iBAAiB,EAClC,IAA8B6G,KAAO,CAAE,MAAOA,GAAE,KAAM,MAAOA,GAAE,GAAI,YAAaA,GAAE,WAAY,EAAE,EACnG,SAAW9G,IAAUu9M,EAAcv9M,EAAK,EAC1C,GAb8B,cAchC,CAEJ,CACF,CAAC,CACH,EAEOqxG,CACT,CAEA,SAASssG,EAAsBxB,EAAsC,CACnE,OAAOA,EACJ,KAAK,EACL,OAAQl8M,GAAM,CAACA,EAAE,iBAAiB,EAClC,IAAK8U,GAAS,CACb,IAAIlL,EAAQkL,EAAK,KACjB,OAAIA,EAAK,WACPlL,EAAQ,CAAC,GAAGkL,EAAK,SAAUA,EAAK,IAAI,EAAE,KAAK,KAAK,GAE3C,CAAE,MAAAlL,EAAO,MAAOkL,EAAK,GAAI,YAAaA,EAAK,WAAY,CAChE,CAAC,CACL,CAEA,SAASupM,EAA2B,CAAE,SAAAl1M,CAAS,EAAkC,CAC/E,MAAMW,KAAS,MAAWw0M,CAAkB,EAC5C,SAAO,OAAC,OAAI,UAAWx0M,EAAS,SAAAX,CAAA,CAAS,CAC3C,CAEA,SAASm1M,EAAmBp2M,EAAsB,CAChD,SAAO,OAAI,CAAE,UAAW,aAAaA,EAAM,OAAO,OAAO,IAAI,GAAI,QAAS,GAAGA,EAAM,QAAQ,CAAC,CAAC,GAAI,QAAS,MAAO,CAAC,CACpH,C,sFC5PO,MAAM01M,CAA8B,CAKzC,YAAmB70M,EAA2C,CAA3C,WAAAA,EAJnB,WAAqC,CAAC,EACtC,gBAA8C,CAAC,CAGgB,CAE/D,QAAQ+L,EAAiC,CACvC,OAAAA,EAAK,OAAS,KACd,KAAK,MAAM,KAAKA,CAAI,EACb,IACT,CAEA,YAAY46B,EAAyC,CACnD,OAAAA,EAAS,MAAM,SAAW,GAC1BA,EAAS,OAAS,KAClB,KAAK,WAAW,KAAKA,CAAQ,EACtB,IACT,CAEA,YAAYv5B,EAA6C,CACvD,IAAIuqD,EAAM,KAAK,WAAW,KAAM,GAAM,EAAE,MAAM,KAAOvqD,CAAI,EACzD,OAAKuqD,IACHA,EAAM,IAAIk9I,EAA8B,CACtC,MAAOznM,EACP,GAAIA,CACN,CAAC,EACD,KAAK,YAAYuqD,CAAG,GAGfA,CACT,CAEA,OAAO+yC,EAAsB,CAC3B,OAAI,KAAK,MAAM,aACN,KAAK,MAAM,aAAa,EAG7B,KAAK,MAAM,QAAU,MAErB,OAAC,IAAG,CAAC,QAAS,EAAG,cAAe,EAC7B,cAAK,MAAM,IAAK3+F,GAASA,EAAK,OAAO2+F,CAAW,CAAC,GADZ,KAAK,MAAM,KAEnD,KAKF,QAAC,IAAmB,CAAyB,GAAG,KAAK,MAClD,eAAK,MAAM,IAAK3+F,GAASA,EAAK,OAAO2+F,CAAW,CAAC,EACjD,KAAK,WAAW,IAAK/jE,GAAaA,EAAS,OAAO+jE,CAAW,CAAC,IAFvC,KAAK,MAAM,KAGrC,CAEJ,CACF,C,4MCtEO,SAAS8qG,EAAWhuL,EAAsD,CAC/E,MAAMiuL,EAAiB,IAAIZ,EAAA,EAA8B,CACvD,SAAO,KAAE,gDAAiD,gBAAgB,EAC1E,GAAI,iBACJ,cAAe,EACjB,CAAC,EAAE,QACD,IAAI/zH,EAAA,EAA0B,CAC5B,SAAO,KAAE,yDAA0D,oBAAoB,EACvF,GAAI,+BACJ,eAAa,KACX,+DACA,2LACF,EACA,OAAS96C,MAAe,OAAC0vK,EAAA,CAAe,GAAI1vK,EAAW,MAAM,GAAI,KAAMxe,CAAA,CAAO,CAChF,CAAC,CACH,EAEMmuL,KAA+BC,EAAA,GAA8BpuL,EAAM,MAAM,oBAAoB,EAEnG,MAAO,CAACiuL,EAAgBE,CAA4B,CACtD,CAEA,SAASD,EAAe,CAAE,KAAA3pM,EAAM,GAAAsY,CAAG,EAAwC,CACzE,KAAM,CAAE,aAAA+I,CAAa,EAAIrhB,EAAK,SAAS,EAEvC,SACE,OAAC+4I,EAAA,GACC,GAAAzgI,EACA,aAActY,EACd,OAAQqhB,EACR,SAAWp2B,GAAmB,CAC5B,KAAqB,KAAK,CACxB,eAAa,KAAE,+CAAgD,iBAAiB,EAChF,OAAQ+U,EACR,QAAS,IAAMA,EAAK,oBAAoB/U,CAAK,EAC7C,KAAM,IAAM+U,EAAK,oBAAoBqhB,CAAY,CACnD,CAAC,CACH,EACF,CAEJ,C,sECnCO,SAASyoL,EAAqB,CAAE,MAAAruL,CAAM,EAAsC,CACjF,KAAM,CAAE,KAAA0c,EAAM,eAAA4xK,EAAiB,CAAC,EAAG,IAAAp3L,CAAI,EAAI8I,EAAM,SAAS,EACpD,CAAE,YAAAuuL,CAAY,EAAIvuL,EAAM,cAAc,EAAE,SAAS,EACjD,CAAE,UAAAgF,EAAW,QAAAulC,CAAQ,KAAI,MAAkBvqC,CAAK,EAChD,CAACwuL,EAAuBC,EAA2BC,EAA6BC,CAAY,KAChGC,EAAA,GAAyB5uL,CAAK,EAC1BzmB,KAAS,MAAWuD,CAAS,EAC7BimG,KAAmB,MAAoB,EACvCt9E,KAAS,WAAQ,OAAM,MAAU8kC,CAAO,EAAG,CAACA,CAAO,CAAC,EAEpDskJ,KAAU,WACd,OAEE,QACE,CAAC,CACC,KAAAtqM,GACA,gBAAAuqM,GACA,UAAAC,EACA,WAAAC,EACA,SAAAC,EAAW,EACb,IAOET,GAAyB,CAACxpL,GAAa,CAAC2pL,EAAe,QACrD,QAAC,OACE,GAAIG,GACD,CAAE,IAAK9uL,EAAM,aAAe,kCAAoCgvL,EAAa93L,EAAM,MAAU,EAC7F,CAAC,EACL,aAAW,MAAGs3L,GAAyB,CAACxpL,GAAazrB,EAAO,MAAM,EAEjE,UAAAw1M,MAAa,OAAC,OAAI,UAAWx1M,EAAO,mBAAoB,EAGvDksB,IAAW,CAAC+oL,GAAyB,CAACG,MACpC,QAAC,MAEC,aAAW,MACTF,EACAl1M,EAAO,QACPw1M,GAAa,CAACE,GAAY11M,EAAO,eACjCw1M,GAAaE,GAAY11M,EAAO,oBAClC,EAEA,oBAACgL,GAAK,UAAL,CAAe,MAAOA,EAAA,CAAM,EAC5BmqM,CAAA,GATInqM,GAAK,MAAM,GAUlB,KAEA,QAAC,OACC,aAAW,MACTkqM,EACAl1M,EAAO,QACPw1M,GAAa,CAACE,GAAY11M,EAAO,eACjCw1M,GAAaE,GAAY11M,EAAO,oBAClC,EAEA,oBAACgL,GAAK,UAAL,CAAe,MAAOA,EAAA,CAAM,EAC5BmqM,CAAA,EACH,GAGN,CAEN,EACF,CACED,EACAC,EACAjpL,EACAvO,EACA8I,EAAM,aACNzmB,EACAi1M,EACAxpL,EACA2pL,CACF,CACF,EAEA,GAAI5rG,EACF,SAAO,MAAyBA,EAAkB,CAACrmE,EAAM,GAAG4xK,CAAc,CAAC,EAG7E,MAAMU,GAAa,CAAC,CAACT,EACfQ,EAAYR,IAAgBr3L,EAElC,SACE,oBACE,oBAAC23L,EAAA,CAAQ,KAAMnyK,EAAM,gBAAiB,GAA4B,UAAAqyK,EAAsB,WAAAC,EAAA,EAAvCtyK,EAAK,MAAM,GAAoD,EAC/G4xK,EAAe,IAAK/pM,OACnB,OAACsqM,EAAA,CACC,KAAAtqM,GACA,gBAAiB,GAEjB,UAAAwqM,EACA,WAAAC,GACA,SAAU,IAHLzqM,GAAK,MAAM,GAIlB,CACD,GACH,CAEJ,CAEA,MAAMzH,EAAanF,IAA0B,CAC3C,WAAS,OAAI,CAAE,MAAO,OAAQ,OAAQ,OAAQ,SAAU,UAAW,CAAC,EACpE,kBAAgB,OAAI,CAClB,SAAU,WACV,OAAQ,IACR,IAAK,OAAO,IAAgB,IAC5B,KAAM,OAAO,IAAiB,IAC9B,MAAO,OAAO,IAAkB,IAChC,OAAQ,OAAO,IAAmB,IAClC,QAAS,EACX,CAAC,EACD,wBAAsB,OAAI,CACxB,WAAY,QACd,CAAC,EACD,sBAAoB,OAAI,CACtB,MAAO,OACP,OAAQ,OACR,UAAW,OAAOA,EAAM,QAAQ,EAAG,CAAC,IAAIA,EAAM,OAAO,QAAQ,MAAM,GACnE,WAAY,GAAGA,EAAM,OAAO,QAAQ,WAAW,GAC/C,OAAQ,EACV,CAAC,EACD,UAAQ,OAAI,CACV,QAAS,MACX,CAAC,CACH,G,eC5GO,MAAMkuB,UAAqB,IAAkE,CAY3F,YAAY5T,EAA0B,CAC3C,MAAM,CAAE,GAAGA,EAAO,qBAAsBA,GAAO,sBAAwBmpB,EAAA,EAA0B,YAAY,CAAE,CAAC,EAVlH,KAAU,oBAAsB,IAAI,KAAyB,KAAM,CACjE,cAAe,KAAK,MAAM,aAAe,CAAC,KAAK,MAAM,YAAY,EAAI,CAAC,EACtE,0BAA2B,IAAM,KAAK,cAAc,CACtD,CAAC,EAED,KAAgB,sBAAwB,GACxC,KAAO,aAAe,YAAgC,EAKpD,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CAdA,YAAc,UAAYizK,CAAA,CAgBlB,oBAAqB,CACvB,KAAK,MAAM,cACb,KAAK,cAAc,EAGrB,KAAK,MAAM,IAAI,KAAK,iBAAiB,KAA4B,IAAM,KAAK,iBAAiB,CAAC,CAAC,EAE/F,MAAMa,EAAa,KAAK,MAAM,sBAAsB,SAAS,EAE7D,MAAO,IAAM,CACPA,GACFA,EAAW,CAEf,CACF,CAEO,YAA8C,CACnD,OAAOlB,EAAW,IAAI,CACxB,CAEO,eAAetxK,EAAsB,CAC1C,KAAK,SAAS,CAAE,KAAAA,CAAK,CAAC,CACxB,CAEO,eAAgB,CACrB,GAAI,CAAC,KAAK,MAAM,cAAgB,KAAW,oCAAoC,IAAI,EACjF,OAGF,MAAMnpC,EACJ,KAAW,eAAe,KAAK,MAAM,aAAc,IAAI,GACvD,IAAI,KAAe,CACjB,KAAM,mCACN,QAAS,CAAC,EACV,MAAO,GACP,KAAM,GACN,MAAO,GACT,CAAC,EAEH,GAAI,EAAEA,aAAoB,MAAqB,CAC7C,QAAQ,MAAM,yDAAyD,EACvE,MACF,CAEA,KAAM,CAAE,OAAAsC,EAAQ,MAAAs5M,CAAM,KAAI,MAAuB57M,CAAQ,EAEzD,MAAI,WAAQ,KAAK,kBAAmBsC,CAAM,EACxC,OAGF,MAAMu5M,EAAgB,KAAK,MAAM,KAC3Bd,EAA6B,CAAC,EAI9Be,EAAiC,CACrC,OAAQ,CAAC,EAAE,EACX,MAAO97M,EAAS,YAAY,EAAI,CAAC,KAAK,EAAI,CAAC,MAAM,CACnD,EAEM+7M,EAAiBz5M,EAAO,OAASA,EAASw5M,EAA+B,OACzEE,EAAgBJ,EAAM,OAASA,EAAQE,EAA+B,MAG5E,QAASjuM,EAAQ,EAAGA,EAAQkuM,EAAe,OAAQluM,IAAS,CAE1D,MAAMsjB,EADWtjB,IAAU,EAEvBguM,EACAA,EAAc,MAAM,CAClB,OAAK,MAAYA,EAAc,MAAM,IAAMhuM,CAAK,EAChD,gBAAiBguM,EAAc,MAAM,GACvC,CAAC,EAEL1qL,EAAM,SAAS,CAAE,cAAY,MAAyBnxB,EAAU+7M,EAAeluM,CAAK,EAAGmuM,EAAcnuM,CAAK,CAAC,CAAE,CAAC,EAE1GA,EAAQ,GACVktM,EAAe,KAAK5pL,CAAK,CAE7B,CAEA,KAAK,SAAS,CAAE,eAAA4pL,CAAe,CAAC,EAChC,KAAK,kBAAoBz4M,CAC3B,CAEO,eAAgB,CACrB,OAAQ,KAAK,MAAM,gBAAgB,QAAU,GAAK,CACpD,CAEO,oBAAoB+vB,EAAkC,CAC3D,MAAM+8C,EAA0C,CAAE,aAAA/8C,CAAa,EAE1DA,IACH+8C,EAAY,eAAiB,QAG3B,KAAK,MAAM,KAAK,MAAM,YACxB,KAAK,MAAM,KAAK,SAAS,CAAE,WAAY,MAAU,CAAC,EAGpD,KAAK,oBAAoB,iBAAiB/8C,EAAe,CAACA,CAAY,EAAI,CAAC,CAAC,EAE5E,KAAK,SAAS+8C,CAAW,EACzB,KAAK,cAAc,CACrB,CAEO,eAAgC,CACrC,GAAI,EAAE,KAAK,kBAAkBoY,EAAA,GAC3B,MAAM,IAAI,MAAM,gCAAgC,EAGlD,OAAO,KAAK,MACd,CAEO,gBAA+E,CACpF,MAAM5/D,EAAO,KAAK,aAAa,QAAS,sBAAsB,EAE9D,MAAO,CACL,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,IAAK,KAAK,aAAa,QAAS,UAChC,KAAM,KAAK,aAAa,QAAS,UACnC,CACF,CAEO,kBAAmB,CACxB,KAAK,kBAAoB,OAEzB,KAAK,cAAc,CACrB,CAEO,gBAAiB,IACtBq0L,EAAA,GAA4B,KAAM,KAAK,YAAY,CACrD,CACF,C,oIC/KO,SAASpmE,EAAQrrG,EAAiB0xK,EAAuB,CAC1D,IAAO,uBAAuB,SAChC,IAAK,IAAI,QAAQ,CAAC1xK,CAAO,EAAG,CAC1B,MAAO,KAAS,KAChB,QAAS0xK,CACX,CAAC,CAEL,CAOO,SAASvmE,EAAWnrG,EAAiB0xK,EAAuB,CAC7D,IAAO,uBAAuB,SAChC,IAAK,IAAI,QAAQ,CAAC1xK,CAAO,EAAG,CAC1B,MAAO,KAAS,KAChB,QAAS0xK,CACX,CAAC,CAEL,CAOO,SAASC,EAAS3xK,EAAiB0xK,EAAuB,CAC3D,IAAO,uBAAuB,SAChC,IAAK,IAAI,QAAQ,CAAC1xK,CAAO,EAAG,CAC1B,MAAO,KAAS,MAChB,QAAS0xK,CACX,CAAC,CAEL,CAOO,SAAStmE,EAAS78H,EAAYmjM,EAAuB,CACtD,IAAO,uBAAuB,SAChC,IAAK,IAAI,UAAUnjM,EAAK,CACtB,QAASmjM,CACX,CAAC,CAEL,CAQO,SAASE,EAAergN,EAAcuG,EAA2B2W,EAAsB,CACxF,IAAO,uBAAuB,SAChC,IAAK,IAAI,gBACP,CACE,KAAAld,EACA,OAAAuG,CACF,EACA,CAAE,QAAA2W,CAAiB,CACrB,CAEJ,CAwBO,SAASojM,EAAuB18M,EAAgB28M,EAA+C,CACpG,MAAMC,EAAqBL,IAA2B,CACpD,OAAAv8M,EACA,GAAG28M,EACH,GAAGJ,CACL,GAEA,MAAO,CAML,SAAU,CAAC1xK,EAAiB0xK,IAA0BC,EAAS3xK,EAAS+xK,EAAkBL,CAAQ,CAAC,EAOnG,QAAS,CAAC1xK,EAAiB0xK,IAA0BrmE,EAAQrrG,EAAS+xK,EAAkBL,CAAQ,CAAC,EAOjG,WAAY,CAAC1xK,EAAiB0xK,IAA0BvmE,EAAWnrG,EAAS+xK,EAAkBL,CAAQ,CAAC,EAOvG,SAAU,CAACvvM,EAAcuvM,IAA0BtmE,EAASjpI,EAAO4vM,EAAkBL,CAAQ,CAAC,EAO9F,eAAgB,CAACngN,EAAcygN,EAAgCN,IAC7DE,EAAergN,EAAMygN,EAAaD,EAAkBL,CAAQ,CAAC,CACjE,CACF,C,sFCpIO,SAASO,EAAe,CAAE,kBAAAn3C,CAAkB,EAA4B,CAC7E,MAAMo3C,EAAY,eAAuBp3C,EAAkB,IAAI,EACzDq3C,EAAYr3C,EAAkB,IAAM,EACpCs3C,EAAU,CAACD,GAAaA,GAAa,EACrCE,EAAUD,EAAU,MAAQ,eAAuBD,CAAS,EAElE,OAAIC,KAEA,QAAC,KAAK,CAAC,QAAQ,0CAA0C,OAAQ,CAAE,KAAMF,CAAU,EACjF,oBAAC,QAAM,oBAAW,EAAO,WAC3B,KAKF,QAAC,KAAK,CAAC,QAAQ,kDAAkD,OAAQ,CAAE,KAAMA,EAAW,GAAIG,CAAQ,EACtG,oBAAC,QAAM,oBAAW,EAAO,UAAI,OAAC,QAAM,kBAAS,GAC/C,CAEJ,C,+FCfO,MAAMC,EAAkB,CAAIzqM,EAActE,KACxC,CACL,KAAAsE,EACA,QAAAtE,CACF,GAGWgvM,EAA8BC,GAClCA,EAAU,QAENC,EAAyB,CAAID,EAAyBhe,IAC1Dge,EAAU,QAAQhe,CAAM,EAGpBke,EAAwB,CAAIF,EAAyBhe,EAAgB/yK,IACzE+wL,EAAU,QAAQhe,CAAM,EAAE,OAAO/yK,CAAG,EAGhCkxL,EAA4B,CAAIH,EAAyBhe,EAAgB/yK,IAC7E+wL,EAAU,QAAQ,IAAKtxM,GAAMA,EAAE,OAAOugB,CAAG,CAAC,EAGtCmxL,EAAqB,CAAIzpM,EAA2BtB,IAAiBsB,EAAWtB,CAAI,C,yDCrC1F,MAAMgrM,EAAgB,cAEhBC,EAAS,CACpB,KAAM,IAAID,CAAa,GAGvB,YAAa,IAAIA,CAAa,eAC9B,eAAgB,IAAIA,CAAa,mBACjC,gBAAiB,IAAIA,CAAa,yBAClC,sBAAuB,IAAIA,CAAa,oCAGxC,iBAAkB,IAAIA,CAAa,sBACnC,mBAAoB,IAAIA,CAAa,mBAGrC,oBAAqB,IAAIA,CAAa,gBACtC,wBAAyB,IAAIA,CAAa,mBAC5C,C,iNC6CA,SAASE,EACP3+K,EACsC,CACtC,MAAO,GAAQA,EAAE,cAAc,MAAQA,EAAE,cAAc,IACzD,CAqBO,eAAe4+K,EAAiB9qL,EAA2B,CAKhEA,EAAU,eAAe,EAEzB,MAAM8vE,EAAY9vE,EAAU,qBAAqB,EACjD8vE,EAAU,GAAK,KAGf9vE,EAAU,eAAe,EAEzB,MAAM2nG,EAAkB,CAAC,EACnBojF,EAAqB,CAAC,EACtBnjD,EAA2B,CAAC,EAC5BojD,EAAyC,CAAC,EAC1CzX,EAAmD,IAAI,IAE7D,UAAWjmM,KAAYwiG,EAAU,aAAa,EAC5Ck7G,EAAe19M,EAAS,IAAI,EAAIA,EAGlC,MAAM29M,EAA0D,CAAC,EAE3DC,EAA6B,CAAC3nL,EAAU41B,IAA6B,CACzE,GAAI51B,EAAI,aAAe,OAAW,CAChCA,EAAI,WAAa41B,EACjB,MACF,CAEA,IAAI7gC,EAAaiL,EAAI,WACjB4nL,EAA0B,KAE9B,MAAMxoH,EAAoCrqE,GAAY,IAChDqC,EAAQgoE,MAAiB,MAAkBA,CAAa,EAC9D,IAAIyoH,EAEJ,OAAIzwL,IACFywL,EAAUzwL,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,EACzCwwL,EAAqBH,EAAeI,CAAO,EACvCD,GAAsBA,EAAmB,UAC3C7yL,EAAa6yL,EAAmB,QAAQ,WAIrC,KAAiB,EACrB,IAAI7yL,CAAU,EACd,KAAMmnC,GAAO,CACZ,GAAIA,EAAG,MAAM,QACX,OAIFsrJ,EAAS,aAAetrJ,EAAG,MAAM,EAAE,EAAI,CACrC,KAAM,aACN,GAAIA,EAAG,KAAK,GACZ,KAAMA,EAAG,KAAK,KACd,QAASA,EAAG,KAAK,KAAK,SAAW,OACnC,EAEA,MAAMohB,EAAet9C,EAAI,aACnB8nL,EAAuBxqI,EAAe,qBAAuB,GACnE,IAAIyqI,EAAU,MAAQ7rJ,EAAG,KAAK,QAAQ,IAAK,GAAG,EAAE,YAAY,EAAI4rJ,EAAmB,YAAY,EAC/F,MAAME,EAAe,KAAOD,EAAU,IAYtC,GAVA1jD,EAAY0jD,CAAO,EAAI,CACrB,KAAMA,EACN,MAAO7rJ,EAAG,KACV,YAAa,GACb,KAAM,aACN,SAAUA,EAAG,MAAM,GACnB,WAAYA,EAAG,MAAM,KACrB,MAAOmoG,EAAY0jD,CAAO,GAAG,KAC/B,EAEMzqI,EAAc,CAClB,MAAM2qI,GAAY5jD,EAAY0jD,CAAO,GAAG,OAAO,eAAiB,CAAC,EACjEE,GAAU,KAAK,CAAE,KAAM3qI,EAAa,KAAM,IAAKA,EAAa,GAAI,CAAC,EAEjE+mF,EAAY0jD,CAAO,EAAE,MAAQ,CAC3B,cAAeE,EACjB,CACF,CAIA,GAAIL,GAAsBC,EAAS,CACjCH,EAA6BG,CAAO,EAAI,KAAOE,EAAU,IACzD,MACF,CAEA/nL,EAAI,WAAa,CAAE,KAAMk8B,EAAG,KAAK,GAAI,IAAK8rJ,CAAa,CACzD,CAAC,CACL,EAEME,EAAe,MAAO7+M,GAAsB,CAChD,GAAIA,EAAM,OAAS,MAAO,CAGxB,GAFA,MAAMs+M,EAA2Bt+M,CAAK,EAElCA,EAAM,QACR,UAAWq+B,KAAUr+B,EAAM,QACzB,MAAMs+M,EAA2BjgL,EAAQr+B,EAAM,UAAW,EAI9D,MAAM8+M,EAA4B,KAAO,OAAO9+M,EAAM,IAAI,EACtD8+M,IACFX,EAAS,QAAUW,EAAS,EAAE,EAAI,CAChC,KAAM,QACN,GAAIA,EAAS,GACb,KAAMA,EAAS,KACf,QAASA,EAAS,KAAK,OACzB,EAEJ,CACF,EAEMC,EAAuB,MAAO/+M,GAAsB,CACxD,MAAI,KAAyBA,CAAK,EAAG,CACnC,KAAM,CAAE,KAAA+S,EAAM,IAAA6nC,CAAI,EAAI56C,EAAM,aAC5B,IAAImtB,EAAQntB,EAAM,aAAa,MAC1BmtB,IAEHA,GADiB,QAAM,MAAgBytB,EAAK,EAAI,GAC/B,OAGnB,MAAM0jK,EAA2BnxL,CAAK,EAEtC,KAAM,CAAE,QAAA8kC,EAAS,GAAAjoC,EAAI,GAAGxe,CAAK,EAAI2hB,EAC5Bw5K,EAAc,IAAI/rJ,CAAG,GACxB+rJ,EAAc,IAAI/rJ,EAAK,CAAE,KAAA7nC,EAAM,IAAA6nC,EAAK,KAAM,IAAmB,MAAO,MAAOpvC,CAAK,CAAC,CAErF,CACF,EAEA,GAAI,CAEF,UAAWxL,KAASkjG,EAAU,OAI5B,GAHA,MAAM27G,EAAa7+M,CAAK,EAGpBA,EAAM,YAAc,QAAaA,EAAM,YAAc,IAAQA,EAAM,OACrE,UAAWyxD,KAAYzxD,EAAM,OAC3B,MAAM6+M,EAAaptJ,CAAQ,EAMjC,UAAW/wD,KAAYwiG,EAAU,aAAa,EAC5C,GAAIxiG,EAAS,OAAS,QACpB,MAAM49M,EAA2B59M,CAAQ,EACzCA,EAAS,QAAU,CAAC,EACpBA,EAAS,QAAU,CAAC,EACpBA,EAAS,QACPA,EAAS,UAAY,KAAgB,MAAQA,EAAS,QAAU,KAAgB,wBACzEA,EAAS,OAAS,aAAc,CACzC,MAAMs+M,EAAkBX,EAA6B39M,EAAS,IAAI,EAC9Ds+M,EACFt+M,EAAS,QAAU,CACjB,KAAM,GACN,MAAOs+M,EACP,SAAU,EACZ,EAEAt+M,EAAS,QAAU,CAAC,CAExB,MAAWA,EAAS,OAAS,SAC3B,MAAM49M,EAA2B59M,CAAQ,EAK7C,UAAWu+M,KAAiB/7G,EAAU,YAAY,KAChD,MAAMo7G,EAA2BW,CAAa,EAIhDd,EAAS,QAAa,CACpB,KAAM,UACN,GAAI,UACJ,KAAM,UACN,QAAS,KAAO,UAAU,OAC5B,EAIA,UAAWn+M,KAASkjG,EAAU,OAE5B,GADA,MAAM67G,EAAqB/+M,CAAK,EAC5BA,EAAM,YAAc,QAAaA,EAAM,YAAc,IAAQA,EAAM,OACrE,UAAWyxD,KAAYzxD,EAAM,OAC3B,MAAM++M,EAAqBttJ,CAAQ,KAKzC,QAAKupG,EAAcr+J,GAAe,CAChCo+H,EAAO,KAAKp+H,CAAK,CACnB,CAAC,EAGD,UAAW+D,KAAYwiG,EAAU,aAAa,EAC5C,MAAI,MAAWxiG,CAAQ,EAAG,CACxB,MAAMg+M,EAAU,OAASh+M,EAAS,KAAK,QAAQ,IAAK,GAAG,EAAE,YAAY,EACrEq6H,EAAO,KAAK,CACV,KAAM2jF,EACN,KAAM,WACN,MAAOh+M,EAAS,OAASA,EAAS,KAClC,MAAOA,EAAS,MAChB,YAAa,EACf,CAAC,EAEDA,EAAS,MAAQ,KAAOg+M,EAAU,IAClCh+M,EAAS,QAAU,CACjB,MAAOA,EAAS,MAChB,KAAMA,EAAS,MACf,SAAU,EACZ,EACAA,EAAS,QAAU,CAACA,EAAS,OAAO,CACtC,CAGF,MAAMw+M,EAAa,CAAC,GAAGvY,EAAc,QAAQ,CAAC,EAAE,OAC9C,CAAClhM,EAAM,CAAC05M,EAAQC,CAAW,KACzB35M,EAAK05M,CAAM,EAAIC,EACR35M,GAET,CAAC,CACH,EAGM45M,KAAwB,YAC5B,CACE,SAAUtkF,EACV,WAAAmkF,EACA,cAAY,UAAOf,EAAU,CAAC,IAAI,CAAC,CACrC,EACAj7G,CACF,EAGA,QAASz/F,EAAI,EAAGA,EAAI47M,EAAO,OAAO,OAAQ57M,IAAK,CAC7C,MAAM+qE,EAAW6wI,EAAO,OAAO57M,CAAC,EAC5Bw6M,EAAyBzvI,CAAQ,IACnC6wI,EAAO,OAAO57M,CAAC,EAAI,CACjB,QAAS+qE,EAAS,QAClB,GAAIA,EAAS,GACb,aAAc,CAAE,IAAKA,EAAS,aAAa,IAAK,KAAMA,EAAS,aAAa,IAAK,CACnF,EAEJ,CAEA,OAAO6wI,CACT,OAAS5lM,EAAK,CACZ,eAAQ,MAAM,iBAAkBA,CAAG,EAC5B,CACL,MAAOA,CACT,CACF,CACF,CAKA,eAAe6lM,EAAiCC,EAA2D,CACzG,KAAM,CAAE,aAAAtrI,EAAc,GAAAjqD,EAAI,MAAA5lB,CAAM,EAAIm7M,EAAoB,KAExD,GAAI,CAGF,MAAM97F,GADmB,QAAM,MAAgBxvC,EAAa,IAAK,EAAI,GAC1B,MACrCurI,KAAc,MAAe/7F,CAAU,EAE7C,OAAA+7F,EAAY,KAAK,GAAKx1L,EACfw1L,CACT,OAASnyM,EAAO,CACd,QAAQ,MAAM,gCAAgC4mE,EAAa,GAAG,IAAK5mE,CAAK,EAExE,MAAM+9C,EAAe/9C,aAAiB,MAAQA,EAAM,QAAU,gBAC9D,kBACE,SACE,MACE,iCAAiC4mE,EAAa,IAAI,MAAM7oB,CAAY,kDACtE,CACF,CACF,EAGO,CACL,KAAM,QACN,KAAM,CACJ,GAAAphC,EACA,MAAO5lB,GAAS,kBAAkB6vE,EAAa,IAAI,GACnD,YAAa,GACb,MAAO,CAAC,EACR,KAAM,CACJ,KAAM,aACN,KAAM,CACJ,QAAS,CAAC,EACV,gBAAiB,CAAC,EAClB,aAAc,CAAC,CACjB,CACF,EACA,UAAW,CACT,KAAM,YACN,MAAO,OACP,QAAS,GACT,KAAM,CACJ,QAAS,CACP,QAAS;AAAA;AAAA,gCAAiEA,EAAa,IAAI,KAAKA,EAAa,GAAG;AAAA;AAAA,SAAe5mE,aAAiB,MAAQA,EAAM,QAAU,eAAe,GACvL,KAAM,UACR,EACA,YAAa,CAAE,SAAU,CAAC,EAAG,UAAW,CAAC,CAAE,CAC7C,CACF,CACF,CACF,CACF,CACF,CAEO,eAAeoyM,EAAiBrsL,EAA4BssL,EAAsB,GAAO,CAC9F,MAAMtB,EAAyC,CAAC,EAG1CuB,EAAsBvsL,EAAU,UAAU,OAAQlxB,GAAMA,EAAE,OAAS,oBAAoB,EAE7F,UAAWxB,KAAY0yB,EAAU,UAC/BgrL,EAAe19M,EAAS,KAAK,IAAI,EAAIA,EAAS,KAGhD,MAAMk/M,EACJjpL,GACG,CACH,MAAMo/D,EAAgBp/D,EAAI,OAAO,YAAY,KAE7C,GAAIo/D,GAAe,WAAW,IAAI,GAAKA,GAAe,SAAS,GAAG,EAAG,CACnE,MAAMyoH,EAAUzoH,EAAc,MAAM,EAAG,EAAE,EAGzC,GADc4pH,EAAoB,KAAMz9M,GAAMA,EAAE,KAAK,OAASs8M,CAAO,EAEnE,MAEJ,CAEA7nL,EAAI,QAAUA,EAAI,MAAM,WAAa,OACvC,EAEMkoL,EAAgB7+M,GAAqB,CACzC,GAAIA,EAAM,KAAK,KAAK,KAAK,QACvB,UAAW+0B,KAAS/0B,EAAM,KAAK,KAAK,KAAK,QACvC4/M,EAAqB7qL,EAAM,IAAI,CAGrC,EAEA,GAAI,CACF,MAAM0iC,EAAWrkC,EAAU,SAG3B,SAAW,CAAC/O,EAAK03D,CAAO,IAAK,OAAO,QAAQtkB,CAAQ,EAClD,GAAIskB,EAAQ,OAAS,QACnB8iI,EAAa9iI,CAAO,UACXA,EAAQ,OAAS,gBACtB2jI,EAAqB,CAEvB,MAAMF,EAAc,MAAMF,EAAiCvjI,CAAO,EAElE8iI,EAAaW,CAAW,EAExB/nJ,EAASpzC,CAAG,EAAIm7L,CAClB,CAMJ,UAAW9+M,KAAY0yB,EAAU,UAC3B1yB,EAAS,OAAS,iBACpBk/M,EAAqBl/M,EAAS,IAAI,EAClCA,EAAS,KAAK,QAAU,CAAC,EACzBA,EAAS,KAAK,QAAU,CACtB,KAAM,GACN,MAAO,EACT,GACSA,EAAS,OAAS,uBAC3BA,EAAS,KAAK,QAAU,CACtB,KAAM,GACN,MAAO,EACT,GAKJ,UAAW2qB,KAAc+H,EAAU,YACjCwsL,EAAqBv0L,EAAW,IAAI,EAGtC,OAAO+H,CACT,OAAS3Z,EAAK,CACZ,eAAQ,MAAM,iBAAkBA,CAAG,EAC5B,CACL,MAAOA,CACT,CACF,CACF,C,iDC9eO,IAAKomM,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QACRA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,KAAO,OAPGA,IAAAA,GAAA,G,gECQL,MAAMC,EAAe,I,qJCGrB,MAAMC,EAAY,GAElB,eAAeC,EACpBC,EACAC,EACAhsL,EAAO,EACP0xK,EAAWma,EACmB,CAC9B,MAAMxoC,KAAa,MAAc,EAGjC,IAAIuvB,EAA6B,CAAC,EAClC,OAAI,KAAW,cAAc,IAAoB,WAAW,IAC1DA,EAAU,MAAMvvB,EAAW,IAAuB,eAAgB,CAChE,UAAW0oC,EACX,KAAA/rL,EACA,MAAO0xK,CACT,CAAC,GAGIkB,EAAQ,IAAKp1L,IAAU,CAC5B,KAAM,SACN,IAAKA,EAAK,IACV,MAAOA,EAAK,MACZ,YAAAwuM,EACA,UAAAD,EACA,UAAWvuM,EAAK,UAGhB,OAAK,MAAeA,EAAK,GAAG,EAAI,UAAY,MAAaA,EAAK,GAAG,CACnE,EAAE,CACJ,CAEO,eAAeyuM,EAAeF,EAAoB/rL,EAAO,EAAG0xK,EAAWma,EAAyC,CAGrH,MAAMK,EAAoB,QAFT,KAAmB,EAEK,OAAO,CAC9C,KAAM,CAAC,WAAW,EAClB,MAAO,IACP,SAAUH,GAAa,UACvB,MAAO/rL,EAAO,GAAK0xK,EACnB,MAAOA,EACP,QAAS1xK,EAAO,GAAK0xK,CACvB,CAAC,EAED,OAAOwa,EAAkB,KAAK,IAAK1uM,GAAS,CAC1C,MAAM2uM,KAAW,MAAsB3uM,EAAM0uM,EAAkB,IAAI,EAInE,OAAIC,EAAS,YAAc,OACzBA,EAAS,UAAY,QAGhBA,CACT,CAAC,CACH,C,mKCpDO,SAASC,EAAQ,CAAE,OAAAC,EAAQ,eAAAC,CAAe,EAAiB,CAEhE,KAAM,CAAC18M,EAAG+sC,CAAe,KAAI,KAAmB,EAC1CnqC,KAAS,MAAWuD,CAAS,EAE7Bw2M,EAAeF,GAAmB,CACtC1vK,EAAgB0vK,CAAM,KACtB,MAAkB,6BAA8B,CAC9C,WAAYC,CACd,CAAC,CACH,EAEMl3D,KACJ,QAAC,OAAI,UAAW5iJ,EAAO,aACrB,oBAAC,QAAK,UAAWA,EAAO,MACtB,mBAAC,KAAK,CAAC,QAAQ,uDAAuD,mBAAO,EAC/E,KACA,OAAC,KACC,WAAS,KAAE,yEAA0E,mBAAmB,EACxG,QAAS,IAAM+5M,EAAYF,CAAM,EACjC,KAAK,OACP,GACF,EAGF,SACE,OAAC,IAAK,CAAC,MAAOj3D,EAAc,UAAW5iJ,EAAO,KAC5C,mBAAC,KACC,SAAS,MACT,OAAQ,GACR,SAAO,KAAU65M,CAAM,EACvB,cAAe,CAAE,UAAW,CAAE,SAAU,QAAS,EAAG,qBAAsB,EAAM,EAChF,SAAU,GACV,YAAa,GACf,EACF,CAEJ,CAEA,SAASt2M,EAAUnF,EAAsB,CACvC,MAAO,CACL,QAAM,OAAI,CAAE,SAAU,CAAE,CAAC,EACzB,SAAO,OAAI,CAAE,SAAU,GAAI,WAAYA,EAAM,WAAW,gBAAiB,CAAC,EAC1E,gBAAc,OAAI,CAAE,QAAS,OAAQ,eAAgB,gBAAiB,cAAeA,EAAM,QAAQ,EAAG,CAAE,CAAC,CAC3G,CACF,C,yICxDO,MAAM47M,EAAgC,CAC3C,MAAO,CAAC,EACR,KAAM,EACN,MAAO,GACP,QAAS,GACT,WAAY,EACZ,QAAS,GACT,WAAY,EACd,EAUMC,KAAa,MAAY,CAC7B,KAAM,QACN,aAAcD,EACd,SAAU,CACR,YAAa,CAACthM,EAAOkN,IAAoD,CACvE,KAAM,CAAE,WAAA0H,EAAY,QAAAC,EAAS,GAAGzoB,CAAK,EAAI8gB,EAAO,QAC1C8H,EAAa,KAAK,KAAKJ,EAAaC,CAAO,EACjD,MAAO,CAAE,GAAG7U,EAAO,GAAG5T,EAAM,WAAA4oB,EAAY,QAAAH,EAAS,WAAY,EAAK,CACpE,EACA,aAAc,CAAC7U,EAAOkN,KACb,CAAE,GAAGlN,EAAO,KAAM,EAAG,MAAOkN,EAAO,OAAQ,GAEpD,YAAa,CAAClN,EAAOkN,KACZ,CAAE,GAAGlN,EAAO,KAAMkN,EAAO,OAAQ,GAE1C,YAAa,CAAClN,EAAOkN,KACZ,CAAE,GAAGlN,EAAO,KAAMkN,EAAO,QAAS,KAAM,CAAE,GAEnD,gBAAkBlN,IACT,CAAE,GAAGA,EAAO,aAAc,EAAK,GAExC,cAAgBA,IACP,CAAE,GAAGA,EAAO,aAAc,EAAM,EAE3C,CACF,CAAC,EAEY,CAAE,YAAAwhM,EAAa,aAAAntF,EAAc,YAAA/+F,EAAa,YAAAC,EAAa,gBAAAC,EAAiB,cAAAC,CAAc,EACjG8rL,EAAW,QAEAE,EAAeF,EAAW,QAE1BG,EAA8B,CACzC,KAAM,CAAC,EACP,QAAS,CAAC,EACV,OAAQ,CAAC,CACX,EAEMC,KAAY,MAAY,CAC5B,KAAM,OACN,aAAcD,EACd,SAAU,CACR,WAAY,CAAC1hM,EAAOkN,KACX,CAAE,GAAGlN,EAAO,KAAMkN,EAAO,OAAQ,GAE1C,iBAAkB,CAAClN,EAAOkN,KACjB,CAAE,GAAGlN,EAAO,OAAQkN,EAAO,OAAQ,EAE9C,CACF,CAAC,EAEY,CAAE,WAAA00L,EAAY,iBAAAC,CAAiB,EAAIF,EAAU,QAE7CG,EAAcH,EAAU,QAErC,EAAe,CACb,MAAOF,EACP,KAAMK,CACR,C,8KC7DO,SAASC,EAAwB,CAAE,cAAAtqJ,CAAc,EAAU,CAChE,MAAMuqJ,EAAevqJ,EAAc,WAAW,aACxC12D,EAAU,IAAe,KAAK,EAAE,OAAQgxB,GAAWA,EAAO,eAAiBiwL,CAAY,EAEvF72I,KAAc,WAAQ,IAAM,CAChC,GAAI,IAAO,eAAe,wBACxB,MAAO,GAET,IAAI/4C,EAASqlC,EAAc,OAC3B,KAAOrlC,GAAQ,CACb,GAAIA,aAAkB,IACpB,MAAO,GAETA,EAASA,EAAO,MAClB,CAEA,MAAO,EACT,EAAG,CAACqlC,CAAa,CAAC,EAEZwqJ,KAAiB,eACpBC,GAAkC,CACjC,MAAMviE,EAAeloF,EAAc,OAE/BkoF,MAAgB,KAAeA,CAAY,GAC7CA,EAAa,aAAauiE,EAAU,iBAAiBzqJ,CAAa,CAAC,CAEvE,EACA,CAACA,CAAa,CAChB,EAEMmvE,EAAwC,CAAC,EAEzCquD,EAAel0L,EAAQ,IAAK65D,GAAQ,CACxC,IAAIttB,EAAcstB,EAAI,YACtB,OAAIuQ,GAAevQ,EAAI,KAAO,IAAkB,WAAW,KACzDttB,KAAc,KAAE,gDAAiD,yCAAyC,EAC1Gs5F,EAAgB,KAAKhsE,CAAG,GAGnB,CACL,MAAOA,EACP,MAAOA,EAAI,KACX,KAAMA,EAAI,KACV,YAAAttB,EACA,UAAW,2BAA2BstB,EAAI,IAAI,EAChD,CACF,CAAC,EAED,SACE,OAAC,IAAG,CAAC,cAAe,EAAG,QAAQ,OAAO,KAAM,EAAG,WAAW,SACxD,mBAAC,KACC,UAAS,GACT,MAAOnD,EAAc,WACrB,QAASw9H,EACT,SAAUgtB,EACV,gBAAAr7E,CAAA,CACF,EACF,CAEJ,CACO,SAASu7E,EAAkB1qJ,EAAuC,CACvE,SAAO,WAAQ,IAAM,CACnB,MAAMuqJ,EAAevqJ,EAAc,WAAW,aAExC2qJ,EAAc,IAAI,IAA8B,CACpD,SAAO,KAAE,uCAAwC,cAAc,EAC/D,GAAI,oBACJ,cAAe,EACjB,CAAC,EAEKC,EAAa,IAAI,IAA8B,CACnD,SAAO,KAAE,uCAAwC,cAAc,EAC/D,GAAI,mBACJ,cAAe,EACjB,CAAC,EAgCD,GA9BAA,EAAW,QACT,IAAI,IAA0B,CAC5B,MAAO,GACP,GAAI,0BACJ,UAAW,GACX,OAAQ,OAAM,OAACN,EAAA,CAAwB,cAAAtqJ,CAAA,CAA8B,CACvE,CAAC,CACH,EAEIuqJ,EACFI,EAAY,MAAM,gBAAe,KAC/B,gDACA,gCACF,GAEAA,EAAY,QACV,IAAI,IAA0B,CAC5B,MAAO,GACP,GAAI,2BACJ,UAAW,GACX,OAAQ,OAAM,OAACL,EAAA,CAAwB,cAAAtqJ,CAAA,CAA8B,CACvE,CAAC,CACH,EAEA4qJ,EAAW,MAAM,gBAAe,KAC9B,gDACA,oDACF,GAGE5qJ,EAAc,WAChB,UAAWvwD,KAAUuwD,EAAc,WAAW,EAC5C4qJ,EAAW,QAAQn7M,CAAM,EAI7B,MAAO,CAACk7M,EAAaC,CAAU,CACjC,EAAG,CAAC5qJ,CAAa,CAAC,CACpB,C,oEC/GO,SAAS6qJ,EAA0B/kN,EAAiD,CAEzF,OADkB,IAAI,IAAI,CAAC,SAAU,aAAc,SAAU,YAAY,CAAC,EACzD,IAAIA,CAAK,CAC5B,CAEO,MAAMglN,EAA8D,CACzE,IAAK,SACL,KAAM,aACN,KAAM,cACN,KAAM,kBACN,KAAM,SACN,MAAO,YACT,EAEaC,EAAqE,OAAO,YACvF,OAAO,QAAQD,CAAsB,EAAE,IAAI,CAAC,CAACE,EAAQh5C,CAAQ,IAAM,CAACA,EAAUg5C,CAAM,CAAC,CAEvF,C,sFC5BO,MAAM1jK,EAAgB,CAAC,CAAE,MAAA/5C,CAAM,IAAa,CACjD,MAAMsC,KAAS,MAAWuD,CAAS,EAEnC,OAAK7F,KAIE,OAAC,QAAK,UAAWsC,EAAO,MAAQ,SAAAtC,CAAA,CAAM,EAHpC,IAIX,EAEM6F,EAAanF,IACV,CACL,SAAO,OAAI,CACT,WAAYA,EAAM,WAAW,kBAC7B,aAAc,UAChB,CAAC,CACH,E,wWCwCK,MAAMg9M,EAAiB,CAAC,CAC7B,KAAArrI,EACA,QAAAsrI,EACA,QAAAC,EACA,MAAAx7M,EACA,SAAAjK,EACA,cAAA8jG,EACA,gBAAAC,EACA,gBAAAC,EACA,SAAApsF,EACA,YAAAisF,GAAc,GACd,UAAA6hH,EAAY,EACd,IAAa,CACX,KAAM,CAACr8M,GAAQ06C,EAAO,KAAI,YAAS,EAAK,EAElC/hD,KAAM,UAAuB,IAAI,EACjC,CAAE,aAAA+gD,EAAc,cAAAm7H,CAAc,KAAI,KACtC,CACE,QAAS,IAAMn6H,GAAQ,EAAK,EAC5B,cAAe,GACf,OAAA16C,GACA,6BAA+Bm2E,IAAY,CACzC,MAAMmmI,GAAe,SAAS,uBAAuB,GAAgB,EAAE,CAAC,EACxE,MAAO,EAAEA,IAAgBA,GAAa,SAASnmI,EAAO,EACxD,CACF,EACAx9E,CACF,EACM,CAAE,YAAA6gD,CAAY,KAAI,KAAU,CAAC,EAAG7gD,CAAG,EAEnCuG,MAAQ,MAAU,EAClB,CAAE,cAAAm6C,EAAc,KAAI,MAAW,GAAc,EAC7CY,MAAe,KAAS,eAAe/6C,GAAM,YAAY,OAAO,EAAE,KAAK,EACvE0V,EAAY,eACZ9T,MAAS,MAAWuD,CAAS,EAI7BmzB,MAAa,4BAAyB5iB,CAAS,EAE/C,CAAE,KAAA6iB,GAAM,eAAAC,EAAe,KAAI,MAAY,CAC3C,KAAM13B,GACN,UAAA4U,EACA,aAAc8lC,GACd,WAAAljB,GACA,qBAAsB,KACtB,SAAU,OACZ,CAAC,EAEKwhB,MAAU,eACb63B,IAAmB,CAClBn2B,GAAQ,EAAK,EACb/jD,EAASk6E,EAAI,CACf,EACA,CAACl6E,CAAQ,CACX,EAEMkkD,MAAS,eACZh3C,IAAkC,CACjCA,GAAM,eAAe,EACrB62C,GAAQ,EAAI,CACd,EACA,CAACA,EAAO,CACV,EAEA,SACE,QAAC,OAAI,cAAY,mBAAmB,MAAO,CAAE,SAAU,UAAW,EAChE,oBAAC6hK,EAAA,CACC,KAAA1rI,EACA,SAAAl6E,EACA,aAAAsjD,GACA,OAAAY,GACA,MAAAj6C,EACA,IAAK62B,GAAK,aACV,YAAA+iE,GACA,UAAA6hH,EACA,SAAA9tM,CAAA,CACF,EACCvO,GACCi6C,MACE,OAAC,KAAM,CACL,mBAAC,KAAU,CAAC,QAAO,GAAC,UAAS,GAAC,aAAY,GACxC,mBAAC,OAAI,IAAAthD,EAAW,GAAG+gD,EAAe,GAAGF,EACnC,mBAACgjK,EAAA,CACC,KAAA3rI,EACA,SAAU73B,GACV,aAAc,GACd,QAAS,IAAM0B,GAAQ,EAAK,EAC5B,QAAAyhK,EACA,QAAAC,EACA,IAAK3kL,GAAK,YACV,MAAOC,GACP,YAAA8iE,GACA,cAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,SAAApsF,CAAA,CACF,EACF,EACF,EACF,KAEA,QAAC,KAAM,CACL,oBAAC,OAAI,UAAW8qC,GAAgB,GAAGw7H,CAAA,CAAe,KAClD,OAAC,KAAU,CAAC,QAAO,GAAC,UAAS,GAAC,aAAY,GACxC,mBAAC,OAAI,IAAAl8K,EAAW,GAAG+gD,EAAe,GAAGF,EACnC,mBAAC,OAAI,UAAW14C,GAAO,MACrB,mBAAC07M,EAAA,CACC,KAAA3rI,EACA,QAAAsrI,EACA,QAAAC,EACA,SAAUpjK,GACV,aAAc,GACd,QAAS,IAAM0B,GAAQ,EAAK,EAC5B,YAAA8/C,GACA,cAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,SAAApsF,CAAA,CACF,EACF,EACF,EACF,GACF,EAEA,MACN,CAEJ,EAmBMguM,EAAgB,aACpB,CAAC,CAAE,KAAA1rI,EAAM,MAAAjwE,EAAO,SAAAjK,EAAU,OAAAkkD,EAAQ,SAAAtsC,EAAU,YAAAisF,EAAc,GAAM,UAAA6hH,EAAY,EAAM,EAAG1jN,IAAQ,CAC3F,MAAMmI,KAAS,MAAWuD,CAAS,EAC7BysE,GAAS0pB,EAAc,sBAAwB,mBAC/C,CAACiiH,EAAcC,EAAe,KAAI,YAAqB,KACpD,CACL,MAAO7rI,KAAO,MAAeA,EAAM,CAAE,SAAAtiE,CAAS,CAAC,EAAK8tM,EAAuD,MAA3C,SAAe,MAAS,EAAG,CAAE,SAAA9tM,CAAS,CAAC,EACvG,QAAS,EACX,EACD,KAED,aAAU,IAAM,CACd,GAAIsiE,EAAM,CACR,MAAM8rI,KAAgB,MAAe9rI,EAAM,CAAE,OAAAC,GAAQ,SAAAviE,CAAS,CAAC,EAC/DmuM,GAAgB,CACd,QAAS,IAAC,KAAQC,CAAa,EAC/B,SAAO,MAAW9rI,CAAI,EAAI8rI,EAAgB9rI,CAC5C,CAAC,CACH,CACF,EAAG,CAACA,EAAMC,GAAQviE,CAAQ,CAAC,EAE3B,MAAMquM,MAAe,eAAa/4M,GAAuC,CACvE,MAAMsE,GAAY,IAAC,KAAQtE,EAAM,cAAc,KAAK,EACpD64M,GAAgB,CACd,MAAO74M,EAAM,cAAc,MAC3B,QAASsE,EACX,CAAC,CACH,EAAG,CAAC,CAAC,EAECnG,KAAS,eAAY,IAAM,CAC/B,GAAI,CAACy6M,EAAa,SAAWA,EAAa,MAAO,CAC/C,MAAM5rI,KAAO,SAAoB,KAAY,CAAE,SAAAtiE,CAAS,CAAC,EAAGkuM,EAAa,KAAK,EAC9E9lN,EAASk6E,CAAI,CACf,CACF,EAAG,CAAC4rI,EAAc9lN,EAAU4X,CAAQ,CAAC,EAE/BsuM,KAAoB,eAAY,IAAM,CAC1CH,GAAgB,CAAE,MAAO,GAAI,QAAS,EAAM,CAAC,EAC7C/lN,EAAS,CACX,EAAG,CAACA,CAAQ,CAAC,EAEP6O,KACJ,OAAC,MACC,gBAAY,KAAE,kDAAmD,aAAa,EAC9E,KAAK,eACL,QAAQ,YACR,QAASq1C,CAAA,CACX,EAEF,SACE,OAAC,IAAW,CAAC,MAAAj6C,EAAc,QAAS,CAAC,EAAE67M,EAAa,OAASA,EAAa,SAAU,UAAW37M,EAAO,MACpG,mBAAC,KACC,SAAU87M,GACV,WAAYp3M,EACZ,MAAOi3M,EAAa,MACpB,OAAAz6M,EACA,cAAa,KAAW,eAAe,MACvC,eAAa,KAAE,iDAAkD,kBAAkB,EACnF,IAAArJ,EACA,OACE0jN,GACAI,EAAa,UAAS,OAAC,IAAI,CAAC,KAAK,QAAQ,UAAW37M,EAAO,UAAW,QAAS+7M,CAAA,CAAmB,EAEtG,EACF,CAEJ,CACF,EAEAN,EAAc,YAAc,gBAE5B,MAAMC,EAAmB,aACvB,CACE,CACE,KAAA3rI,EACA,QAAAh8C,EACA,SAAAl+B,EACA,aAAAsjD,EACA,QAAAkiK,EACA,QAAAC,EACA,MAAA95L,EACA,YAAAk4E,EAAc,GACd,cAAAC,EACA,gBAAAC,GACA,gBAAAC,EACA,SAAApsF,EACF,EACA5V,KACG,CACH,MAAMmkN,KAAiB,MAAW,IAAa,EACzCh8M,KAAS,MAAWuD,CAAS,EAG7B,CAAC04M,EAAmBC,CAAoB,KAAI,YAAS,IACrDnsI,GAAQA,EAAK,QAAQ,KAChB,SAAoB,KAAY,CAAE,SAAAtiE,EAAS,CAAC,EAAGsiE,CAAI,KAGrD,SAAoB,KAAY,CAAE,SAAAtiE,EAAS,CAAC,EAAG,IAAI,IAAM,CACjE,EACK,CAAC0uM,GAAmBC,EAAoB,KAAI,YAAe,IAC3DrsI,GAAQA,EAAK,QAAQ,KAChB,KAA2BA,EAAK,OAAO,KAAG,KAAY,CAAE,SAAAtiE,EAAS,CAAC,CAAC,KAGrE,KAA2B,IAAI,QAAQ,KAAY,CAAE,SAAAA,EAAS,CAAC,CAAC,CACxE,EAEKquM,MAAe,eAA6E/rI,IAAS,CACrGA,IAAQ,CAAC,MAAM,QAAQA,EAAI,GAC7BqsI,GAAqBrsI,EAAI,CAE7B,EAAG,CAAC,CAAC,EAECvV,KAAe,eAAauV,IAAmB,CACnDmsI,EAAqBnsI,EAAI,CAC3B,EAAG,CAAC,CAAC,EAGCssI,GAAc,IAAM,CAExB,MAAMC,MAAU,MAASL,CAAiB,EAG1CK,GAAQ,IAAI,OAAQH,GAAkB,QAAQ,CAAC,EAC/CG,GAAQ,IAAI,QAASH,GAAkB,SAAS,CAAC,EACjDG,GAAQ,IAAI,OAAQH,GAAkB,YAAY,CAAC,EAEnDtmN,EAASymN,EAAO,CAClB,EAEA,SACE,QAAC,OAAI,aAAW,MAAGt8M,EAAO,UAAW,CAAE,CAACA,EAAO,UAAU,EAAGm5C,CAAa,CAAC,EAAG,MAAA33B,EAAc,IAAA3pB,GACzF,oBAAC,MACC,WAAY,KACZ,WAAY,KACZ,MAAOskN,GACP,aAAW,OAAC,IAAI,CAAC,KAAK,aAAc,GACpC,iBAAe,KAAE,yCAA0C,YAAY,EACvE,aAAW,OAAC,IAAI,CAAC,KAAK,YAAa,GACnC,iBAAe,KAAE,6CAA8C,gBAAgB,EAC/E,SAAUL,GACV,OAAO,KACP,UAAWE,EAAe,KAC1B,cAAeA,EAAe,MAC9B,QAAAX,EACA,QAAAC,CAAA,CACF,KACA,OAAC,OAAI,UAAWt7M,EAAO,KACrB,mBAAC,KACC,YAAA05F,EACA,SAAUl/B,EACV,MAAOyhJ,EACP,cAAAtiH,EACA,gBAAAC,GACA,gBAAAC,CAAA,CACF,EACF,KACA,QAAC,IAAK,CACJ,oBAAC,KAAM,CAAC,KAAK,SAAS,QAASwiH,GAC7B,mBAAC,KAAK,CAAC,QAAQ,oCAAoC,iBAAK,EAC1D,KACA,OAAC,KAAM,CAAC,QAAQ,YAAY,KAAK,SAAS,QAAStoL,EACjD,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,kBAAM,EAC5D,GACF,GACF,CAEJ,CACF,EAEA2nL,EAAiB,YAAc,mBAE/B,MAAMn4M,EAAanF,IAA0B,CAC3C,aAAW,OAAI,CACb,QAASA,EAAM,QAAQ,CAAC,EACxB,OAAQ,OAAOA,EAAM,OAAO,OAAO,IAAI,SACvC,aAAcA,EAAM,MAAM,OAAO,QACjC,gBAAiBA,EAAM,OAAO,WAAW,QACzC,OAAQA,EAAM,OAAO,KACvB,CAAC,EACD,cAAY,OAAI,CACd,SAAU,UACZ,CAAC,EACD,QAAM,OAAI,CACR,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,SAAO,OAAI,CACT,SAAU,QACV,IAAK,MACL,KAAM,MACN,UAAW,wBACX,OAAQA,EAAM,OAAO,MACrB,SAAU,OACZ,CAAC,EACD,aAAW,OAAI,CACb,OAAQ,SACV,CAAC,EACD,SAAO,OAAI,CACT,aAAc,EACd,MAAO,MACT,CAAC,CACH,E,4GCzZO,SAASm+M,EAAyB7rH,EAA+B,CACtE,MAAM8rH,EAAY,KAAW,KAAK,UAAY,IAAQ,KAChD39M,EAAO,CAAC,IAAO,eAAe,cAAgB29M,EAE9CC,KAAgB,MAA4B/rH,GAAY7xF,EAAO,KAAY,MAAS,EAC1F,OAAK6xF,IACHA,EAAW+rH,EAAc,MAEpB/rH,GAAU,OAAO,KAAM1lF,GAASA,EAAK,SAAW,UAAU,CACnE,C,mFCNO,MAAM0xM,CAA6C,CAOxD,YAAY/iN,EAAaG,EAAkB,CAN3C,mBAAkB,CAAC,EACnB,YAAS,EAMA6iN,EAAiBhjN,EAAQG,CAAK,CACvC,CACF,CASO,SAAS6iN,EAAiBhjN,EAAoDG,EAA6B,CAChH,MAAMw0J,EAAgB,CACpB,OAAQ,CAAC,EACT,OAAQ30J,EAAO,MACjB,EACA,GAAI,CAACA,GAAQ,OACX,OAAO20J,EAKT,GAAIx0J,EAAO,CACT,GAAI,CAAC8iN,EAAcjjN,CAAM,EACvB,MAAM,IAAI,MAAM,mCAAmC,EAGrD,UAAW0S,KAAQvS,EACjBw0J,EAAG,OAAO,KACRuuD,EACExwM,EACA1S,EAAO,IAAK6B,GAAOA,GAAIA,EAAE6Q,CAAI,CAAM,CACrC,CACF,EAEF,OAAOiiJ,CACT,CAMA,GAJqB30J,EAAO,KAAM6B,GAAMA,CAAC,IAIpB,KACnB,OAAO8yJ,EAIT,GAAIsuD,EAAcjjN,CAAM,EAAG,CAGzB,MAAM+E,EAAQ/E,EAAO,KAAM6B,GAAMA,CAAC,EAClC8yJ,EAAG,OAAS,OAAO,KAAK5vJ,GAAS,CAAC,CAAC,EAAE,IAAK2N,GACjCwwM,EACLxwM,EACA1S,EAAO,IAAK,GAAO,GAAI,EAAE0S,CAAI,CAAM,CACrC,CACD,CACH,MAEEiiJ,EAAG,OAAO,KAAKuuD,EAAoB,KAA8BljN,CAAM,CAAC,EAE1E,OAAO20J,CACT,CAEA,SAASuuD,EAAoBxwM,EAAc/P,EAA0B,CACnE,MAAMya,EAAI,CAAE,KAAA1K,EAAM,OAAQ,CAAC,EAAG,OAAA/P,EAAQ,KAAM,KAAU,KAAM,EAC5D,OAAAya,EAAE,QAAO,MAAuBA,CAAC,GAAK,KAAU,MACzCA,CACT,CAEA,SAAS6lM,EAAc3qD,EAA0E,CAC/F,MAAMvzJ,EAAQuzJ,EAAI,KAAMz2J,GAAMA,CAAC,EAC/B,OAAOy2J,EAAI,OAAS,GAAK,OAAOvzJ,GAAU,QAC5C,C,kHC1EO,MAAMo+M,EAAuB/7K,GAAuC,IACzE,MAAW,EAAE,SAA6B,CACxC,KAAM,KAAc,cACpB,QAAAA,CACF,CAAC,CACH,EAOag8K,EAAiB,IAAM,CAClC,MAAM93J,EAAW,KAAgB,YAAY,EACvCz3B,EAAO,GAAG,IAAO,WAAa,EAAE,GAAGy3B,EAAS,QAAQ,GAAGA,EAAS,MAAM,GAAGA,EAAS,IAAI,MAC5F,MAAW,EAAE,SAA4B,CACvC,KAAM,KAAc,SACpB,QAAS,CACP,KAAAz3B,CACF,CACF,CAAC,CACH,EAOa2vG,EAAoB,CAAC6/E,EAAyBh6B,IAAyC,CAE9F,IAAO,wBAA0B,IAAO,kCAAkC,SAC5EA,EAAa,CAAE,GAAGA,EAAY,GAAG,IAAO,sBAAuB,MAEjE,MAAW,EAAE,SAA+B,CAC1C,KAAM,KAAc,YACpB,QAAS,CACP,gBAAAg6B,EACA,WAAAh6B,CACF,CACF,CAAC,CACH,EAOai6B,EAAuB,CAAC35L,EAAYxV,EAAejJ,IAAoB,IAClF,MAAW,EAAE,SAAkC,CAC7C,KAAM,KAAc,eACpB,QAAS,CACP,aAAcye,EACd,gBAAiBxV,EACjB,kBAAmBjJ,CACrB,CACF,CAAC,CACH,C,wLClEA,MAAMq4M,KAA0B,OAAI,CAClC,QAAS,OACT,WAAY,SACZ,OAAQ,MACV,CAAC,EAEM,SAASC,EAA+B,CAAE,IAAAl3L,EAAK,QAAAm3L,CAAQ,EAAuB,CACnF,SACE,OAAC,OAAI,UAAWF,EACd,mBAACzyK,EAAA,GACC,WAAS,KAAE,kDAAmD,qBAAqB,EACnF,gBAAe2yK,EAEf,KAAMn3L,EAAI,WAAa,aAAe,cAEtC,gBAAeA,EAAI,WAElB,GAAGA,EAAI,0BAA0B,EAClC,KAAK,KACP,EACF,CAEJ,CAEO,SAASo3L,EAAiC,CAAE,kBAAAC,EAAmB,sBAAAte,CAAsB,EAAmB,CAC7G,SACE,OAAC,OAAI,UAAWke,EACd,mBAACzyK,EAAA,GACC,aACG6yK,KAEG,KAAE,uDAAwD,mBAAmB,KAD7E,KAAE,qDAAsD,iBAAiB,EAG/E,KAAOA,EAAyC,qBAArB,mBAC3B,QAAS,IAAMte,EAAsB,EACrC,KAAM,KACN,QACGse,KAEG,KAAE,oDAAqD,mBAAmB,KAD1E,KAAE,kDAAmD,iBAAiB,EAG5E,QAAS,YACX,EACF,CAEJ,CC/CO,MAAMC,EAAmB,aAOzB,SAASC,EACdz1M,EACA01M,EAAgB,GACU,CAC1B,MAAO,CACL,CACE,GAAIF,EACJ,KAAMJ,EACN,GAAIM,GAAiB,CACnB,OAAQJ,CACV,EACA,cAAe,GACf,MAAO,CACT,EAIA,GAAGt1M,EAAQ,IAAKixL,IAAY,CAC1B,GAAIA,EAAO,GACX,SAAUA,EAAO,GACjB,OAAQA,EAAO,SAAW,IAAM,MAChC,SAAUA,EAAO,UAAY,eAC7B,cAAe,CAASA,EAAO,SAC/B,MAAOA,EAAO,YAAc,EAAI,OAChC,QAASA,EAAO,QAChB,GAAIA,EAAO,MAAQ,CAAE,KAAMA,EAAO,IAAK,CACzC,EAAE,CACJ,CACF,CCdA,MAAMz1L,EAAanF,GAAyB,CAC1C,MAAMi3C,EAAaj3C,EAAM,OAAO,UAAUA,EAAM,OAAO,WAAW,QAAS,GAAI,EAE/E,MAAO,CACL,aAAW,OAAI,CACb,QAAS,OACT,IAAKA,EAAM,QAAQ,CAAC,EACpB,cAAe,SACf,MAAO,OACP,UAAW,MACb,CAAC,EACD,QAAM,OAAI,CACR,QAASA,EAAM,QAAQ,CAAC,EACxB,SAAUA,EAAM,QAAQ,CAAC,CAC3B,CAAC,EACD,SAAO,OAAI,CACT,aAAcA,EAAM,MAAM,OAAO,QACjC,MAAO,MACT,CAAC,EACD,eAAa,OAAI,CACf,MAAO,CACT,CAAC,EACD,UAAQ,OAAI,CACV,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,GACnD,SAAUA,EAAM,QAAQ,CAAC,EACzB,gBAAiB,CACf,SAAU,WACV,WAAY,SACZ,QAASA,EAAM,QAAQ,CAAC,CAC1B,EACA,aAAc,CACZ,UAAW,CACT,QAAS,UACX,EACA,MAAO,OACP,OAAQ,OACR,WAAY,OACZ,OAAQ,OACR,aAAcA,EAAM,QAAQ,GAAG,EAC/B,UAAW,OACX,WAAYA,EAAM,WAAW,gBAC/B,CACF,CAAC,EACD,OAAK,OAAI,CACP,MAAO,MACP,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,GAEnD,UAAW,CACT,gBAAiBi3C,CACnB,EAEA,eAAgB,CACd,aAAc,CAChB,CACF,CAAC,EACD,eAAa,OAAI,CACf,MAAO,uBACP,aAAc,MAChB,CAAC,EACD,uBAAqB,OAAI,CACvB,aAAc,aAAaj3C,EAAM,OAAO,OAAO,IAAI,GACnD,SAAU,WACV,QAASA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EAEjC,WAAY,CACV,QAAS,KACT,SAAU,WACV,MAAO,MACP,IAAK,EACL,KAAM,OACN,OAAQA,EAAM,QAAQ,CAAC,EACvB,WAAYA,EAAM,OAAO,OAAO,MAClC,CACF,CAAC,EACD,sBAAoB,OAAI,CACtB,MAAO,sBACT,CAAC,EACD,kBAAgB,OAAI,CAElB,KAAM,CACJ,QAAS,CACX,CACF,CAAC,CACH,CACF,EAuEO,SAASixC,EAA2C,CACzD,UAAA5uC,EACA,QAAAsH,EACA,KAAA3N,EACA,SAAAsjN,EACA,eAAAC,EACA,SAAAze,EAAW,EACX,kBAAA0e,EACA,cAAAH,EAAgB,GAChB,UAAA50I,EACA,cAAA0tH,EAAgB,CAAC,CACnB,EAAqB,CACnB,MAAMv2L,KAAS,MAAWuD,CAAS,EAC7Bs6M,KAAe,WAAQ,IACpBL,EAAsBz1M,EAAS01M,CAAa,EAClD,CAAC11M,EAAS01M,CAAa,CAAC,EACrBn6L,EAAKw6L,EAAY,EACjBC,KAAe,eAClB93L,GACQ,GAAG3C,CAAE,IAAI2C,EAAI,EAAE,GAAG,QAAQ,MAAO,EAAE,EAE5C,CAAC3C,CAAE,CACL,EAEM06L,EAA2C,CAAC,YAAW,aAAW,EAElEC,EAAgB7jN,EAAK,OAAS8kM,EAC9Bgf,EAAoBhf,EAAW,EAEjCgf,GACFF,EAAW,KAAK,eAAa,EAG/B,MAAMG,KAAgB,YACpB,CACE,QAASN,EACT,KAAAzjN,EACA,kBAAmB,GACnB,gBAAiB,GACjB,iBAAkB,GAElB,aAAc,EAAQyuE,EACtB,SAAA60I,EACA,aAAc,CACZ,cAAe,CACb,CAACE,GAAqBL,EACtB,GAAGM,EACA,OAAQ73L,GAAQ,EAAE,CAAAA,EAAI,SAAUA,EAAI,QAAQ5rB,CAAI,EAAS,EACzD,IAAKsL,GAAMA,EAAE,EAAE,EACf,OAAO,IAAQ,CACpB,EAAE,OAAO,IAAQ,EACjB,OAAQ6wL,CACV,CACF,EACA,GAAGynB,CACL,EAEM,CAAE,cAAAtf,EAAe,kBAAA0f,GAAmB,aAAA5kB,EAAc,WAAAwB,EAAW,EAAImjB,EAEjE,CAAE,OAAA58J,EAAO,EAAI48J,EAAc,MACjC,sBAAU,IAAM,CACVt1I,GACFA,EAAU,CAAE,OAAAtnB,EAAO,CAAC,CAExB,EAAG,CAACA,GAAQsnB,CAAS,CAAC,KAEtB,aAAU,IAAM,CACVq1I,GACFC,EAAc,YAAYjf,CAAQ,CAEtC,EAAG,CAACgf,EAAmBhf,EAAUif,EAAc,YAAaA,CAAa,CAAC,KAGxE,QAAC,OAAI,UAAWn+M,EAAO,UACrB,qBAAC,SAAO,GAAG0+L,EAAc,EAAG,aAAW,MAAG1+L,EAAO,MAAOS,CAAS,EAC/D,oBAAC,SACE,SAAA+4L,EAAa,IAAKG,GAAgB,CACjC,KAAM,CAAE,IAAAh8K,EAAK,GAAG0gM,CAAe,EAAI1kB,EAAY,oBAAoB,EAEnE,SACE,OAAC,MAAc,GAAG0kB,EACf,SAAA1kB,EAAY,QAAQ,IAAKX,GAAW,CACnC,KAAM,CAAE,IAAAr7K,GAAK,GAAG2gM,EAAgB,EAAItlB,EAAO,eAAe,EAEpDulB,GAAgBZ,IAAiB3kB,EAAO,EAAE,EAEhD,SACE,OAAC,MAEC,aAAW,MAAGh5L,EAAO,OAAQ,CAC3B,CAACA,EAAO,WAAW,EAAGg5L,EAAO,QAAU,EACvC,CAACh5L,EAAO,cAAc,EAAGg5L,EAAO,OAClC,CAAC,EACA,GAAGslB,GACH,GAAItlB,EAAO,UAAY,CAAE,YAAaA,EAAO,aAAe,aAAe,WAAY,EAExF,mBAACwlB,EAAA,CAAa,OAAAxlB,EAAgB,cAAAulB,EAAA,CAA8B,GARvD5gM,EASP,CAEJ,CAAC,GAnBMA,CAoBT,CAEJ,CAAC,EACH,KAEA,OAAC,SAAO,GAAGygM,GAAkB,EACzB,UAAAF,EAAoBC,EAAc,KAAOA,EAAc,MAAM,IAAKl4L,GAAQ,CAC1E+0K,GAAW/0K,CAAG,EAEd,KAAM,CAAE,IAAAtI,EAAK,GAAG8gM,CAAc,EAAIx4L,EAAI,YAAY,EAC5Cy4L,EAAQX,EAAa93L,CAAG,EAExBk3C,GAAal3C,EAAI,WAEvB,SACE,QAAC2iL,EAAAA,SAAA,CACC,oBAAC,MAAI,GAAG6V,EAAe,aAAW,MAAGz+M,EAAO,IAAKm9D,IAAcn9D,EAAO,WAAW,EAC9E,SAAAimB,EAAI,MAAM,IAAKsD,IAAS,CACvB,KAAM,CAAE,IAAA5L,GAAK,GAAGghM,CAAe,EAAIp1L,GAAK,aAAa,EACrD,SACE,OAAC,MAAG,UAAWvpB,EAAO,KAAiB,GAAG2+M,EACvC,SAAAp1L,GAAK,OAAO,OAAQ,CAAE,QAASm1L,CAAM,CAAC,GADR/gM,EAEjC,CAEJ,CAAC,EACH,EACCw/C,IAAcygJ,MACb,OAAC,MAAI,GAAGa,EAAe,GAAIC,EAAO,UAAW1+M,EAAO,mBAClD,mBAAC,MAAG,UAAWA,EAAO,oBAAqB,QAASimB,EAAI,MAAM,OAC3D,SAAA23L,EAAkB33L,EAAI,QAAQ,EACjC,EACF,IAhBWtI,CAkBf,CAEJ,CAAC,EACH,GACF,EACCugM,GAAqBD,MACpB,OAAC,QACC,mBAAC9nC,EAAA,GACC,YAAagoC,EAAc,MAAM,UAAY,EAC7C,cAAeA,EAAc,YAAY,OACzC,WAAahf,GAAWgf,EAAc,SAAShf,EAAS,CAAC,EAC3D,EACF,GAEJ,CAEJ,CAEA,MAAM2e,EAAc,OACX,WAAQ,OAAM,YAAS,kBAAkB,EAAG,CAAC,CAAC,EAGjDc,EAAyBxgN,IAA0B,CACvD,YAAU,OAAI,CACZ,SAAU,WACV,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,qBAAmB,OAAI,CACrB,WAAYA,EAAM,QAAQ,EAAG,CAC/B,CAAC,CACH,GAEA,SAASogN,EAA+B,CACtC,OAAQ,CAAE,QAAAK,EAAS,OAAAC,EAAQ,SAAAC,EAAU,aAAAC,EAAc,qBAAAC,CAAqB,EACxE,cAAAV,CACF,EAGG,CACD,MAAMv+M,KAAS,MAAW4+M,CAAqB,EACzC,CAAE,QAAA5xM,CAAQ,EAAIiyM,EAAqB,EAEnC5/M,KACJ,oBACG,UAAAy/M,EAAO,QAAQ,EACfP,MACC,OAAC17M,EAAA,EAAO,CAAC,MAAM,WAAW,QAAS07M,EAAc,QAAS,UAAU,UAClE,mBAACp/M,EAAA,GACC,UAAWa,EAAO,kBAClB,KAAMu+M,EAAc,UAAY,cAChC,cAAa,sBACf,EACF,EAEDQ,MACC,OAAC,QAAK,cAAY,OAAO,UAAW/+M,EAAO,SACzC,mBAACb,EAAA,EAAI,CAAC,KAAM6/M,EAAe,aAAe,WAAY,EACxD,GAEJ,EAGF,OAAIH,KAEA,OAAC,UAAO,KAAK,SAAS,QAAA7xM,EACnB,SAAA3N,CAAA,CACH,EAIGA,CACT,C,iDCvXO,SAAS6/M,EAAiBC,EAAgCl/K,EAAM,GAAO,CAC5E,OAAO,OAAO,iBAAiB,SAAS,eAAek/K,CAAW,GAAKl/K,CACzE,C,sFCQO,MAAMm/K,EAAe,CAAC,CAAE,MAAA5sG,EAAO,MAAAC,EAAO,UAAAnjF,EAAW,MAAA9xB,EAAO,OAAAC,CAAO,IAAa,CACjF,MAAMq4G,KAAU,UAAuB,IAAI,EACrCj+G,KAAM,UAAuB,IAAI,EAEvC,sBAAU,IAAM,EACQ,SAAY,CAChC,MAAMwnN,EAAQ,MAAM,wDACdC,EAAU,MAAM,gCAChBllN,EAAa,CACjB,MAAOmlN,EAAkBD,EAAS9sG,CAAK,EACvC,MAAOgtG,EAAkBF,EAAS7sG,CAAK,CACzC,EACMh5G,EAAmB,CACvB,MAAO,OACP,OAAQ,OACR,WAAY,GACZ,OAAQ,CACN,eAAgB,GAChB,aAAc,CACZ,QAAS,GACT,UAAW61B,GAAa,KACxB,WAAY,UACd,CACF,EACA,YAAa,CACX,kBAAmB,GACnB,UAAW,EACb,CACF,EACIz3B,EAAI,UACNi+G,EAAQ,QAAU,IAAIupG,EAAM,QAAQxnN,EAAI,QAASuC,EAAMX,CAAO,EAElE,GAEc,CAChB,EAAG,CAAC61B,EAAWmjF,EAAOD,CAAK,CAAC,KAG1B,OAAC,OACC,mBAAC,OAAI,IAAA36G,EAAU,MAAO,CAAE,MAAO2F,GAAS,OAAQ,OAAQC,GAAU,MAAO,EAAG,EAC9E,CAEJ,EAEA,SAAS8hN,EAAkBD,EAAc9sG,EAAmC,CAC1E,MAAMitG,EAAiBjtG,EAAM,IAAKzuG,IAAU,CAC1C,GAAGA,EACH,MAAO,KACT,EAAE,EACF,OAAO,IAAIu7M,EAAQ,QAAQG,CAAc,CAC3C,CAEA,SAASD,EAAkBF,EAAc7sG,EAAmC,CAC1E,MAAMitG,EAAiBjtG,EAAM,IAAKC,IAAU,CAAE,GAAGA,EAAM,OAAQ,KAAM,OAAQ,EAAK,EAAE,EACpF,OAAO,IAAI4sG,EAAQ,QAAQI,CAAc,CAC3C,CClDO,SAAS/pG,EAAkB,CAAE,MAAAlD,EAAO,MAAAD,EAAO,KAAMmtG,EAAW,MAAAjiN,EAAO,SAAA2B,CAAS,EAAuB,CACxG,KAAM,CAAC0c,EAAM6jM,CAAO,KAAI,YAASD,CAAS,EACpClqG,KAAY,eAAY,IAAMmqG,EAAQ,EAAI,EAAG,CAACA,CAAO,CAAC,EACtD7rL,KAAU,eAAY,IAAM6rL,EAAQ,EAAK,EAAG,CAACA,CAAO,CAAC,EAE3D,SACE,oBACE,oBAAC/7K,EAAA,GACC,OAAQ9nB,EACR,MAAAre,EACA,KAAK,cACL,YAAY,qDACZ,gBAAiBq2B,EACjB,UAAWA,EAEX,mBAACqrL,EAAY,CAAC,MAAA5sG,EAAc,MAAAC,CAAA,CAAc,EAC5C,EACCpzG,EAAS,CAAE,UAAAo2G,CAAU,CAAC,GACzB,CAEJ,C,uHCnBA,WArBmB,cAAW,SAC5Bx2G,EACApH,EACA,CACA,SACE,OAAC,MACC,QAAQ,YACR,KAAK,KACL,KAAK,SACL,aAAYoH,EAAM,UAAS,KAAE,kCAAmC,MAAM,EACtE,IAAApH,EACC,GAAGoH,EAEJ,oBAAC,IAAK,CAAC,UAAU,MAAM,WAAW,SAAS,IAAK,EAC7C,UAAAA,EAAM,UAAS,OAAC,KAAK,CAAC,QAAQ,mCAAmC,gBAAI,KACtE,OAAC,IAAI,CAAC,KAAK,YAAa,IAC1B,EACF,CAEJ,CAAC,C,wJCdM,MAAM4gN,EAAiB,CAAC,CAAE,OAAA52I,CAAO,IAAa,CACnD,MAAM70B,KAAQ,WAAQ,IAAM60B,EAAQ,CAACA,CAAM,CAAC,EAEtClhE,KAAU,WACd,IAAM,CACJ,CACE,GAAI,UACJ,OAAQ,YACV,EACA,CACE,GAAI,UACJ,OAAQ,eACR,KAAO9I,GACLA,EAAM,OAASA,EAAM,IAAI,SAAS,QAAUA,EAAM,MAAQ,EAC9D,EACA,CACE,GAAI,UACJ,OAAQ,OACR,KAAOA,GACLA,EAAM,UACJ,QAAC2sC,EAAA,EAAK,CAAC,WAAW,SAAS,KAAI,GAC7B,oBAAC,KAAK,CAAC,QAAQ,sCAAsC,oBAAQ,KAC7D,OAAC/oC,EAAA,GACC,WAAS,KACP,yEACA,iCACF,EAEA,mBAAC1D,EAAA,EAAI,CAAC,KAAK,aAAc,GAC3B,GACF,CAEN,CACF,EACA,CAAC,CACH,EAEA,SACE,OAACkwC,EAAA,GACC,eAAgB,CACd,QAAS,CAAE,QAAS,wDAAyD,SAAU,aAAc,CACvG,EACA,QAAAtnC,EACA,KAAMqsC,EACN,SAAWnuB,GAAQA,EAAI,MAAQA,EAAI,QAAUA,EAAI,QACnD,CAEJ,EChDa65L,EAAsB,CAAC,CAAE,KAAAhtL,CAAK,IAAa,CACtD,MAAM/qB,KAAU,WACd,IAAM,CACJ,CACE,GAAI,WACJ,OAAQ,mBACR,YAAa,EACf,EACA,CACE,GAAI,WACN,EACA,CACE,GAAI,eACJ,OAAQ,gBACV,CACF,EACA,CAAC,CACH,EAEMD,KAAO,WACX,IAAM,CACJ,CACE,SAAU,aACV,UAAWgrB,EAAK,KAAK,UACrB,aAAcA,EAAK,KAAK,YAC1B,EACA,CACE,SAAU,UACV,UAAWA,EAAK,QAAQ,UACxB,aAAcA,EAAK,QAAQ,YAC7B,EACA,CACE,SAAU,WACV,UAAWA,EAAK,MAAM,UACtB,aAAcA,EAAK,MAAM,YAC3B,EACA,CACE,SAAU,QACV,UAAWA,EAAK,MAAM,UACtB,aAAcA,EAAK,MAAM,YAC3B,CACF,EACA,CAACA,CAAI,CACP,EAEA,SAAO,OAACuc,EAAA,EAAgB,CAAC,QAAAtnC,EAAkB,KAAMD,EAAM,SAAWme,GAAQA,EAAI,SAAU,CAC1F,ECvCa85L,EAAsB,CAAC,CAAE,YAAAC,CAAY,IAAa,CAC7D,MAAMj4M,KAAU,WACd,IAAM,CACJ,CACE,GAAI,aACJ,OAAQ,cACR,YAAa,EACf,EACA,CACE,GAAI,OACN,CACF,EACA,CAAC,CACH,EAEM3N,KAAO,WACX,IAAM,CACJ,CACE,WAAY,gBACZ,MAAO4lN,EAAY,kBACjB,QAAC,KAAK,CAAC,QAAQ,+BACb,oBAAC7gN,EAAA,EAAI,CAAC,KAAK,QAAS,GAAE,QACxB,EAEA,IAEJ,EACA,CACE,WAAY,SACZ,MAAO6gN,EAAY,cACjB,QAAC,KAAK,CAAC,QAAQ,kCACb,oBAAC7gN,EAAA,EAAI,CAAC,KAAK,OAAQ,GAAE,aACvB,KAEA,QAAC,KAAK,CAAC,QAAQ,gCACb,oBAACA,EAAA,EAAI,CAAC,KAAK,OAAQ,GAAE,WACvB,CAEJ,CACF,EACA,CAAC6gN,CAAW,CACd,EAEA,SAAO,OAAC3wK,EAAA,EAAgB,CAAC,KAAAj1C,EAAY,QAAA2N,EAAkB,SAAWke,GAAQA,EAAI,WAAY,CAC5F,ECnDag6L,EAAgB,CAAC,CAAE,MAAAC,CAAM,IAAa,CACjD,MAAMn4M,KAAU,WACd,IAAM,CACJ,CACE,GAAI,UACJ,OAAQ,YACV,EACA,CACE,GAAI,UACJ,OAAQ,eACR,KAAM,CAAC,CACL,IAAK,CACH,SAAU,CAAE,QAAA63C,CAAQ,CACtB,CACF,OAAiC,mBAAG,SAAAA,GAAW,0BAA0B,CAC3E,EACA,CACE,GAAI,WACJ,OAAQ,OACR,KAAM,CAAC,CACL,IAAK,CACH,SAAU,CAAE,SAAAugK,EAAU,QAAAvgK,CAAQ,CAChC,CACF,IAAkCugK,GAAYvgK,EAAUugK,EAAW,EACrE,CACF,EACA,CAAC,CACH,EAEA,SAAO,OAAC9wK,EAAA,EAAgB,CAAC,KAAM6wK,EAAO,QAAAn4M,EAAkB,SAAWke,GAAQA,EAAI,SAAU,CAC3F,EC1Bam6L,EAAe,CAAC,CAAE,SAAAC,CAAS,OAEpC,QAACz0K,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAACk0K,EAAmB,CAAC,KAAMO,EAAS,KAAM,KAC1C,OAACN,EAAmB,CAAC,YAAaM,EAAS,YAAa,EACvDA,EAAS,OAASA,EAAS,MAAM,OAAS,MAAK,OAACR,EAAc,CAAC,OAAQQ,EAAS,MAAO,EAEvFA,EAAS,OAASA,EAAS,MAAM,OAAS,KACzC,OAACJ,EAAa,CAAC,MAAOI,EAAS,MAAO,KAEtC,OAACx0K,EAAA,EAAG,CACF,mBAACC,EAAA,EAAI,CACH,mBAAC,KAAK,CAAC,QAAQ,+BAA+B,mCAAuB,EACvE,EACF,GAEJ,C,uGCZG,MAAMw0K,KAAiB,iBAA8C,MAAS,EAE9E,SAASC,GAAiC,CAC/C,MAAMttM,KAAU,cAAWqtM,CAAc,EACzC,GAAI,CAACrtM,EACH,MAAM,IAAI,MAAM,yBAAyB,EAE3C,OAAOA,CACT,CAIO,SAASutM,GAA8B,CAC5C,KAAM,CAAE,OAAApxF,CAAO,EAAImxF,EAAW,EAC9B,SAAO,eACL,CAAC7iN,EAAe4K,IAAkB,CAChC,KAAM,CAAE,SAAAm4M,EAAU,OAAAhgE,CAAO,EAAI,KAAgB,YAAY,EACzDrxB,EAAO,oBAAoB,CACzB,MAAA1xH,EACA,KAAM4K,GAAQm4M,EAAWhgE,CAC3B,CAAC,CACH,EACA,CAACrxB,CAAM,CACT,CACF,CAIO,SAASsxF,GAA0B,CACxC,KAAM,CAAE,OAAAtxF,CAAO,EAAImxF,EAAW,EAE9B,MAAO,CADOnxF,EAAO,SAAS,EAChB,aAAcA,EAAO,eAAe,CACpD,C,sFCpCO,IAAKuxF,GAAAA,IACVA,EAAA,WAAa,aACbA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,MAAQ,QALEA,IAAAA,GAAA,IASL,MAAMC,EAA8B,CACzC,QACA,QACA,OACA,QACA,YACA,aACA,eACF,EA2KO,IAAKC,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,OAAS,YACTA,EAAA,OAAS,eAHCA,IAAAA,GAAA,IAkBL,MAAMC,EAAe7qN,GAAiC,EAAQA,EAMrE,SAAS8qN,EAAe9qN,EAAuB,CAC7C,OAAOA,CACT,CAQO,SAASs7K,EAASt7K,EAAiC,CACxD,OAAI,OAAOA,GAAU,UAAYA,IAAU,KAGlC,GAGF,EACT,C,8HC5NO,MAAM+qN,EAA0B,CAAC,CACtC,aAAAC,EACA,MAAAvjN,EACA,QAAAq2B,EACA,GAAGmtL,CACL,IAAkE,CAChE,MAAMC,KAAe,KAAE,oCAAqC,oBAAoB,EAChF,SACE,OAAC,IAAM,CAAC,QAAAptL,EAAkB,MAAOr2B,GAASyjN,EAAc,SAAUF,EAChE,mBAAC,IAAW,CAAE,GAAGC,EAAkB,kBAAiB,GAAC,EACvD,CAEJ,EAGME,EAAgB,CAAC,CAAE,QAAAp0M,CAAQ,OAE7B,OAAC,KAAM,CAAC,QAAQ,YAAY,QAAAA,EAAkB,KAAK,SACjD,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,8BAAkB,EACxE,EASSy8L,EAAoB,CAAC,CAAE,SAAAl3K,EAAU,WAAA8uL,EAAY,aAAAJ,EAAc,MAAAvjN,EAAO,aAAA4jN,CAAa,IAAa,CACvG,KAAM,CAACzxK,EAAYvC,CAAa,KAAI,YAAS,EAAK,EAC5Cs9I,EAAc,IAAMt9I,EAAc,EAAK,EACvCq9I,EAAa,IAAMr9I,EAAc,EAAI,EAE3C,SACE,oBACG,UAAAg0K,EAAeA,EAAa,CAAE,QAAS32B,CAAW,CAAC,KAAI,OAACy2B,EAAA,CAAc,QAASz2B,CAAA,CAAY,EAC3F96I,MACC,OAACmxK,EAAA,CACC,SAAAzuL,EACA,WAAA8uL,EACA,aAAAJ,EACA,MAAAvjN,EACA,QAASktL,CAAA,CACX,GAEJ,CAEJ,C,gHCxDO,MAAM22B,KAA4B,iBAA8C,MAAS,EACnFC,KAAiC,iBAAmD,MAAS,EAC7FC,KAAgC,iBAAkD,MAAS,EAC3FC,KAAmC,iBAAqD,MAAS,EAEvG,SAASC,GAA4C,CAC1D,MAAM1uM,KAAU,cAAWsuM,CAAyB,EACpD,GAAI,CAACtuM,EACH,MAAM,IAAI,MAAM,uCAAuC,EAEzD,OAAOA,CACT,CAEO,SAAS2uM,GAAsD,CACpE,MAAM3uM,KAAU,cAAWuuM,CAA8B,EACzD,GAAI,CAACvuM,EACH,MAAM,IAAI,MAAM,4CAA4C,EAE9D,OAAOA,CACT,CAEO,SAAS4uM,GAAoD,CAClE,MAAM5uM,KAAU,cAAWwuM,CAA6B,EACxD,GAAI,CAACxuM,EACH,MAAM,IAAI,MAAM,oCAAoC,EAEtD,OAAOA,CACT,CAEO,SAAS6uM,GAA0D,CACxE,MAAM7uM,KAAU,cAAWyuM,CAAgC,EAC3D,GAAI,CAACzuM,EACH,MAAM,IAAI,MAAM,8CAA8C,EAEhE,OAAOA,CACT,CAEO,MAAM8uM,EAA8B,CAAC,CAC1C,WAAA5uI,EACA,SAAA9zE,CACF,OAEI,OAACkiN,EAA0B,SAA1B,CAAmC,MAAOpuI,EAAW,mBACpD,mBAACquI,EAA+B,SAA/B,CAAwC,MAAOruI,EAAW,wBACzD,mBAACsuI,EAA8B,SAA9B,CAAuC,MAAOtuI,EAAW,uBACxD,mBAACuuI,EAAiC,SAAjC,CAA0C,MAAOvuI,EAAW,0BAC1D,SAAA9zE,CAAA,CACH,EACF,EACF,EACF,C,gPC/CJ,MAAM2iN,EAAa,IAAM,CACvB,MAAMtqJ,KAAS,KAAU,EACnBp0C,KAAK,MAAsBo0C,CAAM,EAEjC,CAACwiB,CAAS,KAAI,MAAa,EAK3BnnC,EAJemnC,IAAc,KAAU,UAIV,OAAY,EAIzCxnC,KAAa,WAAQ,IAAM,CAC/B,GAAI,CAACpvB,EACH,MAAM,IAAI,MAAM,qBAAqB,EAGvC,SAAO,MAAYA,EAAI,EAAI,CAC7B,EAAG,CAACA,CAAE,CAAC,EAGD,CAAE,QAAA9c,EAAS,MAAAG,EAAO,OAAQ+oC,CAAK,KAAI,MAAgB,CAAE,eAAgBgD,EAAY,YAAAK,CAAY,CAAC,EAEpG,OAAIpsC,KAEA,OAAC,IAAmB,CAAC,QAASs7M,EAAgB,MAAM,aAClD,mBAACC,EAAA,CAAa,MAAAv7M,CAAA,CAAc,EAC9B,EAIAH,KACK,OAAC,IAAmB,CAAC,QAASy7M,EAAgB,MAAM,aAAa,UAAW,GAAM,EAGvFvyK,KAEA,OAAC,IAAiB,CAAC,WAAAgD,EAAwB,KAAAhD,EACzC,mBAAC,KAAU,EAAC,EACd,EAKA,CAACA,GAAQ,CAAClpC,KAEV,OAAC,IAAmB,CAAC,QAASy7M,EAAgB,MAAM,aAClD,mBAAC,IAAc,CAAC,OAAO,MAAO,GAChC,EAKG,IACT,EAEaA,EAA+B,CAC1C,GAAI,kBACJ,KAAM,EACR,EAMA,SAASC,EAAa,CAAE,MAAAv7M,CAAM,EAAsB,CAClD,SAAI,MAAaA,CAAK,GAAKA,EAAM,SAAW,OACnC,OAAC,IAAc,CAAC,OAAO,MAAO,MAIrC,OAAC,IAAK,CAAC,SAAO,KAAE,qCAAsC,uCAAuC,EAC1F,kBAAmBA,CAAK,EAC3B,CAEJ,CAEA,WAAe,KAAsBq7M,CAAU,C,0EC/ExC,MAAMG,EAAe,CAAC,CAC3B,SAAA9iN,EACA,OAAA4zC,EACA,iBAAAmvK,EACA,qBAAAC,CACF,IAAkD,CAChD,KAAM,CAAE,QAAA77M,EAAS,UAAA0sC,CAAU,EAAI,gBAAgBD,CAAM,EAErD,OAAIzsC,EACK47M,GAAoB,KAGxBlvK,EAIE,cAAG,SAAA7zC,CAAA,CAAS,EAHVgjN,GAAwB,IAInC,EAEO,SAASC,EAAgBrvK,EAAkBhN,EAAexsC,EAAkC,CACjG,MAAM8oN,EAAe,IAAI,gBAAgB9oN,CAAO,EAAE,SAAS,EAG3D,MAFmB,MAAMw5C,CAAM,GAAGhN,CAAI,IAEjBs8K,EAAe,IAAMA,EAAe,GAC3D,C,iDCpCO,SAASC,EAAan3I,EAA0B,CAErD,MAAM4X,EAAY5X,EAAS,YAAY,GAAG,EACpC1lC,EAAY0lC,EAAS,UAAU4X,CAAS,EACxC70B,EAAOid,EAAS,UAAU,EAAG4X,CAAS,EAE5C,OAAI70B,EAAK,OAAS,GACTid,EAGF,GAAGjd,EAAK,UAAU,EAAG,EAAU,CAAC,MAAMzoB,CAAS,EACxD,C,gECUO,MAAMs3J,EAAY,CAAC,CACxB,KAAA1zK,EACA,YAAA0vK,EACA,kBAAAgC,EACA,UAAA1oL,EACA,UAAAkwM,EACA,MAAAjoN,EACA,UAAAkoN,EACA,YAAA7lB,EACA,YAAA8lB,EACA,OAAAllN,EACA,WAAA+9L,EACA,iBAAA7iM,EACA,eAAA8iM,CACF,IAAa,CACX,MAAMmnB,EAAYr5L,EAAK,aAAa,EAC9BzwB,EAASywB,EAAK,OAAyC,MAE7D,GAAI,CAACzwB,GAAO,QACV,OAAO,KAGT,GAAI8pN,EAAU,MAAO,CACnBA,EAAU,MAAM,UAAY,aAC5BA,EAAU,MAAM,SAAWA,EAAU,MAAM,MAC3C,MAAMC,EAAkBt5L,EAAK,OAAe,eAExCs5L,IAAmB,YAAc,CAAC/pN,EAAM,OAAO,MAEjD8pN,EAAU,MAAM,UAAY,QAC5BA,EAAU,MAAM,UAAY,MAC5BA,EAAU,MAAM,YAAc,aAE9BA,EAAU,MAAM,eAAiBC,CAErC,CAEA,IAAIvnJ,GAAc,OAAO/xC,EAAK,OAAO,OAAU,SAAWA,EAAK,OAAO,MAAQ,IAAM0vK,EAAY,YAAc,EAE9G,MAAMjiM,EAAUwkM,EAAaA,EAAWhhM,EAAO1B,EAAOywB,EAAK,IAAI,MAAO5wB,CAAgB,EAAI,CAAC,EAE3F,SACE,mBACG,SAAA4wB,EAAK,OAAO,OAAQ,CACnB,MAAAzwB,EACA,YAAAmgM,EACA,kBAAAgC,EACA,UAAA2nB,EACA,WAAAtnJ,EACA,UAAA/oD,EACA,UAAAkwM,EACA,MAAAjoN,EACA,UAAAkoN,EACA,YAAA7lB,EACA,YAAA8lB,EACA,OAAAllN,EACA,QAAAzG,EACA,eAAAykM,CACF,CAAC,EACH,CAEJ,C,qOChCO,SAASqnB,EAAwB,CACtC,WAAYC,EACZ,mBAAA73G,EACA,MAAA78E,EACA,cAAA20L,EACA,oBAAAC,EACA,UAAA1wM,EACA,MAAAo0C,EACA,cAAAu8J,EACA,KAAAr7K,EACA,aAAA65J,EACA,QAAAh6J,EACA,gBAAAy7K,EACA,QAAApiN,EACA,cAAAqiN,EACA,iBAAA1hN,EACA,yBAAA2hN,EACA,WAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,cAAA3/J,EACA,mBAAA4/J,EACA,sBAAAC,EACA,2BAAAC,CACF,EAAiC,CAC/B,KAAM,CAAE,MAAOjzL,EAAS,KAAI,KAAS,SAAY,CAC/C,MAAM3L,GAAa,QAAM,KAAiB,EAAE,IAAI+9L,GAAiB,EAAE,EAC7Dc,EAAsB,QAAM,KAAuB7+L,EAAU,EAC7D8wD,EAAe9wD,IAAY,WAAW,kBAAkB,EAE9D,GAAI,CAACqJ,GAASynD,EAAc,CAC1B,MAAMznD,EACJ,OAAOynD,GAAiB,SAAWA,EAAe,CAAE,GAAGA,EAAc,MAAOA,EAAa,OAAS,GAAI,EACxGktI,EAAc30L,CAAK,CACrB,CAEA,MAAO,CAAE,WAAArJ,GAAY,oBAAA6+L,CAAoB,CAC3C,EAAG,CAACd,CAAa,CAAC,EAEZ,CAAE,WAAA/9L,EAAY,oBAAA6+L,EAAoB,EAAIlzL,IAAY,CAAC,EAEzD,SACE,oBACE,oBAAC,IAAc,CACb,mBAAC,KAAK,CAAC,QAAQ,2DAA2D,yBAAa,EACzF,KACA,OAAC,KACC,SAAO,KAAE,+DAAgE,aAAa,EACtF,QAAQ,qBAER,mBAAC,KAAgB,CAAC,QAASoyL,EAAe,SAAU73G,EAAoB,UAAW,GAAM,MAAO,GAAI,EACtG,EAEClmF,GAAc6+L,OACb,OAAC,KACC,cAAAb,EACA,oBAAAC,EACA,WAAAj+L,EACA,MAAAqJ,EACA,oBAAAw1L,GACA,UAAAtxM,CAAA,CACF,KAGF,OAAC,KACC,aAAco0C,GAAS,GACvB,QAAM,KAAE,wDAAyD,OAAO,EACxE,eACE,QAAC,OACC,oBAAC,KAAK,CAAC,QAAQ,kEAAkE,0FAEjF,KACA,OAAC,OAAG,KACJ,QAAC,KAAK,CAAC,QAAQ,kEAAkE,yFAE/E,OAAC,KACC,KAAK,4IACL,SAAQ,GACT,wBAED,EAAW,MAEb,GACF,EAGF,YAAY,mCACZ,OAAQu8J,EACR,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,cAAc,yBACxE,MAAO,GACT,KAEA,OAAC,KACC,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,cAAc,yBACxE,SAAUxhB,EACV,KAAA75J,CAAA,CACF,KAEA,OAAC,KACC,OAAQ,KAAU,MAAM,UAAU,SAAS,UAAU,KAAK,cAAc,4BACxE,SAAUs7K,EACV,QAAAz7K,CAAA,CACF,EAECi8K,GAAyBC,MACxB,OAAC,KACC,cAAA9/J,EACA,mBAAA4/J,EACA,sBAAAC,EACA,2BAAAC,CAAA,CACF,KAGF,OAAC,IAAc,CACb,mBAAC,KAAK,CAAC,QAAQ,+DAA+D,6BAAiB,EACjG,KACA,OAAC,KACC,MAAO,CAAC,CAAC7iN,EACT,WAAY,CAAC,CAACuiN,EACd,iBAAA5hN,EACA,SAAA8hN,EACA,cAAAJ,EACA,mBAAAG,EACA,iBAAAE,EACA,yBAAAJ,CAAA,CACF,GACF,CAEJ,C,+FC7KO,SAASS,EAAiBtpN,EAA8BmC,EAAwD,CACrH,MAAM7D,EAAQ6D,EAAO,SAAQ,MAAUnC,EAAOmC,EAAO,KAAK,EAAInC,GAAO,OAAO,KAAMuc,GAAMA,EAAE,OAAS,KAAU,MAAM,EACnH,OAAOgtM,EAAyBjrN,EAAO6D,CAAM,CAC/C,CAEO,SAASonN,EACdjrN,EACA6D,EAC2B,CAC3B,IAAInB,EAAImB,EAAO,MACf,MAAMwU,EAAOxU,EAAO,MAAQ,KAAkB,MAC9C,GAAIwU,IAAS,KAAkB,MAC7B,MAAO,CACL,UAAW,CAAS3V,EACpB,MAAOA,EACP,MAAO,IAAMA,EACb,IAAMuB,GAAMvB,CACd,EAGF,GAAI2V,IAAS,KAAkB,SAAU,CACvC,MAAMpB,EAAQvU,GACL,YAAYmB,EAAO,KAAK,OAAOnB,CAAC,IAEzC,OAAK1C,EASE,CACL,MAAAA,EACA,IAAMiE,GAAMgT,EAAKjX,EAAM,OAAOiE,CAAC,CAAC,EAChC,MAAO,IAAMgT,KAAK,MAAyBjX,CAAK,CAAC,CACnD,GAZE0C,EAAIuU,EAAK,EAAE,EACJ,CACL,UAAW,GACX,MAAOvU,EACP,MAAO,IAAMA,EACb,IAAMuB,GAAMvB,CACd,EAOJ,CAEA,GAAI,CAAC1C,EACH,MAAO,CACL,UAAW,GACX,MAAO0C,EACP,MAAO,IAAMA,EACb,IAAMuB,GAAMvB,CACd,EAGF,IAAIuU,EAAQvU,MAAe,MAAuB1C,EAAM,QAAS0C,CAAC,CAAC,EACnE,MAAO,CACL,MAAA1C,EACA,IAAMiE,GAAMgT,EAAKjX,EAAM,OAAOiE,CAAC,CAAC,EAChC,MAAO,IAAMgT,KAAK,MAAyBjX,CAAK,CAAC,CACnD,CACF,C,kHC1DO,MAAMi/F,KAAW,MAFC,0BACE,UACiC,EAE/Cp/B,KAAM,MAAU,CAC3B,YAAa,yBACb,aAAWq/B,EAAA,GAAgB,CACzB,QAASD,CACX,CAAC,EACD,UAAW,KAAO,CAAC,EACrB,CAAC,ECdYE,EAAc,CAAC,gBAAiB,cAAe,OAAO,EAC7DC,EAAiBv/B,EACpB,iBAAiB,CAChB,YAAAs/B,CACF,CAAC,EACA,gBAAgB,CACf,UAAYE,IAAW,CACrB,gBAAiBA,EAAM,MAAyD,CAC9E,MAAO,KAAO,CAAE,IAAK,yCAA0C,GAC/D,aAAc,CAAC,eAAe,CAChC,CAAC,EACD,gBAAiBA,EAAM,MAAyD,CAC9E,MAAQC,IAAc,CACpB,IAAK,eACL,OAAQ,CACN,OAAQA,EAAS,OACjB,oBAAqBA,EAAS,oBAC9B,SAAUA,EAAS,SACnB,cAAeA,EAAS,cACxB,cAAeA,EAAS,cACxB,MAAOA,EAAS,MAChB,gBAAiBA,EAAS,gBAC1B,qBAAsBA,EAAS,qBAC/B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,eACzB,MAAOA,EAAS,KAClB,CACF,GACA,aAAc,CAAC,aAAa,CAC9B,CAAC,EACD,kBAAmBD,EAAM,SAAgE,CACvF,MAAQC,IAAc,CACpB,IAAK,eACL,OAAQ,OACR,KAAMA,EAAS,YACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,aAAa,CACjC,CAAC,EACD,kBAAmBD,EAAM,MAA6D,CACpF,MAAO,KAAO,CAAE,IAAK,qBAAsB,GAC3C,aAAc,CAAC,aAAa,CAC9B,CAAC,EACD,eAAgBA,EAAM,MAAuD,CAC3E,MAAQC,IAAc,CACpB,IAAK,gBAAgBA,EAAS,IAAI,GAClC,OAAQ,CACN,OAAQA,EAAS,MACnB,CACF,GACA,aAAc,CAAC,aAAa,CAC9B,CAAC,EACD,mBAAoBD,EAAM,SAAkE,CAC1F,MAAQC,IAAc,CACpB,IAAK,gBAAgBA,EAAS,IAAI,GAClC,OAAQ,MACR,KAAMA,EAAS,YACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,aAAa,CACjC,CAAC,EACD,kBAAmBD,EAAM,SAAgE,CACvF,MAAQC,IAAc,CACpB,IAAK,gBAAgBA,EAAS,IAAI,GAClC,OAAQ,SACR,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,mBAAoBA,EAAS,mBAC7B,iDAAkDA,EAAS,iDAC3D,iBAAkBA,EAAS,iBAC3B,kBAAmBA,EAAS,iBAC9B,CACF,GACA,gBAAiB,CAAC,aAAa,CACjC,CAAC,EACD,kBAAmBD,EAAM,SAAgE,CACvF,MAAQC,IAAc,CACpB,IAAK,gBAAgBA,EAAS,IAAI,GAClC,OAAQ,QACR,KAAMA,EAAS,MACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,gBAC1B,MAAOA,EAAS,KAClB,CACF,GACA,gBAAiB,CAAC,aAAa,CACjC,CAAC,EACD,UAAWD,EAAM,MAA6C,CAC5D,MAAQC,IAAc,CACpB,IAAK,SACL,OAAQ,CACN,OAAQA,EAAS,OACjB,oBAAqBA,EAAS,oBAC9B,SAAUA,EAAS,SACnB,cAAeA,EAAS,cACxB,cAAeA,EAAS,cACxB,MAAOA,EAAS,MAChB,gBAAiBA,EAAS,gBAC1B,qBAAsBA,EAAS,qBAC/B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,eACzB,MAAOA,EAAS,KAClB,CACF,GACA,aAAc,CAAC,OAAO,CACxB,CAAC,EACD,YAAaD,EAAM,SAAoD,CACrE,MAAQC,IAAc,CACpB,IAAK,SACL,OAAQ,OACR,KAAMA,EAAS,MACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,OAAO,CAC3B,CAAC,EACD,sBAAuBD,EAAM,SAAwE,CACnG,MAAQC,IAAc,CACpB,IAAK,SACL,OAAQ,SACR,OAAQ,CACN,OAAQA,EAAS,OACjB,SAAUA,EAAS,SACnB,OAAQA,EAAS,OACjB,cAAeA,EAAS,cACxB,mBAAoBA,EAAS,mBAC7B,iDAAkDA,EAAS,iDAC3D,cAAeA,EAAS,cACxB,MAAOA,EAAS,MAChB,iBAAkBA,EAAS,iBAC3B,kBAAmBA,EAAS,kBAC5B,gBAAiBA,EAAS,gBAC1B,qBAAsBA,EAAS,qBAC/B,kBAAmBA,EAAS,kBAC5B,eAAgBA,EAAS,cAC3B,CACF,GACA,gBAAiB,CAAC,OAAO,CAC3B,CAAC,EACD,SAAUD,EAAM,MAA2C,CACzD,MAAQC,IAAc,CACpB,IAAK,UAAUA,EAAS,IAAI,GAC5B,OAAQ,CACN,OAAQA,EAAS,MACnB,CACF,GACA,aAAc,CAAC,OAAO,CACxB,CAAC,EACD,aAAcD,EAAM,SAAsD,CACxE,MAAQC,IAAc,CACpB,IAAK,UAAUA,EAAS,IAAI,GAC5B,OAAQ,MACR,KAAMA,EAAS,MACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,eAC5B,CACF,GACA,gBAAiB,CAAC,OAAO,CAC3B,CAAC,EACD,YAAaD,EAAM,SAAoD,CACrE,MAAQC,IAAc,CACpB,IAAK,UAAUA,EAAS,IAAI,GAC5B,OAAQ,SACR,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,mBAAoBA,EAAS,mBAC7B,iDAAkDA,EAAS,iDAC3D,iBAAkBA,EAAS,iBAC3B,kBAAmBA,EAAS,iBAC9B,CACF,GACA,gBAAiB,CAAC,OAAO,CAC3B,CAAC,EACD,YAAaD,EAAM,SAAoD,CACrE,MAAQC,IAAc,CACpB,IAAK,UAAUA,EAAS,IAAI,GAC5B,OAAQ,QACR,KAAMA,EAAS,MACf,OAAQ,CACN,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcA,EAAS,aACvB,gBAAiBA,EAAS,gBAC1B,MAAOA,EAAS,KAClB,CACF,GACA,gBAAiB,CAAC,OAAO,CAC3B,CAAC,EACD,QAASD,EAAM,SAA4C,CACzD,MAAQC,IAAc,CACpB,IAAK,UAAUA,EAAS,IAAI,WAAWA,EAAS,KAAK,IAAIA,EAAS,IAAI,IAAIA,EAAS,EAAE,GACrF,OAAQ,KACV,GACA,gBAAiB,CAAC,OAAO,CAC3B,CAAC,EACD,WAAYD,EAAM,SAAkD,CAClE,MAAQC,IAAc,CACpB,IAAK,UAAUA,EAAS,IAAI,WAAWA,EAAS,KAAK,IAAIA,EAAS,IAAI,IAAIA,EAAS,EAAE,GACrF,OAAQ,QACV,GACA,gBAAiB,CAAC,OAAO,CAC3B,CAAC,CACH,GACA,iBAAkB,EACpB,CAAC,EAuiBU,CACX,wBAAAC,EACA,4BAAAC,EACA,wBAAA0rH,EACA,4BAAAC,EACA,6BAAAC,EACA,0BAAAC,EACA,8BAAAC,EACA,uBAAAC,EACA,2BAAAC,EACA,8BAAAC,EACA,6BAAAC,EACA,6BAAAC,EACA,kBAAAC,EACA,sBAAAC,EACA,uBAAAC,EACA,iCAAAC,EACA,iBAAAC,EACA,qBAAAC,EACA,wBAAAC,EACA,uBAAAC,EACA,uBAAAC,EACA,mBAAAC,EACA,sBAAAC,CACF,EAAIltH,EC9xBSkB,EAAe,EAAO,iBAAiB,CAAC,CAAC,C,iDCA/C,IAAKisH,GAAAA,IACVA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,6BACAA,EAAAA,EAAA,+CAHUA,IAAAA,GAAA,G,sNC6BL,MAAMC,CAA2C,CAQtD,YAAoBthF,KAA2B,KAAe,EAAG,CAA7C,iBAAAA,EAPpB,KAAQ,YAA6C,CAAC,EACtD,KAAQ,kBAAgE,CAAC,EACzE,KAAQ,iBAA+D,CAAC,EACxE,KAAQ,gBAA8D,CAAC,EACvE,KAAQ,mBAAwD,CAAC,EACjE,KAAQ,YAAc,EAE4C,CAElE,KAAKuhF,EAA+DC,EAAqB,CACvF,KAAK,YAAc,CAAC,EACpB,KAAK,iBAAmB,CAAC,EACzB,KAAK,kBAAoBD,EACzB,KAAK,YAAcC,EAEnB,UAAW30L,KAAc,OAAO,OAAO00L,CAAiB,EACjD10L,EAAW,MACdA,EAAW,IAAMA,EAAW,MAG9B,KAAK,iBAAiBA,EAAW,GAAG,EAAIA,EACxC,KAAK,gBAAgBA,EAAW,EAAE,EAAIA,EAGxC,UAAWs7B,KAAM,OAAO,OAAO,KAAK,kBAAkB,EACpD,KAAK,YAAYA,EAAG,GAAG,EAAIA,EAC3B,KAAK,iBAAiBA,EAAG,GAAG,EAAIA,EAAG,iBAIrC,KAAK,YAAY,KAAwB,IAAI,EAAI,KAKjD,KAAK,YAAY,IAAuB,EAAI,KAK5C,KAAK,iBAAiB,KAAwB,GAAG,EAAI,KACrD,KAAK,iBAAiB,IAAuB,EAAI,IACnD,CAEA,0BAA0B+e,EAA4C,CACpE,GAAI,KAAK,mBAAmBA,EAAM,WAAW,GAAG,EAC9C,MAAM,IAAI,MAAM,kCAAkCA,EAAM,WAAW,GAAG,8BAA8B,EAEtG,GAAI,KAAK,iBAAiBA,EAAM,WAAW,GAAG,EAC5C,MAAM,IAAI,MAAM,0BAA0BA,EAAM,WAAW,GAAG,8BAA8B,EAG9F,KAAK,mBAAmBA,EAAM,WAAW,GAAG,EAAIA,EAAM,WACtD,KAAK,YAAYA,EAAM,WAAW,GAAG,EAAIA,EAAM,WAC/C,KAAK,iBAAiBA,EAAM,WAAW,GAAG,EAAIA,EAAM,WAAW,gBACjE,CAEA,2BAA2Bh3B,EAAqD,CAC9E,OAAO,KAAK,iBAAiBA,CAAG,CAClC,CAEA,oBACEr8C,EACAe,EACwC,CACxC,IAAI6sN,EAAYC,EAAa7tN,CAAG,EAKhC,MAAI,MAAsB4tN,CAAS,EACjC,OAAO,KAGT,GAAIA,IAAc,WAAaA,GAAa,KAAM,CAEhD,GAAIE,EAAgB9tN,CAAG,GAAKA,EAAI,KAAM,CACpC,MAAMs0D,EAAK,KAAK,qBAAqBt0D,EAAI,IAAI,EAC7C,GAAIs0D,EACF,OAAOA,CAEX,CAEA,OAAO,KAAK,iBAAiB,KAAK,WAAW,GAAK,KAAK,kBAAkB,KAAK,WAAW,CAC3F,CAIA,GAAIs5J,EAAU,CAAC,IAAM,IAAK,CACxB,MAAMG,EAAmB,KAAK,YAAY,QAAQH,EAAW7sN,EAAYitN,CAAqB,EAE9F,IAAIh1L,EAQJ,OANI+0L,IAAqB,UACvB/0L,EAAa,KAAK,kBAAkB,KAAK,WAAW,EAEpDA,EAAa,KAAK,iBAAiB+0L,CAAgB,GAAK,KAAK,kBAAkBA,CAAgB,EAG5F/0L,EAKE,CACL,GAAGA,EACH,UAAW,GACX,KAAM40L,EACN,IAAKA,EACL,OAAQ,CAAE,KAAM50L,EAAW,KAAM,IAAKA,EAAW,GAAI,CACvD,EAVE,MAWJ,CAEA,OAAO,KAAK,iBAAiB40L,CAAS,GAAK,KAAK,kBAAkBA,CAAS,GAAK,KAAK,gBAAgBA,CAAS,CAChH,CAEA,IAAI5tN,EAAqCe,EAAiD,CACxF,IAAI6sN,EAAYC,EAAa7tN,CAAG,EAChC,GAAI,CAAC4tN,EAAW,CAEd,GAAIE,EAAgB9tN,CAAG,GAAKA,EAAI,KAAM,CACpC,MAAMs0D,EAAK,KAAK,qBAAqBt0D,EAAI,IAAI,EAC7C,OAAKs0D,EAGE,KAAK,IAAIA,EAAG,GAAG,EAFb,QAAQ,OAAO,uBAAuB,CAGjD,CACA,OAAO,KAAK,IAAI,KAAK,WAAW,CAClC,CAEA,MAAI,MAAsBt0D,CAAG,EAC3B,OAAO,QAAQ,QAAQ,KAAK,YAAY,IAAuB,CAAC,EAIlE,MAAMiuN,EAAS,KAAK,kBAAkBL,CAAS,EAM/C,OALIK,IACFL,EAAYK,EAAO,KAIjB,KAAK,YAAYL,CAAS,EACrB,QAAQ,QAAQ,KAAK,YAAYA,CAAS,CAAC,GAIpDA,EAAY,KAAK,YAAY,QAAQA,EAAW7sN,EAAYitN,CAAqB,EAE7EJ,IAAc,WAAa,KAAK,cAAgB,UAC3C,KAAK,IAAI,KAAK,WAAW,EAG9B,KAAK,YAAYA,CAAS,EACrB,QAAQ,QAAQ,KAAK,YAAYA,CAAS,CAAC,EAG7C,KAAK,eAAeA,CAAS,EACtC,CAMQ,qBAAqB1vN,EAAsD,CACjF,MAAM26F,EAAW,KAAK,QAAQ,CAAE,KAAA36F,CAAK,CAAC,EACtC,GAAK26F,GAAU,OAGf,OAAOA,EAAS,KAAMl1F,GAAMA,EAAE,SAAS,GAAKk1F,EAAS,CAAC,CACxD,CAEA,MAAM,eAAe/yE,EAAqC,CACxD,GAAI,KAAK,YAAYA,CAAG,EACtB,OAAO,QAAQ,QAAQ,KAAK,YAAYA,CAAG,CAAC,EAI9C,MAAMoe,EAAmB,KAAK,oBAAoBpe,CAAG,EACrD,GAAI,CAACoe,EACH,OAAO,QAAQ,OAAO,CAAE,QAAS,cAAcpe,CAAG,gBAAiB,CAAC,EAGtE,GAAI,CACF,MAAM85H,EAAW,MAAM,IAAe,iBAAiB17G,EAAiB,IAAI,EAE5E,GAAI,KAAK,YAAYpe,CAAG,EACtB,OAAO,KAAK,YAAYA,CAAG,EAG7B,MAAM2H,EAAW,IAAImyH,EAAS,gBAAgB17G,CAAgB,EAS9D,GAPAzW,EAAS,WAAamyH,EAAS,WAC1BnyH,EAAS,cAEZA,EAAS,YAAc,IAAI,IAAYyW,EAAiB,IAAI,GAI1D,EAAEzW,aAAoB,MAAgB,CACxC,MAAMygM,EAAmBzgM,EACzBygM,EAAY,KAAOhqL,EAAiB,KACpCgqL,EAAY,GAAKhqL,EAAiB,GAClCgqL,EAAY,KAAOhqL,EAAiB,KACpCgqL,EAAY,KAAOhqL,EAAiB,KACpCgqL,EAAY,IAAMhqL,EAAiB,IACnCgqL,EAAY,OAAS,KAAc,UAAU,MAC/C,CAGA,YAAK,YAAYpoM,CAAG,EAAI2H,EACxB,KAAK,YAAYA,EAAS,GAAG,EAAIA,EAC1BA,CACT,OAASvS,EAAK,CACZ,OAAIA,aAAe,OACjB,IAAU,KAAK,KAAU,WAAY,CAACgpB,EAAiB,KAAO,iBAAkBhpB,EAAI,SAAS,CAAC,CAAC,EAE1F,QAAQ,OAAO,CAAE,QAAS,eAAe4K,CAAG,gBAAiB,CAAC,CACvE,CACF,CAEA,QAAuC,CACrC,OAAO,OAAO,OAAO,KAAK,iBAAiB,CAC7C,CAEA,QAAQsyE,EAAoC,CAAC,EAAiC,CAC5E,MAAMu2C,EAAO,OAAO,OAAO,KAAK,iBAAiB,EAAE,OAAQ3kH,GAAM,CAsB/D,GArBIA,EAAE,KAAK,KAAO,WAAaA,EAAE,KAAK,KAAO,SAAWA,EAAE,KAAK,KAAO,aAGlEouE,EAAQ,SAAW,CAACpuE,EAAE,KAAK,SAG3BouE,EAAQ,SAAW,CAACpuE,EAAE,KAAK,SAG3BouE,EAAQ,MAAQpuE,EAAE,KAAK,WAAa,WAAa,CAACA,EAAE,KAAK,MAGzDouE,EAAQ,aAAe,CAACpuE,EAAE,KAAK,aAG/BouE,EAAQ,UAAY,CAACpuE,EAAE,KAAK,UAG5BouE,EAAQ,UAAY,IAAC,KAAcA,EAAQ,SAAUpuE,EAAE,IAAI,GAG3DouE,EAAQ,QAAU,CAACA,EAAQ,OAAOpuE,CAAC,EACrC,MAAO,GAET,GAAIouE,EAAQ,MACV,GAAI,MAAM,QAAQA,EAAQ,IAAI,GAC5B,GAAI,CAACA,EAAQ,KAAK,SAASpuE,EAAE,IAAI,EAC/B,MAAO,WAEA,EAAEA,EAAE,OAASouE,EAAQ,MAAQpuE,EAAE,KAAK,UAAU,SAASouE,EAAQ,IAAK,GAC7E,MAAO,GAGX,MACE,GAACA,EAAQ,KACTpuE,EAAE,KAAK,UAAY,IACnBA,EAAE,KAAK,cAAgB,IACvBA,EAAE,KAAK,UAAY,IACnBA,EAAE,KAAK,OAAS,IAChBA,EAAE,KAAK,WAAa,GAKxB,CAAC,EAED,GAAIouE,EAAQ,UACV,UAAWj2F,KAAY,KAAK,YAAY,aAAa,EAAG,CACtD,GAAIA,EAAS,OAAS,aACpB,SAEF,IAAIgsN,EAAUhsN,EAAS,QAAQ,QAAU,UAAY,KAAK,YAAcA,EAAS,QAAQ,MAErF,MAAM,QAAQgsN,CAAO,IAGvBA,EAAUA,EAAQ,CAAC,GAErB,MAAMn1L,EACJ,CAAC,MAAM,QAAQm1L,CAAO,IAAM,KAAK,kBAAkBA,CAAO,GAAK,KAAK,iBAAiBA,CAAO,GAE9F,GAAIn1L,EAAY,CACd,MAAMlT,EAAM,MAAM3jB,EAAS,IAAI,IAC/BwsI,EAAK,KAAK,CACR,GAAG31G,EACH,UAAW,GACX,KAAMlT,EACN,IAAKA,CACP,CAAC,CACH,CACF,CAGF,MAAMsoM,EAASz/E,EAAK,KAAK,CAACvrH,EAAG9e,IACvB8e,EAAE,KAAK,YAAY,EAAI9e,EAAE,KAAK,YAAY,EACrC,EAEL8e,EAAE,KAAK,YAAY,EAAI9e,EAAE,KAAK,YAAY,EACrC,GAEF,CACR,EAED,GAAI,CAAC8zF,EAAQ,UAAY,CAACA,EAAQ,SAAU,CAC1C,GAAIA,EAAQ,MAAO,CACjB,MAAMi2H,EAAwB,KAAK,oBAAoB,aAAa,EAChEA,GACF1/E,EAAK,KAAK0/E,CAAqB,CAEnC,CAEA,GAAIj2H,EAAQ,UAAW,CACrB,MAAMk2H,EAA4B,KAAK,oBAAoB,iBAAiB,EACxEA,GACF3/E,EAAK,KAAK2/E,CAAyB,CAEvC,CAEA,GAAI,CAACl2H,EAAQ,QAAS,CACpB,MAAMm2H,EAA0B,KAAK,oBAAoB,eAAe,EACpEA,GAA2Bn2H,EAAQ,SAASm2H,CAAuB,IAAM,IAC3E5/E,EAAK,KAAK4/E,CAAuB,CAErC,CACF,CAEA,OAAOH,CACT,CAKA,aAA4C,CAC1C,OAAO,KAAK,QAAQ,CACtB,CAKA,sBAAuB,CACrB,OAAO,KAAK,QAAQ,CAAE,YAAa,GAAM,UAAW,EAAK,CAAC,EAAE,IAAKpkM,IACxD,CACL,KAAMA,EAAE,KACR,MAAOA,EAAE,KACT,KAAMA,EAAE,IACV,EACD,CACH,CAKA,iBAAiBpoB,EAA+D,CAC9E,OAAO,KAAK,QAAQ,CAAE,QAAS,GAAM,UAAW,CAACA,GAAS,aAAc,CAAC,EAAE,IAAKooB,IACvE,CACL,KAAMA,EAAE,KACR,MAAOA,EAAE,KACT,KAAMA,EAAE,IACV,EACD,CACH,CAEA,MAAM,QAAS,CACb,MAAM6uE,EAAW,QAAM,MAAc,EAAE,IAAI,wBAAwB,EACnE,KAAO,YAAcA,EAAS,YAC9B,KAAO,kBAAoBA,EAAS,kBACpC,KAAK,KAAKA,EAAS,YAAaA,EAAS,iBAAiB,CAC5D,CACF,CAEO,SAASg1H,EAAa7tN,EAAyD,CACpF,SAAI,MAAsBA,CAAG,EACpB,KAAwB,IAGhB,OAAOA,GAAQ,SACdA,EAAMA,GAAK,GAC/B,CAEO,SAASguN,EAAyB5vN,EAAgB,CACvD,OAAI,MAAM,QAAQA,CAAK,EACdA,EAAM,CAAC,EAETA,CACT,CAEA,MAAM0vN,EAAmB9tN,GACnB,GAAAA,MAAO,MAASA,CAAG,GAAK,SAAUA,GAM3BwuN,EAAmB,OACvB,KAAqB,C,gEChb9B,QAAe,G,iGCQR,MAAMC,EAAc,CAAC,CAAE,cAAAzyB,EAAgB,UAAW,SAAAh+L,EAAU,YAAAmwC,CAAY,IAAa,CAC1F,MAAMugL,EAA+C,CACnD,CACE,SAAO,KAAE,mCAAoC,SAAS,EACtD,MAAO,SACT,EACA,CACE,SAAO,KAAE,gCAAiC,MAAM,EAChD,MAAO,MACT,EACA,CACE,SAAO,KAAE,iCAAkC,OAAO,EAClD,MAAO,OACT,CACF,EAEA,SACE,OAAC,IAAK,CAAC,SAAO,KAAE,sCAAuC,OAAO,EAAG,YAAAvgL,EAC/D,mBAAC,IAAgB,CAAC,QAASugL,EAAc,MAAO1yB,EAAe,SAAAh+L,CAAA,CAAoB,EACrF,CAEJ,C,gECvBO,SAAS2wN,EAA0B1lK,EAAmC,CAC3E,OAAOA,GAAaA,IAAc,KAAsB,OAASA,IAAc,KAAsB,QACvG,C,2XCUA,MAAM0M,EAAa,GAMbi5J,EAAyB1wN,GAAuD,CACpF,MAAMiwC,EAAc,KAAgB,KAAK,CAAC,CAAE,MAAA/vC,CAAM,IAAMA,IAAUF,CAAI,GAAG,YAEzE,OAAQA,EAAM,CACZ,KAAK,KAAoB,IACvB,SACE,OAAC,KAAK,CAAC,QAAQ,sDAAsD,gPAIrE,EAEJ,QACE,OAAOiwC,GAAe,EAC1B,CACF,EAEA,SAAS0gL,GAAsB,CAC7B,MAAMC,KAAkB,UAAoC,CAAC,CAAC,EAExDC,KAAsB,eAAa/oG,GAAmC,CAC1E,OAAQA,EAAW,CACjB,KAAK,KAAoB,KACzB,KAAK,KAAoB,OACzB,KAAK,KAAoB,SACzB,KAAK,KAAoB,UACzB,KAAK,KAAoB,IACvB,OAAO8oG,EAAgB,QAAQ9oG,CAAS,EAC1C,KAAK,KAAoB,QACvB,MACJ,CACF,EAAG,CAAC,CAAC,EAECgpG,KAAsB,eAAY,CAAChpG,EAAgC5nH,KAA8B,CACrG,OAAQ4nH,EAAW,CACjB,KAAK,KAAoB,KACvB8oG,EAAgB,QAAQ,KAAO1wN,GAC/B,MAGF,KAAK,KAAoB,OACzB,KAAK,KAAoB,SACzB,KAAK,KAAoB,UACvB0wN,EAAgB,QAAQ,OAAS1wN,GACjC0wN,EAAgB,QAAQ,SAAW1wN,GACnC0wN,EAAgB,QAAQ,UAAY1wN,GACpC,MACF,KAAK,KAAoB,IACvB0wN,EAAgB,QAAQ,IAAM1wN,EAClC,CACF,EAAG,CAAC,CAAC,EAEL,MAAO,CAAE,oBAAA2wN,EAAqB,oBAAAC,CAAoB,CACpD,CAEO,SAASC,EAAsB7nN,EAAmC,CACvE,KAAM,CAAE,MAAAovB,EAAO,QAAA7I,EAAS,WAAAmvF,EAAY,SAAA9+G,GAAU,IAAA2wC,CAAI,EAAIvnC,EAChD,CAAE,oBAAA2nN,GAAqB,oBAAAC,EAAoB,EAAIH,EAAoB,EAEnE1mN,KAAS,MAAWuD,CAAS,EAE7BwjN,KAAuB,UAAO14L,EAAM,UAAU,EAC9C24L,KAA0B,UAAO,EAAK,KAE5C,aAAU,IAAM,CAGV34L,EAAM,MAAQ,CAAC24L,EAAwB,SAAW,CAACD,EAAqB,aAC1E,MAAkB,oCAAqC,CACrD,OAAQ,iBACR,gBAAiB14L,EAAM,KACvB,QAAS,qBACX,CAAC,EACD24L,EAAwB,QAAU,GAEtC,EAAG,CAAC34L,EAAM,KAAMA,EAAM,KAAK,CAAC,KAE5B,aAAU,IAAM,CACdw4L,GAAoBx4L,EAAM,KAAMA,EAAM,UAAU,CAClD,EAAG,CAACA,EAAM,WAAYA,EAAM,KAAMw4L,EAAmB,CAAC,EAEtD,MAAMI,KAAyB,eAC5BhxN,IAA+B,CAC9B,MAAMixN,EAAmBN,GAAoB3wN,EAAM,EAC7Cu6D,MAAW,MAAY,CAAE,GAAGniC,EAAO,KAAMp4B,EAAO,CAAC,EAEvDJ,GAAS,CAAE,GAAG26D,GAAU,WAAY02J,GAAoB12J,GAAS,UAAW,CAAC,CAC/E,EACA,CAACniC,EAAOx4B,GAAU+wN,EAAmB,CACvC,EAEMO,GAAuB,IAAM,CACjC,MAAM15J,GAASjoC,EAAS,OAAQgJ,GAAMH,EAAM,QAAUG,EAAE,KAAK,EAAE,IAAKA,IAAO,CAAE,MAAOA,EAAE,MAAO,MAAOA,EAAE,KAAM,EAAE,EAE9G,OAAQH,EAAM,KAAM,CAClB,KAAK,KAAoB,KACvB,SAAO,OAAC,IAAI,CAAC,SAAAx4B,GAAoB,MAAAw4B,EAAc,WAAAm/B,EAAwB,WAAAmnD,CAAA,CAAwB,EAEjG,KAAK,KAAoB,OACvB,SAAO,OAACyyG,EAAA,EAAM,CAAC,OAAA35J,GAAgB,SAAA53D,GAAoB,WAAA23D,EAAwB,MAAAn/B,EAAc,IAAAmY,CAAA,CAAU,EAErG,KAAK,KAAoB,SACvB,SAAO,OAAC+mB,EAAA,EAAQ,CAAC,MAAAl/B,EAAc,WAAAm/B,EAAwB,SAAA33D,GAAoB,OAAA43D,EAAA,CAAgB,EAE7F,KAAK,KAAoB,QACvB,SAAO,OAAC45J,EAAA,EAAiB,CAAC,SAAAxxN,GAAoB,MAAAw4B,EAAc,OAAAo/B,EAAA,CAAgB,EAE9E,KAAK,KAAoB,UACvB,SAAO,OAAC65J,EAAA,EAAS,CAAC,SAAAzxN,GAAoB,MAAAw4B,EAAc,WAAAm/B,EAAwB,OAAAC,EAAA,CAAgB,EAE9F,KAAK,KAAoB,IACvB,SACE,OAAC85J,EAAA,GACC,SAAA1xN,GACA,MAAAw4B,EACA,OAAAo/B,GACA,QAAAjoC,EACA,SAAUvmB,EACV,WAAA01G,CAAA,CACF,CAEN,CACF,EAEM6yG,GAAaf,EAAsBp4L,EAAM,IAAI,EAEnD,SACE,QAAC,OACC,qBAAC,OAAI,UAAWruB,EAAO,aACrB,oBAAC8J,EAAA,GACC,SAAO,KAAE,sDAAuD,WAAW,EAC3E,WAAA0jD,EAEA,mBAACu7H,EAAA,EAAsB,CAAC,eAAgBk+B,EACtC,mBAAChiN,EAAA,GAAM,CAAC,KAAK,UAAU,KAAK,aAAa,cAAc,QAAQ,QAAQ,YACpE,cAAgB,KAAK,CAAC,CAAE,MAAAhP,EAAM,IAAMA,KAAUo4B,EAAM,IAAI,GAAG,MAC9D,EACF,EACF,EACCm5L,OAAc,OAAC/8K,EAAA,EAAU,CAAC,UAAWzqC,EAAO,SAAU,KAAK,cAAc,QAASwnN,EAAA,CAAY,GACjG,EACCL,GAAqB,GACxB,CAEJ,CAEA,MAAM5jN,EAAanF,IAA0B,CAC3C,gBAAc,OAAI,CAChB,QAAS,OACT,WAAY,SACZ,IAAKA,EAAM,QAAQ,CAAC,CACtB,CAAC,EACD,YAAU,OAAI,CACZ,aAAcA,EAAM,QAAQ,EAAG,CACjC,CAAC,CACH,GCrJO,MAAMqpN,UAAgC1jF,EAAA,EAAuC,CAClF,YAAmBhoG,EAA8C,CAC/D,MAAMA,CAAgB,EADL,sBAAAA,CAEnB,CAEA,uBAAuB1N,EAAwBz1B,EAAwB,CACrE,MAAMorI,KAAc,KAAe,EACnC,MAAO,CACL,GAAG31G,EACH,WAAY21G,EAAY,QAAQ31G,EAAM,WAAYz1B,CAAU,EAC5D,OAAQorI,EAAY,QAAQ31G,EAAM,OAAQz1B,CAAU,CACtD,CACF,CAEA,iBAAiBy1B,EAAwB,CACvC,MAAO,eAAeA,EAAM,IAAI,EAClC,CAEA,MAAMq9D,EAA2E,CAC/E,IAAI1F,EAAU0F,EAAQ,QAAQ,IAAI,MAAOr9D,IAAqD,CAC5F,MAAM89B,EAAK,QAAM,KAAiB,EAAE,IAAI99B,GAAM,UAAU,EAExD,OAAK89B,EAAG,8BAIDA,GAAI,8BAA8B,CAAC99B,EAAK,EAAGq9D,EAAQ,WAAYA,EAAQ,OAAO,EAAE,CAAC,EAH/Er9D,EAIX,CAAC,EAGD,SADUnH,EAAA,GAAK,QAAQ,IAAI8+D,CAAO,CAAC,EACxB,QAAKkpE,EAAA,GAAUvzJ,IAAM,MAAM,MAAM,CAAE,GAAG+vF,EAAS,QAAS/vF,EAAE,CAAC,CAAC,CAAC,CAC1E,CAEA,SAAS0yB,EAAmD,CAC1D,MAAO,CACL,MAAO,KACP,WAAY,KACZ,KAAMA,GAAO,MAAQ,KAAoB,KACzC,GAAGA,CACL,CACF,CAEA,oBAAoBq9D,EAA4BrnF,EAAkBmhB,EAA0C,CAC1G,MAAM8gC,GAAQolC,EAAQ,OAAS,OACzBg8H,EAA0C,CAC9C,OAAQ,GACR,KAAM,GACN,WAAYh8H,EAAQ,OACpB,WAAY,KACZ,MAAAplC,GACA,KAAM,KAAoB,GAC5B,EACA,SAAOsuD,EAAA,MACL,MAAc,EACX,MAAiC,CAChC,IAAK,gBACL,OAAQ,OACR,QAAS,KAAK,kBAAkB,EAChC,KAAM,CACJ,KAAMvwG,EAAM,KAAK,QAAQ,EAAE,SAAS,EACpC,GAAIA,EAAM,GAAG,QAAQ,EAAE,SAAS,EAChC,QAAS,CAAC,GAAGmhB,EAASkiM,CAAsB,CAC9C,EACA,UAAWphK,EACb,CAAC,EACA,QACCg+E,EAAA,GAAKhkG,OACS,MAAoBA,GAAK9a,CAAO,EACjC,KAAK,CAAC,GAAK,CAAE,OAAQ,CAAC,CAAE,CACpC,CACH,CACJ,CACF,CACF,CAEO,MAAMuW,EAA+C,CAC1D,GAAI,KACJ,IAAK,KACL,KAAM,KAAwB,KAC9B,KAAM,KAAwB,KAC9B,OAAQ,QACR,KAAM,CACJ,QAAS,GACT,OAAQ,GACR,KAAM,KAAW,WACjB,KAAM,KAAwB,KAC9B,GAAI,KAAwB,KAC5B,KAAM,CACJ,OAAQ,CACN,KAAM,cACR,EACA,MAAO,CACL,MAAO,EACP,MAAO,CACT,EACA,YAAa,qCACb,YAAa,CAAC,EACd,MAAO,CAAC,EACR,QAAS,GACT,QAAS,EACX,CACF,EACA,SAAU,CAAC,EACX,SAAU,EACZ,EAEa+qC,EAAa,IAAI2gJ,EAAwB1rL,CAAgB,EACtE+qC,EAAW,KAAO,CAChB,GAAI,KAAwB,KAC5B,KAAM,CACJ,MAAO,CACL,MAAO,EACP,MAAO,CACT,CACF,CACF,EACAA,EAAW,WAAa,CACtB,YAAaggJ,CACf,C,qLCvIO,SAASa,EAAuB,CAAE,MAAAlhM,CAAM,EAAwC,CACrF,KAAM,CAAE,SAAApnB,EAAU,SAAAuoN,CAAS,EAAInhM,EAAM,SAAS,EACxCzmB,KAAS,MAAWuD,EAAWkjB,EAAM,KAAK,EAC1C,CAAE,mBAAAyjF,EAAoB,UAAAz+E,CAAU,KAAI,MAAkBhF,CAAK,EAC3D0pC,EAAgB,KAAW,YAAY1pC,EAAOib,EAAA,EAAqB,EACnE,CAAE,WAAA2uB,CAAW,EAAIF,EAAc,SAAS,EACxCq5C,KAAmB,MAAoB,EAE7C,GAAIo+G,GAAY,CAAC19G,EACf,OAAO,KAGT,MAAMt9E,EAAoB,IAAC,MAAuBnG,CAAK,GAAKgF,EAE5D,OAAI+9E,EACKnqG,EAAS,IAAK2L,MAAS,OAACA,EAAK,UAAL,CAAoC,MAAOA,CAAA,EAAvBA,EAAK,MAAM,GAAkB,CAAE,KAIlF,QAAC,OACC,aAAW,MAAGhL,EAAO,UAAWqwD,GAAcrwD,EAAO,oBAAqByrB,GAAazrB,EAAO,gBAAgB,EAC9G,IAAKymB,EAAM,aAEV,UAAApnB,EAAS,IAAK2L,MACb,OAACA,EAAK,UAAL,CAAoC,MAAOA,CAAA,EAAvBA,EAAK,MAAM,GAAkB,CACnD,EACA4hB,MAAqB,OAACE,EAAA,EAAoB,CAAC,cAAAqjC,CAAA,CAA8B,GAC5E,CAEJ,CAEA,MAAM5sD,EAAY,CAACnF,EAAsBsa,KAAgC,CACvE,aAAW,OAAI,CACb,QAAS,OACT,SAAU,WACV,oBAAqBA,EAAM,gBAC3B,iBAAkBA,EAAM,cAAgB,QACxC,aAAcA,EAAM,UAAY,QAChC,OAAQta,EAAM,QAAQsa,EAAM,QAAU,CAAC,EACvC,UAAWta,EAAM,QAAQsa,EAAM,WAAa,CAAC,EAC7C,aAAcA,EAAM,cAAgB,QACpC,WAAYA,EAAM,YAAc,QAChC,eAAgBA,EAAM,gBAAkB,QACxC,CAACta,EAAM,YAAY,KAAK,IAAI,CAAC,EAAGsa,EAAM,GAClC,CACE,iBAAkBA,EAAM,GAAG,aAC3B,oBAAqBA,EAAM,GAAG,gBAC9B,OAAQA,EAAM,GAAG,OAASta,EAAM,QAAQsa,EAAM,GAAG,QAAU,CAAC,EAAI,OAChE,UAAWA,EAAM,GAAG,UAAYta,EAAM,QAAQsa,EAAM,GAAG,QAAU,CAAC,EAAI,OACtE,aAAcA,EAAM,GAAG,aACvB,WAAYA,EAAM,GAAG,WACrB,eAAgBA,EAAM,GAAG,cAC3B,EACA,OAEJ,GAAG,GACL,CAAC,EACD,uBAAqB,OAAI,CAAE,SAAU,CAAE,CAAC,EACxC,oBAAkB,OAAI,CAAE,cAAeta,EAAM,QAAQ,CAAC,EAAG,SAAU,UAAW,CAAC,CACjF,G,eClBO,MAAMojF,UAAuB,IAA4D,CAYvF,YAAY9oE,EAAqC,CACtD,MAAM,CACJ,OAAQ,EACR,UAAW,EACX,gBAAiB,uCACjB,SAAUA,EAAM,UAAY,QAC5B,SAAUA,EAAM,UAAY,CAAC,EAC7B,GAAGA,CACL,CAAC,EAjBH,KAAO,gBAAe,aAA0B,EAChD,KAAQ,iBAAwC,KAChD,KAAQ,yBAKG,KAYT,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EAErC,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CA1BA,YAAc,UAAYivM,CAAA,CA4BlB,oBAAqB,CAC3B,MAAO,IAAM,CACX,KAAK,2BAA2B,EAChC,SAAS,KAAK,oBAAoB,cAAe,KAAK,OAAO,EAC7D,SAAS,KAAK,oBAAoB,YAAa,KAAK,UAAU,EAC9D,SAAS,KAAK,UAAU,OAAO,2CAA2C,CAC5E,CACF,CAEO,aAAuB,CAC5B,SAAI,MAAuB,IAAI,EACtB,GAGF,KAAK,MAAM,aAAe,EACnC,CAEO,cAAuB,CAC5B,MAAO,oBAAoB,KAAK,MAAM,GAAG,EAC3C,CAEO,oBAA6B,CAClC,MAAO,kBACT,CAEO,cAAe,CACpB,MAAO,CACL,YAAa,KAAK,YACpB,CACF,CAEQ,SAAS9hN,EAAiC,CAKhD,MAJI,CAAC,KAAK,YAAY,GAIlB,EAAEA,EAAI,kBAAkB,SACnB,GAGF,CAAC,CAACA,EAAI,OAAO,QAAQ,IAAI,KAAK,aAAa,CAAC,EAAE,GAAK,CAACA,EAAI,OAAO,QAAQ,IAAI,KAAK,mBAAmB,CAAC,EAAE,CAC/G,CAGQ,aAAaA,EAAwBvM,EAAiB,CAC5D,GAAI,CAAC,KAAK,SAASuM,CAAG,EACpB,OAMF,GAHAA,EAAI,eAAe,EACnBA,EAAI,gBAAgB,EAEhB,EAAEvM,EAAM,kBAAkBgzB,EAAA,GAC5B,MAAM,IAAI,MAAM,qBAAqB,EAGvC,KAAK,iBAAmBhzB,EAAM,OAE9B,KAAM,CAAE,IAAA0f,EAAK,KAAAD,EAAM,MAAAvb,EAAO,OAAAC,CAAO,EAAI,KAAK,iBAAiB,eAAe,EAC1E,KAAK,yBAA2B,CAAE,MAAOoI,EAAI,MAAO,MAAOA,EAAI,MAAO,IAAAmT,EAAK,KAAAD,CAAW,EACtF,KAAK,iBAAiBvb,EAAOC,CAAM,EACnC,KAAK,qBAAqBub,EAAKD,CAAI,EAEnC,KAAK,SAAS,CAAE,YAAa,KAAK,iBAAiB,MAAM,GAAI,CAAC,EAE9D,SAAS,KAAK,iBAAiB,cAAe,KAAK,OAAO,EAC1D,SAAS,KAAK,iBAAiB,YAAa,KAAK,UAAU,EAC3D,SAAS,KAAK,UAAU,IAAI,2CAA2C,KAEvE,MAAyB,IAAI,GAAG,kBAAkBlT,EAAKvM,CAAK,CAC9D,CAGQ,YAAa,CACnB,OAAO,aAAa,GAAG,gBAAgB,EAEvC,KAAK,iBAAmB,KACxB,KAAK,yBAA2B,KAChC,KAAK,2BAA2B,EAEhC,KAAK,SAAS,CAAE,YAAa,MAAU,CAAC,EAExC,SAAS,KAAK,oBAAoB,cAAe,KAAK,OAAO,EAC7D,SAAS,KAAK,oBAAoB,YAAa,KAAK,UAAU,EAC9D,SAAS,KAAK,UAAU,OAAO,2CAA2C,CAC5E,CAGQ,QAAQuM,EAAmB,CACjC,GAAI,CAAC,KAAK,kBAAoB,CAAC,KAAK,yBAA0B,CAC5D,KAAK,WAAW,EAChB,MACF,CAEA,KAAK,qBACH,KAAK,yBAAyB,KAAOA,EAAI,MAAQ,KAAK,yBAAyB,OAC/E,KAAK,yBAAyB,MAAQA,EAAI,MAAQ,KAAK,yBAAyB,MAClF,EAEA,MAAMgiN,EAAwB,SAC3B,kBAAkBhiN,EAAI,QAASA,EAAI,OAAO,GACzC,KAAMwvE,GAAY,CAClB,MAAM13D,EAAM03D,EAAQ,aAAa,iCAAiC,EAElE,MAAO,CAAC,CAAC13D,GAAOA,IAAQ,KAAK,iBAAkB,MAAM,GACvD,CAAC,GACC,aAAa,iCAAiC,EAE9CkqM,GACF,KAAK,gBAAgBA,CAAqB,CAE9C,CAGQ,gBAAgBlqM,EAAa,CACnC,MAAMte,EAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,EAClCyoN,EAAazoN,EAAS,UAAWsqB,GAAUA,IAAU,KAAK,gBAAgB,EAC1Eo+L,EAAiB1oN,EAAS,UAAWsqB,GAAUA,EAAM,MAAM,MAAQhM,CAAG,EAExEmqM,IAAe,IAAMC,IAAmB,KAI5C1oN,EAAS,OAAOyoN,EAAY,CAAC,EAC7BzoN,EAAS,OAAO0oN,EAAgB,EAAG,KAAK,gBAAiB,EAEzD,KAAK,SAAS,CAAE,SAAA1oN,CAAS,CAAC,EAC5B,CAEQ,qBAAqB2Z,EAAaD,EAAc,CACtD,KAAK,mBAAmB,KAAkB,GAAGC,CAAG,IAAI,EACpD,KAAK,mBAAmB,KAAmB,GAAGD,CAAI,IAAI,CACxD,CAEQ,iBAAiBvb,EAAeC,EAAgB,CACtD,KAAK,mBAAmB,KAAoB,GAAG,KAAK,MAAMD,CAAK,CAAC,IAAI,EACpE,KAAK,mBAAmB,KAAqB,GAAG,KAAK,MAAMC,CAAM,CAAC,IAAI,CACxE,CAEQ,4BAA6B,CACnC,KAAK,sBAAsB,IAAgB,EAC3C,KAAK,sBAAsB,IAAiB,EAC5C,KAAK,sBAAsB,IAAkB,EAC7C,KAAK,sBAAsB,IAAmB,CAChD,CAEQ,mBAAmB4O,EAAcpW,EAAe,CACtD,KAAK,aAAa,SAAS,MAAM,YAAYoW,EAAMpW,CAAK,CAC1D,CAEQ,sBAAsBoW,EAAc,CAC1C,KAAK,aAAa,SAAS,MAAM,eAAeA,CAAI,CACtD,CACF,C,kHCpOO,MAAM27M,EAAuB,CAAC1rN,EAAiC7C,IAAwC,CAC5G,MAAMi+D,EAAS,IAAI,gBAAgB,CAAC,CAAC,SAAUp7D,EAAO,IAAI,CAAC,CAACqhB,EAAK1nB,CAAK,IAAM,GAAG0nB,CAAG,KAAK1nB,CAAK,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAC5G,SAAO,KAAkB,iBAAkByhE,EAAQ,CAAE,YAAaj+D,GAAS,WAAY,CAAC,CAC1F,EAEawuN,EAAoB,CAAChhK,EAAsC,CAAC,EAAGxtD,OAC1E,KAAkB,iBAAkBwtD,EAAa,CAAE,YAAaxtD,GAAS,WAAY,CAAC,EAE3EwvE,EAAS,CACpB,gBAAiB,CAACi/I,EAAeC,EAAqBC,EAAmB3uN,IAA2C,CAClH,MAAMi+D,EAAiCj+D,GAAS,gBAAkB,CAAE,YAAU,KAAe,CAAE,EAAI,CAAC,EAEpG,SAAO,KACL,aAAayuN,CAAK,eAAe,mBAAmBC,CAAW,CAAC,WAAW,mBAAmBC,CAAS,CAAC,QACxG1wJ,CACF,CACF,EACA,mCAAqC1nB,GAA2C,CAC9E,KAAM,CAAE,YAAAq4K,EAAa,UAAAr2K,EAAW,UAAAo2K,CAAU,EAAIp4K,EAG9C,OAFwBq4K,IAAgB,UAGpCp/I,EAAO,gBAAgB,UAAWj3B,EAAU,IAAKo2K,CAAS,EAC1Dn/I,EAAO,gBAAgBj5B,EAAgB,YAAY,IAAKgC,EAAU,KAAMo2K,CAAS,CACvF,EACA,aAAc,CACZF,EACAC,EACAC,EACA3uN,IACG,CACH,MAAMi+D,EAAiCj+D,GAAS,gBAAkB,CAAE,YAAU,KAAe,CAAE,EAAI,CAAC,EACpG,SAAO,KACL,aAAayuN,CAAK,eAAe,mBAAmBC,CAAW,CAAC,WAAW,mBAAmBC,CAAS,CAAC,QACxG1wJ,EACA,CAAE,YAAaj+D,GAAS,WAAY,CACtC,CACF,EACA,iBAAkB,CAAConG,EAAqB1C,EAAoBiqH,IAAuB,CACjF,MAAMz3F,KAAW,KAAe,EAE1BngE,EAAW,KAAK,UAAU,CAC9B,OAAQ,CACN,MAAOqwC,EACP,IAAK1C,CACP,EACA,MAAOiqH,CACT,CAAC,EAED,SAAO,KAAkB,gBAAiB,CAAE,SAAA53J,EAAU,SAAAmgE,CAAS,CAAC,CAClE,EACA,qBAAsB,CAAC9vB,EAAqB1C,EAAoBiqH,IAAuB,CACrF,MAAMz3F,KAAW,KAAe,EAE1BngE,EAAW,KAAK,UAAU,CAC9B,OAAQ,CACN,MAAOqwC,EACP,IAAK1C,CACP,EACA,MAAOiqH,CACT,CAAC,EAED,SAAO,KAAkB,kCAAmC,CAAE,SAAA53J,EAAU,SAAAmgE,CAAS,CAAC,CACpF,CACF,EAEa23F,EAAW,CAItB,gBAAiB,CACf3xN,EACA21C,EACAorB,EACAj+D,OAEA,KACE,aAAa,mBAAmB9C,CAAe,CAAC,IAAI,sBAAmB,MAAoB21C,CAAc,CAAC,CAAC,QAC3GorB,EACA,CAAE,YAAaj+D,GAAS,WAAY,CACtC,CACJ,EAEa8uN,EAAuB,CAClC,SAAU,CAACrnD,EAA2B9sG,OAC7B,KAAkB,mBAAoB,CAC3C,YAAa8sG,EAAS,IAAKjuI,GAAYA,EAAQ,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,EACjE,aAAcmhC,GAA0B,SAC1C,CAAC,CAEL,C,khBC3CA,SAASo0J,EAAmB94K,GAAoE,CAC9F,OAAO,OAAOA,IAAS,UAAY,kBAAmBA,EACxD,CAEA,SAAS+4K,EAAsB/4K,GAAiF,CAC9G,OAAO84K,EAAmB94K,EAAI,GAAK,CAAC+uH,EAAuB/uH,EAAI,CACjE,CAEA,SAAS+uH,EAAuB/uH,GAAkF,CAChH,OAAO84K,EAAmB94K,EAAI,GAAK,WAAYA,GAAK,aACtD,CAEO,SAASg5K,EAAah5K,GAA2B,CACtD,MAAO,EAAQA,GAAK,cAAc,SACpC,CAIA,SAASi5K,EAAoBj5K,GAAmD,CAC9E,OAAO,OAAOA,IAAS,UAAY,UAAWA,EAChD,CAEA,SAASk5K,EAAiBl5K,GAAkE,CAC1F,OAAO,OAAOA,IAAS,UAAY,CAAC84K,EAAmB94K,EAAI,CAC7D,CAEA,SAASm5K,EAA0Bn5K,GAAoD,CACrF,OAAO,OAAOA,IAAS,UAAY,WAAYA,EACjD,CACO,SAASo5K,EACdxyC,GACwD,CACxD,OAAOA,GAAe,MAAM,MAAOx7J,IAAM8tM,EAAiB9tM,EAAC,CAAC,CAC9D,CAIA,SAASyvH,EAAe76F,GAAmC,CACzD,OAAO,OAAOA,IAAS,UAAYA,GAAK,OAAS,KAAa,QAChE,CAEA,SAASyvH,EAAgBzvH,GAAoC,CAC3D,OAAO,OAAOA,IAAS,UAAYA,GAAK,OAAS,KAAa,SAChE,CAEA,SAASq5K,EAA0Br5K,GAAiD,CAClF,OAAO66F,EAAe76F,EAAI,GAAK,cAAeA,IAAQ,QAASA,EACjE,CAEA,SAASs5K,EAA2Bt5K,GAAkD,CACpF,OAAOyvH,EAAgBzvH,EAAI,GAAK,cAAeA,IAAQ,QAASA,EAClE,CAEO,MAAMu5K,EAAgB,CAC3B,QAAS,CACP,KAAMT,EACN,aAAcC,EACd,cAAehqD,CACjB,EACA,WAAY,CACV,KAAMmqD,EACN,aAAcD,EACd,cAAeE,CACjB,EACA,IAAK,CACH,KAAOn5K,IAAwBk5K,EAAiBl5K,EAAI,GAAK84K,EAAmB94K,EAAI,EAChF,cAAgBA,IAAwBm5K,EAA0Bn5K,EAAI,GAAK+uH,EAAuB/uH,EAAI,EACtG,aAAeA,IAAwBi5K,EAAoBj5K,EAAI,GAAK+4K,EAAsB/4K,EAAI,CAChG,CACF,EAEaw5K,EAAqB,CAChC,KAAOx5K,IAAgB66F,EAAe76F,EAAI,GAAKyvH,EAAgBzvH,EAAI,EACnE,aAAc66F,EACd,cAAe40B,EACf,QAAS,CACP,KAAOzvH,IAAgBq5K,EAA0Br5K,EAAI,GAAKs5K,EAA2Bt5K,EAAI,EACzF,aAAcq5K,EACd,cAAeC,CACjB,CACF,EAEO,SAASG,EAAiBrnG,GAAsB,CACrD,OAAO,KAAK,UAAUA,GAAM,MAAM,CACpC,CAEO,SAASsnG,EAA4BC,GAA8B,CACxE,OAAOA,GAAK,OAASA,GAAK,OAAO,SAAS,SAAS,IAAuB,CAC5E,CAEO,SAASC,EAAwB52K,GAAiE,CACvG,MAAO,QAASA,EAClB,CAEO,SAAS62K,EAAsB72K,GAA+D,CACnG,MAAO,kBAAmBA,EAC5B,CAEO,SAAS82K,EAAeC,GAA4C,CACzE,OAAO,OAAO,OAAe,IAAY,EAAE,SAASA,EAAQ,CAC9D,CAEO,SAASC,EAA2Bh3K,GAAoE,CAC7G,MAAO,aAAcA,EACvB,CAEO,SAASi3K,EAAyBj3K,GAAkE,CACzG,OAAO42K,EAAwB52K,EAAU,GAAK62K,EAAsB72K,EAAU,CAChF,CAEO,SAASk3K,EAAkB33K,GAAkC,CAClE,OAAOu2K,EAAmBv2K,EAAS,GAAK,EAAQA,GAAU,cAAc,UAC1E,CAEO,SAAS43K,EAAsBn1C,GAAgC,CACpE,OAAOw0C,EAAmB,QAAQ,KAAKx0C,EAAQ,GAAK,EAAQA,GAAS,UACvE,CAEO,SAASo1C,EAAuBh8M,GAAmC,CACxE,OAAOA,GAAM,MAAM,KAAM4hC,IAASk6K,EAAkBl6K,EAAI,CAAC,CAC3D,CAEO,SAASq6K,EAAcC,GAAwC,CACpE,OAAQA,GAAQ,CACd,IAAK,KACH,OAAO,KAAW,GACpB,IAAK,SACH,OAAO,KAAW,OACpB,IAAK,QACL,IAAK,MACH,OAAO,KAAW,MACpB,IAAK,UACH,OAAO,KAAW,QACpB,QACE,MACJ,CACF,CAEO,SAASC,EAActwN,GAAwC,CACpE,GAAIA,KAAW,UACb,OAAO,KAAW,QAEpB,GAAIA,KAAW,aACb,OAAO,KAAW,UAGtB,CAEO,SAASuwN,EAAiBx6K,GAAwC,CACvE,GAAI,CAAAu5K,EAAc,IAAI,cAAcv5K,GAAK,SAAS,EAOlD,IAAIi5K,EAAoBj5K,GAAK,SAAS,EACpC,OAAOA,GAAK,UAAU,IAGxB,GAAI66F,EAAe76F,GAAK,QAAQ,EAAG,CACjC,MAAMy6K,IAA0Bz6K,GAAK,SAAS,UAAY,GAAK,IAC/D,SAAO,MAAyBy6K,EAAsB,CACxD,EAGF,CAEO,SAASC,EAA8B16K,GAAoB,CAChE,OAAOu5K,EAAc,IAAI,aAAav5K,EAAI,EAAIA,GAAK,IAAM,MAC3D,CAEO,SAAS26K,EAAiB36K,GAAwC,CACvE,GAAI,CAAAu5K,EAAc,IAAI,cAAcv5K,GAAK,SAAS,GAI9C+4K,EAAsB/4K,GAAK,SAAS,EACtC,OAAOA,GAAK,UAAU,eAI1B,CAEO,SAAS46K,EAAe56K,GAAkC,CAC/D,OAAOA,IAAM,aAAe,CAAC,CAC/B,CAMO,SAAS66K,GAAoB76K,GAAwE,CAC1G,GAAI,CAACA,GACH,OAGF,MAAMhxB,GAASgxB,GAAK,SAAS,IAAoB,EACjD,GAAI,CAAChxB,GACH,OAGF,MAAM2I,GAAQ3I,GAAO,MAAM,2BAA2B,EACtD,GAAI,CAAC2I,IAAO,OACV,OAGF,MAAMkb,GAAWlb,GAAM,OAAO,SAG9B,GAFwBmjM,EAAkBjoL,EAAQ,EAMlD,MAAO,CAAE,SAAAA,EAAS,CACpB,CAEA,SAASioL,EAAkBjoL,GAAkB,CAC3C,MAAO,EAAQ,IAAO,KAAKA,EAAQ,CACrC,CAEO,SAASkoL,GAAsB38M,GAAmC,CACvE,OAAOA,GAAM,MAAM,KAAM4hC,IAASg7K,GAAqBh7K,EAAI,CAAC,CAC9D,CAEO,SAASg7K,GAAqBh7K,GAAmD,CACtF,MAAO,EAAQ66K,GAAoB76K,EAAI,CACzC,CAEO,SAASi7K,EAAqBjyM,GAAiF,CACpH,OAAIA,KAAU,KAAsB,SAC3B,YAEF,cAAWA,EAAK,CACzB,CAEO,MAAMkyM,EAAgB38H,IACpBA,GAAM,OAA+B,CAAC36E,GAAK,CAAE,eAAAke,GAAgB,KAAM0tJ,GAAe,OAAAj2G,EAAO,KAC9FA,GAAO,QAAQ,CAAC,CAAE,KAAMm/I,GAAW,MAAAn6H,EAAM,IAAM,CAC7CA,GAAM,QAASv+C,IAAS,CAClB66F,EAAe76F,EAAI,GACrBp8B,GAAI,KAAK,CAAE,eAAAke,GAAgB,cAAA0tJ,GAAe,UAAAkpC,GAAW,KAAA14K,EAAK,CAAC,CAE/D,CAAC,CACH,CAAC,EACMp8B,IACN,CAAC,CAAC,EAGMu3M,EAAmBn7K,IAC9B66F,EAAe76F,GAAK,QAAQ,EAAIA,GAAK,SAAW,KAErCo7K,EAAwB78H,IAC5BA,GAAM,OAAmC,CAAC36E,GAAK,CAAE,YAAAg+B,GAAa,KAAM4tI,GAAe,OAAAj2G,EAAO,KAC/FA,GAAO,QAAQ,CAAC,CAAE,KAAMm/I,GAAW,MAAAn6H,EAAM,IAAM,CAC7CA,GAAM,QAASv+C,IAAS,CAClBA,GAAK,UAAY66F,EAAe76F,GAAK,QAAQ,GAC/Cp8B,GAAI,KAAK,CACP,kBAAgB,MAAmBg+B,EAAW,EAC9C,cAAA4tI,GACA,UAAAkpC,GACA,GAAG14K,GACH,UAAW,CAAE,GAAGA,GAAK,UAAW,IAAKA,GAAK,SAAS,SAAU,CAC/D,CAAC,CAEL,CAAC,CACH,CAAC,EACMp8B,IACN,CAAC,CAAC,EAGA,SAASy3M,GAAkBryM,GAAgF,CAChH,IAAIiF,GACJ,OAAI,OAAO,OAAO,GAAU,EAAE,SAASjF,EAAmB,EACxDiF,GAAMjF,GAENiF,MAAM,MAA8BjF,EAA4D,EAG3FsyM,GAAqBrtM,EAAG,CACjC,CAEA,MAAMqtM,GAA8F,CAClG,CAAC,KAAsB,QAAQ,EAAG,OAClC,CAAC,KAAsB,MAAM,EAAG,MAChC,CAAC,KAAsB,OAAO,EAAG,UACjC,CAAC,KAAsB,UAAU,EAAG,UACpC,CAAC,KAAkB,QAAQ,EAAG,MAC9B,CAAC,KAAkB,KAAK,EAAG,MAC3B,CAAC,KAAkB,MAAM,EAAG,OAC5B,CAAC,KAAkB,MAAM,EAAG,OAC5B,CAAC,KAAkB,OAAO,EAAG,UAC7B,CAAC,KAAkB,UAAU,EAAG,UAChC,CAAC,IAAW,MAAM,EAAG,OACrB,CAAC,IAAW,MAAM,EAAG,UACrB,CAAC,IAAW,QAAQ,EAAG,MACvB,CAAC,IAAW,EAAE,EAAG,OAKjB,CAAC,IAAW,OAAO,EAAG,MACxB,EAEO,SAASC,GAAiBv2C,GAAyB,CACxD,OAAKA,IAAU,OAGRA,GAAS,OAAO,OAAoB,CAAC31K,GAAM+iH,KAAU,CAC1D,MAAMopG,MAAc,MAA8BppG,GAAM,KAAK,IAAM,KAAkB,OACrF,GAAIA,GAAM,UAAYopG,GAAa,CACjC,MAAMC,GAAW,IAAI,KAAKrpG,GAAM,QAAQ,EACxC,GAAI/iH,KAAS,MAAQA,GAAK,QAAQ,EAAIosN,GAAS,QAAQ,EACrD,OAAOA,EAEX,CACA,OAAOpsN,EACT,EAAG,IAAI,EAXE,IAYX,CAQO,SAASqsN,EAAqBt9M,GAAuD,CAC1F,OAAO,MAAM,QAAQA,GAAM,cAAc,CAC3C,CAEO,SAASu9M,GAAY37K,GAA4B,CACtD,OAAIu5K,EAAc,QAAQ,KAAKv5K,EAAI,EAC1BA,GAAK,cAAc,MAGxBu5K,EAAc,WAAW,aAAav5K,EAAI,EACrCA,GAAK,MAGVu5K,EAAc,WAAW,cAAcv5K,EAAI,EACtCA,GAAK,OAGP,EACT,CAQO,MAAM47K,GAAe,CAACxpG,GAAqBypG,KAAyC,CACzF,MAAMC,GAAwB,CAC5B,UAAW,GACX,YAAa,KACb,kBAAmB,CACrB,EACA,OAAIhD,EAAmB1mG,EAAK,EACnB,CACL,UAAWA,GAAM,cAAc,MAC/B,YAAaA,GAAM,IACnB,kBAAmBA,GAAM,IAAM2pG,GAAoC3pG,GAAM,IAAKypG,EAAiB,EAAI,IACrG,EAEE5C,EAAoB7mG,EAAK,EACpB,CACL,UAAWA,GAAM,MACjB,YAAaA,GAAM,KAAO,KAC1B,kBAAmB2pG,GAAoC3pG,GAAM,KAAO,KAAMypG,EAAiB,CAC7F,EAEKC,EACT,EAEaC,GAAsC,CAACt9H,GAAqBo9H,KAA8B,CACrG,MAAMG,MAAe,MAA4BH,EAAiB,EAC5Dn9H,MAAY,MAA4BD,EAAW,EACzD,OAAIC,KAAc,GAAKs9H,KAAiB,EAC/B,EAELA,KAAiB,GAGWt9H,GAAYs9H,GACX,EAHxB,EAGgC,KAAK,KAAKt9H,GAAYs9H,EAAY,EAAI,CAEjF,EAQO,SAASC,GAA6BC,GAAyBC,GAAyB,CAC7F,OAAID,KAAoB,EACf,EAELC,KAAoB,GAIMD,GAAkBC,GACjB,EAJtB,EAI8B,KAAK,KAAKD,GAAkBC,EAAe,EAAI,CACxF,CAKO,SAASC,GAAqCp8K,GAAyC,CAC5F,MAAM8uH,GAAiB,qBAAqB9uH,GAAK,UAAU,WAAW,EAClEA,GAAK,UAAU,YACfA,GAAK,UAAU,YAAY,KAEzBsC,GAAYw2K,EAAmB94K,GAAK,SAAS,EAC/CA,GAAK,UAAU,cAAc,cAC7BA,GAAK,UAAU,KAEnB,MAAO,CACL,eAAgB8uH,GAChB,cAAexsH,GACf,UAAWtC,GAAK,MAAM,IACxB,CACF,CAKO,SAASq8K,GAAyCr8K,GAA6C,CACpG,MAAMle,GAAiBke,GAAK,eAEtBwvI,GAAgBspC,EAAmB94K,GAAK,IAAI,EAAIA,GAAK,KAAK,cAAc,cAAgBA,GAAK,UAC7F04K,GAAY14K,GAAK,MAAM,KAE7B,MAAO,CACL,eAAAle,GACA,cAAA0tJ,GACA,UAAAkpC,EACF,CACF,CAEO,SAAS4D,GAAmC1vN,GAA6C,CAC9F,MAAMk1B,GAAiBl1B,GAAO,eACxB4iL,GAAgB5iL,GAAO,QAAQ,KAAOA,GAAO,UAC7C8rN,GAAY9rN,GAAO,MAEzB,GAAI,CAACk1B,GACH,MAAM,IAAI,MAAM,mCAAmC,EAGrD,MAAO,CACL,eAAAA,GACA,cAAA0tJ,GACA,UAAAkpC,EACF,CACF,CAEO,SAAS6D,GAA4B36K,GAAkC,CAC5E,OAAO,qBAAqBA,EAAW,EAAIA,GAAcA,GAAY,IACvE,CAEO,SAAS46K,GAA4Bn2N,GAAqB,CAC/D,OAAOA,KAAS,IAAa,OAC/B,CAEO,SAASo2N,GAA6Bp2N,GAAqB,CAChE,OAAOA,KAAS,IAAa,gBAC/B,CAEO,SAASq2N,GAA0Br2N,GAAqB,CAC7D,OAAOA,KAAS,IAAa,aAC/B,CAEO,SAASs2N,GAA2Bt2N,GAAqB,CAC9D,OAAOA,KAAS,IAAa,cAC/B,CAEO,SAASu2N,GAA2Bv2N,GAAqB,CAC9D,OAAOm2N,GAA4Bn2N,EAAI,GAAKo2N,GAA6Bp2N,EAAI,CAC/E,CAEO,SAASw2N,GAAsBx2N,GAAqB,CACzD,OAAOo2N,GAA6Bp2N,EAAI,GAAKs2N,GAA2Bt2N,EAAI,CAC9E,CAEO,SAASy2N,GAA8Bz2N,GAAqB,CACjE,OAAOq2N,GAA0Br2N,EAAI,GAAKs2N,GAA2Bt2N,EAAI,CAC3E,CAKO,SAAS02N,GAAW/8K,GAA4B,CACrD,GAAI,CAACA,GACH,OAGF,IAAI5b,GAEJ,MAAI,kBAAmB4b,IAAQu5K,EAAc,QAAQ,KAAKv5K,EAAI,EAC5D5b,GAAU4b,GAAK,cAAc,IACpB,QAASA,IAAQw5K,EAAmB,QAAQ,KAAKx5K,EAAI,IAC9D5b,GAAU4b,GAAK,KAGV5b,EACT,C,uHCpiBO,SAAS44L,EAAa,CAAE,UAAAl+M,EAAW,mBAAAm+M,EAAoB,KAAAjwH,EAAM,WAAAkwH,EAAa,EAAG,EAA+B,CACjH,IAAI3mL,EAAO,GAEX,GAAI0mL,EAAoB,CACtB,MAAME,EAAYF,EAAmB,QAAQ,GAAG,EAChD,OAAOE,EAAY,EAAIF,EAAmB,UAAU,EAAGE,CAAS,EAAIF,CACtE,CAMA,OAHA1mL,EAAO,GADUy2D,GAAQ,iBAAiBluF,CAAS,EACjC,QAGdo+M,EACK,GAAGA,CAAU,IAAI3mL,CAAI,GAGvBA,CACT,C,eCXO,SAAS6mL,EAAiB,CAAE,KAAAl7L,EAAM,aAAAuvL,EAAc,mBAAA4L,EAAoB,cAAAh/G,CAAc,EAA2B,CAClH,MAAM3lD,EAAcx2B,EAAK,KAAK,YACxBo7L,EAAc5kK,IAAc,IAAkB,EAC9C6kK,EAAkB7kK,IAAc,IAAsB,EACtD8kK,EAAa9kK,IAAc,IAAiB,EAC5C,CAAE,WAAAs2C,EAAY,OAAAlgE,EAAQ,UAAA79B,CAAU,KAAIogG,EAAA,GAA6B,CACrE,KAAMisH,IAAgB,OAASC,EAAkB,OACjD,WAAYr7L,EAAK,SACnB,CAAC,EAEKpjB,KAAY,KAAkB,EAC9Bo+M,EAAapuL,GAAQ,UAAU,cAAc,IAAiB,EAE9D2uL,EAAgBT,EAAa,CACjC,UAAAl+M,EACA,mBAAoB0+M,EACpB,KAAMt7L,EAAK,KACX,WAAAg7L,CACF,CAAC,EAEKQ,KAAkB,KAAmB1uH,EAAYqP,CAAa,EAEpE,OAAIptG,GAAa,CAAC+9F,EACT,KAGF,CACL,OAAQ,CACN,IAAK0uH,IAAoB,SAAW,aAAa5+M,CAAS,GAAMkwF,GAAY,QAAU,GACtF,KAAMyuH,EACN,KAAMF,GAAmBvuH,GAAY,MAAQ,GAC7C,QAAS,GACT,OAAQ,CACN,IAAK9sE,EAAK,UACV,MAAO,EACT,EACA,MAAOuvL,EACP,YAAa4L,GAAsB,GACnC,YAAU,KAAmBruH,EAAYqP,CAAa,CACxD,EACA,MAAO,CAACn8E,EAAK,KAAK,KAClB,WAAA8sE,CACF,CACF,CAmBO,SAASiC,EAA4Bj0E,EAAqD,CAC/F,KAAM,CAAE,KAAAkF,EAAM,MAAOuvL,EAAc,YAAa4L,CAAmB,EAAIrgM,EAAU,SAAS,EACpF,CAACgrC,CAAM,KAAI,KAAa,EACxB,CAAC/2D,EAAWotH,CAAY,KAAI,YAAS,EAAK,EAC1ChgB,EAAgBr2C,EAAO,IAAI,KAAK,GAAK,OAErC21J,EAAsBP,EAAiB,CAC3C,KAAAl7L,EACA,aAAAuvL,EACA,mBAAA4L,EACA,cAAAh/G,CACF,CAAC,EAED,GAAI,CAACs/G,EACH,MAAO,CACL,QAAS,GACT,UAAA1sN,EACA,aAAAotH,EACA,cAAe,KACf,WAAY,OACZ,cAAAhgB,EACA,gBAAiB,CAAC,EAClB,MAAO,GACP,SAAU,EACZ,EAGF,KAAM,CAAE,OAAAzxG,EAAQ,MAAAiiG,EAAO,WAAAG,CAAW,EAAI2uH,EAChC7uH,KAAkB,KAAmBE,CAAU,EAErD,MAAO,CACL,QAAS,GACT,cAAepiG,EACf,WAAAoiG,EACA,cAAAqP,EACA,gBAAAvP,EACA,MAAAD,EACA,YAAU,MAAkBG,CAAU,EACtC,UAAA/9F,EACA,aAAAotH,CACF,CACF,C,iHCtHO,MAAMu/F,EAAoB,UAQpBC,EAAkC,IAAoB,IAAKttL,GAAQ,CAE9E,MAAMipF,EAASjpF,EAAI,OAAS,KAAgB,KAAmBA,EAAI,KACnE,MAAO,CACL,GAAGA,EACH,OAAQ,CAAE,CAACqtL,CAAiB,EAAG,IAAM,QAAO,KAAoBpkG,CAAM,eAAe,CAAE,CACzF,CACF,CAAC,EAMoC,CACnC,MAAMskG,EAA0B,SAChC,GAAIA,EAAwB,KAAK,EAAE,SAAS,yCAAyC,EAAG,CACtF,KAAM,CAAE,kBAAAC,EAAmB,0BAAAC,CAA0B,EAAIF,EACvD,yCACF,EAEA,UAAWz2E,KAAYw2E,EAAW,CAChC,MAAMI,EAAeF,EAAkB12E,EAAS,IAAI,EAEhD42E,IACF52E,EAAS,OAAO22E,CAAyB,EAAIC,EAEjD,CACF,CACF,CAEO,MAAMC,EAAkBL,EAAU,IAAK/xN,GAAMA,EAAE,IAAI,EAE7CqyN,KAAa,QAAKN,EAAU,QAAS/xN,GAAM,OAAO,KAAKA,EAAE,MAAM,CAAC,CAAC,C,+MCnCvE,MAAMsyN,EAA+B,uBACtCC,EAAoB,IAAI,IAAYC,CAAqB,EAE/D,SAASA,EAAsB/uN,EAAmB,CAChD,KAAM,CAACC,EAAQqG,CAAS,KAAI,YAAS,EAAK,EAEpC0oN,KAAc,eAAa/uN,GAAoB,CACnDqG,EAAUrG,CAAM,CAClB,EAAG,CAAC,CAAC,EAECgvN,EAAc,IAAM,CACxB,KAAgB,QAAQ,CAAE,UAAWjvN,EAAM,EAAG,CAAC,CACjD,EAEMkvN,EAAoB,IAAM,CAC9B,MAAMzhM,EAAY,OAAO,sBAEzB,GAAI,EAAEA,aAAqB,MACzB,MAAM,IAAI,MAAM,0BAA0B,EAG5C,MAAMpzB,KAAQ,MAAkBozB,KAAW,MAAyBztB,EAAM,EAAE,CAAC,EAC7E,GAAI,CAAC3F,EACH,MAAM,IAAI,MAAM,iBAAiB,EAGnCozB,EAAU,4BAA4BpzB,EAAM,OAAO,CAAC,CACtD,EAEM80N,EAAc,OAClB,QAAC,IAAI,CACH,oBAAC,IAAK,KAAL,CACC,KAAK,MACL,SAAO,KAAE,6CAA8C,WAAW,EAClE,QAASF,CAAA,CACV,KACD,OAAC,IAAK,KAAL,CACC,KAAK,gBACL,SAAO,KAAE,6CAA8C,mBAAmB,EAC1E,QAASC,CAAA,CACV,GACH,EAGF,SACE,OAAC,IAAK,CAAC,UAAW,MAAO,WAAY,SAAU,OAAQ,OAAQ,eAAgB,SAC7E,mBAAC,IAAG,CAAC,cAAe,EAClB,oBAAC,IAAW,CACV,oBAAC,KAAM,CAAC,KAAK,gBAAgB,QAASD,EACpC,mBAAC,KAAK,CAAC,QAAQ,uCAAuC,qBAAS,EACjE,KACA,OAAC,IAAQ,CAAC,QAASE,EAAa,UAAU,aAAa,gBAAiBH,EACtE,mBAAC,MACC,gBAAY,KAAE,4CAA6C,aAAa,EACxE,KAAM/uN,EAAS,WAAa,aAC9B,EACF,GACF,EACF,EACF,CAEJ,CAEA,KAAW,2BAA2B,CACpC,SAAU4uN,EACV,OAAQC,CACV,CAAC,C,oQCvDD,MAAMM,EAAiB,CAAC,CAAE,MAAO,OAAQ,MAAO,MAAO,CAAC,EAE3CC,EAAgB,CAAC,CAAE,QAAAv6L,CAAQ,IAAa,CACnD,KAAM,CAACmmD,EAAWC,CAAY,KAAI,YAAS,MAAM,EAC3C,CAAE,SAAA7vE,CAAS,KAAI,MAA+B,EAC9CtK,KAAS,MAAWuuN,CAAY,EAEhCr2K,EAAWsoD,GAA+B,CAG9C,UAAW7iF,KAAO6iF,EAEhBl2F,EAASqT,EAAK6iF,EAAW7iF,CAAG,CAAC,EAE/BoW,EAAQ,CACV,EAEA,SACE,OAAC,KACC,SAAO,KAAE,mDAAoD,oBAAoB,EACjF,YACE,OAAC,OAAI,UAAW/zB,EAAO,SACrB,mBAACwuN,EAAA,CAAkB,KAAMH,EAAgB,aAAAl0I,EAA4B,UAAAD,CAAA,CAAsB,EAC7F,EAEF,QAAAnmD,EAEC,SAAAmmD,IAAc,WAAU,OAACu0I,EAAA,CAAiB,SAAUv2K,CAAA,CAAS,EAChE,CAEJ,EAQO,SAASs2K,EAAoC,CAAE,KAAA/qJ,EAAM,UAAAyW,EAAW,aAAAC,CAAa,EAA8B,CAChH,SACE,OAAC,IAAO,CACL,SAAA1W,EAAK,IAAI,CAACJ,EAAKx7D,OAEZ,OAAC,KAEC,MAAOw7D,EAAI,MACX,MAAOA,EAAI,MACX,YAAa,IAAM8W,EAAa9W,EAAI,KAAK,EACzC,OAAQ6W,IAAc7W,EAAI,OAJrB,GAAGA,EAAI,KAAK,IAAIx7D,CAAK,EAK5B,CAEH,EACH,CAEJ,CAMA,MAAM4mN,EAAmB,CAAC,CAAE,SAAA57B,CAAS,IAAoB,CACvD,MAAM7yL,KAAS,MAAW0uN,CAAY,EAChC,CAAE,UAAAxtH,CAAU,KAAI,MAA+B,EAE/CytH,KAAa,MAAyBztH,EAAU,CAAC,EACjD,CAAC0tH,EAAiBC,CAAkB,KAAI,eAAS,MAAKF,CAAU,CAAC,EAEjEz2K,EAAU,IAAM,CACpB,MAAMjG,KAAY,MAAK28K,CAAe,EAChCE,EAAoB5tH,EAAU,EAE9B6tH,EAAiBC,EAA0B/8K,CAAS,EAC1D4gJ,EAAS,CAAE,GAAGi8B,EAAmB,GAAGC,CAAe,CAAC,CACtD,EAEA,SACE,oBACE,qBAAC,OAAI,UAAW/uN,EAAO,YACrB,oBAAC,KAAM,CAAC,KAAK,SAAS,QAASk4C,EAC7B,mBAAC,KAAK,CAAC,QAAQ,oCAAoC,iBAAK,EAC1D,KACA,OAAC,IAAO,CAAC,WAAS,OAAC+2K,EAAA,EAAgB,EAAI,MAAM,OAAO,UAAU,aAAa,YAAa,GACtF,mBAAC,IAAI,CAAC,KAAK,uBAAuB,KAAK,IAAK,GAC9C,GACF,KAEA,OAAC,OAAI,UAAWjvN,EAAO,QACrB,mBAAC,KAAS,CAAC,aAAY,GACpB,UAAC,CAAE,OAAAvC,CAAO,OACT,OAAC,KACC,MAAM,OACN,OAAAA,EACA,SAAS,OACT,MAAOmxN,EACP,OAAQC,EACR,cAAe,CACb,QAAS,CACP,QAAS,EACX,CACF,EACF,EAEJ,EACF,GACF,CAEJ,EAEA,SAASI,GAAkB,CACzB,SACE,OAAC,OACC,oBAAC,KAAK,CAAC,QAAQ,kCAAkC,sFACuB,OAAC,OAAG,EAAE,+DACf,OAC7D,OAAC,IAAQ,CAAC,KAAK,6EAA6E,SAAQ,GAAC,uCAErG,GACF,EACF,CAEJ,CAEA,SAASD,EAA0B/8K,EAAkD,CACnF,OAAI,IAAc,WAAW,aAAaA,CAAS,KAC1C,MAA4BA,CAAS,EACnC,IAAc,WAAW,cAAcA,CAAS,KAClD,MAA6BA,CAAS,EAGxC,CAAC,CACV,CAEO,MAAMy8K,EAAgBtwN,IAA0B,CACrD,WAAS,OAAI,CACX,SAAU,EACV,OAAQ,OACR,cAAe,OACf,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,eAAa,OAAI,CACf,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,WAAY,SACZ,SAAU,EACV,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,GAEamwN,EAAe,KAAO,CACjC,YAAU,OAAI,CACZ,QAAS,OACT,WAAY,SACZ,eAAgB,eAClB,CAAC,CACH,E,2EC/KO,SAASW,EAAcx0D,EAAmB,CAE/C,MAAMy0D,EADY,IAAI,UAAU,EACV,gBAAgBz0D,EAAK,UAAU,EAYrD,MAVmB,CACjB,MAAO,MAAM,KAAKy0D,EAAI,iBAAiB,OAAO,CAAC,EAAE,IAAKprN,IAAU,CAC9D,MAAOqrN,EAAYrrN,EAAM,OAAO,EAChC,KAAMA,EAAK,cAAc,MAAM,GAAG,aAAa,MAAM,GAAK,GAC1D,QAASqrN,EAAYrrN,EAAM,SAAS,EACpC,QAASqrN,EAAYrrN,EAAM,WAAW,EACtC,QAASA,EAAK,cAAc,2BAA2B,GAAG,aAAa,SAAS,CAClF,EAAE,CACJ,CAGF,CCfO,SAASsrN,EAAa30D,EAAmB,CAE9C,MAAMy0D,EADY,IAAI,UAAU,EACV,gBAAgBz0D,EAAK,UAAU,EAYrD,MAVmB,CACjB,MAAO,MAAM,KAAKy0D,EAAI,iBAAiB,MAAM,CAAC,EAAE,IAAKprN,IAAU,CAC7D,MAAOqrN,EAAYrrN,EAAM,OAAO,EAChC,KAAMqrN,EAAYrrN,EAAM,MAAM,EAC9B,QAASqrN,EAAYrrN,EAAM,aAAa,EACxC,QAASqrN,EAAYrrN,EAAM,SAAS,EACpC,QAASA,EAAK,cAAc,2BAA2B,GAAG,aAAa,SAAS,CAClF,EAAE,CACJ,CAGF,CCfO,eAAeurN,EAAc5gM,EAAa,CAG/C,OADY,MADA,MAAM,MAAMA,CAAG,GACL,KAAK,CAE7B,CAEO,SAAS6gM,EAAW70D,EAAa,CAGtC,OAFkB,IAAI,UAAU,EACV,gBAAgBA,EAAK,UAAU,EAC1C,cAAc,MAAM,IAAM,IACvC,CAEO,SAAS00D,EAAYrrN,EAAe6oD,EAA0B,CAEnE,OADiB7oD,EAAK,cAAc6oD,CAAQ,GAC3B,aAAe,EAClC,CAEO,eAAe4iK,EAAS9gM,EAAa,CAC1C,MAAM4R,EAAM,MAAMgvL,EAAc5gM,CAAG,EAEnC,OADmB6gM,EAAWjvL,CAAG,EAAI4uL,EAAc5uL,CAAG,EAAI+uL,EAAa/uL,CAAG,CAE5E,C,0BCpBO,SAASmvL,EAAgBC,EAAuB,CACrD,MAAM3/I,EAAiB,CAAC,EAClBryE,EAAkB,CAAC,EACnBtE,EAAiB,CAAC,EAClB4L,EAAoB,CAAC,EACrB2qN,EAA4C,CAAC,EAEnD,UAAW3kN,KAAQ0kN,EAAK,MAAO,CAC7B,MAAMl0L,KAAM,MAASxwB,EAAK,OAAO,EAEjC,GAAI,CAMF,GALA+kE,EAAK,KAAKv0C,EAAI,QAAQ,CAAC,EACvB99B,EAAM,KAAKsN,EAAK,KAAK,EACrB5R,EAAK,KAAK4R,EAAK,IAAI,EACnB2kN,EAAQ,KAAK3kN,EAAK,OAAO,EAErBA,EAAK,QAAS,CAChB,MAAMm4B,EAAOn4B,EAAK,QAAQ,QAAQ,kBAAmB,EAAE,EACvDhG,EAAQ,KAAKm+B,CAAI,CACnB,CACF,OAASpwB,EAAK,CACZ,QAAQ,KAAK,2BAA4BA,EAAK/H,CAAI,CACpD,CACF,CAEA,MAAO,CACL,OAAQ,CACN,CAAE,KAAM,OAAQ,KAAM,KAAU,KAAM,OAAQ,CAAE,YAAa,MAAO,EAAG,OAAQ+kE,CAAK,EACpF,CAAE,KAAM,QAAS,KAAM,KAAU,OAAQ,OAAQ,CAAC,EAAG,OAAQryE,CAAM,EACnE,CAAE,KAAM,OAAQ,KAAM,KAAU,OAAQ,OAAQ,CAAC,EAAG,OAAQtE,CAAK,EACjE,CAAE,KAAM,UAAW,KAAM,KAAU,OAAQ,OAAQ,CAAC,EAAG,OAAQ4L,CAAQ,EACvE,CAAE,KAAM,UAAW,KAAM,KAAU,OAAQ,OAAQ,CAAC,EAAG,OAAQ2qN,CAAQ,CACzE,EACA,OAAQ5/I,EAAK,MACf,CACF,CC/BO,SAAS6/I,EAAYlhM,EAAa,CACvC,KAAM,CAAChW,EAAOm3M,CAAO,KAAItzH,EAAA,GACvB,SAAY,CACV,MAAMmzH,EAAO,MAAMF,EAAS9gM,CAAG,EACzBl0B,EAAQi1N,EAAgBC,CAAI,EAClC,OAAO,IAAIlrF,EAAA,EAAwBhqI,CAAK,CAC1C,EACA,CAACk0B,CAAG,EACJ,CAAE,QAAS,EAAK,CAClB,EAEA,MAAO,CAAE,MAAAhW,EAAO,QAAAm3M,CAAQ,CAC1B,C,gOCWO,eAAeC,EAAiB,CACrC,aAAA/wE,EAAe,GACf,QAAAxxH,EAAU,IACV,KAAAC,EAAO,EACP,WAAAuiM,EAAa,GACb,cAAA9uB,EAAgB,GAChB,WAAA+uB,EAAa,CAAC,EACd,iBAAAC,EAAmB,CAAC,EACpB,OAAAC,CACF,EAA6B,CAAC,EAAyC,CACrE,MAAMx4J,EAAS,IAAI,gBACnB,OAAAA,EAAO,OAAO,eAAgBqnF,CAAY,EAC1CrnF,EAAO,OAAO,gBAAiBupI,CAAa,EAC5CvpI,EAAO,OAAO,aAAcs4J,EAAW,KAAK,GAAG,CAAC,EAChDt4J,EAAO,OAAO,mBAAoBu4J,EAAiB,KAAK,GAAG,CAAC,EAC5Dv4J,EAAO,OAAO,aAAcq4J,CAAU,EACtCr4J,EAAO,OAAO,UAAWnqC,EAAQ,SAAS,EAAE,CAAC,EAC7CmqC,EAAO,OAAO,OAAQlqC,EAAK,SAAS,EAAE,CAAC,EACvCkqC,EAAO,OAAO,OAAQ,IAAmB,MAAM,SAAS,EAAE,CAAC,GAE1C,QAAM,QACrB,MAAc,EAAE,MAA+C,CAC7D,OAAQ,MACR,IAAK,yBAAyBA,EAAO,SAAS,CAAC,GAC/C,YAAaw4J,EACb,eAAgB,EAClB,CAAC,CACH,GACgB,KAAK,MACvB,CAEO,eAAeC,EAAgBj8K,EAAak8K,EAAY,GAAmC,CAChG,MAAMt0L,EAAW,QAAM,QACrB,MAAc,EAAE,MAAqC,CACnD,OAAQ,MACR,IAAK,yBAAyBoY,CAAG,GACjC,iBAAkB,CAACk8K,EACnB,eAAgB,CAACA,CACnB,CAAC,CACH,EAEM,CAAE,OAAAt4L,CAAO,EAAIgE,EAAS,KACtByrB,EAAO,IAAI,IAAe,CAC9B,GAAG,KACH,cAAe,GACf,OAAQ,CAACzvB,EAAO,KAAK,CACvB,CAAC,EACK,CAAE,WAAAl/B,EAAY,GAAG6tB,CAAM,EAAI8gC,EAAK,OAAO,CAAC,EAAE,aAAa,EAG7D,cAAO9gC,EAAM,QACb,OAAOA,EAAM,GACb,OAAOA,EAAM,aAEb8gC,EAAK,QAAQ,EACN,CACL,GAAGzvB,EACH,MAAArR,CACF,CACF,CAEO,eAAe4pM,EAAsBhkN,EAA4C,CACtF,KAAM,CAAE,OAAAyrB,CAAO,EAAI,QAAM,MAAc,EAAE,IACvC,8BAA8BzrB,CAAI,GAClC,OACA,OACA,CACE,aAAc,EAChB,CACF,EACA,OAAOyrB,CACT,CAEO,eAAeghH,EACpB93B,EACA7iB,EAC4B,CAC5B,KAAM,CAAE,OAAArmE,CAAO,EAAI,QAAM,MAAc,EAAE,KAAK,wBAAyB,CACrE,UAAAqmE,EACA,KAAM6iB,EAAe,aAAa,KAClC,MAAOA,EACP,KAAM,IAAmB,KAC3B,CAAC,EACD,OAAOlpF,CACT,CAEO,eAAew4L,EAAmBtvG,EAAwE,CAC/G,KAAM,CAAE,aAAAzzC,EAAc,GAAG9mD,CAAM,EAAIu6F,EAC7B,CAAE,IAAA9sE,EAAK,KAAA7nC,EAAM,QAAAy+B,EAAS,UAAAqzD,CAAU,EAAI5wB,EACpCxzC,EAAO,IAAmB,MAC1B,CAAE,OAAAjC,CAAO,EAAI,QAAM,MAAc,EAAE,MAAM,yBAAyBoc,CAAG,GAAI,CAC7E,UAAAiqD,EACA,KAAA9xF,EACA,MAAAoa,EACA,QAAAqkB,EACA,KAAA/Q,CACF,CAAC,EACD,OAAOjC,CACT,CAEO,SAASy4L,EAAmBr8K,EAA2C,CAC5E,SAAO,MAAc,EAAE,OAAO,yBAAyBA,CAAG,EAAE,CAC9D,CAEO,eAAes8K,EACpBC,EACwC,CACxC,KAAM,CAAE,OAAA34L,CAAO,EAAI,QAAM,MAAc,EAAE,IACvC,yBAAyB24L,CAAe,cAC1C,EACA,OAAO34L,CACT,CAEO,eAAe44L,EAAuBx8K,EAAqD,CAChG,MAAMy8K,EAAc,MAAMH,EAAmCt8K,CAAG,EAChE,OAAIy8K,EAAY,SAAW,EAClB,MAGM,QAAM,KAAmB,EAAE,OAAO,CAAE,IAAKA,EAAY,IAAKjrN,GAAMA,EAAE,aAAa,CAAE,CAAC,GACnF,KAAK,QAAQ,CAC7B,CAEO,SAASkrN,EAA2B1mM,EAAoB,CAC7D,MAAM2mM,KAAuB,MAAwB3mM,CAAQ,EAEvD,CAAE,IAAAgqB,EAAK,KAAA7nC,EAAM,aAAAykN,CAAa,EAAID,EAAsB,MAE1D,IAAIrmM,EAAWN,EAAS,OAExB,GAAI,CAACM,GAAY,EAAEA,aAAoB,KACrC,MAAM,IAAI,MAAM,8EAA8E,EAwBhG,MAnBkB,CAChB,GAAGsmM,EACH,IAAA58K,EACA,KAAA7nC,EACA,KAAM6d,EAAS,MAAM,SACrB,SAAO,MACLA,EAAS,MAAM,CAAE,WAAY,MAAU,CAAC,EACxC,CACE,EAAGM,EAAS,MAAM,GAAK,EACvB,EAAGA,EAAS,MAAM,GAAK,EACvB,EAAGA,EAAS,MAAM,OAAS,EAC3B,EAAGA,EAAS,MAAM,QAAU,CAC9B,EACA,GACAA,CACF,EACA,KAAM,IAAmB,MACzB,QAASsmM,GAAc,SAAW,CACpC,CAEF,CAEO,eAAeC,EAAsB7mM,EAA2C,CACrF,KAAM,CAAE,IAAAgqB,EAAK,UAAAiqD,EAAW,KAAA9xF,EAAM,MAAAoa,EAAO,QAAAqkB,EAAS,KAAA/Q,CAAK,EAAI62L,EAA2B1mM,CAAQ,EAEpF,CAAE,OAAA4N,CAAO,EAAI,QAAM,MAAc,EAAE,MAAM,yBAAyBoc,CAAG,GAAI,CAC7E,UAAAiqD,EACA,KAAA9xF,EACA,MAAAoa,EACA,QAAAqkB,EACA,KAAA/Q,CACF,CAAC,EACD,OAAOjC,CACT,CAEO,eAAek5L,EAAa13N,EAAiB,CAClD,MAAM23N,EAAkB,MAAMF,EAAsBz3N,CAAK,EAEnDkhH,KAAmB,MAAwBlhH,CAAK,EAEtD,GAAI,CAACkhH,EACH,MAAM,IAAI,MAAM,iDAAiD,EAGnEA,EAAiB,qBAAqBy2G,CAAe,CACvD,C,4NCrMA,MAAMC,EAAyB,IAAM,CACnC,IAAU,QAAQ,IAAI,KAAoB,CAAE,UAAW,GAAU,CAAC,CAAC,CACrE,EAEaC,EAAuBC,GAAyC,CAC3E,IAAI12F,EAAY02F,EAAS,UAAY,CAAC,EAEtC,OAAIA,EAAS,KAAO,OACXA,EAGF,CACL,GAAGA,EACH,SAAU,IAAO,UAAU,cAC3B,SAAU,CACR,GAAG12F,EACH,MAAG,MAAe,EAClB,GAAG22F,EAAyB,EAC5B,CACE,GAAI,qBACJ,QAAM,KAAE,8BAA+B,oBAAoB,EAC3D,KAAM,WACN,QAASH,CACX,CACF,CACF,CACF,EAEaI,EAAgC,CAC3CtmN,EACAumN,EACAC,EAAgB,KACb,CAEH,MAAMC,EAAU,CAAE,GAAGzmN,CAAK,EACpBgC,EAAUykN,EAAQ,QAExB,IAAIlzH,EACJ,OAAIkzH,EAAQ,MACVlzH,EAAQ,OACCizH,IACTjzH,EAAQ,YAGVkzH,EAAQ,QAAU,IAAM,IACtB,MAAkB,kCAAmC,CACnD,KAAMA,EAAQ,KAAOA,EAAQ,GAC7B,aAAcF,EACd,iBAAkB,GAAQ,IAAO,eAAe,aAAeE,GAAS,YAAY,KAAO,aAC3F,iBAAkB,EAAQ,IAAO,eAAe,YAChD,MAAAlzH,CACF,CAAC,EACDvxF,IAAU,CACZ,EACIykN,EAAQ,WACVA,EAAQ,SAAWA,EAAQ,SAAS,IAAKzmN,GACvCsmN,EAA8BtmN,EAAMumN,EAAqBhzH,IAAU,MAAS,CAC9E,GAEKkzH,CACT,EAEaC,EAAgB,CAACC,EAA2BC,IAChD,EACLD,EAAY,UAAU,KAAMhoM,GACtBA,IAAUioM,EACL,GAEAF,EAAc/nM,EAAOioM,CAAU,CAEzC,EAIQC,EAAgB,CAC3BC,EACA92F,EACAtsG,IAC6B,CAC7B,KAAM,CAAE,GAAApL,EAAI,WAAAyuM,CAAW,EAAI/2F,EAG3B,GAAItsG,IAAQ,IACV,OAAOojM,EAAQ,KAAM9mN,GAASA,EAAK,KAAO,IAAW,EAIvD,GAAIgwH,EAAY,KAAO,UACrB,OAGF,UAAW7M,KAAW2jG,EAAS,CAC7B,MAAME,EAAY,GAAQ7jG,EAAQ,IAAMA,EAAQ,KAAO7qG,GACjD2uM,EAAiB9jG,EAAQ,OAAS6M,EAAY,MAAQ7M,EAAQ,MAAQ6M,EAAY,IAMxF,GAAIg3F,GAAaC,EACf,OAAO9jG,EAGT,GAAIA,EAAQ,SAAU,CACpB,MAAM+jG,EAAgBL,EAAc1jG,EAAQ,SAAU6M,CAAW,EACjE,GAAIk3F,EACF,OAAOA,CAEX,CACF,CAGA,MAAMC,EAAuBL,EAAQ,CAAC,GAAG,YAAY,KAAO,YAC5D,GAAIC,GAAc,CAACI,EACjB,OAAON,EAAcC,EAASC,CAAU,CAI5C,EAEO,SAASV,GAA2C,CACzD,KAAM,CAAE,UAAAhpI,EAAW,YAAAC,CAAY,EAAI,IAC7BC,EAAYD,EAAY,UAAY,KAAKA,EAAY,SAAS,IAAM,GACpE5vF,EAAwB,CAAC,EAE/B,OAAAA,EAAM,KAAK,CACT,OAAQ,SACR,GAAI,UACJ,KAAM,GAAG2vF,EAAU,OAAO,GAAGE,CAAS,GACtC,IAAKD,EAAY,WACjB,KAAM,mBACR,CAAC,EAEGD,EAAU,WACZ3vF,EAAM,KAAK,CACT,OAAQ,SACR,GAAI,gBACJ,KAAM,yBACN,KAAM,eACN,IAAK,gEACP,CAAC,EAGIA,CACT,CAEO,SAAS05N,EAAU5/G,EAAuB9jF,EAAkC,CACjF,UAAW1jB,KAAQwnG,EAAO,CACxB,GAAIxnG,EAAK,MAAQ0jB,EACf,OAAO1jB,EACF,GAAIA,EAAK,UAAU,OAAQ,CAChC,MAAMqnN,EAAQD,EAAUpnN,EAAK,SAAU0jB,CAAG,EAC1C,GAAI2jM,EACF,OAAOA,CAEX,CACF,CACA,OAAO,IACT,CAOO,SAASC,EAAuBpzN,EAAiBqzN,EAAmB,IAEzE,aAAU,IAAM,CACVrzN,EACF,SAAS,eAAe,IAA0B,GAAG,MAAM,EAE3D,SAAS,eAAe,IAAmB,GAAG,MAAM,CAExD,EAAG,CAACA,CAAM,CAAC,KAGX,aAAU,IAAM,CACVqzN,EACF,SAAS,eAAe,IAAmB,GAAG,MAAM,EAEpD,SAAS,eAAe,IAAmB,GAAG,MAAM,CAExD,EAAG,CAACA,CAAQ,CAAC,CACf,C,gEClKYC,GAAAA,IACVA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,OAAS,UACTA,EAAA,SAAW,WAJDA,IAAAA,GAAA,ICuDL,MAAMC,KAAsB,iBAAuC,CACxE,WAAY,IAAM,CAAC,EACnB,YAAa,IAAM,CAAC,EACpB,aAAc,GAEd,YAAa,IAAM,CAAC,EACpB,OAAQ,IAAM,CAAC,EAEf,wBAAyB,IAChB,KAGT,gCAAiC,IACxB,KAGT,oBAAqB,GACrB,QAAS,UACT,sBAAuB,IAAM,CAAC,EAC9B,cAAe,IAAM,CAAC,EACtB,WAAY,IAAM,CAAC,EACnB,aAAc,IAAM,CAAC,EACrB,cAAe,CAAC,EAChB,eAAgB,GAChB,kBAAmB,IAAM,CAAC,EAC1B,2BAA4B,IAAM,CAAC,EACnC,UAAWD,EAAgB,IAC3B,aAAc,IAAM,CAAC,EACrB,YAAa,IAAM,CAAC,EACpB,iBAAkB,OAClB,SAAU,OACV,kBAAmB,CAAC,EACpB,cAAe,IAAM,CAAC,CACxB,CAAC,EAEM,SAASE,GAAyB,CACvC,SAAO,cAAWD,CAAmB,CACvC,C,2XC7GO,SAASE,EAA8BtrH,EAAwD,CACpG,MAAM5gF,EAAQ,KACR,CAAE,OAAAgE,CAAO,EAAIhE,EAAM,SAAS,EAE5BmsM,MAAc,WAClB,IACE,IAAI9e,EAAA,EAA8B,CAAE,MAAO,GAAI,GAAI,kBAAmB,CAAC,EAAE,QACvE,IAAI/zH,EAAA,EAA0B,CAC5B,SAAO,KAAE,iDAAkD,OAAO,EAClE,GAAI,oBACJ,OAAS96C,MAAe,OAAC4tL,EAAA,CAAc,GAAI5tL,EAAW,MAAM,GAAI,IAAKxe,EAAO,aAAA4gF,CAAA,CAA4B,CAC1G,CAAC,CACH,EACF,CAACA,EAAc5gF,CAAK,CACtB,EAEMiuL,KAAiB,WACrB,IACE,IAAIZ,EAAA,EAA8B,CAChC,SAAO,KAAE,iDAAkD,gBAAgB,EAC3E,GAAI,iBACJ,cAAe,EACjB,CAAC,EAAE,QACD,IAAI/zH,EAAA,EAA0B,CAC5B,SAAO,KAAE,0DAA2D,oBAAoB,EACxF,GAAI,8BACJ,eAAa,KACX,gEACA,0DACF,EACA,OAAS96C,MAAe,OAAC6tL,EAAA,CAAgB,GAAI7tL,EAAW,MAAM,GAAI,IAAKxe,CAAA,CAAO,CAChF,CAAC,CACH,EACF,CAACA,CAAK,CACR,EAEMssM,MAAiB,KAAkBtoM,CAAM,EAEzCuoM,GAAc,CAACJ,GAAa,GAAGG,GAAgBre,CAAc,EAE7DE,KAA+B,WACnC,OAAMC,EAAA,GAA8BpuL,EAAM,MAAM,oBAAoB,EACpE,CAACA,CAAK,CACR,EAEA,OAAImuL,GACFoe,GAAY,KAAKpe,CAA4B,EAGxCoe,EACT,CAEA,SAASH,EAAc,CAAE,IAAAxvJ,EAAK,aAAAgkC,EAAc,GAAA/jF,CAAG,EAAyD,CACtG,KAAM,CAAE,MAAA5lB,EAAM,EAAI2lE,EAAI,SAAS,EACzB+sG,KAAY,UAAO,EAAE,EAErBv4K,MAAM,MAA0B,CAAE,UAAWwvG,CAAa,CAAC,EAC3D4rH,GAAiB5vJ,EAAI,eAAe,EAE1C,SACE,OAAC/7D,EAAA,GACC,QAAS,CAAC2rN,GACV,MACGA,GAAqG,UAApF,KAAE,qDAAsD,wBAAwB,EAGpG,mBAACx4K,EAAA,GACC,GAAAn3B,EACA,IAAAzrB,GACA,SAAO,KAAE,iDAAkD,OAAO,EAClE,MAAO6F,GACP,QAAS,IAAO0yK,EAAU,QAAU1yK,IAAS,GAC7C,OAAQ,IAAMw1N,EAAmB7vJ,EAAK3lE,IAAS,GAAI0yK,EAAU,SAAW,EAAE,EAC1E,SAAWpqK,GAAMq9D,EAAI,cAAcr9D,EAAE,cAAc,KAAK,EACxD,cAAa4C,EAAA,GAAU,WAAW,YAAY,gBAAgB,WAAW,WAC3E,EACF,CAEJ,CAEA,SAASkqN,EAAgB,CAAE,IAAAzvJ,EAAK,GAAA//C,CAAG,EAAkC,CACnE,KAAM,CAAE,OAAAmH,CAAO,EAAI44C,EAAI,SAAS,EAC1B32C,MAAY,MAAa22C,CAAG,EAE5B8vJ,EAA6B1oM,EAAO,aAAa,EAAE,KAAMP,IAAa,CAC1E,MAAMi6H,MAAS,MAAkBj6H,EAAQ,EACzC,OACEi6H,IAAQ,MAAM,YAAY,MAAQ,KACjCA,IAAQ,MAAM,YAAY,MAAQ,MACjCA,IAAQ,MAAM,QAAQ,KAAM91H,GAAUA,EAAM,YAAY,MAAQ,GAAsB,CAE5F,CAAC,EAED,SACE,oBACE,oBAAC01H,EAAA,GACC,GAAAzgI,EACA,aAAcoJ,GACd,OAAQ22C,EAAI,MAAM,iBAClB,SAAWq5E,IAAWr5E,EAAI,eAAeq5E,EAAM,EACjD,EACCy2E,KACC,QAAC1wL,EAAA,GACC,cAAa75B,EAAA,GAAU,MAAM,UAAU,KAAK,SAAS,cAAc,eACnE,SAAS,UACT,MAAM,GACN,WAAY,EACZ,cAAe,EAEf,oBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,2CAA2C,wCAC5B,CAAE,uBAAsB,GAAC,EAAE,+GAEzD,EACF,KACA,OAACu0C,EAAA,GACC,SAAQ,GACR,KACE,iHAGF,mBAAC,KAAK,CAAC,QAAQ,8CAA8C,sBAAU,EACzE,GACF,EACE,QACN,CAEJ,CAEA,SAAS+1K,EAAmB7vJ,EAAc3lE,EAAe0yK,EAAmB,CACtE1yK,IAAU0yK,GAId,KAAqB,KAAK,CACxB,eAAa,KAAE,mCAAoC,kBAAkB,EACrE,OAAQ/sG,EACR,QAAS,IAAMA,EAAI,cAAc3lE,CAAK,EACtC,KAAM,IAAM2lE,EAAI,cAAc+sG,CAAS,CACzC,CAAC,CACH,C,eCxJO,MAAMgjD,CAA6C,CAGjD,YAAoBC,EAAkB,CAAlB,WAAAA,EAF3B,KAAgB,2BAA6B,EAEC,CAEvC,wBAAuD,CAC5D,MAAO,CAAE,YAAU,KAAE,oCAAqC,MAAM,EAAG,KAAM,SAAU,aAAc,EAAG,CACtG,CAEO,oBAAsD,CAC3D,MAAO,CAAC,CACV,CAEO,SAAqB,CAC1B,OAAO,KAAK,KACd,CAEO,UAAW,CAChB,KAAK,MAAM,QAAShwJ,GAAQA,EAAI,SAAS,CAAC,CAC5C,CACF,C,eCoBO,MAAM5hC,UACH,IAEV,CAYE,YAAY/oB,EAA+B,CACzC,MAAM,CACJ,GAAGA,EACH,MAAOA,GAAO,UAAS,KAAE,gCAAiC,SAAS,EACnE,OAAQA,GAAO,QAAUgpB,EAAA,GAAsB,YAAY,EAC3D,qBAAsBhpB,GAAO,sBAAwBmpB,EAAA,EAA0B,YAAY,CAC7F,CAAC,EAfH,KAAU,oBAAsB,IAAI,KAAyB,KAAM,CACjE,WAAY,CAAC,OAAO,CACtB,CAAC,EAED,KAAgB,2BAA6B,GAC7C,KAAgB,sBAAwB,GAExC,KAAO,aAAe,YAAgC,EA+CtD,KAAO,mBAAqB8wL,EAAe,KAAK,IAAI,EArClD,KAAK,qBAAqB,IAAM,KAAK,mBAAmB,CAAC,CAC3D,CApBA,YAAc,UAAYW,EAAA,EAsBlB,oBAAqB,CAC3B,MAAM3d,EAAa,KAAK,MAAM,sBAAsB,SAAS,EAE7D,MAAO,IAAM,CACPA,GACFA,EAAW,CAEf,CACF,CAEO,wBAAuD,CAC5D,MAAO,CACL,YAAU,KAAE,mCAAoC,KAAK,EACrD,aAAc,KAAW,YAAY,KAAM,KAAK,MAAM,MAAO,OAAW,MAAM,EAC9E,KAAM,QACR,CACF,CAEO,oBAAoC,CACzC,OAAO,KAAK,MAAM,OAAO,mBAAmB,CAC9C,CAEO,WAAoC,CACzC,OAAO,KAAK,MAAM,MACpB,CAEO,SAAkB,CACvB,OAAO/pJ,EAAA,EAAI,cAAc,KAAW,YAAY,KAAM,KAAK,MAAM,OAAS,KAAK,CAAC,CAClF,CAEO,aAAanhC,EAAgC,CAClD,KAAK,SAAS,CAAE,OAAAA,CAAO,CAAC,CAC1B,CAIO,UAAW,CACD,KAAK,gBAAgB,EAC7B,UAAU,IAAI,CACvB,CAEO,iBAAkB,CACvB,MAAMA,EAAS,KAAK,gBAAgB,EAEpC,GAAIA,EAAO,cAAc,EAAG,CAC1BA,EAAO,UAAU,IAAI,EACrB,MACF,CAEA,GAAI,KAAK,UAAU,EAAE,aAAa,EAAE,SAAW,EAAG,CAChD,KAAK,SAAS,EACd,MACF,CAEA,KAAU,QACR,IAAI,KAAsB,CACxB,SAAO,KAAE,yCAA0C,aAAa,EAChE,QAAM,KACJ,wCACA,mFACF,EACA,WAAS,KAAE,uCAAwC,QAAQ,EAC3D,UAAW,IAAM,CACf,KAAK,SAAS,CAChB,CACF,CAAC,CACH,CACF,CAEO,WAA+B,CACpC,SAAO,MAAa,IAAI,CAC1B,CAEO,QAAS,CACd,MAAMsmC,KAAW,MAAY,KAAK,UAAU,KAAG,MAAqB,IAAI,CAAC,KACzE,MAAe,EACf2qB,EAAA,EAAM,IAAI,KAAiB,KAAK,UAAU,CAAE,SAAA3qB,EAAU,IAAK,KAAK,UAAU,CAAE,CAAC,CAAC,CAChF,CAEO,2BAA2B3c,EAAgC,CAChE,OAAO,IAAIg/K,EAASh/K,EAAM,OAAQppC,GAASA,aAAgBy2B,CAAO,CAAC,CACrE,CAEO,aAAoB,CACzB,KAAK,gBAAgB,EAAE,aAAa,IAAI,CAC1C,CAEO,WAAqB,CAC1B,OAAO,KAAK,MAAM,CAAE,IAAK,OAAW,OAAQ,KAAK,UAAU,EAAE,UAAU,CAAE,CAAC,CAC5E,CAEO,cAAc/jC,EAAe,CAClC,KAAK,SAAS,CAAE,MAAAA,CAAM,CAAC,EACvB,MAAM61N,EAAiB,KAAK,QAAQ,EACpC,KAAK,gBAAgB,EAAE,SAAS,CAAE,eAAAA,CAAe,CAAC,CACpD,CAEO,aAAalnN,EAAoB,CACtC,KAAK,cAAcA,CAAI,CACzB,CAEO,eAAeqwI,EAA4B,CAC5CA,EACF,KAAK,SAAS,CAAE,iBAAkBA,CAAO,CAAC,EAE1C,KAAK,SAAS,CAAE,aAAc,OAAW,WAAY,OAAW,iBAAkB,MAAU,CAAC,CAEjG,CAEO,gBAAgB82E,EAAuB,CACxC,CAAC,CAAC,KAAK,MAAM,eAAiBA,GAChC,KAAK,SAAS,CAAE,aAAAA,CAAa,CAAC,CAElC,CAEO,oBAAoBl6N,EAAiB,CAC1C,KAAK,UAAU,EAAE,cAAcA,CAAK,EACpC,KAAK,gBAAgB,EAAK,CAC5B,CAEO,mBAAmBA,EAAiB,CACzCA,EAAM,YAAY,EAClB,KAAK,UAAU,EAAE,SAASA,CAAK,EAC/B,KAAK,gBAAgB,EAAK,EAE1B,MAAM0qE,EAAe,KAAK,gBAAgB,EAEtCA,EAAa,MAAM,iBAAmB,KAAK,QAAQ,GACrDA,EAAa,SAAS,CAAE,eAAgB,KAAK,QAAQ,CAAE,CAAC,CAE5D,CAEO,iBAAqC,CAC1C,OAAO,KAAW,YAAY,KAAMxiC,EAAA,CAAiB,CACvD,CAEO,gBAAuB,CAC5B,MAAMg6D,EAAa,KAAK,gBAAgB,EACpCA,EAAW,cAAc,IAAM,MACjCA,EAAW,YAAY,IAAI,KAG7By6G,EAAA,GAA4B,KAAM,KAAK,YAAY,CACrD,CAEO,gBAA0B,CAG/B,MAAO,CAFc,KAAK,gBAAgB,EACL,gBAAgB,EAC7B,IAAI,KAAK,MAAM,KAAK,CAC9C,CACF,C,iGC7NA,MAAMwd,EAAiB,EACjBC,EAAoB,EAEbC,EAAeC,GAAoB,CAC9C,MAAMC,EAAWD,EAAQ,MAAM,IAAI,OAAO,+CAA+C,CAAC,EAC1F,OAAOC,EAAWA,EAAS,CAAC,EAAI,IAClC,EAEaC,EAAYF,GAChBA,EAAQ,MAAM,IAAI,OAAO,iCAAkC,CAAC,IAAIH,CAAc,EAG1EM,EAAmBH,GAAoB,CAClD,IAAII,EAAQF,EAASF,CAAO,EAC5B,GAAI,CAACI,EAAO,CACVA,EAAQ,OAAI,KAAO,CAAC,GACpB,MAAMtjN,EAAMkjN,EAAQ,QAAQ,MAAM,EAAIF,EACtCE,EAAUA,EAAQ,UAAU,EAAGljN,CAAG,EAAI,OAAOsjN,CAAK,KAAOJ,EAAQ,UAAUljN,CAAG,CAChF,CAEA,IAAImjN,EAAWF,EAAYC,CAAO,EAClC,GAAIC,EAAU,CACZ,IAAII,EAAaJ,EAAS,QAAQ,eAAgB,IAAIG,CAAK,IAAI,EAC/DJ,EAAUA,EAAQ,QAAQC,EAAUI,CAAU,CAChD,CAEA,OAAOL,CACT,ECrBaM,EAAgBj1N,GAA6B,CACxD,KAAM,CAAE,WAAAk1N,EAAY,GAAGC,CAAe,EAAIn1N,EAC1C,SAAO,OAAC,UAAG,CAAE,GAAGm1N,EAAgB,cAAe,GAAM,aAAcD,EAAaE,EAAsBC,CAAA,CAAa,CACrH,EAEA,IAAI3vL,EAAQ,IAAI,IAEhB,SAAS2vL,EAAYC,EAAsB,CACzC,IAAIC,EAAQ7vL,EAAM,IAAI4vL,CAAI,EAC1B,OAAKC,IACHA,EAAQ,KAAS,mBAAmBD,CAAI,EACxC5vL,EAAM,IAAI4vL,EAAMC,CAAK,GAGhBA,CACT,CAEA,SAASH,EAAoBE,EAAsB,CACjD,IAAIC,EAAQ7vL,EAAM,IAAI4vL,CAAI,EAC1B,OAAKC,IACHA,EAAQ,KAAS,mBAAmBD,CAAI,EAEpCC,EAAM,QAAQ,yBAAyB,EAAI,KAC7CA,EAAQT,EAAgBS,CAAK,GAG/B7vL,EAAM,IAAI4vL,EAAMC,CAAK,GAGhBA,CACT,C,uJChBO,MAAM3xH,EAAoB,CAAC,CAChC,KAAAr3D,EACA,SAAAte,EACA,SAAA3lB,EACA,iBAAAg7F,EACA,UAAAkyH,EACA,UAAAC,EACA,gBAAA13H,CACF,IAA8B,CAC5B,MAAM23H,KAAS,KAAS,SAAY,CAClC,MAAMC,EAAU,KAAK,UAAU1nM,GAAY,CAAC,EAAG,KAAM,CAAC,EAChD2nM,EAAU,KAAK,UAAUttN,GAAY,CAAC,EAAG,KAAM,CAAC,EAGtD,IAAIutN,EACJ,MAAM9oL,EAAwB,CAAC,EAC/B,IAAIxjB,EAAQ,EAEZ,GAAIgjB,EACF,SAAW,CAAC7tB,EAAKo3M,CAAO,IAAK,OAAO,QAAQvpL,CAAI,EAAG,CAEjD,MAAMwpL,KAAI,OAAC,IAAS,CAAC,MAAOD,EAAmB,MAAOp3M,CAAA,EAAZA,CAAiB,EACvDA,IAAQ,gBACVm3M,EAAeE,EAEfhpL,EAAM,KAAKgpL,CAAC,EAEdxsM,GAASusM,EAAQ,MACnB,CAGF,MAAO,CACL,aAAAD,EACA,MAAA9oL,EACA,MAAAxjB,EACA,UAAWA,EAAQ,GACnB,YAAU,OAAC,IAAU,CAAC,SAAUosM,EAAS,SAAUC,CAAA,CAAS,CAC9D,CACF,EAAG,CAACrpL,EAAMte,EAAU3lB,CAAQ,CAAC,EAEvB,CAAE,MAAAtR,CAAM,EAAI0+N,EAElB,SACE,QAAC,IAAK,CAAC,UAAU,SAAS,IAAK,EAC5B,UAAA33H,MACC,OAAC,IAAG,CAAC,WAAY,EACf,mBAAC,KACC,SAAO,KACL,gFACA,sGACF,EACA,SAAS,OACX,EACF,EAEDuF,MACC,OAAC,KACC,MAAO,CACL,CACE,GAAI,UACJ,MAAOmyH,EACP,cAAeD,EACf,KAAM,CAAC,EACP,gBAAiB,EACjB,cAAe,CACjB,CACF,EAEA,SAAO,KAAE,6CAA8C,QAAQ,GAD1D,QAEP,GAEA,CAACx+N,GAAS,CAACi3B,OAAa,OAAC,IAAO,EAAC,EAClCj3B,GAASA,EAAM,OAAS,KACvB,oBACG,WAAC+mG,GAAmB/mG,GAASA,EAAM,cAAgBA,EAAM,aACzDA,GAASA,EAAM,WAAaA,EAAM,SACnC,QAAC,IAAG,CAAC,WAAY,EACf,oBAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,+CAA+C,0BAAc,EAC9E,EACCA,EAAM,UACT,GACF,KAEA,OAAC,IAAG,CAAC,WAAY,EACf,mBAAC,KAAK,CAAC,QAAQ,iEAAiE,4CAEhF,EACF,GAEJ,CAEJ,C,yGCvFO,MAAMoY,EAAY,CAAC,CAAE,MAAAvO,EAAO,UAAA8B,EAAW,SAAAvC,CAAS,IAAsB,CAC3E,MAAMW,KAAS,MAAWuD,CAAS,EAC7B0xN,EAAU,kBAAe,YAAS,CAAC,GAEzC,SACE,QAAC,OAAI,KAAK,QAAQ,kBAAiB,CAACrzN,GAAa9B,EAAQm1N,EAAU,OAAW,aAAYrzN,EACvF,UAAA9B,MACC,OAAC,SAAM,GAAIm1N,EAAS,UAAWj1N,EAAO,WAAY,cAAW,GAC1D,SAAAF,CAAA,CACH,EAEDT,CAAA,EACH,CAEJ,EACAgP,EAAU,YAAc,YAGxB,MAAM9K,EAAanF,IACV,CACL,cAAY,OAAI,CACd,MAAOA,EAAM,OAAO,KAAK,UACzB,SAAUA,EAAM,WAAW,KAAK,GAChC,QAASA,EAAM,QAAQ,GAAK,CAAC,CAC/B,CAAC,CACH,E,wECVK,MAAM82N,EAAkD,CAC7D,MAAO,OACP,QAAS,GACT,eAAgB,GAChB,YAAa,CACX,KAAM,KAAyB,IACjC,CACF,EAMO,IAAKvU,GAAAA,IACVA,EAAA,WAAa,aACbA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,KAAO,OACPA,EAAA,MAAQ,QALEA,IAAAA,GAAA,G,iUCiCZ,MAAMwU,EAAqB,UAapB,SAAS1jH,EAAkC7uC,EAA+D,CAC/G,KAAM,CAAE,KAAMl2C,EAAW,SAAAy3B,EAAU,WAAAs5D,CAAW,EAAI76C,EAG5CwyJ,GAAyBC,EAAqC3oM,CAAS,EACzE0oM,IACF1oM,EAAU,YAAY,QAAQ0oM,EAAsB,EAGtD,MAAMloH,EAAmBxgF,EAAU,YAAY,IAAK/H,IAAe,CACjE,MAAM2wM,MAAsB,KAA+B3wM,EAAU,EAE/D4wM,GAAa,CACjB,OAAK,YAAS,cAAc,EAC5B,MAAOD,GACP,KAAM3wM,GAAW,KAAK,KACtB,UAAW,EAAQA,GAAW,KAAK,OACnC,SAAU,EAAQA,GAAW,KAAK,KAClC,UAAWA,GAAW,KAAK,SAC7B,EAEA,OAAO,IAAI,IAA8B4wM,EAAU,CACrD,CAAC,EAEKC,GAAsB,EAAQ9oM,EAAU,SACxCqlF,GAAUnvC,EAAI,OAAO,UAAY,GACvC,IAAI6yJ,EAEAtxK,EAAS,SAAS,IAAoB,IACxCsxK,EAAc,SAAStxK,EAAS,OAAO,IAAoB,EAAG,EAAE,GAGlE,MAAMvyB,EAAsB,CAC1B,SAAUgxC,EAAI,OAAO,WAAa,GAClC,QAAAmvC,GACA,QAASnvC,EAAI,OAAO,UAAY,GAChC,QAASA,EAAI,OAAO,UAAY,GAChC,UAAWA,EAAI,OAAO,YAAc,GACpC,SAAUA,EAAI,OAAO,WAAa,GAClC,IAAKA,EAAI,OAAO,IAChB,KAAMA,EAAI,OAAO,KACjB,uBAAwBA,EAAI,OAAO,uBACnC,QAASze,EAAS,kBAClB,UAAWA,EAAS,cAAc,IAAgB,EAClD,QAASA,EAAS,cAAc,IAAuB,EACvD,UAAWA,EAAS,cAAc,IAAgB,EAClD,UAAWA,EAAS,cAAc,IAAa,EAC/C,WAAY,EAAQA,EAAS,cAAc,IAA0B,EACrE,WAAY,EAAQA,EAAS,cAAc,IAAe,EAG1D,aAAc,EAAQye,EAAI,OAAO,QACjC,gBAAiBmvC,IAAW,CAACyjH,GAC7B,uBAAwB,GACxB,QAASrxK,EAAS,WAClB,IAAKA,CACP,EAGKqxK,KACH5jM,EAAK,QAAU,GACfA,EAAK,UAAY,GACjBA,EAAK,QAAU,IAGjB,MAAMu+B,EAAwC,IAC3C,IAAIzjC,EAAU,OAAO,IAAI,EACzB,YAAYA,EAAU,OAAQA,EAAU,SAAUA,EAAU,OAAO,EAKhEgpM,KAAoB,MAAsCvxK,EAAS,KAAMz3B,EAAU,KAAK,EAExFipM,GACJ,IAAO,4BAA4B,UAAWzhL,IAAQA,KAAQ,KAAOA,KAAQiQ,EAAS,IAAI,IAAM,GAC5FyxK,GAAkB,IAAI,QAC1B,CACE,gBAAAD,EACF,EACAD,CACF,EAEMG,GAAqB,IAAI,QAC7B,CACE,0BAA2BF,GAC3B,yBAAuB,MAAyCxxK,EAAS,KAAMz3B,EAAU,KAAK,CAChG,EACAgpM,CACF,EAEMI,EAAiB,IAAI,KACzB,CACE,YAAappM,EAAU,YACvB,SAAUA,EAAU,SACpB,QAASA,EAAU,QACnB,GAAI+oM,EACJ,QAAS,GACT,MAAO/oM,EAAU,MACjB,KAAAkF,EACA,KAAMlF,EAAU,KAChB,MAAOA,EAAU,MACjB,IAAKy3B,EAAS,KACd,QAASA,EAAS,WAClB,KAAMgM,EACN,WAAY,IAAI,KAAe,CAC7B,KAAMzjC,EAAU,aAAa,KAC7B,GAAIA,EAAU,aAAa,GAC3B,qBAAsBA,EAAU,aAAa,qBAC7C,SAAUA,EAAU,aAAa,SACjC,UAAWA,EAAU,aAAa,UAClC,gBAAiBA,EAAU,aAAa,QAC1C,CAAC,EACD,WAAYqpM,EAAarpM,EAAWkF,EAAK,YAAc,EAAK,EAC5D,WAAY,CACV,IAAI,QAAqB,CACvB,QAAM,MAA0BlF,EAAU,UAAU,CACtD,CAAC,EACDkpM,GACAC,GACA,IACA,KACA,IAAI,QAAuB,CAAE,QAASnpM,EAAU,OAAQ,CAAC,EACzD,IACA,IAAI,IAAwB,CAC1B,qBAAsB,IAAO,eAAe,gCAAkC,GAC9E,IAAK+oM,GAAa,SAAS,CAC7B,CAAC,EACD,GAAIE,GAAkB,CAAC,GAA6B,EAAI,CAAC,CAC3D,EACA,MAAO,IAAI,IAAsB,CAC/B,iBAAAzoH,CACF,CAAC,EACD,SAAU,IAAI,IAAkB,CAC9B,WAAY,IAAI,KAAgB,CAC9B,YAAaxgF,EAAU,aAAa,YACpC,mBAAoB,IAAO,WAC7B,CAAC,EACD,cAAe,IAAI,KAAmB,CACpC,QAASA,EAAU,aAAa,YAChC,UAAWA,EAAU,aAAa,qBAClC,SAAU,EACZ,CAAC,EACD,iBAAkBA,EAAU,aAAa,cAC3C,CAAC,CACH,EACA,IACF,EAEA,OAAAopM,EAAe,oBAAoBlzJ,EAAI,KAAMA,EAAI,SAAU66C,CAAU,KAGrE,MAAiCq4G,EAAgB3xK,EAAS,IAAI,EAEvD2xK,CACT,CAEA,SAASC,EAAarpM,EAA4BsvH,EAAmD,CACnG,IAAIt/E,EAEJ,OAAIs/E,EACFt/E,EAAYs5J,EAA2BtpM,CAAS,EAEhDgwC,EAAYu5J,EAA4BvpM,CAAS,EAG5CgwC,CACT,CAEA,SAASu5J,EAA4BvpM,EAA4B,CAC/D,MAAMwpM,EAAkBxpM,EAAU,UAC/B,IAAKlxB,GAAM,CACV,GAAI,CACF,OAAO26N,EAAqC36N,CAAC,CAC/C,OAASuX,EAAK,CACZ,eAAQ,MAAMA,CAAG,EACV,IACT,CACF,CAAC,EAGA,OAAQvX,GAA0B,EAAQA,CAAE,EAG/C,OAAI,IAAO,eAAe,cAAgB,CAAC,IAAO,4BAChD06N,EAAgB,KAAK,IAAI,KAAe,CAAE,OAAQ,EAAK,CAAC,CAAC,EAGpD,IAAI,KAAiB,CAC1B,UAAWA,CACb,CAAC,CACH,CAEA,SAASC,EAAqCn8N,EAA+C,CAC3F,MAAMilK,EAAmB,CACvB,KAAMjlK,EAAS,KAAK,KACpB,MAAOA,EAAS,KAAK,MACrB,YAAaA,EAAS,KAAK,WAC7B,EACA,GAAIA,EAAS,UAAS,MAAyB,EAAE,KAAM,CACrD,MAAMmyD,KAAK,MACT,CACE,KAAMnyD,EAAS,MACf,IAAKA,EAAS,YAAY,IAC5B,EACAA,EAAS,KACX,EACA,OAAO,IAAI,KAAqB,CAC9B,GAAGilK,EACH,YAAajlK,EAAS,KAAK,YAC3B,YAAaA,EAAS,KAAK,YAC3B,QAAM,MAA8BA,EAAS,KAAK,IAAI,EACtD,WAAYmyD,EACZ,UAAW,OACX,QAASnyD,EAAS,KAAK,SAAW,CAAC,EACnC,YAAaA,EAAS,KAAK,aAAe,CAAC,EAC3C,YAAaA,EAAS,KAAK,YAC3B,6BAA8B,GAC9B,OAAQ,IAAO,eAAe,aAAe,WAAa,OAC1D,4BAA6B,KAAQ,KAAiB,EAAE,oBAAoBmyD,CAAE,GAAG,KAAK,yBACxF,CAAC,CACH,CACA,GAAInyD,EAAS,UAAS,MAA0B,EAAE,KAChD,OAAO,IAAI,KAAe,CACxB,GAAGilK,EACH,MAAOjlK,EAAS,KAAK,SAAS,OAAS,GACvC,KAAMA,EAAS,KAAK,SAAS,MAAQ,GAErC,MAAOA,EAAS,KAAK,MACrB,QAASA,EAAS,KAAK,MACvB,SAAUA,EAAS,KAAK,UAAY,OACpC,WAAYA,EAAS,KAAK,WAC1B,aAAc,EAAQA,EAAS,KAAK,WACpC,YAAaA,EAAS,KAAK,YAC3B,QAAM,MAA8BA,EAAS,KAAK,IAAI,CACxD,CAAC,EACI,GAAIA,EAAS,UAAS,MAAyB,EAAE,KACtD,OAAO,IAAI,KAAc,CACvB,GAAGilK,EACH,MAAOjlK,EAAS,KAAK,SAAS,OAAS,GACvC,KAAMA,EAAS,KAAK,SAAS,MAAQ,GACrC,MAAOo8N,EAAwBp8N,CAAQ,EACvC,cAAY,MAA6BA,CAAQ,EACjD,QAAM,MAA8BA,EAAS,KAAK,IAAI,EACtD,WAAS,MAAiCA,EAAS,KAAK,OAAO,EAC/D,MAAOA,EAAS,KAAK,MACrB,SAAUA,EAAS,KAAK,UAAY,OACpC,WAAYA,EAAS,KAAK,WAC1B,aAAc,EAAQA,EAAS,KAAK,WACpC,QAASA,EAAS,KAAK,MACvB,YAAaA,EAAS,KAAK,YAC3B,QAAM,MAA8BA,EAAS,KAAK,IAAI,EACtD,WAAYA,EAAS,KAAK,UAC5B,CAAC,EACI,GAAIA,EAAS,UAAS,MAA8B,EAAE,KAC3D,OAAO,IAAI,KAAmB,CAC5B,GAAGilK,EACH,MAAOjlK,EAAS,KAAK,SAAS,OAAS,GACvC,KAAMA,EAAS,KAAK,SAAS,MAAQ,GACrC,MAAOA,EAAS,KAAK,MACrB,SAAUA,EAAS,KAAK,SACxB,SAAUA,EAAS,KAAK,UAAY,OACpC,WAAYA,EAAS,KAAK,WAC1B,aAAc,EAAQA,EAAS,KAAK,WACpC,YAAaA,EAAS,KAAK,YAC3B,QAASA,EAAS,KAAK,MACvB,QAAM,MAA8BA,EAAS,KAAK,IAAI,EACtD,qBACEA,EAAS,KAAK,SAAS,QAAUm7N,GAAsBn7N,EAAS,KAAK,SAAS,OAAS,SAC3F,CAAC,EACI,GAAIA,EAAS,UAAS,MAA4B,EAAE,KAAM,CAC/D,MAAM8tB,KAAY,MAA4B9tB,EAAS,KAAK,KAAK,EAC3Dq8N,EAAkBC,EAAmCt8N,EAAU8tB,CAAS,EAC9E,OAAO,IAAI,KAAiB,CAC1B,GAAGm3I,EACH,MAAOo3D,EACP,UAAAvuM,EACA,YAAa9tB,EAAS,KAAK,KAC3B,cAAeA,EAAS,KAAK,WAC7B,gBAAiBA,EAAS,KAAK,SAC/B,WAAS,MAAiCA,EAAS,KAAK,OAAO,EAC/D,YAAaA,EAAS,KAAK,YAC3B,QAAM,MAA8BA,EAAS,KAAK,IAAI,CACxD,CAAC,CACH,KAAO,IAAIA,EAAS,UAAS,MAA4B,EAAE,KACzD,OAAO,IAAI,KAAiB,CAC1B,GAAGilK,EACH,MAAOjlK,EAAS,KAAK,MACrB,YAAaA,EAAS,KAAK,YAC3B,QAAM,MAA8BA,EAAS,KAAK,IAAI,CACxD,CAAC,EACI,GAAIA,EAAS,UAAS,MAAwB,EAAE,KAAM,CAC3D,IAAIwhC,EACJ,OAAKxhC,GAAU,KAAK,SAAS,MAGvB,OAAOA,EAAS,KAAK,QAAQ,OAAU,SACzCwhC,EAAMxhC,EAAS,KAAK,QAAQ,MAE5BwhC,EAAMxhC,EAAS,KAAK,QAAQ,MAAM,CAAC,EALrCwhC,EAAMxhC,EAAS,KAAK,MASf,IAAI,KAAgB,CACzB,GAAGilK,EACH,MAAOzjI,EACP,YAAaxhC,EAAS,KAAK,YAC3B,QAAM,MAA8BA,EAAS,KAAK,IAAI,CACxD,CAAC,CACH,SAAW,IAAO,eAAe,iBAAmBA,EAAS,UAAS,MAA2B,EAAE,KAAM,CACvG,MAAMmyD,KAAK,MACT,CACE,KAAMnyD,EAAS,MACf,IAAKA,EAAS,YAAY,IAC5B,EACAA,EAAS,KACX,EAEA,OAAO,IAAI,KAAgB,CACzB,GAAGilK,EACH,WAAY9yG,EACZ,MAAOnyD,EAAS,KAAK,SAAS,OAAS,CAAC,EACxC,KAAMA,EAAS,KAAK,SAAS,MAAQ,CAAC,EACtC,YAAaA,EAAS,KAAK,YAC3B,QAASA,EAAS,KAAK,MACvB,QAAM,MAA8BA,EAAS,KAAK,IAAI,EAEtD,eAAgBA,EAAS,OAC3B,CAAC,CACH,KAAO,IAAIA,EAAS,UAAS,MAA0B,EAAE,KACvD,OAAO,IAAI,KAAe,CACxB,GAAGilK,EACH,MAAOjlK,EAAS,KAAK,SAAW,QAChC,aAAcA,EAAS,KAAK,cAAgB,OAC5C,cAAeA,EAAS,KAAK,eAAiB,QAC9C,YAAaA,EAAS,KAAK,YAC3B,QAAM,MAA8BA,EAAS,KAAK,IAAI,CACxD,CAAC,EAED,MAAM,IAAI,MAAM,qCAAqCA,EAAS,IAAI,EAAE,GAExE,CAEA,SAASo8N,EAAwBp8N,EAA6B,CAC5D,OAAO,QAA2BA,EAAS,KAAK,MAAM,KACjDA,EAAS,KAAK,MAAM,KAAK,IAAuB,GAAK,GACtD,CACE,GAAGA,EAAS,KAAK,MAAM,KACvB,MAAOA,EAAS,KAAK,MAAM,KAAK,OAAS,GAC3C,CACN,CAEO,SAASs8N,EAAmCt8N,EAAgC8tB,EAA6B,CAC9G,MAAMyuM,EAAmB,MAAM,QAAQv8N,EAAS,KAAK,QAAQ,KAAK,EAC9DA,EAAS,KAAK,QAAQ,MAAM,CAAC,EAC7BA,EAAS,KAAK,QAAQ,MAG1B,OAAIu8N,EAAiB,WAAW,mBAAmB,EAC1C,UAILzuM,EAAU,SAASyuM,CAAgB,EAC9BA,EAIFzuM,EAAU,CAAC,CACpB,CAEO,SAASkuM,EAA2BtpM,EAA8C,CACvF,MAAMwpM,EAAkBxpM,EAAU,UAC/B,IAAKlxB,GAAM,CACV,GAAI,CAEF,GAAIA,EAAE,OAAS,gBAAiB,CAC9B,MAAM2wD,KAAK,MACT,CACE,KAAM3wD,EAAE,MACR,IAAKA,EAAE,YAAY,IACrB,EACAA,EAAE,KACJ,EAEA,OAAO,IAAI,KAAqB,CAC9B,KAAMA,EAAE,KAAK,KACb,MAAOA,EAAE,KAAK,MACd,SAAU,GACV,YAAaA,EAAE,KAAK,YACpB,YAAaA,EAAE,KAAK,YACpB,QAAM,MAA8BA,EAAE,KAAK,IAAI,EAC/C,WAAY2wD,EACZ,UAAW,OACX,QAAS3wD,EAAE,KAAK,SAAW,CAAC,EAC5B,YAAaA,EAAE,KAAK,aAAe,CAAC,EACpC,YAAaA,EAAE,KAAK,YACpB,6BAA8B,GAC9B,OAAQ,IAAO,eAAe,aAAe,WAAa,OAC1D,4BAA6B,KAC3B,KAAiB,EAAE,oBAAoB2wD,CAAE,GAAG,KAAK,yBAErD,CAAC,CACH,CAEA,OAAOqqK,EAAuBh7N,CAAC,CACjC,OAASuX,EAAK,CACZ,eAAQ,MAAMA,CAAG,EACV,IACT,CACF,CAAC,EAGA,OAAQvX,GAA0B,EAAQA,CAAE,EAE/C,OAAO,IAAI,KAAiB,CAC1B,UAAW06N,CACb,CAAC,CACH,CAGO,SAASM,EAAuBx8N,EAA+C,CACpF,IAAIy8N,EACAljN,EACJ,GAAIvZ,EAAS,OAAS,mBAAoB,CACxC,MAAM8tB,KAAY,MAA4B9tB,EAAS,KAAK,KAAK,EAC3Dq8N,GAAkBC,EAAmCt8N,EAAU8tB,CAAS,EAC9E,OAAA2uM,EAAmB,IAAI,IAAiB,CACtC,KAAMz8N,EAAS,KAAK,KACpB,MAAOA,EAAS,KAAK,MACrB,YAAaA,EAAS,KAAK,YAC3B,MAAOq8N,GACP,KAAMA,GACN,QAAM,MAA8Br8N,EAAS,KAAK,IAAI,CACxD,CAAC,EACMy8N,CACT,CAEA,OAAIz8N,EAAS,OAAS,oBAAsBA,EAAS,OAAS,gBAC5DuZ,EAAU,CACR,MAAO,GACP,KAAM,EACR,EACSvZ,EAAS,OAAS,iBAC3BuZ,EAAU,CACR,MAAOvZ,EAAS,KAAK,SAAW,QAChC,KAAMA,EAAS,KAAK,SAAW,OACjC,EAEAuZ,EAAU,CACR,MAAOvZ,EAAS,KAAK,SAAS,OAAS,GACvC,KAAMA,EAAS,KAAK,SAAS,MAAQ,EACvC,EAGFy8N,EAAmB,IAAI,IAAiB,CACtC,KAAMz8N,EAAS,KAAK,KACpB,MAAOA,EAAS,KAAK,MACrB,YAAaA,EAAS,KAAK,YAC3B,MAAOuZ,GAAS,OAAS,GACzB,KAAMA,GAAS,MAAQ,GACvB,QAAM,MAA8BvZ,EAAS,KAAK,IAAI,CACxD,CAAC,EACMy8N,CACT,CAEO,SAASC,EAAgBhqM,EAA4BiqM,EAA4C,CACtG,OAAOjqM,EAAU,SAASiqM,CAAW,EAAE,OAAS,QAAUjqM,EAAU,SAASiqM,CAAW,EAAI,MAC9F,CAEO,SAASC,EAAuBlqM,EAA4BiqM,EAAmD,CACpH,OAAOjqM,EAAU,SAASiqM,CAAW,EAAE,OAAS,eAAiBjqM,EAAU,SAASiqM,CAAW,EAAI,MACrG,CACA,SAAStB,EAAqC3oM,EAA4B,CAExE,OADcA,EAAU,YAAY,KAAM1hB,GAASA,EAAK,KAAK,OAAO,EAElE,OAGkD,CAClD,KAAM,kBACN,KAAM,CACJ,MAAO,CACL,KAAM,YACN,WAAS,MAAqB,EAAE,QAChC,MAAO,UACP,WAAY,CACV,KAAM,eACR,EACA,KAAM,CAAC,CACT,EACA,KAAM,uBACN,UAAW,KACX,OAAQ,GACR,KAAM,GACN,QAAS,EACX,CACF,CAGF,C,6EC3kBO,MAAM6rN,EAAe5gO,GACtBA,IAAU,IAGQ6gO,EAAkB7gO,CAAK,EAEpCA,EAEF,IAAIA,CAAK,IAmBL8gO,EAAwB9gO,GAAkB,CAErD,GADsB6gO,EAAkB7gO,CAAK,EAE3C,OAAOA,EAGT,IAAI+gO,EAAU,MAEd,QAASj6N,EAAI,EAAGA,EAAI9G,EAAM,OAAQ8G,IAAK,CACrC,MAAM6uE,EAAO31E,EAAM8G,CAAC,EACdk6N,EAAYhhO,EAAM,YAAY8G,CAAC,EAEjC6uE,IAAS,IACXorJ,GAAW,KACFC,IAAc,QAAaC,EAAkBtrJ,EAAM7uE,CAAC,EAC7Di6N,GAAWprJ,EACFqrJ,IAAc,QAAa,CAACE,EAAiBF,CAAS,EAC/DD,GAAW,UAEXA,GAAW,IACXA,GAAWC,EAAU,SAAS,EAAE,EAChCD,GAAW,KAITC,IAAc,QAAaA,EAAY,OACzCl6N,GAEJ,CAEA,OAAOi6N,CACT,EAYaF,EAAqBzqN,GAA0B,CAC1D,GAAIA,EAAK,SAAW,EAClB,MAAO,GAGT,QAAStP,EAAI,EAAGA,EAAIsP,EAAK,OAAQtP,IAAK,CACpC,MAAM6uE,EAAOv/D,EAAKtP,CAAC,EACnB,GAAI,CAACm6N,EAAkBtrJ,EAAM7uE,CAAC,EAC5B,MAAO,EAEX,CAEA,MAAO,EACT,EAaMm6N,EAAoB,CAACtrJ,EAAc/jE,IAA2B,CAClE,MAAMovN,EAAYrrJ,EAAK,YAAY,CAAC,EACpC,OAAIqrJ,IAAc,OACT,GAINA,GAAa,IAAMA,GAAa,KAChCA,GAAa,IAAMA,GAAa,IACjCA,IAAc,IACdA,IAAc,IACbA,GAAa,IAAMA,GAAa,IAAMpvN,EAAQ,CAEnD,EAQMsvN,EAAoBF,GACjBA,GAAa,GAAKA,GAAa,QAa3BG,EAAmBC,GAA8B,CAC5D,MAAMC,EAAwB,CAAC,EACzBC,EAAgB,eACtB,IAAIC,EAAa,GACb58D,EAAe,GACf68D,EAAW,GACXC,EAAO,GACX,MAAMC,EAAY,IAAM,CACtB,MAAMC,EAAgBF,EAAK,MAAMH,CAAa,EAC9C,GAAIK,EAAe,CACjB,MAAMz1D,EAAWy1D,EAAc,CAAC,EAChC,CAACJ,EAAY58D,CAAY,EAAI88D,EAAK,MAAMv1D,CAAQ,EAChDm1D,EAAY,KAAK,GAAGT,EAAYW,EAAW,KAAK,CAAC,CAAC,GAAGr1D,CAAQ,IAAIvH,EAAa,MAAM,EAAG,EAAE,CAAC,GAAG,CAC/F,CACF,EAEA,UAAWhvF,KAAQyrJ,EACbzrJ,IAAS,KAAO8rJ,EAAKA,EAAK,OAAS,CAAC,IAAM,MAE5CD,EAAW,CAACA,EACZC,GAAQ9rJ,GACCA,IAAS,KAAO,CAAC6rJ,GAE1BE,EAAU,EACVD,EAAO,IAGPA,GAAQ9rJ,EAKZ,OAAI8rJ,GACFC,EAAU,EAELL,EAAY,KAAK,GAAG,CAC7B,C,kICnKO,SAASO,EAAa,CAAE,OAAAjyM,EAAQ,GAAGjhB,CAAY,EAAsB,CAC1E,MAAMvG,KAAQ,MAAU,EAClB29K,EAAkBn2J,EAAO,MAAM,iBAAmBxnB,EAAM,OAAO,UAAU,KACzE0+L,EAAY1+L,EAAM,OAAO,gBAAgB29K,CAAe,EAExD,CAAC71G,EAAaC,CAAc,KAAI,YAAS,EAAK,EAG9C,CAAC2xJ,EAAeC,CAAgB,KAAI,YAAS,EAAK,EAClD,CAACC,EAAYC,CAAa,KAAI,YAA8B,CAAC,CAAC,EAE9DC,EAAqBtyM,EAAO,WAAaA,EAAO,UAAU,OAAS,EAEnE5Y,EAAU,IAAM,CAChBkrN,EACFH,EAAiB,EAAI,EAErB5xJ,EAAe,EAAI,CAEvB,EAEA,SACE,oBACE,oBAAC,MACC,QAAQ,UACR,KAAK,KACL,QAAAn5D,EACC,GAAGrI,EACJ,MAAO,CAAE,MAAO,cAAe,gBAAAo3K,EAAiB,MAAO+gB,CAAU,EAEhE,SAAAl3K,EAAO,MACV,EAECsyM,GAAsBJ,MACrB,OAAC,KACC,UAAW,IAAMC,EAAiB,EAAK,EACvC,OAAAnyM,EACA,cAAe,IAAMugD,EAAe,EAAI,EACxC,UAAW6xJ,EACX,aAAcC,CAAA,CAChB,EAGD/xJ,MACC,OAAC,KACC,OAAQ,GACR,SAAO,KAAE,iDAAkD,gBAAgB,EAC3E,KAAMtgD,EAAO,aAAaoyM,CAAU,EACpC,eAAa,KAAE,0CAA2C,SAAS,EACnE,qBAAqB,UACrB,UAAW,IAAM,CACf7xJ,EAAe,EAAK,EACpBvgD,EAAO,QAAQ,IAAI,WAAW,OAAO,EAAG,KAAMoyM,CAAU,CAC1D,EACA,UAAW,IAAM,CACf7xJ,EAAe,EAAK,CACtB,EACF,GAEJ,CAEJ,C,cC1CC,SAAUnyC,GAAG,CACV,IAAIv6B,EAAU,CACV,OAAQ,CAAE,MAAO,IAAK,CAC1B,EAEA,SAASw6B,EAAKC,EAAM,CAChB,SAASikM,EAAmB37N,EAAG47N,EAAW,CAEtC,QADI93L,EAAM,KACD,EAAI,EAAG,EAAI83L,EAAU,QACtB57N,GAAK47N,EAAU,CAAC,EADc,EAAE,EAIhCA,EAAU,CAAC,EAAE,OAAS57N,EAAE,QACxB8jC,EAAM83L,EAAU,CAAC,GAGzB,OAAO93L,CACX,CAEA,SAAS+3L,EAAUnkM,EAAM13B,EAAG23B,EAAY,CACpC,GAAI,EAAA33B,EAAE,OAAS,MAAQA,EAAE,QAAU,IAGnC,KAAIktB,EAAQyuM,EAAmB37N,EAAG03B,EAAK,QAAQ,CAAC,EAChD,GAAKxK,EAiBL,SAdIiL,EAAKR,EAAW,UAChBO,EAASP,EAAW,OACpBmkM,EAAU5uM,EAAM,WAAW,UAC3B6uM,EAAc7uM,EAAM,WAAW,OAC/B8uM,EAAY,CAAC,EACbC,EAAIC,EAAIC,EAAQC,EAAIC,EAAIC,EACxBC,EAAYv8N,EAAE,MAAM,KACpBwrH,EAAaxrH,EAAE,KAAK,WACpBw8N,EAAarkM,EAAK,IAAMqzF,EAAa7zF,EAAW,OAAO,CAAC,EAAE,EAAIA,EAAW,OAAO,CAAC,EAAE,GACnF8kM,EAAYF,GAAav8N,EAAE,MAAM,MACjC08N,EAAYlxG,EAAa,EAAI,EAC7BmxG,EAAmBnxG,EAAa,EAAI,EACpCjrH,EAAI,EAAG0Z,EAAI,EAAGwzD,EAAG4E,EAGb,EAAA9xE,GAAK23B,EAAO,QAAUje,GAAK8hN,EAAY,SADlC,CAMT,GAFAtuJ,EAAIuuJ,EAAU,OAEVz7N,EAAI23B,EAAO,QAAUA,EAAO33B,CAAC,GAAK,KAAM,CAExC,IAAK8xE,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAU,KAAK9jM,EAAO33B,EAAI8xE,CAAC,CAAC,EAChC9xE,GAAK43B,CACT,SACS53B,GAAK23B,EAAO,OAAQ,CAEzB,IAAKm6C,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAU,KAAKD,EAAY9hN,EAAIo4D,CAAC,CAAC,EACjCmqJ,IACAR,EAAUvuJ,EAAI,CAAC,EAAIsuJ,EAAY9hN,EAAI0iN,CAAgB,GACvD1iN,GAAK6hN,CACT,SACS7hN,GAAK8hN,EAAY,OAAQ,CAE9B,IAAK1pJ,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAU,KAAK9jM,EAAO33B,EAAI8xE,CAAC,CAAC,EAChC9xE,GAAK43B,CACT,SACSle,EAAI8hN,EAAY,QAAUA,EAAY9hN,CAAC,GAAK,KAEjDA,GAAK6hN,MAEJ,CAQD,GANAG,EAAK/jM,EAAO33B,EAAIm8N,CAAS,EACzBR,EAAKhkM,EAAO33B,EAAIo8N,CAAgB,EAChCP,EAAKL,EAAY9hN,EAAIyiN,CAAS,EAC9BL,EAAKN,EAAY9hN,EAAI0iN,CAAgB,EACrCL,EAAS,EAELL,GAAMG,EAAI,CACV,IAAK/pJ,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAU,KAAK9jM,EAAO33B,EAAI8xE,CAAC,CAAC,EAEhC2pJ,EAAUvuJ,EAAIkvJ,CAAgB,GAAKN,EACnCC,EAASD,EAET97N,GAAK43B,EACLle,GAAK6hN,CACT,SACSG,EAAKG,EAAI,CAEd,GAAI77N,GAAK,EAAG,CACR,IAAK8xE,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAU,KAAKD,EAAY9hN,EAAIo4D,CAAC,CAAC,EACrCiqJ,EAASD,CACb,CAGA,GAAI97N,EAAI,GAAK23B,EAAO33B,EAAI43B,CAAE,GAAK,KAAM,CAIjC,IAHAgkM,EAAS,EACTH,EAAU,KAAKI,CAAE,EACjBJ,EAAU,KAAKG,EAASE,CAAE,EACrBhqJ,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAU,KAAK9jM,EAAO33B,EAAI8xE,CAAC,CAAC,EAChCiqJ,EAASD,CACb,CAEApiN,GAAK6hN,CACT,KACK,CACD,IAAKzpJ,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAU,KAAK9jM,EAAO33B,EAAI8xE,CAAC,CAAC,EAI5Bp4D,EAAI,GAAK8hN,EAAY9hN,EAAI6hN,CAAO,GAAK,OACrCQ,EAAS,GAEbN,EAAUvuJ,EAAIkvJ,CAAgB,GAAKL,EAEnC/7N,GAAK43B,CACT,CAEA,QAAU,GAENs1C,GAAKuuJ,EAAU,QAAUQ,IACzBR,EAAUvuJ,EAAI,CAAC,EAAI6uJ,EAC3B,CAGA,GAAIG,GAAahvJ,GAAKuuJ,EAAU,QAAUvuJ,EAAI,GACvCuuJ,EAAUvuJ,CAAC,GAAK,MAChBuuJ,EAAUvuJ,CAAC,GAAKuuJ,EAAUvuJ,EAAIt1C,CAAE,GAChC6jM,EAAUvuJ,EAAI,CAAC,GAAKuuJ,EAAUvuJ,EAAIt1C,EAAK,CAAC,EAAG,CAC9C,IAAKk6C,EAAI,EAAGA,EAAIl6C,EAAI,EAAEk6C,EAClB2pJ,EAAUvuJ,EAAIt1C,EAAKk6C,CAAC,EAAI2pJ,EAAUvuJ,EAAI4E,CAAC,EAC3C2pJ,EAAUvuJ,EAAI,CAAC,EAAIuuJ,EAAUvuJ,EAAIt1C,EAAK,CAAC,CAC3C,CACJ,CAEAR,EAAW,OAASqkM,GACxB,CAEAtkM,EAAK,MAAM,kBAAkB,KAAKmkM,CAAS,CAC/C,CAEArkM,GAAE,KAAK,QAAQ,KAAK,CAChB,KAAMC,EACN,QAASx6B,EACT,KAAM,QACN,QAAS,KACb,CAAC,CACL,GAAG,MAAM,C,2ECvLF,SAAS2/N,GAA+E,CAC7F,MAAMnmN,KAAU,cAAW,GAAa,EAIxC,OAAKA,GACI,IAKX,C,qJCDO,MAAM8wI,EAAkB,CAAC,CAAE,OAAArH,EAAQ,SAAA7mJ,EAAU,GAAAytB,CAAG,IAAa,CAClE,MAAMo5C,KAAY,MAAahkD,MACtB,SAAkB,MAAWA,CAAK,EAAGA,CAAK,CAClD,EAEK2gN,KAAkB,WAAQ,IAAM,CACpC,MAAM5/N,EAAiDijE,EAAU,IAAK1xD,IAC7D,CAAE,MAAOA,EAAK,KAAM,MAAOA,EAAK,IAAK,EAC7C,EAED,OAAIvR,EAAQ,SAAW,GACrBA,EAAQ,QAAQ,CACd,SAAO,KACL,iFACA,6BACF,EACA,MAAO,IACT,CAAC,EAGHA,EAAQ,QAAQ,CACd,SAAO,KAAE,uEAAwE,mBAAmB,EACpG,MAAO,IACT,CAAC,EAEMA,CACT,EAAG,CAACijE,CAAS,CAAC,EAER48J,KAAiB,eAAa15N,GAA2C/J,EAAS+J,EAAO,KAAM,EAAG,CAAC/J,CAAQ,CAAC,EAElH,SAAO,OAAC,KAAM,CAAC,QAASytB,EAAI,MAAOo5H,EAAQ,SAAU48E,EAAgB,QAASD,CAAA,CAAiB,CACjG,EASaE,EAAmB,CAAC,CAAE,aAAA/1E,EAAc,OAAA9G,EAAQ,GAAAp5H,EAAI,SAAAztB,CAAS,IAAc,CAElF,MAAM6mE,KADY,WAAQ,IAAM,KAAW,aAAa8mF,EAAa,QAAQ,CAAC,EAAG,CAACA,CAAY,CAAC,EACnE,SAAS,EAAE,UAEjC61E,KAAkB,WAAQ,IAAM,CACpC,MAAM5/N,EAA4BijE,EAAU,IAAK1xD,IAAU,CACzD,MAAOA,EAAK,MAAM,KAClB,MAAOA,EAAK,MAAM,IACpB,EAAE,EAEF,OAAAvR,EAAQ,QAAQ,CACd,SAAO,KAAE,wEAAyE,mBAAmB,EACrG,MAAO,EACT,CAAC,EAEMA,CACT,EAAG,CAACijE,CAAS,CAAC,EAER48J,KAAiB,eAAarjO,GAAiCA,GAASJ,EAASI,EAAM,KAAK,EAAG,CAACJ,CAAQ,CAAC,EAEzG6K,EAAa,CAACg8I,GAAU28E,EAAgB,QAAU,EAExD,SACE,OAAC,KACC,GAAA/1M,EACA,MAAOo5H,EACP,SAAU48E,EACV,QAASD,EACT,SAAU34N,EACV,YACEA,KACI,KACE,kFACA,6BACF,KACA,KAAE,2CAA4C,QAAQ,EAE9D,CAEJ,C,0ICnFO,SAAS84N,GAAwB,CACtC,KAAM,CAAE,OAAApqG,CAAO,KAAI,MAAW,EACxB12G,EAAQ02G,EAAO,MAAM,SAAS,EAC9BqqG,KAAS,KAAU,EAEnBC,KAAgB,KAAsB,IAAI,EAE1C,CAACC,EAAcC,CAAe,KAAI,YACtCC,EAA0BnhN,EAAO+gN,GAAQ,MAAM,QAASC,CAAa,CACvE,EAGA,sBAAU,IAAM,CACd,MAAMI,EAAQ1qG,EAAO,MAAM,UAAW12G,GAAU,CAC9C,MAAMqhN,EAAYF,EAA0BnhN,EAAO+gN,GAAQ,MAAM,QAASC,CAAa,EACnFK,IAAcJ,GAChBC,EAAgBG,CAAS,CAE7B,CAAC,EAED,MAAO,IAAMD,EAAM,YAAY,CACjC,EAAG,CAAC1qG,EAAQuqG,EAAcF,EAAQC,CAAa,CAAC,EAEzCC,CACT,CAEA,SAASE,EACPG,EACAC,EAAqC,GACrCP,EACA,CAEA,OAAIM,EAAY,WAAaA,EAAY,WAChC,EAILC,EACK,EAIJD,EAAY,QAObA,EAAY,gBAAkB,CAAC,IAAO,eAAe,eAChD,EAILN,GAAiB,IAAO,eAAe,eAClC,EAGF,EAfE,CAgBX,CAOO,SAASQ,GAAwB,CACtC,MAAMC,EAASX,EAAsB,EAG/B,CAAE,OAAQY,CAAuB,KAAI,MAA2B,EAEtE,OAAIA,EACK,EAGFD,EAASE,EAA2B,CAC7C,CAKO,SAASA,GAA6B,CAG3C,MAAO,GACT,C,mSCvFO,SAASC,EAAW,CAAE,SAAA/3L,CAAS,EAAU,CAC9C,KAAM,CAAE,MAAAtsC,EAAO,QAAAuQ,EAAS,MAAAG,EAAM,KAAI48B,EAAA,GAAS,YAClC,MAAc,EAAE,IAAI,gBAAgBhB,CAAQ,sBAAsB,EACxE,CAAC,CAAC,EAECg4L,MAAmB,KAAetkO,CAAK,EAE7C,OAAIuQ,KACK,OAAC4pC,EAAA,EAAkB,CAAC,QAAM,KAAE,8BAA+B,iBAAiB,EAAG,EAGpFzpC,MAEA,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,4BAA4B,gDAAoC,EACjF,EAIA1Q,IAAU,MAEV,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,gCAAgC,yCAA6B,EAC9E,KAIG,OAAC,OAAI,UAAU,gBAAgB,wBAAyB,CAAE,OAAQskO,EAAiB,EAAG,CAC/F,C,mLCvBO,MAAMC,EAA0B,OAAW,CAAC,CAAE,QAAA/gO,EAAS,WAAAqtE,EAAY,KAAA1sE,EAAM,SAAAvE,EAAS,IAAa,CACpG,KAAM,CAAC4kO,GAAeC,EAAgB,KAAI,YAASjhO,EAAQ,WAAW,MAAQ,EAAE,EAC1E,CAACkhO,EAAgBC,EAAiB,KAAI,YAASnhO,EAAQ,WAAW,OAAS,EAAE,EAC7E,CAACohO,GAAeC,EAAgB,KAAI,YAASrhO,EAAQ,WAAW,MAAQ,EAAK,EAC7E,CAACyF,GAAQqG,EAAS,KAAI,YAAS,EAAK,EACpC,CAACw1N,GAAqBC,EAAsB,KAAI,YAAS,EAAI,EAC7D,CAACC,GAAkBC,EAAmB,KAAI,YAAS,EAAI,EAEvDl7N,MAAS,MAAWuD,EAAS,EAE7B43N,MAAuB,eAAap4N,IAAyC,CACjF23N,GAAiB33N,GAAM,OAAO,KAAK,CACrC,EAAG,CAAC,CAAC,EAECq4N,MAAoB,eAAar4N,IAAyC,CAC9E63N,GAAkB73N,GAAM,OAAO,KAAK,CACtC,EAAG,CAAC,CAAC,EAECs4N,MAAiB,eACpBt4N,IAAwC,CACvC,MAAMwE,GAAW+zN,EAAYv4N,GAAM,OAAO,KAAK,EACzC6gD,GAAU23K,EAAoBh0N,EAAQ,EAExCq8C,IAAWnqD,EAAQ,WAAW,OAAS8N,IACzC1R,GAAS,CACP,GAAG4D,EACH,UAAW,CACT,GAAIA,EAAQ,WAAa,CAAC,EAC1B,KAAM8N,EACR,CACF,CAAC,EAGHyzN,GAAuBp3K,EAAO,CAChC,EACA,CAAC/tD,GAAU4D,CAAO,CACpB,EAEM+hO,MAAc,eACjBz4N,IAAwC,CACvC,MAAMwE,GAAW+zN,EAAYv4N,GAAM,OAAO,KAAK,EACzC6gD,GAAU23K,EAAoBh0N,EAAQ,EAExCq8C,IAAWnqD,EAAQ,WAAW,QAAU8N,IAC1C1R,GAAS,CACP,GAAG4D,EACH,UAAW,CACT,GAAIA,EAAQ,WAAa,CAAC,EAC1B,MAAO8N,EACT,CACF,CAAC,EAGH2zN,GAAoBt3K,EAAO,CAC7B,EACA,CAAC/tD,GAAU4D,CAAO,CACpB,EAEMgiO,MAAuB,eAAY,IAAM,CAC7C,MAAMC,GAAmB,CAACb,GAC1BC,GAAiBY,EAAgB,EACjC7lO,GAAS,CACP,GAAG4D,EACH,UAAW,CACT,GAAIA,EAAQ,WAAa,CAAC,EAC1B,KAAMiiO,EACR,CACF,CAAC,CACH,EAAG,CAAC7lO,GAAU4D,EAASohO,EAAa,CAAC,EAE/Bc,MAAqB,eACxB54N,IAAyC,CACxClN,GAAS,CACP,GAAG4D,EACH,aAAc6hO,EAAYv4N,GAAM,OAAO,KAAK,CAC9C,CAAC,CACH,EACA,CAAClN,GAAU4D,CAAO,CACpB,EAEMmiO,MAAwB,eAC3B74N,IAAyC,CACxC,IAAI84N,GAAqB,SAAS94N,GAAM,OAAO,MAAO,EAAE,GAEpD,MAAM84N,EAAG,GAAKA,KAAQ,KACxBA,GAAM,MAGRhmO,GAAS,CACP,GAAG4D,EACH,gBAAiBoiO,EACnB,CAAC,CACH,EACA,CAAChmO,GAAU4D,CAAO,CACpB,EAEMqiO,MAAsB,eACzB/4N,IAAyC,CACxC,IAAIshI,GAA+B,SAASthI,GAAM,cAAc,MAAO,EAAE,GAErE,MAAMshI,EAAa,GAAKA,KAAkB,KAC5CA,GAAgB,MAGdA,KAAkB5qI,EAAQ,eAC5B5D,GAAS,CACP,GAAG4D,EACH,cAAA4qI,EACF,CAAC,CAEL,EACA,CAACxuI,GAAU4D,CAAO,CACpB,EAEMsiO,MAAoB,eACvBh5N,IAAyC,CACxC,MAAM4wJ,GAAc2nE,EAAYv4N,GAAM,OAAO,KAAK,EAC9C4wJ,KAAgBl6J,EAAQ,aAC1B5D,GAAS,CACP,GAAG4D,EACH,YAAAk6J,EACF,CAAC,CAEL,EACA,CAAC99J,GAAU4D,CAAO,CACpB,EAEMuiO,MAAgB,eAAY,IAAM,CACtCz2N,GAAU,EAAI,CAChB,EAAG,CAAC,CAAC,EAEC02N,MAAiB,eAAY,IAAM,CACvC12N,GAAU,EAAK,CACjB,EAAG,CAAC,CAAC,EAEC22N,GAA2B,IAAM,CACrC,MAAM74N,GAAU;AAAA,+BAGhB,OAAKyjE,EAAW,KAAK,cAAc,gBAKjC,oBACE,oBAACh8D,EAAA,EAAW,CAAC,QAAAzH,GAAkB,QAAQ,mBACrC,mBAAC,KAAK,CAAC,QAAQ,6EAA6E,yBAE5F,EACF,KACA,OAACo3C,EAAA,GACC,GAAG,mBACH,KAAK,OAEL,YAAY,KACZ,WAAY,GACZ,OAAQkhL,GACR,aAAcliO,EAAQ,cAAgB,GACxC,GACF,EAnBO,IAqBX,EAEM0iO,GAA8B,IAAM,CACxC,MAAM94N,GAAU,8KAEhB,OAAKyjE,EAAW,eAAe,WAK7B,oBACE,oBAACh8D,EAAA,EAAW,CAAC,QAAAzH,GACX,mBAAC,KAAK,CAAC,QAAQ,4EAA4E,qBAAS,EACtG,KACA,OAACo3C,EAAA,GACC,KAAK,SAEL,YAAa,GAAGqsB,EAAW,cAAc,KAAK,GAC9C,WAAY,GACZ,OAAQ80J,GACR,aAAcniO,EAAQ,iBAAmB,OAC3C,GACF,EAhBO,IAkBX,EAEM2iO,GAA4B,IAAM,CACtC,MAAMC,GAASjiO,EAAK,SAAS,cACvBnE,GAAQwD,EAAQ,eAAiB,GACjC6iO,GAASrmO,KAAU,GAEzB,SACE,oBACE,oBAAC6U,EAAA,GACC,QAAQ,wBACR,WACE,OAAC,KAAK,CAAC,QAAQ,yFAAyF,2LAGxG,EAGF,mBAAC,KAAK,CAAC,QAAQ,iFAAiF,2BAEhG,EACF,KACA,OAAC2vC,EAAA,GACC,GAAG,wBACH,KAAK,SAEL,YAAa,GAAG4hL,EAAM,GACtB,WAAY,GACZ,OAAQP,GACR,aAAc7lO,EAAA,CAChB,EACCqmO,OACC,oBACE,oBAAC,QAAK,aAAW,MAAGt8N,GAAO,SAAUA,GAAO,QAAQ,EAAG,aAAC,KACxD,OAAC,QAAK,aAAW,MAAGA,GAAO,SAAUA,GAAO,IAAI,EAC9C,mBAAC,KAAK,CAAC,QAAQ,gFAAgF,0BAE/F,EACF,GACF,GAEJ,CAEJ,EAEMu8N,GAAuB,IAAM,CACjC,MAAMC,GAAepiO,EAAK,SAAS,SAC7BqiO,GAAkB31J,EAAW,UAAY,WAE/C,SACE,oBACE,oBAACh8D,EAAA,GACC,UAAW9K,GAAO,YAClB,WACE,QAAC,KAAK,CAAC,QAAQ,+EAA+E,sGACN,OAAC,QAAK,cAAE,EAAO,kHAEvG,EAEF,QAAQ,qBAER,mBAAC,KAAK,CAAC,QAAQ,uEAAuE,wBAAY,EACpG,KACA,OAACy6C,EAAA,GACC,GAAG,qBACH,KAAK,OAEL,YAAa,GAAGgiL,EAAe,GAC/B,WAAY,GACZ,OAAQV,GACR,aAActiO,EAAQ,aAAe,GACvC,KACA,OAACqR,EAAA,GACC,UAAW9K,GAAO,YAClB,WACE,QAAC,KAAK,CAAC,QAAQ,2EAA2E,kFACtB,OAAC,QAAK,uBAAW,EAAO,OAAK,OAC/F,OAAC,QAAK,0BAAc,EAAO,2CAAqC,OAAC,QAAK,wCAA4B,EAAO,mDAE3G,EAGF,mBAAC,KAAK,CAAC,QAAQ,mEAAmE,oBAAQ,EAC5F,KACA,OAAC,QAAK,UAAWA,GAAO,SAAW,SAAAw8N,EAAA,CAAa,KAChD,OAAC,QAAK,aAAW,MAAGx8N,GAAO,SAAUA,GAAO,QAAQ,EAAG,aAAC,KACxD,OAAC,QAAK,aAAW,MAAGA,GAAO,SAAUA,GAAO,IAAI,EAC9C,mBAAC,KAAK,CAAC,QAAQ,qFAAqF,wCAEpG,EACF,GACF,CAEJ,EAEM08N,GAAsB,IAAmC,CAC7D,GAAIx9N,GACF,OAGF,IAAIy9N,GAASljO,EAAQ,eAAiB,GAClCkjO,KAAW,IAAMviO,EAAK,UACxBuiO,GAAS,UAAUviO,EAAK,QAAQ,aAAa,IAG/C,MAAMwiO,GAAexiO,EAAK,SAAS,UAAYX,EAAQ,YAEvD,SACE,oBAEI,oBAAC,QAAK,UAAWuG,GAAO,cACtB,oBAAC,KAAK,CAAC,QAAQ,6DAA6D,kBAAM,CAAE,OAAA28N,EAAO,GAAE,EAC/F,KAGA,OAAC,QAAK,UAAW38N,GAAO,cACtB,oBAAC,KAAK,CAAC,QAAQ,sDAAsD,wBAAY,CAAE,aAAA48N,EAAa,GAAE,EACpG,GAEJ,CAEJ,EAEA,SACE,OAACC,EAAA,GACC,GAAG,gBACH,MAAO,EACP,SAAO,KAAE,qEAAsE,eAAe,EAC9F,cAAeH,GAAoB,EACnC,OAAAx9N,GACA,OAAQ88N,GACR,QAASC,GAET,oBAAC,OAAI,UAAWj8N,GAAO,KACpB,UAAAo8N,GAA0B,EAC1BG,GAAqB,EACrBL,GAAyB,EACzBC,GAA4B,KAE7B,OAACrxN,EAAA,GACC,QAAQ,sBACR,WACE,QAAC,MACC,QAAQ,yDACR,OAAQ,CAAE,aAAc,SAAU,WAAY,KAAM,SAAU,gBAAiB,EAChF,gRAGgD,OAAC,QAAM,4BAAmB,EAAO,OAAK,OACrF,OAAC,QAAM,0BAAiB,EAAO,0BAAoB,OAAC,QAAM,wBAAe,EAAO,KAClF,EAGF,mBAAC,KAAK,CAAC,QAAQ,iDAAiD,yBAAa,EAC/E,KACA,OAAC2vC,EAAA,GACC,GAAG,sBACH,KAAK,OAEL,YAAY,KACZ,SAAU0gL,GACV,OAAQE,GACR,QAAS,CAACN,GACV,MAAON,EAAA,CACT,KACA,OAAC3vN,EAAA,GACC,QAAQ,mBACR,UAAW9K,GAAO,YAClB,WACE,QAAC,MACC,QAAQ,sDACR,OAAQ,CAAE,aAAc,SAAU,WAAY,KAAM,SAAU,aAAc,EAC7E,wLAE+D,OAAC,QAAM,4BAAmB,EAAO,OAAK,OACpG,OAAC,QAAM,0BAAiB,EAAO,0BAAoB,OAAC,QAAM,wBAAe,EAAO,KAClF,EAGF,mBAAC,KAAK,CAAC,QAAQ,8CAA8C,sBAAU,EACzE,KACA,OAACy6C,EAAA,GACC,GAAG,mBACH,KAAK,OAEL,YAAY,KACZ,SAAU2gL,GACV,OAAQI,GACR,QAAS,CAACP,GACV,MAAON,CAAA,CACT,GACEA,GAAkBF,QAClB,oBACE,oBAAC3vN,EAAA,EAAW,CAAC,QAAQ,wBAAwB,UAAW9K,GAAO,YAC7D,mBAAC,KAAK,CAAC,QAAQ,kDAAkD,0BAAc,EACjF,KACA,OAAC,KACC,GAAG,wBACH,UAAWA,GAAO,KAClB,MAAO66N,GACP,SAAUY,EAAA,CACZ,GACF,GAEJ,EACF,CAEJ,CAAC,EAEDjB,EAAwB,YAAc,0BAEtC,SAASe,EAAoBtlO,EAAsB,CACjD,MAAO,CAACA,GAAS,kBAA0BA,CAAK,CAClD,CAEA,SAASqlO,EAAYrlO,EAAe,CAClC,OAAOA,IAAU,GAAK,KAAOA,CAC/B,CAEA,SAASsN,GAAUnF,EAAsB,CACvC,MAAO,CACL,QAAM,OAAI,CACR,QAAS,OACT,oBAAqB,iCACrB,IAAKA,EAAM,QAAQ,EAAG,EACtB,aAAcA,EAAM,QAAQ,CAAC,EAC7B,WAAY,QACd,CAAC,EACD,eAAa,OAAI,CACf,WAAY,CACd,CAAC,EACD,iBAAe,OAAI,CACjB,WAAYA,EAAM,QAAQ,CAAC,EAC3B,SAAUA,EAAM,WAAW,KAAK,GAChC,MAAOA,EAAM,OAAO,KAAK,SAC3B,CAAC,EACD,YAAU,OAAI,CACZ,QAAS,OACT,WAAY,SACZ,QAASA,EAAM,QAAQ,EAAG,CAAC,EAC3B,WAAYA,EAAM,WAAW,iBAC7B,SAAUA,EAAM,WAAW,KAAK,GAChC,gBAAiBA,EAAM,OAAO,WAAW,UACzC,aAAcA,EAAM,MAAM,OAAO,OACnC,CAAC,EACD,QAAM,OAAI,CACR,YAAa,MACf,CAAC,EACD,YAAU,OAAI,CACZ,MAAOA,EAAM,GAAG,QAAQ,MAC1B,CAAC,CACH,CACF,CC1YO,MAAMyqL,UAAmB,eAA4B,CAArD,kCACL,gBAAa,KACb,sBAAgB,KAAiB,EACjC,uBAA2C,KAE3C,WAAe,CACb,sBAAuB,CAAC,CAAC,KAAgB,gBAAgB,EAAE,WAC3D,cAAe,GACf,YAAa,KACb,aAAc,GACd,WAAY,GACZ,QAAS,CAAC,EACV,KAAM,CACJ,MAAO,KAAa,WACpB,OAAQ,CAAC,EACT,aAAW,MAAoB,CACjC,CACF,EAwDA,wBAAqB,MACnB9+H,EACAu9H,IACG,CACH,KAAM,CAAE,WAAAz2J,EAAW,EAAI,KAAK,MACtB02J,GAAY12J,GAAa,QAAM,KAAiB,EAAE,IAAIA,GAAW,GAAG,EAAI,OACxE22J,GAAS,QAAM,KAAiB,EAAE,IAAIz9H,EAAY,GAAG,EAGrDvkC,EAAU8hK,GAAmB,QAAMI,EAAA,GAAcF,GAAQz9H,EAAY,IAAK,KAAK,MAAM,QAASw9H,EAAS,EAEvGzgH,GAAa,MAAM,KAAK,cAAc,IAAI/c,EAAY,IAAI,EAEhE,KAAK,SAAS,CACZ,QAAAvkC,EACA,WAAY,CACV,KAAMukC,EAAY,KAClB,IAAKA,EAAY,IACjB,MAAG,MAAiBA,CAAW,CACjC,CACF,CAAC,EAED,KAAK,SAAS,CACZ,QAAAvkC,EACA,WAAAshD,GACA,WAAY/c,CACd,CAAC,EAEGu9H,GACF,KAAK,MAAM,aAAa,CAE5B,EAEA,qBAAkB,IAAM,CACtB,KAAM,CAAE,QAAA9hK,CAAQ,EAAI,KAAK,MACzB,KAAK,mBAAgB,MAASA,EAAS,KAAK,SAAS,CAAC,CAAC,EACvD,KAAK,eAAe,CACtB,EAyBA,0BAAuB,IAAM,CAC3B,KAAK,mBAAgB,MAAS,KAAK,MAAM,QAAS,KAAqB,SAAS,CAAC,CAAC,EAClF,KAAK,eAAe,CACtB,EAEA,oBAAiB,IAAM,CACrB,WAAW,IAAM,CACX,KAAK,MAAM,eACb,KAAK,MAAM,cAAc,SAAS,CAAE,IAAK,GAAM,CAAC,CAEpD,EAAG,EAAE,CACP,EAEA,oBAAkB/rB,GAA+B,CAC/C,KAAK,MAAM,gBAAgBA,CAAO,EAClC,KAAK,MAAM,aAAa,CAC1B,EAsBA,gBAAa,IAAM,CACjB,KAAK,SAAS,CAAE,WAAY,EAAK,CAAC,CACpC,EAEA,iBAAc,IAAM,CAClB,KAAK,SAAS,CAAE,WAAY,EAAM,CAAC,CACrC,EAEA,4BAAyB,IAAM,CAC7B,KAAK,SAAS,CAAE,sBAAuB,EAAM,CAAC,CAChD,EAEA,gBAAc40B,GAA8B,CAC1C,KAAM,CAAE,WAAAwC,EAAY,QAAArL,EAAQ,EAAI,KAAK,MACrC,KAAK,mBACH,MAASA,GAAS6I,EAAOwC,KAAa,MAAiBA,CAAU,EAAI,CAAE,KAAM,OAAW,IAAK,MAAU,CAAC,CAC1G,EACA,KAAK,eAAe,CACtB,EAEA,qBAAmBrL,GAA0C,CAC3D,KAAK,SAAS,CAAE,QAAAA,CAAQ,CAAC,EACzB,KAAK,SAAS,CAAE,QAAAA,CAAQ,CAAC,CAC3B,EAqEA,kBAAgB02F,GAAwC,CACtD,KAAK,SAAS,CAAE,cAAAA,CAAc,CAAC,CACjC,EAxPA,MAAM,mBAAoB,CACxB,KAAM,CAAE,QAAAziH,EAAS,YAAA8mK,CAAY,EAAI,KAAK,MAEtC,KAAK,kBAAoBA,EAAY,QAAQ,CAAE,eAAgB,GAAO,gBAAiB,EAAM,CAAC,EAAE,UAAU,CACxG,KAAOnmK,IAAoB,KAAK,kBAAkBA,EAAI,CACxD,CAAC,EAED,KAAK,2BAA2BX,CAAO,CACzC,CAEA,sBAAuB,CACjB,KAAK,oBACP,KAAK,kBAAkB,YAAY,EACnC,KAAK,kBAAoB,KAE7B,CAEA,MAAM,oBAAqB,CACzB,KAAM,CAAE,QAAAA,CAAQ,EAAI,KAAK,MAEnB8tL,EAAY,QAAM,KAAiB,EAAE,IAAI9tL,EAAQ,UAAU,EAC7D,KAAK,MAAM,YAAc8tL,EAAU,MAAQ,KAAK,MAAM,YAAY,KACpE,KAAK,2BAA2B9tL,CAAO,CAE3C,CAEA,MAAM,2BAA2BA,EAA4B,CAC3D,GAAI,CACF,MAAM0yD,EAAK,MAAM,KAAK,cAAc,IAAI1yD,EAAQ,UAAU,EACpDo3B,GAAa,KAAK,cAAc,oBAAoBp3B,EAAQ,UAAU,EAEtEqjO,GAAoB,MAAM,KAAK,cAAc,IAAI,EACjD93M,GAAamnC,EAAG,OAAO,EACvB3mC,EAAU/rB,EAAQ,QAAQ,IAAK+0B,KAAO,CAC1C,MAAI,MAAaA,EAAC,GAAK29B,GAAI,kBAAkB,KAAQ,WAAW,EAChE,WAAAnnC,GACA,GAAGwJ,EACL,EAAE,EAEF,KAAK,SAAS,CACZ,QAAAhJ,EACA,WAAY2mC,EACZ,WAAAt7B,GACA,kBAAAisM,EACF,CAAC,CACH,OAASn2N,EAAO,CACd,QAAQ,MAAM,6BAA8BA,CAAK,CACnD,CACF,CAEA,kBAAkBvM,EAAiB,CACjC,KAAK,SAAS,CAAE,KAAAA,CAAK,CAAC,CACxB,CAyCA,UAA+B,CAC7B,KAAM,CAAE,WAAAy2B,EAAY,kBAAAisM,CAAkB,EAAI,KAAK,MAEzC3wK,GACJt7B,GAAc,CAACA,EAAW,KAAK,SAC3B,MAAiBA,CAAU,EAC3BisM,EACEA,EAAkB,OAAO,EACzB,CAAE,KAAM,OAAW,IAAK,MAAU,EAE1C,MAAO,CACL,GAAG,KAAK,MAAM,YAAY,kBAAkB,KAAQ,WAAW,EAC/D,WAAY3wK,EACd,CACF,CAEA,SAAS4wK,EAA0C,CACjD,KAAK,MAAM,gBAAgB,CACzB,GAAG,KAAK,MAAM,QACd,GAAGA,CACL,CAAC,CACH,CAoBA,iBAAiB/8N,EAA0B,CACzC,KAAM,CAAE,qBAAAg9N,EAAsB,QAAAvjO,EAAQ,EAAI,KAAK,MACzC,CAAE,WAAAqtE,GAAY,KAAA1sE,GAAM,WAAAy2B,CAAW,EAAI,KAAK,MAE9C,MAAI,CAACA,GAAc,CAACi2C,GACX,QAGP,OAACm2J,GAAA,CACC,KAAA7iO,GACA,WAAA0sE,GACA,QAAArtE,GACA,WAAAo3B,EACA,gBAAiB,KAAK,eACtB,mBAAoB,KAAK,mBACzB,qBAAAmsM,CAAA,CACF,CAEJ,CA2BA,cAAcnsM,EAAwC,CACpD,KAAM,CAAE,aAAAqsM,CAAa,EAAI,KAAK,MACxB,CAAE,KAAA9iO,GAAM,QAAAorB,EAAQ,EAAI,KAAK,MAE/B,SACE,OAAC,OAAI,aAAY5c,EAAA,GAAU,WAAW,SAAS,QAC7C,mBAACkgL,EAAA,GACC,QAAAtjK,GACA,WAAAqL,EACA,gBAAiB,KAAK,gBACtB,WAAY,KAAK,WACjB,aAAAqsM,EACA,KAAA9iO,EAAA,CACF,EACF,CAEJ,CAEA,uBAAuBy2B,EAAiD,CACtE,OAAQA,EAAW,KAAK,SAAWA,EAAW,KAAK,UAAYA,EAAW,KAAK,SAAW,EAC5F,CAEA,oBAAqB,CACnB,OAAO,IAAsB,wBAAwB,EAClD,IAAI,CAACjL,EAAQ/d,IACZ+d,EAAO,CACL,WAAY,KAAK,WACjB,mBAAoB,KAAK,mBACzB,IAAK/d,CACP,CAAC,CACH,EACC,OAAO,OAAO,CACnB,CAEA,kBAAkBgpB,EAAwC7wB,EAA0B,CAClF,MAAM0oL,GAAgB,IAAC,KAAuB73J,EAAW,IAAI,EAE7D,SACE,QAAC+a,EAAA,EAAK,CAAC,IAAK,EAAG,WAAW,aACvB,UAAA88I,OACC,OAACzjL,EAAA,IACC,KAAK,OACL,QAAS,KAAK,gBACd,QAAQ,YACR,cAAa2D,EAAA,GAAU,WAAW,SAAS,SAE3C,mBAAC,KAAK,CAAC,QAAQ,8BAA8B,qBAAS,EACxD,EAEDjM,EAAA,GAAO,oBAAsB,KAAK,uBAAuBk0B,CAAU,MAClE,OAAC5rB,EAAA,IACC,KAAK,OACL,QAAS,KAAK,qBACd,QAAQ,YACR,UAAWjF,EAAO,iBAClB,cAAY,2BAEZ,mBAAC,QACC,mBAAC,KAAK,CAAC,QAAQ,+BAA+B,sBAAU,EAC1D,EACF,EAED,KAAK,mBAAmB,GAC3B,CAEJ,CAMA,QAAS,CACP,KAAM,CAAE,WAAAm9N,EAAY,WAAAtsM,CAAW,EAAI,KAAK,MAClC7wB,GAAS,GAAU,EAEzB,SACE,OAACG,EAAA,EAAe,CAAC,UAAU,OAAO,IAAK,KAAK,aAC1C,oBAAC,OAAI,UAAWH,GAAO,aACpB,eAAK,iBAAiBA,EAAM,EAC5B6wB,MACC,oBACE,oBAAC,OAAI,UAAW7wB,GAAO,eAAiB,cAAK,cAAc6wB,CAAU,EAAE,EACtE,KAAK,kBAAkBA,EAAY7wB,EAAM,EACzCm9N,MACC,OAACt5L,EAAA,GACC,SAAO,KAAE,2CAA4C,kBAAkB,EACvE,OAAQ,GACR,UAAW,KAAK,YAEhB,mBAACy2L,EAAU,CAAC,SAAUzpM,EAAW,KAAK,GAAI,EAC5C,GAEJ,GAEJ,EACF,CAEJ,CACF,CAEA,MAAM,MAAYpxB,EAAA,GAAc,IAAM,CACpC,KAAM,CAAE,MAAArB,CAAM,EAAIzB,EAAA,GAElB,MAAO,CACL,gBAAc,OAAI,CAChB,QAAS,OACT,cAAe,SACf,QAASyB,EAAM,QAAQ,EACzB,CAAC,EACD,iBAAe,OAAI,CACjB,QAAS,OACT,aAAcA,EAAM,QAAQ,EAC9B,CAAC,EACD,qBAAmB,OAAI,CACrB,YAAaA,EAAM,QAAQ,gBAC7B,CAAC,EACD,4BAA0B,OAAI,CAC5B,SAAU,EACV,YAAaA,EAAM,QAAQ,gBAC7B,CAAC,EACD,kBAAgB,OAAI,CAClB,cAAe,MACjB,CAAC,EACD,qBAAmB,OAAI,CAAC,CAAC,EACzB,oBAAkB,OAAI,CACpB,YAAaA,EAAM,QAAQ,EAC7B,CAAC,CACH,CACF,CAAC,EAcM,SAAS6+N,GAAqB,CACnC,WAAAn2J,EACA,QAAArtE,EACA,KAAAW,EACA,WAAAy2B,GACA,mBAAAq6E,GACA,gBAAArhG,GACA,qBAAAmzN,CACF,EAA8B,CAC5B,MAAMh9N,GAAS,GAAU,EACnB,CAACm9N,GAAYC,EAAa,KAAI,YAAS,EAAK,EAElD,SACE,oBACE,oBAAC,OAAI,cAAax0N,EAAA,GAAU,WAAW,SAAS,qBAC9C,oBAAC,OAAI,UAAW5I,GAAO,cACrB,oBAAC,IAAe,CAAC,QAAQ,qBAAqB,MAAO,OACnD,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,uBAAW,EACxE,KACA,OAAC,OAAI,UAAWA,GAAO,kBACrB,mBAACq9N,EAAA,CACC,QAAA5jO,EACA,SAAU,MAAO0yD,GAAIm7H,KACZ,MAAMp8E,KAAqB/+C,GAAIm7H,EAAc,EAEtD,sBAAuB,EAAQ,KAAgB,gBAAgB,EAAE,UAAU,CAC7E,EACF,EACCxgH,MACC,oBACE,oBAAC,OAAI,UAAW9mE,GAAO,kBACrB,mBAACiF,EAAA,IACC,QAAQ,YACR,KAAK,kBACL,WAAS,KACP,kFACA,uBACF,EACA,QAAS,IAAMm4N,GAAc,EAAI,EACjC,cAAY,wBACd,EACF,KACA,OAAC,OAAI,UAAWp9N,GAAO,yBACrB,mBAACw6N,EAAA,CACC,QAAA/gO,EACA,WAAAqtE,EACA,KAAA1sE,EACA,SAAWQ,IAAS,CAClBiP,KAAkBjP,EAAI,CACxB,EACF,EACF,EACCoiO,MACC,OAAC,OAAI,UAAWh9N,GAAO,kBACrB,mBAACiF,EAAA,IACC,QAAQ,YACR,QAAS+3N,EACT,aAAYp0N,EAAA,GAAU,WAAW,SAAS,qBAE1C,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,2BAAe,EAChF,EACF,GAEJ,GAEJ,EACF,EACCu0N,OACC,OAACt5L,EAAA,GACC,SAAO,KAAE,uDAAwD,kBAAkB,EACnF,OAAQ,GACR,UAAW,IAAMu5L,GAAc,EAAK,EAEpC,mBAAC9C,EAAU,CAAC,SAAUzpM,GAAW,KAAK,GAAI,EAC5C,GAEJ,CAEJ,CAQA,SAASwsM,EAA2B,CAAE,QAAA5jO,EAAS,SAAA5D,EAAU,GAAG0S,CAAW,EAAoC,CACzG,KAAM,CAAC+0N,GAAuBC,EAAwB,KAAI,YAAS,EAAQh1N,EAAW,qBAAsB,KAE5G,aAAU,IAAM,CAER,KAAgB,gBAAgB,EAAE,YACtC,KAAgB,QAAQ,CAAE,WAAY,IAAK,EAAG,EAAI,CAEtD,EAAG,CAAC,CAAC,EAEL,MAAMk5K,GAAc,CAClB,QAAS,GACT,MAAO,GACP,UAAW,GACX,UAAW,GACX,QAAShoL,EAAQ,WACjB,WAAY,GACZ,SAAU,MAAO0yD,EAAgCm7H,KAAkD,CACjG,MAAMzxL,EAASs2D,EAAIm7H,EAAc,EACjCi2C,GAAyB,EAAK,CAChC,CACF,EAEA,SACE,oBACG,UAAAD,OACC,OAACE,EAAA,EAAe,CAAE,GAAG/7C,GAAa,UAAW,IAAM87C,GAAyB,EAAK,EAAG,KAGtF,OAAC3xH,EAAA,GAAgB,CAAE,GAAG61E,EAAA,CAAa,GACrC,CAEJ,C,sJCxfYg8C,GAAAA,IACVA,EAAA,aAAe,eACfA,EAAA,aAAe,eAFLA,IAAAA,GAAA,IAaL,MAAMC,EAAmE,CAC9E,GAAI,IAAkB,OACtB,KAAM,SACN,YAAa,iGACb,eAAgB,CACd,SAAU,CAAC,KAAU,GAAG,CAC1B,EAMA,SAAWjkO,GAAaE,GACtBA,EAAO,QACL,KAAKS,GAAS,CACZ,GAAI,CAACX,GAAS,UAAU,OACtB,OAAOW,EAGT,MAAM64B,EAAUx5B,EAAQ,UACpB,MAAgBA,EAAQ,MAAM,EAC9BA,EAAQ,kBAAoBA,EAAQ,OAAS,eAC3C,KACA,KAGN,GAAIA,EAAQ,OAAS,eACnB,OAAOkkO,EAAavjO,EAAM64B,EAASx5B,EAAQ,QAAQ,EAIrD,MAAM6mC,EAAMs9L,EAAmBxjO,EAAM64B,EAASx5B,EAAQ,SAAUA,EAAQ,cAAc,EACtF,OAAO6mC,EACH,CAAC,CAAE,GAAGA,EAAK,MAAO,GAAG,IAAkB,MAAM,IAAIlmC,EAAK,IAAKI,GAAUA,EAAM,KAAK,EAAE,KAAK,GAAG,CAAC,EAAG,CAAC,EAC/F,CAAC,CACP,CAAC,CACH,CACJ,EAKA,SAASojO,EACPxjO,EACA64B,EACA4qM,EACAz0K,EACuB,CACvB,MAAM00K,EAAc,KAAc,KAAKD,CAAS,EAC1CE,EAAWD,EAAY,IAAKp4N,GAAMA,EAAE,EAAE,EACtC4qM,EAAyB,CAAC,EAC1B0tB,EAAiB50K,EAAiB60K,EAAqB7jO,CAAI,EAAI,CAAC,EAEtE,UAAWyW,KAAUzW,EAAM,CACzB,MAAMT,EAASkX,EAAO,OAAO,OAAQkG,GAAMkc,EAAQlc,EAAGlG,EAAQzW,CAAI,CAAC,EAE7D2rE,EAAOpsE,EAAO,OACd4S,EAAkB,CAAC,EACnBzS,EAAkB,IAAI,MAAMisE,CAAI,EACtCx5D,EAAO,KAAK,CACV,KAAM,QACN,KAAM,KAAU,OAChB,OAAQzS,EACR,OAAQ,CAAC,CACX,CAAC,EAED,MAAM0jF,EAA8B,CAAC,EACrC,GAAIp0B,EACF,UAAWzrC,KAAOqgN,EAChBxgJ,EAAO7/D,CAAG,EAAI,IAAI,MAAMooD,CAAI,EAC5Bx5D,EAAO,KAAK,CACV,KAAMoR,EACN,KAAM,KAAU,OAChB,OAAQ6/D,EAAO7/D,CAAG,EAClB,OAAQ,CAAC,CACX,CAAC,EAIL,MAAMugN,EAA6B,CAAC,EACpC,UAAWprM,KAAQgrM,EACjBI,EAAMprM,EAAK,EAAE,EAAI,IAAI,MAAMizC,CAAI,EAC/Bx5D,EAAO,KAAK,CACV,KAAMumB,EAAK,KACX,KAAM,KAAU,MAChB,OAAQorM,EAAMprM,EAAK,EAAE,EACrB,OAAQ,CAAC,CACX,CAAC,EAGH,QAAS/1B,EAAI,EAAGA,EAAIpD,EAAO,OAAQoD,IAAK,CACtC,MAAMjE,EAAQa,EAAOoD,CAAC,EAChB6S,KAAU,MAAY,CAC1B,MAAA9W,EACA,SAAAilO,CACF,CAAC,EAED,GAAI30K,GAEF,GADAtvD,EAAMiD,CAAC,EAAIjE,EAAM,KACbA,EAAM,OACR,UAAW6kB,KAAO7kB,EAAM,OACtB0kF,EAAO7/D,CAAG,EAAE5gB,CAAC,EAAIjE,EAAM,OAAO6kB,CAAG,OAIrC7jB,EAAMiD,CAAC,KAAI,MAAoBjE,EAAO+X,EAAQzW,CAAI,EAGpD,UAAW04B,KAAQgrM,EAAa,CAC9B,MAAMtiO,EAAIoU,EAAQkjB,EAAK,EAAE,EACrBt3B,IAAM,KAER0iO,EAAMprM,EAAK,EAAE,EAAE/1B,CAAC,EAAI,IAEpBmhO,EAAMprM,EAAK,EAAE,EAAE/1B,CAAC,EAAIvB,CAExB,CACF,CAGA,UAAWub,KAAKxK,EACd,GAAIwK,EAAE,OAAS,KAAU,MAAO,CAC9B,MAAMpb,KAAI,MAAuBob,CAAC,EAC9Bpb,IACFob,EAAE,KAAOpb,EAEb,CAGF20M,EAAU,KAAK,CACb,GAAGz/L,EACH,OAAAtE,EACA,OAAQw5D,CACV,CAAC,CACH,CAEA,OAAOo4J,EAAa7tB,CAAS,CAC/B,CAEA,SAAS2tB,EAAqB3jO,EAA+B,CAC3D,MAAM84G,EAAO,IAAI,IACjB,UAAW54G,KAASF,EAClB,UAAWxB,KAAS0B,EAAM,OACxB,GAAI1B,EAAM,OACR,UAAWmvD,KAAK,OAAO,KAAKnvD,EAAM,MAAM,EACtCs6G,EAAK,IAAInrD,CAAC,EAKlB,MAAO,CAAC,GAAGmrD,CAAI,CACjB,CAKA,SAAS+qH,EAAa/jO,EAA0C,CAC9D,GAAI,CAACA,GAAM,OACT,OAGF,MAAMgkO,EAAYhkO,EAAK,CAAC,EAExB,QAAS0X,EAAc,EAAGA,EAAc1X,EAAK,OAAQ0X,IAAe,CAClE,MAAMjB,EAASzW,EAAK0X,CAAW,EAE/B,QAASusN,EAAY,EAAGA,EAAYD,EAAU,OAAO,OAAQC,IAAa,CACxE,MAAMC,EAAYF,EAAU,OAAOC,CAAS,EAC5C,QAAS19J,EAAa,EAAGA,EAAa9vD,EAAO,OAAO,OAAQ8vD,IAAc,CACxE,MAAM7nE,EAAQ+X,EAAO,OAAO8vD,CAAU,EAChC49J,EAAeF,IAAc,GAAK19J,IAAe,EACjD69J,EAAcF,EAAU,OAASxlO,EAAM,MAAQwlO,EAAU,OAASxlO,EAAM,KAE9E,GAAIylO,GAAgBC,EAAa,CAC/B,MAAMC,EAAaH,EAAU,OACvBhiO,EAASxD,EAAM,OACrBwlO,EAAU,OAASG,EAAW,OAAOniO,CAAM,CAC7C,CACF,CACF,CACF,CAEA,OAAA8hO,EAAU,KAAO,OACjBA,EAAU,OAASA,EAAU,OAAO,CAAC,EAAE,OAAO,OACvCA,CACT,CAKO,SAAST,EAAavjO,EAAmB64B,EAAuB4qM,EAAqC,CAE1G,MAAME,EADc,KAAc,KAAKF,CAAS,EACnB,IAAKn4N,GAAMA,EAAE,EAAE,EACtC4qM,EAAyB,CAAC,EAChC,UAAWz/L,KAAUzW,EAAM,CACzB,MAAMmS,EAAkB,CAAC,EACzB,UAAWzT,KAAS+X,EAAO,OACzB,GAAIoiB,EAAQn6B,EAAO+X,EAAQzW,CAAI,EAAG,CAChC,MAAMwV,KAAU,MAAY,CAC1B,MAAA9W,EACA,SAAAilO,CACF,CAAC,EACD,UAAW96E,KAAW86E,EAAU,CAC9B,MAAM9nO,EAAQ2Z,EAAQqzI,CAAO,EACvB51E,EAAO,CACX,GAAGv0E,EACH,OAAQ,CAAE,GAAGA,EAAM,MAAO,EAC1B,KAAM4lO,EAAaz7E,EAASnqJ,CAAK,EACjC,OAAQ,CAAC7C,CAAK,EACd,MAAO,MACT,EACI8nO,EAAS,OAAS,IACf1wJ,EAAK,SACRA,EAAK,OAAS,CAAC,GAEjBA,EAAK,OAAO,QAAa,KAAc,IAAI41E,CAAO,EAAE,MAEtD12I,EAAO,KAAK8gE,CAAI,CAClB,CACF,CAEE9gE,EAAO,QACT+jM,EAAU,KAAK,CACb,GAAGz/L,EACH,OAAAtE,EACA,OAAQ,CACV,CAAC,CAEL,CAEA,OAAO+jM,CACT,CAEA,SAASouB,EAAaz7E,EAAiBnqJ,EAAc,CACnD,OAAQmqJ,EAAS,CACf,KAAK,KAAU,UACf,KAAK,KAAU,aACb,OAAO,KAAU,MACnB,KAAK,KAAU,MACf,KAAK,KAAU,aACf,KAAK,KAAU,KACf,KAAK,KAAU,YACb,OAAOnqJ,EAAM,KACf,QACE,OAAO,KAAU,MACrB,CACF,C,cCtQC,SAASk7B,GAAG,CAEZ,IAAIv6B,EAAU,CACb,MAAO,CACN,SAAU,KACV,WAAY,KACZ,gBAAiB,GACjB,WAAY,IACb,CACD,EAIA,SAASklO,EAAY5iO,EAAGyqI,EAAM,CAC7B,OAAOA,EAAO,KAAK,MAAMzqI,EAAIyqI,CAAI,CAClC,CAKA,SAASpd,EAAW/9B,EAAGnyF,EAAK0lO,EAAYC,EAAU,CAEjD,GAAI,OAAOxzI,EAAE,UAAY,WACxB,OAAOA,EAAE,SAASnyF,CAAG,EAGtB,IAAI4lO,EAAU,SAAS/iO,EAAGskB,EAAK,CAC9B,OAAAtkB,EAAI,GAAKA,EACTskB,EAAM,IAAMA,GAAc,KACnBtkB,EAAE,QAAU,EAAIskB,EAAMtkB,EAAIA,CAClC,EAEI+e,EAAI,CAAC,EACLikN,EAAS,GACT3nG,EAAQ/rC,EAAE,SAAS,EACnB2zI,EAAO5nG,EAAQ,GAEfwnG,GAAc,OACjBA,EAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,GAG7FC,GAAY,OACfA,EAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,GAG5D,IAAII,EAEA7nG,EAAQ,GACX6nG,EAAU7nG,EAAQ,GACRA,GAAS,EACnB6nG,EAAU,GAEVA,EAAU7nG,EAGX,QAASr6H,EAAI,EAAGA,EAAI7D,EAAI,OAAQ,EAAE6D,EAAG,CAEpC,IAAI2I,EAAIxM,EAAI,OAAO6D,CAAC,EAEpB,GAAIgiO,EAAQ,CACX,OAAQr5N,EAAG,CACV,IAAK,IAAKA,EAAI,GAAKm5N,EAASxzI,EAAE,OAAO,CAAC,EAAG,MACzC,IAAK,IAAK3lF,EAAI,GAAKk5N,EAAWvzI,EAAE,SAAS,CAAC,EAAG,MAC7C,IAAK,IAAK3lF,EAAIo5N,EAAQzzI,EAAE,QAAQ,EAAG,EAAE,EAAG,MACxC,IAAK,IAAK3lF,EAAIo5N,EAAQzzI,EAAE,QAAQ,EAAG,GAAG,EAAG,MACzC,IAAK,IACL,IAAK,IAAK3lF,EAAIo5N,EAAQ1nG,CAAK,EAAG,MAC9B,IAAK,IAAK1xH,EAAIo5N,EAAQG,CAAO,EAAG,MAChC,IAAK,IAAKv5N,EAAIo5N,EAAQG,EAAS,GAAG,EAAG,MACrC,IAAK,IAAKv5N,EAAIo5N,EAAQzzI,EAAE,SAAS,EAAI,EAAG,EAAE,EAAG,MAC7C,IAAK,IAAK3lF,EAAIo5N,EAAQzzI,EAAE,WAAW,CAAC,EAAG,MAEvC,IAAK,IACJ3lF,EAAI,IAAM,KAAK,MAAM2lF,EAAE,SAAS,EAAI,CAAC,EAAI,GAAI,MAC9C,IAAK,IAAK3lF,EAAIo5N,EAAQzzI,EAAE,WAAW,CAAC,EAAG,MACvC,IAAK,IAAK3lF,EAAIo5N,EAAQzzI,EAAE,YAAY,EAAI,GAAG,EAAG,MAC9C,IAAK,IAAK3lF,EAAI,GAAK2lF,EAAE,YAAY,EAAG,MACpC,IAAK,IAAK3lF,EAAKs5N,EAAS,KAAc,KAAY,MAClD,IAAK,IAAKt5N,EAAKs5N,EAAS,KAAc,KAAY,MAClD,IAAK,IAAKt5N,EAAI,GAAK2lF,EAAE,OAAO,EAAG,KAChC,CACAvwE,EAAE,KAAKpV,CAAC,EACRq5N,EAAS,EACV,MACKr5N,GAAK,IACRq5N,EAAS,GAETjkN,EAAE,KAAKpV,CAAC,CAGX,CAEA,OAAOoV,EAAE,KAAK,EAAE,CACjB,CAOA,SAASokN,EAAe7zI,EAAG,CAE1B,SAAS8zI,EAAeC,EAAWC,EAAcC,EAAWC,EAAc,CACzEH,EAAUC,CAAY,EAAI,UAAW,CACpC,OAAOC,EAAUC,CAAY,EAAE,MAAMD,EAAW,SAAS,CAC1D,CACD,CAEA,IAAIE,EAAM,CACT,KAAMn0I,CACP,EAIIA,EAAE,UAAY,MACjB8zI,EAAeK,EAAK,WAAYn0I,EAAG,UAAU,EAG9C8zI,EAAeK,EAAK,UAAWn0I,EAAG,SAAS,EAC3C8zI,EAAeK,EAAK,UAAWn0I,EAAG,SAAS,EAI3C,QAFIpsF,EAAQ,CAAC,OAAQ,MAAO,WAAY,QAAS,eAAgB,UAAW,QAAS,SAAS,EAErF25B,EAAI,EAAGA,EAAI35B,EAAM,OAAQ25B,IACjCumM,EAAeK,EAAK,MAAQvgO,EAAM25B,CAAC,EAAGyyD,EAAG,SAAWpsF,EAAM25B,CAAC,CAAC,EAC5DumM,EAAeK,EAAK,MAAQvgO,EAAM25B,CAAC,EAAGyyD,EAAG,SAAWpsF,EAAM25B,CAAC,CAAC,EAG7D,OAAO4mM,CACR,CAKA,SAASC,EAAcC,EAAI9kO,EAAM,CAChC,GAAIA,EAAK,UAAY,UACpB,OAAO,IAAI,KAAK8kO,CAAE,EACZ,GAAI,CAAC9kO,EAAK,UAAYA,EAAK,UAAY,MAC7C,OAAOskO,EAAe,IAAI,KAAKQ,CAAE,CAAC,EAC5B,GAAI,OAAO,WAAc,KAAe,OAAO,WAAW,KAAQ,IAAa,CACrF,IAAIr0I,EAAI,IAAI,WAAW,KAGvB,OAAAA,EAAE,YAAYzwF,EAAK,QAAQ,EAC3BywF,EAAE,QAAQq0I,CAAE,EACLr0I,CACR,KACC,QAAO6zI,EAAe,IAAI,KAAKQ,CAAE,CAAC,CAEpC,CAIA,IAAI15C,EAAe,CAClB,OAAU,IACV,OAAU,GAAK,IACf,KAAQ,KAAU,IAClB,IAAO,KAAU,GAAK,IACtB,MAAS,IAAU,GAAK,GAAK,IAC7B,QAAW,KAAc,GAAK,GAAK,IACnC,KAAQ,SAAW,GAAK,GAAK,GAAK,GACnC,EAKI25C,EAAW,CACd,CAAC,EAAG,QAAQ,EAAG,CAAC,EAAG,QAAQ,EAAG,CAAC,EAAG,QAAQ,EAAG,CAAC,GAAI,QAAQ,EAC1D,CAAC,GAAI,QAAQ,EACb,CAAC,EAAG,QAAQ,EAAG,CAAC,EAAG,QAAQ,EAAG,CAAC,EAAG,QAAQ,EAAG,CAAC,GAAI,QAAQ,EAC1D,CAAC,GAAI,QAAQ,EACb,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,MAAM,EAAG,CAAC,EAAG,MAAM,EACpC,CAAC,EAAG,MAAM,EAAG,CAAC,GAAI,MAAM,EACxB,CAAC,EAAG,KAAK,EAAG,CAAC,EAAG,KAAK,EAAG,CAAC,EAAG,KAAK,EACjC,CAAC,IAAM,OAAO,EAAG,CAAC,GAAK,OAAO,EAAG,CAAC,EAAG,OAAO,EAC5C,CAAC,EAAG,OAAO,CACZ,EAKIC,EAAaD,EAAS,OAAO,CAAC,CAAC,EAAG,OAAO,EAAG,CAAC,EAAG,OAAO,EAC1D,CAAC,EAAG,MAAM,CAAC,CAAC,EACTE,EAAeF,EAAS,OAAO,CAAC,CAAC,EAAG,SAAS,EAAG,CAAC,EAAG,SAAS,EAChE,CAAC,EAAG,MAAM,CAAC,CAAC,EAEb,SAAS1rM,EAAKC,EAAM,CACnBA,EAAK,MAAM,eAAe,KAAK,SAAUA,EAAMz6B,EAAS,CACvDu6B,GAAE,KAAKE,EAAK,QAAQ,EAAG,SAAS4rM,EAAU5vN,EAAM,CAE/C,IAAItV,EAAOsV,EAAK,QAEZtV,EAAK,MAAQ,SAChBsV,EAAK,cAAgB,SAASA,EAAM,CAEnC,IAAIE,EAAQ,CAAC,EACTi7E,EAAIo0I,EAAcvvN,EAAK,IAAKtV,CAAI,EAChCmlO,EAAU,EAKVniH,EAAQhjH,EAAK,UAAYA,EAAK,SAAS,CAAC,IAC3C,WACCA,EAAK,aAAeA,EAAK,YAAY,CAAC,IACvC,UAAailO,EAAeD,EAEzBhlO,EAAK,aAAe,OACnB,OAAOA,EAAK,UAAY,SAC3BmlO,EAAUnlO,EAAK,SAEfmlO,EAAUnlO,EAAK,YAAY,CAAC,EAAIorL,EAAaprL,EAAK,YAAY,CAAC,CAAC,GAIlE,QAASmC,EAAI,EAAGA,EAAI6gH,EAAK,OAAS,GAC7B,EAAA1tG,EAAK,OAAS0tG,EAAK7gH,CAAC,EAAE,CAAC,EAAIipL,EAAapoE,EAAK7gH,CAAC,EAAE,CAAC,CAAC,EAC9C6gH,EAAK7gH,EAAI,CAAC,EAAE,CAAC,EAAIipL,EAAapoE,EAAK7gH,EAAI,CAAC,EAAE,CAAC,CAAC,GAAK,GACrD6gH,EAAK7gH,CAAC,EAAE,CAAC,EAAIipL,EAAapoE,EAAK7gH,CAAC,EAAE,CAAC,CAAC,GAAKgjO,GAHT,EAAEhjO,EACtC,CAOD,IAAIgpE,EAAO63C,EAAK7gH,CAAC,EAAE,CAAC,EAChBshH,EAAOT,EAAK7gH,CAAC,EAAE,CAAC,EAIpB,GAAIshH,GAAQ,OAAQ,CAKnB,GAAIzjH,EAAK,aAAe,MAAQA,EAAK,YAAY,CAAC,GAAK,OACtDmrE,EAAO,KAAK,MAAMnrE,EAAK,YAAY,CAAC,CAAC,MAC/B,CAEN,IAAIolO,EAAO,KAAK,IAAI,GAAI,KAAK,MAAM,KAAK,IAAI9vN,EAAK,MAAQ81K,EAAa,IAAI,EAAI,KAAK,IAAI,CAAC,EACpFi6C,EAAQ/vN,EAAK,MAAQ81K,EAAa,KAAQg6C,EAE1CC,EAAO,IACVl6J,EAAO,EACGk6J,EAAO,EACjBl6J,EAAO,EACGk6J,EAAO,IACjBl6J,EAAO,EAEPA,EAAO,GAGRA,GAAQi6J,CACT,CAIIj6J,EAAO,IACVA,EAAO,EAET,CAEA71D,EAAK,SAAWtV,EAAK,UAAY,CAACmrE,EAAMs4C,CAAI,EAC5C,IAAI6hH,EAAWhwN,EAAK,SAAS,CAAC,EAC9BmuG,EAAOnuG,EAAK,SAAS,CAAC,EAEtB,IAAIpR,EAAOohO,EAAWl6C,EAAa3nE,CAAI,EAEnCA,GAAQ,SACXhzB,EAAE,WAAWszI,EAAYtzI,EAAE,WAAW,EAAG60I,CAAQ,CAAC,EACxC7hH,GAAQ,SAClBhzB,EAAE,WAAWszI,EAAYtzI,EAAE,WAAW,EAAG60I,CAAQ,CAAC,EACxC7hH,GAAQ,OAClBhzB,EAAE,SAASszI,EAAYtzI,EAAE,SAAS,EAAG60I,CAAQ,CAAC,EACpC7hH,GAAQ,QAClBhzB,EAAE,SAASszI,EAAYtzI,EAAE,SAAS,EAAG60I,CAAQ,CAAC,EACpC7hH,GAAQ,UAClBhzB,EAAE,SAAS,EAAIszI,EAAYtzI,EAAE,SAAS,EAAI,EACzC60I,CAAQ,CAAC,EACA7hH,GAAQ,QAClBhzB,EAAE,YAAYszI,EAAYtzI,EAAE,YAAY,EAAG60I,CAAQ,CAAC,EAKrD70I,EAAE,gBAAgB,CAAC,EAEfvsF,GAAQknL,EAAa,QACxB36F,EAAE,WAAW,CAAC,EAEXvsF,GAAQknL,EAAa,MACxB36F,EAAE,WAAW,CAAC,EAEXvsF,GAAQknL,EAAa,KACxB36F,EAAE,SAAS,CAAC,EAETvsF,GAAQknL,EAAa,IAAM,GAC9B36F,EAAE,QAAQ,CAAC,EAERvsF,GAAQknL,EAAa,MAAQ,GAChC36F,EAAE,SAASszI,EAAYtzI,EAAE,SAAS,EAAG,CAAC,CAAC,EAEpCvsF,GAAQknL,EAAa,QAAU,GAClC36F,EAAE,SAASszI,EAAYtzI,EAAE,SAAS,EAAG,CAAC,CAAC,EAEpCvsF,GAAQknL,EAAa,MACxB36F,EAAE,SAAS,CAAC,EAGb,IAAI80I,EAAQ,EACR3kO,EAAI,OAAO,IACXuD,EAEJ,EAMC,IAJAA,EAAOvD,EACPA,EAAI6vF,EAAE,QAAQ,EACdj7E,EAAM,KAAK5U,CAAC,EAER6iH,GAAQ,SAAWA,GAAQ,UAC9B,GAAI6hH,EAAW,EAAG,CAOjB70I,EAAE,QAAQ,CAAC,EACX,IAAIksB,EAAQlsB,EAAE,QAAQ,EACtBA,EAAE,SAASA,EAAE,SAAS,GACpBgzB,GAAQ,UAAY,EAAI,EAAE,EAC5B,IAAIG,EAAMnzB,EAAE,QAAQ,EACpBA,EAAE,QAAQ7vF,EAAI2kO,EAAQn6C,EAAa,MAAQxnE,EAAMjH,GAAS2oH,CAAQ,EAClEC,EAAQ90I,EAAE,SAAS,EACnBA,EAAE,SAAS,CAAC,CACb,MACCA,EAAE,SAASA,EAAE,SAAS,EACrB60I,GAAY7hH,GAAQ,UAAY,EAAI,EAAE,OAE9BA,GAAQ,OAClBhzB,EAAE,YAAYA,EAAE,YAAY,EAAI60I,CAAQ,EAExC70I,EAAE,QAAQ7vF,EAAIsD,CAAI,QAEXtD,EAAI0U,EAAK,KAAO1U,GAAKuD,GAE9B,OAAOqR,CACR,EAEAF,EAAK,cAAgB,SAAU1U,EAAG0U,EAAM,CAEvC,IAAIm7E,EAAIo0I,EAAcjkO,EAAG0U,EAAK,OAAO,EAIrC,GAAItV,EAAK,YAAc,KACtB,OAAOwuH,EAAW/9B,EAAGzwF,EAAK,WAAYA,EAAK,WAAYA,EAAK,QAAQ,EAMrE,IAAIwlO,EAAelwN,EAAK,QAAQ,UAC9BA,EAAK,QAAQ,SAAS,CAAC,GAAK,WAC5BA,EAAK,QAAQ,aACbA,EAAK,QAAQ,YAAY,CAAC,GAAK,UAE7BvU,EAAIuU,EAAK,SAAS,CAAC,EAAI81K,EAAa91K,EAAK,SAAS,CAAC,CAAC,EACpD0pB,EAAO1pB,EAAK,IAAMA,EAAK,IACvB+uG,EAAUrkH,EAAK,gBAAmB,MAAQ,GAC1CylO,EAAYzlO,EAAK,gBAAmB,KAAO,KAC3C1B,EAEAyC,EAAIqqL,EAAa,OACpB9sL,EAAMmnO,EAAW,SAAWphH,EAClBtjH,EAAIqqL,EAAa,IACvBpsJ,EAAO,EAAIosJ,EAAa,IAC3B9sL,EAAMmnO,EAAW,MAAQphH,EAEzB/lH,EAAM,SAAWmnO,EAAW,MAAQphH,EAE3BtjH,EAAIqqL,EAAa,MAC3B9sL,EAAM,QACKknO,GAAezkO,EAAIqqL,EAAa,SAC1C,CAACo6C,GAAezkO,EAAIqqL,EAAa,KAC9BpsJ,EAAOosJ,EAAa,KACvB9sL,EAAM,KAENA,EAAM,QAEGknO,GAAezkO,EAAIqqL,EAAa,KACtCpsJ,EAAOosJ,EAAa,KACvB9sL,EAAM,MAENA,EAAM,SAGPA,EAAM,KAGP,IAAIonO,EAAKl3G,EAAW/9B,EAAGnyF,EAAK0B,EAAK,WAAYA,EAAK,QAAQ,EAE1D,OAAO0lO,CACR,EAEF,CAAC,CACF,CAAC,CACF,CAEAtsM,GAAE,KAAK,QAAQ,KAAK,CACnB,KAAMC,EACN,QAASx6B,EACT,KAAM,OACN,QAAS,KACV,CAAC,EAMDu6B,GAAE,KAAK,WAAao1F,CAErB,GAAG,MAAM,C,sSCraF,MAAMm3G,CAA4E,CAAlF,cACL,KAAQ,gBAAkB,IAAI,IAY9B,iCAA+BnmO,GAA+D,CAC5F,MAAMomO,EAAqB,KAAkB,4BAA4BpmO,EAAK,WAAW,KACzF,MAAsBomO,EAAoBpmO,EAAK,SAAS,EAExD,MAAMsD,EAAQtD,EAAK,UAAU,gBAAkB,uBAE/C,MAAoB,MAAO,eAAeA,EAAK,eAAe,aAAasD,CAAK,EAAE,CACpF,EAEA,qCAAmCtD,GAAmE,CACpG,MAAM8wH,EAAY9wH,EAAK,WAAa,UAC9BqmO,EAAyB,KAAkB,oBAAoBrmO,EAAK,YAAa8wH,CAAS,KAChG,MAAsBu1G,EAAwBrmO,EAAK,SAAS,CAC9D,EAEA,oCAAkCA,GAAkE,CAClG,MAAMsmO,EAAmB,KAAkB,0BAA0BtmO,EAAK,WAAW,EAC/EomO,EAAqB,KAAkB,4BAA4BpmO,EAAK,WAAW,EACnFumO,GAAuB,KAAqB,sBAAsBvmO,EAAK,WAAW,KAExF,MAAsBsmO,EAAkBtmO,EAAK,SAAS,KACtD,MAAyBumO,GAAsBH,EAAoBE,CAAgB,EAEnF,KAAK,gBAAgB,MAAM,CAC7B,EAEA,2BAAyBtmO,GAAsD,CAC7E,KAAK,4BAA4BA,EAAM,OAAO,EAG9C,KAAK,gBAAgB,IAAIA,EAAK,QAAQ,CACxC,EAEA,8BAA4BA,GAAsD,CAChF,KAAK,4BAA4BA,EAAM,KAAK,EAC5C,KAAK,+BAA+BA,CAAI,EAExC,MAAMylH,GAAYzlH,EAAK,UAAY,GAAG,QAAQ,CAAC,EACzCimH,GAAejmH,EAAK,UAAY,GAAK,KAA8B,qBAAa,GAGtF,IAAIwmO,GAA2BxmO,EAAK,UAChCA,EAAK,YAAc,UACrBwmO,GAAmB,GAAGxmO,EAAK,SAAS,KAAKA,EAAK,SAAS,OAAO,QAGhE,MACE,MACA,WAAWA,EAAK,QAAQ,IAAIA,EAAK,OAAO,IAAIwmO,EAAgB,KAAK/gH,CAAQ,KAAKQ,CAAW,EAC3F,CACF,EAGA,kBAAgBjmH,GAAsD,CACpE,MAAMymO,EAAiB,KAAkB,YAAYzmO,EAAK,OAAQA,EAAK,OAAO,KAC9E,MAAsBymO,EAAgBzmO,EAAK,SAAS,CACtD,EAEA,qBAAmBA,GAAsD,CACvE,MAAM0mO,EAAe,KAAkB,UAAU1mO,EAAK,OAAQA,EAAK,OAAO,EACpEymO,EAAiB,KAAkB,YAAYzmO,EAAK,OAAQA,EAAK,OAAO,EACxE2mO,GAAmB,KAAqB,MAAM3mO,EAAK,OAAQA,EAAK,OAAO,KAE7E,MAAsB0mO,EAAc1mO,EAAK,SAAS,KAClD,MAAyB2mO,GAAkBF,EAAgBC,CAAY,EAEvE,MAAMjhH,IAAYzlH,EAAK,UAAY,GAAG,QAAQ,CAAC,EACzCimH,IAAejmH,EAAK,UAAY,GAAK,KAA8B,qBAAa,GAEhFyjH,EAAYzjH,EAAK,UAAU,QAAQ,4CAA6C,EAAE,KACxF,MAAoB,MAAO,UAAUA,EAAK,MAAM,KAAKyjH,CAAS,KAAKzjH,EAAK,OAAO,MAAMylH,EAAQ,KAAKQ,EAAW,EAAE,CACjH,EAjFO,YAAa,IAClB,MAAoB,MAAO,0BAA0B,CACvD,CAEO,SAAU,CACf,KAAK,gBAAgB,MAAM,KAC3B,MAAoB,MAAO,kCAAkC,CAC/D,CA4EQ,4BAA4BjmH,EAA6C4mO,EAA8B,CAC7G,KAAM,CAAE,UAAAC,EAAW,SAAAnhH,GAAU,YAAAkL,EAAY,EAAI5wH,EAE7C,OAAQ6mO,EAAW,CACjB,IAAK,QACH,MAAMC,GACJF,IAAU,QACN,KAAkB,kBAAkBlhH,GAAUkL,EAAW,EACzD,KAAkB,gBAAgBlL,GAAUkL,EAAW,KAC7D,MAAsBk2G,GAAU9mO,EAAK,SAAS,EAC9C,MAEF,IAAK,cACH,MAAM+mO,EACJH,IAAU,QACN,KAAkB,wBAAwBlhH,GAAUkL,EAAW,EAC/D,KAAkB,sBAAsBlL,GAAUkL,EAAW,KACnE,MAAsBm2G,EAAgB/mO,EAAK,SAAS,EACpD,MAEF,IAAK,cACH,MAAMgnO,GACJJ,IAAU,QACN,KAAkB,yBAAyBlhH,GAAUkL,EAAW,EAChE,KAAkB,uBAAuBlL,GAAUkL,EAAW,KACpE,MAAsBo2G,GAAqBhnO,EAAK,SAAS,EACzD,MAEF,IAAK,SACH,MAAMinO,GACJL,IAAU,QACN,KAAkB,mBAAmBlhH,GAAUkL,EAAW,EAC1D,KAAkB,iBAAiBlL,GAAUkL,EAAW,KAC9D,MAAsBq2G,GAAgBjnO,EAAK,SAAS,EACpD,MAEF,IAAK,YACH,MAAM6wH,GAAmB7wH,EAAK,SAAS,iBACvC,GAAI4mO,IAAU,WACZ,MACE,KAAkB,sBAAsBlhH,GAAUmL,GAAkBD,EAAW,EAC/E5wH,EAAK,SACP,MACK,CAEL,MAAMknO,GADUlnO,EAAK,SAAS,OAASA,EAAK,SAAS,UAAY,GAE7D,KAAkB,sBAAsB0lH,GAAUmL,GAAkBD,EAAW,EAC/E,KAAkB,oBAAoBlL,GAAUmL,GAAkBD,EAAW,KACjF,MAAsBs2G,GAAsBlnO,EAAK,SAAS,CAC5D,CACA,MAEF,QACE,KACJ,CACF,CAEQ,+BAA+BA,EAAmD,CACxF,KAAM,CAAE,UAAA6mO,EAAW,SAAAnhH,EAAU,YAAAkL,EAAY,EAAI5wH,EAE7C,OAAQ6mO,EAAW,CACjB,IAAK,QACH,MAAMryD,GAAY,KAAkB,kBAAkB9uD,EAAUkL,EAAW,EACrE6jD,GAAU,KAAkB,gBAAgB/uD,EAAUkL,EAAW,EACjEu2G,EAAc,KAAqB,YAAYzhH,EAAUkL,EAAW,KAC1E,MAAyBu2G,EAAa3yD,GAAWC,EAAO,EACxD,MAEF,IAAK,cACH,MAAM2yD,GAAkB,KAAkB,wBAAwB1hH,EAAUkL,EAAW,EACjFy2G,GAAgB,KAAkB,sBAAsB3hH,EAAUkL,EAAW,EAC7E02G,GAAoB,KAAqB,kBAAkB5hH,EAAUkL,EAAW,KACtF,MAAyB02G,GAAmBF,GAAiBC,EAAa,EAC1E,MAEF,IAAK,cACH,MAAME,GAAuB,KAAkB,yBAAyB7hH,EAAUkL,EAAW,EACvF42G,GAAqB,KAAkB,uBAAuB9hH,EAAUkL,EAAW,EACnF62G,GAAyB,KAAqB,mBAAmB/hH,EAAUkL,EAAW,KAC5F,MAAyB62G,GAAwBF,GAAsBC,EAAkB,EACzF,MAEF,IAAK,SACH,MAAME,GAAkB,KAAkB,mBAAmBhiH,EAAUkL,EAAW,EAC5E+2G,GAAgB,KAAkB,iBAAiBjiH,EAAUkL,EAAW,EACxEg3G,GAAoB,KAAqB,aAAaliH,EAAUkL,EAAW,KACjF,MAAyBg3G,GAAmBF,GAAiBC,EAAa,EAC1E,MAEF,IAAK,YACH,MAAM92G,GAAmB7wH,EAAK,SAAS,iBACjC6nO,GAAqB,KAAkB,sBAAsBniH,EAAUmL,GAAkBD,EAAW,EAGpGk3G,GADU9nO,EAAK,SAAS,OAASA,EAAK,SAAS,UAAY,GAE7D,KAAkB,sBAAsB0lH,EAAUmL,GAAkBD,EAAW,EAC/E,KAAkB,oBAAoBlL,EAAUmL,GAAkBD,EAAW,EAE3Em3G,GAAuB,KAAqB,gBAAgBriH,EAAUmL,GAAkBD,EAAW,KACzG,MAAyBm3G,GAAsBF,GAAoBC,EAAgB,EACnF,MAEF,QACE,KACJ,CACF,CACF,CAGA,IAAIE,EAAwD,KAErD,SAASC,GAA2D,CACzE,OAAKD,IACHA,EAAyB,IAAI7B,EAC7B6B,EAAuB,WAAW,KAGlC,MAA4BA,EAAwB,KAAK,GAEpDA,CACT,CAEO,SAASE,GAAoD,CAClE,OAAOD,EAAiC,CAC1C,C,+GC1KA,SAASE,GAA+C,CACtDF,EAAiC,KACjC,MAAuC,CACzC,CAeO,MAAMG,EAAsB,IAE7BC,EAAyB,qBAGlBC,EAA2B,uBAmCxC,MAAeC,UACLjxK,EAAA,CAEV,CAHA,kCASE,KAAU,MAAwC,CAAC,EAKnD,UAA2C,CACzC,OAAO,KAAK,KACd,CAEA,MAAgB,oBAAmD,CACjE,MAAM04F,EAAM,QAAM,MAAc,EAAE,IAAiD,sBAAsB,EAEzG,MAAI,KAAmBA,CAAG,EAAG,CAC3B,MAAMxtD,EAAS,IAAa,iBAAiBwtD,EAAI,WAAW,EAC5D,YAAgB,QAAQxtD,CAAM,EACvB,IACT,CAGA,SAAI,MAAkBwtD,EAAI,SAAS,IACjCA,EAAI,aAAY,MAA6BA,EAAI,UAAW,CAC1D,KAAM,GACN,WAAY,EACZ,gBAAiB,IACjB,kBAAmB,EACrB,CAAC,GAGCA,GAAK,OACPA,EAAI,KAAK,QAAU,GACnBA,EAAI,KAAK,SAAW,GACpBA,EAAI,KAAK,QAAU,IAGdA,CACT,CAEA,MAAc,mBAAoD,CAChE,MAAMA,EAAM,MAAM,KAAK,mBAAmB,EAC1C,OAAIA,KACK14C,EAAA,IAA0B04C,CAAG,EAG/B,IACT,CAEA,MAAa,aAAa1tD,EAAc,CACtC,GAAI,CACF,MAAMhwE,EAAY,MAAM,KAAK,kBAAkBgwE,CAAI,EAEnD,KAAK,SAAS,CAAE,UAAAhwE,EAAsB,UAAW,EAAM,CAAC,CAC1D,OAAS3Z,EAAK,CACZ,MAAM0oB,KAAS,MAAmB1oB,CAAG,EAC/ByxB,MAAU,MAAoBzxB,CAAG,EACjC6vN,MAAY,MAAsB7vN,CAAG,EAY3C,GAVA,KAAK,SAAS,CACZ,UAAW,GACX,UAAW,CACT,OAAA0oB,EACA,QAAA+I,GACA,UAAAo+L,EACF,CACF,CAAC,EAGG7vN,aAAe,IACjB,MAAMA,CAEV,CACF,CAEA,MAAgB,0BAA0BmtF,EAAcj6D,EAA0B,CAEhF,MAAMpuC,GADS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACtC,IAAI,KAAK,GAAK,OAE3BgrO,GAAc,MAAOC,IAAiC,CAC1D,MAAMhrM,EAAS,QAAM,MACnB,KAAwB,UAAU,2BAA2B,SAAS,CACpE,KAAMooE,EACN,KAAAj6D,EACA,IAAK68L,EACP,CAAC,CACH,EAEA,GAAIhrM,GAAU,UAAWA,EACvB,MAAMA,EAAO,MAGf,MAAMt8B,GAA2C,gBAAgBs8B,EAAO,IAAI,EAEtEirM,GAASvnO,GAAE,SAAS,OAC1B,OAAKunO,GAIAA,GAAO,WAAW,WAAW,uBAAuB,EAIlD,KAAK,iCAAiC7iI,EAAMj6D,EAAM88L,GAAQ,CAC/D,KAAMvnO,GAAE,MAAQ,GAChB,IAAKsnO,GACL,KAAA5iI,CACF,CAAC,EAPQ,QAAQ,OAAO,6BAA+B6iI,GAAO,UAAU,EAJ/D,QAAQ,OAAO,sCAAsC,CAYhE,EAEA,GAAI,CACF,OAAO,MAAMF,GAAYhrO,EAAG,CAC9B,OAASkb,GAAK,CAEZ,GAAIlb,OAAO,MAAakb,EAAG,GAAKA,GAAI,SAAW,IAC7C,OAAO,MAAM8vN,GAAY,MAAS,EAEpC,MAAM9vN,EACR,CACF,CAEQ,iCACNmtF,EACAj6D,EACA88L,EACAC,GACA,CACA,GAAID,EAAO,WAAW,MAAM,GAAG,EAAE,CAAC,IAAM,UACtC,MAAO,CACL,GAAGA,EACH,KAAM,0BACN,OAAQ,CACN,QAAS,GACT,WAAY,GACZ,SAAU,GAGV,UAAW,GACX,QAAS,GACT,QAAS,EACX,CACF,EAGF,IAAIx2H,GAAOw2H,EAAO,SAAS,YACtBx2H,KACHw2H,EAAO,SAAS,YAAc,CAAC,GAEjCx2H,GAAK,IAAkB,EAAI,OAC3BA,GAAK,IAAsB,EAAIrM,EAC/BqM,GAAK,IAAiB,EAAIy2H,GAAoB,IAAM/8L,EAAO,IAAM+8L,GAAoB,IAAM/8L,EAG3F,MAAMg9L,GAAkB,CACtB,GAAGF,EAAO,KACV,QAASA,EAAO,SAAS,YAAc,CACzC,EAEA,MAAO,CACL,KAAM,CACJ,QAAS,GACT,WAAY,GACZ,SAAU,GAGV,UAAW,GACX,QAAS,GACT,QAAS,GAGT,IAAKA,EAAO,SAGZ,aAAcC,EAChB,EACA,UAAWC,EACb,CACF,CAEA,MAAa,cAAcxpO,EAA+B,CACxD,GAAI,IACF,MAAagpO,CAAsB,EACnC,MAAM/1M,EAAY,MAAM,KAAK,UAAUjzB,CAAO,EAC9C,GAAI,CAACizB,EACH,OAGE/vB,EAAA,EAAO,eAAe,sCAAgDlD,EAAQ,QAChF,MAAsCizB,CAAS,EAGjD,KAAK,SAAS,CAAE,UAAAA,EAAsB,UAAW,EAAM,CAAC,EACxD,MAAMw2M,KAAU,MAAYT,CAAsB,EAC5C7M,GAAkB,KAAW,mBAAmBlpM,CAAS,KAE/D,MAA0BA,EAAWw2M,GAAS,QAAQ,EAGpDvmO,EAAA,EAAO,4BAA4B,UAAWu3C,IAAQA,KAAQ,KAAOA,KAAQz6C,EAAQ,GAAG,IAAM,IAI9F8oO,EAAuC,EAIzC3M,IAAiB,aAAa,gBAAgB,EAE1Cn8N,EAAQ,QAAU,KAAgB,QACpC,KAAuB,CACrB,KAAMizB,EAAU,MAAM,KACtB,IAAKA,EAAU,MAAM,IACrB,MAAOA,EAAU,MAAM,MACvB,GAAIA,EAAU,MAAM,EACtB,CAAC,CAEL,OAAS3Z,EAAK,CACZ,MAAM0oB,KAAS,MAAmB1oB,CAAG,EAC/ByxB,MAAU,MAAoBzxB,CAAG,EACjC6vN,MAAY,MAAsB7vN,CAAG,EAiB3C,GAfA,KAAK,SAAS,CACZ,UAAW,GACX,UAAW,CACT,OAAA0oB,EACA,QAAA+I,GACA,UAAAo+L,EACF,CACF,CAAC,KAEI,MAAa7vN,CAAG,GACnB,QAAQ,MAAM,2BAA4BA,CAAG,EAK3CA,aAAe,IACjB,MAAMA,CAEV,CACF,CAEA,MAAc,UAAUtZ,EAA+D,CAKrF,GAJA,KAAK,SAAS,CAAE,UAAW,OAAW,UAAW,EAAK,CAAC,EAInDA,EAAQ,QAAU,KAAgB,KACpC,OAAO,MAAM,KAAK,kBAAkB,EAGtC,MAAM2wJ,EAAM,MAAM,KAAK,eAAe3wJ,CAAO,EAE7C,OAAK2wJ,EAIE,KAAK,yBAAyBA,EAAK3wJ,CAAO,EAHxC,IAIX,CAEO,sBAAsB67J,EAA4B,CACvD,MAAM6tE,EAAkB,KAAK,eAE7B,OACEA,GACAA,EAAgB,WAAa7tE,GAC7B,KAAK,IAAI,EAAI6tE,GAAiB,GAAKX,EAE5BW,EAAgB,UAGlB,IACT,CAEO,YAAa,IAClB,MAAgB,EAAE,WAAW,MAAS,EAEtC,KAAK,SAAS,CACZ,UAAW,OACX,UAAW,OACX,UAAW,GACX,YAAa,MACf,CAAC,CACH,CAEO,kBAAkB7tE,EAAkB5oI,EAAc,CACvD,KAAK,eAAiB,CAAE,UAAAA,EAAW,GAAI,KAAK,IAAI,EAAG,SAAA4oI,CAAS,CAC9D,CAEO,qBAAsB,CAC3B,KAAK,eAAiB,MACxB,CAEO,kBAAkBA,EAAkB,CACzC,OAAO,KAAK,MAAMA,CAAQ,CAC5B,CAEO,cAAcA,EAAkB1lI,EAAuB,CAC5D,KAAK,MAAM0lI,CAAQ,EAAI1lI,CACzB,CAEO,iBAAiB0lI,EAAkB,CACxC,OAAO,KAAK,MAAMA,CAAQ,CAC5B,CAEO,iBAAkB,CACvB,KAAK,MAAQ,CAAC,CAChB,CACF,CAEO,MAAM8tE,UAAuCT,CAAiD,CACnG,yBAAyBv4E,EAA0B3wJ,EAAsD,CACvG,MAAM4pO,EAAY,KAAK,kBAAkB5pO,EAAQ,GAAG,EAEpD,GACE4pO,GACAA,EAAU,MAAM,UAAYj5E,GAAK,UAAU,SAC3Ci5E,EAAU,MAAM,KAAK,UAAYj5E,GAAK,KAAK,QAG3C,SADiB,MAA0B,EAClC,YAAY,CACnB,aAAci5E,EAAU,MAAM,IAC9B,eAAgBA,EAAU,MAAM,KAClC,CAAC,EACMA,EAGT,GAAIj5E,GAAK,UAAW,CAClB,MAAMx6H,MAAQ8hF,EAAA,IAA0B04C,CAAG,EAG3C,OAAIztJ,EAAA,EAAO,eAAe,kBAAoBlD,EAAQ,QAAU,KAAgB,WAC9Em2B,GAAM,oBAAoBw6H,EAAI,UAAWA,EAAI,IAAI,EACjDx6H,GAAM,gBAAgB,EACtBA,GAAM,SAAS,CAAE,QAAS,EAAK,CAAC,GAI9Bn2B,EAAQ,KACV,KAAK,cAAcA,EAAQ,IAAKm2B,EAAK,EAGhCA,EACT,CAEA,MAAM,IAAI,MAAM,qBAAqB,CACvC,CAEA,MAAa,kBAAkB8sE,EAAuC,CACpE,MAAM0tD,EAAM,MAAM,KAAmB,aAAa1tD,CAAI,EAEtD,GAAI0tD,GAAK,UAAW,CAClB,MAAI,MAAkBA,EAAI,SAAS,EACjC,MAAM,IAAI,IAAsB,UAAW,iDAAiD,EAI9F,SADc14C,EAAA,IAA0B04C,CAAG,CAE7C,CAEA,MAAM,IAAI,MAAM,oBAAoB,CACtC,CAEA,MAAc,uBAA+C,CAE3D,MAAMm4D,EAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACzDv9L,EAAau9L,EAAa,IAAI,YAAY,EAC1ChgL,EAAWggL,EAAa,IAAI,UAAU,EACtCt8K,GAAOs8K,EAAa,IAAI,MAAM,EAEpC,GAAI,CAACv9L,GAAc,CAACud,GAAY,CAAC0D,GAC/B,MAAM,IAAI,MAAM,oDAAoD,EAItE,GAAI,IADO,KAAiB,EAAE,oBAAoBjhB,CAAU,EAE1D,MAAM,IAAI,MAAM,eAAeA,CAAU,0DAA0D,EAGrG,MAAM5qB,GAAO,CACX,SAAAmoC,EACA,KAAA0D,GACA,UAAW,GACX,OAAQ,CACN,CACE,KAAM,IACN,KAAM,aACN,SAAA1D,EACA,MAAOvd,CACT,CACF,CACF,EAIA,MAAO,CACL,UAAW,CACT,GAJ0B,QAAM,MAAc,EAAE,KAAK,8BAA+B5qB,EAAI,EAKxF,IAAK,GACL,QAAS,EACT,GAAI,IACN,EACA,KAAM,CACJ,QAAS,GACT,QAAS,GACT,QAAS,GACT,SAAU,GACV,UAAW,GACX,MAAO,GACP,UAAW,EACb,CACF,CACF,CAEA,MAAa,eAAe,CAC1B,KAAArE,EACA,KAAA2mG,EACA,IAAAxoD,EACA,MAAAytH,GACA,aAAA2hE,EACF,EAAuD,CACrD,MAAMhuE,GAAWqM,KAAU,KAAgB,KAAO+gE,EAA2BxuL,EAEvEivL,EAAkB,KAAK,sBAAsB7tE,EAAQ,EAE3D,GAAI6tE,EACF,OAAOA,EAGT,IAAI/4E,GAEJ,GAAI,CACF,OAAQuX,GAAO,CACb,KAAK,KAAgB,KAGnB,MAAM4hE,GAAgB,MAAM,KAAK,mBAAmB,EAEpD,GAAI,CAACA,GACH,OAAO,KAGTn5E,GAAMm5E,GACN,MACF,KAAK,KAAgB,IACnBn5E,GAAM,QAAMo5E,EAAA,GAA2BF,EAAY,EACnD,MACF,KAAK,KAAgB,SACnBl5E,GAAM,MAAM,KAAK,sBAAsB,EACvC,MACF,KAAK,KAAgB,aACnB,OAAO,KAAK,0BAA0B1tD,GAAQ,GAAIxoD,CAAG,EACvD,KAAK,KAAgB,OAAQ,CAC3B,MAAMpc,GAAS,MAAM,KAAmB,cAAc,SAAU,GAAIoc,CAAG,EAIvE,MAAI,MAAkBpc,GAAO,SAAS,EACpC,MAAM,IAAI,IAAsB,UAAW,yDAAyD,EAEtG,OAAOA,EACT,CACA,QAGE,GAAIn7B,EAAA,EAAO,eAAe,+BAAgC,CACxD,MAAM8mO,MAAoB,KAAmC,EAC7Dr5E,GAAM,MAAM,KAAmB,cAAcr0J,GAAQ,KAAM2mG,GAAQ,GAAIxoD,EAAKuvL,EAAiB,CAC/F,MACEr5E,GAAM,MAAM,KAAmB,cAAcr0J,GAAQ,KAAM2mG,GAAQ,GAAIxoD,CAAG,EAGxEytH,KAAU,KAAgB,WAC5BvX,GAAI,KAAK,WAAa,GAE5B,CAIA,GAAIA,GAAI,KAAK,KAAOuX,KAAU,KAAgB,QAAU,CAAC,KAAY,MAAM,UAAW,CACpF,MAAMntC,GAAe,IAAa,iBAAiB41B,GAAI,KAAK,GAAG,EACzDs5E,GAAc,KAAgB,YAAY,EAAE,SAE9ClvG,KAAiBkvG,KAEnB,KAAgB,QAAQ,CACtB,GAAG,KAAgB,YAAY,EAC/B,SAAUlvG,EACZ,CAAC,EACD,QAAQ,IAAI,6BAA8BA,GAAckvG,EAAW,EAEvE,CAGIt5E,GAAI,KAAK,WACX,QAAM,KAAeA,GAAI,KAAK,SAAS,EAIzC,KAAK,kBAAkBkL,GAAUlL,EAAG,CACtC,OAASpkJ,GAAG,CAEV,MAAI,MAAaA,EAAC,GAAKA,GAAE,UACvB,OAAO,KAGT,MAAMA,EACR,CAEA,OAAOokJ,EACT,CAEA,MAAa,gBAAgBnjG,EAAyC,CACpE,MAAMv6B,EAAY,KAAK,MAAM,UAE7B,GAAI,CAACA,GAAa,CAACA,EAAU,MAAM,IACjC,OAGF,MAAMwnB,EAAMxnB,EAAU,MAAM,IAE5B,GAAI,CACF,KAAK,SAAS,CAAE,UAAW,EAAK,CAAC,EAEjC,MAAM09H,GAAM,MAAM,KAAmB,cAAc,KAAM19H,EAAU,MAAM,KAAK,KAAMwnB,EAAK+S,CAAW,EAC9Fo8K,GAAY,KAAK,kBAAkBnvL,CAAG,EAW5C,GACEmvL,IACAA,GAAU,MAAM,UAAYj5E,IAAK,UAAU,SAC3Ci5E,GAAU,MAAM,UAAY,KAAK,MAAM,WAAW,MAAM,QACxD,CACA,KAAK,SAAS,CAAE,UAAW,EAAM,CAAC,EAClC,MACF,CAEA,GAAI,CAACj5E,IAAK,UAAW,CACnB,KAAK,SAAS,CACZ,UAAW,GACX,UAAW,CACT,OAAQ,IACR,WAAS,KACP,iFACA,qBACF,CACF,CACF,CAAC,EACD,MACF,CAEA,MAAMx6H,MAAQ8hF,EAAA,IAA0B04C,EAAG,EAGvCztJ,EAAA,EAAO,eAAe,sCAAgDu3C,MACxE,MAAsCtkB,EAAK,EAG7C,KAAK,cAAcskB,EAAKtkB,EAAK,EAC7B,KAAK,SAAS,CAAE,UAAWA,GAAO,UAAW,EAAM,CAAC,CACtD,OAAS7c,GAAK,CACZ,MAAM0oB,MAAS,MAAmB1oB,EAAG,EAC/ByxB,MAAU,MAAoBzxB,EAAG,EAUvC,GARA,KAAK,SAAS,CACZ,UAAW,GACX,UAAW,CACT,QAAAyxB,GACA,OAAA/I,EACF,CACF,CAAC,EAEG1oB,cAAe,IACjB,MAAMA,EAEV,CACF,CACF,CAEO,MAAM4wN,WAAyChB,CAEpD,CAFK,kCAGL,KAAQ,gBAAkB,IAAIiB,EAAA,EAAqB,CAEnD,MAAa,kBAAkBlnI,EAAuC,CACpE,MAAM0tD,EAAM,MAAM,KAAK,gBAAgB,aAAa1tD,CAAI,EAClDqzB,KAAa,KAAiBq6B,CAAG,EAEvC,GAAIr6B,EAAW,KAEb,SADcte,EAAA,IAAkCse,CAAU,EAI5D,MAAM,IAAI,MAAM,oBAAoB,CACtC,CAEA,yBACEq6B,EACA3wJ,EACuB,CACvB,MAAM4pO,EAAY,KAAK,kBAAkB5pO,EAAQ,GAAG,EAEpD,GAAI4pO,GAAaA,EAAU,MAAM,UAAYj5E,GAAK,SAAS,WAEzD,SADiB,MAA0B,EAClC,YAAY,CACnB,aAAci5E,EAAU,MAAM,IAC9B,eAAgBA,EAAU,MAAM,KAClC,CAAC,EACMA,EAGT,GAAIj5E,EAAK,CACP,MAAMx6H,MAAQ6hF,EAAA,IAAkC24C,CAAG,EAGnD,OAAI3wJ,EAAQ,KACV,KAAK,cAAcA,EAAQ,IAAKm2B,EAAK,EAGhCA,EACT,CAEA,MAAM,IAAI,MAAM,qBAAqB,CACvC,CAEA,MAAa,eAAe,CAC1B,KAAA75B,EACA,KAAA2mG,EACA,IAAAxoD,EACA,MAAAytH,GACA,aAAA2hE,EACF,EAAmF,CACjF,MAAMhuE,GAAWqM,KAAU,KAAgB,KAAO+gE,EAA2BxuL,EAEvEivL,EAAkB,KAAK,sBAAsB7tE,EAAQ,EAC3D,GAAI6tE,EACF,OAAOA,EAGT,IAAI/4E,GACJ,GAAI,CACF,OAAQuX,GAAO,CACb,KAAK,KAAgB,IACnBvX,GAAM,QAAMo5E,EAAA,GAA6BF,EAAY,EACrD,MACF,KAAK,KAAgB,aACnB,OAAO,MAAM,KAAK,0BAA0B5mI,GAAQ,GAAIxoD,CAAG,EAE7D,KAAK,KAAgB,OACnB,OAAO,MAAM,KAAK,gBAAgB,cAAc,SAAU,GAAIA,CAAG,EAEnE,QACEk2G,GAAM,MAAM,KAAK,gBAAgB,cAAcr0J,GAAQ,KAAM2mG,GAAQ,GAAIxoD,CAAG,EAExEytH,KAAU,KAAgB,WAC5BvX,GAAI,SAAS,YAAcA,GAAI,SAAS,aAAe,CAAC,EACxDA,GAAI,SAAS,YAAY,IAAe,EAAI,WAElD,CAGA,GAAIA,GAAI,OAAO,KAAOuX,KAAU,KAAgB,QAAU,CAAC,KAAY,MAAM,UAAW,CACtF,MAAMntC,GAAe,IAAa,iBAAiB41B,GAAI,OAAO,GAAG,EAC3Ds5E,GAAc,KAAgB,YAAY,EAAE,SAC9ClvG,KAAiBkvG,KAEnB,KAAgB,QAAQ,CACtB,GAAG,KAAgB,YAAY,EAC/B,SAAUlvG,EACZ,CAAC,EACD,QAAQ,IAAI,6BAA8BA,GAAckvG,EAAW,EAEvE,CAEIt5E,GAAI,SAAS,cAAc,IAAa,GAC1C,QAAM,KAAeA,GAAI,SAAS,cAAc,IAAa,CAAC,EAGhE,KAAK,kBAAkBkL,GAAUlL,EAAG,CACtC,OAASpkJ,GAAG,CAEV,MAAI,MAAaA,EAAC,GAAKA,GAAE,UACvB,OAAO,KAET,MAAMA,EACR,CACA,OAAOokJ,EACT,CAEA,MAAa,gBAAgBnjG,EAAyC,CACpE,MAAMv6B,EAAY,KAAK,MAAM,UAE7B,GAAI,CAACA,GAAa,CAACA,EAAU,MAAM,IACjC,OAGF,MAAMwnB,EAAMxnB,EAAU,MAAM,IAE5B,GAAI,CACF,KAAK,SAAS,CAAE,UAAW,EAAK,CAAC,EAEjC,MAAM09H,GAAM,MAAM,KAAK,gBAAgB,cAAc,KAAM19H,EAAU,MAAM,KAAK,KAAMwnB,EAAK+S,CAAW,EAChGo8K,GAAY,KAAK,kBAAkBnvL,CAAG,EAE5C,GACEmvL,IACAA,GAAU,MAAM,UAAYj5E,IAAK,SAAS,YAC1Ci5E,GAAU,MAAM,UAAY,KAAK,MAAM,WAAW,MAAM,QACxD,CACA,KAAK,SAAS,CAAE,UAAW,EAAM,CAAC,EAClC,MACF,CAEA,GAAI,CAACj5E,IAAK,KAAM,CACd,KAAK,SAAS,CACZ,UAAW,GACX,UAAW,CACT,OAAQ,IACR,WAAS,KACP,oFACA,qBACF,CACF,CACF,CAAC,EACD,MACF,CAEA,MAAMx6H,MAAQ6hF,EAAA,IAAkC24C,EAAG,EAG/CztJ,EAAA,EAAO,eAAe,sCAAgDu3C,MACxE,MAAsCtkB,EAAK,EAG7C,KAAK,cAAcskB,EAAKtkB,EAAK,EAE7B,KAAK,SAAS,CAAE,UAAWA,GAAO,UAAW,EAAM,CAAC,CACtD,OAAS7c,GAAK,CACZ,MAAM0oB,MAAS,MAAmB1oB,EAAG,EAC/ByxB,MAAU,MAAoBzxB,EAAG,EAQvC,GAPA,KAAK,SAAS,CACZ,UAAW,GACX,UAAW,CACT,QAAAyxB,GACA,OAAA/I,EACF,CACF,CAAC,EACG1oB,cAAe,IACjB,MAAMA,EAEV,CACF,CACF,CAEO,MAAM8wN,UAA8ClB,CAEzD,CAKA,YAAYv1M,EAAgD,CAC1D,MAAMA,CAAY,EAClB,KAAK,UAAY,IAAIg2M,EAA+Bh2M,CAAY,EAChE,KAAK,UAAY,IAAIu2M,GAAiCv2M,CAAY,EAElE,KAAK,cAAgB,KAAK,SAC5B,CAEA,MAAc,oBACZ6zM,EACY,CACZ,GAAI,CACF,OAAO,MAAMA,EAAU,KAAK,aAAa,CAC3C,OAASt6N,EAAO,CACd,GAAIA,aAAiB,IAAuB,CAC1C,MAAMm9N,KAAU,KAAkBn9N,EAAM,KAAK,aAAa,EAAI,KAAK,UAAY,KAAK,UACpF,YAAK,cAAgBm9N,EACd,MAAM7C,EAAU6C,CAAO,CAChC,KACE,OAAMn9N,CAEV,QAAE,CAGA,KAAK,SAAS,KAAK,cAAc,KAAK,CACxC,CACF,CAEA,MAAa,eAAelN,EAA+B,CACzD,OAAO,KAAK,oBAAqFqqO,GAC/FA,EAAQ,eAAerqO,CAAO,CAChC,CACF,CAEA,MAAa,gBAAgBwtD,EAA0B,CACrD,OAAO,KAAK,oBAAqB68K,GAAYA,EAAQ,gBAAgB,KAAK,KAAM78K,CAAW,CAAC,CAC9F,CAEO,sBAAsB/S,EAAa,CACxC,OAAO,KAAK,cAAc,sBAAsBA,CAAG,CACrD,CAEA,yBACEk2G,EACA3wJ,EACuB,CACvB,OAAK2wJ,KAGD,MAAsBA,CAAG,GAC3B,KAAK,cAAgB,KAAK,UACnB,KAAK,UAAU,yBAAyBA,EAAK3wJ,CAAO,GAGtD,KAAK,UAAU,yBAAyB2wJ,EAAK3wJ,CAAO,EAPlD,IAQX,CAEA,MAAa,kBAAkBijG,EAAuC,CACpE,GAAI,CACF,OAAO,MAAM,KAAK,UAAU,kBAAkBA,CAAI,CACpD,OAAS/1F,EAAO,CACd,GAAIA,aAAiB,QAAyB,KAAkBA,EAAM,KAAK,aAAa,EACtF,OAAO,MAAM,KAAK,UAAU,kBAAkB+1F,CAAI,EAEpD,MAAM,IAAI,MAAM,oBAAoB,CACtC,CACF,CAEA,MAAa,aAAaA,EAAc,CACtC,OAAO,KAAK,oBAAqBonI,GAAYA,EAAQ,aAAa,KAAK,KAAMpnI,CAAI,CAAC,CACpF,CAEO,qBAAsB,CAC3B,KAAK,UAAU,oBAAoB,EACnC,KAAK,UAAU,oBAAoB,CACrC,CAEO,iBAAkB,CACvB,KAAK,UAAU,gBAAgB,EAC/B,KAAK,UAAU,gBAAgB,EAC/B,KAAK,MAAQ,CAAC,CAChB,CAEO,kBAAkB/+E,EAAa,CACpC,OAAO,KAAK,cAAc,kBAAkBA,CAAG,CACjD,CAEO,cAAc23I,EAAkB1lI,EAA6B,CAClE,KAAK,cAAc,cAAc0lI,EAAU1lI,CAAK,CAClD,CAEO,iBAAiB0lI,EAAwB,CAC9C,KAAK,UAAU,iBAAiBA,CAAQ,EACxC,KAAK,UAAU,iBAAiBA,CAAQ,CAC1C,CAEO,UAAW,CAChB,OAAO,KAAK,cAAc,SAAS,CACrC,CAEO,kBAAkBA,EAAkB5oI,EAAoE,IACzG,MAAsBA,CAAS,EACjC,KAAK,UAAU,kBAAkB4oI,EAAU5oI,CAAS,EAEpD,KAAK,UAAU,kBAAkB4oI,EAAU5oI,CAAS,CAExD,CAEA,MAAa,cAAcjzB,EAA8C,CACvE,GAAIA,EAAQ,QAAU,KAAgB,IAAK,CACzC,MAAMsqO,EAAsBpnO,EAAA,EAAO,eAAe,oBAAsB,KAAO,KAC/E,KAAK,iBAAiBonO,CAAmB,CAC3C,CACA,OAAO,KAAK,oBAAqBD,GAAYA,EAAQ,cAAc,KAAK,KAAMrqO,CAAO,CAAC,CACxF,CAEO,iBAAiBqqO,EAAsB,CACxCA,IAAY,KACd,KAAK,cAAgB,KAAK,UAE1B,KAAK,cAAgB,KAAK,SAE9B,CACO,oBAAqB,CAC1B,KAAK,iBAAiB,IAAI,CAC5B,CACF,CAEA,MAAME,GAIF,CACF,GAAI,OACJ,GAAI,OACJ,QAAS,MACX,EAMO,SAASC,GAAkCzoO,EAAiB,CACjE,OAAIA,IAAM,MACHwoO,GAAS,KACZA,GAAS,GAAK,IAAIZ,EAA+B,CAAC,CAAC,GAE9CY,GAAS,IAGdxoO,IAAM,MACHwoO,GAAS,KACZA,GAAS,GAAK,IAAIL,GAAiC,CAAC,CAAC,GAEhDK,GAAS,KAGbA,GAAS,UACZA,GAAS,QAAU,IAAIH,EAAsC,CAAC,CAAC,GAG1DG,GAAS,QAClB,C,gGC7gCO,MAAMjsI,KAAW,MAFC,wBACE,UACiC,EAE/Cp/B,KAAM,MAAU,CAC3B,YAAa,uBACb,aAAW,KAAgB,CACzB,QAASo/B,CACX,CAAC,EACD,UAAW,KAAO,CAAC,EACrB,CAAC,C,wNCbM,SAASmsI,EAAiB97K,GAAkB,CACjD,IAAI+7K,EAAQ,CAAC,EAGb,MAAMzoM,MAAS,aAAU0sB,GAAa,IAAI,EAEpCg8K,MAAa,WAAQ1oM,GAAO,CAAC,EAAG,IAAI,EAC1C,OAAAyoM,KAAQ,OAAIC,GAAaC,IACnBA,GAAW,OAAS,GAAK,IAAC,SAAMA,GAAYC,CAAY,KAEnD,QAAKD,GAAathO,IAChBA,GAAM,YAAc,aAC5B,KAEM,QAAKshO,EAAU,CAEzB,EAEDF,KAAQ,UAAOA,EAAOzoM,GAAO,CAAC,CAAC,EACxByoM,CACT,CAEA,SAASG,EAAavhO,GAA8B,CAClD,OAAOA,GAAM,YAAc,aAC7B,C,wICfO,MAAMwhO,CAAwD,CACnE,OAAOv/M,EAAqC,CAC1C,OAAKA,EAIE,GAAQ,CAACA,EAAW,iBAAmBA,EAAW,aAHhD,EAIX,CAEA,IAAI,CAAE,WAAAL,EAAY,WAAAK,GAAY,UAAA0H,GAAW,MAAAroB,EAAM,EAAgE,CAC7G,GAAI,CAAC,KAAK,OAAO2gB,EAAU,EACzB,SAAOi/G,EAAA,IAAG,CAAC,CAAC,EAGd,MAAM3qI,GAAoB,CAAC,EAE3B,SAAOkrO,EAAA,GAAuB,CAAE,UAAA93M,GAAW,MAAAroB,GAAO,MAAA/K,EAAM,EAAG0rB,GAAaL,CAAU,EAAE,QAClF2/G,EAAA,GAAKxsG,IACIA,GAAO,QAAU,CAAC,CAC1B,KACD2sM,EAAA,GAAW,IAAgC,CAC7C,CACF,CACF,C,eCzBO,MAAMC,CAA6D,CACxE,OAAO1/M,EAAqC,CAC1C,OAAKA,KAID,MAAsBA,CAAU,EAC3B,GAGF,GAAQA,EAAW,iBAAmB,CAACA,EAAW,aAPhD,EAQX,CAEA,IAAI,CAAE,WAAAL,EAAY,WAAAK,GAAY,UAAA0H,GAAW,MAAAroB,EAAM,EAAgE,CAC7G,GAAI,CAAC,KAAK,OAAO2gB,EAAU,EACzB,SAAOi/G,EAAA,IAAG,CAAC,CAAC,EAGd,GAAIj/G,IAAY,kBAAoB,OAClC,eAAQ,KAAK,8CAA8C,KACpDi/G,EAAA,IAAG,CAAC,CAAC,EAGd,MAAMhsG,GAAkBjT,GAAW,gBAAgB,CAAE,MAAA3gB,GAAO,SAAUA,GAAM,IAAK,WAAAsgB,EAAY,UAAA+H,EAAU,CAAC,EACxG,OAAIuL,KAAoB,QACtB,QAAQ,KAAK,8CAA8C,KACpDgsG,EAAA,IAAG,CAAC,CAAC,MAGP/8G,EAAA,GAAK+Q,EAAe,EAAE,QAAKwsM,EAAA,GAAW,IAAgC,CAAC,CAChF,CACF,CCnBO,MAAME,CAAwD,CACnE,YACmBC,EAAmC,CAClD,IAAIF,EACJ,IAAIH,CACN,EACA,CAJiB,aAAAK,CAIhB,CAEH,QAAQ,CAAE,UAAAl4M,CAAU,EAAyC,CAG3D,MAAO,EAFaA,EAAU,YAAY,KAAK,KAAKi4M,EAAkB,6BAA6B,CAGrG,CAEA,KAAKlrO,EAAoF,CACvF,GAAI,CAAC,KAAK,QAAQA,CAAO,EACvB,SAAO,KAAY,EAGrB,KAAM,CAAE,UAAAizB,GAAW,MAAAroB,EAAM,EAAI5K,EAC7B,IAAI2uD,GAAc17B,GAAU,YAAY,KAAK,OAAOi4M,EAAkB,6BAA6B,EAG/FhoO,EAAA,EAAO,4BAA8ByrD,GAAY,OAAS,IAC5DA,GAAc,CAACA,GAAY,CAAC,CAAC,GAG/B,MAAMy8K,GAAcz8K,GAAY,IAAKzjC,IAAe,CAClD,IAAImgN,GAEJ,GAAInoO,EAAA,EAAO,2BAA4B,CACrC,MAAMooO,GAAoB,IAAIC,EAAA,EAC9BF,MAAuB7gG,EAAA,IAAG8gG,EAAiB,EAAE,QAAKN,EAAA,GAAW,IAAwB,CAAC,CACxF,MACEK,MAAuB59M,EAAA,MAAK,KAAiB,EAAE,IAAIvC,GAAW,UAAU,CAAC,EAAE,QACzE8/M,EAAA,GAAW,IAAwB,CACrC,EAGF,OAAOK,GAAqB,QAC1B51E,EAAA,GAAUlqI,IAA0C,CAClD,MAAMm/H,GAAS,KAAK,QAAQ,KAAMrpI,IAAMA,GAAE,OAAOkK,EAAU,CAAC,EAC5D,OAAKm/H,IAILz3H,GAAU,OAAO,QAAQ,IAAI,KAAuB/H,EAAU,CAAC,EAExDw/H,GAAO,IAAI,CAAE,WAAAx/H,GAAY,WAAAK,GAAY,UAAA0H,GAAW,MAAAroB,EAAM,CAAC,EAAE,QAC9D4gO,EAAA,GACEC,EAAwB,EACrB,cAAc,EACd,QAAKztM,EAAA,GAAQxc,IAAMA,KAAM0J,EAAU,CAAC,CACzC,KACA2/G,EAAA,GAAK10H,KAEC8c,GAAU,WACZ/H,GAAW,gBAAe,aAAU/U,EAAO,GAGzCjT,EAAA,EAAO,2BACFiT,MAEA,MAAqB+U,GAAY/U,EAAO,EAElD,KACDu1N,EAAA,GAAS,IAAM,CACbz4M,GAAU,OAAO,QAAQ,IAAI,KAAwB/H,EAAU,CAAC,CAClE,CAAC,CACH,MA1BSs/G,EAAA,IAAG,CAAC,CAAC,CA2BhB,CAAC,CACH,CACF,CAAC,EAED,SAAO36E,EAAA,GAAMu7K,EAAW,EAAE,QACxBO,EAAA,GAAS,KACTC,EAAA,GAAO,CAAC/xN,GAAKrd,KAKJqd,GAAI,OAAOrd,EAAK,CACxB,KACDquI,EAAA,GAAKl8E,KACI,CAAE,YAAAA,GAAa,YAAa,CAAC,CAAE,EACvC,CACH,CACF,CAEA,OAAe,8BAA8BzjC,EAAsC,CACjF,OAAOA,EAAW,QAAU,CAASA,EAAW,YAClD,CACF,C,4HC7FO,MAAM2gN,EAA+D,CAArE,cAIL,KAAQ,cAAyC,CAAC,EAElD,QAAQ,CAAE,UAAA54M,EAAW,MAAAroB,EAAM,EAAyC,CAsBlE,MArBI,GAACqoB,EAAU,KAKX/vB,EAAA,EAAO,4BAIP0H,GAAM,IAAI,KAAO,OAIjB,KAAK,cAAcqoB,EAAU,GAAG,IAAM,IAQtC,EAHF,KAAW,cAAc,IAAoB,gBAAgB,GAC7D,KAAW,cAAc,IAAoB,wBAAwB,GAOzE,CAEA,KAAKjzB,EAAoF,CACvF,GAAI,CAAC,KAAK,QAAQA,CAAO,EACvB,SAAO,KAAY,EAGrB,KAAM,CAAE,UAAAizB,EAAU,EAAIjzB,EAChBovE,GAA4C,UAC9B,QAAM,OACtBt5B,EAAA,GAAa,UAAU,yBAAyB,SAC9C,CACE,eAAgB,KAChB,aAAc7iB,GAAU,GAC1B,EACA,CAAE,aAAc,EAAK,CACvB,CACF,GACiB,KAOnB,SAJ4CxF,EAAA,GAAK2hD,GAAU,CAAC,EAAE,QAC5Dy7D,EAAA,GAAKt7D,OAAgC,MAAuBA,EAAU,CAAC,CACzE,EAEW,QACTs7D,EAAA,GAAKr7D,IAA+B,CAClC,KAAK,cAAcv8C,GAAU,GAAG,EAAI,GACpC,MAAMw8C,GAAsD,CAAC,EAC7D,OAAAD,GAAO,QAASn7D,IACdA,GAAM,MAAM,QAAS4hC,IAAS,CAC5B,GAAI,KAAmB,aAAaA,EAAI,GAAKA,GAAK,aAAeA,GAAK,YAAY,KAAW,OAAO,EAAG,CACrG,KAAK,cAAchjB,GAAU,GAAG,EAAI,GACpC,MAAMvC,GAAU,OAAOulB,GAAK,YAAY,KAAW,OAAO,CAAC,EACrDh3B,MAAQ,KAA2Bg3B,GAAK,KAAK,EAI9Cw5B,GAAoB/+C,EAAO,EAOrBzR,KAAU,IAAW,UAAYwwD,GAAoB/+C,EAAO,EAAE,QAAU,IAAW,SAC5F++C,GAAoB/+C,EAAO,EAAE,MAAQ,IAAW,SAEhDzR,KAAU,IAAW,SACrBwwD,GAAoB/+C,EAAO,EAAE,QAAU,IAAW,UAClD++C,GAAoB/+C,EAAO,EAAE,QAAU,IAAW,UAElD++C,GAAoB/+C,EAAO,EAAE,MAAQ,IAAW,SAbhD++C,GAAoB/+C,EAAO,EAAI,CAC7B,MAAAzR,GACA,GAAI,OAAO,KAAKwwD,EAAmB,EAAE,OACrC,QAAA/+C,GACA,YAAauC,GAAU,EACzB,CAUJ,CACF,CAAC,CACH,EACO,CAAE,YAAa,OAAO,OAAOw8C,EAAmB,EAAG,YAAa,CAAC,CAAE,CAC5E,CAAC,KACDu7J,EAAA,GAAW,IAAqC,CAClD,CACF,CACF,CC7FA,MAAMc,EAAyD,CAO7D,YACmB74M,EACA84M,MAAmB,MAAW,EAC9BC,GAAwC,CACvD,IAAIH,GACJ,IAAIziF,EAAA,EACJ,IAAI8hF,CACN,EACA,CAPiB,eAAAj4M,EACA,aAAA84M,GACA,aAAAC,GAMjB,KAAK,IAAM,KAAK,IAAI,KAAK,IAAI,EAC7B,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACzC,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,QAAU,IAAIC,EAAA,EAAgD,CAAC,EACpE,KAAK,KAAO,IAAIC,EAAA,EAChB,KAAK,mBAAqB,IAAIA,EAAA,EAC9B,KAAK,iBAAmB,KAAK,KAAK,UAAWlsO,IAAY,KAAK,WAAWA,EAAO,CAAC,EACjF,KAAK,mBAAqBizB,EAAU,OAAO,UAAU,IAAe3pB,IAAU,CAC5E,KAAK,IAAI,CAAE,UAAW,KAAK,UAAW,MAAO,KAAK,QAAQ,UAAU,CAAE,CAAC,CACzE,CAAC,CACH,CAEA,IAAItJ,EAA4C,CAC9C,KAAK,KAAK,KAAKA,CAAO,CACxB,CAEA,UAAU0wB,EAA0D,CAClE,OAAO,KAAK,QAAQ,aAAa,EAAE,QACjCm6G,EAAA,GAAKxsG,IAAW,CACd,MAAMswB,MAAc,MAAwBtwB,GAAO,YAAa3N,CAAO,EACjEy7M,GAAa9tM,GAAO,YAAY,KAAMwI,IAAQ,EAAQnW,GAAYmW,GAAI,UAAYnW,CAAO,EAC/F,MAAO,CAAE,YAAa+5M,EAAiB97K,EAAW,EAAG,WAAAw9K,EAAW,CAClE,CAAC,CACH,CACF,CAEQ,WAAWnsO,EAAsC,CAEvD,MAAMosO,GADU,KAAK,QAAQ,OAAQjpF,IAAMA,GAAE,QAAQnjJ,CAAO,CAAC,EAC3B,IAAKmjJ,IAAMA,GAAE,KAAKnjJ,CAAO,CAAC,EAEtDqsO,GAAqB,IAAIrtN,EAAA,GACzBstN,MAAmBz8K,EAAA,GAAMu8K,EAAiB,EAAE,QAChDZ,EAAA,GAAU,KAAK,KAAK,aAAa,CAAC,KAClCG,EAAA,GAAS,KACTC,EAAA,GAAO,CAAC/xN,GAAuCrd,MAM7Cqd,GAAI,YAAcA,GAAI,YAAY,OAAOrd,GAAM,WAAW,EAC1Dqd,GAAI,YAAcA,GAAI,YAAY,OAAOrd,GAAM,WAAW,EACnDqd,GACR,KACD6xN,EAAA,GAAS,IAAM,CACbW,GAAmB,YAAY,CACjC,CAAC,KACDE,EAAA,GAAM,CACR,EAEMC,GAAoB,IAAIxtN,EAAA,GACxBytN,MAAkBC,EAAA,GAAM,GAAG,EAAE,QACjCC,EAAA,GAAM,CAAE,YAAa,CAAC,EAAG,YAAa,CAAC,CAAE,CAAC,KAC1CnB,EAAA,GAAUc,EAAgB,KAC1BZ,EAAA,GAAS,IAAM,CACbc,GAAkB,YAAY,CAChC,CAAC,CACH,EAGAA,GAAkB,IAChBC,GAAgB,UAAWpuM,IAAW,CACpC,KAAK,QAAQ,KAAKA,EAAM,CAC1B,CAAC,CACH,EAEAguM,GAAmB,IACjBC,GAAiB,UAAWjuM,IAA6C,CACvE,KAAK,QAAQ,KAAKA,EAAM,CAC1B,CAAC,CACH,CACF,CAEA,OAAOnT,EAAmC,CACxC,KAAK,mBAAmB,KAAKA,CAAU,CACzC,CAEA,eAA6C,CAC3C,OAAO,KAAK,mBAAmB,aAAa,EAAE,QAAKqhN,EAAA,GAAM,CAAC,CAC5D,CAEA,SAAgB,CACd,KAAK,QAAQ,SAAS,EACtB,KAAK,KAAK,SAAS,EACnB,KAAK,mBAAmB,SAAS,EACjC,KAAK,iBAAiB,YAAY,EAClC,KAAK,mBAAmB,YAAY,CACtC,CACF,CAEA,IAAIK,EAEJ,SAASC,EAAwBniF,GAAoC,CAC/DkiF,GACFA,EAAqB,QAAQ,EAE/BA,EAAuBliF,EACzB,CAEO,SAAS+gF,GAAgD,CAC9D,GAAI,CAACmB,EACH,MAAM,IAAI,MAAM,8EAA8E,EAEhG,OAAOA,CACT,CAUA,IAAI7wF,EAEG,SAAS+wF,GAA+BjhN,GAAuC,CACpFkwH,EAAUlwH,EACZ,CAEO,SAASkhN,GAA2BvjM,GAA6D,CACjGuyG,IACHA,EAAU,CAAC,CAAE,UAAA9oH,GAAW,QAAA84M,GAAS,QAAAC,EAAQ,IACvC,IAAIF,GAAyB74M,GAAW84M,GAASC,EAAO,GAG5D,MAAMthF,EAAS3O,EAAQvyG,EAAI,EAC3B,OAAAqjM,EAAwBniF,CAAM,EACvBA,CACT,C,iGCpKO,SAAS9uC,EAAe,CAAE,UAAA50G,EAAW,GAAGqE,CAAK,EAAmC,CACrF,MAAM9E,KAAS,MAAWuD,CAAS,EACnC,SAAO,OAAC,IAAM,CAAE,GAAGuB,EAAM,aAAW,MAAG9E,EAAO,OAAQS,CAAS,EAAG,CACpE,CAEA,SAAS8C,EAAUnF,EAAsB,CACvC,MAAO,CACL,UAAQ,OAAI,CACV,UAAWA,EAAM,QAAQ,CAAC,EAC1B,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,CACF,C,kICRA,MAAMqoO,EAA8C,CAClD,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,UACF,EAAE,IAAK/rE,IAAS,CACd,MAAOA,EACP,MAAOA,CACT,EAAE,EAEIgsE,EAA6C,CACjD,QACA,QACA,QACA,QACA,SACF,EAAE,IAAKhsE,IAAS,CACd,MAAOA,EACP,MAAOA,CACT,EAAE,EAIWisE,EAAkB,CAAC,CAAE,MAAA1wO,EAAO,SAAAJ,CAAS,IAAa,CAC7D,MAAM+wO,EAAoD,CACxD,CACE,SAAO,KAAE,6DAA8D,OAAO,EAC9E,MAAO,OACT,EACA,CACE,SAAO,KAAE,4DAA6D,MAAM,EAC5E,MAAO,MACT,EACA,CACE,SAAO,KAAE,4DAA6D,MAAM,EAC5E,MAAO,KACT,CACF,EACMntO,KAAU,WAAQ,IAAOxD,GAAO,OAAS,OAASwwO,EAAcC,EAAa,CAACzwO,CAAK,CAAC,EACpFsd,KAAU,WAAQ,IAAM,CAC5B,GAAI,CAACtd,GAAO,MAAM,OAChB,OAAOwD,EAAQ,CAAC,EAElB,MAAMi6B,EAAMz9B,EAAM,MAAM,KAAK,IAAI,EAC3BulC,EAAM/hC,EAAQ,KAAMvD,GAAMA,EAAE,QAAUw9B,CAAG,EAC/C,OAAK8H,GACI,CACL,MAAO9H,EACP,MAAOA,CACT,CAGJ,EAAG,CAACz9B,EAAOwD,CAAO,CAAC,EAEnB,SACE,QAAC,IAAK,CAAC,KAAM,GAAM,WAAW,WAC5B,oBAAC,KACC,MAAOxD,GAAO,MAAQ,QACtB,QAAS2wO,EACT,SAAWprO,GAAM,CACf,IAAI+rD,EACA/rD,IAAM,MACR+rD,EAAOs/K,EAAUH,EAAW,CAAC,EAAE,KAAM,EAC5BlrO,IAAM,SACf+rD,EAAOs/K,EAAUJ,EAAY,CAAC,EAAE,KAAM,GAExC5wO,EAAS,CACP,GAAGI,EACH,KAAMuF,EACN,KAAA+rD,CACF,CAAC,CACH,EACF,EACCtxD,GAAO,MAAQA,GAAO,OAAS,YAC9B,oBACE,oBAAC,MACC,iBAAkB,GAClB,QAAAwD,EACA,MAAO8Z,EACP,MAAO,GACP,SAAW/X,GAAM,CACf3F,EAAS,CACP,GAAGI,EACH,KAAM4wO,EAAUrrO,EAAE,OAAS,EAAE,CAC/B,CAAC,CACH,EACA,kBAAoBG,GAAM,aAAakrO,EAAUlrO,CAAC,EAAE,KAAK,IAAI,CAAC,GAChE,KACA,QAAC,OAAI,oBAEH,OAAC,KACC,SAAO,KACL,sEACA,kCACF,EACA,KAAK,mGACL,OAAO,SACP,IAAI,aAEJ,mBAAC,IAAU,CAAC,KAAK,kBAAkB,WAAS,KAAE,4CAA6C,MAAM,EAAG,EACtG,GACF,GACF,GAEJ,CAEJ,EAEA,SAASkrO,EAAUnsE,EAAuB,CACxC,MAAMosE,EAAqB,CAAC,EAC5B,UAAWtqO,KAAKk+J,EAAI,MAAM,UAAU,EAAG,CACrC,MAAMhzG,EAAM,OAAO,SAASlrD,EAAG,EAAE,EAC5B,MAAMkrD,CAAG,GACZo/K,EAAS,KAAKp/K,CAAG,CAErB,CACA,OAAOo/K,CACT,C,+JCpHO,MAAMC,UAAsB,IAAoC,CAAhE,kCACL,KAAU,oBAAsB,IAAI,KAAyB,KAAM,CACjE,qBAAsB,IAAM,CACtB,KAAK,MAAM,UAAY,KAAK,MAAM,SAAS,OAAS,GACtD,KAAK,YAAY,CAErB,CACF,CAAC,EAED,MAAO,CAAP,KAAO,UAAYC,CAAA,CACrB,CAEA,SAASA,EAAsB,CAAE,MAAAvgN,CAAM,EAAuC,CAC5E,KAAM,CAAE,KAAAwgN,EAAM,SAAAC,CAAS,EAAIzgN,EAAM,SAAS,EAG1C,GAFA,KAAW,aAAaA,CAAK,EAAE,SAAS,EAEpC,EAAEA,EAAM,kBAAkB,MAC5B,MAAM,IAAI,MAAM,2CAA2C,EAG7D,GAAI,CAACygN,GAAYA,EAAS,SAAW,EACnC,OAAO,KAGT,GAAIA,EAAS,SAAW,EAAG,CACzB,MAAM9tO,KAAO,MAAcqtB,EAAM,MAAM,EAAE,CAAC,EAC1C,SACE,OAAC,KAAY,UAAZ,CAAsB,KAAMrtB,EAAK,KAAM,QAASA,EAAK,QAAS,OAAQA,EAAK,OAAQ,MAAOA,EAAK,MAC9F,mBAAC,IAAI,CAAC,KAAK,oBAAoB,KAAK,IAAK,GAC3C,CAEJ,CAEA,SACE,OAAC,KACC,QAAS,OACA,OAAC6tO,EAAK,UAAL,CAAe,MAAOA,CAAA,EAAWA,EAAK,MAAM,GAAK,EAG3D,mBAAC,KACC,KAAK,oBACL,SAAS,KACT,gBAAY,KAAE,kEAAmE,aAAa,EAChG,EACF,CAEJ,CAEO,MAAME,UAA0B,IAA+D,CACpG,MAAO,CAAP,KAAO,UAAYC,CAAA,CACrB,CAEA,SAASA,EAA0B,CAAE,MAAA3gN,CAAM,EAAuC,CAChF,KAAM,CAAE,MAAA/tB,CAAM,EAAI+tB,EAAM,SAAS,EAEjC,OAAK/tB,KAKH,OAAC,IAAI,CACF,SAAAA,GAAO,IAAI,CAACU,EAAM4oB,OACV,OAAC,IAAK,KAAL,CAAoB,MAAO5oB,EAAK,MAAO,IAAKA,EAAK,KAAM,OAAQA,EAAK,OAAQ,QAASA,EAAK,SAA3E4oB,CAAoF,CAC5G,EACH,EARO,IAUX,C,8JCrEA,MAAMqlN,EAAkB,CAAC,CAAE,MAAA7vO,EAAO,SAAA3B,CAAS,IAA4B,CACrE,KAAM,CAACwP,EAAcC,CAAQ,KAAI,YAAS9N,CAAK,KAE/C,KACGkO,GAAM,CACL7P,EAAS,KAAiB,YAAYuI,EAAM,cAAc,eAAesH,CAAC,CAAC,CAAC,CAC9E,EACA,IACA,CAACL,CAAY,CACf,EAEA,MAAMjH,KAAQ,MAAU,EAClB4B,KAAS,MAAWuD,CAAS,EAE7B+jO,KAAa,WAAQ,IAClBjiO,EAAa,WAAW,MAAM,EACjCA,KACA,KAAUjH,EAAM,cAAc,eAAe5G,CAAK,CAAC,EAAE,YAAY,EACpE,CAAC6N,EAAcjH,EAAO5G,CAAK,CAAC,EAE/B,SACE,QAAC,OAAI,UAAWwI,EAAO,QACrB,oBAAC,KAAqB,CAAC,UAAWA,EAAO,KAAM,MAAOsnO,EAAY,SAAUhiO,CAAA,CAAU,KACtF,OAAC,IAAU,CAAC,MAAAlH,EAAc,MAAOkpO,EAAY,SAAUhiO,EAAU,UAAWtF,EAAO,WAAY,GACjG,CAEJ,EAEauD,EAAanF,IAA0B,CAClD,WAAS,OAAI,CACX,SAAU,CACZ,CAAC,EACD,QAAM,OAAI,CACR,mBAAoB,CAClB,MAAO,MACT,EAEA,kBAAmB,CACjB,gBAAiB,CACf,aAAc,GAAGA,EAAM,MAAM,OAAO,OAAO,IAAIA,EAAM,MAAM,OAAO,OAAO,MAC3E,EACA,WAAY,CACV,aAAc,OAAOA,EAAM,MAAM,OAAO,OAAO,IAAIA,EAAM,MAAM,OAAO,OAAO,EAC/E,EACA,mBAAoB,CAClB,OAAQA,EAAM,QAAQ,CAAC,EACvB,SAAU,UACZ,EACA,aAAc,CACZ,OAAQA,EAAM,QAAQ,CAAC,EACvB,MAAOA,EAAM,QAAQ,CAAC,CACxB,CACF,CACF,CAAC,EACD,cAAY,OAAI,CACd,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,CACH,GAEA,EAAeipO,C,kHCpEHE,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAFEA,IAAAA,GAAA,IAqBL,MAAM9sL,UAAc,eAA4B,CAAhD,kCAKL,WAAe,CACb,MAAO,IACT,EAUA,oBAAkB+sL,GACR3hO,GAAuC,CAC7C,MAAM84C,KAAS,MAAS94C,EAAI,OAAO,MAAO2hO,CAAe,EACzD,KAAK,SAAU7nO,IACN,CAAE,GAAGA,EAAW,MAAOg/C,EAASA,EAAO,CAAC,EAAI,IAAK,EACzD,CACH,EAGF,kCAA+B,CAAC/3C,EAAgB6gO,IAAmD,CACjG,MAAMC,EAAoB,CAAE,GAAG9gO,CAAU,EACzC,OAAK6gO,GAGL,OAAO,KAAK,IAAoB,EAAE,QAASE,GAAc,KACnD,KAAmBA,EAAmCF,CAAgB,GAAK7gO,EAAU+gO,CAAS,KAChGD,EAAkBC,CAAS,EAAI,MAAO9hO,GAAuC,CAC3EA,EAAI,QAAQ,KACR,KAAmB8hO,EAAmCF,CAAgB,GACxE,MAAM,KAAK,eAAeA,EAAiBE,CAAS,CAAC,EAAE,MAAM,KAAM,CAAC9hO,CAAG,CAAC,EAEtEe,EAAU+gO,CAAS,GACrB/gO,EAAU+gO,CAAS,EAAE,MAAM,KAAM,CAAC9hO,EAAK,KAAK,MAAM,CAAC,CAEvD,EAEJ,CAAC,EACM6hO,CACT,EA5CA,MAAO,CAAP,KAAO,aAAe,CACpB,UAAW,EACb,EAMA,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MAAQ,UAA4B,OACxD,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,SAAW,SACzB,CAgCA,QAAS,CACP,KAAM,CAAE,iBAAAD,EAAkB,UAAAhnO,EAAW,iBAAAu4D,EAAkB,SAAAknB,EAAU,GAAGt5E,CAAU,EAAI,KAAK,MACjF,CAAE,MAAAD,CAAM,EAAI,KAAK,MACjBihO,EAAiB,IAAW,gBAAiB,CAAE,QAAS,KAAK,SAAU,EAAGnnO,CAAS,EACnFinO,EAAoB,KAAK,6BAA6B9gO,EAAW6gO,CAAgB,EAEvF,SACE,QAAC,OAAI,MAAO,CAAE,SAAU,CAAE,EACxB,oBAAC,SAAO,GAAGC,EAAmB,IAAKxnJ,EAAU,UAAW0nJ,CAAA,CAAgB,EACvEjhO,GAAS,CAACqyD,MAAoB,OAAC,QAAM,SAAAryD,CAAA,CAAM,GAC9C,CAEJ,CACF,C,uIC9EA,MAAMkhO,EAAwB,CAC5B,IAAI,OAAQ,CACV,SAAO,KAAE,qCAAsC,OAAO,CACxD,EACA,IAAI,KAAM,CACR,SAAO,KAAE,mCAAoC,KAAK,CACpD,EACA,IAAI,KAAM,CACR,SAAO,KAAE,mCAAoC,KAAK,CACpD,EACA,IAAI,SAAU,CACZ,SAAO,KAAE,uCAAwC,SAAS,CAC5D,CACF,EAEMC,EAA8E,CAClF,IAAI,OAAQ,CACV,SAAO,gBAAU,KAAE,qCAAsC,OAAO,CAAC,CACnE,EACA,IAAI,KAAM,CACR,SAAO,gBAAU,KAAE,mCAAoC,KAAK,CAAC,CAC/D,EACA,IAAI,KAAM,CACR,SAAO,gBAAU,KAAE,mCAAoC,KAAK,CAAC,CAC/D,EACA,IAAI,SAAU,CACZ,SAAO,gBAAU,KAAE,uCAAwC,SAAS,CAAC,CACvE,CACF,EAEO,SAASC,EAAwBhyO,EAA+C,CACrF,OAAO8xO,EAAsB9xO,CAAI,MAAK,cAAWA,CAAI,CACvD,CAEO,SAASiyO,EAA6BjyO,EAA+C,CAC1F,OAAO+xO,EAA2B/xO,CAAI,GAAKA,CAC7C,CAEO,SAASkyO,EAAkB10H,EAAkE,CAClG,GAAKA,EAEE,IAAIA,aAAkB,IAC3B,MAAO,QACF,GAAIA,aAAkB,IAC3B,MAAO,MACF,GAAIA,aAAkB,IAC3B,MAAO,UANP,OAAO,UAST,MAAO,SACT,C,uHChCO,MAAM3kE,EAAW,aACtB,CACE,CAAE,MAAA9uC,EAAO,YAAAkmC,EAAa,MAAA/vC,EAAO,UAAAiyO,EAAW,SAAAryO,EAAU,SAAAsN,EAAU,UAAA1C,EAAW,cAAA0nO,EAAe,QAAA5hO,EAAS,GAAGnB,CAAW,EAC7GvN,IACG,CACH,MAAMuwO,KAAiB,eACpBpiO,GAA2C,CACtCnQ,GACFA,EAASmQ,CAAC,CAEd,EACA,CAACnQ,CAAQ,CACX,EACMmK,KAAS,MAAWqoO,EAAmB9hO,CAAO,EAEpD,SACE,QAAC,SAAM,aAAW,MAAGvG,EAAO,QAASS,CAAS,EAC5C,qBAAC,OAAI,UAAWT,EAAO,gBACrB,oBAAC,SACC,KAAK,WACL,aAAW,MAAGA,EAAO,MAAOmoO,GAAiBnoO,EAAO,kBAAkB,EACtE,QAAS/J,EACT,SAAAkN,EACA,SAAUilO,EACV,MAAOF,EACN,GAAG9iO,EACJ,IAAMiwE,GAAY,CACZA,GAAW8yJ,IACb9yJ,EAAQ,cAAgB,IAItBx9E,IACE,OAAOA,GAAQ,WACjBA,EAAIw9E,CAAO,EAEXx9E,EAAI,QAAUw9E,EAGpB,EACF,KACA,OAAC,QAAK,UAAWr1E,EAAO,UAAW,GACrC,EACCF,MAAS,OAAC,QAAK,UAAWE,EAAO,MAAQ,SAAAF,CAAA,CAAM,EAC/CkmC,MAAe,OAAC,QAAK,UAAWhmC,EAAO,YAAc,SAAAgmC,CAAA,CAAY,GACpE,CAEJ,CACF,EAEaqiM,EAAoB,CAACjqO,EAAsBmI,EAAU,KAAU,CAC1E,MAAM+hO,KAAc,KAAelqO,CAAK,EAClCmqO,EAAe,EACfC,EAAe,EAEfC,EAAkBjxO,GACf+O,EAAUnI,EAAM,OAAO,MAAM,OAAS5G,EAG/C,MAAO,CACL,WAAS,OAAI,CACX,QAAS,cACT,WAAY,SACZ,UAAW4G,EAAM,QAAQoqO,CAAY,EAErC,aAAc,cACd,SAAU,WACV,cAAe,QACjB,CAAC,EACD,SAAO,OAAI,CACT,SAAU,WACV,OAAQ,EACR,IAAK,EACL,KAAM,EACN,MAAO,kBACP,OAAQ,OACR,QAAS,EAET,4CAA0C,kBAAepqO,CAAK,EAE9D,wCAAsC,uBAAoBA,CAAK,EAO/D,mBAAoB,CAClB,WAAYA,EAAM,OAAO,QAAQ,KACjC,OAAQ,aAAaqqO,EAAerqO,EAAM,OAAO,QAAQ,IAAI,CAAC,GAE9D,UAAW,CACT,WAAYA,EAAM,OAAO,QAAQ,KACnC,EAEA,UAAW,CACT,QAAS,KACT,SAAU,WACV,OAAQ,EACR,KAAMA,EAAM,QAAQ,EAAG,EACvB,IAAK,EACL,MAAOA,EAAM,QAAQ,GAAI,EACzB,OAAQA,EAAM,QAAQ,GAAG,EACzB,OAAQ,SAASA,EAAM,OAAO,QAAQ,YAAY,GAClD,YAAa,cACb,UAAW,eACb,CACF,EAEA,oBAAqB,CACnB,gBAAiBA,EAAM,OAAO,OAAO,mBACrC,OAAQ,cACR,OAAQ,aAAaqqO,EAAerqO,EAAM,OAAO,OAAO,kBAAkB,CAAC,GAE3E,UAAW,CACT,gBAAiBA,EAAM,OAAO,OAAO,kBACvC,EAEA,UAAW,CACT,YAAaA,EAAM,OAAO,OAAO,YACnC,CACF,CACF,CAAC,EAED,sBAAoB,OAAI,CACtB,yBAA0B,CACxB,OAAQ,aAAaqqO,EAAerqO,EAAM,OAAO,QAAQ,IAAI,CAAC,GAC9D,WAAYA,EAAM,OAAO,QAAQ,KAEjC,UAAW,CACT,WAAYA,EAAM,OAAO,QAAQ,KACnC,EAEA,UAAW,CACT,QAAS,KACT,SAAU,WACV,OAAQ,EACR,KAAM,MACN,MAAO,MACP,IAAK,oBACL,OAAQ,MACR,OAAQ,eAAeA,EAAM,OAAO,QAAQ,YAAY,GACxD,gBAAiBA,EAAM,OAAO,QAAQ,aACtC,MAAO,OACP,UAAW,MACb,CACF,EACA,0CAA2C,CACzC,gBAAiBA,EAAM,OAAO,OAAO,mBACrC,OAAQ,aAAaqqO,EAAerqO,EAAM,OAAO,MAAM,WAAW,CAAC,GAEnE,UAAW,CACT,YAAaA,EAAM,OAAO,OAAO,YACnC,CACF,CACF,CAAC,EAED,mBAAiB,OAAI,CACnB,QAAS,OACT,WAAY,SACZ,gBAAiB,EACjB,aAAc,CAChB,CAAC,EACD,aAAW,OAAI,CACb,SAAU,WACV,OAAQ,EACR,QAAS,eACT,MAAOA,EAAM,QAAQmqO,CAAY,EACjC,OAAQnqO,EAAM,QAAQmqO,CAAY,EAClC,aAAcnqO,EAAM,MAAM,OAAO,GACjC,WAAYA,EAAM,WAAW,MAAM,WACnC,OAAQ,aAAaqqO,EAAerqO,EAAM,WAAW,MAAM,WAAW,CAAC,GAEvE,UAAW,CACT,OAAQ,UACR,YAAaqqO,EAAerqO,EAAM,WAAW,MAAM,WAAW,CAChE,CACF,CAAC,EACD,SAAO,MACLkqO,EAAY,SACZ,OAAI,CACF,gBAAiB,EACjB,aAAc,EACd,SAAU,WACV,OAAQ,EACR,OAAQ,UACR,SAAU,cACV,WAAYlqO,EAAM,WAAW,UAAU,WACvC,aAAc,CAChB,CAAC,CACH,EACA,eAAa,MACXkqO,EAAY,eACZ,OAAI,CACF,gBAAiB,EACjB,aAAc,EACd,WAAYlqO,EAAM,WAAW,UAAU,WACvC,UAAW,EAEX,OAAQ,CACV,CAAC,CACH,CACF,CACF,EAEAwwC,EAAS,YAAc,U,oHClOlB85L,GAAAA,IACHA,EAAAA,EAAA,2BACAA,EAAAA,EAAA,uBAFGA,IAAAA,GAAA,IA8BE,MAAMC,EAAS,CAAC,CACrB,SAAAtpO,EACA,YAAA1B,EAAc,EACd,QAAA6pC,EAAU,KACV,QAAAohM,EAAU,aACV,MAAA3zJ,EAAQ,SACR,KAAA6T,EAAO,GACP,MAAAtrF,EAAQ,OACR,OAAAC,EAAS,OACT,GAAGqH,CACL,IAAmB,CACjB,MAAM9E,KAAS,MAAWuD,EAAW5F,EAAa6pC,EAASohM,EAAS3zJ,EAAO6T,CAAI,EAE/E,SACE,OAAC,OAAI,UAAW9oF,EAAO,OAAQ,MAAO,CAAE,MAAAxC,EAAO,OAAAC,CAAO,EAAI,GAAGqH,EAC1D,oBAAe,QAAQzF,CAAQ,EAC7B,OAAO,OAAO,EACd,IAAI,CAACsqB,EAAO9hB,OAET,OAAC,OAAI,UAAW7H,EAAO,aACpB,SAAA2pB,CAAA,EADuC9hB,CAE1C,CAEH,EACL,CAEJ,EAKaghO,EAAkB,CAAC,CAC9B,SAAAxpO,EACA,QAAAmoC,EACA,QAAAohM,EACA,MAAA3zJ,EAAQ,SACR,KAAA6T,EACA,MAAAtrF,EACA,OAAAC,CACF,OACE,OAACkrO,EAAA,CACC,QAAAnhM,EACA,QAAAohM,EACA,YAAa,EACb,MAAA3zJ,EACA,MAAAz3E,EACA,OAAAC,EACA,KAAAqrF,EAEC,SAAAzpF,CAAA,CACH,EAMWypO,EAAgB,CAAC,CAC5B,SAAAzpO,EACA,QAAAmoC,EACA,QAAAohM,EACA,MAAA3zJ,EACA,MAAAz3E,EACA,OAAAC,CACF,OACE,OAACkrO,EAAA,CACC,QAAAnhM,EACA,QAAAohM,EACA,YAAa,EACb,MAAA3zJ,EACA,MAAAz3E,EACA,OAAAC,EAEC,SAAA4B,CAAA,CACH,EAGW0pO,EAAY,CAAC,CAAE,SAAA1pO,EAAU,QAAA2pO,EAAS,OAAAryE,EAAQ,KAAAlU,EAAM,OAAAC,CAAO,IAA+C,CACjH,MAAM1iJ,KAAS,MAAWipO,EAAoBD,EAASryE,CAAM,EAE7D,SACE,OAAC,OACC,aAAW,MACT32J,EAAO,QACPyiJ,IAAS,WAAa,OAAI,CAAE,SAAUA,CAAK,CAAC,EAC5CC,IAAW,WAAa,OAAI,CAAE,WAAYA,CAAO,CAAC,CACpD,EAEC,SAAArjJ,CAAA,CACH,CAEJ,EAEMkE,EAAY,CAChBnF,EACAT,EACA6pC,EACAohM,EACA3zJ,EACA6T,IACG,CACH,MAAMogJ,EAAe1hM,IAAY,OAASppC,EAAM,QAAQ+qO,EAAgB3hM,CAAO,CAAC,EAAI,EAG9E4hM,EACHzrO,IAAgB,GAA0B,CAACmrF,GAASnrF,IAAgB,EAAuB,EAAI,IAAIurO,CAAY,GAE5GppO,EAAQnC,IAAgB,EAAuB,iBAAmB,mBAExE,MAAO,CACL,UAAQ,OAAI,CACV,MAAAmC,EACA,QAAS,OACT,cAAenC,IAAgB,EAAuB,SAAW,MACjE,SAAUmrF,EAAO,OAAS,SAC1B,eAAgB8/I,EAChB,WAAY3zJ,EACZ,OAAQ,OACR,SAAU,OAEV,aAAcm0J,CAChB,CAAC,EACD,gBAAc,OAAI,CAChB,MAAO,wBACP,aAAczrO,IAAgB,GAA0B,CAACmrF,EAAO,EAAIogJ,EACpE,YAAavrO,IAAgB,EAAyBurO,EAAe,EACrE,QAAS,OACT,WAAYj0J,EAEZ,eAAgB,CACd,aAAct3E,IAAgB,EAAuB,EAAI,OACzD,YAAaA,IAAgB,EAAyB,EAAI,MAC5D,CACF,CAAC,CACH,CACF,EAEMwrO,EAA2C,CAC/C,KAAM,EACN,GAAI,GACJ,GAAI,EACJ,GAAI,EACJ,GAAI,CACN,EAEMF,EAAqB,CAAC7qO,EAAsB4qO,EAAmBryE,IAAqB,CACxF,MAAM0yE,EAAeL,GAAWA,IAAY,QAAU5qO,EAAM,QAAQ+qO,EAAgBH,CAAO,CAAC,GAAM,EAC5FM,EAAc3yE,GAAUA,IAAW,QAAUv4J,EAAM,QAAQ+qO,EAAgBxyE,CAAM,CAAC,GAAM,EAC9F,MAAO,CACL,WAAS,OAAI,CACX,MAAO,YACP,OAAQ2yE,EACR,QAASD,CACX,CAAC,CACH,CACF,C,uGCrLO,MAAME,EAAY,CACvB,gBAAc,KAA2B,eAAe,EACxD,gBAAc,KAA2B,eAAe,EACxD,cAAY,KAAgC,aAAa,EACzD,aAAW,KAA2B,YAAY,CACpD,EAEaC,EAAc,CACzB,WAAS,KAAa,SAAS,EAC/B,qBAAmB,KAAa,qBAAqB,EACrD,gBAAc,KAAsC,eAAe,EACnE,aAAW,KAA6B,YAAY,EACpD,sBAAoB,KAA0B,sBAAsB,EACpE,oBAAkB,KAAsC,oBAAoB,EAC5E,uBAAqB,KAAa,gBAAgB,EAClD,oBAAkB,KAAqC,oBAAoB,EAC3E,eAAa,KAAa,mBAAmB,EAC7C,iBAAe,KAAa,gBAAgB,EAC5C,UAAQ,KAAkB,QAAQ,CACpC,EAWO,MAAMC,UAA8B,GAAkD,CAC3F,MAAO,CAAP,KAAO,KAAO,cAChB,CAGO,MAAMC,UAAmC,GAAa,CAAtD,kCAEL,aAA4B,CAAE,MAAO,CAAC,CAAE,EADxC,MAAO,CAAP,KAAO,KAAO,oBAEhB,C,yDC1CA,IAAIxrM,EAEG,SAASyrM,EAAuBC,EAAgC,CAErE,GAAI1rM,EACF,MAAM,IAAI,MAAM,yFAAyF,EAE3GA,EAAY0rM,CACd,CAEO,SAASC,EAA8Cv3B,EAAsD,CAClH,GAAI,CAACp0K,EACH,MAAM,IAAI,MAAM,0FAA0F,EAE5G,OAAOA,EAAUo0K,CAAW,CAC9B,C,oHCNO,MAAMw3B,EAAiE,CAC5E,GAAI,IAAkB,MACtB,KAAM,sBACN,YAAa,0DACb,eAAgB,CAAC,EACjB,aAAe1vO,GACNA,EAAK,OAAS,EACjB,IAAkC,WAClC,IAAkC,cAExC,wBAA0BA,GACjB,wFAAwFA,EAAK,MAAM,gBAE5G,SAAWX,GAAaE,GACtBA,EAAO,QACL,KAAKqnE,GAAe,CAClB,GAAI,CAAC,MAAM,QAAQA,CAAU,GAAKA,EAAW,QAAU,EACrD,OAAOA,EAGT,MAAM5mE,EAAO4mE,EAAW,OAAQxmE,GAAUA,EAAM,OAAO,OAAS,CAAC,EAEjE,GAAIJ,EAAK,SAAW,EAClB,MAAO,CAAC4mE,EAAW,CAAC,CAAC,EAGvB,MAAM+oK,EAAa,IAAI,IACjBC,EAA2D,CAAC,EAC5DC,EAA6B,CAAC,EAC9BpxO,EAAY,IAAI,IAAiB,CACrC,MAAO,GAAG,IAAkB,KAAK,IAAIuB,EAAK,IAAKI,GAAUA,EAAM,KAAK,EAAE,KAAK,GAAG,CAAC,GAC/E,OAAQ,CAAC,CACX,CAAC,EAED,QAAS6iF,EAAa,EAAGA,EAAajjF,EAAK,OAAQijF,IAAc,CAC/D,MAAM7iF,EAAQJ,EAAKijF,CAAU,EAE7B,QAAS1c,EAAa,EAAGA,EAAanmE,EAAM,OAAO,OAAQmmE,IAAc,CACvE,MAAM7nE,EAAQ0B,EAAM,OAAOmmE,CAAU,EAEhCopK,EAAW,IAAIjxO,EAAM,IAAI,IAC5BD,EAAU,SAASqxO,EAAmBpxO,CAAK,CAAC,EAC5CixO,EAAW,IAAIjxO,EAAM,IAAI,GAG3BkxO,EAAiBlxO,EAAM,IAAI,EAAIkxO,EAAiBlxO,EAAM,IAAI,GAAK,CAAC,EAChEkxO,EAAiBlxO,EAAM,IAAI,EAAEukF,CAAU,EAAI1c,EAEvCvmE,EAAK,OAAS,IAAMijF,GAIpB8sJ,EAAuBH,EAAkBlxO,EAAOsB,CAAI,GACtD6vO,EAAiB,KAAKnxO,EAAM,IAAI,CAEpC,CACF,CAEA,GAAImxO,EAAiB,SAAW,EAC9B,OAAOjpK,EAGT,MAAMopK,EAA8D,CAAC,EAC/DC,EAAgC,CAAC,EACjCC,EAAaC,EAAiBnwO,EAAM4vO,EAAkBC,CAAgB,EACtEO,EAAcC,EAAkBrwO,EAAM2vO,EAAYC,CAAgB,EAExE,QAAS3sJ,EAAa,EAAGA,EAAajjF,EAAK,OAAQijF,IAAc,CAC/D,MAAM7iF,EAAQJ,EAAKijF,CAAU,EAE7B,QAAS1O,EAAa,EAAGA,EAAan0E,EAAM,OAAQm0E,IAAc,CAChE,MAAMhxD,EAAM2sN,EAAWjtJ,EAAY1O,CAAU,EACvC14E,EAAQu0O,EAAYntJ,EAAY1O,CAAU,EAEhD,GAAI,CAAC,MAAM,QAAQy7J,EAAYzsN,CAAG,CAAC,EAAG,CACpCysN,EAAYzsN,CAAG,EAAI,CAAC1nB,CAAK,EACzBo0O,EAAc,KAAKK,EAAc/sN,EAAKysN,CAAW,CAAC,EAClD,QACF,CAEA,IAAIO,EAAiB,GAErBP,EAAYzsN,CAAG,EAAIysN,EAAYzsN,CAAG,EAAE,IAAKgf,GAClCiuM,EAAWjuM,EAAU1mC,CAAK,GAG/B00O,EAAiB,GACV,CAAE,GAAGhuM,EAAU,GAAG1mC,CAAM,GAHtB0mC,CAIV,EAEIguM,IACHP,EAAYzsN,CAAG,EAAE,KAAK1nB,CAAK,EAC3Bo0O,EAAc,KAAKK,EAAc/sN,EAAKysN,CAAW,CAAC,EAEtD,CACF,CAEA,UAAWS,KAAWR,EAAe,CACnC,MAAMp0O,EAAQm0O,EAAYS,EAAQ,GAAG,EAAEA,EAAQ,KAAK,EAEhD50O,GACF4C,EAAU,IAAI5C,CAAK,CAEvB,CAEA,MAAO,CAAC4C,CAAS,CACnB,CAAC,CACH,CACJ,EAEMqxO,EAAsBpxO,IACnB,CACL,MAAG,QAAKA,EAAO,CAAC,SAAU,QAAS,SAAU,QAAQ,CAAC,EACtD,OAAQ,CAAC,EACT,OAAQ,CACN,MAAG,QAAKA,EAAM,OAAQ,aAAa,CACrC,CACF,GAGIyxO,EAAmB,CACvBnwO,EACA0wO,EACAC,IACG,CACH,MAAMC,EAAeD,EAAc,OAAO,CAACljO,EAAiCmkD,IACnE,OAAO,KAAK8+K,EAAmB9+K,CAAS,CAAC,EAAE,OAAO,CAACnkD,EAAiCw1E,KACzFx1E,EAAMw1E,CAAU,EAAIx1E,EAAMw1E,CAAU,GAAK,CAAC,EAC1Cx1E,EAAMw1E,CAAU,EAAE,KAAKytJ,EAAmB9+K,CAAS,EAAEqxB,CAAU,CAAC,EACzDx1E,GACNA,CAAK,EACP,CAAC,CAAC,EAEL,MAAO,CAACw1E,EAAoB1O,IACnBq8J,EAAa3tJ,CAAU,EAAE,OAAO,CAAC1/D,EAAagjD,IAC5ChjD,EAAMvjB,EAAKijF,CAAU,EAAE,OAAO1c,CAAU,EAAE,OAAOgO,CAAU,EACjE,EAAE,CAET,EAEM87J,EAAoB,CACxBrwO,EACA6wO,EACAjB,IAEO,CAAC3sJ,EAAoB1O,IAAuB,CACjD,MAAM14E,EAAiC,CAAC,EAClC8zO,EAAa,MAAM,KAAKkB,CAAW,EAEzC,UAAWj/K,KAAa+9K,EAAY,CAClC,MAAMmB,EAAyBlB,EAAiBh+K,CAAS,EACzD,GAAI,CAACk/K,EACH,SAGF,MAAMvqK,EAAauqK,EAAuB7tJ,CAAU,EACpD,GAAI,OAAO1c,GAAe,SACxB,SAGF,MAAMnmE,EAAQJ,EAAKijF,CAAU,EAC7B,GAAI,CAAC7iF,GAAS,CAACA,EAAM,OACnB,SAGF,MAAM1B,EAAQ0B,EAAM,OAAOmmE,CAAU,EACjC,CAAC7nE,GAAS,CAACA,EAAM,SAIrB7C,EAAM+1D,CAAS,EAAIlzD,EAAM,OAAO61E,CAAU,EAC5C,CAEA,OAAO14E,CACT,EAGI20O,EAAa,CAACjuM,EAAmC1mC,IAA4C,CACjG,IAAIk1O,EAAW,GAEf,UAAWjnM,KAAQjuC,EACjB,GAAI,SAAO0mC,EAASuH,CAAI,EAAM,MAI1BvH,EAASuH,CAAI,IAAM,MAInBvH,EAASuH,CAAI,IAAMjuC,EAAMiuC,CAAI,EAAG,CAClCinM,EAAW,GACX,KACF,CAGF,OAAOA,CACT,EAEMhB,EAAyB,CAC7BH,EACAlxO,EACAsB,IAEO,OAAO,KAAK4vO,EAAiBlxO,EAAM,IAAI,CAAC,EAAE,SAAWsB,EAAK,OAG7DswO,EAAgB,CAAC/sN,EAAaysN,KAC3B,CACL,IAAAzsN,EACA,MAAOysN,EAAYzsN,CAAG,EAAE,OAAS,CACnC,E,4GCvMK,MAAMytN,EAAgB,aAA0C,CAACnsO,EAAOpH,IAAQ,CACrF,KAAM,CACJ,aAAAwI,EAAe,GACf,SAAAm3E,EAAW,GACX,SAAA6zJ,EACA,eAAAp9G,EACA,SAAAp4H,EACA,UAAAylJ,EACA,OAAAp6I,EACA,MAAOoqO,EACP,YAAA9qO,EACA,GAAGoG,CACL,EAAI3H,EACE,CAACssO,EAAYC,CAAa,EAAIC,EAAmBH,EAAiBz1O,CAAQ,EAI1E29D,EAAa+3K,GAAclrO,EAG3BkK,KAAa,WAAQ,IAAM,CAC/B,MAAMoE,EAAe6kD,GAAchzD,GAAe,GAC5CkrO,EAAc,OAAO/8N,GAAiB,SAAWA,EAAeA,EAAa,SAAS,EAE5F,OAAOg9N,EAAYD,EAAal0J,EAAU6zJ,CAAQ,CACpD,EAAG,CAAC7qO,EAAagzD,EAAYgkB,EAAU6zJ,CAAQ,CAAC,EAEhD,SACE,OAAC,IAAqB,SAArB,CAA8B,MAAO,GACpC,mBAAC,KACC,cAAY,iBACX,GAAGzkO,EACJ,YAAApG,EACA,IAAA3I,EACA,MAAO27D,EAAW,SAAS,EAC3B,SAAWzwD,GAAU,CACflN,GACFA,EAASkN,CAAK,EAGhByoO,EAAczoO,EAAM,cAAc,KAAK,CACzC,EACA,MAAOwH,EACP,OAASxH,GAAU,CACb7B,EACFA,EAAO6B,CAAK,EACHkrH,GACTA,EAAelrH,CAAK,CAExB,EACA,UAAYA,GAAU,CAChBu4I,EACFA,EAAUv4I,CAAK,EACNA,EAAM,MAAQ,SAAWkrH,GAClCA,EAAelrH,CAAK,CAExB,EACF,EACF,CAEJ,CAAC,EAED,SAAS4oO,EAAY11O,EAAeuhF,EAAkB6zJ,EAAsC,CAC1F,GAAI,CAACp1O,EACH,OAAOuhF,EAIT,MAAMo0J,KAAY,MAAY31O,EAAM,SAAS,EAAG,EAAE,EAAE,MAAQ,EADzC,EAGnB,OAAIuhF,GAAYo0J,EAAYp0J,EACnBA,EAGL6zJ,GAAYO,EAAYP,EACnBA,EAGFO,CACT,CAEAR,EAAc,YAAc,gBAO5B,SAASK,EAAsBH,EAAoBz1O,EAA4D,CAC7G,MAAMg2O,EAAkBP,IAAoB,QAAaz1O,IAAa,OAChEi2O,KAAkB,UAAOD,CAAe,EAExCE,KAA6B,UAAO,EAAK,EAC3CF,IAAoBC,EAAgB,SAAW,CAACC,EAA2B,UAC7E,QAAQ,KACN,uJACF,EACAA,EAA2B,QAAU,IAGvC,KAAM,CAACC,EAAeC,CAAgB,EAAI,WAAeX,CAAe,KAExE,aAAU,IAAM,CACTQ,EAAgB,SACnBG,EAAiBX,CAAe,CAEpC,EAAG,CAACA,CAAe,CAAC,EAEpB,MAAMpkO,KAAe,eAAaK,GAAgB,CAC3CukO,EAAgB,SACnBG,EAAiB1kO,CAAQ,CAE7B,EAAG,CAAC,CAAC,EAIL,MAAO,CAFOukO,EAAgB,QAAUR,EAAkBU,EAE3C9kO,CAAY,CAC7B,C,gWC5HA,SAASglO,EAAsDjmN,GAAoD,CACjH,MAAMkmN,MAAa,WAAQ,IAClB,IAAIr4B,EAAA,EAA8B,CACvC,SAAO,KAAE,6CAA8C,aAAa,EACpE,GAAI,cACJ,cAAe,EACjB,CAAC,EAAE,QACD,IAAI/zH,EAAA,EAA0B,CAC5B,SAAO,KAAE,kDAAmD,OAAO,EACnE,GAAI,oBACJ,OAAQ,OAAM,OAACqsJ,EAAA,CAAc,IAAAnmN,EAAA,CAAU,CACzC,CAAC,CACH,EACC,CAACA,EAAG,CAAC,EAEFomN,MAAmB,WAAQ,IAAM,CACrC,MAAM3/M,MAAY,MAAqBzG,EAAG,EAE1C,OAAO,IAAI6tL,EAAA,EAA8B,CACvC,SAAO,KAAE,oDAAqD,gBAAgB,EAC9E,GAAI,qBACJ,cAAe,EACjB,CAAC,EAAE,QACD,IAAI/zH,EAAA,EAA0B,CAC5B,SAAO,KAAE,6DAA8D,UAAU,EACjF,GAAI,8BACJ,OAAQ,OAAM,OAACusJ,EAAA,CAAgB,IAAArmN,GAAU,UAAAyG,EAAA,CAAsB,CACjE,CAAC,CACH,CACF,EAAG,CAACzG,EAAG,CAAC,EAER,MAAO,CAACkmN,GAAYE,EAAgB,CACtC,CAEO,MAAME,CAAmF,CAGvF,YAAoBC,GAAoB,CAApB,UAAAA,GAF3B,KAAgB,2BAA6B,GAgB7C,KAAO,mBAAqBN,EAAmB,KAAK,KAAM,KAAK,IAAI,CAdnB,CAEzC,wBAAuD,CAC5D,MAAO,CACL,YAAU,KAAE,mCAAoC,KAAK,EACrD,aAAc,KAAW,YAAY,KAAK,KAAM,KAAK,KAAK,MAAM,MAAO,OAAW,MAAM,EACxF,KAAM,SACR,CACF,CAEO,oBAAqB,CAC1B,OAAO,KAAK,KAAK,MAAM,QACzB,CAIO,UAAW,CAChB,MAAM/7K,MAAgB,MAAoB,KAAK,IAAI,EAE/CA,cAAyB3mC,EAAA,GAC3B2mC,GAAc,UAAU,KAAK,IAAI,CAErC,CACF,CAEA,SAASi8K,EAAc,CAAE,IAAAnmN,GAAK,GAAA3C,EAAG,EAAuC,CACtE,KAAM,CAAE,MAAA5lB,EAAM,EAAIuoB,GAAI,SAAS,EAE/B,SAAO,OAACw0B,EAAA,EAAK,CAAC,GAAAn3B,GAAQ,MAAO5lB,GAAO,SAAWsI,IAAMigB,GAAI,SAAS,CAAE,MAAOjgB,GAAE,cAAc,KAAM,CAAC,EAAG,CACvG,CAEA,SAASsmO,EAAgB,CAAE,IAAArmN,GAAK,UAAAyG,GAAW,GAAApJ,EAAG,EAAkE,CAC9G,KAAM,CAAE,WAAAmpN,GAAY,SAAAptO,EAAS,EAAI4mB,GAAI,SAAS,EAC9C,IAAIo+H,GAAiBooF,IAAY,KAAMtwO,IAAMA,cAAayvB,EAAA,CAAmB,EAM7E,MAAMunM,MALY,WAChB,IAAM9zN,GAAS,OAAmB,CAACiU,GAAKqW,KAAU,CAAC,GAAGrW,GAAK,GAAG,KAAW,gBAAgBqW,GAAO,IAAQ,CAAC,EAAG,CAAC,CAAC,EAC9G,CAACtqB,EAAQ,CACX,EAE6C,KAAM6qB,IAAa,CAC9D,MAAMi6H,MAAS,MAAkBj6H,EAAQ,EACzC,OACEi6H,IAAQ,MAAM,YAAY,MAAQ,KACjCA,IAAQ,MAAM,YAAY,MAAQ,MACjCA,IAAQ,MAAM,QAAQ,KAAM91H,IAAUA,GAAM,YAAY,MAAQ,GAAsB,CAE5F,CAAC,EAED,SACE,oBACE,oBAAC01H,EAAA,GACC,GAAAzgI,GACA,aAAcoJ,GACd,OAAQ23H,IAAgB,MAAM,aAC9B,SAAW3H,IAAW,CAChBA,IACF2H,IAAgB,eAAe,EAC/BA,GAAiB,IAAIz4H,EAAA,EAAoB,CAAE,aAAc8wH,EAAO,CAAC,EACjEz2H,GAAI,SAAS,CAAE,WAAY,CAAC,GAAIA,GAAI,MAAM,YAAc,CAAC,EAAIo+H,EAAc,CAAE,CAAC,GAE9EA,IAAgB,eAAe,CAEnC,EACF,EACC8uE,MACC,QAAC1wL,EAAA,GACC,cAAa75B,EAAA,GAAU,MAAM,UAAU,KAAK,SAAS,cAAc,eACnE,SAAS,UACT,MAAM,GACN,WAAY,EACZ,cAAe,EAEf,oBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,oEAAoE,wCACrD,CAAE,uBAAsB,GAAC,EAAE,+GAEzD,EACF,KACA,OAACu0C,EAAA,GACC,SAAQ,GACR,KACE,iHAGF,mBAAC,KAAK,CAAC,QAAQ,kEAAkE,sBAAU,EAC7F,GACF,EACE,QACN,CAEJ,C,eC7DO,SAASuvL,EAA2Bz8M,GAA8C,CACvF,MAAO,+BAAgCA,EACzC,C,0BC9EA,SAAS,GAAwF,CAC/F,MAAMj2B,GAAW,KAAK,SAChB2yO,MAA0B,SAAM,EAChCC,MAAkB,SAAM,EAE9B,SAAO,WAAQ,IAAM,CACnB,MAAMhnM,GAAW,IAAIkuK,EAAA,EAA8B,CACjD,MAAO,GACP,GAAI64B,EACN,CAAC,EAED,OAAA/mM,GAAS,QACP,IAAIm6C,EAAA,EAA0B,CAC5B,MAAO,GACP,GAAI6sJ,GACJ,UAAW,GACX,OAAQ,OAEJ,OAAC/gM,EAAA,EAAG,CAAC,cAAe,EAClB,mBAACD,EAAA,EAAK,CACJ,oBAACA,EAAA,EAAK,CACJ,qBAAC,QAAK,cAAE5xC,GAAS,MAAM,MAAK,KAC5B,OAAC,QAAK,aAAC,KACP,OAAC,QAAM,SAAAA,GAAS,aAAa,EAAE,GACjC,EACF,EACF,CAGN,CAAC,CACH,EAEO,CAAC4rC,EAAQ,CAClB,EAAG,CAAC+mM,GAAyBC,GAAiB5yO,EAAQ,CAAC,CACzD,CAEO,MAAM6yO,CAAiE,CAGrE,YAAmB7yO,GAA8B,CAA9B,cAAAA,GAF1B,KAAgB,2BAA6B,GAa7C,KAAO,mBAAqB,EAAmB,KAAK,IAAI,CAXC,CAElD,wBAAuD,CAC5D,MAAO,CACL,YAAU,KAAE,8CAA+C,gBAAgB,EAC3E,KAAM,aACN,aAAc,QAAK,KAAK,SAAS,MAAM,IAAI,MAAM,KAAK,SAAS,aAAc,CAAC,GAC9E,SAAU,EACZ,CACF,CAGF,C,8GCrDO,SAAS8yO,EAAoC9yO,GAA6D,CAC/G,MAAM+yO,MAAe,SAAM,EACrBC,MAAe,SAAM,EACrBC,MAAmB,SAAM,EACzBC,MAAgB,SAAM,EAE5B,SAAO,WAAQ,IACN,IAAIp5B,EAAA,EAA8B,CACvC,SAAO,KAAE,0DAA2D,mBAAmB,EACvF,GAAI,6BACJ,cAAe,EACjB,CAAC,EACE,QACC,IAAI/zH,EAAA,EAA0B,CAC5B,SAAO,KAAE,6DAA8D,aAAa,EACpF,GAAIgtJ,GACJ,OAAS9nM,OAAe,OAACkoM,EAAA,CAAiB,GAAIloM,GAAW,MAAM,GAAI,SAAAjrC,EAAA,CAAoB,CACzF,CAAC,CACH,EACC,QACC,IAAI+lF,EAAA,EAA0B,CAC5B,SAAO,KAAE,6DAA8D,mBAAmB,EAC1F,GAAIitJ,GACJ,eAAa,KACX,yEACA,mDACF,EACA,OAAS/nM,OAAe,OAACmoM,GAAA,CAAiB,GAAInoM,GAAW,MAAM,GAAI,SAAAjrC,EAAA,CAAoB,CACzF,CAAC,CACH,EACC,QACC,IAAI+lF,EAAA,EAA0B,CAC5B,SAAO,KAAE,kEAAmE,kBAAkB,EAC9F,GAAIktJ,GACJ,eAAa,KACX,8EACA,kDACF,EACA,UAAW,IACFjzO,GAAS,SAAS,EAAE,YAAc,GAE3C,OAASirC,OAAe,OAACooM,GAAA,CAAoB,GAAIpoM,GAAW,MAAM,GAAI,SAAAjrC,EAAA,CAAoB,CAC5F,CAAC,CACH,EACC,QACC,IAAI+lF,EAAA,EAA0B,CAC5B,SAAO,KAAE,qEAAsE,qBAAqB,EACpG,GAAImtJ,GACJ,eAAa,KACX,iFACA,+BACF,EACA,OAASjoM,OAAe,OAACqoM,EAAA,CAAkB,GAAIroM,GAAW,MAAM,GAAI,SAAAjrC,EAAA,CAAoB,CAC1F,CAAC,CACH,EACD,CAACkzO,GAAeD,GAAkBD,GAAcD,GAAc/yO,EAAQ,CAAC,CAC5E,CAOA,SAASmzO,EAAiB,CAAE,SAAAnzO,GAAU,GAAAspB,EAAG,EAAe,CACtD,KAAM,CAAE,QAAAviB,EAAQ,EAAI/G,GAAS,SAAS,EAEtC,SACE,OAAC2J,EAAA,EAAM,CAAC,GAAA2f,GAAQ,MAAOviB,GAAS,SAAW8E,IAAQ7L,GAAS,SAAS,CAAE,QAAS6L,GAAI,cAAc,OAAQ,CAAC,EAAG,CAElH,CAEA,SAASunO,GAAiB,CAAE,SAAApzO,GAAU,GAAAspB,EAAG,EAAe,CACtD,KAAM,CAAE,WAAAggM,EAAW,EAAItpN,GAAS,SAAS,EAEzC,SACE,OAAC2J,EAAA,GACC,GAAA2f,GACA,MAAOggM,GACP,SAAWz9M,IAAQ7L,GAAS,SAAS,CAAE,WAAY6L,GAAI,cAAc,OAAQ,CAAC,EAChF,CAEJ,CAEA,SAASynO,EAAkB,CAAE,SAAAtzO,GAAU,GAAAspB,EAAG,EAAe,CACvD,KAAM,CAAE,iBAAA5hB,EAAiB,EAAI1H,GAAS,SAAS,EAE/C,SACE,OAAC2J,EAAA,GACC,GAAA2f,GACA,MAAO5hB,GACP,SAAWmE,IAAQ7L,GAAS,SAAS,CAAE,iBAAkB6L,GAAI,cAAc,OAAQ,CAAC,EACtF,CAEJ,CAEA,SAASwnO,GAAoB,CAAE,SAAArzO,GAAU,GAAAspB,EAAG,EAAe,CACzD,KAAM,CAAE,SAAAkgM,EAAS,EAAIxpN,GAAS,SAAS,EACjCnC,MAAM,UAAyB,IAAI,EAEnC4tG,MAAc,eACjB5/F,IAA4C,CAC3C,MAAM0B,GAAW1B,GAAI,cAAc,MAC/B0B,KAAavN,GAAS,MAAM,WAIhCA,GAAS,SAAS,CAAE,SAAUuN,EAAS,CAAC,EACpCvN,GAAS,YAAY,GACvBA,GAAS,aAAa,IAAI,KAA+BA,EAAQ,EAAG,EAAI,EAE5E,EACA,CAACA,EAAQ,CACX,EAEA,SAAO,OAACygD,EAAA,EAAK,CAAC,GAAAn3B,GAAQ,IAAAzrB,GAAU,aAAc2rN,IAAY,GAAI,OAAQ/9G,EAAA,CAAa,CACrF,CCtGA,SAAS,GAAkD4B,GAAwD,CACjH,MAAMrtG,GAAW,KAAK,SAChBuzO,MAA4B,SAAM,EAClCC,MAAiB,SAAM,EACvBhqO,MAAU,SAAM,EAChBiqO,MAAgB,SAAM,EACtBC,MAAiB,SAAM,EAE7B,GAAI1zO,cAAoB,KACtB,OAAO2zO,EAAwB3zO,EAAQ,EAsCzC,MAAMstG,GAAa,IAnCE,WAAQ,IACpB,IAAIwsG,EAAA,EAA8B,CAAE,MAAO,GAAI,GAAIy5B,EAA0B,CAAC,EAClF,QACC,IAAIxtJ,EAAA,EAA0B,CAC5B,MAAO,GACP,GAAIytJ,GACJ,UAAW,GACX,OAAQ,OAAM,OAACI,EAAA,CAAkB,SAAA5zO,GAAoB,aAAAqtG,EAAA,CAA4B,CACnF,CAAC,CACH,EACC,QACC,IAAItnB,EAAA,EAA0B,CAC5B,SAAO,KAAE,qCAAsC,OAAO,EACtD,GAAIv8E,GACJ,eAAa,KAAE,iDAAkD,uBAAuB,EACxF,OAAQ,OAAM,OAACqqO,EAAA,CAAmB,SAAA7zO,EAAA,CAAoB,CACxD,CAAC,CACH,EACC,QACC,IAAI+lF,EAAA,EAA0B,CAC5B,SAAO,KAAE,2CAA4C,aAAa,EAClE,GAAI0tJ,GACJ,OAAQ,OAAM,OAACK,EAAA,CAA4B,SAAA9zO,EAAA,CAAoB,CACjE,CAAC,CACH,EACC,QACC,IAAI+lF,EAAA,EAA0B,CAC5B,MAAO,GACP,GAAI2tJ,GACJ,UAAW,GACX,OAAQ,OAAM,OAACK,GAAA,CAAkB,SAAA/zO,EAAA,CAAoB,CACvD,CAAC,CACH,EACD,CAACuzO,GAA2BC,GAAgBhqO,GAASiqO,GAAeC,GAAgB1zO,GAAUqtG,EAAY,CAAC,CAE9E,EAC1B2mI,GAAeC,GAAwBj0O,EAAQ,EACrD,OAAAstG,GAAW,KAAK0mI,EAAY,EAExBh0O,cAAoB,MACtBstG,GAAW,KAAKwlI,EAAoC9yO,EAAQ,CAAC,EAGxDstG,EACT,CAEO,MAAM4mI,CAA+E,CAInF,YAAmBl0O,GAAyB,CAAzB,cAAAA,GAH1B,KAAgB,2BAA6B,GAC7C,KAAgB,SAAW,WAwB3B,KAAO,mBAAqB,GAAmB,KAAK,IAAI,CAtBJ,CAE7C,wBAAuD,CAC5D,GAAI,KAAK,oBAAoB,KAC3B,MAAO,CACL,YAAU,KAAE,8CAA+C,gBAAgB,EAC3E,KAAM,aACN,aAAc,KAAK,SAAS,MAAM,KAClC,SAAU,EACZ,EAGF,MAAMm0O,MAAoB,MAA8B,KAAK,SAAS,MAAM,IAAI,EAEhF,MAAO,CACL,YAAU,KAAE,wCAAyC,oBAAqB,CAAE,KAAMA,GAAkB,IAAK,CAAC,EAC1G,KAAM,aACN,aAAc,KAAK,SAAS,MAAM,KAClC,SAAU,KAAK,SAAS,MAAM,OAAS,KAAa,YACtD,CACF,CAIO,UAAW,CAChB,MAAMjkH,GAAM,KAAK,SAAS,OACtBA,cAAe,MACjBkkH,GAAqB,eAAe,CAClC,OAAQlkH,GACR,cAAe,KAAK,QACtB,CAAC,CAEL,CAEO,aAAa79G,GAAc,CAChC,KAAK,SAAS,SAAS,CAAE,KAAAA,EAAK,CAAC,EAE/B,MAAMyrB,MAAS,MAAqB,KAAK,SAAUzrB,EAAI,EACvD,GAAIyrB,GAAO,aACT,OAAOA,EAIX,CACF,CAOA,SAAS81M,EAAkB,CAAE,SAAA5zO,GAAU,aAAAqtG,EAAa,EAAuD,CACzG,KAAM,CAAE,KAAAh7F,EAAK,EAAIrS,GAAS,SAAS,EAC7BnC,MAAM,MAA0B,CAAE,UAAWwvG,EAAa,CAAC,EAC3D,CAACkN,GAAWC,EAAY,KAAI,YAAiB,EAC7ClxF,MAAK,SAAM,EAEXztB,GAAYmQ,IAAmC,CACnD,MAAM8xB,MAAS,MAAqB99B,GAAUgM,GAAE,cAAc,KAAK,EAC/D8xB,GAAO,eAAiBy8E,IAC1BC,GAAa18E,GAAO,YAAY,EAGlC99B,GAAS,SAAS,CAAE,KAAMgM,GAAE,cAAc,KAAM,CAAC,CACnD,EAEMs9L,MAAU,UAAOj3L,EAAI,EAE3B,SACE,OAAC/E,EAAA,EAAK,CAAC,SAAO,KAAE,oCAAqC,MAAM,EAAG,QAAS,CAAC,CAACitG,GAAW,MAAOA,GACzF,mBAAC95D,EAAA,GACC,GAAAn3B,GACA,IAAAzrB,GACA,MAAOwU,GACP,QAAS,IAAM,CACbi3L,GAAQ,QAAUj3L,EACpB,EACA,SAAAxW,GACA,OAASmQ,IAAM,CAEb,MAAMqoO,GADiB/qC,GAAQ,UAAYj3L,IACNiiO,GAAmBtoO,EAAC,EAEzD,GAAIuuG,GAAW,CACbC,GAAa,MAAS,EACtBx6G,GAAS,SAAS,CAAE,KAAMspM,GAAQ,OAAQ,CAAC,EAC3C,MACF,CAEI+qC,IAIJD,GAAqB,mBAAmB,CACtC,OAAQp0O,GACR,SAAUspM,GAAQ,QAClB,SAAUj3L,EACZ,CAAC,CACH,EACA,cAAazD,EAAA,GAAU,WAAW,YAAY,gBAAgB,kBAC9D,SAAQ,GACV,EACF,CAEJ,CAEA,SAASilO,EAAmB,CAAE,SAAA7zO,GAAU,GAAAspB,EAAG,EAAuB,CAChE,KAAM,CAAE,MAAAxjB,EAAM,EAAI9F,GAAS,SAAS,EAC9Bu0O,MAAW,UAAOzuO,IAAS,EAAE,EAEnC,SACE,OAAC26C,EAAA,GACC,GAAAn3B,GACA,MAAOxjB,GACP,QAAS,IAAM,CACbyuO,GAAS,QAAUzuO,IAAS,EAC9B,EACA,SAAWkG,IAAMhM,GAAS,SAAS,CAAE,MAAOgM,GAAE,cAAc,KAAM,CAAC,EACnE,OAASA,IAAM,CACUuoO,GAAS,UAAYvoO,GAAE,cAAc,OACvBsoO,GAAmBtoO,EAAC,GAMzDooO,GAAqB,oBAAoB,CACvC,OAAQp0O,GACR,SAAUu0O,GAAS,QACnB,SAAUvoO,GAAE,cAAc,KAC5B,CAAC,CACH,EACA,cAAa4C,EAAA,GAAU,WAAW,YAAY,gBAAgB,mBAChE,CAEJ,CAEA,SAASklO,EAA4B,CAAE,SAAA9zO,GAAU,GAAAspB,EAAG,EAAuB,CACzE,KAAM,CAAE,YAAA0iB,EAAY,EAAIhsC,GAAS,SAAS,EACpCw0O,MAAiB,UAAOxoM,IAAe,EAAE,EAE/C,SACE,OAACp+B,EAAA,GACC,GAAA0b,GACA,MAAO0iB,IAAe,GACtB,eAAa,KAAE,uDAAwD,kBAAkB,EACzF,QAAS,IAAM,CACbwoM,GAAe,QAAUxoM,IAAe,EAC1C,EACA,SAAWhgC,IAAMhM,GAAS,SAAS,CAAE,YAAagM,GAAE,cAAc,KAAM,CAAC,EACzE,OAASA,IAAM,CACUwoO,GAAe,UAAYxoO,GAAE,cAAc,OAC7BsoO,GAAmBtoO,EAAC,GAMzDooO,GAAqB,0BAA0B,CAC7C,OAAQp0O,GACR,SAAUw0O,GAAe,QACzB,SAAUxoO,GAAE,cAAc,KAC5B,CAAC,CACH,EACF,CAEJ,CAEA,SAAS+nO,GAAkB,CAAE,SAAA/zO,EAAS,EAAuB,CAC3D,KAAM,CAAE,KAAAlE,GAAO,KAAa,QAAS,EAAIkE,GAAS,SAAS,EAErDnE,GAAY+J,IAAyB,CACzCwuO,GAAqB,wBAAwB,CAC3C,OAAQp0O,GACR,SAAUlE,GACV,SAAU8J,EACZ,CAAC,CACH,EAEA,SAAO,OAAChK,EAAA,EAAkB,CAAC,KAAAE,GAAY,KAAMkE,GAAS,MAAM,KAAM,SAAAnE,EAAA,CAAoB,CACxF,CAEA,SAASo4O,GAAwBj0O,GAAyB,CACxD,MAAMy0O,MAAgB,SAAM,EAC5B,SAAO,WAAQ,IAAM,CACnB,MAAMN,MAAoB,MAA8Bn0O,GAAS,MAAM,IAAI,EACrE00O,MAAe,KAAE,6CAA8C,mBAAoB,CACvF,KAAMP,GAAkB,IAC1B,CAAC,EAEKvoM,GAAW,IAAIkuK,EAAA,EAA8B,CACjD,MAAO46B,GACP,GAAI,gBACJ,cAAe,EACjB,CAAC,EAED,OAAIP,GAAkB,WACJA,GAAkB,WAAWn0O,EAAQ,EAC7C,QAAS4F,IAAWgmC,GAAS,QAAQhmC,EAAM,CAAC,EAEpDgmC,GAAS,QACP,IAAIm6C,EAAA,EAA0B,CAC5B,MAAO,GACP,GAAI0uJ,GACJ,UAAW,GACX,OAAQ,OAAM,OAACE,GAAA,CAA0B,SAAA30O,EAAA,CAAoB,CAC/D,CAAC,CACH,EAGK4rC,EACT,EAAG,CAAC6oM,GAAez0O,EAAQ,CAAC,CAC9B,CAEA,SAAS20O,GAA0B,CAAE,SAAA30O,EAAS,EAAuB,CACnE,MAAM40O,GAAsB,IAAM,CAChC,MAAM1kH,GAAMlwH,GAAS,OACrB,GAAI,EAAEkwH,cAAe,MACnB,OAGF,MAAMnS,GAAgBmS,GAAI,MAAM,UAAU,QAAQlwH,EAAQ,EAC1D,KAAgB,QAAQ,CAAE,SAAU,YAAa,UAAW+9G,EAAc,CAAC,CAC7E,EAEA,SACE,OAAClsE,EAAA,EAAG,CAAC,QAAS,OAAQ,UAAW,SAAU,cAAe,EACxD,mBAAC5mC,EAAA,IACC,WAAS,KACP,mDACA,gDACF,EACA,QAAS2pO,GACT,KAAK,KACL,UAAS,GAET,mBAAC,KAAK,CAAC,QAAQ,2CAA2C,gCAAoB,EAChF,EACF,CAEJ,CAEA,SAASjB,EAAwB3zO,GAA+D,CAC9F,MAAM60O,MAAiC,SAAM,EACvCjC,MAAkB,SAAM,EAC9B,SAAO,WAAQ,IAAM,CACnB,MAAMhnM,GAAW,IAAIkuK,EAAA,EAA8B,CACjD,MAAO,GACP,GAAI+6B,EACN,CAAC,EAED,OAAAjpM,GAAS,QACP,IAAIm6C,EAAA,EAA0B,CAC5B,MAAO,GACP,GAAI6sJ,GACJ,UAAW,GACX,OAAQ,OAEJ,OAAC/gM,EAAA,EAAG,CAAC,cAAe,EAClB,mBAACD,EAAA,EAAK,CACJ,oBAACA,EAAA,EAAK,CACJ,qBAAC,QAAK,cAAE5xC,GAAS,MAAM,MAAK,KAC5B,OAAC,QAAK,aAAC,KACP,OAAC,QAAM,SAAAA,GAAS,aAAa,EAAE,GACjC,EACF,EACF,CAGN,CAAC,CACH,EAEO,CAAC4rC,EAAQ,CAClB,EAAG,CAACgnM,GAAiBiC,GAAgC70O,EAAQ,CAAC,CAChE,C,oDClVA,SAAS,GAAqDkwH,GAAwD,CACpH,MAAM4kH,MAAiB,SAAM,EAY7B,MAAO,IAXS,WAAQ,IACf,IAAIh7B,EAAA,EAA8B,CAAE,MAAO,GAAI,GAAI,WAAY,CAAC,EAAE,QACvE,IAAI/zH,EAAA,EAA0B,CAC5B,MAAO,GACP,GAAI+uJ,GACJ,UAAW,GACX,OAAQ,OAAM,OAACC,GAAA,CAAa,IAAA7kH,EAAA,CAAU,CACxC,CAAC,CACH,EACC,CAACA,GAAK4kH,EAAc,CAAC,CAET,CACjB,CAEO,MAAME,EAA+D,CAInE,YAAoB9kH,GAAuB,CAAvB,SAAAA,GAH3B,KAAgB,2BAA6B,GAC7C,KAAgB,SAAW,WAgB3B,KAAO,mBAAqB,GAAmB,KAAK,KAAM,KAAK,GAAG,CAdf,CAE5C,wBAAuD,CAC5D,MAAO,CACL,YAAU,KAAE,4CAA6C,WAAW,EACpE,KAAM,IACN,gBAAc,KAAE,4CAA6C,WAAW,CAC1E,CACF,CAEO,oBAAqB,CAC1B,OAAO,KAAK,IAAI,MAAM,SACxB,CAGF,CAEO,SAAS6kH,GAAa,CAAE,IAAA7kH,EAAI,EAA8B,CAC/D,KAAM,CAAE,UAAAxtD,EAAU,EAAIwtD,GAAI,SAAS,EAC7BlqH,MAAS,OAAWuD,EAAS,EAC7B0rO,GAAS/kH,GAAI,kBAAkB/oF,EAAA,GAE/B+tM,MAAiB,eACpBl1O,IAA4B,CAC3B,KAAM,CAAE,SAAA8rG,EAAS,KAAI,MAAqBokB,EAAG,EAAE,MAC/CpkB,GAAS,aAAa9rG,GAAUA,GAAS,MAAM,GAAI,CACrD,EACA,CAACkwH,EAAG,CACN,EAEMilH,MAAgB,eAAY,IAAM,IACtC,QAAoB,MAAqBjlH,EAAG,CAAC,EAC7C,KAAsB,yBAAyB,CAAE,OAAQ,WAAY,CAAC,CACxE,EAAG,CAACA,EAAG,CAAC,EAER,SACE,QAACt+E,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC5B,UAAA8wB,GAAU,IAAK1iE,OAGd,QAAC,OAAI,UAAWgG,GAAO,aAAwC,QAAS,IAAMkvO,GAAel1O,EAAQ,EACnG,qBAAC8xC,GAAA,EAAI,CAAC,cAAE9xC,GAAS,MAAM,MAAK,KAC5B,OAAC4xC,EAAA,EAAK,CAAC,UAAU,MAAM,IAAK,EAAG,WAAW,SACxC,mBAAC3mC,EAAA,GAAM,CAAC,QAAQ,UAAU,KAAK,KAAK,KAAK,UACvC,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,kBAAM,EACvE,EACF,IANwCjL,GAAS,MAAM,IAOzD,CACD,EACAi1O,OACC,OAACpjM,EAAA,EAAG,CAAC,cAAe,EAAG,QAAS,OAC9B,mBAAC5mC,EAAA,IACC,UAAS,GACT,KAAK,OACL,KAAK,KACL,QAAQ,YACR,QAASkqO,GACT,cAAavmO,EAAA,GAAU,WAAW,YAAY,gBAAgB,kBAE9D,mBAAC,KAAK,CAAC,QAAQ,6CAA6C,wBAAY,EAC1E,EACF,GAEJ,CAEJ,CAEA,SAASrF,GAAUnF,GAAsB,CACvC,MAAO,CACL,gBAAc,QAAI,CAChB,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,IAAKA,GAAM,QAAQ,CAAC,EACpB,QAASA,GAAM,QAAQ,EAAG,EAC1B,aAAcA,GAAM,MAAM,OAAO,QACjC,OAAQ,UACR,CAACA,GAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,WAAYA,GAAM,YAAY,OAAO,CAAC,OAAO,EAAG,CAC9C,SAAUA,GAAM,YAAY,SAAS,KACvC,CAAC,CACH,EACA,eAAgB,CACd,aAAcA,GAAM,QAAQ,CAAC,CAC/B,EACA,OAAQ,CACN,WAAY,QACd,EACA,UAAW,CACT,MAAOA,GAAM,OAAO,KAAK,KACzB,OAAQ,CACN,WAAY,SACd,CACF,CACF,CAAC,CACH,CACF,C,4BCjIO,MAAMgxO,GAAqB,CAAC,CAAE,UAAA1iN,EAAU,OAE3C,OAACznB,EAAA,IACC,KAAK,KACL,QAAQ,YACR,WAAS,KAAE,yDAA0D,0BAA0B,EAC/F,QAAM,OAAC9F,GAAA,EAAI,CAAC,KAAK,iBAAiB,KAAK,KAAK,KAAK,SAAU,GAC3D,QAAS,IAAMutB,GAAU,mBAAmB,EAC9C,ECEJ,SAAS,GAEPA,GACiC,CAEjC,KAAM,CAAE,KAAAyW,EAAK,EAAIzW,GAAU,SAAS,EAC9B2iN,MAAwB,SAAM,EAC9BC,MAA8B,SAAM,EAEpCC,MAAmB,WAAQ,IACD,IAAIz7B,EAAA,EAA8B,CAAE,MAAO,GAAI,GAAI,mBAAoB,CAAC,EACnG,QACC,IAAI/zH,EAAA,EAA0B,CAC5B,SAAO,KAAE,iCAAkC,OAAO,EAClD,GAAIsvJ,GACJ,OAAQ,OAAM,OAACG,GAAA,CAAoB,GAAIH,GAAuB,UAAA3iN,EAAA,CAAsB,CACtF,CAAC,CACH,EACC,QACC,IAAIqzD,EAAA,EAA0B,CAC5B,SAAO,KAAE,gCAAiC,aAAa,EACvD,GAAIuvJ,GACJ,OAAQ,OAAM,OAACG,GAAA,CAA0B,GAAIH,GAA6B,UAAA5iN,EAAA,CAAsB,CAClG,CAAC,CACH,EAGD,CAACA,GAAW4iN,GAA6BD,EAAqB,CAAC,EAE5Dtc,MAAiB,MAAkB5vL,EAAI,EAE7C,MAAO,CAACosM,GAAkB,GAAGxc,EAAc,CAC7C,CAEO,MAAM2c,EAA6D,CAGjE,YAAoBhjN,GAA2B,CAA3B,eAAAA,GAF3B,KAAgB,2BAA6B,GAiB7C,KAAO,mBAAqB,GAAmB,KAAK,KAAM,KAAK,SAAS,CAfjB,CAEhD,wBAAuD,CAC5D,MAAO,CACL,YAAU,KAAE,yCAA0C,WAAW,EACjE,KAAM,OACN,gBAAc,KAAE,yCAA0C,WAAW,CACvE,CACF,CAEO,oBAAoC,CACzC,KAAM,CAAE,WAAAijN,GAAY,KAAAxsM,EAAK,EAAI,KAAK,UAAU,MAC5C,MAAO,CAACwsM,GAAa,GAAGxsM,GAAK,mBAAmB,CAAC,CACnD,CAIO,eAA2B,CAChC,SACE,oBACE,oBAACisM,GAAkB,CAAC,UAAW,KAAK,UAAW,KAC/C,OAACnqO,EAAA,IACC,QAAQ,YACR,KAAK,KACL,QAAS,IAAM,KAAK,UAAU,eAAe,EAC7C,WAAS,KAAE,+CAAgD,oBAAoB,EAC/E,KAAK,gBACL,cAAc,QAEd,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,oBAAQ,EAC3D,GACF,CAEJ,CACF,CAEO,SAASuqO,GAAoB,CAAE,UAAA9iN,GAAW,GAAApJ,EAAG,EAA+C,CACjG,KAAM,CAAE,MAAA5lB,EAAM,EAAIgvB,GAAU,SAAS,EAG/BkjN,MAAkB,UAAO,EAAE,EAEjC,SACE,OAACn1L,EAAA,GACC,GAAAn3B,GACA,MAAO5lB,GACP,SAAWsI,IAAM,CACf0mB,GAAU,SAAS,CAAE,MAAO1mB,GAAE,cAAc,KAAM,CAAC,CACrD,EACA,QAAUA,IAAM,CACd4pO,GAAgB,QAAU5pO,GAAE,cAAc,KAC5C,EACA,OAASA,IAAM,CACU4pO,GAAgB,UAAY5pO,GAAE,cAAc,OAC9BsoO,GAAmBtoO,EAAC,GAKzDooO,GAAqB,YAAY,CAC/B,OAAQ1hN,GACR,SAAUkjN,GAAgB,QAC1B,SAAU5pO,GAAE,cAAc,KAC5B,CAAC,CACH,EACF,CAEJ,CAEO,SAASypO,GAA0B,CAAE,UAAA/iN,GAAW,GAAApJ,EAAG,EAA+C,CACvG,KAAM,CAAE,YAAA0iB,EAAY,EAAItZ,GAAU,SAAS,EAGrCkjN,MAAkB,UAAO,EAAE,EAEjC,SACE,OAAChoO,EAAA,GACC,GAAA0b,GACA,MAAO0iB,GACP,SAAWhgC,IAAM0mB,GAAU,SAAS,CAAE,YAAa1mB,GAAE,cAAc,KAAM,CAAC,EAC1E,QAAUA,IAAM,CACd4pO,GAAgB,QAAU5pO,GAAE,cAAc,KAC5C,EACA,OAASA,IAAM,CACgB4pO,GAAgB,UAAY5pO,GAAE,cAAc,OAC9BsoO,GAAmBtoO,EAAC,GAK/DooO,GAAqB,kBAAkB,CACrC,OAAQ1hN,GACR,SAAUkjN,GAAgB,QAC1B,SAAU5pO,GAAE,cAAc,KAC5B,CAAC,CACH,EACF,CAEJ,C,kGC3IO,MAAM6pO,EAA0E,CAIrF,YAAoBC,GAAoC,CAApC,aAAAA,GAHpB,KAAgB,2BAA6B,GAI3C,KAAK,OAAM,MAAO,CACpB,CAEO,wBAAuD,CAC5D,MAAO,CAAE,YAAU,KAAE,sCAAuC,QAAQ,EAAG,KAAM,SAAU,aAAc,EAAG,CAC1G,CAEO,oBAAsD,CAM3D,MAAO,CALQ,IAAIh8B,EAAA,EAA8B,CAC/C,MAAO,GACP,GAAI,EACN,CAAC,CAEa,CAChB,CAEO,iBAAkB,CACvB,MAAU,QACR,IAAI,MAAsB,CACxB,SAAO,KAAE,+CAAgD,iBAAiB,EAC1E,QAAM,KACJ,2DACA,4EACF,EACA,UAAW,IAAM,KAAK,SAAS,CACjC,CAAC,CACH,CACF,CAEO,UAAW,CAChB,KAAK,QAAQ,QAASx6M,IAAU,CAC9BA,GAAM,SAAS,CACjB,CAAC,CACH,CACF,CCvBA,SAAS,GAAkD+tG,GAAwD,CACjH,MAAM/tG,GAAQ,KAAK,MACb6uE,GAAgB7uE,GAAM,OACtBy2O,MAAS,SAAM,EACfC,MAAU,SAAM,EAChBvC,MAAgB,SAAM,EACtBwC,MAAe,SAAM,EAErBC,MAAe,WAAQ,IACpB,IAAIp8B,EAAA,EAA8B,CAAE,MAAO,GAAI,GAAI,eAAgB,CAAC,EACxE,QACC,IAAI/zH,EAAA,EAA0B,CAC5B,MAAO,GACP,GAAIgwJ,GACJ,OAAQ,OAAM,OAACI,GAAA,CAAiB,MAAO,KAAK,MAAO,CACrD,CAAC,CACH,EACC,QACC,IAAIpwJ,EAAA,EAA0B,CAC5B,SAAO,KAAE,2CAA4C,OAAO,EAC5D,GAAIiwJ,GACJ,MAAO12O,GAAM,MAAM,MACnB,YAAa,EACb,OAAS2rC,OACP,OAAC,KAAoB,CAAC,GAAIA,GAAW,MAAM,GAAI,MAAA3rC,GAAc,aAAA+tG,EAAA,CAA4B,CAE7F,CAAC,CACH,EACC,QACC,IAAItnB,EAAA,EAA0B,CAC5B,SAAO,KAAE,0CAA2C,aAAa,EACjE,GAAI0tJ,GACJ,MAAOn0O,GAAM,MAAM,YACnB,OAAS2rC,OAAe,OAAC,MAAwB,CAAC,GAAIA,GAAW,MAAM,GAAI,MAAA3rC,EAAA,CAAc,CAC3F,CAAC,CACH,EACC,QACC,IAAIymF,EAAA,EAA0B,CAC5B,SAAO,KAAE,qDAAsD,wBAAwB,EACvF,GAAIkwJ,GACJ,OAAShrM,OAAe,OAAC,MAAqB,CAAC,GAAIA,GAAW,MAAM,GAAI,MAAA3rC,EAAA,CAAc,CACxF,CAAC,CACH,EACD,CAACy2O,GAAQC,GAAS12O,GAAOm0O,GAAewC,GAAc5oI,EAAY,CAAC,EAEhE+oI,MAAmB,WACvB,OAAO,MAAsBjoK,EAAa,GAAKA,GAAc,WAAaA,GAAc,WAAW,EAAI,CAAC,EACxG,CAACA,EAAa,CAChB,EAEA,MAAO,CAAC+nK,GAAc,GAAGE,EAAgB,CAC3C,CAEO,MAAMC,EAA+E,CAInF,YAAmB/2O,GAAiB,CAAjB,WAAAA,GAH1B,KAAgB,2BAA6B,GAC7C,KAAgB,SAAW,QAY3B,KAAO,mBAAqB,GAAmB,KAAK,IAAI,CAVZ,CAErC,wBAAuD,CAC5D,MAAO,CACL,YAAU,KAAE,qCAAsC,OAAO,EACzD,KAAM,aACN,aAAc,KAAW,YAAY,KAAK,MAAO,KAAK,MAAM,MAAM,MAAO,OAAW,MAAM,CAC5F,CACF,CAIO,UAAW,CACD8wB,GAAA,GAAoB,oBAAoB,KAAK,KAAK,EAC1D,cAAc,KAAK,KAAK,CACjC,CAEO,iBAAkB,CACvB,MAAU,QACR,IAAI,MAAsB,CACxB,SAAO,KAAE,yCAA0C,eAAe,EAClE,QAAM,KACJ,wCACA,sFACF,EACA,WAAS,KAAE,uCAAwC,QAAQ,EAC3D,UAAW,IAAM,CACf,KAAK,SAAS,CAChB,CACF,CAAC,CACH,CACF,CAEO,aAAc,CACJA,GAAA,GAAoB,oBAAoB,KAAK,KAAK,EAC1D,iBAAiB,KAAK,KAAK,CACpC,CAEO,QAAS,IACI,MAAqB,KAAK,KAAK,EACvC,UAAU,KAAK,KAAK,CAChC,CAEO,aAAa/d,GAAc,IAChC,OAAqB,KAAK,MAAOA,EAAI,CACvC,CAEO,2BAA2B+nC,GAAkC,CAClE,OAAO,IAAIy7L,GAAsCz7L,EAAK,CACxD,CAEO,gBAAiB,EAClB,KAAK,MAAM,kBAAkB9nB,GAAA,GAAgB,KAAK,MAAM,kBAAkB/B,GAAA,IAC5E,KAAK,MAAM,OAAO,eAAe,CAErC,CACF,CAIA,MAAM4lN,GAAmB,CAAC,CAAE,MAAA72O,EAAM,OAE9B,OAACsyC,EAAA,EAAK,CAAC,WAAW,SAAS,MAAM,OAC/B,mBAAC3mC,EAAA,IACC,QAAS,IAAM,CACb,KAAgB,QAAQ,CAAE,aAAW,MAAsB3L,EAAK,CAAE,CAAC,CACrE,EACA,KAAK,gBACL,UAAS,GACT,KAAK,KACL,WAAS,KAAE,uDAAwD,wCAAwC,EAE3G,mBAAC,KAAK,CAAC,QAAQ,uCAAuC,qBAAS,EACjE,EACF,ECnIG,SAASg3O,IAAuB,CACrC,SAAOC,EAAA,GAAkB,2CAA4C,EAAK,CAC5E,CAEO,SAASC,GAAsBC,GAAyE,CAC7G,GAAKA,GAIL,IAAI/D,EAA2B+D,EAAQ,EACrC,OAAOA,GAGT,GAAIA,cAAoB,KACtB,OAAO,IAAIJ,GAAwBI,EAAQ,EAG7C,GAAIA,cAAoB,KACtB,OAAO,IAAIlE,EAA4BkE,EAAQ,EAGjD,GAAIA,cAAoBtvM,EAAA,GACtB,OAAO,IAAIuuM,GAAyBe,EAAQ,EAG9C,GAAIA,cAAoB,KACtB,OAAO,IAAIzB,GAA2ByB,EAAQ,EAGhD,GAAIA,cAAoB,KACtB,OAAO,IAAI5D,EAA6B4D,EAAQ,EAGlD,MAAI,MAAgBA,EAAQ,EAC1B,OAAO,IAAIvC,EAAwBuC,EAAQ,EAG7C,GAAIA,cAAoB,KACtB,OAAO,IAAIC,EAAA,GAA2BD,EAAQ,EAIlD,CAEO,MAAME,WAAoC,GAAiC,CAChF,MAAO,CAAP,KAAO,KAAO,6BAChB,CAEO,MAAMC,WAAqC,GAAiC,CACjF,MAAO,CAAP,KAAO,KAAO,6BAChB,CAEO,MAAMC,WAAsC,GAAiC,CAClF,MAAO,CAAP,KAAO,KAAO,8BAChB,CAEO,MAAMC,WAAyC,GAAiC,CACrF,MAAO,CAAP,KAAO,KAAO,gCAChB,CAYO,MAAMC,WAAiC,GAAqD,CACjG,MAAO,CAAP,KAAO,KAAO,wBAChB,CAKO,MAAMC,WAAmC,GAA6C,CAC3F,MAAO,CAAP,KAAO,KAAO,0BAChB,CA6CO,MAAM5C,GAAuB,CAIlC,KAAKnvO,GAAwC,CAC3CA,GAAM,OAAO,aAAa,IAAI8xO,GAAyB9xO,EAAK,EAAG,EAAI,CACrE,EAIA,WAAWA,GAAoC,CAC7C,KAAM,CAAE,YAAAgyO,GAAa,OAAAt3O,GAAQ,QAAA2jH,GAAS,KAAAC,EAAK,EAAIt+G,GAEzCo2E,GAAUm7J,GAAsBS,EAAW,EACjD,GAAI,CAAC57J,GACH,MAAM,IAAI,MAAM,yCAAyC,EAG3D,MAAM67J,GAAW77J,GAAQ,uBAAuB,EAAE,SAElD+4J,GAAqB,KAAK,CACxB,eAAa,KAAE,6BAA8B,mBAAoB,CAAE,SAAA8C,EAAS,CAAC,EAC7E,YAAAD,GACA,OAAAt3O,GACA,QAAA2jH,GACA,KAAAC,EACF,CAAC,CACH,EAEA,cAAct+G,GAAuC,CACnD,KAAM,CAAE,cAAAkyO,GAAe,OAAAx3O,GAAQ,QAAA2jH,GAAS,KAAAC,EAAK,EAAIt+G,GAE3Co2E,GAAUm7J,GAAsBW,EAAa,EACnD,GAAI,CAAC97J,GACH,MAAM,IAAI,MAAM,2CAA2C,EAG7D,MAAM67J,GAAW77J,GAAQ,uBAAuB,EAAE,SAElD+4J,GAAqB,KAAK,CACxB,eAAa,KAAE,gCAAiC,sBAAuB,CAAE,SAAA8C,EAAS,CAAC,EACnF,cAAAC,GACA,OAAAx3O,GACA,QAAA2jH,GACA,KAAAC,EACF,CAAC,CACH,EAEA,YAAa6zH,GAAwC,CACnD,eAAa,KAAE,yBAA0B,wBAAwB,EACjE,KAAM,OACR,CAAC,EACD,kBAAmBA,GAA8C,CAC/D,eAAa,KAAE,+BAAgC,8BAA8B,EAC7E,KAAM,aACR,CAAC,EAED,YAAY,CAAE,OAAAz3O,GAAQ,YAAAs3O,EAAY,EAAiC,CACjE,MAAMI,GAAqB,CAAC,GAAI13O,GAAO,MAAM,WAAa,CAAC,CAAE,EAE7Dy0O,GAAqB,WAAW,CAC9B,OAAAz0O,GACA,YAAAs3O,GACA,SAAU,CACRt3O,GAAO,SAAS,CAAE,UAAW,CAAC,GAAG03O,GAAoBJ,EAAW,CAAE,CAAC,CACrE,EACA,MAAO,CACLt3O,GAAO,SAAS,CAAE,UAAW,CAAC,GAAG03O,EAAkB,CAAE,CAAC,CACxD,CACF,CAAC,CACH,EACA,eAAe,CAAE,OAAA13O,GAAQ,cAAAw3O,EAAc,EAAoC,CACzE,MAAMG,GAAoB,CAAC,GAAG33O,GAAO,MAAM,SAAS,EAEpDy0O,GAAqB,cAAc,CACjC,OAAAz0O,GACA,cAAAw3O,GACA,SAAU,CACRx3O,GAAO,SAAS,CAAE,UAAW23O,GAAkB,OAAQ91O,IAAMA,KAAM21O,EAAa,CAAE,CAAC,CACrF,EACA,MAAO,CACLx3O,GAAO,SAAS,CAAE,UAAW23O,EAAkB,CAAC,CAClD,CACF,CAAC,CACH,EACA,mBAAoBF,GAAsC,CACxD,eAAa,KAAE,iCAAkC,sBAAsB,EACvE,KAAM,MACR,CAAC,EACD,oBAAqBA,GAAuC,CAC1D,eAAa,KAAE,kCAAmC,uBAAuB,EACzE,KAAM,OACR,CAAC,EACD,0BAA2BA,GAA6C,CACtE,eAAa,KAAE,wCAAyC,6BAA6B,EACrF,KAAM,aACR,CAAC,EACD,wBAAyBA,GAAsC,CAC7D,eAAa,KAAE,iCAAkC,6BAA6B,EAC9E,KAAM,MACR,CAAC,EAED,YAAYnyO,GAAqC,CAC/C,KAAM,CAAE,YAAAsyO,GAAa,OAAA53O,GAAQ,QAAA2jH,GAAS,KAAAC,EAAK,EAAIt+G,GAEzCo2E,GAAUm7J,GAAsBe,EAAW,EACjD,GAAI,CAACl8J,GACH,MAAM,IAAI,MAAM,yCAAyC,EAG3D,MAAM67J,GAAW77J,GAAQ,uBAAuB,EAAE,SAElD+4J,GAAqB,KAAK,CACxB,eAAa,KAAE,8BAA+B,oBAAqB,CAAE,SAAA8C,EAAS,CAAC,EAC/E,YAAAK,GACA,OAAA53O,GACA,QAAA2jH,GACA,KAAAC,EACF,CAAC,CACH,CACF,EAaA,SAAS6zH,GAA4E,CACnF,YAAAprM,GACA,KAAA9B,EACF,EAAmC,CACjC,MAAO,CAAC,CAAE,OAAAvqC,GAAQ,SAAAuzB,GAAU,SAAA3lB,EAAS,IAAkC,CACrE6mO,GAAqB,KAAK,CACxB,YAAApoM,GACA,OAAArsC,GACA,QAAS,IAAM,CACbA,GAAO,SAAS,CAAE,CAACuqC,EAAI,EAAG38B,EAAS,CAAC,CACtC,EACA,KAAM,IAAM,CACV5N,GAAO,SAAS,CAAE,CAACuqC,EAAI,EAAGhX,EAAS,CAAC,CACtC,CACF,CAAC,CACH,CACF,CAEO,SAASohN,GAAmBtoO,GAAqB,CACtD,OAAOA,GAAE,gBAAkBA,GAAE,cAAc,KAAO,MAAgBA,GAAE,cAAc,KAAO,KAC3F,C,sFCvNA,IAAI83B,EAQG,MAAM0zM,EAAqBlsN,GAA6B,CAC7DwY,EAAoBxY,CACtB,EAQamsN,EAAoB,IAAsB3zM,C,gGClGhD,MAAM4zM,EAA0B,CACrCC,EACAC,EACAC,EACAC,IACG,CACH,MAAMC,EAAWC,EAAqBL,EAAaC,EAAcE,CAAgB,EAC3E9pH,EAAagqH,EAAqBJ,EAAcD,EAAaG,CAAgB,EAC7EG,EAAS,KAAK,IAAIF,EAAU/pH,CAAU,EAC5C,IAAIkqH,EAAS,KAAK,MAAMP,EAAcM,CAAM,EACxCE,EAAS,KAAK,KAAKL,EAAmBI,CAAM,EAGhDA,EAAS,KAAK,KAAKJ,EAAmBK,CAAM,EAE5C,MAAMC,EAAiBF,GAAUA,EAASC,EAASL,GAC7CO,EAAiBV,EAAcS,EAAiBP,EAAcA,EAAcO,EAElF,MAAO,CACL,MAAOT,EAAcO,EAASL,EAAcA,EAAcK,EAC1D,OAAQN,EAAeO,EAASN,EAAcA,EAAcM,EAC5D,eAAAE,EACA,OAAAH,EACA,OAAAC,CACF,CACF,EAEA,SAASH,EAAqBL,EAAqBC,EAAsBE,EAAkC,CACzG,MAAMzpL,EAAQ,KAAK,KAAK,KAAK,KAAMypL,EAAmBH,EAAeC,CAAY,CAAC,EAElF,OAAI,KAAK,MAAOvpL,EAAQupL,EAAgBD,CAAW,EAAItpL,EAAQypL,EACtDF,EAAe,KAAK,KAAMvpL,EAAQupL,EAAgBD,CAAW,EAG/DA,EAActpL,CACvB,CCaO,MAAMiqL,UAA+B,eAAiD,CAC3F,MAAO,CAAP,KAAO,aAA6B,CAClC,YAAa,CACf,EAEA,YAAYrzO,EAAgC,CAC1C,MAAMA,CAAK,EAEX,KAAK,MAAQ,CACX,OAAQA,EAAM,UAAU,CAC1B,CACF,CAEA,mBAAmB0I,EAAwB,CACzC,KAAM,CAAE,cAAA4qO,EAAe,OAAA54O,CAAO,EAAI,KAAK,OACnC44O,IAAkB5qO,EAAU,eAAiBhO,IAAWgO,EAAU,SACpE,KAAK,SAAS,CAAE,OAAQ,KAAK,MAAM,UAAU,CAAE,CAAC,CAEpD,CAEA,gBAAiC,CAC/B,KAAM,CAAE,YAAAhK,EAAa,MAAAH,EAAO,OAAAC,CAAO,EAAI,KAAK,MAE5C,OAAIE,IAAgB,KAAe,KAC7BH,EAAQC,EACH,KAAe,SAEf,KAAe,WAInBE,CACT,CAEA,YAAa,CACX,KAAM,CAAE,YAAA60O,EAAa,OAAA/0O,EAAQ,MAAAD,EAAO,YAAAq0O,EAAa,oBAAAY,EAAqB,YAAA90O,CAAY,EAAI,KAAK,MAErF,CAAE,OAAArB,CAAO,EAAI,KAAK,MAClBysB,EAAO2oN,EAAwBl0O,EAAOC,EAAQo0O,EAAav1O,EAAO,MAAM,EACxEo2O,EAAmBD,EAAsBA,EAAoBn2O,EAAQysB,EAAK,MAAOA,EAAK,MAAM,EAAK,CAAC,EAExG,IAAI4pN,EAAQ,EACRC,EAAQ,EACRx+L,EAAuB,CAAC,EAE5B,QAASr3C,EAAI,EAAGA,EAAIT,EAAO,OAAQS,IAAK,CACtC,MAAM9G,EAAQqG,EAAOS,CAAC,EAGhB81O,EAFYD,IAAU7pN,EAAK,OAAS,EAEZA,EAAK,eAAiBA,EAAK,MACnD+pN,EAAa/pN,EAAK,OAElB/Z,EAAO2jO,EAAQE,EAAYhB,EAAcc,EACzCloL,EAAOmoL,EAAQE,EAAajB,EAAce,EAE1C59L,EAA4B,CAChC,SAAU,WACV,KAAMhmC,EACN,IAAKy7C,EACL,MAAO,GAAGooL,CAAS,KACnB,OAAQ,GAAGC,CAAU,IACvB,EAEA1+L,EAAM,QACJ,OAAC,OAAY,MAAOY,EACjB,SAAAw9L,EAAY,CACX,MAAAv8O,EACA,MAAO48O,EACP,OAAQC,EACR,iBAAAJ,EACA,YAAA/0O,EACA,MAAOrB,EAAO,MAChB,CAAC,GAROS,CASV,CACF,EAEA41O,IAEIA,IAAU5pN,EAAK,SACjB4pN,EAAQ,EACRC,IAEJ,CAEA,SAAO,OAAC,OAAI,MAAO,CAAE,SAAU,WAAY,MAAO,OAAQ,OAAQ,MAAO,EAAI,SAAAx+L,CAAA,CAAM,CACrF,CAEA,QAAS,CACP,KAAM,CACJ,YAAAo+L,EACA,OAAA/0O,EACA,MAAAD,EACA,YAAAq0O,EACA,oBAAAY,EACA,SAAAM,EACA,YAAAp1O,EACA,aAAAq1O,EACA,YAAAC,EACA,aAAAC,CACF,EAAI,KAAK,MACH,CAAE,OAAA52O,CAAO,EAAI,KAAK,MAExB,GAAIy2O,GAAYp1O,IAAgB,KAAe,KAC7C,OAAO,KAAK,WAAW,EAGzB,MAAMq3C,EAAkC,CACtC,QAAS,MACX,EAEMm+L,EAAqC,CACzC,QAAS,OACT,SAAU,GAAGF,EAAc,OAAS,QAAQ,IAAIC,EAAe,OAAS,QAAQ,EAClF,EAEA,IAAIx5N,EAAYjc,EACZgc,EAAWjc,EAEf,MAAM41O,EAAsB,KAAK,eAAe,EAEhD,OAAQA,EAAqB,CAC3B,KAAK,KAAe,WAClB,MAAMC,GAAoB51O,EAASo0O,GAAev1O,EAAO,OAASu1O,EAClEsB,EAAc,cAAgB,SAC9BA,EAAc,OAAS,GAAG11O,CAAM,KAChC01O,EAAc,UAAY,SAC1BA,EAAc,eAAiB,OAC/Bn+L,EAAW,aAAe,GAAG68L,CAAW,KACxCp4N,EAAWjc,EACXkc,KAAY,SAAM25N,EAAkBH,GAAgB,EAAGF,GAAgBK,CAAgB,EACvF,MACF,KAAK,KAAe,SAClBF,EAAc,cAAgB,MAC9BA,EAAc,eAAiB,gBAC/BA,EAAc,UAAY,SAC1Bn+L,EAAW,YAAc,GAAG68L,CAAW,KACvCn4N,EAAYjc,EACZgc,EAAW,KAAK,IAAIjc,EAAQlB,EAAO,OAASu1O,EAAcA,EAAcv1O,EAAO,OAAQ22O,GAAe,CAAC,CAC3G,CAEAj+L,EAAW,MAAQ,GAAGv7B,CAAQ,KAC9Bu7B,EAAW,OAAS,GAAGt7B,CAAS,KAEhC,MAAMg5N,EAAmBD,EAAsBA,EAAoBn2O,EAAQmd,EAAUC,CAAS,EAAK,CAAC,EAEpG,SACE,OAAC,OAAI,MAAOy5N,EACT,SAAA72O,EAAO,IAAI,CAACrG,EAAO4R,OAEhB,OAAC,OAAgB,MAAOyrO,EAAsBt+L,EAAYntC,EAAOvL,EAAO,MAAM,EAC3E,SAAAk2O,EAAY,CACX,MAAAv8O,EACA,MAAOwjB,EACP,OAAQC,EACR,iBAAAg5N,EACA,YAAaU,EACb,MAAO92O,EAAO,MAChB,CAAC,GAROuL,CASV,CAEH,EACH,CAEJ,CACF,CAKA,SAASyrO,EAAsBt+L,EAA2BntC,EAAey9B,EAA+B,CACtG,OAAIz9B,IAAUy9B,EAAS,EACd,CACL,GAAG0P,EACH,YAAa,EACb,aAAc,CAChB,EAEKA,CACT,C,2ECrOO,MAAMuvD,CAAqD,CAChE,YAAoBgvI,EAAqB,CAArB,eAAAA,CAAsB,CAE1C,IAAW,IAAK,CACd,MAAMjwN,KAAK,MAAsB,KAAK,SAAS,EAE/C,OAAI,MAAMA,CAAE,GACV,QAAQ,MAAM,oEAAqE,KAAK,SAAS,EAC1F,GAGFA,CACT,CAEA,IAAW,aAAc,CACvB,OAAO,KAAK,UAAU,MAAM,WAC9B,CAEA,IAAW,MAAO,CAChB,OAAO,KAAK,UAAU,MAAM,QAC9B,CAEA,IAAW,OAAQ,CACjB,OAAO,KAAK,UAAU,MAAM,KAC9B,CAEA,IAAW,iBAAkB,CAC3B,OAAI,KAAK,UAAU,MAAM,iBAAiB,KACjC,KAAK,UAAU,MAAM,MAAM,MAAM,gBAGnC,CAAC,CACV,CAEA,IAAW,SAAU,CACnB,MAAMi9I,KAAc,MAAkB,KAAK,SAAS,EACpD,OAAKA,EAIEA,EAAY,MAAM,QAHhB,CAAC,CAIZ,CAEA,IAAW,YAA+C,CAExD,SADoB,MAAkB,KAAK,SAAS,GAChC,MAAM,UAC5B,CAEA,IAAW,SAAU,CACnB,OAAO,KAAK,UAAU,MAAM,OAC9B,CAEA,IAAW,aAAc,CACvB,OAAO,KAAK,UAAU,MAAM,WAC9B,CAEA,IAAW,eAAgB,CACzB,OAAO,KAAK,UAAU,MAAM,aAC9B,CACF,C,iDCrDO,IAAKsJ,GAAAA,IACVA,EAAA,SAAW,WAIXA,EAAA,WAAa,aALHA,IAAAA,GAAA,G,yDCIZ,IAAI3rI,EAEG,SAASs1M,EAAwB5J,EAAiC,CAEvE,GAAI1rM,EACF,MAAM,IAAI,MAAM,0FAA0F,EAE5GA,EAAY0rM,CACd,CAEO,SAAS6J,EACdh6O,EACkC,CAClC,GAAI,CAACykC,EACH,MAAM,IAAI,MAAM,2FAA2F,EAE7G,OAAOA,EAAUzkC,CAAO,CAC1B,C,iDCjCO,MAAMi6O,EAAmB,+C,yDCchC,IAAIx1M,EAEG,SAASy1M,EAAuB/J,EAAyC,CAE9E,GAAI1rM,EACF,MAAM,IAAI,MAAM,4FAA4F,EAE9GA,EAAY0rM,CACd,CAEO,SAASgK,EAAsBn6O,EAAiE,CACrG,GAAI,CAACykC,EACH,MAAM,IAAI,MAAM,sFAAsF,EAExG,OAAOA,EAAUzkC,CAAO,CAC1B,C,6ECaO,IAAKo6O,GAAAA,IACVA,EAAA,cAAgB,iBAChBA,EAAA,YAAc,eAFJA,IAAAA,GAAA,IA+FL,MAAMC,EAAmB/wO,GACvB,EAAQA,EAAM,QAAQ,KAQlBgxO,EAAsBhxO,GAC1B,EAAQA,EAAM,QAAQ,gBAQlBixO,EAAyBjxO,GAC7B,EAAQA,EAAM,QAAQ,Y,iDCxJxB,MAAMkxO,EAAgB,CAC3B,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,C,qICtDO,MAAMC,EAA4B,kCAC5BC,EAAgC,oDAYtC,SAASC,EAA6CztO,EAAsD,CACjH,MAAM4tN,KAAO,MAAa5tN,CAAK,EAC/B,OAAK4tN,EAIyE,CAC5E,CAAC2f,CAAyB,EAAGG,EAAwB9f,CAAI,EACzD,CAAC4f,CAA6B,KAAG,KAC/B,6DACA,0JACA,CACE,SACExtO,EAAM,KAAK,SAAS,QAAQ,IAAK2tO,GAAUA,EAAM,OAAO,EAAE,KAAK,IAAI,MACnE,KAAE,yDAA0D,oBAAoB,CACpF,CACF,CACF,EAGuB/f,CAAI,EAjBlB5tN,EAAM,KAAK,OAkBtB,CAKO,SAAS0tO,EAAwB9f,EAAkC,CASxE,MARyD,CACvD,CAAC2f,CAAyB,KAAG,KAC3B,2CACA,gEACF,CACF,EAGuB3f,CAAI,CAC7B,CAyBO,SAASggB,EAAoB5tO,EAAoD,CACtF,SAAO,MAAaA,CAAK,MAAK,OAAIA,EAAM,KAAM,MAAM,IAAM,aAAY,OAAIA,EAAM,KAAM,QAAQ,IAAM,SACtG,C,oHC/DO,MAAM6tO,UAAoB,eAAqB,CAA/C,kCAaL,gBAAa,IAAM,CACjB,KAAM,CAAE,MAAAC,EAAO,cAAAC,EAAe,YAAAC,EAAa,SAAA9+O,CAAS,EAAI,KAAK,MAEvD0d,EAAU,KAAc,KAAKkhO,CAAK,EACxC,GAAIlhO,EAAQ,SAAWkhO,EAAM,OAAQ,CACnC,MAAMpiB,EAAQ9+M,EAAQ,IAAK/X,GAAMA,EAAE,EAAE,EAC/Bo5O,KAAW,cAAWH,EAAOpiB,CAAK,EACxC,QAAQ,KAAK,gBAAiBuiB,EAAUH,CAAK,EAC7C5+O,EAAS0d,EAAQ,IAAK6hC,GAASA,EAAK,EAAE,CAAC,CACzC,CAGI,CAACs/L,GAAiBD,EAAM,OAAS,IACnC,QAAQ,KAAK,sBAAuBA,CAAK,EACzC5+O,EAAS,CAAC4+O,EAAM,CAAC,CAAC,CAAC,GAIjBE,GAAeF,EAAM,OAAS,GAChC5+O,EAAS,CAAC8+O,CAAW,CAAC,CAE1B,EAEA,uBAAqB3pO,GAAkC,CACrD,KAAM,CAAE,SAAAnV,CAAS,EAAI,KAAK,MACtB,MAAM,QAAQmV,CAAI,EACpBnV,EAASmV,EAAK,IAAKxP,GAAMA,EAAE,KAAK,CAAC,EAEjC3F,EAASmV,GAAQA,EAAK,MAAQ,CAACA,EAAK,KAAK,EAAI,CAAC,CAAC,CAEnD,EA1CA,MAAO,CAAP,KAAO,aAA+B,CACpC,cAAe,EACjB,EAEA,mBAAoB,CAClB,KAAK,WAAW,CAClB,CAEA,mBAAmBrD,EAAkB,CACnC,KAAK,WAAW,CAClB,CAkCA,QAAS,CACP,KAAM,CAAE,MAAA8sO,EAAO,cAAAC,EAAe,YAAAC,EAAa,YAAAn0O,EAAa,UAAAC,EAAW,cAAAo0O,EAAe,MAAAr3O,EAAO,QAAA+N,EAAS,cAAAupO,CAAc,EAC9G,KAAK,MAEDr6D,EAAS,KAAc,cAAcg6D,EAAOK,CAAa,EAC/D,SACE,OAAC,MACC,MAAOr6D,EAAO,QACd,UAAAh6K,EACA,YAAa,CAACk0O,EACd,QAASD,EACT,MAAAl3O,EACA,aAAc,GACd,QAASi9K,EAAO,QAChB,YAAAj6K,EACA,SAAU,KAAK,kBACf,cAAAq0O,EACA,QAAAtpO,CAAA,CACF,CAEJ,CACF,C,6QC1EO,SAASwpO,EAAkB,CAAE,QAAAvwM,CAAQ,EAAuB,CACjE,MAAMwwM,KAAkB,eAAY,IAAM,CACxC,KAAgB,QAAQ,CAAE,IAAK,KAAiB,KAAM,CAAC,CACzD,EAAG,CAAC,CAAC,EAEL,SACE,OAAC,OAAI,MAAO,CAAE,UAAW,OAAQ,EAC/B,mBAACppM,EAAA,EAAK,CAAC,UAAU,MAAM,eAAe,SACpC,oBAACA,EAAA,EAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAAC,MAAI,SAAApH,CAAA,CAAQ,KACb,OAAC,OACC,mBAACv/B,EAAA,GAAM,CAAC,KAAK,KAAK,QAAQ,YAAY,KAAK,aAAa,QAAS+vO,EAC/D,mBAAC,KAAK,CAAC,QAAQ,mDAAmD,8BAAkB,EACtF,EACF,GACF,EACF,EACF,CAEJ,C,gFC5BA,MAAMC,EAAqC,CACzC,CAAC,IAAO,eAAe,EAAG,iEAC1B,CAAC,IAAO,WAAW,EAAG,8EACtB,CAAC,IAAO,oBAAoB,EAC1B,8FACJ,EAEaC,EAAe5xN,GAAe2xN,EAAW3xN,CAAE,E,eCAxD,MAAM6xN,EAAoB,uEAYnB,SAASC,EAAqBn2O,EAAkC,CACrE,KAAM,CAAE,aAAAo2O,EAAc,OAAA50F,EAAQ,OAAA60F,GAAQ,eAAAjsD,EAAgB,gBAAAksD,GAAiB,oBAAArsD,GAAqB,OAAAjqE,CAAO,EAAIhgH,EAEvG,SACE,QAAC2sC,EAAA,EAAK,CAAC,UAAU,SACd,UAAAypM,MACC,OAAC,KAAS,CAAC,KAAM,EACf,mBAACG,EAAA,EAAyB,CAAU,WAAYL,EAAmB,aAAc,GAC9E,UAACM,EAAa7xM,IACT6xM,EACK,QAIP,QAAChzM,EAAA,GACC,SAAO,KAAE,wDAAyD,iBAAiB,EACnF,SAAS,OACT,SAAU,IAAM,CACdmB,EAAU,EAAI,CAChB,EAEA,qBAAC,KACC,oBAAC,KAAK,CAAC,QAAQ,uCAAuC,mIAGtD,KACA,OAAC,OAAG,KACJ,OAAC,KAAK,CAAC,QAAQ,0DAA0D,qIAGzE,KACA,OAAC,OAAG,KACJ,QAAC,KAAK,CAAC,QAAQ,uDAAuD,2GAE7D,KACT,GACF,KACA,OAAC,KACC,KAAMsxM,EAAY,IAAO,eAAe,EACxC,UAAU,gBACV,OAAO,SACP,IAAI,aAEJ,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,qBAAS,EACtE,GACF,CAEJ,CACF,EACF,KAEF,OAACz6L,EAAA,GACC,cAAa7xC,EAAA,GAAU,WAAW,WAAW,YAC7C,MAAO63I,GAAU,GACjB,UAAW,CAAC40F,EACZ,eAAa,KACX,wEACA,2BACF,EACA,SAAUhsD,EACV,UAAWksD,GACX,OAAAt2H,CAAA,CACF,EACCq2H,GAAO,IAAK35O,MAET,OAAC+5O,EAAA,CAEC,UAAW/5O,EACX,QAAS,IAAM,CACbutL,GAAoB,CAAE,MAAOvtL,EAAE,EAAG,CAAC,CACrC,GAJKA,EAAE,IAKT,CAEH,GACH,CAEJ,CAOA,SAAS+5O,EAAmB,CAAE,UAAAC,EAAW,QAAA3oO,CAAQ,EAA4B,CAC3E,MAAMhN,KAAS,MAAWuD,CAAS,EACnC,SACE,QAAC0wE,EAAA,GACC,SAAQ,GACR,UAAWj0E,EAAO,KAClB,cAAa4I,EAAA,GAAU,WAAW,aAAa,aAAa+sO,EAAU,IAAI,EAC1E,QAAA3oO,EAEA,oBAACinE,EAAA,EAAK,QAAL,CAAc,SAAA0hK,EAAU,KAAK,KAC9B,OAAC1hK,EAAA,EAAK,YAAL,CAAkB,SAAA0hK,EAAU,YAAY,EACxCA,EAAU,UACT,OAAC1hK,EAAA,EAAK,KAAL,CACC,mBAAC2hK,EAAA,EAAe,CAAC,MAAOD,EAAU,MAAO,EAC3C,GAEJ,CAEJ,CAEA,SAASpyO,EAAUnF,EAAsB,CACvC,MAAO,CACL,QAAM,OAAI,CACR,OAAQ,IACR,QAAS,GAAGA,EAAM,QAAQ,CAAC,CAAC,EAC9B,CAAC,CACH,CACF,C,eC1FO,MAAMy3O,EAAiB,UAqB9B,MAAMC,UAAsC,eAAuD,CAIjG,YAAY72O,EAAmC,CAC7C,MAAMA,CAAK,EAmBb,oBAAkB8D,GAAyC,CACzD,KAAK,SAAS,CAAE,OAAQA,EAAM,OAAO,KAAM,CAAC,CAC9C,EAEA,qBAAmBA,GAAiD,CAClE,GAAIA,EAAM,MAAQ,QAAS,CACzB,KAAM,CAAE,OAAA09I,EAAO,EAAI,KAAK,MACxB,GAAIA,GAAQ,CACV,MAAMxxI,GAAQwxI,GAAO,YAAY,EAC3BxkI,EAAW6/D,EAAA,EAA6B,KAAK,EAAE,OAAQngF,IAC9CA,EAAE,KAAOA,EAAE,aAAa,YAAY,EACtC,QAAQsT,EAAK,GAAK,CAC9B,EACGgN,EAAS,OAAS,GACpB,KAAK,oBAAoB,CAAE,MAAOA,EAAS,CAAC,EAAE,EAAG,CAAC,CAEtD,CACF,MAAWlZ,EAAM,UAAY,KAE3B,KAAK,SAAS,CAAE,OAAQ,GAAI,WAAY,EAAM,CAAC,EAC/CA,EAAM,gBAAgB,EAE1B,EA+DA,6BAA2BsJ,GAAiB,CAC1C,KAAM,CAAE,gBAAAggD,EAAgB,EAAI,KAAK,MACjC,IAAIigB,GAAS,EACb,MAAMypK,EAAc1pL,GAAgB,OAAQ1wD,GAAMA,EAAE,GAAG,WAAW0Q,CAAI,CAAC,EAAE,IAAK1Q,GAAMA,EAAE,EAAE,EAExF,OAAIo6O,EAAY,SAAW,IACzBzpK,GAAS,KAAK,IAAI,GAAGypK,EAAY,IAAKh5O,GAAM,SAASA,EAAE,MAAM,KAAK,EAAG,CAAC,EAAG,EAAE,CAAC,CAAC,EAAI,GAG5E,GAAGsP,CAAI,IAAIigE,EAAM,EAC1B,EAEA,yBAAuB5S,GAAwC,CAC7D,IAAIiuK,GAAY,+CACZhrO,EAAA,GAAO,eAAe,0BACxBgrO,GAAY,4BAA8BA,OAG5C,MAAkBA,GAAW,CAC3B,OAAQ,MACR,iBAAkBjuK,EAAW,KAC/B,CAAC,EACD,KAAM,CAAE,gBAAArN,EAAgB,EAAI,KAAK,MAE3BigB,EAAS,KAAK,wBAAwB5S,EAAW,KAAM,EAC7D,KAAK,SAAS,CAAE,OAAQ,GAAI,WAAY,EAAM,CAAC,EAC/C,KAAK,SAAS,CACZ,GAAGrN,GACH,CACE,GAAIigB,EACJ,eAAgB,CACd,GAAI5S,EAAW,MACf,QAAS,CAAC,CACZ,CACF,CACF,CAAC,CACH,EAEA,4BAAyB,CAAC13C,EAAag0N,KAAsC,CAC3E,KAAM,CAAE,gBAAA3pL,EAAgB,EAAI,KAAK,MAC3Br3C,EAAO,MAAM,KAAKq3C,EAAe,EACvC,IAAIs7K,EAAY,+CACZhrO,EAAA,GAAO,eAAe,0BACxBgrO,EAAY,4BAA8BA,MAG5C,MAAkBA,EAAW,CAC3B,OAAQ,SACR,iBAAkB3yN,EAAKgN,CAAG,EAAE,eAAe,EAC7C,CAAC,EACDhN,EAAKgN,CAAG,EAAE,eAAiBg0N,GAC3B,KAAK,SAAShhO,CAAI,CACpB,EAEA,4BAA0BgN,GAAgB,CACxC,KAAM,CAAE,gBAAAqqC,EAAgB,EAAI,KAAK,MAC3Br3C,GAAO,MAAM,KAAKq3C,EAAe,EACvC,IAAIs7K,EAAY,+CACZhrO,EAAA,GAAO,eAAe,0BACxBgrO,EAAY,4BAA8BA,MAG5C,MAAkBA,EAAW,CAC3B,OAAQ,SACR,iBAAkB3yN,GAAKgN,CAAG,EAAE,eAAe,EAC7C,CAAC,EACDhN,GAAK,OAAOgN,EAAK,CAAC,EAClB,KAAK,SAAShN,EAAI,CACpB,EAEA,+BAA4B,IAAM,CAChC,KAAK,SAAS,CAAC,CAAC,EAChB,KAAK,SAAS,CAAE,mBAAoB,EAAM,CAAC,CAC7C,EAEA,eAAa8iB,GAAuB,CAClC,KAAM,CAAE,gBAAAu0B,EAAgB,EAAI,KAAK,MAEjC,GAAI,CAACv0B,GAAU,CAACA,EAAO,YACrB,OAGF,MAAMmzJ,GAAanzJ,EAAO,OAAO,MAC3BozJ,EAAWpzJ,EAAO,YAAY,MACpC,GAAImzJ,KAAeC,EACjB,OAEF,MAAMt5H,EAAS,MAAM,KAAKvF,EAAe,EACnC,CAACpd,CAAO,EAAI2iB,EAAO,OAAOq5H,GAAY,CAAC,EAC7Cr5H,EAAO,OAAOs5H,EAAU,EAAGj8I,CAAO,EAClC,KAAK,SAAS2iB,CAAM,CACtB,EAEA,wBAAqB,OAEjB,OAACk5H,EAAA,GACC,aAAc,IAAM,CAClB,KAAK,SAAS,CAAE,WAAY,EAAK,CAAC,CACpC,EACD,EAIL,iCAA8B,IAAM,CAClC,KAAM,CAAE,KAAA1wL,EAAM,gBAAAiyD,EAAgB,EAAI,KAAK,MAEvC,SACE,OAAC,KAAe,CAAC,UAAW,KAAK,UAC/B,mBAAC,KAAS,CAAC,YAAY,uBAAuB,UAAU,WACrD,SAACqqD,OAEE,QAAC,OAAI,IAAKA,GAAS,SAAW,GAAGA,GAAS,eACxC,oBAACy0E,EAAA,GACC,QAAS9+H,GACT,KAAAjyD,EACA,SAAU,KAAK,uBACf,SAAU,KAAK,uBACjB,EACCs8G,GAAS,aACZ,CAEJ,CACF,EACF,CAEJ,EApOE,MAAMrqD,EAAkBptD,EAAM,MAAM,iBAAmB,CAAC,EAElD6uE,GAAM,KAAK,uBAAuBzhB,CAAe,EACvD,KAAK,MAAQ,CACX,gBAAiBA,EAAgB,IAAI,CAAC1wD,EAAGoB,MAAO,CAC9C,eAAgBpB,EAChB,GAAImyE,GAAI/wE,EAAC,CACX,EAAE,EACF,KAAM,CACJ,OAAQ,CAAC,CACX,EACA,OAAQ,GACR,eAAgB84O,EAChB,kBAAmB,EACrB,EACA,KAAK,OAAM,aAA0B,CACvC,CA0BA,uBAAuBxpL,EAA0C,CAC/D,MAAM4pL,EAAiD,CAAC,EAClDC,GAA8B,CAAC,EAErC,QAASn5O,EAAI,EAAGA,EAAIsvD,EAAgB,OAAQtvD,IAAK,CAC/C,MAAM8sD,GAAiBwC,EAAgBtvD,CAAC,EACpCk5O,EAAuBpsL,GAAe,EAAE,IAAM,OAChDosL,EAAuBpsL,GAAe,EAAE,EAAI,EAE5CosL,EAAuBpsL,GAAe,EAAE,GAAK,EAE/CqsL,GAAkB,KAAK,GAAG7pL,EAAgBtvD,CAAC,EAAE,EAAE,IAAIk5O,EAAuB5pL,EAAgBtvD,CAAC,EAAE,EAAE,CAAC,EAAE,CACpG,CACA,OAAOm5O,EACT,CAEA,mBAAoB,CAClB,KAAK,aAAe,KAAK,MAAM,MAC5B,eAAe,EACf,QAAQ,CAAE,eAAgB,GAAO,gBAAiB,EAAM,CAAC,EACzD,UAAU,CACT,KAAOvrN,GAAyB,KAAK,SAAS,CAAE,KAAMA,CAAU,CAAC,CACnE,CAAC,CACL,CAEA,sBAAuB,CACjB,KAAK,cACP,KAAK,aAAa,YAAY,CAElC,CAEA,mBAAmBhjB,EAAiDhI,EAAkC,CACpG,GAAIhD,EAAA,GAAO,eAAe,wBAAyB,CAEjD,MAAMw5O,EAAiB,EADGx2O,EAAU,gBAAgB,OAAS,IAChBA,EAAU,WAGjDy2O,GAAoB,EADG,KAAK,MAAM,gBAAgB,OAAS,IACd,KAAK,MAAM,WAE9D,GAAID,IAAmBC,GAAmB,CAIxC,MAAMC,EAAa,KAAK,OAAO,EAAI,EAEnC,KAAK,SAAS,CAAE,UAAWD,GAAoBC,EAAa,OAAO,gBAAiB,CAAC,CACvF,CACF,CAEI12O,EAAU,YAAc,KAAK,MAAM,WACrC,KAAK,IAAI,SAAS,SAAS,CAAE,IAAK,KAAK,MAAM,SAAU,CAAC,CAE5D,CAEA,SAAS0sD,EAAwD,CAC/D,KAAK,SAAS,CAAE,gBAAAA,CAAgB,CAAC,EACjC,KAAK,MAAM,MAAM,mBAAmBA,EAAgB,IAAK1wD,GAAMA,EAAE,cAAc,CAAC,CAClF,CAmIA,wBAAyB,CACvB,GAAI,CAAE,WAAA26O,CAAW,EAAI,KAAK,MAC1B,KAAM,CAAE,gBAAAjqL,EAAiB,OAAAo0F,EAAO,EAAI,KAAK,MACnC,CAAE,wBAAA81F,CAAwB,EAAI55O,EAAA,GAAO,eACrC04O,GAAe,CAAChpL,GAAiB,OACjCmqL,GAAgBnqL,EAAgB,OAAS,EAC/C,IAAI4yD,EAA0B,KAC1Bq2H,EAASx5J,EAAA,EAA6B,KAAK,EAAE,KAAK,CAAC7gE,GAAG9e,KAAO8e,GAAE,KAAO9e,GAAE,KAAO,EAAIA,GAAE,KAAO8e,GAAE,KAAO,GAAK,CAAE,EAkBhH,GAbI,CAACs7N,GAA2BlB,KAC9BiB,EAAa,IAGX,KAAK,MAAM,iBAAmBT,IAChCP,EAASA,EAAO,OACb35O,IACCA,GAAE,YACF,KAAK,MAAM,gBACXA,GAAE,WAAW,IAAI,KAAK,MAAM,cAAqC,CACrE,GAGE8kJ,GAAQ,CACV,MAAMxxI,GAAQwxI,GAAO,YAAY,EAC3BxkI,GAAWq5N,EAAO,OAAQ35O,IACjBA,EAAE,KAAOA,EAAE,aAAa,YAAY,EACtC,QAAQsT,EAAK,GAAK,CAC9B,EAEDgwG,KACE,oBACG,UAAAhjG,GAAS,OAAO,MAAIq5N,EAAO,OAAO,eACnC,OAAC7qM,EAAA,GACC,KAAK,QACL,QAAS,IAAM,CACb,KAAK,SAAS,CAAE,OAAQ,EAAG,CAAC,CAC9B,EACA,WAAS,KAAE,kEAAmE,cAAc,EAC9F,GACF,EAGF6qM,EAASr5N,EACX,CAEI,CAACgjG,GAAUq3H,GAAc,CAACjB,KAC5Bp2H,KACE,OAACx0E,EAAA,GACC,KAAK,QACL,QAAS,IAAM,CACb,KAAK,SAAS,CAAE,WAAY,EAAM,CAAC,CACrC,EACA,WAAS,KAAE,kEAAmE,cAAc,EAC9F,GAOJ,IAAIgsM,EAAS,KACTC,EAAY,KACZH,GACFE,KACE,OAAC1sD,EAAA,GACC,aAAAsrD,GACA,OAAA50F,GACA,OAAAxhC,EACA,OAAAq2H,EACA,QAAS,IAAM,KAAK,SAAS,CAAE,WAAY,EAAM,CAAC,EAClD,uBAAyB79M,IAAW,KAAK,SAAS,CAAE,eAAgBA,EAAO,CAAC,EAC5E,0BAA4B8xJ,IAAsB,KAAK,SAAS,CAAE,kBAAAA,EAAkB,CAAC,EACrF,eAAgB,KAAK,eACrB,gBAAiB,KAAK,gBACtB,oBAAqB,KAAK,oBAC1B,KAAM,KAAK,MAAM,KAAK,OACtB,eAAgB,KAAK,MAAM,eAC3B,kBAAmB,KAAK,MAAM,kBAChC,EAGFmtD,KACE,oBACE,oBAACzxO,EAAA,IACC,KAAK,QACL,QAAQ,YACR,QAAS,IAAM,KAAK,SAAS,CAAE,mBAAoB,EAAK,CAAC,EACzD,MAAO,CAAE,WAAY,KAAK,MAAM,MAAM,QAAQ,EAAG,EAEjD,mBAAC,KAAK,CAAC,QAAQ,wEAAwE,sCAEvF,EACF,KACA,OAACkoC,EAAA,GACC,OAAQ,EAAQ,KAAK,MAAM,mBAC3B,SAAO,KACL,8EACA,6BACF,EACA,QAAM,KACJ,4EACA,iFACF,EACA,eAAa,KAAE,oEAAqE,YAAY,EAChG,UAAW,IAAM,KAAK,0BAA0B,EAChD,UAAW,IAAM,KAAK,SAAS,CAAE,mBAAoB,EAAM,CAAC,EAC9D,GACF,GAKFspM,KACE,OAACrB,EAAA,CACC,aAAAC,GACA,OAAA50F,GACA,OAAAxhC,EACA,OAAAq2H,EACA,eAAgB,KAAK,eACrB,gBAAiB,KAAK,gBACtB,oBAAqB,KAAK,oBAC5B,EAOJ,MAAMt+O,MACJ,QAAC+zL,EAAA,EAAW,CACV,oBAAC9lL,EAAA,IACC,KAAK,OACL,QAAQ,YACR,QAAS,IAAM,CACb,KAAK,SAAS,CAAE,WAAY,EAAK,CAAC,CACpC,EACA,cAAa2D,EAAA,GAAU,WAAW,WAAW,wBAE7C,mBAAC,KAAK,CAAC,QAAQ,gFAAgF,sCAE/F,EACF,EACC8tO,CAAA,EACH,EAGF,SACE,oBACG,UAAAJ,GAAcG,EAIZF,GAA2BC,IAAiBx/O,IAG1C,CAACu/O,GAA2B,CAACD,GAAcE,IAAiBx/O,EAAA,EAEnE,CAEJ,CAEA,QAAS,CACP,KAAM,CACJ,MAAO,CAAE,MAAA8qH,CAAM,CACjB,EAAI,KAAK,MACH,CAAE,gBAAAz1D,CAAgB,EAAI,KAAK,MAC3BmqL,GAAgBnqL,EAAgB,OAAS,EAI/C,GAAIy1D,EAAO,CACT,MAAMt9E,EAAUgyM,GACZ,uDACA,gEACJ,SAAO,OAACzB,EAAiB,CAAC,QAAAvwM,CAAA,CAAkB,CAC9C,CAEA,SACE,OAACrkC,EAAA,EAAe,CAAC,IAAK,KAAK,IAAK,UAAU,OACxC,mBAAC,KAAS,CAAC,QAAQ,KACjB,oBAAC,OAAI,cAAayI,EAAA,GAAU,WAAW,aAAa,QACjD,WAAC4tO,IAAiB75O,EAAA,GAAO,eAAe,yBAA2B,KAAK,mBAAmB,EAC3F65O,IAAiB,KAAK,4BAA4B,EAClD,KAAK,uBAAuB,GAC/B,EACF,EACF,CAEJ,CACF,CAEO,MAAMG,KAAwB,MAAUb,CAA6B,C,kICjdrE,MAAM3/D,EAAa,CAAC,CACzB,YAAAn7C,EACA,cAAA98D,EACA,WAAA+8D,EACA,mBAAAC,EACA,iBAAA07G,EACA,UAAAn2O,CACF,IAAa,CACX,MAAMT,KAAS,MAAWuD,CAAS,EAC7BszO,EAAuBD,EAAmB,EAAI,EAE9CE,KAAc,WAAQ,IAAM,CAChC,MAAMC,EAAQ,CAAC,GAAG,IAAI,MAAM74K,CAAa,EAAE,KAAK,CAAC,EAE3C84K,EAAgB94K,EAAgB24K,EAChCI,EAAc,CAACzpN,EAAc3oB,OACjC,OAAC,MAAc,UAAW7E,EAAO,KAC/B,mBAAC,KAAM,CAAC,KAAK,KAAK,QAAA6E,EAAkB,QAAS,IAAMo2H,EAAWztG,CAAI,EAC/D,SAAAA,CAAA,CACH,GAHOA,CAIT,EAGF,OAAOupN,EAAM,OAAsB,CAACG,EAAep8C,IAAc,CAC/D,MAAMttK,EAAOstK,EAAY,EACnBj2L,EAAyB2oB,IAASwtG,EAAc,UAAY,YAG5Dm8G,EAAkBN,EAClBO,EAAkBl5K,EAAgB24K,EAAuB,EAEzDQ,EAAqBD,EAAkBD,EAEvCG,EAAoB9pN,IAAS,GAAKA,IAAS0wC,EAE3Cq5K,EACJF,EAAqB,IAAMr8G,GAAem8G,GAAmBn8G,GAAeo8G,EAGxEI,EAAiBZ,EAAmB,EAAI,EAGxCa,EAAab,EAAmB,EAAI,EAE1C,OAAII,EAEAM,GACCt8G,EAAcm8G,GAAmB3pN,EAAO2pN,GACxCE,GAAsB,GAAKr8G,EAAco8G,GAAmB5pN,EAAO4pN,GACnEC,EAAqB,GAAKr8G,GAAem8G,GAAmB3pN,EAAO4pN,GACnEG,GAA8B/pN,GAAQwtG,EAAcy8G,GAAcjqN,GAAQwtG,EAAcy8G,EAGzFP,EAAc,KAAKD,EAAYzpN,EAAM3oB,CAAO,CAAC,GAE5C2oB,IAAS2pN,GAAmBn8G,EAAcm8G,GAC1C3pN,IAAS4pN,GAAmBp8G,EAAco8G,GAC1CG,IACE/pN,IAASwtG,EAAcw8G,GAAkBhqN,IAASwtG,EAAcw8G,KAGnEN,EAAc,QACZ,OAAC,MAAc,UAAWl3O,EAAO,KAC/B,mBAAC,IAAI,CAAC,UAAWA,EAAO,SAAU,KAAK,aAAa,cAAY,0BAA2B,IADpFwtB,CAET,CACF,EAGF0pN,EAAc,KAAKD,EAAYzpN,EAAM3oB,CAAO,CAAC,EAExCqyO,CACT,EAAG,CAAC,CAAC,CACP,EAAG,CAACl8G,EAAa98D,EAAe+8D,EAAY47G,EAAsBD,EAAkB52O,EAAO,SAAUA,EAAO,IAAI,CAAC,EAEjH,GAAIk7H,GAAsBh9D,GAAiB,EACzC,OAAO,KAGT,MAAMw5K,KAAoB,KAAE,sCAAuC,eAAe,EAC5EC,KAAgB,KAAE,kCAAmC,WAAW,EAEtE,SACE,OAAC,OAAI,aAAW,MAAG33O,EAAO,UAAWS,CAAS,EAAG,KAAK,aACpD,oBAAC,MACC,oBAAC,MAAG,UAAWT,EAAO,KACpB,mBAAC,MACC,aAAY03O,EACZ,KAAK,KACL,QAAQ,YACR,QAAS,IAAMz8G,EAAWD,EAAc,CAAC,EACzC,SAAUA,IAAgB,EAE1B,mBAAC,IAAI,CAAC,KAAK,YAAa,GAC1B,EACF,EACC87G,KACD,OAAC,MAAG,UAAW92O,EAAO,KACpB,mBAAC,MACC,aAAY23O,EACZ,KAAK,KACL,QAAQ,YACR,QAAS,IAAM18G,EAAWD,EAAc,CAAC,EACzC,SAAUA,IAAgB98D,EAE1B,mBAAC,IAAI,CAAC,KAAK,aAAc,GAC3B,EACF,GACF,EACF,CAEJ,EAEM36D,EAAY,KACT,CACL,aAAW,OAAI,CACb,MAAO,OACT,CAAC,EACD,QAAM,OAAI,CACR,QAAS,eACT,YAAa,OACb,aAAc,KAChB,CAAC,EACD,YAAU,OAAI,CACZ,UAAW,eACb,CAAC,CACH,E,gECvJK,SAASq0O,GAA6C,CAC3D,MAAM1oO,EAAQ,6BACRD,EAAQ,6BACR4oO,EAAmB3oO,EAAM,OAEzBmW,EAAU,IAAI,IACpB,OAAQ7pB,GAAc,CACpB,MAAMusD,EAAM1iC,EAAQ,IAAI7pB,CAAC,EACzB,GAAIusD,GAAO,KACT,OAAOA,EAET,MAAMjtC,EAAI,CAAC,GAAGtf,CAAC,EACZ,IAAKkK,GACAA,EAAE,YAAY,GAAKA,IAAMA,EAAE,YAAY,EAClCuJ,EAAM,OAAO,KAAK,MAAM,KAAK,OAAO,EAAI4oO,CAAgB,CAAC,EAE9DnyO,EAAE,YAAY,GAAKA,IAAMA,EAAE,YAAY,EAClCwJ,EAAM,OAAO,KAAK,MAAM,KAAK,OAAO,EAAI2oO,CAAgB,CAAC,EAE3DnyO,CACR,EACA,KAAK,EAAE,EACV,OAAA2f,EAAQ,IAAI7pB,EAAGsf,CAAC,EACTA,CACT,CACF,CAQO,SAASg9N,EAAc19O,EAAuBQ,EAAkC,CACrF,GAAI,EAAEA,EAAK,QAAUA,EAAK,OAASA,EAAK,QACtC,OAAOR,EAGT,MAAM29O,EAAY,IAAI,IAAI,CAAC,OAAQ,QAAS,WAAY,UAAW,KAAM,MAAO,OAAQ,WAAY,KAAM,MAAM,CAAC,EAC3GC,EAAOJ,EAAoB,EACjC,OAAOx9O,EAAK,IAAKoC,GAAM,CACrB,GAAI,CAAE,OAAAy7O,EAAQ,KAAA79O,CAAK,EAAIoC,EACvB,GAAIy7O,GAAU79O,EAAM,CAClB,GAAIQ,EAAK,QACP,UAAWmc,KAAKkhO,EAAO,OACrB,GAAIlhO,EAAE,OAAQ,CACZ,MAAMymE,EAAiB,CAAC,EACxB,SAAW,CAAC7/D,EAAK1nB,CAAK,IAAK,OAAO,QAAQ8gB,EAAE,MAAM,EAChDymE,EAAO7/D,CAAG,EAAIq6N,EAAK/hP,CAAK,EAE1B8gB,EAAE,OAASymE,CACb,EAGJ,GAAI5iF,EAAK,MACP,UAAWmc,KAAKkhO,EAAO,OACjBlhO,EAAE,MAAM,QAAU,CAACghO,EAAU,IAAIhhO,EAAE,KAAK,YAAY,CAAC,IACvDA,EAAE,KAAOihO,EAAKjhO,EAAE,IAAI,GAMtBnc,EAAK,QACPq9O,EAAO,OAAO,QAAQ,CAAClhO,EAAGiL,IAAQ,CAChC,GAAIjL,EAAE,OAAS,KAAU,QAAU3c,EAAM,CACvC,MAAM,EAAIA,EAAK,OAAO4nB,CAAG,EAAE,IAAKxmB,GAAMw8O,EAAK,OAAOx8O,CAAC,CAAC,CAAC,EACrDpB,EAAK,OAAO4nB,CAAG,EAAI,CACrB,CACF,CAAC,CAEL,CACA,MAAO,CAAE,OAAAi2N,EAAQ,KAAA79O,CAAK,CACxB,CAAC,CACH,C,iGCzDO,MAAMo0M,EAAgB,CAAC,CAAE,KAAA9pM,EAAM,SAAAwzO,EAAU,SAAAjmK,EAAU,QAAA5uE,EAAS,QAAA2J,EAAS,SAAA3N,CAAS,IAAa,CAChG,MAAMW,KAAS,MAAWuD,CAAS,EAEnC,SACE,QAAC,OAAI,UAAWvD,EAAO,kBACpB,UAAA0E,MACC,OAAC,KACC,KAAMA,EACN,KAAMutE,EACN,SAAAimK,EACA,QAAA70O,EACA,iBAAiB,SACjB,QAAA2J,CAAA,CACF,EAED3N,CAAA,EACH,CAEJ,EAEMkE,EAAanF,IAA0B,CAC3C,qBAAmB,OAAI,CACrB,QAAS,KAAKA,EAAM,QAAQ,EAAG,CAAC,GAChC,QAAS,MACX,CAAC,CACH,E,4GCtBO,MAAM+5O,EAAa,CAAC,CAAE,MAAAr4O,EAAO,SAAA65D,EAAU,QAAA3sD,EAAS,KAAAtI,EAAO,OAAQ,IAAuB,CAC3F,MAAM1E,KAAS,MAAWuD,CAAS,EAC7BqkG,KAAc,MAAW,IAAiB,EAChD,SACE,QAAC,UAAO,KAAK,SAAS,aAAW,MAAGA,EAAa5nG,EAAO,QAAS25D,GAAY35D,EAAO,QAAQ,EAAG,QAAAgN,EAC7F,oBAAC,QAAM,SAAAlN,CAAA,CAAM,EACZ65D,MAAY,OAAC,IAAI,CAAC,KAAMj1D,EAAM,UAAW1E,EAAO,KAAM,cAAY,kBAAmB,IACxF,CAEJ,EAEMuD,EAAanF,IACV,CACL,WAAS,OAAI,CACX,WAAYA,EAAM,OAAO,WAAW,UACpC,aAAcA,EAAM,MAAM,OAAO,KACjC,QAASA,EAAM,QAAQ,EAAG,CAAC,EAC3B,SAAUA,EAAM,WAAW,UAAU,SACrC,WAAYA,EAAM,WAAW,iBAC7B,WAAYA,EAAM,WAAW,UAAU,WACvC,MAAOA,EAAM,OAAO,KAAK,UACzB,QAAS,OACT,WAAY,SACZ,OAAQ,OACR,SAAU,WACV,OAAQ,aAAaA,EAAM,OAAO,WAAW,SAAS,GACtD,WAAY,SAEZ,UAAW,CACT,WAAYA,EAAM,OAAO,OAAO,MAChC,MAAOA,EAAM,OAAO,KAAK,OAC3B,CACF,CAAC,EACD,YAAU,OAAI,CACZ,MAAOA,EAAM,OAAO,KAAK,QACzB,WAAYA,EAAM,OAAO,OAAO,SAEhC,UAAW,CACT,WAAYA,EAAM,OAAO,OAAO,KAClC,CACF,CAAC,EACD,QAAM,OAAI,CACR,WAAYA,EAAM,QAAQ,EAAG,CAC/B,CAAC,CACH,E,gOCjDK,SAASg6O,EAAoB1rN,EAA2B,CAC7D,MAAM2oD,EAAU,IAAIgjK,EAAY,CAAE,aAAc3rN,EAAU,OAAO,CAAE,CAAC,EACpEA,EAAU,MAAM,SAAS,aAAa2oD,EAASA,EAAQ,MAAM,IAAM,CAAE,MAAO,GAAM,MAAO,EAAM,CAAC,CAClG,CAMO,MAAMgjK,UAAoB,IAAkC,CAAC,CAEpE,SAASnM,EAEPoM,EACiC,CACjC,MAAMh1N,KAAK,SAAM,EAYjB,MAAO,IAXS,WAAQ,IACf,IAAI,IAA8B,CAAE,MAAO,GAAI,GAAI,WAAY,CAAC,EAAE,QACvE,IAAI,IAA0B,CAC5B,MAAO,GACP,GAAAA,EACA,UAAW,GACX,OAAQ,OAAM,OAACi1N,EAAA,CAAsB,YAAAD,CAAA,CAA0B,CACjE,CAAC,CACH,EACC,CAACA,EAAah1N,CAAE,CAAC,CAEL,CACjB,CAEO,MAAMotN,CAA+D,CAInE,YAAoB4H,EAA0B,CAA1B,iBAAAA,EAH3B,KAAgB,2BAA6B,GAC7C,KAAgB,SAAW,WAY3B,KAAO,mBAAqBpM,EAAmB,KAAK,KAAM,KAAK,WAAW,CAVpB,CAE/C,wBAAuD,CAC5D,MAAO,CACL,YAAU,KAAE,4CAA6C,WAAW,EACpE,KAAM,IACN,gBAAc,KAAE,4CAA6C,WAAW,CAC1E,CACF,CAGF,CAEA,SAASqM,EAAsB,CAAE,YAAAD,CAAY,EAAiC,CAC5E,MAAM7+O,KAAU,WAAQ,OAAM,MAA6B,EAAG,CAAC,CAAC,EAC1DuG,KAAS,MAAWuD,CAAS,EAE7B4rO,KAAgB,eACnBp5O,GAA+B,CAC9B,MAAM22B,EAAY4rN,EAAY,MAAM,aAAa,QAAQ,EACnDE,EAAe,KAAW,aAAa9rN,CAAS,EAEtD,GAAI,EAAE8rN,aAAwB,MAC5B,OAGF,MAAMC,KAAS,MAAiB1iP,EAAM,CAAE,QAAM,MAAmBA,EAAMyiP,EAAa,MAAM,WAAa,CAAC,CAAC,CAAE,CAAC,EAC5G,KAAqB,YAAY,CAAE,OAAQA,EAAc,YAAaC,CAAO,CAAC,EAC9E/rN,EAAU,MAAM,SAAS,aAAa+rN,EAAQA,EAAO,MAAM,IAAM,CAAE,MAAO,GAAM,MAAO,EAAM,CAAC,CAChG,EACA,CAACH,CAAW,CACd,EAEA,SACE,QAAC,IAAK,CAAC,UAAU,SAAS,IAAK,EAC7B,oBAAC,IAAG,CAAC,cAAe,EAAG,QAAS,OAC9B,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,gCAAoB,EACjF,KACA,OAAC,IAAK,CAAC,UAAU,SAAS,IAAK,EAC5B,SAAA7+O,EAAQ,IAAKmG,MACZ,QAAC,KACC,SAAQ,GACR,UAAS,GACT,QAAS,IAAMuvO,EAAcvvO,EAAO,KAAM,EAE1C,SAAO,KAAE,yDAA0D,sBAAsB,EACzF,cAAa,KAAU,WAAW,YAAY,gBAAgB,aAAaA,EAAO,KAAM,EAExF,oBAAC,IAAK,QAAL,CAAc,SAAAA,EAAO,MAAM,KAC5B,OAAC,IAAK,YAAL,CAAiB,UAAWI,EAAO,gBAAkB,SAAAJ,EAAO,YAAY,IALpEA,EAAO,KAMd,CACD,EACH,GACF,CAEJ,CAEA,SAAS2D,EAAUnF,EAAsB,CACvC,MAAO,CACL,mBAAiB,OAAI,CACnB,SAAUA,EAAM,WAAW,UAAU,SACrC,UAAWA,EAAM,QAAQ,CAAC,CAC5B,CAAC,CACH,CACF,C,yDCjHO,SAASs6O,EAAYl+O,EAAkB,CAC5C,MAAO,CACL,GAAGA,EACH,OAAQA,EAAM,OAAO,IAAK1B,GAAU,CAClC,MAAM6/O,EAAU,OAAO7/O,EAAM,OAAO,OAAO,EAE3C,OAAK,OAAO,MAAM6/O,CAAO,EAGhB7/O,EAFA8/O,EAAiB9/O,EAAO6/O,CAAO,CAI1C,CAAC,CACH,CACF,CAEO,SAASC,EAAiB9/O,EAAc6/O,EAAiB,CAC9D,MAAME,EAAkB//O,EAAM,OAAO,MAAM,EAE3C,QAASiE,EAAI,EAAGA,EAAI87O,EAAgB,OAAQ97O,IACtC87O,EAAgB97O,CAAC,IAAM,OACzB87O,EAAgB97O,CAAC,EAAI47O,GAIzB,MAAO,CACL,GAAG7/O,EACH,OAAQ+/O,CACV,CACF,C,uRCdO,MAAMC,EAAuB,CAAC,CAAE,UAAAr4O,EAAW,WAAAs4O,EAAY,QAAAxtO,CAAQ,IAAa,CACjF,KAAM,CAAC5K,EAAWotH,EAAY,KAAI,YAAS,EAAK,EAE1C0yB,MAAS,WACb,IACE,IACE,MAAOpyH,KACL0/F,GAAa,EAAI,KAEb,SAAM1/F,EAAK,IACbA,GAAQ,OAGH,MAAc,EAClB,IAAI,qCAAqCA,EAAK,cAAc,EAC5D,KAAMyJ,GACEA,EAAO,gBAAgB,IAAK2/I,KAAQ,CACzC,GAAIA,GAAG,GACP,IAAKA,GAAG,IACR,MAAOA,GACP,MAAOA,GAAG,MACV,OAAQA,GAAG,UACX,MAAOA,GAAG,KACZ,EAAE,CACH,EACA,QAAQ,IAAM,CACb1pD,GAAa,EAAK,CACpB,CAAC,GAEL,IACA,CAAE,QAAS,EAAK,CAClB,EACF,CAAC,CACH,EAEA,SACE,OAAC,OAAI,UAAU,yBAAyB,cAAY,uBAClD,mBAAC,MACC,YAAW,GACX,UAAAttH,EACA,QAAA8K,EACA,UAAA5K,EACA,eAAgB,GAChB,YAAa8/I,GACb,SAAUs4F,EACV,eAAa,KAAE,4CAA6C,6CAA6C,EACzG,oBAAkB,KAChB,oEACA,2BACF,EACA,gBAAY,KAAE,2CAA4C,wBAAwB,EACpF,EACF,CAEJ,ECjDO,MAAMC,UAAmB,WAAwB,CACtD,YAAY/5O,EAAc,CACxB,MAAMA,CAAK,EAuBb,YAAS,IACP,MAAOovB,IACL,KAAK,SAAS,CAAE,UAAW,EAAK,CAAC,KAE7B,SAAMA,CAAK,IACbA,EAAQ,OAGH,MAAc,EAClB,IAAI,8CAA8CA,CAAK,EAAE,EACzD,KAAMyJ,GAA8B,CACnC,MAAMooL,GAAsCpoL,EAAO,MAAM,IAAKmhN,KACrD,CACL,MAAOA,GACP,MAAOA,GAAK,KACZ,OAAQA,GAAK,SACf,EACD,EAED,YAAK,SAAS,CAAE,UAAW,EAAM,CAAC,EAC3B/4B,EACT,CAAC,GAEL,IACA,CAAE,QAAS,EAAK,CAClB,EA/CE,KAAK,MAAQ,CAAE,UAAW,EAAM,CAClC,CAEA,mBAA0B,CACxB,KAAM,CAAE,OAAAg5B,CAAO,EAAI,KAAK,MACnBA,MAIL,MAAc,EACX,IAAI,cAAcA,CAAM,EAAE,EAC1B,KAAMD,GAAe,CACpB,KAAK,SAAS,CACZ,MAAO,CACL,MAAOA,EACP,MAAOA,EAAK,KACZ,OAAQA,EAAK,SACf,CACF,CAAC,CACH,CAAC,CACL,CA6BA,QAAS,CACP,KAAM,CAAE,WAAAF,EAAY,UAAAt4O,CAAU,EAAI,KAAK,MACjC,CAAE,UAAAE,EAAW,MAAA1K,EAAM,EAAI,KAAK,MAClC,SACE,OAAC,OAAI,UAAU,cAAc,cAAY,aACvC,mBAAC,MACC,UAAA0K,EACA,eAAgB,GAChB,YAAa,KAAK,OAClB,MAAA1K,GACA,SAAU8iP,EACV,UAAAt4O,EACA,eAAa,KAAE,iCAAkC,eAAe,EAChE,oBAAkB,KAAE,8CAA+C,gBAAgB,EACnF,gBAAY,KAAE,gCAAiC,aAAa,EAC9D,EACF,CAEJ,CACF,CC5EO,MAAM04O,EAAa,CAAC,CAAE,UAAA14O,EAAW,WAAAs4O,EAAY,QAAAxtO,CAAQ,IAAa,CACvE,KAAM,CAAC5K,EAAWotH,EAAY,KAAI,YAAS,EAAK,EAE1C0yB,MAAS,WACb,IACE,IACE,MAAOpyH,KACL0/F,GAAa,EAAI,KAEb,SAAM1/F,EAAK,IACbA,GAAQ,OAGH,MAAc,EAClB,IAAI,+BAA+BA,EAAK,YAAY,EACpD,KAAMyJ,GACEA,EAAO,IAAKshN,KAAU,CAC3B,GAAIA,GAAK,OACT,IAAKA,GAAK,IACV,MAAOA,GACP,MAAOA,GAAK,MACZ,OAAQA,GAAK,UACb,MAAOA,GAAK,KACd,EAAE,CACH,EACA,QAAQ,IAAM,CACbrrH,GAAa,EAAK,CACpB,CAAC,GAEL,IACA,CAAE,QAAS,EAAK,CAClB,EACF,CAAC,CACH,EAEA,SACE,OAAC,OAAI,UAAU,cAAc,cAAY,aACvC,mBAAC,MACC,YAAW,GACX,UAAAttH,EACA,QAAA8K,EACA,UAAA5K,EACA,eAAgB,GAChB,YAAa8/I,GACb,SAAUs4F,EACV,eAAa,KAAE,iCAAkC,iCAAiC,EAClF,oBAAkB,KAAE,8CAA+C,gBAAgB,EACnF,gBAAY,KAAE,gCAAiC,aAAa,EAC9D,EACF,CAEJ,ECpCO,IAAKM,GAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,KAAO,OACPA,EAAA,eAAiB,iBACjBA,EAAA,YAAc,cALJA,IAAAA,GAAA,ICXL,MAAMC,EAAgB,CAAC,CAC5B,MAAA57O,KAAQ,KAAE,sCAAuC,oBAAoB,EACrE,YAAAsiN,EACA,YAAAu5B,EACA,MAAAz9K,EACA,SAAA+J,EACF,IAAa,CACX,KAAM,CAACluC,GAAQ6hN,EAAmB,KAAI,YAA2BH,EAAiB,IAAI,EAChF,CAACI,EAASC,EAAU,KAAI,YAAS,EAAE,EACnC,CAACC,GAASC,EAAU,KAAI,YAAS,EAAE,EACnC,CAACC,GAAaC,EAAc,KAAI,YAAS,EAAE,EAC3C,CAACtmH,GAAYumH,EAAa,KAAI,YAAS,EAAE,EAEzCC,MAAgB,WAAQ,IAAM,CAClC,MAAMvgP,GAAU,CAAC,EACjB,OAAI8/O,EAAY,OACd9/O,GAAQ,KAAK,CAAE,MAAO4/O,EAAiB,KAAM,SAAO,KAAE,2CAA4C,MAAM,CAAE,CAAC,EAEzGE,EAAY,iBACd9/O,GAAQ,KAAK,CACX,MAAO4/O,EAAiB,eACxB,SAAO,KAAE,qDAAsD,iBAAiB,CAClF,CAAC,EAECE,EAAY,OACd9/O,GAAQ,KAAK,CAAE,MAAO4/O,EAAiB,KAAM,SAAO,KAAE,2CAA4C,MAAM,CAAE,CAAC,EAEzGE,EAAY,cACd9/O,GAAQ,KAAK,CACX,MAAO4/O,EAAiB,YACxB,SAAO,KAAE,2CAA4C,MAAM,CAC7D,CAAC,EAEI5/O,EACT,EAAG,CAAC8/O,CAAW,CAAC,KAEhB,aAAU,IAAM,CACVv5B,EAAY,OAAS,GACvB+5B,GAAc/5B,EAAY,CAAC,CAAC,CAEhC,EAAG,CAACA,CAAW,CAAC,EAEhB,MAAMp8J,GAAU,IACbjsB,KAAW0hN,EAAiB,MAAQI,GACpC9hN,KAAW0hN,EAAiB,MAAQM,IACpChiN,KAAW0hN,EAAiB,gBAAkBM,IAC9CN,EAAiB,aAAe,IAAQ,eAAeQ,EAAW,EAErE,SACE,QAAC,OACC,UAAU,WACV,gBAAY,KAAE,uDAAwD,oBAAoB,EAE1F,oBAAC7hH,EAAA,EAAW,CAAC,QAASnyD,EAAA,CAAU,KAChC,OAAC,MAAI,SAAAnoE,CAAA,CAAM,KAEX,OAAC,QACC,KAAK,gBACL,SAAWqF,IAAU,CACnBA,GAAM,eAAe,EACrB+4D,EAAM,CAAE,QAAA69K,GAAS,QAAAF,EAAS,YAAAI,GAAa,WAAArmH,GAAY,OAAA77F,EAAO,CAAC,CAC7D,EAEA,oBAACiU,EAAA,EAAK,CAAC,IAAK,EAAG,UAAU,MACvB,oBAACxrC,EAAA,IACC,gBAAY,KAAE,uDAAwD,+BAA+B,EACrG,MAAOu3B,GACP,QAASqiN,GACT,SAAWx+O,IAAMg+O,GAAoBh+O,GAAE,KAAM,EAC7C,SAAUw+O,GAAc,SAAW,EACnC,MAAM,OACR,EAECriN,KAAW0hN,EAAiB,SAAQ,OAACF,EAAU,CAAC,WAAargO,IAAM8gO,GAAW9gO,IAAG,OAAO,KAAO,EAAE,EAAG,EAEpG6e,KAAW0hN,EAAiB,mBAC3B,OAACP,EAAoB,CAAC,WAAahgO,IAAM8gO,GAAW9gO,IAAG,OAAO,KAAO,EAAE,EAAG,EAG3E6e,KAAW0hN,EAAiB,SAAQ,OAACL,EAAU,CAAC,WAAar9O,IAAM+9O,GAAW/9O,GAAE,OAAO,KAAO,EAAE,EAAG,EAEnGg8B,KAAW0hN,EAAiB,gBAC3B,OAACj5O,EAAA,IACC,gBAAY,KAAE,oDAAqD,sBAAsB,EACzF,QAAS,OAAO,OAAO,GAAO,EAC3B,OAAQ0a,IAAMA,KAAM,IAAQ,IAAI,EAChC,IAAKA,KAAO,CAAE,MAAOA,GAAG,MAAOA,EAAE,EAAE,EACtC,SAAWA,IAAMg/N,GAAeh/N,GAAE,OAAS,EAAE,EAC7C,MAAM,OACR,KAGF,OAAC1a,EAAA,IACC,gBAAY,KAAE,iDAAkD,kBAAkB,EAClF,MAAM,OACN,MAAO4/M,EAAY,KAAMpnL,IAAMA,KAAM46F,EAAU,EAC/C,QAASwsF,EAAY,IAAKpnL,KAAO,CAAE,MAAOA,GAAG,MAAOA,EAAE,EAAE,EACxD,SAAWp9B,IAAMu+O,GAAcv+O,GAAE,OAAS,EAAE,EAC9C,KACA,OAACyJ,EAAA,GAAM,CAAC,KAAK,SAAS,SAAU,CAAC2+C,GAAQ,EACvC,mBAAC,KAAK,CAAC,QAAQ,sCAAsC,gBAAI,EAC3D,GACF,EACF,GACF,CAEJ,E,0BC9GO,MAAMq2L,EAAqB,CAAC,CAAE,KAAAjvO,EAAM,iBAAAkvO,EAAkB,OAAAC,EAAQ,SAAA1wJ,EAAU,SAAA5zF,EAAS,IAAa,CACnG,MAAMmK,MAAS,MAAWuD,CAAS,EAEnC,SACE,QAAC,MACC,oBAAC,MAAI,SAAA62O,EAAUpvO,CAAI,EAAE,KACrB,OAAC,MAAI,SAAAqvO,EAAervO,CAAI,EAAE,KAC1B,OAAC,MACE,SAAAA,EAAK,gBACJ,OAAC,MAAG,UAAWhL,GAAO,UACpB,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,iCAAqB,EACtF,EAEJ,KACA,OAAC,MACC,mBAACI,EAAA,IACC,SAAU,CAAC+5O,GAAU,CAACnvO,EAAK,UAC3B,SAAW4tB,IAAM/iC,GAASmV,EAAM4tB,GAAE,KAAM,EACxC,MAAOshN,EAAiB,KAAMthN,IAAMA,KAAM5tB,EAAK,UAAU,EACzD,QAASkvO,EAAiB,IAAKthN,KAAO,CAAE,MAAOA,GAAG,MAAOA,EAAE,EAAE,EAC/D,EACF,KACA,OAAC,MACE,SAAA5tB,EAAK,WACJ,OAACnI,EAAA,GACC,WACE,oBACE,oBAACgpC,EAAA,EAAG,CAAC,aAAc,EAAI,SAAA7gC,EAAK,QAAQ,EACnCsvO,EAAkBtvO,CAAI,GACzB,EAGF,mBAAC7L,EAAA,EAAI,CAAC,KAAK,uBAAuB,UAAWa,GAAO,QAAS,EAC/D,KAEA,OAAC6C,EAAA,EAAO,CAAC,QAASy3O,EAAkBtvO,CAAI,EACtC,mBAAC7L,EAAA,EAAI,CAAC,KAAK,aAAc,GAC3B,EAEJ,KACA,OAAC,MACE,SAAA6L,EAAK,aACJ,OAAC/F,EAAA,IACC,KAAK,KACL,KAAK,QACL,QAAQ,cACR,SAAU,CAACk1O,EACX,QAAS,IAAM1wJ,EAASz+E,CAAI,EAC5B,gBAAY,KACV,wDACA,uCACA,CACE,WAAYuvO,EAAQvvO,CAAI,CAC1B,CACF,EACF,KAEA,OAACnI,EAAA,GACC,QACEmI,EAAK,eACD,KAAE,mEAAoE,sBAAsB,KAC5F,KAAE,qEAAsE,wBAAwB,EAGtG,mBAAC/F,EAAA,IACC,KAAK,KACL,KAAK,OACL,gBAAY,KAAE,wDAAyD,6BAA6B,EACtG,EACF,EAEJ,GACF,CAEJ,EAEMm1O,EAAapvO,GACbA,EAAK,UACA,OAAC,OAAI,UAAU,uBAAuB,IAAKA,EAAK,cAAe,IAAK,mBAAmBA,EAAK,MAAM,GAAI,EACpGA,EAAK,UACP,OAAC,OAAI,UAAU,uBAAuB,IAAKA,EAAK,cAAe,IAAK,mBAAmBA,EAAK,MAAM,GAAI,KAExG,OAAC7L,EAAA,EAAI,CAAC,KAAK,KAAK,KAAK,QAAS,GAGjCo7O,EAAWvvO,GACXA,EAAK,OACAA,EAAK,UAEVA,EAAK,OACAA,EAAK,KAEPA,EAAK,YAGRqvO,EAAkBrvO,GAClBA,EAAK,UACA,QAAC,QAAiB,UAAAA,EAAK,UAAU,MAAvB,MAAwB,EAChCA,EAAK,UACP,QAAC,QAAiB,UAAAA,EAAK,KAAK,MAAlB,MAAmB,EAC3BA,EAAK,eACP,QAAC,QAAiB,UAAAA,EAAK,YAAY,MAAzB,MAA0B,KAEtC,OAAC,UAAS,MAAO,EAGpBsvO,EAAqB1hN,GAA0B,YAAY,CAAC,GAAG,IAAI,IAAIA,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,GAEnGr1B,EAAanF,IAA0B,CAC3C,WAAS,OAAI,CACX,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,aAAW,OAAI,CACb,MAAOA,EAAM,OAAO,KAAK,UACzB,SAAU,QACZ,CAAC,CACH,GCnHao8O,EAAiB,CAAC,CAAE,MAAA98O,EAAO,MAAA02C,EAAO,WAAAqmM,EAAY,iBAAAP,EAAkB,OAAAC,GAAQ,SAAA1wJ,GAAU,SAAA5zF,EAAS,IAAa,CACnH,MAAM6kP,KAAW,WAAQ,IAAM,CAC7B,MAAMpnN,GAA8C,CAAC,EACrD,QAAStoB,MAAQopC,EAAO,CACtB,MAAMz2B,GAAM3S,GAAKyvO,CAAU,EAC3B,GAAI,CAACnnN,GAAK3V,EAAG,EAAG,CACd2V,GAAK3V,EAAG,EAAI3S,GACZ,QACF,CAEA,GAAIA,GAAK,QAAQ,OAASsoB,GAAK3V,EAAG,EAAE,QAAQ,OAAQ,CAClD2V,GAAK3V,EAAG,EAAI3S,GACZ,QACF,CAIIA,GAAK,QAAQ,SAAWsoB,GAAK3V,EAAG,EAAE,QAAQ,QAExC2V,GAAK3V,EAAG,EAAE,WAAa,CAAC3S,GAAK,YAC/BsoB,GAAK3V,EAAG,EAAI3S,GAGlB,CACA,OAAO,OAAO,KAAKsoB,EAAI,EAAE,IAAK20B,IAAM30B,GAAK20B,EAAC,CAAC,CAC7C,EAAG,CAAC7T,EAAOqmM,CAAU,CAAC,EAEtB,OAAIC,EAAS,SAAW,EACf,QAIP,OAAC,OACC,oBAAC,SAAM,UAAU,6BACf,oBAAC,SACC,oBAAC,MACC,oBAAC,MAAG,MAAO,CAAE,MAAO,IAAK,EAAG,KAC5B,OAAC,MAAI,SAAAh9O,CAAA,CAAM,KACX,OAAC,MAAG,MAAO,CAAE,MAAO,IAAK,EAAG,KAE5B,OAAC,MAAG,MAAO,CAAE,MAAO,KAAM,EACxB,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,sBAAU,EACvE,KAEA,OAAC,MAAG,MAAO,CAAE,MAAO,IAAK,EAAG,KAC5B,OAAC,MAAG,MAAO,CAAE,MAAO,IAAK,EAAG,GAC9B,EACF,KACA,OAAC,SACE,SAAAg9O,EAAS,IAAI,CAAC1vO,GAAMnD,QACnB,OAACoyO,EAAA,CACC,KAAAjvO,GACA,SAAAy+E,GACA,SAAA5zF,GACA,OAAAskP,GAEA,iBAAAD,CAAA,EADK,GAAGryO,EAAK,IAAImD,GAAK,MAAM,EAE9B,CACD,EACH,GACF,EACF,CAEJ,EC/DM2vO,EAAmB,GAEnBC,EAAmC,CACvC,YAAa,CAAC,EACd,YAAa,CACX,MAAO,GACP,MAAO,GACP,gBAAiB,GACjB,aAAc,EAChB,CACF,EAgBaxoI,EAAc,CAAC,CAC1B,YAAA0lB,KAAc,KAAE,uCAAwC,kBAAkB,EAC1E,WAAA+iH,KAAa,KAAE,4CAA6C,0BAA0B,EACtF,SAAAtoN,EACA,WAAA8uL,EACA,kBAAAlvG,GACA,mBAAA2oI,GACA,YAAAC,GACA,SAAAC,CACF,IAAa,CACX,MAAMh7O,MAAS,MAAW,EAAS,EAC7B,CAACi7O,GAAUC,EAAW,KAAI,YAAS,EAAK,EACxC,CAAC3sC,GAAM4sC,EAAO,KAAI,YAASP,CAAmB,EAE9C,CAAC56B,GAAao7B,EAAgB,KAAI7+I,EAAA,SAAW,SAAY,CAC7D,IAAInoD,GAAQ,MAAMinM,EAAe9oN,EAAU8uL,CAAU,EACrD,OAAI05B,KACF3mM,GAAQ2mM,GAAY3mM,EAAK,GAEpBA,EACT,EAAG,CAAC7hB,EAAU8uL,EAAY05B,EAAW,CAAC,KAEtC,aAAU,IAAM,CACd,EAAexoN,CAAQ,EAAE,KAAMzX,KAC7BqgO,GAAQrgO,EAAC,EACFsgO,GAAiB,EACzB,CACH,EAAG,CAAC7oN,EAAU6oN,EAAgB,CAAC,EAE/B,MAAMt/K,GAASpjD,IAAyB,CACtC,IAAIsjE,GAAgC,KAChCtjE,GAAM,SAAW2gO,EAAiB,MAAQ3gO,GAAM,SAAW2gO,EAAiB,eAC9Er9J,GAAUs/J,EAAkB/oN,EAAU8uL,EAAY3oM,GAAM,QAAUA,GAAM,UAAU,EACzEA,GAAM,SAAW2gO,EAAiB,KAC3Cr9J,GAAUu/J,GAAkBhpN,EAAU8uL,EAAY3oM,GAAM,QAAUA,GAAM,UAAU,EACzEA,GAAM,SAAW2gO,EAAiB,cAC3Cr9J,GAAUw/J,EAAyBjpN,EAAU8uL,EAAY3oM,GAAM,YAAcA,GAAM,UAAU,GAG3FsjE,KAAY,MACdA,GAAQ,KAAKo/J,EAAgB,CAEjC,EAEM3xJ,GAAYz+E,IAA6B,CAC7C,IAAIgxE,GAAgC,KAChChxE,GAAK,QACPgxE,GAAUs/J,EAAkB/oN,EAAU8uL,EAAYr2M,GAAK,QAAS2vO,CAAgB,EACvE3vO,GAAK,QACdgxE,GAAUu/J,GAAkBhpN,EAAU8uL,EAAYr2M,GAAK,QAAS2vO,CAAgB,EACvE3vO,GAAK,cACdgxE,GAAUw/J,EAAyBjpN,EAAU8uL,EAAYr2M,GAAK,YAAa2vO,CAAgB,GAGzF3+J,KAAY,MACdA,GAAQ,KAAKo/J,EAAgB,CAEjC,EAEMvlP,GAAW,CAACmV,GAA0BwoH,KAAuB,CACjE,QAAQ,IAAI,WAAYxoH,GAAMwoH,EAAU,EACpCxoH,GAAK,aAAewoH,KAGpBxoH,GAAK,SAAWA,GAAK,iBACvB8wD,GAAM,CAAE,WAAA03D,GAAY,QAASxoH,GAAK,QAAS,OAAQquO,EAAiB,IAAK,CAAC,EACjEruO,GAAK,QACd8wD,GAAM,CAAE,WAAA03D,GAAY,QAASxoH,GAAK,QAAS,OAAQquO,EAAiB,IAAK,CAAC,EACjEruO,GAAK,aACd8wD,GAAM,CAAE,WAAA03D,GAAY,YAAaxoH,GAAK,YAAa,OAAQquO,EAAiB,WAAY,CAAC,EAE7F,EAEMn5B,MAAQ,WACZ,OACE,WACGF,GAAY,OAAS,CAAC,GAAG,OAAQjjN,IAAMA,GAAE,MAAM,EAChD,CAAC,OAAQ,WAAW,CACtB,EACF,CAACijN,GAAY,KAAK,CACpB,EACMjzM,MAAQ,WACZ,OACE,WACGizM,GAAY,OAAS,CAAC,GAAG,OAAQjjN,IAAMA,GAAE,QAAU,CAACA,GAAE,gBAAgB,EACvE,CAAC,YAAa,WAAW,CAC3B,EACF,CAACijN,GAAY,KAAK,CACpB,EACMy7B,MAAkB,WACtB,OACE,WACGz7B,GAAY,OAAS,CAAC,GAAG,OAAQjjN,IAAMA,GAAE,QAAUA,GAAE,gBAAgB,EACtE,CAAC,YAAa,WAAW,CAC3B,EACF,CAACijN,GAAY,KAAK,CACpB,EACM07B,MAAe,WACnB,OACE,WACG17B,GAAY,OAAS,CAAC,GAAG,OAAQjjN,IAAMA,GAAE,WAAW,EACrD,CAAC,cAAe,WAAW,CAC7B,EACF,CAACijN,GAAY,KAAK,CACpB,EAEM27B,MAAY,KAAE,kCAAmC,MAAM,EACvDC,MAAY,KAAE,kCAAmC,MAAM,EACvDC,MAAsB,KAAE,4CAA6C,iBAAiB,EACtFC,MAAY,KAAE,kCAAmC,MAAM,EAE7D,OAAI97B,GAAY,WACP,OAAC5vK,EAAA,EAAkB,CAAC,QAAM,KAAE,qCAAsC,wBAAwB,EAAG,KAIpG,oBACE,qBAAC,OACE,UAAA+hE,IAAqB5/E,IAAa,cACjC,QAACsZ,EAAA,EAAG,CAAC,cAAe,EAClB,oBAAC,KAAK,CAAC,QAAQ,wDAAwD,6GAEvE,KACA,OAACkwM,EAAA,GACC,cAAe,CACb,OAAQ,CAAE,CAAC16B,CAAU,EAAG,EAAK,EAC7B,UAAW,CAAC,EACZ,MAAO,CAAC,EACR,KAAM,EACR,EACF,GACF,EAEDrB,GAAY,OAAO,SAAW,MAC7B,OAACn0K,EAAA,EAAG,CACF,mBAACC,EAAA,EAAI,CAAE,SAAA+uM,CAAA,CAAW,EACpB,KAEF,OAACL,EAAA,CACC,MAAOmB,GACP,MAAOD,GACP,WAAY,cACZ,iBAAkBntC,GAAK,YACvB,SAAA14M,GACA,SAAA4zF,GACA,OAAQ0oB,EAAA,CACV,KACA,OAACqoI,EAAA,CACC,MAAOoB,GACP,MAAO7uO,GACP,WAAY,YACZ,iBAAkBwhM,GAAK,YACvB,SAAA14M,GACA,SAAA4zF,GACA,OAAQ0oB,EAAA,CACV,KACA,OAACqoI,EAAA,CACC,MAAOqB,GACP,MAAOJ,GACP,WAAY,YACZ,iBAAkBltC,GAAK,YACvB,SAAA14M,GACA,SAAA4zF,GACA,OAAQ0oB,EAAA,CACV,KACA,OAACqoI,EAAA,CACC,MAAOsB,GACP,MAAO57B,GACP,WAAY,OACZ,iBAAkB3R,GAAK,YACvB,SAAA14M,GACA,SAAA4zF,GACA,OAAQ0oB,EAAA,CACV,EACCA,OACC,oBACE,oBAACltG,EAAA,IACC,UAAWjF,GAAO,oBAClB,QAAS,UAET,QAAS,IAAMk7O,GAAY,EAAI,EAC/B,KAAK,OAEJ,SAAApjH,CAAA,EAJG,gBAKN,KACA,OAACkkH,EAAA,EAAS,CAAC,GAAIf,GACb,mBAAC3B,EAAA,CACC,MAAOwB,GACP,MAAAh/K,GACA,YAAayyI,GAAK,YAClB,YAAaA,GAAK,YAClB,SAAU,IAAM2sC,GAAY,EAAK,EACnC,EACF,GACF,GAEJ,EACCF,GAAYA,EAASh7B,GAAY,OAAS,CAAC,CAAC,GAC/C,CAEJ,EAEM,EAAiB,MAAOztL,GAA2C,CACvE,GAAI,CACF,OAAO,QAAM,MAAc,EAAE,IAAI,uBAAuBA,CAAQ,cAAc,CAChF,OAASvsB,EAAG,CACV,eAAQ,MAAM,wCAAyCA,CAAC,EACjD40O,CACT,CACF,EAEMS,EAAiB,CAAC9oN,EAAkB8uL,OACxC,MAAc,EAAE,IAAI,uBAAuB9uL,CAAQ,IAAI8uL,CAAU,EAAE,EAE/Di6B,EAAoB,CAAC/oN,EAAkB8uL,EAAwBs4B,EAAiBnmH,IACpFumH,GAAcxnN,EAAU8uL,EAAY,QAASs4B,EAASnmH,CAAU,EAE5D+nH,GAAoB,CAAChpN,EAAkB8uL,EAAwBo4B,EAAiBjmH,IACpFumH,GAAcxnN,EAAU8uL,EAAY,QAASo4B,EAASjmH,CAAU,EAE5DgoH,EAA2B,CAACjpN,EAAkB8uL,EAAwBw4B,EAAqBrmH,IAC/FumH,GAAcxnN,EAAU8uL,EAAY,eAAgBw4B,EAAarmH,CAAU,EAEvEumH,GAAgB,CACpBxnN,EACA8uL,EACAtrN,EACAkmP,EACAzoH,QAEA,MAAc,EAAE,KAAK,uBAAuBjhG,CAAQ,IAAI8uL,CAAU,IAAItrN,CAAI,IAAIkmP,CAAM,GAAI,CAAE,WAAAzoH,EAAW,CAAC,EAElG,GAAap1H,IAA0B,CAC3C,aAAW,OAAI,CACb,GAAGA,EAAM,WAAW,UACpB,MAAOA,EAAM,OAAO,KAAK,UACzB,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,EACD,uBAAqB,OAAI,CACvB,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,E,4ICvNO,SAAS4hG,EAAgC,CAC9C,UAAAlhE,EACA,QAAA4sD,EACA,SAAA0T,EACA,SAAA88I,EACA,eAAApjL,EACA,WAAA4lC,EACA,aAAAy9I,EACA,eAAAC,CACF,EAAa,CACX,MAAMj3N,KAAW,MAAY,EAEvBk3N,KAAa,UAAO,EAAK,EACzB,CAAE,cAAAh+L,CAAc,KAAI,KAAc,KAExC,aAAU,IAAM,CAEd,MAAMvrB,EAAiC,CACrC,SAFe4rE,GAAY,MAAQ,MAGnC,aAAAy9I,EACA,SAAA/8I,CACF,EAOA,GAJI1T,EAAQ,YACV2wJ,EAAW,QAAU,IAGnB3wJ,EAAQ,QAAS,CACnB2wJ,EAAW,QAAU,GACrBH,EAAS,UAAUxwJ,EAAQ,MAAO54D,CAAI,EACtC,MACF,CAEA,GAAI44D,EAAQ,WAAaA,EAAQ,MAAQ,CAAC2wJ,EAAW,QAAS,CAC5DA,EAAW,QAAU,GACrB,KAAM,CAAE,IAAAxkP,EAAK,KAAAouC,EAAM,KAAAqhB,EAAM,SAAA/0B,CAAS,EAAIm5D,EAAQ,KAExCiU,EAAeptE,EAAS,OAG1B6sE,IAAa,UAAYvnG,EAE3BwmD,EAAcqgD,GAAY,KAAM7mG,CAAG,EAC1BunG,IAAa,SAEtB/gD,EAAcqgD,GAAY,KAAM09I,GAAkB19I,GAAY,MAAM,EAItE,MAAMl6D,EAAUs0B,GAAkBwjL,EAA4BxpN,CAAI,EAOlE,MANA,MAAa,EAAE,QAAQ,CACrB,KAAM,KAAU,aAAa,KAC7B,QAAS,CAAC0R,CAAO,CACnB,CAAC,EAGG46D,IAAa,UAAY88I,EAAS,iBAAmBrkP,GAAOouC,EAAM,CACpE,MAAMs2M,EAAa,CAAE,IAAA1kP,EAAK,KAAAouC,EAAM,KAAAqhB,CAAK,EACrC40L,EAAS,kBAAkBK,EAAYzpN,EAAM6sE,CAAY,CAC3D,CAGIP,IAAa,SAAW88I,EAAS,iBAC/Bp9M,GAEF3Z,KAAS,MAAgB,CAAE,UAAW2Z,GAAa4/D,GAAY,KAAM,SAAU,IAAU,CAAC,CAAC,EAE7Fw9I,EAAS,eAAev8I,CAAY,GAGtCu8I,EAAS,YAAY,CACvB,CACF,EAAG,CACDxwJ,EACA0T,EACA88I,EACApjL,EACA4lC,EACAy9I,EACAr9M,EACA3Z,EACAi3N,EACA/9L,CACF,CAAC,CACH,CAEA,SAASi+L,EAA4BxpN,EAAwC,CAC3E,KAAM,CAAE,aAAAqpN,CAAa,EAAIrpN,EAEzB,OAAQqpN,EAAc,CACpB,IAAK,YACH,SAAO,KAAE,iDAAkD,8BAA8B,EAC3F,IAAK,SACH,SAAO,KAAE,8CAA+C,6BAA6B,EACvF,QACE,SAAO,KAAE,uCAAwC,6BAA6B,CAClF,CACF,C,wECnKO,MAAMK,EAAoB,KAA2B,CAC1D,OAAQ,GACR,MAAO,EACP,KAAM,CACJ,KAAM,SACN,SAAO,KAAE,6CAA8C,YAAY,EACnE,IAAK,EACP,CACF,GAEaC,EAA0B,CAAC,CACtC,MAAA/+O,EACA,UAAAg/O,EACA,IAAAxoM,CACF,KAI2B,CACzB,OAAQ,GACR,MAAO,EACP,KAAM,CACJ,KAAM,SACN,MAAOx2C,GAAS,GAChB,IAAKw2C,GAAO,GACZ,UAAAwoM,CACF,CACF,E,2MC3BO,MAAMC,EAAoB,IAEpBC,EAAuC,IAEvCC,EAA0B,GAE1BC,EAAiB,GAEjBC,EAAuB,gDAEvBC,EAAiB,yBAEjBC,EAA0B,YAE1BC,EAA6B,mCAE7BC,EAAiB,KAEjBC,EAAuB,IAEvBC,EAA2B,IAK3BC,EAAmB,iBAEnBC,EAAe,WAEfC,EAAgB,uFAEhBC,EACX,iHAEWC,EAAyB,WAEzBC,EAAkC,CAC7C,eACA,qBACA,gBACA,gBACA,aACF,EAKaC,EAAsB,M,2GCvC5B,MAAMC,EAAa,CAAC,CAAE,KAAAryM,CAAK,IAAiB,CACjD,MAAMxrC,KAAS,MAAWuD,CAAS,EAC7Bu6O,EACJ,IAAC,eAAYtyM,EAAK,aAAa,GAAK,IAAC,WAAQA,EAAK,aAAa,GAAK,IAAC,YAASA,EAAK,aAAa,EAC5FuyM,EAAgB,IAAC,eAAYvyM,EAAK,KAAK,GAAK,IAAC,WAAQA,EAAK,KAAK,GAAK,IAAC,YAASA,EAAK,KAAK,EAE9F,SACE,oBACG,UAAAsyM,MAAgB,OAAC,QAAK,UAAW99O,EAAS,gBAAOwrC,EAAK,aAAa,EAAE,EACrEsyM,GAAgBC,KAAgB,OAAC5+O,EAAA,EAAI,CAAC,KAAK,aAAc,GAAK,KAC9D4+O,MAAiB,OAAC,QAAK,UAAW/9O,EAAS,gBAAOwrC,EAAK,KAAK,EAAE,GACjE,CAEJ,EAEMjoC,EAAanF,MACjB,OAAI,CACF,gBAAiBA,EAAM,OAAO,OAAO,MACrC,aAAcA,EAAM,MAAM,OAAO,QACjC,MAAOA,EAAM,OAAO,KAAK,QACzB,SAAUA,EAAM,WAAW,KAAK,SAChC,OAAQA,EAAM,QAAQ,EAAG,EAAG,EAC5B,QAASA,EAAM,QAAQ,IAAM,EAAG,CAClC,CAAC,E,eCtBH,MAAM4/O,EAAoB,CACxB,GAAI,UACJ,cAAe,OACf,KAAM,CAAC,EAAE,EACT,MAAO,OACP,gBAAiB,EACjB,cAAe,CACjB,EAEaC,EAAY,CAAC,CAAE,KAAAzyM,EAAM,MAAA9tC,CAAM,IAAsB,CAC5D,MAAMsC,KAAS,MAAWk+O,CAAkB,EAE5C,OAAO1yM,KACL,oBACE,oBAACrsC,EAAA,EAAI,CAAC,KAAK,OAAO,KAAK,SAAS,UAAWa,EAAOwrC,EAAK,EAAE,EAAG,KAAK,IAAK,GAAG,OACzE,OAAC,QAAK,UAAWxrC,EAAO,SAAW,SAAAtC,CAAA,CAAM,EAAO,OAAC,OAAC,QAAM,kBAAY8tC,EAAMA,EAAK,MAAM,OAAS,CAAC,EAAE,EAAQ,OACzG,OAACqyM,EAAU,CAAC,KAAAryM,CAAA,CAAY,GAC1B,KAEA,QAAC,OAAI,UAAWxrC,EAAO,YACrB,oBAACb,EAAA,EAAI,CAAC,KAAK,OAAO,KAAK,SAAS,UAAWa,EAAO,QAAS,KAAK,IAAK,GAAG,OACxE,OAAC,QAAK,UAAWA,EAAO,SAAW,SAAAtC,CAAA,CAAM,EAAO,OAAC,OAAC,QAAM,kBAAYsgP,EAAa,EAAK,EAAE,GAC1F,CAEJ,EAEME,EAAsB9/O,IAA0B,CACpD,YAAU,OAAI,CACZ,WAAYA,EAAM,WAAW,cAC/B,CAAC,EACD,OAAK,OAAI,CACP,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,WAAS,OAAI,CACX,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,QAAM,OAAI,CACR,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,QAAM,OAAI,CACR,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,QAAM,OAAI,CACR,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,QAAM,OAAI,CACR,MAAOA,EAAM,OAAO,QAAQ,IAC9B,CAAC,EACD,UAAQ,OAAI,CACV,MAAOA,EAAM,OAAO,MAAM,IAC5B,CAAC,EACD,eAAa,OAAI,CACf,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CAAC,CACH,GCpDa6tC,EAAY,CAAC,CAAE,MAAAD,EAAO,MAAAtuC,CAAM,IAAsB,CAC7D,MAAMsC,KAAS,MAAW,CAAS,EAEnC,OAAIgsC,EAAM,SAAW,KAEjB,OAAC,OAAI,UAAWhsC,EAAO,UAAW,cAAY,YAC5C,mBAACi+O,EAAS,CAAC,MAAAvgP,EAAc,KAAMsuC,EAAM,CAAC,EAAG,EAC3C,KAKF,QAAC,OAAI,UAAWhsC,EAAO,UAAW,cAAY,YAC5C,oBAACi+O,EAAS,CAAC,MAAAvgP,CAAA,CAAc,KACzB,OAAC,MAAG,UAAWsC,EAAO,KACnB,SAAAgsC,EAAM,IAAI,CAACR,EAAYxpB,OAEpB,QAAC,MAAG,UAAWhiB,EAAO,SACpB,oBAAC,QAAM,kBAAYwrC,CAAI,EAAE,EAAO,OAAC,OAACqyM,EAAU,CAAC,KAAAryM,CAAA,CAAY,IADtB,MAAG,QAAKA,EAAK,IAAI,CAAC,KAAKxpB,CAAG,EAE/D,CAEH,EACH,GACF,CAEJ,EAEM,EAAa5jB,IAA0B,CAC3C,aAAW,OAAI,CAAC,CAAC,EACjB,QAAM,OAAI,CACR,WAAYA,EAAM,QAAQ,CAAC,CAC7B,CAAC,EACD,YAAU,OAAI,CACZ,aAAcA,EAAM,QAAQ,CAAC,EAC7B,eAAgB,CACd,aAAc,CAChB,CACF,CAAC,CACH,E,iGC1CO,MAAMs5C,EAAsB,CAAC,CAAE,KAAA5kB,CAAK,IAAa,CACtD,MAAM9yB,KAAS,MAAWuD,CAAS,EAC7ByiC,EAAcm4M,EAAerrN,CAAI,EAEvC,OAAKA,KAIE,OAAC,OAAI,UAAW9yB,EAAO,YAAc,SAAAgmC,CAAA,CAAY,EAH/C,IAIX,EAEMm4M,EAAkBrrN,MACf,WAAQ,IAAM,CACnB,MAAMu1B,EAAkB,CAAC,EAEzB,GAAI,CAACv1B,EACH,MAAO,GAGT,GAAIA,EAAK,OAAS,oBAEhB,MAAO,gBAGT,GAAIA,EAAK,UAAU,OAAS,EAAG,CAC7B,MAAMsrN,EAAUtrN,EAAK,UAAU,CAAC,EAChCu1B,EAAM,KAAK+1L,EAAQ,IAAI,CACzB,CAEA,OAAItrN,EAAK,cACPu1B,EAAM,KAAKv1B,EAAK,YAAY,EAGvBu1B,EAAM,KAAK,IAAI,CACxB,EAAG,CAACv1B,CAAI,CAAC,EAGLvvB,EAAanF,IACV,CACL,eAAa,OAAI,CACf,WAAY,SACZ,SAAUA,EAAM,WAAW,KAAK,GAChC,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAY,SACZ,aAAc,UAChB,CAAC,CACH,E,yDCvDK,MAAMigP,EAAe3lO,GAAqBA,EAAM,SAC1C4lO,EAA2B5lO,GAAqBA,EAAM,oB,mKC8B5D,MAAM+pB,EAAQ,aACnB,CACE,CACE,MAAA/kC,EACA,SAAA+rF,EACA,SAAApqF,EACA,cAAAk/O,EACA,SAAAC,EACA,cAAAC,EACA,WAAAC,EACA,UAAAj+O,EACA,SAAAk+O,EAAW,QACX,GAAG/3O,CACL,EACA/O,IACG,CACH,MAAMuG,KAAQ,MAAU,EAElB4B,EAASuD,EAAUnF,EAAOugP,EADf,EAAQjhP,EAC2B8gP,EAAUC,EAAeC,CAAU,EACjFE,EAAkD,CACtD,MAAO,QACP,QAAS,QACT,KAAM,SACN,QAAS,QACX,EACMC,EAAOj4O,EAAU,MAAWg4O,EAAgBD,CAAQ,EACpD/8O,EAAYgF,EAAU,YAAY,GAAKlJ,EAEvCohP,KAAa,KAAE,gCAAiC,aAAa,EAEnE,SACE,OAAC,OAAI,IAAAjnP,EAAU,aAAW,MAAGmI,EAAO,QAASS,CAAS,EAAG,KAAAo+O,EAAY,aAAYj9O,EAAY,GAAGgF,EAC9F,oBAAC,KACC,cAAa,KAAU,WAAW,MAAM,QAAQ+3O,CAAQ,EACxD,QAAQ,OACR,gBAAiBA,EACjB,aAAa,UACb,SAAU,EACV,SAAU,EACV,YAAY,QACZ,YAAaA,EACb,WAAW,UACX,UAAWH,EAAW,KAAO,OAE7B,oBAAC,IAAG,CAAC,WAAY,EAAG,aAAc,EAChC,mBAAC,OAAI,UAAWx+O,EAAO,KACrB,mBAAC,IAAI,CAAC,KAAK,KAAK,KAAM++O,EAAoBJ,CAAQ,EAAG,EACvD,EACF,KAEA,QAAC,IAAG,CAAC,SAAU,EAAG,KAAM,EACtB,oBAAC,IAAI,CAAC,MAAM,UAAU,OAAO,SAC1B,SAAAjhP,CAAA,CACH,EACC2B,MAAY,OAAC,OAAI,UAAWW,EAAO,QAAU,SAAAX,CAAA,CAAS,GACzD,EAECoqF,GAAY,CAAC80J,MACZ,OAAC,OAAI,UAAWv+O,EAAO,MACrB,mBAAC,MACC,aAAY8+O,EACZ,KAAK,QACL,QAASr1J,EACT,KAAK,SACL,KAAK,OACL,QAAQ,YACV,EACF,EAGDA,GAAY80J,MACX,OAAC,IAAG,CAAC,WAAY,EAAG,QAAQ,OAAO,WAAW,SAC5C,mBAAC,KAAM,CAAC,aAAYO,EAAY,QAAQ,YAAY,QAASr1J,EAAU,KAAK,SACzE,SAAA80J,CAAA,CACH,EACF,GAEJ,EACF,CAEJ,CACF,EAEA97M,EAAM,YAAc,QAEb,MAAMs8M,EAAuBJ,GAAqC,CACvE,OAAQA,EAAU,CAChB,IAAK,QACH,MAAO,qBACT,IAAK,UACH,MAAO,uBACT,IAAK,OACH,MAAO,cACT,IAAK,UACH,MAAO,OACX,CACF,EAEMp7O,EAAY,CAChBnF,EACAugP,EACAK,EACAR,EACAC,EACAC,IACG,CACH,MAAMlnP,EAAQ4G,EAAM,OAAOugP,CAAQ,EAEnC,MAAO,CACL,WAAS,OAAI,CACX,SAAU,EACV,aAAcvgP,EAAM,QAAQqgP,GAAiB,CAAC,EAC9C,UAAWrgP,EAAM,QAAQsgP,GAAc,CAAC,EACxC,SAAU,WAEV,WAAY,CACV,QAAS,KACT,SAAU,WACV,IAAK,EACL,KAAM,EACN,OAAQ,EACR,MAAO,EACP,WAAYtgP,EAAM,OAAO,WAAW,QACpC,OAAQ,EACV,CACF,CAAC,EACD,QAAM,OAAI,CACR,MAAO5G,EAAM,KACb,SAAU,WACV,IAAK,MACP,CAAC,EACD,WAAS,OAAI,CACX,MAAO4G,EAAM,OAAO,KAAK,QACzB,WAAY4gP,EAAW5gP,EAAM,QAAQ,EAAG,EAAI,EAC5C,UAAW,OACX,UAAW,MACb,CAAC,EACD,SAAO,OAAI,CACT,SAAU,WACV,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAY,OACZ,QAAS,OACT,IAAK,OACL,MAAO,OACT,CAAC,CACH,CACF,C,2ECzJO,MAAM6gP,EAAQ,CAAC,CAAE,EAAAzjP,EAAI,EAAG,EAAA+iI,EAAI,EAAG,OAAA9zG,CAAO,OACpC,OAAC,IAAG,CAAC,aAAc8zG,EAAG,cAAe/iI,EAAG,QAASivB,IAAW,SAAW,eAAiB,QAAS,C,iDCzBnG,MAAMy0N,EAAuB,IAAI,IAAY,CAClD,WACA,6BACA,0BACA,uCACA,4BACA,2BACA,aACA,yBACA,+BACA,aACA,iCACA,0BACA,gBACA,8BACA,+BACA,0BACA,8BACA,oCACA,sCACA,4BACA,4BACA,yCACA,mCACA,mCACA,8BACA,gCACA,gCACA,gCACA,iCACA,gCACA,6BACA,8BACA,+BACA,oCACA,4BACA,4BACA,+BACA,kCACA,0BACA,4BACA,0BACA,6BACA,8BACA,0BACA,gCACA,4BACA,+BACA,gCACA,8BACA,gCACA,6BACA,4BACA,gCACA,+BACA,4BACA,uCACA,+BACA,+BACA,8BACA,gCACA,4BACA,+BACA,2BACA,8BACA,6BACA,WACA,8CACA,sCACA,qBACA,WACA,yBACA,+BACA,OACA,qCACA,8BACA,8BACA,QACA,QACA,iCACA,wCACA,yBACA,WACA,iCACA,aACA,6BACA,+BACA,mBACA,wCACA,cACA,sBACA,mBACA,mCACA,6BACA,kCACA,qCACA,yBACA,iCACF,CAAC,C,iGChGD,MAAMt2O,EAAY,KAAa,MAAM,oBAAoB,gBAE5Cu2O,EAA2B,CAAC,CAAE,KAAAhuO,CAAK,IAAmC,CACjF,MAAMzT,KAAQ,KACZ,+DACA,oEACA,CAAE,OAAQyT,CAAK,CACjB,EAEA,SACE,OAAC,IAAK,CAAC,SAAS,UAAU,MAAAzT,EAAc,cAAakL,EAAU,gCAAiC,cAAe,EAC7G,oBAAC,KAAK,CAAC,QAAQ,8DAA8D,qDAClC,CAAE,OAAQuI,CAAK,EAAE,sBAC5D,EACF,CAEJ,C,4GCZO,SAASiuO,GAAuB,CACrC,MAAMp/O,KAAS,MAAWuD,CAAS,EAEnC,SACE,OAAC,OAAI,UAAWvD,EAAO,QACrB,mBAAC,OAAI,UAAWA,EAAO,aACrB,mBAAC,UAAO,KAAK,SAAS,UAAWA,EAAO,UAAW,gBAAa,GAC9D,mBAAC,IAAQ,CAAC,MAAO,IAAK,EACxB,EACF,EACF,CAEJ,CAEA,MAAMuD,EAAanF,GAAyB,CAC1C,MAAMihP,KAAa,KAAe,CAAE,MAAAjhP,CAAM,CAAC,EAE3C,MAAO,CACL,QAASihP,EAAW,QACpB,aAAcA,EAAW,aACzB,aAAW,OAAI,CACbA,EAAW,MACX,CACE,UAAW,MACb,CACF,CAAC,CACH,CACF,C,8TCRO,MAAMC,KAAkB,MAA+B,mBAAmB,EAEpEC,KAA2B,MACtC,4BACF,EACaC,KAA+B,MAAa,sCAAsC,EAClFC,KAAiC,MAAa,wCAAwC,EAEtFC,KAAmC,MAAkC,oCAAoC,EACzGC,KAAwC,MAElD,+CAA+C,EAErCC,KAAwB,MAElC,+BAA+B,EAErBC,KAAqB,MAE/B,4BAA4B,EAElBC,KAAuB,MAAa,8BAA8B,EAKlEC,KAAa,MAAqB,oBAAoB,EAKtDC,KAAe,MAAwC,sBAAsB,EAE7EC,KAAa,MAAa,oBAAoB,EAM9CC,KAAY,MACvB,oBACA,MAAOzmP,EAAuC,CAAE,SAAAyrB,EAAU,SAAAC,CAAS,IAAM,CAEvE,MAAMg7N,EAAc,OAAO,OAAOj7N,EAAS,EAAE,QAAQ,KAAK,EAAE,CAAC,EAEvDM,EAAU/rB,GAAS,SAAW0mP,GAAa,SAAW,CAAC,EAE7D,OAAO,KAAKj7N,EAAS,EAAE,QAAQ,KAAK,EAAE,QAAQ,CAACk7N,EAAQv4O,KAAU,CAE3DA,IAAS,GACXsd,EAAS46N,EAAWK,CAAM,CAAC,CAE/B,CAAC,EAED,MAAMC,EAAa5mP,GAAS,OAAS0mP,GAAa,MAAM,KAAO,KAE/D,IAAIG,KAAY,MAAkB,EAElC,KAAOp7N,EAAS,EAAE,QAAQ,MAAMo7N,CAAS,GACvCA,KAAY,MAAkB,EAGhC,MAAMn7N,EACJo7N,EAAuB,CACrB,UAAWD,EACX,WAAY7mP,GAAS,eAAiB0mP,GAAa,oBAAoB,OAAO,EAC9E,WAAS,KAAiB36N,CAAO,EACjC,MAAO66N,EACP,YAAa5mP,GAAS,aAAe0mP,GAAa,YAClD,sBAAuB1mP,GAAS,sBAChC,YAAa,IAAI,IACjB,QAAS,CAAC,CAACA,GAAS,OACtB,CAAC,CACH,EAEI0mP,GAAa,OACf,MAAMh7N,EAASm6N,EAAgB,CAAE,eAAa,WAAQa,EAAY,MAAM,IAAKE,CAAU,CAAE,CAAC,CAAC,CAE/F,CACF,EAQME,KAAyB,MAC7B,6BACA,MAAO9mP,EAAmC,CAAE,SAAA0rB,CAAS,IAAM,CACzD,MAAMA,KAAS,MAAkB1rB,CAAO,CAAC,CAC3C,CACF,EAKa+mP,KAAiC,MAC5C,wCACF,EAQaC,EAAoB,CAC/BnnP,EACAy6C,IAEO,MAAO5uB,GAAa,CACzB,KAAM,CAAE,UAAA5S,EAAW,cAAAmuO,EAAe,gBAAAC,CAAgB,EAAI5sM,EAEhD9N,EAAO,MAAMy6M,EAAc,CAC/B,QAASpnP,EAAM,QACf,MAAOA,EAAM,WACb,WAAYA,EAAM,WAClB,UAAAiZ,EACA,gBAAc,KAAe,EAAE,gBAAgBjZ,EAAM,YAAY,KAAO,GAAI,EAAI,CAClF,CAAC,EAED,GAAIqnP,GAAmB16M,EAAM,CAC3B06M,EAAgB16M,CAAI,EACpB,MACF,CAEA,KAAgB,KAAK,IAAa,iBAAiBA,CAAK,CAAC,CAC3D,EAMI26M,EAA0B,OAAM,MAAqB,EAC9CC,EAAoC,CAC/C,YAAa,GACb,MAAO,CAAC,EACR,yBAA0B,CAAE,WAAY,GAAO,iBAAkB,GAAO,iBAAkB,GAAO,UAAW,EAAM,EAClH,uBAAwB,GACxB,qCAAsC,GACtC,gBAAiB,OACjB,eAAgB,OAChB,eAAgB,GAChB,YAAa,CAAC,CAChB,EAwKA,EAAe,CACb,QAnK4B,CAACnoO,EAAQmoO,EAAqBj7N,IAAoC,CAC9F,GAAIm6N,EAAW,MAAMn6N,CAAM,EAAG,CAC5B,KAAM,CAAE,CAACA,EAAO,OAAO,EAAGxoB,EAAG,GAAGunK,CAAM,EAAI,CAAE,GAAGjsJ,EAAM,KAAM,EAE3D,MAAO,CACL,GAAGA,EACH,MAAAisJ,EACA,gBAAiB,OACjB,eAAgB,OAChB,eAAgB,GAChB,YAAa,EACf,CACF,CAEA,GAAIi7E,EAAsB,MAAMh6N,CAAM,EAAG,CACvC,KAAM,CAAE,gBAAAk7N,CAAgB,EAAIl7N,EAAO,QACnC,MAAO,CACL,GAAGlN,EACH,gBAAAooO,EACA,eAAgB,OAChB,eAAgBA,IAAoB,MACtC,CACF,CAEA,GAAIjB,EAAmB,MAAMj6N,CAAM,EAAG,CACpC,KAAM,CAAE,UAAAX,CAAU,EAAIW,EAAO,QAC7B,MAAO,CACL,GAAGlN,EACH,gBAAiBuM,EACjB,eAAgBA,EAChB,eAAgB,EAClB,CACF,CAEA,GAAI66N,EAAqB,MAAMl6N,CAAM,EACnC,MAAO,CACL,GAAGlN,EACH,gBAAiB,OACjB,eAAgB,OAChB,eAAgB,EAClB,EAGF,GAAI4mO,EAAgB,MAAM15N,CAAM,EAC9B,MAAO,CAAE,GAAGlN,EAAO,YAAakN,EAAO,QAAQ,WAAY,EAG7D,GAAI45N,EAA6B,MAAM55N,CAAM,EAC3C,MAAO,CACL,GAAGlN,EACH,uBAAwB,EAC1B,EAGF,GAAI+mO,EAA+B,MAAM75N,CAAM,EAC7C,MAAO,CACL,GAAGlN,EACH,qCAAsC,EACxC,EAGF,GAAIgnO,EAAiC,MAAM95N,CAAM,EAAG,CAClD,MAAMm7N,EAAsBn7N,EAAO,QACnC,MAAO,CACL,GAAGlN,EACH,oBAAAqoO,CACF,CACF,CAEA,GAAIxB,EAAyB,MAAM35N,CAAM,EAAG,CAC1C,KAAM,CAAE,YAAAopE,EAAa,MAAAgyJ,CAAM,EAAIp7N,EAAO,QAAQ,mBAC9C,MAAO,CACL,GAAGlN,EACH,YAAAs2E,EACA,iBAAkBgyJ,CACpB,CACF,CAEA,GAAIrB,EAAsC,MAAM/5N,CAAM,EAAG,CACvD,MAAMq7N,EAA2Br7N,EAAO,QAAQ,QAChD,MAAO,CACL,GAAGlN,EACH,yBAAAuoO,CACF,CACF,CAEA,GAAIV,EAAuB,QAAQ,MAAM36N,CAAM,EAC7C,MAAO,CACL,GAAGlN,EACH,MAAO,CACL,GAAGA,EAAM,MACT,CAACkN,EAAO,KAAK,IAAI,SAAS,EAAGg7N,EAAwB,CACvD,CACF,EAGF,GAAI,MAAmB,QAAQ,MAAMh7N,CAAM,EAAG,CAC5C,MAAMs7N,EAAe,OAAO,QAAQxoO,EAAM,KAAK,EACzCwa,EAASguN,EAAa,MAAM,EAAGt7N,EAAO,KAAK,IAAI,QAAQ,EACvDyN,EAAQ6tN,EAAa,MAAMhuN,EAAO,MAAM,EACxCyxI,EAAQ,CAAC,GAAGzxI,EAAQ,CAACtN,EAAO,KAAK,IAAI,UAAWg7N,EAAwB,CAAC,EAAY,GAAGvtN,CAAK,EAAE,OACnG,CAAC/f,EAAK,CAACgQ,GAAI0+C,CAAI,KAAO,CAAE,GAAG1uD,EAAK,CAACgQ,EAAE,EAAG0+C,CAAK,GAC3C,CAAC,CACH,EAEA,MAAO,CACL,GAAGtpD,EACH,MAAAisJ,CACF,CACF,CAEA,GAAIs7E,EAAW,MAAMr6N,CAAM,EACzB,MAAO,CACL,GAAGlN,EACH,MAAO,CAAC,CACV,EAGF,GAAI8nO,EAA+B,MAAM56N,CAAM,EAAG,CAChD,KAAM,CACJ,WAAAu7N,EACA,MAAArhP,EACA,YAAAkmC,EACA,QAAA+rE,EACA,iBAAAqvI,EACA,iBAAAC,GACA,UAAAC,EACA,kBAAAC,GACA,gBAAAl1L,EACF,EAAIzmC,EAAO,QACX,MAAO,CACL,GAAGlN,EACH,yBAA0B,CACxB,WAAY,GAAQyoO,GAAczoO,EAAM,0BAA0B,YAClE,QAAS,GAAQq5F,GAAWr5F,EAAM,0BAA0B,SAC5D,MAAO5Y,GAAS4Y,EAAM,0BAA0B,MAChD,YAAastB,GAAettB,EAAM,0BAA0B,YAC5D,gBAAiB2zC,IAAmB3zC,EAAM,0BAA0B,gBACpE,iBAAkB,GAAQ0oO,GAAoB1oO,EAAM,0BAA0B,kBAC9E,iBAAkB,GAAQ2oO,IAAoB3oO,EAAM,0BAA0B,kBAC9E,UAAW,GAAQ4oO,GAAa5oO,EAAM,0BAA0B,WAChE,kBAAA6oO,EACF,CACF,CACF,CAEA,MAAMt8N,EAAgCW,EAAO,SAAS,UACtD,OAAI,OAAOX,GAAc,SAChB,CACL,GAAGvM,EACH,MAAO,OAAO,QAAQA,EAAM,KAAK,EAAE,OAAO,CAACpF,EAAK,CAACgQ,EAAI0+C,CAAI,KAChD,CACL,GAAG1uD,EACH,CAACgQ,CAAE,EAAGA,IAAO2B,KAAY,MAAY+8C,EAAMp8C,CAAM,EAAIo8C,CACvD,GACC,CAAC,CAAC,CACP,EAGKtpD,CACT,CAIA,C,wLCpUA,MAAM65E,EAAqB,CAAE,SAAU,CAAC,EAAG,UAAW,CAAC,CAAE,EAElD,SAASivJ,EAA4DviP,EAAiC,CAC3G,KAAM,CACJ,SAAAsjC,EACA,KAAAnoC,EACA,SAAAqT,KAAW,KAAY,EACvB,QAAAhU,EAAU,CAAC,EACX,MAAA+D,EACA,OAAAC,EACA,MAAAC,EACA,gBAAAmM,EAAkB,IAAM,CAAC,EACzB,kBAAA43O,EAAoB,IAAM,CAAC,EAC3B,oBAAAC,EAAsB,IAAM,CAAC,EAC7B,YAAAz5M,EAAcsqD,CAChB,EAAItzF,EAEEb,KAAQ,MAAU,EAClB4lI,KAAc,KAAe,EAC7BhrI,KAAU,WAAQ,IAAMgrI,EAAY,QAAQ,KAAKA,CAAW,EAAG,CAACA,CAAW,CAAC,EAC5E,CAAC/wF,EAAQ0uM,CAAS,KAAI,eAAS,MAAmBp/M,CAAQ,CAAC,EAC3D,CAAC57B,EAAO01H,CAAQ,KAAI,YAA6B,EACjDjvD,EAAsBw0K,EAAkB3uM,EAAQx5C,EAASwuC,CAAW,EACpE45M,KAAoB,MAAkB5uM,EAAQm6B,GAAqB,YAAahzE,EAAMqT,EAAUrP,EAAOpF,CAAO,EAgBpH,MAdA,aAAU,IAAM,CAEVi6C,GAAUA,EAAO,YAAY1Q,CAAQ,MAKzC,MAAkBA,CAAQ,EACvB,KAAMzK,GAAW6pN,EAAU7pN,CAAM,CAAC,EAClC,MAAO/kB,GAAe,CACrBspH,EAAStpH,EAAI,OAAO,CACtB,CAAC,CACL,EAAG,CAACwvB,EAAU0Q,CAAM,CAAC,EAEjBtsC,EACF,SACE,OAAC,OACC,oBAAC,KAAK,CAAC,QAAQ,6CAA6C,oCAAwB,CAAE,MAAAA,CAAM,GAAE,EAChG,EAIJ,GAAI,CAACssC,GAAU,CAACA,EAAO,YAAY1Q,CAAQ,EACzC,SACE,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,mCAAuB,EACpF,EAIJ,GAAI,CAAC0Q,EAAO,MACV,SACE,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,0CAA0C,yFAEzD,EACF,EAIJ,GAAI,CAAC4uM,EACH,SACE,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,qCAAqC,yBAAa,EACnE,EAIJ,MAAMC,EAAiB7uM,EAAO,MAE9B,SACE,OAAC,KAAkB,CAAC,aAAa,iBAAiB,aAAc,CAACA,EAAQ74C,CAAI,EAC3E,mBAAC,IAAqB,CAAC,KAAM64C,EAAO,KAClC,mBAAC6uM,EAAA,CACC,GAAI,EACJ,KAAMD,EACN,MAAAnkP,EACA,UAAWmkP,EAAkB,UAC7B,SAAAp0O,EACA,QAAS2/D,EAAqB,QAC9B,YAAAnlC,EACA,YAAa,GACb,MAAAzqC,EACA,OAAAC,EACA,cAAe,EACf,iBAAmBi2B,GAAgBA,EACnC,gBAAA7pB,EACA,oBAAA63O,EACA,kBAAAD,EACA,SAAU,KACZ,EACF,EACF,CAEJ,CAEA,SAASG,EACP3uM,EACAx5C,EACAwuC,EAC4B,CAC5B,SAAO,WAAQ,IAAM,CACnB,GAAKgL,EAIL,SAAO,KAA4B,CACjC,OAAAA,EACA,eAAgBx5C,EAChB,mBAAoBwuC,EACpB,oBAAqB,EACvB,CAAC,CACH,EAAG,CAACgL,EAAQhL,EAAaxuC,CAAO,CAAC,CACnC,C,uLC1GO,MAAMsoP,EAAqB,CAChCC,EACAtzO,EAAc,gBAEP,cAA0B,WAAyD,CAAnF,kCAEL,yBAAmB,aAAe,EADlC,MAAO,CAAP,KAAO,YAAcA,CAAA,CAGrB,QAAS,CACP,KAAM,CAAE,MAAAtQ,EAAO,SAAAiB,EAAU,SAAAxJ,EAAU,MAAA2B,EAAO,GAAA8rB,CAAG,EAAI,KAAK,MAChDtjB,EAASuD,EAAUnF,CAAK,EACxB6jP,EAAiB,gBAAoBD,EAAS,CAC7C,GAAG,KAAK,MAAO,SAAU,KAC9B,SAAAnsP,CACF,CAAC,EACD,SACE,OAAC,IAAiB,CAAC,QAASosP,EAAgB,UAAW,IACpD,UAACC,EAAY5rN,EAAY6rN,OAEtB,oBACG,eAAK,iBAAiB,YACrB,OAAC,KACE,GAAGA,EACJ,iBAAkB,KAAK,iBAAiB,QACxC,iBAAkBniP,EAAO,YACzB,aAAcs2B,EACd,aAAc4rN,EACd,UAAYn/O,MAAU,KAAaA,EAAOuzB,CAAU,EACtD,EAGDj3B,EACCA,EAAS,CACP,IAAK,KAAK,iBACV,gBAAiB6iP,EACjB,gBAAiB5rN,CACnB,CAAC,KAED,OAAC,KACC,GAAAhT,EACA,IAAK,KAAK,iBACV,QAAS4+N,EACT,aAAc5rN,EACd,MAAOl4B,EAAM,cAAc,eAAe5G,GAAS,SAAS,EAC5D,aAAYA,CAAA,CACd,GAEJ,CAEJ,CACF,CAEJ,CACF,EAMWglL,KAAc,MAAWulE,EAAmB,IAAoB,aAAa,CAAC,EAC9EK,KAAoB,MAAWL,EAAmB,IAA0B,mBAAmB,CAAC,EAEvGx+O,KAAY,KAAenF,IACxB,CACL,eAAa,OAAI,CACf,SAAU,WACV,OAAQA,EAAM,OAAO,QACrB,MAAOA,EAAM,OAAO,KAAK,QACzB,SAAU,QACV,SAAUA,EAAM,WAAW,KAAK,GAChC,UAAW,QACX,SAAU,MACZ,CAAC,CACH,EACD,C,mFCtGM,MAAMikP,EAA2B,CACtC,SAAU,CACR,MAAO,CACL,CACE,MAAO,CAAC,CAAE,KAAM,WAAY,EAAG,CAAE,KAAM,YAAa,EAAG,CAAE,KAAM,WAAY,CAAC,CAC9E,CACF,CACF,EACA,QAAS,CAAC,CACZ,EAEaC,EAAe,CAACh+O,EAAci+O,IAA8B,CACvE,MAAMn/J,EAAQ9+E,EAAK,MAAM;AAAA,CAAI,EAAE,IAAKg/E,GAClC,QAAM,OAAO,CACX,KAAM,YACN,MAAO,CAAC,OAAK,OAAOA,CAAI,CAAC,CAC3B,CAAC,CACH,EAEMk/J,EAAQ,QAAM,OAAO,CACzB,KAAM,CACJ,OAAAD,CACF,EACA,KAAM,aACN,MAAOn/J,CACT,CAAC,EAED,OAAO,WAAS,OAAO,CACrB,MAAO,CAACo/J,CAAK,CACf,CAAC,CACH,EAEaC,EAAY,CAACn+O,EAAci+O,IAA2B,CACjE,MAAMG,EAAWJ,EAAah+O,EAAMi+O,CAAM,EAE1C,OAAO,QAAM,OAAO,CAClB,SAAUG,CACZ,CAAC,CACH,C,2EC3BO,MAAMC,UAAmC,GAAoB,CAClE,YAAYlpP,EAA0B,CACpC,MAAM,OAAY2qI,GACT,IAAI,IAAe,CACxB,GAAG3qI,EACH,OAAA2qI,CACF,CAAC,CACF,CACH,CACF,C,mKCNO,SAAS6tD,EAA2B,CAAE,oBAAA2wD,CAAoB,EAAoC,CACnG,SACE,oBACE,oBAACC,EAAA,CAAyC,oBAAAD,CAAA,CAA0C,KACpF,OAACE,EAAA,CAA0B,oBAAAF,CAAA,CAA0C,GACvE,CAEJ,CAEA,SAASC,EAAyC,CAAE,oBAAAD,CAAoB,EAAoC,CAC1G,MAAM5iP,KAAS,MAAWuD,CAAS,EAC7Bw/O,EAAuBH,IAAwB,KAE/C,CAACI,EAAkCC,CAA8B,KAAI,MACzE,KAAe,uBACjB,EACMC,EAA6BF,GAAoCC,EAEjE,CAAE,YAAaE,CAAe,EAAI,IAAgB,UAAU,sCAAsC,SACtG,OACA,CACE,KAAMJ,GAAwB,CAACG,CACjC,CACF,EAMA,GAAI,EAHFC,GAAgB,qBAChB,CAAC,KAAmB,SAAU,KAAmB,GAAG,EAAE,SAASA,GAAgB,mBAAmB,IAEnEJ,EAC/B,OAAO,KAGT,MAAMK,EAAuBD,EAAe,yBAA2B,EAEvE,OAAIA,EAAe,sBAAwB,KAAmB,YAE1D,QAAC,KACC,SAAO,KACL,6FACA,0DACF,EAEA,oBAAC,KAAK,CAAC,QAAQ,gFAAgF,qKAG/F,KACA,OAAC,OAAI,UAAWnjP,EAAO,UACrB,mBAAC,KAAK,CAAC,QAAQ,qEAAqE,oIAGpF,EACF,GACF,EAIAmjP,EAAe,sBAAwB,KAAmB,KAAOC,KAEjE,QAAC,KACC,SAAO,KACL,sGACA,gDACF,EACA,SAAS,UAET,oBAAC,KAAK,CAAC,QAAQ,2EAA2E,oJAG1F,KACA,OAAC,OAAI,UAAWpjP,EAAO,UACrB,mBAAC,KAAK,CAAC,QAAQ,gEAAgE,oIAG/E,EACF,GACF,EAIG,IACT,CAEA,SAAS8iP,EAA0B,CAAE,oBAAAF,CAAoB,EAAoC,CAG3F,OAF8BA,MAAuB,KAAcA,CAAmB,KAOpF,OAAC,IAAK,CAAC,SAAO,KAAE,2DAA4D,wBAAwB,EAClG,mBAAC,KAAK,CAAC,QAAQ,6DAA6D,8IAG5E,EACF,EATO,IAWX,CAEA,MAAMr/O,EAAanF,IAA0B,CAC3C,aAAW,OAAI,CACb,SAAUA,EAAM,WAAW,UAAU,SACrC,WAAYA,EAAM,WAAW,UAAU,UACzC,CAAC,CACH,E,gECrHO,MAAMo6C,EAAkBp6C,IACtB,CACL,SAAO,OAAI,CACT,SAAU,QACV,OAAQA,EAAM,OAAO,MACrB,WAAYA,EAAM,OAAO,WAAW,QACpC,UAAWA,EAAM,QAAQ,GACzB,aAAcA,EAAM,MAAM,OAAO,GACjC,OAAQ,aAAaA,EAAM,OAAO,OAAO,IAAI,GAC7C,eAAgB,cAChB,QAAS,OACT,MAAO,QACP,SAAU,OACV,KAAM,EACN,MAAO,EACP,WAAY,OACZ,YAAa,OACb,IAAK,MACL,UAAW,MACX,QAAS,OACT,cAAe,SAGd,6BAA+B,CAC9B,UAAW,OACX,IAAK,MACL,UAAW,kBACb,CACF,CAAC,EACD,iBAAe,OAAI,CACjB,SAAU,QACV,OAAQA,EAAM,OAAO,cACrB,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,gBAAiBA,EAAM,WAAW,QAAQ,UAC5C,CAAC,EACD,eAAa,OAAI,CACf,MAAO,cACP,QAAS,OACT,WAAY,SACZ,UAAW,OACX,OAAQA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EAChC,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,OAAQA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,CAClC,CACF,CAAC,EACD,uBAAqB,OAAI,CACvB,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,EACrD,CAAC,EACD,oBAAkB,OAAI,CACpB,SAAUA,EAAM,WAAW,KAAK,GAChC,OAAQA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EAChC,QAAS,OACT,WAAY,SACZ,SAAU,WACV,IAAK,KACP,CAAC,EACD,mBAAiB,OAAI,CACnB,YAAaA,EAAM,QAAQ,CAAC,EAC5B,SAAU,UACV,WAAY,CACV,cAAe,UACjB,CACF,CAAC,EACD,oBAAkB,OAAI,CACpB,OAAQ,OACR,QAAS,OACT,WAAY,SACZ,MAAOA,EAAM,OAAO,KAAK,UACzB,SAAU,EACV,eAAgB,UAClB,CAAC,EACD,gBAAc,OAAI,CAChB,SAAU,OACV,QAASA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EACjC,aAAcA,EAAM,QAAQ,CAAC,EAC7B,eAAgB,OAChB,MAAO,OAEP,CAACA,EAAM,YAAY,KAAK,IAAI,CAAC,EAAG,CAC9B,QAASA,EAAM,QAAQ,EAAG,EAAG,EAAG,CAAC,EACjC,aAAcA,EAAM,QAAQ,CAAC,CAC/B,CACF,CAAC,EACD,kBAAgB,OAAI,CAClB,WAAYA,EAAM,OAAO,WAAW,QACpC,SAAU,SACV,OAAQ,EACR,WAAYA,EAAM,QAAQ,CAAC,EAC3B,cAAeA,EAAM,QAAQ,EAAG,EAChC,OAAQ,CACV,CAAC,CACH,E,2ICtFK,SAASilP,EAAyBn5N,EAAoBjX,EAAuB,CAClF,MAAMyZ,KAAY,MAAqBxC,CAAQ,EAC/CjX,EAAQ,IAAMyZ,EAAU,MAAM,UAAY,KAAQ,YAAc,KAAQ,UAExEA,EAAU,iBAAkBhU,GAAU,CAChCA,EAAM,UACRzF,EAAQ,IAAM,KAAQ,YAEtBA,EAAQ,IAAM,KAAQ,SAE1B,CAAC,EAEDA,EAAQ,kBAAoB,IAAM,CAChC,MAAMyZ,KAAY,MAAqBxC,CAAQ,EAS/C,MALI,CAHiBo5N,EAA2B52N,CAAS,GAQrD,CAAC,IAAO,eAAe,4BAA8B,CAACA,EAAU,iBAAiB,EAC5E,GAIF,EAAQA,EAAU,MAAM,KAAK,wBAAwB,UAAU,MACxE,EAEAzZ,EAAQ,mBAAsBogC,GAA0B,CACtD,MAAM3mB,KAAY,MAAqBxC,CAAQ,EAG/C,MAAI,CAAC,IAAO,eAAe,4BAA8B,CAACwC,EAAU,iBAAiB,EAC5E,GAGL2mB,EACK,EAAQ3mB,EAAU,MAAM,KAAK,wBAAwB,UAAU,QAGjE,EAAQA,EAAU,MAAM,KAAK,wBAAwB,aAAa,OAC3E,EAEAzZ,EAAQ,qBAAwBogC,GAA0B,CACxD,MAAM3mB,KAAY,MAAqBxC,CAAQ,EAG/C,MAAI,CAAC,IAAO,eAAe,4BAA8B,CAACwC,EAAU,iBAAiB,EAC5E,GAGL2mB,EACK,EAAQ3mB,EAAU,MAAM,KAAK,wBAAwB,UAAU,UAGjE,EAAQA,EAAU,MAAM,KAAK,wBAAwB,aAAa,SAC3E,EAEAzZ,EAAQ,mBAAqB,MAAOlQ,GAAkC,CACpE,MAAM2pB,KAAY,MAAqBxC,CAAQ,EAEzCq5N,EAAWxgP,EAAM,OAASA,EAAM,GAChCwpG,EAAO,CACX,aAAc7/E,EAAU,MAAM,IAC9B,WAAS,MAAsBxC,CAAQ,EACvC,SAAAq5N,EACA,KAAMxgP,EAAM,KACZ,QAASwgP,EAAWxgP,EAAM,GAAK,EAC/B,KAAMA,EAAM,KACZ,KAAMA,EAAM,WACd,EAEA,QAAM,KAAiB,EAAE,KAAKwpG,CAAI,EAElCi3I,EAA6B92N,CAAS,EAEtCzZ,EAAQ,SAAS,QAAQ,IAAI,KAAsBs5F,CAAI,CAAC,CAC1D,EAEAt5F,EAAQ,mBAAqB,MAAOlQ,GAAkC,CACpE,MAAM2pB,KAAY,MAAqBxC,CAAQ,EAEzCq5N,EAAWxgP,EAAM,OAASA,EAAM,GAChCwpG,EAAO,CACX,GAAIxpG,EAAM,GACV,aAAc2pB,EAAU,MAAM,IAC9B,WAAS,MAAsBxC,CAAQ,EACvC,SAAAq5N,EACA,KAAMxgP,EAAM,KACZ,QAASwgP,EAAWxgP,EAAM,GAAK,EAC/B,KAAMA,EAAM,KACZ,KAAMA,EAAM,WACd,EAEA,QAAM,KAAiB,EAAE,OAAOwpG,CAAI,EAEpCi3I,EAA6B92N,CAAS,EAEtCzZ,EAAQ,SAAS,QAAQ,IAAI,KAAsBs5F,CAAI,CAAC,CAC1D,EAEAt5F,EAAQ,mBAAqB,MAAOqQ,GAAe,CACjD,QAAM,KAAiB,EAAE,OAAO,CAAE,GAAAA,CAAG,CAAC,EAEtCkgO,KAA6B,MAAqBt5N,CAAQ,CAAC,EAE3DjX,EAAQ,SAAS,QAAQ,IAAI,KAAsB,CAAE,GAAAqQ,CAAG,CAAC,CAAC,CAC5D,EAEArQ,EAAQ,iBAAoBwwO,GAA+B,CACzD,MAAM/2N,KAAY,MAAqBxC,CAAQ,EAEzCq2I,KAAc,MAAkBr2I,CAAQ,EAC9C,GAAI,CAACq2I,EACH,OAGF,MAAMmjF,EAAYC,EAA0Bj3N,EAAW6zI,EAAY,MAAM,UAAU,EACnFqjF,EAA0BF,EAAWD,CAAS,CAChD,EAEAxwO,EAAQ,kBAAoB,OACR,MAAqBiX,CAAQ,EAC9B,iBAAiB,EAGpCjX,EAAQ,aAAgB3Y,GAGf,QAAQ,QAAQ,EAAI,CAE/B,CAEA,SAASgpP,EAA2B1zN,EAAoE,CACtG,MAAMs6F,EAAM,KAAoB,cAAct6F,CAAK,EAGnD,UAAWo9E,KAASkd,EAAI,MAAM,iBAC5B,GAAIld,aAAiB,QACfA,EAAM,MAAM,WAAaA,EAAM,MAAM,MAAM,QAC7C,OAAOA,CAMf,CAEA,SAASw2I,EAA6B5zN,EAAuB,CAC3D,MAAMo9E,EAAQs2I,EAA2B1zN,CAAK,EAC1Co9E,GACFA,EAAM,SAAS,CAEnB,CAEO,SAAS22I,EAA0B/zN,EAAuBu8B,EAAsC,CACrG,MAAMuQ,EAAY,KAAW,aAAa9sC,CAAK,EAE/C,UAAW51B,KAAY0iE,EAAU,MAAM,UACrC,GAAI,KAAW,gBAAgB1iE,CAAQ,EAAG,CACxC,MAAM6pP,EAAY7pP,EAAS,MAAM,WACjC,GAAI6pP,IAAc13L,GAAM03L,GAAW,MAAQ13L,GAAI,IAC7C,OAAOnyD,CAEX,CAGF,MAAMivD,EAAc,IAAI,KAAqB,CAC3C,KAAM,UACN,WAAYkD,EACZ,4BAA6B,KAAQ,KAAiB,EAAE,oBAAoBA,CAAE,GAAG,KAAK,0BACtF,6BAA8B,GAC9B,OAAQ,IAAO,eAAe,aAAe,WAAa,MAC5D,CAAC,EAGD,OAAAuQ,EAAU,SAAS,CACjB,UAAW,CAAC,GAAGA,EAAU,MAAM,UAAWzT,CAAW,CACvD,CAAC,EAEMA,CACT,CAEA,SAAS26L,EAA0BF,EAAiCD,EAA4B,CAM9F,MAAMK,EAAuBJ,EAAU,MAAM,QAAQ,UAClDjsN,GACCA,EAAO,MAAQgsN,EAAU,KAAOhsN,EAAO,QAAUgsN,EAAU,OAAShsN,EAAO,WAAagsN,EAAU,QACtG,EAEA,GAAIK,GAAwB,EAAG,CAC7B,MAAMC,EAAiBL,EAAU,MAAM,QAAQ,MAAM,EACrDK,EAAe,OAAOD,EAAsB,EAAGL,CAAS,EACxDC,EAAU,cAAcK,CAAc,EACtC,MACF,CAGAL,EAAU,cAAc,CAAC,GAAGA,EAAU,MAAM,QAASD,CAAS,CAAC,CACjE,C,0ECnNO,MAAM9sD,EAAY,CAAC,KAAM,aAAc,cAAe,WAAY,KAAM,SAAU,SAAS,EACrFqtD,EAAoB,KAE3BC,EAAoD,IAAM,CAC9D,CACE,MAAO,OACP,WAAY,OACZ,OAAQ,yBACR,iBAAe,KACb,yEACA,2DACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,QACP,WAAY,QACZ,OAAQ,0BACR,iBAAe,KACb,0EACA,2EACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,OACP,WAAY,OACZ,OAAQ,yBACR,iBAAe,KACb,yEACA,yDACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,QACP,WAAY,QACZ,OAAQ,0BACR,iBAAe,KACb,0EACA,yEACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,OACP,WAAY,OACZ,OAAQ,yBACR,iBAAe,KACb,yEACA,4DACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,QACP,WAAY,QACZ,OAAQ,0BACR,iBAAe,KACb,0EACA,4EACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,MACP,WAAY,MACZ,OAAQ,wBACR,iBAAe,KACb,wEACA,wDACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,OACP,WAAY,OACZ,OAAQ,yBACR,iBAAe,KACb,yEACA,mEACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,MACP,WAAY,MACZ,OAAQ,wBACR,iBAAe,KACb,wEACA,sDACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,OACP,WAAY,OACZ,OAAQ,yBACR,iBAAe,KACb,yEACA,iEACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,MACP,WAAY,MACZ,OAAQ,wBACR,iBAAe,KACb,wEACA,yDACA,CAAE,SAAU,GAAI,CAClB,CACF,EACA,CACE,MAAO,OACP,WAAY,OACZ,OAAQ,yBACR,iBAAe,KACb,yEACA,oEACA,CAAE,SAAU,GAAI,CAClB,CACF,CACF,EAEMC,EAAgD,IAAM,CAC1D,CACE,MAAO,MACP,WAAY,MACZ,iBAAe,KACb,oEACA,+BACF,CACF,EACA,CACE,MAAO,MACP,WAAY,MACZ,iBAAe,KACb,oEACA,gCACF,CACF,EACA,CACE,MAAO,MACP,WAAY,MACZ,iBAAe,KACb,oEACA,gCACF,CACF,EACA,CACE,MAAO,MACP,WAAY,MACZ,iBAAe,KACb,oEACA,uCACF,CACF,EACA,CACE,MAAO,QACP,WAAY,QACZ,iBAAe,KACb,sEACA,0CACF,CACF,EACA,CACE,MAAO,SACP,WAAY,SACZ,iBAAe,KACb,uEACA,yDACF,CACF,EACA,CACE,MAAO,SACP,WAAY,SACZ,iBAAe,KACb,uEACA,wDACF,CACF,EACA,CACE,MAAO,QACP,WAAY,QACZ,iBAAe,KACb,sEACA,wCACF,CACF,EACA,CACE,MAAO,eACP,WAAY,eACZ,iBAAe,KACb,6EACA,8CACF,CACF,EACA,CACE,MAAO,UACP,WAAY,UACZ,iBAAe,KACb,wEACA,qCACF,CACF,EACA,CACE,MAAO,OACP,WAAY,OACZ,iBAAe,KACb,qEACA,oCACF,CACF,EACA,CACE,MAAO,WACP,WAAY,WACZ,iBAAe,KACb,yEACA,sEACF,CACF,CACF,EAEaC,EAAe,IAAM,CAChC,GAAGD,EAAsB,EACzB,GAAGD,EAA0B,EAC7B,CACE,WAAY,MACZ,MAAO,MACP,OAAQ,wBACR,iBAAe,KACb,2DACA,oFACF,CACF,EACA,CACE,WAAY,SACZ,MAAO,SACP,OAAQ,2BACR,iBAAe,KACb,8DACA,iQACF,CACF,EACA,CACE,WAAY,mBACZ,MAAO,mBACP,OAAQ,yBACR,iBAAe,KACb,wEACA,qKACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,yBACR,iBAAe,KACb,4DACA,4EACF,CACF,EACA,CACE,WAAY,UACZ,MAAO,UACP,OAAQ,0BACR,iBAAe,KACb,+DACA,8JACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,kDACR,iBAAe,KACb,6DACA,6GACF,CACF,EACA,CACE,WAAY,YACZ,MAAO,YACP,OAAQ,0CACR,iBAAe,KACb,iEACA,kFACF,CACF,EACA,CACE,WAAY,YACZ,MAAO,YACP,OAAQ,0CACR,iBAAe,KACb,iEACA,iFACF,CACF,EACA,CACE,WAAY,eACZ,MAAO,eACP,OAAQ,iCACR,iBAAe,KACb,oEACA,2PACF,CACF,EACA,CACE,WAAY,MACZ,MAAO,MACP,OAAQ,wBACR,iBAAe,KACb,2DACA,mDACF,CACF,EACA,CACE,WAAY,eACZ,MAAO,eACP,OAAQ,gDACR,iBAAe,KACb,oEACA,oGACF,CACF,EACA,CACE,WAAY,cACZ,MAAO,cACP,OAAQ,+CACR,iBAAe,KACb,mEACA,4HACF,CACF,EACA,CACE,WAAY,cACZ,MAAO,cACP,OAAQ,+CACR,iBAAe,KACb,mEACA,mJACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,iDACR,iBAAe,KACb,qEACA,4GACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,wBACR,iBAAe,KACb,6DACA,yXACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,wBACR,iBAAe,KACb,6DACA,gHACF,CACF,EACA,CACE,WAAY,+BACZ,MAAO,+BACP,OAAQ,qEACR,iBAAe,KACb,oFACA,8QACF,CACF,EACA,CACE,WAAY,qBACZ,MAAO,qBACP,OAAQ,qCACR,iBAAe,KACb,0EACA,2FACF,CACF,EACA,CACE,WAAY,MACZ,MAAO,MACP,OAAQ,wBACR,iBAAe,KACb,2DACA,6HACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,0BACR,iBAAe,KACb,6DACA,8EACF,CACF,EACA,CACE,WAAY,qBACZ,MAAO,qBACP,OAAQ,qDACR,iBAAe,KACb,0EACA,obACF,CACF,EACA,CACE,WAAY,eACZ,MAAO,eACP,OAAQ,qDACR,iBAAe,KACb,oEACA,2aACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,wCACR,iBAAe,KACb,4DACA,mGACF,CACF,EACA,CACE,WAAY,SACZ,MAAO,SACP,OAAQ,yBACR,iBAAe,KACb,8DACA,0JACF,CACF,EACA,CACE,WAAY,WACZ,MAAO,WACP,OAAQ,2BACR,iBAAe,KACb,gEACA,wXACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,+DACR,iBAAe,KACb,4DACA,uIACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,wBACR,iBAAe,KACb,6DACA,8OACF,CACF,EACA,CACE,WAAY,aACZ,MAAO,aACP,OACE,gHACF,iBAAe,KACb,kEACA,yOACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,wGACR,iBAAe,KACb,qEACA,meACF,CACF,EACA,CACE,WAAY,KACZ,MAAO,KACP,OAAQ,uBACR,iBAAe,KACb,0DACA,kKACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,yBACR,iBAAe,KACb,4DACA,6GACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,0BACR,iBAAe,KACb,6DACA,8GACF,CACF,EACA,CACE,WAAY,SACZ,MAAO,SACP,OAAQ,0CACR,iBAAe,KACb,8DACA,sGACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,yCACR,iBAAe,KACb,6DACA,gIACF,CACF,EACA,CACE,WAAY,KACZ,MAAO,KACP,OAAQ,OACR,iBAAe,KAAE,0DAA2D,YAAY,CAC1F,EACA,CACE,WAAY,iBACZ,MAAO,iBACP,OAAQ,2CACR,iBAAe,KACb,sEACA,wHACF,CACF,EACA,CACE,WAAY,MACZ,MAAO,MACP,OAAQ,wBACR,iBAAe,KACb,2DACA,mDACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,uBACR,iBAAe,KACb,4DACA,uWACF,CACF,EACA,CACE,WAAY,SACZ,MAAO,SACP,OAAQ,yBACR,iBAAe,KACb,8DACA,6OACF,CACF,EACA,CACE,WAAY,QACZ,MAAO,QACP,OAAQ,+CACR,iBAAe,KACb,6DACA,yQACF,CACF,EACA,CACE,WAAY,SACZ,MAAO,SACP,OAAQ,2BACR,iBAAe,KACb,8DACA,iNACF,CACF,EACA,CACE,WAAY,MACZ,MAAO,MACP,OAAQ,wBACR,iBAAe,KACb,2DACA,wJACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,yBACR,iBAAe,KACb,4DACA,4EACF,CACF,EACA,CACE,WAAY,YACZ,MAAO,YACP,OAAQ,8BACR,iBAAe,KACb,iEACA,6EACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,yBACR,iBAAe,KACb,4DACA,oDACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,SACR,iBAAe,KACb,4DACA,6KACF,CACF,EACA,CACE,WAAY,YACZ,MAAO,YACP,OAAQ,8BACR,iBAAe,KACb,iEACA,sHACF,CACF,EACA,CACE,WAAY,SACZ,MAAO,SACP,OAAQ,mBACR,iBAAe,KACb,8DACA,oDACF,CACF,EACA,CACE,WAAY,OACZ,MAAO,OACP,OAAQ,wCACR,iBAAe,KACb,4DACA,sDACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,8BACR,iBAAe,KACb,qEACA,4DACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,8BACR,iBAAe,KACb,qEACA,4DACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,8BACR,iBAAe,KACb,qEACA,4DACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,8BACR,iBAAe,KACb,qEACA,kDACF,CACF,EACA,CACE,WAAY,kBACZ,MAAO,kBACP,OAAQ,gCACR,iBAAe,KACb,uEACA,oDACF,CACF,EACA,CACE,WAAY,qBACZ,MAAO,qBACP,OAAQ,2CACR,iBAAe,KACb,0EACA,yFACF,CACF,EACA,CACE,WAAY,mBACZ,MAAO,mBACP,OAAQ,iCACR,iBAAe,KACb,wEACA,4EACF,CACF,EACA,CACE,WAAY,mBACZ,MAAO,mBACP,OAAQ,iCACR,iBAAe,KACb,wEACA,2EACF,CACF,EACA,CACE,WAAY,iBACZ,MAAO,iBACP,OAAQ,+BACR,iBAAe,KACb,sEACA,oDACF,CACF,EACA,CACE,WAAY,oBACZ,MAAO,oBACP,OAAQ,kCACR,iBAAe,KACb,yEACA,uDACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,kCACR,iBAAe,KACb,qEACA,+KACF,CACF,EACA,CACE,WAAY,kBACZ,MAAO,kBACP,OAAQ,oCACR,iBAAe,KACb,uEACA,iEACF,CACF,EACA,CACE,WAAY,gBACZ,MAAO,gBACP,OAAQ,kCACR,iBAAe,KACb,qEACA,+DACF,CACF,EACA,CACE,WAAY,qBACZ,MAAO,qBACP,OAAQ,mEACR,iBAAe,KACb,0EACA,6FACF,CACF,EACA,CACE,WAAY,mBACZ,MAAO,mBACP,OAAQ,qCACR,iBAAe,KACb,wEACA,wJACF,CACF,EACA,CACE,WAAY,mBACZ,MAAO,mBACP,OAAQ,qCACR,iBAAe,KACb,wEACA,gFACF,CACF,CACF,EAEaG,EAAyB,CACpC,QAAS,CACP,QAAS,KACX,EACA,sBAAuB,CACrB,QAAS,6BACT,WAAY,GACZ,OAA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AI,OAAS,IAC1CE,IAAY,SAASF,GAAI,KAAK,KAEzBE,EACT,CAGO,SAASC,EAA2BpiiB,GAAe,CACxD,OAAOqiiB,EAAkBriiB,EAAK,EAAIA,GAAQ,KAAKA,EAAK,IACtD,CAMO,SAASqiiB,EAAkB5lf,GAA6B,CAC7D,MAAM8qP,GAAc,6BAA6B,KAAK9qP,EAAU,EAEhE,MAAO,CADgB6lf,EAAe,SAAS7lf,GAAW,YAAY,CAAC,GAC7C8qP,EAC5B,CAGO,SAASg7P,EAAkBviiB,GAAe,CAC/C,OAAIA,GAAM,CAAC,IAAM,KAAOA,GAAMA,GAAM,OAAS,CAAC,IAAM,IAC3CA,GAAM,UAAU,EAAGA,GAAM,OAAS,CAAC,EAAE,QAAQ,MAAO,GAAG,EACrDA,GAAM,CAAC,IAAM,KAAOA,GAAMA,GAAM,OAAS,CAAC,IAAM,IAClDA,GAAM,UAAU,EAAGA,GAAM,OAAS,CAAC,EAEnCA,EAEX,CAEO,SAASwiiB,EAAaxiiB,GAAe,CAC1C,MAAO,IAAMA,GAAM,QAAQ,KAAM,IAAI,EAAI,GAC3C,CAKA,MAAMsiiB,EAAiB,CACrB,aACA,MACA,MACA,QACA,UACA,MACA,KACA,MACA,aACA,SACA,UACA,SACA,SACA,OACA,OACA,KACA,OACA,UACA,OACA,SACA,OACA,YACA,QACA,UACA,SACA,YACA,aACA,WACA,UACA,SACA,QACA,OACA,YACA,eACA,eACA,oBACA,eACA,SACA,WACA,YACA,WACA,kBACA,aACA,aACA,MACA,UACA,UACA,UACA,UACA,SACA,aACA,OACA,WACA,gBACA,WACA,cACA,MACA,SACA,OACA,OACA,OACA,OACA,SACA,QACA,WACA,UACA,SACA,SACA,OACA,UACA,QACA,QACA,cACA,QACA,SACA,SACA,MACA,QACA,UACA,OACA,WACA,WACA,YACA,MACA,QACA,QACA,WACA,SACA,SACA,gBACA,mBACA,cACA,cACA,KACA,SACA,KACA,QACA,SACA,QACA,QACA,cACA,SACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,YACA,WACA,OACA,iBACA,kBACA,KACA,UACA,OACA,aACA,MACA,OACA,OACA,MACA,aACA,UACA,OACA,UACA,QACA,OACA,OACA,QACA,SACA,QACA,OACA,YACA,iBACA,OACA,OACA,WACA,WACA,OACA,eACA,cACA,gCACA,QACA,WACA,aACA,YACA,aACA,YACA,qBACA,gBACA,MACA,WACA,UACA,MACA,qBACA,YACA,QACA,OACA,UACA,KACA,KACA,WACA,kBACA,SACA,aACA,KACA,QACA,MACA,QACA,UACA,OACA,YACA,eACA,YACA,UACA,YACA,QACA,QACA,OACA,OACA,QACA,aACA,OACA,YACA,aACA,SACA,UACA,SACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,QACA,QACA,MACA,OACA,aACA,SACA,UACA,qBACA,SACA,YACA,YACA,MACA,OACA,SACA,WACA,UACA,WACA,MACA,eACA,WACA,aACA,iBACA,sBACA,mBACA,MACA,WACA,SACA,gBACA,SACA,QACA,aACA,OACA,WACA,UACA,WACA,KACA,WACA,UACA,OACA,OACA,QACA,SACA,SACA,WACA,SACA,QACA,MACA,QACA,WACA,WACA,gBACA,SACA,YACA,UACA,eACA,UACA,UACA,OACA,QACA,QACA,SACA,OACA,QACA,MACA,aACA,UACF,E,eCxUO,eAAeG,EAAerqgB,GAA0B7I,GAAqD,CAClH,MAAMR,EAAa,KACnB,GAAI,CAACqJ,GAAM,MACT,MAAO,CAAC,EAGV,MAAMq+N,GAAc,iBAAiBr+N,GAAM,KAAK,WAE1C0gI,GAAgB,MAAM/pI,EAAW,oBACrC,CAAE,OAAQ0nO,GAAa,OAAQ,KAAY,MAAO,MAAO,aAAU,KAAO,CAAC,EAAG,KAC9E,MAAoB,EACpBlnO,GAAQ,OAAQgJ,IAAMA,GAAE,QAAUH,GAAM,KAAK,CAC/C,EACM7zB,GAAQ,IAAIgqI,EAAA,EAAwBuqB,EAAa,EAEjDxiJ,GAAS,OAAO,OAAO/R,GAAM,MAAM,EAAE,IAAI,CAAC,CAAE,KAAA6R,GAAM,KAAAtW,EAAK,KACpD,CACL,KAAAsW,GACA,KAAMA,GACN,MAAOA,GACP,MAAOgshB,EAA2BhshB,EAAI,EACtC,KAAAtW,EACF,EACD,EAED,OAAOgiiB,EAAiBxrhB,EAAM,CAChC,CAGO,MAAMoshB,EAAoB,CAC/B,KACA,WACA,SACA,SACA,MACA,MACA,QACA,MACA,MACA,SACA,MACA,aACA,WACA,UACA,eACA,aACA,OACA,aACA,OACA,MACA,cACA,aACA,MACA,QACA,QACA,UACA,OACA,OACA,MACA,QACA,MACA,MACA,QACA,MACA,OACA,KACA,WACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,OACA,KACA,SACA,SACA,cACA,QACA,QACA,YACA,kBACA,OACA,QACA,QACA,QACA,UACA,UACA,QACA,QACA,MACA,SACA,WACA,QACA,SACA,QACA,MACA,OACA,gBACA,cACA,cACA,WACA,WACA,OACA,QACA,MACA,UACA,WACA,iBACA,gBACA,UACA,OACA,SACA,SACA,UACA,YACA,YACA,aACA,YACA,OACA,UACA,cACA,cACA,gBACA,eACA,OACA,UACA,eACA,cACA,aACA,mBACA,aACA,gBACA,cACA,YACA,YACA,cACA,aACA,eACA,WACA,cACA,eACA,aACF,ECxJaC,EAAsBC,IAA8B,CAC/D,KAAM,CAACC,GAAaC,CAAc,KAAI,YAAiB,EAAE,EACnD,CAACC,GAAmBC,EAAoB,KAAI,YAAS,EAAK,EAC1D,CAACC,GAAgBC,EAAiB,KAAI,YAAiBN,EAAiB,EAMxEO,GAAiBC,IAA2B,CAChDN,EAAeM,EAAc,EAC7BJ,GAAqB,EAAI,CAC3B,EAEMK,GAAwB,IAAML,GAAqB,EAAI,EAEvDM,GAAyB,IAAMN,GAAqB,EAAK,EAMzDO,GAAwBp+L,IAA0B,CACtD+9L,GAAkB/9L,EAAa,EAE/B29L,EAAe,EAAE,CACnB,EAEMU,GAAmB,IAAM,CAC7BV,EAAe,EAAE,EACjBE,GAAqB,EAAK,CAC5B,EAMMS,MAA4B,WAAQ,IACjC,EAAQZ,IAAgBI,KAAmBL,GACjD,CAACC,GAAaI,GAAgBL,EAAiB,CAAC,EAEnD,MAAO,CAEL,YAAAC,GACA,kBAAAE,GACA,eAAA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","sources":["webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableHideSelect.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/access-control.ts","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/VizLegendSeriesIcon.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/config.ts","webpack://grafana/./public/app/features/panel/panellinks/linkSuppliers.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/filterByName.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/convertFieldType.ts","webpack://grafana/./packages/grafana-data/src/utils/legend.ts","webpack://grafana/./packages/grafana-ui/src/components/Gauge/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legacy/Select/IndicatorsContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legacy/Select/NoOptionsMessage.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOptionGroup.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legacy/Switch/Switch.tsx","webpack://grafana/./packages/grafana-ui/src/utils/dom.ts","webpack://grafana/./packages/grafana-ui/src/components/ButtonCascader/ButtonCascader.tsx","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/ColorPickerInput.tsx","webpack://grafana/./packages/grafana-ui/src/components/AutoSaveField/EllipsisAnimated.tsx","webpack://grafana/./packages/grafana-ui/src/components/AutoSaveField/AutoSaveField.tsx","webpack://grafana/./packages/grafana-ui/src/components/Modal/ModalTabContent.tsx","webpack://grafana/./packages/grafana-ui/src/components/TableInputCSV/TableInputCSV.tsx","webpack://grafana/./packages/grafana-ui/src/components/Tabs/VerticalTab.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltip.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/FieldLinkList.tsx","webpack://grafana/./packages/grafana-ui/src/components/Button/FullWidthButtonContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/InfoBox/FeatureInfoBox.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/AlertingSettings.tsx","webpack://grafana/./packages/grafana-ui/src/components/Segment/SegmentInput.tsx","webpack://grafana/./packages/grafana-ui/src/components/Slider/Slider.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/FieldArray.tsx","webpack://grafana/./packages/grafana-ui/src/components/UsersIndicator/UsersIndicator.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/GraphContextMenu.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/utils.ts","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/GraphTooltip/MultiModeGraphTooltip.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/GraphTooltip/SingleModeGraphTooltip.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/GraphTooltip/GraphTooltip.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/Graph.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/GraphWithLegend.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/Graph/GraphSeriesToggler.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/GraphNG/nullInsertThreshold.ts","webpack://grafana/./packages/grafana-ui/src/graveyard/GraphNG/nullToUndefThreshold.ts","webpack://grafana/./packages/grafana-ui/src/graveyard/GraphNG/utils.ts","webpack://grafana/./packages/grafana-ui/src/graveyard/GraphNG/GraphNG.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/TimeSeries/utils.ts","webpack://grafana/./packages/grafana-ui/src/graveyard/TimeSeries/TimeSeries.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/GraphNG/hooks.ts","webpack://grafana/./packages/grafana-ui/src/graveyard/uPlot/plugins/ZoomPlugin.tsx","webpack://grafana/./packages/grafana-ui/src/graveyard/uPlot/plugins/TooltipPlugin.tsx","webpack://grafana/./packages/grafana-ui/src/utils/scrollbar.ts","webpack://grafana/./packages/grafana-ui/src/utils/nodeGraph.ts","webpack://grafana/./packages/grafana-ui/src/utils/logOptions.ts","webpack://grafana/./packages/grafana-ui/src/themes/getTheme.ts","webpack://grafana/./packages/grafana-ui/src/slate-plugins/braces.ts","webpack://grafana/./packages/grafana-ui/src/index.ts","webpack://grafana/./public/app/features/explore/state/datasource.ts","webpack://grafana/./public/app/core/TableModel.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/ensureColumns.ts","webpack://grafana/./packages/grafana-ui/src/components/FeatureBadge/FeatureBadge.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/noop.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/IntervalVariableForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/findSpaceForNewPanel.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/DefaultGridLayoutManager.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/DiffViewer.tsx","webpack://grafana/./public/app/features/users/state/reducers.ts","webpack://grafana/./public/app/core/utils/query.ts","webpack://grafana/./public/app/features/alerting/unified/previewToggles.ts","webpack://grafana/./public/app/core/components/PageNotFound/EntityNotFound.tsx","webpack://grafana/./public/app/features/alerting/unified/components/MetaText.tsx","webpack://grafana/./public/app/features/dashboard-scene/utils/dashboardSceneGraph.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/styles.ts","webpack://grafana/./public/app/features/alerting/unified/api/buildInfo.ts","webpack://grafana/./packages/grafana-data/src/types/app.ts","webpack://grafana/./public/app/features/alerting/unified/components/Provisioning.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformDataFrame.ts","webpack://grafana/./public/app/features/alerting/unified/components/silences/SilenceGrafanaRuleDrawer.tsx","webpack://grafana/./public/vendor/flot/jquery.flot.dashes.js","webpack://grafana/./packages/grafana-ui/src/components/Tooltip/Popover.tsx","webpack://grafana/./public/app/features/alerting/unified/components/WithReturnButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/annotations.ts","webpack://grafana/./public/app/features/explore/state/constants.ts","webpack://grafana/./public/app/features/manage-dashboards/state/reducers.ts","webpack://grafana/./public/app/plugins/datasource/tempo/resultTransformer.ts","webpack://grafana/./packages/grafana-runtime/src/services/templateSrv.ts","webpack://grafana/./public/app/features/alerting/unified/types/pluginBridges.ts","webpack://grafana/./packages/grafana-runtime/src/services/pluginExtensions/getObservablePluginComponents.ts","webpack://grafana/./public/app/api/clients/folder/v1beta1/index.ts","webpack://grafana/./public/app/features/alerting/state/alertDef.ts","webpack://grafana/./packages/grafana-ui/src/components/PanelContainer/PanelContainer.tsx","webpack://grafana/./public/app/features/dashboard-scene/saving/createDetectChangesWorker.ts","webpack://grafana/./public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts","webpack://grafana/./public/app/features/plugins/extensions/ExtensionErrorAlert.tsx","webpack://grafana/./public/app/features/plugins/extensions/ExtensionErrorBoundary.tsx","webpack://grafana/./public/app/features/plugins/extensions/utils.tsx","webpack://grafana/./packages/grafana-ui/src/components/Divider/Divider.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/transformToV1TypesUtils.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/clone.ts","webpack://grafana/./packages/grafana-ui/src/components/Segment/useExpandableLabel.tsx","webpack://grafana/./public/app/features/plugins/components/restrictedGrafanaApis/RestrictedGrafanaApisProvider.tsx","webpack://grafana/./packages/grafana-data/src/utils/object.ts","webpack://grafana/./public/app/features/explore/PrometheusListView/ItemValues.tsx","webpack://grafana/./public/app/features/explore/PrometheusListView/RawListItemAttributes.tsx","webpack://grafana/./public/app/features/explore/PrometheusListView/RawListItem.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/types/DashboardLayoutItem.ts","webpack://grafana/./public/app/core/components/VersionHistory/VersionHistoryComparison.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/version-history/useRestoreVersion.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/version-history/ConfirmVersionRestoreModal.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/version-history/ComparisonDrawer.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/version-history/VersionHistoryTable.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/AlertVersionHistory.tsx","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/constants.ts","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/SecureSocksProxySettings.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleActionsButtons.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/usePluginBridge.ts","webpack://grafana/./public/app/features/dashboard/components/SubMenu/DashboardLinksDashboard.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/VizLegendList.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/VizLegendTableItem.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/VizLegendTable.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/VizLegend.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerFooter.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/CalendarFooter.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/CalendarHeader.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerCalendar.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeContent.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/mapper.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerContent.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/liveTimer.ts","webpack://grafana/./public/app/features/provisioning/hooks/useLastBranch.ts","webpack://grafana/./public/app/features/plugins/admin/helpers.ts","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/conditions/ConditionalRenderingTimeRangeSize.tsx","webpack://grafana/./public/app/api/clients/shorturl/v1alpha1/index.ts","webpack://grafana/./public/app/core/utils/shortLinks.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/nameMatcher.ts","webpack://grafana/./public/app/features/playlist/PlaylistSrv.ts","webpack://grafana/./public/app/core/utils/factors.ts","webpack://grafana/./public/app/features/dashboard/state/DashboardMigrator.ts","webpack://grafana/./public/app/features/expressions/types.ts","webpack://grafana/./public/app/features/expressions/components/Resample.tsx","webpack://grafana/./public/app/features/dataframe-import/utils.ts","webpack://grafana/./public/app/features/plugins/extensions/errors.ts","webpack://grafana/./public/app/features/dimensions/types.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/layoutSerializers/AutoGridLayoutSerializer.ts","webpack://grafana/./public/app/core/components/AppChrome/MegaMenu/hooks.ts","webpack://grafana/./public/app/core/services/StateManagerBase.ts","webpack://grafana/./packages/grafana-ui/src/components/Combobox/useLatestAsyncCall.ts","webpack://grafana/./packages/grafana-ui/src/components/Combobox/useOptions.ts","webpack://grafana/./public/app/features/alerting/unified/state/AlertmanagerContext.tsx","webpack://grafana/./public/app/core/components/AppChrome/NavToolbar/NavToolbarSeparator.tsx","webpack://grafana/./public/app/features/search/hooks/useSearchKeyboardSelection.ts","webpack://grafana/./packages/grafana-data/src/utils/url.ts","webpack://grafana/./packages/grafana-ui/src/components/List/List.tsx","webpack://grafana/./public/app/features/alerting/unified/api/alertingApi.ts","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinkButton.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/WeekStartPicker.tsx","webpack://grafana/./public/app/features/explore/Graph/ExploreGraphLabel.tsx","webpack://grafana/./public/app/features/explore/Graph/utils.ts","webpack://grafana/./public/app/features/explore/Graph/GraphContainer.tsx","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/conditions/serializers.ts","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/group/ConditionalRenderingGroupAdd.tsx","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/group/ConditionalRenderingGroupCondition.tsx","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/group/ConditionalRenderingGroupVisibility.tsx","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/group/ConditionalRenderingGroup.tsx","webpack://grafana/./public/app/features/datasources/components/picker/AddNewDataSourceButton.tsx","webpack://grafana/./public/app/features/alerting/unified/components/DynamicTable.tsx","webpack://grafana/./public/app/features/alerting/unified/components/receivers/grafanaAppReceivers/onCall/onCall.ts","webpack://grafana/./public/app/features/alerting/unified/rule-editor/formProcessing.ts","webpack://grafana/./packages/grafana-runtime/src/services/user.ts","webpack://grafana/./public/app/features/correlations/utils.ts","webpack://grafana/./public/app/features/plugins/loader/systemjs.ts","webpack://grafana/./public/app/types/dashboard.ts","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinksContextMenu.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/layoutSerializers/TabsLayoutSerializer.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/CanvasGridAddActions.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/joinByField.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/predicates.ts","webpack://grafana/./packages/grafana-ui/src/components/ConfirmButton/ConfirmButton.tsx","webpack://grafana/./public/app/features/datasources/components/picker/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/LibraryPanelBehavior.tsx","webpack://grafana/./packages/grafana-data/src/field/getFieldDisplayValuesProxy.ts","webpack://grafana/./packages/grafana-data/src/types/templateVars.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/AlertStatesDataLayer.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/geometries/EventsCanvas.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/responseTransform.ts","webpack://grafana/./public/app/plugins/datasource/zipkin/utils/transforms.ts","webpack://grafana/./public/app/features/inspector/utils/download.ts","webpack://grafana/./packages/grafana-schema/src/raw/composable/stat/panelcfg/x/StatPanelCfg_types.gen.ts","webpack://grafana/./public/app/plugins/datasource/loki/dataquery.gen.ts","webpack://grafana/./public/app/features/dashboard/utils/panelMerge.ts","webpack://grafana/./public/app/features/dashboard/state/utils.ts","webpack://grafana/./public/app/features/dashboard/state/DashboardModel.ts","webpack://grafana/./packages/grafana-ui/src/components/ToolbarButton/ToolbarButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/VersionHistoryHeader.tsx","webpack://grafana/./public/app/features/plugins/extensions/getPluginExtensions.ts","webpack://grafana/./packages/grafana-ui/src/components/Card/Card.tsx","webpack://grafana/./public/app/plugins/datasource/grafana/types.ts","webpack://grafana/./packages/grafana-data/src/utils/matchPluginId.ts","webpack://grafana/./packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.tsx","webpack://grafana/./packages/grafana-ui/src/components/Drawer/Drawer.tsx","webpack://grafana/./packages/grafana-ui/src/utils/colors.ts","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaReceiverExporter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaReceiversExporter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/useExportContactPoint.tsx","webpack://grafana/./public/app/features/inspector/utils/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/options.ts","webpack://grafana/./packages/grafana-ui/src/components/Modal/ModalsContext.tsx","webpack://grafana/./public/app/store/store.ts","webpack://grafana/./packages/grafana-data/src/transformations/standardTransformersRegistry.ts","webpack://grafana/./public/app/features/explore/hooks/utils.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/joinDataFrames.ts","webpack://grafana/./public/app/features/dashboard/services/SnapshotSrv.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/AutoGridLayoutManagerEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/AutoGridLayoutManager.tsx","webpack://grafana/./public/app/features/variables/constants.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/concat.ts","webpack://grafana/./public/app/features/alerting/unified/components/Tokenize.tsx","webpack://grafana/./public/app/features/plugins/extensions/validators.ts","webpack://grafana/./public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx","webpack://grafana/./public/app/core/utils/browser.ts","webpack://grafana/./public/app/features/dashboard-scene/behaviors/DashboardAnalyticsInitializerBehavior.ts","webpack://grafana/./public/app/features/explore/extensions/ToolbarExtensionPointMenu.tsx","webpack://grafana/./public/app/plugins/datasource/dashboard/constants.ts","webpack://grafana/./packages/grafana-data/src/dataframe/FieldCache.ts","webpack://grafana/./public/app/core/components/Footer/Footer.tsx","webpack://grafana/./public/app/features/alerting/unified/components/ConditionalWrap.tsx","webpack://grafana/./public/app/index.ts","webpack://grafana/./public/app/core/utils/object.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/VersionHistoryButtons.tsx","webpack://grafana/./packages/grafana-ui/src/components/TagsInput/TagItem.tsx","webpack://grafana/./packages/grafana-ui/src/components/TagsInput/TagsInput.tsx","webpack://grafana/./public/app/features/explore/utils/supplementaryQueries.ts","webpack://grafana/./public/app/features/alerting/unified/api/annotations.ts","webpack://grafana/./public/app/features/alerting/unified/state/actions.ts","webpack://grafana/./public/app/core/components/PageLoader/PageLoader.tsx","webpack://grafana/./packages/grafana-sql/src/types.ts","webpack://grafana/./public/app/features/explore/state/history.ts","webpack://grafana/./public/app/core/components/TagFilter/TagBadge.tsx","webpack://grafana/./packages/grafana-schema/src/schema/dashboard/v2beta1/types.spec.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/playlist/v0alpha1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/playlist/v0alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/playlist/v0alpha1/index.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/rules/usePendingPeriod.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeOfDayPicker.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/types/BulkActionElement.ts","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/MultiSelectedObjectsEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/ElementSelection.ts","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/DashboardEditPane.tsx","webpack://grafana/./public/app/features/dashboard-scene/saving/shared.tsx","webpack://grafana/./public/app/features/dashboard-scene/saving/useSaveDashboard.ts","webpack://grafana/./public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx","webpack://grafana/./public/app/features/provisioning/hooks/useCreateOrUpdateRepositoryFile.ts","webpack://grafana/./public/app/features/provisioning/components/utils/getProvisionedMeta.ts","webpack://grafana/./public/app/features/provisioning/components/Dashboards/SaveProvisionedDashboardForm.tsx","webpack://grafana/./public/app/features/provisioning/components/Dashboards/SaveProvisionedDashboard.tsx","webpack://grafana/./public/app/features/provisioning/hooks/useIsProvisionedNG.ts","webpack://grafana/./public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/saving/SaveProvisionedDashboardForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/saving/SaveDashboardDrawer.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/DashboardSceneSerializer.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/DashboardModelCompatibilityWrapper.ts","webpack://grafana/./public/app/features/dashboard-scene/v2schema/SchemaV2EditorDrawer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/AddLibraryPanelDrawer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/types/DashboardDropTarget.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardLayoutOrchestrator.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/useOutlineRename.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/DashboardOutline.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/EditPaneHeader.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/ElementEditPane.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/useEditableElement.ts","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/DashboardEditPaneRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/DashboardEditPaneSplitter.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/PanelSearchLayout.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardSceneRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/EditListViewSceneUrlSync.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/annotations/AnnotationSettingsEdit.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/annotations/AnnotationSettingsList.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/AnnotationsEditView.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/DashboardLinksEditView.tsx","webpack://grafana/./public/app/features/provisioning/components/Dashboards/MoveProvisionedDashboardForm.tsx","webpack://grafana/./public/app/features/provisioning/components/Dashboards/MoveProvisionedDashboardDrawer.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/GeneralSettingsEditView.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/JsonModelEditView.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/PermissionsEditView.tsx","webpack://grafana/./public/app/features/dashboard-scene/variables/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableTypeSelect.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/VariableEditorForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/variables/VariablesDependenciesButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/variables/VariableUsagesButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/VariableEditorListRow.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/VariableEditorList.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/VariablesUnknownTable.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/VariablesEditView.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/RevertDashboardModal.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/VersionHistoryComparison.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/VersionHistoryTable.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/VersionsEditView.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardSceneUrlSync.ts","webpack://grafana/./public/app/core/services/KeybindingSet.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/pathId.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/keyboardShortcuts.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardScene.tsx","webpack://grafana/./packages/grafana-data/src/field/displayProcessor.ts","webpack://grafana/./public/app/features/dashboard/services/DashboardAnalyticsAggregator.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useHasRuler.ts","webpack://grafana/./public/app/features/dashboard-scene/addToDashboard/addPanelsOnLoadBehavior.ts","webpack://grafana/./public/app/features/library-panels/utils.ts","webpack://grafana/./public/app/features/library-panels/utils/usePanelSave.ts","webpack://grafana/./public/app/core/reducers/appNotification.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/UnlinkModal.tsx","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/ColorInput.tsx","webpack://grafana/./public/app/plugins/panel/timeseries/config.ts","webpack://grafana/./public/app/plugins/datasource/loki/types.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/utils.ts","webpack://grafana/./public/app/core/services/mousetrap/Mousetrap.ts","webpack://grafana/./public/app/core/services/mousetrap/index.ts","webpack://grafana/./public/app/features/provisioning/Job/JobSummary.tsx","webpack://grafana/./packages/grafana-ui/src/components/List/InlineList.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/FieldValidationMessage.tsx","webpack://grafana/./packages/grafana-ui/src/utils/useCombinedRefs.ts","webpack://grafana/./packages/grafana-ui/src/components/FilterInput/FilterInput.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useIsRuleEditable.ts","webpack://grafana/./public/app/core/internationalization/dates.ts","webpack://grafana/./packages/grafana-data/src/utils/binaryOperators.ts","webpack://grafana/./packages/grafana-ui/src/components/UnitPicker/UnitPicker.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/utils.tsx","webpack://grafana/./packages/grafana-data/src/utils/anyToNumber.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/getVariablesCompatibility.ts","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/ColorSwatch.tsx","webpack://grafana/./packages/grafana-ui/src/components/Monaco/utils.ts","webpack://grafana/./public/app/features/dashboard/services/performanceConstants.ts","webpack://grafana/./public/app/features/transformers/calculateHeatmap/editor/AxisEditor.tsx","webpack://grafana/./public/app/features/transformers/calculateHeatmap/editor/helper.ts","webpack://grafana/./public/app/features/serviceaccounts/state/reducers.ts","webpack://grafana/./public/app/features/plugins/admin/types.ts","webpack://grafana/./public/app/core/components/Page/PageContents.tsx","webpack://grafana/./public/app/core/components/PageInfo/PageInfo.tsx","webpack://grafana/./public/app/core/components/Page/EditableTitle.tsx","webpack://grafana/./public/app/core/components/Page/PageHeader.tsx","webpack://grafana/./public/app/core/components/Page/PageTabs.tsx","webpack://grafana/./public/app/core/components/Page/usePageNav.ts","webpack://grafana/./public/app/core/components/Page/usePageTitle.ts","webpack://grafana/./public/app/core/components/Page/Page.tsx","webpack://grafana/./packages/grafana-ui/src/components/Tabs/TabContent.tsx","webpack://grafana/./packages/grafana-ui/src/components/Layout/Grid/Grid.tsx","webpack://grafana/./public/app/features/dashboard/api/UnifiedDashboardAPI.ts","webpack://grafana/./public/app/features/dashboard/api/legacy.ts","webpack://grafana/./public/app/features/dashboard/api/dashboard_api.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/CloneRule.tsx","webpack://grafana/./packages/grafana-ui/src/options/builder/text.tsx","webpack://grafana/./packages/grafana-ui/src/utils/closePopover.ts","webpack://grafana/./public/app/features/dashboard/components/Inspector/hooks.ts","webpack://grafana/./packages/grafana-runtime/src/components/PanelDataErrorView.tsx","webpack://grafana/./packages/grafana-data/src/utils/nodeGraph.ts","webpack://grafana/./public/app/features/plugins/loader/pluginInfoCache.ts","webpack://grafana/./packages/grafana-data/src/table/amendTimeSeries.ts","webpack://grafana/./public/app/features/browse-dashboards/api/browseDashboardsAPI.ts","webpack://grafana/./packages/grafana-ui/src/components/Dropdown/ButtonSelect.tsx","webpack://grafana/./public/app/features/alerting/unified/reducers/alertmanager/receivers.ts","webpack://grafana/./public/app/features/alerting/unified/utils/time.ts","webpack://grafana/./public/app/features/alerting/unified/utils/alertmanager/extraConfigs.ts","webpack://grafana/./public/app/features/explore/LimitedDataDisclaimer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/types/LayoutParent.ts","webpack://grafana/./public/app/core/components/CloseButton/CloseButton.tsx","webpack://grafana/./packages/grafana-data/src/context/plugins/RestrictedGrafanaApis.tsx","webpack://grafana/./public/app/features/provisioning/Repository/PullRequestButtons.tsx","webpack://grafana/./public/app/features/provisioning/Repository/RepositoryLink.tsx","webpack://grafana/./public/app/features/provisioning/Shared/ProgressBar.tsx","webpack://grafana/./public/app/features/provisioning/Job/JobContent.tsx","webpack://grafana/./public/app/features/provisioning/Job/FinishedJobStatus.tsx","webpack://grafana/./public/app/features/provisioning/Job/JobStatus.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/ShareMenu.tsx","webpack://grafana/./packages/grafana-ui/src/slate-plugins/clear.ts","webpack://grafana/./public/app/features/alerting/unified/components/common/TextVariants.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/MinimalisticPagination.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenerationHistoryCarousel.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/QuickFeedback.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/hooks.ts","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenAIHistory.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenAIButton.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/RadioButtonList/RadioButtonList.tsx","webpack://grafana/./packages/grafana-data/src/panel/PanelPlugin.ts","webpack://grafana/./public/app/plugins/datasource/grafana/components/TimeRegionEditor.tsx","webpack://grafana/./public/app/plugins/datasource/grafana/components/AnnotationQueryEditor.tsx","webpack://grafana/./public/app/core/utils/timeRegions.ts","webpack://grafana/./public/app/plugins/datasource/grafana/timeRegions.ts","webpack://grafana/./public/app/plugins/datasource/grafana/datasource.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/geometries/XYCanvas.tsx","webpack://grafana/./packages/grafana-data/src/field/fieldState.ts","webpack://grafana/./public/app/features/transformers/calculateHeatmap/utils.ts","webpack://grafana/./public/app/features/alerting/unified/components/Well.tsx","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/user/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/user/baseAPI.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useAbilities.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/FieldSet.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/statetimeline/panelcfg/x/StateTimelinePanelCfg_types.gen.ts","webpack://grafana/./public/app/features/plugins/built_in_plugins.ts","webpack://grafana/./public/app/features/plugins/sandbox/codeLoader.ts","webpack://grafana/./public/app/features/plugins/sandbox/constants.ts","webpack://grafana/./public/app/features/plugins/sandbox/utils.ts","webpack://grafana/./public/app/features/plugins/sandbox/documentSandbox.ts","webpack://grafana/./public/app/features/plugins/sandbox/distortions.ts","webpack://grafana/./public/app/features/plugins/sandbox/sandboxComponents.tsx","webpack://grafana/./public/app/features/plugins/sandbox/sandboxPluginLoader.ts","webpack://grafana/./public/app/features/plugins/sandbox/sandboxPluginLoaderRegistry.ts","webpack://grafana/./public/app/features/plugins/importer/addTranslationsToI18n.ts","webpack://grafana/./public/app/features/plugins/importer/importPluginModule.ts","webpack://grafana/./public/app/features/plugins/importer/pluginImporter.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/addNew.ts","webpack://grafana/./public/app/features/dashboard/utils/panel.ts","webpack://grafana/./public/app/features/transformers/suggestionsInput/SuggestionsInput.tsx","webpack://grafana/./public/app/features/alerting/unified/plugins/PluginOriginBadge.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/layoutSerializers/DefaultGridLayoutSerializer.ts","webpack://grafana/./public/app/features/alerting/unified/components/templates/permissions.ts","webpack://grafana/./packages/grafana-data/src/dataframe/utils.ts","webpack://grafana/./packages/grafana-data/src/context/plugins/guards.ts","webpack://grafana/./public/app/features/folders/state/reducers.ts","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/SaveLibraryVizPanelModal.tsx","webpack://grafana/./public/app/features/variables/editor/reducer.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/dashboardSessionState.ts","webpack://grafana/./public/app/features/dashboard-scene/saving/getDashboardChanges.ts","webpack://grafana/./public/app/plugins/panel/timeseries/InsertNullsEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/InlineField.tsx","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/SnapshotWorker.ts","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/FieldValueMatcher.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/row-actions/RowOptionsForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/row-actions/RowOptionsModal.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/row-actions/RowOptionsButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/row-actions/RowActionsRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/row-actions/RowActions.tsx","webpack://grafana/./public/app/features/expressions/components/Math.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableValuesPreview.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useFolder.ts","webpack://grafana/./public/app/features/datasources/state/reducers.ts","webpack://grafana/./public/app/core/components/Select/SortPicker.tsx","webpack://grafana/./packages/grafana-data/src/types/valueMapping.ts","webpack://grafana/./public/app/core/components/Breadcrumbs/utils.ts","webpack://grafana/./public/app/plugins/datasource/mixed/MixedDataSource.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/plugins/EventBusPlugin.tsx","webpack://grafana/./packages/grafana-data/src/utils/fieldParser.ts","webpack://grafana/./packages/grafana-data/src/dataframe/MutableDataFrame.ts","webpack://grafana/./public/app/features/alerting/unified/styles/pagination.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/createPanelDataProvider.ts","webpack://grafana/./public/app/core/utils/navBarItem-translations.ts","webpack://grafana/./public/app/features/playlist/utils.ts","webpack://grafana/./packages/grafana-o11y-ds-frontend/src/combineResponses.ts","webpack://grafana/./public/app/features/explore/utils/decorators.ts","webpack://grafana/./public/app/features/explore/state/query.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/HistorySrv.ts","webpack://grafana/./public/vendor/flot/jquery.flot.gauge.js","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/folder/v1beta1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/folder/v1beta1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/folder/v1beta1/index.ts","webpack://grafana/./public/app/core/components/OptionsUI/NumberInput.tsx","webpack://grafana/./public/app/features/dimensions/resource.ts","webpack://grafana/./public/app/core/actions/cleanUp.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/utils.ts","webpack://grafana/./public/app/features/alerting/unified/utils/fuzzySearch.ts","webpack://grafana/./public/app/features/alerting/unified/utils/rule-form.ts","webpack://grafana/./public/app/features/alerting/unified/utils/amroutes.ts","webpack://grafana/./packages/grafana-ui/src/components/Typeahead/PartialHighlighter.tsx","webpack://grafana/./public/app/features/explore/state/selectors.ts","webpack://grafana/./packages/grafana-ui/src/utils/debug.ts","webpack://grafana/./public/app/features/explore/extensions/ConfirmNavigationModal.tsx","webpack://grafana/./packages/grafana-data/src/context/plugins/PluginContextProvider.tsx","webpack://grafana/./packages/grafana-ui/src/components/Link/Link.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useURLSearchParams.ts","webpack://grafana/./packages/grafana-ui/src/components/Slider/HandleTooltip.tsx","webpack://grafana/./packages/grafana-ui/src/components/Slider/RangeSlider.tsx","webpack://grafana/./packages/grafana-ui/src/components/Cascader/styles.ts","webpack://grafana/./public/app/core/components/NavLandingPage/NavLandingPageCard.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/version-history/versions-utils.tsx","webpack://grafana/./public/app/core/components/OptionsUI/slider.tsx","webpack://grafana/./packages/grafana-ui/src/slate-plugins/newline.ts","webpack://grafana/./packages/grafana-schema/src/raw/dashboard/x/dashboard_types.gen.ts","webpack://grafana/./packages/grafana-ui/src/components/Switch/Switch.tsx","webpack://grafana/./packages/grafana-ui/src/utils/skeleton.tsx","webpack://grafana/./packages/grafana-ui/src/components/FormattedValueDisplay/FormattedValueDisplay.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelEditControls.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardLinkRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/VariableControlsAddButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/VariableControls.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardControlsMenu.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardDataLayerControls.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardLinksControls.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardControls.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/usePanelCombinedRules.ts","webpack://grafana/./public/app/plugins/panel/alertlist/types.ts","webpack://grafana/./public/app/features/dashboard/services/performanceUtils.ts","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenAIPanelDescriptionButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/utils/urlBuilders.ts","webpack://grafana/./packages/grafana-runtime/src/services/pluginExtensions/utils.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/getPanelFrameOptions.tsx","webpack://grafana/./public/app/features/dashboard/services/DashboardSrv.ts","webpack://grafana/./public/app/features/plugins/components/PluginErrorBoundary.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/k8s/constants.ts","webpack://grafana/./packages/grafana-ui/src/components/JSONFormatter/json_explorer/helpers.ts","webpack://grafana/./packages/grafana-ui/src/components/JSONFormatter/json_explorer/json_explorer.ts","webpack://grafana/./public/app/plugins/datasource/grafana/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Modal/Modal.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/types.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleConfigStatus.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleHealth.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleState.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RulesTable.tsx","webpack://grafana/./public/app/features/query/components/QueryActionComponent.ts","webpack://grafana/./packages/grafana-schema/src/raw/composable/piechart/panelcfg/x/PieChartPanelCfg_types.gen.ts","webpack://grafana/./public/app/features/actions/ActionVariablesEditor.tsx","webpack://grafana/./public/app/features/actions/ConnectionPicker.tsx","webpack://grafana/./public/app/features/actions/ParamsEditor.tsx","webpack://grafana/./public/app/features/actions/ActionEditor.tsx","webpack://grafana/./public/app/features/actions/ActionEditorModalContent.tsx","webpack://grafana/./public/app/features/actions/ActionsInlineEditor.tsx","webpack://grafana/./public/app/core/utils/timePicker.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/panel-timerange/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/panel-timerange/PanelTimeRange.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useCombinedRuleNamespaces.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/interactions.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/ruleGroup/useUpsertRuleFromRuleGroup.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/config/UPlotAxisBuilder.ts","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/DataProviderSharer.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/NewAlertRuleButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/types.ts","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataAlertingTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataQueriesTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/TransformationsDrawer.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataTransformationsTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/useScrollReflowLimit.ts","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelEditorRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelOptions.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/interaction.ts","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelVizTypePicker.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelOptionsPane.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/SecretFormField/SecretFormField.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/ConstantVariableForm.tsx","webpack://grafana/./public/app/features/alerting/unified/components/silences/MatchersField.tsx","webpack://grafana/./public/app/features/alerting/unified/components/silences/SilencePeriod.tsx","webpack://grafana/./public/app/features/alerting/unified/components/silences/SilencedInstancesPreview.tsx","webpack://grafana/./public/app/features/alerting/unified/components/silences/SilencesEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ShareEmbed.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/hooks.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/reducer.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/FilterList.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/FilterPopup.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/Filter.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/HeaderRow.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/ExpandedRow.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/RowsList.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/Table.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsView/reducer.ts","webpack://grafana/./public/app/core/components/FolderFilter/FolderFilter.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch.tsx","webpack://grafana/./packages/grafana-alerting/src/grafana/matchers/utils.ts","webpack://grafana/./public/app/features/alerting/unified/utils/alertmanager.ts","webpack://grafana/./public/app/types/unified-alerting-dto.ts","webpack://grafana/./public/app/features/alerting/unified/components/Authorize.tsx","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/components/UnusedBadge.tsx","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/ContactPointHeader.tsx","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/components/Modals.tsx","webpack://grafana/./public/app/plugins/datasource/alertmanager/consts.ts","webpack://grafana/./public/app/features/alerting/unified/types/contact-points.ts","webpack://grafana/./public/app/features/alerting/unified/components/receivers/grafanaAppReceivers/ReceiverMetadataBadge.tsx","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/ContactPoint.tsx","webpack://grafana/./packages/grafana-runtime/src/services/CorrelationsService.ts","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaExportDrawer.tsx","webpack://grafana/./public/app/features/dashboard/components/AddPanelButton/AddPanelMenu.tsx","webpack://grafana/./public/app/features/dashboard/components/AddPanelButton/AddPanelButton.tsx","webpack://grafana/./public/app/features/dashboard/components/DashNav/ShareButton.tsx","webpack://grafana/./public/app/features/dashboard/components/DashNav/DashNav.tsx","webpack://grafana/./public/app/features/variables/adhoc/reducer.ts","webpack://grafana/./public/app/core/services/echo/utils.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/groupToNestedTable.ts","webpack://grafana/./packages/grafana-sql/src/utils/sql.utils.ts","webpack://grafana/./packages/grafana-schema/src/raw/composable/news/panelcfg/x/NewsPanelCfg_types.gen.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableTextAreaField.tsx","webpack://grafana/./packages/grafana-ui/src/components/Menu/MenuDivider.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/DynamicConfigValueEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OverrideCategoryTitle.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/getFieldOverrideElements.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/AutoGridItemEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/AutoGridItemRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/AutoGridItem.tsx","webpack://grafana/./packages/grafana-runtime/src/utils/logging.ts","webpack://grafana/./public/app/features/alerting/unified/components/TimeRangeLabel.tsx","webpack://grafana/./packages/grafana-data/src/dataframe/dimensions.ts","webpack://grafana/./public/app/features/connections/constants.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/export/exporters.ts","webpack://grafana/./public/app/features/inspector/types.ts","webpack://grafana/./packages/grafana-ui/src/components/InputControl.tsx","webpack://grafana/./public/app/features/browse-dashboards/api/services.ts","webpack://grafana/./packages/grafana-sql/src/components/visual-query-builder/Preview.tsx","webpack://grafana/./public/app/features/teams/state/reducers.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/DashboardLayoutSelector.tsx","webpack://grafana/./packages/grafana-data/src/types/scopes.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneTitle.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/DateTimePicker/DateTimePicker.tsx","webpack://grafana/./public/app/features/provisioning/hooks/useIsProvisionedInstance.ts","webpack://grafana/./packages/grafana-data/src/dataframe/ArrayDataFrame.ts","webpack://grafana/./packages/grafana-runtime/src/analytics/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/InteractiveTable/Expander/index.tsx","webpack://grafana/./packages/grafana-ui/src/components/InteractiveTable/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/InteractiveTable/InteractiveTable.tsx","webpack://grafana/./packages/grafana-ui/src/utils/featureToggle.ts","webpack://grafana/./public/app/features/variables/inspect/NetworkGraph.tsx","webpack://grafana/./public/app/features/variables/inspect/NetworkGraphModal.tsx","webpack://grafana/./public/app/features/alerting/unified/components/MoreButton.tsx","webpack://grafana/./public/app/features/admin/ldap/LdapUserGroups.tsx","webpack://grafana/./public/app/features/admin/ldap/LdapUserMappingInfo.tsx","webpack://grafana/./public/app/features/admin/ldap/LdapUserPermissions.tsx","webpack://grafana/./public/app/features/admin/ldap/LdapUserTeams.tsx","webpack://grafana/./public/app/features/admin/ldap/LdapUserInfo.tsx","webpack://grafana/./public/app/core/context/GrafanaContext.ts","webpack://grafana/./packages/grafana-data/src/types/data.ts","webpack://grafana/./public/app/features/alerting/unified/components/permissions/ManagePermissions.tsx","webpack://grafana/./public/app/features/plugins/extensions/ExtensionRegistriesContext.tsx","webpack://grafana/./public/app/features/alerting/unified/RuleViewer.tsx","webpack://grafana/./public/app/features/alerting/unified/components/PluginBridge.tsx","webpack://grafana/./packages/grafana-ui/src/utils/file.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/TableCell.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/QueryVariableForm.tsx","webpack://grafana/./public/app/features/dimensions/text.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/preferences/v1alpha1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/preferences/v1alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/preferences/v1alpha1/index.ts","webpack://grafana/./packages/grafana-data/src/utils/docs.ts","webpack://grafana/./public/app/features/plugins/datasource_srv.ts","webpack://grafana/./public/app/core/store.ts","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ThemePicker.tsx","webpack://grafana/./packages/grafana-data/src/types/pluginSignature.ts","webpack://grafana/./public/app/features/expressions/ExpressionQueryEditor.tsx","webpack://grafana/./public/app/features/expressions/ExpressionDatasource.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/AutoGridLayoutRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/AutoGridLayout.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/navigation.ts","webpack://grafana/./public/app/features/alerting/unified/utils/rules.ts","webpack://grafana/./public/app/features/provisioning/components/utils/path.ts","webpack://grafana/./public/app/features/provisioning/hooks/useProvisionedDashboardData.ts","webpack://grafana/./public/app/core/internationalization/constants.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/UnconfiguredPanel.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/RuleInspector.tsx","webpack://grafana/./public/app/plugins/panel/news/atom.ts","webpack://grafana/./public/app/plugins/panel/news/rss.ts","webpack://grafana/./public/app/plugins/panel/news/feed.ts","webpack://grafana/./public/app/plugins/panel/news/utils.ts","webpack://grafana/./public/app/plugins/panel/news/useNewsFeed.tsx","webpack://grafana/./public/app/features/library-panels/state/api.ts","webpack://grafana/./public/app/core/components/AppChrome/MegaMenu/utils.ts","webpack://grafana/./public/app/features/explore/QueryLibrary/types.ts","webpack://grafana/./public/app/features/explore/QueryLibrary/QueryLibraryContext.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-tabs/TabItemEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-tabs/TabItems.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-tabs/TabItem.tsx","webpack://grafana/./public/app/core/components/SVG/utils.ts","webpack://grafana/./public/app/core/components/SVG/SanitizedSVG.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/SaveDashboardDiff.tsx","webpack://grafana/./packages/grafana-ui/src/components/Menu/MenuGroup.tsx","webpack://grafana/./packages/grafana-schema/src/veneer/common.types.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts","webpack://grafana/./packages/grafana-prometheus/src/utf8_support.ts","webpack://grafana/./packages/grafana-ui/src/components/Actions/ActionButton.tsx","webpack://grafana/./public/vendor/flot/jquery.flot.stack.js","webpack://grafana/./packages/grafana-data/src/context/plugins/usePluginContext.tsx","webpack://grafana/./public/app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/useChromeHeaderHeight.ts","webpack://grafana/./public/app/core/components/PluginHelp/PluginHelp.tsx","webpack://grafana/./public/app/features/query/components/QueryGroupOptions.tsx","webpack://grafana/./public/app/features/query/components/QueryGroup.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/reduce.ts","webpack://grafana/./public/vendor/flot/jquery.flot.time.js","webpack://grafana/./public/app/features/dashboard/services/ScenePerformanceLogger.ts","webpack://grafana/./public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/dashboard/v0alpha1/baseAPI.ts","webpack://grafana/./public/app/features/annotations/events_processing.ts","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.ts","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/LegacyAnnotationQueryRunner.ts","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/AnnotationsWorker.ts","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/UnifiedAlertStatesWorker.ts","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/DashboardQueryRunner.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableLegend.tsx","webpack://grafana/./public/app/plugins/panel/timeseries/LineStyleEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/PanelLinks.tsx","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/SpectrumPalette.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/object.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/Checkbox.tsx","webpack://grafana/./packages/grafana-ui/src/components/Layout/Layout.tsx","webpack://grafana/./packages/grafana-data/src/types/legacyEvents.ts","webpack://grafana/./packages/grafana-runtime/src/services/pluginExtensions/usePluginComponent.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/merge.ts","webpack://grafana/./packages/grafana-ui/src/components/Input/AutoSizeInput.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/SceneGridRowEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/types/EditableDashboardElement.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/LocalVariableEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/useVariableSelectionOptionsCategory.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/VariableEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/VariableSetEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/EditSchemaV2Button.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/DashboardEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/MultiSelectedVizPanelsEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/VizPanelEditableElement.tsx","webpack://grafana/./public/app/features/dashboard-scene/edit-pane/shared.ts","webpack://grafana/./packages/grafana-runtime/src/services/live.ts","webpack://grafana/./packages/grafana-ui/src/utils/squares.ts","webpack://grafana/./packages/grafana-ui/src/components/VizRepeater/VizRepeater.tsx","webpack://grafana/./public/app/features/dashboard-scene/utils/PanelModelCompatibilityWrapper.ts","webpack://grafana/./packages/grafana-data/src/types/thresholds.ts","webpack://grafana/./packages/grafana-runtime/src/services/pluginExtensions/usePluginComponents.ts","webpack://grafana/./packages/grafana-ui/src/components/Combobox/types.ts","webpack://grafana/./packages/grafana-runtime/src/services/pluginExtensions/usePluginFunctions.ts","webpack://grafana/./packages/grafana-runtime/src/analytics/types.ts","webpack://grafana/./packages/grafana-data/src/utils/namedColorsPalette.ts","webpack://grafana/./public/app/features/alerting/unified/utils/k8s/errors.ts","webpack://grafana/./packages/grafana-ui/src/components/StatsPicker/StatsPicker.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/PanelNotSupported.tsx","webpack://grafana/./public/app/core/utils/docsLinks.ts","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationPicker.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/Pagination/Pagination.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/HelpWizard/randomizer.ts","webpack://grafana/./public/app/features/dashboard/components/DashNav/DashNavButton.tsx","webpack://grafana/./packages/grafana-ui/src/components/FilterPill/FilterPill.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/VariableAddEditableElement.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/nulls/nullToValue.ts","webpack://grafana/./public/app/core/components/Select/ServiceAccountPicker.tsx","webpack://grafana/./public/app/core/components/Select/TeamPicker.tsx","webpack://grafana/./public/app/core/components/Select/UserPicker.tsx","webpack://grafana/./public/app/core/components/AccessControl/types.ts","webpack://grafana/./public/app/core/components/AccessControl/AddPermission.tsx","webpack://grafana/./public/app/core/components/AccessControl/PermissionListItem.tsx","webpack://grafana/./public/app/core/components/AccessControl/PermissionList.tsx","webpack://grafana/./public/app/core/components/AccessControl/Permissions.tsx","webpack://grafana/./public/app/features/provisioning/hooks/useProvisionedRequestHandler.ts","webpack://grafana/./public/app/core/components/NestedFolderPicker/utils.ts","webpack://grafana/./packages/grafana-prometheus/src/constants.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/DiffValues.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/DiffTitle.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/DiffGroup.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneDescription.tsx","webpack://grafana/./public/app/features/profile/state/selectors.ts","webpack://grafana/./packages/grafana-ui/src/components/Alert/Alert.tsx","webpack://grafana/./packages/grafana-ui/src/components/Layout/Space.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SupportedPubdashDatasources.ts","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/NoUpsertPermissionsAlert.tsx","webpack://grafana/./public/app/core/components/NestedFolderPicker/Skeleton.tsx","webpack://grafana/./public/app/features/explore/state/main.ts","webpack://grafana/./public/app/features/panel/components/PanelRenderer.tsx","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx","webpack://grafana/./packages/grafana-ui/src/utils/slate.ts","webpack://grafana/./packages/grafana-data/src/dataframe/CircularDataFrame.ts","webpack://grafana/./public/app/features/alerting/unified/components/GrafanaAlertmanagerWarning.tsx","webpack://grafana/./packages/grafana-ui/src/components/Modal/getModalStyles.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/setDashboardPanelContext.ts","webpack://grafana/./packages/grafana-prometheus/src/promql.ts","webpack://grafana/./packages/grafana-data/src/utils/makeClassES5Compatible.ts","webpack://grafana/./public/app/features/search/utils.ts","webpack://grafana/./packages/grafana-data/src/utils/valueMappings.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/types.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/utils.ts","webpack://grafana/./public/app/features/alerting/unified/utils/redux.ts","webpack://grafana/./packages/grafana-ui/src/components/ToolbarButton/ToolbarButtonRow.tsx","webpack://grafana/./packages/grafana-ui/src/components/ErrorBoundary/ErrorBoundary.tsx","webpack://grafana/./packages/grafana-ui/src/utils/usePointerDistance.ts","webpack://grafana/./packages/grafana-data/src/field/thresholds.ts","webpack://grafana/./packages/grafana-runtime/src/services/LocationService.tsx","webpack://grafana/./packages/grafana-runtime/src/utils/publicDashboardQueryHandler.ts","webpack://grafana/./packages/grafana-runtime/src/utils/DataSourceWithBackend.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardDatasourceBehaviour.tsx","webpack://grafana/./packages/grafana-data/src/transformations/matchers/fieldTypeMatcher.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/fieldValueMatcher.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/refIdMatcher.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/simpleFieldMatcher.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/valueMatchers/equalMatchers.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/valueMatchers/nullMatchers.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/valueMatchers/numericMatchers.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/valueMatchers/rangeMatchers.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/valueMatchers/regexMatchers.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers.ts","webpack://grafana/./packages/grafana-sql/src/expressions.ts","webpack://grafana/./packages/grafana-data/src/events/eventFactory.ts","webpack://grafana/./public/app/features/alerting/unified/components/AlertManagerPicker.tsx","webpack://grafana/./public/app/features/alerting/unified/components/NoAlertManagerWarning.tsx","webpack://grafana/./public/app/features/alerting/unified/components/AlertingPageWrapper.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/DashboardValidation.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenAIDashboardChangesButton.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardForm.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/forms/SaveProvisionedDashboardForm.tsx","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/SaveDashboardDrawer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/UnlinkLibraryPanelModal.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx","webpack://grafana/./public/app/core/navigation/errorModels.ts","webpack://grafana/./public/app/features/plugins/components/AppRootPage.tsx","webpack://grafana/./public/app/features/plugins/routes.tsx","webpack://grafana/./public/app/core/utils/colors.ts","webpack://grafana/./public/app/features/logs/logsModel.ts","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx","webpack://grafana/./public/app/features/plugins/admin/state/actions.ts","webpack://grafana/./public/app/core/services/echo/EchoSrv.ts","webpack://grafana/./public/app/core/utils/metrics.ts","webpack://grafana/./packages/grafana-data/src/panel/registryFactories.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/Field.tsx","webpack://grafana/./public/app/features/plugins/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Tags/TagList.tsx","webpack://grafana/./public/app/features/library-panels/styles.ts","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/UnsupportedDataSourcesAlert.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/AdHocFiltersVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/ConstantVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/CustomVariableEditor/ValuesBuilder.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/CustomVariableEditor/ValuesPreview.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/CustomVariableEditor/ModalEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/CustomVariableEditor/PaneItem.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/CustomVariableEditor/CustomVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/CustomVariableEditor/getCustomVariableOptions.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/DataSourceVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/GroupByVariableForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/GroupByVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/IntervalVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/QueryVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/SwitchVariableForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/SwitchVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/TextBoxVariableForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/editors/TextBoxVariableEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/utils.ts","webpack://grafana/./public/app/features/dashboard/components/GenAI/tracking.ts","webpack://grafana/./packages/grafana-ui/src/components/Segment/styles.ts","webpack://grafana/./public/app/features/dashboard/state/reducers.ts","webpack://grafana/./public/app/features/datasources/constants.ts","webpack://grafana/./public/app/api/clients/preferences/v1alpha1/index.ts","webpack://grafana/./packages/grafana-data/src/utils/dataLinks.ts","webpack://grafana/./public/app/features/alerting/unified/components/HoverCard.tsx","webpack://grafana/./public/app/features/alerting/unified/components/expressions/ExpressionStatusIndicator.tsx","webpack://grafana/./public/app/core/reducers/navBarTree.ts","webpack://grafana/./public/app/features/variables/state/reducers.ts","webpack://grafana/./public/app/plugins/datasource/cloudwatch/dataquery.gen.ts","webpack://grafana/./packages/grafana-runtime/src/utils/migrationHandler.ts","webpack://grafana/./packages/grafana-data/src/text/text.ts","webpack://grafana/./public/app/features/expressions/components/thresholdReducer.ts","webpack://grafana/./public/app/features/expressions/components/Threshold.tsx","webpack://grafana/./packages/grafana-data/src/types/live.ts","webpack://grafana/./public/app/core/components/OptionsUI/color.tsx","webpack://grafana/./public/app/features/variables/editor/getVariableQueryEditor.tsx","webpack://grafana/./public/app/features/invites/state/reducers.ts","webpack://grafana/./packages/grafana-data/src/field/overrides/processors.ts","webpack://grafana/./packages/grafana-runtime/src/utils/queryResponse.ts","webpack://grafana/./packages/grafana-data/src/types/panel.ts","webpack://grafana/./public/app/features/query/state/processing/revision.ts","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltipFooter.tsx","webpack://grafana/./public/app/features/variables/state/helpers.ts","webpack://grafana/./public/app/features/variables/state/actions.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useReturnTo.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-auto-grid/const.ts","webpack://grafana/./public/app/features/dashboard/components/DashboardSettings/ListNewButton.tsx","webpack://grafana/./public/app/features/explore/extensions/AddToDashboard/getAddToDashboardTitle.ts","webpack://grafana/./packages/grafana-data/src/types/dataFrameTypes.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/links/DashboardLinkForm.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/transformToV2TypesUtils.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/custom-variables/SnapshotVariable.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/labels.ts","webpack://grafana/./packages/grafana-runtime/src/utils/plugin.ts","webpack://grafana/./packages/grafana-data/src/query/refId.ts","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx","webpack://grafana/./public/app/features/alerting/unified/components/silences/utils.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/formatString.ts","webpack://grafana/./public/app/features/alerting/unified/components/DetailsField.tsx","webpack://grafana/./public/app/features/plugins/admin/components/HorizontalGroup.tsx","webpack://grafana/./packages/grafana-ui/src/components/FileDropzone/FileDropzone.tsx","webpack://grafana/./public/app/features/alerting/unified/components/RuleLocation.tsx","webpack://grafana/./packages/grafana-ui/src/components/SecretTextArea/SecretTextArea.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/utils/adjustDateForReactCalendar.ts","webpack://grafana/./packages/grafana-ui/src/options/builder/legend.tsx","webpack://grafana/./packages/grafana-runtime/src/utils/returnToPrevious.ts","webpack://grafana/./public/app/features/panel/components/PanelPluginError.tsx","webpack://grafana/./packages/grafana-data/src/dataframe/processDataFrame.ts","webpack://grafana/./public/app/core/components/OptionsUI/string.tsx","webpack://grafana/./packages/grafana-ui/src/components/ContextMenu/WithContextMenu.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/FederatedRuleWarning.tsx","webpack://grafana/./packages/grafana-data/src/types/config.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/scrollCanvasElementIntoView.ts","webpack://grafana/./public/app/features/datasources/components/picker/BuiltInDataSourceList.tsx","webpack://grafana/./public/app/features/datasources/components/picker/DataSourceModal.tsx","webpack://grafana/./public/app/features/alerting/unified/components/export/GrafanaPoliciesExporter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/notification-policies/Policy.tsx","webpack://grafana/./packages/grafana-ui/src/components/uPlot/config/UPlotScaleBuilder.ts","webpack://grafana/./public/app/features/datasources/hooks.ts","webpack://grafana/./public/app/plugins/panel/geomap/editor/FrameSelectionEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/DataSourceVariableForm.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenAIDashDescriptionButton.tsx","webpack://grafana/./public/app/features/search/service/deletedDashboardsCache.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/reducers.ts","webpack://grafana/./public/app/features/alerting/unified/utils/templates.ts","webpack://grafana/./public/app/features/inspector/DetailText.tsx","webpack://grafana/./public/app/features/inspector/InspectDataOptions.tsx","webpack://grafana/./public/app/features/inspector/InspectDataTab.tsx","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/PublicAnnotationsDataSource.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/dag.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/mergeRequestStates.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useProduceNewAlertmanagerConfig.ts","webpack://grafana/./packages/grafana-runtime/src/components/EmbeddedDashboard.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/Combobox.tsx","webpack://grafana/./public/app/core/components/QueryOperationRow/QueryOperationAction.tsx","webpack://grafana/./public/app/features/provisioning/components/utils/timestamp.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/DatePickerWithInput/DatePickerWithInput.tsx","webpack://grafana/./packages/grafana-ui/src/components/Tooltip/PopoverController.tsx","webpack://grafana/./public/app/core/reducers/navModel.ts","webpack://grafana/./public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx","webpack://grafana/./public/app/core/components/AppChrome/AppChromeUpdate.tsx","webpack://grafana/./packages/grafana-ui/src/components/Card/CardContainer.tsx","webpack://grafana/./packages/grafana-ui/src/components/CallToActionCard/CallToActionCard.tsx","webpack://grafana/./packages/grafana-ui/src/options/builder/axis.tsx","webpack://grafana/./packages/grafana-ui/src/utils/reactUtils.ts","webpack://grafana/./public/app/features/expressions/guards.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useCombinedRule.ts","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/UnsupportedTemplateVariablesAlert.tsx","webpack://grafana/./public/app/features/browse-dashboards/state/actions.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneOffset.tsx","webpack://grafana/./packages/grafana-data/src/field/fieldDisplay.ts","webpack://grafana/./public/app/features/auth-config/state/reducers.ts","webpack://grafana/./packages/grafana-data/src/types/vector.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeOption.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/hooks.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeList.tsx","webpack://grafana/./public/app/core/services/theme.ts","webpack://grafana/./packages/grafana-ui/src/components/ConfirmButton/DeleteButton.tsx","webpack://grafana/./public/app/features/dataframe-import/constants.ts","webpack://grafana/./public/app/plugins/panel/timeseries/NullsThresholdInput.tsx","webpack://grafana/./public/app/features/explore/PrometheusListView/ItemLabels.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardReloadBehavior.ts","webpack://grafana/./packages/grafana-runtime/src/utils/megaMenuOpen.ts","webpack://grafana/./packages/grafana-ui/src/options/builder/hideSeries.tsx","webpack://grafana/./public/app/features/dashboard/api/v1.ts","webpack://grafana/./public/app/features/alerting/unified/utils/ruleStats.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/RadioButtonList/RadioButtonDot.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/CertificationKey.tsx","webpack://grafana/./public/app/features/alerting/unified/components/common/DetailText.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/Details.tsx","webpack://grafana/./public/app/core/hooks/useNavModel.ts","webpack://grafana/./packages/grafana-ui/src/components/DragHandle/DragHandle.tsx","webpack://grafana/./public/app/features/provisioning/utils/repository.ts","webpack://grafana/./public/app/features/logs/legacyLogsFrame.ts","webpack://grafana/./public/app/features/logs/logsFrame.ts","webpack://grafana/./public/app/features/geo/format/geojson.ts","webpack://grafana/./public/app/features/geo/gazetteer/worldmap.ts","webpack://grafana/./public/app/features/geo/gazetteer/gazetteer.ts","webpack://grafana/./public/app/features/alerting/unified/openapi/routesApi.gen.ts","webpack://grafana/./public/app/features/alerting/unified/components/notification-policies/useNotificationPolicyRoute.ts","webpack://grafana/./public/app/features/live/data/utils.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderNotice.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/PanelHeader/PanelHeaderNotices.tsx","webpack://grafana/./packages/grafana-ui/src/components/List/AbstractList.tsx","webpack://grafana/./packages/grafana-data/src/utils/arrayUtils.ts","webpack://grafana/./packages/grafana-data/src/transformations/fieldReducer.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleStats.tsx","webpack://grafana/./public/app/plugins/panel/news/component/News.tsx","webpack://grafana/./packages/grafana-runtime/src/services/pluginExtensions/usePluginLinks.ts","webpack://grafana/./packages/grafana-data/src/types/query.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerTitle.tsx","webpack://grafana/./public/app/features/dashboard/components/DashExportModal/DashboardExporter.ts","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ViewJsonModal.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ShareExport.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ShareLink.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ShareModal.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useAlertmanagerConfig.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/config/UPlotSeriesBuilder.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/config/UPlotThresholds.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/config/UPlotConfigBuilder.ts","webpack://grafana/./packages/grafana-ui/src/components/LoadingBar/LoadingBar.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationEditorHelpDisplay.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationFilter.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationOperationRow.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationOperationRows.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/groupBy.ts","webpack://grafana/./packages/grafana-data/src/utils/withLoadingIndicator.ts","webpack://grafana/./packages/grafana-runtime/src/components/FolderPicker.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableStaticOptionsFormAddButton.tsx","webpack://grafana/./public/app/core/utils/errors.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/preferences/user/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/preferences/user/baseAPI.ts","webpack://grafana/./packages/grafana-ui/src/components/ClipboardButton/ClipboardButton.tsx","webpack://grafana/./public/app/features/alerting/unified/api/alertmanager.ts","webpack://grafana/./public/app/core/utils/set.ts","webpack://grafana/./public/app/features/variables/inspect/utils.ts","webpack://grafana/./public/app/core/components/help/HelpModal.tsx","webpack://grafana/./packages/grafana-runtime/src/services/LocationSrv.ts","webpack://grafana/./packages/grafana-data/src/utils/unaryOperators.ts","webpack://grafana/./public/app/features/transformers/calculateHeatmap/heatmap.ts","webpack://grafana/./packages/grafana-schema/src/raw/composable/bargauge/panelcfg/x/BarGaugePanelCfg_types.gen.ts","webpack://grafana/./public/app/features/variables/adhoc/actions.ts","webpack://grafana/./packages/grafana-ui/src/components/FileDropzone/FileListItem.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/notification-policies.ts","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/FieldNamePicker.tsx","webpack://grafana/./packages/grafana-data/src/utils/datasource.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/paste.ts","webpack://grafana/./packages/grafana-ui/src/utils/tags.ts","webpack://grafana/./packages/grafana-data/src/types/constants.ts","webpack://grafana/./packages/grafana-data/src/types/variables.ts","webpack://grafana/./public/app/features/dashboard/services/DashboardLoaderSrv.ts","webpack://grafana/./packages/grafana-ui/src/components/SecretInput/SecretInput.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/geomap/panelcfg/x/GeomapPanelCfg_types.gen.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardAnnotationsDataLayer.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/ExportButton/ResourceExport.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareExportTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ExportButton/ExportAsCode.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/components/ImagePreview.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ExportButton/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/ExportButton/ExportAsImage.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareDrawer/ShareDrawerConfirmAction.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareDrawer/ShareDrawerContext.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/ShareConfiguration.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/EmailShare/ConfigEmailSharing/EmailListConfiguration.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/EmailShare/ConfigEmailSharing/ConfigEmailSharing.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/EmailSharingPricingAlert.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/EmailShare/CreateEmailSharing.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/EmailShare/EmailSharing.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/PublicDashboardAlert.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/PublicShare/CreatePublicSharing.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/PublicShare/PublicSharing.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/public-dashboards/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/public-dashboards/hooks.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/ShareAlerts.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/ShareTypeSelect.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-externally/ShareExternally.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareInternallyConfiguration.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-internally/ShareInternally.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareSnapshotTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-snapshot/UpsertSnapshot.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/share-snapshot/ShareSnapshot.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareLibraryPanelTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/SharePanelEmbedTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/panel-share/SharePanelPreview.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/panel-share/SharePanelInternally.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareDrawer/ShareDrawer.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/types.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/filter.ts","webpack://grafana/./public/app/features/provisioning/utils/redirect.ts","webpack://grafana/./public/app/features/provisioning/Shared/BranchValidationError.tsx","webpack://grafana/./public/app/features/provisioning/hooks/useBranchDropdownOptions.ts","webpack://grafana/./public/app/features/provisioning/components/utils/newBranchName.ts","webpack://grafana/./public/app/features/provisioning/components/Shared/ResourceEditFormSharedFields.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableTextField.tsx","webpack://grafana/./public/app/features/alerting/unified/components/Spacer.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/version-history/UpdatedBy.tsx","webpack://grafana/./packages/grafana-ui/src/components/EmptyState/GrotCTA/GrotCTA.tsx","webpack://grafana/./packages/grafana-ui/src/components/EmptyState/GrotNotFound/GrotNotFound.tsx","webpack://grafana/./packages/grafana-ui/src/components/EmptyState/EmptyState.tsx","webpack://grafana/./packages/grafana-ui/src/components/JSONFormatter/JSONFormatter.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/Form.tsx","webpack://grafana/./public/app/features/dashboard/api/ResponseTransformers.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/tracking.ts","webpack://grafana/./packages/grafana-ui/src/components/FormLabel/FormLabel.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OptionsPaneItemOverrides.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor.tsx","webpack://grafana/./public/app/core/components/TimePicker/TimePickerWithHistory.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/text/panelcfg/x/TextPanelCfg_types.gen.ts","webpack://grafana/./packages/grafana-data/src/dataframe/StreamingDataFrame.ts","webpack://grafana/./public/app/plugins/datasource/cloudwatch/types.ts","webpack://grafana/./public/app/core/hooks/useMediaQueryMinWidth.ts","webpack://grafana/./public/app/features/alerting/unified/utils/cloud-alertmanager-notifier-types.ts","webpack://grafana/./public/app/features/explore/state/explorePane.ts","webpack://grafana/./public/app/features/alerting/unified/components/expressions/Expression.tsx","webpack://grafana/./packages/grafana-ui/src/components/Segment/SegmentSection.tsx","webpack://grafana/./public/app/features/dashboard-scene/utils/getDashboardUrl.ts","webpack://grafana/./public/app/features/plugins/cdn/utils.ts","webpack://grafana/./public/app/features/alerting/unified/utils/datasource.ts","webpack://grafana/./public/app/features/panel/state/util.ts","webpack://grafana/./packages/grafana-data/src/types/OptionsUIRegistryBuilder.ts","webpack://grafana/./packages/grafana-data/src/utils/OptionsUIBuilders.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/djb2Hash.ts","webpack://grafana/./packages/grafana-sql/src/utils/formatSQL.ts","webpack://grafana/./packages/grafana-sql/src/constants.ts","webpack://grafana/./packages/grafana-sql/src/ResponseParser.ts","webpack://grafana/./packages/grafana-sql/src/components/QueryEditorLazy.tsx","webpack://grafana/./packages/grafana-sql/src/utils/migration.ts","webpack://grafana/./packages/grafana-sql/src/datasource/SqlDatasource.ts","webpack://grafana/./packages/grafana-sql/src/components/configuration/NumberInput.tsx","webpack://grafana/./packages/grafana-sql/src/components/configuration/MaxLifetimeField.tsx","webpack://grafana/./packages/grafana-sql/src/components/configuration/MaxOpenConnectionsField.tsx","webpack://grafana/./packages/grafana-sql/src/components/configuration/ConnectionLimits.tsx","webpack://grafana/./packages/grafana-sql/src/components/configuration/Divider.tsx","webpack://grafana/./packages/grafana-sql/src/components/configuration/TLSSecretsConfig.tsx","webpack://grafana/./packages/grafana-sql/src/utils/logging.ts","webpack://grafana/./packages/grafana-sql/src/components/configuration/useMigrateDatabaseFields.ts","webpack://grafana/./packages/grafana-sql/src/loadResources.ts","webpack://grafana/./packages/grafana-ui/src/slate-plugins/indentation.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/notificationPolicies/utils.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/convertFrameType.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/filterByRefId.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/formatTime.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/limit.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/rename.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/organize.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/renameByRegex.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/seriesToRows.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/sortBy.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/transpose.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers.ts","webpack://grafana/./public/app/features/admin/state/reducers.ts","webpack://grafana/./packages/grafana-ui/src/components/CustomScrollbar/ScrollIndicators.tsx","webpack://grafana/./packages/grafana-ui/src/components/CustomScrollbar/CustomScrollbar.tsx","webpack://grafana/./public/app/types/store.ts","webpack://grafana/./packages/grafana-ui/src/components/Modal/ModalTabsHeader.tsx","webpack://grafana/./public/app/features/explore/QueriesDrawer/QueriesDrawerContext.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/SelectionOptionsForm.tsx","webpack://grafana/./public/app/features/correlations/useCorrelations.ts","webpack://grafana/./public/app/features/expressions/components/ExpressionTypeDropdown.tsx","webpack://grafana/./public/app/core/history/remoteStorageConverter.ts","webpack://grafana/./public/app/core/history/RichHistoryRemoteStorage.ts","webpack://grafana/./public/app/core/history/richHistoryStorageProvider.ts","webpack://grafana/./public/app/features/alerting/unified/components/receivers/grafanaAppReceivers/onCall/useOnCallIntegration.tsx","webpack://grafana/./public/app/features/provisioning/GettingStarted/features.ts","webpack://grafana/./packages/grafana-ui/src/components/InlineToast/InlineToast.tsx","webpack://grafana/./packages/grafana-ui/src/components/Modal/ModalHeader.tsx","webpack://grafana/./packages/grafana-ui/src/components/Sparkline/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Sparkline/Sparkline.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/datagrid/panelcfg/x/DatagridPanelCfg_types.gen.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/Legend.tsx","webpack://grafana/./packages/grafana-data/src/field/standardFieldConfigEditorRegistry.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/DeleteModal.tsx","webpack://grafana/./packages/grafana-ui/src/utils/measureText.ts","webpack://grafana/./public/app/features/explore/PrometheusListView/utils/getRawPrometheusListItemsFromDataFrame.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/compareValues.ts","webpack://grafana/./packages/grafana-ui/src/types/completion.ts","webpack://grafana/./packages/grafana-ui/src/slate-plugins/clipboard.ts","webpack://grafana/./public/app/features/panel/components/VizTypePicker/PanelTypeCard.tsx","webpack://grafana/./public/vendor/flot/jquery.flot.js","webpack://grafana/./packages/grafana-data/src/types/pluginExtensions.ts","webpack://grafana/./public/app/features/apiserver/client.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/types/DashboardLayoutGrid.ts","webpack://grafana/./packages/grafana-ui/src/components/Tabs/TabsBar.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/timeRange.ts","webpack://grafana/./public/app/features/alerting/unified/state/AlertingQueryRunner.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/useAlertQueryRunner.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/RuleContext.tsx","webpack://grafana/./public/app/features/plugins/admin/state/reducer.ts","webpack://grafana/./packages/grafana-ui/src/components/VizLayout/VizLayout.tsx","webpack://grafana/./public/app/features/variables/adapters.ts","webpack://grafana/./public/app/features/dashboard/services/DashboardProfiler.ts","webpack://grafana/./public/app/features/dimensions/color.ts","webpack://grafana/./public/app/features/inspector/InspectStatsTable.tsx","webpack://grafana/./public/app/features/inspector/InspectStatsTraceIdsTable.tsx","webpack://grafana/./public/app/features/inspector/InspectStatsTab.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useAlertQueriesStatus.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/migrators/v0.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/migrators/v1.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/parseURL.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/internal.utils.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/synchronizer/fromURL.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/synchronizer/init.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/synchronizer/toURL.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/external.utils.ts","webpack://grafana/./public/app/features/explore/hooks/useStateSync/index.ts","webpack://grafana/./public/app/features/actions/analytics.ts","webpack://grafana/./public/app/features/alerting/unified/api/featureDiscoveryApi.ts","webpack://grafana/./public/app/features/provisioning/hooks/useGetResourceRepositoryView.ts","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsView/actions.ts","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/utils.ts","webpack://grafana/./packages/grafana-runtime/src/utils/userStorage.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/util.ts","webpack://grafana/./packages/grafana-schema/src/raw/composable/histogram/panelcfg/x/HistogramPanelCfg_types.gen.ts","webpack://grafana/./public/app/features/explore/Time.tsx","webpack://grafana/./public/app/features/alerting/unified/reducers/alertmanager/notificationTemplates.ts","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx","webpack://grafana/./public/app/features/search/service/bluge.ts","webpack://grafana/./public/app/features/search/service/frontend.ts","webpack://grafana/./public/app/features/search/service/sql.ts","webpack://grafana/./public/app/features/search/service/unified.ts","webpack://grafana/./public/app/features/search/service/searcher.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/ExportButton/ExportMenu.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/types.ts","webpack://grafana/./packages/grafana-ui/src/slate-plugins/slate-prism/options.tsx","webpack://grafana/./packages/grafana-ui/src/slate-plugins/slate-prism/index.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangeInput.tsx","webpack://grafana/./public/app/features/dashboard/components/DashboardSettings/AutoRefreshIntervals.tsx","webpack://grafana/./public/app/features/dashboard/components/DashboardSettings/TimePickerSettings.tsx","webpack://grafana/./public/app/features/alerting/state/query_part.ts","webpack://grafana/./public/app/features/alerting/unified/search/search.terms.js","webpack://grafana/./public/app/features/alerting/unified/search/search.js","webpack://grafana/./public/app/features/alerting/unified/search/searchParser.ts","webpack://grafana/./public/app/features/alerting/unified/search/rulesSearchParser.ts","webpack://grafana/./public/app/features/variables/editor/LegacyVariableQueryEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/LibraryVizPanelInfo.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/getOptionOverrides.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/getVisualizationOptions.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/k8s/utils.ts","webpack://grafana/./public/app/features/variables/query/QueryVariableRefreshSelect.tsx","webpack://grafana/./public/app/features/dashboard/state/getPanelPluginToMigrateTo.ts","webpack://grafana/./public/app/features/alerting/unified/components/receivers/editor/language.ts","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Carousel/Carousel.tsx","webpack://grafana/./packages/grafana-ui/src/components/ElementSelectionContext/ElementSelectionContext.tsx","webpack://grafana/./public/app/features/query/state/updateQueries.ts","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/SeriesColorPickerPopover.tsx","webpack://grafana/./public/app/features/dimensions/scalar.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/DashboardLibrary/interactions.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/DashboardLibrary/DashboardLibrarySection.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/DashboardEmpty/DashboardEmptyExtensionPoint.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/DashboardEmpty/DashboardEmptyHooks.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/DashboardEmpty/DashboardEmpty.tsx","webpack://grafana/./public/app/features/alerting/unified/components/DynamicTableWithGuidelines.tsx","webpack://grafana/./packages/grafana-ui/src/components/FileUpload/FileUpload.tsx","webpack://grafana/./packages/grafana-data/src/events/common.ts","webpack://grafana/./packages/grafana-data/src/transformations/matchers/ids.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useStateHistoryModal.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableStaticOptionsFormItemEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableStaticOptionsFormItems.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableStaticOptionsForm.tsx","webpack://grafana/./public/app/core/components/AppChrome/ExtensionSidebar/ExtensionSidebarProvider.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Gauge/Gauge.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/DataLinksActionsTooltip.tsx","webpack://grafana/./public/app/features/plugins/components/restrictedGrafanaApis/alerting/alertRuleFormSchema.ts","webpack://grafana/./packages/grafana-runtime/src/services/pluginExtensions/getObservablePluginLinks.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/layoutSerializers/layoutSerializerRegistry.ts","webpack://grafana/./packages/grafana-ui/src/components/Toggletip/Toggletip.tsx","webpack://grafana/./public/app/features/plugins/admin/api.ts","webpack://grafana/./packages/grafana-ui/src/utils/searchFunctions.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneGroup.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker/TimeZoneOption.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker.tsx","webpack://grafana/./public/app/features/templating/fieldAccessorCache.ts","webpack://grafana/./public/app/features/templating/LegacyVariableWrapper.ts","webpack://grafana/./public/app/features/templating/formatVariableValue.ts","webpack://grafana/./public/app/features/templating/templateProxies.ts","webpack://grafana/./public/app/features/templating/dataMacros.ts","webpack://grafana/./public/app/features/templating/macroRegistry.ts","webpack://grafana/./public/app/features/templating/template_srv.ts","webpack://grafana/./public/app/features/dimensions/direction.ts","webpack://grafana/./public/app/features/dimensions/utils.ts","webpack://grafana/./packages/grafana-ui/src/slate-plugins/runner.ts","webpack://grafana/./packages/grafana-api-clients/src/utils/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/styles.ts","webpack://grafana/./packages/grafana-ui/src/components/ValuePicker/ValuePicker.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/table/panelcfg/x/TablePanelCfg_types.gen.ts","webpack://grafana/./packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts","webpack://grafana/./packages/grafana-schema/src/veneer/dashboard.types.ts","webpack://grafana/./public/app/features/dashboard/api/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Tabs/Tab.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/HelpWizard/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/inspect/HelpWizard/SupportSnapshotService.ts","webpack://grafana/./public/app/features/dashboard-scene/inspect/HelpWizard/HelpWizard.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/InspectDataTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/InspectJsonTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/InspectMetaDataTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/InspectQueryTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/InspectStatsTab.tsx","webpack://grafana/./public/app/features/dashboard-scene/inspect/PanelInspectDrawer.tsx","webpack://grafana/./packages/grafana-runtime/src/components/PanelRenderer.tsx","webpack://grafana/./packages/grafana-ui/src/utils/logger.ts","webpack://grafana/./packages/grafana-data/src/field/fieldOverrides.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/dashboard/v0alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/dashboard/v0alpha1/index.ts","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltipWrapper.tsx","webpack://grafana/./public/app/core/components/ThemeSelector/getSelectableThemes.ts","webpack://grafana/./packages/grafana-runtime/src/analytics/plugins/eventProperties.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/version-history/utils.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/shorturl/v1alpha1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/shorturl/v1alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/shorturl/v1alpha1/index.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/useClipboardState.ts","webpack://grafana/./public/app/features/invites/state/actions.ts","webpack://grafana/./public/app/features/manage-dashboards/components/PublicDashboardListTable/DeletePublicDashboardModal.tsx","webpack://grafana/./public/app/features/plugins/loader/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Segment/Segment.tsx","webpack://grafana/./packages/grafana-ui/src/components/uPlot/PlotLegend.tsx","webpack://grafana/./public/app/features/logs/components/logParser.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/transformSceneToSaveModelSchemaV2.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/utils.ts","webpack://grafana/./packages/grafana-data/src/context/plugins/DataSourcePluginContextProvider.tsx","webpack://grafana/./public/app/features/alerting/unified/api/alertSilencesApi.ts","webpack://grafana/./public/app/core/utils/explore.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/types.ts","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/FieldTypeMatcherEditor.tsx","webpack://grafana/./packages/grafana-data/src/datetime/timezones.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/types.ts","webpack://grafana/./public/app/core/components/NestedFolderPicker/FolderParent.tsx","webpack://grafana/./public/app/core/components/NestedFolderPicker/NestedFolderList.tsx","webpack://grafana/./public/app/core/components/NestedFolderPicker/Trigger.tsx","webpack://grafana/./public/app/api/clients/dashboard/v0alpha1/index.ts","webpack://grafana/./public/app/core/components/NestedFolderPicker/useFoldersQueryAppPlatform.ts","webpack://grafana/./public/app/core/components/NestedFolderPicker/useFoldersQueryLegacy.ts","webpack://grafana/./public/app/core/components/NestedFolderPicker/useFoldersQuery.ts","webpack://grafana/./public/app/core/components/NestedFolderPicker/useTreeInteractions.ts","webpack://grafana/./public/app/core/components/NestedFolderPicker/NestedFolderPicker.tsx","webpack://grafana/./public/app/api/clients/iam/v0alpha1/index.ts","webpack://grafana/./public/app/api/clients/folder/v1beta1/virtualFolders.ts","webpack://grafana/./public/app/api/clients/folder/v1beta1/hooks.ts","webpack://grafana/./public/app/features/dashboard/api/publicDashboardApi.ts","webpack://grafana/./public/app/features/alerting/unified/api/util.ts","webpack://grafana/./public/app/features/browse-dashboards/components/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/FieldNameByRegexMatcherEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/FieldNameMatcherEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/FieldNamesMatcherEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/fieldMatchersUI.ts","webpack://grafana/./packages/grafana-ui/src/utils/fuzzy.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-list/extensions/EnrichmentDrawerExtension.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/nulls/nullInsertThreshold.ts","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/SeriesTable.tsx","webpack://grafana/./packages/grafana-ui/src/components/PluginSignatureBadge/PluginSignatureBadge.tsx","webpack://grafana/./public/app/core/components/Animations/SlideDown.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/matchers.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/api/util.ts","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/PanelContext.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/migrate-to-cloud/index.ts","webpack://grafana/./packages/grafana-ui/src/components/TabbedContainer/TabbedContainer.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/ids.ts","webpack://grafana/./public/app/core/copy/appNotification.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/TableCellInspector.tsx","webpack://grafana/./packages/grafana-ui/src/components/Cascader/Cascader.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/ShareLibraryPanel.tsx","webpack://grafana/./public/app/features/dashboard-scene/utils/variables.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/angularMigration.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/transformSaveModelToScene.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/AlertStateTag.tsx","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/iam/v0alpha1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/iam/v0alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/iam/v0alpha1/index.ts","webpack://grafana/./public/app/core/utils/urlToken.ts","webpack://grafana/./packages/grafana-ui/src/slate-plugins/slate-prism/TOKEN_MARK.ts","webpack://grafana/./public/app/features/query/components/QueryEditorRows.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/receivers.ts","webpack://grafana/./public/app/features/alerting/unified/components/receivers/grafanaAppReceivers/useReceiversMetadata.ts","webpack://grafana/./public/app/features/alerting/unified/components/receivers/grafanaAppReceivers/types.ts","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/utils.ts","webpack://grafana/./public/app/features/folders/state/navModel.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/migrate-to-cloud/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/migrate-to-cloud/baseAPI.ts","webpack://grafana/./public/app/features/variables/getAllVariableValuesForUrl.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/PanelNotices.tsx","webpack://grafana/./public/app/features/expressions/components/ToLabel.tsx","webpack://grafana/./public/app/features/apiserver/guards.ts","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/conditions/ConditionalRenderingData.tsx","webpack://grafana/./public/app/features/alerting/unified/components/mute-timings/permissions.ts","webpack://grafana/./public/app/core/history/localStorageConverter.ts","webpack://grafana/./public/app/core/history/RichHistoryLocalStorage.ts","webpack://grafana/./packages/grafana-data/src/utils/LocalStorageValueProvider.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/CalendarBody.tsx","webpack://grafana/./packages/grafana-ui/src/components/uPlot/config/gradientFills.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/QueryEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/GenAI/jsonDiffText.ts","webpack://grafana/./public/app/features/dashboard/components/GenAI/utils.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/AlertInstanceStateFilter.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsMatchingInstances.tsx","webpack://grafana/./public/app/features/annotations/utils/savedQueryUtils.ts","webpack://grafana/./public/app/features/annotations/components/AnnotationQueryEditorActionsWrapper.tsx","webpack://grafana/./public/app/features/annotations/components/AnnotationResultMapper.tsx","webpack://grafana/./public/app/features/annotations/components/StandardAnnotationQueryEditor.tsx","webpack://grafana/./public/app/core/services/impression_srv.ts","webpack://grafana/./public/app/features/explore/Logs/LogsTable.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/layoutSerializers/utils.ts","webpack://grafana/./packages/grafana-data/src/text/markdown.ts","webpack://grafana/./public/app/features/dashboard-scene/addToDashboard/addToDashboard.ts","webpack://grafana/./public/app/features/dashboard-scene/addToDashboard/AddToDashboardForm.tsx","webpack://grafana/./public/app/features/search/page/reporting.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/commonFormat.ts","webpack://grafana/./packages/grafana-ui/src/utils/DelayRender.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/PanelMenu.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/PanelDescription.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/PanelStatus.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/PanelChrome.tsx","webpack://grafana/./packages/grafana-ui/src/components/PanelChrome/index.ts","webpack://grafana/./public/app/features/alerting/unified/utils/groupIdentifier.ts","webpack://grafana/./packages/grafana-data/src/types/logs.ts","webpack://grafana/./public/app/features/alerting/unified/types/rule-form.ts","webpack://grafana/./public/app/features/alerting/unified/components/StateTag.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/routeTree.ts","webpack://grafana/./public/app/features/variables/guard.ts","webpack://grafana/./packages/grafana-data/src/utils/csv.ts","webpack://grafana/./public/app/core/history/richHistoryLocalStorageUtils.ts","webpack://grafana/./public/app/core/utils/dag.ts","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelInfo/LibraryPanelInfo.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/getLibraryPanelOptions.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/getPanelFrameOptions.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/OptionSearchEngine.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/getRecentOptions.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OptionsPaneOptions.tsx","webpack://grafana/./public/app/features/browse-dashboards/api/isProvisioned.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableSelectField.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/filterByValue.ts","webpack://grafana/./public/app/core/components/QueryOperationRow/OperationRowHelp.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/VariableCheckboxField.tsx","webpack://grafana/./packages/grafana-data/src/panel/getPanelOptionsWithDefaults.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/plugins/TooltipPlugin2.tsx","webpack://grafana/./public/app/features/profile/state/reducers.ts","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/conditions/ConditionalRenderingVariable.tsx","webpack://grafana/./packages/grafana-alerting/src/grafana/rules/components/state/StateDot.tsx","webpack://grafana/./packages/grafana-alerting/src/grafana/rules/components/state/StateText.tsx","webpack://grafana/./public/app/features/alerting/unified/enterprise-components/rule-view-page/extensions.tsx","webpack://grafana/./public/app/features/alerting/unified/enterprise-components/rule-view-page/navigation.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/History.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/Instances.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/Routing.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/extensions/RuleViewerExtension.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/RuleViewer.tsx","webpack://grafana/./public/app/core/services/PreferencesService.ts","webpack://grafana/./public/app/features/support-bundles/state/reducers.ts","webpack://grafana/./public/app/features/auth-config/index.ts","webpack://grafana/./packages/grafana-runtime/src/services/ScopesContext.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts","webpack://grafana/./public/app/features/correlations/transformations.ts","webpack://grafana/./public/app/features/alerting/unified/api/alertRuleApi.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/internal.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/CustomVariableForm.tsx","webpack://grafana/./packages/grafana-ui/src/components/RenderUserContentAsHTML/RenderUserContentAsHTML.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/ValuePill.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/getMultiComboboxStyles.ts","webpack://grafana/./packages/grafana-ui/src/components/Combobox/useMeasureMulti.ts","webpack://grafana/./packages/grafana-ui/src/components/Combobox/useMultiInputAutoSize.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/MultiCombobox.tsx","webpack://grafana/./public/app/features/plugins/components/PluginPageContext.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/MessageRows.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/ComboboxList.tsx","webpack://grafana/./packages/grafana-ui/src/components/ConfirmModal/ConfirmContent.tsx","webpack://grafana/./public/app/features/library-panels/components/DeleteLibraryPanelModal/reducer.ts","webpack://grafana/./public/app/features/library-panels/components/DeleteLibraryPanelModal/actions.ts","webpack://grafana/./public/app/features/library-panels/components/DeleteLibraryPanelModal/DeleteLibraryPanelModal.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelCard/LibraryPanelCard.tsx","webpack://grafana/./public/app/core/hooks/useQueryParams.ts","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenAIDashTitleButton.tsx","webpack://grafana/./public/app/features/variables/query/QueryVariableStaticOptions.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltipContainer.tsx","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/conditions/ConditionalRenderingConditionWrapper.tsx","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/provisioning/v0alpha1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/provisioning/v0alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/provisioning/v0alpha1/index.ts","webpack://grafana/./public/app/features/query/utils.ts","webpack://grafana/./public/app/features/query/state/queryAnalytics.ts","webpack://grafana/./public/app/features/query/state/runRequest.ts","webpack://grafana/./public/app/features/dimensions/editors/ResourcePicker.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/SeriesIcon.tsx","webpack://grafana/./packages/grafana-ui/src/components/UsersIndicator/Avatar.tsx","webpack://grafana/./packages/grafana-ui/src/components/ConfirmModal/ConfirmModal.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/ruleGroup/useProduceNewRuleGroup.ts","webpack://grafana/./packages/grafana-data/src/utils/labels.ts","webpack://grafana/./public/app/core/history/RichHistoryStorage.ts","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VizTypePickerPlugin.tsx","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VizTypePicker.tsx","webpack://grafana/./public/app/types/explore.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangeContext.tsx","webpack://grafana/./public/app/features/plugins/sandbox/pluginDependencies.ts","webpack://grafana/./packages/grafana-runtime/src/internal/openFeature/index.ts","webpack://grafana/./public/app/features/transformers/docs/content.ts","webpack://grafana/./public/app/features/transformers/docs/getTransformationContent.ts","webpack://grafana/./public/app/features/transformers/FilterByValueTransformer/ValueMatchers/BasicMatcherEditor.tsx","webpack://grafana/./public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx","webpack://grafana/./public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx","webpack://grafana/./public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RegexMatcherEditor.tsx","webpack://grafana/./public/app/features/transformers/FilterByValueTransformer/ValueMatchers/valueMatchersUI.ts","webpack://grafana/./public/app/features/transformers/FilterByValueTransformer/FilterByValueFilterEditor.tsx","webpack://grafana/./public/app/features/transformers/FilterByValueTransformer/FilterByValueTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/spatial/optionsHelper.tsx","webpack://grafana/./public/app/features/transformers/calculateHeatmap/HeatmapTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/fieldToConfigMapping/fieldToConfigMapping.ts","webpack://grafana/./public/app/features/transformers/fieldToConfigMapping/FieldConfigMappingHandlerArgumentsEditor.tsx","webpack://grafana/./public/app/features/transformers/fieldToConfigMapping/FieldToConfigMappingEditor.tsx","webpack://grafana/./public/app/features/transformers/configFromQuery/configFromQuery.ts","webpack://grafana/./public/app/features/transformers/configFromQuery/ConfigFromQueryTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/constants.ts","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/BinaryOperationOptionsEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/CumulativeOptionsEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/IndexOptionsEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/ReduceRowOptionsEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/UnaryOperationEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/WindowOptionsEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/CalculateFieldTransformerEditor/CalculateFieldTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/ConcatenateTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/EnumMappingRow.tsx","webpack://grafana/./public/app/features/transformers/editors/EnumMappingEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/FilterByNameTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/FilterByRefIdTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/FormatStringTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/FormatTimeTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/GroupByTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/GroupToNestedTableTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/GroupingToMatrixTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/HistogramTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/JoinByFieldTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/LabelsToFieldsTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/LimitTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/MergeTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/OrganizeFieldsTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/ReduceTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/RenameByRegexTransformer.tsx","webpack://grafana/./public/app/features/transformers/editors/SeriesToRowsTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/SortByTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/editors/TransposeTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/extractFields/components/JSONPathEditor.tsx","webpack://grafana/./public/app/features/transformers/extractFields/types.ts","webpack://grafana/./public/app/features/transformers/extractFields/fieldExtractors.ts","webpack://grafana/./public/app/features/transformers/extractFields/extractFields.ts","webpack://grafana/./public/app/features/transformers/extractFields/ExtractFieldsTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/joinByLabels/joinByLabels.ts","webpack://grafana/./public/app/features/transformers/joinByLabels/JoinByLabelsTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/lookupGazetteer/fieldLookup.ts","webpack://grafana/./public/app/features/transformers/lookupGazetteer/FieldLookupTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/partitionByValues/partition.ts","webpack://grafana/./public/app/features/transformers/partitionByValues/partitionByValues.ts","webpack://grafana/./public/app/features/transformers/partitionByValues/PartitionByValuesEditor.tsx","webpack://grafana/./public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.ts","webpack://grafana/./public/app/features/transformers/prepareTimeSeries/PrepareTimeSeriesEditor.tsx","webpack://grafana/./public/app/features/transformers/regression/regression.ts","webpack://grafana/./public/app/features/transformers/regression/constants.ts","webpack://grafana/./public/app/features/transformers/regression/utils.ts","webpack://grafana/./public/app/features/transformers/regression/regressionEditor.tsx","webpack://grafana/./public/app/features/transformers/rowsToFields/rowsToFields.ts","webpack://grafana/./public/app/features/transformers/rowsToFields/RowsToFieldsTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/spatial/spatialTransformer.ts","webpack://grafana/./public/app/features/transformers/spatial/SpatialTransformerEditor.tsx","webpack://grafana/./public/app/features/transformers/timeSeriesTable/timeSeriesTableTransformer.ts","webpack://grafana/./public/app/features/transformers/timeSeriesTable/TimeSeriesTableTransformEditor.tsx","webpack://grafana/./public/app/features/transformers/standardTransformers.ts","webpack://grafana/./public/app/core/components/NavLandingPage/NavLandingPage.tsx","webpack://grafana/./public/app/features/admin/ldap/LdapPage.tsx","webpack://grafana/./public/app/core/components/DynamicImports/SafeDynamicImport.tsx","webpack://grafana/./public/app/features/alerting/routes.tsx","webpack://grafana/./public/app/features/connections/components/ConnectionsRedirectNotice/ConnectionsRedirectNotice.tsx","webpack://grafana/./public/app/features/connections/routes.tsx","webpack://grafana/./public/app/features/gops/configuration-tracker/Analytics.ts","webpack://grafana/./public/app/features/gops/configuration-tracker/alerting/hooks.ts","webpack://grafana/./public/app/features/gops/configuration-tracker/alerting/utils.ts","webpack://grafana/./public/app/features/alerting/unified/api/incidentsApi.ts","webpack://grafana/./public/app/features/gops/configuration-tracker/incidents/hooks.ts","webpack://grafana/./public/app/features/gops/configuration-tracker/onCall/hooks.ts","webpack://grafana/./public/app/features/alerting/unified/api/sloApi.ts","webpack://grafana/./public/app/features/gops/configuration-tracker/slo/hooks.ts","webpack://grafana/./public/app/features/gops/configuration-tracker/irmHooks.ts","webpack://grafana/./public/app/features/gops/configuration-tracker/components/ProgressBar.tsx","webpack://grafana/./public/app/features/gops/configuration-tracker/components/ConfigCard.tsx","webpack://grafana/./public/app/features/gops/configuration-tracker/components/Essentials.tsx","webpack://grafana/./public/app/features/gops/configuration-tracker/components/ConfigureIRM.tsx","webpack://grafana/./public/app/features/plugins/admin/routes.tsx","webpack://grafana/./public/app/features/profile/routes.tsx","webpack://grafana/./public/app/features/dashboard/routes.ts","webpack://grafana/./public/app/features/provisioning/utils/routes.ts","webpack://grafana/./public/app/routes/routes.tsx","webpack://grafana/./public/app/core/utils/isFrontendService.ts","webpack://grafana/./public/app/core/navigation/GrafanaRouteError.tsx","webpack://grafana/./public/app/core/components/BouncingLoader/BouncingLoader.tsx","webpack://grafana/./public/app/core/navigation/GrafanaRouteLoading.tsx","webpack://grafana/./public/app/core/navigation/GrafanaRoute.tsx","webpack://grafana/./public/app/features/live/LiveConnectionWarning.tsx","webpack://grafana/./public/app/features/scopes/ScopesApiClient.ts","webpack://grafana/./public/app/features/scopes/ScopesService.ts","webpack://grafana/./public/app/features/scopes/ScopesServiceBase.ts","webpack://grafana/./public/app/features/scopes/dashboards/scopeNavgiationUtils.ts","webpack://grafana/./public/app/features/scopes/dashboards/ScopesDashboardsService.ts","webpack://grafana/./public/app/features/scopes/selector/scopesTreeUtils.ts","webpack://grafana/./public/app/features/scopes/selector/types.ts","webpack://grafana/./public/app/features/scopes/selector/ScopesSelectorService.ts","webpack://grafana/./public/app/features/scopes/ScopesContextProvider.tsx","webpack://grafana/./public/app/features/commandPalette/KBarResults.tsx","webpack://grafana/./public/app/features/commandPalette/KBarSearch.tsx","webpack://grafana/./public/app/features/commandPalette/ResultItem.tsx","webpack://grafana/./public/app/features/commandPalette/values.ts","webpack://grafana/./public/app/features/commandPalette/actions/dashboardActions.ts","webpack://grafana/./public/app/features/commandPalette/ScopesRow.tsx","webpack://grafana/./public/app/features/commandPalette/actions/recentScopesActions.ts","webpack://grafana/./public/app/features/commandPalette/actions/scopesUtils.ts","webpack://grafana/./public/app/features/commandPalette/actions/scopeActions.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/InviteUserButtonUtils.tsx","webpack://grafana/./public/app/dev-utils.ts","webpack://grafana/./public/app/features/commandPalette/actions/staticActions.ts","webpack://grafana/./public/app/features/commandPalette/actions/useExtensionActions.ts","webpack://grafana/./public/app/features/commandPalette/actions/useActions.tsx","webpack://grafana/./public/app/features/commandPalette/useMatches.ts","webpack://grafana/./public/app/features/commandPalette/CommandPalette.tsx","webpack://grafana/./public/app/features/scopes/dashboards/ScopesDashboardsTreeFolderItem.tsx","webpack://grafana/./public/app/features/scopes/dashboards/ScopesNavigationTreeLink.tsx","webpack://grafana/./public/app/features/scopes/dashboards/ScopesDashboardsTree.tsx","webpack://grafana/./public/app/features/scopes/dashboards/ScopesDashboardsTreeSearch.tsx","webpack://grafana/./public/app/features/scopes/dashboards/ScopesDashboards.tsx","webpack://grafana/./public/app/core/components/AppChrome/MegaMenu/FeatureHighlight.tsx","webpack://grafana/./public/app/core/components/AppChrome/MegaMenu/MegaMenuItemText.tsx","webpack://grafana/./public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx","webpack://grafana/./public/app/core/components/AppChrome/MegaMenu/MegaMenu.tsx","webpack://grafana/./public/app/core/components/AppChrome/AppChromeMenu.tsx","webpack://grafana/./public/app/core/utils/isShallowEqual.ts","webpack://grafana/./public/app/core/components/AppChrome/History/eventsTracking.ts","webpack://grafana/./public/app/core/components/AppChrome/AppChromeService.tsx","webpack://grafana/./public/app/core/components/AppChrome/ReturnToPrevious/DismissableButton.tsx","webpack://grafana/./public/app/core/components/AppChrome/ReturnToPrevious/ReturnToPrevious.tsx","webpack://grafana/./public/app/core/components/Breadcrumbs/BreadcrumbItem.tsx","webpack://grafana/./public/app/core/components/Breadcrumbs/Breadcrumbs.tsx","webpack://grafana/./public/app/core/components/AppChrome/ExtensionSidebar/ExtensionToolbarItemButton.tsx","webpack://grafana/./public/app/core/components/AppChrome/ExtensionSidebar/ExtensionToolbarItem.tsx","webpack://grafana/./public/app/core/components/AppChrome/History/HistoryWrapper.tsx","webpack://grafana/./public/app/core/components/AppChrome/History/HistoryContainer.tsx","webpack://grafana/./public/app/core/components/AppChrome/QuickAdd/utils.ts","webpack://grafana/./public/app/core/components/AppChrome/QuickAdd/QuickAdd.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/TopNavBarMenu.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/useHelpNode.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/HelpTopBarButton.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/InviteUserButton.tsx","webpack://grafana/./public/app/core/components/Theme/ThemePreview.tsx","webpack://grafana/./public/app/core/components/ThemeSelector/ThemeCard.tsx","webpack://grafana/./public/app/core/components/ThemeSelector/ThemeSelectorDrawer.tsx","webpack://grafana/./public/app/core/components/AppChrome/News/NewsWrapper.tsx","webpack://grafana/./public/app/core/components/AppChrome/News/NewsDrawer.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/ProfileButton.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/SignInLink.tsx","webpack://grafana/./public/app/features/scopes/selector/useScopeNode.ts","webpack://grafana/./public/app/features/scopes/selector/ScopesInput.tsx","webpack://grafana/./public/app/features/scopes/selector/RecentScopes.tsx","webpack://grafana/./public/app/features/scopes/selector/ScopesTreeHeadline.tsx","webpack://grafana/./public/app/features/scopes/selector/ScopesTreeItem.tsx","webpack://grafana/./public/app/features/scopes/selector/ScopesTreeItemList.tsx","webpack://grafana/./public/app/features/scopes/selector/ScopesTreeSearch.tsx","webpack://grafana/./public/app/features/scopes/selector/useKeyboardInteractions.tsx","webpack://grafana/./public/app/features/scopes/selector/useScopesHighlighting.tsx","webpack://grafana/./public/app/features/scopes/selector/ScopesTree.tsx","webpack://grafana/./public/app/features/scopes/selector/ScopesSelector.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/SingleTopBarActions.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/TopSearchBarCommandPaletteTrigger.tsx","webpack://grafana/./public/app/core/components/AppChrome/TopBar/SingleTopBar.tsx","webpack://grafana/./public/app/core/components/AppChrome/AppChrome.tsx","webpack://grafana/./public/app/core/components/AppChrome/AppChromeExtensionPoint.tsx","webpack://grafana/./public/app/core/components/AppNotifications/AppNotificationItem.tsx","webpack://grafana/./public/app/core/components/AppNotifications/AppNotificationList.tsx","webpack://grafana/./public/app/core/context/ModalsContextProvider.tsx","webpack://grafana/./public/app/routes/RoutesWrapper.tsx","webpack://grafana/./public/app/AppWrapper.tsx","webpack://grafana/./public/app/core/components/NestedFolderPicker/LazyFolderPicker.tsx","webpack://grafana/./public/app/core/components/Page/PluginPage.tsx","webpack://grafana/./public/app/core/utils/CorsSharedWorker.ts","webpack://grafana/./public/app/core/crash/crash.utils.ts","webpack://grafana/./public/app/core/crash/index.ts","webpack://grafana/./public/app/core/internationalization/loadTranslations.ts","webpack://grafana/./public/app/dev.ts","webpack://grafana/./public/app/core/lifecycle-hooks.ts","webpack://grafana/./public/app/core/navigation/patch/interceptLinkClicks.ts","webpack://grafana/./public/app/core/services/CorrelationsService.ts","webpack://grafana/./public/app/core/services/NewFrontendAssetsChecker.ts","webpack://grafana/./public/app/core/services/echo/Echo.ts","webpack://grafana/./public/app/core/services/echo/init.ts","webpack://grafana/./public/app/core/services/keybindingSrv.ts","webpack://grafana/./public/app/features/alerting/unified/initAlerting.tsx","webpack://grafana/./public/app/features/dashboard-scene/embedding/EmbeddedDashboardLazy.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardLevelTimeMacro.ts","webpack://grafana/./public/app/features/live/centrifuge/LiveDataStream.ts","webpack://grafana/./public/app/features/live/centrifuge/channel.ts","webpack://grafana/./public/app/features/live/centrifuge/service.ts","webpack://grafana/./public/app/features/live/live.ts","webpack://grafana/./public/app/features/live/index.ts","webpack://grafana/./public/app/features/plugins/pluginPreloader.ts","webpack://grafana/./public/app/features/plugins/extensions/useLoadAppPlugins.tsx","webpack://grafana/./public/app/features/plugins/extensions/usePluginComponent.tsx","webpack://grafana/./public/app/features/plugins/extensions/validateExtensionPoint.ts","webpack://grafana/./public/app/features/plugins/extensions/usePluginComponents.tsx","webpack://grafana/./public/app/features/plugins/extensions/usePluginFunctions.tsx","webpack://grafana/./public/app/features/plugins/extensions/usePluginLinks.tsx","webpack://grafana/./public/app/core/utils/arrayMove.ts","webpack://grafana/./public/app/core/utils/flatten.ts","webpack://grafana/./public/app/core/utils/ticks.ts","webpack://grafana/./public/app/features/plugins/loader/sharedDependencies.ts","webpack://grafana/./public/app/features/plugins/loader/systemjsHooks.ts","webpack://grafana/./public/app/features/query/state/QueryRunner.ts","webpack://grafana/./public/app/features/runtime/init.ts","webpack://grafana/./public/app/features/variables/editor/selectors.ts","webpack://grafana/./public/app/features/variables/adhoc/AdHocVariableEditor.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/AdHocFilterValue.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/OperatorSegment.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/AdHocFilterBuilder.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/ConditionSegment.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/AdHocFilter.tsx","webpack://grafana/./public/app/features/variables/adhoc/picker/AdHocPicker.tsx","webpack://grafana/./public/app/features/variables/adhoc/urlParser.ts","webpack://grafana/./public/app/features/variables/adhoc/adapter.ts","webpack://grafana/./public/app/features/variables/query/reducer.ts","webpack://grafana/./public/app/features/variables/query/operators.ts","webpack://grafana/./public/app/features/variables/query/queryRunners.ts","webpack://grafana/./public/app/features/variables/query/VariableQueryRunner.ts","webpack://grafana/./public/app/features/variables/shared/formatVariable.ts","webpack://grafana/./public/app/features/variables/pickers/types.ts","webpack://grafana/./public/app/features/variables/pickers/shared/VariableInput.tsx","webpack://grafana/./public/app/features/variables/pickers/shared/VariableLink.tsx","webpack://grafana/./public/app/features/variables/pickers/shared/VariableOptions.tsx","webpack://grafana/./public/app/features/variables/pickers/OptionsPicker/actions.ts","webpack://grafana/./public/app/features/variables/pickers/OptionsPicker/OptionsPicker.tsx","webpack://grafana/./public/app/features/variables/constant/ConstantVariableEditor.tsx","webpack://grafana/./public/app/features/variables/constant/reducer.ts","webpack://grafana/./public/app/features/variables/constant/actions.ts","webpack://grafana/./public/app/features/variables/constant/adapter.ts","webpack://grafana/./public/app/core/utils/connectWithReduxStore.tsx","webpack://grafana/./public/app/features/variables/custom/CustomVariableEditor.tsx","webpack://grafana/./public/app/features/variables/custom/reducer.ts","webpack://grafana/./public/app/features/variables/custom/actions.ts","webpack://grafana/./public/app/features/variables/custom/adapter.ts","webpack://grafana/./public/app/features/variables/datasource/reducer.ts","webpack://grafana/./public/app/features/variables/datasource/actions.ts","webpack://grafana/./public/app/features/variables/datasource/DataSourceVariableEditor.tsx","webpack://grafana/./public/app/features/variables/datasource/adapter.ts","webpack://grafana/./public/app/features/variables/interval/IntervalVariableEditor.tsx","webpack://grafana/./public/app/features/variables/interval/actions.ts","webpack://grafana/./public/app/features/variables/interval/adapter.ts","webpack://grafana/./public/app/features/variables/query/variableQueryObserver.ts","webpack://grafana/./public/app/features/variables/query/actions.ts","webpack://grafana/./public/app/features/variables/query/QueryVariableEditor.tsx","webpack://grafana/./public/app/features/variables/query/adapter.ts","webpack://grafana/./public/app/features/variables/system/adapter.ts","webpack://grafana/./public/app/features/variables/textbox/TextBoxVariableEditor.tsx","webpack://grafana/./public/app/features/variables/textbox/TextBoxVariablePicker.tsx","webpack://grafana/./public/app/features/variables/textbox/reducer.ts","webpack://grafana/./public/app/features/variables/textbox/actions.ts","webpack://grafana/./public/app/features/variables/textbox/adapter.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/api/rules/v0alpha1/const.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/api/rules/v0alpha1/api.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/api/rules/v0alpha1/rules.api.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/advisor/v0alpha1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/advisor/v0alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/advisor/v0alpha1/index.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/correlations/v0alpha1/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/correlations/v0alpha1/endpoints.gen.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/correlations/v0alpha1/index.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/preferences/user/index.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/index.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/legacy/baseAPI.ts","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/legacy/endpoints.gen.ts","webpack://grafana/./public/app/api/clients/legacy/index.ts","webpack://grafana/./public/app/core/reducers/index.ts","webpack://grafana/./public/app/features/alerting/unified/state/reducers.ts","webpack://grafana/./public/app/features/alerting/state/reducers.ts","webpack://grafana/./public/app/core/reducers/root.ts","webpack://grafana/./public/app/store/configureStore.ts","webpack://grafana/./public/app/app.ts","webpack://grafana/./public/app/initApp.ts","webpack://grafana/./packages/grafana-ui/src/components/Tabs/Counter.tsx","webpack://grafana/./public/app/features/transformers/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/Label.tsx","webpack://grafana/./public/app/features/alerting/unified/types/time.ts","webpack://grafana/./public/app/features/alerting/unified/reducers/alertmanager/muteTimings.ts","webpack://grafana/./public/app/features/alerting/unified/utils/notifier-types.ts","webpack://grafana/./public/app/features/actions/utils.ts","webpack://grafana/./public/app/features/dimensions/editors/FileUploader.tsx","webpack://grafana/./public/app/features/dimensions/editors/ResourceCards.tsx","webpack://grafana/./public/app/features/dimensions/editors/FolderPickerTab.tsx","webpack://grafana/./public/app/features/dimensions/editors/URLPickerTab.tsx","webpack://grafana/./public/app/features/dimensions/editors/ResourcePickerPopover.tsx","webpack://grafana/./packages/grafana-alerting/src/grafana/rules/components/labels/AlertLabel.tsx","webpack://grafana/./public/app/plugins/datasource/dashboard/runSharedRequest.ts","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksListItemBase.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditorBase.tsx","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/createBaseQuery.ts","webpack://grafana/./public/app/plugins/panel/news/constants.ts","webpack://grafana/./public/app/features/variables/editor/types.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/geometries/Marker.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/usePagination.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OptionsPaneCategory.tsx","webpack://grafana/./public/app/core/navigation/hooks.ts","webpack://grafana/./packages/grafana-schema/src/raw/composable/gauge/panelcfg/x/GaugePanelCfg_types.gen.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/ActionsCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/BarGaugeCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/DataLinksCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/CellActions.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/DefaultCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/GeoCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/ImageCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/JSONViewCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/RowExpander.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/types/DashboardLayoutManager.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/histogram.ts","webpack://grafana/./public/app/features/admin/state/actions.ts","webpack://grafana/./public/app/features/alerting/unified/Analytics.ts","webpack://grafana/./public/app/features/variables/state/transactionReducer.ts","webpack://grafana/./public/app/features/org/state/reducers.ts","webpack://grafana/./packages/grafana-ui/src/components/Combobox/filter.ts","webpack://grafana/./packages/grafana-ui/src/components/EmptySearchResult/EmptySearchResult.tsx","webpack://grafana/./packages/grafana-ui/src/components/Collapse/CollapsableSection.tsx","webpack://grafana/./packages/grafana-data/src/datetime/durationutil.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/FooterCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Table/TableRT/FooterRow.tsx","webpack://grafana/./public/app/features/dashboard/components/DashNav/DashNavTimeControls.tsx","webpack://grafana/./public/app/features/logs/utils.ts","webpack://grafana/./public/app/features/alerting/unified/featureToggles.ts","webpack://grafana/./public/app/features/variables/state/keyedVariablesReducer.ts","webpack://grafana/./public/app/features/provisioning/components/Dashboards/DeleteProvisionedDashboardForm.tsx","webpack://grafana/./public/app/features/provisioning/components/Dashboards/DeleteProvisionedDashboardDrawer.tsx","webpack://grafana/./public/app/features/dashboard-scene/settings/DeleteDashboardButton.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/useComboboxFloat.ts","webpack://grafana/./packages/grafana-ui/src/utils/dataLinks.ts","webpack://grafana/./public/app/features/dashboard/utils/getRefreshFromUrl.ts","webpack://grafana/./public/app/features/dashboard/services/TimeSrv.ts","webpack://grafana/./public/app/features/library-panels/guard.ts","webpack://grafana/./public/app/features/dashboard-scene/utils/registerDynamicDashNavAction.ts","webpack://grafana/./public/app/features/dashboard-scene/pages/utils.ts","webpack://grafana/./public/app/features/alerting/unified/utils/annotations.tsx","webpack://grafana/./packages/grafana-data/src/types/navModel.ts","webpack://grafana/./public/app/features/apiserver/types.ts","webpack://grafana/./packages/grafana-ui/src/utils/validate.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/ruleGroup/useDeleteRuleFromGroup.ts","webpack://grafana/./public/app/features/alerting/unified/components/extensions/AlertInstanceExtensionPoint.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/AlertInstanceDetails.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/AlertInstancesTable.tsx","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/permissions.ts","webpack://grafana/./packages/grafana-data/src/types/alerts.ts","webpack://grafana/./public/app/features/alerting/unified/rule-list/components/util.ts","webpack://grafana/./public/app/features/provisioning/components/BulkActions/utils.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/api/notifications/v0alpha1/const.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/api/notifications/v0alpha1/api.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/api/notifications/v0alpha1/notifications.api.gen.ts","webpack://grafana/./public/app/plugins/panel/timeseries/SpanNullsEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/serialization/layoutSerializers/RowsLayoutSerializer.ts","webpack://grafana/./public/app/features/dashboard/components/GenAI/GenAIPanelTitleButton.tsx","webpack://grafana/./packages/grafana-data/src/field/fieldColor.ts","webpack://grafana/./packages/grafana-ui/src/components/Segment/SegmentAsync.tsx","webpack://grafana/./public/app/features/provisioning/components/defaults.ts","webpack://grafana/./packages/grafana-data/src/dataframe/frameComparisons.ts","webpack://grafana/./public/app/features/datasources/components/picker/DataSourceLogo.tsx","webpack://grafana/./public/app/features/datasources/components/picker/DataSourcePicker.tsx","webpack://grafana/./packages/grafana-data/src/field/FieldConfigOptionsRegistry.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/SqlExpressions/SqlExpressionsBanner.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationPickerNg.tsx","webpack://grafana/./public/app/features/query/components/QueryErrorAlert.tsx","webpack://grafana/./packages/grafana-runtime/src/analytics/plugins/usePluginInteractionReporter.ts","webpack://grafana/./packages/grafana-data/src/dataframe/DataFrameJSON.ts","webpack://grafana/./public/app/core/utils/kbn.ts","webpack://grafana/./public/app/plugins/datasource/loki/syntax.ts","webpack://grafana/./public/app/features/alerting/unified/utils/misc.ts","webpack://grafana/./public/app/features/alerting/unified/api/ruler.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/accessibility.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/alerting.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/card.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/code.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/dashboardGrid.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/dashdiff.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/elements.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/extra.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/filterTable.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/fonts.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/forms.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/hacks.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/jsonFormatter.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/legacySelect.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/markdownStyles.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/page.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/queryEditor.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/skeletonStyles.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/slate.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/uPlot.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/utilityClasses.ts","webpack://grafana/./packages/grafana-ui/src/themes/GlobalStyles/GlobalStyles.tsx","webpack://grafana/./public/app/features/query/state/processing/canceler.ts","webpack://grafana/./public/app/features/dashboard/utils/dashboard.ts","webpack://grafana/./public/app/features/alerting/unified/api/onCallApi.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/RadioButtonGroup/RadioButton.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/RadioButtonGroup/RadioButtonGroup.tsx","webpack://grafana/./public/app/features/variables/state/variablesReducer.ts","webpack://grafana/./packages/grafana-runtime/src/utils/useFavoriteDatasources.ts","webpack://grafana/./public/app/features/alerting/unified/components/export/FileExportPreview.tsx","webpack://grafana/./packages/grafana-data/src/utils/store.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/SeriesVisibilityConfigFactory.ts","webpack://grafana/./public/app/features/browse-dashboards/state/utils.ts","webpack://grafana/./public/app/features/alerting/unified/reducers/alertmanager/notificationPolicyRoutes.ts","webpack://grafana/./public/app/features/browse-dashboards/components/BrowseActions/utils.ts","webpack://grafana/./public/app/features/browse-dashboards/components/BrowseActions/DescendantCount.tsx","webpack://grafana/./public/app/features/transformers/spatial/utils.ts","webpack://grafana/./public/app/features/alerting/unified/components/export/providers.ts","webpack://grafana/./packages/grafana-ui/src/components/Cascader/optionMappings.ts","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/SaveDashboardButton.tsx","webpack://grafana/./packages/grafana-runtime/src/services/dataSourceSrv.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/const.ts","webpack://grafana/./public/app/features/alerting/unified/api/prometheus.ts","webpack://grafana/./packages/grafana-data/src/types/layout.ts","webpack://grafana/./public/app/features/explore/utils/links.ts","webpack://grafana/./packages/grafana-runtime/src/services/EchoSrv.ts","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/hooks/useConditionalRenderingEditor.tsx","webpack://grafana/./public/app/features/variables/shared/multiOptions.ts","webpack://grafana/./public/app/features/annotations/api.ts","webpack://grafana/./packages/grafana-data/src/utils/throwIfAngular.ts","webpack://grafana/./packages/grafana-ui/src/utils/useForceUpdate.ts","webpack://grafana/./packages/grafana-data/src/field/scale.ts","webpack://grafana/./packages/grafana-data/src/transformations/transformers/labelsToFields.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/InlineLabel.tsx","webpack://grafana/./packages/grafana-data/src/utils/numbers.ts","webpack://grafana/./packages/grafana-ui/src/options/builder/tooltip.tsx","webpack://grafana/./packages/grafana-data/src/types/transformations.ts","webpack://grafana/./packages/grafana-ui/src/components/InfoBox/InfoBox.tsx","webpack://grafana/./packages/grafana-runtime/src/services/navigation/useHelpNavItem.ts","webpack://grafana/./packages/grafana-data/src/context/plugins/PluginContext.tsx","webpack://grafana/./packages/grafana-data/src/types/dataLink.ts","webpack://grafana/./public/app/features/live/dashboard/types.ts","webpack://grafana/./public/app/features/live/dashboard/DashboardChangedModal.tsx","webpack://grafana/./public/app/features/live/dashboard/dashboardWatcher.ts","webpack://grafana/./public/app/features/users/utils.ts","webpack://grafana/./public/app/features/explore/utils/queries.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useAsync.tsx","webpack://grafana/./public/app/features/browse-dashboards/state/hooks.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/usePrometheusConsistencyCheck.ts","webpack://grafana/./public/app/features/provisioning/Shared/ProvisioningAlert.tsx","webpack://grafana/./public/app/features/explore/state/correlations.ts","webpack://grafana/./packages/grafana-runtime/src/components/DataSourcePicker.tsx","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/PanelDataPane/EmptyTransformationsMessage.tsx","webpack://grafana/./public/vendor/flot/jquery.flot.selection.js","webpack://grafana/./public/app/core/utils/richHistoryTypes.ts","webpack://grafana/./packages/grafana-sql/src/defaults.ts","webpack://grafana/./packages/grafana-ui/src/options/builder/stacking.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/xychart/panelcfg/x/XYChartPanelCfg_types.gen.ts","webpack://grafana/./packages/grafana-ui/src/components/Actions/VariablesInputModal.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinkSuggestions.tsx","webpack://grafana/./public/app/core/utils/accessControl.ts","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/SelectionReference.ts","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx","webpack://grafana/./public/app/core/utils/richHistory.ts","webpack://grafana/./public/app/features/expressions/components/ThresholdSelect.tsx","webpack://grafana/./public/vendor/flot/jquery.flot.crosshair.js","webpack://grafana/./public/app/features/dashboard/utils/screen.ts","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/SaveDashboardChangesAlert.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/Configuration.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/EmailSharingConfiguration.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/SettingsBarHeader.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/SettingsBar.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/SettingsSummary.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/ConfigPublicDashboard.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/useGetUnsupportedDataSources.ts","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/CreatePublicDashboard/AcknowledgeCheckboxes.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/CreatePublicDashboard/CreatePublicDashboard.tsx","webpack://grafana/./public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx","webpack://grafana/./packages/grafana-ui/src/components/SetInterval/SetInterval.tsx","webpack://grafana/./public/app/core/components/NestedFolderPicker/FolderRepo.tsx","webpack://grafana/./public/app/features/panel/panellinks/link_srv.ts","webpack://grafana/./public/app/features/panel/state/getAllSuggestions.ts","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VisualizationSuggestionCard.tsx","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VisualizationSuggestions.tsx","webpack://grafana/./public/app/features/dashboard/state/PanelModel.ts","webpack://grafana/./public/app/features/dashboard-scene/panel-edit/splitter/useSnappingSplitter.ts","webpack://grafana/./public/app/features/expressions/utils/expressionTypes.ts","webpack://grafana/./public/app/features/provisioning/utils/repositoryTypes.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-tabs/TabItemRenderer.tsx","webpack://grafana/./public/app/features/dashboard/state/analyticsProcessor.ts","webpack://grafana/./public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx","webpack://grafana/./public/app/features/dimensions/editors/ThresholdsEditor/thresholds.tsx","webpack://grafana/./public/app/features/dimensions/editors/ValueMappingsEditor/ValueMappingEditRow.tsx","webpack://grafana/./public/app/features/dimensions/editors/ValueMappingsEditor/ValueMappingsEditorModal.tsx","webpack://grafana/./public/app/features/dimensions/editors/ValueMappingsEditor/ValueMappingsEditor.tsx","webpack://grafana/./public/app/core/components/OptionsUI/DashboardPicker.tsx","webpack://grafana/./public/app/core/components/OptionsUI/actions.tsx","webpack://grafana/./public/app/core/components/OptionsUI/fieldColor.tsx","webpack://grafana/./public/app/core/components/OptionsUI/links.tsx","webpack://grafana/./public/app/core/components/OptionsUI/multiSelect.tsx","webpack://grafana/./public/app/core/components/OptionsUI/select.tsx","webpack://grafana/./public/app/core/components/OptionsUI/stats.tsx","webpack://grafana/./public/app/core/components/OptionsUI/strings.tsx","webpack://grafana/./public/app/core/components/OptionsUI/units.tsx","webpack://grafana/./public/app/core/components/OptionsUI/registry.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/types.ts","webpack://grafana/./public/app/features/alerting/unified/utils/routeAdapter.ts","webpack://grafana/./packages/grafana-data/src/types/fieldOverrides.ts","webpack://grafana/./public/app/features/search/types.ts","webpack://grafana/./public/app/features/variables/query/QueryVariableSortSelect.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeLabel.tsx","webpack://grafana/./packages/grafana-runtime/src/services/QueryRunner.ts","webpack://grafana/./public/app/features/alerting/unified/components/AnnotationDetailsField.tsx","webpack://grafana/./public/app/api/clients/provisioning/utils/createOnCacheEntryAdded.ts","webpack://grafana/./public/app/api/clients/provisioning/v0alpha1/index.ts","webpack://grafana/./packages/grafana-ui/src/components/Forms/InlineSegmentGroup.tsx","webpack://grafana/./public/app/features/users/TokenRevokedModal.tsx","webpack://grafana/./public/app/core/utils/fetch.ts","webpack://grafana/./public/app/core/services/FetchQueue.ts","webpack://grafana/./public/app/core/services/FetchQueueWorker.ts","webpack://grafana/./public/app/core/services/ResponseQueue.ts","webpack://grafana/./public/app/core/services/backend_srv.ts","webpack://grafana/./public/app/features/alerting/unified/components/silences/AmAlertStateTag.tsx","webpack://grafana/./public/app/features/explore/state/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/buildNewDashboardSaveModel.ts","webpack://grafana/./public/app/core/selectors/navModel.ts","webpack://grafana/./packages/grafana-data/src/types/dashboard.ts","webpack://grafana/./public/app/plugins/datasource/alertmanager/types.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/sceneVariablesSetToVariables.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/plugins/CloseButton.tsx","webpack://grafana/./public/app/features/alerting/unified/rule-editor/formDefaults.ts","webpack://grafana/./packages/grafana-ui/src/components/PageLayout/PageToolbar.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/calculateField.ts","webpack://grafana/./public/app/features/datasources/components/picker/DataSourceCard.tsx","webpack://grafana/./public/app/core/components/OptionsUI/number.tsx","webpack://grafana/./public/app/features/alerting/unified/components/InfoPausedRule.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/DataLayerControl.tsx","webpack://grafana/./public/app/core/components/QueryOperationRow/QueryOperationRowHeader.tsx","webpack://grafana/./public/app/core/components/QueryOperationRow/QueryOperationRow.tsx","webpack://grafana/./packages/grafana-api-clients/src/clients/rtkq/user/index.ts","webpack://grafana/./public/app/api/utils.ts","webpack://grafana/./public/app/features/plugins/components/PluginStateInfo.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/diff.ts","webpack://grafana/./packages/grafana-data/src/types/action.ts","webpack://grafana/./packages/grafana-ui/src/utils/table.ts","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/hooks/ConditionalRenderingOverlay.tsx","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/hooks/useIsConditionallyHidden.tsx","webpack://grafana/./public/app/core/components/PageNotFound/PageNotFound.tsx","webpack://grafana/./public/app/types/unified-alerting.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/links/utils.ts","webpack://grafana/./public/app/plugins/panel/canvas/panelcfg.gen.ts","webpack://grafana/./public/app/features/annotations/executeAnnotationQuery.ts","webpack://grafana/./public/app/features/geo/utils/location.ts","webpack://grafana/./packages/grafana-ui/src/components/Menu/Menu.tsx","webpack://grafana/./packages/grafana-ui/src/components/TextArea/TextArea.tsx","webpack://grafana/./public/app/features/browse-dashboards/state/reducers.ts","webpack://grafana/./public/app/features/browse-dashboards/state/slice.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/ContactPointLink.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/RowRepeaterBehavior.ts","webpack://grafana/./public/app/features/panel/state/actions.ts","webpack://grafana/./public/app/types/events.ts","webpack://grafana/./public/app/features/dashboard-scene/conditional-rendering/conditions/utils.ts","webpack://grafana/./public/app/features/admin/ldap/LdapSyncInfo.tsx","webpack://grafana/./public/app/plugins/datasource/mysql/fields.ts","webpack://grafana/./public/app/plugins/datasource/mysql/sqlUtil.ts","webpack://grafana/./public/app/features/expressions/utils/metaSqlExpr.ts","webpack://grafana/./public/app/features/expressions/components/GenAI/hooks/useSQLExplanations.ts","webpack://grafana/./public/app/features/expressions/components/GenAI/hooks/useSQLSuggestions.ts","webpack://grafana/./public/app/features/expressions/components/QueryToolbox.tsx","webpack://grafana/./public/app/features/expressions/components/sqlCompletionProvider.ts","webpack://grafana/./public/app/features/expressions/components/SqlExpr.tsx","webpack://grafana/./public/app/plugins/datasource/cloudwatch/migrations/dashboardMigrations.ts","webpack://grafana/./public/app/features/dimensions/scale.ts","webpack://grafana/./public/app/features/alerting/unified/components/notification-policies/permissions.ts","webpack://grafana/./public/app/features/provisioning/Shared/MessageList.tsx","webpack://grafana/./public/app/features/transformers/docs/constants.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardMacro.ts","webpack://grafana/./packages/grafana-ui/src/components/MatchersUI/FieldsByFrameRefIdMatcher.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/findAllGridTypes.ts","webpack://grafana/./public/app/features/alerting/unified/withPageErrorBoundary.tsx","webpack://grafana/./packages/grafana-ui/src/components/Dropdown/Dropdown.tsx","webpack://grafana/./public/app/features/alerting/unified/components/expressions/util.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/DashboardDataLayerSet.tsx","webpack://grafana/./public/app/core/components/CardButton.tsx","webpack://grafana/./public/app/features/panel/components/PanelDataErrorView.tsx","webpack://grafana/./packages/grafana-data/src/dataframe/DataFrameView.ts","webpack://grafana/./public/app/features/variables/state/sharedReducer.ts","webpack://grafana/./packages/grafana-runtime/src/components/PluginPage.tsx","webpack://grafana/./public/app/features/variables/types.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/links/DashboardLinkList.tsx","webpack://grafana/./packages/grafana-data/src/types/annotations.ts","webpack://grafana/./packages/grafana-ui/src/components/BrowserLabel/Label.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/VizLegendStatsList.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizLegend/VizLegendListItem.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-editor/VizWrapper.tsx","webpack://grafana/./public/app/features/manage-dashboards/services/ValidationSrv.ts","webpack://grafana/./public/app/features/panel/state/reducers.ts","webpack://grafana/./public/app/features/explore/hooks/useExploreDataLinkPostProcessor.ts","webpack://grafana/./public/app/core/components/AppChrome/OrganizationSwitcher/OrganizationSelect.tsx","webpack://grafana/./public/app/core/components/AppChrome/OrganizationSwitcher/OrganizationSwitcher.tsx","webpack://grafana/./public/app/core/components/AppChrome/MegaMenu/MegaMenuHeader.tsx","webpack://grafana/./public/app/features/inspector/styles.ts","webpack://grafana/./packages/grafana-ui/src/components/Segment/SegmentSelect.tsx","webpack://grafana/./packages/grafana-ui/src/components/Collapse/Collapse.tsx","webpack://grafana/./packages/grafana-ui/src/components/Link/TextLink.tsx","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/NamedColorsGroup.tsx","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/NamedColorsPalette.tsx","webpack://grafana/./packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.tsx","webpack://grafana/./public/app/features/expressions/components/Reduce.tsx","webpack://grafana/./public/app/plugins/datasource/tempo/dataquery.gen.ts","webpack://grafana/./public/app/features/transformers/spatial/models.gen.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsAnnotations.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsButtons.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx","webpack://grafana/./public/app/features/alerting/unified/components/Expression.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetailsExpression.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetails.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsView/LibraryPanelsView.tsx","webpack://grafana/./public/app/features/geo/editor/locationModeEditor.tsx","webpack://grafana/./public/app/features/geo/editor/locationEditor.ts","webpack://grafana/./public/app/api/clients/folder/v1beta1/utils.ts","webpack://grafana/./packages/grafana-data/src/types/orgs.ts","webpack://grafana/./public/app/features/dashboard/utils/timeRange.ts","webpack://grafana/./public/app/core/components/Indent/Indent.tsx","webpack://grafana/./public/app/features/annotations/standardAnnotationSupport.ts","webpack://grafana/./packages/grafana-ui/src/components/RefreshPicker/RefreshPicker.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/panel-timerange/PanelTimeRangeDrawer.tsx","webpack://grafana/./public/app/features/admin/ldap/LdapConnectionStatus.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.tsx","webpack://grafana/./public/app/features/expressions/components/Condition.tsx","webpack://grafana/./public/app/features/expressions/components/ClassicConditions.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/utils.ts","webpack://grafana/./public/app/core/components/Select/FolderPicker.tsx","webpack://grafana/./packages/grafana-ui/src/slate-plugins/selection_shortcuts.ts","webpack://grafana/./packages/grafana-ui/src/components/Slider/styles.ts","webpack://grafana/./public/vendor/flot/jquery.flot.stackpercent.js","webpack://grafana/./public/app/features/provisioning/constants.ts","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeSyncButton.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/utils/useTimeSync.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/ConvertMixedGridsModal.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/ungroupConfirmation.tsx","webpack://grafana/./public/app/features/alerting/unified/api/alertmanagerApi.ts","webpack://grafana/./public/app/features/stars/hooks.ts","webpack://grafana/./public/app/features/stars/StarToolbarButton.tsx","webpack://grafana/./public/app/core/components/PanelTypeFilter/PanelTypeFilter.tsx","webpack://grafana/./public/app/features/dashboard-scene/utils/utils.ts","webpack://grafana/./public/app/features/alerting/unified/components/notification-policies/Matchers.tsx","webpack://grafana/./packages/grafana-ui/src/components/Menu/hooks.ts","webpack://grafana/./packages/grafana-data/src/utils/location.ts","webpack://grafana/./packages/grafana-runtime/src/services/RuntimeDataSource.ts","webpack://grafana/./packages/grafana-runtime/src/utils/rbac.ts","webpack://grafana/./packages/grafana-runtime/src/components/QueryEditorWithMigration.tsx","webpack://grafana/./public/app/core/components/AppChrome/ExtensionSidebar/ExtensionSidebar.tsx","webpack://grafana/./public/vendor/flot/jquery.flot.fillbelow.js","webpack://grafana/./packages/grafana-runtime/src/utils/chromeHeaderHeight.ts","webpack://grafana/./public/app/features/alerting/unified/utils/url.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/types/DashboardLayoutGroup.ts","webpack://grafana/./public/app/features/plugins/importPanelPlugin.ts","webpack://grafana/./public/app/features/provisioning/utils/selectors.ts","webpack://grafana/./public/app/features/dashboard-scene/sharing/ExportButton/ExportButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/sharing/ShareButton/ShareButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/GoToSnapshotOriginButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/ManagedDashboardNavBarBadge.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/OpenSnapshotOriginButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/StarButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/LeftActions.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/NavToolbarActions.tsx","webpack://grafana/./packages/grafana-data/src/field/fieldComparers.ts","webpack://grafana/./packages/grafana-ui/src/components/QueryField/QueryField.tsx","webpack://grafana/./public/app/features/query/state/DashboardQueryRunner/utils.ts","webpack://grafana/./public/app/features/provisioning/hooks/usePRBranch.ts","webpack://grafana/./public/app/features/explore/extensions/AddToDashboard/addToDashboard.ts","webpack://grafana/./public/app/features/explore/extensions/AddToDashboard/ExploreToDashboardPanel.tsx","webpack://grafana/./public/app/types/serviceaccount.ts","webpack://grafana/./public/app/features/provisioning/utils/git.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/Plot.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/SuffixIcon.tsx","webpack://grafana/./public/app/core/components/Branding/Branding.tsx","webpack://grafana/./packages/grafana-ui/src/components/Splitter/useSplitter.ts","webpack://grafana/./public/app/features/geo/editor/GazetteerPathEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/Button/ButtonGroup.tsx","webpack://grafana/./packages/grafana-alerting/src/grafana/rules/utils/labels.ts","webpack://grafana/./packages/grafana-alerting/src/grafana/rules/components/labels/AlertLabels.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/statushistory/panelcfg/x/StatusHistoryPanelCfg_types.gen.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/DashboardGridItemEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/DashboardGridItemRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/DashboardGridItemVariableDependencyHandler.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-default/DashboardGridItem.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useAlertManagerSources.ts","webpack://grafana/./packages/grafana-ui/src/utils/typeahead.ts","webpack://grafana/./packages/grafana-ui/src/components/Typeahead/TypeaheadInfo.tsx","webpack://grafana/./packages/grafana-ui/src/components/Typeahead/TypeaheadItem.tsx","webpack://grafana/./packages/grafana-ui/src/components/Typeahead/Typeahead.tsx","webpack://grafana/./packages/grafana-ui/src/slate-plugins/suggestions.tsx","webpack://grafana/./packages/grafana-ui/src/components/Combobox/utils.ts","webpack://grafana/./public/app/features/datasources/components/picker/DataSourceList.tsx","webpack://grafana/./public/app/features/variables/state/selectors.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/plugins/KeyboardPlugin.tsx","webpack://grafana/./public/app/core/components/TagFilter/TagOption.tsx","webpack://grafana/./public/app/core/components/TagFilter/TagFilter.tsx","webpack://grafana/./public/app/features/search/service/utils.ts","webpack://grafana/./public/app/features/org/state/actions.ts","webpack://grafana/./packages/grafana-ui/src/components/Table/Cells/SparklineCell.tsx","webpack://grafana/./packages/grafana-ui/src/components/Tags/Tag.tsx","webpack://grafana/./public/app/core/components/NativeScrollbar.tsx","webpack://grafana/./public/app/core/hooks/useBusEvent.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/ruleGroup/usePauseAlertRule.ts","webpack://grafana/./public/app/features/alerting/unified/components/MenuItemPauseRule.tsx","webpack://grafana/./public/app/features/alerting/unified/plugins/useRulePluginLinkExtensions.ts","webpack://grafana/./public/app/features/alerting/unified/components/bridges/DeclareIncidentButton.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/AlertRuleMenu.tsx","webpack://grafana/./packages/grafana-data/src/utils/variables.ts","webpack://grafana/./packages/grafana-ui/src/components/Menu/utils.ts","webpack://grafana/./packages/grafana-ui/src/components/Menu/SubMenu.tsx","webpack://grafana/./packages/grafana-ui/src/components/Menu/MenuItem.tsx","webpack://grafana/./public/app/features/explore/state/time.ts","webpack://grafana/./public/app/features/provisioning/components/Shared/ProvisioningAwareFolderPicker.tsx","webpack://grafana/./packages/grafana-data/src/types/datasource.ts","webpack://grafana/./public/app/features/alerting/unified/utils/rule-id.ts","webpack://grafana/./packages/grafana-data/src/vector/CircularVector.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layouts-shared/layoutRegistry.ts","webpack://grafana/./packages/grafana-ui/src/components/FormField/FormField.tsx","webpack://grafana/./public/app/features/plugins/pluginSettings.ts","webpack://grafana/./public/app/features/plugins/admin/constants.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/BackToDashboardButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/DashboardSettingsButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/DiscardLibraryPanelButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/DiscardPanelButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/ToolbarSwitch.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/EditDashboardSwitch.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/ShareExportDashboardButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/ExportDashboardButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/MakeDashboardEditableButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/PlayListNextButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/PlayListPreviousButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/PlayListStopButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/SaveDashboard.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/SaveLibraryPanelButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/ShareDashboardButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/UnlinkLibraryPanelButton.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/RightActions.tsx","webpack://grafana/./public/app/features/dashboard/api/types.ts","webpack://grafana/./public/app/features/alerting/unified/utils/constants.ts","webpack://grafana/./public/app/core/components/Select/DashboardPicker.tsx","webpack://grafana/./packages/grafana-data/src/transformations/transformers/order.ts","webpack://grafana/./public/app/features/dashboard/utils/tracking.ts","webpack://grafana/./public/app/core/constants.ts","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx","webpack://grafana/./public/app/features/plugins/extensions/logs/log.ts","webpack://grafana/./public/app/features/query/components/QueryEditorRowHeader.tsx","webpack://grafana/./public/app/features/query/components/QueryLibraryEditingContainer.tsx","webpack://grafana/./public/app/features/query/components/QueryEditorRow.tsx","webpack://grafana/./public/app/features/inspector/QueryInspector.tsx","webpack://grafana/./public/app/features/variables/state/types.ts","webpack://grafana/./public/app/features/alerting/unified/reducers/ruler/ruleGroups.ts","webpack://grafana/./public/app/features/query/state/mergePanelAndDashData.ts","webpack://grafana/./public/app/features/query/state/PanelQueryRunner.ts","webpack://grafana/./public/app/types/appNotifications.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/RuleViewerVisualization.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/Query/SQLQueryPreview.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/Query/DataSourceModelPreview.tsx","webpack://grafana/./public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx","webpack://grafana/./public/app/features/alerting/unified/utils/query.ts","webpack://grafana/./public/app/features/alerting/unified/components/rule-viewer/tabs/Query.tsx","webpack://grafana/./packages/grafana-ui/src/components/DateTimePickers/DatePicker/DatePicker.tsx","webpack://grafana/./packages/grafana-data/src/vector/FunctionalVector.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/SoloPanelContext.tsx","webpack://grafana/./public/app/features/provisioning/components/Shared/RepoInvalidStateBanner.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useFilteredRules.ts","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinkEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinkEditorModalContent.tsx","webpack://grafana/./packages/grafana-ui/src/components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditor.tsx","webpack://grafana/./packages/grafana-ui/src/components/Forms/InlineFieldRow.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowItemEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowItemRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowItemsEditor.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowItems.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowItem.tsx","webpack://grafana/./packages/grafana-ui/src/components/ContextMenu/ContextMenu.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/barchart/panelcfg/x/BarChartPanelCfg_types.gen.ts","webpack://grafana/./public/app/features/explore/Graph/exploreGraphStyleUtils.ts","webpack://grafana/./public/app/features/explore/Graph/useStructureRev.ts","webpack://grafana/./public/app/features/explore/Graph/ExploreGraph.tsx","webpack://grafana/./public/app/features/alerting/unified/openapi/receiversApi.gen.ts","webpack://grafana/./public/app/features/alerting/unified/api/receiversK8sApi.ts","webpack://grafana/./public/app/features/alerting/unified/components/contact-points/useContactPoints.ts","webpack://grafana/./packages/grafana-runtime/src/utils/toDataQueryError.ts","webpack://grafana/./public/app/features/library-panels/types.ts","webpack://grafana/./packages/grafana-ui/src/components/BigValue/PercentChange.tsx","webpack://grafana/./packages/grafana-ui/src/components/BigValue/BigValueLayout.tsx","webpack://grafana/./packages/grafana-ui/src/components/BigValue/BigValue.tsx","webpack://grafana/./packages/grafana-schema/src/raw/composable/heatmap/panelcfg/x/HeatmapPanelCfg_types.gen.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowItemRepeater.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowsLayoutManagerRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-rows/RowsLayoutManager.tsx","webpack://grafana/./public/app/features/provisioning/components/BulkActions/useBulkActionJob.ts","webpack://grafana/./packages/grafana-ui/src/components/BarGauge/BarGauge.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/new-toolbar/actions/PublicDashboardBadge.tsx","webpack://grafana/./public/app/features/plugins/loader/constants.ts","webpack://grafana/./public/app/features/alerting/unified/hooks/useUnifiedAlertingSelector.ts","webpack://grafana/./packages/grafana-data/src/utils/flotPairs.ts","webpack://grafana/./packages/grafana-data/src/utils/series.ts","webpack://grafana/./packages/grafana-data/src/vector/ArrayVector.ts","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-tabs/TabItemRepeater.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-tabs/TabsLayoutManagerRenderer.tsx","webpack://grafana/./public/app/features/dashboard-scene/scene/layout-tabs/TabsLayoutManager.tsx","webpack://grafana/./public/app/features/dashboard/components/HelpWizard/utils.ts","webpack://grafana/./public/app/features/alerting/unified/components/rules/central-state-history/CentralAlertHistorySceneExposedComponent.tsx","webpack://grafana/./public/app/features/dashboard-scene/addToDashboard/AddToDashboardFormExposedComponent.tsx","webpack://grafana/./public/app/features/explore/extensions/getExploreExtensionConfigs.tsx","webpack://grafana/./public/app/features/plugins/extensions/getCoreExtensionConfigurations.ts","webpack://grafana/./public/app/features/plugins/extensions/registry/Registry.ts","webpack://grafana/./public/app/features/plugins/extensions/registry/AddedComponentsRegistry.ts","webpack://grafana/./public/app/features/plugins/extensions/registry/AddedFunctionsRegistry.ts","webpack://grafana/./public/app/features/plugins/extensions/registry/AddedLinksRegistry.ts","webpack://grafana/./public/app/features/plugins/extensions/registry/ExposedComponentsRegistry.ts","webpack://grafana/./public/app/features/plugins/extensions/registry/setup.ts","webpack://grafana/./public/app/features/geo/format/geohash.ts","webpack://grafana/./public/app/features/geo/format/utils.ts","webpack://grafana/./public/app/features/variables/interval/reducer.ts","webpack://grafana/./packages/grafana-ui/src/components/Combobox/getComboboxStyles.ts","webpack://grafana/./public/app/features/search/constants.ts","webpack://grafana/./public/app/features/variables/utils.ts","webpack://grafana/./public/app/features/dashboard-scene/serialization/dataLayersToAnnotations.ts","webpack://grafana/./packages/grafana-ui/src/components/uPlot/config.ts","webpack://grafana/./public/app/features/dashboard-scene/settings/variables/components/AdHocVariableForm.tsx","webpack://grafana/./public/app/core/utils/applyStateChanges.ts","webpack://grafana/./public/app/features/variables/pickers/OptionsPicker/reducer.ts","webpack://grafana/./public/app/features/variables/inspect/reducer.ts","webpack://grafana/./public/app/plugins/panel/timeseries/ThresholdsStyleEditor.tsx","webpack://grafana/./public/app/features/dashboard/api/v2.ts","webpack://grafana/./packages/grafana-data/src/utils/fuzzySearch.ts","webpack://grafana/./packages/grafana-ui/src/components/Badge/Badge.tsx"],"sourcesContent":["import { PropsWithChildren, useMemo } from 'react';\n\nimport { VariableType, VariableHide } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Field, RadioButtonGroup } from '@grafana/ui';\n\ninterface Props {\n onChange: (option: VariableHide) => void;\n hide: VariableHide;\n type: VariableType;\n}\n\nexport function VariableHideSelect({ onChange, hide, type }: PropsWithChildren<Props>) {\n const HIDE_OPTIONS = useMemo(\n () => [\n {\n label: t('dashboard-scene.variable-hide-select.hide_options.label.nothing', 'Nothing'),\n value: VariableHide.dontHide,\n },\n {\n label: t('dashboard-scene.variable-hide-select.hide_options.label.variable', 'Variable'),\n value: VariableHide.hideVariable,\n },\n {\n label: t('dashboard-scene.variable-hide-select.hide_options.label.label', 'Label'),\n value: VariableHide.hideLabel,\n },\n ],\n []\n );\n const value = useMemo(\n () => HIDE_OPTIONS.find((o) => o.value === hide)?.value ?? HIDE_OPTIONS[0].value,\n [hide, HIDE_OPTIONS]\n );\n\n if (type === 'constant') {\n return null;\n }\n\n return (\n <Field label={t('dashboard-scene.variable-hide-select.label', 'Hide')}>\n <RadioButtonGroup options={HIDE_OPTIONS} onChange={onChange} value={value} />\n </Field>\n );\n}\n","import { getConfig } from 'app/core/config';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { GRAFANA_RULES_SOURCE_NAME, isGrafanaRulesSource } from './datasource';\n\ntype RulesSourceType = 'grafana' | 'external';\n\nfunction getRulesSourceType(alertManagerSourceName: string): RulesSourceType {\n return isGrafanaRulesSource(alertManagerSourceName) ? 'grafana' : 'external';\n}\n\nexport const instancesPermissions = {\n read: {\n grafana: AccessControlAction.AlertingInstanceRead,\n external: AccessControlAction.AlertingInstancesExternalRead,\n },\n create: {\n grafana: AccessControlAction.AlertingInstanceCreate,\n external: AccessControlAction.AlertingInstancesExternalWrite,\n },\n update: {\n grafana: AccessControlAction.AlertingInstanceUpdate,\n external: AccessControlAction.AlertingInstancesExternalWrite,\n },\n delete: {\n grafana: AccessControlAction.AlertingInstanceUpdate,\n external: AccessControlAction.AlertingInstancesExternalWrite,\n },\n};\n\nexport const notificationsPermissions = {\n read: {\n grafana: AccessControlAction.AlertingNotificationsRead,\n external: AccessControlAction.AlertingNotificationsExternalRead,\n },\n create: {\n grafana: AccessControlAction.AlertingNotificationsWrite,\n external: AccessControlAction.AlertingNotificationsExternalWrite,\n },\n update: {\n grafana: AccessControlAction.AlertingNotificationsWrite,\n external: AccessControlAction.AlertingNotificationsExternalWrite,\n },\n delete: {\n grafana: AccessControlAction.AlertingNotificationsWrite,\n external: AccessControlAction.AlertingNotificationsExternalWrite,\n },\n};\n\nexport const silencesPermissions = {\n read: {\n grafana: AccessControlAction.AlertingSilenceRead,\n external: AccessControlAction.AlertingInstanceRead,\n },\n create: {\n grafana: AccessControlAction.AlertingSilenceCreate,\n external: AccessControlAction.AlertingInstancesExternalWrite,\n },\n update: {\n grafana: AccessControlAction.AlertingSilenceUpdate,\n external: AccessControlAction.AlertingInstancesExternalWrite,\n },\n};\n\nexport const provisioningPermissions = {\n read: AccessControlAction.AlertingProvisioningRead,\n readSecrets: AccessControlAction.AlertingProvisioningReadSecrets,\n write: AccessControlAction.AlertingProvisioningWrite,\n};\n\nconst rulesPermissions = {\n read: {\n grafana: AccessControlAction.AlertingRuleRead,\n external: AccessControlAction.AlertingRuleExternalRead,\n },\n create: {\n grafana: AccessControlAction.AlertingRuleCreate,\n external: AccessControlAction.AlertingRuleExternalWrite,\n },\n update: {\n grafana: AccessControlAction.AlertingRuleUpdate,\n external: AccessControlAction.AlertingRuleExternalWrite,\n },\n delete: {\n grafana: AccessControlAction.AlertingRuleDelete,\n external: AccessControlAction.AlertingRuleExternalWrite,\n },\n};\n\nexport function getInstancesPermissions(rulesSourceName: string) {\n const sourceType = getRulesSourceType(rulesSourceName);\n\n return {\n read: instancesPermissions.read[sourceType],\n create: instancesPermissions.create[sourceType],\n update: instancesPermissions.update[sourceType],\n delete: instancesPermissions.delete[sourceType],\n };\n}\n\nexport function getNotificationsPermissions(rulesSourceName: string) {\n const sourceType = getRulesSourceType(rulesSourceName);\n\n return {\n read: notificationsPermissions.read[sourceType],\n create: notificationsPermissions.create[sourceType],\n update: notificationsPermissions.update[sourceType],\n delete: notificationsPermissions.delete[sourceType],\n provisioning: provisioningPermissions,\n };\n}\n\nexport function getRulesPermissions(rulesSourceName: string) {\n const sourceType = getRulesSourceType(rulesSourceName);\n\n return {\n read: rulesPermissions.read[sourceType],\n create: rulesPermissions.create[sourceType],\n update: rulesPermissions.update[sourceType],\n delete: rulesPermissions.delete[sourceType],\n };\n}\n\nexport function evaluateAccess(actions: AccessControlAction[]) {\n return () => {\n return contextSrv.evaluatePermission(actions);\n };\n}\n\nexport function getRulesAccess() {\n return {\n canCreateGrafanaRules:\n contextSrv.hasPermission(AccessControlAction.FoldersRead) &&\n contextSrv.hasPermission(rulesPermissions.create.grafana),\n canCreateCloudRules:\n contextSrv.hasPermission(AccessControlAction.DataSourcesRead) &&\n contextSrv.hasPermission(rulesPermissions.create.external),\n canEditRules: (rulesSourceName: string) => {\n return contextSrv.hasPermission(getRulesPermissions(rulesSourceName).update);\n },\n };\n}\n\nexport function getCreateAlertInMenuAvailability() {\n const { unifiedAlertingEnabled } = getConfig();\n const hasRuleReadPermissions = contextSrv.hasPermission(getRulesPermissions(GRAFANA_RULES_SOURCE_NAME).read);\n const hasRuleUpdatePermissions = contextSrv.hasPermission(getRulesPermissions(GRAFANA_RULES_SOURCE_NAME).update);\n const isAlertingAvailableForRead = unifiedAlertingEnabled && hasRuleReadPermissions;\n\n return isAlertingAvailableForRead && hasRuleUpdatePermissions;\n}\n","import { memo, useCallback } from 'react';\n\nimport { LineStyle } from '@grafana/schema';\n\nimport { SeriesColorPicker } from '../ColorPicker/ColorPicker';\nimport { usePanelContext } from '../PanelChrome';\n\nimport { SeriesIcon } from './SeriesIcon';\n\ninterface Props {\n seriesName: string;\n color?: string;\n gradient?: string;\n readonly?: boolean;\n lineStyle?: LineStyle;\n}\n\n/**\n * @internal\n */\nexport const VizLegendSeriesIcon = memo(({ seriesName, color, gradient, readonly, lineStyle }: Props) => {\n const { onSeriesColorChange } = usePanelContext();\n const onChange = useCallback(\n (color: string) => {\n return onSeriesColorChange!(seriesName, color);\n },\n [seriesName, onSeriesColorChange]\n );\n\n if (seriesName && onSeriesColorChange && color && !readonly) {\n return (\n <SeriesColorPicker color={color} onChange={onChange} enableNamedColors>\n {({ ref, showColorPicker, hideColorPicker }) => (\n <SeriesIcon\n color={color}\n className=\"pointer\"\n ref={ref}\n onClick={showColorPicker}\n onMouseLeave={hideColorPicker}\n lineStyle={lineStyle}\n />\n )}\n </SeriesColorPicker>\n );\n }\n return <SeriesIcon color={color} gradient={gradient} lineStyle={lineStyle} />;\n});\n\nVizLegendSeriesIcon.displayName = 'VizLegendSeriesIcon';\n","import { DataSourceInstanceSettings, DataSourceJsonData } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { SupportedPlugin } from '../types/pluginBridges';\n\nimport { isValidPrometheusDuration, safeParsePrometheusDuration } from './time';\n\nexport function getAllDataSources(): Array<DataSourceInstanceSettings<DataSourceJsonData>> {\n return Object.values(config.datasources);\n}\n\nexport function checkEvaluationIntervalGlobalLimit(alertGroupEvaluateEvery?: string) {\n // config.unifiedAlerting.minInterval should be Prometheus-compatible duration\n // However, Go's gtime library has issues with parsing y,w,d\n if (!isValidPrometheusDuration(config.unifiedAlerting.minInterval)) {\n return { globalLimit: 0, exceedsLimit: false };\n }\n\n const evaluateEveryGlobalLimitMs = safeParsePrometheusDuration(config.unifiedAlerting.minInterval);\n\n if (!alertGroupEvaluateEvery || !isValidPrometheusDuration(alertGroupEvaluateEvery)) {\n return { globalLimit: evaluateEveryGlobalLimitMs, exceedsLimit: false };\n }\n\n const evaluateEveryMs = safeParsePrometheusDuration(alertGroupEvaluateEvery);\n\n const exceedsLimit = evaluateEveryGlobalLimitMs > evaluateEveryMs && evaluateEveryMs > 0;\n\n return { globalLimit: evaluateEveryGlobalLimitMs, exceedsLimit };\n}\n\nexport function getIsIrmPluginPresent() {\n return SupportedPlugin.Irm in config.apps;\n}\n\nexport function getIrmIfPresentOrIncidentPluginId() {\n return getIsIrmPluginPresent() ? SupportedPlugin.Irm : SupportedPlugin.Incident;\n}\n\nexport function getIrmIfPresentOrOnCallPluginId() {\n return getIsIrmPluginPresent() ? SupportedPlugin.Irm : SupportedPlugin.OnCall;\n}\n","import {\n DataLink,\n DisplayValue,\n FieldDisplay,\n formattedValueToString,\n getFieldDisplayValuesProxy,\n getTimeField,\n InterpolateFunction,\n Labels,\n LinkModelSupplier,\n ScopedVar,\n ScopedVars,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { VizPanel } from '@grafana/scenes';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { dashboardSceneGraph } from 'app/features/dashboard-scene/utils/dashboardSceneGraph';\n\nimport { getLinkSrv } from './link_srv';\n\ninterface SeriesVars {\n name?: string;\n refId?: string;\n}\n\ninterface FieldVars {\n name: string;\n labels?: Labels;\n}\n\ninterface ValueVars {\n raw: any;\n numeric: number;\n text: string;\n time?: number;\n calc?: string;\n}\n\ninterface DataViewVars {\n name?: string;\n refId?: string;\n fields?: Record<string, DisplayValue>;\n}\n\ninterface DataLinkScopedVars extends ScopedVars {\n __series: ScopedVar<SeriesVars>;\n __field: ScopedVar<FieldVars>;\n __value: ScopedVar<ValueVars>;\n __data: ScopedVar<DataViewVars>;\n}\n\n/**\n * Link suppliers creates link models based on a link origin\n */\nexport const getFieldLinksSupplier = (value: FieldDisplay): LinkModelSupplier<FieldDisplay> | undefined => {\n const links = value.field.links;\n if (!links || links.length === 0) {\n return undefined;\n }\n\n return {\n getLinks: (replaceVariables: InterpolateFunction) => {\n const scopedVars: Partial<DataLinkScopedVars> = {};\n\n if (value.view) {\n const { dataFrame } = value.view;\n\n scopedVars['__series'] = {\n value: {\n name: dataFrame.name,\n refId: dataFrame.refId,\n },\n text: t('panel.get-field-links-supplier.text.series', 'Series'),\n };\n\n const field = value.colIndex !== undefined ? dataFrame.fields[value.colIndex] : undefined;\n\n if (field) {\n scopedVars['__field'] = {\n value: {\n name: field.name,\n labels: field.labels,\n },\n text: t('panel.get-field-links-supplier.text.field', 'Field'),\n };\n\n if (value.rowIndex !== undefined && value.rowIndex >= 0) {\n const { timeField } = getTimeField(dataFrame);\n scopedVars['__value'] = {\n value: {\n raw: field.values[value.rowIndex],\n numeric: value.display.numeric,\n text: formattedValueToString(value.display),\n time: timeField ? timeField.values[value.rowIndex] : undefined,\n },\n text: t('panel.get-field-links-supplier.text.value', 'Value'),\n };\n }\n\n // Expose other values on the row\n if (value.view) {\n scopedVars['__data'] = {\n value: {\n name: dataFrame.name,\n refId: dataFrame.refId,\n fields: getFieldDisplayValuesProxy({\n frame: dataFrame,\n rowIndex: value.rowIndex!,\n }),\n },\n text: t('panel.get-field-links-supplier.text.data', 'Data'),\n };\n }\n } else {\n // calculation\n scopedVars['__value'] = {\n value: {\n raw: value.display.numeric,\n numeric: value.display.numeric,\n text: formattedValueToString(value.display),\n calc: value.name,\n },\n text: t('panel.get-field-links-supplier.text.value', 'Value'),\n };\n }\n } else {\n console.log('VALUE', value);\n }\n\n const replace: InterpolateFunction = (value: string, vars: ScopedVars | undefined, fmt?: string | Function) => {\n const finalVars: ScopedVars = {\n ...scopedVars,\n ...vars,\n };\n return replaceVariables(value, finalVars, fmt);\n };\n\n return links.map((link: DataLink) => {\n return getLinkSrv().getDataLinkUIModel(link, replace, value);\n });\n },\n };\n};\n\nexport const getPanelLinksSupplier = (\n panel: PanelModel,\n replaceVariables?: InterpolateFunction\n): LinkModelSupplier<PanelModel> | undefined => {\n const links = panel.links;\n\n if (!links || links.length === 0) {\n return undefined;\n }\n\n return {\n getLinks: () => {\n return links.map((link) => {\n return getLinkSrv().getDataLinkUIModel(link, replaceVariables || panel.replaceVariables, panel);\n });\n },\n };\n};\n\nexport const getScenePanelLinksSupplier = (\n panel: VizPanel,\n replaceVariables: InterpolateFunction\n): LinkModelSupplier<VizPanel> | undefined => {\n const links = dashboardSceneGraph.getPanelLinks(panel)?.state.rawLinks;\n\n if (!links || links.length === 0) {\n return undefined;\n }\n\n return {\n getLinks: () => {\n return links.map((link) => {\n return getLinkSrv().getDataLinkUIModel(link, replaceVariables, panel);\n });\n },\n };\n};\n","import { DataTransformerInfo, MatcherConfig } from '../../types/transformations';\nimport { FieldMatcherID } from '../matchers/ids';\nimport { RegexpOrNamesMatcherOptions } from '../matchers/nameMatcher';\n\nimport { filterFieldsTransformer } from './filter';\nimport { DataTransformerID } from './ids';\n\nexport interface FilterFieldsByNameTransformerOptions {\n include?: RegexpOrNamesMatcherOptions;\n exclude?: RegexpOrNamesMatcherOptions;\n byVariable?: boolean;\n}\n\nexport const filterFieldsByNameTransformer: DataTransformerInfo<FilterFieldsByNameTransformerOptions> = {\n id: DataTransformerID.filterFieldsByName,\n name: 'Filter fields by name',\n description: 'select a subset of fields',\n defaultOptions: {},\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options, ctx) => (source) =>\n source.pipe(\n filterFieldsTransformer.operator(\n {\n include: getMatcherConfig(options.include, options.byVariable),\n exclude: getMatcherConfig(options.exclude, options.byVariable),\n },\n ctx\n )\n ),\n};\n\n// Exported to share with other implementations, but not exported to `@grafana/data`\nexport const getMatcherConfig = (\n options?: RegexpOrNamesMatcherOptions,\n byVariable?: boolean\n): MatcherConfig | undefined => {\n if (!options) {\n return undefined;\n }\n\n const { names, pattern, variable } = options;\n\n if (byVariable && variable) {\n const stringOfNames = variable;\n\n if (/^\\{.*\\}$/.test(stringOfNames)) {\n const namesFromString = stringOfNames.slice(1).slice(0, -1).split(',');\n return { id: FieldMatcherID.byNames, options: { names: namesFromString } };\n }\n return { id: FieldMatcherID.byNames, options: { names: stringOfNames.split(',') } };\n }\n\n if ((!Array.isArray(names) || names.length === 0) && !pattern) {\n return undefined;\n }\n\n if (!pattern) {\n return { id: FieldMatcherID.byNames, options: { names } };\n }\n\n if (!Array.isArray(names) || names.length === 0) {\n return { id: FieldMatcherID.byRegexp, options: pattern };\n }\n\n return { id: FieldMatcherID.byRegexpOrNames, options };\n};\n","import { map } from 'rxjs/operators';\n\nimport { TimeZone } from '@grafana/schema';\n\nimport { dateTimeParse, DateTimeOptionsWhenParsing } from '../../datetime/parser';\nimport { DataFrame, EnumFieldConfig, Field, FieldType } from '../../types/dataFrame';\nimport { SynchronousDataTransformerInfo } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\n\nexport interface ConvertFieldTypeTransformerOptions {\n conversions: ConvertFieldTypeOptions[];\n}\n\nexport interface ConvertFieldTypeOptions {\n /**\n * The field to convert field type\n */\n targetField?: string;\n /**\n * The field type to convert to\n */\n destinationType?: FieldType;\n /**\n * Date format to parse a string datetime\n */\n dateFormat?: string;\n /**\n * When converting an array to a string, the values can be joined with a custom separator\n */\n joinWith?: string;\n /**\n * When converting a date to a string an option timezone.\n */\n timezone?: TimeZone;\n /**\n * When converting to an enumeration, this is the target config\n */\n enumConfig?: EnumFieldConfig;\n}\n\nexport const convertFieldTypeTransformer: SynchronousDataTransformerInfo<ConvertFieldTypeTransformerOptions> = {\n id: DataTransformerID.convertFieldType,\n name: 'Convert field type',\n description: 'Convert a field to a specified field type.',\n defaultOptions: {\n fields: {},\n conversions: [{ targetField: undefined, destinationType: undefined, dateFormat: undefined, timezone: undefined }],\n },\n\n operator: (options, ctx) => (source) =>\n source.pipe(map((data) => convertFieldTypeTransformer.transformer(options, ctx)(data))),\n\n transformer: (options: ConvertFieldTypeTransformerOptions) => (data: DataFrame[]) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n return convertFieldTypes(options, data) ?? [];\n },\n};\n\n/**\n * Convert field types for dataframe(s)\n * @param options - field type conversion options\n * @param frames - dataframe(s) with field types to convert\n * @returns dataframe(s) with converted field types\n */\nexport function convertFieldTypes(options: ConvertFieldTypeTransformerOptions, frames: DataFrame[]): DataFrame[] {\n if (!options.conversions.length) {\n return frames;\n }\n\n const framesCopy = frames.map((frame) => ({ ...frame }));\n\n for (const conversion of options.conversions) {\n if (!conversion.targetField) {\n continue;\n }\n const matches = fieldMatchers.get(FieldMatcherID.byName).get(conversion.targetField);\n for (const frame of framesCopy) {\n frame.fields = frame.fields.map((field) => {\n if (matches(field, frame, framesCopy)) {\n return convertFieldType(field, conversion);\n }\n return field;\n });\n }\n }\n\n return framesCopy;\n}\n\n/**\n * Convert a single field type to specified field type.\n * @param field - field to convert\n * @param opts - field conversion options\n * @returns converted field\n *\n * @internal\n */\nexport function convertFieldType(field: Field, opts: ConvertFieldTypeOptions): Field {\n switch (opts.destinationType) {\n case FieldType.time:\n return ensureTimeField(field, opts.dateFormat);\n case FieldType.number:\n return fieldToNumberField(field);\n case FieldType.string:\n return fieldToStringField(field, opts.dateFormat, { timeZone: opts.timezone }, opts.joinWith);\n case FieldType.boolean:\n return fieldToBooleanField(field);\n case FieldType.enum:\n return fieldToEnumField(field, opts.enumConfig);\n case FieldType.other:\n return fieldToComplexField(field);\n default:\n return field;\n }\n}\n\n// matches common ISO 8601 (see tests)\nconst iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3,})?(?:Z|[-+]\\d{2}:?\\d{2})$/;\n\n/**\n * @internal\n */\nexport function fieldToTimeField(field: Field, dateFormat?: string): Field {\n let opts = dateFormat ? { format: dateFormat } : undefined;\n\n const timeValues = field.values.slice();\n\n let firstDefined = timeValues.find((v) => v != null);\n const convertToMS = typeof firstDefined === 'number' && dateFormat === 'X';\n const isISO8601 = typeof firstDefined === 'string' && iso8601Regex.test(firstDefined);\n\n for (let t = 0; t < timeValues.length; t++) {\n if (timeValues[t]) {\n let parsed = isISO8601 ? Date.parse(timeValues[t]) : dateTimeParse(timeValues[t], opts).valueOf();\n if (Number.isFinite(parsed)) {\n timeValues[t] = convertToMS ? parsed * 1000 : parsed;\n } else {\n timeValues[t] = null;\n }\n } else {\n timeValues[t] = null;\n }\n }\n\n return {\n ...field,\n type: FieldType.time,\n values: timeValues,\n };\n}\n\nfunction fieldToNumberField(field: Field): Field {\n const numValues = field.values.slice();\n\n const valuesAsStrings = numValues.some((v) => typeof v === 'string');\n\n for (let n = 0; n < numValues.length; n++) {\n let toBeConverted = numValues[n];\n\n if (valuesAsStrings && toBeConverted != null && typeof toBeConverted === 'string') {\n // some numbers returned from datasources have commas\n // strip the commas, coerce the string to a number\n toBeConverted = toBeConverted.replace(/,/g, '');\n }\n\n const number = +toBeConverted;\n\n numValues[n] = Number.isFinite(number) ? number : null;\n }\n\n return {\n ...field,\n type: FieldType.number,\n values: numValues,\n };\n}\n\nfunction fieldToBooleanField(field: Field): Field {\n const booleanValues = field.values.slice();\n\n for (let b = 0; b < booleanValues.length; b++) {\n booleanValues[b] = Boolean(!!booleanValues[b]);\n }\n\n return {\n ...field,\n type: FieldType.boolean,\n values: booleanValues,\n };\n}\n\n/**\n * @internal\n */\nexport function fieldToStringField(\n field: Field,\n dateFormat?: string,\n parseOptions?: DateTimeOptionsWhenParsing,\n joinWith?: string\n): Field {\n let values = field.values;\n\n switch (field.type) {\n case FieldType.time:\n values = values.map((v) => dateTimeParse(v, parseOptions).format(dateFormat));\n break;\n\n // Handle both \"string\" and \"other\" types to ensure compatibility across Grafana versions (10 & 11)\n // In some cases fields are classified as 'other' in Grafana 10 but as 'string' in Grafana 11\n case FieldType.string:\n case FieldType.other:\n values = values.map((v) => {\n if (joinWith?.length && Array.isArray(v)) {\n return v.join(joinWith);\n }\n return JSON.stringify(v);\n });\n break;\n\n default:\n values = values.map((v) => `${v}`);\n }\n\n return {\n ...field,\n type: FieldType.string,\n values: values,\n };\n}\n\nfunction fieldToComplexField(field: Field): Field {\n const complexValues = field.values.slice();\n\n for (let s = 0; s < complexValues.length; s++) {\n try {\n complexValues[s] = JSON.parse(complexValues[s]);\n } catch {\n complexValues[s] = null;\n }\n }\n\n return {\n ...field,\n type: FieldType.other,\n values: complexValues,\n };\n}\n\n/**\n * Checks the first value. Assumes any number should be time fieldtype. Otherwise attempts to make the fieldtype time.\n * @param field - field to ensure is a time fieldtype\n * @param dateFormat - date format used to parse a string datetime\n * @returns field as time\n *\n * @public\n */\nexport function ensureTimeField(field: Field, dateFormat?: string): Field {\n const firstValueTypeIsNumber = typeof field.values[0] === 'number';\n // if the format is unix seconds, we don't want to skip formatting\n const isUnixSecondsFormat = dateFormat === 'X';\n\n if (field.type === FieldType.time && firstValueTypeIsNumber) {\n return field; //already time\n }\n if (firstValueTypeIsNumber && !isUnixSecondsFormat) {\n return {\n ...field,\n type: FieldType.time, //assumes it should be time\n };\n }\n return fieldToTimeField(field, dateFormat);\n}\n\nfunction fieldToEnumField(field: Field, config?: EnumFieldConfig): Field {\n const enumConfig = { ...config };\n const enumValues = field.values.slice();\n\n // Create lookup map based on existing enum config text values, if none exist return field as is\n const lookup = new Map<unknown, number>();\n if (enumConfig.text && enumConfig.text.length > 0) {\n for (let i = 0; i < enumConfig.text.length; i++) {\n lookup.set(enumConfig.text[i], i);\n }\n } else {\n return field;\n }\n\n // Convert field values to enum indexes\n for (let i = 0; i < enumValues.length; i++) {\n const value = enumValues[i];\n enumValues[i] = lookup.get(value);\n }\n\n return {\n ...field,\n config: {\n ...field.config,\n type: {\n enum: enumConfig,\n },\n },\n type: FieldType.enum,\n values: enumValues,\n };\n}\n","import { Labels } from '../types/data';\n\n/** replace labels in a string. Used for loki+prometheus legend formats */\nexport function renderLegendFormat(aliasPattern: string, aliasData: Labels): string {\n const aliasRegex = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\n return aliasPattern.replace(aliasRegex, (_, g1) => (aliasData[g1] ? aliasData[g1] : g1));\n}\n","import {\n FieldConfig,\n GAUGE_DEFAULT_MAXIMUM,\n GAUGE_DEFAULT_MINIMUM,\n getActiveThreshold,\n GrafanaTheme,\n GrafanaTheme2,\n Threshold,\n ThresholdsConfig,\n ThresholdsMode,\n} from '@grafana/data';\nimport { VizOrientation } from '@grafana/schema';\n\ninterface GaugeAutoProps {\n titleFontSize: number;\n gaugeHeight: number;\n showLabel: boolean;\n}\n\nexport const DEFAULT_THRESHOLDS: ThresholdsConfig = {\n mode: ThresholdsMode.Absolute,\n steps: [\n { value: -Infinity, color: 'green' },\n { value: 80, color: 'red' },\n ],\n};\n\nexport function calculateGaugeAutoProps(\n width: number,\n height: number,\n title: string | undefined,\n orientation?: VizOrientation\n): GaugeAutoProps {\n const showLabel = title !== null && title !== undefined;\n const titleFontSizeDimension = orientation === VizOrientation.Vertical ? height : width;\n const titleFontSize = Math.min((titleFontSizeDimension * 0.15) / 1.5, 20); // 20% of height * line-height, max 40px\n const titleHeight = titleFontSize * 1.5;\n const availableHeight = showLabel ? height - titleHeight : height;\n const gaugeHeight = Math.min(availableHeight, width);\n\n return {\n showLabel,\n gaugeHeight,\n titleFontSize,\n };\n}\n\nexport function getFormattedThresholds(\n decimals: number,\n field: FieldConfig,\n theme: GrafanaTheme | GrafanaTheme2\n): Threshold[] {\n const thresholds = field.thresholds ?? DEFAULT_THRESHOLDS;\n const isPercent = thresholds.mode === ThresholdsMode.Percentage;\n const steps = thresholds.steps;\n\n let min = field.min ?? GAUGE_DEFAULT_MINIMUM;\n let max = field.max ?? GAUGE_DEFAULT_MAXIMUM;\n\n if (isPercent) {\n min = 0;\n max = 100;\n }\n\n const first = getActiveThreshold(min, steps);\n const last = getActiveThreshold(max, steps);\n const formatted: Threshold[] = [\n { value: +min.toFixed(decimals), color: theme.visualization.getColorByName(first.color) },\n ];\n let skip = true;\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (skip) {\n if (first === step) {\n skip = false;\n }\n continue;\n }\n const prev = steps[i - 1];\n formatted.push({ value: step.value, color: theme.visualization.getColorByName(prev.color) });\n if (step === last) {\n break;\n }\n }\n formatted.push({ value: +max.toFixed(decimals), color: theme.visualization.getColorByName(last.color) });\n return formatted;\n}\n","import { components, IndicatorsContainerProps } from 'react-select';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { Icon } from '../../../Icon/Icon';\nimport { Select } from '../../../Select/Select';\n\n/** @deprecated Please use the {@link Select} component*/\nexport const IndicatorsContainer = <T,>(props: IndicatorsContainerProps<SelectableValue<T>>) => {\n const isOpen = props.selectProps.menuIsOpen;\n return (\n <components.IndicatorsContainer {...props}>\n <Icon name={isOpen ? 'angle-up' : 'angle-down'} style={{ marginTop: '7px' }} />\n </components.IndicatorsContainer>\n );\n};\n\nexport default IndicatorsContainer;\n","import { components, NoticeProps, GroupBase } from 'react-select';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { Select } from '../../../Select/Select';\n\nexport type Props<T> = NoticeProps<SelectableValue<T>, boolean, GroupBase<SelectableValue<T>>>;\n\n/** @deprecated Please use the {@link Select} component*/\nexport const NoOptionsMessage = <T extends unknown>(props: Props<T>) => {\n const { children } = props;\n return (\n <components.NoOptionsMessage {...props}>\n <div className=\"gf-form-select-box__desc-option\">\n <div className=\"gf-form-select-box__desc-option__body\">{children}</div>\n </div>\n </components.NoOptionsMessage>\n );\n};\n\nexport default NoOptionsMessage;\n","import { components, OptionProps } from 'react-select';\n\nimport { Icon } from '../../../Icon/Icon';\n\n// https://github.com/JedWatson/react-select/issues/3038\nexport interface ExtendedOptionProps extends OptionProps<any, any> {\n data: {\n description?: string;\n imgUrl?: string;\n };\n}\n\nexport const SelectOption = (props: ExtendedOptionProps) => {\n const { children, isSelected, data } = props;\n\n return (\n <components.Option {...props}>\n <div className=\"gf-form-select-box__desc-option\">\n {data.imgUrl && <img className=\"gf-form-select-box__desc-option__img\" src={data.imgUrl} alt=\"\" />}\n <div className=\"gf-form-select-box__desc-option__body\">\n <div>{children}</div>\n {data.description && <div className=\"gf-form-select-box__desc-option__desc\">{data.description}</div>}\n </div>\n {isSelected && <Icon name=\"check\" aria-hidden=\"true\" />}\n </div>\n </components.Option>\n );\n};\n\nexport default SelectOption;\n","import { css } from '@emotion/css';\nimport { PureComponent } from 'react';\nimport { GroupProps } from 'react-select';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { withTheme2 } from '../../../../themes/ThemeContext';\nimport { stylesFactory } from '../../../../themes/stylesFactory';\nimport { Themeable2 } from '../../../../types/theme';\nimport { Icon } from '../../../Icon/Icon';\n\ninterface ExtendedGroupProps extends Omit<GroupProps<any, any>, 'theme'>, Themeable2 {\n data: {\n label: string;\n expanded: boolean;\n options: any[];\n };\n}\n\ninterface State {\n expanded: boolean;\n}\n\nconst getSelectOptionGroupStyles = stylesFactory((theme: GrafanaTheme2) => {\n return {\n header: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n justifyItems: 'center',\n cursor: 'pointer',\n padding: '7px 10px',\n width: '100%',\n borderBottom: `1px solid ${theme.colors.background.secondary}`,\n\n '&:hover': {\n color: theme.colors.text.maxContrast,\n },\n }),\n label: css({\n flexGrow: 1,\n }),\n icon: css({\n paddingRight: '2px',\n }),\n };\n});\n\nclass UnthemedSelectOptionGroup extends PureComponent<ExtendedGroupProps, State> {\n state = {\n expanded: false,\n };\n\n componentDidMount() {\n if (this.props.data.expanded) {\n this.setState({ expanded: true });\n } else if (this.props.selectProps && this.props.selectProps.value) {\n const { value } = this.props.selectProps.value;\n\n if (value && this.props.options.some((option) => option.value === value)) {\n this.setState({ expanded: true });\n }\n }\n }\n\n componentDidUpdate(nextProps: ExtendedGroupProps) {\n if (nextProps.selectProps.inputValue !== '') {\n this.setState({ expanded: true });\n }\n }\n\n onToggleChildren = () => {\n this.setState((prevState) => ({\n expanded: !prevState.expanded,\n }));\n };\n\n render() {\n const { children, label, theme } = this.props;\n const { expanded } = this.state;\n const styles = getSelectOptionGroupStyles(theme);\n\n return (\n <div>\n {/*React Select doesn't support focusable option group headers, this will be skipped when using\n the keyboard */}\n <div className={styles.header} onClick={this.onToggleChildren} role=\"presentation\">\n <span className={styles.label}>{label}</span>\n <Icon className={styles.icon} name={expanded ? 'angle-up' : 'angle-down'} />\n </div>\n {expanded && children}\n </div>\n );\n }\n}\n\nexport const SelectOptionGroup = withTheme2(UnthemedSelectOptionGroup);\n","// Libraries\nimport classNames from 'classnames';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\nimport { default as ReactSelect, components, MenuListProps } from 'react-select';\nimport { default as ReactAsyncSelect } from 'react-select/async';\nimport Creatable from 'react-select/creatable';\n\n// Components\nimport { SelectableValue, ThemeContext } from '@grafana/data';\n\nimport { ScrollContainer } from '../../../ScrollContainer/ScrollContainer';\nimport { SingleValue } from '../../../Select/SingleValue';\nimport resetSelectStyles from '../../../Select/resetSelectStyles';\nimport { SelectCommonProps, SelectAsyncProps } from '../../../Select/types';\nimport { Tooltip } from '../../../Tooltip/Tooltip';\nimport { PopoverContent } from '../../../Tooltip/types';\n\nimport IndicatorsContainer from './IndicatorsContainer';\nimport NoOptionsMessage from './NoOptionsMessage';\nimport { SelectOption } from './SelectOption';\nimport { SelectOptionGroup } from './SelectOptionGroup';\n\n/**\n * Changes in new selects:\n * - noOptionsMessage & loadingMessage is of string type\n * - isDisabled is renamed to disabled\n */\ntype LegacyCommonProps<T> = Omit<SelectCommonProps<T>, 'noOptionsMessage' | 'disabled' | 'value' | 'loadingMessage'>;\n\ninterface AsyncProps<T> extends LegacyCommonProps<T>, Omit<SelectAsyncProps<T>, 'loadingMessage'> {\n loadingMessage?: () => string;\n noOptionsMessage?: () => string;\n tooltipContent?: PopoverContent;\n isDisabled?: boolean;\n value?: SelectableValue<T>;\n}\n\nexport interface LegacySelectProps<T> extends LegacyCommonProps<T> {\n tooltipContent?: PopoverContent;\n noOptionsMessage?: () => string;\n isDisabled?: boolean;\n value?: SelectableValue<T>;\n}\n\nexport const MenuList = (props: MenuListProps) => {\n return (\n <components.MenuList {...props}>\n <ScrollContainer showScrollIndicators overflowX=\"hidden\" maxHeight=\"inherit\">\n {props.children}\n </ScrollContainer>\n </components.MenuList>\n );\n};\n\n/** @deprecated Please use the `Select` component, as seen {@link https://developers.grafana.com/ui/latest/index.html?path=/story/forms-select--basic in Storybook}. */\nexport class Select<T> extends PureComponent<LegacySelectProps<T>> {\n declare context: React.ContextType<typeof ThemeContext>;\n static contextType = ThemeContext;\n\n static defaultProps: Partial<LegacySelectProps<unknown>> = {\n className: '',\n isDisabled: false,\n isSearchable: true,\n isClearable: false,\n isMulti: false,\n openMenuOnFocus: false,\n autoFocus: false,\n isLoading: false,\n backspaceRemovesValue: true,\n maxMenuHeight: 300,\n tabSelectsValue: true,\n allowCustomValue: false,\n components: {\n Option: SelectOption,\n SingleValue,\n IndicatorsContainer,\n MenuList,\n Group: SelectOptionGroup,\n },\n };\n\n render() {\n const {\n defaultValue,\n getOptionLabel,\n getOptionValue,\n onChange,\n options,\n placeholder,\n width,\n value,\n className,\n isDisabled,\n isLoading,\n isSearchable,\n isClearable,\n backspaceRemovesValue,\n isMulti,\n autoFocus,\n openMenuOnFocus,\n onBlur,\n maxMenuHeight,\n noOptionsMessage,\n isOpen,\n components,\n tooltipContent,\n tabSelectsValue,\n onCloseMenu,\n onOpenMenu,\n allowCustomValue,\n formatCreateLabel,\n 'aria-label': ariaLabel,\n } = this.props;\n\n let widthClass = '';\n if (width) {\n widthClass = 'width-' + width;\n }\n\n let SelectComponent = ReactSelect;\n const creatableOptions: any = {};\n\n if (allowCustomValue) {\n SelectComponent = Creatable;\n creatableOptions.formatCreateLabel = formatCreateLabel ?? ((input: string) => input);\n }\n\n const selectClassNames = classNames('gf-form-input', 'gf-form-input--form-dropdown', widthClass, className);\n const selectComponents = { ...Select.defaultProps.components, ...components };\n return (\n <WrapInTooltip onCloseMenu={onCloseMenu} onOpenMenu={onOpenMenu} tooltipContent={tooltipContent} isOpen={isOpen}>\n {(onOpenMenuInternal, onCloseMenuInternal) => {\n return (\n <SelectComponent\n captureMenuScroll={false}\n classNamePrefix=\"gf-form-select-box\"\n className={selectClassNames}\n components={selectComponents}\n defaultValue={defaultValue}\n value={value}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n menuShouldScrollIntoView={false}\n isSearchable={isSearchable}\n onChange={onChange}\n options={options}\n placeholder={placeholder || 'Choose'}\n styles={resetSelectStyles(this.context)}\n isDisabled={isDisabled}\n isLoading={isLoading}\n isClearable={isClearable}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={maxMenuHeight}\n noOptionsMessage={noOptionsMessage}\n isMulti={isMulti}\n backspaceRemovesValue={backspaceRemovesValue}\n menuIsOpen={isOpen}\n onMenuOpen={onOpenMenuInternal}\n onMenuClose={onCloseMenuInternal}\n tabSelectsValue={tabSelectsValue}\n aria-label={ariaLabel}\n {...creatableOptions}\n />\n );\n }}\n </WrapInTooltip>\n );\n }\n}\n\n/** @deprecated Please use the `Select` component with async functionality, as seen {@link https://developers.grafana.com/ui/latest/index.html?path=/story/forms-select--basic-select-async in Storybook}. */\nexport class AsyncSelect<T> extends PureComponent<AsyncProps<T>> {\n static contextType = ThemeContext;\n\n static defaultProps: Partial<AsyncProps<unknown>> = {\n className: '',\n components: {},\n loadingMessage: () => 'Loading...',\n isDisabled: false,\n isClearable: false,\n isMulti: false,\n isSearchable: true,\n backspaceRemovesValue: true,\n autoFocus: false,\n openMenuOnFocus: false,\n maxMenuHeight: 300,\n };\n\n render() {\n const {\n defaultValue,\n getOptionLabel,\n getOptionValue,\n onChange,\n placeholder,\n width,\n value,\n className,\n loadOptions,\n defaultOptions,\n isLoading,\n loadingMessage,\n noOptionsMessage,\n isDisabled,\n isSearchable,\n isClearable,\n backspaceRemovesValue,\n autoFocus,\n onBlur,\n openMenuOnFocus,\n maxMenuHeight,\n isMulti,\n tooltipContent,\n onCloseMenu,\n onOpenMenu,\n isOpen,\n } = this.props;\n\n let widthClass = '';\n if (width) {\n widthClass = 'width-' + width;\n }\n\n const selectClassNames = classNames('gf-form-input', 'gf-form-input--form-dropdown', widthClass, className);\n\n return (\n <WrapInTooltip onCloseMenu={onCloseMenu} onOpenMenu={onOpenMenu} tooltipContent={tooltipContent} isOpen={isOpen}>\n {(onOpenMenuInternal, onCloseMenuInternal) => {\n return (\n <ReactAsyncSelect\n captureMenuScroll={false}\n classNamePrefix=\"gf-form-select-box\"\n className={selectClassNames}\n components={{\n Option: SelectOption,\n SingleValue,\n IndicatorsContainer,\n NoOptionsMessage,\n }}\n defaultValue={defaultValue}\n value={value}\n //@ts-expect-error\n getOptionLabel={getOptionLabel}\n //@ts-expect-error\n getOptionValue={getOptionValue}\n menuShouldScrollIntoView={false}\n //@ts-expect-error\n onChange={onChange}\n loadOptions={loadOptions}\n isLoading={isLoading}\n defaultOptions={defaultOptions}\n placeholder={placeholder || 'Choose'}\n //@ts-expect-error\n styles={resetSelectStyles(this.context)}\n loadingMessage={loadingMessage}\n noOptionsMessage={noOptionsMessage}\n isDisabled={isDisabled}\n isSearchable={isSearchable}\n isClearable={isClearable}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={maxMenuHeight}\n isMulti={isMulti}\n backspaceRemovesValue={backspaceRemovesValue}\n />\n );\n }}\n </WrapInTooltip>\n );\n }\n}\n\nexport interface TooltipWrapperProps {\n children: (onOpenMenu: () => void, onCloseMenu: () => void) => React.ReactNode;\n onOpenMenu?: () => void;\n onCloseMenu?: () => void;\n isOpen?: boolean;\n tooltipContent?: PopoverContent;\n}\n\nexport interface TooltipWrapperState {\n isOpenInternal: boolean;\n}\n\nexport class WrapInTooltip extends PureComponent<TooltipWrapperProps, TooltipWrapperState> {\n state: TooltipWrapperState = {\n isOpenInternal: false,\n };\n\n onOpenMenu = () => {\n const { onOpenMenu } = this.props;\n if (onOpenMenu) {\n onOpenMenu();\n }\n this.setState({ isOpenInternal: true });\n };\n\n onCloseMenu = () => {\n const { onCloseMenu } = this.props;\n if (onCloseMenu) {\n onCloseMenu();\n }\n this.setState({ isOpenInternal: false });\n };\n\n render() {\n const { children, isOpen, tooltipContent } = this.props;\n const { isOpenInternal } = this.state;\n\n let showTooltip: boolean | undefined = undefined;\n\n if (isOpenInternal || isOpen) {\n showTooltip = false;\n }\n\n if (tooltipContent) {\n return (\n <Tooltip show={showTooltip} content={tooltipContent} placement=\"bottom\">\n <div>\n {/* div needed for tooltip */}\n {children(this.onOpenMenu, this.onCloseMenu)}\n </div>\n </Tooltip>\n );\n } else {\n return <div>{children(this.onOpenMenu, this.onCloseMenu)}</div>;\n }\n }\n}\n\nexport default Select;\n","import { css, cx } from '@emotion/css';\nimport { Placement } from '@popperjs/core';\nimport { uniqueId } from 'lodash';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { withTheme2 } from '../../../../themes/ThemeContext';\nimport { Themeable2 } from '../../../../types/theme';\nimport { Icon } from '../../../Icon/Icon';\nimport { Tooltip } from '../../../Tooltip/Tooltip';\n\nexport interface Props extends Themeable2 {\n label: string;\n checked: boolean;\n disabled?: boolean;\n className?: string;\n labelClass?: string;\n switchClass?: string;\n tooltip?: string;\n tooltipPlacement?: Placement;\n transparent?: boolean;\n onChange: (event: React.SyntheticEvent<HTMLInputElement>) => void;\n}\n\nexport interface State {\n id: string;\n}\n\n/** @deprecated Please use the `Switch` component, {@link https://developers.grafana.com/ui/latest/index.html?path=/story/forms-switch--controlled as seen in Storybook} */\nclass UnthemedSwitch extends PureComponent<Props, State> {\n state = {\n id: uniqueId(),\n };\n\n internalOnChange = (event: React.FormEvent<HTMLInputElement>) => {\n event.stopPropagation();\n this.props.onChange(event);\n };\n\n render() {\n const {\n labelClass = '',\n switchClass = '',\n label,\n checked,\n disabled,\n transparent,\n className,\n theme,\n tooltip,\n tooltipPlacement,\n } = this.props;\n const styles = getStyles(theme);\n\n const labelId = this.state.id;\n const labelClassName = `gf-form-label ${labelClass} ${transparent ? 'gf-form-label--transparent' : ''} pointer`;\n const switchClassName = cx(styles.switch, switchClass, {\n [styles.switchTransparent]: transparent,\n });\n\n return (\n <div className={styles.container}>\n <label htmlFor={labelId} className={cx('gf-form', styles.labelContainer, className)}>\n {label && (\n <div className={labelClassName}>\n {label}\n {tooltip && (\n <Tooltip placement={tooltipPlacement ? tooltipPlacement : 'auto'} content={tooltip} theme={'info'}>\n <Icon name=\"info-circle\" size=\"sm\" style={{ marginLeft: '10px' }} />\n </Tooltip>\n )}\n </div>\n )}\n <div className={switchClassName}>\n <input\n disabled={disabled}\n id={labelId}\n type=\"checkbox\"\n checked={checked}\n onChange={this.internalOnChange}\n />\n <span className={styles.slider} />\n </div>\n </label>\n </div>\n );\n }\n}\n\nexport const Switch = withTheme2(UnthemedSwitch);\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const slider = css({\n background: theme.v1.palette.gray1,\n borderRadius: theme.shape.radius.pill,\n height: '16px',\n width: '32px',\n display: 'block',\n position: 'relative',\n\n '&::before': {\n position: 'absolute',\n content: \"''\",\n height: '12px',\n width: '12px',\n left: '2px',\n top: '2px',\n background: theme.components.input.background,\n [theme.transitions.handleMotion('no-preference')]: {\n transition: '0.4s',\n },\n borderRadius: theme.shape.radius.circle,\n boxShadow: theme.shadows.z1,\n },\n });\n return {\n container: css({\n display: 'flex',\n flexShrink: 0,\n }),\n labelContainer: css({\n display: 'flex',\n cursor: 'pointer',\n marginRight: theme.spacing(0.5),\n }),\n switch: css({\n display: 'flex',\n position: 'relative',\n width: '56px',\n height: theme.spacing(4),\n background: theme.components.input.background,\n border: `1px solid ${theme.components.input.borderColor}`,\n borderRadius: theme.shape.radius.default,\n alignItems: 'center',\n justifyContent: 'center',\n input: {\n opacity: 0,\n width: 0,\n height: 0,\n },\n [`input:checked + .${slider}`]: {\n background: theme.colors.primary.main,\n },\n\n [`input:checked + .${slider}::before`]: {\n transform: 'translateX(16px)',\n },\n }),\n switchTransparent: css({\n background: 'transparent',\n border: 0,\n width: '40px',\n }),\n slider,\n };\n};\n","// Node.closest() polyfill\nif (typeof window !== 'undefined' && 'Element' in window && !Element.prototype.closest) {\n Element.prototype.closest = function (this: any, s: string) {\n const matches = (this.document || this.ownerDocument).querySelectorAll(s);\n let el = this;\n let i;\n // eslint-disable-next-line\n do {\n i = matches.length;\n // eslint-disable-next-line\n while (--i >= 0 && matches.item(i) !== el) {}\n el = el.parentElement;\n } while (i < 0 && el);\n return el;\n };\n}\n\nexport function getPreviousCousin(node: HTMLElement, selector: string) {\n let sibling = node.parentElement?.previousSibling;\n let el;\n while (sibling) {\n if (sibling instanceof HTMLElement) {\n el = sibling.querySelector(selector);\n }\n if (el) {\n return el;\n }\n sibling = sibling.previousSibling;\n }\n return undefined;\n}\n\nexport function getNextCharacter(global?: typeof globalThis) {\n const selection = (global || window).getSelection();\n if (!selection || !selection.anchorNode) {\n return null;\n }\n\n const range = selection.getRangeAt(0);\n const text = selection.anchorNode.textContent;\n const offset = range.startOffset;\n return text!.slice(offset, offset + 1);\n}\n","import { css, cx } from '@emotion/css';\nimport RCCascader, { FieldNames } from 'rc-cascader';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { CascaderOption } from '../Cascader/Cascader';\nimport { onChangeCascader, onLoadDataCascader } from '../Cascader/optionMappings';\nimport { getCascaderStyles } from '../Cascader/styles';\nimport { Icon } from '../Icon/Icon';\n\nexport interface ButtonCascaderProps {\n options: CascaderOption[];\n children: string;\n icon?: IconName;\n disabled?: boolean;\n value?: string[];\n fieldNames?: FieldNames<CascaderOption, keyof CascaderOption>;\n loadData?: (selectedOptions: CascaderOption[]) => void;\n onChange?: (value: string[], selectedOptions: CascaderOption[]) => void;\n onPopupVisibleChange?: (visible: boolean) => void;\n className?: string;\n variant?: ButtonProps['variant'];\n buttonProps?: Omit<ButtonProps, 'children'>;\n hideDownIcon?: boolean;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-buttoncascader--docs\n */\nexport const ButtonCascader = (props: ButtonCascaderProps) => {\n const { onChange, className, loadData, icon, buttonProps, hideDownIcon, variant, disabled, ...rest } = props;\n const styles = useStyles2(getStyles);\n const cascaderStyles = useStyles2(getCascaderStyles);\n\n // Weird way to do this bit it goes around a styling issue in Button where even null/undefined child triggers\n // styling change which messes up the look if there is only single icon content.\n let content: React.ReactNode = props.children;\n if (!hideDownIcon) {\n content = [props.children, <Icon key={'down-icon'} name=\"angle-down\" className={styles.icons.right} />];\n }\n\n return (\n <RCCascader\n onChange={onChangeCascader(onChange)}\n loadData={onLoadDataCascader(loadData)}\n dropdownClassName={cx(cascaderStyles.dropdown, styles.popup)}\n {...rest}\n expandIcon={null}\n >\n <Button icon={icon} disabled={disabled} variant={variant} {...(buttonProps ?? {})}>\n {content}\n </Button>\n </RCCascader>\n );\n};\n\nButtonCascader.displayName = 'ButtonCascader';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n popup: css({\n label: 'popup',\n zIndex: theme.zIndex.dropdown,\n }),\n icons: {\n right: css({\n margin: '1px 0 0 4px',\n }),\n left: css({\n margin: '-1px 4px 0 0',\n }),\n },\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { useState, forwardRef, FocusEvent } from 'react';\nimport { RgbaStringColorPicker } from 'react-colorful';\nimport { useThrottleFn } from 'react-use';\n\nimport { colorManipulator, GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { ClickOutsideWrapper } from '../ClickOutsideWrapper/ClickOutsideWrapper';\nimport { Props as InputProps } from '../Input/Input';\n\nimport ColorInput from './ColorInput';\nimport { getStyles as getPaletteStyles } from './SpectrumPalette';\n\nexport interface ColorPickerInputProps extends Omit<InputProps, 'value' | 'onChange'> {\n value?: string;\n onChange: (color: string) => void;\n /** Format for returning the color in onChange callback, defaults to 'rgb' */\n returnColorAs?: 'rgb' | 'hex';\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/pickers-colorpickerinput--docs\n */\nexport const ColorPickerInput = forwardRef<HTMLInputElement, ColorPickerInputProps>(\n ({ value = '', onChange, returnColorAs = 'rgb', ...inputProps }, ref) => {\n const [currentColor, setColor] = useState(value);\n const [isOpen, setIsOpen] = useState(false);\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const paletteStyles = useStyles2(getPaletteStyles);\n\n useThrottleFn(\n (c) => {\n if (c === value) {\n return;\n }\n // Default to an empty string if no color value is available\n if (!c) {\n onChange('');\n return;\n }\n const color = theme.visualization.getColorByName(c);\n if (returnColorAs === 'rgb') {\n onChange(colorManipulator.asRgbString(color));\n } else {\n onChange(colorManipulator.asHexString(color));\n }\n },\n 500,\n [currentColor]\n );\n\n const handleBlur = (evt: FocusEvent<HTMLInputElement>) => {\n // Unless the user clicked inside the color picker, close it on blur\n const isClickInPopover = document.querySelector('[data-testid=\"color-popover\"]')?.contains(evt.relatedTarget);\n if (!isClickInPopover) {\n setIsOpen(false);\n }\n };\n\n return (\n <ClickOutsideWrapper onClick={() => setIsOpen(false)}>\n <div className={styles.wrapper}>\n {isOpen && !inputProps.disabled && (\n <RgbaStringColorPicker\n data-testid={'color-popover'}\n color={currentColor}\n onChange={setColor}\n className={cx(paletteStyles.root, styles.picker)}\n />\n )}\n <ColorInput\n {...inputProps}\n theme={theme}\n color={currentColor}\n onChange={setColor}\n buttonAriaLabel=\"Open color picker\"\n onClick={() => setIsOpen(true)}\n onBlur={(e) => handleBlur(e)}\n ref={ref}\n isClearable\n />\n </div>\n </ClickOutsideWrapper>\n );\n }\n);\n\nColorPickerInput.displayName = 'ColorPickerInput';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n position: 'relative',\n }),\n picker: css({\n '&.react-colorful': {\n position: 'absolute',\n width: '100%',\n zIndex: 11,\n bottom: '36px',\n },\n }),\n inner: css({\n position: 'absolute',\n }),\n };\n};\n","import { css, keyframes } from '@emotion/css';\nimport { memo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport const EllipsisAnimated = memo(() => {\n const styles = useStyles2(getStyles);\n return (\n <div className={styles.ellipsis}>\n <span className={styles.firstDot}>{'.'}</span>\n <span className={styles.secondDot}>{'.'}</span>\n <span className={styles.thirdDot}>{'.'}</span>\n </div>\n );\n});\n\nEllipsisAnimated.displayName = 'EllipsisAnimated';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n ellipsis: css({\n display: 'inline',\n }),\n firstDot: css({\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n animation: `${firstDot} 2s linear infinite`,\n },\n }),\n secondDot: css({\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n animation: `${secondDot} 2s linear infinite`,\n },\n }),\n thirdDot: css({\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n animation: `${thirdDot} 2s linear infinite`,\n },\n }),\n };\n};\n\nconst firstDot = keyframes`\n 0% {\n opacity: 1;\n }\n 65% {\n opacity: 1;\n }\n 66% {\n opacity: 0.5;\n }\n 100% {\n opacity: 0;\n }\n `;\n\nconst secondDot = keyframes`\n 0% {\n opacity: 0;\n }\n 21% {\n opacity: 0.5;\n }\n 22% {\n opacity: 1;\n }\n 65% {\n opacity: 1;\n }\n 66% {\n opacity: 0.5;\n }\n 100% {\n opacity: 0;\n }\n `;\n\nconst thirdDot = keyframes`\n 0% {\n opacity: 0;\n }\n 43% {\n opacity: 0.5;\n }\n 44% {\n opacity: 1;\n }\n 65% {\n opacity: 1;\n }\n 66% {\n opacity: 0.5;\n }\n 100% {\n opacity: 0;\n }\n `;\n","import { css } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport { useCallback, useMemo, useRef } from 'react';\nimport * as React from 'react';\n\nimport { Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Field, FieldProps } from '../Forms/Field';\nimport { InlineToast } from '../InlineToast/InlineToast';\n\nimport { EllipsisAnimated } from './EllipsisAnimated';\n\nconst SHOW_SUCCESS_DURATION = 2 * 1000;\n\nexport interface Props<T = string> extends Omit<FieldProps, 'children'> {\n /** Saving request that will be triggered 600ms after changing the value */\n onFinishChange: (inputValue: T) => Promise<void>;\n /** Custom error message to display on saving */\n saveErrorMessage?: string;\n /** Input that will save its value on change */\n children: (onChange: (newValue: T) => void) => React.ReactElement;\n}\n\n/**\n * Used for form inputs that should save its content automatically.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-autosavefield--docs\n */\nexport function AutoSaveField<T = string>(props: Props<T>) {\n const {\n invalid,\n loading,\n onFinishChange,\n saveErrorMessage = 'Error saving this value',\n error,\n children,\n disabled,\n ...restProps\n } = props;\n\n const [fieldState, setFieldState] = React.useState({\n isLoading: false,\n showSuccess: false,\n showError: invalid,\n });\n\n const fieldRef = useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n if (fieldState.showSuccess) {\n const time = fieldState.showError ? 0 : SHOW_SUCCESS_DURATION;\n timeoutId = setTimeout(() => {\n setFieldState({ ...fieldState, showSuccess: false });\n }, time);\n }\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [fieldState]);\n\n const handleChange = useCallback(\n (nextValue: T) => {\n if (invalid) {\n return;\n }\n setFieldState({ ...fieldState, isLoading: true, showSuccess: false });\n onFinishChange(nextValue)\n .then(() => {\n setFieldState({\n isLoading: false,\n showSuccess: true,\n showError: false,\n });\n })\n .catch(() => {\n setFieldState({\n ...fieldState,\n isLoading: false,\n showError: true,\n });\n });\n },\n [invalid, fieldState, onFinishChange]\n );\n\n const lodashDebounce = useMemo(() => debounce(handleChange, 600, { leading: false }), [handleChange]);\n //We never want to pass false to field, because it won't be deleted with deleteUndefinedProps() being false\n const isInvalid = invalid || fieldState.showError || undefined;\n /**\n * use Field around input to pass the error message\n * use InlineToast.tsx to show the save message\n */\n const styles = useStyles2(getStyles);\n\n return (\n <>\n <Field\n {...restProps}\n loading={loading || undefined}\n invalid={isInvalid}\n disabled={disabled}\n error={error || (fieldState.showError && saveErrorMessage)}\n ref={fieldRef}\n className={styles.widthFitContent}\n >\n {React.cloneElement(\n children((newValue) => {\n lodashDebounce(newValue);\n })\n )}\n </Field>\n {fieldState.isLoading && (\n <InlineToast referenceElement={fieldRef.current} placement=\"right\">\n <Trans i18nKey=\"grafana-ui.auto-save-field.saving\">\n Saving <EllipsisAnimated />\n </Trans>\n </InlineToast>\n )}\n {fieldState.showSuccess && (\n <InlineToast suffixIcon={'check'} referenceElement={fieldRef.current} placement=\"right\">\n <Trans i18nKey=\"grafana-ui.auto-save-field.saved\">Saved!</Trans>\n </InlineToast>\n )}\n </>\n );\n}\n\nAutoSaveField.displayName = 'AutoSaveField';\n\nconst getStyles = () => {\n return {\n widthFitContent: css({\n width: 'fit-content',\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\n\ninterface Props {\n /** @deprecated */\n icon?: IconName;\n /** @deprecated */\n iconClass?: string;\n}\n\n/** @internal */\nexport const ModalTabContent = ({ children }: React.PropsWithChildren<Props>) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div>\n <div className={styles.header}>\n <div className={styles.content}>{children}</div>\n </div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n header: css({\n display: 'flex',\n margin: theme.spacing(0, 0, 3, 0),\n }),\n content: css({\n flexGrow: 1,\n }),\n});\n","import { css } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\n\nimport { DataFrame, CSVConfig, readCSV, GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { withTheme2 } from '../../themes/ThemeContext';\nimport { stylesFactory } from '../../themes/stylesFactory';\nimport { Themeable2 } from '../../types/theme';\nimport { Icon } from '../Icon/Icon';\nimport { TextArea } from '../TextArea/TextArea';\n\ninterface Props extends Themeable2 {\n config?: CSVConfig;\n text: string;\n width: string | number;\n height: string | number;\n onSeriesParsed: (data: DataFrame[], text: string) => void;\n}\n\ninterface State {\n text: string;\n data: DataFrame[];\n}\n\n/**\n * Expects the container div to have size set and will fill it 100%\n */\nexport class UnThemedTableInputCSV extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n\n const { text, config } = props;\n this.state = {\n text,\n data: readCSV(text, { config }),\n };\n }\n\n readCSV = debounce(() => {\n const { config } = this.props;\n const { text } = this.state;\n\n this.setState({ data: readCSV(text, { config }) });\n }, 150);\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n const { text } = this.state;\n\n if (text !== prevState.text || this.props.config !== prevProps.config) {\n this.readCSV();\n }\n\n // If the props text has changed, replace our local version\n if (this.props.text !== prevProps.text && this.props.text !== text) {\n this.setState({ text: this.props.text });\n }\n\n if (this.state.data !== prevState.data) {\n this.props.onSeriesParsed(this.state.data, this.state.text);\n }\n }\n\n onTextChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n this.setState({ text: event.target.value });\n };\n\n render() {\n const { width, height, theme } = this.props;\n const { data } = this.state;\n const styles = getStyles(theme);\n return (\n <div className={styles.tableInputCsv}>\n <TextArea\n style={{ width, height }}\n placeholder={t('grafana-ui.table.csv-placeholder', 'Enter CSV here...')}\n value={this.state.text}\n onChange={this.onTextChange}\n className={styles.textarea}\n />\n {data && (\n <footer className={styles.footer}>\n {data.map((frame, index) => {\n const rows = frame.length;\n const columns = frame.fields.length;\n return (\n <span key={index}>\n <Trans i18nKey=\"grafana-ui.table.csv-counts\">\n Rows:{{ rows }}, Columns:{{ columns }}\n </Trans>\n \n <Icon name=\"check-circle\" />\n </span>\n );\n })}\n </footer>\n )}\n </div>\n );\n }\n}\n\n/**\n * @deprecated\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-tableinputcsv--docs\n */\nexport const TableInputCSV = withTheme2(UnThemedTableInputCSV);\nTableInputCSV.displayName = 'TableInputCSV';\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2) => {\n return {\n tableInputCsv: css({\n position: 'relative',\n }),\n textarea: css({\n height: '100%',\n width: '100%',\n }),\n footer: css({\n position: 'absolute',\n bottom: '15px',\n right: '15px',\n border: `1px solid ${theme.colors.success.border}`,\n background: theme.colors.success.main,\n color: theme.colors.success.contrastText,\n padding: `1px ${theme.spacing(0.5)}`,\n fontSize: '80%',\n }),\n };\n});\n","import { css, cx } from '@emotion/css';\nimport { forwardRef } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\n\nimport { Counter } from './Counter';\nimport { TabProps } from './Tab';\n\nexport const VerticalTab = forwardRef<HTMLAnchorElement, TabProps>(\n ({ label, active, icon, counter, className, suffix: Suffix, onChangeTab, href, ...otherProps }, ref) => {\n const tabsStyles = useStyles2(getTabStyles);\n const content = () => (\n <>\n {icon && <Icon name={icon} />}\n {label}\n {typeof counter === 'number' && <Counter value={counter} />}\n {Suffix && <Suffix className={tabsStyles.suffix} />}\n </>\n );\n\n const linkClass = cx(tabsStyles.link, active && tabsStyles.activeStyle);\n\n return (\n <a\n href={href}\n className={linkClass}\n {...otherProps}\n onClick={onChangeTab}\n aria-label={otherProps['aria-label'] || selectors.components.Tab.title(label)}\n role=\"tab\"\n aria-selected={active}\n ref={ref}\n >\n {content()}\n </a>\n );\n }\n);\n\nVerticalTab.displayName = 'Tab';\n\nconst getTabStyles = (theme: GrafanaTheme2) => {\n return {\n link: css({\n padding: '6px 12px',\n display: 'block',\n height: '100%',\n cursor: 'pointer',\n position: 'relative',\n\n color: theme.colors.text.primary,\n\n svg: {\n marginRight: theme.spacing(1),\n },\n\n '&:hover, &:focus': {\n textDecoration: 'underline',\n },\n }),\n activeStyle: css({\n label: 'activeTabStyle',\n color: theme.colors.text.maxContrast,\n overflow: 'hidden',\n\n '&::before': {\n display: 'block',\n content: '\" \"',\n position: 'absolute',\n left: 0,\n width: '4px',\n bottom: '2px',\n top: '2px',\n borderRadius: theme.shape.radius.default,\n backgroundImage: 'linear-gradient(0deg, #f05a28 30%, #fbca0a 99%)',\n },\n }),\n suffix: css({\n marginLeft: theme.spacing(1),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { Dimensions, TimeZone } from '@grafana/data';\nimport { TooltipDisplayMode } from '@grafana/schema';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Portal } from '../Portal/Portal';\n\nimport { VizTooltipContainer } from './VizTooltipContainer';\n\nexport interface FlotPosition {\n pageX: number;\n pageY: number;\n x: number;\n x1: number;\n y: number;\n y1: number;\n}\n\n// Describes active dimensions user interacts with\n// It's a key-value pair where:\n// - key is the name of the dimension\n// - value is a tuple addressing which column and row from given dimension is active.\n// If row is undefined, it means that we are not hovering over a datapoint\nexport type ActiveDimensions<T extends Dimensions = any> = { [key in keyof T]: [number, number | undefined] | null };\n\nexport interface VizTooltipContentProps<T extends Dimensions = any> {\n // Each dimension is described by array of fields representing it\n // I.e. for graph there are two dimensions: x and y axis:\n // { xAxis: [<array of time fields>], yAxis: [<array of value fields>]}\n // TODO: type this better, no good idea how yet\n dimensions: T; // Dimension[]\n activeDimensions?: ActiveDimensions<T>;\n timeZone?: TimeZone;\n pos: FlotPosition;\n mode: TooltipDisplayMode;\n}\n\nexport interface VizTooltipProps {\n /** Element used as tooltips content */\n content?: React.ReactElement;\n\n /** Optional component to be used as a tooltip content */\n tooltipComponent?: React.ComponentType<React.PropsWithChildren<VizTooltipContentProps>>;\n\n /** x/y position relative to the window */\n position?: { x: number; y: number };\n\n /** x/y offset relative to tooltip origin element, i.e. graph's datapoint */\n offset?: { x: number; y: number };\n\n // Mode in which tooltip works\n // - single - display single series info\n // - multi - display all series info\n mode?: TooltipDisplayMode;\n}\n\n/**\n * @public\n */\nexport const VizTooltip = ({ content, position, offset }: VizTooltipProps) => {\n const styles = useStyles2(getStyles);\n if (position) {\n return (\n <Portal className={styles.portal}>\n <VizTooltipContainer position={position} offset={offset || { x: 0, y: 0 }}>\n {content}\n </VizTooltipContainer>\n </Portal>\n );\n }\n return null;\n};\n\nVizTooltip.displayName = 'VizTooltip';\n\nconst getStyles = () => {\n return {\n portal: css({\n position: 'absolute',\n top: 0,\n left: 0,\n pointerEvents: 'none',\n width: '100%',\n height: '100%',\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { Field, GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\n\nimport { DataLinkButton } from './DataLinkButton';\n\ntype Props = {\n links: Array<LinkModel<Field>>;\n};\n\n/**\n * @internal\n */\nexport function FieldLinkList({ links }: Props) {\n const styles = useStyles2(getStyles);\n\n if (links.length === 1) {\n return <DataLinkButton link={links[0]} />;\n }\n\n const externalLinks = links.filter((link) => link.target === '_blank');\n const internalLinks = links.filter((link) => link.target === '_self');\n\n return (\n <>\n {internalLinks.map((link, i) => {\n return <DataLinkButton key={i} link={link} />;\n })}\n <div className={styles.wrapper}>\n <p className={styles.externalLinksHeading}>\n <Trans i18nKey=\"grafana-ui.field-link-list.external-links-heading\">External links</Trans>\n </p>\n {externalLinks.map((link, i) => (\n <a key={i} href={link.href} target={link.target} className={styles.externalLink}>\n <Icon name=\"external-link-alt\" />\n {link.title}\n </a>\n ))}\n </div>\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n flexBasis: '150px',\n width: '100px',\n marginTop: theme.spacing(1),\n }),\n externalLinksHeading: css({\n color: theme.colors.text.secondary,\n fontWeight: theme.typography.fontWeightRegular,\n fontSize: theme.typography.size.sm,\n margin: 0,\n }),\n externalLink: css({\n color: theme.colors.text.link,\n fontWeight: theme.typography.fontWeightRegular,\n display: 'block',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n\n '&:hover': {\n textDecoration: 'underline',\n },\n\n div: {\n marginRight: theme.spacing(1),\n },\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport interface Props {\n className?: string;\n}\n\nexport const FullWidthButtonContainer = ({ className, children }: React.PropsWithChildren<Props>) => {\n const styles = useStyles2(getStyles);\n\n return <div className={cx(styles, className)}>{children}</div>;\n};\n\nconst getStyles = () =>\n css({\n display: 'flex',\n\n button: {\n flexGrow: 1,\n justifyContent: 'center',\n },\n\n '> *': {\n flexGrow: 1,\n },\n\n label: {\n flexGrow: 1,\n textAlign: 'center',\n },\n });\n","import { css } from '@emotion/css';\nimport { memo, forwardRef } from 'react';\n\nimport { FeatureState, GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { FeatureBadge } from '../FeatureBadge/FeatureBadge';\n\nimport { InfoBox, InfoBoxProps } from './InfoBox';\n\nexport interface FeatureInfoBoxProps extends Omit<InfoBoxProps, 'title' | 'urlTitle'> {\n title: string;\n featureState?: FeatureState;\n}\n\n/** @deprecated use Alert with severity info */\nexport const FeatureInfoBox = memo(\n forwardRef<HTMLDivElement, FeatureInfoBoxProps>(({ title, featureState, ...otherProps }, ref) => {\n const styles = useStyles2(getFeatureInfoBoxStyles);\n\n const titleEl = featureState ? (\n <>\n <div className={styles.badge}>\n <FeatureBadge featureState={featureState} />\n </div>\n <h3>{title}</h3>\n </>\n ) : (\n <h3>{title}</h3>\n );\n return <InfoBox branded title={titleEl} urlTitle=\"Read documentation\" ref={ref} {...otherProps} />;\n })\n);\n\nFeatureInfoBox.displayName = 'FeatureInfoBox';\n\nconst getFeatureInfoBoxStyles = (theme: GrafanaTheme2) => {\n return {\n badge: css({\n marginBottom: theme.spacing(1),\n }),\n };\n};\n","import { DataSourceJsonData, DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { InlineSwitch } from '../../components/Switch/Switch';\nimport { InlineField } from '../Forms/InlineField';\n\nexport interface Props<T extends DataSourceJsonData>\n extends Pick<DataSourcePluginOptionsEditorProps<T>, 'options' | 'onOptionsChange'> {}\n\nexport interface AlertingConfig extends DataSourceJsonData {\n manageAlerts?: boolean;\n}\n\nexport function AlertingSettings<T extends AlertingConfig>({ options, onOptionsChange }: Props<T>): JSX.Element {\n return (\n <>\n <h3 className=\"page-heading\">\n <Trans i18nKey=\"grafana-ui.data-source-settings.alerting-settings-heading\">Alerting</Trans>\n </h3>\n <div className=\"gf-form-group\">\n <div className=\"gf-form-inline\">\n <div className=\"gf-form\">\n <InlineField\n labelWidth={29}\n label={t('grafana-ui.data-source-settings.alerting-settings-label', 'Manage alert rules in Alerting UI')}\n disabled={options.readOnly}\n tooltip={t(\n 'grafana-ui.data-source-settings.alerting-settings-tooltip',\n 'Manage alert rules for this data source. To manage other alerting resources, add an Alertmanager data source.'\n )}\n >\n <InlineSwitch\n value={options.jsonData.manageAlerts !== false}\n onChange={(event) =>\n onOptionsChange({\n ...options,\n jsonData: { ...options.jsonData, manageAlerts: event!.currentTarget.checked },\n })\n }\n />\n </InlineField>\n </div>\n </div>\n </div>\n </>\n );\n}\n","import { cx, css } from '@emotion/css';\nimport { HTMLProps, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { useClickAway } from 'react-use';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { measureText } from '../../utils/measureText';\nimport { InlineLabel } from '../Forms/InlineLabel';\n\nimport { getSegmentStyles } from './styles';\nimport { SegmentProps } from './types';\nimport { useExpandableLabel } from './useExpandableLabel';\n\nexport interface SegmentInputProps\n extends Omit<SegmentProps, 'allowCustomValue' | 'allowEmptyValue'>,\n Omit<HTMLProps<HTMLInputElement>, 'value' | 'onChange'> {\n value: string | number;\n onChange: (text: string | number) => void;\n}\n\nconst FONT_SIZE = 14;\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-segmentinput--docs\n */\nexport function SegmentInput({\n value: initialValue,\n onChange,\n Component,\n className,\n placeholder,\n inputPlaceholder,\n disabled,\n autofocus = false,\n onExpandedChange,\n ...rest\n}: React.PropsWithChildren<SegmentInputProps>) {\n const ref = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState<number | string>(initialValue);\n const [inputWidth, setInputWidth] = useState<number>(measureText((initialValue || '').toString(), FONT_SIZE).width);\n const [Label, , expanded, setExpanded] = useExpandableLabel(autofocus, onExpandedChange);\n const styles = useStyles2(getSegmentStyles);\n\n useClickAway(ref, () => {\n setExpanded(false);\n onChange(value);\n });\n\n if (!expanded) {\n return (\n <Label\n disabled={disabled}\n Component={\n Component || (\n <InlineLabel\n className={cx(\n styles.segment,\n {\n [styles.queryPlaceholder]: placeholder !== undefined && !value,\n [styles.disabled]: disabled,\n },\n className\n )}\n >\n {initialValue || placeholder}\n </InlineLabel>\n )\n }\n />\n );\n }\n\n const inputWidthStyle = css({\n width: `${Math.max(inputWidth + 20, 32)}px`,\n });\n\n return (\n <input\n {...rest}\n ref={ref}\n // this needs to autofocus, but it's ok as it's only rendered by choice\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n className={cx(`gf-form gf-form-input`, inputWidthStyle)}\n value={value}\n placeholder={inputPlaceholder}\n onChange={(item) => {\n const { width } = measureText(item.target.value, FONT_SIZE);\n setInputWidth(width);\n setValue(item.target.value);\n }}\n onBlur={() => {\n setExpanded(false);\n onChange(value);\n }}\n onKeyDown={(e) => {\n if ([13, 27].includes(e.keyCode)) {\n setExpanded(false);\n onChange(value);\n }\n }}\n />\n );\n}\n","import { cx } from '@emotion/css';\nimport { Global } from '@emotion/react';\nimport SliderComponent from 'rc-slider';\nimport { useState, useCallback, ChangeEvent, FocusEvent } from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Input } from '../Input/Input';\n\nimport { getStyles } from './styles';\nimport { SliderProps } from './types';\n\n/**\n * @public\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-slider--docs\n */\nexport const Slider = ({\n min,\n max,\n onChange,\n onAfterChange,\n orientation = 'horizontal',\n reverse,\n step,\n value,\n ariaLabelForHandle,\n marks,\n included,\n inputId,\n showInput = true,\n}: SliderProps) => {\n const isHorizontal = orientation === 'horizontal';\n const styles = useStyles2(getStyles, isHorizontal, Boolean(marks));\n const SliderWithTooltip = SliderComponent;\n const [sliderValue, setSliderValue] = useState<number>(value ?? min);\n const dragHandleAriaLabel =\n ariaLabelForHandle ?? t('grafana-ui.slider.drag-handle-aria-label', 'Use arrow keys to change the value');\n\n const onSliderChange = useCallback(\n (v: number | number[]) => {\n const value = typeof v === 'number' ? v : v[0];\n\n setSliderValue(value);\n onChange?.(value);\n },\n [setSliderValue, onChange]\n );\n\n const onSliderInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n let v = +e.target.value;\n\n if (Number.isNaN(v)) {\n v = 0;\n }\n\n setSliderValue(v);\n\n if (onChange) {\n onChange(v);\n }\n\n if (onAfterChange) {\n onAfterChange(v);\n }\n },\n [onChange, onAfterChange]\n );\n\n // Check for min/max on input blur so user is able to enter\n // custom values that might seem above/below min/max on first keystroke\n const onSliderInputBlur = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n const v = +e.target.value;\n\n if (v > max) {\n setSliderValue(max);\n } else if (v < min) {\n setSliderValue(min);\n }\n },\n [max, min]\n );\n\n const handleChangeComplete = useCallback(\n (v: number | number[]) => {\n const value = typeof v === 'number' ? v : v[0];\n onAfterChange?.(value);\n },\n [onAfterChange]\n );\n\n const sliderInputClassNames = !isHorizontal ? [styles.sliderInputVertical] : [];\n const sliderInputFieldClassNames = !isHorizontal ? [styles.sliderInputFieldVertical] : [];\n\n return (\n <div className={cx(styles.container, styles.slider)}>\n {/** Slider tooltip's parent component is body and therefore we need Global component to do css overrides for it. */}\n <Global styles={styles.tooltip} />\n <div className={cx(styles.sliderInput, ...sliderInputClassNames)}>\n <SliderWithTooltip\n min={min}\n max={max}\n step={step}\n defaultValue={value}\n value={sliderValue}\n onChange={onSliderChange}\n onChangeComplete={handleChangeComplete}\n vertical={!isHorizontal}\n reverse={reverse}\n ariaLabelForHandle={dragHandleAriaLabel}\n marks={marks}\n included={included}\n />\n\n {showInput && (\n <Input\n type=\"text\"\n width={7.5}\n className={cx(styles.sliderInputField, ...sliderInputFieldClassNames)}\n value={sliderValue}\n onChange={onSliderInputChange}\n onBlur={onSliderInputBlur}\n min={min}\n max={max}\n id={inputId}\n />\n )}\n </div>\n </div>\n );\n};\n\nSlider.displayName = 'Slider';\n","import { FC } from 'react';\nimport { useFieldArray, UseFieldArrayProps } from 'react-hook-form';\n\nimport { FieldArrayApi } from '../../types/forms';\n\nexport interface FieldArrayProps extends UseFieldArrayProps {\n children: (api: FieldArrayApi) => JSX.Element;\n}\n\n/**\n * @deprecated use the `useFieldArray` hook from react-hook-form instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-fieldarray--docs\n */\nexport const FieldArray: FC<FieldArrayProps> = ({ name, control, children, ...rest }) => {\n const { fields, append, prepend, remove, swap, move, insert } = useFieldArray({\n control,\n name,\n ...rest,\n });\n return children({ fields, append, prepend, remove, swap, move, insert });\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { UserIcon } from './UserIcon';\nimport { UserView } from './types';\n\nexport interface UsersIndicatorProps {\n /** An object that contains the user's details and 'lastActiveAt' status */\n users: UserView[];\n /** A limit of how many user icons to show before collapsing them and showing a number of users instead */\n limit?: number;\n /** onClick handler for the user number indicator */\n onClick?: () => void;\n}\n\n/**\n * A component that displays a set of user icons indicating which users are currently active. If there are too many users to display all the icons, it will collapse the icons into a single icon with a number indicating the number of additional users.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/iconography-usersindicator--docs\n */\nexport const UsersIndicator = ({ users, onClick, limit = 4 }: UsersIndicatorProps) => {\n const styles = useStyles2(getStyles);\n if (!users.length) {\n return null;\n }\n // Make sure limit is never negative\n limit = limit > 0 ? limit : 4;\n const limitReached = users.length > limit;\n const extraUsers = users.length - limit;\n // Prevent breaking the layout when there's more than 99 users\n const tooManyUsers = extraUsers > 99;\n\n return (\n <div\n className={styles.container}\n aria-label={t('grafana-ui.users-indicator.container-label', 'Users indicator container')}\n >\n {limitReached && (\n <UserIcon onClick={onClick} userView={{ user: { name: 'Extra users' }, lastActiveAt: '' }} showTooltip={false}>\n {tooManyUsers\n ? // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n '...'\n : `+${extraUsers}`}\n </UserIcon>\n )}\n {users\n .slice(0, limitReached ? limit : limit + 1)\n .reverse()\n .map((userView) => (\n <UserIcon key={userView.user.name} userView={userView} />\n ))}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n display: 'flex',\n justifyContent: 'center',\n flexDirection: 'row-reverse',\n marginLeft: theme.spacing(1),\n\n '& > button': {\n marginLeft: theme.spacing(-1), // Overlay the elements a bit on top of each other\n },\n }),\n dots: css({\n marginBottom: '3px',\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport {\n FlotDataPoint,\n getValueFromDimension,\n Dimensions,\n dateTimeFormat,\n TimeZone,\n FormattedValue,\n GrafanaTheme2,\n} from '@grafana/data';\n\nimport { ContextMenu, ContextMenuProps } from '../../components/ContextMenu/ContextMenu';\nimport { FormattedValueDisplay } from '../../components/FormattedValueDisplay/FormattedValueDisplay';\nimport { HorizontalGroup } from '../../components/Layout/Layout';\nimport { MenuGroup, MenuGroupProps } from '../../components/Menu/MenuGroup';\nimport { MenuItem } from '../../components/Menu/MenuItem';\nimport { SeriesIcon } from '../../components/VizLegend/SeriesIcon';\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { GraphDimensions } from './GraphTooltip/types';\n\n/** @deprecated */\nexport type ContextDimensions<T extends Dimensions = any> = { [key in keyof T]: [number, number | undefined] | null };\n\n/** @deprecated */\nexport type GraphContextMenuProps = ContextMenuProps & {\n getContextMenuSource: () => FlotDataPoint | null;\n timeZone?: TimeZone;\n itemsGroup?: MenuGroupProps[];\n dimensions?: GraphDimensions;\n contextDimensions?: ContextDimensions;\n};\n\n/** @internal */\nexport const GraphContextMenu = ({\n getContextMenuSource,\n timeZone,\n itemsGroup,\n dimensions,\n contextDimensions,\n ...otherProps\n}: GraphContextMenuProps) => {\n const source = getContextMenuSource();\n\n // Do not render items that do not have label specified\n const itemsToRender = itemsGroup\n ? itemsGroup.map((group) => ({\n ...group,\n items: group.items?.filter((item) => item.label),\n }))\n : [];\n\n const renderHeader = () => {\n if (!source) {\n return null;\n }\n\n // If dimensions supplied, we can calculate and display value\n let value;\n if (dimensions?.yAxis && contextDimensions?.yAxis?.[1]) {\n const valueFromDimensions = getValueFromDimension(\n dimensions.yAxis,\n contextDimensions.yAxis[0],\n contextDimensions.yAxis[1]\n );\n const display = source.series.valueField.display!;\n value = display(valueFromDimensions);\n }\n\n const formattedValue = dateTimeFormat(source.datapoint[0], {\n defaultWithMS: source.series.hasMsResolution,\n timeZone,\n });\n\n return (\n <GraphContextMenuHeader\n timestamp={formattedValue}\n seriesColor={source.series.color}\n displayName={source.series.alias || source.series.label}\n displayValue={value}\n />\n );\n };\n const renderMenuGroupItems = () => {\n return itemsToRender?.map((group, index) => (\n <MenuGroup key={`${group.label}${index}`} label={group.label}>\n {(group.items || []).map((item) => (\n <MenuItem\n key={`${item.label}`}\n url={item.url}\n label={item.label}\n target={item.target}\n icon={item.icon}\n active={item.active}\n onClick={item.onClick}\n />\n ))}\n </MenuGroup>\n ));\n };\n\n return <ContextMenu {...otherProps} renderMenuItems={renderMenuGroupItems} renderHeader={renderHeader} />;\n};\n\n/** @internal */\nexport const GraphContextMenuHeader = ({\n timestamp,\n seriesColor,\n displayName,\n displayValue,\n}: {\n timestamp: string;\n seriesColor: string;\n displayName: string;\n displayValue: FormattedValue;\n}) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <strong>{timestamp}</strong>\n <HorizontalGroup>\n <div>\n <SeriesIcon color={seriesColor} />\n <span className={styles.displayName}>{displayName}</span>\n </div>\n {displayValue && <FormattedValueDisplay value={displayValue} />}\n </HorizontalGroup>\n </div>\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n wrapper: css({\n padding: theme.spacing(0.5, 1),\n fontSize: theme.typography.size.sm,\n zIndex: theme.zIndex.tooltip,\n }),\n displayName: css({\n whiteSpace: 'nowrap',\n paddingLeft: theme.spacing(0.5),\n }),\n };\n}\n","import {\n GraphSeriesValue,\n Field,\n formattedValueToString,\n getFieldDisplayName,\n TimeZone,\n dateTimeFormat,\n systemDateFormats,\n} from '@grafana/data';\n\n/**\n * Returns index of the closest datapoint BEFORE hover position\n *\n * @param posX\n * @param series\n * @deprecated\n */\nexport const findHoverIndexFromData = (xAxisDimension: Field, xPos: number) => {\n let lower = 0;\n let upper = xAxisDimension.values.length - 1;\n let middle;\n\n while (true) {\n if (lower > upper) {\n return Math.max(upper, 0);\n }\n middle = Math.floor((lower + upper) / 2);\n const xPosition = xAxisDimension.values[middle];\n\n if (xPosition === xPos) {\n return middle;\n } else if (xPosition && xPosition < xPos) {\n lower = middle + 1;\n } else {\n upper = middle - 1;\n }\n }\n};\n\ninterface MultiSeriesHoverInfo {\n value: string;\n time: string;\n datapointIndex: number;\n seriesIndex: number;\n label?: string;\n color?: string;\n}\n\n/**\n * Returns information about closest datapoints when hovering over a Graph\n *\n * @param seriesList list of series visible on the Graph\n * @param pos mouse cursor position, based on jQuery.flot position\n * @deprecated\n */\nexport const getMultiSeriesGraphHoverInfo = (\n // x and y axis dimensions order is aligned\n yAxisDimensions: Field[],\n xAxisDimensions: Field[],\n /** Well, time basically */\n xAxisPosition: number,\n timeZone?: TimeZone\n): {\n results: MultiSeriesHoverInfo[];\n time?: GraphSeriesValue;\n} => {\n let i, field, hoverIndex, hoverDistance, pointTime;\n\n const results: MultiSeriesHoverInfo[] = [];\n\n let minDistance, minTime;\n\n for (i = 0; i < yAxisDimensions.length; i++) {\n field = yAxisDimensions[i];\n const time = xAxisDimensions[i];\n hoverIndex = findHoverIndexFromData(time, xAxisPosition);\n hoverDistance = xAxisPosition - time.values[hoverIndex];\n pointTime = time.values[hoverIndex];\n // Take the closest point before the cursor, or if it does not exist, the closest after\n if (\n minDistance === undefined ||\n (hoverDistance >= 0 && (hoverDistance < minDistance || minDistance < 0)) ||\n (hoverDistance < 0 && hoverDistance > minDistance)\n ) {\n minDistance = hoverDistance;\n minTime = time.display ? formattedValueToString(time.display(pointTime)) : pointTime;\n }\n\n const disp = field.display!(field.values[hoverIndex]);\n\n results.push({\n value: formattedValueToString(disp),\n datapointIndex: hoverIndex,\n seriesIndex: i,\n color: disp.color,\n label: getFieldDisplayName(field),\n time: time.display ? formattedValueToString(time.display(pointTime)) : pointTime,\n });\n }\n\n return {\n results,\n time: minTime,\n };\n};\n\n/** @deprecated */\nexport const graphTickFormatter = (epoch: number, axis: any) => {\n return dateTimeFormat(epoch, {\n format: axis?.options?.timeformat,\n timeZone: axis?.options?.timezone,\n });\n};\n\n/** @deprecated */\nexport const graphTimeFormat = (ticks: number | null, min: number | null, max: number | null): string => {\n if (min && max && ticks) {\n const range = max - min;\n const secPerTick = range / ticks / 1000;\n // Need have 10 millisecond margin on the day range\n // As sometimes last 24 hour dashboard evaluates to more than 86400000\n const oneDay = 86400010;\n const oneYear = 31536000000;\n\n if (secPerTick <= 10) {\n return systemDateFormats.interval.millisecond;\n }\n if (secPerTick <= 45) {\n return systemDateFormats.interval.second;\n }\n if (range <= oneDay) {\n return systemDateFormats.interval.minute;\n }\n if (secPerTick <= 80000) {\n return systemDateFormats.interval.hour;\n }\n if (range <= oneYear) {\n return systemDateFormats.interval.day;\n }\n if (secPerTick <= 31536000) {\n return systemDateFormats.interval.month;\n }\n return systemDateFormats.interval.year;\n }\n\n return systemDateFormats.interval.minute;\n};\n","import { getValueFromDimension } from '@grafana/data';\n\nimport { SeriesTable } from '../../../components/VizTooltip';\nimport { FlotPosition } from '../../../components/VizTooltip/VizTooltip';\nimport { getMultiSeriesGraphHoverInfo } from '../utils';\n\nimport { GraphTooltipContentProps } from './types';\n\n/** @deprecated */\ntype Props = GraphTooltipContentProps & {\n // We expect position to figure out correct values when not hovering over a datapoint\n pos: FlotPosition;\n};\n\n/** @deprecated */\nexport const MultiModeGraphTooltip = ({ dimensions, activeDimensions, pos, timeZone }: Props) => {\n let activeSeriesIndex: number | null = null;\n // when no x-axis provided, skip rendering\n if (activeDimensions.xAxis === null) {\n return null;\n }\n\n if (activeDimensions.yAxis) {\n activeSeriesIndex = activeDimensions.yAxis[0];\n }\n\n // when not hovering over a point, time is undefined, and we use pos.x as time\n const time = activeDimensions.xAxis[1]\n ? getValueFromDimension(dimensions.xAxis, activeDimensions.xAxis[0], activeDimensions.xAxis[1])\n : pos.x;\n\n const hoverInfo = getMultiSeriesGraphHoverInfo(dimensions.yAxis.columns, dimensions.xAxis.columns, time, timeZone);\n const timestamp = hoverInfo.time;\n\n const series = hoverInfo.results.map((s, i) => {\n return {\n color: s.color,\n label: s.label,\n value: s.value,\n isActive: activeSeriesIndex === i,\n };\n });\n\n return <SeriesTable series={series} timestamp={timestamp} />;\n};\n\nMultiModeGraphTooltip.displayName = 'MultiModeGraphTooltip';\n","import {\n getValueFromDimension,\n getColumnFromDimension,\n formattedValueToString,\n getFieldDisplayName,\n} from '@grafana/data';\n\nimport { SeriesTable } from '../../../components/VizTooltip';\n\nimport { GraphTooltipContentProps } from './types';\n\n/** @deprecated */\nexport const SingleModeGraphTooltip = ({ dimensions, activeDimensions, timeZone }: GraphTooltipContentProps) => {\n // not hovering over a point, skip rendering\n if (\n activeDimensions.yAxis === null ||\n activeDimensions.yAxis[1] === undefined ||\n activeDimensions.xAxis === null ||\n activeDimensions.xAxis[1] === undefined\n ) {\n return null;\n }\n const time = getValueFromDimension(dimensions.xAxis, activeDimensions.xAxis[0], activeDimensions.xAxis[1]);\n const timeField = getColumnFromDimension(dimensions.xAxis, activeDimensions.xAxis[0]);\n const processedTime = timeField.display ? formattedValueToString(timeField.display(time)) : time;\n\n const valueField = getColumnFromDimension(dimensions.yAxis, activeDimensions.yAxis[0]);\n const value = getValueFromDimension(dimensions.yAxis, activeDimensions.yAxis[0], activeDimensions.yAxis[1]);\n const display = valueField.display!;\n const disp = display(value);\n\n return (\n <SeriesTable\n series={[\n {\n color: disp.color,\n label: getFieldDisplayName(valueField),\n value: formattedValueToString(disp),\n },\n ]}\n timestamp={processedTime}\n />\n );\n};\n\nSingleModeGraphTooltip.displayName = 'SingleModeGraphTooltip';\n","import { TooltipDisplayMode } from '@grafana/schema';\n\nimport { VizTooltipContentProps } from '../../../components/VizTooltip';\n\nimport { MultiModeGraphTooltip } from './MultiModeGraphTooltip';\nimport { SingleModeGraphTooltip } from './SingleModeGraphTooltip';\nimport { GraphDimensions } from './types';\n\n/** @deprecated */\nexport const GraphTooltip = ({\n mode = TooltipDisplayMode.Single,\n dimensions,\n activeDimensions,\n pos,\n timeZone,\n}: VizTooltipContentProps<GraphDimensions>) => {\n // When\n // [1] no active dimension or\n // [2] no xAxis position\n // we assume no tooltip should be rendered\n if (!activeDimensions || !activeDimensions.xAxis) {\n return null;\n }\n\n if (mode === 'single') {\n return <SingleModeGraphTooltip dimensions={dimensions} activeDimensions={activeDimensions} timeZone={timeZone} />;\n } else {\n return (\n <MultiModeGraphTooltip\n dimensions={dimensions}\n activeDimensions={activeDimensions}\n pos={pos}\n timeZone={timeZone}\n />\n );\n }\n};\n\nGraphTooltip.displayName = 'GraphTooltip';\n","// Libraries\nimport $ from 'jquery';\nimport { uniqBy } from 'lodash';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\n\n// Types\nimport { TimeRange, GraphSeriesXY, TimeZone, createDimension } from '@grafana/data';\nimport { TooltipDisplayMode } from '@grafana/schema';\n\nimport { VizTooltipProps, VizTooltipContentProps, ActiveDimensions, VizTooltip } from '../../components/VizTooltip';\nimport { FlotPosition } from '../../components/VizTooltip/VizTooltip';\n\nimport { GraphContextMenu, GraphContextMenuProps, ContextDimensions } from './GraphContextMenu';\nimport { GraphTooltip } from './GraphTooltip/GraphTooltip';\nimport { GraphDimensions } from './GraphTooltip/types';\nimport { FlotItem } from './types';\nimport { graphTimeFormat, graphTickFormatter } from './utils';\n\n/** @deprecated */\nexport interface GraphProps {\n ariaLabel?: string;\n children?: JSX.Element | JSX.Element[];\n series: GraphSeriesXY[];\n timeRange: TimeRange; // NOTE: we should aim to make `time` a property of the axis, not force it for all graphs\n timeZone?: TimeZone; // NOTE: we should aim to make `time` a property of the axis, not force it for all graphs\n showLines?: boolean;\n showPoints?: boolean;\n showBars?: boolean;\n width: number;\n height: number;\n isStacked?: boolean;\n lineWidth?: number;\n onHorizontalRegionSelected?: (from: number, to: number) => void;\n}\n\n/** @deprecated */\ninterface GraphState {\n pos?: FlotPosition;\n contextPos?: FlotPosition;\n isTooltipVisible: boolean;\n isContextVisible: boolean;\n activeItem?: FlotItem<GraphSeriesXY>;\n contextItem?: FlotItem<GraphSeriesXY>;\n}\n\n/**\n * This is a react wrapper for the angular, flot based graph visualization.\n * Rather than using this component, you should use the `<PanelRender .../> with\n * timeseries panel configs.\n *\n * @deprecated\n */\nexport class Graph extends PureComponent<GraphProps, GraphState> {\n static defaultProps = {\n showLines: true,\n showPoints: false,\n showBars: false,\n isStacked: false,\n lineWidth: 1,\n };\n\n state: GraphState = {\n isTooltipVisible: false,\n isContextVisible: false,\n };\n\n element: HTMLElement | null = null;\n $element: JQuery<HTMLElement> | null = null;\n\n componentDidUpdate(prevProps: GraphProps, prevState: GraphState) {\n if (prevProps !== this.props) {\n this.draw();\n }\n }\n\n componentDidMount() {\n this.draw();\n if (this.element) {\n this.$element = $(this.element);\n this.$element.bind('plotselected', this.onPlotSelected);\n this.$element.bind('plothover', this.onPlotHover);\n this.$element.bind('plotclick', this.onPlotClick);\n }\n }\n\n componentWillUnmount() {\n if (this.$element) {\n this.$element.unbind('plotselected', this.onPlotSelected);\n }\n }\n\n onPlotSelected = (event: JQuery.Event, ranges: { xaxis: { from: number; to: number } }) => {\n const { onHorizontalRegionSelected } = this.props;\n if (onHorizontalRegionSelected) {\n onHorizontalRegionSelected(ranges.xaxis.from, ranges.xaxis.to);\n }\n };\n\n onPlotHover = (event: JQuery.Event, pos: FlotPosition, item?: FlotItem<GraphSeriesXY>) => {\n this.setState({\n isTooltipVisible: true,\n activeItem: item,\n pos,\n });\n };\n\n onPlotClick = (event: JQuery.Event, contextPos: FlotPosition, item?: FlotItem<GraphSeriesXY>) => {\n this.setState({\n isContextVisible: true,\n isTooltipVisible: false,\n contextItem: item,\n contextPos,\n });\n };\n\n getYAxes(series: GraphSeriesXY[]) {\n if (series.length === 0) {\n return [{ show: true, min: -1, max: 1 }];\n }\n return uniqBy(\n series.map((s) => {\n const index = s.yAxis ? s.yAxis.index : 1;\n const min = s.yAxis && s.yAxis.min && !isNaN(s.yAxis.min) ? s.yAxis.min : null;\n const tickDecimals =\n s.yAxis && s.yAxis.tickDecimals && !isNaN(s.yAxis.tickDecimals) ? s.yAxis.tickDecimals : null;\n return {\n show: true,\n index,\n position: index === 1 ? 'left' : 'right',\n min,\n tickDecimals,\n };\n }),\n (yAxisConfig) => yAxisConfig.index\n );\n }\n\n renderTooltip = () => {\n const { children, series, timeZone } = this.props;\n const { pos, activeItem, isTooltipVisible } = this.state;\n let tooltipElement: React.ReactElement<VizTooltipProps> | undefined;\n\n if (!isTooltipVisible || !pos || series.length === 0) {\n return null;\n }\n\n // Find children that indicate tooltip to be rendered\n React.Children.forEach(children, (c) => {\n // We have already found tooltip\n if (tooltipElement) {\n return;\n }\n const childType = c && c.type && (c.type.displayName || c.type.name);\n\n if (childType === VizTooltip.displayName) {\n tooltipElement = c;\n }\n });\n // If no tooltip provided, skip rendering\n if (!tooltipElement) {\n return null;\n }\n const tooltipElementProps = tooltipElement.props;\n\n const tooltipMode = tooltipElementProps.mode || 'single';\n\n // If mode is single series and user is not hovering over item, skip rendering\n if (!activeItem && tooltipMode === 'single') {\n return null;\n }\n\n // Check if tooltip needs to be rendered with custom tooltip component, otherwise default to GraphTooltip\n const tooltipContentRenderer = tooltipElementProps.tooltipComponent || GraphTooltip;\n // Indicates column(field) index in y-axis dimension\n const seriesIndex = activeItem ? activeItem.series.seriesIndex : 0;\n // Indicates row index in active field values\n const rowIndex = activeItem ? activeItem.dataIndex : undefined;\n\n const activeDimensions: ActiveDimensions<GraphDimensions> = {\n // Described x-axis active item\n // When hovering over an item - let's take it's dataIndex, otherwise undefined\n // Tooltip itself needs to figure out correct datapoint display information based on pos passed to it\n xAxis: [seriesIndex, rowIndex],\n // Describes y-axis active item\n yAxis: activeItem ? [activeItem.series.seriesIndex, activeItem.dataIndex] : null,\n };\n\n const tooltipContentProps: VizTooltipContentProps<GraphDimensions> = {\n dimensions: {\n // time/value dimension columns are index-aligned - see getGraphSeriesModel\n xAxis: createDimension(\n 'xAxis',\n series.map((s) => s.timeField)\n ),\n yAxis: createDimension(\n 'yAxis',\n series.map((s) => s.valueField)\n ),\n },\n activeDimensions,\n pos,\n mode: tooltipElementProps.mode || TooltipDisplayMode.Single,\n timeZone,\n };\n\n const tooltipContent = React.createElement(tooltipContentRenderer, { ...tooltipContentProps });\n\n return React.cloneElement(tooltipElement, {\n content: tooltipContent,\n position: { x: pos.pageX, y: pos.pageY },\n offset: { x: 10, y: 10 },\n });\n };\n\n renderContextMenu = () => {\n const { series } = this.props;\n const { contextPos, contextItem, isContextVisible } = this.state;\n\n if (!isContextVisible || !contextPos || !contextItem || series.length === 0) {\n return null;\n }\n\n // Indicates column(field) index in y-axis dimension\n const seriesIndex = contextItem ? contextItem.series.seriesIndex : 0;\n // Indicates row index in context field values\n const rowIndex = contextItem ? contextItem.dataIndex : undefined;\n\n const contextDimensions: ContextDimensions<GraphDimensions> = {\n // Described x-axis context item\n xAxis: [seriesIndex, rowIndex],\n // Describes y-axis context item\n yAxis: contextItem ? [contextItem.series.seriesIndex, contextItem.dataIndex] : null,\n };\n\n const dimensions: GraphDimensions = {\n // time/value dimension columns are index-aligned - see getGraphSeriesModel\n xAxis: createDimension(\n 'xAxis',\n series.map((s) => s.timeField)\n ),\n yAxis: createDimension(\n 'yAxis',\n series.map((s) => s.valueField)\n ),\n };\n\n const closeContext = () => this.setState({ isContextVisible: false });\n\n const getContextMenuSource = () => {\n return {\n datapoint: contextItem.datapoint,\n dataIndex: contextItem.dataIndex,\n series: contextItem.series,\n seriesIndex: contextItem.series.seriesIndex,\n pageX: contextPos.pageX,\n pageY: contextPos.pageY,\n };\n };\n\n const contextContentProps: GraphContextMenuProps = {\n x: contextPos.pageX,\n y: contextPos.pageY,\n onClose: closeContext,\n getContextMenuSource: getContextMenuSource,\n timeZone: this.props.timeZone,\n dimensions,\n contextDimensions,\n };\n\n return <GraphContextMenu {...contextContentProps} />;\n };\n\n getBarWidth = () => {\n const { series } = this.props;\n return Math.min(...series.map((s) => s.timeStep));\n };\n\n draw() {\n if (this.element === null) {\n return;\n }\n\n const {\n width,\n series,\n timeRange,\n showLines,\n showBars,\n showPoints,\n isStacked,\n lineWidth,\n timeZone,\n onHorizontalRegionSelected,\n } = this.props;\n\n if (!width) {\n return;\n }\n\n const ticks = width / 100;\n const min = timeRange.from.valueOf();\n const max = timeRange.to.valueOf();\n const yaxes = this.getYAxes(series);\n\n const flotOptions = {\n legend: {\n show: false,\n },\n series: {\n stack: isStacked,\n lines: {\n show: showLines,\n lineWidth: lineWidth,\n zero: false,\n },\n points: {\n show: showPoints,\n fill: 1,\n fillColor: false,\n radius: 2,\n },\n bars: {\n show: showBars,\n fill: 1,\n // Dividig the width by 1.5 to make the bars not touch each other\n barWidth: showBars ? this.getBarWidth() / 1.5 : 1,\n zero: false,\n lineWidth: lineWidth,\n },\n shadowSize: 0,\n },\n xaxis: {\n timezone: timeZone,\n show: true,\n mode: 'time',\n min: min,\n max: max,\n label: 'Datetime',\n ticks: ticks,\n timeformat: graphTimeFormat(ticks, min, max),\n tickFormatter: graphTickFormatter,\n },\n yaxes,\n grid: {\n minBorderMargin: 0,\n markings: [],\n backgroundColor: null,\n borderWidth: 0,\n hoverable: true,\n clickable: true,\n color: '#a1a1a1',\n margin: { left: 0, right: 0 },\n labelMarginX: 0,\n mouseActiveRadius: 30,\n },\n selection: {\n mode: onHorizontalRegionSelected ? 'x' : null,\n color: '#666',\n },\n crosshair: {\n mode: 'x',\n },\n };\n\n try {\n $.plot(\n this.element,\n series.filter((s) => s.isVisible),\n flotOptions\n );\n } catch (err) {\n console.error('Graph rendering error', err, flotOptions, series);\n throw new Error('Error rendering panel');\n }\n }\n\n render() {\n const { ariaLabel, height, width, series } = this.props;\n const noDataToBeDisplayed = series.length === 0;\n const tooltip = this.renderTooltip();\n const context = this.renderContextMenu();\n return (\n <div className=\"graph-panel\" aria-label={ariaLabel}>\n <div\n className=\"graph-panel__chart\"\n ref={(e) => (this.element = e)}\n style={{ height, width }}\n onMouseLeave={() => {\n this.setState({ isTooltipVisible: false });\n }}\n />\n {noDataToBeDisplayed && <div className=\"datapoints-warning\">No data</div>}\n {tooltip}\n {context}\n </div>\n );\n }\n}\n\nexport default Graph;\n","// Libraries\n\nimport { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, GraphSeriesValue } from '@grafana/data';\nimport { LegendDisplayMode, LegendPlacement } from '@grafana/schema';\n\nimport { CustomScrollbar } from '../../components/CustomScrollbar/CustomScrollbar';\nimport { VizLegend } from '../../components/VizLegend/VizLegend';\nimport { VizLegendItem } from '../../components/VizLegend/types';\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { Graph, GraphProps } from './Graph';\n\nexport interface GraphWithLegendProps extends GraphProps {\n legendDisplayMode: LegendDisplayMode;\n legendVisibility: boolean;\n placement: LegendPlacement;\n hideEmpty?: boolean;\n hideZero?: boolean;\n sortLegendBy?: string;\n sortLegendDesc?: boolean;\n onSeriesToggle?: (label: string, event: React.MouseEvent<HTMLElement>) => void;\n onToggleSort: (sortBy: string) => void;\n}\n\nconst shouldHideLegendItem = (data: GraphSeriesValue[][], hideEmpty = false, hideZero = false) => {\n const isZeroOnlySeries = data.reduce((acc, current) => acc + (current[1] || 0), 0) === 0;\n const isNullOnlySeries = !data.reduce((acc, current) => acc && current[1] !== null, true);\n\n return (hideEmpty && isNullOnlySeries) || (hideZero && isZeroOnlySeries);\n};\n\nexport const GraphWithLegend = (props: GraphWithLegendProps) => {\n const {\n series,\n timeRange,\n width,\n height,\n showBars,\n showLines,\n showPoints,\n sortLegendBy,\n sortLegendDesc,\n legendDisplayMode,\n legendVisibility,\n placement,\n onSeriesToggle,\n onToggleSort,\n hideEmpty,\n hideZero,\n isStacked,\n lineWidth,\n onHorizontalRegionSelected,\n timeZone,\n children,\n ariaLabel,\n } = props;\n const { graphContainer, wrapper, legendContainer } = useStyles2(getGraphWithLegendStyles, props.placement);\n\n const legendItems = series.reduce<VizLegendItem[]>((acc, s) => {\n return shouldHideLegendItem(s.data, hideEmpty, hideZero)\n ? acc\n : acc.concat([\n {\n label: s.label,\n color: s.color || '',\n disabled: !s.isVisible,\n yAxis: s.yAxis.index,\n getDisplayValues: () => s.info || [],\n },\n ]);\n }, []);\n\n return (\n <div className={wrapper} aria-label={ariaLabel}>\n <div className={graphContainer}>\n <Graph\n series={series}\n timeRange={timeRange}\n timeZone={timeZone}\n showLines={showLines}\n showPoints={showPoints}\n showBars={showBars}\n width={width}\n height={height}\n isStacked={isStacked}\n lineWidth={lineWidth}\n onHorizontalRegionSelected={onHorizontalRegionSelected}\n >\n {children}\n </Graph>\n </div>\n\n {legendVisibility && (\n <div className={legendContainer}>\n <CustomScrollbar hideHorizontalTrack>\n <VizLegend\n items={legendItems}\n displayMode={legendDisplayMode}\n placement={placement}\n sortBy={sortLegendBy}\n sortDesc={sortLegendDesc}\n onLabelClick={(item, event) => {\n if (onSeriesToggle) {\n onSeriesToggle(item.label, event);\n }\n }}\n onToggleSort={onToggleSort}\n />\n </CustomScrollbar>\n </div>\n )}\n </div>\n );\n};\n\nconst getGraphWithLegendStyles = (_theme: GrafanaTheme2, placement: LegendPlacement) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: placement === 'bottom' ? 'column' : 'row',\n }),\n graphContainer: css({\n minHeight: '65%',\n flexGrow: 1,\n }),\n legendContainer: css({\n padding: '10px 0',\n maxHeight: placement === 'bottom' ? '35%' : 'none',\n }),\n});\n","import { difference, isEqual } from 'lodash';\nimport { Component } from 'react';\nimport * as React from 'react';\n\nimport { GraphSeriesXY } from '@grafana/data';\n\n/** @deprecated */\nexport interface GraphSeriesTogglerAPI {\n onSeriesToggle: (label: string, event: React.MouseEvent<HTMLElement>) => void;\n toggledSeries: GraphSeriesXY[];\n}\n\n/** @deprecated */\nexport interface GraphSeriesTogglerProps {\n children: (api: GraphSeriesTogglerAPI) => JSX.Element;\n series: GraphSeriesXY[];\n onHiddenSeriesChanged?: (hiddenSeries: string[]) => void;\n}\n\n/** @deprecated */\nexport interface GraphSeriesTogglerState {\n hiddenSeries: string[];\n toggledSeries: GraphSeriesXY[];\n}\n\n/** @deprecated */\nexport class GraphSeriesToggler extends Component<GraphSeriesTogglerProps, GraphSeriesTogglerState> {\n constructor(props: GraphSeriesTogglerProps) {\n super(props);\n\n this.onSeriesToggle = this.onSeriesToggle.bind(this);\n\n this.state = {\n hiddenSeries: [],\n toggledSeries: props.series,\n };\n }\n\n componentDidUpdate(prevProps: Readonly<GraphSeriesTogglerProps>) {\n const { series } = this.props;\n if (!isEqual(prevProps.series, series)) {\n this.setState({ hiddenSeries: [], toggledSeries: series });\n }\n }\n\n onSeriesToggle(label: string, event: React.MouseEvent<HTMLElement>) {\n const { series, onHiddenSeriesChanged } = this.props;\n const { hiddenSeries } = this.state;\n\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n // Toggling series with key makes the series itself to toggle\n const newHiddenSeries =\n hiddenSeries.indexOf(label) > -1\n ? hiddenSeries.filter((series) => series !== label)\n : hiddenSeries.concat([label]);\n\n const toggledSeries = series.map((series) => ({\n ...series,\n isVisible: newHiddenSeries.indexOf(series.label) === -1,\n }));\n this.setState({ hiddenSeries: newHiddenSeries, toggledSeries }, () =>\n onHiddenSeriesChanged ? onHiddenSeriesChanged(newHiddenSeries) : undefined\n );\n return;\n }\n\n // Toggling series with out key toggles all the series but the clicked one\n const allSeriesLabels = series.map((series) => series.label);\n const newHiddenSeries =\n hiddenSeries.length + 1 === allSeriesLabels.length ? [] : difference(allSeriesLabels, [label]);\n const toggledSeries = series.map((series) => ({\n ...series,\n isVisible: newHiddenSeries.indexOf(series.label) === -1,\n }));\n\n this.setState({ hiddenSeries: newHiddenSeries, toggledSeries }, () =>\n onHiddenSeriesChanged ? onHiddenSeriesChanged(newHiddenSeries) : undefined\n );\n }\n\n render() {\n const { children } = this.props;\n const { toggledSeries } = this.state;\n\n return children({\n onSeriesToggle: this.onSeriesToggle,\n toggledSeries,\n });\n }\n}\n","import { DataFrame } from '@grafana/data';\n\nimport { getRefField } from './utils';\n\ntype InsertMode = (prev: number, next: number, threshold: number) => number;\n\nconst INSERT_MODES = {\n threshold: (prev: number, next: number, threshold: number) => prev + threshold,\n midpoint: (prev: number, next: number, threshold: number) => (prev + next) / 2,\n // previous time + 1ms to prevent StateTimeline from forward-interpolating prior state\n plusone: (prev: number, next: number, threshold: number) => prev + 1,\n};\n\ninterface NullInsertOptions {\n frame: DataFrame;\n refFieldName?: string | null;\n refFieldPseudoMax?: number;\n refFieldPseudoMin?: number;\n insertMode?: InsertMode;\n}\n\n/** @deprecated */\nexport function applyNullInsertThreshold(opts: NullInsertOptions): DataFrame {\n if (opts.frame.length === 0) {\n return opts.frame;\n }\n\n let thorough = true;\n let { frame, refFieldName, refFieldPseudoMax, refFieldPseudoMin, insertMode } = opts;\n\n if (!insertMode) {\n insertMode = INSERT_MODES.threshold;\n }\n\n const refField = getRefField(frame, refFieldName);\n\n if (refField == null) {\n return frame;\n }\n\n refField.state = {\n ...refField.state,\n nullThresholdApplied: true,\n };\n\n const thresholds = frame.fields.map((field) => field.config.custom?.insertNulls || refField.config.interval || null);\n\n const uniqueThresholds = new Set<number>(thresholds);\n\n uniqueThresholds.delete(null as any);\n\n if (uniqueThresholds.size === 0) {\n return frame;\n }\n\n if (uniqueThresholds.size === 1) {\n const threshold = uniqueThresholds.values().next().value;\n\n if (!threshold || threshold <= 0) {\n return frame;\n }\n\n const refValues = refField.values;\n\n const frameValues = frame.fields.map((field) => field.values);\n\n const filledFieldValues = nullInsertThreshold(\n refValues,\n frameValues,\n threshold,\n refFieldPseudoMin,\n refFieldPseudoMax,\n insertMode,\n thorough\n );\n\n if (filledFieldValues === frameValues) {\n return frame;\n }\n\n return {\n ...frame,\n length: filledFieldValues[0].length,\n fields: frame.fields.map((field, i) => ({\n ...field,\n values: filledFieldValues[i],\n })),\n };\n }\n\n // TODO: unique threshold-per-field (via overrides) is unimplemented\n // should be done by processing each (refField + thresholdA-field1 + thresholdA-field2...)\n // as a separate nullInsertThreshold() dataset, then re-join into single dataset via join()\n return frame;\n}\n\nfunction nullInsertThreshold(\n refValues: number[],\n frameValues: any[][],\n threshold: number,\n refFieldPseudoMin: number | null = null,\n // will insert a trailing null when refFieldPseudoMax > last datapoint + threshold\n refFieldPseudoMax: number | null = null,\n getInsertValue: InsertMode,\n // will insert the value at every missing interval\n thorough: boolean\n) {\n const len = refValues.length;\n const refValuesNew: number[] = [];\n\n // Continuously subtract the threshold from the first data point, filling in insert values accordingly\n if (refFieldPseudoMin != null && refFieldPseudoMin < refValues[0]) {\n let preFillCount = Math.ceil((refValues[0] - refFieldPseudoMin) / threshold);\n // this will be 0 or 1 threshold increment left of visible range\n let prevSlot = refValues[0] - preFillCount * threshold;\n\n while (prevSlot < refValues[0]) {\n // (prevSlot - threshold) is used to simulate the previous 'real' data point, as getInsertValue expects\n refValuesNew.push(getInsertValue(prevSlot - threshold, prevSlot, threshold));\n prevSlot += threshold;\n }\n }\n\n // Insert initial value\n refValuesNew.push(refValues[0]);\n\n let prevValue: number = refValues[0];\n\n // Fill nulls when a value is greater than the threshold value\n for (let i = 1; i < len; i++) {\n const curValue = refValues[i];\n\n while (curValue - prevValue > threshold) {\n refValuesNew.push(getInsertValue(prevValue, curValue, threshold));\n\n prevValue += threshold;\n\n if (!thorough) {\n break;\n }\n }\n\n refValuesNew.push(curValue);\n\n prevValue = curValue;\n }\n\n // At the end of the sequence\n if (refFieldPseudoMax != null && refFieldPseudoMax > prevValue) {\n while (prevValue + threshold < refFieldPseudoMax) {\n refValuesNew.push(getInsertValue(prevValue, refFieldPseudoMax, threshold));\n prevValue += threshold;\n }\n }\n\n const filledLen = refValuesNew.length;\n\n if (filledLen === len) {\n return frameValues;\n }\n\n const filledFieldValues: any[][] = [];\n\n for (let fieldValues of frameValues) {\n let filledValues;\n\n if (fieldValues !== refValues) {\n filledValues = Array(filledLen);\n\n for (let i = 0, j = 0; i < filledLen; i++) {\n filledValues[i] = refValues[j] === refValuesNew[i] ? fieldValues[j++] : null;\n }\n } else {\n filledValues = refValuesNew;\n }\n\n filledFieldValues.push(filledValues);\n }\n\n return filledFieldValues;\n}\n","/**\n * mutates all nulls -> undefineds in the fieldValues array for value-less refValues ranges below maxThreshold\n * refValues is typically a time array and maxThreshold is the allowable distance between in time\n * @deprecated\n */\nexport function nullToUndefThreshold(refValues: number[], fieldValues: any[], maxThreshold: number): any[] {\n let prevRef;\n let nullIdx;\n\n for (let i = 0; i < fieldValues.length; i++) {\n let fieldVal = fieldValues[i];\n\n if (fieldVal == null) {\n if (nullIdx == null && prevRef != null) {\n nullIdx = i;\n }\n } else {\n if (nullIdx != null) {\n if (refValues[i] - (prevRef as number) < maxThreshold) {\n while (nullIdx < i) {\n fieldValues[nullIdx++] = undefined;\n }\n }\n\n nullIdx = null;\n }\n\n prevRef = refValues[i];\n }\n }\n\n return fieldValues;\n}\n","import { DataFrame, Field, FieldConfig, FieldType, outerJoinDataFrames, TimeRange } from '@grafana/data';\nimport {\n AxisPlacement,\n GraphDrawStyle,\n GraphFieldConfig,\n ScaleDistribution,\n ScaleDistributionConfig,\n} from '@grafana/schema';\n\nimport { FIXED_UNIT } from '../../components/uPlot/types';\n\nimport { applyNullInsertThreshold } from './nullInsertThreshold';\nimport { nullToUndefThreshold } from './nullToUndefThreshold';\nimport { XYFieldMatchers } from './types';\n\nfunction isVisibleBarField(f: Field) {\n return (\n f.type === FieldType.number && f.config.custom?.drawStyle === GraphDrawStyle.Bars && !f.config.custom?.hideFrom?.viz\n );\n}\n\nexport function getRefField(frame: DataFrame, refFieldName?: string | null) {\n return frame.fields.find((field) => {\n // note: getFieldDisplayName() would require full DF[]\n return refFieldName != null ? field.name === refFieldName : field.type === FieldType.time;\n });\n}\n\n// will mutate the DataFrame's fields' values\nfunction applySpanNullsThresholds(frame: DataFrame, refFieldName?: string | null) {\n const refField = getRefField(frame, refFieldName);\n\n let refValues = refField?.values;\n\n for (let i = 0; i < frame.fields.length; i++) {\n let field = frame.fields[i];\n\n if (field === refField || isVisibleBarField(field)) {\n continue;\n }\n\n let spanNulls = field.config.custom?.spanNulls;\n\n if (typeof spanNulls === 'number') {\n if (spanNulls !== -1 && refValues) {\n field.values = nullToUndefThreshold(refValues, field.values, spanNulls);\n }\n }\n }\n\n return frame;\n}\n\nexport function preparePlotFrame(frames: DataFrame[], dimFields: XYFieldMatchers, timeRange?: TimeRange | null) {\n let xField: Field;\n loop: for (let frame of frames) {\n for (let field of frame.fields) {\n if (dimFields.x(field, frame, frames)) {\n xField = field;\n break loop;\n }\n }\n }\n\n // apply null insertions at interval\n frames = frames.map((frame) => {\n if (!xField?.state?.nullThresholdApplied) {\n return applyNullInsertThreshold({\n frame,\n refFieldName: xField.name,\n refFieldPseudoMin: timeRange?.from.valueOf(),\n refFieldPseudoMax: timeRange?.to.valueOf(),\n });\n } else {\n return frame;\n }\n });\n\n let numBarSeries = 0;\n\n frames.forEach((frame) => {\n frame.fields.forEach((f) => {\n if (isVisibleBarField(f)) {\n // prevent minesweeper-expansion of nulls (gaps) when joining bars\n // since bar width is determined from the minimum distance between non-undefined values\n // (this strategy will still retain any original pre-join nulls, though)\n f.config.custom = {\n ...f.config.custom,\n spanNulls: -1,\n };\n\n numBarSeries++;\n }\n });\n });\n\n // to make bar widths of all series uniform (equal to narrowest bar series), find smallest distance between x points\n let minXDelta = Infinity;\n\n if (numBarSeries > 1) {\n frames.forEach((frame) => {\n if (!frame.fields.some(isVisibleBarField)) {\n return;\n }\n\n const xVals = xField.values;\n\n for (let i = 0; i < xVals.length; i++) {\n if (i > 0) {\n minXDelta = Math.min(minXDelta, xVals[i] - xVals[i - 1]);\n }\n }\n });\n }\n\n let alignedFrame = outerJoinDataFrames({\n frames,\n joinBy: dimFields.x,\n keep: dimFields.y,\n keepOriginIndices: true,\n });\n\n if (alignedFrame) {\n alignedFrame = applySpanNullsThresholds(alignedFrame, xField!.name);\n\n // append 2 null vals at minXDelta to bar series\n if (minXDelta !== Infinity) {\n alignedFrame.fields.forEach((f, fi) => {\n let vals = f.values;\n\n if (fi === 0) {\n let lastVal = vals[vals.length - 1];\n vals.push(lastVal + minXDelta, lastVal + 2 * minXDelta);\n } else if (isVisibleBarField(f)) {\n vals.push(null, null);\n } else {\n vals.push(undefined, undefined);\n }\n });\n\n alignedFrame.length += 2;\n }\n\n return alignedFrame;\n }\n\n return null;\n}\n\nexport function buildScaleKey(config: FieldConfig<GraphFieldConfig>, fieldType: FieldType) {\n const defaultPart = 'na';\n\n const scaleRange = `${config.min !== undefined ? config.min : defaultPart}-${\n config.max !== undefined ? config.max : defaultPart\n }`;\n\n const scaleSoftRange = `${config.custom?.axisSoftMin !== undefined ? config.custom.axisSoftMin : defaultPart}-${\n config.custom?.axisSoftMax !== undefined ? config.custom.axisSoftMax : defaultPart\n }`;\n\n const scalePlacement = `${\n config.custom?.axisPlacement !== undefined ? config.custom?.axisPlacement : AxisPlacement.Auto\n }`;\n\n const scaleUnit = config.unit ?? FIXED_UNIT;\n\n const scaleDistribution = config.custom?.scaleDistribution\n ? getScaleDistributionPart(config.custom.scaleDistribution)\n : ScaleDistribution.Linear;\n\n const scaleLabel = Boolean(config.custom?.axisLabel) ? config.custom!.axisLabel : defaultPart;\n\n return `${scaleUnit}/${scaleRange}/${scaleSoftRange}/${scalePlacement}/${scaleDistribution}/${scaleLabel}/${fieldType}`;\n}\n\nfunction getScaleDistributionPart(config: ScaleDistributionConfig) {\n if (config.type === ScaleDistribution.Log) {\n return `${config.type}${config.log}`;\n }\n return config.type;\n}\n","import { Component } from 'react';\nimport * as React from 'react';\nimport { Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport uPlot, { AlignedData } from 'uplot';\n\nimport {\n DataFrame,\n DataHoverClearEvent,\n DataHoverEvent,\n Field,\n FieldMatcherID,\n fieldMatchers,\n FieldType,\n LegacyGraphHoverEvent,\n TimeRange,\n TimeZone,\n} from '@grafana/data';\nimport { VizLegendOptions } from '@grafana/schema';\n\nimport { PanelContext, PanelContextRoot } from '../../components/PanelChrome/PanelContext';\nimport { VizLayout } from '../../components/VizLayout/VizLayout';\nimport { UPlotChart } from '../../components/uPlot/Plot';\nimport { AxisProps } from '../../components/uPlot/config/UPlotAxisBuilder';\nimport { Renderers, UPlotConfigBuilder } from '../../components/uPlot/config/UPlotConfigBuilder';\nimport { ScaleProps } from '../../components/uPlot/config/UPlotScaleBuilder';\nimport { findMidPointYPosition, pluginLog } from '../../components/uPlot/utils';\nimport { Themeable2 } from '../../types/theme';\n\nimport { GraphNGLegendEvent, XYFieldMatchers } from './types';\nimport { preparePlotFrame as defaultPreparePlotFrame } from './utils';\n\n/**\n * @deprecated\n * @internal -- not a public API\n */\nexport type PropDiffFn<T extends any = any> = (prev: T, next: T) => boolean;\n\n/** @deprecated */\nexport interface GraphNGProps extends Themeable2 {\n frames: DataFrame[];\n structureRev?: number; // a number that will change when the frames[] structure changes\n width: number;\n height: number;\n timeRange: TimeRange;\n timeZone: TimeZone[] | TimeZone;\n legend: VizLegendOptions;\n fields?: XYFieldMatchers; // default will assume timeseries data\n renderers?: Renderers;\n tweakScale?: (opts: ScaleProps, forField: Field) => ScaleProps;\n tweakAxis?: (opts: AxisProps, forField: Field) => AxisProps;\n onLegendClick?: (event: GraphNGLegendEvent) => void;\n children?: (builder: UPlotConfigBuilder, alignedFrame: DataFrame) => React.ReactNode;\n prepConfig: (alignedFrame: DataFrame, allFrames: DataFrame[], getTimeRange: () => TimeRange) => UPlotConfigBuilder;\n propsToDiff?: Array<string | PropDiffFn>;\n preparePlotFrame?: (frames: DataFrame[], dimFields: XYFieldMatchers) => DataFrame | null;\n renderLegend: (config: UPlotConfigBuilder) => React.ReactElement | null;\n\n /**\n * needed for propsToDiff to re-init the plot & config\n * this is a generic approach to plot re-init, without having to specify which panel-level options\n * should cause invalidation. we can drop this in favor of something like panelOptionsRev that gets passed in\n * similar to structureRev. then we can drop propsToDiff entirely.\n */\n options?: Record<string, any>;\n}\n\nfunction sameProps(prevProps: any, nextProps: any, propsToDiff: Array<string | PropDiffFn> = []) {\n for (const propName of propsToDiff) {\n if (typeof propName === 'function') {\n if (!propName(prevProps, nextProps)) {\n return false;\n }\n } else if (nextProps[propName] !== prevProps[propName]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * @internal -- not a public API\n * @deprecated\n */\nexport interface GraphNGState {\n alignedFrame: DataFrame;\n alignedData?: AlignedData;\n config?: UPlotConfigBuilder;\n}\n\n/**\n * \"Time as X\" core component, expects ascending x\n * @deprecated\n */\nexport class GraphNG extends Component<GraphNGProps, GraphNGState> {\n static contextType = PanelContextRoot;\n panelContext: PanelContext = {} as PanelContext;\n private plotInstance: React.RefObject<uPlot>;\n\n private subscription = new Subscription();\n\n constructor(props: GraphNGProps) {\n super(props);\n let state = this.prepState(props);\n state.alignedData = state.config!.prepData!([state.alignedFrame]) as AlignedData;\n this.state = state;\n this.plotInstance = React.createRef();\n }\n\n getTimeRange = () => this.props.timeRange;\n\n prepState(props: GraphNGProps, withConfig = true) {\n let state: GraphNGState = null as any;\n\n const { frames, fields, preparePlotFrame } = props;\n\n const preparePlotFrameFn = preparePlotFrame || defaultPreparePlotFrame;\n\n const alignedFrame = preparePlotFrameFn(\n frames,\n fields || {\n x: fieldMatchers.get(FieldMatcherID.firstTimeField).get({}),\n y: fieldMatchers.get(FieldMatcherID.byTypes).get(new Set([FieldType.number, FieldType.enum])),\n },\n props.timeRange\n );\n pluginLog('GraphNG', false, 'data aligned', alignedFrame);\n\n if (alignedFrame) {\n let config = this.state?.config;\n\n if (withConfig) {\n config = props.prepConfig(alignedFrame, this.props.frames, this.getTimeRange);\n pluginLog('GraphNG', false, 'config prepared', config);\n }\n\n state = {\n alignedFrame,\n config,\n };\n\n pluginLog('GraphNG', false, 'data prepared', state.alignedData);\n }\n\n return state;\n }\n\n handleCursorUpdate(evt: DataHoverEvent | LegacyGraphHoverEvent) {\n const time = evt.payload?.point?.time;\n const u = this.plotInstance.current;\n if (u && time) {\n // Try finding left position on time axis\n const left = u.valToPos(time, 'x');\n let top;\n if (left) {\n // find midpoint between points at current idx\n top = findMidPointYPosition(u, u.posToIdx(left));\n }\n\n if (!top || !left) {\n return;\n }\n\n u.setCursor({\n left,\n top,\n });\n }\n }\n\n componentDidMount() {\n this.panelContext = this.context as PanelContext;\n const { eventBus } = this.panelContext;\n\n this.subscription.add(\n eventBus\n .getStream(DataHoverEvent)\n .pipe(throttleTime(50))\n .subscribe({\n next: (evt) => {\n if (eventBus === evt.origin) {\n return;\n }\n this.handleCursorUpdate(evt);\n },\n })\n );\n\n // Legacy events (from flot graph)\n this.subscription.add(\n eventBus\n .getStream(LegacyGraphHoverEvent)\n .pipe(throttleTime(50))\n .subscribe({\n next: (evt) => this.handleCursorUpdate(evt),\n })\n );\n\n this.subscription.add(\n eventBus\n .getStream(DataHoverClearEvent)\n .pipe(throttleTime(50))\n .subscribe({\n next: () => {\n const u = this.plotInstance?.current;\n\n // @ts-ignore\n if (u && !u.cursor._lock) {\n u.setCursor({\n left: -10,\n top: -10,\n });\n }\n },\n })\n );\n }\n\n componentDidUpdate(prevProps: GraphNGProps) {\n const { frames, structureRev, timeZone, propsToDiff } = this.props;\n\n const propsChanged = !sameProps(prevProps, this.props, propsToDiff);\n\n if (frames !== prevProps.frames || propsChanged || timeZone !== prevProps.timeZone) {\n let newState = this.prepState(this.props, false);\n\n if (newState) {\n const shouldReconfig =\n this.state.config === undefined ||\n timeZone !== prevProps.timeZone ||\n structureRev !== prevProps.structureRev ||\n !structureRev ||\n propsChanged;\n\n if (shouldReconfig) {\n newState.config = this.props.prepConfig(newState.alignedFrame, this.props.frames, this.getTimeRange);\n pluginLog('GraphNG', false, 'config recreated', newState.config);\n }\n\n newState.alignedData = newState.config!.prepData!([newState.alignedFrame]) as AlignedData;\n\n this.setState(newState);\n }\n }\n }\n\n componentWillUnmount() {\n this.subscription.unsubscribe();\n }\n\n render() {\n const { width, height, children, renderLegend } = this.props;\n const { config, alignedFrame, alignedData } = this.state;\n\n if (!config) {\n return null;\n }\n\n return (\n <VizLayout width={width} height={height} legend={renderLegend(config)}>\n {(vizWidth: number, vizHeight: number) => (\n <UPlotChart\n config={config}\n data={alignedData!}\n width={vizWidth}\n height={vizHeight}\n plotRef={(u) => ((this.plotInstance as React.MutableRefObject<uPlot>).current = u)}\n >\n {children ? children(config, alignedFrame) : null}\n </UPlotChart>\n )}\n </VizLayout>\n );\n }\n}\n","import { isNumber } from 'lodash';\nimport uPlot from 'uplot';\n\nimport {\n DashboardCursorSync,\n DataFrame,\n FieldConfig,\n FieldType,\n formattedValueToString,\n getFieldColorModeForField,\n getFieldSeriesColor,\n getFieldDisplayName,\n getDisplayProcessor,\n FieldColorModeId,\n DecimalCount,\n} from '@grafana/data';\nimport {\n AxisPlacement,\n GraphDrawStyle,\n GraphFieldConfig,\n GraphThresholdsStyleMode,\n VisibilityMode,\n ScaleDirection,\n ScaleOrientation,\n StackingMode,\n GraphTransform,\n AxisColorMode,\n GraphGradientMode,\n} from '@grafana/schema';\n\n// unit lookup needed to determine if we want power-of-2 or power-of-10 axis ticks\n// see categories.ts is @grafana/data\nconst IEC_UNITS = new Set([\n 'bytes',\n 'bits',\n 'kbytes',\n 'mbytes',\n 'gbytes',\n 'tbytes',\n 'pbytes',\n 'binBps',\n 'binbps',\n 'KiBs',\n 'Kibits',\n 'MiBs',\n 'Mibits',\n 'GiBs',\n 'Gibits',\n 'TiBs',\n 'Tibits',\n 'PiBs',\n 'Pibits',\n]);\n\nconst BIN_INCRS = Array(53);\n\nfor (let i = 0; i < BIN_INCRS.length; i++) {\n BIN_INCRS[i] = 2 ** i;\n}\n\nimport { UPlotConfigBuilder, UPlotConfigPrepFn } from '../../components/uPlot/config/UPlotConfigBuilder';\nimport { getScaleGradientFn } from '../../components/uPlot/config/gradientFills';\nimport { getStackingGroups, preparePlotData2 } from '../../components/uPlot/utils';\nimport { buildScaleKey } from '../GraphNG/utils';\n\nconst defaultFormatter = (v: any, decimals: DecimalCount = 1) => (v == null ? '-' : v.toFixed(decimals));\n\nconst defaultConfig: GraphFieldConfig = {\n drawStyle: GraphDrawStyle.Line,\n showPoints: VisibilityMode.Auto,\n axisPlacement: AxisPlacement.Auto,\n};\n\nexport const preparePlotConfigBuilder: UPlotConfigPrepFn<{\n sync?: () => DashboardCursorSync;\n}> = ({\n frame,\n theme,\n timeZones,\n getTimeRange,\n sync,\n allFrames,\n renderers,\n tweakScale = (opts) => opts,\n tweakAxis = (opts) => opts,\n}) => {\n const eventsScope = '__global_';\n\n const builder = new UPlotConfigBuilder(timeZones[0]);\n\n let alignedFrame: DataFrame;\n\n builder.setPrepData((frames) => {\n // cache alignedFrame\n alignedFrame = frames[0];\n\n return preparePlotData2(frames[0], builder.getStackingGroups());\n });\n\n // X is the first field in the aligned frame\n const xField = frame.fields[0];\n if (!xField) {\n return builder; // empty frame with no options\n }\n\n const xScaleKey = 'x';\n let yScaleKey = '';\n\n const xFieldAxisPlacement =\n xField.config.custom?.axisPlacement !== AxisPlacement.Hidden ? AxisPlacement.Bottom : AxisPlacement.Hidden;\n const xFieldAxisShow = xField.config.custom?.axisPlacement !== AxisPlacement.Hidden;\n\n if (xField.type === FieldType.time) {\n builder.addScale({\n scaleKey: xScaleKey,\n orientation: ScaleOrientation.Horizontal,\n direction: ScaleDirection.Right,\n isTime: true,\n range: () => {\n const r = getTimeRange();\n return [r.from.valueOf(), r.to.valueOf()];\n },\n });\n\n // filters first 2 ticks to make space for timezone labels\n const filterTicks: uPlot.Axis.Filter | undefined =\n timeZones.length > 1\n ? (u, splits) => {\n return splits.map((v, i) => (i < 2 ? null : v));\n }\n : undefined;\n\n for (let i = 0; i < timeZones.length; i++) {\n const timeZone = timeZones[i];\n builder.addAxis({\n scaleKey: xScaleKey,\n isTime: true,\n placement: xFieldAxisPlacement,\n show: xFieldAxisShow,\n label: xField.config.custom?.axisLabel,\n timeZone,\n theme,\n grid: { show: i === 0 && xField.config.custom?.axisGridShow },\n filter: filterTicks,\n });\n }\n\n // render timezone labels\n if (timeZones.length > 1) {\n builder.addHook('drawAxes', (u: uPlot) => {\n u.ctx.save();\n\n u.ctx.fillStyle = theme.colors.text.primary;\n u.ctx.textAlign = 'left';\n u.ctx.textBaseline = 'bottom';\n\n let i = 0;\n u.axes.forEach((a) => {\n if (a.side === 2) {\n //@ts-ignore\n let cssBaseline: number = a._pos + a._size;\n u.ctx.fillText(timeZones[i], u.bbox.left, cssBaseline * uPlot.pxRatio);\n i++;\n }\n });\n\n u.ctx.restore();\n });\n }\n } else {\n builder.addScale({\n scaleKey: xScaleKey,\n orientation: ScaleOrientation.Horizontal,\n direction: ScaleDirection.Right,\n range: (u, dataMin, dataMax) => [xField.config.min ?? dataMin, xField.config.max ?? dataMax],\n });\n\n builder.addAxis({\n scaleKey: xScaleKey,\n placement: xFieldAxisPlacement,\n show: xFieldAxisShow,\n label: xField.config.custom?.axisLabel,\n theme,\n grid: { show: xField.config.custom?.axisGridShow },\n formatValue: (v, decimals) => formattedValueToString(xField.display!(v, decimals)),\n });\n }\n\n let customRenderedFields =\n renderers?.flatMap((r) => Object.values(r.fieldMap).filter((name) => r.indicesOnly.indexOf(name) === -1)) ?? [];\n\n let indexByName: Map<string, number> | undefined;\n\n for (let i = 1; i < frame.fields.length; i++) {\n const field = frame.fields[i];\n\n const config: FieldConfig<GraphFieldConfig> = {\n ...field.config,\n custom: {\n ...defaultConfig,\n ...field.config.custom,\n },\n };\n\n const customConfig: GraphFieldConfig = config.custom!;\n\n if (field === xField || (field.type !== FieldType.number && field.type !== FieldType.enum)) {\n continue;\n }\n\n let fmt = field.display ?? defaultFormatter;\n if (field.config.custom?.stacking?.mode === StackingMode.Percent) {\n fmt = getDisplayProcessor({\n field: {\n ...field,\n config: {\n ...field.config,\n unit: 'percentunit',\n },\n },\n theme,\n });\n }\n const scaleKey = buildScaleKey(config, field.type);\n const colorMode = getFieldColorModeForField(field);\n const scaleColor = getFieldSeriesColor(field, theme);\n const seriesColor = scaleColor.color;\n\n // The builder will manage unique scaleKeys and combine where appropriate\n builder.addScale(\n tweakScale(\n {\n scaleKey,\n orientation: ScaleOrientation.Vertical,\n direction: ScaleDirection.Up,\n distribution: customConfig.scaleDistribution?.type,\n log: customConfig.scaleDistribution?.log,\n linearThreshold: customConfig.scaleDistribution?.linearThreshold,\n min: field.config.min,\n max: field.config.max,\n softMin: customConfig.axisSoftMin,\n softMax: customConfig.axisSoftMax,\n centeredZero: customConfig.axisCenteredZero,\n range:\n customConfig.stacking?.mode === StackingMode.Percent\n ? (u: uPlot, dataMin: number, dataMax: number) => {\n dataMin = dataMin < 0 ? -1 : 0;\n dataMax = dataMax > 0 ? 1 : 0;\n return [dataMin, dataMax];\n }\n : field.type === FieldType.enum\n ? (u: uPlot, dataMin: number, dataMax: number) => {\n // this is the exhaustive enum (stable)\n let len = field.config.type!.enum!.text!.length;\n\n return [-1, len];\n\n // these are only values that are present\n // return [dataMin - 1, dataMax + 1]\n }\n : undefined,\n decimals: field.config.decimals,\n },\n field\n )\n );\n\n if (!yScaleKey) {\n yScaleKey = scaleKey;\n }\n\n if (customConfig.axisPlacement !== AxisPlacement.Hidden) {\n let axisColor: uPlot.Axis.Stroke | undefined;\n\n if (customConfig.axisColorMode === AxisColorMode.Series) {\n if (\n colorMode.isByValue &&\n field.config.custom?.gradientMode === GraphGradientMode.Scheme &&\n colorMode.id === FieldColorModeId.Thresholds\n ) {\n axisColor = getScaleGradientFn(1, theme, colorMode, field.config.thresholds);\n } else {\n axisColor = seriesColor;\n }\n }\n\n const axisDisplayOptions = {\n border: {\n show: customConfig.axisBorderShow || false,\n width: 1 / devicePixelRatio,\n stroke: axisColor || theme.colors.text.primary,\n },\n ticks: {\n show: customConfig.axisBorderShow || false,\n stroke: axisColor || theme.colors.text.primary,\n },\n color: axisColor || theme.colors.text.primary,\n };\n\n let incrs: uPlot.Axis.Incrs | undefined;\n\n // TODO: these will be dynamic with frame updates, so need to accept getYTickLabels()\n let values: uPlot.Axis.Values | undefined;\n let splits: uPlot.Axis.Splits | undefined;\n\n if (IEC_UNITS.has(config.unit!)) {\n incrs = BIN_INCRS;\n } else if (field.type === FieldType.enum) {\n let text = field.config.type!.enum!.text!;\n splits = text.map((v: string, i: number) => i);\n values = text;\n }\n\n builder.addAxis(\n tweakAxis(\n {\n scaleKey,\n label: customConfig.axisLabel,\n size: customConfig.axisWidth,\n placement: customConfig.axisPlacement ?? AxisPlacement.Auto,\n formatValue: (v, decimals) => formattedValueToString(fmt(v, decimals)),\n theme,\n grid: { show: customConfig.axisGridShow },\n decimals: field.config.decimals,\n distr: customConfig.scaleDistribution?.type,\n splits,\n values,\n incrs,\n ...axisDisplayOptions,\n },\n field\n )\n );\n }\n\n const showPoints =\n customConfig.drawStyle === GraphDrawStyle.Points ? VisibilityMode.Always : customConfig.showPoints;\n\n let pointsFilter: uPlot.Series.Points.Filter = () => null;\n\n if (customConfig.spanNulls !== true) {\n pointsFilter = (u, seriesIdx, show, gaps) => {\n let filtered = [];\n\n let series = u.series[seriesIdx];\n\n if (!show && gaps && gaps.length) {\n const [firstIdx, lastIdx] = series.idxs!;\n const xData = u.data[0];\n const yData = u.data[seriesIdx];\n const firstPos = Math.round(u.valToPos(xData[firstIdx], 'x', true));\n const lastPos = Math.round(u.valToPos(xData[lastIdx], 'x', true));\n\n if (gaps[0][0] === firstPos) {\n filtered.push(firstIdx);\n }\n\n // show single points between consecutive gaps that share end/start\n for (let i = 0; i < gaps.length; i++) {\n let thisGap = gaps[i];\n let nextGap = gaps[i + 1];\n\n if (nextGap && thisGap[1] === nextGap[0]) {\n // approx when data density is > 1pt/px, since gap start/end pixels are rounded\n let approxIdx = u.posToIdx(thisGap[1], true);\n\n if (yData[approxIdx] == null) {\n // scan left/right alternating to find closest index with non-null value\n for (let j = 1; j < 100; j++) {\n if (yData[approxIdx + j] != null) {\n approxIdx += j;\n break;\n }\n if (yData[approxIdx - j] != null) {\n approxIdx -= j;\n break;\n }\n }\n }\n\n filtered.push(approxIdx);\n }\n }\n\n if (gaps[gaps.length - 1][1] === lastPos) {\n filtered.push(lastIdx);\n }\n }\n\n return filtered.length ? filtered : null;\n };\n }\n\n let { fillOpacity } = customConfig;\n\n let pathBuilder: uPlot.Series.PathBuilder | null = null;\n let pointsBuilder: uPlot.Series.Points.Show | null = null;\n\n if (field.state?.origin) {\n if (!indexByName) {\n indexByName = getNamesToFieldIndex(frame, allFrames);\n }\n\n const originFrame = allFrames[field.state.origin.frameIndex];\n const originField = originFrame?.fields[field.state.origin.fieldIndex];\n\n const dispName = getFieldDisplayName(originField ?? field, originFrame, allFrames);\n\n // disable default renderers\n if (customRenderedFields.indexOf(dispName) >= 0) {\n pathBuilder = () => null;\n pointsBuilder = () => undefined;\n } else if (customConfig.transform === GraphTransform.Constant) {\n // patch some monkeys!\n const defaultBuilder = uPlot.paths!.linear!();\n\n pathBuilder = (u, seriesIdx) => {\n //eslint-disable-next-line\n const _data: any[] = (u as any)._data; // uplot.AlignedData not exposed in types\n\n // the data we want the line renderer to pull is x at each plot edge with paired flat y values\n\n const r = getTimeRange();\n let xData = [r.from.valueOf(), r.to.valueOf()];\n let firstY = _data[seriesIdx].find((v: number | null | undefined) => v != null);\n let yData = [firstY, firstY];\n let fauxData = _data.slice();\n fauxData[0] = xData;\n fauxData[seriesIdx] = yData;\n\n //eslint-disable-next-line\n return defaultBuilder(\n {\n ...u,\n _data: fauxData,\n } as any,\n seriesIdx,\n 0,\n 1\n );\n };\n }\n\n if (customConfig.fillBelowTo) {\n const fillBelowToField = frame.fields.find(\n (f) =>\n customConfig.fillBelowTo === f.name ||\n customConfig.fillBelowTo === f.config?.displayNameFromDS ||\n customConfig.fillBelowTo === getFieldDisplayName(f, frame, allFrames)\n );\n\n const fillBelowDispName = fillBelowToField\n ? getFieldDisplayName(fillBelowToField, frame, allFrames)\n : customConfig.fillBelowTo;\n\n const t = indexByName.get(dispName);\n const b = indexByName.get(fillBelowDispName);\n if (isNumber(b) && isNumber(t)) {\n builder.addBand({\n series: [t, b],\n fill: undefined, // using null will have the band use fill options from `t`\n });\n\n if (!fillOpacity) {\n fillOpacity = 35; // default from flot\n }\n } else {\n fillOpacity = 0;\n }\n }\n }\n\n let dynamicSeriesColor: ((seriesIdx: number) => string | undefined) | undefined = undefined;\n\n if (colorMode.id === FieldColorModeId.Thresholds) {\n dynamicSeriesColor = (seriesIdx) => getFieldSeriesColor(alignedFrame.fields[seriesIdx], theme).color;\n }\n\n builder.addSeries({\n pathBuilder,\n pointsBuilder,\n scaleKey,\n showPoints,\n pointsFilter,\n colorMode,\n fillOpacity,\n theme,\n dynamicSeriesColor,\n drawStyle: customConfig.drawStyle!,\n lineColor: customConfig.lineColor ?? seriesColor,\n lineWidth: customConfig.lineWidth,\n lineInterpolation: customConfig.lineInterpolation,\n lineStyle: customConfig.lineStyle,\n barAlignment: customConfig.barAlignment,\n barWidthFactor: customConfig.barWidthFactor,\n barMaxWidth: customConfig.barMaxWidth,\n pointSize: customConfig.pointSize,\n spanNulls: customConfig.spanNulls || false,\n show: !customConfig.hideFrom?.viz,\n gradientMode: customConfig.gradientMode,\n thresholds: config.thresholds,\n hardMin: field.config.min,\n hardMax: field.config.max,\n softMin: customConfig.axisSoftMin,\n softMax: customConfig.axisSoftMax,\n // The following properties are not used in the uPlot config, but are utilized as transport for legend config\n dataFrameFieldIndex: field.state?.origin,\n });\n\n // Render thresholds in graph\n if (customConfig.thresholdsStyle && config.thresholds) {\n const thresholdDisplay = customConfig.thresholdsStyle.mode ?? GraphThresholdsStyleMode.Off;\n if (thresholdDisplay !== GraphThresholdsStyleMode.Off) {\n builder.addThresholds({\n config: customConfig.thresholdsStyle,\n thresholds: config.thresholds,\n scaleKey,\n theme,\n hardMin: field.config.min,\n hardMax: field.config.max,\n softMin: customConfig.axisSoftMin,\n softMax: customConfig.axisSoftMax,\n });\n }\n }\n }\n\n let stackingGroups = getStackingGroups(frame);\n\n builder.setStackingGroups(stackingGroups);\n\n // hook up custom/composite renderers\n renderers?.forEach((r) => {\n if (!indexByName) {\n indexByName = getNamesToFieldIndex(frame, allFrames);\n }\n let fieldIndices: Record<string, number> = {};\n\n for (let key in r.fieldMap) {\n let dispName = r.fieldMap[key];\n fieldIndices[key] = indexByName.get(dispName)!;\n }\n\n r.init(builder, fieldIndices);\n });\n\n builder.scaleKeys = [xScaleKey, yScaleKey];\n\n // if hovered value is null, how far we may scan left/right to hover nearest non-null\n const hoverProximityPx = 15;\n\n let cursor: Partial<uPlot.Cursor> = {\n // this scans left and right from cursor position to find nearest data index with value != null\n // TODO: do we want to only scan past undefined values, but halt at explicit null values?\n dataIdx: (self, seriesIdx, hoveredIdx, cursorXVal) => {\n let seriesData = self.data[seriesIdx];\n\n if (seriesData[hoveredIdx] == null) {\n let nonNullLft = null,\n nonNullRgt = null,\n i;\n\n i = hoveredIdx;\n while (nonNullLft == null && i-- > 0) {\n if (seriesData[i] != null) {\n nonNullLft = i;\n }\n }\n\n i = hoveredIdx;\n while (nonNullRgt == null && i++ < seriesData.length) {\n if (seriesData[i] != null) {\n nonNullRgt = i;\n }\n }\n\n let xVals = self.data[0];\n\n let curPos = self.valToPos(cursorXVal, 'x');\n let rgtPos = nonNullRgt == null ? Infinity : self.valToPos(xVals[nonNullRgt], 'x');\n let lftPos = nonNullLft == null ? -Infinity : self.valToPos(xVals[nonNullLft], 'x');\n\n let lftDelta = curPos - lftPos;\n let rgtDelta = rgtPos - curPos;\n\n if (lftDelta <= rgtDelta) {\n if (lftDelta <= hoverProximityPx) {\n hoveredIdx = nonNullLft!;\n }\n } else {\n if (rgtDelta <= hoverProximityPx) {\n hoveredIdx = nonNullRgt!;\n }\n }\n }\n\n return hoveredIdx;\n },\n };\n\n if (sync && sync() !== DashboardCursorSync.Off) {\n cursor.sync = {\n key: eventsScope,\n scales: [xScaleKey, null],\n };\n }\n\n builder.setCursor(cursor);\n\n return builder;\n};\n\nexport function getNamesToFieldIndex(frame: DataFrame, allFrames: DataFrame[]): Map<string, number> {\n const originNames = new Map<string, number>();\n frame.fields.forEach((field, i) => {\n const origin = field.state?.origin;\n if (origin) {\n const origField = allFrames[origin.frameIndex]?.fields[origin.fieldIndex];\n if (origField) {\n originNames.set(getFieldDisplayName(origField, allFrames[origin.frameIndex], allFrames), i);\n }\n }\n });\n return originNames;\n}\n","import { Component } from 'react';\nimport * as React from 'react';\n\nimport { DataFrame, TimeRange } from '@grafana/data';\n\nimport { PanelContextRoot } from '../../components/PanelChrome/PanelContext';\nimport { hasVisibleLegendSeries, PlotLegend } from '../../components/uPlot/PlotLegend';\nimport { UPlotConfigBuilder } from '../../components/uPlot/config/UPlotConfigBuilder';\nimport { withTheme2 } from '../../themes/ThemeContext';\nimport { GraphNG, GraphNGProps, PropDiffFn } from '../GraphNG/GraphNG';\n\nimport { preparePlotConfigBuilder } from './utils';\n\nconst propsToDiff: Array<string | PropDiffFn> = ['legend', 'options', 'theme'];\n\ntype TimeSeriesProps = Omit<GraphNGProps, 'prepConfig' | 'propsToDiff' | 'renderLegend'>;\n\nexport class UnthemedTimeSeries extends Component<TimeSeriesProps> {\n static contextType = PanelContextRoot;\n declare context: React.ContextType<typeof PanelContextRoot>;\n\n prepConfig = (alignedFrame: DataFrame, allFrames: DataFrame[], getTimeRange: () => TimeRange) => {\n const { sync } = this.context;\n const { theme, timeZone, renderers, tweakAxis, tweakScale } = this.props;\n\n return preparePlotConfigBuilder({\n frame: alignedFrame,\n theme,\n timeZones: Array.isArray(timeZone) ? timeZone : [timeZone],\n getTimeRange,\n sync,\n allFrames,\n renderers,\n tweakScale,\n tweakAxis,\n });\n };\n\n renderLegend = (config: UPlotConfigBuilder) => {\n const { legend, frames } = this.props;\n\n if (!config || (legend && !legend.showLegend) || !hasVisibleLegendSeries(config, frames)) {\n return null;\n }\n\n return <PlotLegend data={frames} config={config} {...legend} />;\n };\n\n render() {\n return (\n <GraphNG\n {...this.props}\n prepConfig={this.prepConfig}\n propsToDiff={propsToDiff}\n renderLegend={this.renderLegend}\n />\n );\n }\n}\n\nexport const TimeSeries = withTheme2(UnthemedTimeSeries);\nTimeSeries.displayName = 'TimeSeries';\n","import { createContext, useCallback, useContext } from 'react';\n\nimport { DataFrame, DataFrameFieldIndex, Field } from '@grafana/data';\n\nimport { XYFieldMatchers } from './types';\n\n/** @deprecated */\ninterface GraphNGContextType {\n mapSeriesIndexToDataFrameFieldIndex: (index: number) => DataFrameFieldIndex;\n dimFields: XYFieldMatchers;\n data: DataFrame;\n}\n\n/** @deprecated */\nexport const GraphNGContext = createContext<GraphNGContextType>({} as GraphNGContextType);\n\n/** @deprecated */\nexport const useGraphNGContext = () => {\n const { data, dimFields, mapSeriesIndexToDataFrameFieldIndex } = useContext<GraphNGContextType>(GraphNGContext);\n\n const getXAxisField = useCallback(() => {\n const xFieldMatcher = dimFields.x;\n let xField: Field | null = null;\n\n for (let j = 0; j < data.fields.length; j++) {\n if (xFieldMatcher(data.fields[j], data, [data])) {\n xField = data.fields[j];\n break;\n }\n }\n\n return xField;\n }, [data, dimFields]);\n\n return {\n dimFields,\n mapSeriesIndexToDataFrameFieldIndex,\n getXAxisField,\n alignedData: data,\n };\n};\n","import { useLayoutEffect } from 'react';\n\nimport { UPlotConfigBuilder } from '../../../components/uPlot/config/UPlotConfigBuilder';\n\ninterface ZoomPluginProps {\n onZoom: (range: { from: number; to: number }) => void;\n withZoomY?: boolean;\n config: UPlotConfigBuilder;\n}\n\n// min px width that triggers zoom\nconst MIN_ZOOM_DIST = 5;\n\nconst maybeZoomAction = (e?: MouseEvent | null) => e != null && !e.ctrlKey && !e.metaKey;\n\n/**\n * @alpha\n */\nexport const ZoomPlugin = ({ onZoom, config, withZoomY = false }: ZoomPluginProps) => {\n useLayoutEffect(() => {\n let yZoomed = false;\n let yDrag = false;\n\n if (withZoomY) {\n config.addHook('init', (u) => {\n u.over!.addEventListener(\n 'mousedown',\n (e) => {\n if (!maybeZoomAction(e)) {\n return;\n }\n\n if (e.button === 0 && e.shiftKey) {\n yDrag = true;\n\n u.cursor!.drag!.x = false;\n u.cursor!.drag!.y = true;\n\n let onUp = (e: MouseEvent) => {\n u.cursor!.drag!.x = true;\n u.cursor!.drag!.y = false;\n document.removeEventListener('mouseup', onUp, true);\n };\n\n document.addEventListener('mouseup', onUp, true);\n }\n },\n true\n );\n });\n }\n\n config.addHook('setSelect', (u) => {\n const isXAxisHorizontal = u.scales.x.ori === 0;\n if (maybeZoomAction(u.cursor!.event)) {\n if (withZoomY && yDrag) {\n if (u.select.height >= MIN_ZOOM_DIST) {\n for (let key in u.scales!) {\n if (key !== 'x') {\n const maxY = isXAxisHorizontal\n ? u.posToVal(u.select.top, key)\n : u.posToVal(u.select.left + u.select.width, key);\n const minY = isXAxisHorizontal\n ? u.posToVal(u.select.top + u.select.height, key)\n : u.posToVal(u.select.left, key);\n u.setScale(key, { min: minY, max: maxY });\n }\n }\n\n yZoomed = true;\n }\n\n yDrag = false;\n } else {\n if (u.select.width >= MIN_ZOOM_DIST) {\n const minX = isXAxisHorizontal\n ? u.posToVal(u.select.left, 'x')\n : u.posToVal(u.select.top + u.select.height, 'x');\n const maxX = isXAxisHorizontal\n ? u.posToVal(u.select.left + u.select.width, 'x')\n : u.posToVal(u.select.top, 'x');\n\n onZoom({ from: minX, to: maxX });\n\n yZoomed = false;\n }\n }\n }\n\n // manually hide selected region (since cursor.drag.setScale = false)\n u.setSelect({ left: 0, width: 0, top: 0, height: 0 }, false);\n });\n\n config.setCursor({\n bind: {\n dblclick: (u) => () => {\n if (!maybeZoomAction(u.cursor!.event)) {\n return null;\n }\n\n if (withZoomY && yZoomed) {\n for (let key in u.scales!) {\n if (key !== 'x') {\n // @ts-ignore (this is not typed correctly in uPlot, assigning nulls means auto-scale / reset)\n u.setScale(key, { min: null, max: null });\n }\n }\n\n yZoomed = false;\n } else {\n let xScale = u.scales.x;\n\n const frTs = xScale.min!;\n const toTs = xScale.max!;\n const pad = (toTs - frTs) / 2;\n\n onZoom({ from: frTs - pad, to: toTs + pad });\n }\n\n return null;\n },\n },\n });\n }, [config, onZoom, withZoomY]);\n\n return null;\n};\n","import { css } from '@emotion/css';\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { useMountedState } from 'react-use';\nimport uPlot from 'uplot';\n\nimport {\n arrayUtils,\n CartesianCoords2D,\n DashboardCursorSync,\n DataFrame,\n FALLBACK_COLOR,\n FieldType,\n formattedValueToString,\n getDisplayProcessor,\n getFieldDisplayName,\n GrafanaTheme2,\n TimeZone,\n} from '@grafana/data';\nimport { TooltipDisplayMode, SortOrder } from '@grafana/schema';\n\nimport { Portal } from '../../../components/Portal/Portal';\nimport { SeriesTable, SeriesTableRowProps } from '../../../components/VizTooltip/SeriesTable';\nimport { UPlotConfigBuilder } from '../../../components/uPlot/config/UPlotConfigBuilder';\nimport { VizTooltipContainer } from '../../../components/VizTooltip/VizTooltipContainer';\nimport { findMidPointYPosition } from '../../../components/uPlot/utils';\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\n\ninterface TooltipPluginProps {\n timeZone: TimeZone;\n data: DataFrame;\n frames?: DataFrame[];\n config: UPlotConfigBuilder;\n mode?: TooltipDisplayMode;\n sortOrder?: SortOrder;\n sync?: () => DashboardCursorSync;\n // Allows custom tooltip content rendering. Exposes aligned data frame with relevant indexes for data inspection\n // Use field.state.origin indexes from alignedData frame field to get access to original data frame and field index.\n renderTooltip?: (alignedFrame: DataFrame, seriesIdx: number | null, datapointIdx: number | null) => React.ReactNode;\n}\n\nconst TOOLTIP_OFFSET = 10;\n\n/**\n * @alpha\n */\nexport const TooltipPlugin = ({\n mode = TooltipDisplayMode.Single,\n sortOrder = SortOrder.None,\n sync,\n timeZone,\n config,\n renderTooltip,\n ...otherProps\n}: TooltipPluginProps) => {\n const plotInstance = useRef<uPlot>();\n const theme = useTheme2();\n const [focusedSeriesIdx, setFocusedSeriesIdx] = useState<number | null>(null);\n const [focusedPointIdx, setFocusedPointIdx] = useState<number | null>(null);\n const [focusedPointIdxs, setFocusedPointIdxs] = useState<Array<number | null>>([]);\n const [coords, setCoords] = useState<CartesianCoords2D | null>(null);\n const [isActive, setIsActive] = useState<boolean>(false);\n const isMounted = useMountedState();\n let parentWithFocus: HTMLElement | null = null;\n\n const style = useStyles2(getStyles);\n\n // Add uPlot hooks to the config, or re-add when the config changed\n useLayoutEffect(() => {\n let bbox: DOMRect | undefined = undefined;\n\n const plotEnter = () => {\n if (!isMounted()) {\n return;\n }\n setIsActive(true);\n plotInstance.current?.root.classList.add('plot-active');\n };\n\n const plotLeave = () => {\n if (!isMounted()) {\n return;\n }\n setCoords(null);\n setIsActive(false);\n plotInstance.current?.root.classList.remove('plot-active');\n };\n\n // cache uPlot plotting area bounding box\n config.addHook('syncRect', (u, rect) => (bbox = rect));\n\n config.addHook('init', (u) => {\n plotInstance.current = u;\n\n u.over.addEventListener('mouseenter', plotEnter);\n u.over.addEventListener('mouseleave', plotLeave);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n parentWithFocus = u.root.closest('[tabindex]');\n\n if (parentWithFocus) {\n parentWithFocus.addEventListener('focus', plotEnter);\n parentWithFocus.addEventListener('blur', plotLeave);\n }\n\n if (sync && sync() === DashboardCursorSync.Crosshair) {\n u.root.classList.add('shared-crosshair');\n }\n });\n\n config.addHook('setLegend', (u) => {\n if (!isMounted()) {\n return;\n }\n setFocusedPointIdx(u.legend.idx!);\n setFocusedPointIdxs(u.legend.idxs!.slice());\n });\n\n // default series/datapoint idx retireval\n config.addHook('setCursor', (u) => {\n if (!bbox || !isMounted()) {\n return;\n }\n\n const { x, y } = positionTooltip(u, bbox);\n if (x !== undefined && y !== undefined) {\n setCoords({ x, y });\n } else {\n setCoords(null);\n }\n });\n\n config.addHook('setSeries', (_, idx) => {\n if (!isMounted()) {\n return;\n }\n setFocusedSeriesIdx(idx);\n });\n\n return () => {\n setCoords(null);\n\n if (plotInstance.current) {\n plotInstance.current.over.removeEventListener('mouseleave', plotLeave);\n plotInstance.current.over.removeEventListener('mouseenter', plotEnter);\n\n if (parentWithFocus) {\n parentWithFocus.removeEventListener('focus', plotEnter);\n parentWithFocus.removeEventListener('blur', plotLeave);\n }\n }\n };\n }, [config, setCoords, setIsActive, setFocusedPointIdx, setFocusedPointIdxs]);\n\n if (focusedPointIdx === null || (!isActive && sync && sync() === DashboardCursorSync.Crosshair)) {\n return null;\n }\n\n // GraphNG expects aligned data, let's take field 0 as x field. FTW\n let xField = otherProps.data.fields[0];\n if (!xField) {\n return null;\n }\n const xFieldFmt = xField.display || getDisplayProcessor({ field: xField, timeZone, theme });\n let tooltip: React.ReactNode = null;\n\n let xVal = xFieldFmt(xField!.values[focusedPointIdx]).text;\n\n if (!renderTooltip) {\n // when interacting with a point in single mode\n if (mode === TooltipDisplayMode.Single && focusedSeriesIdx !== null) {\n const field = otherProps.data.fields[focusedSeriesIdx];\n\n if (!field) {\n return null;\n }\n\n const dataIdx = focusedPointIdxs?.[focusedSeriesIdx] ?? focusedPointIdx;\n xVal = xFieldFmt(xField!.values[dataIdx]).text;\n const fieldFmt = field.display || getDisplayProcessor({ field, timeZone, theme });\n const display = fieldFmt(field.values[dataIdx]);\n\n tooltip = (\n <SeriesTable\n series={[\n {\n color: display.color || FALLBACK_COLOR,\n label: getFieldDisplayName(field, otherProps.data, otherProps.frames),\n value: display ? formattedValueToString(display) : null,\n },\n ]}\n timestamp={xVal}\n />\n );\n }\n\n if (mode === TooltipDisplayMode.Multi) {\n let series: SeriesTableRowProps[] = [];\n const frame = otherProps.data;\n const fields = frame.fields;\n const sortIdx: unknown[] = [];\n\n for (let i = 0; i < fields.length; i++) {\n const field = frame.fields[i];\n if (\n !field ||\n field === xField ||\n field.type === FieldType.time ||\n field.type !== FieldType.number ||\n field.config.custom?.hideFrom?.tooltip ||\n field.config.custom?.hideFrom?.viz\n ) {\n continue;\n }\n\n const v = otherProps.data.fields[i].values[focusedPointIdxs[i]!];\n const display = field.display!(v);\n\n sortIdx.push(v);\n series.push({\n color: display.color || FALLBACK_COLOR,\n label: getFieldDisplayName(field, frame, otherProps.frames),\n value: display ? formattedValueToString(display) : null,\n isActive: focusedSeriesIdx === i,\n });\n }\n\n if (sortOrder !== SortOrder.None) {\n // create sort reference series array, as Array.sort() mutates the original array\n const sortRef = [...series];\n const sortFn = arrayUtils.sortValues(sortOrder);\n\n series.sort((a, b) => {\n // get compared values indices to retrieve raw values from sortIdx\n const aIdx = sortRef.indexOf(a);\n const bIdx = sortRef.indexOf(b);\n return sortFn(sortIdx[aIdx], sortIdx[bIdx]);\n });\n }\n\n tooltip = <SeriesTable series={series} timestamp={xVal} />;\n }\n } else {\n tooltip = renderTooltip(otherProps.data, focusedSeriesIdx, focusedPointIdx);\n }\n\n return (\n <Portal className={isActive ? style.tooltipWrapper : undefined}>\n {tooltip && coords && (\n <VizTooltipContainer position={{ x: coords.x, y: coords.y }} offset={{ x: TOOLTIP_OFFSET, y: TOOLTIP_OFFSET }}>\n {tooltip}\n </VizTooltipContainer>\n )}\n </Portal>\n );\n};\n\nfunction isCursorOutsideCanvas({ left, top }: uPlot.Cursor, canvas: DOMRect) {\n if (left === undefined || top === undefined) {\n return false;\n }\n return left < 0 || left > canvas.width || top < 0 || top > canvas.height;\n}\n\n/**\n * Given uPlot cursor position, figure out position of the tooltip withing the canvas bbox\n * Tooltip is positioned relatively to a viewport\n * @internal\n **/\nexport function positionTooltip(u: uPlot, bbox: DOMRect) {\n let x, y;\n const cL = u.cursor.left || 0;\n const cT = u.cursor.top || 0;\n\n if (isCursorOutsideCanvas(u.cursor, bbox)) {\n const idx = u.posToIdx(cL);\n // when cursor outside of uPlot's canvas\n if (cT < 0 || cT > bbox.height) {\n let pos = findMidPointYPosition(u, idx);\n\n if (pos) {\n y = bbox.top + pos;\n if (cL >= 0 && cL <= bbox.width) {\n // find x-scale position for a current cursor left position\n x = bbox.left + u.valToPos(u.data[0][u.posToIdx(cL)], u.series[0].scale!);\n }\n }\n }\n } else {\n x = bbox.left + cL;\n y = bbox.top + cT;\n }\n\n return { x, y };\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n tooltipWrapper: css({\n 'z-index': theme.zIndex.portal + 1 + ' !important',\n }),\n});\n","// Slightly modified, but without dependancies:\n// https://raw.githubusercontent.com/malte-wessel/react-custom-scrollbars/master/src/utils/getScrollbarWidth.js\nlet scrollbarWidth: number | null = null;\n\nexport function getScrollbarWidth() {\n if (scrollbarWidth !== null) {\n return scrollbarWidth;\n }\n\n if (typeof document !== 'undefined') {\n const div = document.createElement('div');\n const newStyles = {\n width: '100px',\n height: '100px',\n position: 'absolute',\n top: '-9999px',\n overflow: 'scroll',\n MsOverflowStyle: 'scrollbar',\n };\n\n Object.keys(newStyles).map((style) => {\n // @ts-ignore\n div.style[style] = newStyles[style];\n });\n\n document.body.appendChild(div);\n scrollbarWidth = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n } else {\n scrollbarWidth = 0;\n }\n\n return scrollbarWidth || 0;\n}\n","/**\n * @deprecated use it from @grafana/data. Kept here for backward compatibility.\n */\nexport enum NodeGraphDataFrameFieldNames {\n id = 'id',\n title = 'title',\n subTitle = 'subTitle',\n mainStat = 'mainStat',\n secondaryStat = 'secondaryStat',\n source = 'source',\n target = 'target',\n detail = 'detail__',\n arc = 'arc__',\n color = 'color',\n}\n","/**\n * This function logs a warning if the amount of items exceeds the recommended amount.\n *\n * @param amount\n * @param id\n * @param ariaLabelledBy\n */\nexport function logOptions(\n amount: number,\n recommendedAmount: number,\n id: string | undefined,\n ariaLabelledBy: string | undefined\n): void {\n if (amount > recommendedAmount) {\n const msg = `[Combobox] Items exceed the recommended amount ${recommendedAmount}.`;\n console.warn(msg, {\n itemsCount: '' + amount,\n recommendedAmount: '' + recommendedAmount,\n 'aria-labelledby': ariaLabelledBy ?? '',\n id: id ?? '',\n });\n }\n}\n","import { createTheme, GrafanaTheme } from '@grafana/data';\n\nlet themeMock: ((name?: string) => GrafanaTheme) | null;\n\n/** @public */\nexport const getTheme = (mode: 'dark' | 'light' = 'dark') => {\n if (themeMock) {\n return themeMock(mode);\n }\n\n return createTheme({ colors: { mode } }).v1;\n};\n\n/** @public */\nexport const mockTheme = (mock: (name?: string) => GrafanaTheme) => {\n themeMock = mock;\n return () => {\n themeMock = null;\n };\n};\n","import { Annotation } from 'slate';\nimport { Plugin } from 'slate-react';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst BRACES: Record<string, string> = {\n '[': ']',\n '{': '}',\n '(': ')',\n};\n\nconst MATCH_MARK = 'brace_match';\n\nexport function BracesPlugin(): Plugin {\n return {\n onKeyDown(event, editor, next) {\n const { value } = editor;\n\n switch (event.key) {\n case '(':\n case '{':\n case '[': {\n const {\n start: { offset: startOffset, key: startKey },\n end: { offset: endOffset, key: endKey },\n focus: { offset: focusOffset },\n } = value.selection;\n const text = value.focusText.text;\n\n // If text is selected, wrap selected text in parens\n if (value.selection.isExpanded) {\n event.preventDefault();\n editor\n .insertTextByKey(startKey, startOffset, event.key)\n .insertTextByKey(endKey, endOffset + 1, BRACES[event.key])\n .moveEndBackward(1);\n return true;\n } else if (\n // Insert matching brace when there is no input after caret\n focusOffset === text.length ||\n text[focusOffset] === ' ' ||\n Object.values(BRACES).includes(text[focusOffset])\n ) {\n event.preventDefault();\n const complement = BRACES[event.key];\n const matchAnnotation = {\n key: `${MATCH_MARK}-${uuidv4()}`,\n type: `${MATCH_MARK}-${complement}`,\n anchor: {\n key: startKey,\n offset: startOffset,\n object: 'point',\n },\n focus: {\n key: endKey,\n offset: endOffset + 1,\n object: 'point',\n },\n object: 'annotation',\n } as Annotation;\n editor.insertText(event.key).insertText(complement).addAnnotation(matchAnnotation).moveBackward(1);\n\n return true;\n }\n break;\n }\n\n case ')':\n case '}':\n case ']': {\n const text = value.anchorText.text;\n const offset = value.selection.anchor.offset;\n const nextChar = text[offset];\n // Handle closing brace when it's already the next character\n const complement = event.key;\n const annotationType = `${MATCH_MARK}-${complement}`;\n const annotation = value.annotations.find(\n (a) => a?.type === annotationType && a.anchor.key === value.anchorText.key\n );\n if (annotation && nextChar === complement && !value.selection.isExpanded) {\n event.preventDefault();\n editor.moveFocusForward(1).removeAnnotation(annotation).moveAnchorForward(1);\n return true;\n }\n break;\n }\n\n case 'Backspace': {\n const text = value.anchorText.text;\n const offset = value.selection.anchor.offset;\n const previousChar = text[offset - 1];\n const nextChar = text[offset];\n if (BRACES[previousChar] && BRACES[previousChar] === nextChar) {\n event.preventDefault();\n // Remove closing brace if directly following\n editor.deleteBackward(1).deleteForward(1).focus();\n return true;\n }\n }\n\n default: {\n break;\n }\n }\n\n return next();\n },\n };\n}\n","/**\n * A library containing the different design components of the Grafana ecosystem.\n *\n * @packageDocumentation\n */\n\nimport { FormField } from './components/FormField/FormField';\nimport { Input, LegacyInputStatus } from './components/Forms/Legacy/Input/Input';\nimport { IndicatorsContainer } from './components/Forms/Legacy/Select/IndicatorsContainer';\nimport { NoOptionsMessage } from './components/Forms/Legacy/Select/NoOptionsMessage';\nimport { AsyncSelect, Select } from './components/Forms/Legacy/Select/Select';\nimport { Switch } from './components/Forms/Legacy/Switch/Switch';\nimport { SecretFormField } from './components/SecretFormField/SecretFormField';\nimport * as commonOptionsBuilder from './options/builder';\nimport * as styleMixins from './themes/mixins';\nimport * as DOMUtil from './utils/dom';\nimport * as floatingUtils from './utils/floating';\nimport * as ReactUtils from './utils/reactUtils';\n\nexport { Icon } from './components/Icon/Icon';\nexport { IconButton, type IconButtonVariant } from './components/IconButton/IconButton';\nexport { ConfirmButton } from './components/ConfirmButton/ConfirmButton';\nexport { DeleteButton } from './components/ConfirmButton/DeleteButton';\nexport { Tooltip } from './components/Tooltip/Tooltip';\nexport type { PopoverContent } from './components/Tooltip/types';\nexport { PopoverController } from './components/Tooltip/PopoverController';\nexport { Popover } from './components/Tooltip/Popover';\nexport { Toggletip } from './components/Toggletip/Toggletip';\nexport { Portal, getPortalContainer, PortalContainer } from './components/Portal/Portal';\nexport { CustomScrollbar, type ScrollbarPosition } from './components/CustomScrollbar/CustomScrollbar';\nexport { TabbedContainer, type TabConfig } from './components/TabbedContainer/TabbedContainer';\nexport { ClipboardButton } from './components/ClipboardButton/ClipboardButton';\nexport { Cascader, type CascaderOption } from './components/Cascader/Cascader';\nexport { Carousel } from './components/Carousel/Carousel';\nexport { ButtonCascader } from './components/ButtonCascader/ButtonCascader';\nexport { InlineToast } from './components/InlineToast/InlineToast';\nexport { LoadingPlaceholder, type LoadingPlaceholderProps } from './components/LoadingPlaceholder/LoadingPlaceholder';\nexport { LoadingBar, type LoadingBarProps } from './components/LoadingBar/LoadingBar';\nexport { ColorPicker, SeriesColorPicker } from './components/ColorPicker/ColorPicker';\nexport { ColorPickerInput } from './components/ColorPicker/ColorPickerInput';\nexport {\n SeriesColorPickerPopover,\n SeriesColorPickerPopoverWithTheme,\n} from './components/ColorPicker/SeriesColorPickerPopover';\nexport { EmptySearchResult } from './components/EmptySearchResult/EmptySearchResult';\nexport { EmptyState } from './components/EmptyState/EmptyState';\nexport { UnitPicker } from './components/UnitPicker/UnitPicker';\nexport { StatsPicker } from './components/StatsPicker/StatsPicker';\nexport { RefreshPicker, defaultIntervals } from './components/RefreshPicker/RefreshPicker';\nexport { TimeRangePicker, type TimeRangePickerProps } from './components/DateTimePickers/TimeRangePicker';\nexport { TimeRangeProvider } from './components/DateTimePickers/TimeRangeContext';\nexport { TimePickerTooltip } from './components/DateTimePickers/TimeRangePicker';\nexport { TimeRangeLabel } from './components/DateTimePickers/TimeRangePicker/TimeRangeLabel';\nexport { TimeOfDayPicker } from './components/DateTimePickers/TimeOfDayPicker';\nexport { TimeZonePicker } from './components/DateTimePickers/TimeZonePicker';\nexport {\n WeekStartPicker,\n getWeekStart,\n type WeekStart,\n isWeekStart,\n} from './components/DateTimePickers/WeekStartPicker';\nexport { DatePicker, type DatePickerProps } from './components/DateTimePickers/DatePicker/DatePicker';\nexport {\n DatePickerWithInput,\n type DatePickerWithInputProps,\n} from './components/DateTimePickers/DatePickerWithInput/DatePickerWithInput';\nexport { DateTimePicker } from './components/DateTimePickers/DateTimePicker/DateTimePicker';\nexport { List } from './components/List/List';\nexport {\n InteractiveTable,\n type FetchDataArgs,\n type FetchDataFunc,\n} from './components/InteractiveTable/InteractiveTable';\nexport { TagsInput } from './components/TagsInput/TagsInput';\nexport { AutoSaveField } from './components/AutoSaveField/AutoSaveField';\nexport { Pagination } from './components/Pagination/Pagination';\nexport { Tag, type OnTagClick } from './components/Tags/Tag';\nexport { TagList } from './components/Tags/TagList';\nexport { FilterPill } from './components/FilterPill/FilterPill';\n\nexport { ConfirmModal, type ConfirmModalProps } from './components/ConfirmModal/ConfirmModal';\nexport { QueryField, type QueryFieldProps } from './components/QueryField/QueryField';\nexport { CodeEditor } from './components/Monaco/CodeEditor';\nexport { ReactMonacoEditorLazy as ReactMonacoEditor } from './components/Monaco/ReactMonacoEditorLazy';\nexport {\n type Monaco,\n type monacoTypes,\n type MonacoEditor,\n type MonacoOptions as CodeEditorMonacoOptions,\n type CodeEditorSuggestionItem,\n CodeEditorSuggestionItemKind,\n} from './components/Monaco/types';\nexport { variableSuggestionToCodeEditorSuggestion } from './components/Monaco/utils';\n\n// TODO: namespace\nexport { Modal, type Props as ModalProps } from './components/Modal/Modal';\nexport { ModalHeader } from './components/Modal/ModalHeader';\nexport { ModalTabsHeader } from './components/Modal/ModalTabsHeader';\nexport { ModalTabContent } from './components/Modal/ModalTabContent';\nexport { ModalsProvider, ModalRoot, ModalsController, ModalsContext } from './components/Modal/ModalsContext';\nexport { PageToolbar } from './components/PageLayout/PageToolbar';\n\n// Renderless\nexport { SetInterval } from './components/SetInterval/SetInterval';\nexport { Table } from './components/Table/Table';\nexport { TableCellInspector, TableCellInspectorMode } from './components/Table/TableCellInspector';\nexport {\n type TableCustomCellOptions,\n type CustomCellRendererProps,\n type TableFieldOptions,\n type TableSortByFieldState,\n type TableFooterCalc,\n type AdHocFilterItem,\n type TableAutoCellOptions,\n type TableSparklineCellOptions,\n type TableBarGaugeCellOptions,\n type TableColoredBackgroundCellOptions,\n type TableColorTextCellOptions,\n type TableImageCellOptions,\n type TableJsonViewCellOptions,\n} from './components/Table/types';\n\nexport { TableInputCSV } from './components/TableInputCSV/TableInputCSV';\nexport { TabsBar } from './components/Tabs/TabsBar';\nexport { Tab, type TabProps } from './components/Tabs/Tab';\nexport { VerticalTab } from './components/Tabs/VerticalTab';\nexport { TabContent } from './components/Tabs/TabContent';\nexport { Counter } from './components/Tabs/Counter';\nexport { RenderUserContentAsHTML } from './components/RenderUserContentAsHTML/RenderUserContentAsHTML';\n\n// Visualizations\nexport {\n BigValue,\n BigValueColorMode,\n BigValueGraphMode,\n BigValueJustifyMode,\n BigValueTextMode,\n} from './components/BigValue/BigValue';\nexport { Sparkline } from './components/Sparkline/Sparkline';\n\nexport { Gauge } from './components/Gauge/Gauge';\nexport { BarGauge } from './components/BarGauge/BarGauge';\nexport {\n VizTooltip,\n VizTooltipContainer,\n SeriesTable,\n type SeriesTableProps,\n SeriesTableRow,\n type SeriesTableRowProps,\n} from './components/VizTooltip';\nexport { VizRepeater, type VizRepeaterRenderValueProps } from './components/VizRepeater/VizRepeater';\nexport {\n PanelChrome,\n type PanelChromeProps,\n type PanelPadding,\n type PanelChromeType,\n PanelChromeLoadingIndicator,\n type PanelChromeLoadingIndicatorProps,\n PanelContextProvider,\n type PanelContext,\n PanelContextRoot,\n usePanelContext,\n} from './components/PanelChrome';\nexport {\n VizLayout,\n type VizLayoutComponentType,\n type VizLayoutLegendProps,\n type VizLayoutProps,\n} from './components/VizLayout/VizLayout';\nexport { type VizLegendItem, SeriesVisibilityChangeBehavior } from './components/VizLegend/types';\nexport { VizLegend } from './components/VizLegend/VizLegend';\nexport { VizLegendListItem } from './components/VizLegend/VizLegendListItem';\n\nexport { Alert, type AlertVariant } from './components/Alert/Alert';\nexport { Collapse, ControlledCollapse } from './components/Collapse/Collapse';\nexport { CollapsableSection } from './components/Collapse/CollapsableSection';\nexport { DataLinkButton } from './components/DataLinks/DataLinkButton';\nexport { FieldLinkList } from './components/DataLinks/FieldLinkList';\n// Panel editors\nexport { FullWidthButtonContainer } from './components/Button/FullWidthButtonContainer';\nexport { ClickOutsideWrapper } from './components/ClickOutsideWrapper/ClickOutsideWrapper';\nexport {\n type SingleStatBaseOptions,\n sharedSingleStatMigrationHandler,\n convertOldAngularValueMapping,\n sharedSingleStatPanelChangedHandler,\n} from './components/SingleStatShared/SingleStatBaseOptions';\nexport { CallToActionCard } from './components/CallToActionCard/CallToActionCard';\nexport { ContextMenu, type ContextMenuProps } from './components/ContextMenu/ContextMenu';\nexport { Menu, type MenuProps } from './components/Menu/Menu';\nexport { MenuGroup, type MenuItemsGroup, type MenuGroupProps } from './components/Menu/MenuGroup';\nexport { MenuItem, type MenuItemProps } from './components/Menu/MenuItem';\nexport { WithContextMenu } from './components/ContextMenu/WithContextMenu';\nexport { DataLinksInlineEditor } from './components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditor';\nexport {\n DataLinksInlineEditorBase,\n type DataLinksInlineEditorBaseProps,\n} from './components/DataLinks/DataLinksInlineEditor/DataLinksInlineEditorBase';\nexport { DataLinkInput } from './components/DataLinks/DataLinkInput';\nexport {\n DataLinksContextMenu,\n type DataLinksContextMenuProps,\n type DataLinksContextMenuApi,\n} from './components/DataLinks/DataLinksContextMenu';\nexport { SeriesIcon } from './components/VizLegend/SeriesIcon';\nexport { InfoBox } from './components/InfoBox/InfoBox';\nexport { FeatureInfoBox } from './components/InfoBox/FeatureInfoBox';\nexport { FeatureBadge } from './components/FeatureBadge/FeatureBadge';\n\nexport { JSONFormatter } from './components/JSONFormatter/JSONFormatter';\nexport { JsonExplorer } from './components/JSONFormatter/json_explorer/json_explorer';\nexport {\n ErrorBoundary,\n ErrorBoundaryAlert,\n type ErrorBoundaryAlertProps,\n withErrorBoundary,\n} from './components/ErrorBoundary/ErrorBoundary';\nexport { ErrorWithStack } from './components/ErrorBoundary/ErrorWithStack';\nexport { DataSourceHttpSettings } from './components/DataSourceSettings/DataSourceHttpSettings';\nexport { CustomHeadersSettings } from './components/DataSourceSettings/CustomHeadersSettings';\nexport { AlertingSettings } from './components/DataSourceSettings/AlertingSettings';\nexport { SecureSocksProxySettings } from './components/DataSourceSettings/SecureSocksProxySettings';\nexport { TLSAuthSettings } from './components/DataSourceSettings/TLSAuthSettings';\nexport { CertificationKey } from './components/DataSourceSettings/CertificationKey';\nexport { Spinner } from './components/Spinner/Spinner';\nexport { FadeTransition } from './components/transitions/FadeTransition';\nexport { SlideOutTransition } from './components/transitions/SlideOutTransition';\nexport { Segment } from './components/Segment/Segment';\nexport { SegmentAsync } from './components/Segment/SegmentAsync';\nexport { SegmentInput } from './components/Segment/SegmentInput';\nexport { SegmentSelect } from './components/Segment/SegmentSelect';\nexport { SegmentSection } from './components/Segment/SegmentSection';\nexport { Drawer } from './components/Drawer/Drawer';\nexport { Slider } from './components/Slider/Slider';\nexport { RangeSlider } from './components/Slider/RangeSlider';\n\n// Next-gen forms\nexport { Form } from './components/Forms/Form';\nexport { sharedInputStyle } from './components/Forms/commonStyles';\nexport { InputControl } from './components/InputControl';\nexport {\n Button,\n LinkButton,\n type ButtonVariant,\n type ButtonProps,\n clearButtonStyles,\n} from './components/Button/Button';\nexport { ButtonGroup } from './components/Button/ButtonGroup';\nexport { ToolbarButton } from './components/ToolbarButton/ToolbarButton';\nexport { ToolbarButtonRow } from './components/ToolbarButton/ToolbarButtonRow';\nexport { ValuePicker } from './components/ValuePicker/ValuePicker';\nexport { fieldMatchersUI } from './components/MatchersUI/fieldMatchersUI';\nexport { Link } from './components/Link/Link';\nexport { TextLink } from './components/Link/TextLink';\nexport { Text } from './components/Text/Text';\nexport { Box } from './components/Layout/Box/Box';\nexport { Stack } from './components/Layout/Stack/Stack';\nexport { Grid } from './components/Layout/Grid/Grid';\nexport { Space } from './components/Layout/Space';\nexport { ScrollContainer } from './components/ScrollContainer/ScrollContainer';\n\nexport { Label } from './components/Forms/Label';\nexport { Field, type FieldProps } from './components/Forms/Field';\nexport { Legend } from './components/Forms/Legend';\nexport { FieldSet } from './components/Forms/FieldSet';\nexport { FieldValidationMessage } from './components/Forms/FieldValidationMessage';\nexport { InlineField } from './components/Forms/InlineField';\nexport { InlineSegmentGroup } from './components/Forms/InlineSegmentGroup';\nexport { InlineLabel } from './components/Forms/InlineLabel';\nexport { InlineFieldRow } from './components/Forms/InlineFieldRow';\nexport { FieldArray } from './components/Forms/FieldArray';\n\n// Select\n// Note - Select is nearly deprecated in favor of Combobox\nexport { default as resetSelectStyles } from './components/Select/resetSelectStyles';\nexport * from './components/Select/Select';\nexport { SelectMenuOptions } from './components/Select/SelectMenu';\nexport { getSelectStyles } from './components/Select/getSelectStyles';\nexport * from './components/Select/types';\n\nexport { Combobox } from './components/Combobox/Combobox';\nexport { MultiCombobox } from './components/Combobox/MultiCombobox';\nexport { type ComboboxOption } from './components/Combobox/types';\n\nexport { HorizontalGroup, VerticalGroup, Container } from './components/Layout/Layout';\nexport { Badge, type BadgeColor, type BadgeProps } from './components/Badge/Badge';\nexport { RadioButtonGroup } from './components/Forms/RadioButtonGroup/RadioButtonGroup';\nexport { RadioButtonDot } from './components/Forms/RadioButtonList/RadioButtonDot';\nexport { RadioButtonList } from './components/Forms/RadioButtonList/RadioButtonList';\n\nexport { Input, getInputStyles } from './components/Input/Input';\nexport { AutoSizeInput } from './components/Input/AutoSizeInput';\nexport { FilterInput } from './components/FilterInput/FilterInput';\nexport type { FormInputSize } from './components/Forms/types';\nexport * from './components/SecretInput';\nexport * from './components/SecretTextArea';\n\nexport { Switch, InlineSwitch } from './components/Switch/Switch';\nexport { Checkbox } from './components/Forms/Checkbox';\n\nexport { TextArea } from './components/TextArea/TextArea';\nexport { FileUpload } from './components/FileUpload/FileUpload';\nexport {\n FileDropzone,\n FileDropzoneDefaultChildren,\n type FileDropzoneProps,\n type DropzoneFile,\n} from './components/FileDropzone/FileDropzone';\nexport { FileListItem, type FileListItemProps } from './components/FileDropzone/FileListItem';\nexport { TimeRangeInput } from './components/DateTimePickers/TimeRangeInput';\nexport { RelativeTimeRangePicker } from './components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker';\nexport { Card, type Props as CardProps, getCardStyles } from './components/Card/Card';\nexport { CardContainer, type CardContainerProps } from './components/Card/CardContainer';\nexport { FormattedValueDisplay } from './components/FormattedValueDisplay/FormattedValueDisplay';\nexport { ButtonSelect } from './components/Dropdown/ButtonSelect';\nexport { Dropdown } from './components/Dropdown/Dropdown';\nexport {\n PluginSignatureBadge,\n type PluginSignatureBadgeProps,\n} from './components/PluginSignatureBadge/PluginSignatureBadge';\nexport { UserIcon, type UserIconProps } from './components/UsersIndicator/UserIcon';\nexport { UsersIndicator, type UsersIndicatorProps } from './components/UsersIndicator/UsersIndicator';\nexport { type UserView } from './components/UsersIndicator/types';\nexport { Avatar } from './components/UsersIndicator/Avatar';\n// Export this until we've figured out a good approach to inline form styles.\nexport { InlineFormLabel } from './components/FormLabel/FormLabel';\nexport { Divider } from './components/Divider/Divider';\nexport { getDragStyles, type DragHandlePosition } from './components/DragHandle/DragHandle';\nexport { useSplitter } from './components/Splitter/useSplitter';\n\n/** @deprecated Please use non-legacy versions of these components */\nconst LegacyForms = {\n SecretFormField,\n FormField,\n Select,\n AsyncSelect,\n IndicatorsContainer,\n NoOptionsMessage,\n Input,\n Switch,\n};\nexport { LegacyForms, LegacyInputStatus };\n\n// WIP, need renames and exports cleanup\nexport { graphFieldOptions, getGraphFieldOptions } from './components/uPlot/config';\nexport { UPlotConfigBuilder } from './components/uPlot/config/UPlotConfigBuilder';\nexport { UPLOT_AXIS_FONT_SIZE } from './components/uPlot/config/UPlotAxisBuilder';\nexport { UPlotChart } from './components/uPlot/Plot';\nexport { PlotLegend } from './components/uPlot/PlotLegend';\nexport { XYCanvas } from './components/uPlot/geometries/XYCanvas';\nexport { Marker } from './components/uPlot/geometries/Marker';\nexport { EventsCanvas } from './components/uPlot/geometries/EventsCanvas';\nexport { TooltipPlugin2 } from './components/uPlot/plugins/TooltipPlugin2';\nexport { EventBusPlugin } from './components/uPlot/plugins/EventBusPlugin';\nexport { KeyboardPlugin } from './components/uPlot/plugins/KeyboardPlugin';\n\nexport { type PlotTooltipInterpolator, type PlotSelection, FIXED_UNIT } from './components/uPlot/types';\nexport { type UPlotConfigPrepFn } from './components/uPlot/config/UPlotConfigBuilder';\nexport * from './components/PanelChrome/types';\nexport { Label as BrowserLabel } from './components/BrowserLabel/Label';\nexport { PanelContainer } from './components/PanelContainer/PanelContainer';\nexport { VariablesInputModal } from './components/Actions/VariablesInputModal';\n\n// -----------------------------------------------------\n// Graveyard: exported, but no longer used internally\n// These will be removed in the future\n// -----------------------------------------------------\n\nexport { Graph } from './graveyard/Graph/Graph';\nexport { GraphWithLegend } from './graveyard/Graph/GraphWithLegend';\nexport { GraphContextMenu, GraphContextMenuHeader } from './graveyard/Graph/GraphContextMenu';\nexport { graphTimeFormat, graphTickFormatter } from './graveyard/Graph/utils';\nexport { GraphSeriesToggler, type GraphSeriesTogglerAPI } from './graveyard/Graph/GraphSeriesToggler';\n\nexport { GraphNG, type GraphNGProps } from './graveyard/GraphNG/GraphNG';\nexport { TimeSeries } from './graveyard/TimeSeries/TimeSeries';\nexport { useGraphNGContext } from './graveyard/GraphNG/hooks';\nexport { preparePlotFrame, buildScaleKey } from './graveyard/GraphNG/utils';\nexport { type GraphNGLegendEvent } from './graveyard/GraphNG/types';\n\nexport { ZoomPlugin } from './graveyard/uPlot/plugins/ZoomPlugin';\nexport { TooltipPlugin } from './graveyard/uPlot/plugins/TooltipPlugin';\n\nexport {\n ElementSelectionContext,\n useElementSelection,\n type ElementSelectionContextState,\n type ElementSelectionContextItem,\n type ElementSelectionOnSelectOptions,\n type UseElementSelectionResult,\n} from './components/ElementSelectionContext/ElementSelectionContext';\n\nexport type { Themeable, Themeable2 } from './types/theme';\nexport type { ValidationRule, ValidationEvents } from './types/input';\nexport type {\n SearchFunction,\n CompletionItemGroup,\n HighlightPart,\n CompletionItem,\n TypeaheadOutput,\n TypeaheadInput,\n SuggestionsState,\n} from './types/completion';\nexport { CompletionItemKind } from './types/completion';\nexport type { FormsOnSubmit, FormFieldErrors, FormAPI, FieldArrayApi } from './types/forms';\nexport type { IconName, IconType, IconSize } from './types/icon';\nexport { toIconName, isIconSize, getAvailableIcons, getFieldTypeIcon, getFieldTypeIconName } from './types/icon';\nexport type { ActionMeta } from './types/select';\nexport type { ComponentSize } from './types/size';\nexport type { Column } from './types/interactiveTable';\nexport type { CellProps, SortByFn } from 'react-table';\n\nexport {\n DEFAULT_ANNOTATION_COLOR,\n OK_COLOR,\n ALERTING_COLOR,\n NO_DATA_COLOR,\n PENDING_COLOR,\n REGION_FILL_ALPHA,\n colors,\n getTextColorForBackground,\n getTextColorForAlphaBackground,\n sortedColors,\n} from './utils/colors';\nexport { EventsWithValidation, validate, hasValidationEvent, regexValidation } from './utils/validate';\nexport { SCHEMA, makeFragment, makeValue } from './utils/slate';\nexport { linkModelToContextMenuItems } from './utils/dataLinks';\nexport { getTagColorIndexFromName, getTagColorsFromName, getTagColor } from './utils/tags';\nexport { getScrollbarWidth } from './utils/scrollbar';\nexport { getCellLinks } from './utils/table';\nexport { getCanvasContext, measureText, calculateFontSize } from './utils/measureText';\nexport { createPointerDistance, usePointerDistance } from './utils/usePointerDistance';\nexport { useForceUpdate } from './utils/useForceUpdate';\nexport { SearchFunctionType } from './utils/searchFunctions';\nexport { createLogger } from './utils/logger';\nexport { attachDebugger } from './utils/debug';\nexport { NodeGraphDataFrameFieldNames } from './utils/nodeGraph';\nexport { fuzzyMatch } from './utils/fuzzy';\nexport { logOptions } from './utils/logOptions';\n\nexport { DOMUtil, ReactUtils, floatingUtils };\n\nexport { ThemeContext } from '@grafana/data';\nexport {\n withTheme,\n withTheme2,\n useTheme,\n useTheme2,\n useStyles,\n useStyles2,\n mockThemeContext,\n} from './themes/ThemeContext';\nexport { getTheme, mockTheme } from './themes/getTheme';\nexport { stylesFactory } from './themes/stylesFactory';\nexport { GlobalStyles } from './themes/GlobalStyles/GlobalStyles';\n\nexport { styleMixins, commonOptionsBuilder };\n\nexport { BracesPlugin } from './slate-plugins/braces';\nexport { ClearPlugin } from './slate-plugins/clear';\nexport { ClipboardPlugin } from './slate-plugins/clipboard';\nexport { IndentationPlugin } from './slate-plugins/indentation';\nexport { NewlinePlugin } from './slate-plugins/newline';\nexport { RunnerPlugin } from './slate-plugins/runner';\nexport { SelectionShortcutsPlugin } from './slate-plugins/selection_shortcuts';\nexport { SlatePrism, type Token } from './slate-plugins/slate-prism';\nexport { SuggestionsPlugin } from './slate-plugins/suggestions';\n\n// @deprecated import from @grafana/schema\nexport {\n // Styles that changed\n GraphDrawStyle as DrawStyle,\n // All exports\n AxisPlacement,\n VisibilityMode as PointVisibility,\n LineInterpolation,\n ScaleDistribution,\n GraphGradientMode,\n BarGaugeDisplayMode,\n type LineStyle,\n type PointsConfig,\n type ScaleDistributionConfig,\n type HideSeriesConfig,\n BarAlignment,\n VisibilityMode as BarValueVisibility,\n ScaleOrientation,\n ScaleDirection,\n type LineConfig,\n type BarConfig,\n type FillConfig,\n type AxisConfig,\n type HideableFieldConfig,\n StackingMode,\n type StackingConfig,\n type StackableFieldConfig,\n GraphThresholdsStyleMode,\n type GraphThresholdsStyleConfig,\n type GraphFieldConfig,\n type LegendPlacement,\n LegendDisplayMode,\n type VizLegendOptions,\n type OptionsWithLegend,\n TableCellDisplayMode,\n type FieldTextAlignment,\n type VizTextDisplayOptions,\n type OptionsWithTextFormatting,\n TooltipDisplayMode,\n type VizTooltipOptions,\n type OptionsWithTooltip,\n} from '@grafana/schema';\n","// Libraries\nimport { AnyAction, createAction } from '@reduxjs/toolkit';\n\nimport { DataSourceApi, HistoryItem } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { DataSourceRef } from '@grafana/schema';\nimport { RefreshPicker } from '@grafana/ui';\nimport { stopQueryState } from 'app/core/utils/explore';\nimport { getCorrelationsBySourceUIDs } from 'app/features/correlations/utils';\nimport { ExploreItemState } from 'app/types/explore';\nimport { createAsyncThunk } from 'app/types/store';\n\nimport { loadSupplementaryQueries } from '../utils/supplementaryQueries';\n\nimport { saveCorrelationsAction } from './explorePane';\nimport { importQueries, runQueries } from './query';\nimport { changeRefreshInterval } from './time';\nimport { createEmptyQueryResponse, getDatasourceUIDs, loadAndInitDatasource } from './utils';\n\n//\n// Actions and Payloads\n//\n\n/**\n * Updates datasource instance before datasource loading has started\n */\nexport interface UpdateDatasourceInstancePayload {\n exploreId: string;\n datasourceInstance: DataSourceApi;\n history: HistoryItem[];\n}\nexport const updateDatasourceInstanceAction = createAction<UpdateDatasourceInstancePayload>(\n 'explore/updateDatasourceInstance'\n);\n\n//\n// Action creators\n//\n\n/**\n * Loads a new datasource identified by the given name.\n */\n\ninterface ChangeDatasourcePayload {\n exploreId: string;\n datasource: string | DataSourceRef;\n options?: { importQueries: boolean };\n}\nexport const changeDatasource = createAsyncThunk(\n 'explore/changeDatasource',\n async ({ datasource, exploreId, options }: ChangeDatasourcePayload, { getState, dispatch }) => {\n const orgId = getState().user.orgId;\n const { history, instance } = await loadAndInitDatasource(orgId, datasource);\n const currentDataSourceInstance = getState().explore.panes[exploreId]!.datasourceInstance;\n\n reportInteraction('explore_change_ds', {\n from: (currentDataSourceInstance?.meta?.mixed ? 'mixed' : currentDataSourceInstance?.type) || 'unknown',\n to: instance.meta.mixed ? 'mixed' : instance.type,\n exploreId,\n });\n dispatch(\n updateDatasourceInstanceAction({\n exploreId,\n datasourceInstance: instance,\n history,\n })\n );\n\n const queries = getState().explore.panes[exploreId]!.queries;\n\n const datasourceUIDs = getDatasourceUIDs(instance.uid, queries);\n const correlations = await getCorrelationsBySourceUIDs(datasourceUIDs);\n dispatch(saveCorrelationsAction({ exploreId: exploreId, correlations: correlations.correlations || [] }));\n\n if (options?.importQueries) {\n await dispatch(importQueries(exploreId, queries, currentDataSourceInstance, instance));\n }\n\n if (getState().explore.panes[exploreId]!.isLive) {\n dispatch(changeRefreshInterval({ exploreId, refreshInterval: RefreshPicker.offOption.value }));\n }\n\n // Exception - we only want to run queries on data source change, if the queries were imported\n if (options?.importQueries) {\n dispatch(runQueries({ exploreId }));\n }\n }\n);\n\n//\n// Reducer\n//\n\n/**\n * Reducer for an Explore area, to be used by the global Explore reducer.\n */\n// Redux Toolkit uses ImmerJs as part of their solution to ensure that state objects are not mutated.\n// ImmerJs has an autoFreeze option that freezes objects from change which means this reducer can't be migrated to createSlice\n// because the state would become frozen and during run time we would get errors because flot (Graph lib) would try to mutate\n// the frozen state.\n// https://github.com/reduxjs/redux-toolkit/issues/242\nexport const datasourceReducer = (state: ExploreItemState, action: AnyAction): ExploreItemState => {\n if (updateDatasourceInstanceAction.match(action)) {\n const { datasourceInstance, history } = action.payload;\n\n // Custom components\n stopQueryState(state.querySubscription);\n\n return {\n ...state,\n datasourceInstance,\n graphResult: null,\n tableResult: null,\n logsResult: null,\n supplementaryQueries: loadSupplementaryQueries(),\n queryResponse: createEmptyQueryResponse(),\n queryKeys: [],\n history,\n };\n }\n\n return state;\n};\n","import { findIndex } from 'lodash';\n\nimport { Column, TableData, QueryResultMeta } from '@grafana/data';\n\n/**\n * Extends the standard Column class with variables that get\n * mutated in the angular table panel.\n */\nexport interface MutableColumn extends Column {\n title?: string;\n sort?: boolean;\n desc?: boolean;\n type?: string;\n}\n\nexport default class TableModel implements TableData {\n columns: MutableColumn[];\n rows: any[];\n type: string;\n columnMap: Record<string, Column>;\n refId?: string;\n meta?: QueryResultMeta;\n\n constructor(table?: any) {\n this.columns = [];\n this.columnMap = {};\n this.rows = [];\n this.type = 'table';\n\n if (table) {\n if (table.columns) {\n for (const col of table.columns) {\n this.addColumn(col);\n }\n }\n if (table.rows) {\n for (const row of table.rows) {\n this.addRow(row);\n }\n }\n }\n }\n\n sort(options: { col: number; desc: boolean }) {\n // Since 8.3.0 col property can be also undefined, https://github.com/grafana/grafana/issues/44127\n if (options.col === null || options.col === undefined || this.columns.length <= options.col) {\n return;\n }\n\n this.rows.sort((a, b) => {\n a = a[options.col];\n b = b[options.col];\n // Sort null or undefined separately from comparable values\n return +(a == null) - +(b == null) || +(a > b) || -(a < b);\n });\n\n if (options.desc) {\n this.rows.reverse();\n }\n\n this.columns[options.col].sort = true;\n this.columns[options.col].desc = options.desc;\n }\n\n addColumn(col: Column) {\n if (!this.columnMap[col.text]) {\n this.columns.push(col);\n this.columnMap[col.text] = col;\n }\n }\n\n addRow(row: unknown[]) {\n this.rows.push(row);\n }\n}\n\n// Returns true if both rows have matching non-empty fields as well as matching\n// indexes where one field is empty and the other is not\nfunction areRowsMatching(columns: Column[], row: unknown[], otherRow: unknown[]) {\n let foundFieldToMatch = false;\n for (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {\n if (row[columnIndex] !== undefined && otherRow[columnIndex] !== undefined) {\n if (row[columnIndex] !== otherRow[columnIndex]) {\n return false;\n }\n } else if (row[columnIndex] === undefined || otherRow[columnIndex] === undefined) {\n foundFieldToMatch = true;\n }\n }\n return foundFieldToMatch;\n}\n\nexport function mergeTablesIntoModel(dst?: TableModel, ...tables: TableModel[]): TableModel {\n const model = dst || new TableModel();\n\n if (arguments.length === 1) {\n return model;\n }\n // Single query returns data columns and rows as is\n if (arguments.length === 2) {\n model.columns = tables[0].hasOwnProperty('columns') ? [...tables[0].columns] : [];\n model.rows = tables[0].hasOwnProperty('rows') ? [...tables[0].rows] : [];\n return model;\n }\n\n // Filter out any tables that are not of TableData format\n const tableDataTables = tables.filter((table) => !!table.columns);\n\n // Track column indexes of union: name -> index\n const columnNames: { [key: string]: number } = {};\n\n // Union of all non-value columns\n const columnsUnion = tableDataTables.slice().reduce<MutableColumn[]>((acc, series) => {\n series.columns.forEach((col) => {\n const { text } = col;\n if (columnNames[text] === undefined) {\n columnNames[text] = acc.length;\n acc.push(col);\n }\n });\n return acc;\n }, []);\n\n // Map old column index to union index per series, e.g.,\n // given columnNames {A: 0, B: 1} and\n // data [{columns: [{ text: 'A' }]}, {columns: [{ text: 'B' }]}] => [[0], [1]]\n const columnIndexMapper = tableDataTables.map((series) => series.columns.map((col) => columnNames[col.text]));\n\n // Flatten rows of all series and adjust new column indexes\n const flattenedRows = tableDataTables.reduce<MutableColumn[][]>((acc, series, seriesIndex) => {\n const mapper = columnIndexMapper[seriesIndex];\n series.rows.forEach((row) => {\n const alteredRow: MutableColumn[] = [];\n // Shifting entries according to index mapper\n mapper.forEach((to, from) => {\n alteredRow[to] = row[from];\n });\n acc.push(alteredRow);\n });\n return acc;\n }, []);\n\n // Merge rows that have same values for columns\n const mergedRows: Record<number, MutableColumn[]> = {};\n\n const compactedRows = flattenedRows.reduce<MutableColumn[][]>((acc, row, rowIndex) => {\n if (!mergedRows[rowIndex]) {\n // Look from current row onwards\n let offset = rowIndex + 1;\n // More than one row can be merged into current row\n while (offset < flattenedRows.length) {\n // Find next row that could be merged\n const match = findIndex(flattenedRows, (otherRow) => areRowsMatching(columnsUnion, row, otherRow), offset);\n if (match > -1) {\n const matchedRow = flattenedRows[match];\n // Merge values from match into current row if there is a gap in the current row\n for (let columnIndex = 0; columnIndex < columnsUnion.length; columnIndex++) {\n if (row[columnIndex] === undefined && matchedRow[columnIndex] !== undefined) {\n row[columnIndex] = matchedRow[columnIndex];\n }\n }\n // Don't visit this row again\n mergedRows[match] = matchedRow;\n // Keep looking for more rows to merge\n offset = match + 1;\n } else {\n // No match found, stop looking\n break;\n }\n }\n acc.push(row);\n }\n return acc;\n }, []);\n\n model.columns = columnsUnion;\n model.rows = compactedRows;\n return model;\n}\n","import { map } from 'rxjs/operators';\n\nimport { getTimeField } from '../../dataframe/processDataFrame';\nimport { DataFrame } from '../../types/dataFrame';\nimport { SynchronousDataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\nimport { joinByFieldTransformer } from './joinByField';\n\nexport const ensureColumnsTransformer: SynchronousDataTransformerInfo = {\n id: DataTransformerID.ensureColumns,\n name: 'Ensure Columns Transformer',\n description: 'Will check if current data frames is series or columns. If in series it will convert to columns.',\n\n operator: (options, ctx) => (source) =>\n source.pipe(map((data) => ensureColumnsTransformer.transformer(options, ctx)(data))),\n\n transformer: (_options, ctx) => (frames: DataFrame[]) => {\n // Assume timeseries should first be joined by time\n const timeFieldName = findConsistentTimeFieldName(frames);\n\n if (frames.length > 1 && timeFieldName) {\n return joinByFieldTransformer.transformer(\n {\n byField: timeFieldName,\n },\n ctx\n )(frames);\n }\n return frames;\n },\n};\n\n/**\n * Find the name for the time field used in all frames (if one exists)\n */\nfunction findConsistentTimeFieldName(data: DataFrame[]): string | undefined {\n let name: string | undefined = undefined;\n for (const frame of data) {\n const { timeField } = getTimeField(frame);\n if (!timeField) {\n return undefined; // Not timeseries\n }\n if (!name) {\n name = timeField.name;\n } else if (name !== timeField.name) {\n // Second frame has a different time column?!\n return undefined;\n }\n }\n return name;\n}\n","import { FeatureState } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { Badge, BadgeProps } from '../Badge/Badge';\n\nexport interface FeatureBadgeProps {\n featureState: FeatureState;\n tooltip?: string;\n}\n\n/**\n * A component for displaying information about different release stages of features, in accordance with the guidelines provided at [Grafana's Release Life Cycle](https://grafana.com/docs/release-life-cycle).\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-featurebadge--docs\n */\nexport const FeatureBadge = ({ featureState, tooltip }: FeatureBadgeProps) => {\n const display = getPanelStateBadgeDisplayModel(featureState);\n return <Badge text={display.text} color={display.color} icon={display.icon} tooltip={tooltip} />;\n};\n\nfunction getPanelStateBadgeDisplayModel(featureState: FeatureState): BadgeProps {\n switch (featureState) {\n case FeatureState.alpha:\n return {\n text: 'Alpha',\n icon: 'exclamation-triangle',\n color: 'orange',\n };\n\n case FeatureState.beta:\n return {\n text: 'Beta',\n icon: 'rocket',\n color: 'blue',\n };\n\n case FeatureState.experimental:\n return {\n text: t('grafana-ui.feature-badge.experimental', 'Experimental'),\n icon: 'exclamation-triangle',\n color: 'orange',\n };\n\n case FeatureState.preview:\n return {\n text: t('grafana-ui.feature-badge.preview', 'Preview'),\n icon: 'rocket',\n color: 'blue',\n };\n\n case FeatureState.privatePreview:\n return {\n text: t('grafana-ui.feature-badge.private-preview', 'Private preview'),\n icon: 'rocket',\n color: 'blue',\n };\n\n case FeatureState.new:\n return {\n text: t('grafana-ui.feature-badge.new', 'New!'),\n icon: 'rocket',\n color: 'blue',\n };\n }\n}\n","import { DataFrame } from '../../types/dataFrame';\nimport { SynchronousDataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface NoopTransformerOptions {}\n\nexport const noopTransformer: SynchronousDataTransformerInfo<NoopTransformerOptions> = {\n id: DataTransformerID.noop,\n name: 'noop',\n description: 'No-operation transformer',\n defaultOptions: {},\n\n /** no operation */\n operator: (options: NoopTransformerOptions) => (source) => source,\n\n /** no operation */\n transformer: (options: NoopTransformerOptions) => (data: DataFrame[]) => data,\n};\n","import { css } from '@emotion/css';\nimport { ChangeEvent, FormEvent } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { VariableCheckboxField } from './VariableCheckboxField';\nimport { VariableLegend } from './VariableLegend';\nimport { VariableSelectField } from './VariableSelectField';\nimport { VariableTextField } from './VariableTextField';\n\ninterface IntervalVariableFormProps {\n intervals: string;\n onIntervalsChange: (event: FormEvent<HTMLInputElement>) => void;\n onAutoEnabledChange: (event: ChangeEvent<HTMLInputElement>) => void;\n onAutoMinIntervalChanged: (event: FormEvent<HTMLInputElement>) => void;\n onAutoCountChanged: (option: SelectableValue) => void;\n autoEnabled: boolean;\n autoMinInterval: string;\n autoStepCount: number;\n inline?: boolean;\n}\n\nexport function IntervalVariableForm({\n intervals,\n onIntervalsChange,\n onAutoEnabledChange,\n onAutoMinIntervalChanged,\n onAutoCountChanged,\n autoEnabled,\n autoMinInterval,\n autoStepCount,\n inline = false,\n}: IntervalVariableFormProps) {\n const STEP_OPTIONS = [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 100, 200, 300, 400, 500].map((count) => ({\n label: `${count}`,\n value: count,\n }));\n const styles = useStyles2(getStyles);\n\n const stepCount = STEP_OPTIONS.find((option) => option.value === autoStepCount) ?? STEP_OPTIONS[0];\n\n return (\n <>\n {!inline && (\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.interval-variable-form.interval-options\">Interval options</Trans>\n </VariableLegend>\n )}\n <VariableTextField\n defaultValue={intervals}\n name={t('dashboard-scene.interval-variable-form.name-values', 'Values')}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"1m,10m,1h,6h,1d,7d\"\n onBlur={onIntervalsChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.IntervalVariable.intervalsValueInput}\n width={32}\n required\n />\n\n <VariableCheckboxField\n value={autoEnabled}\n name={t('dashboard-scene.interval-variable-form.name-auto-option', 'Auto option')}\n description={t(\n 'dashboard-scene.interval-variable-form.description-auto-option',\n 'Dynamically calculates interval by dividing time range by the count specified'\n )}\n onChange={onAutoEnabledChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.IntervalVariable.autoEnabledCheckbox}\n />\n {autoEnabled && (\n <div className={styles.autoFields}>\n <VariableSelectField\n name={t('dashboard-scene.interval-variable-form.name-step-count', 'Step count')}\n description={t(\n 'dashboard-scene.interval-variable-form.description-step-count',\n 'How many times the current time range should be divided to calculate the value'\n )}\n value={stepCount}\n options={STEP_OPTIONS}\n onChange={onAutoCountChanged}\n width={9}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.IntervalVariable.stepCountIntervalSelect}\n />\n <VariableTextField\n value={autoMinInterval}\n name={t('dashboard-scene.interval-variable-form.name-min-interval', 'Min interval')}\n description={t(\n 'dashboard-scene.interval-variable-form.description-calculated-value-below-threshold',\n 'The calculated value will not go below this threshold'\n )}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"10s\"\n onChange={onAutoMinIntervalChanged}\n width={11}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.IntervalVariable.minIntervalInput}\n />\n </div>\n )}\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n autoFields: css({\n marginTop: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n }),\n };\n};\n","import { SceneGridItemLike, SceneGridLayout, SceneGridRow } from '@grafana/scenes';\nimport { GRID_COLUMN_COUNT } from 'app/core/constants';\n\nexport interface GridCell {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst NEW_PANEL_MIN_WIDTH = 8;\nconst NEW_PANEL_MIN_HEIGHT = 6;\nconst NEW_PANEL_WIDTH = 12;\nconst NEW_PANEL_HEIGHT = 8;\n\nexport function findSpaceForNewPanel(grid: SceneGridLayout): GridCell | null {\n // Build a grid of occupied spaces as a Set of \"x,y\" strings for fast lookup\n const occupied = new Set<string>();\n let maxY = 0;\n\n function addPanelToOccupied(panel: SceneGridItemLike) {\n for (let dx = 0; dx < panel.state.width!; dx++) {\n for (let dy = 0; dy < panel.state.height!; dy++) {\n const key = `${panel.state.x! + dx},${panel.state.y! + dy}`;\n occupied.add(key);\n\n if (panel.state.y! + panel.state.height! > maxY) {\n maxY = panel.state.y! + panel.state.height!;\n }\n }\n }\n }\n\n for (const panel of grid.state.children) {\n addPanelToOccupied(panel);\n\n if (panel instanceof SceneGridRow) {\n for (const rowChild of panel.state.children) {\n addPanelToOccupied(rowChild);\n }\n }\n }\n\n // Start scanning the grid row by row, top to bottom (infinite height)\n for (let y = 0; y < Infinity; y++) {\n for (let x = 0; x <= GRID_COLUMN_COUNT - NEW_PANEL_MIN_WIDTH; x++) {\n let fits = true;\n\n for (let dx = 0; dx < NEW_PANEL_MIN_WIDTH; dx++) {\n for (let dy = 0; dy < NEW_PANEL_MIN_HEIGHT; dy++) {\n const key = `${x + dx},${y + dy}`;\n if (occupied.has(key)) {\n fits = false;\n break;\n }\n }\n if (!fits) {\n break;\n }\n }\n\n if (fits) {\n const cell = { x, y, width: NEW_PANEL_MIN_WIDTH, height: NEW_PANEL_MIN_HEIGHT };\n return fillEmptySpace(occupied, cell, maxY);\n }\n }\n\n if (y > maxY + NEW_PANEL_MIN_HEIGHT) {\n break;\n }\n }\n\n // Should technically never reach this point\n return { x: 0, y: maxY, width: NEW_PANEL_WIDTH, height: NEW_PANEL_HEIGHT };\n}\n\n/**\n * This tries to expand the found empty space so that it fills it as much as possible\n */\nfunction fillEmptySpace(occupied: Set<string>, cell: GridCell, maxY: number) {\n // If we are at maxY we are on a new row, return default new row panel dimensions\n if (cell.y >= maxY) {\n cell.width = NEW_PANEL_WIDTH;\n cell.height = NEW_PANEL_HEIGHT;\n return cell;\n }\n\n // Expand width\n for (let x = cell.x + cell.width + 1; x <= GRID_COLUMN_COUNT; x++) {\n let fits = true;\n\n for (let y = cell.y; y < cell.y + cell.height; y++) {\n const key = `${x},${y}`;\n if (occupied.has(key)) {\n fits = false;\n break;\n }\n }\n\n if (fits) {\n cell.width = x - cell.x;\n } else {\n break;\n }\n }\n\n // try to expand y\n for (let y = cell.y + cell.height + 1; y <= maxY; y++) {\n let fits = true;\n\n // Some max panel height\n if (cell.height >= 20) {\n break;\n }\n\n for (let x = cell.x; x < cell.x + cell.width; x++) {\n const key = `${x},${y}`;\n if (occupied.has(key)) {\n fits = false;\n break;\n }\n }\n\n if (fits) {\n cell.height = y - cell.y;\n } else {\n break;\n }\n }\n\n return cell;\n}\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport {\n SceneObjectState,\n SceneGridLayout,\n SceneObjectBase,\n SceneGridRow,\n VizPanel,\n sceneGraph,\n sceneUtils,\n SceneComponentProps,\n SceneGridItemLike,\n useSceneObjectState,\n SceneGridLayoutDragStartEvent,\n SceneObject,\n} from '@grafana/scenes';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { useStyles2 } from '@grafana/ui';\nimport { GRID_COLUMN_COUNT } from 'app/core/constants';\nimport DashboardEmpty from 'app/features/dashboard/dashgrid/DashboardEmpty/DashboardEmpty';\n\nimport {\n dashboardEditActions,\n NewObjectAddedToCanvasEvent,\n ObjectRemovedFromCanvasEvent,\n ObjectsReorderedOnCanvasEvent,\n} from '../../edit-pane/shared';\nimport { serializeDefaultGridLayout } from '../../serialization/layoutSerializers/DefaultGridLayoutSerializer';\nimport { isRepeatCloneOrChildOf } from '../../utils/clone';\nimport { dashboardSceneGraph } from '../../utils/dashboardSceneGraph';\nimport {\n forceRenderChildren,\n getPanelIdForVizPanel,\n NEW_PANEL_HEIGHT,\n NEW_PANEL_WIDTH,\n getVizPanelKeyForPanelId,\n getGridItemKeyForPanelId,\n useDashboard,\n getLayoutOrchestratorFor,\n getDashboardSceneFor,\n} from '../../utils/utils';\nimport { useSoloPanelContext } from '../SoloPanelContext';\nimport { AutoGridItem } from '../layout-auto-grid/AutoGridItem';\nimport { CanvasGridAddActions } from '../layouts-shared/CanvasGridAddActions';\nimport { clearClipboard, getDashboardGridItemFromClipboard } from '../layouts-shared/paste';\nimport { dashboardCanvasAddButtonHoverStyles } from '../layouts-shared/styles';\nimport { getIsLazy } from '../layouts-shared/utils';\nimport { DashboardLayoutGrid } from '../types/DashboardLayoutGrid';\nimport { DashboardLayoutManager } from '../types/DashboardLayoutManager';\nimport { LayoutRegistryItem } from '../types/LayoutRegistryItem';\n\nimport { DashboardGridItem } from './DashboardGridItem';\nimport { RowRepeaterBehavior } from './RowRepeaterBehavior';\nimport { findSpaceForNewPanel } from './findSpaceForNewPanel';\nimport { RowActions } from './row-actions/RowActions';\n\ninterface DefaultGridLayoutManagerState extends SceneObjectState {\n grid: SceneGridLayout;\n}\n\nexport class DefaultGridLayoutManager\n extends SceneObjectBase<DefaultGridLayoutManagerState>\n implements DashboardLayoutGrid\n{\n public static Component = DefaultGridLayoutManagerRenderer;\n\n public readonly isDashboardLayoutManager = true;\n\n public static readonly descriptor: LayoutRegistryItem = {\n get name() {\n return t('dashboard.default-layout.name', 'Custom');\n },\n get description() {\n return t('dashboard.default-layout.description', 'Position and size each panel individually');\n },\n id: 'GridLayout',\n createFromLayout: DefaultGridLayoutManager.createFromLayout,\n isGridLayout: true,\n icon: 'window-grid',\n };\n\n public serialize(): DashboardV2Spec['layout'] {\n return serializeDefaultGridLayout(this);\n }\n\n public readonly descriptor = DefaultGridLayoutManager.descriptor;\n\n public constructor(state: DefaultGridLayoutManagerState) {\n super(state);\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n public mergeGrid(other: DashboardLayoutGrid) {\n let offset = 0;\n for (const child of this.state.grid.state.children) {\n const newOffset = (child.state.y ?? 0) + (child.state.height ?? 0);\n if (newOffset > offset) {\n offset = newOffset;\n }\n }\n\n const sourceGrid =\n other instanceof DefaultGridLayoutManager\n ? other.state.grid\n : DefaultGridLayoutManager.createFromLayout(other).state.grid;\n const movedChildren = [...sourceGrid.state.children];\n\n for (const child of movedChildren) {\n const currentY = child.state.y ?? 0;\n child.setState({ y: currentY + offset });\n }\n\n // Remove from source and append to destination\n sourceGrid.setState({ children: [] });\n for (const child of movedChildren) {\n child.clearParent();\n }\n this.state.grid.setState({ children: [...this.state.grid.state.children, ...movedChildren] });\n }\n\n private _activationHandler() {\n if (config.featureToggles.dashboardNewLayouts) {\n this._subs.add(\n this.subscribeToEvent(SceneGridLayoutDragStartEvent, ({ payload: { evt, panel } }) =>\n getLayoutOrchestratorFor(this)?.startDraggingSync(evt, panel)\n )\n );\n }\n\n this._subs.add(\n this.state.grid.subscribeToState(({ children: newChildren }, { children: prevChildren }) => {\n if (newChildren.length === prevChildren.length) {\n this.publishEvent(new ObjectsReorderedOnCanvasEvent(this.state.grid), true);\n }\n })\n );\n }\n\n public addPanel(vizPanel: VizPanel) {\n const panelId = dashboardSceneGraph.getNextPanelId(this);\n\n vizPanel.setState({ key: getVizPanelKeyForPanelId(panelId) });\n vizPanel.clearParent();\n\n // With new edit mode we add panels to the bottom of the grid\n if (config.featureToggles.dashboardNewLayouts) {\n const emptySpace = findSpaceForNewPanel(this.state.grid);\n const newGridItem = new DashboardGridItem({\n ...emptySpace,\n body: vizPanel,\n key: getGridItemKeyForPanelId(panelId),\n });\n\n dashboardEditActions.addElement({\n addedObject: vizPanel,\n source: this,\n perform: () => {\n this.state.grid.setState({ children: [...this.state.grid.state.children, newGridItem] });\n },\n undo: () => {\n this.state.grid.setState({\n children: this.state.grid.state.children.filter((child) => child !== newGridItem),\n });\n },\n });\n } else {\n const newGridItem = new DashboardGridItem({\n height: NEW_PANEL_HEIGHT,\n width: NEW_PANEL_WIDTH,\n x: 0,\n y: 0,\n body: vizPanel,\n key: getGridItemKeyForPanelId(panelId),\n });\n\n this.state.grid.setState({ children: [newGridItem, ...this.state.grid.state.children] });\n }\n }\n\n public pastePanel() {\n const emptySpace = findSpaceForNewPanel(this.state.grid);\n const newGridItem = getDashboardGridItemFromClipboard(getDashboardSceneFor(this), emptySpace);\n\n if (config.featureToggles.dashboardNewLayouts) {\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.paste-panel', 'Paste panel'),\n addedObject: newGridItem.state.body,\n source: this,\n perform: () => {\n this.state.grid.setState({ children: [...this.state.grid.state.children, newGridItem] });\n },\n undo: () => {\n this.state.grid.setState({\n children: this.state.grid.state.children.filter((child) => child !== newGridItem),\n });\n },\n });\n } else {\n this.state.grid.setState({ children: [...this.state.grid.state.children, newGridItem] });\n }\n\n clearClipboard();\n }\n\n public removePanel(panel: VizPanel) {\n const gridItem = panel.parent!;\n\n if (!(gridItem instanceof DashboardGridItem)) {\n throw new Error('Trying to remove panel that is not inside a DashboardGridItem');\n }\n\n const layout = this.state.grid;\n\n let row: SceneGridRow | undefined;\n\n try {\n row = sceneGraph.getAncestor(gridItem, SceneGridRow);\n } catch {\n row = undefined;\n }\n\n if (row) {\n row.setState({ children: row.state.children.filter((child) => child !== gridItem) });\n layout.forceRender();\n return;\n }\n\n if (!config.featureToggles.dashboardNewLayouts) {\n // No undo/redo support in legacy edit mode\n layout.setState({ children: layout.state.children.filter((child) => child !== gridItem) });\n return;\n }\n\n dashboardEditActions.removeElement({\n removedObject: gridItem.state.body,\n source: this,\n perform: () => layout.setState({ children: layout.state.children.filter((child) => child !== gridItem) }),\n undo: () => layout.setState({ children: [...layout.state.children, gridItem] }),\n });\n }\n\n public duplicatePanel(vizPanel: VizPanel) {\n const gridItem = vizPanel.parent;\n if (!(gridItem instanceof DashboardGridItem)) {\n console.error('Trying to duplicate a panel that is not inside a DashboardGridItem');\n return;\n }\n\n let panelState;\n let panelData;\n let newGridItem;\n\n const newPanelId = dashboardSceneGraph.getNextPanelId(this);\n const grid = this.state.grid;\n\n if (gridItem instanceof DashboardGridItem) {\n panelState = sceneUtils.cloneSceneObjectState(gridItem.state.body.state);\n panelData = sceneGraph.getData(gridItem.state.body).clone();\n } else {\n panelState = sceneUtils.cloneSceneObjectState(vizPanel.state);\n panelData = sceneGraph.getData(vizPanel).clone();\n }\n\n // when we duplicate a panel we don't want to clone the alert state\n delete panelData.state.data?.alertState;\n\n const newPanel = new VizPanel({\n ...panelState,\n $data: panelData,\n key: getVizPanelKeyForPanelId(newPanelId),\n });\n\n newGridItem = new DashboardGridItem({\n x: gridItem.state.x,\n y: gridItem.state.y,\n height: gridItem.state.height,\n itemHeight: gridItem.state.height,\n width: gridItem.state.width,\n variableName: gridItem.state.variableName,\n repeatDirection: gridItem.state.repeatDirection,\n maxPerRow: gridItem.state.maxPerRow,\n key: getGridItemKeyForPanelId(newPanelId),\n body: newPanel,\n });\n\n // No undo/redo support in legacy edit mode\n if (!config.featureToggles.dashboardNewLayouts) {\n if (gridItem.parent instanceof SceneGridRow) {\n const row = gridItem.parent;\n\n row.setState({ children: [...row.state.children, newGridItem] });\n grid.forceRender();\n return;\n }\n\n grid.setState({ children: [...grid.state.children, newGridItem] });\n this.publishEvent(new NewObjectAddedToCanvasEvent(newPanel), true);\n return;\n }\n\n const parent = gridItem.parent instanceof SceneGridRow ? gridItem.parent : grid;\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.duplicate-panel', 'Duplicate panel'),\n addedObject: newGridItem.state.body,\n source: this,\n perform: () => {\n const oldGridItemIndex = parent.state.children.indexOf(gridItem);\n const newChildrenArray = [...parent.state.children];\n newChildrenArray.splice(oldGridItemIndex + 1, 0, newGridItem);\n parent.setState({ children: newChildrenArray });\n },\n undo: () => {\n parent.setState({\n children: parent.state.children.filter((child) => child !== newGridItem),\n });\n },\n });\n }\n\n public duplicate(): DashboardLayoutManager {\n const children = this.state.grid.state.children;\n const hasGridItem = children.find((child) => child instanceof DashboardGridItem);\n const clonedChildren: SceneGridItemLike[] = [];\n\n if (children.length) {\n let panelId = hasGridItem ? dashboardSceneGraph.getNextPanelId(hasGridItem.state.body) : 1;\n\n children.forEach((child) => {\n if (child instanceof DashboardGridItem) {\n const clone = child.clone({\n key: undefined,\n body: child.state.body.clone({\n key: getVizPanelKeyForPanelId(panelId),\n }),\n });\n\n clonedChildren.push(clone);\n panelId++;\n } else {\n clonedChildren.push(child.clone({ key: undefined }));\n }\n });\n }\n\n const clone = this.clone({\n key: undefined,\n grid: this.state.grid.clone({\n key: undefined,\n children: clonedChildren,\n }),\n });\n\n return clone;\n }\n\n public getVizPanels(): VizPanel[] {\n const panels: VizPanel[] = [];\n\n this.state.grid.forEachChild((child) => {\n if (!(child instanceof DashboardGridItem) && !(child instanceof SceneGridRow)) {\n throw new Error('Child is not a DashboardGridItem or SceneGridRow, invalid scene');\n }\n\n if (child instanceof DashboardGridItem && child.state.body instanceof VizPanel) {\n panels.push(child.state.body);\n } else if (child instanceof SceneGridRow) {\n child.forEachChild((child) => {\n if (child instanceof DashboardGridItem && child.state.body instanceof VizPanel) {\n panels.push(child.state.body);\n }\n });\n }\n });\n\n return panels;\n }\n\n public addNewRow(): SceneGridRow {\n const id = dashboardSceneGraph.getNextPanelId(this);\n\n const row = new SceneGridRow({\n key: getVizPanelKeyForPanelId(id),\n title: t('dashboard-scene.default-grid-layout-manager.row.title.row-title', 'Row title'),\n actions: new RowActions({}),\n y: 0,\n });\n\n const sceneGridLayout = this.state.grid;\n\n // find all panels until the first row and put them into the newly created row. If there are no other rows,\n // add all panels to the row. If there are no panels just create an empty row\n const indexTillNextRow = sceneGridLayout.state.children.findIndex((child) => child instanceof SceneGridRow);\n const rowChildren = sceneGridLayout.state.children\n .splice(0, indexTillNextRow === -1 ? sceneGridLayout.state.children.length : indexTillNextRow)\n .map((child) => child.clone());\n\n if (rowChildren) {\n row.setState({ children: rowChildren });\n }\n\n sceneGridLayout.setState({ children: [row, ...sceneGridLayout.state.children] });\n\n this.publishEvent(new NewObjectAddedToCanvasEvent(row), true);\n return row;\n }\n\n public editModeChanged(isEditing: boolean) {\n const updateResizeAndDragging = () => {\n this.state.grid.setState({ isDraggable: isEditing, isResizable: isEditing });\n forceRenderChildren(this.state.grid, true);\n };\n\n if (config.featureToggles.dashboardNewLayouts) {\n // We do this in a timeout to wait a bit with enabling dragging as dragging enables grid animations\n // if we show the edit pane without animations it opens much faster and feels more responsive\n setTimeout(updateResizeAndDragging, 10);\n return;\n }\n\n updateResizeAndDragging();\n }\n\n public activateRepeaters() {\n if (!this.isActive) {\n this.activate();\n }\n\n if (!this.state.grid.isActive) {\n this.state.grid.activate();\n }\n\n this.state.grid.forEachChild((child) => {\n if (child instanceof DashboardGridItem && !child.isActive) {\n child.activate();\n return;\n }\n\n if (child instanceof SceneGridRow && child.state.$behaviors) {\n for (const behavior of child.state.$behaviors) {\n if (behavior instanceof RowRepeaterBehavior && !child.isActive) {\n child.activate();\n break;\n }\n }\n\n child.state.children.forEach((child) => {\n if (child instanceof DashboardGridItem && !child.isActive) {\n child.activate();\n return;\n }\n });\n }\n });\n }\n\n public getOutlineChildren(): SceneObject[] {\n const children: SceneObject[] = [];\n\n for (const child of this.state.grid.state.children) {\n // Flatten repeated grid items\n if (child instanceof DashboardGridItem) {\n children.push(child.state.body, ...(child.state.repeatedPanels || []));\n }\n }\n\n return children;\n }\n\n public cloneLayout(ancestorKey: string, isSource: boolean): DashboardLayoutManager {\n return this.clone({});\n }\n\n public removeRow(row: SceneGridRow, removePanels = false) {\n const sceneGridLayout = this.state.grid;\n\n const children = sceneGridLayout.state.children.filter((child) => child.state.key !== row.state.key);\n\n if (!removePanels) {\n const rowChildren = row.state.children.map((child) => child.clone());\n const indexOfRow = sceneGridLayout.state.children.findIndex((child) => child.state.key === row.state.key);\n\n children.splice(indexOfRow, 0, ...rowChildren);\n }\n\n this.publishEvent(new ObjectRemovedFromCanvasEvent(row), true);\n\n sceneGridLayout.setState({ children });\n }\n\n public collapseAllRows() {\n this.state.grid.state.children.forEach((child) => {\n if (!(child instanceof SceneGridRow)) {\n return;\n }\n\n if (!child.state.isCollapsed) {\n this.state.grid.toggleRow(child);\n }\n });\n }\n\n public expandAllRows() {\n this.state.grid.state.children.forEach((child) => {\n if (!(child instanceof SceneGridRow)) {\n return;\n }\n\n if (child.state.isCollapsed) {\n this.state.grid.toggleRow(child);\n }\n });\n }\n\n public static createFromLayout(currentLayout: DashboardLayoutManager): DefaultGridLayoutManager {\n const panels = currentLayout.getVizPanels();\n const isLazy = getIsLazy(getDashboardSceneFor(currentLayout).state.preload)!;\n return DefaultGridLayoutManager.fromVizPanels(panels, isLazy);\n }\n\n public static fromVizPanels(panels: VizPanel[] = [], isLazy?: boolean | undefined): DefaultGridLayoutManager {\n const children: DashboardGridItem[] = [];\n const panelHeight = 10;\n const panelWidth = GRID_COLUMN_COUNT / 3;\n let currentY = 0;\n let currentX = 0;\n\n for (let panel of panels) {\n const variableName = panel.parent instanceof AutoGridItem ? panel.parent.state.variableName : undefined;\n\n panel.clearParent();\n\n children.push(\n new DashboardGridItem({\n key: getGridItemKeyForPanelId(getPanelIdForVizPanel(panel)),\n x: currentX,\n y: currentY,\n width: panelWidth,\n height: panelHeight,\n itemHeight: panelHeight,\n body: panel,\n variableName,\n })\n );\n\n currentX += panelWidth;\n\n if (currentX + panelWidth > GRID_COLUMN_COUNT) {\n currentX = 0;\n currentY += panelHeight;\n }\n }\n\n return new DefaultGridLayoutManager({\n grid: new SceneGridLayout({\n children: children,\n isDraggable: true,\n isResizable: true,\n isLazy,\n }),\n });\n }\n\n public static fromGridItems(\n gridItems: SceneGridItemLike[],\n isDraggable?: boolean,\n isResizable?: boolean,\n isLazy?: boolean | undefined\n ): DefaultGridLayoutManager {\n const children = gridItems.reduce<SceneGridItemLike[]>((acc, gridItem) => {\n gridItem.clearParent();\n acc.push(gridItem);\n\n return acc;\n }, []);\n\n return new DefaultGridLayoutManager({\n grid: new SceneGridLayout({\n children,\n isDraggable,\n isResizable,\n isLazy,\n }),\n });\n }\n}\n\nfunction DefaultGridLayoutManagerRenderer({ model }: SceneComponentProps<DefaultGridLayoutManager>) {\n const { children } = useSceneObjectState(model.state.grid, { shouldActivateOrKeepAlive: true });\n const dashboard = useDashboard(model);\n const { isEditing } = dashboard.useState();\n const hasClonedParents = isRepeatCloneOrChildOf(model);\n const styles = useStyles2(getStyles);\n const showCanvasActions = isEditing && config.featureToggles.dashboardNewLayouts && !hasClonedParents;\n const soloPanelContext = useSoloPanelContext();\n\n if (soloPanelContext) {\n return children.map((child) => <child.Component model={child} key={child.state.key!} />);\n }\n\n // If we are top level layout and we have no children, show empty state\n if (model.parent === dashboard && children.length === 0) {\n return (\n <DashboardEmpty dashboard={dashboard} canCreate={!!dashboard.state.meta.canEdit} key=\"dashboard-empty-state\" />\n );\n }\n\n return (\n <div className={cx(styles.container, isEditing && styles.containerEditing)}>\n {model.state.grid.Component && <model.state.grid.Component model={model.state.grid} />}\n {showCanvasActions && (\n <div className={styles.actionsWrapper}>\n <CanvasGridAddActions layoutManager={model} />\n </div>\n )}\n </div>\n );\n}\n\nconst OriginalSceneGridRowRenderer = SceneGridRow.Component;\n// @ts-expect-error\nSceneGridRow.Component = SceneGridRowRenderer;\n\nfunction SceneGridRowRenderer({ model }: SceneComponentProps<SceneGridRow>) {\n const soloPanelContext = useSoloPanelContext();\n\n if (soloPanelContext) {\n return model.state.children.map((child) => <child.Component model={child} key={child.state.key!} />);\n }\n\n return <OriginalSceneGridRowRenderer model={model} />;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n width: '100%',\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n }),\n containerEditing: css({\n // In editing the add actions should live at the bottom of the grid so we have to\n // disable flex grow on the SceneGridLayouts first div\n '> div:first-child': {\n flexGrow: `0 !important`,\n minHeight: '250px',\n },\n ...dashboardCanvasAddButtonHoverStyles,\n }),\n actionsWrapper: css({\n position: 'relative',\n paddingBottom: theme.spacing(5),\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport ReactDiffViewer, { ReactDiffViewerProps, DiffMethod } from 'react-diff-viewer-continued';\nimport tinycolor from 'tinycolor2';\n\nimport { useTheme2 } from '@grafana/ui';\n\nexport const DiffViewer = ({ oldValue, newValue, ...diffProps }: ReactDiffViewerProps) => {\n const theme = useTheme2();\n\n const styles = {\n variables: {\n // the light theme supplied by ReactDiffViewer is very similar to Grafana\n // the dark theme needs some tweaks.\n dark: {\n diffViewerBackground: theme.colors.background.canvas,\n diffViewerColor: theme.colors.text.primary,\n addedBackground: tinycolor(theme.v1.palette.greenShade).setAlpha(0.3).toString(),\n addedColor: 'white',\n removedBackground: tinycolor(theme.v1.palette.redShade).setAlpha(0.3).toString(),\n removedColor: 'white',\n wordAddedBackground: tinycolor(theme.v1.palette.greenBase).setAlpha(0.4).toString(),\n wordRemovedBackground: tinycolor(theme.v1.palette.redBase).setAlpha(0.4).toString(),\n addedGutterBackground: tinycolor(theme.v1.palette.greenShade).setAlpha(0.2).toString(),\n removedGutterBackground: tinycolor(theme.v1.palette.redShade).setAlpha(0.2).toString(),\n gutterBackground: theme.colors.background.primary,\n gutterBackgroundDark: theme.colors.background.primary,\n highlightBackground: tinycolor(theme.colors.primary.main).setAlpha(0.4).toString(),\n highlightGutterBackground: tinycolor(theme.colors.primary.shade).setAlpha(0.2).toString(),\n codeFoldGutterBackground: theme.colors.background.secondary,\n codeFoldBackground: theme.colors.background.secondary,\n emptyLineBackground: theme.colors.background.secondary,\n gutterColor: theme.colors.text.disabled,\n addedGutterColor: theme.colors.text.primary,\n removedGutterColor: theme.colors.text.primary,\n codeFoldContentColor: theme.colors.text.disabled,\n diffViewerTitleBackground: theme.colors.background.secondary,\n diffViewerTitleColor: theme.colors.text.disabled,\n diffViewerTitleBorderColor: theme.colors.border.strong,\n },\n },\n codeFold: {\n fontSize: theme.typography.bodySmall.fontSize,\n },\n gutter: {\n pre: {\n color: tinycolor(theme.colors.text.disabled).setAlpha(1).toString(),\n opacity: 0.61,\n },\n },\n };\n\n return (\n <div\n className={css({\n fontSize: theme.typography.bodySmall.fontSize,\n // prevent global styles interfering with diff viewer\n pre: {\n all: 'revert',\n },\n })}\n >\n <ReactDiffViewer\n styles={styles}\n oldValue={oldValue}\n newValue={newValue}\n splitView={false}\n compareMethod={DiffMethod.CSS}\n useDarkTheme={theme.isDark}\n {...diffProps}\n />\n </div>\n );\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport config from 'app/core/config';\nimport { UsersState, OrgUser } from 'app/types/user';\n\nexport const initialState: UsersState = {\n users: [],\n searchQuery: '',\n page: 0,\n perPage: 30,\n totalPages: 1,\n externalUserMngInfo: config.externalUserMngInfo,\n externalUserMngLinkName: config.externalUserMngLinkName,\n externalUserMngLinkUrl: config.externalUserMngLinkUrl,\n isLoading: false,\n rolesLoading: false,\n};\n\nexport interface UsersFetchResult {\n orgUsers: OrgUser[];\n perPage: number;\n page: number;\n totalCount: number;\n}\n\nexport interface UsersRolesFetchResult {\n orgUsers: OrgUser[];\n perPage: number;\n page: number;\n totalCount: number;\n}\n\nconst usersSlice = createSlice({\n name: 'users',\n initialState,\n reducers: {\n usersLoaded: (state, action: PayloadAction<UsersFetchResult>): UsersState => {\n const { totalCount, perPage, page, orgUsers } = action.payload;\n const totalPages = Math.ceil(totalCount / perPage);\n\n return {\n ...state,\n isLoading: true,\n users: orgUsers,\n perPage,\n page,\n totalPages,\n };\n },\n searchQueryChanged: (state, action: PayloadAction<string>): UsersState => {\n // reset searchPage otherwise search results won't appear\n return { ...state, searchQuery: action.payload, page: initialState.page };\n },\n setUsersSearchPage: (state, action: PayloadAction<number>): UsersState => {\n return { ...state, page: action.payload };\n },\n pageChanged: (state, action: PayloadAction<number>) => ({\n ...state,\n page: action.payload,\n }),\n sortChanged: (state, action: PayloadAction<UsersState['sort']>) => ({\n ...state,\n sort: action.payload,\n }),\n usersFetchBegin: (state) => {\n return { ...state, isLoading: true };\n },\n usersFetchEnd: (state) => {\n return { ...state, isLoading: false };\n },\n rolesFetchBegin: (state) => {\n return { ...state, rolesLoading: true };\n },\n rolesFetchEnd: (state) => {\n return { ...state, rolesLoading: false };\n },\n },\n});\n\nexport const {\n searchQueryChanged,\n setUsersSearchPage,\n usersLoaded,\n usersFetchBegin,\n usersFetchEnd,\n pageChanged,\n sortChanged,\n rolesFetchBegin,\n rolesFetchEnd,\n} = usersSlice.actions;\n\nexport const usersReducer = usersSlice.reducer;\n\nexport default {\n users: usersReducer,\n};\n","import { DataQuery, DataSourceRef, getNextRefId } from '@grafana/data';\n\n// This function checks if the query has defined properties beyond those defined in the DataQuery interface.\nexport function queryIsEmpty(query: DataQuery): boolean {\n const dataQueryProps = ['refId', 'hide', 'key', 'queryType', 'datasource'];\n\n for (const key in query) {\n // label is not a DataQuery prop, but it's defined in the query when called from the QueryRunner.\n if (key === 'label') {\n continue;\n }\n if (!dataQueryProps.includes(key)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function addQuery(queries: DataQuery[], query?: Partial<DataQuery>, datasource?: DataSourceRef): DataQuery[] {\n const q: DataQuery = {\n ...query,\n refId: getNextRefId(queries),\n hide: false,\n };\n\n if (!q.datasource && datasource) {\n q.datasource = datasource;\n }\n\n return [...queries, q];\n}\n\nexport function isDataQuery(url: string): boolean {\n if (url.indexOf('api/datasources/proxy') !== -1 || url.indexOf('api/ds/query') !== -1) {\n return true;\n }\n\n return false;\n}\n\nexport function isLocalUrl(url: string) {\n return !url.match(/^http/);\n}\n\n/**\n * Returns the input value for non empty string and undefined otherwise\n *\n * It is inadvisable to set a query param to an empty string as it will be added to the URL.\n * It is better to keep it undefined so the param won't be added to the URL at all.\n */\nexport function getQueryParamValue(value: string | undefined | null): string | undefined {\n return value || undefined;\n}\n","import { FeatureToggles, store } from '@grafana/data';\n\ntype AlertingPreviewToggles = Pick<FeatureToggles, 'alertingListViewV2'>;\n\nconst previewToggleStoreKey = 'grafana.alerting.previewToggles';\n\n/**\n * Get the preview toggle value for the given toggle name.\n * @returns The value of the preview toggle or undefined if it is not set.\n */\nexport function getPreviewToggle(previewToggleName: keyof AlertingPreviewToggles): boolean | undefined {\n const previewToggles = store.getObject<AlertingPreviewToggles>(previewToggleStoreKey, {});\n\n return previewToggles[previewToggleName];\n}\n\nexport function setPreviewToggle(previewToggleName: keyof AlertingPreviewToggles, value: boolean | undefined) {\n const previewToggles = store.getObject<AlertingPreviewToggles>(previewToggleStoreKey, {});\n\n previewToggles[previewToggleName] = value;\n store.setObject(previewToggleStoreKey, previewToggles);\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { EmptyState, TextLink, useStyles2 } from '@grafana/ui';\n\nexport interface Props {\n /**\n * Defaults to Page\n */\n entity?: string;\n}\n\nexport function EntityNotFound({ entity = 'Page' }: Props) {\n const styles = useStyles2(getStyles);\n const lowerCaseEntity = entity.toLowerCase();\n\n return (\n <div className={styles.container} data-testid={selectors.components.EntityNotFound.container}>\n <EmptyState message={`${entity} not found`} variant=\"not-found\">\n <Trans i18nKey=\"entity-not-found.description\">\n We're looking but can't seem to find this {{ lowerCaseEntity }}. Try returning{' '}\n <TextLink href=\"/\">home</TextLink> or seeking help on the{' '}\n <TextLink href=\"https://community.grafana.com\" external>\n community site.\n </TextLink>\n </Trans>\n </EmptyState>\n </div>\n );\n}\n\nexport function getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n padding: theme.spacing(8, 2, 2, 2),\n }),\n };\n}\n","import { css, cx } from '@emotion/css';\nimport { ComponentProps, HTMLAttributes, forwardRef } from 'react';\n\nimport { Icon, IconName, Stack, Text, useStyles2 } from '@grafana/ui';\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n icon?: IconName;\n direction?: 'row' | 'column';\n color?: ComponentProps<typeof Text>['color'];\n}\n\nconst MetaText = forwardRef<HTMLDivElement, Props>(\n ({ children, icon, color = 'secondary', direction = 'row', ...rest }, ref) => {\n const styles = useStyles2(getStyles);\n const interactive = typeof rest.onClick === 'function';\n\n const rowDirection = direction === 'row';\n const alignItems = rowDirection ? 'center' : 'flex-start';\n const gap = rowDirection ? 0.5 : 0;\n\n return (\n <div\n ref={ref}\n className={cx({\n [styles.interactive]: interactive,\n })}\n // allow passing ARIA and data- attributes\n {...rest}\n >\n <Text variant=\"bodySmall\" color={color}>\n <Stack direction={direction} alignItems={alignItems} gap={gap} wrap={'wrap'}>\n {icon && <Icon size=\"xs\" name={icon} />}\n {children}\n </Stack>\n </Text>\n </div>\n );\n }\n);\n\nMetaText.displayName = 'MetaText';\n\nconst getStyles = () => ({\n interactive: css({\n cursor: 'pointer',\n }),\n});\n\nexport { MetaText };\n","import { VizPanel, sceneGraph, behaviors, SceneObject, SceneGridRow } from '@grafana/scenes';\n\nimport { DashboardDataLayerSet } from '../scene/DashboardDataLayerSet';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { VizPanelLinks } from '../scene/PanelLinks';\n\nimport { getDashboardSceneFor, getLayoutManagerFor, getPanelIdForVizPanel, getVizPanelKeyForPanelId } from './utils';\n\nfunction getTimePicker(scene: DashboardScene) {\n return scene.state.controls?.state.timePicker;\n}\n\nfunction getRefreshPicker(scene: DashboardScene) {\n return scene.state.controls?.state.refreshPicker;\n}\n\nfunction getPanelLinks(panel: VizPanel) {\n if (panel.state.titleItems && Array.isArray(panel.state.titleItems)) {\n // search panel.state.titleItems for VizPanelLinks\n const panelLink = panel.state.titleItems.find((item) => item instanceof VizPanelLinks);\n return panelLink ?? null;\n }\n\n return null;\n}\n\nfunction getVizPanels(scene: DashboardScene): VizPanel[] {\n return scene.state.body.getVizPanels();\n}\n\n/**\n * Will look for all panels in the entire scene starting from root\n * and find the next free panel id\n */\nexport function getNextPanelId(scene: SceneObject): number {\n let max = 0;\n\n sceneGraph\n .findAllObjects(\n scene.getRoot(),\n (obj) => (obj instanceof VizPanel || obj instanceof SceneGridRow) && !obj.state.repeatSourceKey\n )\n .forEach((panel) => {\n const panelId = getPanelIdForVizPanel(panel);\n if (panelId > max) {\n max = panelId;\n }\n });\n\n return max + 1;\n}\n\nfunction getDataLayers(scene: DashboardScene): DashboardDataLayerSet {\n const data = sceneGraph.getData(scene);\n\n if (!(data instanceof DashboardDataLayerSet)) {\n throw new Error('DashboardDataLayerSet not found');\n }\n\n return data;\n}\n\nfunction getAllSelectedObjects(scene: SceneObject): SceneObject[] {\n return (\n getDashboardSceneFor(scene)\n .state.editPane.state.selection?.getSelectionEntries()\n .map(([, ref]) => ref.resolve()) ?? []\n );\n}\n\nexport function getCursorSync(scene: DashboardScene) {\n const cursorSync = scene.state.$behaviors?.find((b) => b instanceof behaviors.CursorSync);\n\n if (cursorSync instanceof behaviors.CursorSync) {\n return cursorSync;\n }\n\n return;\n}\n// Functions to manage the lookup table in dashboard scene that will hold element_identifer : panel_id\nexport function getElementIdentifierForVizPanel(vizPanel: VizPanel): string {\n const scene = getDashboardSceneFor(vizPanel);\n const panelId = getPanelIdForVizPanel(vizPanel);\n let elementKey = scene.serializer.getElementIdForPanel(panelId);\n\n if (!elementKey) {\n // assign a panel-id key\n elementKey = getVizPanelKeyForPanelId(panelId);\n }\n return elementKey;\n}\n\nexport const dashboardSceneGraph = {\n getTimePicker,\n getRefreshPicker,\n getPanelLinks,\n getVizPanels,\n getDataLayers,\n getAllSelectedObjects,\n getCursorSync,\n getLayoutManagerFor,\n getNextPanelId,\n getElementIdentifierForVizPanel,\n};\n","export const dashboardCanvasAddButtonHoverStyles = {\n '&:hover,:focus-within': {\n '.dashboard-canvas-add-button': {\n opacity: 1,\n filter: 'unset',\n },\n },\n};\n","import { lastValueFrom } from 'rxjs';\n\nimport { getBackendSrv, isFetchError } from '@grafana/runtime';\nimport {\n AlertmanagerApiFeatures,\n PromApiFeatures,\n PromApplication,\n PromBuildInfoResponse,\n} from 'app/types/unified-alerting-dto';\n\nimport { RULER_NOT_SUPPORTED_MSG } from '../utils/constants';\nimport {\n GRAFANA_RULES_SOURCE_NAME,\n SUPPORTED_EXTERNAL_RULE_SOURCE_TYPES,\n SupportedExternalRulesSourceType,\n getDataSourceByName,\n getRulesDataSourceByUID,\n isSupportedExternalRulesSourceType,\n} from '../utils/datasource';\n\nimport { fetchRules } from './prometheus';\nimport { fetchTestRulerRulesGroup } from './ruler';\n\nexport async function discoverFeaturesByUid(dataSourceUid: string): Promise<PromApiFeatures> {\n if (dataSourceUid === GRAFANA_RULES_SOURCE_NAME) {\n return {\n application: 'grafana',\n features: {\n rulerApiEnabled: true,\n },\n } satisfies PromApiFeatures;\n }\n\n const dsConfig = getRulesDataSourceByUID(dataSourceUid);\n if (!dsConfig) {\n throw new Error(`Cannot find data source configuration for ${dataSourceUid}`);\n }\n\n const { url, name, type } = dsConfig;\n if (!url) {\n throw new Error(`The data source url cannot be empty.`);\n }\n\n if (!isSupportedExternalRulesSourceType(type)) {\n throw new Error(\n `The build info request is not available for ${type}. Supported values are ${SUPPORTED_EXTERNAL_RULE_SOURCE_TYPES.join()}.`\n );\n }\n\n return discoverDataSourceFeatures({ name, url, type });\n}\n\n/**\n * This function will attempt to detect what type of system we are talking to; this could be\n * Prometheus (vanilla) | Cortex | Mimir\n *\n * Cortex and Mimir allow editing rules via their API, Prometheus does not.\n * Prometheus and Mimir expose a `buildinfo` endpoint, Cortex does not.\n * Mimir reports which \"features\" are enabled or available via the buildinfo endpoint, Prometheus does not.\n */\nexport async function discoverDataSourceFeatures(dsSettings: {\n url: string;\n name: string;\n type: SupportedExternalRulesSourceType;\n}): Promise<PromApiFeatures> {\n const { url, name, type } = dsSettings;\n\n // The current implementation of Loki's build info endpoint is useless\n // because it doesn't provide information about Loki's available features (e.g. Ruler API)\n // It's better to skip fetching it for Loki and go the Cortex path (manual discovery)\n const buildInfoResponse = type === 'loki' ? undefined : await fetchPromBuildInfo(url);\n\n // check if the component returns buildinfo\n const hasBuildInfo = buildInfoResponse !== undefined;\n\n // we are dealing with a Cortex or Loki datasource since the response for buildinfo came up empty\n if (!hasBuildInfo) {\n // check if we can fetch rules via the prometheus compatible api\n const promRulesSupported = await hasPromRulesSupport(name);\n if (!promRulesSupported) {\n throw new Error(`Unable to fetch alert rules. Is the ${name} data source properly configured?`);\n }\n\n // check if the ruler is enabled\n const rulerSupported = await hasRulerSupport(name);\n\n return {\n // if we were not trying to discover ruler support for a \"loki\" type data source then assume it's Cortex.\n application: type === 'loki' ? 'Loki' : PromApplication.Cortex,\n features: {\n rulerApiEnabled: rulerSupported,\n },\n };\n }\n\n // if no features are reported but buildinfo was returned we're talking to Prometheus\n const { features } = buildInfoResponse.data;\n if (!features) {\n return {\n application: PromApplication.Prometheus,\n features: {\n rulerApiEnabled: false,\n },\n };\n }\n\n // if we have both features and buildinfo reported we're talking to Mimir\n return {\n application: PromApplication.Mimir,\n features: {\n rulerApiEnabled: features?.ruler_config_api === 'true',\n },\n };\n}\n\nexport async function discoverAlertmanagerFeatures(amSourceName: string): Promise<AlertmanagerApiFeatures> {\n if (amSourceName === GRAFANA_RULES_SOURCE_NAME) {\n return { lazyConfigInit: false };\n }\n\n const dsConfig = getDataSourceConfig(amSourceName);\n\n const { url, type } = dsConfig;\n if (!url) {\n throw new Error(`The data source url cannot be empty.`);\n }\n\n if (type !== 'alertmanager') {\n throw new Error(\n `Alertmanager feature discovery is not available for ${type}. Only 'alertmanager' type is supported`\n );\n }\n\n return await discoverAlertmanagerFeaturesByUrl(url);\n}\n\nexport async function discoverAlertmanagerFeaturesByUrl(url: string): Promise<AlertmanagerApiFeatures> {\n try {\n const buildInfo = await fetchPromBuildInfo(url);\n return { lazyConfigInit: buildInfo?.data?.application === 'Grafana Mimir' };\n } catch (e) {\n // If we cannot access the build info then we assume the lazy config is not available\n return { lazyConfigInit: false };\n }\n}\n\nfunction getDataSourceConfig(amSourceName: string) {\n const dsConfig = getDataSourceByName(amSourceName);\n if (!dsConfig) {\n throw new Error(`Cannot find data source configuration for ${amSourceName}`);\n }\n return dsConfig;\n}\n\nexport async function fetchPromBuildInfo(url: string): Promise<PromBuildInfoResponse | undefined> {\n const response = await lastValueFrom(\n getBackendSrv().fetch<PromBuildInfoResponse>({\n url: `${url}/api/v1/status/buildinfo`,\n showErrorAlert: false,\n showSuccessAlert: false,\n })\n ).catch((e) => {\n if ('status' in e && e.status === 404) {\n return undefined; // Cortex does not support buildinfo endpoint, we return an empty response\n }\n\n throw e;\n });\n\n return response?.data;\n}\n\n/**\n * Check if the component allows us to fetch rules\n */\nasync function hasPromRulesSupport(dataSourceName: string) {\n try {\n await fetchRules(dataSourceName);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Attempt to check if the ruler API is enabled for Cortex, Prometheus does not support it and Mimir\n * reports this via the buildInfo \"features\"\n */\nasync function hasRulerSupport(dataSourceName: string) {\n try {\n await fetchTestRulerRulesGroup(dataSourceName);\n return true;\n } catch (e) {\n if (errorIndicatesMissingRulerSupport(e)) {\n return false;\n }\n throw e;\n }\n}\n// there errors indicate that the ruler API might be disabled or not supported for Cortex\nfunction errorIndicatesMissingRulerSupport(error: unknown) {\n return isFetchError(error)\n ? error.data.message?.includes('GetRuleGroup unsupported in rule local store') || // \"local\" rule storage\n error.data.message?.includes('page not found') || // ruler api disabled\n error.data.message?.includes(RULER_NOT_SUPPORTED_MSG) // ruler api not supported\n : error instanceof Error && error.message?.includes('404 from rules config endpoint'); // ruler api disabled\n}\n","import { ComponentType } from 'react';\n\nimport { throwIfAngular } from '../utils/throwIfAngular';\n\nimport { KeyValue } from './data';\nimport { NavModel } from './navModel';\nimport { PluginMeta, GrafanaPlugin, PluginIncludeType } from './plugin';\nimport {\n PluginExtensionExposedComponentConfig,\n PluginExtensionAddedComponentConfig,\n PluginExtensionAddedLinkConfig,\n PluginExtensionAddedFunctionConfig,\n} from './pluginExtensions';\n\n/**\n * @public\n * The app container that is loading another plugin (panel or query editor)\n * */\nexport enum CoreApp {\n CloudAlerting = 'cloud-alerting',\n UnifiedAlerting = 'unified-alerting',\n Dashboard = 'dashboard',\n Explore = 'explore',\n Correlations = 'correlations',\n Unknown = 'unknown',\n PanelEditor = 'panel-editor',\n PanelViewer = 'panel-viewer',\n}\n\nexport interface AppRootProps<T extends KeyValue = KeyValue> {\n meta: AppPluginMeta<T>;\n /**\n * base URL segment for an app, /app/pluginId\n */\n basename: string; // The URL path to this page\n\n /**\n * Pass the nav model to the container... is there a better way?\n * @deprecated Use PluginPage component exported from @grafana/runtime instead\n */\n onNavChanged: (nav: NavModel) => void;\n\n /**\n * The URL query parameters\n * @deprecated Use react-router instead\n */\n query: KeyValue;\n\n /**\n * The URL path to this page\n * @deprecated Use react-router instead\n */\n path: string;\n}\n\nexport interface AppPluginMeta<T extends KeyValue = KeyValue> extends PluginMeta<T> {\n // TODO anything specific to apps?\n}\n\nexport class AppPlugin<T extends KeyValue = KeyValue> extends GrafanaPlugin<AppPluginMeta<T>> {\n private _exposedComponentConfigs: PluginExtensionExposedComponentConfig[] = [];\n private _addedComponentConfigs: PluginExtensionAddedComponentConfig[] = [];\n private _addedLinkConfigs: PluginExtensionAddedLinkConfig[] = [];\n private _addedFunctionConfigs: PluginExtensionAddedFunctionConfig[] = [];\n\n // Content under: /a/${plugin-id}/*\n root?: ComponentType<AppRootProps<T>>;\n\n /**\n * Called after the module has loaded, and before the app is used.\n * This function may be called multiple times on the same instance.\n * The first time, `this.meta` will be undefined\n */\n init(meta: AppPluginMeta<T>) {}\n\n /**\n * Set the component displayed under:\n * /a/${plugin-id}/*\n *\n * If the NavModel is configured, the page will have a managed frame, otheriwse it has full control.\n */\n setRootPage(root: ComponentType<AppRootProps<T>>) {\n this.root = root;\n return this;\n }\n\n setComponentsFromLegacyExports(pluginExports: System.Module) {\n throwIfAngular(pluginExports);\n\n if (this.meta && this.meta.includes) {\n for (const include of this.meta.includes) {\n if (include.type === PluginIncludeType.page && include.component) {\n const exp = pluginExports[include.component];\n\n if (!exp) {\n console.warn('App Page uses unknown component: ', include.component, this.meta);\n continue;\n }\n }\n }\n }\n }\n\n get exposedComponentConfigs() {\n return this._exposedComponentConfigs;\n }\n\n get addedComponentConfigs() {\n return this._addedComponentConfigs;\n }\n\n get addedLinkConfigs() {\n return this._addedLinkConfigs;\n }\n\n get addedFunctionConfigs() {\n return this._addedFunctionConfigs;\n }\n\n addLink<Context extends object>(linkConfig: PluginExtensionAddedLinkConfig<Context>) {\n this._addedLinkConfigs.push(linkConfig as PluginExtensionAddedLinkConfig);\n\n return this;\n }\n\n addComponent<Props = {}>(addedComponentConfig: PluginExtensionAddedComponentConfig<Props>) {\n this._addedComponentConfigs.push(addedComponentConfig as PluginExtensionAddedComponentConfig);\n\n return this;\n }\n\n addFunction<Signature>(addedFunctionConfig: PluginExtensionAddedFunctionConfig<Signature>) {\n this._addedFunctionConfigs.push(addedFunctionConfig);\n\n return this;\n }\n\n exposeComponent<Props = {}>(componentConfig: PluginExtensionExposedComponentConfig<Props>) {\n this._exposedComponentConfigs.push(componentConfig as PluginExtensionExposedComponentConfig);\n\n return this;\n }\n}\n\n/**\n * Defines life cycle of a feature\n * @internal\n */\nexport enum FeatureState {\n /** @deprecated in favor of experimental */\n alpha = 'alpha',\n /** @deprecated in favor of preview */\n beta = 'beta',\n /** used to mark experimental features with high/unknown risk */\n experimental = 'experimental',\n /** used to mark features that are in public preview with medium/hight risk */\n privatePreview = 'private preview',\n /** used to mark features that are in public preview with low/medium risk, or as a shared badge for public and private previews */\n preview = 'preview',\n /** used to mark new GA features */\n new = 'new',\n}\n","import { ComponentPropsWithoutRef } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, Badge, Tooltip } from '@grafana/ui';\n\nexport enum ProvisionedResource {\n ContactPoint = 'contact point',\n Template = 'template',\n MuteTiming = 'time interval',\n AlertRule = 'alert rule',\n RootNotificationPolicy = 'root notification policy',\n AlertEnrichment = 'alert enrichment',\n}\n\n// we'll omit the props we don't want consumers to overwrite and forward the others to the alert component\ntype ExtraAlertProps = Omit<ComponentPropsWithoutRef<typeof Alert>, 'title' | 'severity'>;\n\ninterface ProvisioningAlertProps extends ExtraAlertProps {\n resource: ProvisionedResource;\n}\n\nexport const ProvisioningAlert = ({ resource, ...rest }: ProvisioningAlertProps) => {\n return (\n <Alert\n title={t('alerting.provisioning.title-provisioned', 'This {{resource}} cannot be edited through the UI', {\n resource,\n })}\n severity=\"info\"\n {...rest}\n >\n <Trans i18nKey=\"alerting.provisioning.body-provisioned\">\n This {{ resource }} has been provisioned, that means it was created by config. Please contact your server admin\n to update this {{ resource }}.\n </Trans>\n </Alert>\n );\n};\n\nexport const ProvisioningBadge = ({\n tooltip,\n provenance,\n}: {\n tooltip?: boolean;\n /**\n * If provided, will be used within any displayed tooltip to indicate the type of provisioning\n */\n provenance?: string;\n}) => {\n const badge = <Badge text={t('alerting.provisioning-badge.badge.text-provisioned', 'Provisioned')} color=\"purple\" />;\n\n if (tooltip) {\n const provenanceTooltip = (\n <Trans i18nKey=\"alerting.provisioning.badge-tooltip-provenance\" values={{ provenance }}>\n This resource has been provisioned via {{ provenance }} and cannot be edited through the UI\n </Trans>\n );\n\n const standardTooltip = (\n <Trans i18nKey=\"alerting.provisioning.badge-tooltip-standard\">\n This resource has been provisioned and cannot be edited through the UI\n </Trans>\n );\n\n const tooltipContent = provenance ? provenanceTooltip : standardTooltip;\n return (\n <Tooltip content={tooltipContent}>\n <span>{badge}</span>\n </Tooltip>\n );\n }\n return badge;\n};\n","import { cloneDeep } from 'lodash';\nimport { MonoTypeOperatorFunction, Observable, of } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\n\nimport { DataFrame } from '../types/dataFrame';\nimport {\n CustomTransformOperator,\n DataTransformContext,\n DataTransformerConfig,\n FrameMatcher,\n} from '../types/transformations';\n\nimport { getFrameMatchers } from './matchers';\nimport { standardTransformersRegistry, TransformerRegistryItem } from './standardTransformersRegistry';\n\nconst getOperator =\n (config: DataTransformerConfig, ctx: DataTransformContext): MonoTypeOperatorFunction<DataFrame[]> =>\n (source) => {\n const info = standardTransformersRegistry.get(config.id);\n\n if (!info) {\n return source;\n }\n\n const defaultOptions = info.transformation.defaultOptions ?? {};\n const options = { ...defaultOptions, ...config.options };\n\n // when running within Scenes, we can skip var interpolation, since it's already handled upstream\n const isScenes = window.__grafanaSceneContext != null;\n\n const interpolated = isScenes\n ? options\n : deepIterate(cloneDeep(options), (v) => {\n if (typeof v === 'string') {\n return ctx.interpolate(v);\n }\n return v;\n });\n\n const matcher = config.filter?.options ? getFrameMatchers(config.filter) : undefined;\n return source.pipe(\n mergeMap((before) =>\n of(filterInput(before, matcher)).pipe(\n info.transformation.operator(interpolated, ctx),\n postProcessTransform(before, info, matcher)\n )\n )\n );\n };\n\nfunction filterInput(data: DataFrame[], matcher?: FrameMatcher) {\n if (matcher) {\n return data.filter((v) => matcher(v));\n }\n return data;\n}\n\nconst postProcessTransform =\n (before: DataFrame[], info: TransformerRegistryItem, matcher?: FrameMatcher): MonoTypeOperatorFunction<DataFrame[]> =>\n (source) =>\n source.pipe(\n map((after) => {\n if (after === before) {\n return after;\n }\n\n // Add back the filtered out frames\n if (matcher) {\n // keep the frame order the same\n let insert = 0;\n const append = before.filter((v, idx) => {\n const keep = !matcher(v);\n if (keep && !insert) {\n insert = idx;\n }\n return keep;\n });\n if (append.length) {\n after.splice(insert, 0, ...append);\n }\n }\n return after;\n })\n );\n\n/**\n * Apply configured transformations to the input data\n */\nexport function transformDataFrame(\n options: Array<DataTransformerConfig | CustomTransformOperator>,\n data: DataFrame[],\n ctx?: DataTransformContext\n): Observable<DataFrame[]> {\n const stream = of<DataFrame[]>(data);\n\n if (!options.length) {\n return stream;\n }\n\n const operators: Array<MonoTypeOperatorFunction<DataFrame[]>> = [];\n const context = ctx ?? { interpolate: (str) => str };\n\n for (let index = 0; index < options.length; index++) {\n const config = options[index];\n\n if (isCustomTransformation(config)) {\n operators.push(config(context));\n } else {\n if (config.disabled) {\n continue;\n }\n operators.push(getOperator(config, context));\n }\n }\n\n // @ts-ignore TypeScript has a hard time understanding this construct\n return stream.pipe.apply(stream, operators);\n}\n\nfunction isCustomTransformation(t: DataTransformerConfig | CustomTransformOperator): t is CustomTransformOperator {\n return typeof t === 'function';\n}\n\nfunction deepIterate<T extends object>(obj: T, doSomething: (current: any) => any): T;\n// eslint-disable-next-line no-redeclare\nfunction deepIterate(obj: any, doSomething: (current: any) => any): any {\n if (Array.isArray(obj)) {\n return obj.map((o) => deepIterate(o, doSomething));\n }\n\n if (typeof obj === 'object') {\n for (const key in obj) {\n obj[key] = deepIterate(obj[key], doSomething);\n }\n\n return obj;\n } else {\n return doSomething(obj) ?? obj;\n }\n}\n","import React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Drawer, Stack } from '@grafana/ui';\nimport { SilencesEditor } from 'app/features/alerting/unified/components/silences/SilencesEditor';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\n\nimport { AlertmanagerProvider } from '../../state/AlertmanagerContext';\n\ntype Props = {\n ruleUid: string;\n onClose: () => void;\n};\n\n/**\n * For a given Grafana managed rule, renders a drawer containing silences editor and Alertmanager selection\n */\nconst SilenceGrafanaRuleDrawer = React.memo(\n ({ ruleUid, onClose }: Props) => (\n <Drawer\n title={t('alerting.silence-grafana-rule-drawer.title-silence-alert-rule', 'Silence alert rule')}\n subtitle=\"Configure silences to stop notifications from a particular alert rule.\"\n onClose={onClose}\n size=\"md\"\n >\n <Stack direction={'column'}>\n <AlertmanagerProvider accessType=\"instance\">\n <SilencesEditor\n ruleUid={ruleUid}\n alertManagerSourceName={GRAFANA_RULES_SOURCE_NAME}\n onSilenceCreated={onClose}\n onCancel={onClose}\n />\n </AlertmanagerProvider>\n </Stack>\n </Drawer>\n ),\n (prevProps, nextProps) => prevProps.ruleUid === nextProps.ruleUid\n);\nSilenceGrafanaRuleDrawer.displayName = 'SilenceGrafanaRuleDrawer';\n\nexport default SilenceGrafanaRuleDrawer;\n","/*\n * jQuery.flot.dashes\n *\n * options = {\n * series: {\n * dashes: {\n *\n * // show\n * // default: false\n * // Whether to show dashes for the series.\n * show: <boolean>,\n *\n * // lineWidth\n * // default: 2\n * // The width of the dashed line in pixels.\n * lineWidth: <number>,\n *\n * // dashLength\n * // default: 10\n * // Controls the length of the individual dashes and the amount of\n * // space between them.\n * // If this is a number, the dashes and spaces will have that length.\n * // If this is an array, it is read as [ dashLength, spaceLength ]\n * dashLength: <number> or <array[2]>\n * }\n * }\n * }\n */\n(function($){\n\n function init(plot) {\n\n plot.hooks.processDatapoints.push(function(plot, series, datapoints) {\n\n if (!series.dashes.show) return;\n\n plot.hooks.draw.push(function(plot, ctx) {\n\n var plotOffset = plot.getPlotOffset(),\n axisx = series.xaxis,\n axisy = series.yaxis;\n\n function plotDashes(xoffset, yoffset) {\n\n var points = datapoints.points,\n ps = datapoints.pointsize,\n prevx = null,\n prevy = null,\n dashRemainder = 0,\n dashOn = true,\n dashOnLength,\n dashOffLength;\n\n if (series.dashes.dashLength[0]) {\n dashOnLength = series.dashes.dashLength[0];\n if (series.dashes.dashLength[1]) {\n dashOffLength = series.dashes.dashLength[1];\n } else {\n dashOffLength = dashOnLength;\n }\n } else {\n dashOffLength = dashOnLength = series.dashes.dashLength;\n }\n\n ctx.beginPath();\n\n for (var i = ps; i < points.length; i += ps) {\n\n var x1 = points[i - ps],\n y1 = points[i - ps + 1],\n x2 = points[i],\n y2 = points[i + 1];\n\n if (x1 == null || x2 == null) continue;\n\n // clip with ymin\n if (y1 <= y2 && y1 < axisy.min) {\n if (y2 < axisy.min) continue; // line segment is outside\n // compute new intersection point\n x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n y1 = axisy.min;\n } else if (y2 <= y1 && y2 < axisy.min) {\n if (y1 < axisy.min) continue;\n x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n y2 = axisy.min;\n }\n\n // clip with ymax\n if (y1 >= y2 && y1 > axisy.max) {\n if (y2 > axisy.max) continue;\n x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n y1 = axisy.max;\n } else if (y2 >= y1 && y2 > axisy.max) {\n if (y1 > axisy.max) continue;\n x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n y2 = axisy.max;\n }\n\n // clip with xmin\n if (x1 <= x2 && x1 < axisx.min) {\n if (x2 < axisx.min) continue;\n y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n x1 = axisx.min;\n } else if (x2 <= x1 && x2 < axisx.min) {\n if (x1 < axisx.min) continue;\n y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n x2 = axisx.min;\n }\n\n // clip with xmax\n if (x1 >= x2 && x1 > axisx.max) {\n if (x2 > axisx.max) continue;\n y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n x1 = axisx.max;\n } else if (x2 >= x1 && x2 > axisx.max) {\n if (x1 > axisx.max) continue;\n y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n x2 = axisx.max;\n }\n\n if (x1 != prevx || y1 != prevy) {\n ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n }\n\n var ax1 = axisx.p2c(x1) + xoffset,\n ay1 = axisy.p2c(y1) + yoffset,\n ax2 = axisx.p2c(x2) + xoffset,\n ay2 = axisy.p2c(y2) + yoffset,\n dashOffset;\n\n function lineSegmentOffset(segmentLength) {\n\n var c = Math.sqrt(Math.pow(ax2 - ax1, 2) + Math.pow(ay2 - ay1, 2));\n\n if (c <= segmentLength) {\n return {\n deltaX: ax2 - ax1,\n deltaY: ay2 - ay1,\n distance: c,\n remainder: segmentLength - c\n }\n } else {\n var xsign = ax2 > ax1 ? 1 : -1,\n ysign = ay2 > ay1 ? 1 : -1;\n return {\n deltaX: xsign * Math.sqrt(Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),\n deltaY: ysign * Math.sqrt(Math.pow(segmentLength, 2) - Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),\n distance: segmentLength,\n remainder: 0\n };\n }\n }\n //-end lineSegmentOffset\n\n do {\n\n dashOffset = lineSegmentOffset(\n dashRemainder > 0 ? dashRemainder :\n dashOn ? dashOnLength : dashOffLength);\n\n if (dashOffset.deltaX != 0 || dashOffset.deltaY != 0) {\n if (dashOn) {\n ctx.lineTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);\n } else {\n ctx.moveTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);\n }\n }\n\n dashOn = !dashOn;\n dashRemainder = dashOffset.remainder;\n ax1 += dashOffset.deltaX;\n ay1 += dashOffset.deltaY;\n\n } while (dashOffset.distance > 0);\n\n prevx = x2;\n prevy = y2;\n }\n\n ctx.stroke();\n }\n //-end plotDashes\n\n ctx.save();\n ctx.translate(plotOffset.left, plotOffset.top);\n ctx.lineJoin = 'round';\n\n var lw = series.dashes.lineWidth,\n sw = series.shadowSize;\n\n // FIXME: consider another form of shadow when filling is turned on\n if (lw > 0 && sw > 0) {\n // draw shadow as a thick and thin line with transparency\n ctx.lineWidth = sw;\n ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n // position shadow at angle from the mid of line\n var angle = Math.PI/18;\n plotDashes(Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2));\n ctx.lineWidth = sw/2;\n plotDashes(Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4));\n }\n\n ctx.lineWidth = lw;\n ctx.strokeStyle = series.color;\n\n if (lw > 0) {\n plotDashes(0, 0);\n }\n\n ctx.restore();\n\n });\n //-end draw hook\n\n });\n //-end processDatapoints hook\n\n }\n //-end init\n\n $.plot.plugins.push({\n init: init,\n options: {\n series: {\n dashes: {\n show: false,\n lineWidth: 2,\n dashLength: 10\n }\n }\n },\n name: 'dashes',\n version: '0.1'\n });\n\n})(jQuery)\n","import { FloatingArrow, arrow, autoUpdate, offset, useFloating, useTransitionStyles } from '@floating-ui/react';\nimport { useLayoutEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { getPositioningMiddleware } from '../../utils/floating';\nimport { getPlacement } from '../../utils/tooltipUtils';\nimport { Portal } from '../Portal/Portal';\n\nimport { PopoverContent, TooltipPlacement } from './types';\n\ninterface Props extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n show: boolean;\n placement?: TooltipPlacement;\n content: PopoverContent;\n referenceElement: HTMLElement;\n wrapperClassName?: string;\n renderArrow?: boolean;\n hidePopper?: () => void;\n style?: React.CSSProperties;\n}\n\nexport function Popover({\n content,\n show,\n placement,\n className,\n wrapperClassName,\n referenceElement,\n renderArrow,\n hidePopper,\n style: styleOverrides,\n ...rest\n}: Props) {\n const theme = useTheme2();\n const arrowRef = useRef(null);\n const floatingUIPlacement = getPlacement(placement);\n\n // the order of middleware is important!\n // `arrow` should almost always be at the end\n // see https://floating-ui.com/docs/arrow#order\n const middleware = [offset(8), ...getPositioningMiddleware(floatingUIPlacement)];\n\n if (renderArrow) {\n middleware.push(\n arrow({\n element: arrowRef,\n })\n );\n }\n\n const { context, refs, floatingStyles } = useFloating({\n open: show,\n placement: floatingUIPlacement,\n middleware,\n whileElementsMounted: autoUpdate,\n strategy: 'fixed',\n });\n\n useLayoutEffect(() => {\n refs.setReference(referenceElement);\n }, [referenceElement, refs]);\n\n const { styles: placementStyles } = useTransitionStyles(context, {\n initial: () => ({\n opacity: 0,\n }),\n duration: theme.transitions.duration.enteringScreen,\n });\n\n return show ? (\n <Portal>\n <div\n ref={refs.setFloating}\n style={{\n ...floatingStyles,\n ...placementStyles,\n ...styleOverrides,\n }}\n className={wrapperClassName}\n {...rest}\n >\n <div className={className}>\n {renderArrow && <FloatingArrow fill={theme.colors.border.weak} ref={arrowRef} context={context} />}\n {typeof content === 'string' && content}\n {React.isValidElement(content) && React.cloneElement(content)}\n {typeof content === 'function' && content({ hidePopper })}\n </div>\n </div>\n </Portal>\n ) : undefined;\n}\n","import { cloneElement, useCallback } from 'react';\n\nimport { useReturnToPrevious } from '@grafana/runtime';\n\ninterface WithReturnButtonProps {\n component: JSX.Element;\n title?: string;\n}\n\n// @TODO translations?\nexport const WithReturnButton = ({ component, title = 'previous page' }: WithReturnButtonProps) => {\n const returnToPrevious = useReturnToPrevious();\n\n const returnToThisURL = useCallback(() => {\n returnToPrevious(title);\n }, [returnToPrevious, title]);\n\n return cloneElement(component, { onClick: returnToThisURL });\n};\n","import { AnnotationQuery } from '@grafana/data';\nimport { AnnotationQueryKind, defaultDataQueryKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\nimport { getRuntimePanelDataSource } from './layoutSerializers/utils';\n\nexport function transformV1ToV2AnnotationQuery(\n annotation: AnnotationQuery,\n\n dsType: string,\n dsUID?: string,\n // Overrides are used to provide properties based on scene's annotations data layer object state\n override?: Partial<AnnotationQuery>\n): AnnotationQueryKind {\n const group = annotation.builtIn ? 'grafana' : dsType;\n\n const {\n // known properties documented in v1 schema\n enable,\n hide,\n iconColor,\n name,\n builtIn,\n filter,\n mappings,\n datasource,\n target,\n snapshotData,\n type,\n placement,\n\n // unknown properties that are still available for configuration through API\n ...legacyOptions\n } = annotation;\n\n const result: AnnotationQueryKind = {\n kind: 'AnnotationQuery',\n spec: {\n builtIn: Boolean(annotation.builtIn),\n name: annotation.name,\n enable: Boolean(override?.enable) || Boolean(annotation.enable),\n hide: Boolean(override?.hide) || Boolean(annotation.hide),\n iconColor: annotation.iconColor,\n\n query: {\n kind: 'DataQuery',\n version: defaultDataQueryKind().version,\n group, // Annotation layer has a datasource type provided in runtime.\n spec: target || {},\n },\n },\n };\n\n // Add placement if it exists\n if (annotation.placement) {\n result.spec.placement = annotation.placement;\n }\n\n if (dsUID) {\n result.spec.query.datasource = {\n name: dsUID,\n };\n }\n\n // if legacy options is not an empty object, add it to the result\n if (Object.keys(legacyOptions).length > 0) {\n result.spec.legacyOptions = legacyOptions;\n }\n\n if (annotation.filter?.ids?.length) {\n result.spec.filter = annotation.filter;\n }\n\n // TODO: add mappings\n\n return result;\n}\n\nexport function transformV2ToV1AnnotationQuery(annotation: AnnotationQueryKind): AnnotationQuery {\n let { query: dataQuery, ...annotationQuery } = annotation.spec;\n\n // Mapping from AnnotationQueryKind to AnnotationQuery used by scenes.\n let annoQuerySpec: AnnotationQuery = {\n enable: annotation.spec.enable,\n hide: annotation.spec.hide,\n iconColor: annotation.spec.iconColor,\n name: annotation.spec.name,\n // TOOO: mappings\n };\n\n // Add placement if it exists\n if (annotation.spec.placement) {\n annoQuerySpec.placement = annotation.spec.placement;\n }\n\n if (Object.keys(dataQuery.spec).length > 0) {\n // @ts-expect-error DataQueryKind spec should be typed as DataQuery interface\n annoQuerySpec.target = {\n ...dataQuery?.spec,\n };\n }\n\n if (annotation.spec.builtIn) {\n annoQuerySpec.type = 'dashboard';\n annoQuerySpec.builtIn = 1;\n }\n\n if (annotation.spec.filter) {\n annoQuerySpec.filter = annotation.spec.filter;\n }\n\n // some annotations will contain in the legacyOptions properties that need to be\n // added to the root level AnnotationQuery\n if (annotationQuery.legacyOptions) {\n annoQuerySpec = {\n ...annoQuerySpec,\n ...annotationQuery.legacyOptions,\n };\n }\n\n // get data source from annotation query\n const datasource = getRuntimePanelDataSource(dataQuery);\n\n annoQuerySpec.datasource = datasource;\n\n return annoQuerySpec;\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nimport { config } from '@grafana/runtime';\n\nexport const DEFAULT_RANGE = {\n from: `now-${config.exploreDefaultTimeOffset}`,\n to: 'now',\n};\n\nexport const randomId = () => uuidv4().slice(0, 12);\n\nexport const DEFAULT_TAG_FILTERS = {\n id: randomId(),\n operator: '=',\n};\n\nexport const DEFAULT_SPAN_FILTERS = {\n spanNameOperator: '=',\n serviceNameOperator: '=',\n fromOperator: '>',\n toOperator: '<',\n tags: [DEFAULT_TAG_FILTERS],\n matchesOnly: false,\n criticalPathOnly: false,\n};\n","import { createSlice, Draft, PayloadAction } from '@reduxjs/toolkit';\n\nimport { DataSourceInstanceSettings, LoadingState } from '@grafana/data';\n\nimport { LibraryElementDTO } from '../../library-panels/types';\n\nexport enum DashboardSource {\n Gcom = 0,\n Json = 1,\n}\n\nexport interface ImportDashboardDTO {\n title: string;\n uid: string;\n gnetId: string;\n constants: string[];\n dataSources: DataSourceInstanceSettings[];\n elements: LibraryElementDTO[];\n folder: { uid: string; title?: string };\n}\n\nexport enum InputType {\n DataSource = 'datasource',\n Constant = 'constant',\n LibraryPanel = 'libraryPanel',\n}\n\nexport enum LibraryPanelInputState {\n New = 'new',\n Exists = 'exists',\n Different = 'different',\n}\n\nexport interface DashboardInput {\n name: string;\n label: string;\n description?: string;\n info: string;\n value: string;\n type: InputType;\n}\n\nexport interface DataSourceInput extends DashboardInput {\n pluginId: string;\n}\n\nexport interface LibraryPanelInput {\n model: LibraryElementDTO;\n state: LibraryPanelInputState;\n}\n\nexport interface DashboardInputs {\n dataSources: DataSourceInput[];\n constants: DashboardInput[];\n libraryPanels: LibraryPanelInput[];\n}\n\nexport interface ImportDashboardState {\n meta: { updatedAt: string; orgName: string };\n dashboard: any;\n source: DashboardSource;\n inputs: DashboardInputs;\n state: LoadingState;\n}\n\nexport const initialImportDashboardState: ImportDashboardState = {\n meta: { updatedAt: '', orgName: '' },\n dashboard: {},\n source: DashboardSource.Json,\n inputs: {} as DashboardInputs,\n state: LoadingState.NotStarted,\n};\n\nconst importDashboardSlice = createSlice({\n name: 'manageDashboards',\n initialState: initialImportDashboardState,\n reducers: {\n setGcomDashboard: (state: Draft<ImportDashboardState>, action: PayloadAction<any>) => {\n state.dashboard = {\n ...action.payload.json,\n id: null,\n };\n state.meta = { updatedAt: action.payload.updatedAt, orgName: action.payload.orgName };\n state.source = DashboardSource.Gcom;\n state.state = LoadingState.Done;\n },\n setJsonDashboard: (state: Draft<ImportDashboardState>, action: PayloadAction<any>) => {\n state.dashboard = {\n ...action.payload,\n id: null,\n };\n state.meta = initialImportDashboardState.meta;\n state.source = DashboardSource.Json;\n state.state = LoadingState.Done;\n },\n clearDashboard: (state: Draft<ImportDashboardState>) => {\n state.dashboard = {};\n state.state = LoadingState.NotStarted;\n },\n setInputs: (state: Draft<ImportDashboardState>, action: PayloadAction<any[]>) => {\n state.inputs = {\n dataSources: action.payload.filter((p) => p.type === InputType.DataSource),\n constants: action.payload.filter((p) => p.type === InputType.Constant),\n libraryPanels: state.inputs.libraryPanels || [],\n };\n },\n setLibraryPanelInputs: (state: Draft<ImportDashboardState>, action: PayloadAction<LibraryPanelInput[]>) => {\n state.inputs.libraryPanels = action.payload;\n },\n fetchFailed: (state: Draft<ImportDashboardState>) => {\n state.dashboard = {};\n state.state = LoadingState.Error;\n },\n fetchDashboard: (state: Draft<ImportDashboardState>) => {\n state.state = LoadingState.Loading;\n },\n },\n});\n\nexport const {\n clearDashboard,\n setInputs,\n setGcomDashboard,\n setJsonDashboard,\n setLibraryPanelInputs,\n fetchFailed,\n fetchDashboard,\n} = importDashboardSlice.actions;\n\nexport const importDashboardReducer = importDashboardSlice.reducer;\n\nexport default {\n importDashboard: importDashboardReducer,\n};\n","import { SpanStatus } from '@opentelemetry/api';\nimport { collectorTypes } from '@opentelemetry/exporter-collector';\nimport { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';\nimport { isEqual } from 'lodash';\n\nimport {\n createDataFrame,\n createTheme,\n DataFrame,\n DataLink,\n DataLinkConfigOrigin,\n DataQueryResponse,\n DataSourceInstanceSettings,\n DataSourceJsonData,\n Field,\n FieldDTO,\n FieldType,\n getDisplayProcessor,\n MutableDataFrame,\n toDataFrame,\n TraceKeyValuePair,\n TraceLog,\n TraceSpanReference,\n TraceSpanRow,\n} from '@grafana/data';\nimport { createNodeGraphFrames, TraceToProfilesData } from '@grafana/o11y-ds-frontend';\nimport { getDataSourceSrv } from '@grafana/runtime';\n\nimport { SearchTableType } from './dataquery.gen';\nimport { Span, SpanAttributes, Spanset, TempoJsonData, TraceSearchMetadata } from './types';\n\nfunction getAttributeValue(value: collectorTypes.opentelemetryProto.common.v1.AnyValue): any {\n if (value.stringValue) {\n return value.stringValue;\n }\n\n if (value.boolValue !== undefined) {\n return Boolean(value.boolValue);\n }\n\n if (value.intValue !== undefined) {\n return Number.parseInt(String(value.intValue), 10);\n }\n\n if (value.doubleValue) {\n return Number.parseFloat(String(value.doubleValue));\n }\n\n if (value.arrayValue) {\n const arrayValue = [];\n for (const arValue of value.arrayValue.values) {\n arrayValue.push(getAttributeValue(arValue));\n }\n return arrayValue;\n }\n\n return '';\n}\n\nfunction resourceToProcess(resource: collectorTypes.opentelemetryProto.resource.v1.Resource | undefined) {\n const serviceTags: TraceKeyValuePair[] = [];\n let serviceName = 'OTLPResourceNoServiceName';\n if (!resource) {\n return { serviceName, serviceTags };\n }\n\n for (const attribute of resource.attributes) {\n if (attribute.key === SemanticResourceAttributes.SERVICE_NAME) {\n serviceName = attribute.value.stringValue || serviceName;\n }\n serviceTags.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n\n return { serviceName, serviceTags };\n}\n\nfunction getSpanTags(span: collectorTypes.opentelemetryProto.trace.v1.Span): TraceKeyValuePair[] {\n const spanTags: TraceKeyValuePair[] = [];\n\n if (span.attributes) {\n for (const attribute of span.attributes) {\n spanTags.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n }\n\n return spanTags;\n}\n\nfunction getSpanKind(span: collectorTypes.opentelemetryProto.trace.v1.Span) {\n let kind = undefined;\n if (span.kind) {\n const split = span.kind.toString().toLowerCase().split('_');\n kind = split.length ? split[split.length - 1] : span.kind.toString();\n }\n return kind;\n}\n\nfunction getReferences(span: collectorTypes.opentelemetryProto.trace.v1.Span) {\n const references: TraceSpanReference[] = [];\n if (span.links) {\n for (const link of span.links) {\n const { traceId, spanId } = link;\n const tags: TraceKeyValuePair[] = [];\n if (link.attributes) {\n for (const attribute of link.attributes) {\n tags.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n }\n references.push({ traceID: traceId, spanID: spanId, tags });\n }\n }\n\n return references;\n}\n\nfunction getLogs(span: collectorTypes.opentelemetryProto.trace.v1.Span) {\n const logs: TraceLog[] = [];\n if (span.events) {\n for (const event of span.events) {\n const fields: TraceKeyValuePair[] = [];\n if (event.attributes) {\n for (const attribute of event.attributes) {\n fields.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n }\n logs.push({ fields, timestamp: event.timeUnixNano / 1000000, name: event.name });\n }\n }\n\n return logs;\n}\n\nexport function transformFromOTLP(\n traceData: collectorTypes.opentelemetryProto.trace.v1.ResourceSpans[],\n nodeGraph = false\n): DataQueryResponse {\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string, values: [] },\n { name: 'spanID', type: FieldType.string, values: [] },\n { name: 'parentSpanID', type: FieldType.string, values: [] },\n { name: 'operationName', type: FieldType.string, values: [] },\n { name: 'serviceName', type: FieldType.string, values: [] },\n { name: 'kind', type: FieldType.string, values: [] },\n { name: 'statusCode', type: FieldType.number, values: [] },\n { name: 'statusMessage', type: FieldType.string, values: [] },\n { name: 'instrumentationLibraryName', type: FieldType.string, values: [] },\n { name: 'instrumentationLibraryVersion', type: FieldType.string, values: [] },\n { name: 'traceState', type: FieldType.string, values: [] },\n { name: 'serviceTags', type: FieldType.other, values: [] },\n { name: 'startTime', type: FieldType.number, values: [] },\n { name: 'duration', type: FieldType.number, values: [] },\n { name: 'logs', type: FieldType.other, values: [] },\n { name: 'references', type: FieldType.other, values: [] },\n { name: 'tags', type: FieldType.other, values: [] },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'otlp',\n },\n },\n });\n try {\n for (const data of traceData) {\n const { serviceName, serviceTags } = resourceToProcess(data.resource);\n for (const librarySpan of data.instrumentationLibrarySpans) {\n for (const span of librarySpan.spans) {\n frame.add({\n traceID: span.traceId,\n spanID: span.spanId,\n parentSpanID: span.parentSpanId || '',\n operationName: span.name || '',\n serviceName,\n kind: getSpanKind(span),\n statusCode: span.status?.code,\n statusMessage: span.status?.message,\n instrumentationLibraryName: librarySpan.instrumentationLibrary?.name,\n instrumentationLibraryVersion: librarySpan.instrumentationLibrary?.version,\n traceState: span.traceState,\n serviceTags,\n startTime: span.startTimeUnixNano! / 1000000,\n duration: (span.endTimeUnixNano! - span.startTimeUnixNano!) / 1000000,\n tags: getSpanTags(span),\n logs: getLogs(span),\n references: getReferences(span),\n });\n }\n }\n }\n } catch (error) {\n console.error(error);\n return { error: { message: 'JSON is not valid OpenTelemetry format: ' + error }, data: [] };\n }\n\n let data = [frame];\n if (nodeGraph) {\n data.push(...(createNodeGraphFrames(frame) as MutableDataFrame[]));\n }\n\n return { data };\n}\n\n/**\n * Transforms trace dataframes to the OpenTelemetry format\n */\nexport function transformToOTLP(data: MutableDataFrame): {\n batches: collectorTypes.opentelemetryProto.trace.v1.ResourceSpans[];\n} {\n let result: { batches: collectorTypes.opentelemetryProto.trace.v1.ResourceSpans[] } = {\n batches: [],\n };\n\n // Lookup object to see which batch contains spans for which services\n let services: { [key: string]: number } = {};\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n\n // Group spans based on service\n if (!services[span.serviceName]) {\n services[span.serviceName] = result.batches.length;\n result.batches.push({\n resource: {\n attributes: [],\n droppedAttributesCount: 0,\n },\n instrumentationLibrarySpans: [\n {\n spans: [],\n },\n ],\n });\n }\n\n let batchIndex = services[span.serviceName];\n\n // Populate resource attributes from service tags\n if (result.batches[batchIndex].resource!.attributes.length === 0) {\n result.batches[batchIndex].resource!.attributes = tagsToAttributes(span.serviceTags);\n }\n\n // Populate instrumentation library if it exists\n if (!result.batches[batchIndex].instrumentationLibrarySpans[0].instrumentationLibrary) {\n if (span.instrumentationLibraryName) {\n result.batches[batchIndex].instrumentationLibrarySpans[0].instrumentationLibrary = {\n name: span.instrumentationLibraryName,\n version: span.instrumentationLibraryVersion ? span.instrumentationLibraryVersion : '',\n };\n }\n }\n\n result.batches[batchIndex].instrumentationLibrarySpans[0].spans.push({\n traceId: span.traceID.padStart(32, '0'),\n spanId: span.spanID,\n parentSpanId: span.parentSpanID || '',\n traceState: span.traceState || '',\n name: span.operationName,\n kind: getOTLPSpanKind(span.kind) as any,\n startTimeUnixNano: span.startTime * 1000000,\n endTimeUnixNano: (span.startTime + span.duration) * 1000000,\n attributes: span.tags ? tagsToAttributes(span.tags) : [],\n droppedAttributesCount: 0,\n droppedEventsCount: 0,\n droppedLinksCount: 0,\n status: getOTLPStatus(span),\n events: getOTLPEvents(span.logs),\n links: getOTLPReferences(span.references),\n });\n }\n\n return result;\n}\n\nfunction getOTLPSpanKind(kind: string): string | undefined {\n let spanKind = undefined;\n if (kind) {\n switch (kind) {\n case 'server':\n spanKind = 'SPAN_KIND_SERVER';\n break;\n case 'client':\n spanKind = 'SPAN_KIND_CLIENT';\n break;\n case 'producer':\n spanKind = 'SPAN_KIND_PRODUCER';\n break;\n case 'consumer':\n spanKind = 'SPAN_KIND_CONSUMER';\n break;\n case 'internal':\n spanKind = 'SPAN_KIND_INTERNAL';\n break;\n }\n }\n return spanKind;\n}\n\n/**\n * Converts key-value tags to OTLP attributes and removes tags added by Grafana\n */\nfunction tagsToAttributes(tags: TraceKeyValuePair[]): collectorTypes.opentelemetryProto.common.v1.KeyValue[] {\n return tags.reduce<collectorTypes.opentelemetryProto.common.v1.KeyValue[]>(\n (attributes, tag) => [...attributes, { key: tag.key, value: toAttributeValue(tag) }],\n []\n );\n}\n\n/**\n * Returns the correct OTLP AnyValue based on the value of the tag value\n */\nfunction toAttributeValue(tag: TraceKeyValuePair): collectorTypes.opentelemetryProto.common.v1.AnyValue {\n if (typeof tag.value === 'string') {\n return { stringValue: tag.value };\n } else if (typeof tag.value === 'boolean') {\n return { boolValue: tag.value };\n } else if (typeof tag.value === 'number') {\n if (tag.value % 1 === 0) {\n return { intValue: tag.value };\n } else {\n return { doubleValue: tag.value };\n }\n } else if (typeof tag.value === 'object') {\n if (Array.isArray(tag.value)) {\n const values: collectorTypes.opentelemetryProto.common.v1.AnyValue[] = [];\n for (const val of tag.value) {\n values.push(toAttributeValue(val));\n }\n\n return { arrayValue: { values } };\n }\n }\n return { stringValue: tag.value };\n}\n\nfunction getOTLPStatus(span: TraceSpanRow): SpanStatus | undefined {\n let status = undefined;\n if (span.statusCode !== undefined) {\n status = {\n code: span.statusCode,\n message: span.statusMessage ? span.statusMessage : '',\n };\n }\n return status;\n}\n\nfunction getOTLPEvents(logs: TraceLog[]): collectorTypes.opentelemetryProto.trace.v1.Span.Event[] | undefined {\n if (!logs || !logs.length) {\n return undefined;\n }\n\n let events: collectorTypes.opentelemetryProto.trace.v1.Span.Event[] = [];\n for (const log of logs) {\n let event: collectorTypes.opentelemetryProto.trace.v1.Span.Event = {\n timeUnixNano: log.timestamp * 1000000,\n attributes: [],\n droppedAttributesCount: 0,\n name: log.name || '',\n };\n for (const field of log.fields) {\n event.attributes!.push({\n key: field.key,\n value: toAttributeValue(field),\n });\n }\n events.push(event);\n }\n return events;\n}\n\nfunction getOTLPReferences(\n references: TraceSpanReference[]\n): collectorTypes.opentelemetryProto.trace.v1.Span.Link[] | undefined {\n if (!references || !references.length) {\n return undefined;\n }\n\n let links: collectorTypes.opentelemetryProto.trace.v1.Span.Link[] = [];\n for (const ref of references) {\n let link: collectorTypes.opentelemetryProto.trace.v1.Span.Link = {\n traceId: ref.traceID,\n spanId: ref.spanID,\n attributes: [],\n droppedAttributesCount: 0,\n };\n if (ref.tags?.length) {\n for (const tag of ref.tags) {\n link.attributes?.push({\n key: tag.key,\n value: toAttributeValue(tag),\n });\n }\n }\n links.push(link);\n }\n return links;\n}\n\nexport const RelatedProfilesTitle = 'Related profiles';\n\nexport function transformTrace(\n response: DataQueryResponse,\n instanceSettings: DataSourceInstanceSettings<TempoJsonData>,\n nodeGraph = false\n): DataQueryResponse {\n const frame = response.data[0];\n\n if (!frame) {\n return emptyDataQueryResponse;\n }\n\n // Get profiles links\n const traceToProfilesData: TraceToProfilesData | undefined = instanceSettings?.jsonData;\n const traceToProfilesOptions = traceToProfilesData?.tracesToProfiles;\n let profilesDataSourceSettings: DataSourceInstanceSettings<DataSourceJsonData> | undefined;\n if (traceToProfilesOptions?.datasourceUid) {\n profilesDataSourceSettings = getDataSourceSrv().getInstanceSettings(traceToProfilesOptions.datasourceUid);\n }\n\n if (traceToProfilesOptions && profilesDataSourceSettings) {\n const customQuery = traceToProfilesOptions.customQuery ? traceToProfilesOptions.query : undefined;\n const dataLink: DataLink = {\n title: RelatedProfilesTitle,\n url: '',\n internal: {\n datasourceUid: profilesDataSourceSettings.uid,\n datasourceName: profilesDataSourceSettings.name,\n query: {\n labelSelector: customQuery ? customQuery : '{${__tags}}',\n groupBy: [],\n profileTypeId: traceToProfilesOptions.profileTypeId ?? '',\n queryType: 'profile',\n spanSelector: ['${__span.tags[\"pyroscope.profile.id\"]}'],\n refId: 'profile',\n },\n },\n origin: DataLinkConfigOrigin.Datasource,\n };\n\n frame.fields.forEach((field: Field) => {\n if (field.name === 'tags') {\n field.config.links = [dataLink];\n }\n });\n }\n\n let data = [...response.data];\n if (nodeGraph) {\n data.push(...createNodeGraphFrames(toDataFrame(frame)));\n }\n\n return {\n ...response,\n data,\n };\n}\n\nfunction transformToTraceData(data: TraceSearchMetadata) {\n return {\n traceID: data.traceID,\n startTime: parseInt(data.startTimeUnixNano!, 10) / 1000000,\n traceDuration: data.durationMs,\n traceService: data.rootServiceName || '',\n traceName: data.rootTraceName || '',\n };\n}\n\nexport function enhanceTraceQlMetricsResponse(\n data: DataQueryResponse,\n instanceSettings: DataSourceInstanceSettings\n): DataQueryResponse {\n data.data\n ?.filter((f) => f.name === 'exemplar' && f.meta?.dataTopic === 'annotations')\n .map((frame) => {\n const traceIDField = frame.fields.find((field: Field) => field.name === 'traceId');\n if (traceIDField) {\n const links = getDataLinks(instanceSettings);\n const existingLinks = traceIDField.config.links || [];\n\n // Filter out links that already exist\n const newLinks = links.filter(\n (link) =>\n !existingLinks.some(\n (existing: DataLink) =>\n existing.title === link.title &&\n existing.internal?.datasourceUid === link.internal?.datasourceUid &&\n isEqual(existing.internal?.query, link.internal?.query)\n )\n );\n\n traceIDField.config.links = existingLinks.length ? [...existingLinks, ...newLinks] : newLinks;\n }\n return frame;\n });\n return data;\n}\n\nfunction getDataLinks(instanceSettings: DataSourceInstanceSettings): DataLink[] {\n const dataLinks: DataLink[] = [];\n\n if (instanceSettings.uid) {\n dataLinks.push({\n title: 'View trace',\n url: '',\n internal: {\n query: { query: '${__value.raw}', queryType: 'traceql' },\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings?.name ?? 'Data source not found',\n },\n });\n }\n return dataLinks;\n}\n\nexport function formatTraceQLResponse(\n data: TraceSearchMetadata[],\n instanceSettings: DataSourceInstanceSettings,\n tableType?: SearchTableType\n) {\n switch (tableType) {\n case SearchTableType.Spans:\n return createTableFrameFromTraceQlQueryAsSpans(data, instanceSettings);\n case SearchTableType.Raw:\n return createDataFrameFromTraceQlQuery(data);\n default:\n return createTableFrameFromTraceQlQuery(data, instanceSettings);\n }\n}\n\nfunction createDataFrameFromTraceQlQuery(data: TraceSearchMetadata[]) {\n return [\n createDataFrame({\n name: 'Raw response',\n refId: 'raw',\n fields: [{ name: 'response', type: FieldType.string, values: [JSON.stringify(data, null, 2)] }],\n }),\n ];\n}\n\n/**\n * Create data frame while adding spans for each trace into a subtable.\n * @param data\n * @param instanceSettings\n */\nexport function createTableFrameFromTraceQlQuery(\n data: TraceSearchMetadata[],\n instanceSettings: DataSourceInstanceSettings\n): DataFrame[] {\n const frame = createDataFrame({\n name: 'Traces',\n refId: 'traces',\n fields: [\n {\n name: 'traceID',\n type: FieldType.string,\n config: {\n unit: 'string',\n displayNameFromDS: 'Trace ID',\n custom: {\n width: 200,\n },\n links: [\n {\n title: 'Trace: ${__value.raw}',\n url: '',\n internal: {\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings.name,\n query: {\n query: '${__value.raw}',\n queryType: 'traceql',\n },\n },\n },\n ],\n },\n },\n {\n name: 'startTime',\n type: FieldType.time,\n config: {\n displayNameFromDS: 'Start time',\n custom: {\n width: 200,\n },\n },\n },\n { name: 'traceService', type: FieldType.string, config: { displayNameFromDS: 'Service' } },\n { name: 'traceName', type: FieldType.string, config: { displayNameFromDS: 'Name' } },\n {\n name: 'traceDuration',\n type: FieldType.number,\n config: {\n displayNameFromDS: 'Duration',\n unit: 'ms',\n custom: {\n width: 120,\n },\n },\n },\n {\n name: 'nested',\n type: FieldType.nestedFrames,\n },\n ],\n meta: {\n preferredVisualisationType: 'table',\n uniqueRowIdFields: [0],\n },\n });\n\n if (!data?.length) {\n return [frame];\n }\n frame.length = data.length;\n\n data\n // Show the most recent traces\n .sort((a, b) => parseInt(b?.startTimeUnixNano!, 10) / 1000000 - parseInt(a?.startTimeUnixNano!, 10) / 1000000)\n .forEach((trace) => {\n const traceData: TraceTableData = transformToTraceData(trace);\n frame.fields[0].values.push(traceData.traceID);\n frame.fields[1].values.push(traceData.startTime);\n frame.fields[2].values.push(traceData.traceService);\n frame.fields[3].values.push(traceData.traceName);\n\n // Note: this is a workaround to display the duration in the table when it is <1ms\n // and the duration is not available in the trace data response.\n frame.fields[4].values.push(traceData.traceDuration ? traceData.traceDuration : '<1ms');\n\n if (trace.spanSets) {\n frame.fields[5].values.push(\n trace.spanSets.map((spanSet: Spanset) => {\n return traceSubFrame(trace, spanSet, instanceSettings);\n })\n );\n } else if (trace.spanSet) {\n frame.fields[5].values.push([traceSubFrame(trace, trace.spanSet, instanceSettings)]);\n }\n });\n\n return [frame];\n}\n\nexport function createTableFrameFromTraceQlQueryAsSpans(\n data: TraceSearchMetadata[] | undefined,\n instanceSettings: DataSourceInstanceSettings\n): DataFrame[] {\n const spanDynamicAttrs: Record<string, FieldDTO> = {};\n let hasNameAttribute = false;\n\n data?.forEach((trace) =>\n getSpanSets(trace).forEach((ss) => {\n ss.attributes?.forEach((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n };\n });\n ss.spans.forEach((span) => {\n if (span.name) {\n hasNameAttribute = true;\n }\n span.attributes?.forEach((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n };\n });\n });\n })\n );\n\n const frame = new MutableDataFrame({\n name: 'Spans',\n refId: 'traces',\n fields: [\n {\n name: 'traceIdHidden',\n type: FieldType.string,\n config: {\n custom: { hidden: true },\n },\n },\n {\n name: 'traceService',\n type: FieldType.string,\n config: {\n displayNameFromDS: 'Trace Service',\n custom: {\n width: 200,\n },\n },\n },\n {\n name: 'traceName',\n type: FieldType.string,\n config: {\n displayNameFromDS: 'Trace Name',\n custom: {\n width: 200,\n },\n },\n },\n {\n name: 'spanID',\n type: FieldType.string,\n config: {\n unit: 'string',\n displayNameFromDS: 'Span ID',\n custom: {\n width: 200,\n },\n links: [\n {\n title: 'Span: ${__value.raw}',\n url: '',\n internal: {\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings.name,\n query: {\n query: '${__data.fields.traceIdHidden}',\n queryType: 'traceql',\n },\n panelsState: {\n trace: {\n spanId: '${__value.raw}',\n },\n },\n },\n },\n ],\n },\n },\n {\n name: 'time',\n type: FieldType.time,\n config: {\n displayNameFromDS: 'Start time',\n },\n },\n {\n name: 'name',\n type: FieldType.string,\n config: { displayNameFromDS: 'Name', custom: { hidden: !hasNameAttribute } },\n },\n ...Object.values(spanDynamicAttrs).sort((a, b) => a.name.localeCompare(b.name)),\n {\n name: 'duration',\n type: FieldType.number,\n config: {\n displayNameFromDS: 'Duration',\n unit: 'ns',\n custom: {\n width: 120,\n },\n },\n },\n ],\n meta: {\n preferredVisualisationType: 'table',\n },\n });\n\n if (!data || !data.length) {\n return [frame];\n }\n\n data\n // Show the most recent traces\n .sort((a, b) => parseInt(b?.startTimeUnixNano!, 10) / 1000000 - parseInt(a?.startTimeUnixNano!, 10) / 1000000)\n .forEach((trace) => {\n getSpanSets(trace).forEach((spanSet) => {\n spanSet.spans.forEach((span) => {\n frame.add(transformSpanToTraceData(span, spanSet, trace));\n });\n });\n });\n\n return [frame];\n}\n\n/**\n * Get the spansets of a trace.\n *\n * Field `spanSets` is preferred to `spanSet` since the latter is deprecated in Tempo, but we\n * support both for backward compatibility.\n *\n * @param trace a trace\n * @returns the spansets of the trace, if existing\n */\nconst getSpanSets = (trace: TraceSearchMetadata): Spanset[] => {\n return trace.spanSets || (trace.spanSet ? [trace.spanSet] : []);\n};\n\nconst traceSubFrame = (\n trace: TraceSearchMetadata,\n spanSet: Spanset,\n instanceSettings: DataSourceInstanceSettings\n): DataFrame => {\n const spanDynamicAttrs: Record<string, FieldDTO> = {};\n let hasNameAttribute = false;\n\n spanSet.attributes?.map((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n values: [],\n };\n });\n spanSet.spans.forEach((span) => {\n if (span.name) {\n hasNameAttribute = true;\n }\n span.attributes?.forEach((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n values: [],\n };\n });\n });\n\n const subFrame = new MutableDataFrame({\n fields: [\n {\n name: 'traceIdHidden',\n type: FieldType.string,\n config: {\n custom: { hidden: true },\n },\n values: [],\n },\n {\n name: 'spanID',\n type: FieldType.string,\n values: [],\n config: {\n unit: 'string',\n displayNameFromDS: 'Span ID',\n custom: {\n width: 200,\n },\n links: [\n {\n title: 'Span: ${__value.raw}',\n url: '',\n internal: {\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings.name,\n query: {\n query: '${__data.fields.traceIdHidden}',\n queryType: 'traceql',\n },\n panelsState: {\n trace: {\n spanId: '${__value.raw}',\n },\n },\n },\n },\n ],\n },\n },\n {\n name: 'time',\n type: FieldType.time,\n config: {\n displayNameFromDS: 'Start time',\n custom: {\n width: 200,\n },\n },\n },\n {\n name: 'name',\n type: FieldType.string,\n values: [],\n config: { displayNameFromDS: 'Name', custom: { hidden: !hasNameAttribute } },\n },\n ...Object.values(spanDynamicAttrs).sort((a, b) => a.name.localeCompare(b.name)),\n {\n name: 'duration',\n type: FieldType.number,\n values: [],\n config: {\n displayNameFromDS: 'Duration',\n unit: 'ns',\n custom: {\n width: 120,\n },\n },\n },\n ],\n meta: {\n preferredVisualisationType: 'table',\n },\n });\n\n // TODO: this should be done in `applyFieldOverrides` instead recursively for the nested `DataFrames`\n const theme = createTheme();\n for (const field of subFrame.fields) {\n field.display = getDisplayProcessor({ field, theme });\n }\n\n spanSet.spans.forEach((span) => {\n subFrame.add(transformSpanToTraceData(span, spanSet, trace));\n });\n\n return subFrame;\n};\n\ninterface TraceTableData {\n [key: string]: string | number | boolean | undefined; // dynamic attribute name\n traceID?: string;\n spanID?: string;\n startTime?: number;\n name?: string;\n traceDuration?: number;\n}\n\nfunction transformSpanToTraceData(span: Span, spanSet: Spanset, trace: TraceSearchMetadata): TraceTableData {\n const spanStartTimeUnixMs = parseInt(span.startTimeUnixNano, 10) / 1000000;\n\n const data: TraceTableData = {\n traceIdHidden: trace.traceID,\n traceService: trace.rootServiceName || '',\n traceName: trace.rootTraceName || '',\n spanID: span.spanID,\n time: spanStartTimeUnixMs,\n duration: parseInt(span.durationNanos, 10),\n name: span.name,\n };\n\n let attrs: SpanAttributes[] = [];\n if (spanSet.attributes) {\n attrs = attrs.concat(spanSet.attributes);\n }\n if (span.attributes) {\n attrs = attrs.concat(span.attributes);\n }\n\n attrs.forEach((attr) => {\n if (attr.value.boolValue || attr.value.Value?.bool_value) {\n data[attr.key] = attr.value.boolValue || attr.value.Value?.bool_value;\n }\n if (attr.value.doubleValue || attr.value.Value?.double_value) {\n data[attr.key] = attr.value.doubleValue || attr.value.Value?.double_value;\n }\n if (attr.value.intValue || attr.value.Value?.int_value) {\n data[attr.key] = attr.value.intValue || attr.value.Value?.int_value;\n }\n if (attr.value.stringValue || attr.value.Value?.string_value) {\n data[attr.key] = attr.value.stringValue || attr.value.Value?.string_value;\n }\n });\n\n return data;\n}\n\nconst emptyDataQueryResponse = {\n data: [\n new MutableDataFrame({\n fields: [\n {\n name: 'trace',\n type: FieldType.trace,\n values: [],\n },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'otlp',\n },\n },\n }),\n ],\n};\n","import { ScopedVars, TimeRange, TypedVariableModel } from '@grafana/data';\n\n/**\n * Can be used to gain more information about an interpolation operation\n */\nexport interface VariableInterpolation {\n /** The full matched expression including, example: ${varName.field:regex} */\n match: string;\n /** In the expression ${varName.field:regex} variableName is varName */\n variableName: string;\n /** In the expression ${varName.fields[0].name:regex} the fieldPath is fields[0].name */\n fieldPath?: string;\n /** In the expression ${varName:regex} the regex part is the format */\n format?: string;\n /** The formatted value of the variable expresion. Will equal match when variable not found or scopedVar was undefined or null **/\n value: string;\n // When value === match this will be true, meaning the variable was not found\n found?: boolean;\n}\n\n/**\n * Via the TemplateSrv consumers get access to all the available template variables\n * that can be used within the current active dashboard.\n *\n * For a more in-depth description visit: https://grafana.com/docs/grafana/latest/reference/templating\n * @public\n */\nexport interface TemplateSrv {\n /**\n * List the dashboard variables\n */\n getVariables(): TypedVariableModel[];\n\n /**\n * Replace the values within the target string. See also {@link InterpolateFunction}\n *\n * Note: interpolations array is being mutated by replace function by adding information about variables that\n * have been interpolated during replacement. Variables that were specified in the target but not found in\n * the list of available variables are also added to the array. See {@link VariableInterpolation} for more details.\n *\n * @param {VariableInterpolation[]} interpolations an optional map that is updated with interpolated variables\n */\n replace(\n target?: string,\n scopedVars?: ScopedVars,\n format?: string | Function,\n interpolations?: VariableInterpolation[]\n ): string;\n\n /**\n * Checks if a target contains template variables.\n */\n containsTemplate(target?: string): boolean;\n\n /**\n * Update the current time range to be used when interpolating __from / __to variables.\n */\n updateTimeRange(timeRange: TimeRange): void;\n}\n\nlet singletonInstance: TemplateSrv;\n\n/**\n * Used during startup by Grafana to set the TemplateSrv so it is available\n * via the {@link getTemplateSrv} to the rest of the application.\n *\n * @internal\n */\nexport const setTemplateSrv = (instance: TemplateSrv) => {\n singletonInstance = instance;\n};\n\n/**\n * Used to retrieve the {@link TemplateSrv} that can be used to fetch available\n * template variables.\n *\n * @public\n */\nexport const getTemplateSrv = (): TemplateSrv => singletonInstance;\n","export enum SupportedPlugin {\n Incident = 'grafana-incident-app',\n OnCall = 'grafana-oncall-app',\n Irm = 'grafana-irm-app',\n MachineLearning = 'grafana-ml-app',\n Labels = 'grafana-labels-app',\n Slo = 'grafana-slo-app',\n}\n","import { Observable } from 'rxjs';\n\nimport { PluginExtensionComponent } from '@grafana/data';\n\ntype GetObservablePluginComponentsOptions = {\n context?: object | Record<string, unknown>;\n extensionPointId: string;\n limitPerPlugin?: number;\n};\n\nexport type GetObservablePluginComponents = (\n options: GetObservablePluginComponentsOptions\n) => Observable<PluginExtensionComponent[]>;\n\nlet singleton: GetObservablePluginComponents | undefined;\n\nexport function setGetObservablePluginComponents(fn: GetObservablePluginComponents): void {\n // We allow overriding the registry in tests\n if (singleton && process.env.NODE_ENV !== 'test') {\n throw new Error(\n 'setGetObservablePluginComponents() function should only be called once, when Grafana is starting.'\n );\n }\n\n singleton = fn;\n}\n\nexport function getObservablePluginComponents(\n options: GetObservablePluginComponentsOptions\n): Observable<PluginExtensionComponent[]> {\n if (!singleton) {\n throw new Error('getObservablePluginComponents() can only be used after the Grafana instance has started.');\n }\n\n return singleton(options);\n}\n","import { generatedAPI } from '@grafana/api-clients/rtkq/folder/v1beta1';\nimport { DescendantCount } from 'app/types/folders';\n\nimport { getParsedCounts } from './utils';\n\nexport const folderAPIv1beta1 = generatedAPI\n .enhanceEndpoints({\n endpoints: {\n getFolder: {\n providesTags: (result, error, arg) => (result ? [{ type: 'Folder', id: arg.name }] : []),\n },\n listFolder: {\n providesTags: (result) =>\n result\n ? [\n { type: 'Folder', id: 'LIST' },\n ...result.items\n .map((folder) => ({ type: 'Folder' as const, id: folder.metadata?.name }))\n .filter(Boolean),\n ]\n : [{ type: 'Folder', id: 'LIST' }],\n },\n deleteFolder: {\n // We don't want delete to invalidate getFolder tags, as that would lead to unnecessary 404s\n invalidatesTags: (result, error) => (error ? [] : [{ type: 'Folder', id: 'LIST' }]),\n },\n },\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getAffectedItems: builder.query<Record<string, number>, { folderUIDs: string[]; dashboardUIDs: string[] }>({\n // Similar to legacy API, don't cache this data as we don't have full knowledge of the descendant entities\n // and when they're created/deleted, so we can't easily know when this data is stale\n keepUnusedDataFor: 0,\n queryFn: async ({ folderUIDs, dashboardUIDs }, queryApi) => {\n const initialCounts: DescendantCount = {\n folders: folderUIDs.length,\n dashboards: dashboardUIDs.length,\n library_elements: 0,\n alertrules: 0,\n };\n\n const promises = folderUIDs.map(async (folderUID) =>\n queryApi.dispatch(generatedAPI.endpoints.getFolderCounts.initiate({ name: folderUID }))\n );\n try {\n const results = await Promise.all(promises);\n\n const mapped = results.reduce((acc, result) => {\n const { data, error } = result;\n if (error) {\n throw error;\n }\n\n const counts = getParsedCounts(data?.counts ?? []);\n acc.folders += counts.folders;\n acc.dashboards += counts.dashboards;\n acc.alertrules += counts.alertrules;\n acc.library_elements += counts.library_elements;\n return acc;\n }, initialCounts);\n\n return { data: mapped };\n } catch (error) {\n return { error };\n }\n },\n }),\n }),\n });\n\nexport const {\n useGetFolderQuery,\n useGetFolderParentsQuery,\n useDeleteFolderMutation,\n useCreateFolderMutation,\n useUpdateFolderMutation,\n useReplaceFolderMutation,\n useGetAffectedItemsQuery,\n} = folderAPIv1beta1;\n\n// eslint-disable-next-line no-barrel-files/no-barrel-files\nexport {\n type Folder,\n type FolderList,\n type CreateFolderApiArg,\n type ReplaceFolderApiArg,\n} from '@grafana/api-clients/rtkq/folder/v1beta1';\n","import { isArray, reduce } from 'lodash';\n\nimport { t } from '@grafana/i18n';\nimport { IconName } from '@grafana/ui';\nimport { QueryPart, QueryPartDef } from 'app/features/alerting/state/query_part';\n\nconst alertQueryDef = new QueryPartDef({\n type: 'query',\n params: [\n { name: 'queryRefId', type: 'string', dynamicLookup: true },\n {\n name: 'from',\n type: 'string',\n options: ['10s', '1m', '5m', '10m', '15m', '1h', '2h', '6h', '12h', '24h', '48h'],\n },\n { name: 'to', type: 'string', options: ['now', 'now-1m', 'now-5m', 'now-10m', 'now-1h'] },\n ],\n defaultParams: ['#A', '15m', 'now', 'avg'],\n});\n\nconst conditionTypes = [{ text: 'Query', value: 'query' }];\n\nconst alertStateSortScore = {\n alerting: 1,\n firing: 1,\n no_data: 2,\n pending: 3,\n ok: 4,\n paused: 5,\n inactive: 5,\n};\n\nexport enum EvalFunction {\n 'IsAbove' = 'gt',\n 'IsBelow' = 'lt',\n 'IsEqual' = 'eq',\n 'IsNotEqual' = 'ne',\n 'IsGreaterThanEqual' = 'gte',\n 'IsLessThanEqual' = 'lte',\n 'IsOutsideRange' = 'outside_range',\n 'IsWithinRange' = 'within_range',\n 'IsWithinRangeIncluded' = 'within_range_included',\n 'IsOutsideRangeIncluded' = 'outside_range_included',\n 'HasNoValue' = 'no_value',\n}\n\nconst evalFunctions = [\n { value: EvalFunction.IsAbove, text: 'IS ABOVE' },\n { value: EvalFunction.IsBelow, text: 'IS BELOW' },\n { value: EvalFunction.IsEqual, text: 'IS EQUAL TO' },\n { value: EvalFunction.IsNotEqual, text: 'IS NOT EQUAL TO' },\n { value: EvalFunction.IsGreaterThanEqual, text: 'IS ABOVE OR EQUAL TO' },\n { value: EvalFunction.IsLessThanEqual, text: 'IS BELOW OR EQUAL TO' },\n { value: EvalFunction.IsOutsideRange, text: 'IS OUTSIDE RANGE' },\n { value: EvalFunction.IsWithinRange, text: 'IS WITHIN RANGE' },\n { value: EvalFunction.IsOutsideRangeIncluded, text: 'IS OUTSIDE RANGE INCLUDED' },\n { value: EvalFunction.IsWithinRangeIncluded, text: 'IS WITHIN RANGE INCLUDED' },\n { value: EvalFunction.HasNoValue, text: 'HAS NO VALUE' },\n];\n\nconst evalOperators = [\n { text: 'OR', value: 'or' },\n { text: 'AND', value: 'and' },\n { text: 'LOGIC OR', value: 'logic-or' },\n];\n\nconst reducerTypes = [\n { text: 'avg()', value: 'avg' },\n { text: 'min()', value: 'min' },\n { text: 'max()', value: 'max' },\n { text: 'sum()', value: 'sum' },\n { text: 'count()', value: 'count' },\n { text: 'last()', value: 'last' },\n { text: 'median()', value: 'median' },\n { text: 'diff()', value: 'diff' },\n { text: 'diff_abs()', value: 'diff_abs' },\n { text: 'percent_diff()', value: 'percent_diff' },\n { text: 'percent_diff_abs()', value: 'percent_diff_abs' },\n { text: 'count_non_null()', value: 'count_non_null' },\n] as const;\n\nconst noDataModes = [\n { text: 'Alerting', value: 'alerting' },\n { text: 'No Data', value: 'no_data' },\n { text: 'Keep Last State', value: 'keep_state' },\n { text: 'Ok', value: 'ok' },\n];\n\nconst executionErrorModes = [\n { text: 'Alerting', value: 'alerting' },\n { text: 'Keep Last State', value: 'keep_state' },\n];\n\nfunction createReducerPart(model: any) {\n const def = new QueryPartDef({ type: model.type, defaultParams: [] });\n return new QueryPart(model, def);\n}\n\n// state can also contain a \"Reason\", ie. \"Alerting (NoData)\" which indicates that the actual state is \"Alerting\" but\n// the reason it is set to \"Alerting\" is \"NoData\"; a lack of data points to evaluate.\nfunction normalizeAlertState(state: string) {\n return state.toLowerCase().replace(/_/g, '').split(' ')[0];\n}\n\ninterface AlertStateDisplayModel {\n text: string;\n iconClass: IconName;\n stateClass: string;\n}\n\nfunction getStateDisplayModel(state: string): AlertStateDisplayModel {\n const normalizedState = normalizeAlertState(state);\n\n switch (normalizedState) {\n case 'normal':\n case 'ok': {\n return {\n text: t('alerting.get-state-display-model.text.ok', 'OK'),\n iconClass: 'heart',\n stateClass: 'alert-state-ok',\n };\n }\n case 'alerting': {\n return {\n text: t('alerting.get-state-display-model.text.alerting', 'ALERTING'),\n iconClass: 'heart-break',\n stateClass: 'alert-state-critical',\n };\n }\n case 'nodata': {\n return {\n text: t('alerting.get-state-display-model.text.no-data', 'NO DATA'),\n iconClass: 'question-circle',\n stateClass: 'alert-state-warning',\n };\n }\n case 'paused': {\n return {\n text: t('alerting.get-state-display-model.text.paused', 'PAUSED'),\n iconClass: 'pause',\n stateClass: 'alert-state-paused',\n };\n }\n case 'pending': {\n return {\n text: t('alerting.get-state-display-model.text.pending', 'PENDING'),\n iconClass: 'hourglass',\n stateClass: 'alert-state-warning',\n };\n }\n case 'recovering': {\n return {\n text: t('alerting.get-state-display-model.text.recovering', 'RECOVERING'),\n iconClass: 'hourglass',\n stateClass: 'alert-state-warning',\n };\n }\n\n case 'firing': {\n return {\n text: t('alerting.get-state-display-model.text.firing', 'FIRING'),\n iconClass: 'fire',\n stateClass: '',\n };\n }\n\n case 'inactive': {\n return {\n text: t('alerting.get-state-display-model.text.inactive', 'INACTIVE'),\n iconClass: 'check',\n stateClass: '',\n };\n }\n\n case 'error': {\n return {\n text: t('alerting.get-state-display-model.text.error', 'ERROR'),\n iconClass: 'heart-break',\n stateClass: 'alert-state-critical',\n };\n }\n\n case 'unknown':\n default: {\n return {\n text: t('alerting.get-state-display-model.text.unknown', 'UNKNOWN'),\n iconClass: 'question-circle',\n stateClass: '.alert-state-paused',\n };\n }\n }\n}\n\nfunction joinEvalMatches(matches: any, separator: string) {\n return reduce(\n matches,\n (res, ev) => {\n if (ev.metric !== undefined && ev.value !== undefined) {\n res.push(ev.metric + '=' + ev.value);\n }\n\n // For backwards compatibility . Should be be able to remove this after ~2017-06-01\n if (ev.Metric !== undefined && ev.Value !== undefined) {\n res.push(ev.Metric + '=' + ev.Value);\n }\n\n return res;\n },\n [] as string[]\n ).join(separator);\n}\n\nfunction getAlertAnnotationInfo(ah: any) {\n // backward compatibility, can be removed in grafana 5.x\n // old way stored evalMatches in data property directly,\n // new way stores it in evalMatches property on new data object\n\n if (isArray(ah.data)) {\n return joinEvalMatches(ah.data, ', ');\n } else if (isArray(ah.data.evalMatches)) {\n return joinEvalMatches(ah.data.evalMatches, ', ');\n }\n\n if (ah.data.error) {\n return 'Error: ' + ah.data.error;\n }\n\n return '';\n}\n\n// Copy of getAlertAnnotationInfo, used in annotation tooltip\nfunction getAlertAnnotationText(annotationData: any) {\n // backward compatibility, can be removed in grafana 5.x\n // old way stored evalMatches in data property directly,\n // new way stores it in evalMatches property on new data object\n\n if (isArray(annotationData)) {\n return joinEvalMatches(annotationData, ', ');\n } else if (isArray(annotationData.evalMatches)) {\n return joinEvalMatches(annotationData.evalMatches, ', ');\n }\n\n if (annotationData.error) {\n return 'Error: ' + annotationData.error;\n }\n\n return '';\n}\n\nexport default {\n alertQueryDef: alertQueryDef,\n getStateDisplayModel: getStateDisplayModel,\n conditionTypes: conditionTypes,\n evalFunctions: evalFunctions,\n evalOperators: evalOperators,\n noDataModes: noDataModes,\n executionErrorModes: executionErrorModes,\n reducerTypes: reducerTypes,\n createReducerPart: createReducerPart,\n getAlertAnnotationInfo: getAlertAnnotationInfo,\n getAlertAnnotationText: getAlertAnnotationText,\n alertStateSortScore: alertStateSortScore,\n};\n","import { css, cx } from '@emotion/css';\nimport { DetailedHTMLProps, HTMLAttributes } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\ntype Props = DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\n// TODO: Reimplement this with Box\n/**\n * @deprecated Use Box instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-deprecated-panelcontainer--docs\n */\nexport const PanelContainer = ({ children, className, ...props }: Props) => {\n const styles = useStyles2(getStyles);\n return (\n <div className={cx(styles, className)} {...props}>\n {children}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) =>\n css({\n backgroundColor: theme.components.panel.background,\n border: `1px solid ${theme.components.panel.borderColor}`,\n borderRadius: theme.shape.radius.default,\n });\n","import { CorsWorker as Worker } from 'app/core/utils/CorsWorker';\n\nexport const createWorker = () => new Worker(new URL('./DetectChangesWorker.ts', import.meta.url));\n","import { debounce } from 'lodash';\nimport { Unsubscribable } from 'rxjs';\n\nimport {\n SceneDataLayerSet,\n SceneDataTransformer,\n SceneGridLayout,\n SceneObjectStateChangedEvent,\n SceneQueryRunner,\n SceneRefreshPicker,\n SceneTimeRange,\n SceneVariableSet,\n VizPanel,\n behaviors,\n} from '@grafana/scenes';\nimport { createWorker } from 'app/features/dashboard-scene/saving/createDetectChangesWorker';\n\nimport { ConditionalRenderingData } from '../conditional-rendering/conditions/ConditionalRenderingData';\nimport { ConditionalRenderingTimeRangeSize } from '../conditional-rendering/conditions/ConditionalRenderingTimeRangeSize';\nimport { ConditionalRenderingVariable } from '../conditional-rendering/conditions/ConditionalRenderingVariable';\nimport { ConditionalRenderingGroup } from '../conditional-rendering/group/ConditionalRenderingGroup';\nimport { DashboardAnnotationsDataLayer } from '../scene/DashboardAnnotationsDataLayer';\nimport { DashboardControls } from '../scene/DashboardControls';\nimport { DashboardScene, PERSISTED_PROPS } from '../scene/DashboardScene';\nimport { LibraryPanelBehavior } from '../scene/LibraryPanelBehavior';\nimport { VizPanelLinks } from '../scene/PanelLinks';\nimport { AutoGridItem } from '../scene/layout-auto-grid/AutoGridItem';\nimport { AutoGridLayoutManager } from '../scene/layout-auto-grid/AutoGridLayoutManager';\nimport { DashboardGridItem } from '../scene/layout-default/DashboardGridItem';\nimport { RowItem } from '../scene/layout-rows/RowItem';\nimport { RowsLayoutManager } from '../scene/layout-rows/RowsLayoutManager';\nimport { TabItem } from '../scene/layout-tabs/TabItem';\nimport { TabsLayoutManager } from '../scene/layout-tabs/TabsLayoutManager';\nimport { PanelTimeRange } from '../scene/panel-timerange/PanelTimeRange';\nimport { isSceneVariableInstance } from '../settings/variables/utils';\n\nimport { DashboardChangeInfo } from './shared';\n\nexport class DashboardSceneChangeTracker {\n private _changeTrackerSub: Unsubscribable | undefined;\n private _changesWorker?: Worker;\n private _dashboard: DashboardScene;\n\n constructor(dashboard: DashboardScene) {\n this._dashboard = dashboard;\n }\n\n static isUpdatingPersistedState({ payload }: SceneObjectStateChangedEvent) {\n const partialUpdateKeys = Object.keys(payload.partialUpdate);\n\n // If there are no changes in the state, the check is not needed\n if (partialUpdateKeys.length === 0) {\n return false;\n }\n\n // Any change in the grid item should trigger a change detection\n // The PanelTimeRange includes the overrides configuration\n if (payload.changedObject instanceof DashboardGridItem || payload.changedObject instanceof PanelTimeRange) {\n return true;\n }\n // Panels contain a _renderCounter state prop which should not be marked as a change\n if (payload.changedObject instanceof VizPanel) {\n if (partialUpdateKeys.length > 1 || partialUpdateKeys[0] !== '_renderCounter') {\n return true;\n }\n }\n // SceneQueryRunner includes the DS configuration\n if (payload.changedObject instanceof SceneQueryRunner) {\n if (!Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'data')) {\n return true;\n }\n }\n // SceneDataTransformer includes the transformation configuration\n if (payload.changedObject instanceof SceneDataTransformer) {\n if (!Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'data')) {\n return true;\n }\n }\n if (payload.changedObject instanceof VizPanelLinks) {\n return true;\n }\n if (payload.changedObject instanceof SceneRefreshPicker) {\n if (\n Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'intervals') ||\n Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'refresh')\n ) {\n return true;\n }\n }\n if (payload.changedObject instanceof LibraryPanelBehavior) {\n if (Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'name')) {\n return true;\n }\n }\n if (payload.changedObject instanceof behaviors.CursorSync) {\n return true;\n }\n if (payload.changedObject instanceof SceneDataLayerSet) {\n return true;\n }\n if (payload.changedObject instanceof DashboardGridItem) {\n return true;\n }\n if (payload.changedObject instanceof SceneGridLayout) {\n return true;\n }\n if (payload.changedObject instanceof DashboardScene) {\n if (Object.keys(payload.partialUpdate).some((key) => PERSISTED_PROPS.includes(key))) {\n return true;\n }\n }\n if (payload.changedObject instanceof SceneTimeRange) {\n return true;\n }\n if (payload.changedObject instanceof DashboardControls) {\n if (Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'hideTimeControls')) {\n return true;\n }\n }\n if (payload.changedObject instanceof SceneVariableSet) {\n return true;\n }\n if (payload.changedObject instanceof DashboardAnnotationsDataLayer) {\n if (!Object.prototype.hasOwnProperty.call(payload.partialUpdate, 'data')) {\n return true;\n }\n }\n if (payload.changedObject instanceof behaviors.LiveNowTimer) {\n return true;\n }\n if (isSceneVariableInstance(payload.changedObject)) {\n return true;\n }\n\n if (payload.changedObject instanceof RowsLayoutManager) {\n return true;\n }\n if (payload.changedObject instanceof RowItem) {\n return true;\n }\n if (payload.changedObject instanceof TabsLayoutManager) {\n return true;\n }\n if (payload.changedObject instanceof TabItem) {\n return true;\n }\n if (payload.changedObject instanceof AutoGridLayoutManager) {\n return true;\n }\n if (payload.changedObject instanceof AutoGridItem) {\n return true;\n }\n\n if (payload.changedObject instanceof ConditionalRenderingVariable) {\n return true;\n }\n if (payload.changedObject instanceof ConditionalRenderingTimeRangeSize) {\n return true;\n }\n if (payload.changedObject instanceof ConditionalRenderingGroup) {\n return true;\n }\n if (payload.changedObject instanceof ConditionalRenderingData) {\n return true;\n }\n\n return false;\n }\n\n private detectSaveModelChanges() {\n const changedDashboard = this._dashboard.getSaveModel();\n const initialDashboard = this._dashboard.getInitialSaveModel();\n\n // Objects must be stringify to ensure they are clonable, so they don't contain functions\n const changed =\n typeof changedDashboard === 'object' ? JSON.parse(JSON.stringify(changedDashboard)) : changedDashboard;\n const initial =\n typeof initialDashboard === 'object' ? JSON.parse(JSON.stringify(initialDashboard)) : initialDashboard;\n\n this._changesWorker?.postMessage({ initial, changed });\n }\n\n private hasMetadataChanges() {\n return this._dashboard.state.meta.folderUid !== this._dashboard.getInitialState()?.meta.folderUid;\n }\n\n private updateIsDirty(hasChanges: boolean) {\n if (hasChanges || this.hasMetadataChanges()) {\n if (!this._dashboard.state.isDirty) {\n this._dashboard.setState({ isDirty: true });\n }\n } else {\n if (this._dashboard.state.isDirty) {\n this._dashboard.setState({ isDirty: false });\n }\n }\n }\n\n private init() {\n this._changesWorker = createWorker();\n }\n\n public startTrackingChanges() {\n if (!this._changesWorker) {\n this.init();\n }\n\n this._changesWorker!.onmessage = (e: MessageEvent<DashboardChangeInfo>) => {\n this.updateIsDirty(!!e.data.hasChanges);\n };\n\n const performSaveModelDiff = getChangeTrackerDebouncer(this.detectSaveModelChanges.bind(this));\n\n this._changeTrackerSub = this._dashboard.subscribeToEvent(\n SceneObjectStateChangedEvent,\n (event: SceneObjectStateChangedEvent) => {\n if (DashboardSceneChangeTracker.isUpdatingPersistedState(event)) {\n performSaveModelDiff();\n }\n }\n );\n }\n\n public stopTrackingChanges() {\n this._changeTrackerSub?.unsubscribe();\n }\n\n public terminate() {\n this.stopTrackingChanges();\n this._changesWorker?.terminate();\n this._changesWorker = undefined;\n }\n}\n\n/**\n * The debouncer makes unit tests slower and more complex so turning it off for unit tests\n */\nfunction getChangeTrackerDebouncer(fn: () => void) {\n if (process.env.NODE_ENV === 'test') {\n return fn;\n }\n\n return debounce(fn, 250);\n}\n","import { t } from '@grafana/i18n';\nimport { Alert } from '@grafana/ui';\n\nexport const ExtensionErrorAlert = ({ pluginId, extensionTitle }: { pluginId: string; extensionTitle: string }) => {\n return (\n <Alert\n title={t(\n 'plugins.extensions.extension-error-alert-title',\n 'Extension failed to load: \"{{pluginId}}/{{extensionTitle}}\"',\n {\n pluginId,\n extensionTitle,\n }\n )}\n severity=\"error\"\n >\n {t('plugins.extensions.extension-error-alert-description', 'Check the console for more details on the error.')}\n </Alert>\n );\n};\n","import * as React from 'react';\n\nimport { PluginErrorBoundary } from '../components/PluginErrorBoundary';\n\nimport { ExtensionErrorAlert } from './ExtensionErrorAlert';\nimport { ExtensionsLog, log as baseLog } from './logs/log';\nimport { isGrafanaDevMode } from './utils';\n\nexport const ExtensionErrorBoundary = ({\n children,\n pluginId,\n extensionTitle,\n log = baseLog,\n fallbackAlwaysVisible = false,\n}: {\n children: React.ReactNode;\n pluginId: string;\n extensionTitle: string;\n log?: ExtensionsLog;\n fallbackAlwaysVisible?: boolean;\n}) => {\n return (\n <PluginErrorBoundary\n onError={(error, errorInfo) => {\n log.error(`Extension \"${pluginId}/${extensionTitle}\" failed to load.`, {\n message: error.message,\n componentStack: errorInfo.componentStack ?? '',\n digest: errorInfo.digest ?? '',\n });\n }}\n fallback={() => {\n if (isGrafanaDevMode() || fallbackAlwaysVisible) {\n return <ExtensionErrorAlert pluginId={pluginId} extensionTitle={extensionTitle} />;\n }\n\n return null;\n }}\n >\n {children}\n </PluginErrorBoundary>\n );\n};\n","import { css } from '@emotion/css';\nimport { cloneDeep, isArray, isObject } from 'lodash';\nimport * as React from 'react';\nimport { useAsync } from 'react-use';\n\nimport {\n type PluginExtensionEventHelpers,\n type PluginExtensionOpenModalOptions,\n isDateTime,\n dateTime,\n PluginContextProvider,\n PluginExtensionLink,\n PanelMenuItem,\n PluginExtensionAddedLinkConfig,\n urlUtil,\n PluginExtensionPoints,\n ExtensionInfo,\n} from '@grafana/data';\nimport { reportInteraction, config, AppPluginConfig } from '@grafana/runtime';\nimport { Modal } from '@grafana/ui';\nimport appEvents from 'app/core/app_events';\nimport { getPluginSettings } from 'app/features/plugins/pluginSettings';\nimport {\n CloseExtensionSidebarEvent,\n OpenExtensionSidebarEvent,\n ShowModalReactEvent,\n ToggleExtensionSidebarEvent,\n} from 'app/types/events';\n\nimport { RestrictedGrafanaApisProvider } from '../components/restrictedGrafanaApis/RestrictedGrafanaApisProvider';\n\nimport { ExtensionErrorBoundary } from './ExtensionErrorBoundary';\nimport { ExtensionsLog, log as baseLog } from './logs/log';\nimport { AddedLinkRegistryItem } from './registry/AddedLinksRegistry';\nimport { assertIsNotPromise, assertStringProps, isPromise } from './validators';\n\nexport function handleErrorsInFn(fn: Function, errorMessagePrefix = '') {\n return (...args: unknown[]) => {\n try {\n return fn(...args);\n } catch (e) {\n if (e instanceof Error) {\n console.warn(`${errorMessagePrefix}${e.message}`);\n }\n }\n };\n}\n\nexport function createOpenModalFunction(config: AddedLinkRegistryItem): PluginExtensionEventHelpers['openModal'] {\n return async (options) => {\n const { title, body, width, height } = options;\n\n appEvents.publish(\n new ShowModalReactEvent({\n component: wrapWithPluginContext<ModalWrapperProps>({\n pluginId: config.pluginId,\n extensionTitle: config.title,\n Component: getModalWrapper({ title, body, width, height, config }),\n log: baseLog,\n }),\n })\n );\n };\n}\n\ntype ModalWrapperProps = {\n onDismiss: () => void;\n};\n\nexport const wrapWithPluginContext = <T,>({\n pluginId,\n extensionTitle,\n Component,\n log,\n}: {\n pluginId: string;\n extensionTitle: string;\n Component: React.ComponentType<T>;\n log: ExtensionsLog;\n}) => {\n const WrappedExtensionComponent = (props: T & React.JSX.IntrinsicAttributes) => {\n const {\n error,\n loading,\n value: pluginMeta,\n } = useAsync(() => getPluginSettings(pluginId, { showErrorAlert: false }));\n\n if (loading) {\n return null;\n }\n\n if (error) {\n log.error(`Could not fetch plugin meta information for \"${pluginId}\", aborting. (${error.message})`, {\n stack: error.stack ?? '',\n message: error.message,\n });\n return null;\n }\n\n if (!pluginMeta) {\n log.error(`Fetched plugin meta information is empty for \"${pluginId}\", aborting.`);\n return null;\n }\n\n return (\n <PluginContextProvider meta={pluginMeta}>\n <ExtensionErrorBoundary pluginId={pluginId} extensionTitle={extensionTitle} log={log}>\n <RestrictedGrafanaApisProvider pluginId={pluginId}>\n <Component\n {...writableProxy(props, { log, source: 'extension', pluginId, pluginVersion: pluginMeta.info?.version })}\n />\n </RestrictedGrafanaApisProvider>\n </ExtensionErrorBoundary>\n </PluginContextProvider>\n );\n };\n\n return WrappedExtensionComponent;\n};\n\n// Wraps a component with a modal.\n// This way we can make sure that the modal is closable, and we also make the usage simpler.\nconst getModalWrapper = ({\n // The title of the modal (appears in the header)\n title,\n // A component that serves the body of the modal\n body: Body,\n width,\n height,\n config,\n}: PluginExtensionOpenModalOptions & { config: AddedLinkRegistryItem }) => {\n const className = css({ width, height });\n\n const ModalWrapper = ({ onDismiss }: ModalWrapperProps) => {\n return (\n <Modal title={title} className={className} isOpen onDismiss={onDismiss} onClickBackdrop={onDismiss}>\n {/* \n We also add an error boundary here (apart from the one in the `wrapWithPluginContext`) \n so the error appears inside the modal (and not at the bottom of the page.)\n */}\n <ExtensionErrorBoundary\n pluginId={config.pluginId}\n extensionTitle={config.title}\n fallbackAlwaysVisible={true}\n log={baseLog}\n >\n <div data-plugin-sandbox={config.pluginId} data-testid=\"plugin-sandbox-wrapper\">\n <Body onDismiss={onDismiss} />\n </div>\n </ExtensionErrorBoundary>\n </Modal>\n );\n };\n\n return ModalWrapper;\n};\n\n// Deep-clones and deep-freezes an object.\n// (Returns with a new object, does not modify the original object)\n//\n// @param `object` The object to freeze\n// @param `frozenProps` A set of objects that have already been frozen (used to prevent infinite recursion)\nexport function deepFreeze(value?: object | Record<string | symbol, unknown> | unknown[], frozenProps = new Map()) {\n if (!value || typeof value !== 'object' || Object.isFrozen(value)) {\n return value;\n }\n\n // Deep cloning the object to prevent freezing the original object\n const clonedValue = Array.isArray(value) ? [...value] : { ...value };\n\n // Prevent infinite recursion by looking for cycles inside an object\n if (frozenProps.has(value)) {\n return frozenProps.get(value);\n }\n frozenProps.set(value, clonedValue);\n\n const propNames = Reflect.ownKeys(clonedValue);\n\n for (const name of propNames) {\n const prop = Array.isArray(clonedValue) ? clonedValue[Number(name)] : clonedValue[name];\n\n // If the property is an object:\n // 1. clone it\n // 2. freeze it\n if (prop && (typeof prop === 'object' || typeof prop === 'function')) {\n if (Array.isArray(clonedValue)) {\n clonedValue[Number(name)] = deepFreeze(prop, frozenProps);\n } else {\n clonedValue[name] = deepFreeze(prop, frozenProps);\n }\n }\n }\n\n return Object.freeze(clonedValue);\n}\n\nexport function generateExtensionId(pluginId: string, extensionPointId: string, title: string): string {\n const str = `${pluginId}${extensionPointId}${title}`;\n\n return Array.from(str)\n .reduce((s, c) => (Math.imul(31, s) + c.charCodeAt(0)) | 0, 0)\n .toString();\n}\n\nconst _isReadOnlyProxy = Symbol('isReadOnlyProxy');\nconst _isMutationObserverProxy = Symbol('isMutationObserverProxy');\n\nexport class ReadOnlyProxyError extends Error {\n constructor(message?: string) {\n super(message ?? 'Mutating a read-only proxy object');\n this.name = 'ReadOnlyProxyError';\n }\n}\n\n/**\n * Returns a proxy that wraps the given object in a way that makes it read only.\n * If you try to modify the object a TypeError exception will be thrown.\n *\n * @param obj The object to make read only\n * @returns A new read only object, does not modify the original object\n */\nexport function getReadOnlyProxy<T extends object>(obj: T): T {\n if (!obj || typeof obj !== 'object' || isReadOnlyProxy(obj)) {\n return obj;\n }\n\n const cache = new WeakMap();\n\n return new Proxy(obj, {\n defineProperty: () => false,\n deleteProperty: () => false,\n isExtensible: () => false,\n set: () => false,\n get(target, prop, receiver) {\n if (prop === _isReadOnlyProxy) {\n return true;\n }\n\n const value = Reflect.get(target, prop, receiver);\n\n // This will create a clone of the date time object\n // instead of creating a proxy because the underlying\n // momentjs object needs to be able to mutate itself.\n if (isDateTime(value)) {\n return dateTime(value);\n }\n\n if (isObject(value) || isArray(value)) {\n if (!cache.has(value)) {\n cache.set(value, getReadOnlyProxy(value));\n }\n return cache.get(value);\n }\n\n return value;\n },\n });\n}\n\ntype MutationSource = 'extension' | 'datasource';\ninterface ProxyOptions {\n log?: ExtensionsLog;\n source?: MutationSource;\n pluginId?: string;\n pluginVersion?: string;\n}\n\n/**\n * Returns a proxy that logs any attempted mutation to the original object.\n *\n * @param obj The object to observe\n * @param options The options for the proxy\n * @param options.log The logger to use\n * @param options.source The source of the mutation\n * @param options.pluginId The id of the plugin that is mutating the object\n * @param options.pluginVersion The version of the plugin that is mutating the object\n * @returns A new proxy object that logs any attempted mutation to the original object\n */\nexport function getMutationObserverProxy<T extends object>(obj: T, options?: ProxyOptions): T {\n if (!obj || typeof obj !== 'object' || isMutationObserverProxy(obj)) {\n return obj;\n }\n\n const { log = baseLog, source = 'extension', pluginId = 'unknown', pluginVersion = 'unknown' } = options ?? {};\n const cache = new WeakMap();\n const logFunction = isGrafanaDevMode() ? log.error.bind(log) : log.warning.bind(log); // should show error during local development\n\n return new Proxy(obj, {\n deleteProperty(target, prop) {\n logFunction(\n `Attempted to delete object property \"${String(prop)}\" from ${source} with id ${pluginId} and version ${pluginVersion}`,\n {\n stack: new Error().stack ?? '',\n }\n );\n Reflect.deleteProperty(target, prop);\n return true;\n },\n defineProperty(target, prop, descriptor) {\n // because immer (used by RTK) calls Object.isFrozen and Object.freeze we know that defineProperty will be called\n // behind the scenes as well so we only log message with debug level to minimize the noise and false positives\n log.debug(\n `Attempted to define object property \"${String(prop)}\" from ${source} with id ${pluginId} and version ${pluginVersion}`,\n {\n stack: new Error().stack ?? '',\n }\n );\n Reflect.defineProperty(target, prop, descriptor);\n return true;\n },\n set(target, prop, newValue) {\n logFunction(\n `Attempted to mutate object property \"${String(prop)}\" from ${source} with id ${pluginId} and version ${pluginVersion}`,\n {\n stack: new Error().stack ?? '',\n }\n );\n Reflect.set(target, prop, newValue);\n return true;\n },\n get(target, prop, receiver) {\n if (prop === _isMutationObserverProxy) {\n return true;\n }\n\n const value = Reflect.get(target, prop, receiver);\n\n // Return read-only properties as-is to avoid proxy invariant violations\n const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n if (descriptor && !descriptor.configurable && !descriptor.writable) {\n return value;\n }\n\n // This will create a clone of the date time object\n // instead of creating a proxy because the underlying\n // momentjs object needs to be able to mutate itself.\n if (isDateTime(value)) {\n return dateTime(value);\n }\n\n if (isObject(value) || isArray(value)) {\n if (!cache.has(value)) {\n cache.set(value, getMutationObserverProxy(value, { log, source, pluginId, pluginVersion }));\n }\n return cache.get(value);\n }\n\n return value;\n },\n });\n}\n\n/**\n * Returns a proxy that logs any attempted mutation to the original object.\n *\n * @param value The object to observe\n * @param options The options for the proxy\n * @param options.log The logger to use\n * @param options.source The source of the mutation\n * @param options.pluginId The id of the plugin that is mutating the object\n * @param options.pluginVersion The version of the plugin that is mutating the object\n * @returns A new proxy object that logs any attempted mutation to the original object\n */\nexport function writableProxy<T>(value: T, options?: ProxyOptions): T {\n // Primitive types are read-only by default\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n const { log = baseLog, source = 'extension', pluginId = 'unknown', pluginVersion = 'unknown' } = options ?? {};\n\n // Default: we return a proxy of a deep-cloned version of the original object, which logs warnings when mutation is attempted\n return getMutationObserverProxy(cloneDeep(value), { log, pluginId, pluginVersion, source });\n}\n\nfunction isRecord(value: unknown): value is Record<string | number | symbol, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function isReadOnlyProxy(value: unknown): boolean {\n return isRecord(value) && value[_isReadOnlyProxy] === true;\n}\n\nexport function isMutationObserverProxy(value: unknown): boolean {\n return isRecord(value) && value[_isMutationObserverProxy] === true;\n}\n\nexport function createAddedLinkConfig<T extends object>(\n config: PluginExtensionAddedLinkConfig<T>\n): PluginExtensionAddedLinkConfig {\n const linkConfig: PluginExtensionAddedLinkConfig<T> = {\n ...config,\n };\n assertLinkConfig(linkConfig);\n return linkConfig;\n}\n\nfunction assertLinkConfig<T extends object>(\n config: PluginExtensionAddedLinkConfig<T>\n): asserts config is PluginExtensionAddedLinkConfig {}\n\nexport function truncateTitle(title: string, length: number): string {\n if (title.length < length) {\n return title;\n }\n const part = title.slice(0, length - 3);\n return `${part.trimEnd()}...`;\n}\n\nexport function createExtensionSubMenu(extensions: PluginExtensionLink[]): PanelMenuItem[] {\n const categorized: Record<string, PanelMenuItem[]> = {};\n const uncategorized: PanelMenuItem[] = [];\n\n for (const extension of extensions) {\n const category = extension.category;\n\n if (!category) {\n uncategorized.push({\n text: truncateTitle(extension.title, 25),\n href: extension.path,\n onClick: extension.onClick,\n });\n continue;\n }\n\n if (!Array.isArray(categorized[category])) {\n categorized[category] = [];\n }\n\n categorized[category].push({\n text: truncateTitle(extension.title, 25),\n href: extension.path,\n onClick: extension.onClick,\n });\n }\n\n const subMenu = Object.keys(categorized).reduce((subMenu: PanelMenuItem[], category) => {\n subMenu.push({\n text: truncateTitle(category, 25),\n type: 'group',\n subMenu: categorized[category],\n });\n return subMenu;\n }, []);\n\n if (uncategorized.length > 0) {\n if (subMenu.length > 0) {\n subMenu.push({\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n text: 'divider',\n type: 'divider',\n });\n }\n\n Array.prototype.push.apply(subMenu, uncategorized);\n }\n\n return subMenu;\n}\n\nexport function getLinkExtensionOverrides(\n pluginId: string,\n config: AddedLinkRegistryItem,\n log: ExtensionsLog,\n context?: object\n) {\n try {\n const overrides = config.configure?.(context);\n\n // Hiding the extension\n if (overrides === undefined) {\n return undefined;\n }\n\n let {\n title = config.title,\n description = config.description,\n path = config.path,\n icon = config.icon,\n category = config.category,\n ...rest\n } = overrides;\n\n assertIsNotPromise(\n overrides,\n `The configure() function for \"${config.title}\" returned a promise, skipping updates.`\n );\n\n assertStringProps({ title, description }, ['title', 'description']);\n\n if (Object.keys(rest).length > 0) {\n log.warning(\n `Extension \"${config.title}\", is trying to override restricted properties: ${Object.keys(rest).join(\n ', '\n )} which will be ignored.`\n );\n }\n\n return {\n title,\n description,\n path,\n icon,\n category,\n };\n } catch (error) {\n if (error instanceof Error) {\n log.error(`Failed to configure link with title \"${config.title}\"`, {\n stack: error.stack ?? '',\n message: error.message,\n });\n }\n\n // If there is an error, we hide the extension\n // (This seems to be safest option in case the extension is doing something wrong.)\n return undefined;\n }\n}\n\nexport function getLinkExtensionOnClick(\n pluginId: string,\n extensionPointId: string,\n config: AddedLinkRegistryItem,\n log: ExtensionsLog,\n context?: object\n): ((event?: React.MouseEvent) => void) | undefined {\n const { onClick } = config;\n\n if (!onClick) {\n return;\n }\n\n return function onClickExtensionLink(event?: React.MouseEvent) {\n try {\n reportInteraction('ui_extension_link_clicked', {\n pluginId: pluginId,\n extensionPointId,\n title: config.title,\n category: config.category,\n });\n\n const helpers: PluginExtensionEventHelpers = {\n context,\n extensionPointId,\n openModal: createOpenModalFunction(config),\n openSidebar: (componentTitle, context) => {\n appEvents.publish(\n new OpenExtensionSidebarEvent({\n props: context,\n pluginId,\n componentTitle,\n })\n );\n },\n closeSidebar: () => {\n appEvents.publish(new CloseExtensionSidebarEvent());\n },\n toggleSidebar: (componentTitle, context) => {\n appEvents.publish(\n new ToggleExtensionSidebarEvent({\n props: context,\n pluginId,\n componentTitle,\n })\n );\n },\n };\n\n log.debug(`onClick '${config.title}' at '${extensionPointId}'`);\n const result = onClick(event, helpers);\n\n if (isPromise(result)) {\n result.catch((error) => {\n if (error instanceof Error) {\n log.error(error.message, {\n message: error.message,\n stack: error.stack ?? '',\n });\n }\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n log.error(error.message, {\n message: error.message,\n stack: error.stack ?? '',\n });\n }\n }\n };\n}\n\nexport function getLinkExtensionPathWithTracking(pluginId: string, path: string, extensionPointId: string): string {\n return urlUtil.appendQueryToUrl(\n path,\n urlUtil.toUrlParams({\n uel_pid: pluginId,\n uel_epid: extensionPointId,\n })\n );\n}\n\n// Comes from the `app_mode` setting in the Grafana config (defaults to \"development\")\n// Can be set with the `GF_DEFAULT_APP_MODE` environment variable\nexport const isGrafanaDevMode = () => config.buildInfo.env === 'development';\n\nexport const getAppPluginConfigs = (pluginIds: string[] = []) =>\n Object.values(config.apps).filter((app) => pluginIds.includes(app.id));\n\nexport const getAppPluginIdFromExposedComponentId = (exposedComponentId: string) => {\n return exposedComponentId.split('/')[0];\n};\n\n// Returns a list of app plugin ids that are registering extensions to this extension point.\n// (These plugins are necessary to be loaded to use the extension point.)\n// (The function also returns the plugin ids that the plugins - that extend the extension point - depend on.)\nexport const getExtensionPointPluginDependencies = (extensionPointId: string): string[] => {\n return Object.values(config.apps)\n .filter(\n (app) =>\n app.extensions.addedLinks.some((link) => link.targets.includes(extensionPointId)) ||\n app.extensions.addedComponents.some((component) => component.targets.includes(extensionPointId))\n )\n .map((app) => app.id)\n .reduce((acc: string[], id: string) => {\n return [...acc, id, ...getAppPluginDependencies(id)];\n }, []);\n};\n\nexport type ExtensionPointPluginMeta = Map<\n string,\n {\n readonly addedComponents: ExtensionInfo[];\n readonly addedLinks: ExtensionInfo[];\n }\n>;\n\n/**\n * Returns a map of plugin ids and their addedComponents and addedLinks to the extension point.\n * @param extensionPointId - The id of the extension point.\n * @returns A map of plugin ids and their addedComponents and addedLinks to the extension point.\n */\nexport const getExtensionPointPluginMeta = (extensionPointId: string): ExtensionPointPluginMeta => {\n return new Map(\n getExtensionPointPluginDependencies(extensionPointId)\n .map((pluginId) => {\n const app = config.apps[pluginId];\n // if the plugin does not exist or does not expose any components or links to the extension point, return undefined\n if (\n !app ||\n (!app.extensions.addedComponents.some((component) => component.targets.includes(extensionPointId)) &&\n !app.extensions.addedLinks.some((link) => link.targets.includes(extensionPointId)))\n ) {\n return undefined;\n }\n return [\n pluginId,\n {\n addedComponents: app.extensions.addedComponents.filter((component) =>\n component.targets.includes(extensionPointId)\n ),\n addedLinks: app.extensions.addedLinks.filter((link) => link.targets.includes(extensionPointId)),\n },\n ] as const;\n })\n .filter((c): c is NonNullable<typeof c> => c !== undefined)\n );\n};\n\n// Returns a list of app plugin ids that are necessary to be loaded to use the exposed component.\n// (It is first the plugin that exposes the component, and then the ones that it depends on.)\nexport const getExposedComponentPluginDependencies = (exposedComponentId: string) => {\n const pluginId = getAppPluginIdFromExposedComponentId(exposedComponentId);\n\n return [pluginId].reduce((acc: string[], pluginId: string) => {\n return [...acc, pluginId, ...getAppPluginDependencies(pluginId)];\n }, []);\n};\n\n// Returns a list of app plugin ids that are necessary to be loaded, based on the `dependencies.extensions`\n// metadata field. (For example the plugins that expose components that the app depends on.)\n// Heads up! This is a recursive function.\nexport const getAppPluginDependencies = (pluginId: string, visited: string[] = []): string[] => {\n if (!config.apps[pluginId]) {\n return [];\n }\n\n // Prevent infinite recursion (it would happen if there is a circular dependency between app plugins)\n if (visited.includes(pluginId)) {\n return [];\n }\n\n const pluginIdDependencies = config.apps[pluginId].dependencies.extensions.exposedComponents.map(\n getAppPluginIdFromExposedComponentId\n );\n\n return (\n pluginIdDependencies\n .reduce((acc, _pluginId) => {\n return [...acc, ...getAppPluginDependencies(_pluginId, [...visited, pluginId])];\n }, pluginIdDependencies)\n // We don't want the plugin to \"depend on itself\"\n .filter((id) => id !== pluginId)\n );\n};\n\n// Returns a list of app plugins that has to be loaded before core Grafana could finish the initialization.\nexport const getAppPluginsToAwait = () => {\n const pluginIds = [\n // The \"cloud-home-app\" is registering banners once it's loaded, and this can cause a rerender in the AppChrome if it's loaded after the Grafana app init.\n 'cloud-home-app',\n ];\n\n return Object.values(config.apps).filter((app) => pluginIds.includes(app.id));\n};\n\n// Returns a list of app plugins that has to be preloaded in parallel with the core Grafana initialization.\nexport const getAppPluginsToPreload = () => {\n // The DashboardPanelMenu extension point is using the `getPluginExtensions()` API in scenes at the moment, which means that it cannot yet benefit from dynamic plugin loading.\n const dashboardPanelMenuPluginIds = getExtensionPointPluginDependencies(PluginExtensionPoints.DashboardPanelMenu);\n const awaitedPluginIds = getAppPluginsToAwait().map((app) => app.id);\n const isNotAwaited = (app: AppPluginConfig) => !awaitedPluginIds.includes(app.id);\n\n return Object.values(config.apps).filter((app) => {\n return isNotAwaited(app) && (app.preload || dashboardPanelMenuPluginIds.includes(app.id));\n });\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2, ThemeSpacingTokens } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\ninterface DividerProps {\n direction?: 'vertical' | 'horizontal';\n spacing?: ThemeSpacingTokens;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-divider--docs\n */\nexport const Divider = ({ direction = 'horizontal', spacing = 2 }: DividerProps) => {\n const styles = useStyles2(getStyles, spacing);\n\n if (direction === 'vertical') {\n return <div className={styles.verticalDivider}></div>;\n } else {\n return <hr className={styles.horizontalDivider} />;\n }\n};\n\nDivider.displayName = 'Divider';\n\nconst getStyles = (theme: GrafanaTheme2, spacing: ThemeSpacingTokens) => {\n return {\n horizontalDivider: css({\n borderTop: `1px solid ${theme.colors.border.weak}`,\n margin: theme.spacing(spacing, 0),\n width: '100%',\n }),\n verticalDivider: css({\n borderRight: `1px solid ${theme.colors.border.weak}`,\n margin: theme.spacing(0, spacing),\n height: '100%',\n }),\n };\n};\n","import { FieldConfigSource as FieldConfigSourceV1, SpecialValueMatch as SpecialValueMatchV1 } from '@grafana/data';\nimport {\n VariableHide as VariableHideV1,\n VariableRefresh as VariableRefreshV1,\n VariableSort as VariableSortV1,\n DashboardCursorSync as DashboardCursorSyncV1,\n defaultDashboardCursorSync,\n MappingType as MappingTypeV1,\n ThresholdsMode as ThresholdsModeV1,\n} from '@grafana/schema';\nimport {\n DashboardCursorSync,\n VariableHide,\n VariableRefresh,\n VariableSort,\n FieldConfigSource,\n SpecialValueMatch,\n ThresholdsMode,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\nexport function transformVariableRefreshToEnumV1(refresh?: VariableRefresh): VariableRefreshV1 {\n switch (refresh) {\n case 'never':\n return VariableRefreshV1.never;\n case 'onDashboardLoad':\n return VariableRefreshV1.onDashboardLoad;\n case 'onTimeRangeChanged':\n return VariableRefreshV1.onTimeRangeChanged;\n default:\n return VariableRefreshV1.never;\n }\n}\n\nexport function transformVariableHideToEnumV1(hide?: VariableHide): VariableHideV1 {\n switch (hide) {\n case 'dontHide':\n return VariableHideV1.dontHide;\n case 'hideLabel':\n return VariableHideV1.hideLabel;\n case 'hideVariable':\n return VariableHideV1.hideVariable;\n case 'inControlsMenu':\n return VariableHideV1.inControlsMenu;\n default:\n return VariableHideV1.dontHide;\n }\n}\n\nexport function transformSortVariableToEnumV1(sort?: VariableSort): VariableSortV1 {\n switch (sort) {\n case 'disabled':\n return VariableSortV1.disabled;\n case 'numericalAsc':\n return VariableSortV1.numericalAsc;\n case 'alphabeticalCaseInsensitiveAsc':\n return VariableSortV1.alphabeticalCaseInsensitiveAsc;\n case 'alphabeticalCaseInsensitiveDesc':\n return VariableSortV1.alphabeticalCaseInsensitiveDesc;\n case 'numericalDesc':\n return VariableSortV1.numericalDesc;\n case 'naturalAsc':\n return VariableSortV1.naturalAsc;\n case 'naturalDesc':\n return VariableSortV1.naturalDesc;\n case 'alphabeticalAsc':\n return VariableSortV1.alphabeticalAsc;\n case 'alphabeticalDesc':\n return VariableSortV1.alphabeticalDesc;\n default:\n return VariableSortV1.disabled;\n }\n}\n\nexport function transformCursorSyncV2ToV1(cursorSync: DashboardCursorSync): DashboardCursorSyncV1 {\n switch (cursorSync) {\n case 'Crosshair':\n return DashboardCursorSyncV1.Crosshair;\n case 'Tooltip':\n return DashboardCursorSyncV1.Tooltip;\n case 'Off':\n return DashboardCursorSyncV1.Off;\n default:\n return defaultDashboardCursorSync;\n }\n}\n\nfunction transformSpecialValueMatchToV1(match: SpecialValueMatch): SpecialValueMatchV1 {\n switch (match) {\n case 'true':\n return SpecialValueMatchV1.True;\n case 'false':\n return SpecialValueMatchV1.False;\n case 'null':\n return SpecialValueMatchV1.Null;\n case 'nan':\n return SpecialValueMatchV1.NaN;\n case 'null+nan':\n return SpecialValueMatchV1.NullAndNaN;\n case 'empty':\n return SpecialValueMatchV1.Empty;\n default:\n throw new Error(`Unknown match type: ${match}`);\n }\n}\n\nexport function transformMappingsToV1(fieldConfig: FieldConfigSource): FieldConfigSourceV1 {\n const getThresholdsMode = (mode: ThresholdsMode): ThresholdsModeV1 => {\n switch (mode) {\n case 'absolute':\n return ThresholdsModeV1.Absolute;\n case 'percentage':\n return ThresholdsModeV1.Percentage;\n default:\n return ThresholdsModeV1.Absolute;\n }\n };\n\n const transformedDefaults: any = {\n ...fieldConfig.defaults,\n };\n\n if (fieldConfig.defaults.mappings) {\n transformedDefaults.mappings = fieldConfig.defaults.mappings.map((mapping) => {\n switch (mapping.type) {\n case 'value':\n return {\n ...mapping,\n type: MappingTypeV1.ValueToText,\n };\n case 'range':\n return {\n ...mapping,\n type: MappingTypeV1.RangeToText,\n };\n case 'regex':\n return {\n ...mapping,\n type: MappingTypeV1.RegexToText,\n };\n case 'special':\n return {\n ...mapping,\n options: {\n ...mapping.options,\n match: transformSpecialValueMatchToV1(mapping.options.match),\n },\n type: MappingTypeV1.SpecialValue,\n };\n default:\n return mapping;\n }\n });\n }\n\n if (fieldConfig.defaults.thresholds) {\n transformedDefaults.thresholds = {\n ...fieldConfig.defaults.thresholds,\n mode: getThresholdsMode(fieldConfig.defaults.thresholds.mode),\n };\n }\n\n return {\n ...fieldConfig,\n defaults: transformedDefaults,\n };\n}\n","import {\n LocalValueVariable,\n MultiValueVariableState,\n SceneObject,\n SceneVariable,\n SceneVariableSet,\n VariableValueSingle,\n} from '@grafana/scenes';\n\nconst CLONE_KEY = '-clone-';\n\n/**\n * Create or alter the last key for a key\n * @param key\n * @param index\n */\nexport function getCloneKey(key: string, index: number): string {\n return `${key}${CLONE_KEY}${index}`;\n}\n\nexport function isRepeatCloneOrChildOf(scene: SceneObject): boolean {\n let obj: SceneObject | undefined = scene;\n\n do {\n if ('repeatSourceKey' in obj.state && obj.state.repeatSourceKey) {\n return true;\n }\n\n obj = obj.parent;\n } while (obj);\n\n return false;\n}\n\nexport function getLocalVariableValueSet(\n variable: SceneVariable<MultiValueVariableState>,\n value: VariableValueSingle,\n text: VariableValueSingle\n): SceneVariableSet {\n return new SceneVariableSet({\n variables: [\n new LocalValueVariable({\n name: variable.state.name,\n value,\n text,\n isMulti: variable.state.isMulti,\n includeAll: variable.state.includeAll,\n }),\n ],\n });\n}\n","import { useState, useRef, ReactElement } from 'react';\nimport * as React from 'react';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { clearButtonStyles } from '../Button/Button';\n\ninterface LabelProps {\n Component: ReactElement;\n onClick?: () => void;\n disabled?: boolean;\n}\n\nexport const useExpandableLabel = (\n initialExpanded: boolean,\n onExpandedChange?: (expanded: boolean) => void\n): [React.ComponentType<LabelProps>, number, boolean, (expanded: boolean) => void] => {\n const ref = useRef<HTMLButtonElement>(null);\n const buttonStyles = useStyles2(clearButtonStyles);\n const [expanded, setExpanded] = useState<boolean>(initialExpanded);\n const [width, setWidth] = useState(0);\n\n const setExpandedWrapper = (expanded: boolean) => {\n setExpanded(expanded);\n if (onExpandedChange) {\n onExpandedChange(expanded);\n }\n };\n\n const Label = ({ Component, onClick, disabled }: LabelProps) => (\n <button\n type=\"button\"\n className={buttonStyles}\n ref={ref}\n disabled={disabled}\n onClick={() => {\n setExpandedWrapper(true);\n if (ref && ref.current) {\n setWidth(ref.current.clientWidth * 1.25);\n }\n onClick?.();\n }}\n >\n {Component}\n </button>\n );\n\n return [Label, width, expanded, setExpandedWrapper];\n};\n","import { PropsWithChildren, ReactElement } from 'react';\n\nimport { RestrictedGrafanaApisContextProvider, RestrictedGrafanaApisContextType } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { alertingAlertRuleFormSchemaApi } from 'app/features/plugins/components/restrictedGrafanaApis/alerting/alertRuleFormSchema';\n\nconst restrictedGrafanaApis: RestrictedGrafanaApisContextType = config.featureToggles.restrictedPluginApis\n ? {\n // Add your restricted APIs here\n // (APIs that should be availble to ALL plugins should be shared via our packages, e.g. @grafana/data.)\n alertingAlertRuleFormSchema: alertingAlertRuleFormSchemaApi.alertingAlertRuleFormSchema,\n }\n : {};\n\n// This Provider is a wrapper around `RestrictedGrafanaApisContextProvider` from `@grafana/data`.\n// The reason for this is that like this we only need to define the configuration once (here) and can use it in multiple places (app root page, extensions).\nexport function RestrictedGrafanaApisProvider({\n children,\n pluginId,\n}: PropsWithChildren<{ pluginId: string }>): ReactElement {\n return (\n <RestrictedGrafanaApisContextProvider\n pluginId={pluginId}\n apis={restrictedGrafanaApis}\n apiAllowList={config.bootData.settings.pluginRestrictedAPIsAllowList}\n apiBlockList={config.bootData.settings.pluginRestrictedAPIsBlockList}\n >\n {children}\n </RestrictedGrafanaApisContextProvider>\n );\n}\n","export const objRemoveUndefined = (obj: { [key: string]: unknown }) => {\n return Object.keys(obj).reduce((acc: { [key: string]: unknown }, key) => {\n if (obj[key] !== undefined) {\n acc[key] = obj[key];\n }\n return acc;\n }, {});\n};\n\nexport const isEmptyObject = (value: unknown): value is Record<string, never> => {\n return typeof value === 'object' && value !== null && Object.keys(value).length === 0;\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { rawListItemColumnWidth, rawListPaddingToHoldSpaceForCopyIcon, RawListValue } from './RawListItem';\nimport { RawPrometheusListItemEmptyValue } from './utils/getRawPrometheusListItemsFromDataFrame';\n\nconst getStyles = (theme: GrafanaTheme2, totalNumberOfValues: number) => ({\n rowWrapper: css({\n position: 'relative',\n minWidth: rawListItemColumnWidth,\n paddingRight: '5px',\n }),\n rowValue: css({\n whiteSpace: 'nowrap',\n overflowX: 'auto',\n MsOverflowStyle: 'none' /* IE and Edge */,\n scrollbarWidth: 'none' /* Firefox */,\n display: 'block',\n paddingRight: '10px',\n\n '&::-webkit-scrollbar': {\n display: 'none' /* Chrome, Safari and Opera */,\n },\n\n '&:before': {\n pointerEvents: 'none',\n content: \"''\",\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n background: `linear-gradient(to right, transparent calc(100% - 25px), ${theme.colors.background.primary})`,\n },\n }),\n rowValuesWrap: css({\n paddingLeft: rawListPaddingToHoldSpaceForCopyIcon,\n width: `calc(${totalNumberOfValues} * ${rawListItemColumnWidth})`,\n display: 'flex',\n }),\n});\n\nexport const ItemValues = ({\n totalNumberOfValues,\n values,\n hideFieldsWithoutValues,\n}: {\n totalNumberOfValues: number;\n values: RawListValue[];\n hideFieldsWithoutValues: boolean;\n}) => {\n const styles = useStyles2(getStyles, totalNumberOfValues);\n return (\n <div role={'cell'} className={styles.rowValuesWrap}>\n {values?.map((value) => {\n if (hideFieldsWithoutValues && (value.value === undefined || value.value === RawPrometheusListItemEmptyValue)) {\n return null;\n }\n\n return (\n <span key={value.key} className={styles.rowWrapper}>\n <span className={styles.rowValue}>{value.value}</span>\n </span>\n );\n })}\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { RawListValue } from './RawListItem';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n // Borrowed from the monaco styles\n const reddish = theme.isDark ? '#ce9178' : '#a31515';\n const greenish = theme.isDark ? '#73bf69' : '#56a64b';\n\n return {\n metricName: css({\n color: greenish,\n }),\n metricValue: css({\n color: reddish,\n }),\n expanded: css({\n display: 'block',\n textIndent: '1em',\n }),\n };\n};\n\nconst RawListItemAttributes = ({\n value,\n index,\n length,\n isExpandedView,\n}: {\n value: RawListValue;\n index: number;\n length: number;\n isExpandedView: boolean;\n}) => {\n const styles = useStyles2(getStyles);\n\n // From the beginning of the string to the start of the `=`\n const attributeName = value.key;\n\n // From after the `=\"` to before the last `\"`\n const attributeValue = value.value;\n\n return (\n <span className={isExpandedView ? styles.expanded : ''} key={index}>\n <span className={styles.metricName}>{attributeName}</span>\n <span>=</span>\n <span>"</span>\n <span className={styles.metricValue}>{attributeValue}</span>\n <span>"</span>\n {index < length - 1 && <span>, </span>}\n </span>\n );\n};\n\nexport default RawListItemAttributes;\n","import { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { Field, GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { isValidLegacyName, utf8Support } from '@grafana/prometheus/src/utf8_support';\nimport { reportInteraction } from '@grafana/runtime';\nimport { IconButton, useStyles2 } from '@grafana/ui';\n\nimport { ItemLabels } from './ItemLabels';\nimport { ItemValues } from './ItemValues';\nimport { instantQueryRawVirtualizedListData } from './RawListContainer';\nimport RawListItemAttributes from './RawListItemAttributes';\n\nexport interface RawListProps {\n listItemData: instantQueryRawVirtualizedListData;\n listKey: string;\n totalNumberOfValues: number;\n valueLabels?: Field[];\n isExpandedView: boolean;\n}\n\nexport type RawListValue = { key: string; value: string };\nexport const rawListExtraSpaceAtEndOfLine = '20px';\nexport const rawListItemColumnWidth = '80px';\nexport const rawListPaddingToHoldSpaceForCopyIcon = '25px';\n\nconst getStyles = (theme: GrafanaTheme2, totalNumberOfValues: number, isExpandedView: boolean) => ({\n rowWrapper: css({\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n display: 'flex',\n position: 'relative',\n paddingLeft: '22px',\n alignItems: !isExpandedView ? 'center' : '',\n height: !isExpandedView ? '100%' : '',\n }),\n copyToClipboardWrapper: css({\n position: 'absolute',\n left: 0,\n bottom: !isExpandedView ? '0' : '',\n top: isExpandedView ? '4px' : '0',\n margin: 'auto',\n zIndex: 1,\n height: '16px',\n width: '16px',\n }),\n rowLabelWrapWrap: css({\n position: 'relative',\n width: `calc(100% - (${totalNumberOfValues} * ${rawListItemColumnWidth}) - ${rawListPaddingToHoldSpaceForCopyIcon})`,\n }),\n rowLabelWrap: css({\n whiteSpace: 'nowrap',\n overflowX: 'auto',\n MsOverflowStyle: 'none' /* IE and Edge */,\n scrollbarWidth: 'none' /* Firefox */,\n paddingRight: rawListExtraSpaceAtEndOfLine,\n\n '&::-webkit-scrollbar': {\n display: 'none' /* Chrome, Safari and Opera */,\n },\n\n '&:after': {\n pointerEvents: 'none',\n content: \"''\",\n width: '100%',\n height: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n background: `linear-gradient(to right, transparent calc(100% - ${rawListExtraSpaceAtEndOfLine}), ${theme.colors.background.primary})`,\n },\n }),\n});\n\nfunction getQueryValues(allLabels: Pick<instantQueryRawVirtualizedListData, 'Value' | string | number>) {\n let attributeValues: RawListValue[] = [];\n let values: RawListValue[] = [];\n for (const key in allLabels) {\n if (key in allLabels && allLabels[key] && !key.includes('Value')) {\n attributeValues.push({\n key: key,\n value: allLabels[key],\n });\n } else if (key in allLabels && allLabels[key] && key.includes('Value')) {\n values.push({\n key: key,\n value: allLabels[key],\n });\n }\n }\n return {\n values: values,\n attributeValues: attributeValues,\n };\n}\n\nconst RawListItem = ({ listItemData, listKey, totalNumberOfValues, valueLabels, isExpandedView }: RawListProps) => {\n const { __name__, ...allLabels } = listItemData;\n // We must know whether it is a utf8 metric name or not\n const isLegacyMetric = isValidLegacyName(__name__ ?? '');\n const [_, copyToClipboard] = useCopyToClipboard();\n const displayLength = valueLabels?.length ?? totalNumberOfValues;\n const styles = useStyles2(getStyles, displayLength, isExpandedView);\n\n const { values, attributeValues } = getQueryValues(allLabels);\n\n /**\n * Transform the symbols in the dataFrame to uniform strings\n */\n const transformCopyValue = (value: string): string => {\n if (value === '∞' || value === 'Infinity') {\n return '+Inf';\n }\n return value;\n };\n\n // Convert the object back into a string\n const stringRep = `${isLegacyMetric ? __name__ : ''}{${isLegacyMetric ? '' : `\"${__name__}\", `}${attributeValues.map(\n (value) => {\n // For histograms the string representation currently in this object is not directly queryable in all situations, leading to broken copied queries. Omitting the attribute from the copied result gives a query which returns all le values, which I assume to be a more common use case.\n return `${utf8Support(value.key)}=\"${transformCopyValue(value.value)}\"`;\n }\n )}}`;\n\n const hideFieldsWithoutValues = Boolean(valueLabels && valueLabels?.length);\n\n return (\n <>\n {valueLabels !== undefined && isExpandedView && (\n <ItemLabels valueLabels={valueLabels} expanded={isExpandedView} />\n )}\n <div key={listKey} className={styles.rowWrapper}>\n <span className={styles.copyToClipboardWrapper}>\n <IconButton\n tooltip={t('explore.raw-list-item.tooltip-copy-to-clipboard', 'Copy to clipboard')}\n onClick={() => {\n reportInteraction('grafana_explore_prometheus_instant_query_ui_raw_toggle_expand');\n copyToClipboard(stringRep);\n }}\n name=\"copy\"\n />\n </span>\n <span role={'cell'} className={styles.rowLabelWrapWrap}>\n <div className={styles.rowLabelWrap}>\n {!!__name__ && isLegacyMetric && <span>{__name__}</span>}\n <span>{`{`}</span>\n {!isLegacyMetric && !!__name__ && __name__ !== '' && (\n <span>\n "{__name__}"{', '}\n </span>\n )}\n <span>\n {attributeValues.map((value, index) => (\n <RawListItemAttributes\n isExpandedView={isExpandedView}\n value={value}\n key={index}\n index={index}\n length={attributeValues.length}\n />\n ))}\n </span>\n <span>{`}`}</span>\n </div>\n </span>\n\n {/* Output the values */}\n <ItemValues\n hideFieldsWithoutValues={hideFieldsWithoutValues}\n totalNumberOfValues={displayLength}\n values={values}\n />\n </div>\n </>\n );\n};\nexport default RawListItem;\n","import { SceneObject, VizPanel } from '@grafana/scenes';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\n/**\n * Abstraction to handle editing of different layout elements (wrappers for VizPanels and other objects)\n * Also useful to when rendering / viewing an element outside it's layout scope\n */\nexport interface DashboardLayoutItem extends SceneObject {\n /**\n * Marks this object as a layout item\n */\n isDashboardLayoutItem: true;\n\n /**\n * Return layout item options (like repeat, repeat direction, etc. for the default DashboardGridItem)\n */\n getOptions?(): OptionsPaneCategoryDescriptor[];\n\n /**\n * Change inner body / viz panel\n */\n setElementBody(body: VizPanel): void;\n}\n\nexport function isDashboardLayoutItem(obj: SceneObject): obj is DashboardLayoutItem {\n return 'isDashboardLayoutItem' in obj;\n}\n","import { identity } from 'lodash';\nimport { useState } from 'react';\n\nimport { dateTimeFormatTimeAgo } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Box, Button, Divider, EmptyState, Icon, Stack, Text } from '@grafana/ui';\nimport { DiffGroup } from 'app/features/dashboard-scene/settings/version-history/DiffGroup';\nimport { DiffViewer } from 'app/features/dashboard-scene/settings/version-history/DiffViewer';\nimport { jsonDiff } from 'app/features/dashboard-scene/settings/version-history/utils';\n\n/** Meta information about a version of an entity */\nexport interface RevisionModel {\n version: number | string;\n /** When was this version created? */\n createdAt: string;\n /** Who created/edited this version? */\n createdBy: string;\n /** Optional message describing change encapsulated in this version */\n message?: string;\n}\n\ntype DiffArgument = Parameters<typeof jsonDiff>[0];\n\ntype DiffViewProps<T extends DiffArgument> = {\n /** Information to help summarise the change in the newer version */\n newSummary: RevisionModel;\n /** Information to help summarise the change in the older version */\n oldSummary: RevisionModel;\n /** The actual data model of the older version */\n oldVersion: T;\n /** The actual data model of the newer version */\n newVersion: T;\n /**\n * Helper method to tweak the calculated diff for the human readable output.\n *\n * e.g. mapping machine IDs to translated names, removing fields that the user can't control anyway etc.\n */\n preprocessVersion?: (version: T) => DiffArgument;\n /**\n * Should we show the restore button?\n */\n showRestoreButton?: boolean;\n /** Method invoked when restore button is clicked */\n onRestore: () => void;\n};\n\nconst VersionChangeSummary = ({ info }: { info: RevisionModel }) => {\n const { createdAt, createdBy, version, message = '' } = info;\n const ageString = dateTimeFormatTimeAgo(createdAt);\n return (\n <Trans i18nKey=\"core.versionHistory.comparison.header.text\">\n Version {{ version }} updated by {{ createdBy }} ({{ ageString }}) {{ message }}\n </Trans>\n );\n};\n\nexport const VersionHistoryComparison = <T extends DiffArgument>({\n oldSummary,\n newSummary,\n oldVersion,\n newVersion,\n preprocessVersion = identity,\n showRestoreButton = false,\n onRestore,\n}: DiffViewProps<T>) => {\n const diff = jsonDiff(preprocessVersion(oldVersion), preprocessVersion(newVersion));\n const noHumanReadableDiffs = Object.entries(diff).length === 0;\n const [showJsonDiff, setShowJsonDiff] = useState(noHumanReadableDiffs);\n\n return (\n <Stack gap={2} direction=\"column\">\n <Box>\n <Text variant=\"h5\" element=\"h4\">\n <VersionChangeSummary info={oldSummary} />\n <Icon name=\"arrow-right\" />\n <VersionChangeSummary info={newSummary} />\n </Text>\n </Box>\n <Box>\n {noHumanReadableDiffs && (\n <EmptyState\n message={t('core.versionHistory.no-properties-changed', 'No relevant properties changed')}\n variant=\"not-found\"\n hideImage\n >\n <Trans i18nKey=\"core.versionHistory.view-json-diff\">View JSON diff to see all changes</Trans>\n </EmptyState>\n )}\n {Object.entries(diff).map(([key, diffs]) => (\n <DiffGroup diffs={diffs} key={key} title={key} />\n ))}\n <Divider />\n </Box>\n <Stack gap={2} direction=\"row\" justifyContent=\"space-between\">\n <Button\n variant=\"secondary\"\n onClick={() => {\n showJsonDiff ? setShowJsonDiff(false) : setShowJsonDiff(true);\n }}\n >\n {showJsonDiff && (\n <Trans i18nKey=\"core.versionHistory.comparison.header.hide-json-diff\">Hide JSON diff </Trans>\n )}\n {!showJsonDiff && (\n <Trans i18nKey=\"core.versionHistory.comparison.header.show-json-diff\">Show JSON diff </Trans>\n )}\n </Button>\n {showRestoreButton && (\n <Button variant=\"destructive\" onClick={onRestore} icon=\"history\">\n <Trans i18nKey=\"alerting.alertVersionHistory.restore-version\">\n Restore to version {{ version: oldSummary.version }}\n </Trans>\n </Button>\n )}\n </Stack>\n {showJsonDiff && (\n <DiffViewer oldValue={JSON.stringify(oldVersion, null, 2)} newValue={JSON.stringify(newVersion, null, 2)} />\n )}\n </Stack>\n );\n};\n","import { useUpdateRuleInRuleGroup } from 'app/features/alerting/unified/hooks/ruleGroup/useUpsertRuleFromRuleGroup';\nimport { useAsync } from 'app/features/alerting/unified/hooks/useAsync';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\nimport { fromRulerRuleAndRuleGroupIdentifier } from 'app/features/alerting/unified/utils/rule-id';\nimport { getRuleGroupLocationFromRuleWithLocation } from 'app/features/alerting/unified/utils/rules';\nimport { RuleWithLocation } from 'app/types/unified-alerting';\nimport { GrafanaRuleDefinition, RulerGrafanaRuleDTO, RulerRuleDTO } from 'app/types/unified-alerting-dto';\n\nexport function useRestoreVersion() {\n const [updateRuleInRuleGroup] = useUpdateRuleInRuleGroup();\n\n return useAsync(\n async (\n newVersion: RulerGrafanaRuleDTO<GrafanaRuleDefinition>,\n ruleWithLocation: RuleWithLocation<RulerRuleDTO>\n ) => {\n const ruleGroupIdentifier = getRuleGroupLocationFromRuleWithLocation(ruleWithLocation);\n const ruleIdentifier = fromRulerRuleAndRuleGroupIdentifier(ruleGroupIdentifier, newVersion);\n // restore version\n return updateRuleInRuleGroup.execute(ruleGroupIdentifier, ruleIdentifier, newVersion, {\n dataSourceName: GRAFANA_RULES_SOURCE_NAME,\n namespaceName: newVersion.grafana_alert.namespace_uid,\n groupName: newVersion.grafana_alert.rule_group,\n });\n }\n );\n}\n","import { ComponentProps } from 'react';\nimport { useNavigate } from 'react-router-dom-v5-compat';\n\nimport { urlUtil } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, ConfirmModal, Stack, Text } from '@grafana/ui';\nimport { useRuleWithLocation } from 'app/features/alerting/unified/hooks/useCombinedRule';\nimport { stringifyErrorLike } from 'app/features/alerting/unified/utils/misc';\nimport { rulerRuleToFormValues } from 'app/features/alerting/unified/utils/rule-form';\nimport { DiffGroup } from 'app/features/dashboard-scene/settings/version-history/DiffGroup';\nimport { jsonDiff } from 'app/features/dashboard-scene/settings/version-history/utils';\nimport { GrafanaRuleIdentifier } from 'app/types/unified-alerting';\nimport { GrafanaRuleDefinition, RulerGrafanaRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { useRestoreVersion } from './useRestoreVersion';\nimport { preprocessRuleForDiffDisplay } from './versions-utils';\n\nexport type Origin = 'version-list' | 'comparison-drawer';\n\ntype ModalProps = Pick<ComponentProps<typeof ConfirmModal>, 'isOpen' | 'onDismiss'> & {\n isOpen: boolean;\n baseVersion?: RulerGrafanaRuleDTO<GrafanaRuleDefinition>;\n versionToRestore?: RulerGrafanaRuleDTO<GrafanaRuleDefinition>;\n ruleIdentifier: GrafanaRuleIdentifier;\n onRestoreSucess: () => void;\n onRestoreError: (error: Error) => void;\n};\n\nexport const ConfirmVersionRestoreModal = ({\n isOpen,\n baseVersion,\n versionToRestore,\n ruleIdentifier,\n onDismiss,\n onRestoreSucess,\n onRestoreError,\n}: ModalProps) => {\n const { result: ruleWithLocation } = useRuleWithLocation({ ruleIdentifier });\n const navigate = useNavigate();\n const [restoreMethod, { error }] = useRestoreVersion();\n\n const title = t('alerting.alertVersionHistory.restore-modal.title', 'Restore version');\n const errorTitle = t('alerting.alertVersionHistory.restore-modal.error', 'Could not restore alert rule version ');\n const confirmText = !error\n ? t('alerting.alertVersionHistory.restore-modal.confirm', 'Yes, restore configuration')\n : 'Manually restore rule';\n\n const diff =\n baseVersion && versionToRestore\n ? jsonDiff(preprocessRuleForDiffDisplay(baseVersion), preprocessRuleForDiffDisplay(versionToRestore))\n : undefined;\n\n async function onRestoreConfirm() {\n if (!versionToRestore || !ruleWithLocation) {\n return;\n }\n return restoreMethod\n .execute(versionToRestore, ruleWithLocation)\n .then(() => {\n onDismiss();\n onRestoreSucess();\n })\n .catch((err) => {\n onRestoreError(err);\n });\n }\n\n async function onManualRestore() {\n if (!versionToRestore || !ruleWithLocation) {\n return;\n }\n const payload = rulerRuleToFormValues({ ...ruleWithLocation, rule: versionToRestore });\n const ruleFormUrl = urlUtil.renderUrl(`/alerting/${ruleIdentifier.uid}/edit`, {\n isManualRestore: true,\n defaults: JSON.stringify(payload),\n returnTo: window.location.pathname + window.location.search,\n });\n\n navigate(ruleFormUrl);\n }\n\n return (\n <ConfirmModal\n isOpen={isOpen}\n title={title}\n confirmText={confirmText}\n confirmButtonVariant={!error ? 'destructive' : 'primary'}\n body={\n <Stack direction=\"column\" gap={2}>\n {!error && (\n <Trans i18nKey=\"alerting.alertVersionHistory.restore-modal.body\">\n Are you sure you want to restore the alert rule definition to this version? All unsaved changes will be\n lost.\n </Trans>\n )}\n <Text variant=\"h6\">\n <Trans i18nKey=\"alerting.alertVersionHistory.restore-modal.summary\">\n Summary of changes to be applied:\n </Trans>\n </Text>\n <div>\n {diff && Object.entries(diff).map(([key, diffs]) => <DiffGroup diffs={diffs} key={key} title={key} />)}\n </div>\n {error && (\n <Alert severity=\"warning\" title={errorTitle}>\n <Trans i18nKey=\"alerting.alertVersionHistory.restore-manually\">\n Your alert rule could not be restored. This may be due to changes to other entities such as contact\n points, data sources etc. Please manually restore the rule version\n </Trans>\n <pre style={{ marginBottom: 0 }}>\n <code>{stringifyErrorLike(error)}</code>\n </pre>\n </Alert>\n )}\n </Stack>\n }\n onConfirm={!error ? onRestoreConfirm : onManualRestore}\n onDismiss={onDismiss}\n />\n );\n};\n","import { useCallback, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Drawer } from '@grafana/ui';\nimport { VersionHistoryComparison } from 'app/core/components/VersionHistory/VersionHistoryComparison';\nimport { GrafanaRuleIdentifier } from 'app/types/unified-alerting';\nimport { GrafanaRuleDefinition, RulerGrafanaRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { ConfirmVersionRestoreModal } from './ConfirmVersionRestoreModal';\nimport { parseVersionInfoToSummary, preprocessRuleForDiffDisplay } from './versions-utils';\n\ninterface ComparisonDrawerProps {\n oldVersion: RulerGrafanaRuleDTO<GrafanaRuleDefinition>;\n newVersion: RulerGrafanaRuleDTO<GrafanaRuleDefinition>;\n ruleIdentifier: GrafanaRuleIdentifier;\n isNewLatest: boolean;\n setShowDrawer: (show: boolean) => void;\n onRestoreSuccess: () => void;\n onRestoreError: (error: Error) => void;\n canRestore: boolean;\n}\n\nexport const ComparisonDrawer = ({\n oldVersion,\n newVersion,\n ruleIdentifier,\n isNewLatest,\n setShowDrawer,\n onRestoreSuccess,\n onRestoreError,\n canRestore,\n}: ComparisonDrawerProps) => {\n const [showConfirmModal, setShowConfirmModal] = useState(false);\n const onDismiss = useCallback(() => setShowDrawer(false), [setShowDrawer]);\n\n const oldVersionSummary = parseVersionInfoToSummary(oldVersion);\n const newVersionSummary = parseVersionInfoToSummary(newVersion);\n return (\n <>\n <Drawer\n onClose={() => setShowDrawer(false)}\n title={t('alerting.alertVersionHistory.comparing-versions', 'Comparing versions')}\n >\n <VersionHistoryComparison\n oldSummary={oldVersionSummary}\n oldVersion={oldVersion}\n newSummary={newVersionSummary}\n newVersion={newVersion}\n preprocessVersion={preprocessRuleForDiffDisplay}\n showRestoreButton={isNewLatest && canRestore}\n onRestore={() => setShowConfirmModal(true)}\n />\n </Drawer>\n {showConfirmModal && (\n <ConfirmVersionRestoreModal\n ruleIdentifier={ruleIdentifier}\n baseVersion={newVersion}\n versionToRestore={oldVersion}\n isOpen={showConfirmModal}\n onDismiss={onDismiss}\n onRestoreSucess={onRestoreSuccess}\n onRestoreError={onRestoreError}\n />\n )}\n </>\n );\n};\n","import { useMemo, useState } from 'react';\n\nimport { dateTimeFormat, dateTimeFormatTimeAgo } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Badge, Button, Checkbox, Column, InteractiveTable, Stack, Text } from '@grafana/ui';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\nimport { computeVersionDiff } from 'app/features/alerting/unified/utils/diff';\nimport { RuleIdentifier } from 'app/types/unified-alerting';\nimport { GrafanaRuleDefinition, RulerGrafanaRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { ConfirmVersionRestoreModal } from './ConfirmVersionRestoreModal';\nimport { UpdatedByUser } from './UpdatedBy';\n\nconst VERSIONS_PAGE_SIZE = 20;\n\nexport interface VersionHistoryTableProps {\n onVersionsChecked(id: string): void;\n onCompareSingleVersion(rule: RulerGrafanaRuleDTO<GrafanaRuleDefinition>): void;\n ruleVersions: Array<RulerGrafanaRuleDTO<GrafanaRuleDefinition>>;\n disableSelection: boolean;\n checkedVersions: Set<string>;\n onRestoreSuccess: () => void;\n onRestoreError: (error: Error) => void;\n canRestore: boolean;\n}\nexport function VersionHistoryTable({\n onVersionsChecked,\n onCompareSingleVersion,\n ruleVersions,\n disableSelection,\n checkedVersions,\n onRestoreSuccess,\n onRestoreError,\n canRestore,\n}: VersionHistoryTableProps) {\n const [showConfirmModal, setShowConfirmModal] = useState(false);\n const [ruleToRestore, setRuleToRestore] = useState<RulerGrafanaRuleDTO<GrafanaRuleDefinition>>();\n const ruleToRestoreUid = ruleToRestore?.grafana_alert?.uid ?? '';\n const ruleIdentifier: RuleIdentifier = useMemo(\n () => ({ ruleSourceName: GRAFANA_RULES_SOURCE_NAME, uid: ruleToRestoreUid }),\n [ruleToRestoreUid]\n );\n\n const showConfirmation = (ruleToRestore: RulerGrafanaRuleDTO<GrafanaRuleDefinition>) => {\n setShowConfirmModal(true);\n setRuleToRestore(ruleToRestore);\n };\n\n const hideConfirmation = () => {\n setShowConfirmModal(false);\n };\n\n const unknown = t('alerting.alertVersionHistory.unknown', 'Unknown');\n\n const columns: Array<Column<RulerGrafanaRuleDTO<GrafanaRuleDefinition>>> = [\n {\n disableGrow: true,\n id: 'id',\n header: t('core.versionHistory.table.version', 'Version'),\n cell: ({ row }) => {\n const id = String(row.original.grafana_alert.version);\n const thisValue = checkedVersions.has(String(id ?? false)) ?? false;\n return (\n <Stack direction=\"row\">\n <Checkbox\n label={id}\n checked={thisValue}\n disabled={disableSelection && !thisValue}\n onChange={() => {\n onVersionsChecked(id);\n }}\n />\n </Stack>\n );\n },\n },\n {\n id: 'createdBy',\n header: t('core.versionHistory.table.updatedBy', 'Updated By'),\n disableGrow: true,\n cell: ({ row }) => {\n return <UpdatedByUser user={row.original.grafana_alert.updated_by} />;\n },\n },\n {\n id: 'created',\n header: t('core.versionHistory.table.updated', 'Date'),\n disableGrow: true,\n cell: ({ row }) => {\n const value = row.original.grafana_alert.updated;\n if (!value) {\n return unknown;\n }\n return dateTimeFormat(value) + ' (' + dateTimeFormatTimeAgo(value) + ')';\n },\n },\n {\n id: 'diff',\n disableGrow: true,\n cell: ({ rows, row }) => {\n const isLastItem = row.index === ruleVersions.length - 1;\n\n const prevVersion = isLastItem ? {} : rows[row.index + 1]?.original;\n const currentVersion = row.original;\n const diff = computeVersionDiff(prevVersion, currentVersion);\n\n const added = `+${diff.added}`;\n const removed = `-${diff.removed}`;\n return (\n <Stack alignItems=\"baseline\" gap={0.5}>\n <Text color=\"success\" variant=\"bodySmall\">\n {added}\n </Text>\n <Text color=\"error\" variant=\"bodySmall\">\n {removed}\n </Text>\n </Stack>\n );\n },\n },\n {\n id: 'actions',\n disableGrow: true,\n cell: ({ row }) => {\n const isFirstItem = row.index === 0;\n const compareWithLatest = t('alerting.alertVersionHistory.compare-with-latest', 'Compare with latest version');\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"flex-end\">\n {isFirstItem && <Badge text={t('alerting.alertVersionHistory.latest', 'Latest')} color=\"blue\" />}\n {!isFirstItem && canRestore && (\n <>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n icon=\"code-branch\"\n onClick={() => {\n onCompareSingleVersion(row.original);\n }}\n tooltip={compareWithLatest}\n >\n <Trans i18nKey=\"alerting.alertVersionHistory.compare\">Compare</Trans>\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n icon=\"history\"\n onClick={() => {\n row.original.grafana_alert.version && showConfirmation(row.original);\n }}\n >\n <Trans i18nKey=\"alerting.alertVersionHistory.restore\">Restore</Trans>\n </Button>\n </>\n )}\n </Stack>\n );\n },\n },\n ];\n\n return (\n <>\n <InteractiveTable\n pageSize={VERSIONS_PAGE_SIZE}\n columns={columns}\n data={ruleVersions}\n getRowId={(row) => `${row.grafana_alert.version}`}\n />\n <ConfirmVersionRestoreModal\n ruleIdentifier={ruleIdentifier}\n baseVersion={ruleVersions[0]}\n versionToRestore={ruleToRestore}\n isOpen={showConfirmModal}\n onDismiss={hideConfirmation}\n onRestoreSucess={onRestoreSuccess}\n onRestoreError={onRestoreError}\n />\n </>\n );\n}\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Alert, Button, EmptyState, LoadingPlaceholder, Stack, Text, Tooltip } from '@grafana/ui';\nimport { RuleGroupIdentifierV2, RuleIdentifier } from 'app/types/unified-alerting';\nimport { GrafanaRuleDefinition, RulerGrafanaRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport {\n LogMessages,\n logInfo,\n trackRuleVersionsComparisonClick,\n trackRuleVersionsRestoreFail,\n trackRuleVersionsRestoreSuccess,\n} from '../../../Analytics';\nimport { alertRuleApi } from '../../../api/alertRuleApi';\nimport { AlertRuleAction, useRulerRuleAbility } from '../../../hooks/useAbilities';\nimport { GRAFANA_RULES_SOURCE_NAME } from '../../../utils/datasource';\nimport { stringifyErrorLike } from '../../../utils/misc';\n\nimport { ComparisonDrawer } from './version-history/ComparisonDrawer';\nimport { Origin } from './version-history/ConfirmVersionRestoreModal';\nimport { VersionHistoryTable } from './version-history/VersionHistoryTable';\n\nconst { useGetAlertVersionHistoryQuery } = alertRuleApi;\n\ninterface AlertVersionHistoryProps {\n rule: RulerGrafanaRuleDTO;\n}\n\n/** List of (top level) properties to exclude from being shown in human readable summary of version changes */\nexport const grafanaAlertPropertiesToIgnore: Array<keyof GrafanaRuleDefinition> = [\n 'id',\n 'uid',\n 'updated',\n 'updated_by',\n 'version',\n];\n\n/**\n * Render the version history of a given Grafana managed alert rule, showing different edits\n * and allowing to restore to a previous version.\n */\nexport function AlertVersionHistory({ rule }: AlertVersionHistoryProps) {\n const ruleUid = rule.grafana_alert.uid;\n const { isLoading, currentData: ruleVersions = [], error } = useGetAlertVersionHistoryQuery({ uid: ruleUid });\n\n const ruleIdentifier: RuleIdentifier = useMemo(\n () => ({ ruleSourceName: GRAFANA_RULES_SOURCE_NAME, uid: ruleUid }),\n [ruleUid]\n );\n\n const [oldVersion, setOldVersion] = useState<RulerGrafanaRuleDTO<GrafanaRuleDefinition>>();\n const [newVersion, setNewVersion] = useState<RulerGrafanaRuleDTO<GrafanaRuleDefinition>>();\n const [showDrawer, setShowDrawer] = useState(false);\n // checked versions for comparison. key is the version number, value is whether it's checked\n const [checkedVersions, setCheckedVersions] = useState(new Set<string>());\n const canCompare = useMemo(() => checkedVersions.size > 1, [checkedVersions]);\n\n // check if restoring is allowed/enabled\n const groupIdentifier: RuleGroupIdentifierV2 = {\n namespace: { uid: rule.grafana_alert.namespace_uid },\n groupName: rule.grafana_alert.rule_group,\n groupOrigin: 'grafana',\n };\n const [restoreSupported, restoreAllowed] = useRulerRuleAbility(rule, groupIdentifier, AlertRuleAction.Restore);\n const canRestore =\n restoreAllowed && restoreSupported && Boolean(config.featureToggles.alertingRuleVersionHistoryRestore);\n\n //tracking functions for restore action\n const onRestoreSuccess = useCallback(\n (origin: Origin) => {\n trackRuleVersionsRestoreSuccess({\n origin,\n latest: newVersion === ruleVersions[0],\n oldVersion: oldVersion?.grafana_alert.version || 0,\n newVersion: newVersion?.grafana_alert.version || 0,\n });\n },\n [oldVersion, newVersion, ruleVersions]\n );\n\n const onRestoreFail = useCallback(\n (origin: Origin, error: Error) => {\n trackRuleVersionsRestoreFail({\n origin,\n latest: newVersion === ruleVersions[0],\n oldVersion: oldVersion?.grafana_alert.version || 0,\n newVersion: newVersion?.grafana_alert.version || 0,\n error,\n });\n },\n [oldVersion, newVersion, ruleVersions]\n );\n\n if (error) {\n return (\n <Alert title={t('alerting.alertVersionHistory.errorloading', 'Failed to load alert rule versions')}>\n {stringifyErrorLike(error)}\n </Alert>\n );\n }\n\n if (isLoading) {\n return <LoadingPlaceholder text={t('alerting.common.loading', 'Loading...')} />;\n }\n\n if (!ruleVersions.length) {\n // We don't expect this to happen - all alert rules _should_ have at least one version\n logInfo(LogMessages.noAlertRuleVersionsFound, { ruleUid });\n return (\n <EmptyState\n variant=\"not-found\"\n message={t('alerting.alertVersionHistory.noVersionsFound', 'No versions found for this rule')}\n />\n );\n }\n\n const compareSelectedVersions = () => {\n // precondition: we have only two versions selected in checkedVersions\n const [older, newer] = ruleVersions\n .filter((rule) => {\n const version = rule.grafana_alert.version;\n if (!version && version !== 0) {\n return;\n }\n return checkedVersions.has(String(rule.grafana_alert.version));\n })\n .sort((a, b) => {\n const aVersion = a.grafana_alert.version;\n const bVersion = b.grafana_alert.version;\n if (aVersion === undefined || bVersion === undefined) {\n return 0;\n }\n return aVersion - bVersion;\n });\n\n trackRuleVersionsComparisonClick({\n latest: newer === ruleVersions[0],\n oldVersion: older?.grafana_alert.version || 0,\n newVersion: newer?.grafana_alert.version || 0,\n });\n\n // setting the versions to compare\n compareVersions(older, newer);\n };\n\n const compareVersions = (\n oldRule: RulerGrafanaRuleDTO<GrafanaRuleDefinition>,\n newRule: RulerGrafanaRuleDTO<GrafanaRuleDefinition>\n ) => {\n setOldVersion(oldRule);\n setNewVersion(newRule);\n setShowDrawer(true);\n };\n\n function handleCheckedVersionChange(id: string) {\n setCheckedVersions((prevState) => {\n const newState = new Set(prevState);\n newState.has(id) ? newState.delete(id) : newState.add(id);\n return newState;\n });\n setOldVersion(undefined);\n setNewVersion(undefined);\n }\n\n const isNewLatest = ruleVersions[0].grafana_alert.version === newVersion?.grafana_alert.version;\n\n return (\n <Stack direction=\"column\" gap={2}>\n <Text variant=\"body\">\n <Trans i18nKey=\"alerting.alertVersionHistory.description\">\n Each time you edit the alert rule, a new version is created. Select two versions below and compare their\n differences.\n </Trans>\n </Text>\n <Stack>\n <Tooltip\n content={t('core.versionHistory.comparison.select', 'Select two versions to start comparing')}\n placement=\"bottom\"\n >\n <Button type=\"button\" disabled={!canCompare} onClick={compareSelectedVersions} icon=\"code-branch\">\n <Trans i18nKey=\"alerting.alertVersionHistory.compareVersions\">Compare versions</Trans>\n </Button>\n </Tooltip>\n </Stack>\n {showDrawer && oldVersion && newVersion && (\n <ComparisonDrawer\n oldVersion={oldVersion}\n newVersion={newVersion}\n ruleIdentifier={ruleIdentifier}\n isNewLatest={isNewLatest}\n setShowDrawer={setShowDrawer}\n onRestoreSuccess={() => onRestoreSuccess('comparison-drawer')}\n onRestoreError={(err: Error) => onRestoreFail('comparison-drawer', err)}\n canRestore={canRestore}\n />\n )}\n <VersionHistoryTable\n onCompareSingleVersion={(rule) => compareVersions(rule, ruleVersions[0])}\n onVersionsChecked={handleCheckedVersionChange}\n ruleVersions={ruleVersions}\n disableSelection={canCompare}\n checkedVersions={checkedVersions}\n onRestoreSuccess={() => onRestoreSuccess('version-list')}\n onRestoreError={(err: Error) => onRestoreFail('version-list', err)}\n canRestore={canRestore}\n />\n </Stack>\n );\n}\n","export const RECEIVER_STATUS_KEY = Symbol('receiver_status');\nexport const RECEIVER_META_KEY = Symbol('receiver_metadata');\nexport const RECEIVER_PLUGIN_META_KEY = Symbol('receiver_plugin_metadata');\n","import { DataSourceJsonData, DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { InlineSwitch } from '../../components/Switch/Switch';\nimport { InlineField } from '../Forms/InlineField';\n\nexport interface Props<T extends DataSourceJsonData>\n extends Pick<DataSourcePluginOptionsEditorProps<T>, 'options' | 'onOptionsChange'> {}\n\nexport interface SecureSocksProxyConfig extends DataSourceJsonData {\n enableSecureSocksProxy?: boolean;\n}\n\nexport function SecureSocksProxySettings<T extends SecureSocksProxyConfig>({\n options,\n onOptionsChange,\n}: Props<T>): JSX.Element {\n return (\n <div>\n <h3 className=\"page-heading\">\n <Trans i18nKey=\"grafana-ui.data-source-settings.secure-socks-heading\">Secure Socks Proxy</Trans>\n </h3>\n <div className=\"gf-form-group\">\n <div className=\"gf-form-inline\">\n <div className=\"gf-form\">\n <InlineField\n labelWidth={26}\n label={t('grafana-ui.data-source-settings.secure-socks-label', 'Enabled')}\n tooltip={t(\n 'grafana-ui.data-source-settings.secure-socks-tooltip',\n 'Connect to this datasource via the secure socks proxy.'\n )}\n >\n <InlineSwitch\n value={options.jsonData.enableSecureSocksProxy ?? false}\n onChange={(event) =>\n onOptionsChange({\n ...options,\n jsonData: { ...options.jsonData, enableSecureSocksProxy: event!.currentTarget.checked },\n })\n }\n />\n </InlineField>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { isString } from 'lodash';\nimport { useState } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { LinkButton, Stack } from '@grafana/ui';\nimport AlertRuleMenu from 'app/features/alerting/unified/components/rule-viewer/AlertRuleMenu';\nimport { useDeleteModal } from 'app/features/alerting/unified/components/rule-viewer/DeleteModal';\nimport { INSTANCES_DISPLAY_LIMIT } from 'app/features/alerting/unified/components/rules/RuleDetails';\nimport SilenceGrafanaRuleDrawer from 'app/features/alerting/unified/components/silences/SilenceGrafanaRuleDrawer';\nimport { useRulesFilter } from 'app/features/alerting/unified/hooks/useFilteredRules';\nimport { useDispatch } from 'app/types/store';\nimport { CombinedRule, RuleIdentifier, RulesSource } from 'app/types/unified-alerting';\n\nimport { AlertRuleAction, useAlertRuleAbility } from '../../hooks/useAbilities';\nimport { fetchPromAndRulerRulesAction } from '../../state/actions';\nimport { GRAFANA_RULES_SOURCE_NAME, getRulesSourceName } from '../../utils/datasource';\nimport { groupIdentifier } from '../../utils/groupIdentifier';\nimport { createViewLink } from '../../utils/misc';\nimport * as ruleId from '../../utils/rule-id';\nimport { getRuleUID, prometheusRuleType, rulerRuleType } from '../../utils/rules';\nimport { createRelativeUrl } from '../../utils/url';\nimport { EnrichmentDrawerExtension } from '../rule-list/extensions/EnrichmentDrawerExtension';\n\nimport { RedirectToCloneRule } from './CloneRule';\n\nexport const matchesWidth = (width: number) => window.matchMedia(`(max-width: ${width}px)`).matches;\n\ninterface Props {\n rule: CombinedRule;\n rulesSource: RulesSource;\n /**\n * Should we show the buttons in a \"compact\" state?\n * i.e. without text and using smaller button sizes\n */\n compact?: boolean;\n showViewButton?: boolean;\n}\n\n/**\n * **Action** buttons to show for an alert rule - e.g. \"View\", \"Edit\", \"More...\"\n */\nexport const RuleActionsButtons = ({ compact, showViewButton, rule, rulesSource }: Props) => {\n const dispatch = useDispatch();\n\n const redirectToListView = compact ? false : true;\n const [deleteModal, showDeleteModal] = useDeleteModal(redirectToListView);\n\n const [showSilenceDrawer, setShowSilenceDrawer] = useState<boolean>(false);\n const [showEnrichmentDrawer, setShowEnrichmentDrawer] = useState<boolean>(false);\n\n const [redirectToClone, setRedirectToClone] = useState<\n { identifier: RuleIdentifier; isProvisioned: boolean } | undefined\n >(undefined);\n\n const { namespace, group, rulerRule } = rule;\n const { hasActiveFilters } = useRulesFilter();\n\n const isProvisioned = rulerRuleType.grafana.rule(rule.rulerRule) && Boolean(rule.rulerRule.grafana_alert.provenance);\n\n const [editRuleSupported, editRuleAllowed] = useAlertRuleAbility(rule, AlertRuleAction.Update);\n\n const canEditRule = editRuleSupported && editRuleAllowed;\n\n const buttons: JSX.Element[] = [];\n const buttonSize = compact ? 'sm' : 'md';\n\n const sourceName = getRulesSourceName(rulesSource);\n\n const identifier = ruleId.fromCombinedRule(sourceName, rule);\n const groupId = groupIdentifier.fromCombinedRule(rule);\n\n if (showViewButton) {\n buttons.push(\n <LinkButton\n title={t('alerting.rule-actions-buttons.title-view', 'View')}\n size={buttonSize}\n key=\"view\"\n variant=\"secondary\"\n icon=\"eye\"\n href={createViewLink(rulesSource, rule)}\n >\n <Trans i18nKey=\"common.view\">View</Trans>\n </LinkButton>\n );\n }\n\n if (rulerRule && canEditRule) {\n const identifier = ruleId.fromRulerRule(sourceName, namespace.name, group.name, rulerRule);\n\n const editURL = createRelativeUrl(`/alerting/${encodeURIComponent(ruleId.stringifyIdentifier(identifier))}/edit`);\n\n buttons.push(\n <LinkButton\n title={t('alerting.rule-actions-buttons.title-edit', 'Edit')}\n size={buttonSize}\n key=\"edit\"\n variant=\"secondary\"\n icon=\"pen\"\n href={editURL}\n >\n <Trans i18nKey=\"common.edit\">Edit</Trans>\n </LinkButton>\n );\n }\n\n if (!rule.promRule && !rule.rulerRule) {\n return null;\n }\n\n // determine if this rule can be silenced by checking for Grafana Alert rule type and extracting the UID\n const ruleUid = getRuleUID(rule.rulerRule ?? rule.promRule);\n const silenceableRule =\n isString(ruleUid) &&\n (rulerRuleType.grafana.alertingRule(rule.rulerRule) || prometheusRuleType.grafana.alertingRule(rule.promRule));\n\n return (\n <Stack gap={1} alignItems=\"center\" wrap=\"nowrap\">\n {buttons}\n <AlertRuleMenu\n rulerRule={rule.rulerRule}\n promRule={rule.promRule}\n identifier={identifier}\n groupIdentifier={groupId}\n handleDelete={() => {\n if (rule.rulerRule) {\n const editableRuleIdentifier = ruleId.fromRulerRuleAndGroupIdentifierV2(groupId, rule.rulerRule);\n showDeleteModal(editableRuleIdentifier, groupId);\n }\n }}\n handleSilence={() => setShowSilenceDrawer(true)}\n handleManageEnrichments={() => setShowEnrichmentDrawer(true)}\n handleDuplicateRule={() => setRedirectToClone({ identifier, isProvisioned })}\n onPauseChange={() => {\n // Uses INSTANCES_DISPLAY_LIMIT + 1 here as exporting LIMIT_ALERTS from RuleList has the side effect\n // of breaking some unrelated tests in Policy.test.tsx due to mocking approach\n const limitAlerts = hasActiveFilters ? undefined : INSTANCES_DISPLAY_LIMIT + 1;\n // Trigger a re-fetch of the rules table\n // TODO: Migrate rules table functionality to RTK Query, so we instead rely\n // on tag invalidation (or optimistic cache updates) for this\n dispatch(fetchPromAndRulerRulesAction({ rulesSourceName: GRAFANA_RULES_SOURCE_NAME, limitAlerts }));\n }}\n buttonSize={buttonSize}\n />\n {deleteModal}\n {silenceableRule && showSilenceDrawer && (\n <SilenceGrafanaRuleDrawer ruleUid={ruleUid} onClose={() => setShowSilenceDrawer(false)} />\n )}\n {ruleUid && showEnrichmentDrawer && (\n <EnrichmentDrawerExtension ruleUid={ruleUid} onClose={() => setShowEnrichmentDrawer(false)} />\n )}\n {redirectToClone?.identifier && (\n <RedirectToCloneRule\n identifier={redirectToClone.identifier}\n isProvisioned={redirectToClone.isProvisioned}\n onDismiss={() => setRedirectToClone(undefined)}\n />\n )}\n </Stack>\n );\n};\n","import { useAsync } from 'react-use';\n\nimport { PluginMeta } from '@grafana/data';\nimport { getPluginSettings } from 'app/features/plugins/pluginSettings';\n\nimport { PluginID } from '../components/PluginBridge';\ninterface PluginBridgeHookResponse {\n loading: boolean;\n installed?: boolean;\n error?: Error;\n settings?: PluginMeta<{}>;\n}\n\nexport function usePluginBridge(plugin: PluginID): PluginBridgeHookResponse {\n const { loading, error, value } = useAsync(() => getPluginSettings(plugin, { showErrorAlert: false }));\n\n const installed = value && !error && !loading;\n const enabled = value?.enabled;\n const isLoading = loading && !value;\n\n if (isLoading) {\n return { loading: true };\n }\n\n if (!installed || !enabled) {\n return { loading: false, installed: false };\n }\n\n return { loading, installed: true, settings: value };\n}\n","import { css, cx } from '@emotion/css';\nimport { forwardRef } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { GrafanaTheme2, ScopedVars } from '@grafana/data';\nimport { sanitize, sanitizeUrl } from '@grafana/data/internal';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { DashboardLink } from '@grafana/schema';\nimport { Dropdown, Icon, LinkButton, Button, Menu, ScrollContainer, useStyles2 } from '@grafana/ui';\nimport { ButtonLinkProps } from '@grafana/ui/internal';\nimport { getGrafanaSearcher } from 'app/features/search/service/searcher';\nimport { DashboardQueryResult } from 'app/features/search/service/types';\n\nimport { getLinkSrv } from '../../../panel/panellinks/link_srv';\n\ninterface Props {\n link: DashboardLink;\n linkInfo: { title: string };\n dashboardUID: string;\n scopedVars?: ScopedVars;\n}\n\ninterface DashboardLinksMenuProps {\n link: DashboardLink;\n dashboardUID: string;\n}\n\nfunction DashboardLinksMenu({ dashboardUID, link }: DashboardLinksMenuProps) {\n const styles = useStyles2(getStyles);\n const resolvedLinks = useResolvedLinks({ dashboardUID, link });\n\n if (!resolvedLinks || resolvedLinks.length === 0) {\n return (\n <Menu>\n <Menu.Item\n disabled\n label={t('dashboard.dashboard-links-menu.label-no-dashboards-found', 'No dashboards found')}\n />\n </Menu>\n );\n }\n\n return (\n <Menu>\n <div className={styles.dropdown}>\n <ScrollContainer maxHeight=\"inherit\">\n {resolvedLinks.map((resolvedLink, index) => {\n return (\n <Menu.Item\n url={resolvedLink.url}\n target={link.targetBlank ? '_blank' : undefined}\n key={`dashlinks-dropdown-item-${resolvedLink.uid}-${index}`}\n label={resolvedLink.title}\n testId={selectors.components.DashboardLinks.link}\n aria-label={t(\n 'dashboard.dashboard-links-menu.aria-label-dashboard-name',\n '{{dashboardName}} dashboard',\n { dashboardName: resolvedLink.title }\n )}\n />\n );\n })}\n </ScrollContainer>\n </div>\n </Menu>\n );\n}\n\nexport const DashboardLinksDashboard = ({ link, linkInfo, dashboardUID }: Props) => {\n const { title } = linkInfo;\n const resolvedLinks = useResolvedLinks({ link, dashboardUID });\n const styles = useStyles2(getStyles);\n\n if (link.asDropdown) {\n return (\n <Dropdown overlay={<DashboardLinksMenu link={link} dashboardUID={dashboardUID} />}>\n <DashboardLinkButton\n data-placement=\"bottom\"\n data-toggle=\"dropdown\"\n aria-controls=\"dropdown-list\"\n aria-haspopup=\"menu\"\n fill=\"outline\"\n variant=\"secondary\"\n data-testid={selectors.components.DashboardLinks.dropDown}\n >\n <Icon aria-hidden name=\"bars\" className={styles.iconMargin} />\n <span>{title}</span>\n </DashboardLinkButton>\n </Dropdown>\n );\n }\n\n return (\n <>\n {resolvedLinks.length > 0 &&\n resolvedLinks.map((resolvedLink, index) => {\n return (\n <DashboardLinkButton\n key={`dashlinks-list-item-${resolvedLink.uid}-${index}`}\n icon=\"apps\"\n variant=\"secondary\"\n fill=\"outline\"\n href={resolvedLink.url}\n target={link.targetBlank ? '_blank' : undefined}\n rel=\"noreferrer\"\n data-testid={selectors.components.DashboardLinks.link}\n >\n {resolvedLink.title}\n </DashboardLinkButton>\n );\n })}\n </>\n );\n};\n\nconst useResolvedLinks = ({ link, dashboardUID }: Pick<Props, 'link' | 'dashboardUID'>): ResolvedLinkDTO[] => {\n const { tags } = link;\n const result = useAsync(() => searchForTags(tags), [tags]);\n if (!result.value) {\n return [];\n }\n return resolveLinks(dashboardUID, link, result.value.view);\n};\n\ninterface ResolvedLinkDTO {\n uid: string;\n url: string;\n title: string;\n}\n\nexport async function searchForTags(tags: string[]) {\n return getGrafanaSearcher().search({ limit: 100, tags, kind: ['dashboard'] });\n}\n\nexport function resolveLinks(\n dashboardUID: string,\n link: DashboardLink,\n searchHits: DashboardQueryResult[],\n dependencies: { getLinkSrv: typeof getLinkSrv; sanitize: typeof sanitize; sanitizeUrl: typeof sanitizeUrl } = {\n getLinkSrv,\n sanitize,\n sanitizeUrl,\n }\n): ResolvedLinkDTO[] {\n const hits: ResolvedLinkDTO[] = [];\n for (const searchHit of searchHits) {\n if (searchHit.uid === dashboardUID) {\n continue;\n }\n const uid = searchHit.uid;\n const title = dependencies.sanitize(searchHit.name);\n const resolvedLink = dependencies.getLinkSrv().getLinkUrl({ ...link, url: searchHit.url });\n const url = dependencies.sanitizeUrl(resolvedLink);\n hits.push({ uid, title, url });\n }\n return hits;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n iconMargin: css({\n marginRight: theme.spacing(0.5),\n }),\n dropdown: css({\n maxWidth: 'max(30vw, 300px)',\n maxHeight: '70vh',\n }),\n button: css({\n color: theme.colors.text.primary,\n }),\n dashButton: css({\n fontSize: theme.typography.bodySmall.fontSize,\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n }),\n };\n}\n\nexport const DashboardLinkButton = forwardRef<unknown, ButtonLinkProps>(({ className, ...otherProps }, ref) => {\n const styles = useStyles2(getStyles);\n const Component = otherProps.href ? LinkButton : Button;\n return (\n <Component\n {...otherProps}\n variant=\"secondary\"\n fill=\"outline\"\n className={cx(className, styles.dashButton)}\n ref={ref as any}\n />\n );\n});\n\nDashboardLinkButton.displayName = 'DashboardLinkButton';\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { InlineList } from '../List/InlineList';\nimport { List } from '../List/List';\n\nimport { VizLegendListItem } from './VizLegendListItem';\nimport { VizLegendBaseProps, VizLegendItem } from './types';\n\nexport interface Props<T> extends VizLegendBaseProps<T> {}\n\n/**\n * @internal\n */\nexport const VizLegendList = <T extends unknown>({\n items,\n itemRenderer,\n onLabelMouseOver,\n onLabelMouseOut,\n onLabelClick,\n placement,\n className,\n readonly,\n}: Props<T>) => {\n const styles = useStyles2(getStyles);\n\n if (!itemRenderer) {\n /* eslint-disable-next-line react/display-name */\n itemRenderer = (item) => (\n <VizLegendListItem\n item={item}\n onLabelClick={onLabelClick}\n onLabelMouseOver={onLabelMouseOver}\n onLabelMouseOut={onLabelMouseOut}\n readonly={readonly}\n />\n );\n }\n\n const getItemKey = (item: VizLegendItem<T>) => `${item.getItemKey ? item.getItemKey() : item.label}`;\n\n switch (placement) {\n case 'right': {\n const renderItem = (item: VizLegendItem<T>, index: number) => {\n return <span className={styles.itemRight}>{itemRenderer!(item, index)}</span>;\n };\n\n return (\n <div className={cx(styles.rightWrapper, className)}>\n <List items={items} renderItem={renderItem} getItemKey={getItemKey} />\n </div>\n );\n }\n case 'bottom':\n default: {\n const leftItems = items.filter((item) => item.yAxis === 1);\n const rightItems = items.filter((item) => item.yAxis !== 1);\n\n const renderItem = (item: VizLegendItem<T>, index: number) => {\n return <span className={styles.itemBottom}>{itemRenderer!(item, index)}</span>;\n };\n\n return (\n <div className={cx(styles.bottomWrapper, className)}>\n {leftItems.length > 0 && (\n <div className={styles.section}>\n <InlineList items={leftItems} renderItem={renderItem} getItemKey={getItemKey} />\n </div>\n )}\n {rightItems.length > 0 && (\n <div className={cx(styles.section, styles.sectionRight)}>\n <InlineList items={rightItems} renderItem={renderItem} getItemKey={getItemKey} />\n </div>\n )}\n </div>\n );\n }\n }\n};\n\nVizLegendList.displayName = 'VizLegendList';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const itemStyles = css({\n paddingRight: '10px',\n display: 'flex',\n fontSize: theme.typography.bodySmall.fontSize,\n whiteSpace: 'nowrap',\n });\n\n return {\n itemBottom: itemStyles,\n itemRight: cx(\n itemStyles,\n css({\n marginBottom: theme.spacing(0.5),\n })\n ),\n rightWrapper: css({\n padding: theme.spacing(0.5),\n }),\n bottomWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n width: '100%',\n padding: theme.spacing(0.5),\n gap: '15px 25px',\n }),\n section: css({\n display: 'flex',\n }),\n sectionRight: css({\n justifyContent: 'flex-end',\n flexGrow: 1,\n flexBasis: '50%',\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { formattedValueToString, GrafanaTheme2 } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { hoverColor } from '../../themes/mixins';\n\nimport { VizLegendSeriesIcon } from './VizLegendSeriesIcon';\nimport { VizLegendItem } from './types';\n\nexport interface Props {\n key?: React.Key;\n item: VizLegendItem;\n className?: string;\n onLabelClick?: (item: VizLegendItem, event: React.MouseEvent<HTMLButtonElement>) => void;\n onLabelMouseOver?: (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n ) => void;\n onLabelMouseOut?: (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n ) => void;\n readonly?: boolean;\n}\n\n/**\n * @internal\n */\nexport const LegendTableItem = ({\n item,\n onLabelClick,\n onLabelMouseOver,\n onLabelMouseOut,\n className,\n readonly,\n}: Props) => {\n const styles = useStyles2(getStyles);\n\n const onMouseOver = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>) => {\n if (onLabelMouseOver) {\n onLabelMouseOver(item, event);\n }\n },\n [item, onLabelMouseOver]\n );\n\n const onMouseOut = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>) => {\n if (onLabelMouseOut) {\n onLabelMouseOut(item, event);\n }\n },\n [item, onLabelMouseOut]\n );\n\n const onClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (onLabelClick) {\n onLabelClick(item, event);\n }\n },\n [item, onLabelClick]\n );\n\n return (\n <tr className={cx(styles.row, className)}>\n <td>\n <span className={styles.itemWrapper}>\n <VizLegendSeriesIcon\n color={item.color}\n seriesName={item.fieldName ?? item.label}\n readonly={readonly}\n lineStyle={item.lineStyle}\n />\n <button\n disabled={readonly}\n type=\"button\"\n title={item.label}\n onBlur={onMouseOut}\n onFocus={onMouseOver}\n onMouseOver={onMouseOver}\n onMouseOut={onMouseOut}\n onClick={!readonly ? onClick : undefined}\n className={cx(styles.label, item.disabled && styles.labelDisabled)}\n >\n {item.label}{' '}\n {item.yAxis === 2 && (\n <span className={styles.yAxisLabel}>\n <Trans i18nKey=\"grafana-ui.viz-legend.right-axis-indicator\">(right y-axis)</Trans>\n </span>\n )}\n </button>\n </span>\n </td>\n {item.getDisplayValues &&\n item.getDisplayValues().map((stat, index) => {\n return (\n <td className={styles.value} key={`${stat.title}-${index}`}>\n {formattedValueToString(stat)}\n </td>\n );\n })}\n </tr>\n );\n};\n\nLegendTableItem.displayName = 'LegendTableItem';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const rowHoverBg = hoverColor(theme.colors.background.primary, theme);\n\n return {\n row: css({\n label: 'LegendRow',\n fontSize: theme.v1.typography.size.sm,\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n td: {\n padding: theme.spacing(0.25, 1),\n whiteSpace: 'nowrap',\n },\n\n '&:hover': {\n background: rowHoverBg,\n },\n }),\n label: css({\n label: 'LegendLabel',\n whiteSpace: 'nowrap',\n background: 'none',\n border: 'none',\n fontSize: 'inherit',\n padding: 0,\n maxWidth: '600px',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n userSelect: 'text',\n }),\n labelDisabled: css({\n label: 'LegendLabelDisabled',\n color: theme.colors.text.disabled,\n }),\n itemWrapper: css({\n display: 'flex',\n whiteSpace: 'nowrap',\n alignItems: 'center',\n }),\n value: css({\n textAlign: 'right',\n }),\n yAxisLabel: css({\n color: theme.colors.text.secondary,\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\n\nimport { LegendTableItem } from './VizLegendTableItem';\nimport { VizLegendItem, VizLegendTableProps } from './types';\n\nconst nameSortKey = 'Name';\nconst naturalCompare = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare;\n\n/**\n * @internal\n */\nexport const VizLegendTable = <T extends unknown>({\n items,\n sortBy: sortKey,\n sortDesc,\n itemRenderer,\n className,\n onToggleSort,\n onLabelClick,\n onLabelMouseOver,\n onLabelMouseOut,\n readonly,\n isSortable,\n}: VizLegendTableProps<T>): JSX.Element => {\n const styles = useStyles2(getStyles);\n const header: Record<string, string> = {};\n\n if (isSortable) {\n header[nameSortKey] = '';\n }\n\n for (const item of items) {\n if (item.getDisplayValues) {\n for (const displayValue of item.getDisplayValues()) {\n header[displayValue.title ?? '?'] = displayValue.description ?? '';\n }\n }\n }\n\n if (sortKey != null) {\n let itemVals = new Map<VizLegendItem, number>();\n\n items.forEach((item) => {\n if (sortKey !== nameSortKey && item.getDisplayValues) {\n const stat = item.getDisplayValues().find((stat) => stat.title === sortKey);\n const val = stat == null || Number.isNaN(stat.numeric) ? -Infinity : stat.numeric;\n itemVals.set(item, val);\n }\n });\n\n let sortMult = sortDesc ? -1 : 1;\n\n if (sortKey === nameSortKey) {\n // string sort\n items.sort((a, b) => {\n return sortMult * naturalCompare(a.label, b.label);\n });\n } else {\n // numeric sort\n items.sort((a, b) => {\n const aVal = itemVals.get(a) ?? 0;\n const bVal = itemVals.get(b) ?? 0;\n\n return sortMult * (aVal - bVal);\n });\n }\n }\n\n if (!itemRenderer) {\n /* eslint-disable-next-line react/display-name */\n itemRenderer = (item, index) => (\n <LegendTableItem\n key={`${item.label}-${index}`}\n item={item}\n onLabelClick={onLabelClick}\n onLabelMouseOver={onLabelMouseOver}\n onLabelMouseOut={onLabelMouseOut}\n readonly={readonly}\n />\n );\n }\n\n return (\n <table className={cx(styles.table, className)}>\n <thead>\n <tr>\n {!isSortable && <th></th>}\n {Object.keys(header).map((columnTitle) => (\n <th\n title={header[columnTitle]}\n key={columnTitle}\n className={cx(styles.header, onToggleSort && styles.headerSortable, isSortable && styles.nameHeader, {\n [styles.withIcon]: sortKey === columnTitle,\n })}\n onClick={() => {\n if (onToggleSort) {\n onToggleSort(columnTitle);\n }\n }}\n >\n {columnTitle}\n {sortKey === columnTitle && <Icon size=\"xs\" name={sortDesc ? 'angle-down' : 'angle-up'} />}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>{items.map(itemRenderer!)}</tbody>\n </table>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n table: css({\n width: '100%',\n 'th:first-child': {\n width: '100%',\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n },\n }),\n header: css({\n color: theme.colors.primary.text,\n fontWeight: theme.typography.fontWeightMedium,\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(0.25, 1, 0.25, 1),\n fontSize: theme.typography.bodySmall.fontSize,\n textAlign: 'right',\n whiteSpace: 'nowrap',\n }),\n nameHeader: css({\n textAlign: 'left',\n paddingLeft: '30px',\n }),\n // This needs to be padding-right - icon size(xs==12) to avoid jumping\n withIcon: css({\n paddingRight: '4px',\n }),\n headerSortable: css({\n cursor: 'pointer',\n }),\n});\n","import { SeriesVisibilityChangeMode } from '../PanelChrome/types';\n\nexport function mapMouseEventToMode(event: React.MouseEvent): SeriesVisibilityChangeMode {\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n return SeriesVisibilityChangeMode.AppendToSelection;\n }\n return SeriesVisibilityChangeMode.ToggleSelection;\n}\n","import { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { DataHoverClearEvent, DataHoverEvent } from '@grafana/data';\nimport { LegendDisplayMode } from '@grafana/schema';\n\nimport { SeriesVisibilityChangeMode, usePanelContext } from '../PanelChrome';\n\nimport { VizLegendList } from './VizLegendList';\nimport { VizLegendTable } from './VizLegendTable';\nimport { LegendProps, SeriesVisibilityChangeBehavior, VizLegendItem } from './types';\nimport { mapMouseEventToMode } from './utils';\n\n/**\n * @public\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/plugins-vizlegend--docs\n */\nexport function VizLegend<T>({\n items,\n thresholdItems,\n mappingItems,\n displayMode,\n sortBy: sortKey,\n seriesVisibilityChangeBehavior = SeriesVisibilityChangeBehavior.Isolate,\n sortDesc,\n onLabelClick,\n onToggleSort,\n placement,\n className,\n itemRenderer,\n readonly,\n isSortable,\n}: LegendProps<T>) {\n const { eventBus, onToggleSeriesVisibility, onToggleLegendSort } = usePanelContext();\n\n const onMouseOver = useCallback(\n (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>\n ) => {\n eventBus?.publish({\n type: DataHoverEvent.type,\n payload: {\n raw: event,\n x: 0,\n y: 0,\n dataId: item.label,\n },\n });\n },\n [eventBus]\n );\n\n const onMouseOut = useCallback(\n (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.FocusEvent<HTMLButtonElement>\n ) => {\n eventBus?.publish({\n type: DataHoverClearEvent.type,\n payload: {\n raw: event,\n x: 0,\n y: 0,\n dataId: item.label,\n },\n });\n },\n [eventBus]\n );\n\n const onLegendLabelClick = useCallback(\n (item: VizLegendItem, event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (onLabelClick) {\n onLabelClick(item, event);\n }\n if (onToggleSeriesVisibility) {\n onToggleSeriesVisibility(\n item.fieldName ?? item.label,\n seriesVisibilityChangeBehavior === SeriesVisibilityChangeBehavior.Hide\n ? SeriesVisibilityChangeMode.AppendToSelection\n : mapMouseEventToMode(event)\n );\n }\n },\n [onToggleSeriesVisibility, onLabelClick, seriesVisibilityChangeBehavior]\n );\n\n const makeVizLegendList = useCallback(\n (items: VizLegendItem[]) => {\n return (\n <VizLegendList<T>\n className={className}\n placement={placement}\n onLabelMouseOver={onMouseOver}\n onLabelMouseOut={onMouseOut}\n onLabelClick={onLegendLabelClick}\n itemRenderer={itemRenderer}\n readonly={readonly}\n items={items}\n />\n );\n },\n [className, placement, onMouseOver, onMouseOut, onLegendLabelClick, itemRenderer, readonly]\n );\n\n switch (displayMode) {\n case LegendDisplayMode.Table:\n return (\n <VizLegendTable<T>\n className={className}\n items={items}\n placement={placement}\n sortBy={sortKey}\n sortDesc={sortDesc}\n onLabelClick={onLegendLabelClick}\n onToggleSort={onToggleSort || onToggleLegendSort}\n onLabelMouseOver={onMouseOver}\n onLabelMouseOut={onMouseOut}\n itemRenderer={itemRenderer}\n readonly={readonly}\n isSortable={isSortable}\n />\n );\n case LegendDisplayMode.List:\n const isThresholdsEnabled = thresholdItems && thresholdItems.length > 1;\n const isValueMappingEnabled = mappingItems && mappingItems.length > 0;\n return (\n <>\n {/* render items when single series and there is no thresholds and no value mappings\n * render items when multi series and there is no thresholds\n */}\n {!isThresholdsEnabled && (!isValueMappingEnabled || items.length > 1) && makeVizLegendList(items)}\n {/* render threshold colors if From thresholds scheme selected */}\n {isThresholdsEnabled && makeVizLegendList(thresholdItems)}\n {/* render value mapping colors */}\n {isValueMappingEnabled && makeVizLegendList(mappingItems)}\n </>\n );\n default:\n return null;\n }\n}\n\nVizLegend.displayName = 'VizLegend';\n","import { css, cx } from '@emotion/css';\nimport { isString } from 'lodash';\nimport { useCallback, useId, useState } from 'react';\nimport * as React from 'react';\n\nimport { getTimeZoneInfo, GrafanaTheme2, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { Button } from '../../Button/Button';\nimport { Combobox } from '../../Combobox/Combobox';\nimport { Field } from '../../Forms/Field';\nimport { Tab } from '../../Tabs/Tab';\nimport { TabContent } from '../../Tabs/TabContent';\nimport { TabsBar } from '../../Tabs/TabsBar';\nimport { TimeZonePicker } from '../TimeZonePicker';\nimport { TimeZoneDescription } from '../TimeZonePicker/TimeZoneDescription';\nimport { TimeZoneOffset } from '../TimeZonePicker/TimeZoneOffset';\nimport { TimeZoneTitle } from '../TimeZonePicker/TimeZoneTitle';\nimport { getMonthOptions } from '../options';\n\ninterface Props {\n timeZone?: TimeZone;\n fiscalYearStartMonth?: number;\n timestamp?: number;\n onChangeTimeZone: (timeZone: TimeZone) => void;\n onChangeFiscalYearStartMonth?: (month: number) => void;\n}\n\nexport const TimePickerFooter = (props: Props) => {\n const {\n timeZone,\n fiscalYearStartMonth,\n timestamp = Date.now(),\n onChangeTimeZone,\n onChangeFiscalYearStartMonth,\n } = props;\n const [isEditing, setEditing] = useState(false);\n const [editMode, setEditMode] = useState('tz');\n\n const timeSettingsId = useId();\n const timeZoneSettingsId = useId();\n const fiscalYearSettingsId = useId();\n\n const onToggleChangeTimeSettings = useCallback(\n (event?: React.MouseEvent) => {\n if (event) {\n event.stopPropagation();\n }\n setEditing(!isEditing);\n },\n [isEditing, setEditing]\n );\n\n const style = useStyles2(getStyle);\n\n if (!isString(timeZone)) {\n return null;\n }\n\n const info = getTimeZoneInfo(timeZone, timestamp);\n\n if (!info) {\n return null;\n }\n\n return (\n <div>\n <section\n aria-label={t('time-picker.footer.time-zone-selection', 'Time zone selection')}\n className={style.container}\n >\n <div className={style.timeZoneContainer}>\n <div className={style.timeZone}>\n <TimeZoneTitle title={info.name} />\n <div className={style.spacer} />\n <TimeZoneDescription info={info} />\n </div>\n <TimeZoneOffset timeZone={timeZone} timestamp={timestamp} />\n </div>\n <div className={style.spacer} />\n <Button\n data-testid={selectors.components.TimeZonePicker.changeTimeSettingsButton}\n variant=\"secondary\"\n onClick={onToggleChangeTimeSettings}\n size=\"sm\"\n aria-expanded={isEditing}\n aria-controls={timeSettingsId}\n icon={isEditing ? 'angle-up' : 'angle-down'}\n >\n <Trans i18nKey=\"time-picker.footer.change-settings-button\">Change time settings</Trans>\n </Button>\n </section>\n {isEditing ? (\n <div className={style.editContainer} id={timeSettingsId}>\n <TabsBar>\n <Tab\n label={t('time-picker.footer.time-zone-option', 'Time zone')}\n active={editMode === 'tz'}\n onChangeTab={() => {\n setEditMode('tz');\n }}\n aria-controls={timeZoneSettingsId}\n />\n <Tab\n label={t('time-picker.footer.fiscal-year-option', 'Fiscal year')}\n active={editMode === 'fy'}\n onChangeTab={() => {\n setEditMode('fy');\n }}\n aria-controls={fiscalYearSettingsId}\n />\n </TabsBar>\n <TabContent className={style.noBackground}>\n {editMode === 'tz' ? (\n <section\n role=\"tabpanel\"\n data-testid={selectors.components.TimeZonePicker.containerV2}\n id={timeZoneSettingsId}\n className={cx(style.timeZoneContainer, style.timeSettingContainer)}\n >\n <TimeZonePicker\n includeInternal={true}\n onChange={(timeZone) => {\n onToggleChangeTimeSettings();\n\n if (isString(timeZone)) {\n onChangeTimeZone(timeZone);\n }\n }}\n onBlur={onToggleChangeTimeSettings}\n menuShouldPortal={false}\n />\n </section>\n ) : (\n <section\n role=\"tabpanel\"\n data-testid={selectors.components.TimeZonePicker.containerV2}\n id={fiscalYearSettingsId}\n className={cx(style.timeZoneContainer, style.timeSettingContainer)}\n >\n <Field\n className={style.fiscalYearField}\n label={t('time-picker.footer.fiscal-year-start', 'Fiscal year start month')}\n >\n <Combobox\n value={fiscalYearStartMonth ?? null}\n options={getMonthOptions()}\n onChange={(value) => {\n if (onChangeFiscalYearStartMonth) {\n onChangeFiscalYearStartMonth(value?.value ?? 0);\n }\n }}\n />\n </Field>\n </section>\n )}\n </TabContent>\n </div>\n ) : null}\n </div>\n );\n};\n\nconst getStyle = (theme: GrafanaTheme2) => ({\n container: css({\n borderTop: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(1.5),\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n }),\n editContainer: css({\n borderTop: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(1.5),\n paddingTop: 0,\n justifyContent: 'space-between',\n alignItems: 'center',\n }),\n spacer: css({\n marginLeft: '7px',\n }),\n timeSettingContainer: css({\n paddingTop: theme.spacing(1),\n }),\n noBackground: css({\n background: 'inherit',\n }),\n fiscalYearField: css({\n marginBottom: 0,\n }),\n timeZoneContainer: css({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n flexGrow: 1,\n }),\n timeZone: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'baseline',\n flexGrow: 1,\n }),\n});\n","import { Trans } from '@grafana/i18n';\n\nimport { Button } from '../../Button/Button';\nimport { Stack } from '../../Layout/Stack/Stack';\n\nimport { TimePickerCalendarProps } from './TimePickerCalendar';\n\nexport function Footer({ onClose, onApply }: TimePickerCalendarProps) {\n return (\n <Stack gap={2} justifyContent=\"space-between\">\n <Button variant=\"secondary\" onClick={onClose}>\n <Trans i18nKey=\"time-picker.calendar.cancel-button\">Cancel</Trans>\n </Button>\n\n <Button onClick={onApply}>\n <Trans i18nKey=\"time-picker.calendar.apply-button\">Apply time range</Trans>\n </Button>\n </Stack>\n );\n}\n\nFooter.displayName = 'Footer';\n","import { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { IconButton } from '../../IconButton/IconButton';\nimport { Stack } from '../../Layout/Stack/Stack';\n\nimport { TimePickerCalendarProps } from './TimePickerCalendar';\nimport { TimePickerTitle } from './TimePickerTitle';\n\nexport function Header({ onClose }: TimePickerCalendarProps) {\n return (\n <Stack justifyContent=\"space-between\">\n <TimePickerTitle>\n <Trans i18nKey=\"time-picker.calendar.select-time\">Select a time range</Trans>\n </TimePickerTitle>\n\n <IconButton\n data-testid={selectors.components.TimePicker.calendar.closeButton}\n tooltip={t(`time-picker.calendar.close`, 'Close calendar')}\n name=\"times\"\n variant=\"secondary\"\n onClick={onClose}\n />\n </Stack>\n );\n}\n\nHeader.displayName = 'Header';\n","import { css } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useOverlay } from '@react-aria/overlays';\nimport { createRef, FormEvent, memo } from 'react';\n\nimport { DateTime, GrafanaTheme2, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { getModalStyles } from '../../Modal/getModalStyles';\nimport { WeekStart } from '../WeekStartPicker';\n\nimport { Body } from './CalendarBody';\nimport { Footer } from './CalendarFooter';\nimport { Header } from './CalendarHeader';\n\nexport const getStyles = (theme: GrafanaTheme2, isReversed = false) => {\n return {\n container: css({\n top: 0,\n position: 'absolute',\n [`${isReversed ? 'left' : 'right'}`]: '546px', // lmao\n }),\n\n modalContainer: css({\n label: 'modalContainer',\n margin: '0 auto',\n }),\n\n calendar: css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n padding: theme.spacing(1),\n label: 'calendar',\n boxShadow: theme.shadows.z3,\n backgroundColor: theme.colors.background.elevated,\n border: `1px solid ${theme.colors.border.weak}`,\n borderRadius: theme.shape.radius.default,\n }),\n\n modal: css({\n label: 'modal',\n boxShadow: theme.shadows.z3,\n left: '50%',\n position: 'fixed',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: theme.zIndex.modal,\n }),\n };\n};\n\nexport interface TimePickerCalendarProps {\n isOpen: boolean;\n from: DateTime;\n to: DateTime;\n onClose: () => void;\n onApply: (e: FormEvent<HTMLButtonElement>) => void;\n onChange: (from: DateTime, to: DateTime) => void;\n weekStart?: WeekStart;\n\n /**\n * When true, the calendar is rendered as a floating \"tooltip\" next to the input.\n * When false, the calendar is rendered \"fullscreen\" in a modal. Yes. Don't ask.\n */\n isFullscreen: boolean;\n timeZone?: TimeZone;\n isReversed?: boolean;\n}\n\nfunction TimePickerCalendar(props: TimePickerCalendarProps) {\n const theme = useTheme2();\n const { modalBackdrop } = useStyles2(getModalStyles);\n const styles = getStyles(theme, props.isReversed);\n const { isOpen, isFullscreen: isFullscreenProp, onClose } = props;\n const ref = createRef<HTMLElement>();\n const { dialogProps } = useDialog(\n {\n 'aria-label': selectors.components.TimePicker.calendar.label,\n },\n ref\n );\n const { overlayProps } = useOverlay(\n {\n isDismissable: true,\n isOpen,\n onClose,\n },\n ref\n );\n\n // This prop is confusingly worded, so rename it to something more intuitive.\n const showInModal = !isFullscreenProp;\n\n if (!isOpen) {\n return null;\n }\n\n const calendar = (\n <section\n className={styles.calendar}\n ref={ref}\n {...overlayProps}\n {...dialogProps}\n data-testid={selectors.components.TimePicker.calendar.label}\n >\n <Header {...props} />\n <Body {...props} />\n {showInModal && <Footer {...props} />}\n </section>\n );\n\n if (!showInModal) {\n return (\n <FocusScope contain restoreFocus autoFocus>\n <div className={styles.container}>{calendar}</div>\n </FocusScope>\n );\n }\n\n return (\n <OverlayContainer>\n <div className={modalBackdrop} />\n\n <FocusScope contain autoFocus restoreFocus>\n <div className={styles.modal}>\n <div className={styles.modalContainer}>{calendar}</div>\n </div>\n </FocusScope>\n </OverlayContainer>\n );\n}\nexport default memo(TimePickerCalendar);\nTimePickerCalendar.displayName = 'TimePickerCalendar';\n","import { css } from '@emotion/css';\nimport { FormEvent, useCallback, useEffect, useId, useState } from 'react';\nimport * as React from 'react';\n\nimport {\n DateTime,\n dateTimeFormat,\n dateTimeParse,\n GrafanaTheme2,\n isDateTime,\n rangeUtil,\n RawTimeRange,\n TimeRange,\n TimeZone,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { Button } from '../../Button/Button';\nimport { Field } from '../../Forms/Field';\nimport { Icon } from '../../Icon/Icon';\nimport { Input } from '../../Input/Input';\nimport { Tooltip } from '../../Tooltip/Tooltip';\nimport { WeekStart } from '../WeekStartPicker';\nimport { commonFormat } from '../commonFormat';\nimport { isValid } from '../utils';\n\nimport TimePickerCalendar from './TimePickerCalendar';\n\ninterface Props {\n isFullscreen: boolean;\n value: TimeRange;\n onApply: (range: TimeRange) => void;\n timeZone?: TimeZone;\n fiscalYearStartMonth?: number;\n roundup?: boolean;\n isReversed?: boolean;\n onError?: (error?: string) => void;\n weekStart?: WeekStart;\n}\n\ninterface InputState {\n value: string;\n invalid: boolean;\n errorMessage: string;\n}\n\nconst ERROR_MESSAGES = {\n default: () => t('time-picker.range-content.default-error', 'Please enter a past date or \"{{now}}\"', { now: 'now' }),\n range: () => t('time-picker.range-content.range-error', '\"From\" can\\'t be after \"To\"'),\n};\n\nexport const TimeRangeContent = (props: Props) => {\n const {\n value,\n isFullscreen = false,\n timeZone,\n onApply: onApplyFromProps,\n isReversed,\n fiscalYearStartMonth,\n onError,\n weekStart,\n } = props;\n const [fromValue, toValue] = valueToState(value.raw.from, value.raw.to, timeZone);\n const style = useStyles2(getStyles);\n\n const [from, setFrom] = useState<InputState>(fromValue);\n const [to, setTo] = useState<InputState>(toValue);\n const [isOpen, setOpen] = useState(false);\n\n const fromFieldId = useId();\n const toFieldId = useId();\n\n // Synchronize internal state with external value\n useEffect(() => {\n const [fromValue, toValue] = valueToState(value.raw.from, value.raw.to, timeZone);\n setFrom(fromValue);\n setTo(toValue);\n }, [value.raw.from, value.raw.to, timeZone]);\n\n const onOpen = useCallback(\n (event: FormEvent<HTMLElement>) => {\n event.preventDefault();\n setOpen(true);\n },\n [setOpen]\n );\n\n const onApply = useCallback(() => {\n if (to.invalid || from.invalid) {\n return;\n }\n\n const raw: RawTimeRange = { from: from.value, to: to.value };\n const timeRange = rangeUtil.convertRawToRange(raw, timeZone, fiscalYearStartMonth, commonFormat);\n\n onApplyFromProps(timeRange);\n }, [from.invalid, from.value, onApplyFromProps, timeZone, to.invalid, to.value, fiscalYearStartMonth]);\n\n const onChange = useCallback(\n (from: DateTime | string, to: DateTime | string) => {\n const [fromValue, toValue] = valueToState(from, to, timeZone);\n setFrom(fromValue);\n setTo(toValue);\n },\n [timeZone]\n );\n\n const submitOnEnter = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n onApply();\n }\n };\n\n const onCopy = () => {\n const rawSource: RawTimeRange = value.raw;\n const clipboardPayload = rangeUtil.formatRawTimeRange(rawSource);\n navigator.clipboard.writeText(JSON.stringify(clipboardPayload));\n };\n\n const onPaste = async () => {\n const raw = await navigator.clipboard.readText();\n let range;\n\n try {\n range = JSON.parse(raw);\n } catch (error) {\n if (onError) {\n onError(raw);\n }\n return;\n }\n\n const [fromValue, toValue] = valueToState(range.from, range.to, timeZone);\n setFrom(fromValue);\n setTo(toValue);\n };\n\n const fiscalYear = rangeUtil.convertRawToRange({ from: 'now/fy', to: 'now/fy' }, timeZone, fiscalYearStartMonth);\n\n const fyTooltip = (\n <div className={style.tooltip}>\n {rangeUtil.isFiscal(value) ? (\n <Tooltip\n content={t('time-picker.range-content.fiscal-year', 'Fiscal year: {{from}} - {{to}}', {\n from: fiscalYear.from.format('MMM-DD'),\n to: fiscalYear.to.format('MMM-DD'),\n })}\n >\n <Icon name=\"info-circle\" />\n </Tooltip>\n ) : null}\n </div>\n );\n\n const icon = (\n <Button\n aria-label={t('time-picker.range-content.open-input-calendar', 'Open calendar')}\n data-testid={selectors.components.TimePicker.calendar.openButton}\n icon=\"calendar-alt\"\n variant=\"secondary\"\n type=\"button\"\n onClick={onOpen}\n />\n );\n\n return (\n <div>\n <div className={style.fieldContainer}>\n <Field\n label={t('time-picker.range-content.from-input', 'From')}\n invalid={from.invalid}\n error={from.errorMessage}\n >\n <Input\n id={fromFieldId}\n onClick={(event) => event.stopPropagation()}\n onChange={(event) => onChange(event.currentTarget.value, to.value)}\n addonAfter={icon}\n onKeyDown={submitOnEnter}\n data-testid={selectors.components.TimePicker.fromField}\n value={from.value}\n />\n </Field>\n {fyTooltip}\n </div>\n <div className={style.fieldContainer}>\n <Field label={t('time-picker.range-content.to-input', 'To')} invalid={to.invalid} error={to.errorMessage}>\n <Input\n id={toFieldId}\n onClick={(event) => event.stopPropagation()}\n onChange={(event) => onChange(from.value, event.currentTarget.value)}\n addonAfter={icon}\n onKeyDown={submitOnEnter}\n data-testid={selectors.components.TimePicker.toField}\n value={to.value}\n />\n </Field>\n {fyTooltip}\n </div>\n <div className={style.buttonsContainer}>\n <Button\n data-testid={selectors.components.TimePicker.copyTimeRange}\n icon=\"copy\"\n variant=\"secondary\"\n tooltip={t('time-picker.copy-paste.tooltip-copy', 'Copy time range to clipboard')}\n type=\"button\"\n onClick={onCopy}\n />\n <Button\n data-testid={selectors.components.TimePicker.pasteTimeRange}\n icon=\"clipboard-alt\"\n variant=\"secondary\"\n tooltip={t('time-picker.copy-paste.tooltip-paste', 'Paste time range')}\n type=\"button\"\n onClick={onPaste}\n />\n <Button data-testid={selectors.components.TimePicker.applyTimeRange} type=\"button\" onClick={onApply}>\n <Trans i18nKey=\"time-picker.range-content.apply-button\">Apply time range</Trans>\n </Button>\n </div>\n\n <TimePickerCalendar\n isFullscreen={isFullscreen}\n isOpen={isOpen}\n from={dateTimeParse(from.value, { timeZone })}\n to={dateTimeParse(to.value, { timeZone })}\n onApply={onApply}\n onClose={() => setOpen(false)}\n onChange={onChange}\n timeZone={timeZone}\n isReversed={isReversed}\n weekStart={weekStart}\n />\n </div>\n );\n};\n\nfunction isRangeInvalid(from: string, to: string, timezone?: string): boolean {\n const raw: RawTimeRange = { from, to };\n const timeRange = rangeUtil.convertRawToRange(raw, timezone, undefined, commonFormat);\n const valid = timeRange.from.isSame(timeRange.to) || timeRange.from.isBefore(timeRange.to);\n\n return !valid;\n}\n\nfunction valueToState(\n rawFrom: DateTime | string,\n rawTo: DateTime | string,\n timeZone?: TimeZone\n): [InputState, InputState] {\n const fromValue = valueAsString(rawFrom, timeZone);\n const toValue = valueAsString(rawTo, timeZone);\n const fromInvalid = !isValid(fromValue, false, timeZone);\n const toInvalid = !isValid(toValue, true, timeZone);\n // If \"To\" is invalid, we should not check the range anyways\n const rangeInvalid = isRangeInvalid(fromValue, toValue, timeZone) && !toInvalid;\n\n return [\n {\n value: fromValue,\n invalid: fromInvalid || rangeInvalid,\n errorMessage: rangeInvalid && !fromInvalid ? ERROR_MESSAGES.range() : ERROR_MESSAGES.default(),\n },\n { value: toValue, invalid: toInvalid, errorMessage: ERROR_MESSAGES.default() },\n ];\n}\n\nfunction valueAsString(value: DateTime | string, timeZone?: TimeZone): string {\n if (isDateTime(value)) {\n return dateTimeFormat(value, { timeZone, format: commonFormat });\n }\n\n if (value.endsWith('Z')) {\n const dt = dateTimeParse(value);\n return dateTimeFormat(dt, { timeZone, format: commonFormat });\n }\n\n return value;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n fieldContainer: css({\n display: 'flex',\n }),\n buttonsContainer: css({\n display: 'flex',\n gap: theme.spacing(0.5),\n marginTop: theme.spacing(1),\n }),\n tooltip: css({\n paddingLeft: theme.spacing(1),\n paddingTop: theme.spacing(3),\n }),\n };\n}\n","import { TimeOption, TimeRange, TimeZone, rangeUtil, dateTimeFormat } from '@grafana/data';\n\nimport { getFeatureToggle } from '../../../utils/featureToggle';\nimport { commonFormat } from '../commonFormat';\n\n/**\n * Takes a printable TimeOption and builds a TimeRange with DateTime properties from it\n */\nexport const mapOptionToTimeRange = (option: TimeOption, timeZone?: TimeZone): TimeRange => {\n return rangeUtil.convertRawToRange({ from: option.from, to: option.to }, timeZone, undefined, commonFormat);\n};\n\n/**\n * Takes a TimeRange and makes a printable TimeOption with formatted date strings correct for the timezone from it\n */\nexport const mapRangeToTimeOption = (range: TimeRange, timeZone?: TimeZone): TimeOption => {\n const from = dateTimeFormat(range.from, { timeZone, format: commonFormat });\n const to = dateTimeFormat(range.to, { timeZone, format: commonFormat });\n\n let display = `${from} to ${to}`;\n\n if (getFeatureToggle('localeFormatPreference')) {\n display = rangeUtil.describeTimeRange(range, timeZone);\n }\n\n return {\n from,\n to,\n display,\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { memo, useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, isDateTime, rangeUtil, RawTimeRange, TimeOption, TimeRange, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { getFocusStyles } from '../../../themes/mixins';\nimport { FilterInput } from '../../FilterInput/FilterInput';\nimport { Icon } from '../../Icon/Icon';\nimport { TextLink } from '../../Link/TextLink';\nimport { WeekStart } from '../WeekStartPicker';\n\nimport { TimePickerFooter } from './TimePickerFooter';\nimport { TimePickerTitle } from './TimePickerTitle';\nimport { TimeRangeContent } from './TimeRangeContent';\nimport { TimeRangeList } from './TimeRangeList';\nimport { mapOptionToTimeRange, mapRangeToTimeOption } from './mapper';\n\ninterface Props {\n value: TimeRange;\n onChange: (timeRange: TimeRange) => void;\n onChangeTimeZone: (timeZone: TimeZone) => void;\n onChangeFiscalYearStartMonth?: (month: number) => void;\n onError?: (error?: string) => void;\n timeZone?: TimeZone;\n fiscalYearStartMonth?: number;\n quickOptions?: TimeOption[];\n history?: TimeRange[];\n showHistory?: boolean;\n className?: string;\n hideTimeZone?: boolean;\n /** Reverse the order of relative and absolute range pickers. Used to left align the picker in forms */\n isReversed?: boolean;\n hideQuickRanges?: boolean;\n widthOverride?: number;\n weekStart?: WeekStart;\n}\n\nexport interface PropsWithScreenSize extends Props {\n isFullscreen: boolean;\n}\n\ninterface FormProps extends Omit<Props, 'history'> {\n historyOptions?: TimeOption[];\n}\n\nexport const TimePickerContentWithScreenSize = (props: PropsWithScreenSize) => {\n const {\n quickOptions = [],\n isReversed,\n isFullscreen,\n hideQuickRanges,\n timeZone,\n fiscalYearStartMonth,\n value,\n onChange,\n history,\n showHistory,\n className,\n hideTimeZone,\n onChangeTimeZone,\n onChangeFiscalYearStartMonth,\n } = props;\n const isHistoryEmpty = !history?.length;\n const isContainerTall =\n (isFullscreen && showHistory) || (!isFullscreen && ((showHistory && !isHistoryEmpty) || !hideQuickRanges));\n const styles = useStyles2(getStyles, isReversed, hideQuickRanges, isContainerTall, isFullscreen);\n const historyOptions = mapToHistoryOptions(history, timeZone);\n const timeOption = useTimeOption(value.raw, quickOptions);\n const [searchTerm, setSearchQuery] = useState('');\n\n const filteredQuickOptions = quickOptions.filter((o) => o.display.toLowerCase().includes(searchTerm.toLowerCase()));\n\n const onChangeTimeOption = (timeOption: TimeOption) => {\n return onChange(mapOptionToTimeRange(timeOption));\n };\n\n return (\n <div id=\"TimePickerContent\" className={cx(styles.container, className)}>\n <div className={styles.body}>\n {(!isFullscreen || !hideQuickRanges) && (\n <div className={styles.rightSide}>\n <div className={styles.timeRangeFilter}>\n <FilterInput\n width={0}\n value={searchTerm}\n onChange={setSearchQuery}\n placeholder={t('time-picker.content.filter-placeholder', 'Search quick ranges')}\n />\n </div>\n <div className={styles.scrollContent}>\n {!isFullscreen && <NarrowScreenForm {...props} historyOptions={historyOptions} />}\n {!hideQuickRanges && (\n <TimeRangeList options={filteredQuickOptions} onChange={onChangeTimeOption} value={timeOption} />\n )}\n </div>\n </div>\n )}\n {isFullscreen && (\n <div className={styles.leftSide}>\n <FullScreenForm {...props} historyOptions={historyOptions} />\n </div>\n )}\n </div>\n {!hideTimeZone && isFullscreen && (\n <TimePickerFooter\n timeZone={timeZone}\n fiscalYearStartMonth={fiscalYearStartMonth}\n onChangeTimeZone={onChangeTimeZone}\n onChangeFiscalYearStartMonth={onChangeFiscalYearStartMonth}\n />\n )}\n </div>\n );\n};\n\nexport const TimePickerContent = (props: Props) => {\n const { widthOverride } = props;\n const theme = useTheme2();\n const isFullscreen = (widthOverride || window.innerWidth) >= theme.breakpoints.values.lg;\n return <TimePickerContentWithScreenSize {...props} isFullscreen={isFullscreen} />;\n};\n\nconst NarrowScreenForm = (props: FormProps) => {\n const { value, hideQuickRanges, onChange, timeZone, historyOptions = [], showHistory, onError, weekStart } = props;\n const styles = useStyles2(getNarrowScreenStyles);\n const isAbsolute = isDateTime(value.raw.from) || isDateTime(value.raw.to);\n const [collapsedFlag, setCollapsedFlag] = useState(!isAbsolute);\n const collapsed = hideQuickRanges ? false : collapsedFlag;\n\n const onChangeTimeOption = (timeOption: TimeOption) => {\n return onChange(mapOptionToTimeRange(timeOption, timeZone));\n };\n\n return (\n <fieldset>\n <div className={styles.header}>\n <button\n type={'button'}\n className={styles.expandButton}\n onClick={() => {\n if (!hideQuickRanges) {\n setCollapsedFlag(!collapsed);\n }\n }}\n data-testid={selectors.components.TimePicker.absoluteTimeRangeTitle}\n aria-expanded={!collapsed}\n aria-controls=\"expanded-timerange\"\n >\n <TimePickerTitle>\n <Trans i18nKey=\"time-picker.absolute.title\">Absolute time range</Trans>\n </TimePickerTitle>\n {!hideQuickRanges && <Icon name={!collapsed ? 'angle-up' : 'angle-down'} />}\n </button>\n </div>\n {!collapsed && (\n <div className={styles.body} id=\"expanded-timerange\">\n <div className={styles.form}>\n <TimeRangeContent\n value={value}\n onApply={onChange}\n timeZone={timeZone}\n isFullscreen={false}\n onError={onError}\n weekStart={weekStart}\n />\n </div>\n {showHistory && (\n <TimeRangeList\n title={t('time-picker.absolute.recent-title', 'Recently used absolute ranges')}\n options={historyOptions}\n onChange={onChangeTimeOption}\n placeholderEmpty={null}\n />\n )}\n </div>\n )}\n </fieldset>\n );\n};\n\nconst FullScreenForm = (props: FormProps) => {\n const { onChange, value, timeZone, fiscalYearStartMonth, isReversed, historyOptions, onError, weekStart } = props;\n const styles = useStyles2(getFullScreenStyles, props.hideQuickRanges);\n const onChangeTimeOption = (timeOption: TimeOption) => {\n return onChange(mapOptionToTimeRange(timeOption, timeZone));\n };\n\n return (\n <>\n <div className={styles.container}>\n <div className={styles.title} data-testid={selectors.components.TimePicker.absoluteTimeRangeTitle}>\n <TimePickerTitle>\n <Trans i18nKey=\"time-picker.absolute.title\">Absolute time range</Trans>\n </TimePickerTitle>\n </div>\n <TimeRangeContent\n value={value}\n timeZone={timeZone}\n fiscalYearStartMonth={fiscalYearStartMonth}\n onApply={onChange}\n isFullscreen={true}\n isReversed={isReversed}\n onError={onError}\n weekStart={weekStart}\n />\n </div>\n {props.showHistory && (\n <div className={styles.recent}>\n <TimeRangeList\n title={t('time-picker.absolute.recent-title', 'Recently used absolute ranges')}\n options={historyOptions || []}\n onChange={onChangeTimeOption}\n placeholderEmpty={<EmptyRecentList />}\n />\n </div>\n )}\n </>\n );\n};\n\nconst EmptyRecentList = memo(() => {\n const styles = useStyles2(getEmptyListStyles);\n const emptyRecentListText = t(\n 'time-picker.content.empty-recent-list-info',\n \"It looks like you haven't used this time picker before. As soon as you enter some time intervals, recently used intervals will appear here.\"\n );\n\n return (\n <div className={styles.container}>\n <div>\n <span>{emptyRecentListText}</span>\n </div>\n <Trans i18nKey=\"time-picker.content.empty-recent-list-docs\">\n <div>\n <TextLink href=\"https://grafana.com/docs/grafana/latest/dashboards/time-range-controls\" external>\n Read the documentation\n </TextLink>\n <span> to find out more about how to enter custom time ranges.</span>\n </div>\n </Trans>\n </div>\n );\n});\n\nfunction mapToHistoryOptions(ranges?: TimeRange[], timeZone?: TimeZone): TimeOption[] {\n if (!Array.isArray(ranges) || ranges.length === 0) {\n return [];\n }\n\n return ranges.map((range) => mapRangeToTimeOption(range, timeZone));\n}\n\nEmptyRecentList.displayName = 'EmptyRecentList';\n\nconst useTimeOption = (raw: RawTimeRange, quickOptions: TimeOption[]): TimeOption | undefined => {\n return useMemo(() => {\n if (!rangeUtil.isRelativeTimeRange(raw)) {\n return;\n }\n return quickOptions.find((option) => {\n return option.from === raw.from && option.to === raw.to;\n });\n }, [raw, quickOptions]);\n};\n\nconst getStyles = (\n theme: GrafanaTheme2,\n isReversed?: boolean,\n hideQuickRanges?: boolean,\n isContainerTall?: boolean,\n isFullscreen?: boolean\n) => ({\n container: css({\n background: theme.colors.background.elevated,\n boxShadow: theme.shadows.z3,\n width: `${isFullscreen ? '546px' : '262px'}`,\n borderRadius: theme.shape.radius.default,\n border: `1px solid ${theme.colors.border.weak}`,\n [`${isReversed ? 'left' : 'right'}`]: 0,\n display: 'flex',\n flexDirection: 'column',\n }),\n body: css({\n display: 'flex',\n flexDirection: 'row-reverse',\n height: `${isContainerTall ? '381px' : '217px'}`,\n maxHeight: '100vh',\n }),\n leftSide: css({\n display: 'flex',\n flexDirection: 'column',\n borderRight: `${isReversed ? 'none' : `1px solid ${theme.colors.border.weak}`}`,\n width: `${!hideQuickRanges ? '60%' : '100%'}`,\n overflow: 'auto',\n scrollbarWidth: 'thin',\n order: isReversed ? 1 : 0,\n }),\n rightSide: css({\n width: `${isFullscreen ? '40%' : '100%'}; !important`,\n borderRight: isReversed ? `1px solid ${theme.colors.border.weak}` : 'none',\n display: 'flex',\n flexDirection: 'column',\n }),\n timeRangeFilter: css({\n padding: theme.spacing(1),\n }),\n spacing: css({\n marginTop: '16px',\n }),\n scrollContent: css({\n overflowY: 'auto',\n scrollbarWidth: 'thin',\n }),\n});\n\nconst getNarrowScreenStyles = (theme: GrafanaTheme2) => ({\n header: css({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n padding: '7px 9px 7px 9px',\n }),\n expandButton: css({\n backgroundColor: 'transparent',\n border: 'none',\n display: 'flex',\n width: '100%',\n\n '&:focus-visible': getFocusStyles(theme),\n }),\n body: css({\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n }),\n form: css({\n padding: '7px 9px 7px 9px',\n }),\n});\n\nconst getFullScreenStyles = (theme: GrafanaTheme2, hideQuickRanges?: boolean) => ({\n container: css({\n paddingTop: '9px',\n paddingLeft: '11px',\n paddingRight: !hideQuickRanges ? '20%' : '11px',\n }),\n title: css({\n marginBottom: '11px',\n }),\n recent: css({\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n paddingTop: theme.spacing(1),\n }),\n});\n\nconst getEmptyListStyles = (theme: GrafanaTheme2) => ({\n container: css({\n padding: '12px',\n margin: '12px',\n\n 'a, span': {\n fontSize: '13px',\n },\n }),\n});\n","import { BehaviorSubject } from 'rxjs';\n\nimport { dateMath, dateTime, TimeRange } from '@grafana/data';\n\nimport { PanelStateWrapper } from './PanelStateWrapper';\n\n// target is 20hz (50ms), but we poll at 100ms to smooth out jitter\nconst interval = 100;\n\ninterface LiveListener {\n last: number;\n intervalMs: number;\n panel: PanelStateWrapper;\n}\n\nclass LiveTimer {\n listeners: LiveListener[] = [];\n\n budget = 1;\n threshold = 1.5; // trial and error appears about right\n ok = new BehaviorSubject(true);\n lastUpdate = Date.now();\n\n isLive = false; // the dashboard time range ends in \"now\"\n timeRange?: TimeRange;\n liveTimeOffset = 0;\n\n /** Called when the dashboard time range changes */\n setLiveTimeRange(v?: TimeRange) {\n this.timeRange = v;\n this.isLive = v?.raw?.to === 'now';\n\n if (this.isLive) {\n const from = dateMath.parse(v!.raw.from, false)?.valueOf()!;\n const to = dateMath.parse(v!.raw.to, true)?.valueOf()!;\n this.liveTimeOffset = to - from;\n\n for (const listener of this.listeners) {\n listener.intervalMs = getLiveTimerInterval(this.liveTimeOffset, listener.panel.props.width);\n }\n }\n }\n\n listen(panel: PanelStateWrapper) {\n this.listeners.push({\n last: this.lastUpdate,\n panel: panel,\n intervalMs: getLiveTimerInterval(\n 60000, // 1min\n panel.props.width\n ),\n });\n }\n\n remove(panel: PanelStateWrapper) {\n this.listeners = this.listeners.filter((v) => v.panel !== panel);\n }\n\n updateInterval(panel: PanelStateWrapper) {\n if (!this.timeRange || !this.isLive) {\n return;\n }\n for (const listener of this.listeners) {\n if (listener.panel === panel) {\n listener.intervalMs = getLiveTimerInterval(this.liveTimeOffset, listener.panel.props.width);\n return;\n }\n }\n }\n\n // Called at the consistent dashboard interval\n measure = () => {\n const now = Date.now();\n this.budget = (now - this.lastUpdate) / interval;\n\n const oldOk = this.ok.getValue();\n const newOk = this.budget <= this.threshold;\n if (oldOk !== newOk) {\n this.ok.next(newOk);\n }\n this.lastUpdate = now;\n\n // For live dashboards, listen to changes\n if (this.isLive && this.ok.getValue() && this.timeRange) {\n // when the time-range is relative fire events\n let tr: TimeRange | undefined = undefined;\n for (const listener of this.listeners) {\n if (!listener.panel.props.isInView) {\n continue;\n }\n\n const elapsed = now - listener.last;\n if (elapsed >= listener.intervalMs) {\n if (!tr) {\n const { raw } = this.timeRange;\n tr = {\n raw,\n from: dateTime(now - this.liveTimeOffset),\n to: dateTime(now),\n };\n }\n listener.panel.liveTimeChanged(tr);\n listener.last = now;\n }\n }\n }\n };\n}\n\nconst FIVE_MINS = 5 * 60 * 1000;\n\nexport function getLiveTimerInterval(delta: number, width: number): number {\n const millisPerPixel = Math.ceil(delta / width / 100) * 100;\n if (millisPerPixel > FIVE_MINS) {\n return FIVE_MINS;\n }\n return millisPerPixel;\n}\n\nexport const liveTimer = new LiveTimer();\nsetInterval(liveTimer.measure, interval);\n","import { useCallback } from 'react';\n\nimport { store } from '@grafana/data';\n\nconst LAST_BRANCH_KEY_PREFIX = 'grafana.provisioning.lastBranch';\n\n/**\n * Get the local storage key for a repository's last used branch\n */\nconst getStorageKey = (repositoryName: string) => {\n return `${LAST_BRANCH_KEY_PREFIX}.${repositoryName}`;\n};\n\n/**\n * Hook to manage the last used branch per repository in local storage\n */\nexport const useLastBranch = () => {\n const getLastBranch = useCallback((repositoryName: string | undefined): string | undefined => {\n if (!repositoryName) {\n return undefined;\n }\n const key = getStorageKey(repositoryName);\n return store.get(key) || undefined;\n }, []);\n\n const setLastBranch = useCallback((repositoryName: string | undefined, branch: string | undefined) => {\n if (!repositoryName || !branch) {\n return;\n }\n const key = getStorageKey(repositoryName);\n store.set(key, branch);\n }, []);\n\n return { getLastBranch, setLastBranch };\n};\n","import uFuzzy from '@leeoniya/ufuzzy';\n\nimport { PluginSignatureStatus, dateTimeParse, PluginError, PluginType, PluginErrorCode } from '@grafana/data';\nimport { config, featureEnabled } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport {\n CatalogPlugin,\n InstancePlugin,\n LocalPlugin,\n ProvisionedPlugin,\n RemotePlugin,\n RemotePluginStatus,\n Version,\n} from './types';\n\nexport function mergeLocalsAndRemotes({\n local = [],\n remote = [],\n instance = [],\n provisioned = [],\n pluginErrors: errors,\n}: {\n local: LocalPlugin[];\n remote?: RemotePlugin[];\n instance?: InstancePlugin[];\n provisioned?: ProvisionedPlugin[];\n pluginErrors?: PluginError[];\n}): CatalogPlugin[] {\n const catalogPlugins: CatalogPlugin[] = [];\n const errorByPluginId = groupErrorsByPluginId(errors);\n\n const remoteSet = new Set<string>(remote?.map((plugin) => plugin.slug));\n const localMap = new Map<string, LocalPlugin>(local.map((plugin) => [plugin.id, plugin]));\n const instancesMap = new Map<string, InstancePlugin>(instance?.map((plugin) => [plugin.pluginSlug, plugin]));\n const provisionedSet = new Set<string>(provisioned?.map((plugin) => plugin.slug));\n\n // add locals\n local.forEach((localPlugin) => {\n const error = errorByPluginId[localPlugin.id];\n\n if (!remoteSet.has(localPlugin.id)) {\n let catalogPlugin = mergeLocalAndRemote(localPlugin, undefined, error);\n if (config.pluginAdminExternalManageEnabled) {\n catalogPlugin = mergeCloudState(\n catalogPlugin,\n instancesMap,\n provisionedSet.has(localPlugin.id),\n localMap.has(localPlugin.id)\n );\n }\n catalogPlugins.push(catalogPlugin);\n }\n });\n\n // add remote\n remote.forEach((remotePlugin) => {\n const localCounterpart = localMap.get(remotePlugin.slug);\n const error = errorByPluginId[remotePlugin.slug];\n const shouldSkip = remotePlugin.status === RemotePluginStatus.Deprecated && !localCounterpart; // We are only listing deprecated plugins in case they are installed.\n\n if (!shouldSkip) {\n let catalogPlugin = mergeLocalAndRemote(localCounterpart, remotePlugin, error);\n if (config.pluginAdminExternalManageEnabled) {\n catalogPlugin = mergeCloudState(\n catalogPlugin,\n instancesMap,\n provisionedSet.has(remotePlugin.slug),\n localMap.has(remotePlugin.slug)\n );\n }\n catalogPlugins.push(catalogPlugin);\n }\n });\n\n return catalogPlugins;\n}\n\nexport function mergeLocalAndRemote(local?: LocalPlugin, remote?: RemotePlugin, error?: PluginError): CatalogPlugin {\n if (!local && remote) {\n return mapRemoteToCatalog(remote, error);\n }\n\n if (local && !remote) {\n return mapLocalToCatalog(local, error);\n }\n\n return mapToCatalogPlugin(local, remote, error);\n}\n\nexport function mapRemoteToCatalog(plugin: RemotePlugin, error?: PluginError): CatalogPlugin {\n const {\n name,\n slug: id,\n description,\n version,\n orgName,\n popularity,\n downloads,\n typeCode,\n updatedAt,\n createdAt: publishedAt,\n status,\n angularDetected,\n keywords,\n signatureType,\n versionSignatureType,\n versionSignedByOrgName,\n url,\n } = plugin;\n\n const isDisabled = !!error;\n return {\n description,\n downloads,\n id,\n info: {\n logos: {\n small: `${config.appSubUrl}/api/gnet/plugins/${id}/versions/${version}/logos/small`,\n large: `${config.appSubUrl}/api/gnet/plugins/${id}/versions/${version}/logos/large`,\n },\n keywords,\n },\n name,\n orgName,\n popularity,\n publishedAt,\n signature: getPluginSignature({ remote: plugin, error }),\n signatureType: signatureType || versionSignatureType || undefined,\n signatureOrg: versionSignedByOrgName,\n updatedAt,\n hasUpdate: false,\n isPublished: true,\n isInstalled: isDisabled,\n isDisabled: isDisabled,\n isManaged: isManagedPlugin(id),\n isPreinstalled: isPreinstalledPlugin(id),\n isDeprecated: status === RemotePluginStatus.Deprecated,\n isCore: plugin.internal,\n isDev: false,\n isEnterprise: status === RemotePluginStatus.Enterprise,\n type: typeCode,\n error: error?.errorCode,\n angularDetected,\n isFullyInstalled: isDisabled,\n latestVersion: plugin.version,\n url,\n };\n}\n\nexport function mapLocalToCatalog(plugin: LocalPlugin, error?: PluginError): CatalogPlugin {\n const {\n name,\n info: { description, version, logos, updated, author, keywords },\n id,\n dev,\n type,\n signature,\n signatureOrg,\n signatureType,\n hasUpdate,\n accessControl,\n angularDetected,\n } = plugin;\n\n const isDisabled = !!error;\n return {\n description,\n downloads: 0,\n id,\n info: { logos, keywords },\n name,\n orgName: author.name,\n popularity: 0,\n publishedAt: '',\n signature: getPluginSignature({ local: plugin, error }),\n signatureOrg,\n signatureType,\n updatedAt: updated,\n installedVersion: version,\n hasUpdate,\n isInstalled: true,\n isDisabled: isDisabled,\n isCore: signature === 'internal',\n isPublished: false,\n isDeprecated: false,\n isDev: Boolean(dev),\n isEnterprise: false,\n isManaged: isManagedPlugin(id),\n isPreinstalled: isPreinstalledPlugin(id),\n type,\n error: error?.errorCode,\n accessControl: accessControl,\n angularDetected,\n isFullyInstalled: true,\n iam: plugin.iam,\n latestVersion: plugin.latestVersion,\n };\n}\n\n// TODO: change the signature by removing the optionals for local and remote.\nexport function mapToCatalogPlugin(local?: LocalPlugin, remote?: RemotePlugin, error?: PluginError): CatalogPlugin {\n const installedVersion = local?.info.version;\n const id = remote?.slug || local?.id || '';\n const type = local?.type || remote?.typeCode;\n const isDisabled = !!error;\n const keywords = remote?.keywords || local?.info.keywords || [];\n\n let logos = {\n small: `/public/build/img/icn-${type}.svg`,\n large: `/public/build/img/icn-${type}.svg`,\n };\n\n if (remote) {\n logos = {\n small: `${config.appSubUrl}/api/gnet/plugins/${id}/versions/${remote.version}/logos/small`,\n large: `${config.appSubUrl}/api/gnet/plugins/${id}/versions/${remote.version}/logos/large`,\n };\n } else if (local && local.info.logos) {\n logos = local.info.logos;\n }\n\n return {\n description: local?.info.description || remote?.description || '',\n downloads: remote?.downloads || 0,\n hasUpdate: local?.hasUpdate || false,\n id,\n info: {\n logos,\n keywords,\n },\n isCore: Boolean(remote?.internal || local?.signature === PluginSignatureStatus.internal),\n isDev: Boolean(local?.dev),\n isEnterprise: remote?.status === RemotePluginStatus.Enterprise,\n isInstalled: Boolean(local) || isDisabled,\n isDisabled: isDisabled,\n isDeprecated: remote?.status === RemotePluginStatus.Deprecated,\n isPublished: true,\n isManaged: isManagedPlugin(id),\n isPreinstalled: isPreinstalledPlugin(id),\n // TODO<check if we would like to keep preferring the remote version>\n name: remote?.name || local?.name || '',\n // TODO<check if we would like to keep preferring the remote version>\n orgName: remote?.orgName || local?.info.author.name || '',\n popularity: remote?.popularity || 0,\n publishedAt: remote?.createdAt || '',\n type,\n signature: getPluginSignature({ local, remote, error }),\n signatureOrg: local?.signatureOrg || remote?.versionSignedByOrgName,\n signatureType: local?.signatureType || remote?.versionSignatureType || remote?.signatureType || undefined,\n // TODO<check if we would like to keep preferring the remote version>\n updatedAt: remote?.updatedAt || local?.info.updated || '',\n installedVersion,\n error: error?.errorCode,\n // Only local plugins have access control metadata\n accessControl: local?.accessControl,\n angularDetected: local?.angularDetected ?? remote?.angularDetected,\n isFullyInstalled: Boolean(local) || isDisabled,\n iam: local?.iam,\n latestVersion: local?.latestVersion || remote?.version || '',\n url: remote?.url || '',\n };\n}\n\nexport const getExternalManageLink = (pluginId: string) => `${config.pluginCatalogURL}${pluginId}`;\n\nexport enum Sorters {\n nameAsc = 'nameAsc',\n nameDesc = 'nameDesc',\n updated = 'updated',\n published = 'published',\n downloads = 'downloads',\n}\n\nexport const sortPlugins = (plugins: CatalogPlugin[], sortBy: Sorters) => {\n const sorters: { [name: string]: (a: CatalogPlugin, b: CatalogPlugin) => number } = {\n nameAsc: (a: CatalogPlugin, b: CatalogPlugin) => a.name.localeCompare(b.name),\n nameDesc: (a: CatalogPlugin, b: CatalogPlugin) => b.name.localeCompare(a.name),\n updated: (a: CatalogPlugin, b: CatalogPlugin) =>\n dateTimeParse(b.updatedAt).valueOf() - dateTimeParse(a.updatedAt).valueOf(),\n published: (a: CatalogPlugin, b: CatalogPlugin) =>\n dateTimeParse(b.publishedAt).valueOf() - dateTimeParse(a.publishedAt).valueOf(),\n downloads: (a: CatalogPlugin, b: CatalogPlugin) => b.downloads - a.downloads,\n };\n\n if (sorters[sortBy]) {\n return plugins.sort(sorters[sortBy]);\n }\n\n return plugins;\n};\n\nfunction groupErrorsByPluginId(errors: PluginError[] = []): Record<string, PluginError | undefined> {\n return errors.reduce<Record<string, PluginError | undefined>>((byId, error) => {\n byId[error.pluginId] = error;\n return byId;\n }, {});\n}\n\nfunction getPluginSignature(options: {\n local?: LocalPlugin;\n remote?: RemotePlugin;\n error?: PluginError;\n}): PluginSignatureStatus {\n const { error, local, remote } = options;\n\n if (error) {\n switch (error.errorCode) {\n case PluginErrorCode.invalidSignature:\n return PluginSignatureStatus.invalid;\n case PluginErrorCode.missingSignature:\n return PluginSignatureStatus.missing;\n case PluginErrorCode.modifiedSignature:\n return PluginSignatureStatus.modified;\n }\n }\n\n if (local?.signature) {\n return local.signature;\n }\n\n if (remote?.signatureType && remote?.versionSignatureType) {\n return PluginSignatureStatus.valid;\n }\n\n return PluginSignatureStatus.missing;\n}\n\nexport function getLatestCompatibleVersion(versions: Version[] | undefined): Version | undefined {\n if (!versions) {\n return;\n }\n const [latest] = versions.filter((v) => Boolean(v.isCompatible));\n\n return latest;\n}\n\nexport const isInstallControlsEnabled = () => config.pluginAdminEnabled;\n\nexport const hasInstallControlWarning = (\n plugin: CatalogPlugin,\n isRemotePluginsAvailable: boolean,\n latestCompatibleVersion?: Version\n) => {\n const isExternallyManaged = config.pluginAdminExternalManageEnabled;\n const hasPermission = contextSrv.hasPermission(AccessControlAction.PluginsInstall);\n const isCompatible = Boolean(latestCompatibleVersion);\n return (\n plugin.type === PluginType.renderer ||\n (plugin.isEnterprise && !featureEnabled('enterprise.plugins')) ||\n plugin.isDev ||\n (!hasPermission && !isExternallyManaged) ||\n !plugin.isPublished ||\n !isCompatible ||\n !isRemotePluginsAvailable\n );\n};\n\nexport const isLocalPluginVisibleByConfig = (p: LocalPlugin) => isNotHiddenByConfig(p.id);\n\nexport const isRemotePluginVisibleByConfig = (p: RemotePlugin) => isNotHiddenByConfig(p.slug);\n\nfunction isNotHiddenByConfig(id: string) {\n const { pluginCatalogHiddenPlugins }: { pluginCatalogHiddenPlugins: string[] } = config;\n\n return !pluginCatalogHiddenPlugins.includes(id);\n}\n\nexport function isManagedPlugin(id: string) {\n const { pluginCatalogManagedPlugins }: { pluginCatalogManagedPlugins: string[] } = config;\n\n return pluginCatalogManagedPlugins?.includes(id);\n}\n\nexport function isPreinstalledPlugin(id: string): { found: boolean; withVersion: boolean } {\n const { pluginCatalogPreinstalledPlugins } = config;\n\n const plugin = pluginCatalogPreinstalledPlugins?.find((p) => p.id === id);\n return { found: !!plugin?.id, withVersion: !!plugin?.version };\n}\n\nexport function isLocalCorePlugin(local?: LocalPlugin): boolean {\n return Boolean(local?.signature === 'internal');\n}\n\nfunction getId(inputString: string): string {\n const parts = inputString.split(' - ');\n return parts[0];\n}\n\nfunction getPluginDetailsForFuzzySearch(plugins: CatalogPlugin[]): string[] {\n return plugins.reduce((result: string[], { id, name, type, orgName, info }: CatalogPlugin) => {\n const keywordsForSearch = info.keywords?.join(' ').toLowerCase();\n const pluginString = `${id} - ${name} - ${type} - ${orgName} - ${keywordsForSearch}`;\n result.push(pluginString);\n return result;\n }, []);\n}\nexport function filterByKeyword(plugins: CatalogPlugin[], query: string) {\n const dataArray = getPluginDetailsForFuzzySearch(plugins);\n let uf = new uFuzzy({ intraMode: 1, intraSub: 0 });\n let idxs = uf.filter(dataArray, query);\n if (idxs === null) {\n return null;\n }\n return idxs.map((id) => getId(dataArray[id]));\n}\n\nfunction isPluginModifiable(plugin: CatalogPlugin) {\n if (\n plugin.isProvisioned || //provisioned plugins cannot be modified\n plugin.isCore || //core plugins cannot be modified\n plugin.type === PluginType.renderer || // currently renderer plugins are not supported by the catalog due to complications related to installation / update / uninstall\n plugin.isPreinstalled.withVersion || // Preinstalled plugins (with specified version) cannot be modified\n plugin.isManaged // Managed plugins cannot be modified\n ) {\n return false;\n }\n\n return true;\n}\n\nexport function isPluginUpdatable(plugin: CatalogPlugin) {\n if (!isPluginModifiable(plugin)) {\n return false;\n }\n\n // If there is no update available, the plugin cannot be updated\n if (!plugin.hasUpdate) {\n return false;\n }\n\n // If the plugin is currently being updated, it should not be updated\n if (plugin.isUpdatingFromInstance) {\n return false;\n }\n\n return true;\n}\n\nexport function shouldDisablePluginInstall(plugin: CatalogPlugin) {\n if (\n !isPluginModifiable(plugin) ||\n (plugin.isEnterprise && !featureEnabled('enterprise.plugins')) ||\n !plugin.isPublished ||\n plugin.isDisabled ||\n !isInstallControlsEnabled()\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function isNonAngularVersion(version?: Version) {\n if (!version) {\n return false;\n }\n\n return version.angularDetected === false;\n}\n\nexport function isDisabledAngularPlugin(plugin: CatalogPlugin) {\n return plugin.isDisabled && plugin.error === PluginErrorCode.angular;\n}\n\nexport function mergeCloudState(\n catalogPlugin: CatalogPlugin,\n instanceMap: Map<string, InstancePlugin>,\n isProvisioned: boolean,\n hasLocal: boolean\n) {\n const instancePlugin = instanceMap.get(catalogPlugin.id);\n\n return {\n ...catalogPlugin,\n isFullyInstalled: catalogPlugin.isCore\n ? true\n : (instanceMap.has(catalogPlugin.id) || isProvisioned) && catalogPlugin.isInstalled,\n isInstalled: instanceMap.has(catalogPlugin.id) || catalogPlugin.isInstalled,\n isUpdatingFromInstance:\n instanceMap.has(catalogPlugin.id) &&\n catalogPlugin.hasUpdate &&\n catalogPlugin.installedVersion !== instancePlugin?.version,\n hasUpdate: Boolean(instancePlugin?.version && instancePlugin?.version !== catalogPlugin.latestVersion),\n isUninstallingFromInstance: hasLocal && !instanceMap.has(catalogPlugin.id),\n isProvisioned: isProvisioned,\n };\n}\n","import { ReactElement, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { rangeUtil, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { ConditionalRenderingTimeRangeSizeKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { Field, Select } from '@grafana/ui';\n\nimport { dashboardEditActions } from '../../edit-pane/shared';\nimport { getLowerTranslatedObjectType } from '../object';\n\nimport { ConditionalRenderingConditionWrapper } from './ConditionalRenderingConditionWrapper';\nimport { ConditionalRenderingConditionsSerializerRegistryItem } from './serializers';\nimport { checkGroup, getObjectType } from './utils';\n\ninterface ConditionalRenderingTimeRangeSizeState extends SceneObjectState {\n value: string;\n result: boolean | undefined;\n}\n\nexport class ConditionalRenderingTimeRangeSize extends SceneObjectBase<ConditionalRenderingTimeRangeSizeState> {\n public static Component = ConditionalRenderingTimeRangeSizeRenderer;\n\n public static serializer: ConditionalRenderingConditionsSerializerRegistryItem = {\n id: 'ConditionalRenderingTimeRangeSize',\n name: 'Time Range Size',\n deserialize: this.deserialize,\n };\n\n public readonly validateIntervalRegex = /^(\\d+(?:\\.\\d+)?)[Mwdhmsy]$/;\n\n public constructor(state: ConditionalRenderingTimeRangeSizeState) {\n super(state);\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n this.forEachChild((child) => {\n if (!child.isActive) {\n this._subs.add(child.activate());\n }\n });\n\n this._check();\n\n this._subs.add(sceneGraph.getTimeRange(this).subscribeToState(() => this._check()));\n }\n\n private _check() {\n const result = this._evaluate();\n\n if (result !== this.state.result) {\n this.setState({ ...this.state, result });\n checkGroup(this);\n }\n\n return result;\n }\n\n private _evaluate(): boolean | undefined {\n try {\n if (!this.validateIntervalRegex.test(this.state.value)) {\n return undefined;\n }\n\n const interval = rangeUtil.intervalToSeconds(this.state.value);\n const timeRange = sceneGraph.getTimeRange(this);\n\n return timeRange.state.value.to.unix() - timeRange.state.value.from.unix() <= interval;\n } catch {\n return undefined;\n }\n }\n\n public changeValue(value: string) {\n if (this.state.value !== value) {\n this.setState({ value });\n this._check();\n }\n }\n\n public renderCmp(): ReactElement {\n return <this.Component model={this} key={this.state.key} />;\n }\n\n public serialize(): ConditionalRenderingTimeRangeSizeKind {\n return { kind: 'ConditionalRenderingTimeRangeSize', spec: { value: this.state.value } };\n }\n\n public static deserialize(model: ConditionalRenderingTimeRangeSizeKind): ConditionalRenderingTimeRangeSize {\n return new ConditionalRenderingTimeRangeSize({ value: model.spec.value, result: undefined });\n }\n\n public static createEmpty(): ConditionalRenderingTimeRangeSize {\n return new ConditionalRenderingTimeRangeSize({ value: '7d', result: undefined });\n }\n}\n\nfunction ConditionalRenderingTimeRangeSizeRenderer({ model }: SceneComponentProps<ConditionalRenderingTimeRangeSize>) {\n const { value } = model.useState();\n const [isValid, setIsValid] = useState(model.validateIntervalRegex.test(value));\n\n useEffect(() => setIsValid(model.validateIntervalRegex.test(value)), [model, value]);\n\n const staticOptions = useMemo<Array<SelectableValue<string>>>(\n () => [\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.minutes', '{{value}} minutes', {\n value: 5,\n }),\n value: '5m',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.minutes', '{{value}} minutes', {\n value: 15,\n }),\n value: '15m',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.minutes', '{{value}} minutes', {\n value: 30,\n }),\n value: '30m',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.hour', '{{value}} hour', {\n value: 1,\n }),\n value: '1h',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.hours', '{{value}} hours', {\n value: 3,\n }),\n value: '3h',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.hours', '{{value}} hours', {\n value: 6,\n }),\n value: '6h',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.hours', '{{value}} hours', {\n value: 12,\n }),\n value: '12h',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.hours', '{{value}} hours', {\n value: 24,\n }),\n value: '24h',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.days', '{{value}} days', {\n value: 2,\n }),\n value: '2d',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.days', '{{value}} days', {\n value: 7,\n }),\n value: '7d',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.days', '{{value}} days', {\n value: 30,\n }),\n value: '30d',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.days', '{{value}} days', {\n value: 90,\n }),\n value: '90d',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.months', '{{value}} months', {\n value: 6,\n }),\n value: '6M',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.year', '{{value}} year', {\n value: 1,\n }),\n value: '1y',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.years', '{{value}} years', {\n value: 2,\n }),\n value: '2y',\n },\n {\n label: t('dashboard.conditional-rendering.conditions.time-range-size.values.years', '{{value}} years', {\n value: 5,\n }),\n value: '5y',\n },\n ],\n []\n );\n\n const options = useMemo(() => {\n if (staticOptions.find((option) => option.value === value)) {\n return staticOptions;\n }\n\n return [{ label: value, value }, ...staticOptions];\n }, [staticOptions, value]);\n\n const handleChange = useCallback(\n (newValue: string | undefined) => {\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.edit-time-range-rule', 'Change time range rule'),\n source: model,\n perform: () => model.changeValue(newValue ?? ''),\n undo: () => model.changeValue(value),\n });\n },\n [model, value]\n );\n\n return (\n <ConditionalRenderingConditionWrapper\n info={t(\n 'dashboard.conditional-rendering.conditions.time-range-size.info',\n 'Show or hide the {{type}} if the dashboard time range is shorter than the selected time frame.',\n { type: getLowerTranslatedObjectType(getObjectType(model)) }\n )}\n isObjectSupported={true}\n model={model}\n title={t('dashboard.conditional-rendering.conditions.time-range-size.label', 'Time range less than')}\n >\n <Field\n invalid={!isValid}\n error={t('dashboard.conditional-rendering.conditions.time-range-size.invalid-message', 'Invalid interval')}\n noMargin\n >\n <Select\n isClearable={false}\n allowCustomValue\n onCreateOption={(value) => handleChange(value)}\n value={value}\n options={options}\n onChange={({ value }) => handleChange(value)}\n />\n </Field>\n </ConditionalRenderingConditionWrapper>\n );\n}\n","import { generatedAPI } from '@grafana/api-clients/rtkq/shorturl/v1alpha1';\n\nexport const shortURLAPIv1alpha1 = generatedAPI.enhanceEndpoints({\n endpoints: {\n createShortUrl: (endpointDefinition) => {\n const originalQuery = endpointDefinition.query;\n if (!originalQuery) {\n return;\n }\n\n endpointDefinition.query = (requestOptions) => {\n // Ensure metadata exists\n if (!requestOptions.shortUrl.metadata) {\n requestOptions.shortUrl.metadata = {};\n }\n\n const metadata = requestOptions.shortUrl.metadata;\n if (!metadata.name && !metadata.generateName) {\n // GenerateName lets the apiserver create a new uid for the name\n // This wont be used, the backend will generate a random uid but cannot be blank or will fail.\n metadata.generateName = 's-';\n }\n return originalQuery(requestOptions);\n };\n },\n },\n});\n","import memoizeOne from 'memoize-one';\n\nimport { AbsoluteTimeRange, LogRowModel, UrlQueryMap } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getBackendSrv, config, locationService } from '@grafana/runtime';\nimport { sceneGraph, SceneTimeRangeLike, VizPanel } from '@grafana/scenes';\nimport { shortURLAPIv1alpha1 } from 'app/api/clients/shorturl/v1alpha1';\nimport { notifyApp } from 'app/core/actions';\nimport { createErrorNotification, createSuccessNotification } from 'app/core/copy/appNotification';\nimport { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\nimport { getDashboardUrl } from 'app/features/dashboard-scene/utils/getDashboardUrl';\nimport { dispatch } from 'app/store/store';\n\nimport { ShortURL } from '../../../../apps/shorturl/plugin/src/generated/shorturl/v1alpha1/shorturl_object_gen';\nimport { extractErrorMessage } from '../../api/utils';\nimport { ShareLinkConfiguration } from '../../features/dashboard-scene/sharing/ShareButton/utils';\n\nimport { copyStringToClipboard } from './explore';\n\nfunction buildHostUrl() {\n return `${window.location.protocol}//${window.location.host}${config.appSubUrl}`;\n}\n\nexport function buildShortUrl(k8sShortUrl: ShortURL) {\n const key = k8sShortUrl.metadata.name;\n const orgId = k8sShortUrl.metadata.namespace;\n const hostUrl = buildHostUrl();\n return `${hostUrl}/goto/${key}?orgId=${orgId}`;\n}\n\nfunction getRelativeURLPath(url: string) {\n let path = url.replace(buildHostUrl(), '');\n return path.startsWith('/') ? path.substring(1, path.length) : path;\n}\n\n// Memoized legacy API call - preserves original behavior\nconst createShortLinkLegacy = memoizeOne(async (path: string): Promise<string> => {\n const shortLink = await getBackendSrv().post(`/api/short-urls`, {\n path: getRelativeURLPath(path),\n });\n return shortLink.url;\n});\n\nexport const createShortLink = async function (path: string) {\n try {\n if (config.featureToggles.useKubernetesShortURLsAPI) {\n // Use RTK API - it handles caching/failures/retries automatically\n const result = await dispatch(\n shortURLAPIv1alpha1.endpoints.createShortUrl.initiate({\n shortUrl: {\n apiVersion: 'shorturl.grafana.app/v1alpha1',\n kind: 'ShortURL',\n metadata: {},\n spec: {\n path: getRelativeURLPath(path),\n },\n },\n })\n );\n\n if ('data' in result && result.data) {\n return buildShortUrl(result.data);\n }\n\n if ('error' in result) {\n const errorMessage = extractErrorMessage(result.error);\n throw new Error(errorMessage || 'Failed to create short URL');\n }\n\n throw new Error('Failed to create short URL');\n } else {\n // Old API - use memoized function (preserves original behavior)\n return await createShortLinkLegacy(path);\n }\n } catch (err) {\n console.error('Error when creating shortened link: ', err);\n dispatch(notifyApp(createErrorNotification('Error generating shortened link')));\n throw err; // Re-throw so callers know it failed\n }\n};\n\n/**\n * Creates a ClipboardItem for the shortened link. This is used due to clipboard issues in Safari after making async calls.\n * See https://github.com/grafana/grafana/issues/106889\n * @param path - The long path to share.\n * @returns A ClipboardItem for the shortened link.\n */\nconst createShortLinkClipboardItem = (path: string) => {\n return new ClipboardItem({\n 'text/plain': createShortLink(path),\n });\n};\n\nexport const createAndCopyShortLink = async (path: string) => {\n try {\n if (typeof ClipboardItem !== 'undefined' && navigator.clipboard.write) {\n await navigator.clipboard.write([createShortLinkClipboardItem(path)]);\n dispatch(notifyApp(createSuccessNotification('Shortened link copied to clipboard')));\n } else {\n const shortLink = await createShortLink(path);\n copyStringToClipboard(shortLink);\n dispatch(notifyApp(createSuccessNotification('Shortened link copied to clipboard')));\n }\n } catch (error) {\n // createShortLink already handles error notifications, just log\n console.error('Error in createAndCopyShortLink:', error);\n }\n};\n\nexport const createAndCopyShareDashboardLink = async (\n dashboard: DashboardScene,\n opts: ShareLinkConfiguration,\n panel?: VizPanel\n) => {\n const shareUrl = createDashboardShareUrl(dashboard, opts, panel);\n if (opts.useShortUrl) {\n return await createAndCopyShortLink(shareUrl);\n } else {\n copyStringToClipboard(shareUrl);\n dispatch(notifyApp(createSuccessNotification(t('link.share.copy-to-clipboard', 'Link copied to clipboard'))));\n }\n};\n\nexport const createDashboardShareUrl = (dashboard: DashboardScene, opts: ShareLinkConfiguration, panel?: VizPanel) => {\n const location = locationService.getLocation();\n const timeRange = sceneGraph.getTimeRange(panel ?? dashboard);\n\n const urlParamsUpdate = getShareUrlParams(opts, timeRange, panel);\n\n return getDashboardUrl({\n uid: dashboard.state.uid,\n slug: dashboard.state.meta.slug,\n currentQueryParams: location.search,\n updateQuery: urlParamsUpdate,\n absolute: !opts.useShortUrl,\n });\n};\n\nexport const getShareUrlParams = (\n opts: { useAbsoluteTimeRange: boolean; theme: string },\n timeRange: SceneTimeRangeLike,\n panel?: VizPanel\n) => {\n const urlParamsUpdate: UrlQueryMap = {};\n\n if (panel) {\n urlParamsUpdate.viewPanel = panel.getPathId();\n }\n\n if (opts.useAbsoluteTimeRange) {\n urlParamsUpdate.from = timeRange.state.value.from.toISOString();\n urlParamsUpdate.to = timeRange.state.value.to.toISOString();\n }\n\n if (opts.theme !== 'current') {\n urlParamsUpdate.theme = opts.theme;\n }\n\n return urlParamsUpdate;\n};\n\nfunction getPreviousLog(row: LogRowModel, allLogs: LogRowModel[]): LogRowModel | null {\n for (let i = allLogs.indexOf(row) - 1; i >= 0; i--) {\n if (allLogs[i].timeEpochMs > row.timeEpochMs) {\n return allLogs[i];\n }\n }\n\n return null;\n}\n\nexport function getLogsPermalinkRange(row: LogRowModel, rows: LogRowModel[], absoluteRange: AbsoluteTimeRange) {\n const range = {\n from: new Date(absoluteRange.from).toISOString(),\n to: new Date(absoluteRange.to).toISOString(),\n };\n if (!config.featureToggles.logsInfiniteScrolling) {\n return range;\n }\n\n // With infinite scrolling, the time range of the log line can be after the absolute range or beyond the request line limit, so we need to adjust\n // Look for the previous sibling log, and use its timestamp\n const allLogs = rows.filter((logRow) => logRow.dataFrame.refId === row.dataFrame.refId);\n const prevLog = getPreviousLog(row, allLogs);\n\n if (row.timeEpochMs > absoluteRange.to && !prevLog) {\n // Because there's no sibling and the current `to` is oldest than the log, we have no reference we can use for the interval\n // This only happens when you scroll into the future and you want to share the first log of the list\n return {\n from: new Date(absoluteRange.from).toISOString(),\n // Slide 1ms otherwise it's very likely to be omitted in the results\n to: new Date(row.timeEpochMs + 1).toISOString(),\n };\n }\n\n return {\n from: new Date(absoluteRange.from).toISOString(),\n to: new Date(prevLog ? prevLog.timeEpochMs : absoluteRange.to).toISOString(),\n };\n}\n","import { getFieldDisplayName } from '../../field/fieldState';\nimport { stringToJsRegex } from '../../text/string';\nimport { DataFrame, Field, FieldType, TIME_SERIES_VALUE_FIELD_NAME } from '../../types/dataFrame';\nimport { FieldMatcher, FieldMatcherInfo, FrameMatcherInfo } from '../../types/transformations';\n\nimport { FieldMatcherID, FrameMatcherID } from './ids';\n\nexport interface RegexpOrNamesMatcherOptions {\n pattern?: string;\n names?: string[];\n variable?: string;\n}\n\n/**\n * Mode to be able to toggle if the names matcher should match fields in provided\n * list or all except provided names.\n * @public\n */\nexport enum ByNamesMatcherMode {\n exclude = 'exclude',\n include = 'include',\n}\n\n/**\n * Options to instruct the by names matcher to either match all fields in given list\n * or all except the fields in the list.\n * @public\n */\nexport interface ByNamesMatcherOptions {\n mode?: ByNamesMatcherMode;\n names?: string[];\n readOnly?: boolean;\n prefix?: string;\n}\n\n// General Field matcher\nconst fieldNameMatcher: FieldMatcherInfo<string> = {\n id: FieldMatcherID.byName,\n name: 'Field Name',\n description: 'match the field name',\n defaultOptions: '',\n\n get: (name: string): FieldMatcher => {\n const uniqueNames = new Set<string>([name]);\n\n const fallback = fieldNameFallback(uniqueNames);\n\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return (\n name === field.name ||\n name === getFieldDisplayName(field, frame, allFrames) ||\n Boolean(fallback && fallback(field, frame, allFrames))\n );\n };\n },\n\n getOptionsDisplayText: (name: string) => {\n return `Field name: ${name}`;\n },\n};\n\nconst multipleFieldNamesMatcher: FieldMatcherInfo<ByNamesMatcherOptions> = {\n id: FieldMatcherID.byNames,\n name: 'Field Names',\n description: 'match any of the given the field names',\n defaultOptions: {\n mode: ByNamesMatcherMode.include,\n names: [],\n },\n\n get: (options: ByNamesMatcherOptions): FieldMatcher => {\n const { names, mode = ByNamesMatcherMode.include } = options;\n const uniqueNames = new Set<string>(names ?? []);\n\n const fallback = fieldNameFallback(uniqueNames);\n\n const matcher = (field: Field, frame: DataFrame, frames: DataFrame[]) => {\n return (\n uniqueNames.has(field.name) ||\n uniqueNames.has(getFieldDisplayName(field, frame, frames)) ||\n Boolean(fallback && fallback(field, frame, frames))\n );\n };\n\n if (mode === ByNamesMatcherMode.exclude) {\n return (field: Field, frame: DataFrame, frames: DataFrame[]) => {\n return !matcher(field, frame, frames);\n };\n }\n return matcher;\n },\n\n getOptionsDisplayText: (options: ByNamesMatcherOptions): string => {\n const { names, mode } = options;\n const displayText = (names ?? []).join(', ');\n if (mode === ByNamesMatcherMode.exclude) {\n return `All except: ${displayText}`;\n }\n return `All of: ${displayText}`;\n },\n};\n\n// In an effort to support migrating to a consistent data contract, the\n// naming conventions need to get normalized. However, many existing setups\n// exist that would no longer match names if that changes. This injects\n// fallback logic when the data frame has not type version specified\nexport function fieldNameFallback(fields: Set<string>) {\n let fallback: FieldMatcher | undefined = undefined;\n\n // grafana-data does not have access to runtime so we are accessing the window object\n // to get access to the feature toggle\n const useMatcherFallback = window.grafanaBootData?.settings?.featureToggles?.dataplaneFrontendFallback;\n if (useMatcherFallback) {\n if (fields.has(TIME_SERIES_VALUE_FIELD_NAME)) {\n fallback = (field: Field, frame: DataFrame) => {\n return (\n Boolean(field.labels) && // Value was reasonable when the name was set in labels or on the frame\n field.labels?.__name__ === field.name\n );\n };\n } else if (fields.has('Time') || fields.has('time')) {\n fallback = (field: Field, frame: DataFrame) => {\n return frame.meta?.typeVersion == null && field.type === FieldType.time;\n };\n }\n }\n\n return fallback;\n}\n\nconst regexpFieldNameMatcher: FieldMatcherInfo<string> = {\n id: FieldMatcherID.byRegexp,\n name: 'Field Name by Regexp',\n description: 'match the field name by a given regexp pattern',\n defaultOptions: '/.*/',\n\n get: (pattern: string): FieldMatcher => {\n const regexp = patternToRegex(pattern);\n\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n const displayName = getFieldDisplayName(field, frame, allFrames);\n return !!regexp && regexp.test(displayName);\n };\n },\n\n getOptionsDisplayText: (pattern: string): string => {\n return `Field name by pattern: ${pattern}`;\n },\n};\n\n/**\n * Field matcher that will match all fields that exists in a\n * data frame with configured refId.\n * @public\n */\nconst fieldsInFrameMatcher: FieldMatcherInfo<string> = {\n id: FieldMatcherID.byFrameRefID,\n name: 'Fields by frame refId',\n description: 'match all fields returned in data frame with refId.',\n defaultOptions: '',\n\n get: (refId: string): FieldMatcher => {\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return frame.refId === refId;\n };\n },\n\n getOptionsDisplayText: (refId: string): string => {\n return `Math all fields returned by query with reference ID: ${refId}`;\n },\n};\n\nconst regexpOrMultipleNamesMatcher: FieldMatcherInfo<RegexpOrNamesMatcherOptions> = {\n id: FieldMatcherID.byRegexpOrNames,\n name: 'Field Name by Regexp or Names',\n description: 'match the field name by a given regexp pattern or given names',\n defaultOptions: {\n pattern: '/.*/',\n names: [],\n },\n\n get: (options: RegexpOrNamesMatcherOptions): FieldMatcher => {\n const regexpMatcher = regexpFieldNameMatcher.get(options?.pattern || '');\n const namesMatcher = multipleFieldNamesMatcher.get({\n mode: ByNamesMatcherMode.include,\n names: options?.names ?? [],\n });\n\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return namesMatcher(field, frame, allFrames) || regexpMatcher(field, frame, allFrames);\n };\n },\n\n getOptionsDisplayText: (options: RegexpOrNamesMatcherOptions): string => {\n const pattern = options?.pattern ?? '';\n const names = options?.names?.join(',') ?? '';\n return `Field name by pattern: ${pattern} or names: ${names}`;\n },\n};\n\nconst patternToRegex = (pattern?: string): RegExp | undefined => {\n if (!pattern) {\n return undefined;\n }\n\n try {\n return stringToJsRegex(pattern);\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\n\n// General Frame matcher\nconst frameNameMatcher: FrameMatcherInfo<string> = {\n id: FrameMatcherID.byName,\n name: 'Frame Name',\n description: 'match the frame name',\n defaultOptions: '/.*/',\n\n get: (pattern: string) => {\n const regex = stringToJsRegex(pattern);\n return (frame: DataFrame) => {\n return regex.test(frame.name || '');\n };\n },\n\n getOptionsDisplayText: (pattern: string) => {\n return `Frame name: ${pattern}`;\n },\n};\n\n/**\n * Registry Initialization\n */\nexport function getFieldNameMatchers(): FieldMatcherInfo[] {\n return [\n fieldNameMatcher,\n regexpFieldNameMatcher,\n multipleFieldNamesMatcher,\n regexpOrMultipleNamesMatcher,\n fieldsInFrameMatcher,\n ];\n}\n\nexport function getFrameNameMatchers(): FrameMatcherInfo[] {\n return [frameNameMatcher];\n}\n","import { Location } from 'history';\nimport { pickBy } from 'lodash';\n\nimport { locationUtil, urlUtil, rangeUtil } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { StateManagerBase } from 'app/core/services/StateManagerBase';\n\nimport { Playlist } from '../../api/clients/playlist/v0alpha1';\n\nimport { loadDashboards } from './utils';\n\nexport const queryParamsToPreserve: { [key: string]: boolean } = {\n kiosk: true,\n autofitpanels: true,\n orgId: true,\n '_dash.hideTimePicker': true,\n '_dash.hideVariables': true,\n '_dash.hideLinks': true,\n};\n\nexport interface PlaylistSrvState {\n isPlaying: boolean;\n}\n\nexport class PlaylistSrv extends StateManagerBase<PlaylistSrvState> {\n private nextTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private urls: string[] = []; // the URLs we need to load\n private index = 0;\n declare private interval: number;\n declare private startUrl: string;\n private numberOfLoops = 0;\n declare private validPlaylistUrl: string;\n private locationListenerUnsub?: () => void;\n\n public constructor() {\n super({ isPlaying: false });\n\n this.locationUpdated = this.locationUpdated.bind(this);\n }\n\n private navigateToDashboard(replaceHistoryEntry = false) {\n const url = this.urls[this.index];\n const queryParams = locationService.getSearchObject();\n const filteredParams = pickBy(queryParams, (value: unknown, key: string) => queryParamsToPreserve[key]);\n const nextDashboardUrl = locationUtil.stripBaseFromUrl(url);\n\n this.index++;\n this.validPlaylistUrl = nextDashboardUrl;\n this.nextTimeoutId = setTimeout(() => this.next(), this.interval);\n\n const urlWithParams = nextDashboardUrl + '?' + urlUtil.toUrlParams(filteredParams);\n\n // When starting the playlist from the PlaylistStartPage component using the playlist URL, we want to replace the\n // history entry to support the back button\n // When starting the playlist from the playlist modal, we want to push a new history entry\n if (replaceHistoryEntry) {\n locationService.getHistory().replace(urlWithParams);\n } else {\n locationService.push(urlWithParams);\n }\n }\n\n next() {\n clearTimeout(this.nextTimeoutId);\n\n const playedAllDashboards = this.index > this.urls.length - 1;\n if (playedAllDashboards) {\n this.numberOfLoops++;\n\n // This does full reload of the playlist to keep memory in check due to existing leaks but at the same time\n // we do not want page to flicker after each full loop.\n if (this.numberOfLoops >= 3) {\n window.location.href = this.startUrl;\n return;\n }\n this.index = 0;\n }\n\n this.navigateToDashboard();\n }\n\n prev() {\n this.index = Math.max(this.index - 2, 0);\n this.next();\n }\n\n // Detect url changes not caused by playlist srv and stop playlist\n locationUpdated(location: Location) {\n if (location.pathname !== this.validPlaylistUrl) {\n this.stop();\n }\n }\n\n async start(playlist: Playlist) {\n this.stop();\n\n this.startUrl = window.location.href;\n this.index = 0;\n\n this.setState({ isPlaying: true });\n\n // setup location tracking\n this.locationListenerUnsub = locationService.getHistory().listen(this.locationUpdated);\n const urls: string[] = [];\n\n if (!playlist.spec?.items?.length) {\n // alert\n return;\n }\n\n this.interval = rangeUtil.intervalToMs(playlist.spec?.interval);\n\n const items = await loadDashboards(playlist.spec?.items);\n for (const item of items) {\n if (item.dashboards) {\n for (const dash of item.dashboards) {\n urls.push(dash.url);\n }\n }\n }\n\n if (!urls.length) {\n // alert... not found, etc\n return;\n }\n\n this.urls = urls;\n this.setState({ isPlaying: true });\n\n // Replace current history entry with first dashboard instead of pushing\n // this is to avoid the back button to go back to the playlist start page which causes a redirection\n this.navigateToDashboard(true);\n return;\n }\n\n stop() {\n if (!this.state.isPlaying) {\n return;\n }\n\n this.index = 0;\n\n this.setState({ isPlaying: false });\n\n if (this.locationListenerUnsub) {\n this.locationListenerUnsub();\n }\n\n if (this.nextTimeoutId) {\n clearTimeout(this.nextTimeoutId);\n }\n\n if (locationService.getSearchObject().kiosk) {\n locationService.partial({ kiosk: null });\n }\n }\n}\n\nexport const playlistSrv = new PlaylistSrv();\n","// Returns the factors of a number\n// Example getFactors(12) -> [1, 2, 3, 4, 6, 12]\nexport default function getFactors(num: number): number[] {\n return Array.from(new Array(num + 1), (_, i) => i).filter((i) => num % i === 0);\n}\n","import { each, find, findIndex, flattenDeep, isArray, isString, map, max, some } from 'lodash';\n\nimport {\n AnnotationQuery,\n ConstantVariableModel,\n DataLink,\n DataLinkBuiltInVars,\n DataQuery,\n DataSourceRef,\n FieldConfigSource,\n FieldMatcherID,\n FieldType,\n getActiveThreshold,\n getDataSourceRef,\n isDataSourceRef,\n isEmptyObject,\n MappingType,\n ReducerID,\n SpecialValueMatch,\n standardEditorsRegistry,\n standardFieldConfigEditorRegistry,\n TextBoxVariableModel,\n ThresholdsConfig,\n urlUtil,\n ValueMap,\n ValueMapping,\n VariableHide,\n} from '@grafana/data';\nimport { labelsToFieldsTransformer, mergeTransformer } from '@grafana/data/internal';\nimport { getDataSourceSrv, setDataSourceSrv } from '@grafana/runtime';\nimport { DataTransformerConfig } from '@grafana/schema';\nimport { AxisPlacement, GraphFieldConfig } from '@grafana/ui';\nimport { migrateTableDisplayModeToCellOptions } from '@grafana/ui/internal';\nimport { getAllOptionEditors, getAllStandardFieldConfigs } from 'app/core/components/OptionsUI/registry';\nimport {\n DEFAULT_PANEL_SPAN,\n DEFAULT_ROW_HEIGHT,\n GRID_CELL_HEIGHT,\n GRID_CELL_VMARGIN,\n GRID_COLUMN_COUNT,\n MIN_PANEL_HEIGHT,\n} from 'app/core/constants';\nimport getFactors from 'app/core/utils/factors';\nimport kbn from 'app/core/utils/kbn';\nimport { DatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport {\n RefIdTransformerOptions,\n TimeSeriesTableTransformerOptions,\n} from 'app/features/transformers/timeSeriesTable/timeSeriesTableTransformer';\nimport { isConstant, isMulti } from 'app/features/variables/guard';\nimport { alignCurrentWithMulti } from 'app/features/variables/shared/multiOptions';\nimport { CloudWatchMetricsQuery, LegacyAnnotationQuery } from 'app/plugins/datasource/cloudwatch/types';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\n\nimport {\n migrateCloudWatchQuery,\n migrateMultipleStatsAnnotationQuery,\n migrateMultipleStatsMetricsQuery,\n} from '../../../plugins/datasource/cloudwatch/migrations/dashboardMigrations';\n\nimport { DashboardModel } from './DashboardModel';\nimport { PanelModel } from './PanelModel';\nimport { getPanelPluginToMigrateTo } from './getPanelPluginToMigrateTo';\n\nstandardEditorsRegistry.setInit(getAllOptionEditors);\nstandardFieldConfigEditorRegistry.setInit(getAllStandardFieldConfigs);\n\ntype PanelSchemeUpgradeHandler = (panel: PanelModel) => PanelModel;\n\n/**\n * The current version of the dashboard schema.\n *\n * NOTE: Schema version 42 is the FINAL version for the v1 dashboard API.\n * DO NOT increment this number or add new schema migrations.\n *\n * This is necessary due to the migration of the legacy dashboards API to the app platform.\n *\n * For panel-specific migrations, implement them as panel migrations in the\n * individual panel plugin migration handlers instead of adding new schema versions.\n *\n * Legacy migration instructions (for reference only):\n * To add a dashboard migration increment this number\n * and then add your migration at the bottom of 'updateSchema'\n * hint: search \"Add migration here\"\n *\n * This number also needs to be updated on the CUE schema:\n * kinds/dashboard/dashboard_kind.cue\n * Example PR: #87712\n */\nexport const DASHBOARD_SCHEMA_VERSION = 42;\nexport class DashboardMigrator {\n dashboard: DashboardModel;\n\n constructor(dashboardModel: DashboardModel) {\n this.dashboard = dashboardModel;\n\n // for tests to pass\n if (!getDataSourceSrv()) {\n setDataSourceSrv(new DatasourceSrv());\n }\n }\n\n updateSchema(old: any, targetSchemaVersion?: number) {\n let i, j, k, n;\n const oldVersion = this.dashboard.schemaVersion;\n const panelUpgrades: PanelSchemeUpgradeHandler[] = [];\n const finalTargetVersion = targetSchemaVersion || DASHBOARD_SCHEMA_VERSION;\n\n if (oldVersion === finalTargetVersion) {\n return;\n }\n\n // version 2 schema changes\n if (oldVersion < 2 && finalTargetVersion >= 2) {\n if (old.services) {\n if (old.services.filter) {\n this.dashboard.time = old.services.filter.time;\n this.dashboard.templating.list = old.services.filter.list || [];\n }\n }\n\n // we used to have graphite panel type migration logic here\n // but this is handled by auto migration, see public/app/features/dashboard/state/getPanelPluginToMigrateTo.ts\n }\n\n // schema version 3 changes\n if (oldVersion < 3 && finalTargetVersion >= 3) {\n // Panel ID assignment is now handled by ensurePanelsHaveUniqueIds() in DashboardModel\n // and the grid layout migration properly handles panels without IDs in rows\n }\n\n // schema version 4 changes\n if (oldVersion < 4 && finalTargetVersion >= 4) {\n // graph migration is handled through the auto migration\n // see autoMigrateAngular map in public/app/features/dashboard/state/PanelModel.ts\n }\n\n if (oldVersion < 6 && finalTargetVersion >= 6) {\n // move drop-downs to new schema\n const annotations = find(old.pulldowns, { type: 'annotations' });\n\n if (annotations) {\n this.dashboard.annotations = {\n list: annotations.annotations || [],\n };\n }\n\n // update template variables\n for (i = 0; i < this.dashboard.templating.list.length; i++) {\n const variable = this.dashboard.templating.list[i];\n if (variable.datasource === void 0) {\n variable.datasource = null;\n }\n if (variable.type === 'filter') {\n variable.type = 'query';\n }\n if (variable.type === void 0) {\n variable.type = 'query';\n }\n if (variable.allFormat === void 0) {\n delete variable.allFormat;\n }\n }\n }\n\n if (oldVersion < 7 && finalTargetVersion >= 7) {\n if (old.nav && old.nav.length) {\n this.dashboard.timepicker = old.nav[0];\n }\n }\n\n if (oldVersion < 8 && finalTargetVersion >= 8) {\n panelUpgrades.push((panel: any) => {\n each(panel.targets, (target) => {\n // update old influxdb query schema\n if (target.fields && target.tags && target.groupBy) {\n if (target.rawQuery) {\n delete target.fields;\n delete target.fill;\n } else {\n target.select = map(target.fields, (field) => {\n const parts = [];\n parts.push({ type: 'field', params: [field.name] });\n parts.push({ type: field.func, params: [] });\n if (field.mathExpr) {\n parts.push({ type: 'math', params: [field.mathExpr] });\n }\n if (field.asExpr) {\n parts.push({ type: 'alias', params: [field.asExpr] });\n }\n return parts;\n });\n delete target.fields;\n each(target.groupBy, (part) => {\n if (part.type === 'time' && part.interval) {\n part.params = [part.interval];\n delete part.interval;\n }\n if (part.type === 'tag' && part.key) {\n part.params = [part.key];\n delete part.key;\n }\n });\n\n if (target.fill) {\n target.groupBy.push({ type: 'fill', params: [target.fill] });\n delete target.fill;\n }\n }\n }\n });\n\n return panel;\n });\n }\n\n // schema version 9 changes\n if (oldVersion < 9 && finalTargetVersion >= 9) {\n // singlestat panel is automigrated to stat panel\n // see autoMigrateAngular map in public/app/features/dashboard/state/PanelModel.ts\n }\n\n // schema version 10 changes\n if (oldVersion < 10 && finalTargetVersion >= 10) {\n // move aliasYAxis changes\n panelUpgrades.push((panel: any) => {\n if (panel.type !== 'table') {\n return panel;\n }\n\n each(panel.styles, (style) => {\n if (style.thresholds && style.thresholds.length >= 3) {\n const k = style.thresholds;\n k.shift();\n style.thresholds = k;\n }\n });\n\n return panel;\n });\n }\n\n if (oldVersion < 12 && finalTargetVersion >= 12) {\n // update template variables\n each(this.dashboard.getVariables(), (templateVariable) => {\n if ('refresh' in templateVariable) {\n if (templateVariable.refresh) {\n templateVariable.refresh = 1;\n }\n if (!templateVariable.refresh) {\n templateVariable.refresh = 0;\n }\n }\n if ('hideVariable' in templateVariable && templateVariable.hideVariable) {\n templateVariable.hide = 2;\n } else if ('hideLabel' in templateVariable && templateVariable.hideLabel) {\n templateVariable.hide = 1;\n }\n });\n }\n\n if (oldVersion < 13 && finalTargetVersion >= 13) {\n // graph panel auto migrates to either barchart, bargauge, histogram or timeseries (all standard Grafana plugins)\n // see public/app/features/dashboard/state/getPanelPluginToMigrateTo.ts\n }\n\n if (oldVersion < 14 && finalTargetVersion >= 14) {\n this.dashboard.graphTooltip = old.sharedCrosshair ? 1 : 0;\n }\n\n if (oldVersion < 16 && finalTargetVersion >= 16) {\n this.upgradeToGridLayout(old);\n }\n\n if (oldVersion < 17 && finalTargetVersion >= 17) {\n panelUpgrades.push((panel: any) => {\n if (panel.minSpan) {\n const max = GRID_COLUMN_COUNT / panel.minSpan;\n const factors = getFactors(GRID_COLUMN_COUNT);\n // find the best match compared to factors\n // (ie. [1,2,3,4,6,12,24] for 24 columns)\n panel.maxPerRow =\n factors[\n findIndex(factors, (o) => {\n return o > max;\n }) - 1\n ];\n }\n\n delete panel.minSpan;\n\n return panel;\n });\n }\n\n if (oldVersion < 18 && finalTargetVersion >= 18) {\n // migrate change to gauge options\n panelUpgrades.push((panel: any) => {\n if (panel['options-gauge']) {\n panel.options = panel['options-gauge'];\n panel.options.valueOptions = {\n unit: panel.options.unit,\n stat: panel.options.stat,\n decimals: panel.options.decimals,\n prefix: panel.options.prefix,\n suffix: panel.options.suffix,\n };\n\n // correct order\n if (panel.options.thresholds) {\n panel.options.thresholds.reverse();\n }\n\n // this options prop was due to a bug\n delete panel.options.options;\n delete panel.options.unit;\n delete panel.options.stat;\n delete panel.options.decimals;\n delete panel.options.prefix;\n delete panel.options.suffix;\n delete panel['options-gauge'];\n }\n\n return panel;\n });\n }\n\n if (oldVersion < 19 && finalTargetVersion >= 19) {\n // migrate change to gauge options\n panelUpgrades.push((panel: any) => {\n if (panel.links && isArray(panel.links)) {\n panel.links = panel.links.map(upgradePanelLink);\n }\n\n return panel;\n });\n }\n\n if (oldVersion < 20 && finalTargetVersion >= 20) {\n const updateLinks = (link: DataLink) => {\n return {\n ...link,\n url: updateVariablesSyntax(link.url),\n };\n };\n panelUpgrades.push((panel: any) => {\n // For graph panel\n if (panel.options && panel.options.dataLinks && isArray(panel.options.dataLinks)) {\n panel.options.dataLinks = panel.options.dataLinks.map(updateLinks);\n }\n\n // For panel with fieldOptions\n if (panel.options && panel.options.fieldOptions && panel.options.fieldOptions.defaults) {\n if (panel.options.fieldOptions.defaults.links && isArray(panel.options.fieldOptions.defaults.links)) {\n panel.options.fieldOptions.defaults.links = panel.options.fieldOptions.defaults.links.map(updateLinks);\n }\n if (panel.options.fieldOptions.defaults.title) {\n panel.options.fieldOptions.defaults.title = updateVariablesSyntax(\n panel.options.fieldOptions.defaults.title\n );\n }\n }\n\n return panel;\n });\n }\n\n if (oldVersion < 21 && finalTargetVersion >= 21) {\n const updateLinks = (link: DataLink) => {\n return {\n ...link,\n url: link.url.replace(/__series.labels/g, '__field.labels'),\n };\n };\n panelUpgrades.push((panel: any) => {\n // For graph panel\n if (panel.options && panel.options.dataLinks && isArray(panel.options.dataLinks)) {\n panel.options.dataLinks = panel.options.dataLinks.map(updateLinks);\n }\n\n // For panel with fieldOptions\n if (panel.options && panel.options.fieldOptions && panel.options.fieldOptions.defaults) {\n if (panel.options.fieldOptions.defaults.links && isArray(panel.options.fieldOptions.defaults.links)) {\n panel.options.fieldOptions.defaults.links = panel.options.fieldOptions.defaults.links.map(updateLinks);\n }\n }\n\n return panel;\n });\n }\n\n if (oldVersion < 22 && finalTargetVersion >= 22) {\n panelUpgrades.push((panel: any) => {\n if (panel.type !== 'table') {\n return panel;\n }\n\n each(panel.styles, (style) => {\n style.align = 'auto';\n });\n\n return panel;\n });\n }\n\n if (oldVersion < 23 && finalTargetVersion >= 23) {\n for (const variable of this.dashboard.templating.list) {\n if (!isMulti(variable)) {\n continue;\n }\n const { multi, current } = variable;\n if (isEmptyObject(current)) {\n continue;\n }\n variable.current = alignCurrentWithMulti(current, multi);\n }\n }\n\n if (oldVersion < 24 && finalTargetVersion >= 24) {\n // 7.0\n // - migrate existing tables to 'table-old'\n panelUpgrades.push((panel: any) => {\n const wasAngularTable = panel.type === 'table';\n if (wasAngularTable && !panel.styles) {\n return panel; // styles are missing so assumes default settings\n }\n const wasReactTable = panel.table === 'table2';\n if (!wasAngularTable || wasReactTable) {\n return panel;\n }\n panel.type = wasAngularTable ? 'table-old' : 'table';\n // Hacky way to call the automigrate feature\n if (panel.type === 'table-old') {\n const newType = getPanelPluginToMigrateTo(panel);\n if (newType) {\n panel.autoMigrateFrom = panel.type;\n panel.type = newType;\n }\n }\n return panel;\n });\n }\n\n if (oldVersion < 25 && finalTargetVersion >= 25) {\n // tags are removed in version 28\n }\n\n if (oldVersion < 26 && finalTargetVersion >= 26) {\n panelUpgrades.push((panel: PanelModel) => {\n const wasReactText = panel.type === 'text2';\n if (!wasReactText) {\n return panel;\n }\n\n panel.type = 'text';\n delete panel.options.angular;\n return panel;\n });\n }\n\n if (oldVersion < 27 && finalTargetVersion >= 27) {\n // remove old repeated panel left-overs\n this.removeRepeatedPanels();\n\n this.dashboard.templating.list = this.dashboard.templating.list.map((variable) => {\n if (!isConstant(variable)) {\n return variable;\n }\n\n const newVariable: ConstantVariableModel | TextBoxVariableModel = {\n ...variable,\n };\n\n newVariable.current = { selected: true, text: newVariable.query ?? '', value: newVariable.query ?? '' };\n newVariable.options = [newVariable.current];\n\n if (newVariable.hide === VariableHide.dontHide || newVariable.hide === VariableHide.hideLabel) {\n return {\n ...newVariable,\n type: 'textbox',\n };\n }\n\n return newVariable;\n });\n }\n\n if (oldVersion < 28 && finalTargetVersion >= 28) {\n for (const variable of this.dashboard.templating.list) {\n if (variable.tags) {\n delete variable.tags;\n }\n\n if (variable.tagsQuery) {\n delete variable.tagsQuery;\n }\n\n if (variable.tagValuesQuery) {\n delete variable.tagValuesQuery;\n }\n\n if (variable.useTags) {\n delete variable.useTags;\n }\n }\n }\n\n if (oldVersion < 29 && finalTargetVersion >= 29) {\n for (const variable of this.dashboard.templating.list) {\n if (variable.type !== 'query') {\n continue;\n }\n\n if (variable.refresh !== 1 && variable.refresh !== 2) {\n variable.refresh = 1;\n }\n\n if (variable.options?.length) {\n variable.options = [];\n }\n }\n }\n\n if (oldVersion < 30 && finalTargetVersion >= 30) {\n panelUpgrades.push(upgradeValueMappingsForPanel);\n panelUpgrades.push(migrateTooltipOptions);\n }\n\n if (oldVersion < 31 && finalTargetVersion >= 31) {\n panelUpgrades.push((panel: PanelModel) => {\n if (panel.transformations) {\n for (const t of panel.transformations) {\n if (t.id === labelsToFieldsTransformer.id) {\n return appendTransformerAfter(panel, labelsToFieldsTransformer.id, {\n id: mergeTransformer.id,\n options: {},\n });\n }\n }\n }\n return panel;\n });\n }\n\n if (oldVersion < 32 && finalTargetVersion >= 32) {\n // CloudWatch migrations have been moved to version 34\n }\n\n // Replace datasource name with reference, uid and type\n if (oldVersion < 33 && finalTargetVersion >= 33) {\n panelUpgrades.push((panel) => {\n panel.datasource = migrateDatasourceNameToRef(panel.datasource, { returnDefaultAsNull: true });\n\n if (!panel.targets) {\n return panel;\n }\n\n for (const target of panel.targets) {\n const targetRef = migrateDatasourceNameToRef(target.datasource, { returnDefaultAsNull: true });\n if (targetRef != null) {\n target.datasource = targetRef;\n }\n }\n\n return panel;\n });\n }\n\n if (oldVersion < 34 && finalTargetVersion >= 34) {\n panelUpgrades.push((panel: PanelModel) => {\n this.migrateCloudWatchQueries(panel);\n return panel;\n });\n\n this.migrateCloudWatchAnnotationQuery();\n }\n\n if (oldVersion < 35 && finalTargetVersion >= 35) {\n panelUpgrades.push(ensureXAxisVisibility);\n }\n\n if (oldVersion < 36 && finalTargetVersion >= 36) {\n // Migrate datasource to refs in annotations\n for (const query of this.dashboard.annotations.list) {\n query.datasource = migrateDatasourceNameToRef(query.datasource, { returnDefaultAsNull: false });\n }\n\n // Migrate datasource: null to current default\n const defaultDs = getDataSourceSrv().getInstanceSettings(null);\n if (defaultDs) {\n for (const variable of this.dashboard.templating.list) {\n if (variable.type === 'query' && variable.datasource === null) {\n variable.datasource = getDataSourceRef(defaultDs);\n }\n }\n\n panelUpgrades.push((panel: PanelModel) => {\n if (panel.targets) {\n let panelDataSourceWasDefault = false;\n if (panel.datasource == null && panel.targets.length > 0) {\n panel.datasource = getDataSourceRef(defaultDs);\n panelDataSourceWasDefault = true;\n }\n\n for (const target of panel.targets) {\n if (target.datasource == null || target.datasource.uid == null) {\n if (panel.datasource?.uid !== MIXED_DATASOURCE_NAME) {\n target.datasource = { ...panel.datasource };\n } else {\n target.datasource = migrateDatasourceNameToRef(target.datasource, { returnDefaultAsNull: false });\n }\n }\n\n if (panelDataSourceWasDefault && target.datasource?.uid !== '__expr__') {\n // We can have situations when default ds changed and the panel level data source is different from the queries\n // In this case we use the query level data source as source for truth\n panel.datasource = target.datasource;\n }\n }\n }\n return panel;\n });\n }\n }\n\n if (oldVersion < 37 && finalTargetVersion >= 37) {\n panelUpgrades.push((panel: PanelModel) => {\n if (panel.options?.legend && typeof panel.options.legend === 'object') {\n // There were two ways to hide the legend, this normalizes to `legend.showLegend`\n if (panel.options.legend.displayMode === 'hidden' || panel.options.legend.showLegend === false) {\n panel.options.legend.displayMode = 'list';\n panel.options.legend.showLegend = false;\n } else {\n panel.options.legend = { ...panel.options.legend, showLegend: true };\n }\n }\n\n return panel;\n });\n }\n\n // Update old table cell display configuration to the new\n // format which uses an object for configuration\n if (oldVersion < 38 && finalTargetVersion >= 38) {\n panelUpgrades.push((panel: PanelModel) => {\n if (panel.type === 'table' && panel.fieldConfig !== undefined) {\n const displayMode = panel.fieldConfig.defaults?.custom?.displayMode;\n\n // Update field configuration\n if (displayMode !== undefined) {\n // Migrate any options for the panel\n panel.fieldConfig.defaults.custom.cellOptions = migrateTableDisplayModeToCellOptions(displayMode);\n\n // Delete the legacy field\n delete panel.fieldConfig.defaults.custom.displayMode;\n }\n\n // Update any overrides referencing the cell display mode\n if (panel.fieldConfig?.overrides) {\n for (const override of panel.fieldConfig.overrides) {\n for (let j = 0; j < (override.properties?.length || 0); j++) {\n let overrideDisplayMode = override.properties[j].value;\n if (override.properties[j].id === 'custom.displayMode') {\n override.properties[j].id = 'custom.cellOptions';\n override.properties[j].value = migrateTableDisplayModeToCellOptions(overrideDisplayMode);\n }\n }\n }\n }\n }\n\n return panel;\n });\n }\n\n // Update the configuration of the Timeseries to table transformation\n // to support multiple options per query\n if (oldVersion < 39 && finalTargetVersion >= 39) {\n panelUpgrades.push((panel: PanelModel) => {\n panel.transformations?.forEach((transformation) => {\n // If we run into a timeSeriesTable transformation\n // and it doesn't have undefined options then we migrate\n if (\n transformation.id === 'timeSeriesTable' &&\n transformation.options !== undefined &&\n transformation.options.refIdToStat !== undefined\n ) {\n let tableTransformOptions: TimeSeriesTableTransformerOptions = {};\n\n // For each {refIdtoStat} record which maps refId to a statistic\n // we add that to the stat property of the new\n // RefIdTransformerOptions interface which includes multiple settings\n for (const [refId, stat] of Object.entries(transformation.options.refIdToStat)) {\n let newSettings: RefIdTransformerOptions = {};\n // In this case the easiest way is just to do a type\n // assertion as iterated entries have unknown types\n newSettings.stat = stat as ReducerID;\n tableTransformOptions[refId] = newSettings;\n }\n\n // Update the options\n transformation.options = tableTransformOptions;\n }\n });\n\n return panel;\n });\n }\n\n if (oldVersion < 40 && finalTargetVersion >= 40) {\n // In old dashboards refresh property can be a boolean\n if (typeof this.dashboard.refresh !== 'string') {\n this.dashboard.refresh = '';\n }\n }\n\n if (oldVersion < 41 && finalTargetVersion >= 41) {\n // time_options is a legacy property that was not used since grafana version 5\n // therefore deprecating this property from the schema\n if ('time_options' in this.dashboard.timepicker) {\n delete this.dashboard.timepicker.time_options;\n }\n }\n\n if (oldVersion < 42 && finalTargetVersion >= 42) {\n panelUpgrades.push(migrateHideFromFunctionality);\n }\n\n /**\n * ⚠️ WARNING: DO NOT ADD NEW MIGRATIONS HERE ⚠️\n *\n * Schema version 42 is the FINAL version for the v1 dashboard API.\n * This is due to the migration of the legacy dashboards API to the app platform.\n *\n * For panel-specific migrations, implement them as panel migrations in the\n * individual panel plugin migration handlers instead of adding new schema versions.\n */\n\n // Apply panel upgrades if any exist\n if (panelUpgrades.length > 0) {\n for (j = 0; j < this.dashboard.panels.length; j++) {\n for (k = 0; k < panelUpgrades.length; k++) {\n this.dashboard.panels[j] = panelUpgrades[k].call(this, this.dashboard.panels[j]);\n const rowPanels = this.dashboard.panels[j].panels;\n if (rowPanels) {\n for (n = 0; n < rowPanels.length; n++) {\n rowPanels[n] = panelUpgrades[k].call(this, rowPanels[n]);\n }\n }\n }\n }\n }\n\n // Always update schema version after migrations, regardless of panel upgrades\n // Only update schema version if migrations were actually needed\n if (oldVersion < finalTargetVersion) {\n this.dashboard.schemaVersion = finalTargetVersion;\n }\n }\n\n private removeRepeatedPanels() {\n const newPanels = [];\n\n for (const panel of this.dashboard.panels) {\n // @ts-expect-error\n if (panel.repeatPanelId || panel.repeatByRow) {\n continue;\n }\n\n // Filter out repeats in collapsed rows\n if (panel.type === 'row' && Array.isArray(panel.panels)) {\n panel.panels = panel.panels.filter((x) => !x.repeatPanelId);\n }\n\n newPanels.push(panel);\n }\n\n this.dashboard.panels = newPanels;\n }\n\n // Migrates metric queries and/or annotation queries that use more than one statistic.\n // E.g query.statistics = ['Max', 'Min'] will be migrated to two queries - query1.statistic = 'Max' and query2.statistic = 'Min'\n // New queries, that were created during migration, are put at the end of the array.\n migrateCloudWatchQueries(panel: PanelModel) {\n for (const target of panel.targets || []) {\n if (isCloudWatchQuery(target)) {\n migrateCloudWatchQuery(target);\n if (target.hasOwnProperty('statistics')) {\n // New queries, that were created during migration, are put at the end of the array.\n const newQueries = migrateMultipleStatsMetricsQuery(target, [...panel.targets]);\n for (const newQuery of newQueries) {\n panel.targets.push(newQuery);\n }\n }\n }\n }\n }\n\n // Migrates CloudWatch annotation queries that use multiple statistics into separate queries.\n // For example, if an annotation query uses ['Max', 'Min'] statistics, it will be split into\n // two separate annotation queries - one with 'Max' and another with 'Min'.\n // The new annotation queries are added to the end of the annotations list.\n migrateCloudWatchAnnotationQuery() {\n for (const annotation of this.dashboard.annotations.list) {\n if (isLegacyCloudWatchAnnotationQuery(annotation)) {\n const newAnnotationQueries = migrateMultipleStatsAnnotationQuery(annotation);\n for (const newAnnotationQuery of newAnnotationQueries) {\n this.dashboard.annotations.list.push(newAnnotationQuery);\n }\n }\n }\n }\n\n upgradeToGridLayout(old: any) {\n let yPos = 0;\n const widthFactor = GRID_COLUMN_COUNT / 12;\n\n const maxPanelId =\n max(\n flattenDeep(\n map(old.rows, (row) => {\n return map(row.panels, 'id');\n })\n ).filter((id) => id != null)\n ) || 0;\n let nextRowId = maxPanelId + 1;\n\n if (!old.rows) {\n return;\n }\n\n // Add special \"row\" panels if even one row is collapsed, repeated or has visible title\n const showRows = some(old.rows, (row) => row.collapse || row.showTitle || row.repeat);\n\n for (const row of old.rows) {\n if (row.repeatIteration) {\n continue;\n }\n\n const height = row.height || DEFAULT_ROW_HEIGHT;\n const rowGridHeight = getGridHeight(height);\n\n const rowPanel: any = {};\n let rowPanelModel: PanelModel | undefined;\n\n if (showRows) {\n // add special row panel\n rowPanel.id = nextRowId;\n rowPanel.type = 'row';\n rowPanel.title = row.title;\n rowPanel.collapsed = row.collapse;\n rowPanel.repeat = row.repeat;\n rowPanel.panels = [];\n rowPanel.gridPos = {\n x: 0,\n y: yPos,\n w: GRID_COLUMN_COUNT,\n h: rowGridHeight,\n };\n rowPanelModel = new PanelModel(rowPanel);\n nextRowId++;\n yPos++;\n }\n\n const rowArea = new RowArea(rowGridHeight, GRID_COLUMN_COUNT, yPos);\n\n for (const panel of row.panels) {\n panel.span = panel.span || DEFAULT_PANEL_SPAN;\n if (panel.minSpan) {\n panel.minSpan = Math.min(GRID_COLUMN_COUNT, (GRID_COLUMN_COUNT / 12) * panel.minSpan);\n }\n const panelWidth = Math.floor(panel.span) * widthFactor;\n const panelHeight = panel.height ? getGridHeight(panel.height) : rowGridHeight;\n\n const panelPos = rowArea.getPanelPosition(panelHeight, panelWidth);\n yPos = rowArea.yPos;\n panel.gridPos = {\n x: panelPos.x,\n y: yPos + panelPos.y,\n w: panelWidth,\n h: panelHeight,\n };\n rowArea.addPanel(panel.gridPos);\n\n delete panel.span;\n\n if (rowPanelModel && rowPanel.collapsed) {\n rowPanelModel.panels?.push(panel);\n } else {\n this.dashboard.panels.push(new PanelModel(panel));\n }\n }\n\n if (rowPanelModel) {\n this.dashboard.panels.push(rowPanelModel);\n }\n\n if (!(rowPanelModel && rowPanel.collapsed)) {\n yPos += rowGridHeight;\n }\n }\n }\n}\n\nfunction getGridHeight(height: number | string) {\n if (isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n if (height < MIN_PANEL_HEIGHT) {\n height = MIN_PANEL_HEIGHT;\n }\n\n const gridHeight = Math.ceil(height / (GRID_CELL_HEIGHT + GRID_CELL_VMARGIN));\n return gridHeight;\n}\n\n/**\n * RowArea represents dashboard row filled by panels\n * area is an array of numbers represented filled column's cells like\n * -----------------------\n * |******** ****\n * |******** ****\n * |********\n * -----------------------\n * 33333333 2222 00000 ...\n */\nclass RowArea {\n area: number[];\n yPos: number;\n height: number;\n\n constructor(height: number, width = GRID_COLUMN_COUNT, rowYPos = 0) {\n this.area = new Array(width).fill(0);\n this.yPos = rowYPos;\n this.height = height;\n }\n\n reset() {\n this.area.fill(0);\n }\n\n /**\n * Update area after adding the panel.\n */\n addPanel(gridPos: any) {\n for (let i = gridPos.x; i < gridPos.x + gridPos.w; i++) {\n if (!this.area[i] || gridPos.y + gridPos.h - this.yPos > this.area[i]) {\n this.area[i] = gridPos.y + gridPos.h - this.yPos;\n }\n }\n return this.area;\n }\n\n /**\n * Calculate position for the new panel in the row.\n */\n getPanelPosition(panelHeight: number, panelWidth: number, callOnce = false): any {\n let startPlace, endPlace;\n let place;\n for (let i = this.area.length - 1; i >= 0; i--) {\n if (this.height - this.area[i] > 0) {\n if (endPlace === undefined) {\n endPlace = i;\n } else {\n if (i < this.area.length - 1 && this.area[i] <= this.area[i + 1]) {\n startPlace = i;\n } else {\n break;\n }\n }\n } else {\n break;\n }\n }\n\n if (startPlace !== undefined && endPlace !== undefined && endPlace - startPlace >= panelWidth - 1) {\n const yPos = max(this.area.slice(startPlace));\n place = {\n x: startPlace,\n y: yPos,\n };\n } else if (!callOnce) {\n // wrap to next row\n this.yPos += this.height;\n this.reset();\n return this.getPanelPosition(panelHeight, panelWidth, true);\n } else {\n return null;\n }\n\n return place;\n }\n}\n\nfunction upgradePanelLink(link: any): DataLink {\n let url = link.url;\n\n if (!url && link.dashboard) {\n url = `dashboard/db/${kbn.slugifyForUrl(link.dashboard)}`;\n }\n\n if (!url && link.dashUri) {\n url = `dashboard/${link.dashUri}`;\n }\n\n // some models are incomplete and have no dashboard or dashUri\n if (!url) {\n url = '/';\n }\n\n if (link.keepTime) {\n url = urlUtil.appendQueryToUrl(url, `$${DataLinkBuiltInVars.keepTime}`);\n }\n\n if (link.includeVars) {\n url = urlUtil.appendQueryToUrl(url, `$${DataLinkBuiltInVars.includeVars}`);\n }\n\n if (link.params) {\n url = urlUtil.appendQueryToUrl(url, link.params);\n }\n\n return {\n url: url,\n title: link.title,\n targetBlank: link.targetBlank,\n };\n}\n\nfunction updateVariablesSyntax(text: string) {\n const legacyVariableNamesRegex = /(__series_name)|(\\$__series_name)|(__value_time)|(__field_name)|(\\$__field_name)/g;\n\n return text.replace(legacyVariableNamesRegex, (match, seriesName, seriesName1, valueTime, fieldName, fieldName1) => {\n if (seriesName) {\n return '__series.name';\n }\n if (seriesName1) {\n return '${__series.name}';\n }\n if (valueTime) {\n return '__value.time';\n }\n if (fieldName) {\n return '__field.name';\n }\n if (fieldName1) {\n return '${__field.name}';\n }\n return match;\n });\n}\n\ninterface MigrateDatasourceNameOptions {\n returnDefaultAsNull: boolean;\n}\n\nexport function migrateDatasourceNameToRef(\n nameOrRef: string | DataSourceRef | null | undefined,\n options: MigrateDatasourceNameOptions\n): DataSourceRef | null {\n if (options.returnDefaultAsNull && (nameOrRef == null || nameOrRef === 'default')) {\n return null;\n }\n\n if (isDataSourceRef(nameOrRef)) {\n return nameOrRef;\n }\n\n const ds = getDataSourceSrv().getInstanceSettings(nameOrRef);\n if (!ds) {\n return { uid: nameOrRef ? nameOrRef : undefined }; // not found\n }\n\n return getDataSourceRef(ds);\n}\n\n// mutates transformations appending a new transformer after the existing one\nfunction appendTransformerAfter(panel: PanelModel, id: string, cfg: DataTransformerConfig) {\n if (panel.transformations) {\n const transformations: DataTransformerConfig[] = [];\n for (const t of panel.transformations) {\n transformations.push(t);\n if (t.id === id) {\n transformations.push({ ...cfg });\n }\n }\n panel.transformations = transformations;\n }\n return panel;\n}\n\nfunction upgradeValueMappingsForPanel(panel: PanelModel) {\n const fieldConfig = panel.fieldConfig;\n if (!fieldConfig) {\n return panel;\n }\n\n if (fieldConfig.defaults && fieldConfig.defaults.mappings) {\n fieldConfig.defaults.mappings = upgradeValueMappings(\n fieldConfig.defaults.mappings,\n fieldConfig.defaults.thresholds\n );\n }\n\n // Protect against no overrides\n if (Array.isArray(fieldConfig.overrides)) {\n for (const override of fieldConfig.overrides) {\n for (const prop of override.properties) {\n if (prop.id === 'mappings') {\n prop.value = upgradeValueMappings(prop.value);\n }\n }\n }\n }\n\n return panel;\n}\n\nfunction isCloudWatchQuery(target: DataQuery): target is CloudWatchMetricsQuery {\n return (\n target.hasOwnProperty('dimensions') &&\n target.hasOwnProperty('namespace') &&\n target.hasOwnProperty('region') &&\n target.hasOwnProperty('metricName')\n );\n}\n\nfunction isLegacyCloudWatchAnnotationQuery(\n target: AnnotationQuery<DataQuery>\n): target is AnnotationQuery<LegacyAnnotationQuery> {\n return (\n target.hasOwnProperty('dimensions') &&\n target.hasOwnProperty('namespace') &&\n target.hasOwnProperty('region') &&\n target.hasOwnProperty('prefixMatching') &&\n target.hasOwnProperty('statistics')\n );\n}\n\nfunction upgradeValueMappings(oldMappings: any, thresholds?: ThresholdsConfig): ValueMapping[] | undefined {\n if (!oldMappings) {\n return undefined;\n }\n\n const valueMaps: ValueMap = { type: MappingType.ValueToText, options: {} };\n const newMappings: ValueMapping[] = [];\n\n for (const old of oldMappings) {\n // when migrating singlestat to stat/gauge, mappings are handled by panel type change handler used in that migration\n if (old.type && old.options) {\n // collect al value->text mappings in a single value map object. These are migrated by panel change handler as a separate value maps\n if (old.type === MappingType.ValueToText) {\n valueMaps.options = {\n ...valueMaps.options,\n ...old.options,\n };\n } else {\n newMappings.push(old);\n }\n continue;\n }\n\n // Use the color we would have picked from thesholds\n let color: string | undefined = undefined;\n const numeric = parseFloat(old.text);\n if (thresholds && !isNaN(numeric)) {\n const level = getActiveThreshold(numeric, thresholds.steps);\n if (level && level.color) {\n color = level.color;\n }\n }\n\n switch (old.type) {\n case 1: // MappingType.ValueToText:\n if (old.value != null) {\n if (old.value === 'null') {\n newMappings.push({\n type: MappingType.SpecialValue,\n options: {\n match: SpecialValueMatch.Null,\n result: { text: old.text, color },\n },\n });\n } else {\n valueMaps.options[String(old.value)] = {\n text: old.text,\n color,\n };\n }\n }\n break;\n case 2: // MappingType.RangeToText:\n newMappings.push({\n type: MappingType.RangeToText,\n options: {\n from: +old.from,\n to: +old.to,\n result: { text: old.text, color },\n },\n });\n break;\n }\n }\n\n if (Object.keys(valueMaps.options).length > 0) {\n newMappings.unshift(valueMaps);\n }\n\n return newMappings;\n}\n\nfunction migrateTooltipOptions(panel: PanelModel) {\n if (panel.type === 'timeseries' || panel.type === 'xychart' || panel.type === 'xychart2') {\n if (panel.options.tooltipOptions) {\n panel.options = {\n ...panel.options,\n tooltip: panel.options.tooltipOptions,\n };\n delete panel.options.tooltipOptions;\n }\n }\n\n return panel;\n}\n\n// This migration is performed when there is a time series panel with all axes configured to be hidden\n// To avoid breaking dashboards we add override that persists x-axis visibility\nfunction ensureXAxisVisibility(panel: PanelModel) {\n if (panel.type === 'timeseries') {\n if (\n (panel.fieldConfig as FieldConfigSource<GraphFieldConfig>)?.defaults.custom?.axisPlacement ===\n AxisPlacement.Hidden\n ) {\n panel.fieldConfig = {\n ...panel.fieldConfig,\n overrides: [\n ...panel.fieldConfig.overrides,\n {\n matcher: {\n id: FieldMatcherID.byType,\n options: FieldType.time,\n },\n properties: [\n {\n id: 'custom.axisPlacement',\n value: AxisPlacement.Auto,\n },\n ],\n },\n ],\n };\n }\n }\n\n return panel;\n}\n\nfunction migrateHideFromFunctionality(panel: PanelModel) {\n // migrate overrides with hideFrom.viz = true to also set tooltip = true\n // this includes the __systemRef override\n if (panel.fieldConfig && panel.fieldConfig.overrides) {\n panel.fieldConfig.overrides = panel.fieldConfig.overrides.map((override) => {\n if (override.properties) {\n override.properties = override.properties.map((property) => {\n if (property.id === 'custom.hideFrom' && property.value?.viz === true) {\n property.value.tooltip = true;\n }\n return property;\n });\n }\n return override;\n });\n }\n\n return panel;\n}\n","import { DataQuery, ReducerID, SelectableValue } from '@grafana/data';\nimport { config } from 'app/core/config';\n\nimport { EvalFunction } from '../alerting/state/alertDef';\n\n/**\n * MATCHES a constant in DataSourceWithBackend\n */\nexport const ExpressionDatasourceUID = '__expr__';\n\nexport enum ExpressionQueryType {\n math = 'math',\n reduce = 'reduce',\n resample = 'resample',\n classic = 'classic_conditions',\n threshold = 'threshold',\n sql = 'sql',\n}\n\nexport const getExpressionLabel = (type: ExpressionQueryType) => {\n switch (type) {\n case ExpressionQueryType.math:\n return 'Math';\n case ExpressionQueryType.reduce:\n return 'Reduce';\n case ExpressionQueryType.resample:\n return 'Resample';\n case ExpressionQueryType.classic:\n return 'Classic condition (legacy)';\n case ExpressionQueryType.threshold:\n return 'Threshold';\n case ExpressionQueryType.sql:\n return 'SQL';\n }\n};\n\nexport const expressionTypes: Array<SelectableValue<ExpressionQueryType>> = [\n {\n value: ExpressionQueryType.math,\n label: 'Math',\n description: 'Free-form math formulas on time series or number data.',\n },\n {\n value: ExpressionQueryType.reduce,\n label: 'Reduce',\n description:\n 'Takes one or more time series returned from a query or an expression and turns each series into a single number.',\n },\n {\n value: ExpressionQueryType.resample,\n label: 'Resample',\n description: 'Changes the time stamps in each time series to have a consistent time interval.',\n },\n {\n value: ExpressionQueryType.classic,\n label: 'Classic condition (legacy)',\n description:\n 'Takes one or more time series returned from a query or an expression and checks if any of the series match the condition. Disables multi-dimensional alerts for this rule.',\n },\n {\n value: ExpressionQueryType.threshold,\n label: 'Threshold',\n description:\n 'Takes one or more time series returned from a query or an expression and checks if any of the series match the threshold condition.',\n },\n {\n value: ExpressionQueryType.sql,\n label: 'SQL',\n description: 'Transform data using SQL. Supports MySQL syntax.',\n },\n].filter((expr) => {\n if (expr.value === ExpressionQueryType.sql) {\n return config?.featureToggles?.sqlExpressions;\n }\n return true;\n});\n\nexport const reducerTypes: Array<SelectableValue<string>> = [\n { value: ReducerID.min, label: 'Min', description: 'Get the minimum value' },\n { value: ReducerID.max, label: 'Max', description: 'Get the maximum value' },\n { value: ReducerID.mean, label: 'Mean', description: 'Get the average value' },\n { value: ReducerID.median, label: 'Median', description: 'Get the median value' },\n { value: ReducerID.sum, label: 'Sum', description: 'Get the sum of all values' },\n { value: ReducerID.count, label: 'Count', description: 'Get the number of values' },\n { value: ReducerID.last, label: 'Last', description: 'Get the last value' },\n];\n\nexport enum ReducerMode {\n Strict = '', // backend API wants an empty string to support \"strict\" mode\n ReplaceNonNumbers = 'replaceNN',\n DropNonNumbers = 'dropNN',\n}\n\nexport const reducerModes: Array<SelectableValue<ReducerMode>> = [\n {\n value: ReducerMode.Strict,\n label: 'Strict',\n description: 'Result can be NaN if series contains non-numeric data',\n },\n {\n value: ReducerMode.DropNonNumbers,\n label: 'Drop Non-numeric Values',\n description: 'Drop NaN, +/-Inf and null from input series before reducing',\n },\n {\n value: ReducerMode.ReplaceNonNumbers,\n label: 'Replace Non-numeric Values',\n description: 'Replace NaN, +/-Inf and null with a constant value before reducing',\n },\n];\n\nexport const downsamplingTypes: Array<SelectableValue<string>> = [\n { value: ReducerID.last, label: 'Last', description: 'Fill with the last value' },\n { value: ReducerID.min, label: 'Min', description: 'Fill with the minimum value' },\n { value: ReducerID.max, label: 'Max', description: 'Fill with the maximum value' },\n { value: ReducerID.mean, label: 'Mean', description: 'Fill with the average value' },\n { value: ReducerID.sum, label: 'Sum', description: 'Fill with the sum of all values' },\n];\n\nexport const upsamplingTypes: Array<SelectableValue<string>> = [\n { value: 'pad', label: 'pad', description: 'fill with the last known value' },\n { value: 'backfilling', label: 'backfilling', description: 'fill with the next known value' },\n { value: 'fillna', label: 'fillna', description: 'Fill with NaNs' },\n];\n\nexport const thresholdFunctions: Array<SelectableValue<EvalFunction>> = [\n { value: EvalFunction.IsAbove, label: 'Is above' },\n { value: EvalFunction.IsBelow, label: 'Is below' },\n { value: EvalFunction.IsEqual, label: 'Is equal to' },\n { value: EvalFunction.IsNotEqual, label: 'Is not equal to' },\n { value: EvalFunction.IsGreaterThanEqual, label: 'Is above or equal to' },\n { value: EvalFunction.IsLessThanEqual, label: 'Is below or equal to' },\n { value: EvalFunction.IsWithinRange, label: 'Is within range' },\n { value: EvalFunction.IsOutsideRange, label: 'Is outside range' },\n { value: EvalFunction.IsWithinRangeIncluded, label: 'Is within range included' },\n { value: EvalFunction.IsOutsideRangeIncluded, label: 'Is outside range included' },\n];\n\n/**\n * For now this is a single object to cover all the types.... would likely\n * want to split this up by type as the complexity increases\n */\nexport interface ExpressionQuery extends DataQuery {\n type: ExpressionQueryType;\n reducer?: string;\n expression?: string;\n window?: string;\n downsampler?: string;\n upsampler?: string;\n conditions?: ClassicCondition[];\n settings?: ExpressionQuerySettings;\n}\n\nexport interface SqlExpressionQuery extends ExpressionQuery {\n /** Format `alerting` is expected when using SQL expressions in alert rules */\n format?: 'alerting';\n}\n\nexport interface ThresholdExpressionQuery extends ExpressionQuery {\n conditions: ClassicCondition[];\n}\nexport interface ExpressionQuerySettings {\n mode?: ReducerMode;\n replaceWithValue?: number;\n}\n\nexport interface ClassicCondition {\n evaluator: {\n params: number[];\n type: EvalFunction;\n };\n unloadEvaluator?: {\n params: number[];\n type: EvalFunction;\n };\n operator?: {\n type: string;\n };\n query: {\n params: string[];\n };\n reducer: {\n params: [];\n type: ReducerType;\n };\n type: 'query';\n}\n\nexport type ReducerType =\n | 'avg'\n | 'min'\n | 'max'\n | 'sum'\n | 'count'\n | 'last'\n | 'median'\n | 'diff'\n | 'diff_abs'\n | 'percent_diff'\n | 'percent_diff_abs'\n | 'count_non_null';\n","import { ChangeEvent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { InlineField, InlineFieldRow, Input, Select } from '@grafana/ui';\n\nimport { downsamplingTypes, ExpressionQuery, upsamplingTypes } from '../types';\n\ninterface Props {\n refIds: Array<SelectableValue<string>>;\n query: ExpressionQuery;\n labelWidth?: number | 'auto';\n onChange: (query: ExpressionQuery) => void;\n}\n\nexport const Resample = ({ labelWidth = 'auto', onChange, refIds, query }: Props) => {\n const downsampler = downsamplingTypes.find((o) => o.value === query.downsampler);\n const upsampler = upsamplingTypes.find((o) => o.value === query.upsampler);\n\n const onWindowChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange({ ...query, window: event.target.value });\n };\n\n const onRefIdChange = (value: SelectableValue<string>) => {\n onChange({ ...query, expression: value.value });\n };\n\n const onSelectDownsampler = (value: SelectableValue<string>) => {\n onChange({ ...query, downsampler: value.value });\n };\n\n const onSelectUpsampler = (value: SelectableValue<string>) => {\n onChange({ ...query, upsampler: value.value });\n };\n\n return (\n <>\n <InlineFieldRow>\n <InlineField label={t('expressions.resample.label-input', 'Input')} labelWidth={labelWidth}>\n <Select onChange={onRefIdChange} options={refIds} value={query.expression} width={20} />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <InlineField\n label={t('expressions.resample.label-resample-to', 'Resample to')}\n labelWidth={labelWidth}\n tooltip={t('expressions.resample.tooltip-s-m-h', '10s, 1m, 30m, 1h')}\n >\n <Input onChange={onWindowChange} value={query.window} width={15} />\n </InlineField>\n <InlineField label={t('expressions.resample.label-downsample', 'Downsample')}>\n <Select options={downsamplingTypes} value={downsampler} onChange={onSelectDownsampler} width={25} />\n </InlineField>\n <InlineField label={t('expressions.resample.label-upsample', 'Upsample')}>\n <Select options={upsamplingTypes} value={upsampler} onChange={onSelectUpsampler} width={25} />\n </InlineField>\n </InlineFieldRow>\n </>\n );\n};\n","import { Observable } from 'rxjs';\n\nimport { readCSV, toDataFrame } from '@grafana/data';\n\nimport { FileImportResult } from './types';\n\nexport function filesToDataframes(files: File[]): Observable<FileImportResult> {\n return new Observable<FileImportResult>((subscriber) => {\n let completedFiles = 0;\n files.forEach((file) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file);\n reader.onload = () => {\n const result = reader.result;\n if (result && result instanceof ArrayBuffer) {\n const decoder = new TextDecoder('utf-8');\n const fileString = decoder.decode(result);\n if (file.type === 'application/json') {\n const json = JSON.parse(fileString);\n subscriber.next({ dataFrames: [toDataFrame(json)], file: file });\n } else {\n subscriber.next({ dataFrames: readCSV(fileString), file: file });\n }\n if (++completedFiles >= files.length) {\n subscriber.complete();\n }\n }\n };\n });\n });\n}\n","export const INVALID_EXTENSION_POINT_ID =\n 'Invalid usage of extension point. Reason: Extension point id should be prefixed with your plugin id, e.g \"myorg-foo-app/toolbar/v1\". Returning an empty array of extensions.';\n\nexport const INVALID_EXTENSION_POINT_ID_PLUGIN = (pluginId: string, extensionPointId: string) =>\n `Invalid usage of extension point. Reason: Extension point id should be prefixed with your plugin id, e.g \"${pluginId}/${extensionPointId}\".`;\n\nexport const INVALID_EXTENSION_POINT_ID_GRAFANA_PREFIX = (extensionPointId: string) =>\n `Invalid usage of extension point. Reason: Core Grafana extension point id should be prefixed with \"grafana/\", e.g \"grafana/${extensionPointId}\".`;\n\nexport const INVALID_EXTENSION_POINT_ID_GRAFANA_EXPOSED = `Invalid usage of extension point. Reason: Core Grafana extension point id should be exposed to plugins via the \"PluginExtensionPoints\" enum in the \"grafana-data\" package (/packages/grafana-data/src/types/pluginExtensions.ts).`;\n\nexport const EXTENSION_POINT_META_INFO_MISSING =\n 'Invalid usage of extension point. Reason: The extension point is not recorded in the \"plugin.json\" file. Extension points must be listed in the section \"extensions.extensionPoints[]\". Returning an empty array of extensions.';\n\nexport const TITLE_MISSING = 'Title is missing.';\n\nexport const DESCRIPTION_MISSING = 'Description is missing.';\n\nexport const INVALID_EXTENSION_FUNCTION = 'The \"fn\" argument is invalid, it should be a function.';\n\nexport const INVALID_CONFIGURE_FUNCTION = 'The \"configure\" function is invalid. It should be a function.';\n\nexport const INVALID_PATH_OR_ON_CLICK = 'Either \"path\" or \"onClick\" is required.';\n\nexport const INVALID_EXPOSED_COMPONENT_ID =\n \"The component id does not match the id naming convention. Id should be prefixed with plugin id. e.g 'myorg-basic-app/my-component-id/v1'.\";\n\nexport const EXPOSED_COMPONENT_ALREADY_EXISTS = 'An exposed component with the same id already exists.';\n\nexport const EXPOSED_COMPONENT_META_INFO_MISSING =\n 'The exposed component was not recorded in the plugin.json. Exposed component extensions must be listed in the section \"extensions.exposedComponents[]\". Currently, this is only required in development but will be enforced also in production builds in the future.';\n\nexport const EXPOSED_COMPONENT_DEPENDENCY_MISSING =\n 'Invalid usage of extension point. Reason: The exposed component is not recorded in the \"plugin.json\" file. Exposed components must be listed in the dependencies[] section.';\n\nexport const ADDED_COMPONENT_META_INFO_MISSING =\n 'The extension was not recorded in the plugin.json. Added component extensions must be listed in the section \"extensions.addedComponents[]\". Currently, this is only required in development but will be enforced also in production builds in the future.';\n\nexport const TITLE_NOT_MATCHING_META_INFO = 'The \"title\" doesn\\'t match the title recorded in plugin.json.';\n\nexport const ADDED_LINK_META_INFO_MISSING =\n 'The extension was not recorded in the plugin.json. Added link extensions must be listed in the section \"extensions.addedLinks[]\". Currently, this is only required in development but will be enforced also in production builds in the future.';\n\nexport const ADDED_FUNCTION_META_INFO_MISSING =\n 'The extension was not recorded in the plugin.json. Added function extensions must be listed in the section \"extensions.addedFunction[]\". Currently, this is only required in development but will be enforced also in production builds in the future.';\n\nexport const DESCRIPTION_NOT_MATCHING_META_INFO =\n 'The \"description\" doesn\\'t match the description recorded in plugin.json.';\n\nexport const TARGET_NOT_MATCHING_META_INFO =\n 'The \"targets\" for the registered extension does not match the targets recorded in plugin.json. Currently, this is only required in development but will be enforced also in production builds in the future.';\n\nexport const APP_NOT_FOUND = (pluginId: string) => `The app plugin with plugin id \"${pluginId}\" was not found.`;\n","import { Field, FieldType } from '@grafana/data';\nimport { TextDimensionConfig, TextDimensionMode } from '@grafana/schema';\n\nexport interface DimensionSupplier<T = any> {\n /**\n * This means an explicit value was not configured\n */\n isAssumed?: boolean;\n\n /**\n * The field used for\n */\n field?: Field;\n\n /**\n * Explicit value -- if == null, then need a value for each index\n */\n fixed?: T;\n\n /**\n * A single value -- typically last\n */\n value: () => T;\n\n /**\n * Supplier for the dimension value\n */\n get: (index: number) => T;\n}\n\n/** Places that use the value */\nexport interface ScaleDimensionOptions {\n min: number;\n max: number;\n step?: number;\n hideRange?: boolean; // false\n filteredFieldType?: FieldType;\n}\n\nexport interface ScalarDimensionOptions {\n min: number;\n max: number;\n}\n\nexport interface TextDimensionOptions {\n // anything?\n}\n\nexport const defaultTextConfig: TextDimensionConfig = Object.freeze({\n fixed: '',\n mode: TextDimensionMode.Field,\n field: '',\n});\n\n/** Places that use the value */\nexport interface ResourceDimensionOptions {\n resourceType: MediaType;\n folderName?: ResourceFolderName;\n placeholderText?: string;\n placeholderValue?: string;\n // If you want your icon to be driven by value of a field\n showSourceRadio?: boolean;\n maxFiles?: number;\n}\n\nexport enum ResourceFolderName {\n Icon = 'img/icons/unicons',\n IOT = 'img/icons/iot',\n Marker = 'img/icons/marker',\n BG = 'img/bg',\n}\n\nexport enum MediaType {\n Icon = 'icon',\n Image = 'image',\n}\n\nexport enum PickerTabType {\n Folder = 'folder',\n URL = 'url',\n Upload = 'upload',\n}\n\nexport enum ResourcePickerSize {\n SMALL = 'small',\n NORMAL = 'normal',\n}\n\nexport interface DirectionDimensionOptions {}\n","import {\n Spec as DashboardV2Spec,\n defaultAutoGridLayoutSpec,\n AutoGridLayoutItemKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\nimport { AutoGridItem } from '../../scene/layout-auto-grid/AutoGridItem';\nimport { AutoGridLayout } from '../../scene/layout-auto-grid/AutoGridLayout';\nimport {\n AUTO_GRID_DEFAULT_COLUMN_WIDTH,\n AUTO_GRID_DEFAULT_ROW_HEIGHT,\n AutoGridColumnWidth,\n AutoGridRowHeight,\n getAutoRowsTemplate,\n getTemplateColumnsTemplate,\n AutoGridLayoutManager,\n} from '../../scene/layout-auto-grid/AutoGridLayoutManager';\nimport { dashboardSceneGraph } from '../../utils/dashboardSceneGraph';\nimport { getGridItemKeyForPanelId } from '../../utils/utils';\n\nimport { buildLibraryPanel, buildVizPanel, getConditionalRendering } from './utils';\n\nexport function serializeAutoGridLayout(layoutManager: AutoGridLayoutManager): DashboardV2Spec['layout'] {\n const { maxColumnCount, fillScreen, columnWidth, rowHeight, layout } = layoutManager.state;\n const defaults = defaultAutoGridLayoutSpec();\n\n return {\n kind: 'AutoGridLayout',\n spec: {\n maxColumnCount,\n fillScreen: fillScreen === defaults.fillScreen ? undefined : fillScreen,\n ...serializeAutoGridColumnWidth(columnWidth),\n ...serializeAutoGridRowHeight(rowHeight),\n items: layout.state.children.map(serializeAutoGridItem),\n },\n };\n}\n\nexport function serializeAutoGridItem(item: AutoGridItem): AutoGridLayoutItemKind {\n // For serialization we should retrieve the original element key\n const elementKey = dashboardSceneGraph.getElementIdentifierForVizPanel(item.state?.body);\n\n const layoutItem: AutoGridLayoutItemKind = {\n kind: 'AutoGridLayoutItem',\n spec: {\n element: {\n kind: 'ElementReference',\n name: elementKey,\n },\n },\n };\n\n const conditionalRenderingRootGroup = item.state.conditionalRendering?.serialize();\n // Only serialize the conditional rendering if it has items\n if (conditionalRenderingRootGroup?.spec.items.length) {\n layoutItem.spec.conditionalRendering = conditionalRenderingRootGroup;\n }\n\n if (item.state.variableName) {\n layoutItem.spec.repeat = {\n mode: 'variable',\n value: item.state.variableName,\n };\n }\n\n return layoutItem;\n}\n\nexport function deserializeAutoGridLayout(\n layout: DashboardV2Spec['layout'],\n elements: DashboardV2Spec['elements'],\n preload: boolean,\n panelIdGenerator?: () => number\n): AutoGridLayoutManager {\n if (layout.kind !== 'AutoGridLayout') {\n throw new Error('Invalid layout kind');\n }\n\n const defaults = defaultAutoGridLayoutSpec();\n const { maxColumnCount, columnWidthMode, columnWidth, rowHeightMode, rowHeight, fillScreen } = layout.spec;\n\n const children = layout.spec.items.map((item) => deserializeAutoGridItem(item, elements, panelIdGenerator));\n\n const columnWidthCombined = columnWidthMode === 'custom' ? columnWidth : columnWidthMode;\n const rowHeightCombined = rowHeightMode === 'custom' ? rowHeight : rowHeightMode;\n\n return new AutoGridLayoutManager({\n maxColumnCount,\n columnWidth: columnWidthCombined,\n rowHeight: rowHeightCombined,\n fillScreen: fillScreen ?? defaults.fillScreen,\n layout: new AutoGridLayout({\n templateColumns: getTemplateColumnsTemplate(\n maxColumnCount ?? defaults.maxColumnCount!,\n columnWidthCombined ?? AUTO_GRID_DEFAULT_COLUMN_WIDTH\n ),\n autoRows: getAutoRowsTemplate(rowHeightCombined ?? AUTO_GRID_DEFAULT_ROW_HEIGHT, fillScreen ?? false),\n children,\n }),\n });\n}\n\nfunction serializeAutoGridColumnWidth(columnWidth: AutoGridColumnWidth) {\n return {\n columnWidthMode: typeof columnWidth === 'number' ? 'custom' : columnWidth,\n columnWidth: typeof columnWidth === 'number' ? columnWidth : undefined,\n };\n}\n\nfunction serializeAutoGridRowHeight(rowHeight: AutoGridRowHeight) {\n return {\n rowHeightMode: typeof rowHeight === 'number' ? 'custom' : rowHeight,\n rowHeight: typeof rowHeight === 'number' ? rowHeight : undefined,\n };\n}\n\nexport function deserializeAutoGridItem(\n item: AutoGridLayoutItemKind,\n elements: DashboardV2Spec['elements'],\n panelIdGenerator?: () => number\n): AutoGridItem {\n const panel = elements[item.spec.element.name];\n if (!panel) {\n throw new Error(`Panel with uid ${item.spec.element.name} not found in the dashboard elements`);\n }\n let id: number | undefined;\n if (panelIdGenerator) {\n id = panelIdGenerator();\n }\n return new AutoGridItem({\n key: getGridItemKeyForPanelId(id ?? panel.spec.id),\n body: panel.kind === 'LibraryPanel' ? buildLibraryPanel(panel, id) : buildVizPanel(panel, id),\n variableName: item.spec.repeat?.value,\n conditionalRendering: getConditionalRendering(item),\n });\n}\n","import { useMemo } from 'react';\n\nimport { useGetUserPreferencesQuery } from '@grafana/api-clients/rtkq/legacy/preferences';\nimport { config } from '@grafana/runtime';\n\nimport { contextSrv } from '../../../services/context_srv';\n\nexport const usePinnedItems = () => {\n const preferences = useGetUserPreferencesQuery(undefined, { skip: !contextSrv.user.isSignedIn });\n const pinnedItems = useMemo(() => preferences.data?.navbar?.bookmarkUrls || [], [preferences]);\n\n if (config.featureToggles.pinNavItems) {\n return pinnedItems;\n }\n return [];\n};\n","import { useEffect } from 'react';\nimport { Observer, Subject, Subscription } from 'rxjs';\n\nimport { useForceUpdate } from '@grafana/ui';\n\nexport class StateManagerBase<TState> {\n private _subject = new Subject<TState>();\n private _state: TState;\n\n constructor(state: TState) {\n this._state = state;\n }\n\n useState() {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useLatestState(this);\n }\n\n get state() {\n return this._state;\n }\n\n setState(update: Partial<TState>) {\n this._state = {\n ...this._state,\n ...update,\n };\n this._subject.next(this._state);\n }\n\n /**\n * Subscribe to the scene state subject\n **/\n subscribeToState(observerOrNext?: Partial<Observer<TState>>): Subscription {\n return this._subject.subscribe(observerOrNext);\n }\n}\n/**\n * This hook is always returning model.state instead of a useState that remembers the last state emitted on the subject\n * The reason for this is so that if the model instance change this function will always return the latest state.\n */\nfunction useLatestState<TState>(model: StateManagerBase<TState>): TState {\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n const s = model.subscribeToState({ next: forceUpdate });\n return () => s.unsubscribe();\n }, [model, forceUpdate]);\n\n return model.state;\n}\n","import { useCallback, useRef } from 'react';\n\ntype AsyncFn<T, V> = (value: T) => Promise<V>;\n\n/**\n * Wraps an async function to ensure that only the latest call is resolved.\n * Used to prevent a faster call being overwritten by an earlier slower call.\n */\nexport function useLatestAsyncCall<T, V>(fn: AsyncFn<T, V>): AsyncFn<T, V> {\n const latestValueCount = useRef<number>(0);\n\n const wrappedFn = useCallback(\n (value: T) => {\n latestValueCount.current++;\n const requestCount = latestValueCount.current;\n\n return new Promise<V>((resolve, reject) => {\n fn(value)\n .then((result) => {\n // Only resolve if the value is still the latest\n if (requestCount === latestValueCount.current) {\n resolve(result);\n } else {\n reject(new StaleResultError());\n }\n })\n .catch(reject);\n });\n },\n [fn]\n );\n\n return wrappedFn;\n}\n\nexport class StaleResultError extends Error {\n constructor() {\n super('This result is stale and is discarded');\n this.name = 'StaleResultError';\n Object.setPrototypeOf(this, new.target.prototype); // Necessary for instanceof to work correctly\n }\n}\n","/* Spreading unbound arrays can be very slow or even crash the browser if used for arguments */\n/* eslint no-restricted-syntax: [\"error\", \"SpreadElement\"] */\n\nimport { debounce } from 'lodash';\nimport { useState, useCallback, useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { fuzzyFind, itemToString } from './filter';\nimport { ComboboxOption } from './types';\nimport { StaleResultError, useLatestAsyncCall } from './useLatestAsyncCall';\n\ntype AsyncOptions<T extends string | number> =\n | Array<ComboboxOption<T>>\n | ((inputValue: string) => Promise<Array<ComboboxOption<T>>>);\n\nconst asyncNoop = () => Promise.resolve([]);\n\nexport const DEBOUNCE_TIME_MS = 200;\n\n/**\n * Abstracts away sync/async options for combobox components.\n * It also filters options based on the user's input.\n *\n * Returns:\n * - options either filtered by user's input, or from async options fn\n * - function to call when user types (to filter, or call async fn)\n * - loading and error states\n */\nexport function useOptions<T extends string | number>(rawOptions: AsyncOptions<T>, createCustomValue: boolean) {\n const isAsync = typeof rawOptions === 'function';\n\n const loadOptions = useLatestAsyncCall(isAsync ? rawOptions : asyncNoop);\n\n const debouncedLoadOptions = useMemo(\n () =>\n debounce((searchTerm: string) => {\n return loadOptions(searchTerm)\n .then((options) => {\n setAsyncOptions(options);\n setAsyncLoading(false);\n setAsyncError(false);\n })\n .catch((error) => {\n if (!(error instanceof StaleResultError)) {\n setAsyncError(true);\n setAsyncLoading(false);\n\n if (error) {\n console.error('Error loading async options for Combobox', error);\n }\n }\n });\n }, DEBOUNCE_TIME_MS),\n [loadOptions]\n );\n\n const [asyncOptions, setAsyncOptions] = useState<Array<ComboboxOption<T>>>([]);\n const [asyncLoading, setAsyncLoading] = useState(false);\n const [asyncError, setAsyncError] = useState(false);\n\n // This hook keeps its own inputValue state (rather than accepting it as an arg) because it needs to be\n // told it for async options loading anyway.\n const [userTypedSearch, setUserTypedSearch] = useState('');\n\n const addCustomValue = useCallback(\n (opts: Array<ComboboxOption<T>>) => {\n let currentOptions: Array<ComboboxOption<T>> = opts;\n if (createCustomValue && userTypedSearch) {\n // Since the label of a normal option does not have to match its value and a custom option has the same value and label,\n // we just focus on the value to check if the option already exists\n const customValueExists = opts.some((opt) => opt.value === userTypedSearch);\n if (!customValueExists) {\n // Make sure to clone the array first to avoid mutating the original array!\n currentOptions = currentOptions.slice();\n currentOptions.unshift({\n label: userTypedSearch,\n value: userTypedSearch as T,\n description: t('combobox.custom-value.description', 'Use custom value'),\n });\n }\n }\n return currentOptions;\n },\n [createCustomValue, userTypedSearch]\n );\n\n const updateOptions = useCallback(\n (inputValue: string) => {\n setUserTypedSearch(inputValue);\n if (isAsync) {\n setAsyncLoading(true);\n debouncedLoadOptions(inputValue);\n }\n },\n [debouncedLoadOptions, isAsync]\n );\n\n const stringifiedOptions = useMemo(() => {\n return isAsync ? [] : rawOptions.map(itemToString);\n }, [isAsync, rawOptions]);\n\n // Create a list of options filtered by the current search.\n // If async, just returns the async options.\n const filteredOptions = useMemo(() => {\n if (isAsync) {\n return asyncOptions;\n }\n\n return fuzzyFind(rawOptions, stringifiedOptions, userTypedSearch);\n }, [asyncOptions, isAsync, rawOptions, stringifiedOptions, userTypedSearch]);\n\n const [finalOptions, groupStartIndices] = useMemo(() => {\n const { options, groupStartIndices } = sortByGroup(filteredOptions);\n\n return [addCustomValue(options), groupStartIndices];\n }, [filteredOptions, addCustomValue]);\n\n return { options: finalOptions, groupStartIndices, updateOptions, asyncLoading, asyncError };\n}\n\n/**\n * Sorts options by group and returns the sorted options and the starting index of each group\n */\nexport function sortByGroup<T extends string | number>(options: Array<ComboboxOption<T>>) {\n // Group options by their group\n const groupedOptions = new Map<string | undefined, Array<ComboboxOption<T>>>();\n const groupStartIndices = new Map<string | undefined, number>();\n\n for (const option of options) {\n const group = option.group;\n const existing = groupedOptions.get(group);\n if (existing) {\n existing.push(option);\n } else {\n groupedOptions.set(group, [option]);\n }\n }\n\n // If we only have one group (either the undefined group, or a single group), return the original array\n if (groupedOptions.size <= 1) {\n if (options[0]?.group) {\n groupStartIndices.set(options[0]?.group, 0);\n }\n\n return {\n options,\n groupStartIndices,\n };\n }\n\n // 'Preallocate' result array with same size as input - very minor optimization\n const result: Array<ComboboxOption<T>> = new Array(options.length);\n\n let currentIndex = 0;\n\n // Fill result array with grouped and undefined grouped options\n for (const [group, groupOptions] of groupedOptions) {\n if (group) {\n groupStartIndices.set(group, currentIndex);\n }\n for (const option of groupOptions) {\n result[currentIndex++] = option;\n }\n }\n\n return {\n options: result,\n groupStartIndices,\n };\n}\n","import * as React from 'react';\n\nimport { config, locationService } from '@grafana/runtime';\nimport store from 'app/core/store';\nimport { AlertManagerDataSourceJsonData, AlertManagerImplementation } from 'app/plugins/datasource/alertmanager/types';\nimport grafanaIconSvg from 'img/grafana_icon.svg';\n\nimport { useAlertManagersByPermission } from '../hooks/useAlertManagerSources';\nimport { useAlertmanagerConfig } from '../hooks/useAlertmanagerConfig';\nimport { EXTRA_CONFIG_UID, isExtraConfig } from '../utils/alertmanager/extraConfigs';\nimport { ALERTMANAGER_NAME_LOCAL_STORAGE_KEY, ALERTMANAGER_NAME_QUERY_KEY } from '../utils/constants';\nimport {\n AlertManagerDataSource,\n GRAFANA_RULES_SOURCE_NAME,\n getAlertmanagerDataSourceByName,\n} from '../utils/datasource';\n\ninterface Context {\n selectedAlertmanager: string | undefined;\n hasConfigurationAPI: boolean; // returns true when a configuration API is available\n isGrafanaAlertmanager: boolean; // returns true if we are dealing with the built-in Alertmanager\n selectedAlertmanagerConfig: AlertManagerDataSourceJsonData | undefined;\n availableAlertManagers: AlertManagerDataSource[];\n setSelectedAlertmanager: (name: string) => void;\n}\n\nconst AlertmanagerContext = React.createContext<Context | undefined>(undefined);\n\ninterface Props extends React.PropsWithChildren {\n accessType: 'instance' | 'notification';\n // manually setting the alertmanagersource name will override all of the other sources\n alertmanagerSourceName?: string;\n}\n\nconst AlertmanagerProvider = ({ children, accessType, alertmanagerSourceName }: Props) => {\n const queryParams = locationService.getSearch();\n const updateQueryParams = locationService.partial;\n const allAvailableAlertManagers = useAlertManagersByPermission(accessType);\n const isExtraConfigEnabled = config.featureToggles.alertingImportAlertmanagerUI ?? false;\n\n const { data: grafanaConfig } = useAlertmanagerConfig(isExtraConfigEnabled ? GRAFANA_RULES_SOURCE_NAME : undefined, {\n refetchOnFocus: false,\n refetchOnReconnect: false,\n });\n const hasExtraConfigs = Boolean(grafanaConfig?.extra_config && grafanaConfig.extra_config.length > 0);\n\n const availableAlertManagers = React.useMemo(() => {\n const regularAlertManagers = allAvailableAlertManagers.availableInternalDataSources.concat(\n allAvailableAlertManagers.availableExternalDataSources\n );\n\n const extraConfigDataSource: AlertManagerDataSource[] =\n isExtraConfigEnabled && hasExtraConfigs\n ? [\n {\n name: EXTRA_CONFIG_UID,\n displayName: 'Grafana (imported)',\n imgUrl: grafanaIconSvg,\n hasConfigurationAPI: false,\n handleGrafanaManagedAlerts: true,\n },\n ]\n : [];\n\n // list in order: Grafana -> Extra Config -> Extra Alertmanagers\n const grafanaAlertmanager = regularAlertManagers.find((am) => am.name === GRAFANA_RULES_SOURCE_NAME);\n const datasourceAlertmanagers = regularAlertManagers.filter((am) => am.name !== GRAFANA_RULES_SOURCE_NAME);\n const orderedAlertManagers: AlertManagerDataSource[] = [];\n\n if (grafanaAlertmanager) {\n orderedAlertManagers.push(grafanaAlertmanager);\n }\n\n orderedAlertManagers.push(...extraConfigDataSource);\n orderedAlertManagers.push(...datasourceAlertmanagers);\n\n return orderedAlertManagers;\n }, [allAvailableAlertManagers, isExtraConfigEnabled, hasExtraConfigs]);\n\n const updateSelectedAlertmanager = React.useCallback(\n (selectedAlertManager: string) => {\n if (!isAlertManagerAvailable(availableAlertManagers, selectedAlertManager)) {\n return;\n }\n\n if (selectedAlertManager === GRAFANA_RULES_SOURCE_NAME) {\n store.delete(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY);\n updateQueryParams({ [ALERTMANAGER_NAME_QUERY_KEY]: undefined });\n } else {\n store.set(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY, selectedAlertManager);\n updateQueryParams({ [ALERTMANAGER_NAME_QUERY_KEY]: selectedAlertManager });\n }\n },\n [availableAlertManagers, updateQueryParams]\n );\n\n const sourceFromQuery = queryParams.get(ALERTMANAGER_NAME_QUERY_KEY);\n const sourceFromStore = store.get(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY);\n const defaultSource = GRAFANA_RULES_SOURCE_NAME;\n\n // This overrides AM in the store to be in sync with the one in the URL\n // When the user uses multiple tabs with different AMs, the store will be changing all the time\n // It's safest to always use URLs with alertmanager query param\n React.useEffect(() => {\n if (sourceFromQuery && sourceFromQuery !== sourceFromStore) {\n store.set(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY, sourceFromQuery);\n }\n }, [sourceFromQuery, sourceFromStore]);\n\n // queryParam > localStorage > default\n const desiredAlertmanager = alertmanagerSourceName ?? sourceFromQuery ?? sourceFromStore ?? defaultSource;\n const selectedAlertmanager = isAlertManagerAvailable(availableAlertManagers, desiredAlertmanager)\n ? desiredAlertmanager\n : undefined;\n\n const selectedAlertmanagerConfig = React.useMemo(() => {\n if (selectedAlertmanager && isExtraConfig(selectedAlertmanager)) {\n const config: AlertManagerDataSourceJsonData = {\n implementation: AlertManagerImplementation.prometheus,\n handleGrafanaManagedAlerts: true,\n };\n return config;\n }\n return getAlertmanagerDataSourceByName(selectedAlertmanager)?.jsonData;\n }, [selectedAlertmanager]);\n\n // determine if we're dealing with an Alertmanager data source that supports the ruler API\n const isGrafanaAlertmanager = selectedAlertmanager === GRAFANA_RULES_SOURCE_NAME;\n const isAlertmanagerWithConfigAPI = selectedAlertmanagerConfig\n ? isAlertManagerWithConfigAPI(selectedAlertmanagerConfig)\n : false;\n\n const hasConfigurationAPI = isGrafanaAlertmanager || isAlertmanagerWithConfigAPI;\n\n const value: Context = {\n selectedAlertmanager,\n hasConfigurationAPI,\n isGrafanaAlertmanager,\n selectedAlertmanagerConfig,\n availableAlertManagers,\n setSelectedAlertmanager: updateSelectedAlertmanager,\n };\n\n return <AlertmanagerContext.Provider value={value}>{children}</AlertmanagerContext.Provider>;\n};\n\nfunction useAlertmanager() {\n const context = React.useContext(AlertmanagerContext);\n\n if (context === undefined) {\n throw new Error('useAlertmanager must be used within a AlertmanagerContext');\n }\n\n return context;\n}\n\nexport { AlertmanagerProvider, useAlertmanager };\n\nfunction isAlertManagerAvailable(availableAlertManagers: AlertManagerDataSource[], alertManagerName: string) {\n const availableAlertManagersNames = availableAlertManagers.map((am) => am.name);\n return availableAlertManagersNames.includes(alertManagerName);\n}\n\n// when the `implementation` is set to `undefined` we assume we're dealing with an AlertManager with config API. The reason for this is because\n// our Hosted Grafana stacks provision Alertmanager data sources without `jsonData: { implementation: \"mimir\" }`.\nconst CONFIG_API_ENABLED_ALERTMANAGER_FLAVORS = [\n AlertManagerImplementation.mimir,\n AlertManagerImplementation.cortex,\n undefined,\n];\n\nexport function isAlertManagerWithConfigAPI(dataSourceConfig: AlertManagerDataSourceJsonData): boolean {\n return CONFIG_API_ENABLED_ALERTMANAGER_FLAVORS.includes(dataSourceConfig.implementation);\n}\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nexport interface Props {\n className?: string;\n leftActionsSeparator?: boolean;\n}\n\nexport function NavToolbarSeparator({ className, leftActionsSeparator }: Props) {\n const styles = useStyles2(getStyles);\n\n if (leftActionsSeparator) {\n return <div className={cx(className, styles.leftActionsSeparator)} />;\n }\n\n return <div className={cx(className, styles.line)} />;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n leftActionsSeparator: css({\n display: 'flex',\n flexGrow: 1,\n }),\n line: css({\n width: 1,\n backgroundColor: theme.colors.border.medium,\n height: 24,\n flexShrink: 0,\n flexGrow: 0,\n [theme.breakpoints.down('sm')]: {\n display: 'none',\n },\n }),\n };\n};\n","import { useEffect, useRef, useState } from 'react';\nimport { Observable, Subject } from 'rxjs';\n\nimport { Field, locationUtil } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\n\nimport { QueryResponse } from '../service/types';\n\nexport function useKeyNavigationListener() {\n const eventsRef = useRef(new Subject<React.KeyboardEvent>());\n return {\n keyboardEvents: eventsRef.current,\n onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.code) {\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'Enter':\n case 'Escape':\n eventsRef.current.next(e);\n default:\n // ignore\n }\n },\n };\n}\n\ninterface ItemSelection {\n x: number;\n y: number;\n}\n\nexport function useSearchKeyboardNavigation(\n keyboardEvents: Observable<React.KeyboardEvent>,\n numColumns: number,\n response: QueryResponse\n): ItemSelection {\n const highlightIndexRef = useRef<ItemSelection>({ x: 0, y: -1 });\n const [highlightIndex, setHighlightIndex] = useState<ItemSelection>({ x: 0, y: -1 });\n const urlsRef = useRef<Field>();\n\n // Clear selection when the search results change\n useEffect(() => {\n urlsRef.current = response.view.fields.url;\n highlightIndexRef.current.x = 0;\n highlightIndexRef.current.y = -1;\n setHighlightIndex({ ...highlightIndexRef.current });\n }, [response]);\n\n useEffect(() => {\n const sub = keyboardEvents.subscribe({\n next: (keyEvent) => {\n switch (keyEvent?.code) {\n case 'ArrowDown': {\n highlightIndexRef.current.y++;\n setHighlightIndex({ ...highlightIndexRef.current });\n break;\n }\n case 'ArrowUp':\n highlightIndexRef.current.y = Math.max(0, highlightIndexRef.current.y - 1);\n setHighlightIndex({ ...highlightIndexRef.current });\n break;\n case 'ArrowRight': {\n if (numColumns > 0) {\n highlightIndexRef.current.x = Math.min(numColumns, highlightIndexRef.current.x + 1);\n setHighlightIndex({ ...highlightIndexRef.current });\n }\n break;\n }\n case 'ArrowLeft': {\n if (numColumns > 0) {\n highlightIndexRef.current.x = Math.max(0, highlightIndexRef.current.x - 1);\n setHighlightIndex({ ...highlightIndexRef.current });\n }\n break;\n }\n case 'Enter':\n if (!urlsRef.current) {\n break;\n }\n const idx = highlightIndexRef.current.x * numColumns + highlightIndexRef.current.y;\n if (idx < 0) {\n highlightIndexRef.current.x = 0;\n highlightIndexRef.current.y = 0;\n setHighlightIndex({ ...highlightIndexRef.current });\n break;\n }\n const url: unknown = urlsRef.current.values?.[idx];\n if (typeof url === 'string') {\n locationService.push(locationUtil.stripBaseFromUrl(url));\n }\n }\n },\n });\n\n return () => sub.unsubscribe();\n }, [keyboardEvents, numColumns]);\n\n return highlightIndex;\n}\n","/**\n * @preserve jquery-param (c) 2015 KNOWLEDGECODE | MIT\n */\n\nimport { isDateTime } from '../datetime/moment_wrapper';\nimport { ExploreUrlState, URLRange } from '../types/explore';\nimport { RawTimeRange } from '../types/time';\n\n/**\n * Type to represent the value of a single query variable.\n *\n * @public\n */\nexport type UrlQueryValue = string | number | boolean | string[] | number[] | boolean[] | undefined | null;\n\n/**\n * Type to represent the values parsed from the query string.\n *\n * @public\n */\nexport type UrlQueryMap = Record<string, UrlQueryValue>;\n\nfunction renderUrl(path: string, query: UrlQueryMap | undefined): string {\n if (query && Object.keys(query).length > 0) {\n path += '?' + toUrlParams(query);\n }\n return path;\n}\n\nfunction encodeURIComponentAsAngularJS(val: EncodeURIComponentParams, pctEncodeSpaces?: boolean) {\n return encodeURIComponent(val)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%3B/gi, ';')\n .replace(/%20/g, pctEncodeSpaces ? '%20' : '+')\n .replace(/[!'()*]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\ntype EncodeURIComponentParams = Parameters<typeof encodeURIComponent>[0];\n/**\n * Encodes URL parameters in the style of AngularJS.\n * Use `serializeParams` to encode parameters using `encodeURIComponent` instead.\n */\nfunction toUrlParams(a: any, encodeAsAngularJS = true) {\n const s: any[] = [];\n const rbracket = /\\[\\]$/;\n\n const encodingFunction = encodeAsAngularJS\n ? (value: EncodeURIComponentParams, pctEncodeSpaces?: boolean) =>\n encodeURIComponentAsAngularJS(value, pctEncodeSpaces)\n : (value: EncodeURIComponentParams, _: boolean) => encodeURIComponent(value);\n\n const isArray = (obj: unknown) => {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n\n const add = (k: string, v: any) => {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodingFunction(k, true) + '=' + encodingFunction(v, true);\n };\n\n const buildParams = (prefix: string, obj: any) => {\n let i, len, key;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix, obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + '[' + key + ']', obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a).join('&');\n}\n\n/**\n * Converts params into a URL-encoded query string.\n *\n * @param params data to serialize\n * @returns A URL-encoded string representing the provided data.\n */\nfunction serializeParams(params: unknown): string {\n return toUrlParams(params, false);\n}\n\nfunction appendQueryToUrl(url: string, stringToAppend: string) {\n if (stringToAppend !== undefined && stringToAppend !== null && stringToAppend !== '') {\n const pos = url.indexOf('?');\n if (pos !== -1) {\n if (url.length - pos > 1) {\n url += '&';\n }\n } else {\n url += '?';\n }\n url += stringToAppend;\n }\n\n return url;\n}\n\n/**\n * Return search part (as object) of current url\n */\nfunction getUrlSearchParams(): UrlQueryMap {\n const search = window.location.search.substring(1);\n const searchParamsSegments = search.split('&');\n const params: UrlQueryMap = {};\n for (const p of searchParamsSegments) {\n const keyValuePair = p.split('=');\n if (keyValuePair.length > 1) {\n // key-value param\n const key = decodeURIComponent(keyValuePair[0]);\n const value = decodeURIComponent(keyValuePair[1]);\n if (key in params) {\n params[key] = [...(params[key] as any[]), value];\n } else {\n params[key] = [value];\n }\n } else if (keyValuePair.length === 1) {\n // boolean param\n const key = decodeURIComponent(keyValuePair[0]);\n params[key] = true;\n }\n }\n return params;\n}\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * Attribution: Code dervived from https://github.com/angular/angular.js/master/src/Angular.js#L1396\n * @returns {Object.<string,boolean|Array>}\n */\nexport function parseKeyValue(keyValue: string) {\n const obj: any = {};\n const parts = (keyValue || '').split('&');\n\n for (let keyValue of parts) {\n let splitPoint: number | undefined;\n let key: string | undefined;\n let val: string | undefined | boolean;\n\n if (keyValue) {\n key = keyValue = keyValue.replace(/\\+/g, '%20');\n splitPoint = keyValue.indexOf('=');\n\n if (splitPoint !== -1) {\n key = keyValue.substring(0, splitPoint);\n val = keyValue.substring(splitPoint + 1);\n }\n\n key = tryDecodeURIComponent(key);\n\n if (key !== undefined) {\n val = val !== undefined ? tryDecodeURIComponent(val as string) : true;\n\n let parsedVal: any;\n if (typeof val === 'string' && val !== '') {\n parsedVal = val === 'true' || val === 'false' ? val === 'true' : val;\n } else {\n parsedVal = val;\n }\n\n if (!obj.hasOwnProperty(key)) {\n obj[key] = isNaN(parsedVal) ? val : parsedVal;\n } else if (Array.isArray(obj[key])) {\n obj[key].push(val);\n } else {\n obj[key] = [obj[key], isNaN(parsedVal) ? val : parsedVal];\n }\n }\n }\n }\n\n return obj;\n}\n\nfunction tryDecodeURIComponent(value: string): string | undefined {\n try {\n return decodeURIComponent(value);\n } catch (e) {\n return undefined;\n }\n}\n\nexport const urlUtil = {\n renderUrl,\n toUrlParams,\n appendQueryToUrl,\n getUrlSearchParams,\n parseKeyValue,\n serializeParams,\n};\n\n/**\n * Create an string that is used in URL to represent the Explore state. This is basically just a stringified json\n * that is used as a state of a single Explore pane so it does not represent full Explore URL so some properties\n * may be omitted (they will be filled in with default values).\n *\n * @param urlState\n * @param compact this parameter is deprecated and will be removed in a future release.\n */\nexport function serializeStateToUrlParam(urlState: Partial<ExploreUrlState>, compact?: boolean): string {\n if (compact !== undefined) {\n console.warn('`compact` parameter is deprecated and will be removed in a future release');\n }\n return JSON.stringify(urlState);\n}\n\n/**\n * Converts RawTimeRange to a string that is stored in the URL\n * - relative - stays as it is (e.g. \"now\")\n * - absolute - converted to ms\n */\nexport const toURLRange = (range: RawTimeRange): URLRange => {\n let from = range.from;\n if (isDateTime(from)) {\n from = from.valueOf().toString();\n }\n\n let to = range.to;\n if (isDateTime(to)) {\n to = to.valueOf().toString();\n }\n\n return {\n from,\n to,\n };\n};\n","import { PureComponent } from 'react';\n\nimport { ListProps, AbstractList } from './AbstractList';\n\n/**\n * @deprecated Use ul/li/arr.map directly instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-deprecated-list--docs\n */\n// no point converting, this is deprecated\n// eslint-disable-next-line react-prefer-function-component/react-prefer-function-component\nexport class List<T> extends PureComponent<ListProps<T>> {\n render() {\n return <AbstractList {...this.props} />;\n }\n}\n","import { BaseQueryFn, createApi, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react';\nimport { isBoolean, omit } from 'lodash';\nimport { lastValueFrom } from 'rxjs';\n\nimport { AppEvents } from '@grafana/data';\nimport { BackendSrvRequest, getBackendSrv } from '@grafana/runtime';\nimport appEvents from 'app/core/app_events';\n\nimport { logMeasurement } from '../Analytics';\n\nexport type ExtendedBackendSrvRequest = BackendSrvRequest & {\n /**\n * Data to send with a request. Maps to the `data` property on a `BackendSrvRequest`\n *\n * This is done to allow us to more easily consume code-gen APIs that expect/send a `body` property\n * to endpoints.\n */\n body?: BackendSrvRequest['data'];\n};\n\nexport type NotificationOptions = {\n /**\n * Custom success message to show after completion of the request.\n *\n * If a custom message is provided, any success message provided from the API response\n * will not be shown\n */\n successMessage?: string;\n /**\n * Custom error message to show if there's an error completing the request via backendSrv.\n *\n * If a custom message is provided, any error message from the API response\n * will not be shown\n */\n errorMessage?: string;\n} & Pick<BackendSrvRequest, 'showSuccessAlert' | 'showErrorAlert'>;\n\n// utility type for passing request options to endpoints\nexport type WithNotificationOptions<T> = T & {\n notificationOptions?: NotificationOptions;\n};\n\n// we'll use this type to prevent any consumer of the API from passing \"showSuccessAlert\" or \"showErrorAlert\" to the request options\nexport type BaseQueryFnArgs = WithNotificationOptions<\n Omit<ExtendedBackendSrvRequest, 'showSuccessAlert' | 'showErrorAlert'>\n>;\n\nexport type AlertingApiExtraOptions = {\n /**\n * Suppress the error message display on an endpoint entirely.\n * Useful for autogenerated API endpoints where we want to easily suppress error messages\n * without having to overwrite endpoint logic/definitions\n */\n hideErrorMessage?: boolean;\n};\n\nexport const backendSrvBaseQuery =\n (): BaseQueryFn<BaseQueryFnArgs> =>\n async ({ body, notificationOptions = {}, ...requestOptions }, api, extraOptions?: AlertingApiExtraOptions) => {\n const { errorMessage, showErrorAlert, successMessage, showSuccessAlert } = notificationOptions;\n const { hideErrorMessage } = extraOptions || {};\n\n try {\n const modifiedRequestOptions: BackendSrvRequest = {\n ...requestOptions,\n ...(body && { data: body }),\n ...(isBoolean(showSuccessAlert) && { showSuccessAlert }),\n ...(isBoolean(showErrorAlert) && { showErrorAlert }),\n ...(successMessage && { showSuccessAlert: false }),\n ...((errorMessage || hideErrorMessage) && { showErrorAlert: false }),\n };\n\n const requestStartTs = performance.now();\n\n const { data, ...meta } = await lastValueFrom(getBackendSrv().fetch(modifiedRequestOptions));\n\n logMeasurement(\n 'backendSrvBaseQuery',\n {\n loadTimeMs: performance.now() - requestStartTs,\n },\n {\n url: requestOptions.url,\n method: requestOptions.method ?? 'GET',\n responseStatus: meta.statusText,\n }\n );\n\n if (successMessage && showSuccessAlert !== false) {\n appEvents.emit(AppEvents.alertSuccess, [successMessage]);\n }\n return { data, meta };\n } catch (error) {\n if (errorMessage && showErrorAlert !== false) {\n appEvents.emit(AppEvents.alertError, [errorMessage]);\n }\n return { error };\n }\n };\n\nexport const alertingApi = createApi({\n reducerPath: 'alertingApi',\n baseQuery: backendSrvBaseQuery(),\n // The `BasyQueryFn`` passes all args to `getBackendSrv().fetch()` and that includes configuration options for controlling\n // when to show a \"toast\".\n //\n // By passing \"notificationOptions\" such as \"successMessage\" etc those also get included in the cache key because\n // those args are eventually passed in to the baseQueryFn where the cache key gets computed.\n //\n // @TODO\n // Ideally we wouldn't pass any args in to the endpoint at all and toast message behaviour should be controlled\n // in the hooks or components that consume the RTKQ endpoints.\n serializeQueryArgs: (args) => defaultSerializeQueryArgs(omit(args, 'queryArgs.notificationOptions')),\n tagTypes: [\n 'AlertingConfiguration',\n 'AlertmanagerConfiguration',\n 'AlertmanagerConnectionStatus',\n 'AlertmanagerAlerts',\n 'AlertmanagerSilences',\n 'OnCallIntegrations',\n 'DataSourceSettings',\n 'GrafanaLabels',\n 'CombinedAlertRule',\n 'GrafanaRulerRule',\n 'GrafanaRulerRuleVersion',\n 'GrafanaSlo',\n 'RuleGroup',\n 'RuleNamespace',\n 'ContactPoint',\n 'ContactPointsStatus',\n 'Receiver',\n 'DeletedRules',\n 'GrafanaPrometheusGroups',\n ],\n endpoints: () => ({}),\n});\n","import { Field, LinkModel } from '@grafana/data';\n\nimport { ButtonProps, Button } from '../Button/Button';\n\ntype DataLinkButtonProps = {\n link: LinkModel<Field>;\n buttonProps?: Omit<ButtonProps, 'children'>;\n};\n\n/**\n * @internal\n */\nexport function DataLinkButton({ link, buttonProps }: DataLinkButtonProps) {\n return (\n <a\n href={link.href}\n target={link.target}\n rel=\"noreferrer\"\n onClick={\n link.onClick\n ? (event) => {\n if (!(event.ctrlKey || event.metaKey || event.shiftKey) && link.onClick) {\n event.preventDefault();\n link.onClick(event);\n }\n }\n : undefined\n }\n >\n <Button\n icon={link.target === '_blank' ? 'external-link-alt' : 'link'}\n variant=\"primary\"\n size=\"sm\"\n {...buttonProps}\n >\n {link.title}\n </Button>\n </a>\n );\n}\n","import { useCallback, useMemo } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { Combobox } from '../Combobox/Combobox';\nimport { ComboboxOption } from '../Combobox/types';\n\nexport interface Props {\n onChange: (weekStart?: WeekStart) => void;\n value?: WeekStart;\n width?: number;\n autoFocus?: boolean;\n onBlur?: () => void;\n disabled?: boolean;\n inputId?: string;\n}\n\nexport type WeekStart = 'saturday' | 'sunday' | 'monday';\n\nexport function isWeekStart(value: string): value is WeekStart {\n return ['saturday', 'sunday', 'monday'].includes(value);\n}\n\n/**\n * Returns the system or user defined week start (as defined in bootData)\n * Or you can pass in an override weekStart string and have it be validated and returned as WeekStart type if valid\n */\nexport function getWeekStart(override?: string): WeekStart {\n if (override && isWeekStart(override)) {\n return override;\n }\n\n const preference = window?.grafanaBootData?.user?.weekStart;\n if (preference && isWeekStart(preference)) {\n return preference;\n }\n\n return 'monday';\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/date-time-pickers-weekstartpicker--docs\n */\nexport const WeekStartPicker = (props: Props) => {\n const { onChange, width, autoFocus = false, onBlur, value, disabled = false, inputId } = props;\n const weekStarts: ComboboxOption[] = useMemo(\n () => [\n { value: '', label: t('grafana-ui.week-start-picker.weekStarts-label-default', 'Default') },\n { value: 'saturday', label: t('grafana-ui.week-start-picker.weekStarts-label-saturday', 'Saturday') },\n { value: 'sunday', label: t('grafana-ui.week-start-picker.weekStarts-label-sunday', 'Sunday') },\n { value: 'monday', label: t('grafana-ui.week-start-picker.weekStarts-label-monday', 'Monday') },\n ],\n []\n );\n\n const onChangeWeekStart = useCallback(\n (selectable: ComboboxOption | null) => {\n if (selectable && selectable.value !== undefined) {\n onChange(isWeekStart(selectable.value) ? selectable.value : undefined);\n }\n },\n [onChange]\n );\n\n const selected = useMemo(() => weekStarts.find((item) => item.value === value)?.value ?? '', [value, weekStarts]);\n\n return (\n <Combobox\n id={inputId}\n value={selected}\n placeholder={selectors.components.WeekStartPicker.placeholder}\n autoFocus={autoFocus}\n width={width}\n options={weekStarts}\n onChange={onChangeWeekStart}\n onBlur={onBlur}\n disabled={disabled}\n />\n );\n};\n","import { SelectableValue } from '@grafana/data';\nimport { RadioButtonGroup } from '@grafana/ui';\nimport { EXPLORE_GRAPH_STYLES, ExploreGraphStyle } from 'app/types/explore';\n\nconst ALL_GRAPH_STYLE_OPTIONS: Array<SelectableValue<ExploreGraphStyle>> = EXPLORE_GRAPH_STYLES.map((style) => ({\n value: style,\n // capital-case it and switch `_` to ` `\n label: style[0].toUpperCase() + style.slice(1).replace(/_/, ' '),\n}));\n\ntype Props = {\n graphStyle: ExploreGraphStyle;\n onChangeGraphStyle: (style: ExploreGraphStyle) => void;\n};\n\nexport function ExploreGraphLabel(props: Props) {\n const { graphStyle, onChangeGraphStyle } = props;\n return (\n <RadioButtonGroup size=\"sm\" options={ALL_GRAPH_STYLE_OPTIONS} value={graphStyle} onChange={onChangeGraphStyle} />\n );\n}\n","import store from 'app/core/store';\nimport { ExploreGraphStyle, EXPLORE_GRAPH_STYLES } from 'app/types/explore';\n\nconst GRAPH_STYLE_KEY = 'grafana.explore.style.graph';\nexport const storeGraphStyle = (graphStyle: string): void => {\n store.set(GRAPH_STYLE_KEY, graphStyle);\n};\n\nexport const loadGraphStyle = (): ExploreGraphStyle => {\n return toGraphStyle(store.get(GRAPH_STYLE_KEY));\n};\n\nconst DEFAULT_GRAPH_STYLE: ExploreGraphStyle = 'lines';\n// we use this function to take any kind of data we loaded\n// from an external source (URL, localStorage, whatever),\n// and extract the graph-style from it, or return the default\n// graph-style if we are not able to do that.\n// it is important that this function is able to take any form of data,\n// (be it objects, or arrays, or booleans or whatever),\n// and produce a best-effort graphStyle.\n// note that typescript makes sure we make no mistake in this function.\n// we do not rely on ` as ` or ` any `.\nexport const toGraphStyle = (data: unknown): ExploreGraphStyle => {\n const found = EXPLORE_GRAPH_STYLES.find((v) => v === data);\n return found ?? DEFAULT_GRAPH_STYLE;\n};\n","import { useCallback, useMemo, useState } from 'react';\nimport { useToggle } from 'react-use';\n\nimport {\n DataFrame,\n EventBus,\n AbsoluteTimeRange,\n TimeZone,\n SplitOpen,\n LoadingState,\n ThresholdsConfig,\n TimeRange,\n} from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { GraphThresholdsStyleConfig, PanelChrome, PanelChromeProps } from '@grafana/ui';\nimport { ExploreGraphStyle } from 'app/types/explore';\n\nimport { LimitedDataDisclaimer } from '../LimitedDataDisclaimer';\nimport { storeGraphStyle } from '../state/utils';\n\nimport { ExploreGraph } from './ExploreGraph';\nimport { ExploreGraphLabel } from './ExploreGraphLabel';\nimport { loadGraphStyle } from './utils';\n\nconst MAX_NUMBER_OF_TIME_SERIES = 20;\n\ninterface Props extends Pick<PanelChromeProps, 'statusMessage'> {\n width: number;\n height: number;\n data: DataFrame[];\n annotations?: DataFrame[];\n eventBus: EventBus;\n timeRange: TimeRange;\n timeZone: TimeZone;\n onChangeTime: (absoluteRange: AbsoluteTimeRange) => void;\n splitOpenFn: SplitOpen;\n loadingState: LoadingState;\n thresholdsConfig?: ThresholdsConfig;\n thresholdsStyle?: GraphThresholdsStyleConfig;\n}\n\nexport const GraphContainer = ({\n data,\n eventBus,\n height,\n width,\n timeRange,\n timeZone,\n annotations,\n onChangeTime,\n splitOpenFn,\n thresholdsConfig,\n thresholdsStyle,\n loadingState,\n statusMessage,\n}: Props) => {\n const [showAllSeries, toggleShowAllSeries] = useToggle(false);\n const [graphStyle, setGraphStyle] = useState(loadGraphStyle);\n\n const onGraphStyleChange = useCallback((graphStyle: ExploreGraphStyle) => {\n storeGraphStyle(graphStyle);\n setGraphStyle(graphStyle);\n }, []);\n\n const slicedData = useMemo(() => {\n return showAllSeries ? data : data.slice(0, MAX_NUMBER_OF_TIME_SERIES);\n }, [data, showAllSeries]);\n\n return (\n <PanelChrome\n title={t('graph.container.title', 'Graph')}\n titleItems={[\n !showAllSeries && MAX_NUMBER_OF_TIME_SERIES < data.length && (\n <LimitedDataDisclaimer\n key=\"disclaimer\"\n toggleShowAllSeries={toggleShowAllSeries}\n info={\n <Trans i18nKey={'graph.container.show-only-series'}>\n Showing only {{ MAX_NUMBER_OF_TIME_SERIES }} series\n </Trans>\n }\n buttonLabel={<Trans i18nKey={'graph.container.show-all-series'}>Show all {{ length: data.length }}</Trans>}\n tooltip={t(\n 'graph.container.content',\n 'Rendering too many series in a single panel may impact performance and make data harder to read. Consider refining your queries.'\n )}\n />\n ),\n ].filter(Boolean)}\n width={width}\n height={height}\n loadingState={loadingState}\n statusMessage={statusMessage}\n actions={<ExploreGraphLabel graphStyle={graphStyle} onChangeGraphStyle={onGraphStyleChange} />}\n >\n {(innerWidth, innerHeight) => (\n <ExploreGraph\n graphStyle={graphStyle}\n data={slicedData}\n height={innerHeight}\n width={innerWidth}\n timeRange={timeRange}\n onChangeTime={onChangeTime}\n timeZone={timeZone}\n annotations={annotations}\n splitOpenFn={splitOpenFn}\n loadingState={loadingState}\n thresholdsConfig={thresholdsConfig}\n thresholdsStyle={thresholdsStyle}\n eventBus={eventBus}\n />\n )}\n </PanelChrome>\n );\n};\n","import { Registry, RegistryItem } from '@grafana/data';\nimport {\n ConditionalRenderingDataKind,\n ConditionalRenderingTimeRangeSizeKind,\n ConditionalRenderingVariableKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\nimport { ConditionalRenderingData } from './ConditionalRenderingData';\nimport { ConditionalRenderingTimeRangeSize } from './ConditionalRenderingTimeRangeSize';\nimport { ConditionalRenderingVariable } from './ConditionalRenderingVariable';\nimport { ConditionalRenderingConditions } from './types';\n\nexport type ConditionalRenderingConditionsKindTypes =\n | ConditionalRenderingVariableKind\n | ConditionalRenderingDataKind\n | ConditionalRenderingTimeRangeSizeKind;\n\nexport interface ConditionalRenderingConditionsSerializerRegistryItem extends RegistryItem {\n deserialize(model: ConditionalRenderingConditionsKindTypes): ConditionalRenderingConditions;\n}\n\nexport const conditionalRenderingSerializerRegistry =\n new Registry<ConditionalRenderingConditionsSerializerRegistryItem>(() => {\n return [\n ConditionalRenderingVariable.serializer,\n ConditionalRenderingData.serializer,\n ConditionalRenderingTimeRangeSize.serializer,\n ];\n });\n","import { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ValuePicker } from '@grafana/ui';\n\nimport { ObjectsWithConditionalRendering } from '../object';\n\nimport { GroupConditionConditionType } from './types';\n\ninterface Props {\n objectType: ObjectsWithConditionalRendering;\n hasVariables: boolean;\n onAdd: (option: SelectableValue<GroupConditionConditionType>) => void;\n}\n\nexport const ConditionalRenderingGroupAdd = ({ objectType, hasVariables, onAdd }: Props) => {\n const options = useMemo<Array<SelectableValue<GroupConditionConditionType>>>(() => {\n const allOptions: Array<SelectableValue<GroupConditionConditionType>> = [\n { label: t('dashboard.conditional-rendering.conditions.group.add.data', 'Query result'), value: 'data' },\n {\n label: t('dashboard.conditional-rendering.conditions.group.add.variable', 'Template variable'),\n value: 'variable',\n isDisabled: !hasVariables,\n },\n {\n label: t('dashboard.conditional-rendering.conditions.group.add.time-range-size', 'Time range less than'),\n value: 'timeRangeSize',\n },\n ];\n\n if (objectType !== 'panel') {\n allOptions.shift();\n }\n\n return allOptions;\n }, [objectType, hasVariables]);\n\n return (\n <ValuePicker\n isFullWidth\n size=\"sm\"\n icon=\"plus\"\n variant=\"secondary\"\n label={t('dashboard.conditional-rendering.conditions.group.add.button', 'Add rule')}\n options={options}\n onChange={(option) => onAdd(option)}\n />\n );\n};\n","import { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Field, RadioButtonGroup } from '@grafana/ui';\n\nimport { GroupConditionCondition } from './types';\n\ninterface Props {\n value: GroupConditionCondition;\n onChange: (value: GroupConditionCondition) => void;\n}\n\nexport const ConditionalRenderingGroupCondition = ({ value, onChange }: Props) => {\n const options: Array<SelectableValue<GroupConditionCondition>> = useMemo(\n () => [\n { label: t('dashboard.conditional-rendering.conditions.group.condition.all', 'Match all'), value: 'and' },\n { label: t('dashboard.conditional-rendering.conditions.group.condition.any', 'Match any'), value: 'or' },\n ],\n []\n );\n\n return (\n <Field label={t('dashboard.conditional-rendering.conditions.group.condition.label', 'Match rules')} noMargin>\n <RadioButtonGroup fullWidth options={options} value={value} onChange={onChange} />\n </Field>\n );\n};\n","import { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Field, RadioButtonGroup } from '@grafana/ui';\n\nimport { getTranslatedObjectType, ObjectsWithConditionalRendering } from '../object';\n\nimport { GroupConditionVisibility } from './types';\n\ninterface Props {\n objectType: ObjectsWithConditionalRendering;\n value: GroupConditionVisibility;\n onChange: (value: GroupConditionVisibility) => void;\n}\n\nexport const ConditionalRenderingGroupVisibility = ({ objectType, value, onChange }: Props) => {\n const options: Array<SelectableValue<GroupConditionVisibility>> = useMemo(\n () => [\n { label: t('dashboard.conditional-rendering.conditions.group.visibility.show', 'Show'), value: 'show' },\n { label: t('dashboard.conditional-rendering.conditions.group.visibility.hide', 'Hide'), value: 'hide' },\n ],\n []\n );\n\n return (\n <Field\n label={t('dashboard.conditional-rendering.conditions.group.visibility.label', '{{type}} visibility', {\n type: getTranslatedObjectType(objectType),\n })}\n noMargin\n >\n <RadioButtonGroup fullWidth options={options} value={value} onChange={onChange} />\n </Field>\n );\n};\n","import { lowerCase } from 'lodash';\nimport { useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport { ConditionalRenderingGroupKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { Stack } from '@grafana/ui';\n\nimport { ConditionalRenderingChangedEvent, dashboardEditActions } from '../../edit-pane/shared';\nimport { getDashboardSceneFor } from '../../utils/utils';\nimport { ConditionalRenderingData } from '../conditions/ConditionalRenderingData';\nimport { ConditionalRenderingTimeRangeSize } from '../conditions/ConditionalRenderingTimeRangeSize';\nimport { ConditionalRenderingVariable } from '../conditions/ConditionalRenderingVariable';\nimport { conditionalRenderingSerializerRegistry } from '../conditions/serializers';\nimport { ConditionalRenderingConditions } from '../conditions/types';\nimport { extractObjectType, getTranslatedObjectType } from '../object';\n\nimport { ConditionalRenderingGroupAdd } from './ConditionalRenderingGroupAdd';\nimport { ConditionalRenderingGroupCondition } from './ConditionalRenderingGroupCondition';\nimport { ConditionalRenderingGroupVisibility } from './ConditionalRenderingGroupVisibility';\nimport { GroupConditionCondition, GroupConditionConditionType, GroupConditionVisibility } from './types';\n\nexport interface ConditionalRenderingGroupState extends SceneObjectState {\n conditions: ConditionalRenderingConditions[];\n visibility: GroupConditionVisibility;\n condition: GroupConditionCondition;\n renderHidden: boolean;\n result: boolean;\n}\n\nexport class ConditionalRenderingGroup extends SceneObjectBase<ConditionalRenderingGroupState> {\n public static Component = ConditionalRenderingGroupRenderer;\n\n private _shouldShow: boolean;\n private _shouldMatchAll: boolean;\n\n public constructor(state: ConditionalRenderingGroupState) {\n super(state);\n this._shouldShow = state.visibility === 'show';\n this._shouldMatchAll = state.condition === 'and';\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n this.forEachChild((child) => {\n if (!child.isActive) {\n this._subs.add(child.activate());\n }\n });\n\n this.check();\n }\n\n public check() {\n // Filter out undefined results\n // Because we negate the result if shouldShow is false, we can use `condition.state.result ?? true` directly below\n const validConditions = this.state.conditions.filter((condition) => condition.state.result !== undefined);\n\n let result = true;\n\n if (validConditions.length > 0) {\n result = this._shouldMatchAll\n ? validConditions.every((condition) => condition.state.result)\n : validConditions.some((condition) => condition.state.result);\n\n if (!this._shouldShow) {\n result = !result;\n }\n }\n\n if (result !== this.state.result) {\n this.setState({ ...this.state, result });\n this.publishEvent(new ConditionalRenderingChangedEvent(this), true);\n }\n }\n\n public changeVisibility(visibility: GroupConditionVisibility) {\n if (visibility !== this.state.visibility) {\n this._shouldShow = visibility === 'show';\n this.setState({ visibility });\n this.check();\n }\n }\n\n public changeCondition(condition: GroupConditionCondition) {\n if (condition !== this.state.condition) {\n this._shouldMatchAll = condition === 'and';\n this.setState({ condition });\n this.check();\n }\n }\n\n public createCondition(conditionType: GroupConditionConditionType): ConditionalRenderingConditions {\n switch (conditionType) {\n case 'data':\n return ConditionalRenderingData.createEmpty();\n\n case 'timeRangeSize':\n return ConditionalRenderingTimeRangeSize.createEmpty();\n\n case 'variable':\n return ConditionalRenderingVariable.createEmpty(\n sceneGraph.getVariables(getDashboardSceneFor(this)).state.variables[0].state.name\n );\n }\n }\n\n public addCondition(condition: ConditionalRenderingConditions) {\n const conditions = [...this.state.conditions, condition];\n this.setState({\n conditions,\n renderHidden: conditions.some((condition) => condition instanceof ConditionalRenderingData),\n });\n\n if (this.isActive && !condition.isActive) {\n condition.activate();\n }\n\n this.check();\n }\n\n public removeCondition(condition: ConditionalRenderingConditions) {\n const conditions = this.state.conditions.filter((currentCondition) => currentCondition !== condition);\n\n this.setState({\n conditions,\n renderHidden: conditions.some((condition) => condition instanceof ConditionalRenderingData),\n });\n this.check();\n }\n\n public undoRemoveCondition(condition: ConditionalRenderingConditions, index: number) {\n const conditions = [...this.state.conditions];\n conditions.splice(index, 0, condition);\n this.setState({ conditions });\n this.check();\n }\n\n public removeLastCondition() {\n const conditions = [...this.state.conditions];\n conditions.pop();\n this.setState({ conditions });\n this.check();\n }\n\n public getConditionIndex(condition: ConditionalRenderingConditions): number {\n return this.state.conditions.findIndex((currentCondition) => currentCondition === condition);\n }\n\n public serialize(): ConditionalRenderingGroupKind {\n return {\n kind: 'ConditionalRenderingGroup',\n spec: {\n visibility: this.state.visibility,\n condition: this.state.condition,\n items: this.state.conditions.map((condition) => condition.serialize()),\n },\n };\n }\n\n public static createEmpty(): ConditionalRenderingGroup {\n return new ConditionalRenderingGroup({\n condition: 'and',\n visibility: 'show',\n conditions: [],\n result: true,\n renderHidden: false,\n });\n }\n\n public static deserialize(model: ConditionalRenderingGroupKind): ConditionalRenderingGroup {\n const conditions = model.spec.items.map((item) =>\n conditionalRenderingSerializerRegistry.get(item.kind).deserialize(item)\n );\n\n return new ConditionalRenderingGroup({\n condition: model.spec.condition,\n visibility: model.spec.visibility,\n conditions,\n result: true,\n renderHidden: conditions.some((condition) => condition instanceof ConditionalRenderingData),\n });\n }\n}\n\nfunction ConditionalRenderingGroupRenderer({ model }: SceneComponentProps<ConditionalRenderingGroup>) {\n const { condition, visibility, conditions } = model.useState();\n const { variables } = sceneGraph.getVariables(model).useState();\n const objectType = useMemo(() => extractObjectType(model.parent), [model]);\n\n return (\n <Stack direction=\"column\" gap={2}>\n <ConditionalRenderingGroupVisibility\n objectType={objectType}\n value={visibility}\n onChange={(value) => {\n dashboardEditActions.edit({\n description: t('dashboard.conditional-rendering.conditions.group.visibility.label', '{{type}} visibility', {\n type: getTranslatedObjectType(objectType),\n }),\n source: model,\n perform: () => model.changeVisibility(value),\n undo: () => model.changeVisibility(visibility),\n });\n }}\n />\n {conditions.length > 1 && (\n <ConditionalRenderingGroupCondition\n value={condition}\n onChange={(value) => {\n dashboardEditActions.edit({\n description: t('dashboard.conditional-rendering.conditions.group.condition.label', 'Match rules'),\n source: model,\n perform: () => model.changeCondition(value),\n undo: () => model.changeCondition(condition),\n });\n }}\n />\n )}\n {conditions.map((currentCondition) => currentCondition.renderCmp())}\n <ConditionalRenderingGroupAdd\n objectType={objectType}\n hasVariables={variables.length > 0}\n onAdd={({ value, label }) => {\n const condition = model.createCondition(value!);\n\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.add-conditional-rule', 'Add {{ruleDescription}} rule', {\n ruleDescription: lowerCase(label),\n }),\n source: model,\n perform: () => model.addCondition(condition),\n undo: () => model.removeLastCondition(),\n });\n }}\n />\n </Stack>\n );\n}\n","import { locationUtil } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { LinkButton, ButtonVariant } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { ROUTES as CONNECTIONS_ROUTES } from 'app/features/connections/constants';\nimport { AccessControlAction } from 'app/types/accessControl';\n\ninterface AddNewDataSourceButtonProps {\n onClick?: () => void;\n variant?: ButtonVariant;\n}\n\nexport function AddNewDataSourceButton({ variant, onClick }: AddNewDataSourceButtonProps) {\n const hasCreateRights = contextSrv.hasPermission(AccessControlAction.DataSourcesCreate);\n const newDataSourceURL = locationUtil.assureBaseUrl(CONNECTIONS_ROUTES.DataSourcesNew);\n\n return (\n <LinkButton\n variant={variant || 'primary'}\n href={newDataSourceURL}\n disabled={!hasCreateRights}\n tooltip={\n !hasCreateRights\n ? t(\n 'datasources.add-new-data-source-button.tooltip-no-permission',\n 'You do not have permission to configure new data sources'\n )\n : undefined\n }\n onClick={onClick}\n target=\"_blank\"\n >\n <Trans i18nKey=\"data-source-picker.add-new-data-source\">Configure a new data source</Trans>\n </LinkButton>\n );\n}\n","import { css, cx } from '@emotion/css';\nimport { ReactNode, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { IconButton, Pagination, useStyles2 } from '@grafana/ui';\n\nimport { usePagination } from '../hooks/usePagination';\nimport { getPaginationStyles } from '../styles/pagination';\n\ninterface DynamicTablePagination {\n itemsPerPage: number;\n}\n\nexport interface DynamicTableColumnProps<T = unknown> {\n id: string | number;\n /** Column header to display */\n label: string;\n alignColumn?: 'end' | string;\n\n renderCell: (item: DynamicTableItemProps<T>, index: number) => ReactNode;\n size?: number | string;\n className?: string;\n}\n\nexport interface DynamicTableItemProps<T = unknown> {\n id: string | number;\n data: T;\n renderExpandedContent?: () => ReactNode;\n}\n\nexport interface DynamicTableProps<T = unknown> {\n cols: Array<DynamicTableColumnProps<T>>;\n items: Array<DynamicTableItemProps<T>>;\n dataTestId?: string;\n\n isExpandable?: boolean;\n pagination?: DynamicTablePagination;\n paginationStyles?: string;\n\n // provide these to manually control expanded status\n onCollapse?: (item: DynamicTableItemProps<T>) => void;\n onExpand?: (item: DynamicTableItemProps<T>) => void;\n isExpanded?: (item: DynamicTableItemProps<T>) => boolean;\n renderExpandedContent?: (\n item: DynamicTableItemProps<T>,\n index: number,\n items: Array<DynamicTableItemProps<T>>\n ) => ReactNode;\n testIdGenerator?: (item: DynamicTableItemProps<T>, index: number) => string;\n renderPrefixHeader?: () => ReactNode;\n renderPrefixCell?: (\n item: DynamicTableItemProps<T>,\n index: number,\n items: Array<DynamicTableItemProps<T>>\n ) => ReactNode;\n\n footerRow?: React.ReactNode;\n}\n\nexport const DynamicTable = <T extends object>({\n cols,\n items,\n isExpandable = false,\n onCollapse,\n onExpand,\n isExpanded,\n renderExpandedContent,\n testIdGenerator,\n pagination,\n paginationStyles,\n // render a cell BEFORE expand icon for header/ each row.\n // currently use by RuleList to render guidelines\n renderPrefixCell,\n renderPrefixHeader,\n footerRow,\n dataTestId,\n}: DynamicTableProps<T>) => {\n const defaultPaginationStyles = useStyles2(getPaginationStyles);\n\n if ((onCollapse || onExpand || isExpanded) && !(onCollapse && onExpand && isExpanded)) {\n throw new Error('either all of onCollapse, onExpand, isExpanded must be provided, or none');\n }\n if ((isExpandable || renderExpandedContent) && !(isExpandable && renderExpandedContent)) {\n throw new Error('either both isExpanded and renderExpandedContent must be provided, or neither');\n }\n const styles = useStyles2(getStyles(cols, isExpandable, !!renderPrefixHeader));\n\n const [expandedIds, setExpandedIds] = useState<Array<DynamicTableItemProps['id']>>([]);\n\n const toggleExpanded = (item: DynamicTableItemProps<T>) => {\n if (isExpanded && onCollapse && onExpand) {\n isExpanded(item) ? onCollapse(item) : onExpand(item);\n } else {\n setExpandedIds(\n expandedIds.includes(item.id) ? expandedIds.filter((itemId) => itemId !== item.id) : [...expandedIds, item.id]\n );\n }\n };\n\n const itemsPerPage = pagination?.itemsPerPage ?? items.length;\n const { page, numberOfPages, onPageChange, pageItems } = usePagination(items, 1, itemsPerPage);\n\n return (\n <>\n <div className={styles.container} data-testid={dataTestId ?? 'dynamic-table'}>\n <div className={styles.row} data-testid=\"header\">\n {renderPrefixHeader && renderPrefixHeader()}\n {isExpandable && <div className={styles.cell()} />}\n {cols.map((col) => (\n <div className={styles.cell(col.alignColumn)} key={col.id}>\n {col.label}\n </div>\n ))}\n </div>\n\n {pageItems.map((item, index) => {\n const isItemExpanded = isExpanded ? isExpanded(item) : expandedIds.includes(item.id);\n return (\n <div\n className={styles.row}\n key={`${item.id}-${index}`}\n data-testid={testIdGenerator?.(item, index) ?? 'row'}\n >\n {renderPrefixCell && renderPrefixCell(item, index, items)}\n {isExpandable && (\n <div className={cx(styles.cell(), styles.expandCell)}>\n <IconButton\n tooltip={\n isItemExpanded\n ? t('alerting.dynamic-table.tooltip-collapse-row', 'Collapse row')\n : t('alerting.dynamic-table.tooltip-expand-row', 'Expand row')\n }\n data-testid={selectors.components.AlertRules.toggle}\n name={isItemExpanded ? 'angle-down' : 'angle-right'}\n onClick={() => toggleExpanded(item)}\n />\n </div>\n )}\n {cols.map((col) => (\n <div\n className={cx(styles.cell(col.alignColumn), styles.bodyCell, col.className)}\n data-column={col.label}\n key={`${item.id}-${col.id}`}\n >\n {col.renderCell(item, index)}\n </div>\n ))}\n {isItemExpanded && renderExpandedContent && (\n <div\n className={styles.expandedContentRow}\n data-testid={selectors.components.AlertRules.expandedContent}\n >\n {renderExpandedContent(item, index, items)}\n </div>\n )}\n </div>\n );\n })}\n {footerRow && <div className={cx(styles.row, styles.footerRow)}>{footerRow}</div>}\n </div>\n {pagination && (\n <Pagination\n className={cx(defaultPaginationStyles, paginationStyles)}\n currentPage={page}\n numberOfPages={numberOfPages}\n onNavigate={onPageChange}\n hideWhenSinglePage\n />\n )}\n </>\n );\n};\n\nconst getStyles = <T extends unknown>(\n cols: Array<DynamicTableColumnProps<T>>,\n isExpandable: boolean,\n hasPrefixCell: boolean\n) => {\n const sizes = cols.map((col) => {\n if (!col.size) {\n return 'auto';\n }\n\n if (typeof col.size === 'number') {\n return `${col.size}fr`;\n }\n\n return col.size;\n });\n\n if (isExpandable) {\n sizes.unshift('calc(1em + 16px)');\n }\n\n if (hasPrefixCell) {\n sizes.unshift('0');\n }\n\n return (theme: GrafanaTheme2) => ({\n container: css({\n border: `1px solid ${theme.colors.border.weak}`,\n borderRadius: theme.shape.radius.default,\n color: theme.colors.text.secondary,\n }),\n row: css({\n display: 'grid',\n gridTemplateColumns: sizes.join(' '),\n gridTemplateRows: '1fr auto',\n\n '&:nth-child(2n + 1)': {\n backgroundColor: theme.colors.background.secondary,\n },\n\n '&:nth-child(2n)': {\n backgroundColor: theme.colors.background.primary,\n },\n\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: 'auto 1fr',\n gridTemplateAreas: 'left right',\n padding: `0 ${theme.spacing(0.5)}`,\n\n '&:first-child': {\n display: 'none',\n },\n\n '& > *:first-child': {\n display: hasPrefixCell ? 'none' : undefined,\n },\n },\n }),\n footerRow: css({\n display: 'flex',\n padding: theme.spacing(1),\n }),\n cell: (alignColumn?: string) =>\n css({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n justifyContent: alignColumn || 'initial',\n\n [theme.breakpoints.down('sm')]: {\n padding: `${theme.spacing(1)} 0`,\n gridTemplateColumns: '1fr',\n },\n }),\n bodyCell: css({\n overflow: 'hidden',\n\n [theme.breakpoints.down('sm')]: {\n gridColumnEnd: 'right',\n gridColumnStart: 'right',\n\n '&::before': {\n content: 'attr(data-column)',\n display: 'block',\n color: theme.colors.text.primary,\n },\n },\n }),\n expandCell: css({\n justifyContent: 'center',\n\n [theme.breakpoints.down('sm')]: {\n alignItems: 'start',\n gridArea: 'left',\n },\n }),\n expandedContentRow: css({\n gridColumnEnd: sizes.length + 1,\n gridColumnStart: hasPrefixCell ? 3 : 2,\n gridRow: 2,\n padding: `0 ${theme.spacing(3)} 0 ${theme.spacing(1)}`,\n position: 'relative',\n\n [theme.breakpoints.down('sm')]: {\n gridColumnStart: 2,\n borderTop: `1px solid ${theme.colors.border.strong}`,\n gridRow: 'auto',\n padding: `${theme.spacing(1)} 0 0 0`,\n },\n }),\n });\n};\n","import { Receiver } from 'app/plugins/datasource/alertmanager/types';\n\nimport { OnCallIntegrationDTO } from '../../../../api/onCallApi';\n\n// TODO This value needs to be changed to grafana_alerting when the OnCall team introduces the necessary changes\nexport const GRAFANA_ONCALL_INTEGRATION_TYPE = 'grafana_alerting';\n\nexport enum ReceiverTypes {\n OnCall = 'oncall',\n}\n\nexport const isInOnCallIntegrations = (url: string, integrationsUrls: string[]) => {\n return integrationsUrls.includes(url);\n};\n\nexport const isOnCallReceiver = (receiver: Receiver, integrations: OnCallIntegrationDTO[]) => {\n if (!receiver.grafana_managed_receiver_configs) {\n return false;\n }\n // A receiver it's an onCall contact point if it includes only one integration, and this integration it's an onCall\n // An integration it's an onCall type if it's included in the list of integrations returned by the onCall api endpoint\n const onlyOneIntegration = receiver.grafana_managed_receiver_configs.length === 1;\n const isOnCall = isInOnCallIntegrations(\n receiver.grafana_managed_receiver_configs[0]?.settings?.url ?? '',\n integrations.map((i) => i.integration_url)\n );\n return onlyOneIntegration && isOnCall;\n};\n","import { isEmpty, omit } from 'lodash';\n\nimport { config } from '@grafana/runtime';\nimport { isExpressionQuery } from 'app/features/expressions/guards';\nimport { ExpressionQuery, ExpressionQueryType } from 'app/features/expressions/types';\nimport { isStrictReducer } from 'app/features/expressions/utils/expressionTypes';\nimport { AlertDataQuery, AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { KVObject, RuleFormValues } from '../types/rule-form';\nimport { defaultAnnotations } from '../utils/constants';\nimport { isSupportedExternalRulesSourceType } from '../utils/datasource';\nimport { getInstantFromDataQuery } from '../utils/rule-form';\n\nexport function setQueryEditorSettings(values: RuleFormValues): RuleFormValues {\n const isQuerySwitchModeEnabled = config.featureToggles.alertingQueryAndExpressionsStepMode ?? false;\n\n if (!isQuerySwitchModeEnabled) {\n return {\n ...values,\n editorSettings: {\n simplifiedQueryEditor: false,\n simplifiedNotificationEditor: true, // actually it doesn't matter in this case\n },\n };\n }\n\n // data queries only\n const dataQueries = values.queries.filter((query) => !isExpressionQuery(query.model));\n\n // expression queries only\n const expressionQueries = values.queries.filter((query) => isExpressionQueryInAlert(query));\n\n const queryParamsAreTransformable = areQueriesTransformableToSimpleCondition(dataQueries, expressionQueries);\n return {\n ...values,\n editorSettings: {\n simplifiedQueryEditor: queryParamsAreTransformable,\n simplifiedNotificationEditor: true,\n },\n };\n}\n\nexport function setInstantOrRange(values: RuleFormValues): RuleFormValues {\n return {\n ...values,\n queries: values.queries?.map((query) => {\n if (isExpressionQuery(query.model)) {\n return query;\n }\n // data query\n const defaultToInstant = query.model.datasource?.type\n ? isSupportedExternalRulesSourceType(query.model.datasource.type)\n : false;\n const isInstant =\n 'instant' in query.model && query.model.instant !== undefined ? query.model.instant : defaultToInstant;\n return {\n ...query,\n model: {\n ...query.model,\n instant: isInstant,\n range: !isInstant, // we cannot have both instant and range queries in alerting\n },\n };\n }),\n };\n}\n\n/**\n * A alert rule is \"transformable\" to a simple condition editor if\n * 1. we have a single data query\n * 2. we have _either_\n * 2.1 a reduce expression (pointing to the data query) _and_ a threshold expression pointing to the reducer\n * 2.2 a threshold expression pointing to a (instant) data query\n * ⚠️ do not assert on refIds or indexes of the queries\n */\nexport function areQueriesTransformableToSimpleCondition(\n dataQueries: Array<AlertQuery<AlertDataQuery>>,\n expressionQueries: Array<AlertQuery<ExpressionQuery>>\n) {\n // 1. check if we only have a _single_ data query\n if (dataQueries.length !== 1) {\n return false;\n }\n\n // short-circuit when we have more than 2 expressions, we don't know what to do with that\n if (expressionQueries.length > 2) {\n return false;\n }\n\n const dataQuery = dataQueries.at(0);\n\n // find the reduce or threshold expressions\n const reduceExpression = expressionQueries.find((query) => query.model.type === ExpressionQueryType.reduce);\n const thresholdExpression = expressionQueries.find((query) => query.model.type === ExpressionQueryType.threshold);\n\n // reducer should be set to \"strict\" mode\n const reducerIsStrict = reduceExpression ? isStrictReducer(reduceExpression.model) : false;\n // threshold expression shouldn't have an unload evaluator (custom recovery threshold)\n const thresholdExpressionIsClean =\n thresholdExpression?.model.conditions?.every((condition) => {\n return isEmpty(condition.unloadEvaluator);\n }) ?? true;\n\n const validReducerExpression = reduceExpression && reducerIsStrict;\n const validThresholdExpression = thresholdExpression && thresholdExpressionIsClean;\n\n const thresholdPointingToReducer = thresholdExpression?.model.expression === reduceExpression?.refId;\n const reducerPointingToDataQuery = reduceExpression?.model.expression === dataQuery?.refId;\n\n // 2.1 check for a reduce + threshold expression and their targets\n if (validReducerExpression && reducerPointingToDataQuery && validThresholdExpression && thresholdPointingToReducer) {\n return true;\n }\n\n // 2.2 check for a single threshold expression pointing to an \"instant\" data query\n const isInstantDataQuery = dataQuery ? getInstantFromDataQuery(dataQuery) : false;\n const hasSingleThresholdExpression = expressionQueries.length === 1 && thresholdExpression;\n const thresholdPointingToDataQuery = thresholdExpression?.model.expression === dataQuery?.refId;\n\n if (isInstantDataQuery && hasSingleThresholdExpression && validThresholdExpression && thresholdPointingToDataQuery) {\n return true;\n }\n\n return false;\n}\n\nexport function isExpressionQueryInAlert(\n query: AlertQuery<AlertDataQuery | ExpressionQuery>\n): query is AlertQuery<ExpressionQuery> {\n return isExpressionQuery(query.model);\n}\n\nexport function isAlertQueryOfAlertData(\n query: AlertQuery<AlertDataQuery | ExpressionQuery>\n): query is AlertQuery<AlertDataQuery> {\n return !isExpressionQuery(query.model);\n}\n\n// the backend will always execute \"hidden\" queries, so we have no choice but to remove the property in the front-end\n// to avoid confusion. The query editor shows them as \"disabled\" and that's a different semantic meaning.\n// furthermore the \"AlertingQueryRunner\" calls `filterQuery` on each data source and those will skip running queries that are \"hidden\".\"\n// It seems like we have no choice but to act like \"hidden\" queries don't exist in alerting.\nexport const revealHiddenQueries = (ruleDefinition: RuleFormValues): RuleFormValues => {\n return {\n ...ruleDefinition,\n queries: ruleDefinition.queries?.map((query) => omit(query, 'model.hide')),\n };\n};\n\nexport function normalizeDefaultAnnotations(annotations: KVObject[]) {\n const orderedAnnotations = [...annotations];\n const defaultAnnotationKeys = defaultAnnotations.map((annotation) => annotation.key);\n\n defaultAnnotationKeys.forEach((defaultAnnotationKey, index) => {\n const fieldIndex = orderedAnnotations.findIndex((field) => field.key === defaultAnnotationKey);\n\n if (fieldIndex === -1) {\n //add the default annotation if abstent\n const emptyValue = { key: defaultAnnotationKey, value: '' };\n orderedAnnotations.splice(index, 0, emptyValue);\n } else if (fieldIndex !== index) {\n //move it to the correct position if present\n orderedAnnotations.splice(index, 0, orderedAnnotations.splice(fieldIndex, 1)[0]);\n }\n });\n return orderedAnnotations;\n}\n","import { CurrentUser } from '@grafana/data';\n\nlet singletonInstance: CurrentUser | null = null;\n\n/**\n * Used during startup by Grafana to set the current user so it is available\n * for rbac checks.\n *\n * @internal\n */\nexport function setCurrentUser(instance: CurrentUser) {\n if (singletonInstance) {\n throw new Error('User should only be set once, when Grafana is starting.');\n }\n singletonInstance = instance;\n}\n\n/**\n * Used to retrieve the current user.\n *\n * @internal\n *\n */\nexport function getCurrentUser(): CurrentUser {\n if (!singletonInstance) {\n throw new Error('User can only be used after Grafana instance has started.');\n }\n return singletonInstance;\n}\n","import { lastValueFrom } from 'rxjs';\n\nimport { DataFrame, DataLinkConfigOrigin } from '@grafana/data';\nimport {\n config,\n CorrelationData,\n CorrelationsData,\n createMonitoringLogger,\n getBackendSrv,\n getDataSourceSrv,\n} from '@grafana/runtime';\nimport { ExploreItemState } from 'app/types/explore';\n\nimport { formatValueName } from '../explore/PrometheusListView/ItemLabels';\nimport { parseLogsFrame } from '../logs/logsFrame';\n\nimport { CreateCorrelationParams, CreateCorrelationResponse } from './types';\nimport { CorrelationsResponse, getData, toEnrichedCorrelationsData } from './useCorrelations';\n\ntype DataFrameRefIdToDataSourceUid = Record<string, string>;\n\n/**\n * Creates data links from provided CorrelationData object\n *\n * @param dataFrames list of data frames to be processed\n * @param correlations list of of possible correlations that can be applied\n * @param dataFrameRefIdToDataSourceUid a map that for provided refId references corresponding data source ui\n */\nexport const attachCorrelationsToDataFrames = (\n dataFrames: DataFrame[],\n correlations: CorrelationData[],\n dataFrameRefIdToDataSourceUid: DataFrameRefIdToDataSourceUid\n): DataFrame[] => {\n dataFrames.forEach((dataFrame) => {\n const frameRefId = dataFrame.refId;\n if (!frameRefId) {\n return;\n }\n let dataSourceUid = dataFrameRefIdToDataSourceUid[frameRefId];\n\n // rawPrometheus queries append a value to refId to a separate dataframe for the table view\n if (dataSourceUid === undefined && dataFrame.meta?.preferredVisualisationType === 'rawPrometheus') {\n const formattedRefID = formatValueName(frameRefId);\n dataSourceUid = dataFrameRefIdToDataSourceUid[formattedRefID];\n }\n\n const sourceCorrelations = correlations.filter((correlation) => correlation.source.uid === dataSourceUid);\n decorateDataFrameWithInternalDataLinks(dataFrame, fixLokiDataplaneFields(sourceCorrelations, dataFrame));\n });\n\n return dataFrames;\n};\n\nconst decorateDataFrameWithInternalDataLinks = (dataFrame: DataFrame, correlations: CorrelationData[]) => {\n dataFrame.fields.forEach((field) => {\n field.config.links = field.config.links?.filter((link) => link.origin !== DataLinkConfigOrigin.Correlations) || [];\n correlations.map((correlation) => {\n if (correlation.config.field === field.name) {\n if (correlation.type === 'query') {\n const targetQuery = correlation.config.target || {};\n field.config.links!.push({\n internal: {\n query: { ...targetQuery, datasource: { uid: correlation.target.uid } },\n datasourceUid: correlation.target.uid,\n datasourceName: correlation.target.name,\n },\n url: '',\n title: correlation.label || correlation.target.name,\n origin: DataLinkConfigOrigin.Correlations,\n meta: {\n transformations: correlation.config.transformations,\n },\n });\n } else if (correlation.type === 'external') {\n const externalTarget = correlation.config.target;\n field.config.links!.push({\n url: externalTarget.url,\n title: correlation.label || 'External URL',\n origin: DataLinkConfigOrigin.Correlations,\n meta: { transformations: correlation.config?.transformations },\n });\n }\n }\n });\n });\n};\n\n/*\nIf a correlation was made based on the log line field prior to the loki data plane, they would use the field \"Line\"\n\nChange it to use whatever the body field name is post-loki data plane\n*/\nconst fixLokiDataplaneFields = (correlations: CorrelationData[], dataFrame: DataFrame) => {\n return correlations.map((correlation) => {\n if (\n correlation.source.meta?.id === 'loki' &&\n config.featureToggles.lokiLogsDataplane === true &&\n correlation.config.field === 'Line'\n ) {\n const logsFrame = parseLogsFrame(dataFrame);\n if (logsFrame != null && logsFrame.bodyField.name !== undefined) {\n correlation.config.field = logsFrame?.bodyField.name;\n }\n }\n return correlation;\n });\n};\n\nexport const getCorrelationsBySourceUIDs = async (sourceUIDs: string[]): Promise<CorrelationsData> => {\n return lastValueFrom(\n getBackendSrv().fetch<CorrelationsResponse>({\n url: `/api/datasources/correlations`,\n method: 'GET',\n showErrorAlert: false,\n params: {\n sourceUID: sourceUIDs,\n },\n })\n )\n .then(getData)\n .then(toEnrichedCorrelationsData);\n};\n\nexport const createCorrelation = async (\n sourceUID: string,\n correlation: CreateCorrelationParams\n): Promise<CreateCorrelationResponse> => {\n return getBackendSrv().post<CreateCorrelationResponse>(`/api/datasources/uid/${sourceUID}/correlations`, correlation);\n};\n\nconst getDSInstanceForPane = async (pane: ExploreItemState) => {\n if (pane.datasourceInstance?.meta.mixed) {\n return await getDataSourceSrv().get(pane.queries[0].datasource);\n } else {\n return pane.datasourceInstance;\n }\n};\n\nexport const generateDefaultLabel = async (sourcePane: ExploreItemState, targetPane: ExploreItemState) => {\n return Promise.all([getDSInstanceForPane(sourcePane), getDSInstanceForPane(targetPane)]).then((dsInstances) => {\n return dsInstances[0]?.name !== undefined && dsInstances[1]?.name !== undefined\n ? `${dsInstances[0]?.name} to ${dsInstances[1]?.name}`\n : '';\n });\n};\n\nexport const correlationsLogger = createMonitoringLogger('features.correlations');\n","import 'systemjs/dist/system';\n// Add ability to load plugins bundled as AMD format\nimport 'systemjs/dist/extras/amd';\n// Add named register for on demand dependency loading\nimport 'systemjs/dist/extras/named-register.js';\n\nexport const SystemJS = window.System;\n","import { DataQuery } from '@grafana/data';\nimport { Dashboard, DataSourceRef } from '@grafana/schema';\nimport { ObjectMeta } from 'app/features/apiserver/types';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { ProvisioningPreview } from 'app/features/provisioning/types';\n\nexport interface HomeDashboardRedirectDTO {\n redirectUri: string;\n}\n\nexport interface DashboardDTO {\n dashboard: DashboardDataDTO;\n meta: DashboardMeta;\n}\n\nexport interface ImportDashboardResponseDTO {\n uid: string;\n pluginId: string;\n title: string;\n imported: boolean;\n importedRevision?: number;\n importedUri: string;\n importedUrl: string;\n slug: string;\n dashboardId: number;\n folderId: number;\n folderUid: string;\n description: string;\n path: string;\n removed: boolean;\n}\n\nexport interface SaveDashboardResponseDTO {\n id: number;\n slug: string;\n status: string;\n uid: string;\n url: string;\n version: number;\n}\n\nexport interface DashboardMeta {\n slug?: string;\n uid?: string;\n canSave?: boolean;\n canEdit?: boolean;\n canDelete?: boolean;\n canShare?: boolean;\n canStar?: boolean;\n canAdmin?: boolean;\n url?: string;\n folderUid?: string;\n canMakeEditable?: boolean;\n provisioned?: boolean;\n provisionedExternalId?: string;\n isStarred?: boolean;\n showSettings?: boolean;\n expires?: string;\n isFolder?: boolean;\n isSnapshot?: boolean;\n folderTitle?: string;\n folderUrl?: string;\n folderId?: number;\n created?: string;\n createdBy?: string;\n updated?: string;\n updatedBy?: string;\n fromScript?: boolean;\n fromFile?: boolean;\n hasUnsavedFolderChange?: boolean;\n annotationsPermissions?: AnnotationsPermissions;\n publicDashboardEnabled?: boolean;\n isEmbedded?: boolean;\n isNew?: boolean;\n version?: number;\n\n // When loaded from kubernetes, we stick the raw metadata here\n // yes weird, but this means all the editor structures can exist unchanged\n // until we use the resource as the main container\n k8s?: Partial<ObjectMeta>;\n\n // If the dashboard was loaded from a remote repository\n provisioning?: ProvisioningPreview;\n\n // This is a property added specifically for edge cases where dashboards should be reloaded on scopes, time range or variables changes\n // This property is not persisted in the DB but its existence is controlled by the API\n reloadOnParamsChange?: boolean;\n}\n\nexport interface AnnotationActions {\n canAdd: boolean;\n canEdit: boolean;\n canDelete: boolean;\n}\n\nexport interface AnnotationsPermissions {\n dashboard: AnnotationActions;\n organization: AnnotationActions;\n}\n\n// FIXME: This should not override Dashboard types\nexport interface DashboardDataDTO extends Dashboard {\n title: string;\n uid: string;\n panels?: any[];\n}\n\nexport enum DashboardRoutes {\n Home = 'home-dashboard',\n New = 'new-dashboard',\n Template = 'template-dashboard',\n Normal = 'normal-dashboard',\n Provisioning = 'provisioning-dashboard',\n Scripted = 'scripted-dashboard',\n Public = 'public-dashboard',\n Embedded = 'embedded-dashboard',\n Report = 'report-dashboard',\n}\n\nexport enum DashboardInitPhase {\n NotStarted = 'Not started',\n Fetching = 'Fetching',\n Services = 'Services',\n Failed = 'Failed',\n Completed = 'Completed',\n}\n\nexport interface DashboardInitError {\n message: string;\n error: unknown;\n}\n\nexport enum KioskMode {\n Full = 'full',\n}\n\nexport type GetMutableDashboardModelFn = () => DashboardModel | null;\n\nexport interface QueriesToUpdateOnDashboardLoad {\n panelId: number;\n queries: DataQuery[];\n}\n\nexport interface DashboardState {\n getModel: GetMutableDashboardModelFn;\n initPhase: DashboardInitPhase;\n initialDatasource?: DataSourceRef['uid'];\n initError: DashboardInitError | null;\n}\n\nexport const DASHBOARD_FROM_LS_KEY = 'DASHBOARD_FROM_LS_KEY';\n\nexport function isRedirectResponse(dto: DashboardDTO | HomeDashboardRedirectDTO): dto is HomeDashboardRedirectDTO {\n return 'redirectUri' in dto;\n}\n","import { css } from '@emotion/css';\nimport { CSSProperties } from 'react';\nimport * as React from 'react';\n\nimport { ActionModel, GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { linkModelToContextMenuItems } from '../../utils/dataLinks';\nimport { WithContextMenu } from '../ContextMenu/WithContextMenu';\nimport { MenuGroup, MenuItemsGroup } from '../Menu/MenuGroup';\nimport { MenuItem } from '../Menu/MenuItem';\n\nexport interface DataLinksContextMenuProps {\n children: (props: DataLinksContextMenuApi) => JSX.Element;\n links: () => LinkModel[];\n style?: CSSProperties;\n /**\n * @deprecated Will be removed in a future version\n */\n actions?: ActionModel[];\n}\n\nexport interface DataLinksContextMenuApi {\n openMenu?: React.MouseEventHandler<HTMLOrSVGElement>;\n targetClassName?: string;\n}\n\nexport const DataLinksContextMenu = ({ children, links, style }: DataLinksContextMenuProps) => {\n const styles = useStyles2(getStyles);\n\n const itemsGroup: MenuItemsGroup[] = [\n { items: linkModelToContextMenuItems(links), label: Boolean(links().length) ? 'Data links' : '' },\n ];\n\n const linksCounter = itemsGroup[0].items.length;\n const renderMenuGroupItems = () => {\n return itemsGroup.map((group, groupIdx) => (\n <MenuGroup key={`${group.label}${groupIdx}`} label={group.label}>\n {(group.items || []).map((item, itemIdx) => (\n <MenuItem\n key={`${group.label}-${groupIdx}-${itemIdx}}`}\n url={item.url}\n label={item.label}\n target={item.target}\n icon={item.icon}\n active={item.active}\n onClick={item.onClick}\n className={styles.itemWrapper}\n />\n ))}\n </MenuGroup>\n ));\n };\n\n // Use this class name (exposed via render prop) to add context menu indicator to the click target of the visualization\n const targetClassName = css({\n cursor: 'context-menu',\n });\n\n if (linksCounter > 1) {\n return (\n <WithContextMenu renderMenuItems={renderMenuGroupItems}>\n {({ openMenu }) => {\n return children({ openMenu, targetClassName });\n }}\n </WithContextMenu>\n );\n } else {\n const linkModel = links()[0];\n return (\n <a\n href={linkModel.href}\n onClick={linkModel.onClick}\n target={linkModel.target}\n title={linkModel.title}\n style={{ ...style, overflow: 'hidden', display: 'flex' }}\n data-testid={selectors.components.DataLinksContextMenu.singleLink}\n >\n {children({})}\n </a>\n );\n }\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n itemWrapper: css({\n fontSize: 12,\n }),\n});\n","import { Spec as DashboardV2Spec, TabsLayoutTabKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\nimport { TabItem } from '../../scene/layout-tabs/TabItem';\nimport { TabsLayoutManager } from '../../scene/layout-tabs/TabsLayoutManager';\n\nimport { layoutDeserializerRegistry } from './layoutSerializerRegistry';\nimport { getConditionalRendering } from './utils';\n\nexport function serializeTabsLayout(layoutManager: TabsLayoutManager): DashboardV2Spec['layout'] {\n return {\n kind: 'TabsLayout',\n spec: {\n tabs: layoutManager.state.tabs.filter((tab) => !tab.state.repeatSourceKey).map(serializeTab),\n },\n };\n}\n\nexport function serializeTab(tab: TabItem): TabsLayoutTabKind {\n const layout = tab.state.layout.serialize();\n const tabKind: TabsLayoutTabKind = {\n kind: 'TabsLayoutTab',\n spec: {\n title: tab.state.title,\n layout: layout,\n ...(tab.state.repeatByVariable && {\n repeat: {\n mode: 'variable',\n value: tab.state.repeatByVariable,\n },\n }),\n },\n };\n\n const conditionalRenderingRootGroup = tab.state.conditionalRendering?.serialize();\n // Only serialize the conditional rendering if it has items\n if (conditionalRenderingRootGroup?.spec.items.length) {\n tabKind.spec.conditionalRendering = conditionalRenderingRootGroup;\n }\n\n return tabKind;\n}\n\nexport function deserializeTabsLayout(\n layout: DashboardV2Spec['layout'],\n elements: DashboardV2Spec['elements'],\n preload: boolean,\n panelIdGenerator?: () => number\n): TabsLayoutManager {\n if (layout.kind !== 'TabsLayout') {\n throw new Error('Invalid layout kind');\n }\n\n const tabs = layout.spec.tabs.map((tab) => {\n return deserializeTab(tab, elements, preload, panelIdGenerator);\n });\n\n return new TabsLayoutManager({ tabs });\n}\n\nexport function deserializeTab(\n tab: TabsLayoutTabKind,\n elements: DashboardV2Spec['elements'],\n preload: boolean,\n panelIdGenerator?: () => number\n): TabItem {\n const layout = tab.spec.layout;\n\n return new TabItem({\n title: tab.spec.title,\n layout: layoutDeserializerRegistry.get(layout.kind).deserialize(layout, elements, preload, panelIdGenerator),\n repeatByVariable: tab.spec.repeat?.value,\n conditionalRendering: getConditionalRendering(tab),\n });\n}\n","import { css, cx } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Button, Dropdown, Menu, useStyles2 } from '@grafana/ui';\n\nimport { dashboardSceneGraph } from '../../utils/dashboardSceneGraph';\nimport { DashboardInteractions } from '../../utils/interactions';\nimport { getDefaultVizPanel } from '../../utils/utils';\nimport { DashboardScene } from '../DashboardScene';\nimport { TabsLayoutManager } from '../layout-tabs/TabsLayoutManager';\nimport { DashboardLayoutManager, isDashboardLayoutManager } from '../types/DashboardLayoutManager';\n\nimport { addNewRowTo, addNewTabTo } from './addNew';\nimport { useClipboardState } from './useClipboardState';\nimport { ungroupLayout } from './utils';\n\nexport interface Props {\n layoutManager: DashboardLayoutManager;\n}\n\nexport function CanvasGridAddActions({ layoutManager }: Props) {\n const styles = useStyles2(getStyles);\n const { hasCopiedPanel } = useClipboardState();\n\n const { disableGrouping, disableTabs } = useMemo(() => {\n if (config.featureToggles.unlimitedLayoutsNesting) {\n return { disableGrouping: false, disableTabs: false };\n }\n\n let parent = layoutManager.parent;\n const layouts = [];\n\n while (parent) {\n if (isDashboardLayoutManager(parent)) {\n layouts.push(parent.descriptor.id);\n }\n\n if (layouts.length === 2) {\n parent = undefined;\n break;\n }\n\n parent = parent.parent;\n }\n\n if (layouts.length === 2) {\n return { disableGrouping: true, disableTabs: true };\n }\n\n if (layouts.length === 1 && layouts[0] === TabsLayoutManager.descriptor.id) {\n return { disableGrouping: false, disableTabs: true };\n }\n\n return { disableGrouping: false, disableTabs: false };\n }, [layoutManager]);\n\n return (\n <div className={cx(styles.addAction, 'dashboard-canvas-add-button')}>\n <Button\n variant=\"primary\"\n fill=\"text\"\n icon=\"plus\"\n data-testid={selectors.components.CanvasGridAddActions.addPanel}\n onClick={() => {\n layoutManager.addPanel(getDefaultVizPanel());\n DashboardInteractions.trackAddPanelClick();\n }}\n >\n <Trans i18nKey=\"dashboard.canvas-actions.add-panel\">Add panel</Trans>\n </Button>\n <Dropdown\n overlay={\n <Menu>\n <Menu.Item\n icon=\"list-ul\"\n label={t('dashboard.canvas-actions.group-into-row', 'Group into row')}\n testId={selectors.components.CanvasGridAddActions.addRow}\n onClick={() => {\n addNewRowTo(layoutManager);\n DashboardInteractions.trackGroupRowClick();\n }}\n ></Menu.Item>\n <Menu.Item\n icon=\"layers\"\n testId={selectors.components.CanvasGridAddActions.addTab}\n label={t('dashboard.canvas-actions.group-into-tab', 'Group into tab')}\n disabled={disableTabs}\n description={\n disableTabs\n ? t('dashboard.canvas-actions.disabled-nested-tabs', 'Tabs cannot be nested inside other tabs')\n : undefined\n }\n onClick={() => {\n addNewTabTo(layoutManager);\n DashboardInteractions.trackGroupTabClick();\n }}\n ></Menu.Item>\n </Menu>\n }\n >\n <Button\n variant=\"primary\"\n fill=\"text\"\n icon=\"layers\"\n data-testid={selectors.components.CanvasGridAddActions.groupPanels}\n disabled={disableGrouping}\n tooltip={\n disableGrouping\n ? t('dashboard.canvas-actions.disabled-nested-grouping', 'Grouping is limited to 2 levels')\n : undefined\n }\n >\n <Trans i18nKey=\"dashboard.canvas-actions.group-panels\">Group panels</Trans>\n </Button>\n </Dropdown>\n {renderUngroupAction(layoutManager)}\n {hasCopiedPanel && layoutManager.pastePanel && (\n <Button\n data-testid={selectors.components.CanvasGridAddActions.pastePanel}\n variant=\"primary\"\n fill=\"text\"\n icon=\"clipboard-alt\"\n onClick={() => {\n layoutManager.pastePanel?.();\n DashboardInteractions.trackPastePanelClick();\n }}\n >\n <Trans i18nKey=\"dashboard.canvas-actions.paste-panel\">Paste panel</Trans>\n </Button>\n )}\n </div>\n );\n}\n\nfunction renderUngroupAction(layoutManager: DashboardLayoutManager) {\n const parent = layoutManager.parent;\n\n if (parent instanceof DashboardScene) {\n return null;\n }\n\n const parentLayout = dashboardSceneGraph.getLayoutManagerFor(layoutManager.parent!);\n\n const onUngroup = () => {\n DashboardInteractions.trackUngroupClick();\n ungroupLayout(parentLayout, layoutManager);\n };\n\n if (parentLayout instanceof TabsLayoutManager) {\n return <UngroupButtonTabs parentLayout={parentLayout} onClick={onUngroup} />;\n }\n\n return null;\n}\n\ninterface UngroupButtonProps<T> {\n parentLayout: T;\n onClick: () => void;\n}\n\nfunction UngroupButtonTabs({ parentLayout, onClick }: UngroupButtonProps<TabsLayoutManager>) {\n const { tabs } = parentLayout.useState();\n\n if (tabs.length > 1) {\n return null;\n }\n\n return (\n <Button\n variant=\"primary\"\n fill=\"text\"\n icon=\"layers-slash\"\n onClick={onClick}\n data-testid={selectors.components.CanvasGridAddActions.ungroup}\n >\n <Trans i18nKey=\"dashboard.canvas-actions.un-group-panels\">Ungroup</Trans>\n </Button>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n addAction: css({\n position: 'absolute',\n padding: theme.spacing(1, 0),\n height: theme.spacing(5),\n bottom: 0,\n left: 0,\n right: 0,\n opacity: 0,\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create('opacity'),\n },\n }),\n});\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformContext, FieldMatcher, SynchronousDataTransformerInfo } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\nimport { joinDataFrames } from './joinDataFrames';\n\nexport enum JoinMode {\n outer = 'outer', // best for time series, non duplicated join on values\n inner = 'inner',\n outerTabular = 'outerTabular', // best for tabular data where the join on value can be duplicated\n}\n\nexport interface JoinByFieldOptions {\n byField?: string; // empty will pick the field automatically\n mode?: JoinMode;\n}\n\nexport const joinByFieldTransformer: SynchronousDataTransformerInfo<JoinByFieldOptions> = {\n id: DataTransformerID.joinByField,\n aliasIds: [DataTransformerID.seriesToColumns],\n name: 'Join by field',\n description:\n 'Combine rows from two or more tables, based on a related field between them. This can be used to outer join multiple time series on the _time_ field to show many time series in one table.',\n defaultOptions: {\n byField: undefined, // DEFAULT_KEY_FIELD,\n mode: JoinMode.outer,\n },\n\n operator: (options, ctx) => (source) =>\n source.pipe(map((data) => joinByFieldTransformer.transformer(options, ctx)(data))),\n\n transformer: (options: JoinByFieldOptions, ctx: DataTransformContext) => {\n let joinBy: FieldMatcher | undefined = undefined;\n return (data: DataFrame[]) => {\n if (data.length > 1) {\n if (options.byField && !joinBy) {\n joinBy = fieldMatchers.get(FieldMatcherID.byName).get(options.byField);\n }\n const joined = joinDataFrames({ frames: data, joinBy, mode: options.mode });\n if (joined) {\n joined.refId = `${DataTransformerID.joinByField}-${data.map((frame) => frame.refId).join('-')}`;\n return [joined];\n }\n }\n return data;\n };\n },\n};\n","import { Field, DataFrame, FieldType } from '../../types/dataFrame';\nimport { FieldMatcherInfo, MatcherConfig, FrameMatcherInfo } from '../../types/transformations';\nimport { getFieldMatcher, fieldMatchers, getFrameMatchers, frameMatchers } from '../matchers';\n\nimport { MatcherID } from './ids';\n\nconst anyFieldMatcher: FieldMatcherInfo<MatcherConfig[]> = {\n id: MatcherID.anyMatch,\n name: 'Any',\n description: 'Any child matches (OR)',\n excludeFromPicker: true,\n defaultOptions: [], // empty array\n\n get: (options: MatcherConfig[]) => {\n const children = options.map((option) => {\n return getFieldMatcher(option);\n });\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n for (const child of children) {\n if (child(field, frame, allFrames)) {\n return true;\n }\n }\n return false;\n };\n },\n\n getOptionsDisplayText: (options: MatcherConfig[]) => {\n let text = '';\n for (const sub of options) {\n if (text.length > 0) {\n text += ' OR ';\n }\n const matcher = fieldMatchers.get(sub.id);\n text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n }\n return text;\n },\n};\n\nconst anyFrameMatcher: FrameMatcherInfo<MatcherConfig[]> = {\n id: MatcherID.anyMatch,\n name: 'Any',\n description: 'Any child matches (OR)',\n excludeFromPicker: true,\n defaultOptions: [], // empty array\n\n get: (options: MatcherConfig[]) => {\n const children = options.map((option) => {\n return getFrameMatchers(option);\n });\n return (frame: DataFrame) => {\n for (const child of children) {\n if (child(frame)) {\n return true;\n }\n }\n return false;\n };\n },\n\n getOptionsDisplayText: (options: MatcherConfig[]) => {\n let text = '';\n for (const sub of options) {\n if (text.length > 0) {\n text += ' OR ';\n }\n const matcher = frameMatchers.get(sub.id);\n text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n }\n return text;\n },\n};\n\nconst allFieldsMatcher: FieldMatcherInfo<MatcherConfig[]> = {\n id: MatcherID.allMatch,\n name: 'All',\n description: 'Everything matches (AND)',\n excludeFromPicker: true,\n defaultOptions: [], // empty array\n\n get: (options: MatcherConfig[]) => {\n const children = options.map((option) => {\n return getFieldMatcher(option);\n });\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n for (const child of children) {\n if (!child(field, frame, allFrames)) {\n return false;\n }\n }\n return true;\n };\n },\n\n getOptionsDisplayText: (options: MatcherConfig[]) => {\n let text = '';\n for (const sub of options) {\n if (text.length > 0) {\n text += ' AND ';\n }\n const matcher = fieldMatchers.get(sub.id); // Ugho what about frame\n text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n }\n return text;\n },\n};\n\nconst allFramesMatcher: FrameMatcherInfo<MatcherConfig[]> = {\n id: MatcherID.allMatch,\n name: 'All',\n description: 'Everything matches (AND)',\n excludeFromPicker: true,\n defaultOptions: [], // empty array\n\n get: (options: MatcherConfig[]) => {\n const children = options.map((option) => {\n return getFrameMatchers(option);\n });\n return (frame: DataFrame) => {\n for (const child of children) {\n if (!child(frame)) {\n return false;\n }\n }\n return true;\n };\n },\n\n getOptionsDisplayText: (options: MatcherConfig[]) => {\n let text = '';\n for (const sub of options) {\n if (text.length > 0) {\n text += ' AND ';\n }\n const matcher = frameMatchers.get(sub.id);\n text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n }\n return text;\n },\n};\n\nconst notFieldMatcher: FieldMatcherInfo<MatcherConfig> = {\n id: MatcherID.invertMatch,\n name: 'NOT',\n description: 'Inverts other matchers',\n excludeFromPicker: true,\n\n get: (option: MatcherConfig) => {\n const check = getFieldMatcher(option);\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return !check(field, frame, allFrames);\n };\n },\n\n getOptionsDisplayText: (options: MatcherConfig) => {\n const matcher = fieldMatchers.get(options.id);\n const text = matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(options.options) : matcher.name;\n return 'NOT ' + text;\n },\n};\n\nconst notFrameMatcher: FrameMatcherInfo<MatcherConfig> = {\n id: MatcherID.invertMatch,\n name: 'NOT',\n description: 'Inverts other matchers',\n excludeFromPicker: true,\n\n get: (option: MatcherConfig) => {\n const check = getFrameMatchers(option);\n return (frame: DataFrame) => {\n return !check(frame);\n };\n },\n\n getOptionsDisplayText: (options: MatcherConfig) => {\n const matcher = frameMatchers.get(options.id);\n const text = matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(options.options) : matcher.name;\n return 'NOT ' + text;\n },\n};\n\nexport const alwaysFieldMatcher = (field: Field) => {\n return true;\n};\n\nconst alwaysFrameMatcher = (frame: DataFrame) => {\n return true;\n};\n\nconst neverFieldMatcher = (field: Field) => {\n return false;\n};\n\nexport const notTimeFieldMatcher = (field: Field) => {\n return field.type !== FieldType.time;\n};\n\nconst neverFrameMatcher = (frame: DataFrame) => {\n return false;\n};\n\nconst alwaysFieldMatcherInfo: FieldMatcherInfo = {\n id: MatcherID.alwaysMatch,\n name: 'All Fields',\n description: 'Always Match',\n\n get: (_option) => {\n return alwaysFieldMatcher;\n },\n\n getOptionsDisplayText: (_options) => {\n return 'Always';\n },\n};\n\nconst alwaysFrameMatcherInfo: FrameMatcherInfo = {\n id: MatcherID.alwaysMatch,\n name: 'All Frames',\n description: 'Always Match',\n\n get: (_option) => {\n return alwaysFrameMatcher;\n },\n\n getOptionsDisplayText: (_options) => {\n return 'Always';\n },\n};\n\nconst neverFieldMatcherInfo: FieldMatcherInfo = {\n id: MatcherID.neverMatch,\n name: 'No Fields',\n description: 'Never Match',\n excludeFromPicker: true,\n\n get: (_option) => {\n return neverFieldMatcher;\n },\n\n getOptionsDisplayText: (_options) => {\n return 'Never';\n },\n};\n\nconst neverFrameMatcherInfo: FrameMatcherInfo = {\n id: MatcherID.neverMatch,\n name: 'No Frames',\n description: 'Never Match',\n\n get: (_option) => {\n return neverFrameMatcher;\n },\n\n getOptionsDisplayText: (_options) => {\n return 'Never';\n },\n};\n\nexport function getFieldPredicateMatchers(): FieldMatcherInfo[] {\n return [anyFieldMatcher, allFieldsMatcher, notFieldMatcher, alwaysFieldMatcherInfo, neverFieldMatcherInfo];\n}\n\nexport function getFramePredicateMatchers(): FrameMatcherInfo[] {\n return [anyFrameMatcher, allFramesMatcher, notFrameMatcher, alwaysFrameMatcherInfo, neverFrameMatcherInfo];\n}\n","import { cx, css } from '@emotion/css';\nimport { ReactElement, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { ComponentSize } from '../../types/size';\nimport { Button, ButtonVariant } from '../Button/Button';\n\nexport interface Props {\n /** Confirm action callback */\n onConfirm(): void;\n children: string | ReactElement;\n /** Custom button styles */\n className?: string;\n /** Button size */\n size?: ComponentSize;\n /** Text for the Confirm button */\n confirmText?: string;\n /** Disable button click action */\n disabled?: boolean;\n /** Variant of the Confirm button */\n confirmVariant?: ButtonVariant;\n /** Hide confirm actions when after of them is clicked */\n closeOnConfirm?: boolean;\n /** Optional on click handler for the original button */\n onClick?(): void;\n /** Callback for the cancel action */\n onCancel?(): void;\n}\n\n/**\n * The ConfirmButton is an interactive component that adds a double-confirm option to a clickable action. When clicked, the action is replaced by an inline confirmation with the option to cancel. In Grafana, this is used, for example, for editing values in settings tables.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-confirmbutton--docs\n */\nexport const ConfirmButton = ({\n children,\n className,\n closeOnConfirm,\n confirmText = 'Save',\n confirmVariant = 'primary',\n disabled = false,\n onCancel,\n onClick,\n onConfirm,\n size = 'md',\n}: Props) => {\n const mainButtonRef = useRef<HTMLButtonElement>(null);\n const confirmButtonRef = useRef<HTMLButtonElement>(null);\n const [showConfirm, setShowConfirm] = useState(false);\n const [shouldRestoreFocus, setShouldRestoreFocus] = useState(false);\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n if (showConfirm) {\n confirmButtonRef.current?.focus();\n setShouldRestoreFocus(true);\n } else {\n if (shouldRestoreFocus) {\n mainButtonRef.current?.focus();\n setShouldRestoreFocus(false);\n }\n }\n }, [shouldRestoreFocus, showConfirm]);\n\n const onClickButton = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (event) {\n event.preventDefault();\n }\n\n setShowConfirm(true);\n onClick?.();\n };\n\n const onClickCancel = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (event) {\n event.preventDefault();\n }\n setShowConfirm(false);\n mainButtonRef.current?.focus();\n onCancel?.();\n };\n\n const onClickConfirm = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (event) {\n event.preventDefault();\n }\n onConfirm?.();\n if (closeOnConfirm) {\n setShowConfirm(false);\n }\n };\n\n const buttonClass = cx(className, styles.mainButton, {\n [styles.mainButtonHide]: showConfirm,\n });\n const confirmButtonClass = cx(styles.confirmButton, {\n [styles.confirmButtonHide]: !showConfirm,\n });\n const confirmButtonContainerClass = cx(styles.confirmButtonContainer, {\n [styles.confirmButtonContainerHide]: !showConfirm,\n });\n\n return (\n <div className={styles.container}>\n <span className={buttonClass}>\n {typeof children === 'string' ? (\n <Button disabled={disabled} size={size} fill=\"text\" onClick={onClickButton} ref={mainButtonRef}>\n {children}\n </Button>\n ) : (\n React.cloneElement(children, { disabled, onClick: onClickButton, ref: mainButtonRef })\n )}\n </span>\n <div className={confirmButtonContainerClass}>\n <span className={confirmButtonClass}>\n <Button size={size} variant={confirmVariant} onClick={onClickConfirm} ref={confirmButtonRef}>\n {confirmText}\n </Button>\n <Button size={size} fill=\"text\" onClick={onClickCancel}>\n <Trans i18nKey=\"grafana-ui.confirm-button.cancel\">Cancel</Trans>\n </Button>\n </span>\n </div>\n </div>\n );\n};\nConfirmButton.displayName = 'ConfirmButton';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'flex-end',\n position: 'relative',\n }),\n mainButton: css({\n opacity: 1,\n [theme.transitions.handleMotion('no-preference')]: {\n transition: theme.transitions.create(['opacity'], {\n duration: theme.transitions.duration.shortest,\n easing: theme.transitions.easing.easeOut,\n }),\n },\n zIndex: 2,\n }),\n mainButtonHide: css({\n opacity: 0,\n [theme.transitions.handleMotion('no-preference')]: {\n transition: theme.transitions.create(['opacity', 'visibility'], {\n duration: theme.transitions.duration.shortest,\n easing: theme.transitions.easing.easeIn,\n }),\n },\n visibility: 'hidden',\n zIndex: 0,\n }),\n confirmButtonContainer: css({\n overflow: 'visible',\n position: 'absolute',\n pointerEvents: 'all',\n right: 0,\n }),\n confirmButtonContainerHide: css({\n overflow: 'hidden',\n pointerEvents: 'none',\n }),\n confirmButton: css({\n alignItems: 'flex-start',\n background: theme.colors.background.primary,\n display: 'flex',\n opacity: 1,\n transform: 'translateX(0)',\n [theme.transitions.handleMotion('no-preference')]: {\n transition: theme.transitions.create(['opacity', 'transform'], {\n duration: theme.transitions.duration.shortest,\n easing: theme.transitions.easing.easeOut,\n }),\n },\n zIndex: 1,\n }),\n confirmButtonHide: css({\n opacity: 0,\n transform: 'translateX(100%)',\n [theme.transitions.handleMotion('no-preference')]: {\n transition: theme.transitions.create(['opacity', 'transform', 'visibility'], {\n duration: theme.transitions.duration.shortest,\n easing: theme.transitions.easing.easeIn,\n }),\n },\n visibility: 'hidden',\n }),\n };\n};\n","import { DataSourceInstanceSettings, DataSourceJsonData, DataSourceRef } from '@grafana/data';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport {\n initLastUsedDatasourceKeyForDashboard,\n setLastUsedDatasourceKeyForDashboard,\n} from 'app/features/dashboard/utils/dashboard';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\nimport { QueryGroupDataSource } from 'app/types/query';\n\nexport function isDataSourceMatch(\n ds: DataSourceInstanceSettings | undefined,\n current: string | DataSourceInstanceSettings | DataSourceRef | null | undefined\n): boolean {\n if (!ds) {\n return false;\n }\n if (!current) {\n return false;\n }\n if (typeof current === 'string') {\n return ds.uid === current;\n }\n return ds.uid === current.uid;\n}\n\nexport function dataSourceLabel(\n dataSource: DataSourceInstanceSettings<DataSourceJsonData> | string | DataSourceRef | null | undefined\n) {\n if (!dataSource) {\n return undefined;\n }\n\n if (typeof dataSource === 'string') {\n return `${dataSource} - not found`;\n }\n\n if ('name' in dataSource) {\n return dataSource.name;\n }\n\n if (dataSource.uid) {\n return `${dataSource.uid} - not found`;\n }\n\n return undefined;\n}\n\nexport function getDataSourceCompareFn(\n current: DataSourceRef | DataSourceInstanceSettings | string | null | undefined,\n recentlyUsedDataSources: string[],\n dataSourceVariablesIDs: string[],\n favoriteDatasources: string[] = []\n) {\n const cmpDataSources = (a: DataSourceInstanceSettings, b: DataSourceInstanceSettings) => {\n const nameA = a.name.toUpperCase();\n const nameB = b.name.toUpperCase();\n\n // Sort the current ds before everything else.\n if (current && isDataSourceMatch(a, current)) {\n return -1;\n } else if (current && isDataSourceMatch(b, current)) {\n return 1;\n }\n\n // Sort favorite data sources after current but before recently used.\n const aIsFavorite = favoriteDatasources.includes(a.uid);\n const bIsFavorite = favoriteDatasources.includes(b.uid);\n if (aIsFavorite && !bIsFavorite) {\n return -1;\n } else if (bIsFavorite && !aIsFavorite) {\n return 1;\n } else if (aIsFavorite && bIsFavorite) {\n // If both are favorites, sort alphabetically by name.\n return nameA < nameB ? -1 : 1;\n }\n\n // Sort recently used data sources by latest used, but after current and favorites.\n const aIndex = recentlyUsedDataSources.indexOf(a.uid);\n const bIndex = recentlyUsedDataSources.indexOf(b.uid);\n if (aIndex > -1 && aIndex > bIndex) {\n return -1;\n }\n if (bIndex > -1 && bIndex > aIndex) {\n return 1;\n }\n\n // Sort variables before the rest. Variables sorted alphabetically by name.\n const aIsVariable = dataSourceVariablesIDs.includes(a.uid);\n const bIsVariable = dataSourceVariablesIDs.includes(b.uid);\n if (aIsVariable && !bIsVariable) {\n return -1;\n } else if (bIsVariable && !aIsVariable) {\n return 1;\n }\n\n // Sort built in DataSources to the bottom and alphabetically by name.\n if (a.meta.builtIn && !b.meta.builtIn) {\n return 1;\n } else if (b.meta.builtIn && !a.meta.builtIn) {\n return -1;\n }\n\n // Sort the rest alphabetically by name.\n return nameA < nameB ? -1 : 1;\n };\n\n return cmpDataSources;\n}\n\n/**\n * Given a data source and a search term, returns true if the data source matches the search term.\n * Useful to filter data sources by name containing an string.\n * @param ds\n * @param searchTerm\n * @returns\n */\nexport function matchDataSourceWithSearch(ds: DataSourceInstanceSettings, searchTerm = '') {\n return ds.name.toLowerCase().includes(searchTerm.toLowerCase());\n}\n\nexport function storeLastUsedDataSourceInLocalStorage(datasource: QueryGroupDataSource) {\n if (!datasource.uid) {\n return;\n }\n\n const dashboardUid = getDashboardSrv().getCurrent()?.uid ?? '';\n // if datasource is MIXED reset datasource uid in storage, because Mixed datasource can contain multiple ds\n if (datasource.uid === MIXED_DATASOURCE_NAME) {\n return initLastUsedDatasourceKeyForDashboard(dashboardUid!);\n }\n\n setLastUsedDatasourceKeyForDashboard(dashboardUid, datasource.uid);\n}\n","import { PanelPlugin, PanelProps } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneObject, SceneObjectBase, SceneObjectState, sceneUtils, VizPanel, VizPanelState } from '@grafana/scenes';\nimport { LibraryPanel } from '@grafana/schema';\nimport { Stack } from '@grafana/ui';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { getLibraryPanel } from 'app/features/library-panels/state/api';\n\nimport { createPanelDataProvider } from '../utils/createPanelDataProvider';\nimport { getPanelIdForVizPanel } from '../utils/utils';\n\nimport { VizPanelLinks, VizPanelLinksMenu } from './PanelLinks';\nimport { panelLinksBehavior } from './PanelMenuBehavior';\nimport { PanelNotices } from './PanelNotices';\nimport { DashboardGridItem } from './layout-default/DashboardGridItem';\nimport { PanelTimeRange } from './panel-timerange/PanelTimeRange';\n\nexport interface LibraryPanelBehaviorState extends SceneObjectState {\n uid: string;\n name: string;\n isLoaded?: boolean;\n _loadedPanel?: LibraryPanel;\n}\n\nexport class LibraryPanelBehavior extends SceneObjectBase<LibraryPanelBehaviorState> {\n public static LOADING_VIZ_PANEL_PLUGIN_ID = 'library-panel-loading-plugin';\n\n public constructor(state: LibraryPanelBehaviorState) {\n super(state);\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n if (!this.state.isLoaded) {\n this.loadLibraryPanelFromPanelModel();\n }\n }\n\n public setPanelFromLibPanel(libPanel: LibraryPanel) {\n if (this.state._loadedPanel?.version === libPanel.version) {\n return;\n }\n\n const vizPanel = this.parent;\n\n if (!(vizPanel instanceof VizPanel)) {\n return;\n }\n\n const libPanelModel = new PanelModel(libPanel.model);\n\n // Use dashboard panel ID for data layer filtering\n const dashboardPanelId = getPanelIdForVizPanel(vizPanel);\n libPanelModel.id = dashboardPanelId;\n\n const titleItems: SceneObject[] = [];\n\n titleItems.push(\n new VizPanelLinks({\n rawLinks: libPanelModel.links,\n menu: new VizPanelLinksMenu({ $behaviors: [panelLinksBehavior] }),\n })\n );\n titleItems.push(new PanelNotices());\n\n let title;\n if (config.featureToggles.preferLibraryPanelTitle) {\n title = libPanelModel.title ?? vizPanel.state.title;\n } else {\n title = vizPanel.state.title ?? libPanelModel.title;\n }\n\n const vizPanelState: VizPanelState = {\n title,\n options: libPanelModel.options ?? {},\n fieldConfig: libPanelModel.fieldConfig,\n pluginId: libPanelModel.type,\n pluginVersion: libPanelModel.pluginVersion,\n displayMode: libPanelModel.transparent ? 'transparent' : undefined,\n description: libPanelModel.description,\n titleItems: titleItems,\n $data: createPanelDataProvider(libPanelModel),\n };\n\n if (libPanelModel.timeFrom || libPanelModel.timeShift) {\n vizPanelState.$timeRange = new PanelTimeRange({\n timeFrom: libPanelModel.timeFrom,\n timeShift: libPanelModel.timeShift,\n hideTimeOverride: libPanelModel.hideTimeOverride,\n });\n }\n\n vizPanel.setState(vizPanelState);\n vizPanel.changePluginType(libPanelModel.type, vizPanelState.options, vizPanelState.fieldConfig);\n\n this.setState({ _loadedPanel: libPanel, isLoaded: true, name: libPanel.name });\n\n const layoutElement = vizPanel.parent!;\n\n // Migrate repeat options to layout element\n if (libPanelModel.repeat && layoutElement instanceof DashboardGridItem) {\n layoutElement.setState({\n variableName: libPanelModel.repeat,\n repeatDirection: libPanelModel.repeatDirection === 'h' ? 'h' : 'v',\n maxPerRow: libPanelModel.maxPerRow,\n itemHeight: layoutElement.state.height ?? 10,\n });\n layoutElement.performRepeat();\n }\n }\n\n /**\n * Removes itself from the parent panel's behaviors array\n */\n public unlink() {\n const panel = this.parent;\n if (panel instanceof VizPanel) {\n panel.setState({ $behaviors: panel.state.$behaviors?.filter((b) => b !== this) });\n }\n }\n\n private async loadLibraryPanelFromPanelModel() {\n let vizPanel = this.parent;\n\n if (!(vizPanel instanceof VizPanel)) {\n return;\n }\n\n try {\n const libPanel = await getLibraryPanel(this.state.uid, true);\n this.setPanelFromLibPanel(libPanel);\n } catch (err) {\n vizPanel.setState({\n _pluginLoadError: `Unable to load library panel: ${this.state.uid}`,\n });\n }\n }\n}\n\nconst LoadingVizPanelPlugin = new PanelPlugin(LoadingVizPanel);\n\nfunction LoadingVizPanel(props: PanelProps) {\n return (\n <Stack direction={'column'} justifyContent={'space-between'}>\n <Trans i18nKey=\"library-panels.loading-panel-text\">Loading library panel</Trans>\n </Stack>\n );\n}\n\nsceneUtils.registerRuntimePanelPlugin({\n pluginId: LibraryPanelBehavior.LOADING_VIZ_PANEL_PLUGIN_ID,\n plugin: LoadingVizPanelPlugin,\n});\n","import { toNumber } from 'lodash';\n\nimport { DataFrame } from '../types/dataFrame';\nimport { DisplayValue } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\nimport { formattedValueToString } from '../valueFormats/valueFormats';\n\nimport { getDisplayProcessor } from './displayProcessor';\n\n/**\n * Creates a proxy object that allows accessing fields on dataFrame through various means and then returns it's\n * display value. This is mainly useful for example in data links interpolation where you can easily create a scoped\n * variable that will allow you to access dataFrame data with ${__data.fields.fieldName}.\n * Allows accessing fields by name, index, displayName or 'name' label\n *\n * @param options\n * @internal\n */\nexport function getFieldDisplayValuesProxy(options: {\n frame: DataFrame;\n rowIndex: number;\n timeZone?: TimeZone;\n}): Record<string, DisplayValue> {\n return new Proxy(\n {},\n {\n get: (obj, key): DisplayValue | undefined => {\n // 1. Match the name\n let field = options.frame.fields.find((f) => key === f.name);\n if (!field) {\n // 2. Match the array index\n const k = toNumber(key);\n field = options.frame.fields[k];\n }\n if (!field) {\n // 3. Match the config displayName\n field = options.frame.fields.find((f) => key === f.config.displayName);\n }\n if (!field) {\n // 4. Match the name label\n field = options.frame.fields.find((f) => {\n if (f.labels) {\n return key === f.labels.name;\n }\n return false;\n });\n }\n if (!field) {\n return undefined;\n }\n // TODO: we could supply the field here for the getDisplayProcessor fallback but we would also need theme which\n // we do not have access to here\n const displayProcessor = field.display ?? getDisplayProcessor();\n const raw = field.values[options.rowIndex];\n const disp = displayProcessor(raw);\n disp.toString = () => formattedValueToString(disp);\n return disp;\n },\n }\n );\n}\n","import { LoadingState } from './data';\nimport { MetricFindValue } from './datasource';\nimport { DataSourceRef } from './query';\n\nexport type VariableType = TypedVariableModel['type'];\n\n/** @deprecated Use TypedVariableModel instead */\nexport interface VariableModel {\n type: VariableType;\n name: string;\n label?: string;\n}\n\nexport type TypedVariableModel =\n | QueryVariableModel\n | AdHocVariableModel\n | GroupByVariableModel\n | ConstantVariableModel\n | DataSourceVariableModel\n | IntervalVariableModel\n | TextBoxVariableModel\n | CustomVariableModel\n | UserVariableModel\n | OrgVariableModel\n | DashboardVariableModel\n | SnapshotVariableModel\n | SwitchVariableModel;\n\nexport enum VariableRefresh {\n never, // removed from the UI\n onDashboardLoad,\n onTimeRangeChanged,\n}\n\nexport enum VariableSort {\n disabled,\n alphabeticalAsc,\n alphabeticalDesc,\n numericalAsc,\n numericalDesc,\n alphabeticalCaseInsensitiveAsc,\n alphabeticalCaseInsensitiveDesc,\n naturalAsc,\n naturalDesc,\n}\n\nexport enum VariableHide {\n dontHide,\n hideLabel,\n hideVariable,\n inControlsMenu,\n}\n\nexport interface AdHocVariableFilter {\n key: string;\n operator: string;\n value: string;\n values?: string[];\n origin?: 'dashboard' | string;\n /** @deprecated */\n condition?: string;\n}\n\nexport interface AdHocVariableModel extends BaseVariableModel {\n type: 'adhoc';\n datasource: DataSourceRef | null;\n filters: AdHocVariableFilter[];\n /**\n * Filters that are always applied to the lookup of keys. Not shown in the AdhocFilterBuilder UI.\n */\n baseFilters?: AdHocVariableFilter[];\n /**\n * Static keys that override any dynamic keys from the datasource.\n */\n defaultKeys?: MetricFindValue[];\n allowCustomValue?: boolean;\n}\n\nexport interface GroupByVariableModel extends VariableWithOptions {\n type: 'groupby';\n datasource: DataSourceRef | null;\n multi: true;\n allowCustomValue?: boolean;\n defaultValue?: VariableOption;\n}\n\nexport interface VariableOption {\n selected: boolean;\n text: string | string[];\n value: string | string[];\n isNone?: boolean;\n}\n\nexport interface IntervalVariableModel extends VariableWithOptions {\n type: 'interval';\n auto: boolean;\n auto_min: string;\n auto_count: number;\n refresh: VariableRefresh;\n}\n\nexport interface CustomVariableModel extends VariableWithMultiSupport {\n type: 'custom';\n}\n\nexport interface DataSourceVariableModel extends VariableWithMultiSupport {\n type: 'datasource';\n regex: string;\n refresh: VariableRefresh;\n}\n\nexport interface QueryVariableModel extends VariableWithMultiSupport {\n type: 'query';\n datasource: DataSourceRef | null;\n definition: string;\n sort: VariableSort;\n queryValue?: string;\n query: any;\n regex: string;\n refresh: VariableRefresh;\n staticOptions?: VariableOption[];\n staticOptionsOrder?: 'before' | 'after' | 'sorted';\n}\n\nexport interface TextBoxVariableModel extends VariableWithOptions {\n type: 'textbox';\n originalQuery: string | null;\n}\n\nexport interface ConstantVariableModel extends VariableWithOptions {\n type: 'constant';\n}\n\nexport interface SwitchVariableModel extends VariableWithOptions {\n type: 'switch';\n}\n\nexport interface VariableWithMultiSupport extends VariableWithOptions {\n multi: boolean;\n includeAll: boolean;\n allValue?: string | null;\n allowCustomValue?: boolean;\n}\n\nexport interface VariableWithOptions extends BaseVariableModel {\n current: VariableOption | Record<string, never>;\n options: VariableOption[];\n query: string;\n}\n\nexport interface DashboardProps {\n name: string;\n uid: string;\n toString: () => string;\n}\n\nexport interface DashboardVariableModel extends SystemVariable<DashboardProps> {}\n\nexport interface OrgProps {\n name: string;\n id: number;\n toString: () => string;\n}\n\nexport interface OrgVariableModel extends SystemVariable<OrgProps> {}\n\nexport interface UserProps {\n login: string;\n id: number;\n email?: string;\n toString: () => string;\n}\n\nexport interface UserVariableModel extends SystemVariable<UserProps> {}\n\nexport interface SystemVariable<TProps extends { toString: () => string }> extends BaseVariableModel {\n type: 'system';\n current: { value: TProps };\n}\n\nexport interface BaseVariableModel {\n name: string;\n label?: string;\n id: string;\n type: VariableType;\n rootStateKey: string | null;\n global: boolean;\n hide: VariableHide;\n skipUrlSync: boolean;\n index: number;\n state: LoadingState;\n error: any | null;\n description: string | null;\n usedInRepeat?: boolean;\n}\n\nexport interface SnapshotVariableModel extends VariableWithOptions {\n type: 'snapshot';\n query: string;\n}\n","import { from, map, Observable, Unsubscribable } from 'rxjs';\n\nimport { AlertState, AlertStateInfo, DataTopic, LoadingState, toDataFrame } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport {\n SceneDataLayerBase,\n SceneDataLayerProvider,\n SceneDataLayerProviderState,\n sceneGraph,\n SceneTimeRangeLike,\n} from '@grafana/scenes';\nimport { notifyApp } from 'app/core/actions';\nimport { createErrorNotification } from 'app/core/copy/appNotification';\nimport { contextSrv } from 'app/core/core';\nimport { getMessageFromError } from 'app/core/utils/errors';\nimport { alertRuleApi } from 'app/features/alerting/unified/api/alertRuleApi';\nimport { ungroupRulesByFileName } from 'app/features/alerting/unified/api/prometheus';\nimport { Annotation } from 'app/features/alerting/unified/utils/constants';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\nimport { prometheusRuleType } from 'app/features/alerting/unified/utils/rules';\nimport { dispatch } from 'app/store/store';\nimport { AccessControlAction } from 'app/types/accessControl';\nimport { RuleNamespace } from 'app/types/unified-alerting';\nimport { PromAlertingRuleState, PromRuleGroupDTO } from 'app/types/unified-alerting-dto';\n\nimport { getDashboardSceneFor } from '../utils/utils';\n\ninterface AlertStatesDataLayerState extends SceneDataLayerProviderState {}\n\nexport class AlertStatesDataLayer\n extends SceneDataLayerBase<AlertStatesDataLayerState>\n implements SceneDataLayerProvider\n{\n private hasAlertRules = true;\n private _timeRangeSub: Unsubscribable | undefined;\n public topic = DataTopic.AlertStates;\n\n public constructor(initialState: AlertStatesDataLayerState) {\n super({\n isEnabled: true,\n ...initialState,\n isHidden: true,\n });\n }\n\n public onEnable(): void {\n const timeRange = sceneGraph.getTimeRange(this);\n\n this._timeRangeSub = timeRange.subscribeToState(() => {\n this.runWithTimeRange(timeRange);\n });\n }\n\n public onDisable(): void {\n this._timeRangeSub?.unsubscribe();\n }\n\n public runLayer() {\n const timeRange = sceneGraph.getTimeRange(this);\n this.runWithTimeRange(timeRange);\n }\n\n private async runWithTimeRange(timeRange: SceneTimeRangeLike) {\n const dashboard = getDashboardSceneFor(this);\n const { uid, id } = dashboard.state;\n\n if (this.querySub) {\n this.querySub.unsubscribe();\n }\n\n if (!this.canWork(timeRange)) {\n return;\n }\n const fetchData: () => Promise<RuleNamespace[]> = async () => {\n const promRules = await dispatch(\n alertRuleApi.endpoints.prometheusRuleNamespaces.initiate(\n {\n ruleSourceName: GRAFANA_RULES_SOURCE_NAME,\n dashboardUid: uid,\n },\n { forceRefetch: true }\n )\n );\n if (promRules.error) {\n throw new Error(`Unexpected alert rules response.`);\n }\n return promRules.data;\n };\n const res: Observable<PromRuleGroupDTO[]> = from(fetchData()).pipe(\n map((namespaces: RuleNamespace[]) => ungroupRulesByFileName(namespaces))\n );\n\n const alerStatesExecution = res.pipe(\n map((groups: PromRuleGroupDTO[]) => {\n this.hasAlertRules = false;\n const panelIdToAlertState: Record<number, AlertStateInfo> = {};\n groups.forEach((group) =>\n group.rules.forEach((rule) => {\n if (prometheusRuleType.alertingRule(rule) && rule.annotations?.[Annotation.panelID]) {\n this.hasAlertRules = true;\n const panelId = Number(rule.annotations[Annotation.panelID]);\n const state = promAlertStateToAlertState(rule.state);\n\n // there can be multiple alerts per panel, so we make sure we get the most severe state:\n // alerting > pending > ok\n if (!panelIdToAlertState[panelId]) {\n panelIdToAlertState[panelId] = {\n state,\n id: Object.keys(panelIdToAlertState).length,\n panelId,\n dashboardId: id!,\n };\n } else if (state === AlertState.Alerting && panelIdToAlertState[panelId].state !== AlertState.Alerting) {\n panelIdToAlertState[panelId].state = AlertState.Alerting;\n } else if (\n state === AlertState.Pending &&\n panelIdToAlertState[panelId].state !== AlertState.Alerting &&\n panelIdToAlertState[panelId].state !== AlertState.Pending\n ) {\n panelIdToAlertState[panelId].state = AlertState.Pending;\n }\n }\n })\n );\n return Object.values(panelIdToAlertState);\n })\n );\n\n this.querySub = alerStatesExecution.subscribe({\n next: (stateUpdate) => {\n const frame = toDataFrame(stateUpdate);\n this.publishResults({\n state: LoadingState.Done,\n series: [\n {\n ...frame,\n meta: {\n ...frame.meta,\n dataTopic: DataTopic.AlertStates,\n },\n },\n ],\n timeRange: timeRange.state.value,\n });\n },\n error: (err) => {\n this.handleError(err);\n this.publishResults({\n state: LoadingState.Error,\n series: [],\n errors: [\n {\n message: getMessageFromError(err),\n },\n ],\n timeRange: timeRange.state.value,\n });\n },\n });\n }\n\n private canWork(timeRange: SceneTimeRangeLike): boolean {\n const dashboard = getDashboardSceneFor(this);\n const { uid } = dashboard.state;\n\n if (!uid) {\n return false;\n }\n\n // Cannot fetch rules while on a public dashboard since it's unauthenticated\n if (config.publicDashboardAccessToken) {\n return false;\n }\n\n if (timeRange.state.value.raw.to !== 'now') {\n return false;\n }\n\n if (this.hasAlertRules === false) {\n return false;\n }\n\n const hasRuleReadPermission =\n contextSrv.hasPermission(AccessControlAction.AlertingRuleRead) &&\n contextSrv.hasPermission(AccessControlAction.AlertingRuleExternalRead);\n\n if (!hasRuleReadPermission) {\n return false;\n }\n\n return true;\n }\n\n private handleError = (err: unknown) => {\n const notification = createErrorNotification('AlertStatesDataLayer', getMessageFromError(err));\n dispatch(notifyApp(notification));\n };\n}\n\nexport function promAlertStateToAlertState(state: PromAlertingRuleState): AlertState {\n if (state === PromAlertingRuleState.Firing) {\n return AlertState.Alerting;\n } else if (state === PromAlertingRuleState.Pending) {\n return AlertState.Pending;\n }\n return AlertState.OK;\n}\n","import { useLayoutEffect, useMemo, useRef, useState, ReactNode } from 'react';\nimport * as React from 'react';\nimport { useMountedState } from 'react-use';\nimport uPlot from 'uplot';\n\nimport { DataFrame } from '@grafana/data';\n\nimport { UPlotConfigBuilder } from '../config/UPlotConfigBuilder';\n\nimport { Marker } from './Marker';\nimport { XYCanvas } from './XYCanvas';\n\ninterface EventsCanvasProps {\n id: string;\n config: UPlotConfigBuilder;\n events: DataFrame[];\n renderEventMarker: (dataFrame: DataFrame, rowIndex: number) => ReactNode;\n mapEventToXYCoords: (dataFrame: DataFrame, rowIndex: number) => { x: number; y: number } | undefined;\n}\n\nexport function EventsCanvas({ id, events, renderEventMarker, mapEventToXYCoords, config }: EventsCanvasProps) {\n const plotInstance = useRef<uPlot>();\n // render token required to re-render annotation markers. Rendering lines happens in uPlot and the props do not change\n // so we need to force the re-render when the draw hook was performed by uPlot\n const [renderToken, setRenderToken] = useState(0);\n const isMounted = useMountedState();\n\n useLayoutEffect(() => {\n config.addHook('init', (u) => {\n plotInstance.current = u;\n });\n\n config.addHook('draw', () => {\n if (!isMounted()) {\n return;\n }\n setRenderToken((s) => s + 1);\n });\n }, [config, setRenderToken]);\n\n const eventMarkers = useMemo(() => {\n const markers: React.ReactNode[] = [];\n\n if (!plotInstance.current || events.length === 0) {\n return markers;\n }\n\n for (let i = 0; i < events.length; i++) {\n const frame = events[i];\n\n for (let j = 0; j < frame.length; j++) {\n const coords = mapEventToXYCoords(frame, j);\n if (!coords) {\n continue;\n }\n markers.push(\n <Marker {...coords} key={`${id}-marker-${i}-${j}`}>\n {renderEventMarker(frame, j)}\n </Marker>\n );\n }\n }\n\n return <>{markers}</>;\n }, [events, renderEventMarker, renderToken]);\n\n if (!plotInstance.current) {\n return null;\n }\n\n return (\n <XYCanvas\n left={plotInstance.current.bbox.left / window.devicePixelRatio}\n top={plotInstance.current.bbox.top / window.devicePixelRatio}\n >\n {eventMarkers}\n </XYCanvas>\n );\n}\n","import { DataFrame, FieldType, MutableDataFrame, TraceLog, TraceSpanRow } from '@grafana/data';\n\nimport { JaegerResponse, Span, TraceProcess, TraceResponse } from './types';\n\nexport function createTraceFrame(data: TraceResponse): DataFrame {\n const spans = data.spans.map((s) => toSpanRow(s, data.processes));\n\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string },\n { name: 'spanID', type: FieldType.string },\n { name: 'parentSpanID', type: FieldType.string },\n { name: 'operationName', type: FieldType.string },\n { name: 'serviceName', type: FieldType.string },\n { name: 'serviceTags', type: FieldType.other },\n { name: 'startTime', type: FieldType.number },\n { name: 'duration', type: FieldType.number },\n { name: 'logs', type: FieldType.other },\n { name: 'references', type: FieldType.other, values: [] },\n { name: 'tags', type: FieldType.other },\n { name: 'warnings', type: FieldType.other },\n { name: 'stackTraces', type: FieldType.other },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'jaeger',\n },\n },\n });\n\n for (const span of spans) {\n frame.add(span);\n }\n\n return frame;\n}\n\nfunction toSpanRow(span: Span, processes: Record<string, TraceProcess>): TraceSpanRow {\n const parentSpanID = span.references?.find((r) => r.refType === 'CHILD_OF')?.spanID;\n\n return {\n spanID: span.spanID,\n traceID: span.traceID,\n parentSpanID: parentSpanID,\n operationName: span.operationName,\n // from micro to millis\n startTime: span.startTime / 1000,\n duration: span.duration / 1000,\n logs: span.logs.map((l) => ({\n ...l,\n timestamp: l.timestamp / 1000,\n })),\n tags: span.tags,\n warnings: span.warnings ?? undefined,\n stackTraces: span.stackTraces,\n references: span.references?.filter((r) => r.spanID !== parentSpanID) ?? [], // parentSpanID is pushed to references in the transformTraceDataFrame method\n serviceName: processes[span.processID].serviceName,\n serviceTags: processes[span.processID].tags,\n };\n}\n\nexport function transformToJaeger(data: MutableDataFrame): JaegerResponse {\n let traceResponse: TraceResponse = {\n traceID: '',\n spans: [],\n processes: {},\n warnings: null,\n };\n let processes: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n\n // Set traceID\n if (!traceResponse.traceID) {\n traceResponse.traceID = span.traceID;\n }\n\n // Create process if doesn't exist\n if (!processes.find((p) => p === span.serviceName)) {\n processes.push(span.serviceName);\n traceResponse.processes[`p${processes.length}`] = {\n serviceName: span.serviceName,\n tags: span.serviceTags,\n };\n }\n\n // Create span\n traceResponse.spans.push({\n traceID: span.traceID,\n spanID: span.spanID,\n duration: span.duration * 1000,\n references: span.parentSpanID\n ? [\n {\n refType: 'CHILD_OF',\n spanID: span.parentSpanID,\n traceID: span.traceID,\n },\n ]\n : [],\n flags: 0,\n logs: span.logs.map((l: TraceLog) => ({\n ...l,\n timestamp: l.timestamp * 1000,\n })),\n operationName: span.operationName,\n processID:\n Object.keys(traceResponse.processes).find(\n (key) => traceResponse.processes[key].serviceName === span.serviceName\n ) || '',\n startTime: span.startTime * 1000,\n tags: span.tags,\n warnings: span.warnings ? span.warnings : null,\n });\n }\n\n return { data: [traceResponse], total: 0, limit: 0, offset: 0, errors: null };\n}\n","import { DataFrame, FieldType, MutableDataFrame, TraceKeyValuePair, TraceLog, TraceSpanRow } from '@grafana/data';\n\nimport { ZipkinAnnotation, ZipkinEndpoint, ZipkinSpan } from '../types';\n\n/**\n * Transforms response to Grafana trace data frame.\n */\nexport function transformResponse(zSpans: ZipkinSpan[]): DataFrame {\n const spanRows = zSpans.map(transformSpan);\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string, values: [] },\n { name: 'spanID', type: FieldType.string, values: [] },\n { name: 'parentSpanID', type: FieldType.string, values: [] },\n { name: 'operationName', type: FieldType.string, values: [] },\n { name: 'serviceName', type: FieldType.string, values: [] },\n { name: 'serviceTags', type: FieldType.other, values: [] },\n { name: 'startTime', type: FieldType.number, values: [] },\n { name: 'duration', type: FieldType.number, values: [] },\n { name: 'logs', type: FieldType.other, values: [] },\n { name: 'tags', type: FieldType.other, values: [] },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'zipkin',\n },\n },\n });\n\n for (const span of spanRows) {\n frame.add(span);\n }\n\n return frame;\n}\n\nfunction transformSpan(span: ZipkinSpan): TraceSpanRow {\n const row = {\n traceID: span.traceId,\n spanID: span.id,\n parentSpanID: span.parentId,\n operationName: span.name,\n serviceName: span.localEndpoint?.serviceName || span.remoteEndpoint?.serviceName || 'unknown',\n serviceTags: serviceTags(span),\n startTime: span.timestamp / 1000,\n duration: span.duration / 1000,\n logs: span.annotations?.map(transformAnnotation) ?? [],\n tags: Object.keys(span.tags || {}).reduce<TraceKeyValuePair[]>((acc, key) => {\n // If tag is error we remap it to simple boolean so that the trace ui will show an error icon.\n if (key === 'error') {\n acc.push({\n key: 'error',\n value: true,\n });\n\n acc.push({\n key: 'errorValue',\n value: span.tags!['error'],\n });\n return acc;\n }\n acc.push({ key, value: span.tags![key] });\n return acc;\n }, []),\n };\n\n if (span.kind) {\n row.tags = [\n {\n key: 'kind',\n value: span.kind,\n },\n ...(row.tags ?? []),\n ];\n }\n\n if (span.shared) {\n row.tags = [\n {\n key: 'shared',\n value: span.shared,\n },\n ...(row.tags ?? []),\n ];\n }\n\n return row;\n}\n\n/**\n * Maps annotations as a log as that seems to be the closest thing.\n * See https://zipkin.io/zipkin-api/#/default/get_trace__traceId_\n */\nfunction transformAnnotation(annotation: ZipkinAnnotation): TraceLog {\n return {\n timestamp: annotation.timestamp,\n fields: [\n {\n key: 'annotation',\n value: annotation.value,\n },\n ],\n };\n}\n\nfunction serviceTags(span: ZipkinSpan): TraceKeyValuePair[] {\n const endpoint = span.localEndpoint || span.remoteEndpoint;\n if (!endpoint) {\n return [];\n }\n return [\n valueToTag('ipv4', endpoint.ipv4),\n valueToTag('ipv6', endpoint.ipv6),\n valueToTag('port', endpoint.port),\n valueToTag('endpointType', span.localEndpoint ? 'local' : 'remote'),\n ].filter((item): item is TraceKeyValuePair => Boolean(item));\n}\n\nfunction valueToTag<T>(key: string, value: T): TraceKeyValuePair<T> | undefined {\n if (!value) {\n return undefined;\n }\n return {\n key,\n value,\n };\n}\n\n/**\n * Transforms data frame to Zipkin response\n */\nexport const transformToZipkin = (data: MutableDataFrame<TraceSpanRow>): ZipkinSpan[] => {\n let response: ZipkinSpan[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n response.push({\n traceId: span.traceID,\n parentId: span.parentSpanID,\n name: span.operationName,\n id: span.spanID,\n timestamp: span.startTime * 1000,\n duration: span.duration * 1000,\n ...getEndpoint(span),\n annotations: span.logs?.length\n ? span.logs.map((l: TraceLog) => ({ timestamp: l.timestamp, value: l.fields[0].value }))\n : undefined,\n tags: span.tags?.length\n ? span.tags\n .filter((t: TraceKeyValuePair) => t.key !== 'kind' && t.key !== 'endpointType' && t.key !== 'shared')\n .reduce((tags: { [key: string]: string }, t: TraceKeyValuePair) => {\n if (t.key === 'error') {\n return {\n ...tags,\n [t.key]: span.tags?.find((t: TraceKeyValuePair) => t.key === 'errorValue')?.value || '',\n };\n }\n return { ...tags, [t.key]: t.value };\n }, {})\n : undefined,\n kind: span.tags?.find((t: TraceKeyValuePair) => t.key === 'kind')?.value,\n shared: span.tags?.find((t: TraceKeyValuePair) => t.key === 'shared')?.value,\n });\n }\n\n return response;\n};\n\n// Returns remote or local endpoint object\nconst getEndpoint = (span: TraceSpanRow): { [key: string]: ZipkinEndpoint } | undefined => {\n const key =\n span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'endpointType')?.value === 'local'\n ? 'localEndpoint'\n : 'remoteEndpoint';\n return span.serviceName !== 'unknown'\n ? {\n [key]: {\n serviceName: span.serviceName,\n ipv4: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'ipv4')?.value,\n ipv6: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'ipv6')?.value,\n port: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'port')?.value,\n },\n }\n : undefined;\n};\n","import saveAs from 'file-saver';\n\nimport {\n CSVConfig,\n DataFrame,\n DataTransformerID,\n dateTime,\n dateTimeFormat,\n LogsModel,\n MutableDataFrame,\n toCSV,\n} from '@grafana/data';\nimport { transformToOTLP } from '@grafana-plugins/tempo/resultTransformer';\n\nimport { transformToJaeger } from '../../../plugins/datasource/jaeger/responseTransform';\nimport { transformToZipkin } from '../../../plugins/datasource/zipkin/utils/transforms';\n\n/**\n * Downloads a DataFrame as a TXT file.\n *\n * @param {(Pick<LogsModel, 'meta' | 'rows'>)} logsModel\n * @param {string} title\n */\nexport function downloadLogsModelAsTxt(logsModel: Pick<LogsModel, 'meta' | 'rows'>, title = '', fields: string[] = []) {\n let textToDownload = '';\n\n logsModel.meta?.forEach((metaItem) => {\n const string = `${metaItem.label}: ${JSON.stringify(metaItem.value)}\\n`;\n textToDownload = textToDownload + string;\n });\n textToDownload = textToDownload + '\\n\\n';\n\n logsModel.rows.forEach((row) => {\n const entry = !fields.length ? row.entry : fields.map((field) => row.labels[field] ?? '').join(' ');\n const newRow = row.timeEpochMs + '\\t' + dateTime(row.timeEpochMs).toISOString() + '\\t' + entry + '\\n';\n textToDownload = textToDownload + newRow;\n });\n\n const blob = new Blob([textToDownload], {\n type: 'text/plain;charset=utf-8',\n });\n const fileName = `${title ? `${title}-logs` : 'Logs'}-${dateTimeFormat(new Date())}.txt`;\n saveAs(blob, fileName);\n}\n\n/**\n * Exports a DataFrame as a CSV file.\n *\n * @param {DataFrame} dataFrame\n * @param {string} title\n * @param {CSVConfig} [csvConfig]\n * @param {DataTransformerID} [transformId=DataTransformerID.noop]\n */\nexport function downloadDataFrameAsCsv(\n dataFrame: DataFrame,\n title: string,\n csvConfig?: CSVConfig,\n transformId: DataTransformerID = DataTransformerID.noop,\n excelCompatibilityMode = false\n) {\n let blob;\n\n if (excelCompatibilityMode) {\n /**\n * This compatibility mode creates a utf16le csv file that uses \\t as the delimiter.\n * This is to fix an issue where excel does not recognize the BOM indicating UTF-8 when the SEP= meta data header is present.\n * Without the SEP= metadata header excel will try to use the system list separator.\n * If the CSV was created on a system where the separator was ',' it will not work on a system where the separator is ';'\n * This is common on locales where ',' is the decimal separator.\n *\n * When excel opens a utf16le csv file it will no longer try to use the system list separator, and instead use \\t as the separator.\n */\n const dataFrameCsv = toCSV([dataFrame], { ...csvConfig, useExcelHeader: false, delimiter: '\\t' });\n const utf16le = new Uint16Array(Array.from('\\ufeff' + dataFrameCsv).map((char) => char.charCodeAt(0)));\n blob = new Blob([utf16le], {\n type: 'text/csv;charset=utf-16le',\n });\n } else {\n const dataFrameCsv = toCSV([dataFrame], csvConfig);\n blob = new Blob([dataFrameCsv], {\n type: 'text/csv;charset=utf-8',\n });\n }\n\n const transformation = transformId !== DataTransformerID.noop ? '-as-' + transformId.toLocaleLowerCase() : '';\n const fileName = `${title}-data${transformation}-${dateTimeFormat(new Date())}.csv`;\n saveAs(blob, fileName);\n}\n\n/**\n * Downloads any object as JSON file.\n *\n * @param {unknown} json\n * @param {string} title\n */\nexport function downloadAsJson(json: unknown, title: string) {\n const blob = new Blob([JSON.stringify(json)], {\n type: 'application/json',\n });\n\n const fileName = `${title}-${dateTimeFormat(new Date())}.json`;\n saveAs(blob, fileName);\n}\n\n/**\n * Downloads a trace as json, based on the DataFrame format or OTLP as a default\n *\n * @param {DataFrame} frame\n * @param {string} title\n */\nexport function downloadTraceAsJson(frame: DataFrame, title: string): string {\n let traceFormat = 'otlp';\n switch (frame.meta?.custom?.traceFormat) {\n case 'jaeger': {\n let res = transformToJaeger(new MutableDataFrame(frame));\n downloadAsJson(res, title);\n traceFormat = 'jaeger';\n break;\n }\n case 'zipkin': {\n let res = transformToZipkin(new MutableDataFrame(frame));\n downloadAsJson(res, title);\n traceFormat = 'zipkin';\n break;\n }\n case 'otlp':\n default: {\n let res = transformToOTLP(new MutableDataFrame(frame));\n downloadAsJson(res, title);\n break;\n }\n }\n return traceFormat;\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options extends common.SingleStatBaseOptions {\n colorMode: common.BigValueColorMode;\n graphMode: common.BigValueGraphMode;\n justifyMode: common.BigValueJustifyMode;\n percentChangeColorMode: common.PercentChangeColorMode;\n showPercentChange: boolean;\n textMode: common.BigValueTextMode;\n wideLayout: boolean;\n}\n\nexport const defaultOptions: Partial<Options> = {\n colorMode: common.BigValueColorMode.Value,\n graphMode: common.BigValueGraphMode.Area,\n justifyMode: common.BigValueJustifyMode.Auto,\n percentChangeColorMode: common.PercentChangeColorMode.Standard,\n showPercentChange: false,\n textMode: common.BigValueTextMode.Auto,\n wideLayout: true,\n};\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport enum QueryEditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n\nexport enum LokiQueryType {\n Instant = 'instant',\n Range = 'range',\n Stream = 'stream',\n}\n\nexport enum SupportingQueryType {\n DataSample = 'dataSample',\n InfiniteScroll = 'infiniteScroll',\n LogsSample = 'logsSample',\n LogsVolume = 'logsVolume',\n}\n\nexport enum LokiQueryDirection {\n Backward = 'backward',\n Forward = 'forward',\n Scan = 'scan',\n}\n\nexport interface LokiDataQuery extends common.DataQuery {\n editorMode?: QueryEditorMode;\n /**\n * The LogQL query.\n */\n expr: string;\n /**\n * @deprecated, now use queryType.\n */\n instant?: boolean;\n /**\n * Used to override the name of the series.\n */\n legendFormat?: string;\n /**\n * Used to limit the number of log rows returned.\n */\n maxLines?: number;\n /**\n * @deprecated, now use queryType.\n */\n range?: boolean;\n /**\n * @deprecated, now use step.\n */\n resolution?: number;\n /**\n * Used to set step value for range queries.\n */\n step?: string;\n}\n","import { isEqualWith } from 'lodash';\n\nimport { PanelModel as IPanelModel } from '@grafana/data';\n\nimport { PanelModel } from '../state/PanelModel';\n\nexport interface PanelMergeInfo {\n changed: boolean;\n panels: PanelModel[];\n actions: Record<string, number[]>;\n}\n\n// Values that are safe to change without a full panel unmount/remount\n// TODO: options and fieldConfig should also be supported\nconst mutableKeys = new Set<keyof PanelModel>(['gridPos', 'title', 'description', 'transparent']);\n\nexport function mergePanels(current: PanelModel[], data: IPanelModel[]): PanelMergeInfo {\n const panels: PanelModel[] = [];\n const info: PanelMergeInfo = {\n changed: false,\n actions: {\n add: [],\n remove: [],\n replace: [],\n update: [],\n noop: [],\n },\n panels,\n };\n\n let nextId = 0;\n const inputPanels = new Map<number, IPanelModel>();\n for (let p of data) {\n let { id } = p;\n if (!id) {\n if (!nextId) {\n nextId = findNextPanelID([current, data]);\n }\n id = nextId++;\n p = { ...p, id }; // clone with new ID\n }\n inputPanels.set(id, p);\n }\n\n for (const panel of current) {\n const target = inputPanels.get(panel.id);\n if (!target) {\n info.changed = true;\n info.actions.remove.push(panel.id);\n panel.destroy();\n continue;\n }\n inputPanels.delete(panel.id);\n\n // Fast comparison when working with the same panel objects\n if (target === panel) {\n panels.push(panel);\n info.actions.noop.push(panel.id);\n continue;\n }\n\n // Check if it is the same type\n if (panel.type === target.type) {\n const save = panel.getSaveModel();\n let isNoop = true;\n let doUpdate = false;\n for (const [key, value] of Object.entries(target)) {\n if (!isEqualWith(value, save[key], infinityEqualsNull)) {\n info.changed = true;\n isNoop = false;\n if (mutableKeys.has(key as any)) {\n (panel as any)[key] = value;\n doUpdate = true;\n } else {\n doUpdate = false;\n break; // needs full replace\n }\n }\n }\n\n if (isNoop) {\n panels.push(panel);\n info.actions.noop.push(panel.id);\n continue;\n }\n\n if (doUpdate) {\n panels.push(panel);\n info.actions.update.push(panel.id);\n continue;\n }\n }\n panel.destroy();\n\n const next = new PanelModel(target);\n next.key = `${next.id}-update-${Date.now()}`; // force react invalidate\n panels.push(next);\n info.changed = true;\n info.actions.replace.push(panel.id);\n }\n\n // Add the new panels\n for (const t of inputPanels.values()) {\n panels.push(new PanelModel(t));\n info.changed = true;\n info.actions.add.push(t.id);\n }\n\n return info;\n}\n\n// Since +- Infinity are saved as null in JSON, we need to make them equal here also\nfunction infinityEqualsNull(a: unknown, b: unknown) {\n if (a == null && (b === Infinity || b === -Infinity || b == null)) {\n return true;\n }\n if (b == null && (a === Infinity || a === -Infinity || a == null)) {\n return true;\n }\n return undefined; // use default comparison\n}\n\nfunction findNextPanelID(args: IPanelModel[][]): number {\n let max = 0;\n for (const panels of args) {\n for (const panel of panels) {\n if (panel.id > max) {\n max = panel.id;\n }\n }\n }\n return max + 1;\n}\n","import { REPEAT_DIR_HORIZONTAL } from '../../../core/constants';\n\nimport { PanelModel } from './PanelModel';\n\nexport function isOnTheSameGridRow(sourcePanel: PanelModel, otherPanel: PanelModel): boolean {\n if (sourcePanel.repeatDirection === REPEAT_DIR_HORIZONTAL) {\n return false;\n }\n\n if (\n otherPanel.gridPos.x >= sourcePanel.gridPos.x + sourcePanel.gridPos.w &&\n otherPanel.gridPos.y === sourcePanel.gridPos.y\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function deleteScopeVars(panels: PanelModel[]) {\n for (const panel of panels) {\n delete panel.scopedVars;\n if (panel.panels?.length) {\n for (const collapsedPanel of panel.panels) {\n delete collapsedPanel.scopedVars;\n }\n }\n }\n}\n","import { cloneDeep, defaults as _defaults, filter, indexOf, isEqual, map, maxBy, pull } from 'lodash';\nimport { Subscription } from 'rxjs';\n\nimport {\n AnnotationQuery,\n AppEvent,\n DashboardCursorSync,\n dateTime,\n dateTimeFormat,\n dateTimeFormatTimeAgo,\n DateTimeInput,\n EventBusExtended,\n EventBusSrv,\n PanelModel as IPanelModel,\n TimeRange,\n TimeZone,\n TypedVariableModel,\n UrlQueryValue,\n} from '@grafana/data';\nimport { PromQuery } from '@grafana/prometheus';\nimport { RefreshEvent, TimeRangeUpdatedEvent, config } from '@grafana/runtime';\nimport { Dashboard, DashboardLink, VariableModel } from '@grafana/schema';\nimport { DEFAULT_ANNOTATION_COLOR } from '@grafana/ui';\nimport { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT, REPEAT_DIR_VERTICAL } from 'app/core/constants';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { sortedDeepCloneWithoutNulls } from 'app/core/utils/object';\nimport { variableAdapters } from 'app/features/variables/adapters';\nimport { onTimeRangeUpdated } from 'app/features/variables/state/actions';\nimport { GetVariables, getVariablesByKey } from 'app/features/variables/state/selectors';\nimport { DashboardMeta } from 'app/types/dashboard';\nimport {\n DashboardMetaChangedEvent,\n DashboardPanelsChangedEvent,\n RenderEvent,\n templateVariableValueUpdated,\n} from 'app/types/events';\n\nimport { appEvents } from '../../../core/core';\nimport { dispatch } from '../../../store/store';\nimport {\n VariablesChanged,\n VariablesChangedEvent,\n VariablesChangedInUrl,\n VariablesTimeRangeProcessDone,\n} from '../../variables/types';\nimport { isAllVariable } from '../../variables/utils';\nimport { getTimeSrv } from '../services/TimeSrv';\nimport { mergePanels, PanelMergeInfo } from '../utils/panelMerge';\n\nimport { DashboardMigrator } from './DashboardMigrator';\nimport { PanelModel } from './PanelModel';\nimport { TimeModel } from './TimeModel';\nimport { deleteScopeVars, isOnTheSameGridRow } from './utils';\n\nexport interface CloneOptions {\n saveVariables?: boolean;\n saveTimerange?: boolean;\n message?: string;\n}\n\nexport type DashboardLinkType = 'link' | 'dashboards';\n\n/** @experimental */\nexport interface ScopeMeta {\n trait: string;\n groups: string[];\n}\n\nexport class DashboardModel implements TimeModel {\n /** @deprecated use UID */\n id: any;\n // TODO: use propert type and fix all the places where uid is set to null\n uid: any;\n title: string;\n description: any;\n tags: any;\n style: any;\n timezone: any;\n weekStart: any;\n editable: any;\n graphTooltip: DashboardCursorSync;\n time: any;\n liveNow?: boolean;\n preload?: boolean;\n private originalTime: any;\n timepicker: any;\n templating: { list: any[] };\n private originalTemplating: any;\n annotations: { list: AnnotationQuery[] };\n refresh?: string;\n snapshot: any;\n schemaVersion: number;\n version: number;\n revision?: number; // Only used for dashboards managed by plugins\n links: DashboardLink[];\n gnetId: any;\n panels: PanelModel[];\n panelInEdit?: PanelModel;\n panelInView?: PanelModel;\n fiscalYearStartMonth?: number;\n scopeMeta?: ScopeMeta;\n private panelsAffectedByVariableChange: number[] | null;\n private appEventsSubscription: Subscription;\n private lastRefresh: number;\n private timeRangeUpdatedDuringEditOrView = false;\n private originalDashboard: Dashboard | null = null;\n\n // ------------------\n // not persisted\n // ------------------\n\n // repeat process cycles\n declare meta: DashboardMeta;\n events: EventBusExtended;\n private getVariablesFromState: GetVariables;\n\n static nonPersistedProperties: { [str: string]: boolean } = {\n events: true,\n meta: true,\n panels: true, // needs special handling\n templating: true, // needs special handling\n originalTime: true,\n originalTemplating: true,\n originalLibraryPanels: true,\n panelInEdit: true,\n panelInView: true,\n getVariablesFromState: true,\n formatDate: true,\n appEventsSubscription: true,\n panelsAffectedByVariableChange: true,\n lastRefresh: true,\n timeRangeUpdatedDuringEditOrView: true,\n originalDashboard: true,\n };\n\n constructor(\n data: Dashboard,\n meta?: DashboardMeta,\n options?: {\n // By default this uses variables from redux state\n getVariablesFromState?: GetVariables;\n // Target schema version for migration (defaults to latest)\n targetSchemaVersion?: number;\n }\n ) {\n this.getVariablesFromState = options?.getVariablesFromState ?? getVariablesByKey;\n this.events = new EventBusSrv();\n this.id = data.id || null;\n // UID is not there for newly created dashboards\n this.uid = data.uid || meta?.uid || null;\n this.revision = data.revision ?? undefined;\n this.title = data.title ?? 'No Title';\n this.description = data.description;\n this.tags = data.tags ?? [];\n this.timezone = data.timezone ?? '';\n this.weekStart = data.weekStart ?? '';\n this.editable = data.editable !== false;\n this.preload = data.preload;\n this.graphTooltip = data.graphTooltip || 0;\n this.time = data.time ?? { from: 'now-6h', to: 'now' };\n this.timepicker = data.timepicker ?? {};\n this.liveNow = data.liveNow;\n this.templating = this.removeNullValuesFromVariables(this.ensureListExist(data.templating));\n this.annotations = this.ensureListExist(data.annotations);\n this.refresh = data.refresh;\n this.snapshot = data.snapshot;\n this.schemaVersion = data.schemaVersion ?? 0;\n this.fiscalYearStartMonth = data.fiscalYearStartMonth ?? 0;\n this.version = data.version ?? 0;\n this.links = data.links ?? [];\n this.gnetId = data.gnetId || null;\n this.panels = map(data.panels ?? [], (panelData) => new PanelModel(panelData));\n // @ts-expect-error - experimental and it's not included in the schema\n this.scopeMeta = data.scopeMeta;\n // Deep clone original dashboard to avoid mutations by object reference\n this.originalDashboard = cloneDeep(data);\n this.originalTemplating = cloneDeep(this.templating);\n this.originalTime = cloneDeep(this.time);\n\n this.ensurePanelsHaveUniqueIds();\n this.formatDate = this.formatDate.bind(this);\n\n this.initMeta(meta);\n this.updateSchema(data, options?.targetSchemaVersion);\n\n this.addBuiltInAnnotationQuery();\n this.sortPanelsByGridPos();\n this.panelsAffectedByVariableChange = null;\n this.appEventsSubscription = new Subscription();\n this.lastRefresh = Date.now();\n this.appEventsSubscription.add(appEvents.subscribe(VariablesChanged, this.variablesChangedHandler.bind(this)));\n this.appEventsSubscription.add(\n appEvents.subscribe(VariablesTimeRangeProcessDone, this.variablesTimeRangeProcessDoneHandler.bind(this))\n );\n this.appEventsSubscription.add(\n appEvents.subscribe(VariablesChangedInUrl, this.variablesChangedInUrlHandler.bind(this))\n );\n }\n\n addBuiltInAnnotationQuery() {\n const found = this.annotations.list.some((item) => item.builtIn === 1);\n if (found) {\n return;\n }\n\n this.annotations.list.unshift({\n datasource: { uid: '-- Grafana --', type: 'grafana' },\n name: 'Annotations & Alerts',\n type: 'dashboard',\n iconColor: DEFAULT_ANNOTATION_COLOR,\n enable: true,\n hide: true,\n builtIn: 1,\n });\n }\n\n private initMeta(meta?: DashboardMeta) {\n meta = meta || {};\n\n meta.canShare = meta.canShare !== false;\n meta.canSave = meta.canSave !== false;\n meta.canStar = meta.canStar !== false;\n meta.canEdit = meta.canEdit !== false;\n meta.canDelete = meta.canDelete !== false;\n\n meta.showSettings = meta.canEdit;\n meta.canMakeEditable = meta.canSave && !this.editable;\n meta.hasUnsavedFolderChange = false;\n\n if (!this.editable) {\n meta.canEdit = false;\n meta.canDelete = false;\n meta.canSave = false;\n }\n\n this.meta = meta;\n }\n\n /**\n * @deprecated Returns the wrong type please do not use\n */\n getSaveModelCloneOld(options?: CloneOptions): DashboardModel {\n const optionsWithDefaults = _defaults(options || {}, {\n saveVariables: true,\n saveTimerange: true,\n });\n\n // make clone\n let copy: any = {};\n for (const property in this) {\n if (DashboardModel.nonPersistedProperties[property] || !this.hasOwnProperty(property)) {\n continue;\n }\n\n copy[property] = cloneDeep(this[property]);\n }\n\n copy.templating = this.getTemplatingSaveModel(optionsWithDefaults);\n\n if (!optionsWithDefaults.saveTimerange) {\n copy.time = this.originalTime;\n }\n\n // get panel save models\n copy.panels = this.getPanelSaveModels();\n\n // sort by keys\n copy = sortedDeepCloneWithoutNulls(copy);\n copy.getVariables = () => copy.templating.list;\n\n return copy;\n }\n\n /**\n * Returns the persisted save model (schema) of the dashboard\n */\n getSaveModelClone(options?: CloneOptions): Dashboard {\n const clone = this.getSaveModelCloneOld(options);\n\n // This is a bit messy / hacky but it's how we clean the model of any nulls / undefined / infinity\n const cloneJSON = JSON.stringify(clone);\n const cloneSafe = JSON.parse(cloneJSON);\n\n return cloneSafe;\n }\n\n /**\n * This will load a new dashboard, but keep existing panels unchanged\n *\n * This function can be used to implement:\n * 1. potentially faster loading dashboard loading\n * 2. dynamic dashboard behavior\n * 3. \"live\" dashboard editing\n *\n * @internal and experimental\n */\n // TODO: remove this as it's not being used anymore\n // Also remove public/app/features/dashboard/utils/panelMerge.ts\n updatePanels(panels: IPanelModel[]): PanelMergeInfo {\n const info = mergePanels(this.panels, panels ?? []);\n if (info.changed) {\n this.panels = info.panels ?? [];\n this.sortPanelsByGridPos();\n this.events.publish(new DashboardPanelsChangedEvent());\n }\n return info;\n }\n\n private getPanelSaveModels() {\n return this.panels\n .filter((panel) => this.isSnapshotTruthy() || !(panel.repeatPanelId || panel.repeatedByRow))\n .map((panel) => {\n // Clean libarary panels on save\n if (panel.libraryPanel) {\n const { id, title, libraryPanel, gridPos } = panel;\n return {\n id,\n title,\n gridPos,\n libraryPanel: {\n uid: libraryPanel.uid,\n name: libraryPanel.name,\n },\n };\n }\n\n // If we save while editing we should include the panel in edit mode instead of the\n // unmodified source panel\n if (this.panelInEdit && this.panelInEdit.id === panel.id) {\n return this.panelInEdit.getSaveModel();\n }\n\n return panel.getSaveModel();\n })\n .map((model) => {\n if (this.isSnapshotTruthy()) {\n return model;\n }\n // Clear any scopedVars from persisted mode. This cannot be part of getSaveModel as we need to be able to copy\n // panel models with preserved scopedVars, for example when going into edit mode.\n delete model.scopedVars;\n\n // Clear any repeated panels from collapsed rows\n if (model.type === 'row' && model.panels && model.panels.length > 0) {\n model.panels = model.panels\n .filter((rowPanel: PanelModel) => !rowPanel.repeatPanelId)\n .map((model: PanelModel) => {\n delete model.scopedVars;\n return model;\n });\n }\n\n return model;\n });\n }\n\n private getTemplatingSaveModel(options: CloneOptions) {\n const originalVariables = this.originalTemplating?.list ?? [];\n const currentVariables = this.getVariablesFromState(this.uid);\n\n const saveModels = currentVariables.map((variable) => {\n const variableSaveModel = variableAdapters.get(variable.type).getSaveModel(variable, options.saveVariables);\n\n if (!options.saveVariables) {\n const original = originalVariables.find(\n ({ name, type }: any) => name === variable.name && type === variable.type\n );\n\n if (!original) {\n return variableSaveModel;\n }\n\n if (variable.type === 'adhoc') {\n variableSaveModel.filters = original.filters;\n } else {\n variableSaveModel.current = original.current;\n variableSaveModel.options = original.options;\n }\n }\n\n return variableSaveModel;\n });\n\n const saveModelsWithoutNull = sortedDeepCloneWithoutNulls(saveModels);\n return { list: saveModelsWithoutNull };\n }\n\n timeRangeUpdated(timeRange: TimeRange) {\n this.events.publish(new TimeRangeUpdatedEvent(timeRange));\n dispatch(onTimeRangeUpdated(this.uid, timeRange));\n\n if (this.panelInEdit || this.panelInView) {\n this.timeRangeUpdatedDuringEditOrView = true;\n }\n }\n\n startRefresh(event: VariablesChangedEvent = { refreshAll: true, panelIds: [] }) {\n this.events.publish(new RefreshEvent());\n this.lastRefresh = Date.now();\n\n if (this.panelInEdit && (event.refreshAll || event.panelIds.includes(this.panelInEdit.id))) {\n this.panelInEdit.refresh();\n return;\n }\n\n const panelsToRefresh = this.panels.filter(\n (panel) => !this.otherPanelInFullscreen(panel) && (event.refreshAll || event.panelIds.includes(panel.id))\n );\n\n // We have to mark every panel as refreshWhenInView /before/ we actually refresh any\n // in case there is a shared query, as otherwise that might refresh before the source panel is\n // marked for refresh, preventing the panel from updating\n if (!this.isSnapshot()) {\n for (const panel of panelsToRefresh) {\n panel.refreshWhenInView = true;\n }\n }\n\n for (const panel of panelsToRefresh) {\n panel.refresh();\n }\n }\n\n render() {\n this.events.publish(new RenderEvent());\n for (const panel of this.panels) {\n panel.render();\n }\n }\n\n panelInitialized(panel: PanelModel) {\n const lastResult = panel.getQueryRunner().getLastResult();\n\n if (!this.otherPanelInFullscreen(panel) && !lastResult) {\n panel.refresh();\n }\n }\n\n otherPanelInFullscreen(panel: PanelModel) {\n return (this.panelInEdit || this.panelInView) && !(panel.isViewing || panel.isEditing);\n }\n\n initEditPanel(sourcePanel: PanelModel): PanelModel {\n getTimeSrv().stopAutoRefresh();\n this.panelInEdit = sourcePanel.getEditClone();\n this.timeRangeUpdatedDuringEditOrView = false;\n return this.panelInEdit;\n }\n\n exitPanelEditor() {\n this.panelInEdit!.destroy();\n this.panelInEdit = undefined;\n\n getTimeSrv().resumeAutoRefresh();\n\n this.refreshIfPanelsAffectedByVariableChangeOrTimeRangeChanged();\n }\n\n initViewPanel(panel: PanelModel) {\n this.panelInView = panel;\n this.timeRangeUpdatedDuringEditOrView = false;\n panel.setIsViewing(true);\n }\n\n exitViewPanel(panel: PanelModel) {\n this.panelInView = undefined;\n panel.setIsViewing(false);\n this.refreshIfPanelsAffectedByVariableChangeOrTimeRangeChanged();\n }\n\n private refreshIfPanelsAffectedByVariableChangeOrTimeRangeChanged() {\n if (this.panelsAffectedByVariableChange || this.timeRangeUpdatedDuringEditOrView) {\n this.startRefresh({\n panelIds: this.panelsAffectedByVariableChange ?? [],\n refreshAll: this.timeRangeUpdatedDuringEditOrView,\n });\n this.panelsAffectedByVariableChange = null;\n this.timeRangeUpdatedDuringEditOrView = false;\n }\n }\n\n private ensurePanelsHaveUniqueIds() {\n const ids = new Set<number>();\n let nextPanelId = this.getNextPanelId();\n for (const panel of this.panelIterator()) {\n if (!panel.id || ids.has(panel.id)) {\n panel.id = nextPanelId++;\n }\n ids.add(panel.id);\n }\n }\n\n private removeNullValuesFromVariables(templating: { list: VariableModel[] }) {\n if (!templating.list.length) {\n return templating;\n }\n\n for (const variable of templating.list) {\n if (variable.current) {\n // this is a safeguard for null value that breaks scenes dashboards.\n // expecting error at .includes(null) in order to not adjust\n // VariableOption type to avoid breaking changes\n if (\n variable.current.value === null ||\n //@ts-expect-error\n (Array.isArray(variable.current.value) && variable.current.value.includes(null))\n ) {\n variable.current = undefined;\n }\n }\n }\n return templating;\n }\n\n private ensureListExist(data: any = {}) {\n data.list ??= [];\n return data;\n }\n\n getNextPanelId() {\n let max = 0;\n\n for (const panel of this.panelIterator()) {\n if (panel.id > max) {\n max = panel.id;\n }\n }\n\n return max + 1;\n }\n\n *panelIterator() {\n for (const panel of this.panels) {\n yield panel;\n\n const rowPanels = panel.panels ?? [];\n for (const rowPanel of rowPanels) {\n yield rowPanel;\n }\n }\n }\n\n forEachPanel(callback: (panel: PanelModel, index: number) => void) {\n for (let i = 0; i < this.panels.length; i++) {\n callback(this.panels[i], i);\n }\n }\n\n getPanelById(id: number, includeCollapsed = false): PanelModel | null {\n if (this.panelInEdit && this.panelInEdit.id === id) {\n return this.panelInEdit;\n }\n\n if (includeCollapsed) {\n for (const panel of this.panelIterator()) {\n if (panel.id === id) {\n return panel;\n }\n }\n\n return null;\n } else {\n return this.panels.find((p) => p.id === id) ?? null;\n }\n }\n\n canEditPanel(panel?: PanelModel | null): boolean | undefined | null {\n return Boolean(this.meta.canEdit && panel && !panel.repeatPanelId && panel.type !== 'row');\n }\n\n canEditPanelById(id: number): boolean | undefined | null {\n return this.canEditPanel(this.getPanelById(id));\n }\n\n addPanel(panelData: any) {\n panelData.id = this.getNextPanelId();\n\n this.panels.unshift(new PanelModel(panelData));\n\n this.sortPanelsByGridPos();\n\n this.events.publish(new DashboardPanelsChangedEvent());\n }\n\n updateMeta(updates: Partial<DashboardMeta>) {\n this.meta = { ...this.meta, ...updates };\n this.events.publish(new DashboardMetaChangedEvent());\n }\n\n makeEditable() {\n this.editable = true;\n this.updateMeta({\n canMakeEditable: false,\n canEdit: true,\n canSave: true,\n });\n }\n\n sortPanelsByGridPos() {\n this.panels.sort((panelA, panelB) => {\n if (panelA.gridPos.y === panelB.gridPos.y) {\n return panelA.gridPos.x - panelB.gridPos.x;\n } else {\n return panelA.gridPos.y - panelB.gridPos.y;\n }\n });\n }\n\n clearUnsavedChanges(savedModel: Dashboard, options: CloneOptions) {\n for (const panel of this.panels) {\n panel.configRev = 0;\n }\n\n if (this.panelInEdit) {\n // Remember that we have a saved a change in panel editor so we apply it when leaving panel edit\n this.panelInEdit.hasSavedPanelEditChange = this.panelInEdit.configRev > 0;\n this.panelInEdit.configRev = 0;\n }\n\n this.originalDashboard = savedModel;\n this.originalTemplating = savedModel.templating;\n\n if (options.saveTimerange) {\n this.originalTime = savedModel.time;\n }\n }\n\n hasUnsavedChanges() {\n const changedPanel = this.panels.find((p) => p.hasChanged);\n return Boolean(changedPanel);\n }\n\n cleanUpRepeats() {\n if (this.isSnapshotTruthy() || !this.hasVariables()) {\n return;\n }\n\n // cleanup scopedVars\n deleteScopeVars(this.panels);\n\n const panelsToRemove = this.panels.filter((p) => (!p.repeat || p.repeatedByRow) && p.repeatPanelId);\n\n // remove panels\n pull(this.panels, ...panelsToRemove);\n panelsToRemove.map((p) => p.destroy());\n this.sortPanelsByGridPos();\n }\n\n processRepeats() {\n if (this.isSnapshotTruthy() || !this.hasVariables() || this.panelInView) {\n return;\n }\n\n this.cleanUpRepeats();\n\n for (let i = 0; i < this.panels.length; i++) {\n const panel = this.panels[i];\n if (panel.repeat) {\n this.repeatPanel(panel, i);\n }\n }\n\n this.sortPanelsByGridPos();\n this.events.publish(new DashboardPanelsChangedEvent());\n }\n\n cleanUpRowRepeats(rowPanels: PanelModel[]) {\n const panelIds = rowPanels.map((row) => row.id);\n // Remove repeated panels whose parent is in this row as these will be recreated later in processRowRepeats\n const panelsToRemove = rowPanels.filter((p) => !p.repeat && p.repeatPanelId && panelIds.includes(p.repeatPanelId));\n\n pull(rowPanels, ...panelsToRemove);\n pull(this.panels, ...panelsToRemove);\n }\n\n processRowRepeats(row: PanelModel) {\n if (this.isSnapshotTruthy() || !this.hasVariables()) {\n return;\n }\n\n let rowPanels = row.panels ?? [];\n if (!row.collapsed) {\n const rowPanelIndex = this.panels.findIndex((p) => p.id === row.id);\n rowPanels = this.getRowPanels(rowPanelIndex);\n }\n\n this.cleanUpRowRepeats(rowPanels);\n\n for (const panel of rowPanels) {\n if (panel.repeat) {\n const panelIndex = this.panels.findIndex((p) => p.id === panel.id);\n this.repeatPanel(panel, panelIndex);\n }\n }\n }\n\n getPanelRepeatClone(sourcePanel: PanelModel, valueIndex: number, sourcePanelIndex: number) {\n // if first clone return source\n if (valueIndex === 0) {\n return sourcePanel;\n }\n\n const m = sourcePanel.getSaveModel();\n m.id = this.getNextPanelId();\n const clone = new PanelModel(m);\n\n // insert after source panel + value index\n this.panels.splice(sourcePanelIndex + valueIndex, 0, clone);\n\n clone.repeatPanelId = sourcePanel.id;\n clone.repeat = undefined;\n\n if (this.panelInView?.id === clone.id) {\n clone.setIsViewing(true);\n this.panelInView = clone;\n }\n\n return clone;\n }\n\n getRowRepeatClone(sourceRowPanel: PanelModel, valueIndex: number, sourcePanelIndex: number) {\n // if first clone, return source\n if (valueIndex === 0) {\n if (!sourceRowPanel.collapsed) {\n const rowPanels = this.getRowPanels(sourcePanelIndex);\n sourceRowPanel.panels = rowPanels;\n }\n\n return sourceRowPanel;\n }\n\n const clone = new PanelModel(sourceRowPanel.getSaveModel());\n // for row clones we need to figure out panels under row to clone and where to insert clone\n let rowPanels: PanelModel[], insertPos: number;\n if (sourceRowPanel.collapsed) {\n rowPanels = cloneDeep(sourceRowPanel.panels) ?? [];\n clone.panels = rowPanels;\n\n // insert copied row after preceding row\n insertPos = sourcePanelIndex + valueIndex;\n } else {\n rowPanels = this.getRowPanels(sourcePanelIndex);\n clone.panels = rowPanels.map((panel) => panel.getSaveModel());\n\n // insert copied row after preceding row's panels\n insertPos = sourcePanelIndex + (rowPanels.length + 1) * valueIndex;\n }\n this.panels.splice(insertPos, 0, clone);\n\n this.updateRepeatedPanelIds(clone);\n return clone;\n }\n\n repeatPanel(panel: PanelModel, panelIndex: number) {\n const variable = this.getPanelRepeatVariable(panel);\n if (!variable) {\n return;\n }\n\n if (panel.type === 'row') {\n this.repeatRow(panel, panelIndex, variable);\n return;\n }\n\n const selectedOptions = this.getSelectedVariableOptions(variable);\n\n const maxPerRow = panel.maxPerRow || 4;\n let xPos = 0;\n let yPos = panel.gridPos.y;\n\n for (let index = 0; index < selectedOptions.length; index++) {\n const option = selectedOptions[index];\n let copy;\n\n copy = this.getPanelRepeatClone(panel, index, panelIndex);\n copy.scopedVars ??= {};\n copy.scopedVars[variable.name] = option;\n\n if (panel.repeatDirection === REPEAT_DIR_VERTICAL) {\n if (index > 0) {\n yPos += copy.gridPos.h;\n }\n copy.gridPos.y = yPos;\n } else {\n // set width based on how many are selected\n // assumed the repeated panels should take up full row width\n copy.gridPos.w = Math.max(GRID_COLUMN_COUNT / selectedOptions.length, GRID_COLUMN_COUNT / maxPerRow);\n copy.gridPos.x = xPos;\n copy.gridPos.y = yPos;\n\n xPos += copy.gridPos.w;\n\n // handle overflow by pushing down one row\n if (xPos + copy.gridPos.w > GRID_COLUMN_COUNT) {\n xPos = 0;\n yPos += copy.gridPos.h;\n }\n }\n }\n\n // Update gridPos for panels below\n const yOffset = yPos - panel.gridPos.y;\n if (yOffset > 0) {\n const panelBelowIndex = panelIndex + selectedOptions.length;\n for (const curPanel of this.panels.slice(panelBelowIndex)) {\n if (isOnTheSameGridRow(panel, curPanel)) {\n continue;\n }\n\n curPanel.gridPos.y += yOffset;\n }\n }\n }\n\n repeatRow(panel: PanelModel, panelIndex: number, variable: TypedVariableModel) {\n const selectedOptions = this.getSelectedVariableOptions(variable);\n\n for (let optionIndex = 0; optionIndex < selectedOptions.length; optionIndex++) {\n const curOption = selectedOptions[optionIndex];\n const rowClone = this.getRowRepeatClone(panel, optionIndex, panelIndex);\n\n setScopedVars(rowClone, variable, curOption);\n\n const rowHeight = this.getRowHeight(rowClone);\n const panelsInRow = rowClone.panels || [];\n let panelBelowIndex;\n\n if (panel.collapsed) {\n // For a collapsed row, just copy its panels, set scoped vars and proper IDs\n for (const panelInRow of panelsInRow) {\n setScopedVars(panelInRow, variable, curOption);\n if (optionIndex > 0) {\n this.updateRepeatedPanelIds(panelInRow, true);\n }\n }\n\n // push nth row clone's y-pos down by n\n rowClone.gridPos.y += optionIndex;\n panelBelowIndex = panelIndex + optionIndex + 1;\n } else {\n // insert after row panel\n const insertPos = panelIndex + (panelsInRow.length + 1) * optionIndex + 1;\n panelsInRow.forEach((panelInRow, i) => {\n setScopedVars(panelInRow, variable, curOption);\n\n if (optionIndex > 0) {\n const panelInRowClone = new PanelModel(panelInRow);\n this.updateRepeatedPanelIds(panelInRowClone, true);\n\n // For exposed row, set correct grid y-position and add it to dashboard panels\n panelInRowClone.gridPos.y += rowHeight * optionIndex;\n this.panels.splice(insertPos + i, 0, panelInRowClone);\n }\n });\n\n rowClone.panels = [];\n rowClone.gridPos.y += rowHeight * optionIndex;\n panelBelowIndex = insertPos + panelsInRow.length;\n }\n\n // Update gridPos for panels below if we inserted more than 1 repeated row panel\n if (selectedOptions.length > 1) {\n for (const panel of this.panels.slice(panelBelowIndex)) {\n panel.gridPos.y += rowHeight;\n }\n }\n }\n }\n\n updateRepeatedPanelIds(panel: PanelModel, repeatedByRow?: boolean) {\n panel.repeatPanelId = panel.id;\n panel.id = this.getNextPanelId();\n\n if (repeatedByRow) {\n panel.repeatedByRow = true;\n } else {\n panel.repeat = undefined;\n }\n\n return panel;\n }\n\n getSelectedVariableOptions(variable: any) {\n let selectedOptions: any[];\n if (isAllVariable(variable)) {\n selectedOptions = variable.options.slice(1, variable.options.length);\n } else {\n selectedOptions = filter(variable.options, { selected: true });\n }\n return selectedOptions;\n }\n\n getRowHeight(rowPanel: PanelModel): number {\n if (!rowPanel.panels || rowPanel.panels.length === 0) {\n return 0;\n } else if (rowPanel.collapsed) {\n // A collapsed row will always have height 1\n return 1;\n }\n\n const maxYPos = maxBy(rowPanel.panels, ({ gridPos }) => gridPos.y + gridPos.h)!.gridPos;\n return maxYPos.y + maxYPos.h - rowPanel.gridPos.y;\n }\n\n removePanel(panel: PanelModel) {\n this.panels = this.panels.filter((item) => item !== panel);\n panel.destroy();\n this.events.publish(new DashboardPanelsChangedEvent());\n }\n\n removeRow(row: PanelModel, removePanels: boolean) {\n const needToggle = (!removePanels && row.collapsed) || (removePanels && !row.collapsed);\n\n if (needToggle) {\n this.toggleRow(row);\n }\n\n this.removePanel(row);\n }\n\n expandRows() {\n const collapsedRows = this.panels.filter((p) => p.type === 'row' && p.collapsed);\n for (const row of collapsedRows) {\n this.toggleRow(row);\n }\n }\n\n collapseRows() {\n const collapsedRows = this.panels.filter((p) => p.type === 'row' && !p.collapsed);\n for (const row of collapsedRows) {\n this.toggleRow(row);\n }\n }\n\n isSubMenuVisible() {\n return (\n this.links.length > 0 ||\n this.getVariables().some((variable) => variable.hide !== 2) ||\n this.annotations.list.some((annotation) => !annotation.hide)\n );\n }\n\n getPanelInfoById(panelId: number) {\n const panelIndex = this.panels.findIndex((p) => p.id === panelId);\n return panelIndex >= 0 ? { panel: this.panels[panelIndex], index: panelIndex } : null;\n }\n\n duplicatePanel(panel: PanelModel) {\n const newPanel = panel.getSaveModel();\n newPanel.id = this.getNextPanelId();\n\n delete newPanel.repeat;\n delete newPanel.repeatIteration;\n delete newPanel.repeatPanelId;\n delete newPanel.scopedVars;\n\n if (newPanel.alert) {\n delete newPanel.thresholds;\n }\n\n delete newPanel.alert;\n\n // does it fit to the right?\n if (panel.gridPos.x + panel.gridPos.w * 2 <= GRID_COLUMN_COUNT) {\n newPanel.gridPos.x += panel.gridPos.w;\n } else {\n // add below\n newPanel.gridPos.y += panel.gridPos.h;\n }\n\n this.addPanel(newPanel);\n return newPanel;\n }\n\n formatDate(date: DateTimeInput, format?: string) {\n return dateTimeFormat(date, {\n format,\n timeZone: this.getTimezone(),\n });\n }\n\n destroy() {\n this.appEventsSubscription.unsubscribe();\n this.events.removeAllListeners();\n for (const panel of this.panels) {\n panel.destroy();\n }\n }\n\n toggleRow(row: PanelModel) {\n const rowIndex = indexOf(this.panels, row);\n\n if (!row.collapsed) {\n const rowPanels = this.getRowPanels(rowIndex);\n\n // remove panels\n pull(this.panels, ...rowPanels);\n // save panel models inside row panel\n row.panels = rowPanels.map((panel: PanelModel) => panel.getSaveModel());\n row.collapsed = true;\n\n if (rowPanels.some((panel) => panel.hasChanged)) {\n row.configRev++;\n }\n\n // emit change event\n this.events.publish(new DashboardPanelsChangedEvent());\n return;\n }\n\n row.collapsed = false;\n const rowPanels = row.panels ?? [];\n const hasRepeat = rowPanels.some((p: PanelModel) => p.repeat);\n\n // This is set only for the row being repeated.\n const rowRepeatVariable = row.repeat;\n\n if (rowPanels.length > 0) {\n // Use first panel to figure out if it was moved or pushed\n // If the panel doesn't have gridPos.y, use the row gridPos.y instead.\n // This can happen for some generated dashboards.\n const firstPanelYPos = rowPanels[0].gridPos.y ?? row.gridPos.y;\n const yDiff = firstPanelYPos - (row.gridPos.y + row.gridPos.h);\n\n // start inserting after row\n let insertPos = rowIndex + 1;\n // y max will represent the bottom y pos after all panels have been added\n // needed to know home much panels below should be pushed down\n let yMax = row.gridPos.y;\n\n for (const panel of rowPanels) {\n // When expanding original row that's repeated, set scopedVars for repeated row panels.\n if (rowRepeatVariable) {\n const variable = this.getPanelRepeatVariable(row);\n panel.scopedVars ??= {};\n if (variable) {\n const selectedOptions = this.getSelectedVariableOptions(variable);\n panel.scopedVars = {\n ...panel.scopedVars,\n [variable.name]: selectedOptions[0],\n };\n }\n }\n // set the y gridPos if it wasn't already set\n panel.gridPos.y ?? (panel.gridPos.y = row.gridPos.y); // (Safari 13.1 lacks ??= support)\n // make sure y is adjusted (in case row moved while collapsed)\n panel.gridPos.y -= yDiff;\n // insert after row\n this.panels.splice(insertPos, 0, new PanelModel(panel));\n // update insert post and y max\n insertPos += 1;\n yMax = Math.max(yMax, panel.gridPos.y + panel.gridPos.h);\n }\n\n const pushDownAmount = yMax - row.gridPos.y - 1;\n\n // push panels below down\n for (const panel of this.panels.slice(insertPos)) {\n panel.gridPos.y += pushDownAmount;\n }\n\n row.panels = [];\n\n if (hasRepeat) {\n this.processRowRepeats(row);\n }\n }\n\n // sort panels\n this.sortPanelsByGridPos();\n\n // emit change event\n this.events.publish(new DashboardPanelsChangedEvent());\n }\n\n /**\n * Will return all panels after rowIndex until it encounters another row\n */\n getRowPanels(rowIndex: number): PanelModel[] {\n const panelsBelowRow = this.panels.slice(rowIndex + 1);\n const nextRowIndex = panelsBelowRow.findIndex((p) => p.type === 'row');\n\n // Take all panels up to next row, or all panels if there are no other rows\n const rowPanels = panelsBelowRow.slice(0, nextRowIndex >= 0 ? nextRowIndex : this.panels.length);\n\n return rowPanels;\n }\n\n /** @deprecated */\n on<T>(event: AppEvent<T>, callback: (payload?: T) => void) {\n console.log('DashboardModel.on is deprecated use events.subscribe');\n this.events.on(event, callback);\n }\n\n /** @deprecated */\n off<T>(event: AppEvent<T>, callback: (payload?: T) => void) {\n console.log('DashboardModel.off is deprecated');\n this.events.off(event, callback);\n }\n\n cycleGraphTooltip() {\n this.graphTooltip = (this.graphTooltip + 1) % 3;\n }\n\n sharedTooltipModeEnabled() {\n return this.graphTooltip > 0;\n }\n\n sharedCrosshairModeOnly() {\n return this.graphTooltip === 1;\n }\n\n getRelativeTime(date: DateTimeInput) {\n return dateTimeFormatTimeAgo(date, {\n timeZone: this.getTimezone(),\n });\n }\n\n isSnapshot() {\n return this.snapshot !== undefined;\n }\n\n getTimezone(): TimeZone {\n return this.timezone ? this.timezone : contextSrv?.user?.timezone;\n }\n\n private updateSchema(old: any, targetVersion?: number) {\n const migrator = new DashboardMigrator(this);\n migrator.updateSchema(old, targetVersion);\n }\n\n hasTimeChanged() {\n const { time, originalTime } = this;\n\n // Compare moment values vs strings values\n return !(\n isEqual(time, originalTime) ||\n (isEqual(dateTime(time?.from), dateTime(originalTime?.from)) &&\n isEqual(dateTime(time?.to), dateTime(originalTime?.to)))\n );\n }\n\n autoFitPanels(viewHeight: number, kioskMode?: UrlQueryValue) {\n const currentGridHeight = Math.max(...this.panels.map((panel) => panel.gridPos.h + panel.gridPos.y));\n\n const navbarHeight = 55;\n const margin = 20;\n\n let visibleHeight = viewHeight - navbarHeight - margin;\n\n // add back navbar height\n if (kioskMode) {\n visibleHeight += navbarHeight;\n }\n\n const visibleGridHeight = Math.floor(visibleHeight / (GRID_CELL_HEIGHT + GRID_CELL_VMARGIN));\n const scaleFactor = currentGridHeight / visibleGridHeight;\n\n for (const panel of this.panels) {\n panel.gridPos.y = Math.round(panel.gridPos.y / scaleFactor) || 1;\n panel.gridPos.h = Math.round(panel.gridPos.h / scaleFactor) || 1;\n }\n }\n\n templateVariableValueUpdated() {\n this.processRepeats();\n this.events.emit(templateVariableValueUpdated);\n }\n\n getPanelByUrlId(panelUrlId: string) {\n const panelId = parseInt(panelUrlId ?? '0', 10);\n\n // First try to find it in a collapsed row and exand it\n const collapsedPanels = this.panels.filter((p) => p.collapsed);\n for (const panel of collapsedPanels) {\n const hasPanel = panel.panels?.some((rp) => rp.id === panelId);\n hasPanel && this.toggleRow(panel);\n }\n\n return this.getPanelById(panelId);\n }\n\n toggleLegendsForAll() {\n const panelsWithLegends = this.panels.filter(isPanelWithLegend);\n\n // determine if more panels are displaying legends or not\n const onCount = panelsWithLegends.filter((panel) => panel.legend.show).length;\n const offCount = panelsWithLegends.length - onCount;\n const panelLegendsOn = onCount >= offCount;\n\n for (const panel of panelsWithLegends) {\n panel.legend.show = !panelLegendsOn;\n panel.render();\n }\n }\n\n toggleExemplarsForAll() {\n for (const panel of this.panels) {\n for (const target of panel.targets) {\n if (\n !(\n target.datasource &&\n (target.datasource.type === 'prometheus' ||\n target.datasource.type === 'grafana-amazonprometheus-datasource' ||\n target.datasource.type === 'grafana-azureprometheus-datasource')\n )\n ) {\n continue;\n }\n\n const promTarget = target as PromQuery;\n promTarget.exemplar = !promTarget.exemplar;\n }\n }\n\n this.startRefresh();\n }\n\n getVariables() {\n return this.getVariablesFromState(this.uid);\n }\n\n canEditAnnotations(dashboardUID?: string) {\n let canEdit = true;\n\n // dashboardUID is falsy when it is an organizational annotation\n if (!dashboardUID) {\n canEdit = !!this.meta.annotationsPermissions?.organization.canEdit;\n } else {\n canEdit = !!this.meta.annotationsPermissions?.dashboard.canEdit;\n }\n\n if (config.featureToggles.annotationPermissionUpdate) {\n return canEdit;\n }\n return this.canEditDashboard() && canEdit;\n }\n\n canDeleteAnnotations(dashboardUID?: string) {\n let canDelete = true;\n\n // dashboardUID is falsy when it is an organizational annotation\n if (!dashboardUID) {\n canDelete = !!this.meta.annotationsPermissions?.organization.canDelete;\n } else {\n canDelete = !!this.meta.annotationsPermissions?.dashboard.canDelete;\n }\n\n if (config.featureToggles.annotationPermissionUpdate) {\n return canDelete;\n }\n return canDelete && this.canEditDashboard();\n }\n\n canAddAnnotations() {\n // When the builtin annotations are disabled, we should not add any in the UI\n const found = this.annotations.list.find((item) => item.builtIn === 1);\n if (found?.enable === false) {\n return false;\n }\n\n // If RBAC is enabled there are additional conditions to check.\n if (config.featureToggles.annotationPermissionUpdate) {\n return Boolean(this.meta.annotationsPermissions?.dashboard.canAdd);\n }\n\n return Boolean(this.meta.annotationsPermissions?.dashboard.canAdd) && this.canEditDashboard();\n }\n\n canEditDashboard() {\n return Boolean(this.meta.canEdit || this.meta.canMakeEditable);\n }\n\n canExecuteActions() {\n return this.canEditDashboard();\n }\n\n shouldUpdateDashboardPanelFromJSON(updatedPanel: PanelModel, panel: PanelModel) {\n const shouldUpdateGridPositionLayout = !isEqual(updatedPanel?.gridPos, panel?.gridPos);\n if (shouldUpdateGridPositionLayout) {\n this.events.publish(new DashboardPanelsChangedEvent());\n }\n }\n\n getDefaultTime() {\n return this.originalTime;\n }\n\n private getPanelRepeatVariable(panel: PanelModel) {\n return this.getVariablesFromState(this.uid).find((variable) => variable.name === panel.repeat);\n }\n\n private isSnapshotTruthy() {\n return this.snapshot;\n }\n\n private hasVariables() {\n return this.getVariablesFromState(this.uid).length > 0;\n }\n\n public hasVariablesChanged(): boolean {\n const originalVariables = this.originalTemplating?.list ?? [];\n const currentVariables = this.getTemplatingSaveModel({ saveVariables: true }).list;\n\n if (originalVariables.length !== currentVariables.length) {\n return false;\n }\n\n return !isEqual(currentVariables, originalVariables);\n }\n\n private variablesTimeRangeProcessDoneHandler(event: VariablesTimeRangeProcessDone) {\n const processRepeats = event.payload.variableIds.length > 0;\n this.variablesChangedHandler(new VariablesChanged({ panelIds: [], refreshAll: true }), processRepeats);\n }\n\n private variablesChangedHandler(event: VariablesChanged, processRepeats = true) {\n if (processRepeats) {\n this.processRepeats();\n }\n\n if (event.payload.refreshAll || getTimeSrv().isRefreshOutsideThreshold(this.lastRefresh)) {\n this.startRefresh({ refreshAll: true, panelIds: [] });\n return;\n }\n\n if (this.panelInEdit || this.panelInView) {\n this.panelsAffectedByVariableChange = event.payload.panelIds.filter(\n (id) => id !== (this.panelInEdit?.id ?? this.panelInView?.id)\n );\n }\n\n this.startRefresh(event.payload);\n }\n\n private variablesChangedInUrlHandler(event: VariablesChangedInUrl) {\n this.templateVariableValueUpdated();\n this.startRefresh(event.payload);\n }\n\n getOriginalDashboard() {\n return this.originalDashboard;\n }\n}\n\nfunction isPanelWithLegend(panel: PanelModel): panel is PanelModel & Pick<Required<PanelModel>, 'legend'> {\n return Boolean(panel.legend);\n}\n\nfunction setScopedVars(panel: PanelModel, variable: TypedVariableModel, variableOption: any) {\n panel.scopedVars ??= {};\n panel.scopedVars[variable.name] = variableOption;\n}\n","import { cx, css } from '@emotion/css';\nimport { forwardRef, ButtonHTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, IconName, isIconName } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles, getMouseFocusStyles, mediaUp } from '../../themes/mixins';\nimport { IconSize } from '../../types/icon';\nimport { getActiveButtonStyles, getPropertiesForVariant } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip } from '../Tooltip/Tooltip';\n\ntype CommonProps = {\n /** Icon name */\n icon?: IconName | React.ReactNode;\n /** Icon size */\n iconSize?: IconSize;\n /** Tooltip */\n tooltip?: string;\n /** For image icons */\n imgSrc?: string;\n /** Alt text for imgSrc */\n imgAlt?: string;\n /** if true or false will show angle-down/up */\n isOpen?: boolean;\n /** Controls flex-grow: 1 */\n fullWidth?: boolean;\n /** reduces padding to xs */\n narrow?: boolean;\n /** variant */\n variant?: ToolbarButtonVariant;\n /** Hide any children and only show icon */\n iconOnly?: boolean;\n /** Show highlight dot */\n isHighlighted?: boolean;\n};\n\nexport type ToolbarButtonProps = CommonProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport type ToolbarButtonVariant = 'default' | 'primary' | 'destructive' | 'active' | 'canvas';\n\n/**\n * Multiple buttons that form a toolbar. Each button can contain an icon, image and text. There are three variants of the ToolbarButton: default, primary and destructive.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/navigation-toolbarbutton--docs\n */\nexport const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n (\n {\n tooltip,\n icon,\n iconSize,\n className,\n children,\n imgSrc,\n imgAlt,\n fullWidth,\n isOpen,\n narrow,\n variant = 'default',\n iconOnly,\n 'aria-label': ariaLabel,\n isHighlighted,\n ...rest\n },\n ref\n ) => {\n const styles = useStyles2(getStyles);\n\n const buttonStyles = cx(\n {\n [styles.button]: true,\n [styles.buttonFullWidth]: fullWidth,\n [styles.narrow]: narrow,\n },\n styles[variant],\n className\n );\n\n const contentStyles = cx({\n [styles.content]: true,\n [styles.contentWithIcon]: !!icon,\n [styles.contentWithRightIcon]: isOpen !== undefined,\n });\n\n const body = (\n <button\n ref={ref}\n className={buttonStyles}\n aria-label={getButtonAriaLabel(ariaLabel, tooltip)}\n aria-expanded={isOpen}\n type=\"button\"\n {...rest}\n >\n {renderIcon(icon, iconSize)}\n {imgSrc && <img className={styles.img} src={imgSrc} alt={imgAlt ?? ''} />}\n {children && !iconOnly && <div className={contentStyles}>{children}</div>}\n {isOpen === false && <Icon name=\"angle-down\" />}\n {isOpen === true && <Icon name=\"angle-up\" />}\n {isHighlighted && <div className={styles.highlight} />}\n </button>\n );\n\n return tooltip ? (\n <Tooltip ref={ref} content={tooltip} placement=\"bottom\">\n {body}\n </Tooltip>\n ) : (\n body\n );\n }\n);\n\nToolbarButton.displayName = 'ToolbarButton';\n\nfunction getButtonAriaLabel(ariaLabel: string | undefined, tooltip: string | undefined) {\n return ariaLabel ? ariaLabel : tooltip ? selectors.components.PageToolbar.item(tooltip) : undefined;\n}\n\nfunction renderIcon(icon: IconName | React.ReactNode, iconSize?: IconSize) {\n if (!icon) {\n return null;\n }\n\n if (isIconName(icon)) {\n return <Icon name={icon} size={`${iconSize ? iconSize : 'lg'}`} />;\n }\n\n return icon;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const primaryVariant = getPropertiesForVariant(theme, 'primary', 'solid');\n const destructiveVariant = getPropertiesForVariant(theme, 'destructive', 'solid');\n\n const defaultOld = css({\n color: theme.colors.text.primary,\n background: theme.colors.secondary.main,\n\n '&:hover, &:focus': {\n color: theme.colors.text.primary,\n background: theme.colors.secondary.shade,\n border: `1px solid ${theme.colors.border.medium}`,\n },\n\n '&:active': {\n ...getActiveButtonStyles(theme.colors.secondary, 'solid'),\n },\n });\n\n return {\n button: css({\n label: 'toolbar-button',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n height: theme.spacing(theme.components.height.md),\n padding: theme.spacing(0, 1),\n borderRadius: theme.shape.radius.default,\n lineHeight: `${theme.components.height.md * theme.spacing.gridSize - 2}px`,\n fontWeight: theme.typography.fontWeightMedium,\n border: `1px solid ${theme.colors.secondary.border}`,\n whiteSpace: 'nowrap',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create(['background-color', 'border-color', 'color'], {\n duration: theme.transitions.duration.short,\n }),\n },\n\n [theme.breakpoints.down('md')]: {\n width: 'auto !important',\n },\n\n '&:focus, &:focus-visible': {\n ...getFocusStyles(theme),\n zIndex: 1,\n },\n\n '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n\n '&[disabled], &:disabled': {\n cursor: 'not-allowed',\n opacity: theme.colors.action.disabledOpacity,\n background: theme.colors.action.disabledBackground,\n boxShadow: 'none',\n\n '&:hover': {\n color: theme.colors.text.disabled,\n background: theme.colors.action.disabledBackground,\n boxShadow: 'none',\n },\n },\n }),\n default: css({\n color: theme.colors.text.secondary,\n background: 'transparent',\n border: `1px solid transparent`,\n\n '&:hover, &:focus': {\n color: theme.colors.text.primary,\n background: theme.colors.action.hover,\n },\n\n '&:active': {\n ...getActiveButtonStyles(theme.colors.secondary, 'solid'),\n },\n }),\n canvas: defaultOld,\n active: cx(\n defaultOld,\n css({\n '&::before': {\n display: 'block',\n content: '\" \"',\n position: 'absolute',\n left: 0,\n right: 0,\n height: '2px',\n bottom: 0,\n borderRadius: theme.shape.radius.default,\n backgroundImage: theme.colors.gradients.brandHorizontal,\n },\n })\n ),\n primary: css(primaryVariant),\n destructive: css(destructiveVariant),\n narrow: css({\n padding: theme.spacing(0, 0.5),\n }),\n img: css({\n width: '16px',\n height: '16px',\n marginRight: theme.spacing(1),\n }),\n buttonFullWidth: css({\n flexGrow: 1,\n }),\n content: css({\n display: 'flex',\n flexGrow: 1,\n }),\n contentWithIcon: css({\n display: 'none',\n paddingLeft: theme.spacing(1),\n\n [`@media ${mediaUp(theme.v1.breakpoints.md)}`]: {\n display: 'block',\n },\n }),\n contentWithRightIcon: css({\n paddingRight: theme.spacing(0.5),\n }),\n highlight: css({\n backgroundColor: theme.colors.success.main,\n borderRadius: theme.shape.radius.circle,\n width: '6px',\n height: '6px',\n position: 'absolute',\n top: '-3px',\n right: '-3px',\n zIndex: 1,\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { noop } from 'lodash';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Icon, IconButton, useStyles2 } from '@grafana/ui';\n\ntype VersionHistoryHeaderProps = {\n onClick?: () => void;\n baseVersion?: number;\n newVersion?: number;\n isNewLatest?: boolean;\n};\n\nexport const VersionHistoryHeader = ({\n onClick = noop,\n baseVersion = 0,\n newVersion = 0,\n isNewLatest = false,\n}: VersionHistoryHeaderProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <h3 className={styles.header}>\n <IconButton\n name=\"arrow-left\"\n size=\"xl\"\n onClick={onClick}\n tooltip={t('dashboard-scene.version-history-header.tooltip-reset-version', 'Reset version')}\n />\n <span>\n <Trans i18nKey=\"dashboard-scene.version-history-header.compare-versions\">\n Comparing {{ baseVersion }} <Icon name=\"arrows-h\" /> {{ newVersion }}\n </Trans>{' '}\n {isNewLatest && (\n <cite className=\"muted\">\n <Trans i18nKey=\"dashboard-scene.version-history-header.latest\">(Latest)</Trans>\n </cite>\n )}\n </span>\n </h3>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n header: css({\n fontSize: theme.typography.h3.fontSize,\n display: 'flex',\n gap: theme.spacing(2),\n marginBottom: theme.spacing(2),\n }),\n});\n","import { isString } from 'lodash';\nimport { combineLatest, filter, map, Observable } from 'rxjs';\n\nimport {\n PluginExtensionTypes,\n type PluginExtension,\n type PluginExtensionLink,\n type PluginExtensionComponent,\n} from '@grafana/data';\nimport { type GetObservablePluginLinks, type GetObservablePluginComponents } from '@grafana/runtime/internal';\n\nimport { log } from './logs/log';\nimport { AddedComponentRegistryItem } from './registry/AddedComponentsRegistry';\nimport { AddedLinkRegistryItem } from './registry/AddedLinksRegistry';\nimport { RegistryType } from './registry/Registry';\nimport { pluginExtensionRegistries } from './registry/setup';\nimport type { PluginExtensionRegistries } from './registry/types';\nimport { GetExtensions, GetExtensionsOptions, GetPluginExtensions } from './types';\nimport {\n getReadOnlyProxy,\n generateExtensionId,\n wrapWithPluginContext,\n getLinkExtensionOnClick,\n getLinkExtensionOverrides,\n getLinkExtensionPathWithTracking,\n} from './utils';\n\n/**\n * Returns an observable that emits plugin extensions whenever the core extensions registries change.\n * The observable will emit the initial state of the extensions and then emit again whenever\n * either the added components registry or the added links registry changes.\n *\n * @param options - The options for getting plugin extensions\n * @returns An Observable that emits the plugin extensions for the given extension point any time the registries change\n */\n\nexport const getObservablePluginExtensions = (\n options: Omit<GetExtensionsOptions, 'addedComponentsRegistry' | 'addedLinksRegistry'>\n): Observable<ReturnType<GetExtensions>> => {\n return combineLatest([\n pluginExtensionRegistries.addedComponentsRegistry.asObservable(),\n pluginExtensionRegistries.addedLinksRegistry.asObservable(),\n ]).pipe(\n filter(([components, links]) => Boolean(components) && Boolean(links)), // filter out uninitialized registries\n map(([components, links]) =>\n getPluginExtensions({\n ...options,\n addedComponentsRegistry: components,\n addedLinksRegistry: links,\n })\n )\n );\n};\n\nexport const getObservablePluginLinks: GetObservablePluginLinks = (options) => {\n return getObservablePluginExtensions(options).pipe(\n map((value) => value.extensions.filter((extension) => extension.type === PluginExtensionTypes.link))\n );\n};\n\nexport const getObservablePluginComponents: GetObservablePluginComponents = (options) => {\n return getObservablePluginExtensions(options).pipe(\n map((value) => value.extensions.filter((extension) => extension.type === PluginExtensionTypes.component))\n );\n};\n\nexport function createPluginExtensionsGetter(registries: PluginExtensionRegistries): GetPluginExtensions {\n let addedComponentsRegistry: RegistryType<AddedComponentRegistryItem[]>;\n let addedLinksRegistry: RegistryType<Array<AddedLinkRegistryItem<object>>>;\n\n // Create registry subscriptions to keep an copy of the registry state for use in the non-async\n // plugin extensions getter.\n registries.addedComponentsRegistry.asObservable().subscribe((componentsRegistry) => {\n addedComponentsRegistry = componentsRegistry;\n });\n\n registries.addedLinksRegistry.asObservable().subscribe((linksRegistry) => {\n addedLinksRegistry = linksRegistry;\n });\n\n return (options) => getPluginExtensions({ ...options, addedComponentsRegistry, addedLinksRegistry });\n}\n\n// Returns with a list of plugin extensions for the given extension point\nexport const getPluginExtensions: GetExtensions = ({\n context,\n extensionPointId,\n limitPerPlugin,\n addedLinksRegistry,\n addedComponentsRegistry,\n}) => {\n const frozenContext = context ? getReadOnlyProxy(context) : {};\n // We don't return the extensions separated by type, because in that case it would be much harder to define a sort-order for them.\n const extensions: PluginExtension[] = [];\n const extensionsByPlugin: Record<string, number> = {};\n\n for (const addedLink of addedLinksRegistry?.[extensionPointId] ?? []) {\n try {\n const { pluginId } = addedLink;\n // Only limit if the `limitPerPlugin` is set\n if (limitPerPlugin && extensionsByPlugin[pluginId] >= limitPerPlugin) {\n continue;\n }\n\n if (extensionsByPlugin[pluginId] === undefined) {\n extensionsByPlugin[pluginId] = 0;\n }\n\n const linkLog = log.child({\n pluginId,\n extensionPointId,\n path: addedLink.path ?? '',\n title: addedLink.title,\n description: addedLink.description ?? '',\n onClick: typeof addedLink.onClick,\n });\n // Run the configure() function with the current context, and apply the ovverides\n const overrides = getLinkExtensionOverrides(pluginId, addedLink, linkLog, frozenContext);\n\n // configure() returned an `undefined` -> hide the extension\n if (addedLink.configure && overrides === undefined) {\n continue;\n }\n\n const path = overrides?.path || addedLink.path;\n const extension: PluginExtensionLink = {\n id: generateExtensionId(pluginId, extensionPointId, addedLink.title),\n type: PluginExtensionTypes.link,\n pluginId: pluginId,\n onClick: getLinkExtensionOnClick(pluginId, extensionPointId, addedLink, linkLog, frozenContext),\n\n // Configurable properties\n icon: overrides?.icon || addedLink.icon,\n title: overrides?.title || addedLink.title,\n description: overrides?.description || addedLink.description || '',\n path: isString(path) ? getLinkExtensionPathWithTracking(pluginId, path, extensionPointId) : undefined,\n category: overrides?.category || addedLink.category,\n };\n\n extensions.push(extension);\n extensionsByPlugin[pluginId] += 1;\n } catch (error) {\n if (error instanceof Error) {\n log.error(error.message, {\n stack: error.stack ?? '',\n message: error.message,\n });\n }\n }\n }\n\n const addedComponents = addedComponentsRegistry?.[extensionPointId] ?? [];\n for (const addedComponent of addedComponents) {\n // Only limit if the `limitPerPlugin` is set\n if (limitPerPlugin && extensionsByPlugin[addedComponent.pluginId] >= limitPerPlugin) {\n continue;\n }\n\n if (extensionsByPlugin[addedComponent.pluginId] === undefined) {\n extensionsByPlugin[addedComponent.pluginId] = 0;\n }\n\n const componentLog = log.child({\n title: addedComponent.title,\n description: addedComponent.description ?? '',\n pluginId: addedComponent.pluginId,\n });\n\n const extension: PluginExtensionComponent = {\n id: generateExtensionId(addedComponent.pluginId, extensionPointId, addedComponent.title),\n type: PluginExtensionTypes.component,\n pluginId: addedComponent.pluginId,\n title: addedComponent.title,\n description: addedComponent.description ?? '',\n component: wrapWithPluginContext({\n pluginId: addedComponent.pluginId,\n extensionTitle: addedComponent.title,\n Component: addedComponent.component,\n log: componentLog,\n }),\n };\n\n extensions.push(extension);\n extensionsByPlugin[addedComponent.pluginId] += 1;\n }\n\n return { extensions };\n};\n","import { css, cx } from '@emotion/css';\nimport { memo, cloneElement, FC, useMemo, useContext, ReactNode } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\n\nimport { CardContainer, CardContainerProps, getCardContainerStyles } from './CardContainer';\n\n/**\n * @public\n */\nexport interface Props extends Omit<CardContainerProps, 'disableEvents' | 'disableHover'> {\n /** Indicates if the card and all its actions can be interacted with */\n disabled?: boolean;\n /** Link to redirect to on card click. If provided, the Card inner content will be rendered inside `a` */\n href?: string;\n /** On click handler for the Card */\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n /** @deprecated Use `Card.Heading` instead */\n heading?: ReactNode;\n /** @deprecated Use `Card.Description` instead */\n description?: string;\n isSelected?: boolean;\n /** If true, the padding of the Card will be smaller */\n isCompact?: boolean;\n /** Remove the bottom margin */\n noMargin?: boolean;\n}\n\nexport interface CardInterface extends FC<Props> {\n Heading: typeof Heading;\n Tags: typeof Tags;\n Figure: typeof Figure;\n Meta: typeof Meta;\n Actions: typeof Actions;\n SecondaryActions: typeof SecondaryActions;\n Description: typeof Description;\n}\n\nconst CardContext = React.createContext<{\n href?: string;\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n disabled?: boolean;\n isSelected?: boolean;\n} | null>(null);\n\n/**\n * Generic card component\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-card--docs\n * @public\n */\nexport const Card: CardInterface = ({\n disabled,\n href,\n onClick,\n children,\n isSelected,\n isCompact,\n className,\n noMargin,\n ...htmlProps\n}) => {\n const hasHeadingComponent = useMemo(\n () => React.Children.toArray(children).some((c) => React.isValidElement(c) && c.type === Heading),\n [children]\n );\n\n const disableHover = disabled || (!onClick && !href);\n const onCardClick = onClick && !disabled ? onClick : undefined;\n const styles = useStyles2(getCardContainerStyles, disabled, disableHover, isSelected, isCompact, noMargin);\n\n return (\n <CardContainer\n disableEvents={disabled}\n disableHover={disableHover}\n isSelected={isSelected}\n className={cx(styles.container, className)}\n noMargin={noMargin}\n {...htmlProps}\n >\n <CardContext.Provider value={{ href, onClick: onCardClick, disabled, isSelected }}>\n {!hasHeadingComponent && <Heading />}\n {children}\n </CardContext.Provider>\n </CardContainer>\n );\n};\nCard.displayName = 'Card';\n\ninterface ChildProps {\n className?: string;\n disabled?: boolean;\n children?: React.ReactNode;\n}\n\n/** Main heading for the card */\nconst Heading = ({ children, className, 'aria-label': ariaLabel }: ChildProps & { 'aria-label'?: string }) => {\n const context = useContext(CardContext);\n const styles = useStyles2(getHeadingStyles);\n\n const { href, onClick, isSelected } = context ?? {\n href: undefined,\n onClick: undefined,\n isSelected: undefined,\n };\n const optionLabel = t('grafana-ui.card.option', 'option');\n\n return (\n <h2 className={cx(styles.heading, className)}>\n {href ? (\n <a href={href} className={styles.linkHack} aria-label={ariaLabel} onClick={onClick}>\n {children}\n </a>\n ) : onClick ? (\n <button onClick={onClick} className={styles.linkHack} aria-label={ariaLabel} type=\"button\">\n {children}\n </button>\n ) : (\n <>{children}</>\n )}\n {/* Input must be readonly because we are providing a value for the checked prop with no onChange handler */}\n {isSelected !== undefined && <input aria-label={optionLabel} type=\"radio\" checked={isSelected} readOnly />}\n </h2>\n );\n};\nHeading.displayName = 'Heading';\n\nconst getHeadingStyles = (theme: GrafanaTheme2) => ({\n heading: css({\n gridArea: 'Heading',\n justifySelf: 'start',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n marginBottom: 0,\n fontSize: theme.typography.size.md,\n letterSpacing: 'inherit',\n lineHeight: theme.typography.body.lineHeight,\n color: theme.colors.text.primary,\n fontWeight: theme.typography.fontWeightMedium,\n '& input[readonly]': {\n cursor: 'inherit',\n },\n }),\n linkHack: css({\n all: 'unset',\n '&::after': {\n position: 'absolute',\n content: '\"\"',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n borderRadius: theme.shape.radius.default,\n },\n\n '&:focus-visible': {\n outline: 'none',\n outlineOffset: 0,\n boxShadow: 'none',\n\n '&::after': {\n ...getFocusStyles(theme),\n zIndex: 1,\n },\n },\n }),\n});\n\nconst Tags = ({ children, className }: ChildProps) => {\n const styles = useStyles2(getTagStyles);\n return <div className={cx(styles.tagList, className)}>{children}</div>;\n};\nTags.displayName = 'Tags';\n\nconst getTagStyles = (theme: GrafanaTheme2) => ({\n tagList: css({\n position: 'relative',\n gridArea: 'Tags',\n alignSelf: 'center',\n }),\n});\n\n/** Card description text */\nconst Description = ({ children, className }: ChildProps) => {\n const styles = useStyles2(getDescriptionStyles);\n const Element = typeof children === 'string' ? 'p' : 'div';\n return <Element className={cx(styles.description, className)}>{children}</Element>;\n};\nDescription.displayName = 'Description';\n\nconst getDescriptionStyles = (theme: GrafanaTheme2) => ({\n description: css({\n width: '100%',\n gridArea: 'Description',\n margin: theme.spacing(1, 0, 0),\n color: theme.colors.text.secondary,\n lineHeight: theme.typography.body.lineHeight,\n }),\n});\n\nconst Figure = ({ children, align = 'start', className }: ChildProps & { align?: 'start' | 'center' }) => {\n const styles = useStyles2(getFigureStyles);\n return (\n <div\n className={cx(\n styles.media,\n className,\n css({\n alignSelf: align,\n })\n )}\n >\n {children}\n </div>\n );\n};\nFigure.displayName = 'Figure';\n\nconst getFigureStyles = (theme: GrafanaTheme2) => ({\n media: css({\n position: 'relative',\n gridArea: 'Figure',\n\n marginRight: theme.spacing(2),\n width: '40px',\n\n '> img': {\n width: '100%',\n },\n\n '&:empty': {\n display: 'none',\n },\n }),\n});\n\nconst Meta = memo(({ children, className, separator = '|' }: ChildProps & { separator?: string }) => {\n const styles = useStyles2(getMetaStyles);\n let meta = children;\n\n const filtered = React.Children.toArray(children).filter(Boolean);\n if (!filtered.length) {\n return null;\n }\n meta = filtered.map((element, i) => (\n <div key={`element_${i}`} className={styles.metadataItem}>\n {element}\n </div>\n ));\n // Join meta data elements by separator\n if (filtered.length > 1 && separator) {\n meta = filtered.reduce((prev, curr, i) => [\n prev,\n <span key={`separator_${i}`} className={styles.separator}>\n {separator}\n </span>,\n curr,\n ]);\n }\n return <div className={cx(styles.metadata, className)}>{meta}</div>;\n});\nMeta.displayName = 'Meta';\n\nconst getMetaStyles = (theme: GrafanaTheme2) => ({\n metadata: css({\n gridArea: 'Meta',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n fontSize: theme.typography.size.sm,\n color: theme.colors.text.secondary,\n margin: theme.spacing(0.5, 0, 0),\n lineHeight: theme.typography.bodySmall.lineHeight,\n overflowWrap: 'anywhere',\n }),\n metadataItem: css({\n // Needed to allow for clickable children in metadata\n zIndex: 0,\n }),\n separator: css({\n margin: `0 ${theme.spacing(1)}`,\n }),\n});\n\ninterface ActionsProps extends ChildProps {\n children?: React.ReactNode;\n variant?: 'primary' | 'secondary';\n}\n\nconst BaseActions = ({ children, disabled, variant, className }: ActionsProps) => {\n const styles = useStyles2(getActionStyles);\n const context = useContext(CardContext);\n const isDisabled = context?.disabled || disabled;\n\n const css = variant === 'primary' ? styles.actions : styles.secondaryActions;\n return (\n <div className={cx(css, className)}>\n {React.Children.map(children, (child) => {\n return React.isValidElement(child) ? cloneElement(child, { disabled: isDisabled, ...child.props }) : null;\n })}\n </div>\n );\n};\n\nconst getActionStyles = (theme: GrafanaTheme2) => ({\n actions: css({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n gridArea: 'Actions',\n marginTop: theme.spacing(2),\n }),\n secondaryActions: css({\n alignSelf: 'center',\n color: theme.colors.text.secondary,\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n gridArea: 'Secondary',\n marginTop: theme.spacing(2),\n }),\n});\n\nconst Actions = ({ children, disabled, className }: ChildProps) => {\n return (\n <BaseActions variant=\"primary\" disabled={disabled} className={className}>\n {children}\n </BaseActions>\n );\n};\nActions.displayName = 'Actions';\n\nconst SecondaryActions = ({ children, disabled, className }: ChildProps) => {\n return (\n <BaseActions variant=\"secondary\" disabled={disabled} className={className}>\n {children}\n </BaseActions>\n );\n};\nSecondaryActions.displayName = 'SecondaryActions';\n\n/**\n * @public\n * @deprecated Use `className` on respective components to modify styles\n */\nexport const getCardStyles = (theme: GrafanaTheme2) => {\n return {\n inner: css({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n flexWrap: 'wrap',\n }),\n ...getHeadingStyles(theme),\n ...getMetaStyles(theme),\n ...getDescriptionStyles(theme),\n ...getFigureStyles(theme),\n ...getActionStyles(theme),\n ...getTagStyles(theme),\n };\n};\n\nCard.Heading = Heading;\nCard.Tags = Tags;\nCard.Figure = Figure;\nCard.Meta = Meta;\nCard.Actions = Actions;\nCard.SecondaryActions = SecondaryActions;\nCard.Description = Description;\n","import { DataFrameJSON } from '@grafana/data';\nimport { LiveDataFilter } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { TimeRegionConfig } from 'app/core/utils/timeRegions';\nimport { SearchQuery } from 'app/features/search/service/types';\n\n//----------------------------------------------\n// Query\n//----------------------------------------------\n\nexport enum GrafanaQueryType {\n LiveMeasurements = 'measurements',\n Annotations = 'annotations',\n Snapshot = 'snapshot',\n TimeRegions = 'timeRegions',\n\n // backend\n RandomWalk = 'randomWalk',\n List = 'list',\n Read = 'read',\n Search = 'search',\n SearchNext = 'searchNext',\n}\n\nexport interface GrafanaQuery extends DataQuery {\n queryType: GrafanaQueryType; // RandomWalk by default\n channel?: string;\n filter?: LiveDataFilter;\n buffer?: number;\n path?: string; // for list and read\n search?: SearchQuery;\n searchNext?: SearchQuery;\n snapshot?: DataFrameJSON[];\n timeRegion?: TimeRegionConfig;\n file?: GrafanaQueryFile;\n // Random walk configuration\n seriesCount?: number;\n startValue?: number;\n min?: number;\n max?: number;\n spread?: number;\n noise?: number;\n dropPercent?: number;\n}\n\nexport interface GrafanaQueryFile {\n name: string;\n size: number;\n}\n\nexport const defaultQuery: GrafanaQuery = {\n refId: 'A',\n queryType: GrafanaQueryType.RandomWalk,\n};\n\nexport const defaultFileUploadQuery: GrafanaQuery = {\n refId: 'A',\n datasource: {\n type: 'grafana',\n uid: 'grafana',\n },\n queryType: GrafanaQueryType.Snapshot,\n snapshot: [],\n};\n\n//----------------------------------------------\n// Annotations\n//----------------------------------------------\n\nexport enum GrafanaAnnotationType {\n Dashboard = 'dashboard',\n Tags = 'tags',\n}\n\nexport interface GrafanaAnnotationQuery extends GrafanaQuery {\n type: GrafanaAnnotationType; // tags\n limit: number; // 100\n tags?: string[];\n matchAny?: boolean; // By default Grafana only shows annotations that match all tags in the query. Enabling this returns annotations that match any of the tags in the query.\n}\n","import { PluginMeta } from '../types/plugin';\n\nexport function matchPluginId(idToMatch: string, pluginMeta: PluginMeta) {\n if (pluginMeta.id === idToMatch) {\n return true;\n }\n\n if (isPromFlavor(idToMatch)) {\n return isPromFlavor(pluginMeta.id);\n }\n\n if (pluginMeta.aliasIDs) {\n return pluginMeta.aliasIDs.includes(idToMatch);\n }\n\n return false;\n}\n\nfunction isPromFlavor(pluginId: string): boolean {\n if (pluginId === 'prometheus') {\n return true;\n }\n const regex = new RegExp('^grafana-[0-9a-z]+prometheus-datasource$');\n return regex.test(pluginId);\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\n\nexport interface Props {\n /** Callback to trigger when clicking outside of current element occurs. */\n onClick: () => void;\n /** Runs the 'onClick' function when pressing a key outside of the current element. Defaults to true. */\n includeButtonPress?: boolean;\n /** Object to attach the click event listener to. */\n parent?: Window | Document;\n /** https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener. Defaults to false. */\n useCapture?: boolean;\n children: React.ReactNode;\n}\n\n/**\n * A wrapper component that detects clicks outside of the elements by attaching event listener to `window` or `document` objects. Useful for components that require an action being triggered when a click outside has occurred, for example closing an overlay or popup.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/utilities-clickoutsidewrapper--docs\n */\nexport function ClickOutsideWrapper({\n includeButtonPress = true,\n parent = window,\n useCapture = false,\n onClick,\n children,\n}: Props) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const onOutsideClick = useCallback(\n (event: Event) => {\n const domNode = wrapperRef.current;\n\n if (!domNode || (event.target instanceof Node && !domNode.contains(event.target))) {\n onClick();\n }\n },\n [onClick]\n );\n\n useEffect(() => {\n parent.addEventListener('click', onOutsideClick, useCapture);\n if (includeButtonPress) {\n // Use keyup since keydown already has an event listener on window\n parent.addEventListener('keyup', onOutsideClick, useCapture);\n }\n\n return () => {\n parent.removeEventListener('click', onOutsideClick, useCapture);\n if (includeButtonPress) {\n parent.removeEventListener('keyup', onOutsideClick, useCapture);\n }\n };\n }, [includeButtonPress, onOutsideClick, parent, useCapture]);\n\n return <div ref={wrapperRef}>{children}</div>;\n}\n","import { css, cx } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { useOverlay } from '@react-aria/overlays';\nimport RcDrawer from 'rc-drawer';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getDragStyles } from '../DragHandle/DragHandle';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { ScrollContainer } from '../ScrollContainer/ScrollContainer';\nimport { Text } from '../Text/Text';\n\nimport 'rc-drawer/assets/index.css';\n\nexport interface Props {\n children: ReactNode;\n /** Title shown at the top of the drawer */\n title?: ReactNode;\n /** Subtitle shown below the title */\n subtitle?: ReactNode;\n /** Should the Drawer be closable by clicking on the mask, defaults to true */\n closeOnMaskClick?: boolean;\n /** @deprecated */\n inline?: boolean;\n /**\n * @deprecated use the size property instead\n **/\n width?: number | string;\n /**\n * @deprecated use a large size instead if high width is needed\n **/\n expandable?: boolean;\n /**\n * Specifies the width and min-width.\n * sm = width 25vw & min-width 384px\n * md = width 50vw & min-width 568px\n * lg = width 75vw & min-width 744px\n **/\n size?: 'sm' | 'md' | 'lg';\n /** Tabs */\n tabs?: React.ReactNode;\n /**\n * Whether the content should be wrapped in a ScrollContainer\n * Only change this if you intend to manage scroll behaviour yourself\n * (e.g. having a split pane with independent scrolling)\n **/\n scrollableContent?: boolean;\n /** Callback for closing the drawer */\n onClose: () => void;\n}\n\nconst drawerSizes = {\n sm: { width: '25vw', minWidth: 384 },\n md: { width: '50vw', minWidth: 568 },\n lg: { width: '75vw', minWidth: 744 },\n};\n\n/**\n * Drawer is a slide in overlay that can be used to display additional information without hiding the main page content. It can be anchored to the left or right edge of the screen.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/overlays-drawer--docs\n */\nexport function Drawer({\n children,\n onClose,\n closeOnMaskClick = true,\n scrollableContent = true,\n title,\n subtitle,\n width,\n size = 'md',\n tabs,\n}: Props) {\n const [drawerWidth, onMouseDown, onTouchStart] = useResizebleDrawer();\n\n const styles = useStyles2(getStyles);\n const wrapperStyles = useStyles2(getWrapperStyles, size);\n const dragStyles = useStyles2(getDragStyles);\n\n const overlayRef = React.useRef(null);\n const { dialogProps, titleProps } = useDialog({}, overlayRef);\n const { overlayProps } = useOverlay(\n {\n isDismissable: false,\n isOpen: true,\n onClose,\n },\n overlayRef\n );\n\n // Adds body class while open so the toolbar nav can hide some actions while drawer is open\n useBodyClassWhileOpen();\n\n const content = <div className={styles.content}>{children}</div>;\n const overrideWidth = drawerWidth ?? width ?? drawerSizes[size].width;\n const minWidth = drawerSizes[size].minWidth;\n\n return (\n <RcDrawer\n open={true}\n onClose={onClose}\n placement=\"right\"\n getContainer={'.main-view'}\n className={styles.drawerContent}\n rootClassName={styles.drawer}\n classNames={{\n wrapper: wrapperStyles,\n }}\n styles={{\n wrapper: {\n width: overrideWidth,\n minWidth,\n },\n }}\n width={''}\n motion={{\n motionAppear: true,\n motionName: styles.drawerMotion,\n }}\n maskClassName={styles.mask}\n maskClosable={closeOnMaskClick}\n maskMotion={{\n motionAppear: true,\n motionName: styles.maskMotion,\n }}\n >\n <FocusScope restoreFocus contain autoFocus>\n <div\n aria-label={\n typeof title === 'string'\n ? selectors.components.Drawer.General.title(title)\n : selectors.components.Drawer.General.title('no title')\n }\n className={styles.container}\n {...overlayProps}\n {...dialogProps}\n ref={overlayRef}\n >\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n className={cx(dragStyles.dragHandleVertical, styles.resizer)}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n />\n <div className={cx(styles.header, Boolean(tabs) && styles.headerWithTabs)}>\n <div className={styles.actions}>\n <IconButton\n name=\"times\"\n variant=\"secondary\"\n onClick={onClose}\n data-testid={selectors.components.Drawer.General.close}\n tooltip={t(`grafana-ui.drawer.close`, 'Close')}\n />\n </div>\n {typeof title === 'string' ? (\n <Stack direction=\"column\">\n <Text element=\"h3\" truncate {...titleProps}>\n {title}\n </Text>\n {subtitle && (\n <div className={styles.subtitle} data-testid={selectors.components.Drawer.General.subtitle}>\n {subtitle}\n </div>\n )}\n </Stack>\n ) : (\n title\n )}\n {tabs && <div className={styles.tabsWrapper}>{tabs}</div>}\n </div>\n {!scrollableContent ? content : <ScrollContainer showScrollIndicators>{content}</ScrollContainer>}\n </div>\n </FocusScope>\n </RcDrawer>\n );\n}\n\nfunction useResizebleDrawer(): [\n string | undefined,\n React.EventHandler<React.MouseEvent>,\n React.EventHandler<React.TouchEvent>,\n] {\n const [drawerWidth, setDrawerWidth] = useState<string | undefined>(undefined);\n\n const onMouseMove = useCallback((e: MouseEvent) => {\n setDrawerWidth(getCustomDrawerWidth(e.clientX));\n }, []);\n\n const onTouchMove = useCallback((e: TouchEvent) => {\n const touch = e.touches[0];\n setDrawerWidth(getCustomDrawerWidth(touch.clientX));\n }, []);\n\n const onMouseUp = useCallback(\n (e: MouseEvent) => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n },\n [onMouseMove]\n );\n\n const onTouchEnd = useCallback(\n (e: TouchEvent) => {\n document.removeEventListener('touchmove', onTouchMove);\n document.removeEventListener('touchend', onTouchEnd);\n },\n [onTouchMove]\n );\n\n function onMouseDown(e: React.MouseEvent<HTMLDivElement>) {\n e.stopPropagation();\n e.preventDefault();\n // we will only add listeners when needed, and remove them afterward\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n function onTouchStart(e: React.TouchEvent<HTMLDivElement>) {\n e.stopPropagation();\n e.preventDefault();\n // we will only add listeners when needed, and remove them afterward\n document.addEventListener('touchmove', onTouchMove);\n document.addEventListener('touchend', onTouchEnd);\n }\n\n return [drawerWidth, onMouseDown, onTouchStart];\n}\n\nfunction getCustomDrawerWidth(clientX: number) {\n let offsetRight = document.body.offsetWidth - (clientX - document.body.offsetLeft);\n let widthPercent = Math.min((offsetRight / document.body.clientWidth) * 100, 98).toFixed(2);\n return `${widthPercent}vw`;\n}\n\nfunction useBodyClassWhileOpen() {\n useEffect(() => {\n if (!document.body) {\n return;\n }\n\n document.body.classList.add('body-drawer-open');\n\n return () => {\n document.body.classList.remove('body-drawer-open');\n };\n }, []);\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n flex: '1 1 0',\n minHeight: '100%',\n position: 'relative',\n }),\n drawer: css({\n top: 0,\n\n '.rc-drawer-content-wrapper': {\n boxShadow: theme.shadows.z3,\n },\n }),\n drawerContent: css({\n backgroundColor: `${theme.colors.background.primary} !important`,\n display: 'flex',\n overflow: 'unset !important',\n flexDirection: 'column',\n }),\n drawerMotion: css({\n '&-appear': {\n [theme.transitions.handleMotion('no-preference')]: {\n transform: 'translateX(100%)',\n transition: 'none !important',\n },\n [theme.transitions.handleMotion('reduce')]: {\n opacity: 0,\n },\n '&-active': {\n [theme.transitions.handleMotion('no-preference')]: {\n transform: 'translateX(0)',\n transition: `${theme.transitions.create('transform')} !important`,\n },\n [theme.transitions.handleMotion('reduce')]: {\n transition: `opacity 0.2s ease-in-out`,\n opacity: 1,\n },\n },\n },\n }),\n // we want the mask itself to span the whole page including the top bar\n // this ensures trying to click something in the top bar will close the drawer correctly\n // but we don't want the backdrop styling to apply over the top bar as it looks weird\n // instead have a child pseudo element to apply the backdrop styling below the top bar\n mask: css({\n // The !important here is to override the default .rc-drawer-mask styles\n backgroundColor: 'transparent !important',\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n position: 'fixed !important' as 'fixed',\n\n '&:before': {\n backgroundColor: `${theme.components.overlay.background} !important`,\n bottom: 0,\n content: '\"\"',\n left: 0,\n position: 'fixed',\n right: 0,\n top: 0,\n },\n }),\n maskMotion: css({\n '&-appear': {\n opacity: 0,\n\n '&-active': {\n opacity: 1,\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create('opacity'),\n },\n },\n },\n }),\n header: css({\n label: 'drawer-header',\n flexGrow: 0,\n padding: theme.spacing(2, 2, 3),\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n }),\n headerWithTabs: css({\n borderBottom: 'none',\n }),\n actions: css({\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n }),\n subtitle: css({\n label: 'drawer-subtitle',\n color: theme.colors.text.secondary,\n }),\n content: css({\n padding: theme.spacing(theme.components.drawer?.padding ?? 2),\n height: '100%',\n flexGrow: 1,\n minHeight: 0,\n }),\n tabsWrapper: css({\n label: 'drawer-tabs',\n paddingLeft: theme.spacing(2),\n margin: theme.spacing(1, -1, -3, -3),\n }),\n resizer: css({\n top: 0,\n left: theme.spacing(-1),\n bottom: 0,\n position: 'absolute',\n zIndex: theme.zIndex.modal,\n }),\n };\n};\n\nfunction getWrapperStyles(theme: GrafanaTheme2, size: 'sm' | 'md' | 'lg') {\n return css({\n label: `drawer-content-wrapper-${size}`,\n overflow: 'unset !important',\n\n [theme.breakpoints.down('md')]: {\n width: `calc(100% - ${theme.spacing(2)}) !important`,\n minWidth: '0 !important',\n },\n });\n}\n","import { map, sortBy, flattenDeep, chunk, zip } from 'lodash';\nimport tinycolor from 'tinycolor2';\n\nconst PALETTE_ROWS = 4;\n\n/**\n * @alpha\n */\nexport const DEFAULT_ANNOTATION_COLOR = 'rgba(0, 211, 255, 1)';\n\n/**\n * @alpha\n */\nexport const OK_COLOR = 'rgba(11, 237, 50, 1)';\n\n/**\n * @alpha\n */\nexport const ALERTING_COLOR = 'rgba(237, 46, 24, 1)';\n\n/**\n * @alpha\n */\nexport const NO_DATA_COLOR = 'rgba(150, 150, 150, 1)';\n\n/**\n * @alpha\n */\nexport const PENDING_COLOR = 'rgba(247, 149, 32, 1)';\n\n/**\n * @alpha\n */\nexport const REGION_FILL_ALPHA = 0.09;\nexport const colors = [\n '#7EB26D', // 0: pale green\n '#EAB839', // 1: mustard\n '#6ED0E0', // 2: light blue\n '#EF843C', // 3: orange\n '#E24D42', // 4: red\n '#1F78C1', // 5: ocean\n '#BA43A9', // 6: purple\n '#705DA0', // 7: violet\n '#508642', // 8: dark green\n '#CCA300', // 9: dark sand\n '#447EBC',\n '#C15C17',\n '#890F02',\n '#0A437C',\n '#6D1F62',\n '#584477',\n '#B7DBAB',\n '#F4D598',\n '#70DBED',\n '#F9BA8F',\n '#F29191',\n '#82B5D8',\n '#E5A8E2',\n '#AEA2E0',\n '#629E51',\n '#E5AC0E',\n '#64B0C8',\n '#E0752D',\n '#BF1B00',\n '#0A50A1',\n '#962D82',\n '#614D93',\n '#9AC48A',\n '#F2C96D',\n '#65C5DB',\n '#F9934E',\n '#EA6460',\n '#5195CE',\n '#D683CE',\n '#806EB7',\n '#3F6833',\n '#967302',\n '#2F575E',\n '#99440A',\n '#58140C',\n '#052B51',\n '#511749',\n '#3F2B5B',\n '#E0F9D7',\n '#FCEACA',\n '#CFFAFF',\n '#F9E2D2',\n '#FCE2DE',\n '#BADFF4',\n '#F9D9F9',\n '#DEDAF7',\n];\n\nfunction sortColorsByHue(hexColors: string[]) {\n const hslColors = map(hexColors, hexToHsl);\n\n const sortedHSLColors = sortBy(hslColors, ['h']);\n const chunkedHSLColors = chunk(sortedHSLColors, PALETTE_ROWS);\n const sortedChunkedHSLColors = map(chunkedHSLColors, (chunk) => {\n return sortBy(chunk, 'l');\n });\n const flattenedZippedSortedChunkedHSLColors = flattenDeep(zip(...sortedChunkedHSLColors));\n\n return map(flattenedZippedSortedChunkedHSLColors, hslToHex);\n}\n\nfunction hexToHsl(color: string) {\n return tinycolor(color).toHsl();\n}\n\nfunction hslToHex(color: tinycolor.ColorFormats.HSLA) {\n return tinycolor(color).toHexString();\n}\n\nexport function getTextColorForBackground(color: string) {\n const b = tinycolor(color).getBrightness();\n\n return b > 180 ? 'rgb(32, 34, 38)' : 'rgb(247, 248, 250)';\n}\n\nexport function getTextColorForAlphaBackground(color: string, themeIsDark: boolean) {\n const tcolor = tinycolor(color);\n const b = tcolor.getBrightness();\n const a = tcolor.getAlpha();\n\n if (a < 0.3) {\n return themeIsDark ? 'rgb(247, 248, 250)' : 'rgb(32, 34, 38)';\n }\n\n return b > 180 ? 'rgb(32, 34, 38)' : 'rgb(247, 248, 250)';\n}\n\nexport let sortedColors = sortColorsByHue(colors);\n","import { useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder } from '@grafana/ui';\n\nimport { alertRuleApi } from '../../api/alertRuleApi';\n\nimport { FileExportPreview } from './FileExportPreview';\nimport { GrafanaExportDrawer } from './GrafanaExportDrawer';\nimport { ExportFormats, allGrafanaExportProviders } from './providers';\n\ninterface GrafanaReceiverExportPreviewProps {\n exportFormat: ExportFormats;\n onClose: () => void;\n receiverName: string;\n decrypt: boolean;\n}\n\nconst GrafanaReceiverExportPreview = ({\n receiverName,\n decrypt,\n exportFormat,\n onClose,\n}: GrafanaReceiverExportPreviewProps) => {\n const { currentData: receiverDefinition = '', isFetching } = alertRuleApi.useExportReceiverQuery({\n receiverName: receiverName,\n decrypt: decrypt,\n format: exportFormat,\n });\n\n const downloadFileName = `cp-${receiverName}-${new Date().getTime()}`;\n\n if (isFetching) {\n return <LoadingPlaceholder text={t('alerting.grafana-receiver-export-preview.text-loading', 'Loading....')} />;\n }\n\n return (\n <FileExportPreview\n format={exportFormat}\n textDefinition={receiverDefinition}\n downloadFileName={downloadFileName}\n onClose={onClose}\n />\n );\n};\n\ninterface GrafanaReceiverExporterProps {\n onClose: () => void;\n receiverName: string;\n decrypt: boolean;\n}\n\nexport const GrafanaReceiverExporter = ({ onClose, receiverName, decrypt }: GrafanaReceiverExporterProps) => {\n const [activeTab, setActiveTab] = useState<ExportFormats>('yaml');\n\n return (\n <GrafanaExportDrawer\n activeTab={activeTab}\n onTabChange={setActiveTab}\n onClose={onClose}\n formatProviders={Object.values(allGrafanaExportProviders)}\n >\n <GrafanaReceiverExportPreview\n receiverName={receiverName}\n decrypt={decrypt}\n exportFormat={activeTab}\n onClose={onClose}\n />\n </GrafanaExportDrawer>\n );\n};\n","import { useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder } from '@grafana/ui';\n\nimport { alertRuleApi } from '../../api/alertRuleApi';\n\nimport { FileExportPreview } from './FileExportPreview';\nimport { GrafanaExportDrawer } from './GrafanaExportDrawer';\nimport { ExportFormats, allGrafanaExportProviders } from './providers';\n\ninterface GrafanaReceiversExportPreviewProps {\n exportFormat: ExportFormats;\n onClose: () => void;\n decrypt: boolean;\n}\n\nconst GrafanaReceiversExportPreview = ({ decrypt, exportFormat, onClose }: GrafanaReceiversExportPreviewProps) => {\n const { currentData: receiverDefinition = '', isFetching } = alertRuleApi.useExportReceiversQuery({\n decrypt: decrypt,\n format: exportFormat,\n });\n\n const downloadFileName = `contact-points-${new Date().getTime()}`;\n\n if (isFetching) {\n return <LoadingPlaceholder text={t('alerting.grafana-receivers-export-preview.text-loading', 'Loading....')} />;\n }\n\n return (\n <FileExportPreview\n format={exportFormat}\n textDefinition={receiverDefinition}\n downloadFileName={downloadFileName}\n onClose={onClose}\n />\n );\n};\n\ninterface GrafanaReceiversExporterProps {\n onClose: () => void;\n decrypt: boolean;\n}\n\nexport const GrafanaReceiversExporter = ({ onClose, decrypt }: GrafanaReceiversExporterProps) => {\n const [activeTab, setActiveTab] = useState<ExportFormats>('yaml');\n\n return (\n <GrafanaExportDrawer\n activeTab={activeTab}\n onTabChange={setActiveTab}\n onClose={onClose}\n formatProviders={Object.values(allGrafanaExportProviders)}\n >\n <GrafanaReceiversExportPreview decrypt={decrypt} exportFormat={activeTab} onClose={onClose} />\n </GrafanaExportDrawer>\n );\n};\n","import { useCallback, useMemo, useState } from 'react';\nimport { useToggle } from 'react-use';\n\nimport { AlertmanagerAction, useAlertmanagerAbility } from '../../hooks/useAbilities';\nimport { GrafanaReceiverExporter } from '../export/GrafanaReceiverExporter';\nimport { GrafanaReceiversExporter } from '../export/GrafanaReceiversExporter';\n\nexport const ALL_CONTACT_POINTS = Symbol('all contact points');\n\ntype ExportProps = [JSX.Element | null, (receiver: string | typeof ALL_CONTACT_POINTS) => void];\n\nexport const useExportContactPoint = (): ExportProps => {\n const [receiverName, setReceiverName] = useState<string | typeof ALL_CONTACT_POINTS | null>(null);\n const [isExportDrawerOpen, toggleShowExportDrawer] = useToggle(false);\n const [decryptSecretsSupported, decryptSecretsAllowed] = useAlertmanagerAbility(AlertmanagerAction.DecryptSecrets);\n\n const canReadSecrets = decryptSecretsSupported && decryptSecretsAllowed;\n\n const handleClose = useCallback(() => {\n setReceiverName(null);\n toggleShowExportDrawer(false);\n }, [toggleShowExportDrawer]);\n\n const handleOpen = (receiverName: string | typeof ALL_CONTACT_POINTS) => {\n setReceiverName(receiverName);\n toggleShowExportDrawer(true);\n };\n\n const drawer = useMemo(() => {\n if (!receiverName || !isExportDrawerOpen) {\n return null;\n }\n\n if (receiverName === ALL_CONTACT_POINTS) {\n // use this drawer when we want to export all contact points\n return <GrafanaReceiversExporter decrypt={canReadSecrets} onClose={handleClose} />;\n } else {\n // use this one for exporting a single contact point\n return <GrafanaReceiverExporter receiverName={receiverName} decrypt={canReadSecrets} onClose={handleClose} />;\n }\n }, [canReadSecrets, isExportDrawerOpen, handleClose, receiverName]);\n\n return [drawer, handleOpen];\n};\n","import { AppEvents } from '@grafana/data';\nimport appEvents from 'app/core/app_events';\n\nexport function getPrettyJSON(obj: unknown): string {\n let r = '';\n try {\n r = JSON.stringify(obj, getCircularReplacer(), 2);\n } catch (e) {\n if (\n e instanceof Error &&\n (e.toString().includes('RangeError') || e.toString().includes('allocation size overflow'))\n ) {\n appEvents.emit(AppEvents.alertError, [e.toString(), 'Cannot display JSON, the object is too big.']);\n } else {\n appEvents.emit(AppEvents.alertError, [e instanceof Error ? e.toString() : e]);\n }\n }\n return r;\n}\n\nfunction getCircularReplacer() {\n const seen = new WeakSet();\n\n return (key: string, value: unknown) => {\n if (key === '__dataContext' || key === '__sceneObject') {\n return 'Filtered out in JSON serialization';\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n}\n","import { TimeOption } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { ComboboxOption } from '../Combobox/types';\n\nexport const getQuickOptions: () => TimeOption[] = () => [\n { from: 'now-5m', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-5-mins', 'Last 5 minutes') },\n {\n from: 'now-15m',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.last-15-mins', 'Last 15 minutes'),\n },\n {\n from: 'now-30m',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.last-30-mins', 'Last 30 minutes'),\n },\n { from: 'now-1h', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-1-hour', 'Last 1 hour') },\n { from: 'now-3h', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-3-hours', 'Last 3 hours') },\n { from: 'now-6h', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-6-hours', 'Last 6 hours') },\n {\n from: 'now-12h',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.last-12-hours', 'Last 12 hours'),\n },\n {\n from: 'now-24h',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.last-24-hours', 'Last 24 hours'),\n },\n { from: 'now-2d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-2-days', 'Last 2 days') },\n { from: 'now-7d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-7-days', 'Last 7 days') },\n { from: 'now-30d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-30-days', 'Last 30 days') },\n { from: 'now-90d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-90-days', 'Last 90 days') },\n {\n from: 'now-6M',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.last-6-months', 'Last 6 months'),\n },\n { from: 'now-1y', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-1-year', 'Last 1 year') },\n { from: 'now-2y', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-2-years', 'Last 2 years') },\n { from: 'now-5y', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.last-5-years', 'Last 5 years') },\n { from: 'now-1d/d', to: 'now-1d/d', display: t('grafana-ui.date-time-pickers.quick-options.yesterday', 'Yesterday') },\n {\n from: 'now-2d/d',\n to: 'now-2d/d',\n display: t('grafana-ui.date-time-pickers.quick-options.day-before-yesterday', 'Day before yesterday'),\n },\n {\n from: 'now-7d/d',\n to: 'now-7d/d',\n display: t('grafana-ui.date-time-pickers.quick-options.this-day-last-week', 'This day last week'),\n },\n {\n from: 'now-1w/w',\n to: 'now-1w/w',\n display: t('grafana-ui.date-time-pickers.quick-options.previous-week', 'Previous week'),\n },\n {\n from: 'now-1M/M',\n to: 'now-1M/M',\n display: t('grafana-ui.date-time-pickers.quick-options.previous-month', 'Previous month'),\n },\n {\n from: 'now-1Q/fQ',\n to: 'now-1Q/fQ',\n display: t('grafana-ui.date-time-pickers.quick-options.previous-fiscal-quarter', 'Previous fiscal quarter'),\n },\n {\n from: 'now-1y/y',\n to: 'now-1y/y',\n display: t('grafana-ui.date-time-pickers.quick-options.previous-year', 'Previous year'),\n },\n {\n from: 'now-1y/fy',\n to: 'now-1y/fy',\n display: t('grafana-ui.date-time-pickers.quick-options.previous-fiscal-year', 'Previous fiscal year'),\n },\n { from: 'now/d', to: 'now/d', display: t('grafana-ui.date-time-pickers.quick-options.today', 'Today') },\n { from: 'now/d', to: 'now', display: t('grafana-ui.date-time-pickers.quick-options.today-so-far', 'Today so far') },\n { from: 'now/w', to: 'now/w', display: t('grafana-ui.date-time-pickers.quick-options.this-week', 'This week') },\n {\n from: 'now/w',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.this-week-so-far', 'This week so far'),\n },\n { from: 'now/M', to: 'now/M', display: t('grafana-ui.date-time-pickers.quick-options.this-month', 'This month') },\n {\n from: 'now/M',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.this-month-so-far', 'This month so far'),\n },\n { from: 'now/y', to: 'now/y', display: t('grafana-ui.date-time-pickers.quick-options.this-year', 'This year') },\n {\n from: 'now/y',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.this-year-so-far', 'This year so far'),\n },\n {\n from: 'now/fQ',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-quarter-so-far', 'This fiscal quarter so far'),\n },\n {\n from: 'now/fQ',\n to: 'now/fQ',\n display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-quarter', 'This fiscal quarter'),\n },\n {\n from: 'now/fy',\n to: 'now',\n display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-year-so-far', 'This fiscal year so far'),\n },\n {\n from: 'now/fy',\n to: 'now/fy',\n display: t('grafana-ui.date-time-pickers.quick-options.this-fiscal-year', 'This fiscal year'),\n },\n];\n\nexport const getMonthOptions: () => Array<ComboboxOption<number>> = () => [\n { label: t('grafana-ui.date-time-pickers.month-options.label-january', 'January'), value: 0 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-february', 'February'), value: 1 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-march', 'March'), value: 2 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-april', 'April'), value: 3 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-may', 'May'), value: 4 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-june', 'June'), value: 5 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-july', 'July'), value: 6 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-august', 'August'), value: 7 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-september', 'September'), value: 8 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-october', 'October'), value: 9 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-november', 'November'), value: 10 },\n { label: t('grafana-ui.date-time-pickers.month-options.label-december', 'December'), value: 11 },\n];\n","import { Component } from 'react';\nimport * as React from 'react';\n\nexport interface ModalsContextState {\n component: React.ComponentType<any> | null;\n props: any;\n showModal: <T>(component: React.ComponentType<T>, props: T) => void;\n hideModal: () => void;\n}\n\nexport const ModalsContext = React.createContext<ModalsContextState>({\n component: null,\n props: {},\n showModal: () => {},\n hideModal: () => {},\n});\n\ninterface ModalsProviderProps {\n children: React.ReactNode;\n /** Set default component to render as modal. Useful when rendering modals from Angular */\n component?: React.ComponentType<any> | null;\n /** Set default component props. Useful when rendering modals from Angular */\n props?: any;\n}\n\n/**\n * @deprecated.\n * Not the real implementation used by core.\n */\nexport class ModalsProvider extends Component<ModalsProviderProps, ModalsContextState> {\n constructor(props: ModalsProviderProps) {\n super(props);\n this.state = {\n component: props.component || null,\n props: props.props || {},\n showModal: this.showModal,\n hideModal: this.hideModal,\n };\n }\n\n showModal = <T,>(component: React.ComponentType<T>, props: T) => {\n this.setState({\n component,\n props,\n });\n };\n\n hideModal = () => {\n this.setState({\n component: null,\n props: {},\n });\n };\n\n render() {\n return <ModalsContext.Provider value={this.state}>{this.props.children}</ModalsContext.Provider>;\n }\n}\n\nexport const ModalRoot = () => (\n <ModalsContext.Consumer>\n {({ component: Component, props }) => {\n return Component ? <Component {...props} /> : null;\n }}\n </ModalsContext.Consumer>\n);\n\nexport const ModalsController = ModalsContext.Consumer;\n","import { Store } from 'redux';\n\nimport { initialKeyedVariablesState } from 'app/features/variables/state/keyedVariablesReducer';\nimport { StoreState } from 'app/types/store';\n\nexport let store: Store<StoreState>;\n\nexport function setStore(newStore: Store<StoreState>) {\n store = newStore;\n}\n\nexport function getState(): StoreState {\n if (!store || !store.getState) {\n return { templating: { ...initialKeyedVariablesState, lastKey: 'key' } } as StoreState; // used by tests\n }\n\n return store.getState();\n}\n\nexport function dispatch(action: any) {\n if (!store || !store.getState) {\n return;\n }\n\n return store.dispatch(action);\n}\n","import * as React from 'react';\n\nimport { DataFrame } from '../types/dataFrame';\nimport { DataTransformerInfo } from '../types/transformations';\nimport { Registry, RegistryItem } from '../utils/Registry';\n\nexport interface TransformerUIProps<T> {\n /**\n * Transformer configuration, persisted on panel's model\n */\n options: T;\n /**\n * Pre-transform data frames\n */\n input: DataFrame[];\n onChange: (options: T) => void;\n}\n\nexport interface TransformerRegistryItem<TOptions = any> extends RegistryItem {\n /**\n * Object describing transformer configuration\n */\n transformation: DataTransformerInfo<TOptions>;\n\n /** Markdown with more detailed description and help */\n help?: string;\n\n /**\n * React component used as UI for the transformer\n */\n editor: React.ComponentType<TransformerUIProps<TOptions>>;\n\n /**\n * Set of categories associated with the transformer\n */\n categories?: Set<TransformerCategory>;\n\n /**\n * Set of tags associated with the transformer for improved transformation search\n */\n tags?: Set<string>;\n\n /**\n * Image representing the transformer, for dark themes\n */\n imageDark: string;\n\n /**\n * Image representing the transformer, for light themes\n */\n imageLight: string;\n}\n\nexport enum TransformerCategory {\n Combine = 'combine',\n CalculateNewFields = 'calculateNewFields',\n CreateNewVisualization = 'createNewVisualization',\n Filter = 'filter',\n PerformSpatialOperations = 'performSpatialOperations',\n Reformat = 'reformat',\n ReorderAndRename = 'reorderAndRename',\n}\n\n/**\n * Registry of transformation options that can be driven by\n * stored configuration files.\n */\nexport const standardTransformersRegistry = new Registry<TransformerRegistryItem>();\n","export const isFulfilled = <T>(promise: PromiseSettledResult<T>): promise is PromiseFulfilledResult<T> =>\n promise.status === 'fulfilled';\n\n// TS<5 does not support `in` operator for type narrowing. once we upgrade to TS5, we can remove this function and just use the in operator instead.\nexport function hasKey<K extends string, T extends object>(k: K, o: T): o is T & Record<K, unknown> {\n return k in o;\n}\n","import { getTimeField, sortDataFrame } from '../../dataframe/processDataFrame';\nimport { DataFrame, Field, FieldType, TIME_SERIES_VALUE_FIELD_NAME } from '../../types/dataFrame';\nimport { FieldMatcher } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { JoinMode } from './joinByField';\n\nexport function pickBestJoinField(data: DataFrame[]): FieldMatcher {\n const { timeField } = getTimeField(data[0]);\n if (timeField) {\n return fieldMatchers.get(FieldMatcherID.firstTimeField).get({});\n }\n let common: string[] = [];\n for (const f of data[0].fields) {\n if (f.type === FieldType.number) {\n common.push(f.name);\n }\n }\n\n for (let i = 1; i < data.length; i++) {\n const names: string[] = [];\n for (const f of data[0].fields) {\n if (f.type === FieldType.number) {\n names.push(f.name);\n }\n }\n common = common.filter((v) => !names.includes(v));\n }\n\n return fieldMatchers.get(FieldMatcherID.byName).get(common[0]);\n}\n\n/**\n * @internal\n */\nexport interface JoinOptions {\n /**\n * The input fields\n */\n frames: DataFrame[];\n\n /**\n * The field to join -- frames that do not have this field will be dropped\n */\n joinBy?: FieldMatcher;\n\n /**\n * Optionally filter the non-join fields\n */\n keep?: FieldMatcher;\n\n /**\n * @internal -- used when we need to keep a reference to the original frame/field index\n */\n keepOriginIndices?: boolean;\n\n /**\n * @internal -- keep any pre-cached state.displayName\n */\n keepDisplayNames?: boolean;\n\n /**\n * @internal -- Optionally specify how to treat null values\n */\n nullMode?: (field: Field) => JoinNullMode;\n\n /**\n * @internal -- Optionally specify a join mode (outer or inner)\n */\n mode?: JoinMode;\n}\n\nfunction getJoinMatcher(options: JoinOptions): FieldMatcher {\n return options.joinBy ?? pickBestJoinField(options.frames);\n}\n\n/**\n * @internal\n */\nexport function maybeSortFrame(frame: DataFrame, fieldIdx: number) {\n if (fieldIdx >= 0) {\n let sortByField = frame.fields[fieldIdx];\n\n if (sortByField.type !== FieldType.string && !isLikelyAscendingVector(sortByField.values)) {\n frame = sortDataFrame(frame, fieldIdx);\n }\n }\n\n return frame;\n}\n\n/**\n * This will return a single frame joined by the first matching field. When a join field is not specified,\n * the default will use the first time field\n */\nexport function joinDataFrames(options: JoinOptions): DataFrame | undefined {\n if (!options.frames?.length) {\n return;\n }\n\n const nullMode =\n options.nullMode ??\n ((field: Field) => {\n let spanNulls = field.config.custom?.spanNulls;\n return spanNulls === true ? NULL_REMOVE : spanNulls === -1 ? NULL_RETAIN : NULL_EXPAND;\n });\n\n if (options.frames.length === 1) {\n let frame = options.frames[0];\n let frameCopy = frame;\n\n const joinFieldMatcher = getJoinMatcher(options);\n let joinIndex = frameCopy.fields.findIndex((f) => joinFieldMatcher(f, frameCopy, options.frames));\n\n if (options.keepOriginIndices) {\n frameCopy = {\n ...frame,\n fields: frame.fields.map((f, fieldIndex) => {\n const copy = { ...f };\n const origin = {\n frameIndex: 0,\n fieldIndex,\n };\n if (copy.state) {\n copy.state.origin = origin;\n } else {\n copy.state = { origin };\n }\n return copy;\n }),\n };\n\n // Make sure the join field is first\n if (joinIndex > 0) {\n const joinField = frameCopy.fields[joinIndex];\n const fields = frameCopy.fields.filter((f, idx) => idx !== joinIndex);\n fields.unshift(joinField);\n frameCopy.fields = fields;\n joinIndex = 0;\n }\n }\n\n if (joinIndex >= 0) {\n frameCopy = maybeSortFrame(frameCopy, joinIndex);\n }\n\n if (options.keep) {\n let fields = frameCopy.fields.filter(\n (f, fieldIdx) => fieldIdx === joinIndex || options.keep!(f, frameCopy, options.frames)\n );\n\n // mutate already copied frame\n if (frame !== frameCopy) {\n frameCopy.fields = fields;\n } else {\n frameCopy = {\n ...frame,\n fields,\n };\n }\n }\n\n return frameCopy;\n }\n\n const nullModes: JoinNullMode[][] = [];\n const allData: AlignedData[] = [];\n const originalFields: Field[] = [];\n const joinFieldMatcher = getJoinMatcher(options);\n\n for (let frameIndex = 0; frameIndex < options.frames.length; frameIndex++) {\n const frame = options.frames[frameIndex];\n\n if (!frame || !frame.fields?.length) {\n continue; // skip the frame\n }\n\n const nullModesFrame: JoinNullMode[] = [NULL_REMOVE];\n let join: Field | undefined = undefined;\n let fields: Field[] = [];\n\n for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n const field = frame.fields[fieldIndex];\n field.state = field.state || {};\n\n if (!join && joinFieldMatcher(field, frame, options.frames)) {\n join = field;\n } else {\n if (options.keep && !options.keep(field, frame, options.frames)) {\n continue; // skip field\n }\n\n // Support the standard graph span nulls field config\n nullModesFrame.push(nullMode(field));\n\n let labels = field.labels ?? {};\n let name = field.name;\n if (frame.name) {\n if (field.name === TIME_SERIES_VALUE_FIELD_NAME) {\n name = frame.name;\n } else if (labels.name == null) {\n // add the name label from frame\n labels = { ...labels, name: frame.name };\n }\n }\n\n fields.push({\n ...field,\n name,\n labels,\n });\n }\n\n if (options.keepOriginIndices) {\n field.state.origin = {\n frameIndex,\n fieldIndex,\n };\n }\n }\n\n if (!join) {\n continue; // skip the frame\n }\n\n if (originalFields.length === 0) {\n originalFields.push(join); // first join field\n }\n\n nullModes.push(nullModesFrame);\n const a: AlignedData = [join.values]; //\n\n for (const field of fields) {\n a.push(field.values);\n originalFields.push(field);\n if (!options.keepDisplayNames) {\n // clear field displayName state\n delete field.state?.displayName;\n }\n }\n allData.push(a);\n }\n\n let joined: Array<Array<number | string | null | undefined>> = [];\n\n if (options.mode === JoinMode.outerTabular) {\n joined = joinTabular(allData, true);\n } else if (options.mode === JoinMode.inner) {\n joined = joinTabular(allData);\n } else {\n joined = join(allData, nullModes, options.mode);\n }\n\n return {\n // ...options.data[0], // keep name, meta?\n length: joined[0] ? joined[0].length : 0,\n fields: originalFields.map((f, index) => ({\n ...f,\n values: joined[index],\n })),\n };\n}\n\n/**\n * SQL-style join of tables, using the first column in each\n */\nfunction joinTabular(tables: AlignedData[], outer = false) {\n // console.time('joinTabular');\n\n let ltable = tables[0];\n let lfield = ltable[0];\n\n // iterate tables, merging right table with left, with the result becoming the new left\n // rinse and repeat for each tables in the array\n for (let ti = 1; ti < tables.length; ti++) {\n let rtable = tables[ti];\n let rfield = rtable[0];\n\n /**\n * Build an inverted index of the right table's join column like { \"foo\": [1,2,3], \"bar\": [7,12], ... }\n * where the keys are unique values and the arrays are indices where these values were found\n */\n // console.time('index right');\n let index: Record<string | number, number[]> = {};\n\n for (let i = 0; i < rfield.length; i++) {\n let val = rfield[i];\n\n let idxs = index[val];\n\n if (idxs == null) {\n idxs = index[val] = [];\n }\n\n idxs.push(i);\n }\n // console.timeEnd('index right');\n\n /**\n * Loop over the left table's join column and match each non-null value to the right index,\n * copying the matched ridxs array into new matched list, like [33, [45,79,233]], where first\n * value is left idx and second value is right idxs\n *\n * Also keep track of unmatched or null left values for outer join, since we'll need to include these\n */\n let matchedKeys = new Set();\n let unmatchedLeft = [];\n let unmatchedRight = [];\n\n // console.time('match left');\n let matched: Array<[lidx: number, ridxs: number[]]> = [];\n\n // count of total number of output rows, so we can\n // pre-allocate the final array size during materialization\n let count = 0;\n\n for (let i = 0; i < lfield.length; i++) {\n let v = lfield[i];\n\n if (v != null) {\n let idxs = index[v];\n\n if (idxs != null) {\n matched.push([i, idxs]);\n count += idxs.length;\n outer && matchedKeys.add(v);\n } else if (outer) {\n unmatchedLeft.push(i);\n }\n } else if (outer) {\n unmatchedLeft.push(i);\n }\n }\n count += unmatchedLeft.length;\n // console.timeEnd('match left');\n\n /**\n * For outer joins, also loop over the right index to record unmatched values\n */\n // console.time('unmatched right');\n if (outer) {\n for (let k in index) {\n if (!matchedKeys.has(k)) {\n unmatchedRight.push(...index[k]);\n }\n }\n count += unmatchedRight.length;\n }\n // console.timeEnd('unmatched right');\n\n /**\n * Now we can use matched, unmatchedLeft, unmatchedRight, ltable, and rtable to assemble the final table\n * Instead of using 3-deep nested loops, we eliminate the loops over the known column structure\n * For this we compile a new function using the schemas from both tables, and filling that struct by looping\n * over the matched lookup array, then appending the unmatched left rows (and null-filling the right values),\n * then appending the unmatched right rows (and null-filling the left values).\n *\n * The assembled function looks something like this when joining 2-col left + 2-col right:\n *\n * function anonymous(matched, unmatchedLeft, unmatchedRight, ltable, rtable) {\n * const joined = [Array(99991),Array(99991),Array(99991)];\n *\n * let rowIdx = 0;\n *\n * for (let i = 0; i < matched.length; i++) {\n * let [lidx, ridxs] = matched[i];\n *\n * for (let j = 0; j < ridxs.length; j++, rowIdx++) {\n * let ridx = ridxs[j];\n * joined[0][rowIdx] = ltable[0][lidx];\n * joined[1][rowIdx] = ltable[1][lidx];\n * joined[2][rowIdx] = rtable[1][ridx];\n * }\n * }\n *\n * for (let i = 0; i < unmatchedLeft.length; i++, rowIdx++) {\n * let lidx = unmatchedLeft[i];\n * joined[0][rowIdx] = ltable[0][lidx];\n * joined[1][rowIdx] = ltable[1][lidx];\n * joined[2][rowIdx] = null;\n * }\n *\n * for (let i = 0; i < unmatchedRight.length; i++, rowIdx++) {\n * let ridx = unmatchedRight[i];\n * joined[0][rowIdx] = rtable[0][ridx];\n * joined[1][rowIdx] = null;\n * joined[2][rowIdx] = rtable[1][ridx];\n * }\n *\n * return joined;\n * }\n */\n // console.time('materialize');\n let outFieldsTpl = Array.from({ length: ltable.length + rtable.length - 1 }, () => `Array(${count})`).join(',');\n let copyLeftRowTpl = ltable.map((c, i) => `joined[${i}][rowIdx] = ltable[${i}][lidx]`).join(';');\n // (skips join field in right table)\n let copyRightRowTpl = rtable\n .slice(1)\n .map((c, i) => `joined[${ltable.length + i}][rowIdx] = rtable[${i + 1}][ridx]`)\n .join(';');\n\n // for outer joins, when we null-fill the left row values, we still populate the first (join) column\n // with the right row's join column value, rather than omitting it as we do for matched left/right where\n // that value is already filled by the left row\n let nullLeftRowTpl = ltable\n .map((c, i) => `joined[${i}][rowIdx] = ${i === 0 ? `rtable[${i}][ridx]` : `null`}`)\n .join(';');\n // (skips join field in right table)\n let nullRightRowTpl = rtable.slice(1).map((c, i) => `joined[${ltable.length + i}][rowIdx] = null`);\n\n let materialize = new Function(\n 'matched',\n 'unmatchedLeft',\n 'unmatchedRight',\n 'ltable',\n 'rtable',\n `\n const joined = [${outFieldsTpl}];\n\n let rowIdx = 0;\n\n for (let i = 0; i < matched.length; i++) {\n let [lidx, ridxs] = matched[i];\n\n for (let j = 0; j < ridxs.length; j++, rowIdx++) {\n let ridx = ridxs[j];\n ${copyLeftRowTpl};\n ${copyRightRowTpl};\n }\n }\n\n for (let i = 0; i < unmatchedLeft.length; i++, rowIdx++) {\n let lidx = unmatchedLeft[i];\n ${copyLeftRowTpl};\n ${nullRightRowTpl};\n }\n\n for (let i = 0; i < unmatchedRight.length; i++, rowIdx++) {\n let ridx = unmatchedRight[i];\n ${nullLeftRowTpl};\n ${copyRightRowTpl};\n }\n\n return joined;\n `\n );\n\n let joined = materialize(matched, unmatchedLeft, unmatchedRight, ltable, rtable);\n // console.timeEnd('materialize');\n\n ltable = joined;\n lfield = ltable[0];\n }\n\n // console.timeEnd('joinTabular');\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return ltable as Array<Array<string | number | null | undefined>>;\n}\n\n//--------------------------------------------------------------------------------\n// Below here is copied from uplot (MIT License)\n// https://github.com/leeoniya/uPlot/blob/master/src/utils.js#L325\n// This avoids needing to import uplot into the data package\n//--------------------------------------------------------------------------------\n\n// Copied from uplot\nexport type TypedArray =\n | Int8Array\n | Uint8Array\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Uint8ClampedArray\n | Float32Array\n | Float64Array;\n\nexport type AlignedData =\n | TypedArray[]\n | [xValues: number[] | TypedArray, ...yValues: Array<Array<number | null | undefined> | TypedArray>];\n\n// nullModes\nexport const NULL_REMOVE = 0; // nulls are converted to undefined (e.g. for spanGaps: true)\nexport const NULL_RETAIN = 1; // nulls are retained, with alignment artifacts set to undefined (default)\nexport const NULL_EXPAND = 2; // nulls are expanded to include any adjacent alignment artifacts\n\ntype JoinNullMode = number; // NULL_IGNORE | NULL_RETAIN | NULL_EXPAND;\n\n// sets undefined values to nulls when adjacent to existing nulls (minesweeper)\nfunction nullExpand(yVals: Array<number | null>, nullIdxs: number[], alignedLen: number) {\n for (let i = 0, xi, lastNullIdx = -1; i < nullIdxs.length; i++) {\n let nullIdx = nullIdxs[i];\n\n if (nullIdx > lastNullIdx) {\n xi = nullIdx - 1;\n while (xi >= 0 && yVals[xi] == null) {\n yVals[xi--] = null;\n }\n\n xi = nullIdx + 1;\n while (xi < alignedLen && yVals[xi] == null) {\n yVals[(lastNullIdx = xi++)] = null;\n }\n }\n }\n}\n\n// nullModes is a tables-matched array indicating how to treat nulls in each series\nexport function join(tables: AlignedData[], nullModes?: number[][], mode: JoinMode = JoinMode.outer) {\n let xVals: Set<number> = new Set();\n\n for (let ti = 0; ti < tables.length; ti++) {\n let t = tables[ti];\n let xs = t[0];\n let len = xs.length;\n\n for (let i = 0; i < len; i++) {\n xVals.add(xs[i]);\n }\n }\n\n let data = [Array.from(xVals).sort((a, b) => a - b)];\n\n let alignedLen = data[0].length;\n\n let xIdxs = new Map();\n\n for (let i = 0; i < alignedLen; i++) {\n xIdxs.set(data[0][i], i);\n }\n\n for (let ti = 0; ti < tables.length; ti++) {\n let t = tables[ti];\n let xs = t[0];\n\n for (let si = 1; si < t.length; si++) {\n let ys = t[si];\n\n let yVals = Array(alignedLen).fill(undefined);\n\n let nullMode = nullModes ? nullModes[ti][si] : NULL_RETAIN;\n\n let nullIdxs = [];\n\n for (let i = 0; i < ys.length; i++) {\n let yVal = ys[i];\n let alignedIdx = xIdxs.get(xs[i]);\n\n if (yVal === null) {\n if (nullMode !== NULL_REMOVE) {\n yVals[alignedIdx] = yVal;\n\n if (nullMode === NULL_EXPAND) {\n nullIdxs.push(alignedIdx);\n }\n }\n } else {\n yVals[alignedIdx] = yVal;\n }\n }\n\n nullExpand(yVals, nullIdxs, alignedLen);\n\n data.push(yVals);\n }\n }\n\n return data;\n}\n\n// Test a few samples to see if the values are ascending\n// Only exported for tests\nexport function isLikelyAscendingVector(data: unknown[], samples = 50) {\n const len = data.length;\n\n // empty or single value\n if (len <= 1) {\n return true;\n }\n\n // skip leading & trailing nullish\n let firstIdx = 0;\n let lastIdx = len - 1;\n\n while (firstIdx <= lastIdx && data[firstIdx] == null) {\n firstIdx++;\n }\n\n while (lastIdx >= firstIdx && data[lastIdx] == null) {\n lastIdx--;\n }\n\n // all nullish or one value surrounded by nullish\n if (lastIdx <= firstIdx) {\n return true;\n }\n\n const stride = Math.max(1, Math.floor((lastIdx - firstIdx + 1) / samples));\n\n for (let prevVal = data[firstIdx], i = firstIdx + stride; i <= lastIdx; i += stride) {\n const v = data[i];\n\n if (v != null && prevVal != null) {\n if (v <= prevVal) {\n return false;\n }\n\n prevVal = v;\n }\n }\n\n return true;\n}\n","import { lastValueFrom, map } from 'rxjs';\n\nimport { config, getBackendSrv, FetchResponse } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\nimport { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';\n\nimport { getAPINamespace } from '../../../api/utils';\n\n// Used in the snapshot list\nexport interface Snapshot {\n key: string;\n name: string;\n external: boolean;\n externalUrl?: string;\n url?: string;\n}\n\nexport interface SnapshotSharingOptions {\n externalEnabled: boolean;\n externalSnapshotName: string;\n externalSnapshotURL: string;\n snapshotEnabled: boolean;\n}\n\nexport interface SnapshotCreateCommand {\n dashboard: object;\n name: string;\n expires?: number;\n external?: boolean;\n}\n\nexport interface SnapshotCreateResponse {\n key: string;\n url: string;\n deleteUrl: string;\n}\n\nexport interface DashboardSnapshotSrv {\n create: (cmd: SnapshotCreateCommand) => Promise<SnapshotCreateResponse>;\n getSnapshots: () => Promise<Snapshot[]>;\n getSharingOptions: () => Promise<SnapshotSharingOptions>;\n deleteSnapshot: (key: string) => Promise<void>;\n getSnapshot: (key: string) => Promise<DashboardDTO>;\n}\n\nconst legacyDashboardSnapshotSrv: DashboardSnapshotSrv = {\n create: (cmd: SnapshotCreateCommand) => getBackendSrv().post<SnapshotCreateResponse>('/api/snapshots', cmd),\n getSnapshots: () => getBackendSrv().get<Snapshot[]>('/api/dashboard/snapshots'),\n getSharingOptions: () => getBackendSrv().get<SnapshotSharingOptions>('/api/snapshot/shared-options'),\n deleteSnapshot: (key: string) => getBackendSrv().delete('/api/snapshots/' + key),\n getSnapshot: async (key: string) => {\n try {\n const dto = await getBackendSrv().get<DashboardDTO>('/api/snapshots/' + key);\n dto.meta.canShare = false;\n return dto;\n } catch (e) {\n throw e;\n }\n },\n};\n\ninterface K8sMetadata {\n name: string;\n namespace: string;\n resourceVersion: string;\n creationTimestamp: string;\n}\n\ninterface K8sSnapshotInfo {\n title: string;\n externalUrl?: string;\n expires?: number;\n}\n\ninterface K8sSnapshotResource {\n metadata: K8sMetadata;\n spec: K8sSnapshotInfo;\n}\n\ninterface DashboardSnapshotList {\n items: K8sSnapshotResource[];\n}\n\ninterface K8sDashboardSnapshot {\n apiVersion: string;\n kind: 'DashboardSnapshot';\n metadata: K8sMetadata;\n dashboard: DashboardDataDTO;\n}\n\nclass K8sAPI implements DashboardSnapshotSrv {\n readonly apiVersion = 'dashboardsnapshot.grafana.app/v0alpha1';\n readonly url: string;\n\n constructor() {\n this.url = `/apis/${this.apiVersion}/namespaces/${getAPINamespace()}/dashboardsnapshots`;\n }\n\n async create(cmd: SnapshotCreateCommand) {\n return getBackendSrv().post<SnapshotCreateResponse>(this.url + '/create', cmd);\n }\n\n async getSnapshots(): Promise<Snapshot[]> {\n const result = await getBackendSrv().get<DashboardSnapshotList>(this.url);\n return result.items.map((r) => {\n return {\n key: r.metadata.name,\n name: r.spec.title,\n external: r.spec.externalUrl != null,\n externalUrl: r.spec.externalUrl,\n };\n });\n }\n\n deleteSnapshot(uid: string) {\n return getBackendSrv().delete<void>(this.url + '/' + uid);\n }\n\n async getSharingOptions() {\n // TODO? should this be in a config service, or in the same service?\n // we have http://localhost:3000/apis/dashboardsnapshot.grafana.app/v0alpha1/namespaces/default/options\n // BUT that has an unclear user mapping story still, so lets stick with the existing shared-options endpoint\n return getBackendSrv().get<SnapshotSharingOptions>('/api/snapshot/shared-options');\n }\n\n async getSnapshot(uid: string): Promise<DashboardDTO> {\n const headers: Record<string, string> = {};\n if (!contextSrv.isSignedIn) {\n alert('TODO... need a barer token for anonymous use case');\n const token = `??? TODO, get anon token for snapshots (${contextSrv.user?.name}) ???`;\n headers['Authorization'] = `Bearer ${token}`;\n }\n return lastValueFrom(\n getBackendSrv()\n .fetch<K8sDashboardSnapshot>({\n url: this.url + '/' + uid + '/body',\n method: 'GET',\n headers: headers,\n })\n .pipe(\n map((response: FetchResponse<K8sDashboardSnapshot>) => {\n return {\n dashboard: response.data.dashboard,\n meta: {\n isSnapshot: true,\n canSave: false,\n canEdit: false,\n canAdmin: false,\n canStar: false,\n canShare: false,\n canDelete: false,\n isFolder: false,\n provisioned: false,\n },\n };\n })\n )\n );\n }\n}\n\nexport function getDashboardSnapshotSrv(): DashboardSnapshotSrv {\n if (config.featureToggles.kubernetesSnapshots) {\n return new K8sAPI();\n }\n return legacyDashboardSnapshotSrv;\n}\n","import { css } from '@emotion/css';\nimport { capitalize } from 'lodash';\nimport React, { useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Button, Combobox, ComboboxOption, Field, InlineSwitch, Input, Stack, useStyles2 } from '@grafana/ui';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { AutoGridColumnWidth, AutoGridRowHeight, AutoGridLayoutManager } from './AutoGridLayoutManager';\n\nexport function getEditOptions(layoutManager: AutoGridLayoutManager): OptionsPaneItemDescriptor[] {\n const options: OptionsPaneItemDescriptor[] = [];\n\n options.push(\n new OptionsPaneItemDescriptor({\n id: 'layout-auto-grid-column-options',\n title: t('dashboard-scene.get-edit-options.title.column-options', 'Column options'),\n skipField: true,\n render: () => <GridLayoutColumns layoutManager={layoutManager} />,\n })\n );\n\n options.push(\n new OptionsPaneItemDescriptor({\n id: 'layout-auto-grid-row-height',\n title: t('dashboard-scene.get-edit-options.title.row-height-options', 'Row height options'),\n skipField: true,\n render: () => <GridLayoutRows layoutManager={layoutManager} />,\n })\n );\n\n return options;\n}\n\nfunction GridLayoutColumns({ layoutManager }: { layoutManager: AutoGridLayoutManager }) {\n const { maxColumnCount, columnWidth } = layoutManager.useState();\n const [inputRef, setInputRef] = React.useState<HTMLInputElement | null>(null);\n const [focusInput, setFocusInput] = React.useState(false);\n const [customMinWidthError, setCustomMinWidthError] = React.useState(false);\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n if (focusInput && inputRef) {\n inputRef.focus();\n setFocusInput(false);\n }\n }, [focusInput, inputRef]);\n\n const minWidthOptions: Array<ComboboxOption<AutoGridColumnWidth>> = [\n 'narrow' as const,\n 'standard' as const,\n 'wide' as const,\n 'custom' as const,\n ].map((value) => ({\n label: capitalize(value),\n value,\n }));\n\n const isStandardMinWidth = typeof columnWidth === 'string';\n\n const minWidthLabel = isStandardMinWidth\n ? t('dashboard.auto-grid.options.min-width', 'Min column width')\n : t('dashboard.auto-grid.options.min-width-custom', 'Custom min width');\n const colOptions = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'].map((value) => ({ label: value, value }));\n\n const onCustomMinWidthChanged = (e: React.ChangeEvent<HTMLInputElement>) => {\n const pixels = parseInt(e.target.value, 10);\n if (isNaN(pixels) || pixels < 50 || pixels > 2000) {\n setCustomMinWidthError(true);\n return;\n } else if (customMinWidthError) {\n setCustomMinWidthError(false);\n }\n\n layoutManager.onColumnWidthChanged(pixels);\n };\n\n const onNamedMinWidthChanged = (value: ComboboxOption<AutoGridColumnWidth>) => {\n if (value.value === 'custom') {\n setFocusInput(true);\n }\n layoutManager.onColumnWidthChanged(value.value);\n };\n\n const onClearCustomMinWidth = () => {\n if (customMinWidthError) {\n setCustomMinWidthError(false);\n }\n\n layoutManager.onColumnWidthChanged('standard');\n };\n\n return (\n <Stack columnGap={2} rowGap={0} wrap>\n <Field\n label={minWidthLabel}\n invalid={customMinWidthError}\n error={\n customMinWidthError\n ? t('dashboard.auto-grid.options.min-width-error', 'A number between 50 and 2000 is required')\n : undefined\n }\n className={styles.wideSelector}\n >\n {isStandardMinWidth ? (\n <Combobox\n id=\"min-column-width\"\n options={minWidthOptions}\n value={columnWidth}\n onChange={onNamedMinWidthChanged}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.minColumnWidth}\n />\n ) : (\n <Input\n id=\"min-column-width\"\n defaultValue={columnWidth}\n onBlur={onCustomMinWidthChanged}\n ref={(ref) => setInputRef(ref)}\n type=\"number\"\n min={50}\n max={2000}\n invalid={customMinWidthError}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.customMinColumnWidth}\n suffix={\n <Button\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n tooltip={t('dashboard.auto-grid.options.min-width-custom-clear', 'Back to standard min column width')}\n onClick={onClearCustomMinWidth}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.clearCustomMinColumnWidth}\n >\n {t('dashboard.auto-grid.options.custom-min-width.clear', 'Clear')}\n </Button>\n }\n />\n )}\n </Field>\n <Field label={t('dashboard.auto-grid.options.max-columns', 'Max columns')} className={styles.narrowSelector}>\n <Combobox\n id=\"max-columns\"\n options={colOptions}\n value={String(maxColumnCount)}\n onChange={({ value }) => layoutManager.onMaxColumnCountChanged(parseInt(value, 10))}\n width={6.5}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.maxColumns}\n />\n </Field>\n </Stack>\n );\n}\n\nfunction GridLayoutRows({ layoutManager }: { layoutManager: AutoGridLayoutManager }) {\n const { rowHeight, fillScreen } = layoutManager.useState();\n const [inputRef, setInputRef] = React.useState<HTMLInputElement | null>(null);\n const [focusInput, setFocusInput] = React.useState(false);\n const [customMinWidthError, setCustomMinWidthError] = React.useState(false);\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n if (focusInput && inputRef) {\n inputRef.focus();\n setFocusInput(false);\n }\n }, [focusInput, inputRef]);\n\n const minWidthOptions: Array<ComboboxOption<AutoGridRowHeight>> = [\n 'short' as const,\n 'standard' as const,\n 'tall' as const,\n 'custom' as const,\n ].map((value) => ({\n label: capitalize(value),\n value,\n }));\n\n const isStandardHeight = typeof rowHeight === 'string';\n const rowHeightLabel = rowHeight\n ? t('dashboard.auto-grid.options.min-height', 'Row height')\n : t('dashboard.auto-grid.options.min-height-custom', 'Custom row height');\n\n const onCustomHeightChanged = (e: React.ChangeEvent<HTMLInputElement>) => {\n const pixels = parseInt(e.target.value, 10);\n if (isNaN(pixels) || pixels < 50 || pixels > 2000) {\n setCustomMinWidthError(true);\n return;\n } else if (customMinWidthError) {\n setCustomMinWidthError(false);\n }\n\n layoutManager.onRowHeightChanged(pixels);\n };\n\n const onNamedMinHeightChanged = (value: ComboboxOption<AutoGridRowHeight>) => {\n if (value.value === 'custom') {\n setFocusInput(true);\n }\n layoutManager.onRowHeightChanged(value.value);\n };\n\n const onClearCustomRowHeight = () => {\n if (customMinWidthError) {\n setCustomMinWidthError(false);\n }\n\n layoutManager.onRowHeightChanged('standard');\n };\n\n return (\n <Stack columnGap={2} rowGap={0} wrap>\n <Field\n label={rowHeightLabel}\n invalid={customMinWidthError}\n error={\n customMinWidthError\n ? t('dashboard.auto-grid.options.min-height-error', 'A number between 50 and 2000 is required')\n : undefined\n }\n className={styles.wideSelector}\n >\n {isStandardHeight ? (\n <Combobox\n id=\"min-height\"\n options={minWidthOptions}\n value={rowHeight}\n onChange={onNamedMinHeightChanged}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.rowHeight}\n />\n ) : (\n <Input\n id=\"min-height\"\n defaultValue={rowHeight}\n onBlur={onCustomHeightChanged}\n ref={(ref) => setInputRef(ref)}\n type=\"number\"\n min={50}\n max={2000}\n invalid={customMinWidthError}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.customRowHeight}\n suffix={\n <Button\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n tooltip={t('dashboard.auto-grid.options.min-width-custom-clear', 'Back to standard min column width')}\n onClick={onClearCustomRowHeight}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.clearCustomRowHeight}\n >\n {t('dashboard.auto-grid.options.custom-min-height.clear', 'Clear')}\n </Button>\n }\n />\n )}\n </Field>\n <Field label={t('dashboard.auto-grid.options.height-fill', 'Fill screen')} className={styles.narrowSelector}>\n <InlineSwitch\n id=\"fill-screen-toggle\"\n value={fillScreen}\n onChange={() => layoutManager.onFillScreenChanged(!fillScreen)}\n data-testid={selectors.components.PanelEditor.ElementEditPane.AutoGridLayout.fillScreen}\n />\n </Field>\n </Stack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wideSelector: css({\n minWidth: theme.spacing(14),\n flex: `1 1 ${theme.spacing(14)}`,\n }),\n narrowSelector: css({\n width: theme.spacing(10),\n }),\n});\n","import { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps, SceneObject, SceneObjectBase, SceneObjectState, VizPanel } from '@grafana/scenes';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { GRID_CELL_VMARGIN } from 'app/core/constants';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { dashboardEditActions, NewObjectAddedToCanvasEvent } from '../../edit-pane/shared';\nimport { serializeAutoGridLayout } from '../../serialization/layoutSerializers/AutoGridLayoutSerializer';\nimport { dashboardSceneGraph } from '../../utils/dashboardSceneGraph';\nimport {\n forceRenderChildren,\n getDashboardSceneFor,\n getGridItemKeyForPanelId,\n getVizPanelKeyForPanelId,\n} from '../../utils/utils';\nimport { DashboardGridItem } from '../layout-default/DashboardGridItem';\nimport { clearClipboard, getAutoGridItemFromClipboard } from '../layouts-shared/paste';\nimport { DashboardLayoutGrid } from '../types/DashboardLayoutGrid';\nimport { DashboardLayoutManager } from '../types/DashboardLayoutManager';\nimport { LayoutRegistryItem } from '../types/LayoutRegistryItem';\n\nimport { AutoGridItem } from './AutoGridItem';\nimport { AutoGridLayout } from './AutoGridLayout';\nimport { getEditOptions } from './AutoGridLayoutManagerEditor';\n\ninterface AutoGridLayoutManagerState extends SceneObjectState {\n layout: AutoGridLayout;\n maxColumnCount: number;\n rowHeight: AutoGridRowHeight;\n columnWidth: AutoGridColumnWidth;\n fillScreen: boolean;\n}\n\nexport type AutoGridColumnWidth = 'narrow' | 'standard' | 'wide' | 'custom' | number;\nexport type AutoGridRowHeight = 'short' | 'standard' | 'tall' | 'custom' | number;\n\nexport const AUTO_GRID_DEFAULT_MAX_COLUMN_COUNT = 3;\nexport const AUTO_GRID_DEFAULT_COLUMN_WIDTH = 'standard';\nexport const AUTO_GRID_DEFAULT_ROW_HEIGHT = 'standard';\n\nexport class AutoGridLayoutManager extends SceneObjectBase<AutoGridLayoutManagerState> implements DashboardLayoutGrid {\n public static Component = AutoGridLayoutManagerRenderer;\n\n public readonly isDashboardLayoutManager = true;\n\n public static readonly descriptor: LayoutRegistryItem = {\n get name() {\n return t('dashboard.auto-grid.name', 'Auto grid');\n },\n get description() {\n return t('dashboard.auto-grid.description', 'Panels resize to fit and form uniform grids');\n },\n id: 'AutoGridLayout',\n createFromLayout: AutoGridLayoutManager.createFromLayout,\n isGridLayout: true,\n icon: 'apps',\n };\n\n public serialize(): DashboardV2Spec['layout'] {\n return serializeAutoGridLayout(this);\n }\n\n public readonly descriptor = AutoGridLayoutManager.descriptor;\n\n public constructor(state: Partial<AutoGridLayoutManagerState>) {\n const maxColumnCount = state.maxColumnCount ?? AUTO_GRID_DEFAULT_MAX_COLUMN_COUNT;\n const columnWidth = state.columnWidth ?? AUTO_GRID_DEFAULT_COLUMN_WIDTH;\n const rowHeight = state.rowHeight ?? AUTO_GRID_DEFAULT_ROW_HEIGHT;\n const fillScreen = state.fillScreen ?? false;\n\n super({\n ...state,\n maxColumnCount,\n columnWidth,\n rowHeight,\n fillScreen,\n layout:\n state.layout ??\n new AutoGridLayout({\n isDraggable: true,\n templateColumns: getTemplateColumnsTemplate(maxColumnCount, columnWidth),\n autoRows: getAutoRowsTemplate(rowHeight, fillScreen),\n }),\n });\n }\n\n public getOutlineChildren(): SceneObject[] {\n const children: SceneObject[] = [];\n\n for (const child of this.state.layout.state.children) {\n children.push(child.state.body, ...(child.state.repeatedPanels || []));\n }\n\n return children;\n }\n\n public addPanel(vizPanel: VizPanel) {\n const panelId = dashboardSceneGraph.getNextPanelId(this);\n\n vizPanel.setState({ key: getVizPanelKeyForPanelId(panelId) });\n vizPanel.clearParent();\n\n const newGridItem = new AutoGridItem({ body: vizPanel });\n\n dashboardEditActions.addElement({\n addedObject: vizPanel,\n source: this,\n perform: () => {\n this.state.layout.setState({ children: [...this.state.layout.state.children, newGridItem] });\n },\n undo: () => {\n this.state.layout.setState({\n children: this.state.layout.state.children.filter((child) => child !== newGridItem),\n });\n },\n });\n }\n\n public pastePanel() {\n const panel = getAutoGridItemFromClipboard(getDashboardSceneFor(this));\n if (config.featureToggles.dashboardNewLayouts) {\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.paste-panel', 'Paste panel'),\n addedObject: panel.state.body,\n source: this,\n perform: () => {\n this.state.layout.setState({ children: [...this.state.layout.state.children, panel] });\n },\n undo: () => {\n this.state.layout.setState({\n children: this.state.layout.state.children.filter((child) => child !== panel),\n });\n },\n });\n } else {\n this.state.layout.setState({ children: [...this.state.layout.state.children, panel] });\n this.publishEvent(new NewObjectAddedToCanvasEvent(panel), true);\n }\n\n clearClipboard();\n }\n\n public removePanel(panel: VizPanel) {\n const gridItem = panel.parent;\n if (!(gridItem instanceof AutoGridItem)) {\n return;\n }\n\n const gridItemIndex = this.state.layout.state.children.indexOf(gridItem);\n\n dashboardEditActions.removeElement({\n removedObject: panel,\n source: this,\n perform: () => {\n this.state.layout.setState({\n children: this.state.layout.state.children.filter((child) => child !== gridItem),\n });\n },\n undo: () => {\n this.state.layout.setState({\n children: [\n ...this.state.layout.state.children.slice(0, gridItemIndex),\n gridItem,\n ...this.state.layout.state.children.slice(gridItemIndex),\n ],\n });\n },\n });\n }\n\n public duplicate(): DashboardLayoutManager {\n const children = this.state.layout.state.children;\n const clonedChildren: AutoGridItem[] = [];\n\n if (children.length) {\n let panelId = dashboardSceneGraph.getNextPanelId(children[0].state.body);\n\n children.forEach((child) => {\n const clone = child.clone({\n key: undefined,\n body: child.state.body.clone({\n key: getVizPanelKeyForPanelId(panelId),\n }),\n });\n\n clonedChildren.push(clone);\n panelId++;\n });\n }\n\n return this.clone({\n key: undefined,\n layout: this.state.layout.clone({\n key: undefined,\n children: clonedChildren,\n }),\n });\n }\n\n public mergeGrid(other: DashboardLayoutGrid) {\n const sourceLayout =\n other instanceof AutoGridLayoutManager\n ? other.state.layout\n : AutoGridLayoutManager.createFromLayout(other).state.layout;\n const movedChildren = [...sourceLayout.state.children];\n\n // Remove from source and append to destination\n sourceLayout.setState({ children: [] });\n movedChildren.forEach((child) => {\n child.clearParent();\n });\n this.state.layout.setState({ children: [...this.state.layout.state.children, ...movedChildren] });\n }\n\n public duplicatePanel(panel: VizPanel) {\n const gridItem = panel.parent;\n if (!(gridItem instanceof AutoGridItem)) {\n console.error('Trying to duplicate a panel that is not inside a DashboardGridItem');\n return;\n }\n\n const newPanelId = dashboardSceneGraph.getNextPanelId(this);\n const grid = this.state.layout;\n\n const newPanel = panel.clone({\n key: getVizPanelKeyForPanelId(newPanelId),\n });\n\n const newGridItem = gridItem.clone({\n key: getGridItemKeyForPanelId(newPanelId),\n body: newPanel,\n });\n\n const sourceIndex = grid.state.children.indexOf(gridItem);\n const newChildren = [...grid.state.children];\n\n // insert after\n newChildren.splice(sourceIndex + 1, 0, newGridItem);\n\n grid.setState({ children: newChildren });\n\n this.publishEvent(new NewObjectAddedToCanvasEvent(newPanel), true);\n }\n\n public getVizPanels(): VizPanel[] {\n const panels: VizPanel[] = [];\n\n for (const child of this.state.layout.state.children) {\n if (child instanceof AutoGridItem) {\n panels.push(child.state.body);\n }\n }\n\n return panels;\n }\n\n public editModeChanged(isEditing: boolean) {\n this.state.layout.setState({ isDraggable: isEditing });\n forceRenderChildren(this.state.layout, true);\n }\n\n public cloneLayout(ancestorKey: string, isSource: boolean): DashboardLayoutManager {\n return this.clone({});\n }\n\n public getOptions(): OptionsPaneItemDescriptor[] {\n return getEditOptions(this);\n }\n\n public onMaxColumnCountChanged(maxColumnCount: number) {\n this.setState({ maxColumnCount: maxColumnCount });\n this.state.layout.setState({\n templateColumns: getTemplateColumnsTemplate(maxColumnCount, this.state.columnWidth),\n });\n }\n\n public onColumnWidthChanged(columnWidth: AutoGridColumnWidth) {\n if (columnWidth === 'custom') {\n columnWidth = getNamedColumWidthInPixels(this.state.columnWidth);\n }\n\n this.setState({ columnWidth: columnWidth });\n this.state.layout.setState({\n templateColumns: getTemplateColumnsTemplate(this.state.maxColumnCount, this.state.columnWidth),\n });\n }\n\n public onFillScreenChanged(fillScreen: boolean) {\n this.setState({ fillScreen });\n this.state.layout.setState({\n autoRows: getAutoRowsTemplate(this.state.rowHeight, fillScreen),\n });\n }\n\n public onRowHeightChanged(rowHeight: AutoGridRowHeight) {\n if (rowHeight === 'custom') {\n rowHeight = getNamedHeightInPixels(this.state.rowHeight);\n }\n\n this.setState({ rowHeight });\n this.state.layout.setState({\n autoRows: getAutoRowsTemplate(rowHeight, this.state.fillScreen),\n });\n }\n\n public static createEmpty(): AutoGridLayoutManager {\n return new AutoGridLayoutManager({});\n }\n\n public static createFromLayout(layout: DashboardLayoutManager): AutoGridLayoutManager {\n const panels = layout.getVizPanels();\n const children: AutoGridItem[] = [];\n\n for (let panel of panels) {\n const variableName = panel.parent instanceof DashboardGridItem ? panel.parent.state.variableName : undefined;\n children.push(new AutoGridItem({ body: panel.clone(), variableName }));\n }\n\n const layoutManager = AutoGridLayoutManager.createEmpty();\n layoutManager.state.layout.setState({\n children,\n isDraggable: getDashboardSceneFor(layout).state.isEditing,\n });\n\n return layoutManager;\n }\n}\n\nfunction AutoGridLayoutManagerRenderer({ model }: SceneComponentProps<AutoGridLayoutManager>) {\n return <model.state.layout.Component model={model.state.layout} />;\n}\n\nexport function getTemplateColumnsTemplate(maxColumnCount: number, columnWidth: AutoGridColumnWidth) {\n return `repeat(auto-fit, minmax(min(max(100% / ${maxColumnCount} - ${GRID_CELL_VMARGIN}px, ${getNamedColumWidthInPixels(columnWidth)}px), 100%), 1fr))`;\n}\n\nfunction getNamedColumWidthInPixels(columnWidth: AutoGridColumnWidth) {\n if (typeof columnWidth === 'number') {\n return columnWidth;\n }\n\n switch (columnWidth) {\n case 'narrow':\n return 192;\n case 'wide':\n return 768;\n case 'custom':\n case 'standard':\n default:\n return 448;\n }\n}\n\nfunction getNamedHeightInPixels(rowHeight: AutoGridRowHeight) {\n if (typeof rowHeight === 'number') {\n return rowHeight;\n }\n\n switch (rowHeight) {\n case 'short':\n return 168;\n case 'tall':\n return 512;\n case 'custom':\n case 'standard':\n default:\n return 320;\n }\n}\n\nexport function getAutoRowsTemplate(rowHeight: AutoGridRowHeight, fillScreen: boolean) {\n const rowHeightPixels = getNamedHeightInPixels(rowHeight);\n const maxRowHeightValue = fillScreen ? 'auto' : `${rowHeightPixels}px`;\n return `minmax(${rowHeightPixels}px, ${maxRowHeightValue})`;\n}\n","export const NEW_VARIABLE_ID = '00000000-0000-0000-0000-000000000000';\nexport const ALL_VARIABLE_TEXT = 'All';\nexport const ALL_VARIABLE_VALUE = '$__all';\nexport const NONE_VARIABLE_TEXT = 'None';\nexport const NONE_VARIABLE_VALUE = '';\nexport const VARIABLE_PREFIX = 'var-';\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field, TIME_SERIES_VALUE_FIELD_NAME } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport enum ConcatenateFrameNameMode {\n /**\n * Ignore the source frame name when moving to the destination\n */\n Drop = 'drop',\n\n /**\n * Copy the source frame name to the destination field. The final field will contain\n * both the frame and field name\n */\n FieldName = 'field',\n\n /**\n * Copy the source frame name to a label on the field. The label key is controlled\n * by frameNameLabel\n */\n Label = 'label',\n}\n\nexport interface ConcatenateTransformerOptions {\n frameNameMode?: ConcatenateFrameNameMode;\n frameNameLabel?: string;\n}\n\nexport const concatenateTransformer: DataTransformerInfo<ConcatenateTransformerOptions> = {\n id: DataTransformerID.concatenate,\n name: 'Concatenate fields',\n description:\n 'Combine all fields into a single frame. Values will be appended with undefined values if not the same length.',\n defaultOptions: {\n frameNameMode: ConcatenateFrameNameMode.FieldName,\n frameNameLabel: 'frame',\n },\n operator: (options) => (source) =>\n source.pipe(\n map((dataFrames) => {\n if (!Array.isArray(dataFrames) || dataFrames.length < 2) {\n return dataFrames; // noop with single frame\n }\n return [concatenateFields(dataFrames, options)];\n })\n ),\n};\n\n/**\n * @internal only exported for tests\n */\nexport function concatenateFields(data: DataFrame[], opts: ConcatenateTransformerOptions): DataFrame {\n let sameLength = true;\n let maxLength = data[0].length;\n const frameNameLabel = opts.frameNameLabel ?? 'frame';\n let fields: Field[] = [];\n\n for (const frame of data) {\n if (maxLength !== frame.length) {\n sameLength = false;\n maxLength = Math.max(maxLength, frame.length);\n }\n\n for (const f of frame.fields) {\n const copy = { ...f };\n copy.state = undefined;\n if (frame.name) {\n if (opts.frameNameMode === ConcatenateFrameNameMode.Drop) {\n // nothing -- skip the name\n } else if (opts.frameNameMode === ConcatenateFrameNameMode.Label) {\n copy.labels = { ...f.labels };\n copy.labels[frameNameLabel] = frame.name;\n } else if (!copy.name || copy.name === TIME_SERIES_VALUE_FIELD_NAME) {\n copy.name = frame.name;\n } else {\n copy.name = `${frame.name} · ${f.name}`;\n }\n }\n fields.push(copy);\n }\n }\n\n // Make sure all fields have the same length\n if (!sameLength) {\n fields = fields.map((f) => {\n if (f.values.length === maxLength) {\n return f;\n }\n const values = f.values.slice();\n values.length = maxLength;\n return {\n ...f,\n values: values,\n };\n });\n }\n\n return {\n fields,\n length: maxLength,\n };\n}\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Badge, useStyles2 } from '@grafana/ui';\n\nimport { PopupCard } from './HoverCard';\nimport { builtinFunctions as FUNCTIONS, keywords as KEYWORDS } from './receivers/editor/language';\n\nconst VARIABLES = ['$', '.', '\"'];\n\ninterface TokenizerProps {\n input: string;\n delimiter?: [string, string];\n}\n\nfunction Tokenize({ input, delimiter = ['{{', '}}'] }: TokenizerProps) {\n const styles = useStyles2(getStyles);\n\n const [open, close] = delimiter;\n\n /**\n * This RegExp uses 2 named capture groups, text that comes before the token and the token itself\n *\n * <before> open <token> close\n * ───────── ── ─────────── ──\n * Some text {{ $labels.foo }}\n */\n const regex = new RegExp(`(?<before>.*?)(${open}(?<token>.*?)${close}|$)`, 'gm');\n const lines = input.split('\\n');\n\n const output: React.ReactElement[] = [];\n\n lines.forEach((line, lineIndex) => {\n const matches = Array.from(line.matchAll(regex));\n\n matches.forEach((match, matchIndex) => {\n const before = match.groups?.before;\n const token = match.groups?.token?.trim();\n\n if (before) {\n output.push(<span key={`${lineIndex}-${matchIndex}-before`}>{before}</span>);\n }\n\n if (token) {\n const type = tokenType(token);\n const description = type === TokenType.Variable ? token : '';\n const tokenContent = `${open} ${token} ${close}`;\n\n output.push(\n <Token\n key={`${lineIndex}-${matchIndex}-token`}\n content={tokenContent}\n type={type}\n description={description}\n />\n );\n }\n });\n\n output.push(<br key={`${lineIndex}-newline`} />);\n });\n\n return <span className={styles.wrapper}>{output}</span>;\n}\n\nenum TokenType {\n Variable = 'variable',\n Function = 'function',\n Keyword = 'keyword',\n Unknown = 'unknown',\n}\n\ninterface TokenProps {\n content: string;\n type?: TokenType;\n description?: string;\n}\n\nfunction Token({ content, description, type }: TokenProps) {\n const styles = useStyles2(getStyles);\n\n const disableCard = Boolean(type) === false;\n\n return (\n <PopupCard\n placement=\"top-start\"\n disabled={disableCard}\n content={\n <div className={styles.hoverTokenItem}>\n <Badge tabIndex={0} text={<>{type}</>} color={'blue'} /> {description && <code>{description}</code>}\n </div>\n }\n >\n <span>\n <Badge tabIndex={0} className={styles.token} text={content} color={'blue'} />\n </span>\n </PopupCard>\n );\n}\n\nfunction isVariable(input: string) {\n return VARIABLES.some((character) => input.startsWith(character));\n}\n\nfunction isKeyword(input: string) {\n return KEYWORDS.some((keyword) => input.startsWith(keyword));\n}\n\nfunction isFunction(input: string) {\n return FUNCTIONS.some((functionName) => input.startsWith(functionName));\n}\n\nfunction tokenType(input: string) {\n let tokenType;\n if (isVariable(input)) {\n tokenType = TokenType.Variable;\n } else if (isKeyword(input)) {\n tokenType = TokenType.Keyword;\n } else if (isFunction(input)) {\n tokenType = TokenType.Function;\n } else {\n tokenType = TokenType.Unknown;\n }\n\n return tokenType;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n whiteSpace: 'pre-wrap',\n }),\n token: css({\n cursor: 'default',\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n popover: css({\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z3,\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.medium}`,\n\n padding: theme.spacing(1),\n }),\n hoverTokenItem: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1),\n }),\n});\n\nexport { Tokenize, Token };\n","import {\n type PluginExtensionAddedLinkConfig,\n type PluginExtension,\n type PluginExtensionLink,\n type PluginContextType,\n type PluginExtensionAddedComponentConfig,\n type PluginExtensionExposedComponentConfig,\n type PluginExtensionAddedFunctionConfig,\n PluginExtensionPoints,\n PluginExtensionPointPatterns,\n} from '@grafana/data';\nimport { PluginAddedLinksConfigureFunc } from '@grafana/data/internal';\nimport { config, isPluginExtensionLink } from '@grafana/runtime';\n\nimport * as errors from './errors';\nimport { ExtensionsLog } from './logs/log';\n\nexport function assertPluginExtensionLink(\n extension: PluginExtension | undefined,\n errorMessage = 'extension is not a link extension'\n): asserts extension is PluginExtensionLink {\n if (!isPluginExtensionLink(extension)) {\n throw new Error(errorMessage);\n }\n}\n\nexport function assertIsReactComponent(component: React.ComponentType) {\n if (!isReactComponent(component)) {\n throw new Error(`Invalid component extension, the \"component\" property needs to be a valid React component.`);\n }\n}\n\nexport function assertConfigureIsValid(config: PluginExtensionAddedLinkConfig) {\n if (!isConfigureFnValid(config.configure)) {\n throw new Error(\n `Invalid extension \"${config.title}\". The \"configure\" property must be a function. Skipping the extension.`\n );\n }\n}\n\nexport function assertStringProps(extension: Record<string, unknown>, props: string[]) {\n for (const prop of props) {\n if (!isStringPropValid(extension[prop])) {\n throw new Error(\n `Invalid extension \"${extension.title}\". Property \"${prop}\" must be a string and cannot be empty. Skipping the extension.`\n );\n }\n }\n}\n\nexport function assertIsNotPromise(value: unknown, errorMessage = 'The provided value is a Promise.'): void {\n if (isPromise(value)) {\n throw new Error(errorMessage);\n }\n}\n\nexport function isExtensionPointIdValid({\n extensionPointId,\n pluginId,\n isInsidePlugin,\n isCoreGrafanaPlugin,\n log,\n}: {\n extensionPointId: string;\n pluginId: string;\n isInsidePlugin: boolean;\n isCoreGrafanaPlugin: boolean;\n log: ExtensionsLog;\n}) {\n const startsWithPluginId =\n extensionPointId.startsWith(`${pluginId}/`) || extensionPointId.startsWith(`plugins/${pluginId}/`);\n\n if (isInsidePlugin && !isCoreGrafanaPlugin && !startsWithPluginId) {\n log.error(errors.INVALID_EXTENSION_POINT_ID_PLUGIN(pluginId, extensionPointId));\n return false;\n }\n\n if (!isInsidePlugin && !extensionPointId.startsWith('grafana/')) {\n log.error(errors.INVALID_EXTENSION_POINT_ID_GRAFANA_PREFIX(extensionPointId));\n return false;\n }\n\n if (\n !isInsidePlugin &&\n !Object.values<string>(PluginExtensionPoints).includes(extensionPointId) &&\n !Object.values<string>(PluginExtensionPointPatterns).some((extensionPointPattern) =>\n extensionPointId.match(extensionPointPattern)\n )\n ) {\n log.error(errors.INVALID_EXTENSION_POINT_ID_GRAFANA_EXPOSED);\n return false;\n }\n\n return true;\n}\n\nexport function extensionPointEndsWithVersion(extensionPointId: string) {\n return extensionPointId.match(/.*\\/v\\d+$/);\n}\n\nexport function isGrafanaCoreExtensionPoint(extensionPointId: string) {\n return Object.values(PluginExtensionPoints)\n .map((v) => v.toString())\n .includes(extensionPointId);\n}\n\nexport function isConfigureFnValid(configure?: PluginAddedLinksConfigureFunc<object> | undefined) {\n return configure ? typeof configure === 'function' : true;\n}\n\nexport function isStringPropValid(prop: unknown) {\n return typeof prop === 'string' && prop.length > 0;\n}\n\nexport function isPromise(value: unknown): value is Promise<unknown> {\n return (\n value instanceof Promise || (typeof value === 'object' && value !== null && 'then' in value && 'catch' in value)\n );\n}\n\nexport function isReactComponent(component: unknown): component is React.ComponentType {\n const hasReactTypeProp = (obj: unknown): obj is { $$typeof: Symbol } =>\n typeof obj === 'object' && obj !== null && '$$typeof' in obj;\n\n // The sandbox wraps the plugin components with React.memo.\n const isReactMemoObject = (obj: unknown): boolean =>\n hasReactTypeProp(obj) && obj.$$typeof === Symbol.for('react.memo');\n\n // We currently don't have any strict runtime-checking for this.\n // (The main reason is that we don't want to start depending on React implementation details.)\n return typeof component === 'function' || isReactMemoObject(component);\n}\n\n// Checks if the meta information is missing from the plugin's plugin.json file\nexport const isExtensionPointMetaInfoMissing = (extensionPointId: string, pluginContext: PluginContextType) => {\n const extensionPoints = pluginContext.meta?.extensions?.extensionPoints;\n\n return !extensionPoints || !extensionPoints.some((ep) => ep.id === extensionPointId);\n};\n\n// Checks if an exposed component that the plugin is depending on is missing from the `dependencies` in the plugin.json file\nexport const isExposedComponentDependencyMissing = (id: string, pluginContext: PluginContextType) => {\n const exposedComponentsDependencies = pluginContext.meta?.dependencies?.extensions?.exposedComponents;\n\n return !exposedComponentsDependencies || !exposedComponentsDependencies.includes(id);\n};\n\nexport const isAddedLinkMetaInfoMissing = (\n pluginId: string,\n metaInfo: PluginExtensionAddedLinkConfig,\n log: ExtensionsLog\n) => {\n const logPrefix = 'Could not register link extension. Reason:';\n const app = config.apps[pluginId];\n const pluginJsonMetaInfo = app ? app.extensions.addedLinks.filter(({ title }) => title === metaInfo.title) : null;\n\n if (!app) {\n log.error(`${logPrefix} ${errors.APP_NOT_FOUND(pluginId)}`);\n return true;\n }\n\n if (!pluginJsonMetaInfo || pluginJsonMetaInfo.length === 0) {\n log.error(`${logPrefix} ${errors.ADDED_LINK_META_INFO_MISSING}`);\n return true;\n }\n\n const targets = Array.isArray(metaInfo.targets) ? metaInfo.targets : [metaInfo.targets];\n if (!targets.every((target) => pluginJsonMetaInfo.some(({ targets }) => targets.includes(target)))) {\n log.error(`${logPrefix} ${errors.TARGET_NOT_MATCHING_META_INFO}`);\n return true;\n }\n\n if (pluginJsonMetaInfo.some(({ description }) => description !== metaInfo.description)) {\n log.warning(errors.DESCRIPTION_NOT_MATCHING_META_INFO);\n }\n\n return false;\n};\n\nexport const isAddedFunctionMetaInfoMissing = (\n pluginId: string,\n metaInfo: PluginExtensionAddedFunctionConfig,\n log: ExtensionsLog\n) => {\n const logPrefix = 'Could not register function extension. Reason:';\n const app = config.apps[pluginId];\n const pluginJsonMetaInfo = app ? app.extensions.addedFunctions.filter(({ title }) => title === metaInfo.title) : null;\n\n if (!app) {\n log.error(`${logPrefix} ${errors.APP_NOT_FOUND(pluginId)}`);\n return true;\n }\n\n if (!pluginJsonMetaInfo || pluginJsonMetaInfo.length === 0) {\n log.error(`${logPrefix} ${errors.ADDED_FUNCTION_META_INFO_MISSING}`);\n return true;\n }\n\n const targets = Array.isArray(metaInfo.targets) ? metaInfo.targets : [metaInfo.targets];\n if (!targets.every((target) => pluginJsonMetaInfo.some(({ targets }) => targets.includes(target)))) {\n log.error(`${logPrefix} ${errors.TARGET_NOT_MATCHING_META_INFO}`);\n return true;\n }\n\n if (pluginJsonMetaInfo.some(({ description }) => description !== metaInfo.description)) {\n log.warning(errors.DESCRIPTION_NOT_MATCHING_META_INFO);\n }\n\n return false;\n};\n\nexport const isAddedComponentMetaInfoMissing = (\n pluginId: string,\n metaInfo: PluginExtensionAddedComponentConfig,\n log: ExtensionsLog\n) => {\n const logPrefix = 'Could not register component extension. Reason:';\n const app = config.apps[pluginId];\n const pluginJsonMetaInfo = app\n ? app.extensions.addedComponents.filter(({ title }) => title === metaInfo.title)\n : null;\n\n if (!app) {\n log.error(`${logPrefix} ${errors.APP_NOT_FOUND(pluginId)}`);\n return true;\n }\n\n if (!pluginJsonMetaInfo || pluginJsonMetaInfo.length === 0) {\n log.error(`${logPrefix} ${errors.ADDED_COMPONENT_META_INFO_MISSING}`);\n return true;\n }\n\n const targets = Array.isArray(metaInfo.targets) ? metaInfo.targets : [metaInfo.targets];\n if (!targets.every((target) => pluginJsonMetaInfo.some(({ targets }) => targets.includes(target)))) {\n log.error(`${logPrefix} ${errors.TARGET_NOT_MATCHING_META_INFO}`);\n return true;\n }\n\n if (pluginJsonMetaInfo.some(({ description }) => description !== metaInfo.description)) {\n log.warning(errors.DESCRIPTION_NOT_MATCHING_META_INFO);\n }\n\n return false;\n};\n\nexport const isExposedComponentMetaInfoMissing = (\n pluginId: string,\n metaInfo: PluginExtensionExposedComponentConfig,\n log: ExtensionsLog\n) => {\n const logPrefix = 'Could not register exposed component extension. Reason:';\n const app = config.apps[pluginId];\n const pluginJsonMetaInfo = app ? app.extensions.exposedComponents.filter(({ id }) => id === metaInfo.id) : null;\n\n if (!app) {\n log.error(`${logPrefix} ${errors.APP_NOT_FOUND(pluginId)}`);\n return true;\n }\n\n if (!pluginJsonMetaInfo || pluginJsonMetaInfo.length === 0) {\n log.error(`${logPrefix} ${errors.EXPOSED_COMPONENT_META_INFO_MISSING}`);\n return true;\n }\n\n if (pluginJsonMetaInfo.some(({ title }) => title !== metaInfo.title)) {\n log.error(`${logPrefix} ${errors.TITLE_NOT_MATCHING_META_INFO}`);\n return true;\n }\n\n if (pluginJsonMetaInfo.some(({ description }) => description !== metaInfo.description)) {\n log.warning(errors.DESCRIPTION_NOT_MATCHING_META_INFO);\n }\n\n return false;\n};\n","import { css } from '@emotion/css';\nimport { useState } from 'react';\nimport { useDebounce } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Field, Icon, Input, Label, Stack, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { LogMessages, logInfo } from '../../Analytics';\nimport { parsePromQLStyleMatcherLoose } from '../../utils/matchers';\n\ninterface Props {\n defaultQueryString?: string;\n onFilterChange: (filterString: string) => void;\n}\n\nexport const MatcherFilter = ({ onFilterChange, defaultQueryString }: Props) => {\n const styles = useStyles2(getStyles);\n\n const [filterQuery, setFilterQuery] = useState<string>(defaultQueryString ?? '');\n\n useDebounce(\n () => {\n logInfo(LogMessages.filterByLabel);\n onFilterChange(filterQuery);\n },\n 600,\n [filterQuery]\n );\n\n const searchIcon = <Icon name={'search'} />;\n let inputValid = Boolean(defaultQueryString && defaultQueryString.length >= 3);\n try {\n if (!defaultQueryString) {\n inputValid = true;\n } else {\n parsePromQLStyleMatcherLoose(defaultQueryString);\n }\n } catch (err) {\n inputValid = false;\n }\n\n return (\n <Field\n className={styles.fixMargin}\n invalid={!inputValid}\n error={!inputValid ? 'Query must use valid matcher syntax. See the examples in the help tooltip.' : null}\n label={\n <Label>\n <Stack gap={0.5} alignItems=\"center\">\n <span>\n <Trans i18nKey=\"alerting.matcher-filter.search-by-label\">Search by label</Trans>\n </span>\n <Tooltip\n content={\n <div>\n <Trans i18nKey=\"alerting.matcher-filter.filter-alerts-using-label-querying-without-spaces\">\n Filter alerts using label querying without spaces, ex:\n </Trans>\n <pre>{`{severity=\"critical\", instance=~\"cluster-us-.+\"}`}</pre>\n <Trans i18nKey=\"alerting.matcher-filter.invalid-use-of-spaces\">Invalid use of spaces:</Trans>\n <pre>{`{severity= \"critical\"}`}</pre>\n <pre>{`{severity =\"critical\"}`}</pre>\n <Trans i18nKey=\"alerting.matcher-filter.valid-use-of-spaces\">Valid use of spaces:</Trans>\n <pre>{`{severity=\" critical\"}`}</pre>\n <Trans i18nKey=\"alerting.matcher-filter.filter-alerts-using-label-querying-without-braces\">\n Filter alerts using label querying without braces, ex:\n </Trans>\n <pre>{`severity=\"critical\", instance=~\"cluster-us-.+\"`}</pre>\n </div>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <Input\n placeholder={t('alerting.matcher-filter.search-query-input-placeholder-search', 'Search')}\n value={filterQuery}\n onChange={(e) => setFilterQuery(e.currentTarget.value)}\n data-testid=\"search-query-input\"\n prefix={searchIcon}\n className={styles.inputWidth}\n />\n </Field>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n fixMargin: css({\n marginBottom: 0,\n }),\n inputWidth: css({\n width: 340,\n flexGrow: 0,\n }),\n});\n","/**\n * Check to see if browser is not supported by Grafana\n * This function is copied to index.html but is here so we can write tests\n * */\nexport function checkBrowserCompatibility() {\n const isIE = navigator.userAgent.indexOf('MSIE') > -1;\n const isEdge = navigator.userAgent.indexOf('Edge/') > -1 || navigator.userAgent.indexOf('Edg/') > -1;\n const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n const isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n /* Check for\n <= IE11 (Trident 7)\n Edge <= 16\n Firefox <= 64\n Chrome <= 54\n */\n const isEdgeVersion = /Edge\\/([0-9.]+)/.exec(navigator.userAgent);\n\n if (isIE && parseFloat(/Trident\\/([0-9.]+)/.exec(navigator.userAgent)![1]) <= 7) {\n return false;\n } else if (\n isEdge &&\n ((isEdgeVersion && parseFloat(isEdgeVersion[1]) <= 16) ||\n parseFloat(/Edg\\/([0-9.]+)/.exec(navigator.userAgent)![1]) <= 16)\n ) {\n return false;\n } else if (isFirefox && parseFloat(/Firefox\\/([0-9.]+)/.exec(navigator.userAgent)![1]) <= 64) {\n return false;\n } else if (isChrome && parseFloat(/Chrome\\/([0-9.]+)/.exec(navigator.userAgent)![1]) <= 54) {\n return false;\n }\n\n return true;\n}\n\nexport function userAgentIsApple() {\n const appleRe = /(iPhone|iPad|Mac)/;\n return appleRe.test(navigator.platform);\n}\n\nexport function getModKey() {\n return userAgentIsApple() ? '⌘' : 'ctrl';\n}\n","import { writePerformanceLog } from '@grafana/scenes';\n\nimport { getDashboardAnalyticsAggregator } from '../../dashboard/services/DashboardAnalyticsAggregator';\nimport { DashboardScene } from '../scene/DashboardScene';\n\n/**\n * Scene behavior function that manages the dashboard-specific initialization\n * of the global analytics aggregator for each dashboard session.\n *\n * Note: Both ScenePerformanceLogger and DashboardAnalyticsAggregator are now\n * initialized globally to avoid timing issues. This behavior only sets\n * dashboard-specific context.\n */\nexport function dashboardAnalyticsInitializer(dashboard: DashboardScene) {\n const { uid, title } = dashboard.state;\n\n if (!uid) {\n console.warn('dashboardAnalyticsInitializer: Dashboard UID is missing');\n return;\n }\n\n writePerformanceLog('DAI', 'Setting dashboard context for analytics aggregator');\n\n // Set dashboard context on the global aggregator (observer already registered)\n const aggregator = getDashboardAnalyticsAggregator();\n aggregator.initialize(uid, title || 'Untitled Dashboard');\n\n writePerformanceLog('DAI', 'Dashboard analytics aggregator context set:', { uid, title });\n\n // Return cleanup function\n return () => {\n // Only clear dashboard state, keep observer registered for next dashboard\n aggregator.destroy();\n\n writePerformanceLog('DAI', 'Dashboard analytics aggregator context cleared');\n };\n}\n","import { ReactElement, useMemo } from 'react';\n\nimport { PluginExtensionLink } from '@grafana/data';\nimport { Menu } from '@grafana/ui';\nimport { truncateTitle } from 'app/features/plugins/extensions/utils';\n\ntype Props = {\n extensions: PluginExtensionLink[];\n onSelect: (extension: PluginExtensionLink) => void;\n};\n\nexport function ToolbarExtensionPointMenu({ extensions, onSelect }: Props): ReactElement | null {\n const { categorised, uncategorised } = useExtensionLinksByCategory(extensions);\n const showDivider = uncategorised.length > 0 && Object.keys(categorised).length > 0;\n\n return (\n <Menu>\n <>\n {Object.keys(categorised).map((category) => (\n <Menu.Group key={category} label={truncateTitle(category, 25)}>\n {renderItems(categorised[category], onSelect)}\n </Menu.Group>\n ))}\n {showDivider && <Menu.Divider key=\"divider\" />}\n {renderItems(uncategorised, onSelect)}\n </>\n </Menu>\n );\n}\n\nfunction renderItems(extensions: PluginExtensionLink[], onSelect: (link: PluginExtensionLink) => void): JSX.Element[] {\n return extensions.map((extension) => (\n <Menu.Item\n ariaLabel={extension.title}\n icon={extension?.icon || 'plug'}\n key={extension.id}\n label={truncateTitle(extension.title, 25)}\n onClick={(event) => {\n if (extension.path) {\n return onSelect(extension);\n }\n extension.onClick?.(event);\n }}\n />\n ));\n}\n\ntype ExtensionLinksResult = {\n uncategorised: PluginExtensionLink[];\n categorised: Record<string, PluginExtensionLink[]>;\n};\n\nfunction useExtensionLinksByCategory(extensions: PluginExtensionLink[]): ExtensionLinksResult {\n return useMemo(() => {\n const uncategorised: PluginExtensionLink[] = [];\n const categorised: Record<string, PluginExtensionLink[]> = {};\n\n for (const link of extensions) {\n if (!link.category) {\n uncategorised.push(link);\n continue;\n }\n\n if (!Array.isArray(categorised[link.category])) {\n categorised[link.category] = [];\n }\n categorised[link.category].push(link);\n continue;\n }\n\n return {\n uncategorised,\n categorised,\n };\n }, [extensions]);\n}\n","export const SHARED_DASHBOARD_QUERY = '-- Dashboard --';\nexport const DASHBOARD_DATASOURCE_PLUGIN_ID = 'dashboard';\n","import { DataFrame, Field, FieldType } from '../types/dataFrame';\n\nimport { guessFieldTypeForField } from './processDataFrame';\n\nexport interface FieldWithIndex extends Field {\n index: number;\n}\n\nexport class FieldCache {\n fields: FieldWithIndex[] = [];\n\n private fieldByName: { [key: string]: FieldWithIndex } = {};\n private fieldByType: { [key: string]: FieldWithIndex[] } = {};\n\n constructor(data: DataFrame) {\n this.fields = data.fields.map((field, idx) => ({\n ...field,\n index: idx,\n }));\n\n for (let i = 0; i < data.fields.length; i++) {\n const field = data.fields[i];\n // Make sure it has a type\n if (field.type === FieldType.other) {\n const t = guessFieldTypeForField(field);\n if (t) {\n field.type = t;\n }\n }\n if (!this.fieldByType[field.type]) {\n this.fieldByType[field.type] = [];\n }\n this.fieldByType[field.type].push({\n ...field,\n index: i,\n });\n\n if (this.fieldByName[field.name]) {\n console.warn('Duplicate field names in DataFrame: ', field.name);\n } else {\n this.fieldByName[field.name] = { ...field, index: i };\n }\n }\n }\n\n getFields(type?: FieldType): FieldWithIndex[] {\n if (!type) {\n return [...this.fields]; // All fields\n }\n const fields = this.fieldByType[type];\n if (fields) {\n return [...fields];\n }\n return [];\n }\n\n hasFieldOfType(type: FieldType): boolean {\n const types = this.fieldByType[type];\n return types && types.length > 0;\n }\n\n getFirstFieldOfType(type: FieldType, includeHidden = false): FieldWithIndex | undefined {\n const fields = this.fieldByType[type];\n const firstField = fields?.find((field) => includeHidden || !field.config.custom?.hidden);\n return firstField;\n }\n\n hasFieldNamed(name: string): boolean {\n return !!this.fieldByName[name];\n }\n\n hasFieldWithNameAndType(name: string, type: FieldType): boolean {\n return !!this.fieldByName[name] && this.fieldByType[type].filter((field) => field.name === name).length > 0;\n }\n\n /**\n * Returns the first field with the given name.\n */\n getFieldByName(name: string): FieldWithIndex | undefined {\n return this.fieldByName[name];\n }\n\n /**\n * Returns the fields with the given label.\n */\n getFieldsByLabel(label: string, value: string): FieldWithIndex[] {\n return Object.values(this.fieldByName).filter((f) => {\n return f.labels && f.labels[label] === value;\n });\n }\n}\n","import { css } from '@emotion/css';\nimport { memo } from 'react';\n\nimport { GrafanaTheme2, LinkTarget } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Icon, IconName, useStyles2 } from '@grafana/ui';\n\nexport interface FooterLink {\n target: LinkTarget;\n text: string;\n id: string;\n icon?: IconName;\n url?: string;\n}\n\nexport let getFooterLinks = (): FooterLink[] => {\n return [\n {\n target: '_blank',\n id: 'documentation',\n text: t('nav.help/documentation', 'Documentation'),\n icon: 'document-info',\n url: 'https://grafana.com/docs/grafana/latest/?utm_source=grafana_footer',\n },\n {\n target: '_blank',\n id: 'support',\n text: t('nav.help/support', 'Support'),\n icon: 'question-circle',\n url: 'https://grafana.com/products/enterprise/?utm_source=grafana_footer',\n },\n {\n target: '_blank',\n id: 'community',\n text: t('nav.help/community', 'Community'),\n icon: 'comments-alt',\n url: 'https://community.grafana.com/?utm_source=grafana_footer',\n },\n ];\n};\n\nexport function getVersionMeta(version: string) {\n const isBeta = version.includes('-beta');\n\n return {\n hasReleaseNotes: true,\n isBeta,\n };\n}\n\nexport function getVersionLinks(hideEdition?: boolean): FooterLink[] {\n const { buildInfo, licenseInfo } = config;\n const links: FooterLink[] = [];\n const stateInfo = licenseInfo.stateInfo ? ` (${licenseInfo.stateInfo})` : '';\n\n if (!hideEdition) {\n links.push({\n target: '_blank',\n id: 'license',\n text: `${buildInfo.edition}${stateInfo}`,\n url: licenseInfo.licenseUrl,\n });\n }\n\n if (buildInfo.hideVersion) {\n return links;\n }\n\n const { hasReleaseNotes } = getVersionMeta(buildInfo.version);\n\n links.push({\n target: '_blank',\n id: 'version',\n text: buildInfo.versionString,\n url: hasReleaseNotes ? `https://github.com/grafana/grafana/blob/main/CHANGELOG.md` : undefined,\n });\n\n if (buildInfo.hasUpdate) {\n links.push({\n target: '_blank',\n id: 'updateVersion',\n text: `New version available!`,\n icon: 'download-alt',\n url: 'https://grafana.com/grafana/download?utm_source=grafana_footer',\n });\n }\n\n return links;\n}\n\nexport function setFooterLinksFn(fn: typeof getFooterLinks) {\n getFooterLinks = fn;\n}\n\nexport interface Props {\n /** Link overrides to show specific links in the UI */\n customLinks?: FooterLink[] | null;\n hideEdition?: boolean;\n}\n\nexport const Footer = memo(({ customLinks, hideEdition }: Props) => {\n const links = (customLinks || getFooterLinks()).concat(getVersionLinks(hideEdition));\n const styles = useStyles2(getStyles);\n\n return (\n <footer className={styles.footer}>\n <div className=\"text-center\">\n <ul className={styles.list}>\n {links.map((link, index) => (\n <li className={styles.listItem} key={index}>\n <FooterItem item={link} />\n </li>\n ))}\n </ul>\n </div>\n </footer>\n );\n});\n\nFooter.displayName = 'Footer';\n\nfunction FooterItem({ item }: { item: FooterLink }) {\n const content = item.url ? (\n <a href={item.url} target={item.target} rel=\"noopener noreferrer\" id={item.id}>\n {item.text}\n </a>\n ) : (\n item.text\n );\n\n return (\n <>\n {item.icon && <Icon name={item.icon} />} {content}\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n footer: css({\n ...theme.typography.bodySmall,\n color: theme.colors.text.primary,\n display: 'block',\n padding: theme.spacing(2, 0),\n position: 'relative',\n width: '98%',\n\n 'a:hover': {\n color: theme.colors.text.maxContrast,\n textDecoration: 'underline',\n },\n\n [theme.breakpoints.down('md')]: {\n display: 'none',\n },\n }),\n list: css({\n listStyle: 'none',\n }),\n listItem: css({\n display: 'inline-block',\n '&:after': {\n content: \"' | '\",\n padding: theme.spacing(0, 1),\n },\n '&:last-child:after': {\n content: \"''\",\n paddingLeft: 0,\n },\n }),\n});\n","import { Ref, cloneElement, forwardRef } from 'react';\n\ninterface ConditionalWrapProps {\n shouldWrap: boolean;\n children: JSX.Element;\n wrap: (children: JSX.Element) => JSX.Element;\n}\n\nfunction ConditionalWrap({ children, shouldWrap, wrap }: ConditionalWrapProps, _ref: Ref<HTMLElement>) {\n return shouldWrap ? cloneElement(wrap(children)) : children;\n}\n\nexport default forwardRef(ConditionalWrap);\n","// The new index.html fetches window.grafanaBootData asynchronously.\n// Since much of Grafana depends on it in includes side effects at import time,\n// we delay loading the rest of the app using import() until the boot data is ready.\n\n// Check if we are hosting files on cdn and set webpack public path\nif (window.public_cdn_path) {\n __webpack_public_path__ = window.public_cdn_path;\n}\n\n// This is a path to the public folder without '/build'\nwindow.__grafana_public_path__ =\n __webpack_public_path__.substring(0, __webpack_public_path__.lastIndexOf('build/')) || __webpack_public_path__;\n\nif (window.nonce) {\n __webpack_nonce__ = window.nonce;\n}\n\n// This is an indication to the window.onLoad failure check that the app bundle has loaded.\nwindow.__grafana_app_bundle_loaded = true;\n\nasync function bootstrapWindowData() {\n // Wait for window.grafanaBootData is ready. The new index.html loads it from\n // an API call, but the old one just sets an immediately resolving promise.\n await window.__grafana_boot_data_promise;\n\n // Use eager to ensure the app is included in the initial chunk and does not\n // require additional network requests to load.\n await import(/* webpackMode: \"eager\" */ './initApp');\n}\n\nbootstrapWindowData().catch((error) => {\n console.error('Error bootstrapping Grafana', error);\n window.__grafana_load_failed();\n});\n","import { isArray, isPlainObject } from 'lodash';\n\n/**\n * @returns A deep clone of the object, but with any null value removed.\n * @param value - The object to be cloned and cleaned.\n * @param convertInfinity - If true, -Infinity or Infinity is converted to 0.\n * This is because Infinity is not a valid JSON value, and sometimes we want to convert it to 0 instead of default null.\n */\nexport function sortedDeepCloneWithoutNulls<T>(value: T, convertInfinity?: boolean): T {\n if (isArray(value)) {\n return value.map((item) => sortedDeepCloneWithoutNulls(item, convertInfinity)) as unknown as T;\n }\n if (isPlainObject(value)) {\n return Object.keys(value as { [key: string]: any })\n .sort()\n .reduce((acc: any, key) => {\n const v = (value as any)[key];\n // Remove null values\n if (v != null) {\n acc[key] = sortedDeepCloneWithoutNulls(v, convertInfinity);\n }\n\n if (convertInfinity && (v === Infinity || v === -Infinity)) {\n acc[key] = 0;\n }\n\n return acc;\n }, {});\n }\n return value;\n}\n","import { Trans, t } from '@grafana/i18n';\nimport { Tooltip, Button, Stack } from '@grafana/ui';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\ntype VersionsButtonsType = {\n hasMore: boolean;\n canCompare: boolean;\n getVersions: (append: boolean) => void;\n getDiff: () => void;\n isLastPage: boolean;\n};\nexport const VersionsHistoryButtons = ({\n hasMore,\n canCompare,\n getVersions,\n getDiff,\n isLastPage,\n}: VersionsButtonsType) => {\n return (\n <Stack>\n {hasMore && (\n <Button\n type=\"button\"\n onClick={() => {\n getVersions(true);\n DashboardInteractions.showMoreVersionsClicked();\n }}\n variant=\"secondary\"\n disabled={isLastPage}\n >\n <Trans i18nKey=\"dashboard-scene.versions-history-buttons.show-more-versions\">Show more versions</Trans>\n </Button>\n )}\n <Tooltip\n content={t(\n 'dashboard-scene.versions-history-buttons.content-select-two-versions-to-start-comparing',\n 'Select two versions to start comparing'\n )}\n placement=\"bottom\"\n >\n <Button type=\"button\" disabled={!canCompare} onClick={getDiff} icon=\"code-branch\">\n <Trans i18nKey=\"dashboard-scene.versions-history-buttons.compare-versions\">Compare versions</Trans>\n </Button>\n </Tooltip>\n </Stack>\n );\n};\n","import { css, cx } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getTagColorsFromName } from '../../utils/tags';\nimport { IconButton } from '../IconButton/IconButton';\n\ninterface Props {\n name: string;\n disabled?: boolean;\n onRemove: (tag: string) => void;\n\n /** Colours the tags 'randomly' based on the name. Defaults to true */\n autoColors?: boolean;\n}\n\n/**\n * @internal\n * Only used internally by TagsInput\n * */\nexport const TagItem = ({ name, disabled, onRemove, autoColors = true }: Props) => {\n const styles = useStyles2(getStyles);\n\n // If configured, use random colors based on name.\n // Otherwise, a default class name will be applied to the tag.\n const tagStyle = useMemo(() => {\n if (autoColors) {\n const { color, borderColor } = getTagColorsFromName(name);\n return { backgroundColor: color, borderColor };\n }\n return undefined;\n }, [name, autoColors]);\n\n return (\n <li className={cx(styles.itemStyle, !tagStyle && styles.defaultTagColor)} style={tagStyle}>\n <span className={styles.nameStyle}>{name}</span>\n <IconButton\n name=\"times\"\n size=\"lg\"\n disabled={disabled}\n tooltip={t('grafana-ui.tags-input.remove', 'Remove tag: {{name}}', { name })}\n onClick={() => onRemove(name)}\n className={styles.buttonStyles}\n />\n </li>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const height = theme.spacing.gridSize * 3;\n\n return {\n itemStyle: css({\n display: 'flex',\n gap: '3px',\n alignItems: 'center',\n height: `${height}px`,\n lineHeight: `${height - 2}px`,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: theme.shape.radius.default,\n padding: `0 ${theme.spacing(0.5)}`,\n whiteSpace: 'nowrap',\n textShadow: 'none',\n fontWeight: 500,\n fontSize: theme.typography.size.sm,\n color: '#fff',\n }),\n defaultTagColor: css({\n backgroundColor: theme.colors.background.secondary,\n borderColor: theme.components.input.borderColor,\n color: theme.colors.text.primary,\n }),\n nameStyle: css({\n maxWidth: '25ch',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n }),\n buttonStyles: css({\n margin: 0,\n '&:hover::before': {\n display: 'none',\n },\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { useCallback, useState, forwardRef } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { Button } from '../Button/Button';\nimport { Input } from '../Input/Input';\n\nimport { TagItem } from './TagItem';\n\nexport interface Props {\n placeholder?: string;\n /** Array of selected tags */\n tags?: string[];\n onChange: (tags: string[]) => void;\n width?: number;\n id?: string;\n className?: string;\n /** Toggle disabled state */\n disabled?: boolean;\n /** Enable adding new tags when input loses focus */\n addOnBlur?: boolean;\n /** Toggle invalid state */\n invalid?: boolean;\n /** Colours the tags 'randomly' based on the name. Defaults to true */\n autoColors?: boolean;\n}\n\n/**\n * A set of an input field and a button next to it that allows the user to add new tags. The added tags are previewed next to the input and can be removed by clicking the \"X\" icon. You can customize the width of the input.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-tagsinput--docs\n */\nexport const TagsInput = forwardRef<HTMLInputElement, Props>(\n (\n {\n placeholder: placeholderProp,\n tags = [],\n onChange,\n width,\n className,\n disabled,\n addOnBlur,\n invalid,\n id,\n autoColors = true,\n },\n ref\n ) => {\n const placeholder = placeholderProp ?? t('grafana-ui.tags-input.placeholder-new-tag', 'New tag (enter key to add)');\n const [newTagName, setNewTagName] = useState('');\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n\n const onNameChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setNewTagName(event.target.value);\n }, []);\n\n const onRemove = (tagToRemove: string) => {\n onChange(tags.filter((x) => x !== tagToRemove));\n };\n\n const onAdd = (event?: React.MouseEvent | React.KeyboardEvent) => {\n event?.preventDefault();\n if (!tags.includes(newTagName)) {\n onChange(tags.concat(newTagName));\n }\n setNewTagName('');\n };\n\n const onBlur = () => {\n if (addOnBlur && newTagName) {\n onAdd();\n }\n };\n\n const onKeyboardAdd = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' && newTagName !== '') {\n onAdd(event);\n }\n };\n\n return (\n <div className={cx(styles.wrapper, className, width ? css({ width: theme.spacing(width) }) : '')}>\n <Input\n ref={ref}\n id={id}\n disabled={disabled}\n placeholder={placeholder}\n onChange={onNameChange}\n value={newTagName}\n onKeyDown={onKeyboardAdd}\n onBlur={onBlur}\n invalid={invalid}\n suffix={\n <Button\n fill=\"text\"\n className={styles.addButtonStyle}\n onClick={onAdd}\n size=\"md\"\n disabled={newTagName.length <= 0}\n >\n <Trans i18nKey=\"grafana-ui.tags-input.add\">Add</Trans>\n </Button>\n }\n />\n {tags?.length > 0 && (\n <ul className={styles.tags}>\n {tags.map((tag) => (\n <TagItem key={tag} name={tag} onRemove={onRemove} disabled={disabled} autoColors={autoColors} />\n ))}\n </ul>\n )}\n </div>\n );\n }\n);\n\nTagsInput.displayName = 'TagsInput';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n minHeight: theme.spacing(4),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n flexWrap: 'wrap',\n }),\n tags: css({\n display: 'flex',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n gap: theme.spacing(0.5),\n }),\n addButtonStyle: css({\n margin: `0 -${theme.spacing(1)}`,\n }),\n});\n","import { cloneDeep, groupBy } from 'lodash';\nimport { distinct, Observable, merge } from 'rxjs';\nimport { scan } from 'rxjs/operators';\n\nimport {\n DataFrame,\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceApi,\n hasSupplementaryQuerySupport,\n isTruthy,\n LoadingState,\n LogsVolumeCustomMetaData,\n LogsVolumeType,\n SupplementaryQueryType,\n} from '@grafana/data';\nimport store from 'app/core/store';\nimport { ExplorePanelData, SupplementaryQueries } from 'app/types/explore';\n\nimport { makeDataFramesForLogs, queryLogsSample, queryLogsVolume } from '../../logs/logsModel';\n\nexport const supplementaryQueryTypes: SupplementaryQueryType[] = [\n SupplementaryQueryType.LogsVolume,\n SupplementaryQueryType.LogsSample,\n];\n\nconst getSupplementaryQuerySettingKey = (type: SupplementaryQueryType) => `grafana.explore.logs.enable${type}`;\n\nexport const storeSupplementaryQueryEnabled = (enabled: boolean, type: SupplementaryQueryType): void => {\n store.set(getSupplementaryQuerySettingKey(type), enabled ? 'true' : 'false');\n};\n\nexport const loadSupplementaryQueries = (): SupplementaryQueries => {\n // We default to true for all supp queries\n let supplementaryQueries: SupplementaryQueries = {\n [SupplementaryQueryType.LogsVolume]: { enabled: true },\n [SupplementaryQueryType.LogsSample]: { enabled: false },\n };\n\n for (const type of supplementaryQueryTypes) {\n // We want to skip LogsSample and default it to false for now to trigger it only on user action\n if (type === SupplementaryQueryType.LogsSample) {\n continue;\n }\n\n // Only if \"false\" value in local storage, we disable it\n const shouldBeEnabled = store.get(getSupplementaryQuerySettingKey(type));\n if (shouldBeEnabled === 'false') {\n supplementaryQueries[type] = { enabled: false };\n }\n }\n return supplementaryQueries;\n};\n\nconst createFallbackLogVolumeProvider = (\n explorePanelData: Observable<ExplorePanelData>,\n queryTargets: DataQuery[],\n datasourceName: string\n): Observable<DataQueryResponse> => {\n return new Observable<DataQueryResponse>((observer) => {\n return explorePanelData.subscribe((exploreData) => {\n if (\n exploreData.logsResult &&\n exploreData.logsResult.rows &&\n exploreData.logsResult.visibleRange &&\n exploreData.logsResult.bucketSize !== undefined &&\n exploreData.state === LoadingState.Done\n ) {\n const bucketSize = exploreData.logsResult.bucketSize;\n const targetRefIds = queryTargets.map((query) => query.refId);\n const rowsByRefId = groupBy(exploreData.logsResult.rows, 'dataFrame.refId');\n let allSeries: DataFrame[] = [];\n targetRefIds.forEach((refId) => {\n if (rowsByRefId[refId]?.length) {\n const series = makeDataFramesForLogs(rowsByRefId[refId], bucketSize);\n allSeries = [...allSeries, ...series];\n const logVolumeCustomMetaData: LogsVolumeCustomMetaData = {\n logsVolumeType: LogsVolumeType.Limited,\n absoluteRange: exploreData.logsResult?.visibleRange!,\n datasourceName,\n sourceQuery: queryTargets.find((query) => query.refId === refId)!,\n };\n\n observer.next({\n data: allSeries.map((d) => {\n const custom = d.meta?.custom || {};\n return {\n ...d,\n meta: {\n custom: {\n ...custom,\n ...logVolumeCustomMetaData,\n },\n },\n };\n }),\n state: exploreData.state,\n });\n }\n });\n observer.complete();\n }\n });\n });\n};\n\nconst getSupplementaryQueryFallback = (\n type: SupplementaryQueryType,\n explorePanelData: Observable<ExplorePanelData>,\n queryTargets: DataQuery[],\n datasourceName: string\n) => {\n if (type === SupplementaryQueryType.LogsVolume) {\n return createFallbackLogVolumeProvider(explorePanelData, queryTargets, datasourceName);\n } else {\n return undefined;\n }\n};\n\nexport const getSupplementaryQueryProvider = (\n groupedQueries: Array<{ datasource: DataSourceApi; targets: DataQuery[] }>,\n type: SupplementaryQueryType,\n request: DataQueryRequest,\n explorePanelData: Observable<ExplorePanelData>\n): Observable<DataQueryResponse> | undefined => {\n const providers = groupedQueries.map(({ datasource, targets }, i) => {\n const dsRequest = cloneDeep(request);\n dsRequest.requestId = `${dsRequest.requestId || ''}_${i}`;\n dsRequest.targets = targets;\n\n if (hasSupplementaryQuerySupport(datasource, type)) {\n if (datasource.getDataProvider) {\n return datasource.getDataProvider(type, dsRequest);\n } else if (datasource.getSupplementaryRequest) {\n const request = datasource.getSupplementaryRequest(type, dsRequest);\n if (!request) {\n return undefined;\n }\n return type === SupplementaryQueryType.LogsVolume\n ? queryLogsVolume(datasource, request, { targets: dsRequest.targets })\n : queryLogsSample(datasource, request);\n } else {\n return undefined;\n }\n } else {\n return getSupplementaryQueryFallback(type, explorePanelData, targets, datasource.name);\n }\n });\n\n const definedProviders = providers.filter(isTruthy);\n\n if (definedProviders.length === 0) {\n return undefined;\n } else if (definedProviders.length === 1) {\n return definedProviders[0];\n }\n\n return merge(...definedProviders).pipe(\n scan<DataQueryResponse, DataQueryResponse>(\n (acc, next) => {\n if ((acc.errors && acc.errors.length) || next.state === LoadingState.NotStarted) {\n return acc;\n }\n\n if (next.state === LoadingState.Loading && acc.state === LoadingState.NotStarted) {\n return {\n ...acc,\n state: LoadingState.Loading,\n };\n }\n\n if (next.state && next.state !== LoadingState.Done) {\n return acc;\n }\n\n return {\n ...acc,\n data: [...acc.data, ...next.data],\n state: LoadingState.Done,\n };\n },\n { data: [], state: LoadingState.NotStarted }\n ),\n distinct()\n );\n};\n","import { annotationServer } from 'app/features/annotations/api';\nimport { StateHistoryItem } from 'app/types/unified-alerting';\n\nexport function fetchAnnotations(alertUID: string): Promise<StateHistoryItem[]> {\n return annotationServer()\n .forAlert(alertUID)\n .then((result) => {\n return result?.sort(sortStateHistory);\n });\n}\n\nexport function sortStateHistory(a: StateHistoryItem, b: StateHistoryItem): number {\n const compareDesc = (a: number, b: number): number => {\n // Larger numbers first.\n if (a > b) {\n return -1;\n }\n\n if (b > a) {\n return 1;\n }\n return 0;\n };\n\n const endNeq = compareDesc(a.timeEnd, b.timeEnd);\n if (endNeq) {\n return endNeq;\n }\n\n const timeNeq = compareDesc(a.time, b.time);\n if (timeNeq) {\n return timeNeq;\n }\n\n return compareDesc(a.id, b.id);\n}\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport { isEmpty } from 'lodash';\n\nimport { locationService, logMeasurement } from '@grafana/runtime';\nimport { AlertManagerCortexConfig, AlertmanagerGroup, Matcher } from 'app/plugins/datasource/alertmanager/types';\nimport { ThunkResult } from 'app/types/store';\nimport { RuleIdentifier, RuleNamespace, StateHistoryItem } from 'app/types/unified-alerting';\nimport { RulerRuleDTO, RulerRulesConfigDTO } from 'app/types/unified-alerting-dto';\n\nimport { withPromRulesMetadataLogging, withRulerRulesMetadataLogging } from '../Analytics';\nimport { deleteAlertManagerConfig, fetchAlertGroups, updateAlertManagerConfig } from '../api/alertmanager';\nimport { alertmanagerApi } from '../api/alertmanagerApi';\nimport { fetchAnnotations } from '../api/annotations';\nimport { featureDiscoveryApi } from '../api/featureDiscoveryApi';\nimport { FetchPromRulesFilter, fetchRules } from '../api/prometheus';\nimport { FetchRulerRulesFilter, fetchRulerRules } from '../api/ruler';\nimport { addDefaultsToAlertmanagerConfig } from '../utils/alertmanager';\nimport { getAllRulesSourceNames } from '../utils/datasource';\nimport { makeAMLink } from '../utils/misc';\nimport { withAppEvents, withSerializedError } from '../utils/redux';\nimport { getAlertInfo } from '../utils/rules';\nimport { safeParsePrometheusDuration } from '../utils/time';\n\nexport const fetchPromRulesAction = createAsyncThunk(\n 'unifiedalerting/fetchPromRules',\n async (\n {\n rulesSourceName,\n filter,\n limitAlerts,\n matcher,\n state,\n identifier,\n }: {\n rulesSourceName: string;\n filter?: FetchPromRulesFilter;\n limitAlerts?: number;\n matcher?: Matcher[];\n state?: string[];\n identifier?: RuleIdentifier;\n },\n thunkAPI\n ): Promise<RuleNamespace[]> => {\n const fetchRulesWithLogging = withPromRulesMetadataLogging('unifiedalerting/fetchPromRules', fetchRules, {\n dataSourceName: rulesSourceName,\n thunk: 'unifiedalerting/fetchPromRules',\n });\n\n return await withSerializedError(\n fetchRulesWithLogging(rulesSourceName, filter, limitAlerts, matcher, state, identifier)\n );\n }\n);\n\nexport const fetchRulerRulesAction = createAsyncThunk(\n 'unifiedalerting/fetchRulerRules',\n async (\n {\n rulesSourceName,\n filter,\n }: {\n rulesSourceName: string;\n filter?: FetchRulerRulesFilter;\n },\n { dispatch, getState }\n ): Promise<RulerRulesConfigDTO | null> => {\n const { data: dsFeatures } = await dispatch(\n featureDiscoveryApi.endpoints.discoverDsFeatures.initiate({ rulesSourceName })\n );\n\n if (!dsFeatures?.rulerConfig) {\n return null;\n }\n\n const fetchRulerRulesWithLogging = withRulerRulesMetadataLogging(\n 'unifiedalerting/fetchRulerRules',\n fetchRulerRules,\n {\n dataSourceName: rulesSourceName,\n thunk: 'unifiedalerting/fetchRulerRules',\n }\n );\n\n return await withSerializedError(fetchRulerRulesWithLogging(dsFeatures.rulerConfig, filter));\n }\n);\n\nexport function fetchPromAndRulerRulesAction({\n rulesSourceName,\n identifier,\n filter,\n limitAlerts,\n matcher,\n state,\n}: {\n rulesSourceName: string;\n identifier?: RuleIdentifier;\n filter?: FetchPromRulesFilter;\n limitAlerts?: number;\n matcher?: Matcher[];\n state?: string[];\n}): ThunkResult<Promise<void>> {\n return async (dispatch) => {\n const { data: dsFeatures } = await dispatch(\n featureDiscoveryApi.endpoints.discoverDsFeatures.initiate({ rulesSourceName })\n );\n\n await Promise.all([\n dispatch(fetchPromRulesAction({ rulesSourceName, identifier, filter, limitAlerts, matcher, state })),\n dsFeatures?.rulerConfig ? dispatch(fetchRulerRulesAction({ rulesSourceName })) : Promise.resolve(),\n ]);\n };\n}\n\ninterface FetchPromRulesRulesActionProps {\n filter?: FetchPromRulesFilter;\n limitAlerts?: number;\n matcher?: Matcher[];\n state?: string[];\n}\n\nexport function fetchAllPromAndRulerRulesAction(\n force = false,\n options: FetchPromRulesRulesActionProps = {}\n): ThunkResult<Promise<void>> {\n return async (dispatch, getStore) => {\n const allStartLoadingTs = performance.now();\n\n await Promise.allSettled(\n getAllRulesSourceNames().map(async (rulesSourceName) => {\n const { data: dsFeatures } = await dispatch(\n featureDiscoveryApi.endpoints.discoverDsFeatures.initiate({ rulesSourceName })\n );\n\n const { promRules, rulerRules } = getStore().unifiedAlerting;\n\n if (!dsFeatures) {\n return;\n }\n\n const shouldLoadProm = force || !promRules[rulesSourceName]?.loading;\n const shouldLoadRuler = (force || !rulerRules[rulesSourceName]?.loading) && Boolean(dsFeatures?.rulerConfig);\n\n await Promise.allSettled([\n shouldLoadProm && dispatch(fetchPromRulesAction({ rulesSourceName, ...options })),\n shouldLoadRuler && dispatch(fetchRulerRulesAction({ rulesSourceName })),\n ]);\n })\n );\n\n logMeasurement('unifiedalerting/fetchAllPromAndRulerRulesAction', {\n loadTimeMs: performance.now() - allStartLoadingTs,\n });\n };\n}\n\nexport function fetchAllPromRulesAction(\n force = false,\n options: FetchPromRulesRulesActionProps = {}\n): ThunkResult<Promise<void>> {\n return async (dispatch, getStore) => {\n const { promRules } = getStore().unifiedAlerting;\n getAllRulesSourceNames().map((rulesSourceName) => {\n if (force || !promRules[rulesSourceName]?.loading) {\n dispatch(fetchPromRulesAction({ rulesSourceName, ...options }));\n }\n });\n };\n}\n\nexport const fetchGrafanaAnnotationsAction = createAsyncThunk(\n 'unifiedalerting/fetchGrafanaAnnotations',\n (ruleUID: string): Promise<StateHistoryItem[]> => withSerializedError(fetchAnnotations(ruleUID))\n);\n\ninterface UpdateAlertManagerConfigActionOptions {\n alertManagerSourceName: string;\n oldConfig: AlertManagerCortexConfig; // it will be checked to make sure it didn't change in the meanwhile\n newConfig: AlertManagerCortexConfig;\n successMessage?: string; // show toast on success\n redirectPath?: string; // where to redirect on success\n redirectSearch?: string; // additional redirect query params\n}\n\nexport const updateAlertManagerConfigAction = createAsyncThunk<void, UpdateAlertManagerConfigActionOptions, {}>(\n 'unifiedalerting/updateAMConfig',\n (\n { alertManagerSourceName, oldConfig, newConfig, successMessage, redirectPath, redirectSearch },\n thunkAPI\n ): Promise<void> =>\n withAppEvents(\n withSerializedError(\n (async () => {\n const latestConfig = await thunkAPI\n .dispatch(\n alertmanagerApi.endpoints.getAlertmanagerConfiguration.initiate(alertManagerSourceName, {\n forceRefetch: true,\n })\n )\n .unwrap();\n\n const isLatestConfigEmpty = isEmpty(latestConfig.alertmanager_config) && isEmpty(latestConfig.template_files);\n const oldLastConfigsDiffer = JSON.stringify(latestConfig) !== JSON.stringify(oldConfig);\n\n if (!isLatestConfigEmpty && oldLastConfigsDiffer) {\n throw new Error(\n 'A newer Alertmanager configuration is available. Please reload the page and try again to not overwrite recent changes.'\n );\n }\n await updateAlertManagerConfig(alertManagerSourceName, addDefaultsToAlertmanagerConfig(newConfig));\n thunkAPI.dispatch(\n alertmanagerApi.util.invalidateTags([\n 'AlertmanagerConfiguration',\n 'ContactPoint',\n 'ContactPointsStatus',\n 'Receiver',\n ])\n );\n if (redirectPath) {\n const options = new URLSearchParams(redirectSearch ?? '');\n locationService.push(makeAMLink(redirectPath, alertManagerSourceName, options));\n }\n })()\n ),\n {\n successMessage,\n }\n )\n);\n\nexport const fetchAlertGroupsAction = createAsyncThunk(\n 'unifiedalerting/fetchAlertGroups',\n (alertManagerSourceName: string): Promise<AlertmanagerGroup[]> => {\n return withSerializedError(fetchAlertGroups(alertManagerSourceName));\n }\n);\n\nexport const deleteAlertManagerConfigAction = createAsyncThunk(\n 'unifiedalerting/deleteAlertManagerConfig',\n async (alertManagerSourceName: string, thunkAPI): Promise<void> => {\n return withAppEvents(\n withSerializedError(\n (async () => {\n await deleteAlertManagerConfig(alertManagerSourceName);\n await thunkAPI.dispatch(alertmanagerApi.util.invalidateTags(['AlertmanagerConfiguration']));\n })()\n ),\n {\n errorMessage: 'Failed to reset Alertmanager configuration',\n successMessage: 'Alertmanager configuration reset.',\n }\n );\n }\n);\n\nexport const rulesInSameGroupHaveInvalidFor = (rules: RulerRuleDTO[], everyDuration: string) => {\n return rules.filter((rule: RulerRuleDTO) => {\n const { forDuration } = getAlertInfo(rule, everyDuration);\n const forNumber = forDuration ? safeParsePrometheusDuration(forDuration) : null;\n const everyNumber = safeParsePrometheusDuration(everyDuration);\n\n return forNumber ? forNumber !== 0 && forNumber < everyNumber : false;\n });\n};\n","import { Box, LoadingPlaceholder } from '@grafana/ui';\n\ninterface Props {\n pageName?: string;\n}\n\nconst PageLoader = ({ pageName = '' }: Props) => {\n const loadingText = `Loading ${pageName}...`;\n return (\n <Box display=\"flex\" alignItems=\"center\" direction=\"column\" justifyContent=\"center\" paddingTop={10}>\n <LoadingPlaceholder text={loadingText} />\n </Box>\n );\n};\n\nexport default PageLoader;\n","import { JsonTree } from '@react-awesome-query-builder/ui';\n\nimport {\n DataFrame,\n DataQuery,\n DataSourceJsonData,\n MetricFindValue,\n SelectableValue,\n TimeRange,\n toOption as toOptionFromData,\n} from '@grafana/data';\nimport { CompletionItemKind, EditorMode, LanguageDefinition } from '@grafana/plugin-ui';\n\nimport { QueryWithDefaults } from './defaults';\nimport {\n QueryEditorFunctionExpression,\n QueryEditorGroupByExpression,\n QueryEditorPropertyExpression,\n} from './expressions';\n\nexport interface SqlQueryForInterpolation {\n dataset?: string;\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n refId: string;\n hide?: boolean;\n}\n\nexport interface SQLConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n maxIdleConnsAuto: boolean;\n connMaxLifetime: number;\n}\n\nexport interface SQLOptions extends SQLConnectionLimits, DataSourceJsonData {\n tlsAuth: boolean;\n tlsAuthWithCACert: boolean;\n timezone: string;\n tlsSkipVerify: boolean;\n user: string;\n database: string;\n url: string;\n timeInterval: string;\n}\n\nexport enum QueryFormat {\n Timeseries = 'time_series',\n Table = 'table',\n}\n\nexport interface SQLQuery extends DataQuery {\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n dataset?: string;\n table?: string;\n sql?: SQLExpression;\n editorMode?: EditorMode;\n rawQuery?: boolean;\n}\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\nexport type SQLFilters = NameValue[];\n\nexport interface SQLExpression {\n columns?: QueryEditorFunctionExpression[];\n whereJsonTree?: JsonTree;\n whereString?: string;\n filters?: SQLFilters;\n groupBy?: QueryEditorGroupByExpression[];\n orderBy?: QueryEditorPropertyExpression;\n orderByDirection?: 'ASC' | 'DESC';\n limit?: number;\n offset?: number;\n}\n\nexport interface TableSchema {\n name?: string;\n schema?: TableFieldSchema[];\n}\n\nexport interface TableFieldSchema {\n name: string;\n description?: string;\n type: string;\n repeated: boolean;\n schema: TableFieldSchema[];\n}\n\nexport interface QueryRowFilter {\n filter: boolean;\n group: boolean;\n order: boolean;\n preview: boolean;\n}\n\nexport const QUERY_FORMAT_OPTIONS = [\n { label: 'Time series', value: QueryFormat.Timeseries },\n { label: 'Table', value: QueryFormat.Table },\n];\n\nconst backWardToOption = (value: string) => ({ label: value, value });\n\nexport const toOption = toOptionFromData ?? backWardToOption;\n\nexport interface ResourceSelectorProps {\n disabled?: boolean;\n className?: string;\n applyDefault?: boolean;\n}\n// React Awesome Query builder field types.\n// These are responsible for rendering the correct UI for the field.\nexport type RAQBFieldTypes = 'text' | 'number' | 'boolean' | 'datetime' | 'date' | 'time';\n\nexport interface SQLSelectableValue extends SelectableValue {\n type?: string;\n raqbFieldType?: RAQBFieldTypes;\n}\n\nexport interface DB {\n init?: (datasourceId?: string) => Promise<boolean>;\n datasets: () => Promise<string[]>;\n tables: (dataset?: string) => Promise<string[]>;\n fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;\n validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;\n dsID: () => number;\n dispose?: (dsID?: string) => void;\n lookup?: (path?: string) => Promise<Array<{ name: string; completion: string }>>;\n getEditorLanguageDefinition: () => LanguageDefinition;\n toRawSql: (query: SQLQuery) => string;\n functions: () => Func[];\n}\n\nexport interface FuncParameter {\n name: string;\n required?: boolean;\n options?: (query: SQLQuery) => Promise<SelectableValue[]>;\n}\nexport interface Func {\n name: string;\n parameters?: FuncParameter[];\n description?: string;\n}\n\nexport interface QueryEditorProps {\n db: DB;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n range?: TimeRange;\n}\n\nexport interface ValidationResults {\n query: SQLQuery;\n rawSql?: string;\n error: string;\n isError: boolean;\n isValid: boolean;\n statistics?: {\n TotalBytesProcessed: number;\n } | null;\n}\n\nexport interface SqlQueryModel {\n quoteLiteral: (v: string) => string;\n}\n\nexport interface ResponseParser {\n transformMetricFindResponse: (frame: DataFrame) => MetricFindValue[];\n}\n\nexport interface MetaDefinition {\n name: string;\n completion?: string;\n kind: CompletionItemKind;\n}\n\nexport type SQLDialect = 'postgres' | 'influx' | 'other';\n","import { createAction } from '@reduxjs/toolkit';\n\nimport { HistoryItem } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport {\n addToRichHistory,\n deleteAllFromRichHistory,\n deleteQueryInRichHistory,\n getRichHistory,\n getRichHistorySettings,\n updateCommentInRichHistory,\n updateRichHistorySettings,\n updateStarredInRichHistory,\n} from 'app/core/utils/richHistory';\nimport { RichHistoryQuery } from 'app/types/explore';\nimport { ThunkResult } from 'app/types/store';\n\nimport { supportedFeatures } from '../../../core/history/richHistoryStorageProvider';\nimport { RichHistorySearchFilters, RichHistorySettings } from '../../../core/utils/richHistoryTypes';\n\nimport {\n richHistoryLimitExceededAction,\n richHistorySearchFiltersUpdatedAction,\n richHistorySettingsUpdatedAction,\n richHistoryStorageFullAction,\n richHistoryUpdatedAction,\n} from './main';\n\n//\n// Actions and Payloads\n//\n\nexport interface HistoryUpdatedPayload {\n history: HistoryItem[];\n}\nexport const historyUpdatedAction = createAction<HistoryUpdatedPayload>('explore/historyUpdated');\n\n//\n// Action creators\n//\n\ntype SyncHistoryUpdatesOptions = {\n updatedQuery?: RichHistoryQuery;\n deletedId?: string;\n};\n\n/**\n * Updates current state in both Explore panes after changing or deleting a query history item\n */\nconst updateRichHistoryState = ({ updatedQuery, deletedId }: SyncHistoryUpdatesOptions): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const richHistory = getState().explore.richHistory;\n\n // update or remove entries\n const newRichHistory = richHistory\n .map((query) => (query.id === updatedQuery?.id ? updatedQuery : query))\n .filter((query) => query.id !== deletedId);\n\n const deletedItems = richHistory.length - newRichHistory.length;\n dispatch(\n richHistoryUpdatedAction({\n richHistoryResults: {\n richHistory: newRichHistory,\n total: getState().explore.richHistoryTotal! - deletedItems,\n },\n })\n );\n };\n};\n\nexport const addHistoryItem = (\n localOverride: boolean,\n datasourceUid: string,\n datasourceName: string,\n queries: DataQuery[],\n hideAllErrorsAndWarnings: boolean\n): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const showNotif = hideAllErrorsAndWarnings\n ? { quotaExceededError: false, limitExceededWarning: false, otherErrors: false }\n : {\n quotaExceededError: !getState().explore.richHistoryStorageFull,\n limitExceededWarning: !getState().explore.richHistoryLimitExceededWarningShown,\n };\n const { richHistoryStorageFull, limitExceeded } = await addToRichHistory({\n localOverride,\n datasource: { uid: datasourceUid, name: datasourceName },\n queries,\n starred: false,\n showNotif,\n });\n if (!hideAllErrorsAndWarnings) {\n if (richHistoryStorageFull) {\n dispatch(richHistoryStorageFullAction());\n }\n if (limitExceeded) {\n dispatch(richHistoryLimitExceededAction());\n }\n }\n };\n};\n\nexport const starHistoryItem = (id: string, starred: boolean): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const updatedQuery = await updateStarredInRichHistory(id, starred);\n dispatch(updateRichHistoryState({ updatedQuery }));\n };\n};\n\nexport const commentHistoryItem = (id: string, comment?: string): ThunkResult<void> => {\n return async (dispatch) => {\n const updatedQuery = await updateCommentInRichHistory(id, comment);\n dispatch(updateRichHistoryState({ updatedQuery }));\n };\n};\n\nexport const deleteHistoryItem = (id: string): ThunkResult<void> => {\n return async (dispatch) => {\n const deletedId = await deleteQueryInRichHistory(id);\n dispatch(updateRichHistoryState({ deletedId }));\n };\n};\n\nexport const deleteRichHistory = (): ThunkResult<void> => {\n return async (dispatch) => {\n await deleteAllFromRichHistory();\n dispatch(richHistoryUpdatedAction({ richHistoryResults: { richHistory: [], total: 0 } }));\n dispatch(richHistoryUpdatedAction({ richHistoryResults: { richHistory: [], total: 0 } }));\n };\n};\n\nexport const loadRichHistory = (): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const filters = getState().explore.richHistorySearchFilters;\n if (filters) {\n const richHistoryResults = await getRichHistory(filters);\n dispatch(richHistoryUpdatedAction({ richHistoryResults }));\n }\n };\n};\n\nexport const loadMoreRichHistory = (): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const currentFilters = getState().explore.richHistorySearchFilters;\n const currentRichHistory = getState().explore.richHistory;\n if (currentFilters && currentRichHistory) {\n const nextFilters = { ...currentFilters, page: (currentFilters?.page || 1) + 1 };\n const moreRichHistory = await getRichHistory(nextFilters);\n const richHistory = [...currentRichHistory, ...moreRichHistory.richHistory];\n dispatch(richHistorySearchFiltersUpdatedAction({ filters: nextFilters }));\n dispatch(richHistoryUpdatedAction({ richHistoryResults: { richHistory, total: moreRichHistory.total } }));\n }\n };\n};\n\nexport const clearRichHistoryResults = (): ThunkResult<void> => {\n return async (dispatch) => {\n dispatch(richHistorySearchFiltersUpdatedAction({ filters: undefined }));\n dispatch(richHistoryUpdatedAction({ richHistoryResults: { richHistory: [], total: 0 } }));\n };\n};\n\n/**\n * Initialize query history pane. To load history it requires settings to be loaded first\n * (but only once per session). Filters are initialised by the tab (starred or home).\n */\nexport const initRichHistory = (): ThunkResult<void> => {\n return async (dispatch, getState) => {\n let settings = getState().explore.richHistorySettings;\n if (!settings) {\n settings = await getRichHistorySettings();\n dispatch(richHistorySettingsUpdatedAction(settings));\n }\n };\n};\n\nexport const updateHistorySettings = (settings: RichHistorySettings): ThunkResult<void> => {\n return async (dispatch) => {\n dispatch(richHistorySettingsUpdatedAction(settings));\n await updateRichHistorySettings(settings);\n };\n};\n\n/**\n * Assumed this can be called only when settings and filters are initialised\n */\nexport const updateHistorySearchFilters = (filters: RichHistorySearchFilters): ThunkResult<void> => {\n return async (dispatch, getState) => {\n await dispatch(richHistorySearchFiltersUpdatedAction({ filters: { ...filters } }));\n const currentSettings = getState().explore.richHistorySettings!;\n if (supportedFeatures().lastUsedDataSourcesAvailable) {\n await dispatch(\n updateHistorySettings({\n ...currentSettings,\n lastUsedDatasourceFilters: filters.datasourceFilters,\n })\n );\n }\n };\n};\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { getTagColorsFromName, Icon, useStyles2 } from '@grafana/ui';\n\nexport interface Props {\n label: string;\n removeIcon: boolean;\n count: number;\n onClick?: React.MouseEventHandler<SVGElement>;\n}\n\nexport const TagBadge = ({ count, label, onClick, removeIcon }: Props) => {\n const { color } = getTagColorsFromName(label);\n const styles = useStyles2(getStyles);\n\n const countLabel = count !== 0 && <span style={{ marginLeft: '3px' }}>{`(${count})`}</span>;\n\n return (\n <span\n className={styles.badge}\n style={{\n backgroundColor: color,\n }}\n >\n {removeIcon && <Icon onClick={onClick} name=\"times\" />}\n {label} {countLabel}\n </span>\n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n badge: css({\n ...theme.typography.bodySmall,\n backgroundColor: theme.v1.palette.gray1,\n borderRadius: theme.shape.radius.sm,\n color: theme.v1.palette.white,\n display: 'inline-block',\n height: '20px',\n lineHeight: '20px',\n padding: theme.spacing(0, 0.75),\n verticalAlign: 'baseline',\n whiteSpace: 'nowrap',\n '&:hover': {\n opacity: 0.85,\n },\n }),\n});\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n\nexport interface AnnotationQueryKind {\n\tkind: \"AnnotationQuery\";\n\tspec: AnnotationQuerySpec;\n}\n\nexport const defaultAnnotationQueryKind = (): AnnotationQueryKind => ({\n\tkind: \"AnnotationQuery\",\n\tspec: defaultAnnotationQuerySpec(),\n});\n\nexport interface AnnotationQuerySpec {\n\tquery: DataQueryKind;\n\tenable: boolean;\n\thide: boolean;\n\ticonColor: string;\n\tname: string;\n\tbuiltIn?: boolean;\n\tfilter?: AnnotationPanelFilter;\n\t// Placement can be used to display the annotation query somewhere else on the dashboard other than the default location.\n\tplacement?: \"inControlsMenu\";\n\t// Catch-all field for datasource-specific properties. Should not be available in as code tooling.\n\tlegacyOptions?: Record<string, any>;\n}\n\nexport const defaultAnnotationQuerySpec = (): AnnotationQuerySpec => ({\n\tquery: defaultDataQueryKind(),\n\tenable: false,\n\thide: false,\n\ticonColor: \"\",\n\tname: \"\",\n\tbuiltIn: false,\n\tplacement: AnnotationQueryPlacement,\n});\n\nexport interface DataQueryKind {\n\tkind: \"DataQuery\";\n\tgroup: string;\n\tversion: string;\n\t// New type for datasource reference\n\t// Not creating a new type until we figure out how to handle DS refs for group by, adhoc, and every place that uses DataSourceRef in TS.\n\tdatasource?: {\n\t\tname?: string;\n\t};\n\tspec: Record<string, any>;\n}\n\nexport const defaultDataQueryKind = (): DataQueryKind => ({\n\tkind: \"DataQuery\",\n\tgroup: \"\",\n\tversion: \"v0\",\n\tspec: {},\n});\n\nexport interface AnnotationPanelFilter {\n\t// Should the specified panels be included or excluded\n\texclude?: boolean;\n\t// Panel IDs that should be included or excluded\n\tids: number[];\n}\n\nexport const defaultAnnotationPanelFilter = (): AnnotationPanelFilter => ({\n\texclude: false,\n\tids: [],\n});\n\n// Annotation Query placement. Defines where the annotation query should be displayed.\n// - \"inControlsMenu\" renders the annotation query in the dashboard controls dropdown menu\nexport const AnnotationQueryPlacement = \"inControlsMenu\";\n\n// \"Off\" for no shared crosshair or tooltip (default).\n// \"Crosshair\" for shared crosshair.\n// \"Tooltip\" for shared crosshair AND shared tooltip.\nexport type DashboardCursorSync = \"Crosshair\" | \"Tooltip\" | \"Off\";\n\nexport const defaultDashboardCursorSync = (): DashboardCursorSync => (\"Off\");\n\n// Supported dashboard elements\n// |* more element types in the future\nexport type Element = PanelKind | LibraryPanelKind;\n\nexport const defaultElement = (): Element => (defaultPanelKind());\n\nexport interface PanelKind {\n\tkind: \"Panel\";\n\tspec: PanelSpec;\n}\n\nexport const defaultPanelKind = (): PanelKind => ({\n\tkind: \"Panel\",\n\tspec: defaultPanelSpec(),\n});\n\nexport interface PanelSpec {\n\tid: number;\n\ttitle: string;\n\tdescription: string;\n\tlinks: DataLink[];\n\tdata: QueryGroupKind;\n\tvizConfig: VizConfigKind;\n\ttransparent?: boolean;\n}\n\nexport const defaultPanelSpec = (): PanelSpec => ({\n\tid: 0,\n\ttitle: \"\",\n\tdescription: \"\",\n\tlinks: [],\n\tdata: defaultQueryGroupKind(),\n\tvizConfig: defaultVizConfigKind(),\n});\n\nexport interface DataLink {\n\ttitle: string;\n\turl: string;\n\ttargetBlank?: boolean;\n}\n\nexport const defaultDataLink = (): DataLink => ({\n\ttitle: \"\",\n\turl: \"\",\n});\n\nexport interface QueryGroupKind {\n\tkind: \"QueryGroup\";\n\tspec: QueryGroupSpec;\n}\n\nexport const defaultQueryGroupKind = (): QueryGroupKind => ({\n\tkind: \"QueryGroup\",\n\tspec: defaultQueryGroupSpec(),\n});\n\nexport interface QueryGroupSpec {\n\tqueries: PanelQueryKind[];\n\ttransformations: TransformationKind[];\n\tqueryOptions: QueryOptionsSpec;\n}\n\nexport const defaultQueryGroupSpec = (): QueryGroupSpec => ({\n\tqueries: [],\n\ttransformations: [],\n\tqueryOptions: defaultQueryOptionsSpec(),\n});\n\nexport interface PanelQueryKind {\n\tkind: \"PanelQuery\";\n\tspec: PanelQuerySpec;\n}\n\nexport const defaultPanelQueryKind = (): PanelQueryKind => ({\n\tkind: \"PanelQuery\",\n\tspec: defaultPanelQuerySpec(),\n});\n\nexport interface PanelQuerySpec {\n\tquery: DataQueryKind;\n\trefId: string;\n\thidden: boolean;\n}\n\nexport const defaultPanelQuerySpec = (): PanelQuerySpec => ({\n\tquery: defaultDataQueryKind(),\n\trefId: \"\",\n\thidden: false,\n});\n\nexport interface TransformationKind {\n\t// The kind of a TransformationKind is the transformation ID\n\tkind: string;\n\tspec: DataTransformerConfig;\n}\n\nexport const defaultTransformationKind = (): TransformationKind => ({\n\tkind: \"\",\n\tspec: defaultDataTransformerConfig(),\n});\n\n// Transformations allow to manipulate data returned by a query before the system applies a visualization.\n// Using transformations you can: rename fields, join time series data, perform mathematical operations across queries,\n// use the output of one transformation as the input to another transformation, etc.\nexport interface DataTransformerConfig {\n\t// Unique identifier of transformer\n\tid: string;\n\t// Disabled transformations are skipped\n\tdisabled?: boolean;\n\t// Optional frame matcher. When missing it will be applied to all results\n\tfilter?: MatcherConfig;\n\t// Where to pull DataFrames from as input to transformation\n\ttopic?: DataTopic;\n\t// Options to be passed to the transformer\n\t// Valid options depend on the transformer id\n\toptions: any;\n}\n\nexport const defaultDataTransformerConfig = (): DataTransformerConfig => ({\n\tid: \"\",\n\toptions: {},\n});\n\n// Matcher is a predicate configuration. Based on the config a set of field(s) or values is filtered in order to apply override / transformation.\n// It comes with in id ( to resolve implementation from registry) and a configuration that’s specific to a particular matcher type.\nexport interface MatcherConfig {\n\t// The matcher id. This is used to find the matcher implementation from registry.\n\tid: string;\n\t// The matcher options. This is specific to the matcher implementation.\n\toptions?: any;\n}\n\nexport const defaultMatcherConfig = (): MatcherConfig => ({\n\tid: \"\",\n});\n\n// A topic is attached to DataFrame metadata in query results.\n// This specifies where the data should be used.\nexport type DataTopic = \"series\" | \"annotations\" | \"alertStates\";\n\nexport const defaultDataTopic = (): DataTopic => (\"series\");\n\nexport interface QueryOptionsSpec {\n\ttimeFrom?: string;\n\tmaxDataPoints?: number;\n\ttimeShift?: string;\n\tqueryCachingTTL?: number;\n\tinterval?: string;\n\tcacheTimeout?: string;\n\thideTimeOverride?: boolean;\n\ttimeCompare?: string;\n}\n\nexport const defaultQueryOptionsSpec = (): QueryOptionsSpec => ({\n});\n\nexport interface VizConfigKind {\n\tkind: \"VizConfig\";\n\t// The group is the plugin ID\n\tgroup: string;\n\tversion: string;\n\tspec: VizConfigSpec;\n}\n\nexport const defaultVizConfigKind = (): VizConfigKind => ({\n\tkind: \"VizConfig\",\n\tgroup: \"\",\n\tversion: \"\",\n\tspec: defaultVizConfigSpec(),\n});\n\n// --- Kinds ---\nexport interface VizConfigSpec {\n\toptions: Record<string, any>;\n\tfieldConfig: FieldConfigSource;\n}\n\nexport const defaultVizConfigSpec = (): VizConfigSpec => ({\n\toptions: {},\n\tfieldConfig: defaultFieldConfigSource(),\n});\n\n// The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.\n// Each column within this structure is called a field. A field can represent a single time series or table column.\n// Field options allow you to change how the data is displayed in your visualizations.\nexport interface FieldConfigSource {\n\t// Defaults are the options applied to all fields.\n\tdefaults: FieldConfig;\n\t// Overrides are the options applied to specific fields overriding the defaults.\n\toverrides: {\n\t\tmatcher: MatcherConfig;\n\t\tproperties: DynamicConfigValue[];\n\t}[];\n}\n\nexport const defaultFieldConfigSource = (): FieldConfigSource => ({\n\tdefaults: defaultFieldConfig(),\n\toverrides: [],\n});\n\n// The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.\n// Each column within this structure is called a field. A field can represent a single time series or table column.\n// Field options allow you to change how the data is displayed in your visualizations.\nexport interface FieldConfig {\n\t// The display value for this field. This supports template variables blank is auto\n\tdisplayName?: string;\n\t// This can be used by data sources that return and explicit naming structure for values and labels\n\t// When this property is configured, this value is used rather than the default naming strategy.\n\tdisplayNameFromDS?: string;\n\t// Human readable field metadata\n\tdescription?: string;\n\t// An explicit path to the field in the datasource. When the frame meta includes a path,\n\t// This will default to `${frame.meta.path}/${field.name}\n\t// \n\t// When defined, this value can be used as an identifier within the datasource scope, and\n\t// may be used to update the results\n\tpath?: string;\n\t// True if data source can write a value to the path. Auth/authz are supported separately\n\twriteable?: boolean;\n\t// True if data source field supports ad-hoc filters\n\tfilterable?: boolean;\n\t// Unit a field should use. The unit you select is applied to all fields except time.\n\t// You can use the units ID availables in Grafana or a custom unit.\n\t// Available units in Grafana: https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/valueFormats/categories.ts\n\t// As custom unit, you can use the following formats:\n\t// `suffix:<suffix>` for custom unit that should go after value.\n\t// `prefix:<prefix>` for custom unit that should go before value.\n\t// `time:<format>` For custom date time formats type for example `time:YYYY-MM-DD`.\n\t// `si:<base scale><unit characters>` for custom SI units. For example: `si: mF`. This one is a bit more advanced as you can specify both a unit and the source data scale. So if your source data is represented as milli (thousands of) something prefix the unit with that SI scale character.\n\t// `count:<unit>` for a custom count unit.\n\t// `currency:<unit>` for custom a currency unit.\n\tunit?: string;\n\t// Specify the number of decimals Grafana includes in the rendered value.\n\t// If you leave this field blank, Grafana automatically truncates the number of decimals based on the value.\n\t// For example 1.1234 will display as 1.12 and 100.456 will display as 100.\n\t// To display all decimals, set the unit to `String`.\n\tdecimals?: number;\n\t// The minimum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields.\n\tmin?: number;\n\t// The maximum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields.\n\tmax?: number;\n\t// Convert input values into a display string\n\tmappings?: ValueMapping[];\n\t// Map numeric values to states\n\tthresholds?: ThresholdsConfig;\n\t// Panel color configuration\n\tcolor?: FieldColor;\n\t// The behavior when clicking on a result\n\tlinks?: any[];\n\t// Define interactive HTTP requests that can be triggered from data visualizations.\n\tactions?: Action[];\n\t// Alternative to empty string\n\tnoValue?: string;\n\t// custom is specified by the FieldConfig field\n\t// in panel plugin schemas.\n\tcustom?: Record<string, any>;\n}\n\nexport const defaultFieldConfig = (): FieldConfig => ({\n});\n\nexport type ValueMapping = ValueMap | RangeMap | RegexMap | SpecialValueMap;\n\nexport const defaultValueMapping = (): ValueMapping => (defaultValueMap());\n\n// Maps text values to a color or different display text and color.\n// For example, you can configure a value mapping so that all instances of the value 10 appear as Perfection! rather than the number.\nexport interface ValueMap {\n\ttype: \"value\";\n\t// Map with <value_to_match>: ValueMappingResult. For example: { \"10\": { text: \"Perfection!\", color: \"green\" } }\n\toptions: Record<string, ValueMappingResult>;\n}\n\nexport const defaultValueMap = (): ValueMap => ({\n\ttype: \"value\",\n\toptions: {},\n});\n\n// Supported value mapping types\n// `value`: Maps text values to a color or different display text and color. For example, you can configure a value mapping so that all instances of the value 10 appear as Perfection! rather than the number.\n// `range`: Maps numerical ranges to a display text and color. For example, if a value is within a certain range, you can configure a range value mapping to display Low or High rather than the number.\n// `regex`: Maps regular expressions to replacement text and a color. For example, if a value is www.example.com, you can configure a regex value mapping so that Grafana displays www and truncates the domain.\n// `special`: Maps special values like Null, NaN (not a number), and boolean values like true and false to a display text and color. See SpecialValueMatch to see the list of special values. For example, you can configure a special value mapping so that null values appear as N/A.\nexport type MappingType = \"value\" | \"range\" | \"regex\" | \"special\";\n\nexport const defaultMappingType = (): MappingType => (\"value\");\n\n// Result used as replacement with text and color when the value matches\nexport interface ValueMappingResult {\n\t// Text to display when the value matches\n\ttext?: string;\n\t// Text to use when the value matches\n\tcolor?: string;\n\t// Icon to display when the value matches. Only specific visualizations.\n\ticon?: string;\n\t// Position in the mapping array. Only used internally.\n\tindex?: number;\n}\n\nexport const defaultValueMappingResult = (): ValueMappingResult => ({\n});\n\n// Maps numerical ranges to a display text and color.\n// For example, if a value is within a certain range, you can configure a range value mapping to display Low or High rather than the number.\nexport interface RangeMap {\n\ttype: \"range\";\n\t// Range to match against and the result to apply when the value is within the range\n\toptions: {\n\t\t// Min value of the range. It can be null which means -Infinity\n\t\tfrom: number | null;\n\t\t// Max value of the range. It can be null which means +Infinity\n\t\tto: number | null;\n\t\t// Config to apply when the value is within the range\n\t\tresult: ValueMappingResult;\n\t};\n}\n\nexport const defaultRangeMap = (): RangeMap => ({\n\ttype: \"range\",\n\toptions: {\n\tfrom: 0,\n\tto: 0,\n\tresult: defaultValueMappingResult(),\n},\n});\n\n// Maps regular expressions to replacement text and a color.\n// For example, if a value is www.example.com, you can configure a regex value mapping so that Grafana displays www and truncates the domain.\nexport interface RegexMap {\n\ttype: \"regex\";\n\t// Regular expression to match against and the result to apply when the value matches the regex\n\toptions: {\n\t\t// Regular expression to match against\n\t\tpattern: string;\n\t\t// Config to apply when the value matches the regex\n\t\tresult: ValueMappingResult;\n\t};\n}\n\nexport const defaultRegexMap = (): RegexMap => ({\n\ttype: \"regex\",\n\toptions: {\n\tpattern: \"\",\n\tresult: defaultValueMappingResult(),\n},\n});\n\n// Maps special values like Null, NaN (not a number), and boolean values like true and false to a display text and color.\n// See SpecialValueMatch to see the list of special values.\n// For example, you can configure a special value mapping so that null values appear as N/A.\nexport interface SpecialValueMap {\n\ttype: \"special\";\n\toptions: {\n\t\t// Special value to match against\n\t\tmatch: SpecialValueMatch;\n\t\t// Config to apply when the value matches the special value\n\t\tresult: ValueMappingResult;\n\t};\n}\n\nexport const defaultSpecialValueMap = (): SpecialValueMap => ({\n\ttype: \"special\",\n\toptions: {\n\tmatch: \"true\",\n\tresult: defaultValueMappingResult(),\n},\n});\n\n// Special value types supported by the `SpecialValueMap`\nexport type SpecialValueMatch = \"true\" | \"false\" | \"null\" | \"nan\" | \"null+nan\" | \"empty\";\n\nexport const defaultSpecialValueMatch = (): SpecialValueMatch => (\"true\");\n\nexport interface ThresholdsConfig {\n\tmode: ThresholdsMode;\n\tsteps: Threshold[];\n}\n\nexport const defaultThresholdsConfig = (): ThresholdsConfig => ({\n\tmode: \"absolute\",\n\tsteps: [],\n});\n\nexport type ThresholdsMode = \"absolute\" | \"percentage\";\n\nexport const defaultThresholdsMode = (): ThresholdsMode => (\"absolute\");\n\nexport interface Threshold {\n\tvalue: number;\n\tcolor: string;\n}\n\nexport const defaultThreshold = (): Threshold => ({\n\tvalue: 0,\n\tcolor: \"\",\n});\n\n// Map a field to a color.\nexport interface FieldColor {\n\t// The main color scheme mode.\n\tmode: FieldColorModeId;\n\t// The fixed color value for fixed or shades color modes.\n\tfixedColor?: string;\n\t// Some visualizations need to know how to assign a series color from by value color schemes.\n\tseriesBy?: FieldColorSeriesByMode;\n}\n\nexport const defaultFieldColor = (): FieldColor => ({\n\tmode: \"thresholds\",\n});\n\n// Color mode for a field. You can specify a single color, or select a continuous (gradient) color schemes, based on a value.\n// Continuous color interpolates a color using the percentage of a value relative to min and max.\n// Accepted values are:\n// `thresholds`: From thresholds. Informs Grafana to take the color from the matching threshold\n// `palette-classic`: Classic palette. Grafana will assign color by looking up a color in a palette by series index. Useful for Graphs and pie charts and other categorical data visualizations\n// `palette-classic-by-name`: Classic palette (by name). Grafana will assign color by looking up a color in a palette by series name. Useful for Graphs and pie charts and other categorical data visualizations\n// `continuous-GrYlRd`: ontinuous Green-Yellow-Red palette mode\n// `continuous-RdYlGr`: Continuous Red-Yellow-Green palette mode\n// `continuous-BlYlRd`: Continuous Blue-Yellow-Red palette mode\n// `continuous-YlRd`: Continuous Yellow-Red palette mode\n// `continuous-BlPu`: Continuous Blue-Purple palette mode\n// `continuous-YlBl`: Continuous Yellow-Blue palette mode\n// `continuous-blues`: Continuous Blue palette mode\n// `continuous-reds`: Continuous Red palette mode\n// `continuous-greens`: Continuous Green palette mode\n// `continuous-purples`: Continuous Purple palette mode\n// `shades`: Shades of a single color. Specify a single color, useful in an override rule.\n// `fixed`: Fixed color mode. Specify a single color, useful in an override rule.\nexport type FieldColorModeId = \"thresholds\" | \"palette-classic\" | \"palette-classic-by-name\" | \"continuous-GrYlRd\" | \"continuous-RdYlGr\" | \"continuous-BlYlRd\" | \"continuous-YlRd\" | \"continuous-BlPu\" | \"continuous-YlBl\" | \"continuous-blues\" | \"continuous-reds\" | \"continuous-greens\" | \"continuous-purples\" | \"fixed\" | \"shades\";\n\nexport const defaultFieldColorModeId = (): FieldColorModeId => (\"thresholds\");\n\n// Defines how to assign a series color from \"by value\" color schemes. For example for an aggregated data points like a timeseries, the color can be assigned by the min, max or last value.\nexport type FieldColorSeriesByMode = \"min\" | \"max\" | \"last\";\n\nexport const defaultFieldColorSeriesByMode = (): FieldColorSeriesByMode => (\"min\");\n\nexport interface Action {\n\ttype: ActionType;\n\ttitle: string;\n\tfetch?: FetchOptions;\n\tinfinity?: InfinityOptions;\n\tconfirmation?: string;\n\toneClick?: boolean;\n\tvariables?: ActionVariable[];\n\tstyle?: {\n\t\tbackgroundColor?: string;\n\t};\n}\n\nexport const defaultAction = (): Action => ({\n\ttype: \"fetch\",\n\ttitle: \"\",\n});\n\nexport type ActionType = \"fetch\" | \"infinity\";\n\nexport const defaultActionType = (): ActionType => (\"fetch\");\n\nexport interface FetchOptions {\n\tmethod: HttpRequestMethod;\n\turl: string;\n\tbody?: string;\n\t// These are 2D arrays of strings, each representing a key-value pair\n\t// We are defining them this way because we can't generate a go struct that\n\t// that would have exactly two strings in each sub-array\n\tqueryParams?: string[][];\n\theaders?: string[][];\n}\n\nexport const defaultFetchOptions = (): FetchOptions => ({\n\tmethod: \"GET\",\n\turl: \"\",\n});\n\nexport type HttpRequestMethod = \"GET\" | \"PUT\" | \"POST\" | \"DELETE\" | \"PATCH\";\n\nexport const defaultHttpRequestMethod = (): HttpRequestMethod => (\"GET\");\n\nexport interface InfinityOptions {\n\tmethod: HttpRequestMethod;\n\turl: string;\n\tbody?: string;\n\t// These are 2D arrays of strings, each representing a key-value pair\n\t// We are defining them this way because we can't generate a go struct that\n\t// that would have exactly two strings in each sub-array\n\tqueryParams?: string[][];\n\tdatasourceUid: string;\n\theaders?: string[][];\n}\n\nexport const defaultInfinityOptions = (): InfinityOptions => ({\n\tmethod: \"GET\",\n\turl: \"\",\n\tdatasourceUid: \"\",\n});\n\nexport interface ActionVariable {\n\tkey: string;\n\tname: string;\n\ttype: \"string\";\n}\n\nexport const defaultActionVariable = (): ActionVariable => ({\n\tkey: \"\",\n\tname: \"\",\n\ttype: ActionVariableType,\n});\n\n// Action variable type\nexport const ActionVariableType = \"string\";\n\nexport interface DynamicConfigValue {\n\tid: string;\n\tvalue?: any;\n}\n\nexport const defaultDynamicConfigValue = (): DynamicConfigValue => ({\n\tid: \"\",\n});\n\nexport interface LibraryPanelKind {\n\tkind: \"LibraryPanel\";\n\tspec: LibraryPanelKindSpec;\n}\n\nexport const defaultLibraryPanelKind = (): LibraryPanelKind => ({\n\tkind: \"LibraryPanel\",\n\tspec: defaultLibraryPanelKindSpec(),\n});\n\nexport interface LibraryPanelKindSpec {\n\t// Panel ID for the library panel in the dashboard\n\tid: number;\n\t// Title for the library panel in the dashboard\n\ttitle: string;\n\tlibraryPanel: LibraryPanelRef;\n}\n\nexport const defaultLibraryPanelKindSpec = (): LibraryPanelKindSpec => ({\n\tid: 0,\n\ttitle: \"\",\n\tlibraryPanel: defaultLibraryPanelRef(),\n});\n\n// A library panel is a reusable panel that you can use in any dashboard.\n// When you make a change to a library panel, that change propagates to all instances of where the panel is used.\n// Library panels streamline reuse of panels across multiple dashboards.\nexport interface LibraryPanelRef {\n\t// Library panel name\n\tname: string;\n\t// Library panel uid\n\tuid: string;\n}\n\nexport const defaultLibraryPanelRef = (): LibraryPanelRef => ({\n\tname: \"\",\n\tuid: \"\",\n});\n\nexport interface GridLayoutKind {\n\tkind: \"GridLayout\";\n\tspec: GridLayoutSpec;\n}\n\nexport const defaultGridLayoutKind = (): GridLayoutKind => ({\n\tkind: \"GridLayout\",\n\tspec: defaultGridLayoutSpec(),\n});\n\nexport interface GridLayoutSpec {\n\titems: GridLayoutItemKind[];\n}\n\nexport const defaultGridLayoutSpec = (): GridLayoutSpec => ({\n\titems: [],\n});\n\nexport interface GridLayoutItemKind {\n\tkind: \"GridLayoutItem\";\n\tspec: GridLayoutItemSpec;\n}\n\nexport const defaultGridLayoutItemKind = (): GridLayoutItemKind => ({\n\tkind: \"GridLayoutItem\",\n\tspec: defaultGridLayoutItemSpec(),\n});\n\nexport interface GridLayoutItemSpec {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\t// reference to a PanelKind from dashboard.spec.elements Expressed as JSON Schema reference\n\telement: ElementReference;\n\trepeat?: RepeatOptions;\n}\n\nexport const defaultGridLayoutItemSpec = (): GridLayoutItemSpec => ({\n\tx: 0,\n\ty: 0,\n\twidth: 0,\n\theight: 0,\n\telement: defaultElementReference(),\n});\n\nexport interface ElementReference {\n\tkind: \"ElementReference\";\n\tname: string;\n}\n\nexport const defaultElementReference = (): ElementReference => ({\n\tkind: \"ElementReference\",\n\tname: \"\",\n});\n\nexport interface RepeatOptions {\n\tmode: \"variable\";\n\tvalue: string;\n\tdirection?: \"h\" | \"v\";\n\tmaxPerRow?: number;\n}\n\nexport const defaultRepeatOptions = (): RepeatOptions => ({\n\tmode: RepeatMode,\n\tvalue: \"\",\n});\n\n// other repeat modes will be added in the future: label, frame\nexport const RepeatMode = \"variable\";\n\nexport interface RowsLayoutKind {\n\tkind: \"RowsLayout\";\n\tspec: RowsLayoutSpec;\n}\n\nexport const defaultRowsLayoutKind = (): RowsLayoutKind => ({\n\tkind: \"RowsLayout\",\n\tspec: defaultRowsLayoutSpec(),\n});\n\nexport interface RowsLayoutSpec {\n\trows: RowsLayoutRowKind[];\n}\n\nexport const defaultRowsLayoutSpec = (): RowsLayoutSpec => ({\n\trows: [],\n});\n\nexport interface RowsLayoutRowKind {\n\tkind: \"RowsLayoutRow\";\n\tspec: RowsLayoutRowSpec;\n}\n\nexport const defaultRowsLayoutRowKind = (): RowsLayoutRowKind => ({\n\tkind: \"RowsLayoutRow\",\n\tspec: defaultRowsLayoutRowSpec(),\n});\n\nexport interface RowsLayoutRowSpec {\n\ttitle?: string;\n\tcollapse?: boolean;\n\thideHeader?: boolean;\n\tfillScreen?: boolean;\n\tconditionalRendering?: ConditionalRenderingGroupKind;\n\trepeat?: RowRepeatOptions;\n\tlayout: GridLayoutKind | AutoGridLayoutKind | TabsLayoutKind | RowsLayoutKind;\n}\n\nexport const defaultRowsLayoutRowSpec = (): RowsLayoutRowSpec => ({\n\tlayout: defaultGridLayoutKind(),\n});\n\nexport interface ConditionalRenderingGroupKind {\n\tkind: \"ConditionalRenderingGroup\";\n\tspec: ConditionalRenderingGroupSpec;\n}\n\nexport const defaultConditionalRenderingGroupKind = (): ConditionalRenderingGroupKind => ({\n\tkind: \"ConditionalRenderingGroup\",\n\tspec: defaultConditionalRenderingGroupSpec(),\n});\n\nexport interface ConditionalRenderingGroupSpec {\n\tvisibility: \"show\" | \"hide\";\n\tcondition: \"and\" | \"or\";\n\titems: (ConditionalRenderingVariableKind | ConditionalRenderingDataKind | ConditionalRenderingTimeRangeSizeKind)[];\n}\n\nexport const defaultConditionalRenderingGroupSpec = (): ConditionalRenderingGroupSpec => ({\n\tvisibility: \"show\",\n\tcondition: \"and\",\n\titems: [],\n});\n\nexport interface ConditionalRenderingVariableKind {\n\tkind: \"ConditionalRenderingVariable\";\n\tspec: ConditionalRenderingVariableSpec;\n}\n\nexport const defaultConditionalRenderingVariableKind = (): ConditionalRenderingVariableKind => ({\n\tkind: \"ConditionalRenderingVariable\",\n\tspec: defaultConditionalRenderingVariableSpec(),\n});\n\nexport interface ConditionalRenderingVariableSpec {\n\tvariable: string;\n\toperator: \"equals\" | \"notEquals\" | \"matches\" | \"notMatches\";\n\tvalue: string;\n}\n\nexport const defaultConditionalRenderingVariableSpec = (): ConditionalRenderingVariableSpec => ({\n\tvariable: \"\",\n\toperator: \"equals\",\n\tvalue: \"\",\n});\n\nexport interface ConditionalRenderingDataKind {\n\tkind: \"ConditionalRenderingData\";\n\tspec: ConditionalRenderingDataSpec;\n}\n\nexport const defaultConditionalRenderingDataKind = (): ConditionalRenderingDataKind => ({\n\tkind: \"ConditionalRenderingData\",\n\tspec: defaultConditionalRenderingDataSpec(),\n});\n\nexport interface ConditionalRenderingDataSpec {\n\tvalue: boolean;\n}\n\nexport const defaultConditionalRenderingDataSpec = (): ConditionalRenderingDataSpec => ({\n\tvalue: false,\n});\n\nexport interface ConditionalRenderingTimeRangeSizeKind {\n\tkind: \"ConditionalRenderingTimeRangeSize\";\n\tspec: ConditionalRenderingTimeRangeSizeSpec;\n}\n\nexport const defaultConditionalRenderingTimeRangeSizeKind = (): ConditionalRenderingTimeRangeSizeKind => ({\n\tkind: \"ConditionalRenderingTimeRangeSize\",\n\tspec: defaultConditionalRenderingTimeRangeSizeSpec(),\n});\n\nexport interface ConditionalRenderingTimeRangeSizeSpec {\n\tvalue: string;\n}\n\nexport const defaultConditionalRenderingTimeRangeSizeSpec = (): ConditionalRenderingTimeRangeSizeSpec => ({\n\tvalue: \"\",\n});\n\nexport interface RowRepeatOptions {\n\tmode: \"variable\";\n\tvalue: string;\n}\n\nexport const defaultRowRepeatOptions = (): RowRepeatOptions => ({\n\tmode: RepeatMode,\n\tvalue: \"\",\n});\n\nexport interface AutoGridLayoutKind {\n\tkind: \"AutoGridLayout\";\n\tspec: AutoGridLayoutSpec;\n}\n\nexport const defaultAutoGridLayoutKind = (): AutoGridLayoutKind => ({\n\tkind: \"AutoGridLayout\",\n\tspec: defaultAutoGridLayoutSpec(),\n});\n\nexport interface AutoGridLayoutSpec {\n\tmaxColumnCount?: number;\n\tcolumnWidthMode: \"narrow\" | \"standard\" | \"wide\" | \"custom\";\n\tcolumnWidth?: number;\n\trowHeightMode: \"short\" | \"standard\" | \"tall\" | \"custom\";\n\trowHeight?: number;\n\tfillScreen?: boolean;\n\titems: AutoGridLayoutItemKind[];\n}\n\nexport const defaultAutoGridLayoutSpec = (): AutoGridLayoutSpec => ({\n\tmaxColumnCount: 3,\n\tcolumnWidthMode: \"standard\",\n\trowHeightMode: \"standard\",\n\tfillScreen: false,\n\titems: [],\n});\n\nexport interface AutoGridLayoutItemKind {\n\tkind: \"AutoGridLayoutItem\";\n\tspec: AutoGridLayoutItemSpec;\n}\n\nexport const defaultAutoGridLayoutItemKind = (): AutoGridLayoutItemKind => ({\n\tkind: \"AutoGridLayoutItem\",\n\tspec: defaultAutoGridLayoutItemSpec(),\n});\n\nexport interface AutoGridLayoutItemSpec {\n\telement: ElementReference;\n\trepeat?: AutoGridRepeatOptions;\n\tconditionalRendering?: ConditionalRenderingGroupKind;\n}\n\nexport const defaultAutoGridLayoutItemSpec = (): AutoGridLayoutItemSpec => ({\n\telement: defaultElementReference(),\n});\n\nexport interface AutoGridRepeatOptions {\n\tmode: \"variable\";\n\tvalue: string;\n}\n\nexport const defaultAutoGridRepeatOptions = (): AutoGridRepeatOptions => ({\n\tmode: RepeatMode,\n\tvalue: \"\",\n});\n\nexport interface TabsLayoutKind {\n\tkind: \"TabsLayout\";\n\tspec: TabsLayoutSpec;\n}\n\nexport const defaultTabsLayoutKind = (): TabsLayoutKind => ({\n\tkind: \"TabsLayout\",\n\tspec: defaultTabsLayoutSpec(),\n});\n\nexport interface TabsLayoutSpec {\n\ttabs: TabsLayoutTabKind[];\n}\n\nexport const defaultTabsLayoutSpec = (): TabsLayoutSpec => ({\n\ttabs: [],\n});\n\nexport interface TabsLayoutTabKind {\n\tkind: \"TabsLayoutTab\";\n\tspec: TabsLayoutTabSpec;\n}\n\nexport const defaultTabsLayoutTabKind = (): TabsLayoutTabKind => ({\n\tkind: \"TabsLayoutTab\",\n\tspec: defaultTabsLayoutTabSpec(),\n});\n\nexport interface TabsLayoutTabSpec {\n\ttitle?: string;\n\tlayout: GridLayoutKind | RowsLayoutKind | AutoGridLayoutKind | TabsLayoutKind;\n\tconditionalRendering?: ConditionalRenderingGroupKind;\n\trepeat?: TabRepeatOptions;\n}\n\nexport const defaultTabsLayoutTabSpec = (): TabsLayoutTabSpec => ({\n\tlayout: defaultGridLayoutKind(),\n});\n\nexport interface TabRepeatOptions {\n\tmode: \"variable\";\n\tvalue: string;\n}\n\nexport const defaultTabRepeatOptions = (): TabRepeatOptions => ({\n\tmode: RepeatMode,\n\tvalue: \"\",\n});\n\n// Links with references to other dashboards or external resources\nexport interface DashboardLink {\n\t// Title to display with the link\n\ttitle: string;\n\t// Link type. Accepted values are dashboards (to refer to another dashboard) and link (to refer to an external resource)\n\t// FIXME: The type is generated as `type: DashboardLinkType | dashboardLinkType.Link;` but it should be `type: DashboardLinkType`\n\ttype: DashboardLinkType;\n\t// Icon name to be displayed with the link\n\ticon: string;\n\t// Tooltip to display when the user hovers their mouse over it\n\ttooltip: string;\n\t// Link URL. Only required/valid if the type is link\n\turl?: string;\n\t// List of tags to limit the linked dashboards. If empty, all dashboards will be displayed. Only valid if the type is dashboards\n\ttags: string[];\n\t// If true, all dashboards links will be displayed in a dropdown. If false, all dashboards links will be displayed side by side. Only valid if the type is dashboards\n\tasDropdown: boolean;\n\t// If true, the link will be opened in a new tab\n\ttargetBlank: boolean;\n\t// If true, includes current template variables values in the link as query params\n\tincludeVars: boolean;\n\t// If true, includes current time range in the link as query params\n\tkeepTime: boolean;\n\t// Placement can be used to display the link somewhere else on the dashboard other than above the visualisations.\n\tplacement?: \"inControlsMenu\";\n}\n\nexport const defaultDashboardLink = (): DashboardLink => ({\n\ttitle: \"\",\n\ttype: \"link\",\n\ticon: \"\",\n\ttooltip: \"\",\n\ttags: [],\n\tasDropdown: false,\n\ttargetBlank: false,\n\tincludeVars: false,\n\tkeepTime: false,\n\tplacement: DashboardLinkPlacement,\n});\n\n// Dashboard Link type. Accepted values are dashboards (to refer to another dashboard) and link (to refer to an external resource)\nexport type DashboardLinkType = \"link\" | \"dashboards\";\n\nexport const defaultDashboardLinkType = (): DashboardLinkType => (\"link\");\n\n// Dashboard Link placement. Defines where the link should be displayed.\n// - \"inControlsMenu\" renders the link in bottom part of the dashboard controls dropdown menu\nexport const DashboardLinkPlacement = \"inControlsMenu\";\n\n// Time configuration\n// It defines the default time config for the time picker, the refresh picker for the specific dashboard.\nexport interface TimeSettingsSpec {\n\t// Timezone of dashboard. Accepted values are IANA TZDB zone ID or \"browser\" or \"utc\".\n\ttimezone?: string;\n\t// Start time range for dashboard.\n\t// Accepted values are relative time strings like \"now-6h\" or absolute time strings like \"2020-07-10T08:00:00.000Z\".\n\tfrom: string;\n\t// End time range for dashboard.\n\t// Accepted values are relative time strings like \"now-6h\" or absolute time strings like \"2020-07-10T08:00:00.000Z\".\n\tto: string;\n\t// Refresh rate of dashboard. Represented via interval string, e.g. \"5s\", \"1m\", \"1h\", \"1d\".\n\t// v1: refresh\n\tautoRefresh: string;\n\t// Interval options available in the refresh picker dropdown.\n\t// v1: timepicker.refresh_intervals\n\tautoRefreshIntervals: string[];\n\t// Selectable options available in the time picker dropdown. Has no effect on provisioned dashboard.\n\t// v1: timepicker.quick_ranges , not exposed in the UI\n\tquickRanges?: TimeRangeOption[];\n\t// Whether timepicker is visible or not.\n\t// v1: timepicker.hidden\n\thideTimepicker: boolean;\n\t// Day when the week starts. Expressed by the name of the day in lowercase, e.g. \"monday\".\n\tweekStart?: \"saturday\" | \"monday\" | \"sunday\";\n\t// The month that the fiscal year starts on. 0 = January, 11 = December\n\tfiscalYearStartMonth: number;\n\t// Override the now time by entering a time delay. Use this option to accommodate known delays in data aggregation to avoid null values.\n\t// v1: timepicker.nowDelay\n\tnowDelay?: string;\n}\n\nexport const defaultTimeSettingsSpec = (): TimeSettingsSpec => ({\n\ttimezone: \"browser\",\n\tfrom: \"now-6h\",\n\tto: \"now\",\n\tautoRefresh: \"\",\n\tautoRefreshIntervals: [\n\"5s\",\n\"10s\",\n\"30s\",\n\"1m\",\n\"5m\",\n\"15m\",\n\"30m\",\n\"1h\",\n\"2h\",\n\"1d\",\n],\n\thideTimepicker: false,\n\tfiscalYearStartMonth: 0,\n});\n\nexport interface TimeRangeOption {\n\tdisplay: string;\n\tfrom: string;\n\tto: string;\n}\n\nexport const defaultTimeRangeOption = (): TimeRangeOption => ({\n\tdisplay: \"Last 6 hours\",\n\tfrom: \"now-6h\",\n\tto: \"now\",\n});\n\nexport type VariableKind = QueryVariableKind | TextVariableKind | ConstantVariableKind | DatasourceVariableKind | IntervalVariableKind | CustomVariableKind | GroupByVariableKind | AdhocVariableKind | SwitchVariableKind;\n\nexport const defaultVariableKind = (): VariableKind => (defaultQueryVariableKind());\n\n// Query variable kind\nexport interface QueryVariableKind {\n\tkind: \"QueryVariable\";\n\tspec: QueryVariableSpec;\n}\n\nexport const defaultQueryVariableKind = (): QueryVariableKind => ({\n\tkind: \"QueryVariable\",\n\tspec: defaultQueryVariableSpec(),\n});\n\n// Query variable specification\nexport interface QueryVariableSpec {\n\tname: string;\n\tcurrent: VariableOption;\n\tlabel?: string;\n\thide: VariableHide;\n\trefresh: VariableRefresh;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n\tquery: DataQueryKind;\n\tregex: string;\n\tsort: VariableSort;\n\tdefinition?: string;\n\toptions: VariableOption[];\n\tmulti: boolean;\n\tincludeAll: boolean;\n\tallValue?: string;\n\tplaceholder?: string;\n\tallowCustomValue: boolean;\n\tstaticOptions?: VariableOption[];\n\tstaticOptionsOrder?: \"before\" | \"after\" | \"sorted\";\n}\n\nexport const defaultQueryVariableSpec = (): QueryVariableSpec => ({\n\tname: \"\",\n\tcurrent: { text: \"\", value: \"\", },\n\thide: \"dontHide\",\n\trefresh: \"never\",\n\tskipUrlSync: false,\n\tquery: defaultDataQueryKind(),\n\tregex: \"\",\n\tsort: \"disabled\",\n\toptions: [],\n\tmulti: false,\n\tincludeAll: false,\n\tallowCustomValue: true,\n});\n\n// Variable option specification\nexport interface VariableOption {\n\t// Whether the option is selected or not\n\tselected?: boolean;\n\t// Text to be displayed for the option\n\ttext: string | string[];\n\t// Value of the option\n\tvalue: string | string[];\n}\n\nexport const defaultVariableOption = (): VariableOption => ({\n\ttext: \"\",\n\tvalue: \"\",\n});\n\n// Determine if the variable shows on dashboard\n// Accepted values are `dontHide` (show label and value), `hideLabel` (show value only), `hideVariable` (show nothing), `inControlsMenu` (show in a drop-down menu).\nexport type VariableHide = \"dontHide\" | \"hideLabel\" | \"hideVariable\" | \"inControlsMenu\";\n\nexport const defaultVariableHide = (): VariableHide => (\"dontHide\");\n\n// Options to config when to refresh a variable\n// `never`: Never refresh the variable\n// `onDashboardLoad`: Queries the data source every time the dashboard loads.\n// `onTimeRangeChanged`: Queries the data source when the dashboard time range changes.\nexport type VariableRefresh = \"never\" | \"onDashboardLoad\" | \"onTimeRangeChanged\";\n\nexport const defaultVariableRefresh = (): VariableRefresh => (\"never\");\n\n// Sort variable options\n// Accepted values are:\n// `disabled`: No sorting\n// `alphabeticalAsc`: Alphabetical ASC\n// `alphabeticalDesc`: Alphabetical DESC\n// `numericalAsc`: Numerical ASC\n// `numericalDesc`: Numerical DESC\n// `alphabeticalCaseInsensitiveAsc`: Alphabetical Case Insensitive ASC\n// `alphabeticalCaseInsensitiveDesc`: Alphabetical Case Insensitive DESC\n// `naturalAsc`: Natural ASC\n// `naturalDesc`: Natural DESC\n// VariableSort enum with default value\nexport type VariableSort = \"disabled\" | \"alphabeticalAsc\" | \"alphabeticalDesc\" | \"numericalAsc\" | \"numericalDesc\" | \"alphabeticalCaseInsensitiveAsc\" | \"alphabeticalCaseInsensitiveDesc\" | \"naturalAsc\" | \"naturalDesc\";\n\nexport const defaultVariableSort = (): VariableSort => (\"disabled\");\n\n// Text variable kind\nexport interface TextVariableKind {\n\tkind: \"TextVariable\";\n\tspec: TextVariableSpec;\n}\n\nexport const defaultTextVariableKind = (): TextVariableKind => ({\n\tkind: \"TextVariable\",\n\tspec: defaultTextVariableSpec(),\n});\n\n// Text variable specification\nexport interface TextVariableSpec {\n\tname: string;\n\tcurrent: VariableOption;\n\tquery: string;\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n}\n\nexport const defaultTextVariableSpec = (): TextVariableSpec => ({\n\tname: \"\",\n\tcurrent: { text: \"\", value: \"\", },\n\tquery: \"\",\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n});\n\n// Constant variable kind\nexport interface ConstantVariableKind {\n\tkind: \"ConstantVariable\";\n\tspec: ConstantVariableSpec;\n}\n\nexport const defaultConstantVariableKind = (): ConstantVariableKind => ({\n\tkind: \"ConstantVariable\",\n\tspec: defaultConstantVariableSpec(),\n});\n\n// Constant variable specification\nexport interface ConstantVariableSpec {\n\tname: string;\n\tquery: string;\n\tcurrent: VariableOption;\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n}\n\nexport const defaultConstantVariableSpec = (): ConstantVariableSpec => ({\n\tname: \"\",\n\tquery: \"\",\n\tcurrent: { text: \"\", value: \"\", },\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n});\n\n// Datasource variable kind\nexport interface DatasourceVariableKind {\n\tkind: \"DatasourceVariable\";\n\tspec: DatasourceVariableSpec;\n}\n\nexport const defaultDatasourceVariableKind = (): DatasourceVariableKind => ({\n\tkind: \"DatasourceVariable\",\n\tspec: defaultDatasourceVariableSpec(),\n});\n\n// Datasource variable specification\nexport interface DatasourceVariableSpec {\n\tname: string;\n\tpluginId: string;\n\trefresh: VariableRefresh;\n\tregex: string;\n\tcurrent: VariableOption;\n\toptions: VariableOption[];\n\tmulti: boolean;\n\tincludeAll: boolean;\n\tallValue?: string;\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n\tallowCustomValue: boolean;\n}\n\nexport const defaultDatasourceVariableSpec = (): DatasourceVariableSpec => ({\n\tname: \"\",\n\tpluginId: \"\",\n\trefresh: \"never\",\n\tregex: \"\",\n\tcurrent: { text: \"\", value: \"\", },\n\toptions: [],\n\tmulti: false,\n\tincludeAll: false,\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n\tallowCustomValue: true,\n});\n\n// Interval variable kind\nexport interface IntervalVariableKind {\n\tkind: \"IntervalVariable\";\n\tspec: IntervalVariableSpec;\n}\n\nexport const defaultIntervalVariableKind = (): IntervalVariableKind => ({\n\tkind: \"IntervalVariable\",\n\tspec: defaultIntervalVariableSpec(),\n});\n\n// Interval variable specification\nexport interface IntervalVariableSpec {\n\tname: string;\n\tquery: string;\n\tcurrent: VariableOption;\n\toptions: VariableOption[];\n\tauto: boolean;\n\tauto_min: string;\n\tauto_count: number;\n\trefresh: VariableRefresh;\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n}\n\nexport const defaultIntervalVariableSpec = (): IntervalVariableSpec => ({\n\tname: \"\",\n\tquery: \"\",\n\tcurrent: { text: \"\", value: \"\", },\n\toptions: [],\n\tauto: false,\n\tauto_min: \"\",\n\tauto_count: 0,\n\trefresh: \"never\",\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n});\n\n// Custom variable kind\nexport interface CustomVariableKind {\n\tkind: \"CustomVariable\";\n\tspec: CustomVariableSpec;\n}\n\nexport const defaultCustomVariableKind = (): CustomVariableKind => ({\n\tkind: \"CustomVariable\",\n\tspec: defaultCustomVariableSpec(),\n});\n\n// Custom variable specification\nexport interface CustomVariableSpec {\n\tname: string;\n\tquery: string;\n\tcurrent: VariableOption;\n\toptions: VariableOption[];\n\tmulti: boolean;\n\tincludeAll: boolean;\n\tallValue?: string;\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n\tallowCustomValue: boolean;\n}\n\nexport const defaultCustomVariableSpec = (): CustomVariableSpec => ({\n\tname: \"\",\n\tquery: \"\",\n\tcurrent: defaultVariableOption(),\n\toptions: [],\n\tmulti: false,\n\tincludeAll: false,\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n\tallowCustomValue: true,\n});\n\n// Group variable kind\nexport interface GroupByVariableKind {\n\tkind: \"GroupByVariable\";\n\tgroup: string;\n\tdatasource?: {\n\t\tname?: string;\n\t};\n\tspec: GroupByVariableSpec;\n}\n\nexport const defaultGroupByVariableKind = (): GroupByVariableKind => ({\n\tkind: \"GroupByVariable\",\n\tgroup: \"\",\n\tspec: defaultGroupByVariableSpec(),\n});\n\n// GroupBy variable specification\nexport interface GroupByVariableSpec {\n\tname: string;\n\tdefaultValue?: VariableOption;\n\tcurrent: VariableOption;\n\toptions: VariableOption[];\n\tmulti: boolean;\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n}\n\nexport const defaultGroupByVariableSpec = (): GroupByVariableSpec => ({\n\tname: \"\",\n\tcurrent: { text: \"\", value: \"\", },\n\toptions: [],\n\tmulti: false,\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n});\n\n// Adhoc variable kind\nexport interface AdhocVariableKind {\n\tkind: \"AdhocVariable\";\n\tgroup: string;\n\tdatasource?: {\n\t\tname?: string;\n\t};\n\tspec: AdhocVariableSpec;\n}\n\nexport const defaultAdhocVariableKind = (): AdhocVariableKind => ({\n\tkind: \"AdhocVariable\",\n\tgroup: \"\",\n\tspec: defaultAdhocVariableSpec(),\n});\n\n// Adhoc variable specification\nexport interface AdhocVariableSpec {\n\tname: string;\n\tbaseFilters: AdHocFilterWithLabels[];\n\tfilters: AdHocFilterWithLabels[];\n\tdefaultKeys: MetricFindValue[];\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n\tallowCustomValue: boolean;\n}\n\nexport const defaultAdhocVariableSpec = (): AdhocVariableSpec => ({\n\tname: \"\",\n\tbaseFilters: [],\n\tfilters: [],\n\tdefaultKeys: [],\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n\tallowCustomValue: true,\n});\n\n// Define the AdHocFilterWithLabels type\nexport interface AdHocFilterWithLabels {\n\tkey: string;\n\toperator: string;\n\tvalue: string;\n\tvalues?: string[];\n\tkeyLabel?: string;\n\tvalueLabels?: string[];\n\tforceEdit?: boolean;\n\torigin?: \"dashboard\";\n\t// @deprecated\n\tcondition?: string;\n}\n\nexport const defaultAdHocFilterWithLabels = (): AdHocFilterWithLabels => ({\n\tkey: \"\",\n\toperator: \"\",\n\tvalue: \"\",\n\torigin: FilterOrigin,\n});\n\n// Determine the origin of the adhoc variable filter\nexport const FilterOrigin = \"dashboard\";\n\n// Define the MetricFindValue type\nexport interface MetricFindValue {\n\ttext: string;\n\tvalue?: string | number;\n\tgroup?: string;\n\texpandable?: boolean;\n}\n\nexport const defaultMetricFindValue = (): MetricFindValue => ({\n\ttext: \"\",\n});\n\nexport interface SwitchVariableKind {\n\tkind: \"SwitchVariable\";\n\tspec: SwitchVariableSpec;\n}\n\nexport const defaultSwitchVariableKind = (): SwitchVariableKind => ({\n\tkind: \"SwitchVariable\",\n\tspec: defaultSwitchVariableSpec(),\n});\n\nexport interface SwitchVariableSpec {\n\tname: string;\n\tcurrent: string;\n\tenabledValue: string;\n\tdisabledValue: string;\n\tlabel?: string;\n\thide: VariableHide;\n\tskipUrlSync: boolean;\n\tdescription?: string;\n}\n\nexport const defaultSwitchVariableSpec = (): SwitchVariableSpec => ({\n\tname: \"\",\n\tcurrent: \"false\",\n\tenabledValue: \"true\",\n\tdisabledValue: \"false\",\n\thide: \"dontHide\",\n\tskipUrlSync: false,\n});\n\nexport interface Spec {\n\tannotations: AnnotationQueryKind[];\n\t// Configuration of dashboard cursor sync behavior.\n\t// \"Off\" for no shared crosshair or tooltip (default).\n\t// \"Crosshair\" for shared crosshair.\n\t// \"Tooltip\" for shared crosshair AND shared tooltip.\n\tcursorSync: DashboardCursorSync;\n\t// Description of dashboard.\n\tdescription?: string;\n\t// Whether a dashboard is editable or not.\n\teditable?: boolean;\n\telements: Record<string, Element>;\n\tlayout: GridLayoutKind | RowsLayoutKind | AutoGridLayoutKind | TabsLayoutKind;\n\t// Links with references to other dashboards or external websites.\n\tlinks: DashboardLink[];\n\t// When set to true, the dashboard will redraw panels at an interval matching the pixel width.\n\t// This will keep data \"moving left\" regardless of the query refresh rate. This setting helps\n\t// avoid dashboards presenting stale live data.\n\tliveNow?: boolean;\n\t// When set to true, the dashboard will load all panels in the dashboard when it's loaded.\n\tpreload: boolean;\n\t// Plugins only. The version of the dashboard installed together with the plugin.\n\t// This is used to determine if the dashboard should be updated when the plugin is updated.\n\trevision?: number;\n\t// Tags associated with dashboard.\n\ttags: string[];\n\ttimeSettings: TimeSettingsSpec;\n\t// Title of dashboard.\n\ttitle: string;\n\t// Configured template variables.\n\tvariables: VariableKind[];\n}\n\nexport const defaultSpec = (): Spec => ({\n\tannotations: [],\n\tcursorSync: \"Off\",\n\teditable: true,\n\telements: {},\n\tlayout: defaultGridLayoutKind(),\n\tlinks: [],\n\tpreload: false,\n\ttags: [],\n\ttimeSettings: defaultTimeSettingsSpec(),\n\ttitle: \"\",\n\tvariables: [],\n});\n\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { getAPIBaseURL } from '../../../../utils/utils';\nimport { createBaseQuery } from '../../createBaseQuery';\n\nexport const API_GROUP = 'playlist.grafana.app' as const;\nexport const API_VERSION = 'v0alpha1' as const;\nexport const BASE_URL = getAPIBaseURL(API_GROUP, API_VERSION);\n\nexport const api = createApi({\n reducerPath: 'playlistAPIv0alpha1',\n baseQuery: createBaseQuery({\n baseURL: BASE_URL,\n }),\n endpoints: () => ({}),\n});\n","import { api } from './baseAPI';\nexport const addTagTypes = ['API Discovery', 'Playlist'] as const;\nconst injectedRtkApi = api\n .enhanceEndpoints({\n addTagTypes,\n })\n .injectEndpoints({\n endpoints: (build) => ({\n getApiResources: build.query<GetApiResourcesApiResponse, GetApiResourcesApiArg>({\n query: () => ({ url: `/apis/playlist.grafana.app/v0alpha1/` }),\n providesTags: ['API Discovery'],\n }),\n listPlaylist: build.query<ListPlaylistApiResponse, ListPlaylistApiArg>({\n query: (queryArg) => ({\n url: `/playlists`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['Playlist'],\n }),\n createPlaylist: build.mutation<CreatePlaylistApiResponse, CreatePlaylistApiArg>({\n query: (queryArg) => ({\n url: `/playlists`,\n method: 'POST',\n body: queryArg.playlist,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Playlist'],\n }),\n deletecollectionPlaylist: build.mutation<DeletecollectionPlaylistApiResponse, DeletecollectionPlaylistApiArg>({\n query: (queryArg) => ({\n url: `/playlists`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n continue: queryArg['continue'],\n dryRun: queryArg.dryRun,\n fieldSelector: queryArg.fieldSelector,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n },\n }),\n invalidatesTags: ['Playlist'],\n }),\n getPlaylist: build.query<GetPlaylistApiResponse, GetPlaylistApiArg>({\n query: (queryArg) => ({\n url: `/playlists/${queryArg.name}`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['Playlist'],\n }),\n replacePlaylist: build.mutation<ReplacePlaylistApiResponse, ReplacePlaylistApiArg>({\n query: (queryArg) => ({\n url: `/playlists/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.playlist,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Playlist'],\n }),\n deletePlaylist: build.mutation<DeletePlaylistApiResponse, DeletePlaylistApiArg>({\n query: (queryArg) => ({\n url: `/playlists/${queryArg.name}`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n },\n }),\n invalidatesTags: ['Playlist'],\n }),\n updatePlaylist: build.mutation<UpdatePlaylistApiResponse, UpdatePlaylistApiArg>({\n query: (queryArg) => ({\n url: `/playlists/${queryArg.name}`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['Playlist'],\n }),\n getPlaylistStatus: build.query<GetPlaylistStatusApiResponse, GetPlaylistStatusApiArg>({\n query: (queryArg) => ({\n url: `/playlists/${queryArg.name}/status`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['Playlist'],\n }),\n replacePlaylistStatus: build.mutation<ReplacePlaylistStatusApiResponse, ReplacePlaylistStatusApiArg>({\n query: (queryArg) => ({\n url: `/playlists/${queryArg.name}/status`,\n method: 'PUT',\n body: queryArg.playlist,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Playlist'],\n }),\n updatePlaylistStatus: build.mutation<UpdatePlaylistStatusApiResponse, UpdatePlaylistStatusApiArg>({\n query: (queryArg) => ({\n url: `/playlists/${queryArg.name}/status`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['Playlist'],\n }),\n }),\n overrideExisting: false,\n });\nexport { injectedRtkApi as generatedAPI };\nexport type GetApiResourcesApiResponse = /** status 200 OK */ ApiResourceList;\nexport type GetApiResourcesApiArg = void;\nexport type ListPlaylistApiResponse = /** status 200 OK */ PlaylistList;\nexport type ListPlaylistApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type CreatePlaylistApiResponse = /** status 200 OK */\n | Playlist\n | /** status 201 Created */ Playlist\n | /** status 202 Accepted */ Playlist;\nexport type CreatePlaylistApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n playlist: Playlist;\n};\nexport type DeletecollectionPlaylistApiResponse = /** status 200 OK */ Status;\nexport type DeletecollectionPlaylistApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n};\nexport type GetPlaylistApiResponse = /** status 200 OK */ Playlist;\nexport type GetPlaylistApiArg = {\n /** name of the Playlist */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplacePlaylistApiResponse = /** status 200 OK */ Playlist | /** status 201 Created */ Playlist;\nexport type ReplacePlaylistApiArg = {\n /** name of the Playlist */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n playlist: Playlist;\n};\nexport type DeletePlaylistApiResponse = /** status 200 OK */ Status | /** status 202 Accepted */ Status;\nexport type DeletePlaylistApiArg = {\n /** name of the Playlist */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n};\nexport type UpdatePlaylistApiResponse = /** status 200 OK */ Playlist | /** status 201 Created */ Playlist;\nexport type UpdatePlaylistApiArg = {\n /** name of the Playlist */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type GetPlaylistStatusApiResponse = /** status 200 OK */ Playlist;\nexport type GetPlaylistStatusApiArg = {\n /** name of the Playlist */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplacePlaylistStatusApiResponse = /** status 200 OK */ Playlist | /** status 201 Created */ Playlist;\nexport type ReplacePlaylistStatusApiArg = {\n /** name of the Playlist */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n playlist: Playlist;\n};\nexport type UpdatePlaylistStatusApiResponse = /** status 200 OK */ Playlist | /** status 201 Created */ Playlist;\nexport type UpdatePlaylistStatusApiArg = {\n /** name of the Playlist */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type ApiResource = {\n /** categories is a list of the grouped resources this resource belongs to (e.g. 'all') */\n categories?: string[];\n /** group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\". */\n group?: string;\n /** kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') */\n kind: string;\n /** name is the plural name of the resource. */\n name: string;\n /** namespaced indicates if a resource is namespaced or not. */\n namespaced: boolean;\n /** shortNames is a list of suggested short names of the resource. */\n shortNames?: string[];\n /** singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface. */\n singularName: string;\n /** The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates. */\n storageVersionHash?: string;\n /** verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy) */\n verbs: string[];\n /** version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\". */\n version?: string;\n};\nexport type ApiResourceList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** groupVersion is the group and version this APIResourceList is for. */\n groupVersion: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** resources contains the name of the resources and if they are namespaced. */\n resources: ApiResource[];\n};\nexport type Time = string;\nexport type FieldsV1 = object;\nexport type ManagedFieldsEntry = {\n /** APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted. */\n apiVersion?: string;\n /** FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\" */\n fieldsType?: string;\n /** FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type. */\n fieldsV1?: FieldsV1;\n /** Manager is an identifier of the workflow managing these fields. */\n manager?: string;\n /** Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'. */\n operation?: string;\n /** Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource. */\n subresource?: string;\n /** Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over. */\n time?: Time;\n};\nexport type OwnerReference = {\n /** API version of the referent. */\n apiVersion: string;\n /** If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned. */\n blockOwnerDeletion?: boolean;\n /** If true, this reference points to the managing controller. */\n controller?: boolean;\n /** Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n /** Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name: string;\n /** UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid: string;\n};\nexport type ObjectMeta = {\n /** Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations */\n annotations?: {\n [key: string]: string;\n };\n /** CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n \n Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n creationTimestamp?: Time;\n /** Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. */\n deletionGracePeriodSeconds?: number;\n /** DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n \n Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n deletionTimestamp?: Time;\n /** Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list. */\n finalizers?: string[];\n /** GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n \n If this field is specified and the generated name exists, the server will return a 409.\n \n Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency */\n generateName?: string;\n /** A sequence number representing a specific generation of the desired state. Populated by the system. Read-only. */\n generation?: number;\n /** Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels */\n labels?: {\n [key: string]: string;\n };\n /** ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object. */\n managedFields?: ManagedFieldsEntry[];\n /** Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name?: string;\n /** Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n \n Must be a DNS_LABEL. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces */\n namespace?: string;\n /** List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller. */\n ownerReferences?: OwnerReference[];\n /** An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n \n Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n /** UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n \n Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type PlaylistItem = {\n /** type of the item. */\n type: 'dashboard_by_tag' | 'dashboard_by_uid' | 'dashboard_by_id';\n /** Value depends on type and describes the playlist item.\n - dashboard_by_id: The value is an internal numerical identifier set by Grafana. This\n is not portable as the numerical identifier is non-deterministic between different instances.\n Will be replaced by dashboard_by_uid in the future. (deprecated)\n - dashboard_by_tag: The value is a tag which is set on any number of dashboards. All\n dashboards behind the tag will be added to the playlist.\n - dashboard_by_uid: The value is the dashboard UID */\n value: string;\n};\nexport type PlaylistSpec = {\n interval: string;\n items: PlaylistItem[];\n title: string;\n};\nexport type PlaylistOperatorState = {\n /** descriptiveState is an optional more descriptive state field which has no requirements on format */\n descriptiveState?: string;\n /** details contains any extra information that is operator-specific */\n details?: {\n [key: string]: {\n [key: string]: any;\n };\n };\n /** lastEvaluation is the ResourceVersion last evaluated */\n lastEvaluation: string;\n /** state describes the state of the lastEvaluation.\n It is limited to three possible states for machine evaluation. */\n state: 'success' | 'in_progress' | 'failed';\n};\nexport type PlaylistStatus = {\n /** additionalFields is reserved for future use */\n additionalFields?: {\n [key: string]: {\n [key: string]: any;\n };\n };\n /** operatorStates is a map of operator ID to operator state evaluations.\n Any operator which consumes this kind SHOULD add its state evaluation information to this field. */\n operatorStates?: {\n [key: string]: PlaylistOperatorState;\n };\n};\nexport type Playlist = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n metadata: ObjectMeta;\n spec: PlaylistSpec;\n status?: PlaylistStatus;\n};\nexport type ListMeta = {\n /** continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message. */\n continue?: string;\n /** remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact. */\n remainingItemCount?: number;\n /** String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n};\nexport type PlaylistList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: Playlist[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ListMeta;\n};\nexport type StatusCause = {\n /** The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n \n Examples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\" */\n field?: string;\n /** A human-readable description of the cause of the error. This field may be presented as-is to a reader. */\n message?: string;\n /** A machine-readable description of the cause of the error. If this value is empty there is no information available. */\n reason?: string;\n};\nexport type StatusDetails = {\n /** The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. */\n causes?: StatusCause[];\n /** The group attribute of the resource associated with the status StatusReason. */\n group?: string;\n /** The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). */\n name?: string;\n /** If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action. */\n retryAfterSeconds?: number;\n /** UID of the resource. (when there is a single resource which can be described). More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type Status = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Suggested HTTP return code for this status, 0 if not set. */\n code?: number;\n /** Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. */\n details?: StatusDetails;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** A human-readable description of the status of this operation. */\n message?: string;\n /** Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n metadata?: ListMeta;\n /** A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. */\n reason?: string;\n /** Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status */\n status?: string;\n};\nexport type Patch = object;\nexport const {\n useGetApiResourcesQuery,\n useLazyGetApiResourcesQuery,\n useListPlaylistQuery,\n useLazyListPlaylistQuery,\n useCreatePlaylistMutation,\n useDeletecollectionPlaylistMutation,\n useGetPlaylistQuery,\n useLazyGetPlaylistQuery,\n useReplacePlaylistMutation,\n useDeletePlaylistMutation,\n useUpdatePlaylistMutation,\n useGetPlaylistStatusQuery,\n useLazyGetPlaylistStatusQuery,\n useReplacePlaylistStatusMutation,\n useUpdatePlaylistStatusMutation,\n} = injectedRtkApi;\n","export { BASE_URL, API_GROUP, API_VERSION } from './baseAPI';\nimport { generatedAPI as rawAPI } from './endpoints.gen';\n\nexport * from './endpoints.gen';\nexport const generatedAPI = rawAPI.enhanceEndpoints({});\n","import { useMemo } from 'react';\n\nimport { CombinedRule } from 'app/types/unified-alerting';\n\nimport { getPendingPeriod } from '../../utils/rules';\n\nexport function usePendingPeriod(rule: CombinedRule): string | undefined {\n return useMemo(() => getPendingPeriod(rule), [rule]);\n}\n","import { css, cx } from '@emotion/css';\nimport { Moment } from 'moment';\nimport RcPicker, { PickerProps } from 'rc-picker';\nimport generateConfig from 'rc-picker/lib/generate/moment';\nimport locale from 'rc-picker/lib/locale/en_US';\n\nimport { dateTime, DateTime, dateTimeAsMoment, GrafanaTheme2, isDateTimeInput } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { inputSizes } from '../Forms/commonStyles';\nimport { FormInputSize } from '../Forms/types';\nimport { Icon } from '../Icon/Icon';\nimport 'rc-picker/assets/index.css';\n\ninterface BaseProps {\n onChange: (value: DateTime) => void | ((value?: DateTime) => void);\n value?: DateTime;\n showHour?: boolean;\n showSeconds?: boolean;\n minuteStep?: PickerProps['minuteStep'];\n size?: FormInputSize;\n disabled?: boolean;\n disabledHours?: () => number[];\n disabledMinutes?: () => number[];\n disabledSeconds?: () => number[];\n placeholder?: string;\n allowEmpty?: boolean;\n id?: string;\n}\n\ninterface AllowEmptyProps extends BaseProps {\n allowEmpty: true;\n onChange: (value?: DateTime) => void;\n}\n\ninterface NoAllowEmptyProps extends BaseProps {\n allowEmpty?: false;\n onChange: (value: DateTime) => void;\n}\n\nexport type Props = AllowEmptyProps | NoAllowEmptyProps;\n\nexport const POPUP_CLASS_NAME = 'time-of-day-picker-panel';\n\nexport const TimeOfDayPicker = ({\n minuteStep = 1,\n showHour = true,\n showSeconds = false,\n value,\n size = 'auto',\n disabled,\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n id,\n placeholder,\n // note: we can't destructure allowEmpty/onChange here\n // in order to discriminate the types properly later in the onChange handler\n ...restProps\n}: Props) => {\n const styles = useStyles2(getStyles);\n const allowClear = restProps.allowEmpty ?? false;\n\n return (\n <RcPicker<Moment>\n id={id}\n generateConfig={generateConfig}\n locale={locale}\n allowClear={\n allowClear && {\n clearIcon: <Icon name=\"times\" className={styles.clearIcon} />,\n }\n }\n className={cx(inputSizes()[size], styles.input)}\n classNames={{\n popup: cx(styles.picker, POPUP_CLASS_NAME),\n }}\n defaultValue={restProps.allowEmpty ? undefined : dateTimeAsMoment()}\n disabled={disabled}\n disabledTime={() => ({\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n })}\n format={generateFormat(showHour, showSeconds)}\n minuteStep={minuteStep}\n onChange={(value) => {\n if (isDateTimeInput(value)) {\n if (restProps.allowEmpty) {\n return restProps.onChange(value ? dateTime(value) : undefined);\n } else {\n return restProps.onChange(dateTime(value));\n }\n }\n }}\n picker=\"time\"\n placeholder={placeholder}\n showNow={false}\n needConfirm={false}\n suffixIcon={<Caret wrapperStyle={styles.caretWrapper} />}\n value={value ? dateTimeAsMoment(value) : value}\n />\n );\n};\n\nfunction generateFormat(showHour = true, showSeconds = false) {\n const maybeHour = showHour ? 'HH:' : '';\n const maybeSecond = showSeconds ? ':ss' : '';\n return maybeHour + 'mm' + maybeSecond;\n}\n\ninterface CaretProps {\n wrapperStyle?: string;\n}\n\nconst Caret = ({ wrapperStyle = '' }: CaretProps) => {\n return (\n <div className={wrapperStyle}>\n <Icon name=\"angle-down\" />\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const bgColor = theme.components.input.background;\n const optionBgHover = theme.colors.action.hover;\n const borderRadius = theme.shape.radius.default;\n const borderColor = theme.components.input.borderColor;\n\n return {\n caretWrapper: css({\n position: 'relative',\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'inline-block',\n color: theme.colors.text.secondary,\n }),\n clearIcon: css({\n color: theme.colors.text.secondary,\n\n '&:hover': {\n color: theme.colors.text.maxContrast,\n },\n }),\n picker: css({\n '&.rc-picker-dropdown': {\n boxShadow: 'none',\n zIndex: theme.zIndex.portal,\n },\n '.rc-picker-time-panel-column': {\n fontSize: theme.typography.htmlFontSize,\n backgroundColor: bgColor,\n color: theme.colors.text.secondary,\n padding: 'unset',\n overflowY: 'auto',\n scrollbarWidth: 'thin',\n width: theme.spacing(8),\n li: {\n paddingRight: theme.spacing(2),\n width: 'auto',\n '&.rc-picker-time-panel-cell-selected': {\n backgroundColor: 'inherit',\n border: `1px solid ${theme.colors.action.selectedBorder}`,\n borderRadius,\n color: theme.colors.text.primary,\n },\n\n '&:hover': {\n background: optionBgHover,\n color: theme.colors.text.primary,\n },\n\n '&.rc-picker-time-panel-cell-disabled': {\n color: theme.colors.action.disabledText,\n },\n },\n\n '.rc-picker-time-panel-cell-inner': {\n color: 'inherit',\n },\n\n '&:not(:last-of-type)': {\n borderRight: `1px solid ${borderColor}`,\n },\n },\n\n '.rc-picker-panel': {\n boxShadow: theme.shadows.z3,\n backgroundColor: bgColor,\n borderColor,\n borderRadius,\n overflow: 'hidden',\n },\n }),\n input: css({\n '&.rc-picker-focused': {\n border: 'none',\n\n '.rc-picker-input': getFocusStyles(theme),\n },\n\n '&.rc-picker-disabled': {\n '.rc-picker-input': {\n backgroundColor: theme.colors.action.disabledBackground,\n color: theme.colors.action.disabledText,\n border: `1px solid ${theme.colors.action.disabledBackground}`,\n '&:focus': {\n boxShadow: 'none',\n },\n },\n },\n\n '.rc-picker-input': {\n backgroundColor: bgColor,\n borderRadius,\n borderColor,\n borderStyle: 'solid',\n borderWidth: '1px',\n color: theme.colors.text.primary,\n height: theme.spacing(4),\n padding: theme.spacing(0, 1),\n\n input: {\n color: 'unset',\n backgroundColor: 'unset',\n '&:focus': {\n outline: 'none',\n },\n\n '&::placeholder': {\n color: theme.colors.text.disabled,\n },\n },\n },\n\n '.rc-picker-clear': {\n alignItems: 'center',\n display: 'flex',\n insetInlineEnd: 'unset',\n position: 'relative',\n },\n }),\n };\n};\n","export interface BulkActionElement {\n /**\n * Called when the element should be deleted\n */\n onDelete(): void;\n\n /**\n * Called when the element should be copied\n */\n onCopy?(): void;\n}\n\nexport function isBulkActionElement(obj: object): obj is BulkActionElement {\n return 'onDelete' in obj;\n}\n","import { t } from '@grafana/i18n';\nimport { appEvents } from 'app/core/core';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport { BulkActionElement } from '../scene/types/BulkActionElement';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../scene/types/EditableDashboardElement';\n\nexport class MultiSelectedObjectsEditableElement implements EditableDashboardElement {\n public readonly isEditableDashboardElement = true;\n\n constructor(private _elements: BulkActionElement[]) {}\n\n public useEditPaneOptions(): OptionsPaneCategoryDescriptor[] {\n return [];\n }\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return { typeName: t('dashboard.edit-pane.elements.objects', 'Objects'), icon: 'folder', instanceName: '' };\n }\n\n public onConfirmDelete() {\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard.edit-pane.elements.multiple-elements', 'Multiple elements'),\n text: t(\n 'dashboard.edit-pane.elements.multiple-elements-delete-text',\n 'Are you sure you want to delete these elements?'\n ),\n onConfirm: () => this.onDelete(),\n })\n );\n }\n\n public onDelete() {\n this._elements.forEach((item) => item.onDelete());\n }\n}\n","import { SceneObject, SceneObjectRef } from '@grafana/scenes';\nimport { ElementSelectionContextItem } from '@grafana/ui';\n\nimport { isBulkActionElement } from '../scene/types/BulkActionElement';\nimport { EditableDashboardElement } from '../scene/types/EditableDashboardElement';\n\nimport { MultiSelectedObjectsEditableElement } from './MultiSelectedObjectsEditableElement';\nimport { getEditableElementFor } from './shared';\n\nexport class ElementSelection {\n private selectedObjects: Map<string, SceneObjectRef<SceneObject>>;\n private sameType?: boolean;\n private _isMultiSelection: boolean;\n private _isNewElement = false;\n\n constructor(values: Array<[string, SceneObjectRef<SceneObject>]>) {\n this.selectedObjects = new Map(values);\n this._isMultiSelection = values.length > 1;\n\n if (this.isMultiSelection) {\n this.sameType = this.checkSameType();\n }\n }\n\n public markAsNewElement() {\n this._isNewElement = true;\n }\n\n public isNewElement() {\n return this._isNewElement;\n }\n\n private checkSameType() {\n const values = this.selectedObjects.values();\n const firstType = values.next().value?.resolve().constructor.name;\n\n if (!firstType) {\n return false;\n }\n\n for (let obj of values ?? []) {\n if (obj.resolve().constructor.name !== firstType) {\n return false;\n }\n }\n\n return true;\n }\n\n public hasValue(id: string) {\n return this.selectedObjects.has(id);\n }\n\n public removeValue(id: string) {\n this.selectedObjects.delete(id);\n\n if (this.selectedObjects.size < 2) {\n this.sameType = undefined;\n this._isMultiSelection = false;\n }\n }\n\n public getStateWithValue(\n id: string,\n obj: SceneObject,\n isMulti: boolean\n ): { selection: Array<[string, SceneObjectRef<SceneObject>]>; contextItems: ElementSelectionContextItem[] } {\n const ref = obj.getRef();\n let contextItems = [{ id }];\n let selection: Array<[string, SceneObjectRef<SceneObject>]> = [[id, ref]];\n\n const entries = this.getSelectionEntries() ?? [];\n const items = entries.map(([key]) => ({ id: key }));\n\n if (isMulti) {\n selection = [[id, ref], ...entries];\n contextItems = [{ id }, ...items];\n }\n\n return { selection, contextItems };\n }\n\n public getStateWithoutValueAt(id: string): {\n entries: Array<[string, SceneObjectRef<SceneObject>]>;\n contextItems: ElementSelectionContextItem[];\n } {\n this.removeValue(id);\n const entries = this.getSelectionEntries() ?? [];\n const contextItems = entries.map(([key]) => ({ id: key }));\n\n return { entries, contextItems };\n }\n\n public getSelection(): SceneObject | SceneObject[] | undefined {\n if (this.isMultiSelection) {\n return this.getSceneObjects();\n }\n\n return this.getFirstObject();\n }\n\n public getSelectionEntries(): Array<[string, SceneObjectRef<SceneObject>]> {\n return Array.from(this.selectedObjects.entries());\n }\n\n public getFirstObject(): SceneObject | undefined {\n return this.selectedObjects.values().next().value?.resolve();\n }\n\n public get isMultiSelection(): boolean {\n return this._isMultiSelection;\n }\n\n private getSceneObjects(): SceneObject[] {\n return Array.from(this.selectedObjects.values() ?? []).map((obj) => obj.resolve());\n }\n\n public createSelectionElement(): EditableDashboardElement | undefined {\n const sceneObjects = this.getSceneObjects();\n\n if (sceneObjects.length === 0) {\n return undefined;\n }\n\n const firstElement = getEditableElementFor(sceneObjects[0]);\n\n if (!firstElement) {\n return undefined;\n }\n\n if (sceneObjects.length === 1) {\n return firstElement;\n }\n\n if (this.sameType && firstElement.createMultiSelectedElement) {\n const elements = sceneObjects.map((obj) => getEditableElementFor(obj)!);\n return firstElement.createMultiSelectedElement(elements);\n }\n\n const bulkActionElements = [];\n\n for (const sceneObject of sceneObjects) {\n const element = getEditableElementFor(sceneObject);\n\n if (element && isBulkActionElement(element)) {\n bulkActionElements.push(element);\n }\n }\n\n if (bulkActionElements.length) {\n return new MultiSelectedObjectsEditableElement(bulkActionElements);\n }\n\n return undefined;\n }\n}\n","import { SceneObjectState, SceneObjectBase, SceneObject, sceneGraph } from '@grafana/scenes';\nimport {\n ElementSelectionContextItem,\n ElementSelectionContextState,\n ElementSelectionOnSelectOptions,\n} from '@grafana/ui';\n\nimport { TabItem } from '../scene/layout-tabs/TabItem';\nimport { isRepeatCloneOrChildOf } from '../utils/clone';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { ElementSelection } from './ElementSelection';\nimport {\n ConditionalRenderingChangedEvent,\n DashboardEditActionEvent,\n DashboardEditActionEventPayload,\n DashboardStateChangedEvent,\n NewObjectAddedToCanvasEvent,\n ObjectRemovedFromCanvasEvent,\n ObjectsReorderedOnCanvasEvent,\n} from './shared';\n\nexport interface DashboardEditPaneState extends SceneObjectState {\n selection?: ElementSelection;\n selectionContext: ElementSelectionContextState;\n\n undoStack: DashboardEditActionEventPayload[];\n redoStack: DashboardEditActionEventPayload[];\n}\n\nexport class DashboardEditPane extends SceneObjectBase<DashboardEditPaneState> {\n public constructor() {\n super({\n selectionContext: {\n enabled: false,\n selected: [],\n onSelect: (item, options) => this.selectElement(item, options),\n onClear: () => this.clearSelection(),\n },\n undoStack: [],\n redoStack: [],\n });\n\n this.addActivationHandler(this.onActivate.bind(this));\n }\n\n private panelEditAction?: DashboardEditActionEvent;\n\n public setPanelEditAction(editAction: DashboardEditActionEvent) {\n this.panelEditAction = editAction;\n }\n\n private onActivate() {\n const dashboard = getDashboardSceneFor(this);\n\n this._subs.add(\n dashboard.subscribeToEvent(DashboardEditActionEvent, ({ payload }) => {\n this.handleEditAction(payload);\n })\n );\n\n this._subs.add(\n dashboard.subscribeToEvent(NewObjectAddedToCanvasEvent, ({ payload }) => {\n this.newObjectAddedToCanvas(payload);\n })\n );\n\n this._subs.add(\n dashboard.subscribeToEvent(ObjectRemovedFromCanvasEvent, ({ payload }) => {\n this.clearSelection();\n })\n );\n\n this._subs.add(\n dashboard.subscribeToEvent(ObjectsReorderedOnCanvasEvent, ({ payload }) => {\n this.forceRender();\n })\n );\n\n this._subs.add(\n dashboard.subscribeToEvent(ConditionalRenderingChangedEvent, ({ payload }) => {\n this.forceRender();\n })\n );\n\n if (this.panelEditAction) {\n this.performPanelEditAction(this.panelEditAction);\n this.panelEditAction = undefined;\n }\n }\n\n private performPanelEditAction(action: DashboardEditActionEvent) {\n // Some layout items are not yet active when leaving panel edit, let's wait for them to activate\n if (!action.payload.source.isActive) {\n trySwitchingToSourceTab(action.payload.source);\n setTimeout(() => this.performPanelEditAction(action));\n return;\n }\n\n action.payload.source.publishEvent(action, true);\n }\n\n /**\n * Handles all edit actions\n * Adds to undo history and selects new object\n * @param payload\n */\n private handleEditAction(action: DashboardEditActionEventPayload) {\n // Clear redo stack when user performs a new action\n // Otherwise things can get into very broken states\n if (this.state.redoStack.length > 0) {\n this.setState({ redoStack: [] });\n }\n\n this.performAction(action);\n\n this.setState({ undoStack: [...this.state.undoStack, action] });\n }\n\n /**\n * Removes last action from undo stack and adds it to redo stack.\n */\n public undoAction() {\n const undoStack = this.state.undoStack.slice();\n const action = undoStack.pop();\n if (!action) {\n return;\n }\n\n action.undo();\n action.source.publishEvent(new DashboardStateChangedEvent({ source: action.source }), true);\n\n /**\n * Some edit actions also require clearing selection or selecting new objects\n */\n if (action.addedObject) {\n this.clearSelection();\n }\n\n if (action.movedObject) {\n this.selectObject(action.movedObject, action.movedObject.state.key!, { force: true });\n }\n\n if (action.removedObject) {\n this.newObjectAddedToCanvas(action.removedObject);\n }\n\n this.setState({ undoStack, redoStack: [...this.state.redoStack, action] });\n }\n\n /**\n * Some edit actions also require clearing selection or selecting new objects\n */\n private performAction(action: DashboardEditActionEventPayload) {\n action.perform();\n action.source.publishEvent(new DashboardStateChangedEvent({ source: action.source }), true);\n\n if (action.addedObject) {\n this.newObjectAddedToCanvas(action.addedObject);\n }\n\n if (action.movedObject) {\n this.selectObject(action.movedObject, action.movedObject.state.key!, { force: true });\n }\n\n if (action.removedObject) {\n this.clearSelection();\n }\n }\n\n /**\n * Removes last action from redo stack and adds it to undo stack.\n */\n public redoAction() {\n const redoStack = this.state.redoStack.slice();\n const action = redoStack.pop();\n if (!action) {\n return;\n }\n\n this.performAction(action);\n\n this.setState({ redoStack, undoStack: [...this.state.undoStack, action] });\n }\n\n public enableSelection() {\n // Enable element selection\n this.setState({ selectionContext: { ...this.state.selectionContext, enabled: true } });\n }\n\n public disableSelection() {\n this.setState({\n selectionContext: { ...this.state.selectionContext, selected: [], enabled: false },\n selection: undefined,\n });\n }\n\n private selectElement(element: ElementSelectionContextItem, options: ElementSelectionOnSelectOptions) {\n let obj = sceneGraph.findByKey(this, element.id);\n if (obj) {\n // Do not select repeat clones or their children\n if (isRepeatCloneOrChildOf(obj)) {\n return;\n }\n\n this.selectObject(obj, element.id, options);\n }\n }\n\n public getSelection(): SceneObject | SceneObject[] | undefined {\n return this.state.selection?.getSelection();\n }\n\n public selectObject(obj: SceneObject, id: string, { multi, force }: ElementSelectionOnSelectOptions = {}) {\n if (!force) {\n if (multi) {\n if (this.state.selection?.hasValue(id)) {\n this.removeMultiSelectedObject(id);\n return;\n }\n } else {\n if (this.state.selection?.getFirstObject() === obj) {\n this.clearSelection();\n return;\n }\n }\n }\n\n const elementSelection = this.state.selection ?? new ElementSelection([[id, obj.getRef()]]);\n\n const { selection, contextItems: selected } = elementSelection.getStateWithValue(id, obj, !!multi);\n\n this.updateSelection(new ElementSelection(selection), selected);\n }\n\n private removeMultiSelectedObject(id: string) {\n if (!this.state.selection) {\n return;\n }\n\n const { entries, contextItems: selected } = this.state.selection.getStateWithoutValueAt(id);\n\n if (entries.length === 0) {\n this.clearSelection();\n return;\n }\n\n this.updateSelection(new ElementSelection([...entries]), selected);\n }\n\n private updateSelection(selection: ElementSelection | undefined, selected: ElementSelectionContextItem[]) {\n // onBlur events are not fired on unmount and some edit pane inputs have important onBlur events\n // This make sure they fire before unmounting\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur();\n }\n\n this.setState({ selection, selectionContext: { ...this.state.selectionContext, selected } });\n }\n\n public clearSelection() {\n if (!this.state.selection) {\n return;\n }\n\n this.updateSelection(undefined, []);\n }\n\n private newObjectAddedToCanvas(obj: SceneObject) {\n this.selectObject(obj, obj.state.key!);\n this.state.selection?.markAsNewElement();\n }\n}\n\nfunction trySwitchingToSourceTab(source: SceneObject) {\n if (source.parent === undefined) {\n return;\n }\n\n if (source.parent instanceof TabItem) {\n const tab = source.parent;\n const tabsLayout = source.parent.getParentLayout();\n if (tabsLayout.state.currentTabSlug !== tab.getSlug()) {\n tabsLayout.switchToTab(tab);\n }\n } else {\n trySwitchingToSourceTab(source.parent);\n }\n}\n","import * as React from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { config, isFetchError } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { Alert, Box, Button, Stack } from '@grafana/ui';\n\nimport { Diffs } from '../settings/version-history/utils';\n\nexport interface DashboardChangeInfo {\n changedSaveModel: Dashboard | DashboardV2Spec;\n initialSaveModel: Dashboard | DashboardV2Spec;\n diffs: Diffs;\n diffCount: number;\n hasChanges: boolean;\n hasTimeChanges: boolean;\n hasVariableValueChanges: boolean;\n hasRefreshChange: boolean;\n isNew?: boolean;\n hasFolderChanges?: boolean;\n hasMigratedToV2?: boolean;\n}\n\nexport function isVersionMismatchError(error?: Error) {\n return isFetchError(error) && error.data && error.data.status === 'version-mismatch';\n}\n\nexport function isNameExistsError(error?: Error) {\n return isFetchError(error) && error.data && error.data.status === 'name-exists';\n}\n\nexport function isPluginDashboardError(error?: Error) {\n return isFetchError(error) && error.data && error.data.status === 'plugin-dashboard';\n}\n\nexport interface NameAlreadyExistsErrorProps {\n cancelButton: React.ReactNode;\n saveButton: (overwrite: boolean) => React.ReactNode;\n}\n\nexport function NameAlreadyExistsError({ cancelButton, saveButton }: NameAlreadyExistsErrorProps) {\n const isRestoreDashboardsEnabled = config.featureToggles.restoreDashboards;\n return isRestoreDashboardsEnabled ? (\n <Alert title={t('save-dashboards.name-exists.title', 'Dashboard name already exists')} severity=\"error\">\n <p>\n <Trans i18nKey=\"save-dashboards.name-exists.message-info\">\n A dashboard with the same name in the selected folder already exists, including recently deleted dashboards.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"save-dashboards.name-exists.message-suggestion\">\n Please choose a different name or folder.\n </Trans>\n </p>\n </Alert>\n ) : (\n <Alert\n title={t('dashboard-scene.name-already-exists-error.title-name-already-exists', 'Name already exists')}\n severity=\"error\"\n >\n <p>\n <Trans i18nKey=\"dashboard-scene.name-already-exists-error.body-name-already-exists\">\n A dashboard with the same name in selected folder already exists. Would you still like to save this dashboard?\n </Trans>\n </p>\n <Box paddingTop={2}>\n <Stack alignItems=\"center\">\n {cancelButton}\n {saveButton(true)}\n </Stack>\n </Box>\n </Alert>\n );\n}\n\nexport interface SaveButtonProps {\n overwrite: boolean;\n onSave: (overwrite: boolean) => void;\n isLoading: boolean;\n isValid?: boolean;\n}\n\nexport function SaveButton({ overwrite, isLoading, isValid, onSave }: SaveButtonProps) {\n return (\n <Button\n disabled={!isValid || isLoading}\n icon={isLoading ? 'spinner' : undefined}\n onClick={() => onSave(overwrite)}\n variant={overwrite ? 'destructive' : 'primary'}\n data-testid={selectors.components.Drawer.DashboardSaveDrawer.saveButton}\n >\n {isLoading\n ? t('dashboard-scene.save-button.saving', 'Saving...')\n : overwrite\n ? t('dashboard-scene.save-button.save-and-overwrite', 'Save and overwrite')\n : t('dashboard-scene.save-button.save', 'Save')}\n </Button>\n );\n}\n","import { useAsyncFn } from 'react-use';\n\nimport { locationUtil } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport appEvents from 'app/core/app_events';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { updateDashboardName } from 'app/core/reducers/navBarTree';\nimport { useSaveDashboardMutation } from 'app/features/browse-dashboards/api/browseDashboardsAPI';\nimport { SaveDashboardAsOptions, SaveDashboardOptions } from 'app/features/dashboard/components/SaveDashboard/types';\nimport { DashboardSavedEvent } from 'app/types/events';\nimport { useDispatch } from 'app/types/store';\n\nimport { updateDashboardUidLastUsedDatasource } from '../../dashboard/utils/dashboard';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { DashboardInteractions } from '../utils/interactions';\nimport { trackDashboardSceneCreatedOrSaved } from '../utils/tracking';\n\nexport function useSaveDashboard(isCopy = false) {\n const dispatch = useDispatch();\n const notifyApp = useAppNotification();\n const [saveDashboardRtkQuery] = useSaveDashboardMutation();\n\n const [state, onSaveDashboard] = useAsyncFn(\n async (\n scene: DashboardScene,\n options: SaveDashboardOptions &\n SaveDashboardAsOptions & {\n // When provided, will take precedence over the scene's save model\n rawDashboardJSON?: Dashboard | DashboardV2Spec;\n }\n ) => {\n {\n let saveModel = options.rawDashboardJSON ?? scene.getSaveModel();\n\n if (options.saveAsCopy) {\n saveModel = scene.getSaveAsModel({\n isNew: options.isNew,\n title: options.title,\n description: options.description,\n copyTags: options.copyTags,\n });\n }\n\n const result = await saveDashboardRtkQuery({\n dashboard: saveModel,\n folderUid: options.folderUid,\n message: options.message,\n overwrite: options.overwrite,\n showErrorAlert: false,\n k8s: options.k8s,\n });\n\n if ('error' in result) {\n throw result.error;\n }\n\n // result.data is readonly so spreading to allow for slug edits\n const resultData: typeof result.data = { ...result.data };\n\n // TODO: use slug from response once implemented\n // reuse existing slug to avoid \"Unsaved changes\" modal after save\n // due to slugify logic difference between frontend and backend\n if (!result.data.slug && scene.state.meta.slug) {\n const slug = scene.state.meta.slug;\n resultData.slug = slug;\n resultData.url = `${result.data.url}/${slug}`;\n }\n\n scene.saveCompleted(saveModel, resultData, options.folderUid);\n\n // important that these happen before location redirect below\n appEvents.publish(new DashboardSavedEvent());\n notifyApp.success(t('dashboard-scene.use-save-dashboard.message-dashboard-saved', 'Dashboard saved'));\n\n updateDashboardUidLastUsedDatasource(resultData.uid);\n\n if (isCopy) {\n DashboardInteractions.dashboardCopied({ name: saveModel.title || '', url: resultData.url });\n } else {\n trackDashboardSceneCreatedOrSaved(!!options.isNew, scene, {\n name: saveModel.title || '',\n url: resultData.url || '',\n expression_types: scene.getExpressionTypes(saveModel),\n });\n }\n\n const currentLocation = locationService.getLocation();\n const newUrl = locationUtil.stripBaseFromUrl(resultData.url);\n\n if (newUrl !== currentLocation.pathname) {\n setTimeout(() => {\n locationService.push({ pathname: newUrl, search: currentLocation.search });\n });\n }\n\n if (scene.state.meta.isStarred) {\n dispatch(\n updateDashboardName({\n id: resultData.uid,\n title: scene.state.title,\n url: newUrl,\n })\n );\n }\n\n return result.data;\n }\n },\n [dispatch, notifyApp]\n );\n\n return { state, onSaveDashboard };\n}\n","import { useState } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Checkbox, TextArea, Stack, Alert, Box, Field } from '@grafana/ui';\nimport { SaveDashboardOptions } from 'app/features/dashboard/components/SaveDashboard/types';\n\nimport { DashboardScene } from '../scene/DashboardScene';\n\nimport { SaveDashboardDrawer } from './SaveDashboardDrawer';\nimport {\n DashboardChangeInfo,\n NameAlreadyExistsError,\n SaveButton,\n isNameExistsError,\n isPluginDashboardError,\n isVersionMismatchError,\n} from './shared';\nimport { useSaveDashboard } from './useSaveDashboard';\n\nexport interface Props {\n dashboard: DashboardScene;\n drawer: SaveDashboardDrawer;\n changeInfo: DashboardChangeInfo;\n}\n\nexport function SaveDashboardForm({ dashboard, drawer, changeInfo }: Props) {\n const { hasChanges, hasMigratedToV2, changedSaveModel } = changeInfo;\n\n const { state, onSaveDashboard } = useSaveDashboard(false);\n const [options, setOptions] = useState<SaveDashboardOptions>({\n folderUid: dashboard.state.meta.folderUid,\n // we need to set the uid here in order to save the dashboard\n // in schema v2 we don't have the uid in the spec\n k8s: {\n ...dashboard.serializer.getK8SMetadata(),\n },\n });\n\n const onSave = async (overwrite: boolean) => {\n const result = await onSaveDashboard(dashboard, { ...options, rawDashboardJSON: changedSaveModel, overwrite });\n if (result.status === 'success') {\n dashboard.closeModal();\n drawer.state.onSaveSuccess?.();\n }\n };\n\n const cancelButton = (\n <Button variant=\"secondary\" onClick={() => dashboard.closeModal()} fill=\"outline\">\n <Trans i18nKey=\"dashboard-scene.save-dashboard-form.cancel-button.cancel\">Cancel</Trans>\n </Button>\n );\n\n const saveButton = (overwrite: boolean) => (\n <SaveButton isValid={hasChanges} isLoading={state.loading} onSave={onSave} overwrite={overwrite} />\n );\n\n const isMessageTooLongError = (message?: string) => {\n return message && message.length > 500;\n };\n\n function renderFooter(error?: Error) {\n if (isMessageTooLongError(options.message)) {\n const messageLength = options.message?.length ?? 0;\n\n return (\n <Alert title={t('save-dashboards.message-length.title', 'Message too long')} severity=\"error\">\n <p>\n <Trans i18nKey=\"save-dashboards.message-length.info\">\n The message is {{ messageLength }} characters, which exceeds the maximum length of 500 characters. Please\n shorten it before saving.\n </Trans>\n </p>\n </Alert>\n );\n }\n\n if (isVersionMismatchError(error)) {\n return (\n <Alert\n title={t(\n 'dashboard-scene.save-dashboard-form.render-footer.title-someone-else-has-updated-this-dashboard',\n 'Someone else has updated this dashboard'\n )}\n severity=\"error\"\n >\n <p>\n <Trans i18nKey=\"dashboard-scene.save-dashboard-form.render-footer.would-still-dashboard\">\n Would you still like to save this dashboard?\n </Trans>\n </p>\n <Box paddingTop={2}>\n <Stack alignItems=\"center\">\n {cancelButton}\n {saveButton(true)}\n </Stack>\n </Box>\n </Alert>\n );\n }\n\n if (isNameExistsError(error)) {\n return <NameAlreadyExistsError cancelButton={cancelButton} saveButton={saveButton} />;\n }\n\n if (isPluginDashboardError(error)) {\n return (\n <Alert\n title={t('dashboard-scene.save-dashboard-form.render-footer.title-plugin-dashboard', 'Plugin dashboard')}\n severity=\"error\"\n >\n <p>\n <Trans i18nKey=\"dashboard-scene.save-dashboard-form.render-footer.body-plugin-dashboard\">\n Your changes will be lost when you update the plugin. Use <strong>Save as</strong> to create custom\n version.\n </Trans>\n </p>\n <Box paddingTop={2}>\n <Stack alignItems=\"center\">\n {cancelButton}\n {saveButton(true)}\n </Stack>\n </Box>\n </Alert>\n );\n }\n\n return (\n <>\n {error && (\n <Alert\n title={t(\n 'dashboard-scene.save-dashboard-form.render-footer.title-failed-to-save-dashboard',\n 'Failed to save dashboard'\n )}\n severity=\"error\"\n >\n <p>{error.message}</p>\n </Alert>\n )}\n <Stack alignItems=\"center\">\n {cancelButton}\n {saveButton(false)}\n {!hasChanges && (\n <div>\n <Trans i18nKey=\"dashboard-scene.save-dashboard-form.render-footer.no-changes-to-save\">\n No changes to save\n </Trans>\n </div>\n )}\n </Stack>\n </>\n );\n }\n\n return (\n <Stack gap={2} direction=\"column\">\n <SaveDashboardFormCommonOptions drawer={drawer} changeInfo={changeInfo} />\n {hasMigratedToV2 && (\n <Alert\n title={t(\n 'dashboard-scene.save-dashboard-form.title-dashboard-drastically-changed',\n 'Dashboard irreversibly changed'\n )}\n severity=\"warning\"\n >\n <p>\n <Trans i18nKey=\"dashboard-scene.save-dashboard-form.body-dashboard-drastically-changed\">\n The dashboard will be saved using the new experimental Grafana dashboard schema. This action can’t be\n reverted and could result in the irreversible loss of data. We recommend that you save this dashboard as a\n copy instead. If you’re seeing this message in a production environment, contact Support to have the\n feature disabled.\n </Trans>\n </p>\n </Alert>\n )}\n <Field label={t('dashboard-scene.save-dashboard-form.label-message', 'Message')}>\n <TextArea\n aria-label={t('dashboard-scene.save-dashboard-form.aria-label-message', 'message')}\n value={options.message ?? ''}\n onChange={(e) => {\n setOptions({\n ...options,\n message: e.currentTarget.value,\n });\n }}\n placeholder={t(\n 'dashboard-scene.save-dashboard-form.placeholder-describe-changes-optional',\n 'Add a note to describe your changes (optional).'\n )}\n autoFocus\n rows={5}\n />\n </Field>\n {renderFooter(state.error)}\n </Stack>\n );\n}\n\nexport interface SaveDashboardFormCommonOptionsProps {\n drawer: SaveDashboardDrawer;\n changeInfo: DashboardChangeInfo;\n}\n\nexport function SaveDashboardFormCommonOptions({ drawer, changeInfo }: SaveDashboardFormCommonOptionsProps) {\n const {\n saveVariables = false,\n saveTimeRange = false,\n saveRefresh = false,\n showVariablesWarning = false,\n } = drawer.useState();\n const { hasTimeChanges, hasVariableValueChanges, hasRefreshChange } = changeInfo;\n\n return (\n <Stack direction={'column'} alignItems={'flex-start'}>\n {hasTimeChanges && (\n <Checkbox\n id=\"save-timerange\"\n checked={saveTimeRange}\n onChange={drawer.onToggleSaveTimeRange}\n label={t(\n 'dashboard-scene.save-dashboard-form-common-options.save-timerange-label-update-default-time-range',\n 'Update default time range'\n )}\n description={t(\n 'dashboard-scene.save-dashboard-form-common-options.save-timerange-description-current-range-default',\n 'Will make current time range the new default'\n )}\n data-testid={selectors.pages.SaveDashboardModal.saveTimerange}\n />\n )}\n {hasRefreshChange && (\n <Checkbox\n id=\"save-refresh\"\n label={t(\n 'dashboard-scene.save-dashboard-form-common-options.save-refresh-label-update-default-refresh-value',\n 'Update default refresh value'\n )}\n description={t(\n 'dashboard-scene.save-dashboard-form-common-options.save-refresh-description-current-refresh-default',\n 'Will make the current refresh the new default'\n )}\n checked={saveRefresh}\n onChange={drawer.onToggleSaveRefresh}\n data-testid={selectors.pages.SaveDashboardModal.saveRefresh}\n />\n )}\n {hasVariableValueChanges && (\n <>\n <Checkbox\n id=\"save-variables\"\n label={t(\n 'dashboard-scene.save-dashboard-form-common-options.save-variables-label-update-default-variable-values',\n 'Update default variable values'\n )}\n description={t(\n 'dashboard-scene.save-dashboard-form-common-options.save-variables-description-current-values-default',\n 'Will make the current values the new default'\n )}\n checked={saveVariables}\n onChange={drawer.onToggleSaveVariables}\n data-testid={selectors.pages.SaveDashboardModal.saveVariables}\n />\n {saveVariables && showVariablesWarning && (\n <Alert\n data-testid={selectors.pages.SaveDashboardModal.variablesWarningAlert}\n title={t(\n 'dashboard-scene.save-dashboard-form-common-options.show-variables-warning-alert-title',\n 'Variable queries failed'\n )}\n severity=\"warning\"\n >\n <Trans i18nKey=\"dashboard-scene.save-dashboard-form-common-options.show-variables-warning-alert-body\">\n Some variables failed to load. If you keep “Update default variable values” checked, the current\n (failed) values will become the dashboard defaults. You can save anyway or uncheck the option to avoid\n storing those (failed) values.\n </Trans>\n </Alert>\n )}\n </>\n )}\n </Stack>\n );\n}\n","import { useCallback } from 'react';\n\nimport {\n ReplaceRepositoryFilesWithPathApiArg,\n useCreateRepositoryFilesWithPathMutation,\n useReplaceRepositoryFilesWithPathMutation,\n} from 'app/api/clients/provisioning/v0alpha1';\n\nexport function useCreateOrUpdateRepositoryFile(name?: string) {\n const [create, createRequest] = useCreateRepositoryFilesWithPathMutation();\n const [update, updateRequest] = useReplaceRepositoryFilesWithPathMutation();\n\n const updateOrCreate = useCallback(\n (data: ReplaceRepositoryFilesWithPathApiArg) => {\n const actions = name ? update : create;\n return actions(data);\n },\n [create, name, update]\n );\n\n return [updateOrCreate, name ? updateRequest : createRequest] as const;\n}\n","import { config } from '@grafana/runtime';\nimport { folderAPIv1beta1 as folderAPI } from 'app/api/clients/folder/v1beta1';\nimport { AnnoKeyManagerIdentity, AnnoKeyManagerKind, ManagerKind } from 'app/features/apiserver/types';\nimport { dispatch } from 'app/store/store';\n\n/**\n * Get k8s dashboard metadata based on the selected folder\n */\nexport async function getProvisionedMeta(folderUid?: string) {\n if (!folderUid || !config.featureToggles.provisioning) {\n return {};\n }\n const folderQuery = await dispatch(folderAPI.endpoints.getFolder.initiate({ name: folderUid })).unwrap();\n const repoName = folderQuery.metadata.annotations?.[AnnoKeyManagerIdentity];\n\n if (!repoName) {\n return {};\n }\n\n return {\n k8s: {\n annotations: {\n [AnnoKeyManagerIdentity]: repoName,\n [AnnoKeyManagerKind]: ManagerKind.Repo,\n },\n },\n };\n}\n","import { useCallback, useEffect } from 'react';\nimport { Controller, useForm, FormProvider } from 'react-hook-form';\nimport { useNavigate } from 'react-router-dom-v5-compat';\n\nimport { AppEvents, locationUtil } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { getAppEvents, locationService, reportInteraction } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport { Button, Field, Input, Stack, TextArea } from '@grafana/ui';\nimport { RepositoryView, Unstructured } from 'app/api/clients/provisioning/v0alpha1';\nimport kbn from 'app/core/utils/kbn';\nimport { Resource } from 'app/features/apiserver/types';\nimport { SaveDashboardFormCommonOptions } from 'app/features/dashboard-scene/saving/SaveDashboardForm';\nimport { getDashboardUrl } from 'app/features/dashboard-scene/utils/getDashboardUrl';\nimport { validationSrv } from 'app/features/manage-dashboards/services/ValidationSrv';\nimport { PROVISIONING_URL } from 'app/features/provisioning/constants';\nimport { useCreateOrUpdateRepositoryFile } from 'app/features/provisioning/hooks/useCreateOrUpdateRepositoryFile';\nimport {\n ProvisionedOperationInfo,\n useProvisionedRequestHandler,\n} from 'app/features/provisioning/hooks/useProvisionedRequestHandler';\nimport { SaveDashboardResponseDTO } from 'app/types/dashboard';\n\nimport { ProvisionedDashboardFormData } from '../../types/form';\nimport { buildResourceBranchRedirectUrl } from '../../utils/redirect';\nimport { ProvisioningAwareFolderPicker } from '../Shared/ProvisioningAwareFolderPicker';\nimport { RepoInvalidStateBanner } from '../Shared/RepoInvalidStateBanner';\nimport { ResourceEditFormSharedFields } from '../Shared/ResourceEditFormSharedFields';\nimport { getProvisionedMeta } from '../utils/getProvisionedMeta';\n\nimport { SaveProvisionedDashboardProps } from './SaveProvisionedDashboard';\n\nexport interface Props extends SaveProvisionedDashboardProps {\n isNew: boolean;\n defaultValues: ProvisionedDashboardFormData;\n workflowOptions: Array<{ label: string; value: string }>;\n readOnly: boolean;\n repository?: RepositoryView;\n}\n\nexport function SaveProvisionedDashboardForm({\n defaultValues,\n dashboard,\n drawer,\n changeInfo,\n isNew,\n workflowOptions,\n readOnly,\n repository,\n}: Props) {\n const navigate = useNavigate();\n const appEvents = getAppEvents();\n const { isDirty, editPanel: panelEditor } = dashboard.useState();\n\n const [createOrUpdateFile, request] = useCreateOrUpdateRepositoryFile(isNew ? undefined : defaultValues.path);\n\n const methods = useForm<ProvisionedDashboardFormData>({ defaultValues });\n const { handleSubmit, watch, control, reset, register } = methods;\n const [workflow, ref, path] = watch(['workflow', 'ref', 'path']);\n\n // Update the form if default values change\n useEffect(() => {\n reset(defaultValues);\n }, [defaultValues, reset]);\n\n const onRequestError = (error: unknown) => {\n appEvents.publish({\n type: AppEvents.alertError.name,\n payload: [t('dashboard-scene.save-provisioned-dashboard-form.api-error', 'Error saving dashboard'), error],\n });\n };\n\n const handleNewDashboard = useCallback(\n (upsert: Resource<Dashboard>) => {\n // Navigation for new dashboards\n const url = locationUtil.assureBaseUrl(\n getDashboardUrl({\n uid: upsert.metadata.name,\n slug: kbn.slugifyForUrl(upsert.spec.title ?? ''),\n currentQueryParams: window.location.search,\n })\n );\n navigate(url);\n },\n [navigate]\n );\n\n const navigateToPreview = useCallback(\n (ref: string, path: string, repoType?: string) => {\n const url = buildResourceBranchRedirectUrl({\n baseUrl: `${PROVISIONING_URL}/${defaultValues.repo}/dashboard/preview/${path}`,\n paramName: 'ref',\n paramValue: ref,\n repoType,\n });\n navigate(url);\n },\n [navigate, defaultValues.repo]\n );\n\n const handleDismiss = useCallback(() => {\n panelEditor?.onDiscard();\n\n const model = dashboard.getSaveModel();\n const resourceData = request?.data?.resource.upsert || request?.data?.resource.dryRun;\n const saveResponse = createSaveResponseFromResource(resourceData);\n dashboard.saveCompleted(model, saveResponse, defaultValues.folder?.uid);\n\n drawer.onClose();\n }, [dashboard, defaultValues.folder?.uid, drawer, panelEditor, request?.data?.resource]);\n\n const onWriteSuccess = useCallback(\n (upsert: Resource<Dashboard>) => {\n handleDismiss();\n if (isNew && upsert?.metadata.name) {\n handleNewDashboard(upsert);\n }\n\n // if pushed to an existing but non-configured branch, navigate to preview page\n if (ref !== repository?.branch && ref) {\n navigateToPreview(ref, path, repository?.type);\n return;\n }\n\n locationService.partial({\n viewPanel: null,\n editPanel: null,\n });\n },\n [isNew, path, ref, repository?.branch, repository?.type, handleDismiss, handleNewDashboard, navigateToPreview]\n );\n\n const onBranchSuccess = useCallback(\n (ref: string, path: string, info: ProvisionedOperationInfo, upsert: Resource<Dashboard>) => {\n handleDismiss();\n if (isNew && upsert?.metadata?.name) {\n handleNewDashboard(upsert);\n } else {\n navigateToPreview(ref, path, info.repoType);\n }\n },\n [isNew, navigateToPreview, handleNewDashboard, handleDismiss]\n );\n\n useProvisionedRequestHandler<Dashboard>({\n folderUID: defaultValues.folder?.uid,\n request,\n workflow,\n resourceType: 'dashboard',\n repository,\n selectedBranch: methods.getValues().ref,\n handlers: {\n onBranchSuccess: ({ ref, path }, info, resource) => onBranchSuccess(ref, path, info, resource),\n onWriteSuccess,\n onError: onRequestError,\n },\n });\n\n // Submit handler for saving the form data\n const handleFormSubmit = async ({ title, description, repo, path, comment, ref }: ProvisionedDashboardFormData) => {\n // Validate required fields\n if (!repo || !path) {\n console.error('Missing required fields for saving:', { repo, path });\n return;\n }\n\n // TODO: Revisit after we decide on whether to keep the branch selection functionality\n // If user is updating a dashboard in the original branch, override ref with whatever we loaded from\n // if (workflow === 'write' && !isNew) {\n // ref = loadedFromRef;\n // }\n\n const message = comment || `Save dashboard: ${dashboard.state.title}`;\n\n const body = dashboard.getSaveResource({\n isNew,\n title,\n description,\n copyTags: true,\n });\n\n reportInteraction('grafana_provisioning_dashboard_save_submitted', {\n workflow,\n repositoryName: repo,\n repositoryType: repository?.type ?? 'unknown',\n });\n\n createOrUpdateFile({\n // Skip adding ref to the default branch request\n ref: ref === repository?.branch ? undefined : ref,\n name: repo,\n path,\n message,\n body,\n });\n };\n\n return (\n <FormProvider {...methods}>\n <form onSubmit={handleSubmit(handleFormSubmit)} name=\"save-provisioned-form\">\n <Stack direction=\"column\" gap={2}>\n {readOnly && (\n <RepoInvalidStateBanner\n noRepository={false}\n isReadOnlyRepo={true}\n readOnlyMessage=\"If you have direct access to the target, copy the JSON and paste it there.\"\n />\n )}\n\n {isNew && (\n <>\n <Field\n noMargin\n label={t('dashboard-scene.save-provisioned-dashboard-form.label-title', 'Title')}\n invalid={!!methods.formState.errors.title}\n error={methods.formState.errors.title?.message}\n >\n <Input\n id=\"dashboard-title\"\n {...register('title', {\n required: t(\n 'dashboard-scene.save-provisioned-dashboard-form.title-required',\n 'Dashboard title is required'\n ),\n validate: validateTitle,\n })}\n />\n </Field>\n <Field\n noMargin\n label={t('dashboard-scene.save-provisioned-dashboard-form.label-description', 'Description')}\n invalid={!!methods.formState.errors.description}\n error={methods.formState.errors.description?.message}\n >\n <TextArea id=\"dashboard-description\" {...register('description')} />\n </Field>\n\n <Field\n noMargin\n label={t('dashboard-scene.save-provisioned-dashboard-form.label-target-folder', 'Target folder')}\n >\n <Controller\n control={control}\n name={'folder'}\n render={({ field: { ref, value, onChange, ...field } }) => {\n return (\n <ProvisioningAwareFolderPicker\n onChange={async (uid?: string, title?: string) => {\n onChange({ uid, title });\n updateURLParams('folderUid', uid);\n const meta = await getProvisionedMeta(uid);\n dashboard.setState({\n meta: {\n ...meta,\n folderUid: uid,\n },\n });\n }}\n value={value.uid}\n {...field}\n showAllFolders\n />\n );\n }}\n />\n </Field>\n </>\n )}\n\n {!isNew && !readOnly && <SaveDashboardFormCommonOptions drawer={drawer} changeInfo={changeInfo} />}\n\n <ResourceEditFormSharedFields\n resourceType=\"dashboard\"\n readOnly={readOnly}\n workflow={workflow}\n workflowOptions={workflowOptions}\n repository={repository}\n isNew={isNew}\n />\n\n <Stack gap={2}>\n <Button variant=\"secondary\" onClick={drawer.onClose} fill=\"outline\">\n <Trans i18nKey=\"dashboard-scene.save-provisioned-dashboard-form.cancel\">Cancel</Trans>\n </Button>\n <Button variant=\"primary\" type=\"submit\" disabled={request.isLoading || !isDirty || readOnly}>\n {request.isLoading\n ? t('dashboard-scene.save-provisioned-dashboard-form.saving', 'Saving...')\n : t('dashboard-scene.save-provisioned-dashboard-form.save', 'Save')}\n </Button>\n </Stack>\n </Stack>\n </form>\n </FormProvider>\n );\n}\n\n/**\n * Dashboard title validation to ensure it's not the same as the folder name\n * and meets other naming requirements.\n */\nasync function validateTitle(title: string, formValues: ProvisionedDashboardFormData) {\n if (title === formValues.folder.title?.trim()) {\n return t(\n 'dashboard-scene.save-provisioned-dashboard-form.title-same-as-folder',\n 'Dashboard name cannot be the same as the folder name'\n );\n }\n try {\n await validationSrv.validateNewDashboardName(formValues.folder.uid ?? 'general', title);\n return true;\n } catch (error) {\n return error instanceof Error\n ? error.message\n : t(\n 'dashboard-scene.save-provisioned-dashboard-form.title-validation-failed',\n 'Dashboard title validation failed.'\n );\n }\n}\n\n// Update the URL params without reloading the page\nfunction updateURLParams(param: string, value?: string) {\n // only check undefine and null, empty string = root folder, we still want to update the URL\n if (value === undefined || value === null) {\n return;\n }\n const url = new URL(window.location.href);\n url.searchParams.set(param, value);\n window.history.replaceState({}, '', url);\n}\n\n/**\n * Creates a SaveDashboardResponseDTO from a provisioning resource response\n * This allows us to use the standard dashboard save completion flow\n */\nfunction createSaveResponseFromResource(resource?: Unstructured): SaveDashboardResponseDTO {\n const uid = resource?.metadata?.name;\n const title = resource?.spec?.title;\n const slug = kbn.slugifyForUrl(title);\n\n return {\n uid,\n // Use the current dashboard state version to maintain consistency\n version: resource?.metadata?.generation,\n id: resource?.spec?.id || 0,\n status: 'success',\n url: locationUtil.assureBaseUrl(\n getDashboardUrl({\n uid,\n slug,\n currentQueryParams: '',\n })\n ),\n slug,\n };\n}\n","import { SaveDashboardDrawer } from 'app/features/dashboard-scene/saving/SaveDashboardDrawer';\nimport { DashboardChangeInfo } from 'app/features/dashboard-scene/saving/shared';\nimport { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\n\nimport { useProvisionedDashboardData } from '../../hooks/useProvisionedDashboardData';\n\nimport { SaveProvisionedDashboardForm } from './SaveProvisionedDashboardForm';\n\nexport interface SaveProvisionedDashboardProps {\n dashboard: DashboardScene;\n drawer: SaveDashboardDrawer;\n changeInfo: DashboardChangeInfo;\n}\n\nexport function SaveProvisionedDashboard({ drawer, changeInfo, dashboard }: SaveProvisionedDashboardProps) {\n const { isNew, defaultValues, workflowOptions, readOnly, repository } = useProvisionedDashboardData(dashboard);\n\n if (!defaultValues) {\n return null;\n }\n\n return (\n <SaveProvisionedDashboardForm\n dashboard={dashboard}\n drawer={drawer}\n changeInfo={changeInfo}\n isNew={isNew}\n defaultValues={defaultValues}\n repository={repository}\n workflowOptions={workflowOptions}\n readOnly={readOnly}\n />\n );\n}\n","import { config } from '@grafana/runtime';\n\nimport { DashboardScene } from '../../dashboard-scene/scene/DashboardScene';\n\nimport { useGetResourceRepositoryView } from './useGetResourceRepositoryView';\n\nexport function useIsProvisionedNG(dashboard: DashboardScene): boolean {\n const params = new URLSearchParams(window.location.search);\n const folderName = params.get('folderUid') || undefined;\n\n const { repository, isInstanceManaged } = useGetResourceRepositoryView({ folderName });\n\n if (!config.featureToggles.provisioning) {\n return false;\n }\n return dashboard.isManagedRepository() || Boolean(repository) || isInstanceManaged;\n}\n","import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { UseFormSetValue, useForm } from 'react-hook-form';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Input, Switch, Field, Label, TextArea, Stack, Alert, Box } from '@grafana/ui';\nimport { FolderPicker } from 'app/core/components/Select/FolderPicker';\nimport { validationSrv } from 'app/features/manage-dashboards/services/ValidationSrv';\nimport { getProvisionedMeta } from 'app/features/provisioning/components/utils/getProvisionedMeta';\n\nimport { DashboardScene } from '../scene/DashboardScene';\n\nimport { DashboardChangeInfo, NameAlreadyExistsError, SaveButton, isNameExistsError } from './shared';\nimport { useSaveDashboard } from './useSaveDashboard';\n\ninterface SaveDashboardAsFormDTO {\n firstName?: string;\n title: string;\n description: string;\n folder: { uid?: string; title?: string };\n copyTags: boolean;\n}\n\nexport interface Props {\n dashboard: DashboardScene;\n changeInfo: DashboardChangeInfo;\n}\n\nexport function SaveDashboardAsForm({ dashboard, changeInfo }: Props) {\n const { changedSaveModel } = changeInfo;\n\n const { register, handleSubmit, setValue, formState, getValues, watch, trigger } = useForm<SaveDashboardAsFormDTO>({\n mode: 'onBlur',\n defaultValues: {\n title: changeInfo.isNew ? changedSaveModel.title! : `${changedSaveModel.title} Copy`,\n description: changedSaveModel.description ?? '',\n folder: {\n uid: dashboard.state.meta.folderUid,\n title: dashboard.state.meta.folderTitle,\n },\n copyTags: false,\n },\n });\n\n const { errors, isValid } = formState;\n const formValues = watch();\n\n const { state, onSaveDashboard } = useSaveDashboard(false);\n\n const [contentSent, setContentSent] = useState<{ title?: string; folderUid?: string }>({});\n\n const validationTimeoutRef = useRef<NodeJS.Timeout>();\n\n // Validate title on form mount to catch invalid default values\n useEffect(() => {\n trigger('title');\n }, [trigger]);\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n clearTimeout(validationTimeoutRef.current);\n };\n }, []);\n\n const handleTitleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n setValue('title', e.target.value, { shouldDirty: true });\n clearTimeout(validationTimeoutRef.current);\n validationTimeoutRef.current = setTimeout(() => {\n trigger('title');\n }, 400);\n },\n [setValue, trigger]\n );\n\n const onSave = async (overwrite: boolean) => {\n clearTimeout(validationTimeoutRef.current);\n\n const isTitleValid = await trigger('title');\n\n // This prevents the race between the new input and old validation state\n if (!isTitleValid) {\n return;\n }\n\n const data = getValues();\n\n const result = await onSaveDashboard(dashboard, {\n overwrite,\n folderUid: data.folder.uid,\n rawDashboardJSON: changedSaveModel,\n\n // save as config\n saveAsCopy: true,\n isNew: changeInfo.isNew,\n copyTags: data.copyTags,\n title: data.title,\n description: data.description,\n });\n\n if (result.status === 'success') {\n dashboard.closeModal();\n } else {\n setContentSent({\n title: data.title,\n folderUid: data.folder.uid,\n });\n }\n };\n\n const cancelButton = (\n <Button variant=\"secondary\" onClick={() => dashboard.closeModal()} fill=\"outline\">\n <Trans i18nKey=\"dashboard-scene.save-dashboard-as-form.cancel-button.cancel\">Cancel</Trans>\n </Button>\n );\n\n const saveButton = (overwrite: boolean) => {\n return <SaveButton isValid={isValid} isLoading={state.loading} onSave={onSave} overwrite={overwrite} />;\n };\n function renderFooter(error?: Error) {\n const formValuesMatchContentSent =\n formValues.title.trim() === contentSent.title && formValues.folder.uid === contentSent.folderUid;\n if (isNameExistsError(error) && formValuesMatchContentSent) {\n return <NameAlreadyExistsError cancelButton={cancelButton} saveButton={saveButton} />;\n }\n return (\n <>\n {error && formValuesMatchContentSent && (\n <Alert\n title={t(\n 'dashboard-scene.save-dashboard-as-form.render-footer.title-failed-to-save-dashboard',\n 'Failed to save dashboard'\n )}\n severity=\"error\"\n >\n {error.message && <p>{error.message}</p>}\n </Alert>\n )}\n <Stack alignItems=\"center\">\n {cancelButton}\n {saveButton(false)}\n </Stack>\n </>\n );\n }\n\n return (\n <form onSubmit={handleSubmit(() => onSave(false))}>\n <Stack direction=\"column\" gap={2}>\n <Field\n noMargin\n label={<TitleFieldLabel onChange={setValue} />}\n invalid={!!errors.title}\n error={errors.title?.message}\n >\n <Input\n {...register('title', {\n required: t('dashboard-scene.save-dashboard-as-form.required', 'Required'),\n validate: validateDashboardName,\n onChange: handleTitleChange,\n })}\n aria-label={t(\n 'dashboard-scene.save-dashboard-as-form.aria-label-save-dashboard-title-field',\n 'Save dashboard title field'\n )}\n data-testid={selectors.components.Drawer.DashboardSaveDrawer.saveAsTitleInput}\n />\n </Field>\n <Field\n noMargin\n label={<DescriptionLabel onChange={setValue} />}\n invalid={!!errors.description}\n error={errors.description?.message}\n >\n <TextArea\n {...register('description', { required: false })}\n aria-label={t(\n 'dashboard-scene.save-dashboard-as-form.aria-label-save-dashboard-description-field',\n 'Save dashboard description field'\n )}\n autoFocus\n />\n </Field>\n\n <Field noMargin label={t('dashboard-scene.save-dashboard-as-form.label-folder', 'Folder')}>\n <FolderPicker\n onChange={async (uid: string | undefined, title: string | undefined) => {\n setValue('folder', { uid, title });\n const meta = await getProvisionedMeta(uid);\n dashboard.setState({\n meta: {\n ...meta,\n folderUid: uid,\n },\n });\n // Re-validate title when folder changes to check for duplicates in new folder\n trigger('title');\n }}\n value={formValues.folder?.uid}\n />\n </Field>\n {!changeInfo.isNew && (\n <Field noMargin label={t('dashboard-scene.save-dashboard-as-form.label-copy-tags', 'Copy tags')}>\n <Switch {...register('copyTags')} />\n </Field>\n )}\n <Box paddingTop={2}>{renderFooter(state.error)}</Box>\n </Stack>\n </form>\n );\n}\n\nexport interface TitleLabelProps {\n onChange: UseFormSetValue<SaveDashboardAsFormDTO>;\n}\n\nexport function TitleFieldLabel(props: TitleLabelProps) {\n return (\n <Stack justifyContent=\"space-between\">\n <Label htmlFor=\"description\">\n <Trans i18nKey=\"dashboard-scene.title-field-label.title\">Title</Trans>\n </Label>\n {/* {config.featureToggles.dashgpt && isNew && (\n <GenAIDashDescriptionButton\n onGenerate={(description) => field.onChange(description)}\n dashboard={dashboard}\n />\n )} */}\n </Stack>\n );\n}\n\nexport interface DescriptionLabelProps {\n onChange: UseFormSetValue<SaveDashboardAsFormDTO>;\n}\n\nexport function DescriptionLabel(props: DescriptionLabelProps) {\n return (\n <Stack justifyContent=\"space-between\">\n <Label htmlFor=\"description\">\n <Trans i18nKey=\"dashboard-scene.description-label.description\">Description</Trans>\n </Label>\n {/* {config.featureToggles.dashgpt && isNew && (\n <GenAIDashDescriptionButton\n onGenerate={(description) => field.onChange(description)}\n dashboard={dashboard}\n />\n )} */}\n </Stack>\n );\n}\n\nasync function validateDashboardName(title: string, formValues: SaveDashboardAsFormDTO) {\n if (title === formValues.folder.title?.trim()) {\n return 'Dashboard name cannot be the same as folder name';\n }\n\n try {\n await validationSrv.validateNewDashboardName(formValues.folder.uid ?? 'general', title);\n return true;\n } catch (e) {\n return e instanceof Error ? e.message : 'Dashboard name is invalid';\n }\n}\n","import { css } from '@emotion/css';\nimport { saveAs } from 'file-saver';\nimport { useCallback, useMemo } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { Trans } from '@grafana/i18n';\nimport { Button, ClipboardButton, Stack, CodeEditor, Box, TextLink } from '@grafana/ui';\n\nimport { DashboardScene } from '../scene/DashboardScene';\n\nimport { SaveDashboardDrawer } from './SaveDashboardDrawer';\nimport { SaveDashboardFormCommonOptions } from './SaveDashboardForm';\nimport { DashboardChangeInfo } from './shared';\n\nexport interface Props {\n dashboard: DashboardScene;\n drawer: SaveDashboardDrawer;\n changeInfo: DashboardChangeInfo;\n}\n\nexport function SaveProvisionedDashboardForm({ dashboard, drawer, changeInfo }: Props) {\n const dashboardJSON = useMemo(() => JSON.stringify(changeInfo.changedSaveModel, null, 2), [changeInfo]);\n\n const saveToFile = useCallback(() => {\n const blob = new Blob([dashboardJSON], {\n type: 'application/json;charset=utf-8',\n });\n saveAs(blob, changeInfo.changedSaveModel.title + '-' + new Date().getTime() + '.json');\n }, [changeInfo.changedSaveModel, dashboardJSON]);\n\n return (\n <div className={styles.container}>\n <Stack direction=\"column\" gap={2} grow={1}>\n <div>\n <Trans i18nKey=\"dashboard-scene.save-provisioned-dashboard-form.cannot-be-saved\">\n This dashboard cannot be saved from the Grafana UI because it has been provisioned from another source. Copy\n the JSON or save it to a file below, then you can update your dashboard in the provisioning source.\n </Trans>\n <br />\n <i>\n <Trans i18nKey=\"dashboard-scene.save-provisioned-dashboard-form.see-docs\">\n See{' '}\n <TextLink href=\"https://grafana.com/docs/grafana/latest/administration/provisioning/#dashboards\" external>\n documentation\n </TextLink>{' '}\n for more information about provisioning.\n </Trans>\n </i>\n <br /> <br />\n <Trans\n i18nKey=\"dashboard-scene.save-provisioned-dashboard-form.file-path\"\n values={{ filePath: dashboard.state.meta.provisionedExternalId }}\n >\n <strong>File path:</strong> {'{{filePath}}'}\n </Trans>\n </div>\n\n <SaveDashboardFormCommonOptions drawer={drawer} changeInfo={changeInfo} />\n\n <div className={styles.json}>\n <AutoSizer disableWidth>\n {({ height }) => (\n <CodeEditor\n width=\"100%\"\n height={height}\n language=\"json\"\n showLineNumbers={true}\n showMiniMap={dashboardJSON.length > 100}\n value={dashboardJSON}\n readOnly={true}\n />\n )}\n </AutoSizer>\n </div>\n <Box paddingTop={2}>\n <Stack gap={2}>\n <Button variant=\"secondary\" onClick={drawer.onClose} fill=\"outline\">\n <Trans i18nKey=\"dashboard-scene.save-provisioned-dashboard-form.cancel\">Cancel</Trans>\n </Button>\n <ClipboardButton icon=\"copy\" getText={() => dashboardJSON}>\n <Trans i18nKey=\"dashboard-scene.save-provisioned-dashboard-form.copy-json-to-clipboard\">\n Copy JSON to clipboard\n </Trans>\n </ClipboardButton>\n <Button type=\"submit\" onClick={saveToFile}>\n <Trans i18nKey=\"dashboard-scene.save-provisioned-dashboard-form.save-json-to-file\">\n Save JSON to file\n </Trans>\n </Button>\n </Stack>\n </Box>\n </Stack>\n </div>\n );\n}\n\nconst styles = {\n container: css({\n height: '100%',\n display: 'flex',\n }),\n json: css({\n flexGrow: 1,\n maxHeight: '800px',\n }),\n};\n","import { t } from '@grafana/i18n';\nimport { SceneComponentProps, SceneObjectBase, SceneObjectState, SceneObjectRef } from '@grafana/scenes';\nimport { Drawer, Tab, TabsBar } from '@grafana/ui';\nimport { SaveDashboardDiff } from 'app/features/dashboard/components/SaveDashboard/SaveDashboardDiff';\nimport { SaveProvisionedDashboard } from 'app/features/provisioning/components/Dashboards/SaveProvisionedDashboard';\nimport { useIsProvisionedNG } from 'app/features/provisioning/hooks/useIsProvisionedNG';\n\nimport { DashboardScene } from '../scene/DashboardScene';\n\nimport { SaveDashboardAsForm } from './SaveDashboardAsForm';\nimport { SaveDashboardForm } from './SaveDashboardForm';\nimport { SaveProvisionedDashboardForm } from './SaveProvisionedDashboardForm';\n\ninterface SaveDashboardDrawerState extends SceneObjectState {\n dashboardRef: SceneObjectRef<DashboardScene>;\n showDiff?: boolean;\n saveTimeRange?: boolean;\n saveVariables?: boolean;\n saveRefresh?: boolean;\n saveAsCopy?: boolean;\n showVariablesWarning?: boolean;\n onSaveSuccess?: () => void;\n}\n\nexport class SaveDashboardDrawer extends SceneObjectBase<SaveDashboardDrawerState> {\n public onClose = () => {\n const dashboard = this.state.dashboardRef.resolve();\n const changeInfo = dashboard.getDashboardChanges();\n dashboard.setState({\n overlay: undefined,\n // Reset meta to initial state if it's a new dashboard to remove provisioned fields\n meta: changeInfo.isNew ? dashboard.getInitialState()?.meta : dashboard.state.meta,\n });\n };\n\n public onToggleSaveTimeRange = () => {\n this.setState({ saveTimeRange: !this.state.saveTimeRange });\n };\n\n public onToggleSaveVariables = () => {\n this.setState({ saveVariables: !this.state.saveVariables });\n };\n\n public onToggleSaveRefresh = () => {\n this.setState({ saveRefresh: !this.state.saveRefresh });\n };\n\n static Component = SaveDashboardDrawerComponent;\n}\n\nfunction SaveDashboardDrawerComponent({ model }: SceneComponentProps<SaveDashboardDrawer>) {\n const { showDiff, saveAsCopy, saveTimeRange, saveVariables, saveRefresh } = model.useState();\n\n const changeInfo = model.state.dashboardRef.resolve().getDashboardChanges(saveTimeRange, saveVariables, saveRefresh);\n\n const { changedSaveModel, initialSaveModel, diffs, diffCount, hasFolderChanges, hasMigratedToV2 } = changeInfo;\n const changesCount = diffCount + (hasFolderChanges ? 1 : 0);\n const dashboard = model.state.dashboardRef.resolve();\n const { meta } = dashboard.useState();\n const { provisioned: isProvisioned, folderTitle } = meta;\n const managedResourceCannotBeEdited = dashboard.managedResourceCannotBeEdited();\n const isProvisionedNG = useIsProvisionedNG(dashboard);\n\n const tabs = (\n <TabsBar>\n <Tab\n label={t('dashboard-scene.save-dashboard-drawer.tabs.label-details', 'Details')}\n active={!showDiff}\n onChangeTab={() => model.setState({ showDiff: false })}\n />\n {changesCount > 0 && !managedResourceCannotBeEdited && (\n <Tab\n label={t('dashboard-scene.save-dashboard-drawer.tabs.label-changes', 'Changes')}\n active={showDiff}\n onChangeTab={() => model.setState({ showDiff: true })}\n counter={changesCount}\n />\n )}\n </TabsBar>\n );\n\n let title = t('dashboard-scene.save-dashboard-drawer.tabs.title', 'Save dashboard');\n if (saveAsCopy) {\n title = t('dashboard-scene.save-dashboard-drawer.tabs.title-copy', 'Save dashboard copy');\n } else if (isProvisioned || isProvisionedNG) {\n title = t('dashboard-scene.save-dashboard-drawer.tabs.title-provisioned', 'Provisioned dashboard');\n }\n\n const renderBody = () => {\n if (showDiff) {\n return (\n <SaveDashboardDiff\n diff={diffs}\n oldValue={initialSaveModel}\n newValue={changedSaveModel}\n hasFolderChanges={hasFolderChanges}\n hasMigratedToV2={hasMigratedToV2}\n oldFolder={dashboard.getInitialState()?.meta.folderTitle}\n newFolder={folderTitle}\n />\n );\n }\n\n if (isProvisionedNG) {\n return <SaveProvisionedDashboard dashboard={dashboard} changeInfo={changeInfo} drawer={model} />;\n }\n\n if (saveAsCopy || changeInfo.isNew) {\n return <SaveDashboardAsForm dashboard={dashboard} changeInfo={changeInfo} />;\n }\n\n if (isProvisioned || managedResourceCannotBeEdited) {\n return <SaveProvisionedDashboardForm dashboard={dashboard} changeInfo={changeInfo} drawer={model} />;\n }\n\n return <SaveDashboardForm dashboard={dashboard} changeInfo={changeInfo} drawer={model} />;\n };\n\n return (\n <Drawer title={title} subtitle={dashboard.state.title} onClose={model.onClose} tabs={tabs}>\n {renderBody()}\n </Drawer>\n );\n}\n","import { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { AnnoKeyDashboardSnapshotOriginalUrl, ObjectMeta } from 'app/features/apiserver/types';\nimport { DashboardWithAccessInfo } from 'app/features/dashboard/api/types';\nimport { isDashboardV2Spec } from 'app/features/dashboard/api/utils';\nimport { SaveDashboardAsOptions } from 'app/features/dashboard/components/SaveDashboard/types';\nimport { DASHBOARD_SCHEMA_VERSION } from 'app/features/dashboard/state/DashboardMigrator';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport {\n getPanelPluginCounts,\n getV1SchemaVariables,\n getV2SchemaVariables,\n} from 'app/features/dashboard/utils/tracking';\nimport { DashboardJson } from 'app/features/manage-dashboards/types';\nimport { DashboardMeta, SaveDashboardResponseDTO } from 'app/types/dashboard';\n\nimport { getRawDashboardChanges, getRawDashboardV2Changes } from '../saving/getDashboardChanges';\nimport { DashboardChangeInfo } from '../saving/shared';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { makeExportableV1, makeExportableV2 } from '../scene/export/exporters';\nimport { getVariablesCompatibility } from '../utils/getVariablesCompatibility';\nimport { getVizPanelKeyForPanelId } from '../utils/utils';\n\nimport { transformSceneToSaveModel } from './transformSceneToSaveModel';\nimport { transformSceneToSaveModelSchemaV2 } from './transformSceneToSaveModelSchemaV2';\n\n/**\n * T is the type of the save model\n * M is the type of the metadata\n * I is the type of the initial save model. By default it's the same as T.\n */\nexport interface DashboardSceneSerializerLike<T, M, I = T, E = T | { error: unknown }> {\n /**\n * The save model which the dashboard scene was originally created from\n */\n initialSaveModel?: I;\n metadata?: M;\n apiVersion?: string;\n initializeElementMapping(saveModel: T | undefined): void;\n initializeDSReferencesMapping(saveModel: T | undefined): void;\n getSaveModel: (s: DashboardScene) => T;\n getSaveAsModel: (s: DashboardScene, options: SaveDashboardAsOptions) => T;\n getDashboardChangesFromScene: (\n scene: DashboardScene,\n options: {\n saveTimeRange?: boolean;\n saveVariables?: boolean;\n saveRefresh?: boolean;\n }\n ) => DashboardChangeInfo;\n onSaveComplete(saveModel: T, result: SaveDashboardResponseDTO): void;\n getTrackingInformation: (s: DashboardScene) => DashboardTrackingInfo | undefined;\n getDynamicDashboardsTrackingInformation: (s: DashboardScene) => DynamicDashboardsTrackingInformation | undefined;\n getSnapshotUrl: () => string | undefined;\n getPanelIdForElement: (elementId: string) => number | undefined;\n getElementIdForPanel: (panelId: number) => string | undefined;\n getElementPanelMapping: () => Map<string, number>;\n getDSReferencesMapping: () => DSReferencesMapping;\n makeExportableExternally: (s: DashboardScene) => Promise<E | { error: unknown }>;\n getK8SMetadata: () => Partial<ObjectMeta> | undefined;\n}\n\nexport interface DashboardTrackingInfo {\n uid?: string;\n title?: string;\n schemaVersion: number;\n panels_count: number;\n settings_nowdelay?: number;\n settings_livenow?: boolean;\n}\n\nexport interface DynamicDashboardsTrackingInformation {\n panelCount: number;\n rowCount: number;\n tabCount: number;\n templateVariableCount: number;\n maxNestingLevel: number;\n conditionalRenderRulesCount: number;\n autoLayoutCount: number;\n customGridLayoutCount: number;\n rowsLayoutCount: number;\n tabsLayoutCount: number;\n dashStructure: string;\n panelsByDatasourceType: Record<string, number>;\n}\n\ninterface DynamicDashboardTrackingInformationStructureNode {\n kind: string;\n children?: DynamicDashboardTrackingInformationStructureNode[];\n}\n\ninterface DynamicDashboardsTrackingInformationLayoutParsing\n extends Omit<\n DynamicDashboardsTrackingInformation,\n 'dashStructure' | 'panelsByDatasourceType' | 'templateVariableCount'\n > {\n dashStructure: DynamicDashboardTrackingInformationStructureNode[];\n}\n\nexport interface DSReferencesMapping {\n panels: Map<string, Set<string>>;\n variables: Set<string>;\n annotations: Set<string>;\n}\n\nexport class V1DashboardSerializer\n implements DashboardSceneSerializerLike<Dashboard, DashboardMeta, Dashboard, DashboardJson>\n{\n initialSaveModel?: Dashboard;\n metadata?: DashboardMeta;\n protected elementPanelMap = new Map<string, number>();\n protected defaultDsReferencesMap = {\n panels: new Map<string, Set<string>>(), // refIds as keys\n variables: new Set<string>(), // variable names as keys\n annotations: new Set<string>(), // annotation names as keys\n };\n\n initializeElementMapping(saveModel: Dashboard | undefined) {\n this.elementPanelMap.clear();\n\n if (!saveModel || !saveModel.panels) {\n return;\n }\n saveModel.panels?.forEach((panel) => {\n if (panel.id) {\n const elementKey = getVizPanelKeyForPanelId(panel.id);\n this.elementPanelMap.set(elementKey, panel.id);\n }\n });\n }\n\n getElementPanelMapping() {\n return this.elementPanelMap;\n }\n\n initializeDSReferencesMapping(saveModel: Dashboard | undefined) {\n // To be implemented in a different PR\n return {};\n }\n\n getDSReferencesMapping() {\n return this.defaultDsReferencesMap;\n }\n\n getPanelIdForElement(elementId: string) {\n return this.elementPanelMap.get(elementId);\n }\n\n getElementIdForPanel(panelId: number) {\n // First try to find an existing mapping\n for (const [elementId, id] of this.elementPanelMap.entries()) {\n if (id === panelId) {\n return elementId;\n }\n }\n\n // For runtime-created panels, generate a new element identifier\n const newElementId = getVizPanelKeyForPanelId(panelId);\n // Store the new mapping for future lookups\n this.elementPanelMap.set(newElementId, panelId);\n return newElementId;\n }\n\n getSaveModel(s: DashboardScene) {\n return transformSceneToSaveModel(s);\n }\n\n getSaveAsModel(s: DashboardScene, options: SaveDashboardAsOptions) {\n const saveModel = this.getSaveModel(s);\n\n return {\n ...saveModel,\n id: null,\n uid: '',\n title: options.title || '',\n description: options.description || undefined,\n tags: options.isNew || options.copyTags ? saveModel.tags : [],\n };\n }\n\n getDashboardChangesFromScene(\n scene: DashboardScene,\n options: { saveTimeRange?: boolean; saveVariables?: boolean; saveRefresh?: boolean }\n ) {\n const changedSaveModel = this.getSaveModel(scene);\n const changeInfo = getRawDashboardChanges(\n this.initialSaveModel!,\n changedSaveModel,\n options.saveTimeRange,\n options.saveVariables,\n options.saveRefresh\n );\n\n const hasFolderChanges = scene.getInitialState()?.meta.folderUid !== scene.state.meta.folderUid;\n\n return {\n ...changeInfo,\n hasFolderChanges,\n hasChanges: changeInfo.hasChanges || hasFolderChanges,\n hasMigratedToV2: false,\n };\n }\n\n onSaveComplete(saveModel: Dashboard, result: SaveDashboardResponseDTO): void {\n this.initialSaveModel = {\n ...saveModel,\n id: result.id,\n uid: result.uid,\n version: result.version,\n };\n this.metadata = {\n ...this.metadata,\n k8s: {\n ...this.metadata?.k8s,\n generation: result.version,\n },\n };\n }\n\n getK8SMetadata() {\n return this.metadata?.k8s;\n }\n\n getTrackingInformation(): DashboardTrackingInfo | undefined {\n const panelTypes = this.initialSaveModel?.panels?.map((p) => p.type) || [];\n const panels = getPanelPluginCounts(panelTypes);\n const variables = getV1SchemaVariables(this.initialSaveModel?.templating?.list || []);\n\n if (this.initialSaveModel) {\n return {\n uid: this.initialSaveModel.uid,\n title: this.initialSaveModel.title,\n schemaVersion: this.initialSaveModel.schemaVersion,\n panels_count: this.initialSaveModel.panels?.length || 0,\n settings_nowdelay: undefined,\n settings_livenow: !!this.initialSaveModel.liveNow,\n ...panels,\n ...variables,\n };\n }\n return undefined;\n }\n\n getDynamicDashboardsTrackingInformation(): undefined {\n // We don't have dynamic dashboards in V1 schema\n return undefined;\n }\n\n getSnapshotUrl() {\n return this.initialSaveModel?.snapshot?.originalUrl;\n }\n\n async makeExportableExternally(s: DashboardScene) {\n const saveModel = this.getSaveModel(s);\n const oldModel = new DashboardModel(saveModel, undefined, {\n getVariablesFromState: () => {\n return getVariablesCompatibility(window.__grafanaSceneContext);\n },\n });\n return await makeExportableV1(oldModel);\n }\n}\n\nexport class V2DashboardSerializer\n implements\n DashboardSceneSerializerLike<\n DashboardV2Spec,\n DashboardWithAccessInfo<DashboardV2Spec>['metadata'],\n Dashboard | DashboardV2Spec\n >\n{\n initialSaveModel?: DashboardV2Spec | Dashboard;\n metadata?: DashboardWithAccessInfo<DashboardV2Spec>['metadata'];\n protected elementPanelMap = new Map<string, number>();\n // map of elementId that will contain all the queries, variables and annotations that dont have a ds defined\n protected defaultDsReferencesMap = {\n panels: new Map<string, Set<string>>(), // refIds as keys\n variables: new Set<string>(), // variable names as keys\n annotations: new Set<string>(), // annotation names as keys\n };\n\n getElementPanelMapping() {\n return this.elementPanelMap;\n }\n\n initializeElementMapping(saveModel: DashboardV2Spec | undefined) {\n this.elementPanelMap.clear();\n\n if (!saveModel || !saveModel.elements) {\n return;\n }\n\n const elementKeys = Object.keys(saveModel.elements);\n elementKeys.forEach((key) => {\n const elementPanel = saveModel.elements[key];\n if (elementPanel.kind === 'Panel') {\n this.elementPanelMap.set(key, elementPanel.spec.id);\n }\n });\n }\n\n initializeDSReferencesMapping(saveModel: DashboardV2Spec | undefined) {\n // The saveModel could be undefined or not a DashboardV2Spec\n // when dashboardsNewLayout is enabled, saveModel could be v1\n // in those cases, only when saving we will convert to v2\n if (saveModel === undefined || (saveModel && !isDashboardV2Spec(saveModel))) {\n return;\n }\n // initialize the object\n this.defaultDsReferencesMap = {\n panels: new Map<string, Set<string>>(),\n variables: new Set<string>(),\n annotations: new Set<string>(),\n };\n\n // get all the element keys\n const elementKeys = Object.keys(saveModel?.elements || {});\n elementKeys.forEach((key) => {\n const elementPanel = saveModel?.elements[key];\n if (elementPanel?.kind === 'Panel') {\n // check if the elementPanel.spec.datasource is defined\n const panelQueries = elementPanel.spec.data.spec.queries;\n\n for (const query of panelQueries) {\n if (!query.spec.query.datasource?.name) {\n const elementId = this.getElementIdForPanel(elementPanel.spec.id);\n if (!this.defaultDsReferencesMap.panels.has(elementId)) {\n this.defaultDsReferencesMap.panels.set(elementId, new Set());\n }\n\n const panelDsqueries = this.defaultDsReferencesMap.panels.get(elementId)!;\n\n panelDsqueries.add(query.spec.refId);\n }\n }\n }\n });\n\n // initialize autossigned variable ds references map\n if (saveModel?.variables) {\n for (const variable of saveModel.variables) {\n // for query variables that dont have a ds defined add them to the list\n if (variable.kind === 'QueryVariable' && !variable.spec.query.datasource?.name) {\n this.defaultDsReferencesMap.variables.add(variable.spec.name);\n }\n }\n }\n\n // initialize annotations ds references map\n if (saveModel?.annotations) {\n for (const annotation of saveModel.annotations) {\n if (!annotation.spec.query?.datasource?.name) {\n this.defaultDsReferencesMap.annotations.add(annotation.spec.name);\n }\n }\n }\n }\n\n getDSReferencesMapping() {\n return this.defaultDsReferencesMap;\n }\n\n getPanelIdForElement(elementId: string) {\n return this.elementPanelMap.get(elementId);\n }\n\n getElementIdForPanel(panelId: number) {\n // First try to find an existing mapping\n for (const [elementId, id] of this.elementPanelMap.entries()) {\n if (id === panelId) {\n return elementId;\n }\n }\n\n // For runtime-created panels, generate a new element identifier\n const newElementId = getVizPanelKeyForPanelId(panelId);\n // Store the new mapping for future lookups\n this.elementPanelMap.set(newElementId, panelId);\n return newElementId;\n }\n\n getSaveModel(s: DashboardScene) {\n return transformSceneToSaveModelSchemaV2(s);\n }\n\n getSaveAsModel(s: DashboardScene, options: SaveDashboardAsOptions) {\n const saveModel = this.getSaveModel(s);\n return {\n ...saveModel,\n title: options.title || '',\n description: options.description || '',\n tags: options.isNew || options.copyTags ? saveModel.tags : [],\n };\n }\n\n getDashboardChangesFromScene(\n scene: DashboardScene,\n options: { saveTimeRange?: boolean; saveVariables?: boolean; saveRefresh?: boolean }\n ) {\n const changedSaveModel = this.getSaveModel(scene);\n const changeInfo = getRawDashboardV2Changes(\n this.initialSaveModel!,\n changedSaveModel,\n options.saveTimeRange,\n options.saveVariables,\n options.saveRefresh\n );\n\n const hasFolderChanges = scene.getInitialState()?.meta.folderUid !== scene.state.meta.folderUid;\n const isNew = !Boolean(scene.getInitialState()?.uid);\n\n return {\n ...changeInfo,\n hasFolderChanges,\n hasChanges: changeInfo.hasChanges || hasFolderChanges,\n isNew,\n hasMigratedToV2: !!changeInfo.hasMigratedToV2,\n };\n }\n\n onSaveComplete(saveModel: DashboardV2Spec, result: SaveDashboardResponseDTO): void {\n this.initialSaveModel = {\n ...saveModel,\n };\n if (this.metadata) {\n this.metadata = {\n ...this.metadata,\n generation: result.version,\n };\n }\n }\n\n getK8SMetadata() {\n return this.metadata;\n }\n\n getTrackingInformation(s: DashboardScene): DashboardTrackingInfo | undefined {\n if (!this.initialSaveModel) {\n return undefined;\n }\n\n const panelPluginIds =\n 'elements' in this.initialSaveModel\n ? Object.values(this.initialSaveModel.elements).reduce<string[]>((acc, e) => {\n if (e.kind !== 'Panel') {\n return acc;\n }\n\n acc.push(e.spec.vizConfig.group);\n\n return acc;\n }, [])\n : [];\n const panels = getPanelPluginCounts(panelPluginIds);\n const variables =\n 'variables' in this.initialSaveModel! ? getV2SchemaVariables(this.initialSaveModel.variables) : [];\n\n return {\n schemaVersion: DASHBOARD_SCHEMA_VERSION,\n uid: s.state.uid,\n title: this.initialSaveModel.title,\n panels_count: panelPluginIds.length || 0,\n settings_nowdelay: undefined,\n settings_livenow: !!this.initialSaveModel.liveNow,\n ...panels,\n ...variables,\n };\n }\n\n getDynamicDashboardsTrackingInformation(): DynamicDashboardsTrackingInformation | undefined {\n if (!this.initialSaveModel || !isDashboardV2Spec(this.initialSaveModel)) {\n return undefined;\n }\n\n const dashStructure: DynamicDashboardTrackingInformationStructureNode[] = [];\n const result = this._parseDynamicDashboardsLayouts(\n {\n autoLayoutCount: 0,\n customGridLayoutCount: 0,\n rowsLayoutCount: 0,\n tabsLayoutCount: 0,\n panelCount: 0,\n rowCount: 0,\n tabCount: 0,\n maxNestingLevel: 0,\n conditionalRenderRulesCount: 0,\n dashStructure,\n },\n this.initialSaveModel.layout,\n 0,\n dashStructure\n );\n\n return {\n ...result,\n dashStructure: JSON.stringify(result.dashStructure),\n templateVariableCount: this.initialSaveModel.variables?.length ?? 0,\n panelsByDatasourceType: Object.values(this.initialSaveModel.elements).reduce<Record<string, number>>(\n (panelsAcc, { kind, spec: panelSpec }) => {\n if (kind !== 'Panel') {\n return panelsAcc;\n }\n\n return panelSpec.data.spec.queries.reduce((queriesAcc, { spec: querySpec }) => {\n if (!querySpec.query.datasource) {\n return queriesAcc;\n }\n\n queriesAcc[querySpec.query.group] = queriesAcc[querySpec.query.group] ?? 0;\n queriesAcc[querySpec.query.group]++;\n\n return queriesAcc;\n }, panelsAcc);\n },\n {}\n ),\n };\n }\n\n getSnapshotUrl() {\n return this.metadata?.annotations?.[AnnoKeyDashboardSnapshotOriginalUrl];\n }\n\n async makeExportableExternally(s: DashboardScene) {\n return await makeExportableV2(this.getSaveModel(s));\n }\n\n private _parseDynamicDashboardsLayouts(\n result: DynamicDashboardsTrackingInformationLayoutParsing,\n layout: DashboardV2Spec['layout'],\n nestingLevel: number,\n structureTarget: DynamicDashboardTrackingInformationStructureNode[]\n ): DynamicDashboardsTrackingInformationLayoutParsing {\n result.maxNestingLevel = Math.max(result.maxNestingLevel, nestingLevel);\n\n switch (layout.kind) {\n case 'GridLayout':\n result.customGridLayoutCount++;\n result.panelCount += layout.spec.items.length;\n structureTarget.push(...layout.spec.items.map(() => ({ kind: 'panel' })));\n return result;\n\n case 'AutoGridLayout':\n result.autoLayoutCount++;\n result.panelCount += layout.spec.items.length;\n structureTarget.push(...layout.spec.items.map(() => ({ kind: 'panel' })));\n result.conditionalRenderRulesCount = layout.spec.items.reduce(\n (acc, item) => acc + (item.spec.conditionalRendering?.spec?.items?.length || 0),\n result.conditionalRenderRulesCount\n );\n return result;\n\n case 'RowsLayout':\n result.rowsLayoutCount++;\n result.rowCount += layout.spec.rows.length;\n const rowsNextingLevel = nestingLevel + 1;\n return layout.spec.rows.reduce((acc, row) => {\n acc.conditionalRenderRulesCount += row.spec.conditionalRendering?.spec?.items?.length || 0;\n const children: DynamicDashboardTrackingInformationStructureNode[] = [];\n structureTarget.push({ kind: 'row', children });\n return !row.spec.layout\n ? acc\n : this._parseDynamicDashboardsLayouts(acc, row.spec.layout, rowsNextingLevel, children);\n }, result);\n\n case 'TabsLayout':\n result.tabsLayoutCount++;\n result.tabCount += layout.spec.tabs.length;\n const tabsNextingLevel = nestingLevel + 1;\n return layout.spec.tabs.reduce((acc, tab) => {\n acc.conditionalRenderRulesCount += tab.spec.conditionalRendering?.spec?.items?.length || 0;\n const children: DynamicDashboardTrackingInformationStructureNode[] = [];\n structureTarget.push({ kind: 'tab', children });\n return !tab.spec.layout\n ? acc\n : this._parseDynamicDashboardsLayouts(acc, tab.spec.layout, tabsNextingLevel, children);\n }, result);\n\n default:\n return result;\n }\n }\n}\n\nexport function getDashboardSceneSerializer(): DashboardSceneSerializerLike<\n Dashboard,\n DashboardMeta,\n Dashboard,\n DashboardJson\n>;\nexport function getDashboardSceneSerializer(\n version: 'v1'\n): DashboardSceneSerializerLike<Dashboard, DashboardMeta, Dashboard, DashboardJson>;\nexport function getDashboardSceneSerializer(\n version: 'v2'\n): DashboardSceneSerializerLike<\n DashboardV2Spec,\n DashboardWithAccessInfo<DashboardV2Spec>['metadata'],\n DashboardV2Spec,\n DashboardV2Spec\n>;\nexport function getDashboardSceneSerializer(\n version?: 'v1' | 'v2'\n): DashboardSceneSerializerLike<\n Dashboard | DashboardV2Spec,\n DashboardMeta | DashboardWithAccessInfo<DashboardV2Spec>['metadata'],\n Dashboard | DashboardV2Spec,\n DashboardJson | DashboardV2Spec\n> {\n if (version === 'v2') {\n return new V2DashboardSerializer();\n }\n\n return new V1DashboardSerializer();\n}\n","import { Subscription } from 'rxjs';\n\nimport { AnnotationQuery, DashboardCursorSync, dateTimeFormat, DateTimeInput, EventBusSrv } from '@grafana/data';\nimport { TimeRangeUpdatedEvent } from '@grafana/runtime';\nimport { behaviors, sceneGraph, SceneObject, VizPanel } from '@grafana/scenes';\n\nimport { DashboardDataLayerSet } from '../scene/DashboardDataLayerSet';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { dataLayersToAnnotations } from '../serialization/dataLayersToAnnotations';\n\nimport { PanelModelCompatibilityWrapper } from './PanelModelCompatibilityWrapper';\nimport { findVizPanelByKey, getVizPanelKeyForPanelId } from './utils';\n\n/**\n * Will move this to make it the main way we remain somewhat compatible with getDashboardSrv().getCurrent\n */\nexport class DashboardModelCompatibilityWrapper {\n public events = new EventBusSrv();\n private _subs = new Subscription();\n\n public constructor(private _scene: DashboardScene) {\n const timeRange = sceneGraph.getTimeRange(_scene);\n\n // Copied from DashboardModel, as this function is passed around\n this.formatDate = this.formatDate.bind(this);\n\n this._subs.add(\n timeRange.subscribeToState((state, prev) => {\n if (state.value !== prev.value) {\n this.events.publish(new TimeRangeUpdatedEvent(state.value));\n }\n })\n );\n }\n\n public get id(): number | null {\n return this._scene.state.id ?? null;\n }\n\n public get uid() {\n return this._scene.state.uid ?? null;\n }\n\n public get title() {\n return this._scene.state.title;\n }\n\n public get description() {\n return this._scene.state.description;\n }\n\n public get editable() {\n return this._scene.state.editable;\n }\n\n public get graphTooltip() {\n return this._getSyncMode();\n }\n\n public get timepicker() {\n return {\n refresh_intervals: this._scene.state.controls!.state.refreshPicker.state.intervals,\n hidden: this._scene.state.controls!.state.hideTimeControls ?? false,\n };\n }\n\n public get timezone() {\n return this.getTimezone();\n }\n\n public get weekStart() {\n return sceneGraph.getTimeRange(this._scene).state.weekStart;\n }\n\n public get tags() {\n return this._scene.state.tags;\n }\n\n public get links() {\n return this._scene.state.links;\n }\n\n public get meta() {\n return this._scene.state.meta;\n }\n\n public get time() {\n const time = sceneGraph.getTimeRange(this._scene);\n return {\n from: time.state.from,\n to: time.state.to,\n };\n }\n\n public get panels() {\n const panels = findAllObjects(this._scene, (o) => {\n return Boolean(o instanceof VizPanel);\n });\n return panels.map((p) => new PanelModelCompatibilityWrapper(p as VizPanel));\n }\n\n /**\n * Used from from timeseries migration handler to migrate time regions to dashboard annotations\n */\n public get annotations(): { list: AnnotationQuery[] } {\n const annotations: { list: AnnotationQuery[] } = { list: [] };\n\n if (this._scene.state.$data instanceof DashboardDataLayerSet) {\n annotations.list = dataLayersToAnnotations(this._scene.state.$data.state.annotationLayers);\n }\n\n return annotations;\n }\n\n public getTimezone() {\n const time = sceneGraph.getTimeRange(this._scene);\n return time.getTimeZone();\n }\n\n public sharedTooltipModeEnabled() {\n return this._getSyncMode() > 0;\n }\n\n public sharedCrosshairModeOnly() {\n return this._getSyncMode() === 1;\n }\n\n private _getSyncMode() {\n if (this._scene.state.$behaviors) {\n for (const behavior of this._scene.state.$behaviors) {\n if (behavior instanceof behaviors.CursorSync) {\n return behavior.state.sync;\n }\n }\n }\n\n return DashboardCursorSync.Off;\n }\n\n public otherPanelInFullscreen(panel: unknown) {\n return false;\n }\n\n public formatDate(date: DateTimeInput, format?: string) {\n return dateTimeFormat(date, {\n format,\n timeZone: this.getTimezone(),\n });\n }\n\n public getPanelById(id: number): PanelModelCompatibilityWrapper | null {\n const vizPanel = findVizPanelByKey(this._scene, getVizPanelKeyForPanelId(id));\n if (vizPanel) {\n return new PanelModelCompatibilityWrapper(vizPanel);\n }\n\n return null;\n }\n\n /**\n * Mainly implemented to support Getting started panel's dissmis button.\n */\n public removePanel(panel: PanelModelCompatibilityWrapper) {\n const vizPanel = findVizPanelByKey(this._scene, getVizPanelKeyForPanelId(panel.id));\n if (!vizPanel) {\n console.error('Trying to remove a panel that was not found in scene', panel);\n return;\n }\n\n this._scene.removePanel(vizPanel);\n }\n\n public canEditAnnotations(dashboardUID?: string) {\n if (!this._scene.canEditDashboard()) {\n return false;\n }\n\n if (dashboardUID) {\n return Boolean(this._scene.state.meta.annotationsPermissions?.dashboard.canEdit);\n }\n\n return Boolean(this._scene.state.meta.annotationsPermissions?.organization.canEdit);\n }\n\n public panelInitialized() {}\n\n public destroy() {\n this.events.removeAllListeners();\n this._subs.unsubscribe();\n }\n\n public hasUnsavedChanges() {\n return this._scene.state.isDirty;\n }\n}\n\nfunction findAllObjects(root: SceneObject, check: (o: SceneObject) => boolean) {\n let result: SceneObject[] = [];\n root.forEachChild((child) => {\n if (check(child)) {\n result.push(child);\n } else {\n result = result.concat(findAllObjects(child, check));\n }\n });\n\n return result;\n}\n","/* eslint-disable */\nimport { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { SceneComponentProps, SceneObjectBase, SceneObjectState, SceneObjectRef } from '@grafana/scenes';\nimport { Box, Button, CodeEditor, Drawer, useStyles2 } from '@grafana/ui';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { transformSceneToSaveModelSchemaV2 } from '../serialization/transformSceneToSaveModelSchemaV2';\n\ninterface SchemaV2EditorDrawerState extends SceneObjectState {\n dashboardRef: SceneObjectRef<DashboardScene>;\n jsonText: string;\n}\n\nexport class SchemaV2EditorDrawer extends SceneObjectBase<SchemaV2EditorDrawerState> {\n constructor(state: Omit<SchemaV2EditorDrawerState, 'jsonText'>) {\n super({\n ...state,\n jsonText: '',\n });\n\n this.addActivationHandler(() => this.setState({ jsonText: this.getJsonText() }));\n }\n\n private getJsonText(): string {\n const dashboard = this.state.dashboardRef.resolve();\n return JSON.stringify(transformSceneToSaveModelSchemaV2(dashboard), null, 2);\n }\n\n public onClose = () => {\n this.state.dashboardRef.resolve().setState({ overlay: undefined });\n };\n\n private onSave = () => {\n // TODO: uncomment when transformation is available\n // const manager = getDashboardScenePageStateManager();\n // const dashboard = transformSceneToSaveModelSchemaV2({\n // dashboard: JSON.parse(this.state.jsonText),\n // meta: this.state.dashboardRef.resolve().state.meta,\n // });\n // manager.setState({\n // dashboard,\n // });\n };\n\n static Component = ({ model }: SceneComponentProps<SchemaV2EditorDrawer>) => {\n const { jsonText } = model.useState();\n const styles = useStyles2(getStyles);\n\n const renderBody = () => {\n return (\n <div className={styles.wrapper}>\n <CodeEditor\n width=\"100%\"\n value={jsonText}\n language=\"json\"\n showLineNumbers={true}\n showMiniMap={true}\n containerStyles={styles.codeEditor}\n onBlur={(value) => model.setState({ jsonText: value })}\n />\n <Box paddingTop={2}>\n {\n <Button onClick={model.onSave} disabled>\n Update dashboard\n </Button>\n }\n </Box>\n </div>\n );\n };\n\n return (\n <Drawer\n title={'[DEV] Schema V2 editor'}\n subtitle={'Allows editing dashboard using v2 schema. Changes are not persisted in db.'}\n onClose={model.onClose}\n >\n {renderBody()}\n </Drawer>\n );\n };\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n height: '100%',\n flexDirection: 'column',\n gap: theme.spacing(2),\n }),\n codeEditor: css({\n flexGrow: 1,\n }),\n});\n/* eslint-enable */\n","import { t } from '@grafana/i18n';\nimport { SceneComponentProps, SceneObjectBase, SceneObjectRef, SceneObjectState, VizPanel } from '@grafana/scenes';\nimport { LibraryPanel } from '@grafana/schema';\nimport { Drawer } from '@grafana/ui';\nimport {\n LibraryPanelsSearch,\n LibraryPanelsSearchVariant,\n} from 'app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch';\n\nimport { getDashboardSceneFor, getDefaultVizPanel } from '../utils/utils';\n\nimport { LibraryPanelBehavior } from './LibraryPanelBehavior';\nimport { isDashboardLayoutItem } from './types/DashboardLayoutItem';\n\nexport interface AddLibraryPanelDrawerState extends SceneObjectState {\n panelToReplaceRef?: SceneObjectRef<VizPanel>;\n}\n\nexport class AddLibraryPanelDrawer extends SceneObjectBase<AddLibraryPanelDrawerState> {\n public onClose = () => {\n getDashboardSceneFor(this).closeModal();\n };\n\n public onAddLibraryPanel = (panelInfo: LibraryPanel) => {\n const dashboard = getDashboardSceneFor(this);\n const newPanel = getDefaultVizPanel();\n\n newPanel.setState({\n // Panel title takes precedence over library panel title when resolving the library panel\n title: panelInfo.model.title,\n hoverHeader: !panelInfo.model.title,\n $behaviors: [new LibraryPanelBehavior({ uid: panelInfo.uid, name: panelInfo.name })],\n });\n\n const panelToReplace = this.state.panelToReplaceRef?.resolve();\n\n if (panelToReplace) {\n const layoutItem = panelToReplace.parent;\n\n if (layoutItem && isDashboardLayoutItem(layoutItem)) {\n // keep the same key from the panelToReplace\n // this is important for edit mode\n newPanel.setState({ key: panelToReplace.state.key });\n layoutItem.setElementBody(newPanel);\n }\n } else {\n dashboard.addPanel(newPanel);\n }\n\n this.onClose();\n };\n\n static Component = ({ model }: SceneComponentProps<AddLibraryPanelDrawer>) => {\n const title = t('library-panel.add-widget.title', 'Add panel from panel library');\n\n return (\n <Drawer title={title} onClose={model.onClose}>\n <LibraryPanelsSearch\n onClick={model.onAddLibraryPanel}\n variant={LibraryPanelsSearchVariant.Tight}\n showPanelFilter\n />\n </Drawer>\n );\n };\n}\n","import { SceneObject, VizPanel } from '@grafana/scenes';\n\nexport interface DashboardDropTarget extends SceneObject {\n isDashboardDropTarget: Readonly<true>;\n setIsDropTarget?(isDropTarget: boolean): void;\n draggedPanelOutside?(panel: VizPanel): void;\n draggedPanelInside?(panel: VizPanel): void;\n}\n\nexport function isDashboardDropTarget(scene: SceneObject): scene is DashboardDropTarget {\n return 'isDashboardDropTarget' in scene && scene.isDashboardDropTarget === true;\n}\n","import { PointerEvent as ReactPointerEvent } from 'react';\n\nimport { sceneGraph, SceneObjectBase, SceneObjectRef, SceneObjectState, VizPanel } from '@grafana/scenes';\nimport { createPointerDistance } from '@grafana/ui';\n\nimport { DashboardScene } from './DashboardScene';\nimport { DashboardDropTarget, isDashboardDropTarget } from './types/DashboardDropTarget';\n\ninterface DashboardLayoutOrchestratorState extends SceneObjectState {\n draggingPanel?: SceneObjectRef<VizPanel>;\n}\n\nexport class DashboardLayoutOrchestrator extends SceneObjectBase<DashboardLayoutOrchestratorState> {\n private _sourceDropTarget: DashboardDropTarget | null = null;\n private _lastDropTarget: DashboardDropTarget | null = null;\n private _pointerDistance = createPointerDistance();\n private _isSelectedObject = false;\n\n public constructor() {\n super({});\n\n this._onPointerMove = this._onPointerMove.bind(this);\n this._stopDraggingSync = this._stopDraggingSync.bind(this);\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n return () => {\n document.body.removeEventListener('pointermove', this._onPointerMove);\n document.body.removeEventListener('pointerup', this._stopDraggingSync);\n };\n }\n\n public startDraggingSync(evt: ReactPointerEvent, panel: VizPanel): void {\n this._pointerDistance.set(evt);\n this._isSelectedObject = false;\n\n const dropTarget = sceneGraph.findObject(panel, isDashboardDropTarget);\n\n if (!dropTarget || !isDashboardDropTarget(dropTarget)) {\n return;\n }\n\n this._sourceDropTarget = dropTarget;\n this._lastDropTarget = dropTarget;\n\n document.body.addEventListener('pointermove', this._onPointerMove);\n document.body.addEventListener('pointerup', this._stopDraggingSync);\n\n this.setState({ draggingPanel: panel.getRef() });\n }\n\n private _stopDraggingSync(_evt: PointerEvent) {\n const panel = this.state.draggingPanel?.resolve();\n\n if (this._sourceDropTarget !== this._lastDropTarget) {\n // Wrapped in setTimeout to ensure that any event handlers are called\n // Useful for allowing react-grid-layout to remove placeholders, etc.\n setTimeout(() => {\n this._sourceDropTarget?.draggedPanelOutside?.(panel!);\n this._lastDropTarget?.draggedPanelInside?.(panel!);\n });\n }\n\n document.body.removeEventListener('pointermove', this._onPointerMove);\n document.body.removeEventListener('pointerup', this._stopDraggingSync);\n\n this.setState({ draggingPanel: undefined });\n }\n\n private _onPointerMove(evt: PointerEvent) {\n if (!this._isSelectedObject && this.state.draggingPanel && this._pointerDistance.check(evt)) {\n this._isSelectedObject = true;\n const panel = this.state.draggingPanel?.resolve();\n this._getDashboard().state.editPane.selectObject(panel, panel.state.key!, { force: true, multi: false });\n }\n\n const dropTarget = this._getDropTargetUnderMouse(evt) ?? this._sourceDropTarget;\n\n if (!dropTarget) {\n return;\n }\n\n if (dropTarget !== this._lastDropTarget) {\n this._lastDropTarget?.setIsDropTarget?.(false);\n this._lastDropTarget = dropTarget;\n\n if (dropTarget !== this._sourceDropTarget) {\n dropTarget.setIsDropTarget?.(true);\n }\n }\n }\n\n private _getDashboard(): DashboardScene {\n if (!(this.parent instanceof DashboardScene)) {\n throw new Error('Parent is not a DashboardScene');\n }\n\n return this.parent;\n }\n\n private _getDropTargetUnderMouse(evt: MouseEvent): DashboardDropTarget | null {\n const elementsUnderPoint = document.elementsFromPoint(evt.clientX, evt.clientY);\n const cursorIsInSourceTarget = elementsUnderPoint.some(\n (el) => el.getAttribute('data-dashboard-drop-target-key') === this._sourceDropTarget?.state.key\n );\n\n if (cursorIsInSourceTarget) {\n return null;\n }\n\n const key = elementsUnderPoint\n ?.find((element) => element.getAttribute('data-dashboard-drop-target-key'))\n ?.getAttribute('data-dashboard-drop-target-key');\n\n if (!key) {\n return null;\n }\n\n const sceneObject = sceneGraph.findByKey(this._getDashboard(), key);\n\n if (!sceneObject || !isDashboardDropTarget(sceneObject)) {\n return null;\n }\n\n return sceneObject;\n }\n}\n","import React, { useState, useMemo } from 'react';\n\nimport { EditableDashboardElement } from '../scene/types/EditableDashboardElement';\n\nexport interface OutlineRenameState {\n isRenaming?: boolean;\n originalName?: string;\n error?: string;\n}\n\nexport function useOutlineRename(editableElement: EditableDashboardElement) {\n const [state, setState] = useState<OutlineRenameState>({});\n\n const onNameDoubleClicked = (evt: React.MouseEvent) => {\n if (!editableElement.onChangeName) {\n return;\n }\n\n setState({ isRenaming: true, originalName: editableElement.getEditableElementInfo().instanceName });\n };\n\n const onInputBlur = () => {\n if (state.error) {\n editableElement.onChangeName!(state.originalName!);\n }\n\n setState({});\n };\n\n const renameInputRef = useMemo(() => {\n return (ref: HTMLInputElement | null) => {\n ref?.focus();\n ref?.select();\n };\n }, []);\n\n const onChangeName = (evt: React.ChangeEvent<HTMLInputElement>) => {\n const result = editableElement.onChangeName!(evt.target.value);\n if (result?.errorMessage) {\n setState({ ...state, error: result.errorMessage });\n } else if (state.error) {\n setState({ ...state, error: undefined });\n }\n };\n\n const onInputKeyDown = (evt: React.KeyboardEvent) => {\n if (evt.key === 'Enter') {\n onInputBlur();\n }\n };\n\n return {\n isRenaming: state.isRenaming,\n onNameDoubleClicked,\n renameInputRef,\n onChangeName,\n onInputBlur,\n onInputKeyDown,\n };\n}\n","import { css, cx } from '@emotion/css';\nimport React, { useMemo, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneObject } from '@grafana/scenes';\nimport { Box, Icon, Stack, Text, useElementSelection, useStyles2 } from '@grafana/ui';\n\nimport { isRepeatCloneOrChildOf } from '../utils/clone';\nimport { DashboardInteractions } from '../utils/interactions';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { DashboardEditPane } from './DashboardEditPane';\nimport { getEditableElementFor } from './shared';\nimport { useOutlineRename } from './useOutlineRename';\n\nexport interface Props {\n editPane: DashboardEditPane;\n}\n\nexport function DashboardOutline({ editPane }: Props) {\n const dashboard = getDashboardSceneFor(editPane);\n\n return (\n <Box padding={1} gap={0} display=\"flex\" direction=\"column\" element=\"ul\" role=\"tree\" position=\"relative\">\n <DashboardOutlineNode sceneObject={dashboard} editPane={editPane} depth={0} index={0} />\n </Box>\n );\n}\n\ninterface DashboardOutlineNodeProps {\n sceneObject: SceneObject;\n editPane: DashboardEditPane;\n depth: number;\n index: number;\n}\n\nfunction DashboardOutlineNode({ sceneObject, editPane, depth, index }: DashboardOutlineNodeProps) {\n const styles = useStyles2(getStyles);\n const { key } = sceneObject.useState();\n const [isCollapsed, setIsCollapsed] = useState(depth > 0);\n const { isSelected, onSelect } = useElementSelection(key);\n const isCloned = useMemo(() => isRepeatCloneOrChildOf(sceneObject), [sceneObject]);\n const editableElement = useMemo(() => getEditableElementFor(sceneObject)!, [sceneObject]);\n\n const noTitleText = t('dashboard.outline.tree-item.no-title', '<no title>');\n\n const children = editableElement.getOutlineChildren?.() ?? [];\n const elementInfo = editableElement.getEditableElementInfo();\n const instanceName = elementInfo.instanceName === '' ? noTitleText : elementInfo.instanceName;\n const outlineRename = useOutlineRename(editableElement);\n const isContainer = editableElement.getOutlineChildren ? true : false;\n\n const onNodeClicked = (e: React.MouseEvent) => {\n e.stopPropagation();\n\n // Only select via clicking outline never deselect\n if (!isSelected) {\n onSelect?.(e);\n }\n\n editableElement.scrollIntoView?.();\n DashboardInteractions.outlineItemClicked({ index, depth });\n };\n\n const onToggleCollapse = (evt: React.MouseEvent) => {\n evt.stopPropagation();\n setIsCollapsed(!isCollapsed);\n };\n\n return (\n // todo: add proper keyboard navigation\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <li\n role=\"treeitem\"\n aria-selected={isSelected}\n className={styles.container}\n onClick={onNodeClicked}\n style={{ '--depth': depth } as React.CSSProperties}\n >\n <div className={cx(styles.row, { [styles.rowSelected]: isSelected })}>\n <div className={styles.indentation}></div>\n {isContainer && (\n <button\n className={styles.angleButton}\n onClick={onToggleCollapse}\n data-testid={selectors.components.PanelEditor.Outline.node(instanceName)}\n >\n <Icon name={isCollapsed ? 'angle-right' : 'angle-down'} />\n </button>\n )}\n <button\n className={cx(styles.nodeName, { [styles.nodeNameClone]: isCloned })}\n onDoubleClick={outlineRename.onNameDoubleClicked}\n data-testid={selectors.components.PanelEditor.Outline.item(instanceName)}\n >\n <Icon size=\"sm\" name={elementInfo.icon} />\n {outlineRename.isRenaming ? (\n <input\n ref={outlineRename.renameInputRef}\n type=\"text\"\n value={elementInfo.instanceName}\n className={styles.outlineInput}\n onChange={outlineRename.onChangeName}\n onBlur={outlineRename.onInputBlur}\n onKeyDown={outlineRename.onInputKeyDown}\n />\n ) : (\n <>\n <Stack direction=\"row\" gap={0.5} alignItems=\"center\" grow={1}>\n <span>{instanceName}</span>\n {elementInfo.isHidden && <Icon name=\"eye-slash\" size=\"sm\" className={styles.hiddenIcon} />}\n </Stack>\n {isCloned && (\n <span>\n <Trans i18nKey=\"dashboard.outline.repeated-item\">Repeat</Trans>\n </span>\n )}\n </>\n )}\n </button>\n </div>\n\n {isContainer && !isCollapsed && (\n <ul className={styles.nodeChildren} role=\"group\">\n {children.length > 0 ? (\n children.map((child, i) => (\n <DashboardOutlineNode\n key={child.state.key}\n sceneObject={child}\n editPane={editPane}\n depth={depth + 1}\n index={i}\n />\n ))\n ) : (\n <Text color=\"secondary\" element=\"li\">\n <Trans i18nKey=\"dashboard.outline.tree-item.empty\">(empty)</Trans>\n </Text>\n )}\n </ul>\n )}\n </li>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n display: 'flex',\n gap: theme.spacing(0.5),\n flexGrow: 1,\n flexDirection: 'column',\n borderRadius: theme.shape.radius.default,\n color: theme.colors.text.secondary,\n }),\n containerSelected: css({\n outline: `1px dashed ${theme.colors.primary.border} !important`,\n outlineOffset: '0px',\n color: theme.colors.text.primary,\n }),\n row: css({\n display: 'flex',\n gap: theme.spacing(0.5),\n borderRadius: theme.shape.radius.default,\n\n '&:hover': {\n color: theme.colors.text.primary,\n outline: `1px dashed ${theme.colors.border.strong}`,\n backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.05),\n },\n }),\n rowSelected: css({\n color: theme.colors.text.primary,\n outline: `1px dashed ${theme.colors.primary.border} !important`,\n backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.05),\n }),\n indentation: css({\n marginLeft: `calc(var(--depth) * ${theme.spacing(3)})`,\n }),\n angleButton: css({\n boxShadow: 'none',\n border: 'none',\n background: 'transparent',\n borderRadius: theme.shape.radius.default,\n padding: 0,\n color: 'inherit',\n lineHeight: 0,\n }),\n nodeName: css({\n boxShadow: 'none',\n border: 'none',\n background: 'transparent',\n padding: 0,\n borderRadius: theme.shape.radius.default,\n color: 'inherit',\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n gap: theme.spacing(0.5),\n overflow: 'hidden',\n '> span': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }),\n hiddenIcon: css({\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(1),\n }),\n nodeNameClone: css({\n color: theme.colors.text.secondary,\n cursor: 'not-allowed',\n }),\n outlineInput: css({\n border: `1px solid ${theme.components.input.borderColor}`,\n height: theme.spacing(3),\n borderRadius: theme.shape.radius.default,\n\n '&:focus': {\n outline: 'none',\n boxShadow: 'none',\n },\n }),\n nodeChildren: css({\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n gap: theme.spacing(0.5),\n\n // tree line\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n width: '1px',\n height: '100%',\n pointerEvents: 'none',\n zIndex: 1,\n background: theme.colors.border.weak,\n marginLeft: `calc(11px + ${theme.spacing(3)} * var(--depth))`,\n },\n }),\n };\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Button, Menu, Stack, Text, useStyles2, Dropdown, Icon, IconButton } from '@grafana/ui';\nimport { trackDeleteDashboardElement } from 'app/features/dashboard-scene/utils/tracking';\n\nimport { EditableDashboardElement } from '../scene/types/EditableDashboardElement';\n\nimport { DashboardEditPane } from './DashboardEditPane';\n\ninterface EditPaneHeaderProps {\n element: EditableDashboardElement;\n editPane: DashboardEditPane;\n}\n\nexport function EditPaneHeader({ element, editPane }: EditPaneHeaderProps) {\n const elementInfo = element.getEditableElementInfo();\n const styles = useStyles2(getStyles);\n\n const onCopy = element.onCopy?.bind(element);\n const onDuplicate = element.onDuplicate?.bind(element);\n const onDelete = element.onDelete?.bind(element);\n const onConfirmDelete = element.onConfirmDelete?.bind(element);\n // temporary simple solution, should select parent element\n const onGoBack = () => editPane.clearSelection();\n const canGoBack = editPane.state.selection;\n\n const onDeleteElement = () => {\n if (onConfirmDelete) {\n onConfirmDelete();\n } else if (onDelete) {\n onDelete();\n }\n trackDeleteDashboardElement(elementInfo);\n };\n\n return (\n <div className={styles.wrapper}>\n <Stack direction=\"row\" gap={0.5}>\n {canGoBack && (\n <IconButton\n name=\"arrow-left\"\n size=\"lg\"\n onClick={onGoBack}\n tooltip={t('grafana.dashboard.edit-pane.go-back', 'Go back')}\n aria-label={t('grafana.dashboard.edit-pane.go-back', 'Go back')}\n data-testid={selectors.components.EditPaneHeader.backButton}\n />\n )}\n <Text>{elementInfo.typeName}</Text>\n </Stack>\n <Stack direction=\"row\" gap={1}>\n {element.renderActions && element.renderActions()}\n {(onCopy || onDuplicate) && (\n <Dropdown\n overlay={\n <Menu>\n {onCopy ? (\n <Menu.Item icon=\"copy\" label={t('dashboard.layout.common.copy', 'Copy')} onClick={onCopy} />\n ) : null}\n {onDuplicate ? (\n <Menu.Item\n icon=\"file-copy-alt\"\n label={t('dashboard.layout.common.duplicate', 'Duplicate')}\n onClick={onDuplicate}\n />\n ) : null}\n </Menu>\n }\n >\n <Button\n tooltip={t('dashboard.layout.common.copy-or-duplicate', 'Copy or Duplicate')}\n tooltipPlacement=\"bottom\"\n variant=\"secondary\"\n size=\"sm\"\n icon=\"copy\"\n data-testid={selectors.components.EditPaneHeader.copyDropdown}\n >\n <Icon name=\"angle-down\" />\n </Button>\n </Dropdown>\n )}\n\n {(onDelete || onConfirmDelete) && (\n <Button\n onClick={onDeleteElement}\n size=\"sm\"\n variant=\"destructive\"\n fill=\"outline\"\n icon=\"trash-alt\"\n tooltip={t('dashboard.layout.common.delete', 'Delete')}\n data-testid={selectors.components.EditPaneHeader.deleteButton}\n />\n )}\n </Stack>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n wrapper: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(1, 2),\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n }),\n };\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { ScrollContainer, useStyles2 } from '@grafana/ui';\n\nimport { EditableDashboardElement } from '../scene/types/EditableDashboardElement';\n\nimport { DashboardEditPane } from './DashboardEditPane';\nimport { EditPaneHeader } from './EditPaneHeader';\n\nexport interface Props {\n element: EditableDashboardElement;\n editPane: DashboardEditPane;\n isNewElement: boolean;\n}\n\nexport function ElementEditPane({ element, editPane, isNewElement }: Props) {\n const categories = element.useEditPaneOptions ? element.useEditPaneOptions(isNewElement) : [];\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <EditPaneHeader element={element} editPane={editPane} />\n <ScrollContainer showScrollIndicators={true}>\n <div className={styles.categories}>{categories.map((cat) => cat.render())}</div>\n </ScrollContainer>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 0',\n height: '100%',\n }),\n categories: css({\n display: 'flex',\n flexDirection: 'column',\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n }),\n };\n}\n","import { useMemo } from 'react';\n\nimport { EditableDashboardElement } from '../scene/types/EditableDashboardElement';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { DashboardEditPane } from './DashboardEditPane';\nimport { ElementSelection } from './ElementSelection';\n\nexport function useEditableElement(\n selection: ElementSelection | undefined,\n editPane: DashboardEditPane\n): EditableDashboardElement | undefined {\n return useMemo(() => {\n if (!selection) {\n const dashboard = getDashboardSceneFor(editPane);\n return new ElementSelection([[dashboard.state.uid!, dashboard.getRef()]]).createSelectionElement();\n }\n\n return selection.createSelectionElement();\n }, [selection, editPane]);\n}\n","import { css, cx } from '@emotion/css';\nimport { Resizable } from 're-resizable';\nimport { useLocalStorage } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { useSceneObjectState } from '@grafana/scenes';\nimport { useStyles2, useSplitter, ToolbarButton, ScrollContainer, Text, Icon, clearButtonStyles } from '@grafana/ui';\n\nimport { DashboardInteractions } from '../utils/interactions';\n\nimport { DashboardEditPane } from './DashboardEditPane';\nimport { DashboardOutline } from './DashboardOutline';\nimport { ElementEditPane } from './ElementEditPane';\nimport { useEditableElement } from './useEditableElement';\n\nexport interface Props {\n editPane: DashboardEditPane;\n isEditPaneCollapsed: boolean;\n openOverlay?: boolean;\n onToggleCollapse: () => void;\n}\n\n/**\n * Making the EditPane rendering completely standalone (not using editPane.Component) in order to pass custom react props\n */\nexport function DashboardEditPaneRenderer({ editPane, isEditPaneCollapsed, onToggleCollapse, openOverlay }: Props) {\n const { selection } = useSceneObjectState(editPane, { shouldActivateOrKeepAlive: true });\n const styles = useStyles2(getStyles);\n const clearButton = useStyles2(clearButtonStyles);\n const editableElement = useEditableElement(selection, editPane);\n const selectedObject = selection?.getFirstObject();\n\n const isNewElement = selection?.isNewElement() ?? false;\n const [outlineCollapsed, setOutlineCollapsed] = useLocalStorage(\n 'grafana.dashboard.edit-pane.outline.collapsed',\n true\n );\n const [outlinePaneSize = 0.4, setOutlinePaneSize] = useLocalStorage('grafana.dashboard.edit-pane.outline.size', 0.4);\n\n // splitter for template and payload editor\n const splitter = useSplitter({\n direction: 'column',\n handleSize: 'sm',\n // if Grafana Alertmanager, split 50/50, otherwise 100/0 because there is no payload editor\n initialSize: 1 - outlinePaneSize,\n dragPosition: 'middle',\n onSizeChanged: (size) => {\n setOutlinePaneSize(1 - size);\n },\n });\n\n if (!editableElement) {\n return null;\n }\n\n if (isEditPaneCollapsed) {\n return (\n <>\n <div className={styles.expandOptionsWrapper}>\n <ToolbarButton\n tooltip={t('dashboard.edit-pane.open', 'Open options pane')}\n icon=\"arrow-to-right\"\n onClick={onToggleCollapse}\n variant=\"canvas\"\n narrow={true}\n className={styles.rotate180}\n aria-label={t('dashboard.edit-pane.open', 'Open options pane')}\n />\n </div>\n\n {openOverlay && (\n <Resizable className={styles.overlayWrapper} defaultSize={{ height: '100%', width: '300px' }}>\n <ElementEditPane\n element={editableElement}\n key={selectedObject?.state.key}\n editPane={editPane}\n isNewElement={isNewElement}\n />\n </Resizable>\n )}\n </>\n );\n }\n\n if (outlineCollapsed) {\n splitter.primaryProps.style.flexGrow = 1;\n splitter.primaryProps.style.minHeight = 'unset';\n splitter.secondaryProps.style.flexGrow = 0;\n splitter.secondaryProps.style.minHeight = 'min-content';\n } else {\n splitter.primaryProps.style.minHeight = 'unset';\n splitter.secondaryProps.style.minHeight = 'unset';\n }\n\n return (\n <div className={styles.wrapper}>\n <div {...splitter.containerProps}>\n <div {...splitter.primaryProps} className={cx(splitter.primaryProps.className, styles.paneContent)}>\n <ElementEditPane\n element={editableElement}\n key={selectedObject?.state.key}\n editPane={editPane}\n isNewElement={isNewElement}\n />\n </div>\n <div\n {...splitter.splitterProps}\n className={cx(splitter.splitterProps.className, styles.splitter)}\n data-edit-pane-splitter={true}\n />\n <div {...splitter.secondaryProps} className={cx(splitter.secondaryProps.className, styles.paneContent)}>\n <button\n type=\"button\"\n onClick={() => {\n DashboardInteractions.dashboardOutlineClicked();\n setOutlineCollapsed(!outlineCollapsed);\n }}\n className={cx(clearButton, styles.outlineCollapseButton)}\n data-testid={selectors.components.PanelEditor.Outline.section}\n >\n <Text weight=\"medium\">\n <Trans i18nKey=\"dashboard-scene.dashboard-edit-pane-renderer.outline\">Outline</Trans>\n </Text>\n <Icon name={outlineCollapsed ? 'angle-up' : 'angle-down'} />\n </button>\n {!outlineCollapsed && (\n <div className={styles.outlineContainer}>\n <ScrollContainer showScrollIndicators={true}>\n <DashboardOutline editPane={editPane} />\n </ScrollContainer>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 0',\n marginTop: theme.spacing(2),\n borderLeft: `1px solid ${theme.colors.border.weak}`,\n borderTop: `1px solid ${theme.colors.border.weak}`,\n background: theme.colors.background.primary,\n borderTopLeftRadius: theme.shape.radius.default,\n }),\n overlayWrapper: css({\n right: 0,\n bottom: 0,\n top: theme.spacing(2),\n position: 'absolute !important' as 'absolute',\n background: theme.colors.background.primary,\n borderLeft: `1px solid ${theme.colors.border.weak}`,\n borderTop: `1px solid ${theme.colors.border.weak}`,\n boxShadow: theme.shadows.z3,\n zIndex: theme.zIndex.navbarFixed,\n flexGrow: 1,\n }),\n paneContent: css({\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }),\n rotate180: css({\n rotate: '180deg',\n }),\n tabsbar: css({\n padding: theme.spacing(0, 1),\n margin: theme.spacing(0.5, 0),\n }),\n expandOptionsWrapper: css({\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2, 1, 2, 0),\n }),\n splitter: css({\n '&::after': {\n background: 'transparent',\n transform: 'unset',\n width: '100%',\n height: '1px',\n top: '100%',\n left: '0',\n },\n }),\n outlineCollapseButton: css({\n display: 'flex',\n padding: theme.spacing(0.5, 2),\n gap: theme.spacing(1),\n justifyContent: 'space-between',\n alignItems: 'center',\n background: theme.colors.background.secondary,\n\n '&:hover': {\n background: theme.colors.action.hover,\n },\n }),\n outlineContainer: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n overflow: 'hidden',\n }),\n };\n}\n","import { css, cx } from '@emotion/css';\nimport React, { CSSProperties, useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { config, useChromeHeaderHeight } from '@grafana/runtime';\nimport { useSceneObjectState } from '@grafana/scenes';\nimport { ElementSelectionContext, useStyles2 } from '@grafana/ui';\nimport NativeScrollbar, { DivScrollElement } from 'app/core/components/NativeScrollbar';\n\nimport { useSnappingSplitter } from '../panel-edit/splitter/useSnappingSplitter';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\n\nimport { DashboardEditPaneRenderer } from './DashboardEditPaneRenderer';\nimport { useEditPaneCollapsed } from './shared';\n\ninterface Props {\n dashboard: DashboardScene;\n isEditing?: boolean;\n body?: React.ReactNode;\n controls?: React.ReactNode;\n}\n\nexport function DashboardEditPaneSplitter({ dashboard, isEditing, body, controls }: Props) {\n const headerHeight = useChromeHeaderHeight();\n const { editPane } = dashboard.state;\n const styles = useStyles2(getStyles, headerHeight ?? 0);\n const [isCollapsed, setIsCollapsed] = useEditPaneCollapsed();\n\n if (!config.featureToggles.dashboardNewLayouts) {\n return (\n <NativeScrollbar onSetScrollRef={dashboard.onSetScrollRef}>\n <div className={styles.canvasWrappperOld}>\n <NavToolbarActions dashboard={dashboard} />\n <div className={styles.controlsWrapperSticky}>{controls}</div>\n <div className={styles.body}>{body}</div>\n </div>\n </NativeScrollbar>\n );\n }\n\n const { containerProps, primaryProps, secondaryProps, splitterProps, splitterState, onToggleCollapse } =\n useSnappingSplitter({\n direction: 'row',\n dragPosition: 'end',\n initialSize: 330,\n handleSize: 'sm',\n usePixels: true,\n collapseBelowPixels: 250,\n collapsed: isCollapsed,\n });\n\n useEffect(() => {\n setIsCollapsed(splitterState.collapsed);\n }, [splitterState.collapsed, setIsCollapsed]);\n\n /**\n * Enable / disable selection based on dashboard isEditing state\n */\n useEffect(() => {\n if (isEditing) {\n editPane.enableSelection();\n } else {\n editPane.disableSelection();\n }\n }, [isEditing, editPane]);\n\n const { selectionContext } = useSceneObjectState(editPane, { shouldActivateOrKeepAlive: true });\n const containerStyle: CSSProperties = {};\n\n if (!isEditing) {\n primaryProps.style.flexGrow = 1;\n primaryProps.style.width = '100%';\n primaryProps.style.minWidth = 'unset';\n containerStyle.overflow = 'unset';\n }\n\n const onBodyRef = (ref: HTMLDivElement | null) => {\n if (ref) {\n dashboard.onSetScrollRef(new DivScrollElement(ref));\n }\n };\n\n return (\n <div {...containerProps} style={containerStyle}>\n <ElementSelectionContext.Provider value={selectionContext}>\n <div\n {...primaryProps}\n className={cx(primaryProps.className, styles.canvasWithSplitter)}\n onPointerDown={(evt) => {\n if (evt.shiftKey) {\n return;\n }\n\n editPane.clearSelection();\n }}\n >\n <NavToolbarActions dashboard={dashboard} />\n <div className={cx(!isEditing && styles.controlsWrapperSticky)}>{controls}</div>\n <div className={styles.bodyWrapper}>\n <div\n className={cx(styles.body, isEditing && styles.bodyEditing)}\n data-testid={selectors.components.DashboardEditPaneSplitter.primaryBody}\n ref={onBodyRef}\n >\n {body}\n </div>\n </div>\n </div>\n {isEditing && (\n <>\n <div\n {...splitterProps}\n className={cx(splitterProps.className, styles.splitter)}\n data-edit-pane-splitter={true}\n />\n <div {...secondaryProps} className={cx(secondaryProps.className, styles.editPane)}>\n <DashboardEditPaneRenderer\n editPane={editPane}\n isEditPaneCollapsed={isCollapsed}\n onToggleCollapse={onToggleCollapse}\n openOverlay={selectionContext.selected.length > 0}\n />\n </div>\n </>\n )}\n </ElementSelectionContext.Provider>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2, headerHeight: number) {\n return {\n canvasWrappperOld: css({\n label: 'canvas-wrapper-old',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n }),\n canvasWithSplitter: css({\n overflow: 'unset',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n }),\n canvasWithSplitterEditing: css({\n overflow: 'unset',\n }),\n bodyWrapper: css({\n label: 'body-wrapper',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n position: 'relative',\n }),\n body: css({\n label: 'body',\n display: 'flex',\n flexGrow: 1,\n gap: theme.spacing(1),\n boxSizing: 'border-box',\n flexDirection: 'column',\n // without top padding the fixed controls headers is rendered over the selection outline.\n padding: theme.spacing(0.125, 2, 2, 2),\n }),\n bodyEditing: css({\n position: 'absolute',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n overflow: 'auto',\n scrollbarWidth: 'thin',\n scrollbarGutter: 'stable',\n // Because the edit pane splitter handle area adds padding we can reduce it here\n paddingRight: theme.spacing(1),\n }),\n editPane: css({\n flexDirection: 'column',\n // borderLeft: `1px solid ${theme.colors.border.weak}`,\n // background: theme.colors.background.primary,\n }),\n splitter: css({\n '&:after': {\n display: 'none',\n },\n }),\n controlsWrapperSticky: css({\n [theme.breakpoints.up('md')]: {\n position: 'sticky',\n zIndex: theme.zIndex.activePanel,\n background: theme.colors.background.canvas,\n top: headerHeight,\n },\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport classNames from 'classnames';\nimport { useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { VizPanel, sceneGraph } from '@grafana/scenes';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { DashboardScene } from './DashboardScene';\nimport { SoloPanelContextProvider } from './SoloPanelContext';\n\nexport interface Props {\n dashboard: DashboardScene;\n panelSearch?: string;\n panelsPerRow?: number;\n}\n\nconst panelsPerRowCSSVar = '--panels-per-row';\n\nexport function PanelSearchLayout({ dashboard, panelSearch = '', panelsPerRow }: Props) {\n const { body } = dashboard.state;\n const styles = useStyles2(getStyles);\n const soloPanelContext = useMemo(() => new SoloPanelContextValueWithSearchStringFilter(panelSearch), [panelSearch]);\n\n return (\n <div\n className={classNames(styles.grid, { [styles.perRow]: panelsPerRow !== undefined })}\n style={{ [panelsPerRowCSSVar]: panelsPerRow } as Record<string, number>}\n >\n <SoloPanelContextProvider value={soloPanelContext} singleMatch={false} dashboard={dashboard}>\n <body.Component model={body} />\n </SoloPanelContextProvider>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grid: css({\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(400px, 1fr))',\n gap: theme.spacing(1),\n gridAutoRows: '320px',\n }),\n perRow: css({\n gridTemplateColumns: `repeat(var(${panelsPerRowCSSVar}, 3), 1fr)`,\n }),\n noHits: css({\n display: 'grid',\n placeItems: 'center',\n }),\n };\n}\n\nexport class SoloPanelContextValueWithSearchStringFilter {\n public matchFound = false;\n\n public constructor(private searchQuery: string) {}\n\n public matches(panel: VizPanel): boolean {\n const interpolatedSearchString = sceneGraph.interpolate(panel, this.searchQuery).toLowerCase();\n const interpolatedTitle = panel.interpolate(panel.state.title, undefined, 'text').toLowerCase();\n\n const match = interpolatedTitle.includes(interpolatedSearchString);\n if (match) {\n this.matchFound = true;\n }\n\n return match;\n }\n}\n","import { useContext, useEffect, useMemo } from 'react';\nimport { useLocation, useParams } from 'react-router-dom-v5-compat';\n\nimport { PageLayoutType } from '@grafana/data';\nimport { ScopesContext } from '@grafana/runtime';\nimport { SceneComponentProps } from '@grafana/scenes';\nimport { Page } from 'app/core/components/Page/Page';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { useSelector } from 'app/types/store';\n\nimport { DashboardEditPaneSplitter } from '../edit-pane/DashboardEditPaneSplitter';\n\nimport { DashboardScene } from './DashboardScene';\nimport { PanelSearchLayout } from './PanelSearchLayout';\nimport { SoloPanelContextProvider, useDefineSoloPanelContext } from './SoloPanelContext';\n\nexport function DashboardSceneRenderer({ model }: SceneComponentProps<DashboardScene>) {\n const {\n controls,\n overlay,\n editview,\n body,\n editPanel,\n viewPanel,\n panelSearch,\n panelsPerRow,\n isEditing,\n layoutOrchestrator,\n } = model.useState();\n const { type } = useParams();\n const location = useLocation();\n const scopesContext = useContext(ScopesContext);\n const navIndex = useSelector((state) => state.navIndex);\n const pageNav = model.getPageNav(location, navIndex);\n const navModel =\n type === 'snapshot'\n ? getNavModel(\n navIndex,\n 'dashboards/snapshots',\n // fallback navModel to prevent showing `Page not found` in snapshots\n getNavModel(navIndex, 'home')\n )\n : getNavModel(navIndex, 'dashboards/browse');\n const isSettingsOpen = editview !== undefined;\n const soloPanelContext = useDefineSoloPanelContext(viewPanel);\n\n // Remember scroll pos when going into view panel, edit panel or settings\n useMemo(() => {\n if (viewPanel || isSettingsOpen || editPanel) {\n model.rememberScrollPos();\n }\n }, [isSettingsOpen, editPanel, viewPanel, model]);\n\n // Restore scroll pos when coming back\n useEffect(() => {\n if (!viewPanel && !isSettingsOpen && !editPanel) {\n model.restoreScrollPos();\n }\n }, [isSettingsOpen, editPanel, viewPanel, model]);\n\n useEffect(() => {\n if (scopesContext && isEditing) {\n scopesContext.setReadOnly(true);\n\n return () => {\n scopesContext.setReadOnly(false);\n };\n }\n\n return;\n }, [scopesContext, isEditing]);\n\n if (editview) {\n return (\n <>\n <editview.Component model={editview} />\n {overlay && <overlay.Component model={overlay} />}\n </>\n );\n }\n\n function renderBody() {\n if (!viewPanel && (panelSearch || panelsPerRow)) {\n return <PanelSearchLayout panelSearch={panelSearch} panelsPerRow={panelsPerRow} dashboard={model} />;\n }\n\n if (soloPanelContext) {\n return (\n <SoloPanelContextProvider value={soloPanelContext} singleMatch={true} dashboard={model}>\n <body.Component model={body} />\n </SoloPanelContextProvider>\n );\n }\n\n return <body.Component model={body} />;\n }\n\n return (\n <>\n {layoutOrchestrator && <layoutOrchestrator.Component model={layoutOrchestrator} />}\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Custom}>\n {editPanel && <editPanel.Component model={editPanel} />}\n {!editPanel && (\n <DashboardEditPaneSplitter\n dashboard={model}\n isEditing={isEditing}\n controls={controls && <controls.Component model={controls} />}\n body={renderBody()}\n />\n )}\n {overlay && <overlay.Component model={overlay} />}\n </Page>\n </>\n );\n}\n","import { SceneObjectUrlSyncHandler, SceneObjectUrlValues } from '@grafana/scenes';\n\nimport { AnnotationsEditView, AnnotationsEditViewState } from './AnnotationsEditView';\nimport { DashboardLinksEditView, DashboardLinksEditViewState } from './DashboardLinksEditView';\nimport { VariablesEditView, VariablesEditViewState } from './VariablesEditView';\n\ntype EditListViewUrlSync = DashboardLinksEditView | VariablesEditView | AnnotationsEditView;\ntype EditListViewState = DashboardLinksEditViewState | VariablesEditViewState | AnnotationsEditViewState;\nexport class EditListViewSceneUrlSync implements SceneObjectUrlSyncHandler {\n constructor(private _scene: EditListViewUrlSync) {}\n\n getKeys(): string[] {\n return ['editIndex'];\n }\n\n getUrlState(): SceneObjectUrlValues {\n const state = this._scene.state;\n return {\n editIndex: state.editIndex !== undefined ? String(state.editIndex) : undefined,\n };\n }\n\n updateFromUrl(values: SceneObjectUrlValues): void {\n let update: Partial<EditListViewState> = {};\n if (typeof values.editIndex === 'string') {\n update = { editIndex: Number(values.editIndex) };\n } else {\n update = { editIndex: undefined };\n }\n\n if (Object.keys(update).length > 0) {\n this._scene.setState(update);\n }\n }\n}\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\nimport * as React from 'react';\nimport { useAsync } from 'react-use';\n\nimport {\n AnnotationQuery,\n DataSourceInstanceSettings,\n getDataSourceRef,\n GrafanaTheme2,\n SelectableValue,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport { AnnotationPanelFilter } from '@grafana/schema/src/raw/dashboard/x/dashboard_types.gen';\nimport { Button, Checkbox, Field, FieldSet, Input, MultiSelect, Select, useStyles2, Stack, Alert } from '@grafana/ui';\nimport { ColorValueEditor } from 'app/core/components/OptionsUI/color';\nimport StandardAnnotationQueryEditor from 'app/features/annotations/components/StandardAnnotationQueryEditor';\nimport { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker';\n\nimport { getPanelIdForVizPanel } from '../../utils/utils';\n\ntype Props = {\n annotation: AnnotationQuery;\n editIndex: number;\n panels: VizPanel[];\n onUpdate: (annotation: AnnotationQuery, editIndex: number) => void;\n onBackToList: () => void;\n onDelete: (index: number) => void;\n};\n\nexport const newAnnotationName = 'New annotation';\n\nexport const AnnotationSettingsEdit = ({ annotation, editIndex, panels, onUpdate, onBackToList, onDelete }: Props) => {\n const styles = useStyles2(getStyles);\n\n const panelFilter = useMemo(() => {\n if (!annotation.filter) {\n return PanelFilterType.AllPanels;\n }\n return annotation.filter.exclude ? PanelFilterType.ExcludePanels : PanelFilterType.IncludePanels;\n }, [annotation.filter]);\n\n const { value: ds } = useAsync(() => {\n return getDataSourceSrv().get(annotation.datasource);\n }, [annotation.datasource]);\n\n const dsi = getDataSourceSrv().getInstanceSettings(annotation.datasource);\n\n const onNameChange = (ev: React.FocusEvent<HTMLInputElement>) => {\n onUpdate(\n {\n ...annotation,\n name: ev.currentTarget.value,\n },\n editIndex\n );\n };\n\n const onDataSourceChange = (ds: DataSourceInstanceSettings) => {\n const dsRef = getDataSourceRef(ds);\n\n if (annotation.datasource?.type !== dsRef.type) {\n onUpdate(\n {\n datasource: dsRef,\n builtIn: annotation.builtIn,\n enable: annotation.enable,\n iconColor: annotation.iconColor,\n name: annotation.name,\n hide: annotation.hide,\n filter: annotation.filter,\n mappings: annotation.mappings,\n type: annotation.type,\n },\n editIndex\n );\n } else {\n onUpdate(\n {\n ...annotation,\n datasource: dsRef,\n },\n editIndex\n );\n }\n };\n\n const onChange = (ev: React.FocusEvent<HTMLInputElement>) => {\n const target = ev.currentTarget;\n onUpdate(\n {\n ...annotation,\n [target.name]: target.type === 'checkbox' ? target.checked : target.value,\n },\n editIndex\n );\n };\n\n const onColorChange = (color?: string) => {\n onUpdate(\n {\n ...annotation,\n iconColor: color!,\n },\n editIndex\n );\n };\n\n const onFilterTypeChange = (v: SelectableValue<PanelFilterType>) => {\n let filter =\n v.value === PanelFilterType.AllPanels\n ? undefined\n : {\n exclude: v.value === PanelFilterType.ExcludePanels,\n ids: annotation.filter?.ids ?? [],\n };\n onUpdate({ ...annotation, filter }, editIndex);\n };\n\n const onAddFilterPanelID = (selections: Array<SelectableValue<number>>) => {\n if (!Array.isArray(selections)) {\n return;\n }\n\n const filter: AnnotationPanelFilter = {\n exclude: panelFilter === PanelFilterType.ExcludePanels,\n ids: [],\n };\n\n selections.forEach((selection) => selection.value && filter.ids.push(selection.value));\n onUpdate({ ...annotation, filter }, editIndex);\n };\n\n const onDeleteAndLeavePage = () => {\n onDelete(editIndex);\n onBackToList();\n };\n\n const isNewAnnotation = annotation.name === newAnnotationName;\n\n const sortFn = (a: SelectableValue<number>, b: SelectableValue<number>) => {\n if (a.label && b.label) {\n return a.label.toLowerCase().localeCompare(b.label.toLowerCase());\n }\n\n return -1;\n };\n\n const selectablePanels: Array<SelectableValue<number>> = useMemo(\n () =>\n panels\n // Filtering out rows at the moment, revisit to only include panels that support annotations\n // However the information to know if a panel supports annotations requires it to be already loaded\n // panel.plugin?.dataSupport?.annotations\n .filter((panel) => config.panels[panel.state.pluginId])\n .map((panel) => ({\n value: getPanelIdForVizPanel(panel),\n label: panel.state.title ?? `Panel ${getPanelIdForVizPanel(panel)}`,\n description: panel.state.description,\n imgUrl: config.panels[panel.state.pluginId].info.logos.small,\n }))\n .sort(sortFn) ?? [],\n [panels]\n );\n\n return (\n <div>\n <FieldSet className={styles.settingsForm}>\n <Field label={t('dashboard-scene.annotation-settings-edit.label-name', 'Name')}>\n <Input\n data-testid={selectors.pages.Dashboard.Settings.Annotations.Settings.name}\n name=\"name\"\n id=\"name\"\n autoFocus={isNewAnnotation}\n value={annotation.name}\n onChange={onNameChange}\n />\n </Field>\n <Field\n label={t('dashboard-scene.annotation-settings-edit.label-data-source', 'Data source')}\n htmlFor=\"data-source-picker\"\n >\n <DataSourcePicker annotations variables current={annotation.datasource} onChange={onDataSourceChange} />\n </Field>\n {!ds?.meta.annotations && (\n <Alert\n title={t(\n 'dashboard-scene.annotation-settings-edit.title-annotation-support-source',\n 'No annotation support for this data source'\n )}\n severity=\"error\"\n >\n <Trans i18nKey=\"errors.dashboard-settings.annotations.datasource\">\n The selected data source does not support annotations. Please select a different data source.\n </Trans>\n </Alert>\n )}\n <Field\n label={t('dashboard-scene.annotation-settings-edit.label-enabled', 'Enabled')}\n description={t(\n 'dashboard-scene.annotation-settings-edit.description-enabled-annotation-query-issued-every-dashboard',\n 'When enabled the annotation query is issued every dashboard refresh'\n )}\n >\n <Checkbox\n name=\"enable\"\n id=\"enable\"\n value={annotation.enable}\n onChange={onChange}\n data-testid={selectors.pages.Dashboard.Settings.Annotations.NewAnnotation.enable}\n />\n </Field>\n <Field\n label={t('dashboard-scene.annotation-settings-edit.label-hidden', 'Hidden')}\n description={t(\n 'dashboard-scene.annotation-settings-edit.description-hidden',\n 'Annotation queries can be toggled on or off at the top of the dashboard. With this option checked this toggle will be hidden.'\n )}\n >\n <Checkbox\n name=\"hide\"\n id=\"hide\"\n value={annotation.hide}\n onChange={onChange}\n data-testid={selectors.pages.Dashboard.Settings.Annotations.NewAnnotation.hide}\n />\n </Field>\n <Field\n label={t('dashboard-scene.annotation-settings-edit.label-color', 'Color')}\n description={t(\n 'dashboard-scene.annotation-settings-edit.description-color-annotation-event-markers',\n 'Color to use for the annotation event markers'\n )}\n >\n <Stack>\n <ColorValueEditor value={annotation?.iconColor} onChange={onColorChange} />\n </Stack>\n </Field>\n <Field\n label={t('dashboard-scene.annotation-settings-edit.label-show-in', 'Show in')}\n data-testid={selectors.pages.Dashboard.Settings.Annotations.NewAnnotation.showInLabel}\n >\n <>\n <Select\n options={getPanelFilters()}\n value={panelFilter}\n onChange={onFilterTypeChange}\n data-testid={selectors.components.Annotations.annotationsTypeInput}\n />\n {panelFilter !== PanelFilterType.AllPanels && (\n <MultiSelect\n options={selectablePanels}\n value={selectablePanels.filter((panel) => annotation.filter?.ids.includes(panel.value!))}\n onChange={onAddFilterPanelID}\n isClearable={true}\n placeholder={t('dashboard-scene.annotation-settings-edit.placeholder-choose-panels', 'Choose panels')}\n width={100}\n closeMenuOnSelect={false}\n className={styles.select}\n data-testid={selectors.components.Annotations.annotationsChoosePanelInput}\n />\n )}\n </>\n </Field>\n </FieldSet>\n <FieldSet>\n <h3 className=\"page-heading\">\n <Trans i18nKey=\"dashboard-scene.annotation-settings-edit.query\">Query</Trans>\n </h3>\n {ds?.annotations && dsi && (\n <StandardAnnotationQueryEditor\n datasource={ds}\n datasourceInstanceSettings={dsi}\n annotation={annotation}\n onChange={(annotation) => onUpdate(annotation, editIndex)}\n />\n )}\n </FieldSet>\n <Stack>\n {!annotation.builtIn && (\n <Button\n variant=\"destructive\"\n onClick={onDeleteAndLeavePage}\n data-testid={selectors.pages.Dashboard.Settings.Annotations.NewAnnotation.delete}\n >\n <Trans i18nKey=\"dashboard-scene.annotation-settings-edit.delete\">Delete</Trans>\n </Button>\n )}\n <Button\n variant=\"secondary\"\n onClick={onBackToList}\n data-testid={selectors.pages.Dashboard.Settings.Annotations.NewAnnotation.apply}\n >\n <Trans i18nKey=\"dashboard-scene.annotation-settings-edit.back-to-list\">Back to list</Trans>\n </Button>\n </Stack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n settingsForm: css({\n maxWidth: theme.spacing(60),\n marginBottom: theme.spacing(2),\n }),\n select: css({\n marginTop: '8px',\n }),\n };\n};\n\n// Synthetic type\nenum PanelFilterType {\n AllPanels,\n IncludePanels,\n ExcludePanels,\n}\n\nconst getPanelFilters = () => [\n {\n label: t('dashboard-scene.get-panel-filters.label.all-panels', 'All panels'),\n value: PanelFilterType.AllPanels,\n description: t(\n 'dashboard-scene.get-panel-filters.description.annotation-panels-support-annotations',\n 'Send the annotation data to all panels that support annotations'\n ),\n },\n {\n label: t('dashboard-scene.get-panel-filters.label.selected-panels', 'Selected panels'),\n value: PanelFilterType.IncludePanels,\n description: t(\n 'dashboard-scene.get-panel-filters.description.annotations-explicitly-listed-panels',\n 'Send the annotations to the explicitly listed panels'\n ),\n },\n {\n label: t('dashboard-scene.get-panel-filters.label.all-panels-except', 'All panels except'),\n value: PanelFilterType.ExcludePanels,\n description: t(\n 'dashboard-scene.get-panel-filters.description.annotation-following-panels',\n 'Do not send annotation data to the following panels'\n ),\n },\n];\n","import { css } from '@emotion/css';\n\nimport { AnnotationQuery } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { Button, DeleteButton, EmptyState, IconButton, Stack, TextLink, useStyles2 } from '@grafana/ui';\nimport { ListNewButton } from 'app/features/dashboard/components/DashboardSettings/ListNewButton';\n\nimport { MoveDirection } from '../AnnotationsEditView';\n\ntype Props = {\n annotations: AnnotationQuery[];\n onNew: () => void;\n onEdit: (idx: number) => void;\n onMove: (idx: number, dir: MoveDirection) => void;\n onDelete: (idx: number) => void;\n};\n\nexport const BUTTON_TITLE = 'Add annotation query';\n\nexport const AnnotationSettingsList = ({ annotations, onNew, onEdit, onMove, onDelete }: Props) => {\n const styles = useStyles2(getStyles);\n\n const showEmptyListCTA = annotations.length === 0 || (annotations.length === 1 && annotations[0].builtIn);\n\n const getAnnotationName = (anno: AnnotationQuery) => {\n if (anno.enable === false) {\n return (\n <em className=\"muted\">\n <Trans i18nKey=\"dashboard-scene.annotation-settings-list.disabled\" values={{ annoName: anno.name }}>\n (Disabled) {'{{annoName}}'}\n </Trans>\n </em>\n );\n }\n\n if (anno.builtIn) {\n return (\n <em className=\"muted\">\n <Trans i18nKey=\"dashboard-scene.annotation-settings-list.built-in\" values={{ annoName: anno.name }}>\n {'{{annoName}}'} (Built-in)\n </Trans>\n </em>\n );\n }\n\n return <>{anno.name}</>;\n };\n\n const dataSourceSrv = getDataSourceSrv();\n return (\n <Stack direction=\"column\">\n {annotations.length > 0 && (\n <div className={styles.table}>\n <table role=\"grid\" className=\"filter-table filter-table--hover\">\n <thead>\n <tr>\n <th>\n <Trans i18nKey=\"dashboard-scene.annotation-settings-list.query-name\">Query name</Trans>\n </th>\n <th>\n <Trans i18nKey=\"dashboard-scene.annotation-settings-list.data-source\">Data source</Trans>\n </th>\n <th colSpan={3}></th>\n </tr>\n </thead>\n <tbody data-testid={selectors.pages.Dashboard.Settings.Annotations.List.annotations}>\n {annotations.map((annotation, idx) => (\n <tr key={`${annotation.name}-${idx}`}>\n {annotation.builtIn ? (\n <td role=\"gridcell\" style={{ width: '90%' }} className=\"pointer\" onClick={() => onEdit(idx)}>\n <Button size=\"sm\" fill=\"text\" variant=\"secondary\">\n {getAnnotationName(annotation)}\n </Button>\n </td>\n ) : (\n <td role=\"gridcell\" className=\"pointer\" onClick={() => onEdit(idx)}>\n <Button size=\"sm\" fill=\"text\" variant=\"secondary\">\n {getAnnotationName(annotation)}\n </Button>\n </td>\n )}\n <td role=\"gridcell\" className=\"pointer\" onClick={() => onEdit(idx)}>\n {dataSourceSrv.getInstanceSettings(annotation.datasource)?.name || annotation.datasource?.uid}\n </td>\n <td role=\"gridcell\" style={{ width: '1%' }}>\n {idx !== 0 && (\n <IconButton\n name=\"arrow-up\"\n onClick={() => onMove(idx, MoveDirection.UP)}\n tooltip={t('dashboard-scene.annotation-settings-list.tooltip-move-up', 'Move up')}\n />\n )}\n </td>\n <td role=\"gridcell\" style={{ width: '1%' }}>\n {annotations.length > 1 && idx !== annotations.length - 1 ? (\n <IconButton\n name=\"arrow-down\"\n onClick={() => onMove(idx, MoveDirection.DOWN)}\n tooltip={t('dashboard-scene.annotation-settings-list.tooltip-move-down', 'Move down')}\n />\n ) : null}\n </td>\n <td role=\"gridcell\" style={{ width: '1%' }}>\n {!annotation.builtIn && (\n <DeleteButton\n size=\"sm\"\n onConfirm={() => onDelete(idx)}\n aria-label={t(\n 'dashboard-scene.annotation-settings-list.delete-aria-label',\n 'Delete query with title \"{{title}}\"',\n { title: annotation.name }\n )}\n />\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n {showEmptyListCTA && (\n <Stack direction=\"column\">\n <EmptyState\n variant=\"call-to-action\"\n button={\n <Button\n data-testid={selectors.components.CallToActionCard.buttonV2('Add annotation query')}\n icon=\"comment-alt\"\n onClick={onNew}\n size=\"lg\"\n >\n <Trans i18nKey=\"annotations.empty-state.button-title\">Add annotation query</Trans>\n </Button>\n }\n message={t('annotations.empty-state.title', 'There are no custom annotation queries added yet')}\n >\n <Trans i18nKey=\"annotations.empty-state.info-box-content\">\n <p>\n Annotations provide a way to integrate event data into your graphs. They are visualized as vertical\n lines and icons on all graph panels. When you hover over an annotation icon you can get event text &\n tags for the event. You can add annotation events directly from grafana by holding CTRL or CMD + click\n on graph (or drag region). These will be stored in Grafana's annotation database.\n </p>\n </Trans>\n <Trans i18nKey=\"annotations.empty-state.info-box-content-2\">\n Checkout the{' '}\n <TextLink external href=\"http://docs.grafana.org/reference/annotations/\">\n Annotations documentation\n </TextLink>{' '}\n for more information.\n </Trans>\n </EmptyState>\n </Stack>\n )}\n {!showEmptyListCTA && (\n <ListNewButton\n data-testid={selectors.pages.Dashboard.Settings.Annotations.List.addAnnotationCTAV2}\n onClick={onNew}\n >\n <Trans i18nKey=\"dashboard-scene.annotation-settings-list.new-query\">New query</Trans>\n </ListNewButton>\n )}\n </Stack>\n );\n};\n\nconst getStyles = () => ({\n table: css({\n width: '100%',\n overflowX: 'auto',\n }),\n});\n","import { AnnotationQuery, getDataSourceRef, NavModel, NavModelItem, PageLayoutType } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { SceneComponentProps, SceneObjectBase, VizPanel, dataLayers } from '@grafana/scenes';\nimport { Page } from 'app/core/components/Page/Page';\n\nimport { DashboardAnnotationsDataLayer } from '../scene/DashboardAnnotationsDataLayer';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { dataLayersToAnnotations } from '../serialization/dataLayersToAnnotations';\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { EditListViewSceneUrlSync } from './EditListViewSceneUrlSync';\nimport { AnnotationSettingsEdit, newAnnotationName } from './annotations/AnnotationSettingsEdit';\nimport { AnnotationSettingsList } from './annotations/AnnotationSettingsList';\nimport { DashboardEditView, DashboardEditViewState, useDashboardEditPageNav } from './utils';\n\nexport enum MoveDirection {\n UP = -1,\n DOWN = 1,\n}\n\nexport interface AnnotationsEditViewState extends DashboardEditViewState {\n editIndex?: number | undefined;\n}\n\nexport class AnnotationsEditView extends SceneObjectBase<AnnotationsEditViewState> implements DashboardEditView {\n static Component = AnnotationsSettingsView;\n\n public getUrlKey(): string {\n return 'annotations';\n }\n\n protected _urlSync = new EditListViewSceneUrlSync(this);\n\n private get _dashboard(): DashboardScene {\n return getDashboardSceneFor(this);\n }\n\n public getDataLayer(editIndex: number): dataLayers.AnnotationsDataLayer {\n const data = dashboardSceneGraph.getDataLayers(this._dashboard);\n const layer = data.state.annotationLayers[editIndex];\n\n if (!(layer instanceof dataLayers.AnnotationsDataLayer)) {\n throw new Error('AnnotationsDataLayer not found at index ' + editIndex);\n }\n\n return layer;\n }\n\n public getDashboard(): DashboardScene {\n return this._dashboard;\n }\n\n public getDataSourceRefForAnnotation = () => {\n // get current default datasource ref from instance settings\n // null is passed to get the default datasource\n const defaultInstanceDS = getDataSourceSrv().getInstanceSettings(null);\n // check for an annotation flag in the plugin json to see if it supports annotations\n if (!defaultInstanceDS || !defaultInstanceDS.meta.annotations) {\n console.error('Default datasource does not support annotations');\n return undefined;\n }\n return getDataSourceRef(defaultInstanceDS);\n };\n\n public onNew = async () => {\n const newAnnotationQuery: AnnotationQuery = {\n name: newAnnotationName,\n enable: true,\n datasource: this.getDataSourceRefForAnnotation(),\n iconColor: 'red',\n };\n\n const newAnnotation = new DashboardAnnotationsDataLayer({\n query: newAnnotationQuery,\n name: newAnnotationQuery.name,\n isEnabled: Boolean(newAnnotationQuery.enable),\n isHidden: Boolean(newAnnotationQuery.hide),\n });\n\n const data = dashboardSceneGraph.getDataLayers(this._dashboard);\n\n data.addAnnotationLayer(newAnnotation);\n this.setState({ editIndex: data.state.annotationLayers.length - 1 });\n };\n\n public onEdit = (idx: number) => {\n this.setState({ editIndex: idx });\n };\n\n public onBackToList = () => {\n this.setState({ editIndex: undefined });\n };\n\n public onMove = (idx: number, direction: MoveDirection) => {\n const data = dashboardSceneGraph.getDataLayers(this._dashboard);\n const layers = [...data.state.annotationLayers];\n\n const [layer] = layers.splice(idx, 1);\n layers.splice(idx + direction, 0, layer);\n\n data.setState({ annotationLayers: layers });\n };\n\n public onDelete = (idx: number) => {\n const data = dashboardSceneGraph.getDataLayers(this._dashboard);\n const layers = [...data.state.annotationLayers];\n\n layers.splice(idx, 1);\n\n data.setState({ annotationLayers: layers });\n };\n\n public onUpdate = (annotation: AnnotationQuery, editIndex: number) => {\n const layer = this.getDataLayer(editIndex);\n\n layer.setState({\n name: annotation.name,\n isEnabled: Boolean(annotation.enable),\n isHidden: Boolean(annotation.hide),\n query: annotation,\n });\n\n //need to rerun the layer to update the query and\n //see the annotation on the panel\n layer.runLayer();\n };\n}\n\nfunction AnnotationsSettingsView({ model }: SceneComponentProps<AnnotationsEditView>) {\n const dashboard = model.getDashboard();\n const { annotationLayers } = dashboardSceneGraph.getDataLayers(dashboard).useState();\n const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());\n const { editIndex } = model.useState();\n const panels = dashboardSceneGraph.getVizPanels(dashboard);\n\n const annotations: AnnotationQuery[] = dataLayersToAnnotations(annotationLayers);\n\n if (editIndex != null && editIndex < annotationLayers.length) {\n return (\n <AnnotationsSettingsEditView\n annotationLayer={model.getDataLayer(editIndex)}\n pageNav={pageNav}\n panels={panels}\n editIndex={editIndex}\n navModel={navModel}\n dashboard={dashboard}\n onUpdate={model.onUpdate}\n onBackToList={model.onBackToList}\n onDelete={model.onDelete}\n />\n );\n }\n\n return (\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <AnnotationSettingsList\n annotations={annotations}\n onNew={model.onNew}\n onEdit={model.onEdit}\n onDelete={model.onDelete}\n onMove={model.onMove}\n />\n </Page>\n );\n}\n\ninterface AnnotationsSettingsEditViewProps {\n annotationLayer: dataLayers.AnnotationsDataLayer;\n pageNav: NavModelItem;\n panels: VizPanel[];\n editIndex: number;\n navModel: NavModel;\n dashboard: DashboardScene;\n onUpdate: (annotation: AnnotationQuery, editIndex: number) => void;\n onBackToList: () => void;\n onDelete: (idx: number) => void;\n}\n\nfunction AnnotationsSettingsEditView({\n annotationLayer,\n pageNav,\n navModel,\n panels,\n editIndex,\n dashboard,\n onUpdate,\n onBackToList,\n onDelete,\n}: AnnotationsSettingsEditViewProps) {\n const { name, query } = annotationLayer.useState();\n\n const editAnnotationPageNav = {\n text: name,\n parentItem: pageNav,\n };\n\n return (\n <Page navModel={navModel} pageNav={editAnnotationPageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <AnnotationSettingsEdit\n annotation={query}\n editIndex={editIndex}\n panels={panels}\n onUpdate={onUpdate}\n onBackToList={onBackToList}\n onDelete={onDelete}\n />\n </Page>\n );\n}\n","import { NavModel, NavModelItem, PageLayoutType, arrayUtils } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { SceneComponentProps, SceneObjectBase } from '@grafana/scenes';\nimport { DashboardLink } from '@grafana/schema';\nimport { Page } from 'app/core/components/Page/Page';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { DashboardLinkForm } from '../settings/links/DashboardLinkForm';\nimport { DashboardLinkList } from '../settings/links/DashboardLinkList';\nimport { NEW_LINK } from '../settings/links/utils';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { EditListViewSceneUrlSync } from './EditListViewSceneUrlSync';\nimport { DashboardEditView, DashboardEditListViewState, useDashboardEditPageNav } from './utils';\n\nexport interface DashboardLinksEditViewState extends DashboardEditListViewState {}\n\nexport class DashboardLinksEditView extends SceneObjectBase<DashboardLinksEditViewState> implements DashboardEditView {\n static Component = DashboardLinksEditViewRenderer;\n\n protected _urlSync = new EditListViewSceneUrlSync(this);\n\n public getUrlKey(): string {\n return 'links';\n }\n\n private get dashboard(): DashboardScene {\n return getDashboardSceneFor(this);\n }\n\n private get links(): DashboardLink[] {\n return this.dashboard.state.links;\n }\n\n private set links(links: DashboardLink[]) {\n this.dashboard.setState({ links });\n }\n\n public onNewLink = () => {\n this.links = [...this.links, NEW_LINK];\n this.setState({ editIndex: this.links.length - 1 });\n };\n\n public onDelete = (idx: number) => {\n this.links = [...this.links.slice(0, idx), ...this.links.slice(idx + 1)];\n\n this.setState({ editIndex: undefined });\n };\n\n public onDuplicate = (link: DashboardLink) => {\n this.links = [...this.links, { ...link }];\n };\n\n public onOrderChange = (idx: number, direction: number) => {\n this.links = arrayUtils.moveItemImmutably(this.links, idx, idx + direction);\n };\n\n public onEdit = (editIndex: number) => {\n this.setState({ editIndex });\n };\n\n public onUpdateLink = (link: DashboardLink) => {\n const idx = this.state.editIndex;\n\n if (idx === undefined) {\n return;\n }\n\n this.links = [...this.links.slice(0, idx), link, ...this.links.slice(idx + 1)];\n };\n\n public onGoBack = () => {\n this.setState({ editIndex: undefined });\n };\n}\n\nfunction DashboardLinksEditViewRenderer({ model }: SceneComponentProps<DashboardLinksEditView>) {\n const { editIndex } = model.useState();\n const dashboard = getDashboardSceneFor(model);\n const { links } = dashboard.useState();\n const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());\n const linkToEdit = editIndex !== undefined ? links[editIndex] : undefined;\n\n if (linkToEdit) {\n return (\n <EditLinkView\n pageNav={pageNav}\n navModel={navModel}\n link={linkToEdit}\n dashboard={dashboard}\n onChange={model.onUpdateLink}\n onGoBack={model.onGoBack}\n />\n );\n }\n\n return (\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <DashboardLinkList\n links={links}\n onNew={model.onNewLink}\n onEdit={model.onEdit}\n onDelete={model.onDelete}\n onDuplicate={model.onDuplicate}\n onOrderChange={model.onOrderChange}\n />\n </Page>\n );\n}\n\ninterface EditLinkViewProps {\n link?: DashboardLink;\n pageNav: NavModelItem;\n navModel: NavModel;\n dashboard: DashboardScene;\n onChange: (link: DashboardLink) => void;\n onGoBack: () => void;\n}\n\nfunction EditLinkView({ pageNav, link, navModel, dashboard, onChange, onGoBack }: EditLinkViewProps) {\n const editLinkPageNav = {\n text: t('dashboard-scene.edit-link-view.edit-link-page-nav.text.edit-link', 'Edit link'),\n parentItem: pageNav,\n };\n\n return (\n <Page navModel={navModel} pageNav={editLinkPageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <DashboardLinkForm link={link!} onUpdate={onChange} onGoBack={onGoBack} />\n </Page>\n );\n}\n","import { skipToken } from '@reduxjs/toolkit/query';\nimport { useCallback, useEffect, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useNavigate } from 'react-router-dom-v5-compat';\n\nimport { AppEvents } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { getAppEvents, reportInteraction } from '@grafana/runtime';\nimport { Alert, Button, Drawer, Field, Input, Spinner, Stack } from '@grafana/ui';\nimport { useGetFolderQuery } from 'app/api/clients/folder/v1beta1';\nimport {\n Job,\n RepositoryView,\n useCreateRepositoryFilesWithPathMutation,\n useGetRepositoryFilesWithPathQuery,\n} from 'app/api/clients/provisioning/v0alpha1';\nimport { AnnoKeySourcePath } from 'app/features/apiserver/types';\nimport { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\nimport { JobStatus } from 'app/features/provisioning/Job/JobStatus';\nimport { StepStatusInfo } from 'app/features/provisioning/Wizard/types';\n\nimport { ProvisioningAlert } from '../../Shared/ProvisioningAlert';\nimport { ProvisionedOperationInfo, useProvisionedRequestHandler } from '../../hooks/useProvisionedRequestHandler';\nimport { StatusInfo } from '../../types';\nimport { ProvisionedDashboardFormData } from '../../types/form';\nimport { buildResourceBranchRedirectUrl } from '../../utils/redirect';\nimport { useBulkActionJob } from '../BulkActions/useBulkActionJob';\nimport { getTargetFolderPathInRepo } from '../BulkActions/utils';\nimport { ResourceEditFormSharedFields } from '../Shared/ResourceEditFormSharedFields';\n\nexport interface Props {\n dashboard: DashboardScene;\n defaultValues: ProvisionedDashboardFormData;\n readOnly: boolean;\n isNew?: boolean;\n workflowOptions: Array<{ label: string; value: string }>;\n loadedFromRef?: string;\n targetFolderUID?: string;\n targetFolderTitle?: string;\n repository?: RepositoryView;\n onDismiss: () => void;\n onSuccess: (folderUID: string, folderTitle: string) => void;\n}\n\nexport function MoveProvisionedDashboardForm({\n dashboard,\n defaultValues,\n loadedFromRef,\n readOnly,\n isNew,\n workflowOptions,\n targetFolderUID,\n targetFolderTitle,\n repository,\n onDismiss,\n onSuccess,\n}: Props) {\n const methods = useForm<ProvisionedDashboardFormData>({ defaultValues });\n const { editPanel: panelEditor } = dashboard.useState();\n\n const { handleSubmit, watch } = methods;\n const appEvents = getAppEvents();\n\n const [ref, workflow] = watch(['ref', 'workflow']);\n\n const { data: currentFileData, isLoading: isLoadingFileData } = useGetRepositoryFilesWithPathQuery({\n name: defaultValues.repo,\n path: defaultValues.path,\n });\n\n const { data: targetFolder } = useGetFolderQuery(targetFolderUID ? { name: targetFolderUID! } : skipToken);\n\n const { createBulkJob, isLoading: isCreatingJob } = useBulkActionJob();\n const [moveFile, moveRequest] = useCreateRepositoryFilesWithPathMutation();\n const [targetPath, setTargetPath] = useState<string>('');\n const [job, setJob] = useState<Job>();\n const [hasSubmitted, setHasSubmitted] = useState(false);\n const [jobError, setJobError] = useState<string | StatusInfo>();\n\n const navigate = useNavigate();\n\n useEffect(() => {\n const currentSourcePath = currentFileData?.resource?.dryRun?.metadata?.annotations?.[AnnoKeySourcePath];\n if (!currentSourcePath || targetFolderUID === undefined) {\n return;\n }\n\n const filename = currentSourcePath.split('/').pop();\n const targetFolderPath = getTargetFolderPathInRepo({\n targetFolderUID,\n targetFolder,\n repoName: repository?.name,\n hidePrependSlash: true,\n });\n const newPath = `${targetFolderPath}${filename}`;\n setTargetPath(newPath);\n }, [currentFileData, targetFolder, targetFolderUID, targetFolderTitle, repository]);\n\n // Helper function to show error messages\n const showError = (error?: unknown) => {\n const payload = [t('dashboard-scene.move-provisioned-dashboard-form.api-error', 'Failed to move dashboard'), error];\n\n appEvents.publish({\n type: AppEvents.alertError.name,\n payload,\n });\n };\n\n const handleSubmitForm = async ({ repo, path, comment }: ProvisionedDashboardFormData) => {\n if (!repo || !repository) {\n showError();\n return;\n }\n\n const targetFolderPath = getTargetFolderPathInRepo({\n targetFolderUID,\n targetFolder,\n repoName: repository?.name,\n });\n\n if (!targetFolderPath) {\n showError();\n return;\n }\n\n reportInteraction('grafana_provisioning_dashboard_move_submitted', {\n workflow,\n repositoryName: repo,\n repositoryType: repository?.type ?? 'unknown',\n });\n\n // Branch workflow: use /files API for direct file operations\n if (workflow === 'branch') {\n if (!currentFileData?.resource?.file) {\n appEvents.publish({\n type: AppEvents.alertError.name,\n payload: [\n t(\n 'dashboard-scene.move-provisioned-dashboard-form.current-file-not-found',\n 'Current dashboard file could not be found'\n ),\n ],\n });\n return;\n }\n\n const branchRef = ref;\n const commitMessage = comment || `Move dashboard: ${dashboard.state.title}`;\n\n try {\n await moveFile({\n name: repo,\n path: targetPath,\n ref: branchRef,\n message: commitMessage,\n body: currentFileData.resource.file,\n originalPath: path,\n }).unwrap();\n } catch (error) {\n showError(error);\n }\n return;\n }\n\n // Write workflow: use Job API\n const effectiveRef = isNew ? undefined : loadedFromRef;\n const jobSpec = {\n action: 'move' as const,\n move: {\n ref: effectiveRef,\n targetPath: targetFolderPath,\n resources: [\n {\n name: dashboard.state.meta.uid ?? dashboard.state.meta.k8s?.name ?? '',\n group: 'dashboard.grafana.app' as const,\n kind: 'Dashboard' as const,\n },\n ],\n },\n };\n\n try {\n const result = await createBulkJob(repository, jobSpec);\n if (!result.success) {\n showError();\n return;\n }\n\n if (result.job) {\n setJob(result.job);\n setHasSubmitted(true);\n }\n } catch (error) {\n showError(error);\n }\n };\n\n const onBranchSuccess = (info: ProvisionedOperationInfo) => {\n dashboard.setState({ isDirty: false });\n panelEditor?.onDiscard();\n const url = buildResourceBranchRedirectUrl({\n paramName: 'new_pull_request_url',\n paramValue: moveRequest?.data?.urls?.newPullRequestURL,\n repoType: info.repoType,\n });\n navigate(url);\n };\n\n const handleJobStatusChange = useCallback(\n (statusInfo: StepStatusInfo) => {\n if (statusInfo.status === 'success') {\n dashboard.setState({ isDirty: false });\n panelEditor?.onDiscard();\n navigate('/dashboards');\n }\n\n if (statusInfo.status === 'error' && statusInfo.error) {\n setJobError(statusInfo.error);\n }\n },\n [dashboard, panelEditor, navigate]\n );\n\n useProvisionedRequestHandler({\n request: moveRequest,\n workflow,\n resourceType: 'dashboard',\n repository,\n selectedBranch: ref || loadedFromRef,\n successMessage: t(\n 'dashboard-scene.move-provisioned-dashboard-form.success-message',\n 'Dashboard moved successfully'\n ),\n handlers: {\n onBranchSuccess: (_, info) => onBranchSuccess(info),\n onDismiss,\n onError: showError,\n },\n });\n\n const isLoading = isCreatingJob || moveRequest.isLoading;\n\n return (\n <Drawer\n title={t('dashboard-scene.move-provisioned-dashboard-form.drawer-title', 'Move Provisioned Dashboard')}\n subtitle={dashboard.state.title}\n onClose={onDismiss}\n >\n {hasSubmitted && job ? (\n <>\n <ProvisioningAlert error={jobError} />\n <JobStatus watch={job} jobType=\"move\" onStatusChange={handleJobStatusChange} />\n </>\n ) : (\n <FormProvider {...methods}>\n <form onSubmit={handleSubmit(handleSubmitForm)}>\n <Stack direction=\"column\" gap={2}>\n {readOnly && (\n <Alert\n title={t(\n 'dashboard-scene.move-provisioned-dashboard-form.title-this-repository-is-read-only',\n 'This repository is read only'\n )}\n >\n <Trans i18nKey=\"dashboard-scene.move-provisioned-dashboard-form.move-read-only-message\">\n This dashboard cannot be moved directly from Grafana because the repository is read-only. To move\n this dashboard, please move the file in your Git repository.\n </Trans>\n </Alert>\n )}\n\n {isLoadingFileData && (\n <Stack alignItems=\"center\" gap={2}>\n <Spinner />\n <div>\n {t(\n 'dashboard-scene.move-provisioned-dashboard-form.loading-dashboard-data',\n 'Loading dashboard data'\n )}\n </div>\n </Stack>\n )}\n\n {currentFileData?.errors?.length && currentFileData.errors.length > 0 && (\n <Alert\n title={t(\n 'dashboard-scene.move-provisioned-dashboard-form.file-load-error',\n 'Error loading dashboard'\n )}\n severity=\"error\"\n >\n {currentFileData.errors.map((error, index) => (\n <div key={index}>{error}</div>\n ))}\n </Alert>\n )}\n\n <Field\n noMargin\n label={t('dashboard-scene.move-provisioned-dashboard-form.target-path-label', 'Target path')}\n >\n <Input readOnly value={targetPath} />\n </Field>\n\n <ResourceEditFormSharedFields\n resourceType=\"dashboard\"\n isNew={isNew}\n readOnly={readOnly}\n workflow={workflow}\n workflowOptions={workflowOptions}\n repository={repository}\n />\n\n <Stack gap={2}>\n <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n <Trans i18nKey=\"dashboard-scene.move-provisioned-dashboard-form.cancel-action\">Cancel</Trans>\n </Button>\n <Button\n variant=\"primary\"\n type=\"submit\"\n disabled={isLoading || readOnly || isLoadingFileData || !currentFileData?.resource?.file}\n >\n {isLoading\n ? t('dashboard-scene.move-provisioned-dashboard-form.moving', 'Moving...')\n : t('dashboard-scene.move-provisioned-dashboard-form.move-action', 'Move dashboard')}\n </Button>\n </Stack>\n </Stack>\n </form>\n </FormProvider>\n )}\n </Drawer>\n );\n}\n","import { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\n\nimport { useProvisionedDashboardData } from '../../hooks/useProvisionedDashboardData';\n\nimport { MoveProvisionedDashboardForm } from './MoveProvisionedDashboardForm';\n\nexport interface Props {\n dashboard: DashboardScene;\n targetFolderUID?: string;\n targetFolderTitle?: string;\n onDismiss: () => void;\n onSuccess: (folderUID: string, folderTitle: string) => void;\n}\n\nexport function MoveProvisionedDashboardDrawer({\n dashboard,\n targetFolderUID,\n targetFolderTitle,\n onDismiss,\n onSuccess,\n}: Props) {\n const { defaultValues, loadedFromRef, readOnly, workflowOptions, isNew, repository } =\n useProvisionedDashboardData(dashboard);\n\n if (!defaultValues) {\n return null;\n }\n\n return (\n <MoveProvisionedDashboardForm\n dashboard={dashboard}\n defaultValues={defaultValues}\n loadedFromRef={loadedFromRef}\n readOnly={readOnly}\n repository={repository}\n isNew={isNew}\n workflowOptions={workflowOptions}\n targetFolderUID={targetFolderUID}\n targetFolderTitle={targetFolderTitle}\n onDismiss={onDismiss}\n onSuccess={onSuccess}\n />\n );\n}\n","import { ChangeEvent } from 'react';\n\nimport { PageLayoutType } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps, SceneObjectBase, behaviors, sceneGraph } from '@grafana/scenes';\nimport { TimeZone } from '@grafana/schema';\nimport {\n Box,\n CollapsableSection,\n Field,\n Input,\n Label,\n RadioButtonGroup,\n Stack,\n Switch,\n TagsInput,\n TextArea,\n WeekStart,\n} from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\nimport { TimePickerSettings } from 'app/features/dashboard/components/DashboardSettings/TimePickerSettings';\nimport { GenAIDashDescriptionButton } from 'app/features/dashboard/components/GenAI/GenAIDashDescriptionButton';\nimport { GenAIDashTitleButton } from 'app/features/dashboard/components/GenAI/GenAIDashTitleButton';\nimport { MoveProvisionedDashboardDrawer } from 'app/features/provisioning/components/Dashboards/MoveProvisionedDashboardDrawer';\nimport { ProvisioningAwareFolderPicker } from 'app/features/provisioning/components/Shared/ProvisioningAwareFolderPicker';\n\nimport { updateNavModel } from '../pages/utils';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { DeleteDashboardButton } from './DeleteDashboardButton';\nimport { DashboardEditView, DashboardEditViewState, useDashboardEditPageNav } from './utils';\n\nexport interface GeneralSettingsEditViewState extends DashboardEditViewState {\n showMoveModal?: boolean;\n moveModalProps?: {\n targetFolderUID?: string;\n targetFolderTitle?: string;\n };\n}\n\nexport class GeneralSettingsEditView\n extends SceneObjectBase<GeneralSettingsEditViewState>\n implements DashboardEditView\n{\n private get _dashboard(): DashboardScene {\n return getDashboardSceneFor(this);\n }\n\n public getUrlKey(): string {\n return 'settings';\n }\n\n public getDashboard(): DashboardScene {\n return this._dashboard;\n }\n\n public getTimeRange() {\n return sceneGraph.getTimeRange(this._dashboard);\n }\n\n public getRefreshPicker() {\n return this.getDashboardControls().state.refreshPicker;\n }\n\n public getCursorSync() {\n return dashboardSceneGraph.getCursorSync(this._dashboard);\n }\n\n public getLiveNowTimer(): behaviors.LiveNowTimer {\n const liveNowTimer = sceneGraph.findObject(this._dashboard, (s) => s instanceof behaviors.LiveNowTimer);\n if (liveNowTimer instanceof behaviors.LiveNowTimer) {\n return liveNowTimer;\n } else {\n throw new Error('LiveNowTimer could not be found');\n }\n }\n\n public getDashboardControls() {\n return this._dashboard.state.controls!;\n }\n\n public onTitleChange = (value: string) => {\n this._dashboard.setState({ title: value });\n };\n\n public onDescriptionChange = (value: string) => {\n this._dashboard.setState({ description: value });\n };\n\n public onTagsChange = (value: string[]) => {\n this._dashboard.setState({ tags: value });\n };\n\n public onFolderChange = async (newUID: string | undefined, newTitle: string | undefined) => {\n const newMeta = {\n ...this._dashboard.state.meta,\n folderUid: newUID || this._dashboard.state.meta.folderUid,\n folderTitle: newTitle || this._dashboard.state.meta.folderTitle,\n };\n\n if (newMeta.folderUid) {\n await updateNavModel(newMeta.folderUid);\n }\n\n this._dashboard.setState({ meta: newMeta });\n };\n\n public onEditableChange = (value: boolean) => {\n this._dashboard.setState({ editable: value });\n };\n\n public onTimeZoneChange = (value: TimeZone) => {\n this.getTimeRange().setState({\n timeZone: value,\n });\n };\n\n public onWeekStartChange = (value?: WeekStart) => {\n this.getTimeRange().setState({ weekStart: value });\n };\n\n public onRefreshIntervalChange = (value: string[]) => {\n const control = this.getRefreshPicker();\n control?.setState({\n intervals: value,\n });\n };\n\n public onNowDelayChange = (value: string) => {\n const timeRange = this.getTimeRange();\n\n timeRange?.setState({\n UNSAFE_nowDelay: value,\n });\n };\n\n public onHideTimePickerChange = (value: boolean) => {\n this.getDashboardControls()?.setState({\n hideTimeControls: value,\n });\n };\n\n public onLiveNowChange = (enable: boolean) => {\n try {\n const liveNow = this.getLiveNowTimer();\n enable ? liveNow.enable() : liveNow.disable();\n } catch (err) {\n console.error(err);\n }\n };\n\n public onTooltipChange = (value: number) => {\n this.getCursorSync()?.setState({ sync: value });\n };\n\n public onPreloadChange = (preload: boolean) => {\n this._dashboard.setState({ preload });\n };\n\n public onDeleteDashboard = () => {};\n\n public onProvisionedFolderChange = async (newUID?: string, newTitle?: string) => {\n if (newUID !== this._dashboard.state.meta.folderUid) {\n this.setState({\n showMoveModal: true,\n moveModalProps: {\n targetFolderUID: newUID,\n targetFolderTitle: newTitle,\n },\n });\n }\n };\n\n public onMoveModalDismiss = () => {\n this.setState({\n showMoveModal: false,\n moveModalProps: undefined,\n });\n };\n\n public onMoveSuccess = (folderUID: string, folderTitle: string) => {\n const newMeta = {\n ...this._dashboard.state.meta,\n folderUid: folderUID,\n folderTitle: folderTitle,\n };\n this._dashboard.setState({ meta: newMeta });\n this.onMoveModalDismiss();\n };\n\n static Component = GeneralSettingsEditViewComponent;\n}\n\nfunction GeneralSettingsEditViewComponent({ model }: SceneComponentProps<GeneralSettingsEditView>) {\n const dashboard = model.getDashboard();\n const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());\n const { title, description, tags, meta, editable } = dashboard.useState();\n const { showMoveModal, moveModalProps } = model.useState();\n const { sync: graphTooltip } = model.getCursorSync()?.useState() || {};\n const { timeZone, weekStart, UNSAFE_nowDelay: nowDelay } = model.getTimeRange().useState();\n const { intervals } = model.getRefreshPicker().useState();\n const { hideTimeControls } = model.getDashboardControls().useState();\n const { enabled: liveNow } = model.getLiveNowTimer().useState();\n const EDITABLE_OPTIONS = [\n {\n label: t('dashboard-scene.general-settings-edit-view.editable_options.label.editable', 'Editable'),\n value: true,\n },\n {\n label: t('dashboard-scene.general-settings-edit-view.editable_options.label.readonly', 'Read-only'),\n value: false,\n },\n ];\n\n const GRAPH_TOOLTIP_OPTIONS = [\n {\n value: 0,\n label: t('dashboard-scene.general-settings-edit-view.graph_tooltip_options.label.default', 'Default'),\n },\n {\n value: 1,\n label: t(\n 'dashboard-scene.general-settings-edit-view.graph_tooltip_options.label.shared-crosshair',\n 'Shared crosshair'\n ),\n },\n {\n value: 2,\n label: t(\n 'dashboard-scene.general-settings-edit-view.graph_tooltip_options.label.shared-tooltip',\n 'Shared tooltip'\n ),\n },\n ];\n\n return (\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <div style={{ maxWidth: '600px' }}>\n <Box display=\"flex\" direction=\"column\" gap={2} marginBottom={5}>\n <Field\n noMargin\n label={\n <Stack justifyContent=\"space-between\">\n <Label htmlFor=\"title-input\">\n <Trans i18nKey=\"dashboard-settings.general.title-label\">Title</Trans>\n </Label>\n {config.featureToggles.dashgpt && (\n <GenAIDashTitleButton onGenerate={(title) => model.onTitleChange(title)} />\n )}\n </Stack>\n }\n >\n <Input\n id=\"title-input\"\n name=\"title\"\n value={title}\n onChange={(e: ChangeEvent<HTMLInputElement>) => model.onTitleChange(e.target.value)}\n />\n </Field>\n <Field\n noMargin\n label={\n <Stack justifyContent=\"space-between\">\n <Label htmlFor=\"description-input\">\n {t('dashboard-settings.general.description-label', 'Description')}\n </Label>\n {config.featureToggles.dashgpt && (\n <GenAIDashDescriptionButton onGenerate={(description) => model.onDescriptionChange(description)} />\n )}\n </Stack>\n }\n >\n <TextArea\n id=\"description-input\"\n name=\"description\"\n value={description}\n onChange={(e: ChangeEvent<HTMLTextAreaElement>) => model.onDescriptionChange(e.target.value)}\n />\n </Field>\n <Field noMargin label={t('dashboard-settings.general.tags-label', 'Tags')}>\n <TagsInput id=\"tags-input\" tags={tags} onChange={model.onTagsChange} width={40} />\n </Field>\n <Field noMargin label={t('dashboard-settings.general.folder-label', 'Folder')}>\n <ProvisioningAwareFolderPicker\n value={meta.folderUid}\n onChange={dashboard.isManagedRepository() ? model.onProvisionedFolderChange : model.onFolderChange}\n repositoryName={dashboard.getManagerIdentity()}\n excludeUIDs={meta?.folderUid ? [meta.folderUid] : undefined}\n />\n </Field>\n\n <Field\n noMargin\n label={t('dashboard-settings.general.editable-label', 'Editable')}\n description={t(\n 'dashboard-settings.general.editable-description',\n 'Set to read-only to disable all editing. Reload the dashboard for changes to take effect'\n )}\n >\n <RadioButtonGroup value={editable} options={EDITABLE_OPTIONS} onChange={model.onEditableChange} />\n </Field>\n </Box>\n\n <TimePickerSettings\n onTimeZoneChange={model.onTimeZoneChange}\n onWeekStartChange={model.onWeekStartChange}\n onRefreshIntervalChange={model.onRefreshIntervalChange}\n onNowDelayChange={model.onNowDelayChange}\n onHideTimePickerChange={model.onHideTimePickerChange}\n onLiveNowChange={model.onLiveNowChange}\n refreshIntervals={intervals}\n timePickerHidden={hideTimeControls}\n nowDelay={nowDelay || ''}\n liveNow={liveNow}\n timezone={timeZone || ''}\n weekStart={weekStart}\n />\n\n {/* @todo: Update \"Graph tooltip\" description to remove prompt about reloading when resolving #46581 */}\n <CollapsableSection label={t('dashboard-settings.general.panel-options-label', 'Panel options')} isOpen={true}>\n <Stack direction=\"column\" gap={2}>\n <Field\n noMargin\n label={t('dashboard-settings.general.panel-options-graph-tooltip-label', 'Graph tooltip')}\n description={t(\n 'dashboard-settings.general.panel-options-graph-tooltip-description',\n 'Controls tooltip and hover highlight behavior across different panels. Reload the dashboard for changes to take effect'\n )}\n >\n <RadioButtonGroup onChange={model.onTooltipChange} options={GRAPH_TOOLTIP_OPTIONS} value={graphTooltip} />\n </Field>\n\n <Field\n noMargin\n label={t('dashboard-settings.general.panels-preload-label', 'Preload panels')}\n description={t(\n 'dashboard-settings.general.panels-preload-description',\n 'When enabled all panels will start loading as soon as the dashboard has been loaded.'\n )}\n >\n <Switch\n id=\"preload-panels-dashboards-toggle\"\n value={dashboard.state.preload}\n onChange={(e) => model.onPreloadChange(e.currentTarget.checked)}\n />\n </Field>\n </Stack>\n </CollapsableSection>\n\n <Box marginTop={3}>{meta.canDelete && <DeleteDashboardButton dashboard={dashboard} />}</Box>\n </div>\n\n {showMoveModal && moveModalProps && (\n <MoveProvisionedDashboardDrawer\n dashboard={dashboard}\n targetFolderUID={moveModalProps.targetFolderUID}\n targetFolderTitle={moveModalProps.targetFolderTitle}\n onDismiss={model.onMoveModalDismiss}\n onSuccess={model.onMoveSuccess}\n />\n )}\n </Page>\n );\n}\n","import { css } from '@emotion/css';\nimport { useState } from 'react';\n\nimport { GrafanaTheme2, PageLayoutType } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneComponentProps, SceneObjectBase, sceneUtils } from '@grafana/scenes';\nimport { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { Alert, Box, Button, CodeEditor, Stack, useStyles2 } from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\nimport { getDashboardAPI } from 'app/features/dashboard/api/dashboard_api';\nimport { isDashboardV2Spec } from 'app/features/dashboard/api/utils';\nimport { getPrettyJSON } from 'app/features/inspector/utils/utils';\nimport { DashboardDataDTO, SaveDashboardResponseDTO } from 'app/types/dashboard';\n\nimport {\n NameAlreadyExistsError,\n isNameExistsError,\n isPluginDashboardError,\n isVersionMismatchError,\n} from '../saving/shared';\nimport { useSaveDashboard } from '../saving/useSaveDashboard';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { transformSaveModelSchemaV2ToScene } from '../serialization/transformSaveModelSchemaV2ToScene';\nimport { transformSaveModelToScene } from '../serialization/transformSaveModelToScene';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { DashboardEditView, DashboardEditViewState, useDashboardEditPageNav } from './utils';\n\nexport interface JsonModelEditViewState extends DashboardEditViewState {\n jsonText: string;\n}\n\nexport class JsonModelEditView extends SceneObjectBase<JsonModelEditViewState> implements DashboardEditView {\n constructor(state: Omit<JsonModelEditViewState, 'jsonText' | 'initialJsonText'>) {\n super({\n ...state,\n jsonText: '',\n });\n\n this.addActivationHandler(() => this.setState({ jsonText: this.getJsonText() }));\n }\n public getUrlKey(): string {\n return 'json-model';\n }\n\n public getDashboard(): DashboardScene {\n return getDashboardSceneFor(this);\n }\n\n public getSaveModel(): Dashboard | DashboardV2Spec {\n return this.getDashboard().getSaveModel();\n }\n\n public getJsonText(): string {\n const jsonData = this.getSaveModel();\n return getPrettyJSON(jsonData);\n }\n\n public onCodeEditorBlur = (value: string) => {\n this.setState({ jsonText: value });\n };\n\n public onSaveSuccess = async (result: SaveDashboardResponseDTO) => {\n const jsonModel: DashboardDataDTO | DashboardV2Spec = JSON.parse(this.state.jsonText);\n const dashboard = this.getDashboard();\n\n const isV2 = isDashboardV2Spec(jsonModel);\n let newDashboardScene: DashboardScene;\n\n if (isV2) {\n // FIXME: We could avoid this call by storing the entire dashboard DTO as initial dashboard scene instead of only the spec and metadata\n const dto = await getDashboardAPI('v2').getDashboardDTO(result.uid);\n newDashboardScene = transformSaveModelSchemaV2ToScene(dto);\n const newState = sceneUtils.cloneSceneObjectState(newDashboardScene.state, { key: dashboard.state.key });\n\n dashboard.pauseTrackingChanges();\n dashboard.setInitialSaveModel(dto.spec, dto.metadata);\n dashboard.setState(newState);\n } else {\n jsonModel.version = result.version;\n newDashboardScene = transformSaveModelToScene({\n dashboard: jsonModel,\n meta: dashboard.state.meta,\n });\n const newState = sceneUtils.cloneSceneObjectState(newDashboardScene.state, { key: dashboard.state.key });\n\n dashboard.pauseTrackingChanges();\n dashboard.setInitialSaveModel(jsonModel, dashboard.state.meta);\n dashboard.setState(newState);\n }\n\n this.setState({ jsonText: this.getJsonText() });\n\n // We also need to resume tracking changes since the change handler won't see any later edit\n dashboard.resumeTrackingChanges();\n };\n\n static Component = JsonModelEditViewComponent;\n}\n\nfunction JsonModelEditViewComponent({ model }: SceneComponentProps<JsonModelEditView>) {\n const { state, onSaveDashboard } = useSaveDashboard(false);\n const [isSaving, setIsSaving] = useState(false);\n\n const dashboard = model.getDashboard();\n\n const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());\n const canSave = dashboard.useState().meta.canSave;\n const { jsonText } = model.useState();\n\n const onSave = async (overwrite: boolean) => {\n const result = await onSaveDashboard(dashboard, {\n folderUid: dashboard.state.meta.folderUid,\n overwrite,\n rawDashboardJSON: JSON.parse(model.state.jsonText),\n k8s: dashboard.state.meta.k8s,\n });\n\n setIsSaving(true);\n if (result.status === 'success') {\n await model.onSaveSuccess(result);\n setIsSaving(false);\n } else {\n setIsSaving(true);\n }\n };\n\n const saveButton = (overwrite: boolean) => (\n <Button\n type=\"submit\"\n onClick={() => {\n onSave(overwrite);\n }}\n variant={overwrite ? 'destructive' : 'primary'}\n >\n {overwrite ? (\n <Trans i18nKey=\"dashboard-scene.json-model-edit-view.save-and-overwrite\">'Save and overwrite'</Trans>\n ) : (\n <Trans i18nKey=\"dashboard-settings.json-editor.save-button\">Save changes</Trans>\n )}\n </Button>\n );\n\n const cancelButton = (\n <Button variant=\"secondary\" onClick={() => setIsSaving(false)} fill=\"outline\">\n <Trans i18nKey=\"dashboard-scene.json-model-edit-view.cancel-button.cancel\">Cancel</Trans>\n </Button>\n );\n const styles = useStyles2(getStyles);\n\n function renderSaveButtonAndError(error?: Error) {\n if (error && isSaving) {\n if (isVersionMismatchError(error)) {\n return (\n <Alert\n title={t(\n 'dashboard-scene.json-model-edit-view.render-save-button-and-error.title-someone-else-has-updated-this-dashboard',\n 'Someone else has updated this dashboard'\n )}\n severity=\"error\"\n >\n <p>\n <Trans i18nKey=\"dashboard-scene.json-model-edit-view.render-save-button-and-error.would-still-dashboard\">\n Would you still like to save this dashboard?\n </Trans>\n </p>\n <Box paddingTop={2}>\n <Stack alignItems=\"center\">\n {cancelButton}\n {saveButton(true)}\n </Stack>\n </Box>\n </Alert>\n );\n }\n\n if (isNameExistsError(error)) {\n return <NameAlreadyExistsError saveButton={saveButton} cancelButton={cancelButton} />;\n }\n\n if (isPluginDashboardError(error)) {\n return (\n <Alert\n title={t(\n 'dashboard-scene.json-model-edit-view.render-save-button-and-error.title-plugin-dashboard',\n 'Plugin dashboard'\n )}\n severity=\"error\"\n >\n <p>\n <Trans i18nKey=\"dashboard-scene.json-model-edit-view.render-save-button-and-error.body-plugin-dashboard\">\n Your changes will be lost when you update the plugin. Use <strong>Save as</strong> to create custom\n version.\n </Trans>\n </p>\n <Box paddingTop={2}>\n <Stack alignItems=\"center\">{saveButton(true)}</Stack>\n </Box>\n </Alert>\n );\n }\n }\n\n return (\n <>\n {error && isSaving && (\n <Alert\n title={t(\n 'dashboard-scene.json-model-edit-view.render-save-button-and-error.title-failed-to-save-dashboard',\n 'Failed to save dashboard'\n )}\n severity=\"error\"\n >\n <p>{error.message}</p>\n </Alert>\n )}\n <Stack alignItems=\"center\">{saveButton(false)}</Stack>\n </>\n );\n }\n return (\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <div className={styles.wrapper}>\n <Trans i18nKey=\"dashboard-settings.json-editor.subtitle\">\n The JSON model below is the data structure that defines the dashboard. This includes dashboard settings, panel\n settings, layout, queries, and so on.\n </Trans>\n <CodeEditor\n width=\"100%\"\n value={jsonText}\n language=\"json\"\n showLineNumbers={true}\n showMiniMap={true}\n containerStyles={styles.codeEditor}\n onBlur={model.onCodeEditorBlur}\n />\n {canSave && <Box paddingTop={2}>{renderSaveButtonAndError(state.error)}</Box>}\n </div>\n </Page>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n height: '100%',\n flexDirection: 'column',\n gap: theme.spacing(2),\n }),\n codeEditor: css({\n flexGrow: 1,\n }),\n});\n","import { PageLayoutType } from '@grafana/data';\nimport { SceneComponentProps, SceneObjectBase } from '@grafana/scenes';\nimport { Permissions } from 'app/core/components/AccessControl/Permissions';\nimport { Page } from 'app/core/components/Page/Page';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { DashboardEditView, DashboardEditViewState, useDashboardEditPageNav } from './utils';\n\ninterface PermissionsEditViewState extends DashboardEditViewState {}\n\nexport class PermissionsEditView extends SceneObjectBase<PermissionsEditViewState> implements DashboardEditView {\n public static Component = PermissionsEditorSettings;\n\n private get _dashboard(): DashboardScene {\n return getDashboardSceneFor(this);\n }\n\n public getUrlKey(): string {\n return 'permissions';\n }\n\n public getDashboard(): DashboardScene {\n return this._dashboard;\n }\n}\n\nfunction PermissionsEditorSettings({ model }: SceneComponentProps<PermissionsEditView>) {\n const dashboard = model.getDashboard();\n const { uid } = dashboard.useState();\n const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());\n const canSetPermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPermissionsWrite);\n\n return (\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <Permissions resource={'dashboards'} resourceId={uid ?? ''} canSetPermissions={canSetPermissions} />\n </Page>\n );\n}\n","import { t } from '@grafana/i18n';\nimport { SceneVariable, SceneVariableState } from '@grafana/scenes';\nimport { Dashboard } from '@grafana/schema/dist/esm/index.gen';\nimport { safeStringifyValue } from 'app/core/utils/explore';\nimport { GraphEdge, GraphNode, getPropsWithVariable } from 'app/features/variables/inspect/utils';\n\nexport const variableRegex = /\\$(\\w+)|\\[\\[(\\w+?)(?::(\\w+))?\\]\\]|\\${(\\w+)(?:\\.([^:^\\}]+))?(?::([^\\}]+))?}/g;\n\nexport function createDependencyNodes(variables: Array<SceneVariable<SceneVariableState>>): GraphNode[] {\n return variables.map((variable) => ({ id: variable.state.name, label: `${variable.state.name}` }));\n}\n\nexport function filterNodesWithDependencies(nodes: GraphNode[], edges: GraphEdge[]): GraphNode[] {\n return nodes.filter((node) => edges.some((edge) => edge.from === node.id || edge.to === node.id));\n}\n\nexport const createDependencyEdges = (variables: Array<SceneVariable<SceneVariableState>>): GraphEdge[] => {\n const edges: GraphEdge[] = [];\n for (const variable of variables) {\n for (const other of variables) {\n if (variable === other) {\n continue;\n }\n\n const dependsOn = variable.variableDependency?.hasDependencyOn(other.state.name);\n if (dependsOn) {\n edges.push({ from: variable.state.name, to: other.state.name });\n }\n }\n }\n\n return edges;\n};\n\nexport interface VariableUsageTree {\n variable: SceneVariable<SceneVariableState>;\n tree: unknown;\n}\n\nexport interface UsagesToNetwork {\n /** string when unknown/missing variable otherwise SceneVariable */\n variable: string | SceneVariable<SceneVariableState>;\n nodes: GraphNode[];\n edges: GraphEdge[];\n showGraph: boolean;\n}\n\nexport function createUsagesNetwork(variables: Array<SceneVariable<SceneVariableState>>, dashboard: Dashboard) {\n if (!dashboard) {\n return [];\n }\n\n let usages: VariableUsageTree[] = [];\n\n for (const variable of variables) {\n const variableId = variable.state.name;\n const props = getPropsWithVariable(variableId, { key: 'model', value: dashboard }, {});\n\n if (Object.keys(props).length) {\n usages.push({ variable, tree: props });\n }\n }\n\n return usages;\n}\n\nexport function transformUsagesToNetwork(\n usages: Array<VariableUsageTree | UnknownVariableUsageTree>\n): UsagesToNetwork[] {\n const results: UsagesToNetwork[] = [];\n\n for (const usage of usages) {\n const { variable, tree } = usage;\n const result: UsagesToNetwork = {\n variable,\n nodes: [\n {\n id: 'dashboard',\n label: t('dashboard-scene.transform-usages-to-network.result.label.dashboard', 'dashboard'),\n },\n ],\n edges: [],\n showGraph: false,\n };\n results.push(traverseTree(result, { id: 'dashboard', value: tree }));\n }\n\n return results;\n}\n\nexport const traverseTree = (usage: UsagesToNetwork, parent: { id: string; value: unknown }): UsagesToNetwork => {\n const { id, value } = parent;\n const { nodes, edges } = usage;\n\n if (value && typeof value === 'string') {\n const leafId = `${parent.id}-${value}`;\n nodes.push({ id: leafId, label: value });\n edges.push({ from: leafId, to: id });\n\n return usage;\n }\n\n if (isRecord(value)) {\n const keys = Object.keys(value);\n for (const key of keys) {\n const leafId = `${parent.id}-${key}`;\n nodes.push({ id: leafId, label: key });\n edges.push({ from: leafId, to: id });\n usage = traverseTree(usage, { id: leafId, value: value[key] });\n }\n\n return usage;\n }\n\n return usage;\n};\n\nexport const getVariableUsages = (variableId: string, usages: VariableUsageTree[]): number => {\n const usage = usages.find((usage) => usage.variable.state.name === variableId);\n if (!usage) {\n return 0;\n }\n\n if (isRecord(usage.tree)) {\n return countLeaves(usage.tree);\n }\n\n return 0;\n};\n\nconst countLeaves = (object: object): number => {\n const total = Object.values(object).reduce<number>((count, value) => {\n if (typeof value === 'object') {\n return count + countLeaves(value);\n }\n\n return count + 1;\n }, 0);\n\n return total;\n};\n\nexport async function getUnknownsNetwork(\n variables: Array<SceneVariable<SceneVariableState>>,\n dashboard: Dashboard | null\n): Promise<UsagesToNetwork[]> {\n return new Promise((resolve, reject) => {\n // can be an expensive call so we avoid blocking the main thread\n setTimeout(() => {\n try {\n const unknowns = createUnknownsNetwork(variables, dashboard);\n resolve(transformUsagesToNetwork(unknowns));\n } catch (e) {\n reject(e);\n }\n }, 200);\n });\n}\n\ntype UnknownVariableUsageTree = {\n variable: string;\n tree: unknown;\n};\n\nfunction createUnknownsNetwork(\n variables: Array<SceneVariable<SceneVariableState>>,\n dashboard: Dashboard | null\n): UnknownVariableUsageTree[] {\n if (!dashboard) {\n return [];\n }\n\n let unknown: UnknownVariableUsageTree[] = [];\n const unknownVariables = getUnknownVariableStrings(variables, dashboard);\n for (const unknownVariable of unknownVariables) {\n const props = getPropsWithVariable(unknownVariable, { key: 'model', value: dashboard }, {});\n if (Object.keys(props).length) {\n unknown.push({ variable: unknownVariable, tree: props });\n }\n }\n\n return unknown;\n}\n\nexport const getUnknownVariableStrings = (variables: Array<SceneVariable<SceneVariableState>>, model: Dashboard) => {\n variableRegex.lastIndex = 0;\n const unknownVariableNames: string[] = [];\n const modelAsString = safeStringifyValue(model, 2);\n const matches = modelAsString.match(variableRegex);\n\n if (!matches) {\n return unknownVariableNames;\n }\n\n for (const match of matches) {\n if (!match) {\n continue;\n }\n\n if (match.indexOf('$__') !== -1) {\n // ignore builtin variables\n continue;\n }\n\n if (match.indexOf('${__') !== -1) {\n // ignore builtin variables\n continue;\n }\n\n if (match.indexOf('$hashKey') !== -1) {\n // ignore Angular props\n continue;\n }\n\n const variableName = getVariableName(match);\n\n if (variables.some((variable) => variable.state.name === variableName)) {\n // ignore defined variables\n continue;\n }\n\n if (unknownVariableNames.find((name) => name === variableName)) {\n continue;\n }\n\n if (variableName) {\n unknownVariableNames.push(variableName);\n }\n }\n\n return unknownVariableNames;\n};\n\nexport function getVariableName(expression: string) {\n const match = variableRegexExec(expression);\n if (!match) {\n return undefined;\n }\n const variableName = match.slice(1).find((match) => match !== undefined);\n\n // ignore variables that match inherited object prop names\n if (variableName! in {}) {\n return undefined;\n }\n\n return variableName;\n}\n\n// Helper function since lastIndex is not reset\nexport const variableRegexExec = (variableString: string) => {\n variableRegex.lastIndex = 0;\n return variableRegex.exec(variableString);\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport { SelectableValue, VariableType } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { VariableSelectField } from 'app/features/dashboard-scene/settings/variables/components/VariableSelectField';\n\nimport { EditableVariableType, getVariableTypeSelectOptions } from '../utils';\n\ninterface Props {\n onChange: (option: SelectableValue<EditableVariableType>) => void;\n type: VariableType;\n}\n\nexport function VariableTypeSelect({ onChange, type }: PropsWithChildren<Props>) {\n const options = useMemo(() => getVariableTypeSelectOptions(), []);\n const value = useMemo(\n () => options.find((o: SelectableValue<EditableVariableType>) => o.value === type) ?? options[0],\n [options, type]\n );\n\n return (\n <VariableSelectField\n name={t('dashboard-scene.variable-type-select.name-variable-type', 'Variable type')}\n value={value}\n options={options}\n onChange={onChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.generalTypeSelectV2}\n />\n );\n}\n","import { css } from '@emotion/css';\nimport { FormEvent, useCallback, useState } from 'react';\nimport { useAsyncFn } from 'react-use';\nimport { lastValueFrom } from 'rxjs';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { SceneVariable } from '@grafana/scenes';\nimport { VariableHide, defaultVariableModel } from '@grafana/schema';\nimport { Button, LoadingPlaceholder, ConfirmModal, ModalsController, Stack, useStyles2 } from '@grafana/ui';\nimport { VariableHideSelect } from 'app/features/dashboard-scene/settings/variables/components/VariableHideSelect';\nimport { VariableLegend } from 'app/features/dashboard-scene/settings/variables/components/VariableLegend';\nimport { VariableTextAreaField } from 'app/features/dashboard-scene/settings/variables/components/VariableTextAreaField';\nimport { VariableTextField } from 'app/features/dashboard-scene/settings/variables/components/VariableTextField';\nimport { VariableValuesPreview } from 'app/features/dashboard-scene/settings/variables/components/VariableValuesPreview';\nimport { VariableNameConstraints } from 'app/features/variables/editor/types';\n\nimport { VariableTypeSelect } from './components/VariableTypeSelect';\nimport {\n EditableVariableType,\n getVariableEditor,\n hasVariableOptions,\n isEditableVariableType,\n validateVariableName,\n} from './utils';\n\ninterface VariableEditorFormProps {\n variable: SceneVariable;\n onTypeChange: (type: EditableVariableType) => void;\n onGoBack: () => void;\n onDelete: (variableName: string) => void;\n}\nexport function VariableEditorForm({ variable, onTypeChange, onGoBack, onDelete }: VariableEditorFormProps) {\n const styles = useStyles2(getStyles);\n const [nameError, setNameError] = useState<string>();\n const { name, type, label, description, hide } = variable.useState();\n const EditorToRender = isEditableVariableType(type) ? getVariableEditor(type) : undefined;\n const [runQueryState, onRunQuery] = useAsyncFn(async () => {\n await lastValueFrom(variable.validateAndUpdate!());\n }, [variable]);\n const onVariableTypeChange = (option: SelectableValue<EditableVariableType>) => {\n if (option.value) {\n onTypeChange(option.value);\n }\n };\n\n const onNameChange = useCallback(\n (e: FormEvent<HTMLInputElement>) => {\n const result = validateVariableName(variable, e.currentTarget.value);\n if (result.errorMessage !== nameError) {\n setNameError(result.errorMessage);\n }\n },\n [variable, nameError]\n );\n\n const onNameBlur = (e: FormEvent<HTMLInputElement>) => {\n if (!nameError) {\n variable.setState({ name: e.currentTarget.value });\n }\n };\n\n const onLabelBlur = (e: FormEvent<HTMLInputElement>) => variable.setState({ label: e.currentTarget.value });\n const onDescriptionBlur = (e: FormEvent<HTMLTextAreaElement>) =>\n variable.setState({ description: e.currentTarget.value });\n const onHideChange = (hide: VariableHide) => variable.setState({ hide });\n\n const isHasVariableOptions = hasVariableOptions(variable);\n\n const onDeleteVariable = (hideModal: () => void) => () => {\n reportInteraction('Delete variable');\n onDelete(name);\n hideModal();\n };\n\n return (\n <form\n aria-label={t('dashboard-scene.variable-editor-form.aria-label-variable-editor-form', 'Variable editor form')}\n >\n <VariableTypeSelect onChange={onVariableTypeChange} type={type} />\n\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.variable-editor-form.general\">General</Trans>\n </VariableLegend>\n <VariableTextField\n name={t('dashboard-scene.variable-editor-form.name-name', 'Name')}\n description={t(\n 'dashboard-scene.variable-editor-form.description-template-variable-characters',\n 'The name of the template variable. (Max. 50 characters)'\n )}\n placeholder={t('dashboard-scene.variable-editor-form.placeholder-variable-name', 'Variable name')}\n defaultValue={name ?? ''}\n onChange={onNameChange}\n onBlur={onNameBlur}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.generalNameInputV2}\n maxLength={VariableNameConstraints.MaxSize}\n required\n invalid={!!nameError}\n error={nameError}\n />\n <VariableTextField\n name={t('dashboard-scene.variable-editor-form.name-label', 'Label')}\n description={t(\n 'dashboard-scene.variable-editor-form.description-optional-display-name',\n 'Optional display name'\n )}\n placeholder={t('dashboard-scene.variable-editor-form.placeholder-label-name', 'Label name')}\n defaultValue={label ?? ''}\n onBlur={onLabelBlur}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.generalLabelInputV2}\n />\n <VariableTextAreaField\n name={t('dashboard-scene.variable-editor-form.name-description', 'Description')}\n defaultValue={description ?? ''}\n placeholder={t('dashboard-scene.variable-editor-form.placeholder-descriptive-text', 'Descriptive text')}\n onBlur={onDescriptionBlur}\n width={52}\n />\n\n <VariableHideSelect onChange={onHideChange} hide={hide || defaultVariableModel.hide!} type={type} />\n\n {EditorToRender && <EditorToRender variable={variable} onRunQuery={onRunQuery} />}\n\n {isHasVariableOptions && <VariableValuesPreview options={variable.getOptionsForSelect(false)} />}\n\n <div className={styles.buttonContainer}>\n <Stack gap={2}>\n <ModalsController>\n {({ showModal, hideModal }) => (\n <Button\n variant=\"destructive\"\n fill=\"outline\"\n onClick={() => {\n showModal(ConfirmModal, {\n title: t('dashboard-scene.variable-editor-form.title.delete-variable', 'Delete variable'),\n body: `Are you sure you want to delete: ${name}?`,\n confirmText: t(\n 'dashboard-scene.variable-editor-form.confirmText.delete-variable',\n 'Delete variable'\n ),\n onConfirm: onDeleteVariable(hideModal),\n onDismiss: hideModal,\n isOpen: true,\n });\n }}\n >\n <Trans i18nKey=\"dashboard-scene.variable-editor-form.delete\">Delete</Trans>\n </Button>\n )}\n </ModalsController>\n <Button\n variant=\"secondary\"\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.General.applyButton}\n onClick={onGoBack}\n >\n <Trans i18nKey=\"dashboard-scene.variable-editor-form.back-to-list\">Back to list</Trans>\n </Button>\n\n {isHasVariableOptions && (\n <Button\n disabled={runQueryState.loading}\n variant=\"secondary\"\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.General.submitButton}\n onClick={onRunQuery}\n >\n {runQueryState.loading ? (\n <LoadingPlaceholder\n className={styles.loadingPlaceHolder}\n text={t('dashboard-scene.variable-editor-form.text-running-query', 'Running query...')}\n />\n ) : (\n t('dashbaord-scene.variable-editor-form.run-query', 'Run query')\n )}\n </Button>\n )}\n </Stack>\n </div>\n </form>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n buttonContainer: css({\n marginTop: theme.spacing(2),\n }),\n loadingPlaceHolder: css({\n marginBottom: 0,\n }),\n});\n","import { useMemo } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { SceneVariable, SceneVariableState } from '@grafana/scenes';\nimport { Button } from '@grafana/ui';\nimport { NetworkGraphModal } from 'app/features/variables/inspect/NetworkGraphModal';\n\nimport { createDependencyEdges, createDependencyNodes, filterNodesWithDependencies } from './utils';\n\ninterface Props {\n variables: Array<SceneVariable<SceneVariableState>>;\n}\n\nexport const VariablesDependenciesButton = ({ variables }: Props) => {\n const nodes = useMemo(() => createDependencyNodes(variables), [variables]);\n const edges = useMemo(() => createDependencyEdges(variables), [variables]);\n\n if (!edges.length) {\n return null;\n }\n\n return (\n <NetworkGraphModal\n show={false}\n title={t('dashboards.settings.variables.dependencies.title', 'Dependencies')}\n nodes={filterNodesWithDependencies(nodes, edges)}\n edges={edges}\n >\n {({ showModal }) => {\n return (\n <Button\n onClick={() => {\n reportInteraction('Show variable dependencies');\n showModal();\n }}\n icon=\"channel-add\"\n variant=\"secondary\"\n >\n <Trans i18nKey={'dashboards.settings.variables.dependencies.button'}>Show dependencies</Trans>\n </Button>\n );\n }}\n </NetworkGraphModal>\n );\n};\n","import { useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { IconButton } from '@grafana/ui';\nimport { NetworkGraphModal } from 'app/features/variables/inspect/NetworkGraphModal';\n\nimport { UsagesToNetwork } from './utils';\n\ninterface Props {\n id: string;\n usages: UsagesToNetwork[];\n isAdhoc: boolean;\n}\n\nexport const VariableUsagesButton = ({ id, usages, isAdhoc }: Props) => {\n const network = useMemo(\n () => usages.find((n) => (typeof n.variable === 'string' ? n.variable : n.variable.state.name) === id),\n [usages, id]\n );\n\n if (usages.length === 0 || isAdhoc || !network) {\n return null;\n }\n\n const nodes = network.nodes.map((n) => {\n if (n.label.includes(`$${id}`)) {\n return { ...n, color: '#FB7E81' };\n }\n return n;\n });\n\n return (\n <NetworkGraphModal\n show={false}\n title={t('dashboard-scene.variable-usages-button.title-show-usages', 'Showing usages for: {{variableId}}', {\n variableId: `$${id}`,\n })}\n nodes={nodes}\n edges={network.edges}\n >\n {({ showModal }) => {\n return (\n <IconButton\n onClick={() => {\n reportInteraction('Show variable usages');\n showModal();\n }}\n name=\"code-branch\"\n tooltip={t('dashboard-scene.variable-usages-button.tooltip-show-usages', 'Show usages')}\n />\n );\n }}\n </NetworkGraphModal>\n );\n};\n","import { css } from '@emotion/css';\nimport { Draggable } from '@hello-pangea/dnd';\nimport { ReactElement, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { SceneVariable } from '@grafana/scenes';\nimport { Button, ConfirmModal, Icon, IconButton, Tooltip, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { VariableUsagesButton } from '../../variables/VariableUsagesButton';\nimport { UsagesToNetwork, VariableUsageTree, getVariableUsages } from '../../variables/utils';\n\nimport { getDefinition } from './utils';\n\nexport interface VariableEditorListRowProps {\n index: number;\n variable: SceneVariable;\n usageTree: VariableUsageTree[];\n usagesNetwork: UsagesToNetwork[];\n onEdit: (identifier: string) => void;\n onDuplicate: (identifier: string) => void;\n onDelete: (identifier: string) => void;\n}\n\nexport function VariableEditorListRow({\n index,\n variable,\n usageTree,\n usagesNetwork,\n onEdit: propsOnEdit,\n onDuplicate: propsOnDuplicate,\n onDelete: propsOnDelete,\n}: VariableEditorListRowProps): ReactElement {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n const definition = getDefinition(variable);\n const variableState = variable.state;\n const identifier = variableState.name;\n const usages = getVariableUsages(identifier, usageTree);\n const passed = usages > 0 || variableState.type === 'adhoc';\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n const handleDeleteVariableModal = (show: boolean) => () => {\n setShowDeleteModal(show);\n };\n const onDeleteVariable = () => {\n reportInteraction('Delete variable');\n propsOnDelete(identifier);\n };\n\n return (\n <Draggable draggableId={JSON.stringify(identifier)} index={index}>\n {(provided, snapshot) => (\n <tr\n ref={provided.innerRef}\n {...provided.draggableProps}\n style={{\n userSelect: snapshot.isDragging ? 'none' : 'auto',\n background: snapshot.isDragging ? theme.colors.background.secondary : undefined,\n ...provided.draggableProps.style,\n }}\n >\n <td role=\"gridcell\" className={styles.column}>\n <Button\n size=\"xs\"\n fill=\"text\"\n onClick={(event) => {\n event.preventDefault();\n propsOnEdit(identifier);\n }}\n className={styles.nameLink}\n data-testid={selectors.pages.Dashboard.Settings.Variables.List.tableRowNameFields(variableState.name)}\n >\n {variableState.name}\n </Button>\n </td>\n <td\n role=\"gridcell\"\n className={styles.definitionColumn}\n onClick={(event) => {\n event.preventDefault();\n propsOnEdit(identifier);\n }}\n data-testid={selectors.pages.Dashboard.Settings.Variables.List.tableRowDefinitionFields(variableState.name)}\n >\n {definition}\n </td>\n\n <td role=\"gridcell\" className={styles.column}>\n <div className={styles.icons}>\n <VariableCheckIndicator passed={passed} />\n <VariableUsagesButton\n id={variableState.name}\n isAdhoc={variableState.type === 'adhoc'}\n usages={usagesNetwork}\n />\n <IconButton\n onClick={(event) => {\n event.preventDefault();\n reportInteraction('Duplicate variable');\n propsOnDuplicate(identifier);\n }}\n name=\"copy\"\n tooltip={t('dashboard-scene.variable-editor-list-row.tooltip-duplicate-variable', 'Duplicate variable')}\n data-testid={selectors.pages.Dashboard.Settings.Variables.List.tableRowDuplicateButtons(\n variableState.name\n )}\n />\n <IconButton\n onClick={(event) => {\n event.preventDefault();\n setShowDeleteModal(true);\n }}\n name=\"trash-alt\"\n tooltip={t('dashboard-scene.variable-editor-list-row.tooltip-remove-variable', 'Remove variable')}\n data-testid={selectors.pages.Dashboard.Settings.Variables.List.tableRowRemoveButtons(\n variableState.name\n )}\n />\n <ConfirmModal\n isOpen={showDeleteModal}\n title={t('dashboard-scene.variable-editor-list-row.title-delete-variable', 'Delete variable')}\n body={t(\n 'dashboard-scene.variable-editor-list-row.body-delete-variable',\n 'Are you sure you want to delete: {{variable}}?',\n { variable: variableState.name }\n )}\n confirmText={t(\n 'dashboard-scene.variable-editor-list-row.confirmText-delete-variable',\n 'Delete variable'\n )}\n onConfirm={onDeleteVariable}\n onDismiss={handleDeleteVariableModal(false)}\n />\n\n <div {...provided.dragHandleProps} className={styles.dragHandle}>\n <Icon name=\"draggabledots\" size=\"lg\" />\n </div>\n </div>\n </td>\n </tr>\n )}\n </Draggable>\n );\n}\n\ninterface VariableCheckIndicatorProps {\n passed: boolean;\n}\n\nfunction VariableCheckIndicator({ passed }: VariableCheckIndicatorProps): ReactElement {\n const styles = useStyles2(getStyles);\n\n if (passed) {\n return (\n <Tooltip\n content={t(\n 'dashboard-scene.variable-check-indicator.content-variable-referenced-other-variables-dashboard',\n 'This variable is referenced by other variables or dashboard.'\n )}\n >\n <Icon\n name=\"check\"\n className={styles.iconPassed}\n aria-label={t(\n 'dashboard-scene.variable-check-indicator.aria-label-variable-referenced-other-variables-dashboard',\n 'This variable is referenced by other variables or dashboard.'\n )}\n />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n content={t(\n 'dashboard-scene.variable-check-indicator.content-variable-not-referenced-other-variables-dashboard',\n 'This variable is not referenced by other variables or dashboard.'\n )}\n >\n <Icon\n name=\"exclamation-triangle\"\n className={styles.iconFailed}\n aria-label={t(\n 'dashboard-scene.variable-check-indicator.aria-label-variable-referenced-dashboard',\n 'This variable is not referenced by any variable or dashboard.'\n )}\n />\n </Tooltip>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n dragHandle: css({\n cursor: 'grab',\n marginLeft: theme.spacing(1),\n }),\n column: css({\n width: '1%',\n }),\n nameLink: css({\n cursor: 'pointer',\n color: theme.colors.primary.text,\n }),\n definitionColumn: css({\n width: '100%',\n maxWidth: '200px',\n cursor: 'pointer',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }),\n iconPassed: css({\n color: theme.v1.palette.greenBase,\n marginRight: theme.spacing(2),\n }),\n iconFailed: css({\n color: theme.v1.palette.orange,\n marginRight: theme.spacing(2),\n }),\n icons: css({\n display: 'flex',\n gap: theme.spacing(2),\n alignItems: 'center',\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport { DragDropContext, Droppable, DropResult } from '@hello-pangea/dnd';\nimport classNames from 'classnames';\nimport { ReactElement } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { SceneVariable, SceneVariableState } from '@grafana/scenes';\nimport { useStyles2, Stack, Button, EmptyState, TextLink } from '@grafana/ui';\n\nimport { isVariableEditable } from '../../serialization/sceneVariablesSetToVariables';\nimport { DashboardInteractions } from '../../utils/interactions';\nimport { VariablesDependenciesButton } from '../../variables/VariablesDependenciesButton';\nimport { UsagesToNetwork, VariableUsageTree } from '../../variables/utils';\n\nimport { VariableEditorListRow } from './VariableEditorListRow';\n\nexport interface Props {\n variables: Array<SceneVariable<SceneVariableState>>;\n usages: VariableUsageTree[];\n usagesNetwork: UsagesToNetwork[];\n onAdd: () => void;\n onChangeOrder: (fromIndex: number, toIndex: number) => void;\n onDuplicate: (identifier: string) => void;\n onDelete: (identifier: string) => void;\n onEdit: (identifier: string) => void;\n}\n\nexport function VariableEditorList({\n variables,\n usages,\n usagesNetwork,\n onChangeOrder,\n onDelete,\n onDuplicate,\n onAdd,\n onEdit,\n}: Props): ReactElement {\n const styles = useStyles2(getStyles);\n\n const onDragEnd = (result: DropResult) => {\n if (!result.destination || !result.source) {\n return;\n }\n\n reportInteraction('Variable drag and drop');\n onChangeOrder(result.source.index, result.destination.index);\n };\n\n const onVariableAdd = () => {\n onAdd();\n DashboardInteractions.addVariableButtonClicked({ source: 'settings_pane' });\n };\n\n const editableVariables = variables.filter(isVariableEditable);\n\n return editableVariables.length <= 0 ? (\n <EmptyVariablesList onAdd={onVariableAdd} />\n ) : (\n <Stack direction=\"column\" gap={3}>\n <table\n className={classNames('filter-table', 'filter-table--hover', styles.tableContainer)}\n data-testid={selectors.pages.Dashboard.Settings.Variables.List.table}\n role=\"grid\"\n >\n <thead>\n <tr>\n <th>\n <Trans i18nKey=\"dashboard-scene.variable-editor-list.variable\">Variable</Trans>\n </th>\n <th>\n <Trans i18nKey=\"dashboard-scene.variable-editor-list.definition\">Definition</Trans>\n </th>\n <th colSpan={5} />\n </tr>\n </thead>\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId=\"variables-list\" direction=\"vertical\">\n {(provided) => (\n <tbody ref={provided.innerRef} {...provided.droppableProps}>\n {variables.map((variableScene, index) => {\n if (!isVariableEditable(variableScene)) {\n return null;\n }\n\n const variableState = variableScene.state;\n return (\n <VariableEditorListRow\n index={index}\n key={`${variableState.name}-${index}`}\n variable={variableScene}\n onDelete={onDelete}\n onDuplicate={onDuplicate}\n onEdit={onEdit}\n usageTree={usages}\n usagesNetwork={usagesNetwork}\n />\n );\n })}\n {provided.placeholder}\n </tbody>\n )}\n </Droppable>\n </DragDropContext>\n </table>\n <Stack>\n <VariablesDependenciesButton variables={variables} />\n <Button\n data-testid={selectors.pages.Dashboard.Settings.Variables.List.newButton}\n onClick={onVariableAdd}\n icon=\"plus\"\n >\n <Trans i18nKey=\"dashboard-scene.variable-editor-list.new-variable\">New variable</Trans>\n </Button>\n </Stack>\n </Stack>\n );\n}\n\nfunction EmptyVariablesList({ onAdd }: { onAdd: () => void }) {\n return (\n <Stack direction=\"column\">\n <EmptyState\n variant=\"call-to-action\"\n button={\n <Button\n data-testid={selectors.components.CallToActionCard.buttonV2('Add variable')}\n icon=\"calculator-alt\"\n onClick={onAdd}\n size=\"lg\"\n >\n <Trans i18nKey=\"variables.empty-state.button-title\">Add variable</Trans>\n </Button>\n }\n message={t('variables.empty-state.title', 'There are no variables added yet')}\n >\n <p>\n <Trans i18nKey=\"variables.empty-state.info-box-content\">\n Variables enable more interactive and dynamic dashboards. Instead of hard-coding things like server or\n sensor names in your metric queries you can use variables in their place. Variables are shown as list boxes\n at the top of the dashboard. These drop-down lists make it easy to change the data being displayed in your\n dashboard.\n </Trans>\n </p>\n <Trans i18nKey=\"variables.empty-state.info-box-content-2\">\n Check out the{' '}\n <TextLink external href=\"https://grafana.com/docs/grafana/latest/variables/\">\n Templates and variables documentation\n </TextLink>{' '}\n for more information.\n </Trans>\n </EmptyState>\n </Stack>\n );\n}\n\nconst getStyles = () => ({\n tableContainer: css({\n overflow: 'auto',\n }),\n});\n","import { css } from '@emotion/css';\nimport { ReactElement, useEffect, useState } from 'react';\nimport { useAsyncFn } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { SceneVariable, SceneVariableState } from '@grafana/scenes';\nimport { Dashboard } from '@grafana/schema';\nimport { CollapsableSection, Icon, Spinner, Stack, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { VariableUsagesButton } from '../../variables/VariableUsagesButton';\nimport { getUnknownsNetwork, UsagesToNetwork } from '../../variables/utils';\n\nexport const SLOW_VARIABLES_EXPANSION_THRESHOLD = 1000;\n\nexport interface VariablesUnknownTableProps {\n variables: Array<SceneVariable<SceneVariableState>>;\n dashboard: Dashboard | null;\n}\n\nexport function VariablesUnknownTable({ variables, dashboard }: VariablesUnknownTableProps): ReactElement {\n const [open, setOpen] = useState(false);\n const [changed, setChanged] = useState(0);\n const style = useStyles2(getStyles);\n\n useEffect(() => setChanged((prevState) => prevState + 1), [variables, dashboard]);\n\n const [{ loading, value: usages }, getUnknowns] = useAsyncFn(async () => {\n const start = Date.now();\n const unknownsNetwork = await getUnknownsNetwork(variables, dashboard);\n const stop = Date.now();\n const elapsed = stop - start;\n if (elapsed >= SLOW_VARIABLES_EXPANSION_THRESHOLD) {\n reportInteraction('Slow unknown variables expansion', { elapsed });\n }\n setChanged(0);\n\n return unknownsNetwork;\n }, [variables, dashboard]);\n\n const onToggle = (isOpen: boolean) => {\n if (isOpen) {\n reportInteraction('Unknown variables section expanded');\n\n // make sure we only fetch when opened and variables or dashboard have changed\n if (changed > 0) {\n getUnknowns();\n }\n }\n\n setOpen(isOpen);\n };\n\n return (\n <div className={style.container}>\n <CollapsableSection label={<CollapseLabel />} isOpen={open} onToggle={onToggle}>\n {loading || !usages ? (\n <Stack justifyContent=\"center\" direction=\"column\">\n <Stack justifyContent=\"center\">\n <span>\n <Trans i18nKey=\"variables.unknown-table.loading\">Loading...</Trans>\n </span>\n <Spinner />\n </Stack>\n </Stack>\n ) : usages.length > 0 ? (\n <UnknownTable usages={usages} />\n ) : (\n <NoUnknowns />\n )}\n </CollapsableSection>\n </div>\n );\n}\n\nfunction CollapseLabel(): ReactElement {\n const style = useStyles2(getStyles);\n\n return (\n <h5>\n <Trans i18nKey=\"variables.unknown-table.renamed-or-missing-variables\">Renamed or missing variables</Trans>\n <Tooltip\n content={t(\n 'variables.unknown-table.tooltip-renamed-or-missing-variables',\n 'Click to expand a list with all variable references that have been renamed or are missing from the dashboard.'\n )}\n >\n <Icon name=\"info-circle\" className={style.infoIcon} />\n </Tooltip>\n </h5>\n );\n}\n\nfunction NoUnknowns(): ReactElement {\n return (\n <span>\n <Trans i18nKey=\"variables.unknown-table.no-unknowns\">No renamed or missing variables found.</Trans>\n </span>\n );\n}\n\nfunction UnknownTable({ usages }: { usages: UsagesToNetwork[] }): ReactElement {\n const style = useStyles2(getStyles);\n return (\n <table className=\"filter-table filter-table--hover\">\n <thead>\n <tr>\n <th>\n <Trans i18nKey=\"variables.unknown-table.variable\">Variable</Trans>\n </th>\n <th colSpan={5} />\n </tr>\n </thead>\n <tbody>\n {usages.map((usage) => {\n const name = typeof usage.variable === 'string' ? usage.variable : usage.variable.state.name;\n return (\n <tr key={name}>\n <td className={style.firstColumn}>\n <span>{name}</span>\n </td>\n <td className={style.defaultColumn} />\n <td className={style.defaultColumn} />\n <td className={style.defaultColumn} />\n <td className={style.lastColumn}>\n <VariableUsagesButton id={name} usages={usages} isAdhoc={false} />\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n marginTop: theme.spacing(4),\n paddingTop: theme.spacing(4),\n }),\n infoIcon: css({\n marginLeft: theme.spacing(1),\n }),\n defaultColumn: css({\n width: '1%',\n }),\n firstColumn: css({\n width: '1%',\n verticalAlign: 'top',\n color: theme.colors.text.maxContrast,\n }),\n lastColumn: css({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: '100%',\n textAlign: 'right',\n }),\n});\n","import { useMemo } from 'react';\n\nimport { NavModel, NavModelItem, PageLayoutType } from '@grafana/data';\nimport { SceneComponentProps, SceneObjectBase, SceneVariable, SceneVariables, sceneGraph } from '@grafana/scenes';\nimport { Page } from 'app/core/components/Page/Page';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { transformSceneToSaveModel } from '../serialization/transformSceneToSaveModel';\nimport { getDashboardSceneFor } from '../utils/utils';\nimport { createUsagesNetwork, transformUsagesToNetwork } from '../variables/utils';\n\nimport { EditListViewSceneUrlSync } from './EditListViewSceneUrlSync';\nimport { DashboardEditView, DashboardEditViewState, useDashboardEditPageNav } from './utils';\nimport { VariableEditorForm } from './variables/VariableEditorForm';\nimport { VariableEditorList } from './variables/VariableEditorList';\nimport { VariablesUnknownTable } from './variables/VariablesUnknownTable';\nimport {\n EditableVariableType,\n RESERVED_GLOBAL_VARIABLE_NAME_REGEX,\n WORD_CHARACTERS_REGEX,\n getVariableDefault,\n getVariableScene,\n} from './variables/utils';\n\nexport interface VariablesEditViewState extends DashboardEditViewState {\n editIndex?: number | undefined;\n}\n\nexport class VariablesEditView extends SceneObjectBase<VariablesEditViewState> implements DashboardEditView {\n public static Component = VariableEditorSettingsListView;\n\n public getUrlKey(): string {\n return 'variables';\n }\n\n protected _urlSync = new EditListViewSceneUrlSync(this);\n\n public getDashboard(): DashboardScene {\n return getDashboardSceneFor(this);\n }\n\n public getVariableSet(): SceneVariables {\n return sceneGraph.getVariables(this.getDashboard());\n }\n\n private getVariableIndex = (identifier: string) => {\n const variables = this.getVariables();\n return variables.findIndex((variable) => variable.state.name === identifier);\n };\n\n private replaceEditVariable = (newVariable: SceneVariable) => {\n // Find the index of the variable to be deleted\n const variableIndex = this.state.editIndex ?? -1;\n const { variables } = this.getVariableSet().state;\n const variable = variables[variableIndex];\n\n if (!variable) {\n // Handle the case where the variable is not found\n console.error('Variable not found');\n return;\n }\n\n const updatedVariables = [...variables.slice(0, variableIndex), newVariable, ...variables.slice(variableIndex + 1)];\n\n // Update the state or the variables array\n this.getVariableSet().setState({ variables: updatedVariables });\n };\n\n public onDelete = (identifier: string) => {\n // Find the index of the variable to be deleted\n const variableIndex = this.getVariableIndex(identifier);\n const { variables } = this.getVariableSet().state;\n if (variableIndex === -1) {\n // Handle the case where the variable is not found\n console.error('Variable not found');\n return;\n }\n\n // Create a new array excluding the variable to be deleted\n const updatedVariables = [...variables.slice(0, variableIndex), ...variables.slice(variableIndex + 1)];\n\n // Update the state or the variables array\n this.getVariableSet().setState({ variables: updatedVariables });\n // Remove editIndex otherwise switches to next variable in list\n this.setState({ editIndex: undefined });\n };\n\n public getVariables() {\n return this.getVariableSet().state.variables;\n }\n\n public onDuplicated = (identifier: string) => {\n const variableIndex = this.getVariableIndex(identifier);\n const variables = this.getVariableSet().state.variables;\n\n if (variableIndex === -1) {\n console.error('Variable not found');\n return;\n }\n\n const variableToUpdate = variables[variableIndex];\n let copyNumber = 0;\n let newName = `copy_of_${variableToUpdate.state.name}`;\n\n // Check if the name is unique, if not, increment the copy number\n while (variables.some((v) => v.state.name === newName)) {\n copyNumber++;\n newName = `copy_of_${variableToUpdate.state.name}_${copyNumber}`;\n }\n\n //clone the original variable\n const newVariable = variableToUpdate.clone(variableToUpdate.state);\n // update state name of the new variable\n newVariable.setState({ name: newName });\n\n const updatedVariables = [\n ...variables.slice(0, variableIndex + 1),\n newVariable,\n ...variables.slice(variableIndex + 1),\n ];\n\n this.getVariableSet().setState({ variables: updatedVariables });\n };\n\n public onOrderChanged = (fromIndex: number, toIndex: number) => {\n const variables = this.getVariableSet().state.variables;\n if (!this.getVariableSet()) {\n return;\n }\n // check the index are within the variables array\n if (fromIndex < 0 || fromIndex >= variables.length || toIndex < 0 || toIndex >= variables.length) {\n console.error('Invalid index');\n return;\n }\n const updatedVariables = [...variables];\n // Remove the variable from the array\n const movedItem = updatedVariables.splice(fromIndex, 1);\n updatedVariables.splice(toIndex, 0, movedItem[0]);\n const variablesScene = this.getVariableSet();\n variablesScene.setState({ variables: updatedVariables });\n };\n\n public onEdit = (identifier: string) => {\n const variableIndex = this.getVariableIndex(identifier);\n if (variableIndex === -1) {\n console.error('Variable not found');\n return;\n }\n this.setState({ editIndex: variableIndex });\n };\n\n public onAdd = () => {\n const variables = this.getVariables();\n const variableIndex = variables.length;\n //add the new variable to the end of the array\n const defaultNewVariable = getVariableDefault(variables);\n\n this.getVariableSet().setState({ variables: [...this.getVariables(), defaultNewVariable] });\n this.setState({ editIndex: variableIndex });\n };\n\n public onTypeChange = (type: EditableVariableType) => {\n // Find the index of the variable to be deleted\n const variableIndex = this.state.editIndex ?? -1;\n const { variables } = this.getVariableSet().state;\n const variable = variables[variableIndex];\n\n if (!variable) {\n // Handle the case where the variable is not found\n console.error('Variable not found');\n return;\n }\n\n const { name, label } = variable.state;\n const newVariable = getVariableScene(type, { name, label });\n this.replaceEditVariable(newVariable);\n };\n\n public onGoBack = () => {\n this.setState({ editIndex: undefined });\n };\n\n public onValidateVariableName = (name: string, key: string | undefined): [true, string] | [false, null] => {\n let errorText = null;\n if (!RESERVED_GLOBAL_VARIABLE_NAME_REGEX.test(name)) {\n errorText = \"Template names cannot begin with '__', that's reserved for Grafana's global variables\";\n }\n\n if (!WORD_CHARACTERS_REGEX.test(name)) {\n errorText = 'Only word characters are allowed in variable names';\n }\n\n const variable = this.getVariableSet().getByName(name)?.state;\n\n if (variable && variable.key !== key) {\n errorText = 'Variable with the same name already exists';\n }\n\n if (errorText) {\n return [true, errorText];\n }\n\n return [false, null];\n };\n\n public getSaveModel = () => {\n return transformSceneToSaveModel(this.getDashboard());\n };\n\n public getUsages = () => {\n const model = this.getSaveModel();\n const usages = createUsagesNetwork(this.getVariables(), model);\n return usages;\n };\n\n public getUsagesNetwork = () => {\n const usages = this.getUsages();\n const usagesNetwork = transformUsagesToNetwork(usages);\n return usagesNetwork;\n };\n}\n\nfunction VariableEditorSettingsListView({ model }: SceneComponentProps<VariablesEditView>) {\n const dashboard = model.getDashboard();\n const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());\n // get variables from dashboard state\n const { onDelete, onDuplicated, onOrderChanged, onEdit, onTypeChange, onGoBack, onAdd } = model;\n const { variables } = model.getVariableSet().useState();\n const { editIndex } = model.useState();\n const usagesNetwork = useMemo(() => model.getUsagesNetwork(), [model]);\n const usages = useMemo(() => model.getUsages(), [model]);\n const saveModel = model.getSaveModel();\n\n if (editIndex !== undefined && variables[editIndex]) {\n const variable = variables[editIndex];\n if (variable) {\n return (\n <VariableEditorSettingsView\n variable={variable}\n onTypeChange={onTypeChange}\n onGoBack={onGoBack}\n pageNav={pageNav}\n navModel={navModel}\n dashboard={dashboard}\n onDelete={onDelete}\n />\n );\n }\n }\n\n return (\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <VariableEditorList\n variables={variables}\n usages={usages}\n usagesNetwork={usagesNetwork}\n onDelete={onDelete}\n onDuplicate={onDuplicated}\n onChangeOrder={onOrderChanged}\n onAdd={onAdd}\n onEdit={onEdit}\n />\n <VariablesUnknownTable variables={variables} dashboard={saveModel} />\n </Page>\n );\n}\n\ninterface VariableEditorSettingsEditViewProps {\n variable: SceneVariable;\n pageNav: NavModelItem;\n navModel: NavModel;\n dashboard: DashboardScene;\n onTypeChange: (variableType: EditableVariableType) => void;\n onGoBack: () => void;\n onDelete: (variableName: string) => void;\n}\n\nfunction VariableEditorSettingsView({\n variable,\n pageNav,\n navModel,\n dashboard,\n onTypeChange,\n onGoBack,\n onDelete,\n}: VariableEditorSettingsEditViewProps) {\n const { name } = variable.useState();\n\n const editVariablePageNav = {\n text: name,\n parentItem: pageNav,\n };\n return (\n <Page navModel={navModel} pageNav={editVariablePageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n <VariableEditorForm\n variable={variable}\n onTypeChange={onTypeChange}\n onGoBack={onGoBack}\n onDelete={onDelete}\n // force refresh when navigating using back/forward between variables\n key={variable.state.key}\n />\n </Page>\n );\n}\n","import { Trans, t } from '@grafana/i18n';\nimport { ConfirmModal } from '@grafana/ui';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nimport { DecoratedRevisionModel } from '../VersionsEditView';\n\nexport interface RevertDashboardModalProps {\n hideModal: () => void;\n onRestore: (version: DecoratedRevisionModel) => Promise<boolean>;\n version: DecoratedRevisionModel;\n}\n\nexport const RevertDashboardModal = ({ hideModal, onRestore, version }: RevertDashboardModalProps) => {\n const notifyApp = useAppNotification();\n\n const onRestoreDashboard = async () => {\n const success = await onRestore(version);\n\n if (success) {\n notifyApp.success('Dashboard restored', `Restored from version ${version.version}`);\n DashboardInteractions.versionRestoreClicked({ version: version.version, confirm: true });\n } else {\n notifyApp.error('Dashboard restore failed', `Failed to restore from version ${version.version}`);\n }\n\n hideModal();\n };\n\n return (\n <ConfirmModal\n isOpen={true}\n title={t('dashboard-scene.revert-dashboard-modal.title-restore-version', 'Restore version')}\n icon=\"history\"\n onDismiss={hideModal}\n onConfirm={onRestoreDashboard}\n body={\n <p>\n <Trans\n i18nKey=\"dashboard-scene.revert-dashboard-modal.body-restore-version\"\n values={{ version: version.version }}\n >\n Are you sure you want to restore the dashboard to version {'{{version}}'}? All unsaved changes will be lost.\n </Trans>\n </p>\n }\n confirmText={t(\n 'dashboard-scene.revert-dashboard-modal.confirmText-restore-version',\n 'Yes, restore to version {{version}}',\n { version: version.version }\n )}\n />\n );\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, ModalsController, CollapsableSection, useStyles2, Stack, Icon, Box } from '@grafana/ui';\n\nimport { DecoratedRevisionModel } from '../VersionsEditView';\n\nimport { DiffGroup } from './DiffGroup';\nimport { DiffViewer } from './DiffViewer';\nimport { RevertDashboardModal } from './RevertDashboardModal';\nimport { jsonDiff } from './utils';\n\ntype DiffViewProps = {\n isNewLatest: boolean;\n newInfo: DecoratedRevisionModel;\n baseInfo: DecoratedRevisionModel;\n diffData: { lhs: string; rhs: string };\n onRestore: (version: DecoratedRevisionModel) => Promise<boolean>;\n};\n\nexport const VersionHistoryComparison = ({ baseInfo, newInfo, diffData, isNewLatest, onRestore }: DiffViewProps) => {\n const diff = jsonDiff(diffData.lhs, diffData.rhs);\n const styles = useStyles2(getStyles);\n\n return (\n <Stack direction=\"column\" gap={1}>\n <Stack justifyContent=\"space-between\" alignItems=\"center\">\n <Stack alignItems=\"center\">\n <span className={cx(styles.versionInfo, styles.noMarginBottom)}>\n <Trans\n i18nKey=\"dashboard-scene.version-history-comparison.old-version-updated\"\n values={{ version: baseInfo.version, editor: baseInfo.createdBy, timeAgo: baseInfo.ageString }}\n >\n <strong>Version {'{{version}}'}</strong> updated by {'{{editor}}'} {'{{timeAgo}}'}\n </Trans>\n {baseInfo.message}\n </span>\n <Icon name=\"arrow-right\" size=\"sm\" />\n <span className={styles.versionInfo}>\n <Trans\n i18nKey=\"dashboard-scene.version-history-comparison.new-version-updated\"\n values={{ version: newInfo.version, editor: newInfo.createdBy, timeAgo: newInfo.ageString }}\n >\n <strong>Version {'{{version}}'}</strong> updated by {'{{editor}}'} {'{{timeAgo}}'}\n </Trans>\n {newInfo.message}\n </span>\n </Stack>\n {isNewLatest && (\n <ModalsController>\n {({ showModal, hideModal }) => (\n <Button\n variant=\"destructive\"\n icon=\"history\"\n onClick={() => {\n showModal(RevertDashboardModal, {\n version: baseInfo,\n onRestore,\n hideModal,\n });\n }}\n >\n <Trans\n i18nKey=\"dashboard-scene.version-history.comparison.button-restore\"\n values={{ version: baseInfo.version }}\n >\n Restore to version {'{{version}}'}\n </Trans>\n </Button>\n )}\n </ModalsController>\n )}\n </Stack>\n\n {Object.entries(diff).map(([key, diffs]) => (\n <DiffGroup diffs={diffs} key={key} title={key} />\n ))}\n\n <Box paddingTop={2}>\n <CollapsableSection\n isOpen={false}\n label={t('dashboard-scene.version-history-comparison.label-view-json-diff', 'View JSON diff')}\n >\n <DiffViewer\n oldValue={JSON.stringify(diffData.lhs, null, 2)}\n newValue={JSON.stringify(diffData.rhs, null, 2)}\n />\n </CollapsableSection>\n </Box>\n </Stack>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n versionInfo: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n noMarginBottom: css({\n marginBottom: 0,\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Checkbox, Button, Tag, ModalsController, useStyles2 } from '@grafana/ui';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nimport { DecoratedRevisionModel } from '../VersionsEditView';\n\nimport { RevertDashboardModal } from './RevertDashboardModal';\n\ntype VersionsTableProps = {\n versions: DecoratedRevisionModel[];\n canCompare: boolean;\n onCheck: (ev: React.FormEvent<HTMLInputElement>, versionId: number) => void;\n onRestore: (version: DecoratedRevisionModel) => Promise<boolean>;\n};\n\nexport const VersionHistoryTable = ({ versions, canCompare, onCheck, onRestore }: VersionsTableProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.margin}>\n <table className={cx('filter-table', styles.table)}>\n <thead>\n <tr>\n <th className=\"width-4\"></th>\n <th className=\"width-4\">\n <Trans i18nKey=\"dashboard-scene.version-history-table.version\">Version</Trans>\n </th>\n <th className=\"width-14\">\n <Trans i18nKey=\"dashboard-scene.version-history-table.date\">Date</Trans>\n </th>\n <th className=\"width-10\">\n <Trans i18nKey=\"dashboard-scene.version-history-table.updated-by\">Updated by</Trans>\n </th>\n <th>\n <Trans i18nKey=\"dashboard-scene.version-history-table.notes\">Notes</Trans>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n {versions.map((version, idx) => (\n <tr key={version.id}>\n <td>\n <Checkbox\n aria-label={t(\n 'dashboard-scene.version-history-table.aria-label-toggle-selection',\n 'Toggle selection of version {{version}}',\n { version: version.version }\n )}\n className={css({\n display: 'inline',\n })}\n checked={version.checked}\n onChange={(ev) => onCheck(ev, version.id)}\n disabled={!version.checked && canCompare}\n />\n </td>\n <td>{version.version}</td>\n <td>{version.createdDateString}</td>\n <td>{version.createdBy}</td>\n <td>{version.message}</td>\n <td className=\"text-right\">\n {idx === 0 ? (\n <Tag name={t('dashboard-scene.version-history-table.name-latest', 'Latest')} colorIndex={17} />\n ) : (\n <ModalsController>\n {({ showModal, hideModal }) => (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n icon=\"history\"\n onClick={() => {\n showModal(RevertDashboardModal, {\n version,\n hideModal,\n onRestore,\n });\n DashboardInteractions.versionRestoreClicked({\n version: version.version,\n index: idx,\n confirm: false,\n version_date: version.created,\n });\n }}\n >\n <Trans i18nKey=\"dashboard-scene.version-history-table.restore\">Restore</Trans>\n </Button>\n )}\n </ModalsController>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n margin: css({\n marginBottom: theme.spacing(4),\n }),\n table: css({\n td: {\n whiteSpace: 'normal !important',\n },\n }),\n };\n}\n","import * as React from 'react';\n\nimport { PageLayoutType, dateTimeFormat, dateTimeFormatTimeAgo } from '@grafana/data';\nimport { SceneComponentProps, SceneObjectBase, sceneGraph } from '@grafana/scenes';\nimport { Spinner, Stack } from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { DashboardEditView, DashboardEditViewState, useDashboardEditPageNav } from './utils';\nimport { RevisionsModel, historySrv } from './version-history/HistorySrv';\nimport { VersionsHistoryButtons } from './version-history/VersionHistoryButtons';\nimport { VersionHistoryComparison } from './version-history/VersionHistoryComparison';\nimport { VersionHistoryHeader } from './version-history/VersionHistoryHeader';\nimport { VersionHistoryTable } from './version-history/VersionHistoryTable';\n\nexport const VERSIONS_FETCH_LIMIT = 10;\n\nexport type DecoratedRevisionModel = RevisionsModel & {\n createdDateString: string;\n ageString: string;\n};\n\nexport interface VersionsEditViewState extends DashboardEditViewState {\n versions?: DecoratedRevisionModel[];\n isLoading?: boolean;\n isAppending?: boolean;\n viewMode?: 'list' | 'compare';\n diffData?: { lhs: string; rhs: string };\n newInfo?: DecoratedRevisionModel;\n baseInfo?: DecoratedRevisionModel;\n isNewLatest?: boolean;\n}\n\nexport class VersionsEditView extends SceneObjectBase<VersionsEditViewState> implements DashboardEditView {\n public static Component = VersionsEditorSettingsListView;\n private _limit: number = VERSIONS_FETCH_LIMIT;\n private _start = 0;\n private _continueToken = '';\n\n constructor(state: VersionsEditViewState) {\n super({\n ...state,\n versions: [],\n isLoading: true,\n isAppending: true,\n viewMode: 'list',\n isNewLatest: false,\n diffData: {\n lhs: '',\n rhs: '',\n },\n });\n\n this.addActivationHandler(() => {\n this.fetchVersions();\n });\n }\n\n private get _dashboard(): DashboardScene {\n return getDashboardSceneFor(this);\n }\n\n public get diffData(): { lhs: string; rhs: string } {\n return this.state.diffData ?? { lhs: '', rhs: '' };\n }\n\n public get versions(): DecoratedRevisionModel[] {\n return this.state.versions ?? [];\n }\n\n public get limit(): number {\n return this._limit;\n }\n\n public get start(): number {\n return this._start;\n }\n\n public get continueToken(): string {\n return this._continueToken;\n }\n\n public getUrlKey(): string {\n return 'versions';\n }\n\n public getDashboard(): DashboardScene {\n return this._dashboard;\n }\n\n public getTimeRange() {\n return sceneGraph.getTimeRange(this._dashboard);\n }\n\n public fetchVersions = (append = false): void => {\n const uid = this._dashboard.state.uid;\n\n if (!uid) {\n return;\n }\n\n this.setState({ isAppending: append });\n\n const requestOptions = this._continueToken\n ? { limit: this._limit, start: this._start, continueToken: this._continueToken }\n : { limit: this._limit, start: this._start };\n\n historySrv\n .getHistoryList(uid, requestOptions)\n .then((result) => {\n this.setState({\n isLoading: false,\n versions: [...(append ? (this.state.versions ?? []) : []), ...this.decorateVersions(result.versions)],\n });\n this._start += this._limit;\n // Update the continueToken for the next request, if available\n this._continueToken = result.continueToken ?? '';\n })\n .catch((err) => console.log(err))\n .finally(() => this.setState({ isAppending: false }));\n };\n\n public getDiff = async () => {\n const selectedVersions = this.versions.filter((version) => version.checked);\n const [newInfo, baseInfo] = selectedVersions;\n const isNewLatest = newInfo.version === this._dashboard.state.version;\n\n this.setState({\n isLoading: true,\n });\n\n if (!this._dashboard.state.uid) {\n return;\n }\n // the id here is the resource version in k8s, use this instead to get the specific version\n let lhs = await historySrv.getDashboardVersion(this._dashboard.state.uid, baseInfo.id);\n let rhs = await historySrv.getDashboardVersion(this._dashboard.state.uid, newInfo.id);\n\n this.setState({\n baseInfo,\n isLoading: false,\n isNewLatest,\n newInfo,\n viewMode: 'compare',\n diffData: {\n lhs: lhs.data,\n rhs: rhs.data,\n },\n });\n };\n\n public reset = () => {\n this._continueToken = '';\n this.setState({\n baseInfo: undefined,\n diffData: {\n lhs: '',\n rhs: '',\n },\n isNewLatest: false,\n newInfo: undefined,\n versions: this.versions.map((version) => ({ ...version, checked: false })),\n viewMode: 'list',\n });\n };\n\n public onCheck = (ev: React.FormEvent<HTMLInputElement>, versionId: number) => {\n this.setState({\n versions: this.versions.map((version) =>\n version.id === versionId ? { ...version, checked: ev.currentTarget.checked } : version\n ),\n });\n };\n\n private decorateVersions(versions: RevisionsModel[]): DecoratedRevisionModel[] {\n const timeZone = this.getTimeRange().getTimeZone();\n\n return versions.map((version) => {\n return {\n ...version,\n createdDateString: dateTimeFormat(version.created, { timeZone: timeZone }),\n ageString: dateTimeFormatTimeAgo(version.created, { timeZone: timeZone }),\n checked: false,\n };\n });\n }\n}\n\nfunction VersionsEditorSettingsListView({ model }: SceneComponentProps<VersionsEditView>) {\n const dashboard = model.getDashboard();\n const { isLoading, isAppending, viewMode, baseInfo, newInfo, isNewLatest } = model.useState();\n const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());\n const canCompare = model.versions.filter((version) => version.checked).length === 2;\n const showButtons = model.versions.length > 1;\n const hasMore = model.versions.length >= model.limit;\n // older versions may have been cleaned up in the db, so also check if the last page is less than the limit, if so, we are at the end\n let isLastPage =\n model.versions.find((rev) => rev.version === 1) ||\n model.versions.length % model.limit !== 0 ||\n model.continueToken === '';\n\n const viewModeCompare = (\n <>\n <VersionHistoryHeader\n onClick={model.reset}\n baseVersion={baseInfo?.version}\n newVersion={newInfo?.version}\n isNewLatest={isNewLatest}\n />\n {isLoading ? (\n <VersionsHistorySpinner msg=\"Fetching changes…\" />\n ) : (\n <VersionHistoryComparison\n newInfo={newInfo!}\n baseInfo={baseInfo!}\n isNewLatest={isNewLatest!}\n diffData={model.diffData}\n onRestore={dashboard.onRestore}\n />\n )}\n </>\n );\n\n const viewModeList = (\n <>\n {isLoading ? (\n <VersionsHistorySpinner msg=\"Fetching history list…\" />\n ) : (\n <VersionHistoryTable\n versions={model.versions}\n onCheck={model.onCheck}\n canCompare={canCompare}\n onRestore={dashboard.onRestore}\n />\n )}\n {isAppending && <VersionsHistorySpinner msg=\"Fetching more entries…\" />}\n {showButtons && (\n <VersionsHistoryButtons\n hasMore={hasMore}\n canCompare={canCompare}\n getVersions={model.fetchVersions}\n getDiff={model.getDiff}\n isLastPage={!!isLastPage}\n />\n )}\n </>\n );\n\n return (\n <Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>\n <NavToolbarActions dashboard={dashboard} />\n {viewMode === 'compare' ? viewModeCompare : viewModeList}\n </Page>\n );\n}\n\nconst VersionsHistorySpinner = ({ msg }: { msg: string }) => (\n <Stack>\n <Spinner />\n <em>{msg}</em>\n </Stack>\n);\n","import { useLocation } from 'react-router-dom-v5-compat';\n\nimport { locationUtil, NavModelItem } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { SceneObject, SceneObjectState } from '@grafana/scenes';\nimport { contextSrv } from 'app/core/core';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { AccessControlAction } from 'app/types/accessControl';\nimport { useSelector } from 'app/types/store';\n\nimport { DashboardScene } from '../scene/DashboardScene';\n\nimport { AnnotationsEditView } from './AnnotationsEditView';\nimport { DashboardLinksEditView } from './DashboardLinksEditView';\nimport { GeneralSettingsEditView } from './GeneralSettingsEditView';\nimport { JsonModelEditView } from './JsonModelEditView';\nimport { PermissionsEditView } from './PermissionsEditView';\nimport { VariablesEditView } from './VariablesEditView';\nimport { VersionsEditView } from './VersionsEditView';\n\nexport interface DashboardEditViewState extends SceneObjectState {}\n\nexport interface DashboardEditListViewState extends DashboardEditViewState {\n /** Index of the list item to edit */\n editIndex?: number;\n}\n\nexport interface DashboardEditView extends SceneObject {\n getUrlKey(): string;\n}\n\nexport function useDashboardEditPageNav(dashboard: DashboardScene, currentEditView: string) {\n const location = useLocation();\n const navIndex = useSelector((state) => state.navIndex);\n const navModel = getNavModel(navIndex, 'dashboards/browse');\n const dashboardPageNav = dashboard.getPageNav(location, navIndex);\n\n const pageNav: NavModelItem = {\n text: t('dashboard-scene.use-dashboard-edit-page-nav.page-nav.text.settings', 'Settings'),\n url: locationUtil.getUrlForPartial(location, { editview: 'settings', editIndex: null }),\n children: [],\n parentItem: dashboardPageNav,\n };\n\n if (dashboard.state.meta.canEdit) {\n pageNav.children!.push({\n text: t('dashboard-settings.general.title', 'General'),\n url: locationUtil.getUrlForPartial(location, { editview: 'settings', editIndex: null }),\n active: currentEditView === 'settings',\n });\n pageNav.children!.push({\n text: t('dashboard-settings.annotations.title', 'Annotations'),\n url: locationUtil.getUrlForPartial(location, { editview: 'annotations', editIndex: null }),\n active: currentEditView === 'annotations',\n });\n pageNav.children!.push({\n text: t('dashboard-settings.variables.title', 'Variables'),\n url: locationUtil.getUrlForPartial(location, { editview: 'variables', editIndex: null }),\n active: currentEditView === 'variables',\n });\n pageNav.children!.push({\n text: t('dashboard-settings.links.title', 'Links'),\n url: locationUtil.getUrlForPartial(location, { editview: 'links', editIndex: null }),\n active: currentEditView === 'links',\n });\n }\n\n if (dashboard.state.uid && dashboard.state.meta.canSave) {\n pageNav.children!.push({\n text: t('dashboard-settings.versions.title', 'Versions'),\n url: locationUtil.getUrlForPartial(location, { editview: 'versions', editIndex: null }),\n active: currentEditView === 'versions',\n });\n }\n\n if (dashboard.state.uid && dashboard.state.meta.canAdmin) {\n if (contextSrv.hasPermission(AccessControlAction.DashboardsPermissionsRead)) {\n pageNav.children!.push({\n text: t('dashboard-settings.permissions.title', 'Permissions'),\n url: locationUtil.getUrlForPartial(location, { editview: 'permissions', editIndex: null }),\n active: currentEditView === 'permissions',\n });\n }\n }\n\n pageNav.children!.push({\n text: t('dashboard-settings.json-editor.title', 'JSON Model'),\n url: locationUtil.getUrlForPartial(location, { editview: 'json-model', editIndex: null }),\n active: currentEditView === 'json-model',\n });\n\n return { navModel, pageNav };\n}\n\nexport function createDashboardEditViewFor(editview: string): DashboardEditView {\n switch (editview) {\n case 'annotations':\n return new AnnotationsEditView({});\n case 'variables':\n return new VariablesEditView({});\n case 'links':\n return new DashboardLinksEditView({});\n case 'versions':\n return new VersionsEditView({});\n case 'json-model':\n return new JsonModelEditView({});\n case 'permissions':\n return new PermissionsEditView({});\n case 'settings':\n default:\n return new GeneralSettingsEditView({});\n }\n}\n","import { SceneObjectUrlSyncHandler, SceneObjectUrlValues, VizPanel } from '@grafana/scenes';\nimport { contextSrv } from 'app/core/core';\nimport { KioskMode } from 'app/types/dashboard';\n\nimport { buildPanelEditScene } from '../panel-edit/PanelEditor';\nimport { createDashboardEditViewFor } from '../settings/utils';\nimport { ShareDrawer } from '../sharing/ShareDrawer/ShareDrawer';\nimport { findEditPanel, getLibraryPanelBehavior } from '../utils/utils';\n\nimport { DashboardScene, DashboardSceneState } from './DashboardScene';\nimport { LibraryPanelBehavior } from './LibraryPanelBehavior';\nimport { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';\n\nexport class DashboardSceneUrlSync implements SceneObjectUrlSyncHandler {\n constructor(private _scene: DashboardScene) {}\n\n getKeys(): string[] {\n return ['inspect', 'viewPanel', 'editPanel', 'editview', 'autofitpanels', 'kiosk', 'shareView'];\n }\n\n getUrlState(): SceneObjectUrlValues {\n const state = this._scene.state;\n\n return {\n autofitpanels: this.getAutoFitPanels(),\n viewPanel: state.viewPanel,\n editview: state.editview?.getUrlKey(),\n editPanel: state.editPanel?.getUrlKey() || undefined,\n kiosk: state.kioskMode === KioskMode.Full ? 'true' : undefined,\n shareView: state.shareView,\n orgId: contextSrv.user.orgId.toString(),\n };\n }\n\n private getAutoFitPanels(): string | undefined {\n if (this._scene.state.body instanceof DefaultGridLayoutManager) {\n return this._scene.state.body.state.grid.state.UNSAFE_fitPanels ? 'true' : undefined;\n }\n\n return undefined;\n }\n\n updateFromUrl(values: SceneObjectUrlValues): void {\n const { viewPanel, isEditing, editPanel, shareView } = this._scene.state;\n const update: Partial<DashboardSceneState> = {};\n\n if (typeof values.editview === 'string' && this._scene.canEditDashboard()) {\n update.editview = createDashboardEditViewFor(values.editview);\n\n // If we are not in editing (for example after full page reload)\n if (!isEditing) {\n if (this._scene.state.editable) {\n // Not sure what is best to do here.\n // The reason for the timeout is for this change to happen after the url sync has completed\n setTimeout(() => this._scene.onEnterEditMode());\n } else {\n update.editview = undefined;\n }\n }\n } else if (values.hasOwnProperty('editview')) {\n update.editview = undefined;\n }\n\n // Handle view panel state\n if (typeof values.viewPanel === 'string') {\n update.viewPanel = values.viewPanel;\n } else if (viewPanel && values.viewPanel === null) {\n update.viewPanel = undefined;\n }\n\n // Handle edit panel state\n if (typeof values.editPanel === 'string') {\n const panel = findEditPanel(this._scene, values.editPanel);\n\n if (!panel) {\n console.warn(`Panel ${values.editPanel} not found`);\n return;\n }\n\n // We cannot simultaneously be in edit and view panel state.\n if (this._scene.state.viewPanel) {\n update.viewPanel = undefined;\n }\n\n // If we are not in editing (for example after full page reload)\n if (!isEditing) {\n this._scene.onEnterEditMode();\n }\n\n const libPanelBehavior = getLibraryPanelBehavior(panel);\n if (libPanelBehavior && !libPanelBehavior?.state.isLoaded) {\n this._waitForLibPanelToLoadBeforeEnteringPanelEdit(panel, libPanelBehavior);\n return;\n }\n\n update.editPanel = buildPanelEditScene(panel);\n } else if (editPanel && values.editPanel === null) {\n update.editPanel = undefined;\n }\n\n if (typeof values.shareView === 'string') {\n update.shareView = values.shareView;\n update.overlay = new ShareDrawer({\n shareView: values.shareView,\n });\n } else if (shareView && values.shareView === null) {\n update.overlay = undefined;\n update.shareView = undefined;\n }\n\n const layout = this._scene.state.body;\n if (layout instanceof DefaultGridLayoutManager) {\n const UNSAFE_fitPanels = typeof values.autofitpanels === 'string';\n\n if (!!layout.state.grid.state.UNSAFE_fitPanels !== UNSAFE_fitPanels) {\n layout.state.grid.setState({ UNSAFE_fitPanels });\n }\n }\n\n if (typeof values.kiosk === 'string') {\n if (values.kiosk === 'true' || values.kiosk === '') {\n update.kioskMode = KioskMode.Full;\n }\n }\n\n if (Object.keys(update).length > 0) {\n this._scene.setState(update);\n }\n }\n\n /**\n * Temporary solution, with some refactoring of PanelEditor we can remove this\n */\n private _waitForLibPanelToLoadBeforeEnteringPanelEdit(panel: VizPanel, libPanel: LibraryPanelBehavior) {\n const sub = libPanel.subscribeToState((state) => {\n if (state.isLoaded) {\n this._scene.setState({ editPanel: buildPanelEditScene(panel) });\n sub.unsubscribe();\n }\n });\n }\n}\n","import { mousetrap } from './mousetrap';\n\nexport interface KeyBindingItem {\n /** Key or key pattern like mod+o */\n key: string;\n /** Defaults to keydown */\n type?: string;\n /** The handler callback */\n onTrigger: () => void;\n}\n\n/**\n * Small util to make it easier to add and unbind Mousetrap keybindings\n */\nexport class KeybindingSet {\n private _binds: KeyBindingItem[] = [];\n\n addBinding(item: KeyBindingItem) {\n mousetrap.bind(\n item.key,\n (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n evt.returnValue = false;\n item.onTrigger();\n },\n item.type ?? 'keydown'\n );\n this._binds.push({\n ...item,\n type: item.type ?? 'keydown',\n });\n }\n\n removeAll() {\n this._binds.forEach((item) => {\n mousetrap.unbind(item.key, item.type);\n });\n this._binds = [];\n }\n}\n","import { SceneObject, VizPanel, sceneGraph, PATH_ID_SEPARATOR } from '@grafana/scenes';\n\nimport { getVizPanelKeyForPanelId } from './utils';\n\nexport function findVizPanelByPathId(scene: SceneObject, pathId: string): VizPanel | null {\n // Check if pathId is just an old legacy panel id\n if (/^\\d+$/.test(pathId)) {\n pathId = getVizPanelKeyForPanelId(parseInt(pathId, 10));\n }\n\n const panel = sceneGraph.findObject(scene, (obj) => {\n if (!(obj instanceof VizPanel)) {\n return false;\n }\n\n return pathId === obj.getPathId();\n });\n\n if (panel) {\n if (panel instanceof VizPanel) {\n return panel;\n } else {\n throw new Error(`Found panel with key ${pathId} but it was not a VizPanel`);\n }\n }\n\n return null;\n}\n\nexport function containsPathIdSeparator(key: string): boolean {\n return key.includes(PATH_ID_SEPARATOR);\n}\n","import { locationUtil, SetPanelAttentionEvent, LegacyGraphHoverClearEvent } from '@grafana/data';\nimport { config, locationService } from '@grafana/runtime';\nimport { behaviors, sceneGraph, VizPanel } from '@grafana/scenes';\nimport appEvents from 'app/core/app_events';\nimport { KeybindingSet } from 'app/core/services/KeybindingSet';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { InspectTab } from 'app/features/inspector/types';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { shareDashboardType } from '../../dashboard/components/ShareModal/utils';\nimport { PanelInspectDrawer } from '../inspect/PanelInspectDrawer';\nimport { ShareDrawer } from '../sharing/ShareDrawer/ShareDrawer';\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { findVizPanelByPathId } from '../utils/pathId';\nimport { getEditPanelUrl, tryGetExploreUrlForPanel } from '../utils/urlBuilders';\nimport { getPanelIdForVizPanel } from '../utils/utils';\n\nimport { DashboardScene } from './DashboardScene';\nimport { onRemovePanel, toggleVizPanelLegend } from './PanelMenuBehavior';\nimport { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';\n\nexport function setupKeyboardShortcuts(scene: DashboardScene) {\n const keybindings = new KeybindingSet();\n let vizPanelPathId: string | null = null;\n\n const canEdit = scene.canEditDashboard();\n\n const panelAttentionSubscription = appEvents.subscribe(SetPanelAttentionEvent, (event) => {\n if (typeof event.payload.panelId === 'string') {\n vizPanelPathId = event.payload.panelId;\n }\n });\n\n function withFocusedPanel(scene: DashboardScene, fn: (vizPanel: VizPanel) => void) {\n return () => {\n if (vizPanelPathId == null) {\n return;\n }\n\n const vizPanel = findVizPanelByPathId(scene, vizPanelPathId);\n if (vizPanel) {\n fn(vizPanel);\n return;\n }\n };\n }\n\n // View panel\n keybindings.addBinding({\n key: 'v',\n onTrigger: withFocusedPanel(scene, (vizPanel: VizPanel) => {\n if (scene.state.viewPanel) {\n locationService.partial({ viewPanel: undefined });\n } else {\n locationService.partial({ viewPanel: vizPanel.getPathId(), editPanel: undefined });\n }\n }),\n });\n\n // Panel share\n keybindings.addBinding({\n key: 'p u',\n onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => {\n const drawer = new ShareDrawer({\n shareView: shareDashboardType.link,\n panelRef: vizPanel.getRef(),\n });\n\n scene.showModal(drawer);\n }),\n });\n keybindings.addBinding({\n key: 'p e',\n onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => {\n const drawer = new ShareDrawer({\n shareView: shareDashboardType.embed,\n panelRef: vizPanel.getRef(),\n });\n\n scene.showModal(drawer);\n }),\n });\n\n if (\n contextSrv.isSignedIn &&\n config.snapshotEnabled &&\n contextSrv.hasPermission(AccessControlAction.SnapshotsCreate)\n ) {\n keybindings.addBinding({\n key: 'p s',\n onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => {\n const drawer = new ShareDrawer({\n shareView: shareDashboardType.snapshot,\n panelRef: vizPanel.getRef(),\n });\n\n scene.showModal(drawer);\n }),\n });\n }\n\n // Panel inspect\n keybindings.addBinding({\n key: 'i',\n onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => {\n scene.showModal(new PanelInspectDrawer({ panelRef: vizPanel.getRef(), currentTab: InspectTab.Data }));\n }),\n });\n\n // Got to Explore for panel\n keybindings.addBinding({\n key: 'p x',\n onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => {\n const url = await tryGetExploreUrlForPanel(vizPanel);\n if (url) {\n locationService.push(url);\n }\n }),\n });\n\n // Toggle legend\n keybindings.addBinding({\n key: 'p l',\n onTrigger: withFocusedPanel(scene, toggleVizPanelLegend),\n });\n\n // Refresh\n keybindings.addBinding({\n key: 'd r',\n onTrigger: () => sceneGraph.getTimeRange(scene).onRefresh(),\n });\n\n // Zoom out\n keybindings.addBinding({\n key: 't z',\n onTrigger: () => {\n handleZoomOut(scene);\n },\n });\n\n keybindings.addBinding({\n key: 'ctrl+z',\n onTrigger: () => {\n handleZoomOut(scene);\n },\n });\n\n // Relative -> Absolute time range\n keybindings.addBinding({\n key: 't a',\n onTrigger: () => {\n const timePicker = dashboardSceneGraph.getTimePicker(scene);\n timePicker?.toAbsolute();\n },\n });\n\n keybindings.addBinding({\n key: 't left',\n onTrigger: () => {\n handleTimeRangeShift(scene, 'left');\n },\n });\n\n keybindings.addBinding({\n key: 't right',\n onTrigger: () => {\n handleTimeRangeShift(scene, 'right');\n },\n });\n\n keybindings.addBinding({\n key: 'mod+o',\n onTrigger: () => {\n const cursorSync = scene.state.$behaviors?.find((b) => b instanceof behaviors.CursorSync);\n if (cursorSync instanceof behaviors.CursorSync) {\n const currentSync = cursorSync.state.sync;\n const nextSync = (currentSync + 1) % 3;\n cursorSync.setState({ sync: nextSync });\n appEvents.publish(new LegacyGraphHoverClearEvent());\n sceneGraph.getTimeRange(scene).onRefresh();\n }\n },\n });\n\n if (canEdit) {\n // Panel edit\n keybindings.addBinding({\n key: 'e',\n onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => {\n const sceneRoot = vizPanel.getRoot();\n if (sceneRoot instanceof DashboardScene) {\n const panelId = getPanelIdForVizPanel(vizPanel);\n if (scene.state.editPanel) {\n locationService.push(\n locationUtil.getUrlForPartial(locationService.getLocation(), {\n editPanel: undefined,\n })\n );\n } else {\n const url = locationUtil.stripBaseFromUrl(getEditPanelUrl(panelId));\n locationService.push(url);\n }\n }\n }),\n });\n\n // Dashboard settings\n keybindings.addBinding({\n key: 'd s',\n onTrigger: scene.onOpenSettings,\n });\n\n // Open save drawer\n keybindings.addBinding({\n key: 'mod+s',\n onTrigger: () => scene.openSaveDrawer({}),\n });\n\n // delete panel\n keybindings.addBinding({\n key: 'p r',\n onTrigger: withFocusedPanel(scene, (vizPanel: VizPanel) => {\n if (scene.state.isEditing) {\n onRemovePanel(scene, vizPanel);\n }\n }),\n });\n\n // duplicate panel\n keybindings.addBinding({\n key: 'p d',\n onTrigger: withFocusedPanel(scene, (vizPanel: VizPanel) => {\n if (scene.state.isEditing) {\n scene.duplicatePanel(vizPanel);\n }\n }),\n });\n\n // collapse all rows\n keybindings.addBinding({\n key: 'd shift+c',\n onTrigger: () => {\n if (scene.state.body instanceof DefaultGridLayoutManager) {\n scene.state.body.collapseAllRows();\n }\n },\n });\n\n // expand all rows\n keybindings.addBinding({\n key: 'd shift+e',\n onTrigger: () => {\n if (scene.state.body instanceof DefaultGridLayoutManager) {\n scene.state.body.expandAllRows();\n }\n },\n });\n }\n\n // toggle all panel legends (TODO)\n // toggle all exemplars (TODO)\n\n return () => {\n keybindings.removeAll();\n panelAttentionSubscription.unsubscribe();\n };\n}\n\nfunction handleZoomOut(scene: DashboardScene) {\n const timePicker = dashboardSceneGraph.getTimePicker(scene);\n timePicker?.onZoom();\n}\n\nfunction handleTimeRangeShift(scene: DashboardScene, direction: 'left' | 'right') {\n const timePicker = dashboardSceneGraph.getTimePicker(scene);\n\n if (!timePicker) {\n return;\n }\n\n if (direction === 'left') {\n timePicker.onMoveBackward();\n }\n if (direction === 'right') {\n timePicker.onMoveForward();\n }\n}\n","import * as H from 'history';\n\nimport { CoreApp, DataQueryRequest, NavIndex, NavModelItem, locationUtil } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, locationService, RefreshEvent } from '@grafana/runtime';\nimport {\n sceneGraph,\n SceneObject,\n SceneObjectBase,\n SceneObjectRef,\n SceneObjectState,\n SceneTimeRange,\n sceneUtils,\n SceneVariable,\n SceneVariableDependencyConfigLike,\n VizPanel,\n} from '@grafana/scenes';\nimport { Dashboard, DashboardLink, LibraryPanel } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport appEvents from 'app/core/app_events';\nimport { ScrollRefElement } from 'app/core/components/NativeScrollbar';\nimport { LS_PANEL_COPY_KEY } from 'app/core/constants';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport store from 'app/core/store';\nimport { sortedDeepCloneWithoutNulls } from 'app/core/utils/object';\nimport { DashboardWithAccessInfo } from 'app/features/dashboard/api/types';\nimport { SaveDashboardAsOptions } from 'app/features/dashboard/components/SaveDashboard/types';\nimport { getDashboardSceneProfiler } from 'app/features/dashboard/services/DashboardProfiler';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { DashboardModel, ScopeMeta } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';\nimport { DashboardJson } from 'app/features/manage-dashboards/types';\nimport { VariablesChanged } from 'app/features/variables/types';\nimport { DashboardMeta, KioskMode, SaveDashboardResponseDTO, DashboardDTO } from 'app/types/dashboard';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport {\n AnnoKeyManagerAllowsEdits,\n AnnoKeyManagerIdentity,\n AnnoKeyManagerKind,\n AnnoKeySourcePath,\n ManagerKind,\n ResourceForCreate,\n} from '../../apiserver/types';\nimport { DashboardEditPane } from '../edit-pane/DashboardEditPane';\nimport { dashboardEditActions } from '../edit-pane/shared';\nimport { PanelEditor } from '../panel-edit/PanelEditor';\nimport { DashboardSceneChangeTracker } from '../saving/DashboardSceneChangeTracker';\nimport { SaveDashboardDrawer } from '../saving/SaveDashboardDrawer';\nimport { DashboardChangeInfo } from '../saving/shared';\nimport {\n DashboardSceneSerializerLike,\n getDashboardSceneSerializer,\n V2DashboardSerializer,\n} from '../serialization/DashboardSceneSerializer';\nimport { serializeAutoGridItem } from '../serialization/layoutSerializers/AutoGridLayoutSerializer';\nimport { gridItemToGridLayoutItemKind } from '../serialization/layoutSerializers/DefaultGridLayoutSerializer';\nimport { getElement } from '../serialization/layoutSerializers/utils';\nimport { buildGridItemForPanel, transformSaveModelToScene } from '../serialization/transformSaveModelToScene';\nimport { gridItemToPanel } from '../serialization/transformSceneToSaveModel';\nimport { DecoratedRevisionModel } from '../settings/VersionsEditView';\nimport { DashboardEditView } from '../settings/utils';\nimport { historySrv } from '../settings/version-history/HistorySrv';\nimport { DashboardModelCompatibilityWrapper } from '../utils/DashboardModelCompatibilityWrapper';\nimport { isRepeatCloneOrChildOf } from '../utils/clone';\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { djb2Hash } from '../utils/djb2Hash';\nimport { getDashboardUrl } from '../utils/getDashboardUrl';\nimport {\n getClosestVizPanel,\n getDashboardSceneFor,\n getDefaultVizPanel,\n getLayoutManagerFor,\n getPanelIdForVizPanel,\n hasActualSaveChanges,\n} from '../utils/utils';\nimport { SchemaV2EditorDrawer } from '../v2schema/SchemaV2EditorDrawer';\n\nimport { AddLibraryPanelDrawer } from './AddLibraryPanelDrawer';\nimport { DashboardControls } from './DashboardControls';\nimport { DashboardLayoutOrchestrator } from './DashboardLayoutOrchestrator';\nimport { DashboardSceneRenderer } from './DashboardSceneRenderer';\nimport { DashboardSceneUrlSync } from './DashboardSceneUrlSync';\nimport { LibraryPanelBehavior } from './LibraryPanelBehavior';\nimport { setupKeyboardShortcuts } from './keyboardShortcuts';\nimport { AutoGridItem } from './layout-auto-grid/AutoGridItem';\nimport { DashboardGridItem } from './layout-default/DashboardGridItem';\nimport { DefaultGridLayoutManager } from './layout-default/DefaultGridLayoutManager';\nimport { addNewRowTo } from './layouts-shared/addNew';\nimport { clearClipboard } from './layouts-shared/paste';\nimport { getIsLazy } from './layouts-shared/utils';\nimport { DashboardLayoutManager } from './types/DashboardLayoutManager';\nimport { LayoutParent } from './types/LayoutParent';\n\nexport const PERSISTED_PROPS = ['title', 'description', 'tags', 'editable', 'graphTooltip', 'links', 'meta', 'preload'];\nexport const PANEL_SEARCH_VAR = 'systemPanelFilterVar';\nexport const PANELS_PER_ROW_VAR = 'systemDynamicRowSizeVar';\n\nexport interface DashboardSceneState extends SceneObjectState {\n /** The title */\n title: string;\n /** The description */\n description?: string;\n /** Tags */\n tags?: string[];\n /** Links */\n links: DashboardLink[];\n /** Is editable */\n editable?: boolean;\n /** Allows disabling grid lazy loading */\n preload?: boolean;\n /** A uid when saved */\n uid?: string;\n /** @experimental */\n scopeMeta?: ScopeMeta;\n /** @deprecated */\n id?: number | null;\n /** Layout of panels */\n body: DashboardLayoutManager;\n /** NavToolbar actions */\n actions?: SceneObject[];\n /** Fixed row at the top of the canvas with for example variables and time range controls */\n controls?: DashboardControls;\n /** True when editing */\n isEditing?: boolean;\n /** True when user made a change */\n isDirty?: boolean;\n /** meta flags */\n meta: Omit<DashboardMeta, 'isNew'>;\n /** Version of the dashboard */\n version?: number;\n /** Panel to inspect */\n inspectPanelKey?: string;\n /** Panel key to view in fullscreen */\n viewPanel?: string;\n /** Edit view */\n editview?: DashboardEditView;\n /** Edit panel */\n editPanel?: PanelEditor;\n /** Scene object that handles the current drawer or modal */\n overlay?: SceneObject;\n /** Kiosk mode */\n kioskMode?: KioskMode;\n /** Share view */\n shareView?: string;\n /** Renders panels in grid and filtered */\n panelSearch?: string;\n /** How many panels to show per row for search results */\n panelsPerRow?: number;\n /** options pane */\n editPane: DashboardEditPane;\n /** Manages dragging/dropping of layout items */\n layoutOrchestrator?: DashboardLayoutOrchestrator;\n}\n\nexport class DashboardScene extends SceneObjectBase<DashboardSceneState> implements LayoutParent {\n static Component = DashboardSceneRenderer;\n\n /**\n * Handles url sync\n */\n protected _urlSync = new DashboardSceneUrlSync(this);\n /**\n * Get notified when variables change\n */\n protected _variableDependency = new DashboardVariableDependency(this);\n\n /**\n * State before editing started\n */\n private _initialState?: DashboardSceneState;\n /**\n * Url state before editing started\n */\n private _initialUrlState?: H.Location;\n /**\n * Dashboard changes tracker\n */\n private _changeTracker: DashboardSceneChangeTracker;\n\n /**\n * Remember scroll position when going into panel edit\n */\n private _scrollRef?: ScrollRefElement;\n private _prevScrollPos?: number;\n\n protected _renderBeforeActivation = true;\n\n public serializer: DashboardSceneSerializerLike<\n Dashboard | DashboardV2Spec,\n DashboardMeta | DashboardWithAccessInfo<DashboardV2Spec>['metadata'],\n Dashboard | DashboardV2Spec,\n DashboardJson | DashboardV2Spec\n >;\n\n public constructor(state: Partial<DashboardSceneState>, serializerVersion: 'v1' | 'v2' = 'v1') {\n super({\n title: t('dashboard-scene.dashboard-scene.title.dashboard', 'Dashboard'),\n meta: {},\n editable: true,\n $timeRange: state.$timeRange ?? new SceneTimeRange({}),\n body: state.body ?? DefaultGridLayoutManager.fromVizPanels([], getIsLazy(state.preload)),\n links: state.links ?? [],\n ...state,\n editPane: new DashboardEditPane(),\n layoutOrchestrator: new DashboardLayoutOrchestrator(),\n });\n\n this.serializer =\n serializerVersion === 'v2' ? getDashboardSceneSerializer('v2') : getDashboardSceneSerializer('v1');\n\n this._changeTracker = new DashboardSceneChangeTracker(this);\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n let prevSceneContext = window.__grafanaSceneContext;\n const isNew = locationService.getLocation().pathname === '/dashboard/new';\n\n window.__grafanaSceneContext = this;\n\n this._initializePanelSearch();\n\n if (this.state.isEditing) {\n this._initialUrlState = locationService.getLocation();\n this._changeTracker.startTrackingChanges();\n }\n\n if (isNew) {\n this.onEnterEditMode();\n this.setState({ isDirty: true });\n }\n\n if (!this.state.meta.isEmbedded && this.state.uid) {\n dashboardWatcher.watch(this.state.uid);\n }\n\n let clearKeyBindings = () => {};\n if (!config.publicDashboardAccessToken) {\n clearKeyBindings = setupKeyboardShortcuts(this);\n }\n const oldDashboardWrapper = new DashboardModelCompatibilityWrapper(this);\n\n // @ts-expect-error\n getDashboardSrv().setCurrent(oldDashboardWrapper);\n\n // Deactivation logic\n return () => {\n window.__grafanaSceneContext = prevSceneContext;\n clearKeyBindings();\n this._changeTracker.terminate();\n oldDashboardWrapper.destroy();\n dashboardWatcher.leave();\n };\n }\n\n private _initializePanelSearch() {\n const systemPanelFilter = sceneGraph.lookupVariable(PANEL_SEARCH_VAR, this)?.getValue();\n if (typeof systemPanelFilter === 'string') {\n this.setState({ panelSearch: systemPanelFilter });\n }\n\n const panelsPerRow = sceneGraph.lookupVariable(PANELS_PER_ROW_VAR, this)?.getValue();\n if (typeof panelsPerRow === 'string') {\n const perRow = Number.parseInt(panelsPerRow, 10);\n this.setState({ panelsPerRow: Number.isInteger(perRow) ? perRow : undefined });\n }\n }\n\n public onEnterEditMode = () => {\n // Save this state\n this._initialState = sceneUtils.cloneSceneObjectState(this.state);\n this._initialUrlState = locationService.getLocation();\n\n // Switch to edit mode\n this.setState({ isEditing: true });\n\n // Propagate change edit mode change to children\n this.state.body.editModeChanged?.(true);\n\n this._changeTracker.startTrackingChanges();\n };\n\n public saveCompleted(saveModel: Dashboard | DashboardV2Spec, result: SaveDashboardResponseDTO, folderUid?: string) {\n this.serializer.onSaveComplete(saveModel, result);\n\n this._changeTracker.stopTrackingChanges();\n\n this.setState({\n version: result.version,\n isDirty: false,\n uid: result.uid,\n id: result.id,\n meta: {\n ...this.state.meta,\n uid: result.uid,\n url: result.url,\n slug: result.slug,\n folderUid: folderUid,\n version: result.version,\n },\n overlay: undefined,\n });\n\n this.state.editPanel?.dashboardSaved();\n\n this._initialState = sceneUtils.cloneSceneObjectState(this.state);\n this._initialUrlState = locationService.getLocation();\n\n this._changeTracker.startTrackingChanges();\n }\n\n public exitEditMode({ skipConfirm, restoreInitialState }: { skipConfirm: boolean; restoreInitialState?: boolean }) {\n if (!this.canDiscard()) {\n console.error('Trying to discard back to a state that does not exist, initialState undefined');\n return;\n }\n\n if (!this.state.isDirty || skipConfirm || !hasActualSaveChanges(this) || this.managedResourceCannotBeEdited()) {\n this.exitEditModeConfirmed(restoreInitialState || this.state.isDirty);\n return;\n }\n\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard-scene.dashboard-scene.title.discard-changes-to-dashboard', 'Discard changes to dashboard?'),\n text: `You have unsaved changes to this dashboard. Are you sure you want to discard them?`,\n icon: 'trash-alt',\n yesText: 'Discard',\n onConfirm: () => {\n this.exitEditModeConfirmed();\n },\n })\n );\n }\n\n private exitEditModeConfirmed(restoreInitialState = true) {\n // No need to listen to changes anymore\n this._changeTracker.stopTrackingChanges();\n\n // We are updating url and removing editview and editPanel.\n // The initial url may be including edit view, edit panel or inspect query params if the user pasted the url,\n // hence we need to cleanup those query params to get back to the dashboard view. Otherwise url sync can trigger overlays.\n const url = locationUtil.getUrlForPartial(this._initialUrlState!, {\n editPanel: null,\n editview: null,\n inspect: null,\n inspectTab: null,\n shareView: null,\n });\n\n locationService.replace(locationUtil.stripBaseFromUrl(url));\n\n if (restoreInitialState) {\n // Restore initial state and disable editing\n this.setState({ ...this._initialState, isEditing: false });\n } else {\n // Do not restore\n this.setState({ isEditing: false });\n }\n\n // if we are in edit panel, we need to onDiscard()\n // so the useEffect cleanup comes later and\n // doesn't try to commit the changes\n if (this.state.editPanel) {\n this.state.editPanel.onDiscard();\n }\n\n // Disable grid dragging\n this.state.body.editModeChanged?.(false);\n }\n\n public canDiscard() {\n return this._initialState !== undefined;\n }\n\n public pauseTrackingChanges() {\n this._changeTracker.stopTrackingChanges();\n }\n\n public resumeTrackingChanges() {\n this._changeTracker.startTrackingChanges();\n }\n\n public onRestore = async (version: DecoratedRevisionModel): Promise<boolean> => {\n // the id here is the resource version in k8s, use this instead to get the specific version\n let versionRsp = await historySrv.restoreDashboard(version.uid, version.id);\n\n if (!Number.isInteger(versionRsp.version)) {\n return false;\n }\n\n const dashboardDTO: DashboardDTO = {\n dashboard: new DashboardModel(version.data),\n meta: this.state.meta,\n };\n\n const dashScene = transformSaveModelToScene(dashboardDTO);\n const newState = sceneUtils.cloneSceneObjectState(dashScene.state);\n newState.version = versionRsp.version;\n\n this.setState(newState);\n this.exitEditMode({ skipConfirm: true, restoreInitialState: false });\n\n return true;\n };\n\n public openSaveDrawer({ saveAsCopy, onSaveSuccess }: { saveAsCopy?: boolean; onSaveSuccess?: () => void }) {\n if (!this.state.isEditing) {\n return;\n }\n\n this.setState({\n overlay: new SaveDashboardDrawer({\n dashboardRef: this.getRef(),\n saveAsCopy,\n onSaveSuccess,\n showVariablesWarning: this.hasVariableErrors(),\n }),\n });\n }\n\n public openV2SchemaEditor() {\n this.setState({\n overlay: new SchemaV2EditorDrawer({\n dashboardRef: this.getRef(),\n }),\n });\n }\n\n public getPageNav(location: H.Location, navIndex: NavIndex) {\n const { meta, viewPanel, editPanel, title, uid } = this.state;\n const isNew = !Boolean(uid);\n\n let pageNav: NavModelItem = {\n text: title,\n url: getDashboardUrl({\n uid,\n slug: meta.slug,\n currentQueryParams: location.search,\n updateQuery: { viewPanel: null, inspect: null, editview: null, editPanel: null, tab: null, shareView: null },\n isHomeDashboard: !meta.url && !meta.slug && !isNew && !meta.isSnapshot,\n isSnapshot: meta.isSnapshot,\n }),\n };\n\n const { folderUid } = meta;\n\n if (folderUid) {\n const folderNavModel = getNavModel(navIndex, `folder-dashboards-${folderUid}`).main;\n // If the folder hasn't loaded (maybe user doesn't have permission on it?) then\n // don't show the \"page not found\" breadcrumb\n if (folderNavModel.id !== 'not-found') {\n pageNav = {\n ...pageNav,\n parentItem: folderNavModel,\n };\n }\n }\n\n if (viewPanel) {\n pageNav = {\n text: t('dashboard-scene.dashboard-scene.text.view-panel', 'View panel'),\n parentItem: pageNav,\n url: locationUtil.getUrlForPartial(locationService.getLocation(), {\n viewPanel: viewPanel,\n editPanel: undefined,\n }),\n };\n }\n\n if (editPanel) {\n pageNav = {\n text: t('dashboard-scene.dashboard-scene.text.edit-panel', 'Edit panel'),\n parentItem: pageNav,\n };\n }\n\n return pageNav;\n }\n\n public getInitialState(): DashboardSceneState | undefined {\n return this._initialState;\n }\n\n public addPanel(vizPanel: VizPanel): void {\n if (!this.state.isEditing) {\n this.onEnterEditMode();\n }\n\n // Add panel to layout\n this.state.body.addPanel(vizPanel);\n }\n\n public createLibraryPanel(panelToReplace: VizPanel, libPanel: LibraryPanel) {\n const body = panelToReplace.clone({\n $behaviors: [new LibraryPanelBehavior({ uid: libPanel.uid, name: libPanel.name })],\n });\n\n const gridItem = panelToReplace.parent;\n\n if (!(gridItem instanceof DashboardGridItem)) {\n throw new Error(\"Trying to replace a panel that doesn't have a parent grid item\");\n }\n\n gridItem.setState({ body });\n }\n\n public duplicatePanel(vizPanel: VizPanel) {\n getLayoutManagerFor(vizPanel).duplicatePanel?.(vizPanel);\n }\n\n public copyPanel(vizPanel: VizPanel) {\n if (config.featureToggles.dashboardNewLayouts) {\n const gridItem = vizPanel.parent;\n\n if (gridItem instanceof AutoGridItem) {\n const elements = getElement(gridItem, this);\n const gridItemKind = serializeAutoGridItem(gridItem);\n\n clearClipboard();\n store.set(LS_PANEL_COPY_KEY, JSON.stringify({ elements, gridItem: gridItemKind }));\n } else if (gridItem instanceof DashboardGridItem) {\n const elements = getElement(gridItem, this);\n const gridItemKind = gridItemToGridLayoutItemKind(gridItem);\n\n clearClipboard();\n store.set(LS_PANEL_COPY_KEY, JSON.stringify({ elements, gridItem: gridItemKind }));\n } else {\n console.error('Trying to copy a panel that is not DashboardGridItem child');\n throw new Error('Trying to copy a panel that is not DashboardGridItem child');\n }\n return;\n }\n\n if (!vizPanel.parent) {\n return;\n }\n\n let gridItem = vizPanel.parent;\n\n if (!(gridItem instanceof DashboardGridItem)) {\n console.error('Trying to copy a panel that is not DashboardGridItem child');\n throw new Error('Trying to copy a panel that is not DashboardGridItem child');\n }\n\n const jsonData = gridItemToPanel(gridItem);\n\n clearClipboard();\n store.set(LS_PANEL_COPY_KEY, JSON.stringify(jsonData));\n }\n\n public pastePanel() {\n const jsonData = store.get(LS_PANEL_COPY_KEY);\n const jsonObj = JSON.parse(jsonData);\n const panelModel = new PanelModel(jsonObj);\n const gridItem = buildGridItemForPanel(panelModel);\n const panel = gridItem.state.body;\n\n this.addPanel(panel);\n\n store.delete(LS_PANEL_COPY_KEY);\n }\n\n public removePanel(panel: VizPanel) {\n getLayoutManagerFor(panel).removePanel?.(panel);\n }\n\n public unlinkLibraryPanel(panel: VizPanel) {\n if (!panel.parent) {\n return;\n }\n\n const gridItem = panel.parent;\n\n if (!(gridItem instanceof DashboardGridItem)) {\n console.error('Trying to unlink a lib panel in a layout that is not DashboardGridItem');\n return;\n }\n\n gridItem.state.body.setState({ $behaviors: undefined });\n }\n\n public showModal(modal: SceneObject) {\n this.setState({ overlay: modal });\n }\n\n public closeModal() {\n this.setState({ overlay: undefined });\n }\n\n public async onStarDashboard(isStarred?: boolean) {\n const { meta, uid } = this.state;\n isStarred = isStarred ?? Boolean(meta.isStarred);\n if (!uid) {\n return;\n }\n try {\n const result = await getDashboardSrv().starDashboard(uid, isStarred);\n\n this.setState({\n meta: {\n ...meta,\n isStarred: result,\n },\n });\n } catch (err) {\n console.error('Failed to star dashboard', err);\n }\n }\n\n public onOpenSettings = () => {\n locationService.partial({ editview: 'settings' });\n };\n\n public onShowAddLibraryPanelDrawer(panelToReplaceRef?: SceneObjectRef<VizPanel>) {\n this.setState({\n overlay: new AddLibraryPanelDrawer({ panelToReplaceRef }),\n });\n }\n\n public onCreateNewRow() {\n return addNewRowTo(this.state.body);\n }\n\n public onCreateNewPanel(): VizPanel {\n const profiler = getDashboardSceneProfiler();\n const vizPanel = getDefaultVizPanel();\n profiler.attachProfilerToPanel(vizPanel);\n\n this.addPanel(vizPanel);\n return vizPanel;\n }\n\n public switchLayout(layout: DashboardLayoutManager, skipUndo?: boolean) {\n const currentLayout = this.state.body;\n const perform = () => this.setState({ body: layout });\n const undo = () => this.setState({ body: currentLayout });\n if (skipUndo) {\n perform();\n } else {\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.switch-layout', 'Switch layout'),\n source: this,\n perform,\n undo,\n });\n }\n }\n\n public getLayout(): DashboardLayoutManager {\n return this.state.body;\n }\n\n /**\n * Called by the SceneQueryRunner to provide contextual parameters (tracking) props for the request\n */\n public enrichDataRequest(sceneObject: SceneObject): Partial<DataQueryRequest> {\n const dashboard = getDashboardSceneFor(sceneObject);\n\n let panel = getClosestVizPanel(sceneObject);\n\n if (dashboard.state.isEditing && dashboard.state.editPanel) {\n panel = dashboard.state.editPanel.state.panelRef.resolve();\n }\n\n let panelId = 0;\n\n if (panel && panel.state.key) {\n if (isRepeatCloneOrChildOf(panel)) {\n // We check if any of the panel ancestors are clones because we can't use the original panel ID in this case\n panelId = djb2Hash(panel.getPathId());\n } else {\n // Otherwise, it's the absolute original panel, and we can use the key directly\n // getPanelIdForVizPanel extracts the panel ID from the key so we don't need to do it manually\n panelId = getPanelIdForVizPanel(panel);\n }\n }\n\n return {\n app: CoreApp.Dashboard,\n dashboardUID: this.state.uid,\n panelId,\n panelName: panel?.state?.title,\n panelPluginId: panel?.state.pluginId,\n dashboardTitle: this.state.title,\n };\n }\n\n canEditDashboard() {\n const { meta } = this.state;\n\n return Boolean(meta.canEdit || meta.canMakeEditable || config.viewersCanEdit);\n }\n\n public getInitialSaveModel() {\n return this.serializer.initialSaveModel;\n }\n\n public getSnapshotUrl = () => {\n return this.serializer.getSnapshotUrl();\n };\n\n /** Hacky temp function until we refactor transformSaveModelToScene a bit */\n setInitialSaveModel(model?: Dashboard, meta?: DashboardMeta, apiVersion?: string): void;\n setInitialSaveModel(\n model?: DashboardV2Spec,\n meta?: DashboardWithAccessInfo<DashboardV2Spec>['metadata'],\n apiVersion?: string\n ): void;\n public setInitialSaveModel(\n saveModel?: Dashboard | DashboardV2Spec,\n meta?: DashboardMeta | DashboardWithAccessInfo<DashboardV2Spec>['metadata'],\n apiVersion?: string\n ): void {\n this.serializer.initializeElementMapping(saveModel);\n this.serializer.initializeDSReferencesMapping(saveModel);\n const sortedModel = sortedDeepCloneWithoutNulls(saveModel);\n this.serializer.initialSaveModel = sortedModel;\n this.serializer.metadata = meta;\n this.serializer.apiVersion = apiVersion;\n }\n\n public getTrackingInformation() {\n return this.serializer.getTrackingInformation(this);\n }\n\n public getDynamicDashboardsTrackingInformation() {\n return this.serializer.getDynamicDashboardsTrackingInformation(this);\n }\n\n public async onDashboardDelete() {\n // Need to mark it non dirty to navigate away without unsaved changes warning\n this.setState({ isDirty: false });\n locationService.replace('/');\n }\n\n public getDashboardPanels() {\n return dashboardSceneGraph.getVizPanels(this);\n }\n\n public getExpressionTypes(saveModel?: Dashboard | DashboardV2Spec): string[] | undefined {\n const model = saveModel ?? this.getSaveModel();\n\n const expressionTypes = new Set<string>();\n\n // Handle V1 dashboards\n if ('panels' in model && model.panels) {\n for (const panel of model.panels) {\n // Skip panels without targets (e.g., row panels)\n if (!('targets' in panel) || !panel.targets?.length) {\n continue;\n }\n\n for (const target of panel.targets) {\n // Only count if it's actually an expression query\n const datasourceUid =\n target?.datasource && typeof target.datasource === 'object' && 'uid' in target.datasource\n ? target.datasource.uid\n : undefined;\n\n const targetType = target?.type;\n if (datasourceUid === '__expr__' && typeof targetType === 'string' && targetType) {\n expressionTypes.add(targetType);\n }\n }\n }\n }\n\n // Handle V2 dashboards\n if ('elements' in model && model.elements) {\n for (const element of Object.values(model.elements)) {\n // Check if element is a Panel (not LibraryPanel)\n if (element.kind !== 'Panel') {\n continue;\n }\n\n const queries = element.spec.data?.spec?.queries;\n if (!Array.isArray(queries)) {\n continue;\n }\n\n for (const query of queries) {\n const querySpec = query?.spec?.query;\n if (!querySpec || typeof querySpec !== 'object') {\n continue;\n }\n\n const datasource = querySpec.datasource;\n const datasourceName =\n datasource && typeof datasource === 'object' && 'name' in datasource ? datasource.name : undefined;\n\n const spec = querySpec.spec;\n const queryType = spec && typeof spec === 'object' && 'type' in spec ? spec.type : undefined;\n\n if (datasourceName === '__expr__' && typeof queryType === 'string' && queryType) {\n expressionTypes.add(queryType);\n }\n }\n }\n }\n\n // Return array of expression types or undefined if no expressions\n return expressionTypes.size > 0 ? Array.from(expressionTypes) : undefined;\n }\n\n public onSetScrollRef = (scrollElement: ScrollRefElement): void => {\n this._scrollRef = scrollElement;\n };\n\n public rememberScrollPos() {\n this._prevScrollPos = this._scrollRef?.scrollTop;\n }\n\n public restoreScrollPos() {\n if (this._prevScrollPos !== undefined) {\n this._scrollRef?.scrollTo(0, this._prevScrollPos!);\n }\n }\n\n getSaveModel(): Dashboard | DashboardV2Spec {\n return this.serializer.getSaveModel(this);\n }\n\n // Get the dashboard in native K8s form (using the appropriate apiVersion)\n getSaveResource(options: SaveDashboardAsOptions): ResourceForCreate<unknown> {\n const { meta } = this.state;\n const spec = this.getSaveAsModel(options);\n\n const apiVersion = this.serializer instanceof V2DashboardSerializer ? 'v2beta1' : 'v1beta1'; // get from the dashboard?\n return {\n apiVersion: `dashboard.grafana.app/${apiVersion}`,\n kind: 'Dashboard',\n metadata: {\n ...meta.k8s,\n name: meta.uid ?? meta.k8s?.name,\n generateName: options.isNew ? 'd' : undefined,\n },\n spec,\n };\n }\n\n getSaveAsModel(options: SaveDashboardAsOptions): Dashboard | DashboardV2Spec {\n return this.serializer.getSaveAsModel(this, options);\n }\n\n getDashboardChanges(saveTimeRange?: boolean, saveVariables?: boolean, saveRefresh?: boolean): DashboardChangeInfo {\n return this.serializer.getDashboardChangesFromScene(this, { saveTimeRange, saveVariables, saveRefresh });\n }\n\n getManagerKind(): ManagerKind | undefined {\n return this.state.meta.k8s?.annotations?.[AnnoKeyManagerKind];\n }\n\n getManagerIdentity(): string | undefined {\n // get repo name if any\n return this.state.meta.k8s?.annotations?.[AnnoKeyManagerIdentity];\n }\n\n isManaged() {\n return Boolean(this.getManagerKind());\n }\n\n isManagedRepository() {\n if (!config.featureToggles.provisioning) {\n return false;\n }\n return Boolean(this.getManagerKind() === ManagerKind.Repo);\n }\n\n managedResourceCannotBeEdited() {\n return (\n this.isManaged() && !this.isManagedRepository() && !this.state.meta.k8s?.annotations?.[AnnoKeyManagerAllowsEdits]\n );\n }\n\n getPath() {\n return this.state.meta.k8s?.annotations?.[AnnoKeySourcePath];\n }\n\n private hasVariableErrors(): boolean {\n return Boolean(this.state.$variables?.state.variables.find((v) => Boolean(v.state.error)));\n }\n}\n\nexport class DashboardVariableDependency implements SceneVariableDependencyConfigLike {\n private _emptySet = new Set<string>();\n\n public constructor(private _dashboard: DashboardScene) {}\n\n getNames(): Set<string> {\n return this._emptySet;\n }\n\n public hasDependencyOn(): boolean {\n return false;\n }\n\n public variableUpdateCompleted(variable: SceneVariable, hasChanged: boolean) {\n if (hasChanged) {\n // Temp solution for some core panels (like dashlist) to know that variables have changed\n appEvents.publish(new VariablesChanged({ refreshAll: true, panelIds: [] }));\n // Backwards compat with plugins that rely on the RefreshEvent when a\n // variable changes. TODO: We should redirect plugin devs to use VariablesChanged event\n this._dashboard.publishEvent(new RefreshEvent());\n }\n\n if (variable.state.name === PANEL_SEARCH_VAR) {\n const searchValue = variable.getValue();\n if (typeof searchValue === 'string') {\n this._dashboard.setState({ panelSearch: searchValue });\n }\n } else if (variable.state.name === PANELS_PER_ROW_VAR) {\n const panelsPerRow = variable.getValue();\n if (typeof panelsPerRow === 'string') {\n const perRow = Number.parseInt(panelsPerRow, 10);\n this._dashboard.setState({ panelsPerRow: Number.isInteger(perRow) ? perRow : undefined });\n }\n }\n }\n}\n","// Libraries\nimport { toString, toNumber as _toNumber, isEmpty, isBoolean, isArray, join } from 'lodash';\n\n// Types\nimport { getFieldTypeFromValue } from '../dataframe/processDataFrame';\nimport { toUtc } from '../datetime/moment_wrapper';\nimport { dateTimeParse } from '../datetime/parser';\nimport { GrafanaTheme2 } from '../themes/types';\nimport { KeyValue } from '../types/data';\nimport { Field, FieldType } from '../types/dataFrame';\nimport { DecimalCount, DisplayProcessor, DisplayValue } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\nimport { anyToNumber } from '../utils/anyToNumber';\nimport { getValueMappingResult } from '../utils/valueMappings';\nimport { FormattedValue, getValueFormat, isBooleanUnit } from '../valueFormats/valueFormats';\n\nimport { getScaleCalculator } from './scale';\n\ninterface DisplayProcessorOptions {\n field: Partial<Field>;\n /**\n * Will pick browser timezone if not defined\n */\n timeZone?: TimeZone;\n /**\n * Will pick 'dark' if not defined\n */\n theme: GrafanaTheme2;\n}\n\n// Reasonable units for time\nconst timeFormats: KeyValue<boolean> = {\n dateTimeAsIso: true,\n dateTimeAsIsoNoDateIfToday: true,\n dateTimeAsUS: true,\n dateTimeAsUSNoDateIfToday: true,\n dateTimeAsLocal: true,\n dateTimeAsLocalNoDateIfToday: true,\n dateTimeFromNow: true,\n};\n\nexport function getDisplayProcessor(options?: DisplayProcessorOptions): DisplayProcessor {\n if (!options || isEmpty(options) || !options.field) {\n return toStringProcessor;\n }\n\n const field = options.field as Field;\n const config = field.config ?? {};\n const { palette } = options.theme.visualization;\n\n let unit = config.unit;\n let hasDateUnit = Boolean(unit && (timeFormats[unit] || unit.startsWith('time:')));\n let showMs = false;\n\n if (field.type === FieldType.time && !hasDateUnit) {\n unit = `dateTimeAsSystem`;\n hasDateUnit = true;\n if (field.values && field.values.length > 1) {\n let start = field.values[0];\n let end = field.values[field.values.length - 1];\n if (typeof start === 'string') {\n start = dateTimeParse(start).unix();\n end = dateTimeParse(end).unix();\n } else {\n start /= 1e3;\n end /= 1e3;\n }\n showMs = Math.abs(end - start) < 60; //show ms when minute or less\n }\n } else if (field.type === FieldType.boolean) {\n if (!isBooleanUnit(unit)) {\n unit = 'bool';\n }\n } else if (!unit && field.type === FieldType.string) {\n unit = 'string';\n }\n\n const hasCurrencyUnit = unit?.startsWith('currency');\n const hasBoolUnit = isBooleanUnit(unit);\n const isNumType = field.type === FieldType.number;\n const isLocaleFormat = unit === 'locale';\n const canTrimTrailingDecimalZeros =\n !hasDateUnit && !hasCurrencyUnit && !hasBoolUnit && !isLocaleFormat && isNumType && config.decimals == null;\n\n const formatFunc = getValueFormat(unit || 'none');\n const scaleFunc = getScaleCalculator(field, options.theme);\n\n return (value: unknown, adjacentDecimals?: DecimalCount) => {\n const { mappings } = config;\n const isStringUnit = unit === 'string';\n\n if (hasDateUnit && typeof value === 'string') {\n value = toUtc(value).valueOf();\n }\n\n let numeric = isStringUnit ? NaN : anyToNumber(value);\n let text: string | undefined;\n let prefix: string | undefined;\n let suffix: string | undefined;\n let color: string | undefined;\n let icon: string | undefined;\n let percent: number | undefined;\n\n if (mappings && mappings.length > 0) {\n const mappingResult = getValueMappingResult(mappings, value);\n\n if (mappingResult) {\n if (mappingResult.text != null) {\n text = mappingResult.text;\n }\n\n if (mappingResult.color != null) {\n color = options.theme.visualization.getColorByName(mappingResult.color);\n }\n\n if (mappingResult.icon != null) {\n icon = mappingResult.icon;\n }\n }\n } else if (field.type === FieldType.enum) {\n // Apply enum display handling if field is enum type and no mappings are specified\n if (value == null) {\n return {\n text: '',\n numeric: NaN,\n };\n }\n\n const enumIndex = +value;\n if (config && config.type && config.type.enum) {\n const { text: enumText, color: enumColor } = config.type.enum;\n\n text = enumText ? enumText[enumIndex] : `${value}`;\n // If no color specified in enum field config we will fallback to iterating through the theme palette\n color = enumColor ? enumColor[enumIndex] : undefined;\n\n if (color == null) {\n const namedColor = palette[enumIndex % palette.length];\n color = options.theme.visualization.getColorByName(namedColor);\n }\n }\n }\n\n if (!Number.isNaN(numeric)) {\n if (text == null && !isBoolean(value)) {\n let v: FormattedValue;\n\n if (canTrimTrailingDecimalZeros && adjacentDecimals != null) {\n v = formatFunc(numeric, adjacentDecimals, null, options.timeZone, showMs);\n\n // if no explicit decimals config, we strip trailing zeros e.g. 60.00 -> 60\n // this is needed because we may have determined the minimum determined `adjacentDecimals` for y tick increments based on\n // e.g. 'seconds' field unit (0.15s, 0.20s, 0.25s), but then formatFunc decided to return milli or nanos (150, 200, 250)\n // so we end up with excess precision: 150.00, 200.00, 250.00\n // #73795 - some units, like duration formats, return text which cannot be coerced back into a number safely at this point.\n const asNum = +v.text;\n if (!Number.isNaN(asNum)) {\n v.text = asNum + '';\n }\n } else {\n v = formatFunc(numeric, config.decimals, null, options.timeZone, showMs);\n }\n\n text = v.text;\n suffix = v.suffix;\n prefix = v.prefix;\n }\n\n // Return the value along with scale info\n if (color == null) {\n const scaleResult = scaleFunc(numeric);\n color = scaleResult.color;\n percent = scaleResult.percent;\n }\n }\n\n if (text == null && isArray(value)) {\n text = join(value, ', ');\n }\n\n if (text == null) {\n text = toString(value);\n if (!text) {\n if (config.noValue) {\n text = config.noValue;\n } else {\n text = ''; // No data?\n }\n }\n }\n\n if (!color) {\n const scaleResult = scaleFunc(-Infinity);\n color = scaleResult.color;\n percent = scaleResult.percent;\n }\n\n const display: DisplayValue = {\n text,\n numeric,\n prefix,\n suffix,\n color,\n };\n\n if (icon != null) {\n display.icon = icon;\n }\n\n if (percent != null) {\n display.percent = percent;\n }\n\n return display;\n };\n}\n\nfunction toStringProcessor(value: unknown): DisplayValue {\n return { text: toString(value), numeric: anyToNumber(value) };\n}\n\nexport function getRawDisplayProcessor(): DisplayProcessor {\n return (value: unknown) => ({\n text: getFieldTypeFromValue(value) === 'other' ? `${JSON.stringify(value, getCircularReplacer())}` : `${value}`,\n numeric: null as unknown as number,\n });\n}\n\nconst getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_key: string, value: object | null) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n};\n","import { logMeasurement, reportInteraction } from '@grafana/runtime';\nimport { performanceUtils } from '@grafana/scenes';\n\nimport { SLOW_OPERATION_THRESHOLD_MS } from './performanceConstants';\nimport {\n registerPerformanceObserver,\n getPerformanceMemory,\n writePerformanceGroupStart,\n writePerformanceGroupLog,\n writePerformanceGroupEnd,\n} from './performanceUtils';\n\n/**\n * Panel metrics structure for analytics\n */\ninterface PanelAnalyticsMetrics {\n panelId: string;\n panelKey: string;\n pluginId: string;\n pluginVersion?: string;\n totalQueryTime: number;\n totalFieldConfigTime: number;\n totalTransformationTime: number;\n totalRenderTime: number;\n pluginLoadTime: number;\n queryOperations: Array<{\n duration: number;\n timestamp: number;\n queryType?: string;\n seriesCount?: number;\n dataPointsCount?: number;\n }>;\n fieldConfigOperations: Array<{\n duration: number;\n timestamp: number;\n }>;\n transformationOperations: Array<{\n duration: number;\n timestamp: number;\n transformationId?: string;\n success?: boolean;\n outputSeriesCount?: number;\n }>;\n renderOperations: Array<{\n duration: number;\n timestamp: number;\n }>;\n}\n\n/**\n * Aggregates Scene performance events into analytics-ready panel metrics\n */\nexport class DashboardAnalyticsAggregator implements performanceUtils.ScenePerformanceObserver {\n private panelMetrics = new Map<string, PanelAnalyticsMetrics>();\n private dashboardUID = '';\n private dashboardTitle = '';\n\n public initialize(uid: string, title: string) {\n // Clear previous dashboard data and set new context\n this.panelMetrics.clear();\n this.dashboardUID = uid;\n this.dashboardTitle = title;\n }\n\n public destroy() {\n // Clear dashboard context\n this.panelMetrics.clear();\n this.dashboardUID = '';\n this.dashboardTitle = '';\n }\n\n /**\n * Clear all collected metrics (called on dashboard interaction start)\n */\n public clearMetrics() {\n this.panelMetrics.clear();\n }\n\n /**\n * Get aggregated panel metrics for analytics\n */\n public getPanelMetrics(): PanelAnalyticsMetrics[] {\n return Array.from(this.panelMetrics.values());\n }\n\n // Dashboard-level events (we don't need to track these for panel analytics)\n onDashboardInteractionStart = (data: performanceUtils.DashboardInteractionStartData): void => {\n // Clear metrics when new dashboard interaction starts\n this.clearMetrics();\n };\n\n onDashboardInteractionMilestone = (_data: performanceUtils.DashboardInteractionMilestoneData): void => {\n // No action needed for milestones in analytics\n };\n\n onDashboardInteractionComplete = (data: performanceUtils.DashboardInteractionCompleteData): void => {\n // Send analytics report for dashboard interaction completion\n this.sendAnalyticsReport(data);\n };\n\n // Panel-level events\n onPanelOperationStart = (data: performanceUtils.PanelPerformanceData): void => {\n // Start events don't need aggregation, just ensure panel exists\n this.ensurePanelExists(data.panelKey, data.panelId, data.pluginId, data.pluginVersion);\n };\n\n onPanelOperationComplete = (data: performanceUtils.PanelPerformanceData): void => {\n // Aggregate panel metrics without verbose logging (handled by ScenePerformanceLogger)\n const panel = this.panelMetrics.get(data.panelKey);\n if (!panel) {\n console.warn('Panel not found for operation completion:', data.panelKey);\n return;\n }\n\n const duration = data.duration || 0;\n\n switch (data.operation) {\n case 'fieldConfig':\n panel.totalFieldConfigTime += duration;\n panel.fieldConfigOperations.push({\n duration,\n timestamp: data.timestamp,\n });\n break;\n\n case 'transform':\n panel.totalTransformationTime += duration;\n panel.transformationOperations.push({\n duration,\n timestamp: data.timestamp,\n transformationId: data.metadata.transformationId,\n success: data.metadata.success,\n });\n break;\n\n case 'query':\n panel.totalQueryTime += duration;\n panel.queryOperations.push({\n duration,\n timestamp: data.timestamp,\n queryType: data.metadata.queryType,\n });\n break;\n\n case 'render':\n panel.totalRenderTime += duration;\n panel.renderOperations.push({\n duration,\n timestamp: data.timestamp,\n });\n break;\n\n case 'plugin-load':\n panel.pluginLoadTime += duration;\n break;\n }\n };\n\n // Query-level events\n onQueryStart = (_data: performanceUtils.QueryPerformanceData): void => {\n // no-op\n };\n\n onQueryComplete = (_data: performanceUtils.QueryPerformanceData): void => {\n // no-op\n };\n\n /**\n * Ensure a panel exists in our tracking map\n */\n private ensurePanelExists(\n panelKey: string,\n panelId: string,\n pluginId: string,\n pluginVersion?: string\n ): PanelAnalyticsMetrics {\n let panel = this.panelMetrics.get(panelKey);\n if (!panel) {\n panel = {\n panelId,\n panelKey,\n pluginId,\n pluginVersion,\n totalQueryTime: 0,\n totalFieldConfigTime: 0,\n totalTransformationTime: 0,\n totalRenderTime: 0,\n pluginLoadTime: 0,\n queryOperations: [],\n fieldConfigOperations: [],\n transformationOperations: [],\n renderOperations: [],\n };\n this.panelMetrics.set(panelKey, panel);\n }\n return panel;\n }\n\n /**\n * Send analytics report for dashboard interactions\n */\n private sendAnalyticsReport(data: performanceUtils.DashboardInteractionCompleteData): void {\n const payload = {\n duration: data.duration || 0,\n networkDuration: data.networkDuration || 0,\n startTs: data.timestamp,\n endTs: data.timestamp + (data.duration || 0),\n timeSinceBoot: performance.measure('time_since_boot', 'frontend_boot_js_done_time_seconds').duration,\n longFramesCount: data.longFramesCount,\n longFramesTotalTime: data.longFramesTotalTime,\n ...getPerformanceMemory(),\n };\n\n const panelMetrics = this.getPanelMetrics();\n\n this.logDashboardAnalyticsEvent(data, payload, panelMetrics);\n\n reportInteraction('dashboard_render', {\n interactionType: data.interactionType,\n uid: this.dashboardUID,\n ...payload,\n });\n\n logMeasurement('dashboard_render', payload, {\n interactionType: data.interactionType,\n dashboard: this.dashboardUID,\n title: this.dashboardTitle,\n });\n }\n\n /**\n * Log dashboard analytics event with panel metrics and performance insights\n */\n private logDashboardAnalyticsEvent(\n data: performanceUtils.DashboardInteractionCompleteData,\n payload: Record<string, unknown>,\n panelMetrics: PanelAnalyticsMetrics[] | null\n ): void {\n const panelCount = panelMetrics?.length || 0;\n const panelSummary = panelCount ? `${panelCount} panels analyzed` : 'No panel metrics';\n\n // Main analytics summary\n const slowPanelCount =\n panelMetrics?.filter(\n (p) =>\n p.totalQueryTime + p.totalTransformationTime + p.totalRenderTime + p.totalFieldConfigTime + p.pluginLoadTime >\n SLOW_OPERATION_THRESHOLD_MS\n ).length || 0;\n\n writePerformanceGroupStart(\n 'DAA',\n `[ANALYTICS] ${data.interactionType} | ${panelSummary}${slowPanelCount > 0 ? ` | ${slowPanelCount} slow panels ⚠️` : ''}`\n );\n\n // Dashboard overview\n writePerformanceGroupLog('DAA', '📊 Dashboard (ms):', {\n duration: Math.round((data.duration || 0) * 10) / 10,\n network: Math.round((data.networkDuration || 0) * 10) / 10,\n interactionType: data.interactionType,\n slowPanels: slowPanelCount,\n });\n\n // Analytics payload\n writePerformanceGroupLog('DAA', '📈 Analytics payload:', payload);\n\n // Individual collapsible panel logs with detailed breakdown\n if (panelMetrics && panelMetrics.length > 0) {\n panelMetrics.forEach((panel) => {\n const totalPanelTime =\n panel.totalQueryTime +\n panel.totalTransformationTime +\n panel.totalRenderTime +\n panel.totalFieldConfigTime +\n panel.pluginLoadTime;\n\n const isSlowPanel = totalPanelTime > SLOW_OPERATION_THRESHOLD_MS;\n const slowWarning = isSlowPanel ? ' ⚠️ SLOW' : '';\n\n writePerformanceGroupStart(\n 'DAA',\n `🎨 Panel ${panel.pluginId}-${panel.panelId}: ${totalPanelTime.toFixed(1)}ms total${slowWarning}`\n );\n\n writePerformanceGroupLog('DAA', '🔧 Plugin:', {\n id: panel.pluginId,\n version: panel.pluginVersion || 'unknown',\n panelId: panel.panelId,\n panelKey: panel.panelKey,\n });\n\n writePerformanceGroupLog('DAA', '⚡ Performance (ms):', {\n totalTime: Math.round(totalPanelTime * 10) / 10, // Round to 1 decimal\n isSlowPanel: isSlowPanel,\n breakdown: {\n query: Math.round(panel.totalQueryTime * 10) / 10,\n transform: Math.round(panel.totalTransformationTime * 10) / 10,\n render: Math.round(panel.totalRenderTime * 10) / 10,\n fieldConfig: Math.round(panel.totalFieldConfigTime * 10) / 10,\n pluginLoad: Math.round(panel.pluginLoadTime * 10) / 10,\n },\n });\n\n if (panel.queryOperations.length > 0) {\n writePerformanceGroupLog('DAA', '📊 Queries:', {\n count: panel.queryOperations.length,\n details: panel.queryOperations.map((op, index) => ({\n operation: index + 1,\n duration: Math.round(op.duration * 10) / 10,\n timestamp: op.timestamp,\n queryType: op.queryType || 'unknown',\n })),\n });\n }\n\n if (panel.transformationOperations.length > 0) {\n writePerformanceGroupLog('DAA', '🔄 Transformations:', {\n count: panel.transformationOperations.length,\n details: panel.transformationOperations.map((op, index) => ({\n operation: index + 1,\n duration: Math.round(op.duration * 10) / 10,\n timestamp: op.timestamp,\n transformationId: op.transformationId || 'unknown',\n success: op.success !== false,\n })),\n });\n }\n\n if (panel.renderOperations.length > 0) {\n writePerformanceGroupLog('DAA', '🎨 Renders:', {\n count: panel.renderOperations.length,\n details: panel.renderOperations.map((op, index) => ({\n operation: index + 1,\n duration: Math.round(op.duration * 10) / 10,\n timestamp: op.timestamp,\n })),\n });\n }\n\n if (panel.fieldConfigOperations.length > 0) {\n writePerformanceGroupLog('DAA', '⚙️ FieldConfigs:', {\n count: panel.fieldConfigOperations.length,\n details: panel.fieldConfigOperations.map((op, index) => ({\n operation: index + 1,\n duration: Math.round(op.duration * 10) / 10,\n timestamp: op.timestamp,\n })),\n });\n }\n\n writePerformanceGroupEnd();\n });\n }\n\n writePerformanceGroupEnd();\n }\n}\n\n// Global singleton instance with lazy initialization\nlet dashboardAnalyticsAggregator: DashboardAnalyticsAggregator | null = null;\n\nexport function initializeDashboardAnalyticsAggregator(): DashboardAnalyticsAggregator {\n if (!dashboardAnalyticsAggregator) {\n dashboardAnalyticsAggregator = new DashboardAnalyticsAggregator();\n\n // Register as global performance observer\n registerPerformanceObserver(dashboardAnalyticsAggregator, 'DAA');\n }\n return dashboardAnalyticsAggregator;\n}\n\nexport function getDashboardAnalyticsAggregator(): DashboardAnalyticsAggregator {\n return initializeDashboardAnalyticsAggregator();\n}\n","import { GrafanaRulesSourceSymbol, RulesSource } from 'app/types/unified-alerting';\n\nimport { featureDiscoveryApi } from '../api/featureDiscoveryApi';\nimport { getRulesSourceName } from '../utils/datasource';\n\nconst { useDiscoverDsFeaturesQuery } = featureDiscoveryApi;\n\n// datasource has ruler if the discovery api returns a rulerConfig\n/** @deprecated use useHasRulerV2 instead */\nexport function useHasRuler(rulesSource: RulesSource) {\n const rulesSourceName = getRulesSourceName(rulesSource);\n\n const { currentData: dsFeatures } = useDiscoverDsFeaturesQuery({ rulesSourceName });\n const hasRuler = Boolean(dsFeatures?.rulerConfig);\n\n return { hasRuler, rulerConfig: dsFeatures?.rulerConfig };\n}\n\nexport function useHasRulerV2(ruleUid: string | typeof GrafanaRulesSourceSymbol) {\n const { currentData: dsFeatures } = useDiscoverDsFeaturesQuery({ uid: ruleUid });\n const hasRuler = Boolean(dsFeatures?.rulerConfig);\n\n return { hasRuler, rulerConfig: dsFeatures?.rulerConfig };\n}\n","import { SceneTimeRange } from '@grafana/scenes';\nimport store from 'app/core/store';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { DASHBOARD_FROM_LS_KEY, DashboardDTO } from 'app/types/dashboard';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { buildGridItemForPanel } from '../serialization/transformSaveModelToScene';\n\nexport function addPanelsOnLoadBehavior(scene: DashboardScene) {\n const dto = store.getObject<DashboardDTO>(DASHBOARD_FROM_LS_KEY);\n\n if (dto) {\n const model = new DashboardModel(dto.dashboard);\n\n for (const panel of model.panels) {\n const gridItem = buildGridItemForPanel(panel);\n scene.addPanel(gridItem.state.body);\n }\n\n if (dto.dashboard.time) {\n const newTimeRange = new SceneTimeRange({ from: dto.dashboard.time.from, to: dto.dashboard.time.to });\n const timeRange = scene.state.$timeRange;\n if (timeRange) {\n timeRange.setState({\n value: newTimeRange.state.value,\n from: newTimeRange.state.from,\n to: newTimeRange.state.to,\n });\n }\n }\n }\n\n store.delete(DASHBOARD_FROM_LS_KEY);\n}\n","import { PanelModel } from '../dashboard/state/PanelModel';\n\nimport { addLibraryPanel, updateLibraryPanel } from './state/api';\nimport { LibraryElementDTO, PanelModelWithLibraryPanel } from './types';\n\nexport async function saveAndRefreshLibraryPanel(panel: PanelModel, folderUid: string): Promise<LibraryElementDTO> {\n const panelSaveModel = toPanelSaveModel(panel);\n const savedPanel = await saveOrUpdateLibraryPanel(panelSaveModel, folderUid);\n updatePanelModelWithUpdate(panel, savedPanel);\n return savedPanel;\n}\n\nfunction toPanelSaveModel(panel: PanelModel) {\n let { scopedVars, ...panelSaveModel } = panel.getSaveModel();\n panelSaveModel = {\n libraryPanel: {\n name: panel.title,\n uid: undefined,\n },\n ...panelSaveModel,\n };\n\n return panelSaveModel;\n}\n\nfunction updatePanelModelWithUpdate(panel: PanelModel, updated: LibraryElementDTO): void {\n panel.restoreModel({\n ...updated.model,\n configRev: 0, // reset config rev, since changes have been saved\n libraryPanel: updated,\n title: panel.title,\n });\n panel.hasSavedPanelEditChange = true;\n panel.refresh();\n}\n\nfunction saveOrUpdateLibraryPanel(panel: PanelModelWithLibraryPanel, folderUid: string): Promise<LibraryElementDTO> {\n if (!panel.libraryPanel) {\n return Promise.reject();\n }\n\n if (panel.libraryPanel && panel.libraryPanel.uid === '') {\n return addLibraryPanel(panel, folderUid!);\n }\n\n return updateLibraryPanel(panel);\n}\n","import useAsyncFn from 'react-use/lib/useAsyncFn';\n\nimport { t } from '@grafana/i18n';\nimport { isFetchError } from '@grafana/runtime';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\n\nimport { saveAndRefreshLibraryPanel } from '../utils';\n\nexport const usePanelSave = () => {\n const notifyApp = useAppNotification();\n\n const [state, saveLibraryPanel] = useAsyncFn(async (panel: PanelModel, folderUid: string) => {\n try {\n const libEl = await saveAndRefreshLibraryPanel(panel, folderUid);\n notifyApp.success(t('library-panels.save.success', 'Library panel saved'));\n return libEl;\n } catch (err) {\n if (isFetchError(err)) {\n err.isHandled = true;\n notifyApp.error(\n t('library-panels.save.error', 'Error saving library panel: \"{{errorMsg}}\"', {\n errorMsg: err.message ?? err.data.message,\n })\n );\n }\n throw err;\n }\n }, []);\n\n return { state, saveLibraryPanel };\n};\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { AppNotification, AppNotificationSeverity, AppNotificationsState } from 'app/types/appNotifications';\n\nconst MAX_STORED_NOTIFICATIONS = 25;\nexport const STORAGE_KEY = 'notifications';\nexport const NEW_NOTIFS_KEY = `${STORAGE_KEY}/lastRead`;\ntype StoredNotification = Omit<AppNotification, 'component'>;\n\nexport const initialState: AppNotificationsState = {\n byId: deserializeNotifications(),\n lastRead: Number.parseInt(window.localStorage.getItem(NEW_NOTIFS_KEY) ?? `${Date.now()}`, 10),\n};\n\n/**\n * Reducer and action to show toast notifications of various types (success, warnings, errors etc). Use to show\n * transient info to user, like errors that cannot be otherwise handled or success after an action.\n *\n * Use factory functions in core/copy/appNotifications to create the payload.\n */\nconst appNotificationsSlice = createSlice({\n name: 'appNotifications',\n initialState,\n reducers: {\n notifyApp: (state, { payload: newAlert }: PayloadAction<AppNotification>) => {\n if (Object.values(state.byId).some((alert) => isSimilar(newAlert, alert) && alert.showing)) {\n return;\n }\n\n state.byId[newAlert.id] = newAlert;\n serializeNotifications(state.byId);\n },\n hideAppNotification: (state, { payload: alertId }: PayloadAction<string>) => {\n if (!(alertId in state.byId)) {\n return;\n }\n\n state.byId[alertId].showing = false;\n serializeNotifications(state.byId);\n },\n clearNotification: (state, { payload: alertId }: PayloadAction<string>) => {\n delete state.byId[alertId];\n serializeNotifications(state.byId);\n },\n clearAllNotifications: (state) => {\n state.byId = {};\n serializeNotifications(state.byId);\n },\n readAllNotifications: (state, { payload: timestamp }: PayloadAction<number>) => {\n state.lastRead = timestamp;\n },\n },\n});\n\nexport const { notifyApp, hideAppNotification, clearNotification, clearAllNotifications, readAllNotifications } =\n appNotificationsSlice.actions;\n\nexport const appNotificationsReducer = appNotificationsSlice.reducer;\n\n// Selectors\n\nexport const selectLastReadTimestamp = (state: AppNotificationsState) => state.lastRead;\nexport const selectById = (state: AppNotificationsState) => state.byId;\nexport const selectAll = createSelector(selectById, (byId) =>\n Object.values(byId).sort((a, b) => b.timestamp - a.timestamp)\n);\nexport const selectWarningsAndErrors = createSelector(selectAll, (all) => all.filter(isAtLeastWarning));\nexport const selectVisible = createSelector(selectById, (byId) => Object.values(byId).filter((n) => n.showing));\n\n// Helper functions\n\nfunction isSimilar(a: AppNotification, b: AppNotification): boolean {\n return a.icon === b.icon && a.severity === b.severity && a.text === b.text && a.title === b.title;\n}\n\nfunction isAtLeastWarning(notif: AppNotification) {\n return notif.severity === AppNotificationSeverity.Warning || notif.severity === AppNotificationSeverity.Error;\n}\n\nfunction isStoredNotification(obj: unknown): obj is StoredNotification {\n return typeof obj === 'object' && obj !== null && 'id' in obj && 'icon' in obj && 'title' in obj && 'text' in obj;\n}\n\n// (De)serialization\n\nexport function deserializeNotifications(): Record<string, StoredNotification> {\n const storedNotifsRaw = window.localStorage.getItem(STORAGE_KEY);\n if (!storedNotifsRaw) {\n return {};\n }\n\n const parsed = JSON.parse(storedNotifsRaw);\n if (!Object.values(parsed).every((v) => isStoredNotification(v))) {\n return {};\n }\n\n return parsed;\n}\n\nfunction serializeNotifications(notifs: Record<string, StoredNotification>) {\n const reducedNotifs = Object.values(notifs)\n .filter(isAtLeastWarning)\n .sort((a, b) => b.timestamp - a.timestamp)\n .slice(0, MAX_STORED_NOTIFICATIONS)\n .reduce<Record<string, StoredNotification>>((prev, cur) => {\n prev[cur.id] = {\n id: cur.id,\n severity: cur.severity,\n icon: cur.icon,\n title: cur.title,\n text: cur.text,\n traceId: cur.traceId,\n timestamp: cur.timestamp,\n // we don't care about still showing toasts after refreshing\n // https://github.com/grafana/grafana/issues/71932\n showing: false,\n };\n\n return prev;\n }, {});\n\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(reducedNotifs));\n } catch (err) {\n console.error('Unable to persist notifications to local storage');\n console.error(err);\n }\n}\n","import { t } from '@grafana/i18n';\nimport { ConfirmModal } from '@grafana/ui';\n\ninterface Props {\n isOpen: boolean;\n onConfirm: () => void;\n onDismiss: () => void;\n}\n\nexport const UnlinkModal = ({ isOpen, onConfirm, onDismiss }: Props) => {\n return (\n <ConfirmModal\n title={t('dashboard-scene.unlink-modal.title-really-unlink-panel', 'Do you really want to unlink this panel?')}\n icon=\"question-circle\"\n body={t(\n 'dashboard-scene.unlink-modal.body-unlink-panel',\n 'If you unlink this panel, you will be able to edit it without affecting any other dashboards. However, once you make a change you will not be able to revert to its original reusable panel.'\n )}\n confirmText={t('dashboard-scene.unlink-modal.confirmText-yes-unlink', 'Yes, unlink')}\n onConfirm={() => {\n onConfirm();\n onDismiss();\n }}\n onDismiss={onDismiss}\n isOpen={isOpen}\n />\n );\n};\n","import { cx, css } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport { forwardRef, useState, useEffect, useMemo } from 'react';\nimport * as React from 'react';\nimport tinycolor from 'tinycolor2';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Input, Props as InputProps } from '../Input/Input';\n\nimport { ColorPickerProps } from './ColorPickerPopover';\n\ninterface ColorInputProps extends ColorPickerProps, Omit<InputProps, 'color' | 'onChange'> {\n isClearable?: boolean;\n buttonAriaLabel?: string;\n}\n\nconst ColorInput = forwardRef<HTMLInputElement, ColorInputProps>(\n ({ color, onChange, isClearable = false, onClick, onBlur, disabled, buttonAriaLabel, ...inputProps }, ref) => {\n const [value, setValue] = useState(color);\n const [previousColor, setPreviousColor] = useState(color);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const updateColor = useMemo(() => debounce(onChange, 100), []);\n\n useEffect(() => {\n const newColor = tinycolor(color);\n if (newColor.isValid() && color !== previousColor) {\n setValue(newColor.toString());\n setPreviousColor(color);\n }\n }, [color, previousColor]);\n\n const onChangeColor = (event: React.SyntheticEvent<HTMLInputElement>) => {\n const { value: colorValue } = event.currentTarget;\n\n setValue(colorValue);\n if (colorValue === '' && isClearable) {\n updateColor(colorValue);\n return;\n }\n const newColor = tinycolor(colorValue);\n\n if (newColor.isValid()) {\n updateColor(newColor.toString());\n }\n };\n\n const onBlurInput = (event: React.FocusEvent<HTMLInputElement>) => {\n const newColor = tinycolor(value);\n\n if (!newColor.isValid()) {\n setValue(color);\n }\n\n onBlur?.(event);\n };\n\n return (\n <Input\n {...inputProps}\n value={value}\n onChange={onChangeColor}\n disabled={disabled}\n onClick={onClick}\n onBlur={onBlurInput}\n addonBefore={<ColorPreview onClick={onClick} ariaLabel={buttonAriaLabel} disabled={disabled} color={color} />}\n ref={ref}\n />\n );\n }\n);\n\nColorInput.displayName = 'ColorInput';\n\nexport default ColorInput;\n\ninterface ColorPreviewProps {\n color: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n disabled?: boolean;\n ariaLabel?: string;\n}\n\nconst ColorPreview = ({ color, onClick, disabled, ariaLabel }: ColorPreviewProps) => {\n const styles = useStyles2(getColorPreviewStyles);\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled || !onClick}\n className={cx(\n styles,\n css({\n backgroundColor: color,\n })\n )}\n />\n );\n};\n\nconst getColorPreviewStyles = (theme: GrafanaTheme2) =>\n css({\n height: '100%',\n width: `${theme.spacing.gridSize * 4}px`,\n borderRadius: `${theme.shape.radius.default} 0 0 ${theme.shape.radius.default}`,\n border: `1px solid ${theme.colors.border.medium}`,\n });\n","import {\n FieldColorModeId,\n FieldConfigProperty,\n FieldType,\n identityOverrideProcessor,\n SetFieldConfigOptionsArgs,\n Field,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport {\n BarAlignment,\n GraphDrawStyle,\n GraphFieldConfig,\n GraphGradientMode,\n LineInterpolation,\n LineStyle,\n VisibilityMode,\n StackingMode,\n GraphThresholdsStyleMode,\n GraphTransform,\n} from '@grafana/schema';\nimport { getGraphFieldOptions, commonOptionsBuilder } from '@grafana/ui';\n\nimport { InsertNullsEditor } from './InsertNullsEditor';\nimport { LineStyleEditor } from './LineStyleEditor';\nimport { SpanNullsEditor } from './SpanNullsEditor';\nimport { ThresholdsStyleEditor } from './ThresholdsStyleEditor';\n\nexport const defaultGraphConfig: GraphFieldConfig = {\n drawStyle: GraphDrawStyle.Line,\n lineInterpolation: LineInterpolation.Linear,\n lineWidth: 1,\n fillOpacity: 0,\n gradientMode: GraphGradientMode.None,\n barAlignment: BarAlignment.Center,\n barWidthFactor: 0.6,\n stacking: {\n mode: StackingMode.None,\n group: 'A',\n },\n axisGridShow: true,\n axisCenteredZero: false,\n axisBorderShow: false,\n showValues: false,\n};\n\nexport type NullEditorSettings = { isTime: boolean };\n\nexport function getGraphFieldConfig(cfg: GraphFieldConfig, isTime = true): SetFieldConfigOptionsArgs<GraphFieldConfig> {\n const graphFieldOptions = getGraphFieldOptions();\n const categoryStyles = [t('timeseries.config.get-graph-field-config.category-graph-styles', 'Graph styles')];\n return {\n standardOptions: {\n [FieldConfigProperty.Color]: {\n settings: {\n byValueSupport: true,\n bySeriesSupport: true,\n preferThresholdsMode: false,\n },\n defaultValue: {\n mode: FieldColorModeId.PaletteClassic,\n },\n },\n [FieldConfigProperty.Links]: {\n settings: {\n showOneClick: true,\n },\n },\n [FieldConfigProperty.Actions]: {\n hideFromDefaults: false,\n },\n },\n useCustomConfig: (builder) => {\n builder\n .addRadio({\n path: 'drawStyle',\n name: t('timeseries.config.get-graph-field-config.name-style', 'Style'),\n category: categoryStyles,\n defaultValue: cfg.drawStyle,\n settings: {\n options: graphFieldOptions.drawStyle,\n },\n })\n .addRadio({\n path: 'lineInterpolation',\n name: t('timeseries.config.get-graph-field-config.name-line-interpolation', 'Line interpolation'),\n category: categoryStyles,\n defaultValue: cfg.lineInterpolation,\n settings: {\n options: graphFieldOptions.lineInterpolation,\n },\n showIf: (config) => config.drawStyle === GraphDrawStyle.Line,\n })\n .addRadio({\n path: 'barAlignment',\n name: t('timeseries.config.get-graph-field-config.name-bar-alignment', 'Bar alignment'),\n category: categoryStyles,\n defaultValue: cfg.barAlignment,\n settings: {\n options: graphFieldOptions.barAlignment,\n },\n showIf: (config) => config.drawStyle === GraphDrawStyle.Bars,\n })\n .addSliderInput({\n path: 'barWidthFactor',\n name: t('timeseries.config.get-graph-field-config.name-bar-width-factor', 'Bar width factor'),\n category: categoryStyles,\n defaultValue: cfg.barWidthFactor,\n settings: {\n min: 0.1,\n max: 1.0,\n step: 0.1,\n ariaLabelForHandle: t(\n 'timeseries.config.get-graph-field-config.aria-label-bar-width-factor',\n 'Bar width factor'\n ),\n },\n showIf: (config) => config.drawStyle === GraphDrawStyle.Bars,\n })\n .addSliderInput({\n path: 'lineWidth',\n name: t('timeseries.config.get-graph-field-config.name-line-width', 'Line width'),\n category: categoryStyles,\n defaultValue: cfg.lineWidth,\n settings: {\n min: 0,\n max: 10,\n step: 1,\n ariaLabelForHandle: t('timeseries.config.get-graph-field-config.aria-label-line-width', 'Line width'),\n },\n showIf: (config) => config.drawStyle !== GraphDrawStyle.Points,\n })\n .addSliderInput({\n path: 'fillOpacity',\n name: t('timeseries.config.get-graph-field-config.name-fill-opacity', 'Fill opacity'),\n category: categoryStyles,\n defaultValue: cfg.fillOpacity,\n settings: {\n min: 0,\n max: 100,\n step: 1,\n ariaLabelForHandle: t('timeseries.config.get-graph-field-config.aria-label-fill-opacity', 'Fill opacity'),\n },\n showIf: (config) => config.drawStyle !== GraphDrawStyle.Points,\n })\n .addRadio({\n path: 'gradientMode',\n name: t('timeseries.config.get-graph-field-config.name-gradient-mode', 'Gradient mode'),\n category: categoryStyles,\n defaultValue: graphFieldOptions.fillGradient[0].value,\n settings: {\n options: graphFieldOptions.fillGradient,\n },\n showIf: (config) => config.drawStyle !== GraphDrawStyle.Points,\n })\n .addFieldNamePicker({\n path: 'fillBelowTo',\n name: t('timeseries.config.get-graph-field-config.name-fill-below-to', 'Fill below to'),\n category: categoryStyles,\n hideFromDefaults: true,\n settings: {\n filter: (field: Field) => field.type === FieldType.number,\n },\n })\n .addCustomEditor<void, LineStyle>({\n id: 'lineStyle',\n path: 'lineStyle',\n name: t('timeseries.config.get-graph-field-config.name-line-style', 'Line style'),\n category: categoryStyles,\n showIf: (config) => config.drawStyle === GraphDrawStyle.Line,\n editor: LineStyleEditor,\n override: LineStyleEditor,\n process: identityOverrideProcessor,\n shouldApply: (field) => field.type === FieldType.number,\n })\n .addCustomEditor<NullEditorSettings, boolean>({\n id: 'spanNulls',\n path: 'spanNulls',\n name: t('timeseries.config.get-graph-field-config.name-connect-nulls', 'Connect null values'),\n category: categoryStyles,\n defaultValue: false,\n editor: SpanNullsEditor,\n override: SpanNullsEditor,\n showIf: (config) => config.drawStyle === GraphDrawStyle.Line,\n shouldApply: (field) => field.type !== FieldType.time,\n process: identityOverrideProcessor,\n settings: { isTime },\n })\n .addCustomEditor<NullEditorSettings, boolean>({\n id: 'insertNulls',\n path: 'insertNulls',\n name: t('timeseries.config.get-graph-field-config.name-disconnect-values', 'Disconnect values'),\n category: categoryStyles,\n defaultValue: false,\n editor: InsertNullsEditor,\n override: InsertNullsEditor,\n showIf: (config) => config.drawStyle === GraphDrawStyle.Line,\n shouldApply: (field) => field.type !== FieldType.time,\n process: identityOverrideProcessor,\n settings: { isTime },\n })\n .addRadio({\n path: 'showPoints',\n name: t('timeseries.config.get-graph-field-config.name-show-points', 'Show points'),\n category: categoryStyles,\n defaultValue: graphFieldOptions.showPoints[0].value,\n settings: {\n options: graphFieldOptions.showPoints,\n },\n showIf: (config) => config.drawStyle !== GraphDrawStyle.Points,\n })\n .addBooleanSwitch({\n path: 'showValues',\n name: t('timeseries.config.get-graph-field-config.name-show-values', 'Show values'),\n category: categoryStyles,\n defaultValue: false,\n showIf: (config) => config.showPoints !== VisibilityMode.Never || config.drawStyle === GraphDrawStyle.Points,\n })\n .addSliderInput({\n path: 'pointSize',\n name: t('timeseries.config.get-graph-field-config.name-point-size', 'Point size'),\n category: categoryStyles,\n defaultValue: 5,\n settings: {\n min: 1,\n max: 40,\n step: 1,\n ariaLabelForHandle: t('timeseries.config.get-graph-field-config.aria-label-point-size', 'Point size'),\n },\n showIf: (config) => config.showPoints !== VisibilityMode.Never || config.drawStyle === GraphDrawStyle.Points,\n });\n\n commonOptionsBuilder.addStackingConfig(builder, cfg.stacking, categoryStyles);\n\n builder.addSelect({\n category: categoryStyles,\n name: t('timeseries.config.get-graph-field-config.name-transform', 'Transform'),\n path: 'transform',\n settings: {\n options: [\n {\n label: t('timeseries.config.get-graph-field-config.transform-options.label-constant', 'Constant'),\n value: GraphTransform.Constant,\n description: t(\n 'timeseries.config.get-graph-field-config.transform-options.description-constant',\n 'The first value will be shown as a constant line'\n ),\n },\n {\n label: t('timeseries.config.get-graph-field-config.transform-options.label-style', 'Negative Y'),\n value: GraphTransform.NegativeY,\n description: t(\n 'timeseries.config.get-graph-field-config.transform-options.description-style',\n 'Flip the results to negative values on the y axis'\n ),\n },\n ],\n isClearable: true,\n },\n hideFromDefaults: true,\n });\n\n commonOptionsBuilder.addAxisConfig(builder, cfg);\n commonOptionsBuilder.addHideFrom(builder);\n\n builder.addCustomEditor({\n id: 'thresholdsStyle',\n path: 'thresholdsStyle',\n name: t('timeseries.config.get-graph-field-config.name-show-thresholds', 'Show thresholds'),\n category: [t('timeseries.config.get-graph-field-config.category-thresholds', 'Thresholds')],\n defaultValue: { mode: GraphThresholdsStyleMode.Off },\n settings: {\n options: graphFieldOptions.thresholdsDisplayModes,\n },\n editor: ThresholdsStyleEditor,\n override: ThresholdsStyleEditor,\n process: identityOverrideProcessor,\n shouldApply: () => true,\n });\n },\n };\n}\n","import { DataQuery, DataQueryRequest, DataSourceJsonData, TimeRange } from '@grafana/data';\n\nimport {\n LokiDataQuery as LokiQueryFromSchema,\n LokiQueryType,\n SupportingQueryType,\n LokiQueryDirection,\n} from './dataquery.gen';\n\nexport { LokiQueryDirection, LokiQueryType, SupportingQueryType };\n\nexport enum LokiResultType {\n Stream = 'streams',\n Vector = 'vector',\n Matrix = 'matrix',\n}\n\nexport enum LabelType {\n Indexed = 'I',\n StructuredMetadata = 'S',\n Parsed = 'P',\n}\n\nexport interface LokiQuery extends LokiQueryFromSchema {\n direction?: LokiQueryDirection;\n /** Used only to identify supporting queries, e.g. logs volume, logs sample and data sample */\n supportingQueryType?: SupportingQueryType;\n // CUE autogenerates `queryType` as `?string`, as that's how it is defined\n // in the parent-interface (in DataQuery).\n // the temporary fix (until this gets improved in the codegen), is to\n // override it here\n queryType?: LokiQueryType;\n}\n\nexport interface LokiOptions extends DataSourceJsonData {\n maxLines?: string;\n derivedFields?: DerivedFieldConfig[];\n alertmanager?: string;\n keepCookies?: string[];\n}\n\nexport interface LokiStreamResult {\n stream: Record<string, string>;\n values: Array<[string, string]>;\n}\n\nexport interface LokiTailResponse {\n streams: LokiStreamResult[];\n dropped_entries?: Array<{\n labels: Record<string, string>;\n timestamp: string;\n }> | null;\n}\n\nexport type DerivedFieldConfig = {\n matcherRegex: string;\n name: string;\n url?: string;\n urlDisplayLabel?: string;\n datasourceUid?: string;\n matcherType?: 'label' | 'regex';\n targetBlank?: boolean;\n};\n\nexport enum LokiVariableQueryType {\n LabelNames,\n LabelValues,\n}\n\nexport interface LokiVariableQuery extends DataQuery {\n type: LokiVariableQueryType;\n label?: string;\n stream?: string;\n}\n\nexport interface QueryStats {\n streams: number;\n chunks: number;\n bytes: number;\n entries: number;\n // The error message displayed in the UI when we cant estimate the size of the query.\n message?: string;\n}\n\nexport interface ContextFilter {\n enabled: boolean;\n label: string;\n value: string;\n nonIndexed: boolean;\n}\n\nexport interface ParserAndLabelKeysResult {\n extractedLabelKeys: string[];\n structuredMetadataKeys: string[];\n hasJSON: boolean;\n hasLogfmt: boolean;\n hasPack: boolean;\n unwrapLabelKeys: string[];\n}\n\nexport interface DetectedFieldsResult {\n fields: Array<{\n label: string;\n type: 'bytes' | 'float' | 'int' | 'string' | 'duration';\n cardinality: number;\n parsers: Array<'logfmt' | 'json'> | null;\n }>;\n limit: number;\n}\n\nexport type LokiGroupedRequest = { request: DataQueryRequest<LokiQuery>; partition: TimeRange[] };\n","import { VizPanel } from '@grafana/scenes';\nimport { createAndCopyShareDashboardLink } from 'app/core/utils/shortLinks';\nimport { getTrackingSource } from 'app/features/dashboard/components/ShareModal/utils';\n\nimport store from '../../../../core/store';\nimport { DashboardScene } from '../../scene/DashboardScene';\nimport { DashboardInteractions } from '../../utils/interactions';\n\nexport type ShareLinkConfiguration = {\n useAbsoluteTimeRange: boolean;\n useShortUrl: boolean;\n theme: string;\n};\n\nconst DEFAULT_SHARE_LINK_CONFIGURATION: ShareLinkConfiguration = {\n useAbsoluteTimeRange: true,\n useShortUrl: true,\n theme: 'current',\n};\n\nexport const buildShareUrl = async (dashboard: DashboardScene, panel?: VizPanel) => {\n const { useAbsoluteTimeRange, useShortUrl, theme } = getShareLinkConfiguration();\n DashboardInteractions.shareLinkCopied({\n currentTimeRange: useAbsoluteTimeRange,\n theme,\n shortenURL: useShortUrl,\n shareResource: getTrackingSource(panel?.getRef()),\n });\n return await createAndCopyShareDashboardLink(dashboard, {\n useAbsoluteTimeRange,\n theme,\n useShortUrl,\n });\n};\n\nconst SHARE_LINK_CONFIGURATION = 'grafana.dashboard.link.shareConfiguration';\n// Function that returns share link configuration from local storage\nexport function getShareLinkConfiguration(): ShareLinkConfiguration {\n if (store.exists(SHARE_LINK_CONFIGURATION)) {\n return store.getObject(SHARE_LINK_CONFIGURATION) || DEFAULT_SHARE_LINK_CONFIGURATION;\n }\n\n return DEFAULT_SHARE_LINK_CONFIGURATION;\n}\n\nexport function updateShareLinkConfiguration(config: ShareLinkConfiguration) {\n store.setObject(SHARE_LINK_CONFIGURATION, config);\n}\n","/**\n * Originally from https://github.com/ccampbell/mousetrap\n *\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.5\n * @url craig.is/killing/mice\n */\n\ninterface ExtendedKeyboardEvent extends KeyboardEvent {\n returnValue: boolean; // IE returnValue\n}\n\ntype MousetrapCallback = (e: ExtendedKeyboardEvent, combo: string) => boolean | void;\n\ninterface KeyInfo {\n key: string;\n modifiers: string[];\n action: string;\n}\n\ninterface CallbackInfo {\n /**\n * Modifiers (such as `ctrl`) involved in this binding\n */\n modifiers: string[];\n\n /**\n * A single key press binding, such as `t` (for `t v`) or `ctrl + z`\n */\n combo: string;\n\n /**\n * If this binding is a part of a sequence (`t v`, but not `ctrl + z`), this is the full sequence\n */\n seq?: string;\n\n /**\n * The event type, such as keydown, keyup, or keypress\n */\n action: string;\n level: number | undefined;\n callback: MousetrapCallback;\n}\n\n/**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n */\nlet MAP: Record<string, string> = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta',\n};\n\n/**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n */\nlet KEYCODE_MAP: Record<string, string> = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n};\n\n/**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n */\nlet SHIFT_MAP: Record<string, string> = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n $: '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n _: '-',\n '+': '=',\n ':': ';',\n '\"': \"'\",\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\',\n};\n\n/**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n */\nlet SPECIAL_ALIASES: Record<string, string> = {\n option: 'alt',\n command: 'meta',\n return: 'enter',\n escape: 'esc',\n plus: '+',\n mod: /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl',\n};\n\n/**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n */\nlet REVERSE_MAP: Record<string, string> | null = null;\n\n/**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\nfor (let i = 1; i < 20; ++i) {\n MAP[111 + i] = 'f' + i;\n}\n\n/**\n * loop through to map numbers on the numeric keypad\n */\nfor (let i = 0; i <= 9; ++i) {\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n MAP[i + 96] = i.toString();\n}\n\n/**\n * takes the event and returns the key character\n */\nfunction characterFromEvent(event: KeyboardEvent): string {\n // for keypress events we should return the character as is\n if (event.type === 'keypress') {\n let character = String.fromCharCode(event.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!event.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (MAP[event.which]) {\n return MAP[event.which];\n }\n\n if (KEYCODE_MAP[event.which]) {\n return KEYCODE_MAP[event.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(event.which).toLowerCase();\n}\n\n/**\n * checks if two arrays are equal\n */\nfunction modifiersMatch(modifiers1: string[], modifiers2: string[]): boolean {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n}\n\n/**\n * takes a key event and figures out what the modifiers are\n */\nfunction eventModifiers(event: KeyboardEvent): string[] {\n let modifiers = [];\n\n if (event.shiftKey) {\n modifiers.push('shift');\n }\n\n if (event.altKey) {\n modifiers.push('alt');\n }\n\n if (event.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (event.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n}\n\n/**\n * prevents default for this event\n */\nfunction preventDefault(event: KeyboardEvent): void {\n if (event.preventDefault) {\n event.preventDefault();\n return;\n }\n\n event.returnValue = false;\n}\n\n/**\n * stops propogation for this event\n */\nfunction stopPropagation(event: KeyboardEvent): void {\n if (event.stopPropagation) {\n event.stopPropagation();\n return;\n }\n\n event.cancelBubble = true;\n}\n\n/**\n * determines if the keycode specified is a modifier key or not\n */\nfunction isModifier(key: string): boolean {\n return key === 'shift' || key === 'ctrl' || key === 'alt' || key === 'meta';\n}\n\n/**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n */\nfunction getReverseMap() {\n if (!REVERSE_MAP) {\n REVERSE_MAP = {};\n for (let key in MAP) {\n const keyNumber = parseInt(key, 10);\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (keyNumber > 95 && keyNumber < 112) {\n continue;\n }\n\n if (MAP.hasOwnProperty(key)) {\n REVERSE_MAP[MAP[key]] = key;\n }\n }\n }\n return REVERSE_MAP;\n}\n\n/**\n * picks the best action based on the key combination\n */\nfunction pickBestAction(key: string, modifiers: string[], action?: string): string {\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action === 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n}\n\n/**\n * Converts from a string key combination to an array\n */\nfunction keysFromString(combination: string): string[] {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n}\n\n/**\n * Gets info for a specific key combination\n */\nfunction getKeyInfo(combination: string, action?: string): KeyInfo {\n let keys;\n let key;\n let i;\n let modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (SPECIAL_ALIASES[key]) {\n key = SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action !== 'keypress' && SHIFT_MAP[key]) {\n key = SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n if (!key) {\n throw new Error('Unable to get key');\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action,\n };\n}\n\nfunction belongsTo(element: null | ParentNode | Element | Document, ancestor: Element | Document) {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return belongsTo(element.parentNode, ancestor);\n}\n\nexport class Mousetrap {\n target: HTMLElement | Document;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n */\n _callbacks: Record<string, CallbackInfo[]> = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n */\n _directMap: Record<string, Function> = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n */\n _sequenceLevels: Record<string, number> = {};\n\n /**\n * variable to store the setTimeout call\n */\n _resetTimer: undefined | number = undefined;\n\n /**\n * temporary state where we will ignore the next keyup\n */\n _ignoreNextKeyup: boolean | string = false;\n\n /**\n * temporary state where we will ignore the next keypress\n */\n _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n */\n _nextExpectedAction: boolean | string = false;\n\n _globalCallbacks: Record<string, boolean> = {};\n\n constructor(el: HTMLElement | Document) {\n this.target = el;\n\n this.target.addEventListener('keypress', (event) => {\n if (event instanceof KeyboardEvent) {\n this._handleKeyEvent(event);\n }\n });\n this.target.addEventListener('keydown', (event) => {\n if (event instanceof KeyboardEvent) {\n this._handleKeyEvent(event);\n }\n });\n this.target.addEventListener('keyup', (event) => {\n if (event instanceof KeyboardEvent) {\n this._handleKeyEvent(event);\n }\n });\n }\n\n /**\n * resets all sequence counters except for the ones passed in\n */\n private _resetSequences = (doNotReset: Record<string, number>): void => {\n doNotReset = doNotReset || {};\n\n let activeSequences = false,\n key;\n\n for (key in this._sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n this._sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n this._nextExpectedAction = false;\n }\n };\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n */\n private _getMatches = (\n character: string,\n modifiers: string[],\n event: Pick<KeyboardEvent, 'type' | 'metaKey' | 'ctrlKey'>,\n sequenceName?: string,\n combination?: string,\n level?: number\n ): CallbackInfo[] => {\n let i;\n let callback;\n let matches = [];\n let action = event.type;\n\n // if there are no events related to this keycode\n if (!this._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action === 'keyup' && isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < this._callbacks[character].length; ++i) {\n callback = this._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && this._sequenceLevels[callback.seq] !== callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action !== callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if (\n (action === 'keypress' && !event.metaKey && !event.ctrlKey) ||\n modifiersMatch(modifiers, callback.modifiers)\n ) {\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n let deleteCombo = !sequenceName && callback.combo === combination;\n let deleteSequence = sequenceName && callback.seq === sequenceName && callback.level === level;\n if (deleteCombo || deleteSequence) {\n this._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n };\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param combo Is the key binding that triggered this callback. When a sequence is triggered, this is the whole sequence. Otherwise, it's the intermediate keys\n * @param sequence Is the 'parent sequence' of the combo. When the whole sequence is triggered, this is undefined.\n */\n private _fireCallback = (callback: Function, e: KeyboardEvent, combo: string, sequence?: string) => {\n // if this event should not happen stop here\n const target = e.target || e.srcElement;\n if (target && target instanceof HTMLElement && this.stopCallback(e, target, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n preventDefault(e);\n stopPropagation(e);\n }\n };\n\n /**\n * handles a character key event\n */\n private _handleKey = (character: string, modifiers: string[], e: KeyboardEvent) => {\n let callbacks = this._getMatches(character, modifiers, e);\n let i;\n let doNotReset: Record<string, number> = {};\n let maxLevel = 0;\n let processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level ?? 0);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n const seq = callbacks[i].seq;\n if (seq) {\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level !== maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[seq] = 1;\n this._fireCallback(callbacks[i].callback, e, callbacks[i].combo, seq);\n\n // When matching a callback, don't reset other callbacks that starts with this prefix\n // This allows chaining of multiple shortcuts that share a prefix. e.g. if we have\n // `t left` and `t right`, allow user to hit `t left`, `right` without resetting the sequence\n const suffixPrefixIndex = seq.lastIndexOf(character);\n const sequencePrefix = seq.slice(0, suffixPrefixIndex);\n for (const [seq, level] of Object.entries(this._sequenceLevels)) {\n if (level > 0 && seq.startsWith(sequencePrefix)) {\n doNotReset[seq] = 1;\n }\n }\n\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n this._fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // Don't reset a sequence if this character is the start of a sequence that has already progressed.\n // This allows `t left` to be hit immediately after a `t right`\n for (const callback of this._callbacks[character] ?? []) {\n if (callback.action === e.type && callback.seq && callback.level === 0) {\n doNotReset[callback.seq] = 1;\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n let ignoreThisKeypress = e.type === 'keypress' && this._ignoreNextKeypress;\n if (e.type === this._nextExpectedAction && !isModifier(character) && !ignoreThisKeypress) {\n this._resetSequences(doNotReset);\n }\n\n this._ignoreNextKeypress = processedSequenceCallback && e.type === 'keydown';\n };\n\n /**\n * handles a keydown event\n */\n private _handleKeyEvent = (rawEvent: Event) => {\n if (!(rawEvent instanceof KeyboardEvent)) {\n throw new Error(\"Didn't get a KeyboardEvent\");\n }\n const event: KeyboardEvent = rawEvent;\n\n // Don't trigger shortcuts when a key is just held down\n if (event.repeat) {\n return;\n }\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof event.which !== 'number') {\n /// @ts-expect-error - TODO: determine what to do with this compat\n event.which = event.keyCode;\n }\n\n let character = characterFromEvent(event);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (event.type === 'keyup' && this._ignoreNextKeyup === character) {\n this._ignoreNextKeyup = false;\n return;\n }\n\n this.handleKey(character, eventModifiers(event), event);\n };\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n */\n private _resetSequenceTimer = () => {\n clearTimeout(this._resetTimer);\n this._resetTimer = setTimeout(this._resetSequences, 1000);\n };\n\n /**\n * binds a key sequence to an event\n */\n private _bindSequence = (combo: string, keys: string[], callback: MousetrapCallback, action?: string): void => {\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n this._sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n */\n const _increaseSequence = (nextAction: string): MousetrapCallback => {\n return () => {\n this._nextExpectedAction = nextAction;\n ++this._sequenceLevels[combo];\n this._resetSequenceTimer();\n };\n };\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n */\n const _callbackAndReset = (e: KeyboardEvent): void => {\n this._fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n this._ignoreNextKeyup = characterFromEvent(e);\n }\n\n // Reset the sequence timer and allow for this shortcut to be\n // triggered again just by repeating the last key\n this._resetSequenceTimer();\n };\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (let i = 0; i < keys.length; ++i) {\n let isFinal = i + 1 === keys.length;\n let wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || getKeyInfo(keys[i + 1]).action);\n this._bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n };\n\n /**\n * binds a single keyboard combination\n */\n private _bindSingle = (\n combination: string,\n callback: MousetrapCallback,\n action?: string,\n sequenceName?: string,\n level?: number\n ): void => {\n // store a direct mapped reference for use with Mousetrap.trigger\n this._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n let sequence = combination.split(' ');\n let info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n this._bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n this._callbacks[info.key] = this._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n const eventLike = { type: info.action, metaKey: false, ctrlKey: false };\n this._getMatches(info.key, info.modifiers, eventLike, sequenceName, combination, level);\n\n const callbackInfo: CallbackInfo = {\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination,\n };\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n this._callbacks[info.key][sequenceName ? 'unshift' : 'push'](callbackInfo);\n };\n\n /**\n * binds multiple combinations to the same callback\n */\n private _bindMultiple = (combinations: string[], callback: MousetrapCallback, action: string | undefined): void => {\n for (let i = 0; i < combinations.length; ++i) {\n this._bindSingle(combinations[i], callback, action);\n }\n };\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n */\n bind = (keys: string | string[], callback: MousetrapCallback, action?: string) => {\n let self = this;\n keys = keys instanceof Array ? keys : [keys];\n this._bindMultiple(keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n */\n unbind = (keys: string | string[], action?: string) => {\n return this.bind(keys, function () {}, action);\n };\n\n // From bind-global plugin\n // https://github.com/Elvynia/mousetrap-global-bind/blob/master/mousetrap-global-bind.js#L28\n bindGlobal = (keys: string | string[], callback: MousetrapCallback, action?: string) => {\n this.bind(keys, callback, action);\n\n if (keys instanceof Array) {\n for (let i = 0; i < keys.length; i++) {\n this._globalCallbacks[keys[i]] = true;\n }\n return;\n }\n\n this._globalCallbacks[keys] = true;\n };\n\n // From bind-global plugin\n // https://github.com/Elvynia/mousetrap-global-bind/blob/master/mousetrap-global-bind.js#L42\n unbindGlobal = (keys: string | string[], action?: string) => {\n this.unbind(keys, action);\n\n if (keys instanceof Array) {\n for (let i = 0; i < keys.length; i++) {\n this._globalCallbacks[keys[i]] = false;\n }\n return;\n }\n\n this._globalCallbacks[keys] = false;\n };\n\n /**\n * triggers an event that has already been bound\n */\n trigger = (keys: string, action: string | undefined) => {\n let self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n */\n reset = () => {\n this._callbacks = {};\n this._directMap = {};\n return this;\n };\n\n /**\n * should we stop this event before firing off callbacks\n */\n stopCallback = (e: Event, element: HTMLElement, combo: string, sequence?: string): boolean => {\n // From global bind plugin https://github.com/Elvynia/mousetrap-global-bind/blob/master/mousetrap-global-bind.js\n if (this._globalCallbacks[combo] || (sequence && this._globalCallbacks[sequence])) {\n return false;\n }\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (belongsTo(element, this.target)) {\n return false;\n }\n\n // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n // not the initial event target in the shadow tree. Note that not all events cross the\n // shadow boundary.\n // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n // target cannot be obtained.\n if ('composedPath' in e && typeof e.composedPath === 'function') {\n // For open shadow trees, update `element` so that the following check works.\n let initialEventTarget = e.composedPath()[0];\n if (initialEventTarget !== e.target && initialEventTarget instanceof HTMLElement) {\n element = initialEventTarget;\n }\n }\n\n // stop for input, select, and textarea\n return Boolean(\n element.tagName === 'INPUT' ||\n element.tagName === 'SELECT' ||\n element.tagName === 'TEXTAREA' ||\n ('isContentEditable' in element && element.isContentEditable)\n );\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n handleKey: typeof this._handleKey = (...args) => {\n return this._handleKey(...args);\n };\n\n /**\n * allow custom key mappings\n */\n addKeycodes = (object: Record<string, string>) => {\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n MAP[key] = object[key];\n }\n }\n REVERSE_MAP = null;\n };\n}\n","import { Mousetrap } from './Mousetrap';\n\nexport const mousetrap = new Mousetrap(document);\n","import { InteractiveTable, Stack } from '@grafana/ui';\nimport { JobResourceSummary } from 'app/api/clients/provisioning/v0alpha1';\n\ntype SummaryCell<T extends keyof JobResourceSummary = keyof JobResourceSummary> = {\n row: {\n original: JobResourceSummary;\n };\n};\n\nconst getSummaryColumns = () => [\n {\n id: 'resource',\n header: 'Resource',\n cell: ({ row: { original: item } }: SummaryCell) => item.kind,\n },\n {\n id: 'created',\n header: 'Created',\n cell: ({ row: { original: item } }: SummaryCell) => item.create?.toString() || '-',\n },\n {\n id: 'deleted',\n header: 'Deleted',\n cell: ({ row: { original: item } }: SummaryCell) => item.delete?.toString() || '-',\n },\n {\n id: 'updated',\n header: 'Updated',\n cell: ({ row: { original: item } }: SummaryCell) => item.update?.toString() || '-',\n },\n {\n id: 'unchanged',\n header: 'Unchanged',\n cell: ({ row: { original: item } }: SummaryCell) => item.noop?.toString() || '-',\n },\n {\n id: 'errors',\n header: 'Errors',\n cell: ({ row: { original: item } }: SummaryCell) => item.error?.toString() || '-',\n },\n {\n id: 'total',\n header: 'Total',\n cell: ({ row: { original: item } }: SummaryCell) => {\n const total = (item.create || 0) + (item.delete || 0) + (item.update || 0) + (item.noop || 0) + (item.error || 0);\n return total.toString();\n },\n },\n];\n\ninterface Props {\n summary: JobResourceSummary[];\n}\n\nexport function JobSummary({ summary }: Props) {\n return (\n <Stack direction=\"column\" gap={2}>\n <InteractiveTable\n data={summary}\n columns={getSummaryColumns()}\n getRowId={(item) => item.kind || ''}\n pageSize={10}\n />\n </Stack>\n );\n}\n","import { PureComponent } from 'react';\n\nimport { ListProps, AbstractList } from './AbstractList';\n\n/** @deprecated Use ul/li/arr.map directly instead */\n// no point converting, this is deprecated\n// eslint-disable-next-line react-prefer-function-component/react-prefer-function-component\nexport class InlineList<T> extends PureComponent<ListProps<T>> {\n render() {\n return <AbstractList inline {...this.props} />;\n }\n}\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\n\nexport interface FieldValidationMessageProps {\n /** Override component style */\n className?: string;\n horizontal?: boolean;\n}\n\n/**\n * Component for displaying a validation error message under an element.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-fieldvalidationmessage--docs\n */\nexport const FieldValidationMessage = ({\n children,\n horizontal,\n className,\n}: React.PropsWithChildren<FieldValidationMessageProps>) => {\n const styles = useStyles2(getFieldValidationMessageStyles);\n const cssName = cx(horizontal ? styles.horizontal : styles.vertical, className);\n\n return (\n <div role=\"alert\" className={cssName}>\n <Icon className={styles.fieldValidationMessageIcon} name=\"exclamation-triangle\" />\n {children}\n </div>\n );\n};\n\nexport const getFieldValidationMessageStyles = (theme: GrafanaTheme2) => {\n const baseStyle = `\n font-size: ${theme.typography.size.sm};\n font-weight: ${theme.typography.fontWeightMedium};\n padding: ${theme.spacing(0.5, 1)};\n color: ${theme.colors.error.contrastText};\n background: ${theme.colors.error.main};\n border-radius: ${theme.shape.radius.default};\n position: relative;\n display: inline-block;\n align-self: flex-start;\n\n a {\n color: ${theme.colors.error.contrastText};\n text-decoration: underline;\n }\n\n a:hover {\n text-decoration: none;\n }\n `;\n\n return {\n vertical: css(baseStyle, {\n margin: theme.spacing(0.5, 0, 0, 0),\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n left: '9px',\n top: '-5px',\n width: 0,\n height: 0,\n borderWidth: '0 4px 5px 4px',\n borderColor: `transparent transparent ${theme.colors.error.main} transparent`,\n borderStyle: 'solid',\n },\n }),\n horizontal: css(baseStyle, {\n marginLeft: '10px',\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n left: '-5px',\n top: '9px',\n width: 0,\n height: 0,\n borderWidth: '4px 5px 4px 0',\n borderColor: 'transparent #e02f44 transparent transparent',\n borderStyle: 'solid',\n },\n }),\n fieldValidationMessageIcon: css({\n marginRight: theme.spacing(),\n }),\n };\n};\n","import * as React from 'react';\n\nexport function useCombinedRefs<T>(\n ...refs: Array<React.MutableRefObject<T | null> | React.ForwardedRef<T | null> | ((instance: T | null) => void)>\n) {\n const targetRef = React.useRef<T | null>(null);\n\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (!ref) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n });\n }, [refs]);\n\n return targetRef;\n}\n","import { forwardRef, useRef, HTMLProps } from 'react';\n\nimport { escapeStringForRegex, unEscapeStringFromRegex } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\n\nimport { useCombinedRefs } from '../../utils/useCombinedRefs';\nimport { Button } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\nimport { Input } from '../Input/Input';\n\nexport interface Props extends Omit<HTMLProps<HTMLInputElement>, 'onChange'> {\n value: string | undefined;\n width?: number;\n onChange: (value: string) => void;\n escapeRegex?: boolean;\n}\n\nexport const FilterInput = forwardRef<HTMLInputElement, Props>(\n ({ value, width, onChange, escapeRegex = true, ...restProps }, ref) => {\n const innerRef = useRef<HTMLInputElement | null>(null);\n const combinedRef = useCombinedRefs<HTMLInputElement>(ref, innerRef);\n\n const suffix =\n value !== '' ? (\n <Button\n icon=\"times\"\n fill=\"text\"\n size=\"sm\"\n onClick={(e) => {\n innerRef.current?.focus();\n onChange('');\n e.stopPropagation();\n }}\n >\n <Trans i18nKey=\"grafana-ui.filter-input.clear\">Clear</Trans>\n </Button>\n ) : null;\n\n return (\n <Input\n prefix={<Icon name=\"search\" />}\n suffix={suffix}\n width={width}\n type=\"text\"\n value={escapeRegex ? unEscapeStringFromRegex(value ?? '') : value}\n onChange={(event) =>\n onChange(escapeRegex ? escapeStringForRegex(event.currentTarget.value) : event.currentTarget.value)\n }\n {...restProps}\n ref={combinedRef}\n />\n );\n }\n);\n\nFilterInput.displayName = 'FilterInput';\n","import { contextSrv } from 'app/core/services/context_srv';\nimport { RulerRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { featureDiscoveryApi } from '../api/featureDiscoveryApi';\nimport { getRulesPermissions } from '../utils/access-control';\nimport { rulerRuleType } from '../utils/rules';\n\nimport { useFolder } from './useFolder';\n\ninterface ResultBag {\n isRulerAvailable?: boolean;\n isEditable?: boolean;\n isRemovable?: boolean;\n loading: boolean;\n error?: unknown;\n}\n\nexport function useIsRuleEditable(rulesSourceName: string, rule?: RulerRuleDTO): ResultBag {\n const {\n currentData: dsFeatures,\n isLoading,\n error,\n } = featureDiscoveryApi.endpoints.discoverDsFeatures.useQuery({\n rulesSourceName,\n });\n\n const folderUID = rule && rulerRuleType.grafana.rule(rule) ? rule.grafana_alert.namespace_uid : undefined;\n\n const rulePermission = getRulesPermissions(rulesSourceName);\n const { folder, loading } = useFolder(folderUID);\n\n // handle discovery and data source errors\n if (error) {\n return {\n isEditable: false,\n isRemovable: false,\n loading: false,\n isRulerAvailable: false,\n error,\n };\n }\n\n if (!rule) {\n return { isEditable: false, isRemovable: false, loading: false };\n }\n\n // Grafana rules can be edited if user can edit the folder they're in\n // When RBAC is disabled access to a folder is the only requirement for managing rules\n // When RBAC is enabled the appropriate alerting permissions need to be met\n if (rulerRuleType.grafana.rule(rule)) {\n if (!folderUID) {\n throw new Error(\n `Rule ${rule.grafana_alert.title} does not have a folder uid, cannot determine if it is editable.`\n );\n }\n\n if (!folder) {\n // Loading or invalid folder UID\n return {\n isRulerAvailable: true,\n isEditable: false,\n isRemovable: false,\n loading,\n };\n }\n\n const canEditGrafanaRules = contextSrv.hasPermissionInMetadata(rulePermission.update, folder);\n const canRemoveGrafanaRules = contextSrv.hasPermissionInMetadata(rulePermission.delete, folder);\n\n return {\n isRulerAvailable: true,\n isEditable: canEditGrafanaRules,\n isRemovable: canRemoveGrafanaRules,\n loading: loading || isLoading,\n };\n }\n\n // prom rules are only editable by users with Editor role and only if rules source supports editing\n const isRulerAvailable = Boolean(dsFeatures?.rulerConfig);\n const canEditCloudRules = contextSrv.hasPermission(rulePermission.update);\n const canRemoveCloudRules = contextSrv.hasPermission(rulePermission.delete);\n\n return {\n isRulerAvailable,\n isEditable: canEditCloudRules && isRulerAvailable,\n isRemovable: canRemoveCloudRules && isRulerAvailable,\n loading: isLoading,\n };\n}\n","import deepEqual from 'fast-deep-equal';\nimport memoize from 'micro-memoize';\n\nimport { getLanguage } from '@grafana/i18n/internal';\nimport { config } from 'app/core/config';\n\nconst deepMemoize: typeof memoize = (fn) => memoize(fn, { isEqual: deepEqual });\n\nconst isLocaleEnabled = config.featureToggles.localeFormatPreference;\n\nconst createDateTimeFormatter = deepMemoize((locale: string, options: Intl.DateTimeFormatOptions) => {\n try {\n return new Intl.DateTimeFormat(locale, options);\n } catch {\n return new Intl.DateTimeFormat('en-US', options);\n }\n});\n\nconst createDurationFormatter = deepMemoize((locale: string, options: Intl.DurationFormatOptions) => {\n return new Intl.DurationFormat(locale, options);\n});\n\nexport const formatDate = deepMemoize(\n (value: number | Date | string, format: Intl.DateTimeFormatOptions = {}): string => {\n if (typeof value === 'string') {\n return formatDate(new Date(value), format);\n }\n\n const currentLocale = isLocaleEnabled ? config.regionalFormat : getLanguage();\n\n const dateFormatter = createDateTimeFormatter(currentLocale, format);\n return dateFormatter.format(value);\n }\n);\n\nexport const formatDuration = deepMemoize(\n (duration: Intl.DurationInput, options: Intl.DurationFormatOptions = {}): string => {\n const currentLocale = isLocaleEnabled ? config.regionalFormat : getLanguage();\n\n const dateFormatter = createDurationFormatter(currentLocale, options);\n return dateFormatter.format(duration);\n }\n);\n","import { RegistryItem, Registry } from './Registry';\n\nexport enum BinaryOperationID {\n Add = '+',\n Subtract = '-',\n Divide = '/',\n Multiply = '*',\n}\n\nexport type BinaryOperation = (left: number, right: number) => number;\n\ninterface BinaryOperatorInfo extends RegistryItem {\n operation: BinaryOperation;\n binaryOperationID: BinaryOperationID;\n}\n\nexport const binaryOperators = new Registry<BinaryOperatorInfo>(() => {\n return [\n {\n id: BinaryOperationID.Add,\n name: 'Add',\n operation: (a: number, b: number) => a + b,\n binaryOperationID: BinaryOperationID.Add,\n },\n {\n id: BinaryOperationID.Subtract,\n name: 'Subtract',\n operation: (a: number, b: number) => a - b,\n binaryOperationID: BinaryOperationID.Subtract,\n },\n {\n id: BinaryOperationID.Multiply,\n name: 'Multiply',\n operation: (a: number, b: number) => a * b,\n binaryOperationID: BinaryOperationID.Multiply,\n },\n {\n id: BinaryOperationID.Divide,\n name: 'Divide',\n operation: (a: number, b: number) => a / b,\n binaryOperationID: BinaryOperationID.Divide,\n },\n ];\n});\n","import { PureComponent } from 'react';\n\nimport { getValueFormats, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { Cascader, CascaderOption } from '../Cascader/Cascader';\n\nexport interface UnitPickerProps {\n onChange: (item?: string) => void;\n value?: string;\n width?: number;\n id?: string;\n}\n\nfunction formatCreateLabel(input: string) {\n return `Custom unit: ${input}`;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/pickers-unitpicker--docs\n */\nexport class UnitPicker extends PureComponent<UnitPickerProps> {\n onChange = (value: SelectableValue<string>) => {\n this.props.onChange(value.value);\n };\n\n render() {\n const { value, width, id } = this.props;\n\n // Set the current selection\n let current: SelectableValue<string> | undefined = undefined;\n\n // All units\n const unitGroups = getValueFormats();\n\n // Need to transform the data structure to work well with Select\n const groupOptions: CascaderOption[] = unitGroups.map((group) => {\n const options = group.submenu.map((unit) => {\n const sel = {\n label: unit.text,\n value: unit.value,\n };\n if (unit.value === value) {\n current = sel;\n }\n return sel;\n });\n\n return {\n label: group.text,\n value: group.text,\n items: options,\n };\n });\n\n // Show the custom unit\n if (value && !current) {\n current = { value, label: value };\n }\n\n return (\n <Cascader\n id={id}\n width={width}\n initialValue={current && current.label}\n allowCustomValue\n changeOnSelect={false}\n formatCreateLabel={formatCreateLabel}\n options={groupOptions}\n placeholder={t('grafana-ui.unit-picker.placeholder', 'Choose')}\n isClearable\n onSelect={this.props.onChange}\n />\n );\n }\n}\n","import { ReactNode } from 'react';\n\nimport { NavToolbarSeparator } from 'app/core/components/AppChrome/NavToolbar/NavToolbarSeparator';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\n\nimport { DynamicDashNavButtonModel } from '../../utils/registerDynamicDashNavAction';\nimport { DashboardScene } from '../DashboardScene';\n\nimport { ToolbarAction } from './types';\n\nexport function renderActionElements(toolbarActions: ToolbarAction[], dashboard: DashboardScene): ReactNode[] {\n const actionElements: ReactNode[] = [];\n let lastGroup = '';\n\n for (const action of toolbarActions) {\n if (!action.condition) {\n continue;\n }\n\n if (action.group && lastGroup && lastGroup !== action.group) {\n actionElements.push(<NavToolbarSeparator key={`${action.group}-separator`} />);\n }\n\n actionElements.push(<action.component key={action.key} dashboard={dashboard} />);\n lastGroup = action.group;\n }\n\n return actionElements;\n}\n\nexport function getDynamicActions(\n registeredActions: DynamicDashNavButtonModel[],\n group: string,\n condition: boolean\n): ToolbarAction[] {\n const dashboard = getDashboardSrv().getCurrent()!;\n\n return registeredActions.reduce<ToolbarAction[]>((acc, action) => {\n const props = { dashboard };\n\n if (!action.show(props)) {\n return acc;\n }\n\n acc.push({\n key: acc.length.toString(),\n group,\n condition,\n component: () => <action.component {...props} />,\n });\n\n return acc;\n }, []);\n}\n","import { toNumber } from 'lodash';\n\n/**\n * Will return any value as a number or NaN\n *\n * @internal\n * */\nexport function anyToNumber(value: unknown): number {\n if (typeof value === 'number') {\n return value;\n }\n\n if (value === '' || value === null || value === undefined || Array.isArray(value)) {\n return NaN; // lodash calls them 0\n }\n\n if (typeof value === 'boolean') {\n return value ? 1 : 0;\n }\n\n return toNumber(value);\n}\n","import { TypedVariableModel } from '@grafana/data';\nimport { sceneGraph, SceneObject } from '@grafana/scenes';\n\nimport { sceneVariablesSetToVariables } from '../serialization/sceneVariablesSetToVariables';\n\nexport function getVariablesCompatibility(sceneObject: SceneObject): TypedVariableModel[] {\n const set = sceneGraph.getVariables(sceneObject);\n const keepQueryOptions = true;\n\n // `sceneVariablesSetToVariables` is also used when transforming the scene to a save model.\n // In those cases, query options will be stripped out.\n // However, when `getVariablesCompatibility` is called from `templateSrv`, it is used to get all variables in the scene.\n // Therefore, options should be kept.\n const legacyModels = sceneVariablesSetToVariables(set, keepQueryOptions);\n\n // Sadly templateSrv.getVariables returns TypedVariableModel but sceneVariablesSetToVariables return persisted schema model\n // They look close to identical (differ in what is optional in some places).\n // The way templateSrv.getVariables is used it should not matter. it is mostly used to get names of all variables (for query editors).\n // So type and name are important. Maybe some external data sources also check current value so that is also important.\n // @ts-expect-error\n return legacyModels;\n}\n","import { css } from '@emotion/css';\nimport { useFocusRing } from '@react-aria/focus';\nimport * as React from 'react';\nimport tinycolor from 'tinycolor2';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\n\n/** @internal */\nexport enum ColorSwatchVariant {\n Small = 'small',\n Large = 'large',\n}\n\n/** @internal */\nexport interface Props extends React.HTMLAttributes<HTMLDivElement> {\n color: string;\n label?: string;\n variant?: ColorSwatchVariant;\n isSelected?: boolean;\n}\n\n/** @internal */\nexport const ColorSwatch = React.forwardRef<HTMLDivElement, Props>(\n ({ color, label, variant = ColorSwatchVariant.Small, isSelected, 'aria-label': ariaLabel, ...otherProps }, ref) => {\n const theme = useTheme2();\n const { isFocusVisible, focusProps } = useFocusRing();\n const styles = getStyles(theme, variant, color, isFocusVisible, isSelected);\n const hasLabel = !!label;\n const colorLabel = ariaLabel || label;\n return (\n <div ref={ref} className={styles.wrapper} data-testid={selectors.components.ColorSwatch.name} {...otherProps}>\n {hasLabel && <span className={styles.label}>{label}</span>}\n <button\n className={styles.swatch}\n {...focusProps}\n aria-label={\n colorLabel\n ? t('grafana-ui.color-swatch.aria-label-selected-color', '{{colorLabel}} color', { colorLabel })\n : t('grafana-ui.color-swatch.aria-label-default', 'Pick a color')\n }\n type=\"button\"\n />\n </div>\n );\n }\n);\n\nconst getStyles = (\n theme: GrafanaTheme2,\n variant: ColorSwatchVariant,\n color: string,\n isFocusVisible: boolean,\n isSelected?: boolean\n) => {\n const tc = tinycolor(color);\n const isSmall = variant === ColorSwatchVariant.Small;\n const swatchSize = isSmall ? '16px' : '32px';\n let border = 'none';\n\n if (tc.getAlpha() < 0.1) {\n border = `2px solid ${theme.colors.border.medium}`;\n }\n\n return {\n wrapper: css({\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n }),\n label: css({\n marginRight: theme.spacing(1),\n }),\n swatch: css({\n width: swatchSize,\n height: swatchSize,\n background: `${color}`,\n border,\n borderRadius: theme.shape.radius.circle,\n outlineOffset: '1px',\n outline: isFocusVisible ? `2px solid ${theme.colors.primary.main}` : 'none',\n boxShadow: isSelected\n ? `inset 0 0 0 2px ${color}, inset 0 0 0 4px ${theme.colors.getContrastText(color)}`\n : 'none',\n [theme.transitions.handleMotion('no-preference')]: {\n transition: theme.transitions.create(['transform'], {\n duration: theme.transitions.duration.short,\n }),\n },\n '&:hover': {\n transform: 'scale(1.1)',\n },\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none',\n },\n }),\n };\n};\n\nColorSwatch.displayName = 'ColorSwatch';\n","import { VariableSuggestion } from '@grafana/data';\n\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind } from './types';\n\n/**\n * @alpha\n */\nexport function variableSuggestionToCodeEditorSuggestion(sug: VariableSuggestion): CodeEditorSuggestionItem {\n const label = '${' + sug.value + '}';\n const detail = sug.value === sug.label ? sug.origin : `${sug.label} / ${sug.origin}`;\n\n return {\n label,\n kind: CodeEditorSuggestionItemKind.Property,\n detail,\n documentation: sug.documentation,\n };\n}\n","// Standardized performance mark names for Scene operations\nexport const PERFORMANCE_MARKS = {\n // Panel operations\n PANEL_QUERY_START: (panelKey: string, operationId?: string) =>\n operationId ? `scenes.panel.query.start.${panelKey}.${operationId}` : `scenes.panel.query.start.${panelKey}`,\n PANEL_QUERY_END: (panelKey: string, operationId?: string) =>\n operationId ? `scenes.panel.query.end.${panelKey}.${operationId}` : `scenes.panel.query.end.${panelKey}`,\n PANEL_PLUGIN_LOAD_START: (panelKey: string, operationId?: string) =>\n operationId\n ? `scenes.panel.pluginLoad.start.${panelKey}.${operationId}`\n : `scenes.panel.pluginLoad.start.${panelKey}`,\n PANEL_PLUGIN_LOAD_END: (panelKey: string, operationId?: string) =>\n operationId ? `scenes.panel.pluginLoad.end.${panelKey}.${operationId}` : `scenes.panel.pluginLoad.end.${panelKey}`,\n PANEL_FIELD_CONFIG_START: (panelKey: string, operationId?: string) =>\n operationId\n ? `scenes.panel.fieldConfig.start.${panelKey}.${operationId}`\n : `scenes.panel.fieldConfig.start.${panelKey}`,\n PANEL_FIELD_CONFIG_END: (panelKey: string, operationId?: string) =>\n operationId\n ? `scenes.panel.fieldConfig.end.${panelKey}.${operationId}`\n : `scenes.panel.fieldConfig.end.${panelKey}`,\n PANEL_RENDER_START: (panelKey: string, operationId?: string) =>\n operationId ? `scenes.panel.render.start.${panelKey}.${operationId}` : `scenes.panel.render.start.${panelKey}`,\n PANEL_RENDER_END: (panelKey: string, operationId?: string) =>\n operationId ? `scenes.panel.render.end.${panelKey}.${operationId}` : `scenes.panel.render.end.${panelKey}`,\n PANEL_TRANSFORM_START: (panelKey: string, transformationId: string, operationId?: string) =>\n operationId\n ? `scenes.panel.transform.start.${panelKey}.${transformationId}.${operationId}`\n : `scenes.panel.transform.start.${panelKey}.${transformationId}`,\n PANEL_TRANSFORM_END: (panelKey: string, transformationId: string, operationId?: string) =>\n operationId\n ? `scenes.panel.transform.end.${panelKey}.${transformationId}.${operationId}`\n : `scenes.panel.transform.end.${panelKey}.${transformationId}`,\n PANEL_TRANSFORM_ERROR: (panelKey: string, transformationId: string, operationId?: string) =>\n operationId\n ? `scenes.panel.transform.error.${panelKey}.${transformationId}.${operationId}`\n : `scenes.panel.transform.error.${panelKey}.${transformationId}`,\n\n // Dashboard operations\n DASHBOARD_INTERACTION_START: (operationId: string) => `scenes.dashboard.interaction.start.${operationId}`,\n DASHBOARD_INTERACTION_END: (operationId: string) => `scenes.dashboard.interaction.end.${operationId}`,\n DASHBOARD_MILESTONE: (operationId: string, milestone: string) =>\n `scenes.dashboard.milestone.${milestone}.${operationId}`,\n\n // Query operations\n QUERY_START: (panelId: string, queryId: string) => `scenes.query.start.${panelId}.${queryId}`,\n QUERY_END: (panelId: string, queryId: string) => `scenes.query.end.${panelId}.${queryId}`,\n};\n\n// Standardized performance measure names\nexport const PERFORMANCE_MEASURES = {\n // Panel operations\n PANEL_QUERY: (panelKey: string, operationId?: string) =>\n operationId ? `scenes.panel.query.duration.${panelKey}.${operationId}` : `scenes.panel.query.duration.${panelKey}`,\n PANEL_PLUGIN_LOAD: (panelKey: string, operationId?: string) =>\n operationId\n ? `scenes.panel.pluginLoad.duration.${panelKey}.${operationId}`\n : `scenes.panel.pluginLoad.duration.${panelKey}`,\n PANEL_FIELD_CONFIG: (panelKey: string, operationId?: string) =>\n operationId\n ? `scenes.panel.fieldConfig.duration.${panelKey}.${operationId}`\n : `scenes.panel.fieldConfig.duration.${panelKey}`,\n PANEL_RENDER: (panelKey: string, operationId?: string) =>\n operationId\n ? `scenes.panel.render.duration.${panelKey}.${operationId}`\n : `scenes.panel.render.duration.${panelKey}`,\n PANEL_TRANSFORM: (panelKey: string, transformationId: string, operationId?: string) =>\n operationId\n ? `scenes.panel.transform.duration.${panelKey}.${transformationId}.${operationId}`\n : `scenes.panel.transform.duration.${panelKey}.${transformationId}`,\n\n // Dashboard operations\n DASHBOARD_INTERACTION: (operationId: string) => `scenes.dashboard.interaction.duration.${operationId}`,\n\n // Query operations\n QUERY: (panelId: string, queryId: string) => `scenes.query.duration.${panelId}.${queryId}`,\n};\n\n/**\n * Threshold in milliseconds for determining slow operations (panels, queries, transformations, etc.)\n */\nexport const SLOW_OPERATION_THRESHOLD_MS = 500;\n","import { useRef, useState } from 'react';\n\nimport { SelectableValue, StandardEditorProps, VariableOrigin } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { HeatmapCalculationBucketConfig, HeatmapCalculationMode } from '@grafana/schema';\nimport { RadioButtonGroup, ScaleDistribution, Stack } from '@grafana/ui';\n\nimport { SuggestionsInput } from '../../suggestionsInput/SuggestionsInput';\nimport { numberOrVariableValidator } from '../../utils';\nimport { convertDurationToMilliseconds } from '../utils';\n\nexport const AxisEditor = ({ value, onChange, item }: StandardEditorProps<HeatmapCalculationBucketConfig>) => {\n const [isInvalid, setInvalid] = useState<boolean>(false);\n\n const modeSwitchCounter = useRef(0);\n\n const modeOptions: Array<SelectableValue<HeatmapCalculationMode>> = [\n {\n label: t('transformers.axis-editor.mode-options.label.size', 'Size'),\n value: HeatmapCalculationMode.Size,\n description: t(\n 'transformers.axis-editor.mode-options.description.split-the-buckets-based-on-size',\n 'Split the buckets based on size'\n ),\n },\n {\n label: t('transformers.axis-editor.mode-options.label.count', 'Count'),\n value: HeatmapCalculationMode.Count,\n description: t(\n 'transformers.axis-editor.mode-options.description.split-the-buckets-based-on-count',\n 'Split the buckets based on count'\n ),\n },\n ];\n\n const logModeOptions: Array<SelectableValue<HeatmapCalculationMode>> = [\n {\n label: t('transformers.axis-editor.log-mode-options.label.split', 'Split'),\n value: HeatmapCalculationMode.Size,\n description: t(\n 'transformers.axis-editor.log-mode-options.description.split-the-buckets-based-on-size',\n 'Split the buckets based on size'\n ),\n },\n ];\n\n const allowInterval = item.settings?.allowInterval ?? false;\n\n const onValueChange = ({ mode, scale, value = '' }: HeatmapCalculationBucketConfig) => {\n let isValid = true;\n\n if (mode !== HeatmapCalculationMode.Count) {\n if (!allowInterval) {\n isValid = numberOrVariableValidator(value);\n } else if (value !== '') {\n let durationMS = convertDurationToMilliseconds(value);\n if (durationMS === undefined) {\n isValid = false;\n }\n }\n }\n\n setInvalid(!isValid);\n onChange({ mode, scale, value });\n };\n\n const templateSrv = getTemplateSrv();\n const variables = templateSrv.getVariables().map((v) => {\n return { value: v.name, label: v.label || v.name, origin: VariableOrigin.Template };\n });\n\n return (\n <Stack>\n <RadioButtonGroup\n value={value?.mode || HeatmapCalculationMode.Size}\n options={value?.scale?.type === ScaleDistribution.Log ? logModeOptions : modeOptions}\n onChange={(mode) => {\n modeSwitchCounter.current++;\n\n onValueChange({\n ...value,\n value: '',\n mode,\n });\n }}\n />\n <SuggestionsInput\n // we need this cause the value prop is not changeable after init\n // so we have to re-create the component during mode switches to reset the value to auto\n key={modeSwitchCounter.current}\n invalid={isInvalid}\n error={'Value needs to be an integer or a variable'}\n value={value?.value ?? ''}\n placeholder={t('transformers.axis-editor.placeholder-auto', 'Auto')}\n onChange={(text) => {\n onValueChange({ ...value, value: text });\n }}\n suggestions={variables}\n />\n </Stack>\n );\n};\n","import { PanelOptionsEditorBuilder } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ScaleDistribution, HeatmapCalculationMode, HeatmapCalculationOptions } from '@grafana/schema';\nimport { ScaleDistributionEditor } from '@grafana/ui/internal';\n\nimport { AxisEditor } from './AxisEditor';\n\nexport function addHeatmapCalculationOptions(\n prefix: string,\n builder: PanelOptionsEditorBuilder<any>,\n source?: HeatmapCalculationOptions,\n category?: string[]\n) {\n builder.addCustomEditor({\n id: 'xBuckets',\n path: `${prefix}xBuckets`,\n name: t('transformers.calculate-heatmap.add-heatmap-calculation-options.name-x-bucket', 'X Bucket'),\n editor: AxisEditor,\n category,\n defaultValue: {\n mode: HeatmapCalculationMode.Size,\n },\n settings: {\n allowInterval: true,\n },\n });\n\n builder.addCustomEditor({\n id: 'yBuckets',\n path: `${prefix}yBuckets`,\n name: t('transformers.calculate-heatmap.add-heatmap-calculation-options.name-y-bucket', 'Y Bucket'),\n editor: AxisEditor,\n category,\n defaultValue: {\n mode: HeatmapCalculationMode.Size,\n },\n });\n\n builder.addCustomEditor({\n id: 'yBuckets-scale',\n path: `${prefix}yBuckets.scale`,\n name: t('transformers.calculate-heatmap.add-heatmap-calculation-options.name-y-bucket-scale', 'Y Bucket scale'),\n category,\n editor: ScaleDistributionEditor,\n defaultValue: { type: ScaleDistribution.Linear },\n });\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { Role } from 'app/types/accessControl';\nimport { ApiKey } from 'app/types/apiKeys';\nimport {\n ServiceAccountProfileState,\n ServiceAccountDTO,\n ServiceAccountsState,\n ServiceAccountStateFilter,\n} from 'app/types/serviceaccount';\n\n// serviceAccountsProfilePage\nexport const initialStateProfile: ServiceAccountProfileState = {\n serviceAccount: {} as ServiceAccountDTO,\n isLoading: true,\n tokens: [],\n};\n\nexport const serviceAccountProfileSlice = createSlice({\n name: 'serviceaccount',\n initialState: initialStateProfile,\n reducers: {\n serviceAccountFetchBegin: (state) => {\n return { ...state, isLoading: true };\n },\n serviceAccountFetchEnd: (state) => {\n return { ...state, isLoading: false };\n },\n serviceAccountLoaded: (state, action: PayloadAction<ServiceAccountDTO>): ServiceAccountProfileState => {\n return { ...state, serviceAccount: action.payload, isLoading: false };\n },\n serviceAccountTokensLoaded: (state, action: PayloadAction<ApiKey[]>): ServiceAccountProfileState => {\n return { ...state, tokens: action.payload, isLoading: false };\n },\n rolesFetchBegin: (state) => {\n return { ...state, rolesLoading: true };\n },\n rolesFetchEnd: (state) => {\n return { ...state, rolesLoading: false };\n },\n },\n});\n\nexport const serviceAccountProfileReducer = serviceAccountProfileSlice.reducer;\nexport const {\n serviceAccountLoaded,\n serviceAccountTokensLoaded,\n serviceAccountFetchBegin,\n serviceAccountFetchEnd,\n rolesFetchBegin,\n rolesFetchEnd,\n} = serviceAccountProfileSlice.actions;\n\n// serviceAccountsListPage\nexport const initialStateList: ServiceAccountsState = {\n serviceAccounts: [],\n isLoading: true,\n roleOptions: [],\n query: '',\n page: 0,\n perPage: 50,\n totalPages: 1,\n showPaging: false,\n serviceAccountStateFilter: ServiceAccountStateFilter.All,\n};\n\ninterface ServiceAccountsFetched {\n serviceAccounts: ServiceAccountDTO[];\n perPage: number;\n page: number;\n totalCount: number;\n}\n\nconst serviceAccountsSlice = createSlice({\n name: 'serviceaccounts',\n initialState: initialStateList,\n reducers: {\n serviceAccountsFetched: (state, action: PayloadAction<ServiceAccountsFetched>): ServiceAccountsState => {\n const { totalCount, perPage, ...rest } = action.payload;\n const totalPages = Math.ceil(totalCount / perPage);\n\n return {\n ...state,\n ...rest,\n totalPages,\n perPage,\n showPaging: totalPages > 1,\n isLoading: false,\n };\n },\n serviceAccountsFetchBegin: (state) => {\n return { ...state, isLoading: true };\n },\n serviceAccountsFetchEnd: (state) => {\n return { ...state, isLoading: false };\n },\n acOptionsLoaded: (state, action: PayloadAction<Role[]>): ServiceAccountsState => {\n return { ...state, roleOptions: action.payload };\n },\n queryChanged: (state, action: PayloadAction<string>) => {\n return {\n ...state,\n query: action.payload,\n page: 0,\n };\n },\n pageChanged: (state, action: PayloadAction<number>) => ({\n ...state,\n page: action.payload,\n }),\n stateFilterChanged: (state, action: PayloadAction<ServiceAccountStateFilter>) => ({\n ...state,\n serviceAccountStateFilter: action.payload,\n }),\n },\n});\nexport const serviceAccountsReducer = serviceAccountsSlice.reducer;\n\nexport const {\n serviceAccountsFetchBegin,\n serviceAccountsFetchEnd,\n serviceAccountsFetched,\n acOptionsLoaded,\n pageChanged,\n stateFilterChanged,\n queryChanged,\n} = serviceAccountsSlice.actions;\n\nexport default {\n serviceAccountProfile: serviceAccountProfileReducer,\n serviceAccounts: serviceAccountsReducer,\n};\n","import { EntityState } from '@reduxjs/toolkit';\n\nimport {\n PluginType,\n PluginSignatureStatus,\n PluginSignatureType,\n PluginDependencies,\n PluginErrorCode,\n WithAccessControlMetadata,\n} from '@grafana/data';\nimport { IconName } from '@grafana/ui';\nimport { PluginsState } from 'app/types/plugins';\nimport { StoreState } from 'app/types/store';\n\nexport type PluginTypeCode = 'app' | 'panel' | 'datasource';\n\nexport enum PluginAdminRoutes {\n Home = 'plugins-home',\n Browse = 'plugins-browse',\n Details = 'plugins-details',\n}\n\nexport enum PluginIconName {\n app = 'apps',\n datasource = 'database',\n panel = 'credit-card',\n renderer = 'capture',\n}\n\nexport interface CatalogPlugin extends WithAccessControlMetadata {\n description: string;\n downloads: number;\n hasUpdate: boolean;\n id: string;\n info: CatalogPluginInfo;\n isDev: boolean;\n isCore: boolean;\n isEnterprise: boolean;\n isInstalled: boolean;\n isDisabled: boolean;\n isDeprecated: boolean;\n isManaged: boolean; // Indicates that the plugin version is managed by Grafana\n isPreinstalled: { found: boolean; withVersion: boolean }; // Indicates that the plugin is pre-installed\n // `isPublished` is TRUE if the plugin is published to grafana.com\n isPublished: boolean;\n latestVersion?: string;\n name: string;\n orgName: string;\n signature: PluginSignatureStatus;\n signatureType?: PluginSignatureType;\n signatureOrg?: string;\n popularity: number;\n publishedAt: string;\n type?: PluginType;\n updatedAt: string;\n installedVersion?: string;\n details?: CatalogPluginDetails;\n error?: PluginErrorCode;\n angularDetected?: boolean;\n // instance plugins may not be fully installed, which means a new instance\n // running the plugin didn't started yet\n isFullyInstalled?: boolean;\n isUninstallingFromInstance?: boolean;\n isUpdatingFromInstance?: boolean;\n iam?: IdentityAccessManagement;\n isProvisioned?: boolean;\n url?: string;\n}\nexport interface Screenshots {\n path: string;\n name: string;\n}\n\nexport interface CatalogPluginDetails {\n readme?: string;\n versions?: Version[];\n links: Array<{ name: string; url: string }>;\n grafanaDependency?: string;\n pluginDependencies?: PluginDependencies['plugins'];\n statusContext?: string;\n iam?: IdentityAccessManagement;\n changelog?: string;\n licenseUrl?: string;\n documentationUrl?: string;\n sponsorshipUrl?: string;\n repositoryUrl?: string;\n raiseAnIssueUrl?: string;\n signatureType?: PluginSignatureType;\n signature?: PluginSignatureStatus;\n screenshots?: Screenshots[] | null;\n}\n\nexport interface CatalogPluginInfo {\n logos: { large: string; small: string };\n keywords: string[];\n}\n\nexport type RemotePlugin = {\n changelog: string;\n createdAt: string;\n description: string;\n downloads: number;\n downloadSlug: string;\n featured: number;\n id: number;\n internal: boolean;\n keywords: string[];\n json?: {\n dependencies: PluginDependencies;\n iam?: IdentityAccessManagement;\n info: { links: Array<{ name: string; url: string }>; screenshots?: Screenshots[] | null };\n };\n links: Array<{ rel: string; href: string }>;\n name: string;\n orgId: number;\n orgName: string;\n orgSlug: string;\n orgUrl: string;\n packages: { [arch: string]: { packageName: string; downloadUrl: string } };\n popularity: number;\n readme?: string;\n signatureType: PluginSignatureType | '';\n slug: string;\n status: RemotePluginStatus;\n statusContext?: string;\n typeCode: PluginType;\n typeId: number;\n typeName: string;\n updatedAt: string;\n url: string;\n userId: number;\n verified: boolean;\n version: string;\n versionSignatureType: PluginSignatureType | '';\n versionSignedByOrg: string;\n versionSignedByOrgName: string;\n versionStatus: string;\n angularDetected?: boolean;\n licenseUrl?: string;\n documentationUrl?: string;\n sponsorshipUrl?: string;\n repositoryUrl?: string;\n raiseAnIssueUrl?: string;\n};\n\n// The available status codes on GCOM are available here:\n// https://github.com/grafana/grafana-com/blob/main/packages/grafana-com-plugins-api/src/plugins/plugin.model.js#L74\nexport enum RemotePluginStatus {\n Deleted = 'deleted',\n Active = 'active',\n Pending = 'pending',\n Deprecated = 'deprecated',\n Enterprise = 'enterprise',\n}\n\nexport type LocalPlugin = WithAccessControlMetadata & {\n category: string;\n defaultNavUrl: string;\n dev?: boolean;\n enabled: boolean;\n hasUpdate: boolean;\n latestVersion: string;\n id: string;\n info: {\n author: Rel;\n description: string;\n links?: Rel[];\n logos: { small: string; large: string };\n keywords: string[];\n build: Build;\n screenshots?: Array<{ path: string; name: string }> | null;\n version: string;\n updated: string;\n };\n name: string;\n pinned: boolean;\n signature: PluginSignatureStatus;\n signatureOrg: string;\n signatureType: PluginSignatureType;\n state: string;\n type: PluginType;\n dependencies: PluginDependencies;\n angularDetected: boolean;\n iam?: IdentityAccessManagement;\n};\n\ninterface IdentityAccessManagement {\n permissions: Permission[];\n}\n\nexport interface Permission {\n action: string;\n scope: string;\n}\n\ninterface Rel {\n name: string;\n url: string;\n}\n\nexport interface Build {\n time?: number;\n repo?: string;\n branch?: string;\n hash?: string;\n}\n\nexport interface Version {\n version: string;\n createdAt: string;\n updatedAt?: string;\n isCompatible: boolean;\n grafanaDependency: string | null;\n angularDetected?: boolean;\n}\n\nexport interface PluginDetails {\n remote?: RemotePlugin;\n remoteVersions?: Version[];\n local?: LocalPlugin;\n}\n\nexport interface Org {\n slug: string;\n name: string;\n url: string;\n createdAt: string;\n updatedAt: string;\n avatar: string;\n avatarUrl: string;\n}\n\nexport type CatalogPluginsState = { loading: boolean; error?: Error; plugins: CatalogPlugin[] };\n\nexport enum PluginStatus {\n INSTALL = 'INSTALL',\n UNINSTALL = 'UNINSTALL',\n UPDATE = 'UPDATE',\n REINSTALL = 'REINSTALL',\n DOWNGRADE = 'DOWNGRADE',\n}\n\nexport enum PluginTabLabels {\n OVERVIEW = 'Overview',\n VERSIONS = 'Version history',\n CONFIG = 'Config',\n DASHBOARDS = 'Dashboards',\n USAGE = 'Usage',\n IAM = 'IAM',\n CHANGELOG = 'Changelog',\n PLUGINDETAILS = 'Plugin details',\n DATASOURCE_CONNECTIONS = 'Data source connections',\n SCREENSHOTS = 'Screenshots',\n}\n\nexport enum PluginTabIds {\n OVERVIEW = 'overview',\n VERSIONS = 'version-history',\n CONFIG = 'config',\n DASHBOARDS = 'dashboards',\n USAGE = 'usage',\n IAM = 'iam',\n CHANGELOG = 'changelog',\n PLUGINDETAILS = 'right-panel',\n DATASOURCE_CONNECTIONS = 'datasource-connections',\n SCREENSHOTS = 'screenshots',\n}\n\nexport enum RequestStatus {\n Pending = 'Pending',\n Fulfilled = 'Fulfilled',\n Rejected = 'Rejected',\n}\nexport type RemotePluginResponse = { plugins: RemotePlugin[]; error?: Error };\n\nexport type RequestInfo = {\n status: RequestStatus;\n // The whole error object\n error?: any;\n // An optional error message\n errorMessage?: string;\n};\n\nexport type PluginDetailsTab = {\n label: PluginTabLabels | string;\n icon?: IconName;\n id: PluginTabIds | string;\n href?: string;\n};\n\n// TODO<remove `PluginsState &` when the \"plugin_admin_enabled\" feature flag is removed>\nexport type ReducerState = PluginsState & {\n items: EntityState<CatalogPlugin, string>;\n requests: Record<string, RequestInfo>;\n};\n\n// TODO<remove when the \"plugin_admin_enabled\" feature flag is removed>\nexport type PluginCatalogStoreState = StoreState & { plugins: ReducerState };\n\n// The data that we receive when fetching \"/api/gnet/plugins/<plugin>/versions\"\nexport type PluginVersion = {\n id: number;\n pluginId: number;\n pluginSlug: string;\n version: string;\n url: string;\n commit: string;\n description: string;\n createdAt: string;\n updatedAt?: string;\n downloads: number;\n verified: boolean;\n status: string;\n downloadSlug: string;\n links: Array<{ rel: string; href: string }>;\n isCompatible: boolean;\n grafanaDependency: string | null;\n angularDetected?: boolean;\n};\n\nexport type InstancePlugin = { pluginSlug: string; version: string };\n\nexport type ProvisionedPlugin = { slug: string };\n","// Libraries\nimport * as React from 'react';\n\nimport PageLoader from '../PageLoader/PageLoader';\n\ninterface Props {\n isLoading?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const PageContents = ({ isLoading, children, className }: Props) => {\n let content = className ? <div className={className}>{children}</div> : children;\n\n return <>{isLoading ? <PageLoader /> : content}</>;\n};\n","import { css } from '@emotion/css';\nimport { Fragment } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { PageInfoItem } from '../Page/types';\n\nexport interface Props {\n info: PageInfoItem[];\n}\n\nexport function PageInfo({ info }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n {info.map((infoItem, index) => (\n <Fragment key={index}>\n <div className={styles.infoItem}>\n <div className={styles.label}>{infoItem.label}</div>\n {infoItem.value}\n </div>\n {index + 1 < info.length && <div data-testid=\"page-info-separator\" className={styles.separator} />}\n </Fragment>\n ))}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n display: 'flex',\n flexDirection: 'row',\n gap: theme.spacing(1.5),\n overflow: 'auto',\n }),\n infoItem: css({\n ...theme.typography.bodySmall,\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n }),\n label: css({\n color: theme.colors.text.secondary,\n }),\n separator: css({\n borderLeft: `1px solid ${theme.colors.border.weak}`,\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { isFetchError } from '@grafana/runtime';\nimport { Field, IconButton, Input, useStyles2, Text } from '@grafana/ui';\n\nexport interface Props {\n value: string;\n onEdit: (newValue: string) => Promise<void>;\n}\n\nexport const EditableTitle = ({ value, onEdit }: Props) => {\n const styles = useStyles2(getStyles);\n const [localValue, setLocalValue] = useState(value);\n const [isEditing, setIsEditing] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string>();\n\n // sync local value with prop value\n useEffect(() => {\n setLocalValue(value);\n }, [value]);\n\n const onCommitChange = useCallback(\n async (event: React.FormEvent<HTMLInputElement>) => {\n const newValue = event.currentTarget.value;\n\n if (!newValue) {\n setErrorMessage('Please enter a title');\n } else if (newValue === value) {\n // no need to bother saving if the value hasn't changed\n // just clear any previous error messages and exit edit mode\n setErrorMessage(undefined);\n setIsEditing(false);\n } else {\n setIsLoading(true);\n try {\n await onEdit(newValue);\n setErrorMessage(undefined);\n setIsEditing(false);\n } catch (error) {\n if (isFetchError(error)) {\n setErrorMessage(error.data.message);\n } else if (error instanceof Error) {\n setErrorMessage(error.message);\n }\n }\n setIsLoading(false);\n }\n },\n [onEdit, value]\n );\n\n return !isEditing ? (\n <div className={styles.textContainer}>\n <div className={styles.textWrapper}>\n {/*\n use localValue instead of value\n this is to prevent the title from flickering back to the old value after the user has edited\n caused by the delay between the save completing and the new value being refetched\n */}\n <Text element=\"h1\" truncate>\n {localValue}\n </Text>\n <IconButton\n name=\"pen\"\n size=\"lg\"\n tooltip={t('page.editable-title.edit-tooltip', 'Edit title')}\n onClick={() => setIsEditing(true)}\n />\n </div>\n </div>\n ) : (\n <div className={styles.inputContainer}>\n <Field className={styles.field} loading={isLoading} invalid={!!errorMessage} error={errorMessage}>\n <Input\n className={styles.input}\n defaultValue={localValue}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n onCommitChange(event);\n }\n }}\n // perfectly reasonable to autofocus here since we've made a conscious choice by clicking the edit button\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n onBlur={onCommitChange}\n onChange={(event) => setLocalValue(event.currentTarget.value)}\n onFocus={() => setIsEditing(true)}\n />\n </Field>\n </div>\n );\n};\n\nEditableTitle.displayName = 'EditableTitle';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n textContainer: css({\n minWidth: 0,\n }),\n field: css({\n flex: 1,\n // magic number here to ensure the input text lines up exactly with the h1 text\n // input has a 1px border + theme.spacing(1) padding so we need to offset that\n left: `calc(-${theme.spacing(1)} - 1px)`,\n position: 'relative',\n marginBottom: 0,\n }),\n input: css({\n input: {\n ...theme.typography.h1,\n },\n }),\n inputContainer: css({\n display: 'flex',\n flex: 1,\n }),\n textWrapper: css({\n alignItems: 'center',\n display: 'flex',\n gap: theme.spacing(1),\n height: theme.spacing(theme.components.height.md),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { NavModelItem, GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { PageInfo } from '../PageInfo/PageInfo';\n\nimport { EditableTitle } from './EditableTitle';\nimport { PageInfoItem } from './types';\n\nexport interface Props {\n navItem: NavModelItem;\n renderTitle?: (title: string) => React.ReactNode;\n actions?: React.ReactNode;\n info?: PageInfoItem[];\n subTitle?: React.ReactNode;\n onEditTitle?: (newValue: string) => Promise<void>;\n}\n\nexport function PageHeader({ navItem, renderTitle, actions, info, subTitle, onEditTitle }: Props) {\n const styles = useStyles2(getStyles);\n const sub = subTitle ?? navItem.subTitle;\n\n const titleElement = onEditTitle ? (\n <EditableTitle value={navItem.text} onEdit={onEditTitle} />\n ) : (\n <div className={styles.title}>\n {navItem.img && <img className={styles.img} src={navItem.img} alt={`logo for ${navItem.text}`} />}\n {renderTitle ? renderTitle(navItem.text) : <h1>{navItem.text}</h1>}\n </div>\n );\n\n return (\n <div className={styles.pageHeader}>\n <div className={styles.topRow}>\n <div className={styles.titleInfoContainer}>\n {titleElement}\n {info && <PageInfo info={info} />}\n </div>\n <div className={styles.actions}>{actions}</div>\n </div>\n {sub && <div className={styles.subTitle}>{sub}</div>}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n topRow: css({\n alignItems: 'flex-start',\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: theme.spacing(1, 3),\n }),\n title: css({\n display: 'flex',\n flexDirection: 'row',\n maxWidth: '100%',\n flex: 1,\n h1: {\n marginBottom: 0,\n },\n }),\n actions: css({\n display: 'flex',\n flexDirection: 'row',\n gap: theme.spacing(1),\n }),\n titleInfoContainer: css({\n display: 'flex',\n label: 'title-info-container',\n flex: 1,\n flexWrap: 'wrap',\n gap: theme.spacing(1, 4),\n justifyContent: 'space-between',\n maxWidth: '100%',\n minWidth: '200px',\n }),\n pageHeader: css({\n label: 'page-header',\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(2),\n }),\n subTitle: css({\n position: 'relative',\n color: theme.colors.text.secondary,\n }),\n img: css({\n width: '32px',\n height: '32px',\n marginRight: theme.spacing(2),\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { NavModelItem, GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2, TabsBar, Tab, toIconName } from '@grafana/ui';\n\nexport interface Props {\n navItem: NavModelItem;\n}\n\nexport function PageTabs({ navItem }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.tabsWrapper}>\n <TabsBar>\n {navItem.children!.map((child, index) => {\n const icon = child.icon ? toIconName(child.icon) : undefined;\n return (\n !child.hideFromTabs && (\n <Tab\n label={child.text}\n active={child.active}\n key={`${child.url}-${index}`}\n icon={icon}\n counter={child.tabCounter}\n href={child.url}\n suffix={child.tabSuffix}\n onChangeTab={child.onClick}\n />\n )\n );\n })}\n </TabsBar>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n tabsWrapper: css({\n paddingBottom: theme.spacing(3),\n }),\n };\n};\n","import { createSelector } from 'reselect';\n\nimport { NavModel } from '@grafana/data';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { store } from 'app/store/store';\nimport { StoreState, useSelector } from 'app/types/store';\n\nexport function usePageNav(navId?: string, oldProp?: NavModel): NavModel | undefined {\n if (oldProp) {\n return oldProp;\n }\n\n if (!navId) {\n return;\n }\n\n // Page component is used in so many tests, this simplifies not having to initialize a full redux store\n if (!store) {\n return;\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSelector(createSelector(getNavIndex, (navIndex) => getNavModel(navIndex, navId ?? 'home')));\n}\n\nfunction getNavIndex(store: StoreState) {\n return store.navIndex;\n}\n","import { useEffect } from 'react';\n\nimport { NavModel, NavModelItem } from '@grafana/data';\nimport { HOME_NAV_ID } from 'app/core/reducers/navModel';\nimport { useSelector } from 'app/types/store';\n\nimport { Branding } from '../Branding/Branding';\nimport { buildBreadcrumbs } from '../Breadcrumbs/utils';\n\nexport function usePageTitle(navModel?: NavModel, pageNav?: NavModelItem) {\n const homeNav = useSelector((state) => state.navIndex)?.[HOME_NAV_ID];\n useEffect(() => {\n const sectionNav = (navModel?.node !== navModel?.main ? navModel?.node : navModel?.main) ?? { text: 'Grafana' };\n const parts: string[] = buildBreadcrumbs(sectionNav, pageNav, homeNav)\n .map((crumb) => crumb.text)\n .reverse();\n\n // Override `Home` with the custom brand title\n parts[parts.length - 1] = Branding.AppTitle;\n\n document.title = parts.join(' - ');\n }, [homeNav, navModel, pageNav]);\n}\n","import { css, cx } from '@emotion/css';\nimport { useLayoutEffect } from 'react';\n\nimport { GrafanaTheme2, PageLayoutType } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { useGrafana } from 'app/core/context/GrafanaContext';\n\nimport NativeScrollbar from '../NativeScrollbar';\n\nimport { PageContents } from './PageContents';\nimport { PageHeader } from './PageHeader';\nimport { PageTabs } from './PageTabs';\nimport { PageType } from './types';\nimport { usePageNav } from './usePageNav';\nimport { usePageTitle } from './usePageTitle';\n\nexport const Page: PageType = ({\n navId,\n navModel: oldNavProp,\n pageNav,\n renderTitle,\n onEditTitle,\n actions,\n subTitle,\n children,\n className,\n info,\n layout = PageLayoutType.Standard,\n onSetScrollRef,\n ...otherProps\n}) => {\n const styles = useStyles2(getStyles);\n const navModel = usePageNav(navId, oldNavProp);\n const { chrome } = useGrafana();\n\n usePageTitle(navModel, pageNav);\n\n const pageHeaderNav = pageNav ?? navModel?.node;\n\n // We use useLayoutEffect here to make sure that the chrome is updated before the page is rendered\n // This prevents flickering sectionNav when going from dashboard to settings for example\n useLayoutEffect(() => {\n if (navModel) {\n chrome.update({\n sectionNav: navModel,\n pageNav: pageNav,\n layout: layout,\n });\n }\n }, [navModel, pageNav, chrome, layout]);\n\n return (\n <div className={cx(styles.wrapper, className)} {...otherProps}>\n {layout === PageLayoutType.Standard && (\n <NativeScrollbar\n // This id is used by the image renderer to scroll through the dashboard\n divId=\"page-scrollbar\"\n onSetScrollRef={onSetScrollRef}\n >\n <div className={styles.pageInner}>\n {pageHeaderNav && (\n <PageHeader\n actions={actions}\n onEditTitle={onEditTitle}\n navItem={pageHeaderNav}\n renderTitle={renderTitle}\n info={info}\n subTitle={subTitle}\n />\n )}\n {pageNav && pageNav.children && <PageTabs navItem={pageNav} />}\n <div className={styles.pageContent}>{children}</div>\n </div>\n </NativeScrollbar>\n )}\n\n {layout === PageLayoutType.Canvas && (\n <NativeScrollbar\n // This id is used by the image renderer to scroll through the dashboard\n divId=\"page-scrollbar\"\n onSetScrollRef={onSetScrollRef}\n >\n <div className={styles.canvasContent}>{children}</div>\n </NativeScrollbar>\n )}\n\n {layout === PageLayoutType.Custom && children}\n </div>\n );\n};\n\nPage.Contents = PageContents;\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n label: 'page-wrapper',\n display: 'flex',\n flex: '1 1 0',\n flexDirection: 'column',\n position: 'relative',\n }),\n pageContent: css({\n label: 'page-content',\n flexGrow: 1,\n }),\n primaryBg: css({\n background: theme.colors.background.primary,\n }),\n pageInner: css({\n label: 'page-inner',\n padding: theme.spacing(2),\n borderBottom: 'none',\n background: theme.colors.background.primary,\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n margin: theme.spacing(0, 0, 0, 0),\n\n [theme.breakpoints.up('md')]: {\n padding: theme.spacing(4),\n },\n }),\n canvasContent: css({\n label: 'canvas-content',\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2),\n flexBasis: '100%',\n flexGrow: 1,\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { HTMLAttributes, ReactNode } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/navigation-tabs--docs\n */\nexport const TabContent = ({ children, className, ...restProps }: Props) => {\n const styles = useStyles2(getTabContentStyle);\n\n return (\n <div {...restProps} className={cx(styles.tabContent, className)}>\n {children}\n </div>\n );\n};\n\nconst getTabContentStyle = (theme: GrafanaTheme2) => ({\n tabContent: css({\n background: theme.colors.background.primary,\n }),\n});\n","import { css } from '@emotion/css';\nimport { forwardRef, HTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeSpacingTokens } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { AlignItems } from '../types';\nimport { getResponsiveStyle, ResponsiveProp } from '../utils/responsiveness';\n\ninterface GridPropsBase extends Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'style'> {\n children: NonNullable<React.ReactNode>;\n /** Specifies the gutters between columns and rows. It is overwritten when a column or row gap has a value. */\n gap?: ResponsiveProp<ThemeSpacingTokens>;\n rowGap?: ResponsiveProp<ThemeSpacingTokens>;\n columnGap?: ResponsiveProp<ThemeSpacingTokens>;\n alignItems?: ResponsiveProp<AlignItems>;\n}\n\ninterface PropsWithColumns extends GridPropsBase {\n /** Number of columns */\n columns?: ResponsiveProp<1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12>;\n minColumnWidth?: never;\n}\n\ninterface PropsWithMinColumnWidth extends GridPropsBase {\n columns?: never;\n /** For a responsive layout, fit as many columns while maintaining this minimum column width.\n * The real width will be calculated based on the theme spacing tokens: `theme.spacing(minColumnWidth)`\n */\n minColumnWidth?: ResponsiveProp<1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 44 | 55 | 72 | 89 | 144>;\n}\n\n/** 'columns' and 'minColumnWidth' are mutually exclusive */\ntype GridProps = PropsWithColumns | PropsWithMinColumnWidth;\n\n/**\n * The Grid component is a layout component that allows you to create a grid of columns and rows to organize content and elements. It is a wrapper around the [CSS Grid](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout) specification.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-grid--docs\n */\nexport const Grid = forwardRef<HTMLDivElement, GridProps>((props, ref) => {\n const { alignItems, children, gap, rowGap, columnGap, columns, minColumnWidth, ...rest } = props;\n const styles = useStyles2(getGridStyles, gap, rowGap, columnGap, columns, minColumnWidth, alignItems);\n\n return (\n <div ref={ref} {...rest} className={styles.grid}>\n {children}\n </div>\n );\n});\n\nGrid.displayName = 'Grid';\n\nconst getGridStyles = (\n theme: GrafanaTheme2,\n gap: GridProps['gap'],\n rowGap: GridProps['rowGap'],\n columnGap: GridProps['columnGap'],\n columns: GridProps['columns'],\n minColumnWidth: GridProps['minColumnWidth'],\n alignItems: GridProps['alignItems']\n) => {\n return {\n grid: css([\n { display: 'grid' },\n getResponsiveStyle(theme, gap, (val) => ({\n gap: theme.spacing(val),\n })),\n getResponsiveStyle(theme, rowGap, (val) => ({\n rowGap: theme.spacing(val),\n })),\n getResponsiveStyle(theme, columnGap, (val) => ({\n columnGap: theme.spacing(val),\n })),\n minColumnWidth &&\n getResponsiveStyle(theme, minColumnWidth, (val) => ({\n gridTemplateColumns: `repeat(auto-fill, minmax(${theme.spacing(val)}, 1fr))`,\n })),\n columns &&\n getResponsiveStyle(theme, columns, (val) => ({\n gridTemplateColumns: `repeat(${val}, 1fr)`,\n })),\n getResponsiveStyle(theme, alignItems, (val) => ({\n alignItems: val,\n })),\n ]),\n };\n};\n","import { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { isResource } from 'app/features/apiserver/guards';\nimport { Resource, ResourceList } from 'app/features/apiserver/types';\nimport { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';\n\nimport { SaveDashboardCommand } from '../components/SaveDashboard/types';\n\nimport { DashboardAPI, DashboardVersionError, DashboardWithAccessInfo, ListDeletedDashboardsOptions } from './types';\nimport {\n failedFromVersion,\n isDashboardV2Spec,\n isV1DashboardCommand,\n isV2DashboardCommand,\n isV2StoredVersion,\n} from './utils';\nimport { K8sDashboardAPI } from './v1';\nimport { K8sDashboardV2API } from './v2';\n\nexport class UnifiedDashboardAPI\n implements DashboardAPI<DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec>, Dashboard | DashboardV2Spec>\n{\n private v1Client: K8sDashboardAPI;\n private v2Client: K8sDashboardV2API;\n\n constructor() {\n this.v1Client = new K8sDashboardAPI();\n this.v2Client = new K8sDashboardV2API();\n }\n\n // Get operation depends on the dashboard format to use one of the two clients\n async getDashboardDTO(uid: string) {\n try {\n return await this.v1Client.getDashboardDTO(uid);\n } catch (error) {\n if (error instanceof DashboardVersionError && isV2StoredVersion(error.data.storedVersion)) {\n return await this.v2Client.getDashboardDTO(uid);\n }\n throw error;\n }\n }\n\n // Save operation depends on the dashboard format to use one of the two clients\n async saveDashboard(options: SaveDashboardCommand<Dashboard | DashboardV2Spec>) {\n if (isV2DashboardCommand(options)) {\n return await this.v2Client.saveDashboard(options);\n }\n if (isV1DashboardCommand(options)) {\n return await this.v1Client.saveDashboard(options);\n }\n throw new Error('Invalid dashboard command');\n }\n\n // Delete operation for any version is supported in the v1 client\n async deleteDashboard(uid: string, showSuccessAlert: boolean) {\n return await this.v1Client.deleteDashboard(uid, showSuccessAlert);\n }\n\n /**\n * List deleted dashboards handling mixed v1/v2 versions or pure v2 dashboards.\n *\n * Steps:\n * 1. Call v1 client to get all deleted dashboards\n * 2. Check if any items have failed conversion from v2 versions\n * 3. If v2 dashboards are detected, call v2 client\n * 4. Filter and combine v1 and v2 dashboards into one response\n */\n async listDeletedDashboards(\n options: ListDeletedDashboardsOptions\n ): Promise<ResourceList<Dashboard | DashboardV2Spec>> {\n const v1Response = await this.v1Client.listDeletedDashboards(options);\n const filteredV1Items = v1Response.items.filter((item) => !failedFromVersion(item, ['v2']));\n\n if (filteredV1Items.length === v1Response.items.length) {\n return v1Response;\n }\n\n const v2Response = await this.v2Client.listDeletedDashboards(options);\n const filteredV2Items = v2Response.items.filter((item) => !failedFromVersion(item, ['v0', 'v1']));\n\n return {\n ...v2Response,\n // Make sure we display only valid resources\n items: [...filteredV1Items, ...filteredV2Items].filter(isResource),\n };\n }\n\n async restoreDashboard(dashboard: Resource<DashboardDataDTO | DashboardV2Spec>) {\n // Await returned promise to support proper error handling with try/catch\n if (isDashboardV2Spec(dashboard.spec) && isResource<DashboardV2Spec>(dashboard)) {\n return await this.v2Client.restoreDashboard(dashboard);\n }\n\n if (isResource<DashboardDataDTO>(dashboard)) {\n return await this.v1Client.restoreDashboard(dashboard);\n }\n throw new Error('Invalid dashboard resource for restore operation');\n }\n}\n","import { AppEvents, UrlQueryMap } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { FetchError, getBackendSrv } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport appEvents from 'app/core/app_events';\nimport { Resource, ResourceList } from 'app/features/apiserver/types';\nimport { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';\nimport { DeleteDashboardResponse } from 'app/features/manage-dashboards/types';\nimport { SaveDashboardResponseDTO, DashboardDTO } from 'app/types/dashboard';\n\nimport { SaveDashboardCommand } from '../components/SaveDashboard/types';\n\nimport { DashboardAPI, ListDeletedDashboardsOptions } from './types';\n\nexport class LegacyDashboardAPI implements DashboardAPI<DashboardDTO, Dashboard> {\n constructor() {}\n\n saveDashboard(options: SaveDashboardCommand<Dashboard>): Promise<SaveDashboardResponseDTO> {\n dashboardWatcher.ignoreNextSave();\n\n return getBackendSrv().post<SaveDashboardResponseDTO>('/api/dashboards/db/', {\n dashboard: options.dashboard,\n message: options.message ?? '',\n overwrite: options.overwrite ?? false,\n folderUid: options.folderUid,\n });\n }\n\n deleteDashboard(uid: string, showSuccessAlert: boolean): Promise<DeleteDashboardResponse> {\n return getBackendSrv().delete<DeleteDashboardResponse>(`/api/dashboards/uid/${uid}`, undefined, {\n showSuccessAlert,\n validatePath: true,\n });\n }\n\n async getDashboardDTO(uid: string, params?: UrlQueryMap) {\n const result = await getBackendSrv().get<DashboardDTO>(`/api/dashboards/uid/${uid}`, params, undefined, {\n validatePath: true,\n });\n\n if (result.meta.isFolder) {\n appEvents.emit(AppEvents.alertError, ['Dashboard not found']);\n const fetchError: FetchError = {\n status: 404,\n config: { url: `/api/dashboards/uid/${uid}` },\n data: {\n message: t('dashboard.legacy-dashboard-api.fetch-error.message.dashboard-not-found', 'Dashboard not found'),\n },\n };\n throw fetchError;\n }\n\n return result;\n }\n\n /**\n * No-op for legacy API\n */\n listDeletedDashboards(options: ListDeletedDashboardsOptions): Promise<ResourceList<Dashboard>> {\n return Promise.resolve({\n apiVersion: 'v1',\n kind: 'List',\n metadata: { resourceVersion: '0' },\n items: [],\n });\n }\n\n /**\n * No-op for legacy API\n */\n restoreDashboard(dashboard: Resource<Dashboard>): Promise<Resource<Dashboard>> {\n return Promise.reject(new Error('Restore functionality not supported in legacy API'));\n }\n}\n","import { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { DashboardDTO } from 'app/types/dashboard';\n\nimport { UnifiedDashboardAPI } from './UnifiedDashboardAPI';\nimport { LegacyDashboardAPI } from './legacy';\nimport { DashboardAPI, DashboardWithAccessInfo } from './types';\nimport { getDashboardsApiVersion } from './utils';\nimport { K8sDashboardAPI } from './v1';\nimport { K8sDashboardV2API } from './v2';\n\ntype DashboardAPIClients = {\n legacy: DashboardAPI<DashboardDTO, Dashboard>;\n v1: DashboardAPI<DashboardDTO, Dashboard>;\n v2: DashboardAPI<DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec>, DashboardV2Spec>;\n unified: DashboardAPI<DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec>, Dashboard | DashboardV2Spec>;\n};\n\nlet clients: Partial<DashboardAPIClients> | undefined;\n\nexport function setDashboardAPI(override: Partial<DashboardAPIClients> | undefined) {\n if (process.env.NODE_ENV !== 'test') {\n throw new Error('dashboardAPI can be only overridden in test environment');\n }\n clients = override;\n}\n\n// Overloads\nexport function getDashboardAPI(): DashboardAPI<\n DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec>,\n Dashboard | DashboardV2Spec\n>;\nexport function getDashboardAPI(responseFormat: 'v1'): DashboardAPI<DashboardDTO, Dashboard>;\nexport function getDashboardAPI(\n responseFormat: 'v2'\n): DashboardAPI<DashboardWithAccessInfo<DashboardV2Spec>, DashboardV2Spec>;\nexport function getDashboardAPI(\n responseFormat?: 'v1' | 'v2'\n): DashboardAPI<DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec>, Dashboard | DashboardV2Spec> {\n const v = getDashboardsApiVersion(responseFormat);\n\n if (!clients) {\n clients = {\n legacy: new LegacyDashboardAPI(),\n v1: new K8sDashboardAPI(),\n v2: new K8sDashboardV2API(),\n unified: new UnifiedDashboardAPI(),\n };\n }\n\n if (!clients[v]) {\n throw new Error(`Unknown Dashboard API version: ${v}`);\n }\n\n return clients[v];\n}\n","import { forwardRef, useState } from 'react';\nimport { Navigate, useLocation } from 'react-router-dom-v5-compat';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, ConfirmModal } from '@grafana/ui';\nimport { RuleIdentifier } from 'app/types/unified-alerting';\n\nimport * as ruleId from '../../utils/rule-id';\n\ninterface ConfirmCloneRuleModalProps {\n identifier: RuleIdentifier;\n isProvisioned: boolean;\n redirectTo?: boolean;\n onDismiss: () => void;\n}\n\nexport function RedirectToCloneRule({\n identifier,\n isProvisioned,\n redirectTo = false,\n onDismiss,\n}: ConfirmCloneRuleModalProps) {\n // For provisioned rules an additional confirmation step is required\n // Users have to be aware that the cloned rule will NOT be marked as provisioned\n const location = useLocation();\n const [stage, setStage] = useState<'redirect' | 'confirm'>(isProvisioned ? 'confirm' : 'redirect');\n\n if (stage === 'redirect') {\n const copyFrom = ruleId.stringifyIdentifier(identifier);\n const returnTo = location.pathname + location.search;\n\n const queryParams = new URLSearchParams({\n copyFrom,\n returnTo: redirectTo ? returnTo : '',\n });\n\n return <Navigate to={`/alerting/new?` + queryParams.toString()} replace={false} />;\n }\n\n return (\n <ConfirmModal\n isOpen={stage === 'confirm'}\n title={t('alerting.redirect-to-clone-rule.title-copy-provisioned-alert-rule', 'Copy provisioned alert rule')}\n body={\n <div>\n <p>\n <Trans i18nKey=\"alerting.redirect-to-clone-rule.body-not-provisioned\">\n The new rule will <strong>not</strong> be marked as a provisioned rule.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"alerting.redirect-to-clone-rule.body-evaluation-group\">\n You will need to set a new evaluation group for the copied rule because the original one has been\n provisioned and cannot be used for rules created in the UI.\n </Trans>\n </p>\n </div>\n }\n confirmText={t('alerting.redirect-to-clone-rule.confirmText-copy', 'Copy')}\n onConfirm={() => setStage('redirect')}\n onDismiss={onDismiss}\n />\n );\n}\n\ninterface CloneRuleButtonProps {\n ruleIdentifier: RuleIdentifier;\n isProvisioned: boolean;\n text?: string;\n className?: string;\n}\n\nexport const CloneRuleButton = forwardRef<HTMLButtonElement, CloneRuleButtonProps>(\n ({ text, ruleIdentifier, isProvisioned, className }, ref) => {\n const [redirectToClone, setRedirectToClone] = useState(false);\n\n return (\n <>\n <Button\n title={t('alerting.clone-rule-button.title-copy', 'Copy')}\n className={className}\n size=\"sm\"\n key=\"clone\"\n variant=\"secondary\"\n icon=\"copy\"\n onClick={() => setRedirectToClone(true)}\n ref={ref}\n >\n {text}\n </Button>\n\n {redirectToClone && (\n <RedirectToCloneRule\n identifier={ruleIdentifier}\n isProvisioned={isProvisioned}\n onDismiss={() => setRedirectToClone(false)}\n />\n )}\n </>\n );\n }\n);\n\nCloneRuleButton.displayName = 'CloneRuleButton';\n","import { PanelOptionsEditorBuilder } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { OptionsWithTextFormatting } from '@grafana/schema';\n\n/**\n * Adds common text control options to a visualization options\n * @param builder\n * @public\n */\nexport function addTextSizeOptions<T extends OptionsWithTextFormatting>(\n builder: PanelOptionsEditorBuilder<T>,\n options: { withValue?: boolean; withTitle?: boolean; withPercentChange?: boolean }\n) {\n const category = [t('grafana-ui.builder.text.category-text-size', 'Text size')];\n if (options.withTitle) {\n builder.addNumberInput({\n path: 'text.titleSize',\n category,\n name: t('grafana-ui.builder.text.name-title', 'Title'),\n settings: {\n placeholder: t('grafana-ui.builder.text.placeholder-title', 'Auto'),\n integer: false,\n min: 1,\n max: 200,\n },\n defaultValue: undefined,\n });\n }\n\n if (options.withValue !== false) {\n builder.addNumberInput({\n path: 'text.valueSize',\n category,\n name: t('grafana-ui.builder.text.name-value', 'Value'),\n settings: {\n placeholder: t('grafana-ui.builder.text.placeholder-value', 'Auto'),\n integer: false,\n min: 1,\n max: 200,\n },\n defaultValue: undefined,\n });\n }\n\n if (options.withPercentChange) {\n builder.addNumberInput({\n path: 'text.percentSize',\n category,\n name: t('grafana-ui.builder.text.name-percent-change', 'Percent change'),\n settings: {\n placeholder: t('grafana-ui.builder.text.placeholder-percent-change', 'Auto'),\n integer: false,\n min: 1,\n max: 200,\n },\n defaultValue: undefined,\n });\n }\n}\n","export const closePopover = (event: React.KeyboardEvent, hidePopper: () => void) => {\n if (event.key === 'Tab' || event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n\n event.stopPropagation();\n\n if (event.key === 'Escape') {\n hidePopper();\n }\n\n return;\n};\n","import { useMemo } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\n\nimport { DataSourceApi, PanelData, PanelPlugin } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { InspectTab } from 'app/features/inspector/types';\n\nimport { supportsDataQuery } from '../PanelEditor/utils';\n\n/**\n * Given PanelData return first data source supporting metadata inspector\n */\nexport const useDatasourceMetadata = (data?: PanelData) => {\n const state = useAsync(async () => getDataSourceWithInspector(data), [data]);\n return state.value;\n};\n\nexport async function getDataSourceWithInspector(data?: PanelData): Promise<DataSourceApi | undefined> {\n const targets = data?.request?.targets || [];\n\n if (data && data.series && targets.length) {\n for (const frame of data.series) {\n if (frame.meta && frame.meta.custom) {\n // get data source from first query\n const dataSource = await getDataSourceSrv().get(targets[0].datasource);\n if (dataSource && dataSource.components?.MetadataInspector) {\n return dataSource;\n }\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Configures tabs for PanelInspector\n */\nexport const useInspectTabs = (\n panel: PanelModel,\n dashboard: DashboardModel,\n plugin: PanelPlugin | undefined | null,\n hasError?: boolean,\n metaDs?: DataSourceApi\n) => {\n return useMemo(() => {\n const tabs = [];\n if (supportsDataQuery(plugin)) {\n tabs.push({ label: t('dashboard.inspect.data-tab', 'Data'), value: InspectTab.Data });\n tabs.push({ label: t('dashboard.inspect.stats-tab', 'Stats'), value: InspectTab.Stats });\n }\n\n if (metaDs) {\n tabs.push({ label: t('dashboard.inspect.meta-tab', 'Meta data'), value: InspectTab.Meta });\n }\n\n tabs.push({ label: t('dashboard.inspect.json-tab', 'JSON'), value: InspectTab.JSON });\n\n if (hasError) {\n tabs.push({ label: t('dashboard.inspect.error-tab', 'Error'), value: InspectTab.Error });\n }\n\n if (dashboard.meta.canEdit && supportsDataQuery(plugin)) {\n tabs.push({ label: t('dashboard.inspect.query-tab', 'Query'), value: InspectTab.Query });\n }\n return tabs;\n }, [plugin, metaDs, dashboard, hasError]);\n};\n","import * as React from 'react';\n\nimport { FieldConfigSource, PanelData, VisualizationSuggestion } from '@grafana/data';\n\n/**\n * Describes the properties that can be passed to the PanelDataErrorView.\n *\n * @alpha\n */\nexport interface PanelDataErrorViewProps {\n message?: string;\n panelId: number;\n data: PanelData;\n fieldConfig?: FieldConfigSource;\n needsTimeField?: boolean;\n needsNumberField?: boolean;\n needsStringField?: boolean;\n suggestions?: VisualizationSuggestion[];\n}\n\n/**\n * Simplified type with defaults that describes the PanelDataErrorView.\n *\n * @internal\n */\nexport type PanelDataErrorViewType = React.ComponentType<PanelDataErrorViewProps>;\n\n/**\n * PanelDataErrorView allows panels to show a consistent error message when\n * the result structure does not meet expected criteria\n *\n * @alpha\n */\nexport let PanelDataErrorView: PanelDataErrorViewType = ({ message }) => {\n return <div>Unable to render data: {message}.</div>;\n};\n\n/**\n * Used to bootstrap the PanelDataErrorView during application start so the\n * PanelDataErrorView is exposed via runtime.\n *\n * @internal\n */\nexport function setPanelDataErrorView(renderer: PanelDataErrorViewType) {\n PanelDataErrorView = renderer;\n}\n","export enum NodeGraphDataFrameFieldNames {\n // Unique identifier [required] [nodes + edges]\n id = 'id',\n // Text to show under the node [nodes]\n title = 'title',\n // Text to show under the node as second line [nodes]\n subTitle = 'subtitle',\n // Main value to be shown inside the node [nodes]\n mainStat = 'mainstat',\n // Second value to be shown inside the node under the mainStat [nodes]\n secondaryStat = 'secondarystat',\n // Prefix for fields which value will represent part of the color circle around the node, values should add up to 1 [nodes]\n arc = 'arc__',\n // Will show a named icon inside the node circle if defined. Can be used only with icons already available in\n // grafana/ui [nodes]\n icon = 'icon',\n // Defines a single color if string (hex or html named value) or color mode config can be used as threshold or\n // gradient. arc__ fields must not be defined if used [nodes + edges]\n color = 'color',\n\n // Id of the source node [required] [edges]\n source = 'source',\n // Id of the target node [required] [edges]\n target = 'target',\n\n // Prefix for fields which will be shown in a context menu [nodes + edges]\n detail = 'detail__',\n\n // Radius of the node [nodes]\n nodeRadius = 'noderadius',\n\n // Thickness of the edge [edges]\n thickness = 'thickness',\n\n // Whether the node or edge should be highlighted (e.g., shown in red) in the UI [nodes + edges]\n // @deprecated -- for edges use color instead\n highlighted = 'highlighted',\n\n // Defines the stroke dash array for the edge [edges]. See SVG strokeDasharray definition for syntax.\n strokeDasharray = 'strokedasharray',\n\n // Supplies a fixed X position for the node to have in the finished graph.\n fixedX = 'fixedx',\n\n // Supplies a fixed Y position for the node to have in the finished graph.\n fixedY = 'fixedy',\n\n // Whether the node is instrumented or not\n isInstrumented = 'isinstrumented',\n}\n","import { PluginLoadingStrategy } from '@grafana/data';\n\nimport { clearPluginSettingsCache } from '../pluginSettings';\n\nimport { CACHE_INITIALISED_AT, DECOUPLED_PLUGIN_REGEX, PLUGIN_PATH_REGEX } from './constants';\n\nconst cache: Record<string, PluginInfo> = {};\n\ntype RegisterPluginInfo = {\n path: string;\n version: string;\n loadingStrategy: PluginLoadingStrategy;\n};\n\ntype PluginInfo = Omit<RegisterPluginInfo, 'path'>;\n\nexport function registerPluginInfoInCache({ path, version, loadingStrategy }: RegisterPluginInfo): void {\n const key = extractCacheKeyFromPath(path);\n\n if (key && !cache[key]) {\n cache[key] = {\n version: encodeURI(version),\n loadingStrategy,\n };\n }\n}\n\nexport function clearPluginInfoInCache(pluginId: string): void {\n const path = pluginId;\n if (cache[path]) {\n delete cache[path];\n }\n clearPluginSettingsCache(pluginId);\n}\n\nexport function resolvePluginUrlWithCache(url: string, defaultBust = CACHE_INITIALISED_AT): string {\n const path = getCacheKey(url);\n if (!path) {\n return `${url}?_cache=${defaultBust}`;\n }\n const version = cache[path]?.version;\n const bust = version || defaultBust;\n return `${url}?_cache=${bust}`;\n}\n\nexport function getPluginInfoFromCache(path: string): PluginInfo | undefined {\n const key = getCacheKey(path);\n if (!key) {\n return;\n }\n return cache[key];\n}\n\nexport function extractCacheKeyFromPath(path: string): string | null {\n const match = path.match(PLUGIN_PATH_REGEX);\n\n if (match) {\n return match[1];\n }\n\n // Decoupled core plugins can be loaded by alternative paths\n const decoupledPluginMatch = path.match(DECOUPLED_PLUGIN_REGEX);\n\n if (decoupledPluginMatch) {\n return decoupledPluginMatch[1];\n }\n\n return null;\n}\n\nfunction getCacheKey(path: string): string | undefined {\n const key = Object.keys(cache).find((key) => path.includes(key));\n if (!key) {\n return;\n }\n return key;\n}\n","import { closestIdx } from '../dataframe/StreamingDataFrame';\n\nexport type Table = [times: number[], ...values: any[][]];\n\n// prevTable and nextTable are assumed sorted ASC on reference [0] arrays\n// nextTable is assumed to be contiguous, only edges are checked for overlap\n// ...so prev: [1,2,5] + next: [3,4,6] -> [1,2,3,4,6]\nexport function amendTable(prevTable: Table, nextTable: Table): Table {\n let [prevTimes] = prevTable;\n let [nextTimes] = nextTable;\n\n let pLen = prevTimes.length;\n let pStart = prevTimes[0];\n let pEnd = prevTimes[pLen - 1];\n\n let nLen = nextTimes.length;\n let nStart = nextTimes[0];\n let nEnd = nextTimes[nLen - 1];\n\n let outTable: Table;\n\n if (pLen) {\n if (nLen) {\n // append, no overlap\n if (nStart > pEnd) {\n outTable = prevTable.map((_, i) => prevTable[i].concat(nextTable[i])) as Table;\n }\n // prepend, no overlap\n else if (nEnd < pStart) {\n outTable = nextTable.map((_, i) => nextTable[i].concat(prevTable[i])) as Table;\n }\n // full replace\n else if (nStart <= pStart && nEnd >= pEnd) {\n outTable = nextTable;\n }\n // partial replace\n else if (nStart > pStart && nEnd < pEnd) {\n // partial replace\n let startIdx = closestIdx(nStart, prevTimes);\n startIdx = prevTimes[startIdx] < nStart ? startIdx + 1 : startIdx;\n let endIdx = closestIdx(nEnd, prevTimes);\n endIdx = prevTimes[endIdx] > nEnd ? endIdx - 1 : endIdx;\n\n outTable = prevTable.map((_, i) =>\n prevTable[i]\n .slice(0, startIdx)\n .concat(nextTable[i])\n .concat(prevTable[i].slice(endIdx + 1))\n ) as Table;\n }\n // append, with overlap\n else if (nStart >= pStart) {\n let idx = closestIdx(nStart, prevTimes);\n idx = prevTimes[idx] < nStart ? idx - 1 : idx;\n outTable = prevTable.map((_, i) => prevTable[i].slice(0, idx).concat(nextTable[i])) as Table;\n }\n // prepend, with overlap\n else if (nEnd >= pStart) {\n let idx = closestIdx(nEnd, prevTimes);\n idx = prevTimes[idx] < nEnd ? idx : idx + 1;\n outTable = nextTable.map((_, i) => nextTable[i].concat(prevTable[i].slice(idx))) as Table;\n }\n } else {\n outTable = prevTable;\n }\n } else {\n if (nLen) {\n outTable = nextTable;\n } else {\n outTable = [[]];\n }\n }\n\n return outTable!;\n}\n\nexport function trimTable(table: Table, fromTime: number, toTime: number): Table {\n let [times, ...vals] = table;\n let fromIdx: number | undefined;\n let toIdx: number | undefined;\n\n // trim to bounds\n if (times[0] < fromTime) {\n fromIdx = closestIdx(fromTime, times);\n\n if (times[fromIdx] < fromTime) {\n fromIdx++;\n }\n }\n\n if (times[times.length - 1] > toTime) {\n toIdx = closestIdx(toTime, times);\n\n if (times[toIdx] > toTime) {\n toIdx--;\n }\n }\n\n if (fromIdx != null || toIdx != null) {\n times = times.slice(fromIdx ?? 0, toIdx);\n vals = vals.map((vals2) => vals2.slice(fromIdx ?? 0, toIdx));\n }\n\n return [times, ...vals];\n}\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { handleRequestError } from '@grafana/api-clients';\nimport { createBaseQuery } from '@grafana/api-clients/rtkq';\nimport { generatedAPI as legacyUserAPI } from '@grafana/api-clients/rtkq/legacy/user';\nimport { AppEvents, locationUtil } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, getBackendSrv, isFetchError, locationService } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { isProvisionedFolderCheck } from 'app/api/clients/folder/v1beta1/utils';\nimport appEvents from 'app/core/app_events';\nimport { contextSrv } from 'app/core/core';\nimport { setStarred } from 'app/core/reducers/navBarTree';\nimport { AnnoKeyFolder, Resource, ResourceList } from 'app/features/apiserver/types';\nimport { getDashboardAPI } from 'app/features/dashboard/api/dashboard_api';\nimport { isDashboardV2Resource, isV1DashboardCommand, isV2DashboardCommand } from 'app/features/dashboard/api/utils';\nimport { SaveDashboardCommand } from 'app/features/dashboard/components/SaveDashboard/types';\nimport { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';\nimport { dispatch } from 'app/store/store';\nimport { PermissionLevel } from 'app/types/acl';\nimport { SaveDashboardResponseDTO, ImportDashboardResponseDTO } from 'app/types/dashboard';\nimport { FolderListItemDTO, FolderDTO, DescendantCount, DescendantCountDTO } from 'app/types/folders';\n\nimport { getDashboardScenePageStateManager } from '../../dashboard-scene/pages/DashboardScenePageStateManager';\nimport { deletedDashboardsCache } from '../../search/service/deletedDashboardsCache';\nimport { refetchChildren, refreshParents } from '../state/actions';\n\nimport { isProvisionedDashboard } from './isProvisioned';\nimport { PAGE_SIZE } from './services';\n\nexport interface DeleteFoldersArgs {\n folderUIDs: string[];\n}\n\ninterface DeleteDashboardsArgs {\n dashboardUIDs: string[];\n}\n\ninterface MoveDashboardsArgs {\n destinationUID: string;\n dashboardUIDs: string[];\n}\n\nexport interface MoveFoldersArgs {\n destinationUID: string;\n folderUIDs: string[];\n}\n\nexport interface MoveFolderArgs {\n folderUID: string;\n destinationUID: string;\n}\n\nexport interface ImportInputs {\n name: string;\n type: string;\n value: string;\n pluginId?: string;\n}\n\ninterface ImportOptions {\n dashboard: Dashboard;\n overwrite: boolean;\n inputs: ImportInputs[];\n folderUid: string;\n}\n\ninterface RestoreDashboardArgs {\n dashboard: Resource<Dashboard | DashboardV2Spec>;\n}\n\nexport interface ListFolderQueryArgs {\n page: number;\n parentUid: string | undefined;\n limit: number;\n permission?: PermissionLevel;\n}\n\nexport const browseDashboardsAPI = createApi({\n tagTypes: ['getFolder'],\n reducerPath: 'browseDashboardsAPI',\n baseQuery: createBaseQuery({ baseURL: '/api' }),\n endpoints: (builder) => ({\n listFolders: builder.query<FolderListItemDTO[], ListFolderQueryArgs>({\n providesTags: (result) =>\n result && result.length > 0\n ? result.map((folder) => ({ type: 'getFolder', id: folder.uid }))\n : [{ type: 'getFolder', id: 'EMPTY_RESULT' }],\n query: ({ parentUid, limit, page, permission }) => ({\n url: '/folders',\n params: { parentUid, limit, page, permission },\n }),\n }),\n\n // get folder info (e.g. title, parents) but *not* children\n getFolder: builder.query<FolderDTO, string>({\n providesTags: (_result, _error, folderUID) => [{ type: 'getFolder', id: folderUID }],\n query: (folderUID) => ({ url: `/folders/${folderUID}`, params: { accesscontrol: true } }),\n }),\n\n // create a new folder\n newFolder: builder.mutation<FolderDTO, { title: string; parentUid?: string }>({\n invalidatesTags: ['getFolder'],\n query: ({ title, parentUid }) => ({\n method: 'POST',\n url: '/folders',\n body: {\n title,\n parentUid,\n },\n }),\n onQueryStarted: ({ parentUid }, { queryFulfilled, dispatch }) => {\n queryFulfilled.then(async ({ data: folder }) => {\n dispatch(\n refetchChildren({\n parentUID: parentUid,\n pageSize: PAGE_SIZE,\n })\n );\n });\n },\n }),\n\n // save an existing folder (e.g. rename)\n saveFolder: builder.mutation<FolderDTO, Pick<FolderDTO, 'uid' | 'title' | 'version' | 'parentUid'>>({\n // because the getFolder calls contain the parents, renaming a parent/grandparent/etc needs to invalidate all child folders\n // we could do something smart and recursively invalidate these child folders but it doesn't seem worth it\n // instead let's just invalidate all the getFolder calls\n invalidatesTags: ['getFolder'],\n query: ({ uid, title, version }) => ({\n method: 'PUT',\n url: `/folders/${uid}`,\n body: {\n title,\n version,\n },\n }),\n onQueryStarted: ({ parentUid }, { queryFulfilled, dispatch }) => {\n queryFulfilled.then(() => {\n dispatch(\n refetchChildren({\n parentUID: parentUid,\n pageSize: PAGE_SIZE,\n })\n );\n });\n },\n }),\n\n // move an *individual* folder. used in the folder actions menu.\n moveFolder: builder.mutation<void, MoveFolderArgs>({\n invalidatesTags: ['getFolder'],\n query: ({ folderUID, destinationUID }) => ({\n url: `/folders/${folderUID}/move`,\n method: 'POST',\n body: { parentUID: destinationUID },\n }),\n onQueryStarted: ({ folderUID, destinationUID }, { queryFulfilled, dispatch }) => {\n queryFulfilled.then(() => {\n dispatch(refreshParents([folderUID]));\n dispatch(\n refetchChildren({\n parentUID: destinationUID,\n pageSize: PAGE_SIZE,\n })\n );\n });\n },\n }),\n\n // delete an *individual* folder. used in the folder actions menu.\n deleteFolder: builder.mutation<void, FolderDTO>({\n invalidatesTags: ['getFolder'],\n query: ({ uid }) => ({\n url: `/folders/${uid}`,\n method: 'DELETE',\n params: {\n // TODO: Once backend returns alert rule counts, set this back to true\n // when this is merged https://github.com/grafana/grafana/pull/67259\n forceDeleteRules: false,\n },\n }),\n onQueryStarted: ({ parentUid }, { queryFulfilled, dispatch }) => {\n queryFulfilled.then(() => {\n dispatch(\n refetchChildren({\n parentUID: parentUid,\n pageSize: PAGE_SIZE,\n })\n );\n });\n },\n }),\n\n // gets the descendant counts for a folder. used in the move/delete modals.\n getAffectedItems: builder.query<DescendantCount, { folderUIDs: string[]; dashboardUIDs: string[] }>({\n // don't cache this data for now, since library panel/alert rule creation isn't done through rtk query\n keepUnusedDataFor: 0,\n queryFn: async ({ folderUIDs, dashboardUIDs }) => {\n try {\n const promises = folderUIDs.map((folderUID) => {\n return getBackendSrv().get<DescendantCountDTO>(`/api/folders/${folderUID}/counts`);\n });\n const results = await Promise.all(promises);\n\n const totalCounts: DescendantCount = {\n folders: folderUIDs.length,\n dashboards: dashboardUIDs.length,\n library_elements: 0,\n alertrules: 0,\n };\n\n for (const folderCounts of results) {\n totalCounts.folders += folderCounts.folder;\n totalCounts.dashboards += folderCounts.dashboard;\n totalCounts.alertrules += folderCounts.alertrule;\n totalCounts.library_elements += folderCounts.librarypanel;\n }\n\n return { data: totalCounts };\n } catch (error) {\n return { error };\n }\n },\n }),\n\n // move *multiple* dashboards. used in the move modal.\n moveDashboards: builder.mutation<void, MoveDashboardsArgs>({\n invalidatesTags: ['getFolder'],\n queryFn: async ({ dashboardUIDs, destinationUID }, _api, _extraOptions, baseQuery) => {\n // Move all the dashboards sequentially\n // TODO error handling here\n for (const dashboardUID of dashboardUIDs) {\n const fullDash = await getDashboardAPI().getDashboardDTO(dashboardUID);\n const dashboard = isDashboardV2Resource(fullDash) ? fullDash.spec : fullDash.dashboard;\n const k8s = isDashboardV2Resource(fullDash) ? fullDash.metadata : undefined;\n\n if (config.featureToggles.provisioning) {\n if (isProvisionedDashboard(fullDash)) {\n appEvents.publish({\n type: AppEvents.alertWarning.name,\n payload: ['Cannot move provisioned dashboard'],\n });\n continue;\n }\n }\n await getDashboardAPI().saveDashboard({\n dashboard,\n folderUid: destinationUID,\n overwrite: false,\n message: '',\n k8s,\n });\n }\n return { data: undefined };\n },\n onQueryStarted: ({ destinationUID, dashboardUIDs }, { queryFulfilled, dispatch }) => {\n queryFulfilled.then(() => {\n dispatch(\n refetchChildren({\n parentUID: destinationUID,\n pageSize: PAGE_SIZE,\n })\n );\n dispatch(refreshParents(dashboardUIDs));\n });\n },\n }),\n\n // move *multiple* folders. used in the move modal.\n moveFolders: builder.mutation<void, MoveFoldersArgs>({\n invalidatesTags: ['getFolder'],\n queryFn: async ({ folderUIDs, destinationUID }, _api, _extraOptions, baseQuery) => {\n // Move all the folders sequentially\n // TODO error handling here\n for (const folderUID of folderUIDs) {\n if (\n await isProvisionedFolderCheck(dispatch, folderUID, {\n warning: t(\n 'folders.api.folder-move-error-provisioned',\n 'Cannot move provisioned folder. To move it, move it in the repository and synchronise to apply the changes.'\n ),\n })\n ) {\n continue;\n }\n\n await baseQuery({\n url: `/folders/${folderUID}/move`,\n method: 'POST',\n body: { parentUID: destinationUID },\n });\n }\n\n return { data: undefined };\n },\n onQueryStarted: ({ destinationUID, folderUIDs }, { queryFulfilled, dispatch }) => {\n queryFulfilled.then(() => {\n dispatch(\n refetchChildren({\n parentUID: destinationUID,\n pageSize: PAGE_SIZE,\n })\n );\n dispatch(refreshParents(folderUIDs));\n });\n },\n }),\n\n // delete *multiple* folders. used in the delete modal.\n deleteFolders: builder.mutation<void, DeleteFoldersArgs>({\n invalidatesTags: ['getFolder'],\n queryFn: async ({ folderUIDs }, _api, _extraOptions, baseQuery) => {\n // Delete all the folders sequentially\n // TODO error handling here\n for (const folderUID of folderUIDs) {\n // This also shows warning alert\n if (await isProvisionedFolderCheck(dispatch, folderUID)) {\n continue;\n }\n await baseQuery({\n url: `/folders/${folderUID}`,\n method: 'DELETE',\n params: {\n // TODO: Once backend returns alert rule counts, set this back to true\n // when this is merged https://github.com/grafana/grafana/pull/67259\n forceDeleteRules: false,\n },\n });\n }\n return { data: undefined };\n },\n onQueryStarted: ({ folderUIDs }, { queryFulfilled, dispatch }) => {\n queryFulfilled.then(() => {\n dispatch(refreshParents(folderUIDs));\n // Clear the deleted dashboards cache since deleting a folder also deletes its dashboards\n deletedDashboardsCache.clear();\n });\n },\n }),\n\n // delete *multiple* dashboards. used in the delete modal.\n deleteDashboards: builder.mutation<void, DeleteDashboardsArgs>({\n invalidatesTags: ['getFolder'],\n queryFn: async ({ dashboardUIDs }) => {\n const pageStateManager = getDashboardScenePageStateManager();\n // Delete all the dashboards sequentially\n // TODO error handling here\n for (const dashboardUID of dashboardUIDs) {\n if (config.featureToggles.provisioning) {\n const dto = await getDashboardAPI().getDashboardDTO(dashboardUID);\n if (isProvisionedDashboard(dto)) {\n appEvents.publish({\n type: AppEvents.alertWarning.name,\n payload: [\n 'Cannot delete provisioned dashboard. To remove it, delete it from the repository and synchronise to apply the changes.',\n ],\n });\n\n continue;\n }\n }\n\n await getDashboardAPI().deleteDashboard(dashboardUID, true);\n\n pageStateManager.clearDashboardCache();\n pageStateManager.removeSceneCache(dashboardUID);\n deletedDashboardsCache.clear();\n\n // handling success alerts for these feature toggles\n // for legacy response, the success alert will be triggered by showSuccessAlert function in public/app/core/services/backend_srv.ts\n if (config.featureToggles.kubernetesDashboards) {\n appEvents.publish({\n type: AppEvents.alertSuccess.name,\n payload: ['Dashboard deleted'],\n });\n }\n }\n return { data: undefined };\n },\n onQueryStarted: ({ dashboardUIDs }, { queryFulfilled, getState }) => {\n queryFulfilled.then(() => {\n dispatch(refreshParents(dashboardUIDs));\n dispatch(legacyUserAPI.util.invalidateTags(['dashboardStars']));\n for (const uid of dashboardUIDs) {\n dispatch(\n setStarred({\n id: uid,\n // We don't need to send the title or url as we're removing the starred items here\n title: '',\n url: '',\n isStarred: false,\n })\n );\n }\n });\n },\n }),\n\n // save an existing dashboard\n saveDashboard: builder.mutation<SaveDashboardResponseDTO, SaveDashboardCommand<Dashboard | DashboardV2Spec>>({\n queryFn: async (cmd) => {\n try {\n if (isV2DashboardCommand(cmd)) {\n const response = await getDashboardAPI('v2').saveDashboard(cmd);\n return { data: response };\n }\n\n if (isV1DashboardCommand(cmd)) {\n const rsp = await getDashboardAPI().saveDashboard(cmd);\n return { data: rsp };\n }\n throw new Error('Invalid dashboard version');\n } catch (error) {\n return handleRequestError(error);\n }\n },\n\n onQueryStarted: ({ folderUid }, { queryFulfilled, dispatch }) => {\n dashboardWatcher.ignoreNextSave();\n queryFulfilled.then(async () => {\n await contextSrv.fetchUserPermissions();\n dispatch(\n refetchChildren({\n parentUID: folderUid,\n pageSize: PAGE_SIZE,\n })\n );\n });\n },\n }),\n\n importDashboard: builder.mutation<ImportDashboardResponseDTO, ImportOptions>({\n query: ({ dashboard, overwrite, inputs, folderUid }) => ({\n method: 'POST',\n url: '/dashboards/import',\n body: {\n dashboard,\n overwrite,\n inputs,\n folderUid,\n },\n }),\n onQueryStarted: async ({ dashboard, folderUid }, { queryFulfilled, dispatch }) => {\n // Check if a dashboard with this UID already exists to find its current folder\n let currentFolderUid: string | undefined;\n if (dashboard.uid) {\n try {\n const existingDashboard = await getDashboardAPI().getDashboardDTO(dashboard.uid);\n currentFolderUid = isDashboardV2Resource(existingDashboard)\n ? existingDashboard.metadata?.name\n : existingDashboard.meta?.folderUid;\n } catch (error) {\n if (isFetchError(error)) {\n if (error.status !== 404) {\n console.error('Error fetching dashboard', error);\n } else {\n // Do not show the error alert if the dashboard does not exist\n // this is expected when importing a new dashboard\n error.isHandled = true;\n }\n }\n }\n }\n\n queryFulfilled.then(async (response) => {\n // Refresh destination folder\n dispatch(\n refetchChildren({\n parentUID: folderUid,\n pageSize: PAGE_SIZE,\n })\n );\n\n // If the dashboard was moved from a different folder, refresh the source folder too\n if (currentFolderUid && currentFolderUid !== folderUid) {\n dispatch(\n refetchChildren({\n parentUID: currentFolderUid,\n pageSize: PAGE_SIZE,\n })\n );\n }\n\n const dashboardUrl = locationUtil.stripBaseFromUrl(response.data.importedUrl);\n locationService.push(dashboardUrl);\n });\n },\n }),\n\n // RTK wrapper for the dashboard API\n listDeletedDashboards: builder.query<ResourceList<Dashboard | DashboardV2Spec>, void>({\n providesTags: ['getFolder'],\n queryFn: async () => {\n try {\n const api = getDashboardAPI();\n const response = await api.listDeletedDashboards({});\n\n return { data: response };\n } catch (error) {\n return handleRequestError(error);\n }\n },\n }),\n\n // restore a dashboard that got deleted\n restoreDashboard: builder.mutation<{ name: string }, RestoreDashboardArgs>({\n invalidatesTags: ['getFolder'],\n queryFn: async ({ dashboard }) => {\n try {\n const api = getDashboardAPI();\n const response = await api.restoreDashboard(dashboard);\n const name = response.spec.title || '';\n const parentFolder = response.metadata?.annotations?.[AnnoKeyFolder];\n\n // Refresh the contents of the folder a dashboard was restored to\n dispatch(\n refetchChildren({\n parentUID: parentFolder,\n pageSize: PAGE_SIZE,\n })\n );\n\n return { data: { name } };\n } catch (error) {\n return handleRequestError(error);\n }\n },\n }),\n }),\n});\n\nexport const {\n endpoints,\n useDeleteFolderMutation,\n useDeleteFoldersMutation,\n useDeleteDashboardsMutation,\n useGetAffectedItemsQuery,\n useGetFolderQuery,\n useLazyGetFolderQuery,\n useMoveFolderMutation,\n useMoveDashboardsMutation,\n useMoveFoldersMutation,\n useNewFolderMutation,\n useSaveDashboardMutation,\n useSaveFolderMutation,\n useRestoreDashboardMutation,\n useListDeletedDashboardsQuery,\n} = browseDashboardsAPI;\n","import { memo, HTMLAttributes, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { Menu } from '../Menu/Menu';\nimport { MenuItem } from '../Menu/MenuItem';\nimport { ScrollContainer } from '../ScrollContainer/ScrollContainer';\nimport { ToolbarButton, ToolbarButtonVariant } from '../ToolbarButton/ToolbarButton';\nimport { PopoverContent } from '../Tooltip/types';\n\nimport { Dropdown } from './Dropdown';\n\nexport interface Props<T> extends HTMLAttributes<HTMLButtonElement> {\n className?: string;\n options: Array<SelectableValue<T>>;\n value?: SelectableValue<T>;\n onChange: (item: SelectableValue<T>) => void;\n /** @deprecated use tooltip instead, tooltipContent is not being processed in ToolbarButton*/\n tooltipContent?: PopoverContent;\n narrow?: boolean;\n variant?: ToolbarButtonVariant;\n tooltip?: string;\n root?: HTMLElement;\n}\n\n/**\n * @deprecated Use Combobox or Dropdown instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-deprecated-buttonselect--docs\n */\nconst ButtonSelectComponent = <T,>(props: Props<T>) => {\n const { className, options, value, onChange, narrow, variant, root, ...restProps } = props;\n const [isOpen, setIsOpen] = useState(false);\n\n const renderMenu = () => (\n <Menu tabIndex={-1} onClose={() => setIsOpen(false)}>\n <ScrollContainer maxHeight=\"100vh\">\n {options.map((item) => (\n <MenuItem\n key={`${item.value}`}\n label={item.label ?? String(item.value)}\n onClick={() => onChange(item)}\n active={item.value === value?.value}\n ariaChecked={item.value === value?.value}\n ariaLabel={item.ariaLabel || item.label}\n disabled={item.isDisabled}\n component={item.component}\n role=\"menuitemradio\"\n />\n ))}\n </ScrollContainer>\n </Menu>\n );\n\n return (\n <Dropdown root={root} overlay={renderMenu} placement=\"bottom-end\">\n <ToolbarButton className={className} isOpen={isOpen} narrow={narrow} variant={variant} {...restProps}>\n {value?.label || (value?.value != null ? String(value?.value) : null)}\n </ToolbarButton>\n </Dropdown>\n );\n};\n\nButtonSelectComponent.displayName = 'ButtonSelect';\n\n// needed to properly forward the generic type through React.memo\n// see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-656596623\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nexport const ButtonSelect = memo(ButtonSelectComponent) as typeof ButtonSelectComponent;\n","import { createAction, createReducer } from '@reduxjs/toolkit';\nimport { remove } from 'lodash';\n\nimport { AlertManagerCortexConfig, Receiver } from 'app/plugins/datasource/alertmanager/types';\n\nimport { renameReceiverInRoute } from '../../utils/notification-policies';\n\nexport const addReceiverAction = createAction<Receiver>('receiver/add');\nexport const updateReceiverAction = createAction<{ name: string; receiver: Receiver }>('receiver/update');\nexport const deleteReceiverAction = createAction<string>('receiver/delete');\n\nconst initialState: AlertManagerCortexConfig = {\n alertmanager_config: {},\n template_files: {},\n};\n\n/**\n * This reducer will manage action related to receiver (Contact points) and make sure all operations on the alertmanager\n * configuration happen immutably and only mutate what they need.\n */\nexport const receiversReducer = createReducer(initialState, (builder) => {\n builder\n // add a new receiver\n .addCase(addReceiverAction, (draft, { payload: newReceiver }) => {\n // ensure the receivers are always an array\n const currentReceivers = (draft.alertmanager_config.receivers = draft.alertmanager_config.receivers ?? []);\n\n // check if the name doesn't already exist\n const nameExists = currentReceivers.some((receiver) => receiver.name === newReceiver.name);\n if (nameExists) {\n throw new Error(`Duplicate receiver name ${newReceiver.name}`);\n }\n\n // add the receiver\n currentReceivers.push(newReceiver);\n })\n // upate an existing receiver\n .addCase(updateReceiverAction, (draft, { payload }) => {\n const { name, receiver } = payload;\n const renaming = name !== receiver.name;\n\n const receivers = draft.alertmanager_config.receivers ?? [];\n\n const targetIndex = receivers.findIndex((receiver) => receiver.name === name);\n const targetExists = targetIndex > -1;\n\n // check if the receiver we want to update exists\n if (!targetExists) {\n throw new Error(`Expected receiver ${name} to exist, but did not find it in the config`);\n }\n\n // check if the new name doesn't already exist\n if (renaming) {\n const nameExists = receivers.some((oldReceiver) => oldReceiver.name === receiver.name);\n if (nameExists) {\n throw new Error(`Duplicate receiver name ${receiver.name}`);\n }\n }\n\n // overwrite the receiver with the new one\n receivers[targetIndex] = receiver;\n\n // check if we need to update routes if the contact point was renamed\n const routeTree = draft.alertmanager_config.route;\n\n if (routeTree && renaming) {\n draft.alertmanager_config.route = renameReceiverInRoute(routeTree, name, receiver.name);\n }\n })\n // delete a receiver from the alertmanager configuration\n .addCase(deleteReceiverAction, (draft, { payload: name }) => {\n remove(draft.alertmanager_config.receivers ?? [], (receiver) => receiver.name === name);\n });\n});\n","import { rangeUtil } from '@grafana/data';\n\nimport { TimeOptions } from '../types/time';\n\n/**\n * ⚠️\n * Some of these functions might be confusing, but there is a significant difference between \"Golang duration\",\n * supported by the time.ParseDuration() function and \"prometheus duration\" which is similar but does not support anything\n * smaller than seconds and adds the following supported units: \"d, w, y\"\n */\n\nexport function parseInterval(value: string): [number, string] {\n const match = value.match(/(\\d+)(\\w+)/);\n if (match) {\n return [Number(match[1]), match[2]];\n }\n throw new Error(`Invalid interval description: ${value}`);\n}\n\nexport function intervalToSeconds(interval: string): number {\n const { sec, count } = rangeUtil.describeInterval(interval);\n return sec * count;\n}\n\nexport const timeOptions = Object.entries(TimeOptions).map(([key, value]) => ({\n label: key[0].toUpperCase() + key.slice(1),\n value: value,\n}));\n\nexport function isValidPrometheusDuration(duration: string): boolean {\n try {\n parsePrometheusDuration(duration);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nconst PROMETHEUS_SUFFIX_MULTIPLIER: Record<string, number> = {\n ms: 1,\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n w: 7 * 24 * 60 * 60 * 1000,\n y: 365 * 24 * 60 * 60 * 1000,\n};\n\nconst DURATION_REGEXP = new RegExp(/^(?:(?<value>\\d+)(?<type>ms|s|m|h|d|w|y))|0$/);\nconst INVALID_FORMAT = new Error(\n `Must be of format \"(number)(unit)\", for example \"1m\", or just \"0\". Available units: ${Object.values(\n TimeOptions\n ).join(', ')}`\n);\n\n/**\n * According to https://prometheus.io/docs/alerting/latest/configuration/#configuration-file\n * see <duration>\n *\n * @returns Duration in milliseconds\n */\nexport function parsePrometheusDuration(duration: string): number {\n let input = duration;\n const parts: Array<[number, string]> = [];\n\n function matchDuration(part: string) {\n const match = DURATION_REGEXP.exec(part);\n const hasValueAndType = match?.groups?.value && match?.groups?.type;\n\n if (!match || !hasValueAndType) {\n throw INVALID_FORMAT;\n }\n\n if (match && match.groups?.value && match.groups?.type) {\n input = input.replace(match[0], '');\n parts.push([Number(match.groups.value), match.groups.type]);\n }\n\n if (input) {\n matchDuration(input);\n }\n }\n\n matchDuration(duration);\n\n if (!parts.length) {\n throw INVALID_FORMAT;\n }\n\n const totalDuration = parts.reduce((acc, [value, type]) => {\n const duration = value * PROMETHEUS_SUFFIX_MULTIPLIER[type];\n return acc + duration;\n }, 0);\n\n return totalDuration;\n}\n\n/**\n * Formats the given duration in milliseconds into a human-readable string representation.\n *\n * @param milliseconds - The duration in milliseconds.\n * @returns The formatted duration string.\n */\nexport function formatPrometheusDuration(milliseconds: number): string {\n const seconds = Math.floor(milliseconds / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const weeks = Math.floor(days / 7);\n const years = Math.floor(days / 365);\n\n // we'll make an exception here for 0, 0ms seems a bit weird\n if (milliseconds === 0) {\n return '0s';\n }\n\n const timeUnits: Array<[number, string]> = [\n [years, 'y'],\n [weeks % 52, 'w'],\n [(days % 365) - 7 * (weeks % 52), 'd'],\n [hours % 24, 'h'],\n [minutes % 60, 'm'],\n [seconds % 60, 's'],\n [milliseconds % 1000, 'ms'],\n ];\n\n return (\n timeUnits\n // remove all 0 values\n .filter(([time]) => time > 0)\n // join time and unit\n .map(([time, unit]) => time + unit)\n .join('')\n );\n}\n\n/**\n * Parses a Prometheus duration string and returns the duration in milliseconds.\n * If the duration is invalid, it returns 0.\n *\n * @param duration - The Prometheus duration string to parse.\n * @returns The duration in milliseconds.\n */\nexport const safeParsePrometheusDuration = (duration: string): number => {\n try {\n return parsePrometheusDuration(duration);\n } catch (e) {\n return 0;\n }\n};\n\nexport const isNullDate = (date: string) => {\n return date.includes('0001-01-01T00');\n};\n\n// Format given time span in MS to the largest single unit duration string up to hours.\nexport function msToSingleUnitDuration(rangeMs: number): string {\n if (rangeMs % (1000 * 60 * 60) === 0) {\n return rangeMs / (1000 * 60 * 60) + 'h';\n }\n if (rangeMs % (1000 * 60) === 0) {\n return rangeMs / (1000 * 60) + 'm';\n }\n if (rangeMs % 1000 === 0) {\n return rangeMs / 1000 + 's';\n }\n return rangeMs.toFixed() + 'ms';\n}\n","export const EXTRA_CONFIG_UID = '~grafana-with-extra-config';\n\nexport interface ExtraConfiguration {\n identifier: string;\n source?: string;\n createdAt?: string;\n}\n\nexport interface AlertingConfigResponse {\n extra_config?: ExtraConfiguration[];\n}\n\nexport function isExtraConfig(name: string): boolean {\n return name === EXTRA_CONFIG_UID;\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\ntype Props = {\n toggleShowAllSeries: () => void;\n info: React.ReactNode;\n tooltip: string;\n buttonLabel: React.ReactNode;\n};\n\nexport function LimitedDataDisclaimer(props: Props) {\n const { toggleShowAllSeries, info, tooltip, buttonLabel } = props;\n const styles = useStyles2(getStyles);\n\n return (\n <div key=\"disclaimer\" className={styles.disclaimer}>\n <span className={styles.warningMessage}>\n <Icon name=\"exclamation-triangle\" aria-hidden=\"true\" />\n {info}\n </span>\n\n <Tooltip content={tooltip}>\n <Button variant=\"secondary\" size=\"sm\" onClick={toggleShowAllSeries}>\n {buttonLabel}\n </Button>\n </Tooltip>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n disclaimer: css({\n label: 'series-disclaimer',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }),\n warningMessage: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n color: theme.colors.warning.main,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n});\n","import { SceneObject } from '@grafana/scenes';\n\nimport { DashboardLayoutManager } from './DashboardLayoutManager';\n\n/**\n * This interface is needed to support layouts existing on different levels of the scene (DashboardScene and inside the TabsLayoutManager)\n */\nexport interface LayoutParent extends SceneObject {\n /**\n * Returns the inner layout manager\n */\n getLayout(): DashboardLayoutManager;\n\n /**\n * Switches the inner layout manager\n * @param newLayout The new layout manager to switch to\n * @param skipUndo If true, skips creating an undo entry for this operation\n */\n switchLayout(newLayout: DashboardLayoutManager, skipUndo?: boolean): void;\n}\n\nexport function isLayoutParent(obj: SceneObject): obj is LayoutParent {\n return 'switchLayout' in obj;\n}\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { IconButton, useStyles2 } from '@grafana/ui';\n\ntype Props = {\n onClick: () => void;\n 'aria-label'?: string;\n style?: React.CSSProperties;\n};\n\nexport const CloseButton = ({ onClick, 'aria-label': ariaLabel, style }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <IconButton\n aria-label={ariaLabel ?? 'Close'}\n className={styles}\n name=\"times\"\n onClick={onClick}\n style={style}\n tooltip={t('close-button.tooltip', 'Close')}\n />\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) =>\n css({\n position: 'absolute',\n right: theme.spacing(0.5),\n top: theme.spacing(1),\n });\n","import { createContext, ReactElement, PropsWithChildren, useMemo, useContext } from 'react';\n\n// Generic schema type to avoid zod dependency in @grafana/data\ninterface ZodSchema {\n parse: (data: unknown) => unknown;\n safeParse: (data: unknown) => { success: boolean; data?: unknown; error?: unknown };\n}\n\nexport interface RestrictedGrafanaApisContextTypeInternal {\n // Add types for restricted Grafana APIs here\n // (Make sure that they are typed as optional properties)\n // e.g. addPanel?: (vizPanel: VizPanel) => void;\n alertingAlertRuleFormSchema?: ZodSchema;\n}\n\n// We are exposing this through a \"type validation\", to make sure that all APIs are optional (which helps plugins catering for scenarios when they are not available).\ntype RequireAllPropertiesOptional<T> = keyof T extends never\n ? T\n : { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T] extends never\n ? T\n : 'Error: all properties of `RestrictedGrafanaApisContextTypeInternal` must be marked as optional, as their availability is controlled via a configuration parameter. Please have a look at `RestrictedGrafanaApisContextTypeInternal`.';\nexport type RestrictedGrafanaApisContextType = RequireAllPropertiesOptional<RestrictedGrafanaApisContextTypeInternal>;\n\n// A type for allowing / blocking plugins for a given API\nexport type RestrictedGrafanaApisAllowList = Partial<\n Record<keyof RestrictedGrafanaApisContextType | string, Array<string | RegExp>>\n>;\n\nexport const RestrictedGrafanaApisContext = createContext<RestrictedGrafanaApisContextType>({});\n\nexport type Props = {\n pluginId: string;\n apis: RestrictedGrafanaApisContextType;\n // Use it to share APIs with plugins (TAKES PRECEDENCE over `apiBlockList`)\n apiAllowList?: RestrictedGrafanaApisAllowList;\n // Use it to disable sharing APIs with plugins.\n apiBlockList?: RestrictedGrafanaApisAllowList;\n};\n\nexport function RestrictedGrafanaApisContextProvider(props: PropsWithChildren<Props>): ReactElement {\n const { children, pluginId, apis, apiAllowList, apiBlockList } = props;\n const allowedApis = useMemo(() => {\n const allowedApis: RestrictedGrafanaApisContextType = {};\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n for (const api of Object.keys(apis) as Array<keyof RestrictedGrafanaApisContextType>) {\n if (\n apiAllowList &&\n apiAllowList[api] &&\n (apiAllowList[api].includes(pluginId) ||\n apiAllowList[api].some((keyword) => keyword instanceof RegExp && keyword.test(pluginId)))\n ) {\n allowedApis[api] = apis[api];\n continue;\n }\n\n // IF no allow list is defined (only block list), then we only omit the blocked APIs\n if (\n (!apiAllowList || Object.keys(apiAllowList).length === 0) &&\n apiBlockList &&\n apiBlockList[api] &&\n !(\n apiBlockList[api].includes(pluginId) ||\n apiBlockList[api].some((keyword) => keyword instanceof RegExp && keyword.test(pluginId))\n )\n ) {\n allowedApis[api] = apis[api];\n }\n }\n\n return allowedApis;\n }, [apis, apiAllowList, apiBlockList, pluginId]);\n\n return <RestrictedGrafanaApisContext.Provider value={allowedApis}>{children}</RestrictedGrafanaApisContext.Provider>;\n}\n\nexport function useRestrictedGrafanaApis(): RestrictedGrafanaApisContextType {\n const context = useContext(RestrictedGrafanaApisContext);\n\n if (!context) {\n throw new Error(\n 'useRestrictedGrafanaApis() can only be used inside a plugin context (The `RestrictedGrafanaApisContext` is not available).'\n );\n }\n\n return context;\n}\n","import { Trans } from '@grafana/i18n';\nimport { LinkButton, Stack } from '@grafana/ui';\nimport { RepositoryUrLs } from 'app/api/clients/provisioning/v0alpha1';\n\ninterface Props {\n jobType?: 'sync' | 'delete' | 'move';\n urls?: RepositoryUrLs;\n}\nexport function PullRequestButtons({ urls, jobType }: Props) {\n const pullRequestURL = urls?.newPullRequestURL;\n const compareURL = urls?.compareURL;\n const branchURL = urls?.sourceURL;\n\n if (jobType === 'sync') {\n return null;\n }\n\n return (\n <Stack>\n <LinkButton href={branchURL} icon=\"external-link-alt\" variant=\"secondary\" target=\"_blank\">\n <Trans i18nKey=\"provisioning.repository-link.delete-or-move-job.view-branch\">View branch</Trans>\n </LinkButton>\n <LinkButton href={compareURL} icon=\"external-link-alt\" variant=\"secondary\" target=\"_blank\">\n <Trans i18nKey=\"provisioning.repository-link.delete-or-move-job.compare-branch\">Compare branch</Trans>\n </LinkButton>\n <LinkButton href={pullRequestURL} icon=\"external-link-alt\" variant=\"secondary\" target=\"_blank\">\n <Trans i18nKey=\"provisioning.repository-link.delete-or-move-job.open-pull-request\">Open pull request</Trans>\n </LinkButton>\n </Stack>\n );\n}\n","import { skipToken } from '@reduxjs/toolkit/query';\n\nimport { Trans } from '@grafana/i18n';\nimport { LinkButton, Stack, Text, TextLink } from '@grafana/ui';\nimport { useGetRepositoryQuery } from 'app/api/clients/provisioning/v0alpha1';\n\nimport { getRepoHref } from '../utils/git';\n\ntype RepositoryLinkProps = {\n name?: string;\n jobType: 'sync' | 'delete' | 'move';\n};\n\nexport function RepositoryLink({ name, jobType }: RepositoryLinkProps) {\n const repoQuery = useGetRepositoryQuery(name ? { name } : skipToken);\n const repo = repoQuery.data;\n\n if (!repo || repoQuery.isLoading) {\n return null;\n }\n\n const repoHref = getRepoHref(repo.spec?.github);\n\n if (jobType === 'sync') {\n return (\n <>\n <Text>\n <Trans i18nKey=\"provisioning.repository-link.grafana-repository-synced\">\n Your resources are now in your external storage and provisioned into your instance. From now on, your\n instance and the external storage will be synchronized.\n </Trans>\n </Text>\n\n {repoHref && (\n <Stack direction=\"row\" gap={2}>\n <TextLink href={repoHref} external>\n <Trans i18nKey=\"provisioning.repository-link.sync-job.view-repository\">View repository</Trans>\n </TextLink>\n </Stack>\n )}\n </>\n );\n }\n\n return (\n <>\n {repoHref && (\n <Stack direction=\"row\" gap={2}>\n <LinkButton href={repoHref} icon=\"external-link-alt\" variant=\"secondary\" target=\"_blank\">\n <Trans i18nKey=\"provisioning.repository-link.delete-or-move-job.view-repository\">View repository</Trans>\n </LinkButton>\n </Stack>\n )}\n </>\n );\n}\n","import { css } from '@emotion/css';\nimport { useRef, useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface ProgressBarProps {\n progress?: number;\n topBottomSpacing?: number;\n}\nconst ProgressBar = ({ progress, topBottomSpacing }: ProgressBarProps) => {\n const styles = useStyles2(getStyles, topBottomSpacing);\n const previousProgress = useRef(0);\n const shouldAnimate = progress !== undefined && progress > previousProgress.current;\n\n useEffect(() => {\n if (progress !== undefined) {\n previousProgress.current = progress;\n }\n }, [progress]);\n\n if (progress === undefined) {\n return null;\n }\n\n return (\n <div\n className={styles.container}\n aria-label={t('provisioning.shared.progress-bar.aria-label', 'Progress Bar')}\n role=\"progressbar\"\n aria-valuenow={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <div className={shouldAnimate ? styles.fillerAnimated : styles.filler} style={{ width: `${progress}%` }} />\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, topBottomSpacing = 2) => ({\n container: css({\n height: '10px',\n width: '400px',\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.pill,\n overflow: 'hidden',\n margin: theme.spacing(topBottomSpacing, 0),\n }),\n filler: css({\n height: '100%',\n background: theme.colors.success.text,\n }),\n fillerAnimated: css({\n height: '100%',\n background: theme.colors.success.text,\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: 'width 0.5s ease-in-out',\n },\n }),\n});\n\nexport default ProgressBar;\n","import { useEffect, useRef } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { ControlledCollapse, Spinner, Stack, Text } from '@grafana/ui';\nimport { Job } from 'app/api/clients/provisioning/v0alpha1';\n\nimport { PullRequestButtons } from '../Repository/PullRequestButtons';\nimport { RepositoryLink } from '../Repository/RepositoryLink';\nimport ProgressBar from '../Shared/ProgressBar';\nimport { StepStatusInfo } from '../Wizard/types';\n\nimport { JobSummary } from './JobSummary';\n\nexport interface JobContentProps {\n jobType: 'sync' | 'delete' | 'move';\n job?: Job;\n isFinishedJob?: boolean;\n onStatusChange?: (statusInfo: StepStatusInfo) => void;\n}\n\nexport function JobContent({ jobType, job, isFinishedJob = false, onStatusChange }: JobContentProps) {\n const errorSetRef = useRef(false);\n\n const { state, message, progress, summary, errors } = job?.status || {};\n const repoName = job?.metadata?.labels?.['provisioning.grafana.app/repository'];\n const pullRequestURL = job?.status?.url?.newPullRequestURL;\n\n // Update step status based on job state\n useEffect(() => {\n if (!state) {\n return;\n }\n\n switch (state) {\n case 'success':\n onStatusChange?.({ status: 'success' });\n break;\n case 'warning':\n if (!errorSetRef.current) {\n onStatusChange?.({\n status: 'warning',\n warning: {\n title: t('provisioning.job-status.status.title-warning-running-job', 'Job completed with warnings'),\n message: errors?.length ? errors : message,\n },\n });\n errorSetRef.current = true;\n }\n break;\n case 'error':\n if (!errorSetRef.current) {\n onStatusChange?.({\n status: 'error',\n error: {\n title: t('provisioning.job-status.status.title-error-running-job', 'Error running job'),\n message: errors?.length ? errors : message,\n },\n });\n errorSetRef.current = true;\n }\n break;\n case 'working':\n case 'pending':\n onStatusChange?.({ status: 'running' });\n break;\n default:\n break;\n }\n }, [state, message, errors, onStatusChange]);\n\n if (!job?.status) {\n return null;\n }\n\n return (\n <Stack direction=\"column\" gap={2}>\n <Stack direction=\"column\" gap={2}>\n {['working', 'pending'].includes(state ?? '') && (\n <Stack direction=\"column\" alignItems=\"center\">\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"center\" gap={2}>\n <Spinner size={24} />\n <Text element=\"h3\" variant=\"h5\" color=\"secondary\">\n {message ?? state ?? t('provisioning.job-status.starting', 'Starting...')}\n </Text>\n </Stack>\n <ProgressBar progress={progress ?? 0} />\n </Stack>\n )}\n {isFinishedJob && summary && (\n <Stack direction=\"column\" gap={2}>\n <Text variant=\"h3\">\n <Trans i18nKey=\"provisioning.job-status.summary\">Summary</Trans>\n </Text>\n <JobSummary summary={summary} />\n </Stack>\n )}\n {state === 'success' ? (\n pullRequestURL ? (\n <PullRequestButtons urls={job.status?.url} jobType={jobType} />\n ) : (\n <RepositoryLink name={repoName} jobType={jobType} />\n )\n ) : (\n <ControlledCollapse label={t('provisioning.job-status.label-view-details', 'View details')} isOpen={false}>\n <pre>{JSON.stringify(job, null, 2)}</pre>\n </ControlledCollapse>\n )}\n </Stack>\n </Stack>\n );\n}\n","import { useEffect, useRef } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Spinner, Stack, Text } from '@grafana/ui';\nimport { useGetRepositoryJobsWithPathQuery } from 'app/api/clients/provisioning/v0alpha1';\n\nimport { StepStatusInfo } from '../Wizard/types';\n\nimport { JobContent } from './JobContent';\n\nexport interface FinishedJobProps {\n jobUid: string;\n repositoryName: string;\n jobType: 'sync' | 'delete' | 'move';\n onStatusChange?: (statusInfo: StepStatusInfo) => void;\n}\n\nexport function FinishedJobStatus({ jobUid, repositoryName, jobType, onStatusChange }: FinishedJobProps) {\n const hasRetried = useRef(false);\n const finishedQuery = useGetRepositoryJobsWithPathQuery({\n name: repositoryName,\n uid: jobUid,\n });\n const retryFailed = hasRetried.current && finishedQuery.isError;\n\n const job = finishedQuery.data;\n\n useEffect(() => {\n const shouldRetry = !job && !hasRetried.current && !finishedQuery.isFetching;\n let timeoutId: ReturnType<typeof setTimeout>;\n\n if (shouldRetry) {\n hasRetried.current = true;\n timeoutId = setTimeout(() => {\n finishedQuery.refetch();\n }, 1000);\n }\n\n if (retryFailed) {\n onStatusChange?.({\n status: 'error',\n error: {\n title: t('provisioning.job-status.no-job-found', 'No job found'),\n message: t(\n 'provisioning.job-status.no-job-found-message',\n 'The job may have been deleted or could not be retrieved. Cancel the current process and start again.'\n ),\n },\n });\n return;\n }\n\n if (finishedQuery.isSuccess && job?.status) {\n const { state, message, errors } = job.status;\n\n if (state === 'error') {\n onStatusChange?.({\n status: 'error',\n error: {\n title: t('provisioning.job-status.status.title-error-running-job', 'Error running job'),\n message: errors?.length ? errors : message,\n },\n });\n } else if (state === 'success') {\n onStatusChange?.({\n status: 'success',\n success: {\n title: t('provisioning.job-status.status.title-success-running-job', 'Job completed successfully'),\n },\n });\n } else if (state === 'warning') {\n onStatusChange?.({\n status: 'warning',\n warning: {\n title: t('provisioning.job-status.status.title-warning-running-job', 'Job completed with warnings'),\n message: errors?.length ? errors : message,\n },\n });\n }\n }\n\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }, [finishedQuery, job, onStatusChange, retryFailed]);\n\n if (!job || finishedQuery.isLoading || finishedQuery.isFetching) {\n return (\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"center\" gap={2}>\n <Spinner size={24} />\n <Text element=\"h4\" color=\"secondary\">\n <Trans i18nKey=\"provisioning.job-status.loading-finished-job\">Loading finished job...</Trans>\n </Text>\n </Stack>\n );\n }\n\n return <JobContent job={job} isFinishedJob={true} onStatusChange={onStatusChange} jobType={jobType} />;\n}\n","import { Trans, t } from '@grafana/i18n';\nimport { Spinner, Stack, Text } from '@grafana/ui';\nimport { Job, useListJobQuery } from 'app/api/clients/provisioning/v0alpha1';\n\nimport { StepStatusInfo } from '../Wizard/types';\n\nimport { FinishedJobStatus } from './FinishedJobStatus';\nimport { JobContent } from './JobContent';\n\nexport interface JobStatusProps {\n watch: Job;\n jobType: 'sync' | 'delete' | 'move';\n onStatusChange?: (statusInfo: StepStatusInfo) => void;\n}\n\nexport function JobStatus({ jobType, watch, onStatusChange }: JobStatusProps) {\n const activeQuery = useListJobQuery({\n fieldSelector: `metadata.name=${watch.metadata?.name}`,\n watch: true,\n });\n const activeJob = activeQuery?.data?.items?.[0];\n const repoLabel = watch.metadata?.labels?.['provisioning.grafana.app/repository'];\n\n // Only initialize finished query if we've checked active jobs and found none\n const activeQueryCompleted = !activeQuery.isUninitialized && !activeQuery.isLoading;\n const shouldCheckFinishedJobs = activeQueryCompleted && !activeJob && !!repoLabel;\n\n if (activeQuery.isLoading) {\n return (\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"center\" gap={2}>\n <Spinner size={24} />\n <Text element=\"h4\" color=\"secondary\">\n <Trans i18nKey=\"provisioning.job-status.starting\">Starting...</Trans>\n </Text>\n </Stack>\n );\n }\n\n if (activeQuery.isError) {\n onStatusChange?.({\n status: 'error',\n error: {\n title: t('provisioning.job-status.title.error-fetching-active-job', 'Error fetching active job'),\n },\n });\n return null;\n }\n\n if (activeJob) {\n return <JobContent job={activeJob} isFinishedJob={false} onStatusChange={onStatusChange} jobType={jobType} />;\n }\n\n if (shouldCheckFinishedJobs) {\n return (\n <FinishedJobStatus\n jobUid={watch.metadata?.uid!}\n repositoryName={repoLabel}\n onStatusChange={onStatusChange}\n jobType={jobType}\n />\n );\n }\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"center\" gap={2}>\n <Spinner size={24} />\n <Text element=\"h4\" weight=\"bold\">\n <Trans i18nKey=\"provisioning.job-status.starting\">Starting...</Trans>\n </Text>\n </Stack>\n );\n}\n","import { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { config, locationService } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport { IconName, Menu } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { isPublicDashboardsEnabled } from '../../../dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { getTrackingSource, shareDashboardType } from '../../../dashboard/components/ShareModal/utils';\nimport { DashboardScene } from '../../scene/DashboardScene';\nimport { DashboardInteractions } from '../../utils/interactions';\n\nconst newShareButtonSelector = e2eSelectors.pages.Dashboard.DashNav.newShareButton.menu;\n\nexport interface ShareDrawerMenuItem {\n shareId: string;\n testId: string;\n label: string;\n description?: string;\n icon: IconName;\n renderCondition: boolean;\n onClick: (d: DashboardScene) => void;\n renderDividerAbove?: boolean;\n component?: React.ComponentType;\n className?: string;\n}\n\nlet customShareDrawerItems: ShareDrawerMenuItem[] = [];\n\nexport function addDashboardShareDrawerItem(item: ShareDrawerMenuItem) {\n customShareDrawerItems.push(item);\n}\n\nexport function resetDashboardShareDrawerItems() {\n customShareDrawerItems = [];\n}\n\nexport default function ShareMenu({ dashboard, panel }: { dashboard: DashboardScene; panel?: VizPanel }) {\n const onMenuItemClick = (shareView: string) => {\n locationService.partial({ shareView });\n };\n\n const buildMenuItems = useCallback(() => {\n const menuItems: ShareDrawerMenuItem[] = [];\n\n menuItems.push({\n shareId: shareDashboardType.link,\n testId: newShareButtonSelector.shareInternally,\n icon: 'building',\n label: t('share-dashboard.menu.share-internally-title', 'Share internally'),\n renderCondition: true,\n onClick: () => onMenuItemClick(shareDashboardType.link),\n });\n\n menuItems.push({\n shareId: shareDashboardType.publicDashboard,\n testId: newShareButtonSelector.shareExternally,\n icon: 'share-alt',\n label: t('share-dashboard.menu.share-externally-title', 'Share externally'),\n renderCondition: !panel && isPublicDashboardsEnabled(),\n onClick: () => {\n onMenuItemClick(shareDashboardType.publicDashboard);\n },\n });\n\n menuItems.push({\n shareId: shareDashboardType.snapshot,\n testId: newShareButtonSelector.shareSnapshot,\n icon: 'camera',\n label: t('share-dashboard.menu.share-snapshot-title', 'Share snapshot'),\n renderCondition:\n contextSrv.isSignedIn &&\n config.snapshotEnabled &&\n contextSrv.hasPermission(AccessControlAction.SnapshotsCreate),\n onClick: () => {\n onMenuItemClick(shareDashboardType.snapshot);\n },\n });\n\n customShareDrawerItems.forEach((d) => menuItems.push(d));\n\n return menuItems.filter((item) => item.renderCondition);\n }, [panel]);\n\n const onClick = (item: ShareDrawerMenuItem) => {\n DashboardInteractions.sharingCategoryClicked({\n item: item.shareId,\n shareResource: getTrackingSource(panel?.getRef()),\n });\n\n item.onClick(dashboard);\n };\n\n return (\n <Menu data-testid={newShareButtonSelector.container}>\n {buildMenuItems().map((item) => (\n <React.Fragment key={item.shareId}>\n {item.renderDividerAbove && <Menu.Divider />}\n <Menu.Item\n testId={item.testId}\n label={item.label}\n icon={item.icon}\n description={item.description}\n component={item.component}\n className={item.className}\n onClick={() => onClick(item)}\n />\n </React.Fragment>\n ))}\n </Menu>\n );\n}\n","import { Plugin } from 'slate-react';\n\n// Clears the rest of the line after the caret\nexport function ClearPlugin(): Plugin {\n return {\n onKeyDown(event, editor, next) {\n const value = editor.value;\n\n if (value.selection.isExpanded) {\n return next();\n }\n\n if (event.key === 'k' && event.ctrlKey) {\n event.preventDefault();\n const text = value.anchorText.text;\n const offset = value.selection.anchor.offset;\n const length = text.length;\n const forward = length - offset;\n editor.deleteForward(forward);\n return true;\n }\n\n return next();\n },\n };\n}\n","// These are convenience components to deal with i18n shenanigans\n// (see https://github.com/grafana/grafana/blob/main/contribute/internationalization.md#jsx)\n// These help when we need to interpolate variables inside translated strings,\n// where we need to style them differently\n\nimport { Text } from '@grafana/ui';\n\nexport const PrimaryText = ({ content }: { content: string }) => <Text color=\"primary\">{content}</Text>;\nexport const CodeText = ({ content }: { content: string }) => <Text variant=\"code\">{content}</Text>;\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { IconButton, useStyles2 } from '@grafana/ui';\n\nexport interface MinimalisticPaginationProps {\n currentPage: number;\n numberOfPages: number;\n onNavigate: (toPage: number) => void;\n hideWhenSinglePage?: boolean;\n className?: string;\n}\n\nexport const MinimalisticPagination = ({\n currentPage,\n numberOfPages,\n onNavigate,\n hideWhenSinglePage,\n className,\n}: MinimalisticPaginationProps) => {\n const styles = useStyles2(getStyles);\n\n if (hideWhenSinglePage && numberOfPages <= 1) {\n return null;\n }\n\n return (\n <div className={cx(styles.wrapper, className)}>\n <IconButton\n name=\"angle-left\"\n size=\"md\"\n tooltip={t('dashboard.minimalistic-pagination.tooltip-previous', 'Previous')}\n onClick={() => onNavigate(currentPage - 1)}\n disabled={currentPage === 1}\n />\n <Trans i18nKey=\"dashboard.minimalistic-pagination.page-count\">\n {{ currentPage }} of {{ numberOfPages }}\n </Trans>\n <IconButton\n name=\"angle-right\"\n size=\"md\"\n tooltip={t('dashboard.minimalistic-pagination.tooltip-next', 'Next')}\n onClick={() => onNavigate(currentPage + 1)}\n disabled={currentPage === numberOfPages}\n />\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: 'row',\n gap: 16,\n userSelect: 'none',\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Text, useStyles2 } from '@grafana/ui';\n\nimport { MinimalisticPagination } from './MinimalisticPagination';\n\nexport interface GenerationHistoryCarouselProps {\n history: string[];\n index: number;\n onNavigate: (index: number) => void;\n}\n\nexport const GenerationHistoryCarousel = ({ history, index, onNavigate }: GenerationHistoryCarouselProps) => {\n const styles = useStyles2(getStyles);\n const historySize = history.length;\n\n return (\n <>\n <div className={styles.contentWrapper}>\n <Text element=\"p\" color=\"secondary\">\n {history[index - 1]}\n </Text>\n </div>\n <MinimalisticPagination\n currentPage={index}\n numberOfPages={historySize}\n onNavigate={onNavigate}\n hideWhenSinglePage={false}\n className={styles.paginationWrapper}\n />\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n paginationWrapper: css({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-end',\n marginTop: 15,\n }),\n contentWrapper: css({\n display: 'flex',\n flexBasis: '100%',\n flexGrow: 3,\n whiteSpace: 'pre-wrap',\n maxHeight: 110,\n overflowY: 'scroll',\n backgroundColor: theme.colors.background.secondary,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(1),\n minHeight: 60,\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, useStyles2 } from '@grafana/ui';\n\nimport { QuickFeedbackType } from './utils';\n\ninterface QuickActionsProps {\n onSuggestionClick: (suggestion: string) => void;\n isGenerating: boolean;\n}\n\nexport const QuickFeedback = ({ onSuggestionClick, isGenerating }: QuickActionsProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.quickSuggestionsWrapper}>\n <Button\n onClick={() => onSuggestionClick(QuickFeedbackType.Shorter)}\n size=\"sm\"\n variant=\"secondary\"\n icon=\"paragraph\"\n disabled={isGenerating}\n >\n {QuickFeedbackType.Shorter}\n </Button>\n <Button\n onClick={() => onSuggestionClick(QuickFeedbackType.MoreDescriptive)}\n size=\"sm\"\n variant=\"secondary\"\n icon=\"document-layout-left\"\n disabled={isGenerating}\n >\n {QuickFeedbackType.MoreDescriptive}\n </Button>\n <Button\n onClick={() => onSuggestionClick(QuickFeedbackType.Regenerate)}\n icon=\"sync\"\n size=\"sm\"\n variant=\"secondary\"\n disabled={isGenerating}\n >\n {'Regenerate'}\n </Button>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n quickSuggestionsWrapper: css({\n display: 'flex',\n flexDirection: 'row',\n gap: 8,\n }),\n});\n","import { Dispatch, SetStateAction, useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\nimport { Subscription } from 'rxjs';\n\nimport { llm } from '@grafana/llm';\nimport { createMonitoringLogger } from '@grafana/runtime';\nimport { useAppNotification } from 'app/core/copy/appNotification';\n\nimport { DEFAULT_LLM_MODEL, isLLMPluginEnabled } from './utils';\n\n// Declared instead of imported from utils to make this hook modular\n// Ideally we will want to move the hook itself to a different scope later.\ntype Message = llm.Message;\n\nconst genAILogger = createMonitoringLogger('features.dashboards.genai');\n\nexport enum StreamStatus {\n IDLE = 'idle',\n GENERATING = 'generating',\n COMPLETED = 'completed',\n}\n\nexport const TIMEOUT = 10000; // 10 seconds\n\ninterface Options {\n model: string;\n temperature: number;\n onResponse?: (response: string) => void;\n timeout?: number;\n}\n\nconst defaultOptions = {\n model: DEFAULT_LLM_MODEL,\n temperature: 1,\n timeout: TIMEOUT,\n};\n\ninterface UseLLMStreamResponse {\n setMessages: Dispatch<SetStateAction<Message[]>>;\n stopGeneration: () => void;\n messages: Message[];\n reply: string;\n streamStatus: StreamStatus;\n error?: Error;\n value?: {\n enabled?: boolean | undefined;\n stream?: Subscription;\n };\n}\n\n// TODO: Add tests\nexport function useLLMStream(options: Options = defaultOptions): UseLLMStreamResponse {\n const { model, temperature, onResponse, timeout } = { ...defaultOptions, ...options };\n // The messages array to send to the LLM, updated when the button is clicked.\n const [messages, setMessages] = useState<Message[]>([]);\n\n // The latest reply from the LLM.\n const [reply, setReply] = useState('');\n const [streamStatus, setStreamStatus] = useState<StreamStatus>(StreamStatus.IDLE);\n const [error, setError] = useState<Error>();\n const { error: notifyError } = useAppNotification();\n // Accumulate response and it will only update the state of the attatched component when the stream is completed.\n let partialReply = '';\n\n const onError = useCallback(\n (e: Error) => {\n setStreamStatus(StreamStatus.IDLE);\n setMessages([]);\n setError(e);\n notifyError(\n 'Failed to generate content using LLM',\n 'Please try again or if the problem persists, contact your organization admin.'\n );\n console.error(e);\n genAILogger.logError(e, { messages: JSON.stringify(messages), model, temperature: String(temperature) });\n },\n [messages, model, temperature, notifyError]\n );\n\n useEffect(() => {\n if (messages.length > 0) {\n setReply('');\n }\n }, [messages]);\n\n const { error: enabledError, value: enabled } = useAsync(\n async () => await isLLMPluginEnabled(),\n [isLLMPluginEnabled]\n );\n\n const { error: asyncError, value } = useAsync(async () => {\n if (!enabled || !messages.length) {\n return { enabled };\n }\n\n setStreamStatus(StreamStatus.GENERATING);\n setError(undefined);\n // Stream the completions. Each element is the next stream chunk.\n const stream = llm\n .streamChatCompletions({\n model,\n temperature,\n messages,\n })\n .pipe(\n // Accumulate the stream content into a stream of strings, where each\n // element contains the accumulated message so far.\n llm.accumulateContent()\n // The stream is just a regular Observable, so we can use standard rxjs\n // functionality to update state, e.g. recording when the stream\n // has completed.\n // The operator decision tree on the rxjs website is a useful resource:\n // https://rxjs.dev/operator-decision-tree.)\n );\n // Subscribe to the stream and update the state for each returned value.\n return {\n enabled,\n stream: stream.subscribe({\n next: (reply) => {\n partialReply = reply;\n },\n error: onError,\n complete: () => {\n setReply(partialReply);\n setStreamStatus(StreamStatus.COMPLETED);\n onResponse?.(partialReply);\n setMessages([]);\n setError(undefined);\n },\n }),\n };\n }, [messages, enabled]);\n\n // Unsubscribe from the stream when the component unmounts.\n useEffect(() => {\n return () => {\n value?.stream?.unsubscribe();\n };\n }, [value]);\n\n // Unsubscribe from the stream when user stops the generation.\n const stopGeneration = useCallback(() => {\n value?.stream?.unsubscribe();\n setStreamStatus(StreamStatus.IDLE);\n setError(undefined);\n setMessages([]);\n }, [value]);\n\n // If the stream is generating and we haven't received a reply, it times out.\n useEffect(() => {\n let timeoutId: NodeJS.Timeout | undefined;\n if (streamStatus === StreamStatus.GENERATING && reply === '') {\n timeoutId = setTimeout(() => {\n onError(new Error(`LLM stream timed out after ${timeout}ms`));\n }, timeout);\n }\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [streamStatus, reply, onError, timeout]);\n\n if (asyncError || enabledError) {\n setError(asyncError || enabledError);\n }\n\n return {\n setMessages,\n stopGeneration,\n messages,\n reply,\n streamStatus,\n error,\n value,\n };\n}\n","import { css } from '@emotion/css';\nimport { useState, useCallback, useRef } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, Button, Icon, Input, Stack, Text, TextLink, useStyles2 } from '@grafana/ui';\n\nimport { STOP_GENERATION_TEXT } from './GenAIButton';\nimport { GenerationHistoryCarousel } from './GenerationHistoryCarousel';\nimport { QuickFeedback } from './QuickFeedback';\nimport { StreamStatus, useLLMStream } from './hooks';\nimport { AutoGenerateItem, EventTrackingSrc, reportAutoGenerateInteraction } from './tracking';\nimport { getFeedbackMessage, Message, DEFAULT_LLM_MODEL, QuickFeedbackType, sanitizeReply } from './utils';\n\nexport interface GenAIHistoryProps {\n history: string[];\n messages: Message[];\n onApplySuggestion: (suggestion: string) => void;\n updateHistory: (historyEntry: string) => void;\n eventTrackingSrc: EventTrackingSrc;\n timeout?: number;\n}\n\nconst temperature = 0.5;\n\nexport const GenAIHistory = ({\n eventTrackingSrc,\n history,\n messages,\n onApplySuggestion,\n updateHistory,\n timeout,\n}: GenAIHistoryProps) => {\n const styles = useStyles2(getStyles);\n\n const [currentIndex, setCurrentIndex] = useState(1);\n const [customFeedback, setCustomPrompt] = useState('');\n\n // Keep ref in sync with messages prop to avoid stale closure issues\n const messagesRef = useRef(messages);\n messagesRef.current = messages;\n\n const onResponse = useCallback(\n (response: string) => {\n updateHistory(sanitizeReply(response));\n },\n [updateHistory]\n );\n\n const { setMessages, stopGeneration, reply, streamStatus, error } = useLLMStream({\n model: DEFAULT_LLM_MODEL,\n temperature,\n onResponse,\n timeout,\n });\n\n const reportInteraction = (item: AutoGenerateItem, otherMetadata?: object) =>\n reportAutoGenerateInteraction(eventTrackingSrc, item, otherMetadata);\n\n const onSubmitCustomFeedback = (text: string) => {\n onGenerateWithFeedback(text);\n reportInteraction(AutoGenerateItem.customFeedback, { customFeedback: text });\n };\n\n const onStopGeneration = () => {\n stopGeneration();\n reply && onResponse(reply);\n };\n\n const onApply = () => {\n onApplySuggestion(history[currentIndex - 1]);\n };\n\n const onNavigate = (index: number) => {\n setCurrentIndex(index);\n reportInteraction(index > currentIndex ? AutoGenerateItem.backHistoryItem : AutoGenerateItem.forwardHistoryItem);\n };\n\n const onGenerateWithFeedback = (suggestion: string) => {\n setMessages(() => [...messagesRef.current, ...getFeedbackMessage(history[currentIndex - 1], suggestion)]);\n\n if (suggestion in QuickFeedbackType) {\n reportInteraction(AutoGenerateItem.quickFeedback, { quickFeedbackItem: suggestion });\n }\n };\n\n const onKeyDownCustomFeedbackInput = (e: React.KeyboardEvent<HTMLInputElement>) =>\n e.key === 'Enter' && onSubmitCustomFeedback(customFeedback);\n\n const onChangeCustomFeedback = (e: React.FormEvent<HTMLInputElement>) => setCustomPrompt(e.currentTarget.value);\n\n const onClickSubmitCustomFeedback = () => onSubmitCustomFeedback(customFeedback);\n\n const onClickDocs = () => reportInteraction(AutoGenerateItem.linkToDocs);\n\n const isStreamGenerating = streamStatus === StreamStatus.GENERATING;\n const showError = error && !isStreamGenerating;\n\n return (\n <div className={styles.container}>\n {showError && (\n <Alert title=\"\">\n <Stack direction=\"column\">\n <p>\n <Trans i18nKey=\"gen-ai.incomplete-request-error\">\n Sorry, I was unable to complete your request. Please try again.\n </Trans>\n </p>\n </Stack>\n </Alert>\n )}\n\n <GenerationHistoryCarousel history={history} index={currentIndex} onNavigate={onNavigate} />\n <div className={styles.actionButtons}>\n <QuickFeedback onSuggestionClick={onGenerateWithFeedback} isGenerating={isStreamGenerating} />\n </div>\n\n <Input\n placeholder={t('dashboard.gen-aihistory.placeholder-tell-ai-what-to-do-next', 'Tell AI what to do next...')}\n suffix={\n <Button\n icon=\"enter\"\n variant=\"secondary\"\n fill=\"text\"\n aria-label={t('dashboard.gen-aihistory.aria-label-send-custom-feedback', 'Send custom feedback')}\n onClick={onClickSubmitCustomFeedback}\n disabled={!customFeedback}\n >\n <Trans i18nKey=\"gen-ai.send-custom-feedback\">Send</Trans>\n </Button>\n }\n value={customFeedback}\n onChange={onChangeCustomFeedback}\n onKeyDown={onKeyDownCustomFeedbackInput}\n />\n\n <div className={styles.applySuggestion}>\n <Stack justifyContent=\"flex-end\" direction=\"row\">\n {isStreamGenerating ? (\n <Button icon=\"fa fa-spinner\" onClick={onStopGeneration}>\n {STOP_GENERATION_TEXT}\n </Button>\n ) : (\n <Button icon=\"check\" onClick={onApply}>\n <Trans i18nKey=\"gen-ai.apply-suggestion\">Apply</Trans>\n </Button>\n )}\n </Stack>\n </div>\n\n <div className={styles.footer}>\n <Icon name=\"exclamation-circle\" className={styles.infoColor} />\n <Text variant=\"bodySmall\" color=\"secondary\">\n <Trans i18nKey=\"dashboard.gen-aihistory.footer-text\">\n This content is AI-generated using the{' '}\n <TextLink\n variant=\"bodySmall\"\n inline={true}\n href=\"https://grafana.com/docs/grafana-cloud/alerting-and-irm/machine-learning/llm-plugin/\"\n external\n onClick={onClickDocs}\n >\n Grafana LLM plugin\n </TextLink>\n </Trans>\n </Text>\n </div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n flexDirection: 'column',\n width: 520,\n maxHeight: 350,\n // This is the space the footer height\n paddingBottom: 25,\n }),\n applySuggestion: css({\n paddingTop: theme.spacing(2),\n }),\n actions: css({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n }),\n footer: css({\n // Absolute positioned since Toggletip doesn't support footer\n position: 'absolute',\n bottom: 0,\n left: 0,\n width: '100%',\n display: 'flex',\n flexDirection: 'row',\n margin: 0,\n padding: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n alignItems: 'center',\n gap: theme.spacing(1),\n borderTop: `1px solid ${theme.colors.border.weak}`,\n marginTop: theme.spacing(2),\n }),\n infoColor: css({\n color: theme.colors.info.main,\n }),\n actionButtons: css({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n padding: '24px 0 8px 0',\n }),\n});\n","import { css } from '@emotion/css';\nimport { useCallback, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { llm } from '@grafana/llm';\nimport { Button, Spinner, useStyles2, Tooltip, Toggletip, Text, Stack } from '@grafana/ui';\n\nimport { GenAIHistory } from './GenAIHistory';\nimport { StreamStatus, TIMEOUT, useLLMStream } from './hooks';\nimport { AutoGenerateItem, EventTrackingSrc, reportAutoGenerateInteraction } from './tracking';\nimport { DEFAULT_LLM_MODEL, Message, sanitizeReply } from './utils';\n\nexport interface GenAIButtonProps {\n // Button label text\n text?: string;\n toggleTipTitle?: string;\n // Button click handler\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n // Messages to send to the LLM plugin\n messages: Message[] | (() => Message[]);\n // Callback function that the LLM plugin streams responses to\n onGenerate: (response: string) => void;\n // Temperature for the LLM plugin. Default is 1.\n // Closer to 0 means more conservative, closer to 1 means more creative.\n temperature?: number;\n model?: llm.Model;\n // Event tracking source. Send as `src` to Rudderstack event\n eventTrackingSrc: EventTrackingSrc;\n // Whether the button should be disabled\n disabled?: boolean;\n /*\n Tooltip to show when hovering over the button\n Tooltip will be shown only before the improvement stage.\n i.e once the button title changes to \"Improve\", the tooltip will not be shown because\n toggletip will be enabled.\n */\n tooltip?: string;\n // Optional callback to receive history updates\n onHistoryChange?: (history: string[]) => void;\n // Optional timeout for the LLM stream. Default is 10 seconds\n timeout?: number;\n}\nexport const STOP_GENERATION_TEXT = 'Stop generating';\n\nexport const GenAIButton = ({\n text = 'Auto-generate',\n toggleTipTitle = '',\n onClick: onClickProp,\n model = DEFAULT_LLM_MODEL,\n messages,\n onGenerate,\n temperature = 1,\n eventTrackingSrc,\n disabled,\n tooltip,\n onHistoryChange,\n timeout = TIMEOUT,\n}: GenAIButtonProps) => {\n const styles = useStyles2(getStyles);\n\n const [history, setHistory] = useState<string[]>([]);\n const unshiftHistoryEntry = useCallback(\n (historyEntry: string) => {\n setHistory((h) => {\n const newHistory = [historyEntry, ...h];\n return newHistory;\n });\n onHistoryChange?.([historyEntry, ...history]);\n },\n [onHistoryChange, history]\n );\n\n const onResponse = useCallback(\n (reply: string) => {\n const sanitizedReply = sanitizeReply(reply);\n onGenerate(sanitizedReply);\n unshiftHistoryEntry(sanitizedReply);\n },\n [onGenerate, unshiftHistoryEntry]\n );\n\n const { setMessages, stopGeneration, value, error, streamStatus } = useLLMStream({\n model,\n temperature,\n onResponse,\n timeout,\n });\n\n const [showHistory, setShowHistory] = useState(false);\n const hasHistory = history.length > 0;\n const isFirstHistoryEntry = !hasHistory;\n\n const isGenerating = streamStatus === StreamStatus.GENERATING;\n const isButtonDisabled = disabled || (value && !value.enabled && !error);\n const reportInteraction = useCallback(\n (item: AutoGenerateItem) => reportAutoGenerateInteraction(eventTrackingSrc, item),\n [eventTrackingSrc]\n );\n\n const showTooltip = error || tooltip ? undefined : false;\n const tooltipContent = error\n ? 'Failed to generate content using LLM. Please try again or if the problem persists, contact your organization admin.'\n : tooltip || '';\n\n const onClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (streamStatus === StreamStatus.GENERATING) {\n stopGeneration();\n } else {\n if (!hasHistory) {\n onClickProp?.(e);\n setMessages(getMessages());\n } else {\n setShowHistory(true);\n }\n }\n\n const buttonItem = error\n ? AutoGenerateItem.erroredRetryButton\n : isGenerating\n ? AutoGenerateItem.stopGenerationButton\n : isFirstHistoryEntry\n ? AutoGenerateItem.autoGenerateButton\n : AutoGenerateItem.improveButton;\n reportInteraction(buttonItem);\n };\n\n // The button is disabled if the plugin is not installed or enabled\n if (!value?.enabled) {\n return null;\n }\n\n const onApplySuggestion = (suggestion: string) => {\n reportInteraction(AutoGenerateItem.applySuggestion);\n onGenerate(suggestion);\n setShowHistory(false);\n };\n\n const getIcon = () => {\n if (isGenerating) {\n return undefined;\n }\n\n if (error || (value && !value.enabled)) {\n return 'exclamation-circle';\n }\n\n return 'ai';\n };\n\n const getText = () => {\n let buttonText = text;\n\n if (error) {\n buttonText = 'Retry';\n }\n\n if (isGenerating) {\n buttonText = STOP_GENERATION_TEXT;\n }\n\n if (hasHistory) {\n buttonText = 'Improve';\n }\n\n return buttonText;\n };\n\n const button = (\n <Button\n icon={getIcon()}\n onClick={onClick}\n fill=\"text\"\n size=\"sm\"\n disabled={isButtonDisabled}\n variant={error ? 'destructive' : 'primary'}\n >\n {getText()}\n </Button>\n );\n\n const getMessages = () => (typeof messages === 'function' ? messages() : messages);\n\n const renderButtonWithToggletip = () => {\n if (hasHistory) {\n const title = <Text element=\"p\">{toggleTipTitle}</Text>;\n\n return (\n <Toggletip\n title={title}\n content={\n <GenAIHistory\n history={history}\n messages={getMessages()}\n onApplySuggestion={onApplySuggestion}\n updateHistory={unshiftHistoryEntry}\n eventTrackingSrc={eventTrackingSrc}\n timeout={timeout}\n />\n }\n placement=\"left-start\"\n fitContent={true}\n show={showHistory}\n onClose={() => setShowHistory(false)}\n onOpen={() => setShowHistory(true)}\n >\n {button}\n </Toggletip>\n );\n }\n\n return button;\n };\n\n return (\n <Stack direction=\"row\" gap={0.5} alignItems=\"center\">\n {isGenerating && <Spinner size=\"sm\" className={styles.spinner} />}\n {isFirstHistoryEntry ? (\n <Tooltip show={showTooltip} interactive content={tooltipContent}>\n {button}\n </Tooltip>\n ) : (\n renderButtonWithToggletip()\n )}\n </Stack>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n spinner: css({\n color: theme.colors.text.link,\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport { uniqueId } from 'lodash';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\nimport { RadioButtonDot } from './RadioButtonDot';\n\nexport interface RadioButtonListProps<T> {\n /** A name of a radio group. Used to group multiple radio inputs into a single group */\n name: string;\n id?: string;\n /** An array of available options */\n options: Array<SelectableValue<T>>;\n value?: T;\n onChange?: (value: T) => void;\n /** Disables all elements in the list */\n disabled?: boolean;\n /** Disables subset of elements in the list. Compares values using the === operator */\n disabledOptions?: T[];\n className?: string;\n}\n\n/**\n * RadioButtonList is used to select a single value from multiple mutually exclusive options usually in a vertical manner.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-radiobuttonlist--docs\n */\nexport function RadioButtonList<T extends string | number | readonly string[]>({\n name,\n id,\n options,\n value,\n onChange,\n className,\n disabled,\n disabledOptions = [],\n}: RadioButtonListProps<T>) {\n const styles = useStyles2(getStyles);\n const internalId = id ?? uniqueId('radiogroup-list-');\n\n return (\n <div id={id} className={cx(styles.container, className)} role=\"radiogroup\">\n {options.map((option, index) => {\n const itemId = `${internalId}-${index}`;\n\n const isChecked = value && value === option.value;\n const isDisabled = disabled || disabledOptions.some((optionValue) => optionValue === option.value);\n\n const handleChange = () => onChange && option.value && onChange(option.value);\n\n return (\n <RadioButtonDot<T>\n key={index}\n id={itemId}\n name={name}\n label={option.label}\n description={option.description}\n checked={isChecked}\n value={option.value}\n disabled={isDisabled}\n onChange={handleChange}\n />\n );\n })}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'grid',\n gap: theme.spacing(1),\n }),\n});\n","import { set } from 'lodash';\nimport { ComponentClass, ComponentType } from 'react';\n\nimport { FieldConfigOptionsRegistry } from '../field/FieldConfigOptionsRegistry';\nimport { StandardEditorContext } from '../field/standardFieldConfigEditorRegistry';\nimport { PanelModel } from '../types/dashboard';\nimport { FieldConfigProperty, FieldConfigSource } from '../types/fieldOverrides';\nimport {\n PanelPluginMeta,\n VisualizationSuggestionsSupplier,\n PanelProps,\n PanelEditorProps,\n PanelMigrationHandler,\n PanelTypeChangedHandler,\n PanelPluginDataSupport,\n} from '../types/panel';\nimport { GrafanaPlugin } from '../types/plugin';\nimport { FieldConfigEditorBuilder, PanelOptionsEditorBuilder } from '../utils/OptionsUIBuilders';\nimport { deprecationWarning } from '../utils/deprecationWarning';\n\nimport { createFieldConfigRegistry } from './registryFactories';\n\n/** @beta */\nexport type StandardOptionConfig = {\n defaultValue?: any;\n settings?: any;\n hideFromDefaults?: boolean;\n};\n\n/** @beta */\nexport interface SetFieldConfigOptionsArgs<TFieldConfigOptions = any> {\n /**\n * Configuration object of the standard field config properites\n *\n * @example\n * ```typescript\n * {\n * standardOptions: {\n * [FieldConfigProperty.Decimals]: {\n * defaultValue: 3\n * }\n * }\n * }\n * ```\n */\n standardOptions?: Partial<Record<FieldConfigProperty, StandardOptionConfig>>;\n\n /**\n * Array of standard field config properties that should not be available in the panel\n * @example\n * ```typescript\n * {\n * disableStandardOptions: [FieldConfigProperty.Min, FieldConfigProperty.Max, FieldConfigProperty.Unit]\n * }\n * ```\n */\n disableStandardOptions?: FieldConfigProperty[];\n\n /**\n * Function that allows custom field config properties definition.\n *\n * @param builder\n *\n * @example\n * ```typescript\n * useCustomConfig: builder => {\n * builder\n * .addNumberInput({\n * id: 'shapeBorderWidth',\n * name: 'Border width',\n * description: 'Border width of the shape',\n * settings: {\n * min: 1,\n * max: 5,\n * },\n * })\n * .addSelect({\n * id: 'displayMode',\n * name: 'Display mode',\n * description: 'How the shape shout be rendered'\n * settings: {\n * options: [{value: 'fill', label: 'Fill' }, {value: 'transparent', label: 'Transparent }]\n * },\n * })\n * }\n * ```\n */\n useCustomConfig?: (builder: FieldConfigEditorBuilder<TFieldConfigOptions>) => void;\n}\n\nexport type PanelOptionsSupplier<TOptions> = (\n builder: PanelOptionsEditorBuilder<TOptions>,\n context: StandardEditorContext<TOptions>\n) => void;\n\nexport class PanelPlugin<\n TOptions = any,\n TFieldConfigOptions extends object = {},\n> extends GrafanaPlugin<PanelPluginMeta> {\n private _defaults?: TOptions;\n private _fieldConfigDefaults: FieldConfigSource<TFieldConfigOptions> = {\n defaults: {},\n overrides: [],\n };\n\n private _fieldConfigRegistry?: FieldConfigOptionsRegistry;\n private _initConfigRegistry = () => {\n return new FieldConfigOptionsRegistry();\n };\n\n private optionsSupplier?: PanelOptionsSupplier<TOptions>;\n private suggestionsSupplier?: VisualizationSuggestionsSupplier;\n\n panel: ComponentType<PanelProps<TOptions>> | null;\n editor?: ComponentClass<PanelEditorProps<TOptions>>;\n onPanelMigration?: PanelMigrationHandler<TOptions>;\n shouldMigrate?: (panel: PanelModel) => boolean;\n onPanelTypeChanged?: PanelTypeChangedHandler<TOptions>;\n noPadding?: boolean;\n dataSupport: PanelPluginDataSupport = {\n annotations: false,\n alertStates: false,\n };\n\n /**\n * Legacy angular ctrl. If this exists it will be used instead of the panel\n */\n angularPanelCtrl?: any;\n\n constructor(panel: ComponentType<PanelProps<TOptions>> | null) {\n super();\n this.panel = panel;\n }\n\n get defaults() {\n let result = this._defaults || {};\n\n if (!this._defaults && this.optionsSupplier) {\n const builder = new PanelOptionsEditorBuilder<TOptions>();\n this.optionsSupplier(builder, { data: [] });\n for (const item of builder.getItems()) {\n if (item.defaultValue != null) {\n set(result, item.path, item.defaultValue);\n }\n }\n }\n\n return result;\n }\n\n get fieldConfigDefaults(): FieldConfigSource<TFieldConfigOptions> {\n const configDefaults = this._fieldConfigDefaults.defaults;\n configDefaults.custom = {} as TFieldConfigOptions;\n\n for (const option of this.fieldConfigRegistry.list()) {\n if (option.defaultValue === undefined) {\n continue;\n }\n\n set(configDefaults, option.id, option.defaultValue);\n }\n\n return {\n defaults: {\n ...configDefaults,\n },\n overrides: this._fieldConfigDefaults.overrides,\n };\n }\n\n /**\n * @deprecated setDefaults is deprecated in favor of setPanelOptions\n */\n setDefaults(defaults: TOptions) {\n deprecationWarning('PanelPlugin', 'setDefaults', 'setPanelOptions');\n this._defaults = defaults;\n return this;\n }\n\n get fieldConfigRegistry() {\n if (!this._fieldConfigRegistry) {\n this._fieldConfigRegistry = this._initConfigRegistry();\n }\n\n return this._fieldConfigRegistry;\n }\n\n /**\n * @deprecated setEditor is deprecated in favor of setPanelOptions\n */\n setEditor(editor: ComponentClass<PanelEditorProps<TOptions>>) {\n deprecationWarning('PanelPlugin', 'setEditor', 'setPanelOptions');\n this.editor = editor;\n return this;\n }\n\n setNoPadding() {\n this.noPadding = true;\n return this;\n }\n\n /**\n * This function is called before the panel first loads if\n * the current version is different than the version that was saved.\n *\n * If shouldMigrate is provided, it will be called regardless of whether\n * the version has changed, and can explicitly opt into running the\n * migration handler\n *\n * This is a good place to support any changes to the options model\n */\n setMigrationHandler(handler: PanelMigrationHandler<TOptions>, shouldMigrate?: (panel: PanelModel) => boolean) {\n this.onPanelMigration = handler;\n this.shouldMigrate = shouldMigrate;\n return this;\n }\n\n /**\n * This function is called when the visualization was changed. This\n * passes in the panel model for previous visualisation options inspection\n * and panel model updates.\n *\n * This is useful for supporting PanelModel API updates when changing\n * between Angular and React panels.\n */\n setPanelChangeHandler(handler: PanelTypeChangedHandler) {\n this.onPanelTypeChanged = handler;\n return this;\n }\n\n /**\n * Enables panel options editor creation\n *\n * @example\n * ```typescript\n *\n * import { ShapePanel } from './ShapePanel';\n *\n * interface ShapePanelOptions {}\n *\n * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n * .setPanelOptions(builder => {\n * builder\n * .addSelect({\n * id: 'shape',\n * name: 'Shape',\n * description: 'Select shape to render'\n * settings: {\n * options: [\n * {value: 'circle', label: 'Circle' },\n * {value: 'square', label: 'Square },\n * {value: 'triangle', label: 'Triangle }\n * ]\n * },\n * })\n * })\n * ```\n *\n * @public\n **/\n setPanelOptions(builder: PanelOptionsSupplier<TOptions>) {\n // builder is applied lazily when options UI is created\n this.optionsSupplier = builder;\n return this;\n }\n\n /**\n * This is used while building the panel options editor.\n *\n * @internal\n */\n getPanelOptionsSupplier(): PanelOptionsSupplier<TOptions> {\n return this.optionsSupplier ?? (() => {});\n }\n\n /**\n * Tells Grafana if the plugin should subscribe to annotation and alertState results.\n *\n * @example\n * ```typescript\n *\n * import { ShapePanel } from './ShapePanel';\n *\n * interface ShapePanelOptions {}\n *\n * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n * .useFieldConfig({})\n * ...\n * ...\n * .setDataSupport({\n * annotations: true,\n * alertStates: true,\n * });\n * ```\n *\n * @public\n **/\n setDataSupport(support: Partial<PanelPluginDataSupport>) {\n this.dataSupport = { ...this.dataSupport, ...support };\n return this;\n }\n\n /**\n * Allows specifying which standard field config options panel should use and defining default values\n *\n * @example\n * ```typescript\n *\n * import { ShapePanel } from './ShapePanel';\n *\n * interface ShapePanelOptions {}\n *\n * // when plugin should use all standard options\n * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n * .useFieldConfig();\n *\n * // when plugin should only display specific standard options\n * // note, that options will be displayed in the order they are provided\n * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n * .useFieldConfig({\n * standardOptions: [FieldConfigProperty.Min, FieldConfigProperty.Max]\n * });\n *\n * // when standard option's default value needs to be provided\n * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n * .useFieldConfig({\n * standardOptions: [FieldConfigProperty.Min, FieldConfigProperty.Max],\n * standardOptionsDefaults: {\n * [FieldConfigProperty.Min]: 20,\n * [FieldConfigProperty.Max]: 100\n * }\n * });\n *\n * // when custom field config options needs to be provided\n * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n * .useFieldConfig({\n * useCustomConfig: builder => {\n * builder\n * .addNumberInput({\n * id: 'shapeBorderWidth',\n * name: 'Border width',\n * description: 'Border width of the shape',\n * settings: {\n * min: 1,\n * max: 5,\n * },\n * })\n * .addSelect({\n * id: 'displayMode',\n * name: 'Display mode',\n * description: 'How the shape shout be rendered'\n * settings: {\n * options: [{value: 'fill', label: 'Fill' }, {value: 'transparent', label: 'Transparent }]\n * },\n * })\n * },\n * });\n *\n * ```\n *\n * @public\n */\n useFieldConfig(config: SetFieldConfigOptionsArgs<TFieldConfigOptions> = {}) {\n // builder is applied lazily when custom field configs are accessed\n this._initConfigRegistry = () => createFieldConfigRegistry(config, this.meta.name);\n\n return this;\n }\n\n /**\n * Sets function that can return visualization examples and suggestions.\n * @alpha\n */\n setSuggestionsSupplier(supplier: VisualizationSuggestionsSupplier) {\n this.suggestionsSupplier = supplier;\n return this;\n }\n\n /**\n * Returns the suggestions supplier\n * @alpha\n */\n getSuggestionsSupplier(): VisualizationSuggestionsSupplier | undefined {\n return this.suggestionsSupplier;\n }\n\n hasPluginId(pluginId: string) {\n return this.meta.id === pluginId;\n }\n}\n","import { css } from '@emotion/css';\nimport moment, { Moment } from 'moment/moment';\nimport { ChangeEvent, useState } from 'react';\n\nimport { dateTimeAsMoment, getTimeZoneInfo, GrafanaTheme2, isDateTime, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport {\n Button,\n Field,\n FieldSet,\n Input,\n Select,\n Stack,\n Switch,\n TimeOfDayPicker,\n TimeZonePicker,\n useStyles2,\n} from '@grafana/ui';\nimport { TimeZoneOffset, TimeZoneTitle } from '@grafana/ui/internal';\nimport { TimeRegionConfig, TimeRegionMode } from 'app/core/utils/timeRegions';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\n\ninterface Props {\n value: TimeRegionConfig;\n onChange: (value?: TimeRegionConfig) => void;\n}\n\nconst days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].map((v, idx) => {\n return {\n label: v,\n value: idx + 1,\n };\n});\n\nexport const TimeRegionEditor = ({ value, onChange }: Props) => {\n const styles = useStyles2(getStyles);\n\n const timestamp = Date.now();\n const timezoneInfo = getTimeZoneInfo(value.timezone ?? 'utc', timestamp);\n const isDashboardTimezone = getDashboardSrv().getCurrent()?.getTimezone() === value.timezone;\n\n const [isEditing, setEditing] = useState(false);\n\n const onToggleChangeTimezone = () => {\n setEditing(!isEditing);\n };\n\n const getTime = (time: string | undefined): Moment | undefined => {\n if (!time) {\n return undefined;\n }\n\n const date = moment();\n\n if (time) {\n const match = time.split(':');\n date.set('hour', parseInt(match[0], 10));\n date.set('minute', parseInt(match[1], 10));\n }\n\n return date;\n };\n\n const getToPlaceholder = () => {\n let placeholder = 'Everyday';\n if (value.fromDayOfWeek && !value.toDayOfWeek) {\n placeholder = days[value.fromDayOfWeek - 1].label;\n }\n\n return placeholder;\n };\n\n const renderTimezonePicker = () => {\n const timezone = (\n <>\n <TimeZoneTitle title={timezoneInfo?.name} />\n <TimeZoneOffset timeZone={value.timezone} timestamp={timestamp} />\n </>\n );\n\n if (isDashboardTimezone) {\n return <>Dashboard timezone ({timezone})</>;\n }\n\n return timezone;\n };\n\n const onTimeChange = (v: Moment | undefined, field: string) => {\n const time = v ? v.format('HH:mm') : undefined;\n if (field === 'from') {\n onChange({ ...value, from: time });\n } else {\n onChange({ ...value, to: time });\n }\n };\n\n const onTimezoneChange = (v: string | undefined) => {\n onChange({ ...value, timezone: v });\n };\n\n const onModeChange = (v: TimeRegionMode) => {\n onChange({ ...value, mode: v });\n };\n\n const onCronExprChange = (v: string) => {\n onChange({ ...value, cronExpr: v });\n };\n\n const onDurationChange = (v: string) => {\n onChange({ ...value, duration: v });\n };\n\n const onFromDayOfWeekChange = (v: SelectableValue<number>) => {\n const fromDayOfWeek = v ? v.value : undefined;\n const toDayOfWeek = v ? value.toDayOfWeek : undefined; // clear if everyday\n onChange({ ...value, fromDayOfWeek, toDayOfWeek });\n };\n\n const onToDayOfWeekChange = (v: SelectableValue<number>) => {\n onChange({ ...value, toDayOfWeek: v ? v.value : undefined });\n };\n\n const renderTimezone = () => {\n if (isEditing) {\n return (\n <TimeZonePicker\n value={value.timezone}\n includeInternal={true}\n onChange={(v) => onTimezoneChange(v)}\n onBlur={() => setEditing(false)}\n openMenuOnFocus={false}\n width={100}\n autoFocus\n />\n );\n }\n\n return (\n <div className={styles.timezoneContainer}>\n <div className={styles.timezone}>{renderTimezonePicker()}</div>\n <Button variant=\"secondary\" onClick={onToggleChangeTimezone} size=\"sm\">\n Change timezone\n </Button>\n </div>\n );\n };\n\n const from = getTime(value.from);\n const to = getTime(value.to);\n\n return (\n <FieldSet className={styles.wrapper}>\n <Field\n label={t('dashboard-settings.time-regions.advanced-label', 'Advanced')}\n description={\n <>\n {t('dashboard-settings.time-regions.advanced-description-use', 'Use ')}\n <a href=\"https://crontab.run/\" target=\"_blank\" rel=\"noreferrer\">\n {t('dashboard-settings.time-regions.advanced-description-cron', 'Cron syntax')}\n </a>\n {t(\n 'dashboard-settings.time-regions.advanced-description-rest',\n ' to define a recurrence schedule and duration'\n )}\n </>\n }\n >\n <Switch\n id=\"time-regions-adanced-mode-toggle\"\n value={value.mode === 'cron'}\n onChange={(e: ChangeEvent<HTMLInputElement>) => onModeChange(e.currentTarget.checked ? 'cron' : null)}\n />\n </Field>\n\n {value.mode == null && (\n <>\n <Field label=\"From\">\n <Stack gap={0.5}>\n <Select\n options={days}\n isClearable\n placeholder=\"Everyday\"\n value={value.fromDayOfWeek ?? null}\n onChange={(v) => onFromDayOfWeekChange(v)}\n width={20}\n />\n <TimeOfDayPicker\n value={isDateTime(from) ? from : undefined}\n onChange={(v) => onTimeChange(v ? dateTimeAsMoment(v) : v, 'from')}\n allowEmpty={true}\n placeholder=\"HH:mm\"\n size=\"sm\"\n />\n </Stack>\n </Field>\n <Field label=\"To\">\n <Stack gap={0.5}>\n {(value.fromDayOfWeek || value.toDayOfWeek) && (\n <Select\n options={days}\n isClearable\n placeholder={getToPlaceholder()}\n value={value.toDayOfWeek ?? null}\n onChange={(v) => onToDayOfWeekChange(v)}\n width={20}\n />\n )}\n <TimeOfDayPicker\n value={isDateTime(to) ? to : undefined}\n onChange={(v) => onTimeChange(v ? dateTimeAsMoment(v) : v, 'to')}\n allowEmpty={true}\n placeholder=\"HH:mm\"\n size=\"sm\"\n />\n </Stack>\n </Field>\n </>\n )}\n {value.mode === 'cron' && (\n <>\n <Field label=\"Cron expression\">\n <Input\n onChange={(e: ChangeEvent<HTMLInputElement>) => onCronExprChange(e.target.value)}\n value={value.cronExpr}\n placeholder=\"0 9 * * 1-5\"\n width={40}\n />\n </Field>\n <Field label=\"Duration\">\n <Input\n onChange={(e: ChangeEvent<HTMLInputElement>) => onDurationChange(e.target.value)}\n value={value.duration}\n placeholder=\"8h\"\n width={40}\n />\n </Field>\n </>\n )}\n <Field label=\"Timezone\">{renderTimezone()}</Field>\n </FieldSet>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n maxWidth: theme.spacing(60),\n marginBottom: theme.spacing(2),\n }),\n timezoneContainer: css({\n padding: '5px',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: '12px',\n }),\n timezone: css({\n marginRight: '5px',\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Field, FieldSet, Select, Switch, useStyles2 } from '@grafana/ui';\nimport { TagFilter } from 'app/core/components/TagFilter/TagFilter';\nimport { TimeRegionConfig } from 'app/core/utils/timeRegions';\nimport { annotationServer } from 'app/features/annotations/api';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\n\nimport { GrafanaAnnotationQuery, GrafanaAnnotationType, GrafanaQuery, GrafanaQueryType } from '../types';\n\nimport { TimeRegionEditor } from './TimeRegionEditor';\n\nconst matchTooltipContent = 'Enabling this returns annotations that match any of the tags specified below';\n\nconst tagsTooltipContent = (\n <div>Specify a list of tags to match. To specify a key and value tag use `key:value` syntax.</div>\n);\n\nconst annotationTypes: Array<SelectableValue<GrafanaAnnotationType>> = [\n {\n label: 'Dashboard',\n value: GrafanaAnnotationType.Dashboard,\n description: 'Query for events created on this dashboard and show them in the panels where they where created',\n },\n {\n label: 'Tags',\n value: GrafanaAnnotationType.Tags,\n description: 'This will fetch any annotation events that match the tags filter',\n },\n];\n\nconst queryTypes: Array<SelectableValue<GrafanaQueryType>> = [\n {\n label: 'Annotations & Alerts',\n value: GrafanaQueryType.Annotations,\n description: 'Show annotations or alerts managed by grafana',\n },\n {\n label: 'Time regions',\n value: GrafanaQueryType.TimeRegions,\n description: 'Configure a repeating time region',\n },\n];\n\nconst limitOptions = [10, 50, 100, 200, 300, 500, 1000, 2000].map((limit) => ({\n label: String(limit),\n value: limit,\n}));\n\ninterface Props {\n query: GrafanaQuery;\n onChange: (newValue: GrafanaAnnotationQuery) => void;\n}\n\nexport default function AnnotationQueryEditor({ query, onChange }: Props) {\n const annotationQuery = query as GrafanaAnnotationQuery;\n const { limit, matchAny, tags, type, queryType } = annotationQuery;\n let grafanaQueryType = queryType ?? GrafanaQueryType.Annotations;\n const defaultTimezone = useMemo(() => getDashboardSrv().dashboard?.getTimezone(), []);\n const styles = useStyles2(getStyles);\n\n const onFilterByChange = (newValue: SelectableValue<GrafanaAnnotationType>) =>\n onChange({\n ...annotationQuery,\n type: newValue.value!,\n });\n\n const onMaxLimitChange = (newValue: SelectableValue<number>) =>\n onChange({\n ...annotationQuery,\n limit: newValue.value!,\n });\n\n const onMatchAnyChange = (newValue: React.ChangeEvent<HTMLInputElement>) =>\n onChange({\n ...annotationQuery,\n matchAny: newValue.target.checked,\n });\n\n const onTagsChange = (tags: string[]) =>\n onChange({\n ...annotationQuery,\n tags,\n });\n\n const onQueryTypeChange = (newValue: SelectableValue<GrafanaQueryType>) => {\n const newQuery: GrafanaAnnotationQuery = { ...annotationQuery, queryType: newValue.value! };\n if (newQuery.queryType === GrafanaQueryType.TimeRegions) {\n if (!newQuery.timeRegion) {\n newQuery.timeRegion = {\n timezone: defaultTimezone,\n };\n }\n } else {\n delete newQuery.timeRegion;\n }\n\n onChange(newQuery);\n };\n const onTimeRegionChange = (timeRegion?: TimeRegionConfig) => {\n onChange({\n ...annotationQuery,\n timeRegion,\n });\n };\n\n return (\n <FieldSet className={styles.container}>\n <Field label=\"Query type\">\n <Select\n inputId=\"grafana-annotations__query-type\"\n options={queryTypes}\n value={grafanaQueryType}\n onChange={onQueryTypeChange}\n />\n </Field>\n {grafanaQueryType === GrafanaQueryType.Annotations && (\n <>\n <Field label=\"Filter by\">\n <Select\n inputId=\"grafana-annotations__filter-by\"\n options={annotationTypes}\n value={type}\n onChange={onFilterByChange}\n />\n </Field>\n <Field label=\"Max limit\">\n <Select\n inputId=\"grafana-annotations__limit\"\n width={16}\n options={limitOptions}\n value={limit}\n onChange={onMaxLimitChange}\n />\n </Field>\n {type === GrafanaAnnotationType.Tags && (\n <>\n <Field label=\"Match any\" description={matchTooltipContent}>\n <Switch id=\"grafana-annotations__match-any\" value={matchAny} onChange={onMatchAnyChange} />\n </Field>\n <Field label=\"Tags\" description={tagsTooltipContent}>\n <TagFilter\n allowCustomValue\n inputId=\"grafana-annotations__tags\"\n onChange={onTagsChange}\n tagOptions={annotationServer().tags}\n tags={tags ?? []}\n />\n </Field>\n </>\n )}\n </>\n )}\n {grafanaQueryType === GrafanaQueryType.TimeRegions && annotationQuery.timeRegion && (\n <TimeRegionEditor value={annotationQuery.timeRegion} onChange={onTimeRegionChange} />\n )}\n </FieldSet>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n maxWidth: theme.spacing(60),\n marginBottom: theme.spacing(2),\n }),\n };\n};\n","import { Cron } from 'croner';\n\nimport { AbsoluteTimeRange, TimeRange, durationToMilliseconds, parseDuration } from '@grafana/data';\n\nexport type TimeRegionMode = null | 'cron';\nexport interface TimeRegionConfig {\n mode?: TimeRegionMode;\n\n from?: string;\n fromDayOfWeek?: number; // 1-7\n\n to?: string;\n toDayOfWeek?: number; // 1-7\n\n timezone?: string;\n\n cronExpr?: string; // 0 9 * * 1-5\n duration?: string; // 8h\n}\n\nconst secsInDay = 24 * 3600;\n\nfunction getDurationSecs(\n fromDay: number,\n fromHour: number,\n fromMin: number,\n toDay: number,\n toHour: number,\n toMin: number\n) {\n let days = toDay - fromDay;\n\n // account for rollover\n if (days < 0) {\n days += 7;\n }\n\n let fromSecs = fromHour * 3600 + fromMin * 60;\n let toSecs = toHour * 3600 + toMin * 60;\n\n let durSecs = 0;\n\n // account for toTime < fromTime on same day\n if (days === 0 && toSecs < fromSecs) {\n durSecs = 7 * secsInDay - (fromSecs - toSecs);\n } else {\n let daysSecs = days * secsInDay;\n durSecs = daysSecs - fromSecs + toSecs;\n }\n\n return durSecs;\n}\n\nexport function convertToCron(\n fromDay?: number | null,\n from?: string | null,\n toDay?: number | null,\n to?: string | null\n) {\n // valid defs must have a \"from\"\n if (fromDay == null && from == null) {\n return undefined;\n }\n\n const cronCfg = {\n cronExpr: '',\n duration: 0,\n };\n\n const isEveryDay = fromDay == null && toDay == null;\n // if the def contains only days of week, then they become end-day-inclusive\n const toDayEnd = fromDay != null && from == null && to == null;\n\n from ??= '00:00';\n\n // 1. create cron (only requires froms)\n let [fromHour, fromMin] = from.split(':').map((v) => +v);\n\n cronCfg.cronExpr = `${fromMin} ${fromHour} * * ${fromDay ?? '*'}`;\n\n // 2. determine duration\n fromDay ??= 1;\n toDay ??= fromDay;\n\n // e.g. from Wed to Fri (implies inclusive Fri)\n if (toDayEnd) {\n to = '00:00';\n toDay += toDay === 7 ? -6 : 1;\n }\n\n to ??= from;\n\n let [toHour, toMin] = to.split(':').map((v) => +v);\n\n let fromSecs = fromHour * 3600 + fromMin * 60;\n let toSecs = toHour * 3600 + toMin * 60;\n\n // e.g. every day from 22:00 to 02:00 (implied next day)\n // NOTE: the odd wrap-around case of toSecs < fromSecs in same day is handled inside getDurationSecs()\n if (isEveryDay && toSecs < fromSecs) {\n toDay += toDay === 7 ? -6 : 1;\n }\n\n cronCfg.duration = getDurationSecs(fromDay, fromHour, fromMin, toDay, toHour, toMin);\n\n return cronCfg;\n}\n\nexport function calculateTimesWithin(cfg: TimeRegionConfig, tRange: TimeRange): AbsoluteTimeRange[] {\n const ranges: AbsoluteTimeRange[] = [];\n\n let cronExpr = '';\n let durationMs = 0;\n\n let { fromDayOfWeek, from, toDayOfWeek, to, duration = '' } = cfg;\n\n if (cfg.mode === 'cron') {\n cronExpr = cfg.cronExpr ?? '';\n durationMs = durationToMilliseconds(parseDuration(duration));\n } else {\n // remove empty strings\n from = from === '' ? undefined : from;\n to = to === '' ? undefined : to;\n\n const cron = convertToCron(fromDayOfWeek, from, toDayOfWeek, to);\n\n if (cron != null) {\n cronExpr = cron.cronExpr;\n durationMs = cron.duration * 1e3;\n }\n }\n\n if (cronExpr === '') {\n return [];\n }\n\n try {\n let tz = cfg.timezone === 'browser' ? undefined : cfg.timezone === 'utc' ? 'Etc/UTC' : cfg.timezone;\n\n let job = new Cron(cronExpr, { timezone: tz });\n\n // get previous run that may overlap with start of timerange\n let fromDate: Date | null = new Date(tRange.from.valueOf() - durationMs);\n\n let toMs = tRange.to.valueOf();\n let nextDate = job.nextRun(fromDate);\n\n while (nextDate != null) {\n let nextMs = +nextDate;\n\n if (nextMs > toMs) {\n break;\n } else {\n ranges.push({\n from: nextMs,\n to: nextMs + durationMs,\n });\n nextDate = job.nextRun(nextDate);\n }\n }\n } catch (e) {\n // invalid expression\n console.error(e);\n }\n\n return ranges;\n}\n","import { TimeRange, DataFrame, FieldType } from '@grafana/data';\nimport { TimeRegionConfig, calculateTimesWithin } from 'app/core/utils/timeRegions';\n\nexport function doTimeRegionQuery(name: string, config: TimeRegionConfig, range: TimeRange): DataFrame | undefined {\n const { mode, duration, cronExpr, from, fromDayOfWeek } = config;\n\n const isValidSimple = mode == null && (fromDayOfWeek != null || from != null);\n const isValidAdvanced = mode === 'cron' && cronExpr != null && duration != null;\n\n if (isValidSimple || isValidAdvanced) {\n const ranges = calculateTimesWithin(config, range);\n\n if (ranges.length > 0) {\n const frame: DataFrame = {\n fields: [\n { name: 'time', type: FieldType.time, values: ranges.map((r) => r.from), config: {} },\n { name: 'timeEnd', type: FieldType.time, values: ranges.map((r) => r.to), config: {} },\n { name: 'text', type: FieldType.string, values: Array(ranges.length).fill(name), config: {} },\n ],\n length: ranges.length,\n };\n\n return frame;\n }\n }\n\n return undefined;\n}\n","import { isString } from 'lodash';\nimport { from, merge, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n AnnotationQuery,\n AnnotationQueryRequest,\n DataFrameView,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n TestDataSourceResponse,\n isValidLiveChannelAddress,\n MutableDataFrame,\n parseLiveChannelAddress,\n dataFrameFromJSON,\n LoadingState,\n} from '@grafana/data';\nimport {\n DataSourceWithBackend,\n getDataSourceSrv,\n getGrafanaLiveSrv,\n getTemplateSrv,\n StreamingFrameOptions,\n} from '@grafana/runtime';\nimport { DataSourceRef } from '@grafana/schema';\nimport { annotationServer } from 'app/features/annotations/api';\nimport { migrateDatasourceNameToRef } from 'app/features/dashboard/state/DashboardMigrator';\n\nimport { getDashboardSrv } from '../../../features/dashboard/services/DashboardSrv';\n\nimport AnnotationQueryEditor from './components/AnnotationQueryEditor';\nimport { doTimeRegionQuery } from './timeRegions';\nimport { GrafanaAnnotationQuery, GrafanaAnnotationType, GrafanaQuery, GrafanaQueryType } from './types';\n\nlet counter = 100;\n\nexport class GrafanaDatasource extends DataSourceWithBackend<GrafanaQuery> {\n constructor(instanceSettings: DataSourceInstanceSettings) {\n super(instanceSettings);\n this.annotations = {\n QueryEditor: AnnotationQueryEditor,\n prepareAnnotation(json): AnnotationQuery<GrafanaAnnotationQuery> {\n // Previously, these properties lived outside of target\n // This should handle migrating them\n json.target = json.target ?? {\n type: json.type ?? GrafanaAnnotationType.Dashboard,\n limit: json.limit ?? 100,\n tags: json.tags ?? [],\n matchAny: json.matchAny ?? false,\n }; // using spread syntax caused an infinite loop in StandardAnnotationQueryEditor\n return json;\n },\n prepareQuery(anno: AnnotationQuery<GrafanaAnnotationQuery>): GrafanaQuery {\n let datasource: DataSourceRef | undefined | null = undefined;\n if (isString(anno.datasource)) {\n const ref = migrateDatasourceNameToRef(anno.datasource, { returnDefaultAsNull: false });\n if (ref) {\n datasource = ref;\n }\n } else {\n datasource = anno.datasource;\n }\n\n // Filter from streaming query conflicts with filter from annotations\n const { filter, ...rest } = anno;\n\n return { ...rest, refId: anno.name, queryType: GrafanaQueryType.Annotations, datasource };\n },\n };\n }\n\n getDefaultQuery(): Partial<GrafanaQuery> {\n return {\n queryType: GrafanaQueryType.RandomWalk,\n };\n }\n\n query(request: DataQueryRequest<GrafanaQuery>): Observable<DataQueryResponse> {\n const results: Array<Observable<DataQueryResponse>> = [];\n const targets: GrafanaQuery[] = [];\n const templateSrv = getTemplateSrv();\n for (const target of request.targets) {\n if (target.queryType === GrafanaQueryType.Annotations) {\n return from(\n this.getAnnotations({\n range: request.range,\n rangeRaw: request.range.raw,\n annotation: target as unknown as AnnotationQuery<GrafanaAnnotationQuery>,\n dashboard: getDashboardSrv().getCurrent(),\n })\n );\n }\n if (target.hide) {\n continue;\n }\n if (target.queryType === GrafanaQueryType.Snapshot) {\n results.push(\n of({\n // NOTE refId is intentionally missing because:\n // 1) there is only one snapshot\n // 2) the payload will reference original refIds\n data: (target.snapshot ?? []).map((v) => dataFrameFromJSON(v)),\n state: LoadingState.Done,\n })\n );\n continue;\n }\n if (target.queryType === GrafanaQueryType.TimeRegions) {\n const frame = doTimeRegionQuery('', target.timeRegion!, request.range);\n results.push(\n of({\n data: frame ? [frame] : [],\n state: LoadingState.Done,\n })\n );\n continue;\n }\n if (target.queryType === GrafanaQueryType.LiveMeasurements) {\n let channel = templateSrv.replace(target.channel, request.scopedVars);\n const { filter } = target;\n\n const addr = parseLiveChannelAddress(channel);\n if (!isValidLiveChannelAddress(addr)) {\n continue;\n }\n const buffer: Partial<StreamingFrameOptions> = {\n maxLength: request.maxDataPoints ?? 500,\n };\n if (target.buffer) {\n buffer.maxDelta = target.buffer;\n buffer.maxLength = buffer.maxLength! * 2; //??\n } else if (request.rangeRaw?.to === 'now') {\n buffer.maxDelta = request.range.to.valueOf() - request.range.from.valueOf();\n }\n\n results.push(\n getGrafanaLiveSrv().getDataStream({\n key: `${request.requestId}.${counter++}`,\n addr: addr!,\n filter,\n buffer,\n })\n );\n } else {\n if (!target.queryType) {\n target.queryType = GrafanaQueryType.RandomWalk;\n }\n targets.push(target);\n }\n }\n\n if (targets.length) {\n results.push(\n super.query({\n ...request,\n targets,\n })\n );\n }\n\n if (results.length) {\n // With a single query just return the results\n if (results.length === 1) {\n return results[0];\n }\n return merge(...results);\n }\n return of(); // nothing\n }\n\n listFiles(path: string, maxDataPoints?: number): Observable<DataFrameView<FileElement>> {\n return this.query({\n targets: [\n {\n refId: 'A',\n queryType: GrafanaQueryType.List,\n path,\n },\n ],\n maxDataPoints,\n } as DataQueryRequest<GrafanaQuery>).pipe(\n map((v) => {\n const frame = v.data[0] ?? new MutableDataFrame();\n return new DataFrameView<FileElement>(frame);\n })\n );\n }\n\n metricFindQuery() {\n return Promise.resolve([]);\n }\n\n async getAnnotations(options: AnnotationQueryRequest<GrafanaQuery>): Promise<DataQueryResponse> {\n const query = options.annotation.target as GrafanaQuery;\n if (query?.queryType === GrafanaQueryType.TimeRegions) {\n const frame = doTimeRegionQuery(options.annotation.name, query.timeRegion!, options.range);\n return Promise.resolve({ data: frame ? [frame] : [] });\n }\n\n const annotation = options.annotation as unknown as AnnotationQuery<GrafanaAnnotationQuery>;\n const target = annotation.target!;\n const params: any = {\n from: options.range.from.valueOf(),\n to: options.range.to.valueOf(),\n limit: target.limit,\n tags: target.tags,\n matchAny: target.matchAny,\n };\n\n if (target.type === GrafanaAnnotationType.Dashboard) {\n // if no dashboard id yet return\n if (!options.dashboard?.uid) {\n return Promise.resolve({ data: [] });\n }\n // filter by dashboard id\n params.dashboardUID = options.dashboard.uid;\n // remove tags filter if any\n delete params.tags;\n } else {\n // require at least one tag\n if (!Array.isArray(target.tags) || target.tags.length === 0) {\n return Promise.resolve({ data: [] });\n }\n const templateSrv = getTemplateSrv();\n const delimiter = '__delimiter__';\n const tags = [];\n for (const t of params.tags) {\n const renderedValues = templateSrv.replace(t, {}, (value: string | string[]) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return value.join(delimiter);\n });\n for (const tt of renderedValues.split(delimiter)) {\n tags.push(tt);\n }\n }\n params.tags = tags;\n }\n\n const df = await annotationServer().query(\n params,\n `grafana-data-source-annotations-${annotation.name}-${options.dashboard?.uid}`\n );\n return { data: [df] };\n }\n\n testDatasource(): Promise<TestDataSourceResponse> {\n return Promise.resolve({ message: '', status: '' });\n }\n}\n\n/** Get the GrafanaDatasource instance */\nexport async function getGrafanaDatasource() {\n return (await getDataSourceSrv().get('-- Grafana --')) as GrafanaDatasource;\n}\n\nexport interface FileElement {\n name: string;\n ['media-type']: string;\n}\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\nimport * as React from 'react';\n\ninterface XYCanvasProps {\n top: number; // css pxls\n left: number; // css pxls\n}\n\n/**\n * Renders absolutely positioned element on top of the uPlot's plotting area (axes are not included!).\n * Useful when you want to render some overlay with canvas-independent elements on top of the plot.\n */\nexport const XYCanvas = ({ children, left, top }: React.PropsWithChildren<XYCanvasProps>) => {\n const className = useMemo(() => {\n return css({\n position: 'absolute',\n overflow: 'visible',\n left: `${left}px`,\n top: `${top}px`,\n });\n }, [left, top]);\n\n return <div className={className}>{children}</div>;\n};\n","import { getFieldMatcher } from '../transformations/matchers';\nimport {\n DataFrame,\n FieldType,\n Field,\n TIME_SERIES_TIME_FIELD_NAME,\n TIME_SERIES_VALUE_FIELD_NAME,\n} from '../types/dataFrame';\nimport { FieldConfigSource } from '../types/fieldOverrides';\nimport { formatLabels } from '../utils/labels';\n\n/**\n * Get an appropriate display title\n */\nexport function getFrameDisplayName(frame: DataFrame, index?: number) {\n if (frame.name) {\n return frame.name;\n }\n\n const valueFieldNames: string[] = [];\n for (const field of frame.fields) {\n if (field.type === FieldType.time) {\n continue;\n }\n\n // No point in doing more\n if (valueFieldNames.length > 1) {\n break;\n }\n\n valueFieldNames.push(getFieldDisplayName(field, frame));\n }\n\n // If the frame has a single value field then use the name of that field as the frame name\n if (valueFieldNames.length === 1) {\n return valueFieldNames[0];\n }\n\n // list all the\n if (index === undefined && frame.fields.length > 0) {\n return frame.fields\n .filter((f) => f.type !== FieldType.time)\n .map((f) => getFieldDisplayName(f, frame))\n .join(', ');\n }\n\n if (frame.refId) {\n return `Series (${frame.refId})`;\n }\n\n return `Series (${index})`;\n}\n\nexport function cacheFieldDisplayNames(frames: DataFrame[]) {\n frames.forEach((frame) => {\n frame.fields.forEach((field) => {\n getFieldDisplayName(field, frame, frames);\n });\n });\n}\n\n/**\n *\n * moves each field's config.custom.hideFrom to field.state.hideFrom\n * and mutates original field.config.custom.hideFrom to one with explicit overrides only, (without the ad-hoc stateful __system override from legend toggle)\n */\nexport function decoupleHideFromState(frames: DataFrame[], fieldConfig: FieldConfigSource) {\n frames.forEach((frame) => {\n frame.fields.forEach((field) => {\n const hideFrom = {\n legend: false,\n tooltip: false,\n viz: false,\n ...fieldConfig.defaults.custom?.hideFrom,\n };\n\n // with ad hoc __system override applied\n const hideFromState = field.config.custom?.hideFrom;\n\n fieldConfig.overrides.forEach((o) => {\n if ('__systemRef' in o) {\n return;\n }\n\n const m = getFieldMatcher(o.matcher);\n\n if (m(field, frame, frames)) {\n for (const p of o.properties) {\n if (p.id === 'custom.hideFrom') {\n Object.assign(hideFrom, p.value);\n }\n }\n }\n });\n\n field.state = {\n ...field.state,\n hideFrom: {\n ...hideFromState,\n },\n };\n\n // original with perm overrides\n field.config.custom.hideFrom = hideFrom;\n });\n });\n}\n\nexport function getFieldDisplayName(field: Field, frame?: DataFrame, allFrames?: DataFrame[]): string {\n const existingTitle = field.state?.displayName;\n const multipleFrames = Boolean(allFrames && allFrames.length > 1);\n\n if (existingTitle && multipleFrames === field.state?.multipleFrames) {\n return existingTitle;\n }\n\n const displayName = calculateFieldDisplayName(field, frame, allFrames);\n field.state = field.state || {};\n field.state.displayName = displayName;\n field.state.multipleFrames = multipleFrames;\n\n return displayName;\n}\n\n/**\n * Get an appropriate display name. If the 'displayName' field config is set, use that.\n */\nexport function calculateFieldDisplayName(field: Field, frame?: DataFrame, allFrames?: DataFrame[]): string {\n const hasConfigTitle = field.config?.displayName && field.config?.displayName.length;\n const isComparisonSeries = Boolean(frame?.meta?.timeCompare?.isTimeShiftQuery);\n let displayName = hasConfigTitle ? field.config!.displayName! : field.name;\n\n if (hasConfigTitle) {\n return isComparisonSeries ? `${displayName} (comparison)` : displayName;\n }\n\n if (frame && field.config?.displayNameFromDS) {\n return isComparisonSeries ? `${field.config.displayNameFromDS} (comparison)` : field.config.displayNameFromDS;\n }\n\n // This is an ugly exception for time field\n // For time series we should normally treat time field with same name\n // But in case it has a join source we should handle it as normal field\n if (field.type === FieldType.time && !field.labels) {\n return displayName ?? TIME_SERIES_TIME_FIELD_NAME;\n }\n\n let parts: string[] = [];\n let frameNamesDiffer = false;\n\n if (allFrames && allFrames.length > 1) {\n for (let i = 1; i < allFrames.length; i++) {\n const frame = allFrames[i];\n if (frame.name !== allFrames[i - 1].name) {\n frameNamesDiffer = true;\n break;\n }\n }\n }\n\n let frameNameAdded = false;\n let labelsAdded = false;\n\n if (frameNamesDiffer && frame?.name) {\n parts.push(frame.name);\n frameNameAdded = true;\n }\n\n if (field.name && field.name !== TIME_SERIES_VALUE_FIELD_NAME) {\n parts.push(field.name);\n }\n\n if (field.labels && frame) {\n let singleLabelName = getSingleLabelName(allFrames ?? [frame]);\n\n if (!singleLabelName) {\n let allLabels = formatLabels(field.labels);\n if (allLabels) {\n parts.push(allLabels);\n labelsAdded = true;\n }\n } else if (field.labels[singleLabelName]) {\n parts.push(field.labels[singleLabelName]);\n labelsAdded = true;\n }\n }\n\n // if we have not added frame name and no labels, and field name = Value, we should add frame name\n if (frame && !frameNameAdded && !labelsAdded && field.name === TIME_SERIES_VALUE_FIELD_NAME) {\n if (frame.name && frame.name.length > 0) {\n parts.push(frame.name);\n frameNameAdded = true;\n }\n }\n\n if (parts.length) {\n displayName = parts.join(' ');\n } else if (field.name) {\n displayName = field.name;\n } else {\n displayName = TIME_SERIES_VALUE_FIELD_NAME;\n }\n\n // Ensure unique field name\n if (displayName === field.name) {\n displayName = getUniqueFieldName(field, frame);\n }\n\n if (isComparisonSeries) {\n displayName = `${displayName} (comparison)`;\n }\n return displayName;\n}\n\nexport function getUniqueFieldName(field: Field, frame?: DataFrame) {\n let dupeCount = 0;\n let foundSelf = false;\n\n if (frame) {\n for (let i = 0; i < frame.fields.length; i++) {\n const otherField = frame.fields[i];\n\n if (field === otherField) {\n foundSelf = true;\n\n if (dupeCount > 0) {\n dupeCount++;\n break;\n }\n } else if (field.name === otherField.name) {\n dupeCount++;\n\n if (foundSelf) {\n break;\n }\n }\n }\n }\n\n if (dupeCount) {\n return `${field.name} ${dupeCount}`;\n }\n\n return field.name;\n}\n\n/**\n * Checks all data frames and return name of label if there is only one label name in all frames\n */\nfunction getSingleLabelName(frames: DataFrame[]): string | null {\n let singleName: string | null = null;\n\n for (let i = 0; i < frames.length; i++) {\n const frame = frames[i];\n\n for (const field of frame.fields) {\n if (!field.labels) {\n continue;\n }\n\n // yes this should be in!\n for (const labelKey in field.labels) {\n if (singleName === null) {\n singleName = labelKey;\n } else if (labelKey !== singleName) {\n return null;\n }\n }\n }\n }\n\n return singleName;\n}\n","import { durationToMilliseconds, guessDecimals, isValidDuration, parseDuration, roundDecimals } from '@grafana/data';\n\nimport { numberOrVariableValidator } from '../utils';\n\nconst { abs, pow } = Math;\n\nexport const fixedDec = new Map();\n\nexport function genIncrs(base: number, minExp: number, maxExp: number, mults: number[]) {\n let incrs = [];\n\n let multDec = mults.map(guessDecimals);\n\n for (let exp = minExp; exp < maxExp; exp++) {\n let expa = abs(exp);\n let mag = roundDecimals(pow(base, exp), expa);\n\n for (let i = 0; i < mults.length; i++) {\n let _incr = mults[i] * mag;\n let dec = (_incr >= 0 && exp >= 0 ? 0 : expa) + (exp >= multDec[i] ? 0 : multDec[i]);\n let incr = roundDecimals(_incr, dec);\n incrs.push(incr);\n fixedDec.set(incr, dec);\n }\n }\n\n return incrs;\n}\n\nconst onlyWhole = (v: number) => v % 1 === 0;\n\nconst allMults = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5];\n\n// ...0.01, 0.02, 0.025, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.2, 0.25, 0.3, 0.4, 0.5...\nexport const decIncrs = genIncrs(10, -16, 0, allMults);\n\n// 1, 2, 2.5, 3, 4, 5, 6, 7, 8, 9, 10, 20, 25, 30, 40, 50...\nexport const oneIncrs = genIncrs(10, 0, 16, allMults);\n\n// 1, 2, 3, 4, 5, 10, 20, 25, 50...\nexport const wholeIncrs = oneIncrs.filter(onlyWhole);\n\nexport const numIncrs = decIncrs.concat(oneIncrs);\n\nexport const niceLinearIncrs = decIncrs.concat(wholeIncrs);\n\nconst sec = 1 * 1e3;\nconst min = 60 * sec;\nconst hour = 60 * min;\nconst day = 24 * hour;\nconst year = 365 * day;\n\n// in milliseconds\nexport const niceTimeIncrs = [\n 1,\n 2,\n 4,\n 5,\n 10,\n 20,\n 25,\n 40,\n 50,\n 100,\n 200,\n 250,\n 400,\n 500,\n\n sec,\n 2 * sec,\n 4 * sec,\n 5 * sec,\n 10 * sec,\n 15 * sec,\n 20 * sec,\n 30 * sec,\n\n min,\n 2 * min,\n 4 * min,\n 5 * min,\n 10 * min,\n 15 * min,\n 20 * min,\n 30 * min,\n\n hour,\n 2 * hour,\n 4 * hour,\n 6 * hour,\n 8 * hour,\n 12 * hour,\n 18 * hour,\n\n day,\n 2 * day,\n 3 * day,\n 4 * day,\n 5 * day,\n 6 * day,\n 7 * day,\n 10 * day,\n 15 * day,\n 30 * day,\n 45 * day,\n 60 * day,\n 90 * day,\n 180 * day,\n\n year,\n 2 * year,\n 3 * year,\n 4 * year,\n 5 * year,\n 6 * year,\n 7 * year,\n 8 * year,\n 9 * year,\n 10 * year,\n];\n\n// convert a string to the number of milliseconds. valid inputs are a number, variable, or duration. duration in ms is supported.\n// value out will always be an integer, as ms is the lowest granularity for heatmaps\nexport const convertDurationToMilliseconds = (duration: string): number | undefined => {\n const isValidNumberOrVariable = numberOrVariableValidator(duration); // check if number only. if so, equals number of ms\n if (isValidNumberOrVariable) {\n const durationMs = Number.parseInt(duration, 10);\n return Number.isNaN(durationMs) ? undefined : durationMs;\n } else {\n const validDuration = isValidDuration(duration); // check if non-ms duration. If so, convert value to number of ms\n if (validDuration) {\n return durationToMilliseconds(parseDuration(duration));\n } else {\n const match = duration.match(/(\\d+)ms$/i);\n if (match) {\n const durationMs = Number.parseInt(match[1], 10);\n return Number.isNaN(durationMs) ? undefined : durationMs;\n } else {\n return undefined;\n }\n }\n }\n};\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ntype Props = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Well = ({ children, className }: Props) => {\n const styles = useStyles2(getStyles);\n return <div className={cx(styles.wrapper, className)}>{children}</div>;\n};\nexport const getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n backgroundColor: theme.components.panel.background,\n border: `solid 1px ${theme.components.input.borderColor}`,\n borderRadius: theme.shape.radius.default,\n padding: theme.spacing(0.5, 1),\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n});\n","import { api } from './baseAPI';\nconst injectedRtkApi = api.injectEndpoints({\n endpoints: (build) => ({\n unstarDashboardByUid: build.mutation<UnstarDashboardByUidApiResponse, UnstarDashboardByUidApiArg>({\n query: (queryArg) => ({ url: `/user/stars/dashboard/uid/${queryArg.dashboardUid}`, method: 'DELETE' }),\n }),\n starDashboardByUid: build.mutation<StarDashboardByUidApiResponse, StarDashboardByUidApiArg>({\n query: (queryArg) => ({ url: `/user/stars/dashboard/uid/${queryArg.dashboardUid}`, method: 'POST' }),\n }),\n }),\n overrideExisting: false,\n});\nexport { injectedRtkApi as generatedAPI };\nexport type UnstarDashboardByUidApiResponse =\n /** status 200 An OKResponse is returned if the request was successful. */ SuccessResponseBody;\nexport type UnstarDashboardByUidApiArg = {\n dashboardUid: string;\n};\nexport type StarDashboardByUidApiResponse =\n /** status 200 An OKResponse is returned if the request was successful. */ SuccessResponseBody;\nexport type StarDashboardByUidApiArg = {\n dashboardUid: string;\n};\nexport type SuccessResponseBody = {\n message?: string;\n};\nexport type ErrorResponseBody = {\n /** Error An optional detailed description of the actual error. Only included if running in developer mode. */\n error?: string;\n /** a human readable version of the error */\n message: string;\n /** Status An optional status to denote the cause of the error.\n \n For example, a 412 Precondition Failed error may include additional information of why that error happened. */\n status?: string;\n};\nexport const { useUnstarDashboardByUidMutation, useStarDashboardByUidMutation } = injectedRtkApi;\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { createBaseQuery } from '../createBaseQuery';\n\nexport const api = createApi({\n reducerPath: 'legacyUserAPI',\n baseQuery: createBaseQuery({ baseURL: '/api' }),\n endpoints: () => ({}),\n});\n","import { useMemo } from 'react';\n\nimport { contextSrv as ctx } from 'app/core/services/context_srv';\nimport { PERMISSIONS_CONTACT_POINTS_READ } from 'app/features/alerting/unified/components/contact-points/permissions';\nimport {\n PERMISSIONS_TIME_INTERVALS_MODIFY,\n PERMISSIONS_TIME_INTERVALS_READ,\n} from 'app/features/alerting/unified/components/mute-timings/permissions';\nimport {\n PERMISSIONS_NOTIFICATION_POLICIES_MODIFY,\n PERMISSIONS_NOTIFICATION_POLICIES_READ,\n} from 'app/features/alerting/unified/components/notification-policies/permissions';\nimport { useFolder } from 'app/features/alerting/unified/hooks/useFolder';\nimport { AlertmanagerChoice } from 'app/plugins/datasource/alertmanager/types';\nimport { AccessControlAction } from 'app/types/accessControl';\nimport { CombinedRule, RuleGroupIdentifierV2 } from 'app/types/unified-alerting';\nimport { GrafanaPromRuleDTO, RulerRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { alertmanagerApi } from '../api/alertmanagerApi';\nimport { useAlertmanager } from '../state/AlertmanagerContext';\nimport { getInstancesPermissions, getNotificationsPermissions, getRulesPermissions } from '../utils/access-control';\nimport { getGroupOriginName, groupIdentifier } from '../utils/groupIdentifier';\nimport { isAdmin } from '../utils/misc';\nimport {\n isPluginProvidedRule,\n isProvisionedPromRule,\n isProvisionedRule,\n prometheusRuleType,\n rulerRuleType,\n} from '../utils/rules';\n\nimport { useIsRuleEditable } from './useIsRuleEditable';\n\n/**\n * These hooks will determine if\n * 1. the action is supported in the current context (alertmanager, alert rule or general context)\n * 2. user is allowed to perform actions based on their set of permissions / assigned role\n */\n\n// this enum lists all of the available actions we can perform within the context of an alertmanager\nexport enum AlertmanagerAction {\n // configuration\n ViewExternalConfiguration = 'view-external-configuration',\n UpdateExternalConfiguration = 'update-external-configuration',\n\n // contact points\n CreateContactPoint = 'create-contact-point',\n ViewContactPoint = 'view-contact-point',\n UpdateContactPoint = 'edit-contact-points',\n DeleteContactPoint = 'delete-contact-point',\n ExportContactPoint = 'export-contact-point',\n\n // notification templates\n CreateNotificationTemplate = 'create-notification-template',\n ViewNotificationTemplate = 'view-notification-template',\n UpdateNotificationTemplate = 'edit-notification-template',\n DeleteNotificationTemplate = 'delete-notification-template',\n DecryptSecrets = 'decrypt-secrets',\n\n // notification policies\n CreateNotificationPolicy = 'create-notification-policy',\n ViewNotificationPolicyTree = 'view-notification-policy-tree',\n UpdateNotificationPolicyTree = 'update-notification-policy-tree',\n DeleteNotificationPolicy = 'delete-notification-policy',\n ExportNotificationPolicies = 'export-notification-policies',\n ViewAutogeneratedPolicyTree = 'view-autogenerated-policy-tree',\n\n // silences – these cannot be deleted only \"expired\" (updated)\n CreateSilence = 'create-silence',\n ViewSilence = 'view-silence',\n UpdateSilence = 'update-silence',\n PreviewSilencedInstances = 'preview-silenced-alerts',\n\n // time intervals\n ViewTimeInterval = 'view-time-interval',\n CreateTimeInterval = 'create-time-interval',\n UpdateTimeInterval = 'update-time-interval',\n DeleteTimeInterval = 'delete-time-interval',\n ExportTimeIntervals = 'export-time-intervals',\n\n // Alert groups\n ViewAlertGroups = 'view-alert-groups',\n}\n\n// this enum lists all of the available actions we can take on a single alert rule\nexport enum AlertRuleAction {\n Duplicate = 'duplicate-alert-rule',\n View = 'view-alert-rule',\n Update = 'update-alert-rule',\n Delete = 'delete-alert-rule',\n Explore = 'explore-alert-rule',\n Silence = 'silence-alert-rule',\n ModifyExport = 'modify-export-rule',\n Pause = 'pause-alert-rule',\n Restore = 'restore-alert-rule',\n DeletePermanently = 'delete-alert-rule-permanently',\n}\n\n// this enum list all of the bulk actions we can perform on a folder\nexport enum FolderBulkAction {\n Pause = 'pause-folder', // unpause permissions are the same as pause\n Delete = 'delete-folder',\n}\n\n// this enum lists all of the actions we can perform within alerting in general, not linked to a specific\n// alert source, rule or alertmanager\nexport enum AlertingAction {\n // internal (Grafana managed)\n CreateAlertRule = 'create-alert-rule',\n ViewAlertRule = 'view-alert-rule',\n UpdateAlertRule = 'update-alert-rule',\n DeleteAlertRule = 'delete-alert-rule',\n ExportGrafanaManagedRules = 'export-grafana-managed-rules',\n ReadConfigurationStatus = 'read-configuration-status',\n\n // external (any compatible alerting data source)\n CreateExternalAlertRule = 'create-external-alert-rule',\n ViewExternalAlertRule = 'view-external-alert-rule',\n UpdateExternalAlertRule = 'update-external-alert-rule',\n DeleteExternalAlertRule = 'delete-external-alert-rule',\n}\n\n// these just makes it easier to read the code :)\nconst AlwaysSupported = true;\nconst NotSupported = false;\n\nexport type Action = AlertmanagerAction | AlertingAction | AlertRuleAction | FolderBulkAction;\nexport type Ability = [actionSupported: boolean, actionAllowed: boolean];\nexport type Abilities<T extends Action> = Record<T, Ability>;\n\n/**\n * This one will check for folder abilities\n */\nexport const useFolderBulkActionAbilities = (): Abilities<FolderBulkAction> => {\n return {\n [FolderBulkAction.Pause]: [AlwaysSupported, isAdmin()],\n [FolderBulkAction.Delete]: [AlwaysSupported, isAdmin()],\n };\n};\n\nexport const useFolderBulkActionAbility = (action: FolderBulkAction): Ability => {\n const allAbilities = useFolderBulkActionAbilities();\n return allAbilities[action];\n};\n\n/**\n * This one will check for alerting abilities that don't apply to any particular alert source or alert rule\n */\nexport const useAlertingAbilities = (): Abilities<AlertingAction> => {\n return {\n // internal (Grafana managed)\n [AlertingAction.CreateAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleCreate),\n [AlertingAction.ViewAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleRead),\n [AlertingAction.UpdateAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleUpdate),\n [AlertingAction.DeleteAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleDelete),\n [AlertingAction.ExportGrafanaManagedRules]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleRead),\n [AlertingAction.ReadConfigurationStatus]: [\n AlwaysSupported,\n ctx.hasPermission(AccessControlAction.AlertingInstanceRead) ||\n ctx.hasPermission(AccessControlAction.AlertingNotificationsRead),\n ],\n\n // external\n [AlertingAction.CreateExternalAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleExternalWrite),\n [AlertingAction.ViewExternalAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleExternalRead),\n [AlertingAction.UpdateExternalAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleExternalWrite),\n [AlertingAction.DeleteExternalAlertRule]: toAbility(AlwaysSupported, AccessControlAction.AlertingRuleExternalWrite),\n };\n};\n\nexport const useAlertingAbility = (action: AlertingAction): Ability => {\n const allAbilities = useAlertingAbilities();\n return allAbilities[action];\n};\n\n/**\n * This hook will check if we support the action and have sufficient permissions for it on a single alert rule\n */\nexport function useAlertRuleAbility(rule: CombinedRule, action: AlertRuleAction): Ability {\n const abilities = useAllAlertRuleAbilities(rule);\n\n return useMemo(() => {\n return abilities[action];\n }, [abilities, action]);\n}\n\nexport function useAlertRuleAbilities(rule: CombinedRule, actions: AlertRuleAction[]): Ability[] {\n const abilities = useAllAlertRuleAbilities(rule);\n\n return useMemo(() => {\n return actions.map((action) => abilities[action]);\n }, [abilities, actions]);\n}\n\nexport function useRulerRuleAbility(\n rule: RulerRuleDTO | undefined,\n groupIdentifier: RuleGroupIdentifierV2,\n action: AlertRuleAction\n): Ability {\n const abilities = useAllRulerRuleAbilities(rule, groupIdentifier);\n\n return useMemo(() => {\n return abilities[action];\n }, [abilities, action]);\n}\n\nexport function useRulerRuleAbilities(\n rule: RulerRuleDTO | undefined,\n groupIdentifier: RuleGroupIdentifierV2,\n actions: AlertRuleAction[]\n): Ability[] {\n const abilities = useAllRulerRuleAbilities(rule, groupIdentifier);\n\n return useMemo(() => {\n return actions.map((action) => abilities[action]);\n }, [abilities, actions]);\n}\n\n/**\n * @deprecated Use {@link useAllRulerRuleAbilities} instead\n */\nexport function useAllAlertRuleAbilities(rule: CombinedRule): Abilities<AlertRuleAction> {\n // This hook is being called a lot in different places\n // In some cases multiple times for ~80 rules (e.g. on the list page)\n // We need to investigate further if some of these calls are redundant\n // In the meantime, memoizing the result helps\n const groupIdentifierV2 = useMemo(() => groupIdentifier.fromCombinedRule(rule), [rule]);\n return useAllRulerRuleAbilities(rule.rulerRule, groupIdentifierV2);\n}\n\nexport function useAllRulerRuleAbilities(\n rule: RulerRuleDTO | undefined,\n groupIdentifier: RuleGroupIdentifierV2\n): Abilities<AlertRuleAction> {\n const rulesSourceName = getGroupOriginName(groupIdentifier);\n\n const { isEditable, isRemovable, isRulerAvailable = false, loading } = useIsRuleEditable(rulesSourceName, rule);\n const [_, exportAllowed] = useAlertingAbility(AlertingAction.ExportGrafanaManagedRules);\n const canSilence = useCanSilence(rule);\n\n const abilities = useMemo<Abilities<AlertRuleAction>>(() => {\n const isProvisioned = rule ? isProvisionedRule(rule) : false;\n // TODO: Add support for federated rules\n // const isFederated = isFederatedRuleGroup();\n const isFederated = false;\n const isGrafanaManagedAlertRule = rulerRuleType.grafana.rule(rule);\n const isPluginProvided = isPluginProvidedRule(rule);\n\n // if a rule is either provisioned, federated or provided by a plugin rule, we don't allow it to be removed or edited\n const immutableRule = isProvisioned || isFederated || isPluginProvided;\n\n // while we gather info, pretend it's not supported\n const MaybeSupported = loading ? NotSupported : isRulerAvailable;\n const MaybeSupportedUnlessImmutable = immutableRule ? NotSupported : MaybeSupported;\n\n // Creating duplicates of plugin-provided rules does not seem to make a lot of sense\n const duplicateSupported = isPluginProvided ? NotSupported : MaybeSupported;\n\n const rulesPermissions = getRulesPermissions(rulesSourceName);\n\n const abilities: Abilities<AlertRuleAction> = {\n [AlertRuleAction.Duplicate]: toAbility(duplicateSupported, rulesPermissions.create),\n [AlertRuleAction.View]: toAbility(AlwaysSupported, rulesPermissions.read),\n [AlertRuleAction.Update]: [MaybeSupportedUnlessImmutable, isEditable ?? false],\n [AlertRuleAction.Delete]: [MaybeSupportedUnlessImmutable, isRemovable ?? false],\n [AlertRuleAction.Explore]: toAbility(AlwaysSupported, AccessControlAction.DataSourcesExplore),\n [AlertRuleAction.Silence]: canSilence,\n [AlertRuleAction.ModifyExport]: [isGrafanaManagedAlertRule, exportAllowed],\n [AlertRuleAction.Pause]: [MaybeSupportedUnlessImmutable && isGrafanaManagedAlertRule, isEditable ?? false],\n [AlertRuleAction.Restore]: [MaybeSupportedUnlessImmutable && isGrafanaManagedAlertRule, isEditable ?? false],\n [AlertRuleAction.DeletePermanently]: [\n MaybeSupportedUnlessImmutable && isGrafanaManagedAlertRule,\n (isRemovable && isAdmin()) ?? false,\n ],\n };\n\n return abilities;\n }, [rule, loading, isRulerAvailable, rulesSourceName, isEditable, isRemovable, canSilence, exportAllowed]);\n\n return abilities;\n}\n\n/**\n * Hook for checking abilities on Grafana Prometheus rules (GrafanaPromRuleDTO)\n * This is the next version of useAllRulerRuleAbilities designed to work with GrafanaPromRuleDTO\n */\nexport function useAllGrafanaPromRuleAbilities(rule: GrafanaPromRuleDTO | undefined): Abilities<AlertRuleAction> {\n // For GrafanaPromRuleDTO, we use useIsGrafanaPromRuleEditable instead\n const { isEditable, isRemovable, loading } = useIsGrafanaPromRuleEditable(rule); // duplicate\n const [_, exportAllowed] = useAlertingAbility(AlertingAction.ExportGrafanaManagedRules);\n\n const silenceSupported = useGrafanaRulesSilenceSupport();\n const canSilenceInFolder = useCanSilenceInFolder(rule?.folderUid);\n\n const abilities = useMemo<Abilities<AlertRuleAction>>(() => {\n const isProvisioned = rule ? isProvisionedPromRule(rule) : false;\n\n // Note: Grafana managed rules can't be federated - this is strictly a Mimir feature\n // See: https://grafana.com/docs/mimir/latest/references/architecture/components/ruler/#federated-rule-groups\n const isFederated = false;\n // All GrafanaPromRuleDTO rules are Grafana-managed by definition\n const isAlertingRule = prometheusRuleType.grafana.alertingRule(rule);\n const isPluginProvided = isPluginProvidedRule(rule);\n\n // if a rule is either provisioned, federated or provided by a plugin rule, we don't allow it to be removed or edited\n const immutableRule = isProvisioned || isFederated || isPluginProvided;\n\n // GrafanaPromRuleDTO rules are always supported (no loading state for ruler availability)\n const MaybeSupported = loading ? NotSupported : AlwaysSupported;\n const MaybeSupportedUnlessImmutable = immutableRule ? NotSupported : MaybeSupported;\n\n // Creating duplicates of plugin-provided rules does not seem to make a lot of sense\n const duplicateSupported = isPluginProvided ? NotSupported : MaybeSupported;\n\n const rulesPermissions = getRulesPermissions('grafana');\n\n const abilities: Abilities<AlertRuleAction> = {\n [AlertRuleAction.Duplicate]: toAbility(duplicateSupported, rulesPermissions.create),\n [AlertRuleAction.View]: toAbility(AlwaysSupported, rulesPermissions.read),\n [AlertRuleAction.Update]: [MaybeSupportedUnlessImmutable, isEditable ?? false],\n [AlertRuleAction.Delete]: [MaybeSupportedUnlessImmutable, isRemovable ?? false],\n [AlertRuleAction.Explore]: toAbility(AlwaysSupported, AccessControlAction.DataSourcesExplore),\n [AlertRuleAction.Silence]: [silenceSupported, canSilenceInFolder && isAlertingRule],\n [AlertRuleAction.ModifyExport]: [isAlertingRule, exportAllowed],\n [AlertRuleAction.Pause]: [MaybeSupportedUnlessImmutable && isAlertingRule, isEditable ?? false],\n [AlertRuleAction.Restore]: [MaybeSupportedUnlessImmutable && isAlertingRule, isEditable ?? false],\n [AlertRuleAction.DeletePermanently]: [\n MaybeSupportedUnlessImmutable && isAlertingRule,\n (isRemovable && isAdmin()) ?? false,\n ],\n };\n\n return abilities;\n }, [rule, loading, isEditable, isRemovable, canSilenceInFolder, exportAllowed, silenceSupported]);\n\n return abilities;\n}\n\ninterface IsGrafanaPromRuleEditableResult {\n isEditable: boolean;\n isRemovable: boolean;\n loading: boolean;\n}\n\n/**\n * Hook for checking if a GrafanaPromRuleDTO is editable\n * Adapted version of useIsRuleEditable for GrafanaPromRuleDTO\n */\nfunction useIsGrafanaPromRuleEditable(rule?: GrafanaPromRuleDTO): IsGrafanaPromRuleEditableResult {\n const folderUID = rule?.folderUid;\n const { folder, loading } = useFolder(folderUID);\n\n return useMemo(() => {\n if (!rule || !folderUID) {\n return { isEditable: false, isRemovable: false, loading: false };\n }\n\n if (!folder) {\n // Loading or invalid folder UID\n return {\n isEditable: false,\n isRemovable: false,\n loading,\n };\n }\n\n // For Grafana-managed rules, check folder permissions\n const rulesPermissions = getRulesPermissions('grafana');\n const canEditGrafanaRules = ctx.hasPermissionInMetadata(rulesPermissions.update, folder);\n const canRemoveGrafanaRules = ctx.hasPermissionInMetadata(rulesPermissions.delete, folder);\n\n return {\n isEditable: canEditGrafanaRules,\n isRemovable: canRemoveGrafanaRules,\n loading,\n };\n }, [rule, folderUID, folder, loading]);\n}\n\nexport const skipToken = Symbol('ability-skip-token');\ntype SkipToken = typeof skipToken;\n\n/**\n * Hook for checking a single ability on a GrafanaPromRuleDTO\n */\nexport function useGrafanaPromRuleAbility(rule: GrafanaPromRuleDTO | SkipToken, action: AlertRuleAction): Ability {\n const abilities = useAllGrafanaPromRuleAbilities(rule === skipToken ? undefined : rule);\n\n return useMemo(() => {\n return abilities[action];\n }, [abilities, action]);\n}\n\n/**\n * Hook for checking multiple abilities on a GrafanaPromRuleDTO\n */\nexport function useGrafanaPromRuleAbilities(\n rule: GrafanaPromRuleDTO | SkipToken,\n actions: AlertRuleAction[]\n): Ability[] {\n const abilities = useAllGrafanaPromRuleAbilities(rule === skipToken ? undefined : rule);\n\n return useMemo(() => {\n return actions.map((action) => abilities[action]);\n }, [abilities, actions]);\n}\n\nexport function useAllAlertmanagerAbilities(): Abilities<AlertmanagerAction> {\n const {\n selectedAlertmanager,\n hasConfigurationAPI,\n isGrafanaAlertmanager: isGrafanaFlavoredAlertmanager,\n } = useAlertmanager();\n\n // These are used for interacting with Alertmanager resources where we apply alert.notifications:<name> permissions.\n // There are different permissions based on wether the built-in alertmanager is selected (grafana) or an external one.\n const notificationsPermissions = getNotificationsPermissions(selectedAlertmanager!);\n const instancePermissions = getInstancesPermissions(selectedAlertmanager!);\n\n // list out all of the abilities, and if the user has permissions to perform them\n const abilities: Abilities<AlertmanagerAction> = {\n // -- configuration --\n [AlertmanagerAction.ViewExternalConfiguration]: toAbility(\n AlwaysSupported,\n AccessControlAction.AlertingNotificationsExternalRead\n ),\n [AlertmanagerAction.UpdateExternalConfiguration]: toAbility(\n hasConfigurationAPI,\n AccessControlAction.AlertingNotificationsExternalWrite\n ),\n // -- contact points --\n [AlertmanagerAction.CreateContactPoint]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.create,\n // TODO: Move this into the permissions config and generalise that code to allow for an array of permissions\n ...(isGrafanaFlavoredAlertmanager ? [AccessControlAction.AlertingReceiversCreate] : [])\n ),\n [AlertmanagerAction.ViewContactPoint]: toAbility(\n AlwaysSupported,\n notificationsPermissions.read,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_CONTACT_POINTS_READ : [])\n ),\n [AlertmanagerAction.UpdateContactPoint]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.update,\n ...(isGrafanaFlavoredAlertmanager ? [AccessControlAction.AlertingReceiversWrite] : [])\n ),\n [AlertmanagerAction.DeleteContactPoint]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.delete,\n ...(isGrafanaFlavoredAlertmanager ? [AccessControlAction.AlertingReceiversWrite] : [])\n ),\n // At the time of writing, only Grafana flavored alertmanager supports exporting,\n // and if a user can view the contact point, then they can also export it\n // So the only check we make is if the alertmanager is Grafana flavored\n [AlertmanagerAction.ExportContactPoint]: [isGrafanaFlavoredAlertmanager, isGrafanaFlavoredAlertmanager],\n // -- notification templates --\n [AlertmanagerAction.CreateNotificationTemplate]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.create,\n ...(isGrafanaFlavoredAlertmanager ? [AccessControlAction.AlertingTemplatesWrite] : [])\n ),\n [AlertmanagerAction.ViewNotificationTemplate]: toAbility(\n AlwaysSupported,\n notificationsPermissions.read,\n ...(isGrafanaFlavoredAlertmanager ? [AccessControlAction.AlertingTemplatesRead] : [])\n ),\n [AlertmanagerAction.UpdateNotificationTemplate]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.update,\n ...(isGrafanaFlavoredAlertmanager ? [AccessControlAction.AlertingTemplatesWrite] : [])\n ),\n [AlertmanagerAction.DeleteNotificationTemplate]: toAbility(hasConfigurationAPI, notificationsPermissions.delete),\n // -- notification policies --\n [AlertmanagerAction.CreateNotificationPolicy]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.create,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_NOTIFICATION_POLICIES_MODIFY : [])\n ),\n [AlertmanagerAction.ViewNotificationPolicyTree]: toAbility(\n AlwaysSupported,\n notificationsPermissions.read,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_NOTIFICATION_POLICIES_READ : [])\n ),\n [AlertmanagerAction.UpdateNotificationPolicyTree]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.update,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_NOTIFICATION_POLICIES_MODIFY : [])\n ),\n [AlertmanagerAction.DeleteNotificationPolicy]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.delete,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_NOTIFICATION_POLICIES_MODIFY : [])\n ),\n [AlertmanagerAction.ExportNotificationPolicies]: toAbility(\n isGrafanaFlavoredAlertmanager,\n notificationsPermissions.read\n ),\n [AlertmanagerAction.DecryptSecrets]: toAbility(\n isGrafanaFlavoredAlertmanager,\n notificationsPermissions.provisioning.readSecrets\n ),\n [AlertmanagerAction.ViewAutogeneratedPolicyTree]: [isGrafanaFlavoredAlertmanager, isAdmin()],\n // -- silences --\n // for now, all supported Alertmanager flavors have API endpoints for managing silences\n [AlertmanagerAction.CreateSilence]: toAbility(AlwaysSupported, instancePermissions.create),\n [AlertmanagerAction.ViewSilence]: toAbility(AlwaysSupported, instancePermissions.read),\n [AlertmanagerAction.UpdateSilence]: toAbility(AlwaysSupported, instancePermissions.update),\n [AlertmanagerAction.PreviewSilencedInstances]: toAbility(AlwaysSupported, instancePermissions.read),\n // -- time intervals --\n [AlertmanagerAction.CreateTimeInterval]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.create,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_TIME_INTERVALS_MODIFY : [])\n ),\n [AlertmanagerAction.ViewTimeInterval]: toAbility(\n AlwaysSupported,\n notificationsPermissions.read,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_TIME_INTERVALS_READ : [])\n ),\n [AlertmanagerAction.UpdateTimeInterval]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.update,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_TIME_INTERVALS_MODIFY : [])\n ),\n [AlertmanagerAction.DeleteTimeInterval]: toAbility(\n hasConfigurationAPI,\n notificationsPermissions.delete,\n ...(isGrafanaFlavoredAlertmanager ? PERMISSIONS_TIME_INTERVALS_MODIFY : [])\n ),\n [AlertmanagerAction.ExportTimeIntervals]: toAbility(isGrafanaFlavoredAlertmanager, notificationsPermissions.read),\n [AlertmanagerAction.ViewAlertGroups]: toAbility(AlwaysSupported, instancePermissions.read),\n };\n\n return abilities;\n}\n\nexport function useAlertmanagerAbility(action: AlertmanagerAction): Ability {\n const abilities = useAllAlertmanagerAbilities();\n\n return useMemo(() => {\n return abilities[action];\n }, [abilities, action]);\n}\n\nexport function useAlertmanagerAbilities(actions: AlertmanagerAction[]): Ability[] {\n const abilities = useAllAlertmanagerAbilities();\n\n return useMemo(() => {\n return actions.map((action) => abilities[action]);\n }, [abilities, actions]);\n}\n\nconst { useGetGrafanaAlertingConfigurationStatusQuery } = alertmanagerApi;\n/**\n * We don't want to show the silence button if either\n * 1. the user has no permissions to create silences\n * 2. the admin has configured to only send instances to external AMs\n */\nfunction useCanSilence(rule?: RulerRuleDTO): [boolean, boolean] {\n const folderUID = rulerRuleType.grafana.rule(rule) ? rule.grafana_alert.namespace_uid : undefined;\n const { loading: folderIsLoading, folder } = useFolder(folderUID);\n\n const isGrafanaManagedRule = rule && rulerRuleType.grafana.rule(rule);\n const isGrafanaRecording = rulerRuleType.grafana.recordingRule(rule);\n\n const silenceSupported = useGrafanaRulesSilenceSupport();\n const canSilenceInFolder = useCanSilenceInFolder(folderUID);\n\n if (!rule) {\n return [false, false];\n }\n\n // we don't support silencing when the rule is not a Grafana managed alerting rule\n // we simply don't know what Alertmanager the ruler is sending alerts to\n if (!isGrafanaManagedRule || isGrafanaRecording || folderIsLoading || !folder) {\n return [false, false];\n }\n\n return [silenceSupported, canSilenceInFolder];\n}\n\nfunction useCanSilenceInFolder(folderUID?: string) {\n const folderPermissions = useFolderPermissions(folderUID);\n\n const hasFolderSilencePermission = folderPermissions[AccessControlAction.AlertingSilenceCreate] ?? false;\n const hasGlobalSilencePermission = ctx.hasPermission(AccessControlAction.AlertingInstanceCreate);\n\n // User is permitted to silence if they either have the \"global\" permissions of \"AlertingInstanceCreate\",\n // or the folder specific access control of \"AlertingSilenceCreate\"\n const allowedToSilence = hasGlobalSilencePermission || hasFolderSilencePermission;\n return allowedToSilence;\n}\n\nfunction useGrafanaRulesSilenceSupport() {\n const { currentData: amConfigStatus, isLoading } = useGetGrafanaAlertingConfigurationStatusQuery(undefined);\n\n const interactsOnlyWithExternalAMs = amConfigStatus?.alertmanagersChoice === AlertmanagerChoice.External;\n const interactsWithAll = amConfigStatus?.alertmanagersChoice === AlertmanagerChoice.All;\n const silenceSupported = !interactsOnlyWithExternalAMs || interactsWithAll;\n\n return isLoading ? false : silenceSupported;\n}\n\nfunction useFolderPermissions(folderUID?: string): Record<string, boolean> {\n const { folder } = useFolder(folderUID);\n return folder?.accessControl ?? {};\n}\n\n// just a convenient function\nconst toAbility = (\n supported: boolean,\n /** If user has any of these permissions, then they are allowed to perform the action */\n ...actions: AccessControlAction[]\n): Ability => [supported, actions.some((action) => action && ctx.hasPermission(action))];\n","import { css, cx } from '@emotion/css';\nimport { HTMLProps } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { Legend } from './Legend';\n\nexport interface Props extends Omit<HTMLProps<HTMLFieldSetElement>, 'label'> {\n children: React.ReactNode[] | React.ReactNode;\n /** Label for the fieldset's legend */\n label?: React.ReactNode;\n}\n\n/**\n * Component used to group form elements inside a form, equivalent to HTML's [fieldset](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset) tag. Accepts optional label, which, if provided, is used as a text for the set's legend.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-fieldset--docs\n */\nexport const FieldSet = ({ label, children, className, ...rest }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <fieldset className={cx(styles.wrapper, className)} {...rest}>\n {label && <Legend>{label}</Legend>}\n {children}\n </fieldset>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n marginBottom: theme.spacing(4),\n\n '&:last-child': {\n marginBottom: 0,\n },\n }),\n});\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as ui from '@grafana/schema';\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones {\n /**\n * Controls value alignment on the timelines\n */\n alignValue?: ui.TimelineValueAlignment;\n /**\n * Merge equal consecutive values\n */\n mergeValues?: boolean;\n /**\n * Enables pagination when > 0\n */\n perPage?: number;\n /**\n * Controls the row height\n */\n rowHeight: number;\n /**\n * Show timeline values on chart\n */\n showValue: ui.VisibilityMode;\n}\n\nexport const defaultOptions: Partial<Options> = {\n alignValue: 'left',\n mergeValues: true,\n perPage: 20,\n rowHeight: 0.9,\n showValue: ui.VisibilityMode.Auto,\n};\n\nexport interface FieldConfig extends ui.AxisConfig, ui.HideableFieldConfig {\n fillOpacity?: number;\n lineWidth?: number;\n}\n\nexport const defaultFieldConfig: Partial<FieldConfig> = {\n fillOpacity: 70,\n lineWidth: 0,\n};\n","import { config } from '@grafana/runtime';\n\nconst cloudwatchPlugin = async () =>\n await import(/* webpackChunkName: \"cloudwatchPlugin\" */ 'app/plugins/datasource/cloudwatch/module');\nconst dashboardDSPlugin = async () =>\n await import(/* webpackChunkName \"dashboardDSPlugin\" */ 'app/plugins/datasource/dashboard/module');\nconst elasticsearchPlugin = async () =>\n await import(/* webpackChunkName: \"elasticsearchPlugin\" */ 'app/plugins/datasource/elasticsearch/module');\nconst opentsdbPlugin = async () =>\n await import(/* webpackChunkName: \"opentsdbPlugin\" */ 'app/plugins/datasource/opentsdb/module');\nconst grafanaPlugin = async () =>\n await import(/* webpackChunkName: \"grafanaPlugin\" */ 'app/plugins/datasource/grafana/module');\nconst influxdbPlugin = async () =>\n await import(/* webpackChunkName: \"influxdbPlugin\" */ 'app/plugins/datasource/influxdb/module');\nconst mixedPlugin = async () =>\n await import(/* webpackChunkName: \"mixedPlugin\" */ 'app/plugins/datasource/mixed/module');\nconst prometheusPlugin = async () =>\n await import(/* webpackChunkName: \"prometheusPlugin\" */ 'app/plugins/datasource/prometheus/module');\nconst alertmanagerPlugin = async () =>\n await import(/* webpackChunkName: \"alertmanagerPlugin\" */ 'app/plugins/datasource/alertmanager/module');\n\n// Async loaded panels\nconst alertListPanel = async () =>\n await import(/* webpackChunkName: \"alertListPanel\" */ 'app/plugins/panel/alertlist/module');\nconst annoListPanel = async () =>\n await import(/* webpackChunkName: \"annoListPanel\" */ 'app/plugins/panel/annolist/module');\nconst barChartPanel = async () =>\n await import(/* webpackChunkName: \"barChartPanel\" */ 'app/plugins/panel/barchart/module');\nconst barGaugePanel = async () =>\n await import(/* webpackChunkName: \"barGaugePanel\" */ 'app/plugins/panel/bargauge/module');\nconst candlestickPanel = async () =>\n await import(/* webpackChunkName: \"candlestickPanel\" */ 'app/plugins/panel/candlestick/module');\nconst dashListPanel = async () =>\n await import(/* webpackChunkName: \"dashListPanel\" */ 'app/plugins/panel/dashlist/module');\nconst dataGridPanel = async () =>\n await import(/* webpackChunkName: \"dataGridPanel\" */ 'app/plugins/panel/datagrid/module');\nconst debugPanel = async () => await import(/* webpackChunkName: \"debugPanel\" */ 'app/plugins/panel/debug/module');\nconst flamegraphPanel = async () =>\n await import(/* webpackChunkName: \"flamegraphPanel\" */ 'app/plugins/panel/flamegraph/module');\nconst gaugePanel = async () => await import(/* webpackChunkName: \"gaugePanel\" */ 'app/plugins/panel/gauge/module');\nconst gettingStartedPanel = async () =>\n await import(/* webpackChunkName: \"gettingStartedPanel\" */ 'app/plugins/panel/gettingstarted/module');\nconst histogramPanel = async () =>\n await import(/* webpackChunkName: \"histogramPanel\" */ 'app/plugins/panel/histogram/module');\nconst livePanel = async () => await import(/* webpackChunkName: \"livePanel\" */ 'app/plugins/panel/live/module');\nconst logsPanel = async () => await import(/* webpackChunkName: \"logsPanel\" */ 'app/plugins/panel/logs/module');\nconst newsPanel = async () => await import(/* webpackChunkName: \"newsPanel\" */ 'app/plugins/panel/news/module');\nconst pieChartPanel = async () =>\n await import(/* webpackChunkName: \"pieChartPanel\" */ 'app/plugins/panel/piechart/module');\nconst statPanel = async () => await import(/* webpackChunkName: \"statPanel\" */ 'app/plugins/panel/stat/module');\nconst stateTimelinePanel = async () =>\n await import(/* webpackChunkName: \"stateTimelinePanel\" */ 'app/plugins/panel/state-timeline/module');\nconst statusHistoryPanel = async () =>\n await import(/* webpackChunkName: \"statusHistoryPanel\" */ 'app/plugins/panel/status-history/module');\nconst tablePanel = async () => await import(/* webpackChunkName: \"tablePanel\" */ 'app/plugins/panel/table/module');\nconst textPanel = async () => await import(/* webpackChunkName: \"textPanel\" */ 'app/plugins/panel/text/module');\nconst timeseriesPanel = async () =>\n await import(/* webpackChunkName: \"timeseriesPanel\" */ 'app/plugins/panel/timeseries/module');\nconst tracesPanel = async () => await import(/* webpackChunkName: \"tracesPanel\" */ 'app/plugins/panel/traces/module');\nconst trendPanel = async () => await import(/* webpackChunkName: \"trendPanel\" */ 'app/plugins/panel/trend/module');\nconst welcomeBanner = async () =>\n await import(/* webpackChunkName: \"welcomeBanner\" */ 'app/plugins/panel/welcome/module');\n\nconst geomapPanel = async () => await import(/* webpackChunkName: \"geomapPanel\" */ 'app/plugins/panel/geomap/module');\nconst canvasPanel = async () => await import(/* webpackChunkName: \"canvasPanel\" */ 'app/plugins/panel/canvas/module');\nconst xychartPanel = async () => await import(/* webpackChunkName: \"xychart\" */ 'app/plugins/panel/xychart/module');\nconst heatmapPanel = async () =>\n await import(/* webpackChunkName: \"heatmapPanel\" */ 'app/plugins/panel/heatmap/module');\n\nconst nodeGraph = async () =>\n await import(/* webpackChunkName: \"nodeGraphPanel\" */ 'app/plugins/panel/nodeGraph/module');\n\nconst radialBar = async () =>\n await import(/* webpackChunkName: \"radialBarPanel\" */ 'app/plugins/panel/radialbar/module');\n\nconst builtInPlugins: Record<string, System.Module | (() => Promise<System.Module>)> = {\n // datasources\n 'core:plugin/cloudwatch': cloudwatchPlugin,\n 'core:plugin/dashboard': dashboardDSPlugin,\n 'core:plugin/elasticsearch': elasticsearchPlugin,\n 'core:plugin/opentsdb': opentsdbPlugin,\n 'core:plugin/grafana': grafanaPlugin,\n 'core:plugin/influxdb': influxdbPlugin,\n 'core:plugin/mixed': mixedPlugin,\n 'core:plugin/prometheus': prometheusPlugin,\n 'core:plugin/alertmanager': alertmanagerPlugin,\n // panels\n 'core:plugin/text': textPanel,\n 'core:plugin/timeseries': timeseriesPanel,\n 'core:plugin/trend': trendPanel,\n 'core:plugin/state-timeline': stateTimelinePanel,\n 'core:plugin/status-history': statusHistoryPanel,\n 'core:plugin/candlestick': candlestickPanel,\n 'core:plugin/xychart': xychartPanel,\n 'core:plugin/geomap': geomapPanel,\n 'core:plugin/canvas': canvasPanel,\n 'core:plugin/dashlist': dashListPanel,\n 'core:plugin/alertlist': alertListPanel,\n 'core:plugin/annolist': annoListPanel,\n 'core:plugin/heatmap': heatmapPanel,\n 'core:plugin/table': tablePanel,\n 'core:plugin/news': newsPanel,\n 'core:plugin/live': livePanel,\n 'core:plugin/stat': statPanel,\n 'core:plugin/datagrid': dataGridPanel,\n 'core:plugin/debug': debugPanel,\n 'core:plugin/flamegraph': flamegraphPanel,\n 'core:plugin/gettingstarted': gettingStartedPanel,\n 'core:plugin/gauge': config.featureToggles.newGauge ? radialBar : gaugePanel,\n 'core:plugin/piechart': pieChartPanel,\n 'core:plugin/bargauge': barGaugePanel,\n 'core:plugin/barchart': barChartPanel,\n 'core:plugin/logs': logsPanel,\n 'core:plugin/traces': tracesPanel,\n 'core:plugin/welcome': welcomeBanner,\n 'core:plugin/nodeGraph': nodeGraph,\n 'core:plugin/histogram': histogramPanel,\n 'core:plugin/radialbar': radialBar,\n};\n\nexport default builtInPlugins;\n","import { PluginType, patchArrayVectorProrotypeMethods } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { transformPluginSourceForCDN } from '../cdn/utils';\nimport { resolvePluginUrlWithCache } from '../loader/pluginInfoCache';\nimport { isHostedOnCDN, resolveModulePath } from '../loader/utils';\n\nimport { SandboxEnvironment, SandboxPluginMeta } from './types';\n\nfunction isSameDomainAsHost(url: string): boolean {\n const locationUrl = new URL(window.location.href);\n const paramUrl = new URL(url);\n return locationUrl.host === paramUrl.host;\n}\n\nexport async function loadScriptIntoSandbox(url: string, sandboxEnv: SandboxEnvironment) {\n let scriptCode = '';\n\n // same-domain\n if (isSameDomainAsHost(url)) {\n const response = await fetch(url);\n scriptCode = await response.text();\n //even though this is not loaded via a CDN we need to transform the sourceMapUrl\n scriptCode = transformPluginSourceForCDN({\n url,\n source: scriptCode,\n transformSourceMapURL: true,\n transformAssets: false,\n });\n // cdn loaded\n } else if (isHostedOnCDN(url)) {\n const response = await fetch(url);\n scriptCode = await response.text();\n scriptCode = transformPluginSourceForCDN({\n url,\n source: scriptCode,\n transformSourceMapURL: true,\n transformAssets: true,\n });\n }\n\n if (scriptCode.length === 0) {\n throw new Error('Only same domain scripts are allowed in sandboxed plugins');\n }\n\n scriptCode = patchPluginAPIs(scriptCode);\n sandboxEnv.evaluate(scriptCode);\n}\n\nexport async function getPluginCode(meta: SandboxPluginMeta): Promise<string> {\n if (isHostedOnCDN(meta.module)) {\n // Load plugin from CDN, no need for \"resolvePluginUrlWithCache\" as CDN URLs already include the version\n const url = meta.module;\n const response = await fetch(url);\n\n let pluginCode = await response.text();\n if (!verifySRI(pluginCode, meta.moduleHash)) {\n throw new Error('Invalid SRI for plugin module file');\n }\n\n pluginCode = transformPluginSourceForCDN({\n url,\n source: pluginCode,\n transformSourceMapURL: true,\n transformAssets: true,\n });\n return pluginCode;\n } else {\n let modulePath = resolveModulePath(meta.module);\n // resolvePluginUrlWithCache will append a query parameter with its version\n // to ensure correct cached version is served for local plugins\n const pluginCodeUrl = resolvePluginUrlWithCache(modulePath);\n const response = await fetch(pluginCodeUrl);\n\n let pluginCode = await response.text();\n if (!verifySRI(pluginCode, meta.moduleHash)) {\n throw new Error('Invalid SRI for plugin module file');\n }\n\n pluginCode = transformPluginSourceForCDN({\n url: pluginCodeUrl,\n source: pluginCode,\n transformSourceMapURL: true,\n transformAssets: false,\n });\n pluginCode = patchPluginAPIs(pluginCode);\n return pluginCode;\n }\n}\n\nasync function verifySRI(pluginCode: string, moduleHash?: string): Promise<boolean> {\n if (!config.featureToggles.pluginsSriChecks) {\n return true;\n }\n\n if (!moduleHash || moduleHash.length === 0) {\n return true;\n }\n\n const [algorithm, _] = moduleHash.split('-');\n const cleanAlgorithm = algorithm.replace('sha', 'SHA-');\n\n const encoder = new TextEncoder();\n const data = encoder.encode(pluginCode);\n\n const digest = await crypto.subtle.digest(cleanAlgorithm, data);\n const actualHash = btoa(String.fromCharCode(...new Uint8Array(digest)));\n\n return `${algorithm}-${actualHash}` === moduleHash;\n}\n\nfunction patchPluginAPIs(pluginCode: string): string {\n return pluginCode.replace(/window\\.location/gi, 'window.locationSandbox');\n}\n\nexport function patchSandboxEnvironmentPrototype(sandboxEnvironment: SandboxEnvironment) {\n // same as https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/types/vector.ts#L16\n // Array is a \"reflective\" type in Near-membrane and doesn't get an identify continuity\n sandboxEnvironment.evaluate(\n `${patchArrayVectorProrotypeMethods.toString()};${patchArrayVectorProrotypeMethods.name}()`\n );\n}\n\nexport function getPluginLoadData(pluginId: string): SandboxPluginMeta {\n // find it in datasources\n for (const datasource of Object.values(config.datasources)) {\n if (datasource.type === pluginId) {\n return datasource.meta;\n }\n }\n\n //find it in panels\n for (const panel of Object.values(config.panels)) {\n if (panel.id === pluginId) {\n return panel;\n }\n }\n\n //find it in apps\n //the information inside the apps object is more limited\n for (const app of Object.values(config.apps)) {\n if (app.id === pluginId) {\n return {\n id: pluginId,\n type: PluginType.app,\n module: app.path,\n moduleHash: app.moduleHash,\n };\n }\n }\n\n throw new Error(`Could not find plugin ${pluginId}`);\n}\n","export const forbiddenElements = ['iframe'];\n","import { isNearMembraneProxy } from '@locker/near-membrane-shared';\nimport { cloneDeep } from 'lodash';\nimport * as React from 'react';\n\nimport { LogContext } from '@grafana/faro-web-sdk';\nimport { createMonitoringLogger } from '@grafana/runtime';\n\nimport { SandboxedPluginObject } from './types';\n\nexport function isSandboxedPluginObject(value: unknown): value is SandboxedPluginObject {\n return !!value && typeof value === 'object' && value?.hasOwnProperty('plugin');\n}\n\nexport function assertNever(x: never): never {\n throw new Error(`Unexpected object: ${x}. This should never happen.`);\n}\n\nconst sandboxLogger = createMonitoringLogger('sandbox');\n\nexport function isReactClassComponent(obj: unknown): obj is React.Component {\n return obj instanceof React.Component;\n}\n\nexport function logWarning(message: string, context?: LogContext) {\n sandboxLogger.logWarning(message, context);\n}\n\nexport function logError(error: Error, context?: LogContext) {\n sandboxLogger.logError(error, context);\n}\n\nexport function logInfo(message: string, context?: LogContext) {\n sandboxLogger.logInfo(message, context);\n}\n\nfunction isRegex(value: unknown): value is RegExp {\n return value?.constructor?.name === 'RegExp';\n}\n\n/**\n * Near membrane regex proxy objects behave just exactly the same as regular RegExp objects\n * with only one difference: they are not `instanceof RegExp`.\n * This function takes a structure and makes sure any regex that is a nearmembraneproxy\n * and returns the same regex but in the bluerealm\n */\nexport function unboxRegexesFromMembraneProxy(structure: unknown): unknown {\n if (!structure) {\n return structure;\n }\n\n // Proxy regexes loook and behave like proxies but they\n // are not instanceof RegExp\n if (isRegex(structure) && isNearMembraneProxy(structure)) {\n return new RegExp(structure);\n }\n\n if (Array.isArray(structure)) {\n return structure.map(unboxRegexesFromMembraneProxy);\n }\n if (typeof structure === 'object') {\n return Object.keys(structure).reduce((acc, key) => {\n Reflect.set(acc, key, unboxRegexesFromMembraneProxy(Reflect.get(structure, key)));\n return acc;\n }, {});\n }\n return structure;\n}\n\nexport function unboxNearMembraneProxies(structure: unknown): unknown {\n if (!structure) {\n return structure;\n }\n\n if (isNearMembraneProxy(structure)) {\n return cloneDeep(structure);\n }\n\n if (Array.isArray(structure)) {\n return structure.map(unboxNearMembraneProxies);\n }\n if (typeof structure === 'object') {\n return Object.keys(structure).reduce((acc, key) => {\n Reflect.set(acc, key, unboxNearMembraneProxies(Reflect.get(structure, key)));\n return acc;\n }, {});\n }\n return structure;\n}\n","import { isNearMembraneProxy, ProxyTarget } from '@locker/near-membrane-shared';\nimport { cloneDeep } from 'lodash';\nimport Prism from 'prismjs';\n\nimport { CustomVariableSupport, DataSourceApi } from '@grafana/data';\n\nimport { forbiddenElements } from './constants';\nimport { isReactClassComponent, logWarning, unboxNearMembraneProxies } from './utils';\n\n// IMPORTANT: NEVER export this symbol from a public (e.g `@grafana/*`) package\nconst SANDBOX_LIVE_VALUE = Symbol.for('@@SANDBOX_LIVE_VALUE');\n\nexport function getSafeSandboxDomElement(element: Element, pluginId: string): Element {\n const nodeName = Reflect.get(element, 'nodeName');\n\n // the condition redundancy is intentional\n if (nodeName === 'body' || element === document.body) {\n return document.body;\n }\n\n // allow access to the head\n // the condition redundancy is intentional\n if (nodeName === 'head' || element === document.head) {\n return element;\n }\n\n // allow access to the HTML element\n if (element === document.documentElement) {\n return element;\n }\n\n if (forbiddenElements.includes(nodeName)) {\n logWarning('<' + nodeName + '> is not allowed in sandboxed plugins', {\n pluginId,\n param: nodeName,\n });\n\n throw new Error('<' + nodeName + '> is not allowed in sandboxed plugins');\n }\n\n // allow elements inside the sandbox or the sandbox body\n if (isDomElementInsideSandbox(element, pluginId)) {\n return element;\n }\n\n if (element.parentNode === document.body || element.closest('#reactRoot') === null) {\n return element;\n }\n\n // any other element gets a mock\n const mockElement = document.createElement(nodeName);\n mockElement.dataset.grafanaPluginSandboxElement = 'true';\n // we are not logging this because a high number of warnings can be generated\n return mockElement;\n}\n\nexport function isDomElement(obj: unknown): obj is Element {\n if (typeof obj === 'object' && obj instanceof Element) {\n try {\n return obj.nodeName !== undefined;\n } catch (e) {\n return false;\n }\n }\n return false;\n}\n\n/**\n * Mark an element style attribute as a live target inside the sandbox\n * A \"live target\" is an object which attributes can be observed\n * and modified directly inside the sandbox\n *\n * This is necessary for plugins working with style attributes to work in Chrome\n */\nexport function markDomElementStyleAsALiveTarget(el: Element) {\n const style = Reflect.get(el, 'style');\n if (!Object.hasOwn(style, SANDBOX_LIVE_VALUE)) {\n Reflect.defineProperty(style, SANDBOX_LIVE_VALUE, {});\n }\n}\n\nexport function recursivePatchObjectAsLiveTarget(obj: unknown) {\n if (!obj) {\n return;\n }\n if (Array.isArray(obj)) {\n obj.forEach(recursivePatchObjectAsLiveTarget);\n unconditionallyPatchObjectAsLiveTarget(obj);\n } else if (typeof obj === 'object') {\n Object.values(obj).forEach(recursivePatchObjectAsLiveTarget);\n unconditionallyPatchObjectAsLiveTarget(obj);\n }\n}\n\nfunction unconditionallyPatchObjectAsLiveTarget(obj: unknown) {\n if (!obj) {\n return;\n }\n // do not patch it twice\n if (Object.hasOwn(obj, SANDBOX_LIVE_VALUE)) {\n return obj;\n }\n\n Reflect.defineProperty(obj, SANDBOX_LIVE_VALUE, {});\n return obj;\n}\n\n/**\n * Some specific near membrane proxies interfere with plugins\n * an example of this is React class components state and their fast life cycles\n * with cached objects.\n *\n * This function marks an object as a live target inside the sandbox\n * but not all objects, only the ones that are allowed to be modified\n */\nexport function patchObjectAsLiveTarget(obj: unknown) {\n if (!obj) {\n return;\n }\n\n // do not patch it twice\n if (Object.hasOwn(obj, SANDBOX_LIVE_VALUE)) {\n return;\n }\n\n if (\n // only for proxies\n isNearMembraneProxy(obj) &&\n // do not patch functions\n !(obj instanceof Function) &&\n // conditions for allowed objects\n // react class components\n (isReactClassComponent(obj) || obj instanceof DataSourceApi || obj instanceof CustomVariableSupport)\n ) {\n Reflect.defineProperty(obj, SANDBOX_LIVE_VALUE, {});\n } else {\n // prismjs languages are defined by directly modifying the prism.languages objects.\n // Plugins inside the sandbox can't modify objects from the blue realm and prismjs.languages\n // is one of them.\n // Marking it as a live target allows plugins inside the sandbox to modify the object directly\n // and make syntax work again.\n if (obj === Prism.languages) {\n Object.defineProperty(obj, SANDBOX_LIVE_VALUE, {});\n }\n }\n}\n\nexport function isLiveTarget(el: ProxyTarget) {\n return Object.hasOwn(el, SANDBOX_LIVE_VALUE);\n}\n\n/*\n * An element is considered to be inside the sandbox if:\n * - is not part of the document (detached)\n * - is inside a div[data-plugin-sandbox]\n *\n */\nexport function isDomElementInsideSandbox(el: Element, pluginId: string): boolean {\n return !document.contains(el) || el.closest(`[data-plugin-sandbox=${pluginId}]`) !== null;\n}\n\nlet sandboxBody: HTMLDivElement;\n\nexport function getSandboxMockBody(): Element {\n if (!sandboxBody) {\n sandboxBody = document.createElement('div');\n sandboxBody.setAttribute('id', 'grafana-plugin-sandbox-body');\n\n // the following dataset redundancy is intentional\n sandboxBody.setAttribute('data-plugin-sandbox', 'true');\n sandboxBody.dataset.pluginSandbox = 'sandboxed-plugin';\n\n sandboxBody.style.width = '100%';\n sandboxBody.style.height = '0%';\n sandboxBody.style.overflow = 'hidden';\n sandboxBody.style.top = '0';\n sandboxBody.style.left = '0';\n document.body.appendChild(sandboxBody);\n }\n return sandboxBody;\n}\n\nlet nativeAPIsPatched = false;\n\nexport function patchWebAPIs() {\n if (!nativeAPIsPatched) {\n nativeAPIsPatched = true;\n patchHistoryReplaceState();\n patchWorkerPostMessage();\n }\n}\n\n/*\n *\n * Worker.postMessage uses internally structureClone which won't work with proxies.\n *\n * In case where the blue realm code is directly handling proxy objects that\n * should be send over a post message the blue realm will call postMessage and try to\n * send the proxy resulting in an error.\n *\n * This makes sure all proxies are unboxed before being sent over the post message\n */\nfunction patchWorkerPostMessage() {\n const originalPostMessage = Worker.prototype.postMessage;\n Object.defineProperty(Worker.prototype, 'postMessage', {\n value: function (...args: Parameters<typeof Worker.prototype.postMessage>) {\n // eslint-disable-next-line\n return originalPostMessage.apply(this, unboxNearMembraneProxies(args) as typeof args);\n },\n });\n}\n\n/*\n * window.history.replaceState is a native API that won't work with proxies\n * so we need to patch it to unwrap any possible proxies you pass to it.\n *\n * Why can't we directly distord window.history.replaceState calls inside plugins?\n *\n * We can. Except that plugins don't call window.history.replaceState directly they\n * instead use the history object from react-router.\n *\n * react-router is a runtime dependency and it is executed in the blue realm\n * and calls window.history.replaceState directly where the sandbox is not involved at all\n *\n * It is most likely this \"original\" function is not really the native function because\n * `useLocation` from `react-use` patches this function before the sandbox kicks in.\n *\n * Regarding the performance impact of this cloneDeep. The structures passed to history.replaceState\n * are minimalistic and its impact will be neglegible.\n */\nfunction patchHistoryReplaceState() {\n const original = window.history.replaceState;\n Object.defineProperty(window.history, 'replaceState', {\n value: function (...args: Parameters<typeof window.history.replaceState>) {\n let newArgs = args;\n try {\n newArgs = cloneDeep(args);\n } catch (e) {\n logWarning('Error cloning args in window.history.replaceState', {\n error: String(e),\n });\n }\n return Reflect.apply(original, this, newArgs);\n },\n writable: true,\n configurable: true,\n enumerable: false,\n });\n}\n","import { ProxyTarget } from '@locker/near-membrane-shared';\nimport DOMPurify from 'dompurify';\nimport { cloneDeep, isFunction } from 'lodash';\n\nimport { Monaco } from '@grafana/ui';\n\nimport { loadScriptIntoSandbox } from './codeLoader';\nimport { forbiddenElements } from './constants';\nimport { recursivePatchObjectAsLiveTarget } from './documentSandbox';\nimport { SandboxEnvironment, SandboxPluginMeta } from './types';\nimport { logWarning, unboxRegexesFromMembraneProxy } from './utils';\n\n/**\n * Distortions are near-membrane mechanisms to altert JS instrics and DOM APIs.\n *\n * Everytime a plugin tries to use a js instricis (e.g. Array.concat) or a DOM API (e.g. document.createElement)\n * or access any of its attributes a distortion callback is used.\n *\n * The distortion callback has a single parameter which is usually the \"native\" function responsible\n * for the API, but generally speaking is the value that the plugin would normally get. Note that here by\n * \"value\" we mean the function the plugin would execute, not the value from executing the function.\n *\n * To compare the native code passed to the distortion callback and know if should we distorted or not we need\n * to get the object descriptors of these native functions using Object.getOwnPropertyDescriptors.\n *\n * For example:\n *\n * If the distortionCallback is asking for a distortion for the `Array.concat` function\n * one will see `ƒ concat() { [native code] }` as the parameter to the distortion callback.\n *\n * Inside the callback we could compare this with the descriptor value:\n *\n * ```\n * function distortionCallback(valueToDistort: unknown){\n * const descriptor = Object.getOwnPropertyDescriptors(Array.prototype, 'concat')\n * if (descriptor.value === valueToDistort) {\n * // distorted replacement function\n * return ArrayConcatReplacementFunction;\n * }\n * // original\n * return valueToDistort;\n * }\n * ```\n *\n * To avoid the verbosity of the previous code as more and more distortions are applied it is easier to use\n * a Map. Map keys can be objects (including native functions).\n *\n * This allows to simplify the previous code:\n *\n * ```\n * function distortionCallback(valueToDistort: unknown){\n * if (generalDistortionMap.has(valueToDistort)) {\n * // Map does the comparison easier\n * return generalDistortionMap.get(valueToDistort);\n * }\n * // original\n * return valueToDistort;\n * }\n * ```\n *\n * The code in this file defines that generalDistortionMap.\n */\n\ntype DistortionMap = Map<\n unknown,\n (originalAttrOrMethod: unknown, pluginMeta: SandboxPluginMeta, sandboxEnv?: SandboxEnvironment) => unknown\n>;\nconst generalDistortionMap: DistortionMap = new Map();\n\nconst SANDBOX_LIVE_API_PATCHED = Symbol.for('@SANDBOX_LIVE_API_PATCHED');\n\nexport function getGeneralSandboxDistortionMap() {\n if (generalDistortionMap.size === 0) {\n // initialize the distortion map\n distortIframeAttributes(generalDistortionMap);\n distortConsole(generalDistortionMap);\n distortAlert(generalDistortionMap);\n distortAppend(generalDistortionMap);\n distortInsert(generalDistortionMap);\n distortInnerHTML(generalDistortionMap);\n distortCreateElement(generalDistortionMap);\n distortWorkers(generalDistortionMap);\n distortDocument(generalDistortionMap);\n distortMonacoEditor(generalDistortionMap);\n distortPostMessage(generalDistortionMap);\n distortLodash(generalDistortionMap);\n }\n return generalDistortionMap;\n}\n\nfunction failToSet(originalAttrOrMethod: unknown, meta: SandboxPluginMeta) {\n logWarning(`Plugin ${meta.id} tried to set a sandboxed property`, {\n pluginId: meta.id,\n attrOrMethod: String(originalAttrOrMethod),\n entity: 'window',\n });\n return () => {\n throw new Error('Plugins are not allowed to set sandboxed properties');\n };\n}\n\n// sets distortion to protect iframe elements\nfunction distortIframeAttributes(distortions: DistortionMap) {\n const iframeHtmlForbiddenProperties = ['contentDocument', 'contentWindow', 'src', 'srcdoc', 'srcObject', 'srcset'];\n\n for (const property of iframeHtmlForbiddenProperties) {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, property);\n if (descriptor) {\n function fail(originalAttrOrMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n logWarning(`Plugin ${pluginId} tried to access iframe.${property}`, {\n pluginId,\n attrOrMethod: property,\n entity: 'iframe',\n });\n\n return () => {\n throw new Error('iframe.' + property + ' is not allowed in sandboxed plugins');\n };\n }\n\n if (descriptor.value) {\n distortions.set(descriptor.value, fail);\n }\n if (descriptor.set) {\n distortions.set(descriptor.set, fail);\n }\n if (descriptor.get) {\n distortions.set(descriptor.get, fail);\n }\n }\n }\n}\n\n// set distortions to always prefix any usage of console\nfunction distortConsole(distortions: DistortionMap) {\n const descriptor = Object.getOwnPropertyDescriptor(window, 'console');\n if (descriptor?.value) {\n function getSandboxConsole(originalAttrOrMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n\n function sandboxLog(...args: unknown[]) {\n console.log(`[plugin ${pluginId}]`, ...args);\n }\n return {\n log: sandboxLog,\n warn: sandboxLog,\n error: sandboxLog,\n info: sandboxLog,\n debug: sandboxLog,\n table: sandboxLog,\n };\n }\n\n distortions.set(descriptor.value, getSandboxConsole);\n }\n if (descriptor?.set) {\n distortions.set(descriptor.set, failToSet);\n }\n}\n\n// set distortions to alert to always output to the console\nfunction distortAlert(distortions: DistortionMap) {\n function getAlertDistortion(originalAttrOrMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n logWarning(`Plugin ${pluginId} accessed window.alert`, {\n pluginId,\n attrOrMethod: 'alert',\n entity: 'window',\n });\n\n return function (...args: unknown[]) {\n console.log(`[plugin ${pluginId}]`, ...args);\n };\n }\n const descriptor = Object.getOwnPropertyDescriptor(window, 'alert');\n if (descriptor?.value) {\n distortions.set(descriptor.value, getAlertDistortion);\n }\n if (descriptor?.set) {\n distortions.set(descriptor.set, failToSet);\n }\n}\n\nfunction distortInnerHTML(distortions: DistortionMap) {\n function getInnerHTMLDistortion(originalMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n return function innerHTMLDistortion(this: HTMLElement, ...args: string[]) {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n // NOTE: DOMPurify anti-tamper mechanism requires us to clone the string\n // calling any method whatsoever on a string will cause the string to be tampered\n // and DOMPurify will return empty strings\n const lowerCase = String(arg || '').toLowerCase();\n for (const forbiddenElement of forbiddenElements) {\n if (lowerCase.includes('<' + forbiddenElement)) {\n logWarning(`Plugin ${pluginId} tried to set ${forbiddenElement} in innerHTML`, {\n pluginId,\n attrOrMethod: 'innerHTML',\n param: forbiddenElement,\n entity: 'HTMLElement',\n });\n\n throw new Error('<' + forbiddenElement + '> is not allowed in sandboxed plugins');\n }\n }\n // prevent some dom operations that use direct callbacks\n if (lowerCase.match(/onerror|onload|onsuccess|onbeforeunload/)) {\n logWarning(`Plugin ${pluginId} tried to set forbidden attribute in innerHTML`, {\n pluginId,\n attrOrMethod: 'innerHTML',\n param: arg,\n entity: 'HTMLElement',\n });\n args[i] = DOMPurify.sanitize(args[i]);\n }\n }\n\n if (isFunction(originalMethod)) {\n return originalMethod.apply(this, args);\n }\n };\n }\n const descriptors = [\n Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML'),\n Object.getOwnPropertyDescriptor(Element.prototype, 'outerHTML'),\n Object.getOwnPropertyDescriptor(Element.prototype, 'insertAdjacentHTML'),\n Object.getOwnPropertyDescriptor(DOMParser.prototype, 'parseFromString'),\n ];\n\n for (const descriptor of descriptors) {\n if (descriptor?.set) {\n distortions.set(descriptor.set, getInnerHTMLDistortion);\n }\n if (descriptor?.value) {\n distortions.set(descriptor.value, getInnerHTMLDistortion);\n }\n }\n}\n\nfunction distortCreateElement(distortions: DistortionMap) {\n function getCreateElementDistortion(originalMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n return function createElementDistortion(this: HTMLElement, arg?: string, options?: unknown) {\n if (arg && forbiddenElements.includes(arg)) {\n logWarning(`Plugin ${pluginId} tried to create ${arg}`, {\n pluginId,\n attrOrMethod: 'createElement',\n param: arg,\n entity: 'document',\n });\n return document.createDocumentFragment();\n }\n if (isFunction(originalMethod)) {\n return originalMethod.apply(this, [arg, options]);\n }\n };\n }\n const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'createElement');\n if (descriptor?.value) {\n distortions.set(descriptor.value, getCreateElementDistortion);\n }\n}\n\nfunction distortInsert(distortions: DistortionMap) {\n function getInsertDistortion(originalMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n return function insertChildDistortion(this: HTMLElement, node?: Node, ref?: Node) {\n const nodeType = node?.nodeName?.toLowerCase() || '';\n\n if (node && forbiddenElements.includes(nodeType)) {\n logWarning(`Plugin ${pluginId} tried to insert ${nodeType}`, {\n pluginId,\n attrOrMethod: 'insertChild',\n param: nodeType,\n entity: 'HTMLElement',\n });\n return document.createDocumentFragment();\n }\n if (isFunction(originalMethod)) {\n return originalMethod.call(this, node, ref);\n }\n };\n }\n\n function getinsertAdjacentElementDistortion(originalMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n return function insertAdjacentElementDistortion(this: HTMLElement, position?: string, node?: Node) {\n const nodeType = node?.nodeName?.toLowerCase() || '';\n if (node && forbiddenElements.includes(nodeType)) {\n logWarning(`Plugin ${pluginId} tried to insert ${nodeType}`, {\n pluginId,\n attrOrMethod: 'insertAdjacentElement',\n param: nodeType,\n entity: 'HTMLElement',\n });\n\n return document.createDocumentFragment();\n }\n if (isFunction(originalMethod)) {\n return originalMethod.call(this, position, node);\n }\n };\n }\n\n const descriptors = [\n Object.getOwnPropertyDescriptor(Node.prototype, 'insertBefore'),\n Object.getOwnPropertyDescriptor(Node.prototype, 'replaceChild'),\n ];\n\n for (const descriptor of descriptors) {\n if (descriptor?.value) {\n distortions.set(descriptor.set, getInsertDistortion);\n }\n }\n\n const descriptorAdjacent = Object.getOwnPropertyDescriptor(Element.prototype, 'insertAdjacentElement');\n if (descriptorAdjacent?.value) {\n distortions.set(descriptorAdjacent.set, getinsertAdjacentElementDistortion);\n }\n}\n\n// set distortions to append elements to the document\nfunction distortAppend(distortions: DistortionMap) {\n // append accepts an array of nodes to append https://developer.mozilla.org/en-US/docs/Web/API/Node/append\n function getAppendDistortion(originalMethod: unknown, meta: SandboxPluginMeta) {\n const pluginId = meta.id;\n return function appendDistortion(this: HTMLElement, ...args: Node[]) {\n let acceptedNodes = args;\n const filteredAcceptedNodes = args?.filter((node) => !forbiddenElements.includes(node.nodeName.toLowerCase()));\n acceptedNodes = filteredAcceptedNodes;\n\n if (acceptedNodes.length !== filteredAcceptedNodes.length) {\n logWarning(`Plugin ${pluginId} tried to append fobiddenElements`, {\n pluginId,\n attrOrMethod: 'append',\n param: args?.filter((node) => forbiddenElements.includes(node.nodeName.toLowerCase()))?.join(',') || '',\n entity: 'HTMLElement',\n });\n }\n\n if (isFunction(originalMethod)) {\n originalMethod.apply(this, acceptedNodes);\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/append#return_value\n return undefined;\n };\n }\n\n // appendChild accepts a single node to add https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild\n function getAppendChildDistortion(originalMethod: unknown, meta: SandboxPluginMeta, sandboxEnv?: SandboxEnvironment) {\n const pluginId = meta.id;\n return function appendChildDistortion(this: HTMLElement, arg?: Node) {\n const nodeType = arg?.nodeName?.toLowerCase() || '';\n if (arg && forbiddenElements.includes(nodeType)) {\n logWarning(`Plugin ${pluginId} tried to append ${nodeType}`, {\n pluginId,\n attrOrMethod: 'appendChild',\n param: nodeType,\n entity: 'HTMLElement',\n });\n\n return document.createDocumentFragment();\n }\n // if the node is a script, load it into the sandbox\n // this allows webpack chunks to be loaded into the sandbox\n // loadScriptIntoSandbox has restrictions on what scripts can be loaded\n if (sandboxEnv && arg && nodeType === 'script' && arg instanceof HTMLScriptElement) {\n loadScriptIntoSandbox(arg.src, sandboxEnv)\n .then(() => {\n arg.onload?.call(arg, new Event('load'));\n })\n .catch((err) => {\n arg.onerror?.call(arg, new ErrorEvent('error', { error: err }));\n });\n return undefined;\n }\n if (isFunction(originalMethod)) {\n return originalMethod.call(this, arg);\n }\n };\n }\n\n const descriptors = [\n Object.getOwnPropertyDescriptor(Element.prototype, 'append'),\n Object.getOwnPropertyDescriptor(Element.prototype, 'prepend'),\n Object.getOwnPropertyDescriptor(Element.prototype, 'after'),\n Object.getOwnPropertyDescriptor(Element.prototype, 'before'),\n Object.getOwnPropertyDescriptor(Document.prototype, 'append'),\n Object.getOwnPropertyDescriptor(Document.prototype, 'prepend'),\n ];\n\n for (const descriptor of descriptors) {\n if (descriptor?.value) {\n distortions.set(descriptor.value, getAppendDistortion);\n }\n }\n\n const appendChildDescriptor = Object.getOwnPropertyDescriptor(Node.prototype, 'appendChild');\n if (appendChildDescriptor?.value) {\n distortions.set(appendChildDescriptor.value, getAppendChildDistortion);\n }\n}\n\n// this is not a distortion for security reasons but to make plugins using web workers work correctly.\nfunction distortWorkers(distortions: DistortionMap) {\n const descriptor = Object.getOwnPropertyDescriptor(Worker.prototype, 'postMessage');\n function getPostMessageDistortion(originalMethod: unknown) {\n return function postMessageDistortion(this: Worker, ...args: unknown[]) {\n // proxies can't be serialized by postMessage algorithm\n // the only way to pass it through is to send a cloned version\n // objects passed to postMessage should be clonable\n try {\n const newArgs: unknown[] = cloneDeep(args);\n if (isFunction(originalMethod)) {\n originalMethod.apply(this, newArgs);\n }\n } catch (e) {\n throw new Error('postMessage arguments are invalid objects');\n }\n };\n }\n if (descriptor?.value) {\n distortions.set(descriptor.value, getPostMessageDistortion);\n }\n}\n\n// this is not a distortion for security reasons but to make plugins using document.defaultView work correctly.\nfunction distortDocument(distortions: DistortionMap) {\n const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'defaultView');\n if (descriptor?.get) {\n distortions.set(descriptor.get, () => {\n return () => {\n return window;\n };\n });\n }\n\n const documentForbiddenMethods = ['write'];\n for (const method of documentForbiddenMethods) {\n const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, method);\n if (descriptor?.set) {\n distortions.set(descriptor.set, failToSet);\n }\n if (descriptor?.value) {\n distortions.set(descriptor.value, failToSet);\n }\n }\n}\n\nasync function distortMonacoEditor(distortions: DistortionMap) {\n // We rely on `monaco` being instanciated inside `window.monaco`.\n // this is the same object passed down to plugins using monaco editor for their editors\n // this `window.monaco` is an instance of monaco but not the same as if we\n // import `monaco-editor` directly in this file.\n // Short of abusing the `window.monaco` object we would have to modify grafana-ui to export\n // the monaco instance directly in the ReactMonacoEditor component\n const monacoEditor: Monaco = Reflect.get(window, 'monaco');\n\n // do not double patch\n if (!monacoEditor || Object.hasOwn(monacoEditor, SANDBOX_LIVE_API_PATCHED)) {\n return;\n }\n const originalSetMonarchTokensProvider = monacoEditor.languages.setMonarchTokensProvider;\n\n // NOTE: this function in particular is called only once per intialized custom language inside a plugin which is a\n // rare ocurrance but if not patched it'll break the syntax highlighting for the custom language.\n function getSetMonarchTokensProvider() {\n return function (...args: Parameters<typeof originalSetMonarchTokensProvider>) {\n if (args.length !== 2) {\n return originalSetMonarchTokensProvider.apply(monacoEditor, args);\n }\n return originalSetMonarchTokensProvider.call(\n monacoEditor,\n args[0],\n unboxRegexesFromMembraneProxy(args[1]) as (typeof args)[1]\n );\n };\n }\n distortions.set(monacoEditor.languages.setMonarchTokensProvider, getSetMonarchTokensProvider);\n Reflect.set(monacoEditor, SANDBOX_LIVE_API_PATCHED, {});\n}\n\nasync function distortPostMessage(distortions: DistortionMap) {\n const descriptor = Object.getOwnPropertyDescriptor(window, 'postMessage');\n\n function getPostMessageDistortion(originalMethod: unknown) {\n return function postMessageDistortion(this: Window, ...args: unknown[]) {\n // proxies can't be serialized by postMessage algorithm\n // the only way to pass it through is to send a cloned version\n // objects passed to postMessage should be clonable\n try {\n const newArgs: unknown[] = cloneDeep(args);\n if (isFunction(originalMethod)) {\n originalMethod.apply(this, newArgs);\n }\n } catch (e) {\n throw new Error('postMessage arguments are invalid objects');\n }\n };\n }\n\n if (descriptor?.value) {\n distortions.set(descriptor.value, getPostMessageDistortion);\n }\n}\n\n/**\n * \"Live\" APIs are APIs that can only be distorted at runtime.\n * This could be because the objects we want to patch only become available after specific states are reached,\n * or because the libraries we want to patch are lazy-loaded and we don't have access to their definitions.\n * We put here only distortions that can't be static because they are dynamicly loaded\n */\nexport function distortLiveApis(_originalValue: ProxyTarget): ProxyTarget | undefined {\n distortMonacoEditor(generalDistortionMap);\n return;\n}\n\nexport function distortLodash(distortions: DistortionMap) {\n /**\n * This is a distortion for lodash clone Deep function\n * because lodash deep clones execute in the blue realm\n * it returns objects that plugins can't modify because they are not\n * lived tracked.\n *\n * We need to patch it so that plugins can modify the cloned object\n * in places such as query editors.\n *\n */\n function cloneDeepDistortion(originalValue: unknown) {\n // here to please typescript, this if is never true\n if (!isFunction(originalValue)) {\n return originalValue;\n }\n return function (this: unknown, ...args: unknown[]) {\n const cloned = originalValue.apply(this, args);\n recursivePatchObjectAsLiveTarget(cloned);\n return cloned;\n };\n }\n distortions.set(cloneDeep, cloneDeepDistortion);\n}\n","import { isFunction } from 'lodash';\nimport { ComponentType, FC } from 'react';\nimport * as React from 'react';\n\nimport {\n GrafanaPlugin,\n PluginExtensionAddedComponentConfig,\n PluginExtensionExposedComponentConfig,\n PluginType,\n} from '@grafana/data';\n\nimport { SandboxPluginMeta, SandboxedPluginObject } from './types';\nimport { isSandboxedPluginObject } from './utils';\n\n/**\n * Plugins must render their components inside a div with a `data-plugin-sandbox` attribute\n * that has their pluginId as value.\n * If they don't they won't work as expected because they won't be able to get DOM elements\n * This affect all type of plugins.\n *\n * One could say this wrapping should occur inside the Panel,Datasource and App clases inside `@grafana/*`\n * packages like `@grafana/data` but this is not the case. Even though this code is less future-proof than\n * putting it there we have the following cases to cover:\n *\n * - plugins could start bundling grafana dependencies: thus not getting updates on sandboxing code or worse,\n * modifying the code to escape the sandbox\n * - we leak sandboxing code outside of the sandbox configuration. This mean some sandboxing leftover could be\n * left in non-sandboxed code (e.g. sandbox wrappers showing up even if sandbox is disabled)\n *\n * The biggest con is that we must maintain this code to keep it up to date with possible additional components and\n * classes that plugins could bring.\n *\n */\nexport async function sandboxPluginComponents(\n pluginExports: System.Module,\n meta: SandboxPluginMeta\n): Promise<SandboxedPluginObject | System.Module> {\n if (!isSandboxedPluginObject(pluginExports)) {\n // we should monitor these cases. There should not be any plugins without a plugin export loaded inside the sandbox\n return pluginExports;\n }\n\n const pluginObject = await Promise.resolve(pluginExports.plugin);\n\n // intentionally not early exit to cover possible future cases\n\n // wrap panel component\n if (Reflect.has(pluginObject, 'panel')) {\n Reflect.set(pluginObject, 'panel', withSandboxWrapper(Reflect.get(pluginObject, 'panel'), meta));\n }\n\n // wrap datasource components\n if (Reflect.has(pluginObject, 'components')) {\n const components: Record<string, ComponentType> = Reflect.get(pluginObject, 'components');\n Object.entries(components).forEach(([key, value]) => {\n Reflect.set(components, key, withSandboxWrapper(value, meta));\n });\n Reflect.set(pluginObject, 'components', components);\n }\n\n // wrap app components\n if (Reflect.has(pluginObject, 'root')) {\n Reflect.set(pluginObject, 'root', withSandboxWrapper(Reflect.get(pluginObject, 'root'), meta));\n }\n\n // Extensions: added components\n if (Reflect.has(pluginObject, 'addedComponentConfigs')) {\n const addedComponents: PluginExtensionAddedComponentConfig[] = Reflect.get(pluginObject, 'addedComponentConfigs');\n for (const addedComponent of addedComponents) {\n if (Reflect.has(addedComponent, 'component')) {\n Reflect.set(addedComponent, 'component', withSandboxWrapper(Reflect.get(addedComponent, 'component'), meta));\n }\n }\n Reflect.set(pluginObject, 'addedComponentConfigs', addedComponents);\n }\n\n // Extensions: exposed components\n if (Reflect.has(pluginObject, 'exposedComponentConfigs')) {\n const exposedComponents: PluginExtensionExposedComponentConfig[] = Reflect.get(\n pluginObject,\n 'exposedComponentConfigs'\n );\n for (const exposedComponent of exposedComponents) {\n if (Reflect.has(exposedComponent, 'component')) {\n Reflect.set(\n exposedComponent,\n 'component',\n withSandboxWrapper(Reflect.get(exposedComponent, 'component'), meta)\n );\n }\n }\n Reflect.set(pluginObject, 'exposedComponentConfigs', exposedComponents);\n }\n\n // config pages\n if (Reflect.has(pluginObject, 'configPages')) {\n const configPages: NonNullable<GrafanaPlugin['configPages']> = Reflect.get(pluginObject, 'configPages') ?? [];\n\n for (const [key, value] of Object.entries(configPages)) {\n if (!value.body || !isFunction(value.body)) {\n continue;\n }\n Reflect.set(configPages, key, {\n ...value,\n body: withSandboxWrapper(value.body, meta),\n });\n }\n Reflect.set(pluginObject, 'configPages', configPages);\n }\n\n return pluginExports;\n}\n\nconst withSandboxWrapper = <P extends object>(\n WrappedComponent: ComponentType<P>,\n pluginMeta: SandboxPluginMeta\n): React.MemoExoticComponent<FC<P>> => {\n const WithWrapper = React.memo((props: P) => {\n return (\n <div\n data-plugin-sandbox={pluginMeta.id}\n style={{ height: pluginMeta.type === PluginType.app || pluginMeta.type === PluginType.panel ? '100%' : 'auto' }}\n >\n <WrappedComponent {...props} />\n </div>\n );\n });\n WithWrapper.displayName = `GrafanaSandbox(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;\n return WithWrapper;\n};\n","import createVirtualEnvironment from '@locker/near-membrane-dom';\nimport { ProxyTarget } from '@locker/near-membrane-shared';\n\nimport { BootData } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { defaultTrustedTypesPolicy } from 'app/core/trustedTypePolicies';\n\nimport { getPluginCode, getPluginLoadData, patchSandboxEnvironmentPrototype } from './codeLoader';\nimport { getGeneralSandboxDistortionMap, distortLiveApis } from './distortions';\nimport {\n getSafeSandboxDomElement,\n isDomElement,\n isLiveTarget,\n markDomElementStyleAsALiveTarget,\n patchObjectAsLiveTarget,\n patchWebAPIs,\n} from './documentSandbox';\nimport { sandboxPluginDependencies } from './pluginDependencies';\nimport { sandboxPluginComponents } from './sandboxComponents';\nimport { CompartmentDependencyModule, PluginFactoryFunction, SandboxEnvironment, SandboxPluginMeta } from './types';\nimport { logError, logInfo } from './utils';\n\n// Loads near membrane custom formatter for near membrane proxy objects.\nif (process.env.NODE_ENV !== 'production') {\n require('@locker/near-membrane-dom/custom-devtools-formatter');\n}\n\nconst pluginImportCache = new Map<string, Promise<System.Module>>();\nconst pluginLogCache: Record<string, boolean> = {};\n\nexport async function importPluginModuleInSandbox({ pluginId }: { pluginId: string }): Promise<System.Module> {\n patchWebAPIs();\n try {\n const pluginMeta = getPluginLoadData(pluginId);\n if (!pluginImportCache.has(pluginId)) {\n pluginImportCache.set(pluginId, doImportPluginModuleInSandbox(pluginMeta));\n }\n return pluginImportCache.get(pluginId)!;\n } catch (e) {\n const error = new Error(`Could not import plugin ${pluginId} inside sandbox: ` + e);\n logError(error, {\n pluginId,\n error: String(e),\n });\n throw error;\n }\n}\n\nasync function doImportPluginModuleInSandbox(meta: SandboxPluginMeta): Promise<System.Module> {\n logInfo('Loading with sandbox', {\n pluginId: meta.id,\n });\n return new Promise(async (resolve, reject) => {\n const generalDistortionMap = getGeneralSandboxDistortionMap();\n let sandboxEnvironment: SandboxEnvironment;\n /*\n * this function is executed every time a plugin calls any DOM API\n * it must be kept as lean and performant as possible and sync\n */\n function distortionCallback(originalValue: ProxyTarget): ProxyTarget {\n if (isDomElement(originalValue)) {\n const element = getSafeSandboxDomElement(originalValue, meta.id);\n // the element.style attribute should be a live target to work in chrome\n markDomElementStyleAsALiveTarget(element);\n return element;\n } else {\n patchObjectAsLiveTarget(originalValue);\n }\n\n // static distortions are faster distortions with direct object descriptors checks\n const staticDistortion = generalDistortionMap.get(originalValue);\n if (staticDistortion) {\n return staticDistortion(originalValue, meta, sandboxEnvironment) as ProxyTarget;\n }\n\n // live distortions are slower and have to do runtime checks\n const liveDistortion = distortLiveApis(originalValue);\n if (liveDistortion) {\n return liveDistortion;\n }\n return originalValue;\n }\n\n // each plugin has its own sandbox\n sandboxEnvironment = createVirtualEnvironment(window, {\n // distortions are interceptors to modify the behavior of objects when\n // the code inside the sandbox tries to access them\n distortionCallback,\n defaultPolicy: defaultTrustedTypesPolicy,\n liveTargetCallback: isLiveTarget,\n // endowments are custom variables we make available to plugins in their window object\n endowments: Object.getOwnPropertyDescriptors({\n // window.location is unforgeable, we make the location available via endowments\n // when the plugin code is loaded, the sandbox replaces the window.location with\n // window.locationSandbox. In the future `window.location` could be a proxy if we\n // want to intercept calls to it.\n locationSandbox: window.location,\n setImmediate: function (fn: Function, ...args: unknown[]) {\n return setTimeout(fn, 0, ...args);\n },\n get monaco() {\n // `window.monaco` may be undefined when invoked. However, plugins have long\n // accessed it directly, aware of this possibility.\n return Reflect.get(window, 'monaco');\n },\n get Prism() {\n // Similar to `window.monaco`, `window.Prism` may be undefined when invoked.\n return Reflect.get(window, 'Prism');\n },\n get jQuery() {\n return Reflect.get(window, 'jQuery');\n },\n get $() {\n return Reflect.get(window, 'jQuery');\n },\n get grafanaBootData(): BootData {\n if (!pluginLogCache[meta.id + '-grafanaBootData']) {\n pluginLogCache[meta.id + '-grafanaBootData'] = true;\n logInfo('Plugin using window.grafanaBootData', {\n sandbox: 'true',\n pluginId: meta.id,\n guessedPluginName: meta.id,\n parent: 'window',\n packageName: 'window',\n key: 'grafanaBootData',\n });\n }\n\n // We don't want to encourage plugins to use `window.grafanaBootData`. They should\n // use `@grafana/runtime.config` instead.\n // if we are in dev mode we fail this access\n if (config.buildInfo.env === 'development') {\n throw new Error(\n `Error in ${meta.id}: Plugins should not use window.grafanaBootData. Use \"config\" from \"@grafana/runtime\" instead.`\n );\n } else {\n console.error(\n `${meta.id.toUpperCase()}: Plugins should not use window.grafanaBootData. Use \"config\" from \"@grafana/runtime\" instead.`\n );\n }\n return config.bootData;\n },\n\n // Plugins builds use the AMD module system. Their code consists\n // of a single function call to `define()` that internally contains all the plugin code.\n // This is that `define` function the plugin will call.\n // More info about how AMD works https://github.com/amdjs/amdjs-api/blob/master/AMD.md\n // Plugins code normally use the \"anonymous module\" signature: define(depencies, factoryFunction)\n async define(\n idOrDependencies: string | string[],\n maybeDependencies: string[] | PluginFactoryFunction,\n maybeFactory?: PluginFactoryFunction\n ): Promise<void> {\n let dependencies: string[];\n let factory: PluginFactoryFunction;\n if (Array.isArray(idOrDependencies)) {\n dependencies = idOrDependencies;\n factory = maybeDependencies as PluginFactoryFunction;\n } else {\n dependencies = maybeDependencies as string[];\n factory = maybeFactory!;\n }\n\n try {\n const resolvedDeps = await resolvePluginDependencies(dependencies, meta);\n // execute the plugin's code\n const pluginExportsRaw = factory.apply(null, resolvedDeps);\n // only after the plugin has been executed\n // we can return the plugin exports.\n // This is what grafana effectively gets.\n const pluginExports = await sandboxPluginComponents(pluginExportsRaw, meta);\n resolve(pluginExports);\n } catch (e) {\n const error = new Error(`Could not execute plugin's define ${meta.id}: ` + e);\n logError(error, {\n pluginId: meta.id,\n error: String(e),\n });\n reject(error);\n }\n },\n }),\n });\n\n patchSandboxEnvironmentPrototype(sandboxEnvironment);\n\n // fetch plugin's code\n let pluginCode = '';\n try {\n pluginCode = await getPluginCode(meta);\n } catch (e) {\n const error = new Error(`Could not load plugin code ${meta.id}: ` + e);\n logError(error, {\n pluginId: meta.id,\n error: String(e),\n });\n reject(error);\n }\n\n try {\n // runs the code inside the sandbox environment\n // this evaluate will eventually run the `define` function inside\n // of endowments.\n sandboxEnvironment.evaluate(pluginCode);\n } catch (e) {\n const error = new Error(`Could not run plugin ${meta.id} inside sandbox: ` + e);\n logError(error, {\n pluginId: meta.id,\n error: String(e),\n });\n reject(error);\n }\n });\n}\n\n/**\n *\n * This function resolves the dependencies using the array of AMD deps.\n * Additionally it supports the RequireJS magic modules `module` and `exports`.\n * https://github.com/requirejs/requirejs/wiki/Differences-between-the-simplified-CommonJS-wrapper-and-standard-AMD-define#magic\n *\n */\nasync function resolvePluginDependencies(deps: string[], pluginMeta: SandboxPluginMeta) {\n const pluginExports = {};\n const pluginModuleDep: ModuleMeta = {\n id: pluginMeta.id,\n uri: pluginMeta.module,\n exports: pluginExports,\n };\n\n // resolve dependencies\n const resolvedDeps: CompartmentDependencyModule[] = [];\n for (const dep of deps) {\n let resolvedDep = sandboxPluginDependencies.get(dep);\n\n if (typeof resolvedDep === 'function') {\n resolvedDep = await resolvedDep();\n }\n if (resolvedDep?.__useDefault) {\n resolvedDep = resolvedDep.default;\n }\n\n if (dep === 'module') {\n resolvedDep = pluginModuleDep;\n }\n\n if (dep === 'exports') {\n resolvedDep = pluginExports;\n }\n\n if (!resolvedDep) {\n const error = new Error(`[sandbox] Could not resolve dependency ${dep}`);\n logError(error, {\n pluginId: pluginMeta.id,\n dependency: dep,\n error: String(error),\n });\n throw error;\n }\n resolvedDeps.push(resolvedDep);\n }\n return resolvedDeps;\n}\n\ninterface ModuleMeta {\n id: string;\n uri: string;\n exports: System.Module;\n}\n","import { PluginSignatureType } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\n\nimport { getPluginDetails } from '../admin/api';\nimport { getPluginSettings } from '../pluginSettings';\n\ntype SandboxEligibilityCheckParams = {\n pluginId: string;\n};\n\ntype SandboxEnabledCheck = (params: SandboxEligibilityCheckParams) => Promise<boolean>;\n\n/**\n * We allow core extensions to register their own\n * sandbox enabled checks.\n */\nlet sandboxEnabledCheck: SandboxEnabledCheck = isPluginFrontendSandboxEnabled;\n\nexport function setSandboxEnabledCheck(checker: SandboxEnabledCheck) {\n sandboxEnabledCheck = checker;\n}\n\nexport async function shouldLoadPluginInFrontendSandbox({ pluginId }: SandboxEligibilityCheckParams): Promise<boolean> {\n // basic check if the plugin is eligible for the sandbox\n if (!(await isPluginFrontendSandboxEligible({ pluginId }))) {\n return false;\n }\n\n return sandboxEnabledCheck({ pluginId });\n}\n\n/**\n * This is a basic check that checks if the plugin is eligible to run in the sandbox.\n * It does not check if the plugin is actually enabled for the sandbox.\n */\nexport async function isPluginFrontendSandboxEligible({ pluginId }: SandboxEligibilityCheckParams): Promise<boolean> {\n // Only if the feature is not enabled no support for sandbox\n if (!Boolean(config.featureToggles.pluginsFrontendSandbox)) {\n return false;\n }\n\n // To fast-test and debug the sandbox in the browser (dev mode only).\n const sandboxDisableQueryParam =\n window.location.search.includes('nosandbox') && config.buildInfo.env === 'development';\n if (sandboxDisableQueryParam) {\n return false;\n }\n\n // no sandbox in test mode. it often breaks e2e tests\n if (process.env.NODE_ENV === 'test') {\n return false;\n }\n\n if (!contextSrv.isSignedIn) {\n return false;\n }\n\n // grafana signature and internal plugins are not allowed in the sandbox\n return isPluginSignatureEligibleForSandbox({ pluginId });\n}\n\nasync function isPluginSignatureEligibleForSandbox({ pluginId }: SandboxEligibilityCheckParams): Promise<boolean> {\n try {\n // this can fail if we are trying to fetch settings of a non-installed plugin\n const pluginMeta = await getPluginSettings(pluginId, { showErrorAlert: false });\n return pluginMeta.signatureType !== PluginSignatureType.grafana && pluginMeta.signature !== 'internal';\n } catch (e) {\n try {\n //this can fail if gcom is not accesible\n const details = await getPluginDetails(pluginId);\n return details.signatureType !== PluginSignatureType.grafana && details.signature !== 'internal';\n } catch (e) {\n return false;\n }\n }\n}\n\n/**\n * Check if the plugin is enabled for the sandbox via configuration.\n */\nexport async function isPluginFrontendSandboxEnabled({ pluginId }: SandboxEligibilityCheckParams): Promise<boolean> {\n return Boolean(config.enableFrontendSandboxForPlugins?.includes(pluginId));\n}\n","import { addResourceBundle } from '@grafana/i18n/internal';\n\nimport { SystemJS } from '../loader/systemjs';\nimport { resolveModulePath } from '../loader/utils';\n\ninterface AddTranslationsToI18nOptions {\n resolvedLanguage: string;\n fallbackLanguage: string;\n pluginId: string;\n translations: Record<string, string>;\n}\n\nexport async function addTranslationsToI18n({\n resolvedLanguage,\n fallbackLanguage,\n pluginId,\n translations,\n}: AddTranslationsToI18nOptions): Promise<void> {\n const resolvedPath = translations[resolvedLanguage];\n const fallbackPath = translations[fallbackLanguage];\n const path = resolvedPath ?? fallbackPath;\n\n if (!path) {\n console.warn(`Could not find any translation for plugin ${pluginId}`, { resolvedLanguage, fallbackLanguage });\n return;\n }\n\n try {\n const module = await SystemJS.import(resolveModulePath(path));\n if (!module.default) {\n console.warn(`Could not find default export for plugin ${pluginId}`, {\n resolvedLanguage,\n fallbackLanguage,\n path,\n });\n return;\n }\n\n const language = resolvedPath ? resolvedLanguage : fallbackLanguage;\n addResourceBundle(language, pluginId, module.default);\n } catch (error) {\n console.warn(`Could not load translation for plugin ${pluginId}`, {\n resolvedLanguage,\n fallbackLanguage,\n error,\n path,\n });\n }\n}\n","import { DEFAULT_LANGUAGE } from '@grafana/i18n';\nimport { getResolvedLanguage } from '@grafana/i18n/internal';\nimport { config } from '@grafana/runtime';\n\nimport builtInPlugins from '../built_in_plugins';\nimport { registerPluginInfoInCache } from '../loader/pluginInfoCache';\nimport { SystemJS } from '../loader/systemjs';\nimport { resolveModulePath } from '../loader/utils';\nimport { importPluginModuleInSandbox } from '../sandbox/sandboxPluginLoader';\nimport { shouldLoadPluginInFrontendSandbox } from '../sandbox/sandboxPluginLoaderRegistry';\nimport { pluginsLogger } from '../utils';\n\nimport { addTranslationsToI18n } from './addTranslationsToI18n';\nimport { PluginImportInfo } from './types';\n\nexport async function importPluginModule({\n path,\n pluginId,\n loadingStrategy,\n version,\n moduleHash,\n translations,\n}: PluginImportInfo): Promise<System.Module> {\n if (version) {\n registerPluginInfoInCache({ path, version, loadingStrategy });\n }\n\n // Add locales to i18n for a plugin if the feature toggle is enabled and the plugin has locales\n if (translations) {\n await addTranslationsToI18n({\n resolvedLanguage: getResolvedLanguage(),\n fallbackLanguage: DEFAULT_LANGUAGE,\n pluginId,\n translations,\n });\n }\n\n const builtIn = builtInPlugins[path];\n if (builtIn) {\n // for handling dynamic imports\n if (typeof builtIn === 'function') {\n return await builtIn();\n } else {\n return builtIn;\n }\n }\n\n const modulePath = resolveModulePath(path);\n\n // inject integrity hash into SystemJS import map\n if (config.featureToggles.pluginsSriChecks) {\n const resolvedModule = System.resolve(modulePath);\n const integrityMap = System.getImportMap().integrity;\n\n if (moduleHash && integrityMap && !integrityMap[resolvedModule]) {\n SystemJS.addImportMap({\n integrity: {\n [resolvedModule]: moduleHash,\n },\n });\n }\n }\n\n // the sandboxing environment code cannot work in nodejs and requires a real browser\n if (await shouldLoadPluginInFrontendSandbox({ pluginId })) {\n return importPluginModuleInSandbox({ pluginId });\n }\n\n return SystemJS.import(modulePath).catch((e) => {\n let error = new Error('Could not load plugin', { cause: e });\n console.error(error);\n pluginsLogger.logError(error, {\n path,\n pluginId,\n pluginVersion: version ?? '',\n expectedHash: moduleHash ?? '',\n loadingStrategy: loadingStrategy.toString(),\n sriChecksEnabled: String(Boolean(config.featureToggles.pluginsSriChecks)),\n originalErrorMessage: e.originalErr?.message || '',\n originalErrorStack: e.originalErr?.stack || '',\n systemJSOriginalErr: e.originalErr?.message || '',\n });\n throw error;\n });\n}\n","import {\n AppPlugin,\n AppPluginMeta,\n DataQuery,\n DataSourceApi,\n DataSourceJsonData,\n DataSourcePlugin,\n DataSourcePluginMeta,\n PanelPlugin,\n PanelPluginMeta,\n PluginLoadingStrategy,\n PluginMeta,\n throwIfAngular,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { GenericDataSourcePlugin } from 'app/features/datasources/types';\nimport { getPanelPluginLoadError } from 'app/features/panel/components/PanelPluginError';\n\nimport {\n addedComponentsRegistry,\n addedFunctionsRegistry,\n addedLinksRegistry,\n exposedComponentsRegistry,\n} from '../extensions/registry/setup';\nimport { pluginsLogger } from '../utils';\n\nimport { importPluginModule } from './importPluginModule';\nimport { PluginImporter, PostImportStrategy, PreImportStrategy } from './types';\n\nconst defaultPreImport: PreImportStrategy = (plugin) => {\n throwIfAngular(plugin);\n const fallbackLoadingStrategy = plugin.loadingStrategy ?? PluginLoadingStrategy.fetch;\n\n const args = {\n path: plugin.module,\n version: plugin.info?.version,\n loadingStrategy: fallbackLoadingStrategy,\n pluginId: plugin.id,\n moduleHash: plugin.moduleHash,\n translations: plugin.translations,\n };\n\n return args;\n};\n\nconst panelPluginPostImport: PostImportStrategy<PanelPlugin, PanelPluginMeta> = async (meta, module) => {\n try {\n const pluginExports = await module;\n\n if (pluginExports.plugin) {\n // pluginExports.plugin can either be a Promise<PanelPlugin> or a PanelPlugin\n const plugin: PanelPlugin = await pluginExports.plugin;\n plugin.meta = meta;\n pluginsCache.set(meta.id, plugin);\n return plugin;\n }\n\n throwIfAngular(pluginExports);\n throw new Error('missing export: plugin');\n } catch (error) {\n // TODO, maybe a different error plugin\n console.warn('Error loading panel plugin: ' + meta.id, error);\n return getPanelPluginLoadError(meta, error);\n }\n};\n\nconst datasourcePluginPostImport: PostImportStrategy<GenericDataSourcePlugin, DataSourcePluginMeta> = async (\n meta,\n module\n) => {\n const pluginExports = await module;\n\n if (pluginExports.plugin) {\n const dsPlugin: GenericDataSourcePlugin = pluginExports.plugin;\n dsPlugin.meta = meta;\n pluginsCache.set(meta.id, dsPlugin);\n return dsPlugin;\n }\n\n if (pluginExports.Datasource) {\n const dsPlugin = new DataSourcePlugin<DataSourceApi<DataQuery, DataSourceJsonData>, DataQuery, DataSourceJsonData>(\n pluginExports.Datasource\n );\n dsPlugin.setComponentsFromLegacyExports(pluginExports);\n dsPlugin.meta = meta;\n pluginsCache.set(meta.id, dsPlugin);\n return dsPlugin;\n }\n\n throw new Error('Plugin module is missing DataSourcePlugin or Datasource constructor export');\n};\n\nconst appPluginPostImport: PostImportStrategy<AppPlugin, AppPluginMeta> = async (meta, module) => {\n const pluginExports = await module;\n\n const { plugin = new AppPlugin() } = pluginExports;\n plugin.init(meta);\n plugin.meta = meta;\n plugin.setComponentsFromLegacyExports(pluginExports);\n\n exposedComponentsRegistry.register({ pluginId: meta.id, configs: plugin.exposedComponentConfigs || [] });\n addedComponentsRegistry.register({ pluginId: meta.id, configs: plugin.addedComponentConfigs || [] });\n addedLinksRegistry.register({ pluginId: meta.id, configs: plugin.addedLinkConfigs || [] });\n addedFunctionsRegistry.register({ pluginId: meta.id, configs: plugin.addedFunctionConfigs || [] });\n\n pluginsCache.set(meta.id, plugin);\n return plugin;\n};\n\nconst promisesCache: Map<string, Promise<PanelPlugin | GenericDataSourcePlugin | AppPlugin>> = new Map();\n\nconst getPromiseFromCache = <M extends PluginMeta, P extends PanelPlugin | GenericDataSourcePlugin | AppPlugin>(\n meta: M\n): Promise<P> => {\n const cached = promisesCache.get(meta.id);\n if (cached) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return cached as Promise<P>;\n }\n\n throw new Error(`Trying to get unknown plugin type ${meta.type} from cache for plugin ${meta.id}`);\n};\n\nconst pluginsCache: Map<string, PanelPlugin | GenericDataSourcePlugin | AppPlugin> = new Map();\n\nconst getPluginFromCache = <P extends PanelPlugin | GenericDataSourcePlugin | AppPlugin>(id: string): P | undefined => {\n const cached = pluginsCache.get(id);\n if (cached) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return cached as P;\n }\n\n return undefined;\n};\n\nconst importPlugin = <M extends PluginMeta, P extends PanelPlugin | GenericDataSourcePlugin | AppPlugin>(\n meta: M,\n postImportStrategy: PostImportStrategy<P, M>,\n preImportStrategy: PreImportStrategy<M> = defaultPreImport\n): Promise<P> => {\n const cached = getPluginFromCache<P>(meta.id);\n if (cached) {\n pluginsLogger.logDebug(`Retrieving plugin from cache`, {\n path: meta.module,\n pluginId: meta.id,\n pluginVersion: meta.info?.version ?? '',\n expectedHash: meta.moduleHash ?? '',\n loadingStrategy: meta.loadingStrategy ?? PluginLoadingStrategy.fetch,\n sriChecksEnabled: String(Boolean(config.featureToggles.pluginsSriChecks)),\n });\n return Promise.resolve(cached);\n }\n\n if (promisesCache.has(meta.id)) {\n pluginsLogger.logDebug(`Retrieving plugin from inflight plugin load request`, {\n path: meta.module,\n pluginId: meta.id,\n pluginVersion: meta.info?.version ?? '',\n expectedHash: meta.moduleHash ?? '',\n loadingStrategy: meta.loadingStrategy ?? PluginLoadingStrategy.fetch,\n sriChecksEnabled: String(Boolean(config.featureToggles.pluginsSriChecks)),\n });\n return getPromiseFromCache(meta);\n }\n\n const args = preImportStrategy(meta);\n const module = importPluginModule(args);\n const plugin = postImportStrategy(meta, module);\n promisesCache.set(meta.id, plugin);\n\n return getPromiseFromCache(meta);\n};\n\nexport const pluginImporter: PluginImporter = {\n importPanel: (meta: PanelPluginMeta) => importPlugin(meta, panelPluginPostImport),\n importDataSource: (meta: DataSourcePluginMeta) => importPlugin(meta, datasourcePluginPostImport),\n importApp: (meta: AppPluginMeta) => importPlugin(meta, appPluginPostImport),\n getPanel: (id: string) => getPluginFromCache<PanelPlugin>(id), // we need this sync because how the panel plugins are loaded in PanelRenderer\n};\n\nexport const clearCaches = () => {\n promisesCache.clear();\n pluginsCache.clear();\n};\n","import { config } from '@grafana/runtime';\nimport { SceneGridRow } from '@grafana/scenes';\n\nimport { NewObjectAddedToCanvasEvent } from '../../edit-pane/shared';\nimport { DefaultGridLayoutManager } from '../layout-default/DefaultGridLayoutManager';\nimport { RowItem } from '../layout-rows/RowItem';\nimport { RowsLayoutManager } from '../layout-rows/RowsLayoutManager';\nimport { TabItem } from '../layout-tabs/TabItem';\nimport { TabsLayoutManager } from '../layout-tabs/TabsLayoutManager';\nimport { DashboardLayoutManager } from '../types/DashboardLayoutManager';\nimport { isLayoutParent } from '../types/LayoutParent';\n\nexport function addNewTabTo(layout: DashboardLayoutManager): TabItem {\n const layoutParent = layout.parent!;\n if (!isLayoutParent(layoutParent)) {\n throw new Error('Parent layout is not a LayoutParent');\n }\n\n if (layout instanceof TabsLayoutManager) {\n return layout.addNewTab();\n }\n\n // Create new tabs layout and wrap the current layout in the first tab\n const tabsLayout = TabsLayoutManager.createEmpty();\n tabsLayout.state.tabs[0].setState({ layout: layout.clone() });\n\n layoutParent.switchLayout(tabsLayout);\n\n const tab = tabsLayout.state.tabs[0];\n layout.publishEvent(new NewObjectAddedToCanvasEvent(tab), true);\n\n return tab;\n}\n\nexport function addNewRowTo(layout: DashboardLayoutManager): RowItem | SceneGridRow {\n /**\n * If new layouts feature is disabled we add old school rows to the custom grid layout\n */\n if (!config.featureToggles.dashboardNewLayouts) {\n if (layout instanceof DefaultGridLayoutManager) {\n return layout.addNewRow();\n } else {\n throw new Error('New dashboard layouts feature not enabled but new layout found');\n }\n }\n\n if (layout instanceof RowsLayoutManager) {\n return layout.addNewRow();\n }\n\n if (layout instanceof TabsLayoutManager) {\n const currentTab = layout.getCurrentTab();\n if (!currentTab) {\n throw new Error('Could find currently active tab');\n }\n return addNewRowTo(currentTab.state.layout);\n }\n\n const layoutParent = layout.parent!;\n if (!isLayoutParent(layoutParent)) {\n throw new Error('Parent layout is not a LayoutParent');\n }\n\n // If we want to add a row and current layout is custom grid or auto we migrate to rows layout\n // And wrap current layout in a row\n\n const rowsLayout = RowsLayoutManager.createFromLayout(layoutParent.getLayout());\n layoutParent.switchLayout(rowsLayout);\n\n const row = rowsLayout.state.rows[0];\n layout.publishEvent(new NewObjectAddedToCanvasEvent(row), true);\n\n return row;\n}\n","import { isString as _isString } from 'lodash';\n\nimport { TimeRange, AppEvents, rangeUtil, dateMath, PanelModel as IPanelModel, dateTimeAsMoment } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport appEvents from 'app/core/app_events';\nimport config from 'app/core/config';\nimport { LS_PANEL_COPY_KEY, PANEL_BORDER } from 'app/core/constants';\nimport store from 'app/core/store';\nimport { ShareModal } from 'app/features/dashboard/components/ShareModal/ShareModal';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { UnlinkModal } from 'app/features/dashboard-scene/scene/UnlinkModal';\nimport { AddLibraryPanelModal } from 'app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal';\nimport { cleanUpPanelState } from 'app/features/panel/state/actions';\nimport { dispatch } from 'app/store/store';\n\nimport { ShowConfirmModalEvent, ShowModalReactEvent } from '../../../types/events';\n\nexport const removePanel = (dashboard: DashboardModel, panel: PanelModel, ask: boolean) => {\n // confirm deletion\n if (ask !== false) {\n const confirmText = panel.alert ? 'YES' : undefined;\n\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard.remove-panel.title.remove-panel', 'Remove panel'),\n text: t('dashboard.remove-panel.text.remove-panel', 'Are you sure you want to remove this panel?'),\n icon: 'trash-alt',\n confirmText: confirmText,\n yesText: 'Remove',\n onConfirm: () => removePanel(dashboard, panel, false),\n })\n );\n return;\n }\n\n dashboard.removePanel(panel);\n dispatch(cleanUpPanelState(panel.key));\n};\n\nexport const duplicatePanel = (dashboard: DashboardModel, panel: PanelModel) => {\n dashboard.duplicatePanel(panel);\n};\n\nexport const copyPanel = (panel: IPanelModel) => {\n let saveModel = panel;\n if (panel instanceof PanelModel) {\n saveModel = panel.getSaveModel();\n }\n\n store.set(LS_PANEL_COPY_KEY, JSON.stringify(saveModel));\n appEvents.emit(AppEvents.alertSuccess, ['Panel copied. Click **Add panel** icon to paste.']);\n};\n\nexport const sharePanel = (dashboard: DashboardModel, panel: PanelModel) => {\n appEvents.publish(\n new ShowModalReactEvent({\n component: ShareModal,\n props: {\n dashboard: dashboard,\n panel: panel,\n },\n })\n );\n};\n\nexport const addLibraryPanel = (dashboard: DashboardModel, panel: PanelModel) => {\n appEvents.publish(\n new ShowModalReactEvent({\n component: AddLibraryPanelModal,\n props: {\n panel,\n initialFolderUid: dashboard.meta.folderUid,\n isOpen: true,\n },\n })\n );\n};\n\nexport const unlinkLibraryPanel = (panel: PanelModel) => {\n appEvents.publish(\n new ShowModalReactEvent({\n component: UnlinkModal,\n props: {\n onConfirm: () => panel.unlinkLibraryPanel(),\n isOpen: true,\n },\n })\n );\n};\n\nexport const refreshPanel = (panel: PanelModel) => {\n panel.refresh();\n};\n\nexport const toggleLegend = (panel: PanelModel) => {\n const newOptions = { ...panel.options };\n newOptions.legend.showLegend === true\n ? (newOptions.legend.showLegend = false)\n : (newOptions.legend.showLegend = true);\n panel.updateOptions(newOptions);\n};\n\nexport interface TimeOverrideResult {\n timeRange: TimeRange;\n timeInfo: string;\n}\n\nexport function applyPanelTimeOverrides(panel: PanelModel, timeRange: TimeRange): TimeOverrideResult {\n const newTimeData = {\n timeInfo: '',\n timeRange: timeRange,\n };\n\n if (panel.timeFrom) {\n const timeFromInterpolated = getTemplateSrv().replace(panel.timeFrom, panel.scopedVars);\n const timeFromInfo = rangeUtil.describeTextRange(timeFromInterpolated);\n if (timeFromInfo.invalid) {\n newTimeData.timeInfo = 'invalid time override';\n return newTimeData;\n }\n\n if (_isString(timeRange.raw.from)) {\n const fromTimezone = dateTimeAsMoment(timeRange.from).tz();\n const toTimezone = dateTimeAsMoment(timeRange.to).tz();\n const timeFromDate = dateMath.parse(timeFromInfo.from, undefined, fromTimezone)!;\n newTimeData.timeInfo = timeFromInfo.display;\n newTimeData.timeRange = {\n from: timeFromDate,\n to: dateMath.parse(timeFromInfo.to, undefined, toTimezone)!,\n raw: {\n from: timeFromInfo.from,\n to: timeFromInfo.to,\n },\n };\n }\n }\n\n if (panel.timeShift) {\n const timeShiftInterpolated = getTemplateSrv().replace(panel.timeShift, panel.scopedVars);\n const timeShiftInfo = rangeUtil.describeTextRange(timeShiftInterpolated);\n if (timeShiftInfo.invalid) {\n newTimeData.timeInfo = 'invalid timeshift';\n return newTimeData;\n }\n\n const timeShift = '-' + timeShiftInterpolated;\n newTimeData.timeInfo += ' timeshift ' + timeShift;\n const from = dateMath.parseDateMath(timeShift, newTimeData.timeRange.from, false)!;\n const to = dateMath.parseDateMath(timeShift, newTimeData.timeRange.to, true)!;\n\n newTimeData.timeRange = {\n from,\n to,\n raw: {\n from,\n to,\n },\n };\n }\n\n if (panel.hideTimeOverride) {\n newTimeData.timeInfo = '';\n }\n\n return newTimeData;\n}\n\nexport function getResolution(panel: PanelModel): number {\n const htmlEl = document.getElementsByTagName('html')[0];\n const width = htmlEl.getBoundingClientRect().width; // https://stackoverflow.com/a/21454625\n\n return panel.maxDataPoints ? panel.maxDataPoints : Math.ceil(width * (panel.gridPos.w / 24));\n}\n\nexport function calculateInnerPanelHeight(panel: PanelModel, containerHeight: number): number {\n const chromePadding = panel.plugin && panel.plugin.noPadding ? 0 : config.theme.panelPadding * 2;\n const headerHeight = panel.hasTitle() ? config.theme.panelHeaderHeight : 0;\n return containerHeight - headerHeight - chromePadding - PANEL_BORDER;\n}\n\nexport function calculateNewPanelGridPos(dashboard: DashboardModel): PanelModel['gridPos'] {\n // Move all panels down by the height of the \"add panel\" widget.\n // This is to work around an issue with react-grid-layout that can mess up the layout\n // in certain configurations. (See https://github.com/react-grid-layout/react-grid-layout/issues/1787)\n const addPanelWidgetHeight = 8;\n for (const panel of dashboard.panelIterator()) {\n panel.gridPos.y += addPanelWidgetHeight;\n }\n\n return { x: 0, y: 0, w: 12, h: addPanelWidgetHeight };\n}\n","import { css } from '@emotion/css';\nimport { autoUpdate, useFloating } from '@floating-ui/react';\nimport { FormEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, VariableSuggestion } from '@grafana/data';\nimport {\n FieldValidationMessage,\n floatingUtils,\n Input,\n Portal,\n ScrollContainer,\n TextArea,\n useTheme2,\n} from '@grafana/ui';\nimport { DataLinkSuggestions } from '@grafana/ui/internal';\n\nconst modulo = (a: number, n: number) => a - n * Math.floor(a / n);\nconst ERROR_TOOLTIP_OFFSET = 8;\n\nexport enum HTMLElementType {\n InputElement = 'input',\n TextAreaElement = 'textarea',\n}\n\ninterface SuggestionsInputProps {\n value?: string | number;\n onChange: (url: string, callback?: () => void) => void;\n suggestions: VariableSuggestion[];\n placeholder?: string;\n invalid?: boolean;\n error?: string;\n width?: number;\n type?: HTMLElementType;\n style?: React.CSSProperties;\n autoFocus?: boolean;\n}\n\nconst getStyles = (theme: GrafanaTheme2, inputHeight: number) => {\n return {\n suggestionsWrapper: css({\n boxShadow: theme.shadows.z2,\n }),\n errorTooltip: css({\n position: 'absolute',\n top: inputHeight + ERROR_TOOLTIP_OFFSET + 'px',\n zIndex: theme.zIndex.tooltip,\n }),\n inputWrapper: css({\n position: 'relative',\n }),\n // Wrapper with child selector needed.\n // When classnames are applied to the same element as the wrapper, it causes the suggestions to stop working\n };\n};\n\nexport const SuggestionsInput = ({\n value = '',\n onChange,\n suggestions,\n placeholder,\n error,\n invalid,\n type = HTMLElementType.InputElement,\n style,\n autoFocus = false,\n}: SuggestionsInputProps) => {\n const [showingSuggestions, setShowingSuggestions] = useState(false);\n const [suggestionsIndex, setSuggestionsIndex] = useState(0);\n const [variableValue, setVariableValue] = useState<string>(value.toString());\n const scrollRef = useRef<HTMLDivElement>(null);\n const [scrollTop, setScrollTop] = useState(0);\n const [inputHeight, setInputHeight] = useState<number>(0);\n const [startPos, setStartPos] = useState<number>(0);\n const placement = 'bottom-start';\n\n const theme = useTheme2();\n const styles = getStyles(theme, inputHeight);\n\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement>();\n\n useEffect(() => {\n scrollRef.current?.scrollTo(0, scrollTop);\n }, [scrollTop]);\n\n // the order of middleware is important!\n const middleware = floatingUtils.getPositioningMiddleware(placement);\n\n const { refs, floatingStyles } = useFloating({\n open: showingSuggestions,\n placement,\n onOpenChange: setShowingSuggestions,\n middleware,\n whileElementsMounted: autoUpdate,\n strategy: 'fixed',\n });\n\n const handleRef = useCallback(\n (ref: HTMLInputElement | HTMLTextAreaElement) => {\n refs.setReference(ref);\n\n inputRef.current = ref;\n },\n [refs]\n );\n\n // Used to get the height of the suggestion elements in order to scroll to them.\n const activeRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n setScrollTop(getElementPosition(activeRef.current, suggestionsIndex));\n }, [suggestionsIndex]);\n\n const onVariableSelect = React.useCallback(\n (item: VariableSuggestion, input = inputRef.current!) => {\n const curPos = input.selectionStart!;\n const x = input.value;\n\n if (x[startPos - 1] === '$') {\n input.value = x.slice(0, startPos) + item.value + x.slice(curPos);\n } else {\n input.value = x.slice(0, startPos) + '$' + `{${item.value}}` + x.slice(curPos);\n }\n\n setVariableValue(input.value);\n setShowingSuggestions(false);\n\n setSuggestionsIndex(0);\n onChange(input.value);\n },\n [onChange, startPos]\n );\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!showingSuggestions) {\n if (event.key === '$' || (event.key === ' ' && event.ctrlKey)) {\n setStartPos(inputRef.current!.selectionStart || 0);\n setShowingSuggestions(true);\n return;\n }\n return;\n }\n\n switch (event.key) {\n case 'Backspace':\n case 'Escape':\n case 'ArrowLeft':\n case 'ArrowRight':\n setShowingSuggestions(false);\n return setSuggestionsIndex(0);\n\n case 'Enter':\n event.preventDefault();\n return onVariableSelect(suggestions[suggestionsIndex]);\n\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n const direction = event.key === 'ArrowDown' ? 1 : -1;\n return setSuggestionsIndex((index) => modulo(index + direction, suggestions.length));\n default:\n return;\n }\n },\n [showingSuggestions, suggestions, suggestionsIndex, onVariableSelect]\n );\n\n const onValueChanged = React.useCallback((event: FormEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setVariableValue(event.currentTarget.value);\n }, []);\n\n const onBlur = React.useCallback(\n (event: FormEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n onChange(event.currentTarget.value);\n },\n [onChange]\n );\n\n useEffect(() => {\n setInputHeight(inputRef.current!.clientHeight);\n }, []);\n\n const inputProps = {\n placeholder,\n invalid,\n value: variableValue,\n onChange: onValueChanged,\n onBlur: onBlur,\n onKeyDown: onKeyDown,\n };\n\n return (\n <div className={styles.inputWrapper} style={style ?? {}}>\n {showingSuggestions && (\n <Portal>\n <div ref={refs.setFloating} style={floatingStyles} className={styles.suggestionsWrapper}>\n <ScrollContainer\n maxHeight=\"300px\"\n onScroll={(event) => setScrollTop(event.currentTarget.scrollTop ?? 0)}\n ref={scrollRef}\n >\n {/* This suggestion component has a specialized name,\n but is rather generalistic in implementation,\n so we're using it in transformations also.\n We should probably rename this to something more general. */}\n <DataLinkSuggestions\n activeRef={activeRef}\n suggestions={suggestions}\n onSuggestionSelect={onVariableSelect}\n onClose={() => setShowingSuggestions(false)}\n activeIndex={suggestionsIndex}\n />\n </ScrollContainer>\n </div>\n </Portal>\n )}\n {invalid && error && (\n <div className={styles.errorTooltip}>\n <FieldValidationMessage>{error}</FieldValidationMessage>\n </div>\n )}\n {type === HTMLElementType.InputElement ? (\n <Input {...inputProps} ref={handleRef as unknown as React.RefObject<HTMLInputElement>} autoFocus={autoFocus} />\n ) : (\n <TextArea\n {...inputProps}\n ref={handleRef as unknown as React.RefObject<HTMLTextAreaElement>}\n autoFocus={autoFocus}\n rows={5}\n />\n )}\n </div>\n );\n};\n\nSuggestionsInput.displayName = 'SuggestionsInput';\n\nfunction getElementPosition(suggestionElement: HTMLElement | null, activeIndex: number) {\n return (suggestionElement?.clientHeight ?? 0) * activeIndex;\n}\n","import { useAsync } from 'react-use';\n\nimport { t } from '@grafana/i18n';\nimport { Badge, IconSize, Tooltip } from '@grafana/ui';\nimport { getSvgSize } from '@grafana/ui/internal';\n\nimport { getPluginSettings } from '../../../plugins/pluginSettings';\n\ninterface PluginOriginBadgeProps {\n pluginId: string;\n size?: IconSize;\n}\n\nexport function PluginOriginBadge({ pluginId, size = 'md' }: PluginOriginBadgeProps) {\n const { value: pluginMeta, loading } = useAsync(() => getPluginSettings(pluginId));\n\n if (loading) {\n return null;\n }\n\n if (!pluginMeta) {\n return null;\n }\n\n const logo = pluginMeta.info.logos?.small;\n const pluginName = pluginMeta.name;\n const imageSize = getSvgSize(size);\n\n const badgeIcon = logo ? (\n <img src={logo} alt={pluginName} height={imageSize} />\n ) : (\n <Badge text={pluginId} color=\"orange\" />\n );\n\n return (\n <Tooltip\n content={t(\n 'alerting.plugin-origin-badge.tooltip-managed-by-plugin',\n 'This rule is managed by the {{pluginName}} plugin',\n { pluginName }\n )}\n >\n {badgeIcon}\n </Tooltip>\n );\n}\n","import { SceneGridItemLike, SceneGridLayout, VizPanel } from '@grafana/scenes';\nimport {\n Spec as DashboardV2Spec,\n GridLayoutItemKind,\n GridLayoutKind,\n RepeatOptions,\n Element,\n GridLayoutItemSpec,\n PanelKind,\n LibraryPanelKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\nimport { DashboardGridItem } from '../../scene/layout-default/DashboardGridItem';\nimport { DefaultGridLayoutManager } from '../../scene/layout-default/DefaultGridLayoutManager';\nimport { getIsLazy } from '../../scene/layouts-shared/utils';\nimport { dashboardSceneGraph } from '../../utils/dashboardSceneGraph';\nimport { calculateGridItemDimensions, isLibraryPanel } from '../../utils/utils';\n\nimport { buildLibraryPanel, buildVizPanel } from './utils';\n\nexport function serializeDefaultGridLayout(\n layoutManager: DefaultGridLayoutManager,\n isSnapshot?: boolean\n): DashboardV2Spec['layout'] {\n return {\n kind: 'GridLayout',\n spec: {\n items: getGridLayoutItems(layoutManager, isSnapshot),\n },\n };\n}\n\nexport function deserializeDefaultGridLayout(\n layout: DashboardV2Spec['layout'],\n elements: DashboardV2Spec['elements'],\n preload: boolean,\n panelIdGenerator?: () => number\n): DefaultGridLayoutManager {\n if (layout.kind !== 'GridLayout') {\n throw new Error('Invalid layout kind');\n }\n return new DefaultGridLayoutManager({\n grid: new SceneGridLayout({\n isLazy: getIsLazy(preload),\n children: createSceneGridLayoutForItems(layout, elements, panelIdGenerator),\n }),\n });\n}\n\nfunction getGridLayoutItems(body: DefaultGridLayoutManager, isSnapshot?: boolean): GridLayoutItemKind[] {\n let items: GridLayoutItemKind[] = [];\n for (const child of body.state.grid.state.children) {\n if (child instanceof DashboardGridItem) {\n // TODO: handle panel repeater scenario\n if (child.state.variableName) {\n items = items.concat(repeaterToLayoutItems(child, isSnapshot));\n } else {\n items.push(gridItemToGridLayoutItemKind(child));\n }\n }\n }\n\n return items;\n}\n\nexport function gridItemToGridLayoutItemKind(gridItem: DashboardGridItem, yOverride?: number): GridLayoutItemKind {\n let elementGridItem: GridLayoutItemKind | undefined;\n let x = 0,\n y = 0,\n width = 0,\n height = 0;\n\n let gridItem_ = gridItem;\n\n if (!(gridItem_.state.body instanceof VizPanel)) {\n throw new Error('DashboardGridItem body expected to be VizPanel');\n }\n\n // Get the grid position and size\n height = (gridItem_.state.variableName ? gridItem_.state.itemHeight : gridItem_.state.height) ?? 0;\n x = gridItem_.state.x ?? 0;\n y = gridItem_.state.y ?? 0;\n width = gridItem_.state.width ?? 0;\n const repeatVar = gridItem_.state.variableName;\n\n // For serialization we should retrieve the original element key\n let elementKey = dashboardSceneGraph.getElementIdentifierForVizPanel(gridItem_.state.body);\n\n elementGridItem = {\n kind: 'GridLayoutItem',\n spec: {\n x,\n y: yOverride ?? y,\n width: width,\n height: height,\n element: {\n kind: 'ElementReference',\n name: elementKey,\n },\n },\n };\n\n if (repeatVar) {\n const repeat: RepeatOptions = {\n mode: 'variable',\n value: repeatVar,\n };\n\n if (gridItem_.state.maxPerRow) {\n repeat.maxPerRow = gridItem_.getMaxPerRow();\n }\n\n if (gridItem_.state.repeatDirection) {\n repeat.direction = gridItem_.getRepeatDirection();\n }\n\n elementGridItem.spec.repeat = repeat;\n }\n\n if (!elementGridItem) {\n throw new Error('Unsupported grid item type');\n }\n\n return elementGridItem;\n}\n\nfunction repeaterToLayoutItems(repeater: DashboardGridItem, isSnapshot = false): GridLayoutItemKind[] {\n if (!isSnapshot) {\n return [gridItemToGridLayoutItemKind(repeater)];\n } else {\n if (repeater.state.body instanceof VizPanel && isLibraryPanel(repeater.state.body)) {\n // TODO: implement\n // const { x = 0, y = 0, width: w = 0, height: h = 0 } = repeater.state;\n // return [vizPanelToPanel(repeater.state.body, { x, y, w, h }, isSnapshot)];\n return [];\n }\n\n if (repeater.state.repeatedPanels) {\n const { h, w, columnCount } = calculateGridItemDimensions(repeater);\n const panels = repeater.state.repeatedPanels!.map((panel, index) => {\n let x = 0,\n y = 0;\n if (repeater.state.repeatDirection === 'v') {\n x = repeater.state.x!;\n y = index * h;\n } else {\n x = (index % columnCount) * w;\n y = repeater.state.y! + Math.floor(index / columnCount) * h;\n }\n\n const gridPos = { x, y, w, h };\n\n const result: GridLayoutItemKind = {\n kind: 'GridLayoutItem',\n spec: {\n x: gridPos.x,\n y: gridPos.y,\n width: gridPos.w,\n height: gridPos.h,\n repeat: {\n mode: 'variable',\n value: repeater.state.variableName!,\n maxPerRow: repeater.getMaxPerRow(),\n direction: repeater.state.repeatDirection,\n },\n element: {\n kind: 'ElementReference',\n name: panel.state.key!,\n },\n },\n };\n return result;\n });\n\n return panels;\n }\n return [];\n }\n}\n\nfunction createSceneGridLayoutForItems(\n layout: GridLayoutKind,\n elements: Record<string, Element>,\n panelIdGenerator?: () => number\n): SceneGridItemLike[] {\n const gridItems = layout.spec.items;\n\n return gridItems.map((item) => {\n if (item.kind === 'GridLayoutItem') {\n return deserializeGridItem(item, elements, panelIdGenerator);\n } else {\n throw new Error(`Unknown layout element kind: ${item.kind}`);\n }\n });\n}\n\nfunction buildGridItem(\n gridItem: GridLayoutItemSpec,\n panel: PanelKind | LibraryPanelKind,\n yOverride?: number,\n id?: number\n): DashboardGridItem {\n let vizPanel: VizPanel;\n if (panel.kind === 'Panel') {\n vizPanel = buildVizPanel(panel, id);\n } else {\n vizPanel = buildLibraryPanel(panel, id);\n }\n return new DashboardGridItem({\n key: `grid-item-${id ?? panel.spec.id}`,\n x: gridItem.x,\n y: yOverride ?? gridItem.y,\n width: gridItem.repeat?.direction === 'h' ? 24 : gridItem.width,\n height: gridItem.height,\n itemHeight: gridItem.height,\n body: vizPanel,\n variableName: gridItem.repeat?.value,\n repeatDirection: gridItem.repeat?.direction,\n maxPerRow: gridItem.repeat?.maxPerRow,\n });\n}\n\nexport function deserializeGridItem(\n item: GridLayoutItemKind,\n elements: DashboardV2Spec['elements'],\n panelIdGenerator?: () => number\n): DashboardGridItem {\n const panel = elements[item.spec.element.name];\n\n if (!panel) {\n throw new Error(`Panel with uid ${item.spec.element.name} not found in the dashboard elements`);\n }\n\n let id: number | undefined;\n if (panelIdGenerator) {\n id = panelIdGenerator();\n }\n return buildGridItem(item.spec, panel, undefined, id);\n}\n","import { AccessControlAction } from 'app/types/accessControl';\n\n/**\n * List of all permissions that allow templates read/write functionality\n */\n\nexport const PERMISSIONS_TEMPLATES = [\n AccessControlAction.AlertingTemplatesRead,\n AccessControlAction.AlertingTemplatesWrite,\n AccessControlAction.AlertingTemplatesDelete,\n];\n","import { GrafanaTheme2 } from '../themes/types';\nimport { DataFrame, Field, FieldType } from '../types/dataFrame';\nimport { TimeRange } from '../types/time';\n\nimport { getTimeField } from './processDataFrame';\n\nconst MAX_TIME_COMPARISONS = 100;\n\nexport function isTimeSeriesFrame(frame: DataFrame) {\n // If we have less than two frames we can't have a timeseries\n if (frame.fields.length < 2) {\n return false;\n }\n\n // Find a number field, as long as we have any number field this should work\n const numberField = frame.fields.find((field) => field.type === FieldType.number);\n\n // There are certain query types in which we will\n // get times but they will be the same or not be\n // in increasing order. To have a time-series the\n // times need to be ordered from past to present\n let timeFieldFound = false;\n for (const field of frame.fields) {\n if (isTimeSeriesField(field)) {\n timeFieldFound = true;\n break;\n }\n }\n\n return timeFieldFound && numberField !== undefined;\n}\n\nexport function isTimeSeriesFrames(data: DataFrame[]) {\n return !data.find((frame) => !isTimeSeriesFrame(frame));\n}\n\n/**\n * Determines if a field is a time field in ascending\n * order within the sampling range specified by\n * MAX_TIME_COMPARISONS\n *\n * @param field\n * @returns boolean\n */\nexport function isTimeSeriesField(field: Field) {\n if (field.type !== FieldType.time) {\n return false;\n }\n\n let greatestTime: number | null = null;\n let testWindow = field.values.length > MAX_TIME_COMPARISONS ? MAX_TIME_COMPARISONS : field.values.length;\n\n // Test up to the test window number of values\n for (let i = 0; i < testWindow; i++) {\n const time = field.values[i];\n\n // Check to see if the current time is greater than\n // the last time. If we get to the end then we\n // have a time series otherwise we return false\n if (greatestTime === null || (time !== null && time > greatestTime)) {\n greatestTime = time;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Indicates if there is any time field in the array of data frames\n * @param data\n */\nexport function anySeriesWithTimeField(data: DataFrame[]) {\n for (let i = 0; i < data.length; i++) {\n const timeField = getTimeField(data[i]);\n if (timeField.timeField !== undefined && timeField.timeIndex !== undefined) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Indicates if there is any time field in the data frame\n * @param data\n */\nexport function hasTimeField(data: DataFrame): boolean {\n return data.fields.some((field) => field.type === FieldType.time);\n}\n\n/**\n * Get row id based on the meta.uniqueRowIdFields attribute.\n * @param dataFrame\n * @param rowIndex\n */\nexport function getRowUniqueId(dataFrame: DataFrame, rowIndex: number) {\n if (dataFrame.meta?.uniqueRowIdFields === undefined) {\n return undefined;\n }\n return dataFrame.meta.uniqueRowIdFields.map((fieldIndex) => dataFrame.fields[fieldIndex].values[rowIndex]).join('-');\n}\n\n/**\n * Simple helper to add values to a data frame. Doesn't do any validation so make sure you are adding the right types\n * of values.\n * @param dataFrame\n * @param row Either an array of values or an object with keys that match the field names.\n */\nexport function addRow(dataFrame: DataFrame, row: Record<string, unknown> | unknown[]) {\n if (row instanceof Array) {\n for (let i = 0; i < row.length; i++) {\n dataFrame.fields[i].values.push(row[i]);\n }\n } else {\n for (const field of dataFrame.fields) {\n field.values.push(row[field.name]);\n }\n }\n try {\n dataFrame.length++;\n } catch (e) {\n // Unfortunate but even though DataFrame as interface defines length some implementation of DataFrame only have\n // length getter. In that case it will throw and so we just skip and assume they defined a `getter` for length that\n // does not need any external updating.\n }\n}\n\n/**\n * Aligns time range comparison data by adjusting timestamps and applying compare-specific styling\n * @param series - The DataFrame containing the comparison data\n * @param diff - The time difference in milliseconds to align the timestamps\n * @param theme - The Grafana theme for color calculations\n */\nexport function alignTimeRangeCompareData(series: DataFrame, diff: number, theme: GrafanaTheme2) {\n series.fields.forEach((field: Field) => {\n // Align compare series time stamps with reference series\n if (field.type === FieldType.time) {\n field.values = field.values.map((v: number) => {\n return diff < 0 ? v - diff : v + diff;\n });\n }\n\n field.config = {\n ...(field.config ?? {}),\n custom: {\n ...(field.config?.custom ?? {}),\n timeCompare: {\n diffMs: diff,\n isTimeShiftQuery: true,\n },\n },\n };\n\n // Apply visual styling for comparison series\n if (field.type === FieldType.number || field.type === FieldType.boolean || field.type === FieldType.enum) {\n field.config.custom = {\n ...(field.config.custom ?? {}),\n lineStyle: {\n fill: 'dash',\n dash: [1, 5, 4, 5],\n },\n };\n }\n });\n}\n\n/**\n * Checks if a time comparison frame needs alignment based on whether its first time is before the current time range.\n * Returns true if the first time in compare is before timeRange.from, indicating it needs shifting.\n * @param compareFrame - The frame with time comparison data\n * @param allFrames - Array of all frames to find the matching original frame\n * @param timeRange - The current panel time range\n * @returns true if alignment is needed\n */\nexport function shouldAlignTimeCompare(compareFrame: DataFrame, allFrames: DataFrame[], timeRange: TimeRange): boolean {\n // Find the matching original frame by removing '-compare' from refId\n const compareRefId = compareFrame.refId;\n if (!compareRefId || !compareRefId.endsWith('-compare')) {\n return false;\n }\n\n const originalRefId = compareRefId.replace('-compare', '');\n const originalFrame = allFrames.find(\n (frame) => frame.refId === originalRefId && !frame.meta?.timeCompare?.isTimeShiftQuery\n );\n\n if (!originalFrame) {\n return false;\n }\n\n // Find time fields\n const compareTimeField = compareFrame.fields.find((field) => field.type === FieldType.time);\n const originalTimeField = originalFrame.fields.find((field) => field.type === FieldType.time);\n\n if (!compareTimeField?.values.length || !originalTimeField?.values.length) {\n return false;\n }\n\n // Find first non-null time value from each frame\n const compareFirstTime = compareTimeField.values.find((value) => value != null);\n const originalFirstTime = originalTimeField.values.find((value) => value != null);\n\n if (compareFirstTime == null || originalFirstTime == null) {\n return false;\n }\n\n // Check if first non-null time value is before timeRange.from\n return compareFirstTime < timeRange.from.valueOf();\n}\n","import { KeyValue } from '../../types/data';\n\nimport { type DataSourcePluginContextType, type PluginContextType } from './PluginContext';\n\nexport function isDataSourcePluginContext<T extends KeyValue = KeyValue>(\n context: PluginContextType<T>\n): context is DataSourcePluginContextType<T> {\n return 'instanceSettings' in context && 'meta' in context;\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { endpoints } from 'app/features/browse-dashboards/api/browseDashboardsAPI';\nimport { FolderState, FolderDTO } from 'app/types/folders';\n\nexport const initialState: FolderState = {\n id: 0,\n uid: 'loading',\n title: 'loading',\n url: '',\n canSave: false,\n canDelete: false,\n hasChanged: false,\n version: 1,\n};\n\nconst loadFolderReducer = (state: FolderState, action: PayloadAction<FolderDTO>): FolderState => {\n return {\n ...state,\n ...action.payload,\n hasChanged: false,\n };\n};\n\nconst folderSlice = createSlice({\n name: 'folder',\n initialState,\n reducers: {\n loadFolder: loadFolderReducer,\n setFolderTitle: (state, action: PayloadAction<string>): FolderState => {\n return {\n ...state,\n title: action.payload,\n hasChanged: action.payload.trim().length > 0,\n };\n },\n },\n extraReducers: (builder) => {\n builder.addMatcher(endpoints.getFolder.matchFulfilled, loadFolderReducer);\n },\n});\n\nexport const { loadFolder, setFolderTitle } = folderSlice.actions;\n\nexport const folderReducer = folderSlice.reducer;\n\nexport default {\n folder: folderReducer,\n};\n","import { useCallback, useState } from 'react';\nimport { useAsync, useDebounce } from 'react-use';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Icon, Input, Modal, useStyles2 } from '@grafana/ui';\nimport { getConnectedDashboards } from 'app/features/library-panels/state/api';\nimport { getModalStyles } from 'app/features/library-panels/styles';\n\nimport { LibraryPanelBehavior } from '../scene/LibraryPanelBehavior';\n\ninterface Props {\n libraryPanel: LibraryPanelBehavior;\n isUnsavedPrompt?: boolean;\n onConfirm: () => void;\n onDismiss: () => void;\n onDiscard: () => void;\n}\n\nexport const SaveLibraryVizPanelModal = ({ libraryPanel, isUnsavedPrompt, onDismiss, onConfirm, onDiscard }: Props) => {\n const [searchString, setSearchString] = useState('');\n const dashState = useAsync(async () => {\n const searchHits = await getConnectedDashboards(libraryPanel.state.uid);\n if (searchHits && searchHits.length > 0) {\n return searchHits.map((dash) => dash.name);\n }\n\n return [];\n }, [libraryPanel.state.uid]);\n\n const [filteredDashboards, setFilteredDashboards] = useState<string[]>([]);\n useDebounce(\n () => {\n if (!dashState.value) {\n return setFilteredDashboards([]);\n }\n\n return setFilteredDashboards(\n dashState.value.filter((dashName) => dashName.toLowerCase().includes(searchString.toLowerCase()))\n );\n },\n 300,\n [dashState.value, searchString]\n );\n\n const styles = useStyles2(getModalStyles);\n const discardAndClose = useCallback(() => {\n onDiscard();\n }, [onDiscard]);\n\n const title = isUnsavedPrompt ? 'Unsaved library panel changes' : 'Save library panel';\n\n return (\n <Modal title={title} onDismiss={onDismiss} isOpen={true}>\n <div>\n <p className={styles.textInfo}>\n <Trans\n i18nKey=\"dashboard-scene.save-library-viz-panel-modal.affected-dashboards\"\n count={libraryPanel.state._loadedPanel?.meta?.connectedDashboards}\n >\n This update will affect <strong>{'{{count}}'} dashboards.</strong> The following dashboards using the panel\n will be affected:\n </Trans>\n </p>\n <Input\n className={styles.dashboardSearch}\n prefix={<Icon name=\"search\" />}\n placeholder={t(\n 'dashboard-scene.save-library-viz-panel-modal.placeholder-search-affected-dashboards',\n 'Search affected dashboards'\n )}\n value={searchString}\n onChange={(e) => setSearchString(e.currentTarget.value)}\n />\n {dashState.loading ? (\n <p>\n <Trans i18nKey=\"dashboard-scene.save-library-viz-panel-modal.loading-connected-dashboards\">\n Loading connected dashboards...\n </Trans>\n </p>\n ) : (\n <table className={styles.myTable}>\n <thead>\n <tr>\n <th>\n <Trans i18nKey=\"dashboard-scene.save-library-viz-panel-modal.dashboard-name\">Dashboard name</Trans>\n </th>\n </tr>\n </thead>\n <tbody>\n {filteredDashboards.map((dashName, i) => (\n <tr key={`dashrow-${i}`}>\n <td>{dashName}</td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n <Modal.ButtonRow>\n <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n <Trans i18nKey=\"dashboard-scene.save-library-viz-panel-modal.cancel\">Cancel</Trans>\n </Button>\n {isUnsavedPrompt && (\n <Button variant=\"destructive\" onClick={discardAndClose}>\n <Trans i18nKey=\"dashboard-scene.save-library-viz-panel-modal.discard\">Discard</Trans>\n </Button>\n )}\n <Button\n onClick={() => {\n onConfirm();\n }}\n >\n <Trans i18nKey=\"dashboard-scene.save-library-viz-panel-modal.update-all\">Update all</Trans>\n </Button>\n </Modal.ButtonRow>\n </div>\n </Modal>\n );\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { DataSourceApi } from '@grafana/data';\n\nimport { VariablePayload } from '../state/types';\nimport { VariableQueryEditorType } from '../types';\n\nexport interface AdHocVariableEditorState {\n infoText?: string;\n}\n\nexport interface DataSourceVariableEditorState {\n dataSourceTypes: Array<{ text: string; value: string }>;\n}\n\nexport interface QueryVariableEditorState {\n VariableQueryEditor: VariableQueryEditorType;\n dataSource: DataSourceApi | null;\n}\n\ntype VariableEditorExtension = AdHocVariableEditorState | DataSourceVariableEditorState | QueryVariableEditorState;\n\nexport interface VariableEditorState {\n id: string;\n name: string;\n errors: Record<string, string>;\n isValid: boolean;\n extended: VariableEditorExtension | null;\n}\n\nexport const initialVariableEditorState: VariableEditorState = {\n id: '',\n isValid: true,\n errors: {},\n name: '',\n extended: null,\n};\n\nconst variableEditorReducerSlice = createSlice({\n name: 'templating/editor',\n initialState: initialVariableEditorState,\n reducers: {\n variableEditorMounted: (state: VariableEditorState, action: PayloadAction<{ name: string; id: string }>) => {\n state.name = action.payload.name;\n state.id = action.payload.id;\n },\n variableEditorUnMounted: (state: VariableEditorState, action: PayloadAction<VariablePayload>) => {\n return initialVariableEditorState;\n },\n changeVariableNameSucceeded: (\n state: VariableEditorState,\n action: PayloadAction<VariablePayload<{ newName: string }>>\n ) => {\n state.name = action.payload.data.newName;\n delete state.errors['name'];\n state.isValid = Object.keys(state.errors).length === 0;\n },\n changeVariableNameFailed: (\n state: VariableEditorState,\n action: PayloadAction<{ newName: string; errorText: string }>\n ) => {\n state.name = action.payload.newName;\n state.errors.name = action.payload.errorText;\n state.isValid = Object.keys(state.errors).length === 0;\n },\n addVariableEditorError: (\n state: VariableEditorState,\n action: PayloadAction<{ errorProp: string; errorText: string }>\n ) => {\n state.errors[action.payload.errorProp] = action.payload.errorText;\n state.isValid = Object.keys(state.errors).length === 0;\n },\n removeVariableEditorError: (state: VariableEditorState, action: PayloadAction<{ errorProp: string }>) => {\n delete state.errors[action.payload.errorProp];\n state.isValid = Object.keys(state.errors).length === 0;\n },\n changeVariableEditorExtended: (state: VariableEditorState, action: PayloadAction<VariableEditorExtension>) => {\n state.extended = {\n ...state.extended,\n ...action.payload,\n };\n },\n cleanEditorState: () => initialVariableEditorState,\n },\n});\n\nexport const variableEditorReducer = variableEditorReducerSlice.reducer;\n\nexport const {\n changeVariableNameSucceeded,\n changeVariableNameFailed,\n variableEditorMounted,\n variableEditorUnMounted,\n changeVariableEditorExtended,\n addVariableEditorError,\n removeVariableEditorError,\n cleanEditorState,\n} = variableEditorReducerSlice.actions;\n","import { UrlQueryMap, urlUtil } from '@grafana/data';\nimport { config, locationService } from '@grafana/runtime';\n\nimport { DashboardScene } from '../scene/DashboardScene';\n\nexport const PRESERVED_SCENE_STATE_KEY = `grafana.dashboard.preservedUrlFiltersState`;\n\n// TODO - deal with all this complexity, more details here https://github.com/grafana/grafana/pull/104780\nexport function restoreDashboardStateFromLocalStorage(dashboard: DashboardScene) {\n const preservedUrlState = window.sessionStorage.getItem(PRESERVED_SCENE_STATE_KEY);\n\n if (preservedUrlState) {\n const preservedQueryParams = new URLSearchParams(preservedUrlState);\n const currentQueryParams = locationService.getSearch();\n const cleanedQueryParams = new URLSearchParams();\n\n // iterate over preserved query params and append them to current query params if they don't already exist\n preservedQueryParams.forEach((value, key) => {\n // if somehow there are keys set with no values, we append new key-value pairs,\n // but need to clean empty ones after this loop so we don't lose any values\n if (!currentQueryParams.has(key) || currentQueryParams.get(key) === '') {\n currentQueryParams.append(key, value);\n }\n });\n\n // remove empty values\n currentQueryParams.forEach((value, key) => {\n if (value !== '') {\n cleanedQueryParams.append(key, value);\n }\n });\n\n for (const key of Array.from(cleanedQueryParams.keys())) {\n // preserve non-variable query params, i.e. time range\n if (!key.startsWith('var-')) {\n continue;\n }\n\n // remove params for variables that are not present on the target dashboard\n if (!dashboard.state.$variables?.getByName(key.replace('var-', ''))) {\n cleanedQueryParams.delete(key);\n }\n }\n\n const finalParams = cleanedQueryParams.toString();\n if (finalParams) {\n locationService.replace({ search: finalParams });\n }\n }\n}\n\n/**\n * Scenes behavior that will capture currently selected variables and time range and save them to local storage, so that they can be applied when the next dashboard is loaded.\n */\nexport function preserveDashboardSceneStateInLocalStorage(search: URLSearchParams, uid?: string) {\n if (!config.featureToggles.preserveDashboardStateWhenNavigating) {\n return;\n }\n\n // Skipping saving state for default home dashboard\n if (!uid) {\n return;\n }\n\n const queryParams: Record<string, string> = {};\n search.forEach((value, key) => {\n queryParams[key] = value;\n });\n\n const urlStates: UrlQueryMap = Object.fromEntries(\n Object.entries(queryParams).filter(\n ([key]) => key.startsWith('var-') || key === 'from' || key === 'to' || key === 'timezone'\n )\n );\n\n const nonEmptyUrlStates = Object.fromEntries(\n Object.entries(urlStates).filter(([key, value]) => !(Array.isArray(value) && value.length === 0))\n );\n\n // If there's anything to preserve, save it to local storage\n if (Object.keys(nonEmptyUrlStates).length > 0) {\n window.sessionStorage.setItem(PRESERVED_SCENE_STATE_KEY, urlUtil.renderUrl('', nonEmptyUrlStates));\n } else {\n window.sessionStorage.removeItem(PRESERVED_SCENE_STATE_KEY);\n }\n}\n","// @ts-ignore\n\nimport type { AdHocVariableModel, TextBoxVariableModel, TypedVariableModel } from '@grafana/data';\nimport { Dashboard, Panel, VariableOption } from '@grafana/schema';\nimport {\n AdHocFilterWithLabels,\n AdhocVariableSpec,\n Spec as DashboardV2Spec,\n TextVariableSpec,\n VariableKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { ResponseTransformers } from 'app/features/dashboard/api/ResponseTransformers';\nimport { isDashboardV2Spec } from 'app/features/dashboard/api/utils';\nimport { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';\n\nimport { validateFiltersOrigin } from '../serialization/sceneVariablesSetToVariables';\nimport { jsonDiff } from '../settings/version-history/utils';\n\nexport function get(obj: any, keys: string[]) {\n try {\n let val = obj;\n for (const key of keys) {\n val = val[key];\n }\n return val;\n } catch (err) {\n return undefined;\n }\n}\n\nexport function deepEqual(a: string | string[], b: string | string[]) {\n return (\n typeof a === typeof b &&\n ((typeof a === 'string' && a === b) ||\n (Array.isArray(a) && a.length === b.length && a.every((val, i) => val === b[i])))\n );\n}\n\nexport function isEqual(a: VariableOption | undefined, b: VariableOption | undefined) {\n return a === b || (a && b && a.selected === b.selected && deepEqual(a.text, b.text) && deepEqual(a.value, b.value));\n}\n\nexport function getRawDashboardV2Changes(\n initial: DashboardV2Spec | Dashboard,\n changed: DashboardV2Spec,\n saveTimeRange?: boolean,\n saveVariables?: boolean,\n saveRefresh?: boolean\n) {\n // Transform initial dashboard values to v2 spec format to ensure consistent comparison of time settings,\n // variables and refresh values. This handles cases where the initial dashboard is in v1 format\n // but was converted to v2 during runtime due to dynamic dashboard features being used.\n const initialSaveModel = convertToV2SpecIfNeeded(initial);\n const changedSaveModel = changed;\n const hasTimeChanged = getHasTimeChanged(changedSaveModel.timeSettings, initialSaveModel.timeSettings);\n const hasVariableValueChanges = applyVariableChangesV2(changedSaveModel, initialSaveModel, saveVariables);\n const hasRefreshChanged = changedSaveModel.timeSettings.autoRefresh !== initialSaveModel.timeSettings.autoRefresh;\n\n if (!saveTimeRange) {\n changedSaveModel.timeSettings.from = initialSaveModel.timeSettings.from;\n changedSaveModel.timeSettings.to = initialSaveModel.timeSettings.to;\n }\n\n if (!saveRefresh) {\n changedSaveModel.timeSettings.autoRefresh = initialSaveModel.timeSettings.autoRefresh;\n }\n\n // Calculate differences using the non-transformed to v2 spec values to be able to compare the initial and changed dashboard values\n const diff = jsonDiff(initial, changedSaveModel);\n const diffCount = Object.values(diff).reduce((acc, cur) => acc + cur.length, 0);\n\n return {\n changedSaveModel,\n initialSaveModel,\n diffs: diff,\n diffCount,\n hasChanges: diffCount > 0,\n hasTimeChanges: hasTimeChanged,\n hasVariableValueChanges,\n hasRefreshChange: hasRefreshChanged,\n hasMigratedToV2: !isDashboardV2Spec(initial),\n };\n}\n\nfunction convertToV2SpecIfNeeded(initial: DashboardV2Spec | Dashboard): DashboardV2Spec {\n if (isDashboardV2Spec(initial)) {\n return initial;\n }\n\n const dto: DashboardDTO = {\n dashboard: initial as DashboardDataDTO,\n meta: {},\n };\n return ResponseTransformers.ensureV2Response(dto).spec;\n}\n\nexport function getRawDashboardChanges(\n initial: Dashboard,\n changed: Dashboard,\n saveTimeRange?: boolean,\n saveVariables?: boolean,\n saveRefresh?: boolean\n) {\n const initialSaveModel = initial;\n const changedSaveModel = changed;\n const hasTimeChanged = getHasTimeChanged(changedSaveModel.time, initialSaveModel.time);\n const hasVariableValueChanges = applyVariableChanges(changedSaveModel, initialSaveModel, saveVariables);\n const hasRefreshChanged = changedSaveModel.refresh !== initialSaveModel.refresh;\n\n if (!saveTimeRange) {\n changedSaveModel.time = initialSaveModel.time;\n }\n\n if (!saveRefresh) {\n changedSaveModel.refresh = initialSaveModel.refresh;\n }\n\n const diff = jsonDiff(initialSaveModel, changedSaveModel);\n const diffCount = Object.values(diff).reduce((acc, cur) => acc + cur.length, 0);\n\n return {\n changedSaveModel,\n initialSaveModel,\n diffs: diff,\n diffCount,\n hasChanges: diffCount > 0,\n hasTimeChanges: hasTimeChanged,\n isNew: changedSaveModel.version === 0,\n hasVariableValueChanges,\n hasRefreshChange: hasRefreshChanged,\n };\n}\n\ninterface DefaultPersistedTimeValue {\n from?: string;\n to?: string;\n}\nexport function getHasTimeChanged(\n newRange: DefaultPersistedTimeValue = {},\n previousRange: DefaultPersistedTimeValue = {}\n) {\n return newRange.from !== previousRange.from || newRange.to !== previousRange.to;\n}\n\nexport function adHocVariableFiltersEqual(filtersA?: AdHocFilterWithLabels[], filtersB?: AdHocFilterWithLabels[]) {\n if (filtersA === undefined && filtersB === undefined) {\n console.warn('Adhoc variable filter property is undefined');\n return true;\n }\n\n if ((filtersA === undefined && filtersB !== undefined) || (filtersB === undefined && filtersA !== undefined)) {\n console.warn('Adhoc variable filter property is undefined');\n return false;\n }\n\n if (filtersA?.length !== filtersB?.length) {\n return false;\n }\n\n for (let i = 0; i < (filtersA?.length ?? 0); i++) {\n const aFilter = filtersA?.[i];\n const bFilter = filtersB?.[i];\n if (aFilter?.key !== bFilter?.key || aFilter?.operator !== bFilter?.operator || aFilter?.value !== bFilter?.value) {\n return false;\n }\n }\n return true;\n}\n\nexport function applyVariableChangesV2(\n saveModel: DashboardV2Spec,\n originalSaveModel: DashboardV2Spec,\n saveVariables?: boolean\n) {\n const originalVariables = originalSaveModel.variables ?? [];\n const variablesToSave = saveModel.variables ?? [];\n let hasVariableValueChanges = false;\n\n for (const variable of variablesToSave) {\n const hasCurrentValueToSave = (v: VariableKind) =>\n v.kind === 'QueryVariable' ||\n v.kind === 'CustomVariable' ||\n v.kind === 'DatasourceVariable' ||\n v.kind === 'ConstantVariable' ||\n v.kind === 'IntervalVariable' ||\n v.kind === 'TextVariable' ||\n v.kind === 'GroupByVariable';\n\n const hasOptionsToSave = (v: VariableKind) =>\n v.kind === 'QueryVariable' ||\n v.kind === 'CustomVariable' ||\n v.kind === 'DatasourceVariable' ||\n v.kind === 'IntervalVariable' ||\n v.kind === 'GroupByVariable';\n\n const original = originalVariables.find(\n ({ spec, kind }) => spec.name === variable.spec.name && kind === variable.kind\n );\n\n if (!original) {\n continue;\n }\n\n if (\n hasCurrentValueToSave(variable) &&\n hasCurrentValueToSave(original) &&\n !isEqual(variable.spec.current, original.spec.current)\n ) {\n hasVariableValueChanges = true;\n } else if (\n variable.kind === 'AdhocVariable' &&\n original.kind === 'AdhocVariable' &&\n !adHocVariableFiltersEqual(variable.spec.filters, original.spec.filters)\n ) {\n hasVariableValueChanges = true;\n }\n\n if (!saveVariables) {\n if (variable.kind === 'AdhocVariable') {\n variable.spec.filters = (original.spec as AdhocVariableSpec).filters;\n } else if (variable.kind === 'TextVariable') {\n variable.spec.query = (original.spec as TextVariableSpec).query;\n }\n\n if (variable.kind !== 'AdhocVariable') {\n if (hasCurrentValueToSave(variable) && hasCurrentValueToSave(original)) {\n variable.spec.current = original.spec.current;\n }\n if (hasOptionsToSave(variable) && hasOptionsToSave(original)) {\n variable.spec.options = original.spec.options;\n }\n }\n }\n }\n\n return hasVariableValueChanges;\n}\n\nexport function applyVariableChanges(saveModel: Dashboard, originalSaveModel: Dashboard, saveVariables?: boolean) {\n const originalVariables = originalSaveModel.templating?.list ?? [];\n const variablesToSave = saveModel.templating?.list ?? [];\n let hasVariableValueChanges = false;\n\n for (const variable of variablesToSave) {\n const original = originalVariables.find(({ name, type }) => name === variable.name && type === variable.type);\n\n if (!original) {\n continue;\n }\n\n // Old schema property that never should be in persisted model\n if (original.current) {\n delete original.current.selected;\n }\n\n if (!isEqual(variable.current, original.current)) {\n hasVariableValueChanges = true;\n } else if (\n variable.type === 'adhoc' &&\n !adHocVariableFiltersEqual(\n validateFiltersOrigin((variable as AdHocVariableModel | undefined)?.filters),\n validateFiltersOrigin((original as AdHocVariableModel | undefined)?.filters)\n )\n ) {\n hasVariableValueChanges = true;\n }\n\n if (!saveVariables) {\n const typed = variable as TypedVariableModel;\n\n if (typed.type === 'adhoc') {\n typed.filters = (original as AdHocVariableModel).filters;\n } else if (typed.type === 'textbox') {\n typed.query = (original as TextBoxVariableModel).query;\n }\n\n if (typed.type !== 'adhoc') {\n variable.current = original.current;\n variable.options = original.options;\n }\n }\n }\n\n return hasVariableValueChanges;\n}\n\nexport function getPanelChanges(saveModel: Panel, originalSaveModel: Panel) {\n const diff = jsonDiff(originalSaveModel, saveModel);\n const diffCount = Object.values(diff).reduce((acc, cur) => acc + cur.length, 0);\n\n return {\n changedSaveModel: saveModel,\n initialSaveModel: originalSaveModel,\n diffs: diff,\n diffCount,\n hasChanges: diffCount > 0,\n };\n}\n","import { StandardEditorProps, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Stack, RadioButtonGroup } from '@grafana/ui';\n\nimport { InputPrefix, NullsThresholdInput } from './NullsThresholdInput';\n\ntype Props = StandardEditorProps<boolean | number, { isTime: boolean }>;\n\nexport const InsertNullsEditor = ({ value, onChange, item }: Props) => {\n const DISCONNECT_OPTIONS: Array<SelectableValue<boolean | number>> = [\n {\n label: t('timeseries.insert-nulls-editor.disconnect-options.label-never', 'Never'),\n value: false,\n },\n {\n label: t('timeseries.insert-nulls-editor.disconnect-options.label-threshold', 'Threshold'),\n value: 3600000, // 1h\n },\n ];\n const isThreshold = typeof value === 'number';\n DISCONNECT_OPTIONS[1].value = isThreshold ? value : 3600000; // 1h\n\n return (\n <Stack>\n <RadioButtonGroup value={value} options={DISCONNECT_OPTIONS} onChange={onChange} />\n {isThreshold && (\n <NullsThresholdInput\n value={value}\n onChange={onChange}\n inputPrefix={InputPrefix.GreaterThan}\n isTime={item.settings?.isTime ?? false}\n />\n )}\n </Stack>\n );\n};\n","import { cx, css } from '@emotion/css';\nimport { cloneElement, ReactNode } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { getChildId } from '../../utils/reactUtils';\nimport { PopoverContent } from '../Tooltip/types';\n\nimport { FieldProps } from './Field';\nimport { FieldValidationMessage } from './FieldValidationMessage';\nimport { InlineLabel } from './InlineLabel';\n\nexport interface Props extends Omit<FieldProps, 'css' | 'horizontal' | 'description' | 'error'> {\n /** Content for the label's tooltip */\n tooltip?: PopoverContent;\n /** Custom width for the label as a multiple of 8px */\n labelWidth?: number | 'auto';\n /** Make the field's child to fill the width of the row. Equivalent to setting `flex-grow:1` on the field */\n grow?: boolean;\n /** Make the field's child shrink with width of the row. Equivalent to setting `flex-shrink:1` on the field */\n shrink?: boolean;\n /** Make field's background transparent */\n transparent?: boolean;\n /** Error message to display */\n error?: ReactNode;\n htmlFor?: string;\n /** Make tooltip interactive */\n interactive?: boolean;\n}\n\n/**\n * A basic component for rendering form elements, like `Input`, `Checkbox`, `Combobox`, etc, inline together with `InlineLabel`. If the child element has `id` specified, the label's `htmlFor` attribute, pointing to the id, will be added.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-inlinefield--docs\n */\nexport const InlineField = ({\n children,\n label,\n tooltip,\n labelWidth = 'auto',\n invalid,\n loading,\n disabled,\n required,\n className,\n htmlFor,\n grow,\n shrink,\n error,\n transparent,\n interactive,\n validationMessageHorizontalOverflow,\n ...htmlProps\n}: Props) => {\n const theme = useTheme2();\n const styles = getStyles(theme, grow, shrink);\n const inputId = htmlFor ?? getChildId(children);\n\n const labelElement =\n typeof label === 'string' ? (\n <InlineLabel\n interactive={interactive}\n width={labelWidth}\n tooltip={tooltip}\n htmlFor={inputId}\n transparent={transparent}\n >\n {`${label}${required ? ' *' : ''}`}\n </InlineLabel>\n ) : (\n label\n );\n\n return (\n <div className={cx(styles.container, className)} {...htmlProps}>\n {labelElement}\n <div className={styles.childContainer}>\n {cloneElement(children, { invalid, disabled, loading })}\n {invalid && error && (\n <div\n className={cx(styles.fieldValidationWrapper, {\n [styles.validationMessageHorizontalOverflow]: !!validationMessageHorizontalOverflow,\n })}\n >\n <FieldValidationMessage>{error}</FieldValidationMessage>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nInlineField.displayName = 'InlineField';\n\nconst getStyles = (theme: GrafanaTheme2, grow?: boolean, shrink?: boolean) => {\n return {\n container: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n textAlign: 'left',\n position: 'relative',\n flex: `${grow ? 1 : 0} ${shrink ? 1 : 0} auto`,\n margin: `0 ${theme.spacing(0.5)} ${theme.spacing(0.5)} 0`,\n }),\n childContainer: css({\n flex: `${grow ? 1 : 0} ${shrink ? 1 : 0} auto`,\n }),\n fieldValidationWrapper: css({\n marginTop: theme.spacing(0.5),\n }),\n validationMessageHorizontalOverflow: css({\n width: 0,\n overflowX: 'visible',\n\n '& > *': {\n whiteSpace: 'nowrap',\n },\n }),\n };\n};\n","import { Observable, of } from 'rxjs';\n\nimport { AnnotationEvent } from '@grafana/data';\n\nimport { DashboardModel } from '../../../dashboard/state/DashboardModel';\n\nimport { DashboardQueryRunnerOptions, DashboardQueryRunnerWorker, DashboardQueryRunnerWorkerResult } from './types';\nimport { emptyResult, getAnnotationsByPanelId, translateQueryResult } from './utils';\n\nexport class SnapshotWorker implements DashboardQueryRunnerWorker {\n canWork({ dashboard }: DashboardQueryRunnerOptions): boolean {\n return dashboard?.annotations?.list?.some((a) => a.enable && Boolean(a.snapshotData));\n }\n\n work(options: DashboardQueryRunnerOptions): Observable<DashboardQueryRunnerWorkerResult> {\n if (!this.canWork(options)) {\n return emptyResult();\n }\n\n const annotations = this.getAnnotationsFromSnapshot(options.dashboard);\n return of({ annotations, alertStates: [] });\n }\n\n private getAnnotationsFromSnapshot(dashboard: DashboardModel): AnnotationEvent[] {\n const dashAnnotations = dashboard?.annotations?.list?.filter((a) => a.enable);\n const snapshots = dashAnnotations.filter((a) => Boolean(a.snapshotData));\n const annotations = snapshots.reduce<AnnotationEvent[]>(\n (acc, curr) => acc.concat(translateQueryResult(curr, curr.snapshotData)),\n []\n );\n\n return annotations;\n }\n\n getAnnotationsInSnapshot(dashboard: DashboardModel, panelId?: number): AnnotationEvent[] {\n const annotations = this.getAnnotationsFromSnapshot(dashboard);\n return getAnnotationsByPanelId(annotations, panelId);\n }\n}\n","import { css } from '@emotion/css';\nimport { useMemo, useCallback } from 'react';\nimport * as React from 'react';\n\nimport {\n FieldMatcherID,\n fieldMatchers,\n FieldValueMatcherConfig,\n fieldReducers,\n ReducerID,\n SelectableValue,\n GrafanaTheme2,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ComparisonOperation } from '@grafana/schema';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Input } from '../Input/Input';\nimport { Select } from '../Select/Select';\n\nimport { MatcherUIProps, FieldMatcherUIRegistryItem } from './types';\n\ntype Props = MatcherUIProps<FieldValueMatcherConfig>;\n\nexport const comparisonOperationOptions = [\n { label: '==', value: ComparisonOperation.EQ },\n { label: '!=', value: ComparisonOperation.NEQ },\n { label: '>', value: ComparisonOperation.GT },\n { label: '>=', value: ComparisonOperation.GTE },\n { label: '<', value: ComparisonOperation.LT },\n { label: '<=', value: ComparisonOperation.LTE },\n];\n\n// This should move to a utility function on the reducer registry\nfunction isBooleanReducer(r: ReducerID) {\n return r === ReducerID.allIsNull || r === ReducerID.allIsZero;\n}\n\nexport const FieldValueMatcherEditor = ({ options, onChange }: Props) => {\n const styles = useStyles2(getStyles);\n const reducer = useMemo(() => fieldReducers.selectOptions([options?.reducer]), [options?.reducer]);\n\n const onSetReducer = useCallback(\n (selection: SelectableValue<string>) => {\n return onChange({ ...options, reducer: selection.value! as ReducerID });\n },\n [options, onChange]\n );\n\n const onChangeOp = useCallback(\n (v: SelectableValue<ComparisonOperation>) => {\n return onChange({ ...options, op: v.value! });\n },\n [options, onChange]\n );\n\n const onChangeValue = useCallback(\n (e: React.FormEvent<HTMLInputElement>) => {\n const value = e.currentTarget.valueAsNumber;\n return onChange({ ...options, value });\n },\n [options, onChange]\n );\n\n const opts = options ?? {};\n const isBool = isBooleanReducer(opts.reducer);\n\n return (\n <div className={styles.spot}>\n <Select\n value={reducer.current}\n options={reducer.options}\n onChange={onSetReducer}\n placeholder={t('grafana-ui.field-value-matcher.select-field-placeholder', 'Select field reducer')}\n />\n {opts.reducer && !isBool && (\n <>\n <Select\n value={comparisonOperationOptions.find((v) => v.value === opts.op)}\n options={comparisonOperationOptions}\n onChange={onChangeOp}\n aria-label={t('grafana-ui.field-value-matcher.operator-label', 'Comparison operator')}\n width={19}\n />\n\n <Input type=\"number\" value={opts.value} onChange={onChangeValue} />\n </>\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n spot: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignContent: 'flex-end',\n gap: '4px',\n }),\n };\n};\n\nexport const getFieldValueMatcherItem: () => FieldMatcherUIRegistryItem<FieldValueMatcherConfig> = () => ({\n id: FieldMatcherID.byValue,\n component: FieldValueMatcherEditor,\n matcher: fieldMatchers.get(FieldMatcherID.byValue),\n name: t('grafana-ui.matchers-ui.name-fields-with-value', 'Fields with values'),\n description: t(\n 'grafana-ui.matchers-ui.description-fields-with-value',\n 'Set properties for fields with reducer condition'\n ),\n optionsToLabel: (options) => `${options?.reducer} ${options?.op} ${options?.value}`,\n});\n","import { useCallback, useState } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneObject } from '@grafana/scenes';\nimport { Button, Field, Modal, Input, Alert, TextLink } from '@grafana/ui';\nimport { RepeatRowSelect2 } from 'app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect';\nimport { SHARED_DASHBOARD_QUERY } from 'app/plugins/datasource/dashboard/constants';\n\nexport type OnRowOptionsUpdate = (title: string, repeat?: string | null) => void;\n\nexport interface Props {\n title: string;\n repeat?: string;\n sceneContext: SceneObject;\n onUpdate: OnRowOptionsUpdate;\n onCancel: () => void;\n isUsingDashboardDS: boolean;\n}\n\nexport const RowOptionsForm = ({ repeat, title, sceneContext, isUsingDashboardDS, onUpdate, onCancel }: Props) => {\n const [newRepeat, setNewRepeat] = useState<string | undefined>(repeat);\n const onChangeRepeat = useCallback((name?: string) => setNewRepeat(name), [setNewRepeat]);\n\n const { handleSubmit, register } = useForm({\n defaultValues: { title },\n });\n\n const submit = (formData: { title: string }) => {\n onUpdate(formData.title, newRepeat);\n };\n\n return (\n <form onSubmit={handleSubmit(submit)}>\n <Field label={t('dashboard.default-layout.row-options.form.title', 'Title')}>\n <Input {...register('title')} type=\"text\" />\n </Field>\n <Field label={t('dashboard.default-layout.row-options.form.repeat-for.label', 'Repeat for')}>\n <RepeatRowSelect2 sceneContext={sceneContext} repeat={newRepeat} onChange={onChangeRepeat} />\n </Field>\n {isUsingDashboardDS && (\n <Alert\n data-testid={selectors.pages.Dashboard.Rows.Repeated.ConfigSection.warningMessage}\n severity=\"warning\"\n title=\"\"\n topSpacing={3}\n bottomSpacing={0}\n >\n <div>\n <p>\n <Trans i18nKey=\"dashboard.default-layout.row-options.form.repeat-for.warning.text\">\n Panels in this row use the {{ SHARED_DASHBOARD_QUERY }} data source. These panels will reference the\n panel in the original row, not the ones in the repeated rows.\n </Trans>\n </p>\n <TextLink\n external\n href={\n 'https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/create-dashboard/#configure-repeating-rows'\n }\n >\n <Trans i18nKey=\"dashboard.default-layout.row-options.form.repeat-for.learn-more\">Learn more</Trans>\n </TextLink>\n </div>\n </Alert>\n )}\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"dashboard.default-layout.row-options.form.cancel\">Cancel</Trans>\n </Button>\n <Button type=\"submit\">\n <Trans i18nKey=\"dashboard.default-layout.row-options.form.update\">Update</Trans>\n </Button>\n </Modal.ButtonRow>\n </form>\n );\n};\n","import { css } from '@emotion/css';\n\nimport { t } from '@grafana/i18n';\nimport { SceneObject } from '@grafana/scenes';\nimport { Modal, useStyles2 } from '@grafana/ui';\n\nimport { OnRowOptionsUpdate, RowOptionsForm } from './RowOptionsForm';\n\nexport interface RowOptionsModalProps {\n title: string;\n repeat?: string;\n parent: SceneObject;\n isUsingDashboardDS: boolean;\n onDismiss: () => void;\n onUpdate: OnRowOptionsUpdate;\n}\n\nexport const RowOptionsModal = ({\n repeat,\n title,\n parent,\n onDismiss,\n onUpdate,\n isUsingDashboardDS,\n}: RowOptionsModalProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <Modal\n isOpen={true}\n title={t('dashboard.default-layout.row-options.modal.title', 'Row options')}\n onDismiss={onDismiss}\n className={styles.modal}\n >\n <RowOptionsForm\n sceneContext={parent}\n repeat={repeat}\n title={title}\n onCancel={onDismiss}\n onUpdate={onUpdate}\n isUsingDashboardDS={isUsingDashboardDS}\n />\n </Modal>\n );\n};\n\nconst getStyles = () => ({\n modal: css({\n label: 'RowOptionsModal',\n width: '500px',\n }),\n});\n","import { t } from '@grafana/i18n';\nimport { SceneObject } from '@grafana/scenes';\nimport { Icon, ModalsController } from '@grafana/ui';\n\nimport { OnRowOptionsUpdate } from './RowOptionsForm';\nimport { RowOptionsModal } from './RowOptionsModal';\n\nexport interface RowOptionsButtonProps {\n title: string;\n repeat?: string;\n parent: SceneObject;\n onUpdate: OnRowOptionsUpdate;\n isUsingDashboardDS: boolean;\n}\n\nexport const RowOptionsButton = ({ repeat, title, parent, onUpdate, isUsingDashboardDS }: RowOptionsButtonProps) => {\n return (\n <ModalsController>\n {({ showModal, hideModal }) => {\n return (\n <button\n type=\"button\"\n className=\"pointer\"\n aria-label={t('dashboard.default-layout.row-options.button.label', 'Row options')}\n onClick={() => {\n showModal(RowOptionsModal, {\n title,\n repeat,\n parent,\n onDismiss: hideModal,\n onUpdate: (title: string, repeat?: string | null) => {\n onUpdate(title, repeat);\n hideModal();\n },\n isUsingDashboardDS,\n });\n }}\n >\n <Icon name=\"cog\" />\n </button>\n );\n }}\n </ModalsController>\n );\n};\n\nRowOptionsButton.displayName = 'RowOptionsButton';\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { SceneComponentProps, VizPanel } from '@grafana/scenes';\nimport { Icon, useStyles2 } from '@grafana/ui';\nimport { SHARED_DASHBOARD_QUERY } from 'app/plugins/datasource/dashboard/constants';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\n\nimport { getQueryRunnerFor, useDashboard, useDashboardState } from '../../../utils/utils';\nimport { DashboardGridItem } from '../DashboardGridItem';\nimport { RowRepeaterBehavior } from '../RowRepeaterBehavior';\n\nimport { RowActions } from './RowActions';\nimport { RowOptionsButton } from './RowOptionsButton';\n\nexport function RowActionsRenderer({ model }: SceneComponentProps<RowActions>) {\n const row = model.getParent();\n const { title, children } = row.useState();\n const dashboard = useDashboard(model);\n const { meta, isEditing } = useDashboardState(model);\n const styles = useStyles2(getStyles);\n\n const isUsingDashboardDS = useMemo(\n () =>\n children.some((gridItem) => {\n if (!(gridItem instanceof DashboardGridItem)) {\n return false;\n }\n\n if (gridItem.state.body instanceof VizPanel) {\n const runner = getQueryRunnerFor(gridItem.state.body);\n return (\n runner?.state.datasource?.uid === SHARED_DASHBOARD_QUERY ||\n (runner?.state.datasource?.uid === MIXED_DATASOURCE_NAME &&\n runner?.state.queries.some((query) => query.datasource?.uid === SHARED_DASHBOARD_QUERY))\n );\n }\n\n return false;\n }),\n [children]\n );\n\n const behaviour = row.state.$behaviors?.find((b) => b instanceof RowRepeaterBehavior);\n\n return (\n <>\n {meta.canEdit && isEditing && (\n <>\n <div className={styles.rowActions}>\n <RowOptionsButton\n title={title}\n repeat={behaviour instanceof RowRepeaterBehavior ? behaviour.state.variableName : undefined}\n parent={dashboard}\n onUpdate={(title, repeat) => model.onUpdate(title, repeat)}\n isUsingDashboardDS={isUsingDashboardDS}\n />\n <button\n type=\"button\"\n onClick={() => model.onDelete()}\n aria-label={t('dashboard.default-layout.row-actions.delete', 'Delete row')}\n >\n <Icon name=\"trash-alt\" />\n </button>\n </div>\n </>\n )}\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n rowActions: css({\n color: theme.colors.text.secondary,\n lineHeight: '27px',\n\n button: {\n color: theme.colors.text.secondary,\n paddingLeft: theme.spacing(2),\n background: 'transparent',\n border: 'none',\n\n '&:hover': {\n color: theme.colors.text.maxContrast,\n },\n },\n }),\n };\n};\n","import { t } from '@grafana/i18n';\nimport { sceneGraph, SceneGridRow, SceneObjectBase, SceneObjectState } from '@grafana/scenes';\nimport appEvents from 'app/core/app_events';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport { DefaultGridLayoutManager } from '../DefaultGridLayoutManager';\nimport { RowRepeaterBehavior } from '../RowRepeaterBehavior';\n\nimport { RowActionsRenderer } from './RowActionsRenderer';\n\nexport interface RowActionsState extends SceneObjectState {}\n\nexport class RowActions extends SceneObjectBase<RowActionsState> {\n static Component = RowActionsRenderer;\n\n public getParent(): SceneGridRow {\n if (!(this.parent instanceof SceneGridRow)) {\n throw new Error('RowActions must have a SceneGridRow parent');\n }\n\n return this.parent;\n }\n\n public removeRow(removePanels?: boolean) {\n const manager = sceneGraph.getAncestor(this, DefaultGridLayoutManager);\n manager.removeRow(this.getParent(), removePanels);\n }\n\n public onUpdate(title: string, repeat: string | null | undefined) {\n const row = this.getParent();\n let repeatBehavior: RowRepeaterBehavior | undefined;\n\n if (row.state.$behaviors) {\n for (let b of row.state.$behaviors) {\n if (b instanceof RowRepeaterBehavior) {\n repeatBehavior = b;\n }\n }\n }\n\n if (title !== row.state.title) {\n row.setState({ title });\n }\n\n if (repeat) {\n // Remove repeat behavior if it exists to re-trigger repeat when adding new one\n if (repeatBehavior) {\n repeatBehavior.removeBehavior();\n }\n\n repeatBehavior = new RowRepeaterBehavior({ variableName: repeat });\n row.setState({ $behaviors: [...(row.state.$behaviors ?? []), repeatBehavior] });\n } else {\n repeatBehavior?.removeBehavior();\n }\n }\n\n public onDelete() {\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard.default-layout.row-actions.modal.title', 'Delete row'),\n text: t(\n 'dashboard.default-layout.row-actions.modal.text',\n 'Are you sure you want to remove this row and all its panels?'\n ),\n altActionText: t('dashboard.default-layout.row-actions.modal.alt-action', 'Delete row only'),\n icon: 'trash-alt',\n onConfirm: () => this.removeRow(true),\n onAltAction: () => this.removeRow(),\n })\n );\n }\n}\n","import { css } from '@emotion/css';\nimport { ChangeEvent } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Icon, InlineField, InlineLabel, TextArea, Toggletip, useStyles2, Stack, TextLink } from '@grafana/ui';\n\nimport { ExpressionQuery } from '../types';\n\ninterface Props {\n labelWidth: number | 'auto';\n query: ExpressionQuery;\n onChange: (query: ExpressionQuery) => void;\n onRunQuery: () => void;\n}\n\nconst mathPlaceholder =\n 'Math operations on one or more queries. You reference the query by ${refId} ie. $A, $B, $C etc\\n' +\n 'The sum of two scalar values: $A + $B > 10';\n\nexport const Math = ({ labelWidth, onChange, query, onRunQuery }: Props) => {\n const onExpressionChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n onChange({ ...query, expression: event.target.value });\n };\n\n const styles = useStyles2(getStyles);\n\n const executeQuery = () => {\n if (query.expression) {\n onRunQuery();\n }\n };\n\n return (\n <Stack>\n <InlineField\n label={\n <InlineLabel width=\"auto\">\n <Toggletip\n fitContent\n content={\n <div className={styles.documentationContainer}>\n <div>\n <Trans\n i18nKey=\"expressions.math.run-math-operations\"\n values={{\n refExample: '${refId}',\n ref1: '$A',\n ref2: '$B',\n ref3: '$C',\n example: '$A + $B',\n }}\n >\n Run math operations on one or more queries. You reference the query by {'{{refExample}}'} ie.{' '}\n {'{{ref1}}'}, {'{{ref2}}'}, {'{{ref3}}'}\n etc.\n <br />\n Example: <code>{'{{example}}'}</code>\n </Trans>\n </div>\n <header className={styles.documentationHeader}>\n <Trans i18nKey=\"expressions.math.available-math-functions\">Available math functions</Trans>\n </header>\n <div className={styles.documentationFunctions}>\n <DocumentedFunction\n name=\"abs\"\n description={t(\n 'expression.math.description-abs',\n 'Returns the absolute value of its argument which can be a number or a series'\n )}\n />\n <DocumentedFunction\n name=\"is_inf\"\n description={t(\n 'expression.math.description-is-inf',\n \"Returns 1 for Inf values (negative or positive) and 0 for other values. It's able to operate on series or scalar values.\"\n )}\n />\n <DocumentedFunction\n name=\"is_nan\"\n description={t(\n 'expression.math.description-is-nan',\n \"Returns 1 for NaN values and 0 for other values. It's able to operate on series or scalar values.\"\n )}\n />\n <DocumentedFunction\n name=\"is_null\"\n description={t(\n 'expression.math.description-is-null',\n \"Returns 1 for null values and 0 for other values. It's able to operate on series or scalar values.\"\n )}\n />\n <DocumentedFunction\n name=\"is_number\"\n description={t(\n 'expression.math.description-is-number',\n \"Returns 1 for all real number values and 0 for non-number. It's able to operate on series or scalar values.\"\n )}\n />\n <DocumentedFunction\n name=\"log\"\n description={t(\n 'expression.math.description-log',\n 'Returns the natural logarithm of its argument, which can be a number or a series'\n )}\n />\n <DocumentedFunction\n name=\"inf, infn, nan, and null\"\n description={t(\n 'expression.math.description-inf-nan-null',\n 'The inf for infinity positive, infn for infinity negative, nan, and null functions all return a single scalar value that matches its name.'\n )}\n />\n <DocumentedFunction\n name=\"round\"\n description={t(\n 'expression.math.description-round',\n \"Returns a rounded integer value. It's able to operate on series or escalar values.\"\n )}\n />\n <DocumentedFunction\n name=\"ceil\"\n description={t(\n 'expression.math.description-ceil',\n \"Rounds the number up to the nearest integer value. It's able to operate on series or escalar values.\"\n )}\n />\n <DocumentedFunction\n name=\"floor\"\n description={t(\n 'expression.math.description-floor',\n \"Rounds the number down to the nearest integer value. It's able to operate on series or escalar values.\"\n )}\n />\n </div>\n </div>\n }\n title={\n <Stack gap={1} direction=\"row\">\n <Icon name=\"book-open\" /> <Trans i18nKey=\"expressions.math.tooltip-title\">Math operator</Trans>\n </Stack>\n }\n footer={\n <div>\n <Trans i18nKey=\"expressions.math.tooltip-footer\">\n See our additional documentation on{' '}\n <TextLink\n external\n href=\"https://grafana.com/docs/grafana/latest/panels/query-a-data-source/use-expressions-to-manipulate-data/about-expressions/#math\"\n >\n Math expressions\n </TextLink>\n .\n </Trans>\n </div>\n }\n closeButton={true}\n placement=\"bottom-start\"\n >\n <div className={styles.info}>\n <Trans i18nKey=\"expressions.math.tooltip-trigger\">Expression</Trans> <Icon name=\"info-circle\" />\n </div>\n </Toggletip>\n </InlineLabel>\n }\n labelWidth={labelWidth}\n grow={true}\n shrink={true}\n >\n <TextArea\n value={query.expression}\n onChange={onExpressionChange}\n rows={1}\n placeholder={mathPlaceholder}\n onBlur={executeQuery}\n style={{ minWidth: 250, lineHeight: '26px', minHeight: 32 }}\n />\n </InlineField>\n </Stack>\n );\n};\n\ninterface DocumentedFunctionProps {\n name: string;\n description: React.ReactNode;\n}\nconst DocumentedFunction = ({ name, description }: DocumentedFunctionProps) => {\n const styles = useStyles2(getDocumentedFunctionStyles);\n\n return (\n <>\n <span className={styles.name}>{name}</span>\n <span className={styles.description}>{description}</span>\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n documentationHeader: css({\n fontSize: theme.typography.h5.fontSize,\n fontWeight: theme.typography.h5.fontWeight,\n }),\n documentationContainer: css({\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n gap: theme.spacing(2),\n\n padding: theme.spacing(1, 2),\n }),\n documentationFunctions: css({\n display: 'grid',\n gridTemplateColumns: 'max-content auto',\n columnGap: theme.spacing(2),\n }),\n info: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n cursor: 'pointer',\n gap: theme.spacing(1),\n }),\n});\n\nconst getDocumentedFunctionStyles = (theme: GrafanaTheme2) => ({\n name: css({\n fontWeight: theme.typography.fontWeightBold,\n }),\n description: css({\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.disabled,\n }),\n});\n","import { css } from '@emotion/css';\nimport { MouseEvent, useCallback, useEffect, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { VariableValueOption } from '@grafana/scenes';\nimport { Button, InlineFieldRow, InlineLabel, useStyles2, Text } from '@grafana/ui';\n\nexport interface VariableValuesPreviewProps {\n options: VariableValueOption[];\n}\n\nexport const VariableValuesPreview = ({ options }: VariableValuesPreviewProps) => {\n const [previewLimit, setPreviewLimit] = useState(20);\n const [previewOptions, setPreviewOptions] = useState<VariableValueOption[]>([]);\n const showMoreOptions = useCallback(\n (event: MouseEvent) => {\n event.preventDefault();\n setPreviewLimit(previewLimit + 20);\n },\n [previewLimit, setPreviewLimit]\n );\n const styles = useStyles2(getStyles);\n useEffect(() => setPreviewOptions(options.slice(0, previewLimit)), [previewLimit, options]);\n\n if (!previewOptions.length) {\n return null;\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', marginTop: '16px' }}>\n <Text variant=\"bodySmall\" weight=\"medium\">\n <Trans i18nKey=\"dashboard-scene.variable-values-preview.preview-of-values\">Preview of values</Trans>\n </Text>\n <InlineFieldRow>\n {previewOptions.map((o, index) => (\n <InlineFieldRow key={`${o.value}-${index}`} className={styles.optionContainer}>\n <InlineLabel data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.General.previewOfValuesOption}>\n <div className={styles.label}>{o.label}</div>\n </InlineLabel>\n </InlineFieldRow>\n ))}\n </InlineFieldRow>\n {options.length > previewLimit && (\n <InlineFieldRow className={styles.optionContainer}>\n <Button onClick={showMoreOptions} variant=\"secondary\" size=\"sm\">\n <Trans i18nKey=\"dashboard-scene.variable-values-preview.show-more\">Show more</Trans>\n </Button>\n </InlineFieldRow>\n )}\n </div>\n );\n};\nVariableValuesPreview.displayName = 'VariableValuesPreview';\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n marginTop: theme.spacing(2),\n }),\n optionContainer: css({\n marginLeft: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n }),\n label: css({\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '50vw',\n }),\n };\n}\n","import { useGetFolderQueryFacade } from 'app/api/clients/folder/v1beta1/hooks';\nimport { FolderDTO } from 'app/types/folders';\n\ninterface ReturnBag {\n folder?: FolderDTO;\n loading: boolean;\n}\n\n/**\n * Returns a folderDTO for the given uid – uses cached values\n * @TODO propagate error state\n */\nexport function useFolder(uid?: string): ReturnBag {\n const fetchFolderState = useGetFolderQueryFacade(uid);\n\n return {\n loading: fetchFolderState.isLoading,\n folder: fetchFolderState.data,\n };\n}\n\nexport function stringifyFolder({ title, parents }: FolderDTO) {\n return parents && parents?.length\n ? [...parents.map((p) => p.title), title].map(encodeTitle).join('/')\n : encodeTitle(title);\n}\n\nfunction encodeTitle(title: string): string {\n return title.replaceAll('/', '\\\\/');\n}\n","import { AnyAction, createAction } from '@reduxjs/toolkit';\n\nimport { DataSourcePluginMeta, DataSourceSettings, LayoutMode, LayoutModes } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { TestingStatus } from '@grafana/runtime';\nimport { DataSourcesState, DataSourceSettingsState } from 'app/types/datasources';\n\nimport { GenericDataSourcePlugin } from '../types';\n\nimport { DataSourceTypesLoadedPayload } from './actions';\n\nexport const initialState: DataSourcesState = {\n dataSources: [],\n plugins: [],\n categories: [],\n dataSource: {} as DataSourceSettings,\n layoutMode: LayoutModes.List,\n searchQuery: '',\n dataSourcesCount: 0,\n dataSourceTypeSearchQuery: '',\n isLoadingDataSources: false,\n isLoadingDataSourcePlugins: false,\n dataSourceMeta: {} as DataSourcePluginMeta,\n isSortAscending: true,\n};\n\nexport const dataSourceLoaded = createAction<DataSourceSettings>('dataSources/dataSourceLoaded');\nexport const dataSourcesLoad = createAction<void>('dataSources/dataSourcesLoad');\nexport const dataSourcesLoaded = createAction<DataSourceSettings[]>('dataSources/dataSourcesLoaded');\nexport const dataSourceMetaLoaded = createAction<DataSourcePluginMeta>('dataSources/dataSourceMetaLoaded');\nexport const dataSourcePluginsLoad = createAction('dataSources/dataSourcePluginsLoad');\nexport const dataSourcePluginsLoaded = createAction<DataSourceTypesLoadedPayload>(\n 'dataSources/dataSourcePluginsLoaded'\n);\nexport const setDataSourcesSearchQuery = createAction<string>('dataSources/setDataSourcesSearchQuery');\nexport const setDataSourcesLayoutMode = createAction<LayoutMode>('dataSources/setDataSourcesLayoutMode');\nexport const setDataSourceTypeSearchQuery = createAction<string>('dataSources/setDataSourceTypeSearchQuery');\nexport const setDataSourceName = createAction<string>('dataSources/setDataSourceName');\nexport const setIsDefault = createAction<boolean>('dataSources/setIsDefault');\nexport const setIsSortAscending = createAction<boolean>('dataSources/setIsSortAscending');\n\n// Redux Toolkit uses ImmerJs as part of their solution to ensure that state objects are not mutated.\n// ImmerJs has an autoFreeze option that freezes objects from change which means this reducer can't be migrated to createSlice\n// because the state would become frozen and during run time we would get errors because Angular would try to mutate\n// the frozen state.\n// https://github.com/reduxjs/redux-toolkit/issues/242\nexport const dataSourcesReducer = (state: DataSourcesState = initialState, action: AnyAction): DataSourcesState => {\n if (dataSourcesLoad.match(action)) {\n return { ...state, isLoadingDataSources: true };\n }\n\n if (dataSourcesLoaded.match(action)) {\n return {\n ...state,\n isLoadingDataSources: false,\n dataSources: action.payload,\n dataSourcesCount: action.payload.length,\n };\n }\n\n if (dataSourceLoaded.match(action)) {\n return { ...state, dataSource: action.payload };\n }\n\n if (setDataSourcesSearchQuery.match(action)) {\n return { ...state, searchQuery: action.payload };\n }\n\n if (setDataSourcesLayoutMode.match(action)) {\n return { ...state, layoutMode: action.payload };\n }\n\n if (dataSourcePluginsLoad.match(action)) {\n return { ...state, plugins: [], isLoadingDataSourcePlugins: true };\n }\n\n if (dataSourcePluginsLoaded.match(action)) {\n return {\n ...state,\n plugins: action.payload.plugins,\n categories: action.payload.categories,\n isLoadingDataSourcePlugins: false,\n };\n }\n\n if (setDataSourceTypeSearchQuery.match(action)) {\n return { ...state, dataSourceTypeSearchQuery: action.payload };\n }\n\n if (dataSourceMetaLoaded.match(action)) {\n return { ...state, dataSourceMeta: action.payload };\n }\n\n if (setDataSourceName.match(action)) {\n return { ...state, dataSource: { ...state.dataSource, name: action.payload } };\n }\n\n if (setIsDefault.match(action)) {\n return {\n ...state,\n dataSource: { ...state.dataSource, isDefault: action.payload },\n };\n }\n\n if (setIsSortAscending.match(action)) {\n return {\n ...state,\n isSortAscending: action.payload,\n };\n }\n\n return state;\n};\n\nexport const initialDataSourceSettingsState: DataSourceSettingsState = {\n testingStatus: {},\n loadError: null,\n loading: true,\n plugin: null,\n};\n\nexport const initDataSourceSettingsSucceeded = createAction<GenericDataSourcePlugin>(\n 'dataSourceSettings/initDataSourceSettingsSucceeded'\n);\n\nexport const initDataSourceSettingsFailed = createAction<Error>('dataSourceSettings/initDataSourceSettingsFailed');\n\nexport const testDataSourceStarting = createAction<undefined>('dataSourceSettings/testDataSourceStarting');\n\nexport const testDataSourceSucceeded = createAction<TestingStatus>('dataSourceSettings/testDataSourceSucceeded');\n\nexport const testDataSourceFailed = createAction<TestingStatus>('dataSourceSettings/testDataSourceFailed');\n\nexport const dataSourceSettingsReducer = (\n state: DataSourceSettingsState = initialDataSourceSettingsState,\n action: AnyAction\n): DataSourceSettingsState => {\n if (initDataSourceSettingsSucceeded.match(action)) {\n return { ...state, plugin: action.payload, loadError: null, loading: false };\n }\n\n if (initDataSourceSettingsFailed.match(action)) {\n return { ...state, plugin: null, loadError: action.payload.message, loading: false };\n }\n\n if (testDataSourceStarting.match(action)) {\n return {\n ...state,\n testingStatus: {\n message: t(\n 'datasources.data-source-settings-reducer.message.testing-could-couple-minutes',\n 'Testing... this could take up to a couple of minutes'\n ),\n status: 'info',\n },\n };\n }\n\n if (testDataSourceSucceeded.match(action)) {\n return {\n ...state,\n testingStatus: {\n status: action.payload?.status,\n message: action.payload?.message,\n details: action.payload?.details,\n },\n };\n }\n\n if (testDataSourceFailed.match(action)) {\n return {\n ...state,\n testingStatus: {\n status: 'error',\n message: action.payload?.message,\n details: action.payload?.details,\n },\n };\n }\n\n return state;\n};\n\nexport default {\n dataSources: dataSourcesReducer,\n dataSourceSettings: dataSourceSettingsReducer,\n};\n","import { useAsync } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Icon, Select } from '@grafana/ui';\nimport { DEFAULT_SORT } from 'app/features/search/constants';\nimport { getGrafanaSearcher } from 'app/features/search/service/searcher';\n\nexport interface Props {\n onChange: (sortValue: SelectableValue) => void;\n value?: string;\n placeholder?: string;\n getSortOptions?: () => Promise<SelectableValue[]>;\n filter?: string[];\n isClearable?: boolean;\n disabled?: boolean;\n}\n\nconst defaultSortOptionsGetter = (): Promise<SelectableValue[]> => {\n return getGrafanaSearcher().getSortOptions();\n};\n\nexport function SortPicker({ onChange, value, placeholder, filter, getSortOptions, isClearable, disabled }: Props) {\n // Using sync Select and manual options fetching here since we need to find the selected option by value\n const options = useAsync<() => Promise<SelectableValue[]>>(async () => {\n const vals = await (getSortOptions ?? defaultSortOptionsGetter)();\n if (filter) {\n return vals.filter((v) => filter.includes(v.value));\n }\n return vals;\n }, [getSortOptions, filter]);\n\n if (options.loading) {\n return null;\n }\n\n const isDesc = Boolean(value?.includes('desc') || value?.startsWith('-')); // bluge syntax starts with \"-\"\n return (\n <Select\n key={value}\n width={28}\n onChange={onChange}\n value={options.value?.find((opt) => opt.value === value) ?? null}\n options={options.value}\n aria-label={t('sort-picker.select-aria-label', 'Sort')}\n placeholder={placeholder ?? `Sort (Default ${DEFAULT_SORT.label})`}\n prefix={<Icon name={isDesc ? 'sort-amount-down' : 'sort-amount-up'} />}\n isClearable={isClearable}\n disabled={disabled}\n />\n );\n}\n","/**\n * @alpha\n */\nexport enum MappingType {\n ValueToText = 'value', // was 1\n RangeToText = 'range', // was 2\n RegexToText = 'regex',\n SpecialValue = 'special',\n}\n\n/**\n * @alpha\n */\nexport interface ValueMappingResult {\n text?: string;\n color?: string;\n icon?: string;\n index?: number;\n}\n\n/**\n * @alpha\n */\ninterface BaseValueMap<T> {\n type: MappingType;\n options: T;\n}\n\n/**\n * @alpha\n */\nexport interface ValueMap extends BaseValueMap<Record<string, ValueMappingResult>> {\n type: MappingType.ValueToText;\n}\n\n/**\n * @alpha\n */\nexport interface RangeMapOptions {\n from: number | null; // changed from string\n to: number | null;\n result: ValueMappingResult;\n}\n\n/**\n * @alpha\n */\nexport interface RangeMap extends BaseValueMap<RangeMapOptions> {\n type: MappingType.RangeToText;\n}\n\n/**\n * @alpha\n */\nexport interface RegexMapOptions {\n pattern: string;\n result: ValueMappingResult;\n}\n\n/**\n * @alpha\n */\nexport interface RegexMap extends BaseValueMap<RegexMapOptions> {\n type: MappingType.RegexToText;\n}\n\n/**\n * @alpha\n */\nexport interface SpecialValueOptions {\n match: SpecialValueMatch;\n result: ValueMappingResult;\n}\n\n/**\n * @alpha\n */\nexport enum SpecialValueMatch {\n True = 'true',\n False = 'false',\n Null = 'null',\n NaN = 'nan',\n NullAndNaN = 'null+nan',\n Empty = 'empty',\n}\n\n/**\n * @alpha\n */\nexport interface SpecialValueMap extends BaseValueMap<SpecialValueOptions> {\n type: MappingType.SpecialValue;\n}\n\n/**\n * @alpha\n */\nexport type ValueMapping = ValueMap | RangeMap | RegexMap | SpecialValueMap;\n","import { NavModelItem } from '@grafana/data';\n\nimport { Breadcrumb } from './types';\n\nexport function buildBreadcrumbs(\n sectionNav: NavModelItem,\n pageNav?: NavModelItem,\n homeNav?: NavModelItem,\n skipHome?: boolean\n) {\n const crumbs: Breadcrumb[] = [];\n let foundHome = false;\n let lastPath: string | undefined = undefined;\n\n function addCrumbs(node: NavModelItem, shouldDedupe = false) {\n if (foundHome) {\n return;\n }\n\n // construct the URL to match\n const urlParts = node.url?.split('?') ?? ['', ''];\n let urlToMatch = urlParts[0];\n const urlSearchParams = new URLSearchParams(urlParts[1]);\n if (urlSearchParams.has('editview')) {\n urlToMatch += `?editview=${urlSearchParams.get('editview')}`;\n }\n\n // Check if we found home/root if if so return early\n if (homeNav && urlToMatch === homeNav.url) {\n if (!skipHome) {\n crumbs.unshift({ text: homeNav.text, href: node.url ?? '' });\n }\n foundHome = true;\n return;\n }\n\n const isSamePathAsLastBreadcrumb = urlToMatch.length > 0 && lastPath === urlToMatch;\n\n // Remember this path for the next breadcrumb\n lastPath = urlToMatch;\n\n const shouldAddCrumb = !node.hideFromBreadcrumbs && !(shouldDedupe && isSamePathAsLastBreadcrumb);\n\n if (shouldAddCrumb) {\n const activeChildIndex = node.children?.findIndex((child) => child.active) ?? -1;\n // Add tab to breadcrumbs if it's not the first active child\n if (activeChildIndex > 0) {\n const activeChild = node.children?.[activeChildIndex];\n if (activeChild) {\n crumbs.unshift({ text: activeChild.text, href: activeChild.url ?? '' });\n }\n }\n crumbs.unshift({ text: node.text, href: node.url ?? '' });\n }\n\n if (node.parentItem) {\n addCrumbs(node.parentItem);\n }\n }\n\n if (pageNav) {\n addCrumbs(pageNav);\n }\n\n // shouldDedupe = true enables app plugins to control breadcrumbs of their root pages\n addCrumbs(sectionNav, true);\n\n return crumbs;\n}\n","import { cloneDeep, groupBy } from 'lodash';\nimport { forkJoin, from, Observable, of, OperatorFunction } from 'rxjs';\nimport { catchError, map, mergeAll, mergeMap, reduce, toArray } from 'rxjs/operators';\n\nimport {\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n TestDataSourceResponse,\n DataSourceApi,\n DataSourceInstanceSettings,\n LoadingState,\n ScopedVars,\n} from '@grafana/data';\nimport { getDataSourceSrv, getTemplateSrv, toDataQueryError } from '@grafana/runtime';\nimport { CustomFormatterVariable } from '@grafana/scenes';\n\nimport { SHARED_DASHBOARD_QUERY } from '../dashboard/constants';\n\nexport const MIXED_DATASOURCE_NAME = '-- Mixed --';\nexport const MIXED_REQUEST_PREFIX = 'mixed-';\n\nexport const mixedRequestId = (queryIdx: number, requestId?: string) =>\n `${MIXED_REQUEST_PREFIX}${queryIdx}-${requestId || ''}`;\n\nexport interface BatchedQueries {\n datasource: Promise<DataSourceApi>;\n queries: DataQuery[];\n scopedVars: ScopedVars;\n}\n\nexport class MixedDatasource extends DataSourceApi<DataQuery> {\n constructor(instanceSettings: DataSourceInstanceSettings) {\n super(instanceSettings);\n }\n\n query(request: DataQueryRequest<DataQuery>): Observable<DataQueryResponse> {\n // Remove any invalid queries\n const queries = request.targets.filter((t) => {\n return t.datasource?.uid !== MIXED_DATASOURCE_NAME;\n });\n\n if (!queries.length) {\n return of({ data: [] }); // nothing\n }\n\n // Build groups of queries to run in parallel\n const sets: { [key: string]: DataQuery[] } = groupBy(queries, 'datasource.uid');\n const batches: BatchedQueries[] = [];\n\n for (const key in sets) {\n // dashboard ds expects to have only 1 query with const query = options.targets[0]; therefore\n // we should not batch them together\n if (key === SHARED_DASHBOARD_QUERY) {\n sets[key].forEach((a) => {\n batches.push(...this.getBatchesForQueries([a], request));\n });\n } else {\n batches.push(...this.getBatchesForQueries(sets[key], request));\n }\n }\n\n // Missing UIDs?\n if (!batches.length) {\n return of({ data: [] }); // nothing\n }\n\n return this.batchQueries(batches, request);\n }\n\n /**\n * Almost always returns a single batch for each set of queries.\n * Unless the query is using a multi value variable.\n */\n private getBatchesForQueries(queries: DataQuery[], request: DataQueryRequest<DataQuery>) {\n const dsRef = queries[0].datasource;\n const batches: BatchedQueries[] = [];\n\n // Using the templateSrv.replace function here with a custom formatter as that is the cleanest way\n // to access the raw value or value array of a variable.\n const datasourceUid = getTemplateSrv().replace(\n dsRef?.uid,\n request.scopedVars,\n (value: string | string[], variable: CustomFormatterVariable) => {\n // If it's not a data source variable, or single value\n if (!Array.isArray(value)) {\n return value;\n }\n\n for (const uid of value) {\n if (uid === 'default') {\n continue;\n }\n\n const dsSettings = getDataSourceSrv().getInstanceSettings(uid);\n\n batches.push({\n datasource: getDataSourceSrv().get(uid),\n queries: cloneDeep(queries),\n scopedVars: {\n ...request.scopedVars,\n [variable.name]: { value: uid, text: dsSettings?.name },\n },\n });\n }\n\n return '';\n }\n );\n\n if (datasourceUid !== '') {\n batches.push({\n datasource: getDataSourceSrv().get(datasourceUid),\n queries: cloneDeep(queries),\n scopedVars: {\n ...request.scopedVars,\n },\n });\n }\n\n return batches;\n }\n\n batchQueries(mixed: BatchedQueries[], request: DataQueryRequest<DataQuery>): Observable<DataQueryResponse> {\n const runningQueries = mixed.filter(this.isQueryable).map((query, i) =>\n from(query.datasource).pipe(\n mergeMap((api: DataSourceApi) => {\n const dsRequest = cloneDeep(request);\n dsRequest.requestId = mixedRequestId(i, dsRequest.requestId);\n dsRequest.targets = query.queries;\n dsRequest.scopedVars = query.scopedVars;\n\n return from(api.query(dsRequest)).pipe(\n map((response) => {\n return {\n ...response,\n data: response.data || [],\n state: LoadingState.Loading,\n key: mixedRequestId(i, response.key),\n };\n }),\n toArray(),\n catchError((err) => {\n err = toDataQueryError(err);\n err.message = `${api.name}: ${err.message}`;\n\n return of<DataQueryResponse[]>([\n {\n data: [],\n state: LoadingState.Error,\n error: err,\n key: mixedRequestId(i, dsRequest.requestId),\n },\n ]);\n })\n );\n })\n )\n );\n\n return forkJoin(runningQueries).pipe(flattenResponses(), map(this.finalizeResponses), mergeAll());\n }\n\n testDatasource(): Promise<TestDataSourceResponse> {\n return Promise.resolve({ message: '', status: '' });\n }\n\n private isQueryable(query: BatchedQueries): boolean {\n return query && Array.isArray(query.queries) && query.queries.length > 0;\n }\n\n private finalizeResponses(responses: DataQueryResponse[]): DataQueryResponse[] {\n const { length } = responses;\n\n if (length === 0) {\n return responses;\n }\n\n const error = responses.find((response) => response.state === LoadingState.Error);\n if (error) {\n responses.push(error); // adds the first found error entry so error shows up in the panel\n } else {\n responses[length - 1].state = LoadingState.Done;\n }\n\n return responses;\n }\n}\n\nfunction flattenResponses(): OperatorFunction<DataQueryResponse[][], DataQueryResponse[]> {\n return reduce((all: DataQueryResponse[], current) => {\n return current.reduce((innerAll, innerCurrent) => {\n innerAll.push.apply(innerAll, innerCurrent);\n return innerAll;\n }, all);\n }, []);\n}\n","import { throttle } from 'lodash';\nimport { useLayoutEffect, useRef } from 'react';\nimport { Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\nimport {\n DataFrame,\n DataHoverClearEvent,\n DataHoverEvent,\n DataHoverPayload,\n EventBus,\n LegacyGraphHoverEvent,\n} from '@grafana/data';\n\nimport { UPlotConfigBuilder } from '../config/UPlotConfigBuilder';\n\ninterface EventBusPluginProps {\n config: UPlotConfigBuilder;\n eventBus: EventBus;\n frame?: DataFrame;\n}\n\n/**\n * @alpha\n */\nexport const EventBusPlugin = ({ config, eventBus, frame }: EventBusPluginProps) => {\n const frameRef = useRef<DataFrame | undefined>(frame);\n frameRef.current = frame;\n\n useLayoutEffect(() => {\n let u: uPlot | null = null;\n\n const payload: DataHoverPayload = {\n point: {\n time: null,\n },\n data: frameRef.current,\n };\n\n config.addHook('init', (_u) => {\n u = _u;\n });\n\n let closestSeriesIdx: number | null = null;\n\n config.addHook('setSeries', (u, seriesIdx) => {\n closestSeriesIdx = seriesIdx;\n });\n\n config.addHook('setLegend', () => {\n let viaSync = u!.cursor.event == null;\n\n if (!viaSync) {\n let dataIdx = u!.cursor.idxs!.find((v) => v != null);\n\n if (dataIdx == null) {\n throttledClear();\n } else {\n let rowIdx = dataIdx;\n let colIdx = closestSeriesIdx;\n\n let xData = u!.data[0] ?? u!.data[1][0];\n\n payload.point.time = xData[rowIdx];\n payload.rowIndex = rowIdx ?? undefined;\n payload.columnIndex = colIdx ?? undefined;\n payload.data = frameRef.current;\n\n // used by old graph panel to position tooltip\n let top = u!.cursor.top!;\n payload.point.panelRelY = top === 0 ? 0.001 : top > 0 ? top / u!.rect.height : 1;\n\n throttledHover();\n }\n }\n });\n\n function handleCursorUpdate(evt: DataHoverEvent | LegacyGraphHoverEvent) {\n const time = evt.payload?.point?.time;\n\n if (time) {\n // Try finding left position on time axis\n const left = u!.valToPos(time, 'x');\n\n // let top;\n\n // if (left) {\n // top = findMidPointYPosition(u!, u!.posToIdx(left));\n // }\n\n // if (!top || !left) {\n // return;\n // }\n\n u!.setCursor({\n left,\n top: u!.rect.height / 2,\n });\n }\n }\n\n const subscription = new Subscription();\n\n const hoverEvent = new DataHoverEvent(payload).setTags(['uplot']);\n const clearEvent = new DataHoverClearEvent().setTags(['uplot']);\n\n let throttledHover = throttle(() => {\n eventBus.publish(hoverEvent);\n }, 100);\n\n let throttledClear = throttle(() => {\n eventBus.publish(clearEvent);\n }, 100);\n\n subscription.add(\n eventBus.getStream(DataHoverEvent).subscribe({\n next: (evt) => {\n // ignore uplot-emitted events, since we already use uPlot's sync\n if (eventBus === evt.origin || evt.tags?.has('uplot')) {\n return;\n }\n\n handleCursorUpdate(evt);\n },\n })\n );\n\n // Legacy events (from flot graph)\n subscription.add(\n eventBus.getStream(LegacyGraphHoverEvent).subscribe({\n next: (evt) => handleCursorUpdate(evt),\n })\n );\n\n subscription.add(\n eventBus\n .getStream(DataHoverClearEvent)\n .pipe(throttleTime(50)) // dont throttle here, throttle on emission\n .subscribe({\n next: (evt) => {\n // ignore uplot-emitted events, since we already use uPlot's sync\n if (eventBus === evt.origin || evt.tags?.has('uplot')) {\n return;\n }\n\n // @ts-ignore\n if (!u!.cursor._lock) {\n u!.setCursor({\n left: -10,\n top: -10,\n });\n }\n },\n })\n );\n\n return () => {\n subscription.unsubscribe();\n };\n }, [config]);\n\n return null;\n};\n","import { guessFieldTypeFromValue } from '../dataframe/processDataFrame';\nimport { Field, FieldType } from '../types/dataFrame';\n\nexport function makeFieldParser(value: unknown, field: Field) {\n if (!field.type) {\n if (field.name === 'time' || field.name === 'Time') {\n field.type = FieldType.time;\n } else {\n field.type = guessFieldTypeFromValue(value);\n }\n }\n\n if (field.type === FieldType.number) {\n return (value: string) => {\n return parseFloat(value);\n };\n }\n\n // Will convert anything that starts with \"T\" to true\n if (field.type === FieldType.boolean) {\n return (value: string) => {\n return !(value[0] === 'F' || value[0] === 'f' || value[0] === '0');\n };\n }\n\n // Just pass the string back\n return (value: string) => value;\n}\n","import { isString } from 'lodash';\n\nimport { QueryResultMeta } from '../types/data';\nimport { Field, DataFrame, DataFrameDTO, FieldDTO, FieldType } from '../types/dataFrame';\nimport { makeFieldParser } from '../utils/fieldParser';\nimport { FunctionalVector } from '../vector/FunctionalVector';\n\nimport { guessFieldTypeFromValue, guessFieldTypeForField, toDataFrameDTO } from './processDataFrame';\n\n/** @deprecated */\nexport type MutableField<T = any> = Field<T>;\n\n/** @deprecated */\ntype MutableVectorCreator = (buffer?: unknown[]) => unknown[];\n\nexport const MISSING_VALUE = undefined; // Treated as connected in new graph panel\n\n/**\n * MutableDataFrame is a complex wrapper around the DataFrame interface\n *\n * @deprecated use standard DataFrame, or create one with PartialDataFrame\n */\nexport class MutableDataFrame<T = any> extends FunctionalVector<T> implements DataFrame {\n name?: string;\n refId?: string;\n meta?: QueryResultMeta;\n fields: MutableField[] = [];\n\n private first: any[] = [];\n private creator: MutableVectorCreator;\n\n constructor(source?: DataFrame | DataFrameDTO, creator?: MutableVectorCreator) {\n super();\n\n // This creates the underlying storage buffers\n this.creator = creator\n ? creator\n : (buffer?: any[]) => {\n return buffer ?? [];\n };\n\n // Copy values from\n if (source) {\n const { name, refId, meta, fields } = source;\n if (name) {\n this.name = name;\n }\n if (refId) {\n this.refId = refId;\n }\n if (meta) {\n this.meta = meta;\n }\n if (fields) {\n for (const f of fields) {\n this.addField(f);\n }\n }\n }\n\n // Get Length to show up if you use spread\n Object.defineProperty(this, 'length', {\n enumerable: true,\n get: () => {\n return this.first.length;\n },\n });\n }\n\n // Defined for Vector interface\n get length() {\n return this.first.length;\n }\n\n addFieldFor(value: unknown, name?: string): Field {\n return this.addField({\n name: name || '', // Will be filled in\n type: guessFieldTypeFromValue(value),\n });\n }\n\n addField(f: Field | FieldDTO, startLength?: number): Field {\n let buffer: any[] | undefined = undefined;\n\n if (f.values) {\n buffer = f.values;\n }\n\n let type = f.type;\n\n if (!type && ('time' === f.name || 'Time' === f.name)) {\n type = FieldType.time;\n } else {\n if (!type && buffer && buffer.length) {\n type = guessFieldTypeFromValue(buffer[0]);\n }\n if (!type) {\n type = FieldType.other;\n }\n }\n\n // Make sure it has a name\n let name = f.name;\n if (!name) {\n name = `Field ${this.fields.length + 1}`;\n }\n\n const field: Field = {\n ...f,\n name,\n type,\n config: f.config || {},\n values: this.creator(buffer),\n };\n\n if (type === FieldType.other) {\n type = guessFieldTypeForField(field);\n if (type) {\n field.type = type;\n }\n }\n\n this.fields.push(field);\n this.first = this.fields[0].values;\n\n // Make sure the field starts with a given length\n if (startLength) {\n while (field.values.length < startLength) {\n field.values.push(MISSING_VALUE);\n }\n } else {\n this.validate();\n }\n\n return field;\n }\n\n validate() {\n // Make sure all arrays are the same length\n const length = this.fields.reduce((v: number, f) => {\n return Math.max(v, f.values.length);\n }, 0);\n\n // Add empty elements until everything matches\n for (const field of this.fields) {\n while (field.values.length !== length) {\n field.values.push(MISSING_VALUE);\n }\n }\n }\n\n private parsers: Map<Field, (v: string) => any> | undefined = undefined;\n\n /**\n * @deprecated unclear if this is actually used\n */\n setParser(field: Field, parser: (v: string) => any) {\n if (!this.parsers) {\n this.parsers = new Map<Field, (v: string) => any>();\n }\n this.parsers.set(field, parser);\n return parser;\n }\n\n private parseValue(field: Field, v: string) {\n let p = this.parsers?.get(field);\n if (!p) {\n p = this.setParser(field, makeFieldParser(v, field));\n }\n return p(v);\n }\n\n /**\n * This will add each value to the corresponding column\n */\n appendRow(row: unknown[]) {\n // Add any extra columns\n for (let i = this.fields.length; i < row.length; i++) {\n this.addField({\n name: `Field ${i + 1}`,\n type: guessFieldTypeFromValue(row[i]),\n });\n }\n\n // The first line may change the field types\n if (this.length < 1) {\n for (let i = 0; i < this.fields.length; i++) {\n const f = this.fields[i];\n if (!f.type || f.type === FieldType.other) {\n f.type = guessFieldTypeFromValue(row[i]);\n }\n }\n }\n\n for (let i = 0; i < this.fields.length; i++) {\n const f = this.fields[i];\n let v = row[i];\n if (f.type !== FieldType.string && isString(v)) {\n v = this.parseValue(f, v);\n }\n f.values.push(v);\n }\n }\n\n /** support standard array push syntax */\n push(...vals: T[]): number {\n for (const v of vals) {\n this.add(v);\n }\n return this.length;\n }\n\n reverse() {\n for (const field of this.fields) {\n field.values.reverse();\n }\n return this;\n }\n\n /**\n * Add values from an object to corresponding fields. Similar to appendRow but does not create new fields.\n */\n add(value: T): void {\n // Will add one value for every field\n const obj = value as any;\n for (const field of this.fields) {\n let val = obj[field.name];\n\n if (field.type !== FieldType.string && isString(val)) {\n val = this.parseValue(field, val);\n }\n\n if (val === undefined) {\n val = MISSING_VALUE;\n }\n\n field.values.push(val);\n }\n }\n\n set(index: number, value: T) {\n if (index > this.length) {\n throw new Error('Unable to set value beyond current length');\n }\n\n const obj = (value as Record<string, unknown>) || {};\n for (const field of this.fields) {\n field.values[index] = obj[field.name];\n }\n }\n\n /**\n * Get an object with a property for each field in the DataFrame\n */\n get(idx: number): T {\n const v: Record<string, unknown> = {};\n for (const field of this.fields) {\n v[field.name] = field.values[idx];\n }\n return v as T;\n }\n\n /**\n * The simplified JSON values used in JSON.stringify()\n */\n toJSON() {\n return toDataFrameDTO(this);\n }\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nexport const getPaginationStyles = (theme: GrafanaTheme2) => {\n return css({\n float: 'none',\n display: 'flex',\n justifyContent: 'flex-start',\n margin: theme.spacing(2, 0),\n });\n};\n","import { config } from '@grafana/runtime';\nimport { SceneDataProvider, SceneDataTransformer, SceneQueryRunner } from '@grafana/scenes';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\n\nimport { DashboardDatasourceBehaviour } from '../scene/DashboardDatasourceBehaviour';\n\nexport function createPanelDataProvider(panel: PanelModel): SceneDataProvider | undefined {\n // Skip setting query runner for panels without queries\n if (!panel.targets?.length) {\n return undefined;\n }\n\n // Skip setting query runner for panel plugins with skipDataQuery\n if (config.panels[panel.type]?.skipDataQuery) {\n return undefined;\n }\n\n let dataProvider: SceneDataProvider | undefined = undefined;\n\n dataProvider = new SceneQueryRunner({\n datasource: panel.datasource ?? undefined,\n queries: panel.targets,\n maxDataPoints: panel.maxDataPoints ?? undefined,\n maxDataPointsFromWidth: true,\n cacheTimeout: panel.cacheTimeout,\n queryCachingTTL: panel.queryCachingTTL,\n minInterval: panel.interval ?? undefined,\n dataLayerFilter: {\n panelId: panel.id,\n },\n $behaviors: [new DashboardDatasourceBehaviour({})],\n });\n\n // Wrap inner data provider in a data transformer\n return new SceneDataTransformer({\n $data: dataProvider,\n transformations: panel.transformations || [],\n });\n}\n","import { t } from '@grafana/i18n';\n// Maps the ID of the nav item to a translated phrase to later pass to <Trans />\n// Because the navigation content is dynamic (defined in the backend), we can not use\n// the normal inline message definition method.\n\n// see pkg/api/index.go\nexport function getNavTitle(navId: string | undefined) {\n // the switch cases must match the ID of the navigation item, as defined in the backend nav model\n switch (navId) {\n case 'home':\n return t('nav.home.title', 'Home');\n case 'home-setup-guide':\n return t('nav.setup-guide.title', 'Getting started guide');\n case 'new':\n return t('nav.new.title', 'New');\n case 'create':\n return t('nav.create.title', 'Create');\n case 'create-dashboard':\n return t('nav.create-dashboard.title', 'Dashboard');\n case 'folder':\n return t('nav.create-folder.title', 'Folder');\n case 'import':\n return t('nav.create-import.title', 'Import dashboard');\n case 'alert':\n return t('nav.create-alert.title', 'New alert rule');\n case 'bookmarks':\n return t('nav.bookmarks.title', 'Bookmarks');\n case 'bookmarks-empty':\n return t('nav.bookmarks-empty.title', 'Bookmark pages for them to appear here');\n case 'starred':\n return t('nav.starred.title', 'Starred');\n case 'starred-empty':\n return t('nav.starred-empty.title', 'Your starred dashboards will appear here');\n case 'dashboards':\n return t('nav.dashboards.title', 'Dashboards');\n case 'dashboards/browse':\n return t('nav.dashboards.title', 'Dashboards');\n case 'dashboards/playlists':\n return t('nav.playlists.title', 'Playlists');\n case 'dashboards/snapshots':\n return t('nav.snapshots.title', 'Snapshots');\n case 'dashboards/library-panels':\n return t('nav.library-panels.title', 'Library panels');\n case 'reports':\n return t('nav.reporting.title', 'Reporting');\n case 'dashboards/public':\n return t('nav.shared-dashboard.title', 'Shared dashboards');\n case 'dashboards/recently-deleted':\n return t('nav.recently-deleted.title', 'Recently deleted');\n case 'dashboards/new':\n return t('nav.new-dashboard.title', 'New dashboard');\n case 'dashboards/folder/new':\n return t('nav.new-folder.title', 'New folder');\n case 'dashboards/import':\n return t('nav.create-import.title', 'Import dashboard');\n case 'scenes':\n return t('nav.scenes.title', 'Scenes');\n case 'explore':\n return t('nav.explore.title', 'Explore');\n case 'drilldown':\n return t('nav.drilldown.title', 'Drilldown');\n case 'alerting':\n return t('nav.alerting.title', 'Alerting');\n case 'plugin-page-grafana-oncall-app':\n return t('nav.oncall.title', 'OnCall');\n case 'alerting-legacy':\n return t('nav.alerting-legacy.title', 'Alerting (legacy)');\n case 'alerting-upgrade':\n return t('nav.alerting-upgrade.title', 'Alerting upgrade');\n case 'alert-home':\n return t('nav.alerting-home.title', 'Home');\n case 'alert-list':\n return t('nav.alerting-list.title', 'Alert rules');\n case 'alert-list-legacy':\n return t('nav.alert-list-legacy.title', 'Alert rules');\n case 'receivers':\n return t('nav.alerting-receivers.title', 'Contact points');\n case 'am-routes':\n return t('nav.alerting-am-routes.title', 'Notification policies');\n case 'channels':\n return t('nav.alerting-channels.title', 'Notification channels');\n case 'silences':\n return t('nav.alerting-silences.title', 'Silences');\n case 'groups':\n return t('nav.alerting-groups.title', 'Active notifications');\n case 'alerting-admin':\n return t('nav.alerting-admin.title', 'Settings');\n case 'alerts/recently-deleted':\n return t('nav.alerts-recently-deleted.title', 'Recently deleted');\n case 'cfg':\n return t('nav.config.title', 'Administration');\n case 'cfg/general':\n return t('nav.config-general.title', 'General');\n case 'cfg/plugins':\n return t('nav.config-plugins.title', 'Plugins and data');\n case 'cfg/access':\n return t('nav.config-access.title', 'Users and access');\n case 'datasources':\n return t('nav.datasources.title', 'Data sources');\n case 'authentication':\n return t('nav.authentication.title', 'Authentication');\n case 'licensing':\n return t('nav.statistics-and-licensing.title', 'Statistics and licensing');\n case 'recordedQueries':\n return t('nav.recorded-queries.title', 'Recorded queries');\n case 'correlations':\n return t('nav.correlations.title', 'Correlations');\n case 'users':\n return t('nav.users.title', 'Users');\n case 'teams':\n return t('nav.teams.title', 'Teams');\n case 'plugins':\n return t('nav.plugins.title', 'Plugins');\n case 'org-settings':\n return t('nav.org-settings.title', 'Default preferences');\n case 'serviceaccounts':\n return t('nav.service-accounts.title', 'Service accounts');\n case 'admin':\n return t('nav.admin.title', 'Server admin');\n case 'support-bundles':\n return t('nav.support-bundles.title', 'Support bundles');\n case 'global-users':\n return t('nav.global-users.title', 'Users');\n case 'global-orgs':\n return t('nav.global-orgs.title', 'Organizations');\n case 'server-settings':\n return t('nav.server-settings.title', 'Settings');\n case 'storage':\n return t('nav.storage.title', 'Storage');\n case 'migrate-to-cloud':\n return t('nav.migrate-to-cloud.title', 'Migrate to Grafana Cloud');\n case 'upgrading':\n return t('nav.upgrading.title', 'Stats and license');\n case 'monitoring':\n return t('nav.monitoring.title', 'Observability');\n case 'infrastructure':\n return t('nav.infrastructure.title', 'Infrastructure');\n case 'frontend':\n return t('nav.frontend.title', 'Frontend');\n case 'apps':\n return t('nav.apps.title', 'More apps');\n case 'alerts-and-incidents':\n return t('nav.alerts-and-incidents.title', 'Alerts & IRM');\n case 'testing-and-synthetics':\n return t('nav.testing-and-synthetics.title', 'Testing & synthetics');\n case 'plugin-page-grafana-incident-app':\n return t('nav.incidents.title', 'Incident');\n case 'plugin-page-grafana-ml-app':\n return t('nav.machine-learning.title', 'AI & machine learning');\n case 'plugin-page-grafana-slo-app':\n return t('nav.slo.title', 'SLO');\n case 'plugin-page-k6-app':\n return t('nav.k6.title', 'Performance');\n case 'plugin-page-grafana-k8s-app':\n return t('nav.kubernetes.title', 'Kubernetes');\n case 'plugin-page-grafana-dbo11y-app':\n return t('nav.databases.title', 'Database');\n case 'plugin-page-grafana-app-observability-app':\n return t('nav.application.title', 'Application');\n case 'plugin-page-grafana-pyroscope-app':\n return t('nav.profiles.title', 'Profiles');\n case 'plugin-page-grafana-kowalski-app':\n return t('nav.frontend-app.title', 'Frontend');\n case 'plugin-page-grafana-synthetic-monitoring-app':\n return t('nav.synthetics.title', 'Synthetics');\n case 'help':\n return t('nav.help.title', 'Help');\n case 'profile/settings':\n return t('nav.profile/settings.title', 'Profile');\n case 'profile/notifications':\n return t('nav.profile/notifications.title', 'Notification history');\n case 'profile/password':\n return t('nav.profile/password.title', 'Change password');\n case 'sign-out':\n return t('nav.sign-out.title', 'Sign out');\n case 'search':\n return t('nav.search-dashboards.title', 'Search dashboards');\n case 'connections':\n return t('nav.connections.title', 'Connections');\n case 'connections-add-new-connection':\n return t('nav.add-new-connections.title', 'Add new connection');\n case 'standalone-plugin-page-/connections/collector':\n return t('nav.collector.title', 'Collector');\n case 'connections-datasources':\n return t('nav.data-sources.title', 'Data sources');\n case 'standalone-plugin-page-/connections/infrastructure':\n return t('nav.integrations.title', 'Integrations');\n case 'standalone-plugin-page-/connections/connect-data':\n return t('nav.connect-data.title', 'Connect data');\n case 'standalone-plugin-page-/connections/private-data-source-connections':\n return t('nav.private-data-source-connections.title', 'Private data source connect');\n case 'plugin-page-grafana-detect-app':\n return t('nav.detect.title', 'Detect');\n case 'plugin-page-grafana-quaderno-app':\n return t('nav.grafana-quaderno.title', 'Grafana Quaderno');\n default:\n return undefined;\n }\n}\n\nexport function getNavSubTitle(navId: string | undefined) {\n switch (navId) {\n case 'dashboards':\n return t('nav.dashboards.subtitle', 'Create and manage dashboards to visualize your data');\n case 'dashboards/browse':\n return t('nav.dashboards.subtitle', 'Create and manage dashboards to visualize your data');\n case 'manage-folder':\n return t('nav.manage-folder.subtitle', 'Manage folder dashboards and permissions');\n case 'dashboards/playlists':\n return t('nav.playlists.subtitle', 'Groups of dashboards that are displayed in a sequence');\n case 'dashboards/snapshots':\n return t(\n 'nav.snapshots.subtitle',\n 'Interactive, publically available, point-in-time representations of dashboards and panels'\n );\n case 'dashboards/public':\n t('nav.shared-dashboard.subtitle', \"Manage your organization's externally shared dashboards\");\n case 'dashboards/library-panels':\n return t('nav.library-panels.subtitle', 'Reusable panels that can be added to multiple dashboards');\n case 'dashboards/recently-deleted':\n return t(\n 'nav.recently-deleted.subtitle',\n 'Deleted dashboards are kept for up to 12 months or until the history limit of 1000 dashboards is reached.'\n );\n case 'alerting':\n return t('nav.alerting.subtitle', 'Learn about problems in your systems moments after they occur');\n case 'alerting-upgrade':\n return t(\n 'nav.alerting-upgrade.subtitle',\n 'Upgrade your existing legacy alerts and notification channels to the new Grafana Alerting'\n );\n case 'alerting-admin':\n return t(\n 'nav.alerting-admin.subtitle',\n 'Manage Alertmanager configurations and enable receiving Grafana-managed alerts'\n );\n case 'alert-list':\n return t('nav.alerting-list.subtitle', 'Rules that determine whether an alert will fire');\n case 'receivers':\n return t(\n 'nav.alerting-receivers.subtitle',\n 'Choose how to notify your contact points when an alert instance fires'\n );\n case 'am-routes':\n return t('nav.alerting-am-routes.subtitle', 'Determine how alerts are routed to contact points');\n case 'silences':\n return t('nav.alerting-silences.subtitle', 'Stop notifications from one or more alerting rules');\n case 'groups':\n return t('nav.alerting-groups.subtitle', 'See grouped alerts with active notifications');\n case 'alerts/recently-deleted':\n return t('nav.alerts-recently-deleted.subtitle', 'See recently deleted alert rules');\n case 'datasources':\n return t('nav.datasources.subtitle', 'Add and configure data sources');\n case 'correlations':\n return t('nav.correlations.subtitle', 'Add and configure correlations');\n case 'users':\n return t('nav.users.subtitle', 'Invite and assign roles to users');\n case 'teams':\n return t('nav.teams.subtitle', 'Groups of users that have common dashboard and permission needs');\n case 'plugins':\n return t('nav.plugins.subtitle', 'Extend the Grafana experience with plugins');\n case 'org-settings':\n return t('nav.org-settings.subtitle', 'Manage preferences across an organization');\n case 'serviceaccounts':\n return t('nav.service-accounts.subtitle', 'Use service accounts to run automated workloads in Grafana');\n case 'groupsync':\n return t('nav.groupsync.subtitle', 'Manage mappings of Identity Provider groups to Grafana Roles');\n case 'global-users':\n return t('nav.global-users.subtitle', 'Manage users in Grafana');\n case 'global-orgs':\n return t('nav.global-orgs.subtitle', 'Isolated instances of Grafana running on the same server');\n case 'server-settings':\n return t('nav.server-settings.subtitle', 'View the settings defined in your Grafana config');\n case 'storage':\n return t('nav.storage.subtitle', 'Manage file storage');\n case 'migrate-to-cloud':\n return t('nav.migrate-to-cloud.subtitle', 'Copy resources from your self-managed installation to a cloud stack');\n case 'support-bundles':\n return t('nav.support-bundles.subtitle', 'Download support bundles');\n case 'admin':\n return t(\n 'nav.admin.subtitle',\n 'Manage server-wide settings and access to resources such as organizations, users, and licenses'\n );\n case 'cfg/general':\n return t('nav.config-general.subtitle', 'Manage default preferences and settings across Grafana');\n case 'cfg/plugins':\n return t('nav.config-plugins.subtitle', 'Install plugins and define the relationships between data');\n case 'cfg/access':\n return t('nav.config-access.subtitle', 'Configure access for individual users, teams, and service accounts');\n case 'apps':\n return t('nav.apps.subtitle', 'App plugins that extend the Grafana experience');\n case 'monitoring':\n return t('nav.monitoring.subtitle', 'Out-of-the-box observability solutions');\n case 'infrastructure':\n return t('nav.infrastructure.subtitle', \"Understand your infrastructure's health\");\n case 'frontend':\n return t('nav.frontend.subtitle', 'Gain real user monitoring insights');\n case 'alerts-and-incidents':\n return t('nav.alerts-and-incidents.subtitle', 'Alerting and incident management apps');\n case 'testing-and-synthetics':\n return t('nav.testing-and-synthetics.subtitle', 'Optimize performance with k6 and Synthetic Monitoring insights');\n case 'connections-add-new-connection':\n return t('nav.connections.subtitle', 'Browse and create new connections');\n case 'connections-datasources':\n return t('nav.data-sources.subtitle', 'View and manage your connected data source connections');\n case 'connections-private-data-source-connections':\n return t(\n 'nav.private-data-source-connections.subtitle',\n 'Query data that lives within a secured network without opening the network to inbound traffic from Grafana Cloud. Learn more in our docs.'\n );\n case 'plugin-page-grafana-ml-app':\n return t('nav.machine-learning.subtitle', 'Explore AI and machine learning features');\n default:\n return undefined;\n }\n}\n","import { lastValueFrom } from 'rxjs';\n\nimport { DataQueryRequest, DataFrameView } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { getGrafanaDatasource } from 'app/plugins/datasource/grafana/datasource';\nimport { GrafanaQuery, GrafanaQueryType } from 'app/plugins/datasource/grafana/types';\n\nimport { Playlist } from '../../api/clients/playlist/v0alpha1';\nimport { getGrafanaSearcher } from '../search/service/searcher';\nimport { DashboardQueryResult, SearchQuery } from '../search/service/types';\n\nimport { PlaylistItemUI } from './types';\n\n/** Returns a copy with the dashboards loaded */\nexport async function loadDashboards(items: PlaylistItemUI[]): Promise<PlaylistItemUI[]> {\n let idx = 0;\n if (!items?.length) {\n return [];\n }\n\n const targets: GrafanaQuery[] = [];\n for (const item of items) {\n const query: SearchQuery = {\n query: '*',\n kind: ['dashboard'],\n limit: 1000,\n };\n\n switch (item.type) {\n case 'dashboard_by_id':\n throw new Error('invalid item (with id)');\n\n case 'dashboard_by_uid':\n query.uid = [item.value];\n break;\n\n case 'dashboard_by_tag':\n query.tags = [item.value];\n break;\n }\n targets.push({\n refId: `${idx++}`,\n queryType: GrafanaQueryType.Search,\n search: query,\n });\n }\n\n // The SQL based store can only execute individual queries\n if (!config.featureToggles.panelTitleSearch) {\n const searcher = getGrafanaSearcher();\n const res: PlaylistItemUI[] = [];\n for (let i = 0; i < targets.length; i++) {\n const view = (await searcher.search(targets[i].search!)).view;\n res.push({ ...items[i], dashboards: view.map((v) => ({ ...v })) });\n }\n return res;\n }\n\n // The bluge backend can execute multiple queries in a single request\n const ds = await getGrafanaDatasource();\n // eslint-disable-next-line\n const rsp = await lastValueFrom(ds.query({ targets } as unknown as DataQueryRequest<GrafanaQuery>));\n if (rsp.data.length !== items.length) {\n throw new Error('unexpected result size');\n }\n return items.map((item, idx) => {\n const view = new DataFrameView<DashboardQueryResult>(rsp.data[idx]);\n return { ...item, dashboards: view.map((v) => ({ ...v })) };\n });\n}\n\nexport function getDefaultPlaylist(): Playlist {\n return {\n apiVersion: 'playlist.grafana.app/v0alpha1',\n kind: 'Playlist',\n spec: {\n items: [],\n interval: '5m',\n title: '',\n },\n metadata: {\n name: '',\n },\n status: {},\n };\n}\n\nexport function searchPlaylists(playlists: Playlist[], query?: string): Playlist[] {\n if (!query?.length) {\n return playlists;\n }\n query = query.toLowerCase();\n return playlists.filter((v) => v.spec?.title.toLowerCase().includes(query!));\n}\n","import {\n DataFrame,\n DataFrameType,\n DataQueryResponse,\n DataQueryResponseData,\n Field,\n FieldType,\n PanelData,\n QueryResultMetaStat,\n shallowCompare,\n} from '@grafana/data';\n\nexport function combinePanelData(currentData: PanelData, newData: PanelData): PanelData {\n const series = combineResponses({ data: currentData.series }, { data: newData.series }).data;\n return { ...currentData, series };\n}\n\nexport function combineResponses(currentResult: DataQueryResponse | null, newResult: DataQueryResponse) {\n if (!currentResult) {\n return cloneQueryResponse(newResult);\n }\n\n newResult.data.forEach((newFrame) => {\n const currentFrame = currentResult.data.find((frame) => shouldCombine(frame, newFrame));\n if (!currentFrame) {\n currentResult.data.push(cloneDataFrame(newFrame));\n return;\n }\n combineFrames(currentFrame, newFrame);\n });\n\n const mergedErrors = [...(currentResult.errors ?? []), ...(newResult.errors ?? [])];\n\n // we make sure to have `.errors` as undefined, instead of empty-array\n // when no errors.\n\n if (mergedErrors.length > 0) {\n currentResult.errors = mergedErrors;\n }\n\n // the `.error` attribute is obsolete now,\n // but we have to maintain it, otherwise\n // some grafana parts do not behave well.\n // we just choose the old error, if it exists,\n // otherwise the new error, if it exists.\n const mergedError = currentResult.error ?? newResult.error;\n if (mergedError != null) {\n currentResult.error = mergedError;\n }\n\n const mergedTraceIds = [...(currentResult.traceIds ?? []), ...(newResult.traceIds ?? [])];\n if (mergedTraceIds.length > 0) {\n currentResult.traceIds = mergedTraceIds;\n }\n\n return currentResult;\n}\n\nfunction combineFrames(dest: DataFrame, source: DataFrame) {\n // `dest` and `source` might have more or less fields, we need to go through all of them\n const totalFields = Math.max(dest.fields.length, source.fields.length);\n for (let i = 0; i < totalFields; i++) {\n // For now, skip undefined fields that exist in the new frame\n if (!dest.fields[i]) {\n continue;\n }\n // Index is not reliable when frames have disordered fields, or an extra/missing field, so we find them by name.\n // If the field has no name, we fallback to the old index version.\n const sourceField = findSourceField(dest.fields[i], source.fields, i);\n if (!sourceField) {\n continue;\n }\n dest.fields[i].values = [].concat.apply(sourceField.values, dest.fields[i].values);\n if (sourceField.nanos) {\n const nanos: number[] = dest.fields[i].nanos?.slice() || [];\n dest.fields[i].nanos = source.fields[i].nanos?.concat(nanos);\n }\n }\n dest.length += source.length;\n dest.meta = {\n ...dest.meta,\n stats: getCombinedMetadataStats(dest.meta?.stats ?? [], source.meta?.stats ?? []),\n };\n}\n\nfunction findSourceField(referenceField: Field, sourceFields: Field[], index: number) {\n const candidates = sourceFields.filter((f) => f.name === referenceField.name);\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n if (referenceField.labels) {\n return candidates.find((candidate) => shallowCompare(referenceField.labels ?? {}, candidate.labels ?? {}));\n }\n\n return sourceFields[index];\n}\n\nconst TOTAL_BYTES_STAT = 'Summary: total bytes processed';\n// This is specific for Loki\nfunction getCombinedMetadataStats(\n destStats: QueryResultMetaStat[],\n sourceStats: QueryResultMetaStat[]\n): QueryResultMetaStat[] {\n // in the current approach, we only handle a single stat\n const destStat = destStats.find((s) => s.displayName === TOTAL_BYTES_STAT);\n const sourceStat = sourceStats.find((s) => s.displayName === TOTAL_BYTES_STAT);\n\n if (sourceStat != null && destStat != null) {\n return [{ value: sourceStat.value + destStat.value, displayName: TOTAL_BYTES_STAT, unit: destStat.unit }];\n }\n\n // maybe one of them exist\n const eitherStat = sourceStat ?? destStat;\n if (eitherStat != null) {\n return [eitherStat];\n }\n\n return [];\n}\n\n/**\n * Deep clones a DataQueryResponse\n */\nexport function cloneQueryResponse(response: DataQueryResponse): DataQueryResponse {\n const newResponse = {\n ...response,\n data: response.data.map(cloneDataFrame),\n };\n return newResponse;\n}\n\nfunction cloneDataFrame(frame: DataQueryResponseData): DataQueryResponseData {\n return {\n ...frame,\n fields: frame.fields.map((field: Field) => ({\n ...field,\n values: field.values,\n })),\n };\n}\n\nfunction shouldCombine(frame1: DataFrame, frame2: DataFrame): boolean {\n if (frame1.refId !== frame2.refId || frame1.name !== frame2.name) {\n return false;\n }\n\n const frameType1 = frame1.meta?.type;\n const frameType2 = frame2.meta?.type;\n\n if (frameType1 !== frameType2) {\n // we do not join things that have a different type\n return false;\n }\n\n // metric range query data\n if (frameType1 === DataFrameType.TimeSeriesMulti) {\n const field1 = frame1.fields.find((f) => f.type === FieldType.number);\n const field2 = frame2.fields.find((f) => f.type === FieldType.number);\n if (field1 === undefined || field2 === undefined) {\n // should never happen\n return false;\n }\n\n return shallowCompare(field1.labels ?? {}, field2.labels ?? {});\n }\n\n // logs query data\n // logs use a special attribute in the dataframe's \"custom\" section\n // because we do not have a good \"frametype\" value for them yet.\n const customType1 = frame1.meta?.custom?.frameType;\n const customType2 = frame2.meta?.custom?.frameType;\n // Legacy frames have this custom type\n if (customType1 === 'LabeledTimeValues' && customType2 === 'LabeledTimeValues') {\n return true;\n } else if (customType1 === customType2) {\n // Data plane frames don't\n return true;\n }\n\n // should never reach here\n return false;\n}\n","import { groupBy, mapValues } from 'lodash';\nimport { Observable, of } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\n\nimport {\n AbsoluteTimeRange,\n DataFrame,\n FieldType,\n getDisplayProcessor,\n PanelData,\n standardTransformers,\n preProcessPanelData,\n DataLinkConfigOrigin,\n getRawDisplayProcessor,\n DataSourceApi,\n} from '@grafana/data';\nimport { config, CorrelationData } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { ExplorePanelData } from 'app/types/explore';\n\nimport { refreshIntervalToSortOrder } from '../../../core/utils/explore';\nimport { attachCorrelationsToDataFrames } from '../../correlations/utils';\nimport { dataFrameToLogsModel } from '../../logs/logsModel';\nimport { sortLogsResult } from '../../logs/utils';\nimport { hasPanelPlugin } from '../../plugins/importPanelPlugin';\n\n/**\n * When processing response first we try to determine what kind of dataframes we got as one query can return multiple\n * dataFrames with different type of data. This is later used for type specific processing. As we use this in\n * Observable pipeline, it decorates the existing panelData to pass the results to later processing stages.\n */\nexport const decorateWithFrameTypeMetadata = (data: PanelData): ExplorePanelData => {\n const graphFrames: DataFrame[] = [];\n const tableFrames: DataFrame[] = [];\n const rawPrometheusFrames: DataFrame[] = [];\n const logsFrames: DataFrame[] = [];\n const traceFrames: DataFrame[] = [];\n const nodeGraphFrames: DataFrame[] = [];\n const flameGraphFrames: DataFrame[] = [];\n const customFrames: DataFrame[] = [];\n\n for (const frame of data.series) {\n if (canFindPanel(frame)) {\n customFrames.push(frame);\n continue;\n }\n switch (frame.meta?.preferredVisualisationType) {\n case 'logs':\n logsFrames.push(frame);\n break;\n case 'graph':\n graphFrames.push(frame);\n break;\n case 'trace':\n traceFrames.push(frame);\n break;\n case 'table':\n tableFrames.push(frame);\n break;\n case 'rawPrometheus':\n rawPrometheusFrames.push(frame);\n break;\n case 'nodeGraph':\n nodeGraphFrames.push(frame);\n break;\n case 'flamegraph':\n flameGraphFrames.push(frame);\n break;\n default:\n if (isTimeSeries(frame)) {\n graphFrames.push(frame);\n tableFrames.push(frame);\n } else {\n // We fallback to table if we do not have any better meta info about the dataframe.\n tableFrames.push(frame);\n }\n }\n }\n\n return {\n ...data,\n graphFrames,\n tableFrames,\n logsFrames,\n traceFrames,\n nodeGraphFrames,\n customFrames,\n flameGraphFrames,\n rawPrometheusFrames,\n graphResult: null,\n tableResult: null,\n logsResult: null,\n rawPrometheusResult: null,\n };\n};\n\nexport const decorateWithCorrelations = ({\n showCorrelationEditorLinks,\n queries,\n correlations,\n defaultTargetDatasource,\n}: {\n showCorrelationEditorLinks: boolean;\n queries: DataQuery[] | undefined;\n correlations: CorrelationData[] | undefined;\n defaultTargetDatasource?: DataSourceApi;\n}) => {\n return (data: PanelData): PanelData => {\n if (showCorrelationEditorLinks && defaultTargetDatasource) {\n for (const frame of data.series) {\n for (const field of frame.fields) {\n field.config.links = []; // hide all previous links, we only want to show fake correlations in this view\n\n field.display = field.display || getRawDisplayProcessor();\n\n const availableVars: Record<string, string> = {};\n frame.fields.map((field) => {\n availableVars[`${field.name}`] = \"${__data.fields.['\" + `${field.name}` + `']}`;\n });\n\n field.config.links.push({\n url: '',\n origin: DataLinkConfigOrigin.ExploreCorrelationsEditor,\n title: `Correlate with ${field.name}`,\n internal: {\n datasourceUid: defaultTargetDatasource.uid,\n datasourceName: defaultTargetDatasource.name,\n query: { datasource: { uid: defaultTargetDatasource.uid } },\n },\n meta: {\n correlationData: { resultField: field.name, vars: availableVars, origVars: availableVars },\n },\n });\n }\n }\n } else if (queries?.length && correlations?.length) {\n const queryRefIdToDataSourceUid = mapValues(groupBy(queries, 'refId'), '0.datasource.uid');\n attachCorrelationsToDataFrames(data.series, correlations, queryRefIdToDataSourceUid);\n }\n return data;\n };\n};\n\nexport const decorateWithGraphResult = (data: ExplorePanelData): ExplorePanelData => {\n if (!data.graphFrames.length) {\n return { ...data, graphResult: null };\n }\n\n return { ...data, graphResult: data.graphFrames };\n};\n\n/**\n * This processing returns Observable because it uses Transformer internally which result type is also Observable.\n * In this case the transformer should return single result, but it is possible that in the future it could return\n * multiple results and so this should be used with mergeMap or similar to unbox the internal observable.\n */\nexport const decorateWithTableResult = (data: ExplorePanelData): Observable<ExplorePanelData> => {\n if (data.tableFrames.length === 0) {\n return of({ ...data, tableResult: null });\n }\n\n data.tableFrames.sort((frameA: DataFrame, frameB: DataFrame) => {\n const frameARefId = frameA.refId!;\n const frameBRefId = frameB.refId!;\n\n if (frameARefId > frameBRefId) {\n return 1;\n }\n if (frameARefId < frameBRefId) {\n return -1;\n }\n return 0;\n });\n\n const hasOnlyTimeseries = data.tableFrames.every((df) => isTimeSeries(df));\n const transformContext = {\n interpolate: (v: string) => v,\n };\n\n // If we have only timeseries we do join on default time column which makes more sense. If we are showing\n // non timeseries or some mix of data we are not trying to join on anything and just try to merge them in\n // single table, which may not make sense in most cases, but it's up to the user to query something sensible.\n const transformer = hasOnlyTimeseries\n ? of(data.tableFrames).pipe(standardTransformers.joinByFieldTransformer.operator({}, transformContext))\n : of(data.tableFrames).pipe(standardTransformers.mergeTransformer.operator({}, transformContext));\n\n return transformer.pipe(\n map((frames) => {\n for (const frame of frames) {\n // set display processor\n for (const field of frame.fields) {\n field.display =\n field.display ??\n getDisplayProcessor({\n field,\n theme: config.theme2,\n timeZone: data.request?.timezone ?? 'browser',\n });\n }\n }\n\n return { ...data, tableResult: frames };\n })\n );\n};\n\nexport const decorateWithRawPrometheusResult = (data: ExplorePanelData): Observable<ExplorePanelData> => {\n // Prometheus has a custom frame visualization alongside the table view, but they both handle the data the same\n const tableFrames = data.rawPrometheusFrames;\n\n if (!tableFrames || tableFrames.length === 0) {\n return of({ ...data, tableResult: null });\n }\n\n tableFrames.sort((frameA: DataFrame, frameB: DataFrame) => {\n const frameARefId = frameA.refId!;\n const frameBRefId = frameB.refId!;\n\n if (frameARefId > frameBRefId) {\n return 1;\n }\n if (frameARefId < frameBRefId) {\n return -1;\n }\n return 0;\n });\n\n const hasOnlyTimeseries = tableFrames.every((df) => isTimeSeries(df));\n const transformContext = {\n interpolate: (v: string) => v,\n };\n\n // If we have only timeseries we do join on default time column which makes more sense. If we are showing\n // non timeseries or some mix of data we are not trying to join on anything and just try to merge them in\n // single table, which may not make sense in most cases, but it's up to the user to query something sensible.\n const transformer = hasOnlyTimeseries\n ? of(tableFrames).pipe(standardTransformers.joinByFieldTransformer.operator({}, transformContext))\n : of(tableFrames).pipe(standardTransformers.mergeTransformer.operator({}, transformContext));\n\n return transformer.pipe(\n map((frames) => {\n const frame = frames[0];\n\n // set display processor\n for (const field of frame.fields) {\n field.display =\n field.display ??\n getDisplayProcessor({\n field,\n theme: config.theme2,\n timeZone: data.request?.timezone ?? 'browser',\n });\n }\n\n return { ...data, rawPrometheusResult: frame };\n })\n );\n};\n\nexport const decorateWithLogsResult =\n (\n options: {\n absoluteRange?: AbsoluteTimeRange;\n refreshInterval?: string;\n queries?: DataQuery[];\n deduplicate?: boolean;\n } = {}\n ) =>\n (data: ExplorePanelData): ExplorePanelData => {\n if (data.logsFrames.length === 0) {\n return { ...data, logsResult: null };\n }\n\n const intervalMs = data.request?.intervalMs;\n const newResults = dataFrameToLogsModel(\n data.logsFrames,\n intervalMs,\n options.absoluteRange,\n options.queries,\n options.deduplicate\n );\n const sortOrder = refreshIntervalToSortOrder(options.refreshInterval);\n const sortedNewResults = sortLogsResult(newResults, sortOrder);\n const rows = sortedNewResults.rows;\n const series = sortedNewResults.series;\n const logsResult = { ...sortedNewResults, rows, series };\n\n return { ...data, logsResult };\n };\n\n// decorateData applies all decorators\nexport function decorateData(\n data: PanelData,\n queryResponse: PanelData,\n logsResultDecorator: (data: ExplorePanelData) => ExplorePanelData,\n queries: DataQuery[] | undefined,\n correlations: CorrelationData[] | undefined,\n showCorrelationEditorLinks: boolean,\n defaultCorrelationTargetDatasource?: DataSourceApi\n): Observable<ExplorePanelData> {\n return of(data).pipe(\n map((data: PanelData) => preProcessPanelData(data, queryResponse)),\n map(\n decorateWithCorrelations({\n defaultTargetDatasource: defaultCorrelationTargetDatasource,\n showCorrelationEditorLinks,\n queries,\n correlations,\n })\n ),\n map(decorateWithFrameTypeMetadata),\n map(decorateWithGraphResult),\n map(logsResultDecorator),\n mergeMap(decorateWithRawPrometheusResult),\n mergeMap(decorateWithTableResult)\n );\n}\n\n/**\n * Check if frame contains time series, which for our purpose means 1 time column and 1 or more numeric columns.\n */\nfunction isTimeSeries(frame: DataFrame): boolean {\n const grouped = groupBy(frame.fields, (field) => field.type);\n return Boolean(\n Object.keys(grouped).length === 2 && grouped[FieldType.time]?.length === 1 && grouped[FieldType.number]\n );\n}\n\n/**\n * Can we find a panel that matches the type defined on the frame\n *\n * @param frame\n */\nfunction canFindPanel(frame: DataFrame): boolean {\n if (!!frame.meta?.preferredVisualisationPluginId) {\n return hasPanelPlugin(frame.meta?.preferredVisualisationPluginId);\n }\n return false;\n}\n","import { AnyAction, createAction, PayloadAction } from '@reduxjs/toolkit';\nimport deepEqual from 'fast-deep-equal';\nimport { findLast, flatten, groupBy, head, map, mapValues, snakeCase, zipObject } from 'lodash';\nimport { combineLatest, identity, Observable, of, SubscriptionLike, Unsubscribable } from 'rxjs';\nimport { mergeMap, throttleTime } from 'rxjs/operators';\n\nimport {\n AbsoluteTimeRange,\n DataFrame,\n DataQueryErrorType,\n DataQueryResponse,\n DataSourceApi,\n dateTimeForTimeZone,\n hasQueryExportSupport,\n hasQueryImportSupport,\n LoadingState,\n LogsVolumeType,\n QueryFixAction,\n ScopedVars,\n SupplementaryQueryType,\n} from '@grafana/data';\nimport { combinePanelData } from '@grafana/o11y-ds-frontend';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport {\n buildQueryTransaction,\n ensureQueries,\n generateEmptyQuery,\n generateNewKeyAndAddRefIdIfMissing,\n getQueryKeys,\n getTimeRange,\n hasNonEmptyQuery,\n stopQueryState,\n} from 'app/core/utils/explore';\nimport { getShiftedTimeRange } from 'app/core/utils/timePicker';\nimport { getCorrelationsBySourceUIDs } from 'app/features/correlations/utils';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { getFiscalYearStartMonth, getTimeZone } from 'app/features/profile/state/selectors';\nimport { SupportingQueryType } from 'app/plugins/datasource/loki/types';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\nimport {\n ExploreItemState,\n ExplorePanelData,\n ExploreState,\n QueryOptions,\n QueryTransaction,\n SupplementaryQueries,\n} from 'app/types/explore';\nimport { createAsyncThunk, StoreState, ThunkDispatch, ThunkResult } from 'app/types/store';\n\nimport { notifyApp } from '../../../core/actions';\nimport { createErrorNotification } from '../../../core/copy/appNotification';\nimport { runRequest } from '../../query/state/runRequest';\nimport { decorateData, decorateWithLogsResult } from '../utils/decorators';\nimport {\n getSupplementaryQueryProvider,\n storeSupplementaryQueryEnabled,\n supplementaryQueryTypes,\n} from '../utils/supplementaryQueries';\n\nimport { getCorrelations } from './correlations';\nimport { saveCorrelationsAction } from './explorePane';\nimport { addHistoryItem, loadRichHistory } from './history';\nimport { changeCorrelationEditorDetails } from './main';\nimport { updateTime } from './time';\nimport {\n createCacheKey,\n filterLogRowsByIndex,\n getCorrelationsData,\n getDatasourceUIDs,\n getResultsFromCache,\n} from './utils';\n\n/**\n * Derives from explore state if a given Explore pane is waiting for more data to be received\n */\nexport const selectIsWaitingForData = (exploreId: string) => {\n return (state: StoreState) => {\n const panelState = state.explore.panes[exploreId];\n if (!panelState) {\n return false;\n }\n return panelState.queryResponse\n ? panelState.queryResponse.state === LoadingState.Loading ||\n panelState.queryResponse.state === LoadingState.Streaming\n : false;\n };\n};\n\n/**\n * Adds a query row after the row with the given index.\n */\nexport interface AddQueryRowPayload {\n exploreId: string;\n index: number;\n query: DataQuery;\n}\nexport const addQueryRowAction = createAction<AddQueryRowPayload>('explore/addQueryRow');\n\n/**\n * Query change handler for the query row with the given index.\n * If `override` is reset the query modifications and run the queries. Use this to set queries via a link.\n */\nexport interface ChangeQueriesPayload {\n exploreId: string;\n queries: DataQuery[];\n options?: {\n skipAutoImport?: boolean;\n };\n}\nexport const changeQueriesAction = createAction<ChangeQueriesPayload>('explore/changeQueries');\n\n/**\n * Cancel running queries.\n */\nexport interface CancelQueriesPayload {\n exploreId: string;\n}\nexport const cancelQueriesAction = createAction<CancelQueriesPayload>('explore/cancelQueries');\n\nexport interface QueriesImportedPayload {\n exploreId: string;\n queries: DataQuery[];\n}\nexport const queriesImportedAction = createAction<QueriesImportedPayload>('explore/queriesImported');\n\nexport interface QueryStoreSubscriptionPayload {\n exploreId: string;\n querySubscription: Unsubscribable;\n}\n\nexport const queryStoreSubscriptionAction = createAction<QueryStoreSubscriptionPayload>(\n 'explore/queryStoreSubscription'\n);\n\nconst setSupplementaryQueryEnabledAction = createAction<{\n exploreId: string;\n type: SupplementaryQueryType;\n enabled: boolean;\n}>('explore/setSupplementaryQueryEnabledAction');\n\nexport interface StoreSupplementaryQueryDataProvider {\n exploreId: string;\n dataProvider?: Observable<DataQueryResponse>;\n type: SupplementaryQueryType;\n}\n\nexport interface CleanSupplementaryQueryDataProvider {\n exploreId: string;\n type: SupplementaryQueryType;\n}\n\n/**\n * Stores available supplementary query data provider after running the query. Used internally by runQueries().\n */\nexport const storeSupplementaryQueryDataProviderAction = createAction<StoreSupplementaryQueryDataProvider>(\n 'explore/storeSupplementaryQueryDataProviderAction'\n);\n\nexport const cleanSupplementaryQueryDataProviderAction = createAction<CleanSupplementaryQueryDataProvider>(\n 'explore/cleanSupplementaryQueryDataProviderAction'\n);\n\nexport const cleanSupplementaryQueryAction = createAction<{ exploreId: string; type: SupplementaryQueryType }>(\n 'explore/cleanSupplementaryQueryAction'\n);\n\nexport interface StoreSupplementaryQueryDataSubscriptionPayload {\n exploreId: string;\n dataSubscription?: SubscriptionLike;\n type: SupplementaryQueryType;\n}\n\n/**\n * Stores current logs volume subscription for given explore pane.\n */\nconst storeSupplementaryQueryDataSubscriptionAction = createAction<StoreSupplementaryQueryDataSubscriptionPayload>(\n 'explore/storeSupplementaryQueryDataSubscriptionAction'\n);\n\n/**\n * Stores data returned by the provider. Used internally by loadSupplementaryQueryData().\n */\nconst updateSupplementaryQueryDataAction = createAction<{\n exploreId: string;\n type: SupplementaryQueryType;\n data: DataQueryResponse;\n}>('explore/updateSupplementaryQueryDataAction');\n\nexport interface QueryEndedPayload {\n exploreId: string;\n response: ExplorePanelData;\n}\nexport const queryStreamUpdatedAction = createAction<QueryEndedPayload>('explore/queryStreamUpdated');\n\n/**\n * Reset queries to the given queries. Any modifications will be discarded.\n */\nexport interface SetQueriesPayload {\n exploreId: string;\n queries: DataQuery[];\n}\nexport const setQueriesAction = createAction<SetQueriesPayload>('explore/setQueries');\n\nexport interface ChangeLoadingStatePayload {\n exploreId: string;\n loadingState: LoadingState;\n}\nexport const changeLoadingStateAction = createAction<ChangeLoadingStatePayload>('changeLoadingState');\n\nexport interface SetPausedStatePayload {\n exploreId: string;\n isPaused: boolean;\n}\nexport const setPausedStateAction = createAction<SetPausedStatePayload>('explore/setPausedState');\n\nexport interface ClearLogsPayload {\n exploreId: string;\n}\nexport const clearLogs = createAction<ClearLogsPayload>('explore/clearLogs');\n/**\n * Start a scan for more results using the given scanner.\n * @param exploreId Explore area\n * @param scanner Function that a) returns a new time range and b) triggers a query run for the new range\n */\nexport interface ScanStartPayload {\n exploreId: string;\n}\nexport const scanStartAction = createAction<ScanStartPayload>('explore/scanStart');\n\n/**\n * Stop any scanning for more results.\n */\nexport interface ScanStopPayload {\n exploreId: string;\n}\nexport const scanStopAction = createAction<ScanStopPayload>('explore/scanStop');\n\n/**\n * Adds query results to cache.\n * This is currently used to cache last 5 query results for log queries run from logs navigation (pagination).\n */\nexport interface AddResultsToCachePayload {\n exploreId: string;\n cacheKey: string;\n queryResponse: ExplorePanelData;\n}\nexport const addResultsToCacheAction = createAction<AddResultsToCachePayload>('explore/addResultsToCache');\n\n/**\n * Clears cache.\n */\nexport interface ClearCachePayload {\n exploreId: string;\n}\nexport const clearCacheAction = createAction<ClearCachePayload>('explore/clearCache');\n\n/**\n * Adds a query row after the row with the given index.\n */\nexport function addQueryRow(exploreId: string, index: number): ThunkResult<Promise<void>> {\n return async (dispatch, getState) => {\n const pane = getState().explore.panes[exploreId]!;\n let datasourceOverride = undefined;\n\n // if we are not in mixed mode, use root datasource\n if (!pane.datasourceInstance?.meta.mixed) {\n datasourceOverride = pane.datasourceInstance?.getRef();\n } else {\n // else try to get the datasource from the last query that defines one, falling back to the default datasource\n datasourceOverride = findLast(pane.queries, (query) => !!query.datasource)?.datasource || undefined;\n }\n\n const query = await generateEmptyQuery(pane.queries, index, datasourceOverride);\n\n dispatch(addQueryRowAction({ exploreId, index, query }));\n };\n}\n/**\n * Cancel running queries\n */\nexport function cancelQueries(exploreId: string): ThunkResult<void> {\n return (dispatch, getState) => {\n dispatch(scanStopAction({ exploreId }));\n dispatch(cancelQueriesAction({ exploreId }));\n\n const supplementaryQueries = getState().explore.panes[exploreId]!.supplementaryQueries;\n // Cancel all data providers\n for (const type of supplementaryQueryTypes) {\n dispatch(cleanSupplementaryQueryDataProviderAction({ exploreId, type }));\n\n // And clear any incomplete data\n if (supplementaryQueries[type]?.data?.state !== LoadingState.Done) {\n dispatch(cleanSupplementaryQueryAction({ exploreId, type }));\n }\n }\n };\n}\n\nconst addDatasourceToQueries = (datasource: DataSourceApi, queries: DataQuery[]) => {\n const dataSourceRef = datasource.getRef();\n return queries.map((query: DataQuery) => {\n return { ...query, datasource: dataSourceRef };\n });\n};\n\nconst getImportableQueries = async (\n targetDataSource: DataSourceApi,\n sourceDataSource: DataSourceApi,\n queries: DataQuery[]\n): Promise<DataQuery[]> => {\n let queriesOut: DataQuery[] = [];\n if (sourceDataSource.meta?.id === targetDataSource.meta?.id) {\n queriesOut = queries;\n } else if (hasQueryExportSupport(sourceDataSource) && hasQueryImportSupport(targetDataSource)) {\n const abstractQueries = await sourceDataSource.exportToAbstractQueries(queries);\n queriesOut = await targetDataSource.importFromAbstractQueries(abstractQueries);\n } else if (targetDataSource.importQueries) {\n // Datasource-specific importers\n queriesOut = await targetDataSource.importQueries(queries, sourceDataSource);\n }\n // add new datasource to queries before returning\n return addDatasourceToQueries(targetDataSource, queriesOut);\n};\n\nexport const changeQueries = createAsyncThunk<void, ChangeQueriesPayload>(\n 'explore/changeQueries',\n async ({ queries, exploreId, options }, { getState, dispatch }) => {\n let queriesImported = false;\n const oldQueries = getState().explore.panes[exploreId]!.queries;\n const rootUID = getState().explore.panes[exploreId]!.datasourceInstance?.uid;\n const correlationDetails = getState().explore.correlationEditorDetails;\n const isCorrelationsEditorMode = correlationDetails?.editorMode || false;\n const isLeftPane = Object.keys(getState().explore.panes)[0] === exploreId;\n\n if (!isLeftPane && isCorrelationsEditorMode && !correlationDetails?.queryEditorDirty) {\n dispatch(changeCorrelationEditorDetails({ queryEditorDirty: true }));\n }\n\n for (const newQuery of queries) {\n for (const oldQuery of oldQueries) {\n if (newQuery.refId === oldQuery.refId && newQuery.datasource?.type !== oldQuery.datasource?.type) {\n // Skip automatic import if explicitly requested (e.g., query library replacement)\n if (!options?.skipAutoImport) {\n const queryDatasource = await getDataSourceSrv().get(oldQuery.datasource);\n const targetDS = await getDataSourceSrv().get({ uid: newQuery.datasource?.uid });\n await dispatch(importQueries(exploreId, oldQueries, queryDatasource, targetDS, newQuery.refId));\n queriesImported = true;\n }\n }\n\n if (\n rootUID === MIXED_DATASOURCE_NAME &&\n newQuery.refId === oldQuery.refId &&\n newQuery.datasource?.uid !== oldQuery.datasource?.uid\n ) {\n const datasourceUIDs = getDatasourceUIDs(MIXED_DATASOURCE_NAME, queries);\n const correlations = await getCorrelationsBySourceUIDs(datasourceUIDs);\n dispatch(saveCorrelationsAction({ exploreId: exploreId, correlations: correlations.correlations || [] }));\n }\n }\n }\n\n // Importing queries changes the same state, therefore if we are importing queries we don't want to change the state again\n if (!queriesImported) {\n dispatch(changeQueriesAction({ queries, exploreId }));\n }\n\n // if we are removing a query we want to run the remaining ones\n if (queries.length < oldQueries.length) {\n dispatch(runQueries({ exploreId }));\n }\n }\n);\n\n/**\n * Import queries from previous datasource if possible eg Loki and Prometheus have similar query language so the\n * labels part can be reused to get similar data.\n * @param exploreId\n * @param queries\n * @param sourceDataSource\n * @param targetDataSource\n */\nexport const importQueries = (\n exploreId: string,\n queries: DataQuery[],\n sourceDataSource: DataSourceApi | undefined | null,\n targetDataSource: DataSourceApi,\n singleQueryChangeRef?: string // when changing one query DS to another in a mixed environment, we do not want to change all queries, just the one being changed\n): ThunkResult<Promise<DataQuery[] | void>> => {\n return async (dispatch) => {\n if (!sourceDataSource) {\n // explore not initialized\n dispatch(queriesImportedAction({ exploreId, queries }));\n return;\n }\n\n let importedQueries = queries;\n // If going to mixed, keep queries with source datasource\n if (targetDataSource.uid === MIXED_DATASOURCE_NAME) {\n importedQueries = queries.map((query) => {\n return { ...query, datasource: sourceDataSource.getRef() };\n });\n }\n // If going from mixed, see what queries you keep by their individual datasources\n else if (sourceDataSource.uid === MIXED_DATASOURCE_NAME) {\n const groupedQueries = groupBy(queries, (query) => query.datasource?.uid);\n const groupedImportableQueries = await Promise.all(\n Object.keys(groupedQueries).map(async (key: string) => {\n const queryDatasource = await getDataSourceSrv().get({ uid: key });\n return await getImportableQueries(targetDataSource, queryDatasource, groupedQueries[key]);\n })\n );\n importedQueries = flatten(groupedImportableQueries.filter((arr) => arr.length > 0));\n } else {\n let queriesStartArr = queries;\n if (singleQueryChangeRef !== undefined) {\n const changedQuery = queries.find((query) => query.refId === singleQueryChangeRef);\n if (changedQuery) {\n queriesStartArr = [changedQuery];\n }\n }\n importedQueries = await getImportableQueries(targetDataSource, sourceDataSource, queriesStartArr);\n }\n\n // this will be the entire imported set, or the single imported query in an array\n let nextQueries = await ensureQueries(importedQueries, targetDataSource.getRef());\n\n if (singleQueryChangeRef !== undefined) {\n // if the query import didn't return a result, there was no ability to import between datasources. Create an empty query for the datasource\n if (importedQueries.length === 0) {\n const dsQuery = await generateEmptyQuery([], undefined, targetDataSource.getRef());\n importedQueries = [dsQuery];\n }\n\n // capture the single imported query, and copy the original set\n const updatedQueryIdx = queries.findIndex((query) => query.refId === singleQueryChangeRef);\n // for single query change, all areas that generate refId do not know about other queries, so just copy the existing refID to the new query\n const changedQuery = { ...nextQueries[0], refId: queries[updatedQueryIdx].refId };\n nextQueries = [...queries];\n\n // replace the changed query\n nextQueries[updatedQueryIdx] = changedQuery;\n }\n\n dispatch(queriesImportedAction({ exploreId, queries: nextQueries }));\n return nextQueries;\n };\n};\n\n/**\n * Action to modify a query given a datasource-specific modifier action.\n * @param exploreId Explore area\n * @param modification Action object with a type, e.g., ADD_FILTER\n * @param modifier Function that executes the modification, typically `datasourceInstance.modifyQueries`.\n */\nexport function modifyQueries(\n exploreId: string,\n modification: QueryFixAction,\n modifier: (query: DataQuery, modification: QueryFixAction) => Promise<DataQuery>\n): ThunkResult<void> {\n return async (dispatch, getState) => {\n const state = getState().explore.panes[exploreId]!;\n\n const { queries } = state;\n\n const nextQueriesRaw = await Promise.all(queries.map((query) => modifier({ ...query }, modification)));\n\n const nextQueries = nextQueriesRaw.map((nextQuery, i) => {\n return generateNewKeyAndAddRefIdIfMissing(nextQuery, queries, i);\n });\n\n dispatch(setQueriesAction({ exploreId, queries: nextQueries }));\n if (!modification.preventSubmit) {\n dispatch(runQueries({ exploreId }));\n }\n };\n}\n\nfunction filterQuery(datasource: DataSourceApi, query: DataQuery) {\n if (datasource.filterQuery && !datasource.filterQuery(query)) {\n return undefined; // if filterQuery is implemented and returns false, do not use query\n } else {\n return query; // if filterQuery is not implemented or it is and returns true, use it\n }\n}\n\nasync function handleHistory(\n dispatch: ThunkDispatch,\n state: ExploreState,\n datasource: DataSourceApi,\n queries: DataQuery[]\n) {\n const filteredQueriesRes = await Promise.all(\n queries.map(async (query) => {\n if (query.datasource?.uid === datasource.uid) {\n return filterQuery(datasource, query);\n } else {\n const queryDS = await getDatasourceSrv().get(query.datasource);\n return filterQuery(queryDS, query);\n }\n })\n );\n\n const filteredQueries = filteredQueriesRes.filter((query): query is DataQuery => !!query);\n\n if (filteredQueries.length > 0) {\n /*\n Always write to local storage. If query history is enabled, we will use local storage for autocomplete only (and want to hide errors)\n If query history is disabled, we will use local storage for query history as well, and will want to show errors\n */\n dispatch(addHistoryItem(true, datasource.uid, datasource.name, filteredQueries, config.queryHistoryEnabled));\n if (config.queryHistoryEnabled) {\n // write to remote if flag enabled\n dispatch(addHistoryItem(false, datasource.uid, datasource.name, filteredQueries, false));\n }\n\n // Because filtering happens in the backend we cannot add a new entry without checking if it matches currently\n // used filters. Instead, we refresh the query history list.\n await dispatch(loadRichHistory());\n }\n}\n\ninterface RunQueriesOptions {\n exploreId: string;\n preserveCache?: boolean;\n}\n/**\n * Main action to run queries and dispatches sub-actions based on which result viewers are active\n */\nexport const runQueries = createAsyncThunk<void, RunQueriesOptions>(\n 'explore/runQueries',\n async ({ exploreId, preserveCache }, { dispatch, getState }) => {\n // Running cancel queries when Explore is scanning will cancel the scanning state\n if (!getState().explore?.panes[exploreId]?.scanning) {\n dispatch(cancelQueries(exploreId));\n }\n\n const { defaultCorrelationEditorDatasource, scopedVars, showCorrelationEditorLinks } = await getCorrelationsData(\n getState(),\n exploreId\n );\n const correlations$ = getCorrelations(exploreId);\n\n dispatch(updateTime({ exploreId }));\n\n // We always want to clear cache unless we explicitly pass preserveCache parameter\n if (preserveCache !== true) {\n dispatch(clearCache(exploreId));\n }\n\n const exploreState = getState();\n const exploreItemState = exploreState.explore.panes[exploreId]!;\n const {\n datasourceInstance,\n containerWidth,\n isLive: live,\n range,\n scanning,\n queryResponse,\n querySubscription,\n refreshInterval,\n absoluteRange,\n cache,\n supplementaryQueries,\n } = exploreItemState;\n\n let newQuerySource: Observable<ExplorePanelData>;\n let newQuerySubscription: SubscriptionLike;\n\n const queries = exploreItemState.queries.map((query) => ({\n ...query,\n datasource: query.datasource || datasourceInstance?.getRef(),\n }));\n\n if (datasourceInstance != null) {\n handleHistory(dispatch, getState().explore, datasourceInstance, queries);\n }\n\n const cachedValue = getResultsFromCache(cache, absoluteRange);\n\n // If we have results saved in cache, we are going to use those results instead of running queries\n if (cachedValue) {\n newQuerySource = combineLatest([of(cachedValue), correlations$]).pipe(\n mergeMap(([data, correlations]) =>\n decorateData(\n data,\n queryResponse,\n decorateWithLogsResult({ absoluteRange, refreshInterval, queries }),\n queries,\n correlations,\n showCorrelationEditorLinks,\n defaultCorrelationEditorDatasource\n )\n )\n );\n\n newQuerySubscription = newQuerySource.subscribe((data) => {\n dispatch(queryStreamUpdatedAction({ exploreId, response: data }));\n });\n\n // If we don't have results saved in cache, run new queries\n } else {\n if (!hasNonEmptyQuery(queries) || !datasourceInstance) {\n return;\n }\n\n // Some datasource's query builders allow per-query interval limits,\n // but we're using the datasource interval limit for now\n const minInterval = datasourceInstance?.interval;\n\n stopQueryState(querySubscription);\n\n const queryOptions: QueryOptions = {\n minInterval,\n // maxDataPoints is used in:\n // Loki - used for logs streaming for buffer size, with undefined it falls back to datasource config if it supports that.\n // Elastic - limits the number of datapoints for the counts query and for logs it has hardcoded limit.\n // Influx - used to correctly display logs in graph\n // TODO:unification\n // maxDataPoints: mode === ExploreMode.Logs && datasourceId === 'loki' ? undefined : containerWidth,\n maxDataPoints: containerWidth,\n liveStreaming: live,\n };\n\n const timeZone = getTimeZone(getState().user);\n const transaction = buildQueryTransaction(\n exploreId,\n queries,\n queryOptions,\n range,\n scanning,\n timeZone,\n scopedVars\n );\n\n dispatch(changeLoadingStateAction({ exploreId, loadingState: LoadingState.Loading }));\n\n newQuerySource = combineLatest([\n runRequest(datasourceInstance, transaction.request)\n // Simple throttle for live tailing, in case of > 1000 rows per interval we spend about 200ms on processing and\n // rendering. In case this is optimized this can be tweaked, but also it should be only as fast as user\n // actually can see what is happening.\n .pipe(live ? throttleTime(500) : identity),\n correlations$,\n ]).pipe(\n mergeMap(([data, correlations]) =>\n decorateData(\n data,\n queryResponse,\n decorateWithLogsResult({ absoluteRange, refreshInterval, queries }),\n queries,\n correlations,\n showCorrelationEditorLinks,\n defaultCorrelationEditorDatasource\n )\n )\n );\n\n newQuerySubscription = newQuerySource.subscribe({\n next(data) {\n const exploreState = getState().explore.panes[exploreId];\n dispatch(queryStreamUpdatedAction({ exploreId, response: data }));\n\n // Keep scanning for results if this was the last scanning transaction\n if (exploreState!.scanning) {\n console.log(data.series);\n if (data.state === LoadingState.Done && data.series.length === 0) {\n const range = getShiftedTimeRange(-1, exploreState!.range);\n dispatch(updateTime({ exploreId, absoluteRange: range }));\n dispatch(runQueries({ exploreId }));\n } else if (data.series[0]?.length > 0 || data.state === LoadingState.Done) {\n // We can stop scanning if we have a result\n dispatch(scanStopAction({ exploreId }));\n }\n }\n },\n error(error) {\n dispatch(notifyApp(createErrorNotification('Query processing error', error)));\n dispatch(changeLoadingStateAction({ exploreId, loadingState: LoadingState.Error }));\n console.error(error);\n },\n complete() {\n // In case we don't get any response at all but the observable completed, make sure we stop loading state.\n // This is for cases when some queries are noop like running first query after load but we don't have any\n // actual query input.\n if (getState().explore.panes[exploreId]!.queryResponse.state === LoadingState.Loading) {\n dispatch(changeLoadingStateAction({ exploreId, loadingState: LoadingState.Done }));\n }\n },\n });\n\n if (live) {\n for (const type of supplementaryQueryTypes) {\n dispatch(\n cleanSupplementaryQueryDataProviderAction({\n exploreId,\n type,\n })\n );\n dispatch(cleanSupplementaryQueryAction({ exploreId, type }));\n }\n } else {\n dispatch(\n handleSupplementaryQueries({\n exploreId,\n datasourceInstance,\n transaction,\n newQuerySource,\n supplementaryQueries,\n queries,\n absoluteRange,\n })\n );\n }\n }\n\n dispatch(queryStoreSubscriptionAction({ exploreId, querySubscription: newQuerySubscription }));\n }\n);\n\ninterface RunLoadMoreLogsQueriesOptions {\n exploreId: string;\n absoluteRange: AbsoluteTimeRange;\n}\n/**\n * Dedicated action to run log queries requesting more results.\n */\nexport const runLoadMoreLogsQueries = createAsyncThunk<void, RunLoadMoreLogsQueriesOptions>(\n 'explore/runLoadMoreQueries',\n async ({ exploreId, absoluteRange }, { dispatch, getState }) => {\n dispatch(cancelQueries(exploreId));\n\n const { datasourceInstance, containerWidth, queryResponse } = getState().explore.panes[exploreId]!;\n const { defaultCorrelationEditorDatasource, scopedVars, showCorrelationEditorLinks } = await getCorrelationsData(\n getState(),\n exploreId\n );\n const correlations$ = getCorrelations(exploreId);\n\n let newQuerySource: Observable<ExplorePanelData>;\n\n const queries = queryResponse.logsResult?.queries || [];\n const logRefIds = queryResponse.logsFrames.map((frame) => frame.refId);\n const logQueries = queries\n .filter((query) => logRefIds.includes(query.refId))\n .map((query: DataQuery) => ({\n ...query,\n datasource: query.datasource || datasourceInstance?.getRef(),\n refId: query.refId,\n supportingQueryType: SupportingQueryType.InfiniteScroll,\n }));\n\n if (!hasNonEmptyQuery(logQueries) || !datasourceInstance) {\n return;\n }\n\n const queryOptions: QueryOptions = {\n minInterval: datasourceInstance?.interval,\n maxDataPoints: containerWidth,\n };\n\n const timeZone = getTimeZone(getState().user);\n const range = getTimeRange(\n timeZone,\n {\n from: dateTimeForTimeZone(timeZone, absoluteRange.from),\n to: dateTimeForTimeZone(timeZone, absoluteRange.to),\n },\n getFiscalYearStartMonth(getState().user)\n );\n const transaction = buildQueryTransaction(exploreId, logQueries, queryOptions, range, false, timeZone, scopedVars);\n\n dispatch(changeLoadingStateAction({ exploreId, loadingState: LoadingState.Loading }));\n\n newQuerySource = combineLatest([runRequest(datasourceInstance, transaction.request), correlations$]).pipe(\n mergeMap(([data, correlations]) => {\n // For query splitting, otherwise duplicates results\n if (data.state !== LoadingState.Done) {\n // While loading, return the previous response and override state, otherwise it's set to Done\n return of({ ...queryResponse, state: LoadingState.Loading });\n }\n return decorateData(\n // This shouldn't be needed after https://github.com/grafana/grafana/issues/57327 is fixed\n combinePanelData(queryResponse, data),\n queryResponse,\n decorateWithLogsResult({ absoluteRange, queries, deduplicate: true }),\n logQueries,\n correlations,\n showCorrelationEditorLinks,\n defaultCorrelationEditorDatasource\n );\n })\n );\n\n newQuerySource.subscribe({\n next(data) {\n dispatch(queryStreamUpdatedAction({ exploreId, response: data }));\n },\n error(error) {\n dispatch(notifyApp(createErrorNotification('Query processing error', error)));\n dispatch(changeLoadingStateAction({ exploreId, loadingState: LoadingState.Error }));\n console.error(error);\n },\n complete() {\n dispatch(changeLoadingStateAction({ exploreId, loadingState: LoadingState.Done }));\n },\n });\n }\n);\n\nconst groupDataQueries = async (datasources: DataQuery[], scopedVars: ScopedVars) => {\n const nonMixedDataSources = datasources.filter((t) => {\n return t.datasource?.uid !== MIXED_DATASOURCE_NAME;\n });\n const sets: { [key: string]: DataQuery[] } = groupBy(nonMixedDataSources, 'datasource.uid');\n\n return await Promise.all(\n Object.values(sets).map(async (targets) => {\n const datasource = await getDataSourceSrv().get(targets[0].datasource, scopedVars);\n return {\n datasource,\n targets,\n };\n })\n );\n};\n\ntype HandleSupplementaryQueriesOptions = {\n exploreId: string;\n transaction: QueryTransaction;\n datasourceInstance: DataSourceApi;\n newQuerySource: Observable<ExplorePanelData>;\n supplementaryQueries: SupplementaryQueries;\n queries: DataQuery[];\n absoluteRange: AbsoluteTimeRange;\n};\n\nconst handleSupplementaryQueries = createAsyncThunk(\n 'explore/handleSupplementaryQueries',\n async (\n {\n datasourceInstance,\n exploreId,\n transaction,\n newQuerySource,\n supplementaryQueries,\n queries,\n absoluteRange,\n }: HandleSupplementaryQueriesOptions,\n { dispatch }\n ) => {\n let groupedQueries;\n if (datasourceInstance.meta.mixed) {\n groupedQueries = await groupDataQueries(transaction.request.targets, transaction.request.scopedVars);\n } else {\n groupedQueries = [{ datasource: datasourceInstance, targets: transaction.request.targets }];\n }\n\n for (const type of supplementaryQueryTypes) {\n // We always prepare provider, even is supplementary query is disabled because when the user\n // enables the query, we need to load the data, so we need the provider\n const dataProvider = getSupplementaryQueryProvider(\n groupedQueries,\n type,\n {\n ...transaction.request,\n requestId: `${transaction.request.requestId}_${snakeCase(type)}`,\n },\n newQuerySource\n );\n\n if (dataProvider) {\n dispatch(\n storeSupplementaryQueryDataProviderAction({\n exploreId,\n type,\n dataProvider,\n })\n );\n\n if (!canReuseSupplementaryQueryData(supplementaryQueries[type].data, queries, absoluteRange)) {\n dispatch(cleanSupplementaryQueryAction({ exploreId, type }));\n if (supplementaryQueries[type].enabled) {\n dispatch(loadSupplementaryQueryData(exploreId, type));\n }\n }\n } else {\n // If data source instance doesn't support this supplementary query, we clean the data provider\n dispatch(\n cleanSupplementaryQueryDataProviderAction({\n exploreId,\n type,\n })\n );\n }\n }\n }\n);\n\n/**\n * Checks if after changing the time range the existing data can be used to show supplementary query.\n * It can happen if queries are the same and new time range is within existing data time range.\n */\nfunction canReuseSupplementaryQueryData(\n supplementaryQueryData: DataQueryResponse | undefined,\n newQueries: DataQuery[],\n selectedTimeRange: AbsoluteTimeRange\n): boolean {\n if (!supplementaryQueryData) {\n return false;\n }\n\n const newQueriesByRefId = zipObject(map(newQueries, 'refId'), newQueries);\n\n const existingDataByRefId = mapValues(\n groupBy(\n supplementaryQueryData.data.map((dataFrame: DataFrame) => dataFrame.meta?.custom?.sourceQuery),\n 'refId'\n ),\n head\n );\n\n const allSupportZoomingIn = supplementaryQueryData.data.every((data: DataFrame) => {\n // If log volume is based on returned log lines (i.e. LogsVolumeType.Limited),\n // zooming in may return different results, so we don't want to reuse the data\n return data.meta?.custom?.logsVolumeType === LogsVolumeType.FullRange;\n });\n\n const allQueriesAreTheSame = deepEqual(newQueriesByRefId, existingDataByRefId);\n\n const allResultsHaveWiderRange = supplementaryQueryData.data.every((data: DataFrame) => {\n const dataRange = data.meta?.custom?.absoluteRange;\n // Only first data frame in the response may contain the absolute range\n if (!dataRange) {\n return true;\n }\n const hasWiderRange = dataRange && dataRange.from <= selectedTimeRange.from && selectedTimeRange.to <= dataRange.to;\n return hasWiderRange;\n });\n\n return allSupportZoomingIn && allQueriesAreTheSame && allResultsHaveWiderRange;\n}\n\n/**\n * Reset queries to the given queries. Any modifications will be discarded.\n * Use this action for clicks on query examples. Triggers a query run.\n */\nexport function setQueries(exploreId: string, rawQueries: DataQuery[]): ThunkResult<void> {\n return (dispatch, getState) => {\n // Inject react keys into query objects\n const queries = getState().explore.panes[exploreId]!.queries;\n const nextQueries = rawQueries.map((query, index) => generateNewKeyAndAddRefIdIfMissing(query, queries, index));\n dispatch(setQueriesAction({ exploreId, queries: nextQueries }));\n dispatch(runQueries({ exploreId }));\n };\n}\n\n/**\n * Start a scan for more results using the given scanner.\n * @param exploreId Explore area\n * @param scanner Function that a) returns a new time range and b) triggers a query run for the new range\n */\nexport function scanStart(exploreId: string): ThunkResult<void> {\n return (dispatch, getState) => {\n // Register the scanner\n dispatch(scanStartAction({ exploreId }));\n // Scanning must trigger query run, and return the new range\n const range = getShiftedTimeRange(-1, getState().explore.panes[exploreId]!.range);\n // Set the new range to be displayed\n dispatch(updateTime({ exploreId, absoluteRange: range }));\n dispatch(runQueries({ exploreId }));\n };\n}\n\nexport function addResultsToCache(exploreId: string): ThunkResult<void> {\n return (dispatch, getState) => {\n const queryResponse = getState().explore.panes[exploreId]!.queryResponse;\n const absoluteRange = getState().explore.panes[exploreId]!.absoluteRange;\n const cacheKey = createCacheKey(absoluteRange);\n\n // Save results to cache only when all results received and loading is done\n if (queryResponse.state === LoadingState.Done) {\n dispatch(addResultsToCacheAction({ exploreId, cacheKey, queryResponse }));\n }\n };\n}\n\nexport function clearCache(exploreId: string): ThunkResult<void> {\n return (dispatch, getState) => {\n dispatch(clearCacheAction({ exploreId }));\n };\n}\n\n/**\n * Initializes loading logs volume data and stores emitted value.\n */\nexport function loadSupplementaryQueryData(exploreId: string, type: SupplementaryQueryType): ThunkResult<void> {\n return (dispatch, getState) => {\n const { supplementaryQueries } = getState().explore.panes[exploreId]!;\n const dataProvider = supplementaryQueries[type].dataProvider;\n\n if (dataProvider) {\n const dataSubscription = dataProvider.subscribe({\n next: (supplementaryQueryData: DataQueryResponse) => {\n dispatch(updateSupplementaryQueryDataAction({ exploreId, type, data: supplementaryQueryData }));\n },\n });\n dispatch(\n storeSupplementaryQueryDataSubscriptionAction({\n exploreId,\n type,\n dataSubscription,\n })\n );\n }\n };\n}\n\nexport function setSupplementaryQueryEnabled(\n exploreId: string,\n enabled: boolean,\n type: SupplementaryQueryType\n): ThunkResult<void> {\n return (dispatch, getState) => {\n dispatch(setSupplementaryQueryEnabledAction({ exploreId, enabled, type }));\n storeSupplementaryQueryEnabled(enabled, type);\n if (enabled) {\n dispatch(loadSupplementaryQueryData(exploreId, type));\n }\n };\n}\n\n//\n// Reducer\n//\n\n// Redux Toolkit uses ImmerJs as part of their solution to ensure that state objects are not mutated.\n// ImmerJs has an autoFreeze option that freezes objects from change which means this reducer can't be migrated to createSlice\n// because the state would become frozen and during run time we would get errors because flot (Graph lib) would try to mutate\n// the frozen state.\n// https://github.com/reduxjs/redux-toolkit/issues/242\nexport const queryReducer = (state: ExploreItemState, action: AnyAction): ExploreItemState => {\n if (addQueryRowAction.match(action)) {\n const { queries } = state;\n const { index, query } = action.payload;\n\n // Add to queries, which will cause a new row to be rendered\n const nextQueries = [...queries.slice(0, index + 1), { ...query }, ...queries.slice(index + 1)];\n\n return {\n ...state,\n queries: nextQueries,\n queryKeys: getQueryKeys(nextQueries),\n };\n }\n\n if (changeQueriesAction.match(action)) {\n const { queries } = action.payload;\n\n return {\n ...state,\n queries,\n };\n }\n\n if (cancelQueriesAction.match(action)) {\n stopQueryState(state.querySubscription);\n\n return {\n ...state,\n // mark existing request as done (may be incomplete)\n ...(state.queryResponse\n ? {\n queryResponse: {\n ...state.queryResponse,\n state: LoadingState.Done,\n },\n }\n : {}),\n };\n }\n\n if (setQueriesAction.match(action)) {\n const { queries } = action.payload;\n return {\n ...state,\n queries: queries.slice(),\n queryKeys: getQueryKeys(queries),\n };\n }\n\n if (queryStoreSubscriptionAction.match(action)) {\n const { querySubscription } = action.payload;\n return {\n ...state,\n querySubscription,\n };\n }\n\n if (setSupplementaryQueryEnabledAction.match(action)) {\n const { enabled, type } = action.payload;\n const { supplementaryQueries } = state;\n const dataSubscription = supplementaryQueries[type].dataSubscription;\n if (!enabled && dataSubscription) {\n dataSubscription.unsubscribe();\n }\n\n const nextSupplementaryQueries: SupplementaryQueries = {\n ...supplementaryQueries,\n // NOTE: the dataProvider is not cleared, we may need it later,\n // if the user re-enables the supplementary query\n [type]: { ...supplementaryQueries[type], enabled, data: undefined },\n };\n\n return {\n ...state,\n supplementaryQueries: nextSupplementaryQueries,\n };\n }\n\n if (storeSupplementaryQueryDataProviderAction.match(action)) {\n const { dataProvider, type } = action.payload;\n const { supplementaryQueries } = state;\n const supplementaryQuery = supplementaryQueries[type];\n\n if (supplementaryQuery?.dataSubscription) {\n supplementaryQuery.dataSubscription.unsubscribe();\n }\n\n const nextSupplementaryQueries = {\n ...supplementaryQueries,\n [type]: { ...supplementaryQuery, dataProvider, dataSubscription: undefined },\n };\n\n return {\n ...state,\n supplementaryQueries: nextSupplementaryQueries,\n };\n }\n\n if (cleanSupplementaryQueryDataProviderAction.match(action)) {\n const { type } = action.payload;\n const { supplementaryQueries } = state;\n const supplementaryQuery = supplementaryQueries[type];\n\n if (supplementaryQuery?.dataSubscription) {\n supplementaryQuery.dataSubscription.unsubscribe();\n }\n\n const nextSupplementaryQueries = {\n ...supplementaryQueries,\n [type]: { ...supplementaryQuery, dataProvider: undefined, dataSubscription: undefined },\n };\n\n return {\n ...state,\n supplementaryQueries: nextSupplementaryQueries,\n };\n }\n\n if (cleanSupplementaryQueryAction.match(action)) {\n const { type } = action.payload;\n const { supplementaryQueries } = state;\n const nextSupplementaryQueries = {\n ...supplementaryQueries,\n [type]: { ...supplementaryQueries[type], data: undefined },\n };\n return {\n ...state,\n supplementaryQueries: nextSupplementaryQueries,\n };\n }\n\n if (storeSupplementaryQueryDataSubscriptionAction.match(action)) {\n const { dataSubscription, type } = action.payload;\n\n const { supplementaryQueries } = state;\n const nextSupplementaryQueries = {\n ...supplementaryQueries,\n [type]: { ...supplementaryQueries[type], dataSubscription },\n };\n\n return {\n ...state,\n supplementaryQueries: nextSupplementaryQueries,\n };\n }\n\n if (updateSupplementaryQueryDataAction.match(action)) {\n let { data, type } = action.payload;\n const { supplementaryQueries } = state;\n\n const nextSupplementaryQueries = {\n ...supplementaryQueries,\n [type]: { ...supplementaryQueries[type], data },\n };\n\n return {\n ...state,\n supplementaryQueries: nextSupplementaryQueries,\n };\n }\n\n if (queryStreamUpdatedAction.match(action)) {\n return processQueryResponse(state, action);\n }\n\n if (queriesImportedAction.match(action)) {\n const { queries } = action.payload;\n return {\n ...state,\n queries,\n queryKeys: getQueryKeys(queries),\n };\n }\n\n if (changeLoadingStateAction.match(action)) {\n const { loadingState } = action.payload;\n return {\n ...state,\n queryResponse: {\n ...state.queryResponse,\n state: loadingState,\n },\n };\n }\n\n if (setPausedStateAction.match(action)) {\n const { isPaused } = action.payload;\n return {\n ...state,\n isPaused: isPaused,\n };\n }\n\n if (scanStartAction.match(action)) {\n return { ...state, scanning: true };\n }\n\n if (scanStopAction.match(action)) {\n return {\n ...state,\n scanning: false,\n scanRange: undefined,\n };\n }\n\n if (addResultsToCacheAction.match(action)) {\n const CACHE_LIMIT = 5;\n const { cache } = state;\n const { queryResponse, cacheKey } = action.payload;\n\n let newCache = [...cache];\n const isDuplicateKey = newCache.some((c) => c.key === cacheKey);\n\n if (!isDuplicateKey) {\n const newCacheItem = { key: cacheKey, value: queryResponse };\n newCache = [newCacheItem, ...newCache].slice(0, CACHE_LIMIT);\n }\n\n return {\n ...state,\n cache: newCache,\n };\n }\n\n if (clearCacheAction.match(action)) {\n return {\n ...state,\n cache: [],\n };\n }\n\n if (clearLogs.match(action)) {\n if (!state.logsResult) {\n return {\n ...state,\n clearedAtIndex: null,\n };\n }\n\n // When in loading state, clear logs and set clearedAtIndex as null.\n // Initially loaded logs will be fully replaced by incoming streamed logs, which may have a different length.\n if (state.queryResponse.state === LoadingState.Loading) {\n return {\n ...state,\n clearedAtIndex: null,\n logsResult: {\n ...state.logsResult,\n rows: [],\n },\n };\n }\n\n const lastItemIndex = state.clearedAtIndex\n ? state.clearedAtIndex + state.logsResult.rows.length\n : state.logsResult.rows.length - 1;\n\n return {\n ...state,\n clearedAtIndex: lastItemIndex,\n logsResult: {\n ...state.logsResult,\n rows: [],\n },\n };\n }\n\n return state;\n};\n\nconst processQueryResponse = (state: ExploreItemState, action: PayloadAction<QueryEndedPayload>): ExploreItemState => {\n const { response } = action.payload;\n const {\n request,\n error,\n graphResult,\n logsResult,\n tableResult,\n rawPrometheusResult,\n traceFrames,\n nodeGraphFrames,\n flameGraphFrames,\n rawPrometheusFrames,\n customFrames,\n } = response;\n\n if (error) {\n if (error.type === DataQueryErrorType.Timeout || error.type === DataQueryErrorType.Cancelled) {\n return { ...state };\n }\n }\n\n if (!request) {\n return { ...state };\n }\n\n return {\n ...state,\n queryResponse: response,\n graphResult,\n tableResult,\n rawPrometheusResult,\n logsResult:\n state.isLive && logsResult\n ? { ...logsResult, rows: filterLogRowsByIndex(state.clearedAtIndex, logsResult.rows) }\n : logsResult,\n showLogs: !!logsResult,\n showMetrics: !!graphResult,\n showTable: !!tableResult?.length,\n showTrace: !!traceFrames.length,\n showNodeGraph: !!nodeGraphFrames.length,\n showRawPrometheus: !!rawPrometheusFrames.length,\n showFlameGraph: !!flameGraphFrames.length,\n showCustom: !!customFrames?.length,\n clearedAtIndex: state.isLive ? state.clearedAtIndex : null,\n };\n};\n","import { getBackendSrv } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\n\nexport interface HistoryListOpts {\n limit: number;\n start: number;\n continueToken?: string;\n}\n\nexport interface RevisionsModel {\n id: number;\n checked: boolean;\n uid: string;\n parentVersion: number;\n version: number;\n created: Date;\n createdBy: string;\n message: string;\n data: Dashboard;\n}\n\nexport class HistorySrv {\n getHistoryList(dashboardUID: string, options: HistoryListOpts) {\n if (typeof dashboardUID !== 'string') {\n return Promise.resolve([]);\n }\n\n return getBackendSrv().get(`api/dashboards/uid/${dashboardUID}/versions`, options);\n }\n\n getDashboardVersion(dashboardUID: string, version: number) {\n if (typeof dashboardUID !== 'string') {\n return Promise.resolve({});\n }\n\n return getBackendSrv().get(`api/dashboards/uid/${dashboardUID}/versions/${version}`);\n }\n\n restoreDashboard(dashboardUID: string, version: number) {\n if (typeof dashboardUID !== 'string') {\n return Promise.resolve({});\n }\n\n const url = `api/dashboards/uid/${dashboardUID}/restore`;\n\n return getBackendSrv().post(url, { version });\n }\n}\n\nconst historySrv = new HistorySrv();\nexport { historySrv };\n","/*!\n * jquery.flot.gauge v1.1.0 *\n *\n * Flot plugin for rendering gauge charts.\n *\n * Copyright (c) 2015 @toyoty99.\n * Licensed under the MIT license.\n */\n\n/**\n * @module flot.gauge\n */\n(function($) {\n\n\n /**\n * Gauge class\n *\n * @class Gauge\n */\n var Gauge = (function() {\n /**\n * context of canvas\n *\n * @property context\n * @type Object\n */\n var context;\n /**\n * placeholder of canvas\n *\n * @property placeholder\n * @type Object\n */\n var placeholder;\n /**\n * options of plot\n *\n * @property options\n * @type Object\n */\n var options;\n /**\n * options of gauge\n *\n * @property gaugeOptions\n * @type Object\n */\n var gaugeOptions;\n /**\n * data series\n *\n * @property series\n * @type Array\n */\n var series;\n /**\n * logger\n *\n * @property logger\n * @type Object\n */\n var logger;\n\n /**\n * constructor\n *\n * @class Gauge\n * @constructor\n * @param {Object} gaugeOptions gauge options\n */\n var Gauge = function(plot, ctx) {\n context = ctx;\n placeholder = plot.getPlaceholder();\n options = plot.getOptions();\n gaugeOptions = options.series.gauges;\n series = plot.getData();\n logger = getLogger(gaugeOptions.debug);\n }\n\n /**\n * calculate layout\n *\n * @method calculateLayout\n * @return the calculated layout properties\n */\n Gauge.prototype.calculateLayout = function() {\n\n var canvasWidth = placeholder.width();\n var canvasHeight = placeholder.height();\n\n\n\n // calculate cell size\n var columns = Math.min(series.length, gaugeOptions.layout.columns);\n var rows = Math.ceil(series.length / columns);\n\n\n\n var margin = gaugeOptions.layout.margin;\n var hMargin = gaugeOptions.layout.hMargin;\n var vMargin = gaugeOptions.layout.vMargin;\n var cellWidth = (canvasWidth - (margin * 2) - (hMargin * (columns - 1))) / columns;\n var cellHeight = (canvasHeight - (margin * 2) - (vMargin * (rows - 1))) / rows;\n if (gaugeOptions.layout.square) {\n var cell = Math.min(cellWidth, cellHeight);\n cellWidth = cell;\n cellHeight = cell;\n }\n\n\n\n // calculate 'auto' values\n calculateAutoValues(gaugeOptions, cellWidth);\n\n // calculate maximum radius\n var cellMargin = gaugeOptions.cell.margin;\n var labelMargin = 0;\n var labelFontSize = 0;\n if (gaugeOptions.label.show) {\n labelMargin = gaugeOptions.label.margin;\n labelFontSize = gaugeOptions.label.font.size;\n }\n var valueMargin = 0;\n var valueFontSize = 0;\n if (gaugeOptions.value.show) {\n valueMargin = gaugeOptions.value.margin;\n valueFontSize = gaugeOptions.value.font.size;\n }\n var thresholdWidth = 0;\n if (gaugeOptions.threshold.show) {\n thresholdWidth = gaugeOptions.threshold.width;\n }\n var thresholdLabelMargin = 0;\n var thresholdLabelFontSize = 0;\n if (gaugeOptions.threshold.label.show) {\n thresholdLabelMargin = gaugeOptions.threshold.label.margin;\n thresholdLabelFontSize = gaugeOptions.threshold.label.font.size;\n }\n\n var maxRadiusH = (cellWidth / 2) - cellMargin - thresholdWidth - (thresholdLabelMargin * 2) - thresholdLabelFontSize;\n\n var startAngle = gaugeOptions.gauge.startAngle;\n var endAngle = gaugeOptions.gauge.endAngle;\n var dAngle = (endAngle - startAngle) / 100;\n var heightRatioV = -1;\n for (var a = startAngle; a < endAngle; a += dAngle) {\n heightRatioV = Math.max(heightRatioV, Math.sin(toRad(a)));\n }\n heightRatioV = Math.max(heightRatioV, Math.sin(toRad(endAngle)));\n var outerRadiusV = (cellHeight - (cellMargin * 2) - (labelMargin * 2) - labelFontSize) / (1 + heightRatioV);\n if (outerRadiusV * heightRatioV < valueMargin + (valueFontSize / 2)) {\n outerRadiusV = cellHeight - (cellMargin * 2) - (labelMargin * 2) - labelFontSize - valueMargin - (valueFontSize / 2);\n }\n var maxRadiusV = outerRadiusV - (thresholdLabelMargin * 2) - thresholdLabelFontSize - thresholdWidth;\n\n var radius = Math.min(maxRadiusH, maxRadiusV);\n\n\n var width = gaugeOptions.gauge.width;\n if (width >= radius) {\n width = Math.max(3, radius / 3);\n }\n\n\n var outerRadius = (thresholdLabelMargin * 2) + thresholdLabelFontSize + thresholdWidth + radius;\n var gaugeOuterHeight = Math.max(outerRadius * (1 + heightRatioV), outerRadius + valueMargin + (valueFontSize / 2));\n\n return {\n canvasWidth: canvasWidth,\n canvasHeight: canvasHeight,\n margin: margin,\n hMargin: hMargin,\n vMargin: vMargin,\n columns: columns,\n rows: rows,\n cellWidth: cellWidth,\n cellHeight: cellHeight,\n cellMargin: cellMargin,\n labelMargin: labelMargin,\n labelFontSize: labelFontSize,\n valueMargin: valueMargin,\n valueFontSize: valueFontSize,\n width: width,\n radius: radius,\n thresholdWidth: thresholdWidth,\n thresholdLabelMargin: thresholdLabelMargin,\n thresholdLabelFontSize: thresholdLabelFontSize,\n gaugeOuterHeight: gaugeOuterHeight\n };\n }\n\n /**\n * calculate the values which are set as 'auto'\n *\n * @method calculateAutoValues\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Number} cellWidth the width of cell\n */\n function calculateAutoValues(gaugeOptionsi, cellWidth) {\n\n if (gaugeOptionsi.gauge.width === \"auto\") {\n gaugeOptionsi.gauge.width = Math.max(5, cellWidth / 8);\n }\n if (gaugeOptionsi.label.margin === \"auto\") {\n gaugeOptionsi.label.margin = Math.max(1, cellWidth / 20);\n }\n if (gaugeOptionsi.label.font.size === \"auto\") {\n gaugeOptionsi.label.font.size = Math.max(5, cellWidth / 8);\n }\n if (gaugeOptionsi.value.margin === \"auto\") {\n gaugeOptionsi.value.margin = Math.max(1, cellWidth / 30);\n }\n if (gaugeOptionsi.value.font.size === \"auto\") {\n gaugeOptionsi.value.font.size = Math.max(5, cellWidth / 9);\n }\n if (gaugeOptionsi.threshold.width === \"auto\") {\n gaugeOptionsi.threshold.width = Math.max(3, cellWidth / 100);\n }\n if (gaugeOptionsi.threshold.label.margin === \"auto\") {\n gaugeOptionsi.threshold.label.margin = Math.max(3, cellWidth / 40);\n }\n if (gaugeOptionsi.threshold.label.font.size === \"auto\") {\n gaugeOptionsi.threshold.label.font.size = Math.max(5, cellWidth / 15);\n }\n\n }\n Gauge.prototype.calculateAutoValues = calculateAutoValues;\n\n /**\n * calculate the layout of the cell inside\n *\n * @method calculateCellLayout\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Number} cellWidth the width of cell\n * @param {Number} i the index of the series\n * @return the calculated cell layout properties\n */\n Gauge.prototype.calculateCellLayout = function(gaugeOptionsi, layout, i) {\n\n // calculate top, left and center\n var c = col(layout.columns, i);\n var r = row(layout.columns, i);\n var x = layout.margin + (layout.cellWidth + layout.hMargin) * c;\n var y = layout.margin + (layout.cellHeight + layout.vMargin) * r;\n var cx = x + (layout.cellWidth / 2);\n var cy = y + layout.cellMargin + (layout.labelMargin * 2) + layout.labelFontSize + layout.thresholdWidth\n + layout.thresholdLabelFontSize + (layout.thresholdLabelMargin * 2) + layout.radius;\n var blank = layout.cellHeight - (layout.cellMargin * 2) - (layout.labelMargin * 2) - layout.labelFontSize - layout.gaugeOuterHeight;\n var offsetY = 0;\n if (gaugeOptionsi.cell.vAlign === \"middle\") {\n offsetY = (blank / 2);\n } else if (gaugeOptionsi.cell.vAlign === \"bottom\") {\n offsetY = blank;\n }\n cy += offsetY;\n\n return {\n col: c,\n row: r,\n x: x,\n y: y,\n offsetY: offsetY,\n cellWidth: layout.cellWidth,\n cellHeight: layout.cellHeight,\n cellMargin: layout.cellMargin,\n cx: cx,\n cy: cy\n }\n }\n\n /**\n * draw the background of chart\n *\n * @method drawBackground\n * @param {Object} layout the layout properties\n */\n Gauge.prototype.drawBackground = function(layout) {\n\n if (!gaugeOptions.frame.show) {\n return;\n }\n context.save();\n context.strokeStyle = options.grid.borderColor;\n context.lineWidth = options.grid.borderWidth;\n context.strokeRect(0, 0, layout.canvasWidth, layout.canvasHeight);\n if (options.grid.backgroundColor) {\n context.fillStyle = options.grid.backgroundColor;\n context.fillRect(0, 0, layout.canvasWidth, layout.canvasHeight);\n }\n context.restore();\n }\n\n /**\n * draw the background of cell\n *\n * @method drawCellBackground\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} cellLayout the cell layout properties\n */\n Gauge.prototype.drawCellBackground = function(gaugeOptionsi, cellLayout) {\n\n context.save();\n if (gaugeOptionsi.cell.border && gaugeOptionsi.cell.border.show && gaugeOptionsi.cell.border.color && gaugeOptionsi.cell.border.width) {\n context.strokeStyle = gaugeOptionsi.cell.border.color;\n context.lineWidth = gaugeOptionsi.cell.border.width;\n context.strokeRect(cellLayout.x, cellLayout.y, cellLayout.cellWidth, cellLayout.cellHeight);\n }\n if (gaugeOptionsi.cell.background && gaugeOptionsi.cell.background.color) {\n context.fillStyle = gaugeOptionsi.cell.background.color;\n context.fillRect(cellLayout.x, cellLayout.y, cellLayout.cellWidth, cellLayout.cellHeight);\n }\n context.restore();\n }\n\n /**\n * draw the gauge\n *\n * @method drawGauge\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Object} cellLayout the cell layout properties\n * @param {String} label the label of data\n * @param {Number} data the value of the gauge\n */\n Gauge.prototype.drawGauge = function(gaugeOptionsi, layout, cellLayout, label, data) {\n\n var blur = gaugeOptionsi.gauge.shadow.show ? gaugeOptionsi.gauge.shadow.blur : 0;\n var color = getColor(gaugeOptionsi, data);\n var angles = calculateAnglesForGauge(gaugeOptionsi, layout, data);\n\n // draw gauge frame\n drawArcWithShadow(\n cellLayout.cx, // center x\n cellLayout.cy, // center y\n layout.radius,\n layout.width,\n toRad(gaugeOptionsi.gauge.startAngle),\n toRad(gaugeOptionsi.gauge.endAngle),\n gaugeOptionsi.gauge.border.color, // line color\n gaugeOptionsi.gauge.border.width, // line width\n gaugeOptionsi.gauge.background.color, // fill color\n blur);\n\n // draw gauge\n drawArcWithShadow(\n cellLayout.cx, // center x\n cellLayout.cy, // center y\n layout.radius - 1,\n layout.width - 2,\n toRad(angles.a1),\n toRad(angles.a2),\n color,\n 1, // line width\n color, // fill color\n blur);\n \n if(gaugeOptionsi.gauge.neutralValue != null) {\n drawZeroMarker(gaugeOptionsi, layout, cellLayout, color);\n }\n }\n\n /**\n * Calcualte the angles for the gauge, depending on if there are\n * negative numbers or not.\n * \n * @method calculateAnglesForGauge\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Number} data the value of the gauge\n * @returns {Object}\n */\n function calculateAnglesForGauge(gaugeOptionsi, layout, data) {\n let angles = {};\n var neutral = gaugeOptionsi.gauge.neutralValue;\n\n if (neutral != null) {\n if (data < neutral) {\n angles.a1 = calculateAngle(gaugeOptionsi, layout, data);\n angles.a2 = calculateAngle(gaugeOptionsi, layout, neutral);\n } else {\n angles.a1 = calculateAngle(gaugeOptionsi, layout, neutral);\n angles.a2 = calculateAngle(gaugeOptionsi, layout, data);\n }\n } else {\n angles.a1 = gaugeOptionsi.gauge.startAngle;\n angles.a2 = calculateAngle(gaugeOptionsi, layout, data);\n }\n \n return angles;\n }\n\n /**\n * Draw zero marker for Gauge with negative values\n * \n * @method drawZeroMarker\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Object} cellLayout the cell layout properties\n * @param {String} color line color\n */\n function drawZeroMarker(gaugeOptionsi, layout, cellLayout, color) {\n var diff = (gaugeOptionsi.gauge.max - gaugeOptionsi.gauge.min) / 600;\n\n drawArc(context,\n cellLayout.cx,\n cellLayout.cy,\n layout.radius - 2,\n layout.width - 4,\n toRad(calculateAngle(gaugeOptionsi, layout, gaugeOptionsi.gauge.neutralValue-diff)),\n toRad(calculateAngle(gaugeOptionsi, layout, gaugeOptionsi.gauge.neutralValue+diff)),\n color,\n 2,\n gaugeOptionsi.gauge.background.color);\n }\n\n /**\n * decide the color of the data from the threshold options\n *\n * @method getColor\n * @private\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Number} data the value of the gauge\n */\n function getColor(gaugeOptionsi, data) {\n var color;\n for (var i = 0; i < gaugeOptionsi.threshold.values.length; i++) {\n var threshold = gaugeOptionsi.threshold.values[i];\n color = threshold.color;\n if (data < threshold.value) {\n break;\n }\n }\n return color;\n }\n\n /**\n * calculate the angle of the data\n *\n * @method calculateAngle\n * @private\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Number} data the value of the gauge\n */\n function calculateAngle(gaugeOptionsi, layout, data) {\n var a =\n gaugeOptionsi.gauge.startAngle\n + (gaugeOptionsi.gauge.endAngle - gaugeOptionsi.gauge.startAngle)\n * ((data - gaugeOptionsi.gauge.min) / (gaugeOptionsi.gauge.max - gaugeOptionsi.gauge.min));\n\n if (a < gaugeOptionsi.gauge.startAngle) {\n a = gaugeOptionsi.gauge.startAngle;\n } else if (a > gaugeOptionsi.gauge.endAngle) {\n a = gaugeOptionsi.gauge.endAngle;\n }\n return a;\n }\n\n /**\n * draw the arc of the threshold\n *\n * @method drawThreshold\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Object} cellLayout the cell layout properties\n */\n Gauge.prototype.drawThreshold = function(gaugeOptionsi, layout, cellLayout) {\n\n var a1 = gaugeOptionsi.gauge.startAngle;\n for (var i = 0; i < gaugeOptionsi.threshold.values.length; i++) {\n var threshold = gaugeOptionsi.threshold.values[i];\n c1 = threshold.color;\n a2 = calculateAngle(gaugeOptionsi, layout, threshold.value);\n drawArc(\n context,\n cellLayout.cx, // center x\n cellLayout.cy, // center y\n layout.radius + layout.thresholdWidth,\n layout.thresholdWidth - 2,\n toRad(a1),\n toRad(a2),\n c1, // line color\n 1, // line width\n c1); // fill color\n a1 = a2;\n }\n }\n\n /**\n * draw an arc with a shadow\n *\n * @method drawArcWithShadow\n * @private\n * @param {Number} cx the x position of the center\n * @param {Number} cy the y position of the center\n * @param {Number} r the radius of an arc\n * @param {Number} w the width of an arc\n * @param {Number} rd1 the start angle of an arc in radians\n * @param {Number} rd2 the end angle of an arc in radians\n * @param {String} lc the color of a line\n * @param {Number} lw the widht of a line\n * @param {String} fc the fill color of an arc\n * @param {Number} blur the shdow blur\n */\n function drawArcWithShadow(cx, cy, r, w, rd1, rd2, lc, lw, fc, blur) {\n if (rd1 === rd2) {\n return;\n }\n context.save();\n\n drawArc(context, cx, cy, r, w, rd1, rd2, lc, lw, fc);\n\n if (blur) {\n drawArc(context, cx, cy, r, w, rd1, rd2);\n context.clip();\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n context.shadowBlur = 10;\n context.shadowColor = \"gray\";\n drawArc(context, cx, cy, r + 1, w + 2, rd1, rd2, lc, 1);\n }\n context.restore();\n }\n\n /**\n * draw the label of the gauge\n *\n * @method drawLable\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Object} cellLayout the cell layout properties\n * @param {Number} i the index of the series\n * @param {Object} item the item of the series\n */\n Gauge.prototype.drawLable = function(gaugeOptionsi, layout, cellLayout, i, item) {\n\n drawText(\n cellLayout.cx,\n cellLayout.y + cellLayout.cellMargin + layout.labelMargin + cellLayout.offsetY,\n \"flotGaugeLabel\" + i,\n gaugeOptionsi.label.formatter ? gaugeOptionsi.label.formatter(item.label, item.data[0][1]) : text,\n gaugeOptionsi.label);\n }\n\n /**\n * draw the value of the gauge\n *\n * @method drawValue\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Object} cellLayout the cell layout properties\n * @param {Number} i the index of the series\n * @param {Object} item the item of the series\n */\n Gauge.prototype.drawValue = function(gaugeOptionsi, layout, cellLayout, i, item) {\n\n drawText(\n cellLayout.cx,\n cellLayout.cy - (gaugeOptionsi.value.font.size / 2),\n \"flotGaugeValue\" + i,\n gaugeOptionsi.value.formatter ? gaugeOptionsi.value.formatter(item.label, item.data[0][1]) : text,\n gaugeOptionsi.value);\n }\n\n /**\n * draw the values of the threshold\n *\n * @method drawThresholdValues\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Object} cellLayout the cell layout properties\n * @param {Number} i the index of the series\n */\n Gauge.prototype.drawThresholdValues = function(gaugeOptionsi, layout, cellLayout, i) {\n\n // min, max\n drawThresholdValue(gaugeOptionsi, layout, cellLayout, \"Min\" + i, gaugeOptionsi.gauge.min, gaugeOptionsi.gauge.startAngle);\n drawThresholdValue(gaugeOptionsi, layout, cellLayout, \"Max\" + i, gaugeOptionsi.gauge.max, gaugeOptionsi.gauge.endAngle);\n // threshold values\n for (var j = 0; j < gaugeOptionsi.threshold.values.length; j++) {\n var threshold = gaugeOptionsi.threshold.values[j];\n if (threshold.value > gaugeOptionsi.gauge.min && threshold.value < gaugeOptionsi.gauge.max) {\n var a = calculateAngle(gaugeOptionsi, layout, threshold.value);\n drawThresholdValue(gaugeOptionsi, layout, cellLayout, i + \"_\" + j, threshold.value, a);\n }\n }\n \n var neutral = gaugeOptionsi.gauge.neutralValue;\n if (neutral != null && \n neutral>gaugeOptionsi.gauge.min && \n neutral<gaugeOptionsi.gauge.max) {\n drawThresholdValue(gaugeOptionsi, layout, cellLayout, \"Neutral\" + i, neutral, calculateAngle(gaugeOptionsi, layout, neutral));\n }\n }\n\n /**\n * draw the value of the threshold\n *\n * @method drawThresholdValue\n * @param {Object} gaugeOptionsi the options of the gauge\n * @param {Object} layout the layout properties\n * @param {Object} cellLayout the cell layout properties\n * @param {Number} i the index of the series\n * @param {Number} value the value of the threshold\n * @param {Number} a the angle of the value drawn\n */\n function drawThresholdValue(gaugeOptionsi, layout, cellLayout, i, value, a) {\n drawText(\n cellLayout.cx\n + ((layout.thresholdLabelMargin + (layout.thresholdLabelFontSize / 2) + layout.radius)\n * Math.cos(toRad(a))),\n cellLayout.cy\n + ((layout.thresholdLabelMargin + (layout.thresholdLabelFontSize / 2) + layout.radius)\n * Math.sin(toRad(a))),\n \"flotGaugeThresholdValue\" + i,\n gaugeOptionsi.threshold.label.formatter ? gaugeOptionsi.threshold.label.formatter(value) : value,\n gaugeOptionsi.threshold.label,\n a);\n }\n\n /**\n * draw a text\n *\n * the textOptions is assumed as follows:\n *\n * textOptions: {\n * background: {\n * color: null,\n * opacity: 0\n * },\n * font: {\n * size: \"auto\"\n * family: \"\\\"MS ゴシック\\\",sans-serif\"\n * },\n * color: null\n * }\n *\n * @method drawText\n * @private\n * @param {Number} x the x position of the text drawn (left top)\n * @param {Number} y the y position of the text drawn (left top)\n * @param {String} id the id of the dom element\n * @param {String} text the text drawn\n * @param {Object} textOptions the option of the text\n * @param {Number} [a] the angle of the value drawn\n */\n function drawText(x, y, id, text, textOptions, a) {\n var span = $(placeholder).find(\"#\" + id);\n var exists = span.length;\n if (!exists) {\n span = $(\"<span></span>\")\n span.attr(\"id\", id);\n span.attr(\"class\", \"flot-temp-elem\");\n placeholder.append(span);\n }\n\n span.css(\"position\", \"absolute\");\n span.css(\"top\", y + \"px\");\n span.css(\"white-space\", \"nowrap\");\n\n if (textOptions.font.size) {\n span.css(\"font-size\", textOptions.font.size + \"px\");\n }\n if (textOptions.font.family) {\n span.css(\"font-family\", textOptions.font.family);\n }\n if (textOptions.color) {\n span.css(\"color\", textOptions.color);\n }\n if (textOptions.background.color) {\n span.css(\"background-color\", textOptions.background.color);\n }\n if (textOptions.background.opacity) {\n span.css(\"opacity\", textOptions.background.opacity);\n }\n span.text(text);\n // after append, readjust the left position\n span.css(\"left\", x + \"px\"); // for redraw, resetting the left position is needed here\n span.css(\"left\", (parseInt(span.css(\"left\")) - (span.width()/ 2)) + \"px\");\n\n // at last, set angle\n if (!exists && a) {\n span.css(\"top\", (parseInt(span.css(\"top\")) - (span.height()/ 2)) + \"px\");\n span.css(\"transform\", \"rotate(\" + ((180 * a) + 90) + \"deg)\"); // not supported for ie8\n }\n }\n\n return Gauge;\n })();\n /**\n * get a instance of Logger\n *\n * @method getLogger\n * @for flot.gauge\n * @private\n * @param {Object} debugOptions the options of debug\n */\n function getLogger(debugOptions) {\n return typeof Logger !== \"undefined\" ? new Logger(debugOptions) : null;\n }\n\n /**\n * calculate the index of columns for the specified data\n *\n * @method col\n * @for flot.gauge\n * @param {Number} columns the number of columns\n * @param {Number} i the index of the series\n * @return the index of columns\n */\n function col(columns, i) {\n return i % columns;\n }\n\n /**\n * calculate the index of rows for the specified data\n *\n * @method row\n * @for flot.gauge\n * @param {Number} columns the number of rows\n * @param {Number} i the index of the series\n * @return the index of rows\n */\n function row(columns, i) {\n return Math.floor(i / columns);\n }\n\n /**\n * calculate the angle in radians\n *\n * internally, use a number without PI (0 - 2).\n * so, in this function, multiply PI\n *\n * @method toRad\n * @for flot.gauge\n * @param {Number} a the number of angle without PI\n * @return the angle in radians\n */\n function toRad(a) {\n return a * Math.PI;\n }\n\n /**\n * draw an arc\n *\n * @method drawArc\n * @for flot.gauge\n * @param {Object} context the context of canvas\n * @param {Number} cx the x position of the center\n * @param {Number} cy the y position of the center\n * @param {Number} r the radius of an arc\n * @param {Number} w the width of an arc\n * @param {Number} rd1 the start angle of an arc in radians\n * @param {Number} rd2 the end angle of an arc in radians\n * @param {String} lc the color of a line\n * @param {Number} lw the widht of a line\n * @param {String} fc the fill color of an arc\n */\n function drawArc(context, cx, cy, r, w, rd1, rd2, lc, lw, fc) {\n if (rd1 === rd2) {\n return;\n }\n var counterClockwise = false;\n context.save();\n context.beginPath();\n context.arc(cx, cy, r, rd1, rd2, counterClockwise);\n context.lineTo(cx + (r - w) * Math.cos(rd2),\n cy + (r - w) * Math.sin(rd2));\n context.arc(cx, cy, r - w, rd2, rd1, !counterClockwise);\n context.closePath();\n if (lw) {\n context.lineWidth = lw;\n }\n if (lc) {\n context.strokeStyle = lc;\n context.stroke();\n }\n if (fc) {\n context.fillStyle = fc;\n context.fill();\n }\n context.restore();\n }\n\n /**\n * initialize plugin\n *\n * @method init\n * @for flot.gauge\n * @private\n * @param {Object} plot a instance of plot\n */\n function init (plot) {\n // add processOptions hook\n plot.hooks.processOptions.push(function(plot, options) {\n var logger = getLogger(options.series.gauges.debug);\n\n\n\n\n // turn 'grid' and 'legend' off\n if (options.series.gauges.show) {\n options.grid.show = false;\n options.legend.show = false;\n }\n\n // sort threshold\n var thresholds = options.series.gauges.threshold.values;\n\n thresholds.sort(function(a, b) {\n if (a.value < b.value) {\n return -1;\n } else if (a.value > b.value) {\n return 1;\n } else {\n return 0;\n }\n });\n\n\n\n });\n\n // add draw hook\n plot.hooks.draw.push(function(plot, context) {\n var options = plot.getOptions();\n var gaugeOptions = options.series.gauges;\n\n var logger = getLogger(gaugeOptions.debug);\n\n\n if (!gaugeOptions.show) {\n return;\n }\n\n var series = plot.getData();\n\n if (!series || !series.length) {\n return; // if no series were passed\n }\n\n var gauge = new Gauge(plot, context);\n\n // calculate layout\n var layout = gauge.calculateLayout();\n\n // debug layout\n if (gaugeOptions.debug.layout) {\n\n }\n\n // draw background\n gauge.drawBackground(layout)\n\n // draw cells (label, gauge, value, threshold)\n for (var i = 0; i < series.length; i++) {\n var item = series[i];\n\n var gaugeOptionsi = $.extend({}, gaugeOptions, item.gauges);\n if (item.gauges) {\n // re-calculate 'auto' values\n gauge.calculateAutoValues(gaugeOptionsi, layout.cellWidth);\n }\n\n // calculate cell layout\n var cellLayout = gauge.calculateCellLayout(gaugeOptionsi, layout, i);\n\n // draw cell background\n gauge.drawCellBackground(gaugeOptionsi, cellLayout)\n // debug layout\n if (gaugeOptionsi.debug.layout) {\n\n }\n // draw label\n if (gaugeOptionsi.label.show) {\n gauge.drawLable(gaugeOptionsi, layout, cellLayout, i, item);\n }\n // draw gauge\n gauge.drawGauge(gaugeOptionsi, layout, cellLayout, item.label, item.data[0][1]);\n // draw threshold\n if (gaugeOptionsi.threshold.show) {\n gauge.drawThreshold(gaugeOptionsi, layout, cellLayout);\n }\n if (gaugeOptionsi.threshold.label.show) {\n gauge.drawThresholdValues(gaugeOptionsi, layout, cellLayout, i)\n }\n // draw value\n if (gaugeOptionsi.value.show) {\n gauge.drawValue(gaugeOptionsi, layout, cellLayout, i, item);\n }\n }\n });\n }\n\n /**\n * [defaults description]\n *\n * @property defaults\n * @type {Object}\n */\n var defaults = {\n series: {\n gauges: {\n debug: {\n log: false,\n layout: false,\n alert: false\n },\n show: false,\n layout: {\n margin: 5,\n columns: 3,\n hMargin: 5,\n vMargin: 5,\n square: false\n },\n frame: {\n show: true\n },\n cell: {\n background: {\n color: null\n },\n border: {\n show: true,\n color: \"black\",\n width: 1\n },\n margin: 5,\n vAlign: \"middle\" // 'top' or 'middle' or 'bottom'\n },\n gauge: {\n width: \"auto\", // a specified number, or 'auto'\n startAngle: 0.9, // 0 - 2 factor of the radians\n endAngle: 2.1, // 0 - 2 factor of the radians\n min: 0,\n max: 100,\n background: {\n color: \"white\"\n },\n border: {\n color: \"lightgray\",\n width: 2\n },\n shadow: {\n show: true,\n blur: 5\n }\n },\n label: {\n show: true,\n margin: \"auto\", // a specified number, or 'auto'\n background: {\n color: null,\n opacity: 0\n },\n font: {\n size: \"auto\", // a specified number, or 'auto'\n family: \"sans-serif\"\n },\n color: null,\n formatter: function(label, value) {\n return label;\n }\n },\n value: {\n show: true,\n margin: \"auto\", // a specified number, or 'auto'\n background: {\n color: null,\n opacity: 0\n },\n font: {\n size: \"auto\", // a specified number, or 'auto'\n family: \"sans-serif\"\n },\n color: null,\n formatter: function(label, value) {\n return parseInt(value);\n }\n },\n threshold: {\n show: true,\n width: \"auto\", // a specified number, or 'auto'\n label: {\n show: true,\n margin: \"auto\", // a specified number, or 'auto'\n background: {\n color: null,\n opacity: 0\n },\n font: {\n size: \"auto\", // a specified number, or 'auto'\n family: \",sans-serif\"\n },\n color: null,\n formatter: function(value) {\n return value;\n }\n },\n values: [\n\n ]\n }\n }\n }\n };\n\n // register the gauge plugin\n $.plot.plugins.push({\n init: init,\n options: defaults,\n name: \"gauge\",\n version: \"1.1.0\"\n });\n\n})(jQuery);\n\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { getAPIBaseURL } from '../../../../utils/utils';\nimport { createBaseQuery } from '../../createBaseQuery';\n\nexport const API_GROUP = 'folder.grafana.app' as const;\nexport const API_VERSION = 'v1beta1' as const;\nexport const BASE_URL = getAPIBaseURL(API_GROUP, API_VERSION);\n\nexport const api = createApi({\n reducerPath: 'folderAPIv1beta1',\n baseQuery: createBaseQuery({\n baseURL: BASE_URL,\n }),\n endpoints: () => ({}),\n});\n","import { api } from './baseAPI';\nexport const addTagTypes = ['API Discovery', 'Folder'] as const;\nconst injectedRtkApi = api\n .enhanceEndpoints({\n addTagTypes,\n })\n .injectEndpoints({\n endpoints: (build) => ({\n getApiResources: build.query<GetApiResourcesApiResponse, GetApiResourcesApiArg>({\n query: () => ({ url: `/apis/folder.grafana.app/v1beta1/` }),\n providesTags: ['API Discovery'],\n }),\n listFolder: build.query<ListFolderApiResponse, ListFolderApiArg>({\n query: (queryArg) => ({\n url: `/folders`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['Folder'],\n }),\n createFolder: build.mutation<CreateFolderApiResponse, CreateFolderApiArg>({\n query: (queryArg) => ({\n url: `/folders`,\n method: 'POST',\n body: queryArg.folder,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Folder'],\n }),\n deletecollectionFolder: build.mutation<DeletecollectionFolderApiResponse, DeletecollectionFolderApiArg>({\n query: (queryArg) => ({\n url: `/folders`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n continue: queryArg['continue'],\n dryRun: queryArg.dryRun,\n fieldSelector: queryArg.fieldSelector,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n },\n }),\n invalidatesTags: ['Folder'],\n }),\n getFolder: build.query<GetFolderApiResponse, GetFolderApiArg>({\n query: (queryArg) => ({\n url: `/folders/${queryArg.name}`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['Folder'],\n }),\n replaceFolder: build.mutation<ReplaceFolderApiResponse, ReplaceFolderApiArg>({\n query: (queryArg) => ({\n url: `/folders/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.folder,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Folder'],\n }),\n deleteFolder: build.mutation<DeleteFolderApiResponse, DeleteFolderApiArg>({\n query: (queryArg) => ({\n url: `/folders/${queryArg.name}`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n },\n }),\n invalidatesTags: ['Folder'],\n }),\n updateFolder: build.mutation<UpdateFolderApiResponse, UpdateFolderApiArg>({\n query: (queryArg) => ({\n url: `/folders/${queryArg.name}`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['Folder'],\n }),\n getFolderAccess: build.query<GetFolderAccessApiResponse, GetFolderAccessApiArg>({\n query: (queryArg) => ({ url: `/folders/${queryArg.name}/access` }),\n providesTags: ['Folder'],\n }),\n getFolderChildren: build.query<GetFolderChildrenApiResponse, GetFolderChildrenApiArg>({\n query: (queryArg) => ({ url: `/folders/${queryArg.name}/children` }),\n providesTags: ['Folder'],\n }),\n getFolderCounts: build.query<GetFolderCountsApiResponse, GetFolderCountsApiArg>({\n query: (queryArg) => ({ url: `/folders/${queryArg.name}/counts` }),\n providesTags: ['Folder'],\n }),\n getFolderParents: build.query<GetFolderParentsApiResponse, GetFolderParentsApiArg>({\n query: (queryArg) => ({ url: `/folders/${queryArg.name}/parents` }),\n providesTags: ['Folder'],\n }),\n }),\n overrideExisting: false,\n });\nexport { injectedRtkApi as generatedAPI };\nexport type GetApiResourcesApiResponse = /** status 200 OK */ ApiResourceList;\nexport type GetApiResourcesApiArg = void;\nexport type ListFolderApiResponse = /** status 200 OK */ FolderList;\nexport type ListFolderApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type CreateFolderApiResponse = /** status 200 OK */\n | Folder\n | /** status 201 Created */ Folder\n | /** status 202 Accepted */ Folder;\nexport type CreateFolderApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n folder: Folder;\n};\nexport type DeletecollectionFolderApiResponse = /** status 200 OK */ Status;\nexport type DeletecollectionFolderApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n};\nexport type GetFolderApiResponse = /** status 200 OK */ Folder;\nexport type GetFolderApiArg = {\n /** name of the Folder */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplaceFolderApiResponse = /** status 200 OK */ Folder | /** status 201 Created */ Folder;\nexport type ReplaceFolderApiArg = {\n /** name of the Folder */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n folder: Folder;\n};\nexport type DeleteFolderApiResponse = /** status 200 OK */ Status | /** status 202 Accepted */ Status;\nexport type DeleteFolderApiArg = {\n /** name of the Folder */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n};\nexport type UpdateFolderApiResponse = /** status 200 OK */ Folder | /** status 201 Created */ Folder;\nexport type UpdateFolderApiArg = {\n /** name of the Folder */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type GetFolderAccessApiResponse = /** status 200 OK */ FolderAccessInfo;\nexport type GetFolderAccessApiArg = {\n /** name of the FolderAccessInfo */\n name: string;\n};\nexport type GetFolderChildrenApiResponse = /** status 200 OK */ FolderList;\nexport type GetFolderChildrenApiArg = {\n /** name of the FolderList */\n name: string;\n};\nexport type GetFolderCountsApiResponse = /** status 200 OK */ DescendantCounts;\nexport type GetFolderCountsApiArg = {\n /** name of the DescendantCounts */\n name: string;\n};\nexport type GetFolderParentsApiResponse = /** status 200 OK */ FolderInfoList;\nexport type GetFolderParentsApiArg = {\n /** name of the FolderInfoList */\n name: string;\n};\nexport type ApiResource = {\n /** categories is a list of the grouped resources this resource belongs to (e.g. 'all') */\n categories?: string[];\n /** group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\". */\n group?: string;\n /** kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') */\n kind: string;\n /** name is the plural name of the resource. */\n name: string;\n /** namespaced indicates if a resource is namespaced or not. */\n namespaced: boolean;\n /** shortNames is a list of suggested short names of the resource. */\n shortNames?: string[];\n /** singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface. */\n singularName: string;\n /** The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates. */\n storageVersionHash?: string;\n /** verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy) */\n verbs: string[];\n /** version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\". */\n version?: string;\n};\nexport type ApiResourceList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** groupVersion is the group and version this APIResourceList is for. */\n groupVersion: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** resources contains the name of the resources and if they are namespaced. */\n resources: ApiResource[];\n};\nexport type Time = string;\nexport type FieldsV1 = object;\nexport type ManagedFieldsEntry = {\n /** APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted. */\n apiVersion?: string;\n /** FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\" */\n fieldsType?: string;\n /** FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type. */\n fieldsV1?: FieldsV1;\n /** Manager is an identifier of the workflow managing these fields. */\n manager?: string;\n /** Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'. */\n operation?: string;\n /** Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource. */\n subresource?: string;\n /** Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over. */\n time?: Time;\n};\nexport type OwnerReference = {\n /** API version of the referent. */\n apiVersion: string;\n /** If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned. */\n blockOwnerDeletion?: boolean;\n /** If true, this reference points to the managing controller. */\n controller?: boolean;\n /** Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n /** Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name: string;\n /** UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid: string;\n};\nexport type ObjectMeta = {\n /** Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations */\n annotations?: {\n [key: string]: string;\n };\n /** CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n \n Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n creationTimestamp?: Time;\n /** Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. */\n deletionGracePeriodSeconds?: number;\n /** DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n \n Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n deletionTimestamp?: Time;\n /** Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list. */\n finalizers?: string[];\n /** GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n \n If this field is specified and the generated name exists, the server will return a 409.\n \n Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency */\n generateName?: string;\n /** A sequence number representing a specific generation of the desired state. Populated by the system. Read-only. */\n generation?: number;\n /** Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels */\n labels?: {\n [key: string]: string;\n };\n /** ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object. */\n managedFields?: ManagedFieldsEntry[];\n /** Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name?: string;\n /** Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n \n Must be a DNS_LABEL. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces */\n namespace?: string;\n /** List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller. */\n ownerReferences?: OwnerReference[];\n /** An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n \n Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n /** UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n \n Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type FolderSpec = {\n description?: string;\n title: string;\n};\nexport type FolderStatus = object;\nexport type Folder = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ObjectMeta;\n /** Spec is the spec of the Folder */\n spec: FolderSpec;\n status: FolderStatus;\n};\nexport type ListMeta = {\n /** continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message. */\n continue?: string;\n /** remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact. */\n remainingItemCount?: number;\n /** String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n};\nexport type FolderList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: Folder[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ListMeta;\n};\nexport type StatusCause = {\n /** The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n \n Examples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\" */\n field?: string;\n /** A human-readable description of the cause of the error. This field may be presented as-is to a reader. */\n message?: string;\n /** A machine-readable description of the cause of the error. If this value is empty there is no information available. */\n reason?: string;\n};\nexport type StatusDetails = {\n /** The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. */\n causes?: StatusCause[];\n /** The group attribute of the resource associated with the status StatusReason. */\n group?: string;\n /** The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). */\n name?: string;\n /** If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action. */\n retryAfterSeconds?: number;\n /** UID of the resource. (when there is a single resource which can be described). More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type Status = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Suggested HTTP return code for this status, 0 if not set. */\n code?: number;\n /** Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. */\n details?: StatusDetails;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** A human-readable description of the status of this operation. */\n message?: string;\n /** Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n metadata?: ListMeta;\n /** A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. */\n reason?: string;\n /** Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status */\n status?: string;\n};\nexport type Patch = object;\nexport type FolderAccessInfo = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n canAdmin: boolean;\n canDelete: boolean;\n canEdit: boolean;\n canSave: boolean;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n};\nexport type ResourceStats = {\n count: number;\n group: string;\n resource: string;\n};\nexport type DescendantCounts = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n counts: ResourceStats[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n};\nexport type FolderInfo = {\n /** The folder description */\n description?: string;\n /** This folder does not resolve */\n detached?: boolean;\n /** Name is the k8s name (eg, the unique identifier) for a folder */\n name: string;\n /** The parent folder UID */\n parent?: string;\n /** Title is the display value */\n title: string;\n};\nexport type FolderInfoList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: FolderInfo[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata?: ListMeta;\n};\nexport const {\n useGetApiResourcesQuery,\n useLazyGetApiResourcesQuery,\n useListFolderQuery,\n useLazyListFolderQuery,\n useCreateFolderMutation,\n useDeletecollectionFolderMutation,\n useGetFolderQuery,\n useLazyGetFolderQuery,\n useReplaceFolderMutation,\n useDeleteFolderMutation,\n useUpdateFolderMutation,\n useGetFolderAccessQuery,\n useLazyGetFolderAccessQuery,\n useGetFolderChildrenQuery,\n useLazyGetFolderChildrenQuery,\n useGetFolderCountsQuery,\n useLazyGetFolderCountsQuery,\n useGetFolderParentsQuery,\n useLazyGetFolderParentsQuery,\n} = injectedRtkApi;\n","export { BASE_URL, API_GROUP, API_VERSION } from './baseAPI';\nimport { generatedAPI as rawAPI } from './endpoints.gen';\n\nexport * from './endpoints.gen';\nexport const generatedAPI = rawAPI.enhanceEndpoints({});\n","import { debounce } from 'lodash';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\n\nimport { Field, Input } from '@grafana/ui';\n\ninterface Props {\n id?: string;\n value?: number;\n placeholder?: string;\n autoFocus?: boolean;\n onChange: (number?: number) => void;\n min?: number;\n max?: number;\n step?: number;\n width?: number;\n fieldDisabled?: boolean;\n suffix?: React.ReactNode;\n}\n\ninterface State {\n text: string;\n inputCorrected: boolean;\n}\n\n/**\n * This is an Input field that will call `onChange` for blur and enter\n *\n * @internal this is not exported to the `@grafana/ui` library, it is used\n * by options editor (number and slider), and direclty with in grafana core\n */\n\nexport class NumberInput extends PureComponent<Props, State> {\n state: State = { text: '', inputCorrected: false };\n inputRef = React.createRef<HTMLInputElement>();\n\n componentDidMount() {\n this.setState({\n text: isNaN(this.props.value!) ? '' : `${this.props.value}`,\n });\n }\n\n componentDidUpdate(oldProps: Props) {\n if (this.props.value !== oldProps.value) {\n const text = isNaN(this.props.value!) ? '' : `${this.props.value}`;\n if (text !== this.state.text) {\n this.setState({ text });\n }\n }\n }\n\n updateValue = () => {\n const txt = this.inputRef.current?.value;\n let corrected = false;\n let newValue = '';\n const min = this.props.min;\n const max = this.props.max;\n let currentValue = txt !== '' ? Number(txt) : undefined;\n\n if (currentValue && !Number.isNaN(currentValue)) {\n if (min != null && currentValue < min) {\n newValue = min.toString();\n corrected = true;\n } else if (max != null && currentValue > max) {\n newValue = max.toString();\n corrected = true;\n } else {\n newValue = txt ?? '';\n }\n\n this.setState({\n text: newValue,\n inputCorrected: corrected,\n });\n }\n\n if (corrected) {\n this.updateValueDebounced();\n }\n\n if (!Number.isNaN(currentValue) && currentValue !== this.props.value) {\n this.props.onChange(currentValue);\n }\n };\n\n updateValueDebounced = debounce(this.updateValue, 500); // 1/2 second delay\n\n onChange = (e: React.FocusEvent<HTMLInputElement>) => {\n this.setState({\n text: e.currentTarget.value,\n });\n this.updateValueDebounced();\n };\n\n onKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n this.updateValue();\n }\n };\n\n renderInput() {\n return (\n <Input\n type=\"number\"\n id={this.props.id}\n ref={this.inputRef}\n min={this.props.min}\n max={this.props.max}\n step={this.props.step}\n autoFocus={this.props.autoFocus}\n value={this.state.text}\n onChange={this.onChange}\n onBlur={this.updateValue}\n onKeyPress={this.onKeyPress}\n placeholder={this.props.placeholder}\n disabled={this.props.fieldDisabled}\n width={this.props.width}\n suffix={this.props.suffix}\n />\n );\n }\n\n render() {\n const { inputCorrected } = this.state;\n if (inputCorrected) {\n let range = '';\n let { min, max } = this.props;\n if (max == null) {\n if (min != null) {\n range = `< ${min}`;\n }\n } else if (min != null) {\n range = `${min} < > ${max}`;\n } else {\n range = `> ${max}`;\n }\n return (\n <Field\n invalid={inputCorrected}\n error={`Out of range ${range}`}\n validationMessageHorizontalOverflow={true}\n style={{ direction: 'rtl' }}\n >\n {this.renderInput()}\n </Field>\n );\n }\n\n return this.renderInput();\n }\n}\n","import { DataFrame } from '@grafana/data';\nimport { ResourceDimensionConfig, ResourceDimensionMode } from '@grafana/schema';\n\nimport { DimensionSupplier } from './types';\nimport { findField, getLastNotNullFieldValue } from './utils';\n\n//---------------------------------------------------------\n// Resource dimension\n//---------------------------------------------------------\nexport function getPublicOrAbsoluteUrl(path: unknown): string {\n if (!path || typeof path !== 'string') {\n return '';\n }\n\n // NOTE: The value of `path` could be either an URL string or a relative\n // path to a Grafana CDN asset served from the CDN.\n const isUrl = path.indexOf(':/') > 0;\n\n return isUrl ? path : `${window.__grafana_public_path__}build/${path}`;\n}\n\nexport function getResourceDimension(\n frame: DataFrame | undefined,\n config: ResourceDimensionConfig\n): DimensionSupplier<string> {\n const mode = config.mode ?? ResourceDimensionMode.Fixed;\n if (mode === ResourceDimensionMode.Fixed) {\n const v = getPublicOrAbsoluteUrl(config.fixed);\n return {\n isAssumed: !Boolean(v),\n fixed: v,\n value: () => v,\n get: (i) => v,\n };\n }\n\n const field = findField(frame, config.field);\n if (!field) {\n const v = '';\n return {\n isAssumed: true,\n fixed: v,\n value: () => v,\n get: (i) => v,\n };\n }\n\n if (mode === ResourceDimensionMode.Mapping) {\n const mapper = (v: string) => getPublicOrAbsoluteUrl(`${v}`);\n return {\n field,\n get: (i) => mapper(field.values[i]),\n value: () => mapper(getLastNotNullFieldValue(field)),\n };\n }\n\n // mode === ResourceDimensionMode.Field case\n const getImageOrIcon = (value: unknown): string => {\n if (typeof value !== 'string') {\n return '';\n }\n\n let url = value;\n if (field && field.display) {\n const displayValue = field.display(value);\n if (displayValue.icon) {\n url = displayValue.icon;\n }\n }\n\n return getPublicOrAbsoluteUrl(url);\n };\n\n return {\n field,\n get: (index: number): string => getImageOrIcon(field.values[index]),\n value: () => getImageOrIcon(getLastNotNullFieldValue(field)),\n };\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nimport { StoreState } from 'app/types/store';\n\nexport type CleanUpAction = (state: StoreState) => void;\n\nexport interface CleanUpPayload {\n cleanupAction: CleanUpAction;\n}\n\nexport const cleanUpAction = createAction<CleanUpPayload>('core/cleanUpState');\n","import { useEffect, useRef } from 'react';\n\nimport { SceneObject } from '@grafana/scenes';\nimport { contextSrv } from 'app/core/core';\n\nimport { DashboardLayoutManager, isDashboardLayoutManager } from '../types/DashboardLayoutManager';\nimport { isLayoutParent } from '../types/LayoutParent';\n\nexport function findParentLayout(sceneObject: SceneObject): DashboardLayoutManager | null {\n let parent = sceneObject.parent;\n\n while (parent) {\n if (isDashboardLayoutManager(parent)) {\n return parent;\n }\n\n parent = parent.parent;\n }\n\n return null;\n}\n\nexport interface EditPaneInputAutoFocusProps {\n autoFocus?: boolean;\n}\n\nexport function useEditPaneInputAutoFocus({ autoFocus }: EditPaneInputAutoFocusProps = {}) {\n const ref = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (ref.current && autoFocus) {\n // Need the setTimeout here for some reason\n setTimeout(() => ref.current?.focus(), 200);\n }\n }, [autoFocus]);\n\n return ref;\n}\n\nexport function generateUniqueTitle(title: string | undefined, existingTitles: Set<string>): string {\n const baseTitle = title ?? '';\n\n if (existingTitles.has(baseTitle)) {\n const titleMatch = baseTitle.match(/^(.*?)(\\d+)$/);\n if (titleMatch) {\n // If title ends with a number, increment it\n const baseTitle = titleMatch[1];\n const currentNumber = parseInt(titleMatch[2], 10);\n let newTitle = `${baseTitle}${currentNumber + 1}`;\n\n // Keep incrementing until we find an unused title\n while (existingTitles.has(newTitle)) {\n const nextNumber = parseInt(newTitle.match(/\\d+$/)![0], 10) + 1;\n newTitle = `${baseTitle}${nextNumber}`;\n }\n return newTitle;\n } else {\n // If title doesn't end with a number, append \"1\"\n let i = 1;\n let newTitle = `${baseTitle} ${i}`;\n while (existingTitles.has(newTitle)) {\n i++;\n newTitle = `${baseTitle} ${i}`;\n }\n return newTitle;\n }\n }\n\n return baseTitle;\n}\n\nexport function ungroupLayout(layout: DashboardLayoutManager, innerLayout: DashboardLayoutManager, skipUndo?: boolean) {\n const layoutParent = layout.parent!;\n if (isLayoutParent(layoutParent)) {\n innerLayout.clearParent();\n layoutParent.switchLayout(innerLayout, skipUndo);\n }\n}\n\nexport function getIsLazy(preload: boolean | undefined): boolean {\n // We don't want to lazy load panels in the case of image renderer\n return !(preload || (contextSrv.user && contextSrv.user.authenticatedBy === 'render'));\n}\n\nexport enum GridLayoutType {\n AutoGridLayout = 'AutoGridLayout',\n GridLayout = 'GridLayout',\n}\n\nexport function mapIdToGridLayoutType(id?: string): GridLayoutType | undefined {\n switch (id) {\n case GridLayoutType.AutoGridLayout:\n return GridLayoutType.AutoGridLayout;\n case GridLayoutType.GridLayout:\n return GridLayoutType.GridLayout;\n default:\n return undefined;\n }\n}\n","import { fuzzySearch } from '@grafana/data';\n\n/**\n * Applies fuzzy search to a list of items using the provided filter function.\n * Uses @grafana/data fuzzySearch implementation with all built-in optimizations.\n */\nexport function fuzzyFilter<TItem>(items: TItem[], filterBy: (item: TItem) => string, searchTerm: string): TItem[] {\n if (!searchTerm.trim()) {\n return items;\n }\n\n const haystack = items.map(filterBy);\n const matchingIndices = fuzzySearch(haystack, searchTerm);\n return matchingIndices.map((idx) => items[idx]);\n}\n\n/**\n * Checks if a search term matches a target string using fuzzy matching.\n * Returns true if there's a match, false otherwise.\n */\nexport function fuzzyMatches(target: string, searchTerm: string): boolean {\n if (!searchTerm.trim()) {\n return true;\n }\n\n const haystack = [target];\n const matchingIndices = fuzzySearch(haystack, searchTerm);\n return matchingIndices.length > 0;\n}\n","import {\n DataSourceInstanceSettings,\n IntervalValues,\n RelativeTimeRange,\n ScopedVars,\n TimeRange,\n getDefaultRelativeTimeRange,\n getNextRefId,\n rangeUtil,\n} from '@grafana/data';\nimport { PromQuery } from '@grafana/prometheus';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport { ExpressionDatasourceRef } from '@grafana/runtime/internal';\nimport { VizPanel, sceneGraph } from '@grafana/scenes';\nimport { DataQuery, DataSourceJsonData, DataSourceRef } from '@grafana/schema';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport {\n getDashboardSceneFor,\n getPanelIdForVizPanel,\n getQueryRunnerFor,\n} from 'app/features/dashboard-scene/utils/utils';\nimport { ExpressionDatasourceUID, ExpressionQuery, ExpressionQueryType } from 'app/features/expressions/types';\nimport { LokiQuery } from 'app/plugins/datasource/loki/types';\nimport { RuleWithLocation } from 'app/types/unified-alerting';\nimport {\n AlertDataQuery,\n AlertQuery,\n Annotations,\n GrafanaNotificationSettings,\n GrafanaRuleDefinition,\n Labels,\n PostableRuleGrafanaRuleDTO,\n RulerAlertingRuleDTO,\n RulerGrafanaRuleDTO,\n RulerRecordingRuleDTO,\n RulerRuleDTO,\n} from 'app/types/unified-alerting-dto';\n\nimport { EvalFunction } from '../../state/alertDef';\nimport { getDefaultFormValues } from '../rule-editor/formDefaults';\nimport { normalizeDefaultAnnotations } from '../rule-editor/formProcessing';\nimport {\n AlertManagerManualRouting,\n ContactPoint,\n KVObject,\n RuleFormType,\n RuleFormValues,\n SimplifiedEditor,\n} from '../types/rule-form';\n\nimport { Annotation } from './constants';\nimport {\n GRAFANA_RULES_SOURCE_NAME,\n getDefaultOrFirstCompatibleDataSource,\n isGrafanaRulesSource,\n isSupportedExternalPrometheusFlavoredRulesSourceType,\n isSupportedExternalRulesSourceType,\n} from './datasource';\nimport { arrayToRecord, recordToArray } from './misc';\nimport { isGrafanaAlertingRuleByType, isGrafanaRecordingRuleByType, rulerRuleType } from './rules';\nimport { parseInterval } from './time';\n\nexport type PromOrLokiQuery = PromQuery | LokiQuery;\n\nexport const MANUAL_ROUTING_KEY = 'grafana.alerting.manualRouting';\nexport const SIMPLIFIED_QUERY_EDITOR_KEY = 'grafana.alerting.simplifiedQueryEditor';\n\nexport function formValuesToRulerRuleDTO(values: RuleFormValues): RulerRuleDTO {\n const { name, expression, forTime, forTimeUnit, keepFiringForTime, keepFiringForTimeUnit, type } = values;\n\n const annotations = arrayToRecord(cleanAnnotations(values.annotations));\n const labels = arrayToRecord(cleanLabels(values.labels));\n\n if (type === RuleFormType.cloudAlerting) {\n let keepFiringFor: string | undefined;\n if (keepFiringForTime && keepFiringForTimeUnit) {\n keepFiringFor = `${keepFiringForTime}${keepFiringForTimeUnit}`;\n }\n\n return {\n alert: name,\n for: `${forTime}${forTimeUnit}`,\n keep_firing_for: keepFiringFor,\n annotations,\n labels,\n expr: expression,\n };\n } else if (type === RuleFormType.cloudRecording) {\n return {\n record: name,\n labels,\n expr: expression,\n };\n }\n throw new Error(`unexpected rule type: ${type}`);\n}\n\nexport function listifyLabelsOrAnnotations(item: Labels | Annotations | undefined, addEmpty: boolean): KVObject[] {\n const list = [...recordToArray(item || {})];\n if (addEmpty) {\n list.push({ key: '', value: '' });\n }\n return list;\n}\n\nexport function getNotificationSettingsForDTO(\n manualRouting: boolean,\n contactPoints?: AlertManagerManualRouting\n): GrafanaNotificationSettings | undefined {\n if (contactPoints?.grafana?.selectedContactPoint && manualRouting) {\n return {\n receiver: contactPoints?.grafana?.selectedContactPoint,\n mute_time_intervals: contactPoints?.grafana?.muteTimeIntervals,\n active_time_intervals: contactPoints?.grafana?.activeTimeIntervals,\n group_by: contactPoints?.grafana?.overrideGrouping ? contactPoints?.grafana?.groupBy : undefined,\n group_wait:\n contactPoints?.grafana?.overrideTimings && contactPoints?.grafana?.groupWaitValue\n ? contactPoints?.grafana?.groupWaitValue\n : undefined,\n group_interval:\n contactPoints?.grafana?.overrideTimings && contactPoints?.grafana?.groupIntervalValue\n ? contactPoints?.grafana?.groupIntervalValue\n : undefined,\n repeat_interval:\n contactPoints?.grafana?.overrideTimings && contactPoints?.grafana?.repeatIntervalValue\n ? contactPoints?.grafana?.repeatIntervalValue\n : undefined,\n };\n }\n return undefined;\n}\n\nfunction getEditorSettingsForDTO(simplifiedEditor: SimplifiedEditor) {\n return {\n simplified_query_and_expressions_section: simplifiedEditor.simplifiedQueryEditor,\n simplified_notifications_section: simplifiedEditor.simplifiedNotificationEditor,\n };\n}\n\nexport function formValuesToRulerGrafanaRuleDTO(values: RuleFormValues): PostableRuleGrafanaRuleDTO {\n const {\n name,\n condition,\n noDataState,\n execErrState,\n evaluateFor,\n keepFiringFor,\n queries,\n isPaused,\n contactPoints,\n manualRouting,\n type,\n metric,\n targetDatasourceUid,\n missingSeriesEvalsToResolve,\n } = values;\n if (!condition) {\n throw new Error('You cannot create an alert rule without specifying the alert condition');\n }\n\n const notificationSettings = getNotificationSettingsForDTO(manualRouting, contactPoints);\n const metadata = values.editorSettings\n ? { editor_settings: getEditorSettingsForDTO(values.editorSettings) }\n : undefined;\n\n const annotations = arrayToRecord(cleanAnnotations(values.annotations));\n const labels = arrayToRecord(cleanLabels(values.labels));\n\n const wantsAlertingRule = isGrafanaAlertingRuleByType(type);\n const wantsRecordingRule = isGrafanaRecordingRuleByType(type!);\n\n if (wantsAlertingRule) {\n return {\n grafana_alert: {\n title: name,\n condition,\n data: queries.map(fixBothInstantAndRangeQuery),\n is_paused: Boolean(isPaused),\n\n // Alerting rule specific\n no_data_state: noDataState,\n exec_err_state: execErrState,\n notification_settings: notificationSettings,\n metadata,\n missing_series_evals_to_resolve: missingSeriesEvalsToResolve\n ? Number(missingSeriesEvalsToResolve)\n : // API uses 0 value to reset, as `missing_series_evals_to_resolve` cannot be 0\n 0,\n },\n annotations,\n labels,\n\n // Alerting rule specific\n for: evaluateFor,\n keep_firing_for: keepFiringFor,\n };\n } else if (wantsRecordingRule) {\n return {\n grafana_alert: {\n title: name,\n condition,\n data: queries.map(fixBothInstantAndRangeQuery),\n is_paused: Boolean(isPaused),\n\n // Recording rule specific\n record: {\n metric: metric ?? name,\n from: condition,\n target_datasource_uid: targetDatasourceUid,\n },\n },\n annotations,\n labels,\n };\n }\n\n throw new Error(`Failed to convert form values to Grafana rule: unknown type ${type}`);\n}\n\nexport const cleanAnnotations = (kvs: KVObject[]) =>\n kvs.map(trimKeyAndValue).filter(({ key, value }: KVObject): Boolean => Boolean(key) && Boolean(value));\n\nexport const cleanLabels = (kvs: KVObject[]) =>\n kvs.map(trimKeyAndValue).filter(({ key }: KVObject): Boolean => Boolean(key));\n\nconst trimKeyAndValue = ({ key, value }: KVObject): KVObject => ({\n key: key.trim(),\n value: value.trim(),\n});\n\nexport function getContactPointsFromDTO(ga: GrafanaRuleDefinition): AlertManagerManualRouting | undefined {\n const contactPoint: ContactPoint | undefined = ga.notification_settings\n ? {\n selectedContactPoint: ga.notification_settings.receiver,\n muteTimeIntervals: ga.notification_settings.mute_time_intervals ?? [],\n activeTimeIntervals: ga.notification_settings.active_time_intervals ?? [],\n overrideGrouping:\n Array.isArray(ga.notification_settings.group_by) && ga.notification_settings.group_by.length > 0,\n overrideTimings: [\n ga.notification_settings.group_wait,\n ga.notification_settings.group_interval,\n ga.notification_settings.repeat_interval,\n ].some(Boolean),\n groupBy: ga.notification_settings.group_by || [],\n groupWaitValue: ga.notification_settings.group_wait || '',\n groupIntervalValue: ga.notification_settings.group_interval || '',\n repeatIntervalValue: ga.notification_settings.repeat_interval || '',\n }\n : undefined;\n const routingSettings: AlertManagerManualRouting | undefined = contactPoint\n ? {\n [GRAFANA_RULES_SOURCE_NAME]: contactPoint,\n }\n : undefined;\n return routingSettings;\n}\n\nfunction getEditorSettingsFromDTO(ga: GrafanaRuleDefinition) {\n // we need to check if the feature toggle is enabled as it might be disabled after the rule was created with the feature enabled\n if (!config.featureToggles.alertingQueryAndExpressionsStepMode) {\n return undefined;\n }\n\n if (ga.metadata?.editor_settings) {\n return {\n simplifiedQueryEditor: ga.metadata.editor_settings.simplified_query_and_expressions_section,\n simplifiedNotificationEditor: ga.metadata.editor_settings.simplified_notifications_section,\n };\n }\n\n return {\n simplifiedQueryEditor: false,\n simplifiedNotificationEditor: Boolean(ga.notification_settings), // in case this rule was created before the new field was added, we'll default to current routing settings\n };\n}\n\nexport function rulerRuleToFormValues(ruleWithLocation: RuleWithLocation): RuleFormValues {\n const { ruleSourceName, namespace, group, rule } = ruleWithLocation;\n const isGrafanaRecordingRule = rulerRuleType.grafana.recordingRule(rule);\n\n const defaultFormValues = getDefaultFormValues(isGrafanaRecordingRule ? RuleFormType.grafanaRecording : undefined);\n if (isGrafanaRulesSource(ruleSourceName)) {\n // GRAFANA-MANAGED RULES\n if (isGrafanaRecordingRule) {\n // grafana recording rule\n const ga = rule.grafana_alert;\n return {\n ...defaultFormValues,\n name: ga.title,\n type: RuleFormType.grafanaRecording,\n group: group.name,\n evaluateEvery: group.interval || defaultFormValues.evaluateEvery,\n queries: ga.data,\n condition: ga.condition,\n annotations: normalizeDefaultAnnotations(listifyLabelsOrAnnotations(rule.annotations, false)),\n labels: listifyLabelsOrAnnotations(rule.labels, true),\n folder: { title: namespace, uid: ga.namespace_uid },\n isPaused: ga.is_paused,\n metric: ga.record?.metric,\n targetDatasourceUid: ga.record?.target_datasource_uid || defaultFormValues.targetDatasourceUid,\n };\n } else if (rulerRuleType.grafana.rule(rule)) {\n // grafana alerting rule\n const ga = rule.grafana_alert;\n const routingSettings: AlertManagerManualRouting | undefined = getContactPointsFromDTO(ga);\n if (ga.no_data_state !== undefined && ga.exec_err_state !== undefined) {\n return {\n ...defaultFormValues,\n name: ga.title,\n type: RuleFormType.grafana,\n group: group.name,\n evaluateEvery: group.interval || defaultFormValues.evaluateEvery,\n evaluateFor: rule.for || '0',\n keepFiringFor: rule.keep_firing_for || '0',\n noDataState: ga.no_data_state,\n execErrState: ga.exec_err_state,\n queries: ga.data,\n condition: ga.condition,\n annotations: normalizeDefaultAnnotations(listifyLabelsOrAnnotations(rule.annotations, false)),\n labels: listifyLabelsOrAnnotations(rule.labels, true),\n folder: { title: namespace, uid: ga.namespace_uid },\n isPaused: ga.is_paused,\n\n contactPoints: routingSettings,\n manualRouting: Boolean(routingSettings),\n\n editorSettings: getEditorSettingsFromDTO(ga),\n\n missingSeriesEvalsToResolve: ga.missing_series_evals_to_resolve,\n };\n } else {\n throw new Error('Unexpected type of rule for grafana rules source');\n }\n } else {\n throw new Error('Unexpected type of rule for grafana rules source');\n }\n } else {\n // DATASOURCE-MANAGED RULES\n if (rulerRuleType.dataSource.alertingRule(rule)) {\n const datasourceUid = getDataSourceSrv().getInstanceSettings(ruleSourceName)?.uid ?? '';\n\n const defaultQuery = {\n refId: 'A',\n datasourceUid,\n queryType: '',\n relativeTimeRange: getDefaultRelativeTimeRange(),\n expr: rule.expr,\n model: {\n refId: 'A',\n hide: false,\n expr: rule.expr,\n },\n };\n\n const alertingRuleValues = alertingRulerRuleToRuleForm(rule);\n\n return {\n ...defaultFormValues,\n ...alertingRuleValues,\n queries: [defaultQuery],\n annotations: normalizeDefaultAnnotations(listifyLabelsOrAnnotations(rule.annotations, false)),\n type: RuleFormType.cloudAlerting,\n dataSourceName: ruleSourceName,\n namespace,\n group: group.name,\n };\n } else if (rulerRuleType.dataSource.recordingRule(rule)) {\n const recordingRuleValues = recordingRulerRuleToRuleForm(rule);\n\n return {\n ...defaultFormValues,\n ...recordingRuleValues,\n type: RuleFormType.cloudRecording,\n dataSourceName: ruleSourceName,\n namespace,\n group: group.name,\n };\n } else {\n throw new Error('Unexpected type of rule for cloud rules source');\n }\n }\n}\n\nexport function grafanaRuleDtoToFormValues(rule: RulerGrafanaRuleDTO, namespace: string): RuleFormValues {\n const isGrafanaRecordingRule = rulerRuleType.grafana.recordingRule(rule);\n const defaultFormValues = getDefaultFormValues(isGrafanaRecordingRule ? RuleFormType.grafanaRecording : undefined);\n\n const ga = rule.grafana_alert;\n const duration = rule.for;\n const keepFiringFor = rule.keep_firing_for;\n const annotations = rule.annotations;\n const labels = rule.labels;\n\n const commonProperties = {\n ...defaultFormValues,\n name: ga.title,\n queries: ga.data,\n condition: ga.condition,\n annotations: normalizeDefaultAnnotations(listifyLabelsOrAnnotations(annotations, false)),\n labels: listifyLabelsOrAnnotations(labels, true),\n folder: { title: namespace, uid: ga.namespace_uid },\n isPaused: ga.is_paused,\n };\n\n if (rulerRuleType.grafana.recordingRule(rule)) {\n // grafana recording rule\n return {\n ...commonProperties,\n type: RuleFormType.grafanaRecording,\n group: ga.rule_group,\n metric: ga.record?.metric,\n };\n }\n\n // grafana alerting rule\n const routingSettings: AlertManagerManualRouting | undefined = getContactPointsFromDTO(ga);\n if (ga.no_data_state !== undefined && ga.exec_err_state !== undefined) {\n return {\n ...commonProperties,\n type: RuleFormType.grafana,\n group: ga.rule_group,\n evaluateFor: duration || '0',\n keepFiringFor: keepFiringFor || '0',\n noDataState: ga.no_data_state,\n execErrState: ga.exec_err_state,\n\n contactPoints: routingSettings,\n manualRouting: Boolean(routingSettings),\n\n editorSettings: getEditorSettingsFromDTO(ga),\n };\n } else {\n throw new Error('Unexpected type of rule for grafana rules source');\n }\n}\n\nexport function alertingRulerRuleToRuleForm(\n rule: RulerAlertingRuleDTO\n): Pick<\n RuleFormValues,\n | 'name'\n | 'forTime'\n | 'forTimeUnit'\n | 'keepFiringForTime'\n | 'keepFiringForTimeUnit'\n | 'expression'\n | 'annotations'\n | 'labels'\n> {\n const defaultFormValues = getDefaultFormValues();\n\n const [forTime, forTimeUnit] = rule.for ? parseInterval(rule.for) : [0, 's'];\n\n const [keepFiringForTime, keepFiringForTimeUnit] = rule.keep_firing_for\n ? parseInterval(rule.keep_firing_for)\n : [defaultFormValues.keepFiringForTime, defaultFormValues.keepFiringForTimeUnit];\n\n return {\n name: rule.alert,\n expression: rule.expr,\n forTime,\n forTimeUnit,\n keepFiringForTime,\n keepFiringForTimeUnit,\n annotations: listifyLabelsOrAnnotations(rule.annotations, false),\n labels: listifyLabelsOrAnnotations(rule.labels, true),\n };\n}\n\nexport function recordingRulerRuleToRuleForm(\n rule: RulerRecordingRuleDTO\n): Pick<RuleFormValues, 'name' | 'expression' | 'labels'> {\n return {\n name: rule.record,\n expression: rule.expr,\n labels: listifyLabelsOrAnnotations(rule.labels, true),\n };\n}\n\nexport const getDefaultQueries = (isRecordingRule = false): AlertQuery[] => {\n const dataSource = getDefaultOrFirstCompatibleDataSource();\n if (!dataSource) {\n const expressions = isRecordingRule ? getDefaultExpressionsForRecording('A') : getDefaultExpressions('A', 'B');\n return [...expressions];\n }\n const relativeTimeRange = getDefaultRelativeTimeRange();\n\n const expressions = isRecordingRule ? getDefaultExpressionsForRecording('B') : getDefaultExpressions('B', 'C');\n const isLokiOrPrometheus = dataSource ? isSupportedExternalRulesSourceType(dataSource.type) : false;\n return [\n {\n refId: 'A',\n datasourceUid: dataSource.uid,\n queryType: '',\n relativeTimeRange,\n model: {\n refId: 'A',\n instant: isLokiOrPrometheus ? true : undefined,\n },\n },\n ...expressions,\n ];\n};\n\nexport const getDefaultRecordingRulesQueries = (\n rulesSourcesWithRuler: Array<DataSourceInstanceSettings<DataSourceJsonData>>\n): AlertQuery[] => {\n const relativeTimeRange = getDefaultRelativeTimeRange();\n\n return [\n {\n refId: 'A',\n datasourceUid: rulesSourcesWithRuler[0]?.uid || '',\n queryType: '',\n relativeTimeRange,\n model: {\n refId: 'A',\n },\n },\n ];\n};\nconst getDefaultExpressions = (...refIds: [string, string]): AlertQuery[] => {\n const refOne = refIds[0];\n const refTwo = refIds[1];\n\n const reduceExpression: ExpressionQuery = {\n refId: refIds[0],\n type: ExpressionQueryType.reduce,\n datasource: {\n uid: ExpressionDatasourceUID,\n type: ExpressionDatasourceRef.type,\n },\n conditions: [\n {\n type: 'query',\n evaluator: {\n params: [],\n type: EvalFunction.IsAbove,\n },\n operator: {\n type: 'and',\n },\n query: {\n params: [refOne],\n },\n reducer: {\n params: [],\n type: 'last',\n },\n },\n ],\n reducer: 'last',\n expression: 'A',\n };\n\n const thresholdExpression: ExpressionQuery = {\n refId: refTwo,\n type: ExpressionQueryType.threshold,\n datasource: {\n uid: ExpressionDatasourceUID,\n type: ExpressionDatasourceRef.type,\n },\n conditions: [\n {\n type: 'query',\n evaluator: {\n params: [0],\n type: EvalFunction.IsAbove,\n },\n operator: {\n type: 'and',\n },\n query: {\n params: [refTwo],\n },\n reducer: {\n params: [],\n type: 'last',\n },\n },\n ],\n expression: refOne,\n };\n\n return [\n {\n refId: refOne,\n datasourceUid: ExpressionDatasourceUID,\n queryType: '',\n model: reduceExpression,\n },\n {\n refId: refTwo,\n datasourceUid: ExpressionDatasourceUID,\n queryType: '',\n model: thresholdExpression,\n },\n ];\n};\nconst getDefaultExpressionsForRecording = (refOne: string): AlertQuery[] => {\n const reduceExpression: ExpressionQuery = {\n refId: refOne,\n type: ExpressionQueryType.reduce,\n datasource: {\n uid: ExpressionDatasourceUID,\n type: ExpressionDatasourceRef.type,\n },\n conditions: [\n {\n type: 'query',\n evaluator: {\n params: [],\n type: EvalFunction.IsAbove,\n },\n operator: {\n type: 'and',\n },\n query: {\n params: [refOne],\n },\n reducer: {\n params: [],\n type: 'last',\n },\n },\n ],\n reducer: 'last',\n expression: 'A',\n };\n\n return [\n {\n refId: refOne,\n datasourceUid: ExpressionDatasourceUID,\n queryType: '',\n model: reduceExpression,\n },\n ];\n};\n\nconst dataQueriesToGrafanaQueries = async (\n queries: DataQuery[],\n relativeTimeRange: RelativeTimeRange,\n scopedVars: ScopedVars | {},\n panelDataSourceRef?: DataSourceRef,\n maxDataPoints?: number,\n minInterval?: string\n): Promise<AlertQuery[]> => {\n const result: AlertQuery[] = [];\n\n for (const target of queries) {\n const datasource = await getDataSourceSrv().get(target.datasource?.uid ? target.datasource : panelDataSourceRef);\n const dsRef = { uid: datasource.uid, type: datasource.type };\n\n const range = rangeUtil.relativeToTimeRange(relativeTimeRange);\n const { interval, intervalMs } = getIntervals(range, minInterval ?? datasource.interval, maxDataPoints);\n const queryVariables = {\n __interval: { text: interval, value: interval },\n __interval_ms: { text: intervalMs, value: intervalMs },\n ...scopedVars,\n };\n\n const interpolatedTarget = datasource.interpolateVariablesInQueries\n ? datasource.interpolateVariablesInQueries([target], queryVariables)[0]\n : target;\n\n // expressions\n if (dsRef.uid === ExpressionDatasourceUID) {\n const newQuery: AlertQuery = {\n refId: interpolatedTarget.refId,\n queryType: '',\n relativeTimeRange,\n datasourceUid: ExpressionDatasourceUID,\n model: interpolatedTarget,\n };\n result.push(newQuery);\n // queries\n } else {\n const datasourceSettings = getDataSourceSrv().getInstanceSettings(dsRef);\n if (datasourceSettings && datasourceSettings.meta.alerting) {\n const newQuery: AlertQuery = {\n refId: interpolatedTarget.refId,\n queryType: interpolatedTarget.queryType ?? '',\n relativeTimeRange,\n datasourceUid: datasourceSettings.uid,\n model: {\n ...interpolatedTarget,\n maxDataPoints,\n intervalMs,\n },\n };\n result.push(newQuery);\n }\n }\n }\n return result;\n};\n\nexport const panelToRuleFormValues = async (\n panel: PanelModel,\n dashboard: DashboardModel\n): Promise<Partial<RuleFormValues> | undefined> => {\n const { targets } = panel;\n if (!panel.id || !dashboard.uid) {\n return undefined;\n }\n\n const relativeTimeRange = rangeUtil.timeRangeToRelative(rangeUtil.convertRawToRange(dashboard.time));\n const queries = await dataQueriesToGrafanaQueries(\n targets,\n relativeTimeRange,\n panel.scopedVars || {},\n panel.datasource ?? undefined,\n panel.maxDataPoints ?? undefined,\n panel.interval ?? undefined\n );\n // if no alerting capable queries are found, can't create a rule\n if (!queries.length || !queries.find((query) => query.datasourceUid !== ExpressionDatasourceUID)) {\n return undefined;\n }\n\n if (!queries.find((query) => query.datasourceUid === ExpressionDatasourceUID)) {\n const [reduceExpression, _thresholdExpression] = getDefaultExpressions(getNextRefId(queries), '-');\n queries.push(reduceExpression);\n\n const [_reduceExpression, thresholdExpression] = getDefaultExpressions(\n reduceExpression.refId,\n getNextRefId(queries)\n );\n queries.push(thresholdExpression);\n }\n\n const { folderTitle, folderUid } = dashboard.meta;\n const folder =\n folderUid && folderTitle\n ? {\n kind: 'folder',\n uid: folderUid,\n title: folderTitle,\n }\n : undefined;\n\n const formValues = {\n type: RuleFormType.grafana,\n folder,\n queries,\n name: panel.title,\n condition: queries[queries.length - 1].refId,\n annotations: [\n {\n key: Annotation.dashboardUID,\n value: dashboard.uid,\n },\n {\n key: Annotation.panelID,\n value: String(panel.id),\n },\n ],\n };\n return formValues;\n};\n\nexport const scenesPanelToRuleFormValues = async (vizPanel: VizPanel): Promise<Partial<RuleFormValues> | undefined> => {\n if (!vizPanel.state.key) {\n return undefined;\n }\n\n const timeRange = sceneGraph.getTimeRange(vizPanel);\n const queryRunner = getQueryRunnerFor(vizPanel);\n if (!queryRunner) {\n return undefined;\n }\n const { queries, datasource, maxDataPoints, minInterval } = queryRunner.state;\n\n const dashboard = getDashboardSceneFor(vizPanel);\n if (!dashboard || !dashboard.state.uid) {\n return undefined;\n }\n\n const grafanaQueries = await dataQueriesToGrafanaQueries(\n queries,\n rangeUtil.timeRangeToRelative(rangeUtil.convertRawToRange(timeRange.state.value.raw)),\n { __sceneObject: { value: vizPanel } },\n datasource,\n maxDataPoints,\n minInterval\n );\n\n // if no alerting capable queries are found, can't create a rule\n if (!grafanaQueries.length || !grafanaQueries.find((query) => query.datasourceUid !== ExpressionDatasourceUID)) {\n return undefined;\n }\n\n if (!grafanaQueries.find((query) => query.datasourceUid === ExpressionDatasourceUID)) {\n const [reduceExpression, _thresholdExpression] = getDefaultExpressions(getNextRefId(grafanaQueries), '-');\n grafanaQueries.push(reduceExpression);\n\n const [_reduceExpression, thresholdExpression] = getDefaultExpressions(\n reduceExpression.refId,\n getNextRefId(grafanaQueries)\n );\n grafanaQueries.push(thresholdExpression);\n }\n\n const { folderTitle, folderUid } = dashboard.state.meta;\n\n const folder =\n folderUid && folderTitle\n ? {\n kind: 'folder',\n uid: folderUid,\n title: folderTitle,\n }\n : undefined;\n\n const formValues = {\n type: RuleFormType.grafana,\n folder,\n queries: grafanaQueries,\n name: vizPanel.state.title,\n condition: grafanaQueries[grafanaQueries.length - 1].refId,\n annotations: [\n {\n key: Annotation.dashboardUID,\n value: dashboard.state.uid,\n },\n {\n key: Annotation.panelID,\n\n value: String(getPanelIdForVizPanel(vizPanel)),\n },\n ],\n };\n\n return formValues;\n};\n\nexport function getIntervals(range: TimeRange, lowLimit?: string, resolution?: number): IntervalValues {\n if (!resolution) {\n if (lowLimit && rangeUtil.intervalToMs(lowLimit) > 1000) {\n return {\n interval: lowLimit,\n intervalMs: rangeUtil.intervalToMs(lowLimit),\n };\n }\n return { interval: '1s', intervalMs: 1000 };\n }\n\n return rangeUtil.calculateInterval(range, resolution, lowLimit);\n}\n\nexport function fixBothInstantAndRangeQuery(query: AlertQuery) {\n const model = query.model;\n\n if (!isPromQuery(model)) {\n return query;\n }\n\n const isBothInstantAndRange = model.instant && model.range;\n if (isBothInstantAndRange) {\n return { ...query, model: { ...model, range: true, instant: false } };\n }\n\n return query;\n}\n\nfunction isPromQuery(model: AlertDataQuery): model is PromQuery {\n return 'expr' in model && 'instant' in model && 'range' in model;\n}\n\nexport function isPromOrLokiQuery(model: AlertDataQuery): model is PromOrLokiQuery {\n return 'expr' in model;\n}\n\nexport function getInstantFromDataQuery(query: AlertQuery<AlertDataQuery>): boolean | undefined {\n const dataSourceUID = query.datasourceUid ?? query.model.datasource?.uid;\n if (!dataSourceUID) {\n return undefined;\n }\n\n // find the datasource type from the UID\n const type = getDataSourceSrv().getInstanceSettings(dataSourceUID)?.type;\n if (!type) {\n return undefined;\n }\n\n // if the datasource is not a supported prometheus flavor or loki, return \"undefined\"\n if (!isSupportedExternalRulesSourceType(type)) {\n return undefined;\n }\n\n const { model } = query;\n\n // if the datasource is prometheus or loki, instant is defined in the model, or defaults to true\n const isInstantForPrometheus = 'instant' in model && model.instant !== undefined ? model.instant : true;\n const isInstantForLoki = 'queryType' in model && model.queryType !== undefined ? model.queryType === 'instant' : true;\n\n const isPrometheusFlavoredDataSourceType = isSupportedExternalPrometheusFlavoredRulesSourceType(type);\n const isInstant = isPrometheusFlavoredDataSourceType ? isInstantForPrometheus : isInstantForLoki;\n return isInstant;\n}\n","import { SelectableValue } from '@grafana/data';\nimport { MatcherOperator, ObjectMatcher, Route, RouteWithID } from 'app/plugins/datasource/alertmanager/types';\n\nimport { FormAmRoute } from '../types/amroutes';\nimport { MatcherFieldValue } from '../types/silence-form';\n\nimport { matcherToMatcherField } from './alertmanager';\nimport { GRAFANA_RULES_SOURCE_NAME } from './datasource';\nimport { encodeMatcher, normalizeMatchers, parseMatcherToArray, unquoteWithUnescape } from './matchers';\nimport { findExistingRoute, hashRoute } from './routeTree';\nimport { isValidPrometheusDuration, safeParsePrometheusDuration } from './time';\n\nconst matchersToArrayFieldMatchers = (\n matchers: Record<string, string> | undefined,\n isRegex: boolean\n): MatcherFieldValue[] =>\n Object.entries(matchers ?? {}).reduce<MatcherFieldValue[]>(\n (acc, [name, value]) => [\n ...acc,\n {\n name,\n value,\n operator: isRegex ? MatcherOperator.regex : MatcherOperator.equal,\n },\n ],\n []\n );\n\nconst selectableValueToString = (selectableValue: SelectableValue<string>): string => selectableValue.value!;\n\nconst selectableValuesToStrings = (arr: Array<SelectableValue<string>> | undefined): string[] =>\n (arr ?? []).map(selectableValueToString);\n\nexport const emptyArrayFieldMatcher: MatcherFieldValue = {\n name: '',\n value: '',\n operator: MatcherOperator.equal,\n};\n\n// Default route group_by labels for newly created routes.\nexport const defaultGroupBy = ['grafana_folder', 'alertname'];\n\n// Common route group_by options for multiselect drop-down\nexport const commonGroupByOptions = [\n { label: 'grafana_folder', value: 'grafana_folder', isFixed: true },\n { label: 'alertname', value: 'alertname', isFixed: true },\n { label: 'Disable (...)', value: '...' },\n];\n\nexport const emptyRoute: FormAmRoute = {\n id: '',\n overrideGrouping: false,\n groupBy: defaultGroupBy,\n object_matchers: [],\n routes: [],\n continue: false,\n receiver: '',\n overrideTimings: false,\n groupWaitValue: '',\n groupIntervalValue: '',\n repeatIntervalValue: '',\n muteTimeIntervals: [],\n activeTimeIntervals: [],\n};\n\n// add unique identifiers to each route in the route tree, that way we can figure out what route we've edited / deleted\n// ⚠️ make sure this function uses _stable_ identifiers!\nexport function addUniqueIdentifierToRoute(route: Route, position = '0'): RouteWithID {\n const routeHash = hashRoute(route);\n const routes = route.routes ?? [];\n\n return {\n id: `${position}-${routeHash}`,\n ...route,\n routes: routes.map((route, index) => addUniqueIdentifierToRoute(route, `${position}-${index}`)),\n };\n}\n\n// returns route, and a record mapping id to existing route\nexport const amRouteToFormAmRoute = (route: RouteWithID | undefined): FormAmRoute => {\n if (!route) {\n return emptyRoute;\n }\n\n const id = route.id;\n\n if (Object.keys(route).length === 0) {\n const formAmRoute = { ...emptyRoute, id };\n return formAmRoute;\n }\n\n const formRoutes: FormAmRoute[] = [];\n route.routes?.forEach((subRoute) => {\n const subFormRoute = amRouteToFormAmRoute(subRoute);\n formRoutes.push(subFormRoute);\n });\n\n const objectMatchers =\n route.object_matchers?.map((matcher) => ({ name: matcher[0], operator: matcher[1], value: matcher[2] })) ?? [];\n\n const matchers =\n route.matchers\n ?.flatMap((matcher) => {\n // parse the matcher to an array of matchers, PromQL-style matchers can contain more than one matcher (in a matcher, yes it's confusing)\n return parseMatcherToArray(matcher).flatMap(matcherToMatcherField);\n })\n .map(({ name, operator, value }) => ({\n name: unquoteWithUnescape(name),\n operator,\n value: unquoteWithUnescape(value),\n })) ?? [];\n\n return {\n id,\n // Frontend migration to use object_matchers instead of matchers, match, and match_re\n object_matchers: [\n ...matchers,\n ...objectMatchers,\n ...matchersToArrayFieldMatchers(route.match, false),\n ...matchersToArrayFieldMatchers(route.match_re, true),\n ],\n continue: route.continue ?? false,\n receiver: route.receiver ?? '',\n overrideGrouping: Array.isArray(route.group_by) && route.group_by.length > 0,\n groupBy: route.group_by ?? undefined,\n overrideTimings: [route.group_wait, route.group_interval, route.repeat_interval].some(Boolean),\n groupWaitValue: route.group_wait ?? '',\n groupIntervalValue: route.group_interval ?? '',\n repeatIntervalValue: route.repeat_interval ?? '',\n routes: formRoutes,\n muteTimeIntervals: route.mute_time_intervals ?? [],\n activeTimeIntervals: route.active_time_intervals ?? [],\n };\n};\n\n// convert a FormAmRoute to a Route\nexport const formAmRouteToAmRoute = (\n alertManagerSourceName: string,\n formAmRoute: Partial<FormAmRoute>,\n routeTree: RouteWithID\n): Route => {\n const existing = findExistingRoute(formAmRoute.id ?? '', routeTree);\n\n const {\n overrideGrouping,\n groupBy,\n overrideTimings,\n groupWaitValue,\n groupIntervalValue,\n repeatIntervalValue,\n receiver,\n } = formAmRoute;\n\n // \"undefined\" means \"inherit from the parent policy\", currently supported by group_by, group_wait, group_interval, and repeat_interval\n const INHERIT_FROM_PARENT = undefined;\n\n const group_by = overrideGrouping ? groupBy : INHERIT_FROM_PARENT;\n\n const overrideGroupWait = overrideTimings && groupWaitValue;\n const group_wait = overrideGroupWait ? groupWaitValue : INHERIT_FROM_PARENT;\n\n const overrideGroupInterval = overrideTimings && groupIntervalValue;\n const group_interval = overrideGroupInterval ? groupIntervalValue : INHERIT_FROM_PARENT;\n\n const overrideRepeatInterval = overrideTimings && repeatIntervalValue;\n const repeat_interval = overrideRepeatInterval ? repeatIntervalValue : INHERIT_FROM_PARENT;\n\n // Empty matcher values are valid. Such matchers require specified label to not exists\n const object_matchers: ObjectMatcher[] | undefined = formAmRoute.object_matchers\n ?.filter((route) => route.name && route.operator && route.value !== null && route.value !== undefined)\n .map(({ name, operator, value }) => [name, operator, value]);\n\n const routes = formAmRoute.routes?.map((subRoute) =>\n formAmRouteToAmRoute(alertManagerSourceName, subRoute, routeTree)\n );\n\n const amRoute: Route = {\n ...(existing ?? {}),\n continue: formAmRoute.continue,\n group_by: group_by,\n object_matchers: object_matchers,\n match: undefined, // DEPRECATED: Use matchers\n match_re: undefined, // DEPRECATED: Use matchers\n group_wait,\n group_interval,\n repeat_interval,\n routes: routes,\n mute_time_intervals: formAmRoute.muteTimeIntervals,\n active_time_intervals: formAmRoute.activeTimeIntervals,\n receiver: receiver,\n };\n\n // non-Grafana managed rules should use \"matchers\", Grafana-managed rules should use \"object_matchers\"\n // Grafana maintains a fork of AM to support all utf-8 characters in the \"object_matchers\" property values but this\n // does not exist in upstream AlertManager\n if (alertManagerSourceName !== GRAFANA_RULES_SOURCE_NAME) {\n // to support UTF-8 characters we must wrap label keys and values with double quotes if they contain reserved characters.\n amRoute.matchers = formAmRoute.object_matchers?.map(encodeMatcher);\n amRoute.object_matchers = undefined;\n } else {\n amRoute.object_matchers = normalizeMatchers(amRoute);\n amRoute.matchers = undefined;\n }\n\n if (formAmRoute.receiver) {\n amRoute.receiver = formAmRoute.receiver;\n }\n\n return amRoute;\n};\n\nexport const stringToSelectableValue = (str: string): SelectableValue<string> => ({\n label: str,\n value: str,\n});\n\nexport const stringsToSelectableValues = (arr: string[] | undefined): Array<SelectableValue<string>> =>\n (arr ?? []).map(stringToSelectableValue);\n\nexport const mapMultiSelectValueToStrings = (\n selectableValues: Array<SelectableValue<string>> | undefined\n): string[] => {\n if (!selectableValues) {\n return [];\n }\n\n return selectableValuesToStrings(selectableValues);\n};\n\nexport function promDurationValidator(duration?: string) {\n if (!duration || duration.length === 0) {\n return true;\n }\n\n return isValidPrometheusDuration(duration) || 'Invalid duration format. Must be {number}{time_unit}';\n}\n\n// function to convert ObjectMatchers to a array of strings\nexport const objectMatchersToString = (matchers: ObjectMatcher[]): string[] => {\n return matchers.map((matcher) => {\n const [name, operator, value] = matcher;\n return `${name}${operator}${value}`;\n });\n};\n\nexport const repeatIntervalValidator = (repeatInterval: string, groupInterval = '') => {\n if (repeatInterval.length === 0) {\n return true;\n }\n\n const validRepeatInterval = promDurationValidator(repeatInterval);\n const validGroupInterval = promDurationValidator(groupInterval);\n\n if (validRepeatInterval !== true) {\n return validRepeatInterval;\n }\n\n if (validGroupInterval !== true) {\n return validGroupInterval;\n }\n\n const repeatDuration = safeParsePrometheusDuration(repeatInterval);\n const groupDuration = safeParsePrometheusDuration(groupInterval);\n\n const isRepeatLowerThanGroupDuration = groupDuration !== 0 && repeatDuration < groupDuration;\n\n return isRepeatLowerThanGroupDuration ? 'Repeat interval should be higher or equal to Group interval' : true;\n};\n","import { createElement } from 'react';\n\nimport { HighlightPart } from '../../types/completion';\n\ninterface Props {\n text: string;\n highlightParts: HighlightPart[];\n highlightClassName: string;\n}\n\n/**\n * Flattens parts into a list of indices pointing to the index where a part\n * (highlighted or not highlighted) starts. Adds extra indices if needed\n * at the beginning or the end to ensure the entire text is covered.\n */\nfunction getStartIndices(parts: HighlightPart[], length: number): number[] {\n const indices: number[] = [];\n parts.forEach((part) => {\n indices.push(part.start, part.end + 1);\n });\n if (indices[0] !== 0) {\n indices.unshift(0);\n }\n if (indices[indices.length - 1] !== length) {\n indices.push(length);\n }\n return indices;\n}\n\nexport const PartialHighlighter = (props: Props) => {\n let { highlightParts, text, highlightClassName } = props;\n\n if (!highlightParts?.length) {\n return null;\n }\n\n let children = [];\n let indices = getStartIndices(highlightParts, text.length);\n let highlighted = highlightParts[0].start === 0;\n\n for (let i = 1; i < indices.length; i++) {\n let start = indices[i - 1];\n let end = indices[i];\n\n children.push(\n createElement(\n highlighted ? 'mark' : 'span',\n {\n key: i - 1,\n className: highlighted ? highlightClassName : undefined,\n },\n text.substring(start, end)\n )\n );\n highlighted = !highlighted;\n }\n\n return <div>{children}</div>;\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport { flatten, uniqBy } from 'lodash';\n\nimport { DataSourceRef } from '@grafana/schema';\nimport { ExploreItemState } from 'app/types/explore';\nimport { StoreState } from 'app/types/store';\n\nexport const selectPanes = (state: Pick<StoreState, 'explore'>) => state.explore.panes;\nexport const selectExploreRoot = (state: Pick<StoreState, 'explore'>) => state.explore;\n\nexport const selectRichHistorySettings = (state: Pick<StoreState, 'explore'>) => state.explore.richHistorySettings;\n\nexport const selectPanesEntries = createSelector<\n [(state: Pick<StoreState, 'explore'>) => Record<string, ExploreItemState | undefined>],\n Array<[string, ExploreItemState]>\n>(selectPanes, Object.entries);\n\nexport const isSplit = createSelector(selectPanesEntries, (panes) => panes.length > 1);\nexport const selectIsHelperShowing = createSelector(selectPanesEntries, (panes) =>\n panes.some((pane) => pane[1].correlationEditorHelperData !== undefined)\n);\n\nexport const isLeftPaneSelector = (exploreId: string) =>\n createSelector(selectPanes, (panes) => {\n return Object.keys(panes)[0] === exploreId;\n });\n\nexport const getExploreItemSelector = (exploreId: string) => createSelector(selectPanes, (panes) => panes[exploreId]);\n\nexport const selectCorrelationDetails = createSelector(selectExploreRoot, (state) => state.correlationEditorDetails);\n\nexport const selectExploreDSMaps = createSelector(selectPanesEntries, (panes) => {\n const exploreDSMap = panes\n .map(([exploreId, pane]) => {\n const rootDatasource = [pane?.datasourceInstance?.getRef()];\n const queryDatasources = pane?.queries.map((q) => q.datasource) || [];\n const datasources = [...rootDatasource, ...queryDatasources].filter(\n (datasource): datasource is DataSourceRef => !!datasource\n );\n\n if (datasources === undefined || datasources.length === 0) {\n return undefined;\n } else {\n return {\n exploreId,\n datasources: uniqBy(datasources, (ds) => ds.uid),\n };\n }\n })\n .filter((pane): pane is { exploreId: string; datasources: DataSourceRef[] } => !!pane);\n\n const uniqueDataSources = uniqBy(flatten(exploreDSMap.map((pane) => pane.datasources)), (ds) => ds.uid);\n\n const dsToExploreMap = uniqueDataSources.map((ds) => {\n let exploreIds: string[] = [];\n exploreDSMap.forEach((eds) => {\n if (eds.datasources.some((edsDs) => edsDs.uid === ds.uid)) {\n exploreIds.push(eds.exploreId);\n }\n });\n return {\n datasource: ds,\n exploreIds: exploreIds,\n };\n });\n\n return { exploreToDS: exploreDSMap, dsToExplore: dsToExploreMap };\n});\n","import { Logger } from './logger';\n\n/**\n * Allows debug helpers attachement to the window object\n * @internal\n */\nexport function attachDebugger(key: string, thebugger?: any, logger?: Logger) {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n let completeDebugger = thebugger || {};\n\n if (logger !== undefined) {\n completeDebugger = { ...completeDebugger, enable: () => logger.enable(), disable: () => logger.disable() };\n }\n\n // @ts-ignore\n let debugGlobal = (typeof window !== 'undefined' && window['_debug']) ?? {};\n debugGlobal[key] = completeDebugger;\n if (typeof window !== 'undefined') {\n // @ts-ignore\n window['_debug'] = debugGlobal;\n }\n}\n","import { ReactElement } from 'react';\n\nimport { locationUtil } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { Button, Modal, Stack } from '@grafana/ui';\n\ntype Props = {\n onDismiss: () => void;\n path: string;\n title: string;\n};\n\nexport function ConfirmNavigationModal(props: Props): ReactElement {\n const { onDismiss, path, title } = props;\n const openInNewTab = () => {\n global.open(locationUtil.assureBaseUrl(path), '_blank');\n onDismiss();\n };\n const openInCurrentTab = () => locationService.push(path);\n\n return (\n <Modal title={title} isOpen onDismiss={onDismiss}>\n <Stack direction=\"column\" gap={1}>\n <p>\n <Trans i18nKey=\"explore.confirm-navigation-modal.new-tab\">\n Do you want to proceed in the current tab or open a new tab?\n </Trans>\n </p>\n </Stack>\n <Modal.ButtonRow>\n <Button onClick={onDismiss} fill=\"outline\" variant=\"secondary\">\n <Trans i18nKey=\"explore.confirm-navigation-modal.cancel\">Cancel</Trans>\n </Button>\n <Button type=\"submit\" variant=\"secondary\" onClick={openInNewTab} icon=\"external-link-alt\">\n <Trans i18nKey=\"explore.confirm-navigation-modal.open-in-new-tab\">Open in new tab</Trans>\n </Button>\n <Button type=\"submit\" variant=\"primary\" onClick={openInCurrentTab} icon=\"apps\">\n <Trans i18nKey=\"explore.confirm-navigation-modal.open\">Open</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n","import { PropsWithChildren, ReactElement } from 'react';\n\nimport { PluginMeta } from '../../types/plugin';\n\nimport { PluginContext } from './PluginContext';\n\nexport type PluginContextProviderProps = {\n meta: PluginMeta;\n};\n\nexport function PluginContextProvider(props: PropsWithChildren<PluginContextProviderProps>): ReactElement {\n const { children, ...rest } = props;\n return <PluginContext.Provider value={rest}>{children}</PluginContext.Provider>;\n}\n","import { AnchorHTMLAttributes, forwardRef } from 'react';\nimport { Link as RouterLink } from 'react-router-dom-v5-compat';\n\nimport { locationUtil, textUtil } from '@grafana/data';\n\nexport interface Props extends AnchorHTMLAttributes<HTMLAnchorElement> {}\n\n/**\n * @alpha\n */\nexport const Link = forwardRef<HTMLAnchorElement, Props>(({ href, children, ...rest }, ref) => {\n const validUrl = locationUtil.stripBaseFromUrl(textUtil.sanitizeUrl(href ?? ''));\n\n return (\n <RouterLink ref={ref} to={validUrl} {...rest}>\n {children}\n </RouterLink>\n );\n});\n\nLink.displayName = 'Link';\n","import { useCallback, useMemo } from 'react';\nimport { useLocation } from 'react-router-dom-v5-compat';\n\nimport { locationService } from '@grafana/runtime';\n\nexport function useURLSearchParams(): [\n URLSearchParams,\n (searchValues: Record<string, string | string[] | undefined>, replace?: boolean) => void,\n] {\n const { search } = useLocation();\n const queryParams = useMemo(() => new URLSearchParams(search), [search]);\n\n const update = useCallback((searchValues: Record<string, string | string[] | undefined>, replace?: boolean) => {\n locationService.partial(searchValues, replace);\n }, []);\n\n return [queryParams, update];\n}\n","import { css } from '@emotion/css';\nimport Tooltip, { TooltipRef } from 'rc-tooltip';\nimport { useEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nconst HandleTooltip = (props: {\n value: number;\n children: React.ReactElement;\n visible: boolean;\n placement: 'top' | 'right';\n tipFormatter?: () => React.ReactNode;\n}) => {\n const { value, children, visible, placement, tipFormatter, ...restProps } = props;\n\n const tooltipRef = useRef<TooltipRef>(null);\n const rafRef = useRef<number | null>(null);\n const styles = useStyles2(tooltipStyles);\n\n function cancelKeepAlign() {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n }\n\n function keepAlign() {\n rafRef.current = requestAnimationFrame(() => {\n tooltipRef.current?.forceAlign();\n });\n }\n\n useEffect(() => {\n if (visible) {\n keepAlign();\n } else {\n cancelKeepAlign();\n }\n\n return cancelKeepAlign;\n }, [value, visible]);\n\n return (\n <Tooltip\n overlayClassName={styles.tooltip}\n placement={placement}\n overlay={tipFormatter ?? value}\n overlayInnerStyle={{ minHeight: 'auto' }}\n ref={tooltipRef}\n visible={visible}\n {...restProps}\n >\n {children}\n </Tooltip>\n );\n};\n\nconst tooltipStyles = (theme: GrafanaTheme2) => {\n return {\n tooltip: css({\n position: 'absolute',\n display: 'block',\n visibility: 'visible',\n fontSize: theme.typography.bodySmall.fontSize,\n opacity: 0.9,\n padding: 3,\n zIndex: theme.zIndex.tooltip,\n }),\n };\n};\n\nexport default HandleTooltip;\n","import { cx } from '@emotion/css';\nimport { Global } from '@emotion/react';\nimport Slider, { SliderProps } from 'rc-slider';\nimport { useCallback } from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport HandleTooltip from './HandleTooltip';\nimport { getStyles } from './styles';\nimport { RangeSliderProps } from './types';\n\n/**\n * @public\n *\n * RichHistoryQueriesTab uses this Range Component\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-rangeslider--docs\n */\nexport const RangeSlider = ({\n min,\n max,\n onChange,\n onAfterChange,\n orientation = 'horizontal',\n reverse,\n step,\n formatTooltipResult,\n value,\n tooltipAlwaysVisible = true,\n}: RangeSliderProps) => {\n const handleChange = useCallback(\n (v: number | number[]) => {\n const value = typeof v === 'number' ? [v, v] : v;\n onChange?.(value);\n },\n [onChange]\n );\n\n const handleChangeComplete = useCallback(\n (v: number | number[]) => {\n const value = typeof v === 'number' ? [v, v] : v;\n onAfterChange?.(value);\n },\n [onAfterChange]\n );\n\n const isHorizontal = orientation === 'horizontal';\n const styles = useStyles2(getStyles, isHorizontal);\n const dragHandleAriaLabel = t('grafana-ui.range-slider.drag-handle-aria-label', 'Use arrow keys to change the value');\n\n const tipHandleRender: SliderProps['handleRender'] = (node, handleProps) => {\n return (\n <HandleTooltip\n value={handleProps.value}\n visible={tooltipAlwaysVisible || handleProps.dragging}\n tipFormatter={formatTooltipResult ? () => formatTooltipResult(handleProps.value) : undefined}\n placement={isHorizontal ? 'top' : 'right'}\n >\n {node}\n </HandleTooltip>\n );\n };\n\n return (\n <div className={cx(styles.container, styles.slider)}>\n {/** Slider tooltip's parent component is body and therefore we need Global component to do css overrides for it. */}\n <Global styles={styles.tooltip} />\n <Slider\n min={min}\n max={max}\n step={step}\n defaultValue={value}\n range={true}\n onChange={handleChange}\n onChangeComplete={handleChangeComplete}\n vertical={!isHorizontal}\n reverse={reverse}\n handleRender={tipHandleRender}\n ariaLabelForHandle={dragHandleAriaLabel}\n />\n </div>\n );\n};\n\nRangeSlider.displayName = 'RangeSlider';\n","import { css, keyframes } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { getIconPath } from '../Icon/utils';\n\nconst slideUpIn = keyframes({\n '0%': {\n opacity: 0,\n transformOrigin: '0% 0%',\n transform: 'scaleY(0.8)',\n },\n\n '100%': {\n opacity: 1,\n transformOrigin: '0% 0%',\n transform: 'scaleY(1)',\n },\n});\n\nconst slideUpOut = keyframes({\n '0%': {\n opacity: 1,\n transformOrigin: '0% 0%',\n transform: 'scaleY(1)',\n },\n\n '100%': {\n opacity: 0,\n transformOrigin: '0% 0%',\n transform: 'scaleY(0.8)',\n },\n});\n\nconst slideDownIn = keyframes({\n '0%': {\n opacity: 0,\n transformOrigin: '0% 100%',\n transform: 'scaleY(0.8)',\n },\n\n '100%': {\n opacity: 1,\n transformOrigin: '0% 100%',\n transform: 'scaleY(1)',\n },\n});\n\nconst slideDownOut = keyframes({\n '0%': {\n opacity: 1,\n transformOrigin: '0% 100%',\n transform: 'scaleY(1)',\n },\n\n '100%': {\n opacity: 0,\n transformOrigin: '0% 100%',\n transform: 'scaleY(0.8)',\n },\n});\n\nexport const getCascaderStyles = (theme: GrafanaTheme2) => {\n const iconPath = getIconPath('angle-right');\n return {\n dropdown: css({\n '&.rc-cascader-dropdown': {\n position: 'absolute',\n // Required, otherwise the portal that the popup is shown in will render under other components\n zIndex: 9999,\n\n '&-hidden': {\n display: 'none',\n },\n },\n '.rc-cascader': {\n '&-menus': {\n overflow: 'hidden',\n background: theme.colors.background.elevated,\n border: `none`,\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z3,\n whiteSpace: 'nowrap',\n\n '&.slide-up-enter, &.slide-up-appear': {\n animationDuration: '0.3s',\n animationFillMode: 'both',\n transformOrigin: '0 0',\n opacity: 0,\n animationTimingFunction: 'cubic-bezier(0.08, 0.82, 0.17, 1)',\n animationPlayState: 'paused',\n },\n\n '&.slide-up-enter.slide-up-enter-active.rc-cascader-menus-placement, &.slide-up-appear.slide-up-appear-active.rc-cascader-menus-placement':\n {\n '&-bottomLeft': {\n animationName: slideUpIn,\n animationPlayState: 'running',\n },\n\n '&-topLeft': {\n animationName: slideDownIn,\n animationPlayState: 'running',\n },\n },\n\n '&.slide-up-leave': {\n animationDuration: '0.3s',\n animationFillMode: 'both',\n transformOrigin: '0 0',\n opacity: 1,\n animationTimingFunction: 'cubic-bezier(0.6, 0.04, 0.98, 0.34)',\n animationPlayState: 'paused',\n\n '&.slide-up-leave-active.rc-cascader-menus-placement': {\n '&-bottomLeft': {\n animationName: slideUpOut,\n animationPlayState: 'running',\n },\n\n '&-topLeft': {\n animationName: slideDownOut,\n animationPlayState: 'running',\n },\n },\n },\n },\n\n '&-menu': {\n display: 'inline-block',\n maxWidth: '50vw',\n height: '192px',\n listStyle: 'none',\n margin: 0,\n padding: theme.spacing(0.5),\n borderRight: `1px solid ${theme.colors.border.weak}`,\n overflow: 'auto',\n\n '&:last-child': {\n borderRight: 0,\n },\n\n '&-item': {\n height: theme.spacing(4),\n lineHeight: theme.spacing(4),\n padding: theme.spacing(0, 4, 0, 2),\n borderRadius: theme.shape.radius.default,\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n transition: 'all 0.3s ease',\n position: 'relative',\n\n '&:hover': {\n background: theme.colors.action.hover,\n },\n\n '&-disabled': {\n cursor: 'not-allowed',\n color: theme.colors.text.disabled,\n\n '&:hover': {\n background: 'transparent',\n },\n\n '&:after': {\n position: 'absolute',\n right: '12px',\n content: \"'loading'\",\n color: theme.colors.text.disabled,\n fontStyle: 'italic',\n },\n },\n\n '&-active': {\n color: theme.colors.text.maxContrast,\n background: theme.colors.background.secondary,\n\n '&:hover': {\n background: theme.colors.action.hover,\n },\n },\n\n '&-expand': {\n position: 'relative',\n\n '&:after': {\n background: theme.colors.text.primary,\n content: \"''\",\n height: theme.spacing(3),\n mask: `url(${iconPath})`,\n maskType: 'luminance',\n position: 'absolute',\n right: 0,\n top: theme.spacing(0.5),\n width: theme.spacing(3),\n },\n },\n },\n },\n },\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Card, useStyles2 } from '@grafana/ui';\n\ninterface Props {\n description?: string;\n text: string;\n url: string;\n}\n\nexport function NavLandingPageCard({ description, text, url }: Props) {\n const styles = useStyles2(getStyles);\n return (\n <Card noMargin className={styles.card} href={url}>\n <Card.Heading>{text}</Card.Heading>\n <Card.Description className={styles.description}>{description}</Card.Description>\n </Card>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n card: css({\n gridTemplateRows: '1fr 0 2fr',\n }),\n // Limit descriptions to 3 lines max before ellipsing\n // Some plugin descriptions can be very long\n description: css({\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n display: '-webkit-box',\n overflow: 'hidden',\n }),\n});\n","import { IconName } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { BadgeColor } from '@grafana/ui';\nimport { RevisionModel } from 'app/core/components/VersionHistory/VersionHistoryComparison';\nimport {\n GrafanaAlertRuleDTOField,\n GrafanaRuleDefinition,\n RulerGrafanaRuleDTO,\n TopLevelGrafanaRuleDTOField,\n} from 'app/types/unified-alerting-dto';\n\nimport { grafanaAlertPropertiesToIgnore } from '../AlertVersionHistory';\n\ninterface SpecialUidsDisplayMapEntry {\n name: string;\n tooltipContent: string;\n badgeColor: BadgeColor;\n icon?: IconName;\n}\n\n/**\n * Gets a map of special case UIDs that we should display differently.\n * Used for mapping cases where provisioning or the alerting system is listed as responsible for a version history entry.\n */\n\nexport const getSpecialUidsDisplayMap: () => Record<string, SpecialUidsDisplayMapEntry> = () => {\n const provisioning = {\n name: t('alerting.alertVersionHistory.provisioning', 'Provisioning'),\n tooltipContent: t(\n 'alerting.alertVersionHistory.provisioning-change-description',\n 'Version update was made via provisioning'\n ),\n badgeColor: 'purple',\n } as const;\n\n return {\n __alerting__: {\n name: t('alerting.alertVersionHistory.alerting', 'Alerting'),\n tooltipContent: t(\n 'alerting.alertVersionHistory.alerting-change-description',\n 'This update was made by the alerting system due to other changes. For example, when renaming a contact point that is used for simplified routing, this will update affected rules'\n ),\n badgeColor: 'orange',\n icon: 'bell',\n },\n service: provisioning,\n __provisioning__: provisioning,\n };\n};\n/**\n * Flattens a GMA rule and turns properties into human readable/translated strings, for use when computing diffs\n * and displaying in version comparisons\n */\nexport function preprocessRuleForDiffDisplay(rulerRule: RulerGrafanaRuleDTO<GrafanaRuleDefinition>) {\n const { grafana_alert, ...rest } = rulerRule;\n\n /** Translations for top level properties of alert, other than `grafana_alert` */\n const translationMap: Partial<Record<TopLevelGrafanaRuleDTOField, string>> = {\n for: t('alerting.alertVersionHistory.pendingPeriod', 'Pending period'),\n annotations: t('alerting.alertVersionHistory.annotations', 'Annotations'),\n labels: t('alerting.alertVersionHistory.labels', 'Labels'),\n };\n\n /** Translation map for other properties within `grafana_alert` */\n const grafanaAlertTranslationMap: Partial<Record<GrafanaAlertRuleDTOField, string>> = {\n title: t('alerting.alertVersionHistory.name', 'Name'),\n namespace_uid: t('alerting.alertVersionHistory.namespace_uid', 'Folder UID'),\n data: t('alerting.alertVersionHistory.queryAndAlertCondition', 'Query and alert condition'),\n notification_settings: t('alerting.alertVersionHistory.contactPointRouting', 'Contact point routing'),\n no_data_state: t('alerting.alertVersionHistory.noDataState', 'Alert state when no data'),\n exec_err_state: t('alerting.alertVersionHistory.execErrorState', 'Alert state when execution error'),\n is_paused: t('alerting.alertVersionHistory.paused', 'Paused state'),\n rule_group: t('alerting.alertVersionHistory.rule_group', 'Rule group'),\n condition: t('alerting.alertVersionHistory.condition', 'Alert condition'),\n intervalSeconds: t('alerting.alertVersionHistory.intervalSeconds', 'Evaluation interval'),\n };\n\n const processedTopLevel = Object.entries(rest).reduce((acc, [key, value]) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const topLevelRuleKey = key as keyof Omit<RulerGrafanaRuleDTO, 'grafana_alert'>;\n const potentiallyTranslatedKey = translationMap[topLevelRuleKey] || key;\n return {\n ...acc,\n [potentiallyTranslatedKey]: value,\n };\n }, {});\n\n const processedGrafanaAlert = Object.entries(grafana_alert).reduce((acc, [key, value]) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const grafanaRuleKey = key as keyof GrafanaRuleDefinition;\n\n if (grafanaAlertPropertiesToIgnore.includes(grafanaRuleKey)) {\n return acc;\n }\n\n const potentiallyTranslatedKey = grafanaAlertTranslationMap[grafanaRuleKey] || key;\n return {\n ...acc,\n [potentiallyTranslatedKey]: value,\n };\n }, {});\n\n return {\n ...processedTopLevel,\n ...processedGrafanaAlert,\n };\n}\n\n/**\n * Turns a version of a Grafana rule definition into data structure\n * used to display the version summary when comparing versions\n */\nexport function parseVersionInfoToSummary(version: RulerGrafanaRuleDTO<GrafanaRuleDefinition>): RevisionModel {\n const unknown = t('alerting.alertVersionHistory.unknown', 'Unknown');\n const SPECIAL_UID_MAP = getSpecialUidsDisplayMap();\n const createdBy = (() => {\n const updatedBy = version?.grafana_alert.updated_by;\n const uid = updatedBy?.uid;\n const name = updatedBy?.name;\n\n if (!updatedBy) {\n return unknown;\n }\n if (uid && SPECIAL_UID_MAP[uid]) {\n return SPECIAL_UID_MAP[uid].name;\n }\n if (name) {\n return name;\n }\n return uid ? t('alerting.alertVersionHistory.user-id', 'User ID {{uid}}', { uid }) : unknown;\n })();\n\n return {\n createdAt: version.grafana_alert.updated || unknown,\n createdBy,\n version: version.grafana_alert.version || unknown,\n };\n}\n","import { css, cx } from '@emotion/css';\nimport { Global } from '@emotion/react';\nimport Slider from 'rc-slider';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { StandardEditorProps, GrafanaTheme2, SliderFieldConfigSettings } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\nimport { getSliderStyles } from '@grafana/ui/internal';\n\nimport { NumberInput } from './NumberInput';\n\ntype Props = StandardEditorProps<number, SliderFieldConfigSettings>;\n\nexport const SliderValueEditor = ({ value, onChange, item, id }: Props) => {\n // Input reference\n const inputRef = useRef<HTMLSpanElement>(null);\n\n // Settings\n const { settings } = item;\n const min = settings?.min || 0;\n const max = settings?.max || 100;\n const step = settings?.step;\n const marks = settings?.marks || { [min]: min, [max]: max };\n const included = settings?.included;\n const ariaLabelForHandle = settings?.ariaLabelForHandle;\n\n // Core slider specific parameters and state\n const inputWidthDefault = 75;\n const isHorizontal = true;\n const theme = useTheme2();\n const [sliderValue, setSliderValue] = useState<number>(value ?? min);\n const [inputWidth, setInputWidth] = useState<number>(inputWidthDefault);\n\n // Check for a difference between prop value and internal state\n useEffect(() => {\n if (value != null && value !== sliderValue) {\n setSliderValue(value);\n }\n }, [value, sliderValue]);\n\n // Using input font and expected maximum number of digits, set input width\n useEffect(() => {\n const inputElement = getComputedStyle(inputRef.current!);\n const fontWeight = inputElement.getPropertyValue('font-weight') || 'normal';\n const fontSize = inputElement.getPropertyValue('font-size') || '16px';\n const fontFamily = inputElement.getPropertyValue('font-family') || 'Arial';\n const wideNumericalCharacter = '0';\n const marginDigits = 4; // extra digits to account for things like negative, exponential, and controls\n const inputPadding = 8; // TODO: base this on input styling\n const maxDigits =\n Math.max((max + (step || 0)).toString().length, (max - (step || 0)).toString().length) + marginDigits;\n const refString = wideNumericalCharacter.repeat(maxDigits);\n const calculatedTextWidth = getTextWidth(refString, `${fontWeight} ${fontSize} ${fontFamily}`);\n if (calculatedTextWidth) {\n setInputWidth(calculatedTextWidth + inputPadding * 2);\n }\n }, [max, step]);\n\n const onSliderChange = useCallback(\n (v: number | number[]) => {\n const value = typeof v === 'number' ? v : v[0];\n setSliderValue(value);\n\n if (onChange) {\n onChange(value);\n }\n },\n [setSliderValue, onChange]\n );\n\n const onSliderInputChange = useCallback(\n (value?: number) => {\n let v = value;\n\n if (Number.isNaN(v) || !v) {\n v = 0;\n }\n\n setSliderValue(v);\n\n if (onChange) {\n onChange(v);\n }\n },\n [onChange]\n );\n\n // Styles\n const styles = getSliderStyles(theme, isHorizontal, Boolean(marks));\n const stylesSlider = getStylesSlider(theme, inputWidth);\n const sliderInputClassNames = !isHorizontal ? [styles.sliderInputVertical] : [];\n\n return (\n <div className={cx(styles.container, styles.slider)}>\n {/** Slider tooltip's parent component is body and therefore we need Global component to do css overrides for it. */}\n <Global styles={styles.slider} />\n <div className={cx(styles.sliderInput, ...sliderInputClassNames)}>\n <Slider\n min={min}\n max={max}\n step={step}\n defaultValue={value}\n value={sliderValue}\n onChange={onSliderChange}\n vertical={!isHorizontal}\n reverse={false}\n ariaLabelForHandle={ariaLabelForHandle}\n marks={marks}\n included={included}\n />\n <span className={stylesSlider.numberInputWrapper} ref={inputRef}>\n <NumberInput id={id} value={sliderValue} onChange={onSliderInputChange} max={max} min={min} step={step} />\n </span>\n </div>\n </div>\n );\n};\n\n// Calculate width of string with given font\nfunction getTextWidth(text: string, font: string): number | null {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (context) {\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n }\n return null;\n}\n\nconst getStylesSlider = (theme: GrafanaTheme2, width: number) => {\n return {\n numberInputWrapper: css({\n marginLeft: theme.spacing(3),\n maxHeight: '32px',\n maxWidth: width,\n minWidth: width,\n overflow: 'visible',\n width: '100%',\n }),\n };\n};\n","import { Plugin } from 'slate-react';\n\nfunction getIndent(text: string) {\n let offset = text.length - text.trimLeft().length;\n if (offset) {\n let indent = text[0];\n while (--offset) {\n indent += text[0];\n }\n return indent;\n }\n return '';\n}\n\nexport function NewlinePlugin(): Plugin {\n return {\n onKeyDown(event, editor, next) {\n const value = editor.value;\n\n if (value.selection.isExpanded) {\n return next();\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n const { startBlock } = value;\n const currentLineText = startBlock.text;\n const indent = getIndent(currentLineText);\n\n return editor.splitBlock().insertText(indent).focus();\n }\n\n return next();\n },\n };\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// kinds/gen.go\n// Using jennies:\n// TSTypesJenny\n// LatestMajorsOrXJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\n/**\n * TODO: this should be a regular DataQuery that depends on the selected dashboard\n * these match the properties of the \"grafana\" datasouce that is default in most dashboards\n */\nexport interface AnnotationTarget {\n /**\n * Only required/valid for the grafana datasource...\n * but code+tests is already depending on it so hard to change\n */\n limit: number;\n /**\n * Only required/valid for the grafana datasource...\n * but code+tests is already depending on it so hard to change\n */\n matchAny: boolean;\n /**\n * Only required/valid for the grafana datasource...\n * but code+tests is already depending on it so hard to change\n */\n tags: Array<string>;\n /**\n * Only required/valid for the grafana datasource...\n * but code+tests is already depending on it so hard to change\n */\n type: string;\n}\n\nexport const defaultAnnotationTarget: Partial<AnnotationTarget> = {\n tags: [],\n};\n\nexport interface AnnotationPanelFilter {\n /**\n * Should the specified panels be included or excluded\n */\n exclude?: boolean;\n /**\n * Panel IDs that should be included or excluded\n */\n ids: Array<number>;\n}\n\nexport const defaultAnnotationPanelFilter: Partial<AnnotationPanelFilter> = {\n exclude: false,\n ids: [],\n};\n\n/**\n * Contains the list of annotations that are associated with the dashboard.\n * Annotations are used to overlay event markers and overlay event tags on graphs.\n * Grafana comes with a native annotation store and the ability to add annotation events directly from the graph panel or via the HTTP API.\n * See https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/annotate-visualizations/\n */\nexport interface AnnotationContainer {\n /**\n * List of annotations\n */\n list?: Array<AnnotationQuery>;\n}\n\nexport const defaultAnnotationContainer: Partial<AnnotationContainer> = {\n list: [],\n};\n\n/**\n * TODO docs\n * FROM: AnnotationQuery in grafana-data/src/types/annotations.ts\n */\nexport interface AnnotationQuery {\n /**\n * Set to 1 for the standard annotation query all dashboards have by default.\n */\n builtIn?: number;\n /**\n * Datasource where the annotations data is\n */\n datasource: DataSourceRef;\n /**\n * When enabled the annotation query is issued with every dashboard refresh\n */\n enable: boolean;\n /**\n * Filters to apply when fetching annotations\n */\n filter?: AnnotationPanelFilter;\n /**\n * Annotation queries can be toggled on or off at the top of the dashboard.\n * When hide is true, the toggle is not shown in the dashboard.\n */\n hide?: boolean;\n /**\n * Color to use for the annotation event markers\n */\n iconColor: string;\n /**\n * Name of annotation.\n */\n name: string;\n /**\n * Placement can be used to display the annotation query somewhere else on the dashboard other than the default location.\n */\n placement?: AnnotationQueryPlacement;\n /**\n * TODO.. this should just be a normal query target\n */\n target?: AnnotationTarget;\n /**\n * TODO -- this should not exist here, it is based on the --grafana-- datasource\n */\n type?: string;\n}\n\nexport const defaultAnnotationQuery: Partial<AnnotationQuery> = {\n builtIn: 0,\n enable: true,\n hide: false,\n};\n\n/**\n * A variable is a placeholder for a value. You can use variables in metric queries and in panel titles.\n */\nexport interface VariableModel {\n /**\n * Custom all value\n */\n allValue?: string;\n /**\n * Allow custom values to be entered in the variable\n */\n allowCustomValue?: boolean;\n /**\n * Shows current selected variable text/value on the dashboard\n */\n current?: VariableOption;\n /**\n * Data source used to fetch values for a variable. It can be defined but `null`.\n */\n datasource?: DataSourceRef;\n /**\n * Description of variable. It can be defined but `null`.\n */\n description?: string;\n /**\n * Visibility configuration for the variable\n */\n hide?: VariableHide;\n /**\n * Whether all value option is available or not\n */\n includeAll?: boolean;\n /**\n * Optional display name\n */\n label?: string;\n /**\n * Whether multiple values can be selected or not from variable value list\n */\n multi?: boolean;\n /**\n * Name of variable\n */\n name: string;\n /**\n * Options that can be selected for a variable.\n */\n options?: Array<VariableOption>;\n /**\n * Query used to fetch values for a variable\n */\n query?: (string | Record<string, unknown>);\n /**\n * Options to config when to refresh a variable\n */\n refresh?: VariableRefresh;\n /**\n * Optional field, if you want to extract part of a series name or metric node segment.\n * Named capture groups can be used to separate the display text and value.\n */\n regex?: string;\n /**\n * Whether the variable value should be managed by URL query params or not\n */\n skipUrlSync?: boolean;\n /**\n * Options sort order\n */\n sort?: VariableSort;\n /**\n * Additional static options for query variable\n */\n staticOptions?: Array<VariableOption>;\n /**\n * Ordering of static options in relation to options returned from data source for query variable\n */\n staticOptionsOrder?: ('before' | 'after' | 'sorted');\n /**\n * Type of variable\n */\n type: VariableType;\n}\n\nexport const defaultVariableModel: Partial<VariableModel> = {\n allowCustomValue: true,\n includeAll: false,\n multi: false,\n options: [],\n skipUrlSync: false,\n staticOptions: [],\n};\n\n/**\n * Option to be selected in a variable.\n */\nexport interface VariableOption {\n /**\n * Whether the option is selected or not\n */\n selected?: boolean;\n /**\n * Text to be displayed for the option\n */\n text: (string | Array<string>);\n /**\n * Value of the option\n */\n value: (string | Array<string>);\n}\n\n/**\n * Options to config when to refresh a variable\n * `0`: Never refresh the variable\n * `1`: Queries the data source every time the dashboard loads.\n * `2`: Queries the data source when the dashboard time range changes.\n */\nexport enum VariableRefresh {\n never = 0,\n onDashboardLoad = 1,\n onTimeRangeChanged = 2,\n}\n\n/**\n * Determine if the variable shows on dashboard\n * Accepted values are 0 (show label and value), 1 (show value only), 2 (show nothing), 3 (show under the controls dropdown menu).\n */\nexport enum VariableHide {\n dontHide = 0,\n hideLabel = 1,\n hideVariable = 2,\n inControlsMenu = 3,\n}\n\n/**\n * Sort variable options\n * Accepted values are:\n * `0`: No sorting\n * `1`: Alphabetical ASC\n * `2`: Alphabetical DESC\n * `3`: Numerical ASC\n * `4`: Numerical DESC\n * `5`: Alphabetical Case Insensitive ASC\n * `6`: Alphabetical Case Insensitive DESC\n * `7`: Natural ASC\n * `8`: Natural DESC\n */\nexport enum VariableSort {\n alphabeticalAsc = 1,\n alphabeticalCaseInsensitiveAsc = 5,\n alphabeticalCaseInsensitiveDesc = 6,\n alphabeticalDesc = 2,\n disabled = 0,\n naturalAsc = 7,\n naturalDesc = 8,\n numericalAsc = 3,\n numericalDesc = 4,\n}\n\n/**\n * Ref to a DataSource instance\n */\nexport interface DataSourceRef {\n /**\n * The plugin type-id\n */\n type?: string;\n /**\n * Specific datasource instance\n */\n uid?: string;\n}\n\n/**\n * Links with references to other dashboards or external resources\n */\nexport interface DashboardLink {\n /**\n * If true, all dashboards links will be displayed in a dropdown. If false, all dashboards links will be displayed side by side. Only valid if the type is dashboards\n */\n asDropdown: boolean;\n /**\n * Icon name to be displayed with the link\n */\n icon: string;\n /**\n * If true, includes current template variables values in the link as query params\n */\n includeVars: boolean;\n /**\n * If true, includes current time range in the link as query params\n */\n keepTime: boolean;\n /**\n * Placement can be used to display the link somewhere else on the dashboard other than above the visualisations.\n */\n placement?: DashboardLinkPlacement;\n /**\n * List of tags to limit the linked dashboards. If empty, all dashboards will be displayed. Only valid if the type is dashboards\n */\n tags: Array<string>;\n /**\n * If true, the link will be opened in a new tab\n */\n targetBlank: boolean;\n /**\n * Title to display with the link\n */\n title: string;\n /**\n * Tooltip to display when the user hovers their mouse over it\n */\n tooltip: string;\n /**\n * Link type. Accepted values are dashboards (to refer to another dashboard) and link (to refer to an external resource)\n */\n type: DashboardLinkType;\n /**\n * Link URL. Only required/valid if the type is link\n */\n url?: string;\n}\n\nexport const defaultDashboardLink: Partial<DashboardLink> = {\n asDropdown: false,\n includeVars: false,\n keepTime: false,\n tags: [],\n targetBlank: false,\n};\n\n/**\n * Dashboard Link type. Accepted values are dashboards (to refer to another dashboard) and link (to refer to an external resource)\n */\nexport type DashboardLinkType = ('link' | 'dashboards');\n\n/**\n * Dashboard Link placement. Defines where the link should be displayed.\n * - \"inControlsMenu\" renders the link in bottom part of the dashboard controls dropdown menu\n */\nexport type DashboardLinkPlacement = 'inControlsMenu';\n\n/**\n * Annotation Query placement. Defines where the annotation query should be displayed.\n * - \"inControlsMenu\" renders the annotation query in the dashboard controls dropdown menu\n */\nexport type AnnotationQueryPlacement = 'inControlsMenu';\n\n/**\n * Dashboard action type\n */\nexport type ActionType = ('fetch' | 'infinity');\n\n/**\n * Fetch options\n */\nexport interface FetchOptions {\n body?: string;\n headers?: Array<Array<string>>;\n method: HttpRequestMethod;\n /**\n * These are 2D arrays of strings, each representing a key-value pair\n * We are defining this way because we can't generate a go struct that\n * that would have exactly two strings in each sub-array\n */\n queryParams?: Array<Array<string>>;\n url: string;\n}\n\nexport const defaultFetchOptions: Partial<FetchOptions> = {\n headers: [],\n queryParams: [],\n};\n\n/**\n * Infinity options\n */\nexport interface InfinityOptions {\n body?: string;\n datasourceUid: string;\n headers?: Array<Array<string>>;\n method: HttpRequestMethod;\n /**\n * These are 2D arrays of strings, each representing a key-value pair\n * We are defining them this way because we can't generate a go struct that\n * that would have exactly two strings in each sub-array\n */\n queryParams?: Array<Array<string>>;\n url: string;\n}\n\nexport const defaultInfinityOptions: Partial<InfinityOptions> = {\n headers: [],\n queryParams: [],\n};\n\nexport type HttpRequestMethod = ('GET' | 'PUT' | 'POST' | 'DELETE' | 'PATCH');\n\n/**\n * Action variable type\n */\nexport type ActionVariableType = 'string';\n\nexport interface ActionVariable {\n key: string;\n name: string;\n type: ActionVariableType;\n}\n\n/**\n * Dashboard action\n */\nexport interface Action {\n confirmation?: string;\n fetch?: FetchOptions;\n infinity?: InfinityOptions;\n oneClick?: boolean;\n style?: {\n backgroundColor?: string;\n };\n title: string;\n type: ActionType;\n variables?: Array<ActionVariable>;\n}\n\nexport const defaultAction: Partial<Action> = {\n variables: [],\n};\n\n/**\n * Dashboard variable type\n * `query`: Query-generated list of values such as metric names, server names, sensor IDs, data centers, and so on.\n * `adhoc`: Key/value filters that are automatically added to all metric queries for a data source (Prometheus, Loki, InfluxDB, and Elasticsearch only).\n * `constant`: \tDefine a hidden constant.\n * `datasource`: Quickly change the data source for an entire dashboard.\n * `interval`: Interval variables represent time spans.\n * `textbox`: Display a free text input field with an optional default value.\n * `custom`: Define the variable options manually using a comma-separated list.\n * `system`: Variables defined by Grafana. See: https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#global-variables\n * `switch`: Boolean variables rendered as a switch\n */\nexport type VariableType = ('query' | 'adhoc' | 'groupby' | 'constant' | 'datasource' | 'interval' | 'textbox' | 'custom' | 'system' | 'snapshot' | 'switch');\n\n/**\n * Color mode for a field. You can specify a single color, or select a continuous (gradient) color schemes, based on a value.\n * Continuous color interpolates a color using the percentage of a value relative to min and max.\n * Accepted values are:\n * `thresholds`: From thresholds. Informs Grafana to take the color from the matching threshold\n * `palette-classic`: Classic palette. Grafana will assign color by looking up a color in a palette by series index. Useful for Graphs and pie charts and other categorical data visualizations\n * `palette-classic-by-name`: Classic palette (by name). Grafana will assign color by looking up a color in a palette by series name. Useful for Graphs and pie charts and other categorical data visualizations\n * `continuous-GrYlRd`: ontinuous Green-Yellow-Red palette mode\n * `continuous-RdYlGr`: Continuous Red-Yellow-Green palette mode\n * `continuous-BlYlRd`: Continuous Blue-Yellow-Red palette mode\n * `continuous-YlRd`: Continuous Yellow-Red palette mode\n * `continuous-BlPu`: Continuous Blue-Purple palette mode\n * `continuous-YlBl`: Continuous Yellow-Blue palette mode\n * `continuous-blues`: Continuous Blue palette mode\n * `continuous-reds`: Continuous Red palette mode\n * `continuous-greens`: Continuous Green palette mode\n * `continuous-purples`: Continuous Purple palette mode\n * `shades`: Shades of a single color. Specify a single color, useful in an override rule.\n * `fixed`: Fixed color mode. Specify a single color, useful in an override rule.\n */\nexport enum FieldColorModeId {\n ContinuousBlPu = 'continuous-BlPu',\n ContinuousBlYlRd = 'continuous-BlYlRd',\n ContinuousBlues = 'continuous-blues',\n ContinuousGrYlRd = 'continuous-GrYlRd',\n ContinuousGreens = 'continuous-greens',\n ContinuousPurples = 'continuous-purples',\n ContinuousRdYlGr = 'continuous-RdYlGr',\n ContinuousReds = 'continuous-reds',\n ContinuousYlBl = 'continuous-YlBl',\n ContinuousYlRd = 'continuous-YlRd',\n Fixed = 'fixed',\n PaletteClassic = 'palette-classic',\n PaletteClassicByName = 'palette-classic-by-name',\n Shades = 'shades',\n Thresholds = 'thresholds',\n}\n\n/**\n * Defines how to assign a series color from \"by value\" color schemes. For example for an aggregated data points like a timeseries, the color can be assigned by the min, max or last value.\n */\nexport type FieldColorSeriesByMode = ('min' | 'max' | 'last');\n\n/**\n * Map a field to a color.\n */\nexport interface FieldColor {\n /**\n * The fixed color value for fixed or shades color modes.\n */\n fixedColor?: string;\n /**\n * The main color scheme mode.\n */\n mode: FieldColorModeId;\n /**\n * Some visualizations need to know how to assign a series color from by value color schemes.\n */\n seriesBy?: FieldColorSeriesByMode;\n}\n\n/**\n * Position and dimensions of a panel in the grid\n */\nexport interface GridPos {\n /**\n * Panel height. The height is the number of rows from the top edge of the panel.\n */\n h: number;\n /**\n * Whether the panel is fixed within the grid. If true, the panel will not be affected by other panels' interactions\n */\n static?: boolean;\n /**\n * Panel width. The width is the number of columns from the left edge of the panel.\n */\n w: number;\n /**\n * Panel x. The x coordinate is the number of columns from the left edge of the grid\n */\n x: number;\n /**\n * Panel y. The y coordinate is the number of rows from the top edge of the grid\n */\n y: number;\n}\n\nexport const defaultGridPos: Partial<GridPos> = {\n h: 9,\n w: 12,\n x: 0,\n y: 0,\n};\n\n/**\n * User-defined value for a metric that triggers visual changes in a panel when this value is met or exceeded\n * They are used to conditionally style and color visualizations based on query results , and can be applied to most visualizations.\n */\nexport interface Threshold {\n /**\n * Color represents the color of the visual change that will occur in the dashboard when the threshold value is met or exceeded.\n */\n color: string;\n /**\n * Value represents a specified metric for the threshold, which triggers a visual change in the dashboard when this value is met or exceeded.\n * Nulls currently appear here when serializing -Infinity to JSON.\n */\n value: (number | null);\n}\n\n/**\n * Thresholds can either be `absolute` (specific number) or `percentage` (relative to min or max, it will be values between 0 and 1).\n */\nexport enum ThresholdsMode {\n Absolute = 'absolute',\n Percentage = 'percentage',\n}\n\n/**\n * Thresholds configuration for the panel\n */\nexport interface ThresholdsConfig {\n /**\n * Thresholds mode.\n */\n mode: ThresholdsMode;\n /**\n * Must be sorted by 'value', first value is always -Infinity\n */\n steps: Array<Threshold>;\n}\n\nexport const defaultThresholdsConfig: Partial<ThresholdsConfig> = {\n steps: [],\n};\n\n/**\n * Allow to transform the visual representation of specific data values in a visualization, irrespective of their original units\n */\nexport type ValueMapping = (ValueMap | RangeMap | RegexMap | SpecialValueMap);\n\n/**\n * Supported value mapping types\n * `value`: Maps text values to a color or different display text and color. For example, you can configure a value mapping so that all instances of the value 10 appear as Perfection! rather than the number.\n * `range`: Maps numerical ranges to a display text and color. For example, if a value is within a certain range, you can configure a range value mapping to display Low or High rather than the number.\n * `regex`: Maps regular expressions to replacement text and a color. For example, if a value is www.example.com, you can configure a regex value mapping so that Grafana displays www and truncates the domain.\n * `special`: Maps special values like Null, NaN (not a number), and boolean values like true and false to a display text and color. See SpecialValueMatch to see the list of special values. For example, you can configure a special value mapping so that null values appear as N/A.\n */\nexport enum MappingType {\n RangeToText = 'range',\n RegexToText = 'regex',\n SpecialValue = 'special',\n ValueToText = 'value',\n}\n\n/**\n * Maps text values to a color or different display text and color.\n * For example, you can configure a value mapping so that all instances of the value 10 appear as Perfection! rather than the number.\n */\nexport interface ValueMap {\n /**\n * Map with <value_to_match>: ValueMappingResult. For example: { \"10\": { text: \"Perfection!\", color: \"green\" } }\n */\n options: Record<string, ValueMappingResult>;\n type: MappingType.ValueToText;\n}\n\n/**\n * Maps numerical ranges to a display text and color.\n * For example, if a value is within a certain range, you can configure a range value mapping to display Low or High rather than the number.\n */\nexport interface RangeMap {\n /**\n * Range to match against and the result to apply when the value is within the range\n */\n options: {\n /**\n * Min value of the range. It can be null which means -Infinity\n */\n from: (number | null);\n /**\n * Max value of the range. It can be null which means +Infinity\n */\n to: (number | null);\n /**\n * Config to apply when the value is within the range\n */\n result: ValueMappingResult;\n };\n type: MappingType.RangeToText;\n}\n\n/**\n * Maps regular expressions to replacement text and a color.\n * For example, if a value is www.example.com, you can configure a regex value mapping so that Grafana displays www and truncates the domain.\n */\nexport interface RegexMap {\n /**\n * Regular expression to match against and the result to apply when the value matches the regex\n */\n options: {\n /**\n * Regular expression to match against\n */\n pattern: string;\n /**\n * Config to apply when the value matches the regex\n */\n result: ValueMappingResult;\n };\n type: MappingType.RegexToText;\n}\n\n/**\n * Maps special values like Null, NaN (not a number), and boolean values like true and false to a display text and color.\n * See SpecialValueMatch to see the list of special values.\n * For example, you can configure a special value mapping so that null values appear as N/A.\n */\nexport interface SpecialValueMap {\n options: {\n /**\n * Special value to match against\n */\n match: SpecialValueMatch;\n /**\n * Config to apply when the value matches the special value\n */\n result: ValueMappingResult;\n };\n type: MappingType.SpecialValue;\n}\n\n/**\n * Special value types supported by the `SpecialValueMap`\n */\nexport enum SpecialValueMatch {\n Empty = 'empty',\n False = 'false',\n NaN = 'nan',\n Null = 'null',\n NullAndNan = 'null+nan',\n True = 'true',\n}\n\n/**\n * Result used as replacement with text and color when the value matches\n */\nexport interface ValueMappingResult {\n /**\n * Text to use when the value matches\n */\n color?: string;\n /**\n * Icon to display when the value matches. Only specific visualizations.\n */\n icon?: string;\n /**\n * Position in the mapping array. Only used internally.\n */\n index?: number;\n /**\n * Text to display when the value matches\n */\n text?: string;\n}\n\n/**\n * Transformations allow to manipulate data returned by a query before the system applies a visualization.\n * Using transformations you can: rename fields, join time series data, perform mathematical operations across queries,\n * use the output of one transformation as the input to another transformation, etc.\n */\nexport interface DataTransformerConfig {\n /**\n * Disabled transformations are skipped\n */\n disabled?: boolean;\n /**\n * Optional frame matcher. When missing it will be applied to all results\n */\n filter?: MatcherConfig;\n /**\n * Unique identifier of transformer\n */\n id: string;\n /**\n * Options to be passed to the transformer\n * Valid options depend on the transformer id\n */\n options: unknown;\n /**\n * Where to pull DataFrames from as input to transformation\n */\n topic?: ('series' | 'annotations' | 'alertStates'); // replaced with common.DataTopic\n}\n\n/**\n * Counterpart for TypeScript's TimeOption type.\n */\nexport interface TimeOption {\n display: string;\n from: string;\n to: string;\n}\n\n/**\n * Time picker configuration\n * It defines the default config for the time picker and the refresh picker for the specific dashboard.\n */\nexport interface TimePickerConfig {\n /**\n * Whether timepicker is visible or not.\n */\n hidden?: boolean;\n /**\n * Override the now time by entering a time delay. Use this option to accommodate known delays in data aggregation to avoid null values.\n */\n nowDelay?: string;\n /**\n * Quick ranges for time picker.\n */\n quick_ranges?: Array<TimeOption>;\n /**\n * Interval options available in the refresh picker dropdown.\n */\n refresh_intervals?: Array<string>;\n}\n\nexport const defaultTimePickerConfig: Partial<TimePickerConfig> = {\n hidden: false,\n quick_ranges: [],\n refresh_intervals: ['5s', '10s', '30s', '1m', '5m', '15m', '30m', '1h', '2h', '1d'],\n};\n\n/**\n * 0 for no shared crosshair or tooltip (default).\n * 1 for shared crosshair.\n * 2 for shared crosshair AND shared tooltip.\n */\nexport enum DashboardCursorSync {\n Crosshair = 1,\n Off = 0,\n Tooltip = 2,\n}\n\nexport const defaultDashboardCursorSync: DashboardCursorSync = DashboardCursorSync.Off;\n\n/**\n * Dashboard panels are the basic visualization building blocks.\n */\nexport interface Panel {\n /**\n * Sets panel queries cache timeout.\n */\n cacheTimeout?: string;\n /**\n * The datasource used in all targets.\n */\n datasource?: DataSourceRef;\n /**\n * Panel description.\n */\n description?: string;\n /**\n * Field options allow you to change how the data is displayed in your visualizations.\n */\n fieldConfig?: FieldConfigSource;\n /**\n * Grid position.\n */\n gridPos?: GridPos;\n /**\n * Controls if the timeFrom or timeShift overrides are shown in the panel header\n */\n hideTimeOverride?: boolean;\n /**\n * Unique identifier of the panel. Generated by Grafana when creating a new panel. It must be unique within a dashboard, but not globally.\n */\n id?: number;\n /**\n * The min time interval setting defines a lower limit for the $__interval and $__interval_ms variables.\n * This value must be formatted as a number followed by a valid time\n * identifier like: \"40s\", \"3d\", etc.\n * See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options\n */\n interval?: string;\n /**\n * Dynamically load the panel\n */\n libraryPanel?: LibraryPanelRef;\n /**\n * Panel links.\n */\n links?: Array<DashboardLink>;\n /**\n * The maximum number of data points that the panel queries are retrieving.\n */\n maxDataPoints?: number;\n /**\n * Option for repeated panels that controls max items per row\n * Only relevant for horizontally repeated panels\n */\n maxPerRow?: number;\n /**\n * It depends on the panel plugin. They are specified by the Options field in panel plugin schemas.\n */\n options?: Record<string, unknown>;\n /**\n * The version of the plugin that is used for this panel. This is used to find the plugin to display the panel and to migrate old panel configs.\n */\n pluginVersion?: string;\n /**\n * Overrides the data source configured time-to-live for a query cache item in milliseconds\n */\n queryCachingTTL?: number;\n /**\n * Name of template variable to repeat for.\n */\n repeat?: string;\n /**\n * Direction to repeat in if 'repeat' is set.\n * `h` for horizontal, `v` for vertical.\n */\n repeatDirection?: ('h' | 'v');\n /**\n * Depends on the panel plugin. See the plugin documentation for details.\n */\n targets?: Array<Record<string, unknown>>;\n /**\n * Compare the current time range with a previous period\n * For example \"1d\" to compare current period but shifted back 1 day\n */\n timeCompare?: string;\n /**\n * Overrides the relative time range for individual panels,\n * which causes them to be different than what is selected in\n * the dashboard time picker in the top-right corner of the dashboard. You can use this to show metrics from different\n * time periods or days on the same dashboard.\n * The value is formatted as time operation like: `now-5m` (Last 5 minutes), `now/d` (the day so far),\n * `now-5d/d`(Last 5 days), `now/w` (This week so far), `now-2y/y` (Last 2 years).\n * Note: Panel time overrides have no effect when the dashboard’s time range is absolute.\n * See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options\n */\n timeFrom?: string;\n /**\n * Overrides the time range for individual panels by shifting its start and end relative to the time picker.\n * For example, you can shift the time range for the panel to be two hours earlier than the dashboard time picker setting `2h`.\n * Note: Panel time overrides have no effect when the dashboard’s time range is absolute.\n * See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options\n */\n timeShift?: string;\n /**\n * Panel title.\n */\n title?: string;\n /**\n * List of transformations that are applied to the panel data before rendering.\n * When there are multiple transformations, Grafana applies them in the order they are listed.\n * Each transformation creates a result set that then passes on to the next transformation in the processing pipeline.\n */\n transformations?: Array<DataTransformerConfig>;\n /**\n * Whether to display the panel without a background.\n */\n transparent?: boolean;\n /**\n * The panel plugin type id. This is used to find the plugin to display the panel.\n */\n type: string;\n}\n\nexport const defaultPanel: Partial<Panel> = {\n links: [],\n repeatDirection: 'h',\n targets: [],\n transformations: [],\n transparent: false,\n};\n\n/**\n * The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.\n * Each column within this structure is called a field. A field can represent a single time series or table column.\n * Field options allow you to change how the data is displayed in your visualizations.\n */\nexport interface FieldConfigSource {\n /**\n * Defaults are the options applied to all fields.\n */\n defaults: FieldConfig;\n /**\n * Overrides are the options applied to specific fields overriding the defaults.\n */\n overrides: Array<{\n matcher: MatcherConfig;\n properties: Array<{\n id: string;\n value?: unknown;\n }>;\n }>;\n}\n\nexport const defaultFieldConfigSource: Partial<FieldConfigSource> = {\n overrides: [],\n};\n\n/**\n * A library panel is a reusable panel that you can use in any dashboard.\n * When you make a change to a library panel, that change propagates to all instances of where the panel is used.\n * Library panels streamline reuse of panels across multiple dashboards.\n */\nexport interface LibraryPanelRef {\n /**\n * Library panel name\n */\n name: string;\n /**\n * Library panel uid\n */\n uid: string;\n}\n\n/**\n * Matcher is a predicate configuration. Based on the config a set of field(s) or values is filtered in order to apply override / transformation.\n * It comes with in id ( to resolve implementation from registry) and a configuration that’s specific to a particular matcher type.\n */\nexport interface MatcherConfig {\n /**\n * The matcher id. This is used to find the matcher implementation from registry.\n */\n id: string;\n /**\n * The matcher options. This is specific to the matcher implementation.\n */\n options?: unknown;\n}\n\nexport const defaultMatcherConfig: Partial<MatcherConfig> = {\n id: '',\n};\n\n/**\n * The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.\n * Each column within this structure is called a field. A field can represent a single time series or table column.\n * Field options allow you to change how the data is displayed in your visualizations.\n */\nexport interface FieldConfig {\n /**\n * Define interactive HTTP requests that can be triggered from data visualizations.\n */\n actions?: Array<Action>;\n /**\n * Panel color configuration\n */\n color?: FieldColor;\n /**\n * custom is specified by the FieldConfig field\n * in panel plugin schemas.\n */\n custom?: Record<string, unknown>;\n /**\n * Specify the number of decimals Grafana includes in the rendered value.\n * If you leave this field blank, Grafana automatically truncates the number of decimals based on the value.\n * For example 1.1234 will display as 1.12 and 100.456 will display as 100.\n * To display all decimals, set the unit to `String`.\n */\n decimals?: number;\n /**\n * Human readable field metadata\n */\n description?: string;\n /**\n * The display value for this field. This supports template variables blank is auto\n */\n displayName?: string;\n /**\n * This can be used by data sources that return and explicit naming structure for values and labels\n * When this property is configured, this value is used rather than the default naming strategy.\n */\n displayNameFromDS?: string;\n /**\n * True if data source field supports ad-hoc filters\n */\n filterable?: boolean;\n /**\n * The behavior when clicking on a result\n */\n links?: Array<unknown>;\n /**\n * Convert input values into a display string\n */\n mappings?: Array<ValueMapping>;\n /**\n * The maximum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields.\n */\n max?: number;\n /**\n * The minimum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields.\n */\n min?: number;\n /**\n * Alternative to empty string\n */\n noValue?: string;\n /**\n * An explicit path to the field in the datasource. When the frame meta includes a path,\n * This will default to `${frame.meta.path}/${field.name}\n * \n * When defined, this value can be used as an identifier within the datasource scope, and\n * may be used to update the results\n */\n path?: string;\n /**\n * Map numeric values to states\n */\n thresholds?: ThresholdsConfig;\n /**\n * Unit a field should use. The unit you select is applied to all fields except time.\n * You can use the units ID availables in Grafana or a custom unit.\n * Available units in Grafana: https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/valueFormats/categories.ts\n * As custom unit, you can use the following formats:\n * `suffix:<suffix>` for custom unit that should go after value.\n * `prefix:<prefix>` for custom unit that should go before value.\n * `time:<format>` For custom date time formats type for example `time:YYYY-MM-DD`.\n * `si:<base scale><unit characters>` for custom SI units. For example: `si: mF`. This one is a bit more advanced as you can specify both a unit and the source data scale. So if your source data is represented as milli (thousands of) something prefix the unit with that SI scale character.\n * `count:<unit>` for a custom count unit.\n * `currency:<unit>` for custom a currency unit.\n */\n unit?: string;\n /**\n * True if data source can write a value to the path. Auth/authz are supported separately\n */\n writeable?: boolean;\n}\n\nexport const defaultFieldConfig: Partial<FieldConfig> = {\n actions: [],\n links: [],\n mappings: [],\n};\n\n/**\n * Row panel\n */\nexport interface RowPanel {\n /**\n * Whether this row should be collapsed or not.\n */\n collapsed: boolean;\n /**\n * Name of default datasource for the row\n */\n datasource?: DataSourceRef;\n /**\n * Row grid position\n */\n gridPos?: GridPos;\n /**\n * Unique identifier of the panel. Generated by Grafana when creating a new panel. It must be unique within a dashboard, but not globally.\n */\n id: number;\n /**\n * List of panels in the row\n */\n panels: Array<Panel>;\n /**\n * Name of template variable to repeat for.\n */\n repeat?: string;\n /**\n * Row title\n */\n title?: string;\n /**\n * The panel type\n */\n type: 'row';\n}\n\nexport const defaultRowPanel: Partial<RowPanel> = {\n collapsed: false,\n panels: [],\n};\n\nexport interface Dashboard {\n /**\n * Contains the list of annotations that are associated with the dashboard.\n * Annotations are used to overlay event markers and overlay event tags on graphs.\n * Grafana comes with a native annotation store and the ability to add annotation events directly from the graph panel or via the HTTP API.\n * See https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/annotate-visualizations/\n */\n annotations?: AnnotationContainer;\n /**\n * Description of dashboard.\n */\n description?: string;\n /**\n * Whether a dashboard is editable or not.\n */\n editable?: boolean;\n /**\n * The month that the fiscal year starts on. 0 = January, 11 = December\n */\n fiscalYearStartMonth?: number;\n /**\n * ID of a dashboard imported from the https://grafana.com/grafana/dashboards/ portal\n */\n gnetId?: string;\n /**\n * Configuration of dashboard cursor sync behavior.\n * Accepted values are 0 (sync turned off), 1 (shared crosshair), 2 (shared crosshair and tooltip).\n */\n graphTooltip?: DashboardCursorSync;\n /**\n * Unique numeric identifier for the dashboard.\n * `id` is internal to a specific Grafana instance. `uid` should be used to identify a dashboard across Grafana instances.\n */\n id?: (number | null); // TODO eliminate this null option\n /**\n * Links with references to other dashboards or external websites.\n */\n links?: Array<DashboardLink>;\n /**\n * When set to true, the dashboard will redraw panels at an interval matching the pixel width.\n * This will keep data \"moving left\" regardless of the query refresh rate. This setting helps\n * avoid dashboards presenting stale live data\n */\n liveNow?: boolean;\n /**\n * List of dashboard panels\n */\n panels?: Array<(Panel | RowPanel)>;\n /**\n * When set to true, the dashboard will load all panels in the dashboard when it's loaded.\n */\n preload?: boolean;\n /**\n * Refresh rate of dashboard. Represented via interval string, e.g. \"5s\", \"1m\", \"1h\", \"1d\".\n */\n refresh?: string;\n /**\n * This property should only be used in dashboards defined by plugins. It is a quick check\n * to see if the version has changed since the last time.\n */\n revision?: number;\n /**\n * Version of the JSON schema, incremented each time a Grafana update brings\n * changes to said schema.\n */\n schemaVersion: number;\n /**\n * Snapshot options. They are present only if the dashboard is a snapshot.\n */\n snapshot?: {\n /**\n * Time when the snapshot was created\n */\n created: string;\n /**\n * Time when the snapshot expires, default is never to expire\n */\n expires: string;\n /**\n * Is the snapshot saved in an external grafana instance\n */\n external: boolean;\n /**\n * external url, if snapshot was shared in external grafana instance\n */\n externalUrl: string;\n /**\n * original url, url of the dashboard that was snapshotted\n */\n originalUrl: string;\n /**\n * Unique identifier of the snapshot\n */\n id: number;\n /**\n * Optional, defined the unique key of the snapshot, required if external is true\n */\n key: string;\n /**\n * Optional, name of the snapshot\n */\n name: string;\n /**\n * org id of the snapshot\n */\n orgId: number;\n /**\n * last time when the snapshot was updated\n */\n updated: string;\n /**\n * url of the snapshot, if snapshot was shared internally\n */\n url?: string;\n /**\n * user id of the snapshot creator\n */\n userId: number;\n };\n /**\n * Tags associated with dashboard.\n */\n tags?: Array<string>;\n /**\n * Configured template variables\n */\n templating?: {\n /**\n * List of configured template variables with their saved values along with some other metadata\n */\n list?: Array<VariableModel>;\n };\n /**\n * Time range for dashboard.\n * Accepted values are relative time strings like {from: 'now-6h', to: 'now'} or absolute time strings like {from: '2020-07-10T08:00:00.000Z', to: '2020-07-10T14:00:00.000Z'}.\n */\n time?: {\n from: string;\n to: string;\n };\n /**\n * Configuration of the time picker shown at the top of a dashboard.\n */\n timepicker?: TimePickerConfig;\n /**\n * Timezone of dashboard. Accepted values are IANA TZDB zone ID or \"browser\" or \"utc\".\n */\n timezone?: string;\n /**\n * Title of dashboard.\n */\n title?: string;\n /**\n * Unique dashboard identifier that can be generated by anyone. string (8-40)\n */\n uid?: string;\n /**\n * Version of the dashboard, incremented each time the dashboard is updated.\n */\n version?: number;\n /**\n * Day when the week starts. Expressed by the name of the day in lowercase, e.g. \"monday\".\n */\n weekStart?: string;\n}\n\nexport const defaultDashboard: Partial<Dashboard> = {\n editable: true,\n fiscalYearStartMonth: 0,\n graphTooltip: DashboardCursorSync.Off,\n links: [],\n panels: [],\n schemaVersion: 42,\n tags: [],\n timezone: 'browser',\n};\n","import { css, cx } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { forwardRef, HTMLProps, useRef } from 'react';\n\nimport { GrafanaTheme2, deprecationWarning } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\nimport { Icon } from '../Icon/Icon';\n\nexport interface Props extends Omit<HTMLProps<HTMLInputElement>, 'value'> {\n value?: boolean;\n /** Show an invalid state around the input */\n invalid?: boolean;\n}\n\n/**\n * Switch is a representation of an on-off state – like a light switch. So you can use Switch to toggle binary states.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-switch--docs\n */\nexport const Switch = forwardRef<HTMLInputElement, Props>(\n ({ value, checked, onChange, id, label, disabled, invalid = false, ...inputProps }, ref) => {\n if (checked) {\n deprecationWarning('Switch', 'checked prop', 'value');\n }\n\n const styles = useStyles2(getSwitchStyles);\n const switchIdRef = useRef(id ? id : uniqueId('switch-'));\n\n return (\n <div className={cx(styles.switch, invalid && styles.invalid)}>\n <input\n type=\"checkbox\"\n role=\"switch\"\n disabled={disabled}\n checked={value}\n onChange={(event) => {\n !disabled && onChange?.(event);\n }}\n id={switchIdRef.current}\n {...inputProps}\n ref={ref}\n />\n <label htmlFor={switchIdRef.current} aria-label={label}>\n <Icon name=\"check\" size=\"xs\" />\n </label>\n </div>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n\nexport interface InlineSwitchProps extends Props {\n /** Label to show next to the switch */\n showLabel?: boolean;\n /** Make inline switch's background and border transparent */\n transparent?: boolean;\n}\n\nexport const InlineSwitch = forwardRef<HTMLInputElement, InlineSwitchProps>(\n ({ transparent, className, showLabel, label, value, id, invalid, ...props }, ref) => {\n const styles = useStyles2(getSwitchStyles, transparent);\n\n return (\n <div\n className={cx(styles.inlineContainer, className, props.disabled && styles.disabled, invalid && styles.invalid)}\n >\n {showLabel && (\n <label\n htmlFor={id}\n className={cx(styles.inlineLabel, value && styles.inlineLabelEnabled, 'inline-switch-label')}\n >\n {label}\n </label>\n )}\n <Switch {...props} id={id} label={label} ref={ref} value={value} />\n </div>\n );\n }\n);\n\nInlineSwitch.displayName = 'Switch';\n\nconst getSwitchStyles = (theme: GrafanaTheme2, transparent?: boolean) => ({\n switch: css({\n width: theme.spacing(4),\n height: theme.spacing(2),\n position: 'relative',\n lineHeight: 1,\n\n input: {\n height: '100%',\n width: '100% !important',\n opacity: 0,\n zIndex: -1000,\n position: 'absolute',\n\n '&:checked + label': {\n background: theme.colors.primary.main,\n borderColor: theme.colors.primary.main,\n\n '&:hover': {\n background: theme.colors.primary.shade,\n },\n\n svg: {\n transform: `translate3d(${theme.spacing(2.25)}, -50%, 0)`,\n background: theme.colors.primary.contrastText,\n color: theme.colors.primary.main,\n },\n },\n\n '&:disabled + label': {\n background: theme.colors.action.disabledBackground,\n borderColor: theme.colors.border.weak,\n cursor: 'not-allowed',\n\n svg: {\n background: theme.colors.text.disabled,\n },\n },\n\n '&:disabled:checked + label': {\n background: theme.colors.primary.transparent,\n\n svg: {\n color: theme.colors.primary.contrastText,\n },\n },\n\n '&:focus + label, &:focus-visible + label': getFocusStyles(theme),\n\n '&:focus:not(:focus-visible) + label': getMouseFocusStyles(theme),\n },\n\n label: {\n width: '100%',\n height: '100%',\n cursor: 'pointer',\n borderRadius: theme.shape.radius.pill,\n background: theme.components.input.background,\n border: `1px solid ${theme.components.input.borderColor}`,\n [theme.transitions.handleMotion('no-preference')]: {\n transition: 'all 0.3s ease',\n },\n\n '&:hover': {\n borderColor: theme.components.input.borderHover,\n },\n\n svg: {\n position: 'absolute',\n display: 'block',\n color: 'transparent',\n width: theme.spacing(1.5),\n height: theme.spacing(1.5),\n borderRadius: theme.shape.radius.circle,\n background: theme.colors.text.secondary,\n boxShadow: theme.shadows.z1,\n left: 0,\n top: '50%',\n transform: `translate3d(${theme.spacing(0.25)}, -50%, 0)`,\n [theme.transitions.handleMotion('no-preference')]: {\n transition: 'transform 0.2s cubic-bezier(0.19, 1, 0.22, 1)',\n },\n\n '@media (forced-colors: active)': {\n border: `1px solid ${theme.colors.primary.contrastText}`,\n },\n },\n },\n }),\n inlineContainer: css({\n padding: theme.spacing(0, 1),\n height: theme.spacing(theme.components.height.md),\n display: 'inline-flex',\n alignItems: 'center',\n background: transparent ? 'transparent' : theme.components.input.background,\n border: `1px solid ${transparent ? 'transparent' : theme.components.input.borderColor}`,\n borderRadius: theme.shape.radius.default,\n\n '&:hover': {\n border: `1px solid ${transparent ? 'transparent' : theme.components.input.borderHover}`,\n\n '.inline-switch-label': {\n color: theme.colors.text.primary,\n },\n },\n }),\n disabled: css({\n backgroundColor: transparent ? 'transparent' : 'rgba(204, 204, 220, 0.04)',\n color: 'rgba(204, 204, 220, 0.6)',\n border: `1px solid ${transparent ? 'transparent' : 'rgba(204, 204, 220, 0.04)'}`,\n }),\n inlineLabel: css({\n cursor: 'pointer',\n paddingRight: theme.spacing(1),\n color: theme.colors.text.secondary,\n whiteSpace: 'nowrap',\n }),\n inlineLabelEnabled: css({\n color: theme.colors.text.primary,\n }),\n invalid: css({\n 'input + label, input:checked + label, input:hover + label': {\n border: `1px solid ${theme.colors.error.border}`,\n },\n }),\n});\n","import { keyframes } from '@emotion/css';\nimport * as React from 'react';\n\nconst fadeIn = keyframes({\n '0%': {\n opacity: 0,\n },\n '100%': {\n opacity: 1,\n },\n});\n\nexport const skeletonAnimation = {\n animationName: fadeIn,\n animationDelay: '100ms',\n animationTimingFunction: 'ease-in',\n animationDuration: '100ms',\n animationFillMode: 'backwards',\n};\n\ninterface SkeletonProps {\n /**\n * Spread these props at the root of your skeleton to handle animation logic\n */\n rootProps: {\n style: React.CSSProperties;\n };\n}\n\nexport type SkeletonComponent<P = {}> = React.ComponentType<P & SkeletonProps>;\n\n/**\n * Use this to attach a skeleton as a static property on the component.\n * e.g. if you render a component with `<Component />`, you can render the skeleton with `<Component.Skeleton />`.\n * @param Component A functional or class component\n * @param Skeleton A functional or class skeleton component\n * @returns A wrapped component with a static skeleton property\n */\nexport const attachSkeleton = <C extends object, P>(Component: C, Skeleton: SkeletonComponent<P>) => {\n const skeletonWrapper = (props: P) => {\n return (\n <Skeleton\n {...props}\n rootProps={{\n style: skeletonAnimation,\n }}\n />\n );\n };\n return Object.assign(Component, { Skeleton: skeletonWrapper });\n};\n","import { CSSProperties, HTMLProps } from 'react';\n\nimport { FormattedValue } from '@grafana/data';\n\nexport interface Props extends Omit<HTMLProps<HTMLDivElement>, 'className' | 'value' | 'style'> {\n value: FormattedValue;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction fontSizeReductionFactor(fontSize: number) {\n if (fontSize < 20) {\n return 0.9;\n }\n if (fontSize < 26) {\n return 0.8;\n }\n return 0.6;\n}\n\n/**\n * Used to display a value, which also supports prefix and suffix.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/plugins-formattedvaluedisplay--docs\n */\nexport const FormattedValueDisplay = ({ value, className, style, ...htmlProps }: Props) => {\n const hasPrefix = (value.prefix ?? '').length > 0;\n const hasSuffix = (value.suffix ?? '').length > 0;\n let suffixStyle;\n\n if (style && typeof style.fontSize === 'number' && !Number.isNaN(style.fontSize)) {\n const fontSize = style.fontSize;\n const reductionFactor = fontSizeReductionFactor(fontSize);\n suffixStyle = { fontSize: fontSize * reductionFactor };\n }\n\n return (\n <div className={className} style={style} {...htmlProps}>\n <div>\n {hasPrefix && <span>{value.prefix}</span>}\n <span>{value.text}</span>\n {hasSuffix && <span style={suffixStyle}>{value.suffix}</span>}\n </div>\n </div>\n );\n};\n\nFormattedValueDisplay.displayName = 'FormattedDisplayValue';\n","import { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { InlineSwitch } from '@grafana/ui';\n\nimport { PanelEditor } from './PanelEditor';\n\nexport interface Props {\n panelEditor: PanelEditor;\n}\n\nexport function PanelEditControls({ panelEditor }: Props) {\n const { tableView, dataPane } = panelEditor.useState();\n\n return (\n <>\n {dataPane && (\n <InlineSwitch\n label={t('dashboard-scene.panel-edit-controls.table-view-label-table-view', 'Table view')}\n showLabel={true}\n id=\"table-view\"\n value={tableView ? true : false}\n onClick={panelEditor.onToggleTableView}\n aria-label={t(\n 'dashboard-scene.panel-edit-controls.table-view-aria-label-toggletableview',\n 'Toggle table view'\n )}\n data-testid={selectors.components.PanelEditor.toggleTableView}\n />\n )}\n </>\n );\n}\n","import { sanitizeUrl } from '@grafana/data/internal';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { DashboardLink } from '@grafana/schema';\nimport { MenuItem, Tooltip } from '@grafana/ui';\nimport {\n DashboardLinkButton,\n DashboardLinksDashboard,\n} from 'app/features/dashboard/components/SubMenu/DashboardLinksDashboard';\nimport { getLinkSrv } from 'app/features/panel/panellinks/link_srv';\n\nimport { LINK_ICON_MAP } from '../settings/links/utils';\n\nexport interface Props {\n link: DashboardLink;\n dashboardUID: string;\n // Set to `true` if displaying a link in a drop-down menu (e.g. dashboard controls)\n inMenu?: boolean;\n}\n\nexport function DashboardLinkRenderer({ link, dashboardUID, inMenu }: Props) {\n const linkInfo = getLinkSrv().getAnchorInfo(link);\n\n if (link.type === 'dashboards') {\n return <DashboardLinksDashboard link={link} linkInfo={linkInfo} dashboardUID={dashboardUID} />;\n }\n\n const icon = LINK_ICON_MAP[link.icon];\n\n const linkElement = inMenu ? (\n <MenuItem\n icon={icon}\n url={sanitizeUrl(linkInfo.href)}\n label={linkInfo.title}\n target={link.targetBlank ? '_blank' : undefined}\n data-testid={selectors.components.DashboardLinks.link}\n />\n ) : (\n <DashboardLinkButton\n icon={icon}\n href={sanitizeUrl(linkInfo.href)}\n target={link.targetBlank ? '_blank' : undefined}\n rel=\"noreferrer\"\n data-testid={selectors.components.DashboardLinks.link}\n >\n {linkInfo.title}\n </DashboardLinkButton>\n );\n\n return (\n <div data-testid={selectors.components.DashboardLinks.container}>\n {link.tooltip ? <Tooltip content={linkInfo.tooltip}>{linkElement}</Tooltip> : linkElement}\n </div>\n );\n}\n","import { PointerEventHandler, useCallback } from 'react';\n\nimport { Trans } from '@grafana/i18n';\nimport { Button } from '@grafana/ui';\n\nimport { openAddVariablePane } from '../settings/variables/VariableAddEditableElement';\nimport { DashboardInteractions } from '../utils/interactions';\n\nimport { DashboardScene } from './DashboardScene';\n\nexport function AddVariableButton({ dashboard }: { dashboard: DashboardScene }) {\n const { isEditing } = dashboard.useState();\n\n const handlePointerDown: PointerEventHandler = useCallback(\n (evt) => {\n evt.stopPropagation();\n openAddVariablePane(dashboard);\n DashboardInteractions.addVariableButtonClicked({ source: 'variable_controls' });\n },\n [dashboard]\n );\n\n if (!isEditing) {\n return null;\n }\n\n return (\n <Button icon=\"plus\" variant=\"primary\" fill=\"text\" onPointerDown={handlePointerDown}>\n <Trans i18nKey=\"dashboard-scene.variable-controls.add-variable\">Add</Trans>\n </Button>\n );\n}\n","import { css, cx } from '@emotion/css';\n\nimport { VariableHide, GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { config } from '@grafana/runtime';\nimport {\n sceneGraph,\n useSceneObjectState,\n SceneVariable,\n SceneVariableState,\n ControlsLabel,\n ControlsLayout,\n sceneUtils,\n} from '@grafana/scenes';\nimport { useElementSelection, useStyles2 } from '@grafana/ui';\n\nimport { DashboardScene } from './DashboardScene';\nimport { AddVariableButton } from './VariableControlsAddButton';\n\nexport function VariableControls({ dashboard }: { dashboard: DashboardScene }) {\n const { variables } = sceneGraph.getVariables(dashboard)!.useState();\n\n return (\n <>\n {variables\n .filter((v) => v.state.hide !== VariableHide.inControlsMenu)\n .map((variable) => (\n <VariableValueSelectWrapper key={variable.state.key} variable={variable} />\n ))}\n {config.featureToggles.dashboardNewLayouts ? <AddVariableButton dashboard={dashboard} /> : null}\n </>\n );\n}\n\ninterface VariableSelectProps {\n variable: SceneVariable;\n inMenu?: boolean;\n}\n\nexport function VariableValueSelectWrapper({ variable, inMenu }: VariableSelectProps) {\n const state = useSceneObjectState<SceneVariableState>(variable, { shouldActivateOrKeepAlive: true });\n const { isSelected, onSelect, isSelectable } = useElementSelection(variable.state.key);\n const styles = useStyles2(getStyles);\n\n if (state.hide === VariableHide.hideVariable) {\n if (variable.UNSAFE_renderAsHidden) {\n return <variable.Component model={variable} />;\n }\n\n return null;\n }\n\n const onPointerDown = (evt: React.PointerEvent) => {\n if (!isSelectable) {\n return;\n }\n\n // Ignore click if it's inside the value control\n if (evt.target instanceof Element && !evt.target.closest(`label`)) {\n // Prevent clearing selection when clicking inside value\n evt.stopPropagation();\n return;\n }\n\n if (isSelectable && onSelect) {\n evt.stopPropagation();\n onSelect(evt);\n }\n };\n\n // For switch variables in menu, we want to show the switch on the left and the label on the right\n if (inMenu && sceneUtils.isSwitchVariable(variable)) {\n return (\n <div className={styles.switchMenuContainer} data-testid={selectors.pages.Dashboard.SubMenu.submenuItem}>\n <div className={styles.switchControl}>\n <variable.Component model={variable} />\n </div>\n <VariableLabel variable={variable} layout={'vertical'} className={styles.switchLabel} />\n </div>\n );\n }\n\n if (inMenu) {\n return (\n <div className={styles.verticalContainer} data-testid={selectors.pages.Dashboard.SubMenu.submenuItem}>\n <VariableLabel variable={variable} layout={'vertical'} />\n <variable.Component model={variable} />\n </div>\n );\n }\n\n return (\n <div\n className={cx(\n styles.container,\n isSelected && 'dashboard-selected-element',\n isSelectable && !isSelected && 'dashboard-selectable-element'\n )}\n onPointerDown={onPointerDown}\n data-testid={selectors.pages.Dashboard.SubMenu.submenuItem}\n >\n <VariableLabel variable={variable} className={cx(isSelectable && styles.labelSelectable)} />\n <variable.Component model={variable} />\n </div>\n );\n}\n\nfunction VariableLabel({\n variable,\n className,\n layout,\n}: {\n variable: SceneVariable;\n className?: string;\n layout?: ControlsLayout;\n}) {\n const { state } = variable;\n\n if (variable.state.hide === VariableHide.hideLabel) {\n return null;\n }\n\n const labelOrName = state.label || state.name;\n const elementId = `var-${state.key}`;\n\n return (\n <ControlsLabel\n htmlFor={elementId}\n isLoading={state.loading}\n onCancel={() => variable.onCancel?.()}\n label={labelOrName}\n error={state.error}\n layout={layout ?? 'horizontal'}\n description={state.description ?? undefined}\n className={className}\n />\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n // No border for second element (inputs) as label and input border is shared\n '> :nth-child(2)': css({\n borderTopLeftRadius: 'unset',\n borderBottomLeftRadius: 'unset',\n }),\n }),\n verticalContainer: css({\n display: 'flex',\n flexDirection: 'column',\n }),\n switchMenuContainer: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }),\n switchControl: css({\n '& > div': {\n border: 'none',\n background: 'transparent',\n paddingRight: theme.spacing(0.5),\n height: theme.spacing(2),\n },\n }),\n switchLabel: css({\n marginTop: 0,\n marginBottom: 0,\n }),\n labelWrapper: css({\n display: 'flex',\n alignItems: 'center',\n }),\n labelSelectable: css({\n cursor: 'pointer',\n }),\n});\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { SceneDataLayerProvider, sceneGraph, SceneVariable } from '@grafana/scenes';\nimport { DashboardLink, VariableHide } from '@grafana/schema';\nimport { Box, Dropdown, Menu, ToolbarButton, useStyles2 } from '@grafana/ui';\n\nimport { isDashboardDataLayerSetState } from './DashboardDataLayerSet';\nimport { DashboardLinkRenderer } from './DashboardLinkRenderer';\nimport { DashboardScene } from './DashboardScene';\nimport { DataLayerControl } from './DataLayerControl';\nimport { VariableValueSelectWrapper } from './VariableControls';\n\nexport const DASHBOARD_CONTROLS_MENU_ARIA_LABEL = 'Dashboard controls menu';\nexport const DASHBOARD_CONTROLS_MENU_TITLE = 'Dashboard controls';\n\nexport function DashboardControlsButton({ dashboard }: { dashboard: DashboardScene }) {\n const { links, uid } = dashboard.useState();\n // Dashboard links are not supported at the moment.\n // Reason: nesting <Dropdown> components causes issues since the inner dropdown is rendered in a portal,\n // so clicking it closes the parent dropdown (the parent sees it as an overlay click, and the event cannot easily be intercepted,\n // as it is in different HTML subtree).\n const filteredLinks = links.filter((link) => link.placement === 'inControlsMenu' && link.type !== 'dashboards');\n const variables = sceneGraph\n .getVariables(dashboard)!\n .useState()\n .variables.filter((v) => v.state.hide === VariableHide.inControlsMenu);\n const dataState = sceneGraph.getData(dashboard).useState();\n const annotationLayers = isDashboardDataLayerSetState(dataState) ? dataState.annotationLayers : [];\n const filteredAnnotationLayers = annotationLayers.filter((layer) => layer.state.placement === 'inControlsMenu');\n\n if ((variables.length === 0 && filteredLinks.length === 0 && filteredAnnotationLayers.length === 0) || !uid) {\n return null;\n }\n\n return (\n <Dropdown\n placement=\"bottom-end\"\n overlay={\n <DashboardControlsMenu\n variables={variables}\n links={filteredLinks}\n annotationLayers={filteredAnnotationLayers}\n dashboardUID={uid}\n />\n }\n >\n <ToolbarButton\n aria-label={t('dashboard.controls.menu.aria-label', DASHBOARD_CONTROLS_MENU_ARIA_LABEL)}\n title={t('dashboard.controls.menu.title', DASHBOARD_CONTROLS_MENU_TITLE)}\n icon=\"ellipsis-v\"\n iconSize=\"md\"\n narrow\n variant=\"canvas\"\n />\n </Dropdown>\n );\n}\n\ninterface DashboardControlsMenuProps {\n variables: SceneVariable[];\n links: DashboardLink[];\n annotationLayers: SceneDataLayerProvider[];\n dashboardUID: string;\n}\n\nfunction DashboardControlsMenu({ variables, links, annotationLayers, dashboardUID }: DashboardControlsMenuProps) {\n const styles = useStyles2(getStyles);\n\n return (\n <Box\n minWidth={32}\n borderColor={'weak'}\n borderStyle={'solid'}\n boxShadow={'z3'}\n display={'flex'}\n direction={'column'}\n borderRadius={'default'}\n backgroundColor={'primary'}\n padding={1.5}\n gap={0.5}\n onClick={(e) => {\n // Normally, clicking the overlay closes the dropdown.\n // We stop event propagation here to keep it open while users interact with variable controls.\n e.stopPropagation();\n }}\n >\n {/* Variables */}\n {variables.map((variable, index) => (\n <div className={cx({ [styles.variableItem]: index > 0 })} key={variable.state.key}>\n <VariableValueSelectWrapper variable={variable} inMenu />\n </div>\n ))}\n\n {/* Annotation layers */}\n {annotationLayers.length > 0 &&\n annotationLayers.map((layer, index) => (\n <div className={cx(index > 0 && styles.variableItem)} key={layer.state.key}>\n <DataLayerControl layer={layer} inMenu />\n </div>\n ))}\n\n {/* Links */}\n {links.length > 0 && (\n <>\n {(variables.length > 0 || annotationLayers.length > 0) && <MenuDivider />}\n {links.map((link, index) => (\n <div key={`${link.title}-${index}`}>\n <DashboardLinkRenderer link={link} dashboardUID={dashboardUID} inMenu />\n </div>\n ))}\n </>\n )}\n </Box>\n );\n}\n\nfunction MenuDivider() {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.divider}>\n <Menu.Divider />\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n divider: css({\n marginTop: theme.spacing(2),\n padding: theme.spacing(0, 0.5),\n }),\n variableItem: css({\n marginTop: theme.spacing(2),\n }),\n});\n","import { SceneDataLayerProvider, sceneGraph } from '@grafana/scenes';\n\nimport { isDashboardDataLayerSetState } from './DashboardDataLayerSet';\nimport { DashboardScene } from './DashboardScene';\nimport { DataLayerControl } from './DataLayerControl';\n\n// Renders data layer controls for a dashboard\nexport function DashboardDataLayerControls({ dashboard }: { dashboard: DashboardScene }) {\n // We are not using the default renderer of the data objects here, because the information of where the controls\n // should be rendered (`.placement`) are set on the underlying annotation layer objects.\n const state = sceneGraph.getData(dashboard).useState();\n // It is possible to render the controls for the annotation data layers in separate places using the `placement` property.\n // In case it's not specified, we are rendering the controls here (default).\n const isDefaultPlacement = (layer: SceneDataLayerProvider) => layer.state.placement === undefined;\n\n if (isDashboardDataLayerSetState(state)) {\n return (\n <>\n {state.annotationLayers.filter(isDefaultPlacement).map((layer) => (\n <DataLayerControl layer={layer} key={layer.state.key} />\n ))}\n </>\n );\n }\n\n return null;\n}\n","import { sceneGraph } from '@grafana/scenes';\nimport { DashboardLink } from '@grafana/schema';\n\nimport { DashboardLinkRenderer } from './DashboardLinkRenderer';\nimport { DashboardScene } from './DashboardScene';\n\nexport interface Props {\n links: DashboardLink[];\n dashboard: DashboardScene;\n}\n\nexport function DashboardLinksControls({ links, dashboard }: Props) {\n sceneGraph.getTimeRange(dashboard).useState();\n const uid = dashboard.state.uid;\n\n if (!links || !uid) {\n return null;\n }\n\n return (\n <>\n {links\n .filter((link) => link.placement === undefined)\n .map((link: DashboardLink, index: number) => (\n <DashboardLinkRenderer link={link} dashboardUID={uid} key={`${link.title}-$${index}`} />\n ))}\n </>\n );\n}\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2, VariableHide } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport {\n SceneObjectState,\n SceneObjectBase,\n SceneComponentProps,\n SceneTimePicker,\n SceneRefreshPicker,\n SceneDebugger,\n VariableDependencyConfig,\n sceneGraph,\n SceneObjectUrlSyncConfig,\n SceneObjectUrlValues,\n CancelActivationHandler,\n} from '@grafana/scenes';\nimport { Box, Stack, useStyles2 } from '@grafana/ui';\n\nimport { PanelEditControls } from '../panel-edit/PanelEditControls';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { DashboardControlsButton } from './DashboardControlsMenu';\nimport { DashboardDataLayerControls } from './DashboardDataLayerControls';\nimport { DashboardLinksControls } from './DashboardLinksControls';\nimport { DashboardScene } from './DashboardScene';\nimport { VariableControls } from './VariableControls';\n\nexport interface DashboardControlsState extends SceneObjectState {\n timePicker: SceneTimePicker;\n refreshPicker: SceneRefreshPicker;\n hideTimeControls?: boolean;\n hideVariableControls?: boolean;\n hideLinksControls?: boolean;\n // Hides the dashbaord-controls dropdown menu\n hideDashboardControls?: boolean;\n}\n\nexport class DashboardControls extends SceneObjectBase<DashboardControlsState> {\n static Component = DashboardControlsRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n onAnyVariableChanged: this._onAnyVariableChanged.bind(this),\n });\n\n protected _urlSync = new SceneObjectUrlSyncConfig(this, {\n keys: ['_dash.hideTimePicker', '_dash.hideVariables', '_dash.hideLinks', '_dash.hideDashboardControls'],\n });\n\n /**\n * We want the hideXX url keys to only sync one way (url => state) on init\n * We don't want these flags to be added to URL.\n */\n getUrlState() {\n return {};\n }\n\n updateFromUrl(values: SceneObjectUrlValues) {\n const { hideTimeControls, hideVariableControls, hideLinksControls, hideDashboardControls } = this.state;\n const isEnabledViaUrl = (key: string) => values[key] === 'true' || values[key] === '';\n\n // Only allow hiding, never \"unhiding\" from url\n // Because this should really only change on first init it's fine to do multiple setState here\n\n if (!hideTimeControls && isEnabledViaUrl('_dash.hideTimePicker')) {\n this.setState({ hideTimeControls: true });\n }\n\n if (!hideVariableControls && isEnabledViaUrl('_dash.hideVariables')) {\n this.setState({ hideVariableControls: true });\n }\n\n if (!hideLinksControls && isEnabledViaUrl('_dash.hideLinks')) {\n this.setState({ hideLinksControls: true });\n }\n\n if (!hideDashboardControls && isEnabledViaUrl('_dash.hideDashboardControls')) {\n this.setState({ hideDashboardControls: true });\n }\n }\n\n public constructor(state: Partial<DashboardControlsState>) {\n super({\n timePicker: state.timePicker ?? new SceneTimePicker({}),\n refreshPicker: state.refreshPicker ?? new SceneRefreshPicker({}),\n ...state,\n });\n\n this.addActivationHandler(() => {\n let refreshPickerDeactivation: CancelActivationHandler | undefined;\n\n if (this.state.hideTimeControls) {\n refreshPickerDeactivation = this.state.refreshPicker.activate();\n }\n\n return () => {\n if (refreshPickerDeactivation) {\n refreshPickerDeactivation();\n }\n };\n });\n }\n\n /**\n * Links can include all variables so we need to re-render when any change\n */\n private _onAnyVariableChanged(): void {\n const dashboard = getDashboardSceneFor(this);\n if (dashboard.state.links?.length > 0) {\n this.forceRender();\n }\n }\n\n // Dashboard controls is a separate dropdown menu at the top-right of the controls\n public hasDashboardControls(): boolean {\n const dashboard = getDashboardSceneFor(this);\n const { links } = dashboard.state;\n const hasControlMenuVariables = sceneGraph\n .getVariables(dashboard)\n ?.state.variables.some((v) => v.state.hide === VariableHide.inControlsMenu);\n const hasControlMenuLinks = links.some((link) => link.placement === 'inControlsMenu');\n\n return hasControlMenuVariables || hasControlMenuLinks;\n }\n\n public hasControls(): boolean {\n const hasVariables = sceneGraph\n .getVariables(this)\n ?.state.variables.some((v) => v.state.hide !== VariableHide.hideVariable);\n const hasAnnotations = sceneGraph.getDataLayers(this).some((d) => d.state.isEnabled && !d.state.isHidden);\n const hasLinks = getDashboardSceneFor(this).state.links?.length > 0;\n const hideLinks = this.state.hideLinksControls || !hasLinks;\n const hideVariables = this.state.hideVariableControls || (!hasAnnotations && !hasVariables);\n const hideTimePicker = this.state.hideTimeControls;\n const hideDashboardControls = this.state.hideDashboardControls || !this.hasDashboardControls();\n\n return !(hideVariables && hideLinks && hideTimePicker && hideDashboardControls);\n }\n}\n\nfunction DashboardControlsRenderer({ model }: SceneComponentProps<DashboardControls>) {\n const {\n refreshPicker,\n timePicker,\n hideTimeControls,\n hideVariableControls,\n hideLinksControls,\n hideDashboardControls,\n } = model.useState();\n const dashboard = getDashboardSceneFor(model);\n const { links, editPanel } = dashboard.useState();\n const styles = useStyles2(getStyles);\n const showDebugger = window.location.search.includes('scene-debugger');\n\n if (!model.hasControls()) {\n // To still have spacing when no controls are rendered\n\n return <Box padding={1}>{renderHiddenVariables(dashboard)}</Box>;\n }\n\n return (\n <div\n data-testid={selectors.pages.Dashboard.Controls}\n className={cx(styles.controls, editPanel && styles.controlsPanelEdit)}\n >\n <Stack grow={1} wrap={'wrap'}>\n {!hideVariableControls && (\n <>\n <VariableControls dashboard={dashboard} />\n <DashboardDataLayerControls dashboard={dashboard} />\n </>\n )}\n <Box grow={1} />\n {!hideLinksControls && !editPanel && <DashboardLinksControls links={links} dashboard={dashboard} />}\n {editPanel && <PanelEditControls panelEditor={editPanel} />}\n </Stack>\n {!hideTimeControls && (\n <div className={cx(styles.timeControls, editPanel && styles.timeControlsWrap)}>\n <timePicker.Component model={timePicker} />\n <refreshPicker.Component model={refreshPicker} />\n </div>\n )}\n {!hideDashboardControls && model.hasDashboardControls() && (\n <Stack>\n <DashboardControlsButton dashboard={dashboard} />\n </Stack>\n )}\n {showDebugger && <SceneDebugger scene={model} key={'scene-debugger'} />}\n </div>\n );\n}\n\nfunction renderHiddenVariables(dashboard: DashboardScene) {\n const { variables } = sceneGraph.getVariables(dashboard).useState();\n const renderAsHiddenVariables = variables.filter((v) => v.UNSAFE_renderAsHidden);\n if (renderAsHiddenVariables && renderAsHiddenVariables.length > 0) {\n return (\n <>\n {renderAsHiddenVariables.map((v) => (\n <v.Component model={v} key={v.state.key} />\n ))}\n </>\n );\n }\n return null;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n controls: css({\n display: 'flex',\n alignItems: 'flex-start',\n flex: '100%',\n gap: theme.spacing(1),\n padding: theme.spacing(2),\n flexDirection: 'row',\n flexWrap: 'nowrap',\n position: 'relative',\n width: '100%',\n marginLeft: 'auto',\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column-reverse',\n alignItems: 'stretch',\n },\n }),\n controlsPanelEdit: css({\n flexWrap: 'wrap-reverse',\n // In panel edit we do not need any right padding as the splitter is providing it\n paddingRight: 0,\n }),\n embedded: css({\n background: 'unset',\n position: 'unset',\n }),\n timeControls: css({\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n }),\n timeControlsWrap: css({\n flexWrap: 'wrap',\n marginLeft: 'auto',\n }),\n };\n}\n","import { CombinedRule } from 'app/types/unified-alerting';\n\nimport { useCombinedRules } from './useCombinedRuleNamespaces';\n\ninterface Options {\n dashboardUID: string | null;\n panelId: number;\n\n poll?: boolean;\n}\n\ninterface ReturnBag {\n errors: unknown[];\n rules: CombinedRule[];\n\n loading?: boolean;\n}\n\nexport function usePanelCombinedRules({ dashboardUID, panelId, poll = false }: Options): ReturnBag {\n const { result: combinedNamespaces, loading, error } = useCombinedRules(dashboardUID, panelId, poll);\n const rules = combinedNamespaces ? combinedNamespaces.flatMap((ns) => ns.groups).flatMap((group) => group.rules) : [];\n\n return {\n rules,\n errors: error ? [error] : [],\n loading,\n };\n}\n","export enum SortOrder {\n AlphaAsc = 1,\n AlphaDesc,\n Importance,\n TimeAsc,\n TimeDesc,\n}\n\nexport enum GroupMode {\n Default = 'default',\n Custom = 'custom',\n}\n\nexport enum ViewMode {\n List = 'list',\n Stat = 'stat',\n}\n\nexport interface StateFilter {\n firing: boolean;\n pending: boolean;\n inactive?: boolean; // backwards compat\n recovering: boolean;\n noData: boolean;\n normal: boolean;\n error: boolean;\n}\n\nexport interface UnifiedAlertListOptions {\n maxItems: number;\n sortOrder: SortOrder;\n dashboardAlerts: boolean;\n groupMode: GroupMode;\n groupBy: string[];\n alertName: string;\n showInstances: boolean;\n folder: { uid: string; title: string };\n stateFilter: StateFilter;\n alertInstanceLabelFilter: string;\n datasource: string;\n viewMode: ViewMode;\n showInactiveAlerts: boolean;\n}\n","import { store } from '@grafana/data';\nimport { performanceUtils, writePerformanceLog } from '@grafana/scenes';\n\n/**\n * Utility function to register a performance observer with the global tracker\n * Reduces duplication between ScenePerformanceLogger and DashboardAnalyticsAggregator\n */\nexport function registerPerformanceObserver(\n observer: performanceUtils.ScenePerformanceObserver,\n loggerName: string\n): void {\n const tracker = performanceUtils.getScenePerformanceTracker();\n tracker.addObserver(observer);\n\n writePerformanceLog(loggerName, 'Initialized globally and registered as performance observer');\n}\n\n/**\n * Chrome-specific performance.memory interface (non-standard)\n */\nexport interface PerformanceMemory {\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n jsHeapSizeLimit: number;\n}\n\n/**\n * Extended Performance interface with Chrome's memory property\n */\nexport interface PerformanceWithMemory extends Performance {\n memory?: PerformanceMemory;\n}\n\n/**\n * Type guard to check if performance has memory property (Chrome-specific)\n */\nfunction hasPerformanceMemory(perf: Performance): perf is PerformanceWithMemory {\n return 'memory' in perf;\n}\n\n/**\n * Safely get performance memory metrics (Chrome-specific, non-standard)\n * Returns zero values for browsers without performance.memory support\n */\nexport function getPerformanceMemory(): PerformanceMemory {\n if (hasPerformanceMemory(performance)) {\n return {\n totalJSHeapSize: performance.memory?.totalJSHeapSize || 0,\n usedJSHeapSize: performance.memory?.usedJSHeapSize || 0,\n jsHeapSizeLimit: performance.memory?.jsHeapSizeLimit || 0,\n };\n }\n\n // Fallback for browsers without performance.memory\n return {\n totalJSHeapSize: 0,\n usedJSHeapSize: 0,\n jsHeapSizeLimit: 0,\n };\n}\n\n/**\n * Check if performance logging is enabled via localStorage\n */\nfunction isPerformanceLoggingEnabled(): boolean {\n if (typeof window !== 'undefined') {\n return store.get('grafana.debug.sceneProfiling') === 'true';\n }\n return false;\n}\n\n/**\n * Write a collapsible performance log group (follows writePerformanceLog pattern)\n */\nexport function writePerformanceGroupStart(logger: string, message: string): void {\n if (isPerformanceLoggingEnabled()) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(`${logger}: ${message}`);\n }\n}\n\n/**\n * Write a performance log within a group (follows writePerformanceLog pattern)\n */\nexport function writePerformanceGroupLog(logger: string, message: string, data?: unknown): void {\n if (isPerformanceLoggingEnabled()) {\n if (data) {\n // eslint-disable-next-line no-console\n console.log(message, data);\n } else {\n // eslint-disable-next-line no-console\n console.log(message);\n }\n }\n}\n\n/**\n * End a performance log group (follows writePerformanceLog pattern)\n */\nexport function writePerformanceGroupEnd(): void {\n if (isPerformanceLoggingEnabled()) {\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n}\n\n/**\n * Safely creates a performance mark, ignoring errors if the Performance API is not available.\n */\nexport function createPerformanceMark(name: string, timestamp?: number): void {\n try {\n if (typeof performance !== 'undefined' && performance.mark) {\n if (timestamp !== undefined) {\n performance.mark(name, { startTime: timestamp });\n } else {\n performance.mark(name);\n }\n }\n } catch (error) {\n console.error(`❌ Failed to create performance mark: ${name}`, { timestamp, error });\n }\n}\n\n/**\n * Safely creates a performance measure, ignoring errors if the Performance API is not available.\n */\nexport function createPerformanceMeasure(name: string, startMark: string, endMark?: string): void {\n try {\n if (typeof performance !== 'undefined' && performance.measure) {\n if (endMark) {\n performance.measure(name, startMark, endMark);\n } else {\n performance.measure(name, startMark);\n }\n }\n } catch (error) {\n console.error(`❌ Failed to create performance measure: ${name}`, { startMark, endMark, error });\n }\n}\n","import { Panel } from '@grafana/schema';\n\nimport { getDashboardSrv } from '../../services/DashboardSrv';\n\nimport { GenAIButton } from './GenAIButton';\nimport { EventTrackingSrc } from './tracking';\nimport { Message, Role, getFilteredPanelString } from './utils';\n\ninterface GenAIPanelDescriptionButtonProps {\n onGenerate: (description: string) => void;\n panel: Panel;\n}\n\nconst PANEL_DESCRIPTION_CHAR_LIMIT = 200;\n\nconst DESCRIPTION_GENERATION_STANDARD_PROMPT =\n 'You are an expert in creating Grafana Panels.\\n' +\n 'You will be given the title and description of the dashboard the panel is in as well as the JSON for the panel.\\n' +\n 'Your goal is to write a descriptive and concise panel description.\\n' +\n 'The panel description is meant to explain the purpose of the panel, not just its attributes.\\n' +\n 'Do not refer to the panel; simply describe its purpose.\\n' +\n 'There should be no numbers in the description except for thresholds.\\n' +\n `The description should be, at most, ${PANEL_DESCRIPTION_CHAR_LIMIT} characters.`;\n\nexport const GenAIPanelDescriptionButton = ({ onGenerate, panel }: GenAIPanelDescriptionButtonProps) => {\n return (\n <GenAIButton\n messages={() => getMessages(panel)}\n onGenerate={onGenerate}\n eventTrackingSrc={EventTrackingSrc.panelDescription}\n toggleTipTitle={'Improve your panel description'}\n />\n );\n};\n\nfunction getMessages(panel: Panel): Message[] {\n const dashboard = getDashboardSrv().getCurrent()!;\n const panelString = getFilteredPanelString(panel);\n\n return [\n {\n content: DESCRIPTION_GENERATION_STANDARD_PROMPT,\n role: Role.system,\n },\n {\n content:\n `The panel is part of a dashboard with the title: ${dashboard.title}\\n` +\n `The panel is part of a dashboard with the description: ${dashboard.description}\\n` +\n `This is the JSON which defines the panel: ${panelString}`,\n role: Role.user,\n },\n ];\n}\n","import { locationUtil } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { sceneGraph, VizPanel } from '@grafana/scenes';\nimport { contextSrv } from 'app/core/core';\nimport { getExploreUrl } from 'app/core/utils/explore';\n\nimport { getQueryRunnerFor } from './utils';\n\nexport function getViewPanelUrl(vizPanel: VizPanel) {\n return locationUtil.getUrlForPartial(locationService.getLocation(), {\n viewPanel: vizPanel.getPathId(),\n editPanel: undefined,\n });\n}\n\nexport function getEditPanelUrl(panelId: number) {\n return locationUtil.getUrlForPartial(locationService.getLocation(), { editPanel: panelId, viewPanel: undefined });\n}\n\nexport function tryGetExploreUrlForPanel(vizPanel: VizPanel): Promise<string | undefined> {\n //const dashboard = panel.getRoot();\n const panelPlugin = vizPanel.getPlugin();\n const queryRunner = getQueryRunnerFor(vizPanel);\n\n if (!contextSrv.hasAccessToExplore() || panelPlugin?.meta.skipDataQuery || !queryRunner) {\n return Promise.resolve(undefined);\n }\n\n const timeRange = sceneGraph.getTimeRange(vizPanel);\n\n return getExploreUrl({\n queries: queryRunner.state.queries,\n dsRef: queryRunner.state.datasource,\n timeRange: timeRange.state.value,\n scopedVars: { __sceneObject: { value: vizPanel } },\n adhocFilters: queryRunner.state.data?.request?.filters,\n });\n}\n","import React from 'react';\n\nimport {\n ComponentTypeWithExtensionMeta,\n type PluginExtension,\n type PluginExtensionComponent,\n type PluginExtensionLink,\n PluginExtensionTypes,\n} from '@grafana/data';\n\nexport function isPluginExtensionLink(extension: PluginExtension | undefined): extension is PluginExtensionLink {\n if (!extension) {\n return false;\n }\n return extension.type === PluginExtensionTypes.link && ('path' in extension || 'onClick' in extension);\n}\n\nexport function isPluginExtensionComponent(\n extension: PluginExtension | undefined\n): extension is PluginExtensionComponent {\n if (!extension) {\n return false;\n }\n return extension.type === PluginExtensionTypes.component && 'component' in extension;\n}\n\nexport function getLimitedComponentsToRender<Props extends {}>({\n props,\n components,\n limit,\n pluginId,\n}: {\n props: Props;\n components: Array<ComponentTypeWithExtensionMeta<Props>>;\n limit?: number;\n pluginId?: string | string[] | RegExp;\n}) {\n if (!components.length) {\n return null;\n }\n\n const renderedComponents: Array<ComponentTypeWithExtensionMeta<Props>> = [];\n\n for (const Component of components) {\n const { meta } = Component;\n\n if (pluginId && typeof pluginId === 'string' && pluginId !== meta.pluginId) {\n continue;\n }\n\n if (pluginId && Array.isArray(pluginId) && !pluginId.includes(meta.pluginId)) {\n continue;\n }\n\n if (pluginId instanceof RegExp && !pluginId.test(meta.pluginId)) {\n continue;\n }\n\n // If no limit is provided, return all components\n if (limit === undefined) {\n renderedComponents.push(Component);\n continue;\n }\n\n // If a component does not render anything, do not count it in the limit\n if (React.createElement<Props>(Component, props) !== null) {\n renderedComponents.push(Component);\n }\n\n // Stop if we've reached the limit\n if (renderedComponents.length >= limit) {\n break;\n }\n }\n\n return renderedComponents;\n}\n\nexport function renderLimitedComponents<Props extends {}>({\n props,\n components,\n limit,\n pluginId,\n}: {\n props: Props;\n components: Array<ComponentTypeWithExtensionMeta<Props>>;\n limit?: number;\n pluginId?: string | string[] | RegExp;\n}) {\n const limitedComponents = getLimitedComponentsToRender({ props, components, limit, pluginId });\n\n if (!limitedComponents?.length) {\n return null;\n }\n\n return (\n <>\n {limitedComponents.map((Component) => (\n <Component key={Component.meta.id} {...props} />\n ))}\n </>\n );\n}\n","import React from 'react';\n\nimport { CoreApp } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneTimeRangeLike, VizPanel } from '@grafana/scenes';\nimport { DataLinksInlineEditor, Input, TextArea, Switch } from '@grafana/ui';\nimport { GenAIPanelDescriptionButton } from 'app/features/dashboard/components/GenAI/GenAIPanelDescriptionButton';\nimport { GenAIPanelTitleButton } from 'app/features/dashboard/components/GenAI/GenAIPanelTitleButton';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport { getPanelLinksVariableSuggestions } from 'app/features/panel/panellinks/link_srv';\n\nimport { dashboardEditActions } from '../edit-pane/shared';\nimport { VizPanelLinks } from '../scene/PanelLinks';\nimport { useEditPaneInputAutoFocus } from '../scene/layouts-shared/utils';\nimport { PanelTimeRange } from '../scene/panel-timerange/PanelTimeRange';\nimport { isDashboardLayoutItem } from '../scene/types/DashboardLayoutItem';\nimport { vizPanelToPanel, transformSceneToSaveModel } from '../serialization/transformSceneToSaveModel';\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nexport function getPanelFrameOptions(panel: VizPanel): OptionsPaneCategoryDescriptor {\n const descriptor = new OptionsPaneCategoryDescriptor({\n title: t('dashboard-scene.get-panel-frame-options.descriptor.title.panel-options', 'Panel options'),\n id: 'Panel options',\n isOpenDefault: true,\n });\n\n const panelLinksObject = dashboardSceneGraph.getPanelLinks(panel);\n const links = panelLinksObject?.state.rawLinks ?? [];\n const dashboard = getDashboardSceneFor(panel);\n const layoutElement = panel.parent!;\n\n descriptor\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard-scene.get-panel-frame-options.title.title', 'Title'),\n id: 'panel-frame-options-title',\n value: panel.state.title,\n popularRank: 1,\n render: function renderTitle(descriptor) {\n return <PanelFrameTitleInput id={descriptor.props.id} panel={panel} />;\n },\n addon: config.featureToggles.dashgpt && (\n <GenAIPanelTitleButton\n onGenerate={(title) => editPanelTitleAction(panel, title)}\n panel={vizPanelToPanel(panel)}\n dashboard={transformSceneToSaveModel(dashboard)}\n />\n ),\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard-scene.get-panel-frame-options.title.description', 'Description'),\n id: 'panel-frame-options-description',\n value: panel.state.description,\n render: function renderDescription(descriptor) {\n return <PanelDescriptionTextArea id={descriptor.props.id} panel={panel} />;\n },\n addon: config.featureToggles.dashgpt && (\n <GenAIPanelDescriptionButton\n onGenerate={(description) => panel.setState({ description })}\n panel={vizPanelToPanel(panel)}\n />\n ),\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard-scene.get-panel-frame-options.title.transparent-background', 'Transparent background'),\n id: 'panel-frame-options-transparent-bg',\n render: function renderTransparent(descriptor) {\n return <PanelBackgroundSwitch id={descriptor.props.id} panel={panel} />;\n },\n })\n )\n .addCategory(\n new OptionsPaneCategoryDescriptor({\n title: t('dashboard-scene.get-panel-frame-options.title.panel-links', 'Panel links'),\n id: 'Panel links',\n isOpenDefault: false,\n itemsCount: links?.length,\n }).addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard-scene.get-panel-frame-options.title.panel-links', 'Panel links'),\n id: 'panel-frame-options-panel-links',\n render: () => <ScenePanelLinksEditor panelLinks={panelLinksObject ?? undefined} />,\n })\n )\n );\n\n if (isDashboardLayoutItem(layoutElement)) {\n layoutElement.getOptions?.().forEach((category) => descriptor.addCategory(category));\n }\n\n return descriptor;\n}\n\ninterface ScenePanelLinksEditorProps {\n panelLinks?: VizPanelLinks;\n}\n\nfunction ScenePanelLinksEditor({ panelLinks }: ScenePanelLinksEditorProps) {\n const { rawLinks: links } = panelLinks ? panelLinks.useState() : { rawLinks: [] };\n\n return (\n <DataLinksInlineEditor\n links={links}\n onChange={(links) => panelLinks?.setState({ rawLinks: links })}\n getSuggestions={getPanelLinksVariableSuggestions}\n data={[]}\n />\n );\n}\n\nexport function PanelFrameTitleInput({\n panel,\n isNewElement,\n id,\n}: {\n panel: VizPanel;\n isNewElement?: boolean;\n id?: string;\n}) {\n const { title } = panel.useState();\n const notInPanelEdit = panel.getPanelContext().app !== CoreApp.PanelEditor;\n const [prevTitle, setPrevTitle] = React.useState(panel.state.title);\n\n let ref = useEditPaneInputAutoFocus({\n autoFocus: notInPanelEdit && isNewElement,\n });\n\n return (\n <Input\n ref={ref}\n data-testid={selectors.components.PanelEditor.OptionsPane.fieldInput('Title')}\n id={id}\n value={title}\n onFocus={() => setPrevTitle(title)}\n onBlur={() => editPanelTitleAction(panel, title, prevTitle)}\n // The full action (that can be undone) is done by setPanelTitle,\n // But to see changes in the input field, canvas and outline we change the real value here\n onChange={(e) => updatePanelTitleState(panel, e.currentTarget.value)}\n />\n );\n}\n\nexport function PanelDescriptionTextArea({ panel, id }: { panel: VizPanel; id?: string }) {\n const { description } = panel.useState();\n const [prevDescription, setPrevDescription] = React.useState(panel.state.description);\n\n return (\n <TextArea\n id={id}\n value={description}\n onChange={(evt) => panel.setState({ description: evt.currentTarget.value })}\n onFocus={() => setPrevDescription(panel.state.description)}\n onBlur={() => {\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.panel-description', 'Change panel description'),\n source: panel,\n perform: () => panel.setState({ description: description }),\n undo: () => panel.setState({ description: prevDescription }),\n });\n }}\n />\n );\n}\n\nexport function PanelBackgroundSwitch({ panel, id }: { panel: VizPanel; id?: string }) {\n const { displayMode = 'default' } = panel.useState();\n\n const onChange = () => {\n const newDisplayMode = displayMode === 'default' ? 'transparent' : 'default';\n\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.panel-background', 'Change panel background'),\n source: panel,\n perform: () => panel.setState({ displayMode: newDisplayMode }),\n undo: () => panel.setState({ displayMode: displayMode }),\n });\n };\n\n return <Switch value={displayMode === 'transparent'} id={id} onChange={onChange} />;\n}\n\nfunction updatePanelTitleState(panel: VizPanel, title: string) {\n panel.setState({ title, hoverHeader: getUpdatedHoverHeader(title, panel.state.$timeRange) });\n}\n\nexport function editPanelTitleAction(panel: VizPanel, title: string, prevTitle: string = panel.state.title) {\n if (title === prevTitle) {\n return;\n }\n\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.panel-title', 'Change panel title'),\n source: panel,\n perform: () => updatePanelTitleState(panel, title),\n undo: () => updatePanelTitleState(panel, prevTitle),\n });\n}\n\nexport function getUpdatedHoverHeader(title: string, timeRange: SceneTimeRangeLike | undefined): boolean {\n if (title !== '') {\n return false;\n }\n\n if (timeRange instanceof PanelTimeRange && !timeRange.state.hideTimeOverride) {\n if (timeRange.state.timeFrom || timeRange.state.timeShift) {\n return false;\n }\n }\n\n return true;\n}\n","import { AppEvents } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { BackendSrvRequest } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport { appEvents } from 'app/core/app_events';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\nimport { getDashboardAPI } from 'app/features/dashboard/api/dashboard_api';\nimport { DashboardMeta } from 'app/types/dashboard';\n\nimport { RemovePanelEvent } from '../../../types/events';\nimport { DashboardModel } from '../state/DashboardModel';\nimport { removePanel } from '../utils/panel';\n\nexport interface SaveDashboardOptions {\n /** The complete dashboard model. If `dashboard.id` is not set a new dashboard will be created. */\n dashboard: DashboardModel;\n /** Set a commit message for the version history. */\n message?: string;\n /** The UID of the folder to save the dashboard in. Overrides `folderId`. */\n folderUid?: string;\n /** Set to `true` if you want to overwrite an existing dashboard with a given dashboard UID. */\n overwrite?: boolean;\n /** Set the dashboard refresh interval.\n * If this is lower than the minimum refresh interval, Grafana will ignore it and will enforce the minimum refresh interval. */\n refresh?: string;\n}\n\nexport class DashboardSrv {\n dashboard?: DashboardModel;\n\n constructor() {\n appEvents.subscribe(RemovePanelEvent, (e) => this.onRemovePanel(e.payload));\n }\n\n create(dashboard: Dashboard, meta: DashboardMeta) {\n return new DashboardModel(dashboard, meta);\n }\n\n setCurrent(dashboard: DashboardModel | undefined) {\n this.dashboard = dashboard;\n }\n\n getCurrent(): DashboardModel | undefined {\n return this.dashboard;\n }\n\n onRemovePanel = (panelId: number) => {\n const dashboard = this.getCurrent();\n if (dashboard) {\n removePanel(dashboard, dashboard.getPanelById(panelId)!, true);\n }\n };\n\n saveJSONDashboard(json: string) {\n const parsedJson = JSON.parse(json);\n return getDashboardAPI().saveDashboard({\n dashboard: parsedJson,\n folderUid: this.dashboard?.meta.folderUid || parsedJson.folderUid,\n message: t('dashboard.dashboard-srv.message.edit-dashboard-json', 'Edit Dashboard JSON'),\n k8s: this.dashboard?.meta.k8s,\n });\n }\n\n saveDashboard(\n data: SaveDashboardOptions,\n requestOptions?: Pick<BackendSrvRequest, 'showErrorAlert' | 'showSuccessAlert'>\n ) {\n return getDashboardAPI().saveDashboard({\n message: data.message,\n folderUid: data.folderUid,\n dashboard: data.dashboard.getSaveModelClone(),\n showErrorAlert: requestOptions?.showErrorAlert,\n });\n }\n\n starDashboard(dashboardUid: string, isStarred: boolean) {\n const backendSrv = getBackendSrv();\n\n const request = {\n showSuccessAlert: false,\n url: '/api/user/stars/dashboard/uid/' + dashboardUid,\n method: isStarred ? 'DELETE' : 'POST',\n };\n\n return backendSrv.request(request).then(() => {\n const newIsStarred = !isStarred;\n\n if (this.dashboard?.uid === dashboardUid) {\n this.dashboard.meta.isStarred = newIsStarred;\n }\n\n const message = newIsStarred\n ? t('notifications.starred-dashboard', 'Dashboard starred')\n : t('notifications.unstarred-dashboard', 'Dashboard unstarred');\n\n appEvents.emit(AppEvents.alertSuccess, [message]);\n\n return newIsStarred;\n });\n }\n}\n\n//\n// Code below is to export the service to React components\n//\n\nlet singletonInstance: DashboardSrv;\n\nexport function setDashboardSrv(instance: DashboardSrv) {\n singletonInstance = instance;\n}\n\nexport function getDashboardSrv(): DashboardSrv {\n if (!singletonInstance) {\n singletonInstance = new DashboardSrv();\n }\n return singletonInstance;\n}\n","import * as React from 'react';\n\nimport { PluginContext } from '@grafana/data';\n\ninterface PluginErrorBoundaryProps {\n children: React.ReactNode;\n fallback?: React.ComponentType<{ error: Error | null; errorInfo: React.ErrorInfo | null }>;\n onError?: (error: Error, info: React.ErrorInfo) => void;\n}\n\ninterface PluginErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorInfo: React.ErrorInfo | null;\n}\n\nexport class PluginErrorBoundary extends React.Component<PluginErrorBoundaryProps, PluginErrorBoundaryState> {\n static contextType = PluginContext;\n\n declare context: React.ContextType<typeof PluginContext>;\n\n constructor(props: PluginErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null, errorInfo: null };\n }\n\n static getDerivedStateFromError(error: Error): PluginErrorBoundaryState {\n return { hasError: true, error: error, errorInfo: null };\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n if (this.props.onError) {\n this.props.onError(error, info);\n } else {\n console.error(`Plugin \"${this.context?.meta.id}\" failed to load:`, error, info);\n }\n\n this.setState({ error, errorInfo: info });\n }\n\n render() {\n const Fallback = this.props.fallback;\n if (this.state.hasError) {\n return Fallback ? <Fallback error={this.state.error} errorInfo={this.state.errorInfo} /> : null;\n }\n\n return this.props.children;\n }\n}\n","/**\n * Name of the custom annotation label used in k8s APIs for us to discern if a given entity was provisioned\n * @deprecated Use {@link K8sAnnotations.Provenance} instead\n * */\nexport const PROVENANCE_ANNOTATION = 'grafana.com/provenance';\n\n/** Value of {@link PROVENANCE_ANNOTATION} given for entities that were not provisioned */\nexport const PROVENANCE_NONE = 'none';\n\nexport enum K8sAnnotations {\n Provenance = 'grafana.com/provenance',\n\n /** Annotation key that indicates how many notification policy routes are using this entity */\n InUseRoutes = 'grafana.com/inUse/routes',\n /** Annotation key that indicates how many alert rules are using this entity */\n InUseRules = 'grafana.com/inUse/rules',\n\n /** Annotation key that indicates that the calling user is able to write (edit) this entity */\n AccessWrite = 'grafana.com/access/canWrite',\n /** Annotation key that indicates that the calling user is able to admin the permissions of this entity */\n AccessAdmin = 'grafana.com/access/canAdmin',\n /** Annotation key that indicates that the calling user is able to delete this entity */\n AccessDelete = 'grafana.com/access/canDelete',\n}\n\n/**\n * Special name that the K8S API expects to see/user for the root route in notification policies\n */\nexport const ROOT_ROUTE_NAME = 'user-defined';\n","// Based on work https://github.com/mohsen1/json-formatter-js\n// License MIT, Copyright (c) 2015 Mohsen Azimi\n\n/*\n * Escapes `\"` characters from string\n */\nexport function formatString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n}\n\n/*\n * Determines if a value is an object\n */\nexport function isObject(value: unknown): boolean {\n const type = typeof value;\n return !!value && type === 'object';\n}\n\n/*\n * Gets constructor name of an object.\n * From http://stackoverflow.com/a/332429\n *\n */\nexport function getObjectName(object: object): string {\n if (object === undefined) {\n return '';\n }\n if (object === null) {\n return 'Object';\n }\n if (typeof object === 'object' && !object.constructor) {\n return 'Object';\n }\n\n const funcNameRegex = /function ([^(]*)/;\n const results = funcNameRegex.exec(object.constructor.toString());\n if (results && results.length > 1) {\n return results[1];\n } else {\n return '';\n }\n}\n\n/*\n * Gets type of an object. Returns \"null\" for null objects\n */\nexport function getType(object: object): string {\n if (object === null) {\n return 'null';\n }\n return typeof object;\n}\n\n/*\n * Generates inline preview for a JavaScript object based on a value\n */\nexport function getValuePreview(object: object, value: string): string {\n const type = getType(object);\n\n if (type === 'null' || type === 'undefined') {\n return type;\n }\n\n if (type === 'string') {\n value = '\"' + formatString(value) + '\"';\n }\n if (type === 'function') {\n // Remove content of the function\n return (\n object\n .toString()\n .replace(/[\\r\\n]/g, '')\n .replace(/\\{.*\\}/, '') + '{…}'\n );\n }\n return value;\n}\n\n/*\n * Generates inline preview for a JavaScript object\n */\nlet value = '';\nexport function getPreview(obj: object): string {\n if (isObject(obj)) {\n value = getObjectName(obj);\n if (Array.isArray(obj)) {\n value += '[' + obj.length + ']';\n }\n } else {\n value = getValuePreview(obj, obj.toString());\n }\n return value;\n}\n\n/*\n * Generates a prefixed CSS class name\n */\nexport function cssClass(className: string): string {\n return `json-formatter-${className}`;\n}\n\n/*\n * Creates a new DOM element with given type and class\n * TODO: move me to helpers\n */\nexport function createElement<T extends keyof HTMLElementTagNameMap>(\n type: T,\n className?: string,\n content?: Element | string\n) {\n const el = document.createElement(type);\n if (className) {\n el.classList.add(cssClass(className));\n }\n if (content !== undefined) {\n if (content instanceof Node) {\n el.appendChild(content);\n } else {\n el.appendChild(document.createTextNode(String(content)));\n }\n }\n return el;\n}\n","// Based on work https://github.com/mohsen1/json-formatter-js\n// License MIT, Copyright (c) 2015 Mohsen Azimi\n\nimport { isNumber } from 'lodash';\n\nimport { isObject, getObjectName, getType, getValuePreview, cssClass, createElement } from './helpers';\n\nconst DATE_STRING_REGEX =\n /(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?=[012])\\d:[0-5])\\d\\s*[ap]m)?$/;\nconst PARTIAL_DATE_REGEX = /\\d{2}:\\d{2}:\\d{2} GMT-\\d{4}/;\nconst JSON_DATE_REGEX = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/;\n\n// When toggling, don't animated removal or addition of more than a few items\nconst MAX_ANIMATED_TOGGLE_ITEMS = 10;\n\nconst requestAnimationFrame =\n (typeof window !== 'undefined' && window.requestAnimationFrame) ||\n ((cb: () => void) => {\n cb();\n return 0;\n });\n\nexport interface JsonExplorerConfig {\n animateOpen?: boolean;\n animateClose?: boolean;\n theme?: string;\n}\n\nconst _defaultConfig: JsonExplorerConfig = {\n animateOpen: true,\n animateClose: true,\n};\n\n/**\n * @class JsonExplorer\n *\n * JsonExplorer allows you to render JSON objects in HTML with a\n * **collapsible** navigation.\n */\nexport class JsonExplorer {\n // Hold the open state after the toggler is used\n private _isOpen: boolean | null = null;\n\n // A reference to the element that we render to\n private element: HTMLDivElement | null = null;\n\n private skipChildren = false;\n\n /**\n * @param {object} json The JSON object you want to render. It has to be an\n * object or array. Do NOT pass raw JSON string.\n *\n * @param {number} [open=1] his number indicates up to how many levels the\n * rendered tree should expand. Set it to `0` to make the whole tree collapsed\n * or set it to `Infinity` to expand the tree deeply\n *\n * @param {object} [config=defaultConfig] -\n * defaultConfig = {\n * hoverPreviewEnabled: false,\n * hoverPreviewArrayCount: 100,\n * hoverPreviewFieldCount: 5\n * }\n *\n * Available configurations:\n * #####Hover Preview\n * * `hoverPreviewEnabled`: enable preview on hover\n * * `hoverPreviewArrayCount`: number of array items to show in preview Any\n * array larger than this number will be shown as `Array[XXX]` where `XXX`\n * is length of the array.\n * * `hoverPreviewFieldCount`: number of object properties to show for object\n * preview. Any object with more properties that thin number will be\n * truncated.\n *\n * @param {string} [key=undefined] The key that this object in its parent\n * context\n */\n constructor(\n public json: any,\n private open = 1,\n private config: JsonExplorerConfig = _defaultConfig,\n private key?: string\n ) {}\n\n /*\n * is formatter open?\n */\n private get isOpen(): boolean {\n if (this._isOpen !== null) {\n return this._isOpen;\n } else {\n return this.open > 0;\n }\n }\n\n /*\n * set open state (from toggler)\n */\n private set isOpen(value: boolean) {\n this._isOpen = value;\n }\n\n /*\n * is this a date string?\n */\n private get isDate(): boolean {\n return (\n this.type === 'string' &&\n (DATE_STRING_REGEX.test(this.json) || JSON_DATE_REGEX.test(this.json) || PARTIAL_DATE_REGEX.test(this.json))\n );\n }\n\n /*\n * is this a URL string?\n */\n private get isUrl(): boolean {\n return this.type === 'string' && this.json.indexOf('http') === 0;\n }\n\n /*\n * is this an array?\n */\n private get isArray(): boolean {\n return Array.isArray(this.json);\n }\n\n /*\n * is this an object?\n * Note: In this context arrays are object as well\n */\n private get isObject(): boolean {\n return isObject(this.json);\n }\n\n /*\n * is this an empty object with no properties?\n */\n private get isEmptyObject(): boolean {\n return !this.keys.length && !this.isArray;\n }\n\n /*\n * is this an empty object or array?\n */\n private get isEmpty(): boolean {\n return this.isEmptyObject || (this.keys && !this.keys.length && this.isArray);\n }\n\n /*\n * did we receive a key argument?\n * This means that the formatter was called as a sub formatter of a parent formatter\n */\n private get hasKey(): boolean {\n return typeof this.key !== 'undefined';\n }\n\n /*\n * if this is an object, get constructor function name\n */\n private get constructorName(): string {\n return getObjectName(this.json);\n }\n\n /*\n * get type of this value\n * Possible values: all JavaScript primitive types plus \"array\" and \"null\"\n */\n private get type(): string {\n return getType(this.json);\n }\n\n /*\n * get object keys\n * If there is an empty key we pad it wit quotes to make it visible\n */\n private get keys(): string[] {\n if (this.isObject) {\n return Object.keys(this.json).map((key) => (key ? key : '\"\"'));\n } else {\n return [];\n }\n }\n\n /**\n * Toggles `isOpen` state\n *\n */\n toggleOpen() {\n this.isOpen = !this.isOpen;\n\n if (this.element) {\n if (this.isOpen) {\n this.appendChildren(this.config.animateOpen);\n } else {\n this.removeChildren(this.config.animateClose);\n }\n this.element.classList.toggle(cssClass('open'));\n }\n }\n\n /**\n * Open all children up to a certain depth.\n * Allows actions such as expand all/collapse all\n *\n */\n openAtDepth(depth = 1) {\n if (depth < 0) {\n return;\n }\n\n this.open = depth;\n this.isOpen = depth !== 0;\n\n if (this.element) {\n this.removeChildren(false);\n\n if (depth === 0) {\n this.element.classList.remove(cssClass('open'));\n } else {\n this.appendChildren(this.config.animateOpen);\n this.element.classList.add(cssClass('open'));\n }\n }\n }\n\n isNumberArray() {\n return this.json.length > 0 && this.json.length < 4 && (isNumber(this.json[0]) || isNumber(this.json[1]));\n }\n\n renderArray() {\n const arrayWrapperSpan = createElement('span');\n arrayWrapperSpan.appendChild(createElement('span', 'bracket', '['));\n\n // some pretty handling of number arrays\n if (this.isNumberArray()) {\n this.json.forEach((val: any, index: number) => {\n if (index > 0) {\n arrayWrapperSpan.appendChild(createElement('span', 'array-comma', ','));\n }\n arrayWrapperSpan.appendChild(createElement('span', 'number', val));\n });\n this.skipChildren = true;\n } else {\n arrayWrapperSpan.appendChild(createElement('span', 'number', this.json.length));\n }\n\n arrayWrapperSpan.appendChild(createElement('span', 'bracket', ']'));\n return arrayWrapperSpan;\n }\n\n /**\n * Renders an HTML element and installs event listeners\n *\n * @returns {HTMLDivElement}\n */\n render(skipRoot = false): HTMLDivElement {\n // construct the root element and assign it to this.element\n this.element = createElement('div', 'row');\n\n // construct the toggler link\n const togglerLink = createElement('a', 'toggler-link');\n const togglerIcon = createElement('span', 'toggler');\n\n // if this is an object we need a wrapper span (toggler)\n if (this.isObject) {\n togglerLink.appendChild(togglerIcon);\n }\n\n // if this is child of a parent formatter we need to append the key\n if (this.hasKey) {\n togglerLink.appendChild(createElement('span', 'key', `${this.key}:`));\n }\n\n // Value for objects and arrays\n if (this.isObject) {\n // construct the value holder element\n const value = createElement('span', 'value');\n\n // we need a wrapper span for objects\n const objectWrapperSpan = createElement('span');\n\n // get constructor name and append it to wrapper span\n const constructorName = createElement('span', 'constructor-name', this.constructorName);\n objectWrapperSpan.appendChild(constructorName);\n\n // if it's an array append the array specific elements like brackets and length\n if (this.isArray) {\n const arrayWrapperSpan = this.renderArray();\n objectWrapperSpan.appendChild(arrayWrapperSpan);\n }\n\n // append object wrapper span to toggler link\n value.appendChild(objectWrapperSpan);\n togglerLink.appendChild(value);\n // Primitive values\n } else {\n // make a value holder element\n const value = this.isUrl ? createElement('a') : createElement('span');\n\n // add type and other type related CSS classes\n value.classList.add(cssClass(this.type));\n if (this.isDate) {\n value.classList.add(cssClass('date'));\n }\n if (this.isUrl) {\n value.classList.add(cssClass('url'));\n value.setAttribute('href', this.json);\n }\n\n // Append value content to value element\n const valuePreview = getValuePreview(this.json, this.json);\n value.appendChild(document.createTextNode(valuePreview));\n\n // append the value element to toggler link\n togglerLink.appendChild(value);\n }\n\n // construct a children element\n const children = createElement('div', 'children');\n\n // set CSS classes for children\n if (this.isObject) {\n children.classList.add(cssClass('object'));\n }\n if (this.isArray) {\n children.classList.add(cssClass('array'));\n }\n if (this.isEmpty) {\n children.classList.add(cssClass('empty'));\n }\n\n // set CSS classes for root element\n if (this.config && this.config.theme) {\n this.element.classList.add(cssClass(this.config.theme));\n }\n if (this.isOpen) {\n this.element.classList.add(cssClass('open'));\n }\n\n // append toggler and children elements to root element\n if (!skipRoot) {\n this.element.appendChild(togglerLink);\n }\n\n if (!this.skipChildren) {\n this.element.appendChild(children);\n } else {\n // remove togglerIcon\n togglerLink.removeChild(togglerIcon);\n }\n\n // if formatter is set to be open call appendChildren\n if (this.isObject && this.isOpen) {\n this.appendChildren();\n }\n\n // add event listener for toggling\n if (this.isObject) {\n togglerLink.addEventListener('click', this.toggleOpen.bind(this));\n }\n\n return this.element;\n }\n\n /**\n * Appends all the children to children element\n * Animated option is used when user triggers this via a click\n */\n appendChildren(animated = false) {\n const children = this.element && this.element.querySelector(`div.${cssClass('children')}`);\n\n if (!children || this.isEmpty) {\n return;\n }\n\n if (animated) {\n let index = 0;\n const addAChild = () => {\n const key = this.keys[index];\n const formatter = new JsonExplorer(this.json[key], this.open - 1, this.config, key);\n children.appendChild(formatter.render());\n\n index += 1;\n\n if (index < this.keys.length) {\n if (index > MAX_ANIMATED_TOGGLE_ITEMS) {\n addAChild();\n } else {\n requestAnimationFrame(addAChild);\n }\n }\n };\n\n requestAnimationFrame(addAChild);\n } else {\n this.keys.forEach((key) => {\n const formatter = new JsonExplorer(this.json[key], this.open - 1, this.config, key);\n children.appendChild(formatter.render());\n });\n }\n }\n\n /**\n * Removes all the children from children element\n * Animated option is used when user triggers this via a click\n */\n removeChildren(animated = false) {\n const childrenElement = this.element && this.element.querySelector<HTMLDivElement>(`div.${cssClass('children')}`);\n\n if (animated) {\n let childrenRemoved = 0;\n const removeAChild = () => {\n if (childrenElement && childrenElement.children.length) {\n childrenElement.removeChild(childrenElement.children[0]);\n childrenRemoved += 1;\n if (childrenRemoved > MAX_ANIMATED_TOGGLE_ITEMS) {\n removeAChild();\n } else {\n requestAnimationFrame(removeAChild);\n }\n }\n };\n requestAnimationFrame(removeAChild);\n } else {\n if (childrenElement) {\n childrenElement.innerHTML = '';\n }\n }\n }\n}\n","import { DropEvent, FileRejection } from 'react-dropzone';\n\nimport { DataFrame, DataFrameJSON, dataFrameToJSON } from '@grafana/data';\nimport appEvents from 'app/core/app_events';\nimport { GRAFANA_DATASOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { filesToDataframes } from 'app/features/dataframe-import/utils';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport { defaultFileUploadQuery, GrafanaQuery, GrafanaQueryType } from './types';\n\n/**\n * Will show a confirm modal if the current panel does not have a snapshot query.\n * If the confirm modal is shown, and the user aborts the promise will resolve with a false value,\n * otherwise it will resolve with a true value.\n */\nexport function onUpdatePanelSnapshotData(panel: PanelModel, frames: DataFrame[]): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n if (panel.datasource?.uid === GRAFANA_DATASOURCE_NAME) {\n updateSnapshotData(frames, panel);\n resolve(true);\n return;\n }\n\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: 'Change to panel embedded data',\n text: 'If you want to change the data shown in this panel Grafana will need to remove the panels current query and replace it with a snapshot of the current data. This enables you to edit the data.',\n yesText: 'Continue',\n icon: 'pen',\n onConfirm: () => {\n updateSnapshotData(frames, panel);\n resolve(true);\n },\n onDismiss: () => {\n resolve(false);\n },\n })\n );\n });\n}\n\nfunction updateSnapshotData(frames: DataFrame[], panel: PanelModel) {\n const snapshot: DataFrameJSON[] = frames.map((f) => dataFrameToJSON(f));\n\n const query: GrafanaQuery = {\n refId: 'A',\n queryType: GrafanaQueryType.Snapshot,\n snapshot,\n datasource: { uid: GRAFANA_DATASOURCE_NAME },\n };\n\n panel.updateQueries({\n dataSource: { uid: GRAFANA_DATASOURCE_NAME },\n queries: [query],\n });\n\n panel.refresh();\n}\n\nexport function getFileDropToQueryHandler(\n onFileLoaded: (query: GrafanaQuery, fileRejections: FileRejection[]) => void\n) {\n return (acceptedFiles: File[], fileRejections: FileRejection[], event: DropEvent) => {\n filesToDataframes(acceptedFiles).subscribe(async (next) => {\n const snapshot: DataFrameJSON[] = [];\n next.dataFrames.forEach((df: DataFrame) => {\n const dataframeJson = dataFrameToJSON(df);\n snapshot.push(dataframeJson);\n });\n onFileLoaded({ ...defaultFileUploadQuery, ...{ snapshot: snapshot, file: next.file } }, fileRejections);\n });\n };\n}\n","import { cx } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useOverlay } from '@react-aria/overlays';\nimport { PropsWithChildren, useRef } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Stack } from '../Layout/Stack/Stack';\n\nimport { ModalHeader } from './ModalHeader';\nimport { getModalStyles } from './getModalStyles';\n\ninterface BaseProps {\n /** @deprecated no longer used */\n icon?: IconName;\n /** @deprecated no longer used */\n iconTooltip?: string;\n className?: string;\n contentClassName?: string;\n closeOnEscape?: boolean;\n closeOnBackdropClick?: boolean;\n trapFocus?: boolean;\n\n isOpen?: boolean;\n onDismiss?: () => void;\n\n /** If not set will call onDismiss if that is set. */\n onClickBackdrop?: () => void;\n}\n\ninterface WithStringTitleProps extends BaseProps {\n /** Title for the modal or custom header element */\n title: string;\n ariaLabel?: never;\n}\n\ninterface WithCustomTitleProps extends BaseProps {\n /** Title for the modal or custom header element */\n title: JSX.Element;\n /** aria-label for the dialog. only needed when passing a custom title element */\n ariaLabel: string;\n}\n\nexport type Props = WithStringTitleProps | WithCustomTitleProps;\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/overlays-modal--docs\n */\nexport function Modal(props: PropsWithChildren<Props>) {\n const {\n title,\n ariaLabel,\n children,\n isOpen = false,\n closeOnEscape = true,\n closeOnBackdropClick = true,\n className,\n contentClassName,\n onDismiss,\n onClickBackdrop,\n trapFocus = true,\n } = props;\n const styles = useStyles2(getModalStyles);\n\n const ref = useRef<HTMLDivElement>(null);\n\n // Handle interacting outside the dialog and pressing\n // the Escape key to close the modal.\n const { overlayProps, underlayProps } = useOverlay(\n { isKeyboardDismissDisabled: !closeOnEscape, isOpen, onClose: onDismiss },\n ref\n );\n\n // Get props for the dialog and its title\n const { dialogProps, titleProps } = useDialog(\n {\n 'aria-label': ariaLabel,\n },\n ref\n );\n\n if (!isOpen) {\n return null;\n }\n\n const headerClass = cx(styles.modalHeader, typeof title !== 'string' && styles.modalHeaderWithTabs);\n\n return (\n <OverlayContainer>\n <div\n role=\"presentation\"\n className={styles.modalBackdrop}\n onClick={onClickBackdrop || (closeOnBackdropClick ? onDismiss : undefined)}\n {...underlayProps}\n />\n <FocusScope contain={trapFocus} autoFocus restoreFocus>\n <div className={cx(styles.modal, className)} ref={ref} {...overlayProps} {...dialogProps}>\n <div className={headerClass}>\n {typeof title === 'string' && <DefaultModalHeader {...props} title={title} id={titleProps.id} />}\n {\n // FIXME: custom title components won't get an accessible title.\n // Do we really want to support them or shall we just limit this ModalTabsHeader?\n typeof title !== 'string' && title\n }\n <div className={styles.modalHeaderClose}>\n <IconButton\n name=\"times\"\n size=\"xl\"\n onClick={onDismiss}\n aria-label={t('grafana-ui.modal.close-tooltip', 'Close')}\n />\n </div>\n </div>\n <div className={cx(styles.modalContent, contentClassName)}>{children}</div>\n </div>\n </FocusScope>\n </OverlayContainer>\n );\n}\n\nfunction ModalButtonRow({ leftItems, children }: { leftItems?: React.ReactNode; children: React.ReactNode }) {\n const styles = useStyles2(getModalStyles);\n\n if (leftItems) {\n return (\n <div className={styles.modalButtonRow}>\n <Stack justifyContent=\"space-between\">\n <Stack justifyContent=\"flex-start\" gap={2}>\n {leftItems}\n </Stack>\n <Stack justifyContent=\"flex-end\" gap={2}>\n {children}\n </Stack>\n </Stack>\n </div>\n );\n }\n\n return (\n <div className={styles.modalButtonRow}>\n <Stack justifyContent=\"flex-end\" gap={2} wrap=\"wrap\">\n {children}\n </Stack>\n </div>\n );\n}\n\nModal.ButtonRow = ModalButtonRow;\n\ninterface DefaultModalHeaderProps {\n id?: string;\n title: string;\n icon?: IconName;\n iconTooltip?: string;\n}\n\nfunction DefaultModalHeader({ icon, iconTooltip, title, id }: DefaultModalHeaderProps): JSX.Element {\n return <ModalHeader icon={icon} iconTooltip={iconTooltip} title={title} id={id} />;\n}\n","import * as React from 'react';\n\nimport { DataFrameFieldIndex, DisplayValue } from '@grafana/data';\nimport { LegendDisplayMode, LegendPlacement, LineStyle } from '@grafana/schema';\n\nexport enum SeriesVisibilityChangeBehavior {\n Isolate,\n Hide,\n}\n\nexport interface VizLegendBaseProps<T> {\n placement: LegendPlacement;\n className?: string;\n items: Array<VizLegendItem<T>>;\n thresholdItems?: Array<VizLegendItem<T>>;\n mappingItems?: Array<VizLegendItem<T>>;\n seriesVisibilityChangeBehavior?: SeriesVisibilityChangeBehavior;\n onLabelClick?: (item: VizLegendItem<T>, event: React.MouseEvent<HTMLButtonElement>) => void;\n itemRenderer?: (item: VizLegendItem<T>, index: number) => JSX.Element;\n onLabelMouseOver?: (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n ) => void;\n onLabelMouseOut?: (\n item: VizLegendItem,\n event: React.MouseEvent<HTMLButtonElement> | React.FocusEvent<HTMLButtonElement>\n ) => void;\n readonly?: boolean;\n}\n\nexport interface VizLegendTableProps<T> extends VizLegendBaseProps<T> {\n sortBy?: string;\n sortDesc?: boolean;\n onToggleSort?: (sortBy: string) => void;\n isSortable?: boolean;\n}\n\nexport interface LegendProps<T = any> extends VizLegendBaseProps<T>, VizLegendTableProps<T> {\n displayMode: LegendDisplayMode;\n}\n\nexport interface VizLegendItem<T = any> {\n getItemKey?: () => string;\n label: string;\n color?: string;\n gradient?: string;\n yAxis: number;\n disabled?: boolean;\n // displayValues?: DisplayValue[];\n getDisplayValues?: () => DisplayValue[];\n fieldIndex?: DataFrameFieldIndex;\n fieldName?: string;\n data?: T;\n lineStyle?: LineStyle;\n}\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { CombinedRule } from '../../../../../types/unified-alerting';\nimport { checkEvaluationIntervalGlobalLimit } from '../../utils/config';\nimport { rulerRuleType } from '../../utils/rules';\n\ninterface RuleConfigStatusProps {\n rule: CombinedRule;\n}\n\nexport function RuleConfigStatus({ rule }: RuleConfigStatusProps) {\n const styles = useStyles2(getStyles);\n const isGrafanaManagedRule = rulerRuleType.grafana.rule(rule.rulerRule);\n\n const exceedsLimit = useMemo(() => {\n return isGrafanaManagedRule ? checkEvaluationIntervalGlobalLimit(rule.group.interval).exceedsLimit : false;\n }, [rule.group.interval, isGrafanaManagedRule]);\n\n if (!exceedsLimit) {\n return null;\n }\n\n return (\n <Tooltip\n theme=\"error\"\n content={\n <div>\n <Trans\n i18nKey=\"alerting.rule-config-status.tooltip-min-interval\"\n values={{ minInterval: config.unifiedAlerting.minInterval, ruleInterval: rule.group.interval }}\n >\n A minimum evaluation interval of <span className={styles.globalLimitValue}>{'{{minInterval}}'}</span> has\n been configured in Grafana and will be used instead of the {'{{ruleInterval}}'} interval configured for the\n Rule Group.\n </Trans>\n </div>\n }\n >\n <Icon name=\"stopwatch-slash\" className={styles.icon} />\n </Tooltip>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n globalLimitValue: css({\n fontWeight: theme.typography.fontWeightBold,\n }),\n icon: css({\n fill: theme.colors.warning.text,\n }),\n };\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Icon, Tooltip, useStyles2 } from '@grafana/ui';\nimport { Rule } from 'app/types/unified-alerting';\n\nimport { isErrorHealth } from '../rule-viewer/RuleViewer';\n\ninterface Prom {\n rule: Rule;\n}\n\nexport const RuleHealth = ({ rule }: Prom) => {\n const style = useStyles2(getStyle);\n\n if (isErrorHealth(rule.health)) {\n return (\n <Tooltip theme=\"error\" content={rule.lastError || 'No error message provided.'}>\n <div className={style.warn}>\n <Icon name=\"exclamation-triangle\" />\n <span>\n <Trans i18nKey=\"alerting.rule-health.error\">error</Trans>\n </span>\n </div>\n </Tooltip>\n );\n }\n\n return <>{rule.health}</>;\n};\n\nconst getStyle = (theme: GrafanaTheme2) => ({\n warn: css({\n display: 'inline-flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1),\n\n color: theme.colors.warning.text,\n }),\n});\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { GrafanaTheme2, intervalToAbbreviatedDurationString } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Icon, Spinner, Stack, Tooltip, useStyles2 } from '@grafana/ui';\nimport { CombinedRule } from 'app/types/unified-alerting';\nimport { PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { getFirstActiveAt, prometheusRuleType, rulerRuleType } from '../../utils/rules';\nimport { StateTag } from '../StateTag';\n\nimport { AlertStateTag } from './AlertStateTag';\n\ninterface Props {\n rule: CombinedRule;\n isDeleting: boolean;\n isCreating: boolean;\n isPaused?: boolean;\n}\n\nexport const RuleState = ({ rule, isDeleting, isCreating, isPaused }: Props) => {\n const style = useStyles2(getStyle);\n\n const { promRule, rulerRule } = rule;\n // return how long the rule has been in its firing state, if any\n const RecordingRuleState = () => {\n if (isPaused && rulerRuleType.grafana.recordingRule(rulerRule)) {\n return (\n <Tooltip\n content={t(\n 'alerting.rule-state.recording-rule-state.content-recording-rule-evaluation-is-currently-paused',\n 'Recording rule evaluation is currently paused'\n )}\n placement=\"top\"\n >\n <StateTag state=\"warning\">\n <Icon name=\"pause\" size=\"xs\" />\n <Trans i18nKey=\"alerting.rule-state.paused\">Paused</Trans>\n </StateTag>\n </Tooltip>\n );\n } else {\n return <Trans i18nKey=\"alerting.rule-state.recording-rule\">Recording rule</Trans>;\n }\n };\n const forTime = useMemo(() => {\n if (\n prometheusRuleType.alertingRule(promRule) &&\n promRule.alerts?.length &&\n promRule.state !== PromAlertingRuleState.Inactive\n ) {\n // find earliest alert\n const firstActiveAt = promRule.activeAt ? new Date(promRule.activeAt) : getFirstActiveAt(promRule);\n\n // calculate time elapsed from earliest alert\n if (firstActiveAt) {\n return (\n <span title={String(firstActiveAt)} className={style.for}>\n <Trans\n i18nKey=\"alerting.rule-state.for\"\n values={{\n duration: intervalToAbbreviatedDurationString(\n {\n start: firstActiveAt,\n end: new Date(),\n },\n false\n ),\n }}\n >\n for {'{{duration}}'}\n </Trans>{' '}\n </span>\n );\n }\n }\n return null;\n }, [promRule, style]);\n\n if (isDeleting) {\n return (\n <Stack gap={1}>\n <Spinner />\n <Trans i18nKey=\"alerting.rule-state.deleting\">Deleting</Trans>\n </Stack>\n );\n } else if (isCreating) {\n return (\n <Stack gap={1}>\n <Spinner />\n <Trans i18nKey=\"alerting.rule-state.creating\">Creating</Trans>\n </Stack>\n );\n } else if (prometheusRuleType.alertingRule(promRule)) {\n return (\n <Stack gap={1}>\n <AlertStateTag state={promRule.state} isPaused={isPaused} />\n {!isPaused && forTime}\n </Stack>\n );\n } else if (promRule && prometheusRuleType.recordingRule(promRule)) {\n return <RecordingRuleState />;\n }\n return <Trans i18nKey=\"alerting.rule-state.na\">n/a</Trans>;\n};\n\nconst getStyle = (theme: GrafanaTheme2) => ({\n for: css({\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.secondary,\n whiteSpace: 'nowrap',\n paddingTop: '2px',\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport { useEffect, useMemo } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Pagination, Tooltip, useStyles2 } from '@grafana/ui';\nimport { CombinedRule, RulesSource } from 'app/types/unified-alerting';\n\nimport { DEFAULT_PER_PAGE_PAGINATION } from '../../../../../core/constants';\nimport { alertRuleApi } from '../../api/alertRuleApi';\nimport { featureDiscoveryApi } from '../../api/featureDiscoveryApi';\nimport { shouldUsePrometheusRulesPrimary } from '../../featureToggles';\nimport { useAsync } from '../../hooks/useAsync';\nimport { attachRulerRuleToCombinedRule } from '../../hooks/useCombinedRuleNamespaces';\nimport { useHasRuler } from '../../hooks/useHasRuler';\nimport { usePagination } from '../../hooks/usePagination';\nimport { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector';\nimport { PluginOriginBadge } from '../../plugins/PluginOriginBadge';\nimport { calculateNextEvaluationEstimate } from '../../rule-list/components/util';\nimport { Annotation } from '../../utils/constants';\nimport { GRAFANA_RULES_SOURCE_NAME, getRulesSourceName } from '../../utils/datasource';\nimport { getRulePluginOrigin, isPausedRule, rulerRuleType } from '../../utils/rules';\nimport { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable';\nimport { DynamicTableWithGuidelines } from '../DynamicTableWithGuidelines';\nimport { ProvisioningBadge } from '../Provisioning';\nimport { RuleLocation } from '../RuleLocation';\nimport { Tokenize } from '../Tokenize';\n\nimport { RuleActionsButtons } from './RuleActionsButtons';\nimport { RuleConfigStatus } from './RuleConfigStatus';\nimport { RuleDetails } from './RuleDetails';\nimport { RuleHealth } from './RuleHealth';\nimport { RuleState } from './RuleState';\n\ntype RuleTableColumnProps = DynamicTableColumnProps<CombinedRule>;\ntype RuleTableItemProps = DynamicTableItemProps<CombinedRule>;\n\ninterface Props {\n rules: CombinedRule[];\n showGuidelines?: boolean;\n showGroupColumn?: boolean;\n showSummaryColumn?: boolean;\n showNextEvaluationColumn?: boolean;\n emptyMessage?: string;\n className?: string;\n}\n\nconst prometheusRulesPrimary = shouldUsePrometheusRulesPrimary();\n\nconst { useLazyGetRuleGroupForNamespaceQuery } = alertRuleApi;\nconst { useLazyDiscoverDsFeaturesQuery } = featureDiscoveryApi;\n\nexport const RulesTable = ({\n rules,\n className,\n showGuidelines = false,\n emptyMessage = 'No rules found.',\n showGroupColumn = false,\n showSummaryColumn = false,\n showNextEvaluationColumn = false,\n}: Props) => {\n const styles = useStyles2(getStyles);\n const wrapperClass = cx(styles.wrapper, className, { [styles.wrapperMargin]: showGuidelines });\n\n const { pageItems, page, numberOfPages, onPageChange } = usePagination(rules, 1, DEFAULT_PER_PAGE_PAGINATION);\n\n const { result: rulesWithRulerDefinitions, status: rulerRulesLoadingStatus } = useLazyLoadRulerRules(pageItems);\n\n const isLoadingRulerGroup = rulerRulesLoadingStatus === 'loading';\n\n const items = useMemo((): RuleTableItemProps[] => {\n return rulesWithRulerDefinitions.map((rule, ruleIdx) => {\n return {\n id: `${rule.namespace.name}-${rule.group.name}-${rule.name}-${ruleIdx}`,\n data: rule,\n };\n });\n }, [rulesWithRulerDefinitions]);\n\n const columns = useColumns(showSummaryColumn, showGroupColumn, showNextEvaluationColumn, isLoadingRulerGroup);\n\n if (!pageItems.length) {\n return <div className={cx(wrapperClass, styles.emptyMessage)}>{emptyMessage}</div>;\n }\n\n const TableComponent = showGuidelines ? DynamicTableWithGuidelines : DynamicTable;\n\n return (\n <div className={wrapperClass} data-testid=\"rules-table\">\n <TableComponent\n cols={columns}\n isExpandable={true}\n items={items}\n renderExpandedContent={({ data: rule }) => <RuleDetails rule={rule} />}\n />\n <Pagination\n currentPage={page}\n numberOfPages={numberOfPages}\n onNavigate={onPageChange}\n hideWhenSinglePage\n className={styles.pagination}\n />\n </div>\n );\n};\n\n/**\n * This hook is used to lazy load the Ruler rule for each rule.\n * If the `prometheusRulesPrimary` feature flag is enabled, the hook will fetch the Ruler rule counterpart for each Prometheus rule.\n * If the `prometheusRulesPrimary` feature flag is disabled, the hook will return the rules as is.\n * @param rules Combined rules with or without Ruler rule property\n * @returns Combined rules enriched with Ruler rule property\n */\nfunction useLazyLoadRulerRules(rules: CombinedRule[]) {\n const [fetchRulerRuleGroup] = useLazyGetRuleGroupForNamespaceQuery();\n const [fetchDsFeatures] = useLazyDiscoverDsFeaturesQuery();\n\n const [actions, state] = useAsync(async () => {\n const result = Promise.all(\n rules.map(async (rule) => {\n const dsFeatures = await fetchDsFeatures(\n { rulesSourceName: getRulesSourceName(rule.namespace.rulesSource) },\n true\n ).unwrap();\n\n // Due to lack of ruleUid and folderUid in Prometheus rules we cannot do the lazy load for GMA\n if (dsFeatures.rulerConfig && rule.namespace.rulesSource !== GRAFANA_RULES_SOURCE_NAME) {\n // RTK Query should handle caching and deduplication for us\n const rulerRuleGroup = await fetchRulerRuleGroup(\n {\n namespace: rule.namespace.name,\n group: rule.group.name,\n rulerConfig: dsFeatures.rulerConfig,\n },\n true\n ).unwrap();\n\n attachRulerRuleToCombinedRule(rule, rulerRuleGroup);\n }\n\n return rule;\n })\n );\n return result;\n }, rules);\n\n useEffect(() => {\n if (prometheusRulesPrimary) {\n actions.execute();\n } else {\n // We need to reset the actions to update the rules if they changed\n // Otherwise useAsync acts like a cache and always return the first rules passed to it\n actions.reset();\n }\n }, [rules, actions]);\n\n return state;\n}\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n wrapperMargin: css({\n [theme.breakpoints.up('md')]: {\n marginLeft: '36px',\n },\n }),\n emptyMessage: css({\n padding: theme.spacing(1),\n }),\n wrapper: css({\n width: 'auto',\n borderRadius: theme.shape.radius.default,\n }),\n skeletonWrapper: css({\n flex: 1,\n }),\n pagination: css({\n display: 'flex',\n margin: 0,\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(0.25),\n justifyContent: 'center',\n borderLeft: `1px solid ${theme.colors.border.medium}`,\n borderRight: `1px solid ${theme.colors.border.medium}`,\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n float: 'none',\n }),\n});\n\nfunction useColumns(\n showSummaryColumn: boolean,\n showGroupColumn: boolean,\n showNextEvaluationColumn: boolean,\n isRulerLoading: boolean\n) {\n return useMemo((): RuleTableColumnProps[] => {\n const columns: RuleTableColumnProps[] = [\n {\n id: 'state',\n label: t('alerting.use-columns.columns.label.state', 'State'),\n renderCell: ({ data: rule }) => <RuleStateCell rule={rule} />,\n size: '165px',\n },\n {\n id: 'name',\n label: t('alerting.use-columns.columns.label.name', 'Name'),\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => rule.name,\n size: showNextEvaluationColumn ? 4 : 5,\n },\n {\n id: 'metadata',\n label: '',\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n const { promRule, rulerRule } = rule;\n\n const originMeta = getRulePluginOrigin(promRule ?? rulerRule);\n if (originMeta) {\n return <PluginOriginBadge pluginId={originMeta.pluginId} />;\n }\n\n const isGrafanaManagedRule = rulerRuleType.grafana.rule(rulerRule);\n if (!isGrafanaManagedRule) {\n return null;\n }\n\n const provenance = rulerRule.grafana_alert.provenance;\n return provenance ? <ProvisioningBadge /> : null;\n },\n size: '100px',\n },\n {\n id: 'warnings',\n label: '',\n renderCell: ({ data: combinedRule }) => <RuleConfigStatus rule={combinedRule} />,\n size: '45px',\n },\n {\n id: 'health',\n label: t('alerting.use-columns.columns.label.health', 'Health'),\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: { promRule, group } }) => (promRule ? <RuleHealth rule={promRule} /> : null),\n size: '75px',\n },\n ];\n if (showSummaryColumn) {\n columns.push({\n id: 'summary',\n label: t('alerting.use-columns.label.summary', 'Summary'),\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n return <Tokenize input={rule.annotations[Annotation.summary] ?? ''} />;\n },\n size: showNextEvaluationColumn ? 4 : 5,\n });\n }\n\n if (showNextEvaluationColumn) {\n columns.push({\n id: 'nextEvaluation',\n label: t('alerting.use-columns.label.next-evaluation', 'Next evaluation'),\n renderCell: ({ data: rule }) => {\n const nextEvalInfo = calculateNextEvaluationEstimate(rule.promRule?.lastEvaluation, rule.group.interval);\n\n return (\n nextEvalInfo && (\n <Tooltip\n placement=\"top\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n content={`${nextEvalInfo?.fullDate}`}\n theme=\"info\"\n >\n <span>{nextEvalInfo?.humanized}</span>\n </Tooltip>\n )\n );\n },\n size: 2,\n });\n }\n\n if (showGroupColumn) {\n columns.push({\n id: 'group',\n label: t('alerting.use-columns.label.group', 'Group'),\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => {\n const { namespace, group } = rule;\n // ungrouped rules are rules that are in the \"default\" group name\n const isUngrouped = group.name === 'default';\n const groupName = isUngrouped ? (\n <RuleLocation namespace={namespace.name} />\n ) : (\n <RuleLocation namespace={namespace.name} group={group.name} />\n );\n\n return groupName;\n },\n size: 5,\n });\n }\n columns.push({\n id: 'actions',\n label: t('alerting.use-columns.label.actions', 'Actions'),\n // eslint-disable-next-line react/display-name\n renderCell: ({ data: rule }) => <RuleActionsCell rule={rule} isLoadingRuler={isRulerLoading} />,\n size: '215px',\n });\n\n return columns;\n }, [showNextEvaluationColumn, showSummaryColumn, showGroupColumn, isRulerLoading]);\n}\n\nfunction RuleStateCell({ rule }: { rule: CombinedRule }) {\n const { isDeleting, isCreating, isPaused } = useRuleStatus(rule);\n return <RuleState rule={rule} isDeleting={isDeleting} isCreating={isCreating} isPaused={isPaused} />;\n}\n\nfunction RuleActionsCell({ rule, isLoadingRuler }: { rule: CombinedRule; isLoadingRuler: boolean }) {\n const styles = useStyles2(getStyles);\n const { isDeleting, isCreating } = useRuleStatus(rule);\n\n if (isLoadingRuler) {\n return <Skeleton containerClassName={styles.skeletonWrapper} />;\n }\n\n return (\n <RuleActionsButtons\n compact\n showViewButton={!isDeleting && !isCreating}\n rule={rule}\n rulesSource={rule.namespace.rulesSource}\n />\n );\n}\n\nexport function useIsRulesLoading(rulesSource: RulesSource) {\n const rulerRules = useUnifiedAlertingSelector((state) => state.rulerRules);\n const rulesSourceName = getRulesSourceName(rulesSource);\n\n const rulerRulesLoaded = Boolean(rulerRules[rulesSourceName]?.result);\n return rulerRulesLoaded;\n}\n\nfunction useRuleStatus(rule: CombinedRule) {\n const rulesSource = rule.namespace.rulesSource;\n\n const rulerRulesLoaded = useIsRulesLoading(rulesSource);\n const { hasRuler } = useHasRuler(rulesSource);\n\n const { promRule, rulerRule } = rule;\n\n // If prometheusRulesPrimary is enabled, we don't fetch rules from the Ruler API (except for Grafana managed rules)\n // so there is no way to detect statuses\n if (prometheusRulesPrimary && !rulerRuleType.grafana.rule(rulerRule)) {\n return { isDeleting: false, isCreating: false, isPaused: false };\n }\n\n const isDeleting = Boolean(hasRuler && rulerRulesLoaded && promRule && !rulerRule);\n const isCreating = Boolean(hasRuler && rulerRulesLoaded && rulerRule && !promRule);\n const isPaused = rulerRuleType.grafana.rule(rulerRule) && isPausedRule(rulerRule);\n\n return { isDeleting, isCreating, isPaused };\n}\n","import { CoreApp, DataQuery, DataSourceInstanceSettings, TimeRange } from '@grafana/data';\n\ninterface ActionComponentProps {\n query?: DataQuery;\n queries?: Array<Partial<DataQuery>>;\n onAddQuery?: (q: DataQuery) => void;\n onChangeDataSource?: (ds: DataSourceInstanceSettings) => void;\n timeRange?: TimeRange;\n dataSource?: DataSourceInstanceSettings;\n key: string | number;\n}\n\nexport type QueryActionComponent = (props: ActionComponentProps) => JSX.Element | null;\n\ntype ScopedQueryActionComponent = {\n scope: CoreApp;\n queryActionComponent: QueryActionComponent;\n};\n\nclass QueryActionComponents {\n extraRenderActions: QueryActionComponent[] = [];\n /* additional actions added in core grafana are likely to be needed in only one kind of app, \n and the add function may be ran multiple times by the component so it is keyed to ensure uniqueness\n */\n keyedScopedExtraRenderActions: Map<string, ScopedQueryActionComponent> = new Map();\n\n addExtraRenderAction(extra: QueryActionComponent) {\n this.extraRenderActions = this.extraRenderActions.concat(extra);\n }\n\n // for adding actions that will need to be unique, even if the add function is ran multiple times\n addKeyedExtraRenderAction(key: string, extra: ScopedQueryActionComponent) {\n this.keyedScopedExtraRenderActions.set(key, extra);\n }\n\n // only returns actions that are not scoped to a specific CoreApp\n getAllExtraRenderAction(): QueryActionComponent[] {\n return this.extraRenderActions;\n }\n\n getScopedExtraRenderAction(scope: CoreApp): QueryActionComponent[] {\n const scopedActions = Array.from(this.keyedScopedExtraRenderActions, (value) => value[1]).filter(\n (sra) => sra.scope === scope\n );\n\n return scopedActions.map((sa) => sa.queryActionComponent);\n }\n}\n\n/**\n * @internal and experimental\n */\nexport const GroupActionComponents = new QueryActionComponents();\n\n/**\n * @internal and experimental\n */\nexport const RowActionComponents = new QueryActionComponents();\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport const pluginVersion = \"12.3.0\";\n\n/**\n * Select the pie chart display style.\n */\nexport enum PieChartType {\n Donut = 'donut',\n Pie = 'pie',\n}\n\n/**\n * Select labels to display on the pie chart.\n * - Name - The series or field name.\n * - Percent - The percentage of the whole.\n * - Value - The raw numerical value.\n */\nexport enum PieChartLabels {\n Name = 'name',\n Percent = 'percent',\n Value = 'value',\n}\n\n/**\n * Select values to display in the legend.\n * - Percent: The percentage of the whole.\n * - Value: The raw numerical value.\n */\nexport enum PieChartLegendValues {\n Percent = 'percent',\n Value = 'value',\n}\n\nexport interface PieChartLegendOptions extends common.VizLegendOptions {\n values: Array<PieChartLegendValues>;\n}\n\nexport const defaultPieChartLegendOptions: Partial<PieChartLegendOptions> = {\n values: [],\n};\n\nexport interface Options extends common.OptionsWithTooltip, common.SingleStatBaseOptions {\n displayLabels: Array<PieChartLabels>;\n legend: PieChartLegendOptions;\n pieType: PieChartType;\n sort: common.SortOrder;\n}\n\nexport const defaultOptions: Partial<Options> = {\n displayLabels: [],\n};\n\nexport interface FieldConfig extends common.HideableFieldConfig {}\n","import { useState } from 'react';\n\nimport { ActionVariable, ActionVariableType } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { IconButton, Input, Stack, Combobox, ComboboxOption } from '@grafana/ui';\n\ninterface Props {\n onChange: (v: ActionVariable[]) => void;\n value: ActionVariable[];\n}\n\nexport const ActionVariablesEditor = ({ value, onChange }: Props) => {\n const [key, setKey] = useState('');\n const [name, setName] = useState('');\n const [type, setType] = useState<ActionVariableType>(ActionVariableType.String);\n\n const changeKey = (key: string) => {\n setKey(key);\n };\n\n const changeName = (name: string) => {\n setName(name);\n };\n\n const changeType = (type: ComboboxOption) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n setType(type.value as ActionVariableType);\n };\n\n const addVariable = () => {\n let newVariables: ActionVariable[];\n\n if (value) {\n newVariables = value.filter((e) => e.key !== key);\n } else {\n newVariables = [];\n }\n\n newVariables.push({ key, name, type });\n newVariables.sort((a, b) => a.key.localeCompare(b.key));\n onChange(newVariables);\n\n setKey('');\n setName('');\n setType(ActionVariableType.String);\n };\n\n const removeVariable = (key: string) => () => {\n const updatedVariables = value.filter((variable) => variable.key !== key);\n onChange(updatedVariables);\n };\n\n const isAddButtonDisabled = name === '' || key === '';\n\n const variableTypeOptions: ComboboxOption[] = [\n {\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n label: 'string',\n value: ActionVariableType.String,\n },\n ];\n\n return (\n <div>\n <Stack direction=\"row\">\n <Input\n value={key}\n onChange={(e) => changeKey(e.currentTarget.value)}\n placeholder={t('actions.params-editor.placeholder-key', 'Key')}\n width={300}\n />\n <Input\n value={name}\n onChange={(e) => changeName(e.currentTarget.value)}\n placeholder={t('actions.params-editor.placeholder-name', 'Name')}\n width={300}\n />\n <Combobox\n value={type}\n onChange={changeType}\n placeholder={t('actions.variables-editor.placeholder-type', 'Type')}\n options={variableTypeOptions}\n maxWidth={100}\n minWidth={10}\n width={'auto'}\n />\n <IconButton\n aria-label={t('actions.params-editor.aria-label-add', 'Add')}\n name=\"plus-circle\"\n onClick={() => addVariable()}\n disabled={isAddButtonDisabled}\n />\n </Stack>\n\n <Stack direction=\"column\">\n {value.map((entry) => (\n <Stack key={entry.key} direction=\"row\">\n <Input disabled value={entry.key} width={300} />\n <Input disabled value={entry.name} width={300} />\n <Input disabled value={entry.type} width={100} />\n <IconButton\n aria-label={t('actions.params-editor.aria-label-delete', 'Delete')}\n onClick={removeVariable(entry.key)}\n name=\"trash-alt\"\n />\n </Stack>\n ))}\n </Stack>\n </div>\n );\n};\n","import { useMemo } from 'react';\n\nimport { ActionType, DataSourceInstanceSettings } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport { Select } from '@grafana/ui';\n\nimport { INFINITY_DATASOURCE_TYPE } from './utils';\n\ninterface ConnectionOption {\n label: string;\n value: string;\n description?: string;\n imgUrl?: string;\n icon?: string;\n}\n\ninterface ConnectionPickerProps {\n actionType: ActionType;\n datasourceUid?: string;\n onChange: (connectionType: 'direct' | DataSourceInstanceSettings) => void;\n}\n\nconst DIRECT_OPTION_VALUE = 'direct';\n\nconst getSupportedDataSources = () => {\n const dataSourceSrv = getDataSourceSrv();\n\n return dataSourceSrv.getList({\n filter: (ds) => ds.type === INFINITY_DATASOURCE_TYPE,\n });\n};\n\nexport const ConnectionPicker = ({ actionType, datasourceUid, onChange }: ConnectionPickerProps) => {\n const connectionOptions: ConnectionOption[] = useMemo(() => {\n const options: ConnectionOption[] = [\n {\n label: t('grafana-ui.action-editor.modal.connection-direct-label', 'Direct from browser'),\n value: DIRECT_OPTION_VALUE,\n description: t(\n 'grafana-ui.action-editor.modal.connection-direct-description',\n 'Make request directly from browser'\n ),\n icon: 'adjust-circle',\n },\n ];\n\n if (config.featureToggles.vizActionsAuth) {\n const supportedDataSources = getSupportedDataSources();\n\n supportedDataSources.forEach((ds) => {\n options.push({\n label: ds.name,\n value: ds.uid,\n imgUrl: ds.meta.info.logos.small,\n });\n });\n }\n\n return options;\n }, []);\n\n const getCurrentValue = () => {\n if (actionType === ActionType.Fetch) {\n return DIRECT_OPTION_VALUE;\n } else if (actionType === ActionType.Infinity && datasourceUid) {\n return datasourceUid;\n }\n return DIRECT_OPTION_VALUE;\n };\n\n const handleConnectionChange = (selectedValue: string) => {\n if (selectedValue === DIRECT_OPTION_VALUE) {\n onChange(DIRECT_OPTION_VALUE);\n } else {\n const supportedDataSources = getSupportedDataSources();\n const selectedDatasource = supportedDataSources.find((ds) => ds.uid === selectedValue);\n if (selectedDatasource) {\n onChange(selectedDatasource);\n } else {\n console.error('ConnectionPicker: Could not find datasource with UID:', selectedValue);\n }\n }\n };\n\n const currentValue = getCurrentValue();\n\n return (\n <Select\n value={currentValue}\n options={connectionOptions}\n onChange={(selected) => handleConnectionChange(selected.value!)}\n placeholder={t('grafana-ui.action-editor.modal.connection-placeholder', 'Select connection')}\n />\n );\n};\n","import { css } from '@emotion/css';\nimport { useEffect, useState } from 'react';\n\nimport { contentTypeOptions, GrafanaTheme2, VariableSuggestion } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { IconButton, Input, Stack, Select, useStyles2 } from '@grafana/ui';\n\nimport { SuggestionsInput } from '../transformers/suggestionsInput/SuggestionsInput';\n\ninterface Props {\n onChange: (v: Array<[string, string]>) => void;\n value: Array<[string, string]>;\n suggestions: VariableSuggestion[];\n contentTypeHeader?: boolean;\n}\n\nexport const ParamsEditor = ({ value, onChange, suggestions, contentTypeHeader = false }: Props) => {\n const styles = useStyles2(getStyles);\n\n const headersContentType = value.find(([key, value]) => key === 'Content-Type');\n\n const [paramName, setParamName] = useState('');\n const [paramValue, setParamValue] = useState('');\n const [contentTypeParamValue, setContentTypeParamValue] = useState('');\n\n useEffect(() => {\n if (contentTypeParamValue !== '') {\n setContentTypeParamValue(contentTypeParamValue);\n } else if (headersContentType) {\n setContentTypeParamValue(headersContentType[1]);\n }\n }, [contentTypeParamValue, headersContentType]);\n\n // forces re-init of first SuggestionsInput(s), since they are stateful and don't respond to 'value' prop changes to be able to clear them :(\n const [entryKey, setEntryKey] = useState(Math.random().toString());\n\n const changeParamValue = (paramValue: string) => {\n setParamValue(paramValue);\n };\n\n const changeParamName = (paramName: string) => {\n setParamName(paramName);\n };\n\n const removeParam = (key: string) => () => {\n const updatedParams = value.filter((param) => param[0] !== key);\n onChange(updatedParams);\n };\n\n const addParam = (contentType?: [string, string]) => {\n let newParams: Array<[string, string]>;\n\n if (value) {\n newParams = value.filter((e) => e[0] !== (contentType ? contentType[0] : paramName));\n } else {\n newParams = [];\n }\n\n newParams.push(contentType ?? [paramName, paramValue]);\n newParams.sort((a, b) => a[0].localeCompare(b[0]));\n onChange(newParams);\n\n setParamName('');\n setParamValue('');\n setEntryKey(Math.random().toString());\n };\n\n const changeContentTypeParamValue = (value: string) => {\n setContentTypeParamValue(value);\n addParam(['Content-Type', value]);\n };\n\n const isAddParamsDisabled = paramName === '' || paramValue === '';\n\n return (\n <div>\n <Stack direction=\"row\" key={entryKey}>\n <SuggestionsInput\n value={paramName}\n onChange={changeParamName}\n suggestions={suggestions}\n placeholder={t('actions.params-editor.placeholder-key', 'Key')}\n style={{ width: 332 }}\n />\n <SuggestionsInput\n value={paramValue}\n onChange={changeParamValue}\n suggestions={suggestions}\n placeholder={t('actions.params-editor.placeholder-value', 'Value')}\n style={{ width: 332 }}\n />\n <IconButton\n aria-label={t('actions.params-editor.aria-label-add', 'Add')}\n name=\"plus-circle\"\n onClick={() => addParam()}\n disabled={isAddParamsDisabled}\n />\n </Stack>\n\n <Stack direction=\"column\">\n {Array.from(value.filter((param) => param[0] !== 'Content-Type') || []).map((entry) => (\n <Stack key={entry[0]} direction=\"row\">\n <Input disabled value={entry[0]} />\n <Input disabled value={entry[1]} />\n <IconButton\n aria-label={t('actions.params-editor.aria-label-delete', 'Delete')}\n onClick={removeParam(entry[0])}\n name=\"trash-alt\"\n />\n </Stack>\n ))}\n </Stack>\n\n {contentTypeHeader && (\n <div className={styles.extraHeader}>\n <Stack direction=\"row\">\n <Input value={'Content-Type'} disabled />\n <Select\n onChange={(select) => changeContentTypeParamValue(select.value as string)}\n options={contentTypeOptions}\n value={contentTypeParamValue}\n />\n </Stack>\n </div>\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n extraHeader: css({\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n maxWidth: 673,\n }),\n});\n","import { css } from '@emotion/css';\nimport { memo } from 'react';\n\nimport {\n Action,\n ActionType,\n DataSourceInstanceSettings,\n GrafanaTheme2,\n httpMethodOptions,\n HttpRequestMethod,\n VariableSuggestion,\n InfinityOptions,\n FetchOptions,\n ActionVariable,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport {\n ColorPicker,\n Field,\n InlineField,\n InlineFieldRow,\n JSONFormatter,\n RadioButtonGroup,\n Switch,\n useStyles2,\n useTheme2,\n} from '@grafana/ui';\n\nimport { HTMLElementType, SuggestionsInput } from '../transformers/suggestionsInput/SuggestionsInput';\n\nimport { ActionVariablesEditor } from './ActionVariablesEditor';\nimport { ConnectionPicker } from './ConnectionPicker';\nimport { ParamsEditor } from './ParamsEditor';\n\ninterface ActionEditorProps {\n index: number;\n value: Action;\n onChange: (index: number, action: Action) => void;\n suggestions: VariableSuggestion[];\n showOneClick?: boolean;\n}\n\nconst LABEL_WIDTH = 13;\n\nconst DEFAULT_HTTP_CONFIG: FetchOptions = {\n method: HttpRequestMethod.POST,\n url: '',\n body: '{}',\n queryParams: [],\n headers: [['Content-Type', 'application/json']],\n};\n\nexport const ActionEditor = memo(({ index, value, onChange, suggestions, showOneClick }: ActionEditorProps) => {\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n\n const getActionConfig = (): FetchOptions | InfinityOptions => {\n if (value.type === ActionType.Infinity) {\n return (\n value[ActionType.Infinity] || {\n ...DEFAULT_HTTP_CONFIG,\n datasourceUid: '',\n }\n );\n }\n\n return value[ActionType.Fetch] || DEFAULT_HTTP_CONFIG;\n };\n\n const updateActionConfig = (updates: Partial<FetchOptions | InfinityOptions>) => {\n const configKey = value.type === ActionType.Infinity ? ActionType.Infinity : ActionType.Fetch;\n const baseConfig = getActionConfig();\n\n const updatedConfig = {\n ...baseConfig,\n ...updates,\n ...(value.type === ActionType.Infinity && {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n datasourceUid: (baseConfig as InfinityOptions).datasourceUid || '',\n }),\n };\n\n onChange(index, {\n ...value,\n [configKey]: updatedConfig,\n });\n };\n\n const updateConfig =\n <K extends keyof (FetchOptions & InfinityOptions)>(field: K) =>\n (newValue: (FetchOptions & InfinityOptions)[K]) => {\n updateActionConfig({ [field]: newValue });\n };\n\n const onTitleChange = (title: string) => {\n onChange(index, { ...value, title });\n };\n\n const onConfirmationChange = (confirmation: string) => {\n onChange(index, { ...value, confirmation });\n };\n\n const onVariablesChange = (variables: ActionVariable[]) => {\n onChange(index, {\n ...value,\n variables,\n });\n };\n\n const onOneClickChanged = () => {\n onChange(index, { ...value, oneClick: !value.oneClick });\n };\n\n const onUrlChange = updateConfig('url');\n const onBodyChange = updateConfig('body');\n const onMethodChange = updateConfig('method');\n const onQueryParamsChange = updateConfig('queryParams');\n const onHeadersChange = updateConfig('headers');\n\n const onBackgroundColorChange = (backgroundColor: string) => {\n onChange(index, {\n ...value,\n style: {\n ...value.style,\n backgroundColor,\n },\n });\n };\n\n const onConnectionChange = (connectionType: string | DataSourceInstanceSettings) => {\n const baseAction = {\n title: value.title,\n confirmation: value.confirmation,\n oneClick: value.oneClick,\n variables: value.variables,\n style: value.style,\n };\n\n if (typeof connectionType === 'string') {\n onChange(index, {\n ...baseAction,\n type: ActionType.Fetch,\n [ActionType.Fetch]: getActionConfig(),\n });\n } else {\n onChange(index, {\n ...baseAction,\n type: ActionType.Infinity,\n [ActionType.Infinity]: {\n ...getActionConfig(),\n datasourceUid: connectionType.uid,\n },\n });\n }\n };\n\n const renderJSON = (data = '{}') => {\n try {\n const json = JSON.parse(data);\n return <JSONFormatter json={json} />;\n } catch (error) {\n if (error instanceof Error) {\n return `Invalid JSON provided: ${error.message}`;\n } else {\n return 'Invalid JSON provided';\n }\n }\n };\n\n const actionConfig = getActionConfig();\n const shouldRenderJSON =\n actionConfig.method !== HttpRequestMethod.GET &&\n actionConfig.headers?.some(\n ([name, value]: [string, string]) => name === 'Content-Type' && value === 'application/json'\n );\n\n return (\n <div className={styles.listItem}>\n <Field label={t('grafana-ui.action-editor.modal.action-title', 'Title')} className={styles.inputField}>\n <SuggestionsInput\n value={value.title}\n onChange={onTitleChange}\n suggestions={suggestions}\n autoFocus={value.title === ''}\n placeholder={t('grafana-ui.action-editor.modal.action-title-placeholder', 'Action title')}\n />\n </Field>\n\n <Field\n label={t('grafana-ui.viz-tooltip.actions-confirmation-label', 'Confirmation message')}\n description={t(\n 'grafana-ui.viz-tooltip.actions-confirmation-message',\n 'Provide a descriptive prompt to confirm or cancel the action.'\n )}\n className={styles.inputField}\n >\n <SuggestionsInput\n value={value.confirmation}\n onChange={onConfirmationChange}\n suggestions={suggestions}\n placeholder={t(\n 'grafana-ui.viz-tooltip.actions-confirmation-input-placeholder',\n 'Are you sure you want to {{ actionTitle }}?',\n { actionTitle: value.title || '... ' }\n )}\n />\n </Field>\n {showOneClick && (\n <Field\n label={t('grafana-ui.data-link-inline-editor.one-click', 'One click')}\n description={t(\n 'grafana-ui.action-editor.modal.one-click-description',\n 'Only one link or action can have one click enabled at a time'\n )}\n >\n <Switch value={value.oneClick || false} onChange={onOneClickChanged} />\n </Field>\n )}\n\n <InlineFieldRow>\n <InlineField label={t('grafana-ui.action-editor.modal.connection', 'Connection')} labelWidth={LABEL_WIDTH}>\n <ConnectionPicker\n actionType={value.type}\n datasourceUid={value?.[ActionType.Infinity]?.datasourceUid}\n onChange={onConnectionChange}\n />\n </InlineField>\n </InlineFieldRow>\n\n <InlineFieldRow>\n <InlineField label={t('grafana-ui.action-editor.modal.action-method', 'Method')} labelWidth={LABEL_WIDTH}>\n <RadioButtonGroup<HttpRequestMethod>\n value={actionConfig.method}\n options={httpMethodOptions}\n onChange={onMethodChange}\n fullWidth\n />\n </InlineField>\n </InlineFieldRow>\n\n <InlineFieldRow>\n <InlineField label={t('actions.action-editor.label-url', 'URL')} labelWidth={LABEL_WIDTH} grow={true}>\n <SuggestionsInput\n value={actionConfig.url}\n onChange={onUrlChange}\n suggestions={suggestions}\n placeholder={t('actions.action-editor.placeholder-url', 'URL')}\n />\n </InlineField>\n </InlineFieldRow>\n\n <Field\n label={t('grafana-ui.action-editor.modal.action-variables', 'Variables')}\n className={styles.fieldGap}\n noMargin\n >\n <ActionVariablesEditor onChange={onVariablesChange} value={value.variables ?? []} />\n </Field>\n\n <Field\n label={t('grafana-ui.action-editor.modal.action-query-params', 'Query parameters')}\n className={styles.fieldGap}\n >\n <ParamsEditor value={actionConfig.queryParams ?? []} onChange={onQueryParamsChange} suggestions={suggestions} />\n </Field>\n\n <Field label={t('actions.action-editor.label-headers', 'Headers')}>\n <ParamsEditor\n value={actionConfig.headers ?? []}\n onChange={onHeadersChange}\n suggestions={suggestions}\n contentTypeHeader={true}\n />\n </Field>\n\n {actionConfig.method !== HttpRequestMethod.GET && (\n <Field label={t('grafana-ui.action-editor.modal.action-body', 'Body')} className={styles.inputField}>\n <SuggestionsInput\n value={actionConfig.body}\n onChange={onBodyChange}\n suggestions={suggestions}\n type={HTMLElementType.TextAreaElement}\n />\n </Field>\n )}\n\n {shouldRenderJSON && (\n <>\n <br />\n {renderJSON(actionConfig.body)}\n </>\n )}\n\n <Field label={t('grafana-ui.action-editor.button.style', 'Button style')} style={{ marginTop: '8px' }}>\n <InlineField\n label={t('actions.action-editor.button.style.background-color', 'Color')}\n labelWidth={LABEL_WIDTH}\n className={styles.colorPicker}\n >\n <ColorPicker\n color={value?.style?.backgroundColor || theme.colors.secondary.main}\n onChange={onBackgroundColorChange}\n />\n </InlineField>\n </Field>\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n listItem: css({\n marginBottom: theme.spacing(),\n }),\n infoText: css({\n paddingBottom: theme.spacing(2),\n marginLeft: '66px',\n color: theme.colors.text.secondary,\n }),\n fieldGap: css({\n marginTop: theme.spacing(2),\n }),\n inputField: css({\n marginRight: 4,\n }),\n colorPicker: css({\n display: 'flex',\n alignItems: 'center',\n }),\n});\n\nActionEditor.displayName = 'ActionEditor';\n","import { useState } from 'react';\n\nimport { Action, ActionType, DataFrame, VariableSuggestion } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Button, Modal } from '@grafana/ui';\n\nimport { ActionEditor } from './ActionEditor';\n\ninterface ActionEditorModalContentProps {\n action: Action;\n index: number;\n data: DataFrame[];\n onSave: (index: number, action: Action) => void;\n onCancel: (index: number) => void;\n getSuggestions: () => VariableSuggestion[];\n showOneClick: boolean;\n}\n\nexport const ActionEditorModalContent = ({\n action,\n index,\n onSave,\n onCancel,\n getSuggestions,\n showOneClick,\n}: ActionEditorModalContentProps) => {\n const [dirtyAction, setDirtyAction] = useState(action);\n\n const isSaveButtonDisabled =\n dirtyAction.title.trim() === '' ||\n !dirtyAction[dirtyAction.type]?.url?.trim() ||\n (dirtyAction.type === ActionType.Infinity && !dirtyAction[ActionType.Infinity]?.datasourceUid);\n\n return (\n <>\n <ActionEditor\n value={dirtyAction}\n index={index}\n onChange={(index, action) => {\n setDirtyAction(action);\n }}\n suggestions={getSuggestions()}\n showOneClick={showOneClick}\n />\n <Modal.ButtonRow>\n <Button variant=\"secondary\" onClick={() => onCancel(index)} fill=\"outline\">\n <Trans i18nKey=\"action-editor.modal.cancel-button\">Cancel</Trans>\n </Button>\n <Button\n onClick={() => {\n onSave(index, dirtyAction);\n }}\n disabled={isSaveButtonDisabled}\n >\n <Trans i18nKey=\"action-editor.modal.save-button\">Save</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n );\n};\n","import { Action, defaultActionConfig, VariableSuggestion } from '@grafana/data';\nimport { DataLinksInlineEditorBase, DataLinksInlineEditorBaseProps } from '@grafana/ui';\n\nimport { ActionEditorModalContent } from './ActionEditorModalContent';\n\ntype DataLinksInlineEditorProps = Omit<DataLinksInlineEditorBaseProps<Action>, 'children' | 'type' | 'items'> & {\n actions: Action[];\n showOneClick?: boolean;\n getSuggestions: () => VariableSuggestion[];\n};\n\nexport const ActionsInlineEditor = ({\n actions,\n getSuggestions,\n showOneClick = false,\n ...rest\n}: DataLinksInlineEditorProps) => (\n <DataLinksInlineEditorBase<Action> type=\"action\" items={actions} {...rest}>\n {(item, index, onSave, onCancel) => (\n <ActionEditorModalContent\n index={index}\n action={item ?? defaultActionConfig}\n data={rest.data}\n onSave={onSave}\n onCancel={onCancel}\n getSuggestions={getSuggestions}\n showOneClick={showOneClick}\n />\n )}\n </DataLinksInlineEditorBase>\n);\n","import { isString } from 'lodash';\n\nimport { TimeRange, toUtc, AbsoluteTimeRange, RawTimeRange, dateTime, DateTime } from '@grafana/data';\n\ntype CopiedTimeRangeResult = { range: RawTimeRange; isError: false } | { range: string; isError: true };\n\nexport const getShiftedTimeRange = (direction: number, origRange: TimeRange): AbsoluteTimeRange => {\n const range = {\n from: toUtc(origRange.from),\n to: toUtc(origRange.to),\n };\n\n const timespan = (range.to.valueOf() - range.from.valueOf()) / 2;\n let to: number, from: number;\n\n if (direction === -1) {\n to = range.to.valueOf() - timespan;\n from = range.from.valueOf() - timespan;\n } else if (direction === 1) {\n to = range.to.valueOf() + timespan;\n from = range.from.valueOf() + timespan;\n if (to > Date.now() && range.to.valueOf() < Date.now()) {\n to = Date.now();\n from = range.from.valueOf();\n }\n } else {\n to = range.to.valueOf();\n from = range.from.valueOf();\n }\n\n return { from, to };\n};\n\nexport const getZoomedTimeRange = (range: TimeRange, factor: number): AbsoluteTimeRange => {\n const timespan = range.to.valueOf() - range.from.valueOf();\n const center = range.to.valueOf() - timespan / 2;\n // If the timepsan is 0, zooming out would do nothing, so we force a zoom out to 30s\n const newTimespan = timespan === 0 ? 30000 : timespan * factor;\n\n const to = center + newTimespan / 2;\n const from = center - newTimespan / 2;\n\n return { from, to };\n};\n\nexport async function getCopiedTimeRange(): Promise<CopiedTimeRangeResult> {\n const raw = await navigator.clipboard.readText();\n let range;\n\n try {\n range = JSON.parse(raw);\n\n if (!range.from || !range.to) {\n return { range: raw, isError: true };\n }\n\n return { range, isError: false };\n } catch (e) {\n return { range: raw, isError: true };\n }\n}\n\nexport const toUtcDateTimeIfIsoString = (value: string | DateTime): string | DateTime => {\n if (isString(value) && value.includes('Z')) {\n return dateTime(value).utc();\n }\n return value;\n};\n","// Processor function for use with time shifted comparison series.\n// This aligns the secondary series with the primary and adds custom\n// metadata and config to the secondary series' fields so that it is\n\nimport { of } from 'rxjs';\n\nimport { dateTime, DateTime, rangeUtil, TimeRange } from '@grafana/data';\nimport { ExtraQueryDataProcessor } from '@grafana/scenes';\n\n// rendered appropriately.\nexport const timeShiftAlignmentProcessor: ExtraQueryDataProcessor = (primary, secondary) => {\n const diff = secondary.timeRange.from.diff(primary.timeRange.from);\n secondary.series.forEach((series) => {\n series.refId = getCompareSeriesRefId(series.refId || '');\n series.meta = {\n ...series.meta,\n // @ts-ignore Remove when https://github.com/grafana/grafana/pull/71129 is released\n timeCompare: {\n diffMs: diff,\n isTimeShiftQuery: true,\n },\n };\n });\n return of(secondary);\n};\n\nexport const getCompareSeriesRefId = (refId: string) => `${refId}-compare`;\n\nconst PREVIOUS_PERIOD_VALUE = '__previousPeriod';\n\nexport function getCompareTimeRange(timeRange: TimeRange, compareWith: string | undefined): TimeRange | undefined {\n let compareFrom: DateTime;\n let compareTo: DateTime;\n\n if (compareWith) {\n if (compareWith === PREVIOUS_PERIOD_VALUE) {\n const diffMs = timeRange.to.diff(timeRange.from);\n compareFrom = dateTime(timeRange.from!).subtract(diffMs);\n compareTo = dateTime(timeRange.to!).subtract(diffMs);\n } else {\n compareFrom = dateTime(timeRange.from!).subtract(rangeUtil.intervalToMs(compareWith));\n compareTo = dateTime(timeRange.to!).subtract(rangeUtil.intervalToMs(compareWith));\n }\n\n return {\n from: compareFrom,\n to: compareTo,\n raw: {\n from: compareFrom,\n to: compareTo,\n },\n };\n }\n\n return undefined;\n}\n","import { css } from '@emotion/css';\nimport { capitalize } from 'lodash';\n\nimport { DataQueryRequest, dateMath, getDefaultTimeRange, GrafanaTheme2, rangeUtil, TimeRange } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport {\n ExtraQueryDescriptor,\n SceneComponentProps,\n SceneDataQuery,\n sceneGraph,\n SceneTimeRangeLike,\n SceneTimeRangeState,\n SceneTimeRangeTransformerBase,\n VariableDependencyConfig,\n VizPanel,\n} from '@grafana/scenes';\nimport { Icon, PanelChrome, Stack, TimePickerTooltip, Tooltip, useStyles2 } from '@grafana/ui';\nimport { TimeOverrideResult } from 'app/features/dashboard/utils/panel';\n\nimport { getDashboardSceneFor } from '../../utils/utils';\n\nimport { DEFAULT_COMPARE_OPTIONS, PanelTimeRangeDrawer, PanelTimeRangeZoomBehavior } from './PanelTimeRangeDrawer';\nimport { getCompareTimeRange, timeShiftAlignmentProcessor } from './utils';\n\nexport interface PanelTimeRangeState extends SceneTimeRangeState {\n enabled?: boolean;\n timeFrom?: string;\n zoomBehavior?: PanelTimeRangeZoomBehavior;\n timeShift?: string;\n hideTimeOverride?: boolean;\n timeInfo?: string;\n compareWith?: string;\n}\n\nexport class PanelTimeRange extends SceneTimeRangeTransformerBase<PanelTimeRangeState> implements SceneTimeRangeLike {\n public static Component = PanelTimeRangeRenderer;\n\n public constructor(state: Partial<PanelTimeRangeState> = {}) {\n super({\n ...state,\n // This time range is not valid until activation\n from: 'now-6h',\n to: 'now',\n value: getDefaultTimeRange(),\n });\n\n this.addActivationHandler(() => this._onActivate());\n }\n\n protected _variableDependency: VariableDependencyConfig<PanelTimeRangeState> = new VariableDependencyConfig(this, {\n statePaths: ['timeFrom', 'timeShift'],\n });\n\n private _onActivate() {\n this._subs.add(\n this.subscribeToState((n) => {\n const { timeInfo, timeRange } = this.getTimeOverride(this.getAncestorTimeRange().state.value);\n\n // When timeFrom or timeShift is a variable we cannot compare to previous interpolated value\n // therefore we need to compare timeInfo directly and update when required\n // Note: compare to newState.timeInfo because it is always one behind\n if (n.timeInfo !== timeInfo) {\n this.setState({ timeInfo, value: timeRange });\n }\n })\n );\n\n const { timeRange } = this.getTimeOverride(this.getAncestorTimeRange().state.value);\n\n // set initial values on activate\n this.setState({\n value: timeRange,\n from: timeRange.raw.from.toString(),\n to: timeRange.raw.to.toString(),\n });\n }\n\n protected ancestorTimeRangeChanged(timeRange: SceneTimeRangeState): void {\n if (this.state.timeFrom && this.state.zoomBehavior === 'dashboard') {\n return;\n }\n\n const overrideResult = this.getTimeOverride(timeRange.value);\n this.setState({ value: overrideResult.timeRange, timeInfo: overrideResult.timeInfo });\n }\n\n // Get a time shifted request to compare with the primary request.\n public getExtraQueries(request: DataQueryRequest): ExtraQueryDescriptor[] {\n const extraQueries: ExtraQueryDescriptor[] = [];\n const compareRange = getCompareTimeRange(request.range, this.state.compareWith);\n if (!compareRange) {\n return extraQueries;\n }\n\n const targets = request.targets.filter((query: SceneDataQuery) => query.timeRangeCompare !== false);\n if (targets.length) {\n extraQueries.push({\n req: {\n ...request,\n targets,\n range: compareRange,\n },\n processor: timeShiftAlignmentProcessor,\n });\n }\n return extraQueries;\n }\n\n // The query runner should rerun the comparison query if the compareWith value has changed and there are queries that haven't opted out of TWC\n public shouldRerun(prev: PanelTimeRangeState, next: PanelTimeRangeState, queries: SceneDataQuery[]): boolean {\n return (\n prev.compareWith !== next.compareWith && queries.find((query) => query.timeRangeCompare !== false) !== undefined\n );\n }\n\n private getTimeOverride(parentTimeRange: TimeRange): TimeOverrideResult {\n const { timeFrom, timeShift, compareWith } = this.state;\n const infoBlocks = [];\n const newTimeData = { timeInfo: '', timeRange: parentTimeRange };\n\n if (timeFrom) {\n const timeFromInterpolated = sceneGraph.interpolate(this, this.state.timeFrom);\n const timeFromInfo = rangeUtil.describeTextRange(timeFromInterpolated);\n\n if (timeFromInfo.invalid) {\n newTimeData.timeInfo = 'invalid time override';\n return newTimeData;\n }\n\n // Only evaluate if the timeFrom if parent time is relative\n if (rangeUtil.isRelativeTimeRange(parentTimeRange.raw)) {\n const timeZone = this.getTimeZone();\n newTimeData.timeRange = {\n from: dateMath.parse(timeFromInfo.from, undefined, timeZone)!,\n to: dateMath.parse(timeFromInfo.to, undefined, timeZone)!,\n raw: { from: timeFromInfo.from, to: timeFromInfo.to },\n };\n infoBlocks.push(timeFromInfo.display);\n }\n }\n\n if (timeShift) {\n const timeShiftInterpolated = sceneGraph.interpolate(this, this.state.timeShift);\n const timeShiftInfo = rangeUtil.describeTextRange(timeShiftInterpolated);\n\n if (timeShiftInfo.invalid) {\n newTimeData.timeInfo = 'invalid timeshift';\n return newTimeData;\n }\n\n const timeShift = '-' + timeShiftInterpolated;\n infoBlocks.push('timeshift ' + timeShift);\n\n const from = dateMath.parseDateMath(timeShift, newTimeData.timeRange.from, false)!;\n const to = dateMath.parseDateMath(timeShift, newTimeData.timeRange.to, true)!;\n\n if (!from || !to) {\n newTimeData.timeInfo = 'invalid timeshift';\n return newTimeData;\n }\n\n newTimeData.timeRange = { from, to, raw: { from, to } };\n }\n\n if (compareWith) {\n const option = DEFAULT_COMPARE_OPTIONS.find((x) => x.value === compareWith);\n const text = option ? `compared to ${option.label.toLowerCase()}` : '';\n infoBlocks.push(text);\n }\n\n newTimeData.timeInfo = capitalize(infoBlocks.join(' + '));\n return newTimeData;\n }\n\n public onOpenSettings = () => {\n const panel = this.parent;\n const dashboard = getDashboardSceneFor(this);\n if (panel instanceof VizPanel) {\n dashboard.showModal(new PanelTimeRangeDrawer({ panelRef: panel.getRef() }));\n }\n };\n}\n\nfunction PanelTimeRangeRenderer({ model }: SceneComponentProps<PanelTimeRange>) {\n const { timeInfo, hideTimeOverride } = model.useState();\n const styles = useStyles2(getStyles);\n\n if (!timeInfo || hideTimeOverride) {\n return null;\n }\n\n const onClick = config.featureToggles.panelTimeSettings ? model.onOpenSettings : undefined;\n\n return (\n <Tooltip content={<TimePickerTooltip timeRange={model.state.value} timeZone={model.getTimeZone()} />}>\n <PanelChrome.TitleItem className={styles.timeshift} onClick={onClick}>\n <Stack gap={1} alignItems={'center'}>\n <Icon name=\"clock-nine\" size=\"sm\" />\n <div>{timeInfo}</div>\n </Stack>\n </PanelChrome.TitleItem>\n </Tooltip>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n timeshift: css({\n color: theme.colors.text.link,\n gap: theme.spacing(0.5),\n whiteSpace: 'nowrap',\n }),\n };\n};\n","import { countBy, isEqual } from 'lodash';\nimport { useMemo, useRef } from 'react';\n\nimport {\n AlertGroupTotals,\n AlertInstanceTotalState,\n AlertInstanceTotals,\n AlertingRule,\n CombinedRule,\n CombinedRuleGroup,\n CombinedRuleNamespace,\n Rule,\n RuleGroup,\n RuleNamespace,\n RulesSource,\n} from 'app/types/unified-alerting';\nimport {\n PromAlertingRuleState,\n RulerRuleDTO,\n RulerRuleGroupDTO,\n RulerRulesConfigDTO,\n} from 'app/types/unified-alerting-dto';\n\nimport { alertRuleApi } from '../api/alertRuleApi';\nimport { GRAFANA_RULER_CONFIG } from '../api/featureDiscoveryApi';\nimport { RULE_LIST_POLL_INTERVAL_MS } from '../utils/constants';\nimport {\n GRAFANA_RULES_SOURCE_NAME,\n getAllRulesSources,\n getRulesSourceByName,\n isCloudRulesSource,\n isGrafanaRulesSource,\n} from '../utils/datasource';\nimport { hashQuery } from '../utils/rule-id';\nimport { getAnnotations, isPausedRule, prometheusRuleType, rulerRuleType } from '../utils/rules';\n\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\nexport interface CacheValue {\n promRules?: RuleNamespace[];\n rulerRules?: RulerRulesConfigDTO | null;\n result: CombinedRuleNamespace[];\n}\n\n// this little monster combines prometheus rules and ruler rules to produce a unified data structure\n// can limit to a single rules source\nexport function useCombinedRuleNamespaces(\n rulesSourceName?: string,\n grafanaPromRuleNamespaces?: RuleNamespace[]\n): CombinedRuleNamespace[] {\n const promRulesResponses = useUnifiedAlertingSelector((state) => state.promRules);\n const rulerRulesResponses = useUnifiedAlertingSelector((state) => state.rulerRules);\n\n // cache results per rules source, so we only recalculate those for which results have actually changed\n const cache = useRef<Record<string, CacheValue>>({});\n\n const rulesSources = useMemo((): RulesSource[] => {\n if (rulesSourceName) {\n const rulesSource = getRulesSourceByName(rulesSourceName);\n if (!rulesSource) {\n throw new Error(`Unknown rules source: ${rulesSourceName}`);\n }\n return [rulesSource];\n }\n return getAllRulesSources();\n }, [rulesSourceName]);\n\n return useMemo(() => {\n return rulesSources\n .map((rulesSource): CombinedRuleNamespace[] => {\n const rulesSourceName = isCloudRulesSource(rulesSource) ? rulesSource.name : rulesSource;\n const rulerRules = rulerRulesResponses[rulesSourceName]?.result;\n\n let promRules = promRulesResponses[rulesSourceName]?.result;\n if (rulesSourceName === GRAFANA_RULES_SOURCE_NAME && grafanaPromRuleNamespaces) {\n promRules = grafanaPromRuleNamespaces;\n }\n\n const cached = cache.current[rulesSourceName];\n if (cached && cached.promRules === promRules && cached.rulerRules === rulerRules) {\n return cached.result;\n }\n const namespaces: Record<string, CombinedRuleNamespace> = {};\n\n // first get all the ruler rules from the data source\n Object.entries(rulerRules || {}).forEach(([namespaceName, groups]) => {\n const namespace: CombinedRuleNamespace = {\n rulesSource,\n name: namespaceName,\n groups: [],\n };\n\n // We need to set the namespace_uid for grafana rules as it's required to obtain the rule's groups\n // All rules from all groups have the same namespace_uid so we're taking the first one.\n if (rulerRuleType.grafana.rule(groups[0].rules[0])) {\n namespace.uid = groups[0].rules[0].grafana_alert.namespace_uid;\n }\n\n namespaces[namespaceName] = namespace;\n addRulerGroupsToCombinedNamespace(namespace, groups);\n });\n\n // then correlate with prometheus rules\n promRules?.forEach(({ name: namespaceName, groups }) => {\n const ns = (namespaces[namespaceName] = namespaces[namespaceName] || {\n rulesSource,\n name: namespaceName,\n groups: [],\n });\n\n addPromGroupsToCombinedNamespace(ns, groups);\n });\n\n const result = Object.values(namespaces);\n\n cache.current[rulesSourceName] = { promRules, rulerRules, result };\n return result;\n })\n .flat();\n }, [promRulesResponses, rulerRulesResponses, rulesSources, grafanaPromRuleNamespaces]);\n}\n\nexport function combineRulesNamespace(\n rulesSource: RulesSource,\n promNamespaces: RuleNamespace[],\n rulerRules?: RulerRulesConfigDTO\n): CombinedRuleNamespace[] {\n const namespaces: Record<string, CombinedRuleNamespace> = {};\n\n // first get all the ruler rules from the data source\n Object.entries(rulerRules || {}).forEach(([namespaceName, groups]) => {\n const namespace: CombinedRuleNamespace = {\n rulesSource,\n name: namespaceName,\n groups: [],\n };\n namespaces[namespaceName] = namespace;\n addRulerGroupsToCombinedNamespace(namespace, groups);\n });\n\n // then correlate with prometheus rules\n promNamespaces?.forEach(({ name: namespaceName, groups }) => {\n const ns = (namespaces[namespaceName] = namespaces[namespaceName] || {\n rulesSource,\n name: namespaceName,\n groups: [],\n });\n\n addPromGroupsToCombinedNamespace(ns, groups);\n });\n\n return Object.values(namespaces);\n}\n\nexport function attachRulerRulesToCombinedRules(\n rulesSource: RulesSource,\n promNamespace: RuleNamespace,\n rulerGroups: RulerRuleGroupDTO[]\n): CombinedRuleNamespace {\n const ns: CombinedRuleNamespace = {\n rulesSource: rulesSource,\n name: promNamespace.name,\n groups: [],\n };\n\n // The order is important. Adding Ruler rules overrides Prometheus rules.\n addRulerGroupsToCombinedNamespace(ns, rulerGroups);\n addPromGroupsToCombinedNamespace(ns, promNamespace.groups);\n\n // Remove ruler rules which does not have Prom rule counterpart\n // This function should only attach Ruler rules to existing Prom rules\n ns.groups.forEach((group) => {\n group.rules = group.rules.filter((rule) => rule.promRule);\n });\n\n return ns;\n}\n\nexport function attachRulerRuleToCombinedRule(rule: CombinedRule, rulerGroup: RulerRuleGroupDTO): void {\n if (!rule.promRule) {\n return;\n }\n\n const combinedRulesFromRuler = rulerGroup.rules.map((rulerRule) =>\n rulerRuleToCombinedRule(rulerRule, rule.namespace, rule.group)\n );\n const existingRulerRulesByUidOrName = combinedRulesFromRuler.reduce((acc, rule) => {\n const sameNameOrUidRules = acc.get(getIdToCompare(rule));\n if (sameNameOrUidRules) {\n sameNameOrUidRules.push(rule);\n } else {\n acc.set(getIdToCompare(rule), [rule]);\n }\n return acc;\n }, new Map<string, CombinedRule[]>());\n\n const matchingRulerRule = getExistingRuleInGroup(\n rule.promRule,\n existingRulerRulesByUidOrName,\n rule.namespace.rulesSource\n );\n if (matchingRulerRule) {\n rule.rulerRule = matchingRulerRule.rulerRule;\n rule.query = matchingRulerRule.query;\n rule.labels = matchingRulerRule.labels;\n rule.annotations = matchingRulerRule.annotations;\n }\n}\n\nexport function addCombinedPromAndRulerGroups(\n ns: CombinedRuleNamespace,\n promGroups: RuleGroup[],\n rulerGroups: RulerRuleGroupDTO[]\n): CombinedRuleNamespace {\n addRulerGroupsToCombinedNamespace(ns, rulerGroups);\n addPromGroupsToCombinedNamespace(ns, promGroups);\n return ns;\n}\n\n// merge all groups in case of grafana managed, essentially treating namespaces (folders) as groups\nexport function flattenGrafanaManagedRules(namespaces: CombinedRuleNamespace[]) {\n return namespaces.map((namespace) => {\n const newNamespace: CombinedRuleNamespace = {\n ...namespace,\n groups: [],\n };\n\n // add default group with ungrouped rules\n newNamespace.groups.push({\n name: 'default',\n rules: sortRulesByName(namespace.groups.flatMap((group) => group.rules)),\n totals: calculateAllGroupsTotals(namespace.groups),\n });\n\n return newNamespace;\n });\n}\n\nexport function sortRulesByName(rules: CombinedRule[]) {\n return rules.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function addRulerGroupsToCombinedNamespace(\n namespace: CombinedRuleNamespace,\n groups: RulerRuleGroupDTO[] = []\n): void {\n namespace.groups = groups.map((group) => {\n const numRecordingRules = group.rules.filter((rule) => rulerRuleType.any.recordingRule(rule)).length;\n const numPaused = group.rules.filter((rule) => {\n return rulerRuleType.grafana.alertingRule(rule) && isPausedRule(rule);\n }).length;\n\n const combinedGroup: CombinedRuleGroup = {\n name: group.name,\n interval: group.interval,\n source_tenants: group.source_tenants,\n rules: [],\n totals: {\n paused: numPaused,\n recording: numRecordingRules,\n },\n };\n combinedGroup.rules = group.rules.map((rule) => rulerRuleToCombinedRule(rule, namespace, combinedGroup));\n return combinedGroup;\n });\n}\n\nexport function addPromGroupsToCombinedNamespace(namespace: CombinedRuleNamespace, groups: RuleGroup[]): void {\n const existingGroupsByName = new Map<string, CombinedRuleGroup>();\n namespace.groups.forEach((group) => existingGroupsByName.set(group.name, group));\n\n groups.forEach((group) => {\n let combinedGroup = existingGroupsByName.get(group.name);\n if (!combinedGroup) {\n combinedGroup = {\n name: group.name,\n rules: [],\n totals: calculateGroupTotals(group),\n };\n namespace.groups.push(combinedGroup);\n existingGroupsByName.set(group.name, combinedGroup);\n }\n\n // combine totals from ruler with totals from prometheus state API\n combinedGroup.totals = {\n ...combinedGroup.totals,\n ...calculateGroupTotals(group),\n };\n\n const combinedRulesByUidOrName = new Map<string, CombinedRule[]>();\n combinedGroup!.rules.forEach((r) => {\n // Prometheus rules do not have to be unique by name\n const existingRule = combinedRulesByUidOrName.get(getIdToCompare(r));\n existingRule ? existingRule.push(r) : combinedRulesByUidOrName.set(getIdToCompare(r), [r]);\n });\n\n (group.rules ?? []).forEach((rule) => {\n const existingRule = getExistingRuleInGroup(rule, combinedRulesByUidOrName, namespace.rulesSource);\n if (existingRule) {\n existingRule.promRule = rule;\n existingRule.instanceTotals = prometheusRuleType.alertingRule(rule) ? calculateRuleTotals(rule) : {};\n existingRule.filteredInstanceTotals = prometheusRuleType.alertingRule(rule)\n ? calculateRuleFilteredTotals(rule)\n : {};\n } else {\n combinedGroup!.rules.push(promRuleToCombinedRule(rule, namespace, combinedGroup!));\n }\n });\n });\n}\n\nexport function calculateRuleTotals(rule: Pick<AlertingRule, 'alerts' | 'totals'>): AlertInstanceTotals {\n const result = countBy(rule.alerts, 'state');\n\n if (rule.totals) {\n const { normal, ...totals } = rule.totals;\n return { ...totals, inactive: normal };\n }\n\n return {\n alerting: result[AlertInstanceTotalState.Alerting] || result.firing,\n pending: result[AlertInstanceTotalState.Pending],\n recovering: result[AlertInstanceTotalState.Recovering],\n inactive: result[AlertInstanceTotalState.Normal],\n nodata: result[AlertInstanceTotalState.NoData],\n error: result[AlertInstanceTotalState.Error] || result.err || undefined, // Prometheus uses \"err\" instead of \"error\"\n };\n}\n\nexport function calculateRuleFilteredTotals(\n rule: Pick<AlertingRule, 'alerts' | 'totalsFiltered'>\n): AlertInstanceTotals {\n if (rule.totalsFiltered) {\n const { normal, ...totals } = rule.totalsFiltered;\n return { ...totals, inactive: normal };\n }\n return {};\n}\n\nexport function calculateGroupTotals(group: Pick<RuleGroup, 'rules' | 'totals'>): AlertGroupTotals {\n if (group.totals) {\n const { firing, ...totals } = group.totals;\n\n return {\n ...totals,\n alerting: firing,\n };\n }\n\n const countsByState = countBy(group.rules, (rule) => prometheusRuleType.alertingRule(rule) && rule.state);\n const countsByHealth = countBy(group.rules, (rule) => rule.health);\n const recordingCount = group.rules.filter((rule) => prometheusRuleType.recordingRule(rule)).length;\n\n return {\n alerting: countsByState[PromAlertingRuleState.Firing],\n error: countsByHealth.error,\n nodata: countsByHealth.nodata,\n inactive: countsByState[PromAlertingRuleState.Inactive],\n pending: countsByState[PromAlertingRuleState.Pending],\n recovering: countsByState[PromAlertingRuleState.Recovering],\n recording: recordingCount,\n };\n}\n\nfunction calculateAllGroupsTotals(groups: CombinedRuleGroup[]): AlertGroupTotals {\n const totals: Record<string, number> = {};\n\n groups.forEach((group) => {\n const groupTotals = group.totals;\n Object.entries(groupTotals).forEach(([key, value]) => {\n if (!totals[key]) {\n totals[key] = 0;\n }\n\n if (value !== undefined && value !== null) {\n totals[key] += value;\n }\n });\n });\n\n return totals;\n}\n\nfunction promRuleToCombinedRule(rule: Rule, namespace: CombinedRuleNamespace, group: CombinedRuleGroup): CombinedRule {\n return {\n name: rule.name,\n query: rule.query,\n labels: rule.labels || {},\n annotations: prometheusRuleType.alertingRule(rule) ? getAnnotations(rule) : {},\n promRule: rule,\n namespace: namespace,\n group,\n instanceTotals: prometheusRuleType.alertingRule(rule) ? calculateRuleTotals(rule) : {},\n filteredInstanceTotals: prometheusRuleType.alertingRule(rule) ? calculateRuleFilteredTotals(rule) : {},\n };\n}\n\nfunction rulerRuleToCombinedRule(\n rule: RulerRuleDTO,\n namespace: CombinedRuleNamespace,\n group: CombinedRuleGroup\n): CombinedRule {\n const commonProps = {\n labels: rule.labels || {},\n rulerRule: rule,\n namespace,\n group,\n instanceTotals: {},\n filteredInstanceTotals: {},\n uid: rulerRuleType.grafana.rule(rule) ? rule.grafana_alert.uid : undefined,\n };\n\n if (rulerRuleType.dataSource.alertingRule(rule)) {\n return {\n ...commonProps,\n name: rule.alert,\n query: rule.expr,\n annotations: rule.annotations || {},\n };\n }\n if (rulerRuleType.dataSource.recordingRule(rule)) {\n return {\n ...commonProps,\n name: rule.record,\n query: rule.expr,\n annotations: {},\n };\n }\n return {\n ...commonProps,\n name: rule.grafana_alert.title,\n query: '',\n annotations: rule.annotations || {},\n };\n}\n\n// find existing rule in group that matches the given prom rule\nfunction getExistingRuleInGroup(\n rule: Rule,\n existingCombinedRulesMap: Map<string, CombinedRule[]>, // map by uid\n rulesSource: RulesSource\n): CombinedRule | undefined {\n // Using Map of name-based rules is important performance optimization for the code below\n // Otherwise we would perform find method multiple times on (possibly) thousands of rules\n\n const fieldToSearch = getIdToCompare(rule);\n const uidOrNameMatchingRules = existingCombinedRulesMap.get(fieldToSearch);\n if (!uidOrNameMatchingRules) {\n return undefined;\n }\n\n if (isGrafanaRulesSource(rulesSource)) {\n return uidOrNameMatchingRules[0];\n }\n\n // try finding a rule that matches name, labels, annotations and query\n const strictlyMatchingRule = uidOrNameMatchingRules.find(\n (combinedRule) => !combinedRule.promRule && isCombinedRuleEqualToPromRule(combinedRule, rule, true)\n );\n if (strictlyMatchingRule) {\n return strictlyMatchingRule;\n }\n\n // if that fails, try finding a rule that only matches name, labels and annotations.\n // loki & prom can sometimes modify the query so it doesnt match, eg `2 > 1` becomes `1`\n const looselyMatchingRule = uidOrNameMatchingRules.find(\n (combinedRule) => !combinedRule.promRule && isCombinedRuleEqualToPromRule(combinedRule, rule, false)\n );\n if (looselyMatchingRule) {\n return looselyMatchingRule;\n }\n\n return undefined;\n}\n\nfunction isCombinedRuleEqualToPromRule(combinedRule: CombinedRule, rule: Rule, checkQuery = true): boolean {\n const promRuleAnnotations = prometheusRuleType.alertingRule(rule) ? getAnnotations(rule) : {};\n const promRuleLabels = rule.labels ?? {};\n const promQuery = checkQuery ? hashQuery(rule.query) : '';\n\n const combinedRuleAnnotations = combinedRule.annotations;\n const combinedRuleLabels = combinedRule.labels;\n const combinedRuleQuery = checkQuery ? hashQuery(combinedRule.query) : '';\n\n if (combinedRule.name === rule.name) {\n return isEqual(\n [combinedRuleQuery, combinedRuleLabels, combinedRuleAnnotations],\n [promQuery, promRuleLabels, promRuleAnnotations]\n );\n }\n return false;\n}\n\n/*\n This hook returns combined Grafana rules. Optionally, it can filter rules by dashboard UID and panel ID.\n*/\nexport function useCombinedRules(\n dashboardUID?: string | null,\n panelId?: number,\n poll?: boolean\n): {\n loading: boolean;\n result?: CombinedRuleNamespace[];\n error?: unknown;\n} {\n const isNewDashboard = !Boolean(dashboardUID);\n\n const {\n currentData: promRuleNs,\n isLoading: isLoadingPromRules,\n error: promRuleNsError,\n } = alertRuleApi.endpoints.prometheusRuleNamespaces.useQuery(\n {\n ruleSourceName: GRAFANA_RULES_SOURCE_NAME,\n dashboardUid: dashboardUID ?? undefined,\n panelId,\n },\n {\n skip: isNewDashboard,\n pollingInterval: poll ? RULE_LIST_POLL_INTERVAL_MS : undefined,\n }\n );\n\n const {\n currentData: rulerRules,\n isLoading: isLoadingRulerRules,\n error: rulerRulesError,\n } = alertRuleApi.endpoints.rulerRules.useQuery(\n {\n rulerConfig: GRAFANA_RULER_CONFIG,\n filter: { dashboardUID: dashboardUID ?? undefined, panelId },\n },\n {\n pollingInterval: poll ? RULE_LIST_POLL_INTERVAL_MS : undefined,\n skip: isNewDashboard,\n }\n );\n\n //---------\n // cache results per rules source, so we only recalculate those for which results have actually changed\n const cache = useRef<Record<string, CacheValue>>({});\n\n const rulesSource = getRulesSourceByName(GRAFANA_RULES_SOURCE_NAME);\n\n const rules = useMemo(() => {\n if (!rulesSource) {\n return [];\n }\n\n const cached = cache.current[GRAFANA_RULES_SOURCE_NAME];\n if (cached && cached.promRules === promRuleNs && cached.rulerRules === rulerRules) {\n return cached.result;\n }\n const namespaces: Record<string, CombinedRuleNamespace> = {};\n\n // first get all the ruler rules from the data source\n Object.entries(rulerRules || {}).forEach(([namespaceName, groups]) => {\n const namespace: CombinedRuleNamespace = {\n rulesSource,\n name: namespaceName,\n groups: [],\n };\n\n // We need to set the namespace_uid for grafana rules as it's required to obtain the rule's groups\n // All rules from all groups have the same namespace_uid so we're taking the first one.\n if (rulerRuleType.grafana.rule(groups[0].rules[0])) {\n namespace.uid = groups[0].rules[0].grafana_alert.namespace_uid;\n }\n\n namespaces[namespaceName] = namespace;\n addRulerGroupsToCombinedNamespace(namespace, groups);\n });\n\n // then correlate with prometheus rules\n promRuleNs?.forEach(({ name: namespaceName, groups }) => {\n const ns = (namespaces[namespaceName] = namespaces[namespaceName] || {\n rulesSource,\n name: namespaceName,\n groups: [],\n });\n\n addPromGroupsToCombinedNamespace(ns, groups);\n });\n\n const result = Object.values(namespaces);\n\n cache.current[GRAFANA_RULES_SOURCE_NAME] = { promRules: promRuleNs, rulerRules, result };\n return result;\n }, [promRuleNs, rulerRules, rulesSource]);\n\n return {\n loading: isLoadingPromRules || isLoadingRulerRules,\n error: promRuleNsError ?? rulerRulesError,\n result: rules,\n };\n}\n/**\n * Returns the ID of the rule to compare.\n * If the rule has a UID, it will be used, otherwise the rule name will be used.\n * cloud rules don't have a UID, so the name will be used.\n */\nfunction getIdToCompare(rule: CombinedRule | Rule): string {\n if (Boolean(rule.uid)) {\n return rule.uid ?? '';\n }\n return rule.name;\n}\n","import { config, reportInteraction } from '@grafana/runtime';\n\nimport { DashboardTrackingInfo, DynamicDashboardsTrackingInformation } from '../serialization/DashboardSceneSerializer';\n\nlet isScenesContextSet = false;\n\ntype DashboardLibraryTrackingInfo = {\n pluginId?: string;\n sourceEntryPoint?: string;\n libraryItemId?: string;\n creationOrigin?: string;\n};\n\nexport const DashboardInteractions = {\n // Dashboard interactions:\n dashboardInitialized: (\n properties: { theme: undefined; duration: number | undefined; isScene: boolean } & Partial<DashboardTrackingInfo> &\n Partial<DynamicDashboardsTrackingInformation> &\n Partial<{ version_before_migration: number | undefined }>\n ) => {\n reportDashboardInteraction('init_dashboard_completed', properties);\n },\n\n dashboardCopied: (properties: { name: string; url: string }) => {\n reportInteraction('grafana_dashboard_copied', properties);\n },\n\n dashboardCreatedOrSaved: (\n isNew: boolean | undefined,\n properties:\n | ({ name: string; url: string } & DashboardLibraryTrackingInfo)\n | ({\n name: string;\n url: string;\n numPanels: number;\n uid: string;\n conditionalRenderRules: number;\n autoLayoutCount: number;\n customGridLayoutCount: number;\n panelsByDatasourceType: Record<string, number>;\n } & DashboardLibraryTrackingInfo)\n ) => {\n reportDashboardInteraction(isNew ? 'created' : 'saved', properties, 'grafana_dashboard');\n },\n\n // grafana_dashboards_edit_button_clicked\n // when a user clicks the ‘edit’ or ‘make editable’ button in a dashboard view mode\n editButtonClicked: (properties: { outlineExpanded: boolean; dashboardUid?: string }) => {\n reportDashboardInteraction('edit_button_clicked', properties);\n },\n\n // grafana_dashboards_exit_edit_button_clicked\n // when a user clicks the ‘Exit edit’ or ‘Exit Edit mode’ button in a dashboard edit mode\n exitEditButtonClicked: () => {\n reportDashboardInteraction('exit_edit_button_clicked');\n },\n\n // grafana_dashboards_outline_clicked\n // when a user opens the outline view\n dashboardOutlineClicked: () => {\n reportDashboardInteraction('outline_clicked');\n },\n\n // grafana_dashboards_outline_item_clicked\n // when a user clicks on an element of the outline\n outlineItemClicked: (properties: { index: number; depth: number }) => {\n reportDashboardInteraction('outline_item_clicked', properties);\n },\n\n // dashboards_add_variable_button_clicked\n // when a user clicks on ‘Add Variable’ or ‘New Variable’\n addVariableButtonClicked: (properties: { source: 'edit_pane' | 'settings_pane' | 'variable_controls' }) => {\n reportDashboardInteraction('add_variable_button_clicked', properties);\n },\n\n // Dashboard edit item actions\n // dashboards_edit_action_clicked: when user adds or removes an item in edit mode\n // props: { item: string } - item is one of: add_panel, group_row, group_tab, ungroup, paste_panel, remove_row, remove_tab\n trackAddPanelClick() {\n reportDashboardInteraction('edit_action_clicked', { item: 'add_panel' });\n },\n trackGroupRowClick() {\n reportDashboardInteraction('edit_action_clicked', { item: 'group_row' });\n },\n trackGroupTabClick() {\n reportDashboardInteraction('edit_action_clicked', { item: 'group_tab' });\n },\n trackUngroupClick() {\n reportDashboardInteraction('edit_action_clicked', { item: 'ungroup' });\n },\n trackPastePanelClick() {\n reportDashboardInteraction('edit_action_clicked', { item: 'paste_panel' });\n },\n trackRemoveRowClick() {\n reportDashboardInteraction('edit_action_clicked', { item: 'remove_row' });\n },\n trackRemoveTabClick() {\n reportDashboardInteraction('edit_action_clicked', { item: 'remove_tab' });\n },\n\n panelLinkClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('panelheader_datalink_clicked', properties);\n },\n panelStatusMessageClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('panelheader_statusmessage_clicked', properties);\n },\n panelCancelQueryClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('panelheader_cancelquery_clicked', properties);\n },\n\n // Dashboard interactions from toolbar\n toolbarFavoritesClick: () => {\n reportDashboardInteraction('toolbar_actions_clicked', { item: 'favorites' });\n },\n toolbarSettingsClick: () => {\n reportDashboardInteraction('toolbar_actions_clicked', { item: 'settings' });\n },\n toolbarShareClick: () => {\n reportDashboardInteraction('toolbar_actions_clicked', { item: 'share' });\n },\n toolbarShareDropdownClick: () => {\n reportDashboardInteraction('toolbar_actions_clicked', { item: 'share_dropdown' });\n },\n toolbarAddClick: () => {\n reportDashboardInteraction('toolbar_actions_clicked', { item: 'add' });\n },\n\n // Sharing interactions:\n sharingCategoryClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_category_clicked', properties);\n },\n shareLinkCopied: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_link_copy_clicked', properties);\n },\n embedSnippetCopy: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_embed_copy_clicked', properties);\n },\n generatePanelImageClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_link_generate_image_clicked', properties);\n },\n downloadPanelImageClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_link_download_image_clicked', properties);\n },\n publishSnapshotClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_snapshot_publish_clicked', properties);\n },\n publishSnapshotLocalClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_snapshot_local_clicked', properties);\n },\n exportDownloadJsonClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_export_download_json_clicked', properties);\n },\n exportCopyJsonClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_export_copy_json_clicked', properties);\n },\n exportSaveJsonClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_export_save_json_clicked', properties);\n },\n exportViewJsonClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_export_view_json_clicked', properties);\n },\n generatePublicDashboardUrlClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_generate_url_clicked', properties);\n },\n revokePublicDashboardEmailClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_email_revoke_clicked', properties);\n },\n resendPublicDashboardEmailClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_email_resend_clicked', properties);\n },\n publicDashboardEmailInviteClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_email_invite_clicked', properties);\n },\n publicDashboardShareTypeChange: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_can_view_clicked', properties);\n },\n publicDashboardTimeSelectionChanged: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_time_picker_clicked', properties);\n },\n publicDashboardAnnotationsSelectionChanged: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_annotations_clicked', properties);\n },\n publicDashboardUrlCopied: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_copy_url_clicked', properties);\n },\n publicDashboardPauseSharingClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_pause_clicked', properties);\n },\n revokePublicDashboardClicked: (properties?: Record<string, unknown>) => {\n reportSharingInteraction('sharing_public_revoke_clicked', properties);\n },\n\n // Empty dashboard state interactions:\n emptyDashboardButtonClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('emptydashboard_clicked', properties);\n },\n\n // Toolbar interactions\n toolbarAddButtonClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('toolbar_add_clicked', properties);\n },\n setScenesContext: () => {\n isScenesContextSet = true;\n\n return () => {\n isScenesContextSet = false;\n };\n },\n\n // Dashboards versions interactions\n versionRestoreClicked: (properties: { version: number; index?: number; confirm: boolean; version_date?: Date }) => {\n reportDashboardInteraction('version_restore_clicked', properties);\n },\n showMoreVersionsClicked: () => {\n reportDashboardInteraction('show_more_versions_clicked');\n },\n\n // Image export interactions\n generateDashboardImageClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('dashboard_image_generated', properties);\n },\n downloadDashboardImageClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('dashboard_image_downloaded', properties);\n },\n copyImageUrlClicked: (properties?: Record<string, unknown>) => {\n reportDashboardInteraction('dashboard_image_url_copied', properties);\n },\n};\n\nconst reportDashboardInteraction = (\n name: string,\n properties?: Record<string, unknown>,\n interactionPrefix = 'dashboards'\n) => {\n const meta = isScenesContextSet ? { scenesView: true } : {};\n const isDynamicDashboard = config.featureToggles?.dashboardNewLayouts ?? false;\n\n if (properties) {\n reportInteraction(`${interactionPrefix}_${name}`, { ...properties, ...meta, isDynamicDashboard });\n } else {\n reportInteraction(`${interactionPrefix}_${name}`, { isDynamicDashboard });\n }\n};\n\nconst reportSharingInteraction: typeof reportInteraction = (name, properties) => {\n const meta = isScenesContextSet ? { scenesView: true } : {};\n\n if (properties) {\n reportInteraction(`dashboards_${name}`, { ...properties, ...meta });\n } else {\n reportInteraction(`dashboards_${name}`);\n }\n};\n","import { produce } from 'immer';\nimport { isEqual } from 'lodash';\n\nimport { t } from '@grafana/i18n';\nimport { EditableRuleIdentifier, RuleGroupIdentifier } from 'app/types/unified-alerting';\nimport { PostableRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { alertRuleApi } from '../../api/alertRuleApi';\nimport { addRuleAction, updateRuleAction } from '../../reducers/ruler/ruleGroups';\nimport { isGrafanaRuleIdentifier, rulerRuleType } from '../../utils/rules';\nimport { useAsync } from '../useAsync';\n\nimport { useDeleteRuleFromGroup } from './useDeleteRuleFromGroup';\nimport { useProduceNewRuleGroup } from './useProduceNewRuleGroup';\n\n/**\n * This hook will add a single rule to a rule group – a new rule group will be created if it does not already exist.\n */\nexport function useAddRuleToRuleGroup() {\n const [produceNewRuleGroup] = useProduceNewRuleGroup();\n const [upsertRuleGroup] = alertRuleApi.endpoints.upsertRuleGroupForNamespace.useMutation();\n\n const successMessage = t('alerting.rules.add-rule.success', 'Rule added successfully');\n\n return useAsync(async (ruleGroup: RuleGroupIdentifier, rule: PostableRuleDTO, interval?: string) => {\n const { namespaceName } = ruleGroup;\n\n // the new rule might have to be created in a new group, pass name and interval (optional) to the action\n const action = addRuleAction({ rule, interval, groupName: ruleGroup.groupName });\n const { newRuleGroupDefinition, rulerConfig } = await produceNewRuleGroup(ruleGroup, [action]);\n\n const result = upsertRuleGroup({\n rulerConfig,\n namespace: namespaceName,\n payload: newRuleGroupDefinition,\n notificationOptions: { successMessage },\n }).unwrap();\n\n return result;\n });\n}\n\n/**\n * This hook will update an existing rule within a rule group, does not support moving the rule to another namespace / group\n */\nexport function useUpdateRuleInRuleGroup() {\n const [produceNewRuleGroup] = useProduceNewRuleGroup();\n const [moveRuleToGroup] = useMoveRuleToRuleGroup();\n const [upsertRuleGroup] = alertRuleApi.endpoints.upsertRuleGroupForNamespace.useMutation();\n\n const successMessage = t('alerting.rules.update-rule.success', 'Rule updated successfully');\n\n return useAsync(\n async (\n ruleGroup: RuleGroupIdentifier,\n ruleIdentifier: EditableRuleIdentifier,\n ruleDefinition: PostableRuleDTO,\n targetRuleGroup?: RuleGroupIdentifier,\n interval?: string\n ) => {\n const { namespaceName } = ruleGroup;\n const finalRuleDefinition = copyGrafanaUID(ruleIdentifier, ruleDefinition);\n\n // check if the existing rule and the form values have the same rule group identifier\n const sameTargetRuleGroup = isEqual(ruleGroup, targetRuleGroup);\n if (targetRuleGroup && !sameTargetRuleGroup) {\n const result = moveRuleToGroup.execute(ruleGroup, targetRuleGroup, ruleIdentifier, ruleDefinition, interval);\n return result;\n }\n\n const action = updateRuleAction({ identifier: ruleIdentifier, rule: finalRuleDefinition });\n const { newRuleGroupDefinition, rulerConfig } = await produceNewRuleGroup(ruleGroup, [action]);\n\n return upsertRuleGroup({\n rulerConfig,\n namespace: namespaceName,\n payload: newRuleGroupDefinition,\n notificationOptions: { successMessage },\n }).unwrap();\n }\n );\n}\n\n/**\n * This hook will move an existing rule to another namespace or group. The rule definition can also be modified.\n * For Grafana-managed rules we can perform a single atomic move operation by copying the rule UID from the previous rule definition.\n */\nexport function useMoveRuleToRuleGroup() {\n const [produceNewRuleGroup] = useProduceNewRuleGroup();\n const [deleteRuleFromGroup] = useDeleteRuleFromGroup();\n const [upsertRuleGroup] = alertRuleApi.endpoints.upsertRuleGroupForNamespace.useMutation();\n\n const successMessage = t('alerting.rules.update-rule.success', 'Rule updated successfully');\n\n return useAsync(\n async (\n currentRuleGroup: RuleGroupIdentifier,\n targetRuleGroup: RuleGroupIdentifier,\n ruleIdentifier: EditableRuleIdentifier,\n ruleDefinition: PostableRuleDTO,\n interval?: string\n ) => {\n const finalRuleDefinition = copyGrafanaUID(ruleIdentifier, ruleDefinition);\n\n // 1. add the rule to the new namespace / group / ruler target\n const addRuleToGroup = addRuleAction({ rule: finalRuleDefinition, interval });\n const { newRuleGroupDefinition: newTargetGroup, rulerConfig: targetGroupRulerConfig } = await produceNewRuleGroup(\n targetRuleGroup,\n [addRuleToGroup]\n );\n\n const result = await upsertRuleGroup({\n rulerConfig: targetGroupRulerConfig,\n namespace: targetRuleGroup.namespaceName,\n payload: newTargetGroup,\n notificationOptions: { successMessage },\n }).unwrap();\n\n // 2. if not Grafana-managed: remove the rule from the existing namespace / group / ruler\n if (!isGrafanaRuleIdentifier(ruleIdentifier)) {\n await deleteRuleFromGroup.execute(currentRuleGroup, ruleIdentifier);\n }\n\n return result;\n }\n );\n}\n\nfunction copyGrafanaUID(ruleIdentifier: EditableRuleIdentifier, ruleDefinition: PostableRuleDTO) {\n const isGrafanaManagedRuleIdentifier = isGrafanaRuleIdentifier(ruleIdentifier);\n\n // by copying over the rule UID the backend will perform an atomic move operation\n // so there is no need for us to manually remove it from the previous group\n return produce(ruleDefinition, (draft) => {\n const isGrafanaManagedRuleDefinition = rulerRuleType.grafana.rule(draft);\n\n if (isGrafanaManagedRuleIdentifier && isGrafanaManagedRuleDefinition) {\n draft.grafana_alert.uid = ruleIdentifier.uid;\n }\n });\n}\n","import uPlot, { Axis } from 'uplot';\n\nimport {\n dateTimeFormat,\n DecimalCount,\n GrafanaTheme2,\n guessDecimals,\n isBooleanUnit,\n roundDecimals,\n systemDateFormats,\n TimeZone,\n} from '@grafana/data';\nimport { AxisPlacement, ScaleDistribution } from '@grafana/schema';\n\nimport { measureText } from '../../../utils/measureText';\nimport { PlotConfigBuilder } from '../types';\n\nimport { optMinMax } from './UPlotScaleBuilder';\n\nexport interface AxisProps {\n scaleKey: string;\n theme: GrafanaTheme2;\n label?: string;\n show?: boolean;\n size?: number | null;\n gap?: number;\n tickLabelRotation?: number;\n placement?: AxisPlacement;\n grid?: Axis.Grid;\n ticks?: Axis.Ticks;\n filter?: Axis.Filter;\n space?: Axis.Space;\n formatValue?: (v: any, decimals?: DecimalCount) => string;\n incrs?: Axis.Incrs;\n splits?: Axis.Splits;\n values?: Axis.Values;\n isTime?: boolean;\n timeZone?: TimeZone;\n color?: uPlot.Axis.Stroke;\n border?: uPlot.Axis.Border;\n decimals?: DecimalCount;\n distr?: ScaleDistribution;\n}\n\nexport const UPLOT_AXIS_FONT_SIZE = 12;\n\n// for panels with small heights, we increase tick density by reducing the minumum tick spacing\n// all values in CSS pixels\nconst Y_TICK_SPACING_PANEL_HEIGHT = 150;\nconst Y_TICK_SPACING_NORMAL = 30;\nconst Y_TICK_SPACING_SMALL = 15;\n\nconst X_TICK_SPACING_NORMAL = 40;\nconst X_TICK_VALUE_GAP = 18;\n\nconst labelPad = 8;\n\nexport class UPlotAxisBuilder extends PlotConfigBuilder<AxisProps, Axis> {\n merge(props: AxisProps) {\n this.props.size = optMinMax('max', this.props.size, props.size);\n if (!this.props.label) {\n this.props.label = props.label;\n }\n if (this.props.placement === AxisPlacement.Auto) {\n this.props.placement = props.placement;\n }\n }\n\n getConfig(): Axis {\n let {\n scaleKey,\n label,\n show = true,\n placement = AxisPlacement.Auto,\n grid = { show: true },\n ticks,\n space,\n filter,\n gap = 5,\n formatValue,\n splits,\n values,\n incrs,\n isTime,\n timeZone,\n theme,\n tickLabelRotation,\n size,\n color,\n border,\n decimals,\n distr = ScaleDistribution.Linear,\n } = this.props;\n\n const font = `${UPLOT_AXIS_FONT_SIZE}px ${theme.typography.fontFamily}`;\n\n const gridColor = theme.isDark ? 'rgba(240, 250, 255, 0.09)' : 'rgba(0, 10, 23, 0.09)';\n\n // TODO: this is pretty flimsy now that scaleKey is composed from multiple parts :/\n if (isBooleanUnit(scaleKey)) {\n splits = [0, 1];\n }\n\n if (decimals === 0 && distr === ScaleDistribution.Linear) {\n filter = (u, splits) => splits.map((v) => (Number.isInteger(v) ? v : null));\n }\n\n let config: Axis = {\n scale: scaleKey,\n show,\n stroke: color ?? theme.colors.text.primary,\n side: getUPlotSideFromAxis(placement),\n font,\n size:\n size ??\n ((self, values, axisIdx) => {\n return calculateAxisSize(self, values, axisIdx);\n }),\n rotate: tickLabelRotation,\n gap,\n\n labelGap: 0,\n\n grid: {\n show: grid.show,\n stroke: gridColor,\n width: 1 / devicePixelRatio,\n },\n ticks: Object.assign(\n {\n show: true,\n stroke: border?.show ? (color ?? theme.colors.text.primary) : gridColor,\n width: 1 / devicePixelRatio,\n size: 4,\n },\n ticks\n ),\n splits,\n values,\n space:\n space ??\n ((self, axisIdx, scaleMin, scaleMax, plotDim) => {\n return calculateSpace(self, axisIdx, scaleMin, scaleMax, plotDim, formatValue);\n }),\n filter,\n incrs,\n };\n\n if (border?.show) {\n config.border = {\n stroke: color ?? theme.colors.text.primary,\n width: 1 / devicePixelRatio,\n ...border,\n };\n }\n\n if (label != null && label.length > 0) {\n config.label = label;\n config.labelSize = UPLOT_AXIS_FONT_SIZE + labelPad;\n config.labelFont = font;\n config.labelGap = labelPad;\n }\n\n if (values) {\n config.values = values;\n } else if (formatValue) {\n config.values = (u: uPlot, splits, axisIdx, tickSpace, tickIncr) => {\n let decimals = guessDecimals(roundDecimals(tickIncr, 6));\n return splits.map((v) => {\n if (v == null) {\n return null;\n } else {\n return formatValue!(v, decimals > 0 ? decimals : undefined);\n }\n });\n };\n } else if (isTime) {\n config.values = formatTime;\n }\n\n // store timezone\n (config as any).timeZone = timeZone;\n\n return config;\n }\n}\n\n/** @internal */\nexport const timeUnitSize = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n month: 28 * 24 * 60 * 60 * 1000,\n year: 365 * 24 * 60 * 60 * 1000,\n};\n\n/** Format time axis ticks */\nexport function formatTime(\n self: uPlot,\n splits: number[],\n axisIdx: number,\n foundSpace: number,\n foundIncr: number\n): string[] {\n const axis = self.axes[axisIdx];\n const timeZone = 'timeZone' in axis && typeof axis.timeZone === 'string' ? axis.timeZone : undefined;\n const scale = self.scales.x;\n const range = (scale?.max ?? 0) - (scale?.min ?? 0);\n const yearRoundedToDay = Math.round(timeUnitSize.year / timeUnitSize.day) * timeUnitSize.day;\n const incrementRoundedToDay = Math.round(foundIncr / timeUnitSize.day) * timeUnitSize.day;\n\n let format = systemDateFormats.interval.year;\n\n if (foundIncr < timeUnitSize.second) {\n format = systemDateFormats.interval.millisecond;\n } else if (foundIncr <= timeUnitSize.minute) {\n format = systemDateFormats.interval.second;\n } else if (range <= timeUnitSize.day) {\n format = systemDateFormats.interval.minute;\n } else if (foundIncr <= timeUnitSize.day) {\n format = systemDateFormats.interval.hour;\n } else if (range < timeUnitSize.year) {\n format = systemDateFormats.interval.day;\n } else if (incrementRoundedToDay === yearRoundedToDay) {\n format = systemDateFormats.interval.year;\n } else if (foundIncr <= timeUnitSize.year) {\n format = systemDateFormats.interval.month;\n }\n\n return splits.map((v) => (v == null ? '' : dateTimeFormat(v, { format, timeZone })));\n}\n\n/* Minimum grid & tick spacing in CSS pixels */\nfunction calculateSpace(\n self: uPlot,\n axisIdx: number,\n scaleMin: number,\n scaleMax: number,\n plotDim: number,\n formatValue?: (value: unknown) => string\n): number {\n const axis = self.axes[axisIdx];\n const scale = self.scales[axis.scale!];\n\n // for axis left & right\n if (axis.side !== 2 || !scale) {\n return plotDim <= Y_TICK_SPACING_PANEL_HEIGHT ? Y_TICK_SPACING_SMALL : Y_TICK_SPACING_NORMAL;\n }\n\n const maxTicks = plotDim / X_TICK_SPACING_NORMAL;\n const increment = (scaleMax - scaleMin) / maxTicks;\n\n // not super great, since 0.000005 has many more chars than 1.0\n // it also doesn't work well with \"short\" or adaptive units, e.g. 7 K and 6.40 K\n const bigValue = Math.max(Math.abs(scaleMin), Math.abs(scaleMax));\n\n let sample = '';\n\n if (scale.time) {\n sample = formatTime(self, [bigValue], axisIdx, X_TICK_SPACING_NORMAL, increment)[0];\n } else if (formatValue != null) {\n sample = formatValue(bigValue);\n } else {\n return X_TICK_SPACING_NORMAL;\n }\n\n const valueWidth = measureText(sample, UPLOT_AXIS_FONT_SIZE).width;\n\n return valueWidth + X_TICK_VALUE_GAP;\n}\n\n/** height of x axis or width of y axis in CSS pixels alloted for values, gap & ticks, but excluding axis label */\nfunction calculateAxisSize(self: uPlot, values: string[], axisIdx: number) {\n const axis = self.axes[axisIdx];\n\n let axisSize = axis.ticks!.size!;\n\n if (axis.side === 2) {\n axisSize += axis!.gap! + UPLOT_AXIS_FONT_SIZE;\n } else if (values?.length) {\n let maxTextWidth = values.reduce((acc, value) => Math.max(acc, measureText(value, UPLOT_AXIS_FONT_SIZE).width), 0);\n // limit y tick label width to 40% of visualization\n const textWidthWithLimit = Math.min(self.width * 0.4, maxTextWidth);\n // Not sure why this += and not normal assignment\n axisSize += axis!.gap! + axis!.labelGap! + textWidthWithLimit;\n }\n\n return Math.ceil(axisSize);\n}\n\nexport function getUPlotSideFromAxis(axis: AxisPlacement) {\n switch (axis) {\n case AxisPlacement.Top:\n return 0;\n case AxisPlacement.Right:\n return 1;\n case AxisPlacement.Bottom:\n return 2;\n case AxisPlacement.Left:\n }\n\n return 3; // default everythign to the left\n}\n","import { Observable } from 'rxjs';\n\nimport {\n SceneDataProvider,\n SceneDataProviderResult,\n SceneDataState,\n SceneObjectBase,\n SceneObjectRef,\n} from '@grafana/scenes';\n\nexport interface DataProviderSharerState extends SceneDataState {\n source: SceneObjectRef<SceneDataProvider>;\n}\n\nexport class DataProviderSharer extends SceneObjectBase<DataProviderSharerState> implements SceneDataProvider {\n public constructor(state: DataProviderSharerState) {\n super({\n source: state.source,\n data: state.source.resolve().state.data,\n });\n\n this.addActivationHandler(() => {\n this._subs.add(\n this.state.source.resolve().subscribeToState((newState, oldState) => {\n if (newState.data !== oldState.data) {\n this.setState({ data: newState.data });\n }\n })\n );\n });\n }\n\n public setContainerWidth(width: number) {\n this.state.source.resolve().setContainerWidth?.(width);\n }\n\n public isDataReadyToDisplay() {\n return this.state.source.resolve().isDataReadyToDisplay?.() ?? true;\n }\n\n public cancelQuery() {\n this.state.source.resolve().cancelQuery?.();\n }\n\n public getResultsStream(): Observable<SceneDataProviderResult> {\n return this.state.source.resolve().getResultsStream();\n }\n}\n","import { useLocation } from 'react-router-dom-v5-compat';\nimport { useAsync } from 'react-use';\n\nimport { urlUtil } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { locationService, logInfo } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport { Alert, Button } from '@grafana/ui';\nimport { LogMessages } from 'app/features/alerting/unified/Analytics';\nimport { scenesPanelToRuleFormValues } from 'app/features/alerting/unified/utils/rule-form';\n\ninterface ScenesNewRuleFromPanelButtonProps {\n panel: VizPanel;\n className?: string;\n}\nexport const ScenesNewRuleFromPanelButton = ({ panel, className }: ScenesNewRuleFromPanelButtonProps) => {\n const location = useLocation();\n\n const { loading, value: formValues } = useAsync(() => scenesPanelToRuleFormValues(panel), [panel]);\n\n if (loading) {\n return (\n <Button disabled={true}>\n <Trans i18nKey=\"dashboard-scene.scenes-new-rule-from-panel-button.new-alert-rule\">New alert rule</Trans>\n </Button>\n );\n }\n\n if (!formValues) {\n return (\n <Alert\n severity=\"info\"\n title={t(\n 'dashboard-scene.scenes-new-rule-from-panel-button.title-no-alerting-capable-query-found',\n 'No alerting capable query found'\n )}\n >\n <Trans i18nKey=\"dashboard-scene.scenes-new-rule-from-panel-button.body-no-alerting-capable-query-found\">\n Cannot create alerts from this panel because no query to an alerting capable datasource is found.\n </Trans>\n </Alert>\n );\n }\n\n const onClick = async () => {\n logInfo(LogMessages.alertRuleFromPanel);\n\n const updateToDateFormValues = await scenesPanelToRuleFormValues(panel);\n\n const ruleFormUrl = urlUtil.renderUrl('/alerting/new', {\n defaults: JSON.stringify(updateToDateFormValues),\n returnTo: location.pathname + location.search,\n });\n\n locationService.push(ruleFormUrl);\n };\n\n return (\n <Button icon=\"bell\" onClick={onClick} className={className} data-testid=\"create-alert-rule-button\">\n <Trans i18nKey=\"dashboard-scene.scenes-new-rule-from-panel-button.new-alert-rule\">New alert rule</Trans>\n </Button>\n );\n};\n","import { SceneObject } from '@grafana/scenes';\n\nexport enum TabId {\n Queries = 'queries',\n Transformations = 'transformations',\n Alert = 'alert',\n}\n\nexport interface PanelDataTabHeaderProps {\n active: boolean;\n onChangeTab?: (event: React.MouseEvent<HTMLElement>) => void;\n}\n\nexport interface PanelDataPaneTab extends SceneObject {\n renderTab: (props: PanelDataTabHeaderProps) => React.JSX.Element;\n getTabLabel(): string;\n tabId: TabId;\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps, SceneObjectBase, SceneObjectRef, SceneObjectState, VizPanel } from '@grafana/scenes';\nimport { Alert, LoadingPlaceholder, Tab, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { RulesTable } from 'app/features/alerting/unified/components/rules/RulesTable';\nimport { usePanelCombinedRules } from 'app/features/alerting/unified/hooks/usePanelCombinedRules';\nimport { getRulesPermissions } from 'app/features/alerting/unified/utils/access-control';\nimport { stringifyErrorLike } from 'app/features/alerting/unified/utils/misc';\n\nimport { getDashboardSceneFor, getPanelIdForVizPanel } from '../../utils/utils';\n\nimport { ScenesNewRuleFromPanelButton } from './NewAlertRuleButton';\nimport { PanelDataPaneTab, PanelDataTabHeaderProps, TabId } from './types';\n\nexport interface PanelDataAlertingTabState extends SceneObjectState {\n panelRef: SceneObjectRef<VizPanel>;\n}\n\nexport class PanelDataAlertingTab extends SceneObjectBase<PanelDataAlertingTabState> implements PanelDataPaneTab {\n static Component = PanelDataAlertingTabRendered;\n public tabId = TabId.Alert;\n\n public renderTab(props: PanelDataTabHeaderProps) {\n return <AlertingTab key={this.getTabLabel()} model={this} {...props} />;\n }\n\n public getTabLabel() {\n return t('dashboard-scene.panel-data-alerting-tab.tab-label', 'Alert');\n }\n\n public getDashboardUID() {\n const dashboard = this.getDashboard();\n return dashboard.state.uid!;\n }\n\n public getDashboard() {\n return getDashboardSceneFor(this);\n }\n\n public getLegacyPanelId() {\n return getPanelIdForVizPanel(this.state.panelRef.resolve());\n }\n\n public getCanCreateRules() {\n const rulesPermissions = getRulesPermissions('grafana');\n return (\n config.unifiedAlerting &&\n this.getDashboard().state.meta.canSave &&\n contextSrv.hasPermission(rulesPermissions.create)\n );\n }\n}\n\nexport function PanelDataAlertingTabRendered({ model }: SceneComponentProps<PanelDataAlertingTab>) {\n const styles = useStyles2(getStyles);\n\n const { errors, loading, rules } = usePanelCombinedRules({\n dashboardUID: model.getDashboardUID(),\n panelId: model.getLegacyPanelId(),\n });\n\n const alert = errors.length ? (\n <Alert\n title={t(\n 'dashboard-scene.panel-data-alerting-tab-rendered.alert.title-errors-loading-rules',\n 'Errors loading rules'\n )}\n severity=\"error\"\n >\n {errors.map((error, index) => (\n <div key={index}>\n <Trans\n i18nKey=\"dashboard-scene.panel-data-alerting-tab-rendered.error-failed-to-load\"\n values={{ errorToDisplay: stringifyErrorLike(error) }}\n >\n Failed to load Grafana rules state: {'{{errorToDisplay}}'}\n </Trans>\n </div>\n ))}\n </Alert>\n ) : null;\n\n if (loading && !rules.length) {\n return (\n <>\n {alert}\n <LoadingPlaceholder\n text={t('dashboard-scene.panel-data-alerting-tab-rendered.text-loading-rules', 'Loading rules...')}\n />\n </>\n );\n }\n\n const panel = model.state.panelRef.resolve();\n const canCreateRules = model.getCanCreateRules();\n\n if (rules.length) {\n return (\n <>\n <RulesTable rules={rules} />\n {canCreateRules && <ScenesNewRuleFromPanelButton className={styles.newButton} panel={panel} />}\n </>\n );\n }\n\n const isNew = !Boolean(model.getDashboardUID());\n const dashboard = model.getDashboard();\n\n return (\n <div className={styles.noRulesWrapper}>\n {!isNew && (\n <>\n <p>\n <Trans i18nKey=\"dashboard.panel-edit.alerting-tab.no-rules\">\n There are no alert rules linked to this panel.\n </Trans>\n </p>\n {canCreateRules && <ScenesNewRuleFromPanelButton panel={panel}></ScenesNewRuleFromPanelButton>}\n </>\n )}\n {isNew && !!dashboard.state.meta.canSave && (\n <Alert\n severity=\"info\"\n title={t('dashboard-scene.panel-data-alerting-tab-rendered.title-dashboard-not-saved', 'Dashboard not saved')}\n >\n <Trans i18nKey=\"dashboard.panel-edit.alerting-tab.dashboard-not-saved\">\n Dashboard must be saved before alerts can be added.\n </Trans>\n </Alert>\n )}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n newButton: css({\n marginTop: theme.spacing(3),\n }),\n noRulesWrapper: css({\n margin: theme.spacing(2),\n backgroundColor: theme.colors.background.secondary,\n padding: theme.spacing(3),\n }),\n});\ninterface PanelDataAlertingTabHeaderProps extends PanelDataTabHeaderProps {\n model: PanelDataAlertingTab;\n}\n\nfunction AlertingTab(props: PanelDataAlertingTabHeaderProps) {\n const { model } = props;\n\n const { rules } = usePanelCombinedRules({\n dashboardUID: model.getDashboardUID(),\n panelId: model.getLegacyPanelId(),\n poll: false,\n });\n\n return (\n <Tab\n label={model.getTabLabel()}\n icon=\"bell\"\n counter={rules.length}\n active={props.active}\n onChangeTab={props.onChangeTab}\n />\n );\n}\n","import { CoreApp, DataSourceApi, DataSourceInstanceSettings, getDataSourceRef } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport {\n SceneObjectBase,\n SceneComponentProps,\n sceneGraph,\n SceneQueryRunner,\n SceneObjectRef,\n VizPanel,\n SceneObjectState,\n SceneDataQuery,\n} from '@grafana/scenes';\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\nimport { Button, Stack, Tab } from '@grafana/ui';\nimport { addQuery } from 'app/core/utils/query';\nimport { getLastUsedDatasourceFromStorage } from 'app/features/dashboard/utils/dashboard';\nimport { storeLastUsedDataSourceInLocalStorage } from 'app/features/datasources/components/picker/utils';\nimport { dataSource as expressionDatasource } from 'app/features/expressions/ExpressionDatasource';\nimport { ExpressionTypeDropdown } from 'app/features/expressions/components/ExpressionTypeDropdown';\nimport { ExpressionQueryType } from 'app/features/expressions/types';\nimport { getDefaults } from 'app/features/expressions/utils/expressionTypes';\nimport { InspectTab } from 'app/features/inspector/types';\nimport { GroupActionComponents } from 'app/features/query/components/QueryActionComponent';\nimport { QueryEditorRows } from 'app/features/query/components/QueryEditorRows';\nimport { QueryGroupTopSection } from 'app/features/query/components/QueryGroup';\nimport { updateQueries } from 'app/features/query/state/updateQueries';\nimport { isSharedDashboardQuery } from 'app/plugins/datasource/dashboard/runSharedRequest';\nimport { QueryGroupOptions } from 'app/types/query';\n\nimport { MIXED_DATASOURCE_NAME } from '../../../../plugins/datasource/mixed/MixedDataSource';\nimport { useQueryLibraryContext } from '../../../explore/QueryLibrary/QueryLibraryContext';\nimport { ExpressionDatasourceUID } from '../../../expressions/types';\nimport { getDatasourceSrv } from '../../../plugins/datasource_srv';\nimport { PanelInspectDrawer } from '../../inspect/PanelInspectDrawer';\nimport { PanelTimeRange } from '../../scene/panel-timerange/PanelTimeRange';\nimport { getDashboardSceneFor, getQueryRunnerFor } from '../../utils/utils';\nimport { getUpdatedHoverHeader } from '../getPanelFrameOptions';\n\nimport { PanelDataPaneTab, TabId, PanelDataTabHeaderProps } from './types';\n\ninterface PanelDataQueriesTabState extends SceneObjectState {\n datasource?: DataSourceApi;\n dsSettings?: DataSourceInstanceSettings;\n panelRef: SceneObjectRef<VizPanel>;\n}\nexport class PanelDataQueriesTab extends SceneObjectBase<PanelDataQueriesTabState> implements PanelDataPaneTab {\n static Component = PanelDataQueriesTabRendered;\n tabId = TabId.Queries;\n\n public constructor(state: PanelDataQueriesTabState) {\n super(state);\n this.addActivationHandler(() => this.onActivate());\n }\n\n public getTabLabel() {\n return t('dashboard-scene.panel-data-queries-tab.tab-label', 'Queries');\n }\n\n public getItemsCount() {\n return this.getQueries().length;\n }\n\n public renderTab(props: PanelDataTabHeaderProps) {\n return <QueriesTab key={this.getTabLabel()} model={this} {...props} />;\n }\n\n private onActivate() {\n this.loadDataSource();\n }\n\n private async loadDataSource() {\n const panel = this.state.panelRef.resolve();\n const dataObj = panel.state.$data;\n\n if (!dataObj) {\n return;\n }\n\n let datasourceToLoad = this.queryRunner.state.datasource;\n\n try {\n let datasource: DataSourceApi | undefined;\n let dsSettings: DataSourceInstanceSettings | undefined;\n\n if (!datasourceToLoad) {\n const dashboardScene = getDashboardSceneFor(this);\n const dashboardUid = dashboardScene.state.uid ?? '';\n const lastUsedDatasource = getLastUsedDatasourceFromStorage(dashboardUid!);\n\n // do we have a last used datasource for this dashboard\n if (lastUsedDatasource?.datasourceUid !== null) {\n // get datasource from dashbopard uid\n dsSettings = getDataSourceSrv().getInstanceSettings({ uid: lastUsedDatasource?.datasourceUid });\n if (dsSettings) {\n datasource = await getDataSourceSrv().get({\n uid: lastUsedDatasource?.datasourceUid,\n type: dsSettings.type,\n });\n\n this.queryRunner.setState({\n datasource: {\n ...getDataSourceRef(dsSettings),\n uid: lastUsedDatasource?.datasourceUid,\n },\n });\n }\n }\n } else {\n datasource = await getDataSourceSrv().get(datasourceToLoad);\n dsSettings = getDataSourceSrv().getInstanceSettings(datasourceToLoad);\n }\n\n if (datasource && dsSettings) {\n this.setState({ datasource, dsSettings });\n storeLastUsedDataSourceInLocalStorage(getDataSourceRef(dsSettings) || { default: true });\n }\n } catch (err) {\n //set default datasource if we fail to load the datasource\n const datasource = await getDataSourceSrv().get(config.defaultDatasource);\n const dsSettings = getDataSourceSrv().getInstanceSettings(config.defaultDatasource);\n\n if (datasource && dsSettings) {\n this.setState({\n datasource,\n dsSettings,\n });\n\n this.queryRunner.setState({\n datasource: getDataSourceRef(dsSettings),\n });\n }\n\n console.error(err);\n }\n }\n\n public buildQueryOptions(): QueryGroupOptions {\n const panel = this.state.panelRef.resolve();\n const queryRunner = getQueryRunnerFor(panel)!;\n const timeRangeObj = sceneGraph.getTimeRange(panel);\n\n let timeRangeOpts: QueryGroupOptions['timeRange'] = {\n from: undefined,\n shift: undefined,\n hide: undefined,\n };\n\n if (timeRangeObj instanceof PanelTimeRange) {\n timeRangeOpts = {\n from: timeRangeObj.state.timeFrom,\n shift: timeRangeObj.state.timeShift,\n hide: timeRangeObj.state.hideTimeOverride,\n };\n }\n\n let queries: QueryGroupOptions['queries'] = queryRunner.state.queries;\n const dsSettings = this.state.dsSettings;\n\n return {\n cacheTimeout: dsSettings?.meta.queryOptions?.cacheTimeout ? queryRunner.state.cacheTimeout : undefined,\n queryCachingTTL: dsSettings?.cachingConfig?.enabled ? queryRunner.state.queryCachingTTL : undefined,\n dataSource: {\n default: dsSettings?.isDefault,\n ...(dsSettings ? getDataSourceRef(dsSettings) : { type: undefined, uid: undefined }),\n },\n queries,\n maxDataPoints: queryRunner.state.maxDataPoints,\n minInterval: queryRunner.state.minInterval,\n timeRange: timeRangeOpts,\n };\n }\n\n public onOpenInspector = () => {\n const dashboard = getDashboardSceneFor(this);\n dashboard.showModal(new PanelInspectDrawer({ panelRef: this.state.panelRef, currentTab: InspectTab.Query }));\n };\n\n public onChangeDataSource = async (newSettings: DataSourceInstanceSettings, defaultQueries?: SceneDataQuery[]) => {\n const { dsSettings } = this.state;\n const queryRunner = this.queryRunner;\n\n const currentDS = dsSettings ? await getDataSourceSrv().get({ uid: dsSettings.uid }) : undefined;\n const nextDS = await getDataSourceSrv().get({ uid: newSettings.uid });\n\n const currentQueries = queryRunner.state.queries;\n\n // We need to pass in newSettings.uid as well here as that can be a variable expression and we want to store that in the query model not the current ds variable value\n const queries = defaultQueries || (await updateQueries(nextDS, newSettings.uid, currentQueries, currentDS));\n\n queryRunner.setState({ datasource: getDataSourceRef(newSettings), queries });\n\n if (defaultQueries) {\n queryRunner.runQueries();\n }\n\n this.loadDataSource();\n };\n\n public onQueryOptionsChange = (options: QueryGroupOptions) => {\n const panel = this.state.panelRef.resolve();\n const dataObj = this.queryRunner;\n\n const dataObjStateUpdate: Partial<SceneQueryRunner['state']> = {};\n const panelStateUpdate: Partial<VizPanel['state']> = {};\n\n if (options.maxDataPoints !== dataObj.state.maxDataPoints) {\n dataObjStateUpdate.maxDataPoints = options.maxDataPoints ?? undefined;\n }\n\n if (options.minInterval !== dataObj.state.minInterval) {\n dataObjStateUpdate.minInterval = options.minInterval ?? undefined;\n }\n\n const timeFrom = options.timeRange?.from ?? undefined;\n const timeShift = options.timeRange?.shift ?? undefined;\n const hideTimeOverride = options.timeRange?.hide;\n\n if (timeFrom !== undefined || timeShift !== undefined) {\n panelStateUpdate.$timeRange = new PanelTimeRange({ timeFrom, timeShift, hideTimeOverride });\n panelStateUpdate.hoverHeader = getUpdatedHoverHeader(panel.state.title, panelStateUpdate.$timeRange);\n } else {\n panelStateUpdate.$timeRange = undefined;\n panelStateUpdate.hoverHeader = getUpdatedHoverHeader(panel.state.title, undefined);\n }\n\n if (options.cacheTimeout !== dataObj?.state.cacheTimeout) {\n dataObjStateUpdate.cacheTimeout = options.cacheTimeout;\n }\n\n if (options.queryCachingTTL !== dataObj?.state.queryCachingTTL) {\n dataObjStateUpdate.queryCachingTTL = options.queryCachingTTL;\n }\n\n panel.setState(panelStateUpdate);\n\n dataObj.setState(dataObjStateUpdate);\n dataObj.runQueries();\n };\n\n public onQueriesChange = (queries: SceneDataQuery[]) => {\n const runner = this.queryRunner;\n runner.setState({ queries });\n };\n\n public onRunQueries = () => {\n this.queryRunner.runQueries();\n };\n\n public getQueries() {\n return this.queryRunner.state.queries;\n }\n\n public newQuery(): Partial<DataQuery> {\n const { dsSettings, datasource } = this.state;\n let ds;\n\n if (!dsSettings?.meta.mixed) {\n ds = dsSettings; // Use dsSettings if it is not mixed\n } else if (!datasource?.meta.mixed) {\n ds = datasource; // Use datasource if dsSettings is mixed but datasource is not\n } else {\n // Use default datasource if both are mixed or just datasource is mixed\n ds = getDataSourceSrv().getInstanceSettings(config.defaultDatasource);\n }\n\n return {\n ...datasource?.getDefaultQuery?.(CoreApp.PanelEditor),\n datasource: { uid: ds?.uid, type: ds?.type },\n };\n }\n\n public addQueryClick = () => {\n const queries = this.getQueries();\n this.onQueriesChange(addQuery(queries, this.newQuery()));\n };\n\n public onAddQuery = (query: Partial<DataQuery>) => {\n const queries = this.getQueries();\n const dsSettings = this.state.dsSettings;\n\n this.onQueriesChange(\n addQuery(queries, query, dsSettings ? getDataSourceRef(dsSettings) : { type: undefined, uid: undefined })\n );\n };\n\n public isExpressionsSupported(dsSettings: DataSourceInstanceSettings): boolean {\n return (dsSettings.meta.backend || dsSettings.meta.alerting || dsSettings.meta.mixed) === true;\n }\n\n public onAddExpressionOfType = (type: ExpressionQueryType) => {\n const queries = this.getQueries();\n // Create base expression query with the specified type\n const baseQuery = expressionDatasource.newQuery();\n const queryWithType = { ...baseQuery, type };\n // Apply defaults specific to the expression type\n const queryWithDefaults = getDefaults(queryWithType);\n\n this.onQueriesChange(addQuery(queries, queryWithDefaults));\n };\n\n public renderExtraActions() {\n return GroupActionComponents.getAllExtraRenderAction()\n .map((action, index) =>\n action({\n onAddQuery: this.onAddQuery,\n onChangeDataSource: this.onChangeDataSource,\n key: index,\n })\n )\n .filter(Boolean);\n }\n\n public get queryRunner(): SceneQueryRunner {\n return getQueryRunnerFor(this.state.panelRef.resolve())!;\n }\n\n /**\n * Updates panel datasource when saved queries from different datasources are used.\n * Handles transition between single and mixed datasource modes.\n */\n public updateDatasourceIfNeeded = async (newDatasourceRef: DataSourceRef): Promise<void> => {\n const { datasource } = this.state;\n const shouldChangeDatasource = datasource?.uid !== newDatasourceRef.uid;\n if (shouldChangeDatasource) {\n const newDatasource = getDatasourceSrv().getInstanceSettings(newDatasourceRef);\n if (newDatasource) {\n await this.onChangeDataSource(newDatasource);\n }\n }\n };\n}\n\nexport function PanelDataQueriesTabRendered({ model }: SceneComponentProps<PanelDataQueriesTab>) {\n const { datasource, dsSettings } = model.useState();\n const { data, queries } = model.queryRunner.useState();\n const { openDrawer: openQueryLibraryDrawer, queryLibraryEnabled } = useQueryLibraryContext();\n\n if (!datasource || !dsSettings || !data) {\n return null;\n }\n\n const showAddButton = !isSharedDashboardQuery(dsSettings.name);\n const onSelectQueryFromLibrary = async (query: DataQuery) => {\n // ensure all queries explicitly define a datasource\n const enrichedQueries = queries.map((q) =>\n q.datasource\n ? q\n : {\n ...q,\n datasource: datasource.getRef(),\n }\n );\n const newQueries = addQuery(enrichedQueries, query);\n model.onQueriesChange(newQueries);\n\n if (query.datasource?.uid) {\n const uniqueDatasources = new Set(\n newQueries.map((q) => q.datasource?.uid).filter((uid) => uid !== ExpressionDatasourceUID)\n );\n const isMixed = uniqueDatasources.size > 1;\n const newDatasourceRef = {\n uid: isMixed ? MIXED_DATASOURCE_NAME : query.datasource.uid,\n };\n await model.updateDatasourceIfNeeded(newDatasourceRef);\n }\n };\n\n return (\n <div data-testid={selectors.components.QueryTab.content}>\n <QueryGroupTopSection\n data={data}\n dsSettings={dsSettings}\n dataSource={datasource}\n options={model.buildQueryOptions()}\n onDataSourceChange={model.onChangeDataSource}\n onOptionsChange={model.onQueryOptionsChange}\n onOpenQueryInspector={model.onOpenInspector}\n />\n\n <QueryEditorRows\n data={data}\n queries={queries}\n dsSettings={dsSettings}\n onAddQuery={model.onAddQuery}\n onQueriesChange={model.onQueriesChange}\n onRunQueries={model.onRunQueries}\n onUpdateDatasources={queryLibraryEnabled ? model.updateDatasourceIfNeeded : undefined}\n app={CoreApp.PanelEditor}\n />\n\n <Stack gap={2}>\n {showAddButton && (\n <>\n <Button\n icon=\"plus\"\n onClick={model.addQueryClick}\n variant=\"secondary\"\n data-testid={selectors.components.QueryTab.addQuery}\n >\n <Trans i18nKey=\"dashboard-scene.panel-data-queries-tab-rendered.add-query\">Add query</Trans>\n </Button>\n {queryLibraryEnabled && (\n <Button\n icon=\"plus\"\n onClick={() =>\n openQueryLibraryDrawer({\n onSelectQuery: onSelectQueryFromLibrary,\n options: {\n context: CoreApp.PanelEditor,\n },\n })\n }\n variant=\"secondary\"\n data-testid={selectors.components.QueryTab.addQueryFromLibrary}\n >\n <Trans i18nKey={'dashboards.panel-queries.add-from-saved-queries'}>Add from saved queries</Trans>\n </Button>\n )}\n </>\n )}\n {config.expressionsEnabled && model.isExpressionsSupported(dsSettings) && (\n <ExpressionTypeDropdown handleOnSelect={model.onAddExpressionOfType}>\n <Button icon=\"plus\" variant=\"secondary\" data-testid={selectors.components.QueryTab.addExpression}>\n <Trans i18nKey=\"dashboard-scene.panel-data-queries-tab-rendered.expression\">Expression </Trans>\n </Button>\n </ExpressionTypeDropdown>\n )}\n {model.renderExtraActions()}\n </Stack>\n </div>\n );\n}\n\ninterface QueriesTabProps extends PanelDataTabHeaderProps {\n model: PanelDataQueriesTab;\n}\n\nfunction QueriesTab(props: QueriesTabProps) {\n const { model } = props;\n\n const queryRunnerState = model.queryRunner.useState();\n\n return (\n <Tab\n label={model.getTabLabel()}\n icon=\"database\"\n counter={queryRunnerState.queries.length}\n active={props.active}\n onChangeTab={props.onChangeTab}\n />\n );\n}\n","import { FormEvent, useMemo, useState } from 'react';\n\nimport { DataFrame, SelectableValue, standardTransformersRegistry } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { IconButton } from '@grafana/ui';\nimport { TransformationPickerNg } from 'app/features/dashboard/components/TransformationsEditor/TransformationPickerNg';\nimport {\n FilterCategory,\n VIEW_ALL_VALUE,\n} from 'app/features/dashboard/components/TransformationsEditor/TransformationsEditor';\n\ninterface DrawerState {\n search: string;\n showIllustrations: boolean;\n selectedFilter?: FilterCategory;\n}\n\ninterface TransformationsDrawerProps {\n series: DataFrame[];\n isOpen: boolean;\n onClose: () => void;\n onTransformationAdd: (selectedItem: SelectableValue<string>) => void;\n}\n\nexport function TransformationsDrawer(props: TransformationsDrawerProps) {\n const { isOpen, series, onClose, onTransformationAdd } = props;\n\n const [drawerState, setDrawerState] = useState<DrawerState>({\n search: '',\n showIllustrations: true,\n });\n\n const onSearchChange = (e: FormEvent<HTMLInputElement>) =>\n setDrawerState({ ...drawerState, ...{ search: e.currentTarget.value } });\n\n const onShowIllustrationsChange = (showIllustrations: boolean): void =>\n setDrawerState({ ...drawerState, ...{ showIllustrations } });\n\n const onSelectedFilterChange = (selectedFilter: FilterCategory): void =>\n setDrawerState({ ...drawerState, ...{ selectedFilter } });\n\n const allTransformations = useMemo(\n () => standardTransformersRegistry.list().sort((a, b) => (a.name > b.name ? 1 : b.name > a.name ? -1 : 0)),\n []\n );\n\n const transformations = allTransformations.filter((t) => {\n if (\n drawerState.selectedFilter &&\n drawerState.selectedFilter !== VIEW_ALL_VALUE &&\n !t.categories?.has(drawerState.selectedFilter)\n ) {\n return false;\n }\n const searchLower = drawerState.search.toLocaleLowerCase();\n const textMatch =\n t.name.toLocaleLowerCase().includes(searchLower) || t.description?.toLocaleLowerCase().includes(searchLower);\n const tagMatch = t.tags?.size\n ? Array.from(t.tags).some((tag) => tag.toLocaleLowerCase().includes(searchLower))\n : false;\n return textMatch || tagMatch;\n });\n\n const searchBoxSuffix = (\n <>\n {transformations.length} / {allTransformations.length} \n <IconButton\n name=\"times\"\n onClick={() => {\n setDrawerState({ ...drawerState, ...{ search: '' } });\n }}\n tooltip={t('dashboard-scene.transformations-drawer.search-box-suffix.tooltip-clear-search', 'Clear search')}\n />\n </>\n );\n\n if (!isOpen) {\n return;\n }\n\n return (\n <TransformationPickerNg\n data={series}\n onTransformationAdd={onTransformationAdd}\n xforms={transformations}\n search={drawerState.search}\n noTransforms={false}\n suffix={drawerState.search !== '' ? searchBoxSuffix : <></>}\n selectedFilter={drawerState.selectedFilter}\n onSearchChange={onSearchChange}\n onSearchKeyDown={() => {}}\n showIllustrations={drawerState.showIllustrations}\n onShowIllustrationsChange={onShowIllustrationsChange}\n onSelectedFilterChange={onSelectedFilterChange}\n onClose={onClose}\n />\n );\n}\n","import { css } from '@emotion/css';\nimport { DragDropContext, DropResult, Droppable } from '@hello-pangea/dnd';\nimport { useState } from 'react';\n\nimport { DataTransformerConfig, GrafanaTheme2, PanelData } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport {\n SceneObjectBase,\n SceneComponentProps,\n SceneDataTransformer,\n SceneQueryRunner,\n SceneObjectRef,\n VizPanel,\n SceneObjectState,\n} from '@grafana/scenes';\nimport { Button, ButtonGroup, ConfirmModal, Tab, useStyles2 } from '@grafana/ui';\nimport { TransformationOperationRows } from 'app/features/dashboard/components/TransformationsEditor/TransformationOperationRows';\n\nimport { getQueryRunnerFor } from '../../utils/utils';\n\nimport { EmptyTransformationsMessage } from './EmptyTransformationsMessage';\nimport { TransformationsDrawer } from './TransformationsDrawer';\nimport { PanelDataPaneTab, TabId, PanelDataTabHeaderProps } from './types';\n\ninterface PanelDataTransformationsTabState extends SceneObjectState {\n panelRef: SceneObjectRef<VizPanel>;\n}\n\nexport class PanelDataTransformationsTab\n extends SceneObjectBase<PanelDataTransformationsTabState>\n implements PanelDataPaneTab\n{\n static Component = PanelDataTransformationsTabRendered;\n tabId = TabId.Transformations;\n\n getTabLabel() {\n return t('dashboard-scene.panel-data-transformations-tab.tab-label', 'Transformations');\n }\n\n public renderTab(props: PanelDataTabHeaderProps) {\n return <TransformationsTab key={this.getTabLabel()} model={this} {...props} />;\n }\n\n public getQueryRunner(): SceneQueryRunner {\n return getQueryRunnerFor(this.state.panelRef.resolve())!;\n }\n\n public getDataTransformer(): SceneDataTransformer {\n const provider = this.state.panelRef.resolve().state.$data;\n\n if (!provider || !(provider instanceof SceneDataTransformer)) {\n throw new Error('Could not find SceneDataTransformer for panel');\n }\n return provider;\n }\n\n public onChangeTransformations(transformations: DataTransformerConfig[]) {\n const transformer = this.getDataTransformer();\n transformer.setState({ transformations });\n transformer.reprocessTransformations();\n }\n}\n\nexport function PanelDataTransformationsTabRendered({ model }: SceneComponentProps<PanelDataTransformationsTab>) {\n const styles = useStyles2(getStyles);\n const sourceData = model.getQueryRunner().useState();\n const { data, transformations: transformsWrongType } = model.getDataTransformer().useState();\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const transformations: DataTransformerConfig[] = transformsWrongType as unknown as DataTransformerConfig[];\n\n const [drawerOpen, setDrawerOpen] = useState<boolean>(false);\n const [confirmModalOpen, setConfirmModalOpen] = useState<boolean>(false);\n\n const openDrawer = () => setDrawerOpen(true);\n const closeDrawer = () => setDrawerOpen(false);\n\n if (!data || !sourceData.data) {\n return;\n }\n\n const transformationsDrawer = (\n <TransformationsDrawer\n onClose={closeDrawer}\n onTransformationAdd={(selected) => {\n if (selected.value === undefined) {\n return;\n }\n model.onChangeTransformations([...transformations, { id: selected.value, options: {} }]);\n closeDrawer();\n }}\n isOpen={drawerOpen}\n series={data.series}\n ></TransformationsDrawer>\n );\n\n if (transformations.length < 1) {\n return (\n <>\n <EmptyTransformationsMessage onShowPicker={openDrawer}></EmptyTransformationsMessage>\n {transformationsDrawer}\n </>\n );\n }\n\n return (\n <>\n <TransformationsEditor data={sourceData.data} transformations={transformations} model={model} />\n <ButtonGroup>\n <Button\n icon=\"plus\"\n variant=\"secondary\"\n onClick={openDrawer}\n data-testid={selectors.components.Transforms.addTransformationButton}\n >\n <Trans i18nKey=\"dashboard-scene.panel-data-transformations-tab-rendered.add-another-transformation\">\n Add another transformation\n </Trans>\n </Button>\n <Button\n data-testid={selectors.components.Transforms.removeAllTransformationsButton}\n className={styles.removeAll}\n icon=\"times\"\n variant=\"secondary\"\n onClick={() => setConfirmModalOpen(true)}\n >\n <Trans i18nKey=\"dashboard-scene.panel-data-transformations-tab-rendered.delete-all-transformations\">\n Delete all transformations\n </Trans>\n </Button>\n </ButtonGroup>\n <ConfirmModal\n isOpen={confirmModalOpen}\n title={t(\n 'dashboard-scene.panel-data-transformations-tab-rendered.title-delete-all-transformations',\n 'Delete all transformations?'\n )}\n body={t(\n 'dashboard-scene.panel-data-transformations-tab-rendered.body-delete-all-transformations',\n 'By deleting all transformations, you will go back to the main selection screen.'\n )}\n confirmText={t('dashboard-scene.panel-data-transformations-tab-rendered.confirmText-delete-all', 'Delete all')}\n onConfirm={() => {\n model.onChangeTransformations([]);\n setConfirmModalOpen(false);\n }}\n onDismiss={() => setConfirmModalOpen(false)}\n />\n {transformationsDrawer}\n </>\n );\n}\n\ninterface TransformationEditorProps {\n transformations: DataTransformerConfig[];\n model: PanelDataTransformationsTab;\n data: PanelData;\n}\n\nfunction TransformationsEditor({ transformations, model, data }: TransformationEditorProps) {\n const transformationEditorRows = transformations.map((t, i) => ({ id: `${i} - ${t.id}`, transformation: t }));\n\n const onDragEnd = (result: DropResult) => {\n if (!result || !result.destination) {\n return;\n }\n\n const startIndex = result.source.index;\n const endIndex = result.destination.index;\n if (startIndex === endIndex) {\n return;\n }\n const update = Array.from(transformationEditorRows);\n const [removed] = update.splice(startIndex, 1);\n update.splice(endIndex, 0, removed);\n model.onChangeTransformations(update.map((t) => t.transformation));\n };\n\n return (\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId=\"transformations-list\" direction=\"vertical\">\n {(provided) => {\n return (\n <div ref={provided.innerRef} {...provided.droppableProps}>\n <TransformationOperationRows\n onChange={(index, transformation) => {\n const newTransformations = transformations.slice();\n newTransformations[index] = transformation;\n model.onChangeTransformations(newTransformations);\n }}\n onRemove={(index) => {\n const newTransformations = transformations.slice();\n newTransformations.splice(index, 1);\n model.onChangeTransformations(newTransformations);\n }}\n configs={transformationEditorRows}\n data={data}\n ></TransformationOperationRows>\n {provided.placeholder}\n </div>\n );\n }}\n </Droppable>\n </DragDropContext>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n removeAll: css({\n marginLeft: theme.spacing(2),\n }),\n});\n\ninterface TransformationsTabProps extends PanelDataTabHeaderProps {\n model: PanelDataTransformationsTab;\n}\n\nfunction TransformationsTab(props: TransformationsTabProps) {\n const { model } = props;\n const transformerState = model.getDataTransformer().useState();\n\n return (\n <Tab\n label={model.getTabLabel()}\n icon=\"process\"\n counter={transformerState.transformations.length}\n active={props.active}\n onChangeTab={props.onChangeTab}\n />\n );\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport {\n SceneComponentProps,\n SceneObjectBase,\n SceneObjectRef,\n SceneObjectState,\n SceneObjectUrlSyncConfig,\n SceneObjectUrlValues,\n VizPanel,\n} from '@grafana/scenes';\nimport { Container, ScrollContainer, TabContent, TabsBar, useStyles2 } from '@grafana/ui';\nimport { getConfig } from 'app/core/config';\nimport { contextSrv } from 'app/core/core';\nimport { getRulesPermissions } from 'app/features/alerting/unified/utils/access-control';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\n\nimport { PanelDataAlertingTab } from './PanelDataAlertingTab';\nimport { PanelDataQueriesTab } from './PanelDataQueriesTab';\nimport { PanelDataTransformationsTab } from './PanelDataTransformationsTab';\nimport { PanelDataPaneTab, TabId } from './types';\n\nexport interface PanelDataPaneState extends SceneObjectState {\n tabs: PanelDataPaneTab[];\n tab: TabId;\n panelRef: SceneObjectRef<VizPanel>;\n}\n\nexport class PanelDataPane extends SceneObjectBase<PanelDataPaneState> {\n static Component = PanelDataPaneRendered;\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['tab'] });\n\n public static createFor(panel: VizPanel) {\n const panelRef = panel.getRef();\n const tabs: PanelDataPaneTab[] = [\n new PanelDataQueriesTab({ panelRef }),\n new PanelDataTransformationsTab({ panelRef }),\n ];\n\n if (shouldShowAlertingTab(panel.state.pluginId)) {\n tabs.push(new PanelDataAlertingTab({ panelRef }));\n }\n\n return new PanelDataPane({\n panelRef,\n tabs,\n tab: TabId.Queries,\n });\n }\n\n public onChangeTab = (tab: PanelDataPaneTab) => {\n this.setState({ tab: tab.tabId });\n };\n\n public getUrlState() {\n return { tab: this.state.tab };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n if (!values.tab) {\n return;\n }\n if (typeof values.tab === 'string') {\n this.setState({ tab: values.tab as TabId });\n }\n }\n}\n\nfunction PanelDataPaneRendered({ model }: SceneComponentProps<PanelDataPane>) {\n const { tab, tabs } = model.useState();\n const styles = useStyles2(getStyles);\n\n if (!tabs || !tabs.length) {\n return;\n }\n\n const currentTab = tabs.find((t) => t.tabId === tab);\n\n return (\n <div className={styles.dataPane} data-testid={selectors.components.PanelEditor.DataPane.content}>\n <TabsBar hideBorder className={styles.tabsBar}>\n {tabs.map((t) => t.renderTab({ active: t.tabId === tab, onChangeTab: () => model.onChangeTab(t) }))}\n </TabsBar>\n <div className={styles.tabBorder}>\n <ScrollContainer>\n <TabContent className={styles.tabContent}>\n <Container>{currentTab && <currentTab.Component model={currentTab} />}</Container>\n </TabContent>\n </ScrollContainer>\n </div>\n </div>\n );\n}\n\nexport function shouldShowAlertingTab(pluginId: string) {\n const { unifiedAlertingEnabled = false } = getConfig();\n const hasRuleReadPermissions = contextSrv.hasPermission(getRulesPermissions(GRAFANA_RULES_SOURCE_NAME).read);\n const isAlertingAvailable = unifiedAlertingEnabled && hasRuleReadPermissions;\n if (!isAlertingAvailable) {\n return false;\n }\n\n const isGraph = pluginId === 'graph';\n const isTimeseries = pluginId === 'timeseries';\n\n return isGraph || isTimeseries;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n dataPane: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n minHeight: 0,\n height: '100%',\n width: '100%',\n }),\n tabBorder: css({\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n borderLeft: 'none',\n borderBottom: 'none',\n borderTopRightRadius: theme.shape.radius.default,\n flexGrow: 1,\n overflow: 'hidden',\n }),\n tabContent: css({\n padding: theme.spacing(2),\n height: '100%',\n }),\n tabsBar: css({\n flexShrink: 0,\n paddingLeft: theme.spacing(2),\n }),\n };\n}\n","import { useMedia } from 'react-use';\n\n/**\n * Media query body \"(max-height: 540px)\" which matches screens small enough we have zoom reflow\n * problems.\n * 540px is one of the round screen size numbers that's about what we want.\n */\nexport const scrollReflowMediaCondition = '(max-height: 540px)';\n\n/**\n * @returns {boolean} true when the screen is small enough to need zoom reflow handling\n */\nexport function useScrollReflowLimit(): boolean {\n return useMedia(scrollReflowMediaCondition);\n}\n","import { css, cx } from '@emotion/css';\nimport { useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { SceneComponentProps, VizPanel } from '@grafana/scenes';\nimport { Button, Spinner, ToolbarButton, useStyles2 } from '@grafana/ui';\n\nimport { useEditPaneCollapsed } from '../edit-pane/shared';\nimport { NavToolbarActions } from '../scene/NavToolbarActions';\nimport { UnlinkModal } from '../scene/UnlinkModal';\nimport { getDashboardSceneFor, getLibraryPanelBehavior } from '../utils/utils';\n\nimport { PanelEditor } from './PanelEditor';\nimport { SaveLibraryVizPanelModal } from './SaveLibraryVizPanelModal';\nimport { useSnappingSplitter } from './splitter/useSnappingSplitter';\nimport { scrollReflowMediaCondition, useScrollReflowLimit } from './useScrollReflowLimit';\n\nexport function PanelEditorRenderer({ model }: SceneComponentProps<PanelEditor>) {\n const dashboard = getDashboardSceneFor(model);\n const { optionsPane } = model.useState();\n const styles = useStyles2(getStyles);\n const [isInitiallyCollapsed, setIsCollapsed] = useEditPaneCollapsed();\n\n const isScrollingLayout = useScrollReflowLimit();\n\n const { containerProps, primaryProps, secondaryProps, splitterProps, splitterState, onToggleCollapse } =\n useSnappingSplitter({\n direction: 'row',\n dragPosition: 'end',\n initialSize: 330,\n usePixels: true,\n collapsed: isInitiallyCollapsed,\n collapseBelowPixels: 250,\n disabled: isScrollingLayout,\n });\n\n useEffect(() => {\n setIsCollapsed(splitterState.collapsed);\n }, [splitterState.collapsed, setIsCollapsed]);\n\n return (\n <>\n <NavToolbarActions dashboard={dashboard} />\n <div\n {...containerProps}\n className={cx(containerProps.className, styles.content)}\n data-testid={selectors.components.PanelEditor.General.content}\n >\n <div {...primaryProps} className={cx(primaryProps.className, styles.body)}>\n <VizAndDataPane model={model} />\n </div>\n <div {...splitterProps} />\n <div {...secondaryProps} className={cx(secondaryProps.className, styles.optionsPane)}>\n {splitterState.collapsed && (\n <div className={styles.expandOptionsWrapper}>\n <ToolbarButton\n tooltip={t('dashboard-scene.panel-editor-renderer.tooltip-open-options-pane', 'Open options pane')}\n icon={'arrow-to-right'}\n onClick={onToggleCollapse}\n variant=\"canvas\"\n className={styles.rotate180}\n aria-label={t(\n 'dashboard-scene.panel-editor-renderer.aria-label-open-options-pane',\n 'Open options pane'\n )}\n />\n </div>\n )}\n {!splitterState.collapsed && optionsPane && <optionsPane.Component model={optionsPane} />}\n {!splitterState.collapsed && !optionsPane && <Spinner />}\n </div>\n </div>\n </>\n );\n}\n\nfunction VizAndDataPane({ model }: SceneComponentProps<PanelEditor>) {\n const dashboard = getDashboardSceneFor(model);\n const { dataPane, showLibraryPanelSaveModal, showLibraryPanelUnlinkModal, tableView } = model.useState();\n const panel = model.getPanel();\n const libraryPanel = getLibraryPanelBehavior(panel);\n const { controls } = dashboard.useState();\n const styles = useStyles2(getStyles);\n\n const isScrollingLayout = useScrollReflowLimit();\n\n const { containerProps, primaryProps, secondaryProps, splitterProps, splitterState, onToggleCollapse } =\n useSnappingSplitter({\n direction: 'column',\n dragPosition: 'start',\n initialSize: 0.5,\n collapseBelowPixels: 150,\n disabled: isScrollingLayout,\n });\n\n containerProps.className = cx(containerProps.className, styles.container);\n\n if (!dataPane && !isScrollingLayout) {\n primaryProps.style.flexGrow = 1;\n }\n\n return (\n <div className={cx(styles.pageContainer, controls && styles.pageContainerWithControls)}>\n {controls && (\n <div className={styles.controlsWrapper}>\n <controls.Component model={controls} />\n </div>\n )}\n <div {...containerProps}>\n <div {...primaryProps} className={cx(primaryProps.className, isScrollingLayout && styles.fixedSizeViz)}>\n <VizWrapper panel={panel} tableView={tableView} />\n </div>\n {showLibraryPanelSaveModal && libraryPanel && (\n <SaveLibraryVizPanelModal\n libraryPanel={libraryPanel}\n onDismiss={model.onDismissLibraryPanelSaveModal}\n onConfirm={model.onConfirmSaveLibraryPanel}\n onDiscard={model.onDiscard}\n ></SaveLibraryVizPanelModal>\n )}\n {showLibraryPanelUnlinkModal && libraryPanel && (\n <UnlinkModal\n onDismiss={model.onDismissUnlinkLibraryPanelModal}\n onConfirm={model.onConfirmUnlinkLibraryPanel}\n isOpen\n />\n )}\n {dataPane && (\n <>\n <div {...splitterProps} />\n <div\n {...secondaryProps}\n className={cx(secondaryProps.className, isScrollingLayout && styles.fullSizeEditor)}\n >\n {splitterState.collapsed && (\n <div className={styles.expandDataPane}>\n <Button\n tooltip={t('dashboard-scene.viz-and-data-pane.tooltip-open-query-pane', 'Open query pane')}\n icon={'arrow-to-right'}\n onClick={onToggleCollapse}\n variant=\"secondary\"\n size=\"sm\"\n className={styles.openDataPaneButton}\n aria-label={t('dashboard-scene.viz-and-data-pane.aria-label-open-query-pane', 'Open query pane')}\n />\n </div>\n )}\n {!splitterState.collapsed && <dataPane.Component model={dataPane} />}\n </div>\n </>\n )}\n </div>\n </div>\n );\n}\n\ninterface VizWrapperProps {\n panel: VizPanel;\n tableView?: VizPanel;\n}\n\nfunction VizWrapper({ panel, tableView }: VizWrapperProps) {\n const styles = useStyles2(getStyles);\n const panelToShow = tableView ?? panel;\n\n return (\n <div className={styles.vizWrapper}>\n <panelToShow.Component model={panelToShow} />\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n const scrollReflowMediaQuery = '@media ' + scrollReflowMediaCondition;\n return {\n pageContainer: css({\n display: 'grid',\n gridTemplateAreas: `\n \"panels\"`,\n gridTemplateColumns: `1fr`,\n gridTemplateRows: '1fr',\n height: '100%',\n [scrollReflowMediaQuery]: {\n gridTemplateColumns: `100%`,\n },\n }),\n pageContainerWithControls: css({\n gridTemplateAreas: `\n \"controls\"\n \"panels\"`,\n gridTemplateRows: 'auto 1fr',\n }),\n container: css({\n gridArea: 'panels',\n height: '100%',\n }),\n canvasContent: css({\n label: 'canvas-content',\n display: 'flex',\n flexDirection: 'column',\n flexBasis: '100%',\n flexGrow: 1,\n minHeight: 0,\n width: '100%',\n }),\n content: css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n overflow: 'unset',\n [scrollReflowMediaQuery]: {\n height: 'auto',\n display: 'grid',\n gridTemplateColumns: 'minmax(470px, 1fr) 330px',\n gridTemplateRows: '1fr',\n gap: theme.spacing(1),\n position: 'static',\n width: '100%',\n },\n }),\n body: css({\n label: 'body',\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n minHeight: 0,\n }),\n optionsPane: css({\n flexDirection: 'column',\n borderLeft: `1px solid ${theme.colors.border.weak}`,\n background: theme.colors.background.primary,\n marginTop: theme.spacing(2),\n borderTop: `1px solid ${theme.colors.border.weak}`,\n borderTopLeftRadius: theme.shape.radius.default,\n }),\n expandOptionsWrapper: css({\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2, 1),\n }),\n expandDataPane: css({\n display: 'flex',\n flexDirection: 'row',\n padding: theme.spacing(1),\n borderTop: `1px solid ${theme.colors.border.weak}`,\n borderRight: `1px solid ${theme.colors.border.weak}`,\n background: theme.colors.background.primary,\n flexGrow: 1,\n justifyContent: 'space-around',\n }),\n rotate180: css({\n rotate: '180deg',\n }),\n controlsWrapper: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 0,\n gridArea: 'controls',\n }),\n openDataPaneButton: css({\n width: theme.spacing(8),\n justifyContent: 'center',\n svg: {\n rotate: '-90deg',\n },\n }),\n vizWrapper: css({\n height: '100%',\n width: '100%',\n paddingLeft: theme.spacing(2),\n }),\n fixedSizeViz: css({\n height: '100vh',\n }),\n fullSizeEditor: css({\n height: 'max-content',\n }),\n };\n}\n","import { useMemo } from 'react';\nimport * as React from 'react';\n\nimport { PanelData } from '@grafana/data';\nimport { VizPanel } from '@grafana/scenes';\nimport { OptionFilter, renderSearchHits } from 'app/features/dashboard/components/PanelEditor/OptionsPaneOptions';\nimport { getFieldOverrideCategories } from 'app/features/dashboard/components/PanelEditor/getFieldOverrideElements';\nimport {\n getLibraryVizPanelOptionsCategory,\n getVisualizationOptions2,\n} from 'app/features/dashboard/components/PanelEditor/getVisualizationOptions';\n\nimport { LibraryPanelBehavior } from '../scene/LibraryPanelBehavior';\nimport { getLibraryPanelBehavior, isLibraryPanel } from '../utils/utils';\n\nimport { getPanelFrameOptions } from './getPanelFrameOptions';\n\ninterface Props {\n panel: VizPanel;\n searchQuery: string;\n listMode: OptionFilter;\n data?: PanelData;\n}\n\nexport const PanelOptions = React.memo<Props>(({ panel, searchQuery, listMode, data }) => {\n const { options, fieldConfig, _pluginInstanceState } = panel.useState();\n\n const panelFrameOptions = useMemo(() => getPanelFrameOptions(panel), [panel]);\n\n const visualizationOptions = useMemo(() => {\n const plugin = panel.getPlugin();\n if (!plugin) {\n return undefined;\n }\n\n return getVisualizationOptions2({\n panel,\n data,\n plugin: plugin,\n eventBus: panel.getPanelContext().eventBus,\n instanceState: _pluginInstanceState,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, panel, options, fieldConfig, _pluginInstanceState]);\n\n const libraryPanelOptions = useMemo(() => {\n if (panel instanceof VizPanel && isLibraryPanel(panel)) {\n const behavior = getLibraryPanelBehavior(panel);\n\n if (!(behavior instanceof LibraryPanelBehavior)) {\n return;\n }\n\n return getLibraryVizPanelOptionsCategory(behavior);\n }\n return;\n }, [panel]);\n\n const justOverrides = useMemo(\n () =>\n getFieldOverrideCategories(\n fieldConfig,\n panel.getPlugin()?.fieldConfigRegistry!,\n data?.series ?? [],\n searchQuery,\n (newConfig) => {\n panel.onFieldConfigChange(newConfig, true);\n }\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [data, searchQuery, panel, fieldConfig]\n );\n\n const isSearching = searchQuery.length > 0;\n const mainBoxElements: React.ReactNode[] = [];\n\n if (isSearching) {\n mainBoxElements.push(\n renderSearchHits(\n [panelFrameOptions, ...(libraryPanelOptions ? [libraryPanelOptions] : []), ...(visualizationOptions ?? [])],\n justOverrides,\n searchQuery\n )\n );\n } else {\n switch (listMode) {\n case OptionFilter.All:\n if (libraryPanelOptions) {\n // Library Panel options first\n mainBoxElements.push(libraryPanelOptions.render());\n }\n mainBoxElements.push(panelFrameOptions.render());\n\n for (const item of visualizationOptions ?? []) {\n mainBoxElements.push(item.render());\n }\n\n for (const item of justOverrides) {\n mainBoxElements.push(item.render());\n }\n break;\n case OptionFilter.Overrides:\n for (const item of justOverrides) {\n mainBoxElements.push(item.render());\n }\n default:\n break;\n }\n }\n\n return mainBoxElements;\n});\n\nPanelOptions.displayName = 'PanelOptions';\n","export const INTERACTION_EVENT_NAME = 'dashboards_panel_plugin_picker_clicked';\nexport const INTERACTION_ITEM = {\n TOGGLE_DROPDOWN: 'toggle_panel_plugin_picker',\n SELECT_PANEL_PLUGIN: 'select_panel_plugin',\n CHANGE_TAB: 'change_tab', // for ref - PanelVizTypePicker\n SEARCH: 'search', // for ref - PanelVizTypePicker\n};\n","import { css } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useLocalStorage } from 'react-use';\n\nimport { GrafanaTheme2, PanelData, SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport { Button, Field, FilterInput, RadioButtonGroup, ScrollContainer, useStyles2 } from '@grafana/ui';\nimport { LS_VISUALIZATION_SELECT_TAB_KEY } from 'app/core/constants';\nimport { VisualizationSelectPaneTab } from 'app/features/dashboard/components/PanelEditor/types';\nimport { VisualizationSuggestions } from 'app/features/panel/components/VizTypePicker/VisualizationSuggestions';\nimport { VizTypePicker } from 'app/features/panel/components/VizTypePicker/VizTypePicker';\nimport { VizTypeChangeDetails } from 'app/features/panel/components/VizTypePicker/types';\n\nimport { PanelModelCompatibilityWrapper } from '../utils/PanelModelCompatibilityWrapper';\n\nimport { INTERACTION_EVENT_NAME, INTERACTION_ITEM } from './interaction';\n\nexport interface Props {\n data?: PanelData;\n panel: VizPanel;\n onChange: (options: VizTypeChangeDetails) => void;\n onClose: () => void;\n}\n\nexport function PanelVizTypePicker({ panel, data, onChange, onClose }: Props) {\n const styles = useStyles2(getStyles);\n const [searchQuery, setSearchQuery] = useState('');\n const trackSearch = useMemo(\n () =>\n debounce((q, count) => {\n if (q) {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.SEARCH,\n query: q,\n result_count: count,\n creator_team: 'grafana_plugins_catalog',\n schema_version: '1.0.0',\n });\n }\n }, 300),\n []\n );\n\n const handleSearchChange = (value: string) => {\n setSearchQuery(value);\n };\n\n const tabKey = LS_VISUALIZATION_SELECT_TAB_KEY;\n const defaultTab = VisualizationSelectPaneTab.Visualizations;\n const panelModel = useMemo(() => new PanelModelCompatibilityWrapper(panel), [panel]);\n\n const supportedListModes = useMemo(\n () => new Set([VisualizationSelectPaneTab.Visualizations, VisualizationSelectPaneTab.Suggestions]),\n []\n );\n const [listMode, setListMode] = useLocalStorage(tabKey, defaultTab);\n const handleListModeChange = (value: VisualizationSelectPaneTab) => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CHANGE_TAB,\n tab: VisualizationSelectPaneTab[value],\n creator_team: 'grafana_plugins_catalog',\n schema_version: '1.0.0',\n });\n setListMode(value);\n };\n\n useEffect(() => {\n if (listMode && !supportedListModes.has(listMode)) {\n setListMode(defaultTab);\n }\n }, [defaultTab, listMode, setListMode, supportedListModes]);\n\n const radioOptions: Array<SelectableValue<VisualizationSelectPaneTab>> = [\n {\n label: t('dashboard-scene.panel-viz-type-picker.radio-options.label.visualizations', 'Visualizations'),\n value: VisualizationSelectPaneTab.Visualizations,\n },\n {\n label: t('dashboard-scene.panel-viz-type-picker.radio-options.label.suggestions', 'Suggestions'),\n value: VisualizationSelectPaneTab.Suggestions,\n },\n ];\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.searchRow}>\n <FilterInput\n className={styles.filter}\n value={searchQuery}\n onChange={handleSearchChange}\n autoFocus={true}\n placeholder={t('dashboard-scene.panel-viz-type-picker.placeholder-search-for', 'Search for...')}\n />\n <Button\n aria-label={t('dashboard-scene.panel-viz-type-picker.title-close', 'Close')}\n variant=\"secondary\"\n icon=\"angle-up\"\n className={styles.closeButton}\n data-testid={selectors.components.PanelEditor.toggleVizPicker}\n onClick={onClose}\n />\n </div>\n <Field className={styles.customFieldMargin}>\n <RadioButtonGroup options={radioOptions} value={listMode} onChange={handleListModeChange} fullWidth />\n </Field>\n <ScrollContainer>\n {listMode === VisualizationSelectPaneTab.Visualizations && (\n <VizTypePicker\n pluginId={panel.state.pluginId}\n searchQuery={searchQuery}\n trackSearch={trackSearch}\n onChange={onChange}\n />\n )}\n {listMode === VisualizationSelectPaneTab.Suggestions && (\n <VisualizationSuggestions\n onChange={onChange}\n trackSearch={trackSearch}\n searchQuery={searchQuery}\n panel={panelModel}\n data={data}\n />\n )}\n </ScrollContainer>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n padding: theme.spacing(2, 1),\n height: '100%',\n gap: theme.spacing(2),\n border: `1px solid ${theme.colors.border.weak}`,\n borderRight: 'none',\n borderBottom: 'none',\n borderTopLeftRadius: theme.shape.radius.default,\n }),\n searchRow: css({\n display: 'flex',\n marginBottom: theme.spacing(1),\n }),\n closeButton: css({\n marginLeft: theme.spacing(1),\n }),\n customFieldMargin: css({\n marginBottom: theme.spacing(1),\n }),\n filter: css({\n minHeight: theme.spacing(4),\n }),\n});\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\nimport { useToggle } from 'react-use';\n\nimport {\n FieldConfigSource,\n filterFieldConfigOverrides,\n GrafanaTheme2,\n isStandardFieldProp,\n PanelPluginMeta,\n restoreCustomOverrideRules,\n SelectableValue,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { locationService, reportInteraction } from '@grafana/runtime';\nimport {\n DeepPartial,\n SceneComponentProps,\n SceneObjectBase,\n SceneObjectRef,\n SceneObjectState,\n VizPanel,\n sceneGraph,\n} from '@grafana/scenes';\nimport { Button, FilterInput, ScrollContainer, Stack, ToolbarButton, useStyles2, Field } from '@grafana/ui';\nimport { OptionFilter } from 'app/features/dashboard/components/PanelEditor/OptionsPaneOptions';\nimport { getPanelPluginNotFound } from 'app/features/panel/components/PanelPluginError';\nimport { VizTypeChangeDetails } from 'app/features/panel/components/VizTypePicker/types';\nimport { getAllPanelPluginMeta } from 'app/features/panel/state/util';\n\nimport { PanelOptions } from './PanelOptions';\nimport { PanelVizTypePicker } from './PanelVizTypePicker';\nimport { INTERACTION_EVENT_NAME, INTERACTION_ITEM } from './interaction';\nimport { useScrollReflowLimit } from './useScrollReflowLimit';\n\nexport interface PanelOptionsPaneState extends SceneObjectState {\n isVizPickerOpen?: boolean;\n searchQuery: string;\n listMode: OptionFilter;\n panelRef: SceneObjectRef<VizPanel>;\n}\n\ninterface PluginOptionsCache {\n options: DeepPartial<{}>;\n fieldConfig: FieldConfigSource<DeepPartial<{}>>;\n}\n\nexport class PanelOptionsPane extends SceneObjectBase<PanelOptionsPaneState> {\n private _cachedPluginOptions: Record<string, PluginOptionsCache | undefined> = {};\n\n onToggleVizPicker = () => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.TOGGLE_DROPDOWN,\n open: !this.state.isVizPickerOpen,\n });\n this.setState({ isVizPickerOpen: !this.state.isVizPickerOpen });\n };\n\n onChangePanelPlugin = (options: VizTypeChangeDetails) => {\n const panel = this.state.panelRef.resolve();\n const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = panel.state;\n const pluginId = options.pluginId;\n\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.SELECT_PANEL_PLUGIN,\n plugin_id: pluginId,\n });\n\n // clear custom options\n let newFieldConfig: FieldConfigSource = {\n defaults: {\n ...prevFieldConfig.defaults,\n custom: {},\n },\n overrides: filterFieldConfigOverrides(prevFieldConfig.overrides, isStandardFieldProp),\n };\n\n this._cachedPluginOptions[prevPluginId] = { options: prevOptions, fieldConfig: prevFieldConfig };\n\n const cachedOptions = this._cachedPluginOptions[pluginId]?.options;\n const cachedFieldConfig = this._cachedPluginOptions[pluginId]?.fieldConfig;\n\n if (cachedFieldConfig) {\n newFieldConfig = restoreCustomOverrideRules(newFieldConfig, cachedFieldConfig);\n }\n\n panel.changePluginType(pluginId, cachedOptions, newFieldConfig);\n\n if (options.options) {\n panel.onOptionsChange(options.options, true);\n }\n\n if (options.fieldConfig) {\n const fieldConfigWithOverrides = {\n ...options.fieldConfig,\n overrides: newFieldConfig.overrides,\n };\n panel.onFieldConfigChange(fieldConfigWithOverrides, true);\n }\n\n this.onToggleVizPicker();\n };\n\n onSetSearchQuery = (searchQuery: string) => {\n this.setState({ searchQuery });\n };\n\n onSetListMode = (listMode: OptionFilter) => {\n this.setState({ listMode });\n };\n\n onOpenPanelJSON = (vizPanel: VizPanel) => {\n locationService.partial({\n inspect: vizPanel.state.key,\n inspectTab: 'json',\n });\n };\n\n getOptionRadioFilters(): Array<SelectableValue<OptionFilter>> {\n return [\n { label: OptionFilter.All, value: OptionFilter.All },\n { label: OptionFilter.Overrides, value: OptionFilter.Overrides },\n ];\n }\n\n static Component = PanelOptionsPaneComponent;\n}\n\nfunction PanelOptionsPaneComponent({ model }: SceneComponentProps<PanelOptionsPane>) {\n const { isVizPickerOpen, searchQuery, listMode, panelRef } = model.useState();\n const panel = panelRef.resolve();\n const { pluginId } = panel.useState();\n const { data } = sceneGraph.getData(panel).useState();\n const styles = useStyles2(getStyles);\n const isSearching = searchQuery.length > 0;\n const hasFieldConfig = !isSearching && !panel.getPlugin()?.fieldConfigRegistry.isEmpty();\n const [isSearchingOptions, setIsSearchingOptions] = useToggle(false);\n const onlyOverrides = listMode === OptionFilter.Overrides;\n const isScrollingLayout = useScrollReflowLimit();\n\n return (\n <>\n {!isVizPickerOpen && (\n <>\n <div className={styles.top}>\n <Field label={t('dashboard.panel-edit.visualization-button-label', 'Visualization')} noMargin>\n <Stack gap={1}>\n <VisualizationButton pluginId={pluginId} onOpen={model.onToggleVizPicker} />\n <Button\n icon=\"search\"\n variant=\"secondary\"\n onClick={setIsSearchingOptions}\n tooltip={t('dashboard.panel-edit.visualization-button-tooltip', 'Search options')}\n />\n {hasFieldConfig && (\n <ToolbarButton\n icon=\"filter\"\n tooltip={t('dashboard.panel-edit.only-overrides-button-tooltip', 'Show only overrides')}\n variant={onlyOverrides ? 'active' : 'canvas'}\n onClick={() => {\n model.onSetListMode(onlyOverrides ? OptionFilter.All : OptionFilter.Overrides);\n }}\n />\n )}\n </Stack>\n </Field>\n\n {isSearchingOptions && (\n <FilterInput\n className={styles.searchOptions}\n value={searchQuery}\n placeholder={t('dashboard.panel-edit.placeholder-search-options', 'Search options')}\n onChange={model.onSetSearchQuery}\n autoFocus={true}\n onBlur={() => {\n if (searchQuery.length === 0) {\n setIsSearchingOptions(false);\n }\n }}\n />\n )}\n </div>\n <ScrollContainer minHeight={isScrollingLayout ? 'max-content' : 0}>\n <PanelOptions panel={panel} searchQuery={searchQuery} listMode={listMode} data={data} />\n </ScrollContainer>\n </>\n )}\n {isVizPickerOpen && (\n <PanelVizTypePicker\n panel={panel}\n onChange={model.onChangePanelPlugin}\n onClose={model.onToggleVizPicker}\n data={data}\n />\n )}\n </>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n top: css({\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(1, 2, 2, 2),\n gap: theme.spacing(2),\n }),\n searchOptions: css({\n minHeight: theme.spacing(4),\n }),\n searchWrapper: css({\n padding: theme.spacing(2, 2, 2, 0),\n }),\n rotateIcon: css({\n rotate: '180deg',\n }),\n };\n}\n\ninterface VisualizationButtonProps {\n pluginId: string;\n onOpen: () => void;\n}\n\nexport function VisualizationButton({ pluginId, onOpen }: VisualizationButtonProps) {\n const styles = useStyles2(getVizButtonStyles);\n let pluginMeta: PanelPluginMeta | undefined = useMemo(\n () => getAllPanelPluginMeta().filter((p) => p.id === pluginId)[0],\n [pluginId]\n );\n\n if (!pluginMeta) {\n const notFound = getPanelPluginNotFound(`Panel plugin not found (${pluginId})`, true);\n pluginMeta = notFound.meta;\n }\n\n return (\n <ToolbarButton\n className={styles.vizButton}\n tooltip={t(\n 'dashboard-scene.visualization-button.tooltip-click-to-change-visualization',\n 'Click to change visualization'\n )}\n imgSrc={pluginMeta.info.logos.small}\n onClick={onOpen}\n data-testid={selectors.components.PanelEditor.toggleVizPicker}\n aria-label={t('dashboard-scene.visualization-button.aria-label-change-visualization', 'Change visualization')}\n variant=\"canvas\"\n isOpen={false}\n fullWidth\n >\n {pluginMeta.name}\n </ToolbarButton>\n );\n}\n\nfunction getVizButtonStyles(theme: GrafanaTheme2) {\n return {\n vizButton: css({\n textAlign: 'left',\n }),\n };\n}\n","import * as H from 'history';\nimport { debounce } from 'lodash';\n\nimport { NavIndex, PanelPlugin } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, locationService } from '@grafana/runtime';\nimport {\n NewSceneObjectAddedEvent,\n PanelBuilders,\n SceneDataTransformer,\n SceneObjectBase,\n SceneObjectRef,\n SceneObjectState,\n SceneObjectStateChangedEvent,\n SceneQueryRunner,\n sceneUtils,\n VizPanel,\n isSceneObject,\n} from '@grafana/scenes';\nimport { Panel } from '@grafana/schema';\nimport { OptionFilter } from 'app/features/dashboard/components/PanelEditor/OptionsPaneOptions';\nimport { getLastUsedDatasourceFromStorage } from 'app/features/dashboard/utils/dashboard';\nimport { saveLibPanel } from 'app/features/library-panels/state/api';\n\nimport { DashboardEditActionEvent } from '../edit-pane/shared';\nimport { DashboardSceneChangeTracker } from '../saving/DashboardSceneChangeTracker';\nimport { getPanelChanges } from '../saving/getDashboardChanges';\nimport { UNCONFIGURED_PANEL_PLUGIN_ID } from '../scene/UnconfiguredPanel';\nimport { DashboardGridItem } from '../scene/layout-default/DashboardGridItem';\nimport { DashboardLayoutItem, isDashboardLayoutItem } from '../scene/types/DashboardLayoutItem';\nimport { vizPanelToPanel } from '../serialization/transformSceneToSaveModel';\nimport {\n activateSceneObjectAndParentTree,\n getDashboardSceneFor,\n getLibraryPanelBehavior,\n getPanelIdForVizPanel,\n} from '../utils/utils';\n\nimport { DataProviderSharer } from './PanelDataPane/DataProviderSharer';\nimport { PanelDataPane } from './PanelDataPane/PanelDataPane';\nimport { PanelEditorRenderer } from './PanelEditorRenderer';\nimport { PanelOptionsPane } from './PanelOptionsPane';\n\nexport interface PanelEditorState extends SceneObjectState {\n isNewPanel: boolean;\n isDirty?: boolean;\n optionsPane?: PanelOptionsPane;\n dataPane?: PanelDataPane;\n panelRef: SceneObjectRef<VizPanel>;\n showLibraryPanelSaveModal?: boolean;\n showLibraryPanelUnlinkModal?: boolean;\n tableView?: VizPanel;\n pluginLoadErrror?: string;\n /**\n * Waiting for library panel or panel plugin to load\n */\n isInitializing?: boolean;\n}\n\nexport class PanelEditor extends SceneObjectBase<PanelEditorState> {\n static Component = PanelEditorRenderer;\n\n private _layoutItemState?: SceneObjectState;\n private _layoutItem: DashboardLayoutItem;\n private _originalSaveModel!: Panel;\n private _changesHaveBeenMade = false;\n\n public constructor(state: PanelEditorState) {\n super(state);\n\n const panel = this.state.panelRef.resolve();\n const layoutItem = panel.parent;\n if (!layoutItem || !isDashboardLayoutItem(layoutItem)) {\n throw new Error('Panel must have a parent of type DashboardLayoutItem');\n }\n\n this._layoutItem = layoutItem;\n\n this.setOriginalState(this.state.panelRef);\n this.addActivationHandler(this._activationHandler.bind(this));\n }\n\n private _activationHandler() {\n const panel = this.state.panelRef.resolve();\n\n if (panel.state.pluginId === UNCONFIGURED_PANEL_PLUGIN_ID) {\n panel.changePluginType('timeseries');\n }\n\n this._subs.add(\n this._layoutItem.subscribeToEvent(DashboardEditActionEvent, ({ payload }) => {\n // TODO add support for undo/redo within panel edit\n payload.perform();\n })\n );\n\n const deactivateParents = activateSceneObjectAndParentTree(panel);\n\n // Ensure headerActions are activated\n const headerActions = panel.state.headerActions;\n if (headerActions) {\n (Array.isArray(headerActions) ? headerActions : [headerActions]).forEach((action) => {\n if (isSceneObject(action)) {\n action.activate();\n }\n });\n }\n\n this.waitForPlugin();\n\n return () => {\n this.commitChanges();\n\n if (deactivateParents) {\n deactivateParents();\n }\n };\n }\n\n private commitChanges() {\n if (!this.state.isDirty && !this._changesHaveBeenMade) {\n // Nothing to commit\n return;\n }\n\n const layoutItem = this._layoutItem;\n const changedState = layoutItem.state;\n const originalState = this._layoutItemState!;\n\n // Temp fix for old edit mode\n if (this._layoutItem instanceof DashboardGridItem && !config.featureToggles.dashboardNewLayouts) {\n this._layoutItem.handleEditChange();\n return;\n }\n\n const editAction = new DashboardEditActionEvent({\n description: t('dashboard.edit-actions.panel-edit', 'Panel changes'),\n source: this._layoutItem,\n perform: () => {\n // Because panel edit makes changes directly to layout item & panel\n // we only need to do this in case we want to re-perform after undo\n if (layoutItem.state !== changedState) {\n layoutItem.setState(changedState);\n }\n },\n undo: () => layoutItem!.setState(originalState),\n });\n\n // sadly we cannot publish this event directly here as the main dashboard edit / undo system\n // is not active while panel edit is active so we have to let the edit pane (which owns undo/redo)\n // publish this event when it activates\n const dashboard = getDashboardSceneFor(this);\n dashboard.state.editPane.setPanelEditAction(editAction);\n }\n\n private waitForPlugin(retry = 0) {\n const panel = this.getPanel();\n const plugin = panel.getPlugin();\n\n if (!plugin || plugin.meta.id !== panel.state.pluginId) {\n if (retry < 100) {\n setTimeout(() => this.waitForPlugin(retry + 1), retry * 10);\n } else {\n this.setState({ pluginLoadErrror: 'Failed to load panel plugin' });\n }\n return;\n }\n\n this.gotPanelPlugin(plugin);\n }\n\n private setOriginalState(panelRef: SceneObjectRef<VizPanel>) {\n const panel = panelRef.resolve();\n\n this._originalSaveModel = vizPanelToPanel(panel);\n this._layoutItemState = sceneUtils.cloneSceneObjectState(this._layoutItem.state);\n }\n\n /**\n * Useful for testing to turn on debounce\n */\n public debounceSaveModelDiff = true;\n\n /**\n * Subscribe to state changes and check if the save model has changed\n */\n private _setupChangeDetection() {\n const panel = this.state.panelRef.resolve();\n const performSaveModelDiff = () => {\n const { hasChanges } = getPanelChanges(this._originalSaveModel, vizPanelToPanel(panel));\n this.setState({ isDirty: hasChanges });\n };\n\n const performSaveModelDiffDebounced = this.debounceSaveModelDiff\n ? debounce(performSaveModelDiff, 250)\n : performSaveModelDiff;\n\n const handleStateChange = (event: SceneObjectStateChangedEvent) => {\n if (DashboardSceneChangeTracker.isUpdatingPersistedState(event)) {\n performSaveModelDiffDebounced();\n }\n };\n\n // Subscribe to state changes on the parent (layout item) so we do not miss state changes on the layout item\n this._subs.add(this._layoutItem.subscribeToEvent(SceneObjectStateChangedEvent, handleStateChange));\n }\n\n public getPanel(): VizPanel {\n return this.state.panelRef?.resolve();\n }\n\n private gotPanelPlugin(plugin: PanelPlugin) {\n const panel = this.getPanel();\n\n // First time initialization\n if (this.state.isInitializing) {\n this.setOriginalState(this.state.panelRef);\n\n this._setupChangeDetection();\n this._updateDataPane(plugin);\n\n // Listen for panel plugin changes\n this._subs.add(\n panel.subscribeToState((n, p) => {\n if (n.pluginId !== p.pluginId) {\n this.waitForPlugin();\n }\n })\n );\n\n // Setup options pane\n this.setState({\n optionsPane: new PanelOptionsPane({\n panelRef: this.state.panelRef,\n searchQuery: '',\n listMode: OptionFilter.All,\n }),\n isInitializing: false,\n });\n } else {\n // plugin changed after first time initialization\n // Just update data pane\n this._updateDataPane(plugin);\n }\n }\n\n private _updateDataPane(plugin: PanelPlugin) {\n const skipDataQuery = plugin.meta.skipDataQuery;\n\n const panel = this.state.panelRef.resolve();\n\n if (skipDataQuery) {\n if (this.state.dataPane) {\n locationService.partial({ tab: null }, true);\n this.setState({ dataPane: undefined });\n }\n\n // clean up data provider when switching from data to non data panel\n if (panel.state.$data) {\n panel.setState({ $data: undefined });\n }\n }\n\n if (!skipDataQuery) {\n if (!this.state.dataPane) {\n const dataPane = PanelDataPane.createFor(this.getPanel());\n this.setState({ dataPane });\n // This is to notify UrlSyncManager that a new object has been added to scene that requires url sync\n this.publishEvent(new NewSceneObjectAddedEvent(dataPane), true);\n }\n\n // add data provider when switching from non data to data panel\n if (!panel.state.$data) {\n let ds = getLastUsedDatasourceFromStorage(getDashboardSceneFor(this).state.uid!)?.datasourceUid;\n if (!ds) {\n ds = config.defaultDatasource;\n }\n\n panel.setState({\n $data: new SceneDataTransformer({\n $data: new SceneQueryRunner({\n datasource: {\n uid: ds,\n },\n queries: [{ refId: 'A' }],\n }),\n transformations: [],\n }),\n });\n }\n }\n }\n\n public getUrlKey() {\n return this.getPanelId().toString();\n }\n\n public getPanelId() {\n return getPanelIdForVizPanel(this.state.panelRef.resolve());\n }\n\n public getPageNav(location: H.Location, navIndex: NavIndex) {\n const dashboard = getDashboardSceneFor(this);\n\n return {\n text: t('dashboard-scene.panel-editor.text.edit-panel', 'Edit panel'),\n parentItem: dashboard.getPageNav(location, navIndex),\n };\n }\n\n public onDiscard = () => {\n this.setState({ isDirty: false });\n\n const panel = this.state.panelRef.resolve();\n\n if (this.state.isNewPanel) {\n getDashboardSceneFor(this).removePanel(panel);\n } else {\n // Revert any layout element changes\n this._layoutItem!.setState(this._layoutItemState!);\n }\n\n locationService.partial({ editPanel: null });\n };\n\n public dashboardSaved() {\n this.setOriginalState(this.state.panelRef);\n this.setState({ isDirty: false });\n\n // Remember that we have done changes\n this._changesHaveBeenMade = true;\n }\n\n public onSaveLibraryPanel = () => {\n this.setState({ showLibraryPanelSaveModal: true });\n };\n\n public onConfirmSaveLibraryPanel = () => {\n saveLibPanel(this.state.panelRef.resolve());\n this.setState({ isDirty: false });\n locationService.partial({ editPanel: null });\n };\n\n public onDismissLibraryPanelSaveModal = () => {\n this.setState({ showLibraryPanelSaveModal: false });\n };\n\n public onUnlinkLibraryPanel = () => {\n this.setState({ showLibraryPanelUnlinkModal: true });\n };\n\n public onDismissUnlinkLibraryPanelModal = () => {\n this.setState({ showLibraryPanelUnlinkModal: false });\n };\n\n public onConfirmUnlinkLibraryPanel = () => {\n const libPanelBehavior = getLibraryPanelBehavior(this.getPanel());\n if (!libPanelBehavior) {\n return;\n }\n\n libPanelBehavior.unlink();\n\n this.setState({ showLibraryPanelUnlinkModal: false });\n };\n\n public onToggleTableView = () => {\n if (this.state.tableView) {\n this.setState({ tableView: undefined });\n return;\n }\n\n const panel = this.state.panelRef.resolve();\n const dataProvider = panel.state.$data;\n if (!dataProvider) {\n return;\n }\n\n this.setState({\n tableView: PanelBuilders.table()\n .setTitle('')\n .setOption('showTypeIcons', true)\n .setOption('showHeader', true)\n .setData(new DataProviderSharer({ source: dataProvider.getRef() }))\n .build(),\n });\n };\n}\n\nexport function buildPanelEditScene(panel: VizPanel, isNewPanel = false): PanelEditor {\n return new PanelEditor({\n isInitializing: true,\n panelRef: panel.getRef(),\n isNewPanel,\n });\n}\n","import { omit } from 'lodash';\nimport { InputHTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { Trans } from '@grafana/i18n';\n\nimport { Button } from '../Button/Button';\nimport { FormField } from '../FormField/FormField';\nimport { Field } from '../Forms/Field';\nimport { SecretInput } from '../SecretInput';\nimport { PopoverContent } from '../Tooltip/types';\n\nexport interface Props extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onReset'> {\n // Function to use when reset is clicked. Means you have to reset the input value yourself as this is uncontrolled\n // component (or do something else if required).\n onReset: (event: React.SyntheticEvent<HTMLButtonElement>) => void;\n isConfigured: boolean;\n\n label?: string;\n tooltip?: PopoverContent;\n labelWidth?: number;\n inputWidth?: number;\n // Placeholder of the input field when in non configured state.\n placeholder?: string;\n interactive?: boolean;\n}\n\n/**\n * Form field that has 2 states configured and not configured. If configured it will not show its contents and adds\n * a reset button that will clear the input and makes it accessible. In non configured state it behaves like normal\n * form field. This is used for passwords or anything that is encrypted on the server and is later returned encrypted\n * to the user (like datasource passwords).\n *\n * @deprecated Please use the {@link SecretInput} component with a {@link Field} instead, {@link https://developers.grafana.com/ui/latest/index.html?path=/story/forms-secretinput--basic as seen in Storybook}\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-deprecated-secretformfield--docs\n */\nexport const SecretFormField = ({\n label = 'Password',\n labelWidth,\n inputWidth = 12,\n onReset,\n isConfigured,\n tooltip,\n placeholder = 'Password',\n interactive,\n ...inputProps\n}: Props) => {\n return (\n <FormField\n label={label!}\n tooltip={tooltip}\n interactive={interactive}\n labelWidth={labelWidth}\n inputEl={\n isConfigured ? (\n <>\n <input\n type=\"text\"\n className={`gf-form-input width-${inputWidth}`}\n disabled={true}\n value=\"configured\"\n {...omit(inputProps, 'value')}\n />\n <Button onClick={onReset} variant=\"secondary\" type=\"button\">\n <Trans i18nKey=\"grafana-ui.secret-form-field.reset\">Reset</Trans>\n </Button>\n </>\n ) : (\n <input\n type=\"password\"\n className={`gf-form-input width-${inputWidth}`}\n placeholder={placeholder}\n {...inputProps}\n />\n )\n }\n />\n );\n};\n\nSecretFormField.displayName = 'SecretFormField';\n","import { FormEvent } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\n\nimport { VariableLegend } from './VariableLegend';\nimport { VariableTextField } from './VariableTextField';\n\ninterface ConstantVariableFormProps {\n constantValue: string;\n onChange: (event: FormEvent<HTMLInputElement>) => void;\n}\n\nexport function ConstantVariableForm({ onChange, constantValue }: ConstantVariableFormProps) {\n return (\n <>\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.constant-variable-form.constant-options\">Constant options</Trans>\n </VariableLegend>\n <VariableTextField\n defaultValue={constantValue}\n name=\"Value\"\n placeholder={t('dashboard-scene.constant-variable-form.placeholder-your-metric-prefix', 'Your metric prefix')}\n onBlur={onChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.ConstantVariable.constantOptionsQueryInputV2}\n width={30}\n />\n </>\n );\n}\n","import { css, cx } from '@emotion/css';\nimport { useEffect } from 'react';\nimport { Controller, useFieldArray, useFormContext } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Divider, Field, IconButton, Input, Select, useStyles2 } from '@grafana/ui';\nimport { alertRuleApi } from 'app/features/alerting/unified/api/alertRuleApi';\nimport { MatcherOperator } from 'app/plugins/datasource/alertmanager/types';\n\nimport { SilenceFormFields } from '../../types/silence-form';\nimport { matcherFieldOptions } from '../../utils/alertmanager';\n\ninterface Props {\n className?: string;\n required: boolean;\n ruleUid?: string;\n}\n\nconst MatchersField = ({ className, required, ruleUid }: Props) => {\n const styles = useStyles2(getStyles);\n const formApi = useFormContext<SilenceFormFields>();\n const {\n control,\n register,\n formState: { errors },\n } = formApi;\n\n const { fields: matchers = [], append, remove } = useFieldArray<SilenceFormFields>({ name: 'matchers' });\n\n const [getAlertRule, { data: alertRule }] = alertRuleApi.endpoints.getAlertRule.useLazyQuery();\n useEffect(() => {\n // If we have a UID, fetch the alert rule details so we can display the rule name\n if (ruleUid) {\n getAlertRule({ uid: ruleUid });\n }\n }, [getAlertRule, ruleUid]);\n\n return (\n <div className={className}>\n <Field\n label={t('alerting.matchers-field.label-refine-affected-alerts', 'Refine affected alerts')}\n required={required}\n >\n <div>\n <div className={cx(styles.matchers, styles.indent)}>\n {alertRule && (\n <div>\n <Field label={t('alerting.matchers-field.label-alert-rule', 'Alert rule')} disabled>\n <Input id=\"alert-rule-name\" defaultValue={alertRule.grafana_alert.title} disabled />\n </Field>\n <Divider />\n </div>\n )}\n {matchers.map((matcher, index) => {\n return (\n <div className={styles.row} key={`${matcher.id}`} data-testid=\"matcher\">\n <Field\n label={t('alerting.matchers-field.label-label', 'Label')}\n invalid={!!errors?.matchers?.[index]?.name}\n error={errors?.matchers?.[index]?.name?.message}\n >\n <Input\n {...register(`matchers.${index}.name` as const, {\n required: {\n value: required,\n message: t('alerting.matchers-field.message.required', 'Required.'),\n },\n })}\n defaultValue={matcher.name}\n placeholder={t('alerting.matchers-field.placeholder-label', 'label')}\n id={`matcher-${index}-label`}\n />\n </Field>\n <Field label={t('alerting.matchers-field.label-operator', 'Operator')}>\n <Controller\n control={control}\n render={({ field: { onChange, ref, ...field } }) => (\n <Select\n {...field}\n onChange={(value) => onChange(value.value)}\n className={styles.matcherOptions}\n options={matcherFieldOptions}\n aria-label={t('alerting.matchers-field.aria-label-operator', 'operator')}\n id={`matcher-${index}-operator`}\n />\n )}\n defaultValue={matcher.operator || matcherFieldOptions[0].value}\n name={`matchers.${index}.operator`}\n rules={{\n required: {\n value: required,\n message: t('alerting.matchers-field.message.required', 'Required.'),\n },\n }}\n />\n </Field>\n <Field\n label={t('alerting.matchers-field.label-value', 'Value')}\n invalid={!!errors?.matchers?.[index]?.value}\n error={errors?.matchers?.[index]?.value?.message}\n >\n <Input\n {...register(`matchers.${index}.value` as const, {\n required: {\n value: required,\n message: t('alerting.matchers-field.message.required', 'Required.'),\n },\n })}\n defaultValue={matcher.value}\n placeholder={t('alerting.matchers-field.placeholder-value', 'value')}\n id={`matcher-${index}-value`}\n />\n </Field>\n {(matchers.length > 1 || !required) && (\n <IconButton\n aria-label={t('alerting.matchers-field.aria-label-remove-matcher', 'Remove matcher')}\n className={styles.removeButton}\n name=\"trash-alt\"\n onClick={() => remove(index)}\n >\n <Trans i18nKey=\"alerting.matchers-field.remove\">Remove</Trans>\n </IconButton>\n )}\n </div>\n );\n })}\n </div>\n <Button\n className={styles.indent}\n tooltip={t(\n 'alerting.matchers-field.tooltip-refine-which-alert-instances-silenced-selecting',\n 'Refine which alert instances are silenced by selecting label matchers'\n )}\n type=\"button\"\n icon=\"plus\"\n variant=\"secondary\"\n onClick={() => {\n const newMatcher = { name: '', value: '', operator: MatcherOperator.equal };\n append(newMatcher);\n }}\n >\n <Trans i18nKey=\"alerting.matchers-field.add-matcher\">Add matcher</Trans>\n </Button>\n </div>\n </Field>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n marginTop: theme.spacing(2),\n }),\n row: css({\n marginTop: theme.spacing(1),\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n backgroundColor: theme.colors.background.secondary,\n padding: `${theme.spacing(1)} ${theme.spacing(1)} 0 ${theme.spacing(1)}`,\n '& > * + *': {\n marginLeft: theme.spacing(2),\n },\n }),\n removeButton: css({\n marginLeft: theme.spacing(1),\n marginTop: theme.spacing(2.5),\n }),\n matcherOptions: css({\n minWidth: '140px',\n }),\n matchers: css({\n maxWidth: `${theme.breakpoints.values.sm}px`,\n margin: `${theme.spacing(1)} 0`,\n paddingTop: theme.spacing(0.5),\n }),\n indent: css({\n marginLeft: theme.spacing(2),\n }),\n };\n};\n\nexport default MatchersField;\n","import { css } from '@emotion/css';\nimport { useController, useFormContext } from 'react-hook-form';\n\nimport { dateTime } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Field, TimeRangeInput } from '@grafana/ui';\n\nimport { SilenceFormFields } from '../../types/silence-form';\n\nexport const SilencePeriod = () => {\n const { control, getValues } = useFormContext<SilenceFormFields>();\n\n const {\n field: { onChange: onChangeStartsAt, value: startsAt },\n fieldState: { invalid: startsAtInvalid },\n } = useController({\n name: 'startsAt',\n control,\n rules: {\n validate: (value) => getValues().endsAt > value,\n },\n });\n\n const {\n field: { onChange: onChangeEndsAt, value: endsAt },\n fieldState: { invalid: endsAtInvalid },\n } = useController({\n name: 'endsAt',\n control,\n rules: {\n validate: (value) => getValues().startsAt < value,\n },\n });\n\n const {\n field: { onChange: onChangeTimeZone, value: timeZone },\n } = useController({\n name: 'timeZone',\n control,\n });\n\n const invalid = startsAtInvalid || endsAtInvalid;\n\n const from = dateTime(startsAt);\n const to = dateTime(endsAt);\n\n return (\n <Field\n className={styles.timeRange}\n label={t('alerting.silence-period.label-silence-start-and-end', 'Silence start and end')}\n error={invalid ? 'To is before or the same as from' : ''}\n invalid={invalid}\n >\n <TimeRangeInput\n value={{\n from,\n to,\n raw: {\n from,\n to,\n },\n }}\n timeZone={timeZone}\n onChange={(newValue) => {\n onChangeStartsAt(dateTime(newValue.from));\n onChangeEndsAt(dateTime(newValue.to));\n }}\n onChangeTimeZone={(newValue) => onChangeTimeZone(newValue)}\n hideTimeZone={false}\n hideQuickRanges={true}\n placeholder={t('alerting.silence-period.placeholder-select-time-range', 'Select time range')}\n />\n </Field>\n );\n};\n\nconst styles = {\n timeRange: css({\n width: '400px',\n }),\n};\n","import { css } from '@emotion/css';\nimport { useState } from 'react';\nimport { useDebounce, useDeepCompareEffect } from 'react-use';\n\nimport { AlertLabels } from '@grafana/alerting/unstable';\nimport { GrafanaTheme2, dateTime } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, Badge, Icon, LoadingPlaceholder, Tooltip, useStyles2 } from '@grafana/ui';\nimport { MatcherFieldValue } from 'app/features/alerting/unified/types/silence-form';\nimport { matcherFieldToMatcher } from 'app/features/alerting/unified/utils/alertmanager';\nimport { MATCHER_ALERT_RULE_UID } from 'app/features/alerting/unified/utils/constants';\nimport { AlertmanagerAlert, Matcher, MatcherOperator } from 'app/plugins/datasource/alertmanager/types';\n\nimport { alertmanagerApi } from '../../api/alertmanagerApi';\nimport { isNullDate } from '../../utils/time';\nimport { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable';\n\nimport { AmAlertStateTag } from './AmAlertStateTag';\n\ninterface Props {\n amSourceName: string;\n matchers: MatcherFieldValue[];\n ruleUid?: string;\n}\n\n/**\n * Performs a deep equality check on the dependencies, and debounces the callback\n */\nconst useDebouncedDeepCompare = (cb: () => void, debounceMs: number, dependencies: unknown[]) => {\n const [state, setState] = useState<unknown[]>();\n\n useDebounce(cb, debounceMs, [state]);\n\n useDeepCompareEffect(() => {\n setState(dependencies);\n }, [dependencies]);\n};\n\nexport const SilencedInstancesPreview = ({ amSourceName, matchers: inputMatchers, ruleUid }: Props) => {\n const matchers: Matcher[] = [\n ...(ruleUid ? [{ name: MATCHER_ALERT_RULE_UID, value: ruleUid, operator: MatcherOperator.equal }] : []),\n ...inputMatchers,\n ].map(matcherFieldToMatcher);\n const useLazyQuery = alertmanagerApi.endpoints.getAlertmanagerAlerts.useLazyQuery;\n const styles = useStyles2(getStyles);\n const columns = useColumns();\n\n // By default the form contains an empty matcher - with empty name and value and = operator\n // We don't want to fetch previews for empty matchers as it results in all alerts returned\n const hasValidMatchers = ruleUid || inputMatchers.some((matcher) => matcher.value && matcher.name);\n\n const [getAlertmanagerAlerts, { currentData: alerts = [], isFetching, isError }] = useLazyQuery();\n\n // We need to deep compare the matchers, as otherwise the preview API call is triggered on every render\n // of the component. This is because between react-hook-form's useFieldArray, and our parsing of the matchers,\n // we end up otherwise triggering the call too frequently\n useDebouncedDeepCompare(\n () => {\n if (hasValidMatchers) {\n getAlertmanagerAlerts({ amSourceName, filter: { matchers } });\n }\n },\n 500,\n [amSourceName, matchers]\n );\n\n if (isError) {\n return (\n <Alert\n title={t('alerting.silenced-instances-preview.title-preview-not-available', 'Preview not available')}\n severity=\"error\"\n >\n <Trans i18nKey=\"alerting.silenced-instances-preview.error-generating-preview\">\n Error occurred when generating preview of affected alerts. Are your matchers valid?\n </Trans>\n </Alert>\n );\n }\n\n const tableItemAlerts = alerts.map<DynamicTableItemProps<AlertmanagerAlert>>((alert) => ({\n id: alert.fingerprint,\n data: alert,\n }));\n\n return (\n <div>\n <h4 className={styles.title}>\n <Trans i18nKey=\"alerting.silences.affected-instances\">Affected alert instances</Trans>\n <Tooltip\n content={\n <div>\n <Trans i18nKey=\"alerting.silences.preview-affected-instances\">\n Preview the alert instances affected by this silence.\n </Trans>\n <br />\n <Trans i18nKey=\"alerting.silences.only-firing-instances\">\n Only alert instances in the firing state are displayed.\n </Trans>\n </div>\n }\n >\n <span>\n \n <Icon name=\"info-circle\" size=\"sm\" />\n </span>\n </Tooltip>\n {tableItemAlerts.length > 0 ? (\n <Badge className={styles.badge} color=\"blue\" text={tableItemAlerts.length} />\n ) : null}\n </h4>\n {!hasValidMatchers && (\n <span>\n <Trans i18nKey=\"alerting.silenced-instances-preview.valid-matcher-affected-alerts\">\n Add a valid matcher to see affected alerts\n </Trans>\n </span>\n )}\n\n {isFetching && (\n <LoadingPlaceholder\n text={t(\n 'alerting.silenced-instances-preview.text-loading-affected-alert-rule-instances',\n 'Loading affected alert rule instances...'\n )}\n />\n )}\n {!isFetching && !isError && hasValidMatchers && (\n <div className={styles.table}>\n {tableItemAlerts.length > 0 ? (\n <DynamicTable\n items={tableItemAlerts}\n isExpandable={false}\n cols={columns}\n pagination={{ itemsPerPage: 10 }}\n />\n ) : (\n <span>\n <Trans i18nKey=\"alerting.silenced-instances-preview.no-firing-alert-instances-found\">\n No firing alert instances found\n </Trans>\n </span>\n )}\n </div>\n )}\n </div>\n );\n};\n\nfunction useColumns(): Array<DynamicTableColumnProps<AlertmanagerAlert>> {\n const styles = useStyles2(getStyles);\n\n return [\n {\n id: 'state',\n label: t('alerting.use-columns.label.state', 'State'),\n renderCell: function renderStateTag({ data }) {\n return <AmAlertStateTag state={data.status.state} />;\n },\n size: '120px',\n className: styles.stateColumn,\n },\n {\n id: 'labels',\n label: t('alerting.use-columns.label.labels', 'Labels'),\n renderCell: function renderName({ data }) {\n return <AlertLabels labels={data.labels} size=\"sm\" />;\n },\n size: 'auto',\n },\n {\n id: 'created',\n label: t('alerting.use-columns.label.created', 'Created'),\n renderCell: function renderSummary({ data }) {\n return <>{isNullDate(data.startsAt) ? '-' : dateTime(data.startsAt).format('YYYY-MM-DD HH:mm:ss')}</>;\n },\n size: '180px',\n },\n ];\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n table: css({\n maxWidth: `${theme.breakpoints.values.lg}px`,\n }),\n moreMatches: css({\n marginTop: theme.spacing(1),\n }),\n title: css({\n display: 'flex',\n alignItems: 'center',\n }),\n badge: css({\n marginLeft: theme.spacing(1),\n }),\n stateColumn: css({\n display: 'flex',\n alignItems: 'center',\n }),\n});\n","import { css } from '@emotion/css';\nimport { pickBy } from 'lodash';\nimport { useMemo, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useParams } from 'react-router-dom-v5-compat';\nimport { useDebounce } from 'react-use';\n\nimport {\n GrafanaTheme2,\n addDurationToDate,\n dateTime,\n intervalToAbbreviatedDurationString,\n isValidDate,\n parseDuration,\n} from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { isFetchError, locationService } from '@grafana/runtime';\nimport {\n Alert,\n Button,\n Field,\n FieldSet,\n Input,\n LinkButton,\n LoadingPlaceholder,\n Stack,\n TextArea,\n useStyles2,\n} from '@grafana/ui';\nimport { SilenceCreatedResponse, alertSilencesApi } from 'app/features/alerting/unified/api/alertSilencesApi';\nimport { MATCHER_ALERT_RULE_UID } from 'app/features/alerting/unified/utils/constants';\nimport { GRAFANA_RULES_SOURCE_NAME, getDatasourceAPIUid } from 'app/features/alerting/unified/utils/datasource';\nimport { MatcherOperator, SilenceCreatePayload } from 'app/plugins/datasource/alertmanager/types';\n\nimport { contextSrv } from '../../../../../core/services/context_srv';\nimport { AlertmanagerAction, useAlertmanagerAbility } from '../../hooks/useAbilities';\nimport { useAlertmanager } from '../../state/AlertmanagerContext';\nimport { SilenceFormFields } from '../../types/silence-form';\nimport { matcherFieldToMatcher } from '../../utils/alertmanager';\nimport { makeAMLink } from '../../utils/misc';\nimport { withPageErrorBoundary } from '../../withPageErrorBoundary';\nimport { AlertmanagerPageWrapper } from '../AlertingPageWrapper';\nimport { GrafanaAlertmanagerWarning } from '../GrafanaAlertmanagerWarning';\n\nimport MatchersField from './MatchersField';\nimport { SilencePeriod } from './SilencePeriod';\nimport { SilencedInstancesPreview } from './SilencedInstancesPreview';\nimport { getDefaultSilenceFormValues, getFormFieldsForSilence } from './utils';\n\n/**\n * Silences editor for editing an existing silence.\n *\n * Fetches silence details from API, based on `silenceId`\n */\nconst ExistingSilenceEditor = () => {\n const { id: silenceId = '' } = useParams();\n const { selectedAlertmanager: alertManagerSourceName = '' } = useAlertmanager();\n const {\n data: silence,\n isLoading: getSilenceIsLoading,\n error: errorGettingExistingSilence,\n } = alertSilencesApi.endpoints.getSilence.useQuery({\n id: silenceId,\n datasourceUid: getDatasourceAPIUid(alertManagerSourceName),\n ruleMetadata: true,\n accessControl: true,\n });\n const ruleUid = silence?.matchers?.find((m) => m.name === MATCHER_ALERT_RULE_UID)?.value;\n const isGrafanaAlertManager = alertManagerSourceName === GRAFANA_RULES_SOURCE_NAME;\n\n const defaultValues = useMemo(() => {\n if (!silence) {\n return;\n }\n const filteredMatchers = silence.matchers?.filter((m) => m.name !== MATCHER_ALERT_RULE_UID);\n return getFormFieldsForSilence({ ...silence, matchers: filteredMatchers });\n }, [silence]);\n\n if (silenceId && getSilenceIsLoading) {\n return (\n <LoadingPlaceholder\n text={t(\n 'alerting.existing-silence-editor.text-loading-existing-silence-information',\n 'Loading existing silence information...'\n )}\n />\n );\n }\n\n const existingSilenceNotFound =\n isFetchError(errorGettingExistingSilence) && errorGettingExistingSilence.status === 404;\n\n if (existingSilenceNotFound) {\n return (\n <Alert\n title={t(\n 'alerting.existing-silence-editor.title-silence-not-found',\n 'Existing silence \"{{silenceId}}\" not found',\n { silenceId }\n )}\n severity=\"warning\"\n />\n );\n }\n\n const canEditSilence = isGrafanaAlertManager ? silence?.accessControl?.write : true;\n\n if (!canEditSilence) {\n return (\n <Alert\n title={t(\n 'alerting.existing-silence-editor.title-permission-editrecreate-silence',\n 'You do not have permission to edit/recreate this silence'\n )}\n severity=\"error\"\n />\n );\n }\n\n return (\n <>\n <GrafanaAlertmanagerWarning currentAlertmanager={alertManagerSourceName} />\n <SilencesEditor ruleUid={ruleUid} formValues={defaultValues} alertManagerSourceName={alertManagerSourceName} />\n </>\n );\n};\n\ntype SilencesEditorProps = {\n formValues?: SilenceFormFields;\n alertManagerSourceName: string;\n onSilenceCreated?: (response: SilenceCreatedResponse) => void;\n onCancel?: () => void;\n ruleUid?: string;\n};\n\n/**\n * Base silences editor used for new silences (from both the list view and the drawer),\n * and for editing existing silences\n */\nexport const SilencesEditor = ({\n formValues = getDefaultSilenceFormValues(),\n alertManagerSourceName,\n onSilenceCreated,\n onCancel,\n ruleUid,\n}: SilencesEditorProps) => {\n const [previewAlertsSupported, previewAlertsAllowed] = useAlertmanagerAbility(\n AlertmanagerAction.PreviewSilencedInstances\n );\n const canPreview = previewAlertsSupported && previewAlertsAllowed;\n\n const [createSilence, { isLoading }] = alertSilencesApi.endpoints.createSilence.useMutation();\n const formAPI = useForm({ defaultValues: formValues });\n const styles = useStyles2(getStyles);\n\n const { register, handleSubmit, formState, watch, setValue, clearErrors } = formAPI;\n\n const [duration, startsAt, endsAt, matchers] = watch(['duration', 'startsAt', 'endsAt', 'matchers']);\n\n /** Default action taken after creation or cancellation, if corresponding method is not defined */\n const defaultHandler = () => {\n locationService.push(makeAMLink('/alerting/silences', alertManagerSourceName));\n };\n\n const onSilenceCreatedHandler = onSilenceCreated || defaultHandler;\n const onCancelHandler = onCancel || defaultHandler;\n\n const onSubmit = async (data: SilenceFormFields) => {\n const { id, startsAt, endsAt, comment, createdBy, matchers: matchersFields } = data;\n\n if (ruleUid) {\n matchersFields.push({ name: MATCHER_ALERT_RULE_UID, value: ruleUid, operator: MatcherOperator.equal });\n }\n\n const matchersToSend = matchersFields.map(matcherFieldToMatcher).filter((field) => field.name && field.value);\n const payload = pickBy(\n {\n id,\n startsAt,\n endsAt,\n comment,\n createdBy,\n matchers: matchersToSend,\n },\n (value) => !!value\n ) as SilenceCreatePayload;\n await createSilence({ datasourceUid: getDatasourceAPIUid(alertManagerSourceName), payload })\n .unwrap()\n .then((newSilenceResponse) => {\n onSilenceCreatedHandler?.(newSilenceResponse);\n });\n };\n\n // Keep duration and endsAt in sync\n const [prevDuration, setPrevDuration] = useState(duration);\n useDebounce(\n () => {\n if (isValidDate(startsAt) && isValidDate(endsAt)) {\n if (duration !== prevDuration) {\n setValue('endsAt', dateTime(addDurationToDate(new Date(startsAt), parseDuration(duration))).toISOString());\n setPrevDuration(duration);\n } else {\n const startValue = new Date(startsAt).valueOf();\n const endValue = new Date(endsAt).valueOf();\n if (endValue > startValue) {\n const nextDuration = intervalToAbbreviatedDurationString({\n start: new Date(startsAt),\n end: new Date(endsAt),\n });\n setValue('duration', nextDuration);\n setPrevDuration(nextDuration);\n }\n }\n }\n },\n 700,\n [clearErrors, duration, endsAt, prevDuration, setValue, startsAt]\n );\n\n const userLogged = Boolean(contextSrv.user.isSignedIn && contextSrv.user.name);\n\n return (\n <FormProvider {...formAPI}>\n <form onSubmit={handleSubmit(onSubmit)}>\n <FieldSet className={styles.formContainer}>\n <div className={styles.silencePeriod}>\n <SilencePeriod />\n <Field\n label={t('alerting.silences-editor.label-duration', 'Duration')}\n invalid={!!formState.errors.duration}\n error={\n formState.errors.duration &&\n (formState.errors.duration.type === 'required' ? 'Required field' : formState.errors.duration.message)\n }\n >\n <Input\n {...register('duration', {\n validate: (value) =>\n Object.keys(parseDuration(value)).length === 0\n ? 'Invalid duration. Valid example: 1d 4h (Available units: y, M, w, d, h, m, s)'\n : undefined,\n })}\n id=\"duration\"\n />\n </Field>\n </div>\n\n <MatchersField required={Boolean(!ruleUid)} ruleUid={ruleUid} />\n\n <Field\n label={t('alerting.silences-editor.label-comment', 'Comment')}\n required\n error={formState.errors.comment?.message}\n invalid={!!formState.errors.comment}\n >\n <TextArea\n {...register('comment', {\n required: { value: true, message: t('alerting.silences-editor.message.required', 'Required.') },\n })}\n rows={5}\n placeholder={t(\n 'alerting.silences-editor.comment-placeholder-details-about-the-silence',\n 'Details about the silence'\n )}\n id=\"comment\"\n />\n </Field>\n {!userLogged && (\n <Field\n label={t('alerting.silences-editor.label-created-by', 'Created By')}\n required\n error={formState.errors.createdBy?.message}\n invalid={!!formState.errors.createdBy}\n >\n <Input\n {...register('createdBy', {\n required: { value: true, message: t('alerting.silences-editor.message.required', 'Required.') },\n })}\n placeholder={t(\n 'alerting.silences-editor.placeholder-whos-creating-the-silence',\n \"Who's creating the silence\"\n )}\n />\n </Field>\n )}\n {canPreview && (\n <SilencedInstancesPreview amSourceName={alertManagerSourceName} matchers={matchers} ruleUid={ruleUid} />\n )}\n </FieldSet>\n <Stack gap={1}>\n {isLoading && (\n <Button disabled={true} icon=\"spinner\" variant=\"primary\">\n <Trans i18nKey=\"alerting.silences-editor.saving\">Saving...</Trans>\n </Button>\n )}\n {!isLoading && (\n <Button type=\"submit\">\n <Trans i18nKey=\"alerting.silences-editor.save-silence\">Save silence</Trans>\n </Button>\n )}\n <LinkButton onClick={onCancelHandler} variant={'secondary'}>\n <Trans i18nKey=\"alerting.common.cancel\">Cancel</Trans>\n </LinkButton>\n </Stack>\n </form>\n </FormProvider>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n formContainer: css({\n maxWidth: theme.breakpoints.values.md,\n }),\n alertRule: css({\n paddingBottom: theme.spacing(2),\n }),\n silencePeriod: css({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n gap: theme.spacing(1),\n maxWidth: theme.breakpoints.values.sm,\n paddingTop: theme.spacing(2),\n }),\n});\n\nfunction ExistingSilenceEditorPage() {\n const pageNav = {\n id: 'silence-edit',\n text: t('alerting.existing-silence-editor-page.page-nav.text.edit-silence', 'Edit silence'),\n subTitle: 'Recreate existing silence to stop notifications from a particular alert rule',\n };\n return (\n <AlertmanagerPageWrapper navId=\"silences\" pageNav={pageNav} accessType=\"instance\">\n <ExistingSilenceEditor />\n </AlertmanagerPageWrapper>\n );\n}\n\nexport default withPageErrorBoundary(ExistingSilenceEditorPage);\n","import { FormEvent, useEffect, useState } from 'react';\n\nimport { RawTimeRange, TimeRange } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, ClipboardButton, Field, Label, Stack, Switch, TextArea } from '@grafana/ui';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nimport { ThemePicker } from './ThemePicker';\nimport { ShareModalTabProps } from './types';\nimport { buildIframeHtml, getTrackingSource } from './utils';\n\ninterface Props extends Omit<ShareModalTabProps, 'panel' | 'dashboard'> {\n panelId: string;\n timeFrom?: string;\n dashboard: { uid: string; time: RawTimeRange };\n range?: TimeRange;\n buildIframe?: typeof buildIframeHtml;\n onCancelClick?: () => void;\n}\n\nexport function ShareEmbed({\n panelId,\n timeFrom,\n dashboard,\n range,\n onCancelClick,\n buildIframe = buildIframeHtml,\n}: Props) {\n const [useCurrentTimeRange, setUseCurrentTimeRange] = useState(true);\n const [selectedTheme, setSelectedTheme] = useState('current');\n const [iframeHtml, setIframeHtml] = useState('');\n\n useEffect(() => {\n const newIframeHtml = buildIframe(useCurrentTimeRange, dashboard.uid, selectedTheme, panelId, timeFrom, range);\n setIframeHtml(newIframeHtml);\n }, [selectedTheme, useCurrentTimeRange, dashboard, panelId, timeFrom, range, buildIframe]);\n\n const onIframeHtmlChange = (event: FormEvent<HTMLTextAreaElement>) => {\n setIframeHtml(event.currentTarget.value);\n };\n\n const onUseCurrentTimeRangeChange = () => {\n setUseCurrentTimeRange((useCurTimeRange) => !useCurTimeRange);\n };\n\n const onThemeChange = (value: string) => {\n setSelectedTheme(value);\n };\n\n const clipboardButton = (\n <ClipboardButton\n icon=\"copy\"\n variant=\"primary\"\n getText={() => iframeHtml}\n onClipboardCopy={() => {\n DashboardInteractions.embedSnippetCopy({\n currentTimeRange: useCurrentTimeRange,\n theme: selectedTheme,\n shareResource: getTrackingSource(panelId),\n });\n }}\n >\n <Trans i18nKey=\"share-modal.embed.copy\">Copy to clipboard</Trans>\n </ClipboardButton>\n );\n\n return (\n <>\n <p>\n <Trans i18nKey=\"share-modal.embed.info\">Generate HTML for embedding an iframe with this panel</Trans>\n </p>\n <Field>\n <Stack gap={1} alignItems=\"start\">\n <Switch\n label={t('share-modal.embed.time-range', 'Lock time range')}\n id=\"share-current-time-range\"\n value={useCurrentTimeRange}\n onChange={onUseCurrentTimeRangeChange}\n />\n <Label\n description={t(\n 'embed.share.time-range-description',\n 'Change the current relative time range to an absolute time range'\n )}\n >\n <Trans i18nKey=\"embed.share.time-range-label\">Lock time range</Trans>\n </Label>\n </Stack>\n </Field>\n <ThemePicker selectedTheme={selectedTheme} onChange={onThemeChange} />\n <Field\n label={t('share-modal.embed.html', 'Embed HTML')}\n description={t(\n 'share-modal.embed.html-description',\n 'The HTML code below can be pasted and included in another web page. Unless anonymous access is enabled, the users viewing that page need to be signed into Grafana for the graph to load.'\n )}\n >\n <TextArea\n data-testid=\"share-embed-html\"\n id=\"share-panel-embed-embed-html-textarea\"\n rows={5}\n value={iframeHtml}\n onChange={onIframeHtmlChange}\n />\n </Field>\n <Stack gap={1} justifyContent={'start'}>\n {clipboardButton}\n <Button variant=\"secondary\" fill=\"outline\" onClick={onCancelClick}>\n <Trans i18nKey=\"snapshot.share.cancel-button\">Cancel</Trans>\n </Button>\n </Stack>\n </>\n );\n}\n","import { TypedVariableModel } from '@grafana/data';\nimport { config, DataSourceWithBackend, featureEnabled } from '@grafana/runtime';\nimport { getConfig } from 'app/core/config';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\n\nimport { PanelModel } from '../../../state/PanelModel';\nimport { shareDashboardType } from '../utils';\n\nimport { supportedDatasources } from './SupportedPubdashDatasources';\n\nexport enum PublicDashboardShareType {\n PUBLIC = 'public',\n EMAIL = 'email',\n}\n\nexport interface PublicDashboardSettings {\n annotationsEnabled: boolean;\n isEnabled: boolean;\n timeSelectionEnabled: boolean;\n share: PublicDashboardShareType;\n}\n\nexport interface PublicDashboard extends PublicDashboardSettings {\n accessToken?: string;\n uid: string;\n dashboardUid: string;\n timeSettings?: object;\n recipients?: Array<{ uid: string; recipient: string }>;\n}\n\nexport interface SessionDashboard {\n dashboardTitle: string;\n dashboardUid: string;\n publicDashboardAccessToken: string;\n slug: string;\n}\n\nexport interface SessionUser {\n email: string;\n firstSeenAtAge: string;\n lastSeenAtAge: string;\n totalDashboards: number;\n}\n\n// Instance methods\nexport const dashboardHasTemplateVariables = (variables: TypedVariableModel[]): boolean => {\n return variables.length > 0;\n};\n\nexport const publicDashboardPersisted = (publicDashboard?: PublicDashboard): boolean => {\n return publicDashboard?.uid !== '' && publicDashboard?.uid !== undefined;\n};\n\n/**\n * Get unique datasource names from all panels that are not currently supported by public dashboards.\n */\nexport const getUnsupportedDashboardDatasources = async (panels: PanelModel[]): Promise<string[]> => {\n let unsupportedDS = new Set<string>();\n\n for (const panel of panels) {\n for (const target of panel.targets) {\n const dsType = target?.datasource?.type;\n if (dsType) {\n if (!supportedDatasources.has(dsType)) {\n unsupportedDS.add(dsType);\n } else {\n const ds = await getDatasourceSrv().get(target.datasource);\n if (!(ds instanceof DataSourceWithBackend)) {\n unsupportedDS.add(dsType);\n }\n }\n }\n }\n }\n\n return Array.from(unsupportedDS).sort();\n};\n\n/**\n * Generate the public dashboard url. Uses the appUrl from the Grafana boot config, so urls will also be correct\n * when Grafana is hosted on a subpath.\n *\n * All app urls from the Grafana boot config end with a slash.\n *\n * @param accessToken\n */\nexport const generatePublicDashboardUrl = (accessToken: string): string => {\n return `${getConfig().appUrl}public-dashboards/${accessToken}`;\n};\n\nexport const generatePublicDashboardConfigUrl = (dashboardUid: string, dashboardName: string): string => {\n return `/d/${dashboardUid}/${dashboardName}?shareView=${shareDashboardType.publicDashboard}`;\n};\n\nexport const validEmailRegex = /^[A-Z\\d._%+-]+@[A-Z\\d.-]+\\.[A-Z]{2,}$/i;\n\nexport const isPublicDashboardsEnabled = () => {\n return config.publicDashboardsEnabled;\n};\n\nexport const isEmailSharingEnabled = () =>\n isPublicDashboardsEnabled() &&\n !!config.featureToggles.publicDashboardsEmailSharing &&\n featureEnabled('publicDashboardsEmailSharing');\n","import { useEffect } from 'react';\nimport * as React from 'react';\nimport { VariableSizeList } from 'react-window';\n\nimport { DataFrame } from '@grafana/data';\n\nimport { GrafanaTableState } from './types';\n\n/**\n To have the custom vertical scrollbar always visible (https://github.com/grafana/grafana/issues/52136),\n we need to bring the element from the VariableSizeList scope to the outer Table container scope,\n because the VariableSizeList scope has overflow. By moving scrollbar to container scope we will have\n it always visible since the entire width is in view.\n Select the scrollbar element from the VariableSizeList scope\n */\nexport function useFixScrollbarContainer(\n variableSizeListScrollbarRef: React.RefObject<HTMLDivElement>,\n tableDivRef: React.RefObject<HTMLDivElement>\n) {\n useEffect(() => {\n if (variableSizeListScrollbarRef.current && tableDivRef.current) {\n const listVerticalScrollbarHTML = variableSizeListScrollbarRef.current.querySelector('.track-vertical');\n\n // Select Table custom scrollbars\n const tableScrollbarView = tableDivRef.current.firstChild;\n\n //If they exist, move the scrollbar element to the Table container scope\n if (tableScrollbarView && listVerticalScrollbarHTML) {\n listVerticalScrollbarHTML.remove();\n if (tableScrollbarView instanceof HTMLElement) {\n tableScrollbarView.querySelector(':scope > .track-vertical')?.remove();\n tableScrollbarView.append(listVerticalScrollbarHTML);\n }\n }\n }\n });\n}\n\n/**\n react-table caches the height of cells, so we need to reset them when expanding/collapsing rows.\n We use `lastExpandedOrCollapsedIndex` since collapsed rows disappear from `expandedIndexes` but still keep their expanded\n height.\n */\nexport function useResetVariableListSizeCache(\n extendedState: GrafanaTableState,\n listRef: React.RefObject<VariableSizeList>,\n data: DataFrame,\n hasUniqueId: boolean\n) {\n // Make sure we trigger the reset when keys change in any way\n const expandedRowsRepr = JSON.stringify(Object.keys(extendedState.expanded));\n\n useEffect(() => {\n // By default, reset all rows\n let resetIndex = 0;\n\n // If we have unique field, extendedState.expanded keys are not row indexes but IDs so instead of trying to search\n // for correct index we just reset the whole table.\n if (!hasUniqueId) {\n // If we don't have we reset from the last changed index.\n if (Number.isFinite(extendedState.lastExpandedOrCollapsedIndex)) {\n resetIndex = extendedState.lastExpandedOrCollapsedIndex!;\n }\n\n // Account for paging.\n resetIndex =\n extendedState.pageIndex === 0\n ? resetIndex - 1\n : resetIndex - extendedState.pageIndex - extendedState.pageIndex * extendedState.pageSize;\n }\n\n listRef.current?.resetAfterIndex(Math.max(resetIndex, 0));\n return;\n }, [\n extendedState.lastExpandedOrCollapsedIndex,\n extendedState.pageSize,\n extendedState.pageIndex,\n listRef,\n data,\n expandedRowsRepr,\n hasUniqueId,\n ]);\n}\n","import { useCallback } from 'react';\n\nimport { getFieldDisplayName } from '@grafana/data';\n\nimport {\n TableSortByFieldState,\n GrafanaTableColumn,\n GrafanaTableState,\n TableStateReducerProps,\n TableRTProps,\n} from './types';\n\nexport interface ActionType {\n type: string;\n id: string | undefined;\n}\n\nexport function useTableStateReducer({ onColumnResize, onSortByChange, data }: TableStateReducerProps) {\n return useCallback(\n (newState: GrafanaTableState, action: ActionType) => {\n switch (action.type) {\n case 'columnDoneResizing':\n if (onColumnResize) {\n const info = (newState.columnResizing?.headerIdWidths as any)?.[0];\n const columnIdString = info?.[0];\n const fieldIndex = parseInt(columnIdString, 10);\n const width = Math.round(newState.columnResizing.columnWidths?.[columnIdString]);\n\n const field = data.fields?.[fieldIndex];\n if (!field) {\n return newState;\n }\n\n const fieldDisplayName = getFieldDisplayName(field, data);\n onColumnResize(fieldDisplayName, width);\n }\n case 'toggleSortBy':\n if (onSortByChange) {\n const sortByFields: TableSortByFieldState[] = [];\n\n for (const sortItem of newState.sortBy) {\n const field = data.fields[parseInt(sortItem.id, 10)];\n if (!field) {\n continue;\n }\n\n sortByFields.push({\n displayName: getFieldDisplayName(field, data),\n desc: sortItem.desc,\n });\n }\n\n onSortByChange(sortByFields);\n }\n case 'toggleRowExpanded': {\n if (action.id) {\n return {\n ...newState,\n lastExpandedOrCollapsedIndex: parseInt(action.id, 10),\n };\n }\n }\n }\n\n return newState;\n },\n [data, onColumnResize, onSortByChange]\n );\n}\n\nexport function getInitialState(\n initialSortBy: TableRTProps['initialSortBy'],\n columns: GrafanaTableColumn[]\n): Partial<GrafanaTableState> {\n const state: Partial<GrafanaTableState> = {};\n\n if (initialSortBy) {\n state.sortBy = [];\n\n for (const sortBy of initialSortBy) {\n for (const col of columns) {\n if (col.Header === sortBy.displayName) {\n state.sortBy.push({ id: col.id!, desc: sortBy.desc });\n }\n }\n }\n }\n\n return state;\n}\n","import { css, cx } from '@emotion/css';\nimport { useCallback, useMemo } from 'react';\nimport * as React from 'react';\nimport { FixedSizeList as List, ListChildComponentProps } from 'react-window';\n\nimport { GrafanaTheme2, formattedValueToString, getValueFormat, SelectableValue } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { ButtonSelect } from '../../Dropdown/ButtonSelect';\nimport { FilterInput } from '../../FilterInput/FilterInput';\nimport { Checkbox } from '../../Forms/Checkbox';\nimport { Label } from '../../Forms/Label';\nimport { Stack } from '../../Layout/Stack/Stack';\n\ninterface Props {\n values: SelectableValue[];\n options: SelectableValue[];\n onChange: (options: SelectableValue[]) => void;\n caseSensitive?: boolean;\n showOperators?: boolean;\n searchFilter: string;\n setSearchFilter: (value: string) => void;\n operator: SelectableValue<string>;\n setOperator: (item: SelectableValue<string>) => void;\n}\n\nconst ITEM_HEIGHT = 28;\nconst MIN_HEIGHT = ITEM_HEIGHT * 5;\n\nconst operatorSelectableValues: { [key: string]: SelectableValue<string> } = {\n Contains: { label: 'Contains', value: 'Contains', description: 'Contains' },\n '=': { label: '=', value: '=', description: 'Equals' },\n '!=': { label: '!=', value: '!=', description: 'Not equals' },\n '>': { label: '>', value: '>', description: 'Greater' },\n '>=': { label: '>=', value: '>=', description: 'Greater or Equal' },\n '<': { label: '<', value: '<', description: 'Less' },\n '<=': { label: '<=', value: '<=', description: 'Less or Equal' },\n Expression: {\n label: 'Expression',\n value: 'Expression',\n description: 'Bool Expression (Char $ represents the column value in the expression, e.g. \"$ >= 10 && $ <= 12\")',\n },\n};\nconst OPERATORS = Object.values(operatorSelectableValues);\nexport const REGEX_OPERATOR = operatorSelectableValues['Contains'];\nconst XPR_OPERATOR = operatorSelectableValues['Expression'];\n\nconst comparableValue = (value: string): string | number | Date | boolean => {\n value = value.trim().replace(/\\\\/g, '');\n\n // Does it look like a Date (Starting with pattern YYYY-MM-DD* or YYYY/MM/DD*)?\n if (/^(\\d{4}-\\d{2}-\\d{2}|\\d{4}\\/\\d{2}\\/\\d{2})/.test(value)) {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n const fmt = getValueFormat('dateTimeAsIso');\n return formattedValueToString(fmt(date.getTime()));\n }\n }\n // Does it look like a Number?\n const num = parseFloat(value);\n if (!isNaN(num)) {\n return num;\n }\n // Does it look like a Bool?\n const lvalue = value.toLowerCase();\n if (lvalue === 'true' || lvalue === 'false') {\n return lvalue === 'true';\n }\n // Anything else\n return value;\n};\n\nexport const FilterList = ({\n options,\n values,\n caseSensitive,\n showOperators,\n onChange,\n searchFilter,\n setSearchFilter,\n operator,\n setOperator,\n}: Props) => {\n const regex = useMemo(() => new RegExp(searchFilter, caseSensitive ? undefined : 'i'), [searchFilter, caseSensitive]);\n const items = useMemo(\n () =>\n options.filter((option) => {\n if (!showOperators || !searchFilter || operator.value === REGEX_OPERATOR.value) {\n if (option.label === undefined) {\n return false;\n }\n return regex.test(option.label);\n } else if (operator.value === XPR_OPERATOR.value) {\n if (option.value === undefined) {\n return false;\n }\n try {\n const xpr = searchFilter.replace(/\\\\/g, '');\n const fnc = new Function('$', `'use strict'; return ${xpr};`);\n const val = comparableValue(option.value);\n return fnc(val);\n } catch (_) {}\n return false;\n } else {\n if (option.value === undefined) {\n return false;\n }\n\n const value1 = comparableValue(option.value);\n const value2 = comparableValue(searchFilter);\n\n switch (operator.value) {\n case '=':\n return value1 === value2;\n case '!=':\n return value1 !== value2;\n case '>':\n return value1 > value2;\n case '>=':\n return value1 >= value2;\n case '<':\n return value1 < value2;\n case '<=':\n return value1 <= value2;\n }\n return false;\n }\n }),\n [options, regex, showOperators, operator, searchFilter]\n );\n const selectedItems = useMemo(() => items.filter((item) => values.includes(item)), [items, values]);\n\n const selectCheckValue = useMemo(() => items.length === selectedItems.length, [items, selectedItems]);\n const selectCheckIndeterminate = useMemo(\n () => selectedItems.length > 0 && items.length > selectedItems.length,\n [items, selectedItems]\n );\n const selectCheckLabel = useMemo(\n () => (selectedItems.length ? `${selectedItems.length} selected` : `Select all`),\n [selectedItems]\n );\n const selectCheckDescription = useMemo(\n () =>\n items.length !== selectedItems.length\n ? 'Add all displayed values to the filter'\n : 'Remove all displayed values from the filter',\n [items, selectedItems]\n );\n\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n const gutter = theme.spacing.gridSize;\n const height = useMemo(() => Math.min(items.length * ITEM_HEIGHT, MIN_HEIGHT) + gutter, [gutter, items.length]);\n\n const onCheckedChanged = useCallback(\n (option: SelectableValue) => (event: React.FormEvent<HTMLInputElement>) => {\n const newValues = event.currentTarget.checked\n ? values.concat(option)\n : values.filter((c) => c.value !== option.value);\n\n onChange(newValues);\n },\n [onChange, values]\n );\n\n const onSelectChanged = useCallback(() => {\n if (items.length === selectedItems.length) {\n const newValues = values.filter((item) => !items.includes(item));\n onChange(newValues);\n } else {\n const newValues = [...new Set([...values, ...items])];\n onChange(newValues);\n }\n }, [onChange, values, items, selectedItems]);\n\n return (\n <Stack direction=\"column\" gap={0.25}>\n {!showOperators && (\n <FilterInput\n placeholder={t('grafana-ui.table.filter-placeholder', 'Filter values')}\n onChange={setSearchFilter}\n value={searchFilter}\n />\n )}\n {showOperators && (\n <Stack direction=\"row\" gap={0}>\n <ButtonSelect\n variant=\"canvas\"\n options={OPERATORS}\n onChange={setOperator}\n value={operator}\n tooltip={operator.description}\n />\n <FilterInput\n placeholder={t('grafana-ui.table.filter-placeholder', 'Filter values')}\n onChange={setSearchFilter}\n value={searchFilter}\n />\n </Stack>\n )}\n {items.length > 0 ? (\n <>\n <List\n height={height}\n itemCount={items.length}\n itemSize={ITEM_HEIGHT}\n itemData={{ items, values: selectedItems, onCheckedChanged, className: styles.filterListRow }}\n width=\"100%\"\n className={styles.filterList}\n >\n {ItemRenderer}\n </List>\n <Stack direction=\"column\" gap={0.25}>\n <div className={cx(styles.selectDivider)} />\n <div className={cx(styles.filterListRow)}>\n <Checkbox\n value={selectCheckValue}\n indeterminate={selectCheckIndeterminate}\n label={selectCheckLabel}\n description={selectCheckDescription}\n onChange={onSelectChanged}\n />\n </div>\n </Stack>\n </>\n ) : (\n <Label className={styles.noValuesLabel}>\n <Trans i18nKey=\"grafana-ui.table.no-values-label\">No values</Trans>\n </Label>\n )}\n </Stack>\n );\n};\n\ninterface ItemRendererProps extends ListChildComponentProps {\n data: {\n onCheckedChanged: (option: SelectableValue) => (event: React.FormEvent<HTMLInputElement>) => void;\n items: SelectableValue[];\n values: SelectableValue[];\n className: string;\n };\n}\n\nfunction ItemRenderer({ index, style, data: { onCheckedChanged, items, values, className } }: ItemRendererProps) {\n const option = items[index];\n const { value, label } = option;\n const isChecked = values.find((s) => s.value === value) !== undefined;\n\n return (\n <div className={className} style={style} title={label}>\n <Checkbox value={isChecked} label={label} onChange={onCheckedChanged(option)} />\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n filterList: css({\n label: 'filterList',\n }),\n filterListRow: css({\n label: 'filterListRow',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n padding: theme.spacing(0.5),\n\n ':hover': {\n backgroundColor: theme.colors.action.hover,\n },\n }),\n selectDivider: css({\n label: 'selectDivider',\n width: '100%',\n borderTop: `1px solid ${theme.colors.border.medium}`,\n padding: theme.spacing(0.5, 2),\n }),\n noValuesLabel: css({\n paddingTop: theme.spacing(1),\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport { useCallback, useMemo, useState } from 'react';\nimport * as React from 'react';\n\nimport { Field, GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { Button } from '../../Button/Button';\nimport { ClickOutsideWrapper } from '../../ClickOutsideWrapper/ClickOutsideWrapper';\nimport { Label } from '../../Forms/Label';\nimport { IconButton } from '../../IconButton/IconButton';\nimport { Stack } from '../../Layout/Stack/Stack';\nimport { calculateUniqueFieldValues, getFilteredOptions, valuesToOptions } from '../utils';\n\nimport { FilterList } from './FilterList';\nimport { TableStyles } from './styles';\n\ninterface Props {\n column: any;\n tableStyles: TableStyles;\n onClose: () => void;\n field?: Field;\n searchFilter: string;\n setSearchFilter: (value: string) => void;\n operator: SelectableValue<string>;\n setOperator: (item: SelectableValue<string>) => void;\n}\n\nexport const FilterPopup = ({\n column: { preFilteredRows, filterValue, setFilter },\n onClose,\n field,\n searchFilter,\n setSearchFilter,\n operator,\n setOperator,\n}: Props) => {\n const theme = useTheme2();\n const uniqueValues = useMemo(() => calculateUniqueFieldValues(preFilteredRows, field), [preFilteredRows, field]);\n const options = useMemo(() => valuesToOptions(uniqueValues), [uniqueValues]);\n const filteredOptions = useMemo(() => getFilteredOptions(options, filterValue), [options, filterValue]);\n const [values, setValues] = useState<SelectableValue[]>(filteredOptions);\n const [matchCase, setMatchCase] = useState(false);\n\n const onCancel = useCallback((event?: React.MouseEvent) => onClose(), [onClose]);\n\n const onFilter = useCallback(\n (event: React.MouseEvent) => {\n const filtered = values.length ? values : undefined;\n\n setFilter(filtered);\n onClose();\n },\n [setFilter, values, onClose]\n );\n\n const onClearFilter = useCallback(\n (event: React.MouseEvent) => {\n setFilter(undefined);\n onClose();\n },\n [setFilter, onClose]\n );\n\n const clearFilterVisible = useMemo(() => filterValue !== undefined, [filterValue]);\n const styles = useStyles2(getStyles);\n\n return (\n <ClickOutsideWrapper onClick={onCancel} useCapture={true}>\n {/* This is just blocking click events from bubbeling and should not have a keyboard interaction. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n <div className={cx(styles.filterContainer)} onClick={stopPropagation}>\n <Stack direction=\"column\" gap={3}>\n <Stack direction=\"column\" gap={0.5}>\n <Stack justifyContent=\"space-between\" alignItems=\"center\">\n <Label className={styles.label}>\n <Trans i18nKey=\"grafana-ui.table.filter-popup-heading\">Filter by values:</Trans>\n </Label>\n <IconButton\n name=\"text-fields\"\n tooltip={t('grafana-ui.table.filter-popup-match-case', 'Match case')}\n style={{ color: matchCase ? theme.colors.text.link : theme.colors.text.disabled }}\n onClick={() => {\n setMatchCase((s) => !s);\n }}\n />\n </Stack>\n <div className={cx(styles.listDivider)} />\n <FilterList\n onChange={setValues}\n values={values}\n options={options}\n caseSensitive={matchCase}\n showOperators={true}\n searchFilter={searchFilter}\n setSearchFilter={setSearchFilter}\n operator={operator}\n setOperator={setOperator}\n />\n </Stack>\n <Stack gap={3}>\n <Stack>\n <Button size=\"sm\" onClick={onFilter}>\n <Trans i18nKey=\"grafana-ui.table.filter-popup-apply\">Ok</Trans>\n </Button>\n <Button size=\"sm\" variant=\"secondary\" onClick={onCancel}>\n <Trans i18nKey=\"grafana-ui.table.filter-popup-cancel\">Cancel</Trans>\n </Button>\n </Stack>\n {clearFilterVisible && (\n <Stack>\n <Button fill=\"text\" size=\"sm\" onClick={onClearFilter}>\n <Trans i18nKey=\"grafana-ui.table.filter-popup-clear\">Clear filter</Trans>\n </Button>\n </Stack>\n )}\n </Stack>\n </Stack>\n </div>\n </ClickOutsideWrapper>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n filterContainer: css({\n label: 'filterContainer',\n width: '100%',\n minWidth: '250px',\n height: '100%',\n maxHeight: '400px',\n backgroundColor: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(2),\n boxShadow: theme.shadows.z3,\n borderRadius: theme.shape.radius.default,\n }),\n listDivider: css({\n label: 'listDivider',\n width: '100%',\n borderTop: `1px solid ${theme.colors.border.medium}`,\n padding: theme.spacing(0.5, 2),\n }),\n label: css({\n marginBottom: 0,\n }),\n});\n\nconst stopPropagation = (event: React.MouseEvent) => {\n event.stopPropagation();\n};\n","import { css, cx } from '@emotion/css';\nimport { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Field, GrafanaTheme2, SelectableValue } from '@grafana/data';\n\nimport { Popover } from '../../../components/Tooltip/Popover';\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { Icon } from '../../Icon/Icon';\n\nimport { REGEX_OPERATOR } from './FilterList';\nimport { FilterPopup } from './FilterPopup';\nimport { TableStyles } from './styles';\n\ninterface Props {\n column: any;\n tableStyles: TableStyles;\n field?: Field;\n}\n\nexport const Filter = ({ column, field, tableStyles }: Props) => {\n const ref = useRef<HTMLButtonElement>(null);\n const [isPopoverVisible, setPopoverVisible] = useState<boolean>(false);\n const styles = useStyles2(getStyles);\n const filterEnabled = useMemo(() => Boolean(column.filterValue), [column.filterValue]);\n const onShowPopover = useCallback(() => setPopoverVisible(true), [setPopoverVisible]);\n const onClosePopover = useCallback(() => setPopoverVisible(false), [setPopoverVisible]);\n const [searchFilter, setSearchFilter] = useState('');\n const [operator, setOperator] = useState<SelectableValue<string>>(REGEX_OPERATOR);\n\n if (!field || !field.config.custom?.filterable) {\n return null;\n }\n return (\n <button\n className={cx(tableStyles.headerFilter, filterEnabled ? styles.filterIconEnabled : styles.filterIconDisabled)}\n ref={ref}\n type=\"button\"\n onClick={onShowPopover}\n >\n <Icon name=\"filter\" />\n {isPopoverVisible && ref.current && (\n <Popover\n content={\n <FilterPopup\n column={column}\n tableStyles={tableStyles}\n field={field}\n onClose={onClosePopover}\n searchFilter={searchFilter}\n setSearchFilter={setSearchFilter}\n operator={operator}\n setOperator={setOperator}\n />\n }\n placement=\"bottom-start\"\n referenceElement={ref.current}\n show\n />\n )}\n </button>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n filterIconEnabled: css({\n label: 'filterIconEnabled',\n color: theme.colors.primary.text,\n }),\n filterIconDisabled: css({\n label: 'filterIconDisabled',\n color: theme.colors.text.disabled,\n }),\n});\n","import { HeaderGroup, Column } from 'react-table';\n\nimport { Field } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { getFieldTypeIcon } from '../../../types/icon';\nimport { Icon } from '../../Icon/Icon';\nimport { TableFieldOptions } from '../types';\n\nimport { Filter } from './Filter';\nimport { TableStyles } from './styles';\n\nexport interface HeaderRowProps {\n headerGroups: HeaderGroup[];\n showTypeIcons?: boolean;\n tableStyles: TableStyles;\n}\n\nexport const HeaderRow = (props: HeaderRowProps) => {\n const { headerGroups, showTypeIcons, tableStyles } = props;\n const e2eSelectorsTable = selectors.components.Panels.Visualization.Table;\n\n return (\n <div role=\"rowgroup\" className={tableStyles.headerRow}>\n {headerGroups.map((headerGroup: HeaderGroup) => {\n const { key, ...headerGroupProps } = headerGroup.getHeaderGroupProps();\n return (\n <div\n className={tableStyles.thead}\n {...headerGroupProps}\n key={key}\n aria-label={e2eSelectorsTable.header}\n role=\"row\"\n >\n {headerGroup.headers.map((column: Column, index: number) =>\n renderHeaderCell(column, tableStyles, showTypeIcons)\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nfunction renderHeaderCell(column: any, tableStyles: TableStyles, showTypeIcons?: boolean) {\n const { key, ...headerProps } = column.getHeaderProps();\n const field: Field = column.field ?? null;\n const tableFieldOptions: TableFieldOptions | undefined = field?.config.custom;\n\n if (column.canResize) {\n headerProps.style.userSelect = column.isResizing ? 'none' : 'auto'; // disables selecting text while resizing\n }\n\n headerProps.style.position = 'absolute';\n headerProps.style.justifyContent = column.justifyContent;\n headerProps.style.left = column.totalLeft;\n\n let headerContent = column.render('Header');\n\n let sortHeaderContent = column.canSort && (\n <>\n <button {...column.getSortByToggleProps()} className={tableStyles.headerCellLabel}>\n {showTypeIcons && (\n <Icon name={getFieldTypeIcon(field)} title={field?.type} size=\"sm\" className={tableStyles.typeIcon} />\n )}\n <div>{headerContent}</div>\n {column.isSorted &&\n (column.isSortedDesc ? (\n <Icon size=\"lg\" name=\"arrow-down\" className={tableStyles.sortIcon} />\n ) : (\n <Icon name=\"arrow-up\" size=\"lg\" className={tableStyles.sortIcon} />\n ))}\n </button>\n {column.canFilter && <Filter column={column} tableStyles={tableStyles} field={field} />}\n </>\n );\n if (sortHeaderContent && tableFieldOptions?.headerComponent) {\n sortHeaderContent = <tableFieldOptions.headerComponent field={field} defaultContent={sortHeaderContent} />;\n } else if (tableFieldOptions?.headerComponent) {\n headerContent = <tableFieldOptions.headerComponent field={field} defaultContent={headerContent} />;\n }\n\n return (\n <div className={tableStyles.headerCell} key={key} {...headerProps} role=\"columnheader\">\n {column.canSort && sortHeaderContent}\n {!column.canSort && headerContent}\n {!column.canSort && column.canFilter && <Filter column={column} tableStyles={tableStyles} field={field} />}\n {column.canResize && <div {...column.getResizerProps()} className={tableStyles.resizeHandle} />}\n </div>\n );\n}\n","import { css } from '@emotion/css';\nimport { CSSProperties } from 'react';\nimport * as React from 'react';\n\nimport { DataFrame, Field, GrafanaTheme2 } from '@grafana/data';\nimport { TableCellHeight } from '@grafana/schema';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { EXPANDER_WIDTH } from '../utils';\n\nimport { Table } from './Table';\nimport { TableStyles } from './styles';\n\nexport interface Props {\n nestedData: Field;\n tableStyles: TableStyles;\n rowIndex: number;\n width: number;\n cellHeight: TableCellHeight;\n}\n\nexport function ExpandedRow({ tableStyles, nestedData, rowIndex, width, cellHeight }: Props) {\n const frames: DataFrame[][] = nestedData.values;\n const subTables: React.ReactNode[] = [];\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n let top = tableStyles.rowHeight + theme.spacing.gridSize; // initial height for row that expands above sub tables + 1 grid unit spacing\n\n frames[rowIndex].forEach((nf: DataFrame, nfIndex: number) => {\n const noHeader = !!nf.meta?.custom?.noHeader;\n const height = tableStyles.rowHeight * (nf.length + (noHeader ? 0 : 1)); // account for the header with + 1\n\n const subTable: CSSProperties = {\n height: height,\n paddingLeft: EXPANDER_WIDTH,\n position: 'absolute',\n top,\n backgroundColor: theme.colors.background.primary,\n color: theme.colors.text.primary,\n };\n\n top += height + theme.spacing.gridSize;\n\n subTables.push(\n <div style={subTable} key={`subTable_${rowIndex}_${nfIndex}`}>\n <Table\n data={nf}\n width={width - EXPANDER_WIDTH}\n height={tableStyles.rowHeight * (nf.length + 1)}\n noHeader={noHeader}\n cellHeight={cellHeight}\n />\n </div>\n );\n });\n\n return <div className={styles.subTables}>{subTables}</div>;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n subTables: css({\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n width: '1px',\n top: theme.spacing(5),\n left: theme.spacing(1),\n bottom: theme.spacing(2),\n background: theme.colors.border.medium,\n },\n }),\n };\n};\n\nexport function getExpandedRowHeight(nestedData: Field, rowIndex: number, tableStyles: TableStyles) {\n const frames: DataFrame[][] = nestedData.values;\n\n const height = frames[rowIndex].reduce((acc: number, frame: DataFrame) => {\n if (frame.length) {\n const noHeader = !!frame.meta?.custom?.noHeader;\n return acc + tableStyles.rowHeight * (frame.length + (noHeader ? 0 : 1)) + 8; // account for the header with + 1\n }\n return acc;\n }, tableStyles.rowHeight); // initial height for row that expands above sub tables\n\n return height ?? tableStyles.rowHeight;\n}\n","import { css, cx } from '@emotion/css';\nimport { CSSProperties, UIEventHandler, useCallback, useEffect, useMemo, useState } from 'react';\nimport * as React from 'react';\nimport { Cell, Row, TableState, HeaderGroup } from 'react-table';\nimport { VariableSizeList } from 'react-window';\nimport { Subscription, debounceTime } from 'rxjs';\n\nimport {\n DataFrame,\n DataHoverClearEvent,\n DataHoverEvent,\n Field,\n FieldType,\n TimeRange,\n hasTimeField,\n InterpolateFunction,\n} from '@grafana/data';\nimport { TableCellDisplayMode, TableCellHeight } from '@grafana/schema';\n\nimport { useTheme2 } from '../../../themes/ThemeContext';\nimport CustomScrollbar from '../../CustomScrollbar/CustomScrollbar';\nimport { usePanelContext } from '../../PanelChrome';\nimport { TableCell } from '../Cells/TableCell';\nimport {\n CellColors,\n GetActionsFunction,\n TableFieldOptions,\n TableFilterActionCallback,\n TableInspectCellCallback,\n} from '../types';\nimport {\n calculateAroundPointThreshold,\n getCellColors,\n isPointTimeValAroundTableTimeVal,\n guessTextBoundingBox,\n} from '../utils';\n\nimport { ExpandedRow, getExpandedRowHeight } from './ExpandedRow';\nimport { TableStyles } from './styles';\n\ninterface RowsListProps {\n data: DataFrame;\n rows: Row[];\n enableSharedCrosshair: boolean;\n headerHeight: number;\n rowHeight: number;\n itemCount: number;\n pageIndex: number;\n listHeight: number;\n width: number;\n cellHeight?: TableCellHeight;\n listRef: React.RefObject<VariableSizeList>;\n tableState: TableState;\n tableStyles: TableStyles;\n nestedDataField?: Field;\n prepareRow: (row: Row) => void;\n onCellFilterAdded?: TableFilterActionCallback;\n timeRange?: TimeRange;\n footerPaginationEnabled: boolean;\n initialRowIndex?: number;\n headerGroups: HeaderGroup[];\n longestField?: Field;\n textWrapField?: Field;\n getActions?: GetActionsFunction;\n replaceVariables?: InterpolateFunction;\n setInspectCell?: TableInspectCellCallback;\n}\n\nexport const RowsList = (props: RowsListProps) => {\n const {\n data,\n rows,\n headerHeight,\n footerPaginationEnabled,\n rowHeight,\n itemCount,\n pageIndex,\n tableState,\n prepareRow,\n onCellFilterAdded,\n width,\n cellHeight = TableCellHeight.Sm,\n timeRange,\n tableStyles,\n nestedDataField,\n listHeight,\n listRef,\n enableSharedCrosshair = false,\n initialRowIndex = undefined,\n headerGroups,\n longestField,\n textWrapField,\n getActions,\n replaceVariables,\n setInspectCell,\n } = props;\n\n const [rowHighlightIndex, setRowHighlightIndex] = useState<number | undefined>(initialRowIndex);\n if (initialRowIndex === undefined && rowHighlightIndex !== undefined) {\n setRowHighlightIndex(undefined);\n }\n\n const theme = useTheme2();\n const panelContext = usePanelContext();\n\n // Create off-screen canvas for measuring rows for virtualized rendering\n // This line is like this because Jest doesn't have OffscreenCanvas mocked\n // nor is it a part of the jest-canvas-mock package\n let osContext = null;\n if (window.OffscreenCanvas !== undefined) {\n // The canvas size is defined arbitrarily\n // As we never actually visualize rendered content\n // from the offscreen canvas, only perform text measurements\n osContext = new OffscreenCanvas(256, 1024).getContext('2d');\n }\n\n // Set font property using theme info\n // This will make text measurement accurate\n if (osContext !== undefined && osContext !== null) {\n osContext.font = `${theme.typography.fontSize}px ${theme.typography.body.fontFamily}`;\n }\n\n const threshold = useMemo(() => {\n const timeField = data.fields.find((f) => f.type === FieldType.time);\n\n if (!timeField) {\n return 0;\n }\n\n return calculateAroundPointThreshold(timeField);\n }, [data]);\n\n const onRowHover = useCallback(\n (idx: number, frame: DataFrame) => {\n if (!panelContext || !enableSharedCrosshair) {\n return;\n }\n\n const timeField: Field = frame!.fields.find((f) => f.type === FieldType.time)!;\n\n if (!timeField) {\n return;\n }\n\n panelContext.eventBus.publish(\n new DataHoverEvent({\n point: {\n time: timeField.values[idx],\n },\n })\n );\n },\n [enableSharedCrosshair, panelContext]\n );\n\n const onRowLeave = useCallback(() => {\n if (!panelContext || !enableSharedCrosshair) {\n return;\n }\n\n panelContext.eventBus.publish(new DataHoverClearEvent());\n }, [enableSharedCrosshair, panelContext]);\n\n const onDataHoverEvent = useCallback(\n (evt: DataHoverEvent) => {\n if (evt.payload.point?.time && evt.payload.rowIndex !== undefined) {\n const timeField = data.fields.find((f) => f.type === FieldType.time);\n const time = timeField!.values[evt.payload.rowIndex];\n const pointTime = evt.payload.point.time;\n\n // If the time value of the hovered point is around the time value of the\n // row with same index, highlight the row\n if (isPointTimeValAroundTableTimeVal(pointTime, time, threshold)) {\n setRowHighlightIndex(evt.payload.rowIndex);\n return;\n }\n\n // If the time value of the hovered point is not around the time value of the\n // row with same index, try to find a row with same time value\n const matchedRowIndex = timeField!.values.findIndex((t) =>\n isPointTimeValAroundTableTimeVal(pointTime, t, threshold)\n );\n\n if (matchedRowIndex !== -1) {\n setRowHighlightIndex(matchedRowIndex);\n return;\n }\n\n setRowHighlightIndex(undefined);\n }\n },\n [data.fields, threshold]\n );\n\n useEffect(() => {\n if (!panelContext || !enableSharedCrosshair || !hasTimeField(data) || footerPaginationEnabled) {\n return;\n }\n\n const subs = new Subscription();\n\n subs.add(\n panelContext.eventBus\n .getStream(DataHoverEvent)\n .pipe(debounceTime(250))\n .subscribe({\n next: (evt) => {\n if (panelContext.eventBus === evt.origin) {\n return;\n }\n\n onDataHoverEvent(evt);\n },\n })\n );\n\n subs.add(\n panelContext.eventBus\n .getStream(DataHoverClearEvent)\n .pipe(debounceTime(250))\n .subscribe({\n next: (evt) => {\n if (panelContext.eventBus === evt.origin) {\n return;\n }\n\n setRowHighlightIndex(undefined);\n },\n })\n );\n\n return () => {\n subs.unsubscribe();\n };\n }, [data, enableSharedCrosshair, footerPaginationEnabled, onDataHoverEvent, panelContext]);\n\n let scrollTop: number | undefined = undefined;\n if (rowHighlightIndex !== undefined) {\n const firstMatchedRowIndex = rows.findIndex((row) => row.index === rowHighlightIndex);\n\n if (firstMatchedRowIndex !== -1) {\n scrollTop = headerHeight + (firstMatchedRowIndex - 1) * rowHeight;\n }\n }\n\n const rowIndexForPagination = useCallback(\n (index: number) => {\n return tableState.pageIndex * tableState.pageSize + index;\n },\n [tableState.pageIndex, tableState.pageSize]\n );\n\n let rowBg: Function | undefined = undefined;\n let textWrapFinal: Field | undefined;\n for (const field of data.fields) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const fieldOptions = field.config.custom as TableFieldOptions;\n const cellOptionsExist = fieldOptions !== undefined && fieldOptions.cellOptions !== undefined;\n\n if (\n cellOptionsExist &&\n fieldOptions.cellOptions.type === TableCellDisplayMode.ColorBackground &&\n fieldOptions.cellOptions.applyToRow\n ) {\n rowBg = (rowIndex: number): CellColors => {\n const display = field.display!(field.values.get(rowIndex));\n const colors = getCellColors(tableStyles.theme, fieldOptions.cellOptions, display);\n return colors;\n };\n }\n\n if (textWrapField !== undefined) {\n textWrapFinal = textWrapField;\n } else if (longestField !== undefined) {\n textWrapFinal = longestField;\n }\n }\n\n const RenderRow = useCallback(\n ({ index, style, rowHighlightIndex }: { index: number; style: CSSProperties; rowHighlightIndex?: number }) => {\n const indexForPagination = rowIndexForPagination(index);\n const row = rows[indexForPagination];\n let additionalProps: React.HTMLAttributes<HTMLDivElement> = {};\n prepareRow(row);\n\n const expandedRowStyle = tableState.expanded[row.id] ? css({ '&:hover': { background: 'inherit' } }) : {};\n const rowExpanded = nestedDataField && tableState.expanded[row.id];\n\n if (rowHighlightIndex !== undefined && row.index === rowHighlightIndex) {\n style = { ...style, backgroundColor: theme.components.table.rowSelected };\n additionalProps = {\n 'aria-selected': 'true',\n };\n }\n\n // Color rows if enabled\n if (rowBg) {\n const { bgColor, textColor } = rowBg(row.index);\n style.background = bgColor;\n style.color = textColor;\n style.borderLeft = `2px solid ${bgColor}`;\n }\n\n // If there's a text wrapping field we set the height of it here\n if (textWrapFinal) {\n const visibleFields = data.fields.filter((field) => !Boolean(field.config.custom?.hidden));\n const seriesIndex = visibleFields.findIndex((field) => field.name === textWrapFinal.name);\n const pxLineHeight = theme.typography.body.lineHeight * theme.typography.fontSize;\n const bbox = guessTextBoundingBox(\n textWrapFinal.values[row.index],\n headerGroups[0].headers[seriesIndex],\n osContext,\n pxLineHeight,\n tableStyles.rowHeight,\n tableStyles.cellPadding\n );\n style.height = bbox.height;\n }\n const { key, ...rowProps } = row.getRowProps({ style, ...additionalProps });\n\n return (\n <div\n key={key}\n {...rowProps}\n className={cx(tableStyles.row, expandedRowStyle)}\n onMouseEnter={() => onRowHover(row.index, data)}\n onMouseLeave={onRowLeave}\n >\n {/*add the nested data to the DOM first to prevent a 1px border CSS issue on the last cell of the row*/}\n {rowExpanded && (\n <ExpandedRow\n nestedData={nestedDataField}\n tableStyles={tableStyles}\n // Using `row.index` ensures that we pick the correct row from the original data frame even when rows in\n // the table are sorted, since `row.index` does not change when sorting.\n rowIndex={row.index}\n width={width}\n cellHeight={cellHeight}\n />\n )}\n {row.cells.map((cell: Cell, index: number) => (\n <TableCell\n key={index}\n tableStyles={tableStyles}\n cell={cell}\n onCellFilterAdded={onCellFilterAdded}\n columnIndex={index}\n columnCount={row.cells.length}\n timeRange={timeRange}\n frame={data}\n rowStyled={rowBg !== undefined}\n rowExpanded={rowExpanded}\n textWrapped={textWrapFinal !== undefined}\n // VariableSizeList overrides calculated in buildCellContainerStyle height of the cell,\n // so we need to subtract 1 to respect the row border\n height={Number(style.height) - 1}\n getActions={getActions}\n replaceVariables={replaceVariables}\n setInspectCell={setInspectCell}\n />\n ))}\n </div>\n );\n },\n [\n rowIndexForPagination,\n rows,\n prepareRow,\n tableState.expanded,\n nestedDataField,\n rowBg,\n textWrapFinal,\n tableStyles,\n onRowLeave,\n width,\n cellHeight,\n theme.components.table.rowSelected,\n theme.typography.body.lineHeight,\n theme.typography.fontSize,\n data,\n headerGroups,\n osContext,\n onRowHover,\n onCellFilterAdded,\n timeRange,\n getActions,\n replaceVariables,\n setInspectCell,\n ]\n );\n\n const getItemSize = (index: number): number => {\n const indexForPagination = rowIndexForPagination(index);\n const row = rows[indexForPagination];\n\n if (tableState.expanded[row.id] && nestedDataField) {\n return getExpandedRowHeight(nestedDataField, row.index, tableStyles);\n }\n\n if (textWrapFinal) {\n const visibleFields = data.fields.filter((field) => !Boolean(field.config.custom?.hidden));\n const seriesIndex = visibleFields.findIndex((field) => field.name === textWrapFinal.name);\n const pxLineHeight = theme.typography.fontSize * theme.typography.body.lineHeight;\n return guessTextBoundingBox(\n textWrapFinal.values[row.index],\n headerGroups[0].headers[seriesIndex],\n osContext,\n pxLineHeight,\n tableStyles.rowHeight,\n tableStyles.cellPadding\n ).height;\n }\n\n return tableStyles.rowHeight;\n };\n\n const handleScroll: UIEventHandler = (event) => {\n const { scrollTop } = event.currentTarget;\n\n if (listRef.current !== null) {\n listRef.current.scrollTo(scrollTop);\n }\n };\n\n // It's a hack for text wrapping.\n // VariableSizeList component didn't know that we manually set row height.\n // So we need to reset the list when the rows high changes.\n useEffect(() => {\n if (listRef.current) {\n listRef.current.resetAfterIndex(0);\n }\n }, [rows, listRef]);\n\n return (\n <CustomScrollbar onScroll={handleScroll} hideHorizontalTrack={true} scrollTop={scrollTop}>\n <VariableSizeList\n key={`${rowHeight}${pageIndex}`}\n height={listHeight}\n itemCount={itemCount}\n itemSize={getItemSize}\n width={'100%'}\n ref={listRef}\n style={{ overflow: undefined }}\n >\n {({ index, style }) => RenderRow({ index, style, rowHighlightIndex })}\n </VariableSizeList>\n </CustomScrollbar>\n );\n};\n","import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n useAbsoluteLayout,\n useExpanded,\n useFilters,\n usePagination,\n useResizeColumns,\n useSortBy,\n useTable,\n} from 'react-table';\nimport { VariableSizeList } from 'react-window';\n\nimport { FieldType, ReducerID, getRowUniqueId, getFieldMatcher } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { TableCellHeight } from '@grafana/schema';\n\nimport { useTheme2 } from '../../../themes/ThemeContext';\nimport { CustomScrollbar } from '../../CustomScrollbar/CustomScrollbar';\nimport { Pagination } from '../../Pagination/Pagination';\nimport { TableCellInspector } from '../TableCellInspector';\nimport { useFixScrollbarContainer, useResetVariableListSizeCache } from '../hooks';\nimport { getInitialState, useTableStateReducer } from '../reducer';\nimport { FooterItem, GrafanaTableState, InspectCell, TableRTProps as Props } from '../types';\nimport {\n getColumns,\n sortCaseInsensitive,\n sortNumber,\n getFooterItems,\n createFooterCalculationValues,\n guessLongestField,\n} from '../utils';\n\nimport { FooterRow } from './FooterRow';\nimport { HeaderRow } from './HeaderRow';\nimport { RowsList } from './RowsList';\nimport { useTableStyles } from './styles';\n\nconst COLUMN_MIN_WIDTH = 150;\nconst FOOTER_ROW_HEIGHT = 36;\nconst NO_DATA_TEXT = 'No data';\n\n/**\n * Used for displaying tabular data\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/plugins-table--docs\n */\nexport const Table = memo((props: Props) => {\n const {\n ariaLabel,\n data,\n height,\n onCellFilterAdded,\n onColumnResize,\n width,\n columnMinWidth = COLUMN_MIN_WIDTH,\n noHeader,\n resizable = true,\n initialSortBy,\n footerOptions,\n showTypeIcons,\n footerValues,\n enablePagination,\n cellHeight = TableCellHeight.Sm,\n timeRange,\n enableSharedCrosshair = false,\n initialRowIndex = undefined,\n fieldConfig,\n getActions,\n replaceVariables,\n } = props;\n\n const listRef = useRef<VariableSizeList>(null);\n const tableDivRef = useRef<HTMLDivElement>(null);\n const variableSizeListScrollbarRef = useRef<HTMLDivElement>(null);\n const theme = useTheme2();\n const tableStyles = useTableStyles(theme, cellHeight);\n const headerHeight = noHeader ? 0 : tableStyles.rowHeight;\n const [footerItems, setFooterItems] = useState<FooterItem[] | undefined>(footerValues);\n const noValuesDisplayText = fieldConfig?.defaults?.noValue ?? NO_DATA_TEXT;\n const [inspectCell, setInspectCell] = useState<InspectCell | null>(null);\n\n const footerHeight = useMemo(() => {\n const EXTENDED_ROW_HEIGHT = FOOTER_ROW_HEIGHT;\n let length = 0;\n\n if (!footerItems) {\n return 0;\n }\n\n for (const fv of footerItems) {\n if (Array.isArray(fv) && fv.length > length) {\n length = fv.length;\n }\n }\n\n if (length > 1) {\n return EXTENDED_ROW_HEIGHT * length;\n }\n\n return EXTENDED_ROW_HEIGHT;\n }, [footerItems]);\n\n // React table data array. This data acts just like a dummy array to let react-table know how many rows exist.\n // The cells use the field to look up values, therefore this is simply a length/size placeholder.\n const memoizedData = useMemo(() => {\n if (!data.fields.length) {\n return [];\n }\n // As we only use this to fake the length of our data set for react-table we need to make sure we always return an array\n // filled with values at each index otherwise we'll end up trying to call accessRow for null|undefined value in\n // https://github.com/tannerlinsley/react-table/blob/7be2fc9d8b5e223fc998af88865ae86a88792fdb/src/hooks/useTable.js#L585\n return Array(data.length).fill(0);\n }, [data]);\n\n // This checks whether `Show table footer` is toggled on, the `Calculation` is set to `Count`, and finally, whether `Count rows` is toggled on.\n const isCountRowsSet = Boolean(\n footerOptions?.countRows &&\n footerOptions.reducer &&\n footerOptions.reducer.length &&\n footerOptions.reducer[0] === ReducerID.count\n );\n\n const nestedDataField = data.fields.find((f) => f.type === FieldType.nestedFrames);\n const hasNestedData = nestedDataField !== undefined;\n\n // React-table column definitions\n const memoizedColumns = useMemo(\n () => getColumns(data, width, columnMinWidth, hasNestedData, footerItems, isCountRowsSet),\n [data, width, columnMinWidth, hasNestedData, footerItems, isCountRowsSet]\n );\n\n // we need a ref to later store the `toggleAllRowsExpanded` function, returned by `useTable`.\n // We cannot simply use a variable because we need to use such function in the initialization of\n // `useTableStateReducer`, which is needed to construct options for `useTable` (the hook that returns\n // `toggleAllRowsExpanded`), and if we used a variable, that variable would be undefined at the time\n // we initialize `useTableStateReducer`.\n const toggleAllRowsExpandedRef = useRef<(value?: boolean) => void>();\n\n // Internal react table state reducer\n const stateReducer = useTableStateReducer({\n onColumnResize,\n onSortByChange: (state) => {\n // Collapse all rows. This prevents a known bug that causes the size of the rows to be incorrect due to\n // using `VariableSizeList` and `useExpanded` together.\n toggleAllRowsExpandedRef.current!(false);\n\n if (props.onSortByChange) {\n props.onSortByChange(state);\n }\n },\n data,\n });\n\n const hasUniqueId = !!data.meta?.uniqueRowIdFields?.length;\n\n const options: any = useMemo(() => {\n // This is a bit hard to type with the react-table types here, the reducer does not actually match with the\n // TableOptions.\n const options: any = {\n columns: memoizedColumns,\n data: memoizedData,\n disableResizing: !resizable,\n stateReducer: stateReducer,\n autoResetPage: false,\n initialState: getInitialState(initialSortBy, memoizedColumns),\n autoResetFilters: false,\n sortTypes: {\n // the builtin number type on react-table does not handle NaN values\n number: sortNumber,\n // should be replaced with the builtin string when react-table is upgraded,\n // see https://github.com/tannerlinsley/react-table/pull/3235\n 'alphanumeric-insensitive': sortCaseInsensitive,\n },\n };\n if (hasUniqueId) {\n // row here is just always 0 because here we don't use real data but just a dummy array filled with 0.\n // See memoizedData variable above.\n options.getRowId = (row: Record<string, unknown>, relativeIndex: number) => getRowUniqueId(data, relativeIndex);\n\n // If we have unique field we assume we can count on it as being globally unique, and we don't need to reset when\n // data changes.\n options.autoResetExpanded = false;\n }\n return options;\n }, [initialSortBy, memoizedColumns, memoizedData, resizable, stateReducer, hasUniqueId, data]);\n\n const {\n getTableProps,\n headerGroups,\n footerGroups,\n rows,\n prepareRow,\n totalColumnsWidth,\n page,\n state,\n gotoPage,\n setPageSize,\n pageOptions,\n toggleAllRowsExpanded,\n } = useTable(options, useFilters, useSortBy, useAbsoluteLayout, useResizeColumns, useExpanded, usePagination);\n\n const extendedState = state as GrafanaTableState;\n toggleAllRowsExpandedRef.current = toggleAllRowsExpanded;\n\n /*\n Footer value calculation is being moved in the Table component and the footerValues prop will be deprecated.\n The footerValues prop is still used in the Table component for backwards compatibility. Adding the\n footerOptions prop will switch the Table component to use the new footer calculation. Using both props will\n result in the footerValues prop being ignored.\n */\n useEffect(() => {\n if (!footerOptions) {\n setFooterItems(footerValues);\n }\n }, [footerValues, footerOptions]);\n\n useEffect(() => {\n if (!footerOptions) {\n return;\n }\n\n if (!footerOptions.show) {\n setFooterItems(undefined);\n return;\n }\n\n if (isCountRowsSet) {\n const footerItemsCountRows: FooterItem[] = [];\n footerItemsCountRows[0] = rows.length.toString() ?? data.length.toString();\n setFooterItems(footerItemsCountRows);\n return;\n }\n\n const footerItems = getFooterItems(\n headerGroups[0].headers,\n createFooterCalculationValues(rows),\n footerOptions,\n theme\n );\n\n setFooterItems(footerItems);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [footerOptions, theme, state.filters, data]);\n\n let listHeight = height - (headerHeight + footerHeight);\n\n if (enablePagination) {\n listHeight -= tableStyles.cellHeight;\n }\n\n const pageSize = Math.round(listHeight / tableStyles.rowHeight) - 1;\n\n useEffect(() => {\n // Don't update the page size if it is less than 1\n if (pageSize <= 0) {\n return;\n }\n setPageSize(pageSize);\n }, [pageSize, setPageSize]);\n\n useEffect(() => {\n // Reset page index when data changes\n // This is needed because react-table does not do this automatically\n // autoResetPage is set to false because setting it to true causes the issue described in\n // https://github.com/grafana/grafana/pull/67477\n if (data.length / pageSize < state.pageIndex) {\n gotoPage(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n useResetVariableListSizeCache(extendedState, listRef, data, hasUniqueId);\n useFixScrollbarContainer(variableSizeListScrollbarRef, tableDivRef);\n\n const onNavigate = useCallback(\n (toPage: number) => {\n gotoPage(toPage - 1);\n },\n [gotoPage]\n );\n\n const itemCount = enablePagination ? page.length : rows.length;\n let paginationEl = null;\n if (enablePagination) {\n const itemsRangeStart = state.pageIndex * state.pageSize + 1;\n let itemsRangeEnd = itemsRangeStart + state.pageSize - 1;\n const isSmall = width < 550;\n if (itemsRangeEnd > data.length) {\n itemsRangeEnd = data.length;\n }\n const numRows = rows.length;\n const displayedEnd = itemsRangeEnd < rows.length ? itemsRangeEnd : rows.length;\n paginationEl = (\n <div className={tableStyles.paginationWrapper}>\n <Pagination\n currentPage={state.pageIndex + 1}\n numberOfPages={pageOptions.length}\n showSmallVersion={isSmall}\n onNavigate={onNavigate}\n />\n {isSmall ? null : (\n <div className={tableStyles.paginationSummary}>\n <Trans i18nKey=\"grafana-ui.table.pagination-summary\">\n {{ itemsRangeStart }} - {{ displayedEnd }} of {{ numRows }} rows\n </Trans>\n </div>\n )}\n </div>\n );\n }\n\n // Try to determine the longest field\n // TODO: do we wrap only one field?\n // What if there are multiple fields with long text?\n const longestField = fieldConfig ? guessLongestField(fieldConfig, data) : undefined;\n let textWrapField = undefined;\n if (fieldConfig !== undefined) {\n data.fields.forEach((field) => {\n fieldConfig.overrides.forEach((override) => {\n const matcher = getFieldMatcher(override.matcher);\n if (matcher(field, data, [data])) {\n for (const property of override.properties) {\n if (property.id === 'custom.cellOptions' && property.value.wrapText) {\n textWrapField = field;\n }\n }\n }\n });\n });\n }\n\n return (\n <>\n <div\n {...getTableProps()}\n className={tableStyles.table}\n aria-label={ariaLabel}\n role=\"table\"\n ref={tableDivRef}\n style={{ width, height }}\n >\n <CustomScrollbar hideVerticalTrack={true}>\n <div className={tableStyles.tableContentWrapper(totalColumnsWidth)}>\n {!noHeader && (\n <HeaderRow headerGroups={headerGroups} showTypeIcons={showTypeIcons} tableStyles={tableStyles} />\n )}\n {itemCount > 0 ? (\n <div\n data-testid={selectors.components.Panels.Visualization.Table.body}\n ref={variableSizeListScrollbarRef}\n >\n <RowsList\n headerGroups={headerGroups}\n data={data}\n rows={rows}\n width={width}\n cellHeight={cellHeight}\n headerHeight={headerHeight}\n rowHeight={tableStyles.rowHeight}\n itemCount={itemCount}\n pageIndex={state.pageIndex}\n listHeight={listHeight}\n listRef={listRef}\n tableState={state}\n prepareRow={prepareRow}\n timeRange={timeRange}\n onCellFilterAdded={onCellFilterAdded}\n nestedDataField={nestedDataField}\n tableStyles={tableStyles}\n footerPaginationEnabled={Boolean(enablePagination)}\n enableSharedCrosshair={enableSharedCrosshair}\n initialRowIndex={initialRowIndex}\n longestField={longestField}\n textWrapField={textWrapField}\n getActions={getActions}\n replaceVariables={replaceVariables}\n setInspectCell={setInspectCell}\n />\n </div>\n ) : (\n <div style={{ height: height - headerHeight, width }} className={tableStyles.noData}>\n {noValuesDisplayText}\n </div>\n )}\n {footerItems && (\n <FooterRow\n isPaginationVisible={Boolean(enablePagination)}\n footerValues={footerItems}\n footerGroups={footerGroups}\n totalColumnsWidth={totalColumnsWidth}\n tableStyles={tableStyles}\n />\n )}\n </div>\n </CustomScrollbar>\n {paginationEl}\n </div>\n\n {inspectCell !== null && (\n <TableCellInspector\n mode={inspectCell.mode}\n value={inspectCell.value}\n onDismiss={() => {\n setInspectCell(null);\n }}\n />\n )}\n </>\n );\n});\n\nTable.displayName = 'Table';\n","import { createAction } from '@reduxjs/toolkit';\nimport { AnyAction } from 'redux';\n\nimport { LoadingState } from '@grafana/data';\n\nimport { LibraryElementDTO } from '../../types';\n\nexport interface LibraryPanelsViewState {\n loadingState: LoadingState;\n libraryPanels: LibraryElementDTO[];\n totalCount: number;\n perPage: number;\n page: number;\n numberOfPages: number;\n currentPanelId?: string;\n}\n\nexport const initialLibraryPanelsViewState: LibraryPanelsViewState = {\n loadingState: LoadingState.Loading,\n libraryPanels: [],\n totalCount: 0,\n perPage: 40,\n page: 1,\n numberOfPages: 0,\n currentPanelId: undefined,\n};\n\nexport const initSearch = createAction('libraryPanels/view/initSearch');\nexport const searchCompleted = createAction<\n Omit<LibraryPanelsViewState, 'currentPanelId' | 'searchString' | 'loadingState' | 'numberOfPages'>\n>('libraryPanels/view/searchCompleted');\n\nexport const changePage = createAction<Pick<LibraryPanelsViewState, 'page'>>('libraryPanels/view/changePage');\n\nexport const libraryPanelsViewReducer = (state: LibraryPanelsViewState, action: AnyAction) => {\n if (initSearch.match(action)) {\n return { ...state, loadingState: LoadingState.Loading };\n }\n\n if (searchCompleted.match(action)) {\n const { libraryPanels, page, perPage, totalCount } = action.payload;\n const numberOfPages = Math.ceil(totalCount / perPage);\n return {\n ...state,\n libraryPanels,\n perPage,\n totalCount,\n loadingState: LoadingState.Done,\n numberOfPages,\n page: page > numberOfPages ? page - 1 : page,\n };\n }\n\n if (changePage.match(action)) {\n return { ...state, page: action.payload.page };\n }\n\n return state;\n};\n","import { useCallback, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { ComboboxOption, MultiCombobox } from '@grafana/ui';\nimport { getGrafanaSearcher } from 'app/features/search/service/searcher';\n\nexport interface FolderFilterProps {\n onChange: (folder: string[]) => void;\n}\n\nexport function FolderFilter({ onChange }: FolderFilterProps): JSX.Element {\n const [value, setValue] = useState<ComboboxOption[]>([]);\n const onSelectOptionChange = useCallback(\n (folders: ComboboxOption[]) => {\n const changedFolderIds = folders.filter((f) => Boolean(f.value)).map((f) => f.value!);\n onChange(changedFolderIds);\n setValue(folders);\n },\n [onChange]\n );\n\n return (\n <MultiCombobox\n prefixIcon=\"filter\"\n minWidth={40}\n width=\"auto\"\n options={getFoldersAsOptions}\n value={value}\n onChange={onSelectOptionChange}\n isClearable\n placeholder={t('folder-filter.select-placeholder', 'Filter by folder')}\n aria-label={t('folder-filter.select-aria-label', 'Folder filter')}\n />\n );\n}\n\nasync function getFoldersAsOptions(searchString: string) {\n // Use searcher as it will handle the logic for using the appropriate API\n const searcher = getGrafanaSearcher();\n const queryResponse = await searcher.search({\n query: searchString,\n kind: ['folder'],\n limit: 100,\n permission: 'view',\n });\n\n const options = queryResponse.view.map((item) => ({\n label: item.name,\n value: item.uid,\n }));\n\n if (!searchString || 'dashboards'.includes(searchString.toLowerCase())) {\n options.unshift({ label: 'Dashboards', value: 'general' });\n }\n\n return options;\n}\n","import { css, cx } from '@emotion/css';\nimport { memo, useCallback, useState } from 'react';\nimport { useDebounce } from 'react-use';\n\nimport { GrafanaTheme2, PanelPluginMeta, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { useStyles2, Stack, FilterInput } from '@grafana/ui';\n\nimport { FolderFilter } from '../../../../core/components/FolderFilter/FolderFilter';\nimport { PanelTypeFilter } from '../../../../core/components/PanelTypeFilter/PanelTypeFilter';\nimport { SortPicker } from '../../../../core/components/Select/SortPicker';\nimport { DEFAULT_PER_PAGE_PAGINATION } from '../../../../core/constants';\nimport { LibraryElementDTO } from '../../types';\nimport { LibraryPanelsView } from '../LibraryPanelsView/LibraryPanelsView';\n\nexport enum LibraryPanelsSearchVariant {\n Tight = 'tight',\n Spacious = 'spacious',\n}\n\nexport interface LibraryPanelsSearchProps {\n onClick: (panel: LibraryElementDTO) => void;\n variant?: LibraryPanelsSearchVariant;\n showSort?: boolean;\n showPanelFilter?: boolean;\n showFolderFilter?: boolean;\n showSecondaryActions?: boolean;\n currentPanelId?: string;\n currentFolderUID?: string;\n perPage?: number;\n}\n\nexport const LibraryPanelsSearch = ({\n onClick,\n variant = LibraryPanelsSearchVariant.Spacious,\n currentPanelId,\n currentFolderUID,\n perPage = DEFAULT_PER_PAGE_PAGINATION,\n showPanelFilter = false,\n showFolderFilter = false,\n showSort = false,\n showSecondaryActions = false,\n}: LibraryPanelsSearchProps): JSX.Element => {\n const styles = useStyles2(getStyles, variant);\n\n const [searchQuery, setSearchQuery] = useState('');\n const [debouncedSearchQuery, setDebouncedSearchQuery] = useState('');\n useDebounce(() => setDebouncedSearchQuery(searchQuery), 200, [searchQuery]);\n\n const [sortDirection, setSortDirection] = useState<SelectableValue<string>>({});\n const [folderFilter, setFolderFilter] = useState<string[]>(currentFolderUID ? [currentFolderUID] : []);\n const [panelFilter, setPanelFilter] = useState<string[]>([]);\n\n const sortOrFiltersVisible = showSort || showPanelFilter || showFolderFilter;\n const verticalGroupSpacing = variant === LibraryPanelsSearchVariant.Tight ? 3 : 0.5;\n\n return (\n <div className={styles.container}>\n <Stack direction=\"column\" gap={verticalGroupSpacing}>\n <div\n className={cx(styles.gridContainer, {\n [styles.tightLayout]: variant === LibraryPanelsSearchVariant.Tight,\n })}\n >\n <div className={styles.filterInputWrapper}>\n <FilterInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder={t(\n 'library-panels.library-panels-search.placeholder-search-by-name-or-description',\n 'Search by name, description or folder name'\n )}\n width={0}\n escapeRegex={false}\n />\n </div>\n {sortOrFiltersVisible && (\n <SearchControls\n showSort={showSort}\n showPanelFilter={showPanelFilter}\n showFolderFilter={showFolderFilter}\n onSortChange={setSortDirection}\n onFolderFilterChange={setFolderFilter}\n onPanelFilterChange={setPanelFilter}\n sortDirection={sortDirection.value}\n variant={variant}\n />\n )}\n </div>\n\n <div className={styles.libraryPanelsView}>\n <LibraryPanelsView\n onClickCard={onClick}\n searchString={debouncedSearchQuery}\n sortDirection={sortDirection.value}\n panelFilter={panelFilter}\n folderFilter={folderFilter}\n currentPanelId={currentPanelId}\n showSecondaryActions={showSecondaryActions}\n perPage={perPage}\n />\n </div>\n </Stack>\n </div>\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2, variant: LibraryPanelsSearchVariant) {\n return {\n filterInputWrapper: css({\n flexGrow: variant === LibraryPanelsSearchVariant.Tight ? 1 : 'initial',\n }),\n container: css({\n width: '100%',\n overflowY: 'auto',\n padding: theme.spacing(1),\n }),\n libraryPanelsView: css({\n width: '100%',\n }),\n gridContainer: css({\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n columnGap: theme.spacing(1),\n rowGap: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n }),\n tightLayout: css({\n flexDirection: 'row',\n rowGap: theme.spacing(1),\n }),\n };\n}\n\ninterface SearchControlsProps {\n showSort: boolean;\n showPanelFilter: boolean;\n showFolderFilter: boolean;\n sortDirection?: string;\n onSortChange: (sortValue: SelectableValue) => void;\n onFolderFilterChange: (folder: string[]) => void;\n onPanelFilterChange: (plugins: string[]) => void;\n variant?: LibraryPanelsSearchVariant;\n}\n\nconst SearchControls = memo(\n ({\n variant = LibraryPanelsSearchVariant.Spacious,\n showSort,\n showPanelFilter,\n showFolderFilter,\n sortDirection,\n onSortChange,\n onFolderFilterChange,\n onPanelFilterChange,\n }: SearchControlsProps) => {\n const styles = useStyles2(getRowStyles);\n const panelFilterChanged = useCallback(\n (plugins: PanelPluginMeta[]) => onPanelFilterChange(plugins.map((p) => p.id)),\n [onPanelFilterChange]\n );\n const folderFilterChanged = useCallback(\n (folders: string[]) => onFolderFilterChange(folders),\n [onFolderFilterChange]\n );\n\n return (\n <div\n className={cx(styles.container, {\n [styles.containerTight]: variant === LibraryPanelsSearchVariant.Tight,\n })}\n >\n {showSort && <SortPicker value={sortDirection} onChange={onSortChange} filter={['alpha-asc', 'alpha-desc']} />}\n {(showFolderFilter || showPanelFilter) && (\n <div\n className={cx(styles.filterContainer, {\n [styles.filterContainerTight]: variant === LibraryPanelsSearchVariant.Tight,\n })}\n >\n {showFolderFilter && <FolderFilter onChange={folderFilterChanged} />}\n {showPanelFilter && <PanelTypeFilter onChange={panelFilterChanged} />}\n </div>\n )}\n </div>\n );\n }\n);\nSearchControls.displayName = 'SearchControls';\n\nfunction getRowStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n display: 'flex',\n gap: theme.spacing(1),\n flexGrow: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n }),\n containerTight: css({\n flexGrow: 'initial',\n flexDirection: 'column',\n justifyContent: 'normal',\n }),\n filterContainer: css({\n display: 'flex',\n flexDirection: 'row',\n gap: theme.spacing(1),\n }),\n filterContainerTight: css({\n flexDirection: 'column',\n marginLeft: 'initial',\n }),\n };\n}\n","import { parseFlags } from '@grafana/data';\n\nimport { Label, LabelMatcher } from './types';\n\ntype LabelMatchingResult = {\n // wether all of the labels match the given set of matchers\n matches: boolean;\n // details of which labels matched which matcher\n details: LabelMatchDetails[];\n};\n\n// LabelMatchDetails is a map of labels to their match results\nexport type LabelMatchDetails = {\n labelIndex: number; // index of the label in the labels array\n match: boolean;\n matcher: LabelMatcher | null;\n} & (PositiveLabelMatch | NegativeLabelMatch);\n\ntype PositiveLabelMatch = {\n match: true;\n matcher: LabelMatcher;\n};\ntype NegativeLabelMatch = {\n match: false;\n matcher: null;\n};\n\n// returns a match results for given set of matchers (from a policy for instance) and a set of labels\nexport function matchLabels(matchers: LabelMatcher[], labels: Label[]): LabelMatchingResult {\n const matches = matchLabelsSet(matchers, labels);\n\n // create initial map of label => match result\n const details = labels.map<LabelMatchDetails>((_label, index) => ({\n labelIndex: index,\n match: false,\n matcher: null,\n }));\n\n // for each matcher, check which label it matched for\n matchers.forEach((matcher) => {\n const matchingLabelIndex = labels.findIndex((label) => isLabelMatch(matcher, label));\n\n // record that matcher for the label\n if (matchingLabelIndex > -1) {\n details[matchingLabelIndex].match = true;\n details[matchingLabelIndex].matcher = matcher;\n }\n });\n\n return { matches, details };\n}\n\n// ⚠️ DO NOT USE THIS FUNCTION FOR ROUTE SELECTION ALGORITHM\n// for route selection algorithm, always compare a single matcher to the entire label set\n// see \"matchLabelsSet\"\nexport function isLabelMatch(matcher: LabelMatcher, label: Label): boolean {\n const [labelKey, labelValue] = label;\n const { label: matcherLabel, type: matcherType, value: matcherValue } = matcher;\n\n if (labelKey !== matcherLabel) {\n return false;\n }\n\n const matchFunction = OperatorFunctions[matcherType];\n return matchFunction(labelValue, matcherValue);\n}\n\nexport function matchLabelsSet(matchers: LabelMatcher[], labels: Label[]): boolean {\n for (const matcher of matchers) {\n if (!isLabelMatchInSet(matcher, labels)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Checks if a label matcher matches any of the labels in the provided set.\n */\nfunction isLabelMatchInSet(matcher: LabelMatcher, labels: Label[]): boolean {\n const { label, type, value } = matcher;\n\n let labelValue = ''; // matchers that have no labels are treated as empty string label values\n const labelForMatcher = Object.fromEntries(labels)[label];\n if (labelForMatcher) {\n labelValue = labelForMatcher;\n }\n\n const matchFunction = OperatorFunctions[type];\n try {\n // This can throw because the regex operators use the JavaScript regex engine\n // and \"new RegExp()\" throws on invalid regular expressions.\n //\n // This is usually a user-error (because matcher values are taken from user input)\n return matchFunction(labelValue, value);\n } catch (err) {\n return false;\n }\n}\n\ntype OperatorPredicate = (labelValue: string, matcherValue: string) => boolean;\nconst OperatorFunctions: Record<LabelMatcher['type'], OperatorPredicate> = {\n '=': (lv, mv) => lv === mv,\n '!=': (lv, mv) => lv !== mv,\n // At the time of writing, Alertmanager compiles to another (anchored) Regular Expression,\n // so we should also anchor our UI matches for consistency with this behaviour\n // https://github.com/prometheus/alertmanager/blob/fd37ce9c95898ca68be1ab4d4529517174b73c33/pkg/labels/matcher.go#L69\n '=~': (lv, mv) => {\n const valueWithFlagsParsed = parseFlags(`^(?:${mv})$`);\n const re = new RegExp(valueWithFlagsParsed.cleaned, valueWithFlagsParsed.flags);\n return re.test(lv);\n },\n '!~': (lv, mv) => {\n const valueWithFlagsParsed = parseFlags(`^(?:${mv})$`);\n const re = new RegExp(valueWithFlagsParsed.cleaned, valueWithFlagsParsed.flags);\n return !re.test(lv);\n },\n};\n","import { isEqual, uniqWith } from 'lodash';\n\nimport { matchLabelsSet } from '@grafana/alerting/unstable';\nimport { SelectableValue } from '@grafana/data';\nimport {\n AlertManagerCortexConfig,\n Matcher,\n MatcherOperator,\n ObjectMatcher,\n Route,\n TimeInterval,\n TimeRange,\n} from 'app/plugins/datasource/alertmanager/types';\nimport { Labels } from 'app/types/unified-alerting-dto';\n\nimport { MatcherFieldValue } from '../types/silence-form';\n\nimport { getAllDataSources } from './config';\nimport { DataSourceType, GRAFANA_RULES_SOURCE_NAME } from './datasource';\nimport { objectLabelsToArray } from './labels';\nimport {\n MatcherFormatter,\n convertObjectMatcherToAlertingPackageMatcher,\n parsePromQLStyleMatcherLooseSafe,\n unquoteWithUnescape,\n} from './matchers';\n\nexport function addDefaultsToAlertmanagerConfig(config: AlertManagerCortexConfig): AlertManagerCortexConfig {\n // add default receiver if it does not exist\n if (!config.alertmanager_config.receivers) {\n config.alertmanager_config.receivers = [{ name: 'default ' }];\n }\n // add default route if it does not exists\n if (!config.alertmanager_config.route) {\n config.alertmanager_config.route = {\n receiver: config.alertmanager_config.receivers![0].name,\n };\n }\n if (!config.template_files) {\n config.template_files = {};\n }\n return config;\n}\n\nexport function removeTimeIntervalFromRoute(muteTiming: string, route: Route): Route {\n const newRoute: Route = {\n ...route,\n mute_time_intervals: route.mute_time_intervals?.filter((muteName) => muteName !== muteTiming) ?? [],\n active_time_intervals: route.active_time_intervals?.filter((muteName) => muteName !== muteTiming) ?? [],\n routes: route.routes?.map((subRoute) => removeTimeIntervalFromRoute(muteTiming, subRoute)),\n };\n return newRoute;\n}\n\nexport function renameTimeInterval(newName: string, oldName: string, route: Route): Route {\n return {\n ...route,\n mute_time_intervals: route.mute_time_intervals?.map((name) => (name === oldName ? newName : name)),\n active_time_intervals: route.active_time_intervals?.map((name) => (name === oldName ? newName : name)),\n routes: route.routes?.map((subRoute) => renameTimeInterval(newName, oldName, subRoute)),\n };\n}\n\nexport function unescapeObjectMatchers(matchers: ObjectMatcher[]): ObjectMatcher[] {\n return matchers.map(([name, operator, value]) => [name, operator, unquoteWithUnescape(value)]);\n}\n\nexport function matcherToOperator(matcher: Matcher): MatcherOperator {\n if (matcher.isEqual) {\n if (matcher.isRegex) {\n return MatcherOperator.regex;\n } else {\n return MatcherOperator.equal;\n }\n } else if (matcher.isRegex) {\n return MatcherOperator.notRegex;\n } else {\n return MatcherOperator.notEqual;\n }\n}\n\nexport function matcherOperatorToValue(operator: MatcherOperator) {\n switch (operator) {\n case MatcherOperator.equal:\n return { isEqual: true, isRegex: false };\n case MatcherOperator.notEqual:\n return { isEqual: false, isRegex: false };\n case MatcherOperator.regex:\n return { isEqual: true, isRegex: true };\n case MatcherOperator.notRegex:\n return { isEqual: false, isRegex: true };\n }\n}\n\nexport function matcherToMatcherField(matcher: Matcher): MatcherFieldValue {\n return {\n name: matcher.name,\n value: matcher.value,\n operator: matcherToOperator(matcher),\n };\n}\n\nexport function matcherFieldToMatcher(field: MatcherFieldValue): Matcher {\n return {\n name: field.name,\n value: field.value,\n ...matcherOperatorToValue(field.operator),\n };\n}\n\nexport function matchersToString(matchers: Matcher[]) {\n const matcherFields = matchers.map(matcherToMatcherField);\n\n const combinedMatchers = matcherFields.reduce((acc, current) => {\n const currentMatcherString = `${current.name}${current.operator}\"${current.value}\"`;\n return acc ? `${acc}, ${currentMatcherString}` : currentMatcherString;\n }, '');\n\n return `{ ${combinedMatchers} }`;\n}\n\nexport const matcherFieldOptions: SelectableValue[] = [\n { label: MatcherOperator.equal, description: 'Equals', value: MatcherOperator.equal },\n { label: MatcherOperator.notEqual, description: 'Does not equal', value: MatcherOperator.notEqual },\n { label: MatcherOperator.regex, description: 'Matches regex', value: MatcherOperator.regex },\n { label: MatcherOperator.notRegex, description: 'Does not match regex', value: MatcherOperator.notRegex },\n];\n\nexport function matcherToObjectMatcher(matcher: Matcher): ObjectMatcher {\n const operator = matcherToOperator(matcher);\n return [matcher.name, operator, matcher.value];\n}\n\nexport function labelsMatchMatchers(labels: Labels, matchers: Matcher[]): boolean {\n const labelsArray = objectLabelsToArray(labels);\n const labelMatchers = matchers.map(matcherToObjectMatcher).map(convertObjectMatcherToAlertingPackageMatcher);\n\n return matchLabelsSet(labelMatchers, labelsArray);\n}\n\nexport function combineMatcherStrings(...matcherStrings: string[]): string {\n const matchers = matcherStrings.map(parsePromQLStyleMatcherLooseSafe).flat();\n const uniqueMatchers = uniqWith(matchers, isEqual);\n return matchersToString(uniqueMatchers);\n}\n\nexport function getAmMatcherFormatter(alertmanagerSourceName?: string): MatcherFormatter {\n return alertmanagerSourceName === GRAFANA_RULES_SOURCE_NAME ? 'default' : 'unquote';\n}\n\nexport function getAllAlertmanagerDataSources() {\n return getAllDataSources().filter((ds) => ds.type === DataSourceType.Alertmanager);\n}\n\nexport function getAlertmanagerByUid(uid?: string) {\n return getAllAlertmanagerDataSources().find((ds) => uid === ds.uid);\n}\n\nexport function timeIntervalToString(timeInterval: TimeInterval): string {\n const { times, weekdays, days_of_month, months, years, location } = timeInterval;\n const timeString = getTimeString(times, location);\n const weekdayString = getWeekdayString(weekdays);\n const daysString = getDaysOfMonthString(days_of_month);\n const monthsString = getMonthsString(months);\n const yearsString = getYearsString(years);\n\n return [timeString, weekdayString, daysString, monthsString, yearsString].join(', ');\n}\n\nexport function getTimeString(times?: TimeRange[], location?: string): string {\n return (\n 'Times: ' +\n (times\n ? times?.map(({ start_time, end_time }) => `${start_time} - ${end_time} [${location ?? 'UTC'}]`).join(' and ')\n : 'All')\n );\n}\n\nexport function getWeekdayString(weekdays?: string[]): string {\n return (\n 'Weekdays: ' +\n (weekdays\n ?.map((day) => {\n if (day.includes(':')) {\n return day\n .split(':')\n .map((d) => {\n const abbreviated = d.slice(0, 3);\n return abbreviated[0].toLocaleUpperCase() + abbreviated.slice(1);\n })\n .join('-');\n } else {\n const abbreviated = day.slice(0, 3);\n return abbreviated[0].toLocaleUpperCase() + abbreviated.slice(1);\n }\n })\n .join(', ') ?? 'All')\n );\n}\n\nexport function getDaysOfMonthString(daysOfMonth?: string[]): string {\n return 'Days of the month: ' + (daysOfMonth?.join(', ') ?? 'All');\n}\n\nexport function getMonthsString(months?: string[]): string {\n return 'Months: ' + (months?.join(', ') ?? 'All');\n}\n\nexport function getYearsString(years?: string[]): string {\n return 'Years: ' + (years?.join(', ') ?? 'All');\n}\n","// Prometheus API DTOs, possibly to be autogenerated from openapi spec in the near future\n\nimport { DataQuery, RelativeTimeRange } from '@grafana/data';\nimport { ExpressionQuery } from 'app/features/expressions/types';\n\nimport { AlertGroupTotals, AlertInstanceTotals } from './unified-alerting';\n\nexport type Labels = Record<string, string>;\nexport type Annotations = Record<string, string>;\n\nexport enum PromAlertingRuleState {\n Firing = 'firing',\n Inactive = 'inactive',\n Pending = 'pending',\n Recovering = 'recovering',\n Unknown = 'unknown',\n}\n\nexport enum GrafanaAlertState {\n Normal = 'Normal',\n Alerting = 'Alerting',\n Pending = 'Pending',\n Recovering = 'Recovering',\n NoData = 'NoData',\n Error = 'Error',\n}\n\ntype GrafanaAlertStateReason = ` (${string})` | '';\n\nexport type GrafanaAlertStateWithReason = `${GrafanaAlertState}${GrafanaAlertStateReason}`;\n\nexport function isPromAlertingRuleState(state: string): state is PromAlertingRuleState {\n return Object.values<string>(PromAlertingRuleState).includes(state);\n}\n\nexport function isGrafanaAlertState(state: string): state is GrafanaAlertState {\n return Object.values(GrafanaAlertState).some((promState) => promState === state);\n}\n\n/** We need this to disambiguate the union PromAlertingRuleState | GrafanaAlertStateWithReason\n */\nexport function isAlertStateWithReason(\n state: PromAlertingRuleState | GrafanaAlertStateWithReason\n): state is GrafanaAlertStateWithReason {\n const propAlertingRuleStateValues: string[] = Object.values(PromAlertingRuleState);\n return state !== null && state !== undefined && !propAlertingRuleStateValues.includes(state);\n}\n\nexport function mapStateWithReasonToReason(state: GrafanaAlertStateWithReason): string {\n const match = state.match(/\\((.*?)\\)/);\n return match ? match[1] : '';\n}\n\ntype StateWithReasonToBaseStateReturnType<T> = T extends GrafanaAlertStateWithReason\n ? GrafanaAlertState\n : T extends PromAlertingRuleState\n ? PromAlertingRuleState\n : never;\n\nexport function mapStateWithReasonToBaseState(\n state: GrafanaAlertStateWithReason | PromAlertingRuleState\n): StateWithReasonToBaseStateReturnType<GrafanaAlertStateWithReason | PromAlertingRuleState> {\n if (isAlertStateWithReason(state)) {\n const fields = state.split(' ');\n return fields[0] as GrafanaAlertState;\n } else {\n return state;\n }\n}\n\nexport enum PromRuleType {\n Alerting = 'alerting',\n Recording = 'recording',\n}\n\nexport enum PromApplication {\n Cortex = 'Cortex',\n Mimir = 'Mimir',\n Prometheus = 'Prometheus',\n Thanos = 'Thanos',\n}\n\nexport type RulesSourceApplication = PromApplication | 'Loki' | 'grafana';\n\nexport interface PromBuildInfoResponse {\n data: {\n application?: string;\n version: string;\n revision: string;\n features?: {\n ruler_config_api?: 'true' | 'false';\n alertmanager_config_api?: 'true' | 'false';\n query_sharding?: 'true' | 'false';\n federated_rules?: 'true' | 'false';\n };\n [key: string]: unknown;\n };\n status: 'success';\n}\n\nexport interface PromApiFeatures {\n application: RulesSourceApplication;\n features: {\n rulerApiEnabled: boolean;\n };\n}\n\nexport interface AlertmanagerApiFeatures {\n /**\n * Some Alertmanager implementations (Mimir) are multi-tenant systems.\n *\n * To save on compute costs, tenants are not active until they have a configuration set.\n * If there is no fallback_config_file set, Alertmanager endpoints will respond with HTTP 404\n *\n * Despite that, it is possible to create a configuration for such datasource\n * by posting a new config to the `/api/v1/alerts` endpoint\n */\n lazyConfigInit: boolean;\n}\n\ninterface PromRuleDTOBase {\n health: string;\n name: string;\n query: string; // expr\n evaluationTime?: number;\n lastEvaluation?: string;\n lastError?: string;\n}\n\ninterface GrafanaPromRuleDTOBase extends PromRuleDTOBase {\n uid: string;\n folderUid: string;\n isPaused: boolean;\n queriedDatasourceUIDs?: string[];\n provenance?: string;\n}\n\nexport interface PromAlertingRuleDTO extends PromRuleDTOBase {\n alerts?: Array<{\n labels: Labels;\n annotations: Annotations;\n state: Exclude<PromAlertingRuleState | GrafanaAlertStateWithReason, PromAlertingRuleState.Inactive>;\n activeAt: string;\n value: string;\n }>;\n labels?: Labels;\n annotations?: Annotations;\n duration?: number; // for\n state: PromAlertingRuleState;\n type: PromRuleType.Alerting;\n notificationSettings?: GrafanaNotificationSettings;\n}\n\nexport interface PromRecordingRuleDTO extends PromRuleDTOBase {\n health: string;\n name: string;\n query: string; // expr\n type: PromRuleType.Recording;\n labels?: Labels;\n}\n\nexport type PromRuleDTO = PromAlertingRuleDTO | PromRecordingRuleDTO;\n\nexport interface PromRuleGroupDTO<TRule = PromRuleDTO> {\n name: string;\n file: string;\n rules: TRule[];\n interval: number;\n\n evaluationTime?: number; // these 2 are not in older prometheus payloads\n lastEvaluation?: string;\n}\n\nexport interface GrafanaPromAlertingRuleDTO extends GrafanaPromRuleDTOBase, PromAlertingRuleDTO {\n totals: AlertInstanceTotals;\n totalsFiltered: AlertInstanceTotals;\n}\n\nexport interface GrafanaPromRecordingRuleDTO extends GrafanaPromRuleDTOBase, PromRecordingRuleDTO {}\n\nexport type GrafanaPromRuleDTO = GrafanaPromAlertingRuleDTO | GrafanaPromRecordingRuleDTO;\n\nexport interface GrafanaPromRuleGroupDTO extends PromRuleGroupDTO<GrafanaPromRuleDTO> {\n folderUid: string;\n}\n\nexport interface PromResponse<T> {\n status: 'success' | 'error' | ''; // mocks return empty string\n data: T;\n errorType?: string;\n error?: string;\n warnings?: string[];\n}\n\nexport interface PromRulesResponse extends PromResponse<{ groups: PromRuleGroupDTO[]; groupNextToken?: string }> {}\n\nexport interface GrafanaPromRulesResponse\n extends PromResponse<{\n groups: GrafanaPromRuleGroupDTO[];\n groupNextToken?: string;\n totals?: AlertGroupTotals;\n }> {}\n\n// Ruler rule DTOs\ninterface RulerRuleBaseDTO {\n expr: string;\n labels?: Labels;\n}\n\nexport interface RulerRecordingRuleDTO extends RulerRuleBaseDTO {\n record: string;\n}\n\nexport interface RulerAlertingRuleDTO extends RulerRuleBaseDTO {\n alert: string;\n for?: string;\n keep_firing_for?: string;\n annotations?: Annotations;\n}\n\nexport enum GrafanaAlertStateDecision {\n Alerting = 'Alerting',\n NoData = 'NoData',\n KeepLast = 'KeepLast',\n OK = 'OK',\n Error = 'Error',\n}\n\nexport interface AlertDataQuery extends DataQuery {\n maxDataPoints?: number;\n intervalMs?: number;\n expression?: string;\n instant?: boolean;\n range?: boolean;\n}\n\nexport interface AlertQuery<T = AlertDataQuery | ExpressionQuery> {\n refId: string;\n queryType: string;\n relativeTimeRange?: RelativeTimeRange;\n datasourceUid: string;\n model: T;\n}\n\nexport interface GrafanaNotificationSettings {\n receiver: string;\n group_by?: string[];\n group_wait?: string;\n group_interval?: string;\n repeat_interval?: string;\n mute_time_intervals?: string[];\n active_time_intervals?: string[];\n}\n\nexport interface GrafanaEditorSettings {\n simplified_query_and_expressions_section: boolean;\n simplified_notifications_section: boolean;\n}\n\nexport interface UpdatedBy {\n uid: string;\n name: string;\n}\nexport interface PostableGrafanaRuleDefinition {\n uid?: string;\n title: string;\n condition: string;\n no_data_state?: GrafanaAlertStateDecision;\n exec_err_state?: GrafanaAlertStateDecision;\n data: AlertQuery[];\n is_paused?: boolean;\n notification_settings?: GrafanaNotificationSettings;\n metadata?: {\n editor_settings?: GrafanaEditorSettings;\n };\n record?: {\n metric: string;\n from: string;\n target_datasource_uid?: string;\n };\n intervalSeconds?: number;\n missing_series_evals_to_resolve?: number;\n}\nexport interface GrafanaRuleDefinition extends PostableGrafanaRuleDefinition {\n id?: string;\n uid: string;\n guid?: string;\n namespace_uid: string;\n rule_group: string;\n provenance?: string;\n // TODO: For updated_by, updated, and version, fix types so these aren't optional, and\n // are not conflated with test fixtures\n updated?: string;\n updated_by?: UpdatedBy | null;\n version?: number;\n}\n\n// types for Grafana-managed recording and alerting rules\nexport type GrafanaAlertingRuleDefinition = Omit<GrafanaRuleDefinition, 'record'>;\nexport type GrafanaRecordingRuleDefinition = GrafanaRuleDefinition & {\n record: GrafanaRuleDefinition['record'];\n};\n\nexport interface RulerGrafanaRuleDTO<T = GrafanaRuleDefinition> {\n grafana_alert: T;\n for?: string;\n keep_firing_for?: string;\n annotations?: Annotations;\n labels?: Labels;\n}\n\nexport type TopLevelGrafanaRuleDTOField = keyof Omit<RulerGrafanaRuleDTO, 'grafana_alert'>;\nexport type GrafanaAlertRuleDTOField = keyof GrafanaRuleDefinition;\n\nexport type PostableRuleGrafanaRuleDTO = RulerGrafanaRuleDTO<PostableGrafanaRuleDefinition>;\n\nexport type RulerCloudRuleDTO = RulerAlertingRuleDTO | RulerRecordingRuleDTO;\n\nexport type RulerRuleDTO = RulerCloudRuleDTO | RulerGrafanaRuleDTO;\nexport type PostableRuleDTO = RulerCloudRuleDTO | PostableRuleGrafanaRuleDTO;\n\nexport type RulerRuleGroupDTO<R = RulerRuleDTO> = {\n name: string;\n interval?: string;\n source_tenants?: string[];\n rules: R[];\n};\n\nexport type PostableRulerRuleGroupDTO = RulerRuleGroupDTO<PostableRuleDTO>;\n\nexport type RulerGrafanaRuleGroupDTO = RulerRuleGroupDTO<RulerGrafanaRuleDTO>;\n\nexport type RulerRulesConfigDTO = { [namespace: string]: RulerRuleGroupDTO[] };\n\nexport type RulerGrafanaRulesConfigDTO = { [namespace: string]: RulerGrafanaRuleGroupDTO[] };\n","import { chain, filter } from 'lodash';\nimport { PropsWithChildren } from 'react';\n\nimport {\n Abilities,\n Action,\n AlertingAction,\n AlertmanagerAction,\n useAlertingAbilities,\n useAllAlertmanagerAbilities,\n} from '../hooks/useAbilities';\n\ninterface AuthorizeProps extends PropsWithChildren {\n actions: AlertmanagerAction[] | AlertingAction[];\n}\n\nexport const Authorize = ({ actions, children }: AuthorizeProps) => {\n const alertmanagerActions = filter(actions, isAlertmanagerAction) as AlertmanagerAction[];\n const alertSourceActions = filter(actions, isAlertingAction) as AlertingAction[];\n\n if (alertmanagerActions.length) {\n return <AuthorizeAlertmanager actions={alertmanagerActions}>{children}</AuthorizeAlertmanager>;\n }\n\n if (alertSourceActions.length) {\n return <AuthorizeAlertsource actions={alertSourceActions}>{children}</AuthorizeAlertsource>;\n }\n\n return null;\n};\n\ninterface ActionsProps<T extends Action> extends PropsWithChildren {\n actions: T[];\n}\n\nconst AuthorizeAlertmanager = ({ actions, children }: ActionsProps<AlertmanagerAction>) => {\n const alertmanagerAbilties = useAllAlertmanagerAbilities();\n const allowed = actionsAllowed(alertmanagerAbilties, actions);\n\n if (allowed) {\n return <>{children}</>;\n } else {\n return null;\n }\n};\n\nconst AuthorizeAlertsource = ({ actions, children }: ActionsProps<AlertingAction>) => {\n const alertSourceAbilities = useAlertingAbilities();\n const allowed = actionsAllowed(alertSourceAbilities, actions);\n\n if (allowed) {\n return <>{children}</>;\n } else {\n return null;\n }\n};\n\n// TODO add some authorize helper components for alert source and individual alert rules\n\n// check if some action is allowed from the abilities\nfunction actionsAllowed<T extends Action>(abilities: Abilities<T>, actions: T[]) {\n return chain(abilities)\n .pick(actions)\n .values()\n .value()\n .some(([_supported, allowed]) => allowed === true);\n}\n\nfunction isAlertmanagerAction(action: AlertmanagerAction) {\n return Object.values(AlertmanagerAction).includes(action);\n}\n\nfunction isAlertingAction(action: AlertingAction) {\n return Object.values(AlertingAction).includes(action);\n}\n","import { t } from '@grafana/i18n';\nimport { Badge } from '@grafana/ui';\n\nexport const UnusedContactPointBadge = () => {\n return (\n <Badge\n text={t('alerting.unused-contact-point-badge.text-unused', 'Unused')}\n aria-label={t('alerting.unused-contact-point-badge.aria-label-unused', 'unused')}\n color=\"orange\"\n icon=\"exclamation-triangle\"\n tooltip={t(\n 'alerting.unused-contact-point-badge.tooltip-unused',\n 'This contact point is not used in any notification policy or alert rule'\n )}\n />\n );\n};\n","import { css } from '@emotion/css';\nimport { Fragment, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Dropdown, LinkButton, Menu, Stack, Text, TextLink, Tooltip, useStyles2 } from '@grafana/ui';\nimport ConditionalWrap from 'app/features/alerting/unified/components/ConditionalWrap';\nimport { useExportContactPoint } from 'app/features/alerting/unified/components/contact-points/useExportContactPoint';\nimport { ManagePermissionsDrawer } from 'app/features/alerting/unified/components/permissions/ManagePermissions';\nimport { useAlertmanager } from 'app/features/alerting/unified/state/AlertmanagerContext';\nimport { K8sAnnotations } from 'app/features/alerting/unified/utils/k8s/constants';\nimport {\n canDeleteEntity,\n canEditEntity,\n getAnnotation,\n shouldUseK8sApi,\n} from 'app/features/alerting/unified/utils/k8s/utils';\n\nimport { AlertmanagerAction, useAlertmanagerAbility } from '../../hooks/useAbilities';\nimport { createRelativeUrl } from '../../utils/url';\nimport MoreButton from '../MoreButton';\nimport { ProvisioningBadge } from '../Provisioning';\nimport { Spacer } from '../Spacer';\n\nimport { UnusedContactPointBadge } from './components/UnusedBadge';\nimport { ContactPointWithMetadata, showManageContactPointPermissions } from './utils';\n\ninterface ContactPointHeaderProps {\n contactPoint: ContactPointWithMetadata;\n onDelete: (contactPoint: ContactPointWithMetadata) => void;\n}\n\nexport const ContactPointHeader = ({ contactPoint, onDelete }: ContactPointHeaderProps) => {\n const { name, id, provisioned, policies = [] } = contactPoint;\n const styles = useStyles2(getStyles);\n const [showPermissionsDrawer, setShowPermissionsDrawer] = useState(false);\n const { selectedAlertmanager } = useAlertmanager();\n\n const usingK8sApi = shouldUseK8sApi(selectedAlertmanager!);\n\n const [exportSupported, exportAllowed] = useAlertmanagerAbility(AlertmanagerAction.ExportContactPoint);\n const [editSupported, editAllowed] = useAlertmanagerAbility(AlertmanagerAction.UpdateContactPoint);\n const [deleteSupported, deleteAllowed] = useAlertmanagerAbility(AlertmanagerAction.UpdateContactPoint);\n const [ExportDrawer, openExportDrawer] = useExportContactPoint();\n\n const showManagePermissions = showManageContactPointPermissions(selectedAlertmanager!, contactPoint);\n\n const regularPolicyReferences = policies.filter((ref) => ref.route.type !== 'auto-generated');\n\n const k8sRoutesInUse = getAnnotation(contactPoint, K8sAnnotations.InUseRoutes);\n /**\n * Number of policies that reference this contact point\n *\n * When the k8s API is being used, this number will only be the regular policies\n * (will not include the auto generated simplified routing policies in the count)\n */\n const numberOfPolicies = usingK8sApi ? Number(k8sRoutesInUse) : policies.length;\n\n const numberOfPoliciesPreventingDeletion = usingK8sApi ? Number(k8sRoutesInUse) : regularPolicyReferences.length;\n\n /** Number of rules that use this contact point for simplified routing */\n const numberOfRules = Number(getAnnotation(contactPoint, K8sAnnotations.InUseRules)) || 0;\n\n /**\n * Is the contact point referenced by anything such as notification policies or as a simplified routing contact point?\n *\n * Used to determine whether to show the \"Unused\" badge\n */\n const isReferencedByAnything = usingK8sApi ? Boolean(numberOfPolicies || numberOfRules) : policies.length > 0;\n /** Does the current user have permissions to edit the contact point? */\n const hasAbilityToEdit = usingK8sApi ? canEditEntity(contactPoint) : editAllowed;\n /** Can the contact point actually be edited via the UI? */\n const contactPointIsEditable = !provisioned;\n /** Given the alertmanager, the user's permissions, and the state of the contact point - can it actually be edited? */\n const canEdit = editSupported && hasAbilityToEdit && contactPointIsEditable;\n\n /** Does the current user have permissions to delete the contact point? */\n const hasAbilityToDelete = usingK8sApi ? canDeleteEntity(contactPoint) : deleteAllowed;\n /** Can the contact point actually be deleted, regardless of permissions? i.e. ensuring it isn't provisioned and isn't referenced elsewhere */\n const contactPointIsDeleteable = !provisioned && !numberOfPoliciesPreventingDeletion && !numberOfRules;\n /** Given the alertmanager, the user's permissions, and the state of the contact point - can it actually be deleted? */\n const canBeDeleted = deleteSupported && hasAbilityToDelete && contactPointIsDeleteable;\n\n const menuActions: JSX.Element[] = [];\n if (showManagePermissions) {\n menuActions.push(\n <Fragment key=\"manage-permissions\">\n <Menu.Item\n icon=\"unlock\"\n label={t('alerting.contact-point-header.label-manage-permissions', 'Manage permissions')}\n onClick={() => setShowPermissionsDrawer(true)}\n />\n </Fragment>\n );\n }\n\n if (exportSupported) {\n menuActions.push(\n <Fragment key=\"export-contact-point\">\n <Menu.Item\n icon=\"download-alt\"\n label={t('alerting.contact-point-header.export-label-export', 'Export')}\n ariaLabel={t('alerting.contact-point-header.export-ariaLabel-export', 'Export')}\n disabled={!exportAllowed}\n data-testid=\"export\"\n onClick={() => openExportDrawer(name)}\n />\n <Menu.Divider />\n </Fragment>\n );\n }\n\n if (deleteSupported) {\n const cannotDeleteNoPermissions = t(\n 'alerting.contact-points.delete-reasons.no-permissions',\n 'You do not have the required permission to delete this contact point'\n );\n const cannotDeleteProvisioned = t(\n 'alerting.contact-points.delete-reasons.provisioned',\n 'Contact point is provisioned and cannot be deleted via the UI'\n );\n const cannotDeletePolicies = t(\n 'alerting.contact-points.delete-reasons.policies',\n 'Contact point is referenced by one or more notification policies'\n );\n const cannotDeleteRules = t(\n 'alerting.contact-points.delete-reasons.rules',\n 'Contact point is referenced by one or more alert rules'\n );\n\n const reasonsDeleteIsDisabled = [\n !hasAbilityToDelete ? cannotDeleteNoPermissions : '',\n provisioned ? cannotDeleteProvisioned : '',\n numberOfPoliciesPreventingDeletion > 0 ? cannotDeletePolicies : '',\n numberOfRules ? cannotDeleteRules : '',\n ].filter(Boolean);\n\n const deleteTooltipContent = (\n <>\n <Trans i18nKey=\"alerting.contact-points.delete-reasons.heading\">\n Contact point cannot be deleted for the following reasons:\n </Trans>\n <br />\n {reasonsDeleteIsDisabled.map((reason) => (\n <li key={reason}>{reason}</li>\n ))}\n </>\n );\n\n menuActions.push(\n <ConditionalWrap\n key=\"delete-contact-point\"\n shouldWrap={!canBeDeleted}\n wrap={(children) => (\n <Tooltip content={deleteTooltipContent} placement=\"top\">\n <span>{children}</span>\n </Tooltip>\n )}\n >\n <Menu.Item\n label={t('alerting.contact-point-header.label-delete', 'Delete')}\n ariaLabel={t('alerting.contact-point-header.ariaLabel-delete', 'Delete')}\n icon=\"trash-alt\"\n destructive\n disabled={!canBeDeleted}\n onClick={() => onDelete(contactPoint)}\n />\n </ConditionalWrap>\n );\n }\n\n const referencedByPoliciesText = t('alerting.contact-points.used-by', 'Used by {{ count }} notification policy', {\n count: numberOfPolicies,\n });\n\n const referencedByRulesText = t('alerting.contact-points.used-by-rules', 'Used by {{ count }} alert rule', {\n count: numberOfRules,\n });\n\n // TOOD: Tidy up/consolidate logic for working out id for contact point. This requires some unravelling of\n // existing types so its clearer where the ID has come from\n const urlId = id || name;\n\n return (\n <div className={styles.headerWrapper}>\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack alignItems=\"center\" gap={1} minWidth={0}>\n <Text element=\"h2\" variant=\"body\" weight=\"medium\" truncate>\n {name}\n </Text>\n </Stack>\n {numberOfPolicies > 0 && (\n <TextLink\n href={createRelativeUrl('/alerting/routes', { contactPoint: name })}\n variant=\"bodySmall\"\n color=\"primary\"\n inline={false}\n >\n {referencedByPoliciesText}\n </TextLink>\n )}\n {numberOfRules > 0 && (\n <TextLink\n href={createRelativeUrl('/alerting/list', { search: `contactPoint:\"${name}\"` })}\n variant=\"bodySmall\"\n color=\"primary\"\n inline={false}\n >\n {referencedByRulesText}\n </TextLink>\n )}\n {provisioned && (\n <ProvisioningBadge tooltip provenance={getAnnotation(contactPoint, K8sAnnotations.Provenance)} />\n )}\n {!isReferencedByAnything && <UnusedContactPointBadge />}\n <Spacer />\n <LinkButton\n tooltipPlacement=\"top\"\n tooltip={\n provisioned\n ? t(\n 'alerting.contact-point-header.tooltip-provisioned-contact-points',\n 'Provisioned contact points cannot be edited in the UI'\n )\n : undefined\n }\n variant=\"secondary\"\n size=\"sm\"\n icon={canEdit ? 'pen' : 'eye'}\n type=\"button\"\n data-testid={`${canEdit ? 'edit' : 'view'}-action`}\n href={`/alerting/notifications/receivers/${encodeURIComponent(urlId)}/edit`}\n >\n {canEdit\n ? t('alerting.contact-point-header.button-edit', 'Edit')\n : t('alerting.contact-point-header.button-view', 'View')}\n </LinkButton>\n {menuActions.length > 0 && (\n <Dropdown overlay={<Menu>{menuActions}</Menu>}>\n <MoreButton\n aria-label={t(\n 'alerting.contact-point-header.aria-label-more-actions',\n 'More actions for contact point \"{{contactPointName}}\"',\n { contactPointName: contactPoint.name }\n )}\n />\n </Dropdown>\n )}\n </Stack>\n {ExportDrawer}\n {showPermissionsDrawer && (\n <ManagePermissionsDrawer\n resource=\"receivers\"\n resourceId={contactPoint.id}\n resourceName={contactPoint.name}\n onClose={() => setShowPermissionsDrawer(false)}\n />\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n headerWrapper: css({\n background: `${theme.colors.background.secondary}`,\n padding: `${theme.spacing(1)} ${theme.spacing(1.5)}`,\n\n borderBottom: `solid 1px ${theme.colors.border.weak}`,\n borderTopLeftRadius: `${theme.shape.radius.default}`,\n borderTopRightRadius: `${theme.shape.radius.default}`,\n }),\n});\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Modal, ModalProps } from '@grafana/ui';\n\nimport { stringifyErrorLike } from '../../../utils/misc';\n\n/**\n * This hook controls the delete modal for contact points, showing loading and error states when appropriate\n */\nexport const useDeleteContactPointModal = (\n handleDelete: ({ name, resourceVersion }: { name: string; resourceVersion?: string }) => Promise<unknown>\n) => {\n const [showModal, setShowModal] = useState(false);\n const [contactPoint, setContactPoint] = useState<{ name: string; resourceVersion?: string }>();\n const [error, setError] = useState<unknown | undefined>();\n const [isLoading, setIsLoading] = useState(false);\n\n const handleDismiss = useCallback(() => {\n if (isLoading) {\n return;\n }\n setContactPoint(undefined);\n setShowModal(false);\n setError(undefined);\n }, [isLoading]);\n\n const handleShow = useCallback(({ name, resourceVersion }: { name: string; resourceVersion?: string }) => {\n setContactPoint({ name, resourceVersion });\n setShowModal(true);\n setError(undefined);\n }, []);\n\n const handleSubmit = useCallback(() => {\n if (contactPoint) {\n setIsLoading(true);\n handleDelete(contactPoint)\n .then(() => setShowModal(false))\n .catch(setError)\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [handleDelete, contactPoint]);\n\n const modalElement = useMemo(() => {\n if (error) {\n return <ErrorModal isOpen={showModal} onDismiss={handleDismiss} error={error} />;\n }\n\n return (\n <Modal\n isOpen={showModal}\n onDismiss={handleDismiss}\n closeOnBackdropClick={!isLoading}\n closeOnEscape={!isLoading}\n title={t(\n 'alerting.use-delete-contact-point-modal.modal-element.title-delete-contact-point',\n 'Delete contact point'\n )}\n >\n <p>\n <Trans i18nKey=\"alerting.use-delete-contact-point-modal.modal-element.deleting-contact-point-permanently-remove\">\n Deleting this contact point will permanently remove it.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"alerting.use-delete-contact-point-modal.modal-element.delete-contact-point\">\n Are you sure you want to delete this contact point?\n </Trans>\n </p>\n\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"destructive\" onClick={handleSubmit} disabled={isLoading}>\n {isLoading\n ? t('alerting.use-delete-contact-point-modal.deleting', 'Deleting...')\n : t('alerting.use-delete-contact-point-modal.delete-confirm', 'Yes, delete contact point')}\n </Button>\n <Button type=\"button\" variant=\"secondary\" onClick={handleDismiss} disabled={isLoading}>\n <Trans i18nKey=\"alerting.common.cancel\">Cancel</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n }, [error, handleDismiss, handleSubmit, isLoading, showModal]);\n\n return [modalElement, handleShow, handleDismiss] as const;\n};\n\ninterface ErrorModalProps extends Pick<ModalProps, 'isOpen' | 'onDismiss'> {\n error: unknown;\n}\nconst ErrorModal = ({ isOpen, onDismiss, error }: ErrorModalProps) => {\n return (\n <Modal\n isOpen={isOpen}\n onDismiss={onDismiss}\n closeOnBackdropClick={true}\n closeOnEscape={true}\n title={t('alerting.error-modal.title-something-went-wrong', 'Something went wrong')}\n >\n <p>\n <Trans i18nKey=\"alerting.error-modal.failed-to-update-your-configuration\">\n Failed to update your configuration:\n </Trans>\n </p>\n <pre>\n <code>{stringifyErrorLike(error)}</code>\n </pre>\n </Modal>\n );\n};\n","export const receiverTypeNames: Record<string, string> = {\n pagerduty: 'PagerDuty',\n pushover: 'Pushover',\n slack: 'Slack',\n opsgenie: 'OpsGenie',\n webhook: 'Webhook',\n victorops: 'VictorOps',\n wechat: 'WeChat',\n discord: 'Discord',\n webex: 'Cisco Webex Teams',\n sns: 'Amazon SNS',\n telegram: 'Telegram',\n msteams: 'Microsoft Teams',\n};\n","import { IconName } from '@grafana/ui';\n\nexport const INTEGRATION_ICONS: Record<string, IconName> = {\n discord: 'discord',\n email: 'envelope',\n googlechat: 'google-hangouts-alt',\n hipchat: 'hipchat',\n line: 'line',\n pagerduty: 'pagerduty',\n slack: 'slack',\n teams: 'microsoft',\n telegram: 'telegram-alt',\n webhook: 'link',\n sns: 'amazon',\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Icon, LinkButton, Stack, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { ReceiverPluginMetadata } from './useReceiversMetadata';\n\ninterface Props {\n metadata: ReceiverPluginMetadata;\n}\n\nexport const ReceiverMetadataBadge = ({ metadata: { icon, title, externalUrl, warning } }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <Stack alignItems=\"center\" gap={0.5}>\n <Stack direction=\"row\" alignItems=\"center\" gap={0.5}>\n {warning ? (\n <Tooltip content={warning} theme=\"error\">\n <Icon name=\"exclamation-triangle\" className={styles.warnIcon} />\n </Tooltip>\n ) : (\n <img src={icon} alt={title} height=\"16px\" />\n )}\n <span>{title}</span>\n </Stack>\n {externalUrl && (\n <LinkButton\n aria-label={t('alerting.receiver-metadata-badge.aria-label-open-external-link', 'Open external link')}\n icon=\"external-link-alt\"\n href={externalUrl}\n target=\"_blank\"\n variant=\"secondary\"\n size=\"sm\"\n />\n )}\n </Stack>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n warnIcon: css({\n fill: theme.colors.warning.text,\n }),\n});\n","import { css } from '@emotion/css';\nimport { groupBy, size, upperFirst } from 'lodash';\nimport { Fragment, ReactNode } from 'react';\n\nimport { GrafanaTheme2, dateTime } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Icon, Stack, Text, Tooltip, useStyles2 } from '@grafana/ui';\nimport { PrimaryText } from 'app/features/alerting/unified/components/common/TextVariants';\nimport { ContactPointHeader } from 'app/features/alerting/unified/components/contact-points/ContactPointHeader';\nimport { useDeleteContactPointModal } from 'app/features/alerting/unified/components/contact-points/components/Modals';\nimport { useDeleteContactPoint } from 'app/features/alerting/unified/components/contact-points/useContactPoints';\nimport { useAlertmanager } from 'app/features/alerting/unified/state/AlertmanagerContext';\nimport { GrafanaNotifierType, NotifierStatus } from 'app/features/alerting/unified/types/alerting';\nimport { receiverTypeNames } from 'app/plugins/datasource/alertmanager/consts';\n\nimport { INTEGRATION_ICONS } from '../../types/contact-points';\nimport { MetaText } from '../MetaText';\nimport { ReceiverMetadataBadge } from '../receivers/grafanaAppReceivers/ReceiverMetadataBadge';\nimport { ReceiverPluginMetadata } from '../receivers/grafanaAppReceivers/useReceiversMetadata';\n\nimport { RECEIVER_META_KEY, RECEIVER_PLUGIN_META_KEY, RECEIVER_STATUS_KEY } from './constants';\nimport { ContactPointWithMetadata, ReceiverConfigWithMetadata, getReceiverDescription } from './utils';\n\ninterface ContactPointProps {\n contactPoint: ContactPointWithMetadata;\n}\n\nexport const ContactPoint = ({ contactPoint }: ContactPointProps) => {\n const { grafana_managed_receiver_configs: receivers } = contactPoint;\n const styles = useStyles2(getStyles);\n const { selectedAlertmanager } = useAlertmanager();\n const [deleteTrigger] = useDeleteContactPoint({ alertmanager: selectedAlertmanager! });\n const [DeleteModal, showDeleteModal] = useDeleteContactPointModal(deleteTrigger.execute);\n\n // TODO probably not the best way to figure out if we want to show either only the summary or full metadata for the receivers?\n const showFullMetadata = receivers.some((receiver) => Boolean(receiver[RECEIVER_META_KEY]));\n\n return (\n <div className={styles.contactPointWrapper} data-testid=\"contact-point\">\n <Stack direction=\"column\" gap={0}>\n <ContactPointHeader\n contactPoint={contactPoint}\n onDelete={(contactPointToDelete) =>\n showDeleteModal({\n name: contactPointToDelete.id || contactPointToDelete.name,\n resourceVersion: contactPointToDelete.metadata?.resourceVersion,\n })\n }\n />\n\n {showFullMetadata ? (\n <div>\n {receivers.map((receiver, index) => {\n const diagnostics = receiver[RECEIVER_STATUS_KEY];\n const metadata = receiver[RECEIVER_META_KEY];\n const sendingResolved = !Boolean(receiver.disableResolveMessage);\n const pluginMetadata = receiver[RECEIVER_PLUGIN_META_KEY];\n const key = metadata.name + index;\n\n return (\n <ContactPointReceiver\n key={key}\n name={metadata.name}\n type={receiver.type}\n description={getReceiverDescription(receiver)}\n diagnostics={diagnostics}\n pluginMetadata={pluginMetadata}\n sendingResolved={sendingResolved}\n />\n );\n })}\n </div>\n ) : (\n <div className={styles.integrationWrapper}>\n <ContactPointReceiverSummary receivers={receivers} />\n </div>\n )}\n </Stack>\n {DeleteModal}\n </div>\n );\n};\n\ninterface ContactPointReceiverProps {\n name: string;\n type: GrafanaNotifierType | string;\n description?: ReactNode;\n sendingResolved?: boolean;\n diagnostics?: NotifierStatus;\n pluginMetadata?: ReceiverPluginMetadata;\n}\n\nconst ContactPointReceiver = (props: ContactPointReceiverProps) => {\n const { name, type, description, diagnostics, pluginMetadata, sendingResolved = true } = props;\n const styles = useStyles2(getStyles);\n\n const hasMetadata = diagnostics !== undefined;\n\n return (\n <div className={styles.integrationWrapper}>\n <Stack direction=\"column\" gap={0.5}>\n <ContactPointReceiverTitleRow\n name={name}\n type={type}\n description={description}\n pluginMetadata={pluginMetadata}\n />\n {hasMetadata && <ContactPointReceiverMetadataRow diagnostics={diagnostics} sendingResolved={sendingResolved} />}\n </Stack>\n </div>\n );\n};\n\nexport interface ContactPointReceiverTitleRowProps {\n name: string;\n type: GrafanaNotifierType | string;\n description?: ReactNode;\n pluginMetadata?: ReceiverPluginMetadata;\n}\n\nexport function ContactPointReceiverTitleRow(props: ContactPointReceiverTitleRowProps) {\n const { name, type, description, pluginMetadata } = props;\n\n const iconName = INTEGRATION_ICONS[type];\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack direction=\"row\" alignItems=\"center\" gap={0.5}>\n {iconName && <Icon name={iconName} />}\n {pluginMetadata ? (\n <ReceiverMetadataBadge metadata={pluginMetadata} />\n ) : (\n <Text variant=\"body\" color=\"primary\">\n {name}\n </Text>\n )}\n </Stack>\n {description && (\n <Text variant=\"bodySmall\" color=\"secondary\">\n {description}\n </Text>\n )}\n </Stack>\n );\n}\n\ninterface ContactPointReceiverMetadata {\n sendingResolved: boolean;\n diagnostics: NotifierStatus;\n}\n\ntype ContactPointReceiverSummaryProps = {\n receivers: ReceiverConfigWithMetadata[];\n limit?: number;\n};\n\n/**\n * This summary is used when we're dealing with non-Grafana managed alertmanager since they\n * don't have any metadata worth showing other than a summary of what types are configured for the contact point\n */\nexport const ContactPointReceiverSummary = ({ receivers, limit }: ContactPointReceiverSummaryProps) => {\n // limit for how many integrations are rendered\n const INTEGRATIONS_LIMIT = limit ?? Number.MAX_VALUE;\n const countByType = groupBy(receivers, (receiver) => receiver.type);\n\n const numberOfUniqueIntegrations = size(countByType);\n const integrationsShown = Object.entries(countByType).slice(0, INTEGRATIONS_LIMIT);\n const numberOfIntegrationsNotShown = numberOfUniqueIntegrations - INTEGRATIONS_LIMIT;\n\n return (\n <Stack direction=\"column\" gap={0}>\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n {integrationsShown.length === 0 && (\n <MetaText color=\"warning\" icon=\"exclamation-triangle\">\n <Trans i18nKey=\"alerting.contact-points.no-integrations\">No integrations configured</Trans>\n </MetaText>\n )}\n {integrationsShown.map(([type, receivers], index) => {\n const iconName = INTEGRATION_ICONS[type];\n const receiverName = receiverTypeNames[type] ?? upperFirst(type);\n const isLastItem = size(countByType) - 1 === index;\n // Pick the first integration of the grouped receivers, since they should all be the same type\n // e.g. if we have multiple Oncall, they _should_ all have the same plugin metadata,\n // so we can just use the first one for additional display purposes\n const receiver = receivers[0];\n\n return (\n <Fragment key={type}>\n <Stack direction=\"row\" alignItems=\"center\" gap={0.5}>\n {receiver[RECEIVER_PLUGIN_META_KEY]?.icon && (\n <img\n width=\"14px\"\n src={receiver[RECEIVER_PLUGIN_META_KEY]?.icon}\n alt={receiver[RECEIVER_PLUGIN_META_KEY]?.title}\n />\n )}\n {iconName && <Icon name={iconName} />}\n <span>\n {receiverName}\n {receivers.length > 1 && ` (${receivers.length})`}\n </span>\n </Stack>\n {!isLastItem && '⋅'}\n </Fragment>\n );\n })}\n {numberOfIntegrationsNotShown > 0 && <span>{`+${numberOfIntegrationsNotShown} more`}</span>}\n </Stack>\n </Stack>\n );\n};\n\nconst ContactPointReceiverMetadataRow = ({ diagnostics, sendingResolved }: ContactPointReceiverMetadata) => {\n const styles = useStyles2(getStyles);\n\n const failedToSend = Boolean(diagnostics.lastNotifyAttemptError);\n const lastDeliveryAttempt = dateTime(diagnostics.lastNotifyAttempt);\n const lastDeliveryAttemptDuration = diagnostics.lastNotifyAttemptDuration;\n const hasDeliveryAttempt = lastDeliveryAttempt.isValid();\n\n return (\n <div className={styles.metadataRow}>\n <Stack direction=\"row\" gap={1}>\n {/* this is shown when the last delivery failed – we don't show any additional metadata */}\n {failedToSend ? (\n <MetaText color=\"error\" icon=\"exclamation-circle\">\n <Tooltip content={diagnostics.lastNotifyAttemptError!}>\n <span>\n <Trans i18nKey=\"alerting.contact-points.last-delivery-failed\">Last delivery attempt failed</Trans>\n </span>\n </Tooltip>\n </MetaText>\n ) : (\n <>\n {/* this is shown when we have a last delivery attempt */}\n {hasDeliveryAttempt && (\n <>\n <MetaText icon=\"clock-nine\">\n <Trans i18nKey=\"alerting.contact-points.last-delivery-attempt\">Last delivery attempt</Trans>\n <Tooltip content={lastDeliveryAttempt.toLocaleString()}>\n <span>\n <Text color=\"primary\">{lastDeliveryAttempt.locale('en').fromNow()}</Text>\n </span>\n </Tooltip>\n </MetaText>\n <MetaText icon=\"stopwatch\">\n <Trans i18nKey=\"alerting.contact-points.delivery-duration\">\n Last delivery took <PrimaryText content={lastDeliveryAttemptDuration} />\n </Trans>\n </MetaText>\n </>\n )}\n {/* when we have no last delivery attempt */}\n {!hasDeliveryAttempt && (\n <MetaText icon=\"clock-nine\">\n <Trans i18nKey=\"alerting.contact-points.no-delivery-attempts\">No delivery attempts</Trans>\n </MetaText>\n )}\n {/* this is only shown for contact points that only want \"firing\" updates */}\n {!sendingResolved && (\n <MetaText icon=\"info-circle\">\n <Trans i18nKey=\"alerting.contact-points.only-firing\">\n Delivering <Text color=\"primary\">only firing</Text> notifications\n </Trans>\n </MetaText>\n )}\n </>\n )}\n </Stack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n contactPointWrapper: css({\n borderRadius: theme.shape.radius.default,\n border: `solid 1px ${theme.colors.border.weak}`,\n borderBottom: 'none',\n }),\n integrationWrapper: css({\n position: 'relative',\n\n background: `${theme.colors.background.primary}`,\n padding: `${theme.spacing(1)} ${theme.spacing(1.5)}`,\n\n borderBottom: `solid 1px ${theme.colors.border.weak}`,\n }),\n metadataRow: css({\n borderBottomLeftRadius: `${theme.shape.radius.default}`,\n borderBottomRightRadius: `${theme.shape.radius.default}`,\n }),\n noIntegrationsContainer: css({\n paddingTop: `${theme.spacing(1.5)}`,\n paddingLeft: `${theme.spacing(1.5)}`,\n }),\n});\n","import {\n DataFrame,\n DataLinkPostProcessor,\n DataLinkTransformationConfig,\n DataSourceInstanceSettings,\n TimeRange,\n} from '@grafana/data';\n\nexport type CorrelationConfigQuery = {\n field: string;\n target: object; // for queries, this contains anything that would go in the query editor, so any extension off DataQuery a datasource would have, and needs to be generic.\n transformations?: DataLinkTransformationConfig[];\n};\n\nexport type CorrelationConfigExternal = {\n field: string;\n target: {\n url: string; // For external, this simply contains a URL\n };\n transformations?: DataLinkTransformationConfig[];\n};\n\ntype CorrelationBase = {\n uid: string;\n sourceUID: string;\n label?: string;\n description?: string;\n provisioned: boolean;\n orgId?: number;\n};\n\n/**\n * @alpha\n */\nexport type CorrelationExternal = CorrelationBase & {\n type: 'external';\n config: CorrelationConfigExternal;\n};\n\n/**\n * @alpha\n */\nexport type CorrelationQuery = CorrelationBase & {\n type: 'query';\n config: CorrelationConfigQuery;\n targetUID: string;\n};\n\n/**\n * @alpha\n */\nexport type CorrelationData =\n | (Omit<CorrelationExternal, 'sourceUID'> & {\n source: DataSourceInstanceSettings;\n })\n | (Omit<CorrelationQuery, 'sourceUID' | 'targetUID'> & {\n source: DataSourceInstanceSettings;\n target: DataSourceInstanceSettings;\n });\n\n/**\n * @alpha\n */\nexport interface CorrelationsData {\n correlations: CorrelationData[];\n page: number;\n limit: number;\n totalCount: number;\n}\n\n/**\n * Used to work with user defined correlations.\n * Should be accessed via {@link getCorrelationsService} function.\n *\n * @alpha\n */\nexport interface CorrelationsService {\n /**\n * Creates data links in data frames from provided correlations\n *\n * @param dataFrames list of data frames to be processed\n * @param correlations list of of possible correlations that can be applied\n * @param dataFrameRefIdToDataSourceUid a map that for provided refId references corresponding data source ui\n */\n attachCorrelationsToDataFrames: (\n dataFrames: DataFrame[],\n correlations: CorrelationData[],\n dataFrameRefIdToDataSourceUid: Record<string, string>\n ) => DataFrame[];\n\n /**\n * Creates a link post processor function that handles correlation transformations\n *\n * @param timeRange The current time range\n */\n correlationsDataLinkPostProcessorFactory: (timeRange: TimeRange) => DataLinkPostProcessor;\n\n /**\n * Loads all the correlations defined for the given data sources.\n *\n * @param sourceUIDs Data source UIDs\n */\n getCorrelationsBySourceUIDs: (sourceUIDs: string[]) => Promise<CorrelationsData>;\n}\n\nlet singletonInstance: CorrelationsService;\n\n/**\n * Used during startup by Grafana to set the CorrelationsService so it is available\n * via {@link getCorrelationsService} to the rest of the application.\n *\n * @internal\n */\nexport function setCorrelationsService(instance: CorrelationsService) {\n singletonInstance = instance;\n}\n\n/**\n * Used to retrieve the {@link CorrelationsService}.\n *\n * @alpha\n */\nexport function getCorrelationsService(): CorrelationsService {\n return singletonInstance;\n}\n","import * as React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Drawer } from '@grafana/ui';\n\nimport { RuleInspectorTabs } from '../rule-editor/RuleInspector';\n\nimport { ExportFormats, ExportProvider } from './providers';\n\ninterface GrafanaExportDrawerProps {\n activeTab: ExportFormats;\n onTabChange: (tab: ExportFormats) => void;\n children: React.ReactNode;\n onClose: () => void;\n formatProviders: Array<ExportProvider<ExportFormats>>;\n title?: string;\n}\n\nexport function GrafanaExportDrawer({\n activeTab,\n onTabChange,\n children,\n onClose,\n formatProviders,\n title = 'Export',\n}: GrafanaExportDrawerProps) {\n const grafanaRulesTabs = Object.values(formatProviders).map((provider) => ({\n label: provider.name,\n value: provider.exportFormat,\n }));\n const subtitle =\n formatProviders.length > 1\n ? t(\n 'alerting.export.subtitle.formats',\n 'Select the format and download the file or copy the contents to clipboard'\n )\n : t('alerting.export.subtitle.one-format', 'Download the file or copy the contents to clipboard');\n return (\n <Drawer\n title={title}\n subtitle={subtitle}\n tabs={\n <RuleInspectorTabs<ExportFormats> tabs={grafanaRulesTabs} setActiveTab={onTabChange} activeTab={activeTab} />\n }\n onClose={onClose}\n size=\"md\"\n >\n {children}\n </Drawer>\n );\n}\n","import { useMemo } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { Menu } from '@grafana/ui';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport {\n getCopiedPanelPlugin,\n onAddLibraryPanel,\n onCreateNewPanel,\n onCreateNewRow,\n onPasteCopiedPanel,\n} from 'app/features/dashboard/utils/dashboard';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { useDispatch, useSelector } from 'app/types/store';\n\nimport { setInitialDatasource } from '../../state/reducers';\n\nexport interface Props {\n dashboard: DashboardModel;\n}\n\nconst AddPanelMenu = ({ dashboard }: Props) => {\n const copiedPanelPlugin = useMemo(() => getCopiedPanelPlugin(), []);\n const dispatch = useDispatch();\n const initialDatasource = useSelector((state) => state.dashboard.initialDatasource);\n\n return (\n <Menu>\n <Menu.Item\n key=\"add-visualisation\"\n testId={selectors.pages.AddDashboard.itemButton('Add new visualization menu item')}\n label={t('dashboard.add-menu.visualization', 'Visualization')}\n onClick={() => {\n const id = onCreateNewPanel(dashboard, initialDatasource);\n DashboardInteractions.toolbarAddButtonClicked({ item: 'add_visualization' });\n locationService.partial({ editPanel: id });\n dispatch(setInitialDatasource(undefined));\n }}\n />\n <Menu.Item\n key=\"add-row\"\n testId={selectors.pages.AddDashboard.itemButton('Add new row menu item')}\n label={t('dashboard.add-menu.row', 'Row')}\n onClick={() => {\n DashboardInteractions.toolbarAddButtonClicked({ item: 'add_row' });\n onCreateNewRow(dashboard);\n }}\n />\n <Menu.Item\n key=\"add-panel-lib\"\n testId={selectors.pages.AddDashboard.itemButton('Add new panel from panel library menu item')}\n label={t('dashboard.add-menu.import', 'Import from library')}\n onClick={() => {\n DashboardInteractions.toolbarAddButtonClicked({ item: 'import_from_library' });\n onAddLibraryPanel(dashboard);\n }}\n />\n <Menu.Item\n key=\"add-panel-clipboard\"\n testId={selectors.pages.AddDashboard.itemButton('Add new panel from clipboard menu item')}\n label={t('dashboard.add-menu.paste-panel', 'Paste panel')}\n onClick={() => {\n DashboardInteractions.toolbarAddButtonClicked({ item: 'paste_panel' });\n onPasteCopiedPanel(dashboard, copiedPanelPlugin);\n }}\n disabled={!copiedPanelPlugin}\n />\n </Menu>\n );\n};\n\nexport default AddPanelMenu;\n","import { useState, useEffect } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { Dropdown, Button, Icon } from '@grafana/ui';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\n\nimport AddPanelMenu from './AddPanelMenu';\n\nexport interface Props {\n dashboard: DashboardModel;\n onToolbarAddMenuOpen?: () => void;\n}\n\nconst AddPanelButton = ({ dashboard, onToolbarAddMenuOpen }: Props) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n useEffect(() => {\n if (isMenuOpen && onToolbarAddMenuOpen) {\n onToolbarAddMenuOpen();\n }\n }, [isMenuOpen, onToolbarAddMenuOpen]);\n\n return (\n <Dropdown\n overlay={() => <AddPanelMenu dashboard={dashboard} />}\n placement=\"bottom\"\n offset={[0, 6]}\n onVisibleChange={setIsMenuOpen}\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n fill=\"outline\"\n data-testid={selectors.components.PageToolbar.itemButton('Add button')}\n >\n <Trans i18nKey=\"dashboard.toolbar.add\">Add</Trans>\n <Icon name={isMenuOpen ? 'angle-up' : 'angle-down'} size=\"lg\" />\n </Button>\n </Dropdown>\n );\n};\n\nexport default AddPanelButton;\n","import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';\nimport { Trans } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { Button } from '@grafana/ui';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nimport { shareDashboardType } from '../ShareModal/utils';\n\nexport const ShareButton = ({ dashboard }: { dashboard: DashboardModel }) => {\n return (\n <Button\n data-testid={e2eSelectors.pages.Dashboard.DashNav.shareButton}\n variant=\"primary\"\n size=\"sm\"\n onClick={() => {\n DashboardInteractions.toolbarShareClick();\n locationService.partial({ shareView: shareDashboardType.link });\n }}\n >\n <Trans i18nKey=\"dashboard.toolbar.share-button\">Share</Trans>\n </Button>\n );\n};\n","import { css } from '@emotion/css';\nimport { memo, ReactNode } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { useLocation } from 'react-router-dom-v5-compat';\n\nimport { textUtil } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport {\n ButtonGroup,\n ModalsController,\n ToolbarButton,\n useForceUpdate,\n ToolbarButtonRow,\n ConfirmModal,\n} from '@grafana/ui';\nimport { updateNavIndex } from 'app/core/actions';\nimport { AppChromeUpdate } from 'app/core/components/AppChrome/AppChromeUpdate';\nimport { NavToolbarSeparator } from 'app/core/components/AppChrome/NavToolbar/NavToolbarSeparator';\nimport config from 'app/core/config';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { appEvents } from 'app/core/core';\nimport { useBusEvent } from 'app/core/hooks/useBusEvent';\nimport { ID_PREFIX, setStarred } from 'app/core/reducers/navBarTree';\nimport { removeNavIndex } from 'app/core/reducers/navModel';\nimport AddPanelButton from 'app/features/dashboard/components/AddPanelButton/AddPanelButton';\nimport { SaveDashboardDrawer } from 'app/features/dashboard/components/SaveDashboard/SaveDashboardDrawer';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PublicDashboardBadgeLegacy } from 'app/features/dashboard-scene/scene/new-toolbar/actions/PublicDashboardBadge';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { playlistSrv } from 'app/features/playlist/PlaylistSrv';\nimport { updateTimeZoneForSession } from 'app/features/profile/state/reducers';\nimport { KioskMode } from 'app/types/dashboard';\nimport { DashboardMetaChangedEvent, ShowModalReactEvent } from 'app/types/events';\nimport { StoreState } from 'app/types/store';\n\nimport {\n DynamicDashNavButtonModel,\n dynamicDashNavActions,\n registerDynamicDashNavAction,\n} from '../../../dashboard-scene/utils/registerDynamicDashNavAction';\n\nimport { DashNavButton } from './DashNavButton';\nimport { DashNavTimeControls } from './DashNavTimeControls';\nimport { ShareButton } from './ShareButton';\n\nconst mapDispatchToProps = {\n removeNavIndex,\n setStarred,\n updateTimeZoneForSession,\n updateNavIndex,\n};\n\nconst mapStateToProps = (state: StoreState) => ({\n navIndex: state.navIndex,\n});\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport interface OwnProps {\n dashboard: DashboardModel;\n isFullscreen: boolean;\n kioskMode?: KioskMode | null;\n hideTimePicker: boolean;\n folderTitle?: string;\n title: string;\n}\n\nexport function addCustomLeftAction(content: DynamicDashNavButtonModel) {\n registerDynamicDashNavAction('left', content);\n}\n\nexport function addCustomRightAction(content: DynamicDashNavButtonModel) {\n registerDynamicDashNavAction('right', content);\n}\n\ntype Props = OwnProps & ConnectedProps<typeof connector>;\n\nexport const DashNav = memo<Props>((props) => {\n // this ensures the component rerenders when the location changes\n useLocation();\n const forceUpdate = useForceUpdate();\n\n // We don't really care about the event payload here only that it triggeres a re-render of this component\n useBusEvent(props.dashboard.events, DashboardMetaChangedEvent);\n\n const originalUrl = props.dashboard.snapshot?.originalUrl ?? '';\n const gotoSnapshotOrigin = () => {\n window.location.href = textUtil.sanitizeUrl(props.dashboard.snapshot.originalUrl);\n };\n\n const notifyApp = useAppNotification();\n\n const onOpenSnapshotOriginal = () => {\n try {\n const sanitizedUrl = new URL(textUtil.sanitizeUrl(originalUrl), config.appUrl);\n const appUrl = new URL(config.appUrl);\n if (sanitizedUrl.host !== appUrl.host) {\n appEvents.publish(\n new ShowModalReactEvent({\n component: ConfirmModal,\n props: {\n title: t(\n 'dashboard.dash-nav.on-open-snapshot-original.title.proceed-to-external-site',\n 'Proceed to external site?'\n ),\n modalClass: modalStyles,\n body: (\n <>\n <p>\n {`This link connects to an external website at`} <code>{originalUrl}</code>\n </p>\n <p>{\"Are you sure you'd like to proceed?\"}</p>\n </>\n ),\n confirmVariant: 'primary',\n confirmText: t('dashboard.dash-nav.on-open-snapshot-original.confirmText.proceed', 'Proceed'),\n onConfirm: gotoSnapshotOrigin,\n },\n })\n );\n } else {\n gotoSnapshotOrigin();\n }\n } catch (err) {\n notifyApp.error('Invalid URL', err instanceof Error ? err.message : undefined);\n }\n };\n\n const onStarDashboard = () => {\n DashboardInteractions.toolbarFavoritesClick();\n const dashboardSrv = getDashboardSrv();\n const { dashboard, navIndex, removeNavIndex, setStarred, updateNavIndex } = props;\n\n dashboardSrv.starDashboard(dashboard.uid, Boolean(dashboard.meta.isStarred)).then((newState) => {\n setStarred({ id: dashboard.uid, title: dashboard.title, url: dashboard.meta.url ?? '', isStarred: newState });\n const starredNavItem = navIndex['starred'];\n if (newState) {\n starredNavItem.children?.push({\n id: ID_PREFIX + dashboard.uid,\n text: dashboard.title,\n url: dashboard.meta.url ?? '',\n parentItem: starredNavItem,\n });\n } else {\n removeNavIndex(ID_PREFIX + dashboard.uid);\n const indexToRemove = starredNavItem.children?.findIndex((element) => element.id === ID_PREFIX + dashboard.uid);\n if (indexToRemove) {\n starredNavItem.children?.splice(indexToRemove, 1);\n }\n }\n updateNavIndex(starredNavItem);\n dashboard.meta.isStarred = newState;\n forceUpdate();\n });\n };\n\n const onOpenSettings = () => {\n DashboardInteractions.toolbarSettingsClick();\n locationService.partial({ editview: 'settings' });\n };\n\n const onPlaylistPrev = () => {\n playlistSrv.prev();\n };\n\n const onPlaylistNext = () => {\n playlistSrv.next();\n };\n\n const onPlaylistStop = () => {\n playlistSrv.stop();\n forceUpdate();\n };\n\n const addCustomContent = (actions: DynamicDashNavButtonModel[], buttons: ReactNode[]) => {\n actions.map((action, index) => {\n const Component = action.component;\n const element = <Component {...props} key={`button-custom-${index}`} />;\n typeof action.index === 'number' ? buttons.splice(action.index, 0, element) : buttons.push(element);\n });\n };\n\n const isPlaylistRunning = () => {\n return playlistSrv.state.isPlaying;\n };\n\n const renderLeftActions = () => {\n const isDevEnv = config.buildInfo.env === 'development';\n\n const { dashboard, kioskMode } = props;\n const { canStar, isStarred } = dashboard.meta;\n const buttons: ReactNode[] = [];\n\n if (kioskMode || isPlaylistRunning()) {\n return [];\n }\n\n if (canStar) {\n let desc = isStarred\n ? t('dashboard.toolbar.unmark-favorite', 'Unmark as favorite')\n : t('dashboard.toolbar.mark-favorite', 'Mark as favorite');\n buttons.push(\n <DashNavButton\n tooltip={desc}\n icon={isStarred ? 'favorite' : 'star'}\n iconType={isStarred ? 'mono' : 'default'}\n iconSize=\"lg\"\n onClick={onStarDashboard}\n key=\"button-star\"\n />\n );\n }\n\n if (dashboard.uid) {\n buttons.push(<PublicDashboardBadgeLegacy key=\"public-dashboard-badge\" uid={dashboard.uid} />);\n }\n\n if (isDevEnv && config.featureToggles.dashboardScene) {\n buttons.push(\n <DashNavButton\n key=\"button-scenes\"\n tooltip={t('dashboard.dash-nav.render-left-actions.tooltip-view-as-scene', 'View as Scene')}\n icon=\"apps\"\n onClick={() => {\n locationService.partial({ scenes: true });\n }}\n />\n );\n }\n\n addCustomContent(dynamicDashNavActions.left, buttons);\n return buttons;\n };\n\n const renderPlaylistControls = () => {\n return (\n <ButtonGroup key=\"playlist-buttons\">\n <ToolbarButton\n tooltip={t('dashboard.toolbar.playlist-previous', 'Go to previous dashboard')}\n icon=\"backward\"\n onClick={onPlaylistPrev}\n narrow\n />\n <ToolbarButton onClick={onPlaylistStop}>\n <Trans i18nKey=\"dashboard.toolbar.playlist-stop\">Stop playlist</Trans>\n </ToolbarButton>\n <ToolbarButton\n tooltip={t('dashboard.toolbar.playlist-next', 'Go to next dashboard')}\n icon=\"forward\"\n onClick={onPlaylistNext}\n narrow\n />\n </ButtonGroup>\n );\n };\n\n const renderTimeControls = () => {\n const { dashboard, updateTimeZoneForSession, hideTimePicker } = props;\n\n if (hideTimePicker) {\n return null;\n }\n return (\n <DashNavTimeControls dashboard={dashboard} onChangeTimeZone={updateTimeZoneForSession} key=\"time-controls\" />\n );\n };\n\n const renderRightActions = () => {\n const { dashboard, isFullscreen, hideTimePicker } = props;\n const { canSave, canEdit, showSettings, canShare } = dashboard.meta;\n const { snapshot } = dashboard;\n const snapshotUrl = snapshot && snapshot.originalUrl;\n const buttons: ReactNode[] = [];\n\n if (isPlaylistRunning()) {\n return [renderPlaylistControls(), renderTimeControls()];\n }\n\n if (snapshotUrl) {\n buttons.push(\n <ToolbarButton\n tooltip={t('dashboard.toolbar.open-original', 'Open original dashboard')}\n onClick={onOpenSnapshotOriginal}\n icon=\"link\"\n key=\"button-snapshot\"\n />\n );\n }\n\n if (canSave && !isFullscreen) {\n buttons.push(\n <ModalsController key=\"button-save\">\n {({ showModal, hideModal }) => (\n <ToolbarButton\n tooltip={t('dashboard.toolbar.save', 'Save dashboard')}\n icon=\"save\"\n onClick={() => {\n showModal(SaveDashboardDrawer, {\n dashboard,\n onDismiss: hideModal,\n });\n }}\n />\n )}\n </ModalsController>\n );\n }\n\n addCustomContent(dynamicDashNavActions.right, buttons);\n\n if (showSettings) {\n buttons.push(\n <ToolbarButton\n tooltip={t('dashboard.toolbar.settings', 'Dashboard settings')}\n icon=\"cog\"\n onClick={onOpenSettings}\n key=\"button-settings\"\n />\n );\n }\n\n if (canEdit && !isFullscreen) {\n buttons.push(\n <AddPanelButton\n onToolbarAddMenuOpen={DashboardInteractions.toolbarAddClick}\n dashboard={dashboard}\n key=\"panel-add-dropdown\"\n />\n );\n }\n\n if (canShare) {\n buttons.push(<ShareButton key=\"button-share\" dashboard={dashboard} />);\n }\n\n // if the timepicker is hidden, we don't need to add this separator\n if (!hideTimePicker) {\n buttons.push(<NavToolbarSeparator key=\"toolbar-separator\" />);\n }\n\n buttons.push(renderTimeControls());\n\n return buttons;\n };\n\n return (\n <AppChromeUpdate\n actions={\n <>\n {renderLeftActions()}\n <NavToolbarSeparator leftActionsSeparator />\n <ToolbarButtonRow alignment=\"right\">{renderRightActions()}</ToolbarButtonRow>\n </>\n }\n />\n );\n});\n\nDashNav.displayName = 'DashNav';\n\nexport default connector(DashNav);\n\nconst modalStyles = css({\n width: 'max-content',\n maxWidth: '80vw',\n});\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { AdHocVariableFilter, AdHocVariableModel } from '@grafana/data';\nimport { initialVariableModelState } from 'app/features/variables/types';\n\nimport { getInstanceState } from '../state/selectors';\nimport { initialVariablesState, VariablePayload, VariablesState } from '../state/types';\n\nexport interface AdHocVariabelFilterUpdate {\n index: number;\n filter: AdHocVariableFilter;\n}\n\nexport const initialAdHocVariableModelState: AdHocVariableModel = {\n ...initialVariableModelState,\n type: 'adhoc',\n datasource: null,\n filters: [],\n};\n\nexport const adHocVariableSlice = createSlice({\n name: 'templating/adhoc',\n initialState: initialVariablesState,\n reducers: {\n filterAdded: (state: VariablesState, action: PayloadAction<VariablePayload<AdHocVariableFilter>>) => {\n const instanceState = getInstanceState(state, action.payload.id);\n if (instanceState.type !== 'adhoc') {\n return;\n }\n\n instanceState.filters.push(action.payload.data);\n },\n filterRemoved: (state: VariablesState, action: PayloadAction<VariablePayload<number>>) => {\n const instanceState = getInstanceState(state, action.payload.id);\n if (instanceState.type !== 'adhoc') {\n return;\n }\n\n const index = action.payload.data;\n instanceState.filters.splice(index, 1);\n },\n filterUpdated: (state: VariablesState, action: PayloadAction<VariablePayload<AdHocVariabelFilterUpdate>>) => {\n const instanceState = getInstanceState(state, action.payload.id);\n if (instanceState.type !== 'adhoc') {\n return;\n }\n\n const { filter, index } = action.payload.data;\n instanceState.filters[index] = filter;\n },\n filtersRestored: (state: VariablesState, action: PayloadAction<VariablePayload<AdHocVariableFilter[]>>) => {\n const instanceState = getInstanceState(state, action.payload.id);\n if (instanceState.type !== 'adhoc') {\n return;\n }\n\n instanceState.filters = action.payload.data;\n },\n },\n});\n\nexport const { filterAdded, filterRemoved, filterUpdated, filtersRestored } = adHocVariableSlice.actions;\nexport const adHocVariableReducer = adHocVariableSlice.reducer;\n","import { attachDebugger, createLogger } from '@grafana/ui';\n\nexport function loadScript(url: string, async = false) {\n return new Promise((resolve) => {\n const script = document.createElement('script');\n script.onload = resolve;\n script.src = url;\n script.async = async;\n document.head.appendChild(script);\n });\n}\n\n/** @internal */\nexport const echoLogger = createLogger('EchoSrv');\nexport const echoLog = echoLogger.logger;\n\nattachDebugger('echo', undefined, echoLogger);\n","import { map } from 'rxjs/operators';\n\nimport { guessFieldTypeForField } from '../../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\nimport { ReducerID, reduceField } from '../fieldReducer';\n\nimport { GroupByFieldOptions, createGroupedFields, groupValuesByKey } from './groupBy';\nimport { DataTransformerID } from './ids';\nimport { findMaxFields } from './utils';\n\nexport const SHOW_NESTED_HEADERS_DEFAULT = true;\nconst MINIMUM_FIELDS_REQUIRED = 2;\n\nenum GroupByOperationID {\n aggregate = 'aggregate',\n groupBy = 'groupby',\n}\n\nexport interface GroupToNestedTableTransformerOptions {\n showSubframeHeaders?: boolean;\n fields: Record<string, GroupByFieldOptions>;\n}\n\ninterface FieldMap {\n [key: string]: Field;\n}\n\nexport const groupToNestedTable: DataTransformerInfo<GroupToNestedTableTransformerOptions> = {\n id: DataTransformerID.groupToNestedTable,\n name: 'Group to nested tables',\n description: 'Group data by a field value and create nested tables with the grouped data',\n defaultOptions: {\n showSubframeHeaders: SHOW_NESTED_HEADERS_DEFAULT,\n fields: {},\n },\n isApplicable: (data) => {\n // Group to nested table needs at least two fields\n // a field to group on and to show in the nested table\n const maxFields = findMaxFields(data);\n\n return maxFields >= MINIMUM_FIELDS_REQUIRED\n ? TransformationApplicabilityLevels.Applicable\n : TransformationApplicabilityLevels.NotApplicable;\n },\n isApplicableDescription: (data: DataFrame[]) => {\n const maxFields = findMaxFields(data);\n return `The Group to nested table transformation requires a series with at least ${MINIMUM_FIELDS_REQUIRED} fields to work. The maximum number of fields found on a series is ${maxFields}`;\n },\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n const hasValidConfig = Object.keys(options.fields).find(\n (name) => options.fields[name].operation === GroupByOperationID.groupBy\n );\n if (!hasValidConfig) {\n return data;\n }\n\n const processed: DataFrame[] = [];\n\n for (const frame of data) {\n // Create a list of fields to group on\n // If there are none we skip the rest\n const groupByFields: Field[] = frame.fields.filter((field) => shouldGroupOnField(field, options));\n if (groupByFields.length === 0) {\n continue;\n }\n\n // Group the values by fields and groups so we can get all values for a\n // group for a given field.\n const valuesByGroupKey = groupValuesByKey(frame, groupByFields);\n\n // Add the grouped fields to the resulting fields of the transformation\n const fields: Field[] = createGroupedFields(groupByFields, valuesByGroupKey);\n\n // Group data into sub frames so they will display as tables\n const subFrames: DataFrame[][] = groupToSubframes(valuesByGroupKey, options);\n\n // Then for each calculations configured, compute and add a new field (column)\n for (let i = 0; i < frame.fields.length; i++) {\n const field = frame.fields[i];\n\n if (!shouldCalculateField(field, options)) {\n continue;\n }\n\n const fieldName = getFieldDisplayName(field);\n const aggregations = options.fields[fieldName].aggregations;\n const valuesByAggregation: Record<string, unknown[]> = {};\n\n valuesByGroupKey.forEach((value) => {\n const fieldWithValuesForGroup = value[fieldName];\n const results = reduceField({\n field: fieldWithValuesForGroup,\n reducers: aggregations,\n });\n\n for (const aggregation of aggregations) {\n if (!Array.isArray(valuesByAggregation[aggregation])) {\n valuesByAggregation[aggregation] = [];\n }\n valuesByAggregation[aggregation].push(results[aggregation]);\n }\n });\n\n for (const aggregation of aggregations) {\n const aggregationField: Field = {\n name: `${fieldName} (${aggregation})`,\n values: valuesByAggregation[aggregation],\n type: FieldType.other,\n config: {},\n };\n\n aggregationField.type = detectFieldType(aggregation, field, aggregationField);\n fields.push(aggregationField);\n }\n }\n\n fields.push({\n config: {},\n name: '__nestedFrames',\n type: FieldType.nestedFrames,\n values: subFrames,\n });\n\n processed.push({\n fields,\n length: valuesByGroupKey.size,\n });\n }\n\n return processed;\n })\n ),\n};\n\n/**\n * Given the appropriate data, create a sub-frame\n * which can then be displayed in a sub-table.\n */\nfunction createSubframe(fields: Field[], frameLength: number, options: GroupToNestedTableTransformerOptions) {\n const showHeaders =\n options.showSubframeHeaders === undefined ? SHOW_NESTED_HEADERS_DEFAULT : options.showSubframeHeaders;\n\n return {\n meta: { custom: { noHeader: !showHeaders } },\n length: frameLength,\n fields,\n };\n}\n\n/**\n * Determines whether a field should be grouped on.\n *\n * @returns boolean\n * This will return _true_ if a field should be grouped on and _false_ if it should not.\n */\nconst shouldGroupOnField = (field: Field, options: GroupToNestedTableTransformerOptions): boolean => {\n const fieldName = getFieldDisplayName(field);\n return options?.fields[fieldName]?.operation === GroupByOperationID.groupBy;\n};\n\n/**\n * Determines whether field aggregations should be calculated\n * @returns boolean\n * This will return _true_ if a field should be calculated and _false_ if it should not.\n */\nconst shouldCalculateField = (field: Field, options: GroupToNestedTableTransformerOptions): boolean => {\n const fieldName = getFieldDisplayName(field);\n return (\n options?.fields[fieldName]?.operation === GroupByOperationID.aggregate &&\n Array.isArray(options?.fields[fieldName].aggregations) &&\n options?.fields[fieldName].aggregations.length > 0\n );\n};\n\n/**\n * Detect the type of field given the relevant aggregation.\n */\nconst detectFieldType = (aggregation: string, sourceField: Field, targetField: Field): FieldType => {\n switch (aggregation) {\n case ReducerID.allIsNull:\n return FieldType.boolean;\n case ReducerID.last:\n case ReducerID.lastNotNull:\n case ReducerID.first:\n case ReducerID.firstNotNull:\n return sourceField.type;\n default:\n return guessFieldTypeForField(targetField) ?? FieldType.string;\n }\n};\n\n/**\n * Group values into subframes so that they'll be displayed\n * inside of a subtable.\n *\n * @param valuesByGroupKey\n * A mapping of group keys to their respective grouped values.\n * @param options\n * Transformation options, which are used to find ungrouped/unaggregated fields.\n * @returns\n */\nfunction groupToSubframes(\n valuesByGroupKey: Map<string, FieldMap>,\n options: GroupToNestedTableTransformerOptions\n): DataFrame[][] {\n const subFrames: DataFrame[][] = [];\n\n // Construct a subframe of any fields\n // that aren't being group on or reduced\n for (const [, value] of valuesByGroupKey) {\n const nestedFields: Field[] = [];\n\n for (const [fieldName, field] of Object.entries(value)) {\n const fieldOpts = options.fields[fieldName];\n\n if (fieldOpts === undefined) {\n nestedFields.push(field);\n }\n // Depending on the configuration form state all of the following are possible\n else if (\n fieldOpts.aggregations === undefined ||\n (fieldOpts.operation === GroupByOperationID.aggregate && fieldOpts.aggregations.length === 0) ||\n fieldOpts.operation === null ||\n fieldOpts.operation === undefined\n ) {\n nestedFields.push(field);\n }\n }\n\n // If there are any values in the subfields\n // push a new subframe with the fields\n // otherwise push an empty frame\n if (nestedFields.length > 0) {\n subFrames.push([createSubframe(nestedFields, nestedFields[0].values.length, options)]);\n } else {\n subFrames.push([createSubframe([], 0, options)]);\n }\n }\n\n return subFrames;\n}\n","import { SelectableValue, toOption } from '@grafana/data';\n\nimport {\n QueryEditorExpressionType,\n QueryEditorFunctionExpression,\n QueryEditorFunctionParameterExpression,\n QueryEditorGroupByExpression,\n QueryEditorPropertyExpression,\n QueryEditorPropertyType,\n} from '../expressions';\nimport { SQLExpression } from '../types';\n\nexport function createSelectClause(sqlColumns: NonNullable<SQLExpression['columns']>): string {\n const columns = sqlColumns.map((c) => {\n let rawColumn = '';\n if (c.name && c.alias) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)}) AS ${c.alias}`;\n } else if (c.name) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)})`;\n } else if (c.alias) {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)} AS ${c.alias}`;\n } else {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)}`;\n }\n return rawColumn;\n });\n return `SELECT ${columns.join(', ')} `;\n}\n\nexport const haveColumns = (columns: SQLExpression['columns']): columns is NonNullable<SQLExpression['columns']> => {\n if (!columns) {\n return false;\n }\n\n const haveColumn = columns.some((c) => c.parameters?.length || c.parameters?.some((p) => p.name));\n const haveFunction = columns.some((c) => c.name);\n return haveColumn || haveFunction;\n};\n\n/**\n * Creates a GroupByExpression for a specified field\n */\nexport function setGroupByField(field?: string): QueryEditorGroupByExpression {\n return {\n type: QueryEditorExpressionType.GroupBy,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\n/**\n * Creates a PropertyExpression for a specified field\n */\nexport function setPropertyField(field?: string): QueryEditorPropertyExpression {\n return {\n type: QueryEditorExpressionType.Property,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\nexport function createFunctionField(functionName?: string): QueryEditorFunctionExpression {\n return {\n type: QueryEditorExpressionType.Function,\n name: functionName,\n parameters: [],\n };\n}\n\n/**\n * Retrieves the column value from a QueryEditorFunctionParameterExpression object.\n *\n * @param column - The QueryEditorFunctionParameterExpression object representing the column.\n * @returns The column value as a SelectableValue<string> or null if the column is undefined or null.\n */\nexport function getColumnValue(\n column?: QueryEditorFunctionParameterExpression | QueryEditorFunctionExpression\n): SelectableValue<string> | null {\n if (column?.name) {\n return toOption(column.name);\n }\n return null;\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options {\n /**\n * empty/missing will default to grafana blog\n */\n feedUrl?: string;\n showImage?: boolean;\n}\n\nexport const defaultOptions: Partial<Options> = {\n showImage: true,\n};\n","import { css } from '@emotion/css';\nimport { useId } from '@react-aria/utils';\nimport { FormEvent, PropsWithChildren, ReactElement } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Field, TextArea, useStyles2 } from '@grafana/ui';\n\ninterface VariableTextAreaFieldProps {\n name: string;\n value?: string;\n defaultValue?: string;\n placeholder: string;\n onChange?: (event: FormEvent<HTMLTextAreaElement>) => void;\n width: number;\n ariaLabel?: string;\n required?: boolean;\n testId?: string;\n onBlur?: (event: FormEvent<HTMLTextAreaElement>) => void;\n description?: React.ReactNode;\n}\n\nexport function VariableTextAreaField({\n value,\n defaultValue,\n name,\n description,\n placeholder,\n onChange,\n onBlur,\n ariaLabel,\n required,\n width,\n testId,\n}: PropsWithChildren<VariableTextAreaFieldProps>): ReactElement {\n const styles = useStyles2(getStyles);\n const id = useId();\n\n return (\n <Field label={name} description={description} htmlFor={id}>\n <TextArea\n id={id}\n rows={2}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n onBlur={onBlur}\n placeholder={placeholder}\n required={required}\n aria-label={ariaLabel}\n cols={width}\n className={styles.textarea}\n data-testid={testId}\n />\n </Field>\n );\n}\n\nexport function getStyles(theme: GrafanaTheme2) {\n return {\n textarea: css({\n whiteSpace: 'pre-wrap',\n minHeight: theme.spacing(4),\n height: 'auto',\n overflow: 'auto',\n padding: `${theme.spacing(0.75)} ${theme.spacing(1)}`,\n width: 'inherit',\n\n [theme.breakpoints.down('sm')]: {\n width: '100%',\n },\n }),\n };\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport function MenuDivider() {\n const styles = useStyles2(getStyles);\n return <div className={styles.divider} />;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n divider: css({\n height: 1,\n backgroundColor: theme.colors.border.weak,\n margin: theme.spacing(0.5, 0),\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { useId } from 'react';\nimport Highlighter from 'react-highlight-words';\n\nimport {\n DynamicConfigValue,\n FieldConfigOptionsRegistry,\n FieldConfigProperty,\n FieldOverrideContext,\n GrafanaTheme2,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Counter, Field, Stack, IconButton, Label, useStyles2 } from '@grafana/ui';\n\nimport { OptionsPaneCategory } from './OptionsPaneCategory';\n\ninterface DynamicConfigValueEditorProps {\n property: DynamicConfigValue;\n registry: FieldConfigOptionsRegistry;\n onChange: (value: DynamicConfigValue) => void;\n context: FieldOverrideContext;\n onRemove: () => void;\n isSystemOverride?: boolean;\n searchQuery: string;\n}\n\nexport const DynamicConfigValueEditor = ({\n property,\n context,\n registry,\n onChange,\n onRemove,\n isSystemOverride,\n searchQuery,\n}: DynamicConfigValueEditorProps) => {\n const styles = useStyles2(getStyles);\n\n const item = registry?.getIfExists(property.id);\n\n const componentId = useId();\n\n if (!item) {\n return null;\n }\n\n const isCollapsible =\n Array.isArray(property.value) ||\n property.id === FieldConfigProperty.Thresholds ||\n property.id === FieldConfigProperty.Links ||\n property.id === FieldConfigProperty.Mappings;\n\n const labelCategory = item.category?.filter((c) => c !== item.name);\n let editor;\n\n /* eslint-disable react/display-name */\n const renderLabel =\n (includeDescription = true, includeCounter = false) =>\n (isExpanded = false) => (\n <Stack justifyContent=\"space-between\">\n <Label\n category={labelCategory}\n description={includeDescription ? item.description : undefined}\n htmlFor={componentId}\n >\n <Highlighter\n textToHighlight={item.name}\n searchWords={[searchQuery]}\n highlightClassName={'search-fragment-highlight'}\n />\n {!isExpanded && includeCounter && item.getItemsCount && (\n <Counter value={item.getItemsCount(property.value)} />\n )}\n </Label>\n {!isSystemOverride && (\n <div>\n <IconButton\n name=\"times\"\n onClick={onRemove}\n tooltip={t(\n 'dashboard.dynamic-config-value-editor.render-label.tooltip-remove-property',\n 'Remove property'\n )}\n />\n </div>\n )}\n </Stack>\n );\n /* eslint-enable react/display-name */\n\n if (isCollapsible) {\n editor = (\n <OptionsPaneCategory\n id={item.name}\n renderTitle={renderLabel(false, true)}\n className={css({\n paddingLeft: 0,\n paddingRight: 0,\n })}\n isNested\n isOpenDefault={property.value !== undefined}\n >\n <item.override\n value={property.value}\n onChange={(value) => {\n onChange(value);\n }}\n item={item}\n context={context}\n />\n </OptionsPaneCategory>\n );\n } else {\n editor = (\n <div>\n <Field label={renderLabel()()} description={item.description}>\n <item.override\n value={property.value}\n onChange={(value) => {\n onChange(value);\n }}\n item={item}\n context={context}\n id={componentId}\n />\n </Field>\n </div>\n );\n }\n\n return (\n <div\n className={cx(\n isCollapsible && styles.collapsibleOverrideEditor,\n !isCollapsible && 'dynamicConfigValueEditor--nonCollapsible'\n )}\n >\n {editor}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n collapsibleOverrideEditor: css({\n label: 'collapsibleOverrideEditor',\n '& + .dynamicConfigValueEditor--nonCollapsible': {\n marginTop: theme.spacing(1),\n },\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { FieldConfigOptionsRegistry, GrafanaTheme2, ConfigOverrideRule } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Button, Stack, Icon, useStyles2 } from '@grafana/ui';\nimport { FieldMatcherUIRegistryItem } from '@grafana/ui/internal';\n\ninterface Props {\n isExpanded: boolean;\n registry: FieldConfigOptionsRegistry;\n matcherUi: FieldMatcherUIRegistryItem<ConfigOverrideRule>;\n override: ConfigOverrideRule;\n overrideName: string;\n onOverrideRemove: () => void;\n}\nexport const OverrideCategoryTitle = ({\n isExpanded,\n registry,\n matcherUi,\n overrideName,\n override,\n onOverrideRemove,\n}: Props) => {\n const styles = useStyles2(getStyles);\n\n const properties = override.properties.map((p) => registry.getIfExists(p.id)).filter((prop) => !!prop);\n const propertyNames = properties.map((p) => p?.name).join(', ');\n const matcherOptions = matcherUi.optionsToLabel(override.matcher.options);\n\n return (\n <div>\n <Stack justifyContent=\"space-between\">\n <div>{overrideName}</div>\n <Button\n variant=\"secondary\"\n fill=\"text\"\n icon=\"trash-alt\"\n onClick={onOverrideRemove}\n tooltip={t('dashboard.override-category-title.tooltip-remove-override', 'Remove override')}\n aria-label={t('dashboard.override-category-title.aria-label-remove-override', 'Remove override')}\n />\n </Stack>\n {!isExpanded && (\n <div className={styles.overrideDetails}>\n <div className={styles.options} title={matcherOptions}>\n {matcherOptions} <Icon name=\"angle-right\" /> {propertyNames}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nOverrideCategoryTitle.displayName = 'OverrideTitle';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n matcherUi: css({\n padding: theme.spacing(1),\n }),\n propertyPickerWrapper: css({\n marginTop: theme.spacing(2),\n }),\n overrideDetails: css({\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.secondary,\n fontWeight: theme.typography.fontWeightRegular,\n }),\n options: css({\n overflow: 'hidden',\n paddingRight: theme.spacing(4),\n }),\n unknownLabel: css({\n marginBottom: 0,\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { cloneDeep } from 'lodash';\nimport * as React from 'react';\n\nimport {\n FieldConfigOptionsRegistry,\n SelectableValue,\n isSystemOverride as isSystemOverrideGuard,\n VariableSuggestionsScope,\n DynamicConfigValue,\n ConfigOverrideRule,\n GrafanaTheme2,\n fieldMatchers,\n FieldConfigSource,\n DataFrame,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { fieldMatchersUI, useStyles2, ValuePicker } from '@grafana/ui';\nimport { getDataLinksVariableSuggestions } from 'app/features/panel/panellinks/link_srv';\n\nimport { DynamicConfigValueEditor } from './DynamicConfigValueEditor';\nimport { OptionsPaneCategoryDescriptor } from './OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from './OptionsPaneItemDescriptor';\nimport { OverrideCategoryTitle } from './OverrideCategoryTitle';\n\n// [FIXME] Is there something else we need to do in here?\n\nexport function getFieldOverrideCategories(\n fieldConfig: FieldConfigSource,\n registry: FieldConfigOptionsRegistry,\n data: DataFrame[],\n searchQuery: string,\n onFieldConfigsChange: (config: FieldConfigSource) => void\n): OptionsPaneCategoryDescriptor[] {\n const categories: OptionsPaneCategoryDescriptor[] = [];\n const currentFieldConfig = fieldConfig;\n\n if (!registry || registry.isEmpty()) {\n return [];\n }\n\n const onOverrideChange = (index: number, override: ConfigOverrideRule) => {\n let overrides = cloneDeep(currentFieldConfig.overrides);\n overrides[index] = override;\n onFieldConfigsChange({ ...currentFieldConfig, overrides });\n };\n\n const onOverrideRemove = (overrideIndex: number) => {\n let overrides = cloneDeep(currentFieldConfig.overrides);\n overrides.splice(overrideIndex, 1);\n onFieldConfigsChange({ ...currentFieldConfig, overrides });\n };\n\n const onOverrideAdd = (value: SelectableValue<string>) => {\n const info = fieldMatchers.get(value.value!);\n if (!info) {\n return;\n }\n\n onFieldConfigsChange({\n ...currentFieldConfig,\n overrides: [\n ...currentFieldConfig.overrides,\n { matcher: { id: info.id, options: info.defaultOptions }, properties: [] },\n ],\n });\n };\n\n const context = {\n data,\n getSuggestions: (scope?: VariableSuggestionsScope) => getDataLinksVariableSuggestions(data, scope),\n isOverride: true,\n };\n\n /**\n * Main loop through all override rules\n */\n for (let idx = 0; idx < currentFieldConfig.overrides.length; idx++) {\n const override = currentFieldConfig.overrides[idx];\n const overrideName = t('dashboard.get-field-override-categories.override-name', 'Override {{overrideNum}}', {\n overrideNum: idx + 1,\n });\n const overrideId = `panel-options-override-${idx}`;\n const matcherUi = fieldMatchersUI.get(override.matcher.id);\n const configPropertiesOptions = getOverrideProperties(registry);\n const isSystemOverride = isSystemOverrideGuard(override);\n // A way to force open new override categories\n const forceOpen = override.properties.length === 0;\n\n const category = new OptionsPaneCategoryDescriptor({\n title: overrideName,\n id: overrideId,\n forceOpen,\n renderTitle: function renderOverrideTitle(isExpanded: boolean) {\n return (\n <OverrideCategoryTitle\n override={override}\n isExpanded={isExpanded}\n registry={registry}\n overrideName={overrideName}\n matcherUi={matcherUi}\n onOverrideRemove={() => onOverrideRemove(idx)}\n />\n );\n },\n });\n\n const onMatcherConfigChange = (options: unknown) => {\n onOverrideChange(idx, { ...override, matcher: { ...override.matcher, options } });\n };\n\n const onDynamicConfigValueAdd = (override: ConfigOverrideRule, value: SelectableValue<string>) => {\n const registryItem = registry.get(value.value!);\n const propertyConfig: DynamicConfigValue = { id: registryItem.id, value: registryItem.defaultValue };\n\n const properties = override.properties ?? [];\n properties.push(propertyConfig);\n\n onOverrideChange(idx, { ...override, properties });\n };\n\n /**\n * Add override matcher UI element\n */\n const htmlId = `${overrideId}-matcher`;\n category.addItem(\n new OptionsPaneItemDescriptor({\n id: htmlId,\n title: matcherUi.name,\n render: function renderMatcherUI() {\n return (\n <matcherUi.component\n id={htmlId}\n matcher={matcherUi.matcher}\n data={data ?? []}\n options={override.matcher.options}\n onChange={onMatcherConfigChange}\n />\n );\n },\n })\n );\n\n /**\n * Loop through all override properties\n */\n for (let propIdx = 0; propIdx < override.properties.length; propIdx++) {\n const property = override.properties[propIdx];\n const registryItemForProperty = registry.getIfExists(property.id);\n\n if (!registryItemForProperty) {\n continue;\n }\n\n const onPropertyChange = (value: DynamicConfigValue) => {\n onOverrideChange(idx, {\n ...override,\n properties: override.properties.map((prop, i) => {\n if (i === propIdx) {\n return { ...prop, value: value };\n }\n\n return prop;\n }),\n });\n };\n\n const onPropertyRemove = () => {\n onOverrideChange(idx, { ...override, properties: override.properties.filter((_, i) => i !== propIdx) });\n };\n\n const htmlId = `${overrideId}-property-${property.id}`;\n\n /**\n * Add override property item\n */\n category.addItem(\n new OptionsPaneItemDescriptor({\n skipField: true,\n id: htmlId,\n render: function renderPropertyEditor() {\n return (\n <DynamicConfigValueEditor\n key={htmlId}\n isSystemOverride={isSystemOverride}\n onChange={onPropertyChange}\n onRemove={onPropertyRemove}\n property={property}\n registry={registry}\n context={context}\n searchQuery={searchQuery}\n />\n );\n },\n })\n );\n }\n\n /**\n * Add button that adds new overrides\n */\n if (!isSystemOverride && override.matcher.options) {\n category.addItem(\n new OptionsPaneItemDescriptor({\n skipField: true,\n id: `${overrideId}-add-button`,\n render: function renderAddPropertyButton() {\n return (\n <ValuePicker\n key=\"Add override property\"\n label={t(\n 'dashboard.get-field-override-categories.label-add-override-property',\n 'Add override property'\n )}\n variant=\"secondary\"\n isFullWidth={true}\n icon=\"plus\"\n menuPlacement=\"auto\"\n options={configPropertiesOptions}\n onChange={(v) => onDynamicConfigValueAdd(override, v)}\n />\n );\n },\n })\n );\n }\n\n categories.push(category);\n }\n\n categories.push(\n new OptionsPaneCategoryDescriptor({\n title: t('dashboard.get-field-override-categories.title.add-button', 'add button'),\n id: 'add button',\n customRender: function renderAddButton() {\n return (\n <AddOverrideButtonContainer key=\"Add override\">\n <ValuePicker\n icon=\"plus\"\n label={t('dashboard.get-field-override-categories.label-add-field-override', 'Add field override')}\n variant=\"secondary\"\n menuPlacement=\"auto\"\n isFullWidth={true}\n size=\"md\"\n options={fieldMatchersUI\n .list()\n .filter((o) => !o.excludeFromPicker)\n .map<SelectableValue<string>>((i) => ({ label: i.name, value: i.id, description: i.description }))}\n onChange={(value) => onOverrideAdd(value)}\n />\n </AddOverrideButtonContainer>\n );\n },\n })\n );\n\n return categories;\n}\n\nfunction getOverrideProperties(registry: FieldConfigOptionsRegistry) {\n return registry\n .list()\n .filter((o) => !o.hideFromOverrides)\n .map((item) => {\n let label = item.name;\n if (item.category) {\n label = [...item.category, item.name].join(' > ');\n }\n return { label, value: item.id, description: item.description };\n });\n}\n\nfunction AddOverrideButtonContainer({ children }: { children: React.ReactNode }) {\n const styles = useStyles2(getBorderTopStyles);\n return <div className={styles}>{children}</div>;\n}\n\nfunction getBorderTopStyles(theme: GrafanaTheme2) {\n return css({ borderTop: `1px solid ${theme.colors.border.weak}`, padding: `${theme.spacing(2)}`, display: 'flex' });\n}\n","import * as React from 'react';\n\nimport { Box } from '@grafana/ui';\n\nimport { OptionsPaneCategory } from './OptionsPaneCategory';\nimport { OptionsPaneItemDescriptor } from './OptionsPaneItemDescriptor';\n\nexport interface OptionsPaneCategoryDescriptorProps {\n id: string;\n title: string;\n renderTitle?: (isExpanded: boolean) => React.ReactNode;\n isOpenDefault?: boolean;\n forceOpen?: boolean;\n className?: string;\n isNested?: boolean;\n itemsCount?: number;\n customRender?: () => React.ReactNode;\n sandboxId?: string;\n /**\n * When set will disable category and show tooltip with disabledText on\n */\n disabledText?: string | React.ReactElement;\n}\n\n/**\n * This is not a real React component but an intermediary to enable deep option search without traversing a React node tree.\n */\nexport class OptionsPaneCategoryDescriptor {\n items: OptionsPaneItemDescriptor[] = [];\n categories: OptionsPaneCategoryDescriptor[] = [];\n parent?: OptionsPaneCategoryDescriptor;\n\n constructor(public props: OptionsPaneCategoryDescriptorProps) {}\n\n addItem(item: OptionsPaneItemDescriptor) {\n item.parent = this;\n this.items.push(item);\n return this;\n }\n\n addCategory(category: OptionsPaneCategoryDescriptor) {\n category.props.isNested = true;\n category.parent = this;\n this.categories.push(category);\n return this;\n }\n\n getCategory(name: string): OptionsPaneCategoryDescriptor {\n let sub = this.categories.find((c) => c.props.id === name);\n if (!sub) {\n sub = new OptionsPaneCategoryDescriptor({\n title: name,\n id: name,\n });\n this.addCategory(sub);\n }\n\n return sub;\n }\n\n render(searchQuery?: string) {\n if (this.props.customRender) {\n return this.props.customRender();\n }\n\n if (this.props.title === '') {\n return (\n <Box padding={2} paddingBottom={1} key={this.props.title}>\n {this.items.map((item) => item.render(searchQuery))}\n </Box>\n );\n }\n\n return (\n <OptionsPaneCategory key={this.props.title} {...this.props}>\n {this.items.map((item) => item.render(searchQuery))}\n {this.categories.map((category) => category.render(searchQuery))}\n </OptionsPaneCategory>\n );\n }\n}\n","import { t } from '@grafana/i18n';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport { RepeatRowSelect2 } from 'app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect';\n\nimport { useConditionalRenderingEditor } from '../../conditional-rendering/hooks/useConditionalRenderingEditor';\nimport { dashboardEditActions } from '../../edit-pane/shared';\n\nimport { AutoGridItem } from './AutoGridItem';\n\nexport function getOptions(model: AutoGridItem): OptionsPaneCategoryDescriptor[] {\n const repeatCategory = new OptionsPaneCategoryDescriptor({\n title: t('dashboard.auto-grid.item-options.repeat.title', 'Repeat options'),\n id: 'repeat-options',\n isOpenDefault: false,\n }).addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.auto-grid.item-options.repeat.variable.title', 'Repeat by variable'),\n id: 'auto-grid-repeat-by-variable',\n description: t(\n 'dashboard.auto-grid.item-options.repeat.variable.description',\n 'Repeat this panel for each value in the selected variable. This is not visible while in edit mode. You need to go back to dashboard and then update the variable or reload the dashboard.'\n ),\n render: (descriptor) => <RepeatByOption id={descriptor.props.id} item={model} />,\n })\n );\n\n const conditionalRenderingCategory = useConditionalRenderingEditor(model.state.conditionalRendering)!;\n\n return [repeatCategory, conditionalRenderingCategory];\n}\n\nfunction RepeatByOption({ item, id }: { item: AutoGridItem; id?: string }) {\n const { variableName } = item.useState();\n\n return (\n <RepeatRowSelect2\n id={id}\n sceneContext={item}\n repeat={variableName}\n onChange={(value?: string) => {\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.panel-repeat-variable', 'Panel repeat by'),\n source: item,\n perform: () => item.setRepeatByVariable(value),\n undo: () => item.setRepeatByVariable(variableName),\n });\n }}\n />\n );\n}\n","import { css, cx } from '@emotion/css';\nimport { memo, useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data/';\nimport { LazyLoader, SceneComponentProps, VizPanel } from '@grafana/scenes';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { useIsConditionallyHidden } from '../../conditional-rendering/hooks/useIsConditionallyHidden';\nimport { useDashboardState } from '../../utils/utils';\nimport { renderMatchingSoloPanels, useSoloPanelContext } from '../SoloPanelContext';\nimport { getIsLazy } from '../layouts-shared/utils';\n\nimport { AutoGridItem } from './AutoGridItem';\nimport { DRAGGED_ITEM_HEIGHT, DRAGGED_ITEM_LEFT, DRAGGED_ITEM_TOP, DRAGGED_ITEM_WIDTH } from './const';\n\nexport function AutoGridItemRenderer({ model }: SceneComponentProps<AutoGridItem>) {\n const { body, repeatedPanels = [], key } = model.useState();\n const { draggingKey } = model.getParentGrid().useState();\n const { isEditing, preload } = useDashboardState(model);\n const [isConditionallyHidden, conditionalRenderingClass, conditionalRenderingOverlay, renderHidden] =\n useIsConditionallyHidden(model);\n const styles = useStyles2(getStyles);\n const soloPanelContext = useSoloPanelContext();\n const isLazy = useMemo(() => getIsLazy(preload), [preload]);\n\n const Wrapper = useMemo(\n () =>\n // eslint-disable-next-line react/display-name\n memo(\n ({\n item,\n addDndContainer,\n isDragged,\n isDragging,\n isRepeat = false,\n }: {\n item: VizPanel;\n addDndContainer: boolean;\n isDragged: boolean;\n isDragging: boolean;\n isRepeat?: boolean;\n }) =>\n isConditionallyHidden && !isEditing && !renderHidden ? null : (\n <div\n {...(addDndContainer\n ? { ref: model.containerRef, ['data-auto-grid-item-drop-target']: isDragging ? key : undefined }\n : {})}\n className={cx(isConditionallyHidden && !isEditing && styles.hidden)}\n >\n {isDragged && <div className={styles.draggedPlaceholder} />}\n {\n // The lazy loader causes issues when used with conditional rendering\n isLazy && (!isConditionallyHidden || !renderHidden) ? (\n <LazyLoader\n key={item.state.key!}\n className={cx(\n conditionalRenderingClass,\n styles.wrapper,\n isDragged && !isRepeat && styles.draggedWrapper,\n isDragged && isRepeat && styles.draggedRepeatWrapper\n )}\n >\n <item.Component model={item} />\n {conditionalRenderingOverlay}\n </LazyLoader>\n ) : (\n <div\n className={cx(\n conditionalRenderingClass,\n styles.wrapper,\n isDragged && !isRepeat && styles.draggedWrapper,\n isDragged && isRepeat && styles.draggedRepeatWrapper\n )}\n >\n <item.Component model={item} />\n {conditionalRenderingOverlay}\n </div>\n )\n }\n </div>\n )\n ),\n [\n conditionalRenderingClass,\n conditionalRenderingOverlay,\n isLazy,\n key,\n model.containerRef,\n styles,\n isConditionallyHidden,\n isEditing,\n renderHidden,\n ]\n );\n\n if (soloPanelContext) {\n return renderMatchingSoloPanels(soloPanelContext, [body, ...repeatedPanels]);\n }\n\n const isDragging = !!draggingKey;\n const isDragged = draggingKey === key;\n\n return (\n <>\n <Wrapper item={body} addDndContainer={true} key={body.state.key!} isDragged={isDragged} isDragging={isDragging} />\n {repeatedPanels.map((item) => (\n <Wrapper\n item={item}\n addDndContainer={false}\n key={item.state.key!}\n isDragged={isDragged}\n isDragging={isDragging}\n isRepeat={true}\n />\n ))}\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({ width: '100%', height: '100%', position: 'relative' }),\n draggedWrapper: css({\n position: 'absolute',\n zIndex: 1000,\n top: `var(${DRAGGED_ITEM_TOP})`,\n left: `var(${DRAGGED_ITEM_LEFT})`,\n width: `var(${DRAGGED_ITEM_WIDTH})`,\n height: `var(${DRAGGED_ITEM_HEIGHT})`,\n opacity: 0.8,\n }),\n draggedRepeatWrapper: css({\n visibility: 'hidden',\n }),\n draggedPlaceholder: css({\n width: '100%',\n height: '100%',\n boxShadow: `0 0 ${theme.spacing(0.5)} ${theme.colors.primary.border}`,\n background: `${theme.colors.primary.transparent}`,\n zIndex: -1,\n }),\n hidden: css({\n display: 'none',\n }),\n});\n","import { isEqual } from 'lodash';\nimport React from 'react';\n\nimport {\n CustomVariable,\n MultiValueVariable,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n VariableDependencyConfig,\n VariableValueSingle,\n VizPanel,\n} from '@grafana/scenes';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\n\nimport { ConditionalRenderingGroup } from '../../conditional-rendering/group/ConditionalRenderingGroup';\nimport { DashboardStateChangedEvent } from '../../edit-pane/shared';\nimport { getCloneKey, getLocalVariableValueSet } from '../../utils/clone';\nimport { getMultiVariableValues } from '../../utils/utils';\nimport { scrollCanvasElementIntoView } from '../layouts-shared/scrollCanvasElementIntoView';\nimport { DashboardLayoutItem } from '../types/DashboardLayoutItem';\n\nimport { getOptions } from './AutoGridItemEditor';\nimport { AutoGridItemRenderer } from './AutoGridItemRenderer';\nimport { AutoGridLayout } from './AutoGridLayout';\n\nexport interface AutoGridItemState extends SceneObjectState {\n body: VizPanel;\n hideWhenNoData?: boolean;\n repeatedPanels?: VizPanel[];\n variableName?: string;\n isHidden?: boolean;\n conditionalRendering?: ConditionalRenderingGroup;\n}\n\nexport class AutoGridItem extends SceneObjectBase<AutoGridItemState> implements DashboardLayoutItem {\n public static Component = AutoGridItemRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n variableNames: this.state.variableName ? [this.state.variableName] : [],\n onVariableUpdateCompleted: () => this.performRepeat(),\n });\n\n public readonly isDashboardLayoutItem = true;\n public containerRef = React.createRef<HTMLDivElement>();\n private _prevRepeatValues?: VariableValueSingle[];\n\n public constructor(state: AutoGridItemState) {\n super({ ...state, conditionalRendering: state?.conditionalRendering ?? ConditionalRenderingGroup.createEmpty() });\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n if (this.state.variableName) {\n this.performRepeat();\n }\n\n this._subs.add(this.subscribeToEvent(DashboardStateChangedEvent, () => this.handleEditChange()));\n\n const deactivate = this.state.conditionalRendering?.activate();\n\n return () => {\n if (deactivate) {\n deactivate();\n }\n };\n }\n\n public getOptions(): OptionsPaneCategoryDescriptor[] {\n return getOptions(this);\n }\n\n public setElementBody(body: VizPanel): void {\n this.setState({ body });\n }\n\n public performRepeat() {\n if (!this.state.variableName || sceneGraph.hasVariableDependencyInLoadingState(this)) {\n return;\n }\n\n const variable =\n sceneGraph.lookupVariable(this.state.variableName, this) ??\n new CustomVariable({\n name: '_____default_sys_repeat_var_____',\n options: [],\n value: '',\n text: '',\n query: 'A',\n });\n\n if (!(variable instanceof MultiValueVariable)) {\n console.error('DashboardGridItem: Variable is not a MultiValueVariable');\n return;\n }\n\n const { values, texts } = getMultiVariableValues(variable);\n\n if (isEqual(this._prevRepeatValues, values)) {\n return;\n }\n\n const panelToRepeat = this.state.body;\n const repeatedPanels: VizPanel[] = [];\n\n // when variable has no options (due to error or similar) it will not render any panels at all\n // adding a placeholder in this case so that there is at least empty panel that can display error\n const emptyVariablePlaceholderOption = {\n values: [''],\n texts: variable.hasAllValue() ? ['All'] : ['None'],\n };\n\n const variableValues = values.length ? values : emptyVariablePlaceholderOption.values;\n const variableTexts = texts.length ? texts : emptyVariablePlaceholderOption.texts;\n\n // Loop through variable values and create repeats\n for (let index = 0; index < variableValues.length; index++) {\n const isSource = index === 0;\n const clone = isSource\n ? panelToRepeat\n : panelToRepeat.clone({\n key: getCloneKey(panelToRepeat.state.key!, index),\n repeatSourceKey: panelToRepeat.state.key,\n });\n\n clone.setState({ $variables: getLocalVariableValueSet(variable, variableValues[index], variableTexts[index]) });\n\n if (index > 0) {\n repeatedPanels.push(clone);\n }\n }\n\n this.setState({ repeatedPanels });\n this._prevRepeatValues = values;\n }\n\n public getPanelCount() {\n return (this.state.repeatedPanels?.length ?? 0) + 1;\n }\n\n public setRepeatByVariable(variableName: string | undefined) {\n const stateUpdate: Partial<AutoGridItemState> = { variableName };\n\n if (!variableName) {\n stateUpdate.repeatedPanels = undefined;\n }\n\n if (this.state.body.state.$variables) {\n this.state.body.setState({ $variables: undefined });\n }\n\n this._variableDependency.setVariableNames(variableName ? [variableName] : []);\n\n this.setState(stateUpdate);\n this.performRepeat();\n }\n\n public getParentGrid(): AutoGridLayout {\n if (!(this.parent instanceof AutoGridLayout)) {\n throw new Error('Parent is not a AutoGridLayout');\n }\n\n return this.parent;\n }\n\n public getBoundingBox(): { width: number; height: number; top: number; left: number } {\n const rect = this.containerRef.current!.getBoundingClientRect();\n\n return {\n width: rect.width,\n height: rect.height,\n top: this.containerRef.current!.offsetTop,\n left: this.containerRef.current!.offsetLeft,\n };\n }\n\n public handleEditChange() {\n this._prevRepeatValues = undefined;\n\n this.performRepeat();\n }\n\n public scrollIntoView() {\n scrollCanvasElementIntoView(this, this.containerRef);\n }\n}\n","import { faro, LogContext, LogLevel } from '@grafana/faro-web-sdk';\n\nimport { config } from '../config';\n\nexport { LogLevel };\n\n/**\n * Log a message at INFO level\n * @public\n */\nexport function logInfo(message: string, contexts?: LogContext) {\n if (config.grafanaJavascriptAgent.enabled) {\n faro.api.pushLog([message], {\n level: LogLevel.INFO,\n context: contexts,\n });\n }\n}\n\n/**\n * Log a message at WARNING level\n *\n * @public\n */\nexport function logWarning(message: string, contexts?: LogContext) {\n if (config.grafanaJavascriptAgent.enabled) {\n faro.api.pushLog([message], {\n level: LogLevel.WARN,\n context: contexts,\n });\n }\n}\n\n/**\n * Log a message at DEBUG level\n *\n * @public\n */\nexport function logDebug(message: string, contexts?: LogContext) {\n if (config.grafanaJavascriptAgent.enabled) {\n faro.api.pushLog([message], {\n level: LogLevel.DEBUG,\n context: contexts,\n });\n }\n}\n\n/**\n * Log an error\n *\n * @public\n */\nexport function logError(err: Error, contexts?: LogContext) {\n if (config.grafanaJavascriptAgent.enabled) {\n faro.api.pushError(err, {\n context: contexts,\n });\n }\n}\n\n/**\n * Log a measurement\n *\n * @public\n */\nexport type MeasurementValues = Record<string, number>;\nexport function logMeasurement(type: string, values: MeasurementValues, context?: LogContext) {\n if (config.grafanaJavascriptAgent.enabled) {\n faro.api.pushMeasurement(\n {\n type,\n values,\n },\n { context: context }\n );\n }\n}\n\nexport interface MonitoringLogger {\n logDebug: (message: string, contexts?: LogContext) => void;\n logInfo: (message: string, contexts?: LogContext) => void;\n logWarning: (message: string, contexts?: LogContext) => void;\n logError: (error: Error, contexts?: LogContext) => void;\n logMeasurement: (type: string, measurement: MeasurementValues, contexts?: LogContext) => void;\n}\n/**\n * Creates a monitoring logger with five levels of logging methods: `logDebug`, `logInfo`, `logWarning`, `logError`, and `logMeasurement`.\n * These methods use `faro.api.pushX` web SDK methods to report these logs or errors to the Faro collector.\n *\n * @param {string} source - Identifier for the source of the log messages.\n * @param {LogContext} [defaultContext] - Context to be included in every log message.\n *\n * @returns {MonitoringLogger} Logger object with five methods:\n * - `logDebug(message: string, contexts?: LogContext)`: Logs a debug message.\n * - `logInfo(message: string, contexts?: LogContext)`: Logs an informational message.\n * - `logWarning(message: string, contexts?: LogContext)`: Logs a warning message.\n * - `logError(error: Error, contexts?: LogContext)`: Logs an error message.\n * - `logMeasurement(measurement: Omit<MeasurementEvent, 'timestamp'>, contexts?: LogContext)`: Logs a measurement.\n * Each method combines the `defaultContext` (if provided), the `source`, and an optional `LogContext` parameter into a full context that is included with the log message.\n */\nexport function createMonitoringLogger(source: string, defaultContext?: LogContext): MonitoringLogger {\n const createFullContext = (contexts?: LogContext) => ({\n source: source,\n ...defaultContext,\n ...contexts,\n });\n\n return {\n /**\n * Logs a debug message with optional additional context.\n * @param {string} message - The debug message to be logged.\n * @param {LogContext} [contexts] - Optional additional context to be included.\n */\n logDebug: (message: string, contexts?: LogContext) => logDebug(message, createFullContext(contexts)),\n\n /**\n * Logs an informational message with optional additional context.\n * @param {string} message - The informational message to be logged.\n * @param {LogContext} [contexts] - Optional additional context to be included.\n */\n logInfo: (message: string, contexts?: LogContext) => logInfo(message, createFullContext(contexts)),\n\n /**\n * Logs a warning message with optional additional context.\n * @param {string} message - The warning message to be logged.\n * @param {LogContext} [contexts] - Optional additional context to be included.\n */\n logWarning: (message: string, contexts?: LogContext) => logWarning(message, createFullContext(contexts)),\n\n /**\n * Logs an error with optional additional context.\n * @param {Error} error - The error object to be logged.\n * @param {LogContext} [contexts] - Optional additional context to be included.\n */\n logError: (error: Error, contexts?: LogContext) => logError(error, createFullContext(contexts)),\n\n /**\n * Logs an measurement with optional additional context.\n * @param {MeasurementEvent} measurement - The measurement object to be recorded.\n * @param {LogContext} [contexts] - Optional additional context to be included.\n */\n logMeasurement: (type: string, measurement: MeasurementValues, contexts?: LogContext) =>\n logMeasurement(type, measurement, createFullContext(contexts)),\n };\n}\n","import { RelativeTimeRange, rangeUtil } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\n\ninterface RuleTimeRangeLabelProps {\n relativeTimeRange: RelativeTimeRange;\n}\n\n/**\n * Displays a human-readable relative time range label like:\n * - \"15m to now\" when to === 0 or not set\n * - \"15m to 1m\" when to > 0\n */\nexport function TimeRangeLabel({ relativeTimeRange }: RuleTimeRangeLabelProps) {\n const fromLabel = rangeUtil.secondsToHms(relativeTimeRange.from);\n const toSeconds = relativeTimeRange.to ?? 0;\n const toIsNow = !toSeconds || toSeconds <= 0;\n const toLabel = toIsNow ? 'now' : rangeUtil.secondsToHms(toSeconds);\n\n if (toIsNow) {\n return (\n <Trans i18nKey=\"alerting.rule-time-range-label.relative\" values={{ from: fromLabel }}>\n <code>{'{{from}}'}</code> to now\n </Trans>\n );\n }\n\n return (\n <Trans i18nKey=\"alerting.rule-time-range-label.relative-with-to\" values={{ from: fromLabel, to: toLabel }}>\n <code>{'{{from}}'}</code> to <code>{'{{to}}'}</code>\n </Trans>\n );\n}\n","import { KeyValue } from '../types/data';\nimport { Field } from '../types/dataFrame';\n\nexport interface Dimension<T = unknown> {\n // Name of the dimension\n name: string;\n // Collection of fields representing dimension\n // I.e. in 2d graph we have two dimension- X and Y axes. Both dimensions can represent\n // multiple fields being drawn on the graph.\n // For instance y-axis dimension is a collection of series value fields,\n // and x-axis dimension is a collection of corresponding time fields\n columns: Array<Field<T>>;\n}\n\nexport type Dimensions<T = unknown> = KeyValue<Dimension<T>>;\n\nexport const createDimension = <T>(name: string, columns: Array<Field<T>>): Dimension<T> => {\n return {\n name,\n columns,\n };\n};\n\nexport const getColumnsFromDimension = <T>(dimension: Dimension<T>) => {\n return dimension.columns;\n};\nexport const getColumnFromDimension = <T>(dimension: Dimension<T>, column: number) => {\n return dimension.columns[column];\n};\n\nexport const getValueFromDimension = <T>(dimension: Dimension<T>, column: number, row: number) => {\n return dimension.columns[column].values[row];\n};\n\nexport const getAllValuesFromDimension = <T>(dimension: Dimension<T>, column: number, row: number) => {\n return dimension.columns.map((c) => c.values[row]);\n};\n\nexport const getDimensionByName = <T>(dimensions: Dimensions<T>, name: string) => dimensions[name];\n","// The ID of the main nav-tree item (the main item in the NavIndex)\nexport const ROUTE_BASE_ID = 'connections';\n\nexport const ROUTES = {\n Base: `/${ROUTE_BASE_ID}`,\n\n // Data sources\n DataSources: `/${ROUTE_BASE_ID}/datasources`,\n DataSourcesNew: `/${ROUTE_BASE_ID}/datasources/new`,\n DataSourcesEdit: `/${ROUTE_BASE_ID}/datasources/edit/:uid`,\n DataSourcesDashboards: `/${ROUTE_BASE_ID}/datasources/edit/:uid/dashboards`,\n\n // Add new connection\n AddNewConnection: `/${ROUTE_BASE_ID}/add-new-connection`,\n DataSourcesDetails: `/${ROUTE_BASE_ID}/datasources/:id`,\n\n // Outdated\n ConnectDataOutdated: `/${ROUTE_BASE_ID}/connect-data`,\n YourConnectionsOutdated: `/${ROUTE_BASE_ID}/your-connections`,\n} as const;\n","import { defaults, each, sortBy } from 'lodash';\n\nimport { DataSourceRef, PanelPluginMeta, VariableOption, VariableRefresh } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { Panel } from '@grafana/schema';\nimport {\n Spec as DashboardV2Spec,\n PanelKind,\n PanelQueryKind,\n AnnotationQueryKind,\n QueryVariableKind,\n LibraryPanelRef,\n LibraryPanelKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { notifyApp } from 'app/core/actions';\nimport config from 'app/core/config';\nimport { createErrorNotification } from 'app/core/copy/appNotification';\nimport { buildPanelKind } from 'app/features/dashboard/api/ResponseTransformers';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel, GridPos } from 'app/features/dashboard/state/PanelModel';\nimport { getLibraryPanel } from 'app/features/library-panels/state/api';\nimport { variableRegexExec } from 'app/features/variables/utils';\nimport { dispatch } from 'app/store/store';\n\nimport { isPanelModelLibraryPanel } from '../../../library-panels/guard';\nimport { LibraryElementKind } from '../../../library-panels/types';\nimport { DashboardJson } from '../../../manage-dashboards/types';\nimport { isConstant } from '../../../variables/guard';\n\nexport interface InputUsage {\n libraryPanels?: LibraryPanelRef[];\n}\n\nexport interface Input {\n name: string;\n type: string;\n label: string;\n value: any;\n description: string;\n usage?: InputUsage;\n}\n\ninterface Requires {\n [key: string]: {\n type: string;\n id: string;\n name: string;\n version: string;\n };\n}\n\nexport interface ExternalDashboard {\n __inputs?: Input[];\n __elements?: Record<string, LibraryElementExport>;\n __requires?: Array<Requires[string]>;\n panels: Array<PanelModel | PanelWithExportableLibraryPanel>;\n}\n\ninterface PanelWithExportableLibraryPanel {\n gridPos: GridPos;\n id: number;\n libraryPanel: LibraryPanelRef;\n}\n\nfunction isExportableLibraryPanel(\n p: PanelModel | PanelWithExportableLibraryPanel\n): p is PanelWithExportableLibraryPanel {\n return Boolean(p.libraryPanel?.name && p.libraryPanel?.uid);\n}\n\ninterface DataSources {\n [key: string]: {\n name: string;\n label: string;\n description: string;\n type: string;\n pluginId: string;\n pluginName: string;\n usage?: InputUsage;\n };\n}\n\nexport interface LibraryElementExport {\n name: string;\n uid: string;\n model: any;\n kind: LibraryElementKind;\n}\n\nexport async function makeExportableV1(dashboard: DashboardModel) {\n // clean up repeated rows and panels,\n // this is done on the live real dashboard instance, not on a clone\n // so we need to undo this\n // this is pretty hacky and needs to be changed\n dashboard.cleanUpRepeats();\n\n const saveModel = dashboard.getSaveModelCloneOld();\n saveModel.id = null;\n\n // undo repeat cleanup\n dashboard.processRepeats();\n\n const inputs: Input[] = [];\n const requires: Requires = {};\n const datasources: DataSources = {};\n const variableLookup: { [key: string]: any } = {};\n const libraryPanels: Map<string, LibraryElementExport> = new Map<string, LibraryElementExport>();\n\n for (const variable of saveModel.getVariables()) {\n variableLookup[variable.name] = variable;\n }\n\n const datasourceVariableRefNameMap: { [key: string]: string } = {};\n\n const templateizeDatasourceUsage = (obj: any, fallback?: DataSourceRef) => {\n if (obj.datasource === undefined) {\n obj.datasource = fallback;\n return;\n }\n\n let datasource = obj.datasource;\n let datasourceVariable: any = null;\n\n const datasourceUid: string | undefined = datasource?.uid;\n const match = datasourceUid && variableRegexExec(datasourceUid);\n let varName: string | undefined;\n\n if (match) {\n varName = match[1] || match[2] || match[4];\n datasourceVariable = variableLookup[varName];\n if (datasourceVariable && datasourceVariable.current) {\n datasource = datasourceVariable.current.value;\n }\n }\n\n return getDataSourceSrv()\n .get(datasource)\n .then((ds) => {\n if (ds.meta?.builtIn) {\n return;\n }\n\n // add data source type to require list\n requires['datasource' + ds.meta?.id] = {\n type: 'datasource',\n id: ds.meta.id,\n name: ds.meta.name,\n version: ds.meta.info.version || '1.0.0',\n };\n\n const libraryPanel = obj.libraryPanel;\n const libraryPanelSuffix = !!libraryPanel ? '-for-library-panel' : '';\n let refName = 'DS_' + ds.name.replace(' ', '_').toUpperCase() + libraryPanelSuffix.toUpperCase();\n const templatedUid = '${' + refName + '}';\n\n datasources[refName] = {\n name: refName,\n label: ds.name,\n description: '',\n type: 'datasource',\n pluginId: ds.meta?.id,\n pluginName: ds.meta?.name,\n usage: datasources[refName]?.usage,\n };\n\n if (!!libraryPanel) {\n const libPanels = datasources[refName]?.usage?.libraryPanels || [];\n libPanels.push({ name: libraryPanel.name, uid: libraryPanel.uid });\n\n datasources[refName].usage = {\n libraryPanels: libPanels,\n };\n }\n\n // if it panel or query is relying on a datasource variable\n // skip templating datasource uid but save the reference so we can set datasource variable's current prop\n if (datasourceVariable && varName) {\n datasourceVariableRefNameMap[varName] = '${' + refName + '}';\n return;\n }\n\n obj.datasource = { type: ds.meta.id, uid: templatedUid };\n });\n };\n\n const processPanel = async (panel: PanelModel) => {\n if (panel.type !== 'row') {\n await templateizeDatasourceUsage(panel);\n\n if (panel.targets) {\n for (const target of panel.targets) {\n await templateizeDatasourceUsage(target, panel.datasource!);\n }\n }\n\n const panelDef: PanelPluginMeta = config.panels[panel.type];\n if (panelDef) {\n requires['panel' + panelDef.id] = {\n type: 'panel',\n id: panelDef.id,\n name: panelDef.name,\n version: panelDef.info.version,\n };\n }\n }\n };\n\n const processLibraryPanels = async (panel: PanelModel) => {\n if (isPanelModelLibraryPanel(panel)) {\n const { name, uid } = panel.libraryPanel;\n let model = panel.libraryPanel.model;\n if (!model) {\n const libPanel = await getLibraryPanel(uid, true);\n model = libPanel.model;\n }\n\n await templateizeDatasourceUsage(model);\n\n const { gridPos, id, ...rest } = model as any;\n if (!libraryPanels.has(uid)) {\n libraryPanels.set(uid, { name, uid, kind: LibraryElementKind.Panel, model: rest });\n }\n }\n };\n\n try {\n // check up panel data sources\n for (const panel of saveModel.panels) {\n await processPanel(panel);\n\n // handle collapsed rows\n if (panel.collapsed !== undefined && panel.collapsed === true && panel.panels) {\n for (const rowPanel of panel.panels) {\n await processPanel(rowPanel);\n }\n }\n }\n\n // templatize template vars\n for (const variable of saveModel.getVariables()) {\n if (variable.type === 'query') {\n await templateizeDatasourceUsage(variable);\n variable.options = [];\n variable.current = {} as unknown as VariableOption;\n variable.refresh =\n variable.refresh !== VariableRefresh.never ? variable.refresh : VariableRefresh.onDashboardLoad;\n } else if (variable.type === 'datasource') {\n const templateizedUID = datasourceVariableRefNameMap[variable.name];\n if (templateizedUID) {\n variable.current = {\n text: '',\n value: templateizedUID,\n selected: true,\n };\n } else {\n variable.current = {};\n }\n } else if (variable.type === 'adhoc') {\n await templateizeDatasourceUsage(variable);\n }\n }\n\n // templatize annotations vars\n for (const annotationDef of saveModel.annotations.list) {\n await templateizeDatasourceUsage(annotationDef);\n }\n\n // add grafana version\n requires['grafana'] = {\n type: 'grafana',\n id: 'grafana',\n name: 'Grafana',\n version: config.buildInfo.version,\n };\n\n // we need to process all panels again after all the promises are resolved\n // so all data sources, variables and targets have been templateized when we process library panels\n for (const panel of saveModel.panels) {\n await processLibraryPanels(panel);\n if (panel.collapsed !== undefined && panel.collapsed === true && panel.panels) {\n for (const rowPanel of panel.panels) {\n await processLibraryPanels(rowPanel);\n }\n }\n }\n\n each(datasources, (value: any) => {\n inputs.push(value);\n });\n\n // templatize constants\n for (const variable of saveModel.getVariables()) {\n if (isConstant(variable)) {\n const refName = 'VAR_' + variable.name.replace(' ', '_').toUpperCase();\n inputs.push({\n name: refName,\n type: 'constant',\n label: variable.label || variable.name,\n value: variable.query,\n description: '',\n });\n // update current and option\n variable.query = '${' + refName + '}';\n variable.current = {\n value: variable.query,\n text: variable.query,\n selected: false,\n };\n variable.options = [variable.current];\n }\n }\n\n const __elements = [...libraryPanels.entries()].reduce<Record<string, LibraryElementExport>>(\n (prev, [curKey, curLibPanel]) => {\n prev[curKey] = curLibPanel;\n return prev;\n },\n {}\n );\n\n // make inputs and requires a top thing\n const newObj: DashboardJson = defaults(\n {\n __inputs: inputs,\n __elements,\n __requires: sortBy(requires, ['id']),\n },\n saveModel\n );\n\n // Remove extraneous props from library panels\n for (let i = 0; i < newObj.panels.length; i++) {\n const libPanel = newObj.panels[i];\n if (isExportableLibraryPanel(libPanel)) {\n newObj.panels[i] = {\n gridPos: libPanel.gridPos,\n id: libPanel.id,\n libraryPanel: { uid: libPanel.libraryPanel.uid, name: libPanel.libraryPanel.name },\n };\n }\n }\n\n return newObj;\n } catch (err) {\n console.error('Export failed:', err);\n return {\n error: err,\n };\n }\n}\n\n/**\n * Converts a LibraryPanelKind to a PanelKind with embedded panel configuration\n */\nasync function convertLibraryPanelToInlinePanel(libraryPanelElement: LibraryPanelKind): Promise<PanelKind> {\n const { libraryPanel, id, title } = libraryPanelElement.spec;\n\n try {\n // Load the full library panel definition\n const fullLibraryPanel = await getLibraryPanel(libraryPanel.uid, true);\n const panelModel: Panel = fullLibraryPanel.model;\n const inlinePanel = buildPanelKind(panelModel);\n // keep the original id\n inlinePanel.spec.id = id;\n return inlinePanel;\n } catch (error) {\n console.error(`Failed to load library panel ${libraryPanel.uid}:`, error);\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n dispatch(\n notifyApp(\n createErrorNotification(\n `Unable to load library panel \"${libraryPanel.name}\": ${errorMessage}. It will appear as a placeholder in the export.`\n )\n )\n );\n\n // Return a placeholder panel if library panel can't be loaded\n return {\n kind: 'Panel',\n spec: {\n id,\n title: title || `Library Panel: ${libraryPanel.name}`,\n description: '',\n links: [],\n data: {\n kind: 'QueryGroup',\n spec: {\n queries: [],\n transformations: [],\n queryOptions: {},\n },\n },\n vizConfig: {\n kind: 'VizConfig',\n group: 'text',\n version: '',\n spec: {\n options: {\n content: `**Library Panel Load Error**\\n\\nUnable to load library panel: ${libraryPanel.name} (${libraryPanel.uid})\\n\\nError: ${error instanceof Error ? error.message : 'Unknown error'}`,\n mode: 'markdown',\n },\n fieldConfig: { defaults: {}, overrides: [] },\n },\n },\n },\n };\n }\n}\n\nexport async function makeExportableV2(dashboard: DashboardV2Spec, isSharingExternally = false) {\n const variableLookup: { [key: string]: any } = {};\n\n // get all datasource variables\n const datasourceVariables = dashboard.variables.filter((v) => v.kind === 'DatasourceVariable');\n\n for (const variable of dashboard.variables) {\n variableLookup[variable.spec.name] = variable.spec;\n }\n\n const removeDataSourceRefs = (\n obj: AnnotationQueryKind['spec'] | QueryVariableKind['spec'] | PanelQueryKind['spec']\n ) => {\n const datasourceUid = obj.query?.datasource?.name;\n\n if (datasourceUid?.startsWith('${') && datasourceUid?.endsWith('}')) {\n const varName = datasourceUid.slice(2, -1);\n // if there's a match we don't want to remove the datasource ref\n const match = datasourceVariables.find((v) => v.spec.name === varName);\n if (match) {\n return;\n }\n }\n\n obj.query && (obj.query.datasource = undefined);\n };\n\n const processPanel = (panel: PanelKind) => {\n if (panel.spec.data.spec.queries) {\n for (const query of panel.spec.data.spec.queries) {\n removeDataSourceRefs(query.spec);\n }\n }\n };\n\n try {\n const elements = dashboard.elements;\n\n // process elements\n for (const [key, element] of Object.entries(elements)) {\n if (element.kind === 'Panel') {\n processPanel(element);\n } else if (element.kind === 'LibraryPanel') {\n if (isSharingExternally) {\n // Convert library panel to inline panel for external sharing\n const inlinePanel = await convertLibraryPanelToInlinePanel(element);\n // Apply datasource templating to the converted panel\n processPanel(inlinePanel);\n // Replace the library panel with the inline panel\n elements[key] = inlinePanel;\n }\n // For internal exports, keep library panels as-is\n }\n }\n\n // process template variables\n for (const variable of dashboard.variables) {\n if (variable.kind === 'QueryVariable') {\n removeDataSourceRefs(variable.spec);\n variable.spec.options = [];\n variable.spec.current = {\n text: '',\n value: '',\n };\n } else if (variable.kind === 'DatasourceVariable') {\n variable.spec.current = {\n text: '',\n value: '',\n };\n }\n }\n\n // process annotations vars\n for (const annotation of dashboard.annotations) {\n removeDataSourceRefs(annotation.spec);\n }\n\n return dashboard;\n } catch (err) {\n console.error('Export failed:', err);\n return {\n error: err,\n };\n }\n}\n","export enum InspectTab {\n Data = 'data',\n Meta = 'meta', // When result metadata exists\n Error = 'error',\n Stats = 'stats',\n JSON = 'json',\n Query = 'query',\n Help = 'help', // get info required for support+debugging\n}\n","/**\n * Rollup does not support renamed exports so do not change this to export { Controller as InputControl } ...\n */\nimport { Controller } from 'react-hook-form';\n\n/**\n * @deprecated use the `Controller` component from react-hook-form instead\n */\nexport const InputControl = Controller;\n","import { getBackendSrv } from '@grafana/runtime';\nimport { GENERAL_FOLDER_UID } from 'app/features/search/constants';\nimport { getGrafanaSearcher } from 'app/features/search/service/searcher';\nimport { NestedFolderDTO } from 'app/features/search/service/types';\nimport { queryResultToViewItem } from 'app/features/search/service/utils';\nimport { DashboardViewItem } from 'app/features/search/types';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { contextSrv } from '../../../core/core';\nimport { getFolderURL, isSharedWithMe } from '../components/utils';\n\nexport const PAGE_SIZE = 50;\n\nexport async function listFolders(\n parentUID?: string,\n parentTitle?: string, // TODO: remove this when old UI is gone\n page = 1,\n pageSize = PAGE_SIZE\n): Promise<DashboardViewItem[]> {\n const backendSrv = getBackendSrv();\n\n // TODO: what to do here for unified search?\n let folders: NestedFolderDTO[] = [];\n if (contextSrv.hasPermission(AccessControlAction.FoldersRead)) {\n folders = await backendSrv.get<NestedFolderDTO[]>('/api/folders', {\n parentUid: parentUID,\n page,\n limit: pageSize,\n });\n }\n\n return folders.map((item) => ({\n kind: 'folder',\n uid: item.uid,\n title: item.title,\n parentTitle,\n parentUID,\n managedBy: item.managedBy,\n\n // URLs from the backend come with subUrlPrefix already included, so match that behaviour here\n url: isSharedWithMe(item.uid) ? undefined : getFolderURL(item.uid),\n }));\n}\n\nexport async function listDashboards(parentUID?: string, page = 1, pageSize = PAGE_SIZE): Promise<DashboardViewItem[]> {\n const searcher = getGrafanaSearcher();\n\n const dashboardsResults = await searcher.search({\n kind: ['dashboard'],\n query: '*',\n location: parentUID || 'general',\n from: (page - 1) * pageSize, // our pages are 1-indexed, so we need to -1 to convert that to correct value to skip\n limit: pageSize,\n offset: (page - 1) * pageSize,\n });\n\n return dashboardsResults.view.map((item) => {\n const viewItem = queryResultToViewItem(item, dashboardsResults.view);\n\n // TODO: Once we remove nestedFolders feature flag, undo this and prevent the 'general'\n // parentUID from being set in searcher\n if (viewItem.parentUID === GENERAL_FOLDER_UID) {\n viewItem.parentUID = undefined;\n }\n\n return viewItem;\n });\n}\n","import { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui';\n\nimport { formatSQL } from '../../utils/formatSQL';\n\ntype PreviewProps = {\n rawSql: string;\n datasourceType?: string;\n};\n\nexport function Preview({ rawSql, datasourceType }: PreviewProps) {\n // TODO: use zero index to give feedback about copy success\n const [_, copyToClipboard] = useCopyToClipboard();\n const styles = useStyles2(getStyles);\n\n const copyPreview = (rawSql: string) => {\n copyToClipboard(rawSql);\n reportInteraction('grafana_sql_preview_copied', {\n datasource: datasourceType,\n });\n };\n\n const labelElement = (\n <div className={styles.labelWrapper}>\n <span className={styles.label}>\n <Trans i18nKey=\"grafana-sql.components.preview.label-element.preview\">Preview</Trans>\n </span>\n <IconButton\n tooltip={t('grafana-sql.components.preview.label-element.tooltip-copy-to-clipboard', 'Copy to clipboard')}\n onClick={() => copyPreview(rawSql)}\n name=\"copy\"\n />\n </div>\n );\n\n return (\n <Field label={labelElement} className={styles.grow}>\n <CodeEditor\n language=\"sql\"\n height={80}\n value={formatSQL(rawSql)}\n monacoOptions={{ scrollbar: { vertical: 'hidden' }, scrollBeyondLastLine: false }}\n readOnly={true}\n showMiniMap={false}\n />\n </Field>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grow: css({ flexGrow: 1 }),\n label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),\n labelWrapper: css({ display: 'flex', justifyContent: 'space-between', paddingBottom: theme.spacing(0.5) }),\n };\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { TeamsState, Team, TeamState, TeamGroup } from 'app/types/teams';\n\nexport const initialTeamsState: TeamsState = {\n teams: [],\n page: 1,\n query: '',\n perPage: 30,\n totalPages: 0,\n noTeams: false,\n hasFetched: false,\n};\n\ntype TeamsFetched = {\n teams: Team[];\n page: number;\n perPage: number;\n noTeams: boolean;\n totalCount: number;\n};\n\nconst teamsSlice = createSlice({\n name: 'teams',\n initialState: initialTeamsState,\n reducers: {\n teamsLoaded: (state, action: PayloadAction<TeamsFetched>): TeamsState => {\n const { totalCount, perPage, ...rest } = action.payload;\n const totalPages = Math.ceil(totalCount / perPage);\n return { ...state, ...rest, totalPages, perPage, hasFetched: true };\n },\n queryChanged: (state, action: PayloadAction<string>): TeamsState => {\n return { ...state, page: 1, query: action.payload };\n },\n pageChanged: (state, action: PayloadAction<number>): TeamsState => {\n return { ...state, page: action.payload };\n },\n sortChanged: (state, action: PayloadAction<TeamsState['sort']>): TeamsState => {\n return { ...state, sort: action.payload, page: 1 };\n },\n rolesFetchBegin: (state) => {\n return { ...state, rolesLoading: true };\n },\n rolesFetchEnd: (state) => {\n return { ...state, rolesLoading: false };\n },\n },\n});\n\nexport const { teamsLoaded, queryChanged, pageChanged, sortChanged, rolesFetchBegin, rolesFetchEnd } =\n teamsSlice.actions;\n\nexport const teamsReducer = teamsSlice.reducer;\n\nexport const initialTeamState: TeamState = {\n team: {} as Team,\n members: [],\n groups: [],\n};\n\nconst teamSlice = createSlice({\n name: 'team',\n initialState: initialTeamState,\n reducers: {\n teamLoaded: (state, action: PayloadAction<Team>): TeamState => {\n return { ...state, team: action.payload };\n },\n teamGroupsLoaded: (state, action: PayloadAction<TeamGroup[]>): TeamState => {\n return { ...state, groups: action.payload };\n },\n },\n});\n\nexport const { teamLoaded, teamGroupsLoaded } = teamSlice.actions;\n\nexport const teamReducer = teamSlice.reducer;\n\nexport default {\n teams: teamsReducer,\n team: teamReducer,\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { RadioButtonGroup, Box } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { TabsLayoutManager } from '../layout-tabs/TabsLayoutManager';\nimport { DashboardLayoutManager } from '../types/DashboardLayoutManager';\nimport { isLayoutParent } from '../types/LayoutParent';\nimport { LayoutRegistryItem } from '../types/LayoutRegistryItem';\n\nimport { layoutRegistry } from './layoutRegistry';\n\nexport interface Props {\n layoutManager: DashboardLayoutManager;\n}\n\nexport function DashboardLayoutSelector({ layoutManager }: Props) {\n const isGridLayout = layoutManager.descriptor.isGridLayout;\n const options = layoutRegistry.list().filter((layout) => layout.isGridLayout === isGridLayout);\n\n const disableTabs = useMemo(() => {\n if (config.featureToggles.unlimitedLayoutsNesting) {\n return false;\n }\n let parent = layoutManager.parent;\n while (parent) {\n if (parent instanceof TabsLayoutManager) {\n return true;\n }\n parent = parent.parent;\n }\n\n return false;\n }, [layoutManager]);\n\n const onChangeLayout = useCallback(\n (newLayout: LayoutRegistryItem) => {\n const layoutParent = layoutManager.parent;\n\n if (layoutParent && isLayoutParent(layoutParent)) {\n layoutParent.switchLayout(newLayout.createFromLayout(layoutManager));\n }\n },\n [layoutManager]\n );\n\n const disabledOptions: LayoutRegistryItem[] = [];\n\n const radioOptions = options.map((opt) => {\n let description = opt.description;\n if (disableTabs && opt.id === TabsLayoutManager.descriptor.id) {\n description = t('dashboard.canvas-actions.disabled-nested-tabs', 'Tabs cannot be nested inside other tabs');\n disabledOptions.push(opt);\n }\n\n return {\n value: opt,\n label: opt.name,\n icon: opt.icon,\n description,\n ariaLabel: `layout-selection-option-${opt.name}`,\n };\n });\n\n return (\n <Box paddingBottom={2} display=\"flex\" grow={1} alignItems=\"center\">\n <RadioButtonGroup\n fullWidth\n value={layoutManager.descriptor}\n options={radioOptions}\n onChange={onChangeLayout}\n disabledOptions={disabledOptions}\n />\n </Box>\n );\n}\nexport function useLayoutCategory(layoutManager: DashboardLayoutManager) {\n return useMemo(() => {\n const isGridLayout = layoutManager.descriptor.isGridLayout;\n\n const groupLayout = new OptionsPaneCategoryDescriptor({\n title: t('dashboard.layout.common.group-layout', 'Group layout'),\n id: 'dash-group-layout',\n isOpenDefault: false,\n });\n\n const gridLayout = new OptionsPaneCategoryDescriptor({\n title: t('dashboard.layout.common.panel-layout', 'Panel layout'),\n id: 'dash-grid-layout',\n isOpenDefault: false,\n });\n\n gridLayout.addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: 'dash-grid-layout-option',\n skipField: true,\n render: () => <DashboardLayoutSelector layoutManager={layoutManager} />,\n })\n );\n\n if (isGridLayout) {\n groupLayout.props.disabledText = t(\n 'dashboard.layout.common.group-layout-disabled',\n 'No groups exists on this level'\n );\n } else {\n groupLayout.addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: 'dash-group-layout-option',\n skipField: true,\n render: () => <DashboardLayoutSelector layoutManager={layoutManager} />,\n })\n );\n\n gridLayout.props.disabledText = t(\n 'dashboard.layout.common.panel-layout-disabled',\n 'Select a row or tab to change panel layout options'\n );\n }\n\n if (layoutManager.getOptions) {\n for (const option of layoutManager.getOptions()) {\n gridLayout.addItem(option);\n }\n }\n\n return [groupLayout, gridLayout];\n }, [layoutManager]);\n}\n","export interface ScopeDashboardBindingSpec {\n dashboard: string;\n scope: string;\n}\n\nexport interface ScopeDashboardBindingStatus {\n dashboardTitle: string;\n groups?: string[];\n}\n\n// TODO: Use Resource from apiserver when we export the types\nexport interface ScopeDashboardBinding {\n metadata: {\n name: string;\n };\n spec: ScopeDashboardBindingSpec;\n status: ScopeDashboardBindingStatus;\n}\n\nexport type ScopeFilterOperator = 'equals' | 'not-equals' | 'regex-match' | 'regex-not-match' | 'one-of' | 'not-one-of';\nexport type EqualityOrMultiOperator = Extract<ScopeFilterOperator, 'equals' | 'not-equals' | 'one-of' | 'not-one-of'>;\n\nexport function isEqualityOrMultiOperator(value: string): value is EqualityOrMultiOperator {\n const operators = new Set(['equals', 'not-equals', 'one-of', 'not-one-of']);\n return operators.has(value);\n}\n\nexport const scopeFilterOperatorMap: Record<string, ScopeFilterOperator> = {\n '=': 'equals',\n '!=': 'not-equals',\n '=~': 'regex-match',\n '!~': 'regex-not-match',\n '=|': 'one-of',\n '!=|': 'not-one-of',\n};\n\nexport const reverseScopeFilterOperatorMap: Record<ScopeFilterOperator, string> = Object.fromEntries(\n Object.entries(scopeFilterOperatorMap).map(([symbol, operator]) => [operator, symbol])\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n) as Record<ScopeFilterOperator, string>;\n\nexport interface ScopeSpecFilter {\n key: string;\n value: string;\n // values is used for operators that support multiple values (e.g. one-of, not-one-of)\n values?: string[];\n operator: ScopeFilterOperator;\n}\n\nexport interface ScopeSpec {\n title: string;\n // Used to display the title next to the selected scope and expand the selector to the proper path.\n // This will override whichever is selected from in the selector.\n defaultPath?: string[];\n filters?: ScopeSpecFilter[];\n}\n\n// TODO: Use Resource from apiserver when we export the types\nexport interface Scope {\n metadata: {\n // Name is actually the ID of the resource, use spec.title for user readable string\n name: string;\n };\n spec: ScopeSpec;\n}\n\nexport type ScopeNodeNodeType = 'container' | 'leaf';\nexport type ScopeNodeLinkType = 'scope';\n\nexport interface ScopeNodeSpec {\n nodeType: ScopeNodeNodeType;\n title: string;\n subTitle?: string;\n description?: string;\n\n // If true for a scope category/type, it means only single child can be selected at a time.\n disableMultiSelect?: boolean;\n\n // Id of a scope this node links to. Can be blank for nodes only representing category/type.\n linkId?: string;\n // Right now only scope can be linked but in the future this may be other types.\n linkType?: ScopeNodeLinkType;\n\n // Id of the parent node.\n parentName?: string;\n\n // Redirect to a specific path when this node is selected.\n redirectPath?: string;\n}\n\n// TODO: Use Resource from apiserver when we export the types\n// Scope node represents a node in a tree that is shown to users. Each node can be a category/type with more children\n// nodes and/or (meaning some can be both) a node representing a selectable scope. Each node can link to a scope but\n// multiple nodes can link to the same scope, meaning a scope is part of multiple categories/types.\nexport interface ScopeNode {\n metadata: {\n // Name is actually the ID of the resource, use spec.title for user readable string\n name: string;\n };\n spec: ScopeNodeSpec;\n}\n","import { css } from '@emotion/css';\nimport { ReactNode } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\ninterface Props {\n title: string | ReactNode;\n}\n\nexport const TimeZoneTitle = ({ title }: Props) => {\n const styles = useStyles2(getStyles);\n\n if (!title) {\n return null;\n }\n\n return <span className={styles.title}>{title}</span>;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n title: css({\n fontWeight: theme.typography.fontWeightRegular,\n textOverflow: 'ellipsis',\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { autoUpdate, useFloating } from '@floating-ui/react';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { useOverlay } from '@react-aria/overlays';\nimport { FormEvent, ReactNode, useCallback, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport Calendar from 'react-calendar';\nimport { useMedia } from 'react-use';\n\nimport {\n dateTimeFormat,\n DateTime,\n dateTime,\n GrafanaTheme2,\n isDateTime,\n dateTimeForTimeZone,\n getTimeZone,\n TimeZone,\n} from '@grafana/data';\nimport { Components } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { getPositioningMiddleware } from '../../../utils/floating';\nimport { Button } from '../../Button/Button';\nimport { InlineField } from '../../Forms/InlineField';\nimport { Icon } from '../../Icon/Icon';\nimport { Input } from '../../Input/Input';\nimport { Stack } from '../../Layout/Stack/Stack';\nimport { getModalStyles } from '../../Modal/getModalStyles';\nimport { Portal } from '../../Portal/Portal';\nimport { TimeOfDayPicker, POPUP_CLASS_NAME } from '../TimeOfDayPicker';\nimport { getBodyStyles } from '../TimeRangePicker/CalendarBody';\nimport { isValid } from '../utils';\nimport { adjustDateForReactCalendar } from '../utils/adjustDateForReactCalendar';\n\nexport interface Props {\n /** Input date for the component */\n date?: DateTime;\n /** Callback for returning the selected date */\n onChange: (date?: DateTime) => void;\n /** label for the input field */\n label?: ReactNode;\n /** Set the latest selectable date */\n maxDate?: Date;\n /** Set the minimum selectable date */\n minDate?: Date;\n /** Display seconds on the time picker */\n showSeconds?: boolean;\n /** Set the hours that can't be selected */\n disabledHours?: () => number[];\n /** Set the minutes that can't be selected */\n disabledMinutes?: () => number[];\n /** Set the seconds that can't be selected */\n disabledSeconds?: () => number[];\n /** Can input be cleared/have empty values */\n clearable?: boolean;\n /** Custom timezone for the date/time display */\n timeZone?: TimeZone;\n}\n\n/**\n * A component for selecting a date *and* time.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/date-time-pickers-datetimepicker--docs\n */\nexport const DateTimePicker = ({\n date,\n maxDate,\n minDate,\n label,\n onChange,\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n timeZone,\n showSeconds = true,\n clearable = false,\n}: Props) => {\n const [isOpen, setOpen] = useState(false);\n\n const ref = useRef<HTMLDivElement>(null);\n const { overlayProps, underlayProps } = useOverlay(\n {\n onClose: () => setOpen(false),\n isDismissable: true,\n isOpen,\n shouldCloseOnInteractOutside: (element) => {\n const popupElement = document.getElementsByClassName(POPUP_CLASS_NAME)[0];\n return !(popupElement && popupElement.contains(element));\n },\n },\n ref\n );\n const { dialogProps } = useDialog({}, ref);\n\n const theme = useTheme2();\n const { modalBackdrop } = useStyles2(getModalStyles);\n const isFullscreen = useMedia(`(min-width: ${theme.breakpoints.values.lg}px)`);\n const placement = 'bottom-start';\n const styles = useStyles2(getStyles);\n\n // the order of middleware is important!\n // see https://floating-ui.com/docs/arrow#order\n const middleware = getPositioningMiddleware(placement);\n\n const { refs, floatingStyles } = useFloating({\n open: isOpen,\n placement,\n onOpenChange: setOpen,\n middleware,\n whileElementsMounted: autoUpdate,\n strategy: 'fixed',\n });\n\n const onApply = useCallback(\n (date: DateTime) => {\n setOpen(false);\n onChange(date);\n },\n [onChange]\n );\n\n const onOpen = useCallback(\n (event: FormEvent<HTMLElement>) => {\n event.preventDefault();\n setOpen(true);\n },\n [setOpen]\n );\n\n return (\n <div data-testid=\"date-time-picker\" style={{ position: 'relative' }}>\n <DateTimeInput\n date={date}\n onChange={onChange}\n isFullscreen={isFullscreen}\n onOpen={onOpen}\n label={label}\n ref={refs.setReference}\n showSeconds={showSeconds}\n clearable={clearable}\n timeZone={timeZone}\n />\n {isOpen ? (\n isFullscreen ? (\n <Portal>\n <FocusScope contain autoFocus restoreFocus>\n <div ref={ref} {...overlayProps} {...dialogProps}>\n <DateTimeCalendar\n date={date}\n onChange={onApply}\n isFullscreen={true}\n onClose={() => setOpen(false)}\n maxDate={maxDate}\n minDate={minDate}\n ref={refs.setFloating}\n style={floatingStyles}\n showSeconds={showSeconds}\n disabledHours={disabledHours}\n disabledMinutes={disabledMinutes}\n disabledSeconds={disabledSeconds}\n timeZone={timeZone}\n />\n </div>\n </FocusScope>\n </Portal>\n ) : (\n <Portal>\n <div className={modalBackdrop} {...underlayProps} />\n <FocusScope contain autoFocus restoreFocus>\n <div ref={ref} {...overlayProps} {...dialogProps}>\n <div className={styles.modal}>\n <DateTimeCalendar\n date={date}\n maxDate={maxDate}\n minDate={minDate}\n onChange={onApply}\n isFullscreen={false}\n onClose={() => setOpen(false)}\n showSeconds={showSeconds}\n disabledHours={disabledHours}\n disabledMinutes={disabledMinutes}\n disabledSeconds={disabledSeconds}\n timeZone={timeZone}\n />\n </div>\n </div>\n </FocusScope>\n </Portal>\n )\n ) : null}\n </div>\n );\n};\n\ninterface DateTimeCalendarProps extends Omit<Props, 'label' | 'clearable' | 'onChange'> {\n onChange: (date: DateTime) => void;\n onClose: () => void;\n isFullscreen: boolean;\n style?: React.CSSProperties;\n}\n\ntype InputProps = Pick<Props, 'onChange' | 'label' | 'date' | 'showSeconds' | 'clearable' | 'timeZone'> & {\n isFullscreen: boolean;\n onOpen: (event: FormEvent<HTMLElement>) => void;\n};\n\ntype InputState = {\n value: string;\n invalid: boolean;\n};\n\nconst DateTimeInput = React.forwardRef<HTMLInputElement, InputProps>(\n ({ date, label, onChange, onOpen, timeZone, showSeconds = true, clearable = false }, ref) => {\n const styles = useStyles2(getStyles);\n const format = showSeconds ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm';\n const [internalDate, setInternalDate] = useState<InputState>(() => {\n return {\n value: date ? dateTimeFormat(date, { timeZone }) : !clearable ? dateTimeFormat(dateTime(), { timeZone }) : '',\n invalid: false,\n };\n });\n\n useEffect(() => {\n if (date) {\n const formattedDate = dateTimeFormat(date, { format, timeZone });\n setInternalDate({\n invalid: !isValid(formattedDate),\n value: isDateTime(date) ? formattedDate : date,\n });\n }\n }, [date, format, timeZone]);\n\n const onChangeDate = useCallback((event: FormEvent<HTMLInputElement>) => {\n const isInvalid = !isValid(event.currentTarget.value);\n setInternalDate({\n value: event.currentTarget.value,\n invalid: isInvalid,\n });\n }, []);\n\n const onBlur = useCallback(() => {\n if (!internalDate.invalid && internalDate.value) {\n const date = dateTimeForTimeZone(getTimeZone({ timeZone }), internalDate.value);\n onChange(date);\n }\n }, [internalDate, onChange, timeZone]);\n\n const clearInternalDate = useCallback(() => {\n setInternalDate({ value: '', invalid: false });\n onChange();\n }, [onChange]);\n\n const icon = (\n <Button\n aria-label={t('grafana-ui.date-time-picker.calendar-icon-label', 'Time picker')}\n icon=\"calendar-alt\"\n variant=\"secondary\"\n onClick={onOpen}\n />\n );\n return (\n <InlineField label={label} invalid={!!(internalDate.value && internalDate.invalid)} className={styles.field}>\n <Input\n onChange={onChangeDate}\n addonAfter={icon}\n value={internalDate.value}\n onBlur={onBlur}\n data-testid={Components.DateTimePicker.input}\n placeholder={t('grafana-ui.date-time-picker.select-placeholder', 'Select date/time')}\n ref={ref}\n suffix={\n clearable &&\n internalDate.value && <Icon name=\"times\" className={styles.clearIcon} onClick={clearInternalDate} />\n }\n />\n </InlineField>\n );\n }\n);\n\nDateTimeInput.displayName = 'DateTimeInput';\n\nconst DateTimeCalendar = React.forwardRef<HTMLDivElement, DateTimeCalendarProps>(\n (\n {\n date,\n onClose,\n onChange,\n isFullscreen,\n maxDate,\n minDate,\n style,\n showSeconds = true,\n disabledHours,\n disabledMinutes,\n disabledSeconds,\n timeZone,\n },\n ref\n ) => {\n const calendarStyles = useStyles2(getBodyStyles);\n const styles = useStyles2(getStyles);\n\n // need to keep these 2 separate in state since react-calendar doesn't support different timezones\n const [timeOfDayDateTime, setTimeOfDayDateTime] = useState(() => {\n if (date && date.isValid()) {\n return dateTimeForTimeZone(getTimeZone({ timeZone }), date);\n }\n\n return dateTimeForTimeZone(getTimeZone({ timeZone }), new Date());\n });\n const [reactCalendarDate, setReactCalendarDate] = useState<Date>(() => {\n if (date && date.isValid()) {\n return adjustDateForReactCalendar(date.toDate(), getTimeZone({ timeZone }));\n }\n\n return adjustDateForReactCalendar(new Date(), getTimeZone({ timeZone }));\n });\n\n const onChangeDate = useCallback<NonNullable<React.ComponentProps<typeof Calendar>['onChange']>>((date) => {\n if (date && !Array.isArray(date)) {\n setReactCalendarDate(date);\n }\n }, []);\n\n const onChangeTime = useCallback((date: DateTime) => {\n setTimeOfDayDateTime(date);\n }, []);\n\n // here we need to stitch the 2 date objects back together\n const handleApply = () => {\n // we take the date that's set by TimeOfDayPicker\n const newDate = dateTime(timeOfDayDateTime);\n\n // and apply the date/month/year set by react-calendar\n newDate.set('date', reactCalendarDate.getDate());\n newDate.set('month', reactCalendarDate.getMonth());\n newDate.set('year', reactCalendarDate.getFullYear());\n\n onChange(newDate);\n };\n\n return (\n <div className={cx(styles.container, { [styles.fullScreen]: isFullscreen })} style={style} ref={ref}>\n <Calendar\n next2Label={null}\n prev2Label={null}\n value={reactCalendarDate}\n nextLabel={<Icon name=\"angle-right\" />}\n nextAriaLabel={t('grafana-ui.date-time-picker.next-label', 'Next month')}\n prevLabel={<Icon name=\"angle-left\" />}\n prevAriaLabel={t('grafana-ui.date-time-picker.previous-label', 'Previous month')}\n onChange={onChangeDate}\n locale=\"en\"\n className={calendarStyles.body}\n tileClassName={calendarStyles.title}\n maxDate={maxDate}\n minDate={minDate}\n />\n <div className={styles.time}>\n <TimeOfDayPicker\n showSeconds={showSeconds}\n onChange={onChangeTime}\n value={timeOfDayDateTime}\n disabledHours={disabledHours}\n disabledMinutes={disabledMinutes}\n disabledSeconds={disabledSeconds}\n />\n </div>\n <Stack>\n <Button type=\"button\" onClick={handleApply}>\n <Trans i18nKey=\"grafana-ui.date-time-picker.apply\">Apply</Trans>\n </Button>\n <Button variant=\"secondary\" type=\"button\" onClick={onClose}>\n <Trans i18nKey=\"grafana-ui.date-time-picker.cancel\">Cancel</Trans>\n </Button>\n </Stack>\n </div>\n );\n }\n);\n\nDateTimeCalendar.displayName = 'DateTimeCalendar';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n padding: theme.spacing(1),\n border: `1px ${theme.colors.border.weak} solid`,\n borderRadius: theme.shape.radius.default,\n backgroundColor: theme.colors.background.primary,\n zIndex: theme.zIndex.modal,\n }),\n fullScreen: css({\n position: 'absolute',\n }),\n time: css({\n marginBottom: theme.spacing(2),\n }),\n modal: css({\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: theme.zIndex.modal,\n maxWidth: '280px',\n }),\n clearIcon: css({\n cursor: 'pointer',\n }),\n field: css({\n marginBottom: 0,\n width: '100%',\n }),\n});\n","import { skipToken } from '@reduxjs/toolkit/query';\n\nimport { OrgRole } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { RepositoryViewList, useGetFrontendSettingsQuery } from 'app/api/clients/provisioning/v0alpha1';\nimport { contextSrv } from 'app/core/core';\n\nexport function useIsProvisionedInstance(settings?: RepositoryViewList) {\n const hasNoRole = contextSrv.user.orgRole === OrgRole.None;\n const skip = !config.featureToggles.provisioning || hasNoRole;\n\n const settingsQuery = useGetFrontendSettingsQuery(settings || skip ? skipToken : undefined);\n if (!settings) {\n settings = settingsQuery.data;\n }\n return settings?.items?.some((item) => item.target === 'instance');\n}\n","import { QueryResultMeta } from '../types/data';\nimport { Field, FieldType, DataFrame, TIME_SERIES_VALUE_FIELD_NAME } from '../types/dataFrame';\n\nimport { guessFieldTypeForField } from './processDataFrame';\n\n/**\n * The ArrayDataFrame takes an array of objects and presents it as a DataFrame\n *\n * @deprecated use arrayToDataFrame\n */\nexport class ArrayDataFrame<T = any> implements DataFrame {\n fields: Field[] = [];\n length = 0;\n name?: string;\n refId?: string;\n meta?: QueryResultMeta;\n\n constructor(source: T[], names?: string[]) {\n return arrayToDataFrame(source, names); // returns a standard DataFrame\n }\n}\n\n/**\n * arrayToDataFrame will convert any array into a DataFrame.\n * @param source - can be an array of objects or an array of simple values.\n * @param names - will be used for ordering of fields. Source needs to be array of objects if names are provided.\n *\n * @public\n */\nexport function arrayToDataFrame(source: Array<Record<string, unknown>> | unknown[], names?: string[]): DataFrame {\n const df: DataFrame = {\n fields: [],\n length: source.length,\n };\n if (!source?.length) {\n return df;\n }\n\n // If names are provided then we assume the source is an array of objects with the names as keys (field names). This\n // makes ordering of the fields predictable.\n if (names) {\n if (!isObjectArray(source)) {\n throw new Error('source is not an array of objects');\n }\n\n for (const name of names) {\n df.fields.push(\n makeFieldFromValues(\n name,\n source.map((v) => (v ? v[name] : v))\n )\n );\n }\n return df;\n }\n\n const firstDefined = source.find((v) => v); // first not null|undefined\n // This means if the source is lots of null/undefined values we throw that away and return empty dataFrame. This is\n // different to how we preserve null/undefined values if there is some defined rows. Not sure this inconsistency\n // is by design or not.\n if (firstDefined === null) {\n return df;\n }\n\n // If is an array of objects we use the keys as field names.\n if (isObjectArray(source)) {\n // We need to do this to please TS. We know source is array of objects and that there is some object in there but\n // TS still thinks it can all be undefined|nulls.\n const first = source.find((v) => v);\n df.fields = Object.keys(first || {}).map((name) => {\n return makeFieldFromValues(\n name,\n source.map((v) => (v ? v[name] : v))\n );\n });\n } else {\n // Otherwise source should be an array of simple values, so we create single field data frame.\n df.fields.push(makeFieldFromValues(TIME_SERIES_VALUE_FIELD_NAME, source));\n }\n return df;\n}\n\nfunction makeFieldFromValues(name: string, values: unknown[]): Field {\n const f = { name, config: {}, values, type: FieldType.other };\n f.type = guessFieldTypeForField(f) ?? FieldType.other;\n return f;\n}\n\nfunction isObjectArray(arr: unknown[]): arr is Array<Record<string, unknown> | null | undefined> {\n const first = arr.find((v) => v); // first not null|undefined\n return arr.length > 0 && typeof first === 'object';\n}\n","import { config } from '../config';\nimport { locationService } from '../services';\nimport { getEchoSrv, EchoEventType } from '../services/EchoSrv';\n\nimport {\n ExperimentViewEchoEvent,\n InteractionEchoEvent,\n MetaAnalyticsEvent,\n MetaAnalyticsEventPayload,\n PageviewEchoEvent,\n} from './types';\n\n/**\n * Helper function to report meta analytics to the {@link EchoSrv}.\n *\n * @public\n */\nexport const reportMetaAnalytics = (payload: MetaAnalyticsEventPayload) => {\n getEchoSrv().addEvent<MetaAnalyticsEvent>({\n type: EchoEventType.MetaAnalytics,\n payload,\n });\n};\n\n/**\n * Helper function to report pageview events to the {@link EchoSrv}.\n *\n * @public\n */\nexport const reportPageview = () => {\n const location = locationService.getLocation();\n const page = `${config.appSubUrl ?? ''}${location.pathname}${location.search}${location.hash}`;\n getEchoSrv().addEvent<PageviewEchoEvent>({\n type: EchoEventType.Pageview,\n payload: {\n page,\n },\n });\n};\n\n/**\n * Helper function to report interaction events to the {@link EchoSrv}.\n *\n * @public\n */\nexport const reportInteraction = (interactionName: string, properties?: Record<string, unknown>) => {\n // get static reporting context and append it to properties\n if (config.reportingStaticContext && config.reportingStaticContext instanceof Object) {\n properties = { ...properties, ...config.reportingStaticContext };\n }\n getEchoSrv().addEvent<InteractionEchoEvent>({\n type: EchoEventType.Interaction,\n payload: {\n interactionName,\n properties,\n },\n });\n};\n\n/**\n * Helper function to report experimentview events to the {@link EchoSrv}.\n *\n * @public\n */\nexport const reportExperimentView = (id: string, group: string, variant: string) => {\n getEchoSrv().addEvent<ExperimentViewEchoEvent>({\n type: EchoEventType.ExperimentView,\n payload: {\n experimentId: id,\n experimentGroup: group,\n experimentVariant: variant,\n },\n });\n};\n","import { css } from '@emotion/css';\nimport { CellProps, HeaderProps } from 'react-table';\n\nimport { t } from '@grafana/i18n';\n\nimport { IconButton } from '../../IconButton/IconButton';\n\nconst expanderContainerStyles = css({\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n});\n\nexport function ExpanderCell<K extends object>({ row, __rowID }: CellProps<K, void>) {\n return (\n <div className={expanderContainerStyles}>\n <IconButton\n tooltip={t('grafana-ui.interactive-table.expand-row-tooltip', 'Toggle row expanded')}\n aria-controls={__rowID}\n // @ts-expect-error react-table doesn't ship with useExpanded types and we can't use declaration merging without affecting the table viz\n name={row.isExpanded ? 'angle-down' : 'angle-right'}\n // @ts-expect-error same as the line above\n aria-expanded={row.isExpanded}\n // @ts-expect-error same as the line above\n {...row.getToggleRowExpandedProps()}\n size=\"lg\"\n />\n </div>\n );\n}\n\nexport function ExpanderHeader<K extends object>({ isAllRowsExpanded, toggleAllRowsExpanded }: HeaderProps<K>) {\n return (\n <div className={expanderContainerStyles}>\n <IconButton\n aria-label={\n !isAllRowsExpanded\n ? t('grafana-ui.interactive-table.aria-label-expand-all', 'Expand all rows')\n : t('grafana-ui.interactive-table.aria-label-collapse-all', 'Collapse all rows')\n }\n name={!isAllRowsExpanded ? 'table-expand-all' : 'table-collapse-all'}\n onClick={() => toggleAllRowsExpanded()}\n size={'lg'}\n tooltip={\n !isAllRowsExpanded\n ? t('grafana-ui.interactive-table.tooltip-expand-all', 'Expand all rows')\n : t('grafana-ui.interactive-table.tooltip-collapse-all', 'Collapse all rows')\n }\n variant={'secondary'}\n />\n </div>\n );\n}\n","import { Column as RTColumn } from 'react-table';\n\nimport { ExpanderCell, ExpanderHeader } from './Expander';\nimport { Column } from './types';\n\nexport const EXPANDER_CELL_ID = '__expander' as const;\n\ntype InternalColumn<T extends object> = RTColumn<T> & {\n visible?: (data: T[]) => boolean;\n};\n\n// Returns the columns in a \"react-table\" acceptable format\nexport function getColumns<K extends object>(\n columns: Array<Column<K>>,\n showExpandAll = false\n): Array<InternalColumn<K>> {\n return [\n {\n id: EXPANDER_CELL_ID,\n Cell: ExpanderCell,\n ...(showExpandAll && {\n Header: ExpanderHeader,\n }),\n disableSortBy: true,\n width: 0,\n },\n // @ts-expect-error react-table expects each column key(id) to have data associated with it and therefore complains about\n // column.id being possibly undefined and not keyof T (where T is the data object)\n // We do not want to be that strict as we simply pass undefined to cells that do not have data associated with them.\n ...columns.map((column) => ({\n id: column.id,\n accessor: column.id,\n Header: column.header || (() => null),\n sortType: column.sortType || 'alphanumeric',\n disableSortBy: !Boolean(column.sortType),\n width: column.disableGrow ? 0 : undefined,\n visible: column.visible,\n ...(column.cell && { Cell: column.cell }),\n })),\n ];\n}\n","import { css, cx } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { Fragment, ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport {\n HeaderGroup,\n PluginHook,\n Row,\n SortingRule,\n TableOptions,\n useExpanded,\n usePagination,\n useSortBy,\n useTable,\n} from 'react-table';\n\nimport { GrafanaTheme2, IconName, isTruthy } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\nimport { Pagination } from '../Pagination/Pagination';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { PopoverContent } from '../Tooltip/types';\n\nimport { Column } from './types';\nimport { EXPANDER_CELL_ID, getColumns } from './utils';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const rowHoverBg = theme.colors.emphasize(theme.colors.background.primary, 0.03);\n\n return {\n container: css({\n display: 'flex',\n gap: theme.spacing(2),\n flexDirection: 'column',\n width: '100%',\n overflowX: 'auto',\n }),\n cell: css({\n padding: theme.spacing(1),\n minWidth: theme.spacing(3),\n }),\n table: css({\n borderRadius: theme.shape.radius.default,\n width: '100%',\n }),\n disableGrow: css({\n width: 0,\n }),\n header: css({\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n minWidth: theme.spacing(3),\n '&, & > button': {\n position: 'relative',\n whiteSpace: 'nowrap',\n padding: theme.spacing(1),\n },\n '& > button': {\n '&:after': {\n content: '\"\\\\00a0\"',\n },\n width: '100%',\n height: '100%',\n background: 'none',\n border: 'none',\n paddingRight: theme.spacing(2.5),\n textAlign: 'left',\n fontWeight: theme.typography.fontWeightMedium,\n },\n }),\n row: css({\n label: 'row',\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n\n '&:hover': {\n backgroundColor: rowHoverBg,\n },\n\n '&:last-child': {\n borderBottom: 0,\n },\n }),\n expandedRow: css({\n label: 'expanded-row-content',\n borderBottom: 'none',\n }),\n expandedContentCell: css({\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n position: 'relative',\n padding: theme.spacing(2, 2, 2, 5),\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n width: '1px',\n top: 0,\n left: '16px',\n bottom: theme.spacing(2),\n background: theme.colors.border.medium,\n },\n }),\n expandedContentRow: css({\n label: 'expanded-row-content',\n }),\n sortableHeader: css({\n /* increases selector's specificity so that it always takes precedence over default styles */\n '&&': {\n padding: 0,\n },\n }),\n };\n};\n\nexport type InteractiveTableHeaderTooltip = {\n content: PopoverContent;\n iconName?: IconName;\n};\n\nexport type FetchDataArgs<Data> = { sortBy: Array<SortingRule<Data>> };\nexport type FetchDataFunc<Data> = ({ sortBy }: FetchDataArgs<Data>) => void;\n\ninterface BaseProps<TableData extends object> {\n className?: string;\n /**\n * Table's columns definition. Must be memoized.\n */\n columns: Array<Column<TableData>>;\n /**\n * The data to display in the table. Must be memoized.\n */\n data: TableData[];\n /**\n * Must return a unique id for each row\n */\n getRowId: TableOptions<TableData>['getRowId'];\n /**\n * Optional tooltips for the table headers. The key must match the column id.\n */\n headerTooltips?: Record<string, InteractiveTableHeaderTooltip>;\n /**\n * Number of rows per page. A value of zero disables pagination. Defaults to 0.\n * A React hooks error will be thrown if pageSize goes from greater than 0 to 0 or vice versa. If enabling pagination,\n * make sure pageSize remains a non-zero value.\n */\n pageSize?: number;\n /**\n * A custom function to fetch data when the table is sorted. If not provided, the table will be sorted client-side.\n * It's important for this function to have a stable identity, e.g. being wrapped into useCallback to prevent unnecessary\n * re-renders of the table.\n */\n fetchData?: FetchDataFunc<TableData>;\n /**\n * Optional way to set how the table is sorted from the beginning. Must be memoized.\n */\n initialSortBy?: Array<SortingRule<TableData>>;\n}\n\ninterface WithExpandableRow<TableData extends object> extends BaseProps<TableData> {\n /**\n * Render function for the expanded row. if not provided, the tables rows will not be expandable.\n */\n renderExpandedRow: (row: TableData) => ReactNode;\n /**\n * Whether to show the \"Expand all\" button. Depends on renderExpandedRow to be provided. Defaults to false.\n */\n showExpandAll?: boolean;\n}\n\ninterface WithoutExpandableRow<TableData extends object> extends BaseProps<TableData> {\n renderExpandedRow?: never;\n showExpandAll?: never;\n}\n\ntype Props<TableData extends object> = WithExpandableRow<TableData> | WithoutExpandableRow<TableData>;\n\n/**\n * The InteractiveTable is used to display and select data efficiently. It allows for the display and modification of detailed information.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-interactivetable--docs\n *\n * @alpha\n */\nexport function InteractiveTable<TableData extends object>({\n className,\n columns,\n data,\n getRowId,\n headerTooltips,\n pageSize = 0,\n renderExpandedRow,\n showExpandAll = false,\n fetchData,\n initialSortBy = [],\n}: Props<TableData>) {\n const styles = useStyles2(getStyles);\n const tableColumns = useMemo(() => {\n return getColumns<TableData>(columns, showExpandAll);\n }, [columns, showExpandAll]);\n const id = useUniqueId();\n const getRowHTMLID = useCallback(\n (row: Row<TableData>) => {\n return `${id}-${row.id}`.replace(/\\s/g, '');\n },\n [id]\n );\n\n const tableHooks: Array<PluginHook<TableData>> = [useSortBy, useExpanded];\n\n const multiplePages = data.length > pageSize;\n const paginationEnabled = pageSize > 0;\n\n if (paginationEnabled) {\n tableHooks.push(usePagination);\n }\n\n const tableInstance = useTable<TableData>(\n {\n columns: tableColumns,\n data,\n autoResetExpanded: false,\n autoResetSortBy: false,\n disableMultiSort: true,\n // If fetchData is provided, we disable client-side sorting\n manualSortBy: Boolean(fetchData),\n getRowId,\n initialState: {\n hiddenColumns: [\n !renderExpandedRow && EXPANDER_CELL_ID,\n ...tableColumns\n .filter((col) => !(col.visible ? col.visible(data) : true))\n .map((c) => c.id)\n .filter(isTruthy),\n ].filter(isTruthy),\n sortBy: initialSortBy,\n },\n },\n ...tableHooks\n );\n\n const { getTableProps, getTableBodyProps, headerGroups, prepareRow } = tableInstance;\n\n const { sortBy } = tableInstance.state;\n useEffect(() => {\n if (fetchData) {\n fetchData({ sortBy });\n }\n }, [sortBy, fetchData]);\n\n useEffect(() => {\n if (paginationEnabled) {\n tableInstance.setPageSize(pageSize);\n }\n }, [paginationEnabled, pageSize, tableInstance.setPageSize, tableInstance]);\n\n return (\n <div className={styles.container}>\n <table {...getTableProps()} className={cx(styles.table, className)}>\n <thead>\n {headerGroups.map((headerGroup) => {\n const { key, ...headerRowProps } = headerGroup.getHeaderGroupProps();\n\n return (\n <tr key={key} {...headerRowProps}>\n {headerGroup.headers.map((column) => {\n const { key, ...headerCellProps } = column.getHeaderProps();\n\n const headerTooltip = headerTooltips?.[column.id];\n\n return (\n <th\n key={key}\n className={cx(styles.header, {\n [styles.disableGrow]: column.width === 0,\n [styles.sortableHeader]: column.canSort,\n })}\n {...headerCellProps}\n {...(column.isSorted && { 'aria-sort': column.isSortedDesc ? 'descending' : 'ascending' })}\n >\n <ColumnHeader column={column} headerTooltip={headerTooltip} />\n </th>\n );\n })}\n </tr>\n );\n })}\n </thead>\n\n <tbody {...getTableBodyProps()}>\n {(paginationEnabled ? tableInstance.page : tableInstance.rows).map((row) => {\n prepareRow(row);\n\n const { key, ...otherRowProps } = row.getRowProps();\n const rowId = getRowHTMLID(row);\n // @ts-expect-error react-table doesn't ship with useExpanded types, and we can't use declaration merging without affecting the table viz\n const isExpanded = row.isExpanded;\n\n return (\n <Fragment key={key}>\n <tr {...otherRowProps} className={cx(styles.row, isExpanded && styles.expandedRow)}>\n {row.cells.map((cell) => {\n const { key, ...otherCellProps } = cell.getCellProps();\n return (\n <td className={styles.cell} key={key} {...otherCellProps}>\n {cell.render('Cell', { __rowID: rowId })}\n </td>\n );\n })}\n </tr>\n {isExpanded && renderExpandedRow && (\n <tr {...otherRowProps} id={rowId} className={styles.expandedContentRow}>\n <td className={styles.expandedContentCell} colSpan={row.cells.length}>\n {renderExpandedRow(row.original)}\n </td>\n </tr>\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n {paginationEnabled && multiplePages && (\n <span>\n <Pagination\n currentPage={tableInstance.state.pageIndex + 1}\n numberOfPages={tableInstance.pageOptions.length}\n onNavigate={(toPage) => tableInstance.gotoPage(toPage - 1)}\n />\n </span>\n )}\n </div>\n );\n}\n\nconst useUniqueId = () => {\n return useMemo(() => uniqueId('InteractiveTable'), []);\n};\n\nconst getColumnHeaderStyles = (theme: GrafanaTheme2) => ({\n sortIcon: css({\n position: 'absolute',\n top: theme.spacing(1),\n }),\n headerTooltipIcon: css({\n marginLeft: theme.spacing(0.5),\n }),\n});\n\nfunction ColumnHeader<T extends object>({\n column: { canSort, render, isSorted, isSortedDesc, getSortByToggleProps },\n headerTooltip,\n}: {\n column: HeaderGroup<T>;\n headerTooltip?: InteractiveTableHeaderTooltip;\n}) {\n const styles = useStyles2(getColumnHeaderStyles);\n const { onClick } = getSortByToggleProps();\n\n const children = (\n <>\n {render('Header')}\n {headerTooltip && (\n <Tooltip theme=\"info-alt\" content={headerTooltip.content} placement=\"top-end\">\n <Icon\n className={styles.headerTooltipIcon}\n name={headerTooltip.iconName || 'info-circle'}\n data-testid={'header-tooltip-icon'}\n />\n </Tooltip>\n )}\n {isSorted && (\n <span aria-hidden=\"true\" className={styles.sortIcon}>\n <Icon name={isSortedDesc ? 'angle-down' : 'angle-up'} />\n </span>\n )}\n </>\n );\n\n if (canSort) {\n return (\n <button type=\"button\" onClick={onClick}>\n {children}\n </button>\n );\n }\n\n return children;\n}\n","import { FeatureToggles } from '@grafana/data';\n\ntype FeatureToggleName = keyof FeatureToggles;\n\n/**\n * Check a featureToggle\n * @param featureName featureToggle name\n * @param def default value if featureToggles aren't defined, false if not provided\n * @returns featureToggle value or def.\n */\nexport function getFeatureToggle(featureName: FeatureToggleName, def = false) {\n return window.grafanaBootData?.settings.featureToggles[featureName] ?? def;\n}\n","import { useEffect, useRef } from 'react';\nimport type { DataSet } from 'vis-data';\nimport type { Network, Options, Data, Edge, Node } from 'vis-network';\n\nimport { GraphEdge, GraphNode } from './utils';\n\ninterface OwnProps {\n nodes: GraphNode[];\n edges: GraphEdge[];\n direction?: 'UD' | 'DU' | 'LR' | 'RL';\n width?: string;\n height?: string;\n}\n\ninterface ConnectedProps {}\n\ninterface DispatchProps {}\n\nexport type Props = OwnProps & ConnectedProps & DispatchProps;\n\nexport const NetworkGraph = ({ nodes, edges, direction, width, height }: Props) => {\n const network = useRef<Network | null>(null);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const createNetwork = async () => {\n const visJs = await import(/* webpackChunkName: \"vis-network\" */ 'vis-network');\n const visData = await import(/* webpackChunkName: \"vis-data\" */ 'vis-data');\n const data: Data = {\n nodes: toVisNetworkNodes(visData, nodes),\n edges: toVisNetworkEdges(visData, edges),\n };\n const options: Options = {\n width: '100%',\n height: '100%',\n autoResize: true,\n layout: {\n improvedLayout: true,\n hierarchical: {\n enabled: true,\n direction: direction ?? 'DU',\n sortMethod: 'directed',\n },\n },\n interaction: {\n navigationButtons: true,\n dragNodes: false,\n },\n };\n if (ref.current) {\n network.current = new visJs.Network(ref.current, data, options);\n }\n };\n\n createNetwork();\n }, [direction, edges, nodes]);\n\n return (\n <div>\n <div ref={ref} style={{ width: width ?? '100%', height: height ?? '60vh' }} />\n </div>\n );\n};\n\nfunction toVisNetworkNodes(visData: any, nodes: GraphNode[]): DataSet<Node> {\n const nodesWithStyle = nodes.map((node) => ({\n ...node,\n shape: 'box',\n }));\n return new visData.DataSet(nodesWithStyle);\n}\n\nfunction toVisNetworkEdges(visData: any, edges: GraphEdge[]): DataSet<Edge> {\n const edgesWithStyle = edges.map((edge) => ({ ...edge, arrows: 'to', dashes: true }));\n return new visData.DataSet(edgesWithStyle);\n}\n","import { useCallback, useState } from 'react';\n\nimport { Modal } from '@grafana/ui';\n\nimport { NetworkGraph, Props as NetWorkGraphProps } from './NetworkGraph';\nimport { GraphEdge, GraphNode } from './utils';\n\ninterface NetworkGraphModalApi {\n showModal: () => void;\n}\n\ninterface OwnProps extends Pick<NetWorkGraphProps, 'direction'> {\n show: boolean;\n title: string;\n nodes: GraphNode[];\n edges: GraphEdge[];\n children: (api: NetworkGraphModalApi) => JSX.Element;\n}\n\ninterface ConnectedProps {}\n\ninterface DispatchProps {}\n\ntype Props = OwnProps & ConnectedProps & DispatchProps;\n\nexport function NetworkGraphModal({ edges, nodes, show: propsShow, title, children }: Props): JSX.Element {\n const [show, setShow] = useState(propsShow);\n const showModal = useCallback(() => setShow(true), [setShow]);\n const onClose = useCallback(() => setShow(false), [setShow]);\n\n return (\n <>\n <Modal\n isOpen={show}\n title={title}\n icon=\"info-circle\"\n iconTooltip=\"The graph can be moved, zoomed in, and zoomed out.\"\n onClickBackdrop={onClose}\n onDismiss={onClose}\n >\n <NetworkGraph nodes={nodes} edges={edges} />\n </Modal>\n {children({ showModal })}\n </>\n );\n}\n","import { Ref, forwardRef } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, ButtonProps, Icon, Stack } from '@grafana/ui';\n\nconst MoreButton = forwardRef(function MoreButton(\n props: Omit<ButtonProps, 'children'> & { title?: string },\n ref: Ref<HTMLButtonElement>\n) {\n return (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n type=\"button\"\n aria-label={props.title ?? t('alerting.more-button.aria-label', 'More')}\n ref={ref}\n {...props}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={0}>\n {props.title ?? <Trans i18nKey=\"alerting.more-button.button-text\">More</Trans>}\n <Icon name=\"angle-down\" />\n </Stack>\n </Button>\n );\n});\n\nexport default MoreButton;\n","import { useMemo } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Tooltip, Icon, InteractiveTable, type CellProps, Column, Stack } from '@grafana/ui';\nimport { LdapRole } from 'app/types/ldap';\n\ninterface Props {\n groups: LdapRole[];\n}\n\nexport const LdapUserGroups = ({ groups }: Props) => {\n const items = useMemo(() => groups, [groups]);\n\n const columns = useMemo<Array<Column<LdapRole>>>(\n () => [\n {\n id: 'groupDN',\n header: 'LDAP Group',\n },\n {\n id: 'orgName',\n header: 'Organization',\n cell: (props: CellProps<LdapRole, string | undefined>) =>\n props.value && props.row.original.orgRole ? props.value : '',\n },\n {\n id: 'orgRole',\n header: 'Role',\n cell: (props: CellProps<LdapRole, string | undefined>) =>\n props.value || (\n <Stack alignItems=\"center\" wrap>\n <Trans i18nKey=\"admin.ldap-user-groups.no-org-found\">No match</Trans>\n <Tooltip\n content={t(\n 'admin.ldap-user-groups.columns.content-no-matching-organizations-found',\n 'No matching organizations found'\n )}\n >\n <Icon name=\"info-circle\" />\n </Tooltip>\n </Stack>\n ),\n },\n ],\n []\n );\n\n return (\n <InteractiveTable\n headerTooltips={{\n orgName: { content: 'Only the first match for an Organization will be used', iconName: 'info-circle' },\n }}\n columns={columns}\n data={items}\n getRowId={(row) => row.orgId + row.orgRole + row.groupDN}\n />\n );\n};\n","import { useMemo } from 'react';\n\nimport { InteractiveTable } from '@grafana/ui';\nimport { LdapUserInfo } from 'app/types/ldap';\n\ninterface Props {\n info: LdapUserInfo;\n}\n\nexport const LdapUserMappingInfo = ({ info }: Props) => {\n const columns = useMemo(\n () => [\n {\n id: 'userInfo',\n header: 'User Information',\n disableGrow: true,\n },\n {\n id: 'ldapValue',\n },\n {\n id: 'cfgAttrValue',\n header: 'LDAP attribute',\n },\n ],\n []\n );\n\n const rows = useMemo(\n () => [\n {\n userInfo: 'First name',\n ldapValue: info.name.ldapValue,\n cfgAttrValue: info.name.cfgAttrValue,\n },\n {\n userInfo: 'Surname',\n ldapValue: info.surname.ldapValue,\n cfgAttrValue: info.surname.cfgAttrValue,\n },\n {\n userInfo: 'Username',\n ldapValue: info.login.ldapValue,\n cfgAttrValue: info.login.cfgAttrValue,\n },\n {\n userInfo: 'Email',\n ldapValue: info.email.ldapValue,\n cfgAttrValue: info.email.cfgAttrValue,\n },\n ],\n [info]\n );\n\n return <InteractiveTable columns={columns} data={rows} getRowId={(row) => row.userInfo} />;\n};\n","import { useMemo } from 'react';\nimport * as React from 'react';\n\nimport { Trans } from '@grafana/i18n';\nimport { Column, Icon, InteractiveTable } from '@grafana/ui';\nimport { LdapPermissions } from 'app/types/ldap';\n\ninterface Props {\n permissions: LdapPermissions;\n}\n\ninterface TableRow {\n permission: string;\n value: React.ReactNode;\n}\n\nexport const LdapUserPermissions = ({ permissions }: Props) => {\n const columns = useMemo<Array<Column<TableRow>>>(\n () => [\n {\n id: 'permission',\n header: 'Permissions',\n disableGrow: true,\n },\n {\n id: 'value',\n },\n ],\n []\n );\n\n const data = useMemo<TableRow[]>(\n () => [\n {\n permission: 'Grafana admin',\n value: permissions.isGrafanaAdmin ? (\n <Trans i18nKey=\"admin.ldap-permissions.admin\">\n <Icon name=\"shield\" /> Yes\n </Trans>\n ) : (\n 'No'\n ),\n },\n {\n permission: 'Status',\n value: permissions.isDisabled ? (\n <Trans i18nKey=\"admin.ldap-permissions.inactive\">\n <Icon name=\"times\" /> Inactive\n </Trans>\n ) : (\n <Trans i18nKey=\"admin.ldap-permissions.active\">\n <Icon name=\"check\" /> Active\n </Trans>\n ),\n },\n ],\n [permissions]\n );\n\n return <InteractiveTable data={data} columns={columns} getRowId={(row) => row.permission} />;\n};\n","import { useMemo } from 'react';\n\nimport { Column, InteractiveTable, CellProps } from '@grafana/ui';\nimport { LdapTeam } from 'app/types/ldap';\n\ninterface Props {\n teams: LdapTeam[];\n}\n\nexport const LdapUserTeams = ({ teams }: Props) => {\n const columns = useMemo<Array<Column<LdapTeam>>>(\n () => [\n {\n id: 'groupDN',\n header: 'LDAP Group',\n },\n {\n id: 'orgName',\n header: 'Organization',\n cell: ({\n row: {\n original: { orgName },\n },\n }: CellProps<LdapTeam, void>) => <>{orgName || 'No matching teams found'}</>,\n },\n {\n id: 'teamName',\n header: 'Team',\n cell: ({\n row: {\n original: { teamName, orgName },\n },\n }: CellProps<LdapTeam, void>) => (teamName && orgName ? teamName : ''),\n },\n ],\n []\n );\n\n return <InteractiveTable data={teams} columns={columns} getRowId={(row) => row.teamName} />;\n};\n","import { Trans } from '@grafana/i18n';\nimport { Box, Stack, Text } from '@grafana/ui';\nimport { LdapUser } from 'app/types/ldap';\n\nimport { LdapUserGroups } from './LdapUserGroups';\nimport { LdapUserMappingInfo } from './LdapUserMappingInfo';\nimport { LdapUserPermissions } from './LdapUserPermissions';\nimport { LdapUserTeams } from './LdapUserTeams';\n\ninterface Props {\n ldapUser: LdapUser;\n}\n\nexport const LdapUserInfo = ({ ldapUser }: Props) => {\n return (\n <Stack direction=\"column\" gap={4}>\n <LdapUserMappingInfo info={ldapUser.info} />\n <LdapUserPermissions permissions={ldapUser.permissions} />\n {ldapUser.roles && ldapUser.roles.length > 0 && <LdapUserGroups groups={ldapUser.roles} />}\n\n {ldapUser.teams && ldapUser.teams.length > 0 ? (\n <LdapUserTeams teams={ldapUser.teams} />\n ) : (\n <Box>\n <Text>\n <Trans i18nKey=\"admin.ldap-user-info.no-team\">No teams found via LDAP</Trans>\n </Text>\n </Box>\n )}\n </Stack>\n );\n};\n","import { createContext, useCallback, useContext } from 'react';\n\nimport { LocationService, locationService, BackendSrv, GrafanaBootConfig } from '@grafana/runtime';\n\nimport { AppChromeService } from '../components/AppChrome/AppChromeService';\nimport { NewFrontendAssetsChecker } from '../services/NewFrontendAssetsChecker';\nimport { KeybindingSrv } from '../services/keybindingSrv';\n\nexport interface GrafanaContextType {\n backend: BackendSrv;\n location: LocationService;\n config: GrafanaBootConfig;\n chrome: AppChromeService;\n keybindings: KeybindingSrv;\n newAssetsChecker: NewFrontendAssetsChecker;\n}\n\nexport const GrafanaContext = createContext<GrafanaContextType | undefined>(undefined);\n\nexport function useGrafana(): GrafanaContextType {\n const context = useContext(GrafanaContext);\n if (!context) {\n throw new Error('No GrafanaContext found');\n }\n return context;\n}\n\n// Implementation of useReturnToPrevious that's made available through\n// @grafana/runtime\nexport function useReturnToPreviousInternal() {\n const { chrome } = useGrafana();\n return useCallback(\n (title: string, href?: string) => {\n const { pathname, search } = locationService.getLocation();\n chrome.setReturnToPrevious({\n title: title,\n href: href ?? pathname + search,\n });\n },\n [chrome]\n );\n}\n\n// Implementation of useMegaMenuOpen that's made available through\n// @grafana/runtime\nexport function useMegaMenuOpenInternal() {\n const { chrome } = useGrafana();\n const state = chrome.useState();\n return [state.megaMenuOpen, chrome.setMegaMenuOpen] as const;\n}\n","import { DataFrameDTO, FieldConfig } from './dataFrame';\nimport { DataFrameType } from './dataFrameTypes';\nimport { ApplyFieldOverrideOptions } from './fieldOverrides';\nimport { PanelPluginDataSupport } from './panel';\nimport { DataTopic } from './query';\nimport { DataTransformerConfig } from './transformations';\n\nexport type KeyValue<T = any> = Record<string, T>;\n\n/**\n * Represent panel data loading state.\n * @public\n */\nexport enum LoadingState {\n NotStarted = 'NotStarted',\n Loading = 'Loading',\n Streaming = 'Streaming',\n Done = 'Done',\n Error = 'Error',\n}\n\n// Should be kept in sync with grafana-plugin-sdk-go/data/frame_meta.go\nexport const preferredVisualizationTypes = [\n 'graph',\n 'table',\n 'logs',\n 'trace',\n 'nodeGraph',\n 'flamegraph',\n 'rawPrometheus',\n] as const;\nexport type PreferredVisualisationType = (typeof preferredVisualizationTypes)[number];\n\n/**\n * Should be kept in sync with https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/frame_meta.go\n * @public\n */\nexport interface QueryResultMeta {\n type?: DataFrameType;\n\n /**\n * TypeVersion is the version of the Type property. Versions greater than 0.0 correspond to the dataplane\n * contract documentation https://github.com/grafana/grafana-plugin-sdk-go/tree/main/data/contract_docs.\n */\n typeVersion?: [number, number];\n\n /** DatasSource Specific Values */\n custom?: Record<string, any>;\n\n /** Stats */\n stats?: QueryResultMetaStat[];\n\n /** Meta Notices */\n notices?: QueryResultMetaNotice[];\n\n /** Currently used to show results in Explore only in preferred visualisation option */\n preferredVisualisationType?: PreferredVisualisationType;\n\n /** Set the panel plugin id to use to render the data when using Explore. If the plugin cannot be found\n * will fall back to {@link preferredVisualisationType}.\n *\n * @alpha\n */\n preferredVisualisationPluginId?: string;\n\n /** The path for live stream updates for this frame */\n channel?: string;\n\n /** Did the query response come from the cache */\n isCachedResponse?: boolean;\n\n /**\n * Optionally identify which topic the frame should be assigned to.\n * A value specified in the response will override what the request asked for.\n */\n dataTopic?: DataTopic;\n\n /**\n * This is the raw query sent to the underlying system. All macros and templating\n * as been applied. When metadata contains this value, it will be shown in the query inspector\n */\n executedQueryString?: string;\n\n /**\n * A browsable path on the datasource\n */\n path?: string;\n\n /**\n * defaults to '/'\n */\n pathSeparator?: string;\n\n /** A time shift metadata indicating a result of comparison */\n timeCompare?: {\n diffMs: number;\n isTimeShiftQuery: boolean;\n };\n\n /**\n * Legacy data source specific, should be moved to custom\n * */\n searchWords?: string[]; // used by log models and loki\n limit?: number; // used by log models and loki\n json?: boolean; // used to keep track of old json doc values\n instant?: boolean;\n\n /**\n * Array of field indices which values create a unique id for each row. Ideally this should be globally unique ID\n * but that isn't guarantied. Should help with keeping track and deduplicating rows in visualizations, especially\n * with streaming data with frequent updates.\n * Example: TraceID in Tempo, table name + primary key in SQL\n */\n uniqueRowIdFields?: number[];\n}\n\nexport interface QueryResultMetaStat extends FieldConfig {\n displayName: string;\n value: number;\n}\n\n/**\n * QueryResultMetaNotice is a structure that provides user notices for query result data\n * @public\n */\nexport interface QueryResultMetaNotice {\n /**\n * Specify the notice severity\n */\n severity: 'info' | 'warning' | 'error';\n\n /**\n * Notice descriptive text\n */\n text: string;\n\n /**\n * An optional link that may be displayed in the UI.\n * This value may be an absolute URL or relative to grafana root\n */\n link?: string;\n\n /**\n * Optionally suggest an appropriate tab for the panel inspector\n */\n inspect?: 'meta' | 'error' | 'data' | 'stats';\n}\n\n/**\n * @public\n */\nexport interface QueryResultBase {\n /**\n * Matches the query target refId\n */\n refId?: string;\n\n /**\n * Used by some backend data sources to communicate back info about the execution (generated sql, timing)\n */\n meta?: QueryResultMeta;\n}\n\nexport interface Labels {\n [key: string]: string;\n}\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data */\nexport interface Column {\n text: string; // For a Column, the 'text' is the field name\n filterable?: boolean;\n unit?: string;\n custom?: Record<string, any>;\n}\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data */\nexport interface TableData extends QueryResultBase {\n name?: string;\n columns: Column[];\n rows: any[][];\n type?: string;\n}\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data */\nexport type TimeSeriesValue = number | null;\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data */\nexport type TimeSeriesPoints = TimeSeriesValue[][];\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data */\nexport interface TimeSeries extends QueryResultBase {\n target: string;\n /**\n * If name is manually configured via an alias / legend pattern\n */\n title?: string;\n datapoints: TimeSeriesPoints;\n unit?: string;\n tags?: Labels;\n}\n\nexport enum NullValueMode {\n Null = 'null',\n Ignore = 'connected',\n AsZero = 'null as zero',\n}\n\n/**\n * Describes and API for exposing panel specific data configurations.\n */\nexport interface DataConfigSource {\n configRev?: number;\n getDataSupport: () => PanelPluginDataSupport;\n getTransformations: () => DataTransformerConfig[] | undefined;\n getFieldOverrideOptions: () => ApplyFieldOverrideOptions | undefined;\n snapshotData?: DataFrameDTO[];\n}\n\ntype Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T;\nexport const isTruthy = <T>(value: T): value is Truthy<T> => Boolean(value);\n\n/**\n * Serves no runtime purpose - only used to make typescript check a value has been correctly\n * narrowed to an object\n */\nfunction identityObject(value: object): object {\n return value;\n}\n\n/**\n * Utility type predicate to check if a value is typeof object, but excludes \"null\".\n *\n * We normally discourage the use of type predicates in favor of just inline typescript narrowing,\n * but this is a special case to handle null annoyingly being typeof object\n */\nexport function isObject(value: unknown): value is object {\n if (typeof value === 'object' && value !== null) {\n identityObject(value);\n\n return true;\n }\n\n return false;\n}\n","import { ComponentProps, useState } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Drawer } from '@grafana/ui';\nimport { Permissions } from 'app/core/components/AccessControl/Permissions';\n\ntype ButtonProps = { onClick: () => void };\n\ntype BaseProps = Pick<ComponentProps<typeof Permissions>, 'resource' | 'resourceId'> & {\n resourceName?: string;\n title?: string;\n};\n\ntype Props = BaseProps & {\n renderButton?: (props: ButtonProps) => JSX.Element;\n};\n\n/**\n * Renders just the drawer containing permissions management for the resource.\n *\n * Useful for manually controlling the state/display of the drawer when you need to render the\n * controlling button within a dropdown etc.\n */\nexport const ManagePermissionsDrawer = ({\n resourceName,\n title,\n onClose,\n ...permissionsProps\n}: BaseProps & Pick<ComponentProps<typeof Drawer>, 'onClose'>) => {\n const defaultTitle = t('alerting.manage-permissions.title', 'Manage permissions');\n return (\n <Drawer onClose={onClose} title={title || defaultTitle} subtitle={resourceName}>\n <Permissions {...permissionsProps} canSetPermissions />\n </Drawer>\n );\n};\n\n/** Default way to render the button for \"manage permissions\" */\nconst DefaultButton = ({ onClick }: ButtonProps) => {\n return (\n <Button variant=\"secondary\" onClick={onClick} icon=\"unlock\">\n <Trans i18nKey=\"alerting.manage-permissions.button\">Manage permissions</Trans>\n </Button>\n );\n};\n\n/**\n * Renders a button that opens a drawer with the permissions editor.\n *\n * Provides capability to render button as custom component, and manages open/close state internally\n */\nexport const ManagePermissions = ({ resource, resourceId, resourceName, title, renderButton }: Props) => {\n const [showDrawer, setShowDrawer] = useState(false);\n const closeDrawer = () => setShowDrawer(false);\n const openDrawer = () => setShowDrawer(true);\n\n return (\n <>\n {renderButton ? renderButton({ onClick: openDrawer }) : <DefaultButton onClick={openDrawer} />}\n {showDrawer && (\n <ManagePermissionsDrawer\n resource={resource}\n resourceId={resourceId}\n resourceName={resourceName}\n title={title}\n onClose={closeDrawer}\n />\n )}\n </>\n );\n};\n","import { PropsWithChildren, createContext, useContext } from 'react';\n\nimport { AddedComponentsRegistry } from 'app/features/plugins/extensions/registry/AddedComponentsRegistry';\nimport { AddedFunctionsRegistry } from 'app/features/plugins/extensions/registry/AddedFunctionsRegistry';\nimport { AddedLinksRegistry } from 'app/features/plugins/extensions/registry/AddedLinksRegistry';\nimport { ExposedComponentsRegistry } from 'app/features/plugins/extensions/registry/ExposedComponentsRegistry';\n\nimport { PluginExtensionRegistries } from './registry/types';\n\nexport interface ExtensionRegistriesContextType {\n registries: PluginExtensionRegistries;\n}\n\n// Using a different context for each registry to avoid unnecessary re-renders\nexport const AddedLinksRegistryContext = createContext<AddedLinksRegistry | undefined>(undefined);\nexport const AddedComponentsRegistryContext = createContext<AddedComponentsRegistry | undefined>(undefined);\nexport const AddedFunctionsRegistryContext = createContext<AddedFunctionsRegistry | undefined>(undefined);\nexport const ExposedComponentsRegistryContext = createContext<ExposedComponentsRegistry | undefined>(undefined);\n\nexport function useAddedLinksRegistry(): AddedLinksRegistry {\n const context = useContext(AddedLinksRegistryContext);\n if (!context) {\n throw new Error('No `AddedLinksRegistryContext` found.');\n }\n return context;\n}\n\nexport function useAddedComponentsRegistry(): AddedComponentsRegistry {\n const context = useContext(AddedComponentsRegistryContext);\n if (!context) {\n throw new Error('No `AddedComponentsRegistryContext` found.');\n }\n return context;\n}\n\nexport function useAddedFunctionsRegistry(): AddedFunctionsRegistry {\n const context = useContext(AddedFunctionsRegistryContext);\n if (!context) {\n throw new Error('No `AddedFunctionsRegistry` found.');\n }\n return context;\n}\n\nexport function useExposedComponentsRegistry(): ExposedComponentsRegistry {\n const context = useContext(ExposedComponentsRegistryContext);\n if (!context) {\n throw new Error('No `ExposedComponentsRegistryContext` found.');\n }\n return context;\n}\n\nexport const ExtensionRegistriesProvider = ({\n registries,\n children,\n}: PropsWithChildren<ExtensionRegistriesContextType>) => {\n return (\n <AddedLinksRegistryContext.Provider value={registries.addedLinksRegistry}>\n <AddedComponentsRegistryContext.Provider value={registries.addedComponentsRegistry}>\n <AddedFunctionsRegistryContext.Provider value={registries.addedFunctionsRegistry}>\n <ExposedComponentsRegistryContext.Provider value={registries.exposedComponentsRegistry}>\n {children}\n </ExposedComponentsRegistryContext.Provider>\n </AddedFunctionsRegistryContext.Provider>\n </AddedComponentsRegistryContext.Provider>\n </AddedLinksRegistryContext.Provider>\n );\n};\n","import { useMemo } from 'react';\nimport { useParams } from 'react-router-dom-v5-compat';\n\nimport { NavModelItem } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { isFetchError } from '@grafana/runtime';\nimport { Alert } from '@grafana/ui';\nimport { EntityNotFound } from 'app/core/components/PageNotFound/EntityNotFound';\n\nimport { AlertingPageWrapper } from './components/AlertingPageWrapper';\nimport { AlertRuleProvider } from './components/rule-viewer/RuleContext';\nimport DetailView, { ActiveTab, useActiveTab } from './components/rule-viewer/RuleViewer';\nimport { useCombinedRule } from './hooks/useCombinedRule';\nimport { stringifyErrorLike } from './utils/misc';\nimport { getRuleIdFromPathname, parse as parseRuleId } from './utils/rule-id';\nimport { withPageErrorBoundary } from './withPageErrorBoundary';\n\nconst RuleViewer = () => {\n const params = useParams();\n const id = getRuleIdFromPathname(params);\n\n const [activeTab] = useActiveTab();\n const instancesTab = activeTab === ActiveTab.Instances;\n\n // We will fetch no instances by default to speed up loading times and reduce memory footprint _unless_ we are visiting\n // the \"instances\" tab. This optimization is only available for the Grafana-managed ruler.\n const limitAlerts = instancesTab ? undefined : 0; // \"0\" means \"do not include alert rule instances in the response\"\n\n // we convert the stringified ID to a rule identifier object which contains additional\n // type and source information\n const identifier = useMemo(() => {\n if (!id) {\n throw new Error('Rule ID is required');\n }\n\n return parseRuleId(id, true);\n }, [id]);\n\n // we then fetch the rule from the correct API endpoint(s)\n const { loading, error, result: rule } = useCombinedRule({ ruleIdentifier: identifier, limitAlerts });\n\n if (error) {\n return (\n <AlertingPageWrapper pageNav={defaultPageNav} navId=\"alert-list\">\n <ErrorMessage error={error} />\n </AlertingPageWrapper>\n );\n }\n\n if (loading) {\n return <AlertingPageWrapper pageNav={defaultPageNav} navId=\"alert-list\" isLoading={true} />;\n }\n\n if (rule) {\n return (\n <AlertRuleProvider identifier={identifier} rule={rule}>\n <DetailView />\n </AlertRuleProvider>\n );\n }\n\n // if we get here assume we can't find the rule\n if (!rule && !loading) {\n return (\n <AlertingPageWrapper pageNav={defaultPageNav} navId=\"alert-list\">\n <EntityNotFound entity=\"Rule\" />\n </AlertingPageWrapper>\n );\n }\n\n // we should never get to this state\n return null;\n};\n\nexport const defaultPageNav: NavModelItem = {\n id: 'alert-rule-view',\n text: '',\n};\n\ninterface ErrorMessageProps {\n error: unknown;\n}\n\nfunction ErrorMessage({ error }: ErrorMessageProps) {\n if (isFetchError(error) && error.status === 404) {\n return <EntityNotFound entity=\"Rule\" />;\n }\n\n return (\n <Alert title={t('alerting.rule-viewer.error-loading', 'Something went wrong loading the rule')}>\n {stringifyErrorLike(error)}\n </Alert>\n );\n}\n\nexport default withPageErrorBoundary(RuleViewer);\n","import { ReactElement } from 'react';\nimport * as React from 'react';\n\nimport { usePluginBridge } from '../hooks/usePluginBridge';\nimport { SupportedPlugin } from '../types/pluginBridges';\n\nexport type PluginID = SupportedPlugin | string;\n\nexport interface PluginBridgeProps {\n plugin: PluginID;\n // shows an optional component when the plugin is not installed\n notInstalledFallback?: ReactElement;\n // shows an optional component when we're checking if the plugin is installed\n loadingComponent?: ReactElement;\n}\n\nexport const PluginBridge = ({\n children,\n plugin,\n loadingComponent,\n notInstalledFallback,\n}: React.PropsWithChildren<PluginBridgeProps>) => {\n const { loading, installed } = usePluginBridge(plugin);\n\n if (loading) {\n return loadingComponent ?? null;\n }\n\n if (!installed) {\n return notInstalledFallback ?? null;\n }\n\n return <>{children}</>;\n};\n\nexport function createBridgeURL(plugin: PluginID, path?: string, options?: Record<string, string>) {\n const searchParams = new URLSearchParams(options).toString();\n const pluginPath = `/a/${plugin}${path}`;\n\n return pluginPath + (searchParams ? '?' + searchParams : '');\n}\n","/**\n * Shortens the filename to 16 length\n * @param fileName\n */\nexport function trimFileName(fileName: string): string {\n const nameLength = 16;\n const delimiter = fileName.lastIndexOf('.');\n const extension = fileName.substring(delimiter);\n const file = fileName.substring(0, delimiter);\n\n if (file.length < nameLength) {\n return fileName;\n }\n\n return `${file.substring(0, nameLength)}...${extension}`;\n}\n","import { Cell } from 'react-table';\n\nimport { TimeRange, DataFrame, InterpolateFunction } from '@grafana/data';\n\nimport { TableStyles } from '../TableRT/styles';\nimport { GetActionsFunction, GrafanaTableColumn, TableFilterActionCallback, TableInspectCellCallback } from '../types';\n\nexport interface Props {\n cell: Cell;\n tableStyles: TableStyles;\n onCellFilterAdded?: TableFilterActionCallback;\n columnIndex: number;\n columnCount: number;\n timeRange?: TimeRange;\n userProps?: object;\n frame: DataFrame;\n rowStyled?: boolean;\n rowExpanded?: boolean;\n textWrapped?: boolean;\n height?: number;\n getActions?: GetActionsFunction;\n replaceVariables?: InterpolateFunction;\n setInspectCell?: TableInspectCellCallback;\n}\n\nexport const TableCell = ({\n cell,\n tableStyles,\n onCellFilterAdded,\n timeRange,\n userProps,\n frame,\n rowStyled,\n rowExpanded,\n textWrapped,\n height,\n getActions,\n replaceVariables,\n setInspectCell,\n}: Props) => {\n const cellProps = cell.getCellProps();\n const field = (cell.column as unknown as GrafanaTableColumn).field;\n\n if (!field?.display) {\n return null;\n }\n\n if (cellProps.style) {\n cellProps.style.wordBreak = 'break-word';\n cellProps.style.minWidth = cellProps.style.width;\n const justifyContent = (cell.column as any).justifyContent;\n\n if (justifyContent === 'flex-end' && !field.config.unit) {\n // justify-content flex-end is not compatible with cellLink overflow; use direction instead\n cellProps.style.textAlign = 'right';\n cellProps.style.direction = 'rtl';\n cellProps.style.unicodeBidi = 'plaintext';\n } else {\n cellProps.style.justifyContent = justifyContent;\n }\n }\n\n let innerWidth = (typeof cell.column.width === 'number' ? cell.column.width : 24) - tableStyles.cellPadding * 2;\n\n const actions = getActions ? getActions(frame, field, cell.row.index, replaceVariables) : [];\n\n return (\n <>\n {cell.render('Cell', {\n field,\n tableStyles,\n onCellFilterAdded,\n cellProps,\n innerWidth,\n timeRange,\n userProps,\n frame,\n rowStyled,\n rowExpanded,\n textWrapped,\n height,\n actions,\n setInspectCell,\n })}\n </>\n );\n};\n","import { FormEvent } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { DataSourceInstanceSettings, SelectableValue, TimeRange } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { QueryVariable } from '@grafana/scenes';\nimport { DataSourceRef, VariableRefresh, VariableSort } from '@grafana/schema';\nimport { Field, TextLink } from '@grafana/ui';\nimport { QueryEditor } from 'app/features/dashboard-scene/settings/variables/components/QueryEditor';\nimport { SelectionOptionsForm } from 'app/features/dashboard-scene/settings/variables/components/SelectionOptionsForm';\nimport { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker';\nimport { getVariableQueryEditor } from 'app/features/variables/editor/getVariableQueryEditor';\nimport { QueryVariableRefreshSelect } from 'app/features/variables/query/QueryVariableRefreshSelect';\nimport { QueryVariableSortSelect } from 'app/features/variables/query/QueryVariableSortSelect';\nimport {\n StaticOptionsOrderType,\n StaticOptionsType,\n QueryVariableStaticOptions,\n} from 'app/features/variables/query/QueryVariableStaticOptions';\n\nimport { VariableLegend } from './VariableLegend';\nimport { VariableTextAreaField } from './VariableTextAreaField';\n\ntype VariableQueryType = QueryVariable['state']['query'];\n\ninterface QueryVariableEditorFormProps {\n datasource?: DataSourceRef;\n onDataSourceChange: (dsSettings: DataSourceInstanceSettings) => void;\n query: VariableQueryType;\n onQueryChange: (query: VariableQueryType) => void;\n onLegacyQueryChange: (query: VariableQueryType, definition: string) => void;\n timeRange: TimeRange;\n regex: string | null;\n onRegExChange: (event: FormEvent<HTMLTextAreaElement>) => void;\n sort: VariableSort;\n onSortChange: (option: SelectableValue<VariableSort>) => void;\n refresh: VariableRefresh;\n onRefreshChange: (option: VariableRefresh) => void;\n isMulti: boolean;\n onMultiChange: (event: FormEvent<HTMLInputElement>) => void;\n allowCustomValue?: boolean;\n onAllowCustomValueChange?: (event: FormEvent<HTMLInputElement>) => void;\n includeAll: boolean;\n onIncludeAllChange: (event: FormEvent<HTMLInputElement>) => void;\n allValue: string;\n onAllValueChange: (event: FormEvent<HTMLInputElement>) => void;\n staticOptions?: StaticOptionsType;\n staticOptionsOrder?: StaticOptionsOrderType;\n onStaticOptionsChange?: (staticOptions: StaticOptionsType) => void;\n onStaticOptionsOrderChange?: (staticOptionsOrder: StaticOptionsOrderType) => void;\n}\n\nexport function QueryVariableEditorForm({\n datasource: datasourceRef,\n onDataSourceChange,\n query,\n onQueryChange,\n onLegacyQueryChange,\n timeRange,\n regex,\n onRegExChange,\n sort,\n onSortChange,\n refresh,\n onRefreshChange,\n isMulti,\n onMultiChange,\n allowCustomValue,\n onAllowCustomValueChange,\n includeAll,\n onIncludeAllChange,\n allValue,\n onAllValueChange,\n staticOptions,\n staticOptionsOrder,\n onStaticOptionsChange,\n onStaticOptionsOrderChange,\n}: QueryVariableEditorFormProps) {\n const { value: dsConfig } = useAsync(async () => {\n const datasource = await getDataSourceSrv().get(datasourceRef ?? '');\n const VariableQueryEditor = await getVariableQueryEditor(datasource);\n const defaultQuery = datasource?.variables?.getDefaultQuery?.();\n\n if (!query && defaultQuery) {\n const query =\n typeof defaultQuery === 'string' ? defaultQuery : { ...defaultQuery, refId: defaultQuery.refId ?? 'A' };\n onQueryChange(query);\n }\n\n return { datasource, VariableQueryEditor };\n }, [datasourceRef]);\n\n const { datasource, VariableQueryEditor } = dsConfig ?? {};\n\n return (\n <>\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.query-variable-editor-form.query-options\">Query options</Trans>\n </VariableLegend>\n <Field\n label={t('dashboard-scene.query-variable-editor-form.label-data-source', 'Data source')}\n htmlFor=\"data-source-picker\"\n >\n <DataSourcePicker current={datasourceRef} onChange={onDataSourceChange} variables={true} width={30} />\n </Field>\n\n {datasource && VariableQueryEditor && (\n <QueryEditor\n onQueryChange={onQueryChange}\n onLegacyQueryChange={onLegacyQueryChange}\n datasource={datasource}\n query={query}\n VariableQueryEditor={VariableQueryEditor}\n timeRange={timeRange}\n />\n )}\n\n <VariableTextAreaField\n defaultValue={regex ?? ''}\n name={t('dashboard-scene.query-variable-editor-form.name-regex', 'Regex')}\n description={\n <div>\n <Trans i18nKey=\"dashboard-scene.query-variable-editor-form.description-optional\">\n Optional, if you want to extract part of a series name or metric node segment.\n </Trans>\n <br />\n <Trans i18nKey=\"dashboard-scene.query-variable-editor-form.description-examples\">\n Named capture groups can be used to separate the display text and value (\n <TextLink\n href=\"https://grafana.com/docs/grafana/latest/variables/filter-variables-with-regex#filter-and-modify-using-named-text-and-value-capture-groups\"\n external\n >\n see examples\n </TextLink>\n ).\n </Trans>\n </div>\n }\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"/.*-(?<text>.*)-(?<value>.*)-.*/\"\n onBlur={onRegExChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsRegExInputV2}\n width={52}\n />\n\n <QueryVariableSortSelect\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsSortSelectV2}\n onChange={onSortChange}\n sort={sort}\n />\n\n <QueryVariableRefreshSelect\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsRefreshSelectV2}\n onChange={onRefreshChange}\n refresh={refresh}\n />\n\n {onStaticOptionsChange && onStaticOptionsOrderChange && (\n <QueryVariableStaticOptions\n staticOptions={staticOptions}\n staticOptionsOrder={staticOptionsOrder}\n onStaticOptionsChange={onStaticOptionsChange}\n onStaticOptionsOrderChange={onStaticOptionsOrderChange}\n />\n )}\n\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.query-variable-editor-form.selection-options\">Selection options</Trans>\n </VariableLegend>\n <SelectionOptionsForm\n multi={!!isMulti}\n includeAll={!!includeAll}\n allowCustomValue={allowCustomValue}\n allValue={allValue}\n onMultiChange={onMultiChange}\n onIncludeAllChange={onIncludeAllChange}\n onAllValueChange={onAllValueChange}\n onAllowCustomValueChange={onAllowCustomValueChange}\n />\n </>\n );\n}\n","import { DataFrame, Field, FieldType, formattedValueToString } from '@grafana/data';\nimport { TextDimensionConfig, TextDimensionMode } from '@grafana/schema';\n\nimport { DimensionSupplier } from './types';\nimport { findField, getLastNotNullFieldValue } from './utils';\n\n//---------------------------------------------------------\n// Resource dimension\n//---------------------------------------------------------\n\nexport function getTextDimension(frame: DataFrame | undefined, config: TextDimensionConfig): DimensionSupplier<string> {\n const field = config.field ? findField(frame, config.field) : frame?.fields.find((f) => f.type === FieldType.string);\n return getTextDimensionForField(field, config);\n}\n\nexport function getTextDimensionForField(\n field: Field | undefined,\n config: TextDimensionConfig\n): DimensionSupplier<string> {\n let v = config.fixed;\n const mode = config.mode ?? TextDimensionMode.Fixed;\n if (mode === TextDimensionMode.Fixed) {\n return {\n isAssumed: !Boolean(v),\n fixed: v,\n value: () => v,\n get: (i) => v,\n };\n }\n\n if (mode === TextDimensionMode.Template) {\n const disp = (v: unknown) => {\n return `TEMPLATE[${config.fixed} // ${v}]`;\n };\n if (!field) {\n v = disp('');\n return {\n isAssumed: true,\n fixed: v,\n value: () => v,\n get: (i) => v,\n };\n }\n return {\n field,\n get: (i) => disp(field.values[i]),\n value: () => disp(getLastNotNullFieldValue(field)),\n };\n }\n\n if (!field) {\n return {\n isAssumed: true,\n fixed: v,\n value: () => v,\n get: (i) => v,\n };\n }\n\n let disp = (v: unknown) => formattedValueToString(field.display!(v));\n return {\n field,\n get: (i) => disp(field.values[i]),\n value: () => disp(getLastNotNullFieldValue(field)),\n };\n}\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { getAPIBaseURL } from '../../../../utils/utils';\nimport { createBaseQuery } from '../../createBaseQuery';\n\nexport const API_GROUP = 'preferences.grafana.app' as const;\nexport const API_VERSION = 'v1alpha1' as const;\nexport const BASE_URL = getAPIBaseURL(API_GROUP, API_VERSION);\n\nexport const api = createApi({\n reducerPath: 'preferencesAPIv1alpha1',\n baseQuery: createBaseQuery({\n baseURL: BASE_URL,\n }),\n endpoints: () => ({}),\n});\n","import { api } from './baseAPI';\nexport const addTagTypes = ['API Discovery', 'Preferences', 'Stars'] as const;\nconst injectedRtkApi = api\n .enhanceEndpoints({\n addTagTypes,\n })\n .injectEndpoints({\n endpoints: (build) => ({\n getApiResources: build.query<GetApiResourcesApiResponse, GetApiResourcesApiArg>({\n query: () => ({ url: `/apis/preferences.grafana.app/v1alpha1/` }),\n providesTags: ['API Discovery'],\n }),\n listPreferences: build.query<ListPreferencesApiResponse, ListPreferencesApiArg>({\n query: (queryArg) => ({\n url: `/preferences`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['Preferences'],\n }),\n createPreferences: build.mutation<CreatePreferencesApiResponse, CreatePreferencesApiArg>({\n query: (queryArg) => ({\n url: `/preferences`,\n method: 'POST',\n body: queryArg.preferences,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Preferences'],\n }),\n mergedPreferences: build.query<MergedPreferencesApiResponse, MergedPreferencesApiArg>({\n query: () => ({ url: `/preferences/merged` }),\n providesTags: ['Preferences'],\n }),\n getPreferences: build.query<GetPreferencesApiResponse, GetPreferencesApiArg>({\n query: (queryArg) => ({\n url: `/preferences/${queryArg.name}`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['Preferences'],\n }),\n replacePreferences: build.mutation<ReplacePreferencesApiResponse, ReplacePreferencesApiArg>({\n query: (queryArg) => ({\n url: `/preferences/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.preferences,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Preferences'],\n }),\n deletePreferences: build.mutation<DeletePreferencesApiResponse, DeletePreferencesApiArg>({\n query: (queryArg) => ({\n url: `/preferences/${queryArg.name}`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n },\n }),\n invalidatesTags: ['Preferences'],\n }),\n updatePreferences: build.mutation<UpdatePreferencesApiResponse, UpdatePreferencesApiArg>({\n query: (queryArg) => ({\n url: `/preferences/${queryArg.name}`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['Preferences'],\n }),\n listStars: build.query<ListStarsApiResponse, ListStarsApiArg>({\n query: (queryArg) => ({\n url: `/stars`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['Stars'],\n }),\n createStars: build.mutation<CreateStarsApiResponse, CreateStarsApiArg>({\n query: (queryArg) => ({\n url: `/stars`,\n method: 'POST',\n body: queryArg.stars,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Stars'],\n }),\n deletecollectionStars: build.mutation<DeletecollectionStarsApiResponse, DeletecollectionStarsApiArg>({\n query: (queryArg) => ({\n url: `/stars`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n continue: queryArg['continue'],\n dryRun: queryArg.dryRun,\n fieldSelector: queryArg.fieldSelector,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n },\n }),\n invalidatesTags: ['Stars'],\n }),\n getStars: build.query<GetStarsApiResponse, GetStarsApiArg>({\n query: (queryArg) => ({\n url: `/stars/${queryArg.name}`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['Stars'],\n }),\n replaceStars: build.mutation<ReplaceStarsApiResponse, ReplaceStarsApiArg>({\n query: (queryArg) => ({\n url: `/stars/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.stars,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Stars'],\n }),\n deleteStars: build.mutation<DeleteStarsApiResponse, DeleteStarsApiArg>({\n query: (queryArg) => ({\n url: `/stars/${queryArg.name}`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n },\n }),\n invalidatesTags: ['Stars'],\n }),\n updateStars: build.mutation<UpdateStarsApiResponse, UpdateStarsApiArg>({\n query: (queryArg) => ({\n url: `/stars/${queryArg.name}`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['Stars'],\n }),\n addStar: build.mutation<AddStarApiResponse, AddStarApiArg>({\n query: (queryArg) => ({\n url: `/stars/${queryArg.name}/update/${queryArg.group}/${queryArg.kind}/${queryArg.id}`,\n method: 'PUT',\n }),\n invalidatesTags: ['Stars'],\n }),\n removeStar: build.mutation<RemoveStarApiResponse, RemoveStarApiArg>({\n query: (queryArg) => ({\n url: `/stars/${queryArg.name}/update/${queryArg.group}/${queryArg.kind}/${queryArg.id}`,\n method: 'DELETE',\n }),\n invalidatesTags: ['Stars'],\n }),\n }),\n overrideExisting: false,\n });\nexport { injectedRtkApi as generatedAPI };\nexport type GetApiResourcesApiResponse = /** status 200 OK */ ApiResourceList;\nexport type GetApiResourcesApiArg = void;\nexport type ListPreferencesApiResponse = /** status 200 OK */ PreferencesList;\nexport type ListPreferencesApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type CreatePreferencesApiResponse = /** status 200 OK */\n | Preferences\n | /** status 201 Created */ Preferences\n | /** status 202 Accepted */ Preferences;\nexport type CreatePreferencesApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n preferences: Preferences;\n};\nexport type MergedPreferencesApiResponse = /** status 200 undefined */ any;\nexport type MergedPreferencesApiArg = void;\nexport type GetPreferencesApiResponse = /** status 200 OK */ Preferences;\nexport type GetPreferencesApiArg = {\n /** name of the Preferences */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplacePreferencesApiResponse = /** status 200 OK */ Preferences | /** status 201 Created */ Preferences;\nexport type ReplacePreferencesApiArg = {\n /** name of the Preferences */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n preferences: Preferences;\n};\nexport type DeletePreferencesApiResponse = /** status 200 OK */ Status | /** status 202 Accepted */ Status;\nexport type DeletePreferencesApiArg = {\n /** name of the Preferences */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n};\nexport type UpdatePreferencesApiResponse = /** status 200 OK */ Preferences | /** status 201 Created */ Preferences;\nexport type UpdatePreferencesApiArg = {\n /** name of the Preferences */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type ListStarsApiResponse = /** status 200 OK */ StarsList;\nexport type ListStarsApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type CreateStarsApiResponse = /** status 200 OK */\n | Stars\n | /** status 201 Created */ Stars\n | /** status 202 Accepted */ Stars;\nexport type CreateStarsApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n stars: Stars;\n};\nexport type DeletecollectionStarsApiResponse = /** status 200 OK */ Status;\nexport type DeletecollectionStarsApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n};\nexport type GetStarsApiResponse = /** status 200 OK */ Stars;\nexport type GetStarsApiArg = {\n /** name of the Stars */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplaceStarsApiResponse = /** status 200 OK */ Stars | /** status 201 Created */ Stars;\nexport type ReplaceStarsApiArg = {\n /** name of the Stars */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n stars: Stars;\n};\nexport type DeleteStarsApiResponse = /** status 200 OK */ Status | /** status 202 Accepted */ Status;\nexport type DeleteStarsApiArg = {\n /** name of the Stars */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n};\nexport type UpdateStarsApiResponse = /** status 200 OK */ Stars | /** status 201 Created */ Stars;\nexport type UpdateStarsApiArg = {\n /** name of the Stars */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type AddStarApiResponse = /** status 200 OK */ Stars;\nexport type AddStarApiArg = {\n /** name of the Stars */\n name: string;\n /** API group for stared item */\n group: string;\n /** Kind for stared item */\n kind: string;\n /** The k8s name for the selected item */\n id: string;\n};\nexport type RemoveStarApiResponse = /** status 200 OK */ Stars;\nexport type RemoveStarApiArg = {\n /** name of the Stars */\n name: string;\n /** API group for stared item */\n group: string;\n /** Kind for stared item */\n kind: string;\n /** The k8s name for the selected item */\n id: string;\n};\nexport type ApiResource = {\n /** categories is a list of the grouped resources this resource belongs to (e.g. 'all') */\n categories?: string[];\n /** group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\". */\n group?: string;\n /** kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') */\n kind: string;\n /** name is the plural name of the resource. */\n name: string;\n /** namespaced indicates if a resource is namespaced or not. */\n namespaced: boolean;\n /** shortNames is a list of suggested short names of the resource. */\n shortNames?: string[];\n /** singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface. */\n singularName: string;\n /** The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates. */\n storageVersionHash?: string;\n /** verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy) */\n verbs: string[];\n /** version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\". */\n version?: string;\n};\nexport type ApiResourceList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** groupVersion is the group and version this APIResourceList is for. */\n groupVersion: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** resources contains the name of the resources and if they are namespaced. */\n resources: ApiResource[];\n};\nexport type Time = string;\nexport type FieldsV1 = object;\nexport type ManagedFieldsEntry = {\n /** APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted. */\n apiVersion?: string;\n /** FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\" */\n fieldsType?: string;\n /** FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type. */\n fieldsV1?: FieldsV1;\n /** Manager is an identifier of the workflow managing these fields. */\n manager?: string;\n /** Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'. */\n operation?: string;\n /** Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource. */\n subresource?: string;\n /** Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over. */\n time?: Time;\n};\nexport type OwnerReference = {\n /** API version of the referent. */\n apiVersion: string;\n /** If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned. */\n blockOwnerDeletion?: boolean;\n /** If true, this reference points to the managing controller. */\n controller?: boolean;\n /** Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n /** Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name: string;\n /** UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid: string;\n};\nexport type ObjectMeta = {\n /** Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations */\n annotations?: {\n [key: string]: string;\n };\n /** CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n \n Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n creationTimestamp?: Time;\n /** Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. */\n deletionGracePeriodSeconds?: number;\n /** DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n \n Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n deletionTimestamp?: Time;\n /** Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list. */\n finalizers?: string[];\n /** GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n \n If this field is specified and the generated name exists, the server will return a 409.\n \n Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency */\n generateName?: string;\n /** A sequence number representing a specific generation of the desired state. Populated by the system. Read-only. */\n generation?: number;\n /** Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels */\n labels?: {\n [key: string]: string;\n };\n /** ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object. */\n managedFields?: ManagedFieldsEntry[];\n /** Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name?: string;\n /** Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n \n Must be a DNS_LABEL. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces */\n namespace?: string;\n /** List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller. */\n ownerReferences?: OwnerReference[];\n /** An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n \n Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n /** UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n \n Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type PreferencesCookiePreferences = {\n analytics?: object;\n functional?: object;\n performance?: object;\n};\nexport type PreferencesNavbarPreference = {\n bookmarkUrls: string[];\n};\nexport type PreferencesQueryHistoryPreference = {\n /** one of: '' | 'query' | 'starred'; */\n homeTab?: string;\n};\nexport type PreferencesSpec = {\n /** Cookie preferences */\n cookiePreferences?: PreferencesCookiePreferences;\n /** UID for the home dashboard */\n homeDashboardUID?: string;\n /** Selected language (beta) */\n language?: string;\n /** Navigation preferences */\n navbar?: PreferencesNavbarPreference;\n /** Explore query history preferences */\n queryHistory?: PreferencesQueryHistoryPreference;\n /** Selected locale (beta) */\n regionalFormat?: string;\n /** light, dark, empty is default */\n theme?: string;\n /** The timezone selection */\n timezone?: string;\n /** day of the week (sunday, monday, etc) */\n weekStart?: string;\n};\nexport type Preferences = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ObjectMeta;\n /** Spec is the spec of the Preferences */\n spec: PreferencesSpec;\n};\nexport type ListMeta = {\n /** continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message. */\n continue?: string;\n /** remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact. */\n remainingItemCount?: number;\n /** String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n};\nexport type PreferencesList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: Preferences[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ListMeta;\n};\nexport type StatusCause = {\n /** The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n \n Examples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\" */\n field?: string;\n /** A human-readable description of the cause of the error. This field may be presented as-is to a reader. */\n message?: string;\n /** A machine-readable description of the cause of the error. If this value is empty there is no information available. */\n reason?: string;\n};\nexport type StatusDetails = {\n /** The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. */\n causes?: StatusCause[];\n /** The group attribute of the resource associated with the status StatusReason. */\n group?: string;\n /** The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). */\n name?: string;\n /** If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action. */\n retryAfterSeconds?: number;\n /** UID of the resource. (when there is a single resource which can be described). More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type Status = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Suggested HTTP return code for this status, 0 if not set. */\n code?: number;\n /** Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. */\n details?: StatusDetails;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** A human-readable description of the status of this operation. */\n message?: string;\n /** Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n metadata?: ListMeta;\n /** A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. */\n reason?: string;\n /** Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status */\n status?: string;\n};\nexport type Patch = object;\nexport type StarsResource = {\n group: string;\n kind: string;\n /** The set of resources */\n names: string[];\n};\nexport type StarsSpec = {\n resource: StarsResource[];\n};\nexport type Stars = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ObjectMeta;\n /** Spec is the spec of the Stars */\n spec: StarsSpec;\n};\nexport type StarsList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: Stars[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ListMeta;\n};\nexport const {\n useGetApiResourcesQuery,\n useLazyGetApiResourcesQuery,\n useListPreferencesQuery,\n useLazyListPreferencesQuery,\n useCreatePreferencesMutation,\n useMergedPreferencesQuery,\n useLazyMergedPreferencesQuery,\n useGetPreferencesQuery,\n useLazyGetPreferencesQuery,\n useReplacePreferencesMutation,\n useDeletePreferencesMutation,\n useUpdatePreferencesMutation,\n useListStarsQuery,\n useLazyListStarsQuery,\n useCreateStarsMutation,\n useDeletecollectionStarsMutation,\n useGetStarsQuery,\n useLazyGetStarsQuery,\n useReplaceStarsMutation,\n useDeleteStarsMutation,\n useUpdateStarsMutation,\n useAddStarMutation,\n useRemoveStarMutation,\n} = injectedRtkApi;\n","export { BASE_URL, API_GROUP, API_VERSION } from './baseAPI';\nimport { generatedAPI as rawAPI } from './endpoints.gen';\n\nexport * from './endpoints.gen';\nexport const generatedAPI = rawAPI.enhanceEndpoints({});\n","/**\n * Enumeration of documentation topics\n * @internal\n */\nexport enum DocsId {\n Transformations,\n FieldConfig,\n FieldConfigOverrides,\n}\n","import {\n AppEvents,\n DataSourceApi,\n DataSourceInstanceSettings,\n DataSourceRef,\n DataSourceSelectItem,\n ScopedVars,\n isObject,\n matchPluginId,\n} from '@grafana/data';\nimport {\n DataSourceSrv as DataSourceService,\n getBackendSrv,\n GetDataSourceListFilters,\n getDataSourceSrv as getDataSourceService,\n getTemplateSrv,\n RuntimeDataSourceRegistration,\n RuntimeDataSource,\n TemplateSrv,\n isExpressionReference,\n} from '@grafana/runtime';\nimport { ExpressionDatasourceRef, UserStorage } from '@grafana/runtime/internal';\nimport { DataQuery, DataSourceJsonData } from '@grafana/schema';\nimport appEvents from 'app/core/app_events';\nimport config from 'app/core/config';\nimport {\n dataSource as expressionDatasource,\n instanceSettings as expressionInstanceSettings,\n} from 'app/features/expressions/ExpressionDatasource';\nimport { ExpressionDatasourceUID } from 'app/features/expressions/types';\n\nimport { pluginImporter } from './importer/pluginImporter';\n\nexport class DatasourceSrv implements DataSourceService {\n private datasources: Record<string, DataSourceApi> = {}; // UID\n private settingsMapByName: Record<string, DataSourceInstanceSettings> = {};\n private settingsMapByUid: Record<string, DataSourceInstanceSettings> = {};\n private settingsMapById: Record<string, DataSourceInstanceSettings> = {};\n private runtimeDataSources: Record<string, RuntimeDataSource> = {}; //\n private defaultName = ''; // actually UID\n\n constructor(private templateSrv: TemplateSrv = getTemplateSrv()) {}\n\n init(settingsMapByName: Record<string, DataSourceInstanceSettings>, defaultName: string) {\n this.datasources = {};\n this.settingsMapByUid = {};\n this.settingsMapByName = settingsMapByName;\n this.defaultName = defaultName;\n\n for (const dsSettings of Object.values(settingsMapByName)) {\n if (!dsSettings.uid) {\n dsSettings.uid = dsSettings.name; // -- Grafana --, -- Mixed etc\n }\n\n this.settingsMapByUid[dsSettings.uid] = dsSettings;\n this.settingsMapById[dsSettings.id] = dsSettings;\n }\n\n for (const ds of Object.values(this.runtimeDataSources)) {\n this.datasources[ds.uid] = ds;\n this.settingsMapByUid[ds.uid] = ds.instanceSettings;\n }\n\n // Preload expressions\n this.datasources[ExpressionDatasourceRef.type] = expressionDatasource as DataSourceApi<\n DataQuery,\n DataSourceJsonData,\n {}\n >;\n this.datasources[ExpressionDatasourceUID] = expressionDatasource as DataSourceApi<\n DataQuery,\n DataSourceJsonData,\n {}\n >;\n this.settingsMapByUid[ExpressionDatasourceRef.uid] = expressionInstanceSettings;\n this.settingsMapByUid[ExpressionDatasourceUID] = expressionInstanceSettings;\n }\n\n registerRuntimeDataSource(entry: RuntimeDataSourceRegistration): void {\n if (this.runtimeDataSources[entry.dataSource.uid]) {\n throw new Error(`A runtime data source with uid ${entry.dataSource.uid} has already been registered`);\n }\n if (this.settingsMapByUid[entry.dataSource.uid]) {\n throw new Error(`A data source with uid ${entry.dataSource.uid} has already been registered`);\n }\n\n this.runtimeDataSources[entry.dataSource.uid] = entry.dataSource;\n this.datasources[entry.dataSource.uid] = entry.dataSource;\n this.settingsMapByUid[entry.dataSource.uid] = entry.dataSource.instanceSettings;\n }\n\n getDataSourceSettingsByUid(uid: string): DataSourceInstanceSettings | undefined {\n return this.settingsMapByUid[uid];\n }\n\n getInstanceSettings(\n ref: string | null | undefined | DataSourceRef,\n scopedVars?: ScopedVars\n ): DataSourceInstanceSettings | undefined {\n let nameOrUid = getNameOrUid(ref);\n\n // Expressions has a new UID as __expr__ See: https://github.com/grafana/grafana/pull/62510/\n // But we still have dashboards/panels with old expression UID (-100)\n // To support both UIDs until we migrate them all to new one, this check is necessary\n if (isExpressionReference(nameOrUid)) {\n return expressionInstanceSettings;\n }\n\n if (nameOrUid === 'default' || nameOrUid == null) {\n // Handle type-only datasource references (e.g., {type: 'prometheus'})\n if (isDatasourceRef(ref) && ref.type) {\n const ds = this.findDatasourceByType(ref.type);\n if (ds) {\n return ds;\n }\n }\n // Fall back to default datasource if no type match found\n return this.settingsMapByUid[this.defaultName] ?? this.settingsMapByName[this.defaultName];\n }\n\n // Complex logic to support template variable data source names\n // For this we just pick the current or first data source in the variable\n if (nameOrUid[0] === '$') {\n const interpolatedName = this.templateSrv.replace(nameOrUid, scopedVars, variableInterpolation);\n\n let dsSettings;\n\n if (interpolatedName === 'default') {\n dsSettings = this.settingsMapByName[this.defaultName];\n } else {\n dsSettings = this.settingsMapByUid[interpolatedName] ?? this.settingsMapByName[interpolatedName];\n }\n\n if (!dsSettings) {\n return undefined;\n }\n\n // Return an instance with un-interpolated values for name and uid\n return {\n ...dsSettings,\n isDefault: false,\n name: nameOrUid,\n uid: nameOrUid,\n rawRef: { type: dsSettings.type, uid: dsSettings.uid },\n };\n }\n\n return this.settingsMapByUid[nameOrUid] ?? this.settingsMapByName[nameOrUid] ?? this.settingsMapById[nameOrUid];\n }\n\n get(ref?: string | DataSourceRef | null, scopedVars?: ScopedVars): Promise<DataSourceApi> {\n let nameOrUid = getNameOrUid(ref);\n if (!nameOrUid) {\n // Handle type-only datasource references\n if (isDatasourceRef(ref) && ref.type) {\n const ds = this.findDatasourceByType(ref.type);\n if (!ds) {\n return Promise.reject('no datasource of type');\n }\n return this.get(ds.uid);\n }\n return this.get(this.defaultName);\n }\n\n if (isExpressionReference(ref)) {\n return Promise.resolve(this.datasources[ExpressionDatasourceUID]);\n }\n\n // Check if nameOrUid matches a uid and then get the name\n const byName = this.settingsMapByName[nameOrUid];\n if (byName) {\n nameOrUid = byName.uid;\n }\n\n // This check is duplicated below, this is here mainly as performance optimization to skip interpolation\n if (this.datasources[nameOrUid]) {\n return Promise.resolve(this.datasources[nameOrUid]);\n }\n\n // Interpolation here is to support template variable in data source selection\n nameOrUid = this.templateSrv.replace(nameOrUid, scopedVars, variableInterpolation);\n\n if (nameOrUid === 'default' && this.defaultName !== 'default') {\n return this.get(this.defaultName);\n }\n\n if (this.datasources[nameOrUid]) {\n return Promise.resolve(this.datasources[nameOrUid]);\n }\n\n return this.loadDatasource(nameOrUid);\n }\n\n /**\n * Finds the best datasource instance settings for a given type.\n * Prefers the default datasource of that type, otherwise returns the first one found.\n */\n private findDatasourceByType(type: string): DataSourceInstanceSettings | undefined {\n const settings = this.getList({ type });\n if (!settings?.length) {\n return undefined;\n }\n return settings.find((v) => v.isDefault) ?? settings[0];\n }\n\n async loadDatasource(key: string): Promise<DataSourceApi> {\n if (this.datasources[key]) {\n return Promise.resolve(this.datasources[key]);\n }\n\n // find the metadata\n const instanceSettings = this.getInstanceSettings(key);\n if (!instanceSettings) {\n return Promise.reject({ message: `Datasource ${key} was not found` });\n }\n\n try {\n const dsPlugin = await pluginImporter.importDataSource(instanceSettings.meta);\n // check if its in cache now\n if (this.datasources[key]) {\n return this.datasources[key];\n }\n\n const instance = new dsPlugin.DataSourceClass(instanceSettings);\n\n instance.components = dsPlugin.components;\n if (!instance.userStorage) {\n // DatasourceApi does not instantiate a userStorage property, but DataSourceWithBackend does\n instance.userStorage = new UserStorage(instanceSettings.type);\n }\n\n // Some old plugins does not extend DataSourceApi so we need to manually patch them\n if (!(instance instanceof DataSourceApi)) {\n const anyInstance: any = instance;\n anyInstance.name = instanceSettings.name;\n anyInstance.id = instanceSettings.id;\n anyInstance.type = instanceSettings.type;\n anyInstance.meta = instanceSettings.meta;\n anyInstance.uid = instanceSettings.uid;\n anyInstance.getRef = DataSourceApi.prototype.getRef;\n }\n\n // store in instance cache\n this.datasources[key] = instance;\n this.datasources[instance.uid] = instance;\n return instance;\n } catch (err) {\n if (err instanceof Error) {\n appEvents.emit(AppEvents.alertError, [instanceSettings.name + ' plugin failed', err.toString()]);\n }\n return Promise.reject({ message: `Datasource: ${key} was not found` });\n }\n }\n\n getAll(): DataSourceInstanceSettings[] {\n return Object.values(this.settingsMapByName);\n }\n\n getList(filters: GetDataSourceListFilters = {}): DataSourceInstanceSettings[] {\n const base = Object.values(this.settingsMapByName).filter((x) => {\n if (x.meta.id === 'grafana' || x.meta.id === 'mixed' || x.meta.id === 'dashboard') {\n return false;\n }\n if (filters.metrics && !x.meta.metrics) {\n return false;\n }\n if (filters.tracing && !x.meta.tracing) {\n return false;\n }\n if (filters.logs && x.meta.category !== 'logging' && !x.meta.logs) {\n return false;\n }\n if (filters.annotations && !x.meta.annotations) {\n return false;\n }\n if (filters.alerting && !x.meta.alerting) {\n return false;\n }\n if (filters.pluginId && !matchPluginId(filters.pluginId, x.meta)) {\n return false;\n }\n if (filters.filter && !filters.filter(x)) {\n return false;\n }\n if (filters.type) {\n if (Array.isArray(filters.type)) {\n if (!filters.type.includes(x.type)) {\n return false;\n }\n } else if (!(x.type === filters.type || x.meta.aliasIDs?.includes(filters.type!))) {\n return false;\n }\n }\n if (\n !filters.all &&\n x.meta.metrics !== true &&\n x.meta.annotations !== true &&\n x.meta.tracing !== true &&\n x.meta.logs !== true &&\n x.meta.alerting !== true\n ) {\n return false;\n }\n return true;\n });\n\n if (filters.variables) {\n for (const variable of this.templateSrv.getVariables()) {\n if (variable.type !== 'datasource') {\n continue;\n }\n let dsValue = variable.current.value === 'default' ? this.defaultName : variable.current.value;\n // Support for multi-value DataSource (ds) variables\n if (Array.isArray(dsValue)) {\n // If the ds variable have multiple selected datasources\n // We will use the first one\n dsValue = dsValue[0];\n }\n const dsSettings =\n !Array.isArray(dsValue) && (this.settingsMapByName[dsValue] || this.settingsMapByUid[dsValue]);\n\n if (dsSettings) {\n const key = `$\\{${variable.name}\\}`;\n base.push({\n ...dsSettings,\n isDefault: false,\n name: key,\n uid: key,\n });\n }\n }\n }\n\n const sorted = base.sort((a, b) => {\n if (a.name.toLowerCase() > b.name.toLowerCase()) {\n return 1;\n }\n if (a.name.toLowerCase() < b.name.toLowerCase()) {\n return -1;\n }\n return 0;\n });\n\n if (!filters.pluginId && !filters.alerting) {\n if (filters.mixed) {\n const mixedInstanceSettings = this.getInstanceSettings('-- Mixed --');\n if (mixedInstanceSettings) {\n base.push(mixedInstanceSettings);\n }\n }\n\n if (filters.dashboard) {\n const dashboardInstanceSettings = this.getInstanceSettings('-- Dashboard --');\n if (dashboardInstanceSettings) {\n base.push(dashboardInstanceSettings);\n }\n }\n\n if (!filters.tracing) {\n const grafanaInstanceSettings = this.getInstanceSettings('-- Grafana --');\n if (grafanaInstanceSettings && filters.filter?.(grafanaInstanceSettings) !== false) {\n base.push(grafanaInstanceSettings);\n }\n }\n }\n\n return sorted;\n }\n\n /**\n * @deprecated use getList\n * */\n getExternal(): DataSourceInstanceSettings[] {\n return this.getList();\n }\n\n /**\n * @deprecated use getList\n * */\n getAnnotationSources() {\n return this.getList({ annotations: true, variables: true }).map((x) => {\n return {\n name: x.name,\n value: x.name,\n meta: x.meta,\n };\n });\n }\n\n /**\n * @deprecated use getList\n * */\n getMetricSources(options?: { skipVariables?: boolean }): DataSourceSelectItem[] {\n return this.getList({ metrics: true, variables: !options?.skipVariables }).map((x) => {\n return {\n name: x.name,\n value: x.name,\n meta: x.meta,\n };\n });\n }\n\n async reload() {\n const settings = await getBackendSrv().get('/api/frontend/settings');\n config.datasources = settings.datasources;\n config.defaultDatasource = settings.defaultDatasource;\n this.init(settings.datasources, settings.defaultDatasource);\n }\n}\n\nexport function getNameOrUid(ref?: string | DataSourceRef | null): string | undefined {\n if (isExpressionReference(ref)) {\n return ExpressionDatasourceRef.uid;\n }\n\n const isString = typeof ref === 'string';\n return isString ? ref : ref?.uid;\n}\n\nexport function variableInterpolation<T>(value: T | T[]) {\n if (Array.isArray(value)) {\n return value[0];\n }\n return value;\n}\n\nconst isDatasourceRef = (ref: string | DataSourceRef | null | undefined): ref is DataSourceRef => {\n if (ref && isObject(ref) && 'type' in ref) {\n return true;\n }\n return false;\n};\n\nexport const getDatasourceSrv = (): DatasourceSrv => {\n return getDataSourceService() as DatasourceSrv;\n};\n","import { store } from '@grafana/data';\n\nexport default store;\n","import { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { RadioButtonGroup, Field } from '@grafana/ui';\n\ninterface Props {\n selectedTheme: string;\n onChange: (value: string) => void;\n description?: string;\n}\n\nexport const ThemePicker = ({ selectedTheme = 'current', onChange, description }: Props) => {\n const themeOptions: Array<SelectableValue<string>> = [\n {\n label: t('share-modal.theme-picker.current', `Current`),\n value: 'current',\n },\n {\n label: t('share-modal.theme-picker.dark', `Dark`),\n value: 'dark',\n },\n {\n label: t('share-modal.theme-picker.light', `Light`),\n value: 'light',\n },\n ];\n\n return (\n <Field label={t('share-modal.theme-picker.field-name', `Theme`)} description={description}>\n <RadioButtonGroup options={themeOptions} value={selectedTheme} onChange={onChange} />\n </Field>\n );\n};\n","import { PluginSignatureStatus } from './plugin';\n\n/**\n * Utility function to check if a plugin is unsigned.\n *\n * @param signature - the plugin meta signature\n * @internal\n */\nexport function isUnsignedPluginSignature(signature?: PluginSignatureStatus) {\n return signature && signature !== PluginSignatureStatus.valid && signature !== PluginSignatureStatus.internal;\n}\n","import { css } from '@emotion/css';\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { DataSourceApi, GrafanaTheme2, QueryEditorProps } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, IconButton, InlineField, PopoverContent, useStyles2 } from '@grafana/ui';\n\nimport { ClassicConditions } from './components/ClassicConditions';\nimport { ExpressionTypeDropdown } from './components/ExpressionTypeDropdown';\nimport { Math } from './components/Math';\nimport { Reduce } from './components/Reduce';\nimport { Resample } from './components/Resample';\nimport { SqlExpr } from './components/SqlExpr';\nimport { Threshold } from './components/Threshold';\nimport { ExpressionQuery, ExpressionQueryType, expressionTypes } from './types';\nimport { getDefaults } from './utils/expressionTypes';\n\nexport type ExpressionQueryEditorProps = QueryEditorProps<DataSourceApi<ExpressionQuery>, ExpressionQuery>;\n\nconst labelWidth = 15;\n\ntype NonClassicExpressionType = Exclude<ExpressionQueryType, ExpressionQueryType.classic>;\ntype ExpressionTypeConfigStorage = Partial<Record<NonClassicExpressionType, string>>;\n\n// Help text for each expression type - can be expanded with more detailed content\nconst getExpressionHelpText = (type: ExpressionQueryType): PopoverContent | string => {\n const description = expressionTypes.find(({ value }) => value === type)?.description;\n\n switch (type) {\n case ExpressionQueryType.sql:\n return (\n <Trans i18nKey=\"expressions.expression-query-editor.helper-text-sql\">\n Run MySQL-dialect SQL against the tables returned from your data sources. Data source queries (ie\n "A", "B") are available as tables and referenced by query-name. Fields are available as\n columns, as returned from the data source.\n </Trans>\n );\n default:\n return description ?? '';\n }\n};\n\nfunction useExpressionsCache() {\n const expressionCache = useRef<ExpressionTypeConfigStorage>({});\n\n const getCachedExpression = useCallback((queryType: ExpressionQueryType) => {\n switch (queryType) {\n case ExpressionQueryType.math:\n case ExpressionQueryType.reduce:\n case ExpressionQueryType.resample:\n case ExpressionQueryType.threshold:\n case ExpressionQueryType.sql:\n return expressionCache.current[queryType];\n case ExpressionQueryType.classic:\n return undefined;\n }\n }, []);\n\n const setCachedExpression = useCallback((queryType: ExpressionQueryType, value: string | undefined) => {\n switch (queryType) {\n case ExpressionQueryType.math:\n expressionCache.current.math = value;\n break;\n\n // We want to use the same value for Reduce, Resample and Threshold\n case ExpressionQueryType.reduce:\n case ExpressionQueryType.resample:\n case ExpressionQueryType.threshold:\n expressionCache.current.reduce = value;\n expressionCache.current.resample = value;\n expressionCache.current.threshold = value;\n break;\n case ExpressionQueryType.sql:\n expressionCache.current.sql = value;\n }\n }, []);\n\n return { getCachedExpression, setCachedExpression };\n}\n\nexport function ExpressionQueryEditor(props: ExpressionQueryEditorProps) {\n const { query, queries, onRunQuery, onChange, app } = props;\n const { getCachedExpression, setCachedExpression } = useExpressionsCache();\n\n const styles = useStyles2(getStyles);\n\n const initialExpressionRef = useRef(query.expression);\n const hasTrackedAddExpression = useRef(false);\n\n useEffect(() => {\n // Only track if 1) query has a type, and 2) we haven't tracked yet for this component instance, and\n // 3) initial expression was empty (indicating a new expression, not editing existing)\n if (query.type && !hasTrackedAddExpression.current && !initialExpressionRef.current) {\n reportInteraction('dashboards_expression_interaction', {\n action: 'add_expression',\n expression_type: query.type,\n context: 'panel_query_section',\n });\n hasTrackedAddExpression.current = true;\n }\n }, [query.type, query.refId]);\n\n useEffect(() => {\n setCachedExpression(query.type, query.expression);\n }, [query.expression, query.type, setCachedExpression]);\n\n const onSelectExpressionType = useCallback(\n (value: ExpressionQueryType) => {\n const cachedExpression = getCachedExpression(value!);\n const defaults = getDefaults({ ...query, type: value! });\n\n onChange({ ...defaults, expression: cachedExpression ?? defaults.expression });\n },\n [query, onChange, getCachedExpression]\n );\n\n const renderExpressionType = () => {\n const refIds = queries!.filter((q) => query.refId !== q.refId).map((q) => ({ value: q.refId, label: q.refId }));\n\n switch (query.type) {\n case ExpressionQueryType.math:\n return <Math onChange={onChange} query={query} labelWidth={labelWidth} onRunQuery={onRunQuery} />;\n\n case ExpressionQueryType.reduce:\n return <Reduce refIds={refIds} onChange={onChange} labelWidth={labelWidth} query={query} app={app} />;\n\n case ExpressionQueryType.resample:\n return <Resample query={query} labelWidth={labelWidth} onChange={onChange} refIds={refIds} />;\n\n case ExpressionQueryType.classic:\n return <ClassicConditions onChange={onChange} query={query} refIds={refIds} />;\n\n case ExpressionQueryType.threshold:\n return <Threshold onChange={onChange} query={query} labelWidth={labelWidth} refIds={refIds} />;\n\n case ExpressionQueryType.sql:\n return (\n <SqlExpr\n onChange={onChange}\n query={query}\n refIds={refIds}\n queries={queries}\n metadata={props}\n onRunQuery={onRunQuery}\n />\n );\n }\n };\n\n const helperText = getExpressionHelpText(query.type);\n\n return (\n <div>\n <div className={styles.operationRow}>\n <InlineField\n label={t('expressions.expression-query-editor.label-operation', 'Operation')}\n labelWidth={labelWidth}\n >\n <ExpressionTypeDropdown handleOnSelect={onSelectExpressionType}>\n <Button fill=\"outline\" icon=\"angle-down\" iconPlacement=\"right\" variant=\"secondary\">\n {expressionTypes.find(({ value }) => value === query.type)?.label}\n </Button>\n </ExpressionTypeDropdown>\n </InlineField>\n {helperText && <IconButton className={styles.infoIcon} name=\"info-circle\" tooltip={helperText} />}\n </div>\n {renderExpressionType()}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n operationRow: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }),\n infoIcon: css({\n marginBottom: theme.spacing(0.5), // Align with the select field\n }),\n});\n","import { from, lastValueFrom, map, mergeMap, Observable } from 'rxjs';\n\nimport {\n DataFrame,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n DataSourcePluginMeta,\n PluginType,\n ScopedVars,\n TimeRange,\n} from '@grafana/data';\nimport { SQLQuery } from '@grafana/plugin-ui';\nimport {\n BackendDataSourceResponse,\n DataSourceWithBackend,\n FetchResponse,\n getBackendSrv,\n getDataSourceSrv,\n getTemplateSrv,\n toDataQueryResponse,\n} from '@grafana/runtime';\nimport { ExpressionDatasourceRef } from '@grafana/runtime/internal';\nimport { DataQuery } from '@grafana/schema/dist/esm/index';\nimport icnDatasourceSvg from 'img/icn-datasource.svg';\n\nimport { ExpressionQueryEditor } from './ExpressionQueryEditor';\nimport { ExpressionDatasourceUID, ExpressionQuery, ExpressionQueryType } from './types';\n\n/**\n * This is a singleton instance that just pretends to be a DataSource\n */\nexport class ExpressionDatasourceApi extends DataSourceWithBackend<ExpressionQuery> {\n constructor(public instanceSettings: DataSourceInstanceSettings) {\n super(instanceSettings);\n }\n\n applyTemplateVariables(query: ExpressionQuery, scopedVars: ScopedVars) {\n const templateSrv = getTemplateSrv();\n return {\n ...query,\n expression: templateSrv.replace(query.expression, scopedVars),\n window: templateSrv.replace(query.window, scopedVars),\n };\n }\n\n getCollapsedText(query: ExpressionQuery) {\n return `Expression: ${query.type}`;\n }\n\n query(request: DataQueryRequest<ExpressionQuery>): Observable<DataQueryResponse> {\n let targets = request.targets.map(async (query: ExpressionQuery): Promise<ExpressionQuery> => {\n const ds = await getDataSourceSrv().get(query.datasource);\n\n if (!ds.interpolateVariablesInQueries) {\n return query;\n }\n\n return ds?.interpolateVariablesInQueries([query], request.scopedVars, request.filters)[0] as ExpressionQuery;\n });\n\n let sub = from(Promise.all(targets));\n return sub.pipe(mergeMap((t) => super.query({ ...request, targets: t })));\n }\n\n newQuery(query?: Partial<ExpressionQuery>): ExpressionQuery {\n return {\n refId: '--', // Replaced with query\n datasource: ExpressionDatasourceRef,\n type: query?.type ?? ExpressionQueryType.math,\n ...query,\n };\n }\n\n runMetaSQLExprQuery(request: Partial<SQLQuery>, range: TimeRange, queries: DataQuery[]): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const metaSqlExpressionQuery: ExpressionQuery = {\n window: '',\n hide: false,\n expression: request.rawSql,\n datasource: ExpressionDatasourceRef,\n refId,\n type: ExpressionQueryType.sql,\n };\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n headers: this.getRequestHeaders(),\n data: {\n from: range.from.valueOf().toString(),\n to: range.to.valueOf().toString(),\n queries: [...queries, metaSqlExpressionQuery],\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0] ?? { fields: [] };\n })\n )\n );\n }\n}\n\nexport const instanceSettings: DataSourceInstanceSettings = {\n id: -100,\n uid: ExpressionDatasourceUID,\n name: ExpressionDatasourceRef.name,\n type: ExpressionDatasourceRef.type,\n access: 'proxy',\n meta: {\n baseUrl: '',\n module: '',\n type: PluginType.datasource,\n name: ExpressionDatasourceRef.type,\n id: ExpressionDatasourceRef.type,\n info: {\n author: {\n name: 'Grafana Labs',\n },\n logos: {\n small: icnDatasourceSvg,\n large: icnDatasourceSvg,\n },\n description: 'Adds expression support to Grafana',\n screenshots: [],\n links: [],\n updated: '',\n version: '',\n },\n },\n jsonData: {},\n readOnly: true,\n};\n\nexport const dataSource = new ExpressionDatasourceApi(instanceSettings);\ndataSource.meta = {\n id: ExpressionDatasourceRef.type,\n info: {\n logos: {\n small: icnDatasourceSvg,\n large: icnDatasourceSvg,\n },\n },\n} as DataSourcePluginMeta;\ndataSource.components = {\n QueryEditor: ExpressionQueryEditor,\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { SceneComponentProps, sceneGraph } from '@grafana/scenes';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { isRepeatCloneOrChildOf } from '../../utils/clone';\nimport { useDashboardState } from '../../utils/utils';\nimport { useSoloPanelContext } from '../SoloPanelContext';\nimport { CanvasGridAddActions } from '../layouts-shared/CanvasGridAddActions';\nimport { dashboardCanvasAddButtonHoverStyles } from '../layouts-shared/styles';\n\nimport { AutoGridLayout, AutoGridLayoutState } from './AutoGridLayout';\nimport { AutoGridLayoutManager } from './AutoGridLayoutManager';\n\nexport function AutoGridLayoutRenderer({ model }: SceneComponentProps<AutoGridLayout>) {\n const { children, isHidden } = model.useState();\n const styles = useStyles2(getStyles, model.state);\n const { layoutOrchestrator, isEditing } = useDashboardState(model);\n const layoutManager = sceneGraph.getAncestor(model, AutoGridLayoutManager);\n const { fillScreen } = layoutManager.useState();\n const soloPanelContext = useSoloPanelContext();\n\n if (isHidden || !layoutOrchestrator) {\n return null;\n }\n\n const showCanvasActions = !isRepeatCloneOrChildOf(model) && isEditing;\n\n if (soloPanelContext) {\n return children.map((item) => <item.Component key={item.state.key} model={item} />);\n }\n\n return (\n <div\n className={cx(styles.container, fillScreen && styles.containerFillScreen, isEditing && styles.containerEditing)}\n ref={model.containerRef}\n >\n {children.map((item) => (\n <item.Component key={item.state.key} model={item} />\n ))}\n {showCanvasActions && <CanvasGridAddActions layoutManager={layoutManager} />}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, state: AutoGridLayoutState) => ({\n container: css({\n display: 'grid',\n position: 'relative',\n gridTemplateColumns: state.templateColumns,\n gridTemplateRows: state.templateRows || 'unset',\n gridAutoRows: state.autoRows || 'unset',\n rowGap: theme.spacing(state.rowGap ?? 1),\n columnGap: theme.spacing(state.columnGap ?? 1),\n justifyItems: state.justifyItems || 'unset',\n alignItems: state.alignItems || 'unset',\n justifyContent: state.justifyContent || 'unset',\n [theme.breakpoints.down('md')]: state.md\n ? {\n gridTemplateRows: state.md.templateRows,\n gridTemplateColumns: state.md.templateColumns,\n rowGap: state.md.rowGap ? theme.spacing(state.md.rowGap ?? 1) : undefined,\n columnGap: state.md.columnGap ? theme.spacing(state.md.rowGap ?? 1) : undefined,\n justifyItems: state.md.justifyItems,\n alignItems: state.md.alignItems,\n justifyContent: state.md.justifyContent,\n }\n : undefined,\n // Show add action when hovering over the grid\n ...dashboardCanvasAddButtonHoverStyles,\n }),\n containerFillScreen: css({ flexGrow: 1 }),\n containerEditing: css({ paddingBottom: theme.spacing(5), position: 'relative' }),\n});\n","import { createRef, CSSProperties, PointerEvent as ReactPointerEvent } from 'react';\n\nimport { SceneLayout, SceneObjectBase, SceneObjectState, VizPanel } from '@grafana/scenes';\n\nimport { isRepeatCloneOrChildOf } from '../../utils/clone';\nimport { getLayoutOrchestratorFor } from '../../utils/utils';\n\nimport { AutoGridItem } from './AutoGridItem';\nimport { AutoGridLayoutRenderer } from './AutoGridLayoutRenderer';\nimport { DRAGGED_ITEM_HEIGHT, DRAGGED_ITEM_LEFT, DRAGGED_ITEM_TOP, DRAGGED_ITEM_WIDTH } from './const';\n\nexport interface AutoGridLayoutState extends SceneObjectState, AutoGridLayoutOptions {\n children: AutoGridItem[];\n\n /**\n * True when the item should be rendered but not visible.\n * Useful for conditional display of layout items\n */\n isHidden?: boolean;\n\n /**\n * For media query for screens smaller than md breakpoint\n */\n md?: AutoGridLayoutOptions;\n\n /** True when the items should be draggable */\n isDraggable?: boolean;\n\n /** The key of the item being dragged */\n draggingKey?: string;\n}\n\nexport interface AutoGridLayoutOptions {\n /**\n * Useful for setting a height on items without specifying how many rows there will be.\n * Defaults to 320px\n */\n autoRows?: CSSProperties['gridAutoRows'];\n /**\n * This overrides the autoRows with a specific row template.\n */\n templateRows?: CSSProperties['gridTemplateRows'];\n /**\n * Defaults to repeat(auto-fit, minmax(400px, 1fr)). This pattern us useful for equally sized items with a min width of 400px\n * and dynamic max width split equally among columns.\n */\n templateColumns: CSSProperties['gridTemplateColumns'];\n /** In Grafana design system grid units (8px) */\n rowGap: number;\n /** In Grafana design system grid units (8px) */\n columnGap: number;\n justifyItems?: CSSProperties['justifyItems'];\n alignItems?: CSSProperties['alignItems'];\n justifyContent?: CSSProperties['justifyContent'];\n}\n\nexport class AutoGridLayout extends SceneObjectBase<AutoGridLayoutState> implements SceneLayout {\n public static Component = AutoGridLayoutRenderer;\n\n public containerRef = createRef<HTMLDivElement>();\n private _draggedGridItem: AutoGridItem | null = null;\n private _initialGridItemPosition: {\n pageX: number;\n pageY: number;\n top: number;\n left: number;\n } | null = null;\n\n public constructor(state: Partial<AutoGridLayoutState>) {\n super({\n rowGap: 1,\n columnGap: 1,\n templateColumns: 'repeat(auto-fit, minmax(400px, 1fr))',\n autoRows: state.autoRows ?? `320px`,\n children: state.children ?? [],\n ...state,\n });\n\n this._onDragStart = this._onDragStart.bind(this);\n this._onDragEnd = this._onDragEnd.bind(this);\n this._onDrag = this._onDrag.bind(this);\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n return () => {\n this._resetPanelPositionAndSize();\n document.body.removeEventListener('pointermove', this._onDrag);\n document.body.removeEventListener('pointerup', this._onDragEnd);\n document.body.classList.remove('dashboard-draggable-transparent-selection');\n };\n }\n\n public isDraggable(): boolean {\n if (isRepeatCloneOrChildOf(this)) {\n return false;\n }\n\n return this.state.isDraggable ?? false;\n }\n\n public getDragClass(): string {\n return `grid-drag-handle-${this.state.key}`;\n }\n\n public getDragClassCancel(): string {\n return 'grid-drag-cancel';\n }\n\n public getDragHooks() {\n return {\n onDragStart: this._onDragStart,\n };\n }\n\n private _canDrag(evt: ReactPointerEvent): boolean {\n if (!this.isDraggable()) {\n return false;\n }\n\n if (!(evt.target instanceof Element)) {\n return false;\n }\n\n return !!evt.target.closest(`.${this.getDragClass()}`) && !evt.target.closest(`.${this.getDragClassCancel()}`);\n }\n\n // Start inside dragging\n private _onDragStart(evt: ReactPointerEvent, panel: VizPanel) {\n if (!this._canDrag(evt)) {\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n\n if (!(panel.parent instanceof AutoGridItem)) {\n throw new Error('Dragging wrong item');\n }\n\n this._draggedGridItem = panel.parent;\n\n const { top, left, width, height } = this._draggedGridItem.getBoundingBox();\n this._initialGridItemPosition = { pageX: evt.pageX, pageY: evt.pageY, top, left: left };\n this._updatePanelSize(width, height);\n this._updatePanelPosition(top, left);\n\n this.setState({ draggingKey: this._draggedGridItem.state.key });\n\n document.body.addEventListener('pointermove', this._onDrag);\n document.body.addEventListener('pointerup', this._onDragEnd);\n document.body.classList.add('dashboard-draggable-transparent-selection');\n\n getLayoutOrchestratorFor(this)?.startDraggingSync(evt, panel);\n }\n\n // Stop inside dragging\n private _onDragEnd() {\n window.getSelection()?.removeAllRanges();\n\n this._draggedGridItem = null;\n this._initialGridItemPosition = null;\n this._resetPanelPositionAndSize();\n\n this.setState({ draggingKey: undefined });\n\n document.body.removeEventListener('pointermove', this._onDrag);\n document.body.removeEventListener('pointerup', this._onDragEnd);\n document.body.classList.remove('dashboard-draggable-transparent-selection');\n }\n\n // Handle inside drag moves\n private _onDrag(evt: PointerEvent) {\n if (!this._draggedGridItem || !this._initialGridItemPosition) {\n this._onDragEnd();\n return;\n }\n\n this._updatePanelPosition(\n this._initialGridItemPosition.top + (evt.pageY - this._initialGridItemPosition.pageY),\n this._initialGridItemPosition.left + (evt.pageX - this._initialGridItemPosition.pageX)\n );\n\n const dropTargetGridItemKey = document\n .elementsFromPoint(evt.clientX, evt.clientY)\n ?.find((element) => {\n const key = element.getAttribute('data-auto-grid-item-drop-target');\n\n return !!key && key !== this._draggedGridItem!.state.key;\n })\n ?.getAttribute('data-auto-grid-item-drop-target');\n\n if (dropTargetGridItemKey) {\n this._onDragOverItem(dropTargetGridItemKey);\n }\n }\n\n // Handle dragging an item from the same grid over another item from the same grid\n private _onDragOverItem(key: string) {\n const children = [...this.state.children];\n const draggedIdx = children.findIndex((child) => child === this._draggedGridItem);\n const draggedOverIdx = children.findIndex((child) => child.state.key === key);\n\n if (draggedIdx === -1 || draggedOverIdx === -1) {\n return;\n }\n\n children.splice(draggedIdx, 1);\n children.splice(draggedOverIdx, 0, this._draggedGridItem!);\n\n this.setState({ children });\n }\n\n private _updatePanelPosition(top: number, left: number) {\n this._setContainerStyle(DRAGGED_ITEM_TOP, `${top}px`);\n this._setContainerStyle(DRAGGED_ITEM_LEFT, `${left}px`);\n }\n\n private _updatePanelSize(width: number, height: number) {\n this._setContainerStyle(DRAGGED_ITEM_WIDTH, `${Math.floor(width)}px`);\n this._setContainerStyle(DRAGGED_ITEM_HEIGHT, `${Math.floor(height)}px`);\n }\n\n private _resetPanelPositionAndSize() {\n this._removeContainerStyle(DRAGGED_ITEM_TOP);\n this._removeContainerStyle(DRAGGED_ITEM_LEFT);\n this._removeContainerStyle(DRAGGED_ITEM_WIDTH);\n this._removeContainerStyle(DRAGGED_ITEM_HEIGHT);\n }\n\n private _setContainerStyle(name: string, value: string) {\n this.containerRef.current?.style.setProperty(name, value);\n }\n\n private _removeContainerStyle(name: string) {\n this.containerRef.current?.style.removeProperty(name);\n }\n}\n","import { ObjectMatcher } from 'app/plugins/datasource/alertmanager/types';\nimport { RuleGroupIdentifierV2, RuleIdentifier } from 'app/types/unified-alerting';\n\nimport { createReturnTo } from '../hooks/useReturnTo';\n\nimport { stringifyIdentifier } from './rule-id';\nimport { createRelativeUrl } from './url';\n\ntype QueryParams = ConstructorParameters<typeof URLSearchParams>[0];\n\nexport const createListFilterLink = (values: Array<[string, string]>, options?: { skipSubPath?: boolean }) => {\n const params = new URLSearchParams([['search', values.map(([key, value]) => `${key}:\"${value}\"`).join(' ')]]);\n return createRelativeUrl(`/alerting/list`, params, { skipSubPath: options?.skipSubPath });\n};\n\nexport const alertListPageLink = (queryParams: Record<string, string> = {}, options?: { skipSubPath?: boolean }) =>\n createRelativeUrl(`/alerting/list`, queryParams, { skipSubPath: options?.skipSubPath });\n\nexport const groups = {\n detailsPageLink: (dsUid: string, namespaceId: string, groupName: string, options?: { includeReturnTo: boolean }) => {\n const params: Record<string, string> = options?.includeReturnTo ? { returnTo: createReturnTo() } : {};\n\n return createRelativeUrl(\n `/alerting/${dsUid}/namespaces/${encodeURIComponent(namespaceId)}/groups/${encodeURIComponent(groupName)}/view`,\n params\n );\n },\n detailsPageLinkFromGroupIdentifier: (groupIdentifier: RuleGroupIdentifierV2) => {\n const { groupOrigin, namespace, groupName } = groupIdentifier;\n const isGrafanaOrigin = groupOrigin === 'grafana';\n\n return isGrafanaOrigin\n ? groups.detailsPageLink('grafana', namespace.uid, groupName)\n : groups.detailsPageLink(groupIdentifier.rulesSource.uid, namespace.name, groupName);\n },\n editPageLink: (\n dsUid: string,\n namespaceId: string,\n groupName: string,\n options?: { includeReturnTo?: boolean; skipSubPath?: boolean }\n ) => {\n const params: Record<string, string> = options?.includeReturnTo ? { returnTo: createReturnTo() } : {};\n return createRelativeUrl(\n `/alerting/${dsUid}/namespaces/${encodeURIComponent(namespaceId)}/groups/${encodeURIComponent(groupName)}/edit`,\n params,\n { skipSubPath: options?.skipSubPath }\n );\n },\n newAlertRuleLink: (folderName?: string, folderUid?: string, groupName?: string) => {\n const returnTo = createReturnTo();\n\n const defaults = JSON.stringify({\n folder: {\n title: folderName,\n uid: folderUid,\n },\n group: groupName,\n });\n\n return createRelativeUrl('/alerting/new', { defaults, returnTo });\n },\n newRecordingRuleLink: (folderName?: string, folderUid?: string, groupName?: string) => {\n const returnTo = createReturnTo();\n\n const defaults = JSON.stringify({\n folder: {\n title: folderName,\n uid: folderUid,\n },\n group: groupName,\n });\n\n return createRelativeUrl('/alerting/new/grafana-recording', { defaults, returnTo });\n },\n};\n\nexport const rulesNav = {\n /**\n * Creates a link to the details page of a rule. Encodes the rules source name and rule identifier.\n */\n detailsPageLink: (\n rulesSourceName: string,\n ruleIdentifier: RuleIdentifier,\n params?: QueryParams,\n options?: { skipSubPath?: boolean }\n ) =>\n createRelativeUrl(\n `/alerting/${encodeURIComponent(rulesSourceName)}/${encodeURIComponent(stringifyIdentifier(ruleIdentifier))}/view`,\n params,\n { skipSubPath: options?.skipSubPath }\n ),\n};\n\nexport const notificationPolicies = {\n viewLink: (matchers: ObjectMatcher[], alertmanagerSourceName?: string) => {\n return createRelativeUrl('/alerting/routes', {\n queryString: matchers.map((matcher) => matcher.join('')).join(','),\n alertmanager: alertmanagerSourceName ?? 'grafana',\n });\n },\n};\n","import { capitalize } from 'lodash';\n\nimport { AlertState } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport {\n Alert,\n AlertingRule,\n CloudRuleIdentifier,\n CombinedRule,\n CombinedRuleGroup,\n CombinedRuleWithLocation,\n EditableRuleIdentifier,\n GrafanaRuleIdentifier,\n PromRuleWithLocation,\n PrometheusRuleIdentifier,\n RecordingRule,\n Rule,\n RuleGroupIdentifier,\n RuleIdentifier,\n RuleNamespace,\n RuleWithLocation,\n RulesSource,\n} from 'app/types/unified-alerting';\nimport {\n Annotations,\n GrafanaAlertState,\n GrafanaAlertStateWithReason,\n GrafanaAlertingRuleDefinition,\n GrafanaPromAlertingRuleDTO,\n GrafanaPromRecordingRuleDTO,\n GrafanaRecordingRuleDefinition,\n PostableRuleDTO,\n PromAlertingRuleState,\n PromRuleDTO,\n PromRuleType,\n RulerAlertingRuleDTO,\n RulerCloudRuleDTO,\n RulerGrafanaRuleDTO,\n RulerRecordingRuleDTO,\n RulerRuleDTO,\n RulerRuleGroupDTO,\n mapStateWithReasonToBaseState,\n} from 'app/types/unified-alerting-dto';\n\nimport { CombinedRuleNamespace } from '../../../../types/unified-alerting';\nimport { State } from '../components/StateTag';\nimport { RuleHealth, RuleSource } from '../search/rulesSearchParser';\nimport { RuleFormType, RuleFormValues } from '../types/rule-form';\n\nimport { RULER_NOT_SUPPORTED_MSG } from './constants';\nimport { getRulesSourceName, isGrafanaRulesSource } from './datasource';\nimport { GRAFANA_ORIGIN_LABEL } from './labels';\nimport { AsyncRequestState } from './redux';\nimport { formatPrometheusDuration, safeParsePrometheusDuration } from './time';\n\n/* Grafana managed rules */\n\nfunction isGrafanaRulerRule(rule?: RulerRuleDTO | PostableRuleDTO): rule is RulerGrafanaRuleDTO {\n return typeof rule === 'object' && 'grafana_alert' in rule;\n}\n\nfunction isGrafanaAlertingRule(rule?: RulerRuleDTO): rule is RulerGrafanaRuleDTO<GrafanaAlertingRuleDefinition> {\n return isGrafanaRulerRule(rule) && !isGrafanaRecordingRule(rule);\n}\n\nfunction isGrafanaRecordingRule(rule?: RulerRuleDTO): rule is RulerGrafanaRuleDTO<GrafanaRecordingRuleDefinition> {\n return isGrafanaRulerRule(rule) && 'record' in rule.grafana_alert;\n}\n\nexport function isPausedRule(rule: RulerGrafanaRuleDTO) {\n return Boolean(rule.grafana_alert.is_paused);\n}\n\n/* Data source managed rules */\n\nfunction isAlertingRulerRule(rule?: RulerRuleDTO): rule is RulerAlertingRuleDTO {\n return typeof rule === 'object' && 'alert' in rule;\n}\n\nfunction isCloudRulerRule(rule?: RulerRuleDTO | PostableRuleDTO): rule is RulerCloudRuleDTO {\n return typeof rule === 'object' && !isGrafanaRulerRule(rule);\n}\n\nfunction isCloudRecordingRulerRule(rule?: RulerRuleDTO): rule is RulerRecordingRuleDTO {\n return typeof rule === 'object' && 'record' in rule;\n}\nexport function isCloudRulerGroup(\n rulerRuleGroup: RulerRuleGroupDTO\n): rulerRuleGroup is RulerRuleGroupDTO<RulerCloudRuleDTO> {\n return rulerRuleGroup.rules.every((r) => isCloudRulerRule(r));\n}\n\n/* Prometheus rules */\n\nfunction isAlertingRule(rule?: Rule): rule is AlertingRule {\n return typeof rule === 'object' && rule.type === PromRuleType.Alerting;\n}\n\nfunction isRecordingRule(rule?: Rule): rule is RecordingRule {\n return typeof rule === 'object' && rule.type === PromRuleType.Recording;\n}\n\nfunction isGrafanaPromAlertingRule(rule?: Rule): rule is GrafanaPromAlertingRuleDTO {\n return isAlertingRule(rule) && 'folderUid' in rule && 'uid' in rule;\n}\n\nfunction isGrafanaPromRecordingRule(rule?: Rule): rule is GrafanaPromRecordingRuleDTO {\n return isRecordingRule(rule) && 'folderUid' in rule && 'uid' in rule;\n}\n\nexport const rulerRuleType = {\n grafana: {\n rule: isGrafanaRulerRule,\n alertingRule: isGrafanaAlertingRule,\n recordingRule: isGrafanaRecordingRule,\n },\n dataSource: {\n rule: isCloudRulerRule,\n alertingRule: isAlertingRulerRule,\n recordingRule: isCloudRecordingRulerRule,\n },\n any: {\n rule: (rule?: RulerRuleDTO) => isCloudRulerRule(rule) || isGrafanaRulerRule(rule),\n recordingRule: (rule?: RulerRuleDTO) => isCloudRecordingRulerRule(rule) || isGrafanaRecordingRule(rule),\n alertingRule: (rule?: RulerRuleDTO) => isAlertingRulerRule(rule) || isGrafanaAlertingRule(rule),\n },\n};\n\nexport const prometheusRuleType = {\n rule: (rule?: Rule) => isAlertingRule(rule) || isRecordingRule(rule),\n alertingRule: isAlertingRule,\n recordingRule: isRecordingRule,\n grafana: {\n rule: (rule?: Rule) => isGrafanaPromAlertingRule(rule) || isGrafanaPromRecordingRule(rule),\n alertingRule: isGrafanaPromAlertingRule,\n recordingRule: isGrafanaPromRecordingRule,\n },\n};\n\nexport function alertInstanceKey(alert: Alert): string {\n return JSON.stringify(alert.labels);\n}\n\nexport function isRulerNotSupportedResponse(resp: AsyncRequestState<any>) {\n return resp.error && resp.error?.message?.includes(RULER_NOT_SUPPORTED_MSG);\n}\n\nexport function isGrafanaRuleIdentifier(identifier: RuleIdentifier): identifier is GrafanaRuleIdentifier {\n return 'uid' in identifier;\n}\n\nexport function isCloudRuleIdentifier(identifier: RuleIdentifier): identifier is CloudRuleIdentifier {\n return 'rulerRuleHash' in identifier;\n}\n\nexport function isPromRuleType(ruleType: string): ruleType is PromRuleType {\n return Object.values<string>(PromRuleType).includes(ruleType);\n}\n\nexport function isPrometheusRuleIdentifier(identifier: RuleIdentifier): identifier is PrometheusRuleIdentifier {\n return 'ruleHash' in identifier;\n}\n\nexport function isEditableRuleIdentifier(identifier: RuleIdentifier): identifier is EditableRuleIdentifier {\n return isGrafanaRuleIdentifier(identifier) || isCloudRuleIdentifier(identifier);\n}\n\nexport function isProvisionedRule(rulerRule: RulerRuleDTO): boolean {\n return isGrafanaRulerRule(rulerRule) && Boolean(rulerRule.grafana_alert.provenance);\n}\n\nexport function isProvisionedPromRule(promRule: PromRuleDTO): boolean {\n return prometheusRuleType.grafana.rule(promRule) && Boolean(promRule.provenance);\n}\n\nexport function isProvisionedRuleGroup(group: RulerRuleGroupDTO): boolean {\n return group.rules.some((rule) => isProvisionedRule(rule));\n}\n\nexport function getRuleHealth(health: string): RuleHealth | undefined {\n switch (health) {\n case 'ok':\n return RuleHealth.Ok;\n case 'nodata':\n return RuleHealth.NoData;\n case 'error':\n case 'err': // Prometheus-compat data sources\n return RuleHealth.Error;\n case 'unknown':\n return RuleHealth.Unknown;\n default:\n return undefined;\n }\n}\n\nexport function getRuleSource(source: string): RuleSource | undefined {\n if (source === 'grafana') {\n return RuleSource.Grafana;\n }\n if (source === 'datasource') {\n return RuleSource.DataSource;\n }\n return undefined;\n}\n\nexport function getPendingPeriod(rule: CombinedRule): string | undefined {\n if (rulerRuleType.any.recordingRule(rule.rulerRule)) {\n return undefined;\n }\n\n // We prefer the for duration from the ruler rule because it is formatted as a duration string\n // Prometheus duration is in seconds and we need to format it as a duration string\n // Additionally, due to eventual consistency of the Prometheus endpoint the ruler data might be newer\n if (isAlertingRulerRule(rule.rulerRule)) {\n return rule.rulerRule.for;\n }\n\n if (isAlertingRule(rule.promRule)) {\n const durationInMilliseconds = (rule.promRule.duration ?? 0) * 1000;\n return formatPrometheusDuration(durationInMilliseconds);\n }\n\n return undefined;\n}\n\nexport function getPendingPeriodFromRulerRule(rule: RulerRuleDTO) {\n return rulerRuleType.any.alertingRule(rule) ? rule.for : undefined;\n}\n\nexport function getKeepFiringfor(rule: CombinedRule): string | undefined {\n if (rulerRuleType.any.recordingRule(rule.rulerRule)) {\n return undefined;\n }\n\n if (isGrafanaAlertingRule(rule.rulerRule)) {\n return rule.rulerRule.keep_firing_for;\n }\n\n return undefined;\n}\n\nexport function getAnnotations(rule?: AlertingRule): Annotations {\n return rule?.annotations ?? {};\n}\n\nexport interface RulePluginOrigin {\n pluginId: string;\n}\n\nexport function getRulePluginOrigin(rule?: Rule | PromRuleDTO | RulerRuleDTO): RulePluginOrigin | undefined {\n if (!rule) {\n return undefined;\n }\n\n const origin = rule.labels?.[GRAFANA_ORIGIN_LABEL];\n if (!origin) {\n return undefined;\n }\n\n const match = origin.match(/^plugin\\/(?<pluginId>.+)$/);\n if (!match?.groups) {\n return undefined;\n }\n\n const pluginId = match.groups.pluginId;\n const pluginInstalled = isPluginInstalled(pluginId);\n\n if (!pluginInstalled) {\n return undefined;\n }\n\n return { pluginId };\n}\n\nfunction isPluginInstalled(pluginId: string) {\n return Boolean(config.apps[pluginId]);\n}\n\nexport function isPluginProvidedGroup(group: RulerRuleGroupDTO): boolean {\n return group.rules.some((rule) => isPluginProvidedRule(rule));\n}\n\nexport function isPluginProvidedRule(rule?: Rule | PromRuleDTO | RulerRuleDTO): boolean {\n return Boolean(getRulePluginOrigin(rule));\n}\n\nexport function alertStateToReadable(state: PromAlertingRuleState | GrafanaAlertStateWithReason | AlertState): string {\n if (state === PromAlertingRuleState.Inactive) {\n return 'Normal';\n }\n return capitalize(state);\n}\n\nexport const flattenRules = (rules: RuleNamespace[]) => {\n return rules.reduce<PromRuleWithLocation[]>((acc, { dataSourceName, name: namespaceName, groups }) => {\n groups.forEach(({ name: groupName, rules }) => {\n rules.forEach((rule) => {\n if (isAlertingRule(rule)) {\n acc.push({ dataSourceName, namespaceName, groupName, rule });\n }\n });\n });\n return acc;\n }, []);\n};\n\nexport const getAlertingRule = (rule: CombinedRuleWithLocation) =>\n isAlertingRule(rule.promRule) ? rule.promRule : null;\n\nexport const flattenCombinedRules = (rules: CombinedRuleNamespace[]) => {\n return rules.reduce<CombinedRuleWithLocation[]>((acc, { rulesSource, name: namespaceName, groups }) => {\n groups.forEach(({ name: groupName, rules }) => {\n rules.forEach((rule) => {\n if (rule.promRule && isAlertingRule(rule.promRule)) {\n acc.push({\n dataSourceName: getRulesSourceName(rulesSource),\n namespaceName,\n groupName,\n ...rule,\n namespace: { ...rule.namespace, uid: rule.promRule.folderUid },\n });\n }\n });\n });\n return acc;\n }, []);\n};\n\nexport function alertStateToState(state: PromAlertingRuleState | GrafanaAlertStateWithReason | AlertState): State {\n let key: PromAlertingRuleState | GrafanaAlertState | AlertState;\n if (Object.values(AlertState).includes(state as AlertState)) {\n key = state as AlertState;\n } else {\n key = mapStateWithReasonToBaseState(state as GrafanaAlertStateWithReason | PromAlertingRuleState);\n }\n\n return alertStateToStateMap[key];\n}\n\nconst alertStateToStateMap: Record<PromAlertingRuleState | GrafanaAlertState | AlertState, State> = {\n [PromAlertingRuleState.Inactive]: 'good',\n [PromAlertingRuleState.Firing]: 'bad',\n [PromAlertingRuleState.Pending]: 'warning',\n [PromAlertingRuleState.Recovering]: 'warning',\n [GrafanaAlertState.Alerting]: 'bad',\n [GrafanaAlertState.Error]: 'bad',\n [GrafanaAlertState.NoData]: 'info',\n [GrafanaAlertState.Normal]: 'good',\n [GrafanaAlertState.Pending]: 'warning',\n [GrafanaAlertState.Recovering]: 'warning',\n [AlertState.NoData]: 'info',\n [AlertState.Paused]: 'warning',\n [AlertState.Alerting]: 'bad',\n [AlertState.OK]: 'good',\n // AlertState.Pending is not included because the 'pending' value is already covered by `PromAlertingRuleState.Pending`\n // [AlertState.Pending]: 'warning',\n // same for AlertState.Recovering\n // [AlertState.Recovering]: 'warning',\n [AlertState.Unknown]: 'info',\n};\n\nexport function getFirstActiveAt(promRule?: AlertingRule) {\n if (!promRule?.alerts) {\n return null;\n }\n return promRule.alerts.reduce<Date | null>((prev, alert) => {\n const isNotNormal = mapStateWithReasonToBaseState(alert.state) !== GrafanaAlertState.Normal;\n if (alert.activeAt && isNotNormal) {\n const activeAt = new Date(alert.activeAt);\n if (prev === null || prev.getTime() > activeAt.getTime()) {\n return activeAt;\n }\n }\n return prev;\n }, null);\n}\n\n/**\n * A rule group is \"federated\" when it has at least one \"source_tenants\" entry, federated rule groups will evaluate rules in multiple tenants\n * Non-federated rules do not have this property\n *\n * see https://grafana.com/docs/metrics-enterprise/latest/tenant-management/tenant-federation/#cross-tenant-alerting-and-recording-rule-federation\n */\nexport function isFederatedRuleGroup(group: CombinedRuleGroup | RulerRuleGroupDTO): boolean {\n return Array.isArray(group.source_tenants);\n}\n\nexport function getRuleName(rule: RulerRuleDTO): string {\n if (rulerRuleType.grafana.rule(rule)) {\n return rule.grafana_alert.title;\n }\n\n if (rulerRuleType.dataSource.alertingRule(rule)) {\n return rule.alert;\n }\n\n if (rulerRuleType.dataSource.recordingRule(rule)) {\n return rule.record;\n }\n\n return '';\n}\n\nexport interface AlertInfo {\n alertName: string;\n forDuration?: string;\n evaluationsToFire: number | null;\n}\n\nexport const getAlertInfo = (alert: RulerRuleDTO, currentEvaluation: string): AlertInfo => {\n const emptyAlert: AlertInfo = {\n alertName: '',\n forDuration: '0s',\n evaluationsToFire: 0,\n };\n if (isGrafanaRulerRule(alert)) {\n return {\n alertName: alert.grafana_alert.title,\n forDuration: alert.for,\n evaluationsToFire: alert.for ? getNumberEvaluationsToStartAlerting(alert.for, currentEvaluation) : null,\n };\n }\n if (isAlertingRulerRule(alert)) {\n return {\n alertName: alert.alert,\n forDuration: alert.for ?? '0s',\n evaluationsToFire: getNumberEvaluationsToStartAlerting(alert.for ?? '0s', currentEvaluation),\n };\n }\n return emptyAlert;\n};\n\nexport const getNumberEvaluationsToStartAlerting = (forDuration: string, currentEvaluation: string) => {\n const evalNumberMs = safeParsePrometheusDuration(currentEvaluation);\n const forNumber = safeParsePrometheusDuration(forDuration);\n if (forNumber === 0 && evalNumberMs !== 0) {\n return 1;\n }\n if (evalNumberMs === 0) {\n return 0;\n } else {\n const evaluationsBeforeCeil = forNumber / evalNumberMs;\n return evaluationsBeforeCeil < 1 ? 0 : Math.ceil(forNumber / evalNumberMs) + 1;\n }\n};\n\n/**\n * Calculates the number of rule evaluations before the alerting rule will fire\n * @param pendingPeriodMs - The pending period of the alerting rule in milliseconds\n * @param groupIntervalMs - The group's evaluation interval in milliseconds\n * @returns The number of rule evaluations before the rule will fire\n */\nexport function calcRuleEvalsToStartAlerting(pendingPeriodMs: number, groupIntervalMs: number) {\n if (pendingPeriodMs === 0) {\n return 1; // No pending period, the rule will fire immediately\n }\n if (groupIntervalMs === 0) {\n return 0; // Invalid case. Group interval is never 0. The default interval will be used.\n }\n\n const evaluationsBeforeCeil = pendingPeriodMs / groupIntervalMs;\n return evaluationsBeforeCeil < 1 ? 0 : Math.ceil(pendingPeriodMs / groupIntervalMs) + 1;\n}\n\n/*\n * Extracts a rule group identifier from a CombinedRule\n */\nexport function getRuleGroupLocationFromCombinedRule(rule: CombinedRule): RuleGroupIdentifier {\n const ruleSourceName = isGrafanaRulesSource(rule.namespace.rulesSource)\n ? rule.namespace.rulesSource\n : rule.namespace.rulesSource.name;\n\n const namespace = isGrafanaRulerRule(rule.rulerRule)\n ? rule.rulerRule.grafana_alert.namespace_uid\n : rule.namespace.name;\n\n return {\n dataSourceName: ruleSourceName,\n namespaceName: namespace,\n groupName: rule.group.name,\n };\n}\n\n/**\n * Extracts a rule group identifier from a RuleWithLocation\n */\nexport function getRuleGroupLocationFromRuleWithLocation(rule: RuleWithLocation): RuleGroupIdentifier {\n const dataSourceName = rule.ruleSourceName;\n\n const namespaceName = isGrafanaRulerRule(rule.rule) ? rule.rule.grafana_alert.namespace_uid : rule.namespace;\n const groupName = rule.group.name;\n\n return {\n dataSourceName,\n namespaceName,\n groupName,\n };\n}\n\nexport function getRuleGroupLocationFromFormValues(values: RuleFormValues): RuleGroupIdentifier {\n const dataSourceName = values.dataSourceName;\n const namespaceName = values.folder?.uid ?? values.namespace;\n const groupName = values.group;\n\n if (!dataSourceName) {\n throw new Error('no datasource name in form values');\n }\n\n return {\n dataSourceName,\n namespaceName,\n groupName,\n };\n}\n\nexport function rulesSourceToDataSourceName(rulesSource: RulesSource): string {\n return isGrafanaRulesSource(rulesSource) ? rulesSource : rulesSource.name;\n}\n\nexport function isGrafanaAlertingRuleByType(type?: RuleFormType) {\n return type === RuleFormType.grafana;\n}\n\nexport function isGrafanaRecordingRuleByType(type?: RuleFormType) {\n return type === RuleFormType.grafanaRecording;\n}\n\nexport function isCloudAlertingRuleByType(type?: RuleFormType) {\n return type === RuleFormType.cloudAlerting;\n}\n\nexport function isCloudRecordingRuleByType(type?: RuleFormType) {\n return type === RuleFormType.cloudRecording;\n}\n\nexport function isGrafanaManagedRuleByType(type?: RuleFormType) {\n return isGrafanaAlertingRuleByType(type) || isGrafanaRecordingRuleByType(type);\n}\n\nexport function isRecordingRuleByType(type?: RuleFormType) {\n return isGrafanaRecordingRuleByType(type) || isCloudRecordingRuleByType(type);\n}\n\nexport function isDataSourceManagedRuleByType(type?: RuleFormType) {\n return isCloudAlertingRuleByType(type) || isCloudRecordingRuleByType(type);\n}\n\n/*\n * Grab the UID from either a rulerRule definition or a Prometheus rule definition, only Grafana-managed rules will have a UID.\n */\nexport function getRuleUID(rule?: RulerRuleDTO | Rule) {\n if (!rule) {\n return;\n }\n\n let ruleUid: string | undefined;\n\n if ('grafana_alert' in rule && rulerRuleType.grafana.rule(rule)) {\n ruleUid = rule.grafana_alert.uid;\n } else if ('uid' in rule && prometheusRuleType.grafana.rule(rule)) {\n ruleUid = rule.uid;\n }\n\n return ruleUid;\n}\n","/**\n * Parameters for generating a dashboard path\n */\nexport interface GeneratePathParams {\n timestamp: string;\n pathFromAnnotation?: string;\n slug?: string;\n folderPath?: string;\n}\n\n/**\n * Generates a path for a dashboard based on provided parameters\n * If pathFromAnnotation is provided, it will be used as the base path\n * Otherwise, a path will be generated using the slug or a default name with timestamp\n * If folderPath is provided, it will be prepended to the path\n */\nexport function generatePath({ timestamp, pathFromAnnotation, slug, folderPath = '' }: GeneratePathParams): string {\n let path = '';\n\n if (pathFromAnnotation) {\n const hashIndex = pathFromAnnotation.indexOf('#');\n return hashIndex > 0 ? pathFromAnnotation.substring(0, hashIndex) : pathFromAnnotation;\n }\n\n const pathSlug = slug || `new-dashboard-${timestamp}`;\n path = `${pathSlug}.json`;\n\n // Add folder path if it exists\n if (folderPath) {\n return `${folderPath}/${path}`;\n }\n\n return path;\n}\n","import { Dispatch, SetStateAction, useState } from 'react';\n\nimport { RepositoryView } from 'app/api/clients/provisioning/v0alpha1';\nimport { useUrlParams } from 'app/core/navigation/hooks';\nimport { AnnoKeyManagerIdentity, AnnoKeyManagerKind, AnnoKeySourcePath } from 'app/features/apiserver/types';\nimport { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\nimport { useGetResourceRepositoryView } from 'app/features/provisioning/hooks/useGetResourceRepositoryView';\nimport { getIsReadOnlyRepo } from 'app/features/provisioning/utils/repository';\nimport { DashboardMeta } from 'app/types/dashboard';\n\nimport { getDefaultWorkflow, getWorkflowOptions } from '../components/defaults';\nimport { generatePath } from '../components/utils/path';\nimport { generateTimestamp } from '../components/utils/timestamp';\nimport { ProvisionedDashboardFormData } from '../types/form';\n\ninterface UseDefaultValuesParams {\n meta: DashboardMeta;\n defaultTitle: string;\n defaultDescription?: string;\n loadedFromRef?: string;\n}\n\nexport function useDefaultValues({ meta, defaultTitle, defaultDescription, loadedFromRef }: UseDefaultValuesParams) {\n const annotations = meta.k8s?.annotations;\n const managerKind = annotations?.[AnnoKeyManagerKind];\n const managerIdentity = annotations?.[AnnoKeyManagerIdentity];\n const sourcePath = annotations?.[AnnoKeySourcePath];\n const { repository, folder, isLoading } = useGetResourceRepositoryView({\n name: managerKind === 'repo' ? managerIdentity : undefined,\n folderName: meta.folderUid,\n });\n\n const timestamp = generateTimestamp();\n const folderPath = folder?.metadata?.annotations?.[AnnoKeySourcePath];\n\n const dashboardPath = generatePath({\n timestamp,\n pathFromAnnotation: sourcePath,\n slug: meta.slug,\n folderPath,\n });\n\n const defaultWorkflow = getDefaultWorkflow(repository, loadedFromRef);\n\n if (isLoading || !repository) {\n return null;\n }\n\n return {\n values: {\n ref: defaultWorkflow === 'branch' ? `dashboard/${timestamp}` : (repository?.branch ?? ''),\n path: dashboardPath,\n repo: managerIdentity || repository?.name || '',\n comment: '',\n folder: {\n uid: meta.folderUid,\n title: '',\n },\n title: defaultTitle,\n description: defaultDescription ?? '',\n workflow: getDefaultWorkflow(repository, loadedFromRef),\n },\n isNew: !meta.k8s?.name,\n repository,\n };\n}\n\nexport interface ProvisionedDashboardData {\n isReady: boolean;\n isLoading: boolean;\n setIsLoading: Dispatch<SetStateAction<boolean>>;\n defaultValues: ProvisionedDashboardFormData | null;\n repository?: RepositoryView;\n loadedFromRef?: string;\n workflowOptions: Array<{ label: string; value: string }>;\n isNew: boolean;\n readOnly: boolean;\n}\n\n/**\n * Custom hook to fetch and prepare data for a provisioned dashboard update/delete form.\n * It retrieves default values, repository information, and workflow options based on the current dashboard state.\n */\n\nexport function useProvisionedDashboardData(dashboard: DashboardScene): ProvisionedDashboardData {\n const { meta, title: defaultTitle, description: defaultDescription } = dashboard.useState();\n const [params] = useUrlParams();\n const [isLoading, setIsLoading] = useState(false);\n const loadedFromRef = params.get('ref') ?? undefined;\n\n const defaultValuesResult = useDefaultValues({\n meta,\n defaultTitle,\n defaultDescription,\n loadedFromRef,\n });\n\n if (!defaultValuesResult) {\n return {\n isReady: false,\n isLoading,\n setIsLoading,\n defaultValues: null,\n repository: undefined,\n loadedFromRef,\n workflowOptions: [],\n isNew: false,\n readOnly: true,\n };\n }\n\n const { values, isNew, repository } = defaultValuesResult;\n const workflowOptions = getWorkflowOptions(repository);\n\n return {\n isReady: true,\n defaultValues: values,\n repository,\n loadedFromRef,\n workflowOptions,\n isNew,\n readOnly: getIsReadOnlyRepo(repository),\n isLoading,\n setIsLoading,\n };\n}\n","import { ResourceKey } from 'i18next';\nimport { uniq } from 'lodash';\n\nimport { DEFAULT_LANGUAGE, PSEUDO_LOCALE, LANGUAGES as SUPPORTED_LANGUAGES } from '@grafana/i18n';\n\nexport type LocaleFileLoader = () => Promise<ResourceKey>;\n\nexport const GRAFANA_NAMESPACE = 'grafana' as const;\n\ntype BaseLanguageDefinition = (typeof SUPPORTED_LANGUAGES)[number];\nexport interface LanguageDefinition<Namespace extends string = string> extends BaseLanguageDefinition {\n /** Function to load translations */\n loader: Record<Namespace, LocaleFileLoader>;\n}\n\nexport const LANGUAGES: LanguageDefinition[] = SUPPORTED_LANGUAGES.map((def) => {\n // Load the Default language (en-US) as the pseudo-locale, as it will be post-processed by i18next-pseudo library\n const locale = def.code === PSEUDO_LOCALE ? DEFAULT_LANGUAGE : def.code;\n return {\n ...def,\n loader: { [GRAFANA_NAMESPACE]: () => import(`../../../locales/${locale}/grafana.json`) },\n };\n});\n\n// Optionally load enterprise locale extensions, if they are present.\n// It is important that this happens before NAMESPACES is defined so it has the correct value\n//\n// require.context doesn't work in jest, so we don't even attempt to load enterprise translations...\nif (process.env.NODE_ENV !== 'test') {\n const extensionRequireContext = require.context('../../', true, /app\\/extensions\\/locales\\/localeExtensions/);\n if (extensionRequireContext.keys().includes('app/extensions/locales/localeExtensions')) {\n const { LOCALE_EXTENSIONS, ENTERPRISE_I18N_NAMESPACE } = extensionRequireContext(\n 'app/extensions/locales/localeExtensions'\n );\n\n for (const language of LANGUAGES) {\n const localeLoader = LOCALE_EXTENSIONS[language.code];\n\n if (localeLoader) {\n language.loader[ENTERPRISE_I18N_NAMESPACE] = localeLoader;\n }\n }\n }\n}\n\nexport const VALID_LANGUAGES = LANGUAGES.map((v) => v.code);\n\nexport const NAMESPACES = uniq(LANGUAGES.flatMap((v) => Object.keys(v.loader)));\n","import { useCallback, useState } from 'react';\n\nimport { PanelPlugin, PanelProps } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { sceneUtils } from '@grafana/scenes';\nimport { Box, Button, ButtonGroup, Dropdown, Menu, Stack } from '@grafana/ui';\n\nimport { findVizPanelByKey, getVizPanelKeyForPanelId } from '../utils/utils';\n\nimport { DashboardScene } from './DashboardScene';\n\nexport const UNCONFIGURED_PANEL_PLUGIN_ID = '__unconfigured-panel';\nconst UnconfiguredPanel = new PanelPlugin(UnconfiguredPanelComp);\n\nfunction UnconfiguredPanelComp(props: PanelProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const onMenuClick = useCallback((isOpen: boolean) => {\n setIsOpen(isOpen);\n }, []);\n\n const onConfigure = () => {\n locationService.partial({ editPanel: props.id });\n };\n\n const onUseLibraryPanel = () => {\n const dashboard = window.__grafanaSceneContext;\n\n if (!(dashboard instanceof DashboardScene)) {\n throw new Error('DashboardScene not found');\n }\n\n const panel = findVizPanelByKey(dashboard, getVizPanelKeyForPanelId(props.id));\n if (!panel) {\n throw new Error('Panel not found');\n }\n\n dashboard.onShowAddLibraryPanelDrawer(panel.getRef());\n };\n\n const MenuActions = () => (\n <Menu>\n <Menu.Item\n icon=\"pen\"\n label={t('dashboard.new-panel.menu-open-panel-editor', 'Configure')}\n onClick={onConfigure}\n ></Menu.Item>\n <Menu.Item\n icon=\"library-panel\"\n label={t('dashboard.new-panel.menu-use-library-panel', 'Use library panel')}\n onClick={onUseLibraryPanel}\n ></Menu.Item>\n </Menu>\n );\n\n return (\n <Stack direction={'row'} alignItems={'center'} height={'100%'} justifyContent={'center'}>\n <Box paddingBottom={2}>\n <ButtonGroup>\n <Button icon=\"sliders-v-alt\" onClick={onConfigure}>\n <Trans i18nKey=\"dashboard.new-panel.configure-button\">Configure</Trans>\n </Button>\n <Dropdown overlay={MenuActions} placement=\"bottom-end\" onVisibleChange={onMenuClick}>\n <Button\n aria-label={t('dashboard.new-panel.configure-button-menu', 'Toggle menu')}\n icon={isOpen ? 'angle-up' : 'angle-down'}\n />\n </Dropdown>\n </ButtonGroup>\n </Box>\n </Stack>\n );\n}\n\nsceneUtils.registerRuntimePanelPlugin({\n pluginId: UNCONFIGURED_PANEL_PLUGIN_ID,\n plugin: UnconfiguredPanel,\n});\n","import { css } from '@emotion/css';\nimport { dump, load } from 'js-yaml';\nimport { useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, CodeEditor, Drawer, Icon, Tab, TabsBar, TextLink, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { RulerRuleDTO } from '../../../../../types/unified-alerting-dto';\nimport { RuleFormValues } from '../../types/rule-form';\nimport {\n alertingRulerRuleToRuleForm,\n formValuesToRulerRuleDTO,\n recordingRulerRuleToRuleForm,\n} from '../../utils/rule-form';\nimport { rulerRuleType } from '../../utils/rules';\n\ninterface Props {\n onClose: () => void;\n}\n\nconst cloudRulesTabs = [{ label: 'Yaml', value: 'yaml' }];\n\nexport const RuleInspector = ({ onClose }: Props) => {\n const [activeTab, setActiveTab] = useState('yaml');\n const { setValue } = useFormContext<RuleFormValues>();\n const styles = useStyles2(drawerStyles);\n\n const onApply = (formValues: RuleFormValues) => {\n // Need to loop through all values and set them individually\n // TODO this is not type-safe :(\n for (const key in formValues) {\n // @ts-ignore\n setValue(key, formValues[key]);\n }\n onClose();\n };\n\n return (\n <Drawer\n title={t('alerting.rule-inspector.title-inspect-alert-rule', 'Inspect Alert rule')}\n subtitle={\n <div className={styles.subtitle}>\n <RuleInspectorTabs tabs={cloudRulesTabs} setActiveTab={setActiveTab} activeTab={activeTab} />\n </div>\n }\n onClose={onClose}\n >\n {activeTab === 'yaml' && <InspectorYamlTab onSubmit={onApply} />}\n </Drawer>\n );\n};\n\ninterface RuleInspectorTabsProps<T = string> {\n tabs: Array<{ label: string; value: T }>;\n activeTab: T;\n setActiveTab: (tab: T) => void;\n}\n\nexport function RuleInspectorTabs<T extends string>({ tabs, activeTab, setActiveTab }: RuleInspectorTabsProps<T>) {\n return (\n <TabsBar>\n {tabs.map((tab, index) => {\n return (\n <Tab\n key={`${tab.value}-${index}`}\n label={tab.label}\n value={tab.value}\n onChangeTab={() => setActiveTab(tab.value)}\n active={activeTab === tab.value}\n />\n );\n })}\n </TabsBar>\n );\n}\n\ninterface YamlTabProps {\n onSubmit: (newModel: RuleFormValues) => void;\n}\n\nconst InspectorYamlTab = ({ onSubmit }: YamlTabProps) => {\n const styles = useStyles2(yamlTabStyle);\n const { getValues } = useFormContext<RuleFormValues>();\n\n const yamlValues = formValuesToRulerRuleDTO(getValues());\n const [alertRuleAsYaml, setAlertRuleAsYaml] = useState(dump(yamlValues));\n\n const onApply = () => {\n const rulerRule = load(alertRuleAsYaml) as RulerRuleDTO;\n const currentFormValues = getValues();\n\n const yamlFormValues = rulerRuleToRuleFormValues(rulerRule);\n onSubmit({ ...currentFormValues, ...yamlFormValues });\n };\n\n return (\n <>\n <div className={styles.applyButton}>\n <Button type=\"button\" onClick={onApply}>\n <Trans i18nKey=\"alerting.inspector-yaml-tab.apply\">Apply</Trans>\n </Button>\n <Tooltip content={<YamlContentInfo />} theme=\"info\" placement=\"left-start\" interactive={true}>\n <Icon name=\"exclamation-triangle\" size=\"xl\" />\n </Tooltip>\n </div>\n\n <div className={styles.content}>\n <AutoSizer disableWidth>\n {({ height }) => (\n <CodeEditor\n width=\"100%\"\n height={height}\n language=\"yaml\"\n value={alertRuleAsYaml}\n onBlur={setAlertRuleAsYaml}\n monacoOptions={{\n minimap: {\n enabled: false,\n },\n }}\n />\n )}\n </AutoSizer>\n </div>\n </>\n );\n};\n\nfunction YamlContentInfo() {\n return (\n <div>\n <Trans i18nKey=\"alerting.yaml-content-info.body\">\n The YAML content in the editor only contains alert rule configuration <br />\n To configure Prometheus, you need to provide the rest of the{' '}\n <TextLink href=\"https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/\" external>\n configuration file content.\n </TextLink>\n </Trans>\n </div>\n );\n}\n\nfunction rulerRuleToRuleFormValues(rulerRule: RulerRuleDTO): Partial<RuleFormValues> {\n if (rulerRuleType.dataSource.alertingRule(rulerRule)) {\n return alertingRulerRuleToRuleForm(rulerRule);\n } else if (rulerRuleType.dataSource.recordingRule(rulerRule)) {\n return recordingRulerRuleToRuleForm(rulerRule);\n }\n\n return {};\n}\n\nexport const yamlTabStyle = (theme: GrafanaTheme2) => ({\n content: css({\n flexGrow: 1,\n height: '100%',\n paddingBottom: '16px',\n marginBottom: theme.spacing(2),\n }),\n applyButton: css({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n flexGrow: 0,\n marginBottom: theme.spacing(2),\n }),\n});\n\nexport const drawerStyles = () => ({\n subtitle: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }),\n});\n","import { getProperty } from './feed';\nimport { Feed } from './types';\n\nexport function parseAtomFeed(txt: string): Feed {\n const domParser = new DOMParser();\n const doc = domParser.parseFromString(txt, 'text/xml');\n\n const feed: Feed = {\n items: Array.from(doc.querySelectorAll('entry')).map((node) => ({\n title: getProperty(node, 'title'),\n link: node.querySelector('link')?.getAttribute('href') ?? '',\n content: getProperty(node, 'content'),\n pubDate: getProperty(node, 'published'),\n ogImage: node.querySelector(\"meta[property='og:image']\")?.getAttribute('content'),\n })),\n };\n\n return feed;\n}\n","import { getProperty } from './feed';\nimport { Feed } from './types';\n\nexport function parseRSSFeed(txt: string): Feed {\n const domParser = new DOMParser();\n const doc = domParser.parseFromString(txt, 'text/xml');\n\n const feed: Feed = {\n items: Array.from(doc.querySelectorAll('item')).map((node) => ({\n title: getProperty(node, 'title'),\n link: getProperty(node, 'link'),\n content: getProperty(node, 'description'),\n pubDate: getProperty(node, 'pubDate'),\n ogImage: node.querySelector(\"meta[property='og:image']\")?.getAttribute('content'),\n })),\n };\n\n return feed;\n}\n","import { parseAtomFeed } from './atom';\nimport { parseRSSFeed } from './rss';\n\nexport async function fetchFeedText(url: string) {\n const rsp = await fetch(url);\n const txt = await rsp.text();\n return txt;\n}\n\nexport function isAtomFeed(txt: string) {\n const domParser = new DOMParser();\n const doc = domParser.parseFromString(txt, 'text/xml');\n return doc.querySelector('feed') !== null;\n}\n\nexport function getProperty(node: Element, property: string): string {\n const propNode = node.querySelector(property);\n return propNode?.textContent ?? '';\n}\n\nexport async function loadFeed(url: string) {\n const res = await fetchFeedText(url);\n const parsedFeed = isAtomFeed(res) ? parseAtomFeed(res) : parseRSSFeed(res);\n return parsedFeed;\n}\n","import { FieldType, DataFrame, dateTime } from '@grafana/data';\n\nimport { Feed } from './types';\n\nexport function feedToDataFrame(feed: Feed): DataFrame {\n const date: number[] = [];\n const title: string[] = [];\n const link: string[] = [];\n const content: string[] = [];\n const ogImage: Array<string | undefined | null> = [];\n\n for (const item of feed.items) {\n const val = dateTime(item.pubDate);\n\n try {\n date.push(val.valueOf());\n title.push(item.title);\n link.push(item.link);\n ogImage.push(item.ogImage);\n\n if (item.content) {\n const body = item.content.replace(/<\\/?[^>]+(>|$)/g, '');\n content.push(body);\n }\n } catch (err) {\n console.warn('Error reading news item:', err, item);\n }\n }\n\n return {\n fields: [\n { name: 'date', type: FieldType.time, config: { displayName: 'Date' }, values: date },\n { name: 'title', type: FieldType.string, config: {}, values: title },\n { name: 'link', type: FieldType.string, config: {}, values: link },\n { name: 'content', type: FieldType.string, config: {}, values: content },\n { name: 'ogImage', type: FieldType.string, config: {}, values: ogImage },\n ],\n length: date.length,\n };\n}\n","import { useAsyncFn } from 'react-use';\n\nimport { DataFrameView } from '@grafana/data';\n\nimport { loadFeed } from './feed';\nimport { NewsItem } from './types';\nimport { feedToDataFrame } from './utils';\n\nexport function useNewsFeed(url: string) {\n const [state, getNews] = useAsyncFn(\n async () => {\n const feed = await loadFeed(url);\n const frame = feedToDataFrame(feed);\n return new DataFrameView<NewsItem>(frame);\n },\n [url],\n { loading: true }\n );\n\n return { state, getNews };\n}\n","import { lastValueFrom } from 'rxjs';\n\nimport { VizPanel } from '@grafana/scenes';\nimport { LibraryPanel, defaultDashboard } from '@grafana/schema';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { DashboardGridItem } from 'app/features/dashboard-scene/scene/layout-default/DashboardGridItem';\nimport { vizPanelToPanel } from 'app/features/dashboard-scene/serialization/transformSceneToSaveModel';\nimport { getLibraryPanelBehavior } from 'app/features/dashboard-scene/utils/utils';\nimport { getGrafanaSearcher } from 'app/features/search/service/searcher';\nimport { DashboardQueryResult } from 'app/features/search/service/types';\n\nimport { getBackendSrv } from '../../../core/services/backend_srv';\nimport {\n LibraryElementConnectionDTO,\n LibraryElementDTO,\n LibraryElementKind,\n LibraryElementsSearchResult,\n PanelModelWithLibraryPanel,\n} from '../types';\n\nexport interface GetLibraryPanelsOptions {\n searchString?: string;\n perPage?: number;\n page?: number;\n excludeUid?: string;\n sortDirection?: string;\n typeFilter?: string[];\n folderFilterUIDs?: string[];\n signal?: AbortSignal;\n}\n\nexport async function getLibraryPanels({\n searchString = '',\n perPage = 100,\n page = 1,\n excludeUid = '',\n sortDirection = '',\n typeFilter = [],\n folderFilterUIDs = [],\n signal,\n}: GetLibraryPanelsOptions = {}): Promise<LibraryElementsSearchResult> {\n const params = new URLSearchParams();\n params.append('searchString', searchString);\n params.append('sortDirection', sortDirection);\n params.append('typeFilter', typeFilter.join(','));\n params.append('folderFilterUIDs', folderFilterUIDs.join(','));\n params.append('excludeUid', excludeUid);\n params.append('perPage', perPage.toString(10));\n params.append('page', page.toString(10));\n params.append('kind', LibraryElementKind.Panel.toString(10));\n\n const response = await lastValueFrom(\n getBackendSrv().fetch<{ result: LibraryElementsSearchResult }>({\n method: 'GET',\n url: `/api/library-elements?${params.toString()}`,\n abortSignal: signal,\n showErrorAlert: false,\n })\n );\n return response.data.result;\n}\n\nexport async function getLibraryPanel(uid: string, isHandled = false): Promise<LibraryElementDTO> {\n const response = await lastValueFrom(\n getBackendSrv().fetch<{ result: LibraryElementDTO }>({\n method: 'GET',\n url: `/api/library-elements/${uid}`,\n showSuccessAlert: !isHandled,\n showErrorAlert: !isHandled,\n })\n );\n // kinda heavy weight migration process!!!\n const { result } = response.data;\n const dash = new DashboardModel({\n ...defaultDashboard,\n schemaVersion: 35, // should be saved in the library panel\n panels: [result.model],\n });\n const { scopedVars, ...model } = dash.panels[0].getSaveModel(); // migrated panel\n\n //These properties should not exist on LibraryPanel.model which is of type Omit<Panel, 'gridPos' | 'id' | 'libraryPanel'>\n delete model.gridPos;\n delete model.id;\n delete model.libraryPanel;\n\n dash.destroy(); // kill event listeners\n return {\n ...result,\n model,\n };\n}\n\nexport async function getLibraryPanelByName(name: string): Promise<LibraryElementDTO[]> {\n const { result } = await getBackendSrv().get<{ result: LibraryElementDTO[] }>(\n `/api/library-elements/name/${name}`,\n undefined,\n undefined,\n {\n validatePath: true,\n }\n );\n return result;\n}\n\nexport async function addLibraryPanel(\n panelSaveModel: PanelModelWithLibraryPanel,\n folderUid: string\n): Promise<LibraryElementDTO> {\n const { result } = await getBackendSrv().post(`/api/library-elements`, {\n folderUid,\n name: panelSaveModel.libraryPanel.name,\n model: panelSaveModel,\n kind: LibraryElementKind.Panel,\n });\n return result;\n}\n\nexport async function updateLibraryPanel(panelSaveModel: PanelModelWithLibraryPanel): Promise<LibraryElementDTO> {\n const { libraryPanel, ...model } = panelSaveModel;\n const { uid, name, version, folderUid } = libraryPanel;\n const kind = LibraryElementKind.Panel;\n const { result } = await getBackendSrv().patch(`/api/library-elements/${uid}`, {\n folderUid,\n name,\n model,\n version,\n kind,\n });\n return result;\n}\n\nexport function deleteLibraryPanel(uid: string): Promise<{ message: string }> {\n return getBackendSrv().delete(`/api/library-elements/${uid}`);\n}\n\nexport async function getLibraryPanelConnectedDashboards(\n libraryPanelUid: string\n): Promise<LibraryElementConnectionDTO[]> {\n const { result } = await getBackendSrv().get<{ result: LibraryElementConnectionDTO[] }>(\n `/api/library-elements/${libraryPanelUid}/connections`\n );\n return result;\n}\n\nexport async function getConnectedDashboards(uid: string): Promise<DashboardQueryResult[] | null> {\n const connections = await getLibraryPanelConnectedDashboards(uid);\n if (connections.length === 0) {\n return null;\n }\n\n const result = await getGrafanaSearcher().search({ uid: connections.map((c) => c.connectionUid) });\n return result.view.toArray();\n}\n\nexport function libraryVizPanelToSaveModel(vizPanel: VizPanel) {\n const libraryPanelBehavior = getLibraryPanelBehavior(vizPanel);\n\n const { uid, name, _loadedPanel } = libraryPanelBehavior!.state;\n\n let gridItem = vizPanel.parent;\n\n if (!gridItem || !(gridItem instanceof DashboardGridItem)) {\n throw new Error('Trying to save a library panel that does not have a DashboardGridItem parent');\n }\n\n // we need all the panel properties to save the library panel,\n // so we clone it and remove the behaviour to get what we need\n const saveModel = {\n ..._loadedPanel,\n uid,\n name,\n type: vizPanel.state.pluginId,\n model: vizPanelToPanel(\n vizPanel.clone({ $behaviors: undefined }),\n {\n x: gridItem.state.x ?? 0,\n y: gridItem.state.y ?? 0,\n w: gridItem.state.width ?? 0,\n h: gridItem.state.height ?? 0,\n },\n false,\n gridItem\n ),\n kind: LibraryElementKind.Panel,\n version: _loadedPanel?.version || 0,\n };\n return saveModel;\n}\n\nexport async function updateLibraryVizPanel(vizPanel: VizPanel): Promise<LibraryPanel> {\n const { uid, folderUid, name, model, version, kind } = libraryVizPanelToSaveModel(vizPanel);\n\n const { result } = await getBackendSrv().patch(`/api/library-elements/${uid}`, {\n folderUid,\n name,\n model,\n version,\n kind,\n });\n return result;\n}\n\nexport async function saveLibPanel(panel: VizPanel) {\n const updatedLibPanel = await updateLibraryVizPanel(panel);\n\n const libPanelBehavior = getLibraryPanelBehavior(panel);\n\n if (!libPanelBehavior) {\n throw new Error('Could not find library panel behavior for panel');\n }\n\n libPanelBehavior.setPanelFromLibPanel(updatedLibPanel);\n}\n","import { useEffect } from 'react';\n\nimport { NavModelItem } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, reportInteraction } from '@grafana/runtime';\nimport { MEGA_MENU_TOGGLE_ID } from 'app/core/constants';\nimport { HOME_NAV_ID } from 'app/core/reducers/navModel';\n\nimport { ShowModalReactEvent } from '../../../../types/events';\nimport appEvents from '../../../app_events';\nimport { getFooterLinks } from '../../Footer/Footer';\nimport { HelpModal } from '../../help/HelpModal';\n\nimport { DOCK_MENU_BUTTON_ID, MEGA_MENU_HEADER_TOGGLE_ID } from './MegaMenuHeader';\n\nconst emitOpenShortcutsModal = () => {\n appEvents.publish(new ShowModalReactEvent({ component: HelpModal }));\n};\n\nexport const getEnrichedHelpItem = (helpItem: NavModelItem): NavModelItem => {\n let menuItems = helpItem.children || [];\n\n if (helpItem.id !== 'help') {\n return helpItem;\n }\n\n return {\n ...helpItem,\n subTitle: config.buildInfo.versionString,\n children: [\n ...menuItems,\n ...getFooterLinks(),\n ...getEditionAndUpdateLinks(),\n {\n id: 'keyboard-shortcuts',\n text: t('nav.help/keyboard-shortcuts', 'Keyboard shortcuts'),\n icon: 'keyboard',\n onClick: emitOpenShortcutsModal,\n },\n ],\n };\n};\n\nexport const enrichWithInteractionTracking = (\n item: NavModelItem,\n megaMenuDockedState: boolean,\n ancestorIsNew = false\n) => {\n // creating a new object here to not mutate the original item object\n const newItem = { ...item };\n const onClick = newItem.onClick;\n\n let isNew: 'item' | 'ancestor' | undefined = undefined;\n if (newItem.isNew) {\n isNew = 'item';\n } else if (ancestorIsNew) {\n isNew = 'ancestor';\n }\n\n newItem.onClick = () => {\n reportInteraction('grafana_navigation_item_clicked', {\n path: newItem.url ?? newItem.id,\n menuIsDocked: megaMenuDockedState,\n itemIsBookmarked: Boolean(config.featureToggles.pinNavItems && newItem?.parentItem?.id === 'bookmarks'),\n bookmarkToggleOn: Boolean(config.featureToggles.pinNavItems),\n isNew,\n });\n onClick?.();\n };\n if (newItem.children) {\n newItem.children = newItem.children.map((item) =>\n enrichWithInteractionTracking(item, megaMenuDockedState, isNew !== undefined)\n );\n }\n return newItem;\n};\n\nexport const hasChildMatch = (itemToCheck: NavModelItem, searchItem?: NavModelItem): boolean => {\n return Boolean(\n itemToCheck.children?.some((child) => {\n if (child === searchItem) {\n return true;\n } else {\n return hasChildMatch(child, searchItem);\n }\n })\n );\n};\n\nexport const getActiveItem = (\n navTree: NavModelItem[],\n currentPage: NavModelItem,\n url?: string\n): NavModelItem | undefined => {\n const { id, parentItem } = currentPage;\n\n // special case for the home page\n if (url === '/') {\n return navTree.find((item) => item.id === HOME_NAV_ID);\n }\n\n // special case for profile as it's not part of the mega menu\n if (currentPage.id === 'profile') {\n return undefined;\n }\n\n for (const navItem of navTree) {\n const isIdMatch = Boolean(navItem.id && navItem.id === id);\n const isTextUrlMatch = navItem.text === currentPage.text && navItem.url === currentPage.url;\n\n // ideally, we should only match on id\n // unfortunately it's not a required property of the interface, and there are some cases\n // where it's not set, particularly with child pages of plugins\n // in those cases, we fall back to a text + url match\n if (isIdMatch || isTextUrlMatch) {\n return navItem;\n }\n\n if (navItem.children) {\n const childrenMatch = getActiveItem(navItem.children, currentPage);\n if (childrenMatch) {\n return childrenMatch;\n }\n }\n }\n\n // Do not search for the parent in the bookmarks section\n const isInBookmarksSection = navTree[0]?.parentItem?.id === 'bookmarks';\n if (parentItem && !isInBookmarksSection) {\n return getActiveItem(navTree, parentItem);\n }\n\n return undefined;\n};\n\nexport function getEditionAndUpdateLinks(): NavModelItem[] {\n const { buildInfo, licenseInfo } = config;\n const stateInfo = licenseInfo.stateInfo ? ` (${licenseInfo.stateInfo})` : '';\n const links: NavModelItem[] = [];\n\n links.push({\n target: '_blank',\n id: 'version',\n text: `${buildInfo.edition}${stateInfo}`,\n url: licenseInfo.licenseUrl,\n icon: 'external-link-alt',\n });\n\n if (buildInfo.hasUpdate) {\n links.push({\n target: '_blank',\n id: 'updateVersion',\n text: `New version available!`,\n icon: 'download-alt',\n url: 'https://grafana.com/grafana/download?utm_source=grafana_footer',\n });\n }\n\n return links;\n}\n\nexport function findByUrl(nodes: NavModelItem[], url: string): NavModelItem | null {\n for (const item of nodes) {\n if (item.url === url) {\n return item;\n } else if (item.children?.length) {\n const found = findByUrl(item.children, url);\n if (found) {\n return found;\n }\n }\n }\n return null;\n}\n\n/**\n * helper to manage focus when opening/closing and docking/undocking the mega menu\n * @param isOpen whether the mega menu is open\n * @param isDocked whether mega menu is docked\n */\nexport function useMegaMenuFocusHelper(isOpen: boolean, isDocked: boolean) {\n // manage focus when opening/closing\n useEffect(() => {\n if (isOpen) {\n document.getElementById(MEGA_MENU_HEADER_TOGGLE_ID)?.focus();\n } else {\n document.getElementById(MEGA_MENU_TOGGLE_ID)?.focus();\n }\n }, [isOpen]);\n\n // manage focus when docking/undocking\n useEffect(() => {\n if (isDocked) {\n document.getElementById(DOCK_MENU_BUTTON_ID)?.focus();\n } else {\n document.getElementById(MEGA_MENU_TOGGLE_ID)?.focus();\n }\n }, [isDocked]);\n}\n","import { DataQuery, DataSourceRef } from '@grafana/schema';\n\nexport type User = {\n uid: string;\n displayName?: string;\n avatarUrl?: string;\n};\n\nexport type OnSelectQueryType = (query: DataQuery) => void;\n\nexport type QueryLibraryEventsPropertyMap = Record<string, string | boolean | undefined>;\n\n// flattened data from API response to facilitate structs\nexport type SavedQueryBase = {\n uid: string;\n title: string;\n description: string;\n tags: string[];\n isLocked: boolean;\n isVisible: boolean;\n createdAtTimestamp: number;\n user: User;\n targets: DataQuery[];\n};\n// this should actually be like this, but not posssible due to enterprise Spec\n// & Required<Pick<QuerySpec, 'title' | 'description' | 'tags' | 'isLocked' | 'isVisible'>>;\n\n// our model of SavedQuery to use throughout the frontend\nexport type SavedQuery = {\n query: DataQuery;\n datasourceName?: string;\n queryText?: string;\n datasourceRef?: DataSourceRef | null;\n datasourceType?: string;\n} & Omit<Partial<SavedQueryBase>, 'targets'>;\n\nexport enum QueryLibraryTab {\n ALL = 'all',\n FAVORITES = 'favorites',\n RECENT = 'history',\n FEEDBACK = 'feedback',\n}\n","import { createContext, ReactNode, useContext } from 'react';\n\nimport { CoreApp } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { SavedQuery } from 'app/features/explore/QueryLibrary/types';\n\nimport { OnSelectQueryType, QueryLibraryEventsPropertyMap, QueryLibraryTab } from './types';\n\nexport type QueryLibraryDrawerOptions = {\n datasourceFilters?: string[];\n onSelectQuery?: OnSelectQueryType;\n options?: { isReplacingQuery?: boolean; onSave?: () => void; context?: string; highlightQuery?: string };\n query?: DataQuery;\n};\n\n/**\n * Context with state and action to interact with Query Library. The Query Library feature consists of a drawer\n * that shows existing queries and allows users to use them and manage them and then an AddQueryModal which allows\n * users to save a query into the library. Both of those are included in Grafana AppChrome component.\n *\n * Use this context to interact with those components, showing, hiding and setting initial state for them.\n */\nexport type QueryLibraryContextType = {\n /**\n * Opens a drawer with query library.\n * @param datasourceFilters Data source names that will be used for initial filter in the library.\n * @param onSelectQuery Callback to be called when a query is selected from the library.\n * @param options.context Used for QueryEditor. Should identify the context this is called from, like 'explore' or\n * 'dashboard'.\n * @param newQuery New query to be added to the library.\n */\n openDrawer: (options: QueryLibraryDrawerOptions) => void;\n closeDrawer: (isSelectingQuery?: boolean) => void;\n isDrawerOpen: boolean;\n onSave?: () => void;\n\n /**\n * Returns both save and replace action buttons that can be used to save or replace a query to the library.\n * @param query\n */\n renderSavedQueryButtons: (\n query: DataQuery,\n app?: CoreApp,\n onUpdateSuccess?: () => void,\n onSelectQuery?: (query: DataQuery) => void,\n datasourceFilters?: string[]\n ) => ReactNode;\n\n /**\n * Returns a header component for editing queries from the library.\n * used in places like Explore\n * @param query\n * @param app\n * @param queryLibraryRef\n * @param onCancelEdit\n * @param onUpdateSuccess\n */\n renderQueryLibraryEditingHeader: (\n query: DataQuery,\n app?: CoreApp,\n queryLibraryRef?: string,\n onCancelEdit?: () => void,\n onUpdateSuccess?: () => void,\n onSelectQuery?: (query: DataQuery) => void\n ) => ReactNode;\n\n queryLibraryEnabled: boolean;\n context: string;\n triggerAnalyticsEvent: (\n handleAnalyticEvent: (properties?: QueryLibraryEventsPropertyMap) => void,\n properties?: QueryLibraryEventsPropertyMap,\n contextOverride?: string\n ) => void;\n setNewQuery: (query?: SavedQuery) => void;\n onSelectQuery: (query: DataQuery) => void;\n onFavorite: (uid: string) => void;\n onUnfavorite: (uid: string) => void;\n userFavorites: { [key: string]: boolean };\n isEditingQuery: boolean;\n setIsEditingQuery: (isEditingQuery: boolean) => void;\n onAddHistoryQueryToLibrary: (newQuery: SavedQuery) => void;\n activeTab: QueryLibraryTab;\n setActiveTab: (activeTab: QueryLibraryTab) => void;\n onTabChange: (activeTab: QueryLibraryTab) => void;\n highlightedQuery: string | undefined;\n newQuery: SavedQuery | undefined;\n activeDatasources: string[];\n /** Set a guard function that returns true to allow closing, false to prevent closing */\n setCloseGuard: (shouldAllowClose: () => boolean) => void;\n};\n\nexport const QueryLibraryContext = createContext<QueryLibraryContextType>({\n openDrawer: () => {},\n closeDrawer: () => {},\n isDrawerOpen: false,\n\n setNewQuery: () => {},\n onSave: () => {},\n\n renderSavedQueryButtons: () => {\n return null;\n },\n\n renderQueryLibraryEditingHeader: () => {\n return null;\n },\n\n queryLibraryEnabled: false,\n context: 'unknown',\n triggerAnalyticsEvent: () => {},\n onSelectQuery: () => {},\n onFavorite: () => {},\n onUnfavorite: () => {},\n userFavorites: {},\n isEditingQuery: false,\n setIsEditingQuery: () => {},\n onAddHistoryQueryToLibrary: () => {},\n activeTab: QueryLibraryTab.ALL,\n setActiveTab: () => {},\n onTabChange: () => {},\n highlightedQuery: undefined,\n newQuery: undefined,\n activeDatasources: [],\n setCloseGuard: () => {},\n});\n\nexport function useQueryLibraryContext() {\n return useContext(QueryLibraryContext);\n}\n","import { useMemo, useRef } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, Input, Field, TextLink } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport { RepeatRowSelect2 } from 'app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect';\nimport { SHARED_DASHBOARD_QUERY } from 'app/plugins/datasource/dashboard/constants';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\n\nimport { useConditionalRenderingEditor } from '../../conditional-rendering/hooks/useConditionalRenderingEditor';\nimport { dashboardEditActions } from '../../edit-pane/shared';\nimport { getQueryRunnerFor, useDashboard } from '../../utils/utils';\nimport { useLayoutCategory } from '../layouts-shared/DashboardLayoutSelector';\nimport { useEditPaneInputAutoFocus } from '../layouts-shared/utils';\n\nimport { TabItem } from './TabItem';\n\nexport function useEditOptions(this: TabItem, isNewElement: boolean): OptionsPaneCategoryDescriptor[] {\n const model = this;\n const { layout } = model.useState();\n\n const tabCategory = useMemo(\n () =>\n new OptionsPaneCategoryDescriptor({ title: '', id: 'tab-item-options' }).addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.tabs-layout.tab-options.title-option', 'Title'),\n id: 'tab-options-title',\n render: (descriptor) => <TabTitleInput id={descriptor.props.id} tab={model} isNewElement={isNewElement} />,\n })\n ),\n [isNewElement, model]\n );\n\n const repeatCategory = useMemo(\n () =>\n new OptionsPaneCategoryDescriptor({\n title: t('dashboard.tabs-layout.tab-options.repeat.title', 'Repeat options'),\n id: 'repeat-options',\n isOpenDefault: false,\n }).addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.tabs-layout.tab-options.repeat.variable.title', 'Repeat by variable'),\n id: 'tab-options-repeat-variable',\n description: t(\n 'dashboard.tabs-layout.tab-options.repeat.variable.description',\n 'Repeat this tab for each value in the selected variable.'\n ),\n render: (descriptor) => <TabRepeatSelect id={descriptor.props.id} tab={model} />,\n })\n ),\n [model]\n );\n\n const layoutCategory = useLayoutCategory(layout);\n\n const editOptions = [tabCategory, ...layoutCategory, repeatCategory];\n\n const conditionalRenderingCategory = useMemo(\n () => useConditionalRenderingEditor(model.state.conditionalRendering),\n [model]\n );\n\n if (conditionalRenderingCategory) {\n editOptions.push(conditionalRenderingCategory);\n }\n\n return editOptions;\n}\n\nfunction TabTitleInput({ tab, isNewElement, id }: { tab: TabItem; isNewElement: boolean; id?: string }) {\n const { title } = tab.useState();\n const prevTitle = useRef('');\n\n const ref = useEditPaneInputAutoFocus({ autoFocus: isNewElement });\n const hasUniqueTitle = tab.hasUniqueTitle();\n\n return (\n <Field\n invalid={!hasUniqueTitle}\n error={\n !hasUniqueTitle ? t('dashboard.tabs-layout.tab-options.title-not-unique', 'Title should be unique') : undefined\n }\n >\n <Input\n id={id}\n ref={ref}\n title={t('dashboard.tabs-layout.tab-options.title-option', 'Title')}\n value={title}\n onFocus={() => (prevTitle.current = title || '')}\n onBlur={() => editTabTitleAction(tab, title || '', prevTitle.current || '')}\n onChange={(e) => tab.onChangeTitle(e.currentTarget.value)}\n data-testid={selectors.components.PanelEditor.ElementEditPane.TabsLayout.titleInput}\n />\n </Field>\n );\n}\n\nfunction TabRepeatSelect({ tab, id }: { tab: TabItem; id?: string }) {\n const { layout } = tab.useState();\n const dashboard = useDashboard(tab);\n\n const isAnyPanelUsingDashboardDS = layout.getVizPanels().some((vizPanel) => {\n const runner = getQueryRunnerFor(vizPanel);\n return (\n runner?.state.datasource?.uid === SHARED_DASHBOARD_QUERY ||\n (runner?.state.datasource?.uid === MIXED_DATASOURCE_NAME &&\n runner?.state.queries.some((query) => query.datasource?.uid === SHARED_DASHBOARD_QUERY))\n );\n });\n\n return (\n <>\n <RepeatRowSelect2\n id={id}\n sceneContext={dashboard}\n repeat={tab.state.repeatByVariable}\n onChange={(repeat) => tab.onChangeRepeat(repeat)}\n />\n {isAnyPanelUsingDashboardDS ? (\n <Alert\n data-testid={selectors.pages.Dashboard.Rows.Repeated.ConfigSection.warningMessage}\n severity=\"warning\"\n title=\"\"\n topSpacing={3}\n bottomSpacing={0}\n >\n <p>\n <Trans i18nKey=\"dashboard.tabs-layout.tab.repeat.warning\">\n Panels in this tab use the {{ SHARED_DASHBOARD_QUERY }} data source. These panels will reference the panel\n in the original tab, not the ones in the repeated tabs.\n </Trans>\n </p>\n <TextLink\n external\n href={\n 'https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/create-dashboard/#configure-repeating-tabs'\n }\n >\n <Trans i18nKey=\"dashboard.tabs-layout.tab.repeat.learn-more\">Learn more</Trans>\n </TextLink>\n </Alert>\n ) : undefined}\n </>\n );\n}\n\nfunction editTabTitleAction(tab: TabItem, title: string, prevTitle: string) {\n if (title === prevTitle) {\n return;\n }\n\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.tab-title', 'Change tab title'),\n source: tab,\n perform: () => tab.onChangeTitle(title),\n undo: () => tab.onChangeTitle(prevTitle),\n });\n}\n","import { t } from '@grafana/i18n';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\n\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../types/EditableDashboardElement';\n\nimport { TabItem } from './TabItem';\n\nexport class TabItems implements EditableDashboardElement {\n public readonly isEditableDashboardElement = true;\n\n public constructor(private _tabs: TabItem[]) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return { typeName: t('dashboard.edit-pane.elements.tabs', 'Tabs'), icon: 'folder', instanceName: '' };\n }\n\n public useEditPaneOptions(): OptionsPaneCategoryDescriptor[] {\n return [];\n }\n\n public getTabs(): TabItem[] {\n return this._tabs;\n }\n\n public onDelete() {\n this._tabs.forEach((tab) => tab.onDelete());\n }\n}\n","import React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport {\n SceneObjectState,\n SceneObjectBase,\n sceneGraph,\n VariableDependencyConfig,\n SceneObject,\n VizPanel,\n} from '@grafana/scenes';\nimport { TabsLayoutTabKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { LS_TAB_COPY_KEY } from 'app/core/constants';\nimport { appEvents } from 'app/core/core';\nimport store from 'app/core/store';\nimport kbn from 'app/core/utils/kbn';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport { ConditionalRenderingGroup } from '../../conditional-rendering/group/ConditionalRenderingGroup';\nimport { serializeTab } from '../../serialization/layoutSerializers/TabsLayoutSerializer';\nimport { getElements } from '../../serialization/layoutSerializers/utils';\nimport { getDashboardSceneFor } from '../../utils/utils';\nimport { AutoGridLayoutManager } from '../layout-auto-grid/AutoGridLayoutManager';\nimport { clearClipboard } from '../layouts-shared/paste';\nimport { scrollCanvasElementIntoView } from '../layouts-shared/scrollCanvasElementIntoView';\nimport { BulkActionElement } from '../types/BulkActionElement';\nimport { DashboardDropTarget } from '../types/DashboardDropTarget';\nimport { DashboardLayoutManager } from '../types/DashboardLayoutManager';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../types/EditableDashboardElement';\nimport { LayoutParent } from '../types/LayoutParent';\n\nimport { useEditOptions } from './TabItemEditor';\nimport { TabItemRenderer } from './TabItemRenderer';\nimport { TabItems } from './TabItems';\nimport { TabsLayoutManager } from './TabsLayoutManager';\n\nexport interface TabItemState extends SceneObjectState {\n layout: DashboardLayoutManager;\n title?: string;\n isDropTarget?: boolean;\n conditionalRendering?: ConditionalRenderingGroup;\n repeatByVariable?: string;\n repeatedTabs?: TabItem[];\n /** Marks object as a repeated object and a key pointer to source object */\n repeatSourceKey?: string;\n}\n\nexport class TabItem\n extends SceneObjectBase<TabItemState>\n implements LayoutParent, BulkActionElement, EditableDashboardElement, DashboardDropTarget\n{\n public static Component = TabItemRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title'],\n });\n\n public readonly isEditableDashboardElement = true;\n public readonly isDashboardDropTarget = true;\n\n public containerRef = React.createRef<HTMLDivElement>();\n\n constructor(state?: Partial<TabItemState>) {\n super({\n ...state,\n title: state?.title ?? t('dashboard.tabs-layout.tab.new', 'New tab'),\n layout: state?.layout ?? AutoGridLayoutManager.createEmpty(),\n conditionalRendering: state?.conditionalRendering ?? ConditionalRenderingGroup.createEmpty(),\n });\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n const deactivate = this.state.conditionalRendering?.activate();\n\n return () => {\n if (deactivate) {\n deactivate();\n }\n };\n }\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return {\n typeName: t('dashboard.edit-pane.elements.tab', 'Tab'),\n instanceName: sceneGraph.interpolate(this, this.state.title, undefined, 'text'),\n icon: 'layers',\n };\n }\n\n public getOutlineChildren(): SceneObject[] {\n return this.state.layout.getOutlineChildren();\n }\n\n public getLayout(): DashboardLayoutManager {\n return this.state.layout;\n }\n\n public getSlug(): string {\n return kbn.slugifyForUrl(sceneGraph.interpolate(this, this.state.title ?? 'Tab'));\n }\n\n public switchLayout(layout: DashboardLayoutManager) {\n this.setState({ layout });\n }\n\n public useEditPaneOptions = useEditOptions.bind(this);\n\n public onDelete() {\n const layout = this.getParentLayout();\n layout.removeTab(this);\n }\n\n public onConfirmDelete() {\n const layout = this.getParentLayout();\n\n if (layout.shouldUngroup()) {\n layout.removeTab(this);\n return;\n }\n\n if (this.getLayout().getVizPanels().length === 0) {\n this.onDelete();\n return;\n }\n\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard.tabs-layout.delete-tab-title', 'Delete tab?'),\n text: t(\n 'dashboard.tabs-layout.delete-tab-text',\n 'Deleting this tab will also remove all panels. Are you sure you want to continue?'\n ),\n yesText: t('dashboard.tabs-layout.delete-tab-yes', 'Delete'),\n onConfirm: () => {\n this.onDelete();\n },\n })\n );\n }\n\n public serialize(): TabsLayoutTabKind {\n return serializeTab(this);\n }\n\n public onCopy() {\n const elements = getElements(this.getLayout(), getDashboardSceneFor(this));\n clearClipboard();\n store.set(LS_TAB_COPY_KEY, JSON.stringify({ elements, tab: this.serialize() }));\n }\n\n public createMultiSelectedElement(items: SceneObject[]): TabItems {\n return new TabItems(items.filter((item) => item instanceof TabItem));\n }\n\n public onDuplicate(): void {\n this.getParentLayout().duplicateTab(this);\n }\n\n public duplicate(): TabItem {\n return this.clone({ key: undefined, layout: this.getLayout().duplicate() });\n }\n\n public onChangeTitle(title: string) {\n this.setState({ title });\n const currentTabSlug = this.getSlug();\n this.getParentLayout().setState({ currentTabSlug });\n }\n\n public onChangeName(name: string): void {\n this.onChangeTitle(name);\n }\n\n public onChangeRepeat(repeat: string | undefined) {\n if (repeat) {\n this.setState({ repeatByVariable: repeat });\n } else {\n this.setState({ repeatedTabs: undefined, $variables: undefined, repeatByVariable: undefined });\n }\n }\n\n public setIsDropTarget(isDropTarget: boolean) {\n if (!!this.state.isDropTarget !== isDropTarget) {\n this.setState({ isDropTarget });\n }\n }\n\n public draggedPanelOutside(panel: VizPanel) {\n this.getLayout().removePanel?.(panel);\n this.setIsDropTarget(false);\n }\n\n public draggedPanelInside(panel: VizPanel) {\n panel.clearParent();\n this.getLayout().addPanel(panel);\n this.setIsDropTarget(false);\n\n const parentLayout = this.getParentLayout();\n\n if (parentLayout.state.currentTabSlug !== this.getSlug()) {\n parentLayout.setState({ currentTabSlug: this.getSlug() });\n }\n }\n\n public getParentLayout(): TabsLayoutManager {\n return sceneGraph.getAncestor(this, TabsLayoutManager);\n }\n\n public scrollIntoView(): void {\n const tabsLayout = this.getParentLayout();\n if (tabsLayout.getCurrentTab() !== this) {\n tabsLayout.switchToTab(this);\n }\n\n scrollCanvasElementIntoView(this, this.containerRef);\n }\n\n public hasUniqueTitle(): boolean {\n const parentLayout = this.getParentLayout();\n const duplicateTitles = parentLayout.duplicateTitles();\n return !duplicateTitles.has(this.state.title);\n }\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nconst MATCH_ID_INDEX = 2;\nconst SVG_ID_INSERT_POS = 5;\n\nexport const getSvgStyle = (svgCode: string) => {\n const svgStyle = svgCode.match(new RegExp('<style type=\"text/css\">([\\\\s\\\\S]*?)<\\\\/style>'));\n return svgStyle ? svgStyle[0] : null;\n};\n\nexport const getSvgId = (svgCode: string) => {\n return svgCode.match(new RegExp('<svg.*id\\\\s*=\\\\s*([\\'\"])(.*?)\\\\1'))?.[MATCH_ID_INDEX];\n};\n\nexport const svgStyleCleanup = (svgCode: string) => {\n let svgId = getSvgId(svgCode);\n if (!svgId) {\n svgId = `x${uuidv4()}`;\n const pos = svgCode.indexOf('<svg') + SVG_ID_INSERT_POS;\n svgCode = svgCode.substring(0, pos) + `id=\"${svgId}\" ` + svgCode.substring(pos);\n }\n\n let svgStyle = getSvgStyle(svgCode);\n if (svgStyle) {\n let replacedId = svgStyle.replace(/(#(.*?))?\\./g, `#${svgId} .`);\n svgCode = svgCode.replace(svgStyle, replacedId);\n }\n\n return svgCode;\n};\n","import SVG, { Props } from 'react-inlinesvg';\n\nimport { textUtil } from '@grafana/data';\n\nimport { svgStyleCleanup } from './utils';\n\ntype SanitizedSVGProps = Props & { cleanStyle?: boolean };\n\nexport const SanitizedSVG = (props: SanitizedSVGProps) => {\n const { cleanStyle, ...inlineSvgProps } = props;\n return <SVG {...inlineSvgProps} cacheRequests={true} preProcessor={cleanStyle ? getCleanSVGAndStyle : getCleanSVG} />;\n};\n\nlet cache = new Map<string, string>();\n\nfunction getCleanSVG(code: string): string {\n let clean = cache.get(code);\n if (!clean) {\n clean = textUtil.sanitizeSVGContent(code);\n cache.set(code, clean);\n }\n\n return clean;\n}\n\nfunction getCleanSVGAndStyle(code: string): string {\n let clean = cache.get(code);\n if (!clean) {\n clean = textUtil.sanitizeSVGContent(code);\n\n if (clean.indexOf('<style type=\"text/css\">') > -1) {\n clean = svgStyleCleanup(clean);\n }\n\n cache.set(code, clean);\n }\n\n return clean;\n}\n","import { ReactElement } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, Box, Spinner, Stack } from '@grafana/ui';\nimport { Diffs } from 'app/features/dashboard-scene/settings/version-history/utils';\n\nimport { DiffGroup } from '../../../dashboard-scene/settings/version-history/DiffGroup';\nimport { DiffViewer } from '../../../dashboard-scene/settings/version-history/DiffViewer';\n\ninterface SaveDashboardDiffProps {\n oldValue?: unknown;\n newValue?: unknown;\n\n // calculated by parent so we can see summary in tabs\n diff?: Diffs;\n hasFolderChanges?: boolean;\n oldFolder?: string;\n newFolder?: string;\n hasMigratedToV2?: boolean;\n}\n\nexport const SaveDashboardDiff = ({\n diff,\n oldValue,\n newValue,\n hasFolderChanges,\n oldFolder,\n newFolder,\n hasMigratedToV2,\n}: SaveDashboardDiffProps) => {\n const loader = useAsync(async () => {\n const oldJSON = JSON.stringify(oldValue ?? {}, null, 2);\n const newJSON = JSON.stringify(newValue ?? {}, null, 2);\n\n // Schema changes will have MANY changes that the user will not understand\n let schemaChange: ReactElement | undefined = undefined;\n const diffs: ReactElement[] = [];\n let count = 0;\n\n if (diff) {\n for (const [key, changes] of Object.entries(diff)) {\n // this takes a long time for large diffs (so this is async)\n const g = <DiffGroup diffs={changes} key={key} title={key} />;\n if (key === 'schemaVersion') {\n schemaChange = g;\n } else {\n diffs.push(g);\n }\n count += changes.length;\n }\n }\n\n return {\n schemaChange,\n diffs,\n count,\n showDiffs: count < 15, // overwhelming if too many changes\n jsonView: <DiffViewer oldValue={oldJSON} newValue={newJSON} />,\n };\n }, [diff, oldValue, newValue]);\n\n const { value } = loader;\n\n return (\n <Stack direction=\"column\" gap={1}>\n {hasMigratedToV2 && (\n <Box paddingTop={1}>\n <Alert\n title={t(\n 'dashboard.save-dashboard-diff.title-because-dashboard-migrated-grafana-format',\n 'The diff is hard to read because the dashboard has been migrated to the new Grafana dashboard format'\n )}\n severity=\"info\"\n />\n </Box>\n )}\n {hasFolderChanges && (\n <DiffGroup\n diffs={[\n {\n op: 'replace',\n value: newFolder,\n originalValue: oldFolder,\n path: [],\n startLineNumber: 0,\n endLineNumber: 0,\n },\n ]}\n key={'folder'}\n title={t('dashboard.save-dashboard-diff.title-folder', 'folder')}\n />\n )}\n {(!value || !oldValue) && <Spinner />}\n {value && value.count >= 1 ? (\n <>\n {!hasMigratedToV2 && value && value.schemaChange && value.schemaChange}\n {value && value.showDiffs && value.diffs}\n <Box paddingTop={1}>\n <h4>\n <Trans i18nKey=\"dashboard.save-dashboard-diff.full-json-diff\">Full JSON diff</Trans>\n </h4>\n {value.jsonView}\n </Box>\n </>\n ) : (\n <Box paddingTop={1}>\n <Trans i18nKey=\"dashboard.save-dashboard-diff.no-changes-in-the-dashboard-json\">\n No changes in the dashboard JSON\n </Trans>\n </Box>\n )}\n </Stack>\n );\n};\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { MenuItemProps } from './MenuItem';\n\n/** @internal */\nexport interface MenuItemsGroup<T = unknown> {\n /** Label for the menu items group */\n label?: string;\n /** Aria label for accessibility support */\n ariaLabel?: string;\n /** Items of the group */\n items: Array<MenuItemProps<T>>;\n}\n\n/** @internal */\nexport interface MenuGroupProps extends Partial<MenuItemsGroup> {\n /** special children prop to pass children elements */\n children: React.ReactNode;\n}\n\n/** @internal */\nexport const MenuGroup = ({ label, ariaLabel, children }: MenuGroupProps) => {\n const styles = useStyles2(getStyles);\n const labelID = `group-label-${uniqueId()}`;\n\n return (\n <div role=\"group\" aria-labelledby={!ariaLabel && label ? labelID : undefined} aria-label={ariaLabel}>\n {label && (\n <label id={labelID} className={styles.groupLabel} aria-hidden>\n {label}\n </label>\n )}\n {children}\n </div>\n );\n};\nMenuGroup.displayName = 'MenuGroup';\n\n/** @internal */\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n groupLabel: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.size.sm,\n padding: theme.spacing(0.5, 1),\n }),\n };\n};\n","import * as raw from '../common/common.gen';\n\nimport { MatcherConfig } from './dashboard.types';\n\nexport interface MapLayerOptions<TConfig = any> extends raw.MapLayerOptions {\n // Custom options depending on the type\n config?: TConfig;\n filterData?: MatcherConfig;\n // Disable world repetition for basemap layers\n noRepeat?: boolean;\n}\n\nexport interface DataQuery extends raw.DataQuery {\n /**\n * Unique, guid like, string (used only in explore mode)\n */\n key?: string;\n\n // TODO remove explicit nulls\n datasource?: raw.DataSourceRef | null;\n}\nexport interface BaseDimensionConfig<T = string | number> extends Omit<raw.BaseDimensionConfig, 'fixed'> {\n fixed: T;\n}\n\nexport interface ScaleDimensionConfig extends BaseDimensionConfig<number>, Omit<raw.ScaleDimensionConfig, 'fixed'> {}\n\nexport interface ScalarDimensionConfig extends BaseDimensionConfig<number>, Omit<raw.ScalarDimensionConfig, 'fixed'> {}\n\nexport interface TextDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.TextDimensionConfig, 'fixed'> {}\n\nexport interface ColorDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.ColorDimensionConfig, 'fixed'> {}\n\nexport interface ColorDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.ColorDimensionConfig, 'fixed'> {}\n\nexport interface ResourceDimensionConfig\n extends BaseDimensionConfig<string>,\n Omit<raw.ResourceDimensionConfig, 'fixed'> {}\n\nexport * from '../common/common.gen';\n\n// TODO remove when https://github.com/grafana/cuetsy/issues/74 is fixed\nexport const defaultTableFieldOptions: raw.TableFieldOptions = {\n align: 'auto',\n inspect: false,\n wrapHeaderText: false,\n cellOptions: {\n type: raw.TableCellDisplayMode.Auto,\n },\n};\n\n/**\n * Represent panel data loading state.\n * @deprecated Please use LoadingState from @grafana/data\n */\nexport enum LoadingState {\n NotStarted = 'NotStarted',\n Loading = 'Loading',\n Streaming = 'Streaming',\n Done = 'Done',\n Error = 'Error',\n}\n","import { uniqueId } from 'lodash';\n\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport {\n AdHocFiltersVariable,\n behaviors,\n ConstantVariable,\n CustomVariable,\n DataSourceVariable,\n GroupByVariable,\n IntervalVariable,\n QueryVariable,\n SceneRefreshPicker,\n SceneTimePicker,\n SceneTimeRange,\n SceneVariable,\n SceneVariableSet,\n ScopesVariable,\n SwitchVariable,\n TextBoxVariable,\n} from '@grafana/scenes';\nimport {\n AdhocVariableKind,\n AnnotationQueryKind,\n ConstantVariableKind,\n CustomVariableKind,\n Spec as DashboardV2Spec,\n DatasourceVariableKind,\n defaultAdhocVariableKind,\n defaultConstantVariableKind,\n defaultCustomVariableKind,\n defaultDataQueryKind,\n defaultDatasourceVariableKind,\n defaultGroupByVariableKind,\n defaultIntervalVariableKind,\n defaultQueryVariableKind,\n defaultTextVariableKind,\n defaultSwitchVariableKind,\n GroupByVariableKind,\n IntervalVariableKind,\n LibraryPanelKind,\n PanelKind,\n QueryVariableKind,\n SwitchVariableKind,\n TextVariableKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { DEFAULT_ANNOTATION_COLOR } from '@grafana/ui';\nimport {\n AnnoKeyCreatedBy,\n AnnoKeyFolder,\n AnnoKeyUpdatedBy,\n AnnoKeyUpdatedTimestamp,\n AnnoKeyDashboardIsSnapshot,\n DeprecatedInternalId,\n AnnoKeyEmbedded,\n} from 'app/features/apiserver/types';\nimport { DashboardWithAccessInfo } from 'app/features/dashboard/api/types';\nimport {\n getDashboardSceneProfilerWithMetadata,\n enablePanelProfilingForDashboard,\n getDashboardComponentInteractionCallback,\n} from 'app/features/dashboard/services/DashboardProfiler';\nimport { DashboardMeta } from 'app/types/dashboard';\n\nimport { addPanelsOnLoadBehavior } from '../addToDashboard/addPanelsOnLoadBehavior';\nimport { dashboardAnalyticsInitializer } from '../behaviors/DashboardAnalyticsInitializerBehavior';\nimport { DashboardAnnotationsDataLayer } from '../scene/DashboardAnnotationsDataLayer';\nimport { DashboardControls } from '../scene/DashboardControls';\nimport { DashboardDataLayerSet } from '../scene/DashboardDataLayerSet';\nimport { registerDashboardMacro } from '../scene/DashboardMacro';\nimport { DashboardReloadBehavior } from '../scene/DashboardReloadBehavior';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { DashboardLayoutManager } from '../scene/types/DashboardLayoutManager';\nimport { getIntervalsFromQueryString } from '../utils/utils';\n\nimport { transformV2ToV1AnnotationQuery } from './annotations';\nimport { SnapshotVariable } from './custom-variables/SnapshotVariable';\nimport { layoutDeserializerRegistry } from './layoutSerializers/layoutSerializerRegistry';\nimport { getDataSourceForQuery, getRuntimeVariableDataSource } from './layoutSerializers/utils';\nimport { registerPanelInteractionsReporter } from './transformSaveModelToScene';\nimport {\n transformCursorSyncV2ToV1,\n transformSortVariableToEnumV1,\n transformVariableHideToEnumV1,\n transformVariableRefreshToEnumV1,\n} from './transformToV1TypesUtils';\nimport { LEGACY_STRING_VALUE_KEY } from './transformToV2TypesUtils';\n\nconst DEFAULT_DATASOURCE = 'default';\n\nexport type TypedVariableModelV2 =\n | QueryVariableKind\n | TextVariableKind\n | ConstantVariableKind\n | DatasourceVariableKind\n | IntervalVariableKind\n | CustomVariableKind\n | GroupByVariableKind\n | AdhocVariableKind\n | SwitchVariableKind;\n\nexport function transformSaveModelSchemaV2ToScene(dto: DashboardWithAccessInfo<DashboardV2Spec>): DashboardScene {\n const { spec: dashboard, metadata, apiVersion } = dto;\n\n // annotations might not come with the builtIn Grafana annotation, we need to add it\n const grafanaBuiltAnnotation = getGrafanaBuiltInAnnotationDataLayer(dashboard);\n if (grafanaBuiltAnnotation) {\n dashboard.annotations.unshift(grafanaBuiltAnnotation);\n }\n\n const annotationLayers = dashboard.annotations.map((annotation) => {\n const annotationQuerySpec = transformV2ToV1AnnotationQuery(annotation);\n\n const layerState = {\n key: uniqueId('annotations-'),\n query: annotationQuerySpec,\n name: annotation.spec.name,\n isEnabled: Boolean(annotation.spec.enable),\n isHidden: Boolean(annotation.spec.hide),\n placement: annotation.spec.placement,\n };\n\n return new DashboardAnnotationsDataLayer(layerState);\n });\n\n const isDashboardEditable = Boolean(dashboard.editable);\n const canSave = dto.access.canSave !== false;\n let dashboardId: number | undefined = undefined;\n\n if (metadata.labels?.[DeprecatedInternalId]) {\n dashboardId = parseInt(metadata.labels[DeprecatedInternalId], 10);\n }\n\n const meta: DashboardMeta = {\n canShare: dto.access.canShare !== false,\n canSave,\n canStar: dto.access.canStar !== false,\n canEdit: dto.access.canEdit !== false,\n canDelete: dto.access.canDelete !== false,\n canAdmin: dto.access.canAdmin !== false,\n url: dto.access.url,\n slug: dto.access.slug,\n annotationsPermissions: dto.access.annotationsPermissions,\n created: metadata.creationTimestamp,\n createdBy: metadata.annotations?.[AnnoKeyCreatedBy],\n updated: metadata.annotations?.[AnnoKeyUpdatedTimestamp],\n updatedBy: metadata.annotations?.[AnnoKeyUpdatedBy],\n folderUid: metadata.annotations?.[AnnoKeyFolder],\n isSnapshot: Boolean(metadata.annotations?.[AnnoKeyDashboardIsSnapshot]),\n isEmbedded: Boolean(metadata.annotations?.[AnnoKeyEmbedded]),\n\n // UI-only metadata, ref: DashboardModel.initMeta\n showSettings: Boolean(dto.access.canEdit),\n canMakeEditable: canSave && !isDashboardEditable,\n hasUnsavedFolderChange: false,\n version: metadata.generation,\n k8s: metadata,\n };\n\n // Ref: DashboardModel.initMeta\n if (!isDashboardEditable) {\n meta.canEdit = false;\n meta.canDelete = false;\n meta.canSave = false;\n }\n\n const layoutManager: DashboardLayoutManager = layoutDeserializerRegistry\n .get(dashboard.layout.kind)\n .deserialize(dashboard.layout, dashboard.elements, dashboard.preload);\n\n //createLayoutManager(dashboard);\n\n // Create profiler once and reuse to avoid duplicate metadata setting\n const dashboardProfiler = getDashboardSceneProfilerWithMetadata(metadata.name, dashboard.title);\n\n const enableProfiling =\n config.dashboardPerformanceMetrics.findIndex((uid) => uid === '*' || uid === metadata.name) !== -1;\n const queryController = new behaviors.SceneQueryController(\n {\n enableProfiling,\n },\n dashboardProfiler\n );\n\n const interactionTracker = new behaviors.SceneInteractionTracker(\n {\n enableInteractionTracking: enableProfiling,\n onInteractionComplete: getDashboardComponentInteractionCallback(metadata.name, dashboard.title),\n },\n dashboardProfiler\n );\n\n const dashboardScene = new DashboardScene(\n {\n description: dashboard.description,\n editable: dashboard.editable,\n preload: dashboard.preload,\n id: dashboardId,\n isDirty: false,\n links: dashboard.links,\n meta,\n tags: dashboard.tags,\n title: dashboard.title,\n uid: metadata.name,\n version: metadata.generation,\n body: layoutManager,\n $timeRange: new SceneTimeRange({\n from: dashboard.timeSettings.from,\n to: dashboard.timeSettings.to,\n fiscalYearStartMonth: dashboard.timeSettings.fiscalYearStartMonth,\n timeZone: dashboard.timeSettings.timezone,\n weekStart: dashboard.timeSettings.weekStart,\n UNSAFE_nowDelay: dashboard.timeSettings.nowDelay,\n }),\n $variables: getVariables(dashboard, meta.isSnapshot ?? false),\n $behaviors: [\n new behaviors.CursorSync({\n sync: transformCursorSyncV2ToV1(dashboard.cursorSync),\n }),\n queryController,\n interactionTracker,\n registerDashboardMacro,\n registerPanelInteractionsReporter,\n new behaviors.LiveNowTimer({ enabled: dashboard.liveNow }),\n addPanelsOnLoadBehavior,\n new DashboardReloadBehavior({\n reloadOnParamsChange: config.featureToggles.reloadDashboardsOnParamsChange && false,\n uid: dashboardId?.toString(),\n }),\n ...(enableProfiling ? [dashboardAnalyticsInitializer] : []),\n ],\n $data: new DashboardDataLayerSet({\n annotationLayers,\n }),\n controls: new DashboardControls({\n timePicker: new SceneTimePicker({\n quickRanges: dashboard.timeSettings.quickRanges,\n defaultQuickRanges: config.quickRanges,\n }),\n refreshPicker: new SceneRefreshPicker({\n refresh: dashboard.timeSettings.autoRefresh,\n intervals: dashboard.timeSettings.autoRefreshIntervals,\n withText: true,\n }),\n hideTimeControls: dashboard.timeSettings.hideTimepicker,\n }),\n },\n 'v2'\n );\n\n dashboardScene.setInitialSaveModel(dto.spec, dto.metadata, apiVersion);\n\n // Enable panel profiling for this dashboard using the composed SceneRenderProfiler\n enablePanelProfilingForDashboard(dashboardScene, metadata.name);\n\n return dashboardScene;\n}\n\nfunction getVariables(dashboard: DashboardV2Spec, isSnapshot: boolean): SceneVariableSet | undefined {\n let variables: SceneVariableSet | undefined;\n\n if (isSnapshot) {\n variables = createVariablesForSnapshot(dashboard);\n } else {\n variables = createVariablesForDashboard(dashboard);\n }\n\n return variables;\n}\n\nfunction createVariablesForDashboard(dashboard: DashboardV2Spec) {\n const variableObjects = dashboard.variables\n .map((v) => {\n try {\n return createSceneVariableFromVariableModel(v);\n } catch (err) {\n console.error(err);\n return null;\n }\n })\n // TODO: Remove filter\n // Added temporarily to allow skipping non-compatible variables\n .filter((v): v is SceneVariable => Boolean(v));\n\n // Explicitly disable scopes for public dashboards\n if (config.featureToggles.scopeFilters && !config.publicDashboardAccessToken) {\n variableObjects.push(new ScopesVariable({ enable: true }));\n }\n\n return new SceneVariableSet({\n variables: variableObjects,\n });\n}\n\nfunction createSceneVariableFromVariableModel(variable: TypedVariableModelV2): SceneVariable {\n const commonProperties = {\n name: variable.spec.name,\n label: variable.spec.label,\n description: variable.spec.description,\n };\n if (variable.kind === defaultAdhocVariableKind().kind) {\n const ds = getDataSourceForQuery(\n {\n type: variable.group,\n uid: variable.datasource?.name,\n },\n variable.group\n );\n return new AdHocFiltersVariable({\n ...commonProperties,\n description: variable.spec.description,\n skipUrlSync: variable.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n datasource: ds,\n applyMode: 'auto',\n filters: variable.spec.filters ?? [],\n baseFilters: variable.spec.baseFilters ?? [],\n defaultKeys: variable.spec.defaultKeys,\n useQueriesAsFilterForOptions: true,\n layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,\n supportsMultiValueOperators: Boolean(getDataSourceSrv().getInstanceSettings(ds)?.meta.multiValueFilterOperators),\n });\n }\n if (variable.kind === defaultCustomVariableKind().kind) {\n return new CustomVariable({\n ...commonProperties,\n value: variable.spec.current?.value ?? '',\n text: variable.spec.current?.text ?? '',\n\n query: variable.spec.query,\n isMulti: variable.spec.multi,\n allValue: variable.spec.allValue || undefined,\n includeAll: variable.spec.includeAll,\n defaultToAll: Boolean(variable.spec.includeAll),\n skipUrlSync: variable.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n });\n } else if (variable.kind === defaultQueryVariableKind().kind) {\n return new QueryVariable({\n ...commonProperties,\n value: variable.spec.current?.value ?? '',\n text: variable.spec.current?.text ?? '',\n query: getDataQueryForVariable(variable),\n datasource: getRuntimeVariableDataSource(variable),\n sort: transformSortVariableToEnumV1(variable.spec.sort),\n refresh: transformVariableRefreshToEnumV1(variable.spec.refresh),\n regex: variable.spec.regex,\n allValue: variable.spec.allValue || undefined,\n includeAll: variable.spec.includeAll,\n defaultToAll: Boolean(variable.spec.includeAll),\n isMulti: variable.spec.multi,\n skipUrlSync: variable.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n definition: variable.spec.definition,\n });\n } else if (variable.kind === defaultDatasourceVariableKind().kind) {\n return new DataSourceVariable({\n ...commonProperties,\n value: variable.spec.current?.value ?? '',\n text: variable.spec.current?.text ?? '',\n regex: variable.spec.regex,\n pluginId: variable.spec.pluginId,\n allValue: variable.spec.allValue || undefined,\n includeAll: variable.spec.includeAll,\n defaultToAll: Boolean(variable.spec.includeAll),\n skipUrlSync: variable.spec.skipUrlSync,\n isMulti: variable.spec.multi,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n defaultOptionEnabled:\n variable.spec.current?.value === DEFAULT_DATASOURCE && variable.spec.current?.text === 'default',\n });\n } else if (variable.kind === defaultIntervalVariableKind().kind) {\n const intervals = getIntervalsFromQueryString(variable.spec.query);\n const currentInterval = getCurrentValueForOldIntervalModel(variable, intervals);\n return new IntervalVariable({\n ...commonProperties,\n value: currentInterval,\n intervals: intervals,\n autoEnabled: variable.spec.auto,\n autoStepCount: variable.spec.auto_count,\n autoMinInterval: variable.spec.auto_min,\n refresh: transformVariableRefreshToEnumV1(variable.spec.refresh),\n skipUrlSync: variable.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n });\n } else if (variable.kind === defaultConstantVariableKind().kind) {\n return new ConstantVariable({\n ...commonProperties,\n value: variable.spec.query,\n skipUrlSync: variable.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n });\n } else if (variable.kind === defaultTextVariableKind().kind) {\n let val;\n if (!variable?.spec.current?.value) {\n val = variable.spec.query;\n } else {\n if (typeof variable.spec.current.value === 'string') {\n val = variable.spec.current.value;\n } else {\n val = variable.spec.current.value[0];\n }\n }\n\n return new TextBoxVariable({\n ...commonProperties,\n value: val,\n skipUrlSync: variable.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n });\n } else if (config.featureToggles.groupByVariable && variable.kind === defaultGroupByVariableKind().kind) {\n const ds = getDataSourceForQuery(\n {\n type: variable.group,\n uid: variable.datasource?.name,\n },\n variable.group\n );\n\n return new GroupByVariable({\n ...commonProperties,\n datasource: ds,\n value: variable.spec.current?.value || [],\n text: variable.spec.current?.text || [],\n skipUrlSync: variable.spec.skipUrlSync,\n isMulti: variable.spec.multi,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n // @ts-expect-error\n defaultOptions: variable.options,\n });\n } else if (variable.kind === defaultSwitchVariableKind().kind) {\n return new SwitchVariable({\n ...commonProperties,\n value: variable.spec.current ?? 'false',\n enabledValue: variable.spec.enabledValue ?? 'true',\n disabledValue: variable.spec.disabledValue ?? 'false',\n skipUrlSync: variable.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n });\n } else {\n throw new Error(`Scenes: Unsupported variable type ${variable.kind}`);\n }\n}\n\nfunction getDataQueryForVariable(variable: QueryVariableKind) {\n return LEGACY_STRING_VALUE_KEY in variable.spec.query.spec\n ? (variable.spec.query.spec[LEGACY_STRING_VALUE_KEY] ?? '')\n : {\n ...variable.spec.query.spec,\n refId: variable.spec.query.spec.refId ?? 'A',\n };\n}\n\nexport function getCurrentValueForOldIntervalModel(variable: IntervalVariableKind, intervals: string[]): string {\n const selectedInterval = Array.isArray(variable.spec.current.value)\n ? variable.spec.current.value[0]\n : variable.spec.current.value;\n\n // If the interval is the old auto format, return the new auto interval from scenes.\n if (selectedInterval.startsWith('$__auto_interval_')) {\n return '$__auto';\n }\n\n // Check if the selected interval is valid.\n if (intervals.includes(selectedInterval)) {\n return selectedInterval;\n }\n\n // If the selected interval is not valid, return the first valid interval.\n return intervals[0];\n}\n\nexport function createVariablesForSnapshot(dashboard: DashboardV2Spec): SceneVariableSet {\n const variableObjects = dashboard.variables\n .map((v) => {\n try {\n // for adhoc we are using the AdHocFiltersVariable from scenes becuase of its complexity\n if (v.kind === 'AdhocVariable') {\n const ds = getDataSourceForQuery(\n {\n type: v.group,\n uid: v.datasource?.name,\n },\n v.group\n );\n\n return new AdHocFiltersVariable({\n name: v.spec.name,\n label: v.spec.label,\n readOnly: true,\n description: v.spec.description,\n skipUrlSync: v.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(v.spec.hide),\n datasource: ds,\n applyMode: 'auto',\n filters: v.spec.filters ?? [],\n baseFilters: v.spec.baseFilters ?? [],\n defaultKeys: v.spec.defaultKeys,\n useQueriesAsFilterForOptions: true,\n layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,\n supportsMultiValueOperators: Boolean(\n getDataSourceSrv().getInstanceSettings(ds)?.meta.multiValueFilterOperators\n ),\n });\n }\n // for other variable types we are using the SnapshotVariable\n return createSnapshotVariable(v);\n } catch (err) {\n console.error(err);\n return null;\n }\n })\n // TODO: Remove filter\n // Added temporarily to allow skipping non-compatible variables\n .filter((v): v is SceneVariable => Boolean(v));\n\n return new SceneVariableSet({\n variables: variableObjects,\n });\n}\n\n/** Snapshots variables are read-only and should not be updated */\nexport function createSnapshotVariable(variable: TypedVariableModelV2): SceneVariable {\n let snapshotVariable: SnapshotVariable;\n let current: { value: string | string[]; text: string | string[] };\n if (variable.kind === 'IntervalVariable') {\n const intervals = getIntervalsFromQueryString(variable.spec.query);\n const currentInterval = getCurrentValueForOldIntervalModel(variable, intervals);\n snapshotVariable = new SnapshotVariable({\n name: variable.spec.name,\n label: variable.spec.label,\n description: variable.spec.description,\n value: currentInterval,\n text: currentInterval,\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n });\n return snapshotVariable;\n }\n\n if (variable.kind === 'ConstantVariable' || variable.kind === 'AdhocVariable') {\n current = {\n value: '',\n text: '',\n };\n } else if (variable.kind === 'SwitchVariable') {\n current = {\n value: variable.spec.current ?? 'false',\n text: variable.spec.current ?? 'false',\n };\n } else {\n current = {\n value: variable.spec.current?.value ?? '',\n text: variable.spec.current?.text ?? '',\n };\n }\n\n snapshotVariable = new SnapshotVariable({\n name: variable.spec.name,\n label: variable.spec.label,\n description: variable.spec.description,\n value: current?.value ?? '',\n text: current?.text ?? '',\n hide: transformVariableHideToEnumV1(variable.spec.hide),\n });\n return snapshotVariable;\n}\n\nexport function getPanelElement(dashboard: DashboardV2Spec, elementName: string): PanelKind | undefined {\n return dashboard.elements[elementName].kind === 'Panel' ? dashboard.elements[elementName] : undefined;\n}\n\nexport function getLibraryPanelElement(dashboard: DashboardV2Spec, elementName: string): LibraryPanelKind | undefined {\n return dashboard.elements[elementName].kind === 'LibraryPanel' ? dashboard.elements[elementName] : undefined;\n}\nfunction getGrafanaBuiltInAnnotationDataLayer(dashboard: DashboardV2Spec) {\n const found = dashboard.annotations.some((item) => item.spec.builtIn);\n if (found) {\n return;\n }\n\n const grafanaBuiltAnnotation: AnnotationQueryKind = {\n kind: 'AnnotationQuery',\n spec: {\n query: {\n kind: 'DataQuery',\n version: defaultDataQueryKind().version,\n group: 'grafana',\n datasource: {\n name: '-- Grafana --',\n },\n spec: {},\n },\n name: 'Annotations & Alerts',\n iconColor: DEFAULT_ANNOTATION_COLOR,\n enable: true,\n hide: true,\n builtIn: true,\n },\n };\n\n return grafanaBuiltAnnotation;\n}\n","/**\n * Ensures a string is compatible with Prometheus' UTF-8 handling rules.\n *\n * Prometheus has specific rules for handling UTF-8 strings in metric names and label values:\n * - Legacy names (matching pattern [a-zA-Z_:][a-zA-Z0-9_:]*) are used as-is\n * - Non-legacy names containing UTF-8 characters must be wrapped in double quotes\n *\n * @param value - The string to make UTF-8 compatible\n * @returns The original string if it's empty or a valid legacy name, otherwise the string wrapped in double quotes\n *\n * @example\n * utf8Support('metric_name') // returns 'metric_name'\n * utf8Support('metric-📈') // returns '\"metric-📈\"'\n */\nexport const utf8Support = (value: string) => {\n if (value === '') {\n return value;\n }\n const isLegacyLabel = isValidLegacyName(value);\n if (isLegacyLabel) {\n return value;\n }\n return `\"${value}\"`;\n};\n\n/**\n * Escapes a string to make it compatible with Prometheus UTF-8 support.\n *\n * This function converts non-legacy name characters to an escaped format:\n * - Underscores are doubled as '__'\n * - Valid legacy runes are preserved as-is\n * - Invalid code points are replaced with '_FFFD_'\n * - Other characters are converted to '_HEX_' format where HEX is the hexadecimal code point\n *\n * @param value - The string to escape\n * @returns An escaped string prefixed with 'U__' that is compatible with Prometheus\n *\n * @example\n * escapeForUtf8Support(\"my lovely_http.status:sum\") // returns U__my_20_lovely__http_2e_status:sum\n * escapeForUtf8Support(\"label with 😱\") // returns U__label_20_with_20__1f631_\n */\nexport const escapeForUtf8Support = (value: string) => {\n const isLegacyLabel = isValidLegacyName(value);\n if (isLegacyLabel) {\n return value;\n }\n\n let escaped = 'U__';\n\n for (let i = 0; i < value.length; i++) {\n const char = value[i];\n const codePoint = value.codePointAt(i);\n\n if (char === '_') {\n escaped += '__';\n } else if (codePoint !== undefined && isValidLegacyRune(char, i)) {\n escaped += char;\n } else if (codePoint === undefined || !isValidCodePoint(codePoint)) {\n escaped += '_FFFD_';\n } else {\n escaped += '_';\n escaped += codePoint.toString(16); // Convert code point to hexadecimal\n escaped += '_';\n }\n\n // Handle surrogate pairs for characters outside the Basic Multilingual Plane\n if (codePoint !== undefined && codePoint > 0xffff) {\n i++; // Skip the second half of the surrogate pair\n }\n }\n\n return escaped;\n};\n\n/**\n * Checks if a string is a valid legacy (the standard) Prometheus metric or label name.\n *\n * Valid legacy (the standard) names match the pattern [a-zA-Z_:][a-zA-Z0-9_:]* which means:\n * - First character must be a letter, underscore, or colon\n * - Remaining characters can only be letters, numbers, underscores, or colons\n *\n * @param name - The string to check\n * @returns true if the string is a valid legacy (the standard) name, false otherwise\n */\nexport const isValidLegacyName = (name: string): boolean => {\n if (name.length === 0) {\n return false;\n }\n\n for (let i = 0; i < name.length; i++) {\n const char = name[i];\n if (!isValidLegacyRune(char, i)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Checks if a character is valid for a legacy (the standard) Prometheus metric or label name.\n *\n * This is an implementation of the Prometheus model rune validation logic, which\n * determines if a character is allowed in a legacy metric or label name.\n * https://github.com/prometheus/common/blob/v0.64.0/model/metric.go#L430-L432\n *\n * @param char - The character to check\n * @param index - The position of the character in the string\n * @returns true if the character is valid at the given position, false otherwise\n */\nconst isValidLegacyRune = (char: string, index: number): boolean => {\n const codePoint = char.codePointAt(0);\n if (codePoint === undefined) {\n return false;\n }\n\n return (\n (codePoint >= 97 && codePoint <= 122) || // 'a' to 'z'\n (codePoint >= 65 && codePoint <= 90) || // 'A' to 'Z'\n codePoint === 95 || // '_'\n codePoint === 58 || // ':'\n (codePoint >= 48 && codePoint <= 57 && index > 0) // '0' to '9', but not at the start\n );\n};\n\n/**\n * Validates if a Unicode code point is valid for UTF-8 encoding.\n *\n * @param codePoint - The Unicode code point to validate\n * @returns true if the code point is valid (between 0 and 0x10FFFF), false otherwise\n */\nconst isValidCodePoint = (codePoint: number): boolean => {\n return codePoint >= 0 && codePoint <= 0x10ffff;\n};\n\n/**\n * Wraps each key in a Prometheus filter string with UTF-8 support.\n *\n * This function processes a filter string (e.g. 'metric=\"value\",name=~\"pattern\"')\n * and applies UTF-8 support to each key while preserving the operators and values.\n * It handles quoted values and comma separators correctly.\n *\n * @param filterStr - The filter string to process\n * @returns A new filter string with UTF-8 support applied to the keys\n */\nexport const wrapUtf8Filters = (filterStr: string): string => {\n const resultArray: string[] = [];\n const operatorRegex = /(=~|!=|!~|=)/; // NOTE: the order of the operators is important here\n let currentKey = '';\n let currentValue = '';\n let inQuotes = false;\n let temp = '';\n const addResult = () => {\n const operatorMatch = temp.match(operatorRegex);\n if (operatorMatch) {\n const operator = operatorMatch[0];\n [currentKey, currentValue] = temp.split(operator);\n resultArray.push(`${utf8Support(currentKey.trim())}${operator}\"${currentValue.slice(1, -1)}\"`);\n }\n };\n\n for (const char of filterStr) {\n if (char === '\"' && temp[temp.length - 1] !== '\\\\') {\n // Toggle inQuotes when an unescaped quote is found\n inQuotes = !inQuotes;\n temp += char;\n } else if (char === ',' && !inQuotes) {\n // When outside quotes and encountering ',', finalize the current pair\n addResult();\n temp = ''; // Reset for the next pair\n } else {\n // Collect characters\n temp += char;\n }\n }\n\n // Handle the last key-value pair\n if (temp) {\n addResult();\n }\n return resultArray.join(',');\n};\n","import { useState } from 'react';\n\nimport { ActionModel, Field, ActionVariableInput } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { ConfirmModal } from '../ConfirmModal/ConfirmModal';\n\nimport { VariablesInputModal } from './VariablesInputModal';\n\ntype ActionButtonProps = Omit<ButtonProps, 'children'> & {\n action: ActionModel<Field>;\n};\n\n/**\n * @internal\n */\nexport function ActionButton({ action, ...buttonProps }: ActionButtonProps) {\n const theme = useTheme2();\n const backgroundColor = action.style.backgroundColor || theme.colors.secondary.main;\n const textColor = theme.colors.getContrastText(backgroundColor);\n\n const [showConfirm, setShowConfirm] = useState(false);\n\n // Action variables\n const [showVarsModal, setShowVarsModal] = useState(false);\n const [actionVars, setActionVars] = useState<ActionVariableInput>({});\n\n const actionHasVariables = action.variables && action.variables.length > 0;\n\n const onClick = () => {\n if (actionHasVariables) {\n setShowVarsModal(true);\n } else {\n setShowConfirm(true);\n }\n };\n\n return (\n <>\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={onClick}\n {...buttonProps}\n style={{ width: 'fit-content', backgroundColor, color: textColor }}\n >\n {action.title}\n </Button>\n\n {actionHasVariables && showVarsModal && (\n <VariablesInputModal\n onDismiss={() => setShowVarsModal(false)}\n action={action}\n onShowConfirm={() => setShowConfirm(true)}\n variables={actionVars}\n setVariables={setActionVars}\n />\n )}\n\n {showConfirm && (\n <ConfirmModal\n isOpen={true}\n title={t('grafana-ui.action-editor.button.confirm-action', 'Confirm action')}\n body={action.confirmation(actionVars)}\n confirmText={t('grafana-ui.action-editor.button.confirm', 'Confirm')}\n confirmButtonVariant=\"primary\"\n onConfirm={() => {\n setShowConfirm(false);\n action.onClick(new MouseEvent('click'), null, actionVars);\n }}\n onDismiss={() => {\n setShowConfirm(false);\n }}\n />\n )}\n </>\n );\n}\n","/* Flot plugin for stacking data sets rather than overlyaing them.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes the data is sorted on x (or y if stacking horizontally).\nFor line charts, it is assumed that if a line has an undefined gap (from a\nnull point), then the line above it should have the same gap - insert zeros\ninstead of \"null\" if you want another behaviour. This also holds for the start\nand end of the chart. Note that stacking a mix of positive and negative values\nin most instances doesn't make sense (so it looks weird).\n\nTwo or more series are stacked when their \"stack\" attribute is set to the same\nkey (which can be any number or string or just \"true\"). To specify the default\nstack, you can set the stack option like this:\n\n series: {\n stack: null/false, true, or a key (number/string)\n }\n\nYou can also specify it for a single series, like this:\n\n $.plot( $(\"#placeholder\"), [{\n data: [ ... ],\n stack: true\n }])\n\nThe stacking order is determined by the order of the data series in the array\n(later series end up on top of the previous).\n\nInternally, the plugin modifies the datapoints in each series, adding an\noffset to the y value. For line series, extra data points are inserted through\ninterpolation. If there's a second y value, it's also adjusted (e.g for bar\ncharts or filled areas).\n\n*/\n\n(function ($) {\n var options = {\n series: { stack: null } // or number/string\n };\n\n function init(plot) {\n function findMatchingSeries(s, allseries) {\n var res = null;\n for (var i = 0; i < allseries.length; ++i) {\n if (s == allseries[i])\n break;\n\n if (allseries[i].stack == s.stack)\n res = allseries[i];\n }\n\n return res;\n }\n\n function stackData(plot, s, datapoints) {\n if (s.stack == null || s.stack === false)\n return;\n\n var other = findMatchingSeries(s, plot.getData());\n if (!other)\n return;\n\n var ps = datapoints.pointsize,\n points = datapoints.points,\n otherps = other.datapoints.pointsize,\n otherpoints = other.datapoints.points,\n newpoints = [],\n px, py, intery, qx, qy, bottom,\n withlines = s.lines.show,\n horizontal = s.bars.horizontal,\n withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),\n withsteps = withlines && s.lines.steps,\n keyOffset = horizontal ? 1 : 0,\n accumulateOffset = horizontal ? 0 : 1,\n i = 0, j = 0, l, m;\n\n while (true) {\n if (i >= points.length && j >= otherpoints.length)\n break;\n\n l = newpoints.length;\n\n if (i < points.length && points[i] == null) {\n // copy gaps\n for (m = 0; m < ps; ++m)\n newpoints.push(points[i + m]);\n i += ps;\n }\n else if (i >= points.length) {\n // take the remaining points from the previous series\n for (m = 0; m < ps; ++m)\n newpoints.push(otherpoints[j + m]);\n if (withbottom)\n newpoints[l + 2] = otherpoints[j + accumulateOffset];\n j += otherps;\n }\n else if (j >= otherpoints.length) {\n // take the remaining points from the current series\n for (m = 0; m < ps; ++m)\n newpoints.push(points[i + m]);\n i += ps;\n }\n else if (j < otherpoints.length && otherpoints[j] == null) {\n // ignore point\n j += otherps;\n }\n else {\n // cases where we actually got two points\n px = points[i + keyOffset];\n py = points[i + accumulateOffset];\n qx = otherpoints[j + keyOffset];\n qy = otherpoints[j + accumulateOffset];\n bottom = 0;\n\n if (px == qx) {\n for (m = 0; m < ps; ++m)\n newpoints.push(points[i + m]);\n\n newpoints[l + accumulateOffset] += qy;\n bottom = qy;\n\n i += ps;\n j += otherps;\n }\n else if (px > qx) {\n // take the point from the previous series so that next series will correctly stack\n if (i == 0) {\n for (m = 0; m < ps; ++m)\n newpoints.push(otherpoints[j + m]);\n bottom = qy;\n }\n // we got past point below, might need to\n // insert interpolated extra point\n if (i > 0 && points[i - ps] != null) {\n intery = 0;\n newpoints.push(qx);\n newpoints.push(intery + qy);\n for (m = 2; m < ps; ++m)\n newpoints.push(points[i + m]);\n bottom = qy;\n }\n\n j += otherps;\n }\n else { // px < qx\n for (m = 0; m < ps; ++m)\n newpoints.push(points[i + m]);\n\n // we might be able to interpolate a point below,\n // this can give us a better y\n if (j > 0 && otherpoints[j - otherps] != null)\n bottom = 0;\n\n newpoints[l + accumulateOffset] += bottom;\n\n i += ps;\n }\n\n fromgap = false;\n\n if (l != newpoints.length && withbottom)\n newpoints[l + 2] = bottom;\n }\n\n // maintain the line steps invariant\n if (withsteps && l != newpoints.length && l > 0\n && newpoints[l] != null\n && newpoints[l] != newpoints[l - ps]\n && newpoints[l + 1] != newpoints[l - ps + 1]) {\n for (m = 0; m < ps; ++m)\n newpoints[l + ps + m] = newpoints[l + m];\n newpoints[l + 1] = newpoints[l - ps + 1];\n }\n }\n\n datapoints.points = newpoints;\n }\n\n plot.hooks.processDatapoints.push(stackData);\n }\n\n $.plot.plugins.push({\n init: init,\n options: options,\n name: 'stack',\n version: '1.2'\n });\n})(jQuery);\n","import { useContext } from 'react';\n\nimport { KeyValue } from '../../types/data';\n\nimport { PluginContext, PluginContextType } from './PluginContext';\n\nexport function usePluginContext<T extends KeyValue = KeyValue>(): PluginContextType<T> | null {\n const context = useContext(PluginContext);\n\n // The extensions hooks (e.g. `usePluginLinks()`) are using this hook to check\n // if they are inside a plugin or not (core Grafana), so we should be able to return an empty state as well (`null`).\n if (!context) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return context as PluginContextType<T>;\n}\n","import { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { SceneObject, sceneGraph } from '@grafana/scenes';\nimport { Combobox, ComboboxOption, Select } from '@grafana/ui';\nimport { useSelector } from 'app/types/store';\n\nimport { getLastKey, getVariablesByKey } from '../../../variables/state/selectors';\n\nexport interface Props {\n id?: string;\n repeat?: string;\n onChange: (name?: string) => void;\n}\n\nexport const RepeatRowSelect = ({ repeat, onChange, id }: Props) => {\n const variables = useSelector((state) => {\n return getVariablesByKey(getLastKey(state), state);\n });\n\n const variableOptions = useMemo(() => {\n const options: Array<SelectableValue<string | null>> = variables.map((item) => {\n return { label: item.name, value: item.name };\n });\n\n if (options.length === 0) {\n options.unshift({\n label: t(\n 'dashboard.repeat-row-select.variable-options.label.no-template-variables-found',\n 'No template variables found'\n ),\n value: null,\n });\n }\n\n options.unshift({\n label: t('dashboard.repeat-row-select.variable-options.label.disable-repeating', 'Disable repeating'),\n value: null,\n });\n\n return options;\n }, [variables]);\n\n const onSelectChange = useCallback((option: SelectableValue<string | null>) => onChange(option.value!), [onChange]);\n\n return <Select inputId={id} value={repeat} onChange={onSelectChange} options={variableOptions} />;\n};\n\ninterface Props2 {\n sceneContext: SceneObject;\n repeat: string | undefined;\n id?: string;\n onChange: (name?: string) => void;\n}\n\nexport const RepeatRowSelect2 = ({ sceneContext, repeat, id, onChange }: Props2) => {\n const sceneVars = useMemo(() => sceneGraph.getVariables(sceneContext.getRoot()), [sceneContext]);\n const variables = sceneVars.useState().variables;\n\n const variableOptions = useMemo(() => {\n const options: ComboboxOption[] = variables.map((item) => ({\n label: item.state.name,\n value: item.state.name,\n }));\n\n options.unshift({\n label: t('dashboard.repeat-row-select2.variable-options.label.disable-repeating', 'Disable repeating'),\n value: '',\n });\n\n return options;\n }, [variables]);\n\n const onSelectChange = useCallback((value: ComboboxOption | null) => value && onChange(value.value), [onChange]);\n\n const isDisabled = !repeat && variableOptions.length <= 1;\n\n return (\n <Combobox\n id={id}\n value={repeat}\n onChange={onSelectChange}\n options={variableOptions}\n disabled={isDisabled}\n placeholder={\n isDisabled\n ? t(\n 'dashboard.repeat-row-select2.variable-options.label.no-template-variables-found',\n 'No template variables found'\n )\n : t('dashboard.repeat-row-select2.placeholder', 'Choose')\n }\n />\n );\n};\n","import { useEffect, useState } from 'react';\n\nimport { config, useScopes } from '@grafana/runtime';\nimport { useGrafana } from 'app/core/context/GrafanaContext';\nimport { useMediaQueryMinWidth } from 'app/core/hooks/useMediaQueryMinWidth';\n\nimport { AppChromeState } from '../AppChromeService';\nimport { useExtensionSidebarContext } from '../ExtensionSidebar/ExtensionSidebarProvider';\n\n/**\n * Returns the current header levels given current app chrome state, scopes and screen size.\n */\nexport function useChromeHeaderLevels() {\n const { chrome } = useGrafana();\n const state = chrome.state.getValue();\n const scopes = useScopes();\n\n const isLargeScreen = useMediaQueryMinWidth('xl');\n\n const [headerLevels, setHeaderLevels] = useState(\n getHeaderLevelsGivenState(state, scopes?.state.enabled, isLargeScreen)\n );\n\n // Subscribe to chrome state changes and update header height\n useEffect(() => {\n const unsub = chrome.state.subscribe((state) => {\n const newLevels = getHeaderLevelsGivenState(state, scopes?.state.enabled, isLargeScreen);\n if (newLevels !== headerLevels) {\n setHeaderLevels(newLevels);\n }\n });\n\n return () => unsub.unsubscribe();\n }, [chrome, headerLevels, scopes, isLargeScreen]);\n\n return headerLevels;\n}\n\nfunction getHeaderLevelsGivenState(\n chromeState: AppChromeState,\n scopesEnabled: boolean | undefined = false,\n isLargeScreen: boolean\n) {\n // No levels when chromeless or kiosk mode\n if (chromeState.kioskMode || chromeState.chromeless) {\n return 0;\n }\n\n // Always use two levels scopes is enabled\n if (scopesEnabled) {\n return 2;\n }\n\n // No actions we can always use 1 level\n if (!chromeState.actions) {\n return 1;\n }\n\n // We have actions\n // If mega menu docked always use two levels\n // If scenes disabled always use two levels (mainly because of the time range picker)\n if (chromeState.megaMenuDocked || !config.featureToggles.dashboardScene) {\n return 2;\n }\n\n // If screen is large and unifiedNavbars is not disabled then we can use 1 level\n if (isLargeScreen && config.featureToggles.unifiedNavbars) {\n return 1;\n }\n\n return 2;\n}\n\n/**\n * Translates header levels to header height but also takes the\n * sidebar into account as header height can be treated as zero when the sidebar is open\n * this should be better named as useStickyTopPadding or something as that is what is's used for\n */\nexport function useChromeHeaderHeight() {\n const levels = useChromeHeaderLevels();\n\n // if the extension sidebar is open, the inner pane will be scrollable, thus we need to set the header height to 0\n const { isOpen: isExtensionSidebarOpen } = useExtensionSidebarContext();\n\n if (isExtensionSidebarOpen) {\n return 0;\n }\n\n return levels * getChromeHeaderLevelHeight();\n}\n\n/**\n * Can replace with constant once unifiedNavbars feature toggle is removed\n **/\nexport function getChromeHeaderLevelHeight() {\n // Waiting with switch to 48 until we have a story for scopes\n // return config.featureToggles.unifiedNavbars ? 48 : 40;\n return 40;\n}\n","import { useAsync } from 'react-use';\n\nimport { renderMarkdown } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { LoadingPlaceholder } from '@grafana/ui';\n\ninterface Props {\n pluginId: string;\n}\n\nexport function PluginHelp({ pluginId }: Props) {\n const { value, loading, error } = useAsync(async () => {\n return getBackendSrv().get(`/api/plugins/${pluginId}/markdown/query_help`);\n }, []);\n\n const renderedMarkdown = renderMarkdown(value);\n\n if (loading) {\n return <LoadingPlaceholder text={t('plugins.plugin-help.loading', 'Loading help...')} />;\n }\n\n if (error) {\n return (\n <h3>\n <Trans i18nKey=\"plugins.plugin-help.error\">An error occurred when loading help.</Trans>\n </h3>\n );\n }\n\n if (value === '') {\n return (\n <h3>\n <Trans i18nKey=\"plugins.plugin-help.not-found\">No query help could be found.</Trans>\n </h3>\n );\n }\n\n return <div className=\"markdown-html\" dangerouslySetInnerHTML={{ __html: renderedMarkdown }} />;\n}\n","import { css, cx } from '@emotion/css';\nimport React, { useState, ChangeEvent, FocusEvent, useCallback } from 'react';\n\nimport { rangeUtil, PanelData, DataSourceApi, GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Input, InlineSwitch, useStyles2, InlineLabel } from '@grafana/ui';\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { QueryGroupOptions } from 'app/types/query';\n\ninterface Props {\n options: QueryGroupOptions;\n dataSource: DataSourceApi;\n data: PanelData;\n onChange: (options: QueryGroupOptions) => void;\n}\n\nexport const QueryGroupOptionsEditor = React.memo(({ options, dataSource, data, onChange }: Props) => {\n const [timeRangeFrom, setTimeRangeFrom] = useState(options.timeRange?.from || '');\n const [timeRangeShift, setTimeRangeShift] = useState(options.timeRange?.shift || '');\n const [timeRangeHide, setTimeRangeHide] = useState(options.timeRange?.hide ?? false);\n const [isOpen, setIsOpen] = useState(false);\n const [relativeTimeIsValid, setRelativeTimeIsValid] = useState(true);\n const [timeShiftIsValid, setTimeShiftIsValid] = useState(true);\n\n const styles = useStyles2(getStyles);\n\n const onRelativeTimeChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setTimeRangeFrom(event.target.value);\n }, []);\n\n const onTimeShiftChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setTimeRangeShift(event.target.value);\n }, []);\n\n const onOverrideTime = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n const newValue = emptyToNull(event.target.value);\n const isValid = timeRangeValidation(newValue);\n\n if (isValid && options.timeRange?.from !== newValue) {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n from: newValue,\n },\n });\n }\n\n setRelativeTimeIsValid(isValid);\n },\n [onChange, options]\n );\n\n const onTimeShift = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n const newValue = emptyToNull(event.target.value);\n const isValid = timeRangeValidation(newValue);\n\n if (isValid && options.timeRange?.shift !== newValue) {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n shift: newValue,\n },\n });\n }\n\n setTimeShiftIsValid(isValid);\n },\n [onChange, options]\n );\n\n const onToggleTimeOverride = useCallback(() => {\n const newTimeRangeHide = !timeRangeHide;\n setTimeRangeHide(newTimeRangeHide);\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n hide: newTimeRangeHide,\n },\n });\n }, [onChange, options, timeRangeHide]);\n\n const onCacheTimeoutBlur = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n onChange({\n ...options,\n cacheTimeout: emptyToNull(event.target.value),\n });\n },\n [onChange, options]\n );\n\n const onQueryCachingTTLBlur = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n let ttl: number | null = parseInt(event.target.value, 10);\n\n if (isNaN(ttl) || ttl === 0) {\n ttl = null;\n }\n\n onChange({\n ...options,\n queryCachingTTL: ttl,\n });\n },\n [onChange, options]\n );\n\n const onMaxDataPointsBlur = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n let maxDataPoints: number | null = parseInt(event.currentTarget.value, 10);\n\n if (isNaN(maxDataPoints) || maxDataPoints === 0) {\n maxDataPoints = null;\n }\n\n if (maxDataPoints !== options.maxDataPoints) {\n onChange({\n ...options,\n maxDataPoints,\n });\n }\n },\n [onChange, options]\n );\n\n const onMinIntervalBlur = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const minInterval = emptyToNull(event.target.value);\n if (minInterval !== options.minInterval) {\n onChange({\n ...options,\n minInterval,\n });\n }\n },\n [onChange, options]\n );\n\n const onOpenOptions = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const onCloseOptions = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const renderCacheTimeoutOption = () => {\n const tooltip = `If your time series store has a query cache this option can override the default cache timeout. Specify a\n numeric value in seconds.`;\n\n if (!dataSource.meta.queryOptions?.cacheTimeout) {\n return null;\n }\n\n return (\n <>\n <InlineLabel tooltip={tooltip} htmlFor=\"cache-timeout-id\">\n <Trans i18nKey=\"query.query-group-options-editor.render-cache-timeout-option.cache-timeout\">\n Cache timeout\n </Trans>\n </InlineLabel>\n <Input\n id=\"cache-timeout-id\"\n type=\"text\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"60\"\n spellCheck={false}\n onBlur={onCacheTimeoutBlur}\n defaultValue={options.cacheTimeout ?? ''}\n />\n </>\n );\n };\n\n const renderQueryCachingTTLOption = () => {\n const tooltip = `Cache time-to-live: How long results from this queries in this panel will be cached, in milliseconds. Defaults to the TTL in the caching configuration for this datasource.`;\n\n if (!dataSource.cachingConfig?.enabled) {\n return null;\n }\n\n return (\n <>\n <InlineLabel tooltip={tooltip}>\n <Trans i18nKey=\"query.query-group-options-editor.render-query-caching-ttloption.cache-ttl\">Cache TTL</Trans>\n </InlineLabel>\n <Input\n type=\"number\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder={`${dataSource.cachingConfig.TTLMs}`}\n spellCheck={false}\n onBlur={onQueryCachingTTLBlur}\n defaultValue={options.queryCachingTTL ?? undefined}\n />\n </>\n );\n };\n\n const renderMaxDataPointsOption = () => {\n const realMd = data.request?.maxDataPoints;\n const value = options.maxDataPoints ?? '';\n const isAuto = value === '';\n\n return (\n <>\n <InlineLabel\n htmlFor=\"max-data-points-input\"\n tooltip={\n <Trans i18nKey=\"query.query-group-options-editor.render-max-data-points-option.max-data-points-tooltip\">\n The maximum data points per series. Used directly by some data sources and used in calculation of auto\n interval. With streaming data this value is used for the rolling buffer.\n </Trans>\n }\n >\n <Trans i18nKey=\"query.query-group-options-editor.render-max-data-points-option.max-data-points\">\n Max data points\n </Trans>\n </InlineLabel>\n <Input\n id=\"max-data-points-input\"\n type=\"number\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder={`${realMd}`}\n spellCheck={false}\n onBlur={onMaxDataPointsBlur}\n defaultValue={value}\n />\n {isAuto && (\n <>\n <span className={cx(styles.noSquish, styles.operator)}>=</span>\n <span className={cx(styles.noSquish, styles.left)}>\n <Trans i18nKey=\"query.query-group-options-editor.render-max-data-points-option.width-of-panel\">\n Width of panel\n </Trans>\n </span>\n </>\n )}\n </>\n );\n };\n\n const renderIntervalOption = () => {\n const realInterval = data.request?.interval;\n const minIntervalOnDs = dataSource.interval ?? 'No limit';\n\n return (\n <>\n <InlineLabel\n className={styles.firstColumn}\n tooltip={\n <Trans i18nKey=\"query.query-group-options-editor.render-interval-option.min-interval-tooltip\">\n A lower limit for the interval. Recommended to be set to write frequency, for example <code>1m</code> if\n your data is written every minute. Default value can be set in data source settings for most data sources.\n </Trans>\n }\n htmlFor=\"min-interval-input\"\n >\n <Trans i18nKey=\"query.query-group-options-editor.render-interval-option.min-interval\">Min interval</Trans>\n </InlineLabel>\n <Input\n id=\"min-interval-input\"\n type=\"text\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder={`${minIntervalOnDs}`}\n spellCheck={false}\n onBlur={onMinIntervalBlur}\n defaultValue={options.minInterval ?? ''}\n />\n <InlineLabel\n className={styles.firstColumn}\n tooltip={\n <Trans i18nKey=\"query.query-group-options-editor.render-interval-option.interval-tooltip\">\n The evaluated interval that is sent to data source and is used in <code>$__interval</code> and{' '}\n <code>$__interval_ms</code>. This value is not exactly equal to <code>Time range / max data points</code>,\n it will approximate a series of magic number.\n </Trans>\n }\n >\n <Trans i18nKey=\"query.query-group-options-editor.render-interval-option.interval\">Interval</Trans>\n </InlineLabel>\n <span className={styles.noSquish}>{realInterval}</span>\n <span className={cx(styles.noSquish, styles.operator)}>=</span>\n <span className={cx(styles.noSquish, styles.left)}>\n <Trans i18nKey=\"query.query-group-options-editor.render-interval-option.time-range-max-data-points\">\n Time range / max data points\n </Trans>\n </span>\n </>\n );\n };\n\n const renderCollapsedText = (): React.ReactNode | undefined => {\n if (isOpen) {\n return undefined;\n }\n\n let mdDesc = options.maxDataPoints ?? '';\n if (mdDesc === '' && data.request) {\n mdDesc = `auto = ${data.request.maxDataPoints}`;\n }\n\n const intervalDesc = data.request?.interval ?? options.minInterval;\n\n return (\n <>\n {\n <span className={styles.collapsedText}>\n <Trans i18nKey=\"query.query-group-options-editor.collapsed-max-data-points\">MD = {{ mdDesc }}</Trans>\n </span>\n }\n {\n <span className={styles.collapsedText}>\n <Trans i18nKey=\"query.query-group-options-editor.collapsed-interval\">Interval = {{ intervalDesc }}</Trans>\n </span>\n }\n </>\n );\n };\n\n return (\n <QueryOperationRow\n id=\"Query options\"\n index={0}\n title={t('query.query-group-options-editor.Query options-title-query-options', 'Query options')}\n headerElement={renderCollapsedText()}\n isOpen={isOpen}\n onOpen={onOpenOptions}\n onClose={onCloseOptions}\n >\n <div className={styles.grid}>\n {renderMaxDataPointsOption()}\n {renderIntervalOption()}\n {renderCacheTimeoutOption()}\n {renderQueryCachingTTLOption()}\n\n <InlineLabel\n htmlFor=\"relative-time-input\"\n tooltip={\n <Trans\n i18nKey=\"query.query-group-options-editor.relative-time-tooltip\"\n values={{ relativeFrom: 'now-5m', relativeTo: '5m', variable: '$_relativeTime' }}\n >\n Overrides the relative time range for individual panels, which causes them to be different than what is\n selected in the dashboard time picker in the top-right corner of the dashboard. For example to configure\n the Last 5 minutes the Relative time should be <code>{'{{relativeFrom}}'}</code> and{' '}\n <code>{'{{relativeTo}}'}</code>, or variables like <code>{'{{variable}}'}</code>.\n </Trans>\n }\n >\n <Trans i18nKey=\"query.query-group-options-editor.relative-time\">Relative time</Trans>\n </InlineLabel>\n <Input\n id=\"relative-time-input\"\n type=\"text\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"1h\"\n onChange={onRelativeTimeChange}\n onBlur={onOverrideTime}\n invalid={!relativeTimeIsValid}\n value={timeRangeFrom}\n />\n <InlineLabel\n htmlFor=\"time-shift-input\"\n className={styles.firstColumn}\n tooltip={\n <Trans\n i18nKey=\"query.query-group-options-editor.time-shift-tooltip\"\n values={{ relativeFrom: 'now-1h', relativeTo: '1h', variable: '$_timeShift' }}\n >\n Overrides the time range for individual panels by shifting its start and end relative to the time picker.\n For example to configure the Last 1h the Time shift should be <code>{'{{relativeFrom}}'}</code> and{' '}\n <code>{'{{relativeTo}}'}</code>, or variables like <code>{'{{variable}}'}</code>.\n </Trans>\n }\n >\n <Trans i18nKey=\"query.query-group-options-editor.time-shift\">Time shift</Trans>\n </InlineLabel>\n <Input\n id=\"time-shift-input\"\n type=\"text\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"1h\"\n onChange={onTimeShiftChange}\n onBlur={onTimeShift}\n invalid={!timeShiftIsValid}\n value={timeRangeShift}\n />\n {(timeRangeShift || timeRangeFrom) && (\n <>\n <InlineLabel htmlFor=\"hide-time-info-switch\" className={styles.firstColumn}>\n <Trans i18nKey=\"query.query-group-options-editor.hide-time-info\">Hide time info</Trans>\n </InlineLabel>\n <InlineSwitch\n id=\"hide-time-info-switch\"\n className={styles.left}\n value={timeRangeHide}\n onChange={onToggleTimeOverride}\n />\n </>\n )}\n </div>\n </QueryOperationRow>\n );\n});\n\nQueryGroupOptionsEditor.displayName = 'QueryGroupOptionsEditor';\n\nfunction timeRangeValidation(value: string | null) {\n return !value || rangeUtil.isValidTimeSpan(value);\n}\n\nfunction emptyToNull(value: string) {\n return value === '' ? null : value;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grid: css({\n display: 'grid',\n gridTemplateColumns: `auto minmax(5em, 1fr) auto 1fr`,\n gap: theme.spacing(0.5),\n gridAutoRows: theme.spacing(4),\n whiteSpace: 'nowrap',\n }),\n firstColumn: css({\n gridColumn: 1,\n }),\n collapsedText: css({\n marginLeft: theme.spacing(2),\n fontSize: theme.typography.size.sm,\n color: theme.colors.text.secondary,\n }),\n noSquish: css({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.size.sm,\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n }),\n left: css({\n justifySelf: 'left',\n }),\n operator: css({\n color: theme.v1.palette.orange,\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport { PureComponent, useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { Unsubscribable } from 'rxjs';\n\nimport {\n CoreApp,\n DataSourceApi,\n DataSourceInstanceSettings,\n getDataSourceRef,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { getDataSourceSrv, locationService } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { Button, InlineFormLabel, Modal, ScrollContainer, Stack, stylesFactory } from '@grafana/ui';\nimport { PluginHelp } from 'app/core/components/PluginHelp/PluginHelp';\nimport config from 'app/core/config';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport { addQuery, queryIsEmpty } from 'app/core/utils/query';\nimport { DataSourceModal } from 'app/features/datasources/components/picker/DataSourceModal';\nimport { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker';\nimport { dataSource as expressionDatasource } from 'app/features/expressions/ExpressionDatasource';\nimport { isSharedDashboardQuery } from 'app/plugins/datasource/dashboard/runSharedRequest';\nimport { GrafanaQuery } from 'app/plugins/datasource/grafana/types';\nimport { QueryGroupOptions } from 'app/types/query';\n\nimport { PanelQueryRunner } from '../state/PanelQueryRunner';\nimport { updateQueries } from '../state/updateQueries';\n\nimport { GroupActionComponents } from './QueryActionComponent';\nimport { QueryEditorRows } from './QueryEditorRows';\nimport { QueryGroupOptionsEditor } from './QueryGroupOptions';\n\nexport interface Props {\n queryRunner: PanelQueryRunner;\n options: QueryGroupOptions;\n onOpenQueryInspector?: () => void;\n onRunQueries: () => void;\n onOptionsChange: (options: QueryGroupOptions) => void;\n}\n\ninterface State {\n dataSource?: DataSourceApi;\n dsSettings?: DataSourceInstanceSettings;\n queries: DataQuery[];\n helpContent: React.ReactNode;\n isLoadingHelp: boolean;\n isPickerOpen: boolean;\n isDataSourceModalOpen: boolean;\n data: PanelData;\n isHelpOpen: boolean;\n defaultDataSource?: DataSourceApi;\n scrollElement?: HTMLDivElement;\n}\n\nexport class QueryGroup extends PureComponent<Props, State> {\n backendSrv = backendSrv;\n dataSourceSrv = getDataSourceSrv();\n querySubscription: Unsubscribable | null = null;\n\n state: State = {\n isDataSourceModalOpen: !!locationService.getSearchObject().firstPanel,\n isLoadingHelp: false,\n helpContent: null,\n isPickerOpen: false,\n isHelpOpen: false,\n queries: [],\n data: {\n state: LoadingState.NotStarted,\n series: [],\n timeRange: getDefaultTimeRange(),\n },\n };\n\n async componentDidMount() {\n const { options, queryRunner } = this.props;\n\n this.querySubscription = queryRunner.getData({ withTransforms: false, withFieldConfig: false }).subscribe({\n next: (data: PanelData) => this.onPanelDataUpdate(data),\n });\n\n this.setNewQueriesAndDatasource(options);\n }\n\n componentWillUnmount() {\n if (this.querySubscription) {\n this.querySubscription.unsubscribe();\n this.querySubscription = null;\n }\n }\n\n async componentDidUpdate() {\n const { options } = this.props;\n\n const currentDS = await getDataSourceSrv().get(options.dataSource);\n if (this.state.dataSource && currentDS.uid !== this.state.dataSource?.uid) {\n this.setNewQueriesAndDatasource(options);\n }\n }\n\n async setNewQueriesAndDatasource(options: QueryGroupOptions) {\n try {\n const ds = await this.dataSourceSrv.get(options.dataSource);\n const dsSettings = this.dataSourceSrv.getInstanceSettings(options.dataSource);\n\n const defaultDataSource = await this.dataSourceSrv.get();\n const datasource = ds.getRef();\n const queries = options.queries.map((q) => ({\n ...(queryIsEmpty(q) && ds?.getDefaultQuery?.(CoreApp.PanelEditor)),\n datasource,\n ...q,\n }));\n\n this.setState({\n queries,\n dataSource: ds,\n dsSettings,\n defaultDataSource,\n });\n } catch (error) {\n console.error('failed to load data source', error);\n }\n }\n\n onPanelDataUpdate(data: PanelData) {\n this.setState({ data });\n }\n\n onChangeDataSource = async (\n newSettings: DataSourceInstanceSettings,\n defaultQueries?: DataQuery[] | GrafanaQuery[]\n ) => {\n const { dsSettings } = this.state;\n const currentDS = dsSettings ? await getDataSourceSrv().get(dsSettings.uid) : undefined;\n const nextDS = await getDataSourceSrv().get(newSettings.uid);\n\n // We need to pass in newSettings.uid as well here as that can be a variable expression and we want to store that in the query model not the current ds variable value\n const queries = defaultQueries || (await updateQueries(nextDS, newSettings.uid, this.state.queries, currentDS));\n\n const dataSource = await this.dataSourceSrv.get(newSettings.name);\n\n this.onChange({\n queries,\n dataSource: {\n name: newSettings.name,\n uid: newSettings.uid,\n ...getDataSourceRef(newSettings),\n },\n });\n\n this.setState({\n queries,\n dataSource: dataSource,\n dsSettings: newSettings,\n });\n\n if (defaultQueries) {\n this.props.onRunQueries();\n }\n };\n\n onAddQueryClick = () => {\n const { queries } = this.state;\n this.onQueriesChange(addQuery(queries, this.newQuery()));\n this.onScrollBottom();\n };\n\n newQuery(): Partial<DataQuery> {\n const { dsSettings, defaultDataSource } = this.state;\n\n const ds =\n dsSettings && !dsSettings.meta.mixed\n ? getDataSourceRef(dsSettings)\n : defaultDataSource\n ? defaultDataSource.getRef()\n : { type: undefined, uid: undefined };\n\n return {\n ...this.state.dataSource?.getDefaultQuery?.(CoreApp.PanelEditor),\n datasource: ds,\n };\n }\n\n onChange(changedProps: Partial<QueryGroupOptions>) {\n this.props.onOptionsChange({\n ...this.props.options,\n ...changedProps,\n });\n }\n\n onAddExpressionClick = () => {\n this.onQueriesChange(addQuery(this.state.queries, expressionDatasource.newQuery()));\n this.onScrollBottom();\n };\n\n onScrollBottom = () => {\n setTimeout(() => {\n if (this.state.scrollElement) {\n this.state.scrollElement.scrollTo({ top: 10000 });\n }\n }, 20);\n };\n\n onUpdateAndRun = (options: QueryGroupOptions) => {\n this.props.onOptionsChange(options);\n this.props.onRunQueries();\n };\n\n renderTopSection(styles: QueriesTabStyles) {\n const { onOpenQueryInspector, options } = this.props;\n const { dataSource, data, dsSettings } = this.state;\n\n if (!dsSettings || !dataSource) {\n return null;\n }\n return (\n <QueryGroupTopSection\n data={data}\n dataSource={dataSource}\n options={options}\n dsSettings={dsSettings}\n onOptionsChange={this.onUpdateAndRun}\n onDataSourceChange={this.onChangeDataSource}\n onOpenQueryInspector={onOpenQueryInspector}\n />\n );\n }\n\n onOpenHelp = () => {\n this.setState({ isHelpOpen: true });\n };\n\n onCloseHelp = () => {\n this.setState({ isHelpOpen: false });\n };\n\n onCloseDataSourceModal = () => {\n this.setState({ isDataSourceModalOpen: false });\n };\n\n onAddQuery = (query: Partial<DataQuery>) => {\n const { dsSettings, queries } = this.state;\n this.onQueriesChange(\n addQuery(queries, query, dsSettings ? getDataSourceRef(dsSettings) : { type: undefined, uid: undefined })\n );\n this.onScrollBottom();\n };\n\n onQueriesChange = (queries: DataQuery[] | GrafanaQuery[]) => {\n this.onChange({ queries });\n this.setState({ queries });\n };\n\n renderQueries(dsSettings: DataSourceInstanceSettings) {\n const { onRunQueries } = this.props;\n const { data, queries } = this.state;\n\n return (\n <div aria-label={selectors.components.QueryTab.content}>\n <QueryEditorRows\n queries={queries}\n dsSettings={dsSettings}\n onQueriesChange={this.onQueriesChange}\n onAddQuery={this.onAddQuery}\n onRunQueries={onRunQueries}\n data={data}\n />\n </div>\n );\n }\n\n isExpressionsSupported(dsSettings: DataSourceInstanceSettings): boolean {\n return (dsSettings.meta.backend || dsSettings.meta.alerting || dsSettings.meta.mixed) === true;\n }\n\n renderExtraActions() {\n return GroupActionComponents.getAllExtraRenderAction()\n .map((action, index) =>\n action({\n onAddQuery: this.onAddQuery,\n onChangeDataSource: this.onChangeDataSource,\n key: index,\n })\n )\n .filter(Boolean);\n }\n\n renderAddQueryRow(dsSettings: DataSourceInstanceSettings, styles: QueriesTabStyles) {\n const showAddButton = !isSharedDashboardQuery(dsSettings.name);\n\n return (\n <Stack gap={2} alignItems=\"flex-start\">\n {showAddButton && (\n <Button\n icon=\"plus\"\n onClick={this.onAddQueryClick}\n variant=\"secondary\"\n data-testid={selectors.components.QueryTab.addQuery}\n >\n <Trans i18nKey=\"query.query-group.add-query\">Add query</Trans>\n </Button>\n )}\n {config.expressionsEnabled && this.isExpressionsSupported(dsSettings) && (\n <Button\n icon=\"plus\"\n onClick={this.onAddExpressionClick}\n variant=\"secondary\"\n className={styles.expressionButton}\n data-testid=\"query-tab-add-expression\"\n >\n <span>\n <Trans i18nKey=\"query.query-group.expression\">Expression</Trans>\n </span>\n </Button>\n )}\n {this.renderExtraActions()}\n </Stack>\n );\n }\n\n setScrollRef = (scrollElement: HTMLDivElement): void => {\n this.setState({ scrollElement });\n };\n\n render() {\n const { isHelpOpen, dsSettings } = this.state;\n const styles = getStyles();\n\n return (\n <ScrollContainer minHeight=\"100%\" ref={this.setScrollRef}>\n <div className={styles.innerWrapper}>\n {this.renderTopSection(styles)}\n {dsSettings && (\n <>\n <div className={styles.queriesWrapper}>{this.renderQueries(dsSettings)}</div>\n {this.renderAddQueryRow(dsSettings, styles)}\n {isHelpOpen && (\n <Modal\n title={t('query.query-group.title-data-source-help', 'Data source help')}\n isOpen={true}\n onDismiss={this.onCloseHelp}\n >\n <PluginHelp pluginId={dsSettings.meta.id} />\n </Modal>\n )}\n </>\n )}\n </div>\n </ScrollContainer>\n );\n }\n}\n\nconst getStyles = stylesFactory(() => {\n const { theme } = config;\n\n return {\n innerWrapper: css({\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing.md,\n }),\n dataSourceRow: css({\n display: 'flex',\n marginBottom: theme.spacing.md,\n }),\n dataSourceRowItem: css({\n marginRight: theme.spacing.inlineFormMargin,\n }),\n dataSourceRowItemOptions: css({\n flexGrow: 1,\n marginRight: theme.spacing.inlineFormMargin,\n }),\n queriesWrapper: css({\n paddingBottom: '16px',\n }),\n expressionWrapper: css({}),\n expressionButton: css({\n marginRight: theme.spacing.sm,\n }),\n };\n});\n\ntype QueriesTabStyles = ReturnType<typeof getStyles>;\n\ninterface QueryGroupTopSectionProps {\n data: PanelData;\n dataSource: DataSourceApi;\n dsSettings: DataSourceInstanceSettings;\n options: QueryGroupOptions;\n onOpenQueryInspector?: () => void;\n onOptionsChange?: (options: QueryGroupOptions) => void;\n onDataSourceChange?: (ds: DataSourceInstanceSettings, defaultQueries?: DataQuery[] | GrafanaQuery[]) => Promise<void>;\n}\n\nexport function QueryGroupTopSection({\n dataSource,\n options,\n data,\n dsSettings,\n onDataSourceChange,\n onOptionsChange,\n onOpenQueryInspector,\n}: QueryGroupTopSectionProps) {\n const styles = getStyles();\n const [isHelpOpen, setIsHelpOpen] = useState(false);\n\n return (\n <>\n <div data-testid={selectors.components.QueryTab.queryGroupTopSection}>\n <div className={styles.dataSourceRow}>\n <InlineFormLabel htmlFor=\"data-source-picker\" width={'auto'}>\n <Trans i18nKey=\"query.query-group-top-section.data-source\">Data source</Trans>\n </InlineFormLabel>\n <div className={styles.dataSourceRowItem}>\n <DataSourcePickerWithPrompt\n options={options}\n onChange={async (ds, defaultQueries) => {\n return await onDataSourceChange?.(ds, defaultQueries);\n }}\n isDataSourceModalOpen={Boolean(locationService.getSearchObject().firstPanel)}\n />\n </div>\n {dataSource && (\n <>\n <div className={styles.dataSourceRowItem}>\n <Button\n variant=\"secondary\"\n icon=\"question-circle\"\n tooltip={t(\n 'query.query-group-top-section.query-tab-help-button-title-open-data-source-help',\n 'Open data source help'\n )}\n onClick={() => setIsHelpOpen(true)}\n data-testid=\"query-tab-help-button\"\n />\n </div>\n <div className={styles.dataSourceRowItemOptions}>\n <QueryGroupOptionsEditor\n options={options}\n dataSource={dataSource}\n data={data}\n onChange={(opts) => {\n onOptionsChange?.(opts);\n }}\n />\n </div>\n {onOpenQueryInspector && (\n <div className={styles.dataSourceRowItem}>\n <Button\n variant=\"secondary\"\n onClick={onOpenQueryInspector}\n aria-label={selectors.components.QueryTab.queryInspectorButton}\n >\n <Trans i18nKey=\"query.query-group-top-section.query-inspector\">Query inspector</Trans>\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n {isHelpOpen && (\n <Modal\n title={t('query.query-group-top-section.title-data-source-help', 'Data source help')}\n isOpen={true}\n onDismiss={() => setIsHelpOpen(false)}\n >\n <PluginHelp pluginId={dsSettings.meta.id} />\n </Modal>\n )}\n </>\n );\n}\n\ninterface DataSourcePickerWithPromptProps {\n isDataSourceModalOpen?: boolean;\n options: QueryGroupOptions;\n onChange: (ds: DataSourceInstanceSettings, defaultQueries?: DataQuery[] | GrafanaQuery[]) => Promise<void>;\n}\n\nfunction DataSourcePickerWithPrompt({ options, onChange, ...otherProps }: DataSourcePickerWithPromptProps) {\n const [isDataSourceModalOpen, setIsDataSourceModalOpen] = useState(Boolean(otherProps.isDataSourceModalOpen));\n\n useEffect(() => {\n // Clean up the first panel flag since the modal is now open\n if (!!locationService.getSearchObject().firstPanel) {\n locationService.partial({ firstPanel: null }, true);\n }\n }, []);\n\n const commonProps = {\n metrics: true,\n mixed: true,\n dashboard: true,\n variables: true,\n current: options.dataSource,\n uploadFile: true,\n onChange: async (ds: DataSourceInstanceSettings, defaultQueries?: DataQuery[] | GrafanaQuery[]) => {\n await onChange(ds, defaultQueries);\n setIsDataSourceModalOpen(false);\n },\n };\n\n return (\n <>\n {isDataSourceModalOpen && (\n <DataSourceModal {...commonProps} onDismiss={() => setIsDataSourceModalOpen(false)}></DataSourceModal>\n )}\n\n <DataSourcePicker {...commonProps} />\n </>\n );\n}\n","import { map } from 'rxjs/operators';\n\nimport { guessFieldTypeForField } from '../../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { KeyValue } from '../../types/data';\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, FieldMatcher, MatcherConfig } from '../../types/transformations';\nimport { fieldReducers, reduceField, ReducerID } from '../fieldReducer';\nimport { getFieldMatcher } from '../matchers';\nimport { alwaysFieldMatcher, notTimeFieldMatcher } from '../matchers/predicates';\n\nimport { DataTransformerID } from './ids';\n\nexport enum ReduceTransformerMode {\n SeriesToRows = 'seriesToRows', // default\n ReduceFields = 'reduceFields', // same structure, add additional row for each type\n}\n\nexport interface ReduceTransformerOptions {\n reducers: ReducerID[];\n fields?: MatcherConfig; // Assume all fields\n mode?: ReduceTransformerMode;\n includeTimeField?: boolean;\n labelsToFields?: boolean;\n}\n\nexport const reduceTransformer: DataTransformerInfo<ReduceTransformerOptions> = {\n id: DataTransformerID.reduce,\n name: 'Reduce',\n description: 'Reduce all rows or data points to a single value using a function like max, min, mean or last.',\n defaultOptions: {\n reducers: [ReducerID.max],\n },\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n if (!options?.reducers?.length) {\n return data; // nothing selected\n }\n\n const matcher = options.fields\n ? getFieldMatcher(options.fields)\n : options.includeTimeField && options.mode === ReduceTransformerMode.ReduceFields\n ? alwaysFieldMatcher\n : notTimeFieldMatcher;\n\n // Collapse all matching fields into a single row\n if (options.mode === ReduceTransformerMode.ReduceFields) {\n return reduceFields(data, matcher, options.reducers);\n }\n\n // Add a row for each series\n const res = reduceSeriesToRows(data, matcher, options.reducers, options.labelsToFields);\n return res\n ? [{ ...res, refId: `${DataTransformerID.reduce}-${data.map((frame) => frame.refId).join('-')}` }]\n : [];\n })\n ),\n};\n\n/**\n * @internal only exported for testing\n */\nfunction reduceSeriesToRows(\n data: DataFrame[],\n matcher: FieldMatcher,\n reducerId: ReducerID[],\n labelsToFields?: boolean\n): DataFrame | undefined {\n const calculators = fieldReducers.list(reducerId);\n const reducers = calculators.map((c) => c.id);\n const processed: DataFrame[] = [];\n const distinctLabels = labelsToFields ? getDistinctLabelKeys(data) : [];\n\n for (const series of data) {\n const source = series.fields.filter((f) => matcher(f, series, data));\n\n const size = source.length;\n const fields: Field[] = [];\n const names: string[] = new Array(size);\n fields.push({\n name: 'Field',\n type: FieldType.string,\n values: names,\n config: {},\n });\n\n const labels: KeyValue<unknown[]> = {};\n if (labelsToFields) {\n for (const key of distinctLabels) {\n labels[key] = new Array(size);\n fields.push({\n name: key,\n type: FieldType.string,\n values: labels[key],\n config: {},\n });\n }\n }\n\n const calcs: KeyValue<unknown[]> = {};\n for (const info of calculators) {\n calcs[info.id] = new Array(size);\n fields.push({\n name: info.name,\n type: FieldType.other, // UNKNOWN until after we call the functions\n values: calcs[info.id],\n config: {},\n });\n }\n\n for (let i = 0; i < source.length; i++) {\n const field = source[i];\n const results = reduceField({\n field,\n reducers,\n });\n\n if (labelsToFields) {\n names[i] = field.name;\n if (field.labels) {\n for (const key in field.labels) {\n labels[key][i] = field.labels[key];\n }\n }\n } else {\n names[i] = getFieldDisplayName(field, series, data);\n }\n\n for (const info of calculators) {\n const v = results[info.id];\n if (v === null) {\n // NaN ensures proper row index, null results in shift\n calcs[info.id][i] = NaN;\n } else {\n calcs[info.id][i] = v;\n }\n }\n }\n\n // For reduced fields, we don't know the type until we see the value\n for (const f of fields) {\n if (f.type === FieldType.other) {\n const t = guessFieldTypeForField(f);\n if (t) {\n f.type = t;\n }\n }\n }\n\n processed.push({\n ...series, // Same properties, different fields\n fields,\n length: size,\n });\n }\n\n return mergeResults(processed);\n}\n\nfunction getDistinctLabelKeys(frames: DataFrame[]): string[] {\n const keys = new Set<string>();\n for (const frame of frames) {\n for (const field of frame.fields) {\n if (field.labels) {\n for (const k of Object.keys(field.labels)) {\n keys.add(k);\n }\n }\n }\n }\n return [...keys];\n}\n\n/**\n * @internal only exported for testing\n */\nfunction mergeResults(data: DataFrame[]): DataFrame | undefined {\n if (!data?.length) {\n return undefined;\n }\n\n const baseFrame = data[0];\n\n for (let seriesIndex = 1; seriesIndex < data.length; seriesIndex++) {\n const series = data[seriesIndex];\n\n for (let baseIndex = 0; baseIndex < baseFrame.fields.length; baseIndex++) {\n const baseField = baseFrame.fields[baseIndex];\n for (let fieldIndex = 0; fieldIndex < series.fields.length; fieldIndex++) {\n const field = series.fields[fieldIndex];\n const isFirstField = baseIndex === 0 && fieldIndex === 0;\n const isSameField = baseField.type === field.type && baseField.name === field.name;\n\n if (isFirstField || isSameField) {\n const baseValues = baseField.values;\n const values = field.values;\n baseField.values = baseValues.concat(values);\n }\n }\n }\n }\n\n baseFrame.name = undefined;\n baseFrame.length = baseFrame.fields[0].values.length;\n return baseFrame;\n}\n\n/**\n * @internal -- only exported for testing\n */\nexport function reduceFields(data: DataFrame[], matcher: FieldMatcher, reducerId: ReducerID[]): DataFrame[] {\n const calculators = fieldReducers.list(reducerId);\n const reducers = calculators.map((c) => c.id);\n const processed: DataFrame[] = [];\n for (const series of data) {\n const fields: Field[] = [];\n for (const field of series.fields) {\n if (matcher(field, series, data)) {\n const results = reduceField({\n field,\n reducers,\n });\n for (const reducer of reducers) {\n const value = results[reducer];\n const copy = {\n ...field,\n labels: { ...field.labels },\n type: getFieldType(reducer, field),\n values: [value],\n state: undefined,\n };\n if (reducers.length > 1) {\n if (!copy.labels) {\n copy.labels = {};\n }\n copy.labels['reducer'] = fieldReducers.get(reducer).name;\n }\n fields.push(copy);\n }\n }\n }\n if (fields.length) {\n processed.push({\n ...series,\n fields,\n length: 1, // always one row\n });\n }\n }\n\n return processed;\n}\n\nfunction getFieldType(reducer: string, field: Field) {\n switch (reducer) {\n case ReducerID.allValues:\n case ReducerID.uniqueValues:\n return FieldType.other;\n case ReducerID.first:\n case ReducerID.firstNotNull:\n case ReducerID.last:\n case ReducerID.lastNotNull:\n return field.type;\n default:\n return FieldType.number;\n }\n}\n","/* Pretty handling of time axes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nSet axis.mode to \"time\" to enable. See the section \"Time series data\" in\nAPI.txt for details.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\txaxis: {\n\t\t\ttimezone: null,\t\t// \"browser\" for local to the client or timezone for timezone-js\n\t\t\ttimeformat: null,\t// format string to use\n\t\t\ttwelveHourClock: false,\t// 12 or 24 time in time mode\n\t\t\tmonthNames: null\t// list of names of months\n\t\t}\n\t};\n\n\t// round to nearby lower multiple of base\n\n\tfunction floorInBase(n, base) {\n\t\treturn base * Math.floor(n / base);\n\t}\n\n\t// Returns a string with the date d formatted according to fmt.\n\t// A subset of the Open Group's strftime format is supported.\n\n\tfunction formatDate(d, fmt, monthNames, dayNames) {\n\n\t\tif (typeof d.strftime == \"function\") {\n\t\t\treturn d.strftime(fmt);\n\t\t}\n\n\t\tvar leftPad = function(n, pad) {\n\t\t\tn = \"\" + n;\n\t\t\tpad = \"\" + (pad == null ? \"0\" : pad);\n\t\t\treturn n.length == 1 ? pad + n : n;\n\t\t};\n\n\t\tvar r = [];\n\t\tvar escape = false;\n\t\tvar hours = d.getHours();\n\t\tvar isAM = hours < 12;\n\n\t\tif (monthNames == null) {\n\t\t\tmonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t\t}\n\n\t\tif (dayNames == null) {\n\t\t\tdayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\t\t}\n\n\t\tvar hours12;\n\n\t\tif (hours > 12) {\n\t\t\thours12 = hours - 12;\n\t\t} else if (hours == 0) {\n\t\t\thours12 = 12;\n\t\t} else {\n\t\t\thours12 = hours;\n\t\t}\n\n\t\tfor (var i = 0; i < fmt.length; ++i) {\n\n\t\t\tvar c = fmt.charAt(i);\n\n\t\t\tif (escape) {\n\t\t\t\tswitch (c) {\n\t\t\t\t\tcase 'a': c = \"\" + dayNames[d.getDay()]; break;\n\t\t\t\t\tcase 'b': c = \"\" + monthNames[d.getMonth()]; break;\n\t\t\t\t\tcase 'd': c = leftPad(d.getDate(), \"\"); break;\n\t\t\t\t\tcase 'e': c = leftPad(d.getDate(), \" \"); break;\n\t\t\t\t\tcase 'h':\t// For back-compat with 0.7; remove in 1.0\n\t\t\t\t\tcase 'H': c = leftPad(hours); break;\n\t\t\t\t\tcase 'I': c = leftPad(hours12); break;\n\t\t\t\t\tcase 'l': c = leftPad(hours12, \" \"); break;\n\t\t\t\t\tcase 'm': c = leftPad(d.getMonth() + 1, \"\"); break;\n\t\t\t\t\tcase 'M': c = leftPad(d.getMinutes()); break;\n\t\t\t\t\t// quarters not in Open Group's strftime specification\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tc = \"\" + (Math.floor(d.getMonth() / 3) + 1); break;\n\t\t\t\t\tcase 'S': c = leftPad(d.getSeconds()); break;\n\t\t\t\t\tcase 'y': c = leftPad(d.getFullYear() % 100); break;\n\t\t\t\t\tcase 'Y': c = \"\" + d.getFullYear(); break;\n\t\t\t\t\tcase 'p': c = (isAM) ? (\"\" + \"am\") : (\"\" + \"pm\"); break;\n\t\t\t\t\tcase 'P': c = (isAM) ? (\"\" + \"AM\") : (\"\" + \"PM\"); break;\n\t\t\t\t\tcase 'w': c = \"\" + d.getDay(); break;\n\t\t\t\t}\n\t\t\t\tr.push(c);\n\t\t\t\tescape = false;\n\t\t\t} else {\n\t\t\t\tif (c == \"%\") {\n\t\t\t\t\tescape = true;\n\t\t\t\t} else {\n\t\t\t\t\tr.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn r.join(\"\");\n\t}\n\n\t// To have a consistent view of time-based data independent of which time\n\t// zone the client happens to be in we need a date-like object independent\n\t// of time zones. This is done through a wrapper that only calls the UTC\n\t// versions of the accessor methods.\n\n\tfunction makeUtcWrapper(d) {\n\n\t\tfunction addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {\n\t\t\tsourceObj[sourceMethod] = function() {\n\t\t\t\treturn targetObj[targetMethod].apply(targetObj, arguments);\n\t\t\t};\n\t\t};\n\n\t\tvar utc = {\n\t\t\tdate: d\n\t\t};\n\n\t\t// support strftime, if found\n\n\t\tif (d.strftime != undefined) {\n\t\t\taddProxyMethod(utc, \"strftime\", d, \"strftime\");\n\t\t}\n\n\t\taddProxyMethod(utc, \"getTime\", d, \"getTime\");\n\t\taddProxyMethod(utc, \"setTime\", d, \"setTime\");\n\n\t\tvar props = [\"Date\", \"Day\", \"FullYear\", \"Hours\", \"Milliseconds\", \"Minutes\", \"Month\", \"Seconds\"];\n\n\t\tfor (var p = 0; p < props.length; p++) {\n\t\t\taddProxyMethod(utc, \"get\" + props[p], d, \"getUTC\" + props[p]);\n\t\t\taddProxyMethod(utc, \"set\" + props[p], d, \"setUTC\" + props[p]);\n\t\t}\n\n\t\treturn utc;\n\t};\n\n\t// select time zone strategy. This returns a date-like object tied to the\n\t// desired timezone\n\n\tfunction dateGenerator(ts, opts) {\n\t\tif (opts.timezone == \"browser\") {\n\t\t\treturn new Date(ts);\n\t\t} else if (!opts.timezone || opts.timezone == \"utc\") {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t} else if (typeof timezoneJS != \"undefined\" && typeof timezoneJS.Date != \"undefined\") {\n\t\t\tvar d = new timezoneJS.Date();\n\t\t\t// timezone-js is fickle, so be sure to set the time zone before\n\t\t\t// setting the time.\n\t\t\td.setTimezone(opts.timezone);\n\t\t\td.setTime(ts);\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t}\n\t}\n\n\t// map of app. size of time units in milliseconds\n\n\tvar timeUnitSize = {\n\t\t\"second\": 1000,\n\t\t\"minute\": 60 * 1000,\n\t\t\"hour\": 60 * 60 * 1000,\n\t\t\"day\": 24 * 60 * 60 * 1000,\n\t\t\"month\": 30 * 24 * 60 * 60 * 1000,\n\t\t\"quarter\": 3 * 30 * 24 * 60 * 60 * 1000,\n\t\t\"year\": 365.2425 * 24 * 60 * 60 * 1000\n\t};\n\n\t// the allowed tick sizes, after 1 year we use\n\t// an integer algorithm\n\n\tvar baseSpec = [\n\t\t[1, \"second\"], [2, \"second\"], [5, \"second\"], [10, \"second\"],\n\t\t[30, \"second\"],\n\t\t[1, \"minute\"], [2, \"minute\"], [5, \"minute\"], [10, \"minute\"],\n\t\t[30, \"minute\"],\n\t\t[1, \"hour\"], [2, \"hour\"], [4, \"hour\"],\n\t\t[8, \"hour\"], [12, \"hour\"],\n\t\t[1, \"day\"], [2, \"day\"], [3, \"day\"],\n\t\t[0.25, \"month\"], [0.5, \"month\"], [1, \"month\"],\n\t\t[2, \"month\"]\n\t];\n\n\t// we don't know which variant(s) we'll need yet, but generating both is\n\t// cheap\n\n\tvar specMonths = baseSpec.concat([[3, \"month\"], [6, \"month\"],\n\t\t[1, \"year\"]]);\n\tvar specQuarters = baseSpec.concat([[1, \"quarter\"], [2, \"quarter\"],\n\t\t[1, \"year\"]]);\n\n\tfunction init(plot) {\n\t\tplot.hooks.processOptions.push(function (plot, options) {\n\t\t\t$.each(plot.getAxes(), function(axisName, axis) {\n\n\t\t\t\tvar opts = axis.options;\n\n\t\t\t\tif (opts.mode == \"time\") {\n\t\t\t\t\taxis.tickGenerator = function(axis) {\n\n\t\t\t\t\t\tvar ticks = [];\n\t\t\t\t\t\tvar d = dateGenerator(axis.min, opts);\n\t\t\t\t\t\tvar minSize = 0;\n\n\t\t\t\t\t\t// make quarter use a possibility if quarters are\n\t\t\t\t\t\t// mentioned in either of these options\n\n\t\t\t\t\t\tvar spec = (opts.tickSize && opts.tickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ||\n\t\t\t\t\t\t\t(opts.minTickSize && opts.minTickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ? specQuarters : specMonths;\n\n\t\t\t\t\t\tif (opts.minTickSize != null) {\n\t\t\t\t\t\t\tif (typeof opts.tickSize == \"number\") {\n\t\t\t\t\t\t\t\tminSize = opts.tickSize;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tminSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0; i < spec.length - 1; ++i) {\n\t\t\t\t\t\t\tif (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]\n\t\t\t\t\t\t\t\t\t\t\t + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2\n\t\t\t\t\t\t\t\t&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar size = spec[i][0];\n\t\t\t\t\t\tvar unit = spec[i][1];\n\n\t\t\t\t\t\t// special-case the possibility of several years\n\n\t\t\t\t\t\tif (unit == \"year\") {\n\n\t\t\t\t\t\t\t// if given a minTickSize in years, just use it,\n\t\t\t\t\t\t\t// ensuring that it's an integer\n\n\t\t\t\t\t\t\tif (opts.minTickSize != null && opts.minTickSize[1] == \"year\") {\n\t\t\t\t\t\t\t\tsize = Math.floor(opts.minTickSize[0]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));\n\t\t\t\t\t\t\t\tvar norm = (axis.delta / timeUnitSize.year) / magn;\n\n\t\t\t\t\t\t\t\tif (norm < 1.5) {\n\t\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t\t} else if (norm < 3) {\n\t\t\t\t\t\t\t\t\tsize = 2;\n\t\t\t\t\t\t\t\t} else if (norm < 7.5) {\n\t\t\t\t\t\t\t\t\tsize = 5;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsize = 10;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsize *= magn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// minimum size for years is 1\n\n\t\t\t\t\t\t\tif (size < 1) {\n\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taxis.tickSize = opts.tickSize || [size, unit];\n\t\t\t\t\t\tvar tickSize = axis.tickSize[0];\n\t\t\t\t\t\tunit = axis.tickSize[1];\n\n\t\t\t\t\t\tvar step = tickSize * timeUnitSize[unit];\n\n\t\t\t\t\t\tif (unit == \"second\") {\n\t\t\t\t\t\t\td.setSeconds(floorInBase(d.getSeconds(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"minute\") {\n\t\t\t\t\t\t\td.setMinutes(floorInBase(d.getMinutes(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"hour\") {\n\t\t\t\t\t\t\td.setHours(floorInBase(d.getHours(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"month\") {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"quarter\") {\n\t\t\t\t\t\t\td.setMonth(3 * floorInBase(d.getMonth() / 3,\n\t\t\t\t\t\t\t\ttickSize));\n\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\td.setFullYear(floorInBase(d.getFullYear(), tickSize));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset smaller components\n\n\t\t\t\t\t\td.setMilliseconds(0);\n\n\t\t\t\t\t\tif (step >= timeUnitSize.minute) {\n\t\t\t\t\t\t\td.setSeconds(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.hour) {\n\t\t\t\t\t\t\td.setMinutes(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day) {\n\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day * 4) {\n\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.month * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 3));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.quarter * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.year) {\n\t\t\t\t\t\t\td.setMonth(0);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar carry = 0;\n\t\t\t\t\t\tvar v = Number.NaN;\n\t\t\t\t\t\tvar prev;\n\n\t\t\t\t\t\tdo {\n\n\t\t\t\t\t\t\tprev = v;\n\t\t\t\t\t\t\tv = d.getTime();\n\t\t\t\t\t\t\tticks.push(v);\n\n\t\t\t\t\t\t\tif (unit == \"month\" || unit == \"quarter\") {\n\t\t\t\t\t\t\t\tif (tickSize < 1) {\n\n\t\t\t\t\t\t\t\t\t// a bit complicated - we'll divide the\n\t\t\t\t\t\t\t\t\t// month/quarter up but we need to take\n\t\t\t\t\t\t\t\t\t// care of fractions so we don't end up in\n\t\t\t\t\t\t\t\t\t// the middle of a day\n\n\t\t\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t\t\t\tvar start = d.getTime();\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\t(unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t\tvar end = d.getTime();\n\t\t\t\t\t\t\t\t\td.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);\n\t\t\t\t\t\t\t\t\tcarry = d.getHours();\n\t\t\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\ttickSize * (unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + tickSize);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\td.setTime(v + step);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (v < axis.max && v != prev);\n\n\t\t\t\t\t\treturn ticks;\n\t\t\t\t\t};\n\n\t\t\t\t\taxis.tickFormatter = function (v, axis) {\n\n\t\t\t\t\t\tvar d = dateGenerator(v, axis.options);\n\n\t\t\t\t\t\t// first check global format\n\n\t\t\t\t\t\tif (opts.timeformat != null) {\n\t\t\t\t\t\t\treturn formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// possibly use quarters if quarters are mentioned in\n\t\t\t\t\t\t// any of these places\n\n\t\t\t\t\t\tvar useQuarters = (axis.options.tickSize &&\n\t\t\t\t\t\t\t\taxis.options.tickSize[1] == \"quarter\") ||\n\t\t\t\t\t\t\t(axis.options.minTickSize &&\n\t\t\t\t\t\t\t\taxis.options.minTickSize[1] == \"quarter\");\n\n\t\t\t\t\t\tvar t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];\n\t\t\t\t\t\tvar span = axis.max - axis.min;\n\t\t\t\t\t\tvar suffix = (opts.twelveHourClock) ? \" %p\" : \"\";\n\t\t\t\t\t\tvar hourCode = (opts.twelveHourClock) ? \"%I\" : \"%H\";\n\t\t\t\t\t\tvar fmt;\n\n\t\t\t\t\t\tif (t < timeUnitSize.minute) {\n\t\t\t\t\t\t\tfmt = hourCode + \":%M:%S\" + suffix;\n\t\t\t\t\t\t} else if (t < timeUnitSize.day) {\n\t\t\t\t\t\t\tif (span < 2 * timeUnitSize.day) {\n\t\t\t\t\t\t\t\tfmt = hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %d \" + hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (t < timeUnitSize.month) {\n\t\t\t\t\t\t\tfmt = \"%b %d\";\n\t\t\t\t\t\t} else if ((useQuarters && t < timeUnitSize.quarter) ||\n\t\t\t\t\t\t\t(!useQuarters && t < timeUnitSize.year)) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"%b\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (useQuarters && t < timeUnitSize.year) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"Q%q\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"Q%q %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfmt = \"%Y\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);\n\n\t\t\t\t\t\treturn rt;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: 'time',\n\t\tversion: '1.0'\n\t});\n\n\t// Time-axis support used to be in Flot core, which exposed the\n\t// formatDate function on the plot object. Various plugins depend\n\t// on the function, so we need to re-expose it here.\n\n\t$.plot.formatDate = formatDate;\n\n})(jQuery);\n","import { performanceUtils, writePerformanceLog } from '@grafana/scenes';\n\nimport { PERFORMANCE_MARKS, PERFORMANCE_MEASURES, SLOW_OPERATION_THRESHOLD_MS } from './performanceConstants';\nimport { registerPerformanceObserver, createPerformanceMark, createPerformanceMeasure } from './performanceUtils';\n\n/**\n * Grafana logger that subscribes to Scene performance events\n * and logs them to console with Chrome DevTools performance marks and measurements for debugging.\n */\nexport class ScenePerformanceLogger implements performanceUtils.ScenePerformanceObserver {\n private panelGroupsOpen = new Set<string>(); // Track which panels we've seen\n\n public initialize() {\n writePerformanceLog('SPL', 'Performance logger ready');\n }\n\n public destroy() {\n this.panelGroupsOpen.clear();\n writePerformanceLog('SPL', 'Performance logger state cleared');\n }\n\n // Dashboard-level events\n onDashboardInteractionStart = (data: performanceUtils.DashboardInteractionStartData): void => {\n const dashboardStartMark = PERFORMANCE_MARKS.DASHBOARD_INTERACTION_START(data.operationId);\n createPerformanceMark(dashboardStartMark, data.timestamp);\n\n const title = data.metadata?.dashboardTitle || 'Unknown Dashboard';\n\n writePerformanceLog('SPL', `[DASHBOARD] ${data.interactionType} started: ${title}`);\n };\n\n onDashboardInteractionMilestone = (data: performanceUtils.DashboardInteractionMilestoneData): void => {\n const milestone = data.milestone || 'unknown';\n const dashboardMilestoneMark = PERFORMANCE_MARKS.DASHBOARD_MILESTONE(data.operationId, milestone);\n createPerformanceMark(dashboardMilestoneMark, data.timestamp);\n };\n\n onDashboardInteractionComplete = (data: performanceUtils.DashboardInteractionCompleteData): void => {\n const dashboardEndMark = PERFORMANCE_MARKS.DASHBOARD_INTERACTION_END(data.operationId);\n const dashboardStartMark = PERFORMANCE_MARKS.DASHBOARD_INTERACTION_START(data.operationId);\n const dashboardMeasureName = PERFORMANCE_MEASURES.DASHBOARD_INTERACTION(data.operationId);\n\n createPerformanceMark(dashboardEndMark, data.timestamp);\n createPerformanceMeasure(dashboardMeasureName, dashboardStartMark, dashboardEndMark);\n\n this.panelGroupsOpen.clear();\n };\n\n onPanelOperationStart = (data: performanceUtils.PanelPerformanceData): void => {\n this.createStandardizedPanelMark(data, 'start');\n\n // Track panel for summary logging later\n this.panelGroupsOpen.add(data.panelKey);\n };\n\n onPanelOperationComplete = (data: performanceUtils.PanelPerformanceData): void => {\n this.createStandardizedPanelMark(data, 'end');\n this.createStandardizedPanelMeasure(data);\n\n const duration = (data.duration || 0).toFixed(1);\n const slowWarning = (data.duration || 0) > SLOW_OPERATION_THRESHOLD_MS ? ' ⚠️ SLOW' : '';\n\n // For query operations, include the queryId for correlation\n let operationDisplay: string = data.operation;\n if (data.operation === 'query') {\n operationDisplay = `${data.operation} [${data.metadata.queryId}]`;\n }\n\n writePerformanceLog(\n 'SPL',\n `[PANEL] ${data.pluginId}-${data.panelId} ${operationDisplay}: ${duration}ms${slowWarning}`\n );\n };\n\n // Query-level events\n onQueryStart = (data: performanceUtils.QueryPerformanceData): void => {\n const queryStartMark = PERFORMANCE_MARKS.QUERY_START(data.origin, data.queryId);\n createPerformanceMark(queryStartMark, data.timestamp);\n };\n\n onQueryComplete = (data: performanceUtils.QueryPerformanceData): void => {\n const queryEndMark = PERFORMANCE_MARKS.QUERY_END(data.origin, data.queryId);\n const queryStartMark = PERFORMANCE_MARKS.QUERY_START(data.origin, data.queryId);\n const queryMeasureName = PERFORMANCE_MEASURES.QUERY(data.origin, data.queryId);\n\n createPerformanceMark(queryEndMark, data.timestamp);\n createPerformanceMeasure(queryMeasureName, queryStartMark, queryEndMark);\n\n const duration = (data.duration || 0).toFixed(1);\n const slowWarning = (data.duration || 0) > SLOW_OPERATION_THRESHOLD_MS ? ' ⚠️ SLOW' : '';\n\n const queryType = data.queryType.replace(/^(getDataSource\\/|AnnotationsDataLayer\\/)/, ''); // Remove prefixes\n writePerformanceLog('SPL', `[QUERY ${data.origin}] ${queryType} [${data.queryId}]: ${duration}ms${slowWarning}`);\n };\n\n private createStandardizedPanelMark(data: performanceUtils.PanelPerformanceData, phase: 'start' | 'end'): void {\n const { operation, panelKey, operationId } = data;\n\n switch (operation) {\n case 'query':\n const markName =\n phase === 'start'\n ? PERFORMANCE_MARKS.PANEL_QUERY_START(panelKey, operationId)\n : PERFORMANCE_MARKS.PANEL_QUERY_END(panelKey, operationId);\n createPerformanceMark(markName, data.timestamp);\n break;\n\n case 'plugin-load':\n const pluginMarkName =\n phase === 'start'\n ? PERFORMANCE_MARKS.PANEL_PLUGIN_LOAD_START(panelKey, operationId)\n : PERFORMANCE_MARKS.PANEL_PLUGIN_LOAD_END(panelKey, operationId);\n createPerformanceMark(pluginMarkName, data.timestamp);\n break;\n\n case 'fieldConfig':\n const fieldConfigMarkName =\n phase === 'start'\n ? PERFORMANCE_MARKS.PANEL_FIELD_CONFIG_START(panelKey, operationId)\n : PERFORMANCE_MARKS.PANEL_FIELD_CONFIG_END(panelKey, operationId);\n createPerformanceMark(fieldConfigMarkName, data.timestamp);\n break;\n\n case 'render':\n const renderMarkName =\n phase === 'start'\n ? PERFORMANCE_MARKS.PANEL_RENDER_START(panelKey, operationId)\n : PERFORMANCE_MARKS.PANEL_RENDER_END(panelKey, operationId);\n createPerformanceMark(renderMarkName, data.timestamp);\n break;\n\n case 'transform':\n const transformationId = data.metadata.transformationId;\n if (phase === 'start') {\n createPerformanceMark(\n PERFORMANCE_MARKS.PANEL_TRANSFORM_START(panelKey, transformationId, operationId),\n data.timestamp\n );\n } else {\n const isError = data.metadata.error || data.metadata.success === false;\n const transformEndMarkName = isError\n ? PERFORMANCE_MARKS.PANEL_TRANSFORM_ERROR(panelKey, transformationId, operationId)\n : PERFORMANCE_MARKS.PANEL_TRANSFORM_END(panelKey, transformationId, operationId);\n createPerformanceMark(transformEndMarkName, data.timestamp);\n }\n break;\n\n default:\n break;\n }\n }\n\n private createStandardizedPanelMeasure(data: performanceUtils.PanelPerformanceData): void {\n const { operation, panelKey, operationId } = data;\n\n switch (operation) {\n case 'query':\n const startMark = PERFORMANCE_MARKS.PANEL_QUERY_START(panelKey, operationId);\n const endMark = PERFORMANCE_MARKS.PANEL_QUERY_END(panelKey, operationId);\n const measureName = PERFORMANCE_MEASURES.PANEL_QUERY(panelKey, operationId);\n createPerformanceMeasure(measureName, startMark, endMark);\n break;\n\n case 'plugin-load':\n const pluginStartMark = PERFORMANCE_MARKS.PANEL_PLUGIN_LOAD_START(panelKey, operationId);\n const pluginEndMark = PERFORMANCE_MARKS.PANEL_PLUGIN_LOAD_END(panelKey, operationId);\n const pluginMeasureName = PERFORMANCE_MEASURES.PANEL_PLUGIN_LOAD(panelKey, operationId);\n createPerformanceMeasure(pluginMeasureName, pluginStartMark, pluginEndMark);\n break;\n\n case 'fieldConfig':\n const fieldConfigStartMark = PERFORMANCE_MARKS.PANEL_FIELD_CONFIG_START(panelKey, operationId);\n const fieldConfigEndMark = PERFORMANCE_MARKS.PANEL_FIELD_CONFIG_END(panelKey, operationId);\n const fieldConfigMeasureName = PERFORMANCE_MEASURES.PANEL_FIELD_CONFIG(panelKey, operationId);\n createPerformanceMeasure(fieldConfigMeasureName, fieldConfigStartMark, fieldConfigEndMark);\n break;\n\n case 'render':\n const renderStartMark = PERFORMANCE_MARKS.PANEL_RENDER_START(panelKey, operationId);\n const renderEndMark = PERFORMANCE_MARKS.PANEL_RENDER_END(panelKey, operationId);\n const renderMeasureName = PERFORMANCE_MEASURES.PANEL_RENDER(panelKey, operationId);\n createPerformanceMeasure(renderMeasureName, renderStartMark, renderEndMark);\n break;\n\n case 'transform':\n const transformationId = data.metadata.transformationId;\n const transformStartMark = PERFORMANCE_MARKS.PANEL_TRANSFORM_START(panelKey, transformationId, operationId);\n\n const isError = data.metadata.error || data.metadata.success === false;\n const transformEndMark = isError\n ? PERFORMANCE_MARKS.PANEL_TRANSFORM_ERROR(panelKey, transformationId, operationId)\n : PERFORMANCE_MARKS.PANEL_TRANSFORM_END(panelKey, transformationId, operationId);\n\n const transformMeasureName = PERFORMANCE_MEASURES.PANEL_TRANSFORM(panelKey, transformationId, operationId);\n createPerformanceMeasure(transformMeasureName, transformStartMark, transformEndMark);\n break;\n\n default:\n break;\n }\n }\n}\n\n// Global singleton instance with lazy initialization\nlet scenePerformanceLogger: ScenePerformanceLogger | null = null;\n\nexport function initializeScenePerformanceLogger(): ScenePerformanceLogger {\n if (!scenePerformanceLogger) {\n scenePerformanceLogger = new ScenePerformanceLogger();\n scenePerformanceLogger.initialize();\n\n // Register as global performance observer\n registerPerformanceObserver(scenePerformanceLogger, 'SPL');\n }\n return scenePerformanceLogger;\n}\n\nexport function getScenePerformanceLogger(): ScenePerformanceLogger {\n return initializeScenePerformanceLogger();\n}\n","import { locationUtil, UrlQueryMap } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, getBackendSrv, getDataSourceSrv, isFetchError, locationService } from '@grafana/runtime';\nimport { sceneGraph } from '@grafana/scenes';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { GetRepositoryFilesWithPathApiResponse, provisioningAPIv0alpha1 } from 'app/api/clients/provisioning/v0alpha1';\nimport { StateManagerBase } from 'app/core/services/StateManagerBase';\nimport { getMessageFromError, getMessageIdFromError, getStatusFromError } from 'app/core/utils/errors';\nimport { startMeasure, stopMeasure } from 'app/core/utils/metrics';\nimport {\n AnnoKeyEmbedded,\n AnnoKeyFolder,\n AnnoKeyManagerIdentity,\n AnnoKeyManagerKind,\n AnnoKeySourcePath,\n} from 'app/features/apiserver/types';\nimport { ensureV2Response, transformDashboardV2SpecToV1 } from 'app/features/dashboard/api/ResponseTransformers';\nimport { DashboardVersionError, DashboardWithAccessInfo } from 'app/features/dashboard/api/types';\nimport { isDashboardV2Resource, isDashboardV2Spec, isV2StoredVersion } from 'app/features/dashboard/api/utils';\nimport { initializeDashboardAnalyticsAggregator } from 'app/features/dashboard/services/DashboardAnalyticsAggregator';\nimport { dashboardLoaderSrv, DashboardLoaderSrvV2 } from 'app/features/dashboard/services/DashboardLoaderSrv';\nimport { getDashboardSceneProfiler } from 'app/features/dashboard/services/DashboardProfiler';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { initializeScenePerformanceLogger } from 'app/features/dashboard/services/ScenePerformanceLogger';\nimport { emitDashboardViewEvent } from 'app/features/dashboard/state/analyticsProcessor';\nimport { trackDashboardSceneLoaded } from 'app/features/dashboard-scene/utils/tracking';\nimport { playlistSrv } from 'app/features/playlist/PlaylistSrv';\nimport { ProvisioningPreview } from 'app/features/provisioning/types';\nimport { dispatch } from 'app/store/store';\nimport {\n DashboardDataDTO,\n DashboardDTO,\n DashboardRoutes,\n HomeDashboardRedirectDTO,\n isRedirectResponse,\n} from 'app/types/dashboard';\n\nimport { PanelEditor } from '../panel-edit/PanelEditor';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { buildNewDashboardSaveModel, buildNewDashboardSaveModelV2 } from '../serialization/buildNewDashboardSaveModel';\nimport { transformSaveModelSchemaV2ToScene } from '../serialization/transformSaveModelSchemaV2ToScene';\nimport { transformSaveModelToScene } from '../serialization/transformSaveModelToScene';\nimport { restoreDashboardStateFromLocalStorage } from '../utils/dashboardSessionState';\n\nimport { processQueryParamsForDashboardLoad, updateNavModel } from './utils';\n\n/**\n * Initialize both performance services to ensure they're ready before profiling starts\n */\nfunction initializeDashboardPerformanceServices(): void {\n initializeScenePerformanceLogger();\n initializeDashboardAnalyticsAggregator();\n}\n\nexport interface LoadError {\n status?: number;\n messageId?: string;\n message: string;\n}\n\nexport interface DashboardScenePageState {\n dashboard?: DashboardScene;\n panelEditor?: PanelEditor;\n isLoading?: boolean;\n loadError?: LoadError;\n}\n\nexport const DASHBOARD_CACHE_TTL = 500;\n\nconst LOAD_SCENE_MEASUREMENT = 'loadDashboardScene';\n\n/** Only used by cache in loading home in DashboardPageProxy and initDashboard (Old arch), can remove this after old dashboard arch is gone */\nexport const HOME_DASHBOARD_CACHE_KEY = '__grafana_home_uid__';\n\ninterface DashboardCacheEntry<T> {\n dashboard: T;\n ts: number;\n cacheKey: string;\n}\n\nexport interface LoadDashboardOptions {\n uid: string;\n route: DashboardRoutes;\n slug?: string;\n type?: string;\n urlFolderUid?: string;\n}\n\nexport type HomeDashboardDTO = DashboardDTO & {\n dashboard: DashboardDataDTO | DashboardV2Spec;\n};\n\ninterface DashboardScenePageStateManagerLike<T> {\n fetchDashboard(options: LoadDashboardOptions): Promise<T | null>;\n getDashboardFromCache(cacheKey: string): T | null;\n loadDashboard(options: LoadDashboardOptions): Promise<void>;\n transformResponseToScene(rsp: T | null, options: LoadDashboardOptions): DashboardScene | null;\n reloadDashboard(queryParams: UrlQueryMap): Promise<void>;\n loadSnapshot(slug: string): Promise<void>;\n setDashboardCache(cacheKey: string, dashboard: T): void;\n clearSceneCache(): void;\n clearDashboardCache(): void;\n clearState(): void;\n getCache(): Record<string, DashboardScene>;\n useState: () => DashboardScenePageState;\n}\n\nabstract class DashboardScenePageStateManagerBase<T>\n extends StateManagerBase<DashboardScenePageState>\n implements DashboardScenePageStateManagerLike<T>\n{\n abstract fetchDashboard(options: LoadDashboardOptions): Promise<T | null>;\n abstract reloadDashboard(queryParams: UrlQueryMap): Promise<void>;\n abstract transformResponseToScene(rsp: T | null, options: LoadDashboardOptions): DashboardScene | null;\n abstract loadSnapshotScene(slug: string): Promise<DashboardScene>;\n\n protected cache: Record<string, DashboardScene> = {};\n\n // This is a simplistic, short-term cache for DashboardDTOs to avoid fetching the same dashboard multiple times across a short time span.\n protected dashboardCache?: DashboardCacheEntry<T>;\n\n getCache(): Record<string, DashboardScene> {\n return this.cache;\n }\n\n protected async fetchHomeDashboard(): Promise<DashboardDTO | null> {\n const rsp = await getBackendSrv().get<HomeDashboardDTO | HomeDashboardRedirectDTO>('/api/dashboards/home');\n\n if (isRedirectResponse(rsp)) {\n const newUrl = locationUtil.stripBaseFromUrl(rsp.redirectUri);\n locationService.replace(newUrl);\n return null;\n }\n\n // If dashboard is on v2 schema convert to v1 schema, there's curently no v2 API for home dashboard\n if (isDashboardV2Spec(rsp.dashboard)) {\n rsp.dashboard = transformDashboardV2SpecToV1(rsp.dashboard, {\n name: '',\n generation: 0,\n resourceVersion: '0',\n creationTimestamp: '',\n });\n }\n\n if (rsp?.meta) {\n rsp.meta.canSave = false;\n rsp.meta.canShare = false;\n rsp.meta.canStar = false;\n }\n\n return rsp;\n }\n\n private async loadHomeDashboard(): Promise<DashboardScene | null> {\n const rsp = await this.fetchHomeDashboard();\n if (rsp) {\n return transformSaveModelToScene(rsp);\n }\n\n return null;\n }\n\n public async loadSnapshot(slug: string) {\n try {\n const dashboard = await this.loadSnapshotScene(slug);\n\n this.setState({ dashboard: dashboard, isLoading: false });\n } catch (err) {\n const status = getStatusFromError(err);\n const message = getMessageFromError(err);\n const messageId = getMessageIdFromError(err);\n\n this.setState({\n isLoading: false,\n loadError: {\n status,\n message,\n messageId,\n },\n });\n // If the error is a DashboardVersionError, we want to throw it so that the error boundary is triggered\n // This enables us to switch to the correct version of the dashboard\n if (err instanceof DashboardVersionError) {\n throw err;\n }\n }\n }\n\n protected async loadProvisioningDashboard(repo: string, path: string): Promise<T> {\n const params = new URLSearchParams(window.location.search);\n const ref = params.get('ref') ?? undefined; // commit hash or branch\n\n const loadWithRef = async (refParam: string | undefined) => {\n const result = await dispatch(\n provisioningAPIv0alpha1.endpoints.getRepositoryFilesWithPath.initiate({\n name: repo,\n path: path,\n ref: refParam,\n })\n );\n\n if (result && 'error' in result) {\n throw result.error;\n }\n\n const v: GetRepositoryFilesWithPathApiResponse = structuredClone(result.data);\n // Load the results from dryRun\n const dryRun = v.resource.dryRun;\n if (!dryRun) {\n return Promise.reject('failed to read provisioned dashboard');\n }\n\n if (!dryRun.apiVersion.startsWith('dashboard.grafana.app')) {\n return Promise.reject('unexpected resource type: ' + dryRun.apiVersion);\n }\n\n return this.processDashboardFromProvisioning(repo, path, dryRun, {\n file: v.path ?? '',\n ref: refParam,\n repo: repo,\n });\n };\n\n try {\n return await loadWithRef(ref);\n } catch (err) {\n // If ref is not found (404), retry without ref to default to the main branch\n if (ref && isFetchError(err) && err.status === 404) {\n return await loadWithRef(undefined);\n }\n throw err;\n }\n }\n\n private processDashboardFromProvisioning(\n repo: string,\n path: string,\n dryRun: any,\n provisioningPreview: ProvisioningPreview\n ) {\n if (dryRun.apiVersion.split('/')[1] === 'v2beta1') {\n return {\n ...dryRun,\n kind: 'DashboardWithAccessInfo',\n access: {\n canStar: false,\n isSnapshot: false,\n canShare: false,\n\n // Should come from the repo settings\n canDelete: true,\n canSave: true,\n canEdit: true,\n },\n };\n }\n\n let anno = dryRun.metadata.annotations;\n if (!anno) {\n dryRun.metadata.annotations = {};\n }\n anno[AnnoKeyManagerKind] = 'repo';\n anno[AnnoKeyManagerIdentity] = repo;\n anno[AnnoKeySourcePath] = provisioningPreview.ref ? path + '#' + provisioningPreview.ref : path;\n\n // Include version information to align with the current dashboard schema\n const specWithVersion = {\n ...dryRun.spec,\n version: dryRun.metadata.generation || 0,\n };\n\n return {\n meta: {\n canStar: false,\n isSnapshot: false,\n canShare: false,\n\n // Should come from the repo settings\n canDelete: true,\n canSave: true,\n canEdit: true,\n\n // Includes additional k8s metadata\n k8s: dryRun.metadata,\n\n // lookup info\n provisioning: provisioningPreview,\n },\n dashboard: specWithVersion,\n };\n }\n\n public async loadDashboard(options: LoadDashboardOptions) {\n try {\n startMeasure(LOAD_SCENE_MEASUREMENT);\n const dashboard = await this.loadScene(options);\n if (!dashboard) {\n return;\n }\n\n if (config.featureToggles.preserveDashboardStateWhenNavigating && Boolean(options.uid)) {\n restoreDashboardStateFromLocalStorage(dashboard);\n }\n\n this.setState({ dashboard: dashboard, isLoading: false });\n const measure = stopMeasure(LOAD_SCENE_MEASUREMENT);\n const queryController = sceneGraph.getQueryController(dashboard);\n\n trackDashboardSceneLoaded(dashboard, measure?.duration);\n\n const enableProfiling =\n config.dashboardPerformanceMetrics.findIndex((uid) => uid === '*' || uid === options.uid) !== -1;\n\n if (enableProfiling) {\n // Initialize both performance services before starting profiling to ensure observers are registered\n initializeDashboardPerformanceServices();\n }\n\n // Start dashboard_view profiling (both services are now guaranteed to be listening)\n queryController?.startProfile('dashboard_view');\n\n if (options.route !== DashboardRoutes.New) {\n emitDashboardViewEvent({\n meta: dashboard.state.meta,\n uid: dashboard.state.uid,\n title: dashboard.state.title,\n id: dashboard.state.id,\n });\n }\n } catch (err) {\n const status = getStatusFromError(err);\n const message = getMessageFromError(err);\n const messageId = getMessageIdFromError(err);\n\n this.setState({\n isLoading: false,\n loadError: {\n status,\n message,\n messageId,\n },\n });\n\n if (!isFetchError(err)) {\n console.error('Error loading dashboard:', err);\n }\n\n // If the error is a DashboardVersionError, we want to throw it so that the error boundary is triggered\n // This enables us to switch to the correct version of the dashboard\n if (err instanceof DashboardVersionError) {\n throw err;\n }\n }\n }\n\n private async loadScene(options: LoadDashboardOptions): Promise<DashboardScene | null> {\n this.setState({ dashboard: undefined, isLoading: true });\n\n // Home dashboard is not handled through legacy API and is not versioned.\n // Handling home dashboard flow separately from regular dashboard flow.\n if (options.route === DashboardRoutes.Home) {\n return await this.loadHomeDashboard();\n }\n\n const rsp = await this.fetchDashboard(options);\n\n if (!rsp) {\n return null;\n }\n\n return this.transformResponseToScene(rsp, options);\n }\n\n public getDashboardFromCache(cacheKey: string): T | null {\n const cachedDashboard = this.dashboardCache;\n\n if (\n cachedDashboard &&\n cachedDashboard.cacheKey === cacheKey &&\n Date.now() - cachedDashboard?.ts < DASHBOARD_CACHE_TTL\n ) {\n return cachedDashboard.dashboard;\n }\n\n return null;\n }\n\n public clearState() {\n getDashboardSrv().setCurrent(undefined);\n\n this.setState({\n dashboard: undefined,\n loadError: undefined,\n isLoading: false,\n panelEditor: undefined,\n });\n }\n\n public setDashboardCache(cacheKey: string, dashboard: T) {\n this.dashboardCache = { dashboard, ts: Date.now(), cacheKey };\n }\n\n public clearDashboardCache() {\n this.dashboardCache = undefined;\n }\n\n public getSceneFromCache(cacheKey: string) {\n return this.cache[cacheKey];\n }\n\n public setSceneCache(cacheKey: string, scene: DashboardScene) {\n this.cache[cacheKey] = scene;\n }\n\n public removeSceneCache(cacheKey: string) {\n delete this.cache[cacheKey];\n }\n\n public clearSceneCache() {\n this.cache = {};\n }\n}\n\nexport class DashboardScenePageStateManager extends DashboardScenePageStateManagerBase<DashboardDTO> {\n transformResponseToScene(rsp: DashboardDTO | null, options: LoadDashboardOptions): DashboardScene | null {\n const fromCache = this.getSceneFromCache(options.uid);\n\n if (\n fromCache &&\n fromCache.state.version === rsp?.dashboard.version &&\n fromCache.state.meta.created === rsp?.meta.created\n ) {\n const profiler = getDashboardSceneProfiler();\n profiler.setMetadata({\n dashboardUID: fromCache.state.uid,\n dashboardTitle: fromCache.state.title,\n });\n return fromCache;\n }\n\n if (rsp?.dashboard) {\n const scene = transformSaveModelToScene(rsp);\n\n // Special handling for Template route - set up edit mode and dirty state\n if (config.featureToggles.dashboardLibrary && options.route === DashboardRoutes.Template) {\n scene.setInitialSaveModel(rsp.dashboard, rsp.meta);\n scene.onEnterEditMode();\n scene.setState({ isDirty: true });\n }\n\n // Cache scene only if not coming from Explore, we don't want to cache temporary dashboard\n if (options.uid) {\n this.setSceneCache(options.uid, scene);\n }\n\n return scene;\n }\n\n throw new Error('Dashboard not found');\n }\n\n public async loadSnapshotScene(slug: string): Promise<DashboardScene> {\n const rsp = await dashboardLoaderSrv.loadSnapshot(slug);\n\n if (rsp?.dashboard) {\n if (isDashboardV2Spec(rsp.dashboard)) {\n throw new DashboardVersionError('v2beta1', 'Using legacy snapshot API to get a V2 dashboard');\n }\n\n const scene = transformSaveModelToScene(rsp);\n return scene;\n }\n\n throw new Error('Snapshot not found');\n }\n\n private async loadTemplateDashboard(): Promise<DashboardDTO> {\n // Extract template parameters from URL\n const searchParams = new URLSearchParams(window.location.search);\n const datasource = searchParams.get('datasource');\n const pluginId = searchParams.get('pluginId');\n const path = searchParams.get('path');\n\n if (!datasource || !pluginId || !path) {\n throw new Error('Missing required parameters for template dashboard');\n }\n\n const ds = getDataSourceSrv().getInstanceSettings(datasource);\n if (!ds) {\n throw new Error(`Datasource \"${datasource}\" not found. Please check your datasource configuration.`);\n }\n\n const data = {\n pluginId,\n path,\n overwrite: true,\n inputs: [\n {\n name: '*',\n type: 'datasource',\n pluginId,\n value: datasource,\n },\n ],\n };\n\n const interpolatedDashboard = await getBackendSrv().post('/api/dashboards/interpolate', data);\n\n return {\n dashboard: {\n ...interpolatedDashboard,\n uid: '',\n version: 0,\n id: null,\n },\n meta: {\n canSave: true,\n canEdit: true,\n canStar: false,\n canShare: false,\n canDelete: false,\n isNew: true,\n folderUid: '',\n },\n };\n }\n\n public async fetchDashboard({\n type,\n slug,\n uid,\n route,\n urlFolderUid,\n }: LoadDashboardOptions): Promise<DashboardDTO | null> {\n const cacheKey = route === DashboardRoutes.Home ? HOME_DASHBOARD_CACHE_KEY : uid;\n\n const cachedDashboard = this.getDashboardFromCache(cacheKey);\n\n if (cachedDashboard) {\n return cachedDashboard;\n }\n\n let rsp: DashboardDTO;\n\n try {\n switch (route) {\n case DashboardRoutes.Home:\n // For legacy dashboarding we keep this logic here, as dashboard can be loaded through state manager's fetchDashboard method directly\n // See DashboardPageProxy.\n const homeDashboard = await this.fetchHomeDashboard();\n\n if (!homeDashboard) {\n return null;\n }\n\n rsp = homeDashboard;\n break;\n case DashboardRoutes.New:\n rsp = await buildNewDashboardSaveModel(urlFolderUid);\n break;\n case DashboardRoutes.Template:\n rsp = await this.loadTemplateDashboard();\n break;\n case DashboardRoutes.Provisioning:\n return this.loadProvisioningDashboard(slug || '', uid);\n case DashboardRoutes.Public: {\n const result = await dashboardLoaderSrv.loadDashboard('public', '', uid);\n // public dashboards use legacy API but can return V2 dashboards\n // in this case we need to throw a dashboard version error so that the call can be delegated\n // to V2 state manager which will run fetchDashboard\n if (isDashboardV2Spec(result.dashboard)) {\n throw new DashboardVersionError('v2beta1', 'Using legacy public dashboard API to get a V2 dashboard');\n }\n return result;\n }\n default:\n // If reloadDashboardsOnParamsChange is on, we need to process query params for dashboard load\n // Since the scene is not yet there, we need to process whatever came through URL\n if (config.featureToggles.reloadDashboardsOnParamsChange) {\n const queryParamsObject = processQueryParamsForDashboardLoad();\n rsp = await dashboardLoaderSrv.loadDashboard(type || 'db', slug || '', uid, queryParamsObject);\n } else {\n rsp = await dashboardLoaderSrv.loadDashboard(type || 'db', slug || '', uid);\n }\n\n if (route === DashboardRoutes.Embedded) {\n rsp.meta.isEmbedded = true;\n }\n }\n\n // Fix outdated URLs (e.g., old slugs from title changes) but skip during playlist navigation\n // Playlists manage their own URL generation and redirects would break the navigation flow\n if (rsp.meta.url && route === DashboardRoutes.Normal && !playlistSrv.state.isPlaying) {\n const dashboardUrl = locationUtil.stripBaseFromUrl(rsp.meta.url);\n const currentPath = locationService.getLocation().pathname;\n\n if (dashboardUrl !== currentPath) {\n // Spread current location to persist search params used for navigation\n locationService.replace({\n ...locationService.getLocation(),\n pathname: dashboardUrl,\n });\n console.log('not correct url correcting', dashboardUrl, currentPath);\n }\n }\n\n // Populate nav model in global store according to the folder\n if (rsp.meta.folderUid) {\n await updateNavModel(rsp.meta.folderUid);\n }\n\n // Do not cache new dashboards\n this.setDashboardCache(cacheKey, rsp);\n } catch (e) {\n // Ignore cancelled errors\n if (isFetchError(e) && e.cancelled) {\n return null;\n }\n\n throw e;\n }\n\n return rsp;\n }\n\n public async reloadDashboard(queryParams: UrlQueryMap): Promise<void> {\n const dashboard = this.state.dashboard;\n\n if (!dashboard || !dashboard.state.uid) {\n return;\n }\n\n const uid = dashboard.state.uid;\n\n try {\n this.setState({ isLoading: true });\n\n const rsp = await dashboardLoaderSrv.loadDashboard('db', dashboard.state.meta.slug, uid, queryParams);\n const fromCache = this.getSceneFromCache(uid);\n\n // check if cached db version is same as both\n // response and current db state. There are scenarios where they can differ\n // e.g: when reloadOnParamsChange ff is on the first loaded dashboard could be version 0\n // then on this reload call the rsp increments the version. When the cache is not set\n // it creates a new scene based on the new rsp. But if we navigate to another dashboard\n // and then back to the initial one, the cache is still set, but the dashboard will be loaded\n // again with version 0. Because the cache is set with the incremented version and the rsp on\n // reload will match the cached version we return and do nothing, but the set scene is still\n // the one for the version 0 dashboard, thus we verify dashboard state version as well\n if (\n fromCache &&\n fromCache.state.version === rsp?.dashboard.version &&\n fromCache.state.version === this.state.dashboard?.state.version\n ) {\n this.setState({ isLoading: false });\n return;\n }\n\n if (!rsp?.dashboard) {\n this.setState({\n isLoading: false,\n loadError: {\n status: 404,\n message: t(\n 'dashboard-scene.dashboard-scene-page-state-manager.message.dashboard-not-found',\n 'Dashboard not found'\n ),\n },\n });\n return;\n }\n\n const scene = transformSaveModelToScene(rsp);\n\n // we need to call and restore dashboard state on every reload that pulls a new dashboard version\n if (config.featureToggles.preserveDashboardStateWhenNavigating && Boolean(uid)) {\n restoreDashboardStateFromLocalStorage(scene);\n }\n\n this.setSceneCache(uid, scene);\n this.setState({ dashboard: scene, isLoading: false });\n } catch (err) {\n const status = getStatusFromError(err);\n const message = getMessageFromError(err);\n\n this.setState({\n isLoading: false,\n loadError: {\n message,\n status,\n },\n });\n\n if (err instanceof DashboardVersionError) {\n throw err;\n }\n }\n }\n}\n\nexport class DashboardScenePageStateManagerV2 extends DashboardScenePageStateManagerBase<\n DashboardWithAccessInfo<DashboardV2Spec>\n> {\n private dashboardLoader = new DashboardLoaderSrvV2();\n\n public async loadSnapshotScene(slug: string): Promise<DashboardScene> {\n const rsp = await this.dashboardLoader.loadSnapshot(slug);\n const v2Response = ensureV2Response(rsp);\n\n if (v2Response.spec) {\n const scene = transformSaveModelSchemaV2ToScene(v2Response);\n return scene;\n }\n\n throw new Error('Snapshot not found');\n }\n\n transformResponseToScene(\n rsp: DashboardWithAccessInfo<DashboardV2Spec> | null,\n options: LoadDashboardOptions\n ): DashboardScene | null {\n const fromCache = this.getSceneFromCache(options.uid);\n\n if (fromCache && fromCache.state.version === rsp?.metadata.generation) {\n const profiler = getDashboardSceneProfiler();\n profiler.setMetadata({\n dashboardUID: fromCache.state.uid,\n dashboardTitle: fromCache.state.title,\n });\n return fromCache;\n }\n\n if (rsp) {\n const scene = transformSaveModelSchemaV2ToScene(rsp);\n\n // Cache scene only if not coming from Explore, we don't want to cache temporary dashboard\n if (options.uid) {\n this.setSceneCache(options.uid, scene);\n }\n\n return scene;\n }\n\n throw new Error('Dashboard not found');\n }\n\n public async fetchDashboard({\n type,\n slug,\n uid,\n route,\n urlFolderUid,\n }: LoadDashboardOptions): Promise<DashboardWithAccessInfo<DashboardV2Spec> | null> {\n const cacheKey = route === DashboardRoutes.Home ? HOME_DASHBOARD_CACHE_KEY : uid;\n\n const cachedDashboard = this.getDashboardFromCache(cacheKey);\n if (cachedDashboard) {\n return cachedDashboard;\n }\n\n let rsp: DashboardWithAccessInfo<DashboardV2Spec>;\n try {\n switch (route) {\n case DashboardRoutes.New:\n rsp = await buildNewDashboardSaveModelV2(urlFolderUid);\n break;\n case DashboardRoutes.Provisioning: {\n return await this.loadProvisioningDashboard(slug || '', uid);\n }\n case DashboardRoutes.Public: {\n return await this.dashboardLoader.loadDashboard('public', '', uid);\n }\n default:\n rsp = await this.dashboardLoader.loadDashboard(type || 'db', slug || '', uid);\n\n if (route === DashboardRoutes.Embedded) {\n rsp.metadata.annotations = rsp.metadata.annotations || {};\n rsp.metadata.annotations[AnnoKeyEmbedded] = 'embedded';\n }\n }\n // Fix outdated URLs (e.g., old slugs from title changes) but skip during playlist navigation\n // Playlists manage their own URL generation and redirects would break the navigation flow\n if (rsp.access.url && route === DashboardRoutes.Normal && !playlistSrv.state.isPlaying) {\n const dashboardUrl = locationUtil.stripBaseFromUrl(rsp.access.url);\n const currentPath = locationService.getLocation().pathname;\n if (dashboardUrl !== currentPath) {\n // Spread current location to persist search params used for navigation\n locationService.replace({\n ...locationService.getLocation(),\n pathname: dashboardUrl,\n });\n console.log('not correct url correcting', dashboardUrl, currentPath);\n }\n }\n // Populate nav model in global store according to the folder\n if (rsp.metadata.annotations?.[AnnoKeyFolder]) {\n await updateNavModel(rsp.metadata.annotations?.[AnnoKeyFolder]);\n }\n // Do not cache new dashboards\n this.setDashboardCache(cacheKey, rsp);\n } catch (e) {\n // Ignore cancelled errors\n if (isFetchError(e) && e.cancelled) {\n return null;\n }\n throw e;\n }\n return rsp;\n }\n\n public async reloadDashboard(queryParams: UrlQueryMap): Promise<void> {\n const dashboard = this.state.dashboard;\n\n if (!dashboard || !dashboard.state.uid) {\n return;\n }\n\n const uid = dashboard.state.uid;\n\n try {\n this.setState({ isLoading: true });\n\n const rsp = await this.dashboardLoader.loadDashboard('db', dashboard.state.meta.slug, uid, queryParams);\n const fromCache = this.getSceneFromCache(uid);\n\n if (\n fromCache &&\n fromCache.state.version === rsp?.metadata.generation &&\n fromCache.state.version === this.state.dashboard?.state.version\n ) {\n this.setState({ isLoading: false });\n return;\n }\n\n if (!rsp?.spec) {\n this.setState({\n isLoading: false,\n loadError: {\n status: 404,\n message: t(\n 'dashboard-scene.dashboard-scene-page-state-manager-v2.message.dashboard-not-found',\n 'Dashboard not found'\n ),\n },\n });\n return;\n }\n\n const scene = transformSaveModelSchemaV2ToScene(rsp);\n\n // we need to call and restore dashboard state on every reload that pulls a new dashboard version\n if (config.featureToggles.preserveDashboardStateWhenNavigating && Boolean(uid)) {\n restoreDashboardStateFromLocalStorage(scene);\n }\n\n this.setSceneCache(uid, scene);\n\n this.setState({ dashboard: scene, isLoading: false });\n } catch (err) {\n const status = getStatusFromError(err);\n const message = getMessageFromError(err);\n this.setState({\n isLoading: false,\n loadError: {\n message,\n status,\n },\n });\n if (err instanceof DashboardVersionError) {\n throw err;\n }\n }\n }\n}\n\nexport class UnifiedDashboardScenePageStateManager extends DashboardScenePageStateManagerBase<\n DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec>\n> {\n private v1Manager: DashboardScenePageStateManager;\n private v2Manager: DashboardScenePageStateManagerV2;\n private activeManager: DashboardScenePageStateManager | DashboardScenePageStateManagerV2;\n\n constructor(initialState: Partial<DashboardScenePageState>) {\n super(initialState);\n this.v1Manager = new DashboardScenePageStateManager(initialState);\n this.v2Manager = new DashboardScenePageStateManagerV2(initialState);\n\n this.activeManager = this.v1Manager;\n }\n\n private async withVersionHandling<T>(\n operation: (manager: DashboardScenePageStateManager | DashboardScenePageStateManagerV2) => Promise<T>\n ): Promise<T> {\n try {\n return await operation(this.activeManager);\n } catch (error) {\n if (error instanceof DashboardVersionError) {\n const manager = isV2StoredVersion(error.data.storedVersion) ? this.v2Manager : this.v1Manager;\n this.activeManager = manager;\n return await operation(manager);\n } else {\n throw error;\n }\n } finally {\n // need to sync the state of the active manager with the unified manager\n // in cases when components are subscribed to unified manager's state\n this.setState(this.activeManager.state);\n }\n }\n\n public async fetchDashboard(options: LoadDashboardOptions) {\n return this.withVersionHandling<DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec> | null>((manager) =>\n manager.fetchDashboard(options)\n );\n }\n\n public async reloadDashboard(queryParams: UrlQueryMap) {\n return this.withVersionHandling((manager) => manager.reloadDashboard.call(this, queryParams));\n }\n\n public getDashboardFromCache(uid: string) {\n return this.activeManager.getDashboardFromCache(uid);\n }\n\n transformResponseToScene(\n rsp: DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec> | null,\n options: LoadDashboardOptions\n ): DashboardScene | null {\n if (!rsp) {\n return null;\n }\n if (isDashboardV2Resource(rsp)) {\n this.activeManager = this.v2Manager;\n return this.v2Manager.transformResponseToScene(rsp, options);\n }\n\n return this.v1Manager.transformResponseToScene(rsp, options);\n }\n\n public async loadSnapshotScene(slug: string): Promise<DashboardScene> {\n try {\n return await this.v1Manager.loadSnapshotScene(slug);\n } catch (error) {\n if (error instanceof DashboardVersionError && isV2StoredVersion(error.data.storedVersion)) {\n return await this.v2Manager.loadSnapshotScene(slug);\n }\n throw new Error('Snapshot not found');\n }\n }\n\n public async loadSnapshot(slug: string) {\n return this.withVersionHandling((manager) => manager.loadSnapshot.call(this, slug));\n }\n\n public clearDashboardCache() {\n this.v1Manager.clearDashboardCache();\n this.v2Manager.clearDashboardCache();\n }\n\n public clearSceneCache() {\n this.v1Manager.clearSceneCache();\n this.v2Manager.clearSceneCache();\n this.cache = {};\n }\n\n public getSceneFromCache(key: string) {\n return this.activeManager.getSceneFromCache(key);\n }\n\n public setSceneCache(cacheKey: string, scene: DashboardScene): void {\n this.activeManager.setSceneCache(cacheKey, scene);\n }\n\n public removeSceneCache(cacheKey: string): void {\n this.v1Manager.removeSceneCache(cacheKey);\n this.v2Manager.removeSceneCache(cacheKey);\n }\n\n public getCache() {\n return this.activeManager.getCache();\n }\n\n public setDashboardCache(cacheKey: string, dashboard: DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec>) {\n if (isDashboardV2Resource(dashboard)) {\n this.v2Manager.setDashboardCache(cacheKey, dashboard);\n } else {\n this.v1Manager.setDashboardCache(cacheKey, dashboard);\n }\n }\n\n public async loadDashboard(options: LoadDashboardOptions): Promise<void> {\n if (options.route === DashboardRoutes.New) {\n const newDashboardVersion = config.featureToggles.dashboardNewLayouts ? 'v2' : 'v1';\n this.setActiveManager(newDashboardVersion);\n }\n return this.withVersionHandling((manager) => manager.loadDashboard.call(this, options));\n }\n\n public setActiveManager(manager: 'v1' | 'v2') {\n if (manager === 'v1') {\n this.activeManager = this.v1Manager;\n } else {\n this.activeManager = this.v2Manager;\n }\n }\n public resetActiveManager() {\n this.setActiveManager('v1');\n }\n}\n\nconst managers: {\n v1?: DashboardScenePageStateManager;\n v2?: DashboardScenePageStateManagerV2;\n unified?: UnifiedDashboardScenePageStateManager;\n} = {\n v1: undefined,\n v2: undefined,\n unified: undefined,\n};\n\nexport function getDashboardScenePageStateManager(): UnifiedDashboardScenePageStateManager;\nexport function getDashboardScenePageStateManager(v: 'v1'): DashboardScenePageStateManager;\nexport function getDashboardScenePageStateManager(v: 'v2'): DashboardScenePageStateManagerV2;\n\nexport function getDashboardScenePageStateManager(v?: 'v1' | 'v2') {\n if (v === 'v1') {\n if (!managers.v1) {\n managers.v1 = new DashboardScenePageStateManager({});\n }\n return managers.v1;\n }\n\n if (v === 'v2') {\n if (!managers.v2) {\n managers.v2 = new DashboardScenePageStateManagerV2({});\n }\n return managers.v2;\n }\n\n if (!managers.unified) {\n managers.unified = new UnifiedDashboardScenePageStateManager({});\n }\n\n return managers.unified;\n}\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { getAPIBaseURL } from '../../../../utils/utils';\nimport { createBaseQuery } from '../../createBaseQuery';\n\nexport const API_GROUP = 'dashboard.grafana.app' as const;\nexport const API_VERSION = 'v0alpha1' as const;\nexport const BASE_URL = getAPIBaseURL(API_GROUP, API_VERSION);\n\nexport const api = createApi({\n reducerPath: 'dashboardAPIv0alpha1',\n baseQuery: createBaseQuery({\n baseURL: BASE_URL,\n }),\n endpoints: () => ({}),\n});\n","import { concat, every, find, groupBy, head, map, partition } from 'lodash';\n\nexport function dedupAnnotations(annotations: any) {\n let dedup = [];\n\n // Split events by annotationId property existence\n const events = partition(annotations, 'id');\n\n const eventsById = groupBy(events[0], 'id');\n dedup = map(eventsById, (eventGroup) => {\n if (eventGroup.length > 1 && !every(eventGroup, isPanelAlert)) {\n // Get first non-panel alert\n return find(eventGroup, (event) => {\n return event.eventType !== 'panel-alert';\n });\n } else {\n return head(eventGroup);\n }\n });\n\n dedup = concat(dedup, events[1]);\n return dedup;\n}\n\nfunction isPanelAlert(event: { eventType: string }) {\n return event.eventType === 'panel-alert';\n}\n","import { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { AnnotationEvent, DataSourceApi } from '@grafana/data';\n\nimport { executeAnnotationQuery } from '../../../annotations/executeAnnotationQuery';\nimport { PanelModel } from '../../../dashboard/state/PanelModel';\n\nimport { AnnotationQueryRunner, AnnotationQueryRunnerOptions } from './types';\nimport { handleAnnotationQueryRunnerError } from './utils';\n\nexport class AnnotationsQueryRunner implements AnnotationQueryRunner {\n canRun(datasource?: DataSourceApi): boolean {\n if (!datasource) {\n return false;\n }\n\n return Boolean(!datasource.annotationQuery || datasource.annotations);\n }\n\n run({ annotation, datasource, dashboard, range }: AnnotationQueryRunnerOptions): Observable<AnnotationEvent[]> {\n if (!this.canRun(datasource)) {\n return of([]);\n }\n\n const panel: PanelModel = {} as PanelModel; // deliberate setting panel to empty object because executeAnnotationQuery shouldn't depend on panelModel\n\n return executeAnnotationQuery({ dashboard, range, panel }, datasource!, annotation).pipe(\n map((result) => {\n return result.events ?? [];\n }),\n catchError(handleAnnotationQueryRunnerError)\n );\n }\n}\n","import { from, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { AnnotationEvent, DataSourceApi } from '@grafana/data';\nimport { shouldUseLegacyRunner } from 'app/features/annotations/standardAnnotationSupport';\n\nimport { AnnotationQueryRunner, AnnotationQueryRunnerOptions } from './types';\nimport { handleAnnotationQueryRunnerError } from './utils';\n\nexport class LegacyAnnotationQueryRunner implements AnnotationQueryRunner {\n canRun(datasource?: DataSourceApi): boolean {\n if (!datasource) {\n return false;\n }\n\n if (shouldUseLegacyRunner(datasource)) {\n return true;\n }\n\n return Boolean(datasource.annotationQuery && !datasource.annotations);\n }\n\n run({ annotation, datasource, dashboard, range }: AnnotationQueryRunnerOptions): Observable<AnnotationEvent[]> {\n if (!this.canRun(datasource)) {\n return of([]);\n }\n\n if (datasource?.annotationQuery === undefined) {\n console.warn('datasource does not have an annotation query');\n return of([]);\n }\n\n const annotationQuery = datasource.annotationQuery({ range, rangeRaw: range.raw, annotation, dashboard });\n if (annotationQuery === undefined) {\n console.warn('datasource does not have an annotation query');\n return of([]);\n }\n\n return from(annotationQuery).pipe(catchError(handleAnnotationQueryRunnerError));\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { from, merge, Observable, of } from 'rxjs';\nimport { catchError, filter, finalize, map, mergeAll, mergeMap, reduce, takeUntil } from 'rxjs/operators';\n\nimport { AnnotationQuery, DataSourceApi } from '@grafana/data';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport { PublicAnnotationsDataSource } from 'app/features/query/state/DashboardQueryRunner/PublicAnnotationsDataSource';\n\nimport { AnnotationQueryFinished, AnnotationQueryStarted } from '../../../../types/events';\n\nimport { AnnotationsQueryRunner } from './AnnotationsQueryRunner';\nimport { getDashboardQueryRunner } from './DashboardQueryRunner';\nimport { LegacyAnnotationQueryRunner } from './LegacyAnnotationQueryRunner';\nimport {\n AnnotationQueryRunner,\n DashboardQueryRunnerOptions,\n DashboardQueryRunnerWorker,\n DashboardQueryRunnerWorkerResult,\n} from './types';\nimport { emptyResult, handleDatasourceSrvError, translateQueryResult } from './utils';\n\nexport class AnnotationsWorker implements DashboardQueryRunnerWorker {\n constructor(\n private readonly runners: AnnotationQueryRunner[] = [\n new LegacyAnnotationQueryRunner(),\n new AnnotationsQueryRunner(),\n ]\n ) {}\n\n canWork({ dashboard }: DashboardQueryRunnerOptions): boolean {\n const annotations = dashboard.annotations.list.find(AnnotationsWorker.getAnnotationsToProcessFilter);\n\n return Boolean(annotations);\n }\n\n work(options: DashboardQueryRunnerOptions): Observable<DashboardQueryRunnerWorkerResult> {\n if (!this.canWork(options)) {\n return emptyResult();\n }\n\n const { dashboard, range } = options;\n let annotations = dashboard.annotations.list.filter(AnnotationsWorker.getAnnotationsToProcessFilter);\n\n // We only want to create a single PublicDashboardDatasource. This will get all annotations in one request.\n if (config.publicDashboardAccessToken && annotations.length > 0) {\n annotations = [annotations[0]];\n }\n\n const observables = annotations.map((annotation) => {\n let datasourceObservable;\n\n if (config.publicDashboardAccessToken) {\n const pubdashDatasource = new PublicAnnotationsDataSource();\n datasourceObservable = of(pubdashDatasource).pipe(catchError(handleDatasourceSrvError));\n } else {\n datasourceObservable = from(getDataSourceSrv().get(annotation.datasource)).pipe(\n catchError(handleDatasourceSrvError) // because of the reduce all observables need to be completed, so an erroneous observable wont do\n );\n }\n\n return datasourceObservable.pipe(\n mergeMap((datasource: DataSourceApi | undefined) => {\n const runner = this.runners.find((r) => r.canRun(datasource));\n if (!runner) {\n return of([]);\n }\n\n dashboard.events.publish(new AnnotationQueryStarted(annotation));\n\n return runner.run({ annotation, datasource, dashboard, range }).pipe(\n takeUntil(\n getDashboardQueryRunner()\n .cancellations()\n .pipe(filter((a) => a === annotation))\n ),\n map((results) => {\n // store response in annotation object if this is a snapshot call\n if (dashboard.snapshot) {\n annotation.snapshotData = cloneDeep(results);\n }\n // translate result\n if (config.publicDashboardAccessToken) {\n return results;\n } else {\n return translateQueryResult(annotation, results);\n }\n }),\n finalize(() => {\n dashboard.events.publish(new AnnotationQueryFinished(annotation));\n })\n );\n })\n );\n });\n\n return merge(observables).pipe(\n mergeAll(),\n reduce((acc, value) => {\n // should we use scan or reduce here\n // reduce will only emit when all observables are completed\n // scan will emit when any observable is completed\n // choosing reduce to minimize re-renders\n return acc.concat(value);\n }),\n map((annotations) => {\n return { annotations, alertStates: [] };\n })\n );\n }\n\n private static getAnnotationsToProcessFilter(annotation: AnnotationQuery): boolean {\n return annotation.enable && !Boolean(annotation.snapshotData);\n }\n}\n","import { Observable, from } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { AlertState, AlertStateInfo } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { alertRuleApi } from 'app/features/alerting/unified/api/alertRuleApi';\nimport { ungroupRulesByFileName } from 'app/features/alerting/unified/api/prometheus';\nimport { Annotation } from 'app/features/alerting/unified/utils/constants';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\nimport { prometheusRuleType } from 'app/features/alerting/unified/utils/rules';\nimport { promAlertStateToAlertState } from 'app/features/dashboard-scene/scene/AlertStatesDataLayer';\nimport { dispatch } from 'app/store/store';\nimport { AccessControlAction } from 'app/types/accessControl';\nimport { RuleNamespace } from 'app/types/unified-alerting';\nimport { PromRuleGroupDTO } from 'app/types/unified-alerting-dto';\n\nimport { DashboardQueryRunnerOptions, DashboardQueryRunnerWorker, DashboardQueryRunnerWorkerResult } from './types';\nimport { emptyResult, handleDashboardQueryRunnerWorkerError } from './utils';\n\nexport class UnifiedAlertStatesWorker implements DashboardQueryRunnerWorker {\n // maps dashboard uid to wether it has alert rules.\n // if it is determined that a dashboard does not have alert rules,\n // further attempts to get alert states for it will not be made\n private hasAlertRules: Record<string, boolean> = {};\n\n canWork({ dashboard, range }: DashboardQueryRunnerOptions): boolean {\n if (!dashboard.uid) {\n return false;\n }\n\n // Cannot fetch rules while on a public dashboard since it's unauthenticated\n if (config.publicDashboardAccessToken) {\n return false;\n }\n\n if (range.raw.to !== 'now') {\n return false;\n }\n\n if (this.hasAlertRules[dashboard.uid] === false) {\n return false;\n }\n\n const hasRuleReadPermission =\n contextSrv.hasPermission(AccessControlAction.AlertingRuleRead) &&\n contextSrv.hasPermission(AccessControlAction.AlertingRuleExternalRead);\n\n if (!hasRuleReadPermission) {\n return false;\n }\n\n return true;\n }\n\n work(options: DashboardQueryRunnerOptions): Observable<DashboardQueryRunnerWorkerResult> {\n if (!this.canWork(options)) {\n return emptyResult();\n }\n\n const { dashboard } = options;\n const fetchData: () => Promise<RuleNamespace[]> = async () => {\n const promRules = await dispatch(\n alertRuleApi.endpoints.prometheusRuleNamespaces.initiate(\n {\n ruleSourceName: GRAFANA_RULES_SOURCE_NAME,\n dashboardUid: dashboard.uid,\n },\n { forceRefetch: true }\n )\n );\n return promRules.data;\n };\n\n const res: Observable<PromRuleGroupDTO[]> = from(fetchData()).pipe(\n map((namespaces: RuleNamespace[]) => ungroupRulesByFileName(namespaces))\n );\n\n return res.pipe(\n map((groups: PromRuleGroupDTO[]) => {\n this.hasAlertRules[dashboard.uid] = false;\n const panelIdToAlertState: Record<number, AlertStateInfo> = {};\n groups.forEach((group) =>\n group.rules.forEach((rule) => {\n if (prometheusRuleType.alertingRule(rule) && rule.annotations && rule.annotations[Annotation.panelID]) {\n this.hasAlertRules[dashboard.uid] = true;\n const panelId = Number(rule.annotations[Annotation.panelID]);\n const state = promAlertStateToAlertState(rule.state);\n\n // there can be multiple alerts per panel, so we make sure we get the most severe state:\n // alerting > pending > ok\n if (!panelIdToAlertState[panelId]) {\n panelIdToAlertState[panelId] = {\n state,\n id: Object.keys(panelIdToAlertState).length,\n panelId,\n dashboardId: dashboard.id,\n };\n } else if (state === AlertState.Alerting && panelIdToAlertState[panelId].state !== AlertState.Alerting) {\n panelIdToAlertState[panelId].state = AlertState.Alerting;\n } else if (\n state === AlertState.Pending &&\n panelIdToAlertState[panelId].state !== AlertState.Alerting &&\n panelIdToAlertState[panelId].state !== AlertState.Pending\n ) {\n panelIdToAlertState[panelId].state = AlertState.Pending;\n }\n }\n })\n );\n return { alertStates: Object.values(panelIdToAlertState), annotations: [] };\n }),\n catchError(handleDashboardQueryRunnerWorkerError)\n );\n }\n}\n","import { merge, Observable, ReplaySubject, Subject, Subscription, timer, Unsubscribable } from 'rxjs';\nimport { finalize, map, mapTo, mergeAll, reduce, share, takeUntil } from 'rxjs/operators';\n\nimport { AnnotationQuery } from '@grafana/data';\nimport { RefreshEvent } from '@grafana/runtime';\nimport { dedupAnnotations } from 'app/features/annotations/events_processing';\n\nimport { getTimeSrv, TimeSrv } from '../../../dashboard/services/TimeSrv';\nimport { DashboardModel } from '../../../dashboard/state/DashboardModel';\n\nimport { AnnotationsWorker } from './AnnotationsWorker';\nimport { SnapshotWorker } from './SnapshotWorker';\nimport { UnifiedAlertStatesWorker } from './UnifiedAlertStatesWorker';\nimport {\n DashboardQueryRunner,\n DashboardQueryRunnerOptions,\n DashboardQueryRunnerResult,\n DashboardQueryRunnerWorker,\n DashboardQueryRunnerWorkerResult,\n} from './types';\nimport { getAnnotationsByPanelId } from './utils';\n\nclass DashboardQueryRunnerImpl implements DashboardQueryRunner {\n private readonly results: ReplaySubject<DashboardQueryRunnerWorkerResult>;\n private readonly runs: Subject<DashboardQueryRunnerOptions>;\n private readonly cancellationStream: Subject<AnnotationQuery>;\n private readonly runsSubscription: Unsubscribable;\n private readonly eventsSubscription: Unsubscribable;\n\n constructor(\n private readonly dashboard: DashboardModel,\n private readonly timeSrv: TimeSrv = getTimeSrv(),\n private readonly workers: DashboardQueryRunnerWorker[] = [\n new UnifiedAlertStatesWorker(),\n new SnapshotWorker(),\n new AnnotationsWorker(),\n ]\n ) {\n this.run = this.run.bind(this);\n this.getResult = this.getResult.bind(this);\n this.cancel = this.cancel.bind(this);\n this.destroy = this.destroy.bind(this);\n this.executeRun = this.executeRun.bind(this);\n this.results = new ReplaySubject<DashboardQueryRunnerWorkerResult>(1);\n this.runs = new Subject<DashboardQueryRunnerOptions>();\n this.cancellationStream = new Subject<AnnotationQuery>();\n this.runsSubscription = this.runs.subscribe((options) => this.executeRun(options));\n this.eventsSubscription = dashboard.events.subscribe(RefreshEvent, (event) => {\n this.run({ dashboard: this.dashboard, range: this.timeSrv.timeRange() });\n });\n }\n\n run(options: DashboardQueryRunnerOptions): void {\n this.runs.next(options);\n }\n\n getResult(panelId?: number): Observable<DashboardQueryRunnerResult> {\n return this.results.asObservable().pipe(\n map((result) => {\n const annotations = getAnnotationsByPanelId(result.annotations, panelId);\n const alertState = result.alertStates.find((res) => Boolean(panelId) && res.panelId === panelId);\n return { annotations: dedupAnnotations(annotations), alertState };\n })\n );\n }\n\n private executeRun(options: DashboardQueryRunnerOptions) {\n const workers = this.workers.filter((w) => w.canWork(options));\n const workerObservables = workers.map((w) => w.work(options));\n\n const resultSubscription = new Subscription();\n const resultObservable = merge(workerObservables).pipe(\n takeUntil(this.runs.asObservable()),\n mergeAll(),\n reduce((acc: DashboardQueryRunnerWorkerResult, value: DashboardQueryRunnerWorkerResult) => {\n // console.log({ acc: acc.annotations.length, value: value.annotations.length });\n // should we use scan or reduce here\n // reduce will only emit when all observables are completed\n // scan will emit when any observable is completed\n // choosing reduce to minimize re-renders\n acc.annotations = acc.annotations.concat(value.annotations);\n acc.alertStates = acc.alertStates.concat(value.alertStates);\n return acc;\n }),\n finalize(() => {\n resultSubscription.unsubscribe(); // important to avoid memory leaks\n }),\n share() // shared because we're using it in takeUntil below\n );\n\n const timerSubscription = new Subscription();\n const timerObservable = timer(200).pipe(\n mapTo({ annotations: [], alertStates: [] }),\n takeUntil(resultObservable),\n finalize(() => {\n timerSubscription.unsubscribe(); // important to avoid memory leaks\n })\n );\n\n // if the result takes longer than 200ms we just publish an empty result\n timerSubscription.add(\n timerObservable.subscribe((result) => {\n this.results.next(result);\n })\n );\n\n resultSubscription.add(\n resultObservable.subscribe((result: DashboardQueryRunnerWorkerResult) => {\n this.results.next(result);\n })\n );\n }\n\n cancel(annotation: AnnotationQuery): void {\n this.cancellationStream.next(annotation);\n }\n\n cancellations(): Observable<AnnotationQuery> {\n return this.cancellationStream.asObservable().pipe(share());\n }\n\n destroy(): void {\n this.results.complete();\n this.runs.complete();\n this.cancellationStream.complete();\n this.runsSubscription.unsubscribe();\n this.eventsSubscription.unsubscribe();\n }\n}\n\nlet dashboardQueryRunner: DashboardQueryRunner | undefined;\n\nfunction setDashboardQueryRunner(runner: DashboardQueryRunner): void {\n if (dashboardQueryRunner) {\n dashboardQueryRunner.destroy();\n }\n dashboardQueryRunner = runner;\n}\n\nexport function getDashboardQueryRunner(): DashboardQueryRunner {\n if (!dashboardQueryRunner) {\n throw new Error('getDashboardQueryRunner can only be used after Grafana instance has started.');\n }\n return dashboardQueryRunner;\n}\n\nexport interface DashboardQueryRunnerFactoryArgs {\n dashboard: DashboardModel;\n timeSrv?: TimeSrv;\n workers?: DashboardQueryRunnerWorker[];\n}\n\nexport type DashboardQueryRunnerFactory = (args: DashboardQueryRunnerFactoryArgs) => DashboardQueryRunner;\n\nlet factory: DashboardQueryRunnerFactory | undefined;\n\nexport function setDashboardQueryRunnerFactory(instance: DashboardQueryRunnerFactory) {\n factory = instance;\n}\n\nexport function createDashboardQueryRunner(args: DashboardQueryRunnerFactoryArgs): DashboardQueryRunner {\n if (!factory) {\n factory = ({ dashboard, timeSrv, workers }: DashboardQueryRunnerFactoryArgs) =>\n new DashboardQueryRunnerImpl(dashboard, timeSrv, workers);\n }\n\n const runner = factory(args);\n setDashboardQueryRunner(runner);\n return runner;\n}\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Legend, useStyles2 } from '@grafana/ui';\n\nexport function VariableLegend({ className, ...rest }: Parameters<typeof Legend>['0']) {\n const styles = useStyles2(getStyles);\n return <Legend {...rest} className={cx(styles.legend, className)} />;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n legend: css({\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(1),\n }),\n };\n}\n","import { useMemo } from 'react';\n\nimport { StandardEditorProps, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { LineStyle } from '@grafana/schema';\nimport { IconButton, RadioButtonGroup, Select, Stack } from '@grafana/ui';\n\ntype LineFill = 'solid' | 'dash' | 'dot';\n\nconst dashOptions: Array<SelectableValue<string>> = [\n '10, 10', // default\n '10, 15',\n '10, 20',\n '10, 25',\n '10, 30',\n '10, 40',\n '15, 10',\n '20, 10',\n '25, 10',\n '30, 10',\n '40, 10',\n '50, 10',\n '5, 10',\n '30, 3, 3',\n].map((txt) => ({\n label: txt,\n value: txt,\n}));\n\nconst dotOptions: Array<SelectableValue<string>> = [\n '0, 10', // default\n '0, 20',\n '0, 30',\n '0, 40',\n '0, 3, 3',\n].map((txt) => ({\n label: txt,\n value: txt,\n}));\n\ntype Props = StandardEditorProps<LineStyle, unknown>;\n\nexport const LineStyleEditor = ({ value, onChange }: Props) => {\n const lineFillOptions: Array<SelectableValue<LineFill>> = [\n {\n label: t('timeseries.line-style-editor.line-fill-options.label-solid', 'Solid'),\n value: 'solid',\n },\n {\n label: t('timeseries.line-style-editor.line-fill-options.label-dash', 'Dash'),\n value: 'dash',\n },\n {\n label: t('timeseries.line-style-editor.line-fill-options.label-dots', 'Dots'),\n value: 'dot',\n },\n ];\n const options = useMemo(() => (value?.fill === 'dash' ? dashOptions : dotOptions), [value]);\n const current = useMemo(() => {\n if (!value?.dash?.length) {\n return options[0];\n }\n const str = value.dash?.join(', ');\n const val = options.find((o) => o.value === str);\n if (!val) {\n return {\n label: str,\n value: str,\n };\n }\n return val;\n }, [value, options]);\n\n return (\n <Stack wrap={true} alignItems=\"flex-end\">\n <RadioButtonGroup\n value={value?.fill || 'solid'}\n options={lineFillOptions}\n onChange={(v) => {\n let dash: number[] | undefined = undefined;\n if (v === 'dot') {\n dash = parseText(dotOptions[0].value!);\n } else if (v === 'dash') {\n dash = parseText(dashOptions[0].value!);\n }\n onChange({\n ...value,\n fill: v!,\n dash,\n });\n }}\n />\n {value?.fill && value?.fill !== 'solid' && (\n <>\n <Select\n allowCustomValue={true}\n options={options}\n value={current}\n width={20}\n onChange={(v) => {\n onChange({\n ...value,\n dash: parseText(v.value ?? ''),\n });\n }}\n formatCreateLabel={(t) => `Segments: ${parseText(t).join(', ')}`}\n />\n <div>\n \n <a\n title={t(\n 'timeseries.line-style-editor.title-the-input-expects-a-segment-list',\n 'The input expects a segment list'\n )}\n href=\"https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Parameters\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <IconButton name=\"question-circle\" tooltip={t('timeseries.line-style-editor.tooltip-help', 'Help')} />\n </a>\n </div>\n </>\n )}\n </Stack>\n );\n};\n\nfunction parseText(txt: string): number[] {\n const segments: number[] = [];\n for (const s of txt.split(/(?:,| )+/)) {\n const num = Number.parseInt(s, 10);\n if (!isNaN(num)) {\n segments.push(num);\n }\n }\n return segments;\n}\n","import { DataLink, LinkModel } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport {\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n VariableDependencyConfig,\n VizPanel,\n} from '@grafana/scenes';\nimport { Dropdown, Icon, Menu, PanelChrome, ToolbarButton } from '@grafana/ui';\n\nimport { getPanelLinks } from './PanelMenuBehavior';\n\ninterface VizPanelLinksState extends SceneObjectState {\n rawLinks?: DataLink[];\n links?: LinkModel[];\n menu: VizPanelLinksMenu;\n}\n\nexport class VizPanelLinks extends SceneObjectBase<VizPanelLinksState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n onAnyVariableChanged: () => {\n if (this.state.rawLinks && this.state.rawLinks.length > 0) {\n this.forceRender();\n }\n },\n });\n\n static Component = VizPanelLinksRenderer;\n}\n\nfunction VizPanelLinksRenderer({ model }: SceneComponentProps<VizPanelLinks>) {\n const { menu, rawLinks } = model.useState();\n sceneGraph.getTimeRange(model).useState();\n\n if (!(model.parent instanceof VizPanel)) {\n throw new Error('VizPanelLinks must be a child of VizPanel');\n }\n\n if (!rawLinks || rawLinks.length === 0) {\n return null;\n }\n\n if (rawLinks.length === 1) {\n const link = getPanelLinks(model.parent)[0];\n return (\n <PanelChrome.TitleItem href={link.href} onClick={link.onClick} target={link.target} title={link.title}>\n <Icon name=\"external-link-alt\" size=\"md\" />\n </PanelChrome.TitleItem>\n );\n }\n\n return (\n <Dropdown\n overlay={() => {\n return <menu.Component model={menu} key={menu.state.key} />;\n }}\n >\n <ToolbarButton\n icon=\"external-link-alt\"\n iconSize=\"md\"\n aria-label={t('dashboard-scene.viz-panel-links-renderer.aria-label-panel-links', 'Panel links')}\n />\n </Dropdown>\n );\n}\n\nexport class VizPanelLinksMenu extends SceneObjectBase<Omit<VizPanelLinksState, 'menu' | 'rawLinks'>> {\n static Component = VizPanelLinksMenuRenderer;\n}\n\nfunction VizPanelLinksMenuRenderer({ model }: SceneComponentProps<VizPanelLinks>) {\n const { links } = model.useState();\n\n if (!links) {\n return null;\n }\n\n return (\n <Menu>\n {links?.map((link, idx) => {\n return <Menu.Item key={idx} label={link.title} url={link.href} target={link.target} onClick={link.onClick} />;\n })}\n </Menu>\n );\n}\n","import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\nimport { RgbaStringColorPicker } from 'react-colorful';\nimport { useThrottleFn } from 'react-use';\nimport tinycolor from 'tinycolor2';\n\nimport { GrafanaTheme2, colorManipulator } from '@grafana/data';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\n\nimport ColorInput from './ColorInput';\n\nexport interface SpectrumPaletteProps {\n color: string;\n onChange: (color: string) => void;\n}\n\nconst SpectrumPalette = ({ color, onChange }: SpectrumPaletteProps) => {\n const [currentColor, setColor] = useState(color);\n\n useThrottleFn(\n (c) => {\n onChange(colorManipulator.asHexString(theme.visualization.getColorByName(c)));\n },\n 500,\n [currentColor]\n );\n\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n const rgbaString = useMemo(() => {\n return currentColor.startsWith('rgba')\n ? currentColor\n : tinycolor(theme.visualization.getColorByName(color)).toRgbString();\n }, [currentColor, theme, color]);\n\n return (\n <div className={styles.wrapper}>\n <RgbaStringColorPicker className={styles.root} color={rgbaString} onChange={setColor} />\n <ColorInput theme={theme} color={rgbaString} onChange={setColor} className={styles.colorInput} />\n </div>\n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n flexGrow: 1,\n }),\n root: css({\n '&.react-colorful': {\n width: 'auto',\n },\n\n '.react-colorful': {\n '&__saturation': {\n borderRadius: `${theme.shape.radius.default} ${theme.shape.radius.default} 0 0`,\n },\n '&__alpha': {\n borderRadius: `0 0 ${theme.shape.radius.default} ${theme.shape.radius.default}`,\n },\n '&__alpha, &__hue': {\n height: theme.spacing(2),\n position: 'relative',\n },\n '&__pointer': {\n height: theme.spacing(2),\n width: theme.spacing(2),\n },\n },\n }),\n colorInput: css({\n marginTop: theme.spacing(2),\n }),\n});\n\nexport default SpectrumPalette;\n","import classNames from 'classnames';\nimport { PureComponent, ChangeEvent } from 'react';\nimport * as React from 'react';\n\nimport { ValidationEvents, ValidationRule } from '../../../../types/input';\nimport { validate, EventsWithValidation, hasValidationEvent } from '../../../../utils/validate';\n\n/** @deprecated Please use the `Input` component, which does not require this enum. */\nexport enum LegacyInputStatus {\n Invalid = 'invalid',\n Valid = 'valid',\n}\n\nexport interface Props extends React.HTMLProps<HTMLInputElement> {\n validationEvents?: ValidationEvents;\n hideErrorMessage?: boolean;\n inputRef?: React.LegacyRef<HTMLInputElement>;\n\n // Override event props and append status as argument\n onBlur?: (event: React.FocusEvent<HTMLInputElement>, status?: LegacyInputStatus) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>, status?: LegacyInputStatus) => void;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, status?: LegacyInputStatus) => void;\n}\n\ninterface State {\n error: string | null;\n}\n\n/** @deprecated Please use the `Input` component. {@link https://developers.grafana.com/ui/latest/index.html?path=/story/forms-input--simple See Storybook for example.} */\nexport class Input extends PureComponent<Props, State> {\n static defaultProps = {\n className: '',\n };\n\n state: State = {\n error: null,\n };\n\n get status() {\n return this.state.error ? LegacyInputStatus.Invalid : LegacyInputStatus.Valid;\n }\n\n get isInvalid() {\n return this.status === LegacyInputStatus.Invalid;\n }\n\n validatorAsync = (validationRules: ValidationRule[]) => {\n return (evt: ChangeEvent<HTMLInputElement>) => {\n const errors = validate(evt.target.value, validationRules);\n this.setState((prevState) => {\n return { ...prevState, error: errors ? errors[0] : null };\n });\n };\n };\n\n populateEventPropsWithStatus = (restProps: any, validationEvents: ValidationEvents | undefined) => {\n const inputElementProps = { ...restProps };\n if (!validationEvents) {\n return inputElementProps;\n }\n Object.keys(EventsWithValidation).forEach((eventName) => {\n if (hasValidationEvent(eventName as EventsWithValidation, validationEvents) || restProps[eventName]) {\n inputElementProps[eventName] = async (evt: ChangeEvent<HTMLInputElement>) => {\n evt.persist(); // Needed for async. https://reactjs.org/docs/events.html#event-pooling\n if (hasValidationEvent(eventName as EventsWithValidation, validationEvents)) {\n await this.validatorAsync(validationEvents[eventName]).apply(this, [evt]);\n }\n if (restProps[eventName]) {\n restProps[eventName].apply(null, [evt, this.status]);\n }\n };\n }\n });\n return inputElementProps;\n };\n\n render() {\n const { validationEvents, className, hideErrorMessage, inputRef, ...restProps } = this.props;\n const { error } = this.state;\n const inputClassName = classNames('gf-form-input', { invalid: this.isInvalid }, className);\n const inputElementProps = this.populateEventPropsWithStatus(restProps, validationEvents);\n\n return (\n <div style={{ flexGrow: 1 }}>\n <input {...inputElementProps} ref={inputRef} className={inputClassName} />\n {error && !hideErrorMessage && <span>{error}</span>}\n </div>\n );\n }\n}\n","import { capitalize, lowerCase } from 'lodash';\n\nimport { t } from '@grafana/i18n';\nimport { SceneObject } from '@grafana/scenes';\n\nimport { AutoGridItem } from '../scene/layout-auto-grid/AutoGridItem';\nimport { RowItem } from '../scene/layout-rows/RowItem';\nimport { TabItem } from '../scene/layout-tabs/TabItem';\n\nexport type ObjectsWithConditionalRendering = 'panel' | 'row' | 'tab' | 'element';\n\nconst translatedObjectTypes = {\n get panel() {\n return t('dashboard.edit-pane.elements.panel', 'Panel');\n },\n get row() {\n return t('dashboard.edit-pane.elements.row', 'Row');\n },\n get tab() {\n return t('dashboard.edit-pane.elements.tab', 'Tab');\n },\n get element() {\n return t('dashboard.edit-pane.elements.element', 'Element');\n },\n} as const;\n\nconst translatedObjectTypesLower: Record<ObjectsWithConditionalRendering, string> = {\n get panel() {\n return lowerCase(t('dashboard.edit-pane.elements.panel', 'Panel'));\n },\n get row() {\n return lowerCase(t('dashboard.edit-pane.elements.row', 'Row'));\n },\n get tab() {\n return lowerCase(t('dashboard.edit-pane.elements.tab', 'Tab'));\n },\n get element() {\n return lowerCase(t('dashboard.edit-pane.elements.element', 'Element'));\n },\n} as const;\n\nexport function getTranslatedObjectType(type: ObjectsWithConditionalRendering): string {\n return translatedObjectTypes[type] ?? capitalize(type);\n}\n\nexport function getLowerTranslatedObjectType(type: ObjectsWithConditionalRendering): string {\n return translatedObjectTypesLower[type] ?? type;\n}\n\nexport function extractObjectType(object: SceneObject | undefined): ObjectsWithConditionalRendering {\n if (!object) {\n return 'element';\n } else if (object instanceof AutoGridItem) {\n return 'panel';\n } else if (object instanceof RowItem) {\n return 'row';\n } else if (object instanceof TabItem) {\n return 'tab';\n }\n\n return 'element';\n}\n","import { css, cx } from '@emotion/css';\nimport { HTMLProps, useCallback } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles, getMouseFocusStyles } from '../../themes/mixins';\n\nimport { getLabelStyles } from './Label';\n\nexport interface CheckboxProps extends Omit<HTMLProps<HTMLInputElement>, 'value'> {\n /** Label to display next to checkbox */\n label?: string;\n /** Description to display under the label */\n description?: string | React.ReactElement;\n /** Current value of the checkbox */\n value?: boolean;\n /** htmlValue allows to specify the input \"value\" attribute */\n htmlValue?: string | number;\n /** Sets the checkbox into a \"mixed\" state */\n indeterminate?: boolean;\n /** Show an invalid state around the input */\n invalid?: boolean;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-checkbox--docs\n */\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n { label, description, value, htmlValue, onChange, disabled, className, indeterminate, invalid, ...inputProps },\n ref\n ) => {\n const handleOnChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(e);\n }\n },\n [onChange]\n );\n const styles = useStyles2(getCheckboxStyles, invalid);\n\n return (\n <label className={cx(styles.wrapper, className)}>\n <div className={styles.checkboxWrapper}>\n <input\n type=\"checkbox\"\n className={cx(styles.input, indeterminate && styles.inputIndeterminate)}\n checked={value}\n disabled={disabled}\n onChange={handleOnChange}\n value={htmlValue}\n {...inputProps}\n ref={(element) => {\n if (element && indeterminate) {\n element.indeterminate = true;\n }\n\n // we have to manually assign the ref since we need to modify the indeterminate property\n if (ref) {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n ref.current = element;\n }\n }\n }}\n />\n <span className={styles.checkmark} />\n </div>\n {label && <span className={styles.label}>{label}</span>}\n {description && <span className={styles.description}>{description}</span>}\n </label>\n );\n }\n);\n\nexport const getCheckboxStyles = (theme: GrafanaTheme2, invalid = false) => {\n const labelStyles = getLabelStyles(theme);\n const checkboxSize = 2;\n const labelPadding = 1;\n\n const getBorderColor = (color: string) => {\n return invalid ? theme.colors.error.border : color;\n };\n\n return {\n wrapper: css({\n display: 'inline-grid',\n alignItems: 'center',\n columnGap: theme.spacing(labelPadding),\n // gridAutoRows is needed to prevent https://github.com/grafana/grafana/issues/68570 in safari\n gridAutoRows: 'max-content',\n position: 'relative',\n verticalAlign: 'middle',\n }),\n input: css({\n position: 'absolute',\n zIndex: 1,\n top: 0,\n left: 0,\n width: '100% !important', // global styles unset this\n height: '100%',\n opacity: 0,\n\n '&:focus + span, &:focus-visible + span': getFocusStyles(theme),\n\n '&:focus:not(:focus-visible) + span': getMouseFocusStyles(theme),\n\n /**\n * Using adjacent sibling selector to style checked state.\n * Primarily to limit the classes necessary to use when these classes will be used\n * for angular components styling\n * */\n '&:checked + span': {\n background: theme.colors.primary.main,\n border: `1px solid ${getBorderColor(theme.colors.primary.main)}`,\n\n '&:hover': {\n background: theme.colors.primary.shade,\n },\n\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n left: theme.spacing(0.5),\n top: 0,\n width: theme.spacing(0.75),\n height: theme.spacing(1.5),\n border: `solid ${theme.colors.primary.contrastText}`,\n borderWidth: '0 3px 3px 0',\n transform: 'rotate(45deg)',\n },\n },\n\n '&:disabled + span': {\n backgroundColor: theme.colors.action.disabledBackground,\n cursor: 'not-allowed',\n border: `1px solid ${getBorderColor(theme.colors.action.disabledBackground)}`,\n\n '&:hover': {\n backgroundColor: theme.colors.action.disabledBackground,\n },\n\n '&:after': {\n borderColor: theme.colors.action.disabledText,\n },\n },\n }),\n\n inputIndeterminate: css({\n '&:indeterminate + span': {\n border: `1px solid ${getBorderColor(theme.colors.primary.main)}`,\n background: theme.colors.primary.main,\n\n '&:hover': {\n background: theme.colors.primary.shade,\n },\n\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n left: '2px',\n right: '2px',\n top: 'calc(50% - 1.5px)',\n height: '3px',\n border: `1.5px solid ${theme.colors.primary.contrastText}`,\n backgroundColor: theme.colors.primary.contrastText,\n width: 'auto',\n transform: 'none',\n },\n },\n \"&:disabled[aria-checked='mixed'] + span\": {\n backgroundColor: theme.colors.action.disabledBackground,\n border: `1px solid ${getBorderColor(theme.colors.error.transparent)}`,\n\n '&:after': {\n borderColor: theme.colors.action.disabledText,\n },\n },\n }),\n\n checkboxWrapper: css({\n display: 'flex',\n alignItems: 'center',\n gridColumnStart: 1,\n gridRowStart: 1,\n }),\n checkmark: css({\n position: 'relative' /* Checkbox should be layered on top of the invisible input so it recieves :hover */,\n zIndex: 2,\n display: 'inline-block',\n width: theme.spacing(checkboxSize),\n height: theme.spacing(checkboxSize),\n borderRadius: theme.shape.radius.sm,\n background: theme.components.input.background,\n border: `1px solid ${getBorderColor(theme.components.input.borderColor)}`,\n\n '&:hover': {\n cursor: 'pointer',\n borderColor: getBorderColor(theme.components.input.borderHover),\n },\n }),\n label: cx(\n labelStyles.label,\n css({\n gridColumnStart: 2,\n gridRowStart: 1,\n position: 'relative',\n zIndex: 2,\n cursor: 'pointer',\n maxWidth: 'fit-content',\n lineHeight: theme.typography.bodySmall.lineHeight,\n marginBottom: 0,\n })\n ),\n description: cx(\n labelStyles.description,\n css({\n gridColumnStart: 2,\n gridRowStart: 2,\n lineHeight: theme.typography.bodySmall.lineHeight,\n marginTop: 0 /* The margin effectively comes from the top: -2px on the label above it */,\n // Enable interacting with description when checkbox is disabled\n zIndex: 1,\n })\n ),\n };\n};\n\nCheckbox.displayName = 'Checkbox';\n","import { css, cx } from '@emotion/css';\nimport { HTMLProps } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nenum Orientation {\n Horizontal,\n Vertical,\n}\ntype Spacing = 'none' | 'xs' | 'sm' | 'md' | 'lg';\ntype Justify = 'flex-start' | 'flex-end' | 'space-between' | 'center';\ntype Align = 'normal' | 'flex-start' | 'flex-end' | 'center';\n\nexport interface LayoutProps extends Omit<HTMLProps<HTMLDivElement>, 'align' | 'children' | 'wrap'> {\n children: React.ReactNode[] | React.ReactNode;\n orientation?: Orientation;\n spacing?: Spacing;\n justify?: Justify;\n align?: Align;\n width?: string;\n wrap?: boolean;\n}\n\nexport interface ContainerProps {\n padding?: Spacing;\n margin?: Spacing;\n grow?: number;\n shrink?: number;\n}\n\n/**\n * @deprecated use Stack component instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-deprecated-groups--docs\n */\nexport const Layout = ({\n children,\n orientation = Orientation.Horizontal,\n spacing = 'sm',\n justify = 'flex-start',\n align = 'normal',\n wrap = false,\n width = '100%',\n height = '100%',\n ...rest\n}: LayoutProps) => {\n const styles = useStyles2(getStyles, orientation, spacing, justify, align, wrap);\n\n return (\n <div className={styles.layout} style={{ width, height }} {...rest}>\n {React.Children.toArray(children)\n .filter(Boolean)\n .map((child, index) => {\n return (\n <div className={styles.childWrapper} key={index}>\n {child}\n </div>\n );\n })}\n </div>\n );\n};\n\n/**\n * @deprecated use Stack component instead\n */\nexport const HorizontalGroup = ({\n children,\n spacing,\n justify,\n align = 'center',\n wrap,\n width,\n height,\n}: Omit<LayoutProps, 'orientation'>) => (\n <Layout\n spacing={spacing}\n justify={justify}\n orientation={Orientation.Horizontal}\n align={align}\n width={width}\n height={height}\n wrap={wrap}\n >\n {children}\n </Layout>\n);\n\n/**\n * @deprecated use Stack component with the \"column\" direction instead\n */\nexport const VerticalGroup = ({\n children,\n spacing,\n justify,\n align,\n width,\n height,\n}: Omit<LayoutProps, 'orientation' | 'wrap'>) => (\n <Layout\n spacing={spacing}\n justify={justify}\n orientation={Orientation.Vertical}\n align={align}\n width={width}\n height={height}\n >\n {children}\n </Layout>\n);\n\nexport const Container = ({ children, padding, margin, grow, shrink }: React.PropsWithChildren<ContainerProps>) => {\n const styles = useStyles2(getContainerStyles, padding, margin);\n\n return (\n <div\n className={cx(\n styles.wrapper,\n grow !== undefined && css({ flexGrow: grow }),\n shrink !== undefined && css({ flexShrink: shrink })\n )}\n >\n {children}\n </div>\n );\n};\n\nconst getStyles = (\n theme: GrafanaTheme2,\n orientation: Orientation,\n spacing: Spacing,\n justify: Justify,\n align: Align,\n wrap: boolean\n) => {\n const finalSpacing = spacing !== 'none' ? theme.spacing(spacingToNumber[spacing]) : 0;\n\n // compensate for last row margin when wrapped, horizontal layout\n const marginCompensation =\n (orientation === Orientation.Horizontal && !wrap) || orientation === Orientation.Vertical ? 0 : `-${finalSpacing}`;\n\n const label = orientation === Orientation.Vertical ? 'vertical-group' : 'horizontal-group';\n\n return {\n layout: css({\n label: label,\n display: 'flex',\n flexDirection: orientation === Orientation.Vertical ? 'column' : 'row',\n flexWrap: wrap ? 'wrap' : 'nowrap',\n justifyContent: justify,\n alignItems: align,\n height: '100%',\n maxWidth: '100%',\n // compensate for last row margin when wrapped, horizontal layout\n marginBottom: marginCompensation,\n }),\n childWrapper: css({\n label: 'layoutChildrenWrapper',\n marginBottom: orientation === Orientation.Horizontal && !wrap ? 0 : finalSpacing,\n marginRight: orientation === Orientation.Horizontal ? finalSpacing : 0,\n display: 'flex',\n alignItems: align,\n\n '&:last-child': {\n marginBottom: orientation === Orientation.Vertical ? 0 : undefined,\n marginRight: orientation === Orientation.Horizontal ? 0 : undefined,\n },\n }),\n };\n};\n\nconst spacingToNumber: Record<Spacing, number> = {\n none: 0,\n xs: 0.5,\n sm: 1,\n md: 2,\n lg: 3,\n};\n\nconst getContainerStyles = (theme: GrafanaTheme2, padding?: Spacing, margin?: Spacing) => {\n const paddingSize = (padding && padding !== 'none' && theme.spacing(spacingToNumber[padding])) || 0;\n const marginSize = (margin && margin !== 'none' && theme.spacing(spacingToNumber[margin])) || 0;\n return {\n wrapper: css({\n label: 'container',\n margin: marginSize,\n padding: paddingSize,\n }),\n };\n};\n","import { DataHoverPayload } from '../events/common';\nimport { eventFactory } from '../events/eventFactory';\nimport { BusEventBase, BusEventWithPayload } from '../events/types';\n\nimport { DataFrame } from './dataFrame';\nimport { DataQueryError, DataQueryResponseData } from './datasource';\nimport { AngularPanelMenuItem } from './panel';\n\nexport type AlertPayload = [string, string?, string?];\nexport type AlertErrorPayload = [string, (string | Error)?, string?];\n\nexport const AppEvents = {\n alertSuccess: eventFactory<AlertPayload>('alert-success'),\n alertWarning: eventFactory<AlertPayload>('alert-warning'),\n alertError: eventFactory<AlertErrorPayload>('alert-error'),\n alertInfo: eventFactory<AlertPayload>('alert-info'),\n};\n\nexport const PanelEvents = {\n refresh: eventFactory('refresh'),\n componentDidMount: eventFactory('component-did-mount'),\n dataReceived: eventFactory<DataQueryResponseData[]>('data-received'),\n dataError: eventFactory<DataQueryError>('data-error'),\n dataFramesReceived: eventFactory<DataFrame[]>('data-frames-received'),\n dataSnapshotLoad: eventFactory<DataQueryResponseData[]>('data-snapshot-load'),\n editModeInitialized: eventFactory('init-edit-mode'),\n initPanelActions: eventFactory<AngularPanelMenuItem[]>('init-panel-actions'),\n initialized: eventFactory('panel-initialized'),\n panelTeardown: eventFactory('panel-teardown'),\n render: eventFactory<any>('render'),\n};\n\n/** @public */\nexport interface LegacyGraphHoverEventPayload extends DataHoverPayload {\n pos: any;\n panel: {\n id: number;\n };\n}\n\n/** @alpha */\nexport class LegacyGraphHoverEvent extends BusEventWithPayload<LegacyGraphHoverEventPayload> {\n static type = 'graph-hover';\n}\n\n/** @alpha */\nexport class LegacyGraphHoverClearEvent extends BusEventBase {\n static type = 'graph-hover-clear';\n payload: DataHoverPayload = { point: {} };\n}\n","export type UsePluginComponent<Props extends object = {}> = (componentId: string) => UsePluginComponentResult<Props>;\n\nexport type UsePluginComponentResult<Props = {}> = {\n component: React.ComponentType<Props> | undefined | null;\n isLoading: boolean;\n};\n\nlet singleton: UsePluginComponent | undefined;\n\nexport function setPluginComponentHook(hook: UsePluginComponent): void {\n // We allow overriding the registry in tests\n if (singleton && process.env.NODE_ENV !== 'test') {\n throw new Error('setPluginComponentHook() function should only be called once, when Grafana is starting.');\n }\n singleton = hook;\n}\n\nexport function usePluginComponent<Props extends object = {}>(componentId: string): UsePluginComponentResult<Props> {\n if (!singleton) {\n throw new Error('setPluginComponentHook(options) can only be used after the Grafana instance has started.');\n }\n return singleton(componentId) as UsePluginComponentResult<Props>;\n}\n","import { omit } from 'lodash';\nimport { map } from 'rxjs/operators';\n\nimport { MutableDataFrame } from '../../dataframe/MutableDataFrame';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\ninterface ValuePointer {\n key: string;\n index: number;\n}\n\nexport interface MergeTransformerOptions {}\n\nexport const mergeTransformer: DataTransformerInfo<MergeTransformerOptions> = {\n id: DataTransformerID.merge,\n name: 'Merge series/tables',\n description: 'Merges multiple series/tables into a single serie/table',\n defaultOptions: {},\n isApplicable: (data: DataFrame[]) => {\n return data.length > 1\n ? TransformationApplicabilityLevels.Applicable\n : TransformationApplicabilityLevels.NotApplicable;\n },\n isApplicableDescription: (data: DataFrame[]) => {\n return `The merge transformation requires at least 2 data series to work. There is currently ${data.length} data series.`;\n },\n operator: (options) => (source) =>\n source.pipe(\n map((dataFrames) => {\n if (!Array.isArray(dataFrames) || dataFrames.length <= 1) {\n return dataFrames;\n }\n\n const data = dataFrames.filter((frame) => frame.fields.length > 0);\n\n if (data.length === 0) {\n return [dataFrames[0]];\n }\n\n const fieldNames = new Set<string>();\n const fieldIndexByName: Record<string, Record<number, number>> = {};\n const fieldNamesForKey: string[] = [];\n const dataFrame = new MutableDataFrame({\n refId: `${DataTransformerID.merge}-${data.map((frame) => frame.refId).join('-')}`,\n fields: [],\n });\n\n for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n const frame = data[frameIndex];\n\n for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n const field = frame.fields[fieldIndex];\n\n if (!fieldNames.has(field.name)) {\n dataFrame.addField(copyFieldStructure(field));\n fieldNames.add(field.name);\n }\n\n fieldIndexByName[field.name] = fieldIndexByName[field.name] || {};\n fieldIndexByName[field.name][frameIndex] = fieldIndex;\n\n if (data.length - 1 !== frameIndex) {\n continue;\n }\n\n if (fieldExistsInAllFrames(fieldIndexByName, field, data)) {\n fieldNamesForKey.push(field.name);\n }\n }\n }\n\n if (fieldNamesForKey.length === 0) {\n return dataFrames;\n }\n\n const valuesByKey: Record<string, Array<Record<string, unknown>>> = {};\n const valuesInOrder: ValuePointer[] = [];\n const keyFactory = createKeyFactory(data, fieldIndexByName, fieldNamesForKey);\n const valueMapper = createValueMapper(data, fieldNames, fieldIndexByName);\n\n for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n const frame = data[frameIndex];\n\n for (let valueIndex = 0; valueIndex < frame.length; valueIndex++) {\n const key = keyFactory(frameIndex, valueIndex);\n const value = valueMapper(frameIndex, valueIndex);\n\n if (!Array.isArray(valuesByKey[key])) {\n valuesByKey[key] = [value];\n valuesInOrder.push(createPointer(key, valuesByKey));\n continue;\n }\n\n let valueWasMerged = false;\n\n valuesByKey[key] = valuesByKey[key].map((existing) => {\n if (!isMergable(existing, value)) {\n return existing;\n }\n valueWasMerged = true;\n return { ...existing, ...value };\n });\n\n if (!valueWasMerged) {\n valuesByKey[key].push(value);\n valuesInOrder.push(createPointer(key, valuesByKey));\n }\n }\n }\n\n for (const pointer of valuesInOrder) {\n const value = valuesByKey[pointer.key][pointer.index];\n\n if (value) {\n dataFrame.add(value);\n }\n }\n\n return [dataFrame];\n })\n ),\n};\n\nconst copyFieldStructure = (field: Field): Field => {\n return {\n ...omit(field, ['values', 'state', 'labels', 'config']),\n values: [],\n config: {\n ...omit(field.config, 'displayName'),\n },\n };\n};\n\nconst createKeyFactory = (\n data: DataFrame[],\n fieldPointerByName: Record<string, Record<string, number>>,\n keyFieldNames: string[]\n) => {\n const factoryIndex = keyFieldNames.reduce((index: Record<string, number[]>, fieldName) => {\n return Object.keys(fieldPointerByName[fieldName]).reduce((index: Record<string, number[]>, frameIndex) => {\n index[frameIndex] = index[frameIndex] || [];\n index[frameIndex].push(fieldPointerByName[fieldName][frameIndex]);\n return index;\n }, index);\n }, {});\n\n return (frameIndex: number, valueIndex: number): string => {\n return factoryIndex[frameIndex].reduce((key: string, fieldIndex: number) => {\n return key + data[frameIndex].fields[fieldIndex].values[valueIndex];\n }, '');\n };\n};\n\nconst createValueMapper = (\n data: DataFrame[],\n fieldByName: Set<string>,\n fieldIndexByName: Record<string, Record<number, number>>\n) => {\n return (frameIndex: number, valueIndex: number) => {\n const value: Record<string, unknown> = {};\n const fieldNames = Array.from(fieldByName);\n\n for (const fieldName of fieldNames) {\n const fieldIndexByFrameIndex = fieldIndexByName[fieldName];\n if (!fieldIndexByFrameIndex) {\n continue;\n }\n\n const fieldIndex = fieldIndexByFrameIndex[frameIndex];\n if (typeof fieldIndex !== 'number') {\n continue;\n }\n\n const frame = data[frameIndex];\n if (!frame || !frame.fields) {\n continue;\n }\n\n const field = frame.fields[fieldIndex];\n if (!field || !field.values) {\n continue;\n }\n\n value[fieldName] = field.values[valueIndex];\n }\n\n return value;\n };\n};\n\nconst isMergable = (existing: Record<string, unknown>, value: Record<string, unknown>): boolean => {\n let mergable = true;\n\n for (const prop in value) {\n if (typeof existing[prop] === 'undefined') {\n continue;\n }\n\n if (existing[prop] === null) {\n continue;\n }\n\n if (existing[prop] !== value[prop]) {\n mergable = false;\n break;\n }\n }\n\n return mergable;\n};\n\nconst fieldExistsInAllFrames = (\n fieldIndexByName: Record<string, Record<number, number>>,\n field: Field,\n data: DataFrame[]\n) => {\n return Object.keys(fieldIndexByName[field.name]).length === data.length;\n};\n\nconst createPointer = (key: string, valuesByKey: Record<string, Array<Record<string, unknown>>>): ValuePointer => {\n return {\n key,\n index: valuesByKey[key].length - 1,\n };\n};\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport * as React from 'react';\n\nimport { measureText } from '../../utils/measureText';\n\nimport { AutoSizeInputContext } from './AutoSizeInputContext';\nimport { Input, Props as InputProps } from './Input';\n\nexport interface Props extends InputProps {\n /** Sets the min-width to a multiple of 8px. Default value is 10*/\n minWidth?: number;\n /** Sets the max-width to a multiple of 8px.*/\n maxWidth?: number;\n /** onChange function that will be run on onBlur and onKeyPress with enter\n * @deprecated Use `onChange` instead and manage the value in the parent as a controlled input\n */\n onCommitChange?: (event: React.FormEvent<HTMLInputElement>) => void;\n\n /** @deprecated Use `value` and `onChange` instead to manage the value in the parent as a controlled input */\n defaultValue?: string | number | readonly string[];\n}\n\n/**\n * You can use it or regular text input. When used, AutoSizeInput resizes itself to the current content. For an array of data or tree-structured data, consider using `Combobox` or `Cascader` respectively.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-autosizeinput--docs\n */\nexport const AutoSizeInput = React.forwardRef<HTMLInputElement, Props>((props, ref) => {\n const {\n defaultValue = '',\n minWidth = 10,\n maxWidth,\n onCommitChange,\n onChange,\n onKeyDown,\n onBlur,\n value: controlledValue,\n placeholder,\n ...restProps\n } = props;\n const [inputState, setInputValue] = useControlledState(controlledValue, onChange);\n\n // This must use ?? instead of || so the default value is not used when the value is an empty string\n // typically from the user clearing the input\n const inputValue = inputState ?? defaultValue;\n\n // Update input width when `value`, `minWidth`, or `maxWidth` change\n const inputWidth = useMemo(() => {\n const displayValue = inputValue || placeholder || '';\n const valueString = typeof displayValue === 'string' ? displayValue : displayValue.toString();\n\n return getWidthFor(valueString, minWidth, maxWidth);\n }, [placeholder, inputValue, minWidth, maxWidth]);\n\n return (\n <AutoSizeInputContext.Provider value={true}>\n <Input\n data-testid=\"autosize-input\" // consumer should override default testid\n {...restProps}\n placeholder={placeholder}\n ref={ref}\n value={inputValue.toString()}\n onChange={(event) => {\n if (onChange) {\n onChange(event);\n }\n\n setInputValue(event.currentTarget.value);\n }}\n width={inputWidth}\n onBlur={(event) => {\n if (onBlur) {\n onBlur(event);\n } else if (onCommitChange) {\n onCommitChange(event);\n }\n }}\n onKeyDown={(event) => {\n if (onKeyDown) {\n onKeyDown(event);\n } else if (event.key === 'Enter' && onCommitChange) {\n onCommitChange(event);\n }\n }}\n />\n </AutoSizeInputContext.Provider>\n );\n});\n\nfunction getWidthFor(value: string, minWidth: number, maxWidth: number | undefined): number {\n if (!value) {\n return minWidth;\n }\n\n const extraSpace = 3;\n const realWidth = measureText(value.toString(), 14).width / 8 + extraSpace;\n\n if (minWidth && realWidth < minWidth) {\n return minWidth;\n }\n\n if (maxWidth && realWidth > maxWidth) {\n return maxWidth;\n }\n\n return realWidth;\n}\n\nAutoSizeInput.displayName = 'AutoSizeInput';\n\n/**\n * Hook to abstract away state management for controlled and uncontrolled inputs.\n * If the initial value is not undefined, then the value will be controlled by the parent\n * for the lifetime of the component and calls to setState will be ignored.\n */\nfunction useControlledState<T>(controlledValue: T, onChange: Function | undefined): [T, (newValue: T) => void] {\n const isControlledNow = controlledValue !== undefined && onChange !== undefined;\n const isControlledRef = useRef(isControlledNow); // set the initial value - we never change this\n\n const hasLoggedControlledWarning = useRef(false);\n if (isControlledNow !== isControlledRef.current && !hasLoggedControlledWarning.current) {\n console.warn(\n 'An AutoSizeInput is changing from an uncontrolled to a controlled input. If you want to control the input, the empty value should be an empty string.'\n );\n hasLoggedControlledWarning.current = true;\n }\n\n const [internalValue, setInternalValue] = React.useState(controlledValue);\n\n useEffect(() => {\n if (!isControlledRef.current) {\n setInternalValue(controlledValue);\n }\n }, [controlledValue]);\n\n const handleChange = useCallback((newValue: T) => {\n if (!isControlledRef.current) {\n setInternalValue(newValue);\n }\n }, []);\n\n const value = isControlledRef.current ? controlledValue : internalValue;\n\n return [value, handleChange];\n}\n","import { useMemo } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { sceneGraph, SceneGridRow, VizPanel } from '@grafana/scenes';\nimport { Alert, Input, TextLink } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport { RepeatRowSelect2 } from 'app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect';\nimport { SHARED_DASHBOARD_QUERY } from 'app/plugins/datasource/dashboard/constants';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\n\nimport { getDashboardSceneFor, getLayoutManagerFor, getQueryRunnerFor } from '../../utils/utils';\nimport { DashboardScene } from '../DashboardScene';\nimport { BulkActionElement } from '../types/BulkActionElement';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../types/EditableDashboardElement';\n\nimport { DefaultGridLayoutManager } from './DefaultGridLayoutManager';\nimport { RowRepeaterBehavior } from './RowRepeaterBehavior';\n\nfunction useEditPaneOptions(this: SceneGridRowEditableElement, row: SceneGridRow): OptionsPaneCategoryDescriptor[] {\n const rowOptions = useMemo(() => {\n return new OptionsPaneCategoryDescriptor({\n title: t('dashboard.default-layout.row-options.title', 'Row options'),\n id: 'row-options',\n isOpenDefault: true,\n }).addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.default-layout.row-options.form.title', 'Title'),\n id: 'row-options-title',\n render: () => <RowTitleInput row={row} />,\n })\n );\n }, [row]);\n\n const rowRepeatOptions = useMemo(() => {\n const dashboard = getDashboardSceneFor(row);\n\n return new OptionsPaneCategoryDescriptor({\n title: t('dashboard.default-layout.row-options.repeat.title', 'Repeat options'),\n id: 'row-repeat-options',\n isOpenDefault: true,\n }).addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.default-layout.row-options.repeat.variable.title', 'Variable'),\n id: 'row-options-repeat-variable',\n render: () => <RowRepeatSelect row={row} dashboard={dashboard} />,\n })\n );\n }, [row]);\n\n return [rowOptions, rowRepeatOptions];\n}\n\nexport class SceneGridRowEditableElement implements EditableDashboardElement, BulkActionElement {\n public readonly isEditableDashboardElement = true;\n\n public constructor(private _row: SceneGridRow) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return {\n typeName: t('dashboard.edit-pane.elements.row', 'Row'),\n instanceName: sceneGraph.interpolate(this._row, this._row.state.title, undefined, 'text'),\n icon: 'list-ul',\n };\n }\n\n public getOutlineChildren() {\n return this._row.state.children;\n }\n\n public useEditPaneOptions = useEditPaneOptions.bind(this, this._row);\n\n public onDelete() {\n const layoutManager = getLayoutManagerFor(this._row);\n\n if (layoutManager instanceof DefaultGridLayoutManager) {\n layoutManager.removeRow(this._row);\n }\n }\n}\n\nfunction RowTitleInput({ row, id }: { row: SceneGridRow; id?: string }) {\n const { title } = row.useState();\n\n return <Input id={id} value={title} onChange={(e) => row.setState({ title: e.currentTarget.value })} />;\n}\n\nfunction RowRepeatSelect({ row, dashboard, id }: { row: SceneGridRow; dashboard: DashboardScene; id?: string }) {\n const { $behaviors, children } = row.useState();\n let repeatBehavior = $behaviors?.find((b) => b instanceof RowRepeaterBehavior);\n const vizPanels = useMemo(\n () => children.reduce<VizPanel[]>((acc, child) => [...acc, ...sceneGraph.findDescendents(child, VizPanel)], []),\n [children]\n );\n\n const isAnyPanelUsingDashboardDS = vizPanels.some((vizPanel) => {\n const runner = getQueryRunnerFor(vizPanel);\n return (\n runner?.state.datasource?.uid === SHARED_DASHBOARD_QUERY ||\n (runner?.state.datasource?.uid === MIXED_DATASOURCE_NAME &&\n runner?.state.queries.some((query) => query.datasource?.uid === SHARED_DASHBOARD_QUERY))\n );\n });\n\n return (\n <>\n <RepeatRowSelect2\n id={id}\n sceneContext={dashboard}\n repeat={repeatBehavior?.state.variableName}\n onChange={(repeat) => {\n if (repeat) {\n repeatBehavior?.removeBehavior();\n repeatBehavior = new RowRepeaterBehavior({ variableName: repeat });\n row.setState({ $behaviors: [...(row.state.$behaviors ?? []), repeatBehavior] });\n } else {\n repeatBehavior?.removeBehavior();\n }\n }}\n />\n {isAnyPanelUsingDashboardDS ? (\n <Alert\n data-testid={selectors.pages.Dashboard.Rows.Repeated.ConfigSection.warningMessage}\n severity=\"warning\"\n title=\"\"\n topSpacing={3}\n bottomSpacing={0}\n >\n <p>\n <Trans i18nKey=\"dashboard.default-layout.row-options.form.repeat-for.warning.text\">\n Panels in this row use the {{ SHARED_DASHBOARD_QUERY }} data source. These panels will reference the panel\n in the original row, not the ones in the repeated rows.\n </Trans>\n </p>\n <TextLink\n external\n href={\n 'https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/create-dashboard/#configure-repeating-rows'\n }\n >\n <Trans i18nKey=\"dashboard.default-layout.row-options.form.repeat-for.learn-more\">Learn more</Trans>\n </TextLink>\n </Alert>\n ) : undefined}\n </>\n );\n}\n","import { ReactNode } from 'react';\n\nimport { IconName } from '@grafana/data';\nimport { SceneObject } from '@grafana/scenes';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\n\n/**\n * Interface for elements that have options\n */\nexport interface EditableDashboardElement {\n /**\n * Marks this object as an element that can be selected and edited directly on the canvas\n */\n isEditableDashboardElement: true;\n\n /** A descriptor used by editing pane */\n getEditableElementInfo(): EditableDashboardElementInfo;\n\n /**\n * Hook that returns edit pane options\n */\n useEditPaneOptions(isNewElement: boolean): OptionsPaneCategoryDescriptor[];\n\n /**\n * Panel Actions\n **/\n renderActions?(): ReactNode;\n\n /**\n * Supports delete action\n */\n onDelete?(): void;\n\n /**\n * Should confirm delete action\n */\n onConfirmDelete?(): void;\n\n /**\n * Supports duplicate action\n */\n onDuplicate?(): void;\n\n /**\n * Supports copy action\n */\n onCopy?(): void;\n\n /**\n * creates a new multi-selection element from a list of selected items\n */\n createMultiSelectedElement?(elements: this[]): EditableDashboardElement;\n\n /**\n * scroll element into view (when selected from outline)\n */\n scrollIntoView?(): void;\n\n /**\n * Used to sync row collapsed state with outline\n */\n getCollapsedState?(): boolean;\n\n /**\n * Used to sync row collapsed state with outline\n */\n setCollapsedState?(collapsed: boolean): void;\n\n /**\n * Used to change name from outline\n */\n onChangeName?(name: string): { errorMessage?: string } | void;\n\n /**\n * Container objects can have children\n */\n getOutlineChildren?(): SceneObject[];\n}\n\nexport interface EditableDashboardElementInfo {\n instanceName: string;\n typeName: string;\n icon: IconName;\n isHidden?: boolean;\n}\n\nexport function isEditableDashboardElement(obj: object): obj is EditableDashboardElement {\n return 'isEditableDashboardElement' in obj;\n}\n","import { useId, useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { LocalValueVariable } from '@grafana/scenes';\nimport { Box, Stack } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../../scene/types/EditableDashboardElement';\n\nfunction useEditPaneOptions(this: LocalVariableEditableElement): OptionsPaneCategoryDescriptor[] {\n const variable = this.variable;\n const localVariableCategoryId = useId();\n const localVariableId = useId();\n\n return useMemo(() => {\n const category = new OptionsPaneCategoryDescriptor({\n title: '',\n id: localVariableCategoryId,\n });\n\n category.addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: localVariableId,\n skipField: true,\n render: () => {\n return (\n <Box paddingBottom={1}>\n <Stack>\n <Stack>\n <span>${variable.state.name}</span>\n <span>=</span>\n <span>{variable.getValueText()}</span>\n </Stack>\n </Stack>\n </Box>\n );\n },\n })\n );\n\n return [category];\n }, [localVariableCategoryId, localVariableId, variable]);\n}\n\nexport class LocalVariableEditableElement implements EditableDashboardElement {\n public readonly isEditableDashboardElement = true;\n\n public constructor(public variable: LocalValueVariable) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return {\n typeName: t('dashboard.edit-pane.elements.local-variable', 'Local variable'),\n icon: 'dollar-alt',\n instanceName: ` $${this.variable.state.name} = ${this.variable.getValueText!()}`,\n isHidden: true,\n };\n }\n\n public useEditPaneOptions = useEditPaneOptions.bind(this);\n}\n","import { useCallback, useId, useMemo, useRef } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { MultiValueVariable, SceneVariableValueChangedEvent } from '@grafana/scenes';\nimport { Input, Switch } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nexport function useVariableSelectionOptionsCategory(variable: MultiValueVariable): OptionsPaneCategoryDescriptor {\n const multiValueId = useId();\n const includeAllId = useId();\n const customAllValueId = useId();\n const allowCustomId = useId();\n\n return useMemo(() => {\n return new OptionsPaneCategoryDescriptor({\n title: t('dashboard.edit-pane.variable.selection-options.category', 'Selection options'),\n id: 'selection-options-category',\n isOpenDefault: true,\n })\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.selection-options.multi-value', 'Multi-value'),\n id: multiValueId,\n render: (descriptor) => <MultiValueSwitch id={descriptor.props.id} variable={variable} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.selection-options.include-all', 'Include All value'),\n id: includeAllId,\n description: t(\n 'dashboard.edit-pane.variable.selection-options.include-all-description',\n 'Enables a single option that represent all values'\n ),\n render: (descriptor) => <IncludeAllSwitch id={descriptor.props.id} variable={variable} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.selection-options.custom-all-value', 'Custom all value'),\n id: customAllValueId,\n description: t(\n 'dashboard.edit-pane.variable.selection-options.custom-all-value-description',\n 'A wildcard regex or other value to represent All'\n ),\n useShowIf: () => {\n return variable.useState().includeAll ?? false;\n },\n render: (descriptor) => <CustomAllValueInput id={descriptor.props.id} variable={variable} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.selection-options.allow-custom-values', 'Allow custom values'),\n id: allowCustomId,\n description: t(\n 'dashboard.edit-pane.variable.selection-options.allow-custom-values-description',\n 'Enables users to enter values'\n ),\n render: (descriptor) => <AllowCustomSwitch id={descriptor.props.id} variable={variable} />,\n })\n );\n }, [allowCustomId, customAllValueId, includeAllId, multiValueId, variable]);\n}\n\ninterface InputProps {\n variable: MultiValueVariable;\n id?: string;\n}\n\nfunction MultiValueSwitch({ variable, id }: InputProps) {\n const { isMulti } = variable.useState();\n\n return (\n <Switch id={id} value={isMulti} onChange={(evt) => variable.setState({ isMulti: evt.currentTarget.checked })} />\n );\n}\n\nfunction IncludeAllSwitch({ variable, id }: InputProps) {\n const { includeAll } = variable.useState();\n\n return (\n <Switch\n id={id}\n value={includeAll}\n onChange={(evt) => variable.setState({ includeAll: evt.currentTarget.checked })}\n />\n );\n}\n\nfunction AllowCustomSwitch({ variable, id }: InputProps) {\n const { allowCustomValue } = variable.useState();\n\n return (\n <Switch\n id={id}\n value={allowCustomValue}\n onChange={(evt) => variable.setState({ allowCustomValue: evt.currentTarget.checked })}\n />\n );\n}\n\nfunction CustomAllValueInput({ variable, id }: InputProps) {\n const { allValue } = variable.useState();\n const ref = useRef<HTMLInputElement>(null);\n\n const onInputBlur = useCallback(\n (evt: React.FocusEvent<HTMLInputElement>) => {\n const newValue = evt.currentTarget.value;\n if (newValue === variable.state.allValue) {\n return;\n }\n\n variable.setState({ allValue: newValue });\n if (variable.hasAllValue()) {\n variable.publishEvent(new SceneVariableValueChangedEvent(variable), true);\n }\n },\n [variable]\n );\n\n return <Input id={id} ref={ref} defaultValue={allValue ?? ''} onBlur={onInputBlur} />;\n}\n","import { FormEvent, useId, useMemo, useRef, useState } from 'react';\n\nimport { VariableHide } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { LocalValueVariable, MultiValueVariable, SceneVariable, SceneVariableSet } from '@grafana/scenes';\nimport { Input, TextArea, Button, Field, Box, Stack } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { dashboardEditActions, undoRedoWasClicked } from '../../edit-pane/shared';\nimport { useEditPaneInputAutoFocus } from '../../scene/layouts-shared/utils';\nimport { BulkActionElement } from '../../scene/types/BulkActionElement';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../../scene/types/EditableDashboardElement';\nimport { VariableHideSelect } from '../../settings/variables/components/VariableHideSelect';\nimport { getEditableVariableDefinition, validateVariableName } from '../../settings/variables/utils';\n\nimport { useVariableSelectionOptionsCategory } from './useVariableSelectionOptionsCategory';\n\n// TODO fix conditional hook usage here...\nfunction useEditPaneOptions(this: VariableEditableElement, isNewElement: boolean): OptionsPaneCategoryDescriptor[] {\n const variable = this.variable;\n const variableOptionsCategoryId = useId();\n const variableNameId = useId();\n const labelId = useId();\n const descriptionId = useId();\n const variableHideId = useId();\n\n if (variable instanceof LocalValueVariable) {\n return useLocalVariableOptions(variable);\n }\n\n const basicOptions = useMemo(() => {\n return new OptionsPaneCategoryDescriptor({ title: '', id: variableOptionsCategoryId })\n .addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: variableNameId,\n skipField: true,\n render: () => <VariableNameInput variable={variable} isNewElement={isNewElement} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.label', 'Label'),\n id: labelId,\n description: t('dashboard.edit-pane.variable.label-description', 'Optional display name'),\n render: () => <VariableLabelInput variable={variable} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.description', 'Description'),\n id: descriptionId,\n render: () => <VariableDescriptionTextArea variable={variable} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: variableHideId,\n skipField: true,\n render: () => <VariableHideInput variable={variable} />,\n })\n );\n }, [variableOptionsCategoryId, variableNameId, labelId, descriptionId, variableHideId, variable, isNewElement]);\n\n const categories = [basicOptions];\n const typeCategory = useVariableTypeCategory(variable);\n categories.push(typeCategory);\n\n if (variable instanceof MultiValueVariable) {\n categories.push(useVariableSelectionOptionsCategory(variable));\n }\n\n return categories;\n}\n\nexport class VariableEditableElement implements EditableDashboardElement, BulkActionElement {\n public readonly isEditableDashboardElement = true;\n public readonly typeName = 'Variable';\n\n public constructor(public variable: SceneVariable) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n if (this.variable instanceof LocalValueVariable) {\n return {\n typeName: t('dashboard.edit-pane.elements.local-variable', 'Local variable'),\n icon: 'dollar-alt',\n instanceName: this.variable.state.name,\n isHidden: true,\n };\n }\n\n const variableEditorDef = getEditableVariableDefinition(this.variable.state.type);\n\n return {\n typeName: t('dashboard.edit-pane.elements.variable', '{{type}} variable', { type: variableEditorDef.name }),\n icon: 'dollar-alt',\n instanceName: this.variable.state.name,\n isHidden: this.variable.state.hide === VariableHide.hideVariable,\n };\n }\n\n public useEditPaneOptions = useEditPaneOptions.bind(this);\n\n public onDelete() {\n const set = this.variable.parent!;\n if (set instanceof SceneVariableSet) {\n dashboardEditActions.removeVariable({\n source: set,\n removedObject: this.variable,\n });\n }\n }\n\n public onChangeName(name: string) {\n this.variable.setState({ name });\n\n const result = validateVariableName(this.variable, name);\n if (result.errorMessage) {\n return result;\n }\n\n return;\n }\n}\n\ninterface VariableInputProps {\n variable: SceneVariable;\n id?: string;\n}\n\nfunction VariableNameInput({ variable, isNewElement }: { variable: SceneVariable; isNewElement: boolean }) {\n const { name } = variable.useState();\n const ref = useEditPaneInputAutoFocus({ autoFocus: isNewElement });\n const [nameError, setNameError] = useState<string>();\n const id = useId();\n\n const onChange = (e: FormEvent<HTMLInputElement>) => {\n const result = validateVariableName(variable, e.currentTarget.value);\n if (result.errorMessage !== nameError) {\n setNameError(result.errorMessage);\n }\n\n variable.setState({ name: e.currentTarget.value });\n };\n\n const oldName = useRef(name);\n\n return (\n <Field label={t('dashboard.edit-pane.variable.name', 'Name')} invalid={!!nameError} error={nameError}>\n <Input\n id={id}\n ref={ref}\n value={name}\n onFocus={() => {\n oldName.current = name;\n }}\n onChange={onChange}\n onBlur={(e) => {\n const labelUnchanged = oldName.current === name;\n const shouldSkip = labelUnchanged || undoRedoWasClicked(e);\n\n if (nameError) {\n setNameError(undefined);\n variable.setState({ name: oldName.current });\n return;\n }\n\n if (shouldSkip) {\n return;\n }\n\n dashboardEditActions.changeVariableName({\n source: variable,\n oldValue: oldName.current,\n newValue: name,\n });\n }}\n data-testid={selectors.components.PanelEditor.ElementEditPane.variableNameInput}\n required\n />\n </Field>\n );\n}\n\nfunction VariableLabelInput({ variable, id }: VariableInputProps) {\n const { label } = variable.useState();\n const oldLabel = useRef(label ?? '');\n\n return (\n <Input\n id={id}\n value={label}\n onFocus={() => {\n oldLabel.current = label ?? '';\n }}\n onChange={(e) => variable.setState({ label: e.currentTarget.value })}\n onBlur={(e) => {\n const labelUnchanged = oldLabel.current === e.currentTarget.value;\n const shouldSkip = labelUnchanged || undoRedoWasClicked(e);\n\n if (shouldSkip) {\n return;\n }\n\n dashboardEditActions.changeVariableLabel({\n source: variable,\n oldValue: oldLabel.current,\n newValue: e.currentTarget.value,\n });\n }}\n data-testid={selectors.components.PanelEditor.ElementEditPane.variableLabelInput}\n />\n );\n}\n\nfunction VariableDescriptionTextArea({ variable, id }: VariableInputProps) {\n const { description } = variable.useState();\n const oldDescription = useRef(description ?? '');\n\n return (\n <TextArea\n id={id}\n value={description ?? ''}\n placeholder={t('dashboard.edit-pane.variable.description-placeholder', 'Descriptive text')}\n onFocus={() => {\n oldDescription.current = description ?? '';\n }}\n onChange={(e) => variable.setState({ description: e.currentTarget.value })}\n onBlur={(e) => {\n const labelUnchanged = oldDescription.current === e.currentTarget.value;\n const shouldSkip = labelUnchanged || undoRedoWasClicked(e);\n\n if (shouldSkip) {\n return;\n }\n\n dashboardEditActions.changeVariableDescription({\n source: variable,\n oldValue: oldDescription.current,\n newValue: e.currentTarget.value,\n });\n }}\n />\n );\n}\n\nfunction VariableHideInput({ variable }: VariableInputProps) {\n const { hide = VariableHide.dontHide } = variable.useState();\n\n const onChange = (option: VariableHide) => {\n dashboardEditActions.changeVariableHideValue({\n source: variable,\n oldValue: hide,\n newValue: option,\n });\n };\n\n return <VariableHideSelect hide={hide} type={variable.state.type} onChange={onChange} />;\n}\n\nfunction useVariableTypeCategory(variable: SceneVariable) {\n const oldVariableId = useId();\n return useMemo(() => {\n const variableEditorDef = getEditableVariableDefinition(variable.state.type);\n const categoryName = t('dashboard.edit-pane.variable.type-category', '{{type}} options', {\n type: variableEditorDef.name,\n });\n\n const category = new OptionsPaneCategoryDescriptor({\n title: categoryName,\n id: 'variable-type',\n isOpenDefault: true,\n });\n\n if (variableEditorDef.getOptions) {\n const options = variableEditorDef.getOptions(variable);\n options.forEach((option) => category.addItem(option));\n } else {\n category.addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: oldVariableId,\n skipField: true,\n render: () => <OpenOldVariableEditButton variable={variable} />,\n })\n );\n }\n\n return category;\n }, [oldVariableId, variable]);\n}\n\nfunction OpenOldVariableEditButton({ variable }: VariableInputProps) {\n const onOpenVariableEdior = () => {\n const set = variable.parent!;\n if (!(set instanceof SceneVariableSet)) {\n return;\n }\n\n const variableIndex = set.state.variables.indexOf(variable);\n locationService.partial({ editview: 'variables', editIndex: variableIndex });\n };\n\n return (\n <Box display={'flex'} direction={'column'} paddingBottom={1}>\n <Button\n tooltip={t(\n 'dashboard.edit-pane.variable.open-editor-tooltip',\n 'For more variable options open variable editor'\n )}\n onClick={onOpenVariableEdior}\n size=\"sm\"\n fullWidth\n >\n <Trans i18nKey=\"dashboard.edit-pane.variable.open-editor\">Open variable editor</Trans>\n </Button>\n </Box>\n );\n}\n\nfunction useLocalVariableOptions(variable: LocalValueVariable): OptionsPaneCategoryDescriptor[] {\n const localVariableOptionsCategoryId = useId();\n const localVariableId = useId();\n return useMemo(() => {\n const category = new OptionsPaneCategoryDescriptor({\n title: '',\n id: localVariableOptionsCategoryId,\n });\n\n category.addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: localVariableId,\n skipField: true,\n render: () => {\n return (\n <Box paddingBottom={1}>\n <Stack>\n <Stack>\n <span>${variable.state.name}</span>\n <span>=</span>\n <span>{variable.getValueText()}</span>\n </Stack>\n </Stack>\n </Box>\n );\n },\n })\n );\n\n return [category];\n }, [localVariableId, localVariableOptionsCategoryId, variable]);\n}\n","import { css } from '@emotion/css';\nimport { useCallback, useId, useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneVariable, SceneVariableSet } from '@grafana/scenes';\nimport { Box, Button, Stack, Text, useStyles2 } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { DashboardScene } from '../../scene/DashboardScene';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../../scene/types/EditableDashboardElement';\nimport { DashboardInteractions } from '../../utils/interactions';\nimport { getDashboardSceneFor } from '../../utils/utils';\n\nimport { openAddVariablePane } from './VariableAddEditableElement';\n\nfunction useEditPaneOptions(this: VariableSetEditableElement, set: SceneVariableSet): OptionsPaneCategoryDescriptor[] {\n const variableListId = useId();\n const options = useMemo(() => {\n return new OptionsPaneCategoryDescriptor({ title: '', id: 'variables' }).addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: variableListId,\n skipField: true,\n render: () => <VariableList set={set} />,\n })\n );\n }, [set, variableListId]);\n\n return [options];\n}\n\nexport class VariableSetEditableElement implements EditableDashboardElement {\n public readonly isEditableDashboardElement = true;\n public readonly typeName = 'Variable';\n\n public constructor(private set: SceneVariableSet) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return {\n typeName: t('dashboard.edit-pane.elements.variable-set', 'Variables'),\n icon: 'x',\n instanceName: t('dashboard.edit-pane.elements.variable-set', 'Variables'),\n };\n }\n\n public getOutlineChildren() {\n return this.set.state.variables;\n }\n\n public useEditPaneOptions = useEditPaneOptions.bind(this, this.set);\n}\n\nexport function VariableList({ set }: { set: SceneVariableSet }) {\n const { variables } = set.useState();\n const styles = useStyles2(getStyles);\n const canAdd = set.parent instanceof DashboardScene;\n\n const onEditVariable = useCallback(\n (variable: SceneVariable) => {\n const { editPane } = getDashboardSceneFor(set).state;\n editPane.selectObject(variable, variable.state.key!);\n },\n [set]\n );\n\n const onAddVariable = useCallback(() => {\n openAddVariablePane(getDashboardSceneFor(set));\n DashboardInteractions.addVariableButtonClicked({ source: 'edit_pane' });\n }, [set]);\n\n return (\n <Stack direction=\"column\" gap={0}>\n {variables.map((variable) => (\n // TODO fix keyboard a11y here\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events\n <div className={styles.variableItem} key={variable.state.name} onClick={() => onEditVariable(variable)}>\n <Text>${variable.state.name}</Text>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Button variant=\"primary\" size=\"sm\" fill=\"outline\">\n <Trans i18nKey=\"dashboard.edit-pane.variables.select-variable\">Select</Trans>\n </Button>\n </Stack>\n </div>\n ))}\n {canAdd && (\n <Box paddingBottom={1} display={'flex'}>\n <Button\n fullWidth\n icon=\"plus\"\n size=\"sm\"\n variant=\"secondary\"\n onClick={onAddVariable}\n data-testid={selectors.components.PanelEditor.ElementEditPane.addVariableButton}\n >\n <Trans i18nKey=\"dashboard.edit-pane.variables.add-variable\">Add variable</Trans>\n </Button>\n </Box>\n )}\n </Stack>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n variableItem: css({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n gap: theme.spacing(1),\n padding: theme.spacing(0.5),\n borderRadius: theme.shape.radius.default,\n cursor: 'pointer',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create(['color'], {\n duration: theme.transitions.duration.short,\n }),\n },\n '&:last-child': {\n marginBottom: theme.spacing(2),\n },\n button: {\n visibility: 'hidden',\n },\n '&:hover': {\n color: theme.colors.text.link,\n button: {\n visibility: 'visible',\n },\n },\n }),\n };\n}\n","import { t } from '@grafana/i18n';\nimport { Button, Icon } from '@grafana/ui';\n\nimport { ToolbarActionProps } from '../types';\n\nexport const EditSchemaV2Button = ({ dashboard }: ToolbarActionProps) => {\n return (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n tooltip={t('dashboard.toolbar.new.edit-dashboard-v2-schema.tooltip', 'Edit dashboard v2 schema')}\n icon={<Icon name=\"brackets-curly\" size=\"lg\" type=\"default\" />}\n onClick={() => dashboard.openV2SchemaEditor()}\n />\n );\n};\n","import { ReactNode, useId, useMemo, useRef } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneObject } from '@grafana/scenes';\nimport { Button, Input, TextArea } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { useLayoutCategory } from '../scene/layouts-shared/DashboardLayoutSelector';\nimport { EditSchemaV2Button } from '../scene/new-toolbar/actions/EditSchemaV2Button';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../scene/types/EditableDashboardElement';\n\nimport { dashboardEditActions, undoRedoWasClicked } from './shared';\n\nfunction useEditPaneOptions(\n this: DashboardEditableElement,\n dashboard: DashboardScene\n): OptionsPaneCategoryDescriptor[] {\n // When layout changes we need to update options list\n const { body } = dashboard.useState();\n const dashboardTitleInputId = useId();\n const dashboardDescriptionInputId = useId();\n\n const dashboardOptions = useMemo(() => {\n const editPaneHeaderOptions = new OptionsPaneCategoryDescriptor({ title: '', id: 'dashboard-options' })\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.options.title-option', 'Title'),\n id: dashboardTitleInputId,\n render: () => <DashboardTitleInput id={dashboardTitleInputId} dashboard={dashboard} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.options.description', 'Description'),\n id: dashboardDescriptionInputId,\n render: () => <DashboardDescriptionInput id={dashboardDescriptionInputId} dashboard={dashboard} />,\n })\n );\n\n return editPaneHeaderOptions;\n }, [dashboard, dashboardDescriptionInputId, dashboardTitleInputId]);\n\n const layoutCategory = useLayoutCategory(body);\n\n return [dashboardOptions, ...layoutCategory];\n}\n\nexport class DashboardEditableElement implements EditableDashboardElement {\n public readonly isEditableDashboardElement = true;\n\n public constructor(private dashboard: DashboardScene) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return {\n typeName: t('dashboard.edit-pane.elements.dashboard', 'Dashboard'),\n icon: 'apps',\n instanceName: t('dashboard.edit-pane.elements.dashboard', 'Dashboard'),\n };\n }\n\n public getOutlineChildren(): SceneObject[] {\n const { $variables, body } = this.dashboard.state;\n return [$variables!, ...body.getOutlineChildren()];\n }\n\n public useEditPaneOptions = useEditPaneOptions.bind(this, this.dashboard);\n\n public renderActions(): ReactNode {\n return (\n <>\n <EditSchemaV2Button dashboard={this.dashboard} />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => this.dashboard.onOpenSettings()}\n tooltip={t('dashboard.toolbar.dashboard-settings.tooltip', 'Dashboard settings')}\n icon=\"sliders-v-alt\"\n iconPlacement=\"right\"\n >\n <Trans i18nKey=\"dashboard.actions.open-settings\">Settings</Trans>\n </Button>\n </>\n );\n }\n}\n\nexport function DashboardTitleInput({ dashboard, id }: { dashboard: DashboardScene; id?: string }) {\n const { title } = dashboard.useState();\n\n // We want to save the unchanged value for the 'undo' action\n const valueBeforeEdit = useRef('');\n\n return (\n <Input\n id={id}\n value={title}\n onChange={(e) => {\n dashboard.setState({ title: e.currentTarget.value });\n }}\n onFocus={(e) => {\n valueBeforeEdit.current = e.currentTarget.value;\n }}\n onBlur={(e) => {\n const titleUnchanged = valueBeforeEdit.current === e.currentTarget.value;\n const shouldSkip = titleUnchanged || undoRedoWasClicked(e);\n if (shouldSkip) {\n return;\n }\n\n dashboardEditActions.changeTitle({\n source: dashboard,\n oldValue: valueBeforeEdit.current,\n newValue: e.currentTarget.value,\n });\n }}\n />\n );\n}\n\nexport function DashboardDescriptionInput({ dashboard, id }: { dashboard: DashboardScene; id?: string }) {\n const { description } = dashboard.useState();\n\n // We want to save the unchanged value for the 'undo' action\n const valueBeforeEdit = useRef('');\n\n return (\n <TextArea\n id={id}\n value={description}\n onChange={(e) => dashboard.setState({ description: e.currentTarget.value })}\n onFocus={(e) => {\n valueBeforeEdit.current = e.currentTarget.value;\n }}\n onBlur={(e) => {\n const descriptionUnchanged = valueBeforeEdit.current === e.currentTarget.value;\n const shouldSkip = descriptionUnchanged || undoRedoWasClicked(e);\n if (shouldSkip) {\n return;\n }\n\n dashboardEditActions.changeDescription({\n source: dashboard,\n oldValue: valueBeforeEdit.current,\n newValue: e.currentTarget.value,\n });\n }}\n />\n );\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nimport { t } from '@grafana/i18n';\nimport { appEvents } from 'app/core/core';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../scene/types/EditableDashboardElement';\n\nimport { VizPanelEditableElement } from './VizPanelEditableElement';\n\nexport class MultiSelectedVizPanelsEditableElement implements EditableDashboardElement {\n public readonly isEditableDashboardElement = true;\n public readonly key: string;\n\n constructor(private _panels: VizPanelEditableElement[]) {\n this.key = uuidv4();\n }\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return { typeName: t('dashboard.edit-pane.elements.panels', 'Panels'), icon: 'folder', instanceName: '' };\n }\n\n public useEditPaneOptions(): OptionsPaneCategoryDescriptor[] {\n const header = new OptionsPaneCategoryDescriptor({\n title: ``,\n id: '',\n });\n\n return [header];\n }\n\n public onConfirmDelete() {\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard.edit-pane.elements.multiple-panels', 'Multiple panels'),\n text: t(\n 'dashboard.edit-pane.elements.multiple-panels-delete-text',\n 'Are you sure you want to delete these panels? All queries will be removed.'\n ),\n onConfirm: () => this.onDelete(),\n })\n );\n }\n\n public onDelete() {\n this._panels.forEach((panel) => {\n panel.onDelete();\n });\n }\n}\n","import { useId, useMemo } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { sceneGraph, VizPanel } from '@grafana/scenes';\nimport { Stack, Button } from '@grafana/ui';\nimport { appEvents } from 'app/core/core';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport {\n PanelBackgroundSwitch,\n PanelDescriptionTextArea,\n PanelFrameTitleInput,\n editPanelTitleAction,\n} from '../panel-edit/getPanelFrameOptions';\nimport { AutoGridItem } from '../scene/layout-auto-grid/AutoGridItem';\nimport { DashboardGridItem } from '../scene/layout-default/DashboardGridItem';\nimport { BulkActionElement } from '../scene/types/BulkActionElement';\nimport { isDashboardLayoutItem } from '../scene/types/DashboardLayoutItem';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../scene/types/EditableDashboardElement';\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { getDashboardSceneFor, getPanelIdForVizPanel } from '../utils/utils';\n\nimport { MultiSelectedVizPanelsEditableElement } from './MultiSelectedVizPanelsEditableElement';\n\nfunction useEditPaneOptions(this: VizPanelEditableElement, isNewElement: boolean): OptionsPaneCategoryDescriptor[] {\n const panel = this.panel;\n const layoutElement = panel.parent!;\n const rootId = useId();\n const titleId = useId();\n const descriptionId = useId();\n const backgroundId = useId();\n\n const panelOptions = useMemo(() => {\n return new OptionsPaneCategoryDescriptor({ title: '', id: 'panel-options' })\n .addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id: rootId,\n render: () => <OpenPanelEditViz panel={this.panel} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.viz-panel.options.title-option', 'Title'),\n id: titleId,\n value: panel.state.title,\n popularRank: 1,\n render: (descriptor) => (\n <PanelFrameTitleInput id={descriptor.props.id} panel={panel} isNewElement={isNewElement} />\n ),\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.viz-panel.options.description', 'Description'),\n id: descriptionId,\n value: panel.state.description,\n render: (descriptor) => <PanelDescriptionTextArea id={descriptor.props.id} panel={panel} />,\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.viz-panel.options.transparent-background', 'Transparent background'),\n id: backgroundId,\n render: (descriptor) => <PanelBackgroundSwitch id={descriptor.props.id} panel={panel} />,\n })\n );\n }, [rootId, titleId, panel, descriptionId, backgroundId, isNewElement]);\n\n const layoutCategories = useMemo(\n () => (isDashboardLayoutItem(layoutElement) && layoutElement.getOptions ? layoutElement.getOptions() : []),\n [layoutElement]\n );\n\n return [panelOptions, ...layoutCategories];\n}\n\nexport class VizPanelEditableElement implements EditableDashboardElement, BulkActionElement {\n public readonly isEditableDashboardElement = true;\n public readonly typeName = 'Panel';\n\n public constructor(public panel: VizPanel) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return {\n typeName: t('dashboard.edit-pane.elements.panel', 'Panel'),\n icon: 'chart-line',\n instanceName: sceneGraph.interpolate(this.panel, this.panel.state.title, undefined, 'text'),\n };\n }\n\n public useEditPaneOptions = useEditPaneOptions.bind(this);\n\n public onDelete() {\n const layout = dashboardSceneGraph.getLayoutManagerFor(this.panel);\n layout.removePanel?.(this.panel);\n }\n\n public onConfirmDelete() {\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard.viz-panel.delete-panel-title', 'Delete panel?'),\n text: t(\n 'dashboard.viz-panel.delete-panel-text',\n 'Deleting this panel will also remove all queries. Are you sure you want to continue?'\n ),\n yesText: t('dashboard.viz-panel.delete-panel-yes', 'Delete'),\n onConfirm: () => {\n this.onDelete();\n },\n })\n );\n }\n\n public onDuplicate() {\n const layout = dashboardSceneGraph.getLayoutManagerFor(this.panel);\n layout.duplicatePanel?.(this.panel);\n }\n\n public onCopy() {\n const dashboard = getDashboardSceneFor(this.panel);\n dashboard.copyPanel(this.panel);\n }\n\n public onChangeName(name: string) {\n editPanelTitleAction(this.panel, name);\n }\n\n public createMultiSelectedElement(items: VizPanelEditableElement[]) {\n return new MultiSelectedVizPanelsEditableElement(items);\n }\n\n public scrollIntoView() {\n if (this.panel.parent instanceof AutoGridItem || this.panel.parent instanceof DashboardGridItem) {\n this.panel.parent.scrollIntoView();\n }\n }\n}\n\ntype OpenPanelEditVizProps = { panel: VizPanel };\n\nconst OpenPanelEditViz = ({ panel }: OpenPanelEditVizProps) => {\n return (\n <Stack alignItems=\"center\" width=\"100%\">\n <Button\n onClick={() => {\n locationService.partial({ editPanel: getPanelIdForVizPanel(panel) });\n }}\n icon=\"sliders-v-alt\"\n fullWidth\n size=\"sm\"\n tooltip={t('dashboard.viz-panel.options.configure-button-tooltip', 'Edit queries and visualization options')}\n >\n <Trans i18nKey=\"dashboard.new-panel.configure-button\">Configure</Trans>\n </Button>\n </Stack>\n );\n};\n","/* eslint-disable @grafana/i18n/no-translation-top-level */\nimport { useSessionStorage } from 'react-use';\n\nimport { BusEventWithPayload } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport {\n LocalValueVariable,\n SceneGridRow,\n SceneObject,\n SceneVariable,\n SceneVariableSet,\n VizPanel,\n} from '@grafana/scenes';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { SceneGridRowEditableElement } from '../scene/layout-default/SceneGridRowEditableElement';\nimport { redoButtonId, undoButtonID } from '../scene/new-toolbar/RightActions';\nimport { EditableDashboardElement, isEditableDashboardElement } from '../scene/types/EditableDashboardElement';\nimport { LocalVariableEditableElement } from '../settings/variables/LocalVariableEditableElement';\nimport { VariableAdd, VariableAddEditableElement } from '../settings/variables/VariableAddEditableElement';\nimport { VariableEditableElement } from '../settings/variables/VariableEditableElement';\nimport { VariableSetEditableElement } from '../settings/variables/VariableSetEditableElement';\nimport { isSceneVariable } from '../settings/variables/utils';\n\nimport { DashboardEditableElement } from './DashboardEditableElement';\nimport { VizPanelEditableElement } from './VizPanelEditableElement';\n\nexport function useEditPaneCollapsed() {\n return useSessionStorage('grafana.dashboards.edit-pane.isCollapsed', false);\n}\n\nexport function getEditableElementFor(sceneObj: SceneObject | undefined): EditableDashboardElement | undefined {\n if (!sceneObj) {\n return undefined;\n }\n\n if (isEditableDashboardElement(sceneObj)) {\n return sceneObj;\n }\n\n if (sceneObj instanceof VizPanel) {\n return new VizPanelEditableElement(sceneObj);\n }\n\n if (sceneObj instanceof SceneGridRow) {\n return new SceneGridRowEditableElement(sceneObj);\n }\n\n if (sceneObj instanceof DashboardScene) {\n return new DashboardEditableElement(sceneObj);\n }\n\n if (sceneObj instanceof SceneVariableSet) {\n return new VariableSetEditableElement(sceneObj);\n }\n\n if (sceneObj instanceof LocalValueVariable) {\n return new LocalVariableEditableElement(sceneObj);\n }\n\n if (isSceneVariable(sceneObj)) {\n return new VariableEditableElement(sceneObj);\n }\n\n if (sceneObj instanceof VariableAdd) {\n return new VariableAddEditableElement(sceneObj);\n }\n\n return undefined;\n}\n\nexport class NewObjectAddedToCanvasEvent extends BusEventWithPayload<SceneObject> {\n static type = 'new-object-added-to-canvas';\n}\n\nexport class ObjectRemovedFromCanvasEvent extends BusEventWithPayload<SceneObject> {\n static type = 'object-removed-from-canvas';\n}\n\nexport class ObjectsReorderedOnCanvasEvent extends BusEventWithPayload<SceneObject> {\n static type = 'objects-reordered-on-canvas';\n}\n\nexport class ConditionalRenderingChangedEvent extends BusEventWithPayload<SceneObject> {\n static type = 'conditional-rendering-changed';\n}\n\nexport interface DashboardEditActionEventPayload {\n removedObject?: SceneObject;\n addedObject?: SceneObject;\n movedObject?: SceneObject;\n source: SceneObject;\n description?: string;\n perform: () => void;\n undo: () => void;\n}\n\nexport class DashboardEditActionEvent extends BusEventWithPayload<DashboardEditActionEventPayload> {\n static type = 'dashboard-edit-action';\n}\n\n/**\n * Emitted after DashboardEditActionEvent has been processed (or undone)\n */\nexport class DashboardStateChangedEvent extends BusEventWithPayload<{ source: SceneObject }> {\n static type = 'dashboard-state-changed';\n}\n\nexport interface AddElementActionHelperProps {\n addedObject: SceneObject;\n source: SceneObject;\n perform: () => void;\n undo: () => void;\n}\n\nexport interface RemoveElementActionHelperProps {\n removedObject: SceneObject;\n source: SceneObject;\n perform: () => void;\n undo: () => void;\n}\n\nexport interface AddVariableActionHelperProps {\n addedObject: SceneVariable;\n source: SceneVariableSet;\n}\n\nexport interface RemoveVariableActionHelperProps {\n removedObject: SceneVariable;\n source: SceneVariableSet;\n}\n\nexport interface ChangeTitleActionHelperProps {\n oldTitle: string;\n newTitle: string;\n source: DashboardScene;\n}\n\nexport interface ChangeDescriptionActionHelperProps {\n oldDescription: string;\n newDescription: string;\n source: DashboardScene;\n}\n\nexport interface MoveElementActionHelperProps {\n movedObject: SceneObject;\n source: SceneObject;\n perform: () => void;\n undo: () => void;\n}\n\nexport const dashboardEditActions = {\n /**\n * Registers and peforms an edit action\n */\n edit(props: DashboardEditActionEventPayload) {\n props.source.publishEvent(new DashboardEditActionEvent(props), true);\n },\n /**\n * Helper for makeEdit that adds elements\n */\n addElement(props: AddElementActionHelperProps) {\n const { addedObject, source, perform, undo } = props;\n\n const element = getEditableElementFor(addedObject);\n if (!element) {\n throw new Error('Added object is not an editable element');\n }\n\n const typeName = element.getEditableElementInfo().typeName;\n\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.add', 'Add {{typeName}}', { typeName }),\n addedObject,\n source,\n perform,\n undo,\n });\n },\n\n removeElement(props: RemoveElementActionHelperProps) {\n const { removedObject, source, perform, undo } = props;\n\n const element = getEditableElementFor(removedObject);\n if (!element) {\n throw new Error('Removed object is not an editable element');\n }\n\n const typeName = element.getEditableElementInfo().typeName;\n\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.remove', 'Remove {{typeName}}', { typeName }),\n removedObject,\n source,\n perform,\n undo,\n });\n },\n\n changeTitle: makeEditAction<DashboardScene, 'title'>({\n description: t('dashboard.title.action', 'Change dashboard title'),\n prop: 'title',\n }),\n changeDescription: makeEditAction<DashboardScene, 'description'>({\n description: t('dashboard.description.action', 'Change dashboard description'),\n prop: 'description',\n }),\n\n addVariable({ source, addedObject }: AddVariableActionHelperProps) {\n const varsBeforeAddition = [...(source.state.variables ?? [])];\n\n dashboardEditActions.addElement({\n source,\n addedObject,\n perform() {\n source.setState({ variables: [...varsBeforeAddition, addedObject] });\n },\n undo() {\n source.setState({ variables: [...varsBeforeAddition] });\n },\n });\n },\n removeVariable({ source, removedObject }: RemoveVariableActionHelperProps) {\n const varsBeforeRemoval = [...source.state.variables];\n\n dashboardEditActions.removeElement({\n source,\n removedObject,\n perform() {\n source.setState({ variables: varsBeforeRemoval.filter((v) => v !== removedObject) });\n },\n undo() {\n source.setState({ variables: varsBeforeRemoval });\n },\n });\n },\n changeVariableName: makeEditAction<SceneVariable, 'name'>({\n description: t('dashboard.variable.name.action', 'Change variable name'),\n prop: 'name',\n }),\n changeVariableLabel: makeEditAction<SceneVariable, 'label'>({\n description: t('dashboard.variable.label.action', 'Change variable label'),\n prop: 'label',\n }),\n changeVariableDescription: makeEditAction<SceneVariable, 'description'>({\n description: t('dashboard.variable.description.action', 'Change variable description'),\n prop: 'description',\n }),\n changeVariableHideValue: makeEditAction<SceneVariable, 'hide'>({\n description: t('dashboard.variable.hide.action', 'Change variable hide option'),\n prop: 'hide',\n }),\n\n moveElement(props: MoveElementActionHelperProps) {\n const { movedObject, source, perform, undo } = props;\n\n const element = getEditableElementFor(movedObject);\n if (!element) {\n throw new Error('Moved object is not an editable element');\n }\n\n const typeName = element.getEditableElementInfo().typeName;\n\n dashboardEditActions.edit({\n description: t('dashboard.edit-actions.move', 'Move {{typeName}}', { typeName }),\n movedObject,\n source,\n perform,\n undo,\n });\n },\n};\n\ninterface MakeEditActionProps<Source extends SceneObject, T extends keyof Source['state']> {\n description: string;\n prop: T;\n}\n\ninterface EditActionProps<Source extends SceneObject, T extends keyof Source['state']> {\n source: Source;\n oldValue: Source['state'][T];\n newValue: Source['state'][T];\n}\n\nfunction makeEditAction<Source extends SceneObject, T extends keyof Source['state']>({\n description,\n prop,\n}: MakeEditActionProps<Source, T>) {\n return ({ source, oldValue, newValue }: EditActionProps<Source, T>) => {\n dashboardEditActions.edit({\n description,\n source,\n perform: () => {\n source.setState({ [prop]: newValue });\n },\n undo: () => {\n source.setState({ [prop]: oldValue });\n },\n });\n };\n}\n\nexport function undoRedoWasClicked(e: React.FocusEvent) {\n return e.relatedTarget && (e.relatedTarget.id === undoButtonID || e.relatedTarget.id === redoButtonId);\n}\n","import { Observable } from 'rxjs';\n\nimport {\n DataFrameJSON,\n DataQueryRequest,\n DataQueryResponse,\n LiveChannelAddress,\n LiveChannelEvent,\n LiveChannelPresenceStatus,\n StreamingFrameOptions,\n} from '@grafana/data';\n\n/**\n * @alpha -- experimental\n */\nexport interface LiveDataFilter {\n fields?: string[];\n}\n\n// StreamingFrameAction and StreamingFrameOptions are now in @grafana/data\nexport { StreamingFrameAction, type StreamingFrameOptions } from '@grafana/data';\n\n/**\n * @alpha\n */\nexport interface LiveDataStreamOptions {\n addr: LiveChannelAddress;\n frame?: DataFrameJSON; // initial results\n key?: string;\n buffer?: Partial<StreamingFrameOptions>;\n filter?: LiveDataFilter;\n}\n\n/**\n * @alpha -- experimental: send a normal query request over websockt\n */\nexport interface LiveQueryDataOptions {\n request: DataQueryRequest;\n body: unknown; // processed queries, same as sent to `/api/query/ds`\n}\n\n/**\n * @alpha -- experimental\n */\nexport interface LivePublishOptions {\n /**\n * Publish the data over the websocket instead of the HTTP API.\n *\n * This is not recommended for most use cases.\n *\n * @experimental\n */\n useSocket?: boolean;\n}\n\n/**\n * @alpha -- experimental\n */\nexport interface GrafanaLiveSrv {\n /**\n * Listen for changes to the main service\n */\n getConnectionState(): Observable<boolean>;\n\n /**\n * Watch for messages in a channel\n */\n getStream<T>(address: LiveChannelAddress): Observable<LiveChannelEvent<T>>;\n\n /**\n * Connect to a channel and return results as DataFrames\n */\n getDataStream(options: LiveDataStreamOptions): Observable<DataQueryResponse>;\n\n /**\n * For channels that support presence, this will request the current state from the server.\n *\n * Join and leave messages will be sent to the open stream\n */\n getPresence(address: LiveChannelAddress): Promise<LiveChannelPresenceStatus>;\n\n /**\n * Publish into a channel\n *\n * @alpha -- experimental\n */\n publish(address: LiveChannelAddress, data: unknown, options?: LivePublishOptions): Promise<unknown>;\n}\n\nlet singletonInstance: GrafanaLiveSrv;\n\n/**\n * Used during startup by Grafana to set the GrafanaLiveSrv so it is available\n * via the {@link getGrafanaLiveSrv} to the rest of the application.\n *\n * @internal\n */\nexport const setGrafanaLiveSrv = (instance: GrafanaLiveSrv) => {\n singletonInstance = instance;\n};\n\n/**\n * Used to retrieve the GrafanaLiveSrv that allows you to subscribe to\n * server side events and streams\n *\n * @alpha -- experimental\n */\nexport const getGrafanaLiveSrv = (): GrafanaLiveSrv => singletonInstance;\n","/**\n * This function will calculate how many squares we can fit inside a rectangle.\n * Please have a look at this post for more details about the implementation:\n * https://math.stackexchange.com/questions/466198/algorithm-to-get-the-maximum-size-of-n-squares-that-fit-into-a-rectangle-with-a\n *\n * @param parentWidth width of the parent container\n * @param parentHeight height of the parent container\n * @param numberOfChildren number of children that should fit in the parent container\n */\nexport const calculateGridDimensions = (\n parentWidth: number,\n parentHeight: number,\n itemSpacing: number,\n numberOfChildren: number\n) => {\n const vertical = calculateSizeOfChild(parentWidth, parentHeight, numberOfChildren);\n const horizontal = calculateSizeOfChild(parentHeight, parentWidth, numberOfChildren);\n const square = Math.max(vertical, horizontal);\n let xCount = Math.floor(parentWidth / square);\n let yCount = Math.ceil(numberOfChildren / xCount);\n\n // after yCount update xCount to make split between rows more even\n xCount = Math.ceil(numberOfChildren / yCount);\n\n const itemsOnLastRow = xCount - (xCount * yCount - numberOfChildren);\n const widthOnLastRow = parentWidth / itemsOnLastRow - itemSpacing + itemSpacing / itemsOnLastRow;\n\n return {\n width: parentWidth / xCount - itemSpacing + itemSpacing / xCount,\n height: parentHeight / yCount - itemSpacing + itemSpacing / yCount,\n widthOnLastRow,\n xCount,\n yCount,\n };\n};\n\nfunction calculateSizeOfChild(parentWidth: number, parentHeight: number, numberOfChildren: number): number {\n const parts = Math.ceil(Math.sqrt((numberOfChildren * parentWidth) / parentHeight));\n\n if (Math.floor((parts * parentHeight) / parentWidth) * parts < numberOfChildren) {\n return parentHeight / Math.ceil((parts * parentHeight) / parentWidth);\n }\n\n return parentWidth / parts;\n}\n","import { clamp } from 'lodash';\nimport { PureComponent, CSSProperties } from 'react';\nimport * as React from 'react';\n\nimport { VizOrientation } from '@grafana/data';\n\nimport { calculateGridDimensions } from '../../utils/squares';\n\ninterface Props<V, D> {\n /**\n * Optionally precalculate dimensions to support consistent behavior between repeated\n * values. Two typical patterns are:\n * 1) Calculate raw values like font size etc and pass them to each vis\n * 2) find the maximum input values and pass that to the vis\n */\n getAlignmentFactors?: (values: V[], width: number, height: number) => D;\n\n /**\n * Render a single value\n */\n renderValue: (props: VizRepeaterRenderValueProps<V, D>) => JSX.Element;\n height: number;\n width: number;\n source: unknown; // If this changes, new values will be requested\n getValues: () => V[];\n renderCounter: number; // force update of values & render\n orientation: VizOrientation;\n itemSpacing?: number;\n /** When orientation is set to auto layout items in a grid */\n autoGrid?: boolean;\n minVizWidth?: number;\n minVizHeight?: number;\n maxVizHeight?: number;\n}\n\nexport interface VizRepeaterRenderValueProps<V, D = {}> {\n value: V;\n width: number;\n height: number;\n orientation: VizOrientation;\n alignmentFactors: D;\n /**\n * Total number of values being shown in repeater\n */\n count: number;\n}\n\ninterface DefaultProps {\n itemSpacing: number;\n}\n\ntype PropsWithDefaults<V, D> = Props<V, D> & DefaultProps;\n\ninterface State<V> {\n values: V[];\n}\n\nexport class VizRepeater<V, D = {}> extends PureComponent<PropsWithDefaults<V, D>, State<V>> {\n static defaultProps: DefaultProps = {\n itemSpacing: 8,\n };\n\n constructor(props: PropsWithDefaults<V, D>) {\n super(props);\n\n this.state = {\n values: props.getValues(),\n };\n }\n\n componentDidUpdate(prevProps: Props<V, D>) {\n const { renderCounter, source } = this.props;\n if (renderCounter !== prevProps.renderCounter || source !== prevProps.source) {\n this.setState({ values: this.props.getValues() });\n }\n }\n\n getOrientation(): VizOrientation {\n const { orientation, width, height } = this.props;\n\n if (orientation === VizOrientation.Auto) {\n if (width > height) {\n return VizOrientation.Vertical;\n } else {\n return VizOrientation.Horizontal;\n }\n }\n\n return orientation;\n }\n\n renderGrid() {\n const { renderValue, height, width, itemSpacing, getAlignmentFactors, orientation } = this.props;\n\n const { values } = this.state;\n const grid = calculateGridDimensions(width, height, itemSpacing, values.length);\n const alignmentFactors = getAlignmentFactors ? getAlignmentFactors(values, grid.width, grid.height) : ({} as D);\n\n let xGrid = 0;\n let yGrid = 0;\n let items: JSX.Element[] = [];\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n const isLastRow = yGrid === grid.yCount - 1;\n\n const itemWidth = isLastRow ? grid.widthOnLastRow : grid.width;\n const itemHeight = grid.height;\n\n const xPos = xGrid * itemWidth + itemSpacing * xGrid;\n const yPos = yGrid * itemHeight + itemSpacing * yGrid;\n\n const itemStyles: CSSProperties = {\n position: 'absolute',\n left: xPos,\n top: yPos,\n width: `${itemWidth}px`,\n height: `${itemHeight}px`,\n };\n\n items.push(\n <div key={i} style={itemStyles}>\n {renderValue({\n value,\n width: itemWidth,\n height: itemHeight,\n alignmentFactors,\n orientation,\n count: values.length,\n })}\n </div>\n );\n\n xGrid++;\n\n if (xGrid === grid.xCount) {\n xGrid = 0;\n yGrid++;\n }\n }\n\n return <div style={{ position: 'relative', width: '100%', height: '100%' }}>{items}</div>;\n }\n\n render() {\n const {\n renderValue,\n height,\n width,\n itemSpacing,\n getAlignmentFactors,\n autoGrid,\n orientation,\n maxVizHeight,\n minVizWidth,\n minVizHeight,\n } = this.props;\n const { values } = this.state;\n\n if (autoGrid && orientation === VizOrientation.Auto) {\n return this.renderGrid();\n }\n\n const itemStyles: React.CSSProperties = {\n display: 'flex',\n };\n\n const repeaterStyle: React.CSSProperties = {\n display: 'flex',\n overflow: `${minVizWidth ? 'auto' : 'hidden'} ${minVizHeight ? 'auto' : 'hidden'}`,\n };\n\n let vizHeight = height;\n let vizWidth = width;\n\n const resolvedOrientation = this.getOrientation();\n\n switch (resolvedOrientation) {\n case VizOrientation.Horizontal:\n const defaultVizHeight = (height + itemSpacing) / values.length - itemSpacing;\n repeaterStyle.flexDirection = 'column';\n repeaterStyle.height = `${height}px`;\n repeaterStyle.overflowX = 'hidden';\n repeaterStyle.scrollbarWidth = 'thin';\n itemStyles.marginBottom = `${itemSpacing}px`;\n vizWidth = width;\n vizHeight = clamp(defaultVizHeight, minVizHeight ?? 0, maxVizHeight ?? defaultVizHeight);\n break;\n case VizOrientation.Vertical:\n repeaterStyle.flexDirection = 'row';\n repeaterStyle.justifyContent = 'space-between';\n repeaterStyle.overflowY = 'hidden';\n itemStyles.marginRight = `${itemSpacing}px`;\n vizHeight = height;\n vizWidth = Math.max(width / values.length - itemSpacing + itemSpacing / values.length, minVizWidth ?? 0);\n }\n\n itemStyles.width = `${vizWidth}px`;\n itemStyles.height = `${vizHeight}px`;\n\n const alignmentFactors = getAlignmentFactors ? getAlignmentFactors(values, vizWidth, vizHeight) : ({} as D);\n\n return (\n <div style={repeaterStyle}>\n {values.map((value, index) => {\n return (\n <div key={index} style={getItemStylesForIndex(itemStyles, index, values.length)}>\n {renderValue({\n value,\n width: vizWidth,\n height: vizHeight,\n alignmentFactors,\n orientation: resolvedOrientation,\n count: values.length,\n })}\n </div>\n );\n })}\n </div>\n );\n }\n}\n\n/*\n * Removes any padding on the last item\n */\nfunction getItemStylesForIndex(itemStyles: CSSProperties, index: number, length: number): CSSProperties {\n if (index === length - 1) {\n return {\n ...itemStyles,\n marginRight: 0,\n marginBottom: 0,\n };\n }\n return itemStyles;\n}\n","import { PanelModel } from '@grafana/data';\nimport { SceneDataTransformer, VizPanel } from '@grafana/scenes';\nimport { DataSourceRef, DataTransformerConfig } from '@grafana/schema';\n\nimport { getPanelIdForVizPanel, getQueryRunnerFor } from './utils';\n\nexport class PanelModelCompatibilityWrapper implements PanelModel {\n constructor(private _vizPanel: VizPanel) {}\n\n public get id() {\n const id = getPanelIdForVizPanel(this._vizPanel);\n\n if (isNaN(id)) {\n console.error('VizPanel key could not be translated to a legacy numeric panel id', this._vizPanel);\n return 0;\n }\n\n return id;\n }\n\n public get description() {\n return this._vizPanel.state.description;\n }\n\n public get type() {\n return this._vizPanel.state.pluginId;\n }\n\n public get title() {\n return this._vizPanel.state.title;\n }\n\n public get transformations() {\n if (this._vizPanel.state.$data instanceof SceneDataTransformer) {\n return this._vizPanel.state.$data.state.transformations as DataTransformerConfig[];\n }\n\n return [];\n }\n\n public get targets() {\n const queryRunner = getQueryRunnerFor(this._vizPanel);\n if (!queryRunner) {\n return [];\n }\n\n return queryRunner.state.queries;\n }\n\n public get datasource(): DataSourceRef | null | undefined {\n const queryRunner = getQueryRunnerFor(this._vizPanel);\n return queryRunner?.state.datasource;\n }\n\n public get options() {\n return this._vizPanel.state.options;\n }\n\n public get fieldConfig() {\n return this._vizPanel.state.fieldConfig;\n }\n\n public get pluginVersion() {\n return this._vizPanel.state.pluginVersion;\n }\n}\n","export interface Threshold {\n value: number;\n color: string;\n /**\n * Warning, Error, LowLow, Low, OK, High, HighHigh etc\n */\n state?: string;\n}\n\n/**\n * Display mode\n */\nexport enum ThresholdsMode {\n Absolute = 'absolute',\n /**\n * between 0 and 1 (based on min/max)\n */\n Percentage = 'percentage',\n}\n\n/**\n * Config that is passed to the ThresholdsEditor\n */\nexport interface ThresholdsConfig {\n mode: ThresholdsMode;\n\n /**\n * Must be sorted by 'value', first value is always -Infinity\n */\n steps: Threshold[];\n}\n","import { type ComponentTypeWithExtensionMeta } from '@grafana/data';\n\nexport type UsePluginComponentsOptions = {\n extensionPointId: string;\n limitPerPlugin?: number;\n};\n\nexport type UsePluginComponentsResult<Props = {}> = {\n components: Array<ComponentTypeWithExtensionMeta<Props>>;\n isLoading: boolean;\n};\n\nexport type UsePluginComponents<Props extends object = {}> = (\n options: UsePluginComponentsOptions\n) => UsePluginComponentsResult<Props>;\n\nlet singleton: UsePluginComponents | undefined;\n\nexport function setPluginComponentsHook(hook: UsePluginComponents): void {\n // We allow overriding the hook in tests\n if (singleton && process.env.NODE_ENV !== 'test') {\n throw new Error('setPluginComponentsHook() function should only be called once, when Grafana is starting.');\n }\n singleton = hook;\n}\n\nexport function usePluginComponents<Props extends object = {}>(\n options: UsePluginComponentsOptions\n): UsePluginComponentsResult<Props> {\n if (!singleton) {\n throw new Error('setPluginComponentsHook(options) can only be used after the Grafana instance has started.');\n }\n return singleton(options) as UsePluginComponentsResult<Props>;\n}\n","export const ALL_OPTION_VALUE = '__GRAFANA_INTERNAL_MULTICOMBOBOX_ALL_OPTION__';\n\nexport type ComboboxOption<T extends string | number = string> = {\n label?: string;\n value: T;\n description?: string;\n group?: string;\n infoOption?: boolean;\n};\n","import { PluginExtensionFunction } from '@grafana/data';\n\nexport type UsePluginFunctionsOptions = {\n extensionPointId: string;\n limitPerPlugin?: number;\n};\n\nexport type UsePluginFunctionsResult<Signature> = {\n isLoading: boolean;\n functions: Array<PluginExtensionFunction<Signature>>;\n};\n\nexport type UsePluginFunctions<T> = (options: UsePluginFunctionsOptions) => UsePluginFunctionsResult<T>;\n\nlet singleton: UsePluginFunctions<unknown> | undefined;\n\nexport function setPluginFunctionsHook(hook: UsePluginFunctions<unknown>): void {\n // We allow overriding the registry in tests\n if (singleton && process.env.NODE_ENV !== 'test') {\n throw new Error('setUsePluginFunctionsHook() function should only be called once, when Grafana is starting.');\n }\n singleton = hook;\n}\n\nexport function usePluginFunctions<T>(options: UsePluginFunctionsOptions): UsePluginFunctionsResult<T> {\n if (!singleton) {\n throw new Error('usePluginFunctions(options) can only be used after the Grafana instance has started.');\n }\n return singleton(options) as UsePluginFunctionsResult<T>;\n}\n","import { CoreApp } from '@grafana/data';\n\nimport { EchoEvent, EchoEventType } from '../services/EchoSrv';\n\n/**\n * Describes the basic dashboard information that can be passed as the meta\n * analytics payload.\n *\n * @public\n */\nexport interface DashboardInfo {\n /** @deprecated -- use UID not internal ID */\n dashboardId: number;\n dashboardUid: string;\n dashboardName: string;\n folderName?: string;\n}\n\n/**\n * Describes the data request information passed as the meta analytics payload.\n *\n * @public\n */\nexport interface DataRequestInfo extends Partial<DashboardInfo> {\n source?: CoreApp | string;\n datasourceName: string;\n datasourceId: number;\n datasourceUid: string;\n datasourceType: string;\n panelId?: number;\n panelPluginId?: string;\n panelName?: string;\n duration: number;\n error?: string;\n dataSize?: number;\n}\n\n/**\n * The meta analytics events that can be added to the echo service.\n *\n * @public\n */\nexport enum MetaAnalyticsEventName {\n DashboardView = 'dashboard-view',\n DataRequest = 'data-request',\n}\n\n/**\n * Describes the payload of a dashboard view event.\n *\n * @public\n */\nexport interface DashboardViewEventPayload extends DashboardInfo {\n eventName: MetaAnalyticsEventName.DashboardView;\n}\n\n/**\n * Describes the payload of a data request event.\n *\n * @public\n */\nexport interface DataRequestEventPayload extends DataRequestInfo {\n eventName: MetaAnalyticsEventName.DataRequest;\n totalQueries?: number;\n cachedQueries?: number;\n}\n\n/**\n * Describes the meta analytics payload passed with the {@link MetaAnalyticsEvent}\n *\n * @public\n */\nexport type MetaAnalyticsEventPayload = DashboardViewEventPayload | DataRequestEventPayload;\n\n/**\n * Describes meta analytics event with predefined {@link EchoEventType.EchoEventType} type.\n *\n * @public\n */\nexport interface MetaAnalyticsEvent extends EchoEvent<EchoEventType.MetaAnalytics, MetaAnalyticsEventPayload> {}\n\n/**\n * Describes the payload of a pageview event.\n *\n * @public\n */\nexport interface PageviewEchoEventPayload {\n page: string;\n}\n\n/**\n * Describes pageview event with predefined {@link EchoEventType.EchoEventType} type.\n *\n * @public\n */\nexport type PageviewEchoEvent = EchoEvent<EchoEventType.Pageview, PageviewEchoEventPayload>;\n\n/**\n * Describes the payload of a user interaction event.\n *\n * @public\n */\nexport interface InteractionEchoEventPayload {\n interactionName: string;\n properties?: Record<string, any>;\n}\n\n/**\n * Describes interaction event with predefined {@link EchoEventType.EchoEventType} type.\n *\n * @public\n */\nexport type InteractionEchoEvent = EchoEvent<EchoEventType.Interaction, InteractionEchoEventPayload>;\n\n/**\n * Describes the payload of an experimentview event.\n *\n * @public\n */\nexport interface ExperimentViewEchoEventPayload {\n experimentId: string;\n experimentGroup: string;\n experimentVariant: string;\n}\n\n/**\n * Describes experimentview event with predefined {@link EchoEventType.EchoEventType} type.\n *\n * @public\n */\nexport type ExperimentViewEchoEvent = EchoEvent<EchoEventType.ExperimentView, ExperimentViewEchoEventPayload>;\n\n/**\n * Pageview event typeguard.\n *\n * @public\n */\nexport const isPageviewEvent = (event: EchoEvent): event is PageviewEchoEvent => {\n return Boolean(event.payload.page);\n};\n\n/**\n * Interaction event typeguard.\n *\n * @public\n */\nexport const isInteractionEvent = (event: EchoEvent): event is InteractionEchoEvent => {\n return Boolean(event.payload.interactionName);\n};\n\n/**\n * Experimentview event typeguard.\n *\n * @public\n */\nexport const isExperimentViewEvent = (event: EchoEvent): event is ExperimentViewEchoEvent => {\n return Boolean(event.payload.experimentId);\n};\n","/**\n * @deprecated\n * This is defined on the theme object now. Use `theme.visualization.palette` instead.\n */\nexport const classicColors = [\n '#7EB26D', // 0: pale green\n '#EAB839', // 1: mustard\n '#6ED0E0', // 2: light blue\n '#EF843C', // 3: orange\n '#E24D42', // 4: red\n '#1F78C1', // 5: ocean\n '#BA43A9', // 6: purple\n '#705DA0', // 7: violet\n '#508642', // 8: dark green\n '#CCA300', // 9: dark sand\n '#447EBC',\n '#C15C17',\n '#890F02',\n '#0A437C',\n '#6D1F62',\n '#584477',\n '#B7DBAB',\n '#F4D598',\n '#70DBED',\n '#F9BA8F',\n '#F29191',\n '#82B5D8',\n '#E5A8E2',\n '#AEA2E0',\n '#629E51',\n '#E5AC0E',\n '#64B0C8',\n '#E0752D',\n '#BF1B00',\n '#0A50A1',\n '#962D82',\n '#614D93',\n '#9AC48A',\n '#F2C96D',\n '#65C5DB',\n '#F9934E',\n '#EA6460',\n '#5195CE',\n '#D683CE',\n '#806EB7',\n '#3F6833',\n '#967302',\n '#2F575E',\n '#99440A',\n '#58140C',\n '#052B51',\n '#511749',\n '#3F2B5B',\n '#E0F9D7',\n '#FCEACA',\n '#CFFAFF',\n '#F9E2D2',\n '#FCE2DE',\n '#BADFF4',\n '#F9D9F9',\n '#DEDAF7',\n];\n","import { get } from 'lodash';\n\nimport { t } from '@grafana/i18n';\nimport { FetchError, isFetchError } from '@grafana/runtime';\n\nimport { getErrorCode } from '../misc';\n\nexport const ERROR_NEWER_CONFIGURATION = 'alerting.notifications.conflict' as const;\nexport const ERROR_ROUTES_MATCHER_CONFLICT = 'alerting.notifications.routes.conflictingMatchers' as const;\n\nexport type ApiMachineryErrorResponse = FetchError<ApiMachineryError>;\n\n// these are known error IDs, used by both Kubernetes API and the front-end (using error `cause`).\nexport type KnownErrorCodes = typeof ERROR_NEWER_CONFIGURATION;\n// Kubernetes API Machinery errors are a superset of supported errors codes.\nexport type KnownMachineryErrorCodes = KnownErrorCodes | typeof ERROR_ROUTES_MATCHER_CONFLICT;\n\n/**\n * This function gives us the opportunity to translate or transform error codes that are returned from the Kubernetes APIs\n */\nexport function getErrorMessageFromApiMachineryErrorResponse(error: ApiMachineryErrorResponse): string | undefined {\n const code = getErrorCode(error);\n if (!code) {\n return error.data.message;\n }\n\n const errorMessageMap: Record<KnownMachineryErrorCodes, string | undefined> = {\n [ERROR_NEWER_CONFIGURATION]: getErrorMessageFromCode(code),\n [ERROR_ROUTES_MATCHER_CONFLICT]: t(\n 'alerting.policies.update-errors.routes.conflictingMatchers',\n 'Cannot add or update route: matchers conflict with an external routing tree if we merged matchers {{-matchers}}. This would make the route unreachable.',\n {\n matchers:\n error.data.details?.causes?.map((cause) => cause.message).join(', ') ??\n t('alerting.policies.update-errors.routes.unknownMatchers', '<unknown matchers>'),\n }\n ),\n };\n\n // @ts-expect-error this allows the typechecker to warn us about forgetting to handle some KnownMachineryErrors and still return \"undefined\" for unknown codes;\n return errorMessageMap[code];\n}\n\n/**\n * This function gives us the opportunity to translate or transform error codes\n */\nexport function getErrorMessageFromCode(code: string): string | undefined {\n const errorMessageMap: Record<KnownErrorCodes, string> = {\n [ERROR_NEWER_CONFIGURATION]: t(\n 'alerting.policies.update-errors.conflict',\n 'The notification policy tree has been updated by another user.'\n ),\n };\n\n // @ts-expect-error this allows the typechecker to warn us about forgetting to handle some KnownErrors and still return \"undefined\" for unknown codes;\n return errorMessageMap[code];\n}\n\nexport type ApiMachineryError = {\n kind: 'Status';\n apiVersion: string;\n code: number;\n details?: {\n uid: string;\n name?: string;\n group?: string;\n kind?: string;\n retryAfterSeconds?: number;\n // https://github.com/kubernetes/apimachinery/blob/v0.33.2/pkg/apis/meta/v1/types.go#L1020-L1040\n causes?: Array<{\n message?: string;\n field?: string;\n reason?: string;\n }>;\n };\n status: 'Failure';\n metadata?: Record<string, unknown>;\n message: string;\n reason: string;\n};\n\nexport function isApiMachineryError(error: unknown): error is ApiMachineryErrorResponse {\n return isFetchError(error) && get(error.data, 'kind') === 'Status' && get(error.data, 'status') === 'Failure';\n}\n","import { difference } from 'lodash';\nimport { PureComponent } from 'react';\n\nimport { fieldReducers, SelectableValue, FieldReducerInfo } from '@grafana/data';\n\nimport { Select } from '../Select/Select';\n\nexport interface Props {\n placeholder?: string;\n onChange: (stats: string[]) => void;\n stats: string[];\n allowMultiple?: boolean;\n defaultStat?: string;\n className?: string;\n width?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n inputId?: string;\n filterOptions?: (ext: FieldReducerInfo) => boolean;\n}\n\nexport class StatsPicker extends PureComponent<Props> {\n static defaultProps: Partial<Props> = {\n allowMultiple: false,\n };\n\n componentDidMount() {\n this.checkInput();\n }\n\n componentDidUpdate(prevProps: Props) {\n this.checkInput();\n }\n\n checkInput = () => {\n const { stats, allowMultiple, defaultStat, onChange } = this.props;\n\n const current = fieldReducers.list(stats);\n if (current.length !== stats.length) {\n const found = current.map((v) => v.id);\n const notFound = difference(stats, found);\n console.warn('Unknown stats', notFound, stats);\n onChange(current.map((stat) => stat.id));\n }\n\n // Make sure there is only one\n if (!allowMultiple && stats.length > 1) {\n console.warn('Removing extra stat', stats);\n onChange([stats[0]]);\n }\n\n // Set the reducer from callback\n if (defaultStat && stats.length < 1) {\n onChange([defaultStat]);\n }\n };\n\n onSelectionChange = (item: SelectableValue<string>) => {\n const { onChange } = this.props;\n if (Array.isArray(item)) {\n onChange(item.map((v) => v.value));\n } else {\n onChange(item && item.value ? [item.value] : []);\n }\n };\n\n render() {\n const { stats, allowMultiple, defaultStat, placeholder, className, menuPlacement, width, inputId, filterOptions } =\n this.props;\n\n const select = fieldReducers.selectOptions(stats, filterOptions);\n return (\n <Select\n value={select.current}\n className={className}\n isClearable={!defaultStat}\n isMulti={allowMultiple}\n width={width}\n isSearchable={true}\n options={select.options}\n placeholder={placeholder}\n onChange={this.onSelectionChange}\n menuPlacement={menuPlacement}\n inputId={inputId}\n />\n );\n }\n}\n","import { useCallback } from 'react';\n\nimport { Trans } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { Button, Stack } from '@grafana/ui';\n\nimport { PanelEditorTabId } from './types';\n\nexport interface Props {\n message: string;\n}\n\nexport function PanelNotSupported({ message }: Props): JSX.Element {\n const onBackToQueries = useCallback(() => {\n locationService.partial({ tab: PanelEditorTabId.Query });\n }, []);\n\n return (\n <div style={{ marginTop: '100px' }}>\n <Stack direction=\"row\" justifyContent=\"center\">\n <Stack direction=\"column\" gap={2}>\n <h2>{message}</h2>\n <div>\n <Button size=\"md\" variant=\"secondary\" icon=\"arrow-left\" onClick={onBackToQueries}>\n <Trans i18nKey=\"dashboard.panel-not-supported.go-back-to-queries\">Go back to Queries</Trans>\n </Button>\n </div>\n </Stack>\n </Stack>\n </div>\n );\n}\n","import { DocsId } from '@grafana/data';\n\n// TODO: Documentation links\nconst DOCS_LINKS: Record<DocsId, string> = {\n [DocsId.Transformations]: 'https://grafana.com/docs/grafana/latest/panels/transformations',\n [DocsId.FieldConfig]: 'https://grafana.com/docs/grafana/latest/panels/field-configuration-options/',\n [DocsId.FieldConfigOverrides]:\n 'https://grafana.com/docs/grafana/latest/panels/field-configuration-options/#override-a-field',\n};\n\nexport const getDocsLink = (id: DocsId) => DOCS_LINKS[id];\n","import { css } from '@emotion/css';\nimport { FormEventHandler, KeyboardEventHandler, ReactNode } from 'react';\n\nimport { DocsId, GrafanaTheme2, LocalStorageValueProvider, TransformerRegistryItem } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, Card, Container, Input, Stack, useStyles2 } from '@grafana/ui';\nimport { getDocsLink } from 'app/core/utils/docsLinks';\nimport { PluginStateInfo } from 'app/features/plugins/components/PluginStateInfo';\n\nconst LOCAL_STORAGE_KEY = 'dashboard.components.TransformationEditor.featureInfoBox.isDismissed';\n\ninterface TransformationPickerProps {\n noTransforms: boolean;\n search: string;\n onSearchChange: FormEventHandler<HTMLInputElement>;\n onSearchKeyDown: KeyboardEventHandler<HTMLInputElement>;\n onTransformationAdd: Function;\n suffix: ReactNode;\n xforms: TransformerRegistryItem[];\n}\n\nexport function TransformationPicker(props: TransformationPickerProps) {\n const { noTransforms, search, xforms, onSearchChange, onSearchKeyDown, onTransformationAdd, suffix } = props;\n\n return (\n <Stack direction=\"column\">\n {noTransforms && (\n <Container grow={1}>\n <LocalStorageValueProvider<boolean> storageKey={LOCAL_STORAGE_KEY} defaultValue={false}>\n {(isDismissed, onDismiss) => {\n if (isDismissed) {\n return null;\n }\n\n return (\n <Alert\n title={t('dashboard.transformation-picker.title-transformations', 'Transformations')}\n severity=\"info\"\n onRemove={() => {\n onDismiss(true);\n }}\n >\n <p>\n <Trans i18nKey=\"dashboard.transformation-picker.info\">\n Transformations allow you to join, calculate, re-order, hide, and rename your query results before\n they are visualized.\n </Trans>\n <br />\n <Trans i18nKey=\"dashboard.transformation-picker.info-graph-not-suitable\">\n Many transforms are not suitable if you're using the Graph visualization, as it currently\n only supports time series data.\n </Trans>\n <br />\n <Trans i18nKey=\"dashboard.transformation-picker.info-switch-to-table\">\n It can help to switch to the Table visualization to understand what a transformation is\n doing.{' '}\n </Trans>\n </p>\n <a\n href={getDocsLink(DocsId.Transformations)}\n className=\"external-link\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Trans i18nKey=\"dashboard.transformation-picker.read-more\">Read more</Trans>\n </a>\n </Alert>\n );\n }}\n </LocalStorageValueProvider>\n </Container>\n )}\n <Input\n data-testid={selectors.components.Transforms.searchInput}\n value={search ?? ''}\n autoFocus={!noTransforms}\n placeholder={t(\n 'dashboard.transformation-picker.placeholder-search-for-transformation',\n 'Search for transformation'\n )}\n onChange={onSearchChange}\n onKeyDown={onSearchKeyDown}\n suffix={suffix}\n />\n {xforms.map((t) => {\n return (\n <TransformationCard\n key={t.name}\n transform={t}\n onClick={() => {\n onTransformationAdd({ value: t.id });\n }}\n />\n );\n })}\n </Stack>\n );\n}\n\ninterface TransformationCardProps {\n transform: TransformerRegistryItem;\n onClick: () => void;\n}\n\nfunction TransformationCard({ transform, onClick }: TransformationCardProps) {\n const styles = useStyles2(getStyles);\n return (\n <Card\n noMargin\n className={styles.card}\n data-testid={selectors.components.TransformTab.newTransform(transform.name)}\n onClick={onClick}\n >\n <Card.Heading>{transform.name}</Card.Heading>\n <Card.Description>{transform.description}</Card.Description>\n {transform.state && (\n <Card.Tags>\n <PluginStateInfo state={transform.state} />\n </Card.Tags>\n )}\n </Card>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n card: css({\n margin: '0',\n padding: `${theme.spacing(1)}`,\n }),\n };\n}\n","import { DragDropContext, Droppable, DropResult } from '@hello-pangea/dnd';\nimport { ChangeEvent, createRef, RefObject } from 'react';\nimport * as React from 'react';\nimport { Unsubscribable } from 'rxjs';\n\nimport {\n DataFrame,\n DataQueryRequest,\n DataTransformerConfig,\n PanelData,\n SelectableValue,\n standardTransformersRegistry,\n TransformerCategory,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport {\n Button,\n ConfirmModal,\n Container,\n Themeable,\n withTheme,\n IconButton,\n ButtonGroup,\n ScrollContainer,\n} from '@grafana/ui';\nimport config from 'app/core/config';\nimport { EmptyTransformationsMessage } from 'app/features/dashboard-scene/panel-edit/PanelDataPane/EmptyTransformationsMessage';\n\nimport { PanelModel } from '../../state/PanelModel';\nimport { PanelNotSupported } from '../PanelEditor/PanelNotSupported';\n\nimport { TransformationOperationRows } from './TransformationOperationRows';\nimport { TransformationPicker } from './TransformationPicker';\nimport { TransformationPickerNg } from './TransformationPickerNg';\nimport { TransformationsEditorTransformation } from './types';\n\ninterface TransformationsEditorProps extends Themeable {\n panel: PanelModel;\n}\n\nexport const VIEW_ALL_VALUE = 'viewAll';\nexport type viewAllType = 'viewAll';\nexport type FilterCategory = TransformerCategory | viewAllType;\n\nexport interface TransformationData {\n request?: DataQueryRequest;\n series: DataFrame[];\n annotations?: DataFrame[];\n}\n\ninterface State {\n data: TransformationData;\n transformations: TransformationsEditorTransformation[];\n search: string;\n showPicker?: boolean;\n scrollTop?: number;\n showRemoveAllModal?: boolean;\n selectedFilter?: FilterCategory;\n showIllustrations?: boolean;\n}\n\nclass UnThemedTransformationsEditor extends React.PureComponent<TransformationsEditorProps, State> {\n subscription?: Unsubscribable;\n ref: RefObject<HTMLDivElement>;\n\n constructor(props: TransformationsEditorProps) {\n super(props);\n const transformations = props.panel.transformations || [];\n\n const ids = this.buildTransformationIds(transformations);\n this.state = {\n transformations: transformations.map((t, i) => ({\n transformation: t,\n id: ids[i],\n })),\n data: {\n series: [],\n },\n search: '',\n selectedFilter: VIEW_ALL_VALUE,\n showIllustrations: true,\n };\n this.ref = createRef<HTMLDivElement>();\n }\n\n onSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n this.setState({ search: event.target.value });\n };\n\n onSearchKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n const { search } = this.state;\n if (search) {\n const lower = search.toLowerCase();\n const filtered = standardTransformersRegistry.list().filter((t) => {\n const txt = (t.name + t.description).toLowerCase();\n return txt.indexOf(lower) >= 0;\n });\n if (filtered.length > 0) {\n this.onTransformationAdd({ value: filtered[0].id });\n }\n }\n } else if (event.keyCode === 27) {\n // Escape key\n this.setState({ search: '', showPicker: false });\n event.stopPropagation(); // don't exit the editor\n }\n };\n\n buildTransformationIds(transformations: DataTransformerConfig[]) {\n const transformationCounters: Record<string, number> = {};\n const transformationIds: string[] = [];\n\n for (let i = 0; i < transformations.length; i++) {\n const transformation = transformations[i];\n if (transformationCounters[transformation.id] === undefined) {\n transformationCounters[transformation.id] = 0;\n } else {\n transformationCounters[transformation.id] += 1;\n }\n transformationIds.push(`${transformations[i].id}-${transformationCounters[transformations[i].id]}`);\n }\n return transformationIds;\n }\n\n componentDidMount() {\n this.subscription = this.props.panel\n .getQueryRunner()\n .getData({ withTransforms: false, withFieldConfig: false })\n .subscribe({\n next: (panelData: PanelData) => this.setState({ data: panelData }),\n });\n }\n\n componentWillUnmount() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n componentDidUpdate(prevProps: Readonly<TransformationsEditorProps>, prevState: Readonly<State>): void {\n if (config.featureToggles.transformationsRedesign) {\n const prevHasTransforms = prevState.transformations.length > 0;\n const prevShowPicker = !prevHasTransforms || prevState.showPicker;\n\n const currentHasTransforms = this.state.transformations.length > 0;\n const currentShowPicker = !currentHasTransforms || this.state.showPicker;\n\n if (prevShowPicker !== currentShowPicker) {\n // kindOfZero will be a random number between 0 and 0.5. It will be rounded to 0 by the scrollable component.\n // We cannot always use 0 as it will not trigger a rerender of the scrollable component consistently\n // due to React changes detection algo.\n const kindOfZero = Math.random() / 2;\n\n this.setState({ scrollTop: currentShowPicker ? kindOfZero : Number.MAX_SAFE_INTEGER });\n }\n }\n\n if (prevState.scrollTop !== this.state.scrollTop) {\n this.ref.current?.scrollTo({ top: this.state.scrollTop });\n }\n }\n\n onChange(transformations: TransformationsEditorTransformation[]) {\n this.setState({ transformations });\n this.props.panel.setTransformations(transformations.map((t) => t.transformation));\n }\n\n // Transformation UIDs are stored in a name-X form. name is NOT unique hence we need to parse the IDs and increase X\n // for transformations with the same name\n getTransformationNextId = (name: string) => {\n const { transformations } = this.state;\n let nextId = 0;\n const existingIds = transformations.filter((t) => t.id.startsWith(name)).map((t) => t.id);\n\n if (existingIds.length !== 0) {\n nextId = Math.max(...existingIds.map((i) => parseInt(i.match(/\\d+/)![0], 10))) + 1;\n }\n\n return `${name}-${nextId}`;\n };\n\n onTransformationAdd = (selectable: SelectableValue<string>) => {\n let eventName = 'panel_editor_tabs_transformations_management';\n if (config.featureToggles.transformationsRedesign) {\n eventName = 'transformations_redesign_' + eventName;\n }\n\n reportInteraction(eventName, {\n action: 'add',\n transformationId: selectable.value,\n });\n const { transformations } = this.state;\n\n const nextId = this.getTransformationNextId(selectable.value!);\n this.setState({ search: '', showPicker: false });\n this.onChange([\n ...transformations,\n {\n id: nextId,\n transformation: {\n id: selectable.value as string,\n options: {},\n },\n },\n ]);\n };\n\n onTransformationChange = (idx: number, dataConfig: DataTransformerConfig) => {\n const { transformations } = this.state;\n const next = Array.from(transformations);\n let eventName = 'panel_editor_tabs_transformations_management';\n if (config.featureToggles.transformationsRedesign) {\n eventName = 'transformations_redesign_' + eventName;\n }\n\n reportInteraction(eventName, {\n action: 'change',\n transformationId: next[idx].transformation.id,\n });\n next[idx].transformation = dataConfig;\n this.onChange(next);\n };\n\n onTransformationRemove = (idx: number) => {\n const { transformations } = this.state;\n const next = Array.from(transformations);\n let eventName = 'panel_editor_tabs_transformations_management';\n if (config.featureToggles.transformationsRedesign) {\n eventName = 'transformations_redesign_' + eventName;\n }\n\n reportInteraction(eventName, {\n action: 'remove',\n transformationId: next[idx].transformation.id,\n });\n next.splice(idx, 1);\n this.onChange(next);\n };\n\n onTransformationRemoveAll = () => {\n this.onChange([]);\n this.setState({ showRemoveAllModal: false });\n };\n\n onDragEnd = (result: DropResult) => {\n const { transformations } = this.state;\n\n if (!result || !result.destination) {\n return;\n }\n\n const startIndex = result.source.index;\n const endIndex = result.destination.index;\n if (startIndex === endIndex) {\n return;\n }\n const update = Array.from(transformations);\n const [removed] = update.splice(startIndex, 1);\n update.splice(endIndex, 0, removed);\n this.onChange(update);\n };\n\n renderEmptyMessage = () => {\n return (\n <EmptyTransformationsMessage\n onShowPicker={() => {\n this.setState({ showPicker: true });\n }}\n ></EmptyTransformationsMessage>\n );\n };\n\n renderTransformationEditors = () => {\n const { data, transformations } = this.state;\n\n return (\n <DragDropContext onDragEnd={this.onDragEnd}>\n <Droppable droppableId=\"transformations-list\" direction=\"vertical\">\n {(provided) => {\n return (\n <div ref={provided.innerRef} {...provided.droppableProps}>\n <TransformationOperationRows\n configs={transformations}\n data={data}\n onRemove={this.onTransformationRemove}\n onChange={this.onTransformationChange}\n />\n {provided.placeholder}\n </div>\n );\n }}\n </Droppable>\n </DragDropContext>\n );\n };\n\n renderTransformsPicker() {\n let { showPicker } = this.state;\n const { transformations, search } = this.state;\n const { transformationsRedesign } = config.featureToggles;\n const noTransforms = !transformations?.length;\n const hasTransforms = transformations.length > 0;\n let suffix: React.ReactNode = null;\n let xforms = standardTransformersRegistry.list().sort((a, b) => (a.name > b.name ? 1 : b.name > a.name ? -1 : 0));\n\n // In the case we're not on the transformation\n // redesign and there are no transformations\n // then we show the picker in that case\n if (!transformationsRedesign && noTransforms) {\n showPicker = true;\n }\n\n if (this.state.selectedFilter !== VIEW_ALL_VALUE) {\n xforms = xforms.filter(\n (t) =>\n t.categories &&\n this.state.selectedFilter &&\n t.categories.has(this.state.selectedFilter as TransformerCategory)\n );\n }\n\n if (search) {\n const lower = search.toLowerCase();\n const filtered = xforms.filter((t) => {\n const txt = (t.name + t.description).toLowerCase();\n return txt.indexOf(lower) >= 0;\n });\n\n suffix = (\n <>\n {filtered.length} / {xforms.length} \n <IconButton\n name=\"times\"\n onClick={() => {\n this.setState({ search: '' });\n }}\n tooltip={t('dashboard.un-themed-transformations-editor.tooltip-clear-search', 'Clear search')}\n />\n </>\n );\n\n xforms = filtered;\n }\n\n if (!suffix && showPicker && !noTransforms) {\n suffix = (\n <IconButton\n name=\"times\"\n onClick={() => {\n this.setState({ showPicker: false });\n }}\n tooltip={t('dashboard.un-themed-transformations-editor.tooltip-close-picker', 'Close picker')}\n />\n );\n }\n\n // If we're in the transformation redesign\n // we have the add transformation add the\n // delete all control\n let picker = null;\n let deleteAll = null;\n if (transformationsRedesign) {\n picker = (\n <TransformationPickerNg\n noTransforms={noTransforms}\n search={search}\n suffix={suffix}\n xforms={xforms}\n onClose={() => this.setState({ showPicker: false })}\n onSelectedFilterChange={(filter) => this.setState({ selectedFilter: filter })}\n onShowIllustrationsChange={(showIllustrations) => this.setState({ showIllustrations })}\n onSearchChange={this.onSearchChange}\n onSearchKeyDown={this.onSearchKeyDown}\n onTransformationAdd={this.onTransformationAdd}\n data={this.state.data.series}\n selectedFilter={this.state.selectedFilter}\n showIllustrations={this.state.showIllustrations}\n />\n );\n\n deleteAll = (\n <>\n <Button\n icon=\"times\"\n variant=\"secondary\"\n onClick={() => this.setState({ showRemoveAllModal: true })}\n style={{ marginLeft: this.props.theme.spacing.md }}\n >\n <Trans i18nKey=\"dashboard.un-themed-transformations-editor.delete-all-transformations\">\n Delete all transformations\n </Trans>\n </Button>\n <ConfirmModal\n isOpen={Boolean(this.state.showRemoveAllModal)}\n title={t(\n 'dashboard.un-themed-transformations-editor.title-delete-all-transformations',\n 'Delete all transformations?'\n )}\n body={t(\n 'dashboard.un-theme-transformations-editor.body-delete-all-transformations',\n 'By deleting all transformations, you will go back to the main selection screen.'\n )}\n confirmText={t('dashboard.un-themed-transformations-editor.confirmText-delete-all', 'Delete all')}\n onConfirm={() => this.onTransformationRemoveAll()}\n onDismiss={() => this.setState({ showRemoveAllModal: false })}\n />\n </>\n );\n }\n // Otherwise we use the old picker\n else {\n picker = (\n <TransformationPicker\n noTransforms={noTransforms}\n search={search}\n suffix={suffix}\n xforms={xforms}\n onSearchChange={this.onSearchChange}\n onSearchKeyDown={this.onSearchKeyDown}\n onTransformationAdd={this.onTransformationAdd}\n />\n );\n }\n\n // Compose actions, if we're in the\n // redesign a \"Delete All Transformations\"\n // button (with confirm modal) is added\n const actions = (\n <ButtonGroup>\n <Button\n icon=\"plus\"\n variant=\"secondary\"\n onClick={() => {\n this.setState({ showPicker: true });\n }}\n data-testid={selectors.components.Transforms.addTransformationButton}\n >\n <Trans i18nKey=\"dashboard.un-themed-transformations-editor.actions.add-another-transformation\">\n Add another transformation\n </Trans>\n </Button>\n {deleteAll}\n </ButtonGroup>\n );\n\n return (\n <>\n {showPicker && picker}\n {\n // If the transformation redesign is enabled\n // and there are transforms then show actions\n (transformationsRedesign && hasTransforms && actions) ||\n // If it's not enabled only show actions when there are\n // transformations and the (old) picker isn't being shown\n (!transformationsRedesign && !showPicker && hasTransforms && actions)\n }\n </>\n );\n }\n\n render() {\n const {\n panel: { alert },\n } = this.props;\n const { transformations } = this.state;\n const hasTransforms = transformations.length > 0;\n\n // If there are any alerts then\n // we can't use transformations\n if (alert) {\n const message = hasTransforms\n ? \"Transformations can't be used on a panel with alerts\"\n : \"Transformations can't be used on a panel with existing alerts\";\n return <PanelNotSupported message={message} />;\n }\n\n return (\n <ScrollContainer ref={this.ref} minHeight=\"100%\">\n <Container padding=\"lg\">\n <div data-testid={selectors.components.TransformTab.content}>\n {!hasTransforms && config.featureToggles.transformationsRedesign && this.renderEmptyMessage()}\n {hasTransforms && this.renderTransformationEditors()}\n {this.renderTransformsPicker()}\n </div>\n </Container>\n </ScrollContainer>\n );\n }\n}\n\nexport const TransformationsEditor = withTheme(UnThemedTransformationsEditor);\n","import { css, cx } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Button, ButtonVariant } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\n\nexport interface Props {\n /** The current page index being shown. */\n currentPage: number;\n /** Number of total pages. */\n numberOfPages: number;\n /** Callback function for fetching the selected page. */\n onNavigate: (toPage: number) => void;\n /** When set to true and the pagination result is only one page it will not render the pagination at all. */\n hideWhenSinglePage?: boolean;\n /** Small version only shows the current page and the navigation buttons. */\n showSmallVersion?: boolean;\n className?: string;\n}\n\n/**\n * Component used for rendering a page selector below paginated content.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/navigation-pagination--docs\n */\nexport const Pagination = ({\n currentPage,\n numberOfPages,\n onNavigate,\n hideWhenSinglePage,\n showSmallVersion,\n className,\n}: Props) => {\n const styles = useStyles2(getStyles);\n const pageLengthToCondense = showSmallVersion ? 1 : 8;\n\n const pageButtons = useMemo(() => {\n const pages = [...new Array(numberOfPages).keys()];\n\n const condensePages = numberOfPages > pageLengthToCondense;\n const getListItem = (page: number, variant: 'primary' | 'secondary') => (\n <li key={page} className={styles.item}>\n <Button size=\"sm\" variant={variant} onClick={() => onNavigate(page)}>\n {page}\n </Button>\n </li>\n );\n\n return pages.reduce<JSX.Element[]>((pagesToRender, pageIndex) => {\n const page = pageIndex + 1;\n const variant: ButtonVariant = page === currentPage ? 'primary' : 'secondary';\n\n // The indexes at which to start and stop condensing pages\n const lowerBoundIndex = pageLengthToCondense;\n const upperBoundIndex = numberOfPages - pageLengthToCondense + 1;\n // When the indexes overlap one another this number is negative\n const differenceOfBounds = upperBoundIndex - lowerBoundIndex;\n\n const isFirstOrLastPage = page === 1 || page === numberOfPages;\n // This handles when the lowerBoundIndex < currentPage < upperBoundIndex\n const currentPageIsBetweenBounds =\n differenceOfBounds > -1 && currentPage >= lowerBoundIndex && currentPage <= upperBoundIndex;\n\n // Show ellipsis after that many pages\n const ellipsisOffset = showSmallVersion ? 1 : 3;\n\n // The offset to show more pages when currentPageIsBetweenBounds\n const pageOffset = showSmallVersion ? 0 : 2;\n\n if (condensePages) {\n if (\n isFirstOrLastPage ||\n (currentPage < lowerBoundIndex && page < lowerBoundIndex) ||\n (differenceOfBounds >= 0 && currentPage > upperBoundIndex && page > upperBoundIndex) ||\n (differenceOfBounds < 0 && currentPage >= lowerBoundIndex && page > upperBoundIndex) ||\n (currentPageIsBetweenBounds && page >= currentPage - pageOffset && page <= currentPage + pageOffset)\n ) {\n // Renders a button for the page\n pagesToRender.push(getListItem(page, variant));\n } else if (\n (page === lowerBoundIndex && currentPage < lowerBoundIndex) ||\n (page === upperBoundIndex && currentPage > upperBoundIndex) ||\n (currentPageIsBetweenBounds &&\n (page === currentPage - ellipsisOffset || page === currentPage + ellipsisOffset))\n ) {\n // Renders and ellipsis to represent condensed pages\n pagesToRender.push(\n <li key={page} className={styles.item}>\n <Icon className={styles.ellipsis} name=\"ellipsis-v\" data-testid=\"pagination-ellipsis-icon\" />\n </li>\n );\n }\n } else {\n pagesToRender.push(getListItem(page, variant));\n }\n return pagesToRender;\n }, []);\n }, [currentPage, numberOfPages, onNavigate, pageLengthToCondense, showSmallVersion, styles.ellipsis, styles.item]);\n\n if (hideWhenSinglePage && numberOfPages <= 1) {\n return null;\n }\n\n const previousPageLabel = t('grafana-ui.pagination.previous-page', 'previous page');\n const nextPageLabel = t('grafana-ui.pagination.next-page', 'next page');\n\n return (\n <div className={cx(styles.container, className)} role=\"navigation\">\n <ol>\n <li className={styles.item}>\n <Button\n aria-label={previousPageLabel}\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => onNavigate(currentPage - 1)}\n disabled={currentPage === 1}\n >\n <Icon name=\"angle-left\" />\n </Button>\n </li>\n {pageButtons}\n <li className={styles.item}>\n <Button\n aria-label={nextPageLabel}\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => onNavigate(currentPage + 1)}\n disabled={currentPage === numberOfPages}\n >\n <Icon name=\"angle-right\" />\n </Button>\n </li>\n </ol>\n </div>\n );\n};\n\nconst getStyles = () => {\n return {\n container: css({\n float: 'right',\n }),\n item: css({\n display: 'inline-block',\n paddingLeft: '10px',\n marginBottom: '5px',\n }),\n ellipsis: css({\n transform: 'rotate(90deg)',\n }),\n };\n};\n","import { DataFrameJSON, Labels, FieldType } from '@grafana/data';\n\nexport function newLetterRandomizer(): (v: string) => string {\n const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const lower = 'abcdefghijklmnopqrstuvwxyz';\n const charactersLength = upper.length;\n\n const history = new Map<string, string>();\n return (v: string) => {\n const old = history.get(v);\n if (old != null) {\n return old;\n }\n const r = [...v]\n .map((c) => {\n if (c.toLowerCase() && c !== c.toUpperCase()) {\n return lower.charAt(Math.floor(Math.random() * charactersLength));\n }\n if (c.toUpperCase() && c !== c.toUpperCase()) {\n return upper.charAt(Math.floor(Math.random() * charactersLength));\n }\n return c;\n })\n .join('');\n history.set(v, r);\n return r;\n };\n}\n\nexport interface Randomize {\n names?: boolean;\n labels?: boolean;\n values?: boolean;\n}\n\nexport function randomizeData(data: DataFrameJSON[], opts: Randomize): DataFrameJSON[] {\n if (!(opts.labels || opts.names || opts.values)) {\n return data;\n }\n\n const keepNames = new Set(['time', 'value', 'exemplar', 'traceid', 'id', 'uid', 'uuid', '__name__', 'le', 'name']);\n const rand = newLetterRandomizer();\n return data.map((s) => {\n let { schema, data } = s;\n if (schema && data) {\n if (opts.labels) {\n for (const f of schema.fields) {\n if (f.labels) {\n const labels: Labels = {};\n for (const [key, value] of Object.entries(f.labels)) {\n labels[key] = rand(value);\n }\n f.labels = labels;\n }\n }\n }\n if (opts.names) {\n for (const f of schema.fields) {\n if (f.name?.length && !keepNames.has(f.name.toLowerCase())) {\n f.name = rand(f.name);\n }\n }\n }\n\n // Change values\n if (opts.values) {\n schema.fields.forEach((f, idx) => {\n if (f.type === FieldType.string && data) {\n const v = data.values[idx].map((v) => rand(String(v)));\n data.values[idx] = v;\n }\n });\n }\n }\n return { schema, data };\n });\n}\n","// Libraries\nimport { css } from '@emotion/css';\nimport { MouseEvent } from 'react';\nimport * as React from 'react';\n\n// Components\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { IconName, IconType, IconSize, IconButton, useStyles2 } from '@grafana/ui';\n\ninterface Props {\n icon?: IconName;\n tooltip: string;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n href?: string;\n children?: React.ReactNode;\n iconType?: IconType;\n iconSize?: IconSize;\n}\n\nexport const DashNavButton = ({ icon, iconType, iconSize, tooltip, onClick, children }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.noBorderContainer}>\n {icon && (\n <IconButton\n name={icon}\n size={iconSize}\n iconType={iconType}\n tooltip={tooltip}\n tooltipPlacement=\"bottom\"\n onClick={onClick}\n />\n )}\n {children}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n noBorderContainer: css({\n padding: `0 ${theme.spacing(0.5)}`,\n display: 'flex',\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\nimport { clearButtonStyles } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\n\nexport interface FilterPillProps {\n selected: boolean;\n label: string;\n onClick: React.MouseEventHandler<HTMLElement>;\n icon?: IconName;\n}\n\n/**\n * A component used for quick toggling on/off filters. Mostly used in inline form components and transformation/query editors.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-filterpill--docs\n */\nexport const FilterPill = ({ label, selected, onClick, icon = 'check' }: FilterPillProps) => {\n const styles = useStyles2(getStyles);\n const clearButton = useStyles2(clearButtonStyles);\n return (\n <button type=\"button\" className={cx(clearButton, styles.wrapper, selected && styles.selected)} onClick={onClick}>\n <span>{label}</span>\n {selected && <Icon name={icon} className={styles.icon} data-testid=\"filter-pill-icon\" />}\n </button>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n wrapper: css({\n background: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.pill,\n padding: theme.spacing(0, 2),\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n lineHeight: theme.typography.bodySmall.lineHeight,\n color: theme.colors.text.secondary,\n display: 'flex',\n alignItems: 'center',\n height: '32px',\n position: 'relative',\n border: `1px solid ${theme.colors.background.secondary}`,\n whiteSpace: 'nowrap',\n\n '&:hover': {\n background: theme.colors.action.hover,\n color: theme.colors.text.primary,\n },\n }),\n selected: css({\n color: theme.colors.text.primary,\n background: theme.colors.action.selected,\n\n '&:hover': {\n background: theme.colors.action.focus,\n },\n }),\n icon: css({\n marginLeft: theme.spacing(0.5),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { useCallback, useId, useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { sceneGraph, SceneObjectBase, SceneObjectRef, SceneObjectState, SceneVariableSet } from '@grafana/scenes';\nimport { Box, Card, Stack, useStyles2 } from '@grafana/ui';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { dashboardEditActions } from '../../edit-pane/shared';\nimport { DashboardScene } from '../../scene/DashboardScene';\nimport { EditableDashboardElement, EditableDashboardElementInfo } from '../../scene/types/EditableDashboardElement';\n\nimport { EditableVariableType, getNextAvailableId, getVariableScene, getVariableTypeSelectOptions } from './utils';\n\nexport function openAddVariablePane(dashboard: DashboardScene) {\n const element = new VariableAdd({ dashboardRef: dashboard.getRef() });\n dashboard.state.editPane.selectObject(element, element.state.key!, { force: true, multi: false });\n}\n\nexport interface VariableAddState extends SceneObjectState {\n dashboardRef: SceneObjectRef<DashboardScene>;\n}\n\nexport class VariableAdd extends SceneObjectBase<VariableAddState> {}\n\nfunction useEditPaneOptions(\n this: VariableAddEditableElement,\n variableAdd: VariableAdd\n): OptionsPaneCategoryDescriptor[] {\n const id = useId();\n const options = useMemo(() => {\n return new OptionsPaneCategoryDescriptor({ title: '', id: 'variables' }).addItem(\n new OptionsPaneItemDescriptor({\n title: '',\n id,\n skipField: true,\n render: () => <VariableTypeSelection variableAdd={variableAdd} />,\n })\n );\n }, [variableAdd, id]);\n\n return [options];\n}\n\nexport class VariableAddEditableElement implements EditableDashboardElement {\n public readonly isEditableDashboardElement = true;\n public readonly typeName = 'Variable';\n\n public constructor(private variableAdd: VariableAdd) {}\n\n public getEditableElementInfo(): EditableDashboardElementInfo {\n return {\n typeName: t('dashboard.edit-pane.elements.variable-set', 'Variables'),\n icon: 'x',\n instanceName: t('dashboard.edit-pane.elements.variable-set', 'Variables'),\n };\n }\n\n public useEditPaneOptions = useEditPaneOptions.bind(this, this.variableAdd);\n}\n\nfunction VariableTypeSelection({ variableAdd }: { variableAdd: VariableAdd }) {\n const options = useMemo(() => getVariableTypeSelectOptions(), []);\n const styles = useStyles2(getStyles);\n\n const onAddVariable = useCallback(\n (type: EditableVariableType) => {\n const dashboard = variableAdd.state.dashboardRef.resolve();\n const variablesSet = sceneGraph.getVariables(dashboard);\n\n if (!(variablesSet instanceof SceneVariableSet)) {\n return;\n }\n\n const newVar = getVariableScene(type, { name: getNextAvailableId(type, variablesSet.state.variables ?? []) });\n dashboardEditActions.addVariable({ source: variablesSet, addedObject: newVar });\n dashboard.state.editPane.selectObject(newVar, newVar.state.key!, { force: true, multi: false });\n },\n [variableAdd]\n );\n\n return (\n <Stack direction=\"column\" gap={0}>\n <Box paddingBottom={1} display={'flex'}>\n <Trans i18nKey=\"dashboard.edit-pane.variables.select-type\">Choose variable type</Trans>\n </Box>\n <Stack direction=\"column\" gap={1}>\n {options.map((option) => (\n <Card\n noMargin\n isCompact\n onClick={() => onAddVariable(option.value!)}\n key={option.value}\n title={t('dashboard.edit-pane.variables.select-type-card-tooltip', 'Click to select type')}\n data-testid={selectors.components.PanelEditor.ElementEditPane.variableType(option.value!)}\n >\n <Card.Heading>{option.label}</Card.Heading>\n <Card.Description className={styles.cardDescription}>{option.description}</Card.Description>\n </Card>\n ))}\n </Stack>\n </Stack>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n cardDescription: css({\n fontSize: theme.typography.bodySmall.fontSize,\n marginTop: theme.spacing(0),\n }),\n };\n}\n","import { DataFrame, Field } from '../../../types/dataFrame';\n\nexport function nullToValue(frame: DataFrame) {\n return {\n ...frame,\n fields: frame.fields.map((field) => {\n const noValue = Number(field.config.noValue);\n\n if (!Number.isNaN(noValue)) {\n return nullToValueField(field, noValue);\n } else {\n return field;\n }\n }),\n };\n}\n\nexport function nullToValueField(field: Field, noValue: number) {\n const transformedVals = field.values.slice();\n\n for (let i = 0; i < transformedVals.length; i++) {\n if (transformedVals[i] === null) {\n transformedVals[i] = noValue;\n }\n }\n\n return {\n ...field,\n values: transformedVals,\n };\n}\n","import debounce from 'debounce-promise';\nimport { isNil } from 'lodash';\nimport { useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { AsyncSelect } from '@grafana/ui';\nimport { ServiceAccountDTO, ServiceAccountsState } from 'app/types/serviceaccount';\n\nexport interface Props {\n onSelected: (user: SelectableValue<ServiceAccountDTO>) => void;\n className?: string;\n inputId?: string;\n}\n\nexport const ServiceAccountPicker = ({ className, onSelected, inputId }: Props) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const search = useMemo(\n () =>\n debounce(\n async (query?: string) => {\n setIsLoading(true);\n\n if (isNil(query)) {\n query = '';\n }\n\n return getBackendSrv()\n .get(`/api/serviceaccounts/search?query=${query}&perpage=100`)\n .then((result: ServiceAccountsState) => {\n return result.serviceAccounts.map((sa) => ({\n id: sa.id,\n uid: sa.uid,\n value: sa,\n label: sa.login,\n imgUrl: sa.avatarUrl,\n login: sa.login,\n }));\n })\n .finally(() => {\n setIsLoading(false);\n });\n },\n 300,\n { leading: true }\n ),\n []\n );\n\n return (\n <div className=\"service-account-picker\" data-testid=\"serviceAccountPicker\">\n <AsyncSelect\n isClearable\n className={className}\n inputId={inputId}\n isLoading={isLoading}\n defaultOptions={true}\n loadOptions={search}\n onChange={onSelected}\n placeholder={t('service-account-picker.select-placeholder', 'Start typing to search for service accounts')}\n noOptionsMessage={t(\n 'service-account-picker.noOptionsMessage-no-service-accounts-found',\n 'No service accounts found'\n )}\n aria-label={t('service-account-picker.select-aria-label', 'Service account picker')}\n />\n </div>\n );\n};\n","import debounce from 'debounce-promise';\nimport { isNil } from 'lodash';\nimport { Component } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { AsyncSelect } from '@grafana/ui';\nimport { Team } from 'app/types/teams';\n\nexport interface Props {\n onSelected: (team: SelectableValue<Team>) => void;\n className?: string;\n teamId?: number;\n}\n\nexport interface State {\n isLoading: boolean;\n value?: SelectableValue<Team>;\n}\n\nexport class TeamPicker extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { isLoading: false };\n }\n\n componentDidMount(): void {\n const { teamId } = this.props;\n if (!teamId) {\n return;\n }\n\n getBackendSrv()\n .get(`/api/teams/${teamId}`)\n .then((team: Team) => {\n this.setState({\n value: {\n value: team,\n label: team.name,\n imgUrl: team.avatarUrl,\n },\n });\n });\n }\n\n search = debounce(\n async (query?: string) => {\n this.setState({ isLoading: true });\n\n if (isNil(query)) {\n query = '';\n }\n\n return getBackendSrv()\n .get(`/api/teams/search?perpage=100&page=1&query=${query}`)\n .then((result: { teams: Team[] }) => {\n const teams: Array<SelectableValue<Team>> = result.teams.map((team) => {\n return {\n value: team,\n label: team.name,\n imgUrl: team.avatarUrl,\n };\n });\n\n this.setState({ isLoading: false });\n return teams;\n });\n },\n 300,\n { leading: true }\n );\n\n render() {\n const { onSelected, className } = this.props;\n const { isLoading, value } = this.state;\n return (\n <div className=\"user-picker\" data-testid=\"teamPicker\">\n <AsyncSelect\n isLoading={isLoading}\n defaultOptions={true}\n loadOptions={this.search}\n value={value}\n onChange={onSelected}\n className={className}\n placeholder={t('team-picker.select-placeholder', 'Select a team')}\n noOptionsMessage={t('team-picker.noOptionsMessage-no-teams-found', 'No teams found')}\n aria-label={t('team-picker.select-aria-label', 'Team picker')}\n />\n </div>\n );\n }\n}\n","import debounce from 'debounce-promise';\nimport { isNil } from 'lodash';\nimport { useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { AsyncSelect } from '@grafana/ui';\nimport { OrgUser } from 'app/types/user';\n\nexport interface Props {\n onSelected: (user: SelectableValue<OrgUser>) => void;\n className?: string;\n inputId?: string;\n}\n\nexport const UserPicker = ({ className, onSelected, inputId }: Props) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const search = useMemo(\n () =>\n debounce(\n async (query?: string) => {\n setIsLoading(true);\n\n if (isNil(query)) {\n query = '';\n }\n\n return getBackendSrv()\n .get(`/api/org/users/lookup?query=${query}&limit=100`)\n .then((result: OrgUser[]) => {\n return result.map((user) => ({\n id: user.userId,\n uid: user.uid,\n value: user,\n label: user.login,\n imgUrl: user.avatarUrl,\n login: user.login,\n }));\n })\n .finally(() => {\n setIsLoading(false);\n });\n },\n 300,\n { leading: true }\n ),\n []\n );\n\n return (\n <div className=\"user-picker\" data-testid=\"userPicker\">\n <AsyncSelect\n isClearable\n className={className}\n inputId={inputId}\n isLoading={isLoading}\n defaultOptions={true}\n loadOptions={search}\n onChange={onSelected}\n placeholder={t('user-picker.select-placeholder', 'Start typing to search for user')}\n noOptionsMessage={t('user-picker.noOptionsMessage-no-users-found', 'No users found')}\n aria-label={t('user-picker.select-aria-label', 'User picker')}\n />\n </div>\n );\n};\n","import { AccessControlAction } from 'app/types/accessControl';\n\nexport type ResourcePermission = {\n id: number;\n resourceId?: string;\n isManaged: boolean;\n isInherited: boolean;\n isServiceAccount: boolean;\n userId?: number;\n userUid?: string;\n userLogin?: string;\n userAvatarUrl?: string;\n team?: string;\n teamId?: number;\n teamUid?: string;\n teamAvatarUrl?: string;\n builtInRole?: string;\n actions: AccessControlAction[];\n permission: string;\n roleName?: string;\n warning?: string;\n};\n\nexport type SetPermission = {\n userUid?: string;\n teamUid?: string;\n builtInRole?: string;\n permission: string;\n target: PermissionTarget;\n};\n\nexport enum PermissionTarget {\n None = 'None',\n Team = 'Team',\n User = 'User',\n ServiceAccount = 'ServiceAccount',\n BuiltInRole = 'builtInRole',\n}\nexport type Description = {\n assignments: Assignments;\n permissions: string[];\n};\n\nexport type Assignments = {\n users: boolean;\n serviceAccounts: boolean;\n teams: boolean;\n builtInRoles: boolean;\n};\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { OrgRole } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Select, Stack } from '@grafana/ui';\nimport { CloseButton } from 'app/core/components/CloseButton/CloseButton';\nimport { ServiceAccountPicker } from 'app/core/components/Select/ServiceAccountPicker';\nimport { TeamPicker } from 'app/core/components/Select/TeamPicker';\nimport { UserPicker } from 'app/core/components/Select/UserPicker';\n\nimport { Assignments, PermissionTarget, SetPermission } from './types';\n\nexport interface Props {\n title?: string;\n permissions: string[];\n assignments: Assignments;\n onCancel: () => void;\n onAdd: (state: SetPermission) => void;\n}\n\nexport const AddPermission = ({\n title = t('access-control.add-permission.title', 'Add permission for'),\n permissions,\n assignments,\n onAdd,\n onCancel,\n}: Props) => {\n const [target, setPermissionTarget] = useState<PermissionTarget>(PermissionTarget.None);\n const [teamUid, setTeamUid] = useState('');\n const [userUid, setUserUid] = useState('');\n const [builtInRole, setBuiltinRole] = useState('');\n const [permission, setPermission] = useState('');\n\n const targetOptions = useMemo(() => {\n const options = [];\n if (assignments.users) {\n options.push({ value: PermissionTarget.User, label: t('access-control.add-permission.user-label', 'User') });\n }\n if (assignments.serviceAccounts) {\n options.push({\n value: PermissionTarget.ServiceAccount,\n label: t('access-control.add-permission.serviceaccount-label', 'Service Account'),\n });\n }\n if (assignments.teams) {\n options.push({ value: PermissionTarget.Team, label: t('access-control.add-permission.team-label', 'Team') });\n }\n if (assignments.builtInRoles) {\n options.push({\n value: PermissionTarget.BuiltInRole,\n label: t('access-control.add-permission.role-label', 'Role'),\n });\n }\n return options;\n }, [assignments]);\n\n useEffect(() => {\n if (permissions.length > 0) {\n setPermission(permissions[0]);\n }\n }, [permissions]);\n\n const isValid = () =>\n (target === PermissionTarget.Team && teamUid) ||\n (target === PermissionTarget.User && userUid) ||\n (target === PermissionTarget.ServiceAccount && userUid) ||\n (PermissionTarget.BuiltInRole && OrgRole.hasOwnProperty(builtInRole));\n\n return (\n <div\n className=\"cta-form\"\n aria-label={t('access-control.add-permission.permissions-aria-label', 'Permissions slider')}\n >\n <CloseButton onClick={onCancel} />\n <h5>{title}</h5>\n\n <form\n name=\"addPermission\"\n onSubmit={(event) => {\n event.preventDefault();\n onAdd({ userUid, teamUid, builtInRole, permission, target });\n }}\n >\n <Stack gap={1} direction=\"row\">\n <Select\n aria-label={t('access-control.add-permission.role-select-aria-label', 'Role to add new permission to')}\n value={target}\n options={targetOptions}\n onChange={(v) => setPermissionTarget(v.value!)}\n disabled={targetOptions.length === 0}\n width=\"auto\"\n />\n\n {target === PermissionTarget.User && <UserPicker onSelected={(u) => setUserUid(u?.value?.uid || '')} />}\n\n {target === PermissionTarget.ServiceAccount && (\n <ServiceAccountPicker onSelected={(u) => setUserUid(u?.value?.uid || '')} />\n )}\n\n {target === PermissionTarget.Team && <TeamPicker onSelected={(t) => setTeamUid(t.value?.uid || '')} />}\n\n {target === PermissionTarget.BuiltInRole && (\n <Select\n aria-label={t('access-control.add-permission.built-in-aria-label', 'Built-in role picker')}\n options={Object.values(OrgRole)\n .filter((r) => r !== OrgRole.None)\n .map((r) => ({ value: r, label: r }))}\n onChange={(r) => setBuiltinRole(r.value || '')}\n width=\"auto\"\n />\n )}\n\n <Select\n aria-label={t('access-control.add-permission.level-aria-label', 'Permission level')}\n width=\"auto\"\n value={permissions.find((p) => p === permission)}\n options={permissions.map((p) => ({ label: p, value: p }))}\n onChange={(v) => setPermission(v.value || '')}\n />\n <Button type=\"submit\" disabled={!isValid()}>\n <Trans i18nKey=\"access-control.add-permissions.save\">Save</Trans>\n </Button>\n </Stack>\n </form>\n </div>\n );\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Box, Button, Icon, Select, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { ResourcePermission } from './types';\n\ninterface Props {\n item: ResourcePermission;\n permissionLevels: string[];\n canSet: boolean;\n onRemove: (item: ResourcePermission) => void;\n onChange: (item: ResourcePermission, permission: string) => void;\n}\n\nexport const PermissionListItem = ({ item, permissionLevels, canSet, onRemove, onChange }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <tr>\n <td>{getAvatar(item)}</td>\n <td>{getDescription(item)}</td>\n <td>\n {item.isInherited && (\n <em className={styles.inherited}>\n <Trans i18nKey=\"access-control.permission-list-item.inherited\">Inherited from folder</Trans>\n </em>\n )}\n </td>\n <td>\n <Select\n disabled={!canSet || !item.isManaged}\n onChange={(p) => onChange(item, p.value!)}\n value={permissionLevels.find((p) => p === item.permission)}\n options={permissionLevels.map((p) => ({ value: p, label: p }))}\n />\n </td>\n <td>\n {item.warning ? (\n <Tooltip\n content={\n <>\n <Box marginBottom={1}>{item.warning}</Box>\n {getPermissionInfo(item)}\n </>\n }\n >\n <Icon name=\"exclamation-triangle\" className={styles.warning} />\n </Tooltip>\n ) : (\n <Tooltip content={getPermissionInfo(item)}>\n <Icon name=\"info-circle\" />\n </Tooltip>\n )}\n </td>\n <td>\n {item.isManaged ? (\n <Button\n size=\"sm\"\n icon=\"times\"\n variant=\"destructive\"\n disabled={!canSet}\n onClick={() => onRemove(item)}\n aria-label={t(\n 'access-control.permission-list-item.remove-aria-label',\n 'Remove permission for {{identifier}}',\n {\n identifier: getName(item),\n }\n )}\n />\n ) : (\n <Tooltip\n content={\n item.isInherited\n ? t('access-control.permission-list-item.tooltip-inherited-permission', 'Inherited permission')\n : t('access-control.permission-list-item.tooltip-provisioned-permission', 'Provisioned permission')\n }\n >\n <Button\n size=\"sm\"\n icon=\"lock\"\n aria-label={t('access-control.permission-list-item.locked-aria-label', 'Locked permission indicator')}\n />\n </Tooltip>\n )}\n </td>\n </tr>\n );\n};\n\nconst getAvatar = (item: ResourcePermission) => {\n if (item.teamId) {\n return <img className=\"filter-table__avatar\" src={item.teamAvatarUrl} alt={`Avatar for team ${item.teamId}`} />;\n } else if (item.userId) {\n return <img className=\"filter-table__avatar\" src={item.userAvatarUrl} alt={`Avatar for user ${item.userId}`} />;\n }\n return <Icon size=\"xl\" name=\"shield\" />;\n};\n\nconst getName = (item: ResourcePermission) => {\n if (item.userId) {\n return item.userLogin;\n }\n if (item.teamId) {\n return item.team;\n }\n return item.builtInRole;\n};\n\nconst getDescription = (item: ResourcePermission) => {\n if (item.userId) {\n return <span key=\"name\">{item.userLogin} </span>;\n } else if (item.teamId) {\n return <span key=\"name\">{item.team} </span>;\n } else if (item.builtInRole) {\n return <span key=\"name\">{item.builtInRole} </span>;\n }\n return <span key=\"name\" />;\n};\n\nconst getPermissionInfo = (p: ResourcePermission) => `Actions: ${[...new Set(p.actions)].sort().join(' ')}`;\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n warning: css({\n color: theme.colors.warning.main,\n }),\n inherited: css({\n color: theme.colors.text.secondary,\n flexWrap: 'nowrap',\n }),\n});\n","import { useMemo } from 'react';\n\nimport { Trans } from '@grafana/i18n';\n\nimport { PermissionListItem } from './PermissionListItem';\nimport { ResourcePermission } from './types';\n\ninterface Props {\n title: string;\n compareKey: 'builtInRole' | 'userLogin' | 'team';\n items: ResourcePermission[];\n permissionLevels: string[];\n canSet: boolean;\n onRemove: (item: ResourcePermission) => void;\n onChange: (resourcePermission: ResourcePermission, permission: string) => void;\n}\n\nexport const PermissionList = ({ title, items, compareKey, permissionLevels, canSet, onRemove, onChange }: Props) => {\n const computed = useMemo(() => {\n const keep: { [key: string]: ResourcePermission } = {};\n for (let item of items) {\n const key = item[compareKey]!;\n if (!keep[key]) {\n keep[key] = item;\n continue;\n }\n\n if (item.actions.length > keep[key].actions.length) {\n keep[key] = item;\n continue;\n }\n\n // Determine which permission to keep for display\n // If the same permission has been applied more than once (i.e. one copy is ready kept)\n if (item.actions.length === keep[key].actions.length) {\n // replace the kept permission if it is managed and this item is not (i.e. it is inherited or provisioned)\n if (keep[key].isManaged && !item.isManaged) {\n keep[key] = item;\n }\n }\n }\n return Object.keys(keep).map((k) => keep[k]);\n }, [items, compareKey]);\n\n if (computed.length === 0) {\n return null;\n }\n\n return (\n <div>\n <table className=\"filter-table gf-form-group\">\n <thead>\n <tr>\n <th style={{ width: '1%' }} />\n <th>{title}</th>\n <th style={{ width: '1%' }} />\n\n <th style={{ width: '40%' }}>\n <Trans i18nKey=\"access-control.permission-list.permission\">Permission</Trans>\n </th>\n\n <th style={{ width: '1%' }} />\n <th style={{ width: '1%' }} />\n </tr>\n </thead>\n <tbody>\n {computed.map((item, index) => (\n <PermissionListItem\n item={item}\n onRemove={onRemove}\n onChange={onChange}\n canSet={canSet}\n key={`${index}-${item.userId}`}\n permissionLevels={permissionLevels}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n","import { css } from '@emotion/css';\nimport { sortBy } from 'lodash';\nimport { useEffect, useMemo, useState } from 'react';\nimport * as React from 'react';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Text, Box, Button, useStyles2, LoadingPlaceholder } from '@grafana/ui';\nimport { SlideDown } from 'app/core/components/Animations/SlideDown';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\nimport { DescendantCount } from 'app/features/browse-dashboards/components/BrowseActions/DescendantCount';\n\nimport { AddPermission } from './AddPermission';\nimport { PermissionList } from './PermissionList';\nimport { PermissionTarget, ResourcePermission, SetPermission, Description } from './types';\n\nconst EMPTY_PERMISSION = '';\n\nconst INITIAL_DESCRIPTION: Description = {\n permissions: [],\n assignments: {\n teams: false,\n users: false,\n serviceAccounts: false,\n builtInRoles: false,\n },\n};\n\ntype ResourceId = string | number;\ntype Type = 'users' | 'teams' | 'serviceAccounts' | 'builtInRoles';\n\nexport type Props = {\n buttonLabel?: string;\n emptyLabel?: string;\n addPermissionTitle?: string;\n resource: string;\n resourceId: ResourceId;\n canSetPermissions: boolean;\n getWarnings?: (items: ResourcePermission[]) => ResourcePermission[];\n epilogue?: (items: ResourcePermission[]) => React.ReactNode;\n};\n\nexport const Permissions = ({\n buttonLabel = t('access-control.permissions.add-label', 'Add a permission'),\n emptyLabel = t('access-control.permissions.no-permissions', 'There are no permissions'),\n resource,\n resourceId,\n canSetPermissions,\n addPermissionTitle,\n getWarnings,\n epilogue,\n}: Props) => {\n const styles = useStyles2(getStyles);\n const [isAdding, setIsAdding] = useState(false);\n const [desc, setDesc] = useState(INITIAL_DESCRIPTION);\n\n const [permissions, fetchPermissions] = useAsyncFn(async () => {\n let items = await getPermissions(resource, resourceId);\n if (getWarnings) {\n items = getWarnings(items);\n }\n return items;\n }, [resource, resourceId, getWarnings]);\n\n useEffect(() => {\n getDescription(resource).then((r) => {\n setDesc(r);\n return fetchPermissions();\n });\n }, [resource, fetchPermissions]);\n\n const onAdd = (state: SetPermission) => {\n let promise: Promise<void> | null = null;\n if (state.target === PermissionTarget.User || state.target === PermissionTarget.ServiceAccount) {\n promise = setUserPermission(resource, resourceId, state.userUid!, state.permission);\n } else if (state.target === PermissionTarget.Team) {\n promise = setTeamPermission(resource, resourceId, state.teamUid!, state.permission);\n } else if (state.target === PermissionTarget.BuiltInRole) {\n promise = setBuiltInRolePermission(resource, resourceId, state.builtInRole!, state.permission);\n }\n\n if (promise !== null) {\n promise.then(fetchPermissions);\n }\n };\n\n const onRemove = (item: ResourcePermission) => {\n let promise: Promise<void> | null = null;\n if (item.userUid) {\n promise = setUserPermission(resource, resourceId, item.userUid, EMPTY_PERMISSION);\n } else if (item.teamUid) {\n promise = setTeamPermission(resource, resourceId, item.teamUid, EMPTY_PERMISSION);\n } else if (item.builtInRole) {\n promise = setBuiltInRolePermission(resource, resourceId, item.builtInRole, EMPTY_PERMISSION);\n }\n\n if (promise !== null) {\n promise.then(fetchPermissions);\n }\n };\n\n const onChange = (item: ResourcePermission, permission: string) => {\n console.log('onChange', item, permission);\n if (item.permission === permission) {\n return;\n }\n if (item.userUid || item.isServiceAccount) {\n onAdd({ permission, userUid: item.userUid, target: PermissionTarget.User });\n } else if (item.teamUid) {\n onAdd({ permission, teamUid: item.teamUid, target: PermissionTarget.Team });\n } else if (item.builtInRole) {\n onAdd({ permission, builtInRole: item.builtInRole, target: PermissionTarget.BuiltInRole });\n }\n };\n\n const teams = useMemo(\n () =>\n sortBy(\n (permissions.value || []).filter((i) => i.teamId),\n ['team', 'isManaged']\n ),\n [permissions.value]\n );\n const users = useMemo(\n () =>\n sortBy(\n (permissions.value || []).filter((i) => i.userId && !i.isServiceAccount),\n ['userLogin', 'isManaged']\n ),\n [permissions.value]\n );\n const serviceAccounts = useMemo(\n () =>\n sortBy(\n (permissions.value || []).filter((i) => i.userId && i.isServiceAccount),\n ['userLogin', 'isManaged']\n ),\n [permissions.value]\n );\n const builtInRoles = useMemo(\n () =>\n sortBy(\n (permissions.value || []).filter((i) => i.builtInRole),\n ['builtInRole', 'isManaged']\n ),\n [permissions.value]\n );\n\n const titleRole = t('access-control.permissions.role', 'Role');\n const titleUser = t('access-control.permissions.user', 'User');\n const titleServiceAccount = t('access-control.permissions.serviceaccount', 'Service Account');\n const titleTeam = t('access-control.permissions.team', 'Team');\n\n if (permissions.loading) {\n return <LoadingPlaceholder text={t('access-control.permissions.loading', 'Loading permissions...')} />;\n }\n\n return (\n <>\n <div>\n {canSetPermissions && resource === 'folders' && (\n <Box paddingBottom={2}>\n <Trans i18nKey=\"access-control.permissions.permissions-change-warning\">\n This will change permissions for this folder and all its descendants. In total, this will affect:\n </Trans>\n <DescendantCount\n selectedItems={{\n folder: { [resourceId]: true },\n dashboard: {},\n panel: {},\n $all: false,\n }}\n />\n </Box>\n )}\n {permissions.value?.length === 0 && (\n <Box>\n <Text>{emptyLabel}</Text>\n </Box>\n )}\n <PermissionList\n title={titleRole}\n items={builtInRoles}\n compareKey={'builtInRole'}\n permissionLevels={desc.permissions}\n onChange={onChange}\n onRemove={onRemove}\n canSet={canSetPermissions}\n />\n <PermissionList\n title={titleUser}\n items={users}\n compareKey={'userLogin'}\n permissionLevels={desc.permissions}\n onChange={onChange}\n onRemove={onRemove}\n canSet={canSetPermissions}\n />\n <PermissionList\n title={titleServiceAccount}\n items={serviceAccounts}\n compareKey={'userLogin'}\n permissionLevels={desc.permissions}\n onChange={onChange}\n onRemove={onRemove}\n canSet={canSetPermissions}\n />\n <PermissionList\n title={titleTeam}\n items={teams}\n compareKey={'team'}\n permissionLevels={desc.permissions}\n onChange={onChange}\n onRemove={onRemove}\n canSet={canSetPermissions}\n />\n {canSetPermissions && (\n <>\n <Button\n className={styles.addPermissionButton}\n variant={'primary'}\n key=\"add-permission\"\n onClick={() => setIsAdding(true)}\n icon=\"plus\"\n >\n {buttonLabel}\n </Button>\n <SlideDown in={isAdding}>\n <AddPermission\n title={addPermissionTitle}\n onAdd={onAdd}\n permissions={desc.permissions}\n assignments={desc.assignments}\n onCancel={() => setIsAdding(false)}\n />\n </SlideDown>\n </>\n )}\n </div>\n {epilogue && epilogue(permissions.value || [])}\n </>\n );\n};\n\nconst getDescription = async (resource: string): Promise<Description> => {\n try {\n return await getBackendSrv().get(`/api/access-control/${resource}/description`);\n } catch (e) {\n console.error('failed to load resource description: ', e);\n return INITIAL_DESCRIPTION;\n }\n};\n\nconst getPermissions = (resource: string, resourceId: ResourceId): Promise<ResourcePermission[]> =>\n getBackendSrv().get(`/api/access-control/${resource}/${resourceId}`);\n\nconst setUserPermission = (resource: string, resourceId: ResourceId, userUid: string, permission: string) =>\n setPermission(resource, resourceId, 'users', userUid, permission);\n\nconst setTeamPermission = (resource: string, resourceId: ResourceId, teamUid: string, permission: string) =>\n setPermission(resource, resourceId, 'teams', teamUid, permission);\n\nconst setBuiltInRolePermission = (resource: string, resourceId: ResourceId, builtInRole: string, permission: string) =>\n setPermission(resource, resourceId, 'builtInRoles', builtInRole, permission);\n\nconst setPermission = (\n resource: string,\n resourceId: ResourceId,\n type: Type,\n typeId: number | string,\n permission: string\n): Promise<void> =>\n getBackendSrv().post(`/api/access-control/${resource}/${resourceId}/${type}/${typeId}`, { permission });\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n breakdown: css({\n ...theme.typography.bodySmall,\n color: theme.colors.text.secondary,\n marginBottom: theme.spacing(2),\n }),\n addPermissionButton: css({\n marginBottom: theme.spacing(2),\n }),\n});\n","import { useEffect, useRef } from 'react';\n\nimport { AppEvents } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getAppEvents } from '@grafana/runtime';\nimport {\n DeleteRepositoryFilesWithPathApiResponse,\n GetRepositoryFilesWithPathApiResponse,\n RepositoryView,\n} from 'app/api/clients/provisioning/v0alpha1';\nimport { Resource } from 'app/features/apiserver/types';\nimport { PAGE_SIZE } from 'app/features/browse-dashboards/api/services';\nimport { refetchChildren } from 'app/features/browse-dashboards/state/actions';\nimport { RepoType } from 'app/features/provisioning/Wizard/types';\nimport { useDispatch } from 'app/types/store';\n\nimport { useLastBranch } from './useLastBranch';\n\ntype ResourceType = 'dashboard' | 'folder'; // Add more as needed, e.g., 'alert', etc.\n\n// Information object that gets passed to all handlers\ninterface ProvisionedOperationInfo {\n repoType: RepoType;\n resourceType?: ResourceType;\n workflow?: string;\n}\n\ninterface RequestHandlers<T> {\n onBranchSuccess?: (\n data: { ref: string; path: string; urls?: Record<string, string> },\n info: ProvisionedOperationInfo,\n resource: Resource<T>\n ) => void;\n onWriteSuccess?: (resource: Resource<T>) => void;\n onError?: (error: unknown, info: ProvisionedOperationInfo) => void;\n onDismiss?: () => void;\n}\n\ninterface ProvisionedRequest {\n isError: boolean;\n isSuccess: boolean;\n isLoading?: boolean;\n error?: unknown;\n data?: DeleteRepositoryFilesWithPathApiResponse | GetRepositoryFilesWithPathApiResponse;\n}\n\n// Resource-specific configuration for different resource types\ninterface ResourceConfig {\n defaultSuccessMessage: string;\n supportedWorkflows: string[];\n}\n\ninterface Props<T> {\n request: ProvisionedRequest;\n folderUID?: string | undefined; // this is used to refetch folder items\n workflow?: string;\n handlers: RequestHandlers<T>;\n successMessage?: string;\n repository?: RepositoryView;\n resourceType?: ResourceType;\n selectedBranch?: string; // The branch selected by the user in the form\n}\n\n/**\n * Generic hook for handling provisioned resource operations across any resource type and repository provider.\n *\n * This hook is intentionally decoupled from specific components (like DashboardScene) to promote reusability.\n * Components are responsible for their own state management through specific workflow handlers.\n */\nexport function useProvisionedRequestHandler<T>({\n folderUID,\n request,\n workflow,\n handlers,\n successMessage,\n repository,\n resourceType,\n selectedBranch,\n}: Props<T>) {\n const dispatch = useDispatch();\n // useRef to ensure handlers are only called once per request\n const hasHandled = useRef(false);\n const { setLastBranch } = useLastBranch();\n\n useEffect(() => {\n const repoType = repository?.type || 'git';\n const info: ProvisionedOperationInfo = {\n repoType,\n resourceType,\n workflow,\n };\n\n // Reset handler guard when a new request starts loading\n if (request.isLoading) {\n hasHandled.current = false;\n }\n\n if (request.isError) {\n hasHandled.current = true;\n handlers.onError?.(request.error, info);\n return;\n }\n\n if (request.isSuccess && request.data && !hasHandled.current) {\n hasHandled.current = true;\n const { ref, path, urls, resource } = request.data;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const resourceData = resource.upsert as Resource<T>;\n\n // Save the last used branch to local storage\n if (workflow === 'branch' && ref) {\n // For branch workflow, save the ref from the response\n setLastBranch(repository?.name, ref);\n } else if (workflow === 'write') {\n // For write workflow, save the selectedBranch or fall back to repository branch\n setLastBranch(repository?.name, selectedBranch || repository?.branch);\n }\n\n // Success message\n const message = successMessage || getContextualSuccessMessage(info);\n getAppEvents().publish({\n type: AppEvents.alertSuccess.name,\n payload: [message],\n });\n\n // Branch workflow\n if (workflow === 'branch' && handlers.onBranchSuccess && ref && path) {\n const branchData = { ref, path, urls };\n handlers.onBranchSuccess?.(branchData, info, resourceData);\n }\n\n // Write workflow\n if (workflow === 'write' && handlers.onWriteSuccess) {\n if (folderUID) {\n // refetch folder items after success if folderUID is passed in\n dispatch(refetchChildren({ parentUID: folderUID || repository?.name, pageSize: PAGE_SIZE }));\n }\n handlers.onWriteSuccess(resourceData);\n }\n\n handlers.onDismiss?.();\n }\n }, [\n request,\n workflow,\n handlers,\n successMessage,\n repository,\n resourceType,\n folderUID,\n dispatch,\n selectedBranch,\n setLastBranch,\n ]);\n}\n\nfunction getContextualSuccessMessage(info: ProvisionedOperationInfo): string {\n const { resourceType } = info;\n\n switch (resourceType) {\n case 'dashboard':\n return t('provisioned-resource-request-handler-dashboard', 'Dashboard saved successfully');\n case 'folder':\n return t('provisioned-resource-request-handler-folder', 'Folder created successfully');\n default:\n return t('provisioned-resource-request-handler', 'Resource saved successfully');\n }\n}\n\nexport type { ResourceType, ProvisionedOperationInfo, RequestHandlers, ResourceConfig };\n","import { t } from '@grafana/i18n';\nimport { ManagerKind } from 'app/features/apiserver/types';\nimport { DashboardsTreeItem } from 'app/features/browse-dashboards/types';\n\nexport const getRootFolderItem = (): DashboardsTreeItem => ({\n isOpen: true,\n level: 0,\n item: {\n kind: 'folder' as const,\n title: t('browse-dashboards.folder-picker.root-title', 'Dashboards'),\n uid: '',\n },\n});\n\nexport const getCustomRootFolderItem = ({\n title,\n managedBy,\n uid,\n}: {\n title?: string;\n managedBy?: ManagerKind;\n uid?: string;\n}): DashboardsTreeItem => ({\n isOpen: true,\n level: 0,\n item: {\n kind: 'folder' as const,\n title: title || '',\n uid: uid || '',\n managedBy,\n },\n});\n","// Max number of items (metrics, labels, values) that we display as suggestions. Prevents from running out of memory.\n/**\n * @deprecated\n */\nexport const SUGGESTIONS_LIMIT = 10000;\n\nexport const PROMETHEUS_QUERY_BUILDER_MAX_RESULTS = 1000;\n\nexport const PROM_CONFIG_LABEL_WIDTH = 30;\n\nexport const LIST_ITEM_SIZE = 25;\n\nexport const LAST_USED_LABELS_KEY = 'grafana.datasources.prometheus.browser.labels';\n\nexport const DURATION_REGEX = /^$|^\\d+(ms|[Mwdhmsy])$/;\n\nexport const MULTIPLE_DURATION_REGEX = /(\\d+)(.+)/;\n\nexport const NON_NEGATIVE_INTEGER_REGEX = /^(0|[1-9]\\d*)(\\.\\d+)?(e\\+?\\d+)?$/; // non-negative integers, including scientific notation\n\nexport const EMPTY_SELECTOR = '{}';\n\nexport const DEFAULT_SERIES_LIMIT = 40000;\n\nexport const DEFAULT_COMPLETION_LIMIT = 1000;\n\n/**\n * Only for /series endpoint. Don't use this anywhere else as it cause an expensive query\n */\nexport const MATCH_ALL_LABELS = '{__name__!=\"\"}';\n\nexport const METRIC_LABEL = '__name__';\n\nexport const durationError = 'Value is not valid, you can use number with time unit specifier: y, M, w, d, h, m, s';\n\nexport const seriesLimitError =\n 'Value is not valid, you can use only numbers or leave it empty to use default limit or set 0 to have no limit.';\n\nexport const InstantQueryRefIdIndex = '-Instant';\n\nexport const GET_AND_POST_METADATA_ENDPOINTS = [\n 'api/v1/query',\n 'api/v1/query_range',\n 'api/v1/series',\n 'api/v1/labels',\n 'suggestions',\n];\n\n/**\n * @deprecated\n */\nexport const REMOVE_SERIES_LIMIT = 'none';\n","import { css } from '@emotion/css';\nimport { isArray, isObject, isUndefined } from 'lodash';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2, Icon } from '@grafana/ui';\n\nimport { Diff } from './utils';\n\ntype DiffProps = {\n diff: Diff;\n};\n\nexport const DiffValues = ({ diff }: DiffProps) => {\n const styles = useStyles2(getStyles);\n const hasLeftValue =\n !isUndefined(diff.originalValue) && !isArray(diff.originalValue) && !isObject(diff.originalValue);\n const hasRightValue = !isUndefined(diff.value) && !isArray(diff.value) && !isObject(diff.value);\n\n return (\n <>\n {hasLeftValue && <span className={styles}>{String(diff.originalValue)}</span>}\n {hasLeftValue && hasRightValue ? <Icon name=\"arrow-right\" /> : null}\n {hasRightValue && <span className={styles}>{String(diff.value)}</span>}\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) =>\n css({\n backgroundColor: theme.colors.action.hover,\n borderRadius: theme.shape.radius.default,\n color: theme.colors.text.primary,\n fontSize: theme.typography.body.fontSize,\n margin: theme.spacing(0, 0.5),\n padding: theme.spacing(0.25, 0.5),\n });\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2, Icon } from '@grafana/ui';\n\nimport { DiffValues } from './DiffValues';\nimport { Diff, getDiffText } from './utils';\n\ntype DiffTitleProps = {\n diff?: Diff;\n title: string;\n};\n\nconst replaceDiff: Diff = {\n op: 'replace',\n originalValue: undefined,\n path: [''],\n value: undefined,\n startLineNumber: 0,\n endLineNumber: 0,\n};\n\nexport const DiffTitle = ({ diff, title }: DiffTitleProps) => {\n const styles = useStyles2(getDiffTitleStyles);\n\n return diff ? (\n <>\n <Icon type=\"mono\" name=\"circle\" className={styles[diff.op]} size=\"xs\" />{' '}\n <span className={styles.embolden}>{title}</span> <span>{getDiffText(diff, diff.path?.length > 1)}</span>{' '}\n <DiffValues diff={diff} />\n </>\n ) : (\n <div className={styles.withoutDiff}>\n <Icon type=\"mono\" name=\"circle\" className={styles.replace} size=\"xs\" />{' '}\n <span className={styles.embolden}>{title}</span> <span>{getDiffText(replaceDiff, false)}</span>\n </div>\n );\n};\n\nconst getDiffTitleStyles = (theme: GrafanaTheme2) => ({\n embolden: css({\n fontWeight: theme.typography.fontWeightBold,\n }),\n add: css({\n color: theme.colors.success.main,\n }),\n replace: css({\n color: theme.colors.warning.main,\n }),\n move: css({\n color: theme.colors.warning.main,\n }),\n copy: css({\n color: theme.colors.success.main,\n }),\n _get: css({\n color: theme.colors.success.main,\n }),\n test: css({\n color: theme.colors.success.main,\n }),\n remove: css({\n color: theme.colors.error.main,\n }),\n withoutDiff: css({\n marginBottom: theme.spacing(1),\n }),\n});\n","import { css } from '@emotion/css';\nimport { last } from 'lodash';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { DiffTitle } from './DiffTitle';\nimport { DiffValues } from './DiffValues';\nimport { Diff, getDiffText } from './utils';\n\ntype DiffGroupProps = {\n diffs: Diff[];\n title: string;\n};\n\nexport const DiffGroup = ({ diffs, title }: DiffGroupProps) => {\n const styles = useStyles2(getStyles);\n\n if (diffs.length === 1) {\n return (\n <div className={styles.container} data-testid=\"diffGroup\">\n <DiffTitle title={title} diff={diffs[0]} />\n </div>\n );\n }\n\n return (\n <div className={styles.container} data-testid=\"diffGroup\">\n <DiffTitle title={title} />\n <ul className={styles.list}>\n {diffs.map((diff: Diff, idx: number) => {\n return (\n <li className={styles.listItem} key={`${last(diff.path)}__${idx}`}>\n <span>{getDiffText(diff)}</span> <DiffValues diff={diff} />\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({}),\n list: css({\n marginLeft: theme.spacing(4),\n }),\n listItem: css({\n marginBottom: theme.spacing(1),\n '&:last-child': {\n marginBottom: 0,\n },\n }),\n});\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { GrafanaTheme2, TimeZoneInfo } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\ninterface Props {\n info?: TimeZoneInfo;\n}\n\nexport const TimeZoneDescription = ({ info }: Props) => {\n const styles = useStyles2(getStyles);\n const description = useDescription(info);\n\n if (!info) {\n return null;\n }\n\n return <div className={styles.description}>{description}</div>;\n};\n\nconst useDescription = (info?: TimeZoneInfo): string => {\n return useMemo(() => {\n const parts: string[] = [];\n\n if (!info) {\n return '';\n }\n\n if (info.name === 'Europe/Simferopol') {\n // See https://github.com/grafana/grafana/issues/72031\n return 'Ukraine, EEST';\n }\n\n if (info.countries.length > 0) {\n const country = info.countries[0];\n parts.push(country.name);\n }\n\n if (info.abbreviation) {\n parts.push(info.abbreviation);\n }\n\n return parts.join(', ');\n }, [info]);\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n description: css({\n fontWeight: 'normal',\n fontSize: theme.typography.size.sm,\n color: theme.colors.text.secondary,\n whiteSpace: 'normal',\n textOverflow: 'ellipsis',\n }),\n };\n};\n","import { UserState } from './reducers';\n\nexport const getTimeZone = (state: UserState) => state.timeZone;\nexport const getFiscalYearStartMonth = (state: UserState) => state.fiscalYearStartMonth;\n","import { css, cx } from '@emotion/css';\nimport { AriaRole, HTMLAttributes, ReactNode } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\nimport { Button } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\nimport { Box } from '../Layout/Box/Box';\nimport { Text } from '../Text/Text';\nexport type AlertVariant = 'success' | 'warning' | 'error' | 'info';\n\nexport interface Props extends HTMLAttributes<HTMLDivElement> {\n title: string;\n /** On click handler for alert button, mostly used for dismissing the alert */\n onRemove?: (event: React.MouseEvent) => void;\n severity?: AlertVariant;\n children?: ReactNode;\n elevated?: boolean;\n buttonContent?: React.ReactNode | string;\n bottomSpacing?: number;\n topSpacing?: number;\n}\n\n/**\n * An alert displays an important message in a way that attracts the user's attention without interrupting the user's task.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-alert--docs\n */\nexport const Alert = React.forwardRef<HTMLDivElement, Props>(\n (\n {\n title,\n onRemove,\n children,\n buttonContent,\n elevated,\n bottomSpacing,\n topSpacing,\n className,\n severity = 'error',\n ...restProps\n },\n ref\n ) => {\n const theme = useTheme2();\n const hasTitle = Boolean(title);\n const styles = getStyles(theme, severity, hasTitle, elevated, bottomSpacing, topSpacing);\n const rolesBySeverity: Record<AlertVariant, AriaRole> = {\n error: 'alert',\n warning: 'alert',\n info: 'status',\n success: 'status',\n };\n const role = restProps['role'] || rolesBySeverity[severity];\n const ariaLabel = restProps['aria-label'] || title;\n\n const closeLabel = t('grafana-ui.alert.close-button', 'Close alert');\n\n return (\n <div ref={ref} className={cx(styles.wrapper, className)} role={role} aria-label={ariaLabel} {...restProps}>\n <Box\n data-testid={selectors.components.Alert.alertV2(severity)}\n display=\"flex\"\n backgroundColor={severity}\n borderRadius=\"default\"\n paddingY={1}\n paddingX={2}\n borderStyle=\"solid\"\n borderColor={severity}\n alignItems=\"stretch\"\n boxShadow={elevated ? 'z3' : undefined}\n >\n <Box paddingTop={1} paddingRight={2}>\n <div className={styles.icon}>\n <Icon size=\"xl\" name={getIconFromSeverity(severity)} />\n </div>\n </Box>\n\n <Box paddingY={1} grow={1}>\n <Text color=\"primary\" weight=\"medium\">\n {title}\n </Text>\n {children && <div className={styles.content}>{children}</div>}\n </Box>\n {/* If onRemove is specified, giving preference to onRemove */}\n {onRemove && !buttonContent && (\n <div className={styles.close}>\n <Button\n aria-label={closeLabel}\n icon=\"times\"\n onClick={onRemove}\n type=\"button\"\n fill=\"text\"\n variant=\"secondary\"\n />\n </div>\n )}\n\n {onRemove && buttonContent && (\n <Box marginLeft={1} display=\"flex\" alignItems=\"center\">\n <Button aria-label={closeLabel} variant=\"secondary\" onClick={onRemove} type=\"button\">\n {buttonContent}\n </Button>\n </Box>\n )}\n </Box>\n </div>\n );\n }\n);\n\nAlert.displayName = 'Alert';\n\nexport const getIconFromSeverity = (severity: AlertVariant): IconName => {\n switch (severity) {\n case 'error':\n return 'exclamation-circle';\n case 'warning':\n return 'exclamation-triangle';\n case 'info':\n return 'info-circle';\n case 'success':\n return 'check';\n }\n};\n\nconst getStyles = (\n theme: GrafanaTheme2,\n severity: AlertVariant,\n hasTitle: boolean,\n elevated?: boolean,\n bottomSpacing?: number,\n topSpacing?: number\n) => {\n const color = theme.colors[severity];\n\n return {\n wrapper: css({\n flexGrow: 1,\n marginBottom: theme.spacing(bottomSpacing ?? 2),\n marginTop: theme.spacing(topSpacing ?? 0),\n position: 'relative',\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n background: theme.colors.background.primary,\n zIndex: -1,\n },\n }),\n icon: css({\n color: color.text,\n position: 'relative',\n top: '-1px',\n }),\n content: css({\n color: theme.colors.text.primary,\n paddingTop: hasTitle ? theme.spacing(0.5) : 0,\n maxHeight: '50vh',\n overflowY: 'auto',\n }),\n close: css({\n position: 'relative',\n color: theme.colors.text.secondary,\n background: 'none',\n display: 'flex',\n top: '-6px',\n right: '-14px',\n }),\n };\n};\n","import { ThemeSpacingTokens } from '@grafana/data';\n\nimport { Box } from './Box/Box';\nimport { ResponsiveProp } from './utils/responsiveness';\n\nexport interface SpaceProps {\n /**\n * The amount of vertical space to use.\n */\n v?: ResponsiveProp<ThemeSpacingTokens>;\n /**\n * The amount of horizontal space to use.\n */\n h?: ResponsiveProp<ThemeSpacingTokens>;\n /**\n * The layout of the space. If set to `inline`, the component will behave like an inline-block element,\n * otherwise it will behave like a block element.\n */\n layout?: 'block' | 'inline';\n}\n\n/**\n * The Space component is a component used to add space between elements. Horizontal space is added using the `h` prop, while vertical space is added using the `v` prop. When adding horizontal space between inline or inline-block elements, the `layout` prop should be set to `\"inline\"`, otherwise the `\"block\"` value of the prop can be used.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-space--docs\n */\nexport const Space = ({ v = 0, h = 0, layout }: SpaceProps) => {\n return <Box paddingRight={h} paddingBottom={v} display={layout === 'inline' ? 'inline-block' : 'block'} />;\n};\n","// Code generated by go generate; DO NOT EDIT.\n\nexport const supportedDatasources = new Set<string>([\n '__expr__',\n 'aggregations-io-datasource',\n 'apache-iotdb-datasource',\n 'aquaqanalytics-kdbbackend-datasource',\n 'arabian9ts-mux-datasource',\n 'axiomhq-axiom-datasource',\n 'cloudwatch',\n 'cnos-cnosdb-datasource',\n 'criblcloud-search-datasource',\n 'datasource',\n 'dlopes7-appdynamics-datasource',\n 'dvelop-odata-datasource',\n 'elasticsearch',\n 'factry-historian-datasource',\n 'fiskaly-surrealdb-datasource',\n 'frser-sqlite-datasource',\n 'grafadruid-druid-datasource',\n 'grafana-adobeanalytics-datasource',\n 'grafana-amazonprometheus-datasource',\n 'grafana-athena-datasource',\n 'grafana-aurora-datasource',\n 'grafana-azure-data-explorer-datasource',\n 'grafana-azure-monitor-datasource',\n 'grafana-azurecosmosdb-datasource',\n 'grafana-bigquery-datasource',\n 'grafana-catchpoint-datasource',\n 'grafana-clickhouse-datasource',\n 'grafana-cloudflare-datasource',\n 'grafana-cockroachdb-datasource',\n 'grafana-databricks-datasource',\n 'grafana-datadog-datasource',\n 'grafana-dynamodb-datasource',\n 'grafana-dynatrace-datasource',\n 'grafana-falconlogscale-datasource',\n 'grafana-github-datasource',\n 'grafana-gitlab-datasource',\n 'grafana-honeycomb-datasource',\n 'grafana-iot-sitewise-datasource',\n 'grafana-jira-datasource',\n 'grafana-looker-datasource',\n 'grafana-mock-datasource',\n 'grafana-mongodb-datasource',\n 'grafana-newrelic-datasource',\n 'grafana-odbc-datasource',\n 'grafana-opensearch-datasource',\n 'grafana-oracle-datasource',\n 'grafana-pagerduty-datasource',\n 'grafana-postgresql-datasource',\n 'grafana-redshift-datasource',\n 'grafana-salesforce-datasource',\n 'grafana-saphana-datasource',\n 'grafana-sentry-datasource',\n 'grafana-servicenow-datasource',\n 'grafana-snowflake-datasource',\n 'grafana-splunk-datasource',\n 'grafana-splunk-monitoring-datasource',\n 'grafana-sumologic-datasource',\n 'grafana-surrealdb-datasource',\n 'grafana-testdata-datasource',\n 'grafana-timestream-datasource',\n 'grafana-vercel-datasource',\n 'grafana-wavefront-datasource',\n 'grafana-x-ray-datasource',\n 'grafana-yugabyte-datasource',\n 'grafana-zendesk-datasource',\n 'graphite',\n 'gridprotectionalliance-osisoftpi-datasource',\n 'hadesarchitect-cassandra-datasource',\n 'ibm-aql-datasource',\n 'influxdb',\n 'innius-grpc-datasource',\n 'kniepdennis-neo4j-datasource',\n 'loki',\n 'manassehzhou-maxcompute-datasource',\n 'maormil-rabbitmq-datasource',\n 'marcusolsson-csv-datasource',\n 'mssql',\n 'mysql',\n 'nagasudhirpulla-api-datasource',\n 'needleinajaystack-haystack-datasource',\n 'oci-metrics-datasource',\n 'opentsdb',\n 'parseable-parseable-datasource',\n 'prometheus',\n 'questdb-questdb-datasource',\n 'quickwit-quickwit-datasource',\n 'redis-datasource',\n 'retrodaredevil-wildgraphql-datasource',\n 'stackdriver',\n 'tdengine-datasource',\n 'trino-datasource',\n 'vertamedia-clickhouse-datasource',\n 'vertica-grafana-datasource',\n 'victoriametrics-logs-datasource',\n 'victoriametrics-metrics-datasource',\n 'ydbtech-ydb-datasource',\n 'yesoreyeram-infinity-datasource',\n]);\n","import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert } from '@grafana/ui';\n\nconst selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard;\n\nexport const NoUpsertPermissionsAlert = ({ mode }: { mode: 'create' | 'edit' }) => {\n const title = t(\n 'public-dashboard.share-externally.no-upsert-perm-alert-title',\n 'You don’t have permission to {{ action }} a shared dashboard',\n { action: mode }\n );\n\n return (\n <Alert severity=\"warning\" title={title} data-testid={selectors.NoUpsertPermissionsWarningAlert} bottomSpacing={0}>\n <Trans i18nKey=\"public-dashboard.share-externally.no-upsert-perm-alert-desc\">\n Contact your admin to get permission to {{ action: mode }} shared dashboards\n </Trans>\n </Alert>\n );\n};\n","import { css } from '@emotion/css';\nimport Skeleton from 'react-loading-skeleton';\n\nimport type { GrafanaTheme2 } from '@grafana/data';\nimport { getInputStyles, useStyles2 } from '@grafana/ui';\n\n// This component is used as a fallback for codesplitting, so aim to keep\n// the bundle size of it as small as possible :)\nexport function FolderPickerSkeleton() {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.inputWrapper}>\n <button type=\"button\" className={styles.fakeInput} aria-disabled>\n <Skeleton width={100} />\n </button>\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const baseStyles = getInputStyles({ theme });\n\n return {\n wrapper: baseStyles.wrapper,\n inputWrapper: baseStyles.inputWrapper,\n fakeInput: css([\n baseStyles.input,\n {\n textAlign: 'left',\n },\n ]),\n };\n};\n","import { createAction } from '@reduxjs/toolkit';\nimport { isEqual } from 'lodash';\nimport { AnyAction } from 'redux';\n\nimport { SplitOpenOptions, TimeRange, EventBusSrv, locationUtil } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { generateExploreId, GetExploreUrlArguments } from 'app/core/utils/explore';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { getTemplateSrv } from 'app/features/templating/template_srv';\nimport { CorrelationEditorDetailsUpdate, ExploreItemState, ExploreState } from 'app/types/explore';\nimport { createAsyncThunk, ThunkResult } from 'app/types/store';\n\nimport { RichHistoryResults } from '../../../core/history/RichHistoryStorage';\nimport { RichHistorySearchFilters, RichHistorySettings } from '../../../core/utils/richHistoryTypes';\nimport { withUniqueRefIds } from '../utils/queries';\n\nimport { DEFAULT_RANGE } from './constants';\nimport { initializeExplore, InitializeExploreOptions, paneReducer } from './explorePane';\nimport { makeExplorePaneState } from './utils';\n\n//\n// Actions and Payloads\n//\n\nexport interface SyncTimesPayload {\n syncedTimes: boolean;\n}\nexport const syncTimesAction = createAction<SyncTimesPayload>('explore/syncTimes');\n\nexport const richHistoryUpdatedAction = createAction<{ richHistoryResults: RichHistoryResults }>(\n 'explore/richHistoryUpdated'\n);\nexport const richHistoryStorageFullAction = createAction('explore/richHistoryStorageFullAction');\nexport const richHistoryLimitExceededAction = createAction('explore/richHistoryLimitExceededAction');\n\nexport const richHistorySettingsUpdatedAction = createAction<RichHistorySettings>('explore/richHistorySettingsUpdated');\nexport const richHistorySearchFiltersUpdatedAction = createAction<{\n filters?: RichHistorySearchFilters;\n}>('explore/richHistorySearchFiltersUpdatedAction');\n\nexport const splitSizeUpdateAction = createAction<{\n largerExploreId?: string;\n}>('explore/splitSizeUpdateAction');\n\nexport const maximizePaneAction = createAction<{\n exploreId?: string;\n}>('explore/maximizePaneAction');\n\nexport const evenPaneResizeAction = createAction('explore/evenPaneResizeAction');\n\n/**\n * Close the pane with the given id.\n */\nexport const splitClose = createAction<string>('explore/splitClose');\n\nexport interface SetPaneStateActionPayload {\n [itemId: string]: Partial<ExploreItemState>;\n}\nexport const setPaneState = createAction<SetPaneStateActionPayload>('explore/setPaneState');\n\nexport const clearPanes = createAction('explore/clearPanes');\n\n/**\n * Creates a new Explore pane.\n * If 2 panes already exist, the last one (right) is closed before creating a new one.\n */\nexport const splitOpen = createAsyncThunk(\n 'explore/splitOpen',\n async (options: SplitOpenOptions | undefined, { getState, dispatch }) => {\n // we currently support showing only 2 panes in explore, so if this action is dispatched we know it has been dispatched from the \"first\" pane.\n const originState = Object.values(getState().explore.panes)[0];\n\n const queries = options?.queries ?? originState?.queries ?? [];\n\n Object.keys(getState().explore.panes).forEach((paneId, index) => {\n // Only 2 panes are supported. Remove panes before create a new one.\n if (index >= 1) {\n dispatch(splitClose(paneId));\n }\n });\n\n const splitRange = options?.range || originState?.range.raw || DEFAULT_RANGE;\n\n let newPaneId = generateExploreId();\n // in case we have a duplicate id, generate a new one\n while (getState().explore.panes[newPaneId]) {\n newPaneId = generateExploreId();\n }\n\n await dispatch(\n createNewSplitOpenPane({\n exploreId: newPaneId,\n datasource: options?.datasourceUid || originState?.datasourceInstance?.getRef(),\n queries: withUniqueRefIds(queries),\n range: splitRange,\n panelsState: options?.panelsState || originState?.panelsState,\n correlationHelperData: options?.correlationHelperData,\n eventBridge: new EventBusSrv(),\n compact: !!options?.compact,\n })\n );\n\n if (originState?.range) {\n await dispatch(syncTimesAction({ syncedTimes: isEqual(originState.range.raw, splitRange) })); // if time ranges are equal, mark times as synced\n }\n }\n);\n\n/**\n * Opens a new split pane. It either copies existing state of an already present pane\n * or uses values from options arg.\n *\n * TODO: this can be improved by better inferring fallback values.\n */\nconst createNewSplitOpenPane = createAsyncThunk(\n 'explore/createNewSplitOpen',\n async (options: InitializeExploreOptions, { dispatch }) => {\n await dispatch(initializeExplore(options));\n }\n);\n\n/**\n * Moves explore into and out of correlations editor mode\n */\nexport const changeCorrelationEditorDetails = createAction<CorrelationEditorDetailsUpdate>(\n 'explore/changeCorrelationEditorDetails'\n);\n\nexport interface NavigateToExploreDependencies {\n timeRange: TimeRange;\n getExploreUrl: (args: GetExploreUrlArguments) => Promise<string | undefined>;\n openInNewWindow?: (url: string) => void;\n}\n\nexport const navigateToExplore = (\n panel: PanelModel,\n dependencies: NavigateToExploreDependencies\n): ThunkResult<void> => {\n return async (dispatch) => {\n const { timeRange, getExploreUrl, openInNewWindow } = dependencies;\n\n const path = await getExploreUrl({\n queries: panel.targets,\n dsRef: panel.datasource,\n scopedVars: panel.scopedVars,\n timeRange,\n adhocFilters: getTemplateSrv().getAdhocFilters(panel.datasource?.uid ?? '', true),\n });\n\n if (openInNewWindow && path) {\n openInNewWindow(path);\n return;\n }\n\n locationService.push(locationUtil.stripBaseFromUrl(path!));\n };\n};\n\n/**\n * Global Explore state that handles multiple Explore areas and the split state\n */\nconst initialExploreItemState = () => makeExplorePaneState();\nexport const initialExploreState: ExploreState = {\n syncedTimes: false,\n panes: {},\n correlationEditorDetails: { editorMode: false, correlationDirty: false, queryEditorDirty: false, isExiting: false },\n richHistoryStorageFull: false,\n richHistoryLimitExceededWarningShown: false,\n largerExploreId: undefined,\n maxedExploreId: undefined,\n evenSplitPanes: true,\n richHistory: [],\n};\n\n/**\n * Global Explore reducer that handles multiple Explore areas (left and right).\n * Actions that have an `exploreId` get routed to the ExploreItemReducer.\n */\nexport const exploreReducer = (state = initialExploreState, action: AnyAction): ExploreState => {\n if (splitClose.match(action)) {\n const { [action.payload]: _, ...panes } = { ...state.panes };\n\n return {\n ...state,\n panes,\n largerExploreId: undefined,\n maxedExploreId: undefined,\n evenSplitPanes: true,\n syncedTimes: false,\n };\n }\n\n if (splitSizeUpdateAction.match(action)) {\n const { largerExploreId } = action.payload;\n return {\n ...state,\n largerExploreId,\n maxedExploreId: undefined,\n evenSplitPanes: largerExploreId === undefined,\n };\n }\n\n if (maximizePaneAction.match(action)) {\n const { exploreId } = action.payload;\n return {\n ...state,\n largerExploreId: exploreId,\n maxedExploreId: exploreId,\n evenSplitPanes: false,\n };\n }\n\n if (evenPaneResizeAction.match(action)) {\n return {\n ...state,\n largerExploreId: undefined,\n maxedExploreId: undefined,\n evenSplitPanes: true,\n };\n }\n\n if (syncTimesAction.match(action)) {\n return { ...state, syncedTimes: action.payload.syncedTimes };\n }\n\n if (richHistoryStorageFullAction.match(action)) {\n return {\n ...state,\n richHistoryStorageFull: true,\n };\n }\n\n if (richHistoryLimitExceededAction.match(action)) {\n return {\n ...state,\n richHistoryLimitExceededWarningShown: true,\n };\n }\n\n if (richHistorySettingsUpdatedAction.match(action)) {\n const richHistorySettings = action.payload;\n return {\n ...state,\n richHistorySettings,\n };\n }\n\n if (richHistoryUpdatedAction.match(action)) {\n const { richHistory, total } = action.payload.richHistoryResults;\n return {\n ...state,\n richHistory,\n richHistoryTotal: total,\n };\n }\n\n if (richHistorySearchFiltersUpdatedAction.match(action)) {\n const richHistorySearchFilters = action.payload.filters;\n return {\n ...state,\n richHistorySearchFilters,\n };\n }\n\n if (createNewSplitOpenPane.pending.match(action)) {\n return {\n ...state,\n panes: {\n ...state.panes,\n [action.meta.arg.exploreId]: initialExploreItemState(),\n },\n };\n }\n\n if (initializeExplore?.pending.match(action)) {\n const initialPanes = Object.entries(state.panes);\n const before = initialPanes.slice(0, action.meta.arg.position);\n const after = initialPanes.slice(before.length);\n const panes = [...before, [action.meta.arg.exploreId, initialExploreItemState()] as const, ...after].reduce(\n (acc, [id, pane]) => ({ ...acc, [id]: pane }),\n {}\n );\n\n return {\n ...state,\n panes,\n };\n }\n\n if (clearPanes.match(action)) {\n return {\n ...state,\n panes: {},\n };\n }\n\n if (changeCorrelationEditorDetails.match(action)) {\n const {\n editorMode,\n label,\n description,\n canSave,\n correlationDirty,\n queryEditorDirty,\n isExiting,\n postConfirmAction,\n transformations,\n } = action.payload;\n return {\n ...state,\n correlationEditorDetails: {\n editorMode: Boolean(editorMode ?? state.correlationEditorDetails?.editorMode),\n canSave: Boolean(canSave ?? state.correlationEditorDetails?.canSave),\n label: label ?? state.correlationEditorDetails?.label,\n description: description ?? state.correlationEditorDetails?.description,\n transformations: transformations ?? state.correlationEditorDetails?.transformations,\n correlationDirty: Boolean(correlationDirty ?? state.correlationEditorDetails?.correlationDirty),\n queryEditorDirty: Boolean(queryEditorDirty ?? state.correlationEditorDetails?.queryEditorDirty),\n isExiting: Boolean(isExiting ?? state.correlationEditorDetails?.isExiting),\n postConfirmAction,\n },\n };\n }\n\n const exploreId: string | undefined = action.payload?.exploreId;\n if (typeof exploreId === 'string') {\n return {\n ...state,\n panes: Object.entries(state.panes).reduce((acc, [id, pane]) => {\n return {\n ...acc,\n [id]: id === exploreId ? paneReducer(pane, action) : pane,\n };\n }, {}),\n };\n }\n\n return state;\n};\n\nexport default {\n explore: exploreReducer,\n};\n","import { useState, useMemo, useEffect } from 'react';\n\nimport {\n FieldConfigSource,\n getTimeZone,\n PanelPlugin,\n PluginContextProvider,\n getPanelOptionsWithDefaults,\n OptionDefaults,\n useFieldOverrides,\n} from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { getTemplateSrv, PanelRendererProps } from '@grafana/runtime';\nimport { ErrorBoundaryAlert, useTheme2 } from '@grafana/ui';\nimport { appEvents } from 'app/core/core';\n\nimport { importPanelPlugin, syncGetPanelPlugin } from '../../plugins/importPanelPlugin';\n\nconst defaultFieldConfig = { defaults: {}, overrides: [] };\n\nexport function PanelRenderer<P extends object = {}, F extends object = {}>(props: PanelRendererProps<P, F>) {\n const {\n pluginId,\n data,\n timeZone = getTimeZone(),\n options = {},\n width,\n height,\n title,\n onOptionsChange = () => {},\n onChangeTimeRange = () => {},\n onFieldConfigChange = () => {},\n fieldConfig = defaultFieldConfig,\n } = props;\n\n const theme = useTheme2();\n const templateSrv = getTemplateSrv();\n const replace = useMemo(() => templateSrv.replace.bind(templateSrv), [templateSrv]);\n const [plugin, setPlugin] = useState(syncGetPanelPlugin(pluginId));\n const [error, setError] = useState<string | undefined>();\n const optionsWithDefaults = useOptionDefaults(plugin, options, fieldConfig);\n const dataWithOverrides = useFieldOverrides(plugin, optionsWithDefaults?.fieldConfig, data, timeZone, theme, replace);\n\n useEffect(() => {\n // If we already have a plugin and it's correct one do nothing\n if (plugin && plugin.hasPluginId(pluginId)) {\n return;\n }\n\n // Async load the plugin\n importPanelPlugin(pluginId)\n .then((result) => setPlugin(result))\n .catch((err: Error) => {\n setError(err.message);\n });\n }, [pluginId, plugin]);\n\n if (error) {\n return (\n <div>\n <Trans i18nKey=\"panel.panel-renderer.failed-to-load-plugin\">Failed to load plugin: {{ error }}</Trans>\n </div>\n );\n }\n\n if (!plugin || !plugin.hasPluginId(pluginId)) {\n return (\n <div>\n <Trans i18nKey=\"panel.panel-renderer.loading-plugin-panel\">Loading plugin panel...</Trans>\n </div>\n );\n }\n\n if (!plugin.panel) {\n return (\n <div>\n <Trans i18nKey=\"panel.panel-renderer.no-panel-component\">\n Seems like the plugin you are trying to load does not have a panel component.\n </Trans>\n </div>\n );\n }\n\n if (!dataWithOverrides) {\n return (\n <div>\n <Trans i18nKey=\"panel.panel-renderer.no-panel-data\">No panel data</Trans>\n </div>\n );\n }\n\n const PanelComponent = plugin.panel;\n\n return (\n <ErrorBoundaryAlert boundaryName=\"panel-renderer\" dependencies={[plugin, data]}>\n <PluginContextProvider meta={plugin.meta}>\n <PanelComponent\n id={1}\n data={dataWithOverrides}\n title={title}\n timeRange={dataWithOverrides.timeRange}\n timeZone={timeZone}\n options={optionsWithDefaults!.options}\n fieldConfig={fieldConfig}\n transparent={false}\n width={width}\n height={height}\n renderCounter={0}\n replaceVariables={(str: string) => str}\n onOptionsChange={onOptionsChange}\n onFieldConfigChange={onFieldConfigChange}\n onChangeTimeRange={onChangeTimeRange}\n eventBus={appEvents}\n />\n </PluginContextProvider>\n </ErrorBoundaryAlert>\n );\n}\n\nfunction useOptionDefaults<P extends Record<string, unknown> = {}, F extends object = {}>(\n plugin: PanelPlugin | undefined,\n options: P,\n fieldConfig: FieldConfigSource<F>\n): OptionDefaults | undefined {\n return useMemo(() => {\n if (!plugin) {\n return;\n }\n\n return getPanelOptionsWithDefaults({\n plugin,\n currentOptions: options,\n currentFieldConfig: fieldConfig,\n isAfterPluginChange: false,\n });\n }, [plugin, fieldConfig, options]);\n}\n","import { css } from '@emotion/css';\nimport { Component, createRef } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { withTheme2 } from '../../themes/ThemeContext';\nimport { stylesFactory } from '../../themes/stylesFactory';\nimport { closePopover } from '../../utils/closePopover';\nimport { Popover } from '../Tooltip/Popover';\nimport { PopoverController } from '../Tooltip/PopoverController';\n\nimport { ColorPickerPopover, ColorPickerProps } from './ColorPickerPopover';\nimport { ColorSwatch } from './ColorSwatch';\nimport { SeriesColorPickerPopover } from './SeriesColorPickerPopover';\n\n/**\n * If you need custom trigger for the color picker you can do that with a render prop pattern and supply a function\n * as a child. You will get show/hide function which you can map to desired interaction (like onClick or onMouseLeave)\n * and a ref which needs to be passed to an HTMLElement for correct positioning. If you want to use class or functional\n * component as a custom trigger you will need to forward the reference to first HTMLElement child.\n */\ntype ColorPickerTriggerRenderer = (props: {\n // This should be a React.RefObject<HTMLElement> but due to how object refs are defined you cannot downcast from that\n // to a specific type like React.RefObject<HTMLDivElement> even though it would be fine in runtime.\n ref: React.RefObject<any>;\n showColorPicker: () => void;\n hideColorPicker: () => void;\n}) => React.ReactNode;\n\nexport const colorPickerFactory = <T extends ColorPickerProps>(\n popover: React.ComponentType<React.PropsWithChildren<T>>,\n displayName = 'ColorPicker'\n) => {\n return class ColorPicker extends Component<T & { children?: ColorPickerTriggerRenderer }> {\n static displayName = displayName;\n pickerTriggerRef = createRef<any>();\n\n render() {\n const { theme, children, onChange, color, id } = this.props;\n const styles = getStyles(theme);\n const popoverElement = React.createElement(popover, {\n ...{ ...this.props, children: null },\n onChange,\n });\n return (\n <PopoverController content={popoverElement} hideAfter={300}>\n {(showPopper, hidePopper, popperProps) => {\n return (\n <>\n {this.pickerTriggerRef.current && (\n <Popover\n {...popperProps}\n referenceElement={this.pickerTriggerRef.current}\n wrapperClassName={styles.colorPicker}\n onMouseLeave={hidePopper}\n onMouseEnter={showPopper}\n onKeyDown={(event) => closePopover(event, hidePopper)}\n />\n )}\n\n {children ? (\n children({\n ref: this.pickerTriggerRef,\n showColorPicker: showPopper,\n hideColorPicker: hidePopper,\n })\n ) : (\n <ColorSwatch\n id={id}\n ref={this.pickerTriggerRef}\n onClick={showPopper}\n onMouseLeave={hidePopper}\n color={theme.visualization.getColorByName(color || '#000000')}\n aria-label={color}\n />\n )}\n </>\n );\n }}\n </PopoverController>\n );\n }\n };\n};\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/pickers-colorpicker--docs\n */\nexport const ColorPicker = withTheme2(colorPickerFactory(ColorPickerPopover, 'ColorPicker'));\nexport const SeriesColorPicker = withTheme2(colorPickerFactory(SeriesColorPickerPopover, 'SeriesColorPicker'));\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2) => {\n return {\n colorPicker: css({\n position: 'absolute',\n zIndex: theme.zIndex.tooltip,\n color: theme.colors.text.primary,\n maxWidth: '400px',\n fontSize: theme.typography.size.sm,\n maxHeight: '100vh',\n overflow: 'auto',\n }),\n };\n});\n","import { Block, Document, Text, Value, SchemaProperties } from 'slate';\n\nexport const SCHEMA: SchemaProperties = {\n document: {\n nodes: [\n {\n match: [{ type: 'paragraph' }, { type: 'code_block' }, { type: 'code_line' }],\n },\n ],\n },\n inlines: {},\n};\n\nexport const makeFragment = (text: string, syntax?: string): Document => {\n const lines = text.split('\\n').map((line) =>\n Block.create({\n type: 'code_line',\n nodes: [Text.create(line)],\n })\n );\n\n const block = Block.create({\n data: {\n syntax,\n },\n type: 'code_block',\n nodes: lines,\n });\n\n return Document.create({\n nodes: [block],\n });\n};\n\nexport const makeValue = (text: string, syntax?: string): Value => {\n const fragment = makeFragment(text, syntax);\n\n return Value.create({\n document: fragment,\n });\n};\n","import { CircularVector } from '../vector/CircularVector';\n\nimport { MutableDataFrame } from './MutableDataFrame';\n\ninterface CircularOptions {\n append?: 'head' | 'tail';\n capacity?: number;\n}\n\n/**\n * This dataframe can have values constantly added, and will never\n * exceed the given capacity\n */\nexport class CircularDataFrame<T = any> extends MutableDataFrame<T> {\n constructor(options: CircularOptions) {\n super(undefined, (buffer) => {\n return new CircularVector({\n ...options,\n buffer,\n });\n });\n }\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, useStyles2 } from '@grafana/ui';\n\nimport { AlertmanagerChoice } from '../../../../plugins/datasource/alertmanager/types';\nimport { alertmanagerApi } from '../api/alertmanagerApi';\nimport { AlertingAction, useAlertingAbility } from '../hooks/useAbilities';\nimport { isExtraConfig } from '../utils/alertmanager/extraConfigs';\nimport { GRAFANA_RULES_SOURCE_NAME } from '../utils/datasource';\n\ninterface GrafanaAlertmanagerWarningProps {\n currentAlertmanager: string;\n}\n\nexport function GrafanaAlertmanagerWarning({ currentAlertmanager }: GrafanaAlertmanagerWarningProps) {\n return (\n <>\n <GrafanaExternalAlertmanagerConfigWarning currentAlertmanager={currentAlertmanager} />\n <GrafanaExtraConfigWarning currentAlertmanager={currentAlertmanager} />\n </>\n );\n}\n\nfunction GrafanaExternalAlertmanagerConfigWarning({ currentAlertmanager }: GrafanaAlertmanagerWarningProps) {\n const styles = useStyles2(getStyles);\n const externalAlertmanager = currentAlertmanager !== GRAFANA_RULES_SOURCE_NAME;\n\n const [readConfigurationStatusSupported, readConfigurationStatusAllowed] = useAlertingAbility(\n AlertingAction.ReadConfigurationStatus\n );\n const canReadConfigurationStatus = readConfigurationStatusSupported && readConfigurationStatusAllowed;\n\n const { currentData: amChoiceStatus } = alertmanagerApi.endpoints.getGrafanaAlertingConfigurationStatus.useQuery(\n undefined,\n {\n skip: externalAlertmanager || !canReadConfigurationStatus,\n }\n );\n\n const interactsWithExternalAMs =\n amChoiceStatus?.alertmanagersChoice &&\n [AlertmanagerChoice.External, AlertmanagerChoice.All].includes(amChoiceStatus?.alertmanagersChoice);\n\n if (!interactsWithExternalAMs || externalAlertmanager) {\n return null;\n }\n\n const hasActiveExternalAMs = amChoiceStatus.numExternalAlertmanagers > 0;\n\n if (amChoiceStatus.alertmanagersChoice === AlertmanagerChoice.External) {\n return (\n <Alert\n title={t(\n 'alerting.grafana-alertmanager-delivery-warning.title-grafana-alerts-delivered-alertmanager',\n 'Grafana alerts are not delivered to Grafana Alertmanager'\n )}\n >\n <Trans i18nKey=\"alerting.grafana-alertmanager-delivery-warning.configuration-changes-external\">\n Grafana is configured to send alerts to external Alertmanagers only. Changing Grafana Alertmanager\n configuration will not affect delivery of your alerts.\n </Trans>\n <div className={styles.adminHint}>\n <Trans i18nKey=\"alerting.grafana-alertmanager-delivery-warning.admin-hint-external\">\n To change your Alertmanager setup, go to the Alerting Admin page. If you do not have access, contact your\n Administrator.\n </Trans>\n </div>\n </Alert>\n );\n }\n\n if (amChoiceStatus.alertmanagersChoice === AlertmanagerChoice.All && hasActiveExternalAMs) {\n return (\n <Alert\n title={t(\n 'alerting.grafana-alertmanager-delivery-warning.title-you-have-additional-alertmanagers-to-configure',\n 'You have additional Alertmanagers to configure'\n )}\n severity=\"warning\"\n >\n <Trans i18nKey=\"alerting.grafana-alertmanager-delivery-warning.configuration-changes-all\">\n Ensure you make configuration changes in the correct Alertmanagers; both internal and external. Changing one\n will not affect the others.\n </Trans>\n <div className={styles.adminHint}>\n <Trans i18nKey=\"alerting.grafana-alertmanager-delivery-warning.admin-hint-all\">\n To change your Alertmanager setup, go to the Alerting Admin page. If you do not have access, contact your\n Administrator.\n </Trans>\n </div>\n </Alert>\n );\n }\n\n return null;\n}\n\nfunction GrafanaExtraConfigWarning({ currentAlertmanager }: GrafanaAlertmanagerWarningProps) {\n const isSelectedExtraConfig = currentAlertmanager && isExtraConfig(currentAlertmanager);\n\n if (!isSelectedExtraConfig) {\n return null;\n }\n\n return (\n <Alert title={t('alerting.alert-manager-picker.extra-config-warning.title', 'Imported configuration')}>\n <Trans i18nKey=\"alerting.alert-manager-picker.extra-config-warning.content\">\n This shows the merged configuration of Grafana alertmanager with imported configurations. This merged view is\n read-only in the UI.\n </Trans>\n </Alert>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n adminHint: css({\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nexport const getModalStyles = (theme: GrafanaTheme2) => {\n return {\n modal: css({\n position: 'fixed',\n zIndex: theme.zIndex.modal,\n background: theme.colors.background.primary,\n boxShadow: theme.shadows.z3,\n borderRadius: theme.shape.radius.lg,\n border: `1px solid ${theme.colors.border.weak}`,\n backgroundClip: 'padding-box',\n outline: 'none',\n width: '750px',\n maxWidth: '100%',\n left: 0,\n right: 0,\n marginLeft: 'auto',\n marginRight: 'auto',\n top: '10%',\n maxHeight: '80%',\n display: 'flex',\n flexDirection: 'column',\n // Centre the modal vertically on smaller height screens\n // this allows us to fill the full height for maximum usability\n ['@media (max-height: 750px)']: {\n maxHeight: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n },\n }),\n modalBackdrop: css({\n position: 'fixed',\n zIndex: theme.zIndex.modalBackdrop,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n backgroundColor: theme.components.overlay.background,\n }),\n modalHeader: css({\n label: 'modalHeader',\n display: 'flex',\n alignItems: 'center',\n minHeight: '42px',\n margin: theme.spacing(1, 2, 0, 2),\n [theme.breakpoints.down('sm')]: {\n margin: theme.spacing(0, 1, 0, 1),\n },\n }),\n modalHeaderWithTabs: css({\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n }),\n modalHeaderTitle: css({\n fontSize: theme.typography.size.lg,\n margin: theme.spacing(0, 4, 0, 1),\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n top: '2px',\n }),\n modalHeaderIcon: css({\n marginRight: theme.spacing(2),\n fontSize: 'inherit',\n '&:before': {\n verticalAlign: 'baseline',\n },\n }),\n modalHeaderClose: css({\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n color: theme.colors.text.secondary,\n flexGrow: 1,\n justifyContent: 'flex-end',\n }),\n modalContent: css({\n overflow: 'auto',\n padding: theme.spacing(3, 3, 0, 3),\n marginBottom: theme.spacing(3),\n scrollbarWidth: 'thin',\n width: '100%',\n\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(1, 2, 0, 2),\n marginBottom: theme.spacing(2),\n },\n }),\n modalButtonRow: css({\n background: theme.colors.background.primary,\n position: 'sticky',\n bottom: 0,\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(0.5),\n zIndex: 1,\n }),\n };\n};\n","import { AnnotationChangeEvent, AnnotationEventUIModel, CoreApp, DataFrame } from '@grafana/data';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport { AdHocFiltersVariable, dataLayers, sceneGraph, sceneUtils, VizPanel } from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { AdHocFilterItem, PanelContext } from '@grafana/ui';\nimport { annotationServer } from 'app/features/annotations/api';\n\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { getDashboardSceneFor, getPanelIdForVizPanel, getQueryRunnerFor } from '../utils/utils';\n\nimport { DashboardScene } from './DashboardScene';\n\nexport function setDashboardPanelContext(vizPanel: VizPanel, context: PanelContext) {\n const dashboard = getDashboardSceneFor(vizPanel);\n context.app = dashboard.state.editPanel ? CoreApp.PanelEditor : CoreApp.Dashboard;\n\n dashboard.subscribeToState((state) => {\n if (state.editPanel) {\n context.app = CoreApp.PanelEditor;\n } else {\n context.app = CoreApp.Dashboard;\n }\n });\n\n context.canAddAnnotations = () => {\n const dashboard = getDashboardSceneFor(vizPanel);\n const builtInLayer = getBuiltInAnnotationsLayer(dashboard);\n\n // When there is no builtin annotations query we disable the ability to add annotations\n if (!builtInLayer) {\n return false;\n }\n\n // If feature flag is enabled we pass the info of whether annotation can be added through the dashboard permissions\n if (!config.featureToggles.annotationPermissionUpdate && !dashboard.canEditDashboard()) {\n return false;\n }\n\n // If RBAC is enabled there are additional conditions to check.\n return Boolean(dashboard.state.meta.annotationsPermissions?.dashboard.canAdd);\n };\n\n context.canEditAnnotations = (dashboardUID?: string) => {\n const dashboard = getDashboardSceneFor(vizPanel);\n\n // If feature flag is enabled we pass the info of whether annotation can be edited through the dashboard permissions\n if (!config.featureToggles.annotationPermissionUpdate && !dashboard.canEditDashboard()) {\n return false;\n }\n\n if (dashboardUID) {\n return Boolean(dashboard.state.meta.annotationsPermissions?.dashboard.canEdit);\n }\n\n return Boolean(dashboard.state.meta.annotationsPermissions?.organization.canEdit);\n };\n\n context.canDeleteAnnotations = (dashboardUID?: string) => {\n const dashboard = getDashboardSceneFor(vizPanel);\n\n // If feature flag is enabled we pass the info of whether annotation can be deleted through the dashboard permissions\n if (!config.featureToggles.annotationPermissionUpdate && !dashboard.canEditDashboard()) {\n return false;\n }\n\n if (dashboardUID) {\n return Boolean(dashboard.state.meta.annotationsPermissions?.dashboard.canDelete);\n }\n\n return Boolean(dashboard.state.meta.annotationsPermissions?.organization.canDelete);\n };\n\n context.onAnnotationCreate = async (event: AnnotationEventUIModel) => {\n const dashboard = getDashboardSceneFor(vizPanel);\n\n const isRegion = event.from !== event.to;\n const anno = {\n dashboardUID: dashboard.state.uid,\n panelId: getPanelIdForVizPanel(vizPanel),\n isRegion,\n time: event.from,\n timeEnd: isRegion ? event.to : 0,\n tags: event.tags,\n text: event.description,\n };\n\n await annotationServer().save(anno);\n\n reRunBuiltInAnnotationsLayer(dashboard);\n\n context.eventBus.publish(new AnnotationChangeEvent(anno));\n };\n\n context.onAnnotationUpdate = async (event: AnnotationEventUIModel) => {\n const dashboard = getDashboardSceneFor(vizPanel);\n\n const isRegion = event.from !== event.to;\n const anno = {\n id: event.id,\n dashboardUID: dashboard.state.uid,\n panelId: getPanelIdForVizPanel(vizPanel),\n isRegion,\n time: event.from,\n timeEnd: isRegion ? event.to : 0,\n tags: event.tags,\n text: event.description,\n };\n\n await annotationServer().update(anno);\n\n reRunBuiltInAnnotationsLayer(dashboard);\n\n context.eventBus.publish(new AnnotationChangeEvent(anno));\n };\n\n context.onAnnotationDelete = async (id: string) => {\n await annotationServer().delete({ id });\n\n reRunBuiltInAnnotationsLayer(getDashboardSceneFor(vizPanel));\n\n context.eventBus.publish(new AnnotationChangeEvent({ id }));\n };\n\n context.onAddAdHocFilter = (newFilter: AdHocFilterItem) => {\n const dashboard = getDashboardSceneFor(vizPanel);\n\n const queryRunner = getQueryRunnerFor(vizPanel);\n if (!queryRunner) {\n return;\n }\n\n const filterVar = getAdHocFilterVariableFor(dashboard, queryRunner.state.datasource);\n updateAdHocFilterVariable(filterVar, newFilter);\n };\n\n context.canExecuteActions = () => {\n const dashboard = getDashboardSceneFor(vizPanel);\n return dashboard.canEditDashboard();\n };\n\n context.onUpdateData = (frames: DataFrame[]): Promise<boolean> => {\n // TODO\n //return onUpdatePanelSnapshotData(this.props.panel, frames);\n return Promise.resolve(true);\n };\n}\n\nfunction getBuiltInAnnotationsLayer(scene: DashboardScene): dataLayers.AnnotationsDataLayer | undefined {\n const set = dashboardSceneGraph.getDataLayers(scene);\n // When there is no builtin annotations query we disable the ability to add annotations\n\n for (const layer of set.state.annotationLayers) {\n if (layer instanceof dataLayers.AnnotationsDataLayer) {\n if (layer.state.isEnabled && layer.state.query.builtIn) {\n return layer;\n }\n }\n }\n\n return undefined;\n}\n\nfunction reRunBuiltInAnnotationsLayer(scene: DashboardScene) {\n const layer = getBuiltInAnnotationsLayer(scene);\n if (layer) {\n layer.runLayer();\n }\n}\n\nexport function getAdHocFilterVariableFor(scene: DashboardScene, ds: DataSourceRef | null | undefined) {\n const variables = sceneGraph.getVariables(scene);\n\n for (const variable of variables.state.variables) {\n if (sceneUtils.isAdHocVariable(variable)) {\n const filtersDs = variable.state.datasource;\n if (filtersDs === ds || filtersDs?.uid === ds?.uid) {\n return variable;\n }\n }\n }\n\n const newVariable = new AdHocFiltersVariable({\n name: 'Filters',\n datasource: ds,\n supportsMultiValueOperators: Boolean(getDataSourceSrv().getInstanceSettings(ds)?.meta.multiValueFilterOperators),\n useQueriesAsFilterForOptions: true,\n layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,\n });\n\n // Add it to the scene\n variables.setState({\n variables: [...variables.state.variables, newVariable],\n });\n\n return newVariable;\n}\n\nfunction updateAdHocFilterVariable(filterVar: AdHocFiltersVariable, newFilter: AdHocFilterItem) {\n // This function handles 'Filter for value' and 'Filter out value' from table cell\n // We are allowing to add filters with the same key because elastic search ds supports that\n\n // Update is only required when we change operator and keep key and value the same\n // key1 = value1 -> key1 != value1\n const filterToReplaceIndex = filterVar.state.filters.findIndex(\n (filter) =>\n filter.key === newFilter.key && filter.value === newFilter.value && filter.operator !== newFilter.operator\n );\n\n if (filterToReplaceIndex >= 0) {\n const updatedFilters = filterVar.state.filters.slice();\n updatedFilters.splice(filterToReplaceIndex, 1, newFilter);\n filterVar.updateFilters(updatedFilters);\n return;\n }\n\n // Add new filter\n filterVar.updateFilters([...filterVar.state.filters, newFilter]);\n}\n","// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/promql.ts\nimport { Grammar } from 'prismjs';\n\nimport { t } from '@grafana/i18n';\nimport { CompletionItem } from '@grafana/ui';\n\nexport const OPERATORS = ['by', 'group_left', 'group_right', 'ignoring', 'on', 'offset', 'without'];\nexport const LOGICAL_OPERATORS = ['or', 'and', 'unless'];\n\nconst getTrigonometricFunctions: () => CompletionItem[] = () => [\n {\n label: 'acos',\n insertText: 'acos',\n detail: 'acos(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-acos',\n 'calculates the arccosine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'acosh',\n insertText: 'acosh',\n detail: 'acosh(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-acosh',\n 'calculates the inverse hyperbolic cosine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'asin',\n insertText: 'asin',\n detail: 'asin(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-asin',\n 'calculates the arcsine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'asinh',\n insertText: 'asinh',\n detail: 'asinh(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-asinh',\n 'calculates the inverse hyperbolic sine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'atan',\n insertText: 'atan',\n detail: 'atan(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-atan',\n 'calculates the arctangent of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'atanh',\n insertText: 'atanh',\n detail: 'atanh(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-atanh',\n 'calculates the inverse hyperbolic tangent of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'cos',\n insertText: 'cos',\n detail: 'cos(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-cos',\n 'calculates the cosine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'cosh',\n insertText: 'cosh',\n detail: 'cosh(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-cosh',\n 'calculates the hyperbolic cosine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'sin',\n insertText: 'sin',\n detail: 'sin(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-sin',\n 'calculates the sine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'sinh',\n insertText: 'sinh',\n detail: 'sinh(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-sinh',\n 'calculates the hyperbolic sine of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'tan',\n insertText: 'tan',\n detail: 'tan(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-tan',\n 'calculates the tangent of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n {\n label: 'tanh',\n insertText: 'tanh',\n detail: 'tanh(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getTrigonometricFunctions.documentation-tanh',\n 'calculates the hyperbolic tangent of all elements in {{argument}}',\n { argument: 'v' }\n ),\n },\n];\n\nconst getAggregationOptions: () => CompletionItem[] = () => [\n {\n label: 'sum',\n insertText: 'sum',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-sum',\n 'Calculate sum over dimensions'\n ),\n },\n {\n label: 'min',\n insertText: 'min',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-min',\n 'Select minimum over dimensions'\n ),\n },\n {\n label: 'max',\n insertText: 'max',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-max',\n 'Select maximum over dimensions'\n ),\n },\n {\n label: 'avg',\n insertText: 'avg',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-avg',\n 'Calculate the average over dimensions'\n ),\n },\n {\n label: 'group',\n insertText: 'group',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-group',\n 'All values in the resulting vector are 1'\n ),\n },\n {\n label: 'stddev',\n insertText: 'stddev',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-stddev',\n 'Calculate population standard deviation over dimensions'\n ),\n },\n {\n label: 'stdvar',\n insertText: 'stdvar',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-stdvar',\n 'Calculate population standard variance over dimensions'\n ),\n },\n {\n label: 'count',\n insertText: 'count',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-count',\n 'Count number of elements in the vector'\n ),\n },\n {\n label: 'count_values',\n insertText: 'count_values',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-count-values',\n 'Count number of elements with the same value'\n ),\n },\n {\n label: 'bottomk',\n insertText: 'bottomk',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-bottomk',\n 'Smallest k elements by sample value'\n ),\n },\n {\n label: 'topk',\n insertText: 'topk',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-topk',\n 'Largest k elements by sample value'\n ),\n },\n {\n label: 'quantile',\n insertText: 'quantile',\n documentation: t(\n 'grafana-prometheus.promql.getAggregationOptions.documentation-quantile',\n 'Calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions'\n ),\n },\n];\n\nexport const getFunctions = () => [\n ...getAggregationOptions(),\n ...getTrigonometricFunctions(),\n {\n insertText: 'abs',\n label: 'abs',\n detail: 'abs(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-abs',\n 'Returns the input vector with all sample values converted to their absolute value.'\n ),\n },\n {\n insertText: 'absent',\n label: 'absent',\n detail: 'absent(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-absent',\n 'Returns an empty vector if the vector passed to it has any elements and a 1-element vector with the value 1 if the vector passed to it has no elements. This is useful for alerting on when no time series exist for a given metric name and label combination.'\n ),\n },\n {\n insertText: 'absent_over_time',\n label: 'absent_over_time',\n detail: 'absent(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-absent-over-time',\n 'Returns an empty vector if the range vector passed to it has any elements and a 1-element vector with the value 1 if the range vector passed to it has no elements.'\n ),\n },\n {\n insertText: 'ceil',\n label: 'ceil',\n detail: 'ceil(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-ceil',\n 'Rounds the sample values of all elements in `v` up to the nearest integer.'\n ),\n },\n {\n insertText: 'changes',\n label: 'changes',\n detail: 'changes(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-changes',\n 'For each input time series, `changes(v range-vector)` returns the number of times its value has changed within the provided time range as an instant vector.'\n ),\n },\n {\n insertText: 'clamp',\n label: 'clamp',\n detail: 'clamp(v instant-vector, min scalar, max scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-clamp',\n 'Clamps the sample values of all elements in `v` to have a lower limit of `min` and an upper limit of `max`.'\n ),\n },\n {\n insertText: 'clamp_max',\n label: 'clamp_max',\n detail: 'clamp_max(v instant-vector, max scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-clamp-max',\n 'Clamps the sample values of all elements in `v` to have an upper limit of `max`.'\n ),\n },\n {\n insertText: 'clamp_min',\n label: 'clamp_min',\n detail: 'clamp_min(v instant-vector, min scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-clamp-min',\n 'Clamps the sample values of all elements in `v` to have a lower limit of `min`.'\n ),\n },\n {\n insertText: 'count_scalar',\n label: 'count_scalar',\n detail: 'count_scalar(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-count-scalar',\n 'Returns the number of elements in a time series vector as a scalar. This is in contrast to the `count()` aggregation operator, which always returns a vector (an empty one if the input vector is empty) and allows grouping by labels via a `by` clause.'\n ),\n },\n {\n insertText: 'deg',\n label: 'deg',\n detail: 'deg(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-deg',\n 'Converts radians to degrees for all elements in v'\n ),\n },\n {\n insertText: 'day_of_month',\n label: 'day_of_month',\n detail: 'day_of_month(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-day-of-month',\n 'Returns the day of the month for each of the given times in UTC. Returned values are from 1 to 31.'\n ),\n },\n {\n insertText: 'day_of_week',\n label: 'day_of_week',\n detail: 'day_of_week(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-day-of-week',\n 'Returns the day of the week for each of the given times in UTC. Returned values are from 0 to 6, where 0 means Sunday etc.'\n ),\n },\n {\n insertText: 'day_of_year',\n label: 'day_of_year',\n detail: 'day_of_year(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-day-of-year',\n 'Returns the day of the year for each of the given times in UTC. Returned values are from 1 to 365 for non-leap years, and 1 to 366 in leap years.'\n ),\n },\n {\n insertText: 'days_in_month',\n label: 'days_in_month',\n detail: 'days_in_month(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-days-in-month',\n 'Returns number of days in the month for each of the given times in UTC. Returned values are from 28 to 31.'\n ),\n },\n {\n insertText: 'delta',\n label: 'delta',\n detail: 'delta(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-delta',\n 'Calculates the difference between the first and last value of each time series element in a range vector `v`, returning an instant vector with the given deltas and equivalent labels. The delta is extrapolated to cover the full time range as specified in the range vector selector, so that it is possible to get a non-integer result even if the sample values are all integers.'\n ),\n },\n {\n insertText: 'deriv',\n label: 'deriv',\n detail: 'deriv(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-deriv',\n 'Calculates the per-second derivative of the time series in a range vector `v`, using simple linear regression.'\n ),\n },\n {\n insertText: 'double_exponential_smoothing',\n label: 'double_exponential_smoothing',\n detail: 'double_exponential_smoothing(v range-vector, sf scalar, tf scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-double-exponential-smoothing',\n 'Produces a smoothed value for time series based on the range in `v`. The lower the smoothing factor `sf`, the more importance is given to old data. The higher the trend factor `tf`, the more trends in the data is considered. Both `sf` and `tf` must be between 0 and 1.'\n ),\n },\n {\n insertText: 'drop_common_labels',\n label: 'drop_common_labels',\n detail: 'drop_common_labels(instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-drop-common-labels',\n 'Drops all labels that have the same name and value across all series in the input vector.'\n ),\n },\n {\n insertText: 'exp',\n label: 'exp',\n detail: 'exp(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-exp',\n 'Calculates the exponential function for all elements in `v`.\\nSpecial cases are:\\n* `Exp(+Inf) = +Inf` \\n* `Exp(NaN) = NaN`'\n ),\n },\n {\n insertText: 'floor',\n label: 'floor',\n detail: 'floor(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-floor',\n 'Rounds the sample values of all elements in `v` down to the nearest integer.'\n ),\n },\n {\n insertText: 'histogram_quantile',\n label: 'histogram_quantile',\n detail: 'histogram_quantile(φ float, b instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-histogram-quantile',\n 'Calculates the φ-quantile (0 ≤ φ ≤ 1) from the buckets `b` of a histogram. The samples in `b` are the counts of observations in each bucket. Each sample must have a label `le` where the label value denotes the inclusive upper bound of the bucket. (Samples without such a label are silently ignored.) The histogram metric type automatically provides time series with the `_bucket` suffix and the appropriate labels.'\n ),\n },\n {\n insertText: 'holt_winters',\n label: 'holt_winters',\n detail: 'holt_winters(v range-vector, sf scalar, tf scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-holt-winters',\n 'Renamed as double_exponential_smoothing in prometheus v3.x. For prometheus versions equal and greater than v3.0 please use double_exponential_smoothing. \\n\\nProduces a smoothed value for time series based on the range in `v`. The lower the smoothing factor `sf`, the more importance is given to old data. The higher the trend factor `tf`, the more trends in the data is considered. Both `sf` and `tf` must be between 0 and 1.'\n ),\n },\n {\n insertText: 'hour',\n label: 'hour',\n detail: 'hour(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-hour',\n 'Returns the hour of the day for each of the given times in UTC. Returned values are from 0 to 23.'\n ),\n },\n {\n insertText: 'idelta',\n label: 'idelta',\n detail: 'idelta(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-idelta',\n 'Calculates the difference between the last two samples in the range vector `v`, returning an instant vector with the given deltas and equivalent labels.'\n ),\n },\n {\n insertText: 'increase',\n label: 'increase',\n detail: 'increase(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-increase',\n 'Calculates the increase in the time series in the range vector. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for. The increase is extrapolated to cover the full time range as specified in the range vector selector, so that it is possible to get a non-integer result even if a counter increases only by integer increments.'\n ),\n },\n {\n insertText: 'info',\n label: 'info',\n detail: 'info(v instant-vector, [data-label-selector instant-vector])',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-info',\n 'Returns latest details and metadata about a group of metrics, such as their labels and current values, without doing any calculations'\n ),\n },\n {\n insertText: 'irate',\n label: 'irate',\n detail: 'irate(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-irate',\n 'Calculates the per-second instant rate of increase of the time series in the range vector. This is based on the last two data points. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for.'\n ),\n },\n {\n insertText: 'label_join',\n label: 'label_join',\n detail:\n 'label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-label-join',\n 'For each timeseries in `v`, joins all the values of all the `src_labels` using `separator` and returns the timeseries with the label `dst_label` containing the joined value. There can be any number of `src_labels` in this function.'\n ),\n },\n {\n insertText: 'label_replace',\n label: 'label_replace',\n detail: 'label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-label-replace',\n \"For each timeseries in `v`, `label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)` matches the regular expression `regex` against the label `src_label`. If it matches, then the timeseries is returned with the label `dst_label` replaced by the expansion of `replacement`. `$1` is replaced with the first matching subgroup, `$2` with the second etc. If the regular expression doesn't match then the timeseries is returned unchanged.\"\n ),\n },\n {\n insertText: 'ln',\n label: 'ln',\n detail: 'ln(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-ln',\n 'Calculates the natural logarithm for all elements in `v`.\\nSpecial cases are:\\n * `ln(+Inf) = +Inf`\\n * `ln(0) = -Inf`\\n * `ln(x < 0) = NaN`\\n * `ln(NaN) = NaN`'\n ),\n },\n {\n insertText: 'log2',\n label: 'log2',\n detail: 'log2(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-log2',\n 'Calculates the binary logarithm for all elements in `v`. The special cases are equivalent to those in `ln`.'\n ),\n },\n {\n insertText: 'log10',\n label: 'log10',\n detail: 'log10(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-log10',\n 'Calculates the decimal logarithm for all elements in `v`. The special cases are equivalent to those in `ln`.'\n ),\n },\n {\n insertText: 'minute',\n label: 'minute',\n detail: 'minute(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-minute',\n 'Returns the minute of the hour for each of the given times in UTC. Returned values are from 0 to 59.'\n ),\n },\n {\n insertText: 'month',\n label: 'month',\n detail: 'month(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-month',\n 'Returns the month of the year for each of the given times in UTC. Returned values are from 1 to 12, where 1 means January etc.'\n ),\n },\n {\n insertText: 'pi',\n label: 'pi',\n detail: 'pi()',\n documentation: t('grafana-prometheus.promql.getFunctions.documentation-pi', 'Returns pi'),\n },\n {\n insertText: 'predict_linear',\n label: 'predict_linear',\n detail: 'predict_linear(v range-vector, t scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-predict-linear',\n 'Predicts the value of time series `t` seconds from now, based on the range vector `v`, using simple linear regression.'\n ),\n },\n {\n insertText: 'rad',\n label: 'rad',\n detail: 'rad(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-rad',\n 'Converts degrees to radians for all elements in v'\n ),\n },\n {\n insertText: 'rate',\n label: 'rate',\n detail: 'rate(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-rate',\n \"Calculates the per-second average rate of increase of the time series in the range vector. Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for. Also, the calculation extrapolates to the ends of the time range, allowing for missed scrapes or imperfect alignment of scrape cycles with the range's time period.\"\n ),\n },\n {\n insertText: 'resets',\n label: 'resets',\n detail: 'resets(v range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-resets',\n 'For each input time series, `resets(v range-vector)` returns the number of counter resets within the provided time range as an instant vector. Any decrease in the value between two consecutive samples is interpreted as a counter reset.'\n ),\n },\n {\n insertText: 'round',\n label: 'round',\n detail: 'round(v instant-vector, to_nearest=1 scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-round',\n 'Rounds the sample values of all elements in `v` to the nearest integer. Ties are resolved by rounding up. The optional `to_nearest` argument allows specifying the nearest multiple to which the sample values should be rounded. This multiple may also be a fraction.'\n ),\n },\n {\n insertText: 'scalar',\n label: 'scalar',\n detail: 'scalar(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-scalar',\n 'Given a single-element input vector, `scalar(v instant-vector)` returns the sample value of that single element as a scalar. If the input vector does not have exactly one element, `scalar` will return `NaN`.'\n ),\n },\n {\n insertText: 'sgn',\n label: 'sgn',\n detail: 'sgn(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-sgn',\n 'Returns a vector with all sample values converted to their sign, defined as this: 1 if v is positive, -1 if v is negative and 0 if v is equal to zero.'\n ),\n },\n {\n insertText: 'sort',\n label: 'sort',\n detail: 'sort(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-sort',\n 'Returns vector elements sorted by their sample values, in ascending order.'\n ),\n },\n {\n insertText: 'sort_desc',\n label: 'sort_desc',\n detail: 'sort_desc(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-sort-desc',\n 'Returns vector elements sorted by their sample values, in descending order.'\n ),\n },\n {\n insertText: 'sqrt',\n label: 'sqrt',\n detail: 'sqrt(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-sqrt',\n 'Calculates the square root of all elements in `v`.'\n ),\n },\n {\n insertText: 'time',\n label: 'time',\n detail: 'time()',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-time',\n 'Returns the number of seconds since January 1, 1970 UTC. Note that this does not actually return the current time, but the time at which the expression is to be evaluated.'\n ),\n },\n {\n insertText: 'timestamp',\n label: 'timestamp',\n detail: 'timestamp(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-timestamp',\n 'Returns the timestamp of each of the samples of the given vector as the number of seconds since January 1, 1970 UTC.'\n ),\n },\n {\n insertText: 'vector',\n label: 'vector',\n detail: 'vector(s scalar)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-vector',\n 'Returns the scalar `s` as a vector with no labels.'\n ),\n },\n {\n insertText: 'year',\n label: 'year',\n detail: 'year(v=vector(time()) instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-year',\n 'Returns the year for each of the given times in UTC.'\n ),\n },\n {\n insertText: 'avg_over_time',\n label: 'avg_over_time',\n detail: 'avg_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-avg-over-time',\n 'The average value of all points in the specified interval.'\n ),\n },\n {\n insertText: 'min_over_time',\n label: 'min_over_time',\n detail: 'min_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-min-over-time',\n 'The minimum value of all points in the specified interval.'\n ),\n },\n {\n insertText: 'max_over_time',\n label: 'max_over_time',\n detail: 'max_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-max-over-time',\n 'The maximum value of all points in the specified interval.'\n ),\n },\n {\n insertText: 'sum_over_time',\n label: 'sum_over_time',\n detail: 'sum_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-sum-over-time',\n 'The sum of all values in the specified interval.'\n ),\n },\n {\n insertText: 'count_over_time',\n label: 'count_over_time',\n detail: 'count_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-count-over-time',\n 'The count of all values in the specified interval.'\n ),\n },\n {\n insertText: 'quantile_over_time',\n label: 'quantile_over_time',\n detail: 'quantile_over_time(scalar, range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-quantile-over-time',\n 'The φ-quantile (0 ≤ φ ≤ 1) of the values in the specified interval.'\n ),\n },\n {\n insertText: 'stddev_over_time',\n label: 'stddev_over_time',\n detail: 'stddev_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-stddev-over-time',\n 'The population standard deviation of the values in the specified interval.'\n ),\n },\n {\n insertText: 'stdvar_over_time',\n label: 'stdvar_over_time',\n detail: 'stdvar_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-stdvar-over-time',\n 'The population standard variance of the values in the specified interval.'\n ),\n },\n {\n insertText: 'last_over_time',\n label: 'last_over_time',\n detail: 'last_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-last-over-time',\n 'The most recent point value in specified interval.'\n ),\n },\n {\n insertText: 'present_over_time',\n label: 'present_over_time',\n detail: 'present_over_time(range-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-present-over-time',\n 'The value 1 for any series in the specified interval.'\n ),\n },\n {\n insertText: 'histogram_avg',\n label: 'histogram_avg',\n detail: 'histogram_avg(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-histogram-avg',\n 'Returns the arithmetic average of observed values stored in a native histogram. Samples that are not native histograms are ignored and do not show up in the returned vector.'\n ),\n },\n {\n insertText: 'histogram_count',\n label: 'histogram_count',\n detail: 'histogram_count(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-histogram-count',\n 'Returns the count of observations stored in a native histogram.'\n ),\n },\n {\n insertText: 'histogram_sum',\n label: 'histogram_sum',\n detail: 'histogram_sum(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-histogram-sum',\n 'Returns the sum of observations stored in a native histogram.'\n ),\n },\n {\n insertText: 'histogram_fraction',\n label: 'histogram_fraction',\n detail: 'histogram_fraction(lower scalar, upper scalar, v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-histogram-fraction',\n 'Returns the estimated fraction of observations between the provided lower and upper values.'\n ),\n },\n {\n insertText: 'histogram_stddev',\n label: 'histogram_stddev',\n detail: 'histogram_stddev(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-histogram-stddev',\n 'Returns the estimated standard deviation of observations in a native histogram, based on the geometric mean of the buckets where the observations lie.'\n ),\n },\n {\n insertText: 'histogram_stdvar',\n label: 'histogram_stdvar',\n detail: 'histogram_stdvar(v instant-vector)',\n documentation: t(\n 'grafana-prometheus.promql.getFunctions.documentation-histogram-stdvar',\n 'Returns the estimated standard variance of observations in a native histogram.'\n ),\n },\n];\n\nexport const promqlGrammar: Grammar = {\n comment: {\n pattern: /#.*/,\n },\n 'context-aggregation': {\n pattern: /((by|without)\\s*)\\([^)]*\\)/, // by ()\n lookbehind: true,\n inside: {\n 'label-key': {\n pattern: /[^(),\\s][^,)]*[^),\\s]*/,\n alias: 'attr-name',\n },\n punctuation: /[()]/,\n },\n },\n 'context-labels': {\n pattern: /\\{[^}]*(?=}?)/,\n greedy: true,\n inside: {\n comment: {\n pattern: /#.*/,\n },\n 'label-key': {\n pattern: /[a-z_]\\w*(?=\\s*(=|!=|=~|!~))/,\n alias: 'attr-name',\n greedy: true,\n },\n 'label-value': {\n pattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n greedy: true,\n alias: 'attr-value',\n },\n punctuation: /[{]/,\n },\n },\n function: new RegExp(\n `\\\\b(?:${getFunctions()\n .map((f) => f.label)\n .join('|')})(?=\\\\s*\\\\()`,\n 'i'\n ),\n 'context-range': [\n {\n pattern: /\\[[^\\]]*(?=])/, // [1m]\n inside: {\n 'range-duration': {\n pattern: /\\b\\d+[smhdwy]\\b/i,\n alias: 'number',\n },\n },\n },\n {\n pattern: /(offset\\s+)\\w+/, // offset 1m\n lookbehind: true,\n inside: {\n 'range-duration': {\n pattern: /\\b\\d+[smhdwy]\\b/i,\n alias: 'number',\n },\n },\n },\n ],\n idList: {\n pattern: /\\d+(\\|\\d+)+/,\n alias: 'number',\n },\n number: /\\b-?\\d+((\\.\\d*)?([eE][+-]?\\d+)?)?\\b/,\n operator: new RegExp(`/[-+*/=%^~]|&&?|\\\\|?\\\\||!=?|<(?:=>?|<|>)?|>[>=]?|\\\\b(?:${OPERATORS.join('|')})\\\\b`, 'i'),\n punctuation: /[{};()`,.]/,\n};\n","/**\n * @beta\n * Proxies a ES6 class so that it can be used as a base class for an ES5 class\n */\nexport function makeClassES5Compatible<T extends abstract new (...args: ConstructorParameters<T>) => InstanceType<T>>(\n ES6Class: T\n): T {\n return new Proxy(ES6Class, {\n // ES5 code will call it like a function using super\n apply(target, self, argumentsList) {\n if (typeof Reflect === 'undefined' || !Reflect.construct) {\n alert('Browser is too old');\n }\n\n return Reflect.construct(target, argumentsList, self.constructor);\n },\n });\n}\n","import { UrlQueryMap } from '@grafana/data';\n\nimport { SECTION_STORAGE_KEY } from './constants';\nimport { SearchState } from './types';\n\n/**\n * Check if search query has filters enabled. Excludes folderId\n * @param query\n */\nexport const hasFilters = (query: SearchState) => {\n if (!query) {\n return false;\n }\n return Boolean(query.query || query.tag?.length > 0 || query.starred || query.sort);\n};\n\n/** Cleans up old local storage values that remembered many open folders */\nexport const cleanupOldExpandedFolders = () => {\n const keyPrefix = SECTION_STORAGE_KEY + '.';\n\n for (let index = 0; index < window.localStorage.length; index++) {\n const lsKey = window.localStorage.key(index);\n if (lsKey?.startsWith(keyPrefix)) {\n window.localStorage.removeItem(lsKey);\n }\n }\n};\n\n/**\n * Get storage key for a dashboard folder by its title\n * @param title\n */\nexport const getSectionStorageKey = (title = 'General') => {\n return `${SECTION_STORAGE_KEY}.${title.toLowerCase()}`;\n};\n\n/**\n * Remove undefined keys from url params object and format non-primitive values\n * @param params\n * @param folder\n */\nexport const parseRouteParams = (params: UrlQueryMap) => {\n const cleanedParams = Object.entries(params).reduce<Partial<SearchState>>((obj, [key, val]) => {\n if (!val) {\n return obj;\n } else if (key === 'tag' && !Array.isArray(val)) {\n return { ...obj, tag: [val] as string[] };\n }\n\n return { ...obj, [key]: val };\n }, {});\n\n if (params.folder) {\n const folderStr = `folder:${params.folder}`;\n return {\n ...cleanedParams,\n query: `${folderStr} ${(cleanedParams.query ?? '').replace(folderStr, '')}`,\n };\n }\n\n return { ...cleanedParams };\n};\n","import { getActiveThreshold } from '../field/thresholds';\nimport { stringToJsRegex } from '../text/string';\nimport { ThresholdsConfig } from '../types/thresholds';\nimport {\n MappingType,\n SpecialValueMatch,\n SpecialValueOptions,\n ValueMap,\n ValueMapping,\n ValueMappingResult,\n} from '../types/valueMapping';\n\nexport function getValueMappingResult(valueMappings: ValueMapping[], value: any): ValueMappingResult | null {\n for (const vm of valueMappings) {\n switch (vm.type) {\n case MappingType.ValueToText:\n if (value == null) {\n continue;\n }\n\n const result = vm.options[value];\n if (result) {\n return result;\n }\n\n break;\n\n case MappingType.RangeToText:\n if (value == null) {\n continue;\n }\n\n const valueAsNumber = parseFloat(value);\n if (isNaN(valueAsNumber)) {\n continue;\n }\n\n const from = vm.options.from ?? -Infinity;\n\n const isNumFrom = !isNaN(from);\n if (isNumFrom && valueAsNumber < from) {\n continue;\n }\n\n const to = vm.options.to ?? Infinity;\n\n const isNumTo = !isNaN(to);\n if (isNumTo && valueAsNumber > to) {\n continue;\n }\n\n return vm.options.result;\n\n case MappingType.RegexToText:\n if (value == null) {\n continue;\n }\n\n if (typeof value !== 'string') {\n continue;\n }\n\n const regex = stringToJsRegex(vm.options.pattern);\n if (value.match(regex)) {\n const res = { ...vm.options.result };\n\n if (res.text != null) {\n res.text = value.replace(regex, vm.options.result.text || '');\n }\n\n return res;\n }\n\n case MappingType.SpecialValue:\n switch ((vm.options as SpecialValueOptions).match) {\n case SpecialValueMatch.Null: {\n if (value == null) {\n return vm.options.result;\n }\n break;\n }\n case SpecialValueMatch.NaN: {\n if (typeof value === 'number' && isNaN(value)) {\n return vm.options.result;\n }\n break;\n }\n case SpecialValueMatch.NullAndNaN: {\n if ((typeof value === 'number' && isNaN(value)) || value == null) {\n return vm.options.result;\n }\n break;\n }\n case SpecialValueMatch.True: {\n if (value === true || value === 'true') {\n return vm.options.result;\n }\n break;\n }\n case SpecialValueMatch.False: {\n if (value === false || value === 'false') {\n return vm.options.result;\n }\n break;\n }\n case SpecialValueMatch.Empty: {\n if (value === '') {\n return vm.options.result;\n }\n break;\n }\n }\n }\n }\n\n return null;\n}\n\n// Ref https://stackoverflow.com/a/58550111\nexport function isNumeric(num: unknown) {\n return (typeof num === 'number' || (typeof num === 'string' && num.trim() !== '')) && !isNaN(num as number);\n}\n\n/**\n * @deprecated use MappingType instead\n * @internal\n */\nexport enum LegacyMappingType {\n ValueToText = 1,\n RangeToText = 2,\n}\n\n/**\n * @alpha\n * Converts the old Angular value mappings to new react style\n */\nexport function convertOldAngularValueMappings(panel: any, migratedThresholds?: ThresholdsConfig): ValueMapping[] {\n const mappings: ValueMapping[] = [];\n\n // Guess the right type based on options\n let mappingType = panel.mappingType;\n if (!panel.mappingType) {\n if (panel.valueMaps && panel.valueMaps.length) {\n mappingType = 1;\n } else if (panel.rangeMaps && panel.rangeMaps.length) {\n mappingType = 2;\n }\n }\n if (mappingType === 1) {\n for (let i = 0; i < panel.valueMaps.length; i++) {\n const map = panel.valueMaps[i];\n mappings.push(\n upgradeOldAngularValueMapping(\n {\n ...map,\n id: i, // used for order\n type: MappingType.ValueToText,\n },\n panel.fieldConfig?.defaults?.thresholds || migratedThresholds\n )\n );\n }\n } else if (mappingType === 2) {\n for (let i = 0; i < panel.rangeMaps.length; i++) {\n const map = panel.rangeMaps[i];\n mappings.push(\n upgradeOldAngularValueMapping(\n {\n ...map,\n id: i, // used for order\n type: MappingType.RangeToText,\n },\n panel.fieldConfig?.defaults?.thresholds || migratedThresholds\n )\n );\n }\n }\n\n return mappings;\n}\n\nfunction upgradeOldAngularValueMapping(old: any, thresholds?: ThresholdsConfig): ValueMapping {\n const valueMaps: ValueMap = { type: MappingType.ValueToText, options: {} };\n const newMappings: ValueMapping[] = [];\n\n // Use the color we would have picked from thesholds\n let color: string | undefined = undefined;\n const numeric = parseFloat(old.text);\n if (thresholds && !isNaN(numeric)) {\n const level = getActiveThreshold(numeric, thresholds.steps);\n if (level && level.color) {\n color = level.color;\n }\n }\n\n switch (old.type) {\n case LegacyMappingType.ValueToText:\n case MappingType.ValueToText:\n if (old.value != null) {\n if (old.value === 'null') {\n newMappings.push({\n type: MappingType.SpecialValue,\n options: {\n match: SpecialValueMatch.Null,\n result: { text: old.text, color },\n },\n });\n } else {\n valueMaps.options[String(old.value)] = {\n text: old.text,\n color,\n };\n }\n }\n break;\n case LegacyMappingType.RangeToText:\n case MappingType.RangeToText:\n if (old.from === 'null' || old.to === 'null') {\n newMappings.push({\n type: MappingType.SpecialValue,\n options: {\n match: SpecialValueMatch.Null,\n result: { text: old.text, color },\n },\n });\n } else {\n newMappings.push({\n type: MappingType.RangeToText,\n options: {\n from: +old.from,\n to: +old.to,\n result: { text: old.text, color },\n },\n });\n }\n break;\n }\n\n if (Object.keys(valueMaps.options).length > 0) {\n newMappings.unshift(valueMaps);\n }\n\n return newMappings[0];\n}\n","import { Property } from 'csstype';\nimport { FC } from 'react';\nimport { CellProps, Column, Row, TableState, UseExpandedRowProps } from 'react-table';\n\nimport {\n DataFrame,\n Field,\n KeyValue,\n SelectableValue,\n TimeRange,\n FieldConfigSource,\n ActionModel,\n InterpolateFunction,\n} from '@grafana/data';\nimport * as schema from '@grafana/schema';\n\nimport { TableCellInspectorMode } from './TableCellInspector';\nimport { TableStyles } from './TableRT/styles';\n\nexport {\n type FieldTextAlignment,\n TableCellBackgroundDisplayMode,\n TableCellDisplayMode,\n type TableAutoCellOptions,\n type TableSparklineCellOptions,\n type TableBarGaugeCellOptions,\n type TableColoredBackgroundCellOptions,\n type TableColorTextCellOptions,\n type TableImageCellOptions,\n type TableJsonViewCellOptions,\n} from '@grafana/schema';\n\nexport interface TableRow {\n [x: string]: any;\n}\n\nexport type InspectCell = { value: any; mode: TableCellInspectorMode };\n\nexport const FILTER_FOR_OPERATOR = '=';\nexport const FILTER_OUT_OPERATOR = '!=';\nexport type AdHocFilterOperator = typeof FILTER_FOR_OPERATOR | typeof FILTER_OUT_OPERATOR;\nexport type AdHocFilterItem = { key: string; value: string; operator: AdHocFilterOperator };\nexport type TableFilterActionCallback = (item: AdHocFilterItem) => void;\nexport type TableColumnResizeActionCallback = (fieldDisplayName: string, width: number) => void;\nexport type TableSortByActionCallback = (state: TableSortByFieldState[]) => void;\nexport type TableInspectCellCallback = (state: InspectCell) => void;\n\nexport interface TableSortByFieldState {\n displayName: string;\n desc?: boolean;\n}\n\nexport interface TableCellProps extends CellProps<any> {\n tableStyles: TableStyles;\n cellProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n field: Field;\n onCellFilterAdded?: TableFilterActionCallback;\n innerWidth: number;\n frame: DataFrame;\n actions?: ActionModel[]; // unused in NG\n setInspectCell?: TableInspectCellCallback;\n}\n\nexport type CellComponent = FC<TableCellProps>;\n\nexport type FooterItem = Array<KeyValue<string>> | string | undefined;\n\nexport type GrafanaTableColumn = Column & {\n field: Field;\n sortType: 'number' | 'basic' | 'alphanumeric-insensitive';\n filter: (rows: Row[], id: string, filterValues?: SelectableValue[]) => SelectableValue[];\n justifyContent: Property.JustifyContent;\n minWidth: number;\n};\n\nexport interface TableFooterCalc {\n show: boolean;\n reducer: string[]; // actually 1 value\n fields?: string[];\n enablePagination?: boolean;\n countRows?: boolean;\n}\n\nexport interface GrafanaTableState extends TableState {\n // We manually track this to know where to reset the row heights. This is needed because react-table removed the\n // collapsed IDs/indexes from the state.expanded map so when collapsing we would have to do a diff of current and\n // previous state.expanded to know what changed.\n lastExpandedOrCollapsedIndex?: number;\n}\n\nexport interface GrafanaTableRow extends Row, UseExpandedRowProps<{}> {}\n\nexport interface TableStateReducerProps {\n onColumnResize?: TableColumnResizeActionCallback;\n onSortByChange?: TableSortByActionCallback;\n data: DataFrame;\n}\n\n// export interface Props {\nexport interface TableRTProps {\n ariaLabel?: string;\n data: DataFrame;\n width: number;\n height: number;\n maxHeight?: number;\n /** Minimal column width specified in pixels */\n columnMinWidth?: number;\n noHeader?: boolean;\n showTypeIcons?: boolean;\n resizable?: boolean;\n initialSortBy?: TableSortByFieldState[];\n onColumnResize?: TableColumnResizeActionCallback;\n onSortByChange?: TableSortByActionCallback;\n onCellFilterAdded?: TableFilterActionCallback;\n footerOptions?: TableFooterCalc;\n footerValues?: FooterItem[];\n enablePagination?: boolean;\n cellHeight?: schema.TableCellHeight;\n /** @alpha Used by SparklineCell when provided */\n timeRange?: TimeRange;\n enableSharedCrosshair?: boolean;\n // The index of the field value that the table will initialize scrolled to\n initialRowIndex?: number;\n fieldConfig?: FieldConfigSource;\n getActions?: GetActionsFunction;\n replaceVariables?: InterpolateFunction;\n}\n\n/**\n * @alpha\n * Props that will be passed to the TableCustomCellOptions.cellComponent when rendered.\n */\nexport interface CustomCellRendererProps {\n field: Field;\n rowIndex: number;\n frame: DataFrame;\n // Would be great to have generic type for this but that would need having a generic DataFrame type where the field\n // types could be propagated here.\n value: unknown;\n}\n\n/**\n * @alpha\n * Can be used to define completely custom cell contents by providing a custom cellComponent.\n */\nexport interface TableCustomCellOptions {\n cellComponent: FC<CustomCellRendererProps>;\n type: schema.TableCellDisplayMode.Custom;\n}\n\n/**\n * @alpha\n * Props that will be passed to the TableCustomCellOptions.cellComponent when rendered.\n */\nexport interface CustomHeaderRendererProps {\n field: Field;\n defaultContent: React.ReactNode;\n}\n\n// As cue/schema cannot define function types (as main point of schema is to be serializable) we have to extend the\n// types here with the dynamic API. This means right now this is not usable as a table panel option for example.\nexport type TableCellOptions = schema.TableCellOptions | TableCustomCellOptions;\nexport type TableFieldOptions = Omit<schema.TableFieldOptions, 'cellOptions'> & {\n cellOptions: TableCellOptions;\n headerComponent?: React.ComponentType<CustomHeaderRendererProps>;\n};\n\n// Cell background and text colors\n// Can also be used for table rows\nexport interface CellColors {\n textColor?: string;\n bgColor?: string;\n bgHoverColor?: string;\n}\n\nexport type GetActionsFunction = (\n frame: DataFrame,\n field: Field,\n rowIndex: number,\n replaceVariables?: InterpolateFunction\n) => ActionModel[];\n","import uPlot, { AlignedData, Options, PaddingSide } from 'uplot';\n\nimport {\n DataFrame,\n DisplayProcessor,\n DisplayValue,\n Field,\n fieldReducers,\n getDisplayProcessor,\n GrafanaTheme2,\n reduceField,\n ReducerID,\n} from '@grafana/data';\nimport { BarAlignment, GraphDrawStyle, GraphTransform, LineInterpolation, StackingMode } from '@grafana/schema';\n\nimport { attachDebugger } from '../../utils/debug';\nimport { createLogger } from '../../utils/logger';\n\nimport { buildScaleKey } from './internal';\n\nconst paddingSide: PaddingSide = (u, side, sidesWithAxes) => {\n let hasCrossAxis = side % 2 ? sidesWithAxes[0] || sidesWithAxes[2] : sidesWithAxes[1] || sidesWithAxes[3];\n\n return sidesWithAxes[side] || !hasCrossAxis ? 0 : 8;\n};\n\nexport const DEFAULT_PLOT_CONFIG: Partial<Options> = {\n ms: 1,\n focus: {\n alpha: 1,\n },\n cursor: {\n focus: {\n prox: 30,\n },\n },\n legend: {\n show: false,\n },\n padding: [paddingSide, paddingSide, paddingSide, paddingSide],\n series: [],\n hooks: {},\n};\n\n/** @internal */\ninterface StackMeta {\n totals: AlignedData;\n}\n\n/** @internal */\nexport interface StackingGroup {\n series: number[];\n dir: StackDirection;\n}\n\n/** @internal */\nconst enum StackDirection {\n Pos = 1,\n Neg = -1,\n}\n\n// generates bands between adjacent group series\n/** @internal */\nexport function getStackingBands(group: StackingGroup) {\n let bands: uPlot.Band[] = [];\n let { series, dir } = group;\n let lastIdx = series.length - 1;\n\n let rSeries = series.slice().reverse();\n\n rSeries.forEach((si, i) => {\n if (i !== lastIdx) {\n let nextIdx = rSeries[i + 1];\n bands.push({\n series: [si, nextIdx],\n // fill direction is inverted from stack direction\n dir: (-1 * dir) as 1 | -1,\n });\n }\n });\n\n return bands;\n}\n\n// expects an AlignedFrame\n/** @internal */\nexport function getStackingGroups(frame: DataFrame) {\n let groups: Map<string, StackingGroup> = new Map();\n\n frame.fields.forEach(({ config, values, type }, i) => {\n // skip x or time field\n if (i === 0) {\n return;\n }\n\n let { custom } = config;\n\n if (custom == null) {\n return;\n }\n\n // TODO: currently all AlignedFrame fields end up in uplot series & data, even custom.hideFrom?.viz\n // ideally hideFrom.viz fields would be excluded so we can remove this\n if (custom.hideFrom?.viz) {\n return;\n }\n\n let { stacking } = custom;\n\n if (stacking == null) {\n return;\n }\n\n let { mode: stackingMode, group: stackingGroup } = stacking;\n\n // not stacking\n if (stackingMode === StackingMode.None) {\n return;\n }\n\n // will this be stacked up or down after any transforms applied\n let transform = custom.transform;\n let stackDir = getStackDirection(transform, values);\n\n let drawStyle: GraphDrawStyle = custom.drawStyle;\n let drawStyle2: BarAlignment | LineInterpolation | null =\n drawStyle === GraphDrawStyle.Bars\n ? custom.barAlignment\n : drawStyle === GraphDrawStyle.Line\n ? custom.lineInterpolation\n : null;\n\n let stackKey = `${stackDir}|${stackingMode}|${stackingGroup}|${buildScaleKey(\n config,\n type\n )}|${drawStyle}|${drawStyle2}`;\n\n let group = groups.get(stackKey);\n\n if (group == null) {\n group = {\n series: [],\n dir: stackDir,\n };\n\n groups.set(stackKey, group);\n }\n\n group.series.push(i);\n });\n\n return [...groups.values()];\n}\n\n/** @internal */\nexport function preparePlotData2(\n frame: DataFrame,\n stackingGroups: StackingGroup[],\n onStackMeta?: (meta: StackMeta) => void\n): AlignedData {\n let data = Array(frame.fields.length);\n\n let stacksQty = stackingGroups.length;\n\n let dataLen = frame.length;\n let zeroArr = stacksQty > 0 ? Array(dataLen).fill(0) : [];\n let falseArr = stacksQty > 0 ? Array(dataLen).fill(false) : [];\n let accums = Array.from({ length: stacksQty }, () => zeroArr.slice());\n\n let anyValsAtX = Array.from({ length: stacksQty }, () => falseArr.slice());\n\n // figure out at which time indices each stacking group has any values\n // (needed to avoid absorbing initial accum 0s at unrelated joined timestamps)\n stackingGroups.forEach((group, groupIdx) => {\n let groupValsAtX = anyValsAtX[groupIdx];\n\n group.series.forEach((seriesIdx) => {\n let field = frame.fields[seriesIdx];\n\n if (field.config.custom?.hideFrom?.viz) {\n return;\n }\n\n let vals = field.values;\n\n for (let i = 0; i < dataLen; i++) {\n if (vals[i] != null) {\n groupValsAtX[i] = true;\n }\n }\n });\n });\n\n frame.fields.forEach((field, i) => {\n let vals = field.values;\n\n if (i === 0) {\n data[i] = vals;\n return;\n }\n\n let { custom } = field.config;\n\n if (!custom || custom.hideFrom?.viz) {\n data[i] = vals;\n return;\n }\n\n // apply transforms\n if (custom.transform === GraphTransform.Constant) {\n let firstValIdx = vals.findIndex((v) => v != null);\n let firstVal = vals[firstValIdx];\n vals = Array(vals.length).fill(undefined);\n vals[firstValIdx] = firstVal;\n } else {\n vals = vals.slice();\n\n if (custom.transform === GraphTransform.NegativeY) {\n for (let i = 0; i < vals.length; i++) {\n if (vals[i] != null) {\n vals[i] *= -1;\n }\n }\n }\n }\n\n let stackingMode = custom.stacking?.mode;\n\n if (!stackingMode || stackingMode === StackingMode.None) {\n data[i] = vals;\n } else {\n let stackIdx = stackingGroups.findIndex((group) => group.series.indexOf(i) > -1);\n\n let accum = accums[stackIdx];\n let groupValsAtX = anyValsAtX[stackIdx];\n let stacked = (data[i] = Array(dataLen));\n\n for (let i = 0; i < dataLen; i++) {\n let v = vals[i];\n\n if (v != null) {\n stacked[i] = accum[i] += v;\n } else {\n stacked[i] = groupValsAtX[i] ? accum[i] : v;\n }\n }\n }\n });\n\n if (onStackMeta) {\n let accumsBySeriesIdx = data.map((vals, i) => {\n let stackIdx = stackingGroups.findIndex((group) => group.series.indexOf(i) > -1);\n return stackIdx !== -1 ? accums[stackIdx] : vals;\n });\n\n onStackMeta({\n totals: accumsBySeriesIdx,\n });\n }\n\n // re-compute by percent\n frame.fields.forEach((field, i) => {\n if (i === 0 || field.config.custom?.hideFrom?.viz) {\n return;\n }\n\n let stackingMode = field.config.custom?.stacking?.mode;\n\n if (stackingMode === StackingMode.Percent) {\n let stackIdx = stackingGroups.findIndex((group) => group.series.indexOf(i) > -1);\n let accum = accums[stackIdx];\n let group = stackingGroups[stackIdx];\n\n let stacked = data[i];\n\n for (let i = 0; i < dataLen; i++) {\n let v = stacked[i];\n\n if (v != null) {\n // v / accum will always be pos, so properly (re)sign by group stacking dir\n stacked[i] = accum[i] === 0 ? 0 : group.dir * (v / accum[i]);\n }\n }\n }\n });\n\n return data;\n}\n\n/**\n * Finds y axis midpoint for point at given idx (css pixels relative to uPlot canvas)\n * @internal\n **/\n\nexport function findMidPointYPosition(u: uPlot, idx: number) {\n let y;\n let sMaxIdx = 1;\n let sMinIdx = 1;\n // assume min/max being values of 1st series\n let max = u.data[1][idx];\n let min = u.data[1][idx];\n\n // find min max values AND ids of the corresponding series to get the scales\n for (let i = 1; i < u.data.length; i++) {\n const sData = u.data[i];\n const sVal = sData[idx];\n if (sVal != null) {\n if (max == null) {\n max = sVal;\n } else {\n if (sVal > max) {\n max = u.data[i][idx];\n sMaxIdx = i;\n }\n }\n if (min == null) {\n min = sVal;\n } else {\n if (sVal < min) {\n min = u.data[i][idx];\n sMinIdx = i;\n }\n }\n }\n }\n\n if (min == null && max == null) {\n // no tooltip to show\n y = undefined;\n } else if (min != null && max != null) {\n // find median position\n y = (u.valToPos(min, u.series[sMinIdx].scale!) + u.valToPos(max, u.series[sMaxIdx].scale!)) / 2;\n } else {\n // snap tooltip to min OR max point, one of those is not null :)\n y = u.valToPos((min || max)!, u.series[(sMaxIdx || sMinIdx)!].scale!);\n }\n\n // if y is out of canvas bounds, snap it to the bottom\n if (y !== undefined && y < 0) {\n y = u.bbox.height / devicePixelRatio;\n }\n\n return y;\n}\n\nfunction getStackDirection(transform: GraphTransform, data: unknown[]) {\n const hasNegSamp = hasNegSample(data);\n\n if (transform === GraphTransform.NegativeY) {\n return hasNegSamp ? StackDirection.Pos : StackDirection.Neg;\n }\n return hasNegSamp ? StackDirection.Neg : StackDirection.Pos;\n}\n\n// similar to isLikelyAscendingVector()\nfunction hasNegSample(data: unknown[], samples = 100) {\n const len = data.length;\n\n if (len === 0) {\n return false;\n }\n\n // skip leading & trailing nullish\n let firstIdx = 0;\n let lastIdx = len - 1;\n\n while (firstIdx <= lastIdx && data[firstIdx] == null) {\n firstIdx++;\n }\n\n while (lastIdx >= firstIdx && data[lastIdx] == null) {\n lastIdx--;\n }\n\n let negCount = 0;\n let posCount = 0;\n\n if (lastIdx >= firstIdx) {\n const stride = Math.max(1, Math.floor((lastIdx - firstIdx + 1) / samples));\n\n for (let i = firstIdx; i <= lastIdx; i += stride) {\n const v = data[i];\n\n if (v != null && typeof v === 'number') {\n if (v < 0 || Object.is(v, -0)) {\n negCount++;\n } else if (v > 0) {\n posCount++;\n }\n }\n }\n\n if (negCount > posCount) {\n return true;\n }\n }\n\n return false;\n}\n\nexport const getDisplayValuesForCalcs = (calcs: string[], field: Field, theme: GrafanaTheme2) => {\n if (!calcs?.length) {\n return [];\n }\n\n const defaultFormatter = (v: any) => (v == null ? '-' : v.toFixed(1));\n const fmt = field.display ?? defaultFormatter;\n let countFormatter: DisplayProcessor | null = null;\n\n const fieldCalcs = reduceField({\n field: field,\n reducers: calcs,\n });\n\n return calcs.map<DisplayValue>((reducerId) => {\n const fieldReducer = fieldReducers.get(reducerId);\n let formatter = fmt;\n\n if (fieldReducer.id === ReducerID.diffperc) {\n formatter = getDisplayProcessor({\n field: {\n ...field,\n config: {\n ...field.config,\n unit: 'percent',\n },\n },\n theme,\n });\n }\n\n if (\n fieldReducer.id === ReducerID.count ||\n fieldReducer.id === ReducerID.changeCount ||\n fieldReducer.id === ReducerID.distinctCount\n ) {\n if (!countFormatter) {\n countFormatter = getDisplayProcessor({\n field: {\n ...field,\n config: {\n ...field.config,\n unit: 'none',\n },\n },\n theme,\n });\n }\n formatter = countFormatter;\n }\n\n return {\n ...formatter(fieldCalcs[reducerId]),\n title: fieldReducer.name,\n description: fieldReducer.description,\n };\n });\n};\n\n// Dev helpers\n\n/** @internal */\nexport const pluginLogger = createLogger('uPlot');\nexport const pluginLog = pluginLogger.logger;\n// pluginLogger.enable();\nattachDebugger('graphng', undefined, pluginLogger);\n","import { AsyncThunk, Draft, PayloadAction, SerializedError, createSlice, isAsyncThunkAction } from '@reduxjs/toolkit';\n\nimport { AppEvents } from '@grafana/data';\nimport { FetchError, isFetchError } from '@grafana/runtime';\nimport { appEvents } from 'app/core/core';\n\nimport { LogMessages, logInfo } from '../Analytics';\n\nimport { isErrorLike } from './misc';\n\nexport interface AsyncRequestState<T> {\n result?: T;\n loading: boolean;\n error?: SerializedError;\n dispatched: boolean;\n requestId?: string;\n}\n\nexport const initialAsyncRequestState: Pick<\n AsyncRequestState<undefined>,\n 'loading' | 'dispatched' | 'result' | 'error'\n> = Object.freeze({\n loading: false,\n result: undefined,\n error: undefined,\n dispatched: false,\n});\n\nexport type AsyncRequestMapSlice<T> = Record<string, AsyncRequestState<T>>;\n\nexport type AsyncRequestAction<T> = PayloadAction<Draft<T>, string, any, any>;\n\nfunction requestStateReducer<T, ThunkArg = void, ThunkApiConfig extends {} = {}>(\n asyncThunk: AsyncThunk<T, ThunkArg, ThunkApiConfig>,\n state: Draft<AsyncRequestState<T>> = initialAsyncRequestState,\n action: AsyncRequestAction<T>\n): Draft<AsyncRequestState<T>> {\n if (asyncThunk.pending.match(action)) {\n return {\n result: state.result,\n loading: true,\n error: state.error,\n dispatched: true,\n requestId: action.meta.requestId,\n };\n } else if (asyncThunk.fulfilled.match(action)) {\n if (state.requestId === undefined || state.requestId === action.meta.requestId) {\n return {\n ...state,\n result: action.payload,\n loading: false,\n error: undefined,\n };\n }\n } else if (asyncThunk.rejected.match(action)) {\n if (state.requestId === action.meta.requestId) {\n return {\n ...state,\n loading: false,\n error: action.error,\n };\n }\n }\n return state;\n}\n\n/*\n * createAsyncSlice creates a slice based on a given async action, exposing its state.\n * takes care to only use state of the latest invocation of the action if there are several in flight.\n */\nexport function createAsyncSlice<T, ThunkArg = void, ThunkApiConfig extends {} = {}>(\n name: string,\n asyncThunk: AsyncThunk<T, ThunkArg, ThunkApiConfig>\n) {\n return createSlice({\n name,\n initialState: initialAsyncRequestState as AsyncRequestState<T>,\n reducers: {},\n extraReducers: (builder) =>\n builder.addDefaultCase((state, action) =>\n requestStateReducer(asyncThunk, state, action as unknown as AsyncRequestAction<T>)\n ),\n });\n}\n\n/*\n * createAsyncMapSlice creates a slice based on a given async action exposing a map of request states.\n * separate requests are uniquely indentified by result of provided getEntityId function\n * takes care to only use state of the latest invocation of the action if there are several in flight.\n */\nexport function createAsyncMapSlice<T, ThunkArg = void, ThunkApiConfig extends {} = {}>(\n name: string,\n asyncThunk: AsyncThunk<T, ThunkArg, ThunkApiConfig>,\n getEntityId: (arg: ThunkArg) => string\n) {\n return createSlice({\n name,\n initialState: {} as AsyncRequestMapSlice<T>,\n reducers: {},\n extraReducers: (builder) =>\n builder.addDefaultCase((state, action) => {\n if (isAsyncThunkAction(asyncThunk)(action)) {\n const asyncAction = action as unknown as AsyncRequestAction<T>;\n const entityId = getEntityId(asyncAction.meta.arg);\n return {\n ...state,\n [entityId]: requestStateReducer(asyncThunk, state[entityId], asyncAction),\n };\n }\n return state;\n }),\n });\n}\n\n// rethrow promise error in redux serialized format\nexport function withSerializedError<T>(p: Promise<T>): Promise<T> {\n return p.catch((e) => {\n const err: SerializedError = {\n message: messageFromError(e),\n code: e.statusCode,\n };\n throw err;\n });\n}\n\nexport function withAppEvents<T>(\n p: Promise<T>,\n options: { successMessage?: string; errorMessage?: string }\n): Promise<T> {\n return p\n .then((v) => {\n if (options.successMessage) {\n appEvents.emit(AppEvents.alertSuccess, [options.successMessage]);\n }\n return v;\n })\n .catch((e) => {\n const msg = messageFromError(e);\n appEvents.emit(AppEvents.alertError, [`${options.errorMessage ?? 'Error'}: ${msg}`]);\n throw e;\n });\n}\n\nexport const UNKNOW_ERROR = 'Unknown Error';\nexport function messageFromError(e: Error | FetchError | SerializedError): string {\n if (isFetchError(e)) {\n if (e.data?.message) {\n let msg = e.data?.message;\n if (typeof e.data?.error === 'string') {\n msg += `; ${e.data.error}`;\n }\n return msg;\n } else if (Array.isArray(e.data) && e.data.length && e.data[0]?.message) {\n return e.data\n .map((d) => d?.message)\n .filter((m) => !!m)\n .join(' ');\n } else if (e.statusText) {\n return e.statusText;\n }\n }\n // message in e object, return message\n if (isErrorLike(e)) {\n return e.message;\n }\n // for some reason (upstream this code), sometimes we get an object without the message field neither in the e.data and nor in e.message\n // in this case we want to avoid String(e) printing [object][object]\n logInfo(LogMessages.unknownMessageFromError, { error: JSON.stringify(e) });\n return UNKNOW_ERROR;\n}\n\nexport function isAsyncRequestMapSliceSettled<T>(slice: AsyncRequestMapSlice<T>): boolean {\n return Object.values(slice).every(isAsyncRequestStateSettled);\n}\n\nexport function isAsyncRequestStateSettled<T>(state: AsyncRequestState<T>): boolean {\n return state.dispatched && !state.loading;\n}\n\nexport function isAsyncRequestMapSliceFulfilled<T>(slice: AsyncRequestMapSlice<T>): boolean {\n return Object.values(slice).every(isAsyncRequestStateFulfilled);\n}\n\nexport function isAsyncRequestStateFulfilled<T>(state: AsyncRequestState<T>): boolean {\n return state.dispatched && !state.loading && !state.error;\n}\n\nexport function isAsyncRequestMapSlicePending<T>(slice: AsyncRequestMapSlice<T>): boolean {\n return Object.values(slice).some(isAsyncRequestStatePending);\n}\n\nexport function isAsyncRequestMapSlicePartiallyDispatched<T>(slice: AsyncRequestMapSlice<T>): boolean {\n return Object.values(slice).some((state) => state.dispatched);\n}\n\nexport function isAsyncRequestMapSlicePartiallyFulfilled<T>(slice: AsyncRequestMapSlice<T>): boolean {\n return Object.values(slice).some(isAsyncRequestStateFulfilled);\n}\n\nexport function isAsyncRequestStatePending<T>(state?: AsyncRequestState<T>): boolean {\n if (!state) {\n return false;\n }\n\n return state.dispatched && state.loading;\n}\n","import { css, cx } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { useOverlay } from '@react-aria/overlays';\nimport { Children, forwardRef, HTMLAttributes, useState, useRef, useLayoutEffect, createRef } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { getPortalContainer } from '../Portal/Portal';\n\nimport { ToolbarButton } from './ToolbarButton';\nexport interface Props extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /** Determine flex-alignment of child buttons. Needed for overflow behaviour. */\n alignment?: 'left' | 'right';\n}\n\n/**\n * A container for multiple ToolbarButtons. Provides automatic overflow behaviour when the buttons no longer fit in the container.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/navigation-toolbarbuttonrow--docs\n */\nexport const ToolbarButtonRow = forwardRef<HTMLDivElement, Props>(\n ({ alignment = 'left', className, children, ...rest }, ref) => {\n // null/undefined are valid react children so we need to filter them out to prevent unnecessary padding\n const childrenWithoutNull = Children.toArray(children).filter((child) => child != null);\n const [childVisibility, setChildVisibility] = useState<boolean[]>(Array(childrenWithoutNull.length).fill(false));\n const containerRef = useRef<HTMLDivElement>(null);\n const [showOverflowItems, setShowOverflowItems] = useState(false);\n const overflowRef = useRef<HTMLDivElement>(null);\n const overflowItemsRef = createRef<HTMLDivElement>();\n const { overlayProps } = useOverlay(\n {\n onClose: () => setShowOverflowItems(false),\n isDismissable: true,\n isOpen: showOverflowItems,\n shouldCloseOnInteractOutside: (element: Element) => {\n const portalContainer = getPortalContainer();\n return !overflowRef.current?.contains(element) && !portalContainer.contains(element);\n },\n },\n overflowItemsRef\n );\n const { dialogProps } = useDialog({}, overflowItemsRef);\n const theme = useTheme2();\n const overflowButtonOrder = alignment === 'left' ? childVisibility.indexOf(false) - 1 : childVisibility.length;\n const styles = getStyles(theme, overflowButtonOrder, alignment);\n\n useLayoutEffect(() => {\n const intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.target instanceof HTMLElement && entry.target.parentNode) {\n const index = Array.prototype.indexOf.call(entry.target.parentNode.children, entry.target);\n setChildVisibility((prev) => {\n const newVisibility = [...prev];\n newVisibility[index] = entry.isIntersecting;\n return newVisibility;\n });\n }\n });\n },\n {\n threshold: 1,\n root: containerRef.current,\n }\n );\n if (containerRef.current) {\n Array.from(containerRef.current.children).forEach((item) => {\n // don't observe the overflow button\n if (item instanceof HTMLElement && item !== overflowRef.current) {\n intersectionObserver.observe(item);\n }\n });\n }\n return () => intersectionObserver.disconnect();\n }, [children]);\n\n return (\n <div ref={containerRef} className={cx(styles.container, className)} {...rest}>\n {childrenWithoutNull.map((child, index) => (\n <div\n key={index}\n style={{ order: index, visibility: childVisibility[index] ? 'visible' : 'hidden' }}\n className={styles.childWrapper}\n >\n {child}\n </div>\n ))}\n {childVisibility.includes(false) && (\n <div ref={overflowRef} className={styles.overflowButton}>\n <ToolbarButton\n variant={showOverflowItems ? 'active' : 'default'}\n tooltip={t('grafana-ui.toolbar-button-row.show-more', 'Show more items')}\n onClick={() => setShowOverflowItems(!showOverflowItems)}\n icon=\"ellipsis-v\"\n iconOnly\n narrow\n />\n {showOverflowItems && (\n <FocusScope contain autoFocus>\n <div className={styles.overflowItems} ref={overflowItemsRef} {...overlayProps} {...dialogProps}>\n {childrenWithoutNull.map((child, index) => !childVisibility[index] && child)}\n </div>\n </FocusScope>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nToolbarButtonRow.displayName = 'ToolbarButtonRow';\n\nconst getStyles = (theme: GrafanaTheme2, overflowButtonOrder: number, alignment: Props['alignment']) => ({\n overflowButton: css({\n order: overflowButtonOrder,\n }),\n overflowItems: css({\n alignItems: 'center',\n backgroundColor: theme.colors.background.primary,\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z2,\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n marginTop: theme.spacing(1),\n maxWidth: '80vw',\n padding: theme.spacing(0.5, 1),\n position: 'absolute',\n right: 0,\n top: '100%',\n width: 'max-content',\n zIndex: theme.zIndex.dropdown,\n }),\n container: css({\n alignItems: 'center',\n display: 'flex',\n gap: theme.spacing(1),\n justifyContent: alignment === 'left' ? 'flex-start' : 'flex-end',\n minWidth: 0,\n position: 'relative',\n }),\n childWrapper: css({\n alignItems: 'center',\n display: 'flex',\n gap: theme.spacing(1),\n }),\n});\n","import { PureComponent, ReactNode, ComponentType, ErrorInfo, memo } from 'react';\n\nimport { faro } from '@grafana/faro-web-sdk';\nimport { t } from '@grafana/i18n';\n\nimport { Alert } from '../Alert/Alert';\n\nimport { ErrorWithStack } from './ErrorWithStack';\n\nexport type { ErrorInfo };\n\nexport interface ErrorBoundaryApi {\n error: Error | null;\n errorInfo: ErrorInfo | null;\n}\n\ninterface Props {\n /** Name of the error boundary. Used when reporting errors in Faro. */\n boundaryName?: string;\n\n children: (r: ErrorBoundaryApi) => ReactNode;\n /** Will re-render children after error if recover values changes */\n dependencies?: unknown[];\n /** Callback called on error */\n onError?: (error: Error) => void;\n /** Callback error state is cleared due to recover props change */\n onRecover?: () => void;\n /** Default error logger - Faro by default */\n errorLogger?: (error: Error) => void;\n}\n\ninterface State {\n error: Error | null;\n errorInfo: ErrorInfo | null;\n}\n\n/**\n * A React component that catches errors in child components. Useful for logging or displaying a fallback UI in case of errors. More information about error boundaries is available at [React documentation website](https://reactjs.org/docs/error-boundaries.html).\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/utilities-errorboundary--docs\n */\nexport class ErrorBoundary extends PureComponent<Props, State> {\n readonly state: State = {\n error: null,\n errorInfo: null,\n };\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n if (this.props.errorLogger) {\n this.props.errorLogger(error);\n } else {\n faro?.api?.pushError(error, {\n context: {\n type: 'boundary',\n source: this.props.boundaryName ?? 'unknown',\n },\n });\n }\n\n this.setState({ error, errorInfo });\n\n if (this.props.onError) {\n this.props.onError(error);\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n const { dependencies, onRecover } = this.props;\n\n if (this.state.error) {\n if (dependencies && prevProps.dependencies) {\n for (let i = 0; i < dependencies.length; i++) {\n if (dependencies[i] !== prevProps.dependencies[i]) {\n this.setState({ error: null, errorInfo: null });\n if (onRecover) {\n onRecover();\n }\n break;\n }\n }\n }\n }\n }\n\n render() {\n const { children } = this.props;\n const { error, errorInfo } = this.state;\n\n return children({\n error,\n errorInfo,\n });\n }\n}\n\n/**\n * Props for the ErrorBoundaryAlert component\n *\n * @public\n */\nexport interface ErrorBoundaryAlertProps {\n /** Name of the error boundary. Used when reporting errors in Faro. */\n boundaryName?: string;\n\n /** Title for the error boundary alert */\n title?: string;\n\n /** Component to be wrapped with an error boundary */\n children: ReactNode;\n\n /** 'page' will render full page error with stacktrace. 'alertbox' will render an <Alert />. Default 'alertbox' */\n style?: 'page' | 'alertbox';\n\n /** Will re-render children after error if recover values changes */\n dependencies?: unknown[];\n /** Default error logger - Faro by default */\n errorLogger?: (error: Error) => void;\n}\n\nexport const ErrorBoundaryAlert = memo(\n ({ title, children, style = 'alertbox', dependencies, errorLogger, boundaryName }: ErrorBoundaryAlertProps) => {\n const alertTitle = title ?? t('grafana-ui.error-boundary.title', 'An unexpected error happened');\n return (\n <ErrorBoundary dependencies={dependencies} errorLogger={errorLogger} boundaryName={boundaryName}>\n {({ error, errorInfo }) => {\n if (!errorInfo) {\n return children;\n }\n\n if (style === 'alertbox') {\n return (\n <Alert title={alertTitle}>\n <details style={{ whiteSpace: 'pre-wrap' }}>\n {error && error.toString()}\n <br />\n {errorInfo.componentStack}\n </details>\n </Alert>\n );\n }\n\n return <ErrorWithStack title={alertTitle} error={error} errorInfo={errorInfo} />;\n }}\n </ErrorBoundary>\n );\n }\n);\n\nErrorBoundaryAlert.displayName = 'ErrorBoundaryAlert';\n\n/**\n * HOC for wrapping a component in an error boundary.\n *\n * @param Component - the react component to wrap in error boundary\n * @param errorBoundaryProps - error boundary options\n *\n * @public\n */\nexport function withErrorBoundary<P extends {} = {}>(\n Component: ComponentType<P>,\n errorBoundaryProps: Omit<ErrorBoundaryAlertProps, 'children'> = {}\n): ComponentType<P> {\n const comp = (props: P) => (\n <ErrorBoundaryAlert {...errorBoundaryProps}>\n <Component {...props} />\n </ErrorBoundaryAlert>\n );\n comp.displayName = 'WithErrorBoundary';\n\n return comp;\n}\n","import React, { useCallback, useMemo } from 'react';\n\ninterface Point {\n x: number;\n y: number;\n}\ntype PointerOrMouseEvent = React.PointerEvent | React.MouseEvent | PointerEvent | MouseEvent;\ntype PointerDistanceSet = (evt: PointerOrMouseEvent) => void;\ntype PointerDistanceCheck = (evt: PointerOrMouseEvent, distance?: number) => boolean;\n\ninterface PointerDistance {\n set: PointerDistanceSet;\n check: PointerDistanceCheck;\n}\n\nexport function createPointerDistance(distance = 10): PointerDistance {\n let initial = { x: 0, y: 0 };\n\n const set: PointerDistanceSet = (evt) => {\n initial = getPoint(evt);\n };\n\n const check: PointerDistanceCheck = (evt, overrideDistance = distance) =>\n checkDistance(initial, getPoint(evt), overrideDistance);\n\n return { set, check };\n}\n\nexport function usePointerDistance(distance = 10): PointerDistance {\n const initial = React.useRef<Point>({ x: 0, y: 0 });\n\n const set = useCallback<PointerDistance['set']>((evt) => {\n initial.current = getPoint(evt);\n }, []);\n\n const check = useCallback<PointerDistance['check']>(\n (evt, overrideDistance = distance) => checkDistance(initial.current, getPoint(evt), overrideDistance),\n [distance]\n );\n\n return useMemo(() => ({ set, check }), [set, check]);\n}\n\nfunction getPoint(evt: PointerOrMouseEvent): Point {\n return { x: evt.clientX, y: evt.clientY };\n}\n\nfunction checkDistance(point1: Point, point2: Point, distance: number): boolean {\n return Math.hypot(point1.x - point2.x, point1.y - point2.y) > distance;\n}\n","import { Field } from '../types/dataFrame';\nimport { FALLBACK_COLOR } from '../types/fieldColor';\nimport { Threshold, ThresholdsMode } from '../types/thresholds';\n\nexport const fallBackThreshold: Threshold = { value: 0, color: FALLBACK_COLOR };\n\nexport function getActiveThreshold(value: number, thresholds: Threshold[] | undefined): Threshold {\n if (!thresholds || thresholds.length === 0) {\n return fallBackThreshold;\n }\n\n let active = thresholds[0];\n\n for (const threshold of thresholds) {\n if (value >= threshold.value) {\n active = threshold;\n } else {\n break;\n }\n }\n\n return active;\n}\n\nexport function getActiveThresholdForValue(field: Field, value: number, percent: number): Threshold {\n const { thresholds } = field.config;\n\n if (thresholds?.mode === ThresholdsMode.Percentage) {\n return getActiveThreshold(percent * 100, thresholds?.steps);\n }\n\n return getActiveThreshold(value, thresholds?.steps);\n}\n\n/**\n * Sorts the thresholds\n */\nexport function sortThresholds(thresholds: Threshold[]) {\n return thresholds.sort((t1, t2) => t1.value - t2.value);\n}\n","import * as H from 'history';\nimport React, { useContext } from 'react';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { deprecationWarning, UrlQueryMap, urlUtil } from '@grafana/data';\nimport { attachDebugger, createLogger } from '@grafana/ui';\n\nimport { config } from '../config';\n\nimport { LocationUpdate } from './LocationSrv';\n\n/**\n * @public\n * A wrapper to help work with browser location and history\n */\nexport interface LocationService {\n partial: (query: Record<string, any>, replace?: boolean) => void;\n push: (location: H.Path | H.LocationDescriptor<any>) => void;\n replace: (location: H.Path | H.LocationDescriptor<any>) => void;\n reload: () => void;\n getLocation: () => H.Location;\n getHistory: () => H.History;\n getSearch: () => URLSearchParams;\n getSearchObject: () => UrlQueryMap;\n getLocationObservable: () => Observable<H.Location>;\n\n /**\n * This is from the old LocationSrv interface\n * @deprecated use partial, push or replace instead */\n update: (update: LocationUpdate) => void;\n}\n\n/** @internal */\nexport class HistoryWrapper implements LocationService {\n private readonly history: H.History;\n private locationObservable: BehaviorSubject<H.Location>;\n\n constructor(history?: H.History) {\n // If no history passed create an in memory one if being called from test\n this.history =\n history ||\n (process.env.NODE_ENV === 'test'\n ? H.createMemoryHistory({ initialEntries: ['/'] })\n : H.createBrowserHistory({ basename: config.appSubUrl ?? '/' }));\n\n this.locationObservable = new BehaviorSubject(this.history.location);\n\n this.history.listen((location) => {\n this.locationObservable.next(location);\n });\n\n this.partial = this.partial.bind(this);\n this.push = this.push.bind(this);\n this.replace = this.replace.bind(this);\n this.getSearch = this.getSearch.bind(this);\n this.getHistory = this.getHistory.bind(this);\n this.getLocation = this.getLocation.bind(this);\n }\n\n getLocationObservable() {\n return this.locationObservable.asObservable();\n }\n\n getHistory() {\n return this.history;\n }\n\n getSearch() {\n return new URLSearchParams(this.history.location.search);\n }\n\n partial(query: Record<string, any>, replace?: boolean) {\n const currentLocation = this.history.location;\n const newQuery = this.getSearchObject();\n\n for (const key in query) {\n // removing params with null | undefined\n if (query[key] === null || query[key] === undefined) {\n delete newQuery[key];\n } else {\n newQuery[key] = query[key];\n }\n }\n\n const updatedUrl = urlUtil.renderUrl(currentLocation.pathname, newQuery);\n\n if (replace) {\n this.history.replace(updatedUrl, this.history.location.state);\n } else {\n this.history.push(updatedUrl, this.history.location.state);\n }\n }\n\n push(location: H.Path | H.LocationDescriptor) {\n this.history.push(location);\n }\n\n replace(location: H.Path | H.LocationDescriptor) {\n this.history.replace(location);\n }\n\n reload() {\n const prevState = (this.history.location.state as any)?.routeReloadCounter;\n this.history.replace({\n ...this.history.location,\n state: { routeReloadCounter: prevState ? prevState + 1 : 1 },\n });\n }\n\n getLocation() {\n return this.history.location;\n }\n\n getSearchObject() {\n return locationSearchToObject(this.history.location.search);\n }\n\n /** @deprecated use partial, push or replace instead */\n update(options: LocationUpdate) {\n deprecationWarning('LocationSrv', 'update', 'partial, push or replace');\n if (options.partial && options.query) {\n this.partial(options.query, options.partial);\n } else {\n const newLocation: H.LocationDescriptor = {\n pathname: options.path,\n };\n if (options.query) {\n newLocation.search = urlUtil.toUrlParams(options.query);\n }\n if (options.replace) {\n this.replace(newLocation);\n } else {\n this.push(newLocation);\n }\n }\n }\n}\n\n/**\n * @public\n * Parses a location search string to an object\n * */\nexport function locationSearchToObject(search: string | number): UrlQueryMap {\n let queryString = typeof search === 'number' ? String(search) : search;\n\n if (queryString.length > 0) {\n if (queryString.startsWith('?')) {\n return urlUtil.parseKeyValue(queryString.substring(1));\n }\n return urlUtil.parseKeyValue(queryString);\n }\n\n return {};\n}\n\n/**\n * @public\n */\nexport let locationService: LocationService = new HistoryWrapper();\n\n/**\n * Used for tests only\n * @internal\n */\nexport const setLocationService = (location: LocationService) => {\n if (process.env.NODE_ENV !== 'test') {\n throw new Error('locationService can be only overriden in test environment');\n }\n locationService = location;\n};\n\nconst navigationLog = createLogger('Router');\n\n/** @internal */\nexport const navigationLogger = navigationLog.logger;\n\n// For debugging purposes the location service is attached to global _debug variable\nattachDebugger('location', locationService, navigationLog);\n\n// Simple context so the location service can be used without being a singleton\nconst LocationServiceContext = React.createContext<LocationService | undefined>(undefined);\n\nexport function useLocationService(): LocationService {\n const service = useContext(LocationServiceContext);\n if (!service) {\n throw new Error('useLocationService must be used within a LocationServiceProvider');\n }\n return service;\n}\n\nexport const LocationServiceProvider: React.FC<{ service: LocationService; children: React.ReactNode }> = ({\n service,\n children,\n}) => {\n return <LocationServiceContext.Provider value={service}>{children}</LocationServiceContext.Provider>;\n};\n","import { catchError, Observable, of, switchMap } from 'rxjs';\n\nimport { DataQuery, DataQueryRequest, DataQueryResponse } from '@grafana/data';\n\nimport { config } from '../config';\nimport { getBackendSrv } from '../services/backendSrv';\n\nimport { BackendDataSourceResponse, toDataQueryResponse } from './queryResponse';\n\nexport function publicDashboardQueryHandler(request: DataQueryRequest<DataQuery>): Observable<DataQueryResponse> {\n const {\n intervalMs,\n maxDataPoints,\n requestId,\n panelId,\n queryCachingTTL,\n range: { from: fromRange, to: toRange },\n } = request;\n // Return early if no queries exist\n if (!request.targets.length) {\n return of({ data: [] });\n }\n\n const body = {\n intervalMs,\n maxDataPoints,\n queryCachingTTL,\n timeRange: {\n from: fromRange.valueOf().toString(),\n to: toRange.valueOf().toString(),\n timezone: request.timezone,\n },\n };\n\n return getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: `/api/public/dashboards/${config.publicDashboardAccessToken!}/panels/${panelId}/query`,\n method: 'POST',\n data: body,\n requestId,\n })\n .pipe(\n switchMap((raw) => {\n return of(toDataQueryResponse(raw, request.targets));\n }),\n catchError((err) => {\n return of(toDataQueryResponse(err));\n })\n );\n}\n","import { lastValueFrom, merge, Observable, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport {\n DataFrame,\n dataFrameToJSON,\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n TestDataSourceResponse,\n DataSourceApi,\n DataSourceInstanceSettings,\n DataSourceJsonData,\n DataSourceRef,\n getDataSourceRef,\n makeClassES5Compatible,\n parseLiveChannelAddress,\n ScopedVars,\n AdHocVariableFilter,\n CoreApp,\n} from '@grafana/data';\n\nimport { reportInteraction } from '../analytics/utils';\nimport { config } from '../config';\nimport {\n BackendSrvRequest,\n FetchResponse,\n getBackendSrv,\n getDataSourceSrv,\n getGrafanaLiveSrv,\n StreamingFrameAction,\n StreamingFrameOptions,\n} from '../services';\n\nimport { publicDashboardQueryHandler } from './publicDashboardQueryHandler';\nimport { BackendDataSourceResponse, toDataQueryResponse } from './queryResponse';\nimport { UserStorage } from './userStorage';\n\n/**\n * @internal\n */\nexport const ExpressionDatasourceRef = Object.freeze({\n type: '__expr__',\n uid: '__expr__',\n name: 'Expression',\n});\n\n/**\n * @public\n */\nexport function isExpressionReference(ref?: DataSourceRef | string | null): boolean {\n if (!ref) {\n return false;\n }\n const v = typeof ref === 'string' ? ref : ref.type;\n return v === ExpressionDatasourceRef.type || v === ExpressionDatasourceRef.name || v === '-100'; // -100 was a legacy accident that should be removed\n}\n\nexport class HealthCheckError extends Error {\n details: HealthCheckResultDetails;\n\n constructor(message: string, details: HealthCheckResultDetails) {\n super(message);\n this.details = details;\n this.name = 'HealthCheckError';\n }\n}\n\n/**\n * Describes the current health status of a data source plugin.\n *\n * @public\n */\nexport enum HealthStatus {\n Unknown = 'UNKNOWN',\n OK = 'OK',\n Error = 'ERROR',\n}\n\n// Internal for now\nenum PluginRequestHeaders {\n PluginID = 'X-Plugin-Id', // can be used for routing\n DatasourceUID = 'X-Datasource-Uid', // can be used for routing/ load balancing\n DashboardUID = 'X-Dashboard-Uid', // mainly useful for debugging slow queries\n PanelID = 'X-Panel-Id', // mainly useful for debugging slow queries\n PanelPluginId = 'X-Panel-Plugin-Id',\n QueryGroupID = 'X-Query-Group-Id', // mainly useful to find related queries with query splitting\n FromExpression = 'X-Grafana-From-Expr', // used by datasources to identify expression queries\n SkipQueryCache = 'X-Cache-Skip', // used by datasources to skip the query cache\n DashboardTitle = 'X-Dashboard-Title', // used by datasources to identify the dashboard title\n PanelTitle = 'X-Panel-Title', // used by datasources to identify the panel title\n}\n\n/**\n * Describes the details in the payload returned when checking the health of a data source\n * plugin.\n *\n * If the 'message' key exists, this will be displayed in the error message in DataSourceSettingsPage\n * If the 'verboseMessage' key exists, this will be displayed in the expandable details in the error message in DataSourceSettingsPage\n *\n * @public\n */\nexport type HealthCheckResultDetails = Record<string, unknown> | undefined;\n\n/**\n * Describes the payload returned when checking the health of a data source\n * plugin.\n *\n * @public\n */\nexport interface HealthCheckResult {\n status: HealthStatus;\n message: string;\n details: HealthCheckResultDetails;\n}\n\n/**\n * Extend this class to implement a data source plugin that is depending on the Grafana\n * backend API.\n *\n * @public\n */\nclass DataSourceWithBackend<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData,\n> extends DataSourceApi<TQuery, TOptions> {\n userStorage: UserStorage;\n\n constructor(instanceSettings: DataSourceInstanceSettings<TOptions>) {\n super(instanceSettings);\n this.userStorage = new UserStorage(instanceSettings.type);\n }\n\n /**\n * Ideally final -- any other implementation may not work as expected\n */\n query(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse> {\n if (config.publicDashboardAccessToken) {\n return publicDashboardQueryHandler(request);\n }\n\n const { intervalMs, maxDataPoints, queryCachingTTL, range, requestId, hideFromInspector = false } = request;\n let targets = request.targets;\n\n let hasExpr = false;\n const pluginIDs = new Set<string>();\n const dsUIDs = new Set<string>();\n const queries: DataQuery[] = targets.map((q) => {\n let datasource = this.getRef();\n let datasourceId = this.id;\n let shouldApplyTemplateVariables = true;\n\n if (isExpressionReference(q.datasource)) {\n hasExpr = true;\n return {\n ...q,\n datasource: ExpressionDatasourceRef,\n };\n }\n\n if (q.datasource) {\n const ds = getDataSourceSrv().getInstanceSettings(q.datasource, request.scopedVars);\n\n if (!ds) {\n throw new Error(`Unknown Datasource: ${JSON.stringify(q.datasource)}`);\n }\n\n const dsRef = ds.rawRef ?? getDataSourceRef(ds);\n const dsId = ds.id;\n if (dsRef.uid !== datasource.uid || datasourceId !== dsId) {\n datasource = dsRef;\n datasourceId = dsId;\n // If the query is using a different datasource, we would need to retrieve the datasource\n // instance (async) and apply the template variables but it seems it's not necessary for now.\n shouldApplyTemplateVariables = false;\n }\n }\n if (datasource.type?.length) {\n pluginIDs.add(datasource.type);\n }\n if (datasource.uid?.length) {\n dsUIDs.add(datasource.uid);\n }\n\n return {\n ...(shouldApplyTemplateVariables ? this.applyTemplateVariables(q, request.scopedVars, request.filters) : q),\n datasource,\n datasourceId, // deprecated!\n intervalMs,\n maxDataPoints,\n queryCachingTTL,\n };\n });\n\n // Return early if no queries exist\n if (!queries.length) {\n return of({ data: [] });\n }\n\n const body = {\n queries,\n from: range?.from.valueOf().toString(),\n to: range?.to.valueOf().toString(),\n };\n\n const headers: Record<string, string> = request.headers ?? {};\n headers[PluginRequestHeaders.PluginID] = Array.from(pluginIDs).join(', ');\n headers[PluginRequestHeaders.DatasourceUID] = Array.from(dsUIDs).join(', ');\n\n let url = '/api/ds/query?ds_type=' + this.type;\n\n // Use the new query service for explore\n if (config.featureToggles.queryServiceFromExplore && request.app === CoreApp.Explore) {\n url = `/apis/query.grafana.app/v0alpha1/namespaces/${config.namespace}/query?ds_type=${this.type}`;\n }\n\n // Use the new query service\n if (config.featureToggles.queryServiceFromUI) {\n url = `/apis/query.grafana.app/v0alpha1/namespaces/${config.namespace}/query?ds_type=${this.type}`;\n }\n\n if (hasExpr) {\n headers[PluginRequestHeaders.FromExpression] = 'true';\n url += '&expression=true';\n }\n\n // Appending request ID to url to facilitate client-side performance metrics. See #65244 for more context.\n if (requestId) {\n url += `&requestId=${requestId}`;\n }\n\n if (request.dashboardUID) {\n headers[PluginRequestHeaders.DashboardUID] = request.dashboardUID;\n if (request.dashboardTitle) {\n headers[PluginRequestHeaders.DashboardTitle] = request.dashboardTitle;\n }\n if (request.panelId) {\n headers[PluginRequestHeaders.PanelID] = `${request.panelId}`;\n }\n if (request.panelName) {\n headers[PluginRequestHeaders.PanelTitle] = request.panelName;\n }\n }\n if (request.panelPluginId) {\n headers[PluginRequestHeaders.PanelPluginId] = `${request.panelPluginId}`;\n }\n if (request.queryGroupId) {\n headers[PluginRequestHeaders.QueryGroupID] = `${request.queryGroupId}`;\n }\n if (request.skipQueryCache) {\n headers[PluginRequestHeaders.SkipQueryCache] = 'true';\n }\n return getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url,\n method: 'POST',\n data: body,\n requestId,\n hideFromInspector,\n headers,\n })\n .pipe(\n switchMap((raw) => {\n const rsp = toDataQueryResponse(raw, queries);\n // Check if any response should subscribe to a live stream\n if (rsp.data?.length && rsp.data.find((f: DataFrame) => f.meta?.channel)) {\n return toStreamingDataResponse(rsp, request, this.streamOptionsProvider);\n }\n return of(rsp);\n }),\n catchError((err) => {\n return of(toDataQueryResponse(err));\n })\n );\n }\n\n /** Get request headers with plugin ID+UID set */\n protected getRequestHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n headers[PluginRequestHeaders.PluginID] = this.type;\n headers[PluginRequestHeaders.DatasourceUID] = this.uid;\n return headers;\n }\n\n /**\n * Apply template variables for explore\n */\n interpolateVariablesInQueries(queries: TQuery[], scopedVars: ScopedVars, filters?: AdHocVariableFilter[]): TQuery[] {\n return queries.map((q) => this.applyTemplateVariables(q, scopedVars, filters));\n }\n\n /**\n * Override to apply template variables and adhoc filters. The result is usually also `TQuery`, but sometimes this can\n * be used to modify the query structure before sending to the backend.\n *\n * NOTE: if you do modify the structure or use template variables, alerting queries may not work\n * as expected\n *\n * @virtual\n */\n applyTemplateVariables(query: TQuery, scopedVars: ScopedVars, filters?: AdHocVariableFilter[]) {\n return query;\n }\n\n /**\n * Optionally override the streaming behavior\n */\n streamOptionsProvider: StreamOptionsProvider<TQuery> = standardStreamOptionsProvider;\n\n /**\n * Make a GET request to the datasource resource path\n */\n async getResource<T = any>(\n path: string,\n params?: BackendSrvRequest['params'],\n options?: Partial<BackendSrvRequest>\n ): Promise<T> {\n const headers = this.getRequestHeaders();\n const result = await lastValueFrom(\n getBackendSrv().fetch<T>({\n ...options,\n method: 'GET',\n headers: options?.headers ? { ...options.headers, ...headers } : headers,\n params: params ?? options?.params,\n url: `/api/datasources/uid/${this.uid}/resources/${path}`,\n })\n );\n return result.data;\n }\n\n /**\n * Send a POST request to the datasource resource path\n */\n async postResource<T = unknown>(\n path: string,\n data?: BackendSrvRequest['data'],\n options?: Partial<BackendSrvRequest>\n ): Promise<T> {\n const headers = this.getRequestHeaders();\n const result = await lastValueFrom(\n getBackendSrv().fetch<T>({\n ...options,\n method: 'POST',\n headers: options?.headers ? { ...options.headers, ...headers } : headers,\n data: data ?? { ...data },\n url: `/api/datasources/uid/${this.uid}/resources/${path}`,\n })\n );\n return result.data;\n }\n\n /**\n * Run the datasource healthcheck\n */\n async callHealthCheck(): Promise<HealthCheckResult> {\n return lastValueFrom(\n getBackendSrv().fetch<HealthCheckResult>({\n method: 'GET',\n url: `/api/datasources/uid/${this.uid}/health`,\n showErrorAlert: false,\n headers: this.getRequestHeaders(),\n })\n )\n .then((v: FetchResponse<HealthCheckResult>) => v.data)\n .catch((err) => {\n let properties: Record<string, string> = {\n plugin_id: this.meta?.id || '',\n plugin_version: this.meta?.info?.version || '',\n datasource_healthcheck_status: err?.data?.status || 'error',\n datasource_healthcheck_message: err?.data?.message || '',\n };\n reportInteraction('datasource_health_check_completed', properties);\n return err.data;\n });\n }\n\n /**\n * Checks the plugin health\n * see public/app/features/datasources/state/actions.ts for what needs to be returned here\n */\n async testDatasource(): Promise<TestDataSourceResponse> {\n return this.callHealthCheck().then((res) => {\n if (res.status === HealthStatus.OK) {\n return {\n status: 'success',\n message: res.message,\n };\n }\n\n return Promise.reject({\n status: 'error',\n message: res.message,\n error: new HealthCheckError(res.message, res.details),\n });\n });\n }\n}\n\n/**\n * @internal exported for tests\n */\nexport function toStreamingDataResponse<TQuery extends DataQuery = DataQuery>(\n rsp: DataQueryResponse,\n req: DataQueryRequest<TQuery>,\n getter: (req: DataQueryRequest<TQuery>, frame: DataFrame) => Partial<StreamingFrameOptions>\n): Observable<DataQueryResponse> {\n const live = getGrafanaLiveSrv();\n if (!live) {\n return of(rsp); // add warning?\n }\n\n const staticdata: DataFrame[] = [];\n const streams: Array<Observable<DataQueryResponse>> = [];\n for (const f of rsp.data) {\n const addr = parseLiveChannelAddress(f.meta?.channel);\n if (addr) {\n const frame: DataFrame = f;\n streams.push(\n live.getDataStream({\n addr,\n buffer: getter(req, frame),\n frame: dataFrameToJSON(f),\n })\n );\n } else {\n staticdata.push(f);\n }\n }\n if (staticdata.length) {\n streams.push(of({ ...rsp, data: staticdata }));\n }\n if (streams.length === 1) {\n return streams[0]; // avoid merge wrapper\n }\n return merge(...streams);\n}\n\n/**\n * This allows data sources to customize the streaming connection query\n *\n * @public\n */\nexport type StreamOptionsProvider<TQuery extends DataQuery = DataQuery> = (\n request: DataQueryRequest<TQuery>,\n frame: DataFrame\n) => Partial<StreamingFrameOptions>;\n\n/**\n * @public\n */\nexport const standardStreamOptionsProvider: StreamOptionsProvider = (request: DataQueryRequest, frame: DataFrame) => {\n const opts: Partial<StreamingFrameOptions> = {\n maxLength: request.maxDataPoints ?? 500,\n action: StreamingFrameAction.Append,\n };\n\n // For recent queries, clamp to the current time range\n if (request.rangeRaw?.to === 'now') {\n opts.maxDelta = request.range.to.valueOf() - request.range.from.valueOf();\n }\n return opts;\n};\n\n//@ts-ignore\nDataSourceWithBackend = makeClassES5Compatible(DataSourceWithBackend);\n\nexport { DataSourceWithBackend };\n","import { Unsubscribable } from 'rxjs';\n\nimport { SceneDataTransformer, SceneObjectBase, SceneObjectState, SceneQueryRunner, VizPanel } from '@grafana/scenes';\nimport { SHARED_DASHBOARD_QUERY } from 'app/plugins/datasource/dashboard/constants';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\n\nimport {\n findVizPanelByKey,\n getDashboardSceneFor,\n getLibraryPanelBehavior,\n getQueryRunnerFor,\n getVizPanelKeyForPanelId,\n} from '../utils/utils';\n\nimport { DashboardScene } from './DashboardScene';\nimport { LibraryPanelBehaviorState } from './LibraryPanelBehavior';\n\ninterface DashboardDatasourceBehaviourState extends SceneObjectState {}\n\nexport class DashboardDatasourceBehaviour extends SceneObjectBase<DashboardDatasourceBehaviourState> {\n private prevRequestId: string | undefined;\n public constructor(state: DashboardDatasourceBehaviourState) {\n super(state);\n\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n const queryRunner = this.parent;\n let libraryPanelSub: Unsubscribable;\n let transformerSub: Unsubscribable;\n let dashboard: DashboardScene;\n if (!(queryRunner instanceof SceneQueryRunner)) {\n throw new Error('DashboardDatasourceBehaviour must be attached to a SceneQueryRunner');\n }\n\n if (!this.containsDashboardDSQueries(queryRunner)) {\n return;\n }\n\n try {\n dashboard = getDashboardSceneFor(queryRunner);\n } catch {\n return;\n }\n\n const dashboardQuery = queryRunner.state.queries.find((query) => query.panelId !== undefined);\n\n if (!dashboardQuery) {\n return;\n }\n\n // find the source panel referenced in the the dashboard ds query\n const panelId = dashboardQuery.panelId;\n const vizKey = getVizPanelKeyForPanelId(panelId);\n // We're trying to find the original panel, not a cloned one, since `panelId` alone cannot resolve clones\n const sourcePanel = findVizPanelByKey(dashboard, vizKey);\n\n if (!(sourcePanel instanceof VizPanel)) {\n return;\n }\n\n //check if the source panel is a library panel and wait for it to load\n const libraryPanelBehaviour = getLibraryPanelBehavior(sourcePanel);\n if (libraryPanelBehaviour && !libraryPanelBehaviour.state.isLoaded) {\n libraryPanelSub = libraryPanelBehaviour.subscribeToState((newLibPanel) => {\n this.handleLibPanelStateUpdates(newLibPanel, queryRunner, sourcePanel);\n });\n return;\n }\n\n const sourcePanelQueryRunner = getQueryRunnerFor(sourcePanel);\n\n if (!sourcePanelQueryRunner) {\n throw new Error('Could not find SceneQueryRunner for panel');\n }\n\n const dataTransformer = sourcePanelQueryRunner.parent;\n\n if (dataTransformer instanceof SceneDataTransformer && dataTransformer.state.transformations.length) {\n // in mixed DS scenario we complete the observable and merge data, so on a variable change\n // the data transformer will emit but there will be no subscription and thus not visual update\n // on the panel. Similar thing happens when going to edit mode and back, where we unsubscribe and\n // since we never re-run the query, only reprocess the transformations, the panel will not update.\n transformerSub = dataTransformer.subscribeToState((newState, oldState) => {\n if (newState.data !== oldState.data) {\n queryRunner.runQueries();\n }\n });\n }\n\n if (this.prevRequestId && this.prevRequestId !== sourcePanelQueryRunner.state.data?.request?.requestId) {\n queryRunner.runQueries();\n }\n\n return () => {\n this.prevRequestId = sourcePanelQueryRunner?.state.data?.request?.requestId;\n if (libraryPanelSub) {\n libraryPanelSub.unsubscribe();\n }\n\n if (transformerSub) {\n transformerSub.unsubscribe();\n }\n };\n }\n\n private containsDashboardDSQueries(queryRunner: SceneQueryRunner): boolean {\n if (queryRunner.state.datasource?.uid === SHARED_DASHBOARD_QUERY) {\n return true;\n }\n\n return (\n queryRunner.state.datasource?.uid === MIXED_DATASOURCE_NAME &&\n queryRunner.state.queries.some((query) => query.datasource?.uid === SHARED_DASHBOARD_QUERY)\n );\n }\n\n private handleLibPanelStateUpdates(\n newLibPanel: LibraryPanelBehaviorState,\n dashboardDsQueryRunner: SceneQueryRunner,\n sourcePanel: VizPanel\n ) {\n if (newLibPanel && newLibPanel?.isLoaded) {\n const libPanelQueryRunner = getQueryRunnerFor(sourcePanel);\n\n if (!(libPanelQueryRunner instanceof SceneQueryRunner)) {\n throw new Error('Could not find SceneQueryRunner for library panel');\n }\n dashboardDsQueryRunner.runQueries();\n }\n }\n}\n","import { Field, FieldType, DataFrame } from '../../types/dataFrame';\nimport { FieldMatcherInfo } from '../../types/transformations';\n\nimport { FieldMatcherID } from './ids';\n\n// General Field matcher\nconst fieldTypeMatcher: FieldMatcherInfo<FieldType> = {\n id: FieldMatcherID.byType,\n name: 'Field Type',\n description: 'match based on the field type',\n defaultOptions: FieldType.number,\n\n get: (type: FieldType) => {\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return type === field.type;\n };\n },\n\n getOptionsDisplayText: (type: FieldType) => {\n return `Field type: ${type}`;\n },\n};\n\n// General Field matcher (multiple types)\nconst fieldTypesMatcher: FieldMatcherInfo<Set<FieldType>> = {\n id: FieldMatcherID.byTypes,\n name: 'Field Type',\n description: 'match based on the field types',\n defaultOptions: new Set(),\n\n get: (types) => {\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return types.has(field.type);\n };\n },\n\n getOptionsDisplayText: (types) => {\n return `Field types: ${[...types].join(' | ')}`;\n },\n};\n\n// Numeric Field matcher\n// This gets its own entry so it shows up in the dropdown\nconst numericMatcher: FieldMatcherInfo = {\n id: FieldMatcherID.numeric,\n name: 'Numeric Fields',\n description: 'Fields with type number',\n\n get: () => {\n return fieldTypeMatcher.get(FieldType.number);\n },\n\n getOptionsDisplayText: () => {\n return 'Numeric Fields';\n },\n};\n\n// Time Field matcher\nconst timeMatcher: FieldMatcherInfo = {\n id: FieldMatcherID.time,\n name: 'Time Fields',\n description: 'Fields with type time',\n\n get: () => {\n return fieldTypeMatcher.get(FieldType.time);\n },\n\n getOptionsDisplayText: () => {\n return 'Time Fields';\n },\n};\n\n/**\n * Registry Initialization\n */\nexport function getFieldTypeMatchers(): FieldMatcherInfo[] {\n return [fieldTypeMatcher, fieldTypesMatcher, numericMatcher, timeMatcher];\n}\n","import { ComparisonOperation } from '@grafana/schema';\n\nimport { Field, DataFrame } from '../../types/dataFrame';\nimport { FieldMatcherInfo } from '../../types/transformations';\nimport { reduceField, ReducerID } from '../fieldReducer';\n\nimport { compareValues } from './compareValues';\nimport { FieldMatcherID } from './ids';\n\nexport interface FieldValueMatcherConfig {\n reducer: ReducerID;\n op?: ComparisonOperation;\n value?: number; // or string?\n}\n\n// This should move to a utility function on the reducer registry\nfunction isBooleanReducer(r: ReducerID) {\n return r === ReducerID.allIsNull || r === ReducerID.allIsZero;\n}\n\nexport const fieldValueMatcherInfo: FieldMatcherInfo<FieldValueMatcherConfig> = {\n id: FieldMatcherID.byValue,\n name: 'By value (reducer)',\n description: 'Reduce a field to a single value and test for inclusion',\n\n // This is added to overrides by default\n defaultOptions: {\n reducer: ReducerID.allIsZero,\n op: ComparisonOperation.GTE,\n value: 0,\n },\n\n get: (props) => {\n if (!props || !props.reducer) {\n return () => false;\n }\n let { reducer, op, value } = props;\n const isBoolean = isBooleanReducer(reducer);\n if (!op) {\n op = ComparisonOperation.EQ;\n }\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n const left = reduceField({\n field,\n reducers: [reducer],\n })[reducer];\n\n if (isBoolean) {\n return Boolean(left); // boolean\n }\n return compareValues(left, op!, value);\n };\n },\n\n getOptionsDisplayText: (props) => {\n return `By value (${props.reducer})`;\n },\n};\n","import { escapeStringForRegex, stringStartsAsRegEx, stringToJsRegex } from '../../text/string';\nimport { DataFrame } from '../../types/dataFrame';\nimport { FrameMatcherInfo } from '../../types/transformations';\n\nimport { FrameMatcherID } from './ids';\n\n// General Field matcher\nconst refIdMatcher: FrameMatcherInfo<string> = {\n id: FrameMatcherID.byRefId,\n name: 'Query refId',\n description: 'match the refId',\n defaultOptions: 'A',\n\n get: (pattern: string) => {\n let regex: RegExp | null = null;\n\n if (stringStartsAsRegEx(pattern)) {\n try {\n regex = stringToJsRegex(pattern);\n } catch (error) {\n if (error instanceof Error) {\n console.warn(error.message);\n }\n }\n }\n // old format that was simply unescaped pipe-joined strings -> regexp\n else if (pattern.includes('|')) {\n // convert A|B -> /^(?:A|B)$/, regexp-escaping all chars between pipes\n const escapedUnion = pattern.split('|').map(escapeStringForRegex).join('|');\n regex = new RegExp(`^(?:${escapedUnion})$`);\n }\n\n return (frame: DataFrame) => {\n return regex?.test(frame.refId || '') ?? frame.refId === pattern;\n };\n },\n\n getOptionsDisplayText: (pattern: string) => {\n return `RefID: ${pattern}`;\n },\n};\n\nexport function getRefIdMatchers(): FrameMatcherInfo[] {\n return [refIdMatcher];\n}\n","import { Field, FieldType, DataFrame } from '../../types/dataFrame';\nimport { FieldMatcherInfo } from '../../types/transformations';\n\nimport { FieldMatcherID } from './ids';\n\nconst firstFieldMatcher: FieldMatcherInfo = {\n id: FieldMatcherID.first,\n name: 'First Field',\n description: 'The first field in the frame',\n\n get: (type: FieldType) => {\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return field === frame.fields[0];\n };\n },\n\n getOptionsDisplayText: () => {\n return `First field`;\n },\n};\n\nconst firstTimeFieldMatcher: FieldMatcherInfo = {\n id: FieldMatcherID.firstTimeField,\n name: 'First time field',\n description: 'The first field of type time in a frame',\n\n get: (type: FieldType) => {\n return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n return field.type === FieldType.time && field === frame.fields.find((f) => f.type === FieldType.time);\n };\n },\n\n getOptionsDisplayText: () => {\n return `First time field`;\n },\n};\n\n/**\n * Registry Initialization\n */\nexport function getSimpleFieldMatchers(): FieldMatcherInfo[] {\n return [firstFieldMatcher, firstTimeFieldMatcher];\n}\n","import { Field } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst isEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.equal,\n name: 'Is equal',\n description: 'Match where value for given field is equal to options value.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n // eslint-disable-next-line eqeqeq\n return value == options.value;\n };\n },\n getOptionsDisplayText: () => {\n return `Matches all rows where field is null.`;\n },\n isApplicable: () => true,\n getDefaultOptions: () => ({ value: '' }),\n};\n\nconst isNotEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.notEqual,\n name: 'Is not equal',\n description: 'Match where value for given field is not equal to options value.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n // eslint-disable-next-line eqeqeq\n return value != options.value;\n };\n },\n getOptionsDisplayText: () => {\n return `Matches all rows where field is not null.`;\n },\n isApplicable: () => true,\n getDefaultOptions: () => ({ value: '' }),\n};\n\nexport const getEqualValueMatchers = (): ValueMatcherInfo[] => [isEqualValueMatcher, isNotEqualValueMatcher];\n","import { Field } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { ValueMatcherOptions } from './types';\n\nconst isNullValueMatcher: ValueMatcherInfo<ValueMatcherOptions> = {\n id: ValueMatcherID.isNull,\n name: 'Is null',\n description: 'Match where value for given field is null.',\n get: () => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n return value == null;\n };\n },\n getOptionsDisplayText: () => {\n return `Matches all rows where field is null.`;\n },\n isApplicable: () => true,\n getDefaultOptions: () => ({}),\n};\n\nconst isNotNullValueMatcher: ValueMatcherInfo<ValueMatcherOptions> = {\n id: ValueMatcherID.isNotNull,\n name: 'Is not null',\n description: 'Match where value for given field is not null.',\n get: () => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n return value != null;\n };\n },\n getOptionsDisplayText: () => {\n return `Matches all rows where field is not null.`;\n },\n isApplicable: () => true,\n getDefaultOptions: () => ({}),\n};\n\nexport const getNullValueMatchers = (): ValueMatcherInfo[] => [isNullValueMatcher, isNotNullValueMatcher];\n","import { Field, FieldType } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst isGreaterValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.greater,\n name: 'Is greater',\n description: 'Match when field value is greater than option.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n if (isNaN(value)) {\n return false;\n }\n return value > options.value;\n };\n },\n getOptionsDisplayText: (options) => {\n return `Matches all rows where field value is greater than: ${options.value}.`;\n },\n isApplicable: (field) => field.type === FieldType.number,\n getDefaultOptions: () => ({ value: 0 }),\n};\n\nconst isGreaterOrEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.greaterOrEqual,\n name: 'Is greater or equal',\n description: 'Match when field value is greater than or equal to option.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n if (isNaN(value)) {\n return false;\n }\n return value >= options.value;\n };\n },\n getOptionsDisplayText: (options) => {\n return `Matches all rows where field value is greater than or equal to: ${options.value}.`;\n },\n isApplicable: (field) => field.type === FieldType.number,\n getDefaultOptions: () => ({ value: 0 }),\n};\n\nconst isLowerValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.lower,\n name: 'Is lower',\n description: 'Match when field value is lower than option.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n if (isNaN(value)) {\n return false;\n }\n return value < options.value;\n };\n },\n getOptionsDisplayText: (options) => {\n return `Matches all rows where field value is lower than: ${options.value}.`;\n },\n isApplicable: (field) => field.type === FieldType.number,\n getDefaultOptions: () => ({ value: 0 }),\n};\n\nconst isLowerOrEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.lowerOrEqual,\n name: 'Is lower or equal',\n description: 'Match when field value is lower or equal than option.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n if (isNaN(value)) {\n return false;\n }\n return value <= options.value;\n };\n },\n getOptionsDisplayText: (options) => {\n return `Matches all rows where field value is lower or equal than: ${options.value}.`;\n },\n isApplicable: (field) => field.type === FieldType.number,\n getDefaultOptions: () => ({ value: 0 }),\n};\n\nexport const getNumericValueMatchers = (): ValueMatcherInfo[] => [\n isGreaterValueMatcher,\n isGreaterOrEqualValueMatcher,\n isLowerValueMatcher,\n isLowerOrEqualValueMatcher,\n];\n","import { Field, FieldType } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { RangeValueMatcherOptions } from './types';\n\nconst isBetweenValueMatcher: ValueMatcherInfo<RangeValueMatcherOptions> = {\n id: ValueMatcherID.between,\n name: 'Is between',\n description: 'Match when field value is between given option values.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n if (isNaN(value)) {\n return false;\n }\n\n // if it is a time, it is interpolated as a string, so convert before comparing\n const fromVal = typeof options.from !== 'number' ? parseInt(options.from, 10) : options.from;\n const toVal = typeof options.to !== 'number' ? parseInt(options.to, 10) : options.to;\n\n return value > fromVal && value < toVal;\n };\n },\n getOptionsDisplayText: (options) => {\n return `Matches all rows where field value is between ${options.from} and ${options.to}.`;\n },\n isApplicable: (field) => field.type === FieldType.number || field.type === FieldType.time,\n getDefaultOptions: (field) => {\n if (field.type === FieldType.time) {\n return { from: '$__from', to: '$__to' };\n } else {\n return { from: 0, to: 100 };\n }\n },\n};\n\nexport const getRangeValueMatchers = (): ValueMatcherInfo[] => [isBetweenValueMatcher];\n","import { Field } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst regexValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions<string>> = {\n id: ValueMatcherID.regex,\n name: 'Regex',\n description: 'Match when field value is matching regex.',\n get: (options) => {\n const regex = new RegExp(options.value);\n\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n return regex.test(value);\n };\n },\n getOptionsDisplayText: (options) => {\n return `Matches all rows where field value is matching regex: ${options.value}`;\n },\n isApplicable: () => true,\n getDefaultOptions: () => ({ value: '.*' }),\n};\n\nexport const getRegexValueMatcher = (): ValueMatcherInfo[] => [regexValueMatcher];\n","import { Field, FieldType } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst isSubstringMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.substring,\n name: 'Contains substring',\n description: 'Match where value for given field is a substring to options value.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n return (\n (value &&\n options.value &&\n typeof value === 'string' &&\n value.toLowerCase().includes(options.value.toLowerCase())) ||\n options.value === ''\n );\n };\n },\n getOptionsDisplayText: () => {\n return `Matches all rows where field is similar to the value.`;\n },\n isApplicable: (field) => field.type === FieldType.string,\n getDefaultOptions: () => ({ value: '' }),\n};\n\nconst isNotSubstringValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n id: ValueMatcherID.notSubstring,\n name: 'Does not contain substring',\n description: 'Match where value for given field is not a substring to options value.',\n get: (options) => {\n return (valueIndex: number, field: Field) => {\n const value = field.values[valueIndex];\n return (\n typeof value === 'string' &&\n options.value &&\n value &&\n options.value !== '' &&\n !value.toLowerCase().includes(options.value.toLowerCase())\n );\n };\n },\n getOptionsDisplayText: () => {\n return `Matches all rows where field is not similar to the value.`;\n },\n isApplicable: (field) => field.type === FieldType.string,\n getDefaultOptions: () => ({ value: '' }),\n};\n\nexport const getSubstringValueMatchers = (): ValueMatcherInfo[] => [isSubstringMatcher, isNotSubstringValueMatcher];\n","// Load the Builtin matchers\nimport {\n FieldMatcherInfo,\n MatcherConfig,\n FrameMatcherInfo,\n FieldMatcher,\n FrameMatcher,\n ValueMatcherInfo,\n ValueMatcher,\n} from '../types/transformations';\nimport { Registry } from '../utils/Registry';\n\nimport { getFieldTypeMatchers } from './matchers/fieldTypeMatcher';\nimport { fieldValueMatcherInfo } from './matchers/fieldValueMatcher';\nimport { getFieldNameMatchers, getFrameNameMatchers } from './matchers/nameMatcher';\nimport { getFieldPredicateMatchers, getFramePredicateMatchers } from './matchers/predicates';\nimport { getRefIdMatchers } from './matchers/refIdMatcher';\nimport { getSimpleFieldMatchers } from './matchers/simpleFieldMatcher';\nimport { getEqualValueMatchers } from './matchers/valueMatchers/equalMatchers';\nimport { getNullValueMatchers } from './matchers/valueMatchers/nullMatchers';\nimport { getNumericValueMatchers } from './matchers/valueMatchers/numericMatchers';\nimport { getRangeValueMatchers } from './matchers/valueMatchers/rangeMatchers';\nimport { getRegexValueMatcher } from './matchers/valueMatchers/regexMatchers';\nimport { getSubstringValueMatchers } from './matchers/valueMatchers/substringMatchers';\n\n/**\n * Registry that contains all of the built in field matchers.\n * @public\n */\nexport const fieldMatchers = new Registry<FieldMatcherInfo>(() => {\n return [\n ...getFieldPredicateMatchers(), // Predicates\n ...getFieldTypeMatchers(), // by type\n ...getFieldNameMatchers(), // by name\n ...getSimpleFieldMatchers(), // first\n fieldValueMatcherInfo, // reduce field (all null/zero)\n ];\n});\n\n/**\n * Registry that contains all of the built in frame matchers.\n * @public\n */\nexport const frameMatchers = new Registry<FrameMatcherInfo>(() => {\n return [\n ...getFramePredicateMatchers(), // Predicates\n ...getFrameNameMatchers(), // by name\n ...getRefIdMatchers(), // by query refId\n ];\n});\n\n/**\n * Registry that contains all of the built in value matchers.\n * @public\n */\nexport const valueMatchers = new Registry<ValueMatcherInfo>(() => {\n return [\n ...getNullValueMatchers(),\n ...getNumericValueMatchers(),\n ...getEqualValueMatchers(),\n ...getSubstringValueMatchers(),\n ...getRangeValueMatchers(),\n ...getRegexValueMatcher(),\n ];\n});\n\n/**\n * Resolves a field matcher from the registry for given config.\n * Will throw an error if matcher can not be resolved.\n * @public\n */\nexport function getFieldMatcher(config: MatcherConfig): FieldMatcher {\n const info = fieldMatchers.get(config.id);\n if (!info) {\n throw new Error('Unknown field matcher: ' + config.id);\n }\n return info.get(config.options);\n}\n\n/**\n * Resolves a frame matcher from the registry for given config.\n * Will throw an error if matcher can not be resolved.\n * @public\n */\nexport function getFrameMatchers(config: MatcherConfig): FrameMatcher {\n const info = frameMatchers.get(config.id);\n if (!info) {\n throw new Error('Unknown frame matcher: ' + config.id);\n }\n return info.get(config.options);\n}\n\n/**\n * Resolves a value matcher from the registry for given config.\n * Will throw an error if matcher can not be resolved.\n * @public\n */\nexport function getValueMatcher(config: MatcherConfig): ValueMatcher {\n const info = valueMatchers.get(config.id);\n if (!info) {\n throw new Error('Unknown value matcher: ' + config.id);\n }\n return info.get(config.options);\n}\n","export enum QueryEditorPropertyType {\n String = 'string',\n}\n\nexport interface QueryEditorProperty {\n type: QueryEditorPropertyType;\n name?: string;\n}\n\nexport type QueryEditorOperatorType = string | boolean | number;\ntype QueryEditorOperatorValueType = QueryEditorOperatorType | QueryEditorOperatorType[];\n\nexport interface QueryEditorOperator<T extends QueryEditorOperatorValueType> {\n name?: string;\n value?: T;\n}\n\nexport interface QueryEditorOperatorExpression {\n type: QueryEditorExpressionType.Operator;\n property: QueryEditorProperty;\n operator: QueryEditorOperator<QueryEditorOperatorValueType>;\n}\n\nexport interface QueryEditorArrayExpression {\n type: QueryEditorExpressionType.And | QueryEditorExpressionType.Or;\n expressions: QueryEditorExpression[] | QueryEditorArrayExpression[];\n}\n\nexport interface QueryEditorPropertyExpression {\n type: QueryEditorExpressionType.Property;\n property: QueryEditorProperty;\n}\n\nexport enum QueryEditorExpressionType {\n Property = 'property',\n Operator = 'operator',\n Or = 'or',\n And = 'and',\n GroupBy = 'groupBy',\n Function = 'function',\n FunctionParameter = 'functionParameter',\n}\n\nexport type QueryEditorExpression =\n | QueryEditorArrayExpression\n | QueryEditorPropertyExpression\n | QueryEditorGroupByExpression\n | QueryEditorFunctionExpression\n | QueryEditorFunctionParameterExpression\n | QueryEditorOperatorExpression;\n\nexport interface QueryEditorGroupByExpression {\n type: QueryEditorExpressionType.GroupBy;\n property: QueryEditorProperty;\n}\n\nexport interface QueryEditorFunctionExpression {\n type: QueryEditorExpressionType.Function;\n name?: string;\n alias?: string;\n parameters?: QueryEditorFunctionParameterExpression[];\n}\n\nexport interface QueryEditorFunctionParameterExpression {\n type: QueryEditorExpressionType.FunctionParameter;\n name?: string;\n}\n","import { AppEvent } from './types';\n\nconst typeList: Set<string> = new Set();\n\nexport function eventFactory<T = undefined>(name: string): AppEvent<T> {\n if (typeList.has(name)) {\n throw new Error(`There is already an event defined with type '${name}'`);\n }\n\n typeList.add(name);\n return { name };\n}\n","import { css } from '@emotion/css';\nimport { ComponentProps, useMemo } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { InlineField, Select, SelectMenuOptions, useStyles2 } from '@grafana/ui';\n\nimport { useAlertmanager } from '../state/AlertmanagerContext';\nimport { isExtraConfig } from '../utils/alertmanager/extraConfigs';\nimport { AlertManagerDataSource, GRAFANA_RULES_SOURCE_NAME } from '../utils/datasource';\n\ninterface Props {\n disabled?: boolean;\n}\n\nfunction getAlertManagerLabel(alertManager: AlertManagerDataSource) {\n if (alertManager.name === GRAFANA_RULES_SOURCE_NAME) {\n return 'Grafana';\n }\n\n return alertManager.displayName || alertManager.name;\n}\n\nexport const AlertManagerPicker = ({ disabled = false }: Props) => {\n const styles = useStyles2(getStyles);\n const { selectedAlertmanager, availableAlertManagers, setSelectedAlertmanager } = useAlertmanager();\n\n const options = useMemo(() => {\n // Group alertmanagers\n const grafanaAM = availableAlertManagers.find((am) => am.name === GRAFANA_RULES_SOURCE_NAME);\n const extraConfig = availableAlertManagers.find((am) => isExtraConfig(am.name));\n const datasourceAMs = availableAlertManagers.filter(\n (am) => am.name !== GRAFANA_RULES_SOURCE_NAME && !isExtraConfig(am.name)\n );\n\n const groupedOptions: Array<SelectableValue<string> | { label: string; options: Array<SelectableValue<string>> }> =\n [];\n\n // Add Grafana alertmanager first\n if (grafanaAM) {\n groupedOptions.push({\n label: getAlertManagerLabel(grafanaAM),\n value: grafanaAM.name,\n imgUrl: grafanaAM.imgUrl,\n meta: grafanaAM.meta,\n });\n }\n\n // Add extra config (single merged configuration)\n if (extraConfig) {\n groupedOptions.push({\n label: getAlertManagerLabel(extraConfig),\n value: extraConfig.name,\n imgUrl: extraConfig.imgUrl,\n meta: extraConfig.meta,\n });\n }\n\n // Add external alertmanagers\n if (datasourceAMs.length > 0) {\n groupedOptions.push({\n label: t('alerting.alert-manager-picker.external-alertmanagers-group', 'External Alertmanagers'),\n options: datasourceAMs.map((ds) => ({\n label: getAlertManagerLabel(ds),\n value: ds.name,\n imgUrl: ds.imgUrl,\n meta: ds.meta,\n })),\n });\n }\n\n return groupedOptions;\n }, [availableAlertManagers]);\n\n const isDisabled = disabled || options.length === 1;\n const label = isDisabled ? 'Alertmanager' : 'Choose Alertmanager';\n\n return (\n <InlineField className={styles.field} label={label} disabled={isDisabled} data-testid=\"alertmanager-picker\">\n <Select\n aria-label={label}\n width={29}\n className=\"ds-picker select-container\"\n backspaceRemovesValue={false}\n onChange={(value) => {\n if (value?.value) {\n setSelectedAlertmanager(value.value);\n }\n }}\n options={options}\n noOptionsMessage={t(\n 'alerting.alert-manager-picker.noOptionsMessage-no-datasources-found',\n 'No datasources found'\n )}\n value={selectedAlertmanager}\n getOptionLabel={(o) => o.label}\n components={{ Option: CustomOption }}\n />\n </InlineField>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n field: css({\n margin: 0,\n }),\n optionContent: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n whiteSpace: 'pre-line',\n }),\n});\n\n// custom option that overwrites the default \"white-space: nowrap\" for Alertmanager names that are really long\nconst CustomOption = (props: ComponentProps<typeof SelectMenuOptions>) => {\n const styles = useStyles2(getStyles);\n\n return (\n <SelectMenuOptions\n {...props}\n renderOptionLabel={({ label }) => <div className={styles.optionContent}>{label}</div>}\n />\n );\n};\n","import { Trans, t } from '@grafana/i18n';\nimport { Alert } from '@grafana/ui';\n\nimport { AlertManagerDataSource } from '../utils/datasource';\n\ninterface Props {\n availableAlertManagers: AlertManagerDataSource[];\n}\n\nconst NoAlertManagersAvailable = () => {\n return (\n <Alert\n title={t('alerting.no-alert-managers-available.title-no-alertmanager-found', 'No Alertmanager found')}\n severity=\"warning\"\n >\n <Trans i18nKey=\"alerting.no-alert-managers-available.body-no-alertmanager-found\">\n We could not find any external Alertmanagers and you may not have access to the built-in Grafana Alertmanager.\n </Trans>\n </Alert>\n );\n};\n\nconst OtherAlertManagersAvailable = () => {\n return (\n <Alert\n title={t(\n 'alerting.other-alert-managers-available.title-selected-alertmanager-not-found',\n 'Selected Alertmanager not found.'\n )}\n severity=\"warning\"\n >\n <Trans i18nKey=\"alerting.other-alert-managers-available.body-selected-alertmanager-not-found\">\n The selected Alertmanager no longer exists or you may not have permission to access it. You can select a\n different Alertmanager from the dropdown.\n </Trans>\n </Alert>\n );\n};\n\nexport const NoAlertManagerWarning = ({ availableAlertManagers }: Props) => {\n const hasOtherAMs = availableAlertManagers.length > 0;\n\n return <div>{hasOtherAMs ? <OtherAlertManagersAvailable /> : <NoAlertManagersAvailable />}</div>;\n};\n","import { PropsWithChildren, ReactNode } from 'react';\nimport { useLocation } from 'react-use';\n\nimport { Page } from 'app/core/components/Page/Page';\nimport { PageProps } from 'app/core/components/Page/types';\n\nimport { AlertmanagerProvider, useAlertmanager } from '../state/AlertmanagerContext';\n\nimport { AlertManagerPicker } from './AlertManagerPicker';\nimport { NoAlertManagerWarning } from './NoAlertManagerWarning';\n\n/**\n * This is the main alerting page wrapper, used by the alertmanager page wrapper and the alert rules list view\n *\n * NOTE: we're omitting \"title\" here because it's not actually rendering the title (it's the html attribute \"title\").\n * Use \"renderTitle\" instead for custom page titles.\n */\ntype AlertingPageWrapperProps = Omit<PageProps, 'children' | 'title'> & {\n isLoading?: boolean;\n children?: ReactNode;\n};\n\nexport const AlertingPageWrapper = ({ children, isLoading, ...rest }: AlertingPageWrapperProps) => (\n <Page {...rest}>\n <Page.Contents isLoading={isLoading}>{children}</Page.Contents>\n </Page>\n);\n\n/**\n * This wrapper is for pages that use the Alertmanager API\n */\ninterface AlertmanagerPageWrapperProps extends AlertingPageWrapperProps {\n accessType: 'instance' | 'notification';\n}\nexport const AlertmanagerPageWrapper = ({ children, accessType, ...props }: AlertmanagerPageWrapperProps) => {\n const disableAlertmanager = useIsDisabledAlertmanagerSelection();\n\n return (\n <AlertmanagerProvider accessType={accessType}>\n <AlertingPageWrapper {...props} actions={<AlertManagerPicker disabled={disableAlertmanager} />}>\n <AlertManagerPagePermissionsCheck>{children}</AlertManagerPagePermissionsCheck>\n </AlertingPageWrapper>\n </AlertmanagerProvider>\n );\n};\n\n/**\n * This function tells us when we want to disable the alertmanager picker\n * It's not great...\n */\nfunction useIsDisabledAlertmanagerSelection() {\n const location = useLocation();\n const disabledPathSegment = ['/edit', '/new'];\n\n return disabledPathSegment.some((match) => location?.pathname?.includes(match));\n}\n\n/**\n * This component will render an error message if the user doesn't have sufficient permissions or if the requested\n * alertmanager doesn't exist\n */\nconst AlertManagerPagePermissionsCheck = ({ children }: PropsWithChildren) => {\n const { availableAlertManagers, selectedAlertmanager } = useAlertmanager();\n\n if (!selectedAlertmanager) {\n return <NoAlertManagerWarning availableAlertManagers={availableAlertManagers} />;\n }\n\n return <>{children}</>;\n};\n","import { css } from '@emotion/css';\nimport * as React from 'react';\nimport { useAsync } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { FetchError } from '@grafana/runtime';\nimport { Alert, useStyles2 } from '@grafana/ui';\nimport { backendSrv } from 'app/core/services/backend_srv';\n\nimport { DashboardModel } from '../../state/DashboardModel';\n\ninterface DashboardValidationProps {\n dashboard: DashboardModel;\n}\n\ntype ValidationResponse = Awaited<ReturnType<typeof backendSrv.validateDashboard>>;\n\nfunction DashboardValidation({ dashboard }: DashboardValidationProps) {\n const styles = useStyles2(getStyles);\n const { loading, value, error } = useAsync(async () => {\n const saveModel = dashboard.getSaveModelCloneOld();\n const respPromise = backendSrv\n .validateDashboard(saveModel)\n // API returns schema validation errors in 4xx range, so resolve them rather than throwing\n .catch((err: FetchError<ValidationResponse>) => {\n if (err.status >= 500) {\n throw err;\n }\n\n return err.data;\n });\n\n return respPromise;\n }, [dashboard]);\n\n let alert: React.ReactNode;\n\n if (loading) {\n alert = (\n <Alert\n severity=\"info\"\n title={t('dashboard.dashboard-validation.title-checking-dashboard-validity', 'Checking dashboard validity')}\n />\n );\n } else if (value) {\n if (!value.isValid) {\n alert = (\n <Alert\n severity=\"warning\"\n title={t(\n 'dashboard.dashboard-validation.title-dashboard-failed-schema-validation',\n 'Dashboard failed schema validation'\n )}\n >\n <p>\n <Trans i18nKey=\"dashboard.dashboard-validation.body-dashboard-failed-schema-validation\">\n Validation is provided for development purposes and should be safe to ignore. If you are a Grafana\n developer, consider checking and updating the dashboard schema\n </Trans>\n </p>\n <div className={styles.error}>{value.message}</div>\n </Alert>\n );\n }\n } else {\n const errorMessage = error?.message ?? 'Unknown error';\n alert = (\n <Alert\n severity=\"info\"\n title={t(\n 'dashboard.dashboard-validation.title-error-checking-dashboard-validity',\n 'Error checking dashboard validity'\n )}\n >\n <p className={styles.error}>{errorMessage}</p>\n </Alert>\n );\n }\n\n if (alert) {\n return <div className={styles.root}>{alert}</div>;\n }\n\n return null;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n root: css({\n marginTop: theme.spacing(1),\n }),\n error: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n whiteSpace: 'pre-wrap',\n overflowX: 'auto',\n maxWidth: '100%',\n }),\n});\n\nexport default DashboardValidation;\n","import { cloneDeep } from 'lodash';\nimport { useAsyncFn } from 'react-use';\n\nimport { locationUtil } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport appEvents from 'app/core/app_events';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { updateDashboardName } from 'app/core/reducers/navBarTree';\nimport { useSaveDashboardMutation } from 'app/features/browse-dashboards/api/browseDashboardsAPI';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { DashboardSavedEvent } from 'app/types/events';\nimport { useDispatch } from 'app/types/store';\n\nimport { updateDashboardUidLastUsedDatasource } from '../../utils/dashboard';\nimport { trackDashboardCreatedOrSaved } from '../../utils/tracking';\n\nimport { SaveDashboardOptions } from './types';\n\nconst saveDashboard = async (\n saveModel: any,\n options: SaveDashboardOptions,\n dashboard: DashboardModel,\n saveDashboardRtkQuery: ReturnType<typeof useSaveDashboardMutation>[0]\n) => {\n const query = await saveDashboardRtkQuery({\n dashboard: saveModel,\n folderUid: options.folderUid ?? dashboard.meta.folderUid ?? saveModel.meta?.folderUid,\n message: options.message,\n overwrite: options.overwrite,\n k8s: dashboard.meta.k8s,\n });\n\n if ('error' in query) {\n throw query.error;\n }\n\n return query.data;\n};\n\nexport const useDashboardSave = (isCopy = false) => {\n const dispatch = useDispatch();\n const notifyApp = useAppNotification();\n const [saveDashboardRtkQuery] = useSaveDashboardMutation();\n const [state, onDashboardSave] = useAsyncFn(\n async (clone: Dashboard, options: SaveDashboardOptions, dashboard: DashboardModel) => {\n try {\n const result = await saveDashboard(clone, options, dashboard, saveDashboardRtkQuery);\n dashboard.version = result.version;\n\n // Altering the clone leads to an error due to the clone being immutable\n clone = cloneDeep(clone);\n clone.version = result.version;\n dashboard.clearUnsavedChanges(clone, options);\n\n // important that these happen before location redirect below\n appEvents.publish(new DashboardSavedEvent());\n notifyApp.success(t('dashboard.save-dashboard.message-dashboard-saved', 'Dashboard saved'));\n\n // Update local storage dashboard to handle things like last used datasource\n updateDashboardUidLastUsedDatasource(result.uid);\n\n if (isCopy) {\n DashboardInteractions.dashboardCopied({ name: dashboard.title || '', url: result.url });\n } else {\n trackDashboardCreatedOrSaved(!!dashboard.id, { name: dashboard.title, url: result.url });\n }\n\n const currentPath = locationService.getLocation().pathname;\n const newUrl = locationUtil.stripBaseFromUrl(result.url);\n\n if (newUrl !== currentPath && result.url) {\n setTimeout(() => locationService.replace(newUrl));\n }\n if (dashboard.meta.isStarred) {\n dispatch(\n updateDashboardName({\n id: dashboard.uid,\n title: dashboard.title,\n url: newUrl,\n })\n );\n }\n return result;\n } catch (error) {\n if (error instanceof Error) {\n notifyApp.error(error.message ?? 'Error saving dashboard');\n }\n throw error;\n }\n },\n [dispatch, notifyApp]\n );\n\n return { state, onDashboardSave };\n};\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config, FetchError } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport { Button, ConfirmModal, Modal, useStyles2 } from '@grafana/ui';\n\nimport { DashboardModel } from '../../state/DashboardModel';\n\nimport { SaveDashboardAsButton } from './SaveDashboardButton';\nimport { SaveDashboardModalProps } from './types';\nimport { useDashboardSave } from './useDashboardSave';\n\ninterface SaveDashboardErrorProxyProps {\n /** original dashboard */\n dashboard: DashboardModel;\n /** dashboard save model with applied modifications, i.e. title */\n dashboardSaveModel: Dashboard;\n error: FetchError;\n onDismiss: () => void;\n setErrorIsHandled: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport const SaveDashboardErrorProxy = ({\n dashboard,\n dashboardSaveModel,\n error,\n onDismiss,\n setErrorIsHandled,\n}: SaveDashboardErrorProxyProps) => {\n const { onDashboardSave } = useDashboardSave();\n\n const isRestoreDashboardsEnabled = config.featureToggles.restoreDashboards;\n\n return (\n <>\n {error.data && error.data.status === 'version-mismatch' && (\n <ConfirmModal\n isOpen={true}\n title={t('dashboard.save-dashboard-error-proxy.title-version-mismatch', 'Conflict')}\n body={\n <div>\n <Trans i18nKey=\"dashboard.save-dashboard-error-proxy.body-version-mismatch\">\n Someone else has updated this dashboard\n <br />\n <small>Would you still like to save this dashboard?</small>\n </Trans>\n </div>\n }\n confirmText={t('dashboard.save-dashboard-error-proxy.confirmText-save-and-overwrite', 'Save and overwrite')}\n onConfirm={async () => {\n await onDashboardSave(dashboardSaveModel, { overwrite: true }, dashboard);\n onDismiss();\n }}\n onDismiss={onDismiss}\n />\n )}\n {error.data && error.data.status === 'name-exists' && (\n <>\n {isRestoreDashboardsEnabled ? (\n <Modal\n isOpen={true}\n title={t('save-dashboards.name-exists.title', 'Dashboard name already exists')}\n onDismiss={onDismiss}\n >\n <p>\n <Trans i18nKey=\"save-dashboards.name-exists.message-info\">\n A dashboard with the same name in the selected folder already exists, including recently deleted\n dashboards.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"save-dashboards.name-exists.message-suggestion\">\n Please choose a different name or folder.\n </Trans>\n </p>\n </Modal>\n ) : (\n <ConfirmModal\n isOpen={true}\n title={t('dashboard.save-dashboard-error-proxy.title-name-exists', 'Conflict')}\n body={\n <div>\n <Trans i18nKey=\"dashboard.save-dashboard-error-proxy.body-name-exists\">\n A dashboard with the same name in selected folder already exists.\n <br />\n <small>Would you still like to save this dashboard?</small>\n </Trans>\n </div>\n }\n confirmText={t(\n 'dashboard.save-dashboard-error-proxy.confirmText-save-and-overwrite',\n 'Save and overwrite'\n )}\n onConfirm={async () => {\n await onDashboardSave(dashboardSaveModel, { overwrite: true }, dashboard);\n onDismiss();\n }}\n onDismiss={onDismiss}\n />\n )}\n </>\n )}\n {error.data && error.data.status === 'plugin-dashboard' && (\n <ConfirmPluginDashboardSaveModal\n dashboard={dashboard}\n onDismiss={() => {\n setErrorIsHandled(true);\n onDismiss();\n }}\n />\n )}\n </>\n );\n};\n\nconst ConfirmPluginDashboardSaveModal = ({ onDismiss, dashboard }: SaveDashboardModalProps) => {\n const { onDashboardSave } = useDashboardSave();\n\n const styles = useStyles2(getConfirmPluginDashboardSaveModalStyles);\n\n return (\n <Modal\n className={styles.modal}\n title={t('dashboard.confirm-plugin-dashboard-save-modal.title-plugin-dashboard', 'Plugin dashboard')}\n icon=\"copy\"\n isOpen={true}\n onDismiss={onDismiss}\n >\n <div className={styles.modalText}>\n <Trans i18nKey=\"dashboard.confirm-plugin-dashboard-save-modal.body-plugin-dashboard\">\n Your changes will be lost when you update the plugin.\n <br />\n <small>\n Use <strong>Save As</strong> to create custom version.\n </small>\n </Trans>\n </div>\n <Modal.ButtonRow>\n <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n <Trans i18nKey=\"dashboard.confirm-plugin-dashboard-save-modal.cancel\">Cancel</Trans>\n </Button>\n <SaveDashboardAsButton onClick={onDismiss} dashboard={dashboard} onSaveSuccess={onDismiss} />\n <Button\n variant=\"destructive\"\n onClick={async () => {\n await onDashboardSave(dashboard.getSaveModelClone(), { overwrite: true }, dashboard);\n onDismiss();\n }}\n >\n <Trans i18nKey=\"dashboard.confirm-plugin-dashboard-save-modal.overwrite\">Overwrite</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n};\n\nexport const proxyHandlesError = (errorStatus: string) => {\n switch (errorStatus) {\n case 'version-mismatch':\n case 'name-exists':\n case 'plugin-dashboard':\n return true;\n\n default:\n return false;\n }\n};\n\nconst getConfirmPluginDashboardSaveModalStyles = (theme: GrafanaTheme2) => ({\n modal: css({\n width: '500px',\n }),\n modalText: css({\n fontSize: theme.typography.h4.fontSize,\n color: theme.colors.text.primary,\n marginBottom: theme.spacing(4),\n paddingTop: theme.spacing(2),\n }),\n modalButtonRow: css({\n marginBottom: '14px',\n 'a, button': {\n marginRight: theme.spacing(2),\n },\n }),\n});\n","import { ChangeEvent } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Button, Input, Switch, Form, Field, InputControl, Label, TextArea, Stack } from '@grafana/ui';\nimport { FolderPicker } from 'app/core/components/Select/FolderPicker';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { validationSrv } from 'app/features/manage-dashboards/services/ValidationSrv';\n\nimport { GenAIDashDescriptionButton } from '../../GenAI/GenAIDashDescriptionButton';\nimport { GenAIDashTitleButton } from '../../GenAI/GenAIDashTitleButton';\nimport { SaveDashboardFormProps } from '../types';\n\ninterface SaveDashboardAsFormDTO {\n title: string;\n description: string;\n $folder: { uid?: string; title?: string };\n copyTags: boolean;\n}\n\nconst getSaveAsDashboardClone = (dashboard: DashboardModel) => {\n const clone = dashboard.getSaveModelClone();\n clone.id = null;\n clone.uid = '';\n clone.title += ' Copy';\n clone.editable = true;\n\n // remove alerts if source dashboard is already persisted\n // do not want to create alert dupes\n if (dashboard.id > 0 && clone.panels) {\n clone.panels.forEach((panel) => {\n // @ts-expect-error\n if (panel.type === 'graph' && panel.alert) {\n // @ts-expect-error\n delete panel.thresholds;\n }\n // @ts-expect-error\n delete panel.alert;\n });\n }\n\n return clone;\n};\n\nexport interface SaveDashboardAsFormProps extends SaveDashboardFormProps {\n isNew?: boolean;\n}\n\nexport const SaveDashboardAsForm = ({\n dashboard,\n isLoading,\n isNew,\n onSubmit,\n onCancel,\n onSuccess,\n}: SaveDashboardAsFormProps) => {\n const defaultValues: SaveDashboardAsFormDTO = {\n title: isNew ? dashboard.title : `${dashboard.title} Copy`,\n description: dashboard.description,\n $folder: {\n uid: dashboard.meta.folderUid,\n title: dashboard.meta.folderTitle,\n },\n copyTags: false,\n };\n\n const validateDashboardName = (getFormValues: () => SaveDashboardAsFormDTO) => async (dashboardName: string) => {\n if (dashboardName && dashboardName === getFormValues().$folder.title?.trim()) {\n return 'Dashboard name cannot be the same as folder name';\n }\n\n try {\n await validationSrv.validateNewDashboardName(getFormValues().$folder.uid ?? 'general', dashboardName);\n return true;\n } catch (e) {\n return e instanceof Error ? e.message : 'Dashboard name is invalid';\n }\n };\n\n return (\n <Form\n defaultValues={defaultValues}\n onSubmit={async (data: SaveDashboardAsFormDTO) => {\n if (!onSubmit) {\n return;\n }\n\n const clone = getSaveAsDashboardClone(dashboard);\n clone.title = data.title;\n clone.description = data.description;\n if (!isNew && !data.copyTags) {\n clone.tags = [];\n }\n\n const result = await onSubmit(\n clone,\n {\n folderUid: data.$folder.uid,\n },\n dashboard\n );\n\n if (result.status === 'success') {\n onSuccess();\n }\n }}\n >\n {({ register, control, errors, getValues }) => (\n <>\n <InputControl\n render={({ field: { ref, ...field } }) => (\n <Field\n label={\n <Stack justifyContent=\"space-between\">\n <Label htmlFor=\"title\">\n <Trans i18nKey=\"dashboard.save-dashboard-as-form.title\">Title</Trans>\n </Label>\n {config.featureToggles.dashgpt && isNew && (\n <GenAIDashTitleButton onGenerate={(title) => field.onChange(title)} />\n )}\n </Stack>\n }\n invalid={!!errors.title}\n error={errors.title?.message}\n >\n <Input\n {...field}\n onChange={(e: ChangeEvent<HTMLInputElement>) => field.onChange(e.target.value)}\n aria-label={t(\n 'dashboard.save-dashboard-as-form.aria-label-save-dashboard-title-field',\n 'Save dashboard title field'\n )}\n autoFocus\n />\n </Field>\n )}\n control={control}\n name=\"title\"\n rules={{\n validate: validateDashboardName(getValues),\n }}\n />\n <InputControl\n render={({ field: { ref, ...field } }) => (\n <Field\n label={\n <Stack justifyContent=\"space-between\">\n <Label htmlFor=\"description\">\n <Trans i18nKey=\"dashboard.save-dashboard-as-form.description\">Description</Trans>\n </Label>\n {config.featureToggles.dashgpt && isNew && (\n <GenAIDashDescriptionButton onGenerate={(description) => field.onChange(description)} />\n )}\n </Stack>\n }\n invalid={!!errors.description}\n error={errors.description?.message}\n >\n <TextArea\n {...field}\n onChange={(e: ChangeEvent<HTMLTextAreaElement>) => field.onChange(e.target.value)}\n aria-label={t(\n 'dashboard.save-dashboard-as-form.aria-label-save-dashboard-description-field',\n 'Save dashboard description field'\n )}\n autoFocus\n />\n </Field>\n )}\n control={control}\n name=\"description\"\n />\n <Field label={t('dashboard.save-dashboard-as-form.label-folder', 'Folder')}>\n <InputControl\n render={({ field: { ref, ...field } }) => (\n <FolderPicker\n {...field}\n onChange={(uid: string | undefined, title: string | undefined) => field.onChange({ uid, title })}\n value={field.value?.uid}\n />\n )}\n control={control}\n name=\"$folder\"\n />\n </Field>\n {!isNew && (\n <Field label={t('dashboard.save-dashboard-as-form.label-copy-tags', 'Copy tags')}>\n <Switch {...register('copyTags')} />\n </Field>\n )}\n <Stack>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"dashboard.save-dashboard-as-form.cancel\">Cancel</Trans>\n </Button>\n <Button\n disabled={isLoading}\n type=\"submit\"\n aria-label={t(\n 'dashboard.save-dashboard-as-form.aria-label-save-dashboard-button',\n 'Save dashboard button'\n )}\n >\n {isLoading\n ? t('dashboard.save-dashboard-as-form.saving', 'Saving...')\n : t('dashboard.save-dashboard-as-form.save', 'Save')}\n </Button>\n </Stack>\n </>\n )}\n </Form>\n );\n};\n","import { useCallback } from 'react';\n\nimport { llm } from '@grafana/llm';\n\nimport { DashboardModel } from '../../state/DashboardModel';\n\nimport { GenAIButton } from './GenAIButton';\nimport { EventTrackingSrc } from './tracking';\nimport { getDashboardChanges, Message, Role } from './utils';\n\ninterface GenAIDashboardChangesButtonProps {\n dashboard: DashboardModel;\n onGenerate: (title: string) => void;\n disabled?: boolean;\n}\n\nconst CHANGES_GENERATION_PREFIX_PROMPT = [\n 'You are an expert in Grafana Dashboards',\n 'Your goal is to write a description of the changes for a dashboard to display to the user',\n 'You will be given human-readable diffs with most irrelevant lines filtered out',\n].join('.\\n');\n\nconst CHANGES_GENERATION_POSTFIX_PROMPT = [\n `Respond only with the diff description, which is meant to be loaded directly into the application for the user.`,\n `If there are no substantial user or migration changes, the correct description is \"Minor changes only\"`,\n `If there are too many changes of either kind, and those changes have a message saying 'too long', the correct response for that section is \"Too many changes to auto-summarize\"`,\n 'In a diff, lines beginning with - are removed, and lines beginning with + are added.',\n 'Lines with neither + nor - are included for context. Be careful not to mark them as added or removed if they do not start with + or -.',\n 'If a line is changed, it will show a previous version removed and a new version added',\n 'When referring to panel changes, use the panel title',\n 'When using panel title, wrap it with double quotes',\n 'When the panel changes position, just mention that the panel has changed position',\n 'When an entire panel is added or removed, use the panel title and only say it was added or removed and disregard the rest of the changes for that panel',\n 'Group together similar changes into one line when multiple panels are affected',\n 'Refer to templating elements as variables',\n 'Try to make the response as short as possible',\n].join('.\\n');\n\nexport const GenAIDashboardChangesButton = ({ dashboard, onGenerate, disabled }: GenAIDashboardChangesButtonProps) => {\n const messages = useCallback(() => getMessages(dashboard), [dashboard]);\n\n return (\n <GenAIButton\n messages={messages}\n onGenerate={onGenerate}\n temperature={0}\n model={llm.Model.BASE}\n eventTrackingSrc={EventTrackingSrc.dashboardChanges}\n toggleTipTitle={'Improve your dashboard changes summary'}\n disabled={disabled}\n />\n );\n};\n\nfunction getMessages(dashboard: DashboardModel): Message[] {\n let { userChanges, migrationChanges } = getDashboardChanges(dashboard);\n if (userChanges.length > 8000) {\n userChanges =\n \"User changes were too long, fill in the user changes section with 'User changes too long to auto-summarize'\";\n }\n\n if (migrationChanges.split('\\n').length < 10) {\n migrationChanges = 'No significant migration changes';\n } else if (migrationChanges.length > 8000) {\n migrationChanges =\n \"Migration changes were too long, fill in the migration changes section with 'Migration changes too long to auto-summarize'\";\n }\n\n return [\n {\n content: CHANGES_GENERATION_PREFIX_PROMPT,\n role: Role.system,\n },\n {\n content: `Summarize the following user changes diff under \"User changes\":\\n${userChanges}`,\n role: Role.system,\n },\n {\n content:\n `Be sure to only include substantial user changes, such as adding or removing entire panels, changing panel titles or descriptions, etc.\\n` +\n `Do not include \"User Changes\" section if there are no substantial user changes to report.`,\n role: Role.system,\n },\n {\n content: `Summarize the following migration changes diff under \"Migration changes\":\\n${migrationChanges}`,\n role: Role.system,\n },\n {\n content:\n `Be sure to only include substantial migration changes, such as adding or removing entire panels, changing panel titles or descriptions, etc.\\n` +\n `Ignore any threshold step changes or templating list changes.\\n` +\n `Ignore other changes and do not include them in the summary. Do not include \"Migration Changes\" section if there are no substantial migration changes to report.\\n` +\n `If there are substantial migration changes, add \"Some autogenerated changes are included to update the dashboard to the latest valid schema version\" at the end.`,\n role: Role.system,\n },\n {\n content: CHANGES_GENERATION_POSTFIX_PROMPT,\n role: Role.system,\n },\n ];\n}\n","import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema';\nimport { Button, Checkbox, TextArea, useStyles2, Stack } from '@grafana/ui';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { SaveDashboardResponseDTO } from 'app/types/dashboard';\n\nimport { GenAIDashboardChangesButton } from '../../GenAI/GenAIDashboardChangesButton';\nimport { SaveDashboardData, SaveDashboardOptions } from '../types';\n\nexport type SaveProps = {\n dashboard: DashboardModel; // original\n isLoading: boolean;\n saveModel: SaveDashboardData; // already cloned\n onCancel: () => void;\n onSuccess: () => void;\n onSubmit?: (\n saveModel: Dashboard,\n options: SaveDashboardOptions,\n dashboard: DashboardModel\n ) => Promise<SaveDashboardResponseDTO>;\n options: SaveDashboardOptions;\n onOptionsChange: (opts: SaveDashboardOptions) => void;\n};\n\nexport const SaveDashboardForm = ({\n dashboard,\n isLoading,\n saveModel,\n options,\n onSubmit,\n onCancel,\n onSuccess,\n onOptionsChange,\n}: SaveProps) => {\n const hasTimeChanged = useMemo(() => dashboard.hasTimeChanged(), [dashboard]);\n const hasVariableChanged = useMemo(() => dashboard.hasVariablesChanged(), [dashboard]);\n\n const [saving, setSaving] = useState(false);\n const [message, setMessage] = useState(options.message);\n const styles = useStyles2(getStyles);\n\n return (\n <form\n onSubmit={async (event) => {\n event.preventDefault();\n if (!onSubmit) {\n return;\n }\n setSaving(true);\n options = { ...options, message };\n const result = await onSubmit(saveModel.clone, options, dashboard);\n if (result.status === 'success') {\n onSuccess();\n } else {\n setSaving(false);\n }\n }}\n style={{ maxWidth: 600 }}\n >\n <Stack gap={2} direction=\"column\" alignItems=\"flex-start\">\n {hasTimeChanged && (\n <Checkbox\n checked={!!options.saveTimerange}\n onChange={() =>\n onOptionsChange({\n ...options,\n saveTimerange: !options.saveTimerange,\n })\n }\n label={t(\n 'dashboard.save-dashboard-form.label-current-range-dashboard-default',\n 'Save current time range as dashboard default'\n )}\n aria-label={selectors.pages.SaveDashboardModal.saveTimerange}\n />\n )}\n {hasVariableChanged && (\n <Checkbox\n checked={!!options.saveVariables}\n onChange={() =>\n onOptionsChange({\n ...options,\n saveVariables: !options.saveVariables,\n })\n }\n label={t(\n 'dashboard.save-dashboard-form.label-current-variable-values-dashboard-default',\n 'Save current variable values as dashboard default'\n )}\n aria-label={selectors.pages.SaveDashboardModal.saveVariables}\n />\n )}\n <div className={styles.message}>\n {config.featureToggles.aiGeneratedDashboardChanges && (\n <GenAIDashboardChangesButton\n dashboard={dashboard}\n onGenerate={(text) => {\n onOptionsChange({\n ...options,\n message: text,\n });\n setMessage(text);\n }}\n disabled={!saveModel.hasChanges}\n />\n )}\n <TextArea\n value={message}\n onChange={(e) => {\n onOptionsChange({\n ...options,\n message: e.currentTarget.value,\n });\n setMessage(e.currentTarget.value);\n }}\n placeholder={t(\n 'dashboard.save-dashboard-form.placeholder-describe-changes',\n 'Add a note to describe your changes.'\n )}\n autoFocus\n rows={5}\n />\n </div>\n\n <Stack alignItems=\"center\">\n <Button variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"dashboard.save-dashboard-form.cancel\">Cancel</Trans>\n </Button>\n <Button\n type=\"submit\"\n disabled={!saveModel.hasChanges || isLoading}\n icon={saving ? 'spinner' : undefined}\n aria-label={selectors.pages.SaveDashboardModal.save}\n >\n {isLoading\n ? t('dashboard.save-dashboard-form.saving', 'Saving...')\n : t('dashboard.save-dashboard-form.save', 'Save')}\n </Button>\n {!saveModel.hasChanges && (\n <div>\n <Trans i18nKey=\"dashboard.save-dashboard-form.no-changes-to-save\">No changes to save</Trans>\n </div>\n )}\n </Stack>\n </Stack>\n </form>\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n message: css({\n display: 'flex',\n alignItems: 'end',\n flexDirection: 'column',\n width: '100%',\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport { saveAs } from 'file-saver';\nimport { useCallback, useState } from 'react';\n\nimport { Trans } from '@grafana/i18n';\nimport { Button, ClipboardButton, TextArea, Stack, TextLink } from '@grafana/ui';\n\nimport { SaveDashboardFormProps } from '../types';\n\nexport const SaveProvisionedDashboardForm = ({ dashboard, onCancel }: Omit<SaveDashboardFormProps, 'isLoading'>) => {\n const [dashboardJSON, setDashboardJson] = useState(() => {\n const clone = dashboard.getSaveModelClone();\n delete clone.id;\n return JSON.stringify(clone, null, 2);\n });\n\n const saveToFile = useCallback(() => {\n const blob = new Blob([dashboardJSON], {\n type: 'application/json;charset=utf-8',\n });\n saveAs(blob, dashboard.title + '-' + new Date().getTime() + '.json');\n }, [dashboard.title, dashboardJSON]);\n\n return (\n <>\n <Stack direction=\"column\" gap={2}>\n <div>\n <Trans i18nKey=\"dashboard.save-provisioned-dashboard-form.cannot-be-saved\">\n This dashboard cannot be saved from the Grafana UI because it has been provisioned from another source. Copy\n the JSON or save it to a file below, then you can update your dashboard in the provisioning source.\n </Trans>\n <br />\n <i>\n <Trans i18nKey=\"dashboard.save-provisioned-dashboard-form.see-docs\">\n See{' '}\n <TextLink href=\"https://grafana.com/docs/grafana/latest/administration/provisioning/#dashboards\" external>\n documentation\n </TextLink>{' '}\n for more information about provisioning.\n </Trans>\n </i>\n <br /> <br />\n <Trans\n i18nKey=\"dashboard.save-provisioned-dashboard-form.file-path\"\n values={{ filePath: dashboard.meta.provisionedExternalId }}\n >\n <strong>File path:</strong> {'{{filePath}}'}\n </Trans>\n </div>\n <TextArea\n spellCheck={false}\n value={dashboardJSON}\n onChange={(e) => {\n setDashboardJson(e.currentTarget.value);\n }}\n className={styles.json}\n />\n <Stack>\n <Button variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"dashboard.save-provisioned-dashboard-form.cancel\">Cancel</Trans>\n </Button>\n <ClipboardButton icon=\"copy\" getText={() => dashboardJSON}>\n <Trans i18nKey=\"dashboard.save-provisioned-dashboard-form.copy-json-to-clipboard\">\n Copy JSON to clipboard\n </Trans>\n </ClipboardButton>\n <Button type=\"submit\" onClick={saveToFile}>\n <Trans i18nKey=\"dashboard.save-provisioned-dashboard-form.save-json-to-file\">Save JSON to file</Trans>\n </Button>\n </Stack>\n </Stack>\n </>\n );\n};\n\nconst styles = {\n json: css({\n height: '400px',\n width: '100%',\n overflow: 'auto',\n resize: 'none',\n fontFamily: 'monospace',\n }),\n};\n","import { useMemo, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { config, isFetchError } from '@grafana/runtime';\nimport { Drawer, Tab, TabsBar } from '@grafana/ui';\nimport { jsonDiff } from 'app/features/dashboard-scene/settings/version-history/utils';\n\nimport DashboardValidation from './DashboardValidation';\nimport { SaveDashboardDiff } from './SaveDashboardDiff';\nimport { proxyHandlesError, SaveDashboardErrorProxy } from './SaveDashboardErrorProxy';\nimport { SaveDashboardAsForm } from './forms/SaveDashboardAsForm';\nimport { SaveDashboardForm } from './forms/SaveDashboardForm';\nimport { SaveProvisionedDashboardForm } from './forms/SaveProvisionedDashboardForm';\nimport { SaveDashboardData, SaveDashboardModalProps, SaveDashboardOptions } from './types';\nimport { useDashboardSave } from './useDashboardSave';\n\nexport const SaveDashboardDrawer = ({ dashboard, onDismiss, onSaveSuccess, isCopy }: SaveDashboardModalProps) => {\n const [options, setOptions] = useState<SaveDashboardOptions>({});\n const previous = dashboard.getOriginalDashboard();\n const isProvisioned = dashboard.meta.provisioned;\n const isNew = dashboard.version === 0;\n const hasUnsavedFolderChange = Boolean(dashboard.meta.hasUnsavedFolderChange);\n const [errorIsHandled, setErrorIsHandled] = useState(false);\n\n const data = useMemo<SaveDashboardData>(() => {\n const clone = dashboard.getSaveModelClone({\n saveTimerange: Boolean(options.saveTimerange),\n saveVariables: Boolean(options.saveVariables),\n });\n\n if (!previous) {\n return { clone, diff: {}, diffCount: 0, hasChanges: false };\n }\n\n const diff = jsonDiff(previous, clone);\n let diffCount = 0;\n for (const d of Object.values(diff)) {\n diffCount += d.length;\n }\n\n return {\n clone,\n diff,\n diffCount,\n hasChanges: (diffCount > 0 || hasUnsavedFolderChange) && !isNew,\n };\n }, [dashboard, previous, options, isNew, hasUnsavedFolderChange]);\n\n const [showDiff, setShowDiff] = useState(false);\n const { state, onDashboardSave } = useDashboardSave(isCopy);\n const onSuccess = onSaveSuccess\n ? () => {\n onDismiss();\n onSaveSuccess();\n }\n : onDismiss;\n\n const renderSaveBody = () => {\n if (showDiff) {\n return <SaveDashboardDiff diff={data.diff} oldValue={previous} newValue={data.clone} />;\n }\n\n if (isNew || isCopy) {\n return (\n <SaveDashboardAsForm\n dashboard={dashboard}\n isLoading={state.loading}\n onCancel={onDismiss}\n onSuccess={onSuccess}\n onSubmit={onDashboardSave}\n isNew={isNew}\n />\n );\n }\n\n if (isProvisioned) {\n return <SaveProvisionedDashboardForm dashboard={dashboard} onCancel={onDismiss} onSuccess={onSuccess} />;\n }\n\n return (\n <SaveDashboardForm\n dashboard={dashboard}\n isLoading={state.loading}\n saveModel={data}\n onCancel={onDismiss}\n onSuccess={onSuccess}\n onSubmit={onDashboardSave}\n options={options}\n onOptionsChange={setOptions}\n />\n );\n };\n\n if (state.error && !errorIsHandled && isFetchError(state.error) && proxyHandlesError(state.error.data.status)) {\n return (\n <SaveDashboardErrorProxy\n error={state.error}\n dashboard={dashboard}\n dashboardSaveModel={data.clone}\n onDismiss={onDismiss}\n setErrorIsHandled={setErrorIsHandled}\n />\n );\n }\n\n let title = t('dashboard.save-dashboard-drawer.title', 'Save dashboard');\n if (isCopy) {\n title = t('dashboard.save-dashboard-drawer.title-copy', 'Save dashboard copy');\n } else if (isProvisioned) {\n title = t('dashboard.save-dashboard-drawer.title-provisioned', 'Provisioned dashboard');\n }\n\n return (\n <Drawer\n title={title}\n onClose={onDismiss}\n subtitle={dashboard.title}\n tabs={\n <TabsBar>\n <Tab\n label={t('dashboard.save-dashboard-drawer.label-details', 'Details')}\n active={!showDiff}\n onChangeTab={() => setShowDiff(false)}\n />\n {data.hasChanges && (\n <Tab\n label={t('dashboard.save-dashboard-drawer.label-changes', 'Changes')}\n active={showDiff}\n onChangeTab={() => setShowDiff(true)}\n counter={data.diffCount}\n />\n )}\n </TabsBar>\n }\n >\n {renderSaveBody()}\n\n {config.featureToggles.showDashboardValidationWarnings && <DashboardValidation dashboard={dashboard} />}\n </Drawer>\n );\n};\n","import { SceneComponentProps, SceneObjectBase, SceneObjectRef, SceneObjectState, VizPanel } from '@grafana/scenes';\n\nimport { ModalSceneObjectLike } from '../sharing/types';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { UnlinkModal } from './UnlinkModal';\n\ninterface UnlinkLibraryPanelModalState extends SceneObjectState {\n panelRef?: SceneObjectRef<VizPanel>;\n}\n\nexport class UnlinkLibraryPanelModal\n extends SceneObjectBase<UnlinkLibraryPanelModalState>\n implements ModalSceneObjectLike\n{\n static Component = UnlinkLibraryPanelModalRenderer;\n\n public onDismiss = () => {\n const dashboard = getDashboardSceneFor(this);\n dashboard.closeModal();\n };\n\n public onConfirm = () => {\n const dashboard = getDashboardSceneFor(this);\n dashboard.unlinkLibraryPanel(this.state.panelRef!.resolve());\n dashboard.closeModal();\n };\n}\n\nfunction UnlinkLibraryPanelModalRenderer({ model }: SceneComponentProps<UnlinkLibraryPanelModal>) {\n return (\n <UnlinkModal\n isOpen={true}\n onConfirm={() => {\n model.onConfirm();\n model.onDismiss();\n }}\n onDismiss={model.onDismiss}\n />\n );\n}\n","import {\n getTimeZone,\n InterpolateFunction,\n LinkModel,\n locationUtil,\n PanelMenuItem,\n PanelPlugin,\n PluginExtensionLink,\n PluginExtensionPanelContext,\n PluginExtensionPoints,\n PluginExtensionTypes,\n urlUtil,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, locationService } from '@grafana/runtime';\nimport { LocalValueVariable, sceneGraph, VizPanel, VizPanelMenu } from '@grafana/scenes';\nimport { DataQuery, OptionsWithLegend } from '@grafana/schema';\nimport appEvents from 'app/core/app_events';\nimport { createErrorNotification } from 'app/core/copy/appNotification';\nimport { notifyApp } from 'app/core/reducers/appNotification';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { getMessageFromError } from 'app/core/utils/errors';\nimport { getCreateAlertInMenuAvailability } from 'app/features/alerting/unified/utils/access-control';\nimport { scenesPanelToRuleFormValues } from 'app/features/alerting/unified/utils/rule-form';\nimport { getTrackingSource, shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';\nimport { InspectTab } from 'app/features/inspector/types';\nimport { getScenePanelLinksSupplier } from 'app/features/panel/panellinks/linkSuppliers';\nimport { createPluginExtensionsGetter } from 'app/features/plugins/extensions/getPluginExtensions';\nimport { pluginExtensionRegistries } from 'app/features/plugins/extensions/registry/setup';\nimport { GetPluginExtensions } from 'app/features/plugins/extensions/types';\nimport { createExtensionSubMenu } from 'app/features/plugins/extensions/utils';\nimport { dispatch } from 'app/store/store';\nimport { AccessControlAction } from 'app/types/accessControl';\nimport { ShowConfirmModalEvent } from 'app/types/events';\n\nimport { PanelInspectDrawer } from '../inspect/PanelInspectDrawer';\nimport { ShareDrawer } from '../sharing/ShareDrawer/ShareDrawer';\nimport { isRepeatCloneOrChildOf } from '../utils/clone';\nimport { DashboardInteractions } from '../utils/interactions';\nimport { getEditPanelUrl, tryGetExploreUrlForPanel } from '../utils/urlBuilders';\nimport { getDashboardSceneFor, getPanelIdForVizPanel, getQueryRunnerFor, isLibraryPanel } from '../utils/utils';\n\nimport { DashboardScene } from './DashboardScene';\nimport { VizPanelLinks, VizPanelLinksMenu } from './PanelLinks';\nimport { UnlinkLibraryPanelModal } from './UnlinkLibraryPanelModal';\nimport { PanelTimeRangeDrawer } from './panel-timerange/PanelTimeRangeDrawer';\n\nlet getPluginExtensions: GetPluginExtensions;\n\nfunction setupGetPluginExtensions() {\n if (getPluginExtensions) {\n return getPluginExtensions;\n }\n\n getPluginExtensions = createPluginExtensionsGetter(pluginExtensionRegistries);\n\n return getPluginExtensions;\n}\n\n// Define the category for metrics drilldown links\nconst METRICS_DRILLDOWN_CATEGORY = 'metrics-drilldown';\n\n/**\n * Behavior is called when VizPanelMenu is activated (ie when it's opened).\n */\nexport function panelMenuBehavior(menu: VizPanelMenu) {\n const asyncFunc = async () => {\n // hm.. add another generic param to SceneObject to specify parent type?\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const panel = menu.parent as VizPanel;\n const plugin = panel.getPlugin();\n\n const items: PanelMenuItem[] = [];\n const moreSubMenu: PanelMenuItem[] = [];\n const dashboard = getDashboardSceneFor(panel);\n const { isEmbedded } = dashboard.state.meta;\n const exploreMenuItem = await getExploreMenuItem(panel);\n const isReadOnlyRepeat = isRepeatCloneOrChildOf(panel);\n\n // For embedded dashboards we only have explore action for now\n if (isEmbedded) {\n if (exploreMenuItem) {\n menu.setState({ items: [exploreMenuItem] });\n }\n return;\n }\n\n const isEditingPanel = Boolean(dashboard.state.editPanel);\n if (!isEditingPanel) {\n items.push({\n text: t('panel.header-menu.view', `View`),\n iconClassName: 'eye',\n shortcut: 'v',\n href: locationUtil.getUrlForPartial(locationService.getLocation(), {\n viewPanel: panel.getPathId(),\n editPanel: undefined,\n }),\n });\n }\n\n if (dashboard.canEditDashboard() && dashboard.state.editable && !isReadOnlyRepeat && !isEditingPanel) {\n // We could check isEditing here but I kind of think this should always be in the menu,\n // and going into panel edit should make the dashboard go into edit mode is it's not already\n items.push({\n text: t('panel.header-menu.edit', `Edit`),\n iconClassName: 'edit',\n shortcut: 'e',\n href: getEditPanelUrl(getPanelIdForVizPanel(panel)),\n });\n }\n\n const subMenu: PanelMenuItem[] = [];\n subMenu.push({\n text: t('share-panel.menu.share-link-title', 'Share link'),\n iconClassName: 'link',\n shortcut: 'p u',\n onClick: () => {\n DashboardInteractions.sharingCategoryClicked({\n item: shareDashboardType.link,\n shareResource: getTrackingSource(panel?.getRef()),\n });\n\n const drawer = new ShareDrawer({\n shareView: shareDashboardType.link,\n panelRef: panel.getRef(),\n });\n\n dashboard.showModal(drawer);\n },\n });\n subMenu.push({\n text: t('share-panel.menu.share-embed-title', 'Share embed'),\n iconClassName: 'arrow',\n shortcut: 'p e',\n onClick: () => {\n DashboardInteractions.sharingCategoryClicked({\n item: shareDashboardType.embed,\n shareResource: getTrackingSource(panel.getRef()),\n });\n\n const drawer = new ShareDrawer({\n shareView: shareDashboardType.embed,\n panelRef: panel.getRef(),\n });\n\n dashboard.showModal(drawer);\n },\n });\n\n if (\n contextSrv.isSignedIn &&\n config.snapshotEnabled &&\n contextSrv.hasPermission(AccessControlAction.SnapshotsCreate)\n ) {\n subMenu.push({\n text: t('share-panel.menu.share-snapshot-title', 'Share snapshot'),\n iconClassName: 'camera',\n shortcut: 'p s',\n onClick: () => {\n DashboardInteractions.sharingCategoryClicked({\n item: shareDashboardType.snapshot,\n shareResource: getTrackingSource(panel.getRef()),\n });\n\n const drawer = new ShareDrawer({\n shareView: shareDashboardType.snapshot,\n panelRef: panel.getRef(),\n });\n\n dashboard.showModal(drawer);\n },\n });\n }\n\n items.push({\n type: 'submenu',\n text: t('panel.header-menu.share', 'Share'),\n iconClassName: 'share-alt',\n subMenu,\n onClick: (e) => {\n e.preventDefault();\n },\n });\n\n if (dashboard.state.isEditing && !isReadOnlyRepeat && !isEditingPanel) {\n moreSubMenu.push({\n text: t('panel.header-menu.duplicate', `Duplicate`),\n iconClassName: 'file-copy-alt',\n onClick: () => {\n dashboard.duplicatePanel(panel);\n },\n shortcut: 'p d',\n });\n }\n\n if (!isEditingPanel) {\n moreSubMenu.push({\n text: t('panel.header-menu.copy', `Copy`),\n iconClassName: 'copy',\n onClick: () => {\n dashboard.copyPanel(panel);\n },\n });\n }\n\n if (dashboard.state.isEditing && !isReadOnlyRepeat && !isEditingPanel) {\n if (isLibraryPanel(panel)) {\n moreSubMenu.push({\n text: t('panel.header-menu.unlink-library-panel', `Unlink library panel`),\n iconClassName: 'link-broken',\n onClick: () => {\n dashboard.showModal(\n new UnlinkLibraryPanelModal({\n panelRef: panel.getRef(),\n })\n );\n },\n });\n\n moreSubMenu.push({\n text: t('panel.header-menu.replace-library-panel', `Replace library panel`),\n iconClassName: 'library-panel',\n onClick: () => {\n dashboard.onShowAddLibraryPanelDrawer(panel.getRef());\n },\n });\n } else {\n moreSubMenu.push({\n text: t('share-panel.menu.new-library-panel-title', 'New library panel'),\n iconClassName: 'plus-square',\n onClick: () => {\n const drawer = new ShareDrawer({\n shareView: shareDashboardType.libraryPanel,\n panelRef: panel.getRef(),\n });\n\n dashboard.showModal(drawer);\n },\n });\n }\n }\n\n const isCreateAlertMenuOptionAvailable = getCreateAlertInMenuAvailability();\n\n if (isCreateAlertMenuOptionAvailable) {\n moreSubMenu.push({\n text: t('panel.header-menu.new-alert-rule', `New alert rule`),\n iconClassName: 'bell',\n onClick: (e) => onCreateAlert(panel),\n });\n }\n\n if (hasLegendOptions(panel.state.options) && !isEditingPanel) {\n moreSubMenu.push({\n text: panel.state.options.legend.showLegend\n ? t('panel.header-menu.hide-legend', 'Hide legend')\n : t('panel.header-menu.show-legend', 'Show legend'),\n iconClassName: panel.state.options.legend.showLegend ? 'legend-hide' : 'legend-show',\n onClick: (e) => {\n e.preventDefault();\n toggleVizPanelLegend(panel);\n },\n shortcut: 'p l',\n });\n }\n\n if (dashboard.canEditDashboard() && plugin && !plugin.meta.skipDataQuery && !isReadOnlyRepeat) {\n moreSubMenu.push({\n text: t('panel.header-menu.get-help', 'Get help'),\n iconClassName: 'question-circle',\n onClick: (e: React.MouseEvent) => {\n e.preventDefault();\n dashboard.showModal(new PanelInspectDrawer({ panelRef: panel.getRef(), currentTab: InspectTab.Help }));\n },\n });\n }\n\n if (exploreMenuItem) {\n items.push(exploreMenuItem);\n }\n\n items.push(getInspectMenuItem(plugin, panel, dashboard));\n\n if (config.featureToggles.panelTimeSettings) {\n items.push({\n text: t('panel.header-menu.time-settings', 'Time settings'),\n iconClassName: 'clock-nine',\n onClick: (e) => {\n e.preventDefault();\n dashboard.showModal(new PanelTimeRangeDrawer({ panelRef: panel.getRef() }));\n },\n });\n }\n\n setupGetPluginExtensions();\n\n const { extensions } = getPluginExtensions({\n extensionPointId: PluginExtensionPoints.DashboardPanelMenu,\n context: createExtensionContext(panel, dashboard),\n limitPerPlugin: 3,\n });\n\n if (extensions.length > 0 && !dashboard.state.isEditing) {\n const linkExtensions = extensions.filter((extension) => extension.type === PluginExtensionTypes.link);\n\n // Separate metrics drilldown links from other links\n const [metricsDrilldownLinks, otherLinks] = linkExtensions.reduce<[PluginExtensionLink[], PluginExtensionLink[]]>(\n ([metricsDrilldownLinks, otherLinks], link) => {\n if (link.category === METRICS_DRILLDOWN_CATEGORY) {\n metricsDrilldownLinks.push(link);\n } else {\n otherLinks.push(link);\n }\n return [metricsDrilldownLinks, otherLinks];\n },\n [[], []]\n );\n\n // Add specific \"Metrics drilldown\" menu\n if (metricsDrilldownLinks.length > 0) {\n items.push({\n text: t('dashboard-scene.panel-menu-behavior.async-func.text.metrics-drilldown', 'Metrics drilldown'),\n iconClassName: 'code-branch',\n type: 'submenu',\n subMenu: createExtensionSubMenu(metricsDrilldownLinks),\n });\n }\n\n // Add generic \"Extensions\" menu for other links\n if (otherLinks.length > 0) {\n items.push({\n text: t('dashboard-scene.panel-menu-behavior.async-func.text.extensions', 'Extensions'),\n iconClassName: 'plug',\n type: 'submenu',\n subMenu: createExtensionSubMenu(otherLinks),\n });\n }\n }\n\n if (moreSubMenu.length) {\n items.push({\n type: 'submenu',\n text: t('panel.header-menu.more', `More...`),\n iconClassName: 'cube',\n subMenu: moreSubMenu,\n onClick: (e) => {\n e.preventDefault();\n },\n });\n }\n\n if (dashboard.state.isEditing && !isReadOnlyRepeat && !isEditingPanel) {\n items.push({\n text: '',\n type: 'divider',\n });\n\n items.push({\n text: t('panel.header-menu.remove', `Remove`),\n iconClassName: 'trash-alt',\n onClick: () => {\n onRemovePanel(dashboard, panel);\n },\n shortcut: 'p r',\n });\n }\n\n menu.setState({ items });\n };\n\n asyncFunc();\n}\n\nasync function getExploreMenuItem(panel: VizPanel): Promise<PanelMenuItem | undefined> {\n const exploreUrl = await tryGetExploreUrlForPanel(panel);\n if (!exploreUrl) {\n return undefined;\n }\n\n return {\n text: t('panel.header-menu.explore', `Explore`),\n iconClassName: 'compass',\n shortcut: 'p x',\n href: exploreUrl,\n };\n}\n\nfunction getInspectMenuItem(\n plugin: PanelPlugin | undefined,\n panel: VizPanel,\n dashboard: DashboardScene\n): PanelMenuItem {\n const inspectSubMenu: PanelMenuItem[] = [];\n\n if (plugin && !plugin.meta.skipDataQuery) {\n inspectSubMenu.push({\n text: t('panel.header-menu.inspect-data', `Data`),\n onClick: (e) => {\n e.preventDefault();\n dashboard.showModal(new PanelInspectDrawer({ panelRef: panel.getRef(), currentTab: InspectTab.Data }));\n },\n });\n\n if (dashboard instanceof DashboardScene && dashboard.state.meta.canEdit) {\n inspectSubMenu.push({\n text: t('panel.header-menu.query', `Query`),\n onClick: (e) => {\n e.preventDefault();\n dashboard.showModal(new PanelInspectDrawer({ panelRef: panel.getRef(), currentTab: InspectTab.Query }));\n },\n });\n }\n }\n\n inspectSubMenu.push({\n text: t('panel.header-menu.inspect-json', `Panel JSON`),\n onClick: (e) => {\n e.preventDefault();\n dashboard.showModal(new PanelInspectDrawer({ panelRef: panel.getRef(), currentTab: InspectTab.JSON }));\n },\n });\n\n return {\n text: t('panel.header-menu.inspect', `Inspect`),\n iconClassName: 'info-circle',\n shortcut: 'i',\n onClick: (e) => {\n if (!e.isDefaultPrevented()) {\n dashboard.showModal(new PanelInspectDrawer({ panelRef: panel.getRef(), currentTab: InspectTab.Data }));\n }\n },\n subMenu: inspectSubMenu.length > 0 ? inspectSubMenu : undefined,\n };\n}\n\n/**\n * Behavior is called when VizPanelLinksMenu is activated (when it's opened).\n */\nexport function panelLinksBehavior(panelLinksMenu: VizPanelLinksMenu) {\n if (!(panelLinksMenu.parent instanceof VizPanelLinks)) {\n throw new Error('parent of VizPanelLinksMenu must be VizPanelLinks');\n }\n const panel = panelLinksMenu.parent.parent;\n\n if (!(panel instanceof VizPanel)) {\n throw new Error('parent of VizPanelLinks must be VizPanel');\n }\n\n panelLinksMenu.setState({ links: getPanelLinks(panel) });\n}\n\nexport function getPanelLinks(panel: VizPanel) {\n const interpolate: InterpolateFunction = (v, scopedVars) => {\n return sceneGraph.interpolate(panel, v, scopedVars);\n };\n\n const linkSupplier = getScenePanelLinksSupplier(panel, interpolate);\n\n if (!linkSupplier) {\n return [];\n }\n\n const panelLinks = linkSupplier.getLinks(interpolate);\n\n return panelLinks.map((panelLink) => {\n const updatedLink: LinkModel<VizPanel> = {\n ...panelLink,\n onClick: (e, origin) => {\n DashboardInteractions.panelLinkClicked({ has_multiple_links: panelLinks.length > 1 });\n panelLink.onClick?.(e, origin);\n },\n };\n return updatedLink;\n });\n}\n\nfunction createExtensionContext(panel: VizPanel, dashboard: DashboardScene): PluginExtensionPanelContext {\n const timeRange = sceneGraph.getTimeRange(panel);\n let queryRunner = getQueryRunnerFor(panel);\n const targets: DataQuery[] = queryRunner?.state.queries as DataQuery[];\n const id = getPanelIdForVizPanel(panel);\n\n let scopedVars = {};\n\n // Handle panel repeats scenario\n if (panel.state.$variables) {\n panel.state.$variables.state.variables.forEach((variable) => {\n if (variable instanceof LocalValueVariable) {\n scopedVars = {\n ...scopedVars,\n [variable.state.name]: { value: variable.getValue(), text: variable.getValueText() },\n };\n }\n });\n }\n\n return {\n id,\n pluginId: panel.state.pluginId,\n title: panel.state.title,\n timeRange: timeRange.state.value.raw,\n timeZone: getTimeZone({\n timeZone: timeRange.getTimeZone(),\n }),\n dashboard: {\n uid: dashboard.state.uid!,\n title: dashboard.state.title,\n tags: dashboard.state.tags || [],\n },\n targets,\n scopedVars,\n data: queryRunner?.state.data,\n };\n}\n\nexport function onRemovePanel(dashboard: DashboardScene, panel: VizPanel) {\n appEvents.publish(\n new ShowConfirmModalEvent({\n title: t('dashboard-scene.on-remove-panel.title.remove-panel', 'Remove panel'),\n text: t('dashboard-scene.on-remove-panel.text.remove-panel', 'Are you sure you want to remove this panel?'),\n icon: 'trash-alt',\n yesText: 'Remove',\n onConfirm: () => dashboard.removePanel(panel),\n })\n );\n}\n\nconst onCreateAlert = async (panel: VizPanel) => {\n try {\n const formValues = await scenesPanelToRuleFormValues(panel);\n const ruleFormUrl = urlUtil.renderUrl('/alerting/new', {\n defaults: JSON.stringify(formValues),\n returnTo: window.location.pathname + window.location.search,\n });\n locationService.push(ruleFormUrl);\n } catch (err) {\n const message = `Error getting rule values from the panel: ${getMessageFromError(err)}`;\n dispatch(notifyApp(createErrorNotification(message)));\n return;\n }\n};\n\nexport function toggleVizPanelLegend(vizPanel: VizPanel): void {\n const options = vizPanel.state.options;\n if (hasLegendOptions(options) && typeof options.legend.showLegend === 'boolean') {\n vizPanel.onOptionsChange({\n legend: {\n showLegend: options.legend.showLegend ? false : true,\n },\n });\n }\n}\n\nfunction hasLegendOptions(optionsWithLegend: unknown): optionsWithLegend is OptionsWithLegend {\n return optionsWithLegend != null && typeof optionsWithLegend === 'object' && 'legend' in optionsWithLegend;\n}\n","import { NavModel, NavModelItem } from '@grafana/data';\n\nexport function getExceptionNav(error: unknown): NavModel {\n console.error(error);\n return getWarningNav('Exception thrown', 'See console for details');\n}\n\nexport function getNotFoundNav(): NavModel {\n return getWarningNav('Page not found', '404 Error');\n}\n\nexport function getWarningNav(text: string, subTitle?: string): NavModel {\n const node: NavModelItem = {\n text,\n subTitle,\n icon: 'exclamation-triangle',\n };\n return {\n node: node,\n main: node,\n };\n}\n","// Libraries\nimport { AnyAction, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { useCallback, useEffect, useMemo, useReducer } from 'react';\nimport * as React from 'react';\nimport { useLocation, useParams } from 'react-router-dom-v5-compat';\n\nimport {\n AppEvents,\n AppPlugin,\n AppPluginMeta,\n NavModel,\n NavModelItem,\n OrgRole,\n PluginType,\n PluginContextProvider,\n} from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config, locationSearchToObject } from '@grafana/runtime';\nimport { Alert, ErrorWithStack } from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\nimport PageLoader from 'app/core/components/PageLoader/PageLoader';\nimport { EntityNotFound } from 'app/core/components/PageNotFound/EntityNotFound';\nimport { useGrafana } from 'app/core/context/GrafanaContext';\nimport { appEvents, contextSrv } from 'app/core/core';\nimport { getNotFoundNav, getWarningNav, getExceptionNav } from 'app/core/navigation/errorModels';\nimport { getMessageFromError } from 'app/core/utils/errors';\n\nimport {\n ExtensionRegistriesProvider,\n useAddedLinksRegistry,\n useAddedComponentsRegistry,\n useExposedComponentsRegistry,\n useAddedFunctionsRegistry,\n} from '../extensions/ExtensionRegistriesContext';\nimport { pluginImporter } from '../importer/pluginImporter';\nimport { getPluginSettings } from '../pluginSettings';\nimport { buildPluginSectionNav, pluginsLogger } from '../utils';\n\nimport { PluginErrorBoundary } from './PluginErrorBoundary';\nimport { buildPluginPageContext, PluginPageContext } from './PluginPageContext';\nimport { RestrictedGrafanaApisProvider } from './restrictedGrafanaApis/RestrictedGrafanaApisProvider';\n\ninterface Props {\n // The ID of the plugin we would like to load and display\n pluginId?: string;\n // The root navModelItem for the plugin (root = lives directly under 'home'). In case app does not need a nva model,\n // for example it's in some way embedded or shown in a sideview this can be undefined.\n pluginNavSection?: NavModelItem;\n}\n\ninterface State {\n loading: boolean;\n loadingError: boolean;\n plugin?: AppPlugin | null;\n // Used to display a tab navigation (used before the new Top Nav)\n pluginNav: NavModel | null;\n}\n\nconst initialState: State = { loading: true, loadingError: false, pluginNav: null, plugin: null };\n\nexport function AppRootPage({ pluginId, pluginNavSection }: Props) {\n const { pluginId: pluginIdParam = '' } = useParams();\n pluginId = pluginId || pluginIdParam;\n const addedLinksRegistry = useAddedLinksRegistry();\n const addedComponentsRegistry = useAddedComponentsRegistry();\n const exposedComponentsRegistry = useExposedComponentsRegistry();\n const addedFunctionsRegistry = useAddedFunctionsRegistry();\n const location = useLocation();\n const [state, dispatch] = useReducer(stateSlice.reducer, initialState);\n const currentUrl = config.appSubUrl + location.pathname + location.search;\n const { plugin, loading, loadingError, pluginNav } = state;\n const navModel = buildPluginSectionNav(currentUrl, pluginNavSection);\n const queryParams = useMemo(() => locationSearchToObject(location.search), [location.search]);\n const context = useMemo(() => buildPluginPageContext(navModel), [navModel]);\n const grafanaContext = useGrafana();\n\n useEffect(() => {\n loadAppPlugin(pluginId, dispatch);\n }, [pluginId]);\n\n const onNavChanged = useCallback(\n (newPluginNav: NavModel) => dispatch(stateSlice.actions.changeNav(newPluginNav)),\n []\n );\n\n if (!plugin || pluginId !== plugin.meta.id) {\n // Use current layout while loading to reduce flickering\n const currentLayout = grafanaContext.chrome.state.getValue().layout;\n return (\n <Page navModel={navModel} pageNav={{ text: '' }} layout={currentLayout}>\n {loading && <PageLoader />}\n {!loading && loadingError && <EntityNotFound entity=\"App\" />}\n </Page>\n );\n }\n\n if (!plugin.root) {\n return (\n <Page navModel={navModel ?? getWarningNav('Plugin load error')}>\n <div>\n <Trans i18nKey=\"plugins.app-root-page.no-root-app-page-component-found\">\n No root app page component found\n </Trans>\n </div>\n </Page>\n );\n }\n\n const pluginRoot = plugin.root && (\n <PluginContextProvider meta={plugin.meta}>\n <PluginErrorBoundary\n fallback={({ error, errorInfo }) => (\n <ErrorWithStack\n title={t('plugins.app-root-page.error-loading-plugin', 'Plugin failed to load')}\n error={error}\n errorInfo={errorInfo}\n />\n )}\n >\n <RestrictedGrafanaApisProvider pluginId={pluginId}>\n <ExtensionRegistriesProvider\n registries={{\n addedLinksRegistry: addedLinksRegistry.readOnly(),\n addedComponentsRegistry: addedComponentsRegistry.readOnly(),\n exposedComponentsRegistry: exposedComponentsRegistry.readOnly(),\n addedFunctionsRegistry: addedFunctionsRegistry.readOnly(),\n }}\n >\n <plugin.root\n meta={plugin.meta}\n basename={location.pathname}\n onNavChanged={onNavChanged}\n query={queryParams}\n path={location.pathname}\n />\n </ExtensionRegistriesProvider>\n </RestrictedGrafanaApisProvider>\n </PluginErrorBoundary>\n </PluginContextProvider>\n );\n\n // Because of the fallback at plugin routes, we need to check\n // if the user has permissions to see the plugin page.\n const userHasPermissionsToPluginPage = () => {\n // Check if plugin does not have any configurations or the user is Grafana Admin\n if (!plugin.meta?.includes) {\n return true;\n }\n\n const pluginInclude = plugin.meta?.includes.find((include) => include.path === location.pathname);\n // Check if include configuration contains current path\n if (!pluginInclude) {\n return true;\n }\n\n // Check if action exists and give access if user has the required permission.\n if (pluginInclude?.action) {\n return contextSrv.hasPermission(pluginInclude.action);\n }\n\n if (contextSrv.isGrafanaAdmin || contextSrv.user.orgRole === OrgRole.Admin) {\n return true;\n }\n\n const pathRole: string = pluginInclude?.role || '';\n // Check if role exists and give access to Editor to be able to see Viewer pages\n if (!pathRole || (contextSrv.isEditor && pathRole === OrgRole.Viewer)) {\n return true;\n }\n return contextSrv.hasRole(pathRole);\n };\n\n const AccessDenied = () => {\n return (\n <Alert severity=\"warning\" title={t('plugins.app-root-page.access-denied.title-access-denied', 'Access denied')}>\n <Trans i18nKey=\"plugins.app-root-page.access-denied.permission\">\n You do not have permission to see this page.\n </Trans>\n </Alert>\n );\n };\n\n if (!userHasPermissionsToPluginPage()) {\n return <AccessDenied />;\n }\n\n if (!pluginNav) {\n return <PluginPageContext.Provider value={context}>{pluginRoot}</PluginPageContext.Provider>;\n }\n\n return (\n <>\n {navModel ? (\n <Page navModel={navModel} pageNav={pluginNav?.node}>\n <Page.Contents isLoading={loading}>{pluginRoot}</Page.Contents>\n </Page>\n ) : (\n <Page>{pluginRoot}</Page>\n )}\n </>\n );\n}\n\nconst stateSlice = createSlice({\n name: 'prom-builder-container',\n initialState: initialState,\n reducers: {\n setState: (state, action: PayloadAction<Partial<State>>) => {\n Object.assign(state, action.payload);\n },\n changeNav: (state, action: PayloadAction<NavModel>) => {\n let pluginNav = action.payload;\n // This is to hide the double breadcrumbs the old nav model can cause\n if (pluginNav && pluginNav.node.children) {\n pluginNav = {\n ...pluginNav,\n node: {\n ...pluginNav.main,\n hideFromBreadcrumbs: true,\n },\n };\n }\n state.pluginNav = pluginNav;\n },\n },\n});\n\nasync function loadAppPlugin(pluginId: string, dispatch: React.Dispatch<AnyAction>) {\n try {\n const app = await getPluginSettings(pluginId).then((info) => {\n const error = getAppPluginPageError(info);\n if (error) {\n appEvents.emit(AppEvents.alertError, [error]);\n dispatch(stateSlice.actions.setState({ pluginNav: getWarningNav(error) }));\n return null;\n }\n return pluginImporter.importApp(info);\n });\n dispatch(stateSlice.actions.setState({ plugin: app, loading: false, loadingError: false, pluginNav: null }));\n } catch (err) {\n dispatch(\n stateSlice.actions.setState({\n plugin: null,\n loading: false,\n loadingError: true,\n pluginNav: process.env.NODE_ENV === 'development' ? getExceptionNav(err) : getNotFoundNav(),\n })\n );\n const error = err instanceof Error ? err : new Error(getMessageFromError(err));\n pluginsLogger.logError(error);\n console.error(error);\n }\n}\n\nexport function getAppPluginPageError(meta: AppPluginMeta) {\n if (!meta) {\n return 'Unknown Plugin';\n }\n if (meta.type !== PluginType.app) {\n return 'Plugin must be an app';\n }\n if (!meta.enabled) {\n return 'Application Not Enabled';\n }\n return null;\n}\n\nexport default AppRootPage;\n","import { NavModelItem } from '@grafana/data';\nimport { RouteDescriptor } from 'app/core/navigation/types';\nimport { getRootSectionForNode } from 'app/core/selectors/navModel';\nimport AppRootPage from 'app/features/plugins/components/AppRootPage';\nimport { getState } from 'app/store/store';\n\nconst isPluginNavModelItem = (model: NavModelItem): model is PluginNavModelItem => 'pluginId' in model && 'id' in model;\nconst isStandalonePluginPage = (id: string) => id.startsWith('standalone-plugin-page-/');\n\nfunction getPathForNavItem(navItem: PluginNavModelItem) {\n const pluginNavSection = getRootSectionForNode(navItem);\n const appPluginUrl = `/a/${navItem.pluginId}`;\n const path = isStandalonePluginPage(navItem.id) ? navItem.url || appPluginUrl : appPluginUrl; // Only standalone pages can use core URLs, otherwise we fall back to \"/a/:pluginId\"\n const isSensitive = isStandalonePluginPage(navItem.id) && !navItem.url?.startsWith('/a/'); // Have case-sensitive URLs only for standalone pages that have custom URLs\n\n return {\n path: `${path}/*`,\n sensitive: isSensitive,\n component: () => <AppRootPage pluginId={navItem.pluginId} pluginNavSection={pluginNavSection} />,\n };\n}\n\nexport function getAppPluginRoutes(): RouteDescriptor[] {\n const state = getState();\n const { navIndex } = state;\n const explicitAppPluginRoutes = Object.values(navIndex)\n .filter<PluginNavModelItem>(isPluginNavModelItem)\n .map(getPathForNavItem);\n\n return [\n ...explicitAppPluginRoutes,\n\n // Fallback route for plugins that don't have any pages under includes\n {\n path: '/a/:pluginId/*',\n component: () => <AppRootPage pluginNavSection={navIndex.home} />,\n },\n ];\n}\n\nexport function getRouteForAppPlugin(pluginId: string): RouteDescriptor {\n const state = getState();\n const { navIndex } = state;\n const navItem = Object.values(navIndex)\n .filter<PluginNavModelItem>(isPluginNavModelItem)\n .find((navItem) => navItem.pluginId === pluginId);\n\n if (!navItem) {\n return {\n path: '/a/:pluginId/*',\n component: () => <AppRootPage pluginNavSection={navIndex.home} />,\n };\n }\n\n return getPathForNavItem(navItem);\n}\n\ninterface PluginNavModelItem extends Omit<NavModelItem, 'pluginId' | 'id'> {\n pluginId: string;\n id: string;\n}\n","import config from 'app/core/config';\n\nexport function getThemeColor(dark: string, light: string): string {\n return config.bootData?.user?.lightTheme ? light : dark;\n}\n","import ansicolor from 'ansicolor';\nimport { groupBy, size } from 'lodash';\nimport { from, isObservable, Observable } from 'rxjs';\n\nimport {\n AbsoluteTimeRange,\n createDataFrame,\n DataFrame,\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceApi,\n DataSourceJsonData,\n DataTopic,\n dateTimeFormat,\n dateTimeFormatTimeAgo,\n DateTimeInput,\n Field,\n FieldCache,\n FieldColorModeId,\n FieldType,\n findCommonLabels,\n findUniqueLabels,\n getTimeField,\n Labels,\n LoadingState,\n LogLevel,\n LogRowModel,\n LogsDedupStrategy,\n LogsMetaItem,\n LogsMetaKind,\n LogsModel,\n LogsVolumeCustomMetaData,\n LogsVolumeType,\n rangeUtil,\n ScopedVars,\n sortDataFrame,\n textUtil,\n toDataFrame,\n toUtc,\n} from '@grafana/data';\nimport { SIPrefix } from '@grafana/data/internal';\nimport { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { BarAlignment, GraphDrawStyle, StackingMode } from '@grafana/schema';\nimport { colors } from '@grafana/ui';\nimport { getThemeColor } from 'app/core/utils/colors';\nimport { LokiQueryDirection } from 'app/plugins/datasource/loki/types';\n\nimport { LogsFrame, parseLogsFrame } from './logsFrame';\nimport { createLogRowsMap, getLogLevel, getLogLevelFromKey, sortInAscendingOrder } from './utils';\n\nexport const LIMIT_LABEL = 'Line limit';\nexport const COMMON_LABELS = 'Common labels';\nexport const TOTAL_LABEL = 'Total lines';\n\nexport const LogLevelColor = {\n [LogLevel.critical]: colors[7],\n [LogLevel.error]: colors[4],\n [LogLevel.warning]: colors[1],\n [LogLevel.info]: colors[0],\n [LogLevel.debug]: colors[5],\n [LogLevel.trace]: colors[2],\n [LogLevel.unknown]: getThemeColor('#8e8e8e', '#bdc4cd'),\n};\n\nconst MILLISECOND = 1;\nconst SECOND = 1000 * MILLISECOND;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\nconst isoDateRegexp = /\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-6]\\d[,\\.]\\d+([+-][0-2]\\d:[0-5]\\d|Z)/g;\nfunction isDuplicateRow(row: LogRowModel, other: LogRowModel, strategy?: LogsDedupStrategy): boolean {\n switch (strategy) {\n case LogsDedupStrategy.exact:\n // Exact still strips dates\n return row.entry.replace(isoDateRegexp, '') === other.entry.replace(isoDateRegexp, '');\n\n case LogsDedupStrategy.numbers:\n return row.entry.replace(/\\d/g, '') === other.entry.replace(/\\d/g, '');\n\n case LogsDedupStrategy.signature:\n return row.entry.replace(/\\w/g, '') === other.entry.replace(/\\w/g, '');\n\n default:\n return false;\n }\n}\n\nexport function dedupLogRows(rows: LogRowModel[], strategy?: LogsDedupStrategy): LogRowModel[] {\n if (strategy === LogsDedupStrategy.none) {\n return rows;\n }\n\n return rows.reduce((result: LogRowModel[], row: LogRowModel, index) => {\n const previous = result[result.length - 1];\n if (index > 0 && isDuplicateRow(row, previous, strategy)) {\n previous.duplicates!++;\n } else {\n result.push({ ...row, duplicates: 0 });\n }\n return result;\n }, []);\n}\n\ninterface Series {\n lastTs: number | null;\n datapoints: Array<[number, number]>;\n target: LogLevel;\n color: string;\n}\n\nexport function makeDataFramesForLogs(sortedRows: LogRowModel[], bucketSize: number): DataFrame[] {\n // currently interval is rangeMs / resolution, which is too low for showing series as bars.\n // Should be solved higher up the chain when executing queries & interval calculated and not here but this is a temporary fix.\n\n // Graph time series by log level\n const seriesByLevel: Record<string, Series> = {};\n const seriesList: Series[] = [];\n\n for (const row of sortedRows) {\n let series = seriesByLevel[row.logLevel];\n\n if (!series) {\n seriesByLevel[row.logLevel] = series = {\n lastTs: null,\n datapoints: [],\n target: row.logLevel,\n color: LogLevelColor[row.logLevel],\n };\n\n seriesList.push(series);\n }\n\n // align time to bucket size - used Math.floor for calculation as time of the bucket\n // must be in the past (before Date.now()) to be displayed on the graph\n const time = Math.floor(row.timeEpochMs / bucketSize) * bucketSize;\n\n // Entry for time\n if (time === series.lastTs) {\n series.datapoints[series.datapoints.length - 1][0]++;\n } else {\n series.datapoints.push([1, time]);\n series.lastTs = time;\n }\n\n // add zero to other levels to aid stacking so each level series has same number of points\n for (const other of seriesList) {\n if (other !== series && other.lastTs !== time) {\n other.datapoints.push([0, time]);\n other.lastTs = time;\n }\n }\n }\n\n return seriesList.map((series, i) => {\n series.datapoints.sort((a: number[], b: number[]) => a[1] - b[1]);\n\n const data = toDataFrame(series);\n const fieldCache = new FieldCache(data);\n\n const valueField = fieldCache.getFirstFieldOfType(FieldType.number)!;\n\n data.fields[valueField.index].config.min = 0;\n data.fields[valueField.index].config.decimals = 0;\n data.fields[valueField.index].config.color = {\n mode: FieldColorModeId.Fixed,\n fixedColor: series.color,\n };\n\n data.fields[valueField.index].config.custom = {\n drawStyle: GraphDrawStyle.Bars,\n barAlignment: BarAlignment.Center,\n barWidthFactor: 0.9,\n barMaxWidth: 5,\n lineColor: series.color,\n pointColor: series.color,\n fillColor: series.color,\n lineWidth: 0,\n fillOpacity: 100,\n stacking: {\n mode: StackingMode.Normal,\n group: 'A',\n },\n };\n\n return data;\n });\n}\n\nfunction isLogsData(series: DataFrame) {\n return series.fields.some((f) => f.type === FieldType.time) && series.fields.some((f) => f.type === FieldType.string);\n}\n\n/**\n * Convert dataFrame into LogsModel which consists of creating separate array of log rows and metrics series. Metrics\n * series can be either already included in the dataFrame or will be computed from the log rows.\n * @param dataFrame\n * @param intervalMs Optional. In case there are no metrics series, we use this for computing it from log rows.\n * @param absoluteRange Optional. Used to store absolute range of executed queries in logs model. This is used for pagination.\n * @param queries Optional. Used to store executed queries in logs model. This is used for pagination.\n */\nexport function dataFrameToLogsModel(\n dataFrame: DataFrame[],\n intervalMs?: number,\n absoluteRange?: AbsoluteTimeRange,\n queries?: DataQuery[],\n deduplicateResults?: boolean\n): LogsModel {\n const { logSeries } = separateLogsAndMetrics(dataFrame);\n // Until nanosecond precision for requests is supported, we need to account for possible duplicate rows.\n const logsModel = logSeriesToLogsModel(logSeries, queries, Boolean(deduplicateResults));\n\n if (logsModel) {\n logsModel.queries = queries;\n // Create histogram metrics from logs using the interval as bucket size for the line count\n if (intervalMs && logsModel.rows.length > 0) {\n const sortedRows = logsModel.rows.sort(sortInAscendingOrder);\n const { visibleRange, bucketSize, visibleRangeMs, requestedRangeMs } = getSeriesProperties(\n sortedRows,\n intervalMs,\n absoluteRange\n );\n logsModel.visibleRange = visibleRange;\n logsModel.bucketSize = bucketSize;\n logsModel.series = makeDataFramesForLogs(sortedRows, bucketSize);\n\n if (logsModel.meta) {\n logsModel.meta = adjustMetaInfo(logsModel, visibleRangeMs, requestedRangeMs);\n }\n } else {\n logsModel.series = [];\n }\n return logsModel;\n }\n\n return {\n hasUniqueLabels: false,\n rows: [],\n meta: [],\n series: [],\n queries,\n };\n}\n\n/**\n * Returns a clamped time range and interval based on the visible logs and the given range.\n *\n * @param sortedRows Log rows from the query response\n * @param intervalMs Dynamic data interval based on available pixel width\n * @param absoluteRange Requested time range\n * @param pxPerBar Default: 20, buckets will be rendered as bars, assuming 10px per histogram bar plus some free space around it\n * @param minimumBucketSize\n */\nexport function getSeriesProperties(\n sortedRows: LogRowModel[],\n intervalMs: number,\n absoluteRange?: AbsoluteTimeRange,\n pxPerBar = 20,\n minimumBucketSize = 1000\n) {\n let visibleRange = absoluteRange;\n let resolutionIntervalMs = intervalMs;\n let bucketSize = Math.max(resolutionIntervalMs * pxPerBar, minimumBucketSize);\n let visibleRangeMs;\n let requestedRangeMs;\n // Clamp time range to visible logs otherwise big parts of the graph might look empty\n if (absoluteRange) {\n const firstTimeStamp = sortedRows[0].timeEpochMs;\n const lastTimeStamp = sortedRows[sortedRows.length - 1].timeEpochMs;\n const earliestTsLogs = firstTimeStamp < lastTimeStamp ? firstTimeStamp : lastTimeStamp;\n const earliestLogToTimeRangeEnd = absoluteRange.to - earliestTsLogs;\n\n requestedRangeMs = absoluteRange.to - absoluteRange.from;\n visibleRangeMs = Math.abs(firstTimeStamp - lastTimeStamp);\n\n if (visibleRangeMs > 0) {\n // Adjust interval bucket size for potentially shorter visible range\n const clampingFactor = earliestLogToTimeRangeEnd / requestedRangeMs;\n resolutionIntervalMs *= clampingFactor;\n // Minimum bucketsize of 1s for nicer graphing\n bucketSize = Math.max(Math.ceil(resolutionIntervalMs * pxPerBar), minimumBucketSize);\n // makeSeriesForLogs() aligns data points with time buckets, so we do the same here to not cut off data\n const adjustedEarliest = Math.floor(earliestTsLogs / bucketSize) * bucketSize;\n visibleRange = { from: adjustedEarliest, to: absoluteRange.to };\n } else {\n // We use visibleRangeMs to calculate range coverage of received logs. However, some data sources are rounding up range in requests. This means that received logs\n // can (in edge cases) be outside of the requested range and visibleRangeMs < 0. In that case, we want to change visibleRangeMs to be 1 so we can calculate coverage.\n visibleRangeMs = 1;\n }\n }\n return { bucketSize, visibleRange, visibleRangeMs, requestedRangeMs };\n}\n\nfunction separateLogsAndMetrics(dataFrames: DataFrame[]) {\n const metricSeries: DataFrame[] = [];\n const logSeries: DataFrame[] = [];\n\n for (const dataFrame of dataFrames) {\n // We want to show meta stats even if no result was returned. That's why we are pushing also data frames with no fields.\n if (isLogsData(dataFrame) || !dataFrame.fields.length) {\n logSeries.push(dataFrame);\n continue;\n }\n\n if (dataFrame.length > 0) {\n metricSeries.push(dataFrame);\n }\n }\n\n return { logSeries, metricSeries };\n}\n\ninterface LogInfo {\n rawFrame: DataFrame;\n logsFrame: LogsFrame;\n frameLabels?: Labels[];\n}\n\nfunction parseTime(\n timeField: Field,\n timeNsField: Field | undefined,\n index: number\n): { ts: DateTimeInput; timeEpochMs: number; timeEpochNs: string } {\n const ts = timeField.values[index];\n const time = toUtc(ts);\n const timeEpochMs = time.valueOf();\n\n if (timeNsField) {\n return { ts, timeEpochMs, timeEpochNs: timeNsField.values[index] };\n }\n\n if (timeField.nanos !== undefined) {\n const ns = timeField.nanos[index].toString().padStart(6, '0');\n const timeEpochNs = `${timeEpochMs}${ns}`;\n return { ts, timeEpochMs, timeEpochNs };\n }\n\n return {\n ts,\n timeEpochMs,\n timeEpochNs: timeEpochMs + '000000',\n };\n}\n\n/**\n * Converts dataFrames into LogsModel. This involves merging them into one list, sorting them and computing metadata\n * like common labels.\n */\nexport function logSeriesToLogsModel(\n logSeries: DataFrame[],\n queries: DataQuery[] = [],\n filterDuplicateRows = false\n): LogsModel | undefined {\n if (logSeries.length === 0) {\n return undefined;\n }\n const allLabels: Labels[][] = [];\n\n // Find the fields we care about and collect all labels\n let allSeries: LogInfo[] = [];\n\n // We are sometimes passing data frames with no fields because we want to calculate correct meta stats.\n // Therefore we need to filter out series with no fields. These series are used only for meta stats calculation.\n const seriesWithFields = logSeries.filter((series) => series.fields.length);\n\n if (seriesWithFields.length) {\n seriesWithFields.forEach((series) => {\n const logsFrame = parseLogsFrame(series);\n if (logsFrame != null) {\n // for now we ignore the nested-ness of attributes, and just stringify-them\n const frameLabels = logsFrame.getLogFrameLabelsAsLabels() ?? undefined;\n const info = {\n rawFrame: series,\n logsFrame: logsFrame,\n frameLabels,\n };\n\n allSeries.push(info);\n if (frameLabels && frameLabels.length > 0) {\n allLabels.push(frameLabels);\n }\n }\n });\n }\n\n const flatAllLabels = allLabels.flat();\n const commonLabels = flatAllLabels.length > 0 ? findCommonLabels(flatAllLabels) : {};\n\n let rows: LogRowModel[] = [];\n let hasUniqueLabels = false;\n\n const findMatchingRow = createLogRowsMap();\n for (const info of allSeries) {\n const { logsFrame, rawFrame: series, frameLabels } = info;\n const { timeField, timeNanosecondField, bodyField: stringField, severityField: logLevelField, idField } = logsFrame;\n\n for (let j = 0; j < series.length; j++) {\n const { ts, timeEpochMs, timeEpochNs } = parseTime(timeField, timeNanosecondField ?? undefined, j);\n\n // In edge cases, this can be undefined. If undefined, we want to replace it with empty string.\n const messageValue: unknown = stringField.values[j] ?? '';\n // This should be string but sometimes isn't (eg elastic) because the dataFrame is not strongly typed.\n const message: string = typeof messageValue === 'string' ? messageValue : JSON.stringify(messageValue);\n\n const hasAnsi = textUtil.hasAnsiCodes(message);\n\n const hasUnescapedContent = !!message.match(/\\\\n|\\\\t|\\\\r/);\n\n // Data sources that set up searchWords on backend use meta.custom.searchWords\n // Data sources that set up searchWords through frontend can use meta.searchWords\n const searchWords = series.meta?.custom?.searchWords ?? series.meta?.searchWords ?? [];\n const entry = hasAnsi ? ansicolor.strip(message) : message;\n\n const labels = frameLabels?.[j];\n const uniqueLabels = findUniqueLabels(labels, commonLabels);\n if (Object.keys(uniqueLabels).length > 0) {\n hasUniqueLabels = true;\n }\n\n let logLevel = LogLevel.unknown;\n const logLevelKey = (logLevelField && logLevelField.values[j]) || (labels?.level ?? labels?.detected_level);\n if (typeof logLevelKey === 'number' || typeof logLevelKey === 'string') {\n logLevel = getLogLevelFromKey(logLevelKey);\n } else {\n logLevel = getLogLevel(entry);\n }\n\n const datasource = queries.find((query) => query.refId === series.refId)?.datasource;\n const datasourceType = datasource?.type;\n const datasourceUid = datasource?.uid;\n\n const row: LogRowModel = {\n entryFieldIndex: stringField.index,\n rowIndex: j,\n dataFrame: series,\n logLevel,\n timeFromNow: dateTimeFormatTimeAgo(ts),\n timeEpochMs,\n timeEpochNs,\n timeLocal: dateTimeFormat(ts, { timeZone: 'browser' }),\n timeUtc: dateTimeFormat(ts, { timeZone: 'utc' }),\n uniqueLabels,\n hasAnsi,\n hasUnescapedContent,\n searchWords,\n entry,\n raw: message,\n labels: labels || {},\n // prepend refId to uid to make it unique across all series in a case when series contain duplicates\n uid: `${series.refId}_${idField ? idField.values[j] : j.toString()}`,\n datasourceType,\n datasourceUid,\n };\n\n if (idField !== null) {\n row.rowId = idField.values[j];\n }\n\n if (filterDuplicateRows && findMatchingRow(row)) {\n continue;\n }\n\n rows.push(row);\n }\n }\n\n // Meta data to display in status\n const meta: LogsMetaItem[] = [];\n // Data sources that set up searchWords on backend use meta.custom.limit.\n // Data sources that set up searchWords through frontend can use meta.limit.\n const limits = logSeries.filter((series) => series?.meta?.custom?.limit ?? series?.meta?.limit);\n const lastLimitPerRef = limits.reduce<Record<string, number>>((acc, elem) => {\n acc[elem.refId ?? ''] = elem.meta?.custom?.limit ?? elem.meta?.limit ?? 0;\n\n return acc;\n }, {});\n\n const limitValue = Object.values(lastLimitPerRef).reduce((acc, elem) => (acc += elem), 0);\n\n if (limitValue > 0) {\n meta.push({\n label: LIMIT_LABEL,\n value: limitValue,\n kind: LogsMetaKind.Number,\n });\n }\n\n const totalValue = logSeries.reduce((acc, series) => (acc += series.meta?.custom?.total), 0);\n if (totalValue > 0) {\n meta.push({\n label: TOTAL_LABEL,\n value: totalValue,\n kind: LogsMetaKind.Number,\n });\n }\n\n let totalBytes = 0;\n const queriesVisited: { [refId: string]: boolean } = {};\n // To add just 1 error message\n let errorMetaAdded = false;\n\n for (const series of logSeries) {\n const totalBytesKey = series.meta?.custom?.lokiQueryStatKey;\n const { refId } = series; // Stats are per query, keeping track by refId\n\n if (!errorMetaAdded && series.meta?.custom?.error) {\n meta.push({\n label: '',\n value: series.meta?.custom.error,\n kind: LogsMetaKind.Error,\n });\n errorMetaAdded = true;\n }\n\n if (refId && !queriesVisited[refId]) {\n if (totalBytesKey && series.meta?.stats) {\n const byteStat = series.meta.stats.find((stat) => stat.displayName === totalBytesKey);\n if (byteStat) {\n totalBytes += byteStat.value;\n }\n }\n\n queriesVisited[refId] = true;\n }\n }\n\n if (totalBytes > 0) {\n const { text, suffix } = SIPrefix('B')(totalBytes);\n meta.push({\n label: t('logs.log-series-to-logs-model.label.total-bytes-processed', 'Total bytes processed'),\n value: `${text} ${suffix}`,\n kind: LogsMetaKind.String,\n });\n }\n\n if (size(commonLabels) > 0) {\n meta.push({\n label: COMMON_LABELS,\n value: commonLabels,\n kind: LogsMetaKind.LabelsMap,\n });\n }\n\n return {\n hasUniqueLabels,\n meta,\n rows,\n };\n}\n\n// Used to add additional information to Line limit meta info\nfunction adjustMetaInfo(logsModel: LogsModel, visibleRangeMs?: number, requestedRangeMs?: number): LogsMetaItem[] {\n if (!logsModel.meta) {\n return [];\n }\n let logsModelMeta = [...logsModel.meta];\n\n const limitIndex = logsModelMeta.findIndex((meta) => meta.label === LIMIT_LABEL);\n const limit = limitIndex >= 0 && logsModelMeta[limitIndex]?.value;\n\n if (limit && typeof limit === 'number' && limit > 0) {\n let metaLimitValue;\n\n if (limit === logsModel.rows.length && visibleRangeMs && requestedRangeMs) {\n metaLimitValue = `${limit} reached`;\n\n // Scan is a special Loki query direction which potentially returns fewer logs than expected.\n const canShowCoverage = !logsModel.queries?.some(\n (query) => 'direction' in query && query.direction === LokiQueryDirection.Scan\n );\n\n if (canShowCoverage) {\n const coverage = ((visibleRangeMs / requestedRangeMs) * 100).toFixed(2);\n metaLimitValue = `${limit} lines shown — ${coverage}% (${rangeUtil.msRangeToTimeString(visibleRangeMs)}) of ${rangeUtil.msRangeToTimeString(requestedRangeMs)}`;\n }\n } else {\n const description = config.featureToggles.logsInfiniteScrolling ? 'displayed' : 'returned';\n metaLimitValue = `${logsModel.rows.length} ${logsModel.rows.length > 1 ? 'lines' : 'line'} ${description}`;\n }\n\n logsModelMeta[limitIndex] = {\n label: '',\n value: metaLimitValue,\n kind: LogsMetaKind.String,\n };\n }\n\n return logsModelMeta;\n}\n\n/**\n * Returns field configuration used to render logs volume bars\n */\nfunction getLogVolumeFieldConfig(level: LogLevel, oneLevelDetected: boolean) {\n const name = oneLevelDetected && level === LogLevel.unknown ? 'logs' : level;\n const color = LogLevelColor[level];\n return {\n displayNameFromDS: name,\n color: {\n mode: FieldColorModeId.Fixed,\n fixedColor: color,\n },\n custom: {\n drawStyle: GraphDrawStyle.Bars,\n barAlignment: BarAlignment.Center,\n lineColor: color,\n pointColor: color,\n fillColor: color,\n lineWidth: 0,\n fillOpacity: 100,\n stacking: {\n mode: StackingMode.Normal,\n group: 'A',\n },\n },\n };\n}\n\nconst updateLogsVolumeConfig = (\n dataFrame: DataFrame,\n extractLevel: (dataFrame: DataFrame) => LogLevel,\n oneLevelDetected: boolean\n): DataFrame => {\n dataFrame.fields = dataFrame.fields.map((field) => {\n if (field.type === FieldType.number) {\n field.config = {\n ...field.config,\n ...getLogVolumeFieldConfig(extractLevel(dataFrame), oneLevelDetected),\n };\n }\n return field;\n });\n return dataFrame;\n};\n\ntype LogsVolumeQueryOptions<T extends DataQuery> = {\n targets: T[];\n};\n\nfunction defaultExtractLevel(dataFrame: DataFrame): LogLevel {\n let valueField;\n try {\n valueField = new FieldCache(dataFrame).getFirstFieldOfType(FieldType.number);\n } catch {}\n return valueField?.labels ? getLogLevelFromLabels(valueField.labels) : LogLevel.unknown;\n}\n\nfunction getLogLevelFromLabels(labels: Labels): LogLevel {\n const level = labels['level'] ?? labels['detected_level'] ?? labels['lvl'] ?? labels['loglevel'] ?? '';\n return level ? getLogLevelFromKey(level) : LogLevel.unknown;\n}\n\n/**\n * Creates an observable, which makes requests to get logs volume and aggregates results.\n */\nexport function queryLogsVolume<TQuery extends DataQuery, TOptions extends DataSourceJsonData>(\n datasource: DataSourceApi<TQuery, TOptions>,\n logsVolumeRequest: DataQueryRequest<TQuery>,\n options: LogsVolumeQueryOptions<TQuery>\n): Observable<DataQueryResponse> {\n const range = logsVolumeRequest.range;\n const targets = options.targets;\n const extractLevel = defaultExtractLevel;\n const timespan = range.to.valueOf() - range.from.valueOf();\n const intervalInfo = getIntervalInfo(logsVolumeRequest.scopedVars, timespan);\n\n logsVolumeRequest.interval = intervalInfo.interval;\n logsVolumeRequest.scopedVars.__interval = { value: intervalInfo.interval, text: intervalInfo.interval };\n\n if (intervalInfo.intervalMs !== undefined) {\n logsVolumeRequest.intervalMs = intervalInfo.intervalMs;\n logsVolumeRequest.scopedVars.__interval_ms = { value: intervalInfo.intervalMs, text: intervalInfo.intervalMs };\n }\n\n logsVolumeRequest.hideFromInspector = true;\n\n return new Observable((observer) => {\n let logsVolumeData: DataFrame[] = [];\n observer.next({\n state: LoadingState.Loading,\n error: undefined,\n data: [],\n });\n\n const queryResponse = datasource.query(logsVolumeRequest);\n const queryObservable = isObservable(queryResponse) ? queryResponse : from(queryResponse);\n\n const subscription = queryObservable.subscribe({\n complete: () => {\n observer.complete();\n },\n next: (dataQueryResponse: DataQueryResponse) => {\n const { error } = dataQueryResponse;\n if (error !== undefined) {\n observer.next({\n state: LoadingState.Error,\n error,\n data: dataQueryResponse.data,\n });\n observer.error(error);\n } else {\n const framesByRefId = groupBy(dataQueryResponse.data, 'refId');\n logsVolumeData = dataQueryResponse.data.map((dataFrame) => {\n // Separate possible annotations from data frames\n if (dataFrame.meta?.dataTopic === DataTopic.Annotations) {\n return dataFrame;\n }\n let sourceRefId = dataFrame.refId || '';\n if (sourceRefId.startsWith('log-volume-')) {\n sourceRefId = sourceRefId.substr('log-volume-'.length);\n }\n\n const logsVolumeCustomMetaData: LogsVolumeCustomMetaData = {\n logsVolumeType: LogsVolumeType.FullRange,\n absoluteRange: { from: range.from.valueOf(), to: range.to.valueOf() },\n datasourceName: datasource.name,\n sourceQuery: targets.find((dataQuery) => dataQuery.refId === sourceRefId)!,\n };\n\n dataFrame.meta = {\n ...dataFrame.meta,\n custom: {\n ...dataFrame.meta?.custom,\n ...logsVolumeCustomMetaData,\n },\n };\n return updateLogsVolumeConfig(dataFrame, extractLevel, framesByRefId[dataFrame.refId].length === 1);\n });\n\n observer.next({\n state: dataQueryResponse.state,\n error: undefined,\n data: logsVolumeData,\n });\n }\n },\n error: (error) => {\n observer.next({\n state: LoadingState.Error,\n error: error,\n data: [],\n });\n observer.error(error);\n },\n });\n return () => {\n subscription?.unsubscribe();\n };\n });\n}\n\n/**\n * Creates an observable, which makes requests to get logs sample.\n */\nexport function queryLogsSample<TQuery extends DataQuery, TOptions extends DataSourceJsonData>(\n datasource: DataSourceApi<TQuery, TOptions>,\n logsSampleRequest: DataQueryRequest<TQuery>\n): Observable<DataQueryResponse> {\n logsSampleRequest.hideFromInspector = true;\n\n return new Observable((observer) => {\n let rawLogsSample: DataFrame[] = [];\n observer.next({\n state: LoadingState.Loading,\n error: undefined,\n data: [],\n });\n\n const queryResponse = datasource.query(logsSampleRequest);\n const queryObservable = isObservable(queryResponse) ? queryResponse : from(queryResponse);\n\n const subscription = queryObservable.subscribe({\n complete: () => {\n observer.next({\n state: LoadingState.Done,\n error: undefined,\n data: rawLogsSample,\n });\n observer.complete();\n },\n next: (dataQueryResponse: DataQueryResponse) => {\n const { error } = dataQueryResponse;\n if (error !== undefined) {\n observer.next({\n state: LoadingState.Error,\n error,\n data: [],\n });\n observer.error(error);\n } else {\n rawLogsSample = dataQueryResponse.data.map((dataFrame) => {\n const frame = toDataFrame(dataFrame);\n const { timeIndex } = getTimeField(frame);\n return sortDataFrame(frame, timeIndex);\n });\n }\n },\n error: (error) => {\n observer.next({\n state: LoadingState.Error,\n error: error,\n data: [],\n });\n observer.error(error);\n },\n });\n return () => {\n subscription?.unsubscribe();\n };\n });\n}\n\nfunction getIntervalInfo(scopedVars: ScopedVars, timespanMs: number): { interval: string; intervalMs?: number } {\n if (scopedVars.__interval_ms) {\n let intervalMs: number = scopedVars.__interval_ms.value;\n let interval = '';\n // below 5 seconds we force the resolution to be per 1ms as interval in scopedVars is not less than 10ms\n if (timespanMs < SECOND * 5) {\n intervalMs = MILLISECOND;\n interval = '1ms';\n } else if (intervalMs > HOUR) {\n intervalMs = DAY;\n interval = '1d';\n } else if (intervalMs > MINUTE) {\n intervalMs = HOUR;\n interval = '1h';\n } else if (intervalMs > SECOND) {\n intervalMs = MINUTE;\n interval = '1m';\n } else {\n intervalMs = SECOND;\n interval = '1s';\n }\n\n return { interval, intervalMs };\n } else {\n return { interval: '$__interval' };\n }\n}\n\n/**\n * Creates a new data frame containing only the single row from `logRow`.\n */\nexport function logRowToSingleRowDataFrame(logRow: LogRowModel): DataFrame | null {\n const originFrame = logRow.dataFrame;\n\n if (originFrame.length === 0 || originFrame.length <= logRow.rowIndex) {\n return null;\n }\n\n // create a new data frame containing only the single row from `logRow`\n const frame = createDataFrame({\n fields: originFrame.fields.map((field) => ({ ...field, values: [field.values[logRow.rowIndex]] })),\n refId: originFrame.refId,\n });\n\n return frame;\n}\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { KeyValue } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { FormField } from '../FormField/FormField';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip } from '../Tooltip/Tooltip';\n\nimport { CertificationKey } from './CertificationKey';\nimport { HttpSettingsBaseProps } from './types';\n\nexport const TLSAuthSettings = ({ dataSourceConfig, onChange }: HttpSettingsBaseProps) => {\n const hasTLSCACert = dataSourceConfig.secureJsonFields && dataSourceConfig.secureJsonFields.tlsCACert;\n const hasTLSClientCert = dataSourceConfig.secureJsonFields && dataSourceConfig.secureJsonFields.tlsClientCert;\n const hasTLSClientKey = dataSourceConfig.secureJsonFields && dataSourceConfig.secureJsonFields.tlsClientKey;\n const hasServerName = dataSourceConfig.jsonData && dataSourceConfig.jsonData.serverName;\n\n const onResetClickFactory = (field: string) => (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n const newSecureJsonFields: KeyValue<boolean> = { ...dataSourceConfig.secureJsonFields };\n newSecureJsonFields[field] = false;\n onChange({\n ...dataSourceConfig,\n secureJsonFields: newSecureJsonFields,\n });\n };\n\n const onCertificateChangeFactory = (field: string) => (event: React.SyntheticEvent<HTMLTextAreaElement>) => {\n const newSecureJsonData = { ...dataSourceConfig.secureJsonData };\n newSecureJsonData[field] = event.currentTarget.value;\n\n onChange({\n ...dataSourceConfig,\n secureJsonData: newSecureJsonData,\n });\n };\n\n const onServerNameLabelChange = (event: React.SyntheticEvent<HTMLInputElement>) => {\n const newJsonData = {\n ...dataSourceConfig.jsonData,\n serverName: event.currentTarget.value,\n };\n\n onChange({\n ...dataSourceConfig,\n jsonData: newJsonData,\n });\n };\n\n const certificateBeginsWith = '-----BEGIN CERTIFICATE-----';\n const privateKeyBeginsWith = '-----BEGIN RSA PRIVATE KEY-----';\n\n return (\n <div className=\"gf-form-group\">\n <div\n className={cx(\n 'gf-form',\n css({\n alignItems: 'baseline',\n })\n )}\n >\n <h6>\n <Trans i18nKey=\"grafana-ui.data-source-settings.tls-heading\">TLS/SSL Auth Details</Trans>\n </h6>\n <Tooltip\n placement=\"right-end\"\n content={t(\n 'grafana-ui.data-source-settings.tls-tooltip',\n 'TLS/SSL Certs are encrypted and stored in the Grafana database.'\n )}\n theme=\"info\"\n >\n <Icon name=\"info-circle\" size=\"xs\" style={{ marginLeft: '10px' }} />\n </Tooltip>\n </div>\n <div>\n {dataSourceConfig.jsonData.tlsAuthWithCACert && (\n <CertificationKey\n hasCert={!!hasTLSCACert}\n onChange={onCertificateChangeFactory('tlsCACert')}\n placeholder={t(\n 'grafana-ui.data-source-settings.tls-certification-placeholder',\n 'Begins with {{certificateBeginsWith}}',\n { certificateBeginsWith }\n )}\n label={t('grafana-ui.data-source-settings.tls-certification-label', 'CA Cert')}\n onClick={onResetClickFactory('tlsCACert')}\n />\n )}\n\n {dataSourceConfig.jsonData.tlsAuth && (\n <>\n <div className=\"gf-form\">\n <FormField\n label={t('grafana-ui.data-source-settings.tls-server-name-label', 'ServerName')}\n labelWidth={7}\n inputWidth={30}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"domain.example.com\"\n value={hasServerName && dataSourceConfig.jsonData.serverName}\n onChange={onServerNameLabelChange}\n />\n </div>\n <CertificationKey\n hasCert={!!hasTLSClientCert}\n label={t('grafana-ui.data-source-settings.tls-client-certification-label', 'Client Cert')}\n onChange={onCertificateChangeFactory('tlsClientCert')}\n placeholder={t(\n 'grafana-ui.data-source-settings.tls-certification-placeholder',\n 'Begins with {{certificateBeginsWith}}',\n { certificateBeginsWith }\n )}\n onClick={onResetClickFactory('tlsClientCert')}\n />\n\n <CertificationKey\n hasCert={!!hasTLSClientKey}\n label={t('grafana-ui.data-source-settings.tls-client-key-label', 'Client Key')}\n placeholder={t(\n 'grafana-ui.data-source-settings.tls-client-key-placeholder',\n 'Begins with {{privateKeyBeginsWith}}',\n { privateKeyBeginsWith }\n )}\n onChange={onCertificateChangeFactory('tlsClientKey')}\n onClick={onResetClickFactory('tlsClientKey')}\n />\n </>\n )}\n </div>\n </div>\n );\n};\n","import { createAction, createAsyncThunk, Update } from '@reduxjs/toolkit';\nimport { from, forkJoin, timeout, lastValueFrom, catchError, of } from 'rxjs';\n\nimport { PanelPlugin, PluginError } from '@grafana/data';\nimport { config, getBackendSrv, isFetchError } from '@grafana/runtime';\nimport { Settings } from 'app/core/config';\nimport { importPanelPlugin } from 'app/features/plugins/importPanelPlugin';\nimport { StoreState, ThunkResult } from 'app/types/store';\n\nimport { clearPluginInfoInCache } from '../../loader/pluginInfoCache';\nimport {\n getRemotePlugins,\n getPluginErrors,\n getLocalPlugins,\n getPluginDetails,\n installPlugin,\n uninstallPlugin,\n getInstancePlugins,\n getProvisionedPlugins,\n} from '../api';\nimport { STATE_PREFIX } from '../constants';\nimport { mapLocalToCatalog, mergeLocalsAndRemotes } from '../helpers';\nimport { CatalogPlugin, RemotePlugin, LocalPlugin, InstancePlugin, ProvisionedPlugin, PluginStatus } from '../types';\n\n// Fetches\nexport const fetchAll = createAsyncThunk(`${STATE_PREFIX}/fetchAll`, async (_, thunkApi) => {\n try {\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchLocal/pending` });\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchRemote/pending` });\n\n const instance$ = config.pluginAdminExternalManageEnabled ? from(getInstancePlugins()) : of(undefined);\n const provisioned$ = config.pluginAdminExternalManageEnabled ? from(getProvisionedPlugins()) : of(undefined);\n const TIMEOUT = 500;\n const pluginErrors$ = from(getPluginErrors());\n const local$ = from(getLocalPlugins());\n // Unknown error while fetching remote plugins from GCOM.\n // (In this case we still operate, but only with locally available plugins.)\n const remote$ = from(getRemotePlugins()).pipe(\n catchError((err) => {\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchRemote/rejected` });\n console.error(err);\n return of([]);\n })\n );\n\n forkJoin({\n local: local$,\n remote: remote$,\n instance: instance$,\n provisioned: provisioned$,\n pluginErrors: pluginErrors$,\n })\n .pipe(\n // Fetching the list of plugins from GCOM is slow / times out\n // (We are waiting for TIMEOUT, and if there is still no response from GCOM we continue with locally\n // installed plugins only by returning a new observable. We also still wait for the remote request to finish or\n // time out, but we don't block the main execution flow.)\n timeout({\n each: TIMEOUT,\n with: () => {\n remote$\n // Remote plugins loaded after a timeout, updating the store\n .subscribe(async (remote: RemotePlugin[]) => {\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchRemote/fulfilled` });\n\n if (remote.length > 0) {\n const local = await lastValueFrom(local$);\n const instance = await lastValueFrom(instance$);\n const provisioned = await lastValueFrom(provisioned$);\n const pluginErrors = await lastValueFrom(pluginErrors$);\n\n thunkApi.dispatch(\n addPlugins(mergeLocalsAndRemotes({ local, remote, instance, provisioned, pluginErrors }))\n );\n }\n });\n\n return forkJoin({\n local: local$,\n instance: instance$,\n provisioned: provisioned$,\n pluginErrors: pluginErrors$,\n });\n },\n })\n )\n .subscribe(\n ({\n local,\n remote,\n instance,\n provisioned,\n pluginErrors,\n }: {\n local: LocalPlugin[];\n remote?: RemotePlugin[];\n instance?: InstancePlugin[];\n provisioned?: ProvisionedPlugin[];\n pluginErrors: PluginError[];\n }) => {\n // Both local and remote plugins are loaded\n if (local && remote) {\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchLocal/fulfilled` });\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchRemote/fulfilled` });\n thunkApi.dispatch(\n addPlugins(mergeLocalsAndRemotes({ local, remote, instance, provisioned, pluginErrors }))\n );\n\n // Only remote plugins are loaded (remote timed out)\n } else if (local) {\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchLocal/fulfilled` });\n thunkApi.dispatch(addPlugins(mergeLocalsAndRemotes({ local, pluginErrors })));\n }\n },\n (error) => {\n console.log(error);\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchLocal/rejected` });\n thunkApi.dispatch({ type: `${STATE_PREFIX}/fetchRemote/rejected` });\n return thunkApi.rejectWithValue('Unknown error.');\n }\n );\n\n return null;\n } catch (e) {\n return thunkApi.rejectWithValue('Unknown error.');\n }\n});\n\nexport const fetchAllLocal = createAsyncThunk(`${STATE_PREFIX}/fetchAllLocal`, async (_, thunkApi) => {\n try {\n const localPlugins = await getLocalPlugins();\n return localPlugins.map((plugin: LocalPlugin) => mapLocalToCatalog(plugin));\n } catch (e) {\n return thunkApi.rejectWithValue('Unknown error.');\n }\n});\n\nexport const fetchRemotePlugins = createAsyncThunk<RemotePlugin[], void, { rejectValue: RemotePlugin[] }>(\n `${STATE_PREFIX}/fetchRemotePlugins`,\n async (_, thunkApi) => {\n try {\n return await getRemotePlugins();\n } catch (error) {\n if (isFetchError(error)) {\n error.isHandled = true;\n }\n return thunkApi.rejectWithValue([]);\n }\n }\n);\n\nexport const fetchDetails = createAsyncThunk<Update<CatalogPlugin, string>, string>(\n `${STATE_PREFIX}/fetchDetails`,\n async (id, thunkApi) => {\n try {\n const details = await getPluginDetails(id);\n\n return {\n id,\n changes: { details },\n };\n } catch (e) {\n return thunkApi.rejectWithValue('Unknown error.');\n }\n }\n);\n\nexport const addPlugins = createAction<CatalogPlugin[]>(`${STATE_PREFIX}/addPlugins`);\n\n// 1. gets remote equivalents from the store (if there are any)\n// 2. merges the remote equivalents with the local plugins\n// 3. updates the store with the updated CatalogPlugin objects\nexport const addLocalPlugins = createAction<LocalPlugin[]>(`${STATE_PREFIX}/addLocalPlugins`);\n\n// 1. gets local equivalents from the store (if there are any)\n// 2. merges the local equivalents with the remote plugins\n// 3. updates the store with the updated CatalogPlugin objects\nexport const addRemotePlugins = createAction<RemotePlugin[]>(`${STATE_PREFIX}/addLocalPlugins`);\n\n// 1. merges the local and remote plugins\n// 2. updates the store with the CatalogPlugin objects\nexport const addLocalAndRemotePlugins = createAction<{ local: LocalPlugin[]; remote: RemotePlugin[] }>(\n `${STATE_PREFIX}/addLocalPlugins`\n);\n\n// We are also using the install API endpoint to update the plugin\nexport const install = createAsyncThunk<\n Update<CatalogPlugin, string>,\n {\n id: string;\n version?: string;\n installType?: PluginStatus;\n }\n>(`${STATE_PREFIX}/install`, async ({ id, version, installType = PluginStatus.INSTALL }, thunkApi) => {\n const changes: Partial<CatalogPlugin> = { isInstalled: true, installedVersion: version };\n\n if (installType === PluginStatus.UPDATE) {\n changes.hasUpdate = false;\n }\n if (installType === PluginStatus.DOWNGRADE) {\n changes.hasUpdate = true;\n }\n\n try {\n await installPlugin(id, version);\n await updatePanels();\n\n if (installType !== PluginStatus.INSTALL) {\n clearPluginInfoInCache(id);\n }\n\n return { id, changes };\n } catch (e) {\n console.error(e);\n if (isFetchError(e)) {\n // add id to identify errors in multiple requests\n e.data.id = id;\n return thunkApi.rejectWithValue(e.data);\n }\n\n return thunkApi.rejectWithValue('Unknown error.');\n }\n});\n\nexport const unsetInstall = createAsyncThunk(`${STATE_PREFIX}/install`, async () => ({}));\n\nexport const uninstall = createAsyncThunk<Update<CatalogPlugin, string>, string>(\n `${STATE_PREFIX}/uninstall`,\n async (id, thunkApi) => {\n try {\n await uninstallPlugin(id);\n await updatePanels();\n\n clearPluginInfoInCache(id);\n\n return {\n id,\n changes: { isInstalled: false, installedVersion: undefined, isFullyInstalled: false },\n };\n } catch (e) {\n console.error(e);\n\n return thunkApi.rejectWithValue('Unknown error.');\n }\n }\n);\n\n// We need this to be backwards-compatible with other parts of Grafana.\n// (Originally in \"public/app/features/plugins/state/actions.ts\")\n// TODO<remove once the \"plugin_admin_enabled\" feature flag is removed>\nexport const loadPluginDashboards = createAsyncThunk(`${STATE_PREFIX}/loadPluginDashboards`, async (_, thunkApi) => {\n const state = thunkApi.getState() as StoreState;\n const dataSourceType = state.dataSources.dataSource.type;\n const url = `api/plugins/${dataSourceType}/dashboards`;\n\n return getBackendSrv().get(url);\n});\n\nexport const panelPluginLoaded = createAction<PanelPlugin>(`${STATE_PREFIX}/panelPluginLoaded`);\n\n// We need this to be backwards-compatible with other parts of Grafana.\n// (Originally in \"public/app/features/plugins/state/actions.ts\")\n// It cannot be constructed with `createAsyncThunk()` as we need the return value on the call-site,\n// and we cannot easily change the call-site to unwrap the result.\n// TODO<remove once the \"plugin_admin_enabled\" feature flag is removed>\nexport const loadPanelPlugin = (id: string): ThunkResult<Promise<PanelPlugin>> => {\n return async (dispatch, getStore) => {\n let plugin = getStore().plugins.panels[id];\n\n if (!plugin) {\n plugin = await importPanelPlugin(id);\n\n // second check to protect against raise condition\n if (!getStore().plugins.panels[id]) {\n dispatch(panelPluginLoaded(plugin));\n }\n }\n\n return plugin;\n };\n};\n\nfunction updatePanels() {\n return getBackendSrv()\n .get('/api/frontend/settings')\n .then((settings: Settings) => {\n config.panels = settings.panels;\n });\n}\n","import { faro } from '@grafana/faro-web-sdk';\nimport { getEchoSrv, EchoEventType } from '@grafana/runtime';\n\nimport { PerformanceEvent } from './backends/PerformanceBackend';\n\nexport const reportPerformance = (metric: string, value: number) => {\n getEchoSrv().addEvent<PerformanceEvent>({\n type: EchoEventType.Performance,\n payload: {\n name: metric,\n value: value,\n },\n });\n};\n\n// Farp will process the error, then push it to EchoSrv as GrafanaJavascriptAgent event\nexport const reportError = (error: Error) => faro?.api?.pushError(error);\n","import { reportPerformance } from '../services/echo/EchoSrv';\n\nexport function startMeasure(eventName: string) {\n if (!performance || !performance.mark) {\n return;\n }\n\n try {\n performance.mark(`${eventName}_started`);\n } catch (error) {\n console.error(`[Metrics] Failed to startMeasure ${eventName}`, error);\n }\n}\n\nexport function stopMeasure(eventName: string) {\n if (!performance || !performance.mark) {\n return;\n }\n\n try {\n const started = `${eventName}_started`;\n const completed = `${eventName}_completed`;\n const measured = `${eventName}_measured`;\n\n performance.mark(completed);\n const measure = performance.measure(measured, started, completed);\n reportPerformance(`${eventName}_ms`, measure.duration);\n\n performance.clearMarks(started);\n performance.clearMarks(completed);\n performance.clearMeasures(measured);\n return measure;\n } catch (error) {\n console.error(`[Metrics] Failed to stopMeasure ${eventName}`, error);\n return;\n }\n}\n\n/**\n * Report when a metric of a given name was marked during the document lifecycle. Works for markers with no duration,\n * like PerformanceMark or PerformancePaintTiming (e.g. created with performance.mark, or first-contentful-paint)\n */\nexport function reportMetricPerformanceMark(metricName: string, prefix = '', suffix = ''): void {\n const metric = performance.getEntriesByName(metricName).at(0);\n if (metric) {\n const metricName = metric.name.replace(/-/g, '_');\n reportPerformance(`${prefix}${metricName}${suffix}`, Math.round(metric.startTime) / 1000);\n }\n}\n","import { FieldConfigOptionsRegistry } from '../field/FieldConfigOptionsRegistry';\nimport { standardFieldConfigEditorRegistry } from '../field/standardFieldConfigEditorRegistry';\nimport { FieldConfigProperty, FieldConfigPropertyItem } from '../types/fieldOverrides';\nimport { FieldConfigEditorBuilder } from '../utils/OptionsUIBuilders';\n\nimport { SetFieldConfigOptionsArgs } from './PanelPlugin';\n\n/**\n * Helper functionality to create a field config registry.\n *\n * @param config - configuration to base the registry on.\n * @param pluginName - name of the plugin that will use the registry.\n * @internal\n */\nexport function createFieldConfigRegistry<TFieldConfigOptions>(\n config: SetFieldConfigOptionsArgs<TFieldConfigOptions> = {},\n pluginName: string\n): FieldConfigOptionsRegistry {\n const registry = new FieldConfigOptionsRegistry();\n const standardConfigs = standardFieldConfigEditorRegistry.list();\n const standardOptionsExtensions: Record<string, FieldConfigPropertyItem[]> = {};\n\n // Add custom options\n if (config.useCustomConfig) {\n const builder = new FieldConfigEditorBuilder<TFieldConfigOptions>();\n config.useCustomConfig(builder);\n\n for (const customProp of builder.getRegistry().list()) {\n customProp.isCustom = true;\n // need to do something to make the custom items not conflict with standard ones\n // problem is id (registry index) is used as property path\n // so sort of need a property path on the FieldPropertyEditorItem\n customProp.id = 'custom.' + customProp.id;\n\n if (isStandardConfigExtension(customProp, standardConfigs)) {\n const currentExtensions = standardOptionsExtensions[customProp.category![0]] ?? [];\n currentExtensions.push(customProp);\n standardOptionsExtensions[customProp.category![0]] = currentExtensions;\n } else {\n registry.register(customProp);\n }\n }\n }\n\n for (let fieldConfigProp of standardConfigs) {\n const id = fieldConfigProp.id as FieldConfigProperty;\n if (config.disableStandardOptions) {\n const isDisabled = config.disableStandardOptions.indexOf(id) > -1;\n if (isDisabled) {\n continue;\n }\n }\n if (config.standardOptions) {\n const customHideFromDefaults = config.standardOptions[id]?.hideFromDefaults;\n const customDefault = config.standardOptions[id]?.defaultValue;\n const customSettings = config.standardOptions[id]?.settings;\n\n if (customHideFromDefaults !== undefined) {\n fieldConfigProp = {\n ...fieldConfigProp,\n hideFromDefaults: customHideFromDefaults,\n };\n }\n\n if (customDefault) {\n fieldConfigProp = {\n ...fieldConfigProp,\n defaultValue: customDefault,\n };\n }\n\n if (customSettings) {\n fieldConfigProp = {\n ...fieldConfigProp,\n settings: fieldConfigProp.settings ? { ...fieldConfigProp.settings, ...customSettings } : customSettings,\n };\n }\n }\n\n registry.register(fieldConfigProp);\n\n if (fieldConfigProp.category && standardOptionsExtensions[fieldConfigProp.category[0]]) {\n for (let extensionProperty of standardOptionsExtensions[fieldConfigProp.category[0]]) {\n registry.register(extensionProperty);\n }\n }\n }\n\n // assert that field configs do not use array path syntax\n for (const item of registry.list()) {\n if (item.path.indexOf('[') > 0) {\n throw new Error(`[${pluginName}] Field config paths do not support arrays: ${item.id}`);\n }\n }\n\n return registry;\n}\n\nfunction isStandardConfigExtension(property: FieldConfigPropertyItem, standardProperties: FieldConfigPropertyItem[]) {\n return Boolean(\n standardProperties.find((p) => property.category && p.category && property.category[0] === p.category[0])\n );\n}\n","import { css, cx } from '@emotion/css';\nimport { HTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getChildId } from '../../utils/reactUtils';\n\nimport { FieldValidationMessage } from './FieldValidationMessage';\nimport { Label } from './Label';\n\nexport interface FieldProps extends HTMLAttributes<HTMLDivElement> {\n /** Form input element, i.e Input or Switch */\n children: React.ReactElement;\n /** Label for the field */\n label?: React.ReactNode;\n /** Description of the field */\n description?: React.ReactNode;\n /** Indicates if field is in invalid state */\n invalid?: boolean;\n /** Indicates if field is in loading state */\n loading?: boolean;\n /** Indicates if field is disabled */\n disabled?: boolean;\n /** Indicates if field is required */\n required?: boolean;\n /** Error message to display */\n error?: React.ReactNode;\n /** Indicates horizontal layout of the field */\n horizontal?: boolean;\n /** make validation message overflow horizontally. Prevents pushing out adjacent inline components */\n validationMessageHorizontalOverflow?: boolean;\n\n className?: string;\n /**\n * A unique id that associates the label of the Field component with the control with the unique id.\n * If the `htmlFor` property is missing the `htmlFor` will be inferred from the `id` or `inputId` property of the first child.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label#attr-for\n */\n htmlFor?: string;\n /** Remove the bottom margin */\n noMargin?: boolean;\n}\n\n/**\n * Field is the basic component for rendering form elements together with labels and description.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-field--docs\n */\nexport const Field = React.forwardRef<HTMLDivElement, FieldProps>(\n (\n {\n label,\n description,\n horizontal,\n invalid,\n loading,\n disabled,\n required,\n error,\n children,\n className,\n validationMessageHorizontalOverflow,\n htmlFor,\n noMargin,\n ...otherProps\n }: FieldProps,\n ref\n ) => {\n const styles = useStyles2(getFieldStyles, noMargin);\n const inputId = htmlFor ?? getChildId(children);\n\n const labelElement =\n typeof label === 'string' ? (\n <Label htmlFor={inputId} description={description}>\n {`${label}${required ? ' *' : ''}`}\n </Label>\n ) : (\n label\n );\n\n const childProps = deleteUndefinedProps({ invalid, disabled, loading });\n return (\n <div className={cx(styles.field, horizontal && styles.fieldHorizontal, className)} {...otherProps}>\n {labelElement}\n <div>\n <div ref={ref}>{React.cloneElement(children, childProps)}</div>\n {invalid && error && !horizontal && (\n <div\n className={cx(styles.fieldValidationWrapper, {\n [styles.validationMessageHorizontalOverflow]: !!validationMessageHorizontalOverflow,\n })}\n >\n <FieldValidationMessage>{error}</FieldValidationMessage>\n </div>\n )}\n </div>\n\n {invalid && error && horizontal && (\n <div\n className={cx(styles.fieldValidationWrapper, styles.fieldValidationWrapperHorizontal, {\n [styles.validationMessageHorizontalOverflow]: !!validationMessageHorizontalOverflow,\n })}\n >\n <FieldValidationMessage>{error}</FieldValidationMessage>\n </div>\n )}\n </div>\n );\n }\n);\n\nField.displayName = 'Field';\n\nfunction deleteUndefinedProps<T extends Object>(obj: T): Partial<T> {\n for (const key in obj) {\n if (obj[key] === undefined) {\n delete obj[key];\n }\n }\n\n return obj;\n}\n\nexport const getFieldStyles = (theme: GrafanaTheme2, noMargin?: boolean) => ({\n field: css({\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing(noMargin ? 0 : 2),\n }),\n fieldHorizontal: css({\n flexDirection: 'row',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n }),\n fieldValidationWrapper: css({\n marginTop: theme.spacing(0.5),\n }),\n fieldValidationWrapperHorizontal: css({\n flex: '1 1 100%',\n }),\n validationMessageHorizontalOverflow: css({\n width: 0,\n overflowX: 'visible',\n\n '& > *': {\n whiteSpace: 'nowrap',\n },\n }),\n});\n","import { GrafanaPlugin, NavModel, NavModelItem, PanelPluginMeta, PluginType } from '@grafana/data';\nimport { createMonitoringLogger } from '@grafana/runtime';\n\nimport { importPanelPluginFromMeta } from './importPanelPlugin';\nimport { pluginImporter } from './importer/pluginImporter';\nimport { getPluginSettings } from './pluginSettings';\n\nexport async function loadPlugin(pluginId: string): Promise<GrafanaPlugin> {\n const info = await getPluginSettings(pluginId);\n let result: GrafanaPlugin | undefined;\n\n if (info.type === PluginType.app) {\n result = await pluginImporter.importApp(info);\n }\n if (info.type === PluginType.datasource) {\n result = await pluginImporter.importDataSource(info);\n }\n if (info.type === PluginType.panel) {\n const panelPlugin = await importPanelPluginFromMeta(info as PanelPluginMeta);\n result = panelPlugin as unknown as GrafanaPlugin;\n }\n if (info.type === PluginType.renderer) {\n result = { meta: info } as GrafanaPlugin;\n }\n\n if (!result) {\n throw new Error('Unknown Plugin type: ' + info.type);\n }\n\n return result;\n}\n\nexport function buildPluginSectionNav(currentUrl: string, pluginNavSection?: NavModelItem): NavModel | undefined {\n if (!pluginNavSection) {\n return undefined;\n }\n // shallow clone as we set active flag\n const MAX_RECURSION_DEPTH = 10;\n let copiedPluginNavSection = { ...pluginNavSection };\n let activePage: NavModelItem | undefined;\n\n function setPageToActive(page: NavModelItem, currentUrl: string): NavModelItem {\n if (!currentUrl.startsWith(page.url ?? '')) {\n return page;\n }\n\n // Check if there is already an active page found with with a more specific url (possibly a child of the current page)\n // (In this case we bail out early and don't mark the parent as active)\n if (activePage && (activePage.url?.length ?? 0) > (page.url?.length ?? 0)) {\n return page;\n }\n\n if (activePage) {\n activePage.active = false;\n }\n\n activePage = { ...page, active: true };\n\n return activePage;\n }\n\n function findAndSetActivePage(child: NavModelItem, depth = 0): NavModelItem {\n if (depth > MAX_RECURSION_DEPTH) {\n return child;\n }\n\n if (child.children) {\n // Doing this here to make sure that first we check if any of the children is active\n // (In case yes, then the check for the parent will not mark it as active)\n const children = child.children.map((pluginPage) => findAndSetActivePage(pluginPage, depth + 1));\n\n return {\n ...setPageToActive(child, currentUrl),\n children,\n };\n }\n\n return setPageToActive(child, currentUrl);\n }\n\n // Find and set active page\n copiedPluginNavSection.children = (copiedPluginNavSection?.children ?? []).map((item) => findAndSetActivePage(item));\n\n return { main: copiedPluginNavSection, node: activePage ?? copiedPluginNavSection };\n}\n\nexport const pluginsLogger = createMonitoringLogger('features.plugins');\n","import { css, cx } from '@emotion/css';\nimport { forwardRef, memo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\nimport { SkeletonComponent, attachSkeleton } from '../../utils/skeleton';\n\nimport { OnTagClick, Tag } from './Tag';\n\nexport interface Props {\n /** Maximum number of the tags to display */\n displayMax?: number;\n /** Names of the tags to display */\n tags: string[];\n /** Callback when the tag is clicked */\n onClick?: OnTagClick;\n /** Custom styles for the wrapper component */\n className?: string;\n /** aria-label for the `i`-th Tag component */\n getAriaLabel?: (name: string, i: number) => string;\n //** Should return an index of a color defined in the TAG_COLORS array */\n getColorIndex?: (name: string, i: number) => number;\n /** Icon to show next to tag label */\n icon?: IconName;\n}\n\nconst TagListComponent = memo(\n forwardRef<HTMLUListElement, Props>(\n ({ displayMax, tags, icon, onClick, className, getAriaLabel, getColorIndex }, ref) => {\n const theme = useTheme2();\n const styles = getStyles(theme, Boolean(displayMax && displayMax > 0));\n const numTags = tags.length;\n const tagsToDisplay = displayMax ? tags.slice(0, displayMax) : tags;\n return (\n <ul className={cx(styles.wrapper, className)} aria-label={t('grafana-ui.tags.list-label', 'Tags')} ref={ref}>\n {tagsToDisplay.map((tag, i) => (\n <li className={styles.li} key={tag}>\n <Tag\n name={tag}\n icon={icon}\n onClick={onClick}\n aria-label={getAriaLabel?.(tag, i)}\n data-tag-id={i}\n colorIndex={getColorIndex?.(tag, i)}\n />\n </li>\n ))}\n {displayMax && displayMax > 0 && numTags - displayMax > 0 && (\n <li className={styles.li}>\n <span className={styles.moreTagsLabel}>\n {'+ '}\n {numTags - displayMax}\n </span>\n </li>\n )}\n </ul>\n );\n }\n )\n);\nTagListComponent.displayName = 'TagList';\n\nconst TagListSkeleton: SkeletonComponent = ({ rootProps }) => {\n const styles = useStyles2(getSkeletonStyles);\n return (\n <div className={styles.container} {...rootProps}>\n <Tag.Skeleton />\n <Tag.Skeleton />\n </div>\n );\n};\n\n/**\n * List of tags with predefined margins and positioning.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-taglist--docs\n */\nexport const TagList = attachSkeleton(TagListComponent, TagListSkeleton);\n\nconst getSkeletonStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n gap: theme.spacing(1),\n }),\n});\n\nconst getStyles = (theme: GrafanaTheme2, isTruncated: boolean) => {\n return {\n wrapper: css({\n position: 'relative',\n alignItems: isTruncated ? 'center' : 'unset',\n display: 'flex',\n flex: '1 1 auto',\n flexWrap: 'wrap',\n flexShrink: isTruncated ? 0 : 1,\n justifyContent: 'flex-end',\n gap: '6px',\n }),\n moreTagsLabel: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.size.sm,\n }),\n li: css({\n listStyle: 'none',\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nexport function getModalStyles(theme: GrafanaTheme2) {\n return {\n myTable: css({\n maxHeight: '204px',\n overflowY: 'auto',\n marginTop: '11px',\n marginBottom: '28px',\n borderRadius: theme.shape.radius.default,\n border: `1px solid ${theme.colors.action.hover}`,\n background: theme.colors.background.primary,\n color: theme.colors.text.secondary,\n fontSize: theme.typography.h6.fontSize,\n width: '100%',\n\n thead: {\n color: '#538ade',\n fontSize: theme.typography.bodySmall.fontSize,\n },\n\n 'th, td': {\n padding: '6px 13px',\n height: theme.spacing(4),\n },\n\n 'tbody > tr:nth-child(odd)': {\n background: theme.colors.background.secondary,\n },\n }),\n noteTextbox: css({\n marginBottom: theme.spacing(4),\n }),\n textInfo: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.size.sm,\n }),\n dashboardSearch: css({\n marginTop: theme.spacing(2),\n }),\n modal: css({\n width: '500px',\n }),\n modalText: css({\n fontSize: theme.typography.h4.fontSize,\n color: theme.colors.text.primary,\n marginBottom: theme.spacing(4),\n paddingTop: theme.spacing(2),\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport cx from 'classnames';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, useStyles2 } from '@grafana/ui';\n\nconst selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard;\n\nexport const UnsupportedDataSourcesAlert = ({ unsupportedDataSources }: { unsupportedDataSources: string }) => {\n const styles = useStyles2(getStyles);\n\n return (\n <Alert\n severity=\"warning\"\n title={t('public-dashboard.modal-alerts.unsupported-data-source-alert-title', 'Unsupported data sources')}\n data-testid={selectors.UnsupportedDataSourcesWarningAlert}\n bottomSpacing={0}\n >\n <p className={styles.unsupportedDataSourceDescription}>\n <Trans i18nKey=\"public-dashboard.share-externally.unsupported-data-source-alert-desc\">\n There are data sources in this dashboard that are unsupported for shared dashboards. Panels that use these\n data sources may not function properly: {{ unsupportedDataSources }}.\n </Trans>\n </p>\n <a\n href={\n 'https://grafana.com/docs/grafana/next/dashboards/share-dashboards-panels/shared-dashboards/#supported-data-sources'\n }\n target=\"blank\"\n className={cx('text-link', styles.unsupportedDataSourceDescription)}\n >\n <Trans i18nKey=\"public-dashboard.modal-alerts.unsupport-data-source-alert-readmore-link\">\n Read more about supported data sources\n </Trans>\n </a>\n </Alert>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n unsupportedDataSourceDescription: css({\n color: theme.colors.text.secondary,\n marginBottom: theme.spacing(1),\n }),\n});\n","import { noop } from 'lodash';\nimport { FormEvent } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { DataSourceInstanceSettings, MetricFindValue, getDataSourceRef } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { AdHocFiltersVariable, SceneVariable } from '@grafana/scenes';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { AdHocVariableForm } from '../components/AdHocVariableForm';\n\ninterface AdHocFiltersVariableEditorProps {\n variable: AdHocFiltersVariable;\n onRunQuery: (variable: AdHocFiltersVariable) => void;\n inline?: boolean;\n}\n\nexport function AdHocFiltersVariableEditor(props: AdHocFiltersVariableEditorProps) {\n const { variable } = props;\n const { datasource: datasourceRef, defaultKeys, allowCustomValue } = variable.useState();\n\n const { value: datasourceSettings } = useAsync(async () => {\n return await getDataSourceSrv().get(datasourceRef);\n }, [datasourceRef]);\n\n const message = datasourceSettings?.getTagKeys\n ? 'Ad hoc filters are applied automatically to all queries that target this data source'\n : 'This data source does not support ad hoc filters.';\n\n const onDataSourceChange = (ds: DataSourceInstanceSettings) => {\n const dsRef = getDataSourceRef(ds);\n\n variable.setState({\n datasource: dsRef,\n supportsMultiValueOperators: ds.meta.multiValueFilterOperators,\n });\n };\n\n const onDefaultKeysChange = (defaultKeys?: MetricFindValue[]) => {\n variable.setState({\n defaultKeys,\n });\n };\n\n const onAllowCustomValueChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allowCustomValue: event.currentTarget.checked });\n };\n\n return (\n <AdHocVariableForm\n datasource={datasourceRef ?? undefined}\n infoText={message}\n allowCustomValue={allowCustomValue}\n onDataSourceChange={onDataSourceChange}\n defaultKeys={defaultKeys}\n onDefaultKeysChange={onDefaultKeysChange}\n onAllowCustomValueChange={onAllowCustomValueChange}\n inline={props.inline}\n datasourceSupported={datasourceSettings?.getTagKeys ? true : false}\n />\n );\n}\n\nexport function getAdHocFilterOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof AdHocFiltersVariable)) {\n console.warn('getAdHocFilterOptions: variable is not an AdHocFiltersVariable');\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n id: `variable-${variable.state.name}-value`,\n render: () => <AdHocFiltersVariableEditor variable={variable} onRunQuery={noop} inline={true} />,\n }),\n ];\n}\n","import { FormEvent } from 'react';\nimport { lastValueFrom } from 'rxjs';\n\nimport { t } from '@grafana/i18n';\nimport { ConstantVariable, SceneVariable } from '@grafana/scenes';\nimport { Input } from '@grafana/ui';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { ConstantVariableForm } from '../components/ConstantVariableForm';\n\ninterface ConstantVariableEditorProps {\n variable: ConstantVariable;\n}\n\nexport function ConstantVariableEditor({ variable }: ConstantVariableEditorProps) {\n const { value } = variable.useState();\n\n const onConstantValueChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ value: event.currentTarget.value });\n };\n\n return <ConstantVariableForm constantValue={value.toString()} onChange={onConstantValueChange} />;\n}\n\nexport function getConstantVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof ConstantVariable)) {\n console.warn('getConstantVariableOptions: variable is not a ConstantVariable');\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n title: t('dashboard-scene.constant-variable-form.label-value', 'Value'),\n id: 'constant-variable-value',\n render: (descriptor) => <ConstantValueInput id={descriptor.props.id} variable={variable} />,\n }),\n ];\n}\n\nfunction ConstantValueInput({ variable, id }: { variable: ConstantVariable; id?: string }) {\n const { value } = variable.useState();\n\n const onBlur = async (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ value: event.currentTarget.value });\n await lastValueFrom(variable.validateAndUpdate!());\n };\n\n return (\n <Input\n id={id}\n defaultValue={value.toString()}\n onBlur={onBlur}\n placeholder={t('dashboard-scene.constant-variable-form.placeholder-your-metric-prefix', 'Your metric prefix')}\n />\n );\n}\n","import { forwardRef, useCallback } from 'react';\nimport { lastValueFrom } from 'rxjs';\n\nimport { CustomVariable, VariableValueOption, VariableValueSingle } from '@grafana/scenes';\n\nimport { VariableStaticOptionsForm, VariableStaticOptionsFormRef } from '../../components/VariableStaticOptionsForm';\n\ninterface ValuesBuilderProps {\n variable: CustomVariable;\n}\n\nexport const ValuesBuilder = forwardRef<VariableStaticOptionsFormRef, ValuesBuilderProps>(function (\n { variable }: ValuesBuilderProps,\n ref\n) {\n const { query } = variable.useState();\n\n const options = variable.transformCsvStringToOptions(query, false).map(({ label, value }) => ({\n value,\n label: value === label ? '' : label,\n }));\n\n const escapeEntities = useCallback((text: VariableValueSingle) => String(text).trim().replaceAll(',', '\\\\,'), []);\n\n const formatOption = useCallback(\n (option: VariableValueOption) => {\n if (!option.label || option.label === option.value) {\n return escapeEntities(option.value);\n }\n\n return `${escapeEntities(option.label)} : ${escapeEntities(String(option.value))}`;\n },\n [escapeEntities]\n );\n\n const generateQuery = useCallback(\n (options: VariableValueOption[]) => options.map(formatOption).join(', '),\n [formatOption]\n );\n\n const handleOptionsChange = useCallback(\n async (options: VariableValueOption[]) => {\n variable.setState({ query: generateQuery(options) });\n await lastValueFrom(variable.validateAndUpdate!());\n },\n [variable, generateQuery]\n );\n\n return <VariableStaticOptionsForm options={options} onChange={handleOptionsChange} ref={ref} isInModal />;\n});\n\nValuesBuilder.displayName = 'ValuesBuilder';\n","import { CustomVariable } from '@grafana/scenes';\n\nimport { VariableValuesPreview } from '../../components/VariableValuesPreview';\nimport { hasVariableOptions } from '../../utils';\n\nexport function ValuesPreview({ variable }: { variable: CustomVariable }) {\n // Workaround to toggle a component refresh when values change so that the preview is updated\n variable.useState();\n\n const isHasVariableOptions = hasVariableOptions(variable);\n\n return isHasVariableOptions ? <VariableValuesPreview options={variable.getOptionsForSelect(false)} /> : null;\n}\n","import { useCallback, useRef } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { CustomVariable } from '@grafana/scenes';\nimport { Button, Modal, Stack } from '@grafana/ui';\n\nimport { VariableStaticOptionsFormRef } from '../../components/VariableStaticOptionsForm';\nimport { VariableStaticOptionsFormAddButton } from '../../components/VariableStaticOptionsFormAddButton';\n\nimport { ValuesBuilder } from './ValuesBuilder';\nimport { ValuesPreview } from './ValuesPreview';\n\ninterface ModalEditorProps {\n variable: CustomVariable;\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function ModalEditor({ variable, isOpen, onClose }: ModalEditorProps) {\n const formRef = useRef<VariableStaticOptionsFormRef | null>(null);\n\n const handleOnAdd = useCallback(() => formRef.current?.addItem(), []);\n\n return (\n <Modal\n title={t('dashboard.edit-pane.variable.custom-options.modal-title', 'Custom Variable')}\n isOpen={isOpen}\n onDismiss={onClose}\n >\n <Stack direction=\"column\" gap={2}>\n <ValuesBuilder variable={variable} ref={formRef} />\n <ValuesPreview variable={variable} />\n </Stack>\n <Modal.ButtonRow leftItems={<VariableStaticOptionsFormAddButton onAdd={handleOnAdd} />}>\n <Button\n variant=\"secondary\"\n fill=\"outline\"\n onClick={onClose}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.CustomVariable.closeButton}\n >\n <Trans i18nKey=\"dashboard.edit-pane.variable.custom-options.close\">Close</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n","import { useState } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { CustomVariable } from '@grafana/scenes';\nimport { Box, Button } from '@grafana/ui';\n\nimport { ModalEditor } from './ModalEditor';\n\ninterface PaneItemProps {\n variable: CustomVariable;\n id?: string;\n}\n\nexport function PaneItem({ variable }: PaneItemProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n <>\n <Box display=\"flex\" direction=\"column\" paddingBottom={1}>\n <Button\n tooltip={t(\n 'dashboard.edit-pane.variable.open-editor-tooltip',\n 'For more variable options open variable editor'\n )}\n onClick={() => setIsOpen(true)}\n size=\"sm\"\n fullWidth\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.CustomVariable.optionsOpenButton}\n >\n <Trans i18nKey=\"dashboard.edit-pane.variable.open-editor\">Open variable editor</Trans>\n </Button>\n </Box>\n <ModalEditor variable={variable} isOpen={isOpen} onClose={() => setIsOpen(false)} />\n </>\n );\n}\n","import { FormEvent, useCallback } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { CustomVariable, SceneVariable } from '@grafana/scenes';\n\nimport { OptionsPaneItemDescriptor } from '../../../../../dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport { CustomVariableForm } from '../../components/CustomVariableForm';\n\nimport { PaneItem } from './PaneItem';\n\ninterface CustomVariableEditorProps {\n variable: CustomVariable;\n onRunQuery: () => void;\n}\n\nexport function CustomVariableEditor({ variable, onRunQuery }: CustomVariableEditorProps) {\n const { query, isMulti, allValue, includeAll, allowCustomValue } = variable.useState();\n\n const onMultiChange = useCallback(\n (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ isMulti: event.currentTarget.checked });\n },\n [variable]\n );\n\n const onIncludeAllChange = useCallback(\n (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ includeAll: event.currentTarget.checked });\n },\n [variable]\n );\n\n const onQueryChange = useCallback(\n (event: FormEvent<HTMLTextAreaElement>) => {\n variable.setState({ query: event.currentTarget.value });\n onRunQuery();\n },\n [variable, onRunQuery]\n );\n\n const onAllValueChange = useCallback(\n (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allValue: event.currentTarget.value });\n },\n [variable]\n );\n\n const onAllowCustomValueChange = useCallback(\n (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allowCustomValue: event.currentTarget.checked });\n },\n [variable]\n );\n\n return (\n <CustomVariableForm\n query={query ?? ''}\n multi={!!isMulti}\n allValue={allValue ?? ''}\n includeAll={!!includeAll}\n allowCustomValue={allowCustomValue}\n onMultiChange={onMultiChange}\n onIncludeAllChange={onIncludeAllChange}\n onQueryChange={onQueryChange}\n onAllValueChange={onAllValueChange}\n onAllowCustomValueChange={onAllowCustomValueChange}\n />\n );\n}\n\nexport function getCustomVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof CustomVariable)) {\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.custom-options.values', 'Values separated by comma'),\n id: 'custom-variable-values',\n render: ({ props }) => <PaneItem id={props.id} variable={variable} />,\n }),\n ];\n}\n","import { t } from '@grafana/i18n';\nimport { CustomVariable, SceneVariable } from '@grafana/scenes';\n\nimport { OptionsPaneItemDescriptor } from '../../../../../dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { PaneItem } from './PaneItem';\n\nexport function getCustomVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof CustomVariable)) {\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.custom-options.values', 'Values separated by comma'),\n id: 'custom-variable-values',\n render: ({ props }) => <PaneItem id={props.id} variable={variable} />,\n }),\n ];\n}\n","import React, { FormEvent } from 'react';\nimport { lastValueFrom } from 'rxjs';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { DataSourceVariable, SceneVariable } from '@grafana/scenes';\nimport { Combobox, ComboboxOption, Input } from '@grafana/ui';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { DataSourceVariableForm } from '../components/DataSourceVariableForm';\nimport { getOptionDataSourceTypes } from '../utils';\n\ninterface DataSourceVariableEditorProps {\n variable: DataSourceVariable;\n onRunQuery: () => void;\n}\n\nexport function DataSourceVariableEditor({ variable, onRunQuery }: DataSourceVariableEditorProps) {\n const { pluginId, regex, isMulti, allValue, includeAll, allowCustomValue } = variable.useState();\n\n const optionTypes = getOptionDataSourceTypes();\n\n const onChangeType = (option: SelectableValue) => {\n variable.setState({\n pluginId: option.value,\n });\n onRunQuery();\n };\n\n const onRegExChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({\n regex: event.currentTarget.value,\n });\n onRunQuery();\n };\n\n const onMultiChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({\n isMulti: event.currentTarget.checked,\n });\n };\n\n const onIncludeAllChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ includeAll: event.currentTarget.checked });\n };\n\n const onAllValueChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allValue: event.currentTarget.value });\n };\n\n const onAllowCustomValueChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allowCustomValue: event.currentTarget.checked });\n };\n\n return (\n <DataSourceVariableForm\n query={pluginId}\n regex={regex}\n multi={isMulti || false}\n allValue={allValue}\n includeAll={includeAll || false}\n optionTypes={optionTypes}\n allowCustomValue={allowCustomValue}\n onChange={onChangeType}\n onRegExBlur={onRegExChange}\n onMultiChange={onMultiChange}\n onIncludeAllChange={onIncludeAllChange}\n onAllValueChange={onAllValueChange}\n onAllowCustomValueChange={onAllowCustomValueChange}\n />\n );\n}\n\nexport function getDataSourceVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof DataSourceVariable)) {\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.datasource-options.type', 'Type'),\n id: 'datasource-options-type',\n render: ({ props }) => <DataSourceTypeSelect id={props.id} variable={variable} />,\n }),\n new OptionsPaneItemDescriptor({\n title: t('dashboard.edit-pane.variable.datasource-options.name-filter', 'Name filter'),\n id: 'datasource-options-name-filter',\n description: t(\n 'dashboard.edit-pane.variable.datasource-options.name-filter-description',\n 'Regex filter for which data source instances to include. Leave empty for all.'\n ),\n render: ({ props }) => <DataSourceNameFilter id={props.id} variable={variable} />,\n }),\n ];\n}\n\ninterface InputProps {\n variable: DataSourceVariable;\n id?: string;\n}\n\nfunction DataSourceTypeSelect({ variable, id }: InputProps) {\n const { pluginId } = variable.useState();\n const options = getOptionDataSourceTypes();\n\n const onChange = async (value: ComboboxOption<string>) => {\n variable.setState({ pluginId: value.value });\n await lastValueFrom(variable.validateAndUpdate!());\n };\n\n return (\n <Combobox\n id={id}\n options={options}\n value={pluginId}\n onChange={onChange}\n placeholder={t('dashboard.edit-pane.variable.datasource-options.type-placeholder', 'Choose data source type')}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.DatasourceVariable.datasourceSelect}\n />\n );\n}\n\nfunction DataSourceNameFilter({ variable, id }: InputProps) {\n const { regex } = variable.useState();\n\n const onBlur = async (evt: React.FormEvent<HTMLInputElement>) => {\n variable.setState({ regex: evt.currentTarget.value });\n await lastValueFrom(variable.validateAndUpdate!());\n };\n\n return (\n <Input\n id={id}\n defaultValue={regex}\n onBlur={onBlur}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.DatasourceVariable.nameFilter}\n placeholder={t('dashboard.edit-pane.variable.datasource-options.name-filter-placeholder', 'Example: /^prod/')}\n />\n );\n}\n","import { FormEvent, useCallback } from 'react';\n\nimport { DataSourceInstanceSettings, MetricFindValue, readCSV } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { EditorField } from '@grafana/plugin-ui';\nimport { DataSourceRef } from '@grafana/schema';\nimport { Alert, Box, CodeEditor, Field, Switch } from '@grafana/ui';\nimport { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker';\n\nimport { VariableCheckboxField } from './VariableCheckboxField';\nimport { VariableLegend } from './VariableLegend';\n\nexport interface GroupByVariableFormProps {\n datasource?: DataSourceRef;\n onDataSourceChange: (dsSettings: DataSourceInstanceSettings) => void;\n onDefaultOptionsChange: (options?: MetricFindValue[]) => void;\n infoText?: string;\n defaultOptions?: MetricFindValue[];\n allowCustomValue: boolean;\n onAllowCustomValueChange: (event: FormEvent<HTMLInputElement>) => void;\n inline?: boolean;\n datasourceSupported: boolean;\n}\n\nexport function GroupByVariableForm({\n datasource,\n defaultOptions,\n infoText,\n onDataSourceChange,\n onDefaultOptionsChange,\n allowCustomValue,\n onAllowCustomValueChange,\n inline,\n datasourceSupported,\n}: GroupByVariableFormProps) {\n const updateDefaultOptions = useCallback(\n (csvContent: string) => {\n const df = readCSV('key,value\\n' + csvContent)[0];\n const options = [];\n for (let i = 0; i < df.length; i++) {\n options.push({ text: df.fields[0].values[i], value: df.fields[1].values[i] });\n }\n\n onDefaultOptionsChange(options);\n },\n [onDefaultOptionsChange]\n );\n\n return (\n <>\n {!inline && (\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.group-by-variable-form.group-by-options\">Group by options</Trans>\n </VariableLegend>\n )}\n\n <Box marginBottom={2}>\n <EditorField\n label={t('dashboard-scene.group-by-variable-form.label-data-source', 'Data source')}\n htmlFor=\"data-source-picker\"\n tooltip={infoText}\n >\n <DataSourcePicker current={datasource} onChange={onDataSourceChange} width={30} variables={true} noDefault />\n </EditorField>\n </Box>\n\n {!datasourceSupported ? (\n <Alert\n title={t(\n 'dashboard-scene.group-by-variable-form.alert-not-supported',\n 'This data source does not support group by variables'\n )}\n severity=\"warning\"\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.GroupByVariable.infoText}\n />\n ) : null}\n\n {datasourceSupported && (\n <>\n <Field\n label={t(\n 'dashboard-scene.group-by-variable-form.label-use-static-group-by-dimensions',\n 'Use static group dimensions'\n )}\n description={t(\n 'dashboard-scene.group-by-variable-form.description-provide-dimensions-as-csv-dimension-name-dimension-id',\n 'Provide dimensions as CSV: {{name}}, {{value}}',\n { name: 'dimensionName', value: 'dimensionId' }\n )}\n >\n <Switch\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.GroupByVariable.modeToggle}\n value={defaultOptions !== undefined}\n onChange={(e) => {\n if (defaultOptions === undefined) {\n onDefaultOptionsChange([]);\n } else {\n onDefaultOptionsChange(undefined);\n }\n }}\n />\n </Field>\n\n {defaultOptions !== undefined && (\n <CodeEditor\n height={300}\n language=\"csv\"\n value={defaultOptions.map((o) => `${o.text},${o.value}`).join('\\n')}\n onBlur={updateDefaultOptions}\n onSave={updateDefaultOptions}\n showMiniMap={false}\n showLineNumbers={true}\n />\n )}\n </>\n )}\n\n {datasourceSupported && !inline && onAllowCustomValueChange && (\n <VariableCheckboxField\n value={allowCustomValue}\n name={t('dashboard-scene.group-by-variable-form.name-allow-custom-values', 'Allow custom values')}\n description={t(\n 'dashboard-scene.group-by-variable-form.description-enables-users-custom-values',\n 'Enables users to add custom values to the list'\n )}\n onChange={onAllowCustomValueChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.selectionOptionsAllowCustomValueSwitch}\n />\n )}\n </>\n );\n}\n","import { noop } from 'lodash';\nimport { FormEvent } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { DataSourceInstanceSettings, MetricFindValue, getDataSourceRef } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { GroupByVariable, SceneVariable } from '@grafana/scenes';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { GroupByVariableForm } from '../components/GroupByVariableForm';\n\ninterface GroupByVariableEditorProps {\n variable: GroupByVariable;\n onRunQuery: () => void;\n inline?: boolean;\n}\n\nexport function GroupByVariableEditor(props: GroupByVariableEditorProps) {\n const { variable, onRunQuery, inline } = props;\n const { datasource: datasourceRef, defaultOptions, allowCustomValue = true } = variable.useState();\n\n const { value: datasource } = useAsync(async () => {\n return await getDataSourceSrv().get(datasourceRef);\n }, [variable.state]);\n\n const supported = datasource?.getTagKeys !== undefined;\n const message = supported\n ? 'Group by dimensions are applied automatically to all queries that target this data source'\n : 'This data source does not support group by variable yet.';\n\n const onDataSourceChange = async (ds: DataSourceInstanceSettings) => {\n const dsRef = getDataSourceRef(ds);\n\n variable.setState({ datasource: dsRef });\n onRunQuery();\n };\n\n const onDefaultOptionsChange = async (defaultOptions?: MetricFindValue[]) => {\n variable.setState({ defaultOptions });\n onRunQuery();\n };\n\n const onAllowCustomValueChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allowCustomValue: event.currentTarget.checked });\n };\n\n return (\n <GroupByVariableForm\n defaultOptions={defaultOptions}\n datasource={datasourceRef ?? undefined}\n infoText={datasourceRef ? message : undefined}\n onDataSourceChange={onDataSourceChange}\n onDefaultOptionsChange={onDefaultOptionsChange}\n allowCustomValue={allowCustomValue}\n onAllowCustomValueChange={onAllowCustomValueChange}\n inline={inline}\n datasourceSupported={supported}\n />\n );\n}\n\nexport function getGroupByVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof GroupByVariable)) {\n console.warn('getAdHocFilterOptions: variable is not an AdHocFiltersVariable');\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n id: `variable-${variable.state.name}-value`,\n render: () => <GroupByVariableEditor variable={variable} onRunQuery={noop} inline={true} />,\n }),\n ];\n}\n","import { noop } from 'lodash';\nimport { ChangeEvent, FormEvent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { IntervalVariable, SceneVariable } from '@grafana/scenes';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport {\n getIntervalsFromQueryString,\n getIntervalsQueryFromNewIntervalModel,\n} from 'app/features/dashboard-scene/utils/utils';\n\nimport { IntervalVariableForm } from '../components/IntervalVariableForm';\n\ninterface IntervalVariableEditorProps {\n variable: IntervalVariable;\n onRunQuery: () => void;\n inline?: boolean;\n}\n\nexport function IntervalVariableEditor({ variable, onRunQuery, inline }: IntervalVariableEditorProps) {\n const { intervals, autoStepCount, autoEnabled, autoMinInterval, value } = variable.useState();\n\n //transform intervals array into string\n const intervalsCombined = getIntervalsQueryFromNewIntervalModel(intervals);\n\n const onIntervalsChange = (event: FormEvent<HTMLInputElement>) => {\n const newIntervals = getIntervalsFromQueryString(event.currentTarget.value);\n // if the current value is not in the new intervals, set the value to the first interval\n const newValue = newIntervals.includes(value) ? value : newIntervals[0];\n\n variable.setState({\n intervals: newIntervals,\n value: newValue,\n });\n\n onRunQuery();\n };\n\n const onAutoCountChanged = (option: SelectableValue<number>) => {\n variable.setState({ autoStepCount: option.value });\n };\n\n const onAutoEnabledChange = (event: ChangeEvent<HTMLInputElement>) => {\n variable.setState({ autoEnabled: event.target.checked });\n };\n\n const onAutoMinIntervalChanged = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ autoMinInterval: event.currentTarget.value });\n };\n\n return (\n <IntervalVariableForm\n intervals={intervalsCombined}\n autoStepCount={autoStepCount}\n autoEnabled={autoEnabled}\n onAutoCountChanged={onAutoCountChanged}\n onIntervalsChange={onIntervalsChange}\n onAutoEnabledChange={onAutoEnabledChange}\n onAutoMinIntervalChanged={onAutoMinIntervalChanged}\n autoMinInterval={autoMinInterval}\n inline={inline}\n />\n );\n}\n\nexport function getIntervalVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof IntervalVariable)) {\n console.warn('getIntervalVariableOptions: variable is not an IntervalVariable');\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n id: `variable-${variable.state.name}-value`,\n render: () => <IntervalVariableEditor variable={variable} onRunQuery={noop} inline={true} />,\n }),\n ];\n}\n","import { useState, FormEvent } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { SelectableValue, DataSourceInstanceSettings, getDataSourceRef } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { QueryVariable, sceneGraph, SceneVariable } from '@grafana/scenes';\nimport { VariableRefresh, VariableSort } from '@grafana/schema';\nimport { Box, Button, Field, Modal, TextLink } from '@grafana/ui';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\nimport { QueryEditor } from 'app/features/dashboard-scene/settings/variables/components/QueryEditor';\nimport { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker';\nimport { getVariableQueryEditor } from 'app/features/variables/editor/getVariableQueryEditor';\nimport { QueryVariableRefreshSelect } from 'app/features/variables/query/QueryVariableRefreshSelect';\nimport { QueryVariableSortSelect } from 'app/features/variables/query/QueryVariableSortSelect';\nimport {\n QueryVariableStaticOptions,\n StaticOptionsOrderType,\n StaticOptionsType,\n} from 'app/features/variables/query/QueryVariableStaticOptions';\n\nimport { QueryVariableEditorForm } from '../components/QueryVariableForm';\nimport { VariableTextAreaField } from '../components/VariableTextAreaField';\nimport { VariableValuesPreview } from '../components/VariableValuesPreview';\nimport { hasVariableOptions } from '../utils';\n\ninterface QueryVariableEditorProps {\n variable: QueryVariable;\n onRunQuery: () => void;\n}\ntype VariableQueryType = QueryVariable['state']['query'];\n\nexport function QueryVariableEditor({ variable, onRunQuery }: QueryVariableEditorProps) {\n const {\n datasource,\n regex,\n sort,\n refresh,\n isMulti,\n includeAll,\n allValue,\n query,\n allowCustomValue,\n staticOptions,\n staticOptionsOrder,\n } = variable.useState();\n const { value: timeRange } = sceneGraph.getTimeRange(variable).useState();\n\n const onRegExChange = (event: React.FormEvent<HTMLTextAreaElement>) => {\n variable.setState({ regex: event.currentTarget.value });\n };\n const onSortChange = (sort: SelectableValue<VariableSort>) => {\n variable.setState({ sort: sort.value });\n };\n const onRefreshChange = (refresh: VariableRefresh) => {\n variable.setState({ refresh: refresh });\n };\n const onMultiChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ isMulti: event.currentTarget.checked });\n };\n const onIncludeAllChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ includeAll: event.currentTarget.checked });\n };\n const onAllValueChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allValue: event.currentTarget.value });\n };\n const onAllowCustomValueChange = (event: FormEvent<HTMLInputElement>) => {\n variable.setState({ allowCustomValue: event.currentTarget.checked });\n };\n const onDataSourceChange = (dsInstanceSettings: DataSourceInstanceSettings) => {\n const datasource = getDataSourceRef(dsInstanceSettings);\n\n if ((variable.state.datasource?.type || '') !== datasource.type) {\n variable.setState({ datasource, query: '', definition: '' });\n return;\n }\n\n variable.setState({ datasource });\n };\n const onQueryChange = (query: VariableQueryType) => {\n variable.setState({ query, definition: getQueryDef(query) });\n onRunQuery();\n };\n\n const onStaticOptionsChange = (staticOptions: StaticOptionsType) => {\n onRunQuery();\n variable.setState({ staticOptions });\n };\n\n const onStaticOptionsOrderChange = (staticOptionsOrder: StaticOptionsOrderType) => {\n onRunQuery();\n variable.setState({ staticOptionsOrder });\n };\n\n return (\n <QueryVariableEditorForm\n datasource={datasource ?? undefined}\n onDataSourceChange={onDataSourceChange}\n query={query}\n onQueryChange={onQueryChange}\n onLegacyQueryChange={onQueryChange}\n timeRange={timeRange}\n regex={regex}\n onRegExChange={onRegExChange}\n sort={sort}\n onSortChange={onSortChange}\n refresh={refresh}\n onRefreshChange={onRefreshChange}\n isMulti={!!isMulti}\n onMultiChange={onMultiChange}\n includeAll={!!includeAll}\n onIncludeAllChange={onIncludeAllChange}\n allValue={allValue ?? ''}\n onAllValueChange={onAllValueChange}\n allowCustomValue={allowCustomValue}\n onAllowCustomValueChange={onAllowCustomValueChange}\n staticOptions={staticOptions}\n staticOptionsOrder={staticOptionsOrder}\n onStaticOptionsChange={onStaticOptionsChange}\n onStaticOptionsOrderChange={onStaticOptionsOrderChange}\n />\n );\n}\n\nexport function getQueryVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof QueryVariable)) {\n console.warn('getQueryVariableOptions: variable is not a QueryVariable');\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n id: `variable-${variable.state.name}-value`,\n render: () => <ModalEditor variable={variable} />,\n }),\n ];\n}\n\nexport function ModalEditor({ variable }: { variable: QueryVariable }) {\n const [isOpen, setIsOpen] = useState(false);\n\n const onRunQuery = () => {\n variable.refreshOptions();\n };\n\n return (\n <>\n <Box display={'flex'} direction={'column'} paddingBottom={1}>\n <Button\n tooltip={t(\n 'dashboard.edit-pane.variable.open-editor-tooltip',\n 'For more variable options open variable editor'\n )}\n onClick={() => setIsOpen(true)}\n size=\"sm\"\n fullWidth\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsOpenButton}\n >\n <Trans i18nKey=\"dashboard.edit-pane.variable.open-editor\">Open variable editor</Trans>\n </Button>\n </Box>\n <Modal\n title={t('dashboard.edit-pane.variable.query-options.modal-title', 'Query Variable')}\n isOpen={isOpen}\n onDismiss={() => setIsOpen(false)}\n >\n <Editor variable={variable} />\n <Modal.ButtonRow>\n <Button\n variant=\"primary\"\n fill=\"outline\"\n onClick={onRunQuery}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.previewButton}\n >\n <Trans i18nKey=\"dashboard.edit-pane.variable.query-options.preview\">Preview</Trans>\n </Button>\n <Button\n variant=\"secondary\"\n fill=\"outline\"\n onClick={() => setIsOpen(false)}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.closeButton}\n >\n <Trans i18nKey=\"dashboard.edit-pane.variable.query-options.close\">Close</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n </>\n );\n}\n\nexport function Editor({ variable }: { variable: QueryVariable }) {\n const {\n datasource: datasourceRef,\n sort,\n refresh,\n query,\n regex,\n staticOptions,\n staticOptionsOrder,\n } = variable.useState();\n const { value: timeRange } = sceneGraph.getTimeRange(variable).useState();\n const { value: dsConfig } = useAsync(async () => {\n const datasource = await getDataSourceSrv().get(datasourceRef ?? '');\n const VariableQueryEditor = await getVariableQueryEditor(datasource);\n const defaultQuery = datasource?.variables?.getDefaultQuery?.();\n\n if (!query && defaultQuery) {\n const newQuery =\n typeof defaultQuery === 'string' ? defaultQuery : { ...defaultQuery, refId: defaultQuery.refId ?? 'A' };\n onQueryChange(newQuery);\n }\n\n return { datasource, VariableQueryEditor };\n }, [datasourceRef]);\n\n const { datasource: selectedDatasource, VariableQueryEditor } = dsConfig ?? {};\n\n const onDataSourceChange = (dsInstanceSettings: DataSourceInstanceSettings) => {\n const datasource = getDataSourceRef(dsInstanceSettings);\n\n if ((variable.state.datasource?.type || '') !== datasource.type) {\n variable.setState({ datasource, query: '', definition: '' });\n return;\n }\n\n variable.setState({ datasource });\n };\n\n const onQueryChange = (query: VariableQueryType) => {\n variable.setState({ query, definition: getQueryDef(query) });\n };\n\n const onRegExChange = (event: React.FormEvent<HTMLTextAreaElement>) => {\n variable.setState({ regex: event.currentTarget.value });\n };\n\n const onSortChange = (sort: SelectableValue<VariableSort>) => {\n variable.setState({ sort: sort.value });\n };\n const onRefreshChange = (refresh: VariableRefresh) => {\n variable.setState({ refresh: refresh });\n };\n const onStaticOptionsChange = (staticOptions: StaticOptionsType) => {\n variable.setState({ staticOptions });\n };\n const onStaticOptionsOrderChange = (staticOptionsOrder: StaticOptionsOrderType) => {\n variable.setState({ staticOptionsOrder });\n };\n\n const isHasVariableOptions = hasVariableOptions(variable);\n\n return (\n <div data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.editor}>\n <Field\n label={t('dashboard-scene.query-variable-editor-form.label-target-data-source', 'Target data source')}\n htmlFor=\"data-source-picker\"\n noMargin\n >\n <DataSourcePicker current={selectedDatasource} onChange={onDataSourceChange} variables={true} width={30} />\n </Field>\n\n {selectedDatasource && VariableQueryEditor && (\n <QueryEditor\n onQueryChange={onQueryChange}\n onLegacyQueryChange={onQueryChange}\n datasource={selectedDatasource}\n query={query}\n VariableQueryEditor={VariableQueryEditor}\n timeRange={timeRange}\n />\n )}\n\n <VariableTextAreaField\n defaultValue={regex ?? ''}\n name={t('dashboard-scene.query-variable-editor-form.name-regex', 'Regex')}\n description={\n <div>\n <Trans i18nKey=\"dashboard-scene.query-variable-editor-form.description-optional\">\n Optional, if you want to extract part of a series name or metric node segment.\n </Trans>\n <br />\n <Trans i18nKey=\"dashboard-scene.query-variable-editor-form.description-examples\">\n Named capture groups can be used to separate the display text and value (\n <TextLink\n href=\"https://grafana.com/docs/grafana/latest/variables/filter-variables-with-regex#filter-and-modify-using-named-text-and-value-capture-groups\"\n external\n >\n see examples\n </TextLink>\n ).\n </Trans>\n </div>\n }\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"/.*-(?<text>.*)-(?<value>.*)-.*/\"\n onBlur={onRegExChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsRegExInputV2}\n width={52}\n />\n\n <QueryVariableSortSelect\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsSortSelectV2}\n onChange={onSortChange}\n sort={sort}\n />\n\n <QueryVariableRefreshSelect\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsRefreshSelectV2}\n onChange={onRefreshChange}\n refresh={refresh}\n />\n\n {onStaticOptionsChange && onStaticOptionsOrderChange && (\n <QueryVariableStaticOptions\n staticOptions={staticOptions}\n staticOptionsOrder={staticOptionsOrder}\n onStaticOptionsChange={onStaticOptionsChange}\n onStaticOptionsOrderChange={onStaticOptionsOrderChange}\n />\n )}\n\n {isHasVariableOptions && <VariableValuesPreview options={variable.getOptionsForSelect(false)} />}\n </div>\n );\n}\n\nfunction getQueryDef(query: VariableQueryType) {\n if (typeof query === 'string') {\n return query;\n } else if (query.hasOwnProperty('query') && typeof query.query === 'string') {\n return query.query;\n } else {\n return '';\n }\n}\n","import { useState } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Field, Combobox, Input, type ComboboxOption, Stack } from '@grafana/ui';\n\nimport { VariableLegend } from './VariableLegend';\n\ninterface SwitchVariableFormProps {\n enabledValue: string;\n disabledValue: string;\n onEnabledValueChange: (value: string) => void;\n onDisabledValueChange: (value: string) => void;\n}\n\nconst VALUE_PAIR_OPTIONS: Array<ComboboxOption<string>> = [\n { label: 'True / False', value: 'boolean' },\n { label: '1 / 0', value: 'number' },\n { label: 'Yes / No', value: 'string' },\n { label: 'Custom', value: 'custom' },\n];\n\nexport function SwitchVariableForm({\n enabledValue,\n disabledValue,\n onEnabledValueChange,\n onDisabledValueChange,\n}: SwitchVariableFormProps) {\n const currentValuePairType = getCurrentValuePairType(enabledValue, disabledValue);\n const [isCustomValuePairType, setIsCustomValuePairType] = useState(currentValuePairType === 'custom');\n const [enabledValueInvalid, setEnabledValueInvalid] = useState<boolean>(false);\n const [disabledValueInvalid, setDisabledValueInvalid] = useState<boolean>(false);\n const identicalValuesErrorMessage = t(\n 'dashboard-scene.switch-variable-form.same-values-error',\n 'Enabled and disabled values cannot be the same'\n );\n\n const onValuePairTypeChange = (selection: ComboboxOption<string> | null) => {\n if (!selection?.value) {\n return;\n }\n\n setEnabledValueInvalid(false);\n setDisabledValueInvalid(false);\n\n switch (selection.value) {\n case 'boolean':\n onEnabledValueChange('true');\n onDisabledValueChange('false');\n setIsCustomValuePairType(false);\n break;\n case 'number':\n onEnabledValueChange('1');\n onDisabledValueChange('0');\n setIsCustomValuePairType(false);\n break;\n case 'string':\n onEnabledValueChange('yes');\n onDisabledValueChange('no');\n setIsCustomValuePairType(false);\n break;\n case 'custom':\n setIsCustomValuePairType(true);\n break;\n }\n };\n\n const handleEnabledValueChange = (newEnabledValue: string) => {\n const isInvalid = newEnabledValue === disabledValue;\n\n setEnabledValueInvalid(isInvalid);\n setDisabledValueInvalid(false);\n\n if (!isInvalid) {\n onEnabledValueChange(newEnabledValue);\n }\n };\n\n const handleDisabledValueChange = (newDisabledValue: string) => {\n const isInvalid = newDisabledValue === enabledValue;\n\n setDisabledValueInvalid(isInvalid);\n setEnabledValueInvalid(false);\n\n if (!isInvalid) {\n onDisabledValueChange(newDisabledValue);\n }\n };\n\n return (\n <>\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.switch-variable-form.switch-options\">Switch options</Trans>\n </VariableLegend>\n\n <Stack gap={2} direction=\"column\">\n <Field\n noMargin\n label={t('dashboard-scene.switch-variable-form.value-pair-type', 'Value pair type')}\n description={t(\n 'dashboard-scene.switch-variable-form.value-pair-type-description',\n 'Choose the type of values for the switch states'\n )}\n >\n <Combobox\n width={40}\n value={isCustomValuePairType ? 'custom' : currentValuePairType}\n options={VALUE_PAIR_OPTIONS}\n onChange={onValuePairTypeChange}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.SwitchVariable.valuePairTypeSelect}\n />\n </Field>\n\n {/* Custom value pair type */}\n {isCustomValuePairType && (\n <Stack gap={2} direction=\"column\">\n <Field\n noMargin\n label={t('dashboard-scene.switch-variable-form.enabled-value', 'Enabled value')}\n description={t(\n 'dashboard-scene.switch-variable-form.enabled-value-description',\n 'Value when switch is enabled'\n )}\n error={enabledValueInvalid && identicalValuesErrorMessage}\n invalid={enabledValueInvalid}\n >\n <Input\n width={40}\n defaultValue={enabledValue}\n onChange={(event) => {\n handleEnabledValueChange(event.currentTarget.value);\n }}\n placeholder={t(\n 'dashboard-scene.switch-variable-form.enabled-value-placeholder',\n 'e.g. On, Enabled, Active'\n )}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.SwitchVariable.enabledValueInput}\n />\n </Field>\n\n <Field\n noMargin\n label={t('dashboard-scene.switch-variable-form.disabled-value', 'Disabled value')}\n description={t(\n 'dashboard-scene.switch-variable-form.disabled-value-description',\n 'Value when switch is disabled'\n )}\n error={disabledValueInvalid && identicalValuesErrorMessage}\n invalid={disabledValueInvalid}\n >\n <Input\n width={40}\n defaultValue={disabledValue}\n onChange={(event) => handleDisabledValueChange(event.currentTarget.value)}\n placeholder={t(\n 'dashboard-scene.switch-variable-form.disabled-value-placeholder',\n 'e.g. Off, Disabled, Inactive'\n )}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.SwitchVariable.disabledValueInput}\n />\n </Field>\n </Stack>\n )}\n </Stack>\n </>\n );\n}\n\nfunction getCurrentValuePairType(enabledValue: string, disabledValue: string) {\n if (enabledValue === 'true' && disabledValue === 'false') {\n return 'boolean';\n }\n if (enabledValue === '1' && disabledValue === '0') {\n return 'number';\n }\n if (enabledValue === 'yes' && disabledValue === 'no') {\n return 'string';\n }\n return 'custom';\n}\n","import { SceneVariable, SwitchVariable } from '@grafana/scenes';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { SwitchVariableForm } from '../components/SwitchVariableForm';\n\ninterface SwitchVariableEditorProps {\n variable: SwitchVariable;\n}\n\nexport function SwitchVariableEditor({ variable }: SwitchVariableEditorProps) {\n const { value, enabledValue, disabledValue } = variable.useState();\n\n const onEnabledValueChange = (newEnabledValue: string) => {\n const isCurrentlyEnabled = value === enabledValue;\n\n if (isCurrentlyEnabled) {\n variable.setState({ enabledValue: newEnabledValue, value: newEnabledValue });\n } else {\n variable.setState({ enabledValue: newEnabledValue });\n }\n };\n\n const onDisabledValueChange = (newDisabledValue: string) => {\n const isCurrentlyDisabled = value === disabledValue;\n\n if (isCurrentlyDisabled) {\n variable.setState({ disabledValue: newDisabledValue, value: newDisabledValue });\n } else {\n variable.setState({ disabledValue: newDisabledValue });\n }\n };\n\n return (\n <SwitchVariableForm\n enabledValue={enabledValue}\n disabledValue={disabledValue}\n onEnabledValueChange={onEnabledValueChange}\n onDisabledValueChange={onDisabledValueChange}\n />\n );\n}\n\nexport function getSwitchVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof SwitchVariable)) {\n console.warn('getSwitchVariableOptions: variable is not a SwitchVariable');\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n id: `variable-${variable.state.name}-value`,\n render: () => <SwitchVariableEditor variable={variable} />,\n }),\n ];\n}\n","import { FormEvent } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { VariableLegend } from 'app/features/dashboard-scene/settings/variables/components/VariableLegend';\nimport { VariableTextField } from 'app/features/dashboard-scene/settings/variables/components/VariableTextField';\n\ninterface TextBoxVariableFormProps {\n value?: string;\n defaultValue?: string;\n onChange?: (event: FormEvent<HTMLInputElement>) => void;\n onBlur?: (event: FormEvent<HTMLInputElement>) => void;\n inline?: boolean;\n}\n\nexport function TextBoxVariableForm({ defaultValue, value, onChange, onBlur, inline }: TextBoxVariableFormProps) {\n return (\n <>\n {!inline && (\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.text-box-variable-form.text-options\">Text options</Trans>\n </VariableLegend>\n )}\n\n <VariableTextField\n value={value}\n defaultValue={defaultValue}\n name={inline ? undefined : t('dashboard-scene.text-box-variable.name-default-value', 'Default value')}\n placeholder={t('dashboard-scene.text-box-variable-form.placeholder-default-value-if-any', '(optional)')}\n onChange={onChange}\n onBlur={onBlur}\n width={30}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.TextBoxVariable.textBoxOptionsQueryInputV2}\n />\n </>\n );\n}\n","import { noop } from 'lodash';\nimport { FormEvent } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { SceneVariable, TextBoxVariable } from '@grafana/scenes';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { TextBoxVariableForm } from '../components/TextBoxVariableForm';\n\ninterface TextBoxVariableEditorProps {\n variable: TextBoxVariable;\n onChange: (variable: TextBoxVariable) => void;\n inline?: boolean;\n}\n\nexport function TextBoxVariableEditor({ variable, inline }: TextBoxVariableEditorProps) {\n const { value } = variable.useState();\n\n const onTextValueChange = (e: FormEvent<HTMLInputElement>) => {\n variable.setState({ value: e.currentTarget.value });\n };\n\n return <TextBoxVariableForm defaultValue={value} onBlur={onTextValueChange} inline={inline} />;\n}\n\nexport function getTextBoxVariableOptions(variable: SceneVariable): OptionsPaneItemDescriptor[] {\n if (!(variable instanceof TextBoxVariable)) {\n console.warn('getTextBoxVariableOptions: variable is not a TextBoxVariable');\n return [];\n }\n\n return [\n new OptionsPaneItemDescriptor({\n title: t('dashboard-scene.textbox-variable-form.label-value', 'Value'),\n id: `variable-${variable.state.name}-value`,\n render: () => <TextBoxVariableEditor onChange={noop} variable={variable} inline={true} />,\n }),\n ];\n}\n","import { chain } from 'lodash';\n\nimport { DataSourceInstanceSettings, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, getDataSourceSrv } from '@grafana/runtime';\nimport {\n ConstantVariable,\n CustomVariable,\n DataSourceVariable,\n IntervalVariable,\n TextBoxVariable,\n QueryVariable,\n GroupByVariable,\n SceneVariable,\n MultiValueVariable,\n sceneUtils,\n SceneObject,\n AdHocFiltersVariable,\n SceneVariableState,\n SceneVariableSet,\n SwitchVariable,\n} from '@grafana/scenes';\nimport { VariableHide, VariableType } from '@grafana/schema';\nimport { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';\n\nimport { getIntervalsQueryFromNewIntervalModel } from '../../utils/utils';\n\nimport { AdHocFiltersVariableEditor, getAdHocFilterOptions } from './editors/AdHocFiltersVariableEditor';\nimport { ConstantVariableEditor, getConstantVariableOptions } from './editors/ConstantVariableEditor';\nimport { CustomVariableEditor } from './editors/CustomVariableEditor/CustomVariableEditor';\nimport { getCustomVariableOptions } from './editors/CustomVariableEditor/getCustomVariableOptions';\nimport { DataSourceVariableEditor, getDataSourceVariableOptions } from './editors/DataSourceVariableEditor';\nimport { getGroupByVariableOptions, GroupByVariableEditor } from './editors/GroupByVariableEditor';\nimport { getIntervalVariableOptions, IntervalVariableEditor } from './editors/IntervalVariableEditor';\nimport { getQueryVariableOptions, QueryVariableEditor } from './editors/QueryVariableEditor';\nimport { getSwitchVariableOptions, SwitchVariableEditor } from './editors/SwitchVariableEditor';\nimport { TextBoxVariableEditor, getTextBoxVariableOptions } from './editors/TextBoxVariableEditor';\n\ninterface EditableVariableConfig {\n name: string;\n description: string;\n editor: React.ComponentType<any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n getOptions?: (variable: SceneVariable) => OptionsPaneItemDescriptor[];\n}\n\n//exclude system variable type and snapshot variable type\nexport type EditableVariableType = Exclude<VariableType, 'system' | 'snapshot'>;\n\nexport function isEditableVariableType(type: VariableType): type is EditableVariableType {\n return type !== 'system';\n}\n\nexport const getEditableVariables: () => Record<EditableVariableType, EditableVariableConfig> = () => ({\n custom: {\n name: t('dashboard-scene.get-editable-variables.name.custom', 'Custom'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.values-are-static-and-defined-manually',\n 'Values are static and defined manually'\n ),\n editor: CustomVariableEditor,\n getOptions: getCustomVariableOptions,\n },\n query: {\n name: t('dashboard-scene.get-editable-variables.name.query', 'Query'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.values-fetched-source-query',\n 'Values are fetched from a data source query'\n ),\n editor: QueryVariableEditor,\n getOptions: getQueryVariableOptions,\n },\n constant: {\n name: t('dashboard-scene.get-editable-variables.name.constant', 'Constant'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.hidden-constant-variable',\n 'A hidden constant variable, useful for metric prefixes in dashboards you want to share'\n ),\n editor: ConstantVariableEditor,\n getOptions: getConstantVariableOptions,\n },\n interval: {\n name: t('dashboard-scene.get-editable-variables.name.interval', 'Interval'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.values-timespans',\n 'Values are timespans, ex 1m, 1h, 1d'\n ),\n editor: IntervalVariableEditor,\n getOptions: getIntervalVariableOptions,\n },\n datasource: {\n name: t('dashboard-scene.get-editable-variables.name.data-source', 'Data source'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.dynamically-switch-source-multiple-panels',\n 'Dynamically switch the data source for multiple panels'\n ),\n editor: DataSourceVariableEditor,\n getOptions: getDataSourceVariableOptions,\n },\n adhoc: {\n name: t('dashboard-scene.get-editable-variables.name.ad-hoc-filters', 'Ad hoc filters'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.add-keyvalue-filters-on-the-fly',\n 'Add key/value filters on the fly'\n ),\n editor: AdHocFiltersVariableEditor,\n getOptions: getAdHocFilterOptions,\n },\n groupby: {\n name: t('dashboard-scene.get-editable-variables.name.group-by', 'Group by'),\n description: t('dashboard-scene.get-editable-variables.description.group', 'Add keys to group by on the fly'),\n editor: GroupByVariableEditor,\n getOptions: getGroupByVariableOptions,\n },\n textbox: {\n name: t('dashboard-scene.get-editable-variables.name.textbox', 'Textbox'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.users-enter-arbitrary-strings-textbox',\n 'Users can enter any arbitrary strings in a textbox'\n ),\n editor: TextBoxVariableEditor,\n getOptions: getTextBoxVariableOptions,\n },\n switch: {\n name: t('dashboard-scene.get-editable-variables.name.switch', 'Switch'),\n description: t(\n 'dashboard-scene.get-editable-variables.description.users-enter-arbitrary-strings-switch',\n 'A variable that can be toggled on and off'\n ),\n editor: SwitchVariableEditor,\n getOptions: getSwitchVariableOptions,\n },\n});\n\nexport function getEditableVariableDefinition(type: string): EditableVariableConfig {\n const editableVariables = getEditableVariables();\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const editableVariable = editableVariables[type as EditableVariableType];\n if (!editableVariable) {\n throw new Error(`Variable type ${type} not found`);\n }\n\n return editableVariable;\n}\n\nexport const EDITABLE_VARIABLES_SELECT_ORDER: EditableVariableType[] = [\n 'query',\n 'custom',\n 'textbox',\n 'constant',\n 'datasource',\n 'interval',\n 'adhoc',\n 'switch',\n 'groupby',\n];\n\nexport function getVariableTypeSelectOptions(): Array<SelectableValue<EditableVariableType>> {\n const editableVariables = getEditableVariables();\n const results = EDITABLE_VARIABLES_SELECT_ORDER.map((variableType) => ({\n label: editableVariables[variableType].name,\n value: variableType,\n description: editableVariables[variableType].description,\n }));\n\n if (!config.featureToggles.groupByVariable) {\n // Remove group by variable type if feature toggle is off\n return results.filter((option) => option.value !== 'groupby');\n }\n\n return results;\n}\n\nexport function getVariableEditor(type: EditableVariableType) {\n const editableVariables = getEditableVariables();\n return editableVariables[type].editor;\n}\n\ninterface CommonVariableProperties {\n name: string;\n label?: string;\n}\n\nexport function getVariableScene(type: EditableVariableType, initialState: CommonVariableProperties) {\n switch (type) {\n case 'custom':\n return new CustomVariable(initialState);\n case 'query':\n return new QueryVariable(initialState);\n case 'constant':\n return new ConstantVariable({ ...initialState, hide: VariableHide.hideVariable });\n case 'interval':\n return new IntervalVariable(initialState);\n case 'datasource':\n return new DataSourceVariable(initialState);\n case 'adhoc':\n return new AdHocFiltersVariable({\n ...initialState,\n layout: config.featureToggles.newFiltersUI ? 'combobox' : undefined,\n });\n case 'groupby':\n return new GroupByVariable(initialState);\n case 'textbox':\n return new TextBoxVariable(initialState);\n case 'switch':\n return new SwitchVariable(initialState);\n }\n}\n\nexport function getVariableDefault(variables: Array<SceneVariable<SceneVariableState>>) {\n const defaultVariableType = 'query';\n const nextVariableIdName = getNextAvailableId(defaultVariableType, variables);\n return new QueryVariable({\n name: nextVariableIdName,\n });\n}\n\nexport function getNextAvailableId(type: VariableType, variables: Array<SceneVariable<SceneVariableState>>): string {\n let counter = 0;\n let nextId = `${type}${counter}`;\n\n while (variables.find((variable) => variable.state.name === nextId)) {\n nextId = `${type}${++counter}`;\n }\n\n return nextId;\n}\n\nexport function hasVariableOptions(variable: SceneVariable): variable is MultiValueVariable {\n // variable options can be defined by state.options or state.intervals in case of interval variable\n return 'options' in variable.state || 'intervals' in variable.state;\n}\n\nexport function getDefinition(model: SceneVariable): string {\n let definition = '';\n\n if (model instanceof QueryVariable) {\n definition = model.state.definition || (typeof model.state.query === 'string' ? model.state.query : '');\n } else if (model instanceof DataSourceVariable) {\n definition = String(model.state.pluginId);\n } else if (model instanceof CustomVariable) {\n definition = model.state.query;\n } else if (model instanceof IntervalVariable) {\n definition = getIntervalsQueryFromNewIntervalModel(model.state.intervals);\n } else if (model instanceof TextBoxVariable || model instanceof ConstantVariable) {\n definition = String(model.state.value);\n }\n\n return definition;\n}\n\nexport function getOptionDataSourceTypes() {\n const datasources = getDataSourceSrv().getList({ metrics: true, variables: true });\n\n const optionTypes = chain(datasources)\n .uniqBy('meta.id')\n .map((ds: DataSourceInstanceSettings) => {\n return { label: ds.meta.name, value: ds.meta.id };\n })\n .value();\n\n return optionTypes;\n}\n\nexport function isSceneVariable(sceneObject: SceneObject): sceneObject is SceneVariable {\n return 'type' in sceneObject.state && 'getValue' in sceneObject;\n}\n\nexport function isSceneVariableInstance(sceneObject: SceneObject): sceneObject is SceneVariable {\n if (!isSceneVariable(sceneObject)) {\n return false;\n }\n\n return (\n sceneUtils.isAdHocVariable(sceneObject) ||\n sceneUtils.isConstantVariable(sceneObject) ||\n sceneUtils.isCustomVariable(sceneObject) ||\n sceneUtils.isDataSourceVariable(sceneObject) ||\n sceneUtils.isIntervalVariable(sceneObject) ||\n sceneUtils.isQueryVariable(sceneObject) ||\n sceneUtils.isTextBoxVariable(sceneObject) ||\n sceneUtils.isGroupByVariable(sceneObject) ||\n sceneUtils.isSwitchVariable(sceneObject)\n );\n}\n\nexport const RESERVED_GLOBAL_VARIABLE_NAME_REGEX = /^(?!__).*$/;\nexport const WORD_CHARACTERS_REGEX = /^\\w+$/;\n\nexport function validateVariableName(\n variable: SceneVariable,\n name: string\n): { isValid: boolean; errorMessage?: string } {\n const set = variable.parent;\n if (!(set instanceof SceneVariableSet)) {\n throw new Error('Variable parent is not a SceneVariableSet');\n }\n\n if (!RESERVED_GLOBAL_VARIABLE_NAME_REGEX.test(name)) {\n return {\n isValid: false,\n errorMessage: \"Template names cannot begin with '__', that's reserved for Grafana's global variables\",\n };\n }\n\n if (!WORD_CHARACTERS_REGEX.test(name)) {\n return { isValid: false, errorMessage: 'Only word characters are allowed in variable names' };\n }\n\n const varLookupByName = set.getByName(name);\n\n if (varLookupByName && varLookupByName !== variable) {\n return { isValid: false, errorMessage: 'Variable with the same name already exists' };\n }\n\n return { isValid: true };\n}\n","import { reportInteraction } from '@grafana/runtime';\n\nexport const GENERATE_AI_INTERACTION_EVENT_NAME = 'dashboards_autogenerate_clicked';\n\n// Source of the interaction\nexport enum EventTrackingSrc {\n panelDescription = 'panel-description',\n panelTitle = 'panel-title',\n dashboardChanges = 'dashboard-changes',\n dashboardTitle = 'dashboard-title',\n dashboardDescription = 'dashboard-description',\n sqlExpressions = 'sql-expressions',\n unknown = 'unknown',\n}\n\n// Item of the interaction for the improve button and history poppover\nexport enum AutoGenerateItem {\n autoGenerateButton = 'auto-generate-button',\n erroredRetryButton = 'errored-retry-button',\n stopGenerationButton = 'stop-generating-button',\n improveButton = 'improve-button',\n backHistoryItem = 'back-history-item',\n forwardHistoryItem = 'forward-history-item',\n quickFeedback = 'quick-feedback',\n linkToDocs = 'link-to-docs',\n customFeedback = 'custom-feedback',\n applySuggestion = 'apply-suggestion',\n}\n\nexport function reportAutoGenerateInteraction(src: EventTrackingSrc, item: AutoGenerateItem, otherMeta?: object) {\n reportInteraction(GENERATE_AI_INTERACTION_EVENT_NAME, { src, item, ...otherMeta });\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nexport const getSegmentStyles = (theme: GrafanaTheme2) => {\n return {\n segment: css({\n cursor: 'pointer',\n width: 'auto',\n }),\n\n queryPlaceholder: css({\n color: theme.colors.text.disabled,\n }),\n\n disabled: css({\n cursor: 'not-allowed',\n opacity: 0.65,\n boxShadow: 'none',\n }),\n };\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { PanelPlugin } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { defaultDashboard } from '@grafana/schema';\nimport { DashboardInitError, DashboardInitPhase, DashboardState } from 'app/types/dashboard';\n\nimport { DashboardModel } from './DashboardModel';\nimport { PanelModel } from './PanelModel';\n\nexport const initialState: DashboardState = {\n initPhase: DashboardInitPhase.NotStarted,\n getModel: () => null,\n initError: null,\n initialDatasource: undefined,\n};\n\nconst dashboardSlice = createSlice({\n name: 'dashboard',\n initialState,\n reducers: {\n dashboardInitFetching: (state) => {\n state.initPhase = DashboardInitPhase.Fetching;\n },\n dashboardInitServices: (state) => {\n state.initPhase = DashboardInitPhase.Services;\n },\n dashboardInitCompleted: (state, action: PayloadAction<DashboardModel>) => {\n state.getModel = () => action.payload;\n state.initPhase = DashboardInitPhase.Completed;\n },\n dashboardInitFailed: (state, action: PayloadAction<DashboardInitError>) => {\n state.initPhase = DashboardInitPhase.Failed;\n state.initError = action.payload;\n state.getModel = () => {\n return new DashboardModel(\n {\n ...defaultDashboard,\n title: t('dashboard.dashboard-slice.title.dashboard-init-failed', 'Dashboard init failed'),\n },\n { canSave: false, canEdit: false }\n );\n };\n },\n cleanUpDashboard: (state) => {\n state.initPhase = DashboardInitPhase.NotStarted;\n state.initError = null;\n state.getModel = () => null;\n },\n addPanel: (state, action: PayloadAction<PanelModel>) => {\n //state.panels[action.payload.id] = { pluginId: action.payload.type };\n },\n setInitialDatasource: (state, action: PayloadAction<string | undefined>) => {\n state.initialDatasource = action.payload;\n },\n },\n});\n\nexport interface PanelModelAndPluginReadyPayload {\n panelId: number;\n plugin: PanelPlugin;\n}\n\nexport interface SetPanelInstanceStatePayload {\n panelId: number;\n value: unknown;\n}\n\nexport const {\n dashboardInitFetching,\n dashboardInitFailed,\n dashboardInitCompleted,\n dashboardInitServices,\n cleanUpDashboard,\n addPanel,\n setInitialDatasource,\n} = dashboardSlice.actions;\n\nexport const dashboardReducer = dashboardSlice.reducer;\n\nexport default {\n dashboard: dashboardReducer,\n};\n","import { DataSourcesRoutes } from './types';\n\n/**\n * Default routes for data sources pages.\n * (Links to the pages can be overriden for this feature by using `DataSourcesRoutesContext`)\n */\nexport const DATASOURCES_ROUTES: DataSourcesRoutes = {\n List: '/datasources',\n Edit: '/datasources/edit/:uid',\n Dashboards: '/datasources/edit/:uid/dashboards',\n New: '/datasources/new',\n} as const;\n\n/**\n * Plugin IDs that are allowed to contribute extensions to:\n * - DataSourceConfigActions (header action buttons)\n * - DataSourceConfigStatus (testing status links)\n * - DataSourceConfigErrorStatus (error help links)\n *\n * Note: These plugins cannot contribute to the main configuration form.\n * For form components, see useDataSourceConfigPluginExtensions\n * allowlist from the EditDataSource component.\n */\nexport const ALLOWED_DATASOURCE_EXTENSION_PLUGINS = [\n 'grafana-lokiexplore-app',\n 'grafana-exploretraces-app',\n 'grafana-metricsdrilldown-app',\n 'grafana-pyroscope-app',\n 'grafana-monitoring-app',\n 'grafana-troubleshooting-app',\n 'grafana-assistant-app',\n];\n","import { generatedAPI } from '@grafana/api-clients/rtkq/preferences/v1alpha1';\nimport { t } from '@grafana/i18n';\nimport { notifyApp } from 'app/core/actions';\nimport { createSuccessNotification, createErrorNotification } from 'app/core/copy/appNotification';\n\nexport const preferencesAPIv1alpha1 = generatedAPI.enhanceEndpoints({\n endpoints: {\n addStar: {\n onQueryStarted: async (_, { queryFulfilled, dispatch }) => {\n try {\n await queryFulfilled;\n dispatch(notifyApp(createSuccessNotification(t('dashboard.toolbar.star-added', 'Added to starred'))));\n } catch (e) {\n if (e instanceof Error) {\n dispatch(\n notifyApp(createErrorNotification(t('dashboard.toolbar.star-add-error', 'Failed to add to starred'), e))\n );\n }\n }\n },\n },\n removeStar: {\n onQueryStarted: async (_, { queryFulfilled, dispatch }) => {\n try {\n await queryFulfilled;\n dispatch(notifyApp(createSuccessNotification(t('dashboard.toolbar.star-removed', 'Removed from starred'))));\n } catch (e) {\n if (e instanceof Error) {\n dispatch(\n notifyApp(\n createErrorNotification(t('dashboard.toolbar.star-remove-error', 'Failed to remove from starred'), e)\n )\n );\n }\n }\n },\n },\n },\n});\n\n// eslint-disable-next-line no-barrel-files/no-barrel-files\nexport * from '@grafana/api-clients/rtkq/preferences/v1alpha1';\n","import { ScopedVars } from '../types/ScopedVars';\nimport { Field } from '../types/dataFrame';\nimport { DataLink, InternalDataLink, LinkModel } from '../types/dataLink';\nimport { SplitOpen, ExplorePanelsState } from '../types/explore';\nimport { InterpolateFunction } from '../types/panel';\nimport { DataQuery } from '../types/query';\nimport { TimeRange } from '../types/time';\n\nimport { locationUtil } from './location';\nimport { serializeStateToUrlParam, toURLRange } from './url';\n\nexport const DataLinkBuiltInVars = {\n keepTime: '__url_time_range',\n timeRangeFrom: '__from',\n timeRangeTo: '__to',\n includeVars: '__all_variables',\n seriesName: '__series.name',\n fieldName: '__field.name',\n valueTime: '__value.time',\n valueNumeric: '__value.numeric',\n valueText: '__value.text',\n valueRaw: '__value.raw',\n // name of the calculation represented by the value\n valueCalc: '__value.calc',\n};\n\n// We inject these because we cannot import them directly as they reside inside grafana main package.\nexport type LinkToExploreOptions = {\n link: DataLink;\n scopedVars: ScopedVars;\n range?: TimeRange;\n field: Field;\n internalLink: InternalDataLink;\n onClickFn?: SplitOpen;\n replaceVariables: InterpolateFunction;\n};\n\nexport function mapInternalLinkToExplore(options: LinkToExploreOptions): LinkModel<Field> {\n const { onClickFn, replaceVariables, link, scopedVars, range, field, internalLink } = options;\n\n const query =\n typeof link.internal?.query === 'function'\n ? link.internal.query({ replaceVariables, scopedVars })\n : internalLink.query;\n const interpolatedQuery = interpolateObject(query, scopedVars, replaceVariables);\n const interpolatedPanelsState = interpolateObject(link.internal?.panelsState, scopedVars, replaceVariables);\n const interpolatedCorrelationData = interpolateObject(link.meta?.correlationData, scopedVars, replaceVariables);\n const title = link.title ? link.title : internalLink.datasourceName;\n\n const interpolatedParams = interpolatedQuery\n ? {\n query: {\n ...interpolatedQuery,\n // data source is defined in a separate property in DataLink, we ensure it's put back together after interpolation\n datasource: {\n ...interpolatedQuery.datasource,\n uid: internalLink.datasourceUid,\n },\n },\n ...(range && { timeRange: range }),\n }\n : undefined;\n\n return {\n title: replaceVariables(title, scopedVars),\n // In this case this is meant to be internal link (opens split view by default) the href will also points\n // to explore but this way you can open it in new tab.\n href: generateInternalHref(internalLink.datasourceUid, interpolatedQuery, range, interpolatedPanelsState),\n onClick: onClickFn\n ? (event) => {\n // Explore data links can be displayed not only in DataLinkButton but it can be used by the consumer in\n // other way, for example MenuItem. We want to provide the URL (for opening in the new tab as well as\n // the onClick to open the split view).\n if (event.preventDefault) {\n event.preventDefault();\n }\n\n onClickFn({\n datasourceUid: internalLink.datasourceUid,\n queries: [interpolatedQuery],\n panelsState: interpolatedPanelsState,\n correlationHelperData: interpolatedCorrelationData,\n range,\n });\n }\n : undefined,\n target: link?.targetBlank ? '_blank' : '_self',\n origin: field,\n ...(interpolatedParams && { interpolatedParams }),\n };\n}\n\n/**\n * Generates href for internal derived field link.\n */\nfunction generateInternalHref<T extends DataQuery>(\n datasourceUid: string,\n query: T,\n range?: TimeRange,\n panelsState?: ExplorePanelsState\n): string {\n return locationUtil.assureBaseUrl(\n `/explore?left=${encodeURIComponent(\n serializeStateToUrlParam({\n // @deprecated mapInternalLinkToExplore required passing range. Some consumers to generate the URL\n // with defaults pass range as `{} as any`. This is why we need to check for `range?.raw` not just\n // `range ? ...` here. This behavior will be marked as deprecated in #72498\n ...(range?.raw ? { range: toURLRange(range.raw) } : {}),\n datasource: datasourceUid,\n queries: [query],\n panelsState: panelsState,\n })\n )}`\n );\n}\n\nfunction interpolateObject<T>(\n obj: T | undefined,\n scopedVars: ScopedVars,\n replaceVariables: InterpolateFunction\n): T | undefined {\n if (!obj) {\n return obj;\n }\n if (typeof obj === 'string') {\n // @ts-ignore this is complaining we are returning string, but we are checking if obj is a string so should be fine.\n return replaceVariables(obj, scopedVars);\n }\n const copy = JSON.parse(JSON.stringify(obj));\n return interpolateObjectRecursive(copy, scopedVars, replaceVariables);\n}\n\nfunction interpolateObjectRecursive<T extends Object>(\n obj: T,\n scopedVars: ScopedVars,\n replaceVariables: InterpolateFunction\n): T {\n for (const k of Object.keys(obj)) {\n // Honestly not sure how to type this to make TS happy.\n // @ts-ignore\n if (typeof obj[k] === 'string') {\n // @ts-ignore\n obj[k] = replaceVariables(obj[k], scopedVars);\n // @ts-ignore\n } else if (typeof obj[k] === 'object' && obj[k] !== null) {\n // @ts-ignore\n obj[k] = interpolateObjectRecursive(obj[k], scopedVars, replaceVariables);\n }\n }\n return obj;\n}\n","import { css } from '@emotion/css';\nimport { Placement } from '@popperjs/core';\nimport classnames from 'classnames';\nimport { ReactElement, ReactNode, cloneElement, useRef } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Popover as GrafanaPopover, PopoverController, Stack, useStyles2 } from '@grafana/ui';\n\nexport interface PopupCardProps {\n children: ReactElement;\n header?: ReactNode;\n content: ReactElement;\n footer?: ReactNode;\n wrapperClassName?: string;\n placement?: Placement;\n disabled?: boolean;\n showAfter?: number;\n arrow?: boolean;\n showOn?: 'click' | 'hover';\n disableBlur?: boolean;\n isOpen?: boolean;\n onClose?: () => void;\n onToggle?: () => void;\n}\n\nexport const PopupCard = ({\n children,\n header,\n content,\n footer,\n arrow,\n showAfter = 300,\n wrapperClassName,\n disabled = false,\n showOn = 'hover',\n disableBlur = false,\n isOpen,\n onClose,\n onToggle,\n ...rest\n}: PopupCardProps) => {\n const popoverRef = useRef<HTMLElement>(null);\n const styles = useStyles2(getStyles);\n\n if (disabled) {\n return children;\n }\n\n const showOnHover = showOn === 'hover';\n const showOnClick = showOn === 'click';\n\n const body = (\n <Stack direction=\"column\" gap={0} role=\"tooltip\">\n {header && <div className={styles.card.header}>{header}</div>}\n <div className={styles.card.body}>{content}</div>\n {footer && <div className={styles.card.footer}>{footer}</div>}\n </Stack>\n );\n\n return (\n <PopoverController content={body} hideAfter={100}>\n {(showPopper, hidePopper, popperProps) => {\n // Use manual control if provided, otherwise use internal state\n const isManuallyControlled = isOpen !== undefined;\n const shouldShow = isManuallyControlled ? isOpen : popperProps.show;\n\n const handleClose = () => {\n if (onClose) {\n onClose();\n } else {\n hidePopper();\n }\n };\n\n const handleShow = () => {\n if (!isManuallyControlled) {\n showPopper();\n }\n };\n\n // support hover and click interaction\n const onClickProps = {\n onClick: onToggle || (isManuallyControlled ? handleClose : showPopper),\n };\n\n const onHoverProps = {\n onMouseLeave: handleClose,\n onMouseEnter: handleShow,\n };\n\n const blurFocusProps = {\n onBlur: handleClose,\n onFocus: handleShow,\n };\n\n return (\n <>\n {popoverRef.current && (\n <GrafanaPopover\n {...popperProps}\n show={shouldShow}\n {...rest}\n wrapperClassName={classnames(styles.popover, wrapperClassName)}\n referenceElement={popoverRef.current}\n renderArrow={arrow}\n // @TODO\n // if we want interaction with the content we should not pass blur / focus handlers but then clicking outside doesn't close the popper\n {...(disableBlur ? {} : blurFocusProps)}\n // if we want hover interaction we have to make sure we add the leave / enter handlers\n {...(showOnHover ? onHoverProps : {})}\n hidePopper={handleClose}\n />\n )}\n\n {cloneElement(children, {\n ref: popoverRef,\n onFocus: handleShow,\n onBlur: disableBlur ? undefined : handleClose,\n tabIndex: 0,\n // make sure we pass the correct interaction handlers here to the element we want to interact with\n ...(showOnHover ? onHoverProps : {}),\n // Only add click handling if we have onToggle or not manually controlled\n ...(showOnClick && (onToggle || !isManuallyControlled) ? onClickProps : {}),\n })}\n </>\n );\n }}\n </PopoverController>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n popover: css({\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z3,\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n }),\n card: {\n body: css({\n padding: theme.spacing(1),\n }),\n header: css({\n padding: theme.spacing(1),\n background: theme.colors.background.secondary,\n borderBottom: `solid 1px ${theme.colors.border.medium}`,\n }),\n footer: css({\n padding: theme.spacing(0.5, 1),\n background: theme.colors.background.secondary,\n borderTop: `solid 1px ${theme.colors.border.medium}`,\n }),\n },\n});\n","import { css } from '@emotion/css';\nimport { useFormContext } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Badge, clearButtonStyles, useStyles2 } from '@grafana/ui';\n\nimport { RuleFormValues } from '../../types/rule-form';\nimport { isGrafanaRecordingRuleByType } from '../../utils/rules';\n\ninterface AlertConditionProps {\n isCondition?: boolean;\n onSetCondition?: () => void;\n refId?: string;\n}\n\nexport const ExpressionStatusIndicator = ({ isCondition, onSetCondition, refId }: AlertConditionProps) => {\n const styles = useStyles2(getStyles);\n const { watch } = useFormContext<RuleFormValues>();\n const type = watch('type');\n const isGrafanaRecordingRule = type ? isGrafanaRecordingRuleByType(type) : false;\n const conditionText = isGrafanaRecordingRule ? 'Recording rule output' : 'Alert condition';\n\n const setAsConditionText = refId ? `Set \"${refId}\" as alert condition` : 'Set as alert condition';\n const makeConditionText = isGrafanaRecordingRule ? 'Set as recording rule output' : setAsConditionText;\n\n if (isCondition) {\n return <Badge key=\"condition\" color=\"green\" icon=\"check\" text={conditionText} />;\n } else {\n return (\n <button\n key=\"make-condition\"\n type=\"button\"\n className={styles.actionLink}\n onClick={() => onSetCondition && onSetCondition()}\n >\n {makeConditionText}\n </button>\n );\n }\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const clearButton = clearButtonStyles(theme);\n\n return {\n actionLink: css(clearButton, {\n color: theme.colors.text.link,\n cursor: 'pointer',\n\n '&:hover': {\n textDecoration: 'underline',\n },\n }),\n };\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { NavModelItem } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { getNavSubTitle, getNavTitle } from '../utils/navBarItem-translations';\n\nexport const initialState: NavModelItem[] = config.bootData?.navTree ?? [];\n\nfunction translateNav(navTree: NavModelItem[]): NavModelItem[] {\n return navTree.map((navItem) => {\n const children = navItem.children && translateNav(navItem.children);\n\n return {\n ...navItem,\n children: children,\n text: getNavTitle(navItem.id) ?? navItem.text,\n subTitle: getNavSubTitle(navItem.id) ?? navItem.subTitle,\n emptyMessage: getNavTitle(navItem.emptyMessageId),\n };\n });\n}\n\n// this matches the prefix set in the backend navtree\nexport const ID_PREFIX = 'starred/';\n\nconst navTreeSlice = createSlice({\n name: 'navBarTree',\n initialState: () => translateNav(config.bootData?.navTree ?? []),\n reducers: {\n setStarred: (state, action: PayloadAction<{ id: string; title: string; url: string; isStarred: boolean }>) => {\n const starredItems = state.find((navItem) => navItem.id === 'starred');\n const { id, title, url, isStarred } = action.payload;\n if (starredItems) {\n if (isStarred) {\n if (!starredItems.children) {\n starredItems.children = [];\n }\n const newStarredItem: NavModelItem = {\n id: ID_PREFIX + id,\n text: title,\n url,\n };\n starredItems.children.push(newStarredItem);\n starredItems.children.sort((a, b) => a.text.localeCompare(b.text));\n } else {\n const index = starredItems.children?.findIndex((item) => item.id === ID_PREFIX + id) ?? -1;\n if (index > -1) {\n starredItems?.children?.splice(index, 1);\n }\n }\n }\n },\n setBookmark: (state, action: PayloadAction<{ item: NavModelItem; isSaved: boolean }>) => {\n if (!config.featureToggles.pinNavItems) {\n return;\n }\n const bookmarks = state.find((navItem) => navItem.id === 'bookmarks');\n const { item, isSaved } = action.payload;\n if (bookmarks) {\n if (isSaved) {\n bookmarks.children ||= [];\n const newBookmark: NavModelItem = {\n ...item,\n // Clear the children, sortWeight and empty message of the item\n children: [],\n sortWeight: 0,\n emptyMessageId: '',\n emptyMessage: '',\n parentItem: { id: bookmarks.id, text: bookmarks.text },\n };\n bookmarks.children.push(newBookmark);\n } else {\n bookmarks.children = bookmarks.children?.filter((i) => i.url !== item.url) ?? [];\n }\n }\n },\n updateDashboardName: (state, action: PayloadAction<{ id: string; title: string; url: string }>) => {\n const { id, title, url } = action.payload;\n const starredItems = state.find((navItem) => navItem.id === 'starred');\n if (starredItems) {\n const navItem = starredItems.children?.find((navItem) => navItem.id === id);\n if (navItem) {\n navItem.text = title;\n navItem.url = url;\n starredItems.children?.sort((a, b) => a.text.localeCompare(b.text));\n }\n }\n },\n removePluginFromNavTree: (state, action: PayloadAction<{ pluginID: string }>) => {\n const navID = 'plugin-page-' + action.payload.pluginID;\n const pluginItemIndex = state.findIndex((navItem) => navItem.id === navID);\n if (pluginItemIndex > -1) {\n state.splice(pluginItemIndex, 1);\n }\n },\n },\n});\n\nexport const { setStarred, removePluginFromNavTree, updateDashboardName, setBookmark } = navTreeSlice.actions;\nexport const navTreeReducer = navTreeSlice.reducer;\n","import { AnyAction, combineReducers, Reducer } from 'redux';\n\nimport { initialVariableEditorState, variableEditorReducer, VariableEditorState } from '../editor/reducer';\nimport { initialVariableInspectState, variableInspectReducer, VariableInspectState } from '../inspect/reducer';\nimport { initialOptionPickerState, optionsPickerReducer, OptionsPickerState } from '../pickers/OptionsPicker/reducer';\n\nimport { initialTransactionState, transactionReducer, TransactionState } from './transactionReducer';\nimport { initialVariablesState, VariablesState } from './types';\nimport { variablesReducer } from './variablesReducer';\n\nexport interface TemplatingState {\n editor: VariableEditorState;\n variables: VariablesState;\n optionsPicker: OptionsPickerState;\n transaction: TransactionState;\n inspect: VariableInspectState;\n}\n\nlet templatingReducers: Reducer<TemplatingState, AnyAction, Partial<TemplatingState>>;\n\nexport function getTemplatingReducers() {\n if (!templatingReducers) {\n templatingReducers = combineReducers({\n editor: variableEditorReducer,\n variables: variablesReducer,\n optionsPicker: optionsPickerReducer,\n transaction: transactionReducer,\n inspect: variableInspectReducer,\n });\n }\n\n return templatingReducers;\n}\n\nexport function getInitialTemplatingState() {\n return {\n editor: initialVariableEditorState,\n variables: initialVariablesState,\n optionsPicker: initialOptionPickerState,\n transaction: initialTransactionState,\n inspect: initialVariableInspectState,\n };\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport interface MetricStat {\n /**\n * The ID of the AWS account to query for the metric, specifying `all` will query all accounts that the monitoring account is permitted to query.\n */\n accountId?: string;\n /**\n * The dimensions of the metric\n */\n dimensions?: Dimensions;\n /**\n * Only show metrics that exactly match all defined dimension names.\n */\n matchExact?: boolean;\n /**\n * Name of the metric\n */\n metricName?: string;\n /**\n * A namespace is a container for CloudWatch metrics. Metrics in different namespaces are isolated from each other, so that metrics from different applications are not mistakenly aggregated into the same statistics. For example, Amazon EC2 uses the AWS/EC2 namespace.\n */\n namespace: string;\n /**\n * The length of time associated with a specific Amazon CloudWatch statistic. Can be specified by a number of seconds, 'auto', or as a duration string e.g. '15m' being 15 minutes\n */\n period?: string;\n /**\n * AWS region to query for the metric\n */\n region: string;\n /**\n * Metric data aggregations over specified periods of time. For detailed definitions of the statistics supported by CloudWatch, see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html.\n */\n statistic?: string;\n /**\n * @deprecated use statistic\n */\n statistics?: Array<string>;\n}\n\nexport const defaultMetricStat: Partial<MetricStat> = {\n statistics: [],\n};\n\n/**\n * A name/value pair that is part of the identity of a metric. For example, you can get statistics for a specific EC2 instance by specifying the InstanceId dimension when you search for metrics.\n */\nexport type Dimensions = Record<string, (string | Array<string>)>;\n\n/**\n * Shape of a CloudWatch Metrics query\n */\nexport interface CloudWatchMetricsQuery extends common.DataQuery, MetricStat {\n /**\n * Deprecated: use label\n * @deprecated use label\n */\n alias?: string;\n /**\n * Math expression query\n */\n expression?: string;\n /**\n * ID can be used to reference other queries in math expressions. The ID can include numbers, letters, and underscore, and must start with a lowercase letter.\n */\n id: string;\n /**\n * Change the time series legend names using dynamic labels. See https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html for more details.\n */\n label?: string;\n /**\n * Whether to use the query builder or code editor to create the query\n */\n metricEditorMode?: MetricEditorMode;\n /**\n * Whether to use a metric search or metric insights query\n */\n metricQueryType?: MetricQueryType;\n /**\n * Whether a query is a Metrics, Logs, or Annotations query\n */\n queryMode?: CloudWatchQueryMode;\n /**\n * When the metric query type is set to `Insights` and the `metricEditorMode` is set to `Builder`, this field is used to build up an object representation of a SQL query.\n */\n sql?: SQLExpression;\n /**\n * When the metric query type is set to `Insights`, this field is used to specify the query string.\n */\n sqlExpression?: string;\n}\n\nexport type CloudWatchQueryMode = ('Metrics' | 'Logs' | 'Annotations');\n\nexport enum MetricQueryType {\n Insights = 1,\n Search = 0,\n}\n\nexport enum MetricEditorMode {\n Builder = 0,\n Code = 1,\n}\n\nexport interface SQLExpression {\n /**\n * FROM part of the SQL expression\n */\n from?: (QueryEditorPropertyExpression | QueryEditorFunctionExpression);\n /**\n * GROUP BY part of the SQL expression\n */\n groupBy?: QueryEditorArrayExpression;\n /**\n * LIMIT part of the SQL expression\n */\n limit?: number;\n /**\n * ORDER BY part of the SQL expression\n */\n orderBy?: QueryEditorFunctionExpression;\n /**\n * The sort order of the SQL expression, `ASC` or `DESC`\n */\n orderByDirection?: string;\n /**\n * SELECT part of the SQL expression\n */\n select?: QueryEditorFunctionExpression;\n /**\n * WHERE part of the SQL expression\n */\n where?: QueryEditorArrayExpression;\n}\n\nexport interface QueryEditorFunctionExpression {\n name?: string;\n parameters?: Array<QueryEditorFunctionParameterExpression>;\n type: QueryEditorExpressionType.Function;\n}\n\nexport const defaultQueryEditorFunctionExpression: Partial<QueryEditorFunctionExpression> = {\n parameters: [],\n};\n\nexport enum QueryEditorExpressionType {\n And = 'and',\n Function = 'function',\n FunctionParameter = 'functionParameter',\n GroupBy = 'groupBy',\n Operator = 'operator',\n Or = 'or',\n Property = 'property',\n}\n\nexport interface QueryEditorFunctionParameterExpression {\n name?: string;\n type: QueryEditorExpressionType.FunctionParameter;\n}\n\nexport interface QueryEditorPropertyExpression {\n property: QueryEditorProperty;\n type: QueryEditorExpressionType.Property;\n}\n\nexport interface QueryEditorGroupByExpression {\n property: QueryEditorProperty;\n type: QueryEditorExpressionType.GroupBy;\n}\n\nexport interface QueryEditorOperatorExpression {\n /**\n * TS type is operator: QueryEditorOperator<QueryEditorOperatorValueType>, extended in veneer\n */\n operator: QueryEditorOperator;\n property: QueryEditorProperty;\n type: QueryEditorExpressionType.Operator;\n}\n\n/**\n * TS type is QueryEditorOperator<T extends QueryEditorOperatorValueType>, extended in veneer\n */\nexport interface QueryEditorOperator {\n name?: string;\n value?: (QueryEditorOperatorType | Array<QueryEditorOperatorType>);\n}\n\nexport type QueryEditorOperatorValueType = (QueryEditorOperatorType | Array<QueryEditorOperatorType>);\n\nexport type QueryEditorOperatorType = (string | boolean | number);\n\nexport interface QueryEditorProperty {\n name?: string;\n type: QueryEditorPropertyType;\n}\n\nexport enum QueryEditorPropertyType {\n String = 'string',\n}\n\nexport interface QueryEditorArrayExpression {\n expressions: (Array<QueryEditorExpression> | Array<QueryEditorArrayExpression>);\n type: (QueryEditorExpressionType.And | QueryEditorExpressionType.Or);\n}\n\nexport type QueryEditorExpression = (QueryEditorArrayExpression | QueryEditorPropertyExpression | QueryEditorGroupByExpression | QueryEditorFunctionExpression | QueryEditorFunctionParameterExpression | QueryEditorOperatorExpression);\n\nexport enum LogsMode {\n Anomalies = 'Anomalies',\n Insights = 'Insights',\n}\n\nexport enum LogsQueryLanguage {\n CWLI = 'CWLI',\n PPL = 'PPL',\n SQL = 'SQL',\n}\n\n/**\n * Shape of a CloudWatch Logs query\n */\nexport interface CloudWatchLogsQuery extends common.DataQuery {\n /**\n * The CloudWatch Logs Insights query to execute\n */\n expression?: string;\n id: string;\n /**\n * @deprecated use logGroups\n */\n logGroupNames?: Array<string>;\n /**\n * Log groups to query\n */\n logGroups?: Array<LogGroup>;\n /**\n * Whether a query is a Logs Insights or Logs Anomalies query\n */\n logsMode?: LogsMode;\n /**\n * Language used for querying logs, can be CWLI, SQL, or PPL. If empty, the default language is CWLI.\n */\n queryLanguage?: LogsQueryLanguage;\n /**\n * Whether a query is a Metrics, Logs, or Annotations query\n */\n queryMode: CloudWatchQueryMode;\n /**\n * AWS region to query for the logs\n */\n region: string;\n /**\n * Fields to group the results by, this field is automatically populated whenever the query is updated\n */\n statsGroups?: Array<string>;\n}\n\nexport const defaultCloudWatchLogsQuery: Partial<CloudWatchLogsQuery> = {\n logGroupNames: [],\n logGroups: [],\n statsGroups: [],\n};\n\n/**\n * Shape of a Cloudwatch Logs Anomalies query\n */\nexport interface CloudWatchLogsAnomaliesQuery extends common.DataQuery {\n /**\n * Used to filter only the anomalies found by a certain anomaly detector\n */\n anomalyDetectionARN?: string;\n id: string;\n /**\n * Whether a query is a Logs Insights or Logs Anomalies query\n */\n logsMode?: LogsMode;\n /**\n * Whether a query is a Metrics, Logs or Annotations query\n */\n queryMode?: CloudWatchQueryMode;\n /**\n * AWS region to query for the logs\n */\n region: string;\n /**\n * Filter to return only anomalies that are 'SUPPRESSED', 'UNSUPPRESSED', or 'ALL' (default)\n */\n suppressionState?: string;\n}\n\nexport interface LogGroup {\n /**\n * AccountId of the log group\n */\n accountId?: string;\n /**\n * Label of the log group\n */\n accountLabel?: string;\n /**\n * ARN of the log group\n */\n arn: string;\n /**\n * Name of the log group\n */\n name: string;\n}\n\n/**\n * Shape of a CloudWatch Annotation query\n */\n/**\n * TS type is CloudWatchDefaultQuery = Omit<CloudWatchLogsQuery, 'queryMode'> & CloudWatchMetricsQuery, declared in veneer\n * #CloudWatchDefaultQuery: #CloudWatchLogsQuery & #CloudWatchMetricsQuery @cuetsy(kind=\"type\")\n */\nexport interface CloudWatchAnnotationQuery extends common.DataQuery, MetricStat {\n /**\n * Use this parameter to filter the results of the operation to only those alarms\n * that use a certain alarm action. For example, you could specify the ARN of\n * an SNS topic to find all alarms that send notifications to that topic.\n * e.g. `arn:aws:sns:us-east-1:123456789012:my-app-` would match `arn:aws:sns:us-east-1:123456789012:my-app-action`\n * but not match `arn:aws:sns:us-east-1:123456789012:your-app-action`\n */\n actionPrefix?: string;\n /**\n * An alarm name prefix. If you specify this parameter, you receive information\n * about all alarms that have names that start with this prefix.\n * e.g. `my-team-service-` would match `my-team-service-high-cpu` but not match `your-team-service-high-cpu`\n */\n alarmNamePrefix?: string;\n /**\n * Enable matching on the prefix of the action name or alarm name, specify the prefixes with actionPrefix and/or alarmNamePrefix\n */\n prefixMatching?: boolean;\n /**\n * Whether a query is a Metrics, Logs, or Annotations query\n */\n queryMode: CloudWatchQueryMode;\n}\n\nexport interface CloudWatchDataQuery {}\n","import { DataQueryRequest } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\n\nimport { config } from '../config';\nimport { getBackendSrv } from '../services';\n\nimport { DataSourceWithBackend } from './DataSourceWithBackend';\n\n/**\n * @alpha Experimental: Plugins implementing MigrationHandler interface will automatically have their queries migrated.\n */\nexport interface MigrationHandler {\n hasBackendMigration: boolean;\n shouldMigrate(query: DataQuery): boolean;\n}\n\nexport function isMigrationHandler(object: unknown): object is MigrationHandler {\n return object instanceof DataSourceWithBackend && 'hasBackendMigration' in object && 'shouldMigrate' in object;\n}\n\nasync function postMigrateRequest<TQuery extends DataQuery>(queries: TQuery[]): Promise<TQuery[]> {\n if (!(config.featureToggles.grafanaAPIServerWithExperimentalAPIs || config.featureToggles.datasourceAPIServers)) {\n console.warn('migrateQuery is only available with the experimental API server');\n return queries;\n }\n\n // Obtaining the GroupName from the plugin ID as done in the backend, this is temporary until we have a better way to obtain it\n // https://github.com/grafana/grafana/blob/e013cd427cb0457177e11f19ebd30bc523b36c76/pkg/plugins/apiserver.go#L10\n const dsnameURL = queries[0].datasource?.type?.replace(/^(grafana-)?(.*?)(-datasource)?$/, '$2');\n const groupName = `${dsnameURL}.datasource.grafana.app`;\n // Asuming apiVersion is v0alpha1, we'll need to obtain it from a trusted source\n const apiVersion = 'v0alpha1';\n const url = `/apis/${groupName}/${apiVersion}/namespaces/${config.namespace}/queryconvert`;\n const request = {\n queries: queries.map((query) => {\n return {\n ...query,\n JSON: query, // JSON is not part of the type but it should be what holds the query\n };\n }),\n };\n const res = await getBackendSrv().post(url, request);\n return res.queries.map((query: { JSON: TQuery }) => query.JSON);\n}\n\n/**\n * @alpha Experimental: Calls migration endpoint with one query. Requires grafanaAPIServerWithExperimentalAPIs or datasourceAPIServers feature toggle.\n */\nexport async function migrateQuery<TQuery extends DataQuery>(\n datasource: MigrationHandler,\n query: TQuery\n): Promise<TQuery> {\n if (!datasource.hasBackendMigration || !datasource.shouldMigrate(query)) {\n return query;\n }\n const res = await postMigrateRequest([query]);\n return res[0];\n}\n\n/**\n * @alpha Experimental: Calls migration endpoint with multiple queries. Requires grafanaAPIServerWithExperimentalAPIs or datasourceAPIServers feature toggle.\n */\nexport async function migrateRequest<TQuery extends DataQuery>(\n datasource: MigrationHandler,\n request: DataQueryRequest<TQuery>\n): Promise<DataQueryRequest<TQuery>> {\n if (!datasource.hasBackendMigration || !request.targets.some((query) => datasource.shouldMigrate(query))) {\n return request;\n }\n const res = await postMigrateRequest(request.targets);\n return { ...request, targets: res };\n}\n","export interface TextMatch {\n text: string;\n start: number;\n length: number;\n end: number;\n}\n\n/**\n * Adapt findMatchesInText for react-highlight-words findChunks handler.\n * See https://github.com/bvaughn/react-highlight-words#props\n */\nexport function findHighlightChunksInText({\n searchWords,\n textToHighlight,\n}: {\n searchWords: Array<string | RegExp>;\n textToHighlight: string;\n}) {\n const chunks: TextMatch[] = [];\n for (const term of searchWords) {\n if (typeof term === 'string') {\n chunks.push(...findMatchesInText(textToHighlight, term));\n }\n }\n return chunks;\n}\n\nconst cleanNeedle = (needle: string): string => {\n return needle.replace(/[[{(][\\w,.\\/:;<=>?:*+]+$/, '');\n};\n\n/**\n * Returns a list of substring regexp matches.\n */\nexport function findMatchesInText(haystack: string, needle: string): TextMatch[] {\n // Empty search can send re.exec() into infinite loop, exit early\n if (!haystack || !needle) {\n return [];\n }\n\n const matches: TextMatch[] = [];\n const { cleaned, flags } = parseFlags(cleanNeedle(needle));\n let regexp: RegExp;\n\n try {\n regexp = new RegExp(`(?:${cleaned})`, flags);\n } catch (error) {\n return matches;\n }\n\n haystack.replace(regexp, (substring, ...rest) => {\n if (substring) {\n const offset = rest[rest.length - 2];\n matches.push({\n text: substring,\n start: offset,\n length: substring.length,\n end: offset + substring.length,\n });\n }\n return '';\n });\n\n return matches;\n}\n\nconst CLEAR_FLAG = '-';\nconst FLAGS_REGEXP = /\\(\\?([ims-]+)\\)/g;\n\n/**\n * Converts any mode modifiers in the text to the Javascript equivalent flag\n */\nexport function parseFlags(text: string): { cleaned: string; flags: string } {\n const flags: Set<string> = new Set(['g']);\n\n const cleaned = text.replace(FLAGS_REGEXP, (str, group) => {\n const clearAll = group.startsWith(CLEAR_FLAG);\n\n for (let i = 0; i < group.length; ++i) {\n const flag = group.charAt(i);\n if (clearAll || group.charAt(i - 1) === CLEAR_FLAG) {\n flags.delete(flag);\n } else if (flag !== CLEAR_FLAG) {\n flags.add(flag);\n }\n }\n return ''; // Remove flag from text\n });\n\n return {\n cleaned: cleaned,\n flags: Array.from(flags).join(''),\n };\n}\n","import { createAction, createReducer } from '@reduxjs/toolkit';\n\nimport { EvalFunction } from 'app/features/alerting/state/alertDef';\n\nimport { ClassicCondition, ExpressionQueryType, ThresholdExpressionQuery } from '../types';\n\nexport const updateRefId = createAction<string | undefined>('thresold/updateRefId');\nexport const updateThresholdType = createAction<{\n evalFunction: EvalFunction;\n onError: ((error: string | undefined) => void) | undefined;\n}>('thresold/updateThresholdType');\nexport const updateThresholdParams = createAction<{ param: number; index: number }>('thresold/updateThresholdParams');\nexport const updateHysteresisChecked = createAction<{\n hysteresisChecked: boolean;\n onError: ((error: string | undefined) => void) | undefined;\n}>('thresold/updateHysteresis');\nexport const updateUnloadParams = createAction<{\n param: number;\n index: number;\n onError: ((error: string | undefined) => void) | undefined;\n}>('thresold/updateUnloadParams');\n\nexport const thresholdReducer = createReducer<ThresholdExpressionQuery>(\n { type: ExpressionQueryType.threshold, refId: '', conditions: [] },\n (builder) => {\n builder.addCase(updateRefId, (state, action) => {\n state.expression = action.payload;\n });\n builder.addCase(updateThresholdType, (state, action) => {\n const typeInPayload = action.payload.evalFunction;\n const onError = action.payload.onError;\n\n //set new type in evaluator\n state.conditions[0].evaluator.type = typeInPayload;\n\n //reset params\n state.conditions[0].evaluator.params = [0];\n\n // check if hysteresis is checked\n const hsyteresisIsChecked = Boolean(state.conditions[0].unloadEvaluator);\n\n if (hsyteresisIsChecked) {\n // when type whas changed and hsyteresIsChecked, we need to update the type for the unload evaluator with the opposite type\n const updatedUnloadType = getUnloadEvaluatorTypeFromEvaluatorType(state.conditions[0].evaluator.type);\n\n // set error to undefined when type is changed as we default to the new type that is valid\n if (onError) {\n onError(undefined); //clear error\n }\n // set newtype in evaluator\n state.conditions[0].evaluator.type = typeInPayload;\n // set new type and params in unload evaluator\n const defaultUnloadEvaluator = {\n type: updatedUnloadType,\n params: state.conditions[0].evaluator?.params ?? [0, 0],\n };\n state.conditions[0].unloadEvaluator = defaultUnloadEvaluator;\n }\n });\n builder.addCase(updateThresholdParams, (state, action) => {\n const { param, index } = action.payload;\n state.conditions[0].evaluator.params[index] = param;\n });\n builder.addCase(updateHysteresisChecked, (state, action) => {\n const { hysteresisChecked, onError } = action.payload;\n if (!hysteresisChecked) {\n state.conditions[0].unloadEvaluator = undefined;\n if (onError) {\n onError(undefined); // clear error\n }\n } else {\n state.conditions[0].unloadEvaluator = {\n type: getUnloadEvaluatorTypeFromEvaluatorType(state.conditions[0].evaluator.type),\n params: state.conditions[0].evaluator?.params ?? [0, 0],\n };\n }\n });\n builder.addCase(updateUnloadParams, (state, action) => {\n const { param, index, onError } = action.payload;\n // if there is no unload evaluator, we use the default evaluator params\n if (!state.conditions[0].unloadEvaluator) {\n state.conditions[0].unloadEvaluator = {\n type: getUnloadEvaluatorTypeFromEvaluatorType(state.conditions[0].evaluator.type),\n params: state.conditions[0].evaluator?.params ?? [0, 0],\n };\n } else {\n // only update the param\n state.conditions[0].unloadEvaluator!.params[index] = param;\n }\n // check if is valid for the new unload evaluator params\n const error = isInvalid(state.conditions[0]);\n const { errorMsg: invalidErrorMsg, errorMsgFrom, errorMsgTo } = error ?? {};\n const errorMsg = invalidErrorMsg || errorMsgFrom || errorMsgTo;\n // set error in form manually as we don't have a field for the unload evaluator\n if (onError) {\n onError(errorMsg);\n }\n });\n }\n);\n\nfunction getUnloadEvaluatorTypeFromEvaluatorType(type: EvalFunction) {\n // we don't let the user change the unload evaluator type. We just change it to the opposite of the evaluator type\n if (type === EvalFunction.IsAbove) {\n return EvalFunction.IsBelow;\n }\n if (type === EvalFunction.IsBelow) {\n return EvalFunction.IsAbove;\n }\n if (type === EvalFunction.IsEqual) {\n return EvalFunction.IsNotEqual;\n }\n if (type === EvalFunction.IsNotEqual) {\n return EvalFunction.IsEqual;\n }\n if (type === EvalFunction.IsGreaterThanEqual) {\n return EvalFunction.IsLessThanEqual;\n }\n if (type === EvalFunction.IsLessThanEqual) {\n return EvalFunction.IsGreaterThanEqual;\n }\n if (type === EvalFunction.IsWithinRange) {\n return EvalFunction.IsOutsideRange;\n }\n if (type === EvalFunction.IsOutsideRange) {\n return EvalFunction.IsWithinRange;\n }\n if (type === EvalFunction.IsWithinRangeIncluded) {\n return EvalFunction.IsOutsideRangeIncluded;\n }\n if (type === EvalFunction.IsOutsideRangeIncluded) {\n return EvalFunction.IsWithinRangeIncluded;\n }\n return EvalFunction.IsBelow;\n}\n\nexport function isInvalid(condition: ClassicCondition) {\n // first check if the unload evaluator values are not empty\n const { unloadEvaluator, evaluator } = condition;\n if (!evaluator) {\n return;\n }\n if (unloadEvaluator?.params[0] === undefined || Number.isNaN(unloadEvaluator?.params[0])) {\n return { errorMsg: 'This value cannot be empty' };\n }\n\n const { type, params: loadParams } = evaluator;\n const { params: unloadParams } = unloadEvaluator;\n\n if (\n type === EvalFunction.IsWithinRange ||\n type === EvalFunction.IsOutsideRange ||\n type === EvalFunction.IsWithinRangeIncluded ||\n type === EvalFunction.IsOutsideRangeIncluded\n ) {\n if (unloadParams[0] === undefined || Number.isNaN(unloadParams[0])) {\n return { errorMsgFrom: 'This value cannot be empty' };\n }\n if (unloadParams[1] === undefined || Number.isNaN(unloadParams[1])) {\n return { errorMsgTo: 'This value cannot be empty' };\n }\n }\n // check if the unload evaluator values are valid for the current load evaluator values\n const [firstParamInUnloadEvaluator, secondParamInUnloadEvaluator] = unloadEvaluator.params;\n const [firstParamInEvaluator, secondParamInEvaluator] = loadParams;\n\n switch (type) {\n case EvalFunction.IsAbove:\n if (firstParamInUnloadEvaluator > firstParamInEvaluator) {\n return { errorMsg: `Enter a number less than or equal to ${firstParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsBelow:\n if (firstParamInUnloadEvaluator < firstParamInEvaluator) {\n return { errorMsg: `Enter a number more than or equal to ${firstParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsEqual:\n if (firstParamInUnloadEvaluator === firstParamInEvaluator) {\n return { errorMsg: `Enter a different number than ${firstParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsNotEqual:\n if (firstParamInUnloadEvaluator !== firstParamInEvaluator) {\n return { errorMsg: `Enter the same number as ${firstParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsGreaterThanEqual:\n if (firstParamInUnloadEvaluator >= firstParamInEvaluator) {\n return { errorMsg: `Enter a number less than ${firstParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsLessThanEqual:\n if (firstParamInUnloadEvaluator <= firstParamInEvaluator) {\n return { errorMsg: `Enter a number more than ${firstParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsOutsideRange:\n if (firstParamInUnloadEvaluator < firstParamInEvaluator) {\n return { errorMsgFrom: `Enter a number more than or equal to ${firstParamInEvaluator}` };\n }\n if (secondParamInUnloadEvaluator > secondParamInEvaluator) {\n return { errorMsgTo: `Enter a number less than or equal to ${secondParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsWithinRange:\n if (firstParamInUnloadEvaluator > firstParamInEvaluator) {\n return { errorMsgFrom: `Enter a number less than or equal to ${firstParamInEvaluator}` };\n }\n if (secondParamInUnloadEvaluator < secondParamInEvaluator) {\n return { errorMsgTo: `Enter a number be more than or equal to ${secondParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsOutsideRangeIncluded:\n if (firstParamInUnloadEvaluator <= firstParamInEvaluator) {\n return { errorMsgFrom: `Enter a number more than ${firstParamInEvaluator}` };\n }\n if (secondParamInUnloadEvaluator >= secondParamInEvaluator) {\n return { errorMsgTo: `Enter a number less than ${secondParamInEvaluator}` };\n }\n break;\n case EvalFunction.IsWithinRangeIncluded:\n if (firstParamInUnloadEvaluator >= firstParamInEvaluator) {\n return { errorMsgFrom: `Enter a number less than ${firstParamInEvaluator}` };\n }\n if (secondParamInUnloadEvaluator <= secondParamInEvaluator) {\n return { errorMsgTo: `Enter a number be more than ${secondParamInEvaluator}` };\n }\n break;\n default:\n throw new Error(`evaluator function type ${type} not supported.`);\n }\n return;\n}\n","import { css } from '@emotion/css';\nimport { AnyAction } from '@reduxjs/toolkit';\nimport { uniqueId } from 'lodash';\nimport * as React from 'react';\nimport { FormEvent, useEffect, useReducer } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { InlineField, InlineFieldRow, InlineSwitch, Input, Select, Stack, useStyles2 } from '@grafana/ui';\nimport { EvalFunction } from 'app/features/alerting/state/alertDef';\n\nimport { ClassicCondition, ExpressionQuery, thresholdFunctions } from '../types';\n\nimport { ThresholdSelect } from './ThresholdSelect';\nimport { ToLabel } from './ToLabel';\nimport {\n isInvalid,\n thresholdReducer,\n updateHysteresisChecked,\n updateRefId,\n updateThresholdParams,\n updateThresholdType,\n updateUnloadParams,\n} from './thresholdReducer';\n\ninterface Props {\n labelWidth: number | 'auto';\n refIds: Array<SelectableValue<string>>;\n query: ExpressionQuery;\n onChange: (query: ExpressionQuery) => void;\n onError?: (error: string | undefined) => void;\n useHysteresis?: boolean;\n}\n\nconst defaultThresholdFunction = EvalFunction.IsAbove;\n\nconst defaultEvaluator: ClassicCondition = {\n type: 'query',\n evaluator: {\n type: defaultThresholdFunction,\n params: [0, 0],\n },\n query: {\n params: [],\n },\n reducer: {\n params: [],\n type: 'last',\n },\n};\n\nexport const Threshold = ({ labelWidth, onChange, refIds, query, onError, useHysteresis = false }: Props) => {\n const styles = useStyles2(getStyles);\n\n const initialExpression = { ...query, conditions: query.conditions?.length ? query.conditions : [defaultEvaluator] };\n\n // this queryState is the source of truth for the threshold component.\n // All the changes are made to this object through the dispatch function with the thresholdReducer.\n const [queryState, dispatch] = useReducer(thresholdReducer, initialExpression);\n const conditionInState = queryState.conditions[0];\n\n const thresholdFunction = thresholdFunctions.find((fn) => fn.value === queryState.conditions[0].evaluator?.type);\n\n const onRefIdChange = (value: SelectableValue<string>) => {\n dispatch(updateRefId(value.value));\n };\n\n // any change in the queryState will trigger the onChange function.\n useEffect(() => {\n queryState && onChange(queryState);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [queryState]);\n\n const onEvalFunctionChange = (value: SelectableValue<EvalFunction>) => {\n dispatch(updateThresholdType({ evalFunction: value.value ?? defaultThresholdFunction, onError }));\n };\n\n const onEvaluateValueChange = (event: FormEvent<HTMLInputElement>, index: number) => {\n dispatch(updateThresholdParams({ param: parseFloat(event.currentTarget.value), index }));\n };\n\n const isRange =\n conditionInState.evaluator.type === EvalFunction.IsWithinRange ||\n conditionInState.evaluator.type === EvalFunction.IsOutsideRange ||\n conditionInState.evaluator.type === EvalFunction.IsOutsideRangeIncluded ||\n conditionInState.evaluator.type === EvalFunction.IsWithinRangeIncluded;\n\n const id = uniqueId('threshold-');\n\n return (\n <>\n <InlineFieldRow>\n <InlineField label={t('expressions.threshold.label-input', 'Input')} labelWidth={labelWidth} htmlFor={id}>\n <Select inputId={id} onChange={onRefIdChange} options={refIds} value={query.expression} width={20} />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <ThresholdSelect onChange={onEvalFunctionChange} value={thresholdFunction} />\n\n {isRange ? (\n <>\n <Input\n type=\"number\"\n width={10}\n onChange={(event) => onEvaluateValueChange(event, 0)}\n defaultValue={conditionInState.evaluator.params[0]}\n />\n <ToLabel />\n <Input\n type=\"number\"\n width={10}\n onChange={(event) => onEvaluateValueChange(event, 1)}\n defaultValue={conditionInState.evaluator.params[1]}\n />\n </>\n ) : (\n <Input\n type=\"number\"\n width={10}\n onChange={(event) => onEvaluateValueChange(event, 0)}\n defaultValue={conditionInState.evaluator.params[0] || 0}\n />\n )}\n </InlineFieldRow>\n {useHysteresis && <HysteresisSection isRange={isRange} onError={onError} />}\n </>\n );\n interface HysteresisSectionProps {\n isRange: boolean;\n onError?: (error: string | undefined) => void;\n }\n\n function HysteresisSection({ isRange, onError }: HysteresisSectionProps) {\n const hasHysteresis = Boolean(conditionInState.unloadEvaluator);\n\n const onHysteresisCheckChange = (event: FormEvent<HTMLInputElement>) => {\n dispatch(updateHysteresisChecked({ hysteresisChecked: event.currentTarget.checked, onError }));\n allowOnblurFromUnload.current = true;\n };\n const allowOnblurFromUnload = React.useRef(true);\n const onHysteresisCheckDown: React.MouseEventHandler<HTMLDivElement> | undefined = () => {\n allowOnblurFromUnload.current = false;\n };\n\n return (\n <div className={styles.hysteresis}>\n {/* This is to enhance the user experience for mouse users.\n The onBlur event in RecoveryThresholdRow inputs triggers validations,\n but we want to skip them when the switch is clicked as this click should inmount this component.\n To achieve this, we use the onMouseDown event to set a flag, which is later utilized in the onBlur event to bypass validations.\n The onMouseDown event precedes the onBlur event, unlike onchange. */}\n\n {/*Disabling the a11y rules here as the InlineSwitch handles keyboard interactions */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div onMouseDown={onHysteresisCheckDown}>\n <InlineSwitch\n showLabel={true}\n label={t('alerting.rule-form.threshold.recovery.title', 'Custom recovery threshold')}\n value={hasHysteresis}\n onChange={onHysteresisCheckChange}\n className={styles.switch}\n />\n </div>\n\n {hasHysteresis && (\n <RecoveryThresholdRow\n isRange={isRange}\n condition={conditionInState}\n onError={onError}\n dispatch={dispatch}\n allowOnblur={allowOnblurFromUnload}\n />\n )}\n </div>\n );\n }\n};\n\ninterface RecoveryThresholdRowProps {\n isRange: boolean;\n condition: ClassicCondition;\n onError?: (error: string | undefined) => void;\n dispatch: React.Dispatch<AnyAction>;\n allowOnblur: React.MutableRefObject<boolean>;\n}\n\nfunction RecoveryThresholdRow({ isRange, condition, onError, dispatch, allowOnblur }: RecoveryThresholdRowProps) {\n const styles = useStyles2(getStyles);\n\n const onUnloadValueChange = (event: FormEvent<HTMLInputElement>, paramIndex: number) => {\n const newValue = parseFloat(event.currentTarget.value);\n dispatch(updateUnloadParams({ param: newValue, index: paramIndex, onError }));\n };\n\n // check if is valid for the current unload evaluator params\n const error = isInvalid(condition);\n // get the error message depending on the unload evaluator type\n const { errorMsg: invalidErrorMsg, errorMsgFrom, errorMsgTo } = error ?? {};\n\n if (isRange) {\n return <RecoveryForRange allowOnblur={allowOnblur} />;\n } else {\n return <RecoveryForSingleValue allowOnblur={allowOnblur} />;\n }\n\n /* We prioritize the onMouseDown event over the onBlur event. This is because the onBlur event is executed before the onChange event that we have\n in the hysteresis checkbox, and because of that, we were validating when unchecking the switch.\n We need to uncheck the switch before the onBlur event is executed.*/\n interface RecoveryProps {\n allowOnblur: React.MutableRefObject<boolean>;\n }\n\n function RecoveryForRange({ allowOnblur }: RecoveryProps) {\n switch (condition.evaluator.type) {\n case EvalFunction.IsWithinRange:\n if (condition.evaluator.type === EvalFunction.IsWithinRange) {\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-outside-range',\n 'Stop alerting (or pending state) when outside range'\n )}\n labelWidth={'auto'}\n >\n <Stack direction=\"row\" gap={0}>\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgFrom)} error={errorMsgFrom} className={styles.noMargin}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 0)}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </div>\n <ToLabel />\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgTo)} error={errorMsgTo}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 1)}\n defaultValue={condition.unloadEvaluator?.params[1]}\n />\n </InlineField>\n </div>\n </Stack>\n </InlineField>\n </InlineFieldRow>\n );\n }\n case EvalFunction.IsOutsideRange:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-inside-range',\n 'Stop alerting (or pending state) when inside range'\n )}\n labelWidth={'auto'}\n >\n <Stack direction=\"row\" gap={0}>\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgFrom)} error={errorMsgFrom}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 0)}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </div>\n\n <ToLabel />\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgTo)} error={errorMsgTo}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 1)}\n defaultValue={condition.unloadEvaluator?.params[1]}\n />\n </InlineField>\n </div>\n </Stack>\n </InlineField>\n </InlineFieldRow>\n );\n case EvalFunction.IsOutsideRangeIncluded:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-inside-range',\n 'Stop alerting (or pending state) when inside range'\n )}\n labelWidth={'auto'}\n >\n <Stack direction=\"row\" gap={0}>\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgFrom)} error={errorMsgFrom}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 0)}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </div>\n <ToLabel />\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgTo)} error={errorMsgTo}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 1)}\n defaultValue={condition.unloadEvaluator?.params[1]}\n />\n </InlineField>\n </div>\n </Stack>\n </InlineField>\n </InlineFieldRow>\n );\n case EvalFunction.IsWithinRangeIncluded:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-outside-range',\n 'Stop alerting (or pending state) when outside range'\n )}\n labelWidth={'auto'}\n >\n <Stack direction=\"row\" gap={0}>\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgFrom)} error={errorMsgFrom}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 0)}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </div>\n <ToLabel />\n <div className={styles.range}>\n <InlineField invalid={Boolean(errorMsgTo)} error={errorMsgTo}>\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => allowOnblur.current && onUnloadValueChange(event, 1)}\n defaultValue={condition.unloadEvaluator?.params[1]}\n />\n </InlineField>\n </div>\n </Stack>\n </InlineField>\n </InlineFieldRow>\n );\n default:\n return null;\n }\n }\n\n function RecoveryForSingleValue({ allowOnblur }: RecoveryProps) {\n switch (condition.evaluator.type) {\n case EvalFunction.IsAbove:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-bellow',\n 'Stop alerting (or pending state) when below'\n )}\n labelWidth={'auto'}\n invalid={Boolean(invalidErrorMsg)}\n error={invalidErrorMsg}\n >\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => {\n allowOnblur.current && onUnloadValueChange(event, 0);\n }}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </InlineFieldRow>\n );\n case EvalFunction.IsBelow:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-above',\n 'Stop alerting (or pending state) when above'\n )}\n labelWidth={'auto'}\n invalid={Boolean(invalidErrorMsg)}\n error={invalidErrorMsg}\n >\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => {\n allowOnblur.current && onUnloadValueChange(event, 0);\n }}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </InlineFieldRow>\n );\n case EvalFunction.IsEqual:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-equal',\n 'Stop alerting (or pending state) when equal to'\n )}\n labelWidth={'auto'}\n invalid={Boolean(invalidErrorMsg)}\n error={invalidErrorMsg}\n >\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => {\n allowOnblur.current && onUnloadValueChange(event, 0);\n }}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </InlineFieldRow>\n );\n case EvalFunction.IsNotEqual:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-not-equal',\n 'Stop alerting (or pending state) when not equal to'\n )}\n labelWidth={'auto'}\n invalid={Boolean(invalidErrorMsg)}\n error={invalidErrorMsg}\n >\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => {\n allowOnblur.current && onUnloadValueChange(event, 0);\n }}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </InlineFieldRow>\n );\n case EvalFunction.IsGreaterThanEqual:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-less',\n 'Stop alerting (or pending state) when less than'\n )}\n labelWidth={'auto'}\n invalid={Boolean(invalidErrorMsg)}\n error={invalidErrorMsg}\n >\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => {\n allowOnblur.current && onUnloadValueChange(event, 0);\n }}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </InlineFieldRow>\n );\n case EvalFunction.IsLessThanEqual:\n return (\n <InlineFieldRow className={styles.hysteresis}>\n <InlineField\n label={t(\n 'alerting.rule-form.threshold.recovery.stop-alerting-more',\n 'Stop alerting (or pending state) when more than'\n )}\n labelWidth={'auto'}\n invalid={Boolean(invalidErrorMsg)}\n error={invalidErrorMsg}\n >\n <Input\n type=\"number\"\n width={10}\n onBlur={(event) => {\n allowOnblur.current && onUnloadValueChange(event, 0);\n }}\n defaultValue={condition.unloadEvaluator?.params[0]}\n />\n </InlineField>\n </InlineFieldRow>\n );\n default:\n return null;\n }\n }\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n range: css({\n width: 'min-content',\n }),\n hysteresis: css({\n marginTop: theme.spacing(2),\n }),\n switch: css({\n paddingLeft: theme.spacing(1),\n }),\n noMargin: css({\n margin: 0,\n }),\n});\n","/**\n * The channel id is defined as:\n *\n * ${scope}/${namespace}/${path}\n *\n * The scope drives how the namespace is used and controlled\n *\n * @alpha\n */\nexport enum LiveChannelScope {\n DataSource = 'ds', // namespace = data source ID\n Plugin = 'plugin', // namespace = plugin name (singleton works for apps too)\n Grafana = 'grafana', // namespace = feature\n Stream = 'stream', // namespace = id for the managed data stream\n Watch = 'watch', // namespace = k8s group we will watch\n}\n\n/**\n * The type of data to expect in a given channel\n *\n * @alpha\n */\nexport enum LiveChannelType {\n DataStream = 'stream', // each message contains a batch of rows that will be appended to previous values\n DataFrame = 'frame', // each message is an entire data frame and should *replace* previous content\n JSON = 'json', // arbitrary json message\n}\n\nexport enum LiveChannelConnectionState {\n /** The connection is not yet established */\n Pending = 'pending',\n /** Connected to the channel */\n Connected = 'connected',\n /** Connecting to a channel */\n Connecting = 'connecting',\n /** Disconnected from the channel. The channel will reconnect when possible */\n Disconnected = 'disconnected',\n /** Was at some point connected, and will not try to reconnect */\n Shutdown = 'shutdown',\n /** Channel configuration was invalid and will not connect */\n Invalid = 'invalid',\n}\n\nexport enum LiveChannelEventType {\n Status = 'status',\n Join = 'join',\n Leave = 'leave',\n Message = 'message',\n}\n\n/**\n * @alpha -- experimental\n */\nexport interface LiveChannelStatusEvent {\n type: LiveChannelEventType.Status;\n\n /**\n * {scope}/{namespace}/{path}\n */\n id: string;\n\n /**\n * unix millies timestamp for the last status change\n */\n timestamp: number;\n\n /**\n * flag if the channel is actively connected to the channel.\n * This may be false while the connections get established or if the network is lost\n * As long as the `shutdown` flag is not set, the connection will try to reestablish\n */\n state: LiveChannelConnectionState;\n\n /**\n * When joining a channel, there may be an initial packet in the subscribe method\n */\n message?: any;\n\n /**\n * The last error.\n *\n * This will remain in the status until a new message is successfully received from the channel\n */\n error?: any;\n}\n\nexport interface LiveChannelJoinEvent {\n type: LiveChannelEventType.Join;\n user: any; // @alpha -- experimental -- will be filled in when we improve the UI\n}\n\nexport interface LiveChannelLeaveEvent {\n type: LiveChannelEventType.Leave;\n user: any; // @alpha -- experimental -- will be filled in when we improve the UI\n}\n\nexport interface LiveChannelMessageEvent<T> {\n type: LiveChannelEventType.Message;\n message: T;\n}\n\nexport type LiveChannelEvent<T = any> =\n | LiveChannelStatusEvent\n | LiveChannelJoinEvent\n | LiveChannelLeaveEvent\n | LiveChannelMessageEvent<T>;\n\nexport function isLiveChannelStatusEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelStatusEvent {\n return evt.type === LiveChannelEventType.Status;\n}\n\nexport function isLiveChannelJoinEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelJoinEvent {\n return evt.type === LiveChannelEventType.Join;\n}\n\nexport function isLiveChannelLeaveEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelLeaveEvent {\n return evt.type === LiveChannelEventType.Leave;\n}\n\nexport function isLiveChannelMessageEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelMessageEvent<T> {\n return evt.type === LiveChannelEventType.Message;\n}\n\n/**\n * @alpha -- experimental\n */\nexport interface LiveChannelPresenceStatus {\n users: any; // @alpha -- experimental -- will be filled in when we improve the UI\n}\n\n/**\n * @alpha -- experimental\n */\nexport type LiveChannelId = string;\n\n/**\n * @alpha -- experimental\n */\nexport interface LiveChannelAddress {\n scope: LiveChannelScope;\n namespace: string; // depends on the scope\n path: string;\n\n /**\n * Additional metadata passed to a channel. The backend will propagate this JSON object to\n * each OnSubscribe and RunStream calls. This value should be constant across multiple requests\n * to the same channel path\n */\n data?: any;\n}\n\n/**\n * Return an address from a string\n *\n * @alpha -- experimental\n */\nexport function parseLiveChannelAddress(id?: string): LiveChannelAddress | undefined {\n if (id?.length) {\n let parts = id.trim().split('/');\n if (parts.length >= 3) {\n return {\n scope: parts[0] as LiveChannelScope,\n namespace: parts[1],\n path: parts.slice(2).join('/'),\n };\n }\n }\n return undefined;\n}\n\n/**\n * Check if the address has a scope, namespace, and path\n *\n * @alpha -- experimental\n */\nexport function isValidLiveChannelAddress(addr?: LiveChannelAddress): addr is LiveChannelAddress {\n return !!(addr?.path && addr.namespace && addr.scope);\n}\n\n/**\n * Convert the address to an explicit channel path\n *\n * @alpha -- experimental\n */\nexport function toLiveChannelId(addr: LiveChannelAddress): LiveChannelId {\n if (!addr.scope) {\n return '';\n }\n let id: string = addr.scope;\n if (!addr.namespace) {\n return id;\n }\n id += '/' + addr.namespace;\n if (!addr.path) {\n return id;\n }\n return id + '/' + addr.path;\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { useTheme2, useStyles2, ColorPicker, IconButton } from '@grafana/ui';\nimport { ColorSwatch } from '@grafana/ui/internal';\n\nexport interface ColorValueEditorSettings {\n placeholder?: string;\n /** defaults to true */\n enableNamedColors?: boolean;\n /** defaults to false */\n isClearable?: boolean;\n}\n\ninterface Props {\n id?: string;\n value?: string;\n onChange: (value: string | undefined) => void;\n settings?: ColorValueEditorSettings;\n\n // Will show placeholder or details\n details?: boolean;\n}\n\n/**\n * @alpha\n * */\nexport const ColorValueEditor = ({ value, settings, onChange, details, id }: Props) => {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n return (\n <ColorPicker color={value ?? ''} onChange={onChange} enableNamedColors={settings?.enableNamedColors !== false}>\n {({ ref, showColorPicker, hideColorPicker }) => {\n return (\n <div className={styles.spot}>\n <div className={styles.colorPicker}>\n <ColorSwatch\n ref={ref}\n id={id}\n onClick={showColorPicker}\n onMouseLeave={hideColorPicker}\n color={value ? theme.visualization.getColorByName(value) : theme.components.input.borderColor}\n />\n </div>\n {details && (\n <>\n {value ? (\n // TODO: fix keyboard a11y\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <span className={styles.colorText} onClick={showColorPicker}>\n {value}\n </span>\n ) : (\n // TODO: fix keyboard a11y\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <span className={styles.placeholderText} onClick={showColorPicker}>\n {settings?.placeholder ?? 'Select color'}\n </span>\n )}\n {settings?.isClearable && value && (\n <IconButton\n name=\"times\"\n onClick={() => onChange(undefined)}\n tooltip={t('options-ui.color.clear-tooltip', 'Clear settings')}\n />\n )}\n </>\n )}\n </div>\n );\n }}\n </ColorPicker>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n spot: css({\n cursor: 'pointer',\n color: theme.colors.text.primary,\n background: theme.components.input.background,\n borderRadius: theme.shape.radius.default,\n padding: '3px',\n height: theme.v1.spacing.formInputHeight,\n border: `1px solid ${theme.components.input.borderColor}`,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n alignContent: 'flex-end',\n '&:hover': {\n border: `1px solid ${theme.components.input.borderHover}`,\n },\n }),\n colorPicker: css({\n padding: `0 ${theme.spacing(1)}`,\n }),\n colorText: css({\n flexGrow: 2,\n }),\n placeholderText: css({\n flexGrow: 2,\n color: theme.colors.text.secondary,\n }),\n };\n};\n","import { useCallback } from 'react';\n\nimport { DataQuery, DataSourceApi, DataSourceJsonData, QueryEditorProps, StandardVariableQuery } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\n\nimport { pluginImporter } from '../../plugins/importer/pluginImporter';\nimport {\n hasCustomVariableSupport,\n hasDatasourceVariableSupport,\n hasLegacyVariableSupport,\n hasStandardVariableSupport,\n} from '../guard';\nimport { VariableQueryEditorType } from '../types';\n\nimport { LegacyVariableQueryEditor } from './LegacyVariableQueryEditor';\n\nexport async function getVariableQueryEditor<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData,\n VariableQuery extends DataQuery = TQuery,\n>(\n datasource: DataSourceApi<TQuery, TOptions>,\n importDataSourcePluginFunc = pluginImporter.importDataSource\n): Promise<VariableQueryEditorType> {\n if (hasCustomVariableSupport(datasource)) {\n return datasource.variables.editor;\n }\n\n if (hasDatasourceVariableSupport(datasource)) {\n const dsPlugin = await importDataSourcePluginFunc(datasource.meta!);\n\n if (!dsPlugin.components.QueryEditor) {\n throw new Error('Missing QueryEditor in plugin definition.');\n }\n\n return dsPlugin.components.QueryEditor ?? null;\n }\n\n if (hasStandardVariableSupport(datasource)) {\n return StandardVariableQueryEditor;\n }\n\n if (hasLegacyVariableSupport(datasource)) {\n const dsPlugin = await importDataSourcePluginFunc(datasource.meta!);\n return dsPlugin.components.VariableQueryEditor ?? LegacyVariableQueryEditor;\n }\n\n return null;\n}\n\nexport function StandardVariableQueryEditor<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData,\n>({\n datasource: propsDatasource,\n query: propsQuery,\n onChange: propsOnChange,\n}: QueryEditorProps<any, TQuery, TOptions, StandardVariableQuery>) {\n const onChange = useCallback(\n (query: any) => {\n propsOnChange({ refId: 'StandardVariableQuery', query });\n },\n [propsOnChange]\n );\n\n return (\n <LegacyVariableQueryEditor\n query={propsQuery.query}\n onChange={onChange}\n datasource={propsDatasource}\n templateSrv={getTemplateSrv()}\n />\n );\n}\n","import { createEntityAdapter, createSlice } from '@reduxjs/toolkit';\n\nimport { Invitee } from 'app/types/user';\n\nimport { fetchInvitees, revokeInvite } from './actions';\n\nexport type Status = 'idle' | 'loading' | 'succeeded' | 'failed';\n\nconst invitesAdapter = createEntityAdapter({ selectId: (invite: Invitee) => invite.code });\nexport const selectors = invitesAdapter.getSelectors();\nexport const initialState = invitesAdapter.getInitialState<{ status: Status }>({ status: 'idle' });\n\nconst invitesSlice = createSlice({\n name: 'invites',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(fetchInvitees.pending, (state) => {\n state.status = 'loading';\n })\n .addCase(fetchInvitees.fulfilled, (state, { payload: invites }) => {\n invitesAdapter.setAll(state, invites);\n state.status = 'succeeded';\n })\n .addCase(fetchInvitees.rejected, (state) => {\n state.status = 'failed';\n })\n .addCase(revokeInvite.fulfilled, (state, { payload: inviteCode }) => {\n invitesAdapter.removeOne(state, inviteCode);\n state.status = 'succeeded';\n });\n },\n});\n\nexport const invitesReducer = invitesSlice.reducer;\n\nexport default {\n invites: invitesReducer,\n};\n","import { Action } from '../../types/action';\nimport { Field } from '../../types/dataFrame';\nimport { DataLink } from '../../types/dataLink';\nimport { FieldOverrideContext } from '../../types/fieldOverrides';\nimport { SelectableValue } from '../../types/select';\nimport { SliderMarks } from '../../types/slider';\nimport { ThresholdsConfig } from '../../types/thresholds';\nimport { ValueMapping } from '../../types/valueMapping';\n\nexport const identityOverrideProcessor = <T>(value: T) => {\n return value;\n};\n\nexport interface NumberFieldConfigSettings {\n placeholder?: string;\n integer?: boolean;\n min?: number;\n max?: number;\n step?: number;\n}\n\nexport const numberOverrideProcessor = (\n value: unknown,\n context: FieldOverrideContext,\n settings?: NumberFieldConfigSettings\n) => {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return parseFloat(String(value));\n};\n\nexport const displayNameOverrideProcessor = (\n value: unknown,\n context: FieldOverrideContext,\n settings?: StringFieldConfigSettings\n) => {\n // clear the cached display name\n delete context.field?.state?.displayName;\n return stringOverrideProcessor(value, context, settings);\n};\n\nexport interface SliderFieldConfigSettings {\n min: number;\n max: number;\n step?: number;\n included?: boolean;\n marks?: SliderMarks;\n ariaLabelForHandle?: string;\n}\n\nexport interface DataLinksFieldConfigSettings {\n showOneClick?: boolean;\n}\n\nexport const dataLinksOverrideProcessor = (\n value: any,\n _context: FieldOverrideContext,\n _settings?: DataLinksFieldConfigSettings\n): DataLink[] => {\n return value;\n};\n\nexport const actionsOverrideProcessor = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n _context: FieldOverrideContext,\n _settings?: DataLinksFieldConfigSettings\n): Action[] => {\n return value;\n};\n\nexport interface ValueMappingFieldConfigSettings {}\n\nexport const valueMappingsOverrideProcessor = (\n value: any,\n _context: FieldOverrideContext,\n _settings?: ValueMappingFieldConfigSettings\n): ValueMapping[] => {\n return value; // !!!! likely not !!!!\n};\n\nexport interface SelectFieldConfigSettings<T> {\n allowCustomValue?: boolean;\n\n isClearable?: boolean;\n\n /** The default options */\n options: Array<SelectableValue<T>>;\n\n /** Optionally use the context to define the options */\n getOptions?: (context: FieldOverrideContext) => Promise<Array<SelectableValue<T>>>;\n}\n\nexport const selectOverrideProcessor = (\n value: any,\n _context: FieldOverrideContext,\n _settings?: SelectFieldConfigSettings<any>\n) => {\n return value;\n};\n\nexport interface StringFieldConfigSettings {\n placeholder?: string;\n maxLength?: number;\n expandTemplateVars?: boolean;\n useTextarea?: boolean;\n rows?: number;\n}\n\nexport const stringOverrideProcessor = (\n value: unknown,\n context: FieldOverrideContext,\n settings?: StringFieldConfigSettings\n) => {\n if (value === null || value === undefined) {\n return value;\n }\n if (settings && settings.expandTemplateVars && context.replaceVariables && typeof value === 'string') {\n return context.replaceVariables(value, context.field!.state!.scopedVars);\n }\n return `${value}`;\n};\n\nexport interface ThresholdsFieldConfigSettings {\n // Anything?\n}\n\nexport const thresholdsOverrideProcessor = (\n value: any,\n _context: FieldOverrideContext,\n _settings?: ThresholdsFieldConfigSettings\n): ThresholdsConfig => {\n return value; // !!!! likely not !!!!\n};\n\nexport interface UnitFieldConfigSettings {\n isClearable?: boolean;\n}\n\nexport const unitOverrideProcessor = (\n value: boolean,\n _context: FieldOverrideContext,\n _settings?: UnitFieldConfigSettings\n) => {\n return value;\n};\n\nexport const booleanOverrideProcessor = (\n value: boolean,\n _context: FieldOverrideContext,\n _settings?: ThresholdsFieldConfigSettings\n) => {\n return value; // !!!! likely not !!!!\n};\n\nexport interface FieldColorConfigSettings {\n /**\n * When switching to a visualization that does not support by value coloring then Grafana will\n * switch to a by series palette based color mode\n */\n byValueSupport?: boolean;\n /**\n * When switching to a visualization that has this set to true then Grafana will change color mode\n * to from thresholds if it was set to a by series palette\n */\n preferThresholdsMode?: boolean;\n /**\n * Set to true if the visualization supports both by value and by series\n * This will enable the Color by series UI option that sets the `color.seriesBy` option.\n */\n bySeriesSupport?: boolean;\n}\n\nexport interface StatsPickerConfigSettings {\n /**\n * Enable multi-selection in the stats picker\n */\n allowMultiple: boolean;\n /**\n * Default stats to be use in the stats picker\n */\n defaultStat?: string;\n}\n\nexport enum FieldNamePickerBaseNameMode {\n IncludeAll = 'all',\n ExcludeBaseNames = 'exclude',\n OnlyBaseNames = 'only',\n}\n\nexport interface FieldNamePickerConfigSettings {\n /**\n * Function is a predicate, to test each element of the array.\n * Return a value that coerces to true to keep the field, or to false otherwise.\n */\n filter?: (field: Field) => boolean;\n\n /**\n * Show this text when no values are found\n */\n noFieldsMessage?: string;\n\n /**\n * Sets the width to a pixel value.\n */\n width?: number;\n\n /**\n * Exclude names that can match a collection of values\n */\n baseNameMode?: FieldNamePickerBaseNameMode;\n\n /**\n * Placeholder text to display when nothing is selected.\n */\n placeholderText?: string;\n\n /** When set to false, the value can not be removed */\n isClearable?: boolean;\n}\n","import {\n DataQueryResponse,\n KeyValue,\n LoadingState,\n DataQueryError,\n TimeSeries,\n TableData,\n toDataFrame,\n DataFrame,\n MetricFindValue,\n FieldType,\n DataQuery,\n DataFrameJSON,\n dataFrameFromJSON,\n QueryResultMetaNotice,\n} from '@grafana/data';\n\nimport { FetchError, FetchResponse } from '../services';\n\nimport { HealthCheckResultDetails } from './DataSourceWithBackend';\nimport { toDataQueryError } from './toDataQueryError';\n\nexport const cachedResponseNotice: QueryResultMetaNotice = { severity: 'info', text: 'Cached response' };\n\n/**\n * Single response object from a backend data source. Properties are optional but response should contain at least\n * an error or a some data (but can contain both). Main way to send data is with dataframes attribute as series and\n * tables data attributes are legacy formats.\n *\n * @internal\n */\nexport interface DataResponse {\n error?: string;\n refId?: string;\n frames?: DataFrameJSON[];\n status?: number;\n\n // Legacy TSDB format...\n series?: TimeSeries[];\n tables?: TableData[];\n}\n\n/**\n * This is the type of response expected form backend datasource.\n *\n * @internal\n */\nexport interface BackendDataSourceResponse {\n results: KeyValue<DataResponse>;\n}\n\n/**\n * Parse the results from /api/ds/query into a DataQueryResponse\n *\n * @param res - the HTTP response data.\n * @param queries - optional DataQuery array that will order the response based on the order of query refId's.\n *\n * @public\n */\nexport function toDataQueryResponse(\n res:\n | { data: BackendDataSourceResponse | undefined }\n | FetchResponse<BackendDataSourceResponse | undefined>\n | DataQueryError,\n queries?: DataQuery[]\n): DataQueryResponse {\n const rsp: DataQueryResponse = { data: [], state: LoadingState.Done };\n\n const traceId = 'traceId' in res ? res.traceId : undefined;\n\n if (traceId != null) {\n rsp.traceIds = [traceId];\n }\n\n // If the response isn't in a correct shape we just ignore the data and pass empty DataQueryResponse.\n const fetchResponse = res as FetchResponse;\n if (fetchResponse.data?.results) {\n const results = fetchResponse.data.results;\n const refIDs = queries?.length ? queries.map((q) => q.refId) : Object.keys(results);\n const cachedResponse = isCachedResponse(fetchResponse);\n const data: DataResponse[] = [];\n\n for (const refId of refIDs) {\n const dr = results[refId];\n if (!dr) {\n continue;\n }\n dr.refId = refId;\n data.push(dr);\n }\n\n for (const dr of data) {\n if (dr.error) {\n const errorObj: DataQueryError = {\n refId: dr.refId,\n message: dr.error,\n status: dr.status,\n };\n if (traceId != null) {\n errorObj.traceId = traceId;\n }\n if (!rsp.error) {\n rsp.error = { ...errorObj };\n }\n if (rsp.errors) {\n rsp.errors.push({ ...errorObj });\n } else {\n rsp.errors = [{ ...errorObj }];\n }\n rsp.state = LoadingState.Error;\n }\n\n if (dr.frames?.length) {\n for (let js of dr.frames) {\n if (cachedResponse) {\n js = addCacheNotice(js);\n }\n const df = dataFrameFromJSON(js);\n if (!df.refId) {\n df.refId = dr.refId;\n }\n rsp.data.push(df);\n }\n continue; // the other tests are legacy\n }\n\n if (dr.series?.length) {\n for (const s of dr.series) {\n if (!s.refId) {\n s.refId = dr.refId;\n }\n rsp.data.push(toDataFrame(s));\n }\n }\n\n if (dr.tables?.length) {\n for (const s of dr.tables) {\n if (!s.refId) {\n s.refId = dr.refId;\n }\n rsp.data.push(toDataFrame(s));\n }\n }\n }\n }\n\n // When it is not an OK response, make sure the error gets added\n if (fetchResponse.status && fetchResponse.status !== 200) {\n if (rsp.state !== LoadingState.Error) {\n rsp.state = LoadingState.Error;\n }\n if (!rsp.error) {\n rsp.error = toDataQueryError(res);\n }\n }\n\n return rsp;\n}\n\nfunction isCachedResponse(res: FetchResponse<BackendDataSourceResponse | undefined>): boolean {\n const headers = res?.headers;\n if (!headers || !headers.get) {\n return false;\n }\n return headers.get('X-Cache') === 'HIT';\n}\n\nfunction addCacheNotice(frame: DataFrameJSON): DataFrameJSON {\n return {\n ...frame,\n schema: {\n ...frame.schema,\n fields: [...(frame.schema?.fields ?? [])],\n meta: {\n ...frame.schema?.meta,\n notices: [...(frame.schema?.meta?.notices ?? []), cachedResponseNotice],\n isCachedResponse: true,\n },\n },\n };\n}\n\nexport interface TestingStatus {\n message?: string | null;\n status?: string | null;\n details?: HealthCheckResultDetails;\n}\n\n/**\n * Data sources using api/ds/query to test data sources can use this function to\n * handle errors and convert them to TestingStatus object.\n *\n * If possible, this should be avoided in favor of implementing /health endpoint\n * and testing data source with DataSourceWithBackend.testDataSource()\n *\n * Re-thrown errors are handled by testDataSource() in public/app/features/datasources/state/actions.ts\n *\n * @returns {TestingStatus}\n */\nexport function toTestingStatus(err: FetchError): TestingStatus {\n const queryResponse = toDataQueryResponse(err);\n // POST api/ds/query errors returned as { message: string, error: string } objects\n if (queryResponse.error?.data?.message) {\n return {\n status: 'error',\n message: queryResponse.error.data.message,\n details: queryResponse.error?.data?.error ? { message: queryResponse.error.data.error } : undefined,\n };\n }\n // POST api/ds/query errors returned in results object\n else if (queryResponse.error?.refId && queryResponse.error?.message) {\n return {\n status: 'error',\n message: queryResponse.error.message,\n };\n }\n\n throw err;\n}\n\n/**\n * Return the first string or non-time field as the value\n *\n * @beta\n */\nexport function frameToMetricFindValue(frame: DataFrame): MetricFindValue[] {\n if (!frame || !frame.length) {\n return [];\n }\n\n const values: MetricFindValue[] = [];\n let field = frame.fields.find((f) => f.type === FieldType.string);\n if (!field) {\n field = frame.fields.find((f) => f.type !== FieldType.time);\n }\n if (field) {\n for (let i = 0; i < field.values.length; i++) {\n values.push({ text: '' + field.values[i] });\n }\n }\n return values;\n}\n","import { defaultsDeep } from 'lodash';\n\nimport { EventBus } from '../events/types';\nimport { StandardEditorProps } from '../field/standardFieldConfigEditorRegistry';\nimport { Registry } from '../utils/Registry';\n\nimport { OptionsEditorItem } from './OptionsUIRegistryBuilder';\nimport { ScopedVars } from './ScopedVars';\nimport { AlertStateInfo } from './alerts';\nimport { PanelModel } from './dashboard';\nimport { LoadingState, PreferredVisualisationType } from './data';\nimport { DataFrame, FieldType } from './dataFrame';\nimport { DataQueryError, DataQueryRequest, DataQueryTimings } from './datasource';\nimport { FieldConfigSource } from './fieldOverrides';\nimport { IconName } from './icon';\nimport { OptionEditorConfig } from './options';\nimport { PluginMeta } from './plugin';\nimport { AbsoluteTimeRange, TimeRange, TimeZone } from './time';\nimport { DataTransformerConfig } from './transformations';\n\nexport type InterpolateFunction = (value: string, scopedVars?: ScopedVars, format?: string | Function) => string;\n\nexport interface PanelPluginMeta extends PluginMeta {\n /** Indicates that panel does not issue queries */\n skipDataQuery?: boolean;\n /** Indicates that panel should not be available in visualisation picker */\n hideFromList?: boolean;\n /** Sort order */\n sort: number;\n}\n\nexport interface PanelData {\n /** State of the data (loading, done, error, streaming) */\n state: LoadingState;\n\n /** Contains data frames with field overrides applied */\n series: DataFrame[];\n\n /**\n * This is a key that will change when the DataFrame[] structure changes.\n * The revision is a useful way to know if only data has changed or data+structure\n */\n structureRev?: number;\n\n /** A list of annotation items */\n annotations?: DataFrame[];\n\n /**\n * @internal\n */\n alertState?: AlertStateInfo;\n\n /** Request contains the queries and properties sent to the datasource */\n request?: DataQueryRequest;\n\n /** Timing measurements */\n timings?: DataQueryTimings;\n\n /** Any query errors */\n errors?: DataQueryError[];\n /**\n * Single error for legacy reasons\n * @deprecated use errors instead -- will be removed in Grafana 10+\n */\n error?: DataQueryError;\n\n /** Contains the range from the request or a shifted time range if a request uses relative time */\n timeRange: TimeRange;\n\n /** traceIds collected during the processing of the requests */\n traceIds?: string[];\n}\n\nexport interface PanelProps<T = any> {\n /** Unique ID of the panel within the current dashboard */\n id: number;\n\n /** Data available as result of running panel queries, includes dataframes and loading state **/\n data: PanelData;\n\n /** Time range of the current dashboard */\n timeRange: TimeRange;\n\n /** Time zone of the current dashboard */\n timeZone: TimeZone;\n\n /** Panel options set by the user in the panel editor. Includes both default and custom panel options */\n options: T;\n\n /** Indicates whether or not panel should be rendered transparent */\n transparent: boolean;\n\n /** Current width of the panel in pixels */\n width: number;\n\n /** Current height of the panel in pixels */\n height: number;\n\n /** Field options configuration. Controls how field values are displayed (e.g., units, min, max, decimals, thresholds) */\n fieldConfig: FieldConfigSource;\n\n /** @internal */\n renderCounter: number;\n\n /** Panel title */\n title: string;\n\n /** Grafana EventBus */\n eventBus: EventBus;\n\n /** Handler for options change. Invoke it to update the panel custom options. */\n onOptionsChange: (options: T) => void;\n\n /** Field config change handler. Invoke it to update the panel field config. */\n onFieldConfigChange: (config: FieldConfigSource) => void;\n\n /** Template variables interpolation function. Given a string containing template variables, it returns the string with interpolated values. */\n replaceVariables: InterpolateFunction;\n\n /** Time range change handler */\n onChangeTimeRange: (timeRange: AbsoluteTimeRange) => void;\n}\n\nexport interface PanelEditorProps<T = any> {\n /** Panel options */\n options: T;\n /** Panel options change handler */\n onOptionsChange: (\n options: T,\n // callback can be used to run something right after update.\n callback?: () => void\n ) => void;\n /** Result set of panel queries */\n data?: PanelData;\n}\n\n/**\n * This type mirrors the required properties from PanelModel<TOptions> needed for migration handlers.\n *\n * By maintaining a separate type definition, we ensure that changes to PanelModel\n * that would break third-party migration handlers are caught at compile time,\n * rather than failing silently when third-party code attempts to use an incompatible panel.\n *\n * TOptions must be any to follow the same pattern as PanelModel<TOptions>\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface PanelMigrationModel<TOptions = any> {\n id: number;\n type: string;\n title?: string;\n options: TOptions;\n fieldConfig: PanelModel<TOptions>['fieldConfig'];\n pluginVersion?: string;\n targets?: PanelModel<TOptions>['targets'];\n}\n\n/**\n * Called when a panel is first loaded with current panel model to migrate panel options if needed.\n * Can return panel options, or a Promise that resolves to panel options for async migrations\n */\nexport type PanelMigrationHandler<TOptions = any> = (\n panel: PanelMigrationModel<TOptions>\n) => Partial<TOptions> | Promise<Partial<TOptions>>;\n\n/**\n * Called before a panel is initialized. Allows panel inspection for any updates before changing the panel type.\n */\nexport type PanelTypeChangedHandler<TOptions = any> = (\n panel: PanelModel<TOptions>,\n prevPluginId: string,\n prevOptions: Record<string, any>,\n prevFieldConfig: FieldConfigSource\n) => Partial<TOptions>;\n\nexport type PanelOptionEditorsRegistry = Registry<PanelOptionsEditorItem>;\n\nexport interface PanelOptionsEditorProps<TValue> extends StandardEditorProps<TValue> {}\n\nexport interface PanelOptionsEditorItem<TOptions = any, TValue = any, TSettings = any>\n extends OptionsEditorItem<TOptions, TSettings, PanelOptionsEditorProps<TValue>, TValue> {}\n\nexport interface PanelOptionsEditorConfig<TOptions, TSettings = any, TValue = any>\n extends OptionEditorConfig<TOptions, TSettings, TValue> {}\n\n/**\n * @internal\n */\nexport interface PanelMenuItem {\n type?: 'submenu' | 'divider' | 'group';\n text: string;\n iconClassName?: IconName;\n onClick?: (event: React.MouseEvent) => void;\n shortcut?: string;\n href?: string;\n subMenu?: PanelMenuItem[];\n}\n\n/**\n * @internal\n */\nexport interface AngularPanelMenuItem {\n click: Function;\n icon: string;\n href: string;\n divider: boolean;\n text: string;\n shortcut: string;\n submenu: any[];\n}\n\nexport enum VizOrientation {\n Auto = 'auto',\n Vertical = 'vertical',\n Horizontal = 'horizontal',\n}\n\nexport interface PanelPluginDataSupport {\n annotations: boolean;\n alertStates: boolean;\n}\n\n/**\n * @alpha\n */\nexport interface VisualizationSuggestion<TOptions = any, TFieldConfig = any> {\n /** Name of suggestion */\n name: string;\n /** Description */\n description?: string;\n /** Panel plugin id */\n pluginId: string;\n /** Panel plugin options */\n options?: Partial<TOptions>;\n /** Panel plugin field options */\n fieldConfig?: FieldConfigSource<Partial<TFieldConfig>>;\n /** Data transformations */\n transformations?: DataTransformerConfig[];\n /** Options for how to render suggestion card */\n cardOptions?: {\n /** Tweak for small preview */\n previewModifier?: (suggestion: VisualizationSuggestion) => void;\n icon?: string;\n imgSrc?: string;\n };\n /** A value between 0-100 how suitable suggestion is */\n score?: VisualizationSuggestionScore;\n}\n\n/**\n * @alpha\n */\nexport enum VisualizationSuggestionScore {\n /** We are pretty sure this is the best possible option */\n Best = 100,\n /** Should be a really good option */\n Good = 70,\n /** Can be visualized but there are likely better options. If no score is set this score is assumed */\n OK = 50,\n}\n\n/**\n * @alpha\n */\nexport interface PanelDataSummary {\n hasData?: boolean;\n rowCountTotal: number;\n rowCountMax: number;\n frameCount: number;\n fieldCount: number;\n numberFieldCount: number;\n timeFieldCount: number;\n stringFieldCount: number;\n hasNumberField?: boolean;\n hasTimeField?: boolean;\n hasStringField?: boolean;\n /** The first frame that set's this value */\n preferredVisualisationType?: PreferredVisualisationType;\n}\n\n/**\n * @alpha\n */\nexport class VisualizationSuggestionsBuilder {\n /** Current data */\n data?: PanelData;\n /** Current panel & options */\n panel?: PanelModel;\n /** Summary stats for current data */\n dataSummary: PanelDataSummary;\n\n private list: VisualizationSuggestion[] = [];\n\n constructor(data?: PanelData, panel?: PanelModel) {\n this.data = data;\n this.panel = panel;\n this.dataSummary = this.computeDataSummary();\n }\n\n getListAppender<TOptions, TFieldConfig>(defaults: VisualizationSuggestion<TOptions, TFieldConfig>) {\n return new VisualizationSuggestionsListAppender<TOptions, TFieldConfig>(this.list, defaults);\n }\n\n private computeDataSummary() {\n const frames = this.data?.series || [];\n\n let numberFieldCount = 0;\n let timeFieldCount = 0;\n let stringFieldCount = 0;\n let rowCountTotal = 0;\n let rowCountMax = 0;\n let fieldCount = 0;\n let preferredVisualisationType: PreferredVisualisationType | undefined;\n\n for (const frame of frames) {\n rowCountTotal += frame.length;\n\n if (frame.meta?.preferredVisualisationType) {\n preferredVisualisationType = frame.meta.preferredVisualisationType;\n }\n\n for (const field of frame.fields) {\n fieldCount++;\n\n switch (field.type) {\n case FieldType.number:\n numberFieldCount += 1;\n break;\n case FieldType.time:\n timeFieldCount += 1;\n break;\n case FieldType.string:\n stringFieldCount += 1;\n break;\n }\n }\n\n if (frame.length > rowCountMax) {\n rowCountMax = frame.length;\n }\n }\n\n return {\n numberFieldCount,\n timeFieldCount,\n stringFieldCount,\n rowCountTotal,\n rowCountMax,\n fieldCount,\n preferredVisualisationType,\n frameCount: frames.length,\n hasData: rowCountTotal > 0,\n hasTimeField: timeFieldCount > 0,\n hasNumberField: numberFieldCount > 0,\n hasStringField: stringFieldCount > 0,\n };\n }\n\n getList() {\n return this.list;\n }\n}\n\n/**\n * @alpha\n */\nexport type VisualizationSuggestionsSupplier = {\n /**\n * Adds good suitable suggestions for the current data\n */\n getSuggestionsForData: (builder: VisualizationSuggestionsBuilder) => void;\n};\n\n/**\n * Helps with typings and defaults\n * @alpha\n */\nexport class VisualizationSuggestionsListAppender<TOptions, TFieldConfig> {\n constructor(\n private list: VisualizationSuggestion[],\n private defaults: VisualizationSuggestion<TOptions, TFieldConfig>\n ) {}\n\n append(overrides: Partial<VisualizationSuggestion<TOptions, TFieldConfig>>) {\n this.list.push(defaultsDeep(overrides, this.defaults));\n }\n}\n","import { compareArrayValues, compareDataFrameStructures, PanelData } from '@grafana/data';\n\nexport const setStructureRevision = (result: PanelData, lastResult: PanelData | undefined) => {\n let structureRev = 1;\n\n if (lastResult?.structureRev && lastResult.series) {\n structureRev = lastResult.structureRev;\n const sameStructure = compareArrayValues(result.series, lastResult.series, compareDataFrameStructures);\n if (!sameStructure) {\n structureRev++;\n }\n }\n\n result.structureRev = structureRev;\n return result;\n};\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { ActionModel, Field, GrafanaTheme2, LinkModel, ThemeSpacingTokens } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { ActionButton } from '../Actions/ActionButton';\nimport { Button } from '../Button/Button';\nimport { DataLinkButton } from '../DataLinks/DataLinkButton';\nimport { Icon } from '../Icon/Icon';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { ResponsiveProp } from '../Layout/utils/responsiveness';\nimport { AdHocFilterItem } from '../Table/TableNG/types';\n\nexport interface AdHocFilterModel extends AdHocFilterItem {\n onClick: () => void;\n}\n\ninterface VizTooltipFooterProps {\n dataLinks: Array<LinkModel<Field>>;\n actions?: Array<ActionModel<Field>>;\n adHocFilters?: AdHocFilterModel[];\n annotate?: () => void;\n}\n\nexport const ADD_ANNOTATION_ID = 'add-annotation-button';\n\ntype RenderOneClickTrans = (title: string) => React.ReactNode;\ntype RenderItem<T extends LinkModel | ActionModel> = (\n item: T,\n idx: number,\n styles: ReturnType<typeof getStyles>\n) => React.ReactNode;\n\nfunction makeRenderLinksOrActions<T extends LinkModel | ActionModel>(\n renderOneClickTrans: RenderOneClickTrans,\n renderItem: RenderItem<T>,\n itemGap?: ResponsiveProp<ThemeSpacingTokens>\n) {\n const renderLinksOrActions = (items: T[], styles: ReturnType<typeof getStyles>) => {\n if (items.length === 0) {\n return;\n }\n\n const oneClickItem = items.find((item) => item.oneClick === true);\n\n if (oneClickItem != null) {\n return (\n <div className={styles.footerSection}>\n <Stack direction=\"column\" justifyContent=\"flex-start\" gap={0.5}>\n <span className={styles.oneClickWrapper}>\n <Icon name=\"info-circle\" size=\"lg\" className={styles.infoIcon} />\n {renderOneClickTrans(oneClickItem.title)}\n </span>\n </Stack>\n </div>\n );\n }\n\n return (\n <div className={styles.footerSection}>\n <Stack direction=\"column\" justifyContent=\"flex-start\" gap={itemGap}>\n {items.map((item, i) => renderItem(item, i, styles))}\n </Stack>\n </div>\n );\n };\n\n return renderLinksOrActions;\n}\n\nconst renderDataLinks = makeRenderLinksOrActions<LinkModel>(\n (title) => (\n <Trans i18nKey=\"grafana-ui.viz-tooltip.footer-click-to-navigate\">Click to open {{ linkTitle: title }}</Trans>\n ),\n (item, i, styles) => (\n <DataLinkButton link={item} key={i} buttonProps={{ className: styles.dataLinkButton, fill: 'text' }} />\n ),\n 0.5\n);\n\nconst renderActions = makeRenderLinksOrActions<ActionModel>(\n (title) => <Trans i18nKey=\"grafana-ui.viz-tooltip.footer-click-to-action\">Click to {{ actionTitle: title }}</Trans>,\n (item, i) => <ActionButton key={i} action={item} variant=\"secondary\" />\n);\n\nexport const VizTooltipFooter = ({ dataLinks, actions = [], annotate, adHocFilters = [] }: VizTooltipFooterProps) => {\n const styles = useStyles2(getStyles);\n const hasOneClickLink = useMemo(() => dataLinks.some((link) => link.oneClick === true), [dataLinks]);\n const hasOneClickAction = useMemo(() => actions.some((action) => action.oneClick === true), [actions]);\n\n return (\n <div className={styles.wrapper}>\n {!hasOneClickAction && renderDataLinks(dataLinks, styles)}\n {!hasOneClickLink && renderActions(actions, styles)}\n {!hasOneClickLink && !hasOneClickAction && adHocFilters.length > 0 && (\n <div className={styles.footerSection}>\n {adHocFilters.map((item, index) => (\n <Button key={index} icon=\"filter\" variant=\"secondary\" size=\"sm\" onClick={item.onClick}>\n <Trans i18nKey=\"grafana-ui.viz-tooltip.footer-filter-for-value\">\n Filter for '{{ value: item.value }}'\n </Trans>\n </Button>\n ))}\n </div>\n )}\n {!hasOneClickLink && !hasOneClickAction && annotate != null && (\n <div className={styles.footerSection}>\n <Button icon=\"comment-alt\" variant=\"secondary\" size=\"sm\" id={ADD_ANNOTATION_ID} onClick={annotate}>\n <Trans i18nKey=\"grafana-ui.viz-tooltip.footer-add-annotation\">Add annotation</Trans>\n </Button>\n </div>\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n padding: theme.spacing(0),\n }),\n footerSection: css({\n borderTop: `1px solid ${theme.colors.border.medium}`,\n padding: theme.spacing(1),\n }),\n dataLinkButton: css({\n cursor: 'pointer',\n '&:hover': {\n textDecoration: 'underline',\n background: 'none',\n },\n padding: 0,\n height: 'auto',\n '& span': {\n whiteSpace: 'normal',\n textAlign: 'left',\n },\n }),\n oneClickWrapper: css({\n display: 'flex',\n alignItems: 'center',\n }),\n infoIcon: css({\n color: theme.colors.primary.main,\n paddingRight: theme.spacing(0.5),\n }),\n});\n","import { combineReducers } from '@reduxjs/toolkit';\n\nimport {\n TypedVariableModel,\n DashboardVariableModel,\n OrgVariableModel,\n UserVariableModel,\n VariableHide,\n} from '@grafana/data';\nimport { VariableRefresh } from '@grafana/schema';\nimport { dashboardReducer } from 'app/features/dashboard/state/reducers';\nimport { DashboardState } from 'app/types/dashboard';\nimport { StoreState } from 'app/types/store';\n\nimport { VariableAdapter } from '../adapters';\nimport { NEW_VARIABLE_ID } from '../constants';\nimport { initialVariableModelState } from '../types';\n\nimport { createQueryVariable } from './__tests__/fixtures';\nimport { keyedVariablesReducer, KeyedVariablesState } from './keyedVariablesReducer';\nimport { getInitialTemplatingState, TemplatingState } from './reducers';\nimport { VariablesState } from './types';\n\nexport const getVariableState = (\n noOfVariables: number,\n inEditorIndex = -1,\n includeEmpty = false,\n includeSystem = false\n): VariablesState => {\n const variables: Record<string, TypedVariableModel> = {};\n\n if (includeSystem) {\n const dashboardModel: DashboardVariableModel = {\n ...initialVariableModelState,\n id: '__dashboard',\n name: '__dashboard',\n type: 'system',\n index: -3,\n skipUrlSync: true,\n hide: VariableHide.hideVariable,\n current: {\n value: {\n name: 'A dashboard title',\n uid: 'An dashboard UID',\n toString: () => 'A dashboard title',\n },\n },\n };\n\n const orgModel: OrgVariableModel = {\n ...initialVariableModelState,\n id: '__org',\n name: '__org',\n type: 'system',\n index: -2,\n skipUrlSync: true,\n hide: VariableHide.hideVariable,\n current: {\n value: {\n name: 'An org name',\n id: 1,\n toString: () => '1',\n },\n },\n };\n\n const userModel: UserVariableModel = {\n ...initialVariableModelState,\n id: '__user',\n name: '__user',\n type: 'system',\n index: -1,\n skipUrlSync: true,\n hide: VariableHide.hideVariable,\n current: {\n value: {\n login: 'admin',\n id: 1,\n email: 'admin@test',\n toString: () => '1',\n },\n },\n };\n\n variables[dashboardModel.id] = dashboardModel;\n variables[orgModel.id] = orgModel;\n variables[userModel.id] = userModel;\n }\n\n for (let index = 0; index < noOfVariables; index++) {\n variables[index] = createQueryVariable({\n id: index.toString(),\n name: `Name-${index}`,\n label: `Label-${index}`,\n index,\n });\n }\n\n if (includeEmpty) {\n variables[NEW_VARIABLE_ID] = createQueryVariable({\n id: NEW_VARIABLE_ID,\n name: `Name-${NEW_VARIABLE_ID}`,\n label: `Label-${NEW_VARIABLE_ID}`,\n index: noOfVariables,\n });\n }\n\n return variables;\n};\n\nexport const getVariableTestContext = <Model extends TypedVariableModel>(\n adapter: VariableAdapter<Model>,\n variableOverrides: Partial<Model> = {}\n) => {\n const defaults: Partial<TypedVariableModel> = {\n id: '0',\n rootStateKey: 'key',\n index: 0,\n name: '0',\n };\n\n const defaultVariable = {\n ...adapter.initialState,\n ...defaults,\n };\n\n const initialState: VariablesState = {\n '0': { ...defaultVariable, ...variableOverrides },\n };\n\n return { initialState };\n};\n\nexport const getRootReducer = () =>\n combineReducers({\n dashboard: dashboardReducer,\n templating: keyedVariablesReducer,\n });\n\nexport type RootReducerType = { dashboard: DashboardState; templating: KeyedVariablesState };\n\nexport const getTemplatingRootReducer = () =>\n combineReducers({\n templating: keyedVariablesReducer,\n });\n\nexport type TemplatingReducerType = { templating: KeyedVariablesState };\n\nexport function getPreloadedState(\n key: string,\n templatingState: Partial<TemplatingState>\n): Pick<StoreState, 'templating'> {\n return {\n templating: {\n lastKey: key,\n keys: {\n [key]: {\n ...getInitialTemplatingState(),\n ...templatingState,\n },\n },\n },\n };\n}\n\n// function to find a query variable node in the list of all variables\nexport function findVariableNodeInList(allVariables: TypedVariableModel[], nodeName: string) {\n const variableNode = allVariables.find((v) => {\n return v.name === nodeName;\n });\n return variableNode;\n}\n\n/**\n * Checks if a variable is configured to refresh when the time range changes.\n *\n * The function supports three types of variables: 'query', 'datasource', and 'interval'.\n * Each of these variable types can be configured to refresh based on certain conditions.\n * For 'query' variables, we offer a UI configuration to set refresh \"on time range change.\"\n * For 'interval' variables, the default configuration is often set to refresh \"on time range change.\"\n * For 'datasource' variables, this property is assigned to their model.\n *\n * Note: for datasource, It's unclear if provisioned dashboards might come with this default setting for time range.\n *\n * @param variable - The variable object with its type and refresh setting\n * @returns True if the variable should refresh on time range change, otherwise False\n */\nexport function isVariableOnTimeRangeConfigured(variable: TypedVariableModel) {\n return (\n (variable.type === 'query' || variable.type === 'datasource' || variable.type === 'interval') &&\n variable.refresh === VariableRefresh.onTimeRangeChanged\n );\n}\n","import { castArray, isEqual } from 'lodash';\n\nimport {\n DataQuery,\n getDataSourceRef,\n isDataSourceRef,\n isEmptyObject,\n isObject,\n LoadingState,\n TimeRange,\n TypedVariableModel,\n UrlQueryMap,\n UrlQueryValue,\n OrgVariableModel,\n QueryVariableModel,\n DashboardVariableModel,\n UserVariableModel,\n VariableHide,\n VariableOption,\n VariableRefresh,\n VariableWithOptions,\n} from '@grafana/data';\nimport { config, locationService, logWarning } from '@grafana/runtime';\nimport { notifyApp } from 'app/core/actions';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { store } from 'app/store/store';\nimport { AppNotification } from 'app/types/appNotifications';\nimport { ThunkResult, StoreState } from 'app/types/store';\n\nimport { createErrorNotification } from '../../../core/copy/appNotification';\nimport { appEvents } from '../../../core/core';\nimport { getBackendSrv } from '../../../core/services/backend_srv';\nimport { Graph, Node } from '../../../core/utils/dag';\nimport { getDatasourceSrv } from '../../plugins/datasource_srv';\nimport { getTemplateSrv, TemplateSrv } from '../../templating/template_srv';\nimport { variableAdapters } from '../adapters';\nimport { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE, VARIABLE_PREFIX } from '../constants';\nimport { cleanEditorState } from '../editor/reducer';\nimport { hasCurrent, hasLegacyVariableSupport, hasOptions, hasStandardVariableSupport, isMulti } from '../guard';\nimport { getAllAffectedPanelIdsForVariableChange, getPanelVars } from '../inspect/utils';\nimport { cleanPickerState } from '../pickers/OptionsPicker/reducer';\nimport { alignCurrentWithMulti } from '../shared/multiOptions';\nimport {\n initialVariableModelState,\n TransactionStatus,\n VariablesChanged,\n VariablesChangedEvent,\n VariablesChangedInUrl,\n VariablesTimeRangeProcessDone,\n} from '../types';\nimport {\n ensureStringValues,\n ExtendedUrlQueryMap,\n getCurrentText,\n getCurrentValue,\n getVariableRefresh,\n hasOngoingTransaction,\n toKeyedVariableIdentifier,\n toStateKey,\n toVariablePayload,\n} from '../utils';\n\nimport { findVariableNodeInList, isVariableOnTimeRangeConfigured } from './helpers';\nimport { toKeyedAction } from './keyedVariablesReducer';\nimport { getIfExistsLastKey, getVariable, getVariablesByKey, getVariablesState } from './selectors';\nimport {\n addVariable,\n changeVariableProp,\n setCurrentVariableValue,\n variableStateCompleted,\n variableStateFailed,\n variableStateFetching,\n variableStateNotStarted,\n} from './sharedReducer';\nimport {\n variablesClearTransaction,\n variablesCompleteTransaction,\n variablesInitTransaction,\n} from './transactionReducer';\nimport { KeyedVariableIdentifier } from './types';\nimport { cleanVariables } from './variablesReducer';\n\n// process flow queryVariable\n// thunk => processVariables\n// adapter => setValueFromUrl\n// thunk => setOptionFromUrl\n// adapter => updateOptions\n// thunk => updateQueryVariableOptions\n// action => updateVariableOptions\n// action => updateVariableTags\n// thunk => validateVariableSelectionState\n// adapter => setValue\n// thunk => setOptionAsCurrent\n// action => setCurrentVariableValue\n// thunk => variableUpdated\n// adapter => updateOptions for dependent nodes\n// adapter => setValue\n// thunk => setOptionAsCurrent\n// action => setCurrentVariableValue\n// thunk => variableUpdated\n// adapter => updateOptions for dependent nodes\n// adapter => updateOptions\n// thunk => updateQueryVariableOptions\n// action => updateVariableOptions\n// action => updateVariableTags\n// thunk => validateVariableSelectionState\n// adapter => setValue\n// thunk => setOptionAsCurrent\n// action => setCurrentVariableValue\n// thunk => variableUpdated\n// adapter => updateOptions for dependent nodes\n\nexport const initDashboardTemplating = (key: string, dashboard: DashboardModel): ThunkResult<void> => {\n return (dispatch, getState) => {\n let orderIndex = 0;\n const list = dashboard.templating.list;\n for (let index = 0; index < list.length; index++) {\n const model = fixSelectedInconsistency(list[index]);\n model.rootStateKey = key;\n if (!variableAdapters.getIfExists(model.type)) {\n continue;\n }\n\n dispatch(\n toKeyedAction(key, addVariable(toVariablePayload(model, { global: false, index: orderIndex++, model })))\n );\n }\n\n getTemplateSrv().updateTimeRange(getTimeSrv().timeRange());\n\n const variables = getVariablesByKey(key, getState());\n for (const variable of variables) {\n dispatch(toKeyedAction(key, variableStateNotStarted(toVariablePayload(variable))));\n }\n };\n};\n\nexport function fixSelectedInconsistency(model: TypedVariableModel): TypedVariableModel | VariableWithOptions {\n if (!hasOptions(model)) {\n return model;\n }\n\n let found = false;\n for (const option of model.options) {\n option.selected = false;\n if (Array.isArray(model.current.value)) {\n for (const value of model.current.value) {\n if (option.value === value) {\n option.selected = found = true;\n }\n }\n } else if (option.value === model.current.value) {\n option.selected = found = true;\n }\n }\n\n if (!found && model.options.length) {\n model.options[0].selected = true;\n }\n\n return model;\n}\n\nexport const addSystemTemplateVariables = (key: string, dashboard: DashboardModel): ThunkResult<void> => {\n return (dispatch) => {\n const dashboardModel: DashboardVariableModel = {\n ...initialVariableModelState,\n id: '__dashboard',\n name: '__dashboard',\n type: 'system',\n index: -3,\n skipUrlSync: true,\n hide: VariableHide.hideVariable,\n current: {\n value: {\n name: dashboard.title,\n uid: dashboard.uid,\n toString: () => dashboard.title,\n },\n },\n };\n\n dispatch(\n toKeyedAction(\n key,\n addVariable(\n toVariablePayload(dashboardModel, {\n global: dashboardModel.global,\n index: dashboardModel.index,\n model: dashboardModel,\n })\n )\n )\n );\n\n const orgModel: OrgVariableModel = {\n ...initialVariableModelState,\n id: '__org',\n name: '__org',\n type: 'system',\n index: -2,\n skipUrlSync: true,\n hide: VariableHide.hideVariable,\n current: {\n value: {\n name: contextSrv.user.orgName,\n id: contextSrv.user.orgId,\n toString: () => contextSrv.user.orgId.toString(),\n },\n },\n };\n\n dispatch(\n toKeyedAction(\n key,\n addVariable(toVariablePayload(orgModel, { global: orgModel.global, index: orgModel.index, model: orgModel }))\n )\n );\n\n const userModel: UserVariableModel = {\n ...initialVariableModelState,\n id: '__user',\n name: '__user',\n type: 'system',\n index: -1,\n skipUrlSync: true,\n hide: VariableHide.hideVariable,\n current: {\n value: {\n login: contextSrv.user.login,\n id: contextSrv.user.id,\n email: contextSrv.user.email,\n toString: () => contextSrv.user.id.toString(),\n },\n },\n };\n\n dispatch(\n toKeyedAction(\n key,\n addVariable(\n toVariablePayload(userModel, { global: userModel.global, index: userModel.index, model: userModel })\n )\n )\n );\n };\n};\n\nexport const changeVariableMultiValue = (identifier: KeyedVariableIdentifier, multi: boolean): ThunkResult<void> => {\n return (dispatch, getState) => {\n const { rootStateKey: key } = identifier;\n const variable = getVariable(identifier, getState());\n if (!isMulti(variable) || isEmptyObject(variable.current)) {\n return;\n }\n\n const current = alignCurrentWithMulti(variable.current, multi);\n\n dispatch(\n toKeyedAction(key, changeVariableProp(toVariablePayload(identifier, { propName: 'multi', propValue: multi })))\n );\n dispatch(\n toKeyedAction(key, changeVariableProp(toVariablePayload(identifier, { propName: 'current', propValue: current })))\n );\n };\n};\n\nexport const processVariableDependencies = async (variable: TypedVariableModel, state: StoreState) => {\n if (!variable.rootStateKey) {\n throw new Error(`rootStateKey not found for variable with id:${variable.id}`);\n }\n\n if (isDependencyGraphCircular(variable, state)) {\n throw new Error('Circular dependency in dashboard variables detected. Dashboard may not work as expected.');\n }\n\n const dependencies = getDirectDependencies(variable, state);\n\n if (!isWaitingForDependencies(variable.rootStateKey, dependencies, state)) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const unsubscribe = store.subscribe(() => {\n if (!variable.rootStateKey) {\n throw new Error(`rootStateKey not found for variable with id:${variable.id}`);\n }\n\n if (!isWaitingForDependencies(variable.rootStateKey, dependencies, store.getState())) {\n unsubscribe();\n resolve();\n }\n });\n });\n};\n\nconst isDependencyGraphCircular = (\n variable: TypedVariableModel,\n state: StoreState,\n encounteredDependencyIds: Set<string> = new Set()\n): boolean => {\n if (encounteredDependencyIds.has(variable.id)) {\n return true;\n }\n\n encounteredDependencyIds = new Set([...encounteredDependencyIds, variable.id]);\n\n return getDirectDependencies(variable, state).some((dependency) => {\n return isDependencyGraphCircular(dependency, state, encounteredDependencyIds);\n });\n};\n\nconst getDirectDependencies = (variable: TypedVariableModel, state: StoreState) => {\n if (!variable.rootStateKey) {\n return [];\n }\n\n const directDependencies: TypedVariableModel[] = [];\n\n for (const otherVariable of getVariablesByKey(variable.rootStateKey, state)) {\n if (variable === otherVariable) {\n continue;\n }\n\n if (variableAdapters.getIfExists(variable.type)) {\n if (variableAdapters.get(variable.type).dependsOn(variable, otherVariable)) {\n directDependencies.push(otherVariable);\n }\n }\n }\n\n return directDependencies;\n};\n\nconst isWaitingForDependencies = (key: string, dependencies: TypedVariableModel[], state: StoreState): boolean => {\n if (dependencies.length === 0) {\n return false;\n }\n\n const variables = getVariablesByKey(key, state);\n const notCompletedDependencies = dependencies.filter((d) =>\n variables.some((v) => v.id === d.id && (v.state === LoadingState.NotStarted || v.state === LoadingState.Loading))\n );\n\n return notCompletedDependencies.length > 0;\n};\n\nexport const processVariable = (\n identifier: KeyedVariableIdentifier,\n queryParams: UrlQueryMap\n): ThunkResult<Promise<void>> => {\n return async (dispatch, getState) => {\n const variable = getVariable(identifier, getState());\n await processVariableDependencies(variable, getState());\n\n const urlValue = queryParams[VARIABLE_PREFIX + variable.name];\n if (urlValue !== void 0) {\n const stringUrlValue = ensureStringValues(urlValue);\n await variableAdapters.get(variable.type).setValueFromUrl(variable, stringUrlValue);\n return;\n }\n\n if (variable.hasOwnProperty('refresh')) {\n const refreshableVariable = variable as QueryVariableModel;\n if (\n refreshableVariable.refresh === VariableRefresh.onDashboardLoad ||\n refreshableVariable.refresh === VariableRefresh.onTimeRangeChanged\n ) {\n await dispatch(updateOptions(toKeyedVariableIdentifier(refreshableVariable)));\n return;\n }\n }\n\n if (variable.type === 'custom') {\n await dispatch(updateOptions(toKeyedVariableIdentifier(variable)));\n return;\n }\n\n // for variables that aren't updated via URL or refresh, let's simulate the same state changes\n dispatch(completeVariableLoading(identifier));\n };\n};\n\nexport const processVariables = (key: string): ThunkResult<Promise<void>> => {\n return async (dispatch, getState) => {\n const queryParams = locationService.getSearchObject();\n const promises = getVariablesByKey(key, getState()).map(\n async (variable) => await dispatch(processVariable(toKeyedVariableIdentifier(variable), queryParams))\n );\n\n await Promise.all(promises);\n };\n};\n\nexport const setOptionFromUrl = (\n identifier: KeyedVariableIdentifier,\n urlValue: UrlQueryValue\n): ThunkResult<Promise<void>> => {\n return async (dispatch, getState) => {\n const stringUrlValue = ensureStringValues(urlValue);\n const variable = getVariable(identifier, getState());\n if (getVariableRefresh(variable) !== VariableRefresh.never) {\n // updates options\n await dispatch(updateOptions(toKeyedVariableIdentifier(variable)));\n }\n\n // get variable from state\n const variableFromState = getVariable(toKeyedVariableIdentifier(variable), getState());\n if (!hasOptions(variableFromState)) {\n return;\n }\n\n if (!variableFromState) {\n throw new Error(`Couldn't find variable with name: ${variable.name}`);\n }\n // Simple case. Value in URL matches existing options text or value.\n let option = variableFromState.options.find((op) => {\n return op.text === stringUrlValue || op.value === stringUrlValue;\n });\n\n if (!option && isMulti(variableFromState)) {\n if (variableFromState.allValue && stringUrlValue === variableFromState.allValue) {\n option = { text: ALL_VARIABLE_TEXT, value: ALL_VARIABLE_VALUE, selected: false };\n }\n }\n\n if (!option) {\n let defaultText = stringUrlValue;\n const defaultValue = stringUrlValue;\n\n if (Array.isArray(stringUrlValue)) {\n // Multiple values in the url. We construct text as a list of texts from all matched options.\n defaultText = stringUrlValue.reduce((acc: string[], item: string) => {\n const foundOption = variableFromState.options.find((o) => o.value === item);\n if (!foundOption) {\n // @ts-ignore according to strict null errors this can never happen\n // TODO: investigate this further or refactor code\n return [].concat(acc, [item]);\n }\n\n // @ts-ignore according to strict null errors this can never happen\n // TODO: investigate this further or refactor code\n return [].concat(acc, [foundOption.text]);\n }, []);\n }\n\n // It is possible that we did not match the value to any existing option. In that case the URL value will be\n // used anyway for both text and value.\n option = { text: defaultText, value: defaultValue, selected: false };\n }\n\n if (isMulti(variableFromState)) {\n // In case variable is multiple choice, we cast to array to preserve the same behavior as when selecting\n // the option directly, which will return even single value in an array.\n option = alignCurrentWithMulti(\n { text: castArray(option.text), value: castArray(option.value), selected: false },\n variableFromState.multi\n );\n }\n\n await variableAdapters.get(variable.type).setValue(variableFromState, option);\n };\n};\n\nexport const selectOptionsForCurrentValue = (variable: VariableWithOptions): VariableOption[] => {\n let i, y, value, option;\n const selected: VariableOption[] = [];\n\n for (i = 0; i < variable.options.length; i++) {\n option = { ...variable.options[i] };\n option.selected = false;\n if (Array.isArray(variable.current.value)) {\n for (y = 0; y < variable.current.value.length; y++) {\n value = variable.current.value[y];\n if (option.value === value) {\n option.selected = true;\n selected.push(option);\n }\n }\n } else if (option.value === variable.current.value) {\n option.selected = true;\n selected.push(option);\n }\n }\n\n return selected;\n};\n\nexport const validateVariableSelectionState = (\n identifier: KeyedVariableIdentifier,\n defaultValue?: string\n): ThunkResult<Promise<void>> => {\n return (dispatch, getState) => {\n const variableInState = getVariable(identifier, getState());\n if (!hasOptions(variableInState)) {\n return Promise.resolve();\n }\n\n const current = variableInState.current || ({} as unknown as VariableOption);\n const setValue = variableAdapters.get(variableInState.type).setValue;\n\n if (Array.isArray(current.value)) {\n const selected = selectOptionsForCurrentValue(variableInState);\n\n // if none pick first\n if (selected.length === 0) {\n const option = variableInState.options[0];\n return setValue(variableInState, {\n value: typeof option.value === 'string' ? [option.value] : option.value,\n text: typeof option.text === 'string' ? [option.text] : option.text,\n selected: true,\n });\n }\n\n const option: VariableOption = {\n value: selected.map((v) => v.value) as string[],\n text: selected.map((v) => v.text) as string[],\n selected: true,\n };\n return setValue(variableInState, option);\n }\n\n let option: VariableOption | undefined | null = null;\n\n // 1. find the current value\n const text = getCurrentText(variableInState);\n const value = getCurrentValue(variableInState);\n\n option = variableInState.options?.find((v: VariableOption) => v.text === text || v.value === value);\n if (option) {\n return setValue(variableInState, option);\n }\n\n // 2. find the default value\n if (defaultValue) {\n option = variableInState.options?.find((v) => v.text === defaultValue || v.value === defaultValue);\n if (option) {\n return setValue(variableInState, option);\n }\n }\n\n // 3. use the first value\n if (variableInState.options) {\n const option = variableInState.options[0];\n if (option) {\n return setValue(variableInState, option);\n }\n }\n\n // 4... give up\n return Promise.resolve();\n };\n};\n\nexport const setOptionAsCurrent = (\n identifier: KeyedVariableIdentifier,\n current: VariableOption,\n emitChanges: boolean\n): ThunkResult<Promise<void>> => {\n return async (dispatch) => {\n const { rootStateKey: key } = identifier;\n dispatch(toKeyedAction(key, setCurrentVariableValue(toVariablePayload(identifier, { option: current }))));\n return await dispatch(variableUpdated(identifier, emitChanges));\n };\n};\n\nexport const createGraph = (variables: TypedVariableModel[]) => {\n const g = new Graph();\n\n variables.forEach((v) => {\n g.createNode(v.name);\n });\n\n variables.forEach((v1) => {\n variables.forEach((v2) => {\n if (v1 === v2) {\n return;\n }\n\n if (variableAdapters.get(v1.type).dependsOn(v1, v2)) {\n try {\n // link might fail if it would create a circular dependency\n g.link(v1.name, v2.name);\n } catch (error) {\n // Catch the exception and return partially linked graph. The caller will handle the case of partial linking and display errors\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n logWarning('Error linking variables', { error: errorMessage });\n }\n }\n });\n });\n\n return g;\n};\n\nexport const variableUpdated = (\n identifier: KeyedVariableIdentifier,\n emitChangeEvents: boolean,\n events: typeof appEvents = appEvents\n): ThunkResult<Promise<void>> => {\n return async (dispatch, getState) => {\n const state = getState();\n const { rootStateKey } = identifier;\n const variableInState = getVariable(identifier, state);\n\n // if we're initializing variables ignore cascading update because we are in a boot up scenario\n if (getVariablesState(rootStateKey, state).transaction.status === TransactionStatus.Fetching) {\n if (getVariableRefresh(variableInState) === VariableRefresh.never) {\n // for variable types with updates that go the setValueFromUrl path in the update let's make sure their state is set to Done.\n await dispatch(upgradeLegacyQueries(toKeyedVariableIdentifier(variableInState)));\n dispatch(completeVariableLoading(identifier));\n }\n return Promise.resolve();\n }\n\n const variables = getVariablesByKey(rootStateKey, state);\n const g = createGraph(variables);\n const panels = state.dashboard?.getModel()?.panels ?? [];\n const panelVars = getPanelVars(panels);\n\n const event: VariablesChangedEvent =\n variableInState.type === 'adhoc'\n ? { refreshAll: true, panelIds: [] } // for adhoc variables we don't know which panels that will be impacted\n : {\n refreshAll: false,\n panelIds: Array.from(getAllAffectedPanelIdsForVariableChange([variableInState.id], g, panelVars)),\n variable: getVariable(identifier, state),\n };\n\n const node = g.getNode(variableInState.name);\n let promises: Array<Promise<void>> = [];\n if (node) {\n promises = node.getOptimizedInputEdges().map((e) => {\n const variable = variables.find((v) => v.name === e.inputNode?.name);\n if (!variable) {\n return Promise.resolve();\n }\n\n return dispatch(updateOptions(toKeyedVariableIdentifier(variable)));\n });\n }\n\n return Promise.all(promises).then(() => {\n if (emitChangeEvents) {\n events.publish(new VariablesChanged(event));\n locationService.partial(getQueryWithVariables(rootStateKey, getState));\n }\n });\n };\n};\n\nexport interface OnTimeRangeUpdatedDependencies {\n templateSrv: TemplateSrv;\n events: typeof appEvents;\n}\n\nconst dfs = (\n node: Node,\n visited: string[],\n variables: TypedVariableModel[],\n variablesRefreshTimeRange: TypedVariableModel[]\n) => {\n if (!visited.includes(node.name)) {\n visited.push(node.name);\n }\n node.outputEdges.forEach((e) => {\n const child = e.outputNode;\n if (child && !visited.includes(child.name)) {\n const childVariable = variables.find((v) => v.name === child.name) as QueryVariableModel;\n // when a variable is refreshed on time range change, we need to add that variable to be refreshed and mark its children as visited\n if (\n childVariable &&\n childVariable.refresh === VariableRefresh.onTimeRangeChanged &&\n variablesRefreshTimeRange.indexOf(childVariable) === -1\n ) {\n variablesRefreshTimeRange.push(childVariable);\n visited.push(child.name);\n } else {\n dfs(child, visited, variables, variablesRefreshTimeRange);\n }\n }\n });\n return variablesRefreshTimeRange;\n};\n\n// verify if the output edges of a node are not time range dependent\nconst areOuputEdgesNotTimeRange = (node: Node, variables: TypedVariableModel[]) => {\n return node.outputEdges.every((e) => {\n const childNode = e.outputNode;\n if (childNode) {\n const childVariable = findVariableNodeInList(variables, childNode.name);\n if (childVariable && childVariable.type === 'query') {\n return childVariable.refresh !== VariableRefresh.onTimeRangeChanged;\n }\n }\n return true;\n });\n};\n\n/**\n * This function returns a list of variables that need to be refreshed when the time range changes\n * It follows this logic\n * Create a graph based on all template variables.\n * Loop through all the variables and perform the following checks for each variable:\n *\n * -- a) If a variable A is a query variable, it’s time range, and has no dependent nodes\n * ----- it should be added to the variablesRefreshTimeRange.\n *\n * -- b) If a variable A is a query variable, it’s time range, and has dependent nodes (B, C)\n * ----- 1. add the variable A to variablesRefreshTimeRange\n * ----- 2. skip all the dependent nodes (B, C).\n * Here, we should traverse the tree using DFS (Depth First Search), as the dependent nodes will be updated in cascade when the parent variable is updated.\n */\n\nexport const getVariablesThatNeedRefreshNew = (key: string, state: StoreState): TypedVariableModel[] => {\n const allVariables = getVariablesByKey(key, state);\n\n //create dependency graph\n const g = createGraph(allVariables);\n // create a list of nodes that were visited\n const visitedDfs: string[] = [];\n const variablesRefreshTimeRange: TypedVariableModel[] = [];\n allVariables.forEach((v) => {\n const node = g.getNode(v.name);\n if (visitedDfs.includes(v.name)) {\n return;\n }\n if (node) {\n const parentVariableNode = findVariableNodeInList(allVariables, node.name);\n if (!parentVariableNode) {\n return;\n }\n const isVariableTimeRange = isVariableOnTimeRangeConfigured(parentVariableNode);\n // if variable is time range and has no output edges add it to the list of variables that need refresh\n if (isVariableTimeRange && node.outputEdges.length === 0) {\n variablesRefreshTimeRange.push(parentVariableNode);\n }\n\n // if variable is time range and other variables depend on it (output edges) add it to the list of variables that need refresh and dont visit its dependents\n if (\n isVariableTimeRange &&\n variablesRefreshTimeRange.includes(parentVariableNode) &&\n node.outputEdges.length > 0\n ) {\n variablesRefreshTimeRange.push(parentVariableNode);\n dfs(node, visitedDfs, allVariables, variablesRefreshTimeRange);\n }\n\n // If is variable time range, has outputEdges, but the output edges are not time range configured, it means this\n // is the top variable that need to be refreshed\n if (isVariableTimeRange && node.outputEdges.length > 0 && areOuputEdgesNotTimeRange(node, allVariables)) {\n if (!variablesRefreshTimeRange.includes(parentVariableNode)) {\n variablesRefreshTimeRange.push(parentVariableNode);\n }\n }\n\n // if variable is not time range but has dependents (output edges) visit its dependants and repeat the process\n if (!isVariableTimeRange && node.outputEdges.length > 0) {\n dfs(node, visitedDfs, allVariables, variablesRefreshTimeRange);\n }\n }\n });\n\n return variablesRefreshTimeRange;\n};\n\n// old approach of refreshing variables that need refresh\nconst getVariablesThatNeedRefreshOld = (key: string, state: StoreState): VariableWithOptions[] => {\n const allVariables = getVariablesByKey(key, state);\n\n const variablesThatNeedRefresh = allVariables.filter((variable) => {\n if ('refresh' in variable && 'options' in variable) {\n const variableWithRefresh = variable;\n return variableWithRefresh.refresh === VariableRefresh.onTimeRangeChanged;\n }\n return false;\n }) as VariableWithOptions[];\n\n return variablesThatNeedRefresh;\n};\n\nexport const onTimeRangeUpdated =\n (\n key: string,\n timeRange: TimeRange,\n dependencies: OnTimeRangeUpdatedDependencies = { templateSrv: getTemplateSrv(), events: appEvents }\n ): ThunkResult<Promise<void>> =>\n async (dispatch, getState) => {\n dependencies.templateSrv.updateTimeRange(timeRange);\n\n // approach # 2, get variables that need refresh but use the dependency graph to only update the ones that are affected\n // TODO: remove the VariableWithOptions type once the feature flag is on GA\n let variablesThatNeedRefresh: VariableWithOptions[] | TypedVariableModel[] = [];\n if (config.featureToggles.refactorVariablesTimeRange) {\n variablesThatNeedRefresh = getVariablesThatNeedRefreshNew(key, getState());\n } else {\n variablesThatNeedRefresh = getVariablesThatNeedRefreshOld(key, getState());\n }\n\n const variableIds = variablesThatNeedRefresh.map((variable) => variable.id);\n const promises = variablesThatNeedRefresh.map((variable) =>\n dispatch(timeRangeUpdated(toKeyedVariableIdentifier(variable)))\n );\n\n try {\n await Promise.all(promises);\n dependencies.events.publish(new VariablesTimeRangeProcessDone({ variableIds }));\n } catch (error) {\n console.error(error);\n dispatch(notifyApp(createVariableErrorNotification('Template variable service failed', error)));\n }\n };\n\nexport const timeRangeUpdated =\n (identifier: KeyedVariableIdentifier): ThunkResult<Promise<void>> =>\n async (dispatch, getState) => {\n const variableInState = getVariable(identifier, getState());\n if (!hasOptions(variableInState)) {\n return;\n }\n\n const previousOptions = variableInState.options.slice();\n\n await dispatch(updateOptions(toKeyedVariableIdentifier(variableInState), true));\n\n const updatedVariable = getVariable(identifier, getState());\n if (!hasOptions(updatedVariable)) {\n return;\n }\n\n const updatedOptions = updatedVariable.options;\n\n if (JSON.stringify(previousOptions) !== JSON.stringify(updatedOptions)) {\n const dashboard = getState().dashboard.getModel();\n dashboard?.templateVariableValueUpdated();\n }\n };\n\nexport const templateVarsChangedInUrl =\n (key: string, vars: ExtendedUrlQueryMap, events: typeof appEvents = appEvents): ThunkResult<void> =>\n async (dispatch, getState) => {\n const update: Array<Promise<void>> = [];\n const dashboard = getState().dashboard.getModel();\n const variables = getVariablesByKey(key, getState());\n\n for (const variable of variables) {\n const key = VARIABLE_PREFIX + variable.name;\n if (!vars.hasOwnProperty(key)) {\n // key not found quick exit\n continue;\n }\n\n if (!isVariableUrlValueDifferentFromCurrent(variable, vars[key].value)) {\n // variable values doesn't differ quick exit\n continue;\n }\n\n let value = vars[key].value; // as the default the value is set to the value passed into templateVarsChangedInUrl\n if (vars[key].removed) {\n // for some reason (panel|data link without variable) the variable url value (var-xyz) has been removed from the url\n // so we need to revert the value to the value stored in dashboard json\n const variableInModel = dashboard?.templating.list.find((v) => v.name === variable.name);\n if (variableInModel && hasCurrent(variableInModel)) {\n value = variableInModel.current.value; // revert value to the value stored in dashboard json\n }\n\n if (variableInModel && variableInModel.type === 'constant') {\n value = variableInModel.query; // revert value to the value stored in dashboard json, constants don't store current values in dashboard json\n }\n }\n\n const promise = variableAdapters.get(variable.type).setValueFromUrl(variable, value);\n update.push(promise);\n }\n\n const filteredVars = variables.filter((v) => {\n const key = VARIABLE_PREFIX + v.name;\n return (\n vars.hasOwnProperty(key) && isVariableUrlValueDifferentFromCurrent(v, vars[key].value) && v.type !== 'adhoc'\n );\n });\n const varGraph = createGraph(variables);\n const panelVars = getPanelVars(dashboard?.panels ?? []);\n const affectedPanels = getAllAffectedPanelIdsForVariableChange(\n filteredVars.map((v) => v.id),\n varGraph,\n panelVars\n );\n\n if (update.length) {\n await Promise.all(update);\n\n events.publish(\n new VariablesChangedInUrl({\n refreshAll: affectedPanels.size === 0,\n panelIds: Array.from(affectedPanels),\n })\n );\n }\n };\n\nexport function isVariableUrlValueDifferentFromCurrent(variable: TypedVariableModel, urlValue: unknown): boolean {\n const variableValue = variableAdapters.get(variable.type).getValueForUrl(variable);\n let stringUrlValue = ensureStringValues(urlValue);\n if (Array.isArray(variableValue) && !Array.isArray(stringUrlValue)) {\n stringUrlValue = [stringUrlValue];\n }\n // lodash isEqual handles array of value equality checks as well\n return !isEqual(variableValue, stringUrlValue);\n}\n\nconst getQueryWithVariables = (key: string, getState: () => StoreState): UrlQueryMap => {\n const queryParams = locationService.getSearchObject();\n\n const queryParamsNew = Object.keys(queryParams)\n .filter((key) => key.indexOf(VARIABLE_PREFIX) === -1)\n .reduce<UrlQueryMap>((obj, key) => {\n obj[key] = queryParams[key];\n return obj;\n }, {});\n\n for (const variable of getVariablesByKey(key, getState())) {\n if (variable.skipUrlSync) {\n continue;\n }\n\n const adapter = variableAdapters.get(variable.type);\n queryParamsNew[VARIABLE_PREFIX + variable.name] = adapter.getValueForUrl(variable);\n }\n\n return queryParamsNew;\n};\n\nexport const initVariablesTransaction =\n (urlUid: string, dashboard: DashboardModel): ThunkResult<Promise<void>> =>\n async (dispatch, getState) => {\n try {\n const uid = toStateKey(urlUid);\n const state = getState();\n const lastKey = getIfExistsLastKey(state);\n if (lastKey) {\n const transactionState = getVariablesState(lastKey, state).transaction;\n if (transactionState.status === TransactionStatus.Fetching) {\n // previous dashboard is still fetching variables, cancel all requests\n dispatch(cancelVariables(lastKey));\n }\n }\n\n // Start init transaction\n dispatch(toKeyedAction(uid, variablesInitTransaction({ uid })));\n // Add system variables like __dashboard and __user\n dispatch(addSystemTemplateVariables(uid, dashboard));\n // Load all variables into redux store\n dispatch(initDashboardTemplating(uid, dashboard));\n // Migrate data source name to ref\n dispatch(migrateVariablesDatasourceNameToRef(uid));\n // Process all variable updates\n await dispatch(processVariables(uid));\n // Set transaction as complete\n dispatch(toKeyedAction(uid, variablesCompleteTransaction({ uid })));\n } catch (err) {\n dispatch(notifyApp(createVariableErrorNotification('Templating init failed', err)));\n console.error(err);\n }\n };\n\nexport function migrateVariablesDatasourceNameToRef(\n key: string,\n getDatasourceSrvFunc = getDatasourceSrv\n): ThunkResult<void> {\n return (dispatch, getState) => {\n const variables = getVariablesByKey(key, getState());\n for (const variable of variables) {\n if (variable.type !== 'adhoc' && variable.type !== 'query') {\n continue;\n }\n\n const { datasource: nameOrRef } = variable;\n\n if (isDataSourceRef(nameOrRef)) {\n continue;\n }\n\n // the call to getInstanceSettings needs to be done after initDashboardTemplating because we might have\n // datasource variables that need to be resolved\n const ds = getDatasourceSrvFunc().getInstanceSettings(nameOrRef);\n const dsRef = ds ? getDataSourceRef(ds) : { uid: nameOrRef };\n dispatch(\n toKeyedAction(\n key,\n changeVariableProp(toVariablePayload(variable, { propName: 'datasource', propValue: dsRef }))\n )\n );\n }\n };\n}\n\nexport const cleanUpVariables =\n (key: string): ThunkResult<void> =>\n (dispatch) => {\n dispatch(toKeyedAction(key, cleanVariables()));\n dispatch(toKeyedAction(key, cleanEditorState()));\n dispatch(toKeyedAction(key, cleanPickerState()));\n dispatch(toKeyedAction(key, variablesClearTransaction()));\n };\n\ntype CancelVariablesDependencies = { getBackendSrv: typeof getBackendSrv };\nexport const cancelVariables =\n (key: string, dependencies: CancelVariablesDependencies = { getBackendSrv: getBackendSrv }): ThunkResult<void> =>\n (dispatch) => {\n dependencies.getBackendSrv().cancelAllInFlightRequests();\n dispatch(cleanUpVariables(key));\n };\n\nexport const updateOptions =\n (identifier: KeyedVariableIdentifier, rethrow = false): ThunkResult<Promise<void>> =>\n async (dispatch, getState) => {\n const { rootStateKey } = identifier;\n try {\n if (!hasOngoingTransaction(rootStateKey, getState())) {\n // we might have cancelled a batch so then variable state is removed\n return;\n }\n\n const variableInState = getVariable(identifier, getState());\n dispatch(toKeyedAction(rootStateKey, variableStateFetching(toVariablePayload(variableInState))));\n await dispatch(upgradeLegacyQueries(toKeyedVariableIdentifier(variableInState)));\n await variableAdapters.get(variableInState.type).updateOptions(variableInState);\n dispatch(completeVariableLoading(identifier));\n } catch (error) {\n dispatch(toKeyedAction(rootStateKey, variableStateFailed(toVariablePayload(identifier, { error }))));\n\n if (!rethrow) {\n console.error(error);\n dispatch(notifyApp(createVariableErrorNotification('Error updating options:', error, identifier)));\n }\n\n if (rethrow) {\n throw error;\n }\n }\n };\n\nexport const createVariableErrorNotification = (\n message: string,\n error: unknown,\n identifier?: KeyedVariableIdentifier\n): AppNotification =>\n createErrorNotification(\n `${identifier ? `Templating [${identifier.id}]` : 'Templating'}`,\n error instanceof Error ? `${message} ${error.message}` : `${message}`\n );\n\nexport const completeVariableLoading =\n (identifier: KeyedVariableIdentifier): ThunkResult<void> =>\n (dispatch, getState) => {\n const { rootStateKey } = identifier;\n if (!hasOngoingTransaction(rootStateKey, getState())) {\n // we might have cancelled a batch so then variable state is removed\n return;\n }\n\n const variableInState = getVariable(identifier, getState());\n\n if (variableInState.state !== LoadingState.Done) {\n dispatch(toKeyedAction(identifier.rootStateKey, variableStateCompleted(toVariablePayload(variableInState))));\n }\n };\n\nexport function upgradeLegacyQueries(\n identifier: KeyedVariableIdentifier,\n getDatasourceSrvFunc: typeof getDatasourceSrv = getDatasourceSrv\n): ThunkResult<void> {\n return async function (dispatch, getState) {\n const { id, rootStateKey } = identifier;\n if (!hasOngoingTransaction(rootStateKey, getState())) {\n // we might have cancelled a batch so then variable state is removed\n return;\n }\n\n const variable = getVariable(identifier, getState());\n if (variable.type !== 'query') {\n return;\n }\n\n try {\n const datasource = await getDatasourceSrvFunc().get(variable.datasource ?? '');\n\n if (hasLegacyVariableSupport(datasource)) {\n return;\n }\n\n if (!hasStandardVariableSupport(datasource)) {\n return;\n }\n\n if (isDataQueryType(variable.query)) {\n return;\n }\n\n const query = {\n refId: `${datasource.name}-${id}-Variable-Query`,\n query: variable.query,\n };\n\n dispatch(\n toKeyedAction(\n rootStateKey,\n changeVariableProp(toVariablePayload(identifier, { propName: 'query', propValue: query }))\n )\n );\n } catch (err) {\n dispatch(notifyApp(createVariableErrorNotification('Failed to upgrade legacy queries', err)));\n console.error(err);\n }\n };\n}\n\nfunction isDataQueryType(query: unknown): query is DataQuery {\n return isObject(query) && 'refId' in query && typeof query.refId === 'string';\n}\n","import { textUtil } from '@grafana/data';\nimport { config, locationService } from '@grafana/runtime';\n\nimport { logWarning } from '../Analytics';\n\nimport { useURLSearchParams } from './useURLSearchParams';\n\n/**\n * This hook provides a safe way to obtain the `returnTo` URL from the query string parameter\n * It validates the origin and protocol to ensure the URL is withing the Grafana app\n */\nexport function useReturnTo(): { returnTo: string | undefined };\nexport function useReturnTo(fallback: string): { returnTo: string };\nexport function useReturnTo(fallback?: string): { returnTo: string | undefined } {\n const emptyResult = { returnTo: fallback };\n\n const [searchParams] = useURLSearchParams();\n const returnTo = searchParams.get('returnTo');\n\n if (!returnTo) {\n return emptyResult;\n }\n\n const sanitizedReturnTo = textUtil.sanitizeUrl(returnTo);\n const baseUrl = `${window.location.origin}/${config.appSubUrl}`;\n\n const sanitizedUrl = tryParseURL(sanitizedReturnTo, baseUrl);\n\n if (!sanitizedUrl) {\n logWarning('Malformed returnTo parameter', { returnTo });\n return emptyResult;\n }\n\n const { protocol, origin, pathname, search } = sanitizedUrl;\n if (['http:', 'https:'].includes(protocol) === false || origin !== window.location.origin) {\n logWarning('Malformed returnTo parameter', { returnTo });\n return emptyResult;\n }\n\n return { returnTo: `${pathname}${search}` };\n}\n\n/* Create a \"returnTo\" URL */\nexport function createReturnTo(includeSearch = true): string {\n const { pathname, search } = locationService.getLocation();\n return pathname + (includeSearch ? search : '');\n}\n\n// Tries to mimic URL.parse method https://developer.mozilla.org/en-US/docs/Web/API/URL/parse_static\nfunction tryParseURL(sanitizedReturnTo: string, baseUrl: string) {\n try {\n const url = new URL(sanitizedReturnTo, baseUrl);\n return url;\n } catch (error) {\n return null;\n }\n}\n","export const DRAGGED_ITEM_TOP = '--responsive-grid-dragged-item-top';\nexport const DRAGGED_ITEM_LEFT = '--responsive-grid-dragged-item-left';\nexport const DRAGGED_ITEM_WIDTH = '--responsive-grid-dragged-item-width';\nexport const DRAGGED_ITEM_HEIGHT = '--responsive-grid-dragged-item-height';\n","import { css } from '@emotion/css';\nimport { ButtonHTMLAttributes } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Button, useStyles2 } from '@grafana/ui';\n\nexport interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const ListNewButton = ({ children, ...restProps }: Props) => {\n const styles = useStyles2(getStyles);\n return (\n <div className={styles.buttonWrapper}>\n <Button icon=\"plus\" {...restProps}>\n {children}\n </Button>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n buttonWrapper: css({\n padding: `${theme.spacing(3)} 0`,\n }),\n});\n","import { contextSrv } from 'app/core/services/context_srv';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nexport function getAddToDashboardTitle(): string {\n const canCreateDashboard = contextSrv.hasPermission(AccessControlAction.DashboardsCreate);\n const canWriteDashboard = contextSrv.hasPermission(AccessControlAction.DashboardsWrite);\n\n if (canCreateDashboard && !canWriteDashboard) {\n return 'Add panel to new dashboard';\n }\n\n if (canWriteDashboard && !canCreateDashboard) {\n return 'Add panel to existing dashboard';\n }\n\n return 'Add panel to dashboard';\n}\n","/**\n * See also:\n * https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/frame_type.go\n *\n * @public\n */\nexport enum DataFrameType {\n TimeSeriesWide = 'timeseries-wide',\n TimeSeriesLong = 'timeseries-long',\n\n /** @deprecated in favor of TimeSeriesMulti */\n TimeSeriesMany = 'timeseries-many',\n\n TimeSeriesMulti = 'timeseries-multi',\n\n /** Numeric types: https://grafana.com/developers/dataplane/numeric */\n NumericWide = 'numeric-wide',\n NumericMulti = 'numeric-multi',\n NumericLong = 'numeric-long',\n\n /** Logs types: https://grafana.com/developers/dataplane/logs */\n LogLines = 'log-lines',\n\n /** Directory listing */\n DirectoryListing = 'directory-listing',\n\n /**\n * First field is X, the rest are ordinal values used as rows in the heatmap\n */\n HeatmapRows = 'heatmap-rows',\n\n /**\n * Explicit fields for:\n * xMin, yMin, count, ...\n *\n * All values in the grid exist and have regular spacing\n *\n * If the y value is actually ordinal, use `meta.custom` to specify the bucket lookup values\n */\n HeatmapCells = 'heatmap-cells',\n\n /**\n * Explicit fields for:\n * xMin, xMax, count\n */\n Histogram = 'histogram',\n}\n","import * as React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { DashboardLink } from '@grafana/schema';\nimport { CollapsableSection, TagsInput, Select, Field, Input, Checkbox, Button } from '@grafana/ui';\n\nimport { LINK_ICON_MAP, NEW_LINK } from './utils';\n\nconst linkIconOptions = Object.keys(LINK_ICON_MAP).map((key) => ({ label: key, value: key }));\n\ninterface DashboardLinkFormProps {\n link: DashboardLink;\n onUpdate: (link: DashboardLink) => void;\n onGoBack: () => void;\n}\n\nexport function DashboardLinkForm({ link, onUpdate, onGoBack }: DashboardLinkFormProps) {\n const linkTypeOptions = [\n {\n value: 'dashboards',\n label: t('dashboard-scene.dashboard-link-form.link-type-options.label.dashboards', 'Dashboards'),\n },\n { value: 'link', label: t('dashboard-scene.dashboard-link-form.link-type-options.label.link', 'Link') },\n ];\n const onTagsChange = (tags: string[]) => {\n onUpdate({ ...link, tags: tags });\n };\n\n const onTypeChange = (selectedItem: SelectableValue) => {\n const update = { ...link, type: selectedItem.value };\n\n // clear props that are no longe revant for this type\n if (update.type === 'dashboards') {\n update.url = '';\n update.tooltip = '';\n } else {\n update.tags = [];\n }\n\n onUpdate(update);\n };\n\n const onIconChange = (selectedItem: SelectableValue) => {\n onUpdate({ ...link, icon: selectedItem.value });\n };\n\n const onChange = (ev: React.FocusEvent<HTMLInputElement>) => {\n const target = ev.currentTarget;\n onUpdate({\n ...link,\n [target.name]: target.type === 'checkbox' ? target.checked : target.value,\n });\n };\n\n const isNew = link.title === NEW_LINK.title;\n\n return (\n <div style={{ maxWidth: '600px' }}>\n <Field label={t('dashboard-scene.dashboard-link-form.label-title', 'Title')}>\n <Input name=\"title\" id=\"title\" value={link.title} onChange={onChange} autoFocus={isNew} />\n </Field>\n <Field label={t('dashboard-scene.dashboard-link-form.label-type', 'Type')}>\n <Select inputId=\"link-type-input\" value={link.type} options={linkTypeOptions} onChange={onTypeChange} />\n </Field>\n {link.type === 'dashboards' && (\n <>\n <Field label={t('dashboard-scene.dashboard-link-form.label-with-tags', 'With tags')}>\n <TagsInput tags={link.tags} onChange={onTagsChange} />\n </Field>\n </>\n )}\n {link.type === 'link' && (\n <>\n <Field label={t('dashboard-scene.dashboard-link-form.label-url', 'URL')}>\n <Input name=\"url\" value={link.url} onChange={onChange} />\n </Field>\n <Field label={t('dashboard-scene.dashboard-link-form.label-tooltip', 'Tooltip')}>\n <Input\n name=\"tooltip\"\n value={link.tooltip}\n onChange={onChange}\n placeholder={t('dashboard-scene.dashboard-link-form.placeholder-open-dashboard', 'Open dashboard')}\n />\n </Field>\n <Field label={t('dashboard-scene.dashboard-link-form.label-icon', 'Icon')}>\n <Select value={link.icon} options={linkIconOptions} onChange={onIconChange} />\n </Field>\n </>\n )}\n <CollapsableSection label={t('dashboard-scene.dashboard-link-form.label-options', 'Options')} isOpen={true}>\n {link.type === 'dashboards' && (\n <Field>\n <Checkbox\n label={t('dashboard-scene.dashboard-link-form.label-show-as-dropdown', 'Show as dropdown')}\n name=\"asDropdown\"\n value={link.asDropdown}\n onChange={onChange}\n />\n </Field>\n )}\n <Field>\n <Checkbox\n label={t(\n 'dashboard-scene.dashboard-link-form.label-include-current-time-range',\n 'Include current time range'\n )}\n name=\"keepTime\"\n value={link.keepTime}\n onChange={onChange}\n />\n </Field>\n <Field>\n <Checkbox\n label={t(\n 'dashboard-scene.dashboard-link-form.label-include-current-template-variable-values',\n 'Include current template variable values'\n )}\n name=\"includeVars\"\n value={link.includeVars}\n onChange={onChange}\n />\n </Field>\n <Field>\n <Checkbox\n label={t('dashboard-scene.dashboard-link-form.label-open-link-in-new-tab', 'Open link in new tab')}\n name=\"targetBlank\"\n value={link.targetBlank}\n onChange={onChange}\n />\n </Field>\n </CollapsableSection>\n <Button variant=\"secondary\" onClick={onGoBack}>\n <Trans i18nKey=\"dashboard-scene.dashboard-link-form.back-to-list\">Back to list</Trans>\n </Button>\n </div>\n );\n}\n","import {\n VariableHide as VariableHideV1,\n VariableRefresh as VariableRefreshV1,\n VariableSort as VariableSortV1,\n DashboardCursorSync as DashboardCursorSyncV1,\n FieldColorModeId as FieldColorModeIdV1,\n DataTopic,\n} from '@grafana/schema';\nimport { DataTransformerConfig } from '@grafana/schema/dist/esm/raw/dashboard/x/dashboard_types.gen';\nimport {\n DashboardCursorSync,\n defaultSpec as defaultDashboardV2Spec,\n defaultVariableHide,\n defaultVariableRefresh,\n defaultVariableSort,\n VariableHide,\n VariableRefresh,\n VariableSort,\n FieldColorModeId as FieldColorModeIdV2,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\n// used for QueryVariableKind's query prop - in schema V2 we've deprecated string type and support only DataQuery\nexport const LEGACY_STRING_VALUE_KEY = '__legacyStringValue';\n\nexport function transformCursorSynctoEnum(cursorSync?: DashboardCursorSyncV1): DashboardCursorSync {\n switch (cursorSync) {\n case 0:\n return 'Off';\n case 1:\n return 'Crosshair';\n case 2:\n return 'Tooltip';\n default:\n return defaultDashboardV2Spec().cursorSync;\n }\n}\n\nexport function transformVariableRefreshToEnum(refresh?: VariableRefreshV1): VariableRefresh {\n switch (refresh) {\n case 0:\n return 'never';\n case 1:\n return 'onDashboardLoad';\n case 2:\n return 'onTimeRangeChanged';\n default:\n return defaultVariableRefresh();\n }\n}\nexport function transformVariableHideToEnum(hide?: VariableHideV1): VariableHide {\n switch (hide) {\n case 0:\n return 'dontHide';\n case 1:\n return 'hideLabel';\n case 2:\n return 'hideVariable';\n case 3:\n return 'inControlsMenu';\n default:\n return defaultVariableHide();\n }\n}\nexport function transformSortVariableToEnum(sort?: VariableSortV1): VariableSort {\n switch (sort) {\n case 0:\n return 'disabled';\n case 1:\n return 'alphabeticalAsc';\n case 2:\n return 'alphabeticalDesc';\n case 3:\n return 'numericalAsc';\n case 4:\n return 'numericalDesc';\n default:\n return defaultVariableSort();\n }\n}\n\nexport function transformDataTopic(topic: DataTransformerConfig['topic']): DataTopic | undefined {\n switch (topic) {\n case 'annotations':\n return DataTopic.Annotations;\n case 'alertStates':\n return DataTopic.AlertStates;\n case 'series':\n return DataTopic.Series;\n default:\n return undefined;\n }\n}\n\nexport function colorIdEnumToColorIdV2(colorId: FieldColorModeIdV1 | string): FieldColorModeIdV2 | undefined {\n switch (colorId) {\n case FieldColorModeIdV1.Thresholds:\n return 'thresholds';\n case FieldColorModeIdV1.PaletteClassic:\n return 'palette-classic';\n case FieldColorModeIdV1.PaletteClassicByName:\n return 'palette-classic-by-name';\n case FieldColorModeIdV1.ContinuousGrYlRd:\n return 'continuous-GrYlRd';\n case FieldColorModeIdV1.ContinuousRdYlGr:\n return 'continuous-RdYlGr';\n case FieldColorModeIdV1.ContinuousBlYlRd:\n return 'continuous-BlYlRd';\n case FieldColorModeIdV1.ContinuousYlRd:\n return 'continuous-YlRd';\n case FieldColorModeIdV1.ContinuousBlPu:\n return 'continuous-BlPu';\n case FieldColorModeIdV1.ContinuousYlBl:\n return 'continuous-YlBl';\n case FieldColorModeIdV1.ContinuousBlues:\n return 'continuous-blues';\n case FieldColorModeIdV1.ContinuousReds:\n return 'continuous-reds';\n case FieldColorModeIdV1.ContinuousGreens:\n return 'continuous-greens';\n case FieldColorModeIdV1.ContinuousPurples:\n return 'continuous-purples';\n case FieldColorModeIdV1.Fixed:\n return 'fixed';\n case FieldColorModeIdV1.Shades:\n return 'shades';\n default:\n return undefined;\n }\n}\n","import { Observable, map, of } from 'rxjs';\n\nimport {\n MultiValueVariable,\n MultiValueVariableState,\n SceneComponentProps,\n ValidateAndUpdateResult,\n VariableDependencyConfig,\n VariableValueOption,\n MultiOrSingleValueSelect,\n sceneGraph,\n VariableGetOptionsArgs,\n} from '@grafana/scenes';\n\nexport interface SnapshotVariableState extends MultiValueVariableState {\n query?: string;\n}\n\nexport class SnapshotVariable extends MultiValueVariable<SnapshotVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: [],\n });\n\n public constructor(initialState: Partial<SnapshotVariableState>) {\n super({\n name: '',\n type: 'snapshot',\n isReadOnly: true,\n query: '',\n value: '',\n text: '',\n options: [],\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n const interpolated = sceneGraph.interpolate(this, this.state.query);\n const match = interpolated.match(/(?:\\\\,|[^,])+/g) ?? [];\n\n const options = match.map((text) => {\n text = text.replace(/\\\\,/g, ',');\n const textMatch = /^(.+)\\s:\\s(.+)$/g.exec(text) ?? [];\n if (textMatch.length === 3) {\n const [, key, value] = textMatch;\n return { label: key.trim(), value: value.trim() };\n } else {\n return { label: text.trim(), value: text.trim() };\n }\n });\n\n return of(options);\n }\n\n public validateAndUpdate(): Observable<ValidateAndUpdateResult> {\n return this.getValueOptions({}).pipe(\n map((options) => {\n if (this.state.options !== options) {\n this._updateValueGivenNewOptions(options);\n }\n return {};\n })\n );\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable<SnapshotVariableState>>) => {\n return <MultiOrSingleValueSelect model={model} />;\n };\n // we will always preserve the current value and text for snapshots\n private _updateValueGivenNewOptions(options: VariableValueOption[]) {\n const { value: currentValue, text: currentText } = this.state;\n const stateUpdate: Partial<MultiValueVariableState> = {\n options,\n loading: false,\n value: currentValue ?? [],\n text: currentText ?? [],\n };\n\n this.setState(stateUpdate);\n }\n}\n","import { isEmpty } from 'lodash';\n\nimport { Labels } from '../../../../types/unified-alerting-dto';\nimport { Label } from '../components/rules/state-history/common';\n\nexport function labelsToTags(labels: Labels) {\n return Object.entries(labels)\n .map(([label, value]) => `${label}=${value}`)\n .sort();\n}\n\nexport function objectLabelsToArray(labels: Labels): Label[] {\n return Object.entries(labels);\n}\n\nexport function arrayLabelsToObject(labels: Label[]): Labels {\n const labelsObject: Labels = {};\n labels.forEach((label: Label) => {\n labelsObject[label[0]] = label[1];\n });\n return labelsObject;\n}\n\nexport function arrayKeyValuesToObject(\n labels: Array<{\n key: string;\n value: string;\n }>\n): Labels {\n const labelsObject: Labels = {};\n labels.forEach((label) => {\n label.key && (labelsObject[label.key] = label.value);\n });\n\n return labelsObject;\n}\n\nexport const GRAFANA_ORIGIN_LABEL = '__grafana_origin';\n\nexport function labelsSize(labels?: Labels) {\n if (isEmpty(labels)) {\n return 0;\n }\n\n return Object.keys(labels).filter((key) => !isPrivateLabelKey(key)).length;\n}\n\nexport function isPrivateLabelKey(labelKey: string) {\n return (labelKey.startsWith('__') && labelKey.endsWith('__')) || labelKey === GRAFANA_ORIGIN_LABEL;\n}\n\nexport const isPrivateLabel = ([key, _]: [string, string]) => isPrivateLabelKey(key);\n","import { PanelPlugin } from '@grafana/data';\n\nimport { config } from '../config';\n\n/**\n * Option to specify a plugin css that should be applied for the dark\n * and the light theme.\n *\n * @public\n */\nexport interface PluginCssOptions {\n light: string;\n dark: string;\n}\n\n/**\n * Use this to load css for a Grafana plugin by specifying a {@link PluginCssOptions}\n * containing styling for the dark and the light theme.\n *\n * @param options - plugin styling for light and dark theme.\n * @public\n */\nexport async function loadPluginCss(options: PluginCssOptions): Promise<System.Module | void> {\n try {\n const cssPath = config.bootData.user.theme === 'light' ? options.light : options.dark;\n return window.System.import(cssPath);\n } catch (err) {\n console.error(err);\n }\n}\n\ninterface PluginImportUtils {\n importPanelPlugin: (id: string) => Promise<PanelPlugin>;\n getPanelPluginFromCache: (id: string) => PanelPlugin | undefined;\n}\n\nlet pluginImportUtils: PluginImportUtils | undefined;\n\nexport function setPluginImportUtils(utils: PluginImportUtils) {\n if (pluginImportUtils) {\n throw new Error('pluginImportUtils should only be set once, when Grafana is starting.');\n }\n\n pluginImportUtils = utils;\n}\n\nexport function getPluginImportUtils(): PluginImportUtils {\n if (!pluginImportUtils) {\n throw new Error('pluginImportUtils can only be used after Grafana instance has started.');\n }\n\n return pluginImportUtils;\n}\n","import { DataQuery } from '@grafana/schema';\n\n/**\n * Finds the next available refId for a query\n */\nexport const getNextRefId = (queries: DataQuery[]): string => {\n for (let num = 0; ; num++) {\n const refId = getRefId(num);\n if (!queries.some((query) => query.refId === refId)) {\n return refId;\n }\n }\n};\n\nfunction getRefId(num: number): string {\n const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n if (num < letters.length) {\n return letters[num];\n } else {\n return getRefId(Math.floor(num / letters.length) - 1) + letters[num % letters.length];\n }\n}\n","import { css, cx, keyframes } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip } from '../Tooltip/Tooltip';\n\n/**\n * @internal\n */\nexport type LoadingIndicatorProps = {\n loading: boolean;\n onCancel: () => void;\n};\n\n/**\n * @internal\n */\nexport const LoadingIndicator = ({ onCancel, loading }: LoadingIndicatorProps) => {\n const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const styles = useStyles2(getStyles);\n\n if (!loading) {\n return null;\n }\n\n return (\n <Tooltip content={t('grafana-ui.panel-chrome.tooltip-cancel-loading', 'Cancel query')}>\n <Icon\n className={cx(styles.spin, { [styles.clickable]: !!onCancel })}\n name={prefersReducedMotion ? 'hourglass' : 'sync'}\n size=\"sm\"\n onClick={onCancel}\n data-testid={selectors.components.LoadingIndicator.icon}\n />\n </Tooltip>\n );\n};\n\nconst spin = keyframes({\n '0%': {\n transform: 'rotate(0deg) scaleX(-1)', // scaleX flips the `sync` icon so arrows point the correct way\n },\n '100%': {\n transform: 'rotate(359deg) scaleX(-1)',\n },\n});\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n clickable: css({\n cursor: 'pointer',\n }),\n spin: css({\n [theme.transitions.handleMotion('no-preference')]: {\n animation: `${spin} 3s linear infinite`,\n },\n }),\n };\n};\n","import { DefaultTimeZone, addDurationToDate, dateTime, intervalToAbbreviatedDurationString } from '@grafana/data';\nimport { SilenceFormFields } from 'app/features/alerting/unified/types/silence-form';\nimport { matcherToMatcherField } from 'app/features/alerting/unified/utils/alertmanager';\nimport { MATCHER_ALERT_RULE_UID } from 'app/features/alerting/unified/utils/constants';\nimport { parseQueryParamMatchers } from 'app/features/alerting/unified/utils/matchers';\nimport { MatcherOperator, Silence } from 'app/plugins/datasource/alertmanager/types';\n\nimport { contextSrv } from '../../../../../core/services/context_srv';\n\n/**\n * Parse query params and return default silence form values\n */\nexport const defaultsFromQuery = (searchParams: URLSearchParams): Partial<SilenceFormFields> => {\n const defaults: Partial<SilenceFormFields> = {};\n\n const comment = searchParams.get('comment');\n const matchers = searchParams.getAll('matcher');\n\n const strippedMatchers = matchers.filter((m) => !m.startsWith(MATCHER_ALERT_RULE_UID));\n\n const formMatchers = parseQueryParamMatchers(strippedMatchers);\n if (formMatchers.length) {\n defaults.matchers = formMatchers.map(matcherToMatcherField);\n }\n\n if (comment) {\n defaults.comment = comment;\n }\n\n return defaults;\n};\n\n/**\n *\n */\nexport const getFormFieldsForSilence = (silence: Silence): SilenceFormFields => {\n const now = new Date();\n const isExpired = Date.parse(silence.endsAt) < Date.now();\n const interval = isExpired\n ? {\n start: now,\n end: addDurationToDate(now, { hours: 2 }),\n }\n : { start: new Date(silence.startsAt), end: new Date(silence.endsAt) };\n return {\n id: silence.id,\n startsAt: interval.start.toISOString(),\n endsAt: interval.end.toISOString(),\n comment: silence.comment,\n createdBy: silence.createdBy,\n duration: intervalToAbbreviatedDurationString(interval),\n isRegex: false,\n matchers: silence.matchers?.map(matcherToMatcherField) || [],\n matcherName: '',\n matcherValue: '',\n timeZone: DefaultTimeZone,\n };\n};\n\n/**\n * Generate default silence form values\n */\nexport const getDefaultSilenceFormValues = (partial?: Partial<SilenceFormFields>): SilenceFormFields => {\n const now = new Date();\n\n const endsAt = addDurationToDate(now, { hours: 2 }); // Default time period is now + 2h\n return {\n id: '',\n startsAt: now.toISOString(),\n endsAt: endsAt.toISOString(),\n comment: `created ${dateTime().format('YYYY-MM-DD HH:mm')}`,\n createdBy: contextSrv.user.name,\n duration: '2h',\n isRegex: false,\n matcherName: '',\n matcherValue: '',\n timeZone: DefaultTimeZone,\n matchers: [{ name: '', value: '', operator: MatcherOperator.equal }],\n ...partial,\n };\n};\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, FieldMatcher, TransformationApplicabilityLevels } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\n\nexport enum FormatStringOutput {\n UpperCase = 'Upper Case',\n LowerCase = 'Lower Case',\n SentenceCase = 'Sentence Case',\n TitleCase = 'Title Case',\n PascalCase = 'Pascal Case',\n CamelCase = 'Camel Case',\n SnakeCase = 'Snake Case',\n KebabCase = 'Kebab Case',\n Trim = 'Trim',\n Substring = 'Substring',\n}\n\nexport interface FormatStringTransformerOptions {\n stringField: string;\n substringStart: number;\n substringEnd: number;\n outputFormat: FormatStringOutput;\n}\n\nconst splitToCapitalWords = (input: string) => {\n const arr = input.split(' ');\n for (let i = 0; i < arr.length; i++) {\n arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1).toLowerCase();\n }\n return arr;\n};\n\nexport const getFormatStringFunction = (options: FormatStringTransformerOptions) => {\n return (field: Field) =>\n field.values.map((value: string) => {\n switch (options.outputFormat) {\n case FormatStringOutput.UpperCase:\n return value.toUpperCase();\n case FormatStringOutput.LowerCase:\n return value.toLowerCase();\n case FormatStringOutput.SentenceCase:\n return value.charAt(0).toUpperCase() + value.slice(1);\n case FormatStringOutput.TitleCase:\n return splitToCapitalWords(value).join(' ');\n case FormatStringOutput.PascalCase:\n return splitToCapitalWords(value).join('');\n case FormatStringOutput.CamelCase:\n value = splitToCapitalWords(value).join('');\n return value.charAt(0).toLowerCase() + value.slice(1);\n case FormatStringOutput.SnakeCase:\n return value.toLowerCase().split(' ').join('_');\n case FormatStringOutput.KebabCase:\n return value.toLowerCase().split(' ').join('-');\n case FormatStringOutput.Trim:\n return value.trim();\n case FormatStringOutput.Substring:\n return value.substring(options.substringStart, options.substringEnd);\n }\n });\n};\n\nexport const formatStringTransformer: DataTransformerInfo<FormatStringTransformerOptions> = {\n id: DataTransformerID.formatString,\n name: 'Format string',\n description: 'Manipulate string fields formatting',\n defaultOptions: { stringField: '', outputFormat: FormatStringOutput.UpperCase },\n isApplicable: (data: DataFrame[]) => {\n // Search for a string field\n // if there is one then we can use this transformation\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type === 'string') {\n return TransformationApplicabilityLevels.Applicable;\n }\n }\n }\n\n return TransformationApplicabilityLevels.NotApplicable;\n },\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n if (data.length === 0) {\n return data;\n }\n\n const fieldMatches = fieldMatchers.get(FieldMatcherID.byName).get(options.stringField);\n const formatStringFunction = getFormatStringFunction(options);\n\n const formatter = createStringFormatter(fieldMatches, formatStringFunction);\n\n return data.map((frame) => ({\n ...frame,\n fields: formatter(frame, data),\n }));\n })\n ),\n};\n\n/**\n * @internal\n */\nexport const createStringFormatter =\n (fieldMatches: FieldMatcher, formatStringFunction: (field: Field) => string[]) =>\n (frame: DataFrame, allFrames: DataFrame[]) => {\n return frame.fields.map((field) => {\n // Find the configured field\n if (fieldMatches(field, frame, allFrames)) {\n const newVals = formatStringFunction(field);\n\n return {\n ...field,\n type: FieldType.string,\n values: newVals,\n };\n }\n\n return field;\n });\n };\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface Props {\n label: React.ReactNode;\n className?: string;\n horizontal?: boolean;\n childrenWrapperClassName?: string;\n}\n\nexport const DetailsField = ({\n className,\n label,\n horizontal,\n children,\n childrenWrapperClassName,\n}: React.PropsWithChildren<Props>) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={cx(styles.field, horizontal ? styles.fieldHorizontal : styles.fieldVertical, className)}>\n <div>{label}</div>\n <div className={childrenWrapperClassName}>{children}</div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n fieldHorizontal: css({\n flexDirection: 'row',\n [theme.breakpoints.down('md')]: {\n flexDirection: 'column',\n },\n }),\n fieldVertical: css({\n flexDirection: 'column',\n }),\n field: css({\n display: 'flex',\n margin: `${theme.spacing(2)} 0`,\n\n '& > div:first-child': {\n width: '110px',\n paddingRight: theme.spacing(1),\n fontSize: theme.typography.size.sm,\n fontWeight: theme.typography.fontWeightBold,\n lineHeight: 1.8,\n },\n '& > div:nth-child(2)': {\n flex: 1,\n color: theme.colors.text.secondary,\n },\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\ninterface HorizontalGroupProps {\n children: React.ReactNode;\n wrap?: boolean;\n className?: string;\n}\n\nexport const HorizontalGroup = ({ children, wrap, className }: HorizontalGroupProps) => {\n const theme = useTheme2();\n const styles = getStyles(theme, wrap);\n\n return <div className={cx(styles.container, className)}>{children}</div>;\n};\n\nconst getStyles = (theme: GrafanaTheme2, wrap?: boolean) => ({\n container: css({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: wrap ? 'wrap' : 'nowrap',\n '& > *': {\n marginBottom: theme.spacing(),\n marginRight: theme.spacing(),\n },\n '& > *:last-child': {\n marginRight: 0,\n },\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport { isString, uniqueId } from 'lodash';\nimport { ReactNode, useCallback, useState } from 'react';\nimport { Accept, DropEvent, DropzoneOptions, FileError, FileRejection, useDropzone, ErrorCode } from 'react-dropzone';\n\nimport { formattedValueToString, getValueFormat, GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { Alert } from '../Alert/Alert';\nimport { Icon } from '../Icon/Icon';\n\nimport { FileListItem } from './FileListItem';\n\ntype BackwardsCompatibleDropzoneOptions = Omit<DropzoneOptions, 'accept'> & {\n // For backward compatibility we are still allowing the old `string | string[]` format for adding accepted file types (format changed in v13.0.0)\n accept?: string | string[] | Accept;\n};\n\nexport interface FileDropzoneProps {\n /**\n * Use the children property to have custom dropzone view.\n */\n children?: ReactNode;\n /**\n * Use this property to override the default behaviour for the react-dropzone options.\n * @default {\n * maxSize: Infinity,\n * minSize: 0,\n * multiple: true,\n * useFsAccessApi: false,\n * maxFiles: 0,\n * }\n */\n options?: BackwardsCompatibleDropzoneOptions;\n /**\n * Use this to change the FileReader's read.\n */\n readAs?: 'readAsArrayBuffer' | 'readAsText' | 'readAsBinaryString' | 'readAsDataURL';\n /**\n * Use the onLoad function to get the result from FileReader.\n */\n onLoad?: (result: string | ArrayBuffer | null) => void;\n /**\n * The fileListRenderer property can be used to overwrite the list of files. To not to show\n * any list return null in the function.\n */\n fileListRenderer?: (file: DropzoneFile, removeFile: (file: DropzoneFile) => void) => ReactNode;\n onFileRemove?: (file: DropzoneFile) => void;\n /**\n * Optional id attribute for the underlying input element\n * Use to link a label to the input for accessibility\n */\n id?: string;\n}\n\nexport interface DropzoneFile {\n file: File;\n id: string;\n error: DOMException | null;\n progress?: number;\n abortUpload?: () => void;\n retryUpload?: () => void;\n}\n\n/**\n * A dropzone component to use for file uploads.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-filedropzone--docs\n */\nexport function FileDropzone({\n options,\n children,\n readAs,\n onLoad,\n fileListRenderer,\n onFileRemove,\n id,\n}: FileDropzoneProps) {\n const [files, setFiles] = useState<DropzoneFile[]>([]);\n const [fileErrors, setErrorMessages] = useState<FileError[]>([]);\n\n const formattedSize = getValueFormat('decbytes')(options?.maxSize ? options?.maxSize : 0);\n\n const setFileProperty = useCallback(\n (customFile: DropzoneFile, action: (customFileToModify: DropzoneFile) => void) => {\n setFiles((oldFiles) => {\n return oldFiles.map((oldFile) => {\n if (oldFile.id === customFile.id) {\n action(oldFile);\n return oldFile;\n }\n return oldFile;\n });\n });\n },\n []\n );\n\n const onDrop = useCallback(\n (acceptedFiles: File[], rejectedFiles: FileRejection[], event: DropEvent) => {\n let customFiles = acceptedFiles.map(mapToCustomFile);\n if (options?.multiple === false) {\n setFiles(customFiles);\n } else {\n setFiles((oldFiles) => [...oldFiles, ...customFiles]);\n }\n\n setErrors(rejectedFiles);\n\n if (options?.onDrop) {\n options.onDrop(acceptedFiles, rejectedFiles, event);\n } else {\n for (const customFile of customFiles) {\n const reader = new FileReader();\n\n const read = () => {\n if (readAs) {\n reader[readAs](customFile.file);\n } else {\n reader.readAsText(customFile.file);\n }\n };\n\n // Set abort FileReader\n setFileProperty(customFile, (fileToModify) => {\n fileToModify.abortUpload = () => {\n reader.abort();\n };\n fileToModify.retryUpload = () => {\n setFileProperty(customFile, (fileToModify) => {\n fileToModify.error = null;\n fileToModify.progress = undefined;\n });\n read();\n };\n });\n\n reader.onabort = () => {\n setFileProperty(customFile, (fileToModify) => {\n fileToModify.error = new DOMException('Aborted');\n });\n };\n\n reader.onprogress = (event) => {\n setFileProperty(customFile, (fileToModify) => {\n fileToModify.progress = event.loaded;\n });\n };\n\n reader.onload = () => {\n onLoad?.(reader.result);\n };\n\n reader.onerror = () => {\n setFileProperty(customFile, (fileToModify) => {\n fileToModify.error = reader.error;\n });\n };\n\n read();\n }\n }\n },\n [onLoad, options, readAs, setFileProperty]\n );\n\n const removeFile = (file: DropzoneFile) => {\n const newFiles = files.filter((f) => file.id !== f.id);\n setFiles(newFiles);\n onFileRemove?.(file);\n };\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n ...options,\n useFsAccessApi: false,\n onDrop,\n accept: transformAcceptToNewFormat(options?.accept),\n });\n const theme = useTheme2();\n const styles = getStyles(theme, isDragActive);\n const fileList = files.map((file) => {\n if (fileListRenderer) {\n return fileListRenderer(file, removeFile);\n }\n return <FileListItem key={file.id} file={file} removeFile={removeFile} />;\n });\n\n const setErrors = (rejectedFiles: FileRejection[]) => {\n let errors: FileError[] = [];\n rejectedFiles.map((rejectedFile) => {\n rejectedFile.errors.map((newError) => {\n if (\n errors.findIndex((presentError) => {\n return presentError.code === newError.code && presentError.message === newError.message;\n }) === -1\n ) {\n errors.push(newError);\n }\n });\n });\n\n setErrorMessages(errors);\n };\n\n const renderErrorMessages = (errors: FileError[]) => {\n const size = formattedValueToString(formattedSize);\n return (\n <div className={styles.errorAlert}>\n <Alert\n title={t('grafana-ui.file-dropzone.error-title', 'Upload failed')}\n severity=\"error\"\n onRemove={clearAlert}\n >\n {errors.map((error) => {\n switch (error.code) {\n case ErrorCode.FileTooLarge:\n return (\n <div key={error.message + error.code}>\n <Trans i18nKey=\"grafana-ui.file-dropzone.file-too-large\">File is larger than {{ size }}</Trans>\n </div>\n );\n default:\n return <div key={error.message + error.code}>{error.message}</div>;\n }\n })}\n </Alert>\n </div>\n );\n };\n\n const clearAlert = () => {\n setErrorMessages([]);\n };\n\n return (\n <div className={styles.container}>\n <div data-testid=\"dropzone\" {...getRootProps({ className: styles.dropzone })}>\n <input {...getInputProps()} id={id} />\n {children ?? <FileDropzoneDefaultChildren primaryText={getPrimaryText(files, options)} />}\n </div>\n {fileErrors.length > 0 && renderErrorMessages(fileErrors)}\n <small className={cx(styles.small, styles.acceptContainer)}>\n {options?.maxSize && `Max file size: ${formattedValueToString(formattedSize)}`}\n {options?.maxSize && options?.accept && <span className={styles.acceptSeparator}>{'|'}</span>}\n {options?.accept && getAcceptedFileTypeText(options.accept)}\n </small>\n {fileList}\n </div>\n );\n}\n\nexport function getMimeTypeByExtension(ext: string) {\n if (['txt', 'json', 'csv', 'xls', 'yml'].some((e) => ext.match(e))) {\n return 'text/plain';\n }\n\n return 'application/octet-stream';\n}\n\nexport function transformAcceptToNewFormat(accept?: string | string[] | Accept): Accept | undefined {\n if (isString(accept)) {\n return {\n [getMimeTypeByExtension(accept)]: [accept],\n };\n }\n\n if (Array.isArray(accept)) {\n return accept.reduce((prev: Record<string, string[]>, current) => {\n const mime = getMimeTypeByExtension(current);\n\n prev[mime] = prev[mime] ? [...prev[mime], current] : [current];\n\n return prev;\n }, {});\n }\n\n return accept;\n}\n\nexport function FileDropzoneDefaultChildren({ primaryText = 'Drop file here or click to upload', secondaryText = '' }) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n return (\n <div className={cx(styles.defaultDropZone)} data-testid=\"file-drop-zone-default-children\">\n <Icon className={cx(styles.icon)} name=\"upload\" size=\"xl\" />\n <h6 className={cx(styles.primaryText)}>{primaryText}</h6>\n <small className={styles.small}>{secondaryText}</small>\n </div>\n );\n}\n\nfunction getPrimaryText(files: DropzoneFile[], options?: BackwardsCompatibleDropzoneOptions) {\n if (options?.multiple === undefined || options?.multiple) {\n return 'Upload file';\n }\n return files.length ? 'Replace file' : 'Upload file';\n}\n\nfunction getAcceptedFileTypeText(accept: string | string[] | Accept) {\n if (isString(accept)) {\n return `Accepted file type: ${accept}`;\n }\n\n if (Array.isArray(accept)) {\n return `Accepted file types: ${accept.join(', ')}`;\n }\n\n // react-dropzone has updated the type of the \"accept\" parameter since v13.0.0:\n // https://github.com/react-dropzone/react-dropzone/blob/master/src/index.js#L95\n return `Accepted file types: ${Object.values(accept).flat().join(', ')}`;\n}\n\nfunction mapToCustomFile(file: File): DropzoneFile {\n return {\n id: uniqueId('file'),\n file,\n error: null,\n };\n}\n\nfunction getStyles(theme: GrafanaTheme2, isDragActive?: boolean) {\n return {\n container: css({\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n padding: theme.spacing(2),\n borderRadius: theme.shape.radius.default,\n border: `1px dashed ${theme.colors.border.strong}`,\n backgroundColor: isDragActive ? theme.colors.background.secondary : theme.colors.background.primary,\n cursor: 'pointer',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n dropzone: css({\n height: '100%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n }),\n defaultDropZone: css({\n textAlign: 'center',\n }),\n icon: css({\n marginBottom: theme.spacing(1),\n }),\n primaryText: css({\n marginBottom: theme.spacing(1),\n }),\n acceptContainer: css({\n textAlign: 'center',\n margin: 0,\n }),\n acceptSeparator: css({\n margin: `0 ${theme.spacing(1)}`,\n }),\n small: css({\n color: theme.colors.text.secondary,\n }),\n errorAlert: css({\n paddingTop: '10px',\n }),\n };\n}\n","import { Icon, Text } from '@grafana/ui';\n\ninterface Props {\n namespace: string;\n group?: string;\n}\n\nconst RuleLocation = ({ namespace, group }: Props) => {\n if (!group) {\n return (\n <Text element=\"h3\" variant=\"body\">\n {namespace}\n </Text>\n );\n }\n\n return (\n <Text element=\"h3\" variant=\"body\">\n {namespace} <Icon name=\"angle-right\" aria-label=\">\" /> {group}\n </Text>\n );\n};\n\nexport { RuleLocation };\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Button } from '../Button/Button';\nimport { Box } from '../Layout/Box/Box';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { TextArea } from '../TextArea/TextArea';\n\nexport type Props = React.ComponentProps<typeof TextArea> & {\n /** TRUE if the secret was already configured. (It is needed as often the backend doesn't send back the actual secret, only the information that it was configured) */\n isConfigured: boolean;\n /** Called when the user clicks on the \"Reset\" button in order to clear the secret */\n onReset: () => void;\n};\n\nexport const CONFIGURED_TEXT = 'configured';\nexport const RESET_BUTTON_TEXT = 'Reset';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n configuredStyle: css({\n minHeight: theme.spacing(theme.components.height.md),\n paddingTop: theme.spacing(0.5) /** Needed to mimic vertically centered text in an input box */,\n resize: 'none',\n }),\n };\n};\n\n/**\n * Text area that does not disclose an already configured value but lets the user reset the current value and enter a new one.\n * Typically useful for asymmetric cryptography keys.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-secrettextarea--docs\n */\nexport const SecretTextArea = ({ isConfigured, onReset, ...props }: Props) => {\n const styles = useStyles2(getStyles);\n return (\n <Stack>\n <Box>\n {!isConfigured && <TextArea {...props} />}\n {isConfigured && (\n <TextArea\n {...props}\n rows={1}\n disabled={true}\n value={CONFIGURED_TEXT}\n className={cx(styles.configuredStyle)}\n />\n )}\n </Box>\n {isConfigured && (\n <Button onClick={onReset} variant=\"secondary\">\n {RESET_BUTTON_TEXT}\n </Button>\n )}\n </Stack>\n );\n};\n","import { getZone } from '@grafana/data';\n\n/**\n * React calendar doesn't support showing dates in other time zones, so attempting to show\n * values near midnight in another time zone than your browsers may end up showing the wrong date\n *\n * This function adjusts a date by \"moving\" the time to appear as if it's local.\n * e.g. make 5 PM New York \"look like\" 5 PM in the user's local browser time.\n * See also https://github.com/wojtekmaj/react-calendar/issues/511#issuecomment-835333976\n */\nexport function adjustDateForReactCalendar(date: Date, timeZone: string): Date {\n const zone = getZone(timeZone);\n if (!zone) {\n return date;\n }\n\n // get utc offset for timezone preference\n const timezonePrefOffset = zone.utcOffset(date.getTime());\n\n // get utc offset for local timezone\n const localOffset = date.getTimezoneOffset();\n\n // calculate difference between timezone preference and local timezone\n const diff = timezonePrefOffset - localOffset;\n\n const newDate = new Date(date.getTime() - diff * 1000 * 60);\n return newDate;\n}\n","import { PanelOptionsEditorBuilder, standardEditorsRegistry, StatsPickerConfigSettings } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { LegendDisplayMode, OptionsWithLegend } from '@grafana/schema';\n\n/**\n * @alpha\n */\nexport function addLegendOptions<T extends OptionsWithLegend>(\n builder: PanelOptionsEditorBuilder<T>,\n includeLegendCalcs = true,\n showLegend = true\n) {\n const category = [t('grafana-ui.builder.legend.category', 'Legend')];\n builder\n .addBooleanSwitch({\n path: 'legend.showLegend',\n name: t('grafana-ui.builder.legend.name-visibility', 'Visibility'),\n category,\n description: '',\n defaultValue: showLegend,\n })\n .addRadio({\n path: 'legend.displayMode',\n name: t('grafana-ui.builder.legend.name-mode', 'Mode'),\n category,\n description: '',\n defaultValue: LegendDisplayMode.List,\n settings: {\n options: [\n { value: LegendDisplayMode.List, label: t('grafana-ui.builder.legend.mode-options.label-list', 'List') },\n { value: LegendDisplayMode.Table, label: t('grafana-ui.builder.legend.mode-options.label-table', 'Table') },\n ],\n },\n showIf: (c) => c.legend.showLegend,\n })\n .addRadio({\n path: 'legend.placement',\n name: t('grafana-ui.builder.legend.name-placement', 'Placement'),\n category,\n description: '',\n defaultValue: 'bottom',\n settings: {\n options: [\n { value: 'bottom', label: t('grafana-ui.builder.legend.placement-options.label-bottom', 'Bottom') },\n { value: 'right', label: t('grafana-ui.builder.legend.placement-options.label-right', 'Right') },\n ],\n },\n showIf: (c) => c.legend.showLegend,\n })\n .addNumberInput({\n path: 'legend.width',\n name: t('grafana-ui.builder.legend.name-width', 'Width'),\n category,\n settings: {\n placeholder: 'Auto',\n },\n showIf: (c) => c.legend.showLegend && c.legend.placement === 'right',\n });\n\n if (includeLegendCalcs) {\n builder.addCustomEditor<StatsPickerConfigSettings, string[]>({\n id: 'legend.calcs',\n path: 'legend.calcs',\n name: t('grafana-ui.builder.legend.name-values', 'Values'),\n category,\n description: t('grafana-ui.builder.legend.description-values', 'Select values or calculations to show in legend'),\n editor: standardEditorsRegistry.get('stats-picker').editor,\n defaultValue: [],\n settings: {\n allowMultiple: true,\n },\n showIf: (currentConfig) => currentConfig.legend.showLegend !== false,\n });\n }\n}\n","type ReturnToPreviousHook = () => (title: string, href?: string) => void;\n\nlet rtpHook: ReturnToPreviousHook | undefined = undefined;\n\nexport const setReturnToPreviousHook = (hook: ReturnToPreviousHook) => {\n rtpHook = hook;\n};\n\n/**\n * Guidelines:\n * - Only use the ‘Return to previous’ functionality when the user is sent to another context, such as from Alerting to a dashboard.\n * - Specify a button title that identifies the page to return to in the most understandable way. Do not use text such as ‘Back to the previous page’. Be specific.\n */\nexport const useReturnToPrevious: ReturnToPreviousHook = () => {\n if (!rtpHook) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('useReturnToPrevious hook not found in @grafana/runtime');\n }\n return () => console.error('ReturnToPrevious hook not found');\n }\n\n return rtpHook();\n};\n","// Libraries\nimport { memo, ReactNode } from 'react';\n\n// Types\nimport { PanelProps, PanelPlugin, PluginType, PanelPluginMeta } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert } from '@grafana/ui';\nimport { AppNotificationSeverity } from 'app/types/appNotifications';\nimport grafanaIconSvg from 'img/grafana_icon.svg';\n\ninterface Props {\n title: string;\n text?: ReactNode;\n}\n\nconst PanelPluginError = memo<Props>(({ title, text }) => {\n const style = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n };\n\n return (\n <div style={style}>\n <Alert severity={AppNotificationSeverity.Error} title={title}>\n {text}\n </Alert>\n </div>\n );\n});\n\nPanelPluginError.displayName = 'PanelPluginError';\n\nexport function getPanelPluginLoadError(meta: PanelPluginMeta, err: unknown): PanelPlugin {\n const LoadError = memo<PanelProps>(() => {\n const text = (\n <Trans i18nKey=\"panel.panel-plugin-error.text-load-error\">\n Check the server startup logs for more information. <br />\n If this plugin was loaded from Git, then make sure it was compiled.\n </Trans>\n );\n return (\n <PanelPluginError\n title={t('panel.panel-plugin-error.title-load-error', 'Error loading: {{panelId}}', { panelId: meta.id })}\n text={text}\n />\n );\n });\n LoadError.displayName = 'LoadError';\n const plugin = new PanelPlugin(LoadError);\n plugin.meta = meta;\n plugin.loadError = true;\n return plugin;\n}\n\nexport function getPanelPluginNotFound(id: string, silent?: boolean): PanelPlugin {\n const NotFound = memo<PanelProps>(() => {\n return (\n <PanelPluginError\n title={t('panel.panel-plugin-error.title-not-found', 'Panel plugin not found: {{id}}', { id })}\n />\n );\n });\n NotFound.displayName = 'NotFound';\n\n const plugin = new PanelPlugin(silent ? () => null : NotFound);\n\n plugin.meta = {\n id: id,\n name: id,\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: grafanaIconSvg,\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n return plugin;\n}\n","// Libraries\nimport { isArray, isBoolean, isNumber, isString } from 'lodash';\n\nimport { isDateTime } from '../datetime/moment_wrapper';\nimport { fieldIndexComparer } from '../field/fieldComparers';\nimport { getFieldDisplayName } from '../field/fieldState';\nimport { Column, LoadingState, TableData, TimeSeries, TimeSeriesValue } from '../types/data';\nimport {\n DataFrame,\n FieldType,\n TIME_SERIES_TIME_FIELD_NAME,\n TIME_SERIES_VALUE_FIELD_NAME,\n Field,\n DataFrameWithValue,\n DataFrameDTO,\n FieldDTO,\n FieldConfig,\n} from '../types/dataFrame';\nimport { DataQueryResponseData } from '../types/datasource';\nimport { GraphSeriesXY, GraphSeriesValue } from '../types/graph';\nimport { PanelData } from '../types/panel';\n\nimport { arrayToDataFrame } from './ArrayDataFrame';\nimport { dataFrameFromJSON } from './DataFrameJSON';\n\nfunction convertTableToDataFrame(table: TableData): DataFrame {\n const fields = table.columns.map((c) => {\n // TODO: should be Column but type does not exists there so not sure whats up here.\n const { text, type, ...disp } = c as any;\n const values: unknown[] = [];\n return {\n name: text?.length ? text : c, // rename 'text' to the 'name' field\n config: (disp || {}) as FieldConfig,\n values,\n type: type && Object.values(FieldType).includes(type as FieldType) ? (type as FieldType) : FieldType.other,\n };\n });\n\n if (!isArray(table.rows)) {\n throw new Error(`Expected table rows to be array, got ${typeof table.rows}.`);\n }\n\n for (const row of table.rows) {\n for (let i = 0; i < fields.length; i++) {\n fields[i].values.push(row[i]);\n }\n }\n\n for (const f of fields) {\n if (f.type === FieldType.other) {\n const t = guessFieldTypeForField(f);\n if (t) {\n f.type = t;\n }\n }\n }\n\n return {\n fields,\n refId: table.refId,\n meta: table.meta,\n name: table.name,\n length: table.rows.length,\n };\n}\n\nfunction convertTimeSeriesToDataFrame(timeSeries: TimeSeries): DataFrame {\n const times: number[] = [];\n const values: TimeSeriesValue[] = [];\n\n // Sometimes the points are sent as datapoints\n const points = timeSeries.datapoints || (timeSeries as any).points;\n for (const point of points) {\n values.push(point[0]);\n times.push(point[1] as number);\n }\n\n const fields = [\n {\n name: TIME_SERIES_TIME_FIELD_NAME,\n type: FieldType.time,\n config: {},\n values: times,\n },\n {\n name: TIME_SERIES_VALUE_FIELD_NAME,\n type: FieldType.number,\n config: {\n unit: timeSeries.unit,\n },\n values: values,\n labels: timeSeries.tags,\n },\n ];\n\n if (timeSeries.title) {\n (fields[1].config as FieldConfig).displayNameFromDS = timeSeries.title;\n }\n\n return {\n name: timeSeries.target || (timeSeries as any).name,\n refId: timeSeries.refId,\n meta: timeSeries.meta,\n fields,\n length: values.length,\n };\n}\n\n/**\n * This is added temporarily while we convert the LogsModel\n * to DataFrame. See: https://github.com/grafana/grafana/issues/18528\n */\nfunction convertGraphSeriesToDataFrame(graphSeries: GraphSeriesXY): DataFrame {\n const x: GraphSeriesValue[] = [];\n const y: GraphSeriesValue[] = [];\n\n for (let i = 0; i < graphSeries.data.length; i++) {\n const row = graphSeries.data[i];\n x.push(row[1]);\n y.push(row[0]);\n }\n\n return {\n name: graphSeries.label,\n fields: [\n {\n name: graphSeries.label || TIME_SERIES_VALUE_FIELD_NAME,\n type: FieldType.number,\n config: {},\n values: x,\n },\n {\n name: TIME_SERIES_TIME_FIELD_NAME,\n type: FieldType.time,\n config: {\n unit: 'dateTimeAsIso',\n },\n values: y,\n },\n ],\n length: x.length,\n };\n}\n\nfunction convertJSONDocumentDataToDataFrame(timeSeries: TimeSeries): DataFrame {\n const fields: Field[] = [\n {\n name: timeSeries.target,\n type: FieldType.other,\n labels: timeSeries.tags,\n config: {\n unit: timeSeries.unit,\n filterable: (timeSeries as any).filterable,\n },\n values: [],\n },\n ];\n\n for (const point of timeSeries.datapoints) {\n fields[0].values.push(point);\n }\n\n return {\n name: timeSeries.target,\n refId: timeSeries.target,\n meta: { json: true },\n fields,\n length: timeSeries.datapoints.length,\n };\n}\n\n// PapaParse Dynamic Typing regex:\n// https://github.com/mholt/PapaParse/blob/master/papaparse.js#L998\nconst NUMBER = /^\\s*(-?(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[-+]?\\d+)?|NAN)\\s*$/i;\n\n/**\n * Given a name and value, this will pick a reasonable field type\n */\nexport function guessFieldTypeFromNameAndValue(name: string, v: unknown): FieldType {\n if (name) {\n name = name.toLowerCase();\n if (name === 'date' || name === 'time') {\n return FieldType.time;\n }\n }\n return guessFieldTypeFromValue(v);\n}\n\n/**\n * Check the field type to see what the contents are\n */\nexport function getFieldTypeFromValue(v: unknown): FieldType {\n if (v instanceof Date || isDateTime(v)) {\n return FieldType.time;\n }\n\n if (isNumber(v)) {\n return FieldType.number;\n }\n\n if (isString(v)) {\n return FieldType.string;\n }\n\n if (isBoolean(v)) {\n return FieldType.boolean;\n }\n\n return FieldType.other;\n}\n\n/**\n * Given a value this will guess the best column type\n *\n * NOTE: this is will try to see if string values can be mapped to other types (like number)\n */\nexport function guessFieldTypeFromValue(v: unknown): FieldType {\n if (v instanceof Date || isDateTime(v)) {\n return FieldType.time;\n }\n\n if (isNumber(v)) {\n return FieldType.number;\n }\n\n if (isString(v)) {\n if (NUMBER.test(v)) {\n return FieldType.number;\n }\n\n if (v === 'true' || v === 'TRUE' || v === 'True' || v === 'false' || v === 'FALSE' || v === 'False') {\n return FieldType.boolean;\n }\n\n return FieldType.string;\n }\n\n if (isBoolean(v)) {\n return FieldType.boolean;\n }\n\n return FieldType.other;\n}\n\n/**\n * Looks at the data to guess the column type. This ignores any existing setting\n */\nexport function guessFieldTypeForField(field: Field): FieldType | undefined {\n // 1. Use the column name to guess\n if (field.name) {\n const name = field.name.toLowerCase();\n if (name === 'date' || name === 'time') {\n return FieldType.time;\n }\n }\n\n // 2. Check the first non-null value\n for (let i = 0; i < field.values.length; i++) {\n const v = field.values[i];\n if (v != null) {\n return guessFieldTypeFromValue(v);\n }\n }\n\n // Could not find anything\n return undefined;\n}\n\n/**\n * @returns A copy of the series with the best guess for each field type.\n * If the series already has field types defined, they will be used, unless `guessDefined` is true.\n * @param series The DataFrame whose field's types should be guessed\n * @param guessDefined Whether to guess types of fields with already defined types\n */\nexport const guessFieldTypes = (series: DataFrame, guessDefined = false): DataFrame => {\n for (const field of series.fields) {\n if (!field.type || field.type === FieldType.other || guessDefined) {\n // Something is missing a type, return a modified copy\n return {\n ...series,\n fields: series.fields.map((field) => {\n if (field.type && field.type !== FieldType.other && !guessDefined) {\n return field;\n }\n // Calculate a reasonable schema value\n return {\n ...field,\n type: guessFieldTypeForField(field) || FieldType.other,\n };\n }),\n };\n }\n }\n // No changes necessary\n return series;\n};\n\nexport const isTableData = (data: unknown): data is DataFrame => Boolean(data && data.hasOwnProperty('columns'));\n\nexport const isDataFrame = (data: unknown): data is DataFrame => Boolean(data && data.hasOwnProperty('fields'));\n\nexport const isDataFrameWithValue = (data: unknown): data is DataFrameWithValue =>\n Boolean(isDataFrame(data) && data.hasOwnProperty('value'));\n\n/**\n * Inspect any object and return the results as a DataFrame\n */\nexport function toDataFrame(data: any): DataFrame {\n if ('fields' in data) {\n // DataFrameDTO does not have length\n if ('length' in data && data.fields[0]?.values?.get) {\n return data;\n }\n\n // This will convert the array values into Vectors\n return createDataFrame(data);\n }\n\n // Handle legacy docs/json type\n if (data.hasOwnProperty('type') && data.type === 'docs') {\n return convertJSONDocumentDataToDataFrame(data);\n }\n\n if (data.hasOwnProperty('datapoints') || data.hasOwnProperty('points')) {\n return convertTimeSeriesToDataFrame(data);\n }\n\n if (data.hasOwnProperty('data')) {\n if (data.hasOwnProperty('schema')) {\n return dataFrameFromJSON(data);\n }\n return convertGraphSeriesToDataFrame(data);\n }\n\n if (data.hasOwnProperty('columns')) {\n return convertTableToDataFrame(data);\n }\n\n if (Array.isArray(data)) {\n return arrayToDataFrame(data);\n }\n\n console.warn('Can not convert', data);\n throw new Error('Unsupported data format');\n}\n\nexport const toLegacyResponseData = (frame: DataFrame): TimeSeries | TableData => {\n const { fields } = frame;\n\n const rowCount = frame.length;\n const rows: unknown[][] = [];\n\n if (fields.length === 2) {\n const { timeField, timeIndex } = getTimeField(frame);\n if (timeField) {\n const valueIndex = timeIndex === 0 ? 1 : 0;\n const valueField = fields[valueIndex];\n const timeField = fields[timeIndex!];\n\n // Make sure it is [value,time]\n for (let i = 0; i < rowCount; i++) {\n rows.push([\n valueField.values[i], // value\n timeField.values[i], // time\n ]);\n }\n\n return {\n alias: frame.name,\n target: getFieldDisplayName(valueField, frame),\n datapoints: rows,\n unit: fields[0].config ? fields[0].config.unit : undefined,\n refId: frame.refId,\n meta: frame.meta,\n } as TimeSeries;\n }\n }\n\n for (let i = 0; i < rowCount; i++) {\n const row: unknown[] = [];\n for (let j = 0; j < fields.length; j++) {\n row.push(fields[j].values[i]);\n }\n rows.push(row);\n }\n\n if (frame.meta && frame.meta.json) {\n return {\n alias: fields[0].name || frame.name,\n target: fields[0].name || frame.name,\n datapoints: fields[0].values,\n filterable: fields[0].config ? fields[0].config.filterable : undefined,\n type: 'docs',\n } as TimeSeries;\n }\n\n return {\n columns: fields.map((f) => {\n const { name, config } = f;\n if (config) {\n // keep unit etc\n const { ...column } = config;\n (column as Column).text = name;\n return column as Column;\n }\n return { text: name };\n }),\n type: 'table',\n refId: frame.refId,\n meta: frame.meta,\n rows,\n };\n};\n\nexport function sortDataFrame(data: DataFrame, sortIndex?: number, reverse = false): DataFrame {\n const field = data.fields[sortIndex!];\n if (!field) {\n return data;\n }\n\n // Natural order\n const index: number[] = [];\n for (let i = 0; i < data.length; i++) {\n index.push(i);\n }\n\n const fieldComparer = fieldIndexComparer(field, reverse);\n index.sort(fieldComparer);\n\n return {\n ...data,\n fields: data.fields.map((field) => {\n const newValues = Array.from({ length: field.values.length }, (_, i) => field.values[index[i]]);\n\n const newField = {\n ...field,\n values: newValues,\n };\n\n // only add .nanos if it exists\n const { nanos } = field;\n if (nanos !== undefined) {\n newField.nanos = Array.from({ length: nanos.length }, (_, i) => nanos[index[i]]);\n }\n return newField;\n }),\n };\n}\n\n/**\n * Returns a copy with all values reversed\n */\nexport function reverseDataFrame(data: DataFrame): DataFrame {\n return {\n ...data,\n fields: data.fields.map((f) => {\n const values = [...f.values];\n values.reverse();\n\n const newF = {\n ...f,\n values,\n };\n\n // only add .nanos if it exists\n const { nanos } = f;\n if (nanos !== undefined) {\n const revNanos = [...nanos];\n revNanos.reverse();\n newF.nanos = revNanos;\n }\n return newF;\n }),\n };\n}\n\n/**\n * Wrapper to get an array from each field value\n */\nexport function getDataFrameRow(data: DataFrame, row: number): unknown[] {\n const values: unknown[] = [];\n for (const field of data.fields) {\n values.push(field.values[row]);\n }\n return values;\n}\n\n/**\n * Returns a copy that does not include functions\n */\nexport function toDataFrameDTO(data: DataFrame): DataFrameDTO {\n return toFilteredDataFrameDTO(data);\n}\n\nexport function toFilteredDataFrameDTO(data: DataFrame, fieldPredicate?: (f: Field) => boolean): DataFrameDTO {\n const filteredFields = fieldPredicate ? data.fields.filter(fieldPredicate) : data.fields;\n const fields: FieldDTO[] = filteredFields.map((f) => {\n let values = f.values;\n return {\n name: f.name,\n type: f.type,\n config: f.config,\n values,\n labels: f.labels,\n };\n });\n\n return {\n fields,\n refId: data.refId,\n meta: data.meta,\n name: data.name,\n };\n}\n\nexport const getTimeField = (series: DataFrame): { timeField?: Field; timeIndex?: number } => {\n for (let i = 0; i < series.fields.length; i++) {\n if (series.fields[i].type === FieldType.time) {\n return {\n timeField: series.fields[i],\n timeIndex: i,\n };\n }\n }\n return {};\n};\n\nfunction getProcessedDataFrame(data: DataQueryResponseData): DataFrame {\n const dataFrame = guessFieldTypes(toDataFrame(data));\n\n if (dataFrame.fields && dataFrame.fields.length) {\n // clear out the cached info\n for (const field of dataFrame.fields) {\n field.state = null;\n }\n }\n\n return dataFrame;\n}\n\n/**\n * Given data request results, will return data frames with field types set\n *\n * This is also used by PanelChrome for snapshot support\n */\nexport function getProcessedDataFrames(results?: DataQueryResponseData[]): DataFrame[] {\n if (!results || !isArray(results)) {\n return [];\n }\n\n return results.map((data) => getProcessedDataFrame(data));\n}\n\n/**\n * Will process the panel data frames and in case of loading state with no data, will return the last result data but with loading state\n * This is to have panels not flicker temporarily with \"no data\" while loading\n */\nexport function preProcessPanelData(data: PanelData, lastResult?: PanelData): PanelData {\n const { series, annotations } = data;\n\n // for loading states with no data, use last result\n if (data.state === LoadingState.Loading && series.length === 0) {\n if (!lastResult) {\n lastResult = data;\n }\n\n return {\n ...lastResult,\n state: LoadingState.Loading,\n request: data.request,\n };\n }\n\n // Make sure the data frames are properly formatted\n const STARTTIME = performance.now();\n const processedDataFrames = series.map((data) => getProcessedDataFrame(data));\n const annotationsProcessed = getProcessedDataFrames(annotations);\n const STOPTIME = performance.now();\n\n return {\n ...data,\n series: processedDataFrames,\n annotations: annotationsProcessed,\n timings: { dataProcessingTime: STOPTIME - STARTTIME },\n };\n}\n\nexport interface PartialDataFrame extends Omit<DataFrame, 'fields' | 'length'> {\n fields: Array<Partial<Field>>;\n}\n\nexport function createDataFrame(input: PartialDataFrame): DataFrame {\n let length = 0;\n const fields = input.fields.map((p, idx) => {\n const { state, ...field } = p;\n if (!field.name) {\n field.name = `Field ${idx + 1}`;\n }\n if (!field.config) {\n field.config = {};\n }\n if (!field.values) {\n field.values = new Array(length);\n } else if (field.values.length > length) {\n length = field.values.length;\n }\n if (!field.type) {\n field.type = guessFieldTypeForField(field as Field) ?? FieldType.other;\n }\n return field as Field;\n });\n\n return {\n ...input,\n fields,\n length,\n };\n}\n","import { ReactNode, useCallback } from 'react';\nimport * as React from 'react';\n\nimport { StandardEditorProps, StringFieldConfigSettings } from '@grafana/data';\nimport { Input, TextArea } from '@grafana/ui';\n\ninterface Props extends StandardEditorProps<string, StringFieldConfigSettings> {\n suffix?: ReactNode;\n}\n\nexport const StringValueEditor = ({ value, onChange, item, suffix, id }: Props) => {\n const Component = item.settings?.useTextarea ? TextArea : Input;\n const onValueChange = useCallback(\n (\n e:\n | React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>\n | React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => {\n let nextValue = value ?? '';\n if ('key' in e) {\n // handling keyboard event\n if (e.key === 'Enter' && !item.settings?.useTextarea) {\n nextValue = e.currentTarget.value.trim();\n }\n } else {\n // handling blur event\n nextValue = e.currentTarget.value.trim();\n }\n if (nextValue === value) {\n return; // no change\n }\n onChange(nextValue === '' ? undefined : nextValue);\n },\n [value, item.settings?.useTextarea, onChange]\n );\n\n return (\n <Component\n id={id}\n placeholder={item.settings?.placeholder}\n defaultValue={value || ''}\n rows={(item.settings?.useTextarea && item.settings.rows) || 5}\n onBlur={onValueChange}\n onKeyDown={onValueChange}\n suffix={suffix}\n />\n );\n};\n","import { useState } from 'react';\nimport * as React from 'react';\n\nimport { ContextMenu } from '../ContextMenu/ContextMenu';\n\nexport interface WithContextMenuProps {\n /** Menu item trigger that accepts openMenu prop */\n children: (props: { openMenu: React.MouseEventHandler<HTMLElement> }) => JSX.Element;\n /** A function that returns an array of menu items */\n renderMenuItems: () => React.ReactNode;\n /** On menu open focus the first element */\n focusOnOpen?: boolean;\n}\n\nexport const WithContextMenu = ({ children, renderMenuItems, focusOnOpen = true }: WithContextMenuProps) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [menuPosition, setMenuPosition] = useState({ x: 0, y: 0 });\n return (\n <>\n {children({\n openMenu: (e) => {\n setIsMenuOpen(true);\n setMenuPosition({\n x: e.pageX,\n y: e.pageY - window.scrollY,\n });\n },\n })}\n\n {isMenuOpen && (\n <ContextMenu\n onClose={() => setIsMenuOpen(false)}\n x={menuPosition.x}\n y={menuPosition.y}\n renderMenuItems={renderMenuItems}\n focusOnOpen={focusOnOpen}\n />\n )}\n </>\n );\n};\n","import { Trans, t } from '@grafana/i18n';\nimport { Alert, Button, Stack } from '@grafana/ui';\n\nexport function FederatedRuleWarning() {\n return (\n <Alert\n severity=\"info\"\n title={t('alerting.federated-rule-warning.title-federated-group', 'This rule is part of a federated rule group.')}\n bottomSpacing={0}\n topSpacing={2}\n >\n <Stack direction=\"column\">\n <Trans i18nKey=\"alerting.federated-rule-warning.experimental\">\n Federated rule groups are currently an experimental feature.\n </Trans>\n <Button fill=\"text\" icon=\"book\">\n <a href=\"https://grafana.com/docs/metrics-enterprise/latest/tenant-management/tenant-federation/#cross-tenant-alerting-and-recording-rule-federation\">\n <Trans i18nKey=\"alerting.federated-rule-warning.read-documentation\">Read documentation</Trans>\n </a>\n </Button>\n </Stack>\n </Alert>\n );\n}\n","import type { InternalLoggerLevel } from '@grafana/faro-core';\n\nimport { SystemDateFormatSettings } from '../datetime/formats';\nimport { MapLayerOptions } from '../geo/layer';\n\nimport { DataSourceInstanceSettings } from './datasource';\nimport { FeatureToggles } from './featureToggles.gen';\nimport { IconName } from './icon';\nimport { NavLinkDTO } from './navModel';\nimport { OrgRole } from './orgs';\nimport { PanelPluginMeta } from './panel';\nimport { AngularMeta, PluginDependencies, PluginExtensions, PluginLoadingStrategy } from './plugin';\nimport { TimeOption } from './time';\n\nexport interface AzureSettings {\n cloud?: string;\n clouds?: AzureCloudInfo[];\n managedIdentityEnabled: boolean;\n workloadIdentityEnabled: boolean;\n userIdentityEnabled: boolean;\n userIdentityFallbackCredentialsEnabled: boolean;\n azureEntraPasswordCredentialsEnabled: boolean;\n}\n\nexport interface AzureCloudInfo {\n name: string;\n displayName: string;\n}\n\nexport type AppPluginConfig = {\n id: string;\n path: string;\n version: string;\n preload: boolean;\n angular: AngularMeta;\n loadingStrategy: PluginLoadingStrategy;\n dependencies: PluginDependencies;\n extensions: PluginExtensions;\n moduleHash?: string;\n};\n\nexport type PreinstalledPlugin = {\n id: string;\n version: string;\n};\n\n/**\n * Describes the build information that will be available via the Grafana configuration.\n *\n * @public\n */\nexport interface BuildInfo {\n // This MUST be a semver-ish version string, such as \"11.0.0-54321\"\n version: string;\n // Version to show in the UI instead of version\n versionString: string;\n buildstamp: number;\n commit: string;\n commitShort: string;\n env: string;\n edition: GrafanaEdition;\n latestVersion: string;\n hasUpdate: boolean;\n hideVersion: boolean;\n}\n\n/**\n * @internal\n */\nexport enum GrafanaEdition {\n OpenSource = 'Open Source',\n Pro = 'Pro',\n Enterprise = 'Enterprise',\n}\n\n/**\n * Describes the license information about the current running instance of Grafana.\n *\n * @public\n */\nexport interface LicenseInfo {\n expiry: number;\n licenseUrl: string;\n stateInfo: string;\n edition: GrafanaEdition;\n enabledFeatures: { [key: string]: boolean };\n trialExpiry?: number;\n}\n\n/**\n * Describes GrafanaJavascriptAgentConfig integration config\n *\n * @public\n */\nexport interface GrafanaJavascriptAgentConfig {\n enabled: boolean;\n customEndpoint: string;\n apiKey: string;\n internalLoggerLevel: InternalLoggerLevel;\n\n consoleInstrumentalizationEnabled: boolean;\n performanceInstrumentalizationEnabled: boolean;\n cspInstrumentalizationEnabled: boolean;\n tracingInstrumentalizationEnabled: boolean;\n webVitalsAttribution: boolean;\n}\n\nexport interface UnifiedAlertingStateHistoryConfig {\n backend?: string;\n primary?: string;\n prometheusTargetDatasourceUID?: string;\n prometheusMetricName?: string;\n}\n\nexport interface UnifiedAlertingConfig {\n minInterval: string;\n stateHistory?: UnifiedAlertingStateHistoryConfig;\n recordingRulesEnabled?: boolean;\n defaultRecordingRulesTargetDatasourceUID?: string;\n\n // Backward compatibility aliases - deprecated\n /** @deprecated Use stateHistory.backend instead */\n alertStateHistoryBackend?: string;\n /** @deprecated Use stateHistory.primary instead */\n alertStateHistoryPrimary?: string;\n}\n\n/** Supported OAuth services\n *\n * @public\n */\nexport type OAuth =\n | 'github'\n | 'gitlab'\n | 'google'\n | 'generic_oauth'\n // | 'grafananet' Deprecated. Key always changed to \"grafana_com\"\n | 'grafana_com'\n | 'azuread'\n | 'okta';\n\n/** Map of enabled OAuth services and their respective names\n *\n * @public\n */\nexport type OAuthSettings = Partial<Record<OAuth, { name: string; icon?: IconName }>>;\n\n/**\n * Information needed for analytics providers\n *\n * @internal\n */\nexport interface AnalyticsSettings {\n identifier: string;\n intercomIdentifier?: string;\n}\n\n/**\n * Current user info included in bootData.\n * Corresponds to `window.grafanaBootData.user`\n * @internal\n */\nexport interface CurrentUserDTO {\n isSignedIn: boolean;\n id: number;\n uid: string;\n externalUserId: string;\n login: string;\n email: string;\n name: string;\n theme: string; // dark | light | system\n orgCount: number;\n orgId: number;\n orgName: string;\n orgRole: OrgRole | '';\n isGrafanaAdmin: boolean;\n gravatarUrl: string;\n timezone: string;\n weekStart: string;\n regionalFormat: string;\n language: string;\n permissions?: Record<string, boolean>;\n analytics: AnalyticsSettings;\n authenticatedBy: string;\n\n /** @deprecated Use theme instead */\n lightTheme: boolean;\n}\n\n/**\n * Contains essential user and config info.\n * Corresponds to `window.grafanaBootData`.\n * @internal\n */\nexport interface BootData {\n user: CurrentUserDTO;\n settings: GrafanaConfig;\n navTree: NavLinkDTO[];\n assets: {\n light: string;\n dark: string;\n };\n\n /** @deprecated Internal Grafana usage only. This property will be removed at any time. */\n _femt?: boolean;\n}\n\n/**\n * Describes all the different Grafana configuration values available for an instance.\n * Corresponds to `window.grafanaBootData.settings`.\n * If you want to access these values, use the `config` object from `@grafana/runtime`.\n * @internal\n */\nexport interface GrafanaConfig {\n publicDashboardAccessToken: string;\n publicDashboardsEnabled: boolean;\n snapshotEnabled: boolean;\n datasources: { [str: string]: DataSourceInstanceSettings };\n panels: { [key: string]: PanelPluginMeta };\n apps: Record<string, AppPluginConfig>;\n auth: AuthSettings;\n minRefreshInterval: string;\n appUrl: string;\n appSubUrl: string;\n azure: AzureSettings;\n jwtHeaderName: string;\n jwtUrlLogin: boolean;\n windowTitlePrefix: string;\n buildInfo: BuildInfo;\n externalUserMngLinkUrl: string;\n externalUserMngLinkName: string;\n externalUserMngInfo: string;\n externalUserMngAnalytics: boolean;\n externalUserMngAnalyticsParams: string;\n allowOrgCreate: boolean;\n disableLoginForm: boolean;\n defaultDatasource: string;\n defaultDatasourceManageAlertsUIToggle: boolean;\n defaultAllowRecordingRulesTargetAlertsUIToggle: boolean;\n authProxyEnabled: boolean;\n exploreEnabled: boolean;\n queryHistoryEnabled: boolean;\n helpEnabled: boolean;\n profileEnabled: boolean;\n newsFeedEnabled: boolean;\n ldapEnabled: boolean;\n sigV4AuthEnabled: boolean;\n azureAuthEnabled: boolean;\n samlEnabled: boolean;\n samlName: string;\n awsAllowedAuthProviders: string[];\n awsAssumeRoleProvided: boolean;\n autoAssignOrg: boolean;\n verifyEmailEnabled: boolean;\n oauth: OAuthSettings;\n /** @deprecated always set to true. */\n rbacEnabled: boolean;\n disableUserSignUp: boolean;\n loginHint: string;\n passwordHint: string;\n loginError?: string;\n viewersCanEdit: boolean;\n disableSanitizeHtml: boolean;\n trustedTypesDefaultPolicyEnabled: boolean;\n cspReportOnlyEnabled: boolean;\n expressionsEnabled: boolean;\n liveEnabled: boolean;\n liveMessageSizeLimit: number;\n anonymousEnabled: boolean;\n anonymousDeviceLimit: number;\n featureToggles: FeatureToggles;\n licenseInfo: LicenseInfo;\n http2Enabled: boolean;\n dateFormats?: SystemDateFormatSettings;\n grafanaJavascriptAgent: GrafanaJavascriptAgentConfig;\n geomapDefaultBaseLayerConfig?: MapLayerOptions;\n geomapDisableCustomBaseLayer: boolean;\n unifiedAlertingEnabled: boolean;\n unifiedAlerting: UnifiedAlertingConfig;\n feedbackLinksEnabled: boolean;\n supportBundlesEnabled: boolean;\n secureSocksDSProxyEnabled: boolean;\n enableFrontendSandboxForPlugins: string[];\n googleAnalyticsId: string;\n googleAnalytics4Id: string;\n googleAnalytics4SendManualPageViews: boolean;\n rudderstackWriteKey: string;\n rudderstackDataPlaneUrl: string;\n rudderstackSdkUrl: string;\n rudderstackConfigUrl: string;\n rudderstackIntegrationsUrl: string;\n applicationInsightsConnectionString: string;\n applicationInsightsEndpointUrl: string;\n analyticsConsoleReporting: boolean;\n rendererAvailable: boolean;\n rendererVersion: string;\n rendererDefaultImageWidth: number;\n rendererDefaultImageHeight: number;\n rendererDefaultImageScale: number;\n dashboardPerformanceMetrics: string[];\n panelSeriesLimit: number;\n sqlConnectionLimits: SqlConnectionLimits;\n sharedWithMeFolderUID: string;\n rootFolderUID: string;\n localFileSystemAvailable: boolean;\n cloudMigrationIsTarget: boolean;\n cloudMigrationPollIntervalMs: number;\n pluginCatalogURL: string;\n pluginAdminEnabled: boolean;\n pluginAdminExternalManageEnabled: boolean;\n pluginCatalogHiddenPlugins: string[];\n pluginCatalogManagedPlugins: string[];\n pluginCatalogPreinstalledPlugins: PreinstalledPlugin[];\n pluginsCDNBaseURL: string;\n tokenExpirationDayLimit: number;\n listDashboardScopesEndpoint: string;\n listScopesEndpoint: string;\n reportingStaticContext: Record<string, string>;\n exploreDefaultTimeOffset: string;\n exploreHideLogsDownload: boolean;\n quickRanges?: TimeOption[];\n pluginRestrictedAPIsAllowList?: Record<string, string[]>;\n pluginRestrictedAPIsBlockList?: Record<string, string[]>;\n openFeatureContext: Record<string, unknown>;\n\n // The namespace to use for kubernetes apiserver requests\n namespace: string;\n caching: {\n enabled: boolean;\n };\n recordedQueries: {\n enabled: boolean;\n };\n reporting: {\n enabled: boolean;\n };\n analytics: {\n enabled: boolean;\n };\n}\n\nexport interface SqlConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n connMaxLifetime: number;\n}\n\nexport interface AuthSettings {\n AuthProxyEnableLoginToken?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n OAuthSkipOrgRoleUpdateSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n SAMLSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n LDAPSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n JWTAuthSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n GrafanaComSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n GithubSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n GitLabSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n OktaSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n AzureADSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n GoogleSkipOrgRoleSync?: boolean;\n // @deprecated -- this is no longer used and will be removed in Grafana 11\n GenericOAuthSkipOrgRoleSync?: boolean;\n\n disableLogin?: boolean;\n passwordlessEnabled?: boolean;\n basicAuthStrongPasswordPolicy?: boolean;\n disableSignoutMenu?: boolean;\n}\n","import { SceneGridRow, SceneObject } from '@grafana/scenes';\n\nimport { RowItem } from '../layout-rows/RowItem';\nimport { TabItem } from '../layout-tabs/TabItem';\nimport { TabsLayoutManager } from '../layout-tabs/TabsLayoutManager';\n\n/**\n * Will scroll element into view. If element is not connected yet, it will try to expand rows\n * and switch tabs to make it visible.\n */\nexport function scrollCanvasElementIntoView(sceneObject: SceneObject, ref: React.RefObject<HTMLElement>) {\n if (ref.current?.isConnected) {\n scrollIntoView(ref.current);\n return;\n }\n\n // try expanding rows and switching tabs\n let parent = sceneObject.parent;\n while (parent) {\n if (parent instanceof RowItem && parent.state.collapse) {\n parent.onCollapseToggle();\n }\n\n if (parent instanceof SceneGridRow && parent.state.isCollapsed) {\n parent.onCollapseToggle();\n }\n\n if (parent instanceof TabItem) {\n const tabsManager = parent.parent;\n if (tabsManager instanceof TabsLayoutManager && tabsManager.getCurrentTab() !== parent) {\n tabsManager.switchToTab(parent);\n }\n }\n parent = parent.parent;\n }\n\n // now try to scroll into view\n setTimeout(() => {\n if (ref.current?.isConnected) {\n scrollIntoView(ref.current);\n }\n }, 10);\n}\n\nexport function scrollIntoView(element: HTMLElement) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });\n}\n","import { DataSourceInstanceSettings } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { DataSourceRef } from '@grafana/schema';\n\nimport { useDatasources } from '../../hooks';\n\nimport { DataSourceCard } from './DataSourceCard';\nimport { isDataSourceMatch } from './utils';\n\nfunction getCustomDescription(datasourceUid: string) {\n switch (datasourceUid) {\n case 'grafana':\n return t('data-source-picker.built-in-list.description-grafana', 'Discover visualizations using mock data');\n case '-- Mixed --':\n return t('data-source-picker.built-in-list.description-mixed', 'Use multiple data sources');\n case '-- Dashboard --':\n return t(\n 'data-source-picker.built-in-list.description-dashboard',\n 'Reuse query results from other visualizations'\n );\n default:\n return '';\n }\n}\n\ninterface BuiltInDataSourceListProps {\n className?: string;\n current: DataSourceRef | string | null | undefined;\n onChange: (ds: DataSourceInstanceSettings) => void;\n\n // DS filters\n filter?: (ds: DataSourceInstanceSettings) => boolean;\n tracing?: boolean;\n mixed?: boolean;\n dashboard?: boolean;\n metrics?: boolean;\n type?: string | string[];\n annotations?: boolean;\n variables?: boolean;\n alerting?: boolean;\n pluginId?: string;\n logs?: boolean;\n}\n\nexport function BuiltInDataSourceList({\n className,\n current,\n onChange,\n tracing,\n dashboard,\n mixed,\n metrics,\n type,\n annotations,\n variables,\n alerting,\n pluginId,\n logs,\n filter,\n}: BuiltInDataSourceListProps) {\n const grafanaDataSources = useDatasources({\n tracing,\n dashboard,\n mixed,\n metrics,\n type,\n annotations,\n variables,\n alerting,\n pluginId,\n logs,\n });\n\n const filteredResults = grafanaDataSources.filter((ds) => (filter ? filter?.(ds) : true) && !!ds.meta.builtIn);\n\n return (\n <div className={className} data-testid={selectors.components.DataSourcePicker.advancedModal.builtInDataSourceList}>\n {filteredResults.map((ds) => {\n return (\n <DataSourceCard\n key={ds.uid}\n ds={ds}\n description={getCustomDescription(ds.uid)}\n selected={isDataSourceMatch(ds, current)}\n onClick={() => onChange(ds)}\n />\n );\n })}\n </div>\n );\n}\n","import { css } from '@emotion/css';\nimport { once } from 'lodash';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { DataSourceInstanceSettings, DataSourceRef, GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config, reportInteraction, useFavoriteDatasources } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport {\n Modal,\n FileDropzone,\n FileDropzoneDefaultChildren,\n useStyles2,\n Input,\n Icon,\n ScrollContainer,\n} from '@grafana/ui';\nimport { acceptedFiles, maxFileSize } from 'app/features/dataframe-import/constants';\nimport { GrafanaQuery } from 'app/plugins/datasource/grafana/types';\nimport { getFileDropToQueryHandler } from 'app/plugins/datasource/grafana/utils';\n\nimport { useDatasource, useDatasources } from '../../hooks';\n\nimport { AddNewDataSourceButton } from './AddNewDataSourceButton';\nimport { BuiltInDataSourceList } from './BuiltInDataSourceList';\nimport { DataSourceList } from './DataSourceList';\nimport { matchDataSourceWithSearch } from './utils';\n\nconst INTERACTION_EVENT_NAME = 'dashboards_dspickermodal_clicked';\nconst INTERACTION_ITEM = {\n SELECT_DS: 'select_ds',\n UPLOAD_FILE: 'upload_file',\n CONFIG_NEW_DS: 'config_new_ds',\n CONFIG_NEW_DS_EMPTY_STATE: 'config_new_ds_empty_state',\n SEARCH: 'search',\n DISMISS: 'dismiss',\n OPEN_MODAL: 'open_modal',\n};\n\nexport interface DataSourceModalProps {\n onChange: (ds: DataSourceInstanceSettings, defaultQueries?: DataQuery[] | GrafanaQuery[]) => void;\n current: DataSourceRef | string | null | undefined;\n onDismiss: () => void;\n recentlyUsed?: string[];\n reportedInteractionFrom?: string;\n\n // DS filters\n filter?: (ds: DataSourceInstanceSettings) => boolean;\n tracing?: boolean;\n mixed?: boolean;\n dashboard?: boolean;\n metrics?: boolean;\n type?: string | string[];\n annotations?: boolean;\n variables?: boolean;\n alerting?: boolean;\n pluginId?: string;\n logs?: boolean;\n uploadFile?: boolean;\n}\n\nexport function DataSourceModal({\n tracing,\n dashboard,\n mixed,\n metrics,\n type,\n annotations,\n variables,\n alerting,\n pluginId,\n logs,\n uploadFile,\n filter,\n onChange,\n current,\n onDismiss,\n reportedInteractionFrom,\n}: DataSourceModalProps) {\n const styles = useStyles2(getDataSourceModalStyles);\n const [search, setSearch] = useState('');\n const analyticsInteractionSrc = reportedInteractionFrom || 'modal';\n const favoriteDataSources = useFavoriteDatasources();\n\n const onDismissModal = () => {\n onDismiss();\n reportInteraction(INTERACTION_EVENT_NAME, { item: INTERACTION_ITEM.DISMISS, src: analyticsInteractionSrc });\n };\n const onChangeDataSource = (ds: DataSourceInstanceSettings) => {\n onChange(ds);\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.SELECT_DS,\n ds_type: ds.type,\n src: analyticsInteractionSrc,\n is_favorite: favoriteDataSources.enabled ? favoriteDataSources.isFavoriteDatasource(ds.uid) : undefined,\n });\n };\n\n const grafanaDS = useDatasource('-- Grafana --');\n\n // Get all datasources to report total_configured count\n const dataSources = useDatasources({\n tracing,\n dashboard,\n mixed,\n metrics,\n type,\n annotations,\n variables,\n alerting,\n pluginId,\n logs,\n });\n\n // Report interaction when modal is opened\n useEffect(() => {\n if (dataSources.length > 0) {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.OPEN_MODAL,\n src: analyticsInteractionSrc,\n creator_team: 'grafana_plugins_catalog',\n schema_version: '1.0.0',\n total_configured: dataSources.length,\n });\n }\n }, [analyticsInteractionSrc, dataSources.length]);\n\n // Memoizing to keep once() cached so it avoids reporting multiple times\n const reportSearchUsageOnce = useMemo(\n () =>\n once(() => {\n reportInteraction(INTERACTION_EVENT_NAME, { item: 'search', src: analyticsInteractionSrc });\n }),\n [analyticsInteractionSrc]\n );\n\n const onFileDrop = getFileDropToQueryHandler((query, fileRejections) => {\n if (!grafanaDS) {\n return;\n }\n onChange(grafanaDS, [query]);\n\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.UPLOAD_FILE,\n src: analyticsInteractionSrc,\n });\n\n if (fileRejections.length < 1) {\n onDismiss();\n }\n });\n\n // Built-in data sources used twice because of mobile layout adjustments\n // In movile the list is appended to the bottom of the DS list\n const BuiltInList = ({ className }: { className?: string }) => {\n return (\n <BuiltInDataSourceList\n className={className}\n onChange={onChangeDataSource}\n current={current}\n filter={filter}\n variables={variables}\n tracing={tracing}\n metrics={metrics}\n type={type}\n annotations={annotations}\n alerting={alerting}\n pluginId={pluginId}\n logs={logs}\n dashboard={dashboard}\n mixed={mixed}\n />\n );\n };\n\n return (\n <Modal\n title={t('data-source-picker.modal.title', 'Select data source')}\n closeOnEscape={true}\n closeOnBackdropClick={true}\n isOpen={true}\n className={styles.modal}\n contentClassName={styles.modalContent}\n onClickBackdrop={onDismissModal}\n onDismiss={onDismissModal}\n >\n <div className={styles.leftColumn}>\n <Input\n type=\"search\"\n autoFocus\n className={styles.searchInput}\n value={search}\n prefix={<Icon name=\"search\" />}\n placeholder={t('data-source-picker.modal.input-placeholder', 'Select data source')}\n onChange={(e) => {\n setSearch(e.currentTarget.value);\n reportSearchUsageOnce();\n }}\n />\n <ScrollContainer>\n <DataSourceList\n onChange={onChangeDataSource}\n current={current}\n onClickEmptyStateCTA={() =>\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONFIG_NEW_DS_EMPTY_STATE,\n src: analyticsInteractionSrc,\n })\n }\n filter={(ds) => (filter ? filter?.(ds) : true) && matchDataSourceWithSearch(ds, search) && !ds.meta.builtIn}\n variables={variables}\n tracing={tracing}\n metrics={metrics}\n type={type}\n annotations={annotations}\n alerting={alerting}\n pluginId={pluginId}\n logs={logs}\n dashboard={dashboard}\n mixed={mixed}\n dataSources={dataSources}\n />\n <BuiltInList className={styles.appendBuiltInDataSourcesList} />\n </ScrollContainer>\n </div>\n <div className={styles.rightColumn}>\n <div className={styles.builtInDataSources}>\n <div className={styles.builtInDataSourcesList}>\n <ScrollContainer>\n <BuiltInList />\n </ScrollContainer>\n </div>\n {uploadFile && config.featureToggles.editPanelCSVDragAndDrop && (\n <FileDropzone\n readAs=\"readAsArrayBuffer\"\n fileListRenderer={() => undefined}\n options={{\n maxSize: maxFileSize,\n multiple: false,\n accept: acceptedFiles,\n onDrop: onFileDrop,\n }}\n >\n <FileDropzoneDefaultChildren />\n </FileDropzone>\n )}\n </div>\n <div className={styles.newDSSection}>\n <span className={styles.newDSDescription}>\n <Trans i18nKey=\"data-source-picker.modal.configure-new-data-source\">\n Open a new tab and configure a data source\n </Trans>\n </span>\n <AddNewDataSourceButton\n variant=\"secondary\"\n onClick={() => {\n reportInteraction(INTERACTION_EVENT_NAME, {\n item: INTERACTION_ITEM.CONFIG_NEW_DS,\n src: analyticsInteractionSrc,\n });\n onDismiss();\n }}\n />\n </div>\n </div>\n </Modal>\n );\n}\n\nfunction getDataSourceModalStyles(theme: GrafanaTheme2) {\n return {\n modal: css({\n width: '80%',\n maxWidth: '1200px',\n minHeight: '80%',\n\n [theme.breakpoints.down('md')]: {\n width: '100%',\n },\n }),\n modalContent: css({\n display: 'flex',\n flexDirection: 'row',\n flex: 1,\n\n [theme.breakpoints.down('md')]: {\n flexDirection: 'column',\n },\n }),\n leftColumn: css({\n display: 'flex',\n flexDirection: 'column',\n width: '50%',\n maxHeight: '100%',\n paddingRight: theme.spacing(4),\n borderRight: `1px solid ${theme.colors.border.weak}`,\n\n [theme.breakpoints.down('md')]: {\n width: '100%',\n borderRight: 0,\n paddingRight: 0,\n flex: 1,\n overflowY: 'auto',\n },\n }),\n rightColumn: css({\n display: 'flex',\n flexDirection: 'column',\n width: '50%',\n minHeight: '100%',\n justifyItems: 'space-evenly',\n alignItems: 'stretch',\n paddingLeft: theme.spacing(4),\n\n [theme.breakpoints.down('md')]: {\n width: '100%',\n paddingLeft: 0,\n flexShrink: 0,\n },\n }),\n builtInDataSources: css({\n flex: '1 1',\n\n [theme.breakpoints.down('md')]: {\n display: 'none',\n },\n }),\n builtInDataSourcesList: css({\n [theme.breakpoints.down('md')]: {\n display: 'none',\n marginBottom: 0,\n },\n\n marginBottom: theme.spacing(4),\n }),\n appendBuiltInDataSourcesList: css({\n [theme.breakpoints.up('md')]: {\n display: 'none',\n },\n }),\n newDSSection: css({\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingTop: theme.spacing(1),\n }),\n newDSDescription: css({\n flex: '1 0',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n color: theme.colors.text.secondary,\n [theme.breakpoints.down('sm')]: {\n visibility: 'hidden',\n },\n }),\n searchInput: css({\n width: '100%',\n minHeight: '32px',\n marginBottom: theme.spacing(1),\n }),\n };\n}\n","import { useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder } from '@grafana/ui';\n\nimport { alertRuleApi } from '../../api/alertRuleApi';\n\nimport { FileExportPreview } from './FileExportPreview';\nimport { GrafanaExportDrawer } from './GrafanaExportDrawer';\nimport { ExportFormats, allGrafanaExportProviders } from './providers';\ninterface GrafanaPoliciesPreviewProps {\n exportFormat: ExportFormats;\n onClose: () => void;\n}\n\nconst GrafanaPoliciesExporterPreview = ({ exportFormat, onClose }: GrafanaPoliciesPreviewProps) => {\n const { currentData: policiesDefinition = '', isFetching } = alertRuleApi.useExportPoliciesQuery({\n format: exportFormat,\n });\n\n const downloadFileName = `policies-${new Date().getTime()}`;\n\n if (isFetching) {\n return <LoadingPlaceholder text={t('alerting.grafana-policies-exporter-preview.text-loading', 'Loading....')} />;\n }\n\n return (\n <FileExportPreview\n format={exportFormat}\n textDefinition={policiesDefinition}\n downloadFileName={downloadFileName}\n onClose={onClose}\n />\n );\n};\n\ninterface GrafanaPoliciesExporterProps {\n onClose: () => void;\n}\n\nexport const GrafanaPoliciesExporter = ({ onClose }: GrafanaPoliciesExporterProps) => {\n const [activeTab, setActiveTab] = useState<ExportFormats>('yaml');\n\n return (\n <GrafanaExportDrawer\n activeTab={activeTab}\n onTabChange={setActiveTab}\n onClose={onClose}\n formatProviders={Object.values(allGrafanaExportProviders)}\n >\n <GrafanaPoliciesExporterPreview exportFormat={activeTab} onClose={onClose} />\n </GrafanaExportDrawer>\n );\n};\n","import { css } from '@emotion/css';\nimport { isArray, sumBy, uniqueId } from 'lodash';\nimport pluralize from 'pluralize';\nimport * as React from 'react';\nimport { FC, Fragment, ReactNode, useState } from 'react';\nimport { useToggle } from 'react-use';\n\nimport { AlertLabel, getInheritedProperties } from '@grafana/alerting';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport {\n Badge,\n Button,\n Dropdown,\n Icon,\n IconButton,\n Menu,\n Stack,\n Text,\n TextLink,\n Tooltip,\n getTagColorsFromName,\n useStyles2,\n} from '@grafana/ui';\nimport ConditionalWrap from 'app/features/alerting/unified/components/ConditionalWrap';\nimport MoreButton from 'app/features/alerting/unified/components/MoreButton';\nimport { PrimaryText } from 'app/features/alerting/unified/components/common/TextVariants';\nimport { ContactPointReceiverSummary } from 'app/features/alerting/unified/components/contact-points/ContactPoint';\nimport { ReceiversState } from 'app/features/alerting/unified/types/alerting';\nimport {\n AlertmanagerGroup,\n MatcherOperator,\n ObjectMatcher,\n Receiver,\n RouteWithID,\n} from 'app/plugins/datasource/alertmanager/types';\n\nimport { AlertmanagerAction, useAlertmanagerAbilities, useAlertmanagerAbility } from '../../hooks/useAbilities';\nimport { getAmMatcherFormatter } from '../../utils/alertmanager';\nimport { MatcherFormatter, normalizeMatchers } from '../../utils/matchers';\nimport { createContactPointLink, createContactPointSearchLink, createMuteTimingLink } from '../../utils/misc';\nimport { routeAdapter } from '../../utils/routeAdapter';\nimport { InsertPosition } from '../../utils/routeTree';\nimport { Authorize } from '../Authorize';\nimport { PopupCard } from '../HoverCard';\nimport { MetaText } from '../MetaText';\nimport { ProvisioningBadge } from '../Provisioning';\nimport { Spacer } from '../Spacer';\nimport { GrafanaPoliciesExporter } from '../export/GrafanaPoliciesExporter';\n\nimport { Matchers } from './Matchers';\nimport { RoutesMatchingFilters } from './NotificationPoliciesList';\nimport { TimingOptions } from './timingOptions';\n\nconst POLICIES_PER_PAGE = 20;\n\ntype InheritableProperties = ReturnType<typeof getInheritedProperties>;\n\ninterface PolicyComponentProps {\n receivers?: Receiver[];\n contactPointsState?: ReceiversState;\n readOnly?: boolean;\n provisioned?: boolean;\n inheritedProperties?: InheritableProperties;\n routesMatchingFilters?: RoutesMatchingFilters;\n\n matchingInstancesPreview?: {\n groupsMap?: Map<string, AlertmanagerGroup[]>;\n enabled: boolean;\n };\n\n currentRoute: RouteWithID;\n alertManagerSourceName: string;\n onEditPolicy: (route: RouteWithID, isDefault?: boolean, isAutogenerated?: boolean) => void;\n onAddPolicy: (route: RouteWithID, position: InsertPosition) => void;\n onDeletePolicy: (route: RouteWithID) => void;\n onShowAlertInstances: (\n alertGroups: AlertmanagerGroup[],\n matchers?: ObjectMatcher[],\n formatter?: MatcherFormatter\n ) => void;\n isAutoGenerated?: boolean;\n isDefaultPolicy?: boolean;\n}\n\nconst Policy = (props: PolicyComponentProps) => {\n const {\n receivers = [],\n contactPointsState,\n readOnly = false,\n provisioned = false,\n alertManagerSourceName,\n currentRoute,\n inheritedProperties,\n routesMatchingFilters = {\n filtersApplied: false,\n matchedRoutesWithPath: new Map<RouteWithID, RouteWithID[]>(),\n },\n matchingInstancesPreview = { enabled: false },\n onEditPolicy,\n onAddPolicy,\n onDeletePolicy,\n onShowAlertInstances,\n isAutoGenerated = false,\n isDefaultPolicy = false,\n } = props;\n\n const styles = useStyles2(getStyles);\n\n const contactPoint = currentRoute.receiver;\n const continueMatching = currentRoute.continue ?? false;\n\n const matchers = normalizeMatchers(currentRoute);\n const hasMatchers = Boolean(matchers && matchers.length);\n\n const { filtersApplied, matchedRoutesWithPath } = routesMatchingFilters;\n const matchedRoutes = Array.from(matchedRoutesWithPath.keys());\n\n // check if this route matches the filters\n const hasFocus = filtersApplied && matchedRoutes.some((route) => route.id === currentRoute.id);\n\n // check if this route belongs to a path that matches the filters\n const routesPath = Array.from(matchedRoutesWithPath.values()).flat();\n const belongsToMatchPath = routesPath.some((route: RouteWithID) => route.id === currentRoute.id);\n\n // gather errors here\n const errors: ReactNode[] = [];\n\n // if the route has no matchers, is not the default policy (that one has none) and it does not continue\n // then we should warn the user that it's a suspicious setup\n const showMatchesAllLabelsWarning = !hasMatchers && !isDefaultPolicy && !continueMatching;\n\n // if the receiver / contact point has any errors show it on the policy\n const actualContactPoint = contactPoint ?? inheritedProperties?.receiver ?? '';\n const contactPointErrors = contactPointsState ? getContactPointErrors(actualContactPoint, contactPointsState) : [];\n\n const allChildPolicies = currentRoute.routes ?? [];\n\n // filter child policies that match\n const childPolicies = filtersApplied\n ? // filter by the ones that belong to the path that matches the filters\n allChildPolicies.filter((policy) => routesPath.some((route: RouteWithID) => route.id === policy.id))\n : allChildPolicies;\n\n const hasChildPolicies = childPolicies.length > 0;\n\n const [showExportDrawer, toggleShowExportDrawer] = useToggle(false);\n const matchingAlertGroups = matchingInstancesPreview?.groupsMap?.get(currentRoute.id);\n\n // sum all alert instances for all groups we're handling\n const numberOfAlertInstances = matchingAlertGroups\n ? sumBy(matchingAlertGroups, (group) => group.alerts.length)\n : undefined;\n\n // simplified routing permissions\n const [isSupportedToSeeAutogeneratedChunk, isAllowedToSeeAutogeneratedChunk] = useAlertmanagerAbility(\n AlertmanagerAction.ViewAutogeneratedPolicyTree\n );\n\n // we collapse the auto-generated policies by default\n const isAutogeneratedPolicyRoot = isAutoGeneratedRoot(currentRoute);\n const [showPolicyChildren, togglePolicyChildren] = useToggle(isAutogeneratedPolicyRoot ? false : true);\n\n const groupBy = currentRoute.group_by;\n const muteTimings = currentRoute.mute_time_intervals ?? [];\n const activeTimings = currentRoute.active_time_intervals ?? [];\n\n const timingOptions: TimingOptions = {\n group_wait: currentRoute.group_wait,\n group_interval: currentRoute.group_interval,\n repeat_interval: currentRoute.repeat_interval,\n };\n\n contactPointErrors.forEach((error) => {\n errors.push(error);\n });\n\n const [visibleChildPolicies, setVisibleChildPolicies] = useState(POLICIES_PER_PAGE);\n\n // build the menu actions for our policy\n const dropdownMenuActions: JSX.Element[] = useCreateDropdownMenuActions(\n isAutoGenerated,\n isDefaultPolicy,\n provisioned,\n onEditPolicy,\n currentRoute,\n toggleShowExportDrawer,\n onDeletePolicy\n );\n\n // check if this policy should be visible. If it's autogenerated and the user is not allowed to see autogenerated\n // policies then we should not show it. Same if the user is not supported to see autogenerated policies.\n const hideCurrentPolicy =\n isAutoGenerated && (!isAllowedToSeeAutogeneratedChunk || !isSupportedToSeeAutogeneratedChunk);\n const hideCurrentPolicyForFilters = filtersApplied && !belongsToMatchPath;\n\n if (hideCurrentPolicy || hideCurrentPolicyForFilters) {\n return null;\n }\n\n const isImmutablePolicy = isDefaultPolicy || isAutogeneratedPolicyRoot;\n // TODO dead branch detection, warnings for all sort of configs that won't work or will never be activated\n\n const childPoliciesBelongingToMatchPath = childPolicies.filter((child) =>\n routesPath.some((route: RouteWithID) => route.id === child.id)\n );\n\n // child policies to render are the ones that belong to the path that matches the filters\n const childPoliciesToRender = filtersApplied ? childPoliciesBelongingToMatchPath : childPolicies;\n const pageOfChildren = childPoliciesToRender.slice(0, visibleChildPolicies);\n\n const moreCount = childPoliciesToRender.length - pageOfChildren.length;\n const showMore = moreCount > 0;\n\n return (\n <Stack direction=\"column\" gap={1.5}>\n <div\n className={styles.policyWrapper(hasFocus)}\n data-testid={isDefaultPolicy ? 'am-root-route-container' : 'am-route-container'}\n >\n {/* continueMatching and showMatchesAllLabelsWarning are mutually exclusive so the icons can't overlap */}\n {continueMatching && <ContinueMatchingIndicator />}\n {showMatchesAllLabelsWarning && <AllMatchesIndicator />}\n\n <div className={styles.policyItemWrapper}>\n <Stack direction=\"column\" gap={1}>\n {/* Matchers and actions */}\n <div>\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n {hasChildPolicies ? (\n <IconButton\n name={showPolicyChildren ? 'angle-down' : 'angle-right'}\n onClick={togglePolicyChildren}\n aria-label={\n showPolicyChildren\n ? t('alerting.policies.aria-label-collapse', 'Collapse')\n : t('alerting.policies.aria-label-expand', 'Expand')\n }\n />\n ) : null}\n {isImmutablePolicy && (\n <>{isAutogeneratedPolicyRoot ? <AutogeneratedRootIndicator /> : <DefaultPolicyIndicator />}</>\n )}\n {!isImmutablePolicy && (\n <>\n {hasMatchers ? (\n <Matchers matchers={matchers ?? []} formatter={getAmMatcherFormatter(alertManagerSourceName)} />\n ) : (\n <span className={styles.metadata}>\n <Trans i18nKey=\"alerting.policies.no-matchers\">No matchers</Trans>\n </span>\n )}\n </>\n )}\n <Spacer />\n {/* TODO maybe we should move errors to the gutter instead? */}\n {errors.length > 0 && <Errors errors={errors} />}\n {provisioned && <ProvisioningBadge />}\n <Stack direction=\"row\" gap={0.5}>\n {!isAutoGenerated && !readOnly && (\n <Authorize actions={[AlertmanagerAction.CreateNotificationPolicy]}>\n <ConditionalWrap shouldWrap={provisioned} wrap={ProvisionedTooltip}>\n {isDefaultPolicy ? (\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n size=\"sm\"\n disabled={provisioned}\n type=\"button\"\n onClick={() => onAddPolicy(currentRoute, 'child')}\n >\n <Trans i18nKey=\"alerting.policies.new-child\">New child policy</Trans>\n </Button>\n ) : (\n <Dropdown\n overlay={\n <Menu>\n <Menu.Item\n label={t('alerting.policy.label-new-sibling-above', 'New sibling above')}\n icon=\"arrow-up\"\n onClick={() => onAddPolicy(currentRoute, 'above')}\n />\n <Menu.Item\n label={t('alerting.policy.label-new-sibling-below', 'New sibling below')}\n icon=\"arrow-down\"\n onClick={() => onAddPolicy(currentRoute, 'below')}\n />\n <Menu.Divider />\n <Menu.Item\n label={t('alerting.policy.label-new-child-policy', 'New child policy')}\n icon=\"plus\"\n onClick={() => onAddPolicy(currentRoute, 'child')}\n />\n </Menu>\n }\n >\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={provisioned}\n icon=\"angle-down\"\n type=\"button\"\n >\n <Trans i18nKey=\"alerting.policies.new-policy\">Add new policy</Trans>\n </Button>\n </Dropdown>\n )}\n </ConditionalWrap>\n </Authorize>\n )}\n {dropdownMenuActions.length > 0 && (\n <Dropdown overlay={<Menu>{dropdownMenuActions}</Menu>}>\n <MoreButton\n aria-label={\n isDefaultPolicy\n ? t('alerting.policies.aria-label-more-default', 'more actions for default policy')\n : t('alerting.policies.aria-label-more', 'more actions for policy')\n }\n data-testid=\"more-actions\"\n />\n </Dropdown>\n )}\n </Stack>\n </Stack>\n </div>\n\n {/* Metadata row */}\n <MetadataRow\n matchingInstancesPreview={matchingInstancesPreview}\n numberOfAlertInstances={numberOfAlertInstances}\n contactPoint={contactPoint ?? undefined}\n groupBy={groupBy}\n muteTimings={muteTimings}\n activeTimings={activeTimings}\n timingOptions={timingOptions}\n inheritedProperties={inheritedProperties}\n alertManagerSourceName={alertManagerSourceName}\n receivers={receivers}\n matchingAlertGroups={matchingAlertGroups}\n matchers={matchers}\n isDefaultPolicy={isDefaultPolicy}\n onShowAlertInstances={onShowAlertInstances}\n />\n </Stack>\n </div>\n </div>\n <div className={styles.childPolicies}>\n {showPolicyChildren && (\n <>\n {pageOfChildren.map((child) => {\n const childInheritedProperties = getInheritedProperties(\n routeAdapter.toPackage(currentRoute),\n routeAdapter.toPackage(child),\n inheritedProperties\n );\n // This child is autogenerated if it's the autogenerated root or if it's a child of an autogenerated policy.\n const isThisChildAutoGenerated = isAutoGeneratedRoot(child) || isAutoGenerated;\n /* pass the \"readOnly\" prop from the parent, because for any child policy , if its parent it's not editable,\n then the child policy should not be editable either */\n const isThisChildReadOnly = readOnly || provisioned || isAutoGenerated;\n\n return (\n <Policy\n key={child.id}\n currentRoute={child}\n receivers={receivers}\n contactPointsState={contactPointsState}\n readOnly={isThisChildReadOnly}\n inheritedProperties={childInheritedProperties}\n onAddPolicy={onAddPolicy}\n onEditPolicy={onEditPolicy}\n onDeletePolicy={onDeletePolicy}\n onShowAlertInstances={onShowAlertInstances}\n alertManagerSourceName={alertManagerSourceName}\n routesMatchingFilters={routesMatchingFilters}\n matchingInstancesPreview={matchingInstancesPreview}\n isAutoGenerated={isThisChildAutoGenerated}\n provisioned={provisioned}\n />\n );\n })}\n {showMore && (\n <Button\n size=\"sm\"\n icon=\"angle-down\"\n variant=\"secondary\"\n className={styles.moreButtons}\n onClick={() => setVisibleChildPolicies(visibleChildPolicies + POLICIES_PER_PAGE)}\n >\n <Trans i18nKey=\"alerting.policies.n-more-policies\" count={moreCount}>\n {{ count: moreCount }} additional policies\n </Trans>\n </Button>\n )}\n </>\n )}\n </div>\n {showExportDrawer && <GrafanaPoliciesExporter onClose={toggleShowExportDrawer} />}\n </Stack>\n );\n};\n\ninterface MetadataRowProps {\n matchingInstancesPreview: { groupsMap?: Map<string, AlertmanagerGroup[]>; enabled: boolean };\n numberOfAlertInstances?: number;\n contactPoint?: string;\n groupBy?: string[];\n muteTimings?: string[];\n activeTimings?: string[];\n timingOptions?: TimingOptions;\n inheritedProperties?: Partial<InheritableProperties>;\n alertManagerSourceName: string;\n receivers: Receiver[];\n matchingAlertGroups?: AlertmanagerGroup[];\n matchers?: ObjectMatcher[];\n isDefaultPolicy: boolean;\n onShowAlertInstances: (\n alertGroups: AlertmanagerGroup[],\n matchers?: ObjectMatcher[],\n formatter?: MatcherFormatter\n ) => void;\n}\n\nfunction MetadataRow({\n numberOfAlertInstances,\n isDefaultPolicy,\n timingOptions,\n groupBy,\n muteTimings = [],\n activeTimings = [],\n matchingInstancesPreview,\n inheritedProperties,\n matchingAlertGroups,\n onShowAlertInstances,\n matchers,\n contactPoint,\n alertManagerSourceName,\n receivers,\n}: MetadataRowProps) {\n const styles = useStyles2(getStyles);\n\n const inheritedGrouping = inheritedProperties && inheritedProperties.group_by;\n const hasInheritedProperties = inheritedProperties && Object.keys(inheritedProperties).length > 0;\n\n const noGrouping = isArray(groupBy) && groupBy[0] === '...';\n const customGrouping = !noGrouping && isArray(groupBy) && groupBy.length > 0;\n const singleGroup = isDefaultPolicy && isArray(groupBy) && groupBy.length === 0;\n\n const hasMuteTimings = Boolean(muteTimings.length);\n const hasActiveTimings = Boolean(activeTimings.length);\n\n return (\n <div className={styles.metadataRow}>\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n {matchingInstancesPreview.enabled && (\n <MetaText\n icon=\"layers-alt\"\n onClick={() => {\n matchingAlertGroups &&\n onShowAlertInstances(matchingAlertGroups, matchers, getAmMatcherFormatter(alertManagerSourceName));\n }}\n data-testid=\"matching-instances\"\n >\n <Text color=\"primary\">{numberOfAlertInstances ?? '-'}</Text>\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.n-instances\" count={numberOfAlertInstances ?? 0}>\n instance\n </Trans>\n </span>\n </MetaText>\n )}\n {contactPoint && (\n <MetaText icon=\"at\" data-testid=\"contact-point\">\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.delivered-to\">Delivered to</Trans>{' '}\n </span>\n <ContactPointsHoverDetails\n alertManagerSourceName={alertManagerSourceName}\n receivers={receivers}\n contactPoint={contactPoint}\n />\n </MetaText>\n )}\n {!inheritedGrouping && (\n <>\n {customGrouping && (\n <MetaText icon=\"layer-group\" data-testid=\"grouping\">\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.grouped-by\">Grouped by</Trans>{' '}\n </span>\n <Text color=\"primary\">{groupBy.join(', ')}</Text>\n </MetaText>\n )}\n {singleGroup && (\n <MetaText icon=\"layer-group\">\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.grouping.single-group\">Single group</Trans>\n </span>\n </MetaText>\n )}\n {noGrouping && (\n <MetaText icon=\"layer-group\">\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.grouping.none\">Not grouping</Trans>\n </span>\n </MetaText>\n )}\n </>\n )}\n {hasMuteTimings && (\n <MetaText icon=\"calendar-slash\" data-testid=\"mute-timings\">\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.mute-time\">Muted when</Trans>{' '}\n </span>\n <TimeIntervals timings={muteTimings} alertManagerSourceName={alertManagerSourceName} />\n </MetaText>\n )}\n {hasActiveTimings && (\n <MetaText icon=\"calendar-alt\" data-testid=\"active-timings\">\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.active-time\">Active when</Trans>{' '}\n </span>\n <TimeIntervals timings={activeTimings} alertManagerSourceName={alertManagerSourceName} />\n </MetaText>\n )}\n {timingOptions && <TimingOptionsMeta timingOptions={timingOptions} />}\n {hasInheritedProperties && (\n <MetaText icon=\"corner-down-right-alt\" data-testid=\"inherited-properties\">\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.inherited\">Inherited</Trans>\n </span>\n <InheritedProperties properties={inheritedProperties} />\n </MetaText>\n )}\n </Stack>\n </div>\n );\n}\n\nexport const useCreateDropdownMenuActions = (\n isAutoGenerated: boolean,\n isDefaultPolicy: boolean,\n provisioned: boolean,\n onEditPolicy: (route: RouteWithID, isDefault?: boolean, readOnly?: boolean) => void,\n currentRoute: RouteWithID,\n toggleShowExportDrawer: () => void,\n onDeletePolicy: (route: RouteWithID) => void\n) => {\n const [\n [updatePoliciesSupported, updatePoliciesAllowed],\n [deletePolicySupported, deletePolicyAllowed],\n [exportPoliciesSupported, exportPoliciesAllowed],\n ] = useAlertmanagerAbilities([\n AlertmanagerAction.UpdateNotificationPolicyTree,\n AlertmanagerAction.DeleteNotificationPolicy,\n AlertmanagerAction.ExportNotificationPolicies,\n ]);\n\n const dropdownMenuActions = [];\n const showExportAction = exportPoliciesAllowed && exportPoliciesSupported && isDefaultPolicy && !isAutoGenerated;\n const showEditAction = updatePoliciesSupported && updatePoliciesAllowed;\n const showDeleteAction = deletePolicySupported && deletePolicyAllowed && !isDefaultPolicy && !isAutoGenerated;\n\n if (showEditAction) {\n dropdownMenuActions.push(\n <Fragment key=\"edit-policy\">\n <ConditionalWrap shouldWrap={provisioned} wrap={ProvisionedTooltip}>\n <Menu.Item\n icon=\"edit\"\n disabled={provisioned || isAutoGenerated}\n label={t('alerting.use-create-dropdown-menu-actions.label-edit', 'Edit')}\n onClick={() => onEditPolicy(currentRoute, isDefaultPolicy)}\n />\n </ConditionalWrap>\n </Fragment>\n );\n }\n\n if (showExportAction) {\n dropdownMenuActions.push(\n <Menu.Item\n key=\"export-policy\"\n icon=\"download-alt\"\n label={t('alerting.use-create-dropdown-menu-actions.label-export', 'Export')}\n onClick={toggleShowExportDrawer}\n />\n );\n }\n\n if (showDeleteAction) {\n dropdownMenuActions.push(\n <Fragment key=\"delete-policy\">\n <Menu.Divider />\n <ConditionalWrap shouldWrap={provisioned} wrap={ProvisionedTooltip}>\n <Menu.Item\n destructive\n icon=\"trash-alt\"\n disabled={provisioned || isAutoGenerated}\n label={t('alerting.use-create-dropdown-menu-actions.label-delete', 'Delete')}\n onClick={() => onDeletePolicy(currentRoute)}\n />\n </ConditionalWrap>\n </Fragment>\n );\n }\n return dropdownMenuActions;\n};\n\nexport const AUTOGENERATED_ROOT_LABEL_NAME = '__grafana_autogenerated__';\n\nexport function isAutoGeneratedRoot(route: RouteWithID) {\n if (!route.object_matchers) {\n return false;\n }\n return (\n route.object_matchers.some((objectMatcher) => {\n return (\n objectMatcher[0] === AUTOGENERATED_ROOT_LABEL_NAME &&\n objectMatcher[1] === MatcherOperator.equal &&\n objectMatcher[2] === 'true'\n );\n }) ?? false\n );\n}\n\nconst ProvisionedTooltip = (children: ReactNode) => {\n return (\n <Tooltip\n content={t(\n 'alerting.provisioned-tooltip.content-provisioned-items-cannot-edited',\n 'Provisioned items cannot be edited in the UI'\n )}\n placement=\"top\"\n >\n <span>{children}</span>\n </Tooltip>\n );\n};\n\nconst Errors: FC<{ errors: React.ReactNode[] }> = ({ errors }) => (\n <PopupCard\n arrow\n placement=\"top\"\n content={\n <Stack direction=\"column\" gap={0.5}>\n {errors.map((error) => (\n <Fragment key={uniqueId()}>{error}</Fragment>\n ))}\n </Stack>\n }\n >\n <span>\n <Badge icon=\"exclamation-circle\" color=\"red\" text={pluralize('error', errors.length, true)} />\n </span>\n </PopupCard>\n);\n\nconst ContinueMatchingIndicator: FC = () => {\n const styles = useStyles2(getStyles);\n\n return (\n <Tooltip\n placement=\"top\"\n content={t(\n 'alerting.continue-matching-indicator.content-route-continue-matching-other-policies',\n 'This route will continue matching other policies'\n )}\n >\n <div className={styles.gutterIcon} data-testid=\"continue-matching\">\n <Icon name=\"arrow-down\" />\n </div>\n </Tooltip>\n );\n};\n\nconst AllMatchesIndicator: FC = () => {\n const styles = useStyles2(getStyles);\n\n return (\n <Tooltip\n placement=\"top\"\n content={t(\n 'alerting.all-matches-indicator.content-this-policy-matches-all-labels',\n 'This policy matches all labels'\n )}\n >\n <div className={styles.gutterIcon} data-testid=\"matches-all\">\n <Icon name=\"exclamation-triangle\" />\n </div>\n </Tooltip>\n );\n};\n\nexport function DefaultPolicyIndicator() {\n const styles = useStyles2(getStyles);\n return (\n <>\n <Text element=\"h2\" variant=\"body\" weight=\"medium\">\n <Trans i18nKey=\"alerting.policies.default-policy.title\">Default policy</Trans>\n </Text>\n <span className={styles.metadata}>\n <Trans i18nKey=\"alerting.policies.default-policy.description\">\n All alert instances will be handled by the default policy if no other matching policies are found.\n </Trans>\n </span>\n </>\n );\n}\n\nfunction AutogeneratedRootIndicator() {\n return (\n <Text element=\"h3\" variant=\"body\" weight=\"medium\">\n <Trans i18nKey=\"alerting.policies.generated-policies\">Auto-generated policies</Trans>\n </Text>\n );\n}\n\nconst InheritedProperties: FC<{ properties: InheritableProperties }> = ({ properties }) => (\n <PopupCard\n arrow\n placement=\"top\"\n content={\n <Stack direction=\"row\" gap={0.5}>\n {Object.entries(properties).map(([key, value]) => {\n if (!value) {\n return null;\n }\n\n return (\n <AlertLabel\n key={key}\n labelKey={routePropertyToLabel(key)}\n value={String(routePropertyToValue(key, value))}\n />\n );\n })}\n </Stack>\n }\n >\n <div>\n <Text color=\"primary\">{pluralize('property', Object.keys(properties).length, true)}</Text>\n </div>\n </PopupCard>\n);\n\nconst TimeIntervals: FC<{ timings: string[]; alertManagerSourceName: string }> = ({\n timings,\n alertManagerSourceName,\n}) => {\n const [, canSeeMuteTimings] = useAlertmanagerAbility(AlertmanagerAction.ViewTimeInterval);\n /* TODO make a better mute timing overview, allow combining multiple in to one overview */\n /*\n <HoverCard\n arrow\n placement=\"top\"\n header={<MetaText icon=\"calendar-slash\">Mute Timings</MetaText>}\n content={\n // TODO show a combined view of all mute timings here, combining the weekdays, years, months, etc\n <Stack direction=\"row\" gap={0.5}>\n <Label label=\"Weekdays\" value=\"Saturday and Sunday\" />\n </Stack>\n }\n >\n <div>\n <Strong>{muteTimings.join(', ')}</Strong>\n </div>\n </HoverCard>\n */\n return (\n <div>\n {timings.map((timing, index) => {\n const Wrapper = canSeeMuteTimings ? TextLink : Text;\n return (\n <Fragment key={timing}>\n <Wrapper\n href={createMuteTimingLink(timing, alertManagerSourceName)}\n color={canSeeMuteTimings ? 'primary' : 'secondary'}\n variant=\"bodySmall\"\n inline={canSeeMuteTimings ? false : undefined}\n >\n {timing}\n </Wrapper>\n {index < timings.length - 1 && ', '}\n </Fragment>\n );\n })}\n </div>\n );\n};\n\ninterface TimingOptionsMetaProps {\n timingOptions: TimingOptions;\n}\nexport const TimingOptionsMeta = ({ timingOptions }: TimingOptionsMetaProps) => {\n const groupWait = timingOptions.group_wait;\n const groupInterval = timingOptions.group_interval;\n const repeatInterval = timingOptions.repeat_interval;\n\n // we don't have any timing options to show – we're inheriting everything from the parent\n // and those show up in a separate \"inherited properties\" component\n if (!groupWait && !groupInterval && !repeatInterval) {\n return null;\n }\n\n const metaOptions: ReactNode[] = [];\n\n if (groupWait) {\n metaOptions.push(\n <Tooltip\n placement=\"top\"\n content={t(\n 'alerting.policies.metadata.timingOptions.groupWait.description',\n 'How long to initially wait to send a notification for a group of alert instances.'\n )}\n >\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.timingOptions.groupWait.label\">\n Wait <PrimaryText content={groupWait} /> to group instances\n </Trans>\n </span>\n </Tooltip>\n );\n }\n\n if (groupInterval) {\n metaOptions.push(\n <Tooltip\n placement=\"top\"\n content={t(\n 'alerting.policies.metadata.timingOptions.groupInterval.description',\n 'How long to wait before sending a notification about new alerts that are added to a group of alerts for which an initial notification has already been sent.'\n )}\n >\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.timingOptions.groupInterval.label\">\n Wait <PrimaryText content={groupInterval} /> before sending updates\n </Trans>\n </span>\n </Tooltip>\n );\n }\n\n if (repeatInterval) {\n metaOptions.push(\n <Tooltip\n placement=\"top\"\n content={t(\n 'alerting.policies.metadata.timingOptions.repeatInterval.description',\n 'How often notifications are sent if the group of alerts has not changed since the last notification.'\n )}\n >\n <span>\n <Trans i18nKey=\"alerting.policies.metadata.timingOptions.repeatInterval.label\">\n Repeated every <PrimaryText content={repeatInterval} />\n </Trans>\n </span>\n </Tooltip>\n );\n }\n\n return (\n <MetaText icon=\"hourglass\" data-testid=\"timing-options\">\n {metaOptions.map((meta, index) => (\n <span key={uniqueId()}>\n {meta}\n {index < metaOptions.length - 1 && ' · '}\n </span>\n ))}\n </MetaText>\n );\n};\n\ninterface ContactPointDetailsProps {\n alertManagerSourceName: string;\n contactPoint: string;\n receivers: Receiver[];\n}\n\nconst ContactPointsHoverDetails: FC<ContactPointDetailsProps> = ({\n alertManagerSourceName,\n contactPoint,\n receivers,\n}) => {\n const details = receivers.find((receiver) => receiver.name === contactPoint);\n if (!details) {\n // If we can't find details, then it's possible (likely) that the user doesn't have access to this\n // contact point, so we don't try and link to it\n return (\n <Text color=\"secondary\" variant=\"bodySmall\">\n {contactPoint}\n </Text>\n );\n }\n\n const integrations = details.grafana_managed_receiver_configs;\n\n const contactPointLink =\n 'id' in details && details.id\n ? createContactPointLink(details.id, alertManagerSourceName)\n : createContactPointSearchLink(details.name, alertManagerSourceName);\n\n return (\n <PopupCard\n disabled={!integrations}\n arrow\n placement=\"top\"\n header={\n <MetaText icon=\"at\">\n <Text color=\"primary\">{contactPoint}</Text>\n </MetaText>\n }\n key={uniqueId()}\n content={\n <Text variant=\"bodySmall\" color=\"secondary\">\n <ContactPointReceiverSummary receivers={details.grafana_managed_receiver_configs || []} limit={3} />\n </Text>\n }\n >\n <TextLink href={contactPointLink} color=\"primary\" variant=\"bodySmall\" inline={false}>\n {contactPoint}\n </TextLink>\n </PopupCard>\n );\n};\n\nfunction getContactPointErrors(contactPoint: string, contactPointsState: ReceiversState): JSX.Element[] {\n const notifierStates = Object.entries(contactPointsState[contactPoint]?.notifiers ?? []);\n const contactPointErrors = notifierStates.reduce((acc: JSX.Element[] = [], [_, notifierStatuses]) => {\n const notifierErrors = notifierStatuses\n .filter((status) => status.lastNotifyAttemptError)\n .map((status) => (\n <AlertLabel\n icon=\"at\"\n key={uniqueId()}\n value={String(status.lastNotifyAttemptError)}\n labelKey={t('alerting.contact-point-errors.label-contact-point', 'Contact Point › {{name}}', {\n name: status.name,\n })}\n />\n ));\n\n return acc.concat(notifierErrors);\n }, []);\n\n return contactPointErrors;\n}\n\nconst routePropertyToLabel = (key: keyof InheritableProperties | string): string => {\n switch (key) {\n case 'receiver':\n return 'Contact Point';\n case 'group_by':\n return 'Group by';\n case 'group_interval':\n return 'Group interval';\n case 'group_wait':\n return 'Group wait';\n case 'repeat_interval':\n return 'Repeat interval';\n default:\n return key;\n }\n};\n\nconst routePropertyToValue = (\n key: keyof InheritableProperties | string,\n value: string | string[]\n): NonNullable<ReactNode> => {\n const isNotGrouping = key === 'group_by' && Array.isArray(value) && value[0] === '...';\n const isSingleGroup = key === 'group_by' && Array.isArray(value) && value.length === 0;\n\n if (isNotGrouping) {\n return (\n <Text variant=\"bodySmall\" color=\"secondary\">\n <Trans i18nKey=\"alerting.policies.metadata.grouping.none\">Not grouping</Trans>\n </Text>\n );\n }\n\n if (isSingleGroup) {\n return (\n <Text variant=\"bodySmall\" color=\"secondary\">\n <Trans i18nKey=\"alerting.policies.metadata.grouping.single-group\">Single group</Trans>\n </Text>\n );\n }\n\n return Array.isArray(value) ? value.join(', ') : value;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n matcher: (label: string) => {\n const { color, borderColor } = getTagColorsFromName(label);\n\n return {\n wrapper: css({\n color: '#fff',\n background: color,\n padding: `${theme.spacing(0.33)} ${theme.spacing(0.66)}`,\n fontSize: theme.typography.bodySmall.fontSize,\n border: `solid 1px ${borderColor}`,\n borderRadius: theme.shape.radius.default,\n }),\n };\n },\n childPolicies: css({\n marginLeft: theme.spacing(4),\n position: 'relative',\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n height: 'calc(100% - 10px)',\n borderLeft: `solid 1px ${theme.colors.border.weak}`,\n marginTop: 0,\n marginLeft: '-20px',\n },\n }),\n policyItemWrapper: css({\n padding: theme.spacing(1.5),\n }),\n metadataRow: css({\n borderBottomLeftRadius: theme.shape.borderRadius(2),\n borderBottomRightRadius: theme.shape.borderRadius(2),\n }),\n policyWrapper: (hasFocus = false) =>\n css({\n flex: 1,\n position: 'relative',\n background: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n border: `solid 1px ${theme.colors.border.weak}`,\n ...(hasFocus && {\n borderColor: theme.colors.primary.border,\n background: theme.colors.primary.transparent,\n }),\n }),\n metadata: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n }),\n break: css({\n width: '100%',\n height: 0,\n marginBottom: theme.spacing(2),\n }),\n gutterIcon: css({\n position: 'absolute',\n top: 0,\n transform: 'translateY(50%)',\n left: `-${theme.spacing(4)}`,\n color: theme.colors.text.secondary,\n background: theme.colors.background.primary,\n width: '25px',\n height: '25px',\n textAlign: 'center',\n border: `solid 1px ${theme.colors.border.weak}`,\n borderRadius: theme.shape.radius.default,\n padding: 0,\n }),\n moreButtons: css({\n marginTop: theme.spacing(0.5),\n marginBottom: theme.spacing(1.5),\n }),\n});\n\nexport { Policy };\n","import uPlot, { Scale, Range } from 'uplot';\n\nimport { DecimalCount, incrRoundDn, incrRoundUp, isBooleanUnit } from '@grafana/data';\nimport { ScaleOrientation, ScaleDirection, ScaleDistribution, StackingMode } from '@grafana/schema';\n\nimport { PlotConfigBuilder } from '../types';\n\nexport interface ScaleProps {\n scaleKey: string;\n isTime?: boolean;\n auto?: boolean;\n min?: number | null;\n max?: number | null;\n softMin?: number | null;\n softMax?: number | null;\n range?: Scale.Range;\n distribution?: ScaleDistribution;\n orientation: ScaleOrientation;\n direction: ScaleDirection;\n log?: number;\n linearThreshold?: number;\n centeredZero?: boolean;\n decimals?: DecimalCount;\n stackingMode?: StackingMode;\n padMinBy?: number;\n padMaxBy?: number;\n}\n\nexport class UPlotScaleBuilder extends PlotConfigBuilder<ScaleProps, Scale> {\n merge(props: ScaleProps) {\n this.props.min = optMinMax('min', this.props.min, props.min);\n this.props.max = optMinMax('max', this.props.max, props.max);\n }\n\n getConfig(): Scale {\n let {\n isTime,\n auto,\n scaleKey,\n min: hardMin,\n max: hardMax,\n softMin,\n softMax,\n range,\n direction,\n orientation,\n centeredZero,\n decimals,\n stackingMode,\n padMinBy = 0.1,\n padMaxBy = 0.1,\n } = this.props;\n\n if (stackingMode === StackingMode.Percent) {\n if (hardMin == null && softMin == null) {\n softMin = 0;\n }\n\n if (hardMax == null && softMax == null) {\n softMax = 1;\n }\n }\n\n const distr = this.props.distribution;\n\n const distribution = !isTime\n ? {\n distr:\n distr === ScaleDistribution.Symlog\n ? 4\n : distr === ScaleDistribution.Log\n ? 3\n : distr === ScaleDistribution.Ordinal\n ? 2\n : 1,\n log:\n distr === ScaleDistribution.Log || distr === ScaleDistribution.Symlog ? (this.props.log ?? 2) : undefined,\n asinh: distr === ScaleDistribution.Symlog ? (this.props.linearThreshold ?? 1) : undefined,\n }\n : {};\n\n // guard against invalid log scale limits <= 0, or snap to log boundaries\n if (distr === ScaleDistribution.Log) {\n let logBase = this.props.log!;\n let logFn = logBase === 2 ? Math.log2 : Math.log10;\n\n if (hardMin != null) {\n if (hardMin <= 0) {\n hardMin = null;\n } else {\n hardMin = logBase ** Math.floor(logFn(hardMin));\n }\n }\n\n if (hardMax != null) {\n if (hardMax <= 0) {\n hardMax = null;\n } else {\n hardMax = logBase ** Math.ceil(logFn(hardMax));\n }\n }\n\n if (softMin != null) {\n if (softMin <= 0) {\n softMin = null;\n } else {\n softMin = logBase ** Math.floor(logFn(softMin));\n }\n }\n\n if (softMax != null) {\n if (softMax <= 0) {\n softMax = null;\n } else {\n softMax = logBase ** Math.ceil(logFn(softMax));\n }\n }\n }\n /*\n // snap to symlog boundaries\n else if (distr === ScaleDistribution.Symlog) {\n let logBase = this.props.log!;\n let logFn = logBase === 2 ? Math.log2 : Math.log10;\n\n let sign = Math.sign(hardMin);\n\n if (hardMin != null) {\n hardMin = logBase ** Math.floor(logFn(hardMin));\n }\n\n if (hardMax != null) {\n hardMax = logBase ** Math.ceil(logFn(hardMax));\n }\n\n if (softMin != null) {\n softMin = logBase ** Math.floor(logFn(softMin));\n }\n\n if (softMax != null) {\n softMax = logBase ** Math.ceil(logFn(softMax));\n }\n }\n */\n\n // uPlot's default ranging config for both min & max is {pad: 0.1, hard: null, soft: 0, mode: 3}\n let softMinMode: Range.SoftMode = softMin == null ? 3 : 1;\n let softMaxMode: Range.SoftMode = softMax == null ? 3 : 1;\n\n const rangeConfig: Range.Config = {\n min: {\n pad: padMinBy,\n hard: hardMin ?? -Infinity,\n soft: softMin || 0,\n mode: softMinMode,\n },\n max: {\n pad: padMaxBy,\n hard: hardMax ?? Infinity,\n soft: softMax || 0,\n mode: softMaxMode,\n },\n };\n\n let hardMinOnly = softMin == null && hardMin != null;\n let hardMaxOnly = softMax == null && hardMax != null;\n let hasFixedRange = hardMinOnly && hardMaxOnly;\n\n const rangeFn: uPlot.Range.Function = (\n u: uPlot,\n dataMin: number | null,\n dataMax: number | null,\n scaleKey: string\n ) => {\n const scale = u.scales[scaleKey];\n\n let minMax: uPlot.Range.MinMax = [dataMin, dataMax];\n\n // happens when all series on a scale are `show: false`, re-returning nulls will auto-disable axis\n if (!hasFixedRange && dataMin == null && dataMax == null) {\n return minMax;\n }\n\n let logBase = scale.log ?? 10;\n\n if (scale.distr === 1 || scale.distr === 2 || scale.distr === 4) {\n if (centeredZero) {\n let absMin = Math.abs(dataMin!);\n let absMax = Math.abs(dataMax!);\n let max = Math.max(absMin, absMax);\n\n // flat 0\n if (max === 0) {\n max = 80;\n }\n\n dataMin = -max;\n dataMax = max;\n }\n\n if (scale.distr === 4) {\n minMax = uPlot.rangeAsinh(dataMin!, dataMax!, logBase, true);\n } else {\n // @ts-ignore here we may use hardMin / hardMax to make sure any extra padding is computed from a more accurate delta\n minMax = uPlot.rangeNum(hardMinOnly ? hardMin : dataMin, hardMaxOnly ? hardMax : dataMax, rangeConfig);\n }\n } else if (scale.distr === 3) {\n minMax = uPlot.rangeLog(hardMin ?? dataMin!, hardMax ?? dataMax!, logBase, true);\n }\n\n if (decimals === 0) {\n if (scale.distr === 1 || scale.distr === 2) {\n minMax[0] = incrRoundDn(minMax[0]!, 1);\n minMax[1] = incrRoundUp(minMax[1]!, 1);\n }\n // log2 or log10 scale min must be clamped to 1\n else if (scale.distr === 3) {\n let logFn = scale.log === 2 ? Math.log2 : Math.log10;\n\n if (minMax[0]! <= 1) {\n // clamp min\n minMax[0] = 1;\n } else {\n // snap min to nearest mag below\n let minExp = Math.floor(logFn(minMax[0]!));\n minMax[0] = logBase ** minExp;\n }\n\n // snap max to nearest mag above\n let maxExp = Math.ceil(logFn(minMax[1]!));\n minMax[1] = logBase ** maxExp;\n\n // inflate max by mag if same\n if (minMax[0] === minMax[1]) {\n minMax[1] *= logBase;\n }\n }\n // TODO: this should be better. symlog values can be <= 0, but should also be snapped to log2 or log10 boundaries\n // for now we just do same as linear snapping above, so may have non-neat range and ticks at edges\n else if (scale.distr === 4) {\n minMax[0] = incrRoundDn(minMax[0]!, 1);\n minMax[1] = incrRoundUp(minMax[1]!, 1);\n }\n }\n\n if (scale.distr === 1 || scale.distr === 4) {\n // if all we got were hard limits, treat them as static min/max\n if (hardMinOnly) {\n minMax[0] = hardMin!;\n }\n\n if (hardMaxOnly) {\n minMax[1] = hardMax!;\n }\n }\n\n // guard against invalid y ranges\n if (minMax[0]! >= minMax[1]!) {\n minMax[0] = scale.distr === 3 ? 1 : 0;\n minMax[1] = 100;\n }\n\n return minMax;\n };\n\n auto ??= !isTime && !hasFixedRange;\n\n if (isBooleanUnit(scaleKey)) {\n auto = false;\n range = [0, 1];\n }\n\n return {\n [scaleKey]: {\n time: isTime,\n auto,\n range: range ?? rangeFn,\n dir: direction,\n ori: orientation,\n ...distribution,\n },\n };\n }\n}\n\nexport function optMinMax(minmax: 'min' | 'max', a?: number | null, b?: number | null): undefined | number | null {\n const hasA = !(a === undefined || a === null);\n const hasB = !(b === undefined || b === null);\n if (hasA) {\n if (!hasB) {\n return a;\n }\n if (minmax === 'min') {\n return a! < b! ? a : b;\n }\n return a! > b! ? a : b;\n }\n return b;\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\nimport { useLocalStorage } from 'react-use';\nimport { Observable } from 'rxjs';\n\nimport { DataSourceInstanceSettings, DataSourceRef } from '@grafana/data';\nimport { GetDataSourceListFilters, getDataSourceSrv } from '@grafana/runtime';\n\nexport const LOCAL_STORAGE_KEY = 'grafana.features.datasources.components.picker.DataSourceDropDown.history';\n\n/**\n * Stores the uid of the last 5 data sources selected by the user. The last UID is the one most recently used.\n */\nexport function useRecentlyUsedDataSources(): [string[], (ds: DataSourceInstanceSettings) => void] {\n const [value = [], setStorage] = useLocalStorage<string[]>(LOCAL_STORAGE_KEY, []);\n\n const pushRecentlyUsedDataSource = useCallback(\n (ds: DataSourceInstanceSettings) => {\n if (ds.meta.builtIn) {\n // Prevent storing the built in datasources (-- Grafana --, -- Mixed --, -- Dashboard --)\n return;\n }\n if (value.includes(ds.uid)) {\n // Prevent storing multiple copies of the same data source, put it at the front of the array instead.\n value.splice(\n value.findIndex((dsUid) => ds.uid === dsUid),\n 1\n );\n setStorage([...value, ds.uid]);\n } else {\n const newArray = [...value, ds.uid];\n if (newArray.length > 5) {\n setStorage(newArray.slice(1, 6));\n } else {\n setStorage(newArray);\n }\n }\n },\n [value, setStorage]\n );\n\n return [value, pushRecentlyUsedDataSource];\n}\n\nexport function useDatasources(filters: GetDataSourceListFilters, datasources?: DataSourceInstanceSettings[]) {\n if (datasources) {\n return datasources;\n }\n const dataSourceSrv = getDataSourceSrv();\n const dataSources = dataSourceSrv.getList(filters);\n\n return dataSources;\n}\n\nexport function useDatasource(dataSource: string | DataSourceRef | DataSourceInstanceSettings | null | undefined) {\n const dataSourceSrv = getDataSourceSrv();\n\n if (typeof dataSource === 'string') {\n return dataSourceSrv.getInstanceSettings(dataSource);\n }\n\n return dataSourceSrv.getInstanceSettings(dataSource);\n}\n\nexport interface KeybaordNavigatableListProps {\n keyboardEvents?: Observable<React.KeyboardEvent>;\n containerRef: React.RefObject<HTMLElement>;\n}\n\n/**\n * Allows navigating lists of elements where the data-role attribute is set to \"keyboardSelectableItem\"\n * @param props\n */\nexport function useKeyboardNavigatableList(props: KeybaordNavigatableListProps): [Record<string, string>, string] {\n const { keyboardEvents, containerRef } = props;\n const selectedIndex = useRef<number>(0);\n\n const attributeName = 'data-role';\n const roleName = 'keyboardSelectableItem';\n const navigatableItemProps = { ...{ [attributeName]: roleName } };\n const querySelectorNavigatableElements = `[${attributeName}=\"${roleName}\"`;\n\n const selectedAttributeName = 'data-selectedItem';\n const selectedItemCssSelector = `[${selectedAttributeName}=\"true\"]`;\n\n const selectItem = useCallback(\n (index: number) => {\n const listItems = containerRef?.current?.querySelectorAll<HTMLElement | HTMLButtonElement | HTMLAnchorElement>(\n querySelectorNavigatableElements\n );\n const selectedItem = listItems?.item(index % listItems?.length);\n\n listItems?.forEach((li) => li.setAttribute(selectedAttributeName, 'false'));\n\n if (selectedItem) {\n selectedItem.scrollIntoView({ block: 'center' });\n selectedItem.setAttribute(selectedAttributeName, 'true');\n }\n },\n [containerRef, querySelectorNavigatableElements]\n );\n\n const clickSelectedElement = useCallback(() => {\n containerRef?.current\n ?.querySelector<HTMLElement | HTMLButtonElement | HTMLAnchorElement>(selectedItemCssSelector)\n ?.querySelector<HTMLButtonElement>('button') // This is a bit weird. The main use for this would be to select card items, however the root of the card component does not have the click event handler, instead it's attached to a button inside it.\n ?.click();\n }, [containerRef, selectedItemCssSelector]);\n\n useEffect(() => {\n if (!keyboardEvents) {\n return;\n }\n const sub = keyboardEvents.subscribe({\n next: (keyEvent) => {\n switch (keyEvent?.code) {\n case 'ArrowDown': {\n selectItem(++selectedIndex.current);\n keyEvent.preventDefault();\n break;\n }\n case 'ArrowUp':\n selectedIndex.current = selectedIndex.current > 0 ? selectedIndex.current - 1 : selectedIndex.current;\n selectItem(selectedIndex.current);\n keyEvent.preventDefault();\n break;\n case 'Enter':\n clickSelectedElement();\n break;\n }\n },\n });\n return () => sub.unsubscribe();\n }, [keyboardEvents, selectItem, clickSelectedElement]);\n\n useEffect(() => {\n // This observer is used to keep track of the number of items in the list\n // that can change dinamically (e.g. when filtering a dropdown list)\n const listObserver = new MutationObserver((mutations) => {\n const listHasChanged = mutations.some(\n (mutation) =>\n (mutation.addedNodes && mutation.addedNodes.length > 0) ||\n (mutation.removedNodes && mutation.removedNodes.length > 0)\n );\n\n listHasChanged && selectItem(0);\n });\n\n if (containerRef.current) {\n listObserver.observe(containerRef.current, {\n childList: true,\n });\n }\n\n return () => {\n listObserver.disconnect();\n };\n }, [containerRef, querySelectorNavigatableElements, selectItem]);\n\n return [navigatableItemProps, selectedItemCssSelector];\n}\n","import { useCallback } from 'react';\n\nimport { FrameMatcherID, MatcherConfig, StandardEditorProps } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { RefIDMultiPicker, RefIDPicker, stringsToRegexp } from '@grafana/ui/internal';\n\ntype Props = StandardEditorProps<MatcherConfig>;\n\nexport const FrameSelectionEditor = ({ value, context, onChange, id }: Props) => {\n const onFilterChange = useCallback(\n (v: string) => {\n onChange(\n v?.length\n ? {\n id: FrameMatcherID.byRefId,\n options: v,\n }\n : undefined\n );\n },\n [onChange]\n );\n\n return (\n <RefIDPicker\n id={id}\n value={value?.options}\n onChange={onFilterChange}\n data={context.data}\n placeholder={t('geomap.frame-selection-editor.placeholder-change-filter', 'Change filter')}\n />\n );\n};\n\ntype FrameMultiSelectionEditorProps = Omit<StandardEditorProps<MatcherConfig>, 'item'>;\n\nexport const FrameMultiSelectionEditor = ({ value, context, onChange }: FrameMultiSelectionEditorProps) => {\n const onFilterChange = useCallback(\n (v: string[]) => {\n onChange(\n v?.length\n ? {\n id: FrameMatcherID.byRefId,\n options: stringsToRegexp(v),\n }\n : undefined\n );\n },\n [onChange]\n );\n\n return (\n <RefIDMultiPicker\n value={value?.options}\n onChange={onFilterChange}\n data={context.data}\n placeholder={t('geomap.frame-multi-selection-editor.placeholder-change-filter', 'Change filter')}\n />\n );\n};\n","import { FormEvent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { SelectionOptionsForm } from './SelectionOptionsForm';\nimport { VariableLegend } from './VariableLegend';\nimport { VariableSelectField } from './VariableSelectField';\nimport { VariableTextField } from './VariableTextField';\n\ninterface DataSourceVariableFormProps {\n query: string;\n regex: string;\n multi: boolean;\n allValue?: string | null;\n allowCustomValue?: boolean;\n includeAll: boolean;\n onChange: (option: SelectableValue) => void;\n optionTypes: Array<{ value: string; label: string }>;\n onRegExBlur: (event: FormEvent<HTMLInputElement>) => void;\n onMultiChange: (event: FormEvent<HTMLInputElement>) => void;\n onIncludeAllChange: (event: FormEvent<HTMLInputElement>) => void;\n onAllValueChange: (event: FormEvent<HTMLInputElement>) => void;\n onAllowCustomValueChange?: (event: FormEvent<HTMLInputElement>) => void;\n onQueryBlur?: (event: FormEvent<HTMLTextAreaElement>) => void;\n onAllValueBlur?: (event: FormEvent<HTMLInputElement>) => void;\n}\n\nexport function DataSourceVariableForm({\n query,\n regex,\n optionTypes,\n allowCustomValue,\n onChange,\n onRegExBlur,\n multi,\n includeAll,\n allValue,\n onMultiChange,\n onIncludeAllChange,\n onAllValueChange,\n onAllowCustomValueChange,\n}: DataSourceVariableFormProps) {\n const typeValue = optionTypes.find((o) => o.value === query);\n\n return (\n <>\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.data-source-variable-form.data-source-options\">Data source options</Trans>\n </VariableLegend>\n <VariableSelectField\n name={t('dashboard-scene.data-source-variable-form.name-type', 'Type')}\n value={typeValue}\n options={optionTypes}\n onChange={onChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.DatasourceVariable.datasourceSelect}\n />\n\n <VariableTextField\n defaultValue={regex}\n name={t('dashboard-scene.data-source-variable-form.name-instance-name-filter', 'Instance name filter')}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"/.*-(.*)-.*/\"\n onBlur={onRegExBlur}\n description={\n <div>\n <Trans i18nKey=\"dashboard-scene.data-source-variable-form.description-instance-name-filter\">\n Regex filter for which data source instances to choose from in the variable value list. Leave empty for\n all.\n </Trans>\n <br />\n <br />\n <Trans\n i18nKey=\"dashboard-scene.data-source-variable-form.example-instance-name-filter\"\n components={{ codeExample: <code>/^prod/</code> }}\n >\n Example: {'<codeExample />'}\n </Trans>\n </div>\n }\n />\n\n <VariableLegend>\n <Trans i18nKey=\"dashboard-scene.data-source-variable-form.selection-options\">Selection options</Trans>\n </VariableLegend>\n <SelectionOptionsForm\n multi={multi}\n includeAll={includeAll}\n allValue={allValue}\n allowCustomValue={allowCustomValue}\n onMultiChange={onMultiChange}\n onIncludeAllChange={onIncludeAllChange}\n onAllValueChange={onAllValueChange}\n onAllowCustomValueChange={onAllowCustomValueChange}\n />\n </>\n );\n}\n","import { getDashboardSrv } from '../../services/DashboardSrv';\nimport { DashboardModel } from '../../state/DashboardModel';\n\nimport { GenAIButton } from './GenAIButton';\nimport { EventTrackingSrc } from './tracking';\nimport {\n DASHBOARD_NEED_PANEL_TITLES_AND_DESCRIPTIONS_MESSAGE,\n getDashboardPanelPrompt,\n getPanelStrings,\n Message,\n Role,\n} from './utils';\n\ninterface GenAIDashDescriptionButtonProps {\n onGenerate: (description: string) => void;\n}\n\nconst DASHBOARD_DESCRIPTION_CHAR_LIMIT = 300;\n\nconst DESCRIPTION_GENERATION_STANDARD_PROMPT =\n 'You are an expert in creating Grafana Dashboards.\\n' +\n 'Your goal is to write a descriptive and concise dashboard description.\\n' +\n \"You will be given the title and description of the dashboard's panels.\\n\" +\n 'The dashboard description is meant to explain the purpose of the dashboard and what its panels show.\\n' +\n 'If the dashboard has no panels, the description should be \"Empty dashboard\"\\n' +\n 'There should be no numbers in the description except where they are important.\\n' +\n 'The dashboard description should not have the dashboard title or any quotation marks in it.\\n' +\n `The description should be, at most, ${DASHBOARD_DESCRIPTION_CHAR_LIMIT} characters.\\n` +\n 'Respond with only the description of the dashboard.';\n\nexport const GenAIDashDescriptionButton = ({ onGenerate }: GenAIDashDescriptionButtonProps) => {\n const dashboard = getDashboardSrv().getCurrent()!;\n const panelStrings = getPanelStrings(dashboard);\n\n return (\n <GenAIButton\n messages={getMessages(dashboard)}\n onGenerate={onGenerate}\n eventTrackingSrc={EventTrackingSrc.dashboardDescription}\n toggleTipTitle={'Improve your dashboard description'}\n disabled={panelStrings.length === 0}\n tooltip={panelStrings.length === 0 ? DASHBOARD_NEED_PANEL_TITLES_AND_DESCRIPTIONS_MESSAGE : undefined}\n />\n );\n};\n\nfunction getMessages(dashboard: DashboardModel): Message[] {\n return [\n {\n content: DESCRIPTION_GENERATION_STANDARD_PROMPT,\n role: Role.system,\n },\n {\n content: `The title of the dashboard is \"${dashboard.title}\"\\n` + `${getDashboardPanelPrompt(dashboard)}`,\n role: Role.user,\n },\n ];\n}\n","import { isResourceList } from 'app/features/apiserver/guards';\nimport { ResourceList } from 'app/features/apiserver/types';\nimport { getDashboardAPI } from 'app/features/dashboard/api/dashboard_api';\nimport { DashboardDataDTO } from 'app/types/dashboard';\n\nimport { SearchHit } from './unified';\nimport { resourceToSearchResult } from './utils';\n\n/**\n * Store deleted dashboards in the cache to avoid multiple calls to the API.\n */\nclass DeletedDashboardsCache {\n private cache: SearchHit[] | null = null;\n private promise: Promise<SearchHit[]> | null = null;\n private resourceListCache: ResourceList<DashboardDataDTO> | null = null;\n private resourceListPromise: Promise<ResourceList<DashboardDataDTO>> | null = null;\n\n async get(): Promise<SearchHit[]> {\n if (this.cache !== null) {\n return this.cache;\n }\n\n if (this.promise !== null) {\n return this.promise;\n }\n\n this.promise = this.fetch();\n\n try {\n this.cache = await this.promise;\n return this.cache;\n } catch (error) {\n this.promise = null;\n throw error;\n }\n }\n\n async getAsResourceList(): Promise<ResourceList<DashboardDataDTO>> {\n if (this.resourceListCache !== null) {\n return this.resourceListCache;\n }\n\n if (this.resourceListPromise !== null) {\n return this.resourceListPromise;\n }\n\n this.resourceListPromise = this.fetchResourceList();\n\n try {\n this.resourceListCache = await this.resourceListPromise;\n return this.resourceListCache;\n } catch (error) {\n this.resourceListPromise = null;\n throw error;\n }\n }\n\n clear(): void {\n this.cache = null;\n this.promise = null;\n this.resourceListCache = null;\n this.resourceListPromise = null;\n }\n\n private async fetchResourceList(): Promise<ResourceList<DashboardDataDTO>> {\n try {\n const api = getDashboardAPI();\n const deletedResponse = await api.listDeletedDashboards({ limit: 1000 });\n\n if (isResourceList<DashboardDataDTO>(deletedResponse)) {\n return deletedResponse;\n }\n\n // Return empty ResourceList if not a valid ResourceList\n return {\n apiVersion: 'v1',\n kind: 'List',\n metadata: { resourceVersion: '0' },\n items: [],\n };\n } catch (error) {\n console.error('Failed to fetch deleted dashboards:', error);\n return {\n apiVersion: 'v1',\n kind: 'List',\n metadata: { resourceVersion: '0' },\n items: [],\n };\n }\n }\n\n private async fetch(): Promise<SearchHit[]> {\n const resourceList = await this.getAsResourceList();\n return resourceToSearchResult(resourceList);\n }\n}\n\nexport const deletedDashboardsCache = new DeletedDashboardsCache();\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { getDefaultTimeRange, LoadingState, PanelData } from '@grafana/data';\n\nimport store from '../../../../../core/store';\nimport { PanelModel } from '../../../state/PanelModel';\nimport { DisplayMode } from '../types';\n\nexport const PANEL_EDITOR_UI_STATE_STORAGE_KEY = 'grafana.dashboard.editor.ui';\n\nexport const DEFAULT_PANEL_EDITOR_UI_STATE: PanelEditorUIState = {\n isPanelOptionsVisible: true,\n rightPaneSize: 400,\n topPaneSize: 0.45,\n mode: DisplayMode.Fill,\n};\n\nexport interface PanelEditorUIState {\n /* Visualization options pane visibility */\n isPanelOptionsVisible: boolean;\n /* Pixels or percentage */\n rightPaneSize: number;\n /* Pixels or percentage */\n topPaneSize: number;\n /* Visualization size mode */\n mode: DisplayMode;\n}\n\nexport interface PanelEditorState {\n /* These are functions as they are mutated later on and redux toolkit will Object.freeze state so\n * we need to store these using functions instead */\n getSourcePanel: () => PanelModel;\n getPanel: () => PanelModel;\n getData: () => PanelData;\n initDone: boolean;\n shouldDiscardChanges: boolean;\n isOpen: boolean;\n ui: PanelEditorUIState;\n isVizPickerOpen: boolean;\n tableViewEnabled: boolean;\n}\n\nexport const initialState = (): PanelEditorState => {\n const storedUiState = store.getObject(PANEL_EDITOR_UI_STATE_STORAGE_KEY, DEFAULT_PANEL_EDITOR_UI_STATE);\n\n let migratedState = { ...storedUiState };\n\n if (typeof storedUiState.topPaneSize === 'string') {\n migratedState = { ...storedUiState, topPaneSize: parseFloat(storedUiState.topPaneSize) / 100 };\n }\n\n return {\n getPanel: () => new PanelModel({}),\n getSourcePanel: () => new PanelModel({}),\n getData: () => ({\n state: LoadingState.NotStarted,\n series: [],\n timeRange: getDefaultTimeRange(),\n }),\n initDone: false,\n shouldDiscardChanges: false,\n isOpen: false,\n isVizPickerOpen: false,\n tableViewEnabled: false,\n ui: {\n ...DEFAULT_PANEL_EDITOR_UI_STATE,\n ...migratedState,\n },\n };\n};\n\ninterface InitEditorPayload {\n panel: PanelModel;\n sourcePanel: PanelModel;\n}\n\nconst pluginsSlice = createSlice({\n name: 'panelEditor',\n initialState: initialState(),\n reducers: {\n updateEditorInitState: (state, action: PayloadAction<InitEditorPayload>) => {\n state.getPanel = () => action.payload.panel;\n state.getSourcePanel = () => action.payload.sourcePanel;\n state.initDone = true;\n state.isOpen = true;\n state.shouldDiscardChanges = false;\n },\n setEditorPanelData: (state, action: PayloadAction<PanelData>) => {\n state.getData = () => action.payload;\n },\n setDiscardChanges: (state, action: PayloadAction<boolean>) => {\n state.shouldDiscardChanges = action.payload;\n },\n setPanelEditorUIState: (state, action: PayloadAction<Partial<PanelEditorUIState>>) => {\n state.ui = { ...state.ui, ...action.payload };\n // Close viz picker if closing options pane\n if (!state.ui.isPanelOptionsVisible && state.isVizPickerOpen) {\n state.isVizPickerOpen = false;\n }\n },\n toggleVizPicker: (state, action: PayloadAction<boolean>) => {\n state.isVizPickerOpen = action.payload;\n // Ensure options pane is opened when viz picker is open\n if (state.isVizPickerOpen) {\n state.ui.isPanelOptionsVisible = true;\n }\n },\n toggleTableView(state) {\n state.tableViewEnabled = !state.tableViewEnabled;\n },\n closeEditor: (state) => {\n state.getPanel = () => new PanelModel({});\n state.getSourcePanel = () => new PanelModel({});\n state.isOpen = false;\n state.initDone = false;\n state.isVizPickerOpen = false;\n state.tableViewEnabled = false;\n },\n },\n});\n\nexport const {\n updateEditorInitState,\n setEditorPanelData,\n setDiscardChanges,\n closeEditor,\n setPanelEditorUIState,\n toggleVizPicker,\n toggleTableView,\n} = pluginsSlice.actions;\n\nexport const panelEditorReducer = pluginsSlice.reducer;\n\nexport default {\n panelEditor: panelEditorReducer,\n};\n","import { now } from 'lodash';\n\nexport function ensureDefine(templateName: string, templateContent: string): string {\n // notification template content must be wrapped in {{ define \"name\" }} tag,\n // but this is not obvious because user also has to provide name separately in the form.\n // so if user does not manually add {{ define }} tag, we do it automatically\n let content = templateContent.trim();\n if (!content.match(/\\{\\{\\s*define/)) {\n const indentedContent = content\n .split('\\n')\n .map((line) => ' ' + line)\n .join('\\n');\n content = `{{ define \"${templateName}\" }}\\n${indentedContent}\\n{{ end }}`;\n }\n return content;\n}\nexport function updateDefinesWithUniqueValue(templateContent: string): string {\n const getNewValue = (match_: string, originalDefineName: string) => {\n return `{{ define \"${originalDefineName}_NEW_${now()}\" }}`;\n };\n return templateContent.replace(/\\{\\{\\s*define\\s*\\\"(?<defineName>.*)\\\"\\s*\\}\\}/g, getNewValue);\n}\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nconst getStyles = (theme: GrafanaTheme2) =>\n css({\n padding: theme.spacing(0, 2),\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.secondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n });\n\nexport const DetailText = ({ children }: React.PropsWithChildren<{}>) => {\n const collapsedTextStyles = useStyles2(getStyles);\n return <div className={collapsedTextStyles}>{children}</div>;\n};\n","import * as React from 'react';\n\nimport { DataFrame, DataTransformerID, getFrameDisplayName, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Field, Select, Stack, Switch, useStyles2 } from '@grafana/ui';\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { DetailText } from 'app/features/inspector/DetailText';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\n\nimport { getPanelInspectorStyles2 } from './styles';\n\ninterface Props {\n options: GetDataOptions;\n dataFrames: DataFrame[];\n transformationOptions: Array<SelectableValue<DataTransformerID>>;\n selectedDataFrame: number | DataTransformerID;\n onDataFrameChange: (item: SelectableValue<DataTransformerID | number>) => void;\n data?: DataFrame[];\n hasTransformations?: boolean;\n formattedDataDescription?: string;\n onOptionsChange?: (options: GetDataOptions) => void;\n actions?: React.ReactNode;\n excelCompatibilityMode: boolean;\n toggleExcelCompatibilityMode: () => void;\n}\n\nexport const InspectDataOptions = ({\n options,\n actions,\n formattedDataDescription,\n onOptionsChange,\n hasTransformations,\n data,\n dataFrames,\n transformationOptions,\n selectedDataFrame,\n onDataFrameChange,\n excelCompatibilityMode,\n toggleExcelCompatibilityMode,\n}: Props) => {\n const styles = useStyles2(getPanelInspectorStyles2);\n\n let dataSelect = dataFrames;\n if (selectedDataFrame === DataTransformerID.joinByField) {\n dataSelect = data!;\n }\n\n const choices = dataSelect.map<SelectableValue<number>>((frame, index) => {\n return {\n value: index,\n label: `${getFrameDisplayName(frame)} (${index})`,\n };\n });\n\n const selectableOptions = [...transformationOptions, ...choices];\n\n function getActiveString() {\n let activeString = '';\n\n if (!data) {\n return activeString;\n }\n\n const parts: string[] = [];\n\n if (selectedDataFrame === DataTransformerID.joinByField) {\n parts.push(t('dashboard.inspect-data.series-to-columns', 'Series joined by time'));\n } else if (data.length > 1) {\n parts.push(getFrameDisplayName(data[selectedDataFrame as number]));\n }\n\n if (options.withTransforms || options.withFieldConfig) {\n if (options.withTransforms) {\n parts.push(t('dashboard.inspect-data.panel-transforms', 'Panel transforms'));\n }\n\n if (options.withTransforms && options.withFieldConfig) {\n }\n\n if (options.withFieldConfig) {\n parts.push(t('dashboard.inspect-data.formatted', 'Formatted data'));\n }\n }\n\n return parts.join(', ');\n }\n\n return (\n <div className={styles.dataDisplayOptions}>\n <QueryOperationRow\n id=\"Data options\"\n index={0}\n title={t('dashboard.inspect-data.data-options', 'Data options')}\n headerElement={<DetailText>{getActiveString()}</DetailText>}\n isOpen={false}\n actions={actions}\n >\n <div className={styles.options} data-testid=\"dataOptions\">\n <Stack direction=\"column\" gap={0}>\n {data!.length > 1 && (\n <Field label={t('dashboard.inspect-data.dataframe-label', 'Show data frame')}>\n <Select\n options={selectableOptions}\n value={selectedDataFrame}\n onChange={onDataFrameChange}\n width={30}\n aria-label={t('dashboard.inspect-data.dataframe-aria-label', 'Select dataframe')}\n />\n </Field>\n )}\n\n <Stack>\n {hasTransformations && onOptionsChange && (\n <Field\n label={t('dashboard.inspect-data.transformations-label', 'Apply panel transformations')}\n description={t(\n 'dashboard.inspect-data.transformations-description',\n 'Table data is displayed with transformations defined in the panel Transform tab.'\n )}\n >\n <Switch\n value={!!options.withTransforms}\n onChange={() => onOptionsChange({ ...options, withTransforms: !options.withTransforms })}\n />\n </Field>\n )}\n {onOptionsChange && (\n <Field\n label={t('dashboard.inspect-data.formatted-data-label', 'Formatted data')}\n description={\n formattedDataDescription ||\n t(\n 'dashboard.inspect-data.formatted-data-description',\n 'Table data is formatted with options defined in the Field and Override tabs.'\n )\n }\n >\n <Switch\n id=\"formatted-data-toggle\"\n value={!!options.withFieldConfig}\n onChange={() => onOptionsChange({ ...options, withFieldConfig: !options.withFieldConfig })}\n />\n </Field>\n )}\n <Field\n label={t('dashboard.inspect-data.excel-compatibility-mode-label', 'Download for Excel')}\n description={t(\n 'dashboard.inspect-data.excel-compatibility-mode-description',\n \"Generates a CSV file that's compatible with most Excel versions\"\n )}\n >\n <Switch\n id=\"excel-compatibility-mode-toggle\"\n value={excelCompatibilityMode}\n onChange={toggleExcelCompatibilityMode}\n />\n </Field>\n </Stack>\n </Stack>\n </div>\n </QueryOperationRow>\n </div>\n );\n};\n","import { cloneDeep } from 'lodash';\nimport { PureComponent } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport {\n applyFieldOverrides,\n applyRawFieldOverrides,\n CoreApp,\n DataFrame,\n DataTransformerID,\n FieldConfigSource,\n SelectableValue,\n TimeZone,\n transformDataFrame,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { getTemplateSrv, reportInteraction } from '@grafana/runtime';\nimport { Button, Spinner, Table } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\n\nimport { dataFrameToLogsModel } from '../logs/logsModel';\n\nimport { InspectDataOptions } from './InspectDataOptions';\nimport { getPanelInspectorStyles } from './styles';\nimport { downloadAsJson, downloadDataFrameAsCsv, downloadLogsModelAsTxt, downloadTraceAsJson } from './utils/download';\n\ninterface Props {\n isLoading: boolean;\n options: GetDataOptions;\n timeZone: TimeZone;\n app?: CoreApp;\n data?: DataFrame[];\n /** The title of the panel or other context name */\n dataName: string;\n panelPluginId?: string;\n fieldConfig?: FieldConfigSource;\n hasTransformations?: boolean;\n formattedDataDescription?: string;\n onOptionsChange?: (options: GetDataOptions) => void;\n}\n\ninterface State {\n /** The string is joinByField transformation. Otherwise it is a dataframe index */\n selectedDataFrame: number | DataTransformerID;\n transformId: DataTransformerID;\n dataFrameIndex: number;\n transformationOptions: Array<SelectableValue<DataTransformerID>>;\n transformedData: DataFrame[];\n excelCompatibilityMode: boolean;\n}\n\nexport class InspectDataTab extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n\n this.state = {\n selectedDataFrame: 0,\n dataFrameIndex: 0,\n transformId: DataTransformerID.noop,\n transformationOptions: buildTransformationOptions(),\n transformedData: props.data ?? [],\n excelCompatibilityMode: false,\n };\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!this.props.data) {\n this.setState({ transformedData: [] });\n return;\n }\n\n if (this.props.options.withTransforms) {\n this.setState({ transformedData: this.props.data });\n return;\n }\n\n if (prevProps.data !== this.props.data || prevState.transformId !== this.state.transformId) {\n const currentTransform = this.state.transformationOptions.find((item) => item.value === this.state.transformId);\n\n if (currentTransform && currentTransform.transformer.id !== DataTransformerID.noop) {\n const selectedDataFrame = this.state.selectedDataFrame;\n const dataFrameIndex = this.state.dataFrameIndex;\n const subscription = transformDataFrame([currentTransform.transformer], this.props.data).subscribe((data) => {\n this.setState({ transformedData: data, selectedDataFrame, dataFrameIndex }, () => subscription.unsubscribe());\n });\n return;\n }\n\n this.setState({ transformedData: this.props.data });\n return;\n }\n }\n\n exportCsv(dataFrames: DataFrame[], hasLogs: boolean) {\n const { dataName } = this.props;\n const { transformId } = this.state;\n const dataFrame = dataFrames[this.state.dataFrameIndex];\n\n if (hasLogs) {\n reportInteraction('grafana_logs_download_clicked', { app: this.props.app, format: 'csv' });\n }\n\n downloadDataFrameAsCsv(dataFrame, dataName, {}, transformId, this.state.excelCompatibilityMode);\n }\n\n onExportLogsAsTxt = () => {\n const { data, dataName, app } = this.props;\n\n reportInteraction('grafana_logs_download_logs_clicked', {\n app,\n format: 'logs',\n area: 'inspector',\n });\n\n const logsModel = dataFrameToLogsModel(data || []);\n downloadLogsModelAsTxt(logsModel, dataName);\n };\n\n onExportTracesAsJson = () => {\n const { data, dataName, app } = this.props;\n\n if (!data) {\n return;\n }\n\n for (const df of data) {\n // Only export traces\n if (df.meta?.preferredVisualisationType !== 'trace') {\n continue;\n }\n\n const traceFormat = downloadTraceAsJson(df, dataName + '-traces');\n\n reportInteraction('grafana_traces_download_traces_clicked', {\n app,\n grafana_version: config.buildInfo.version,\n trace_format: traceFormat,\n location: 'inspector',\n });\n }\n };\n\n onExportServiceGraph = () => {\n const { data, dataName, app } = this.props;\n\n reportInteraction('grafana_traces_download_service_graph_clicked', {\n app,\n grafana_version: config.buildInfo.version,\n location: 'inspector',\n });\n\n if (!data) {\n return;\n }\n\n downloadAsJson(data, dataName);\n };\n\n onDataFrameChange = (item: SelectableValue<DataTransformerID | number>) => {\n this.setState({\n transformId:\n item.value === DataTransformerID.joinByField ? DataTransformerID.joinByField : DataTransformerID.noop,\n dataFrameIndex: typeof item.value === 'number' ? item.value : 0,\n selectedDataFrame: item.value!,\n });\n };\n\n onToggleExcelCompatibilityMode = () => {\n this.setState((prevState) => ({\n excelCompatibilityMode: !prevState.excelCompatibilityMode,\n }));\n };\n\n getProcessedData(): DataFrame[] {\n const { options, panelPluginId, fieldConfig, timeZone } = this.props;\n const data = this.state.transformedData;\n\n if (!options.withFieldConfig) {\n return applyRawFieldOverrides(data);\n }\n\n let fieldConfigCleaned = fieldConfig ?? { defaults: {}, overrides: [] };\n // Because we visualize this data in a table we have to remove any custom table display settings\n if (panelPluginId === 'table' && fieldConfig) {\n fieldConfigCleaned = this.cleanTableConfigFromFieldConfig(fieldConfig);\n }\n\n // We need to apply field config as it's not done by PanelQueryRunner (even when withFieldConfig is true).\n // It's because transformers create new fields and data frames, and we need to clean field config of any table settings.\n return applyFieldOverrides({\n data,\n theme: config.theme2,\n fieldConfig: fieldConfigCleaned,\n timeZone,\n replaceVariables: (value, scopedVars, format) => getTemplateSrv().replace(value, scopedVars, format),\n });\n }\n\n // Because we visualize this data in a table we have to remove any custom table display settings\n cleanTableConfigFromFieldConfig(fieldConfig: FieldConfigSource): FieldConfigSource {\n fieldConfig = cloneDeep(fieldConfig);\n // clear all table specific options\n fieldConfig.defaults.custom = {};\n\n // clear all table override properties\n for (const override of fieldConfig.overrides) {\n for (const prop of override.properties) {\n if (prop.id.startsWith('custom.')) {\n const index = override.properties.indexOf(prop);\n override.properties.slice(index, 1);\n }\n }\n }\n\n return fieldConfig;\n }\n\n renderActions(dataFrames: DataFrame[], hasLogs: boolean, hasTraces: boolean, hasServiceGraph: boolean) {\n return (\n <>\n <Button variant=\"primary\" onClick={() => this.exportCsv(dataFrames, hasLogs)} size=\"sm\">\n <Trans i18nKey=\"dashboard.inspect-data.download-csv\">Download CSV</Trans>\n </Button>\n {hasLogs && !config.exploreHideLogsDownload && (\n <Button variant=\"primary\" onClick={this.onExportLogsAsTxt} size=\"sm\">\n <Trans i18nKey=\"dashboard.inspect-data.download-logs\">Download logs</Trans>\n </Button>\n )}\n {hasTraces && (\n <Button variant=\"primary\" onClick={this.onExportTracesAsJson} size=\"sm\">\n <Trans i18nKey=\"dashboard.inspect-data.download-traces\">Download traces</Trans>\n </Button>\n )}\n {hasServiceGraph && (\n <Button variant=\"primary\" onClick={this.onExportServiceGraph} size=\"sm\">\n <Trans i18nKey=\"dashboard.inspect-data.download-service\">Download service graph</Trans>\n </Button>\n )}\n </>\n );\n }\n\n render() {\n const { isLoading, options, data, formattedDataDescription, onOptionsChange, hasTransformations } = this.props;\n const { dataFrameIndex, transformationOptions, selectedDataFrame, excelCompatibilityMode } = this.state;\n const styles = getPanelInspectorStyles();\n\n if (isLoading) {\n return (\n <div>\n <Spinner inline={true} /> <Trans i18nKey=\"inspector.inspect-data-tab.loading\">Loading</Trans>\n </div>\n );\n }\n\n const dataFrames = this.getProcessedData();\n\n if (!dataFrames || !dataFrames.length) {\n return (\n <div>\n <Trans i18nKey=\"inspector.inspect-data-tab.no-data\">No data</Trans>\n </div>\n );\n }\n\n // let's make sure we don't try to render a frame that doesn't exists\n const index = !dataFrames[dataFrameIndex] ? 0 : dataFrameIndex;\n const dataFrame = dataFrames[index];\n const hasLogs = dataFrames.some((df) => df?.meta?.preferredVisualisationType === 'logs');\n const hasTraces = dataFrames.some((df) => df?.meta?.preferredVisualisationType === 'trace');\n const hasServiceGraph = dataFrames.some((df) => df?.meta?.preferredVisualisationType === 'nodeGraph');\n\n return (\n <div className={styles.wrap} aria-label={selectors.components.PanelInspector.Data.content}>\n <div className={styles.toolbar}>\n <InspectDataOptions\n data={data}\n hasTransformations={hasTransformations}\n options={options}\n dataFrames={dataFrames}\n transformationOptions={transformationOptions}\n selectedDataFrame={selectedDataFrame}\n formattedDataDescription={formattedDataDescription}\n onOptionsChange={onOptionsChange}\n onDataFrameChange={this.onDataFrameChange}\n excelCompatibilityMode={excelCompatibilityMode}\n toggleExcelCompatibilityMode={this.onToggleExcelCompatibilityMode}\n actions={this.renderActions(dataFrames, hasLogs, hasTraces, hasServiceGraph)}\n />\n </div>\n <div className={styles.content}>\n <AutoSizer>\n {({ width, height }) => {\n if (width === 0) {\n return null;\n }\n\n return <Table width={width} height={height} data={dataFrame} showTypeIcons={true} />;\n }}\n </AutoSizer>\n </div>\n </div>\n );\n }\n}\n\nfunction buildTransformationOptions() {\n const transformations: Array<SelectableValue<DataTransformerID>> = [\n {\n value: DataTransformerID.joinByField,\n label: t('dashboard.inspect-data.transformation', 'Series joined by time'),\n transformer: {\n id: DataTransformerID.joinByField,\n options: { byField: undefined }, // defaults to time field\n },\n },\n ];\n\n return transformations;\n}\n","import { from, Observable, of } from 'rxjs';\n\nimport {\n AnnotationQuery,\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n TestDataSourceResponse,\n DataSourceApi,\n DataSourceJsonData,\n DataSourcePluginMeta,\n toDataFrame,\n} from '@grafana/data';\nimport { config, getBackendSrv } from '@grafana/runtime';\nimport { GRAFANA_DATASOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\n\nimport { GrafanaQueryType } from '../../../../plugins/datasource/grafana/types';\n\nexport const PUBLIC_DATASOURCE = '-- Public --';\n\nexport class PublicAnnotationsDataSource extends DataSourceApi<DataQuery, DataSourceJsonData, {}> {\n constructor() {\n let meta = {} as DataSourcePluginMeta;\n\n super({\n name: 'public-ds',\n id: 0,\n type: 'public-ds',\n meta,\n uid: PUBLIC_DATASOURCE,\n jsonData: {},\n access: 'proxy',\n readOnly: true,\n });\n\n this.annotations = {\n prepareQuery(anno: AnnotationQuery): DataQuery | undefined {\n return { ...anno, queryType: GrafanaQueryType.Annotations, refId: 'anno' };\n },\n };\n }\n\n /**\n * Ideally final -- any other implementation may not work as expected\n */\n query(request: DataQueryRequest<DataQuery>): Observable<DataQueryResponse> {\n // Return early if no queries exist\n if (!request.targets.length) {\n return of({ data: [] });\n }\n\n // Currently, annotations requests come in one at a time, so there will only be one target\n const target = request.targets[0];\n\n if (target?.datasource?.uid === GRAFANA_DATASOURCE_NAME) {\n return from(this.getAnnotations(request));\n }\n return of({ data: [] });\n }\n\n async getAnnotations(request: DataQueryRequest<DataQuery>): Promise<DataQueryResponse> {\n const {\n range: { to, from },\n } = request;\n\n const params = {\n from: from.valueOf(),\n to: to.valueOf(),\n };\n\n const annotations = await getBackendSrv().get(\n `/api/public/dashboards/${config.publicDashboardAccessToken}/annotations`,\n params\n );\n\n return { data: [toDataFrame(annotations)] };\n }\n\n testDatasource(): Promise<TestDataSourceResponse> {\n return Promise.resolve({ message: '', status: '' });\n }\n}\n","import { compact, memoize, reject, uniq } from 'lodash';\n\nimport { Edge, Graph, Node } from 'app/core/utils/dag';\nimport { isExpressionQuery } from 'app/features/expressions/guards';\nimport { ExpressionQuery, ExpressionQueryType } from 'app/features/expressions/types';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\n/**\n * Turn the array of alert queries (this means data queries and expressions)\n * in to a DAG, a directed acyclical graph\n */\nexport function createDagFromQueries(queries: AlertQuery[]): Graph {\n const graph = new Graph();\n\n // collect link errors in here so we can throw a single error with all nodes that failed to link\n const linkErrors: LinkError[] = [];\n\n const nodes = queries.map((query) => query.refId);\n graph.createNodes(nodes);\n\n queries.forEach((query) => {\n if (!isExpressionQuery(query.model)) {\n return;\n }\n const source = query.refId;\n\n // some expressions have multiple targets (like the math expression)\n const targets = getTargets(query.model);\n\n targets.forEach((target) => {\n if (source && target) {\n try {\n graph.link(target, source);\n } catch (error) {\n linkErrors.push({ source, target, error });\n }\n }\n });\n });\n\n if (linkErrors.length > 0) {\n throw new DAGError('failed to create DAG from queries', { cause: linkErrors });\n }\n\n return graph;\n}\n\n/**\n * This function attempts to create a \"clean\" DAG where only the nodes that successfully link are left\n * ⚠️ This is a recursive function and very expensive for larger DAGs or large amount of queries\n */\nexport function createDAGFromQueriesSafe(\n queries: AlertQuery[],\n collectedLinkErrors: LinkError[] = []\n): [Graph, LinkError[]] {\n try {\n return [createDagFromQueries(queries), collectedLinkErrors];\n } catch (error) {\n if (error instanceof DAGError) {\n const linkErrors = error.cause;\n collectedLinkErrors.push(...linkErrors);\n\n const updatedQueries = reject(queries, (query) =>\n linkErrors.some((linkError) => linkError.source === query.refId)\n );\n\n return createDAGFromQueriesSafe(updatedQueries, collectedLinkErrors);\n }\n }\n\n return [new Graph(), collectedLinkErrors];\n}\n\nexport interface LinkError {\n source: string;\n target: string;\n error: unknown;\n}\n\n/** DAGError subclass, this is just a regular error but with LinkError[] as the cause */\nexport class DAGError extends Error {\n constructor(message: string, options: { cause: LinkError[] }) {\n super(message, options);\n this.cause = options?.cause ?? [];\n }\n\n cause: LinkError[];\n}\n\nexport function getTargets(model: ExpressionQuery) {\n const isMathExpression = model.type === ExpressionQueryType.math;\n const isClassicCondition = model.type === ExpressionQueryType.classic;\n const isSqlExpression = model.type === ExpressionQueryType.sql;\n\n if (isMathExpression) {\n return parseRefsFromMathExpression(model.expression ?? '');\n }\n if (isClassicCondition) {\n return model.conditions?.map((c) => c.query.params[0]) ?? [];\n }\n if (isSqlExpression) {\n return parseRefsFromSqlExpression(model.expression ?? '');\n }\n return [model.expression];\n}\n\n/**\n * parse an expression like \"$A > $B\" or \"${FOO BAR} > 0\" to an array of refIds\n */\nexport function parseRefsFromMathExpression(input: string): string[] {\n // we'll use two regular expressions, one for \"${var}\" and one for \"$var\"\n const r1 = new RegExp(/\\$\\{(?<var>[a-zA-Z0-9_ ]+?)\\}/gm);\n const r2 = new RegExp(/\\$(?<var>[a-zA-Z0-9_]+)/gm);\n\n const m1 = Array.from(input.matchAll(r1)).map((m) => m.groups?.var);\n const m2 = Array.from(input.matchAll(r2)).map((m) => m.groups?.var);\n\n return compact(uniq([...m1, ...m2]));\n}\n\nexport function parseRefsFromSqlExpression(input: string): string[] {\n if (!input) {\n return [];\n }\n // Remove any comment lines\n const lines = input.split('\\n');\n const nonCommentLines = lines.filter((line) => !line.trim().startsWith('--'));\n const noComments = nonCommentLines.join(' ');\n\n const query = noComments\n // Normalize whitespace\n .replace(/\\s+/g, ' ')\n // Remove any potential multi line comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n const tableMatches = [];\n\n // Extract tables after FROM - case insensitive with /i flag\n const fromRegex = /from\\s+([^;]*?)(?:\\s+(?:join|where|group|having|order|limit)|\\s*$)/gi;\n\n for (const match of query.matchAll(fromRegex)) {\n const fromClause = match[1].trim();\n // Handle comma-separated tables\n const tables = fromClause.split(',').map((t) => t.trim());\n for (const table of tables) {\n tableMatches.push(cleanTableName(table));\n }\n }\n\n // Extract tables after JOIN - case insensitive with /i flag\n const joinRegex = /join\\s+([a-zA-Z0-9_.\"]+)/gi;\n\n for (const match of query.matchAll(joinRegex)) {\n tableMatches.push(cleanTableName(match[1]));\n }\n\n return compact(uniq(tableMatches));\n}\n\n// Helper function to clean table names\nfunction cleanTableName(tableName: string): string {\n // Remove quotes\n let name = tableName.replace(/['\"]/g, '');\n\n // Remove alias if present (both \"AS alias\" and \"alias\" forms)\n if (name.includes(' as ')) {\n name = name.split(' as ')[0];\n } else if (name.includes(' ')) {\n name = name.split(' ')[0];\n }\n\n // Extract table name from schema.table format\n if (name.includes('.')) {\n name = name.split('.').pop() || '';\n }\n\n return name.trim();\n}\n\nexport const getOriginOfRefId = memoize(_getOriginsOfRefId, (refId, graph) => refId + fingerprintGraph(graph));\nexport const getDescendants = memoize(_getDescendants, (refId, graph) => refId + fingerprintGraph(graph));\n\nexport function _getOriginsOfRefId(refId: string, graph: Graph): string[] {\n const node = graph.getNode(refId);\n if (!node) {\n return [];\n }\n\n const origins: Node[] = [];\n\n // recurse through \"node > inputEdges > inputNode\"\n function findParentNode(node: Node) {\n const inputEdges = node.inputEdges;\n\n if (inputEdges.length > 0) {\n inputEdges.forEach((edge) => {\n if (edge.inputNode) {\n findParentNode(edge.inputNode);\n }\n });\n } else {\n origins.push(node);\n }\n }\n\n findParentNode(node);\n\n return origins.map((origin) => origin.name);\n}\n\n// get all children (and children's children etc) from a given node\nexport function _getDescendants(refId: string, graph: Graph): string[] {\n const node = graph.getNode(refId);\n if (!node) {\n return [];\n }\n\n const descendants: Node[] = [];\n\n // recurse through \"node > outputEdges > outputNode\"\n function findChildNode(node: Node) {\n const outputEdges = node.outputEdges;\n\n outputEdges.forEach((edge) => {\n if (edge.outputNode) {\n descendants.push(edge.outputNode);\n findChildNode(edge.outputNode);\n }\n });\n }\n\n findChildNode(node);\n\n return descendants.map((descendant) => descendant.name);\n}\n\n// create a unique fingerprint of the DAG\nexport function fingerprintGraph(graph: Graph) {\n return Object.keys(graph.nodes)\n .map((name) => {\n const n = graph.nodes[name];\n const outputEdges = n.outputEdges.map((e: Edge) => e.outputNode?.name).join(', ');\n const inputEdges = n.inputEdges.map((e: Edge) => e.inputNode?.name).join(', ');\n return `${n.name}:${outputEdges}:${inputEdges}`;\n })\n .join(' ');\n}\n","interface RequestState {\n error?: unknown;\n\n isUninitialized: boolean;\n isSuccess: boolean;\n isError: boolean;\n isLoading: boolean;\n}\n\n// @TODO what to do with the other props that we get from RTKQ's state such as originalArgs, etc?\nexport function mergeRequestStates(...states: RequestState[]): RequestState {\n return {\n error: states.find((s) => s.error),\n isUninitialized: states.every((s) => s.isUninitialized),\n isSuccess: states.every((s) => s.isSuccess),\n isError: states.some((s) => s.isError),\n isLoading: states.some((s) => s.isLoading),\n };\n}\n","import { Action } from '@reduxjs/toolkit';\nimport reduceReducers from 'reduce-reducers';\n\nimport { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types';\n\nimport { alertmanagerApi } from '../api/alertmanagerApi';\nimport { muteTimingsReducer } from '../reducers/alertmanager/muteTimings';\nimport { routesReducer } from '../reducers/alertmanager/notificationPolicyRoutes';\nimport { notificationTemplatesReducer } from '../reducers/alertmanager/notificationTemplates';\nimport { receiversReducer } from '../reducers/alertmanager/receivers';\nimport { useAlertmanager } from '../state/AlertmanagerContext';\n\nimport { mergeRequestStates } from './mergeRequestStates';\n\nconst ERR_NO_ACTIVE_AM = new Error('no active Alertmanager');\n\nconst { useLazyGetAlertmanagerConfigurationQuery, useUpdateAlertmanagerConfigurationMutation } = alertmanagerApi;\n\nexport const initialAlertmanagerConfiguration: AlertManagerCortexConfig = {\n alertmanager_config: {\n receivers: [],\n route: {},\n time_intervals: [],\n mute_time_intervals: [],\n inhibit_rules: [],\n templates: [],\n },\n template_files: {},\n};\n\nconst configurationReducer = reduceReducers(\n initialAlertmanagerConfiguration,\n muteTimingsReducer,\n receiversReducer,\n notificationTemplatesReducer,\n routesReducer\n);\n\n/**\n * This hook will make sure we are always applying actions that mutate the Alertmanager configuration\n * on top of the latest Alertmanager configuration object.\n */\nexport function useProduceNewAlertmanagerConfiguration() {\n const { selectedAlertmanager } = useAlertmanager();\n\n const [fetchAlertmanagerConfig, fetchAlertmanagerState] = useLazyGetAlertmanagerConfigurationQuery();\n const [updateAlertManager, updateAlertmanagerState] = useUpdateAlertmanagerConfigurationMutation();\n\n const newConfigurationState = mergeRequestStates(fetchAlertmanagerState, updateAlertmanagerState);\n\n if (!selectedAlertmanager) {\n throw ERR_NO_ACTIVE_AM;\n }\n\n /**\n * This function will fetch the latest Alertmanager configuration, apply a diff to it via a reducer and\n * returns the result.\n *\n * ┌────────────────────────────┐ ┌───────────────┐ ┌───────────────────┐\n * │ fetch latest configuration │─▶│ apply reducer │─▶│ new rule config │\n * └────────────────────────────┘ └───────────────┘ └───────────────────┘\n */\n const produceNewAlertmanagerConfiguration = async (action: Action) => {\n const currentAlertmanagerConfiguration = await fetchAlertmanagerConfig(selectedAlertmanager).unwrap();\n\n const newConfig = configurationReducer(currentAlertmanagerConfiguration, action);\n\n return updateAlertManager({\n selectedAlertmanager,\n config: newConfig,\n }).unwrap();\n };\n\n return [produceNewAlertmanagerConfiguration, newConfigurationState] as const;\n}\n","import * as React from 'react';\n\nexport interface EmbeddedDashboardProps {\n uid?: string;\n /**\n * Use this property to override initial time and variable state.\n * Example: ?from=now-5m&to=now&var-varname=value1\n */\n initialState?: string;\n /**\n * Is called when ever the internal embedded dashboards url state changes.\n * Can be used to sync the internal url state (Which is not synced to URL) with the external context, or to\n * preserve some of the state when moving to other embedded dashboards.\n */\n onStateChange?: (state: string) => void;\n}\n\n/**\n * Returns a React component that renders an embedded dashboard.\n * @alpha\n */\nexport let EmbeddedDashboard: React.ComponentType<EmbeddedDashboardProps> = () => {\n throw new Error('EmbeddedDashboard requires runtime initialization');\n};\n\n/**\n *\n * @internal\n */\nexport function setEmbeddedDashboard(component: React.ComponentType<EmbeddedDashboardProps>) {\n EmbeddedDashboard = component;\n}\n","import { cx } from '@emotion/css';\nimport { useVirtualizer, type Range } from '@tanstack/react-virtual';\nimport { useCombobox } from 'downshift';\nimport React, { ComponentProps, useCallback, useId, useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\nimport { AutoSizeInput } from '../Input/AutoSizeInput';\nimport { Input, Props as InputProps } from '../Input/Input';\nimport { Portal } from '../Portal/Portal';\n\nimport { ComboboxList } from './ComboboxList';\nimport { SuffixIcon } from './SuffixIcon';\nimport { itemToString } from './filter';\nimport { getComboboxStyles, MENU_OPTION_HEIGHT, MENU_OPTION_HEIGHT_DESCRIPTION } from './getComboboxStyles';\nimport { ComboboxOption } from './types';\nimport { useComboboxFloat } from './useComboboxFloat';\nimport { useOptions } from './useOptions';\nimport { isNewGroup } from './utils';\n\n// TODO: It would be great if ComboboxOption[\"label\"] was more generic so that if consumers do pass it in (for async),\n// then the onChange handler emits ComboboxOption with the label as non-undefined.\n\ninterface ComboboxStaticProps<T extends string | number>\n extends Pick<\n InputProps,\n 'placeholder' | 'autoFocus' | 'id' | 'aria-labelledby' | 'disabled' | 'loading' | 'invalid'\n > {\n /**\n * Allows the user to set a value which is not in the list of options.\n */\n createCustomValue?: boolean;\n /**\n * Custom container for rendering the dropdown menu via Portal\n */\n portalContainer?: HTMLElement;\n\n /**\n * An array of options, or a function that returns a promise resolving to an array of options.\n * If a function, it will be called when the menu is opened and on keypress with the current search query.\n */\n options: Array<ComboboxOption<T>> | ((inputValue: string) => Promise<Array<ComboboxOption<T>>>);\n\n /**\n * Current selected value. Most consumers should pass a scalar value (string | number). However, sometimes with Async\n * it may be better to pass in an Option with a label to display.\n */\n value?: T | ComboboxOption<T> | null;\n\n /**\n * Defaults to full width of container. Number is a multiple of the spacing unit. 'auto' will size the input to the content.\n * */\n width?: number | 'auto';\n\n ['data-testid']?: string;\n\n /**\n * Called when the input loses focus.\n */\n onBlur?: () => void;\n\n /**\n * Icon to display at the start of the ComboBox input\n */\n prefixIcon?: ComponentProps<typeof Icon>['name'];\n}\n\ninterface ClearableProps<T extends string | number> {\n /**\n * An `X` appears in the UI, which clears the input and sets the value to `null`. Do not use if you have no `null` case.\n */\n isClearable: true;\n\n /**\n * onChange handler is called with the newly selected option.\n */\n onChange: (option: ComboboxOption<T> | null) => void;\n}\n\ninterface NotClearableProps<T extends string | number> {\n /**\n * An `X` appears in the UI, which clears the input and sets the value to `null`. Do not use if you have no `null` case.\n */\n isClearable?: false;\n\n /**\n * onChange handler is called with the newly selected option.\n */\n onChange: (option: ComboboxOption<T>) => void;\n}\n\nexport type ComboboxBaseProps<T extends string | number> = (ClearableProps<T> | NotClearableProps<T>) &\n ComboboxStaticProps<T>;\n\nexport type AutoSizeConditionals =\n | {\n width: 'auto';\n /**\n * Needs to be set when width is 'auto' to prevent the input from shrinking too much\n */\n minWidth: number;\n /**\n * Recommended to set when width is 'auto' to prevent the input from growing too much.\n */\n maxWidth?: number;\n }\n | {\n width?: number;\n minWidth?: never;\n maxWidth?: never;\n };\n\nexport type ComboboxProps<T extends string | number> = ComboboxBaseProps<T> & AutoSizeConditionals;\n\nconst noop = () => {};\n\nexport const VIRTUAL_OVERSCAN_ITEMS = 4;\n\n/**\n * A performant and accessible combobox component that supports both synchronous and asynchronous options loading. It provides type-ahead filtering, keyboard navigation, and virtual scrolling for handling large datasets efficiently.\n * Replaces the Select component, and has better performance.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-combobox--docs\n * @alpha\n */\nexport const Combobox = <T extends string | number>(props: ComboboxProps<T>) => {\n const {\n options: allOptions,\n onChange,\n value: valueProp,\n placeholder: placeholderProp,\n isClearable, // this should be default false, but TS can't infer the conditional type if you do\n createCustomValue = false,\n id,\n width,\n minWidth,\n maxWidth,\n 'aria-labelledby': ariaLabelledBy,\n 'data-testid': dataTestId,\n autoFocus,\n onBlur,\n disabled,\n portalContainer,\n invalid,\n prefixIcon,\n } = props;\n\n // Value can be an actual scalar Value (string or number), or an Option (value + label), so\n // get a consistent Value from it\n const value = typeof valueProp === 'object' ? valueProp?.value : valueProp;\n const baseId = useId().replace(/:/g, '--');\n\n const {\n options: filteredOptions,\n groupStartIndices,\n updateOptions,\n asyncLoading,\n asyncError,\n } = useOptions(props.options, createCustomValue);\n const isAsync = typeof allOptions === 'function';\n\n const selectedItemIndex = useMemo(() => {\n if (isAsync) {\n return null;\n }\n\n if (valueProp === undefined || valueProp === null) {\n return null;\n }\n\n const index = allOptions.findIndex((option) => option.value === value);\n if (index === -1) {\n return null;\n }\n\n return index;\n }, [valueProp, allOptions, value, isAsync]);\n\n const selectedItem = useMemo(() => {\n if (valueProp === undefined || valueProp === null) {\n return null;\n }\n\n if (selectedItemIndex !== null && !isAsync) {\n return allOptions[selectedItemIndex];\n }\n\n return typeof valueProp === 'object' ? valueProp : { value: valueProp, label: valueProp.toString() };\n }, [selectedItemIndex, isAsync, valueProp, allOptions]);\n\n const menuId = `${baseId}-downshift-menu`;\n const labelId = `${baseId}-downshift-label`;\n\n const styles = useStyles2(getComboboxStyles);\n\n // Injects the group header for the first rendered item into the range to render.\n // Accepts the range that useVirtualizer wants to render, and then returns indexes\n // to actually render.\n const rangeExtractor = useCallback(\n (range: Range) => {\n const startIndex = Math.max(0, range.startIndex - range.overscan);\n const endIndex = Math.min(filteredOptions.length - 1, range.endIndex + range.overscan);\n const rangeToReturn = Array.from({ length: endIndex - startIndex + 1 }, (_, i) => startIndex + i);\n\n // If the first item doesn't have a group, no need to find a header for it\n const firstDisplayedOption = filteredOptions[rangeToReturn[0]];\n if (firstDisplayedOption?.group) {\n const groupStartIndex = groupStartIndices.get(firstDisplayedOption.group);\n if (groupStartIndex !== undefined && groupStartIndex < rangeToReturn[0]) {\n rangeToReturn.unshift(groupStartIndex);\n }\n }\n\n return rangeToReturn;\n },\n [filteredOptions, groupStartIndices]\n );\n\n const rowVirtualizer = useVirtualizer({\n count: filteredOptions.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: (index: number) => {\n const firstGroupItem = isNewGroup(filteredOptions[index], index > 0 ? filteredOptions[index - 1] : undefined);\n const hasDescription = 'description' in filteredOptions[index];\n const hasGroup = 'group' in filteredOptions[index];\n\n let itemHeight = MENU_OPTION_HEIGHT;\n if (hasDescription) {\n itemHeight = MENU_OPTION_HEIGHT_DESCRIPTION;\n }\n if (firstGroupItem && hasGroup) {\n itemHeight += MENU_OPTION_HEIGHT;\n }\n return itemHeight;\n },\n overscan: VIRTUAL_OVERSCAN_ITEMS,\n rangeExtractor,\n });\n\n const {\n isOpen,\n highlightedIndex,\n\n getInputProps,\n getMenuProps,\n getItemProps,\n\n selectItem,\n } = useCombobox({\n menuId,\n labelId,\n inputId: id,\n items: filteredOptions,\n itemToString,\n selectedItem,\n\n // Don't change downshift state in the onBlahChange handlers. Instead, use the stateReducer to make changes.\n // Downshift calls change handlers on the render after so you can get sync/flickering issues if you change its state\n // in them.\n // Instead, stateReducer is called in the same tick as state changes, before that state is committed and rendered.\n\n onSelectedItemChange: ({ selectedItem }) => {\n // `selectedItem` type is `ComboboxOption<T> | null`\n // It can be null when `selectItem()` is called with null, and we never do that unless `isClearable` is true.\n // So, when `isClearable` is false, `selectedItem` is always non-null. However, the types don't reflect that,\n // which is why the conditions are needed.\n //\n // this is an else if because TS can't infer the correct onChange types from\n // (isClearable || selectedItem !== null)\n if (isClearable) {\n // onChange argument type allows null\n onChange(selectedItem);\n } else if (selectedItem !== null) {\n // onChange argument type *does not* allow null\n onChange(selectedItem);\n }\n },\n\n defaultHighlightedIndex: selectedItemIndex ?? 0,\n\n scrollIntoView: () => {},\n\n onIsOpenChange: ({ isOpen, inputValue }) => {\n if (isOpen && inputValue === '') {\n updateOptions(inputValue);\n }\n },\n\n onHighlightedIndexChange: ({ highlightedIndex, type }) => {\n if (type !== useCombobox.stateChangeTypes.MenuMouseLeave) {\n rowVirtualizer.scrollToIndex(highlightedIndex);\n }\n },\n onStateChange: ({ inputValue: newInputValue, type, selectedItem: newSelectedItem }) => {\n switch (type) {\n case useCombobox.stateChangeTypes.InputChange:\n updateOptions(newInputValue ?? '');\n\n break;\n default:\n break;\n }\n },\n stateReducer(state, actionAndChanges) {\n let { changes } = actionAndChanges;\n const menuBeingOpened = state.isOpen === false && changes.isOpen === true;\n const menuBeingClosed = state.isOpen === true && changes.isOpen === false;\n\n // Reset the input value when the menu is opened. If the menu is opened due to an input change\n // then make sure we keep that.\n // This will trigger onInputValueChange to load async options\n if (menuBeingOpened && changes.inputValue === state.inputValue) {\n changes = {\n ...changes,\n inputValue: '',\n };\n }\n\n if (menuBeingClosed) {\n // Flush the selected item to the input when the menu is closed\n if (changes.selectedItem) {\n changes = {\n ...changes,\n inputValue: itemToString(changes.selectedItem),\n };\n } else if (changes.inputValue !== '') {\n // Otherwise if no selected value, clear any search from the input\n changes = {\n ...changes,\n inputValue: '',\n };\n }\n }\n\n return changes;\n },\n });\n\n const { inputRef, floatingRef, floatStyles, scrollRef } = useComboboxFloat(filteredOptions, isOpen);\n\n const isAutoSize = width === 'auto';\n const InputComponent = isAutoSize ? AutoSizeInput : Input;\n const placeholder = (isOpen ? itemToString(selectedItem) : null) || placeholderProp;\n\n const loading = props.loading || asyncLoading;\n\n const inputSuffix = (\n <>\n {value !== undefined && value === selectedItem?.value && isClearable && (\n <Icon\n name=\"times\"\n className={styles.clear}\n title={t('combobox.clear.title', 'Clear value')}\n tabIndex={0}\n role=\"button\"\n onClick={() => {\n selectItem(null);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n selectItem(null);\n }\n }}\n />\n )}\n\n <SuffixIcon isLoading={loading || false} isOpen={isOpen} />\n </>\n );\n\n const { Wrapper, wrapperProps } = isAutoSize\n ? {\n Wrapper: 'div',\n wrapperProps: { className: styles.adaptToParent },\n }\n : { Wrapper: React.Fragment };\n\n return (\n <Wrapper {...wrapperProps}>\n <InputComponent\n width={isAutoSize ? undefined : width}\n {...(isAutoSize ? { minWidth, maxWidth } : {})}\n autoFocus={autoFocus}\n onBlur={onBlur}\n prefix={prefixIcon && <Icon name={prefixIcon} />}\n disabled={disabled}\n invalid={invalid}\n className={styles.input}\n suffix={inputSuffix}\n {...getInputProps({\n ref: inputRef,\n onChange: noop, // Empty onCall to avoid TS error https://github.com/downshift-js/downshift/issues/718\n 'aria-labelledby': ariaLabelledBy, // Label should be handled with the Field component\n placeholder,\n 'data-testid': dataTestId,\n })}\n />\n <Portal root={portalContainer}>\n <div\n className={cx(styles.menu, !isOpen && styles.menuClosed)}\n style={{\n ...floatStyles,\n pointerEvents: 'auto', // Override container's pointer-events: none\n }}\n {...getMenuProps({\n ref: floatingRef,\n 'aria-labelledby': ariaLabelledBy,\n })}\n >\n {isOpen && (\n <ComboboxList\n loading={loading}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n selectedItems={selectedItem ? [selectedItem] : []}\n scrollRef={scrollRef}\n getItemProps={getItemProps}\n error={asyncError}\n />\n )}\n </div>\n </Portal>\n </Wrapper>\n );\n};\n","import { css, cx } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { IconButton, IconName, useStyles2 } from '@grafana/ui';\n\ninterface BaseQueryOperationActionProps {\n icon: IconName;\n title: string;\n onClick: (e: React.MouseEvent) => void;\n disabled?: boolean;\n dataTestId?: string;\n}\n\nfunction BaseQueryOperationAction(props: QueryOperationActionProps | QueryOperationToggleActionProps) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={cx(styles.icon, 'active' in props && props.active && styles.active)}>\n <IconButton\n name={props.icon}\n tooltip={props.title}\n className={styles.icon}\n disabled={!!props.disabled}\n onClick={props.onClick}\n type=\"button\"\n data-testid={props.dataTestId ?? selectors.components.QueryEditorRow.actionButton(props.title)}\n {...('active' in props && { 'aria-pressed': props.active })}\n />\n </div>\n );\n}\n\ninterface QueryOperationActionProps extends BaseQueryOperationActionProps {}\nexport function QueryOperationAction(props: QueryOperationActionProps) {\n return <BaseQueryOperationAction {...props} />;\n}\n\ninterface QueryOperationToggleActionProps extends BaseQueryOperationActionProps {\n active: boolean;\n}\nexport const QueryOperationToggleAction = (props: QueryOperationToggleActionProps) => {\n return <BaseQueryOperationAction {...props} />;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n icon: css({\n display: 'flex',\n position: 'relative',\n color: theme.colors.text.secondary,\n }),\n active: css({\n '&:before': {\n display: 'block',\n content: '\" \"',\n position: 'absolute',\n left: -1,\n right: 2,\n height: 3,\n borderRadius: theme.shape.radius.default,\n bottom: -8,\n backgroundImage: theme.colors.gradients.brandHorizontal,\n },\n }),\n };\n};\n","import { Chance } from 'chance';\n\nimport { dateTime } from '@grafana/data';\n\n/**\n * Generates a timestamp string in the format YYYY-MM-DD-xxxxx where xxxxx is a random string\n */\nexport function generateTimestamp(): string {\n const random = new Chance();\n return `${dateTime().format('YYYY-MM-DD')}-${random.string({ length: 5, alpha: true })}`;\n}\n","import { css } from '@emotion/css';\nimport { autoUpdate, useClick, useDismiss, useFloating, useInteractions } from '@floating-ui/react';\nimport { ChangeEvent, forwardRef, useImperativeHandle, useState } from 'react';\n\nimport { GrafanaTheme2, dateTime } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { getPositioningMiddleware } from '../../../utils/floating';\nimport { Props as InputProps, Input } from '../../Input/Input';\nimport { DatePicker } from '../DatePicker/DatePicker';\n\nexport const formatDate = (date: Date | string) => dateTime(date).format('L');\n\n/** @public */\nexport interface DatePickerWithInputProps extends Omit<InputProps, 'value' | 'onChange'> {\n /** Value selected by the DatePicker */\n value?: Date | string;\n /** The minimum date the value can be set to */\n minDate?: Date;\n /** The maximum date the value can be set to */\n maxDate?: Date;\n /** Handles changes when a new date is selected */\n onChange: (value: Date | string) => void;\n /** Hide the calendar when date is selected */\n closeOnSelect?: boolean;\n /** Text that appears when the input has no text */\n placeholder?: string;\n}\n\n/**\n * An input with a calendar view, used to select a date.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/date-time-pickers-datepickerwithinput--docs\n * @public\n */\nexport const DatePickerWithInput = forwardRef<HTMLInputElement, DatePickerWithInputProps>(\n ({ value, minDate, maxDate, onChange, closeOnSelect, placeholder = 'Date', ...rest }, ref) => {\n const [open, setOpen] = useState(false);\n const styles = useStyles2(getStyles);\n const placement = 'bottom-start';\n\n // the order of middleware is important!\n // see https://floating-ui.com/docs/arrow#order\n const middleware = getPositioningMiddleware(placement);\n\n const { context, refs, floatingStyles } = useFloating<HTMLInputElement>({\n open,\n placement,\n onOpenChange: setOpen,\n middleware,\n whileElementsMounted: autoUpdate,\n strategy: 'fixed',\n });\n\n const click = useClick(context);\n const dismiss = useDismiss(context);\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss, click]);\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(ref, () => refs.domReference.current, [\n refs.domReference,\n ]);\n\n return (\n <div className={styles.container}>\n <Input\n ref={refs.setReference}\n type=\"text\"\n autoComplete={'off'}\n placeholder={placeholder}\n value={value ? formatDate(value) : value}\n onChange={(ev: ChangeEvent<HTMLInputElement>) => {\n // Allow resetting the date\n if (ev.target.value === '') {\n onChange('');\n }\n }}\n className={styles.input}\n {...rest}\n {...getReferenceProps()}\n />\n <div className={styles.popover} ref={refs.setFloating} style={floatingStyles} {...getFloatingProps()}>\n <DatePicker\n isOpen={open}\n value={value && typeof value !== 'string' ? value : dateTime().toDate()}\n minDate={minDate}\n maxDate={maxDate}\n onChange={(ev) => {\n onChange(ev);\n if (closeOnSelect) {\n setOpen(false);\n }\n }}\n onClose={() => setOpen(false)}\n />\n </div>\n </div>\n );\n }\n);\n\nDatePickerWithInput.displayName = 'DatePickerWithInput';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n position: 'relative',\n }),\n input: css({\n /* hides the native Calendar picker icon given when using type=date */\n \"input[type='date']::-webkit-inner-spin-button, input[type='date']::-webkit-calendar-picker-indicator\": {\n display: 'none',\n WebkitAppearance: 'none',\n },\n }),\n popover: css({\n zIndex: theme.zIndex.tooltip,\n }),\n };\n};\n","import { Placement } from '@popperjs/core';\nimport { Component } from 'react';\n\nimport { PopoverContent } from './types';\n\ntype PopperControllerRenderProp = (\n showPopper: () => void,\n hidePopper: () => void,\n popperProps: {\n show: boolean;\n placement: Placement;\n content: PopoverContent;\n }\n) => JSX.Element;\n\ninterface Props {\n placement?: Placement;\n content: PopoverContent;\n className?: string;\n children: PopperControllerRenderProp;\n hideAfter?: number;\n}\n\ninterface State {\n show: boolean;\n}\n\nclass PopoverController extends Component<Props, State> {\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n state = { show: false };\n\n showPopper = () => {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n this.setState({ show: true });\n };\n\n hidePopper = () => {\n this.hideTimeout = setTimeout(() => {\n this.setState({ show: false });\n }, this.props.hideAfter);\n };\n\n render() {\n const { children, content, placement = 'auto' } = this.props;\n const { show } = this.state;\n\n return children(this.showPopper, this.hidePopper, {\n show,\n placement,\n content,\n });\n }\n}\n\nexport { PopoverController };\n","import { AnyAction, createAction } from '@reduxjs/toolkit';\nimport { cloneDeep } from 'lodash';\n\nimport { NavIndex, NavModel, NavModelItem } from '@grafana/data';\nimport config from 'app/core/config';\n\nimport { getNavSubTitle, getNavTitle } from '../utils/navBarItem-translations';\n\nexport const HOME_NAV_ID = 'home';\n\nexport function buildInitialState(): NavIndex {\n const navIndex: NavIndex = {};\n const rootNodes = cloneDeep(config.bootData.navTree);\n const homeNav = rootNodes.find((node) => node.id === HOME_NAV_ID);\n const otherRootNodes = rootNodes.filter((node) => node.id !== HOME_NAV_ID);\n\n if (homeNav) {\n buildNavIndex(navIndex, [homeNav]);\n }\n // set home as parent for the other rootNodes\n // need to use the translated home node from the navIndex\n buildNavIndex(navIndex, otherRootNodes, navIndex[HOME_NAV_ID]);\n\n return navIndex;\n}\n\nfunction buildNavIndex(navIndex: NavIndex, children: NavModelItem[], parentItem?: NavModelItem) {\n const translatedChildren: NavModelItem[] = [];\n\n for (const node of children) {\n const translatedNode: NavModelItem = {\n ...node,\n text: getNavTitle(node.id) ?? node.text,\n subTitle: getNavSubTitle(node.id) ?? node.subTitle,\n emptyMessage: getNavTitle(node.emptyMessageId),\n parentItem: parentItem,\n };\n\n if (translatedNode.id) {\n navIndex[translatedNode.id] = translatedNode;\n }\n\n if (translatedNode.children) {\n buildNavIndex(navIndex, translatedNode.children, translatedNode);\n }\n translatedChildren.push(translatedNode);\n }\n\n // need to update the parentItem children with the new translated children\n if (parentItem) {\n parentItem.children = translatedChildren;\n }\n\n navIndex['not-found'] = { ...buildWarningNav('Page not found', '404 Error').node };\n navIndex['error'] = { ...buildWarningNav('Page error', 'An unexpected error').node };\n}\n\nfunction buildWarningNav(text: string, subTitle?: string): NavModel {\n const node = {\n text,\n subTitle,\n icon: 'exclamation-triangle' as const,\n };\n return {\n node: node,\n main: node,\n };\n}\n\nexport const initialState: NavIndex = {};\n\nexport const updateNavIndex = createAction<NavModelItem>('navIndex/updateNavIndex');\n// Since the configuration subtitle includes the organization name, we include this action to update the org name if it changes.\nexport const updateConfigurationSubtitle = createAction<string>('navIndex/updateConfigurationSubtitle');\n\nexport const removeNavIndex = createAction<string>('navIndex/removeNavIndex');\n\nexport const getItemWithNewSubTitle = (item: NavModelItem, subTitle: string): NavModelItem => ({\n ...item,\n parentItem: {\n ...item.parentItem,\n text: item.parentItem?.text ?? '',\n subTitle,\n },\n});\n\n// Redux Toolkit uses ImmerJs as part of their solution to ensure that state objects are not mutated.\n// ImmerJs has an autoFreeze option that freezes objects from change which means this reducer can't be migrated to createSlice\n// because the state would become frozen and during run time we would get errors because Angular would try to mutate\n// the frozen state.\n// https://github.com/reduxjs/redux-toolkit/issues/242\nexport const navIndexReducer = (state: NavIndex = initialState, action: AnyAction): NavIndex => {\n if (updateNavIndex.match(action)) {\n const newPages: NavIndex = {};\n const payload = action.payload;\n\n function addNewPages(node: NavModelItem) {\n if (node.children) {\n for (const child of node.children) {\n newPages[child.id!] = {\n ...child,\n parentItem: node,\n };\n }\n }\n if (node.parentItem) {\n addNewPages(node.parentItem);\n }\n }\n addNewPages(payload);\n\n return { ...state, ...newPages };\n } else if (updateConfigurationSubtitle.match(action)) {\n const subTitle = `Organization: ${action.payload}`;\n\n return {\n ...state,\n cfg: { ...state.cfg, subTitle },\n datasources: getItemWithNewSubTitle(state.datasources, subTitle),\n correlations: getItemWithNewSubTitle(state.correlations, subTitle),\n users: getItemWithNewSubTitle(state.users, subTitle),\n teams: getItemWithNewSubTitle(state.teams, subTitle),\n plugins: getItemWithNewSubTitle(state.plugins, subTitle),\n 'org-settings': getItemWithNewSubTitle(state['org-settings'], subTitle),\n };\n } else if (removeNavIndex.match(action)) {\n delete state[action.payload];\n }\n\n return state;\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useAsync, useDebounce } from 'react-use';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { FetchError, isFetchError } from '@grafana/runtime';\nimport { LibraryPanel } from '@grafana/schema';\nimport { Button, Field, Input, Modal, Stack } from '@grafana/ui';\nimport { FolderPicker } from 'app/core/components/Select/FolderPicker';\n\nimport { PanelModel } from '../../../dashboard/state/PanelModel';\nimport { getLibraryPanelByName } from '../../state/api';\nimport { usePanelSave } from '../../utils/usePanelSave';\n\ninterface AddLibraryPanelContentsProps {\n onDismiss?: () => void;\n panel: PanelModel;\n initialFolderUid?: string;\n onCreateLibraryPanel?: (libPanel: LibraryPanel) => void;\n}\n\nexport const AddLibraryPanelContents = ({\n panel,\n initialFolderUid,\n onCreateLibraryPanel,\n onDismiss,\n}: AddLibraryPanelContentsProps) => {\n const [folderUid, setFolderUid] = useState(initialFolderUid);\n const [panelName, setPanelName] = useState(panel.title);\n const [debouncedPanelName, setDebouncedPanelName] = useState(panel.title);\n const [waiting, setWaiting] = useState(false);\n\n useEffect(() => setWaiting(true), [panelName]);\n useDebounce(() => setDebouncedPanelName(panelName), 350, [panelName]);\n\n const { saveLibraryPanel } = usePanelSave();\n\n const onCreate = useCallback(() => {\n panel.libraryPanel = { uid: '', name: panelName };\n\n saveLibraryPanel(panel, folderUid!).then((res: LibraryPanel | FetchError) => {\n if (!isFetchError(res)) {\n onDismiss?.();\n onCreateLibraryPanel?.(res);\n } else {\n panel.libraryPanel = undefined;\n }\n });\n }, [panel, panelName, saveLibraryPanel, folderUid, onDismiss, onCreateLibraryPanel]);\n\n const isValidName = useAsync(async () => {\n try {\n return !(await getLibraryPanelByName(panelName)).some((lp) => lp.folderUid === folderUid);\n } catch (err) {\n if (isFetchError(err)) {\n err.isHandled = true;\n }\n return true;\n } finally {\n setWaiting(false);\n }\n }, [debouncedPanelName, folderUid]);\n\n const invalidInput =\n !isValidName?.value && isValidName.value !== undefined && panelName === debouncedPanelName && !waiting;\n\n return (\n <>\n <Field\n label={t('library-panel.add-modal.name', 'Library panel name')}\n invalid={invalidInput}\n error={invalidInput ? t('library-panel.add-modal.error', 'Library panel with this name already exists') : ''}\n >\n <Input\n id=\"share-panel-library-panel-name-input\"\n name=\"name\"\n value={panelName}\n onChange={(e) => setPanelName(e.currentTarget.value)}\n />\n </Field>\n <Field\n label={t('library-panel.add-modal.folder', 'Save in folder')}\n description={t(\n 'library-panel.add-modal.folder-description',\n 'Library panel permissions are derived from the folder permissions'\n )}\n >\n <FolderPicker onChange={(uid) => setFolderUid(uid)} value={folderUid} />\n </Field>\n <Stack gap={1} justifyContent={'start'}>\n <Button onClick={onCreate} disabled={invalidInput}>\n <Trans i18nKey=\"share-panel.new-library-panel.create-button\">Create library panel</Trans>\n </Button>\n <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n <Trans i18nKey=\"share-panel.new-library-panel.cancel-button\">Cancel</Trans>\n </Button>\n </Stack>\n </>\n );\n};\n\ninterface Props extends AddLibraryPanelContentsProps {\n isOpen?: boolean;\n}\n\nexport const AddLibraryPanelModal = ({ isOpen = false, panel, initialFolderUid, ...props }: Props) => {\n return (\n <Modal\n title={t('library-panels.add-library-panel-modal.title-create-library-panel', 'Create library panel')}\n isOpen={isOpen}\n onDismiss={props.onDismiss}\n >\n <AddLibraryPanelContents panel={panel} initialFolderUid={initialFolderUid} onDismiss={props.onDismiss} />\n </Modal>\n );\n};\n","import { useLayoutEffect } from 'react';\nimport * as React from 'react';\n\nimport { useGrafana } from 'app/core/context/GrafanaContext';\n\nexport interface AppChromeUpdateProps {\n actions?: React.ReactNode;\n breadcrumbActions?: React.ReactNode;\n}\n/**\n * This is the way core pages add actions to the second chrome toolbar\n */\nexport const AppChromeUpdate = React.memo<AppChromeUpdateProps>(\n ({ actions, breadcrumbActions }: AppChromeUpdateProps) => {\n const { chrome } = useGrafana();\n\n // Unmount cleanup\n useLayoutEffect(() => {\n return () => {\n chrome.update({ actions: undefined, breadcrumbActions: undefined });\n };\n }, [chrome]);\n\n // We use useLayoutEffect here to make sure that the chrome is updated before the page is rendered\n // This prevents flickering actions when going from one dashboard to another for example\n useLayoutEffect(() => {\n chrome.update({ actions, breadcrumbActions });\n });\n\n return null;\n }\n);\n\nAppChromeUpdate.displayName = 'TopNavUpdate';\n","import { css, cx } from '@emotion/css';\nimport { HTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\n\n/**\n * @public\n */\nexport interface CardInnerProps {\n href?: string;\n children?: React.ReactNode;\n}\n\n/** @deprecated This component will be removed in a future release */\nconst CardInner = ({ children, href }: CardInnerProps) => {\n const { inner } = useStyles2(getCardInnerStyles);\n return href ? (\n <a className={inner} href={href}>\n {children}\n </a>\n ) : (\n <>{children}</>\n );\n};\n\nconst getCardInnerStyles = (theme: GrafanaTheme2) => ({\n inner: css({\n display: 'flex',\n width: '100%',\n padding: theme.spacing(2),\n }),\n});\n\n/**\n * @public\n */\nexport interface CardContainerProps extends HTMLAttributes<HTMLOrSVGElement>, CardInnerProps {\n /** Disable pointer events for the Card, e.g. click events */\n disableEvents?: boolean;\n /** No style change on hover */\n disableHover?: boolean;\n /** Makes the card selectable, set to \"true\" to apply selected styles */\n isSelected?: boolean;\n /** Custom container styles */\n className?: string;\n /** Remove the bottom margin */\n noMargin?: boolean;\n}\n\n/** @deprecated Using `CardContainer` directly is discouraged and should be replaced with `Card` */\nexport const CardContainer = ({\n children,\n disableEvents,\n disableHover,\n isSelected,\n className,\n href,\n noMargin,\n ...props\n}: CardContainerProps) => {\n const { oldContainer } = useStyles2(\n getCardContainerStyles,\n disableEvents,\n disableHover,\n isSelected,\n undefined,\n noMargin\n );\n\n return (\n <div {...props} className={cx(oldContainer, className)}>\n <CardInner href={href}>{children}</CardInner>\n </div>\n );\n};\n\nexport const getCardContainerStyles = (\n theme: GrafanaTheme2,\n disabled = false,\n disableHover = false,\n isSelected?: boolean,\n isCompact?: boolean,\n noMargin = false\n) => {\n const isSelectable = isSelected !== undefined;\n\n return {\n container: css({\n display: 'grid',\n position: 'relative',\n gridTemplateColumns: 'auto 1fr auto',\n gridTemplateRows: '1fr auto auto auto',\n gridAutoColumns: '1fr',\n gridAutoFlow: 'row',\n gridTemplateAreas: `\n \"Figure Heading Tags\"\n \"Figure Meta Tags\"\n \"Figure Description Tags\"\n \"Figure Actions Secondary\"`,\n width: '100%',\n padding: theme.spacing(isCompact ? 1 : 2),\n background: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n marginBottom: theme.spacing(noMargin ? 0 : 1),\n pointerEvents: disabled ? 'none' : 'auto',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {\n duration: theme.transitions.duration.short,\n }),\n },\n\n ...(!disableHover && {\n '&:hover': {\n background: theme.colors.emphasize(theme.colors.background.secondary, 0.03),\n cursor: 'pointer',\n zIndex: 1,\n },\n '&:focus': getFocusStyles(theme),\n }),\n\n ...(isSelectable && {\n cursor: 'pointer',\n }),\n\n ...(isSelected && {\n outline: `solid 2px ${theme.colors.primary.border}`,\n }),\n }),\n oldContainer: css({\n display: 'flex',\n width: '100%',\n background: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n position: 'relative',\n pointerEvents: disabled ? 'none' : 'auto',\n marginBottom: theme.spacing(noMargin ? 0 : 1),\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {\n duration: theme.transitions.duration.short,\n }),\n },\n\n ...(!disableHover && {\n '&:hover': {\n background: theme.colors.emphasize(theme.colors.background.secondary, 0.03),\n cursor: 'pointer',\n zIndex: 1,\n },\n '&:focus': getFocusStyles(theme),\n }),\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport interface CallToActionCardProps {\n message?: string | JSX.Element;\n callToActionElement: JSX.Element;\n footer?: string | JSX.Element;\n className?: string;\n}\n\n/**\n * @deprecated Use `<EmptyState variant=\"call-to-action\" />` instead.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-deprecated-calltoactioncard--docs\n */\nexport const CallToActionCard = ({ message, callToActionElement, footer, className }: CallToActionCardProps) => {\n const css = useStyles2(getStyles);\n\n return (\n <div className={cx([css.wrapper, className])}>\n {message && <div className={css.message}>{message}</div>}\n {callToActionElement}\n {footer && <div className={css.footer}>{footer}</div>}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n label: 'call-to-action-card',\n background: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1,\n padding: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(3, 1),\n },\n }),\n message: css({\n marginBottom: theme.spacing(3),\n fontStyle: 'italic',\n }),\n footer: css({\n marginTop: theme.spacing(3),\n }),\n});\n","import {\n FieldConfigEditorBuilder,\n FieldType,\n identityOverrideProcessor,\n SelectableValue,\n StandardEditorProps,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { AxisColorMode, AxisConfig, AxisPlacement, ScaleDistribution, ScaleDistributionConfig } from '@grafana/schema';\n\nimport { Field } from '../../components/Forms/Field';\nimport { RadioButtonGroup } from '../../components/Forms/RadioButtonGroup/RadioButtonGroup';\nimport { Input } from '../../components/Input/Input';\nimport { Stack } from '../../components/Layout/Stack/Stack';\nimport { Select } from '../../components/Select/Select';\nimport { getGraphFieldOptions } from '../../components/uPlot/config';\n\n/**\n * @alpha\n */\nexport function addAxisConfig(builder: FieldConfigEditorBuilder<AxisConfig>, defaultConfig: AxisConfig) {\n // options for axis appearance\n addAxisPlacement(builder);\n const category = [t('grafana-ui.builder.axis.category-axis', 'Axis')];\n\n builder.addTextInput({\n path: 'axisLabel',\n name: t('grafana-ui.builder.axis.name-label', 'Label'),\n category,\n defaultValue: '',\n settings: {\n placeholder: t('grafana-ui.builder.axis.placeholder-label', 'Optional text'),\n expandTemplateVars: true,\n },\n showIf: (c) => c.axisPlacement !== AxisPlacement.Hidden,\n // Do not apply default settings to time and string fields which are used as x-axis fields in Time series and Bar chart panels\n shouldApply: (f) => f.type !== FieldType.time && f.type !== FieldType.string,\n });\n\n addAxisWidth(builder);\n\n builder\n .addRadio({\n path: 'axisGridShow',\n name: t('grafana-ui.builder.axis.name-grid-lines', 'Show grid lines'),\n category,\n defaultValue: undefined,\n settings: {\n options: [\n { value: undefined, label: t('grafana-ui.builder.axis.grid-line-options.label-auto', 'Auto') },\n { value: true, label: t('grafana-ui.builder.axis.grid-line-options.label-on', 'On') },\n { value: false, label: t('grafana-ui.builder.axis.grid-line-options.label-off', 'Off') },\n ],\n },\n showIf: (c) => c.axisPlacement !== AxisPlacement.Hidden,\n })\n .addRadio({\n path: 'axisColorMode',\n name: t('grafana-ui.builder.axis.color-label', 'Color'),\n category,\n defaultValue: AxisColorMode.Text,\n settings: {\n options: [\n { value: AxisColorMode.Text, label: t('grafana-ui.builder.axis.color-options.label-text', 'Text') },\n { value: AxisColorMode.Series, label: t('grafana-ui.builder.axis.color-options.label-series', 'Series') },\n ],\n },\n showIf: (c) => c.axisPlacement !== AxisPlacement.Hidden,\n })\n .addBooleanSwitch({\n path: 'axisBorderShow',\n name: t('grafana-ui.builder.axis.name-show-border', 'Show border'),\n category,\n defaultValue: false,\n showIf: (c) => c.axisPlacement !== AxisPlacement.Hidden,\n });\n\n // options for scale range\n builder\n .addCustomEditor<void, ScaleDistributionConfig>({\n id: 'scaleDistribution',\n path: 'scaleDistribution',\n name: t('grafana-ui.builder.axis.name-scale', 'Scale'),\n category,\n editor: ScaleDistributionEditor,\n override: ScaleDistributionEditor,\n defaultValue: { type: ScaleDistribution.Linear },\n shouldApply: (f) => f.type === FieldType.number,\n process: identityOverrideProcessor,\n })\n .addBooleanSwitch({\n path: 'axisCenteredZero',\n name: t('grafana-ui.builder.axis.name-centered-zero', 'Centered zero'),\n category,\n defaultValue: false,\n showIf: (c) => c.scaleDistribution?.type !== ScaleDistribution.Log,\n })\n .addNumberInput({\n path: 'axisSoftMin',\n name: t('grafana-ui.builder.axis.name-soft-min', 'Soft min'),\n defaultValue: defaultConfig.axisSoftMin,\n category,\n settings: {\n placeholder: t('grafana-ui.builder.axis.placeholder-soft-min', 'See: Standard options > Min'),\n },\n })\n .addNumberInput({\n path: 'axisSoftMax',\n name: t('grafana-ui.builder.axis.name-soft-max', 'Soft max'),\n defaultValue: defaultConfig.axisSoftMax,\n category,\n settings: {\n placeholder: t('grafana-ui.builder.axis.placeholder-soft-max', 'See: Standard options > Max'),\n },\n });\n}\n\nconst LOG_DISTRIBUTION_OPTIONS: Array<SelectableValue<number>> = [\n {\n label: '2',\n value: 2,\n },\n {\n label: '10',\n value: 10,\n },\n];\n\n/**\n * @internal\n */\nexport const ScaleDistributionEditor = ({ value, onChange }: StandardEditorProps<ScaleDistributionConfig>) => {\n const type = value?.type ?? ScaleDistribution.Linear;\n const log = value?.log ?? 2;\n const DISTRIBUTION_OPTIONS: Array<SelectableValue<ScaleDistribution>> = [\n {\n label: t('grafana-ui.builder.axis.scale-distribution-editor.distribution-options.label-linear', 'Linear'),\n value: ScaleDistribution.Linear,\n },\n {\n label: t('grafana-ui.builder.axis.scale-distribution-editor.distribution-options.label-log', 'Logarithmic'),\n value: ScaleDistribution.Log,\n },\n {\n label: t('grafana-ui.builder.axis.scale-distribution-editor.distribution-options.label-symlog', 'Symlog'),\n value: ScaleDistribution.Symlog,\n },\n ];\n\n return (\n <Stack direction=\"column\" gap={2}>\n <RadioButtonGroup\n value={type}\n options={DISTRIBUTION_OPTIONS}\n onChange={(v) => {\n onChange({\n ...value,\n type: v!,\n log: v === ScaleDistribution.Linear ? undefined : log,\n });\n }}\n />\n {(type === ScaleDistribution.Log || type === ScaleDistribution.Symlog) && (\n <Field label={t('grafana-ui.axis-builder.log-base', 'Log base')}>\n <Select\n options={LOG_DISTRIBUTION_OPTIONS}\n value={log}\n onChange={(v) => {\n onChange({\n ...value,\n log: v.value!,\n });\n }}\n />\n </Field>\n )}\n {type === ScaleDistribution.Symlog && (\n <Field label={t('grafana-ui.axis-builder.linear-threshold', 'Linear threshold')} style={{ marginBottom: 0 }}>\n <Input\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"1\"\n value={value?.linearThreshold}\n onChange={(v) => {\n onChange({\n ...value,\n linearThreshold: Number(v.currentTarget.value),\n });\n }}\n />\n </Field>\n )}\n </Stack>\n );\n};\n\n/** @internal */\nexport function addAxisWidth(builder: FieldConfigEditorBuilder<AxisConfig>) {\n builder.addNumberInput({\n path: 'axisWidth',\n name: t('grafana-ui.builder.axis.name-width', 'Width'),\n category: [t('grafana-ui.builder.axis.category-axis', 'Axis')],\n settings: {\n placeholder: t('grafana-ui.builder.axis.placeholder-width', 'Auto'),\n },\n showIf: (c) => c.axisPlacement !== AxisPlacement.Hidden,\n });\n}\n\n/** @internal */\nexport function addAxisPlacement(\n builder: FieldConfigEditorBuilder<AxisConfig>,\n optionsFilter = (placement: AxisPlacement) => true\n) {\n const graphFieldOptions = getGraphFieldOptions();\n builder.addRadio({\n path: 'axisPlacement',\n name: t('grafana-ui.builder.axis.name-placement', 'Placement'),\n category: [t('grafana-ui.builder.axis.category-axis', 'Axis')],\n defaultValue: graphFieldOptions.axisPlacement[0].value,\n settings: {\n options: graphFieldOptions.axisPlacement.filter((placement) => optionsFilter(placement.value!)),\n },\n });\n}\n","import { ReactElement } from 'react';\nimport * as React from 'react';\n\n/** Returns the ID value of the first, and only, child element */\nexport function getChildId(children: ReactElement): string | undefined {\n let inputId: unknown;\n\n // Get the first, and only, child to retrieve form input's id\n const child = React.Children.only(children);\n\n // Retrieve input's id to apply on the label for correct click interaction\n // For some components (like Select), we want to get the ID from a different prop\n if ('id' in child?.props) {\n inputId = child.props.id;\n } else if ('inputId' in child.props) {\n inputId = child?.props.inputId;\n }\n\n return typeof inputId === 'string' ? inputId : undefined;\n}\n\n/**\n * Given react node or function returns element accordingly\n *\n * @param itemToRender\n * @param props props to be passed to the function if item provided as such\n */\nexport function renderOrCallToRender<TProps = {}>(\n itemToRender: ((props: TProps) => React.ReactNode) | React.ReactNode,\n props?: TProps\n): React.ReactNode {\n if (React.isValidElement(itemToRender) || typeof itemToRender === 'string' || typeof itemToRender === 'number') {\n return itemToRender;\n }\n\n if (typeof itemToRender === 'function' && props) {\n return itemToRender(props);\n }\n\n throw new Error(`${itemToRender} is not a React element nor a function that returns React element`);\n}\n","import { isExpressionReference } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\n\nimport { ExpressionQuery, ExpressionQueryType, ReducerType } from './types';\n\nexport const isExpressionQuery = (dataQuery?: DataQuery): dataQuery is ExpressionQuery => {\n if (!dataQuery) {\n return false;\n }\n\n if (isExpressionReference(dataQuery.datasource)) {\n return true;\n }\n\n const expression = dataQuery as ExpressionQuery;\n\n if (typeof expression.type !== 'string') {\n return false;\n }\n return Object.values(ExpressionQueryType).includes(expression.type);\n};\n\nexport function isReducerType(value: string): value is ReducerType {\n return [\n 'avg',\n 'min',\n 'max',\n 'sum',\n 'count',\n 'last',\n 'median',\n 'diff',\n 'diff_abs',\n 'percent_diff',\n 'percent_diff_abs',\n 'count_non_null',\n ].includes(value);\n}\n","import { skipToken } from '@reduxjs/toolkit/query';\nimport { useEffect, useMemo } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { isGrafanaRulesSource } from 'app/features/alerting/unified/utils/datasource';\nimport {\n CombinedRule,\n RuleGroupIdentifierV2,\n RuleIdentifier,\n RuleWithLocation,\n RulesSource,\n} from 'app/types/unified-alerting';\nimport { RulerRuleGroupDTO } from 'app/types/unified-alerting-dto';\n\nimport { alertRuleApi } from '../api/alertRuleApi';\nimport { featureDiscoveryApi } from '../api/featureDiscoveryApi';\nimport { getDataSourceByName } from '../utils/datasource';\nimport { groupIdentifier } from '../utils/groupIdentifier';\nimport * as ruleId from '../utils/rule-id';\nimport { isCloudRuleIdentifier, isGrafanaRuleIdentifier, isPrometheusRuleIdentifier } from '../utils/rules';\n\nimport { attachRulerRulesToCombinedRules, combineRulesNamespace } from './useCombinedRuleNamespaces';\nimport { stringifyFolder, useFolder } from './useFolder';\n\nexport function useCloudCombinedRulesMatching(\n ruleName: string,\n ruleSourceName: string,\n filter?: { namespace?: string; groupName?: string }\n): { loading: boolean; error?: unknown; rules?: CombinedRule[] } {\n const dsSettings = getDataSourceByName(ruleSourceName);\n const { dsFeatures, isLoadingDsFeatures } = useDataSourceFeatures(ruleSourceName);\n\n const {\n currentData,\n isLoading: isLoadingPromRules,\n error: promRuleNsError,\n } = alertRuleApi.endpoints.prometheusRuleNamespaces.useQuery({\n ruleSourceName: ruleSourceName,\n ruleName: ruleName,\n namespace: filter?.namespace,\n groupName: filter?.groupName,\n });\n\n const [fetchRulerRuleGroup] = alertRuleApi.endpoints.getRuleGroupForNamespace.useLazyQuery();\n\n const { loading, error, value } = useAsync(async () => {\n if (!dsSettings) {\n throw new Error('Unable to obtain data source settings');\n }\n\n if (promRuleNsError) {\n throw new Error('Unable to obtain Prometheus rules');\n }\n const promRuleNs = currentData || [];\n\n const rulerGroups: RulerRuleGroupDTO[] = [];\n if (dsFeatures?.rulerConfig) {\n const rulerConfig = dsFeatures.rulerConfig;\n\n const nsGroups = promRuleNs\n .map((namespace) => namespace.groups.map((group) => ({ namespace: namespace, group: group })))\n .flat();\n\n // RTK query takes care of deduplication\n await Promise.allSettled(\n nsGroups.map(async (nsGroup) => {\n const rulerGroup = await fetchRulerRuleGroup({\n rulerConfig: rulerConfig,\n namespace: nsGroup.namespace.name,\n group: nsGroup.group.name,\n }).unwrap();\n rulerGroups.push(rulerGroup);\n })\n );\n }\n\n // TODO Join with ruler rules\n const namespaces = promRuleNs.map((ns) => attachRulerRulesToCombinedRules(dsSettings, ns, rulerGroups));\n const rules = namespaces.flatMap((ns) => ns.groups.flatMap((group) => group.rules));\n\n return rules;\n }, [dsSettings, dsFeatures, isLoadingPromRules, promRuleNsError, currentData, fetchRulerRuleGroup]);\n\n return { loading: isLoadingDsFeatures || loading, error: error, rules: value };\n}\n\ninterface RequestState<T> {\n result?: T;\n loading: boolean;\n error?: unknown;\n}\n\ninterface Props {\n ruleIdentifier: RuleIdentifier;\n limitAlerts?: number;\n}\n\n// Many places still use the old way of fetching code so synchronizing cache expiration is difficult\n// Hence, this hook fetches a fresh version of a rule most of the time\n// Due to enabled filtering for Prometheus and Ruler rules it shouldn't be a problem\nexport function useCombinedRule({ ruleIdentifier, limitAlerts }: Props): RequestState<CombinedRule> {\n const { ruleSourceName } = ruleIdentifier;\n const ruleSource = getRulesSourceFromIdentifier(ruleIdentifier);\n\n const { dsFeatures, isLoadingDsFeatures } = useDataSourceFeatures(ruleSourceName);\n const {\n loading: isLoadingRuleLocation,\n error: ruleLocationError,\n result: ruleLocation,\n } = useRuleLocation(ruleIdentifier);\n\n const {\n currentData: promRuleNs = [],\n isLoading: isLoadingPromRules,\n error: promRuleNsError,\n } = alertRuleApi.endpoints.prometheusRuleNamespaces.useQuery(\n {\n ruleSourceName: ruleIdentifier.ruleSourceName,\n namespace: ruleLocation?.namespace,\n groupName: ruleLocation?.group,\n ruleName: ruleLocation?.ruleName,\n limitAlerts,\n },\n {\n skip: !ruleLocation || isLoadingRuleLocation,\n refetchOnMountOrArgChange: true,\n }\n );\n // in case of Grafana folder, we need to use the folder name instead of uid, as in promrules we don't use uid\n const isGrafanaRule = isGrafanaRulesSource(ruleSourceName);\n const folder = useFolder(isGrafanaRule ? ruleLocation?.namespace : undefined);\n const namespaceName = isGrafanaRule && folder.folder ? stringifyFolder(folder.folder) : ruleLocation?.namespace;\n\n const [\n fetchRulerRuleGroup,\n { currentData: rulerRuleGroup, isLoading: isLoadingRulerGroup, error: rulerRuleGroupError },\n ] = alertRuleApi.endpoints.getRuleGroupForNamespace.useLazyQuery();\n\n useEffect(() => {\n if (!dsFeatures?.rulerConfig || !ruleLocation) {\n return;\n }\n\n fetchRulerRuleGroup({\n rulerConfig: dsFeatures.rulerConfig,\n namespace: ruleLocation.namespace,\n group: ruleLocation.group,\n });\n }, [dsFeatures, fetchRulerRuleGroup, ruleLocation]);\n\n const rule = useMemo(() => {\n if (!ruleSource || !ruleLocation) {\n return;\n }\n\n const rulerConfig = rulerRuleGroup && namespaceName ? { [namespaceName]: [rulerRuleGroup] } : {};\n\n const combinedNamespaces = combineRulesNamespace(ruleSource, promRuleNs, rulerConfig);\n const combinedRules = combinedNamespaces.flatMap((ns) => ns.groups).flatMap((group) => group.rules);\n\n const matchingRule = combinedRules.find((rule) =>\n ruleId.equal(ruleId.fromCombinedRule(ruleSourceName, rule), ruleIdentifier)\n );\n\n return matchingRule;\n }, [ruleIdentifier, ruleSourceName, promRuleNs, rulerRuleGroup, ruleSource, ruleLocation, namespaceName]);\n\n return {\n loading: isLoadingRuleLocation || isLoadingDsFeatures || isLoadingPromRules || isLoadingRulerGroup,\n error: ruleLocationError ?? promRuleNsError ?? rulerRuleGroupError,\n result: rule,\n };\n}\n\nexport interface RuleLocation {\n datasource: string;\n namespace: string;\n group: string;\n ruleName: string;\n groupIdentifier: RuleGroupIdentifierV2;\n}\n\nexport function useRuleLocation(ruleIdentifier: RuleIdentifier): RequestState<RuleLocation> {\n const validIdentifier = (() => {\n if (isGrafanaRuleIdentifier(ruleIdentifier) && ruleIdentifier.uid !== '') {\n return { uid: ruleIdentifier.uid };\n }\n return skipToken;\n })();\n\n const { isLoading, currentData, error, isUninitialized } = alertRuleApi.endpoints.getAlertRule.useQuery(\n validIdentifier,\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n return useMemo(() => {\n if (isPrometheusRuleIdentifier(ruleIdentifier) || isCloudRuleIdentifier(ruleIdentifier)) {\n try {\n return {\n result: {\n datasource: ruleIdentifier.ruleSourceName,\n namespace: ruleIdentifier.namespace,\n group: ruleIdentifier.groupName,\n ruleName: ruleIdentifier.ruleName,\n groupIdentifier: groupIdentifier.fromRuleIdentifier(ruleIdentifier),\n } satisfies RuleLocation,\n loading: false,\n };\n } catch (error) {\n return { loading: false, error };\n }\n }\n\n if (isGrafanaRuleIdentifier(ruleIdentifier)) {\n if (isLoading || isUninitialized) {\n return { loading: true };\n }\n\n if (error) {\n return { loading: false, error };\n }\n if (currentData) {\n return {\n result: {\n datasource: ruleIdentifier.ruleSourceName,\n namespace: currentData.grafana_alert.namespace_uid,\n group: currentData.grafana_alert.rule_group,\n ruleName: currentData.grafana_alert.title,\n groupIdentifier: {\n namespace: { uid: currentData.grafana_alert.namespace_uid },\n groupName: currentData.grafana_alert.rule_group,\n groupOrigin: 'grafana',\n },\n } satisfies RuleLocation,\n loading: false,\n };\n }\n\n // In theory, this should never happen\n return {\n loading: false,\n error: new Error(`Unable to obtain rule location for rule ${ruleIdentifier.uid}`),\n };\n }\n\n return {\n loading: false,\n error: new Error('Unsupported rule identifier'),\n };\n }, [ruleIdentifier, isLoading, isUninitialized, error, currentData]);\n}\n\nfunction getRulesSourceFromIdentifier(ruleIdentifier: RuleIdentifier): RulesSource | undefined {\n if (isGrafanaRuleIdentifier(ruleIdentifier)) {\n return 'grafana';\n }\n\n return getDataSourceByName(ruleIdentifier.ruleSourceName);\n}\n\n// This Hook fetches rule definition from the Ruler API only\nexport function useRuleWithLocation({\n ruleIdentifier,\n}: {\n ruleIdentifier: RuleIdentifier;\n}): RequestState<RuleWithLocation> {\n const ruleSource = getRulesSourceFromIdentifier(ruleIdentifier);\n\n const { data: dsFeatures, isLoading: isLoadingDsFeatures } =\n featureDiscoveryApi.endpoints.discoverDsFeatures.useQuery({\n rulesSourceName: ruleIdentifier.ruleSourceName,\n });\n\n const {\n loading: isLoadingRuleLocation,\n error: ruleLocationError,\n result: ruleLocation,\n } = useRuleLocation(ruleIdentifier);\n\n const [\n fetchRulerRuleGroup,\n {\n currentData: rulerRuleGroup,\n isLoading: isLoadingRulerGroup,\n isUninitialized: isUninitializedRulerGroup,\n error: rulerRuleGroupError,\n },\n ] = alertRuleApi.endpoints.getRuleGroupForNamespace.useLazyQuery();\n\n useEffect(() => {\n if (!dsFeatures?.rulerConfig || !ruleLocation) {\n return;\n }\n\n fetchRulerRuleGroup({\n rulerConfig: dsFeatures.rulerConfig,\n namespace: ruleLocation.namespace,\n group: ruleLocation.group,\n });\n }, [dsFeatures, fetchRulerRuleGroup, ruleLocation]);\n\n const ruleWithLocation = useMemo(() => {\n const { ruleSourceName } = ruleIdentifier;\n if (!rulerRuleGroup || !ruleSource || !ruleLocation) {\n return;\n }\n\n const rule = rulerRuleGroup.rules.find((rule) => {\n const id = ruleId.fromRulerRule(ruleSourceName, ruleLocation.namespace, ruleLocation.group, rule);\n return ruleId.equal(id, ruleIdentifier);\n });\n\n if (!rule) {\n return;\n }\n\n return {\n ruleSourceName: ruleSourceName,\n group: rulerRuleGroup,\n namespace: ruleLocation.namespace,\n rule: rule,\n };\n }, [ruleIdentifier, rulerRuleGroup, ruleSource, ruleLocation]);\n\n return {\n loading: isLoadingRuleLocation || isLoadingDsFeatures || isLoadingRulerGroup || isUninitializedRulerGroup,\n error: ruleLocationError ?? rulerRuleGroupError,\n result: ruleWithLocation,\n };\n}\n\nexport function useDataSourceFeatures(dataSourceName: string) {\n const { currentData: dsFeatures, isLoading: isLoadingDsFeatures } =\n featureDiscoveryApi.endpoints.discoverDsFeatures.useQuery({ rulesSourceName: dataSourceName });\n\n return { isLoadingDsFeatures, dsFeatures };\n}\n","import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert } from '@grafana/ui';\n\nconst selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard;\n\nexport const UnsupportedTemplateVariablesAlert = ({ showDescription = true }: { showDescription?: boolean }) => {\n return (\n <Alert\n severity=\"warning\"\n title={t(\n 'public-dashboard.modal-alerts.unsupported-template-variable-alert-title',\n 'Template variables are not supported'\n )}\n data-testid={selectors.TemplateVariablesWarningAlert}\n bottomSpacing={0}\n >\n {showDescription && (\n <Trans i18nKey=\"public-dashboard.modal-alerts.unsupported-template-variable-alert-desc\">\n This public dashboard may not work since it uses template variables\n </Trans>\n )}\n </Alert>\n );\n};\n","import { GENERAL_FOLDER_UID } from 'app/features/search/constants';\nimport { DashboardViewItem, DashboardViewItemKind } from 'app/features/search/types';\nimport { createAsyncThunk } from 'app/types/store';\n\nimport { listDashboards, listFolders, PAGE_SIZE } from '../api/services';\nimport { DashboardViewItemWithUIItems, UIDashboardViewItem } from '../types';\n\nimport { findItem } from './utils';\n\ninterface FetchNextChildrenPageArgs {\n parentUID: string | undefined;\n\n // Allow UI items to be excluded (they're always excluded) for convenience for callers\n excludeKinds?: Array<DashboardViewItemWithUIItems['kind'] | UIDashboardViewItem['uiKind']>;\n pageSize: number;\n}\n\ninterface FetchNextChildrenPageResult {\n children: DashboardViewItem[];\n kind: 'folder' | 'dashboard';\n page: number;\n lastPageOfKind: boolean;\n}\n\ninterface RefetchChildrenArgs {\n parentUID: string | undefined;\n pageSize: number;\n}\n\ninterface RefetchChildrenResult {\n children: DashboardViewItem[];\n kind: 'folder' | 'dashboard';\n page: number;\n lastPageOfKind: boolean;\n}\n\nexport const refreshParents = createAsyncThunk(\n 'browseDashboards/refreshParents',\n async (uids: string[], { getState, dispatch }) => {\n const { browseDashboards } = getState();\n const { rootItems, childrenByParentUID } = browseDashboards;\n const parentsToRefresh = new Set<string | undefined>();\n\n for (const uid of uids) {\n // find the parent folder uid\n const item = findItem(rootItems?.items ?? [], childrenByParentUID, uid);\n parentsToRefresh.add(item?.parentUID);\n }\n\n for (const parentUID of parentsToRefresh) {\n dispatch(refetchChildren({ parentUID, pageSize: PAGE_SIZE }));\n }\n }\n);\n\nexport const refetchChildren = createAsyncThunk(\n 'browseDashboards/refetchChildren',\n async ({ parentUID, pageSize }: RefetchChildrenArgs): Promise<RefetchChildrenResult> => {\n const uid = parentUID === GENERAL_FOLDER_UID ? undefined : parentUID;\n\n // At the moment this will just clear out all loaded children and refetch the first page.\n // If user has scrolled beyond the first page, then InfiniteLoader will probably trigger\n // an additional page load (via fetchNextChildrenPage)\n\n let page = 1;\n let fetchKind: DashboardViewItemKind | undefined = 'folder';\n\n let children = await listFolders(uid, undefined, page, pageSize);\n let lastPageOfKind = children.length < pageSize;\n\n // If we've loaded all folders, load the first page of dashboards.\n // This ensures dashboards are loaded if a folder contains only dashboards.\n if (fetchKind === 'folder' && lastPageOfKind) {\n fetchKind = 'dashboard';\n page = 1;\n\n const childDashboards = await listDashboards(uid, page, pageSize);\n lastPageOfKind = childDashboards.length < pageSize;\n children = children.concat(childDashboards);\n }\n\n return {\n children,\n lastPageOfKind: lastPageOfKind,\n page,\n kind: fetchKind,\n };\n }\n);\n\nexport const fetchNextChildrenPage = createAsyncThunk(\n 'browseDashboards/fetchNextChildrenPage',\n async (\n { parentUID, excludeKinds = [], pageSize }: FetchNextChildrenPageArgs,\n thunkAPI\n ): Promise<undefined | FetchNextChildrenPageResult> => {\n // TODO: invert prop to `includeKinds`, but also support not loading folders\n const loadDashboards = !excludeKinds.includes('dashboard');\n\n const uid = parentUID === GENERAL_FOLDER_UID ? undefined : parentUID;\n\n const state = thunkAPI.getState().browseDashboards;\n const collection = uid ? state.childrenByParentUID[uid] : state.rootItems;\n\n let page = 1;\n let fetchKind: DashboardViewItemKind | undefined = undefined;\n\n // Folder children do not come from a single API, so we need to do a bunch of logic to determine\n // which page of which kind to load\n\n if (!collection) {\n // No previous data in store, fetching first page of folders\n page = 1;\n fetchKind = 'folder';\n } else if (collection.lastFetchedKind === 'dashboard' && !collection.lastKindHasMoreItems) {\n // There's nothing to load at all\n console.warn(`fetchNextChildrenPage called for ${uid} but that collection is fully loaded`);\n // return;\n } else if (collection.lastFetchedKind === 'folder' && collection.lastKindHasMoreItems) {\n // Load additional pages of folders\n page = collection.lastFetchedPage + 1;\n fetchKind = 'folder';\n } else if (loadDashboards) {\n // We've already checked if there's more folders to load, so if the last fetched is folder\n // then we fetch first page of dashboards\n page = collection.lastFetchedKind === 'folder' ? 1 : collection.lastFetchedPage + 1;\n fetchKind = 'dashboard';\n }\n\n if (!fetchKind) {\n return;\n }\n\n let children =\n fetchKind === 'folder'\n ? await listFolders(uid, undefined, page, pageSize)\n : await listDashboards(uid, page, pageSize);\n\n let lastPageOfKind = children.length < pageSize;\n\n // If we've loaded all folders, load the first page of dashboards.\n // This ensures dashboards are loaded if a folder contains only dashboards.\n if (fetchKind === 'folder' && lastPageOfKind && loadDashboards) {\n fetchKind = 'dashboard';\n page = 1;\n\n const childDashboards = await listDashboards(uid, page, pageSize);\n lastPageOfKind = childDashboards.length < pageSize;\n children = children.concat(childDashboards);\n }\n\n return {\n children,\n lastPageOfKind,\n page,\n kind: fetchKind,\n };\n }\n);\n","import { css, cx } from '@emotion/css';\nimport { isString } from 'lodash';\n\nimport { GrafanaTheme2, TimeZone, dateTimeFormat } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\ninterface Props {\n timestamp: number;\n timeZone: TimeZone | undefined;\n className?: string;\n}\n\nexport const TimeZoneOffset = (props: Props) => {\n const { timestamp, timeZone, className } = props;\n const styles = useStyles2(getStyles);\n\n if (!isString(timeZone)) {\n return null;\n }\n\n return (\n <>\n <span className={cx(styles.offset, className)}>{formatUtcOffset(timestamp, timeZone)}</span>\n </>\n );\n};\n\nexport const formatUtcOffset = (timestamp: number, timeZone: TimeZone): string => {\n const offset = dateTimeFormat(timestamp, {\n timeZone,\n format: 'Z',\n });\n\n return `UTC${offset}`;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const textBase = css({\n fontWeight: 'normal',\n fontSize: theme.typography.size.sm,\n color: theme.colors.text.secondary,\n whiteSpace: 'normal',\n });\n\n return {\n offset: css(textBase, {\n color: theme.colors.text.primary,\n background: theme.colors.background.secondary,\n padding: '2px 5px',\n borderRadius: theme.shape.radius.default,\n marginLeft: '4px',\n }),\n };\n};\n","import { isEmpty } from 'lodash';\n\nimport { DataFrameView } from '../dataframe/DataFrameView';\nimport { getTimeField } from '../dataframe/processDataFrame';\nimport { GrafanaTheme2 } from '../themes/types';\nimport { reduceField, ReducerID } from '../transformations/fieldReducer';\nimport { getFieldMatcher } from '../transformations/matchers';\nimport { FieldMatcherID } from '../transformations/matchers/ids';\nimport { ScopedVars } from '../types/ScopedVars';\nimport { DataFrame, Field, FieldConfig, FieldType } from '../types/dataFrame';\nimport { LinkModel } from '../types/dataLink';\nimport { DisplayValue, DisplayValueAlignmentFactors } from '../types/displayValue';\nimport { FieldConfigSource } from '../types/fieldOverrides';\nimport { InterpolateFunction } from '../types/panel';\nimport { TimeRange, TimeZone } from '../types/time';\n\nimport { getDisplayProcessor } from './displayProcessor';\nimport { getFieldDisplayName } from './fieldState';\n\n/**\n * Options for how to turn DataFrames into an array of display values\n */\nexport interface ReduceDataOptions {\n /* If true show each row value */\n values?: boolean;\n /** if showing all values limit */\n limit?: number;\n /** When !values, pick one value for the whole field */\n calcs: string[];\n /** Which fields to show. By default this is only numeric fields */\n fields?: string;\n}\n\n// TODO: use built in variables, same as for data links?\nexport const VAR_SERIES_NAME = '__series.name';\nexport const VAR_FIELD_NAME = '__field.displayName'; // Includes the rendered tags and naming strategy\nexport const VAR_FIELD_LABELS = '__field.labels';\nexport const VAR_CALC = '__calc';\nexport const VAR_CELL_PREFIX = '__cell_'; // consistent with existing table templates\n\nexport interface FieldSparkline {\n y: Field; // Y values\n x?: Field; // if this does not exist, use the index\n timeRange?: TimeRange; // Optionally force an absolute time\n highlightIndex?: number;\n}\n\nexport interface FieldDisplay {\n name: string; // The field name (title is in display)\n field: FieldConfig;\n display: DisplayValue;\n sparkline?: FieldSparkline;\n\n // Expose to the original values for delayed inspection (DataLinks etc)\n view?: DataFrameView;\n colIndex?: number; // The field column index\n rowIndex?: number; // only filled in when the value is from a row (ie, not a reduction)\n getLinks?: () => LinkModel[];\n hasLinks: boolean;\n}\n\nexport interface GetFieldDisplayValuesOptions {\n data?: DataFrame[];\n reduceOptions: ReduceDataOptions;\n fieldConfig: FieldConfigSource;\n replaceVariables: InterpolateFunction;\n sparkline?: boolean; // Calculate the sparkline\n percentChange?: boolean; // Calculate percent change\n theme: GrafanaTheme2;\n timeZone?: TimeZone;\n}\n\nexport const DEFAULT_FIELD_DISPLAY_VALUES_LIMIT = 25;\n\nexport const getFieldDisplayValues = (options: GetFieldDisplayValuesOptions): FieldDisplay[] => {\n const { replaceVariables, reduceOptions, timeZone, theme } = options;\n const calcs = reduceOptions.calcs.length ? reduceOptions.calcs : [ReducerID.last];\n\n const values: FieldDisplay[] = [];\n const fieldMatcher = getFieldMatcher(\n reduceOptions.fields\n ? {\n id: FieldMatcherID.byRegexp,\n options: reduceOptions.fields,\n }\n : {\n id: FieldMatcherID.numeric,\n }\n );\n\n const data = options.data ?? [];\n const limit = reduceOptions.limit ? reduceOptions.limit : DEFAULT_FIELD_DISPLAY_VALUES_LIMIT;\n\n let hitLimit = false;\n\n for (let s = 0; s < data.length && !hitLimit; s++) {\n const dataFrame = data[s]; // Name is already set\n\n const { timeField } = getTimeField(dataFrame);\n const view = new DataFrameView(dataFrame);\n\n for (let i = 0; i < dataFrame.fields.length && !hitLimit; i++) {\n const field = dataFrame.fields[i];\n const fieldLinksSupplier = field.getLinks;\n\n // To filter out time field, need an option for this\n if (!fieldMatcher(field, dataFrame, data)) {\n continue;\n }\n\n let config = field.config; // already set by the prepare task\n\n if (field.state?.range) {\n // Us the global min/max values\n config = {\n ...config,\n ...field.state?.range,\n };\n }\n\n let displayName = field.config.displayName ?? '';\n\n const display =\n field.display ??\n getDisplayProcessor({\n field,\n theme: options.theme,\n timeZone,\n });\n\n // Show all rows\n if (reduceOptions.values) {\n for (let j = 0; j < field.values.length; j++) {\n field.state = setIndexForPaletteColor(field, values.length);\n\n const scopedVars = getFieldScopedVarsWithDataContexAndRowIndex(field, j);\n const displayValue = display(field.values[j]);\n const rowName = getSmartDisplayNameForRow(dataFrame, field, j, replaceVariables, scopedVars);\n const overrideColor = lookupRowColorFromOverride(rowName, options.fieldConfig, theme);\n\n values.push({\n name: '',\n field: config,\n display: {\n ...displayValue,\n title: rowName,\n color: overrideColor ?? displayValue.color,\n },\n view,\n colIndex: i,\n rowIndex: j,\n getLinks: fieldLinksSupplier\n ? () =>\n fieldLinksSupplier({\n valueRowIndex: j,\n })\n : () => [],\n hasLinks: hasLinks(field),\n });\n\n if (values.length >= limit) {\n hitLimit = true;\n break;\n }\n }\n } else {\n const results = reduceField({\n field,\n reducers: calcs, // The stats to calculate\n });\n\n for (const calc of calcs) {\n const scopedVars = field.state?.scopedVars ?? {};\n scopedVars[VAR_CALC] = { value: calc, text: calc };\n\n const displayValue = display(results[calc]);\n\n if (displayName !== '') {\n displayValue.title = replaceVariables(displayName, scopedVars);\n } else {\n displayValue.title = getFieldDisplayName(field, dataFrame, data);\n }\n displayValue.percentChange = options.percentChange\n ? reduceField({ field: field, reducers: [ReducerID.diffperc] }).diffperc\n : undefined;\n\n let sparkline: FieldSparkline | undefined = undefined;\n if (options.sparkline) {\n sparkline = {\n y: dataFrame.fields[i],\n x: timeField,\n };\n if (calc === ReducerID.last) {\n sparkline.highlightIndex = sparkline.y.values.length - 1;\n } else if (calc === ReducerID.first) {\n sparkline.highlightIndex = 0;\n }\n }\n\n // If there is only one row in the data frame, then set the\n // valueRowIndex to that one row. This allows the data macros in\n // things like links to access other fields from the data frame.\n //\n // If there were more rows, it still may be sane to set the row\n // index, but it may be confusing; the calculation may have\n // selected a value from a different row or it may have aggregated\n // the values from multiple rows, so to make just the first row\n // available would be arbitrary. For now, the users will have to\n // ensure that the data frame has just one row if they want data\n // link referencing other fields to work.\n //\n // TODO: A more complete solution here would be to allow the\n // calculation to report a relevant row and use that value. For\n // example, a common calculation is 'lastNotNull'. It'd be nifty to\n // know which row the display value corresponds to in that case if\n // there were potentially many\n const valueRowIndex = dataFrame.length === 1 ? 0 : undefined;\n\n values.push({\n name: calc,\n field: config,\n display: displayValue,\n sparkline,\n view,\n colIndex: i,\n getLinks: fieldLinksSupplier\n ? () =>\n fieldLinksSupplier({\n calculatedValue: displayValue,\n valueRowIndex,\n })\n : () => [],\n hasLinks: hasLinks(field),\n });\n }\n }\n }\n }\n\n if (values.length === 0) {\n values.push(createNoValuesFieldDisplay(options));\n }\n\n return values;\n};\n\nfunction getSmartDisplayNameForRow(\n frame: DataFrame,\n field: Field,\n rowIndex: number,\n replaceVariables: InterpolateFunction,\n scopedVars: ScopedVars | undefined\n): string {\n const displayName = field.config.displayName;\n\n if (displayName) {\n // Handle old __cell_n syntax\n if (displayName.indexOf(VAR_CELL_PREFIX)) {\n return replaceVariables(fixCellTemplateExpressions(displayName), scopedVars);\n }\n\n return replaceVariables(displayName, scopedVars);\n }\n\n let parts: string[] = [];\n let otherNumericFields = 0;\n\n for (const otherField of frame.fields) {\n if (otherField === field) {\n continue;\n }\n\n if (otherField.type === FieldType.string) {\n const value = otherField.values[rowIndex] ?? '';\n const mappedValue = otherField.display ? otherField.display(value).text : value;\n if (mappedValue.length > 0) {\n parts.push(mappedValue);\n }\n } else if (otherField.type === FieldType.number) {\n otherNumericFields++;\n }\n }\n\n if (otherNumericFields || parts.length === 0) {\n parts.push(getFieldDisplayName(field, frame));\n }\n\n return parts.join(' ');\n}\n\n/**\n * Palette color modes use series index (field index) which does not work for when displaing rows\n * So updating seriesIndex here makes the palette color modes work in \"All values\" mode\n */\nfunction setIndexForPaletteColor(field: Field, currentLength: number) {\n return {\n ...field.state,\n seriesIndex: currentLength,\n };\n}\n\n/**\n * This function makes overrides that set color work for row values\n */\nfunction lookupRowColorFromOverride(displayName: string, fieldConfig: FieldConfigSource, theme: GrafanaTheme2) {\n for (const override of fieldConfig.overrides) {\n if (override.matcher.id === 'byName' && override.matcher.options === displayName) {\n for (const prop of override.properties) {\n if (prop.id === 'color' && prop.value) {\n return theme.visualization.getColorByName(prop.value.fixedColor);\n }\n }\n }\n }\n\n return null;\n}\n\nexport function hasLinks(field: Field): boolean {\n return field.config?.links?.length ? field.config.links.length > 0 : false;\n}\n\nexport function getDisplayValueAlignmentFactors(values: FieldDisplay[]): DisplayValueAlignmentFactors {\n let maxTitle = '';\n let maxText = '';\n let maxPrefix = '';\n let maxSuffix = '';\n\n for (let i = 0; i < values.length; i++) {\n const v = values[i].display;\n\n if (v.text && v.text.length > maxText.length) {\n maxText = v.text;\n }\n\n if (v.title && v.title.length > maxTitle.length) {\n maxTitle = v.title;\n }\n\n if (v.prefix && v.prefix.length > maxPrefix.length) {\n maxPrefix = v.prefix;\n }\n\n if (v.suffix && v.suffix.length > maxSuffix.length) {\n maxSuffix = v.suffix;\n }\n }\n\n return { text: maxText, title: maxTitle, suffix: maxSuffix, prefix: maxPrefix };\n}\n\nfunction createNoValuesFieldDisplay(options: GetFieldDisplayValuesOptions): FieldDisplay {\n const displayName = 'No data';\n const { fieldConfig, timeZone } = options;\n const { defaults } = fieldConfig;\n\n const displayProcessor = getDisplayProcessor({\n field: {\n name: '',\n type: FieldType.other,\n config: defaults,\n },\n theme: options.theme,\n timeZone,\n });\n\n const display = displayProcessor(null);\n const text = getDisplayText(display, displayName);\n\n return {\n name: displayName,\n field: {\n ...defaults,\n max: defaults.max ?? 0,\n min: defaults.min ?? 0,\n },\n display: {\n text,\n numeric: 0,\n color: display.color,\n },\n hasLinks: false,\n };\n}\n\nfunction getDisplayText(display: DisplayValue, fallback: string): string {\n if (!display || isEmpty(display.text)) {\n return fallback;\n }\n return display.text;\n}\n\nexport function fixCellTemplateExpressions(str: string) {\n return str.replace(\n /\\${__cell_(\\d+)(.*?)}|\\[\\[__cell_(\\d+)(.*?)\\]\\]|\\$__cell_(\\d+)(\\S*)/g,\n (match, cellNum1, fmt1, cellNum2, fmt2, cellNum3, fmt3) => {\n return `\\${__data.fields[${cellNum1 ?? cellNum2 ?? cellNum3}]${fmt1 ?? fmt2 ?? fmt3}}`;\n }\n );\n}\n\n/**\n * Clones the existing dataContext and adds rowIndex to it\n */\nfunction getFieldScopedVarsWithDataContexAndRowIndex(field: Field, rowIndex: number): ScopedVars | undefined {\n if (field.state?.scopedVars?.__dataContext) {\n return {\n ...field.state?.scopedVars,\n __dataContext: {\n value: {\n ...field.state?.scopedVars?.__dataContext.value,\n rowIndex,\n },\n },\n };\n }\n\n return field.state?.scopedVars;\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { Settings } from 'app/types/settings';\n\nimport { SettingsError, AuthProviderStatus, AuthConfigState, SSOProvider } from '../types';\n\nexport const initialState: AuthConfigState = {\n settings: {},\n providerStatuses: {},\n isLoading: false,\n providers: [],\n};\n\nconst authConfigSlice = createSlice({\n name: 'authConfig',\n initialState,\n reducers: {\n settingsUpdated: (state, action: PayloadAction<Settings>): AuthConfigState => {\n return { ...state, settings: action.payload };\n },\n providerStatusesLoaded: (state, action: PayloadAction<{ [key: string]: AuthProviderStatus }>): AuthConfigState => {\n return { ...state, providerStatuses: action.payload };\n },\n loadingBegin: (state: AuthConfigState) => {\n return { ...state, isLoading: true };\n },\n loadingEnd: (state: AuthConfigState) => {\n return { ...state, isLoading: false };\n },\n setError: (state, action: PayloadAction<SettingsError>): AuthConfigState => {\n return { ...state, updateError: action.payload };\n },\n resetError: (state): AuthConfigState => {\n return { ...state, updateError: undefined };\n },\n setWarning: (state, action: PayloadAction<SettingsError>): AuthConfigState => {\n return { ...state, warning: action.payload };\n },\n resetWarning: (state): AuthConfigState => {\n return { ...state, warning: undefined };\n },\n providersLoaded: (state, action: PayloadAction<SSOProvider[]>): AuthConfigState => {\n return { ...state, providers: action.payload };\n },\n },\n});\n\nexport const {\n settingsUpdated,\n providerStatusesLoaded,\n loadingBegin,\n loadingEnd,\n setError,\n resetError,\n setWarning,\n resetWarning,\n providersLoaded,\n} = authConfigSlice.actions;\n\nexport const authConfigReducer = authConfigSlice.reducer;\n\nexport default {\n authConfig: authConfigReducer,\n};\n","declare global {\n interface Array<T> {\n /** @deprecated Use [idx]. This only exists to help migrate Vector to Array */\n get(idx: number): T;\n /** @deprecated Use [idx]. This only exists to help migrate Vector to Array */\n set(idx: number, value: T): void;\n /** @deprecated Use .push(value). This only exists to help migrate Vector to Array */\n add(value: T): void;\n /** @deprecated this is not necessary. This only exists to help migrate Vector to Array */\n toArray(): T[];\n }\n}\n\n// JS original sin\n// this if condition is because Jest will re-exec this block multiple times (in a browser this only runs once)\nexport function patchArrayVectorProrotypeMethods() {\n if (!Object.getOwnPropertyDescriptor(Array.prototype, 'toArray')) {\n Object.defineProperties(Array.prototype, {\n get: {\n value: function (idx: number) {\n return this[idx];\n },\n writable: true,\n enumerable: false,\n configurable: true,\n },\n set: {\n value: function (idx: number, value: unknown) {\n this[idx] = value;\n },\n writable: true,\n enumerable: false,\n configurable: true,\n },\n add: {\n value: function (value: unknown) {\n this.push(value);\n },\n writable: true,\n enumerable: false,\n configurable: true,\n },\n toArray: {\n value: function () {\n return this;\n },\n writable: true,\n enumerable: false,\n configurable: true,\n },\n });\n }\n}\n//this function call is intentional\npatchArrayVectorProrotypeMethods();\n","import { css, cx } from '@emotion/css';\nimport { memo } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2, TimeOption } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { getFocusStyles } from '../../../themes/mixins';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n position: 'relative',\n }),\n radio: css({\n opacity: 0,\n width: '0 !important',\n '&:focus-visible + label': getFocusStyles(theme),\n }),\n label: css({\n cursor: 'pointer',\n flex: 1,\n padding: theme.spacing(1),\n borderRadius: theme.shape.radius.default,\n\n '&:hover': {\n background: theme.colors.action.hover,\n cursor: 'pointer',\n },\n }),\n labelSelected: css({\n background: theme.colors.action.selected,\n\n '&::before': {\n backgroundImage: theme.colors.gradients.brandVertical,\n borderRadius: theme.shape.radius.default,\n content: '\" \"',\n display: 'block',\n height: '100%',\n position: 'absolute',\n width: theme.spacing(0.5),\n left: 0,\n top: 0,\n },\n }),\n };\n};\n\ninterface Props {\n value: TimeOption;\n selected?: boolean;\n onSelect: (option: TimeOption) => void;\n /**\n * Input identifier. This should be the same for all options in a group.\n */\n name: string;\n}\n\nexport const TimeRangeOption = memo<Props>(({ value, onSelect, selected = false, name }) => {\n const styles = useStyles2(getStyles);\n // In case there are more of the same timerange in the list\n const id = uuidv4();\n\n return (\n <li className={styles.container}>\n <input\n className={styles.radio}\n checked={selected}\n name={name}\n type=\"checkbox\"\n data-role=\"item\"\n tabIndex={-1}\n id={id}\n onChange={() => onSelect(value)}\n />\n <label className={cx(styles.label, selected && styles.labelSelected)} htmlFor={id}>\n {value.display}\n </label>\n </li>\n );\n});\n\nTimeRangeOption.displayName = 'TimeRangeOption';\n","import { RefObject, useEffect, useState } from 'react';\n\nimport { TimeOption } from '@grafana/data';\n\nconst modulo = (a: number, n: number) => ((a % n) + n) % n;\nconst CAUGHT_KEYS = ['ArrowUp', 'ArrowDown', 'Home', 'End', 'Enter', 'Tab'];\n\n/** @internal */\nexport interface UseListFocusProps {\n localRef: RefObject<HTMLUListElement>;\n options: TimeOption[];\n}\n\n/** @internal */\nexport type UseListFocusReturn = [(event: React.KeyboardEvent) => void];\n\n/** @internal */\nexport const useListFocus = ({ localRef, options }: UseListFocusProps): UseListFocusReturn => {\n const [focusedItem, setFocusedItem] = useState(0);\n\n useEffect(() => {\n const items = localRef.current?.querySelectorAll<HTMLInputElement>('[data-role=\"item\"]') || [];\n const checkedIndex = Array.from(items).findIndex((item) => item.checked);\n const newFocusedIndex = checkedIndex >= 0 ? checkedIndex : 0;\n items.forEach((item, i) => {\n item.tabIndex = i === newFocusedIndex ? 0 : -1;\n });\n // Reset focused item when options have changed\n setFocusedItem(newFocusedIndex);\n }, [localRef, options]);\n\n const handleKeys = (event: React.KeyboardEvent) => {\n const items = localRef?.current?.querySelectorAll<HTMLInputElement>('[data-role=\"item\"]');\n const itemsCount = items?.length ?? 0;\n\n if (CAUGHT_KEYS.indexOf(event.key) > -1) {\n event.preventDefault();\n if (event.key !== 'Tab') {\n event.stopPropagation();\n }\n }\n\n let newFocusedIndex = null;\n\n switch (event.key) {\n case 'ArrowUp':\n newFocusedIndex = modulo(focusedItem - 1, itemsCount);\n break;\n case 'ArrowDown':\n newFocusedIndex = modulo(focusedItem + 1, itemsCount);\n break;\n case 'Home':\n newFocusedIndex = 0;\n break;\n case 'End':\n newFocusedIndex = itemsCount - 1;\n break;\n case 'Enter':\n items?.[focusedItem]?.click();\n break;\n default:\n break;\n }\n\n if (newFocusedIndex !== null) {\n setFocusedItem(newFocusedIndex);\n items?.[newFocusedIndex]?.focus();\n items?.forEach((item, i) => {\n item.tabIndex = i === newFocusedIndex ? 0 : -1;\n });\n }\n };\n\n return [handleKeys];\n};\n","import { css } from '@emotion/css';\nimport { useRef, ReactNode } from 'react';\n\nimport { GrafanaTheme2, TimeOption } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\nimport { TimePickerTitle } from './TimePickerTitle';\nimport { TimeRangeOption } from './TimeRangeOption';\nimport { useListFocus } from './hooks';\n\ninterface Props {\n title?: string;\n options: TimeOption[];\n value?: TimeOption;\n onChange: (option: TimeOption) => void;\n placeholderEmpty?: ReactNode;\n}\n\nexport const TimeRangeList = (props: Props) => {\n const styles = useStyles2(getStyles);\n const { title, options, placeholderEmpty } = props;\n\n if (typeof placeholderEmpty !== 'undefined' && options.length <= 0) {\n return <>{placeholderEmpty}</>;\n }\n\n if (!title) {\n return <Options {...props} />;\n }\n\n return (\n <section aria-label={title}>\n <fieldset>\n <div className={styles.title}>\n <TimePickerTitle>{title}</TimePickerTitle>\n </div>\n <Options {...props} />\n </fieldset>\n </section>\n );\n};\n\nconst Options = ({ options, value, onChange, title }: Props) => {\n const styles = useStyles2(getOptionsStyles);\n\n const localRef = useRef<HTMLUListElement>(null);\n const [handleKeys] = useListFocus({ localRef, options });\n\n return (\n <>\n <ul\n role=\"presentation\"\n onKeyDown={handleKeys}\n ref={localRef}\n aria-roledescription={t('time-picker.time-range.aria-role', 'Time range selection')}\n className={styles.list}\n >\n {options.map((option, index) => (\n <TimeRangeOption\n key={keyForOption(option, index)}\n value={option}\n selected={isEqual(option, value)}\n onSelect={onChange}\n name={title ?? t('time-picker.time-range.default-title', 'Time ranges')}\n />\n ))}\n </ul>\n </>\n );\n};\n\nfunction keyForOption(option: TimeOption, index: number): string {\n return `${option.from}-${option.to}-${index}`;\n}\n\nfunction isEqual(x: TimeOption, y?: TimeOption): boolean {\n if (!y || !x) {\n return false;\n }\n return y.from === x.from && y.to === x.to;\n}\n\nconst getStyles = () => ({\n title: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px 5px 9px',\n }),\n});\n\nconst getOptionsStyles = (theme: GrafanaTheme2) => ({\n list: css({\n padding: theme.spacing(0.5),\n }),\n});\n","import { getThemeById } from '@grafana/data/internal';\nimport { ThemeChangedEvent } from '@grafana/runtime';\n\nimport appEvents from '../app_events';\nimport { config } from '../config';\nimport { contextSrv } from '../core';\n\nimport { PreferencesService } from './PreferencesService';\n\nexport async function changeTheme(themeId: string, runtimeOnly?: boolean) {\n const oldTheme = config.theme2;\n\n const newTheme = getThemeById(themeId);\n\n appEvents.publish(new ThemeChangedEvent(newTheme));\n\n // Add css file for new theme\n if (oldTheme.colors.mode !== newTheme.colors.mode) {\n const newCssLink = document.createElement('link');\n newCssLink.rel = 'stylesheet';\n newCssLink.href = config.bootData.assets[newTheme.colors.mode];\n newCssLink.onload = () => {\n // Remove old css file\n const bodyLinks = document.getElementsByTagName('link');\n for (let i = 0; i < bodyLinks.length; i++) {\n const link = bodyLinks[i];\n\n if (link.href && link.href.includes(`build/grafana.${oldTheme.colors.mode}`)) {\n // Remove existing link once the new css has loaded to avoid flickering\n // If we add new css at the same time we remove current one the page will be rendered without css\n // As the new css file is loading\n link.remove();\n }\n }\n };\n document.head.insertBefore(newCssLink, document.head.firstChild);\n }\n\n if (runtimeOnly) {\n return;\n }\n\n if (!contextSrv.isSignedIn) {\n return;\n }\n\n // Persist new theme\n const service = new PreferencesService('user');\n await service.patch({\n theme: themeId,\n });\n}\n\nexport async function toggleTheme(runtimeOnly: boolean) {\n const currentTheme = config.theme2;\n changeTheme(currentTheme.isDark ? 'light' : 'dark', runtimeOnly);\n}\n","import { t } from '@grafana/i18n';\n\nimport { ComponentSize } from '../../types/size';\nimport { Button } from '../Button/Button';\n\nimport { ConfirmButton } from './ConfirmButton';\n\nexport interface Props {\n /** Confirm action callback */\n onConfirm(): void;\n /** Button size */\n size?: ComponentSize;\n /** Disable button click action */\n disabled?: boolean;\n 'aria-label'?: string;\n /** Close after delete button is clicked */\n closeOnConfirm?: boolean;\n}\n\nexport const DeleteButton = ({ size, disabled, onConfirm, 'aria-label': ariaLabel, closeOnConfirm }: Props) => {\n return (\n <ConfirmButton\n confirmText={t('grafana-ui.confirm-button.confirmText-delete', 'Delete')}\n confirmVariant=\"destructive\"\n size={size || 'md'}\n disabled={disabled}\n onConfirm={onConfirm}\n closeOnConfirm={closeOnConfirm}\n >\n <Button\n aria-label={ariaLabel ?? t('grafana-ui.confirm-button.aria-label-delete', 'Delete')}\n variant=\"destructive\"\n icon=\"times\"\n size={size || 'sm'}\n />\n </ConfirmButton>\n );\n};\n","import { Accept } from 'react-dropzone';\n\nexport const acceptedFiles: Accept = {\n 'text/plain': ['.csv', '.txt'],\n 'application/json': ['.json'],\n};\n\n//This should probably set from grafana conf\nexport const maxFileSize = 500000;\n","import * as React from 'react';\n\nimport { rangeUtil } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Input } from '@grafana/ui';\n\nexport enum InputPrefix {\n LessThan = 'lessthan',\n GreaterThan = 'greaterthan',\n}\n\ntype Props = {\n value: number;\n onChange: (value?: number | boolean | undefined) => void;\n inputPrefix?: InputPrefix;\n isTime: boolean;\n};\n\nexport const NullsThresholdInput = ({ value, onChange, inputPrefix, isTime }: Props) => {\n let defaultValue = rangeUtil.secondsToHms(value / 1000);\n if (!isTime) {\n defaultValue = '10';\n }\n const checkAndUpdate = (txt: string) => {\n let val: boolean | number = false;\n if (txt) {\n try {\n if (isTime && rangeUtil.isValidTimeSpan(txt)) {\n val = rangeUtil.intervalToMs(txt);\n } else {\n val = Number(txt);\n }\n } catch (err) {\n console.warn('ERROR', err);\n }\n }\n onChange(val);\n };\n\n const handleEnterKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== 'Enter') {\n return;\n }\n checkAndUpdate(e.currentTarget.value);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n checkAndUpdate(e.currentTarget.value);\n };\n\n const prefix =\n inputPrefix === InputPrefix.GreaterThan ? (\n <div>></div>\n ) : inputPrefix === InputPrefix.LessThan ? (\n <div><</div>\n ) : null;\n\n return (\n <Input\n autoFocus={false}\n placeholder={t('timeseries.nulls-threshold-input.placeholder-never', 'Never')}\n width={10}\n defaultValue={defaultValue}\n onKeyDown={handleEnterKey}\n onBlur={handleBlur}\n prefix={prefix}\n spellCheck={false}\n />\n );\n};\n","import { css } from '@emotion/css';\n\nimport { Field, GrafanaTheme2 } from '@grafana/data';\nimport { InstantQueryRefIdIndex } from '@grafana/prometheus';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { rawListItemColumnWidth } from './RawListItem';\n\nconst getItemLabelsStyles = (theme: GrafanaTheme2, expanded: boolean) => {\n return {\n valueNavigation: css({\n width: rawListItemColumnWidth,\n fontWeight: 'bold',\n }),\n valueNavigationWrapper: css({\n display: 'flex',\n justifyContent: 'flex-end',\n }),\n itemLabelsWrap: css({\n borderBottom: expanded ? `1px solid ${theme.colors.border.medium}` : '',\n }),\n };\n};\n\nexport const formatValueName = (name: string): string => {\n if (name.includes(InstantQueryRefIdIndex)) {\n return name.replace(InstantQueryRefIdIndex, '');\n }\n return name;\n};\n\nexport const ItemLabels = ({ valueLabels, expanded }: { valueLabels: Field[]; expanded: boolean }) => {\n const styles = useStyles2(getItemLabelsStyles, expanded);\n\n return (\n <div className={styles.itemLabelsWrap}>\n <div className={styles.valueNavigationWrapper}>\n {valueLabels.map((value, index) => (\n <span className={styles.valueNavigation} key={value.name}>\n {formatValueName(value.name)}\n </span>\n ))}\n </div>\n </div>\n );\n};\n","import { debounce, isEqual } from 'lodash';\n\nimport { UrlQueryMap } from '@grafana/data';\nimport {\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n sceneUtils,\n SceneVariable,\n VariableDependencyConfig,\n} from '@grafana/scenes';\nimport { createLogger } from '@grafana/ui';\n\nimport { getDashboardScenePageStateManager } from '../pages/DashboardScenePageStateManager';\n\nimport { DashboardScene } from './DashboardScene';\n\nexport interface DashboardReloadBehaviorState extends SceneObjectState {\n reloadOnParamsChange?: boolean;\n uid?: string;\n}\n\nexport class DashboardReloadBehavior extends SceneObjectBase<DashboardReloadBehaviorState> {\n private _dashboardScene: DashboardScene | undefined;\n private _prevState?: UrlQueryMap;\n private _log = createLogger('DashboardReloadBehavior');\n\n constructor(state: DashboardReloadBehaviorState) {\n super(state);\n\n // Sometimes the reload is triggered multiple subsequent times\n // Debouncing it prevents double/triple reloads\n this.reloadDashboard = debounce(this.reloadDashboard).bind(this);\n\n const shouldReload = !!this.state.uid && !!this.state.reloadOnParamsChange;\n\n this.addActivationHandler(() => {\n if (!shouldReload) {\n return;\n }\n\n this._dashboardScene = sceneGraph.getAncestor(this, DashboardScene);\n\n this._variableDependency = new VariableDependencyConfig(this, {\n onAnyVariableChanged: (variable: SceneVariable) => {\n this._log.logger('onAnyVariableChanged', variable.state.name, JSON.stringify(variable.getValue()));\n this.reloadDashboard();\n },\n dependsOnScopes: true,\n });\n });\n }\n\n private getCurrentState(): UrlQueryMap {\n const scopes = sceneGraph.getScopes(this) ?? [];\n const timeRange = sceneGraph.getTimeRange(this).state.value;\n\n return {\n scopes: scopes.map((scope) => scope.metadata.name),\n from: timeRange.from.toISOString(),\n to: timeRange.to.toISOString(),\n ...sceneUtils.getUrlState(this._dashboardScene?.state.$variables!),\n version: this._dashboardScene?.state.version,\n };\n }\n\n private isEditing() {\n return !!this._dashboardScene?.state.isEditing;\n }\n\n private isWaitingForVariables() {\n const varSet = sceneGraph.getVariables(this.parent!);\n return varSet.state.variables.some((variable) => varSet.isVariableLoadingOrWaitingToUpdate(variable));\n }\n\n private reloadDashboard() {\n if (this.isEditing() || this.isWaitingForVariables()) {\n this._log.logger('DashboardReloadBehavior reloadDashboard isEditing or waiting for variables, skipping reload');\n return;\n }\n\n const newState = this.getCurrentState();\n const prevState = this._prevState ?? {};\n\n // Ignore time range changes for now\n prevState.from = newState.from;\n prevState.to = newState.to;\n\n const stateChanged = !isEqual(newState, this._prevState);\n\n this._log.logger(\n `DashboardReloadBehavior reloadDashboard stateChanged ${stateChanged ? 'true' : 'false'}`,\n this._prevState,\n newState\n );\n\n if (!stateChanged) {\n return;\n }\n\n this._prevState = newState;\n\n // This is wrapped in setTimeout in order to allow variables and scopes to be set in the URL before actually reloading the dashboard\n setTimeout(() => {\n getDashboardScenePageStateManager().reloadDashboard(newState);\n });\n }\n}\n","type MegaMenuOpenHook = () => Readonly<[boolean, (open: boolean, persist?: boolean) => void]>;\n\nlet megaMenuOpenHook: MegaMenuOpenHook | undefined = undefined;\n\nexport const setMegaMenuOpenHook = (hook: MegaMenuOpenHook) => {\n megaMenuOpenHook = hook;\n};\n\n/**\n * Guidelines:\n * - Should only be used in very specific circumstances where the mega menu needs to be opened or closed programmatically.\n */\nexport const useMegaMenuOpen: MegaMenuOpenHook = () => {\n if (!megaMenuOpenHook) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('useMegaMenuOpen hook not found in @grafana/runtime');\n }\n return [false, () => console.error('MegaMenuOpen hook not found')];\n }\n\n return megaMenuOpenHook();\n};\n","import { startCase } from 'lodash';\nimport { useCallback } from 'react';\n\nimport { FieldConfigEditorBuilder, StandardEditorProps } from '@grafana/data';\nimport { HideableFieldConfig, HideSeriesConfig } from '@grafana/schema';\n\nimport { FilterPill } from '../../components/FilterPill/FilterPill';\nimport { Stack } from '../../components/Layout/Stack/Stack';\n\nconst SeriesConfigEditor = ({ value, onChange }: StandardEditorProps<HideSeriesConfig, {}>) => {\n const onChangeToggle = useCallback(\n (prop: keyof HideSeriesConfig) => {\n onChange({ ...value, [prop]: !value[prop] });\n },\n [value, onChange]\n );\n\n return (\n <Stack gap={0.5}>\n {Object.keys(value).map((k) => {\n const key = k as keyof HideSeriesConfig;\n return (\n <FilterPill\n icon={value[key] ? 'eye-slash' : 'eye'}\n onClick={() => onChangeToggle(key)}\n key={key}\n label={startCase(key)}\n selected={value[key]}\n />\n );\n })}\n </Stack>\n );\n};\n\n/**\n * @alpha\n */\nexport function addHideFrom(builder: FieldConfigEditorBuilder<HideableFieldConfig>) {\n builder.addCustomEditor({\n id: 'hideFrom',\n name: 'Hide in area',\n category: ['Series'],\n path: 'hideFrom',\n defaultValue: {\n tooltip: false,\n viz: false,\n legend: false,\n },\n editor: SeriesConfigEditor,\n override: SeriesConfigEditor,\n shouldApply: () => true,\n hideFromDefaults: true,\n process: (value) => value,\n });\n}\n","import { locationUtil, UrlQueryMap } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Dashboard } from '@grafana/schema';\nimport { Status } from '@grafana/schema/src/schema/dashboard/v2';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport { getMessageFromError, getStatusFromError } from 'app/core/utils/errors';\nimport { ScopedResourceClient } from 'app/features/apiserver/client';\nimport {\n ResourceClient,\n ResourceForCreate,\n AnnoKeyMessage,\n AnnoKeyFolder,\n AnnoKeyGrantPermissions,\n Resource,\n DeprecatedInternalId,\n AnnoKeyManagerKind,\n AnnoKeySourcePath,\n AnnoKeyManagerAllowsEdits,\n ManagerKind,\n AnnoReloadOnParamsChange,\n} from 'app/features/apiserver/types';\nimport { getDashboardUrl } from 'app/features/dashboard-scene/utils/getDashboardUrl';\nimport { DeleteDashboardResponse } from 'app/features/manage-dashboards/types';\nimport { DashboardDataDTO, DashboardDTO, SaveDashboardResponseDTO } from 'app/types/dashboard';\n\nimport { SaveDashboardCommand } from '../components/SaveDashboard/types';\n\nimport { DashboardAPI, DashboardVersionError, DashboardWithAccessInfo, ListDeletedDashboardsOptions } from './types';\nimport { isV2StoredVersion } from './utils';\n\nexport const K8S_V1_DASHBOARD_API_CONFIG = {\n group: 'dashboard.grafana.app',\n version: 'v1beta1',\n resource: 'dashboards',\n};\n\nexport class K8sDashboardAPI implements DashboardAPI<DashboardDTO, Dashboard> {\n private client: ResourceClient<DashboardDataDTO, Status>;\n\n constructor() {\n this.client = new ScopedResourceClient<DashboardDataDTO>(K8S_V1_DASHBOARD_API_CONFIG);\n }\n\n saveDashboard(options: SaveDashboardCommand<Dashboard>): Promise<SaveDashboardResponseDTO> {\n const dashboard = options.dashboard;\n const obj: ResourceForCreate<DashboardDataDTO> = {\n metadata: {\n ...options?.k8s,\n },\n spec: {\n ...dashboard,\n title: dashboard.title ?? '',\n uid: dashboard.uid ?? '',\n },\n };\n\n if (options.message) {\n obj.metadata.annotations = {\n ...obj.metadata.annotations,\n [AnnoKeyMessage]: options.message,\n };\n } else if (obj.metadata.annotations) {\n delete obj.metadata.annotations[AnnoKeyMessage];\n }\n\n if (options.folderUid !== undefined) {\n obj.metadata.annotations = {\n ...obj.metadata.annotations,\n [AnnoKeyFolder]: options.folderUid,\n };\n }\n\n // remove resource version because it's not allowed to be set\n // and the api server will throw an error\n delete obj.metadata.resourceVersion;\n\n // for v1 in g12, we will ignore the schema version validation from all default clients,\n // as we implement the necessary backend conversions, we will drop this query param\n if (dashboard.uid) {\n obj.metadata.name = dashboard.uid;\n return this.client.update(obj, { fieldValidation: 'Ignore' }).then((v) => this.asSaveDashboardResponseDTO(v));\n }\n obj.metadata.annotations = {\n ...obj.metadata.annotations,\n [AnnoKeyGrantPermissions]: 'default',\n };\n // non-scene dashboard will have obj.metadata.name when trying to save a dashboard copy\n delete obj.metadata.name;\n return this.client.create(obj, { fieldValidation: 'Ignore' }).then((v) => this.asSaveDashboardResponseDTO(v));\n }\n\n asSaveDashboardResponseDTO(v: Resource<DashboardDataDTO>): SaveDashboardResponseDTO {\n //TODO: use slug from response once implemented\n const slug = '';\n\n const url = locationUtil.assureBaseUrl(\n getDashboardUrl({\n uid: v.metadata.name,\n currentQueryParams: '',\n slug,\n })\n );\n\n return {\n uid: v.metadata.name,\n version: v.metadata.generation ?? 0,\n id: v.spec.id ?? 0,\n status: 'success',\n url,\n slug,\n };\n }\n\n deleteDashboard(uid: string, showSuccessAlert: boolean): Promise<DeleteDashboardResponse> {\n return this.client.delete(uid, showSuccessAlert).then((v) => ({\n id: 0,\n message: v.message,\n title: t('dashboard.k8s-dashboard-api.title.deleted', 'deleted'),\n }));\n }\n\n async getDashboardDTO(uid: string, params?: UrlQueryMap) {\n try {\n const dash = await this.client.subresource<DashboardWithAccessInfo<DashboardDataDTO>>(uid, 'dto', params);\n\n // This could come as conversion error from v0 or v2 to V1.\n if (dash.status?.conversion?.failed && isV2StoredVersion(dash.status.conversion.storedVersion)) {\n throw new DashboardVersionError(dash.status.conversion.storedVersion, dash.status.conversion.error);\n }\n\n const result: DashboardDTO = {\n meta: {\n ...dash.access,\n isNew: false,\n isFolder: false,\n uid: dash.metadata.name,\n k8s: dash.metadata,\n version: dash.metadata.generation,\n created: dash.metadata.creationTimestamp,\n },\n dashboard: {\n ...dash.spec,\n version: dash.metadata.generation,\n uid: dash.metadata.name,\n },\n };\n\n /** @experimental only provided by proxies for setup with reloadDashboardsOnParamsChange toggle on */\n /** Not intended to be used in production, we will be removing this in short-term future */\n if (dash.metadata.annotations?.[AnnoReloadOnParamsChange]) {\n result.meta.reloadOnParamsChange = true;\n }\n\n const annotations = dash.metadata.annotations ?? {};\n const managerKind = annotations[AnnoKeyManagerKind];\n\n if (managerKind) {\n result.meta.provisioned = annotations[AnnoKeyManagerAllowsEdits] === 'true' || managerKind === ManagerKind.Repo;\n result.meta.provisionedExternalId = annotations[AnnoKeySourcePath];\n }\n\n if (dash.metadata.labels?.[DeprecatedInternalId]) {\n result.dashboard.id = parseInt(dash.metadata.labels[DeprecatedInternalId], 10);\n }\n\n if (dash.metadata.annotations?.[AnnoKeyFolder]) {\n try {\n const folder = await backendSrv.getFolderByUid(dash.metadata.annotations[AnnoKeyFolder]);\n result.meta.folderTitle = folder.title;\n result.meta.folderUrl = folder.url;\n result.meta.folderUid = folder.uid;\n result.meta.folderId = folder.id;\n } catch (e) {\n // If user has access to dashboard but not to folder, continue without folder info\n if (getStatusFromError(e) !== 403) {\n throw new Error('Failed to load folder');\n }\n // we still want to save the folder uid so that we can properly handle disabling the folder picker in Settings -> General\n // this is an edge case when user has edit access to a dashboard but doesn't have access to the folder\n result.meta.folderUid = dash.metadata.annotations?.[AnnoKeyFolder];\n }\n }\n\n return result;\n } catch (e) {\n const status = getStatusFromError(e);\n const message = getMessageFromError(e);\n // Hacking around a bug in k8s api server that returns 500 for not found resources\n if (message.includes('not found') && status !== 404) {\n // @ts-expect-error\n e.status = 404;\n // @ts-expect-error\n e.data.message = 'Dashboard not found';\n }\n\n throw e;\n }\n }\n\n async listDeletedDashboards(options: ListDeletedDashboardsOptions) {\n return await this.client.list({ ...options, labelSelector: 'grafana.app/get-trash=true' });\n }\n\n restoreDashboard(dashboard: Resource<DashboardDataDTO>) {\n // reset the resource version to create a new resource\n dashboard.metadata.resourceVersion = '';\n return this.client.create(dashboard);\n }\n}\n","import { pick, sum } from 'lodash';\n\nimport { AlertGroupTotals } from 'app/types/unified-alerting';\n\nexport function totalFromStats(stats: AlertGroupTotals): number {\n // countable stats will pick only the states that indicate a single rule – health indicators like \"error\" and \"nodata\" should\n // not be counted because they are already counted by their state\n const countableStats = pick(stats, ['alerting', 'pending', 'inactive', 'recording', 'recovering']);\n const total = sum(Object.values(countableStats));\n\n return total;\n}\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\nexport interface RadioButtonDotProps<T>\n extends Omit<React.HTMLProps<HTMLInputElement>, 'label' | 'value' | 'onChange' | 'type'> {\n id: string;\n name: string;\n checked?: boolean;\n value?: T;\n disabled?: boolean;\n label: React.ReactNode;\n description?: string;\n onChange?: (id: string) => void;\n}\n\nexport const RadioButtonDot = <T extends string | number | readonly string[]>({\n id,\n name,\n label,\n checked,\n value,\n disabled,\n description,\n onChange,\n ...props\n}: RadioButtonDotProps<T>) => {\n const styles = useStyles2(getStyles);\n\n return (\n <label title={description} className={styles.label}>\n <input\n {...props}\n id={id}\n name={name}\n type=\"radio\"\n checked={checked}\n value={value}\n disabled={disabled}\n className={styles.input}\n onChange={() => onChange && onChange(id)}\n />\n <div>\n {label}\n {description && <div className={styles.description}>{description}</div>}\n </div>\n </label>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n input: css({\n position: 'relative',\n appearance: 'none',\n outline: 'none',\n backgroundColor: theme.colors.background.canvas,\n width: `${theme.spacing(2)} !important` /* TODO How to overcome this? Checkbox does the same 🙁 */,\n height: theme.spacing(2),\n border: `1px solid ${theme.colors.border.medium}`,\n borderRadius: theme.shape.radius.circle,\n cursor: 'pointer',\n margin: '3px 0' /* Space for box-shadow when focused */,\n\n ':checked': {\n backgroundColor: theme.v1.palette.white,\n border: `5px solid ${theme.colors.primary.main}`,\n },\n\n ':disabled': {\n backgroundColor: `${theme.colors.action.disabledBackground} !important`,\n borderColor: theme.colors.border.weak,\n },\n\n ':disabled:checked': {\n border: `1px solid ${theme.colors.border.weak}`,\n },\n\n ':disabled:checked::after': {\n content: '\"\"',\n width: '6px',\n height: '6px',\n backgroundColor: theme.colors.text.disabled,\n borderRadius: theme.shape.radius.circle,\n display: 'inline-block',\n position: 'absolute',\n top: '4px',\n left: '4px',\n },\n\n ':focus': {\n outline: 'none !important',\n boxShadow: `0 0 0 1px ${theme.colors.background.canvas}, 0 0 0 3px ${theme.colors.primary.main}`,\n },\n }),\n label: css({\n fontSize: theme.typography.fontSize,\n lineHeight: '22px' /* 16px for the radio button and 6px for the focus shadow */,\n display: 'grid',\n gridTemplateColumns: `${theme.spacing(2)} auto`,\n gap: theme.spacing(1),\n cursor: 'pointer',\n }),\n description: css({\n fontSize: theme.typography.size.sm,\n color: theme.colors.text.secondary,\n }),\n});\n","import { ChangeEvent, MouseEvent } from 'react';\n\nimport { Trans } from '@grafana/i18n';\n\nimport { Button } from '../Button/Button';\nimport { InlineField } from '../Forms/InlineField';\nimport { InlineFieldRow } from '../Forms/InlineFieldRow';\nimport { Input } from '../Input/Input';\nimport { TextArea } from '../TextArea/TextArea';\n\ninterface Props {\n label: string;\n hasCert: boolean;\n placeholder: string;\n useGrow?: boolean;\n\n onChange: (event: ChangeEvent<HTMLTextAreaElement>) => void;\n onClick: (event: MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport const CertificationKey = ({ hasCert, label, onChange, onClick, placeholder, useGrow }: Props) => {\n return (\n <InlineFieldRow>\n <InlineField label={label} labelWidth={14} disabled={hasCert} grow={useGrow}>\n {hasCert ? (\n <Input type=\"text\" value=\"configured\" width={24} />\n ) : (\n <TextArea rows={7} onChange={onChange} placeholder={placeholder} required />\n )}\n </InlineField>\n {hasCert && (\n <Button variant=\"secondary\" onClick={onClick} style={{ marginLeft: 4 }}>\n <Trans i18nKey=\"grafana-ui.data-source-settings.cert-key-reset\">Reset</Trans>\n </Button>\n )}\n </InlineFieldRow>\n );\n};\n","import { t } from '@grafana/i18n';\nimport { Box, ClipboardButton, Stack, Text, Tooltip } from '@grafana/ui';\n\nimport ConditionalWrap from '../ConditionalWrap';\n\ntype DetailTextProps = {\n id: string;\n label: string;\n value: string | JSX.Element | null;\n /** Should the value be displayed using monospace font family? */\n monospace?: boolean;\n /** Optional string to display in a tooltip on hover of the value */\n tooltipValue?: string;\n} & ConditionalProps;\n\ntype ConditionalProps =\n // Require either both copy props or neither\n | {\n /** Should we show a button for copying the value to clipboard? */\n showCopyButton: boolean;\n /**\n * Value to use for copying to clipboard, when enabled.\n * Needed as the value could be an element\n */\n copyValue: string;\n }\n | { showCopyButton?: never; copyValue?: never };\n\nexport const DetailText = ({\n id,\n label,\n value,\n monospace,\n showCopyButton,\n copyValue,\n tooltipValue,\n}: DetailTextProps) => {\n const copyToClipboardLabel = t('alerting.copy-to-clipboard', 'Copy \"{{label}}\" to clipboard', { label });\n return (\n <Box>\n <Stack direction=\"column\" gap={0}>\n <Text color=\"secondary\" id={id}>\n {label}\n </Text>\n <Text aria-labelledby={id} color=\"primary\" variant={monospace ? 'code' : 'body'}>\n <ConditionalWrap\n shouldWrap={Boolean(tooltipValue)}\n wrap={(children) => <Tooltip content={tooltipValue!}>{children}</Tooltip>}\n >\n <span>{value}</span>\n </ConditionalWrap>\n {showCopyButton && (\n <ClipboardButton\n aria-label={copyToClipboardLabel}\n fill=\"text\"\n variant=\"secondary\"\n icon=\"copy\"\n size=\"sm\"\n getText={() => copyValue}\n />\n )}\n </Text>\n </Stack>\n </Box>\n );\n};\n","import { css } from '@emotion/css';\nimport { formatDistanceToNowStrict } from 'date-fns';\nimport { isEmpty, isUndefined } from 'lodash';\nimport { Fragment } from 'react/jsx-runtime';\n\nimport { GrafanaTheme2, dateTimeFormat, dateTimeFormatTimeAgo } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Icon, Link, Stack, Text, TextLink, useStyles2 } from '@grafana/ui';\nimport { useDatasource } from 'app/features/datasources/hooks';\nimport { CombinedRule } from 'app/types/unified-alerting';\nimport { GrafanaAlertingRuleDefinition, RulerGrafanaRuleDTO } from 'app/types/unified-alerting-dto';\n\nimport { usePendingPeriod } from '../../../hooks/rules/usePendingPeriod';\nimport { makeEditTimeIntervalLink } from '../../../utils/misc';\nimport { getAnnotations, isPausedRule, prometheusRuleType, rulerRuleType } from '../../../utils/rules';\nimport { isNullDate } from '../../../utils/time';\nimport { Tokenize } from '../../Tokenize';\nimport { DetailText } from '../../common/DetailText';\nimport { TimingOptionsMeta } from '../../notification-policies/Policy';\nimport { ContactPointLink } from '../ContactPointLink';\n\nimport { UpdatedByUser } from './version-history/UpdatedBy';\n\nenum RuleType {\n GrafanaManagedAlertRule = 'Grafana-managed alert rule',\n GrafanaManagedRecordingRule = 'Grafana-managed recording rule',\n CloudAlertRule = 'Cloud alert rule',\n CloudRecordingRule = 'Cloud recording rule',\n Unknown = 'Unknown',\n}\n\nconst DetailGroup = ({ title, children }: { title: string; children: React.ReactNode }) => {\n return (\n <Stack direction=\"column\" gap={1}>\n <Text variant=\"h4\">{title}</Text>\n <Stack direction=\"column\" gap={2}>\n {children}\n </Stack>\n </Stack>\n );\n};\n\ninterface DetailsProps {\n rule: CombinedRule;\n}\n\nexport const Details = ({ rule }: DetailsProps) => {\n const styles = useStyles2(getStyles);\n\n const pendingPeriod = usePendingPeriod(rule);\n const keepFiringFor = rulerRuleType.grafana.alertingRule(rule.rulerRule) ? rule.rulerRule.keep_firing_for : undefined;\n\n let determinedRuleType: RuleType = RuleType.Unknown;\n if (rulerRuleType.grafana.alertingRule(rule.rulerRule)) {\n determinedRuleType = RuleType.GrafanaManagedAlertRule;\n } else if (rulerRuleType.grafana.recordingRule(rule.rulerRule)) {\n determinedRuleType = RuleType.GrafanaManagedRecordingRule;\n } else if (rulerRuleType.dataSource.alertingRule(rule.rulerRule)) {\n determinedRuleType = RuleType.CloudAlertRule;\n } else if (rulerRuleType.dataSource.recordingRule(rule.rulerRule)) {\n determinedRuleType = RuleType.CloudRecordingRule;\n }\n\n const targetDatasourceUid = rulerRuleType.grafana.recordingRule(rule.rulerRule)\n ? rule.rulerRule.grafana_alert.record?.target_datasource_uid\n : null;\n\n const datasource = useDatasource(targetDatasourceUid);\n\n const showTargetDatasource = targetDatasourceUid && targetDatasourceUid !== 'grafana';\n\n const evaluationDuration = rule.promRule?.evaluationTime;\n const evaluationTimestamp = rule.promRule?.lastEvaluation;\n\n const annotations = prometheusRuleType.alertingRule(rule.promRule) ? getAnnotations(rule.promRule) : undefined;\n\n const hasEvaluationDuration = Number.isFinite(evaluationDuration);\n\n const updated = rulerRuleType.grafana.rule(rule.rulerRule) ? rule.rulerRule.grafana_alert.updated : undefined;\n const isPaused = rulerRuleType.grafana.rule(rule.rulerRule) && isPausedRule(rule.rulerRule);\n\n const missingSeriesEvalsToResolve =\n rulerRuleType.grafana.rule(rule.rulerRule) &&\n !isUndefined(rule.rulerRule.grafana_alert.missing_series_evals_to_resolve)\n ? String(rule.rulerRule.grafana_alert.missing_series_evals_to_resolve)\n : undefined;\n\n const pausedIcon = (\n <Stack>\n <Text color=\"warning\">\n <Icon name=\"pause-circle\" />\n </Text>\n <Text>\n <Trans i18nKey=\"alerting.alert.evaluation-paused\">Alert evaluation currently paused</Trans>\n </Text>\n </Stack>\n );\n return (\n <div className={styles.metadata}>\n <DetailGroup title={t('alerting.alert.rule', 'Rule')}>\n <DetailText id=\"rule-type\" label={t('alerting.alert.rule-type', 'Rule type')} value={determinedRuleType} />\n {rulerRuleType.grafana.rule(rule.rulerRule) && (\n <>\n <DetailText\n id=\"rule-type\"\n label={t('alerting.alert.rule-identifier', 'Rule identifier')}\n value={rule.rulerRule.grafana_alert.uid}\n monospace\n showCopyButton\n copyValue={rule.rulerRule.grafana_alert.uid}\n />\n <DetailText\n id=\"last-updated-by\"\n label={t('alerting.alert.last-updated-by', 'Last updated by')}\n value={<UpdatedByUser user={rule.rulerRule.grafana_alert.updated_by} />}\n />\n {updated && (\n <DetailText\n id=\"date-of-last-update\"\n label={t('alerting.alert.last-updated-at', 'Last updated at')}\n value={dateTimeFormat(updated) + ` (${dateTimeFormatTimeAgo(updated)})`}\n />\n )}\n </>\n )}\n {showTargetDatasource && (\n <DetailText\n id=\"target-datasource-uid\"\n label={t('alerting.alert.target-datasource-uid', 'Target data source')}\n value={\n <Link href={`/connections/datasources/edit/${datasource?.uid}`}>\n <Stack direction=\"row\" gap={1}>\n <img style={{ width: '16px' }} src={datasource?.meta.info.logos.small} alt=\"datasource logo\" />\n {datasource?.name}\n </Stack>\n </Link>\n }\n />\n )}\n </DetailGroup>\n\n <DetailGroup title={t('alerting.alert.evaluation', 'Evaluation')}>\n {isPaused ? (\n pausedIcon\n ) : (\n <>\n {hasEvaluationDuration && evaluationTimestamp && (\n <DetailText\n id=\"last-evaluated\"\n label={t('alerting.alert.last-evaluated', 'Last evaluated')}\n value={\n !isNullDate(evaluationTimestamp)\n ? formatDistanceToNowStrict(new Date(evaluationTimestamp), { addSuffix: true })\n : '-'\n }\n tooltipValue={!isNullDate(evaluationTimestamp) ? dateTimeFormat(evaluationTimestamp) : undefined}\n />\n )}\n {hasEvaluationDuration && (\n <DetailText\n id=\"last-evaluation-duration\"\n label={t('alerting.alert.last-evaluation-duration', 'Last evaluation duration')}\n value={`${evaluationDuration} ms`}\n />\n )}\n {missingSeriesEvalsToResolve && (\n <DetailText\n id=\"missing-series-resolve\"\n label={t('alerting.alert.missing-series-resolve', 'Missing series evaluations to resolve')}\n value={missingSeriesEvalsToResolve}\n tooltipValue={t(\n 'alerting.alert.description-missing-series-evaluations',\n 'The number of consecutive evaluation intervals a dimension must be missing before the alert instance becomes stale, and is then automatically resolved and evicted. Defaults to 2 if empty.'\n )}\n />\n )}\n </>\n )}\n\n {pendingPeriod && (\n <DetailText\n id=\"pending-period\"\n label={t('alerting.alert.pending-period', 'Pending period')}\n value={pendingPeriod}\n />\n )}\n {keepFiringFor && (\n <DetailText\n id=\"keep-firing-for\"\n label={t('alerting.alert.keep-firing-for', 'Keep firing for')}\n value={keepFiringFor}\n />\n )}\n </DetailGroup>\n\n {/* show simplified routing information for Grafana managed alert rules */}\n {rulerRuleType.grafana.alertingRule(rule.rulerRule) &&\n !isEmpty(rule.rulerRule.grafana_alert.notification_settings) && (\n <NotificationSettings rulerRule={rule.rulerRule} />\n )}\n\n {rulerRuleType.grafana.rule(rule.rulerRule) &&\n // grafana recording rules don't have these fields\n rule.rulerRule.grafana_alert.no_data_state &&\n rule.rulerRule.grafana_alert.exec_err_state && (\n <DetailGroup title={t('alerting.alert.alert-state', 'Alert state')}>\n {hasEvaluationDuration && (\n <DetailText\n id=\"alert-state-no-data\"\n label={t('alerting.alert.state-no-data', 'Alert state if no data or all values are null')}\n value={rule.rulerRule.grafana_alert.no_data_state}\n />\n )}\n {pendingPeriod && (\n <DetailText\n id=\"alert-state-exec-err\"\n label={t('alerting.alert.state-error-timeout', 'Alert state if execution error or timeout')}\n value={rule.rulerRule.grafana_alert.exec_err_state}\n />\n )}\n </DetailGroup>\n )}\n\n {annotations && (\n <DetailGroup title={t('alerting.alert.annotations', 'Annotations')}>\n {Object.keys(annotations).length === 0 ? (\n <div>\n <Text color=\"secondary\" italic>\n <Trans i18nKey=\"alerting.alert.no-annotations\">No annotations</Trans>\n </Text>\n </div>\n ) : (\n Object.entries(annotations).map(([name, value]) => {\n const id = `annotation-${name.replace(/\\s/g, '-')}`;\n return <DetailText id={id} key={name} label={name} value={<AnnotationValue value={value} />} />;\n })\n )}\n </DetailGroup>\n )}\n </div>\n );\n};\n\ninterface AnnotationValueProps {\n value: string;\n}\n\nexport function AnnotationValue({ value }: AnnotationValueProps) {\n const needsExternalLink = value && value.startsWith('http');\n const tokenizeValue = <Tokenize input={value} delimiter={['{{', '}}']} />;\n\n if (needsExternalLink) {\n return (\n <TextLink href={value} external>\n {value}\n </TextLink>\n );\n }\n\n return <Text color=\"primary\">{tokenizeValue}</Text>;\n}\n\ninterface NotificationSettingsProps {\n rulerRule: RulerGrafanaRuleDTO<GrafanaAlertingRuleDefinition>;\n}\n\nconst NotificationSettings = ({ rulerRule }: NotificationSettingsProps) => {\n const notificationSettings = rulerRule.grafana_alert.notification_settings;\n if (!notificationSettings) {\n return null;\n }\n\n return (\n <DetailGroup title={t('alerting.alert.notification-configuration.group-title', 'Notification configuration')}>\n <DetailText\n id=\"receiver\"\n label={t('alerting.alert.notification-configuration.contact-point', 'Contact point')}\n value={<ContactPointLink name={notificationSettings.receiver} />}\n />\n\n {notificationSettings.mute_time_intervals && (\n <DetailText\n id=\"mute-timings\"\n label={t('alerting.alert.notification-configuration.mute-timings', 'Mute timings')}\n value={\n <>\n {notificationSettings.mute_time_intervals.map((intervalName, index) => (\n <Fragment key={intervalName}>\n <TextLink href={makeEditTimeIntervalLink(intervalName, { alertmanager: 'grafana' })}>\n {intervalName}\n </TextLink>\n {index < notificationSettings.mute_time_intervals!.length - 1 && ', '}\n </Fragment>\n ))}\n </>\n }\n />\n )}\n\n {notificationSettings.active_time_intervals && (\n <DetailText\n id=\"active-time-intervals\"\n label={t('alerting.alert.notification-configuration.active-timings', 'Active time intervals')}\n value={\n <>\n {notificationSettings.active_time_intervals.map((intervalName, index) => (\n <Fragment key={intervalName}>\n <TextLink href={makeEditTimeIntervalLink(intervalName, { alertmanager: 'grafana' })}>\n {intervalName}\n </TextLink>\n {index < notificationSettings.active_time_intervals!.length - 1 && ', '}\n </Fragment>\n ))}\n </>\n }\n />\n )}\n\n {/* override grouping */}\n {notificationSettings.group_by && (\n <DetailText\n id=\"group-by\"\n label={t('alerting.alert.notification-configuration.group-by', 'Grouped by')}\n value={notificationSettings.group_by.join(', ')}\n />\n )}\n\n {/* override timings */}\n {(notificationSettings.group_interval ||\n notificationSettings.group_wait ||\n notificationSettings.repeat_interval) && (\n <DetailText\n id=\"timing-options\"\n label={t('alerting.alert.notification-configuration.timing-options', 'Timings')}\n value={\n <TimingOptionsMeta\n timingOptions={{\n group_interval: notificationSettings.group_interval,\n group_wait: notificationSettings.group_wait,\n repeat_interval: notificationSettings.repeat_interval,\n }}\n />\n }\n />\n )}\n </DetailGroup>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n metadata: css({\n display: 'grid',\n gap: theme.spacing(4),\n gridTemplateColumns: '1fr 1fr 1fr',\n\n [theme.breakpoints.down('lg')]: {\n gridTemplateColumns: '1fr 1fr',\n },\n [theme.breakpoints.down('sm')]: {\n gridTemplateColumns: '1fr',\n },\n }),\n});\n","import { NavModel } from '@grafana/data';\nimport { useSelector } from 'app/types/store';\n\nimport { getNavModel } from '../selectors/navModel';\n\nexport const useNavModel = (id: string): NavModel => {\n const navIndex = useSelector((state) => state.navIndex);\n return getNavModel(navIndex, id);\n};\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nexport type DragHandlePosition = 'middle' | 'start' | 'end';\n\nexport const getDragStyles = (theme: GrafanaTheme2, handlePosition?: DragHandlePosition) => {\n const position = handlePosition || 'middle';\n const baseColor = theme.colors.emphasize(theme.colors.background.secondary, 0.15);\n const hoverColor = theme.colors.primary.border;\n const clickTargetSize = theme.spacing(2);\n const handlebarThickness = 4;\n const handlebarWidth = 200;\n let verticalOffset = '50%';\n let horizontalOffset = '50%';\n\n switch (position) {\n case 'start': {\n verticalOffset = '0%';\n horizontalOffset = '0%';\n break;\n }\n case 'end': {\n verticalOffset = '100%';\n horizontalOffset = '100%';\n break;\n }\n }\n\n const dragHandleBase = css({\n position: 'relative',\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create('border-color'),\n },\n zIndex: 1,\n },\n\n '&:after': {\n background: baseColor,\n content: '\"\"',\n position: 'absolute',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create('background'),\n },\n transform: 'translate(-50%, -50%)',\n borderRadius: theme.shape.radius.pill,\n zIndex: 1,\n },\n\n '&:hover': {\n '&:before': {\n borderColor: hoverColor,\n },\n\n '&:after': {\n background: hoverColor,\n },\n },\n });\n\n const beforeVertical = {\n borderRight: '1px solid transparent',\n height: '100%',\n left: verticalOffset,\n transform: 'translateX(-50%)',\n };\n\n const beforeHorizontal = {\n borderTop: '1px solid transparent',\n top: horizontalOffset,\n transform: 'translateY(-50%)',\n };\n\n return {\n dragHandleVertical: cx(\n dragHandleBase,\n css({\n cursor: 'col-resize',\n width: clickTargetSize,\n\n '&:before': beforeVertical,\n\n '&:after': {\n left: verticalOffset,\n top: '50%',\n height: handlebarWidth,\n width: handlebarThickness,\n },\n })\n ),\n dragHandleHorizontal: cx(\n dragHandleBase,\n css({\n height: clickTargetSize,\n cursor: 'row-resize',\n\n '&:before': beforeHorizontal,\n\n '&:after': {\n left: '50%',\n top: horizontalOffset,\n height: handlebarThickness,\n width: handlebarWidth,\n },\n })\n ),\n dragHandleBaseVertical: cx(\n dragHandleBase,\n css({\n cursor: 'col-resize',\n width: clickTargetSize,\n\n '&:before': beforeVertical,\n })\n ),\n dragHandleBaseHorizontal: cx(\n dragHandleBase,\n css({\n cursor: 'row-resize',\n height: clickTargetSize,\n\n '&:before': beforeHorizontal,\n })\n ),\n };\n};\n","import { t } from '@grafana/i18n';\nimport { RepositoryView } from 'app/api/clients/provisioning/v0alpha1';\nimport { ManagerKind } from 'app/features/apiserver/types';\nimport { findItem } from 'app/features/browse-dashboards/state/utils';\nimport { BrowseDashboardsState } from 'app/features/browse-dashboards/types';\nimport { DashboardViewItem } from 'app/features/search/types';\n\nimport { RepoWorkflows } from '../types';\n\nexport function getIsReadOnlyWorkflows(workflows?: RepoWorkflows): boolean {\n // Repository is considered read-only if it has no workflows defined (workflows are required for write operations)\n return workflows?.length === 0;\n}\n\nexport function getIsReadOnlyRepo(repository: RepositoryView | undefined): boolean {\n if (!repository) {\n return false;\n }\n\n return getIsReadOnlyWorkflows(repository.workflows);\n}\n\n// Right now we only support local file provisioning message and git provisioned. This can be extended in the future as needed.\nexport const getReadOnlyTooltipText = ({ isLocal = false }) => {\n return isLocal\n ? t(\n 'provisioning.read-only-local-tooltip',\n 'This resource is read-only and provisioned through file provisioning. To make any changes, update the connected repository. To modify the settings go to Administration > Provisioning > Repositories.'\n )\n : t(\n 'provisioning.read-only-remote-tooltip',\n 'This resource is read-only and provisioned through Git. To make any changes, update the connected repository. To modify the settings go to Administration > Provisioning > Repositories.'\n );\n};\n\n/**\n * Finds the repository name for an item by traversing up the tree to find the root provisioned folder (managed by ManagerKind.Repo)\n * This should be an edge case where user have multiple provisioned folders and try to managing resources on root folder\n */\nexport function getItemRepositoryUid(\n item: DashboardViewItem,\n rootItems: DashboardViewItem[],\n childrenByParentUID: BrowseDashboardsState['childrenByParentUID']\n): string {\n // For root provisioned folders, the UID is the repository name\n if (item.managedBy === ManagerKind.Repo && !item.parentUID && item.kind === 'folder') {\n return item.uid;\n }\n\n // Traverse up the tree to find the root provisioned folder\n let currentItem = item;\n while (currentItem.parentUID) {\n const parent = findItem(rootItems, childrenByParentUID, currentItem.parentUID);\n if (!parent) {\n break;\n }\n\n if (parent.managedBy === ManagerKind.Repo && !parent.parentUID) {\n return currentItem.parentUID;\n }\n\n currentItem = parent;\n }\n\n return 'non_provisioned';\n}\n","import { DataFrame, FieldCache, FieldType, Field, Labels, FieldWithIndex } from '@grafana/data';\n\nimport { logFrameLabelsToLabels, LogsFrame } from './logsFrame';\n\n// take the labels from the line-field, and \"stretch\" it into an array\n// with the length of the frame (so there are the same labels for every row)\nfunction makeLabelsArray(lineField: Field, length: number): Labels[] | null {\n const lineLabels = lineField.labels;\n if (lineLabels !== undefined) {\n const result = new Array(length);\n result.fill(lineLabels);\n return result;\n } else {\n return null;\n }\n}\n\n// if the frame has \"labels\" field with type \"other\", adjust the behavior.\n// we also have to return the labels-field (if we used it),\n// to be able to remove it from the unused-fields, later.\nfunction makeLabelsGetter(\n cache: FieldCache,\n lineField: Field,\n frame: DataFrame\n): [FieldWithIndex | null, () => Labels[] | null] {\n // If we have labels field with type \"other\", use that\n const labelsField = cache.getFieldByName('labels');\n if (labelsField !== undefined && labelsField.type === FieldType.other) {\n const values = labelsField.values.map(logFrameLabelsToLabels);\n return [labelsField, () => values];\n } else {\n // Otherwise we use the labels on the line-field, and make an array with it\n return [null, () => makeLabelsArray(lineField, frame.length)];\n }\n}\n\nexport function parseLegacyLogsFrame(frame: DataFrame): LogsFrame | null {\n const cache = new FieldCache(frame);\n const timeField = cache.getFirstFieldOfType(FieldType.time);\n const bodyField = cache.getFirstFieldOfType(FieldType.string);\n\n // these two are mandatory\n if (timeField === undefined || bodyField === undefined) {\n return null;\n }\n\n const timeNanosecondField = cache.getFieldByName('tsNs') ?? null;\n const severityField = cache.getFieldByName('level') ?? cache.getFieldByName('detected_level') ?? null;\n const idField = cache.getFieldByName('id') ?? null;\n\n // extracting the labels is done very differently for old-loki-style and simple-style\n // dataframes, so it's a little awkward to handle it,\n // we both need to on-demand extract the labels, and also get teh labelsField,\n // but only if the labelsField is used.\n const [labelsField, getL] = makeLabelsGetter(cache, bodyField, frame);\n\n const extraFields = cache.fields.filter(\n (_, i) =>\n i !== timeField.index &&\n i !== bodyField.index &&\n i !== timeNanosecondField?.index &&\n i !== severityField?.index &&\n i !== idField?.index &&\n i !== labelsField?.index\n );\n\n return {\n timeField,\n bodyField,\n timeNanosecondField,\n severityField,\n idField,\n getLogFrameLabels: getL,\n getLogFrameLabelsAsLabels: getL,\n getLabelFieldName: () => labelsField?.name ?? null,\n extraFields,\n };\n}\n","import { DataFrame, FieldCache, FieldType, FieldWithIndex, DataFrameType, Labels } from '@grafana/data';\n\nimport { parseLegacyLogsFrame } from './legacyLogsFrame';\n\n// these are like Labels, but their values can be\n// arbitrary structures, not just strings\nexport type LogFrameLabels = Record<string, unknown>;\n\n// the attributes-access is a little awkward, but it's necessary\n// because there are multiple,very different dataFrame-representations.\nexport type LogsFrame = {\n timeField: FieldWithIndex;\n bodyField: FieldWithIndex;\n timeNanosecondField: FieldWithIndex | null;\n severityField: FieldWithIndex | null;\n idField: FieldWithIndex | null;\n getLogFrameLabels: () => LogFrameLabels[] | null; // may be slow, so we only do it when asked for it explicitly\n getLogFrameLabelsAsLabels: () => Labels[] | null; // temporarily exists to make the labels=>attributes migration simpler\n getLabelFieldName: () => string | null;\n extraFields: FieldWithIndex[];\n};\n\nfunction getField(cache: FieldCache, name: string, fieldType: FieldType): FieldWithIndex | undefined {\n const field = cache.getFieldByName(name);\n if (field === undefined) {\n return undefined;\n }\n\n return field.type === fieldType ? field : undefined;\n}\n\nconst DATAPLANE_TIMESTAMP_NAME = 'timestamp';\nconst DATAPLANE_BODY_NAME = 'body';\nconst DATAPLANE_SEVERITY_NAME = 'severity';\nconst DATAPLANE_ID_NAME = 'id';\nconst DATAPLANE_LABELS_NAME = 'labels';\n\n// NOTE: this is a hot fn, we need to avoid allocating new objects here\nexport function logFrameLabelsToLabels(logFrameLabels: LogFrameLabels): Labels {\n let needsSerialization = false;\n\n for (const k in logFrameLabels) {\n const v = logFrameLabels[k];\n\n if (typeof v !== 'string') {\n needsSerialization = true;\n break;\n }\n }\n\n if (needsSerialization) {\n let labels: Labels = {};\n\n for (const k in logFrameLabels) {\n const v = logFrameLabels[k];\n labels[k] = typeof v === 'string' ? v : JSON.stringify(v);\n }\n\n return labels;\n }\n\n // @ts-ignore\n return logFrameLabels as Labels;\n}\n\nexport function parseDataplaneLogsFrame(frame: DataFrame): LogsFrame | null {\n const cache = new FieldCache(frame);\n\n const timestampField = getField(cache, DATAPLANE_TIMESTAMP_NAME, FieldType.time);\n const bodyField = getField(cache, DATAPLANE_BODY_NAME, FieldType.string);\n\n // these two are mandatory\n if (timestampField === undefined || bodyField === undefined) {\n return null;\n }\n\n const severityField = getField(cache, DATAPLANE_SEVERITY_NAME, FieldType.string) ?? null;\n const idField = getField(cache, DATAPLANE_ID_NAME, FieldType.string) ?? null;\n const labelsField = getField(cache, DATAPLANE_LABELS_NAME, FieldType.other) ?? null;\n\n const labels = labelsField === null ? null : labelsField.values;\n\n const extraFields = cache.fields.filter(\n (_, i) =>\n i !== timestampField.index &&\n i !== bodyField.index &&\n i !== severityField?.index &&\n i !== idField?.index &&\n i !== labelsField?.index\n );\n\n return {\n timeField: timestampField,\n bodyField,\n severityField,\n idField,\n getLogFrameLabels: () => labels,\n timeNanosecondField: null,\n getLogFrameLabelsAsLabels: () => (labels !== null ? labels.map(logFrameLabelsToLabels) : null),\n getLabelFieldName: () => (labelsField !== null ? labelsField.name : null),\n extraFields,\n };\n}\n\nexport function parseLogsFrame(frame: DataFrame): LogsFrame | null {\n if (frame.meta?.type === DataFrameType.LogLines) {\n return parseDataplaneLogsFrame(frame);\n } else {\n return parseLegacyLogsFrame(frame);\n }\n}\n","import GeoJSON from 'ol/format/GeoJSON';\nimport { Geometry } from 'ol/geom';\n\nimport { DataFrame, Field, FieldType, getFieldTypeFromValue } from '@grafana/data';\n\ninterface FieldInfo {\n values: Array<string | number | null | undefined>;\n types: Set<FieldType>;\n count: number;\n}\n\n// http://geojson.xyz/\n\nexport function frameFromGeoJSON(body: Document | Element | Object | string): DataFrame {\n const data = new GeoJSON().readFeatures(body, { featureProjection: 'EPSG:3857' });\n const length = data.length;\n\n const geo: Geometry[] = new Array(length).fill(null);\n\n const fieldOrder: string[] = [];\n const lookup = new Map<string, FieldInfo>();\n const getField = (name: string) => {\n let f = lookup.get(name);\n if (!f) {\n f = {\n types: new Set<FieldType>(),\n values: new Array(length).fill(null),\n count: 0,\n };\n fieldOrder.push(name);\n lookup.set(name, f);\n }\n return f;\n };\n const getBestName = (...names: string[]) => {\n for (const k of names) {\n if (!lookup.has(k)) {\n return k;\n }\n }\n return '___' + names[0];\n };\n\n const idfield: FieldInfo = {\n types: new Set<FieldType>(),\n values: new Array(length).fill(null),\n count: 0,\n };\n for (let i = 0; i < length; i++) {\n const feature = data[i];\n geo[i] = feature.getGeometry()!;\n\n const id = feature.getId();\n if (id != null) {\n idfield.values[i] = id;\n idfield.types.add(getFieldTypeFromValue(id));\n idfield.count++;\n }\n\n for (const key of feature.getKeys()) {\n const val = feature.get(key);\n if (val === geo[i] || val == null) {\n continue;\n }\n const field = getField(key);\n field.values[i] = val;\n field.types.add(getFieldTypeFromValue(val));\n field.count++;\n }\n }\n\n const fields: Field[] = [];\n if (idfield.count > 0) {\n const type = ensureSingleType(idfield);\n fields.push({\n name: getBestName('id', '_id', '__id'),\n type,\n values: idfield.values,\n config: {},\n });\n }\n\n // Add a geometry field\n fields.push({\n name: getBestName('geo', 'geometry'),\n type: FieldType.geo,\n values: geo,\n config: {},\n });\n\n for (const name of fieldOrder) {\n const info = lookup.get(name);\n if (!info) {\n continue;\n }\n const type = ensureSingleType(info);\n fields.push({\n name,\n type,\n values: info.values,\n config: {},\n });\n }\n\n // Simple frame\n return {\n fields,\n length,\n };\n}\n\nfunction ensureSingleType(info: FieldInfo): FieldType {\n if (info.count < 1) {\n return FieldType.other;\n }\n if (info.types.size > 1) {\n info.values = info.values.map((v) => {\n if (v != null) {\n return `${v}`;\n }\n return v;\n });\n return FieldType.string;\n }\n return info.types.values().next().value ?? FieldType.other;\n}\n","import { Point } from 'ol/geom';\nimport { fromLonLat } from 'ol/proj';\n\nimport { PlacenameInfo, Gazetteer } from './gazetteer';\n\n// https://github.com/grafana/worldmap-panel/blob/master/src/data/countries.json\nexport interface WorldmapPoint {\n key?: string;\n keys?: string[]; // new in grafana 8.1+\n latitude: number;\n longitude: number;\n name?: string;\n}\n\nexport function loadWorldmapPoints(path: string, data: WorldmapPoint[]): Gazetteer {\n let count = 0;\n const values = new Map<string, PlacenameInfo>();\n for (const v of data) {\n const point = new Point(fromLonLat([v.longitude, v.latitude]));\n const info: PlacenameInfo = {\n point: () => point,\n geometry: () => point,\n };\n if (v.name) {\n values.set(v.name, info);\n values.set(v.name.toUpperCase(), info);\n }\n if (v.key) {\n values.set(v.key, info);\n values.set(v.key.toUpperCase(), info);\n }\n if (v.keys) {\n for (const key of v.keys) {\n values.set(key, info);\n values.set(key.toUpperCase(), info);\n }\n }\n count++;\n }\n return {\n path,\n find: (k) => {\n let v = values.get(k);\n if (!v && typeof k === 'string') {\n v = values.get(k.toUpperCase());\n }\n return v;\n },\n count,\n examples: (count) => {\n const first: string[] = [];\n if (values.size < 1) {\n first.push('no values found');\n } else {\n for (const key of values.keys()) {\n first.push(key);\n if (first.length >= count) {\n break;\n }\n }\n }\n return first;\n },\n };\n}\n","import { getCenter } from 'ol/extent';\nimport { Geometry, Point } from 'ol/geom';\n\nimport { DataFrame, Field, FieldType, KeyValue, toDataFrame } from '@grafana/data';\n\nimport { frameFromGeoJSON } from '../format/geojson';\nimport { pointFieldFromLonLat, pointFieldFromGeohash } from '../format/utils';\n\nimport { loadWorldmapPoints } from './worldmap';\n\nexport interface PlacenameInfo {\n point: () => Point | undefined; // lon, lat (WGS84)\n geometry: () => Geometry | undefined;\n frame?: DataFrame;\n index?: number;\n}\n\nexport interface Gazetteer {\n path: string;\n error?: string;\n find: (key: string) => PlacenameInfo | undefined;\n examples: (count: number) => string[];\n frame?: () => DataFrame;\n count?: number;\n}\n\n// Without knowing the datatype pick a good lookup function\nexport function loadGazetteer(path: string, data: any): Gazetteer {\n // try loading geojson\n let frame: DataFrame | undefined = undefined;\n\n if (Array.isArray(data)) {\n const first = data[0];\n // Check for legacy worldmap syntax\n if (first.latitude && first.longitude && (first.key || first.keys)) {\n return loadWorldmapPoints(path, data);\n }\n } else {\n if (Array.isArray(data?.features) && data?.type === 'FeatureCollection') {\n frame = frameFromGeoJSON(data);\n }\n }\n\n if (!frame) {\n try {\n frame = toDataFrame(data);\n } catch (ex) {\n return {\n path,\n error: `${ex}`,\n find: (k) => undefined,\n examples: (v) => [],\n };\n }\n }\n\n return frameAsGazetter(frame, { path });\n}\n\nexport function frameAsGazetter(frame: DataFrame, opts: { path: string; keys?: string[] }): Gazetteer {\n const keys: Field[] = [];\n let geo: Field<Geometry | undefined> | undefined = undefined;\n let lat: Field | undefined = undefined;\n let lng: Field | undefined = undefined;\n let geohash: Field | undefined = undefined;\n let firstString: Field | undefined = undefined;\n for (const f of frame.fields) {\n if (f.type === FieldType.geo) {\n geo = f;\n }\n if (!firstString && f.type === FieldType.string) {\n firstString = f;\n }\n if (f.name) {\n if (opts.keys && opts.keys.includes(f.name)) {\n keys.push(f);\n }\n\n const name = f.name.toUpperCase();\n switch (name) {\n case 'LAT':\n case 'LATITUTE':\n lat = f;\n break;\n\n case 'LON':\n case 'LNG':\n case 'LONG':\n case 'LONGITUE':\n lng = f;\n break;\n\n case 'GEOHASH':\n geohash = f;\n break;\n\n case 'ID':\n case 'UID':\n case 'KEY':\n case 'CODE':\n if (!opts.keys) {\n keys.push(f);\n }\n break;\n\n default: {\n if (!opts.keys) {\n if (name.endsWith('_ID') || name.endsWith('_CODE')) {\n keys.push(f);\n }\n }\n }\n }\n }\n }\n\n // Use the first string field\n if (!keys.length && firstString) {\n keys.push(firstString);\n }\n\n let isPoint = false;\n\n // Create a geo field from lat+lng\n if (!geo) {\n if (geohash) {\n geo = pointFieldFromGeohash(geohash);\n isPoint = true;\n } else if (lat && lng) {\n geo = pointFieldFromLonLat(lng, lat);\n isPoint = true;\n }\n } else {\n isPoint = geo.values[0]?.getType() === 'Point';\n }\n\n const lookup = new Map<string, number>();\n keys.forEach((f) => {\n f.values.forEach((k, idx) => {\n const str = `${k}`;\n lookup.set(str.toUpperCase(), idx);\n lookup.set(str, idx);\n });\n });\n\n return {\n path: opts.path,\n find: (k) => {\n const index = lookup.get(k);\n if (index != null) {\n const g = geo?.values[index];\n return {\n frame,\n index,\n point: () => {\n if (!g || isPoint) {\n return g as Point;\n }\n return new Point(getCenter(g.getExtent()));\n },\n geometry: () => g,\n };\n }\n return undefined;\n },\n examples: (v) => {\n const ex: string[] = [];\n for (let k of lookup.keys()) {\n ex.push(k);\n if (ex.length > v) {\n break;\n }\n }\n return ex;\n },\n frame: () => frame,\n count: frame.length,\n };\n}\n\nconst registry: KeyValue<Gazetteer> = {};\n\nexport const COUNTRIES_GAZETTEER_PATH = `${window.__grafana_public_path__}build/gazetteer/countries.json`;\n\n/**\n * Given a path to a file return a cached lookup function\n */\nexport async function getGazetteer(path?: string): Promise<Gazetteer> {\n // When not specified, use the default path\n if (!path) {\n path = COUNTRIES_GAZETTEER_PATH;\n }\n\n let lookup = registry[path];\n if (!lookup) {\n try {\n // block the async function\n const response = await fetch(path);\n const data = await response.json();\n lookup = loadGazetteer(path, data);\n } catch (err) {\n console.warn('Error loading placename lookup', path, err);\n lookup = {\n path,\n error: 'Error loading URL',\n find: (k) => undefined,\n examples: (v) => [],\n };\n }\n registry[path] = lookup;\n }\n return lookup;\n}\n","import { alertingApi as api } from '../api/alertingApi';\nexport const addTagTypes = ['RoutingTree'] as const;\nconst injectedRtkApi = api\n .enhanceEndpoints({\n addTagTypes,\n })\n .injectEndpoints({\n endpoints: (build) => ({\n listNamespacedRoutingTree: build.query<ListNamespacedRoutingTreeApiResponse, ListNamespacedRoutingTreeApiArg>({\n query: (queryArg) => ({\n url: `/apis/notifications.alerting.grafana.app/v0alpha1/namespaces/${queryArg['namespace']}/routingtrees`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['RoutingTree'],\n }),\n replaceNamespacedRoutingTree: build.mutation<\n ReplaceNamespacedRoutingTreeApiResponse,\n ReplaceNamespacedRoutingTreeApiArg\n >({\n query: (queryArg) => ({\n url: `/apis/notifications.alerting.grafana.app/v0alpha1/namespaces/${queryArg['namespace']}/routingtrees/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.comGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['RoutingTree'],\n }),\n }),\n overrideExisting: false,\n });\nexport { injectedRtkApi as generatedRoutesApi };\nexport type ListNamespacedRoutingTreeApiResponse =\n /** status 200 OK */ ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTreeList;\nexport type ListNamespacedRoutingTreeApiArg = {\n /** object name and auth scope, such as for teams and projects */\n namespace: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type ReplaceNamespacedRoutingTreeApiResponse = /** status 200 OK */\n | ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree\n | /** status 201 Created */ ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree;\nexport type ReplaceNamespacedRoutingTreeApiArg = {\n /** name of the RoutingTree */\n name: string;\n /** object name and auth scope, such as for teams and projects */\n namespace: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n comGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree;\n};\nexport type IoK8SApimachineryPkgApisMetaV1Time = string;\nexport type IoK8SApimachineryPkgApisMetaV1FieldsV1 = object;\nexport type IoK8SApimachineryPkgApisMetaV1ManagedFieldsEntry = {\n /** APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted. */\n apiVersion?: string;\n /** FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\" */\n fieldsType?: string;\n /** FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type. */\n fieldsV1?: IoK8SApimachineryPkgApisMetaV1FieldsV1;\n /** Manager is an identifier of the workflow managing these fields. */\n manager?: string;\n /** Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'. */\n operation?: string;\n /** Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource. */\n subresource?: string;\n /** Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over. */\n time?: IoK8SApimachineryPkgApisMetaV1Time;\n};\nexport type IoK8SApimachineryPkgApisMetaV1OwnerReference = {\n /** API version of the referent. */\n apiVersion: string;\n /** If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned. */\n blockOwnerDeletion?: boolean;\n /** If true, this reference points to the managing controller. */\n controller?: boolean;\n /** Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n /** Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name: string;\n /** UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid: string;\n};\nexport type IoK8SApimachineryPkgApisMetaV1ObjectMeta = {\n /** Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations */\n annotations?: {\n [key: string]: string;\n };\n /** CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n \n Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n creationTimestamp?: IoK8SApimachineryPkgApisMetaV1Time;\n /** Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. */\n deletionGracePeriodSeconds?: number;\n /** DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n \n Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n deletionTimestamp?: IoK8SApimachineryPkgApisMetaV1Time;\n /** Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list. */\n finalizers?: string[];\n /** GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n \n If this field is specified and the generated name exists, the server will return a 409.\n \n Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency */\n generateName?: string;\n /** A sequence number representing a specific generation of the desired state. Populated by the system. Read-only. */\n generation?: number;\n /** Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels */\n labels?: {\n [key: string]: string;\n };\n /** ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object. */\n managedFields?: IoK8SApimachineryPkgApisMetaV1ManagedFieldsEntry[];\n /** Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name?: string;\n /** Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n \n Must be a DNS_LABEL. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces */\n namespace?: string;\n /** List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller. */\n ownerReferences?: IoK8SApimachineryPkgApisMetaV1OwnerReference[];\n /** An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n \n Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n /** UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n \n Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RouteDefaults = {\n group_by?: string[];\n group_interval?: string;\n group_wait?: string;\n receiver: string;\n repeat_interval?: string;\n};\nexport type ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Matcher = {\n label: string;\n type: string;\n value: string;\n};\nexport type ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route = {\n continue?: boolean;\n group_by?: string[];\n group_interval?: string;\n group_wait?: string;\n matchers?: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Matcher[];\n mute_time_intervals?: string[];\n receiver?: string;\n repeat_interval?: string;\n routes?: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route[];\n};\nexport type ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTreeSpec = {\n defaults: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RouteDefaults;\n routes: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route[];\n};\nexport type ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: IoK8SApimachineryPkgApisMetaV1ObjectMeta;\n spec: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTreeSpec;\n};\nexport type IoK8SApimachineryPkgApisMetaV1ListMeta = {\n /** continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message. */\n continue?: string;\n /** remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact. */\n remainingItemCount?: number;\n /** String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n};\nexport type ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTreeList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: IoK8SApimachineryPkgApisMetaV1ListMeta;\n};\n","import { pick } from 'lodash';\nimport memoize from 'micro-memoize';\n\nimport { INHERITABLE_KEYS, type InheritableProperties } from '@grafana/alerting/internal';\nimport { BaseAlertmanagerArgs, Skippable } from 'app/features/alerting/unified/types/hooks';\nimport { MatcherOperator, ROUTES_META_SYMBOL, Route } from 'app/plugins/datasource/alertmanager/types';\n\nimport { getAPINamespace } from '../../../../../api/utils';\nimport { alertmanagerApi } from '../../api/alertmanagerApi';\nimport { useAsync } from '../../hooks/useAsync';\nimport { useProduceNewAlertmanagerConfiguration } from '../../hooks/useProduceNewAlertmanagerConfig';\nimport {\n ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route,\n ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RouteDefaults,\n ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree,\n generatedRoutesApi as routingTreeApi,\n} from '../../openapi/routesApi.gen';\nimport {\n addRouteAction,\n deleteRouteAction,\n updateRouteAction,\n} from '../../reducers/alertmanager/notificationPolicyRoutes';\nimport { FormAmRoute } from '../../types/amroutes';\nimport { addUniqueIdentifierToRoute } from '../../utils/amroutes';\nimport { PROVENANCE_NONE, ROOT_ROUTE_NAME } from '../../utils/k8s/constants';\nimport { isK8sEntityProvisioned, shouldUseK8sApi } from '../../utils/k8s/utils';\nimport { routeAdapter } from '../../utils/routeAdapter';\nimport {\n InsertPosition,\n addRouteToReferenceRoute,\n cleanKubernetesRouteIDs,\n mergePartialAmRouteWithRouteTree,\n omitRouteFromRouteTree,\n} from '../../utils/routeTree';\n\nconst k8sRoutesToRoutesMemoized = memoize(k8sRoutesToRoutes, { maxSize: 1 });\n\nconst {\n useListNamespacedRoutingTreeQuery,\n useReplaceNamespacedRoutingTreeMutation,\n useLazyListNamespacedRoutingTreeQuery,\n} = routingTreeApi;\n\nconst { useGetAlertmanagerConfigurationQuery } = alertmanagerApi;\n\nexport const useNotificationPolicyRoute = ({ alertmanager }: BaseAlertmanagerArgs, { skip }: Skippable = {}) => {\n const k8sApiSupported = shouldUseK8sApi(alertmanager);\n\n const k8sRouteQuery = useListNamespacedRoutingTreeQuery(\n { namespace: getAPINamespace() },\n {\n skip: skip || !k8sApiSupported,\n selectFromResult: (result) => {\n return {\n ...result,\n currentData: result.currentData ? k8sRoutesToRoutesMemoized(result.currentData.items) : undefined,\n data: result.data ? k8sRoutesToRoutesMemoized(result.data.items) : undefined,\n };\n },\n }\n );\n\n const amConfigQuery = useGetAlertmanagerConfigurationQuery(alertmanager, {\n skip: skip || k8sApiSupported,\n selectFromResult: (result) => {\n return {\n ...result,\n currentData: result.currentData?.alertmanager_config?.route\n ? [parseAmConfigRoute(result.currentData.alertmanager_config.route)]\n : undefined,\n data: result.data?.alertmanager_config?.route\n ? [parseAmConfigRoute(result.data.alertmanager_config.route)]\n : undefined,\n };\n },\n });\n\n return k8sApiSupported ? k8sRouteQuery : amConfigQuery;\n};\n\nconst parseAmConfigRoute = memoize((route: Route): Route => {\n return {\n ...route,\n [ROUTES_META_SYMBOL]: {\n provisioned: Boolean(route.provenance && route.provenance !== PROVENANCE_NONE),\n },\n };\n});\n\nexport function useUpdateExistingNotificationPolicy({ alertmanager }: BaseAlertmanagerArgs) {\n const k8sApiSupported = shouldUseK8sApi(alertmanager);\n const [updatedNamespacedRoute] = useReplaceNamespacedRoutingTreeMutation();\n const [produceNewAlertmanagerConfiguration] = useProduceNewAlertmanagerConfiguration();\n const [listNamespacedRoutingTree] = useLazyListNamespacedRoutingTreeQuery();\n\n const updateUsingK8sApi = useAsync(async (update: Partial<FormAmRoute>) => {\n const namespace = getAPINamespace();\n const result = await listNamespacedRoutingTree({ namespace });\n\n const [rootTree] = result.data ? k8sRoutesToRoutesMemoized(result.data.items) : [];\n if (!rootTree) {\n throw new Error(`no root route found for namespace ${namespace}`);\n }\n\n const rootRouteWithIdentifiers = addUniqueIdentifierToRoute(rootTree);\n const newRouteTree = mergePartialAmRouteWithRouteTree(alertmanager, update, rootRouteWithIdentifiers);\n\n // Create the K8s route object\n const routeObject = createKubernetesRoutingTreeSpec(newRouteTree);\n\n return updatedNamespacedRoute({\n name: ROOT_ROUTE_NAME,\n namespace,\n comGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree: cleanKubernetesRouteIDs(routeObject),\n }).unwrap();\n });\n\n const updateFromAlertmanagerConfiguration = useAsync(async (update: Partial<FormAmRoute>) => {\n const action = updateRouteAction({ update, alertmanager });\n return produceNewAlertmanagerConfiguration(action);\n });\n\n return k8sApiSupported ? updateUsingK8sApi : updateFromAlertmanagerConfiguration;\n}\n\nexport function useDeleteNotificationPolicy({ alertmanager }: BaseAlertmanagerArgs) {\n const k8sApiSupported = shouldUseK8sApi(alertmanager);\n const [produceNewAlertmanagerConfiguration] = useProduceNewAlertmanagerConfiguration();\n const [listNamespacedRoutingTree] = useLazyListNamespacedRoutingTreeQuery();\n const [updatedNamespacedRoute] = useReplaceNamespacedRoutingTreeMutation();\n\n const deleteFromK8sApi = useAsync(async (id: string) => {\n const namespace = getAPINamespace();\n const result = await listNamespacedRoutingTree({ namespace });\n\n const [rootTree] = result.data ? k8sRoutesToRoutesMemoized(result.data.items) : [];\n if (!rootTree) {\n throw new Error(`no root route found for namespace ${namespace}`);\n }\n\n const rootRouteWithIdentifiers = addUniqueIdentifierToRoute(rootTree);\n const newRouteTree = omitRouteFromRouteTree(id, rootRouteWithIdentifiers);\n\n // Create the K8s route object\n const routeObject = createKubernetesRoutingTreeSpec(newRouteTree);\n\n return updatedNamespacedRoute({\n name: ROOT_ROUTE_NAME,\n namespace,\n comGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree: routeObject,\n }).unwrap();\n });\n\n const deleteFromAlertmanagerConfiguration = useAsync(async (id: string) => {\n const action = deleteRouteAction({ id });\n return produceNewAlertmanagerConfiguration(action);\n });\n\n return k8sApiSupported ? deleteFromK8sApi : deleteFromAlertmanagerConfiguration;\n}\n\nexport function useAddNotificationPolicy({ alertmanager }: BaseAlertmanagerArgs) {\n const k8sApiSupported = shouldUseK8sApi(alertmanager);\n const [produceNewAlertmanagerConfiguration] = useProduceNewAlertmanagerConfiguration();\n const [listNamespacedRoutingTree] = useLazyListNamespacedRoutingTreeQuery();\n const [updatedNamespacedRoute] = useReplaceNamespacedRoutingTreeMutation();\n\n const addToK8sApi = useAsync(\n async ({\n partialRoute,\n referenceRouteIdentifier,\n insertPosition,\n }: {\n partialRoute: Partial<FormAmRoute>;\n referenceRouteIdentifier: string;\n insertPosition: InsertPosition;\n }) => {\n const namespace = getAPINamespace();\n const result = await listNamespacedRoutingTree({ namespace });\n\n const [rootTree] = result.data ? k8sRoutesToRoutesMemoized(result.data.items) : [];\n if (!rootTree) {\n throw new Error(`no root route found for namespace ${namespace}`);\n }\n\n const rootRouteWithIdentifiers = addUniqueIdentifierToRoute(rootTree);\n const newRouteTree = addRouteToReferenceRoute(\n alertmanager ?? '',\n partialRoute,\n referenceRouteIdentifier,\n rootRouteWithIdentifiers,\n insertPosition\n );\n\n // Create the K8s route object\n const routeObject = createKubernetesRoutingTreeSpec(newRouteTree);\n\n return updatedNamespacedRoute({\n name: ROOT_ROUTE_NAME,\n namespace,\n comGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree: cleanKubernetesRouteIDs(routeObject),\n }).unwrap();\n }\n );\n\n const addToAlertmanagerConfiguration = useAsync(\n async ({\n partialRoute,\n referenceRouteIdentifier,\n insertPosition,\n }: {\n partialRoute: Partial<FormAmRoute>;\n referenceRouteIdentifier: string;\n insertPosition: InsertPosition;\n }) => {\n const action = addRouteAction({\n partialRoute,\n referenceRouteIdentifier,\n insertPosition,\n alertmanager,\n });\n return produceNewAlertmanagerConfiguration(action);\n }\n );\n\n return k8sApiSupported ? addToK8sApi : addToAlertmanagerConfiguration;\n}\n\nfunction k8sRoutesToRoutes(routes: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree[]): Route[] {\n return routes?.map((route) => {\n return {\n ...route.spec.defaults,\n routes: route.spec.routes?.map(k8sSubRouteToRoute),\n [ROUTES_META_SYMBOL]: {\n provisioned: isK8sEntityProvisioned(route),\n resourceVersion: route.metadata.resourceVersion,\n name: route.metadata.name,\n },\n };\n });\n}\n\n/** Helper to provide type safety for matcher operators from API */\nfunction isValidMatcherOperator(type: string): type is MatcherOperator {\n return Object.values<string>(MatcherOperator).includes(type);\n}\n\nexport function k8sSubRouteToRoute(route: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route): Route {\n return {\n ...route,\n routes: route.routes?.map(k8sSubRouteToRoute),\n matchers: undefined,\n object_matchers: route.matchers?.map(({ label, type, value }) => {\n if (!isValidMatcherOperator(type)) {\n throw new Error(`Invalid matcher operator from API: ${type}`);\n }\n return [label, type, value];\n }),\n };\n}\n\nexport function routeToK8sSubRoute(route: Route): ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route {\n const { object_matchers, ...rest } = route;\n return {\n ...rest,\n receiver: route.receiver ?? undefined,\n matchers: object_matchers?.map(([label, type, value]) => ({\n label,\n type,\n value,\n })),\n routes: route.routes?.map(routeToK8sSubRoute),\n };\n}\n\n/**\n * Convert Route to K8s compatible format. Make sure we aren't sending any additional properties the API doesn't recognize\n * because it will reply with excess properties in the HTTP headers\n */\nexport function createKubernetesRoutingTreeSpec(\n rootRoute: Route\n): ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RoutingTree {\n const inheritableDefaultProperties: InheritableProperties = pick(routeAdapter.toPackage(rootRoute), INHERITABLE_KEYS);\n\n const defaults: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1RouteDefaults = {\n ...inheritableDefaultProperties,\n // TODO: Fix types in k8s API? Fix our types to not allow empty receiver? TBC\n receiver: rootRoute.receiver ?? '',\n };\n\n const routes = rootRoute.routes?.map(routeToK8sSubRoute) ?? [];\n\n const spec = {\n defaults,\n routes,\n };\n\n return {\n spec: spec,\n metadata: {\n name: ROOT_ROUTE_NAME,\n resourceVersion: rootRoute[ROUTES_META_SYMBOL]?.resourceVersion,\n },\n };\n}\n","import { DataQueryResponseData, isDataFrame, StreamingDataFrame } from '@grafana/data';\n\n/**\n * @alpha -- experimental\n */\nexport enum StreamingResponseDataType {\n NewValuesSameSchema = 'NewValuesSameSchema',\n FullFrame = 'FullFrame',\n}\n\n/**\n * @alpha -- experimental\n */\nexport type StreamingResponseDataTypeToData = {\n [StreamingResponseDataType.NewValuesSameSchema]: {\n values: unknown[][];\n };\n [StreamingResponseDataType.FullFrame]: {\n frame: ReturnType<StreamingDataFrame['serialize']>;\n };\n};\n\n/**\n * @alpha -- experimental\n */\nexport type StreamingResponseData<T = StreamingResponseDataType> = T extends StreamingResponseDataType\n ? {\n type: T;\n } & StreamingResponseDataTypeToData[T]\n : never;\n\n/**\n * @alpha -- experimental\n */\nexport const isStreamingResponseData = <T extends StreamingResponseDataType>(\n responseData: DataQueryResponseData,\n type: T\n): responseData is StreamingResponseData<T> => 'type' in responseData && responseData.type === type;\n\nconst AllStreamingResponseDataTypes = Object.values(StreamingResponseDataType);\n\n/**\n * @alpha -- experimental\n */\nexport const isAnyStreamingResponseData = (\n responseData: DataQueryResponseData\n): responseData is StreamingResponseData =>\n 'type' in responseData && AllStreamingResponseDataTypes.includes(responseData.type);\n\n/**\n * @alpha -- experimental\n */\nexport const isStreamingDataFrame = (data: DataQueryResponseData): data is StreamingDataFrame =>\n isDataFrame(data) && 'packetInfo' in data;\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, QueryResultMetaNotice } from '@grafana/data';\nimport { Icon, ToolbarButton, Tooltip, useStyles2 } from '@grafana/ui';\nimport { getFocusStyles, getMouseFocusStyles } from '@grafana/ui/internal';\n\ninterface Props {\n notice: QueryResultMetaNotice;\n onClick: (e: React.SyntheticEvent, tab: string) => void;\n}\n\nexport const PanelHeaderNotice = ({ notice, onClick }: Props) => {\n const styles = useStyles2(getStyles);\n\n const iconName =\n notice.severity === 'error' || notice.severity === 'warning' ? 'exclamation-triangle' : 'file-landscape-alt';\n\n if (notice.inspect && onClick) {\n return (\n <ToolbarButton\n className={styles.notice}\n icon={iconName}\n iconSize=\"md\"\n key={notice.severity}\n tooltip={notice.text}\n onClick={(e) => onClick(e, notice.inspect!)}\n />\n );\n }\n\n if (notice.link) {\n return (\n <a className={styles.notice} aria-label={notice.text} href={notice.link} target=\"_blank\" rel=\"noreferrer\">\n <Icon name={iconName} style={{ marginRight: '8px' }} size=\"md\" />\n </a>\n );\n }\n\n return (\n <Tooltip key={notice.severity} content={notice.text}>\n <span className={styles.iconTooltip}>\n <Icon name={iconName} size=\"md\" />\n </span>\n </Tooltip>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n notice: css({\n background: 'inherit',\n border: 'none',\n borderRadius: theme.shape.radius.default,\n }),\n iconTooltip: css({\n color: `${theme.colors.text.secondary}`,\n backgroundColor: 'inherit',\n cursor: 'auto',\n border: 'none',\n borderRadius: `${theme.shape.radius.default}`,\n padding: `${theme.spacing(0, 1)}`,\n height: ` ${theme.spacing(theme.components.height.md)}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n '&:focus, &:focus-visible': {\n ...getFocusStyles(theme),\n zIndex: 1,\n },\n '&: focus:not(:focus-visible)': getMouseFocusStyles(theme),\n\n '&:hover ': {\n boxShadow: `${theme.shadows.z1}`,\n color: `${theme.colors.text.primary}`,\n background: `${theme.colors.background.secondary}`,\n },\n }),\n});\n","import { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { DataFrame, QueryResultMetaNotice } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\n\nimport { PanelHeaderNotice } from './PanelHeaderNotice';\n\ninterface Props {\n panelId: number;\n frames: DataFrame[];\n}\n\nexport const PanelHeaderNotices = ({ frames, panelId }: Props) => {\n const openInspect = useCallback(\n (e: React.SyntheticEvent, tab: string) => {\n e.stopPropagation();\n locationService.partial({ inspect: panelId, inspectTab: tab });\n },\n [panelId]\n );\n\n // dedupe on severity\n const notices: Record<string, QueryResultMetaNotice> = {};\n for (const frame of frames) {\n if (!frame.meta || !frame.meta.notices) {\n continue;\n }\n\n for (const notice of frame.meta.notices) {\n notices[notice.severity] = notice;\n }\n }\n\n return (\n <>\n {Object.values(notices).map((notice) => (\n <PanelHeaderNotice notice={notice} onClick={openInspect} key={notice.severity} />\n ))}\n </>\n );\n};\n","import { cx, css } from '@emotion/css';\nimport { PureComponent } from 'react';\n\nimport { stylesFactory } from '../../themes/stylesFactory';\n\nexport interface ListProps<T> {\n items: T[];\n renderItem: (item: T, index: number) => JSX.Element;\n getItemKey?: (item: T) => string;\n className?: string;\n}\n\ninterface AbstractListProps<T> extends ListProps<T> {\n inline?: boolean;\n}\n\nconst getStyles = stylesFactory((inlineList = false) => ({\n list: css({\n listStyleType: 'none',\n margin: 0,\n padding: 0,\n }),\n\n item: css({\n display: (inlineList && 'inline-block') || 'block',\n }),\n}));\n\n/** @deprecated Use ul/li/arr.map directly instead */\n// no point converting, this is deprecated\n// eslint-disable-next-line react-prefer-function-component/react-prefer-function-component\nexport class AbstractList<T> extends PureComponent<AbstractListProps<T>> {\n constructor(props: AbstractListProps<T>) {\n super(props);\n }\n\n render() {\n const { items, renderItem, getItemKey, className, inline } = this.props;\n const styles = getStyles(inline);\n\n return (\n <ul className={cx(styles.list, className)}>\n {items.map((item, i) => {\n return (\n <li className={styles.item} key={getItemKey ? getItemKey(item) : i}>\n {renderItem(item, i)}\n </li>\n );\n })}\n </ul>\n );\n }\n}\n","import { SortOrder } from '@grafana/schema';\n\n/** @internal */\nexport function moveItemImmutably<T>(arr: T[], from: number, to: number) {\n const clone = [...arr];\n Array.prototype.splice.call(clone, to, 0, Array.prototype.splice.call(clone, from, 1)[0]);\n return clone;\n}\n\n/** @internal */\nexport function insertBeforeImmutably<T>(array: T[], item: T, index: number): T[] {\n if (index < 0 || index > array.length) {\n throw new Error('Index out of bounds');\n }\n\n const clone = [...array];\n clone.splice(index, 0, item);\n\n return clone;\n}\n\n/** @internal */\nexport function insertAfterImmutably<T>(array: T[], item: T, index: number): T[] {\n if (index < 0 || index > array.length) {\n throw new Error('Index out of bounds');\n }\n\n const clone = [...array];\n clone.splice(index + 1, 0, item);\n\n return clone;\n}\n\n/**\n * Given a sort order and a value, return a function that can be used to sort values\n * Null/undefined/empty string values are always sorted to the end regardless of the sort order provided\n */\nconst collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nconst numericCompare = (a: number, b: number) => a - b;\n\nexport function sortValues(sort: SortOrder.Ascending | SortOrder.Descending) {\n return (a: unknown, b: unknown) => {\n if (a === b) {\n return 0;\n }\n\n if (b == null || (typeof b === 'string' && b.trim() === '')) {\n return -1;\n }\n if (a == null || (typeof a === 'string' && a?.trim() === '')) {\n return 1;\n }\n\n let compareFn: (a: any, b: any) => number = collator.compare;\n\n if (typeof a === 'number' && typeof b === 'number') {\n compareFn = numericCompare;\n }\n\n if (sort === SortOrder.Descending) {\n return compareFn(b, a);\n }\n\n return compareFn(a, b);\n };\n}\n","// Libraries\nimport { isNumber } from 'lodash';\n\nimport { NullValueMode } from '../types/data';\nimport { Field, FieldCalcs, FieldType } from '../types/dataFrame';\nimport { Registry, RegistryItem } from '../utils/Registry';\n\nexport enum ReducerID {\n sum = 'sum',\n max = 'max',\n min = 'min',\n logmin = 'logmin',\n mean = 'mean',\n variance = 'variance',\n stdDev = 'stdDev',\n last = 'last',\n median = 'median',\n first = 'first',\n count = 'count',\n countAll = 'countAll',\n range = 'range',\n diff = 'diff',\n diffperc = 'diffperc',\n delta = 'delta',\n step = 'step',\n firstNotNull = 'firstNotNull',\n lastNotNull = 'lastNotNull',\n changeCount = 'changeCount',\n distinctCount = 'distinctCount',\n allIsZero = 'allIsZero',\n allIsNull = 'allIsNull',\n allValues = 'allValues',\n uniqueValues = 'uniqueValues',\n p1 = 'p1',\n p2 = 'p2',\n p3 = 'p3',\n p4 = 'p4',\n p5 = 'p5',\n p6 = 'p6',\n p7 = 'p7',\n p8 = 'p8',\n p9 = 'p9',\n p10 = 'p10',\n p11 = 'p11',\n p12 = 'p12',\n p13 = 'p13',\n p14 = 'p14',\n p15 = 'p15',\n p16 = 'p16',\n p17 = 'p17',\n p18 = 'p18',\n p19 = 'p19',\n p20 = 'p20',\n p21 = 'p21',\n p22 = 'p22',\n p23 = 'p23',\n p24 = 'p24',\n p25 = 'p25',\n p26 = 'p26',\n p27 = 'p27',\n p28 = 'p28',\n p29 = 'p29',\n p30 = 'p30',\n p31 = 'p31',\n p32 = 'p32',\n p33 = 'p33',\n p34 = 'p34',\n p35 = 'p35',\n p36 = 'p36',\n p37 = 'p37',\n p38 = 'p38',\n p39 = 'p39',\n p40 = 'p40',\n p41 = 'p41',\n p42 = 'p42',\n p43 = 'p43',\n p44 = 'p44',\n p45 = 'p45',\n p46 = 'p46',\n p47 = 'p47',\n p48 = 'p48',\n p49 = 'p49',\n p50 = 'p50',\n p51 = 'p51',\n p52 = 'p52',\n p53 = 'p53',\n p54 = 'p54',\n p55 = 'p55',\n p56 = 'p56',\n p57 = 'p57',\n p58 = 'p58',\n p59 = 'p59',\n p60 = 'p60',\n p61 = 'p61',\n p62 = 'p62',\n p63 = 'p63',\n p64 = 'p64',\n p65 = 'p65',\n p66 = 'p66',\n p67 = 'p67',\n p68 = 'p68',\n p69 = 'p69',\n p70 = 'p70',\n p71 = 'p71',\n p72 = 'p72',\n p73 = 'p73',\n p74 = 'p74',\n p75 = 'p75',\n p76 = 'p76',\n p77 = 'p77',\n p78 = 'p78',\n p79 = 'p79',\n p80 = 'p80',\n p81 = 'p81',\n p82 = 'p82',\n p83 = 'p83',\n p84 = 'p84',\n p85 = 'p85',\n p86 = 'p86',\n p87 = 'p87',\n p88 = 'p88',\n p89 = 'p89',\n p90 = 'p90',\n p91 = 'p91',\n p92 = 'p92',\n p93 = 'p93',\n p94 = 'p94',\n p95 = 'p95',\n p96 = 'p96',\n p97 = 'p97',\n p98 = 'p98',\n p99 = 'p99',\n}\n\nexport function getFieldTypeForReducer(id: ReducerID, fallback: FieldType): FieldType {\n return id === ReducerID.count ||\n id === ReducerID.distinctCount ||\n id === ReducerID.changeCount ||\n id === ReducerID.countAll\n ? FieldType.number\n : id === ReducerID.allIsNull || id === ReducerID.allIsZero\n ? FieldType.boolean\n : fallback;\n}\n\nexport function isReducerID(id: string): id is ReducerID {\n return Object.keys(ReducerID).includes(id);\n}\n\n// Internal function\ntype FieldReducer = (field: Field, ignoreNulls: boolean, nullAsZero: boolean) => FieldCalcs;\n\nexport interface FieldReducerInfo extends RegistryItem {\n // Internal details\n emptyInputResult?: unknown; // typically null, but some things like 'count' & 'sum' should be zero\n standard: boolean; // The most common stats can all be calculated in a single pass\n preservesUnits: boolean; // Whether this reducer preserves units, certain ones don't e.g. count, distinct count, etc,\n reduce?: FieldReducer;\n}\n\ninterface ReduceFieldOptions {\n field: Field;\n reducers: string[]; // The stats to calculate\n}\n\n/**\n * @returns an object with a key for each selected stat\n * NOTE: This will also modify the 'field.state' object,\n * leaving values in a cache until cleared.\n */\nexport function reduceField(options: ReduceFieldOptions): FieldCalcs {\n const { field, reducers } = options;\n\n if (!field || !reducers || reducers.length < 1) {\n return {};\n }\n\n if (field.state?.calcs) {\n // Find the values we need to calculate\n const missing: string[] = [];\n for (const s of reducers) {\n if (!field.state.calcs.hasOwnProperty(s)) {\n missing.push(s);\n }\n }\n if (missing.length < 1) {\n return {\n ...field.state.calcs,\n };\n }\n }\n if (!field.state) {\n field.state = {};\n }\n\n const queue = fieldReducers.list(reducers);\n\n // Return early for empty series\n // This lets the concrete implementations assume at least one row\n const data = field.values;\n if (data && data.length < 1) {\n const calcs: FieldCalcs = { ...field.state.calcs };\n for (const reducer of queue) {\n calcs[reducer.id] = reducer.emptyInputResult !== null ? reducer.emptyInputResult : null;\n }\n return (field.state.calcs = calcs);\n }\n\n // Default to Ignore for nullValueMode.\n const { nullValueMode = NullValueMode.Ignore } = field.config;\n\n const ignoreNulls = nullValueMode === NullValueMode.Ignore;\n const nullAsZero = nullValueMode === NullValueMode.AsZero;\n\n // Avoid calculating all the standard stats if possible\n if (queue.length === 1 && queue[0].reduce) {\n const values = queue[0].reduce(field, ignoreNulls, nullAsZero);\n field.state.calcs = {\n ...field.state.calcs,\n ...values,\n };\n return values;\n }\n\n // For now everything can use the standard stats\n let values = doStandardCalcs(field, ignoreNulls, nullAsZero);\n\n for (const reducer of queue) {\n if (!values.hasOwnProperty(reducer.id) && reducer.reduce) {\n values = {\n ...values,\n ...reducer.reduce(field, ignoreNulls, nullAsZero),\n };\n }\n }\n\n field.state.calcs = {\n ...field.state.calcs,\n ...values,\n };\n return values;\n}\n\n// ------------------------------------------------------------------------------\n//\n// No Exported symbols below here.\n//\n// ------------------------------------------------------------------------------\n\nexport const fieldReducers = new Registry<FieldReducerInfo>(() => [\n {\n id: ReducerID.lastNotNull,\n name: 'Last *',\n description: 'Last non-null value (also excludes NaNs)',\n standard: true,\n aliasIds: ['current'],\n reduce: calculateLastNotNull,\n preservesUnits: true,\n },\n {\n id: ReducerID.last,\n name: 'Last',\n description: 'Last value',\n standard: true,\n reduce: calculateLast,\n preservesUnits: true,\n },\n {\n id: ReducerID.firstNotNull,\n name: 'First *',\n description: 'First non-null value (also excludes NaNs)',\n standard: true,\n reduce: calculateFirstNotNull,\n preservesUnits: true,\n },\n {\n id: ReducerID.first,\n name: 'First',\n description: 'First Value',\n standard: true,\n reduce: calculateFirst,\n preservesUnits: true,\n },\n { id: ReducerID.min, name: 'Min', description: 'Minimum Value', standard: true, preservesUnits: true },\n { id: ReducerID.max, name: 'Max', description: 'Maximum Value', standard: true, preservesUnits: true },\n {\n id: ReducerID.mean,\n name: 'Mean',\n description: 'Average Value',\n standard: true,\n aliasIds: ['avg'],\n preservesUnits: true,\n },\n {\n id: ReducerID.median,\n name: 'Median',\n description: 'Median Value',\n standard: false,\n reduce: calculateMedian,\n aliasIds: ['median'],\n preservesUnits: true,\n },\n {\n id: ReducerID.variance,\n name: 'Variance',\n description: 'Variance of all values in a field',\n standard: false,\n reduce: calculateStdDev,\n preservesUnits: true,\n },\n {\n id: ReducerID.stdDev,\n name: 'StdDev',\n description: 'Standard deviation of all values in a field',\n standard: false,\n reduce: calculateStdDev,\n preservesUnits: true,\n },\n {\n id: ReducerID.sum,\n name: 'Total',\n description: 'The sum of all values',\n emptyInputResult: 0,\n standard: true,\n aliasIds: ['total'],\n preservesUnits: true,\n },\n {\n id: ReducerID.count,\n name: 'Count',\n description: 'Number of values in response',\n emptyInputResult: 0,\n standard: true,\n preservesUnits: false,\n },\n {\n id: ReducerID.countAll,\n name: 'Count all',\n description: 'Number of values (including empty)',\n emptyInputResult: 0,\n standard: false,\n reduce: (field: Field): FieldCalcs => ({ countAll: field.values.length }),\n preservesUnits: false,\n },\n {\n id: ReducerID.range,\n name: 'Range',\n description: 'Difference between minimum and maximum values',\n standard: true,\n preservesUnits: true,\n },\n {\n id: ReducerID.delta,\n name: 'Delta',\n description: 'Cumulative change in value',\n standard: true,\n preservesUnits: true,\n },\n {\n id: ReducerID.step,\n name: 'Step',\n description: 'Minimum interval between values',\n standard: true,\n preservesUnits: true,\n },\n {\n id: ReducerID.diff,\n name: 'Difference',\n description: 'Difference between first and last values',\n standard: true,\n preservesUnits: true,\n },\n {\n id: ReducerID.logmin,\n name: 'Min (above zero)',\n description: 'Used for log min scale',\n standard: true,\n preservesUnits: true,\n },\n {\n id: ReducerID.allIsZero,\n name: 'All Zeros',\n description: 'All values are zero',\n emptyInputResult: false,\n standard: true,\n preservesUnits: true,\n },\n {\n id: ReducerID.allIsNull,\n name: 'All Nulls',\n description: 'All values are null',\n emptyInputResult: true,\n standard: true,\n preservesUnits: false,\n },\n {\n id: ReducerID.changeCount,\n name: 'Change Count',\n description: 'Number of times the value changes',\n standard: false,\n reduce: calculateChangeCount,\n preservesUnits: false,\n },\n {\n id: ReducerID.distinctCount,\n name: 'Distinct Count',\n description: 'Number of distinct values',\n standard: false,\n reduce: calculateDistinctCount,\n preservesUnits: false,\n },\n {\n id: ReducerID.diffperc,\n name: 'Difference percent',\n description: 'Percentage difference between first and last values',\n standard: true,\n preservesUnits: false,\n },\n {\n id: ReducerID.allValues,\n name: 'All values',\n description: 'Returns an array with all values',\n standard: false,\n reduce: (field: Field) => ({ allValues: [...field.values] }),\n preservesUnits: false,\n },\n {\n id: ReducerID.uniqueValues,\n name: 'All unique values',\n description: 'Returns an array with all unique values',\n standard: false,\n reduce: (field: Field) => ({\n uniqueValues: [...new Set(field.values)],\n }),\n preservesUnits: false,\n },\n ...buildPercentileReducers(),\n]);\n\n// This `Array.from` will build an array of elements from 1 to 99\nconst buildPercentileReducers = (percentiles = [...Array.from({ length: 99 }, (_, i) => i + 1)]) => {\n const percentileReducers: FieldReducerInfo[] = [];\n const nth = (n: number) =>\n n > 3 && n < 21 ? 'th' : n % 10 === 1 ? 'st' : n % 10 === 2 ? 'nd' : n % 10 === 3 ? 'rd' : 'th';\n\n percentiles.forEach((p) => {\n const percentile = p / 100;\n const id = `p${p}`;\n const name = `${p}${nth(p)} %`;\n const description = `${p}${nth(p)} percentile value`;\n\n percentileReducers.push({\n id: id,\n name: name,\n description: description,\n standard: false,\n reduce: (field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs => {\n return { [id]: calculatePercentile(field, percentile, ignoreNulls, nullAsZero) };\n },\n preservesUnits: true,\n });\n });\n return percentileReducers;\n};\n\n// Used for test cases\nexport const defaultCalcs: FieldCalcs = {\n sum: 0,\n max: -Number.MAX_VALUE,\n min: Number.MAX_VALUE,\n logmin: Number.MAX_VALUE,\n mean: null,\n last: null,\n first: null,\n lastNotNull: null,\n firstNotNull: null,\n count: 0,\n nonNullCount: 0,\n allIsNull: true,\n allIsZero: true,\n range: null,\n diff: null,\n delta: 0,\n step: Number.MAX_VALUE,\n diffperc: 0,\n // Just used for calculations -- not exposed as a stat\n previousDeltaUp: true,\n};\n\nexport function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n const calcs: FieldCalcs = { ...defaultCalcs };\n\n const data = field.values;\n\n // early return for undefined / empty series\n if (!data) {\n return calcs;\n }\n\n const isNumberField = field.type === FieldType.number || field.type === FieldType.time;\n\n for (let i = 0; i < data.length; i++) {\n let currentValue = data[i];\n\n if (i === 0) {\n calcs.first = currentValue;\n }\n\n calcs.last = currentValue;\n\n if (currentValue == null) {\n if (ignoreNulls) {\n continue;\n }\n if (nullAsZero) {\n currentValue = 0;\n }\n }\n\n calcs.count++;\n\n if (currentValue != null && !Number.isNaN(currentValue)) {\n // null || undefined || NaN\n const isFirst = calcs.firstNotNull === null;\n if (isFirst) {\n calcs.firstNotNull = currentValue;\n }\n\n if (isNumberField) {\n calcs.sum += currentValue || 0;\n calcs.allIsNull = false;\n calcs.nonNullCount++;\n\n if (!isFirst) {\n const step = currentValue - calcs.lastNotNull!;\n if (calcs.step > step) {\n calcs.step = step; // the minimum interval\n }\n\n if (calcs.lastNotNull! > currentValue) {\n // counter reset\n calcs.previousDeltaUp = false;\n } else {\n if (calcs.previousDeltaUp) {\n calcs.delta += step; // normal increment\n }\n calcs.previousDeltaUp = true;\n }\n }\n\n if (currentValue > calcs.max) {\n calcs.max = currentValue;\n }\n\n if (currentValue < calcs.min) {\n calcs.min = currentValue;\n }\n\n if (currentValue < calcs.logmin && currentValue > 0) {\n calcs.logmin = currentValue;\n }\n }\n\n if (currentValue !== 0) {\n calcs.allIsZero = false;\n }\n\n calcs.lastNotNull = currentValue;\n }\n }\n\n if (calcs.max === -Number.MAX_VALUE) {\n calcs.max = null;\n }\n\n if (calcs.min === Number.MAX_VALUE) {\n calcs.min = null;\n }\n\n if (calcs.step === Number.MAX_VALUE) {\n calcs.step = null;\n }\n\n if (calcs.nonNullCount > 0) {\n calcs.mean = calcs.sum! / calcs.nonNullCount;\n }\n\n if (calcs.allIsNull) {\n calcs.allIsZero = false;\n }\n\n if (calcs.max !== null && calcs.min !== null) {\n calcs.range = calcs.max - calcs.min;\n }\n\n if (isNumber(calcs.firstNotNull) && isNumber(calcs.lastNotNull)) {\n calcs.diff = calcs.lastNotNull - calcs.firstNotNull;\n }\n\n if (isNumber(calcs.firstNotNull) && isNumber(calcs.diff)) {\n calcs.diffperc = (calcs.diff / calcs.firstNotNull) * 100;\n }\n\n return calcs;\n}\n\nfunction calculateFirst(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n return { first: field.values[0] };\n}\n\nfunction calculateFirstNotNull(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n const data = field.values;\n for (let idx = 0; idx < data.length; idx++) {\n const v = data[idx];\n if (v != null && !Number.isNaN(v)) {\n return { firstNotNull: v };\n }\n }\n return { firstNotNull: null };\n}\n\nfunction calculateLast(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n const data = field.values;\n return { last: data[data.length - 1] };\n}\n\nfunction calculateLastNotNull(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n const data = field.values;\n let idx = data.length - 1;\n while (idx >= 0) {\n const v = data[idx--];\n if (v != null && !Number.isNaN(v)) {\n return { lastNotNull: v };\n }\n }\n return { lastNotNull: null };\n}\n\n/** Calculates standard deviation and variance */\nfunction calculateStdDev(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n // Only support number fields\n if (!(field.type === FieldType.number || field.type === FieldType.time)) {\n return { variance: 0, stdDev: 0 };\n }\n\n let squareSum = 0;\n let runningMean = 0;\n let runningNonNullCount = 0;\n const data = field.values;\n for (let i = 0; i < data.length; i++) {\n const currentValue = data[i];\n if (currentValue != null) {\n runningNonNullCount++;\n let _oldMean = runningMean;\n runningMean += (currentValue - _oldMean) / runningNonNullCount;\n squareSum += (currentValue - _oldMean) * (currentValue - runningMean);\n }\n }\n if (runningNonNullCount > 0) {\n const variance = squareSum / runningNonNullCount;\n return { variance, stdDev: Math.sqrt(variance) };\n }\n return { variance: 0, stdDev: 0 };\n}\n\nfunction calculateChangeCount(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n const data = field.values;\n let count = 0;\n let first = true;\n let last = null;\n for (let i = 0; i < data.length; i++) {\n let currentValue = data[i];\n if (currentValue === null) {\n if (ignoreNulls) {\n continue;\n }\n if (nullAsZero) {\n currentValue = 0;\n }\n }\n if (!first && last !== currentValue) {\n count++;\n }\n first = false;\n last = currentValue;\n }\n\n return { changeCount: count };\n}\n\nfunction calculateDistinctCount(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n const data = field.values;\n const distinct = new Set();\n for (let i = 0; i < data.length; i++) {\n let currentValue = data[i];\n if (currentValue === null) {\n if (ignoreNulls) {\n continue;\n }\n if (nullAsZero) {\n currentValue = 0;\n }\n }\n distinct.add(currentValue);\n }\n return { distinctCount: distinct.size };\n}\n\nfunction calculatePercentile(field: Field, percentile: number, ignoreNulls: boolean, nullAsZero: boolean): number {\n let data = field.values;\n\n if (ignoreNulls) {\n data = data.filter((value) => value !== null);\n }\n if (nullAsZero) {\n data = data.map((value) => (value === null ? 0 : value));\n }\n\n const sorted = data.slice().sort((a, b) => a - b);\n const index = Math.round((sorted.length - 1) * percentile);\n return sorted[index];\n}\n\nfunction calculateMedian(field: Field<number>, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n const numbers: number[] = [];\n\n for (let i = 0; i < field.values.length; i++) {\n let currentValue = field.values[i];\n\n if (currentValue == null) {\n if (ignoreNulls) {\n continue;\n }\n if (nullAsZero) {\n currentValue = 0;\n }\n }\n\n numbers.push(currentValue);\n }\n\n numbers.sort((a, b) => a - b);\n\n const mid = Math.floor(numbers.length / 2);\n\n if (numbers.length % 2 === 0) {\n return { median: (numbers[mid - 1] + numbers[mid]) / 2 };\n } else {\n return { median: numbers[mid] };\n }\n}\n","import { isUndefined, omitBy } from 'lodash';\nimport pluralize from 'pluralize';\nimport * as React from 'react';\nimport { Fragment, useDeferredValue, useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Badge, Stack } from '@grafana/ui';\nimport {\n AlertGroupTotals,\n AlertInstanceTotalState,\n CombinedRuleGroup,\n CombinedRuleNamespace,\n} from 'app/types/unified-alerting';\nimport { PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { totalFromStats } from '../../utils/ruleStats';\n\ninterface Props {\n namespaces: CombinedRuleNamespace[];\n}\n\n// All available states for a rule need to be initialized to prevent NaN values when adding a number and undefined\nconst emptyStats: Required<AlertGroupTotals> = {\n recording: 0,\n alerting: 0,\n [PromAlertingRuleState.Pending]: 0,\n [PromAlertingRuleState.Inactive]: 0,\n [PromAlertingRuleState.Recovering]: 0,\n paused: 0,\n error: 0,\n nodata: 0,\n};\n\n// Stats calculation is an expensive operation\n// Make sure we repeat that as few times as possible\nexport const RuleStats = React.memo(({ namespaces }: Props) => {\n const deferredNamespaces = useDeferredValue(namespaces);\n\n const stats = useMemo(() => statsFromNamespaces(deferredNamespaces), [deferredNamespaces]);\n const total = totalFromStats(stats);\n\n const statsComponents = getComponentsFromStats(stats);\n const hasStats = Boolean(statsComponents.length);\n\n statsComponents.unshift(\n <Fragment key=\"total\">\n {total} {pluralize('rule', total)}\n </Fragment>\n );\n\n return (\n <Stack direction=\"row\">\n {hasStats && (\n <div>\n <Stack gap={0.5}>{statsComponents}</Stack>\n </div>\n )}\n </Stack>\n );\n});\n\nRuleStats.displayName = 'RuleStats';\n\ninterface RuleGroupStatsProps {\n group: CombinedRuleGroup;\n}\n\nfunction statsFromNamespaces(namespaces: CombinedRuleNamespace[]): AlertGroupTotals {\n const stats = { ...emptyStats };\n\n // sum all totals for all namespaces\n namespaces.forEach(({ groups }) => {\n groups.forEach((group) => {\n const groupTotals = omitBy(group.totals, isUndefined);\n for (const key in groupTotals) {\n // @ts-ignore\n stats[key] += groupTotals[key];\n }\n });\n });\n\n return stats;\n}\n\nexport const RuleGroupStats = ({ group }: RuleGroupStatsProps) => {\n const stats = group.totals;\n const evaluationInterval = group?.interval;\n\n const statsComponents = getComponentsFromStats(stats);\n const hasStats = Boolean(statsComponents.length);\n\n return (\n <Stack direction=\"row\">\n {hasStats && (\n <div>\n <Stack gap={0.5}>{statsComponents}</Stack>\n </div>\n )}\n {evaluationInterval && (\n <>\n <div>|</div>\n <Badge text={evaluationInterval} icon=\"clock-nine\" color={'blue'} />\n </>\n )}\n </Stack>\n );\n};\n\nexport function getComponentsFromStats(\n stats: Partial<Record<AlertInstanceTotalState | 'paused' | 'recording', number>>\n) {\n const statsComponents: React.ReactNode[] = [];\n\n if (stats[AlertInstanceTotalState.Alerting]) {\n statsComponents.push(\n <Badge\n color=\"red\"\n key=\"firing\"\n text={t('alerting.rule-stats.firing', '{{alertingStats}} firing', {\n alertingStats: stats[AlertInstanceTotalState.Alerting],\n })}\n />\n );\n }\n\n if (stats.error) {\n statsComponents.push(\n <Badge\n color=\"red\"\n key=\"errors\"\n text={t('alerting.rule-stats.error', `{{count}} errors`, { count: stats.error })}\n />\n );\n }\n\n if (stats.nodata) {\n statsComponents.push(\n <Badge\n color=\"blue\"\n key=\"nodata\"\n text={t('alerting.rule-stats.nodata', '{{nodataStats}} no data', { nodataStats: stats.nodata })}\n />\n );\n }\n\n if (stats[AlertInstanceTotalState.Pending]) {\n const pendingStats = stats[AlertInstanceTotalState.Pending];\n statsComponents.push(\n <Badge\n color={'orange'}\n key=\"pending\"\n text={t('alerting.rule-stats.pending', `{{pendingStats}} pending`, { pendingStats })}\n />\n );\n }\n\n if (stats[AlertInstanceTotalState.Recovering]) {\n const recoveringStats = stats[AlertInstanceTotalState.Recovering];\n statsComponents.push(\n <Badge\n color={'orange'}\n key=\"recovering\"\n text={t('alerting.rule-stats.recovering', `{{recoveringStats}} recovering`, { recoveringStats })}\n />\n );\n }\n\n if (stats[AlertInstanceTotalState.Normal] && stats.paused) {\n const normalStats = stats[AlertInstanceTotalState.Normal];\n const pausedStats = stats.paused;\n statsComponents.push(\n <Badge\n color=\"green\"\n key=\"paused\"\n text={t('alerting.rule-stats.paused', `{{normalStats}} normal ({{pausedStats}} paused)`, {\n normalStats,\n pausedStats,\n })}\n />\n );\n }\n\n if (stats[AlertInstanceTotalState.Normal] && !stats.paused) {\n const normalStats = stats[AlertInstanceTotalState.Normal];\n statsComponents.push(\n <Badge\n color=\"green\"\n key=\"inactive\"\n text={t('alerting.rule-stats.inactive', `{{normalStats}} normal`, { normalStats })}\n />\n );\n }\n\n if (stats.recording) {\n const recordingStats = stats.recording;\n statsComponents.push(\n <Badge\n color=\"purple\"\n key=\"recording\"\n text={t('alerting.rule-stats.recording', `{{recordingStats}} recording`, { recordingStats })}\n />\n );\n }\n\n return statsComponents;\n}\n","import { css, cx } from '@emotion/css';\nimport { useId } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { DataFrameView, GrafanaTheme2, textUtil, dateTimeFormat } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { attachSkeleton, SkeletonComponent } from '@grafana/ui/unstable';\n\nimport { NewsItem } from '../types';\n\ninterface NewsItemProps {\n width: number;\n showImage?: boolean;\n index: number;\n data: DataFrameView<NewsItem>;\n}\n\nfunction NewsComponent({ width, showImage, data, index }: NewsItemProps) {\n const titleId = useId();\n const styles = useStyles2(getStyles);\n const useWideLayout = width > 600;\n const newsItem = data.get(index);\n\n return (\n <article aria-labelledby={titleId} className={cx(styles.item, useWideLayout && styles.itemWide)}>\n {showImage && newsItem.ogImage && (\n <a\n tabIndex={-1}\n href={textUtil.sanitizeUrl(newsItem.link)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cx(styles.socialImage, useWideLayout && styles.socialImageWide)}\n aria-hidden\n >\n <img src={newsItem.ogImage} alt={newsItem.title} />\n </a>\n )}\n <div className={styles.body}>\n <time className={styles.date} dateTime={dateTimeFormat(newsItem.date, { format: 'MMM DD' })}>\n {dateTimeFormat(newsItem.date, { format: 'MMM DD' })}{' '}\n </time>\n <a className={styles.link} href={textUtil.sanitizeUrl(newsItem.link)} target=\"_blank\" rel=\"noopener noreferrer\">\n <h3 className={styles.title} id={titleId}>\n {newsItem.title}\n </h3>\n </a>\n <div className={styles.content} dangerouslySetInnerHTML={{ __html: textUtil.sanitize(newsItem.content) }} />\n </div>\n </article>\n );\n}\n\nconst NewsSkeleton: SkeletonComponent<Pick<NewsItemProps, 'width' | 'showImage'>> = ({\n width,\n showImage,\n rootProps,\n}) => {\n const styles = useStyles2(getStyles);\n const useWideLayout = width > 600;\n\n return (\n <div className={cx(styles.item, useWideLayout && styles.itemWide)} {...rootProps}>\n {showImage && (\n <Skeleton\n containerClassName={cx(styles.socialImage, useWideLayout && styles.socialImageWide)}\n width={useWideLayout ? '250px' : '100%'}\n height={useWideLayout ? '150px' : width * 0.5}\n />\n )}\n <div className={styles.body}>\n <Skeleton containerClassName={styles.date} width={60} />\n <Skeleton containerClassName={styles.title} width={250} />\n <Skeleton containerClassName={styles.content} width=\"100%\" count={6} />\n </div>\n </div>\n );\n};\n\nexport const News = attachSkeleton(NewsComponent, NewsSkeleton);\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n height: '100%',\n }),\n item: css({\n display: 'flex',\n padding: theme.spacing(1),\n position: 'relative',\n marginBottom: theme.spacing(0.5),\n marginRight: theme.spacing(1),\n borderBottom: `2px solid ${theme.colors.border.weak}`,\n background: theme.colors.background.primary,\n flexDirection: 'column',\n flexShrink: 0,\n }),\n itemWide: css({\n flexDirection: 'row',\n }),\n body: css({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n }),\n socialImage: css({\n display: 'flex',\n alignItems: 'center',\n marginBottom: theme.spacing(1),\n '> img': {\n width: '100%',\n borderRadius: `${theme.shape.radius.default} ${theme.shape.radius.default} 0 0`,\n },\n }),\n socialImageWide: css({\n marginRight: theme.spacing(2),\n marginBottom: 0,\n '> img': {\n width: '250px',\n borderRadius: theme.shape.radius.default,\n },\n }),\n link: css({\n color: theme.colors.text.link,\n display: 'inline-block',\n\n '&:hover': {\n color: theme.colors.text.link,\n textDecoration: 'underline',\n },\n }),\n title: css({\n fontSize: '16px',\n marginBottom: theme.spacing(0.5),\n }),\n content: css({\n p: {\n marginBottom: theme.spacing(0.5),\n color: theme.colors.text.primary,\n },\n }),\n date: css({\n marginBottom: theme.spacing(0.5),\n fontWeight: 500,\n borderRadius: `0 0 0 ${theme.shape.radius.default}`,\n color: theme.colors.text.secondary,\n }),\n});\n","import { PluginExtensionLink } from '@grafana/data';\n\nexport type UsePluginLinksOptions = {\n extensionPointId: string;\n context?: object | Record<string | symbol, unknown>;\n limitPerPlugin?: number;\n};\n\nexport type UsePluginLinksResult = {\n isLoading: boolean;\n links: PluginExtensionLink[];\n};\n\nexport type UsePluginLinks = (options: UsePluginLinksOptions) => UsePluginLinksResult;\n\nlet singleton: UsePluginLinks | undefined;\n\nexport function setPluginLinksHook(hook: UsePluginLinks): void {\n // We allow overriding the registry in tests\n if (singleton && process.env.NODE_ENV !== 'test') {\n throw new Error('setPluginLinksHook() function should only be called once, when Grafana is starting.');\n }\n singleton = hook;\n}\n\nexport function usePluginLinks(options: UsePluginLinksOptions): UsePluginLinksResult {\n if (!singleton) {\n throw new Error('setPluginLinksHook(options) can only be used after the Grafana instance has started.');\n }\n return singleton(options);\n}\n","import {\n DataQuery as SchemaDataQuery,\n DataSourceRef as SchemaDataSourceRef,\n DataTopic as SchemaDataTopic,\n} from '@grafana/schema';\n\n/**\n * @deprecated use the type from @grafana/schema\n */\nexport interface DataQuery extends SchemaDataQuery {}\n\n/**\n * @deprecated use the type from @grafana/schema\n */\nexport interface DataSourceRef extends SchemaDataSourceRef {}\n\n/**\n * Attached to query results (not persisted)\n *\n * @deprecated use the type from @grafana/schema\n */\nexport { SchemaDataTopic as DataTopic };\n\n/**\n * Abstract representation of any label-based query\n * @internal\n */\nexport interface AbstractQuery extends SchemaDataQuery {\n labelMatchers: AbstractLabelMatcher[];\n}\n\n/**\n * @internal\n */\nexport enum AbstractLabelOperator {\n Equal = 'Equal',\n NotEqual = 'NotEqual',\n EqualRegEx = 'EqualRegEx',\n NotEqualRegEx = 'NotEqualRegEx',\n}\n\n/**\n * @internal\n */\nexport type AbstractLabelMatcher = {\n name: string;\n value: string;\n operator: AbstractLabelOperator;\n};\n\n/**\n * @internal\n */\nexport interface DataSourceWithQueryImportSupport<TQuery extends SchemaDataQuery> {\n importFromAbstractQueries(labelBasedQuery: AbstractQuery[]): Promise<TQuery[]>;\n}\n\n/**\n * @internal\n */\nexport interface DataSourceWithQueryExportSupport<TQuery extends SchemaDataQuery> {\n exportToAbstractQueries(query: TQuery[]): Promise<AbstractQuery[]>;\n}\n\n/**\n * @internal\n */\nexport const hasQueryImportSupport = <TQuery extends SchemaDataQuery>(\n datasource: unknown\n): datasource is DataSourceWithQueryImportSupport<TQuery> => {\n if (!datasource || typeof datasource !== 'object') {\n return false;\n }\n\n return 'importFromAbstractQueries' in datasource;\n};\n\n/**\n * @internal\n */\nexport const hasQueryExportSupport = <TQuery extends SchemaDataQuery>(\n datasource: unknown\n): datasource is DataSourceWithQueryExportSupport<TQuery> => {\n if (!datasource || typeof datasource !== 'object') {\n return false;\n }\n return 'exportToAbstractQueries' in datasource;\n};\n","import { css } from '@emotion/css';\nimport { memo, PropsWithChildren } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n text: css({\n fontSize: theme.typography.size.md,\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.colors.text.primary,\n margin: 0,\n display: 'flex',\n }),\n };\n};\n\nexport const TimePickerTitle = memo<PropsWithChildren<{}>>(({ children }) => {\n const styles = useStyles2(getStyles);\n\n return <h3 className={styles.text}>{children}</h3>;\n});\n\nTimePickerTitle.displayName = 'TimePickerTitle';\n","import { defaults, each, sortBy } from 'lodash';\n\nimport { DataSourceRef, PanelPluginMeta, VariableOption, VariableRefresh } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport config from 'app/core/config';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { getLibraryPanel } from 'app/features/library-panels/state/api';\nimport { variableRegex } from 'app/features/variables/utils';\n\nimport { isPanelModelLibraryPanel } from '../../../library-panels/guard';\nimport { LibraryElementKind } from '../../../library-panels/types';\nimport { DashboardJson } from '../../../manage-dashboards/types';\nimport { isConstant } from '../../../variables/guard';\nimport { DashboardModel } from '../../state/DashboardModel';\nimport { GridPos } from '../../state/PanelModel';\n\nexport interface InputUsage {\n libraryPanels?: LibraryPanel[];\n}\n\nexport interface LibraryPanel {\n name: string;\n uid: string;\n}\nexport interface Input {\n name: string;\n type: string;\n label: string;\n value: any;\n description: string;\n usage?: InputUsage;\n}\n\ninterface Requires {\n [key: string]: {\n type: string;\n id: string;\n name: string;\n version: string;\n };\n}\n\nexport interface ExternalDashboard {\n __inputs?: Input[];\n __elements?: Record<string, LibraryElementExport>;\n __requires?: Array<Requires[string]>;\n panels: Array<PanelModel | PanelWithExportableLibraryPanel>;\n}\n\ninterface PanelWithExportableLibraryPanel {\n gridPos: GridPos;\n id: number;\n libraryPanel: LibraryPanel;\n}\n\nfunction isExportableLibraryPanel(\n p: PanelModel | PanelWithExportableLibraryPanel\n): p is PanelWithExportableLibraryPanel {\n return Boolean(p.libraryPanel?.name && p.libraryPanel?.uid);\n}\n\ninterface DataSources {\n [key: string]: {\n name: string;\n label: string;\n description: string;\n type: string;\n pluginId: string;\n pluginName: string;\n usage?: InputUsage;\n };\n}\n\nexport interface LibraryElementExport {\n name: string;\n uid: string;\n model: any;\n kind: LibraryElementKind;\n}\n\nexport class DashboardExporter {\n async makeExportable(dashboard: DashboardModel) {\n // clean up repeated rows and panels,\n // this is done on the live real dashboard instance, not on a clone\n // so we need to undo this\n // this is pretty hacky and needs to be changed\n dashboard.cleanUpRepeats();\n\n const saveModel = dashboard.getSaveModelCloneOld();\n saveModel.id = null;\n\n // undo repeat cleanup\n dashboard.processRepeats();\n\n const inputs: Input[] = [];\n const requires: Requires = {};\n const datasources: DataSources = {};\n const variableLookup: { [key: string]: any } = {};\n const libraryPanels: Map<string, LibraryElementExport> = new Map<string, LibraryElementExport>();\n\n for (const variable of saveModel.getVariables()) {\n variableLookup[variable.name] = variable;\n }\n\n const templateizeDatasourceUsage = (obj: any, fallback?: DataSourceRef) => {\n if (obj.datasource === undefined) {\n obj.datasource = fallback;\n return;\n }\n\n let datasource = obj.datasource;\n let datasourceVariable: any = null;\n\n const datasourceUid: string | undefined = datasource?.uid;\n const match = datasourceUid && variableRegex.exec(datasourceUid);\n\n // ignore data source properties that contain a variable\n if (match) {\n const varName = match[1] || match[2] || match[4];\n datasourceVariable = variableLookup[varName];\n if (datasourceVariable && datasourceVariable.current) {\n datasource = datasourceVariable.current.value;\n }\n }\n\n return getDataSourceSrv()\n .get(datasource)\n .then((ds) => {\n if (ds.meta?.builtIn) {\n return;\n }\n\n // add data source type to require list\n requires['datasource' + ds.meta?.id] = {\n type: 'datasource',\n id: ds.meta.id,\n name: ds.meta.name,\n version: ds.meta.info.version || '1.0.0',\n };\n\n // if used via variable we can skip templatizing usage\n if (datasourceVariable) {\n return;\n }\n\n const libraryPanel = obj.libraryPanel;\n const libraryPanelSuffix = !!libraryPanel ? '-for-library-panel' : '';\n let refName = 'DS_' + ds.name.replace(' ', '_').toUpperCase() + libraryPanelSuffix.toUpperCase();\n\n datasources[refName] = {\n name: refName,\n label: ds.name,\n description: '',\n type: 'datasource',\n pluginId: ds.meta?.id,\n pluginName: ds.meta?.name,\n usage: datasources[refName]?.usage,\n };\n\n if (!!libraryPanel) {\n const libPanels = datasources[refName]?.usage?.libraryPanels || [];\n libPanels.push({ name: libraryPanel.name, uid: libraryPanel.uid });\n\n datasources[refName].usage = {\n libraryPanels: libPanels,\n };\n }\n\n obj.datasource = { type: ds.meta.id, uid: '${' + refName + '}' };\n });\n };\n\n const processPanel = async (panel: PanelModel) => {\n if (panel.type !== 'row') {\n await templateizeDatasourceUsage(panel);\n\n if (panel.targets) {\n for (const target of panel.targets) {\n await templateizeDatasourceUsage(target, panel.datasource!);\n }\n }\n\n const panelDef: PanelPluginMeta = config.panels[panel.type];\n if (panelDef) {\n requires['panel' + panelDef.id] = {\n type: 'panel',\n id: panelDef.id,\n name: panelDef.name,\n version: panelDef.info.version,\n };\n }\n }\n };\n\n const processLibraryPanels = async (panel: PanelModel) => {\n if (isPanelModelLibraryPanel(panel)) {\n const { name, uid } = panel.libraryPanel;\n let model = panel.libraryPanel.model;\n if (!model) {\n const libPanel = await getLibraryPanel(uid, true);\n model = libPanel.model;\n }\n\n await templateizeDatasourceUsage(model);\n\n const { gridPos, id, ...rest } = model as any;\n if (!libraryPanels.has(uid)) {\n libraryPanels.set(uid, { name, uid, kind: LibraryElementKind.Panel, model: rest });\n }\n }\n };\n\n try {\n // check up panel data sources\n for (const panel of saveModel.panels) {\n await processPanel(panel);\n\n // handle collapsed rows\n if (panel.collapsed !== undefined && panel.collapsed === true && panel.panels) {\n for (const rowPanel of panel.panels) {\n await processPanel(rowPanel);\n }\n }\n }\n\n // templatize template vars\n for (const variable of saveModel.getVariables()) {\n if (variable.type === 'query') {\n await templateizeDatasourceUsage(variable);\n variable.options = [];\n variable.current = {} as unknown as VariableOption;\n variable.refresh =\n variable.refresh !== VariableRefresh.never ? variable.refresh : VariableRefresh.onDashboardLoad;\n } else if (variable.type === 'datasource') {\n variable.current = {};\n }\n }\n\n // templatize annotations vars\n for (const annotationDef of saveModel.annotations.list) {\n await templateizeDatasourceUsage(annotationDef);\n }\n\n // add grafana version\n requires['grafana'] = {\n type: 'grafana',\n id: 'grafana',\n name: 'Grafana',\n version: config.buildInfo.version,\n };\n\n // we need to process all panels again after all the promises are resolved\n // so all data sources, variables and targets have been templateized when we process library panels\n for (const panel of saveModel.panels) {\n await processLibraryPanels(panel);\n if (panel.collapsed !== undefined && panel.collapsed === true && panel.panels) {\n for (const rowPanel of panel.panels) {\n await processLibraryPanels(rowPanel);\n }\n }\n }\n\n each(datasources, (value: any) => {\n inputs.push(value);\n });\n\n // templatize constants\n for (const variable of saveModel.getVariables()) {\n if (isConstant(variable)) {\n const refName = 'VAR_' + variable.name.replace(' ', '_').toUpperCase();\n inputs.push({\n name: refName,\n type: 'constant',\n label: variable.label || variable.name,\n value: variable.query,\n description: '',\n });\n // update current and option\n variable.query = '${' + refName + '}';\n variable.current = {\n value: variable.query,\n text: variable.query,\n selected: false,\n };\n variable.options = [variable.current];\n }\n }\n\n const __elements = [...libraryPanels.entries()].reduce<Record<string, LibraryElementExport>>(\n (prev, [curKey, curLibPanel]) => {\n prev[curKey] = curLibPanel;\n return prev;\n },\n {}\n );\n\n // make inputs and requires a top thing\n const newObj: DashboardJson = defaults(\n {\n __inputs: inputs,\n __elements,\n __requires: sortBy(requires, ['id']),\n },\n saveModel\n );\n\n // Remove extraneous props from library panels\n for (let i = 0; i < newObj.panels.length; i++) {\n const libPanel = newObj.panels[i];\n if (isExportableLibraryPanel(libPanel)) {\n newObj.panels[i] = {\n gridPos: libPanel.gridPos,\n id: libPanel.id,\n libraryPanel: { uid: libPanel.libraryPanel.uid, name: libPanel.libraryPanel.name },\n };\n }\n }\n\n return newObj;\n } catch (err) {\n console.error('Export failed:', err);\n return {\n error: err,\n };\n }\n }\n}\n","import { useCallback } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { ClipboardButton, CodeEditor, Modal } from '@grafana/ui';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nexport interface ViewJsonModalProps {\n json: string;\n onDismiss: () => void;\n}\n\nexport function ViewJsonModal({ json, onDismiss }: ViewJsonModalProps): JSX.Element {\n const getClipboardText = useCallback(() => json, [json]);\n return (\n <Modal\n title={t('dashboard.view-json-modal.title-json', 'JSON')}\n onDismiss={onDismiss}\n onClickBackdrop={onDismiss}\n isOpen\n >\n <AutoSizer disableHeight>\n {({ width }) => <CodeEditor value={json} language=\"json\" showMiniMap={false} height=\"500px\" width={width} />}\n </AutoSizer>\n <Modal.ButtonRow>\n <ClipboardButton\n icon=\"copy\"\n getText={getClipboardText}\n onClipboardCopy={() => {\n DashboardInteractions.exportCopyJsonClicked();\n }}\n >\n <Trans i18nKey=\"share-modal.view-json.copy-button\">Copy to Clipboard</Trans>\n </ClipboardButton>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n","import { saveAs } from 'file-saver';\nimport { PureComponent } from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Field, Modal, Switch } from '@grafana/ui';\nimport { appEvents } from 'app/core/core';\nimport { DashboardExporter } from 'app/features/dashboard/components/DashExportModal/DashboardExporter';\nimport { makeExportableV1 } from 'app/features/dashboard-scene/scene/export/exporters';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { ShowModalReactEvent } from 'app/types/events';\n\nimport { ViewJsonModal } from './ViewJsonModal';\nimport { ShareModalTabProps } from './types';\nimport { getTrackingSource } from './utils';\n\ninterface Props extends ShareModalTabProps {}\n\ninterface State {\n shareExternally: boolean;\n}\n\nexport class ShareExport extends PureComponent<Props, State> {\n private exporter: DashboardExporter;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n shareExternally: false,\n };\n\n this.exporter = new DashboardExporter();\n }\n\n onShareExternallyChange = () => {\n this.setState({\n shareExternally: !this.state.shareExternally,\n });\n };\n\n onSaveAsFile = () => {\n const { dashboard } = this.props;\n const { shareExternally } = this.state;\n\n DashboardInteractions.exportSaveJsonClicked({\n externally: shareExternally,\n shareResource: getTrackingSource(this.props.panel),\n });\n\n if (shareExternally) {\n makeExportableV1(dashboard).then((dashboardJson) => {\n this.openSaveAsDialog(dashboardJson);\n });\n } else {\n this.openSaveAsDialog(dashboard.getSaveModelClone());\n }\n };\n\n onViewJson = () => {\n const { dashboard } = this.props;\n const { shareExternally } = this.state;\n DashboardInteractions.exportViewJsonClicked({\n externally: shareExternally,\n shareResource: getTrackingSource(this.props.panel),\n });\n\n if (shareExternally) {\n this.exporter.makeExportable(dashboard).then((dashboardJson) => {\n this.openJsonModal(dashboardJson);\n });\n } else {\n this.openJsonModal(dashboard.getSaveModelClone());\n }\n };\n\n openSaveAsDialog = (dash: any) => {\n const dashboardJsonPretty = JSON.stringify(dash, null, 2);\n const blob = new Blob([dashboardJsonPretty], {\n type: 'application/json;charset=utf-8',\n });\n const time = new Date().getTime();\n saveAs(blob, `${dash.title}-${time}.json`);\n };\n\n openJsonModal = (clone: object) => {\n appEvents.publish(\n new ShowModalReactEvent({\n props: {\n json: JSON.stringify(clone, null, 2),\n },\n component: ViewJsonModal,\n })\n );\n\n this.props.onDismiss?.();\n };\n\n render() {\n const { onDismiss } = this.props;\n const { shareExternally } = this.state;\n\n const exportExternallyTranslation = t('share-modal.export.share-externally-label', `Export for sharing externally`);\n\n return (\n <>\n <p>\n <Trans i18nKey=\"share-modal.export.info-text\">Export this dashboard.</Trans>\n </p>\n <Field label={exportExternallyTranslation}>\n <Switch id=\"share-externally-toggle\" value={shareExternally} onChange={this.onShareExternallyChange} />\n </Field>\n <Modal.ButtonRow>\n <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n <Trans i18nKey=\"share-modal.export.cancel-button\">Cancel</Trans>\n </Button>\n <Button variant=\"secondary\" onClick={this.onViewJson}>\n <Trans i18nKey=\"share-modal.export.view-button\">View JSON</Trans>\n </Button>\n <Button variant=\"primary\" onClick={this.onSaveAsFile}>\n <Trans i18nKey=\"share-modal.export.save-button\">Save to file</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n );\n }\n}\n","import { PureComponent } from 'react';\n\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, ClipboardButton, Field, FieldSet, Input, Switch, TextLink } from '@grafana/ui';\nimport config from 'app/core/config';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nimport { ThemePicker } from './ThemePicker';\nimport { ShareModalTabProps } from './types';\nimport { buildImageUrl, buildShareUrl, getTrackingSource } from './utils';\n\nexport interface Props extends ShareModalTabProps {}\n\nexport interface State {\n useCurrentTimeRange: boolean;\n useShortUrl: boolean;\n selectedTheme: string;\n shareUrl: string;\n imageUrl: string;\n}\n\nexport class ShareLink extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {\n useCurrentTimeRange: true,\n useShortUrl: false,\n selectedTheme: 'current',\n shareUrl: '',\n imageUrl: '',\n };\n }\n\n componentDidMount() {\n this.buildUrl();\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n const { useCurrentTimeRange, useShortUrl, selectedTheme } = this.state;\n if (\n prevState.useCurrentTimeRange !== useCurrentTimeRange ||\n prevState.selectedTheme !== selectedTheme ||\n prevState.useShortUrl !== useShortUrl\n ) {\n this.buildUrl();\n }\n }\n\n buildUrl = async () => {\n const { panel, dashboard } = this.props;\n const { useCurrentTimeRange, useShortUrl, selectedTheme } = this.state;\n\n const shareUrl = await buildShareUrl(useCurrentTimeRange, selectedTheme, panel, useShortUrl);\n const imageUrl = buildImageUrl(useCurrentTimeRange, dashboard.uid, selectedTheme, panel);\n\n this.setState({ shareUrl, imageUrl });\n };\n\n onUseCurrentTimeRangeChange = () => {\n this.setState({ useCurrentTimeRange: !this.state.useCurrentTimeRange });\n };\n\n onUrlShorten = () => {\n this.setState({ useShortUrl: !this.state.useShortUrl });\n };\n\n onThemeChange = (value: string) => {\n this.setState({ selectedTheme: value });\n };\n\n getShareUrl = () => {\n return this.state.shareUrl;\n };\n\n onCopy = () => {\n DashboardInteractions.shareLinkCopied({\n currentTimeRange: this.state.useCurrentTimeRange,\n theme: this.state.selectedTheme,\n shortenURL: this.state.useShortUrl,\n shareResource: getTrackingSource(this.props.panel),\n });\n };\n\n render() {\n const { panel, dashboard } = this.props;\n const isRelativeTime = dashboard ? dashboard.time.to === 'now' : false;\n const { useCurrentTimeRange, useShortUrl, selectedTheme, shareUrl, imageUrl } = this.state;\n const selectors = e2eSelectors.pages.SharePanelModal;\n const isDashboardSaved = Boolean(dashboard.id);\n\n const timeRangeLabelTranslation = t('share-modal.link.time-range-label', `Lock time range`);\n\n const timeRangeDescriptionTranslation = t(\n 'share-modal.link.time-range-description',\n `Transforms the current relative time range to an absolute time range`\n );\n\n const shortenURLTranslation = t('share-modal.link.shorten-url', `Shorten URL`);\n\n const linkURLTranslation = t('share-modal.link.link-url', `Link URL`);\n\n return (\n <>\n <p>\n <Trans i18nKey=\"share-modal.link.info-text\">\n Create a direct link to this dashboard or panel, customized with the options below.\n </Trans>\n </p>\n <FieldSet>\n <Field label={timeRangeLabelTranslation} description={isRelativeTime ? timeRangeDescriptionTranslation : ''}>\n <Switch\n id=\"share-current-time-range\"\n value={useCurrentTimeRange}\n onChange={this.onUseCurrentTimeRangeChange}\n />\n </Field>\n <ThemePicker selectedTheme={selectedTheme} onChange={this.onThemeChange} />\n <Field label={shortenURLTranslation}>\n <Switch id=\"share-shorten-url\" value={useShortUrl} onChange={this.onUrlShorten} />\n </Field>\n\n <Field label={linkURLTranslation}>\n <Input\n id=\"link-url-input\"\n value={shareUrl}\n readOnly\n addonAfter={\n <ClipboardButton icon=\"copy\" variant=\"primary\" getText={this.getShareUrl} onClipboardCopy={this.onCopy}>\n <Trans i18nKey=\"share-modal.link.copy-link-button\">Copy</Trans>\n </ClipboardButton>\n }\n />\n </Field>\n </FieldSet>\n\n {panel && config.rendererAvailable && (\n <>\n {isDashboardSaved && (\n <TextLink href={imageUrl} external icon={'camera'} aria-label={selectors.linkToRenderedImage}>\n {t('share-modal.link.rendered-image', 'Direct link rendered image')}\n </TextLink>\n )}\n\n {!isDashboardSaved && (\n <Alert\n severity=\"info\"\n title={t('share-modal.link.save-alert', 'Dashboard is not saved')}\n bottomSpacing={0}\n >\n <Trans i18nKey=\"share-modal.link.save-dashboard\">\n To render a panel image, you must save the dashboard first.\n </Trans>\n </Alert>\n )}\n </>\n )}\n\n {panel && !config.rendererAvailable && (\n <Alert\n severity=\"info\"\n title={t('share-modal.link.render-alert', 'Image renderer plugin not installed')}\n bottomSpacing={0}\n >\n <Trans i18nKey=\"share-modal.link.render-instructions\">\n To render an image, you must install the{' '}\n <TextLink href=\"https://grafana.com/grafana/plugins/grafana-image-renderer\" external>\n Grafana image renderer plugin\n </TextLink>\n . Please contact your Grafana administrator to install the plugin.\n </Trans>\n </Alert>\n )}\n </>\n );\n }\n}\n","import { PureComponent } from 'react';\nimport * as React from 'react';\n\nimport { isEmptyObject, SelectableValue, VariableRefresh } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { Button, ClipboardButton, Field, Input, LinkButton, Modal, Select, Spinner, Stack } from '@grafana/ui';\nimport { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nimport { getDashboardSnapshotSrv } from '../../services/SnapshotSrv';\n\nimport { ShareModalTabProps } from './types';\nimport { getTrackingSource } from './utils';\n\ninterface Props extends ShareModalTabProps {}\n\ninterface State {\n isLoading: boolean;\n step: number;\n snapshotName: string;\n selectedExpireOption: SelectableValue<number>;\n snapshotExpires?: number;\n snapshotUrl: string;\n deleteUrl: string;\n timeoutSeconds: number;\n externalEnabled: boolean;\n sharingButtonText: string;\n}\n\nconst selectors = e2eSelectors.pages.ShareDashboardModal.SnapshotScene;\n\nexport class ShareSnapshot extends PureComponent<Props, State> {\n private dashboard: DashboardModel;\n private expireOptions: Array<SelectableValue<number>>;\n\n constructor(props: Props) {\n super(props);\n this.dashboard = props.dashboard;\n this.expireOptions = [\n {\n label: t('share-modal.snapshot.expire-hour', `1 Hour`),\n value: 60 * 60,\n },\n {\n label: t('share-modal.snapshot.expire-day', `1 Day`),\n value: 60 * 60 * 24,\n },\n {\n label: t('share-modal.snapshot.expire-week', `1 Week`),\n value: 60 * 60 * 24 * 7,\n },\n {\n label: t('share-modal.snapshot.expire-never', `Never`),\n value: 0,\n },\n ];\n this.state = {\n isLoading: false,\n step: 1,\n selectedExpireOption: this.expireOptions[2],\n snapshotExpires: this.expireOptions[2].value,\n snapshotName: props.dashboard.title,\n timeoutSeconds: 4,\n snapshotUrl: '',\n deleteUrl: '',\n externalEnabled: false,\n sharingButtonText: '',\n };\n }\n\n componentDidMount() {\n this.getSnaphotShareOptions();\n }\n\n async getSnaphotShareOptions() {\n const shareOptions = await getDashboardSnapshotSrv().getSharingOptions();\n this.setState({\n sharingButtonText: shareOptions.externalSnapshotName,\n externalEnabled: shareOptions.externalEnabled,\n });\n }\n\n createSnapshot = (external?: boolean) => () => {\n const { timeoutSeconds } = this.state;\n this.dashboard.snapshot = {\n timestamp: new Date(),\n };\n\n this.setState({ isLoading: true });\n this.dashboard.startRefresh();\n\n setTimeout(() => {\n this.saveSnapshot(this.dashboard, external);\n }, timeoutSeconds * 1000);\n };\n\n saveSnapshot = async (dashboard: DashboardModel, external?: boolean) => {\n const { snapshotExpires, timeoutSeconds } = this.state;\n const dash = this.dashboard.getSaveModelCloneOld();\n\n this.scrubDashboard(dash);\n\n const cmdData = {\n dashboard: dash,\n name: dash.title,\n expires: snapshotExpires,\n external: external,\n };\n\n try {\n const results = await getDashboardSnapshotSrv().create(cmdData);\n this.setState({\n deleteUrl: results.deleteUrl,\n snapshotUrl: results.url,\n step: 2,\n });\n } finally {\n if (external) {\n DashboardInteractions.publishSnapshotClicked({\n expires: snapshotExpires,\n timeout: timeoutSeconds,\n shareResource: getTrackingSource(this.props.panel),\n });\n } else {\n DashboardInteractions.publishSnapshotLocalClicked({\n expires: snapshotExpires,\n timeout: timeoutSeconds,\n shareResource: getTrackingSource(this.props.panel),\n });\n }\n this.setState({ isLoading: false });\n }\n };\n\n scrubDashboard = (dash: DashboardModel) => {\n const { panel } = this.props;\n const { snapshotName } = this.state;\n // change title\n dash.title = snapshotName;\n\n // make relative times absolute\n dash.time = getTimeSrv().timeRange();\n\n // Remove links\n dash.links = [];\n\n // remove panel queries & links\n dash.panels.forEach((panel) => {\n panel.targets = [];\n panel.links = [];\n panel.datasource = null;\n });\n\n // remove annotation queries\n const annotations = dash.annotations.list.filter((annotation) => annotation.enable);\n\n dash.annotations.list = annotations.map((annotation) => {\n return {\n name: annotation.name,\n enable: annotation.enable,\n iconColor: annotation.iconColor,\n snapshotData: annotation.snapshotData,\n type: annotation.type,\n builtIn: annotation.builtIn,\n hide: annotation.hide,\n };\n });\n\n // remove template queries\n dash.getVariables().forEach((variable) => {\n if ('query' in variable) {\n variable.query = '';\n }\n if ('options' in variable) {\n variable.options = variable.current && !isEmptyObject(variable.current) ? [variable.current] : [];\n }\n if ('refresh' in variable) {\n variable.refresh = VariableRefresh.never;\n }\n });\n\n // snapshot single panel\n if (panel) {\n const singlePanel = panel.getSaveModel();\n singlePanel.gridPos.w = 24;\n singlePanel.gridPos.x = 0;\n singlePanel.gridPos.y = 0;\n singlePanel.gridPos.h = 20;\n dash.panels = [singlePanel];\n }\n\n // cleanup snapshotData\n delete this.dashboard.snapshot;\n this.dashboard.forEachPanel((panel: PanelModel) => {\n delete panel.snapshotData;\n });\n this.dashboard.annotations.list.forEach((annotation) => {\n delete annotation.snapshotData;\n });\n };\n\n deleteSnapshot = async () => {\n const { deleteUrl } = this.state;\n await getBackendSrv().get(deleteUrl);\n this.setState({ step: 3 });\n };\n\n getSnapshotUrl = () => {\n return this.state.snapshotUrl;\n };\n\n onSnapshotNameChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.setState({ snapshotName: event.target.value });\n };\n\n onTimeoutChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.setState({ timeoutSeconds: Number(event.target.value) });\n };\n\n onExpireChange = (option: SelectableValue<number>) => {\n this.setState({\n selectedExpireOption: option,\n snapshotExpires: option.value,\n });\n };\n\n renderStep1() {\n const { onDismiss } = this.props;\n const { snapshotName, selectedExpireOption, timeoutSeconds, isLoading, sharingButtonText, externalEnabled } =\n this.state;\n\n const snapshotNameTranslation = t('share-modal.snapshot.name', `Snapshot name`);\n const expireTranslation = t('share-modal.snapshot.expire', `Expire`);\n const timeoutTranslation = t('share-modal.snapshot.timeout', `Timeout (seconds)`);\n const timeoutDescriptionTranslation = t(\n 'share-modal.snapshot.timeout-description',\n `You might need to configure the timeout value if it takes a long time to collect your dashboard metrics.`\n );\n\n return (\n <>\n <div>\n <p>\n <Trans i18nKey=\"share-modal.snapshot.info-text-1\">\n A snapshot is an instant way to share an interactive dashboard publicly. When created, we strip sensitive\n data like queries (metric, template, and annotation) and panel links, leaving only the visible metric data\n and series names embedded in your dashboard.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"share-modal.snapshot.info-text-2\">\n Keep in mind, your snapshot <em>can be viewed by anyone</em> that has the link and can access the URL.\n Share wisely.\n </Trans>\n </p>\n </div>\n <Field label={snapshotNameTranslation}>\n <Input id=\"snapshot-name-input\" width={30} value={snapshotName} onChange={this.onSnapshotNameChange} />\n </Field>\n <Field label={expireTranslation}>\n <Select\n inputId=\"expire-select-input\"\n width={30}\n options={this.expireOptions}\n value={selectedExpireOption}\n onChange={this.onExpireChange}\n />\n </Field>\n <Field label={timeoutTranslation} description={timeoutDescriptionTranslation}>\n <Input id=\"timeout-input\" type=\"number\" width={21} value={timeoutSeconds} onChange={this.onTimeoutChange} />\n </Field>\n\n <Modal.ButtonRow>\n <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n <Trans i18nKey=\"share-modal.snapshot.cancel-button\">Cancel</Trans>\n </Button>\n {externalEnabled && (\n <Button variant=\"secondary\" disabled={isLoading} onClick={this.createSnapshot(true)}>\n {sharingButtonText}\n </Button>\n )}\n <Button\n variant=\"primary\"\n disabled={isLoading}\n onClick={this.createSnapshot()}\n data-testid={selectors.PublishSnapshot}\n >\n <Trans i18nKey=\"share-modal.snapshot.local-button\">Publish Snapshot</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n );\n }\n\n renderStep2() {\n const { snapshotUrl } = this.state;\n\n return (\n <Stack direction=\"column\" gap={0}>\n <Field label={t('share-modal.snapshot.url-label', 'Snapshot URL')}>\n <Input\n id=\"snapshot-url-input\"\n value={snapshotUrl}\n data-testid={selectors.CopyUrlInput}\n readOnly\n addonAfter={\n <ClipboardButton\n icon=\"copy\"\n variant=\"primary\"\n getText={this.getSnapshotUrl}\n data-testid={selectors.CopyUrlButton}\n >\n <Trans i18nKey=\"share-modal.snapshot.copy-link-button\">Copy</Trans>\n </ClipboardButton>\n }\n />\n </Field>\n\n <div style={{ alignSelf: 'flex-end', padding: '5px' }}>\n <Trans i18nKey=\"share-modal.snapshot.mistake-message\">Did you make a mistake? </Trans> \n <LinkButton fill=\"text\" target=\"_blank\" onClick={this.deleteSnapshot}>\n <Trans i18nKey=\"share-modal.snapshot.delete-button\">Delete snapshot.</Trans>\n </LinkButton>\n </div>\n </Stack>\n );\n }\n\n renderStep3() {\n return (\n <p>\n <Trans i18nKey=\"share-modal.snapshot.deleted-message\">\n The snapshot has been deleted. If you have already accessed it once, then it might take up to an hour before\n before it is removed from browser caches or CDN caches.\n </Trans>\n </p>\n );\n }\n\n render() {\n const { isLoading, step } = this.state;\n\n return (\n <>\n {step === 1 && this.renderStep1()}\n {step === 2 && this.renderStep2()}\n {step === 3 && this.renderStep3()}\n {isLoading && <Spinner inline={true} />}\n </>\n );\n }\n}\n","import * as React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Modal, ModalTabsHeader, TabContent, Themeable2, withTheme2 } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { contextSrv } from 'app/core/core';\nimport { SharePublicDashboard } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard';\nimport { isPublicDashboardsEnabled } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { isPanelModelLibraryPanel } from 'app/features/library-panels/guard';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { ShareEmbed } from './ShareEmbed';\nimport { ShareExport } from './ShareExport';\nimport { ShareLibraryPanel } from './ShareLibraryPanel';\nimport { ShareLink } from './ShareLink';\nimport { ShareSnapshot } from './ShareSnapshot';\nimport { ShareModalTabModel, ShareModalTabProps } from './types';\nimport { getTrackingSource, shareDashboardType } from './utils';\n\nconst customDashboardTabs: ShareModalTabModel[] = [];\nconst customPanelTabs: ShareModalTabModel[] = [];\n\nexport function addDashboardShareTab(tab: ShareModalTabModel) {\n customDashboardTabs.push(tab);\n}\n\nexport function addPanelShareTab(tab: ShareModalTabModel) {\n customPanelTabs.push(tab);\n}\n\nfunction getTabs(canEditDashboard: boolean, panel?: PanelModel, activeTab?: string) {\n const linkLabel = t('share-modal.tab-title.link', 'Link');\n const tabs: ShareModalTabModel[] = [{ label: linkLabel, value: shareDashboardType.link, component: ShareLink }];\n\n if (\n contextSrv.isSignedIn &&\n config.snapshotEnabled &&\n contextSrv.hasPermission(AccessControlAction.SnapshotsCreate)\n ) {\n const snapshotLabel = t('share-modal.tab-title.snapshot', 'Snapshot');\n tabs.push({ label: snapshotLabel, value: shareDashboardType.snapshot, component: ShareSnapshot });\n }\n\n if (panel) {\n const embedLabel = t('share-modal.tab-title.embed', 'Embed');\n tabs.push({ label: embedLabel, value: shareDashboardType.embed, component: ShareEmbedTab });\n\n if (!isPanelModelLibraryPanel(panel)) {\n const libraryPanelLabel = t('share-modal.tab-title.library-panel', 'Library panel');\n tabs.push({ label: libraryPanelLabel, value: shareDashboardType.libraryPanel, component: ShareLibraryPanel });\n }\n tabs.push(...customPanelTabs);\n } else {\n const exportLabel = t('share-modal.tab-title.export', 'Export');\n tabs.push({\n label: exportLabel,\n value: shareDashboardType.export,\n component: ShareExport,\n });\n tabs.push(...customDashboardTabs);\n\n if (isPublicDashboardsEnabled()) {\n tabs.push({\n label: t('share-modal.tab-title.public-dashboard-title', 'Public dashboard'),\n value: shareDashboardType.publicDashboard,\n component: SharePublicDashboard,\n });\n }\n }\n\n const at = tabs.find((t) => t.value === activeTab);\n\n return {\n tabs,\n activeTab: at?.value ?? tabs[0].value,\n };\n}\n\nfunction ShareEmbedTab(props: ShareModalTabProps) {\n return (\n <ShareEmbed\n dashboard={props.dashboard}\n panelId={String(props.panel?.id)}\n timeFrom={props.panel?.timeFrom}\n onDismiss={props.onDismiss}\n />\n );\n}\n\ninterface Props extends Themeable2 {\n dashboard: DashboardModel;\n panel?: PanelModel;\n activeTab?: string;\n onDismiss(): void;\n}\n\ninterface State {\n tabs: ShareModalTabModel[];\n activeTab: string;\n}\n\nfunction getInitialState(props: Props): State {\n const { tabs, activeTab } = getTabs(props.dashboard.canEditDashboard(), props.panel, props.activeTab);\n\n return {\n tabs,\n activeTab,\n };\n}\n\nclass UnthemedShareModal extends React.Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = getInitialState(props);\n }\n\n onSelectTab: React.ComponentProps<typeof ModalTabsHeader>['onChangeTab'] = (t) => {\n this.setState((prevState) => ({ ...prevState, activeTab: t.value }));\n DashboardInteractions.sharingCategoryClicked({\n item: t.value,\n shareResource: getTrackingSource(this.props.panel),\n });\n };\n\n getActiveTab() {\n const { tabs, activeTab } = this.state;\n return tabs.find((t) => t.value === activeTab)!;\n }\n\n renderTitle(modalTitle: string) {\n const { activeTab } = this.state;\n const canEditDashboard = this.props.dashboard.canEditDashboard();\n const tabs = getTabs(canEditDashboard, this.props.panel, this.state.activeTab).tabs;\n\n return (\n <ModalTabsHeader\n title={modalTitle}\n icon=\"share-alt\"\n tabs={tabs}\n activeTab={activeTab}\n onChangeTab={this.onSelectTab}\n />\n );\n }\n\n render() {\n const { dashboard, panel } = this.props;\n const activeTabModel = this.getActiveTab();\n const ActiveTab = activeTabModel.component;\n const modalTitle = panel ? t('share-modal.panel.title', 'Share Panel') : t('share-modal.dashboard.title', 'Share');\n\n return (\n <Modal ariaLabel={modalTitle} isOpen={true} title={this.renderTitle(modalTitle)} onDismiss={this.props.onDismiss}>\n <TabContent>\n <ActiveTab dashboard={dashboard} panel={panel} onDismiss={this.props.onDismiss} />\n </TabContent>\n </Modal>\n );\n }\n}\n\nexport const ShareModal = withTheme2(UnthemedShareModal);\n","import { SerializedError } from '@reduxjs/toolkit';\n\nimport { alertmanagerApi } from '../api/alertmanagerApi';\n\ntype Options = {\n refetchOnFocus: boolean;\n refetchOnReconnect: boolean;\n};\n\n// TODO refactor this so we can just call \"alertmanagerApi.endpoints.getAlertmanagerConfiguration\" everywhere\n// and remove this hook since it adds little value\nexport function useAlertmanagerConfig(amSourceName?: string, options?: Options) {\n const fetchConfig = alertmanagerApi.endpoints.getAlertmanagerConfiguration.useQuery(amSourceName ?? '', {\n // we'll disable cache by default to prevent overwriting other changes made since last fetch\n refetchOnMountOrArgChange: true,\n ...options,\n skip: !amSourceName,\n });\n\n return {\n ...fetchConfig,\n // TODO refactor to get rid of this type assertion\n error: fetchConfig.error as SerializedError,\n };\n}\n","import uPlot, { Series } from 'uplot';\n\nimport {\n colorManipulator,\n DataFrameFieldIndex,\n FALLBACK_COLOR,\n FieldColorMode,\n FieldColorModeId,\n GrafanaTheme2,\n ThresholdsConfig,\n} from '@grafana/data';\nimport {\n BarAlignment,\n BarConfig,\n GraphDrawStyle,\n FillConfig,\n GraphGradientMode,\n LineConfig,\n LineInterpolation,\n PointsConfig,\n VisibilityMode,\n} from '@grafana/schema';\n\nimport { PlotConfigBuilder } from '../types';\n\nimport { getHueGradientFn, getOpacityGradientFn, getScaleGradientFn } from './gradientFills';\n\nexport interface SeriesProps extends LineConfig, BarConfig, FillConfig, PointsConfig {\n scaleKey: string;\n pxAlign?: boolean;\n gradientMode?: GraphGradientMode;\n dynamicSeriesColor?: (seriesIdx: number) => string | undefined;\n\n facets?: uPlot.Series.Facet[];\n\n /** Used when gradientMode is set to Scheme */\n thresholds?: ThresholdsConfig;\n colorMode?: FieldColorMode;\n hardMin?: number | null;\n hardMax?: number | null;\n softMin?: number | null;\n softMax?: number | null;\n\n drawStyle?: GraphDrawStyle;\n pathBuilder?: Series.PathBuilder | null;\n pointsFilter?: Series.Points.Filter | null;\n pointsBuilder?: Series.Points.Show | null;\n show?: boolean;\n dataFrameFieldIndex?: DataFrameFieldIndex;\n theme: GrafanaTheme2;\n value?: uPlot.Series.Value;\n showValues?: boolean;\n}\n\nexport class UPlotSeriesBuilder extends PlotConfigBuilder<SeriesProps, Series> {\n getConfig() {\n const {\n facets,\n drawStyle,\n pathBuilder,\n pointsBuilder,\n pointsFilter,\n lineInterpolation,\n lineWidth,\n lineStyle,\n barAlignment,\n barWidthFactor,\n barMaxWidth,\n showPoints,\n pointSize,\n scaleKey,\n pxAlign,\n spanNulls,\n show = true,\n } = this.props;\n\n let lineConfig: Partial<Series> = {};\n\n let lineColor = this.getLineColor();\n\n // GraphDrawStyle.Points mode also needs this for fill/stroke sharing & re-use in series.points. see getColor() below.\n lineConfig.stroke = lineColor;\n\n lineConfig.width = lineWidth;\n if (lineStyle && lineStyle.fill !== 'solid') {\n if (lineStyle.fill === 'dot') {\n lineConfig.cap = 'round';\n }\n lineConfig.dash = lineStyle.dash ?? [10, 10];\n }\n\n if (pathBuilder != null) {\n lineConfig.paths = pathBuilder;\n } else if (drawStyle === GraphDrawStyle.Points) {\n lineConfig.paths = () => null;\n } else if (drawStyle != null) {\n lineConfig.paths = (self: uPlot, seriesIdx: number, idx0: number, idx1: number) => {\n let pathsBuilder = mapDrawStyleToPathBuilder(\n drawStyle,\n lineInterpolation,\n barAlignment,\n barWidthFactor,\n barMaxWidth\n );\n return pathsBuilder(self, seriesIdx, idx0, idx1);\n };\n }\n\n const useColor: uPlot.Series.Stroke =\n // @ts-ignore\n typeof lineColor === 'string' ? lineColor : (u, seriesIdx) => u.series[seriesIdx]._stroke;\n\n const pointsConfig: Partial<Series> = {\n points: {\n stroke: useColor,\n fill: useColor,\n size: !pointSize || pointSize < lineWidth! ? undefined : pointSize,\n filter: pointsFilter,\n },\n };\n\n if (pointsBuilder != null) {\n pointsConfig.points!.show = pointsBuilder;\n } else {\n // we cannot set points.show property above (even to undefined) as that will clear uPlot's default auto behavior\n if (drawStyle === GraphDrawStyle.Points) {\n pointsConfig.points!.show = true;\n } else {\n if (showPoints === VisibilityMode.Auto) {\n if (drawStyle === GraphDrawStyle.Bars) {\n pointsConfig.points!.show = false;\n }\n } else if (showPoints === VisibilityMode.Never) {\n pointsConfig.points!.show = false;\n } else if (showPoints === VisibilityMode.Always) {\n pointsConfig.points!.show = true;\n }\n }\n }\n\n return {\n scale: scaleKey,\n facets,\n spanGaps: typeof spanNulls === 'number' ? false : spanNulls,\n value: () => '',\n pxAlign,\n show,\n fill: this.getFill(),\n ...lineConfig,\n ...pointsConfig,\n };\n }\n\n private getLineColor(): Series.Stroke {\n const {\n lineColor,\n gradientMode,\n colorMode,\n thresholds,\n theme,\n hardMin,\n hardMax,\n softMin,\n softMax,\n dynamicSeriesColor,\n } = this.props;\n\n if (gradientMode === GraphGradientMode.None && dynamicSeriesColor) {\n return (plot: uPlot, seriesIdx: number) => dynamicSeriesColor(seriesIdx) ?? lineColor ?? FALLBACK_COLOR;\n }\n\n if (gradientMode === GraphGradientMode.Scheme && colorMode?.id !== FieldColorModeId.Fixed) {\n return getScaleGradientFn(1, theme, colorMode, thresholds, hardMin, hardMax, softMin, softMax);\n }\n\n if (gradientMode === GraphGradientMode.Hue) {\n return getHueGradientFn(lineColor ?? FALLBACK_COLOR, 1, theme);\n }\n\n return lineColor ?? FALLBACK_COLOR;\n }\n\n private getFill(): Series.Fill | undefined {\n const {\n lineColor,\n fillColor,\n gradientMode,\n fillOpacity,\n colorMode,\n thresholds,\n theme,\n hardMin,\n hardMax,\n softMin,\n softMax,\n dynamicSeriesColor,\n } = this.props;\n\n if (fillColor) {\n return fillColor;\n }\n\n const mode = gradientMode ?? GraphGradientMode.None;\n const opacityPercent = (fillOpacity ?? 0) / 100;\n\n if (mode === GraphGradientMode.None && dynamicSeriesColor && opacityPercent > 0) {\n return (u: uPlot, seriesIdx: number) => {\n // @ts-ignore\n let lineColor = u.series[seriesIdx]._stroke; // cache\n return colorManipulator.alpha(lineColor ?? '', opacityPercent);\n };\n }\n\n switch (mode) {\n case GraphGradientMode.Opacity:\n return getOpacityGradientFn((fillColor ?? lineColor)!, opacityPercent);\n case GraphGradientMode.Hue:\n return getHueGradientFn((fillColor ?? lineColor)!, opacityPercent, theme);\n case GraphGradientMode.Scheme:\n if (colorMode?.id !== FieldColorModeId.Fixed) {\n return getScaleGradientFn(opacityPercent, theme, colorMode, thresholds, hardMin, hardMax, softMin, softMax);\n }\n // intentional fall-through to handle Scheme with Fixed color\n default:\n if (opacityPercent > 0) {\n return colorManipulator.alpha(lineColor ?? '', opacityPercent);\n }\n }\n\n return undefined;\n }\n}\n\ninterface PathBuilders {\n linear: Series.PathBuilder;\n smooth: Series.PathBuilder;\n stepBefore: Series.PathBuilder;\n stepAfter: Series.PathBuilder;\n [key: string]: Series.PathBuilder;\n}\n\nlet builders: PathBuilders | undefined = undefined;\n\nfunction mapDrawStyleToPathBuilder(\n style: GraphDrawStyle,\n lineInterpolation?: LineInterpolation,\n barAlignment = BarAlignment.Center,\n barWidthFactor = 0.6,\n barMaxWidth = 200\n): Series.PathBuilder {\n const pathBuilders = uPlot.paths;\n\n if (!builders) {\n // This should be global static, but Jest initalization was failing so we lazy load to avoid the issue\n builders = {\n linear: pathBuilders.linear!(),\n smooth: pathBuilders.spline!(),\n stepBefore: pathBuilders.stepped!({ align: -1 }),\n stepAfter: pathBuilders.stepped!({ align: 1 }),\n };\n }\n\n if (style === GraphDrawStyle.Bars) {\n // each bars pathBuilder is lazy-initialized and globally cached by a key composed of its options\n let barsCfgKey = `bars|${barAlignment}|${barWidthFactor}|${barMaxWidth}`;\n\n if (!builders[barsCfgKey]) {\n builders[barsCfgKey] = pathBuilders.bars!({\n size: [barWidthFactor, barMaxWidth],\n align: barAlignment,\n });\n }\n\n return builders[barsCfgKey];\n } else if (style === GraphDrawStyle.Line) {\n if (lineInterpolation === LineInterpolation.StepBefore) {\n return builders.stepBefore;\n }\n if (lineInterpolation === LineInterpolation.StepAfter) {\n return builders.stepAfter;\n }\n if (lineInterpolation === LineInterpolation.Smooth) {\n return builders.smooth;\n }\n }\n\n return builders.linear; // the default\n}\n","import tinycolor from 'tinycolor2';\nimport uPlot from 'uplot';\n\nimport { GrafanaTheme2, Threshold, ThresholdsConfig, ThresholdsMode } from '@grafana/data';\nimport { GraphThresholdsStyleConfig, GraphThresholdsStyleMode, ScaleOrientation } from '@grafana/schema';\n\nimport { getGradientRange, scaleGradient } from './gradientFills';\n\nexport interface UPlotThresholdOptions {\n scaleKey: string;\n thresholds: ThresholdsConfig;\n config: GraphThresholdsStyleConfig;\n theme: GrafanaTheme2;\n hardMin?: number | null;\n hardMax?: number | null;\n softMin?: number | null;\n softMax?: number | null;\n}\n\nexport function getThresholdsDrawHook(options: UPlotThresholdOptions) {\n const dashSegments =\n options.config.mode === GraphThresholdsStyleMode.Dashed ||\n options.config.mode === GraphThresholdsStyleMode.DashedAndArea\n ? [10, 10]\n : [];\n\n function addLines(u: uPlot, yScaleKey: string, steps: Threshold[], theme: GrafanaTheme2) {\n let ctx = u.ctx;\n\n // Thresholds below a transparent threshold is treated like \"less than\", and line drawn previous threshold\n let transparentIndex = 0;\n\n for (let idx = 0; idx < steps.length; idx++) {\n const step = steps[idx];\n if (step.color === 'transparent') {\n transparentIndex = idx;\n break;\n }\n }\n\n ctx.lineWidth = 2;\n ctx.setLineDash(dashSegments);\n\n // Ignore the base -Infinity threshold by always starting on index 1\n for (let idx = 1; idx < steps.length; idx++) {\n const step = steps[idx];\n let color: tinycolor.Instance;\n\n // if we are below a transparent index treat this a less then threshold, use previous thresholds color\n if (transparentIndex >= idx && idx > 0) {\n color = tinycolor(theme.visualization.getColorByName(steps[idx - 1].color));\n } else {\n color = tinycolor(theme.visualization.getColorByName(step.color));\n }\n\n // Unless alpha specififed set to default value\n if (color.getAlpha() === 1) {\n color.setAlpha(0.7);\n }\n\n const isHorizontal = u.scales.x!.ori === ScaleOrientation.Horizontal;\n const scaleVal = u.valToPos(step.value, yScaleKey, true);\n\n let x0 = Math.round(isHorizontal ? u.bbox.left : scaleVal);\n let y0 = Math.round(isHorizontal ? scaleVal : u.bbox.top);\n let x1 = Math.round(isHorizontal ? u.bbox.left + u.bbox.width : scaleVal);\n let y1 = Math.round(isHorizontal ? scaleVal : u.bbox.top + u.bbox.height);\n\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n\n ctx.strokeStyle = color.toString();\n ctx.stroke();\n }\n }\n\n function addAreas(u: uPlot, yScaleKey: string, steps: Threshold[], theme: GrafanaTheme2) {\n let ctx = u.ctx;\n\n let grd = scaleGradient(\n u,\n yScaleKey,\n steps.map((step) => {\n let color = tinycolor(theme.visualization.getColorByName(step.color));\n\n if (color.getAlpha() === 1) {\n color.setAlpha(0.15);\n }\n\n return [step.value, color.toString()];\n }),\n true\n );\n\n ctx.fillStyle = grd;\n ctx.fillRect(u.bbox.left, u.bbox.top, u.bbox.width, u.bbox.height);\n }\n\n const { scaleKey, thresholds, theme, config, hardMin, hardMax, softMin, softMax } = options;\n\n return (u: uPlot) => {\n const ctx = u.ctx;\n const { min: xMin, max: xMax } = u.scales.x;\n const { min: yMin, max: yMax } = u.scales[scaleKey];\n\n if (xMin == null || xMax == null || yMin == null || yMax == null) {\n return;\n }\n\n let { steps, mode } = thresholds;\n\n if (mode === ThresholdsMode.Percentage) {\n let [min, max] = getGradientRange(u, scaleKey, hardMin, hardMax, softMin, softMax);\n let range = max - min;\n\n steps = steps.map((step) => ({\n ...step,\n value: min + range * (step.value / 100),\n }));\n }\n\n ctx.save();\n\n switch (config.mode) {\n case GraphThresholdsStyleMode.Line:\n case GraphThresholdsStyleMode.Dashed:\n addLines(u, scaleKey, steps, theme);\n break;\n case GraphThresholdsStyleMode.Area:\n addAreas(u, scaleKey, steps, theme);\n break;\n case GraphThresholdsStyleMode.LineAndArea:\n case GraphThresholdsStyleMode.DashedAndArea:\n addAreas(u, scaleKey, steps, theme);\n addLines(u, scaleKey, steps, theme);\n }\n\n ctx.restore();\n };\n}\n","import { merge } from 'lodash';\nimport uPlot, { Cursor, Band, Hooks, Select, AlignedData, Padding, Series } from 'uplot';\n\nimport { DataFrame, DefaultTimeZone, Field, getTimeZoneInfo, GrafanaTheme2, TimeRange, TimeZone } from '@grafana/data';\nimport { AxisPlacement, VizOrientation } from '@grafana/schema';\n\nimport { FacetedData, PlotConfig } from '../types';\nimport { DEFAULT_PLOT_CONFIG, getStackingBands, pluginLog, StackingGroup } from '../utils';\n\nimport { AxisProps, UPlotAxisBuilder } from './UPlotAxisBuilder';\nimport { ScaleProps, UPlotScaleBuilder } from './UPlotScaleBuilder';\nimport { SeriesProps, UPlotSeriesBuilder } from './UPlotSeriesBuilder';\nimport { getThresholdsDrawHook, UPlotThresholdOptions } from './UPlotThresholds';\n\nconst cursorDefaults: Cursor = {\n // prevent client-side zoom from triggering at the end of a selection\n drag: { setScale: false },\n points: {\n /*@ts-ignore*/\n size: (u, seriesIdx) => u.series[seriesIdx].points.size * 2,\n /*@ts-ignore*/\n width: (u, seriesIdx, size) => size / 4,\n },\n focus: {\n prox: 30,\n },\n};\n\ntype PrepData = (frames: DataFrame[]) => AlignedData | FacetedData;\ntype PreDataStacked = (frames: DataFrame[], stackingGroups: StackingGroup[]) => AlignedData | FacetedData;\n\nexport class UPlotConfigBuilder {\n readonly uid = Math.random().toString(36).slice(2);\n\n series: UPlotSeriesBuilder[] = [];\n private axes: Record<string, UPlotAxisBuilder> = {};\n readonly scales: UPlotScaleBuilder[] = [];\n private bands: Band[] = [];\n private stackingGroups: StackingGroup[] = [];\n private cursor: Cursor | undefined;\n private select: uPlot.Select | undefined;\n private hasLeftAxis = false;\n private hooks: Hooks.Arrays = {};\n private tz: string | undefined = undefined;\n private mode: uPlot.Mode = 1;\n private frames: DataFrame[] | undefined = undefined;\n // to prevent more than one threshold per scale\n private thresholds: Record<string, UPlotThresholdOptions> = {};\n private padding?: Padding = undefined;\n\n private cachedConfig?: PlotConfig;\n\n prepData: PrepData | undefined = undefined;\n\n constructor(timeZone: TimeZone = DefaultTimeZone) {\n this.tz = getTimeZoneInfo(timeZone, Date.now())?.ianaName;\n }\n\n // Exposed to let the container know the primary scale keys\n scaleKeys: [string, string] = ['', ''];\n\n addHook<T extends keyof Hooks.Defs>(type: T, hook: Hooks.Defs[T]) {\n pluginLog('UPlotConfigBuilder', false, 'addHook', type);\n\n if (!this.hooks[type]) {\n this.hooks[type] = [];\n }\n\n this.hooks[type].push(hook);\n }\n\n addThresholds(options: UPlotThresholdOptions) {\n if (!this.thresholds[options.scaleKey]) {\n this.thresholds[options.scaleKey] = options;\n this.addHook('drawClear', getThresholdsDrawHook(options));\n }\n }\n\n addAxis(props: AxisProps) {\n props.placement = props.placement ?? AxisPlacement.Auto;\n props.grid = props.grid ?? {};\n let scaleKey = props.scaleKey;\n\n if (scaleKey === 'x') {\n scaleKey += props.timeZone ?? '';\n }\n\n if (this.axes[scaleKey]) {\n this.axes[scaleKey].merge(props);\n return;\n }\n\n // Handle auto placement logic\n if (props.placement === AxisPlacement.Auto) {\n props.placement = this.hasLeftAxis ? AxisPlacement.Right : AxisPlacement.Left;\n }\n\n if (props.placement === AxisPlacement.Left) {\n this.hasLeftAxis = true;\n }\n\n if (props.placement === AxisPlacement.Hidden) {\n props.grid.show = false;\n props.size = 0;\n }\n\n this.axes[scaleKey] = new UPlotAxisBuilder(props);\n }\n\n getAxisPlacement(scaleKey: string): AxisPlacement {\n const axis = this.axes[scaleKey];\n return axis?.props.placement! ?? AxisPlacement.Left;\n }\n\n setCursor(cursor?: Cursor) {\n this.cursor = merge({}, this.cursor, cursor);\n }\n\n setMode(mode: uPlot.Mode) {\n this.mode = mode;\n }\n\n setSelect(select: Select) {\n this.select = select;\n }\n\n addSeries(props: SeriesProps) {\n this.series.push(new UPlotSeriesBuilder(props));\n }\n\n getSeries() {\n return this.series;\n }\n\n /** Add or update the scale with the scale key */\n addScale(props: ScaleProps) {\n const current = this.scales.find((v) => v.props.scaleKey === props.scaleKey);\n if (current) {\n current.merge(props);\n return;\n }\n this.scales.push(new UPlotScaleBuilder(props));\n }\n\n addBand(band: Band) {\n this.bands.push(band);\n }\n\n setStackingGroups(groups: StackingGroup[]) {\n this.stackingGroups = groups;\n }\n\n getStackingGroups() {\n return this.stackingGroups;\n }\n\n setPrepData(prepData: PreDataStacked) {\n this.prepData = (frames) => {\n this.frames = frames;\n return prepData(frames, this.getStackingGroups());\n };\n }\n\n setPadding(padding: Padding) {\n this.padding = padding;\n }\n\n getConfig() {\n if (this.cachedConfig) {\n return this.cachedConfig;\n }\n\n const config: PlotConfig = {\n ...DEFAULT_PLOT_CONFIG,\n mode: this.mode,\n series: [\n this.mode === 2\n ? (null as unknown as Series)\n : {\n value: () => '',\n },\n ],\n };\n config.axes = this.ensureNonOverlappingAxes(Object.values(this.axes)).map((a) => a.getConfig());\n config.series = [...config.series, ...this.series.map((s) => s.getConfig())];\n config.scales = this.scales.reduce((acc, s) => {\n return { ...acc, ...s.getConfig() };\n }, {});\n\n config.hooks = this.hooks;\n\n config.select = this.select;\n\n const pointColorFn =\n (alphaHex = '') =>\n (u: uPlot, seriesIdx: number) => {\n /*@ts-ignore*/\n let s = u.series[seriesIdx].points._stroke;\n\n // interpolate for gradients/thresholds\n if (typeof s !== 'string') {\n let field = this.frames![0].fields[seriesIdx];\n s = field.display!(field.values[u.cursor.idxs![seriesIdx]!]).color!;\n }\n\n return s + alphaHex;\n };\n\n config.cursor = merge(\n {},\n cursorDefaults,\n {\n points: {\n stroke: pointColorFn('80'),\n fill: pointColorFn(),\n },\n },\n this.cursor\n );\n\n config.tzDate = this.tzDate;\n\n if (Array.isArray(this.padding)) {\n config.padding = this.padding;\n }\n\n this.stackingGroups.forEach((group) => {\n getStackingBands(group).forEach((band) => {\n this.addBand(band);\n });\n });\n\n if (this.bands.length) {\n config.bands = this.bands;\n }\n\n this.cachedConfig = config;\n\n return config;\n }\n\n private tzDate = (ts: number) => {\n let date = new Date(ts);\n\n return this.tz ? uPlot.tzDate(date, this.tz) : date;\n };\n\n private ensureNonOverlappingAxes(axes: UPlotAxisBuilder[]): UPlotAxisBuilder[] {\n const xAxis = axes.find((a) => a.props.scaleKey === 'x');\n const axesWithoutGridSet = axes.filter((a) => a.props.grid?.show === undefined);\n const firstValueAxisIdx = axesWithoutGridSet.findIndex(\n (a) =>\n a.props.placement === AxisPlacement.Left ||\n a.props.placement === AxisPlacement.Right ||\n (a.props.placement === AxisPlacement.Bottom && a !== xAxis)\n );\n\n // For all axes with no grid set, set the grid automatically (grid only for first left axis )\n for (let i = 0; i < axesWithoutGridSet.length; i++) {\n if (axesWithoutGridSet[i] === xAxis || i === firstValueAxisIdx) {\n axesWithoutGridSet[i].props.grid!.show = true;\n } else {\n axesWithoutGridSet[i].props.grid!.show = false;\n }\n }\n\n return axes;\n }\n}\n\nexport type Renderers = Array<{\n fieldMap: Record<string, string>;\n indicesOnly: string[];\n init: (config: UPlotConfigBuilder, fieldIndices: Record<string, number>) => void;\n}>;\n\n/** @alpha */\ntype UPlotConfigPrepOpts<T extends Record<string, unknown> = {}> = {\n frame: DataFrame;\n theme: GrafanaTheme2;\n timeZones: TimeZone[];\n getTimeRange: () => TimeRange;\n allFrames: DataFrame[];\n renderers?: Renderers;\n tweakScale?: (opts: ScaleProps, forField: Field) => ScaleProps;\n tweakAxis?: (opts: AxisProps, forField: Field) => AxisProps;\n hoverProximity?: number;\n orientation?: VizOrientation;\n} & T;\n\n/** @alpha */\nexport type UPlotConfigPrepFn<T extends {} = {}> = (opts: UPlotConfigPrepOpts<T>) => UPlotConfigBuilder;\n","import { css, keyframes } from '@emotion/css';\nimport { CSSProperties } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport interface LoadingBarProps {\n width: number;\n delay?: number;\n ariaLabel?: string;\n}\n\nconst BAR_WIDTH = 28;\nconst MILLISECONDS_PER_PIXEL = 2.4;\nconst MIN_DURATION_MS = 500;\nconst MAX_DURATION_MS = 4000;\nconst DEFAULT_ANIMATION_DELAY = 300;\nconst MAX_TRANSLATE_X = (100 / BAR_WIDTH) * 100;\n\n/**\n * The LoadingBar is used as a simple loading slider animation in the top of its container.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-loadingbar--docs\n */\nexport function LoadingBar({ width, delay = DEFAULT_ANIMATION_DELAY, ariaLabel = 'Loading bar' }: LoadingBarProps) {\n const durationMs = Math.min(Math.max(Math.round(width * MILLISECONDS_PER_PIXEL), MIN_DURATION_MS), MAX_DURATION_MS);\n const styles = useStyles2(getStyles, delay, durationMs);\n const containerStyles: CSSProperties = {\n overflow: 'hidden',\n };\n\n return (\n <div style={containerStyles}>\n <div aria-label={ariaLabel} role=\"status\" className={styles.bar} />\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, delay: number, duration: number) => {\n const animation = keyframes({\n '0%': {\n transform: 'translateX(-100%)',\n },\n // this gives us a delay between iterations\n '85%, 100%': {\n transform: `translateX(${MAX_TRANSLATE_X}%)`,\n },\n });\n\n return {\n bar: css({\n width: BAR_WIDTH + '%',\n height: 1,\n background: `linear-gradient(90deg, transparent 0%, ${theme.colors.primary.main} 80.75%, transparent 100%)`,\n transform: 'translateX(-100%)',\n willChange: 'transform',\n [theme.transitions.handleMotion('no-preference')]: {\n animationName: animation,\n // an initial delay to prevent the loader from showing if the response is faster than the delay\n animationDelay: `${delay}ms`,\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite',\n animationDuration: `${duration}ms`,\n },\n [theme.transitions.handleMotion('reduce')]: {\n animationName: animation,\n // an initial delay to prevent the loader from showing if the response is faster than the delay\n animationDelay: `${delay}ms`,\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite',\n animationDuration: `${4 * duration}ms`,\n },\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { createElement, useMemo } from 'react';\n\nimport { DataFrame, DataTransformerConfig, GrafanaTheme2, TransformerRegistryItem } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Icon, JSONFormatter, useStyles2, Drawer } from '@grafana/ui';\n\nimport { TransformationsEditorTransformation } from './types';\n\ninterface TransformationEditorProps {\n input: DataFrame[];\n output: DataFrame[];\n debugMode?: boolean;\n index: number;\n uiConfig: TransformerRegistryItem;\n configs: TransformationsEditorTransformation[];\n onChange: (index: number, config: DataTransformerConfig) => void;\n toggleShowDebug: () => void;\n}\n\nexport const TransformationEditor = ({\n input,\n output,\n debugMode,\n index,\n uiConfig,\n configs,\n onChange,\n toggleShowDebug,\n}: TransformationEditorProps) => {\n const styles = useStyles2(getStyles);\n const config = useMemo(() => configs[index], [configs, index]);\n\n const editor = useMemo(\n () =>\n createElement(uiConfig.editor, {\n options: { ...uiConfig.transformation.defaultOptions, ...config.transformation.options },\n input,\n onChange: (opts) => {\n onChange(index, {\n ...config.transformation,\n options: opts,\n });\n },\n }),\n [uiConfig.editor, uiConfig.transformation.defaultOptions, config.transformation, input, onChange, index]\n );\n\n return (\n <div data-testid={selectors.components.TransformTab.transformationEditor(uiConfig.name)}>\n {editor}\n {debugMode && (\n <Drawer\n title={t('dashboard.transformation-editor.title-debug-transformation', 'Debug transformation')}\n subtitle={uiConfig.name}\n onClose={toggleShowDebug}\n >\n <div\n className={styles.debugWrapper}\n data-testid={selectors.components.TransformTab.transformationEditorDebugger(uiConfig.name)}\n >\n <div className={styles.debug}>\n <div className={styles.debugTitle}>\n <Trans i18nKey=\"dashboard.transformation-editor.input-data\">Input data</Trans>\n </div>\n <div className={styles.debugJson}>\n <JSONFormatter json={input} />\n </div>\n </div>\n <div className={styles.debugSeparator}>\n <Icon name=\"arrow-right\" />\n </div>\n <div className={styles.debug}>\n <div className={styles.debugTitle}>\n <Trans i18nKey=\"dashboard.transformation-editor.output-data\">Output data</Trans>\n </div>\n <div className={styles.debugJson}>{output && <JSONFormatter json={output} />}</div>\n </div>\n </div>\n </Drawer>\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n debugWrapper: css({\n display: 'flex',\n flexDirection: 'row',\n }),\n debugSeparator: css({\n width: '48px',\n minHeight: '300px',\n display: 'flex',\n alignItems: 'center',\n alignSelf: 'stretch',\n justifyContent: 'center',\n margin: `0 ${theme.spacing(0.5)}`,\n color: theme.colors.primary.text,\n }),\n debugTitle: css({\n padding: `${theme.spacing(1)} ${theme.spacing(0.25)}`,\n fontFamily: theme.typography.fontFamilyMonospace,\n fontSize: theme.typography.bodySmall.fontSize,\n color: theme.colors.text.primary,\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n flexGrow: 0,\n flexShrink: 1,\n }),\n debug: css({\n marginTop: theme.spacing(1),\n padding: `0 ${theme.spacing(1, 1, 1)}`,\n border: `1px solid ${theme.colors.border.weak}`,\n background: `${theme.isLight ? theme.v1.palette.white : theme.v1.palette.gray05}`,\n borderRadius: theme.shape.radius.default,\n width: '100%',\n minHeight: '300px',\n display: 'flex',\n flexDirection: 'column',\n alignSelf: 'stretch',\n }),\n debugJson: css({\n flexGrow: 1,\n height: '100%',\n overflow: 'hidden',\n padding: theme.spacing(0.5),\n }),\n };\n};\n","import { TransformerRegistryItem } from '@grafana/data';\nimport { Drawer } from '@grafana/ui';\nimport { OperationRowHelp } from 'app/core/components/QueryOperationRow/OperationRowHelp';\nimport { FALLBACK_DOCS_LINK } from 'app/features/transformers/docs/constants';\n\ninterface TransformationEditorHelpDisplayProps {\n isOpen: boolean;\n onCloseClick: (value: boolean) => void;\n transformer: TransformerRegistryItem<null>;\n}\n\nexport const TransformationEditorHelpDisplay = ({\n isOpen,\n onCloseClick,\n transformer,\n}: TransformationEditorHelpDisplayProps) => {\n const {\n transformation: { name },\n help,\n } = transformer;\n\n const helpContent = help ? help : FALLBACK_DOCS_LINK;\n\n const helpElement = (\n <Drawer title={name} subtitle=\"Transformation help\" onClose={() => onCloseClick(false)}>\n <OperationRowHelp markdown={helpContent} styleOverrides={{ borderTop: '2px solid' }} />\n </Drawer>\n );\n\n return isOpen ? helpElement : null;\n};\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { DataFrame, DataTransformerConfig, GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { DataTopic } from '@grafana/schema';\nimport { Field, Select, useStyles2 } from '@grafana/ui';\nimport { FrameMultiSelectionEditor } from 'app/plugins/panel/geomap/editor/FrameSelectionEditor';\n\ninterface TransformationFilterProps {\n /** data frames from the output of previous transformation */\n data: DataFrame[];\n index: number;\n config: DataTransformerConfig;\n annotations?: DataFrame[];\n onChange: (index: number, config: DataTransformerConfig) => void;\n}\n\nexport const TransformationFilter = ({ index, annotations, config, onChange, data }: TransformationFilterProps) => {\n const styles = useStyles2(getStyles);\n\n const opts = useMemo(() => {\n return {\n // eslint-disable-next-line\n context: { data },\n showTopic: true || annotations?.length || config.topic?.length,\n showFilter: config.topic !== DataTopic.Annotations,\n source: [\n { value: DataTopic.Series, label: `Query and Transformation results` },\n { value: DataTopic.Annotations, label: `Annotation data` },\n ],\n };\n }, [data, annotations?.length, config.topic]);\n\n return (\n <div className={styles.wrapper}>\n <Field label={t('dashboard.transformation-filter.label-apply-transformation-to', 'Apply transformation to')}>\n <>\n {opts.showTopic && (\n <Select\n isClearable={true}\n options={opts.source}\n value={opts.source.find((v) => v.value === config.topic)}\n placeholder={opts.source[0].label}\n className={styles.padded}\n onChange={(option) => {\n onChange(index, {\n ...config,\n topic: option?.value,\n });\n }}\n />\n )}\n {opts.showFilter && (\n <FrameMultiSelectionEditor\n value={config.filter!}\n context={opts.context}\n onChange={(filter) => onChange(index, { ...config, filter })}\n />\n )}\n </>\n </Field>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const borderRadius = theme.shape.radius.default;\n\n return {\n wrapper: css({\n padding: theme.spacing(2),\n border: `2px solid ${theme.colors.background.secondary}`,\n borderTop: `none`,\n borderRadius: `0 0 ${borderRadius} ${borderRadius}`,\n position: `relative`,\n top: `-4px`,\n }),\n padded: css({\n marginBottom: theme.spacing(1),\n }),\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useToggle } from 'react-use';\nimport { mergeMap } from 'rxjs';\n\nimport {\n DataTransformerConfig,\n TransformerRegistryItem,\n FrameMatcherID,\n DataTransformContext,\n getFrameMatchers,\n transformDataFrame,\n DataFrame,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { getTemplateSrv, reportInteraction } from '@grafana/runtime';\nimport { ConfirmModal } from '@grafana/ui';\nimport {\n QueryOperationAction,\n QueryOperationToggleAction,\n} from 'app/core/components/QueryOperationRow/QueryOperationAction';\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport config from 'app/core/config';\nimport { PluginStateInfo } from 'app/features/plugins/components/PluginStateInfo';\n\nimport { TransformationEditor } from './TransformationEditor';\nimport { TransformationEditorHelpDisplay } from './TransformationEditorHelpDisplay';\nimport { TransformationFilter } from './TransformationFilter';\nimport { TransformationData } from './TransformationsEditor';\nimport { TransformationsEditorTransformation } from './types';\n\ninterface TransformationOperationRowProps {\n id: string;\n index: number;\n data: TransformationData;\n uiConfig: TransformerRegistryItem<null>;\n configs: TransformationsEditorTransformation[];\n onRemove: (index: number) => void;\n onChange: (index: number, config: DataTransformerConfig) => void;\n}\n\nexport const TransformationOperationRow = ({\n onRemove,\n index,\n id,\n data,\n configs,\n uiConfig,\n onChange,\n}: TransformationOperationRowProps) => {\n const [showDeleteModal, setShowDeleteModal] = useToggle(false);\n const [showDebug, toggleShowDebug] = useToggle(false);\n const [showHelp, toggleShowHelp] = useToggle(false);\n const disabled = !!configs[index].transformation.disabled;\n const topic = configs[index].transformation.topic;\n const showFilterEditor = configs[index].transformation.filter != null || topic != null;\n const showFilterToggle = showFilterEditor || data.series.length > 0 || (data.annotations?.length ?? 0) > 0;\n const [input, setInput] = useState<DataFrame[]>([]);\n const [output, setOutput] = useState<DataFrame[]>([]);\n // output of previous transformation\n const [prevOutput, setPrevOutput] = useState<DataFrame[]>([]);\n\n const onDisableToggle = useCallback(\n (index: number) => {\n const current = configs[index].transformation;\n onChange(index, {\n ...current,\n disabled: current.disabled ? undefined : true,\n });\n },\n [onChange, configs]\n );\n\n // Adds or removes the frame filter\n const toggleFilter = useCallback(() => {\n let current = { ...configs[index].transformation };\n if (current.filter) {\n delete current.filter;\n } else {\n current.filter = {\n id: FrameMatcherID.byRefId,\n options: '', // empty string will not do anything\n };\n }\n onChange(index, current);\n }, [onChange, index, configs]);\n\n // Instrument toggle callback\n const instrumentToggleCallback = useCallback(\n (callback: (e: React.MouseEvent) => void, toggleId: string, active: boolean | undefined) =>\n (e: React.MouseEvent) => {\n let eventName = 'panel_editor_tabs_transformations_toggle';\n if (config.featureToggles.transformationsRedesign) {\n eventName = 'transformations_redesign_' + eventName;\n }\n\n reportInteraction(eventName, {\n action: active ? 'off' : 'on',\n toggleId,\n transformationId: configs[index].transformation.id,\n });\n\n callback(e);\n },\n [configs, index]\n );\n\n useEffect(() => {\n const config = configs[index].transformation;\n const matcher = config.filter?.options ? getFrameMatchers(config.filter) : undefined;\n // we need previous transformation index to get its outputs\n // to be used in this transforms inputs\n const prevTransformIndex = index - 1;\n\n let prevInputTransforms: Array<DataTransformerConfig<{}>> = [];\n let prevOutputTransforms: Array<DataTransformerConfig<{}>> = [];\n\n if (prevTransformIndex >= 0) {\n prevInputTransforms = configs.slice(0, prevTransformIndex).map((t) => t.transformation);\n prevOutputTransforms = configs.slice(prevTransformIndex, index).map((t) => t.transformation);\n }\n\n const inputTransforms = configs.slice(0, index).map((t) => t.transformation);\n const outputTransforms = configs.slice(index, index + 1).map((t) => t.transformation);\n\n const ctx: DataTransformContext = {\n interpolate: (v: string) => getTemplateSrv().replace(v),\n };\n\n const inputSubscription = transformDataFrame(inputTransforms, data.series, ctx).subscribe((data) => {\n if (matcher) {\n data = data.filter((frame) => matcher(frame));\n }\n setInput(data);\n });\n const outputSubscription = transformDataFrame(inputTransforms, data.series, ctx)\n .pipe(mergeMap((before) => transformDataFrame(outputTransforms, before, ctx)))\n .subscribe(setOutput);\n const prevOutputSubscription = transformDataFrame(prevInputTransforms, data.series, ctx)\n .pipe(mergeMap((before) => transformDataFrame(prevOutputTransforms, before, ctx)))\n .subscribe((result) => {\n let mergedResult = [...result];\n // add refIds that were requested even if they did not return a result\n data.request?.targets.forEach((series) => {\n const refIdInResult = mergedResult.some((frame) => frame.refId === series.refId);\n if (!refIdInResult) {\n mergedResult.push({ refId: series.refId, fields: [], length: 0 });\n }\n });\n setPrevOutput(mergedResult);\n });\n\n return function unsubscribe() {\n inputSubscription.unsubscribe();\n outputSubscription.unsubscribe();\n prevOutputSubscription.unsubscribe();\n };\n }, [index, data, configs]);\n\n const renderActions = () => {\n return (\n <>\n {uiConfig.state && <PluginStateInfo state={uiConfig.state} />}\n <QueryOperationToggleAction\n title={t(\n 'dashboard.transformation-operation-row.render-actions.title-show-transform-help',\n 'Show transform help'\n )}\n icon=\"info-circle\"\n // `instrumentToggleCallback` expects a function that takes a MouseEvent, is unused in the state setter. Instead, we simply toggle the state.\n onClick={instrumentToggleCallback(toggleShowHelp, 'help', showHelp)}\n active={showHelp}\n />\n {showFilterToggle && (\n <QueryOperationToggleAction\n title={t('dashboard.transformation-operation-row.render-actions.title-filter', 'Filter')}\n icon=\"filter\"\n onClick={instrumentToggleCallback(toggleFilter, 'filter', showFilterEditor)}\n active={showFilterEditor}\n />\n )}\n <QueryOperationToggleAction\n title={t('dashboard.transformation-operation-row.render-actions.title-debug', 'Debug')}\n icon=\"bug\"\n onClick={instrumentToggleCallback(toggleShowDebug, 'debug', showDebug)}\n active={showDebug}\n />\n <QueryOperationToggleAction\n title={t(\n 'dashboard.transformation-operation-row.render-actions.title-disable-transformation',\n 'Disable transformation'\n )}\n icon={disabled ? 'eye-slash' : 'eye'}\n onClick={instrumentToggleCallback(() => onDisableToggle(index), 'disabled', disabled)}\n active={disabled}\n dataTestId={selectors.components.Transforms.disableTransformationButton}\n />\n <QueryOperationAction\n title={t('dashboard.transformation-operation-row.render-actions.title-remove', 'Remove')}\n icon=\"trash-alt\"\n onClick={() => (config.featureToggles.transformationsRedesign ? setShowDeleteModal(true) : onRemove(index))}\n />\n\n {config.featureToggles.transformationsRedesign && (\n <ConfirmModal\n isOpen={showDeleteModal}\n title={t('dashboard.transformation-operation-row.title-delete', 'Delete {{name}}?', {\n name: uiConfig.name,\n })}\n body={t(\n 'dashboard.transformation-operation-row.body-delete',\n 'Note that removing one transformation may break others. If there is only a single transformation, you will go back to the main selection screen.'\n )}\n confirmText={t('dashboard.transformation-operation-row.render-actions.confirmText-delete', 'Delete')}\n onConfirm={() => {\n setShowDeleteModal(false);\n onRemove(index);\n }}\n onDismiss={() => setShowDeleteModal(false)}\n />\n )}\n </>\n );\n };\n\n return (\n <>\n <QueryOperationRow\n id={id}\n index={index}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n title={`${index + 1} - ${uiConfig.name}`}\n draggable\n actions={renderActions}\n disabled={disabled}\n expanderMessages={{\n close: 'Collapse transformation row',\n open: 'Expand transformation row',\n }}\n >\n {showFilterEditor && (\n <TransformationFilter\n data={prevOutput}\n index={index}\n config={configs[index].transformation}\n annotations={data.annotations}\n onChange={onChange}\n />\n )}\n\n <TransformationEditor\n input={input}\n output={output}\n debugMode={showDebug}\n index={index}\n configs={configs}\n uiConfig={uiConfig}\n onChange={onChange}\n toggleShowDebug={toggleShowDebug}\n />\n </QueryOperationRow>\n <TransformationEditorHelpDisplay transformer={uiConfig} isOpen={showHelp} onCloseClick={toggleShowHelp} />\n </>\n );\n};\n","import { DataTransformerConfig, standardTransformersRegistry } from '@grafana/data';\n\nimport { TransformationOperationRow } from './TransformationOperationRow';\nimport { TransformationData } from './TransformationsEditor';\nimport { TransformationsEditorTransformation } from './types';\n\ninterface TransformationOperationRowsProps {\n data: TransformationData;\n configs: TransformationsEditorTransformation[];\n onRemove: (index: number) => void;\n onChange: (index: number, config: DataTransformerConfig) => void;\n}\n\nexport const TransformationOperationRows = ({\n data,\n onChange,\n onRemove,\n configs,\n}: TransformationOperationRowsProps) => {\n return (\n <>\n {configs.map((t, i) => {\n const uiConfig = standardTransformersRegistry.getIfExists(t.transformation.id);\n\n if (!uiConfig) {\n return null;\n }\n\n return (\n <TransformationOperationRow\n index={i}\n id={`${t.id}`}\n key={`${t.id}`}\n data={data}\n configs={configs}\n uiConfig={uiConfig}\n onRemove={onRemove}\n onChange={onChange}\n />\n );\n })}\n </>\n );\n};\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\nimport { getFieldTypeForReducer, reduceField, ReducerID } from '../fieldReducer';\nimport { getFieldMatcher } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\nimport { findMaxFields } from './utils';\n\nconst MINIMUM_FIELDS_REQUIRED = 1;\n\nexport enum GroupByOperationID {\n aggregate = 'aggregate',\n groupBy = 'groupby',\n}\n\nexport interface GroupByFieldOptions {\n aggregations: ReducerID[];\n operation: GroupByOperationID | null;\n}\n\nexport interface GroupByTransformerOptions {\n fields: Record<string, GroupByFieldOptions>;\n}\n\ninterface FieldMap {\n [key: string]: Field;\n}\n\nexport const groupByTransformer: DataTransformerInfo<GroupByTransformerOptions> = {\n id: DataTransformerID.groupBy,\n name: 'Group by',\n description: 'Group the data by a field values then process calculations for each group.',\n defaultOptions: {\n fields: {},\n },\n isApplicable: (data: DataFrame[]) => {\n // Group by needs at least two fields\n // a field to group on and a field to aggregate\n // We make sure that at least one frame has at\n // least two fields\n const maxFields = findMaxFields(data);\n\n return maxFields >= MINIMUM_FIELDS_REQUIRED\n ? TransformationApplicabilityLevels.Applicable\n : TransformationApplicabilityLevels.NotApplicable;\n },\n isApplicableDescription: (data: DataFrame[]) => {\n const maxFields = findMaxFields(data);\n return `The Group by transformation requires a series with at least ${MINIMUM_FIELDS_REQUIRED} fields to work. The maximum number of fields found on a series is ${maxFields}`;\n },\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n const groupByFieldNames: string[] = [];\n\n for (const [k, v] of Object.entries(options.fields)) {\n if (v.operation === GroupByOperationID.groupBy) {\n groupByFieldNames.push(k);\n }\n }\n\n if (groupByFieldNames.length === 0) {\n return data;\n }\n\n const matcher = getFieldMatcher({\n id: FieldMatcherID.byNames,\n options: { names: groupByFieldNames },\n });\n\n const processed: DataFrame[] = [];\n\n for (const frame of data) {\n // Create a list of fields to group on\n // If there are none we skip the rest\n\n const groupByFields: Field[] = frame.fields.filter((field) => matcher(field, frame, data));\n\n if (groupByFields.length === 0) {\n continue;\n }\n\n // Group the values by fields and groups so we can get all values for a\n // group for a given field.\n const valuesByGroupKey = groupValuesByKey(frame, groupByFields);\n\n // Add the grouped fields to the resulting fields of the transformation\n const fields: Field[] = createGroupedFields(groupByFields, valuesByGroupKey);\n\n // Then for each calculations configured, compute and add a new field (column)\n for (const field of frame.fields) {\n if (!shouldCalculateField(field, options)) {\n continue;\n }\n\n const fieldName = getFieldDisplayName(field);\n const aggregations = options.fields[fieldName].aggregations;\n const valuesByAggregation: Record<string, unknown[]> = {};\n\n valuesByGroupKey.forEach((value) => {\n const fieldWithValuesForGroup = value[fieldName];\n const results = reduceField({\n field: fieldWithValuesForGroup,\n reducers: aggregations,\n });\n\n for (const aggregation of aggregations) {\n if (!Array.isArray(valuesByAggregation[aggregation])) {\n valuesByAggregation[aggregation] = [];\n }\n valuesByAggregation[aggregation].push(results[aggregation]);\n }\n });\n\n for (const aggregation of aggregations) {\n const aggregationField: Field = {\n name: `${fieldName} (${aggregation})`,\n values: valuesByAggregation[aggregation] ?? [],\n type: getFieldTypeForReducer(aggregation, field.type),\n config: {},\n };\n\n fields.push(aggregationField);\n }\n }\n\n processed.push({\n refId: frame.refId,\n fields,\n length: valuesByGroupKey.size,\n });\n }\n\n return processed;\n })\n ),\n};\n\n// exported for test\nexport const shouldCalculateField = (field: Field, options: GroupByTransformerOptions): boolean => {\n const fieldName = getFieldDisplayName(field);\n const { operation, aggregations = [] } = options.fields[fieldName] ?? {};\n\n if (!Array.isArray(aggregations)) {\n return false;\n } else if (operation === GroupByOperationID.aggregate) {\n return aggregations.length > 0;\n } else if (operation === GroupByOperationID.groupBy) {\n return aggregations.length === 1 && aggregations[0] === ReducerID.count;\n } else {\n return false;\n }\n};\n\n/**\n * Groups values together by key. This will create a mapping of strings\n * to _FieldMaps_ that will then be used to group values on.\n *\n * @param frame\n * The dataframe containing the data to group.\n * @param groupByFields\n * An array of fields to group on.\n */\nexport function groupValuesByKey(frame: DataFrame, groupByFields: Field[]) {\n const valuesByGroupKey = new Map<string, FieldMap>();\n\n for (let rowIndex = 0; rowIndex < frame.length; rowIndex++) {\n const groupKey = String(groupByFields.map((field) => field.values[rowIndex]));\n const valuesByField = valuesByGroupKey.get(groupKey) ?? {};\n\n if (!valuesByGroupKey.has(groupKey)) {\n valuesByGroupKey.set(groupKey, valuesByField);\n }\n\n for (let field of frame.fields) {\n const fieldName = getFieldDisplayName(field);\n\n if (!valuesByField[fieldName]) {\n valuesByField[fieldName] = {\n name: fieldName,\n type: field.type,\n config: { ...field.config },\n values: [],\n };\n }\n\n valuesByField[fieldName].values.push(field.values[rowIndex]);\n }\n }\n\n return valuesByGroupKey;\n}\n\n/**\n * Create new fields which will be used to display grouped values.\n *\n * @param groupByFields\n * @param valuesByGroupKey\n * @returns\n * Returns an array of fields that have been grouped.\n */\nexport function createGroupedFields(groupByFields: Field[], valuesByGroupKey: Map<string, FieldMap>): Field[] {\n const fields: Field[] = [];\n\n for (const field of groupByFields) {\n const values: unknown[] = [];\n const fieldName = getFieldDisplayName(field);\n\n valuesByGroupKey.forEach((value) => {\n values.push(value[fieldName].values[0]);\n });\n\n fields.push({\n name: field.name,\n type: field.type,\n config: {\n ...field.config,\n },\n values,\n });\n }\n\n return fields;\n}\n","import { merge, Observable, timer } from 'rxjs';\nimport { mapTo, takeUntil } from 'rxjs/operators';\n\n/**\n * @internal\n */\nexport type WithLoadingIndicatorOptions<T> = {\n whileLoading: T;\n source: Observable<T>;\n};\n\n/**\n * @internal\n */\nexport function withLoadingIndicator<T>({ whileLoading, source }: WithLoadingIndicatorOptions<T>): Observable<T> {\n return merge(timer(200).pipe(mapTo(whileLoading), takeUntil(source)), source);\n}\n","import * as React from 'react';\n\ninterface FolderPickerProps {\n /* Folder UID to show as selected */\n value?: string;\n\n /** Show an invalid state around the folder picker */\n invalid?: boolean;\n\n /* Whether to show the root 'Dashboards' (formally General) folder as selectable */\n showRootFolder?: boolean;\n\n /* Folder UIDs to exclude from the picker, to prevent invalid operations */\n excludeUIDs?: string[];\n\n /* Start tree from this folder instead of root */\n rootFolderUID?: string;\n\n /* Show folders matching this permission, mainly used to also show folders user can view. Defaults to showing only folders user has Edit */\n permission?: 'view' | 'edit';\n\n /* Callback for when the user selects a folder */\n onChange?: (folderUID: string | undefined, folderName: string | undefined) => void;\n\n /* Whether the picker should be clearable */\n clearable?: boolean;\n}\n\ntype FolderPickerComponentType = React.ComponentType<FolderPickerProps>;\n\nlet FolderPickerComponent: FolderPickerComponentType | undefined;\n\n/**\n * Used to bootstrap the FolderPicker during application start\n *\n * @internal\n */\nexport function setFolderPicker(component: FolderPickerComponentType) {\n FolderPickerComponent = component;\n}\n\nexport function FolderPicker(props: FolderPickerProps) {\n if (FolderPickerComponent) {\n return <FolderPickerComponent {...props} />;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n return <div>@grafana/runtime FolderPicker is not set</div>;\n }\n\n return null;\n}\n","import { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { Button } from '@grafana/ui';\n\ninterface VariableStaticOptionsFormAddButtonProps {\n onAdd: () => void;\n}\n\nexport const VariableStaticOptionsFormAddButton = ({ onAdd }: VariableStaticOptionsFormAddButtonProps) => {\n return (\n <Button\n icon=\"plus\"\n variant=\"secondary\"\n onClick={onAdd}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.StaticOptionsEditor.addButton}\n aria-label={t('variables.static-options.add-option-button-label', 'Add new option')}\n >\n <Trans i18nKey=\"variables.static-options.add-option-button-label\">Add new option</Trans>\n </Button>\n );\n};\n","import { FetchError, isFetchError } from '@grafana/runtime';\n\nexport function getMessageFromError(err: unknown): string {\n if (typeof err === 'string') {\n return err;\n }\n\n if (err) {\n if (err instanceof Error) {\n return err.message;\n } else if (isFetchError(err)) {\n if (err.data && err.data.message) {\n return err.data.message;\n } else if (err.statusText) {\n return err.statusText;\n }\n } else if (err.hasOwnProperty('message')) {\n // @ts-expect-error\n return err.message;\n }\n }\n\n return JSON.stringify(err);\n}\n\nexport function getStatusFromError(err: unknown): number | undefined {\n if (typeof err === 'string') {\n return undefined;\n }\n\n if (err) {\n if (err instanceof Error) {\n return undefined;\n } else if (isFetchError(err)) {\n return err.status;\n } else if (err.hasOwnProperty('status')) {\n // @ts-expect-error\n return err.status;\n }\n }\n\n return undefined;\n}\n\nexport function getMessageIdFromError(err: unknown): string | undefined {\n if (typeof err === 'string') {\n return undefined;\n }\n\n if (err) {\n if (err instanceof Error) {\n return undefined;\n } else if (isFetchError(err)) {\n return err.data?.messageId;\n } else if (err.hasOwnProperty('messageId')) {\n // @ts-expect-error\n return err.messageId;\n }\n }\n\n return undefined;\n}\n\nexport function getRequestConfigFromError(err: FetchError): string {\n const method = err.config?.method ?? 'GET';\n const url = err.config?.url;\n\n return method && url ? `${method} ${url}` : 'request';\n}\n","import { api } from './baseAPI';\nconst injectedRtkApi = api.injectEndpoints({\n endpoints: (build) => ({\n getUserPreferences: build.query<GetUserPreferencesApiResponse, GetUserPreferencesApiArg>({\n query: () => ({ url: `/user/preferences` }),\n }),\n patchUserPreferences: build.mutation<PatchUserPreferencesApiResponse, PatchUserPreferencesApiArg>({\n query: (queryArg) => ({ url: `/user/preferences`, method: 'PATCH', body: queryArg.patchPrefsCmd }),\n }),\n updateUserPreferences: build.mutation<UpdateUserPreferencesApiResponse, UpdateUserPreferencesApiArg>({\n query: (queryArg) => ({ url: `/user/preferences`, method: 'PUT', body: queryArg.updatePrefsCmd }),\n }),\n }),\n overrideExisting: false,\n});\nexport { injectedRtkApi as generatedAPI };\nexport type GetUserPreferencesApiResponse = /** status 200 (empty) */ PreferencesSpec;\nexport type GetUserPreferencesApiArg = void;\nexport type PatchUserPreferencesApiResponse =\n /** status 200 An OKResponse is returned if the request was successful. */ SuccessResponseBody;\nexport type PatchUserPreferencesApiArg = {\n patchPrefsCmd: PatchPrefsCmd;\n};\nexport type UpdateUserPreferencesApiResponse =\n /** status 200 An OKResponse is returned if the request was successful. */ SuccessResponseBody;\nexport type UpdateUserPreferencesApiArg = {\n updatePrefsCmd: UpdatePrefsCmd;\n};\nexport type PreferencesCookiePreferences = {\n analytics?: any;\n functional?: any;\n performance?: any;\n};\nexport type PreferencesNavbarPreference = {\n bookmarkUrls?: string[];\n};\nexport type PreferencesQueryHistoryPreference = {\n /** one of: '' | 'query' | 'starred'; */\n homeTab?: string;\n};\nexport type PreferencesSpec = {\n cookiePreferences?: PreferencesCookiePreferences;\n /** UID for the home dashboard */\n homeDashboardUID?: string;\n /** Selected language (beta) */\n language?: string;\n navbar?: PreferencesNavbarPreference;\n queryHistory?: PreferencesQueryHistoryPreference;\n /** Selected locale (beta) */\n regionalFormat?: string;\n /** light, dark, empty is default */\n theme?: string;\n /** The timezone selection\n TODO: this should use the timezone defined in common */\n timezone?: string;\n /** day of the week (sunday, monday, etc) */\n weekStart?: string;\n};\nexport type ErrorResponseBody = {\n /** Error An optional detailed description of the actual error. Only included if running in developer mode. */\n error?: string;\n /** a human readable version of the error */\n message: string;\n /** Status An optional status to denote the cause of the error.\n \n For example, a 412 Precondition Failed error may include additional information of why that error happened. */\n status?: string;\n};\nexport type SuccessResponseBody = {\n message?: string;\n};\nexport type CookieType = string;\nexport type NavbarPreference = {\n bookmarkUrls?: string[];\n};\nexport type QueryHistoryPreference = {\n homeTab?: string;\n};\nexport type PatchPrefsCmd = {\n cookies?: CookieType[];\n /** The numerical :id of a favorited dashboard */\n homeDashboardId?: number;\n homeDashboardUID?: string;\n language?: string;\n navbar?: NavbarPreference;\n queryHistory?: QueryHistoryPreference;\n regionalFormat?: string;\n theme?: 'light' | 'dark';\n timezone?: 'utc' | 'browser';\n weekStart?: string;\n};\nexport type UpdatePrefsCmd = {\n cookies?: CookieType[];\n /** The numerical :id of a favorited dashboard */\n homeDashboardId?: number;\n homeDashboardUID?: string;\n language?: string;\n navbar?: NavbarPreference;\n queryHistory?: QueryHistoryPreference;\n regionalFormat?: string;\n theme?: 'light' | 'dark' | 'system';\n timezone?: 'utc' | 'browser';\n weekStart?: string;\n};\nexport const {\n useGetUserPreferencesQuery,\n useLazyGetUserPreferencesQuery,\n usePatchUserPreferencesMutation,\n useUpdateUserPreferencesMutation,\n} = injectedRtkApi;\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { createBaseQuery } from '../../createBaseQuery';\n\nexport const api = createApi({\n reducerPath: 'userPreferencesAPI',\n baseQuery: createBaseQuery({ baseURL: '/api' }),\n endpoints: () => ({}),\n});\n","import { css, cx } from '@emotion/css';\nimport { useCallback, useRef, useState, useEffect } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\nimport { InlineToast } from '../InlineToast/InlineToast';\n\nexport type Props = ButtonProps & {\n /** A function that returns text to be copied */\n getText(): string;\n /** Callback when the text has been successfully copied */\n onClipboardCopy?(copiedText: string): void;\n /** Callback when there was an error copying the text */\n onClipboardError?(copiedText: string, error: unknown): void;\n};\n\nconst SHOW_SUCCESS_DURATION = 2 * 1000;\n\n/**\n * A control for allowing the user to copy text to their clipboard. Uses native APIs on modern browsers, falling back to the old `document.execCommand('copy')` API on other browsers. The text to be copied should be provided via `getText` prop.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-clipboardbutton--docs\n */\nexport function ClipboardButton({\n onClipboardCopy,\n onClipboardError,\n children,\n getText,\n icon,\n variant,\n ...buttonProps\n}: Props) {\n const styles = useStyles2(getStyles);\n const [showCopySuccess, setShowCopySuccess] = useState(false);\n\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n if (showCopySuccess) {\n timeoutId = setTimeout(() => {\n setShowCopySuccess(false);\n }, SHOW_SUCCESS_DURATION);\n }\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [showCopySuccess]);\n\n const buttonRef = useRef<null | HTMLButtonElement>(null);\n const copyTextCallback = useCallback(async () => {\n const textToCopy = getText();\n\n try {\n await copyText(textToCopy, buttonRef);\n setShowCopySuccess(true);\n onClipboardCopy?.(textToCopy);\n } catch (e) {\n onClipboardError?.(textToCopy, e);\n }\n }, [getText, onClipboardCopy, onClipboardError]);\n\n const copiedText = t('clipboard-button.inline-toast.success', 'Copied');\n return (\n <>\n {showCopySuccess && (\n <InlineToast placement=\"top\" referenceElement={buttonRef.current}>\n {copiedText}\n </InlineToast>\n )}\n\n <Button\n onClick={copyTextCallback}\n icon={icon}\n variant={showCopySuccess ? 'success' : variant}\n {...buttonProps}\n className={cx(styles.button, showCopySuccess && styles.successButton, buttonProps.className)}\n ref={buttonRef}\n >\n {children}\n\n {showCopySuccess && (\n <div className={styles.successOverlay}>\n <Icon name=\"check\" />\n </div>\n )}\n </Button>\n </>\n );\n}\n\nconst copyText = async (text: string, buttonRef: React.MutableRefObject<HTMLButtonElement | null>) => {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.writeText(text);\n } else {\n // Use a fallback method for browsers/contexts that don't support the Clipboard API.\n // See https://web.dev/async-clipboard/#feature-detection.\n // Use textarea so the user can copy multi-line content.\n const textarea = document.createElement('textarea');\n // Normally we'd append this to the body. However if we're inside a focus manager\n // from react-aria, we can't focus anything outside of the managed area.\n // Instead, let's append it to the button. Then we're guaranteed to be able to focus + copy.\n buttonRef.current?.appendChild(textarea);\n textarea.value = text;\n textarea.focus();\n textarea.select();\n document.execCommand('copy');\n textarea.remove();\n }\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n button: css({\n position: 'relative',\n }),\n successButton: css({\n '> *': css({\n visibility: 'hidden',\n }),\n }),\n successOverlay: css({\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n visibility: 'visible', // re-visible the overlay\n }),\n };\n};\n","import { lastValueFrom } from 'rxjs';\n\nimport { isObject } from '@grafana/data';\nimport { getBackendSrv, isFetchError } from '@grafana/runtime';\nimport {\n AlertManagerCortexConfig,\n AlertmanagerGroup,\n AlertmanagerStatus,\n Receiver,\n TestReceiversAlert,\n TestReceiversPayload,\n TestReceiversResult,\n} from 'app/plugins/datasource/alertmanager/types';\n\nimport { GRAFANA_RULES_SOURCE_NAME, getDatasourceAPIUid } from '../utils/datasource';\n\n// \"grafana\" for grafana-managed, otherwise a datasource name\nexport async function fetchAlertManagerConfig(alertManagerSourceName: string): Promise<AlertManagerCortexConfig> {\n try {\n const result = await lastValueFrom(\n getBackendSrv().fetch<AlertManagerCortexConfig>({\n url: `/api/alertmanager/${getDatasourceAPIUid(alertManagerSourceName)}/config/api/v1/alerts`,\n showErrorAlert: false,\n showSuccessAlert: false,\n })\n );\n return {\n template_files: result.data.template_files ?? {},\n template_file_provenances: result.data.template_file_provenances ?? {},\n alertmanager_config: result.data.alertmanager_config ?? {},\n last_applied: result.data.last_applied,\n id: result.data.id,\n extra_config: result.data.extra_config,\n };\n } catch (e) {\n // if no config has been uploaded to grafana, it returns error instead of latest config\n if (\n alertManagerSourceName === GRAFANA_RULES_SOURCE_NAME &&\n isFetchError(e) &&\n e.data?.message?.includes('could not find an Alertmanager configuration')\n ) {\n return {\n template_files: {},\n alertmanager_config: {},\n };\n }\n throw e;\n }\n}\n\nexport async function updateAlertManagerConfig(\n alertManagerSourceName: string,\n config: AlertManagerCortexConfig\n): Promise<void> {\n await lastValueFrom(\n getBackendSrv().fetch({\n method: 'POST',\n url: `/api/alertmanager/${getDatasourceAPIUid(alertManagerSourceName)}/config/api/v1/alerts`,\n data: config,\n showErrorAlert: false,\n showSuccessAlert: false,\n })\n );\n}\n\nexport async function deleteAlertManagerConfig(alertManagerSourceName: string): Promise<void> {\n await lastValueFrom(\n getBackendSrv().fetch({\n method: 'DELETE',\n url: `/api/alertmanager/${getDatasourceAPIUid(alertManagerSourceName)}/config/api/v1/alerts`,\n showErrorAlert: false,\n showSuccessAlert: false,\n })\n );\n}\n\nexport async function fetchAlertGroups(alertmanagerSourceName: string): Promise<AlertmanagerGroup[]> {\n const result = await lastValueFrom(\n getBackendSrv().fetch<AlertmanagerGroup[]>({\n url: `/api/alertmanager/${getDatasourceAPIUid(alertmanagerSourceName)}/api/v2/alerts/groups`,\n showErrorAlert: false,\n showSuccessAlert: false,\n })\n );\n\n return result.data;\n}\n\nexport async function fetchStatus(alertManagerSourceName: string): Promise<AlertmanagerStatus> {\n const result = await lastValueFrom(\n getBackendSrv().fetch<AlertmanagerStatus>({\n url: `/api/alertmanager/${getDatasourceAPIUid(alertManagerSourceName)}/api/v2/status`,\n showErrorAlert: false,\n showSuccessAlert: false,\n })\n );\n\n return result.data;\n}\n\nexport async function testReceivers(\n alertManagerSourceName: string,\n receivers: Receiver[],\n alert?: TestReceiversAlert\n): Promise<void> {\n const data: TestReceiversPayload = {\n receivers,\n alert,\n };\n try {\n const result = await lastValueFrom(\n getBackendSrv().fetch<TestReceiversResult>({\n method: 'POST',\n data,\n url: `/api/alertmanager/${getDatasourceAPIUid(alertManagerSourceName)}/config/api/v1/receivers/test`,\n showErrorAlert: false,\n showSuccessAlert: false,\n })\n );\n\n if (receiversResponseContainsErrors(result.data)) {\n throw new Error(getReceiverResultError(result.data));\n }\n } catch (error) {\n if (isFetchError(error) && isTestReceiversResult(error.data) && receiversResponseContainsErrors(error.data)) {\n throw new Error(getReceiverResultError(error.data));\n }\n\n throw error;\n }\n}\n\nfunction receiversResponseContainsErrors(result: TestReceiversResult) {\n return result.receivers.some((receiver) =>\n receiver.grafana_managed_receiver_configs.some((config) => config.status === 'failed')\n );\n}\n\nfunction isTestReceiversResult(data: unknown): data is TestReceiversResult {\n if (isObject(data) && 'receivers' in data && Array.isArray(data.receivers)) {\n return data.receivers.every(isSingleTestRecieverResult);\n }\n\n return false;\n}\n\nfunction isSingleTestRecieverResult(receiver: unknown): receiver is TestReceiversResult {\n return (\n isObject(receiver) &&\n 'name' in receiver &&\n typeof receiver.name === 'string' &&\n 'grafana_managed_receiver_configs' in receiver &&\n Array.isArray(receiver.grafana_managed_receiver_configs)\n );\n}\n\nfunction getReceiverResultError(receiversResult: TestReceiversResult) {\n return receiversResult.receivers\n .flatMap((receiver) =>\n receiver.grafana_managed_receiver_configs\n .filter((receiver) => receiver.status === 'failed')\n .map((receiver) => receiver.error ?? 'Unknown error.')\n )\n .join('; ');\n}\n","export function mapSet<T, R>(set: Set<T>, callback: (t: T) => R): Set<R> {\n const newSet = new Set<R>();\n for (const el of set) {\n newSet.add(callback(el));\n }\n\n return newSet;\n}\n","import { DataLinkBuiltInVars } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Graph } from 'app/core/utils/dag';\nimport { mapSet } from 'app/core/utils/set';\nimport { stringifyPanelModel } from 'app/features/dashboard/state/PanelModel';\n\nimport { safeStringifyValue } from '../../../core/utils/explore';\nimport { DashboardModel } from '../../dashboard/state/DashboardModel';\nimport { PanelModel } from '../../dashboard/state/PanelModel';\nimport { variableAdapters } from '../adapters';\nimport { isAdHoc } from '../guard';\nimport { VariableModel } from '../types';\nimport { containsVariable, variableRegex, variableRegexExec } from '../utils';\n\nexport interface GraphNode {\n id: string;\n label: string;\n}\n\nexport interface GraphEdge {\n from: string;\n to: string;\n}\n\nexport const createDependencyNodes = (variables: VariableModel[]): GraphNode[] => {\n const nodes: GraphNode[] = [];\n\n for (const variable of variables) {\n nodes.push({ id: variable.id, label: `${variable.id}` });\n }\n\n return nodes;\n};\n\nexport const filterNodesWithDependencies = (nodes: GraphNode[], edges: GraphEdge[]): GraphNode[] => {\n return nodes.filter((node) => edges.some((edge) => edge.from === node.id || edge.to === node.id));\n};\n\nexport const createDependencyEdges = (variables: VariableModel[]): GraphEdge[] => {\n const edges: GraphEdge[] = [];\n\n for (const variable of variables) {\n for (const other of variables) {\n if (variable === other) {\n continue;\n }\n\n const dependsOn = variableAdapters.get(variable.type).dependsOn(variable, other);\n\n if (dependsOn) {\n edges.push({ from: variable.id, to: other.id });\n }\n }\n }\n\n return edges;\n};\n\nexport function getVariableName(expression: string) {\n const match = variableRegexExec(expression);\n if (!match) {\n return undefined;\n }\n const variableName = match.slice(1).find((match) => match !== undefined);\n\n // ignore variables that match inherited object prop names\n if (variableName! in {}) {\n return undefined;\n }\n\n return variableName;\n}\n\nexport const getUnknownVariableStrings = (variables: VariableModel[], model: DashboardModel) => {\n variableRegex.lastIndex = 0;\n const unknownVariableNames: string[] = [];\n const modelAsString = safeStringifyValue(model, 2);\n const matches = modelAsString.match(variableRegex);\n\n if (!matches) {\n return unknownVariableNames;\n }\n\n for (const match of matches) {\n if (!match) {\n continue;\n }\n\n if (match.indexOf('$__') !== -1) {\n // ignore builtin variables\n continue;\n }\n\n if (match.indexOf('${__') !== -1) {\n // ignore builtin variables\n continue;\n }\n\n if (match.indexOf('$hashKey') !== -1) {\n // ignore Angular props\n continue;\n }\n\n const variableName = getVariableName(match);\n\n if (variables.some((variable) => variable.id === variableName)) {\n // ignore defined variables\n continue;\n }\n\n if (unknownVariableNames.find((name) => name === variableName)) {\n continue;\n }\n\n if (variableName) {\n unknownVariableNames.push(variableName);\n }\n }\n\n return unknownVariableNames;\n};\n\nconst validVariableNames: Record<string, RegExp[]> = {\n alias: [/^m$/, /^measurement$/, /^col$/, /^tag_(\\w+|\\d+)$/],\n query: [/^timeFilter$/],\n};\n\nexport const getPropsWithVariable = (variableId: string, parent: { key: string; value: any }, result: any) => {\n const stringValues = Object.keys(parent.value).reduce<Record<string, string>>((all, key) => {\n const value = parent.value[key];\n if (!value || typeof value !== 'string') {\n return all;\n }\n\n const isValidName = validVariableNames[key]\n ? validVariableNames[key].find((regex: RegExp) => regex.test(variableId))\n : undefined;\n\n let hasVariable = containsVariable(value, variableId);\n if (key === 'repeat' && value === variableId) {\n // repeat stores value without variable format\n hasVariable = true;\n }\n\n if (!isValidName && hasVariable) {\n all = {\n ...all,\n [key]: value,\n };\n }\n\n return all;\n }, {});\n\n const objectValues = Object.keys(parent.value).reduce<Record<string, object>>((all, key) => {\n const value = parent.value[key];\n if (value && typeof value === 'object' && Object.keys(value).length) {\n let id = value.title || value.name || value.id || key;\n if (Array.isArray(parent.value) && parent.key === 'panels') {\n id = `${id}[${value.id}]`;\n }\n\n const newResult = getPropsWithVariable(variableId, { key, value }, {});\n\n if (Object.keys(newResult).length) {\n all = {\n ...all,\n [id]: newResult,\n };\n }\n }\n\n return all;\n }, {});\n\n if (Object.keys(stringValues).length || Object.keys(objectValues).length) {\n result = {\n ...result,\n ...stringValues,\n ...objectValues,\n };\n }\n\n return result;\n};\n\nexport interface VariableUsageTree {\n variable: VariableModel;\n tree: any;\n}\n\nexport interface VariableUsages {\n unUsed: VariableModel[];\n usages: VariableUsageTree[];\n}\n\nexport const createUsagesNetwork = (variables: VariableModel[], dashboard: DashboardModel | null): VariableUsages => {\n if (!dashboard) {\n return { unUsed: [], usages: [] };\n }\n\n const unUsed: VariableModel[] = [];\n let usages: VariableUsageTree[] = [];\n const model = dashboard.getSaveModelCloneOld();\n\n for (const variable of variables) {\n const variableId = variable.id;\n const props = getPropsWithVariable(variableId, { key: 'model', value: model }, {});\n if (!Object.keys(props).length && !isAdHoc(variable)) {\n unUsed.push(variable);\n }\n\n if (Object.keys(props).length) {\n usages.push({ variable, tree: props });\n }\n }\n\n return { unUsed, usages };\n};\n\nexport async function getUnknownsNetwork(\n variables: VariableModel[],\n dashboard: DashboardModel | null\n): Promise<UsagesToNetwork[]> {\n return new Promise((resolve, reject) => {\n // can be an expensive call so we avoid blocking the main thread\n setTimeout(() => {\n try {\n const unknowns = createUnknownsNetwork(variables, dashboard);\n resolve(transformUsagesToNetwork(unknowns));\n } catch (e) {\n reject(e);\n }\n }, 200);\n });\n}\n\nfunction createUnknownsNetwork(variables: VariableModel[], dashboard: DashboardModel | null): VariableUsageTree[] {\n if (!dashboard) {\n return [];\n }\n\n let unknown: VariableUsageTree[] = [];\n const model = dashboard.getSaveModelCloneOld();\n\n const unknownVariables = getUnknownVariableStrings(variables, model);\n for (const unknownVariable of unknownVariables) {\n const props = getPropsWithVariable(unknownVariable, { key: 'model', value: model }, {});\n if (Object.keys(props).length) {\n const variable = { id: unknownVariable, name: unknownVariable } as unknown as VariableModel;\n unknown.push({ variable, tree: props });\n }\n }\n\n return unknown;\n}\n\n/*\n getAllAffectedPanelIdsForVariableChange is a function that extracts all the panel ids that are affected by a single variable\n change. It will traverse all chained variables to identify all cascading changes too.\n\n This is done entirely by parsing the current dashboard json and doesn't take under consideration a user cancelling\n a variable query or any faulty variable queries.\n\n This doesn't take circular dependencies in consideration.\n */\n\nexport function getAllAffectedPanelIdsForVariableChange(\n variableIds: string[],\n variableGraph: Graph,\n panelsByVar: Record<string, Set<number>>\n): Set<number> {\n const allDependencies = mapSet(variableGraph.descendants(variableIds), (n) => n.name);\n allDependencies.add(DataLinkBuiltInVars.includeVars);\n for (const id of variableIds) {\n allDependencies.add(id);\n }\n\n const affectedPanelIds = getDependentPanels([...allDependencies], panelsByVar);\n return affectedPanelIds;\n}\n\n// Return an array of panel IDs depending on variables\nexport function getDependentPanels(variables: string[], panelsByVarUsage: Record<string, Set<number>>) {\n const thePanels: number[] = [];\n for (const varId of variables) {\n if (panelsByVarUsage[varId]) {\n thePanels.push(...panelsByVarUsage[varId]);\n }\n }\n\n return new Set(thePanels);\n}\n\nexport interface UsagesToNetwork {\n variable: VariableModel;\n nodes: GraphNode[];\n edges: GraphEdge[];\n showGraph: boolean;\n}\n\nexport const traverseTree = (usage: UsagesToNetwork, parent: { id: string; value: any }): UsagesToNetwork => {\n const { id, value } = parent;\n const { nodes, edges } = usage;\n\n if (value && typeof value === 'string') {\n const leafId = `${parent.id}-${value}`;\n nodes.push({ id: leafId, label: value });\n edges.push({ from: leafId, to: id });\n\n return usage;\n }\n\n if (value && typeof value === 'object') {\n const keys = Object.keys(value);\n for (const key of keys) {\n const leafId = `${parent.id}-${key}`;\n nodes.push({ id: leafId, label: key });\n edges.push({ from: leafId, to: id });\n usage = traverseTree(usage, { id: leafId, value: value[key] });\n }\n\n return usage;\n }\n\n return usage;\n};\n\nexport const transformUsagesToNetwork = (usages: VariableUsageTree[]): UsagesToNetwork[] => {\n const results: UsagesToNetwork[] = [];\n\n for (const usage of usages) {\n const { variable, tree } = usage;\n const result: UsagesToNetwork = {\n variable,\n nodes: [\n { id: 'dashboard', label: t('variables.transform-usages-to-network.result.label.dashboard', 'dashboard') },\n ],\n edges: [],\n showGraph: false,\n };\n results.push(traverseTree(result, { id: 'dashboard', value: tree }));\n }\n\n return results;\n};\n\nconst countLeaves = (object: object): number => {\n const total = Object.values(object).reduce<number>((count, value) => {\n if (typeof value === 'object') {\n return count + countLeaves(value);\n }\n\n return count + 1;\n }, 0);\n\n return total;\n};\n\nexport const getVariableUsages = (variableId: string, usages: VariableUsageTree[]): number => {\n const usage = usages.find((usage) => usage.variable.id === variableId);\n if (!usage) {\n return 0;\n }\n\n return countLeaves(usage.tree);\n};\n\nexport function flattenPanels(panels: PanelModel[]): PanelModel[] {\n const result: PanelModel[] = [];\n\n for (const panel of panels) {\n result.push(panel);\n if (panel.panels?.length) {\n result.push(...flattenPanels(panel.panels.map((p: PanelModel) => new PanelModel(p))));\n }\n }\n\n return result;\n}\n\n// Accepts an array of panel models, and returns an array of panel IDs paired with\n// the names of any template variables found\nexport function getPanelVars(panels: PanelModel[]) {\n const panelsByVar: Record<string, Set<number>> = {};\n for (const p of panels) {\n const jsonString = stringifyPanelModel(p);\n const repeats = [...jsonString.matchAll(/\"repeat\":\"([^\"]+)\"/g)].map((m) => m[1]);\n const varRegexMatches = jsonString.match(variableRegex)?.map((m) => getVariableName(m)) ?? [];\n const varNames = [...repeats, ...varRegexMatches];\n for (const varName of varNames) {\n if (varName! in panelsByVar) {\n panelsByVar[varName!].add(p.id);\n } else {\n panelsByVar[varName!] = new Set([p.id]);\n }\n }\n }\n\n return panelsByVar;\n}\n","import { css } from '@emotion/css';\nimport { useMemo } from 'react';\n\nimport { useAssistant } from '@grafana/assistant';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Grid, Modal, useStyles2, Text } from '@grafana/ui';\nimport { getModKey } from 'app/core/utils/browser';\n\nexport interface HelpModalProps {\n onDismiss: () => void;\n}\n\nexport const HelpModal = ({ onDismiss }: HelpModalProps): JSX.Element => {\n const styles = useStyles2(getStyles);\n const shortcuts = useShortcuts();\n return (\n <Modal title={t('help-modal.title', 'Shortcuts')} isOpen onDismiss={onDismiss} onClickBackdrop={onDismiss}>\n <Grid columns={{ xs: 1, sm: 2 }} gap={3} tabIndex={0}>\n {Object.values(shortcuts).map(({ category, shortcuts }) => (\n <section key={category}>\n <table className={styles.table}>\n <caption>\n <Text element=\"p\" variant=\"h5\">\n {category}\n </Text>\n </caption>\n <thead className=\"sr-only\">\n <tr>\n <th>\n <Trans i18nKey=\"help-modal.column-headers.keys\">Keys</Trans>\n </th>\n <th>\n <Trans i18nKey=\"help-modal.column-headers.description\">Description</Trans>\n </th>\n </tr>\n </thead>\n <tbody>\n {shortcuts.map(({ keys, description }) => (\n <tr key={keys.join()}>\n <td className={styles.keys}>\n {keys.map((key) => (\n <Key key={key}>{key}</Key>\n ))}\n </td>\n <td>\n <Text variant=\"bodySmall\" element=\"p\">\n {description}\n </Text>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </section>\n ))}\n </Grid>\n </Modal>\n );\n};\n\nexport const useShortcuts = () => {\n const { isAvailable: assistantAvailable } = useAssistant();\n const modKey = useMemo(() => getModKey(), []);\n\n return useMemo(() => {\n const globalShortcuts = [\n {\n keys: ['g', 'h'],\n description: t('help-modal.shortcuts-description.go-to-home-dashboard', 'Go to Home Dashboard'),\n },\n {\n keys: ['g', 'd'],\n description: t('help-modal.shortcuts-description.go-to-dashboards', 'Go to Dashboards'),\n },\n { keys: ['g', 'e'], description: t('help-modal.shortcuts-description.go-to-explore', 'Go to Explore') },\n { keys: ['g', 'p'], description: t('help-modal.shortcuts-description.go-to-profile', 'Go to Profile') },\n { keys: ['g', 'a'], description: t('help-modal.shortcuts-description.open-alerting', 'Go to Alerting') },\n { keys: [`${modKey} + k`], description: t('help-modal.shortcuts-description.open-search', 'Open search') },\n {\n keys: ['esc'],\n description: t('help-modal.shortcuts-description.exit-edit/setting-views', 'Exit edit/setting views'),\n },\n {\n keys: ['?'],\n description: t('help-modal.shortcuts-description.show-all-shortcuts', 'Show all keyboard shortcuts'),\n },\n { keys: ['c', 't'], description: t('help-modal.shortcuts-description.change-theme', 'Change theme') },\n ];\n\n // Add assistant shortcut only if assistant is available\n if (assistantAvailable) {\n globalShortcuts.push({\n keys: [`${modKey} + .`],\n description: t('help-modal.shortcuts-description.open-assistant', 'Open Assistant'),\n });\n }\n\n return [\n {\n category: t('help-modal.shortcuts-category.global', 'Global'),\n shortcuts: globalShortcuts,\n },\n {\n category: t('help-modal.shortcuts-category.time-range', 'Time range'),\n shortcuts: [\n {\n keys: ['t', 'z'],\n description: t('help-modal.shortcuts-description.zoom-out-time-range', 'Zoom out time range'),\n },\n {\n keys: ['t', '←'],\n description: t('help-modal.shortcuts-description.move-time-range-back', 'Move time range back'),\n },\n {\n keys: ['t', '→'],\n description: t('help-modal.shortcuts-description.move-time-range-forward', 'Move time range forward'),\n },\n {\n keys: ['t', 'a'],\n description: t(\n 'help-modal.shortcuts-description.make-time-range-permanent',\n 'Make time range absolute/permanent'\n ),\n },\n {\n keys: ['t', 'c'],\n description: t('help-modal.shortcuts-description.copy-time-range', 'Copy time range'),\n },\n {\n keys: ['t', 'v'],\n description: t('help-modal.shortcuts-description.paste-time-range', 'Paste time range'),\n },\n ],\n },\n {\n category: t('help-modal.shortcuts-category.dashboard', 'Dashboard'),\n shortcuts: [\n {\n keys: [`${modKey} + s`],\n description: t('help-modal.shortcuts-description.save-dashboard', 'Save dashboard'),\n },\n {\n keys: ['d', 'r'],\n description: t('help-modal.shortcuts-description.refresh-all-panels', 'Refresh all panels'),\n },\n {\n keys: ['d', 's'],\n description: t('help-modal.shortcuts-description.dashboard-settings', 'Dashboard settings'),\n },\n {\n keys: ['d', 'v'],\n description: t('help-modal.shortcuts-description.toggle-active-mode', 'Toggle in-active / view mode'),\n },\n {\n keys: ['d', 'k'],\n description: t('help-modal.shortcuts-description.toggle-kiosk', 'Toggle kiosk mode (hides top nav)'),\n },\n {\n keys: ['d', '⇧ + e'],\n description: t('help-modal.shortcuts-description.expand-all-rows', 'Expand all rows'),\n },\n {\n keys: ['d', '⇧ + c'],\n description: t('help-modal.shortcuts-description.collapse-all-rows', 'Collapse all rows'),\n },\n {\n keys: ['d', 'a'],\n description: t(\n 'help-modal.shortcuts-description.toggle-auto-fit',\n 'Toggle auto fit panels (experimental feature)'\n ),\n },\n {\n keys: [`${modKey} + o`],\n description: t('help-modal.shortcuts-description.toggle-graph-crosshair', 'Toggle shared graph crosshair'),\n },\n {\n keys: ['d', 'l'],\n description: t('help-modal.shortcuts-description.toggle-all-panel-legends', 'Toggle all panel legends'),\n },\n {\n keys: ['d', 'x'],\n description: t('help-modal.shortcuts-description.toggle-exemplars', 'Toggle exemplars in all panel'),\n },\n ],\n },\n {\n category: t('help-modal.shortcuts-category.focused-panel', 'Focused panel'),\n shortcuts: [\n {\n keys: ['e'],\n description: t('help-modal.shortcuts-description.toggle-panel-edit', 'Toggle panel edit view'),\n },\n {\n keys: ['v'],\n description: t('help-modal.shortcuts-description.toggle-panel-fullscreen', 'Toggle panel fullscreen view'),\n },\n {\n keys: ['p', 'u'],\n description: t('help-modal.shortcuts-description.open-share-link-drawer', 'Share panel link'),\n },\n {\n keys: ['p', 'e'],\n description: t('help-modal.shortcuts-description.open-share-embed-drawer', 'Share panel embed'),\n },\n {\n keys: ['p', 's'],\n description: t('help-modal.shortcuts-description.open-shared-modal', 'Share panel snapshot'),\n },\n {\n keys: ['p', 'x'],\n description: t('help-modal.shortcuts-description.explore-panel', 'Explore panel'),\n },\n {\n keys: ['i'],\n description: t('help-modal.shortcuts-description.inspect-panel', 'Inspect panel'),\n },\n { keys: ['p', 'd'], description: t('help-modal.shortcuts-description.duplicate-panel', 'Duplicate Panel') },\n { keys: ['p', 'r'], description: t('help-modal.shortcuts-description.remove-panel', 'Remove Panel') },\n {\n keys: ['p', 'l'],\n description: t('help-modal.shortcuts-description.toggle-panel-legend', 'Toggle panel legend'),\n },\n ],\n },\n ];\n }, [modKey, assistantAvailable]);\n};\n\ninterface KeyProps {\n children: string;\n}\n\nconst Key = ({ children }: KeyProps) => {\n const styles = useStyles2(getStyles);\n const displayText = useMemo(() => replaceCustomKeyNames(children), [children]);\n const displayElement = <span dangerouslySetInnerHTML={{ __html: displayText }}></span>;\n return (\n <kbd className={styles.shortcutTableKey}>\n <Text variant=\"code\">{displayElement}</Text>\n </kbd>\n );\n};\n\nfunction replaceCustomKeyNames(key: string) {\n let displayName;\n let srName;\n\n if (key.includes('ctrl')) {\n displayName = 'ctrl';\n srName = 'Control';\n } else if (key.includes('esc')) {\n displayName = 'esc';\n srName = 'Escape';\n } else {\n return key;\n }\n\n return key.replace(\n displayName,\n `<span class=\"sr-only\">${srName}</span><span aria-hidden=\"true\" role=\"none\">${displayName}</span>`\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n table: css({\n borderCollapse: 'separate',\n borderSpacing: theme.spacing(2),\n '& caption': {\n captionSide: 'top',\n },\n }),\n keys: css({\n textAlign: 'end',\n whiteSpace: 'nowrap',\n minWidth: 83, // To match column widths with the widest\n }),\n shortcutTableKey: css({\n display: 'inline-block',\n textAlign: 'center',\n marginRight: theme.spacing(0.5),\n padding: '3px 5px',\n lineHeight: '10px',\n verticalAlign: 'middle',\n border: `solid 1px ${theme.colors.border.medium}`,\n borderRadius: theme.shape.radius.default,\n color: theme.colors.text.primary,\n backgroundColor: theme.colors.background.secondary,\n }),\n };\n}\n","import { UrlQueryMap } from '@grafana/data';\n\n/**\n * @public\n * @deprecated in favor of {@link locationService} and will be removed in Grafana 9\n */\nexport interface LocationUpdate {\n /**\n * Target path where you automatically wants to navigate the user.\n */\n path?: string;\n\n /**\n * Specify this value if you want to add values to the query string of the URL.\n */\n query?: UrlQueryMap;\n\n /**\n * If set to true, the query argument will be added to the existing URL.\n */\n partial?: boolean;\n\n /**\n * Used internally to sync the Redux state from Angular to make sure that the Redux location\n * state is in sync when navigating using the Angular router.\n *\n * @remarks\n * Do not change this unless you are the Angular router.\n *\n * @internal\n */\n routeParams?: UrlQueryMap;\n\n /*\n * If set to true, this will replace URL state (ie. cause no new browser history).\n */\n replace?: boolean;\n}\n\n/**\n * If you need to automatically navigate the user to a new place in the application this should\n * be done via the LocationSrv and it will make sure to update the application state accordingly.\n *\n * @public\n * @deprecated in favor of {@link locationService} and will be removed in Grafana 9\n */\nexport interface LocationSrv {\n update(options: LocationUpdate): void;\n}\n\nlet singletonInstance: LocationSrv;\n\n/**\n * Used during startup by Grafana to set the LocationSrv so it is available\n * via the {@link getLocationSrv} to the rest of the application.\n *\n * @internal\n */\nexport function setLocationSrv(instance: LocationSrv) {\n singletonInstance = instance;\n}\n\n/**\n * Used to retrieve the {@link LocationSrv} that can be used to automatically navigate\n * the user to a new place in Grafana.\n *\n * @public\n * @deprecated in favor of {@link locationService} and will be removed in Grafana 9\n */\nexport function getLocationSrv(): LocationSrv {\n return singletonInstance;\n}\n","import { Registry, RegistryItem } from './Registry';\n\nexport enum UnaryOperationID {\n Abs = 'abs',\n Exp = 'exp',\n Ln = 'ln',\n Round = 'round',\n Floor = 'floor',\n Ceil = 'ceil',\n Percent = 'percent',\n}\n\nexport type UnaryOperation = (value: number, total?: number) => number;\n\ninterface UnaryOperatorInfo extends RegistryItem {\n operation: UnaryOperation;\n unaryOperationID: UnaryOperationID;\n}\n\nexport const unaryOperators = new Registry<UnaryOperatorInfo>(() => {\n return [\n {\n id: UnaryOperationID.Abs,\n name: 'Absolute value',\n operation: (value: number) => Math.abs(value),\n unaryOperationID: UnaryOperationID.Abs,\n },\n {\n id: UnaryOperationID.Exp,\n name: 'Natural exponent',\n operation: (value: number) => Math.exp(value),\n unaryOperationID: UnaryOperationID.Exp,\n },\n {\n id: UnaryOperationID.Ln,\n name: 'Natural logarithm',\n operation: (value: number) => Math.log(value),\n unaryOperationID: UnaryOperationID.Ln,\n },\n {\n id: UnaryOperationID.Round,\n name: 'Round',\n operation: (value: number) => Math.round(value),\n unaryOperationID: UnaryOperationID.Round,\n },\n {\n id: UnaryOperationID.Floor,\n name: 'Floor',\n operation: (value: number) => Math.floor(value),\n unaryOperationID: UnaryOperationID.Floor,\n },\n {\n id: UnaryOperationID.Ceil,\n name: 'Ceiling',\n operation: (value: number) => Math.ceil(value),\n unaryOperationID: UnaryOperationID.Ceil,\n },\n {\n id: UnaryOperationID.Percent,\n name: 'Percentage',\n operation: (value: number, total = 1) => value / (total || 1),\n unaryOperationID: UnaryOperationID.Percent,\n },\n ];\n});\n","import { map } from 'rxjs';\n\nimport {\n DataFrame,\n DataTransformerID,\n FieldType,\n incrRoundUp,\n incrRoundDn,\n SynchronousDataTransformerInfo,\n DataFrameType,\n getFieldDisplayName,\n Field,\n getValueFormat,\n formattedValueToString,\n TransformationApplicabilityLevels,\n TimeRange,\n} from '@grafana/data';\nimport { isLikelyAscendingVector } from '@grafana/data/internal';\nimport { t } from '@grafana/i18n';\nimport {\n ScaleDistribution,\n HeatmapCellLayout,\n HeatmapCalculationMode,\n HeatmapCalculationOptions,\n} from '@grafana/schema';\n\nimport { convertDurationToMilliseconds, niceLinearIncrs, niceTimeIncrs } from './utils';\n\nexport interface HeatmapTransformerOptions extends HeatmapCalculationOptions {\n /** the raw values will still exist in results after transformation */\n keepOriginalData?: boolean;\n}\n\nexport const getHeatmapTransformer: () => SynchronousDataTransformerInfo<HeatmapTransformerOptions> = () => ({\n id: DataTransformerID.heatmap,\n name: t('transformers.get-heatmap-transformer.name.create-heatmap', 'Create heatmap'),\n description: t(\n 'transformers.get-heatmap-transformer.description.generate-heatmap-data-from-source',\n 'Generate heatmap data from source data.'\n ),\n defaultOptions: {},\n isApplicable: (data) => {\n const { xField, yField, xs, ys } = findHeatmapFields(data);\n\n if (xField || yField) {\n return TransformationApplicabilityLevels.NotPossible;\n }\n\n if (!xs.length || !ys.length) {\n return TransformationApplicabilityLevels.NotPossible;\n }\n\n return TransformationApplicabilityLevels.Applicable;\n },\n isApplicableDescription:\n 'The Heatmap transformation requires fields with Heatmap compatible data. No fields with Heatmap data could be found.',\n operator: (options, ctx) => (source) =>\n source.pipe(map((data) => getHeatmapTransformer().transformer(options, ctx)(data))),\n\n transformer: (options: HeatmapTransformerOptions) => {\n return (data: DataFrame[]) => {\n const v = calculateHeatmapFromData(data, options);\n if (options.keepOriginalData) {\n return [v, ...data];\n }\n return [v];\n };\n },\n});\n\nfunction parseNumeric(v?: string | null) {\n return v === '+Inf' ? Infinity : v === '-Inf' ? -Infinity : +(v ?? 0);\n}\n\nexport function sortAscStrInf(aName?: string | null, bName?: string | null) {\n return parseNumeric(aName) - parseNumeric(bName);\n}\n\nexport interface HeatmapRowsCustomMeta {\n /** This provides the lookup values */\n yOrdinalDisplay: string[];\n yOrdinalLabel?: string[];\n yMatchWithLabel?: string;\n yMinDisplay?: string;\n}\n\n/** simple utility to get heatmap metadata from a frame */\nexport function readHeatmapRowsCustomMeta(frame?: DataFrame): HeatmapRowsCustomMeta {\n return (frame?.meta?.custom ?? {}) as HeatmapRowsCustomMeta;\n}\n\nexport function isHeatmapCellsDense(frame: DataFrame) {\n let foundY = false;\n\n for (let field of frame.fields) {\n // dense heatmap frames can only have one of these fields\n switch (field.name) {\n case 'y':\n case 'yMin':\n case 'yMax':\n if (foundY) {\n return false;\n }\n\n foundY = true;\n }\n }\n\n return foundY;\n}\n\nexport interface RowsHeatmapOptions {\n frame: DataFrame;\n value?: string; // the field value name\n unit?: string;\n decimals?: number;\n layout?: HeatmapCellLayout;\n}\n\n/** Given existing buckets, create a values style frame */\n// Assumes frames have already been sorted ASC and de-accumulated.\nexport function rowsToCellsHeatmap(opts: RowsHeatmapOptions): DataFrame {\n // TODO: handle null-filling w/ fields[0].config.interval?\n const xField = opts.frame.fields[0];\n const xValues = xField.values;\n const yFields = opts.frame.fields.filter((f, idx) => f.type === FieldType.number && idx > 0);\n\n // similar to initBins() below\n const len = xValues.length * yFields.length;\n const xs = new Array(len);\n const ys = new Array(len);\n const counts2 = new Array(len);\n\n const counts = yFields.map((field) => field.values.slice());\n\n // transpose\n counts.forEach((bucketCounts, bi) => {\n for (let i = 0; i < bucketCounts.length; i++) {\n counts2[counts.length * i + bi] = bucketCounts[i];\n }\n });\n\n const bucketBounds = Array.from({ length: yFields.length }, (v, i) => i);\n\n // fill flat/repeating array\n for (let i = 0, yi = 0, xi = 0; i < len; yi = ++i % bucketBounds.length) {\n ys[i] = bucketBounds[yi];\n\n if (yi === 0 && i >= bucketBounds.length) {\n xi++;\n }\n\n xs[i] = xValues[xi];\n }\n\n // this name determines whether cells are drawn above, below, or centered on the values\n let ordinalFieldName = yFields[0].labels?.le != null ? 'yMax' : 'y';\n switch (opts.layout) {\n case HeatmapCellLayout.le:\n ordinalFieldName = 'yMax';\n break;\n case HeatmapCellLayout.ge:\n ordinalFieldName = 'yMin';\n break;\n case HeatmapCellLayout.unknown:\n ordinalFieldName = 'y';\n break;\n }\n\n const custom: HeatmapRowsCustomMeta = {\n yOrdinalDisplay: yFields.map((f) => getFieldDisplayName(f, opts.frame)),\n yMatchWithLabel: Object.keys(yFields[0].labels ?? {})[0],\n };\n if (custom.yMatchWithLabel) {\n custom.yOrdinalLabel = yFields.map((f) => f.labels?.[custom.yMatchWithLabel!] ?? '');\n if (custom.yMatchWithLabel === 'le') {\n custom.yMinDisplay = '0.0';\n }\n }\n\n // Format the labels as a value\n // TODO: this leaves the internally prepended '0.0' without this formatting treatment\n if (opts.unit?.length || opts.decimals != null) {\n const fmt = getValueFormat(opts.unit ?? 'short');\n if (custom.yMinDisplay) {\n custom.yMinDisplay = formattedValueToString(fmt(0, opts.decimals));\n }\n custom.yOrdinalDisplay = custom.yOrdinalDisplay.map((name) => {\n let num = +name;\n\n if (!Number.isNaN(num)) {\n return formattedValueToString(fmt(num, opts.decimals));\n }\n\n return name;\n });\n }\n\n const valueCfg = {\n ...yFields[0].config,\n };\n\n if (valueCfg.displayNameFromDS) {\n delete valueCfg.displayNameFromDS;\n }\n\n return {\n length: xs.length,\n refId: opts.frame.refId,\n meta: {\n type: DataFrameType.HeatmapCells,\n custom,\n },\n fields: [\n {\n name: xField.type === FieldType.time ? 'xMax' : 'x',\n type: xField.type,\n values: xs,\n config: xField.config,\n },\n {\n name: ordinalFieldName,\n type: FieldType.number,\n values: ys,\n config: {\n unit: 'short', // ordinal lookup\n },\n },\n {\n name: opts.value?.length ? opts.value : 'Value',\n type: FieldType.number,\n values: counts2,\n config: valueCfg,\n display: yFields[0].display,\n },\n ],\n };\n}\n\n// Sorts frames ASC by numeric bucket name and de-accumulates values in each frame's Value field [1]\n// similar to Prometheus result_transformer.ts -> transformToHistogramOverTime()\nexport function prepBucketFrames(frames: DataFrame[]): DataFrame[] {\n frames = frames.slice();\n\n // sort ASC by frame.name (Prometheus bucket bound)\n // or use frame.fields[1].config.displayNameFromDS ?\n frames.sort((a, b) => sortAscStrInf(a.name, b.name));\n\n // cumulative counts\n const counts = frames.map((frame) => frame.fields[1].values.slice());\n\n // de-accumulate\n counts.reverse();\n counts.forEach((bucketCounts, bi) => {\n if (bi < counts.length - 1) {\n for (let i = 0; i < bucketCounts.length; i++) {\n bucketCounts[i] -= counts[bi + 1][i];\n }\n }\n });\n counts.reverse();\n\n return frames.map((frame, i) => ({\n ...frame,\n fields: [\n frame.fields[0],\n {\n ...frame.fields[1],\n values: counts[i],\n },\n ],\n }));\n}\n\ninterface HeatmapCalculationOptionsWithTimeRange extends HeatmapCalculationOptions {\n timeRange?: TimeRange;\n}\n\nexport function calculateHeatmapFromData(\n frames: DataFrame[],\n options: HeatmapCalculationOptionsWithTimeRange\n): DataFrame {\n // Find fields in the heatmap\n const { xField, yField, xs, ys } = findHeatmapFields(frames);\n\n if (!xField || !yField) {\n throw 'no heatmap fields found';\n }\n\n if (!xs.length || !ys.length) {\n throw 'no values found';\n }\n\n const xBucketsCfg = options.xBuckets ?? {};\n const yBucketsCfg = options.yBuckets ?? {};\n\n if (xBucketsCfg.scale?.type === ScaleDistribution.Log) {\n throw 'X axis only supports linear buckets';\n }\n\n const scaleDistribution = options.yBuckets?.scale ?? {\n type: ScaleDistribution.Linear,\n };\n\n const heat2d = heatmap(xs, ys, {\n xSorted: isLikelyAscendingVector(xs),\n xTime: xField.type === FieldType.time,\n xMode: xBucketsCfg.mode,\n xSize:\n xBucketsCfg.mode === HeatmapCalculationMode.Size\n ? convertDurationToMilliseconds(xBucketsCfg.value ?? '')\n : xBucketsCfg.value\n ? +xBucketsCfg.value\n : undefined,\n yMode: yBucketsCfg.mode,\n ySize: yBucketsCfg.value ? +yBucketsCfg.value : undefined,\n yLog:\n scaleDistribution?.type === ScaleDistribution.Log ? (scaleDistribution?.log as 2 | 10 | undefined) : undefined,\n\n xMin: options.timeRange?.from.valueOf(),\n xMax: options.timeRange?.to.valueOf(),\n });\n\n const frame = {\n length: heat2d.x.length,\n name: getFieldDisplayName(yField),\n meta: {\n type: DataFrameType.HeatmapCells,\n },\n fields: [\n {\n name: 'xMin',\n type: xField.type,\n values: heat2d.x,\n config: xField.config,\n },\n {\n name: 'yMin',\n type: FieldType.number,\n values: heat2d.y,\n config: {\n ...yField.config, // keep units from the original source\n custom: {\n scaleDistribution,\n },\n },\n },\n {\n name: 'Count',\n type: FieldType.number,\n values: heat2d.count,\n config: {\n unit: 'short', // always integer\n },\n },\n ],\n };\n\n return frame;\n}\n\n/**\n * Find fields that can be used within a heatmap\n *\n * @param frames\n * An array of DataFrames\n */\nfunction findHeatmapFields(frames: DataFrame[]) {\n let xField: Field | undefined = undefined;\n let yField: Field | undefined = undefined;\n let dataLen = 0;\n\n // pre-allocate arrays\n for (let frame of frames) {\n // TODO: assumes numeric timestamps, ordered asc, without nulls\n const x = frame.fields.find((f) => f.type === FieldType.time);\n if (x) {\n dataLen += frame.length;\n }\n }\n\n let xs: number[] = Array(dataLen);\n let ys: number[] = Array(dataLen);\n let j = 0;\n\n for (let frame of frames) {\n // TODO: assumes numeric timestamps, ordered asc, without nulls\n const x = frame.fields.find((f) => f.type === FieldType.time);\n if (!x) {\n continue;\n }\n\n if (!xField) {\n xField = x; // the first X\n }\n\n const xValues = x.values;\n for (let field of frame.fields) {\n if (field !== x && field.type === FieldType.number) {\n const yValues = field.values;\n\n for (let i = 0; i < xValues.length; i++, j++) {\n xs[j] = xValues[i];\n ys[j] = yValues[i];\n }\n\n if (!yField) {\n yField = field;\n }\n }\n }\n }\n\n return { xField, yField, xs, ys };\n}\n\ninterface HeatmapOpts {\n // default is 10% of data range, snapped to a \"nice\" increment\n xMode?: HeatmapCalculationMode;\n yMode?: HeatmapCalculationMode;\n xSize?: number;\n ySize?: number;\n\n // use Math.ceil instead of Math.floor for bucketing\n xCeil?: boolean;\n yCeil?: boolean;\n\n // log2 or log10 buckets\n xLog?: 2 | 10;\n yLog?: 2 | 10;\n\n xTime?: boolean;\n yTime?: boolean;\n\n // optimization hints for known data ranges (sorted, pre-scanned, etc)\n xMin?: number;\n xMax?: number;\n yMin?: number;\n yMax?: number;\n\n xSorted?: boolean;\n ySorted?: boolean;\n}\n\n// TODO: handle NaN, Inf, -Inf, null, undefined values in xs & ys\nfunction heatmap(xs: number[], ys: number[], opts?: HeatmapOpts) {\n let len = xs.length;\n\n let xSorted = opts?.xSorted ?? false;\n let ySorted = opts?.ySorted ?? false;\n\n // find x and y limits to pre-compute buckets struct\n let minX = opts?.xMin ?? (xSorted ? xs[0] : Infinity);\n let minY = ySorted ? ys[0] : Infinity;\n let maxX = opts?.xMax ?? (xSorted ? xs[len - 1] : -Infinity);\n let maxY = ySorted ? ys[len - 1] : -Infinity;\n\n let yExp = opts?.yLog;\n\n let withPredefX = opts?.xMin != null && opts?.xMax != null;\n let withPredefY = opts?.yMin != null && opts?.yMax != null;\n\n for (let i = 0; i < len; i++) {\n if (!xSorted && !withPredefX) {\n minX = Math.min(minX, xs[i]);\n maxX = Math.max(maxX, xs[i]);\n }\n\n if (!ySorted && !withPredefY) {\n if (!yExp || ys[i] > 0) {\n minY = Math.min(minY, ys[i]);\n maxY = Math.max(maxY, ys[i]);\n }\n }\n }\n\n //let scaleX = opts?.xLog === 10 ? Math.log10 : opts?.xLog === 2 ? Math.log2 : (v: number) => v;\n //let scaleY = opts?.yLog === 10 ? Math.log10 : opts?.yLog === 2 ? Math.log2 : (v: number) => v;\n\n let xBinIncr = opts?.xSize ?? 0;\n let yBinIncr = opts?.ySize ?? 0;\n let xMode = opts?.xMode;\n let yMode = opts?.yMode;\n\n // fall back to 10 buckets if invalid settings\n if (!Number.isFinite(xBinIncr) || xBinIncr <= 0) {\n xMode = HeatmapCalculationMode.Count;\n xBinIncr = 20;\n }\n if (!Number.isFinite(yBinIncr) || yBinIncr <= 0) {\n yMode = HeatmapCalculationMode.Count;\n yBinIncr = 10;\n }\n\n if (xMode === HeatmapCalculationMode.Count) {\n let approx = (maxX - minX) / Math.max(xBinIncr - 1, 1);\n // nice-ify\n let xIncrs = opts?.xTime ? niceTimeIncrs : niceLinearIncrs;\n let xIncrIdx = xIncrs.findIndex((bucketSize) => bucketSize > approx) - 1;\n xBinIncr = xIncrs[Math.max(xIncrIdx, 0)];\n }\n\n if (yMode === HeatmapCalculationMode.Count) {\n let approx = (maxY - minY) / Math.max(yBinIncr - 1, 1);\n // nice-ify\n let yIncrs = opts?.yTime ? niceTimeIncrs : niceLinearIncrs;\n let yIncrIdx = yIncrs.findIndex((bucketSize) => bucketSize > approx) - 1;\n yBinIncr = yIncrs[Math.max(yIncrIdx, 0)];\n }\n\n // console.log({\n // yBinIncr,\n // xBinIncr,\n // });\n\n let binX = opts?.xCeil ? (v: number) => incrRoundUp(v, xBinIncr) : (v: number) => incrRoundDn(v, xBinIncr);\n let binY = opts?.yCeil ? (v: number) => incrRoundUp(v, yBinIncr) : (v: number) => incrRoundDn(v, yBinIncr);\n\n if (yExp) {\n yBinIncr = 1 / (opts?.ySize ?? 1); // sub-divides log exponents\n let yLog = yExp === 2 ? Math.log2 : Math.log10;\n binY = opts?.yCeil ? (v: number) => incrRoundUp(yLog(v), yBinIncr) : (v: number) => incrRoundDn(yLog(v), yBinIncr);\n }\n\n let minXBin = binX(minX);\n let maxXBin = binX(maxX);\n let minYBin = binY(minY);\n let maxYBin = binY(maxY);\n\n let xBinQty = Math.round((maxXBin - minXBin) / xBinIncr) + 1;\n let yBinQty = Math.round((maxYBin - minYBin) / yBinIncr) + 1;\n\n let [xs2, ys2, counts] = initBins(xBinQty, yBinQty, minXBin, xBinIncr, minYBin, yBinIncr, yExp);\n\n for (let i = 0; i < len; i++) {\n if (yExp && ys[i] <= 0) {\n continue;\n }\n\n const xi = (binX(xs[i]) - minXBin) / xBinIncr;\n const yi = (binY(ys[i]) - minYBin) / yBinIncr;\n const ci = xi * yBinQty + yi;\n\n counts[ci]++;\n }\n\n return {\n x: xs2,\n y: ys2,\n count: counts,\n };\n}\n\nfunction initBins(xQty: number, yQty: number, xMin: number, xIncr: number, yMin: number, yIncr: number, yExp?: number) {\n const len = xQty * yQty;\n const xs = new Array<number>(len);\n const ys = new Array<number>(len);\n const counts = new Array<number>(len);\n\n for (let i = 0, yi = 0, x = xMin; i < len; yi = ++i % yQty) {\n counts[i] = 0;\n\n if (yExp) {\n ys[i] = yExp ** (yMin + yi * yIncr);\n } else {\n ys[i] = yMin + yi * yIncr;\n }\n\n if (yi === 0 && i >= yQty) {\n x += xIncr;\n }\n\n xs[i] = x;\n }\n\n return [xs, ys, counts];\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options extends common.OptionsWithLegend, common.SingleStatBaseOptions {\n displayMode: common.BarGaugeDisplayMode;\n maxVizHeight: number;\n minVizHeight: number;\n minVizWidth: number;\n namePlacement: common.BarGaugeNamePlacement;\n showUnfilled: boolean;\n sizing: common.BarGaugeSizing;\n valueMode: common.BarGaugeValueMode;\n}\n\nexport const defaultOptions: Partial<Options> = {\n displayMode: common.BarGaugeDisplayMode.Gradient,\n maxVizHeight: 300,\n minVizHeight: 16,\n minVizWidth: 8,\n namePlacement: common.BarGaugeNamePlacement.Auto,\n showUnfilled: true,\n sizing: common.BarGaugeSizing.Auto,\n valueMode: common.BarGaugeValueMode.Color,\n};\n","import { cloneDeep } from 'lodash';\n\nimport { AdHocVariableFilter, AdHocVariableModel, DataSourceRef } from '@grafana/data';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { StoreState, ThunkResult } from 'app/types/store';\n\nimport { changeVariableEditorExtended } from '../editor/reducer';\nimport { isAdHoc } from '../guard';\nimport { variableUpdated } from '../state/actions';\nimport { toKeyedAction } from '../state/keyedVariablesReducer';\nimport { getLastKey, getNewVariableIndex, getVariable, getVariablesState } from '../state/selectors';\nimport { addVariable, changeVariableProp } from '../state/sharedReducer';\nimport { AddVariable, KeyedVariableIdentifier } from '../state/types';\nimport { toKeyedVariableIdentifier, toVariablePayload } from '../utils';\n\nimport {\n AdHocVariabelFilterUpdate,\n filterAdded,\n filterRemoved,\n filtersRestored,\n filterUpdated,\n initialAdHocVariableModelState,\n} from './reducer';\n\nexport interface AdHocTableOptions {\n datasource: DataSourceRef;\n key: string;\n value: string;\n operator: string;\n}\n\nconst filterTableName = 'Filters';\n\nexport const applyFilterFromTable = (options: AdHocTableOptions): ThunkResult<void> => {\n return async (dispatch, getState) => {\n let variable = getVariableByOptions(options, getState());\n\n if (!variable) {\n dispatch(createAdHocVariable(options));\n variable = getVariableByOptions(options, getState());\n if (!variable) {\n return;\n }\n }\n\n const index = variable.filters.findIndex((f) => f.key === options.key && f.value === options.value);\n\n if (index === -1) {\n const { value, key, operator } = options;\n const filter = { value, key, operator };\n return await dispatch(addFilter(toKeyedVariableIdentifier(variable), filter));\n }\n\n const filter = { ...variable.filters[index], operator: options.operator };\n return await dispatch(changeFilter(toKeyedVariableIdentifier(variable), { index, filter }));\n };\n};\n\nexport const changeFilter = (\n identifier: KeyedVariableIdentifier,\n update: AdHocVariabelFilterUpdate\n): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const variable = getVariable(identifier, getState());\n dispatch(toKeyedAction(identifier.rootStateKey, filterUpdated(toVariablePayload(variable, update))));\n await dispatch(variableUpdated(toKeyedVariableIdentifier(variable), true));\n };\n};\n\nexport const removeFilter = (identifier: KeyedVariableIdentifier, index: number): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const variable = getVariable(identifier, getState());\n dispatch(toKeyedAction(identifier.rootStateKey, filterRemoved(toVariablePayload(variable, index))));\n await dispatch(variableUpdated(toKeyedVariableIdentifier(variable), true));\n };\n};\n\nexport const addFilter = (identifier: KeyedVariableIdentifier, filter: AdHocVariableFilter): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const variable = getVariable(identifier, getState());\n dispatch(toKeyedAction(identifier.rootStateKey, filterAdded(toVariablePayload(variable, filter))));\n await dispatch(variableUpdated(toKeyedVariableIdentifier(variable), true));\n };\n};\n\nexport const setFiltersFromUrl = (\n identifier: KeyedVariableIdentifier,\n filters: AdHocVariableFilter[]\n): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const variable = getVariable(identifier, getState());\n dispatch(toKeyedAction(identifier.rootStateKey, filtersRestored(toVariablePayload(variable, filters))));\n await dispatch(variableUpdated(toKeyedVariableIdentifier(variable), true));\n };\n};\n\nexport const changeVariableDatasource = (\n identifier: KeyedVariableIdentifier,\n datasource?: DataSourceRef\n): ThunkResult<void> => {\n return async (dispatch, getState) => {\n const variable = getVariable(identifier, getState());\n dispatch(\n toKeyedAction(\n identifier.rootStateKey,\n changeVariableProp(toVariablePayload(variable, { propName: 'datasource', propValue: datasource }))\n )\n );\n\n const ds = await getDatasourceSrv().get(datasource);\n\n // TS TODO: ds is not typed to be optional - is this check unnecessary or is the type incorrect?\n const message = ds?.getTagKeys\n ? 'Ad hoc filters are applied automatically to all queries that target this data source'\n : 'This data source does not support ad hoc filters yet.';\n\n dispatch(\n toKeyedAction(\n identifier.rootStateKey,\n changeVariableEditorExtended({\n infoText: message,\n })\n )\n );\n };\n};\n\nconst createAdHocVariable = (options: AdHocTableOptions): ThunkResult<void> => {\n return (dispatch, getState) => {\n const key = getLastKey(getState());\n\n const model: AdHocVariableModel = {\n ...cloneDeep(initialAdHocVariableModelState),\n datasource: options.datasource,\n name: filterTableName,\n id: filterTableName,\n rootStateKey: key,\n };\n\n const global = false;\n const index = getNewVariableIndex(key, getState());\n const identifier: KeyedVariableIdentifier = { type: 'adhoc', id: model.id, rootStateKey: key };\n\n dispatch(toKeyedAction(key, addVariable(toVariablePayload<AddVariable>(identifier, { global, model, index }))));\n };\n};\n\nconst getVariableByOptions = (options: AdHocTableOptions, state: StoreState): AdHocVariableModel | undefined => {\n const key = getLastKey(state);\n const templatingState = getVariablesState(key, state);\n let result: AdHocVariableModel | undefined;\n for (const v of Object.values(templatingState.variables)) {\n if (isAdHoc(v) && v.datasource?.uid === options.datasource.uid) {\n result = v;\n break;\n }\n }\n return result;\n};\n","import { css } from '@emotion/css';\n\nimport { formattedValueToString, getValueFormat, GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { trimFileName } from '../../utils/file';\nimport { Button } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\nimport { IconButton } from '../IconButton/IconButton';\n\nimport { DropzoneFile } from './FileDropzone';\n\nexport const REMOVE_FILE = 'Remove file';\nexport interface FileListItemProps {\n file: DropzoneFile;\n removeFile?: (file: DropzoneFile) => void;\n}\n\n/**\n * A FileListItem component used for the FileDropzone component to show uploaded files.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-filelistitem--docs\n */\nexport function FileListItem({ file: customFile, removeFile }: FileListItemProps) {\n const styles = useStyles2(getStyles);\n const { file, progress, error, abortUpload, retryUpload } = customFile;\n\n const renderRightSide = () => {\n if (error) {\n return (\n <>\n <span className={styles.error}>{error.message}</span>\n {retryUpload && (\n <IconButton\n name=\"sync\"\n tooltip={t('grafana-ui.file-dropzone.item-retry', 'Retry')}\n tooltipPlacement=\"top\"\n onClick={retryUpload}\n />\n )}\n {removeFile && (\n <IconButton\n className={retryUpload ? styles.marginLeft : ''}\n name=\"trash-alt\"\n onClick={() => removeFile(customFile)}\n tooltip={REMOVE_FILE}\n />\n )}\n </>\n );\n }\n\n if (progress && file.size > progress) {\n return (\n <>\n <progress className={styles.progressBar} max={file.size} value={progress} />\n <span className={styles.paddingLeft}>\n {Math.round((progress / file.size) * 100)}\n {'%'}\n </span>\n {abortUpload && (\n <Button variant=\"secondary\" type=\"button\" fill=\"text\" onClick={abortUpload}>\n <Trans i18nKey=\"grafana-ui.file-dropzone.cancel-upload\">Cancel upload</Trans>\n </Button>\n )}\n </>\n );\n }\n return (\n removeFile && (\n <IconButton\n name=\"trash-alt\"\n onClick={() => removeFile(customFile)}\n tooltip={REMOVE_FILE}\n tooltipPlacement=\"top\"\n />\n )\n );\n };\n\n const valueFormat = getValueFormat('decbytes')(file.size);\n\n return (\n <div className={styles.fileListContainer}>\n <span className={styles.fileNameWrapper}>\n <Icon name=\"file-blank\" size=\"lg\" aria-hidden={true} />\n <span className={styles.padding}>{trimFileName(file.name)}</span>\n <span>{formattedValueToString(valueFormat)}</span>\n </span>\n\n <div className={styles.fileNameWrapper}>{renderRightSide()}</div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n fileListContainer: css({\n width: '100%',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n border: `1px dashed ${theme.colors.border.medium}`,\n backgroundColor: `${theme.colors.background.secondary}`,\n marginTop: theme.spacing(1),\n }),\n fileNameWrapper: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }),\n padding: css({\n padding: theme.spacing(0, 1),\n }),\n paddingLeft: css({\n paddingLeft: theme.spacing(2),\n }),\n marginLeft: css({\n marginLeft: theme.spacing(1),\n }),\n error: css({\n paddingRight: theme.spacing(2),\n color: theme.colors.error.text,\n }),\n progressBar: css({\n borderRadius: theme.shape.radius.default,\n height: '4px',\n '::-webkit-progress-bar': {\n backgroundColor: theme.colors.border.weak,\n borderRadius: theme.shape.radius.default,\n },\n '::-webkit-progress-value': {\n backgroundColor: theme.colors.primary.main,\n borderRadius: theme.shape.radius.default,\n },\n }),\n };\n}\n","import { findMatchingRoutes } from '@grafana/alerting';\nimport { AlertmanagerGroup, Route, RouteWithID } from 'app/plugins/datasource/alertmanager/types';\n\nimport { normalizeMatchers, unquoteWithUnescape } from './matchers';\nimport { routeAdapter } from './routeAdapter';\n\n// This is a performance improvement to normalize matchers only once and use the normalized version later on\nexport function normalizeRoute<T extends Route>(rootRoute: T): T {\n function normalizeRoute<T extends Route>(route: T) {\n route.object_matchers = normalizeMatchers(route);\n delete route.matchers;\n delete route.match;\n delete route.match_re;\n route.routes?.forEach(normalizeRoute);\n }\n\n const normalizedRootRoute = structuredClone(rootRoute);\n normalizeRoute(normalizedRootRoute);\n\n return normalizedRootRoute;\n}\n\nexport function unquoteRouteMatchers<T extends Route>(route: T): T {\n function unquoteRoute(route: Route) {\n route.object_matchers = route.object_matchers?.map(([name, operator, value]) => {\n return [unquoteWithUnescape(name), operator, unquoteWithUnescape(value)];\n });\n route.routes?.forEach(unquoteRoute);\n }\n\n const unwrappedRootRoute = structuredClone(route);\n unquoteRoute(unwrappedRootRoute);\n\n return unwrappedRootRoute;\n}\n\n/**\n * find all of the groups that have instances that match the route, thay way we can find all instances\n * (and their grouping) for the given route\n */\nfunction findMatchingAlertGroups(\n routeTree: RouteWithID,\n route: RouteWithID,\n alertGroups: AlertmanagerGroup[]\n): AlertmanagerGroup[] {\n const matchingGroups: AlertmanagerGroup[] = [];\n\n // Convert routes once outside the loop for efficiency\n // findMatchingRoutes expects the alerting package Route type, so we need to convert\n const alertingRouteTree = routeAdapter.toPackage(routeTree);\n const alertingRoute = routeAdapter.toPackage(route);\n\n return alertGroups.reduce((acc, group) => {\n // find matching alerts in the current group\n const matchingAlerts = group.alerts.filter((alert) => {\n const labels = Object.entries(alert.labels);\n const matchingRoutes = findMatchingRoutes(alertingRouteTree, labels);\n\n // Compare routes by id - we must use ID comparison because routeAdapter.toPackage()\n // creates new objects, so reference equality would always be false.\n // The ID is preserved during conversion and uniquely identifies each route.\n return matchingRoutes.some((matchingRoute) => matchingRoute.route.id === alertingRoute.id);\n });\n\n // if the groups has any alerts left after matching, add it to the results\n if (matchingAlerts.length) {\n acc.push({\n ...group,\n alerts: matchingAlerts,\n });\n }\n\n return acc;\n }, matchingGroups);\n}\n\n// recursive function to rename receivers in all routes (notification policies)\nfunction renameReceiverInRoute(route: Route, oldName: string, newName: string) {\n const updated: Route = {\n ...route,\n };\n\n if (updated.receiver === oldName) {\n updated.receiver = newName;\n }\n\n if (updated.routes) {\n updated.routes = updated.routes.map((route) => renameReceiverInRoute(route, oldName, newName));\n }\n\n return updated;\n}\n\nexport { findMatchingAlertGroups, renameReceiverInRoute };\n","import { useCallback } from 'react';\n\nimport { FieldNamePickerConfigSettings, SelectableValue, StandardEditorProps } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { Select } from '../Select/Select';\n\nimport { useFieldDisplayNames, useSelectOptions, frameHasName } from './utils';\n\ntype Props = StandardEditorProps<string, FieldNamePickerConfigSettings>;\n\n// Pick a field name out of the fields\nexport const FieldNamePicker = ({ value, onChange, context, item, id }: Props) => {\n const settings: FieldNamePickerConfigSettings = item.settings ?? {};\n const names = useFieldDisplayNames(context.data, settings?.filter);\n const selectOptions = useSelectOptions(names, value, undefined, undefined, settings.baseNameMode);\n\n const onSelectChange = useCallback(\n (selection?: SelectableValue<string>) => {\n if (selection && !frameHasName(selection.value, names)) {\n return; // can not select name that does not exist?\n }\n return onChange(selection?.value);\n },\n [names, onChange]\n );\n\n const selectedOption = selectOptions.find((v) => v.value === value);\n return (\n <>\n <Select\n inputId={id}\n value={selectedOption}\n placeholder={\n settings.placeholderText ?? t('grafana-ui.matchers-ui.field-name-picker.placeholder', 'Select field')\n }\n options={selectOptions}\n onChange={onSelectChange}\n noOptionsMessage={settings.noFieldsMessage}\n width={settings.width}\n isClearable={settings.isClearable !== false}\n />\n </>\n );\n};\n","import { isString } from 'lodash';\n\nimport { DataSourceRef } from '@grafana/schema';\n\nimport { KeyValue } from '../types/data';\nimport {\n DataSourceInstanceSettings,\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n DataSourceSettings,\n} from '../types/datasource';\nimport { SelectableValue } from '../types/select';\n\n/**\n * Convert instance settings to a reference\n *\n * @public\n */\nexport function getDataSourceRef(ds: DataSourceInstanceSettings): DataSourceRef {\n const ref: DataSourceRef = { uid: ds.uid, type: ds.type };\n if (ds.apiVersion) {\n ref.apiVersion = ds.apiVersion;\n }\n return ref;\n}\n\n/**\n * Returns true if the argument is a DataSourceRef\n *\n * @public\n */\nexport function isDataSourceRef(ref: unknown): ref is DataSourceRef {\n if (typeof ref !== 'object' || ref === null) {\n return false;\n }\n\n const hasUid = 'uid' in ref && typeof ref.uid === 'string';\n const hasType = 'type' in ref && typeof ref.type === 'string';\n return hasUid || hasType;\n}\n\n/**\n * Get the UID from a string of reference\n *\n * @public\n */\nexport function getDataSourceUID(ref: DataSourceRef | string | null): string | undefined {\n if (isDataSourceRef(ref)) {\n return ref.uid;\n }\n if (isString(ref)) {\n return ref;\n }\n return undefined;\n}\n\nexport const onUpdateDatasourceOption =\n (props: DataSourcePluginOptionsEditorProps, key: keyof DataSourceSettings) =>\n (event: React.SyntheticEvent<HTMLInputElement | HTMLSelectElement>) => {\n updateDatasourcePluginOption(props, key, event.currentTarget.value);\n };\n\nexport const onUpdateDatasourceJsonDataOption =\n <J extends DataSourceJsonData, S, K extends keyof J>(props: DataSourcePluginOptionsEditorProps<J, S>, key: K) =>\n (event: React.SyntheticEvent<HTMLInputElement | HTMLSelectElement>) => {\n updateDatasourcePluginJsonDataOption(props, key, event.currentTarget.value);\n };\n\nexport const onUpdateDatasourceSecureJsonDataOption =\n <J extends DataSourceJsonData, S extends {} = KeyValue>(\n props: DataSourcePluginOptionsEditorProps<J, S>,\n key: string\n ) =>\n (event: React.SyntheticEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => {\n updateDatasourcePluginSecureJsonDataOption(props, key, event.currentTarget.value);\n };\n\nexport const onUpdateDatasourceJsonDataOptionSelect =\n <J extends DataSourceJsonData, S, K extends keyof J>(props: DataSourcePluginOptionsEditorProps<J, S>, key: K) =>\n (selected: SelectableValue) => {\n updateDatasourcePluginJsonDataOption(props, key, selected.value);\n };\n\nexport const onUpdateDatasourceJsonDataOptionChecked =\n <J extends DataSourceJsonData, S, K extends keyof J>(props: DataSourcePluginOptionsEditorProps<J, S>, key: K) =>\n (event: React.SyntheticEvent<HTMLInputElement>) => {\n updateDatasourcePluginJsonDataOption(props, key, event.currentTarget.checked);\n };\n\nexport const onUpdateDatasourceSecureJsonDataOptionSelect =\n <J extends DataSourceJsonData, S extends {} = KeyValue>(\n props: DataSourcePluginOptionsEditorProps<J, S>,\n key: string\n ) =>\n (selected: SelectableValue) => {\n updateDatasourcePluginSecureJsonDataOption(props, key, selected.value);\n };\n\nexport const onUpdateDatasourceResetOption =\n (props: DataSourcePluginOptionsEditorProps, key: string) =>\n (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n updateDatasourcePluginResetOption(props, key);\n };\n\nexport function updateDatasourcePluginOption<J extends DataSourceJsonData, S extends {} = KeyValue>(\n props: DataSourcePluginOptionsEditorProps<J, S>,\n key: keyof DataSourceSettings,\n val: unknown\n) {\n const config = props.options;\n\n props.onOptionsChange({\n ...config,\n [key]: val,\n });\n}\n\nexport const updateDatasourcePluginJsonDataOption = <J extends DataSourceJsonData, S, K extends keyof J>(\n props: DataSourcePluginOptionsEditorProps<J, S>,\n key: K,\n val: unknown\n) => {\n const config = props.options;\n\n props.onOptionsChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n [key]: val,\n },\n });\n};\n\nexport const updateDatasourcePluginSecureJsonDataOption = <J extends DataSourceJsonData, S extends {} = KeyValue>(\n props: DataSourcePluginOptionsEditorProps<J, S>,\n key: string,\n val: unknown\n) => {\n const config = props.options;\n\n props.onOptionsChange({\n ...config,\n secureJsonData: {\n ...(config.secureJsonData ? config.secureJsonData : ({} as S)),\n [key]: val,\n },\n });\n};\n\nexport const updateDatasourcePluginResetOption = <J extends DataSourceJsonData, S extends {} = KeyValue>(\n props: DataSourcePluginOptionsEditorProps<J, S>,\n key: string\n) => {\n const config = props.options;\n props.onOptionsChange({\n ...config,\n secureJsonData: {\n ...(config.secureJsonData ? config.secureJsonData : ({} as S)),\n [key]: '',\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n [key]: false,\n },\n });\n};\n","import {\n AutoGridLayoutItemKind,\n Spec as DashboardV2Spec,\n GridLayoutItemKind,\n RowsLayoutRowKind,\n TabsLayoutTabKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { LS_PANEL_COPY_KEY, LS_ROW_COPY_KEY, LS_TAB_COPY_KEY } from 'app/core/constants';\nimport store from 'app/core/store';\n\nimport { deserializeAutoGridItem } from '../../serialization/layoutSerializers/AutoGridLayoutSerializer';\nimport { deserializeGridItem } from '../../serialization/layoutSerializers/DefaultGridLayoutSerializer';\nimport { deserializeRow } from '../../serialization/layoutSerializers/RowsLayoutSerializer';\nimport { deserializeTab } from '../../serialization/layoutSerializers/TabsLayoutSerializer';\nimport { dashboardSceneGraph } from '../../utils/dashboardSceneGraph';\nimport { DashboardScene } from '../DashboardScene';\nimport { AutoGridItem } from '../layout-auto-grid/AutoGridItem';\nimport { DashboardGridItem } from '../layout-default/DashboardGridItem';\nimport { GridCell } from '../layout-default/findSpaceForNewPanel';\nimport { RowItem } from '../layout-rows/RowItem';\nimport { TabItem } from '../layout-tabs/TabItem';\n\nexport function clearClipboard() {\n store.delete(LS_PANEL_COPY_KEY);\n store.delete(LS_ROW_COPY_KEY);\n store.delete(LS_TAB_COPY_KEY);\n}\n\nexport interface RowStore {\n elements: DashboardV2Spec['elements'];\n row: RowsLayoutRowKind;\n}\n\nexport interface TabStore {\n elements: DashboardV2Spec['elements'];\n tab: TabsLayoutTabKind;\n}\n\nexport interface PanelStore {\n elements: DashboardV2Spec['elements'];\n gridItem: GridLayoutItemKind | AutoGridLayoutItemKind;\n}\n\nexport function getRowFromClipboard(scene: DashboardScene): RowItem {\n const jsonData = store.get(LS_ROW_COPY_KEY);\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const jsonObj: RowStore = JSON.parse(jsonData) as RowStore;\n clearClipboard();\n const panelIdGenerator = getPanelIdGenerator(dashboardSceneGraph.getNextPanelId(scene));\n\n let row;\n // We don't control the local storage content, so if it's out of sync with the code all bets are off.\n try {\n row = deserializeRow(jsonObj.row, jsonObj.elements, false, panelIdGenerator);\n } catch (error) {\n throw new Error('Error pasting row from clipboard, please try to copy again');\n }\n\n return row;\n}\n\nexport function getTabFromClipboard(scene: DashboardScene): TabItem {\n const jsonData = store.get(LS_TAB_COPY_KEY);\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const jsonObj: TabStore = JSON.parse(jsonData) as TabStore;\n clearClipboard();\n const panelIdGenerator = getPanelIdGenerator(dashboardSceneGraph.getNextPanelId(scene));\n let tab;\n try {\n tab = deserializeTab(jsonObj.tab, jsonObj.elements, false, panelIdGenerator);\n } catch (error) {\n throw new Error('Error pasting tab from clipboard, please try to copy again');\n }\n\n return tab;\n}\n\nexport function getPanelFromClipboard(scene: DashboardScene): DashboardGridItem | AutoGridItem {\n const jsonData = store.get(LS_PANEL_COPY_KEY);\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const { elements, gridItem }: PanelStore = JSON.parse(jsonData) as PanelStore;\n\n if (gridItem.kind === 'GridLayoutItem') {\n return deserializeGridItem(gridItem, elements, getPanelIdGenerator(dashboardSceneGraph.getNextPanelId(scene)));\n }\n return deserializeAutoGridItem(gridItem, elements, getPanelIdGenerator(dashboardSceneGraph.getNextPanelId(scene)));\n}\n\nexport function getAutoGridItemFromClipboard(scene: DashboardScene): AutoGridItem {\n const panel = getPanelFromClipboard(scene);\n if (panel instanceof AutoGridItem) {\n return panel;\n }\n // Convert to AutoGridItem\n return new AutoGridItem({ body: panel.state.body, key: panel.state.key, variableName: panel.state.variableName });\n}\n\nexport function getDashboardGridItemFromClipboard(scene: DashboardScene, gridCell: GridCell | null): DashboardGridItem {\n const panel = getPanelFromClipboard(scene);\n if (panel instanceof DashboardGridItem) {\n return panel;\n }\n // Convert to DashboardGridItem\n return new DashboardGridItem({\n ...gridCell,\n body: panel.state.body,\n key: panel.state.key,\n variableName: panel.state.variableName,\n });\n}\n\nfunction getPanelIdGenerator(start: number) {\n let id = start;\n return () => id++;\n}\n","const TAG_COLORS = [\n '#D32D20',\n '#1E72B8',\n '#B240A2',\n '#705DA0',\n '#466803',\n '#497A3C',\n '#3D71AA',\n '#B15415',\n '#890F02',\n '#6E6E6E',\n '#0A437C',\n '#6D1F62',\n '#584477',\n '#4C7A3F',\n '#2F4F4F',\n '#BF1B00',\n '#7662B1',\n '#8A2EB8',\n '#517A00',\n '#000000',\n '#3F6833',\n '#2F575E',\n '#99440A',\n '#AE561A',\n '#0E4AB4',\n '#58140C',\n '#052B51',\n '#511749',\n '#3F2B5B',\n];\n\nconst TAG_BORDER_COLORS = [\n '#FF7368',\n '#459EE7',\n '#E069CF',\n '#9683C6',\n '#6C8E29',\n '#76AC68',\n '#6AA4E2',\n '#E7823D',\n '#AF3528',\n '#9B9B9B',\n '#3069A2',\n '#934588',\n '#7E6A9D',\n '#88C477',\n '#557575',\n '#E54126',\n '#A694DD',\n '#B054DE',\n '#8FC426',\n '#262626',\n '#658E59',\n '#557D84',\n '#BF6A30',\n '#FF9B53',\n '#3470DA',\n '#7E3A32',\n '#2B5177',\n '#773D6F',\n '#655181',\n];\n\nexport function getTagColorIndexFromName(name = ''): number {\n const hash = djb2(name.toLowerCase());\n return Math.abs(hash % TAG_COLORS.length);\n}\n\n/**\n * Returns tag badge background and border colors based on hashed tag name.\n * @param name tag name\n */\nexport function getTagColorsFromName(name = ''): { color: string; borderColor: string } {\n const index = getTagColorIndexFromName(name);\n return getTagColor(index);\n}\n\nexport function getTagColor(index: number): { color: string; borderColor: string } {\n return { color: TAG_COLORS[index], borderColor: TAG_BORDER_COLORS[index] };\n}\n\nfunction djb2(str: string) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) + hash + str.charCodeAt(i); /* hash * 33 + c */\n }\n return hash;\n}\n\nexport default {\n getTagColorsFromName,\n};\n","export const GAUGE_DEFAULT_MINIMUM = 0;\nexport const GAUGE_DEFAULT_MAXIMUM = 100;\nexport const DEFAULT_SAML_NAME = 'SAML';\n","import { ComponentType } from 'react';\nimport { Observable } from 'rxjs';\n\nimport {\n DataQueryRequest,\n DataQueryResponse,\n DataSourceApi,\n DataSourceJsonData,\n DataSourceOptionsType,\n DataSourceQueryType,\n QueryEditorProps,\n} from './datasource';\nimport { DataQuery } from './query';\n\n/**\n * Enum with the different variable support types\n */\nexport enum VariableSupportType {\n Legacy = 'legacy',\n Standard = 'standard',\n Custom = 'custom',\n Datasource = 'datasource',\n}\n\n/**\n * Base class for VariableSupport classes\n */\nexport abstract class VariableSupportBase<\n DSType extends DataSourceApi<TQuery, TOptions>,\n TQuery extends DataQuery = DataSourceQueryType<DSType>,\n TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> {\n abstract getType(): VariableSupportType;\n\n /**\n * Define this method in the config if you want to pre-populate the editor with a default query.\n */\n getDefaultQuery?(): Partial<TQuery>;\n}\n\n/**\n * Extend this class in a data source plugin to use the standard query editor for Query variables\n */\nexport abstract class StandardVariableSupport<\n DSType extends DataSourceApi<TQuery, TOptions>,\n TQuery extends DataQuery = DataSourceQueryType<DSType>,\n TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> extends VariableSupportBase<DSType, TQuery, TOptions> {\n getType(): VariableSupportType {\n return VariableSupportType.Standard;\n }\n\n abstract toDataQuery(query: StandardVariableQuery): TQuery;\n query?(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse>;\n}\n\n/**\n * Extend this class in a data source plugin to use a customized query editor for Query variables\n */\nexport abstract class CustomVariableSupport<\n DSType extends DataSourceApi<TQuery, TOptions>,\n VariableQuery extends DataQuery = any,\n TQuery extends DataQuery = DataSourceQueryType<DSType>,\n TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> extends VariableSupportBase<DSType, TQuery, TOptions> {\n getType(): VariableSupportType {\n return VariableSupportType.Custom;\n }\n\n abstract editor: ComponentType<QueryEditorProps<DSType, TQuery, TOptions, VariableQuery>>;\n\n /**\n * This can return data in various formats as DataQueryResponse allows multiple types. In general though the\n * assumption is that there will be a string Field or value in an Array of objects that will be taken as the possible\n * variable values. You can also use this type directly MetricFindValue or just use text/value/expendable fields/keys\n * in the response.\n * @param request\n */\n abstract query(request: DataQueryRequest<VariableQuery>): Observable<DataQueryResponse>;\n}\n\n/**\n * Extend this class in a data source plugin to use the query editor in the data source plugin for Query variables\n */\nexport abstract class DataSourceVariableSupport<\n DSType extends DataSourceApi<TQuery, TOptions>,\n TQuery extends DataQuery = DataSourceQueryType<DSType>,\n TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> extends VariableSupportBase<DSType, TQuery, TOptions> {\n getType(): VariableSupportType {\n return VariableSupportType.Datasource;\n }\n}\n\n/**\n * Defines the standard DatQuery used by data source plugins that implement StandardVariableSupport\n */\nexport interface StandardVariableQuery extends DataQuery {\n query: string;\n}\n","import $ from 'jquery';\nimport _, { isFunction } from 'lodash'; // eslint-disable-line lodash/import-scope\nimport moment from 'moment'; // eslint-disable-line no-restricted-imports\n\nimport { AppEvents, dateMath, UrlQueryMap, UrlQueryValue } from '@grafana/data';\nimport { getBackendSrv, isFetchError, locationService } from '@grafana/runtime';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport impressionSrv from 'app/core/services/impression_srv';\nimport kbn from 'app/core/utils/kbn';\nimport { getDashboardScenePageStateManager } from 'app/features/dashboard-scene/pages/DashboardScenePageStateManager';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { DashboardDTO } from 'app/types/dashboard';\n\nimport { appEvents } from '../../../core/core';\nimport { ResponseTransformers } from '../api/ResponseTransformers';\nimport { getDashboardAPI } from '../api/dashboard_api';\nimport { DashboardVersionError, DashboardWithAccessInfo } from '../api/types';\n\nimport { getDashboardSrv } from './DashboardSrv';\nimport { getDashboardSnapshotSrv } from './SnapshotSrv';\n\ninterface DashboardLoaderSrvLike<T> {\n loadDashboard(\n type: UrlQueryValue,\n slug: string | undefined,\n uid: string | undefined,\n params?: UrlQueryMap\n ): Promise<T>;\n}\n\nabstract class DashboardLoaderSrvBase<T> implements DashboardLoaderSrvLike<T> {\n abstract loadDashboard(\n type: UrlQueryValue,\n slug: string | undefined,\n uid: string | undefined,\n params?: UrlQueryMap\n ): Promise<T>;\n\n abstract loadSnapshot(slug: string): Promise<T>;\n\n protected loadScriptedDashboard(file: string) {\n const url = 'public/dashboards/' + file.replace(/\\.(?!js)/, '/') + '?' + new Date().getTime();\n\n return getBackendSrv()\n .get(url, undefined, undefined, { validatePath: true })\n .then(this.executeScript.bind(this))\n .then(\n (result: any) => {\n return {\n meta: {\n fromScript: true,\n canDelete: false,\n canSave: false,\n canStar: false,\n },\n dashboard: result.data,\n };\n },\n (err) => {\n console.error('Script dashboard error ' + err);\n appEvents.emit(AppEvents.alertError, [\n 'Script Error',\n 'Please make sure it exists and returns a valid dashboard',\n ]);\n throw err;\n }\n );\n }\n\n private executeScript(result: any) {\n const services = {\n dashboardSrv: getDashboardSrv(),\n datasourceSrv: getDatasourceSrv(),\n };\n const scriptFunc = new Function(\n 'ARGS',\n 'kbn',\n 'dateMath',\n '_',\n 'moment',\n 'window',\n 'document',\n '$',\n 'jQuery',\n 'services',\n result\n );\n const scriptResult = scriptFunc(\n locationService.getSearchObject(),\n kbn,\n dateMath,\n _,\n moment,\n window,\n document,\n $,\n $,\n services\n );\n\n // Handle async dashboard scripts\n if (isFunction(scriptResult)) {\n return new Promise((resolve) => {\n scriptResult((dashboard: any) => {\n resolve({ data: dashboard });\n });\n });\n }\n\n return { data: scriptResult };\n }\n}\n\nexport class DashboardLoaderSrv extends DashboardLoaderSrvBase<DashboardDTO> {\n loadDashboard(\n type: UrlQueryValue,\n slug: string | undefined,\n uid: string | undefined,\n params?: UrlQueryMap\n ): Promise<DashboardDTO> {\n const stateManager = getDashboardScenePageStateManager('v1');\n let promise;\n\n if (type === 'script' && slug) {\n promise = this.loadScriptedDashboard(slug);\n } else if (type === 'snapshot' && slug) {\n promise = getDashboardSnapshotSrv().getSnapshot(slug);\n } else if (type === 'public' && uid) {\n promise = backendSrv.getPublicDashboardByUid(uid).then((result) => {\n return result;\n });\n } else if (uid) {\n if (!params) {\n const cachedDashboard = stateManager.getDashboardFromCache(uid);\n if (cachedDashboard) {\n return Promise.resolve(cachedDashboard);\n }\n }\n\n promise = getDashboardAPI('v1')\n .getDashboardDTO(uid, params)\n .then((result) => {\n return result;\n })\n .catch((e) => {\n if (isFetchError(e) && !(e instanceof DashboardVersionError)) {\n console.error('Failed to load dashboard', e);\n e.isHandled = true;\n if (e.status === 404) {\n appEvents.emit(AppEvents.alertError, ['Dashboard not found']);\n }\n }\n\n throw e;\n });\n } else {\n throw new Error('Dashboard uid or slug required');\n }\n\n promise.then((result: DashboardDTO) => {\n impressionSrv.addDashboardImpression(result.dashboard.uid);\n\n return result;\n });\n\n return promise;\n }\n\n loadSnapshot(slug: string): Promise<DashboardDTO> {\n const promise = getDashboardSnapshotSrv().getSnapshot(slug);\n\n promise.then((result: DashboardDTO) => {\n impressionSrv.addDashboardImpression(result.dashboard.uid);\n\n return result;\n });\n\n return promise;\n }\n}\n\nexport class DashboardLoaderSrvV2 extends DashboardLoaderSrvBase<DashboardWithAccessInfo<DashboardV2Spec>> {\n loadDashboard(\n type: UrlQueryValue,\n slug: string | undefined,\n uid: string | undefined,\n params?: UrlQueryMap\n ): Promise<DashboardWithAccessInfo<DashboardV2Spec>> {\n const stateManager = getDashboardScenePageStateManager('v2');\n let promise;\n\n if (type === 'script' && slug) {\n promise = this.loadScriptedDashboard(slug).then((r) => ResponseTransformers.ensureV2Response(r));\n } else if (type === 'public' && uid) {\n promise = backendSrv.getPublicDashboardByUid(uid).then((result) => {\n return ResponseTransformers.ensureV2Response(result);\n });\n } else if (uid) {\n if (!params) {\n const cachedDashboard = stateManager.getDashboardFromCache(uid);\n if (cachedDashboard) {\n return Promise.resolve(cachedDashboard);\n }\n }\n\n promise = getDashboardAPI('v2')\n .getDashboardDTO(uid, params)\n .then((result) => {\n return result;\n })\n .catch((e) => {\n if (isFetchError(e) && !(e instanceof DashboardVersionError)) {\n console.error('Failed to load dashboard', e);\n e.isHandled = true;\n if (e.status === 404) {\n appEvents.emit(AppEvents.alertError, ['Dashboard not found']);\n }\n }\n\n throw e;\n });\n } else {\n throw new Error('Dashboard uid or slug required');\n }\n\n promise.then((result: DashboardWithAccessInfo<DashboardV2Spec>) => {\n impressionSrv.addDashboardImpression(result.metadata.name);\n return result;\n });\n\n return promise;\n }\n\n loadSnapshot(slug: string): Promise<DashboardWithAccessInfo<DashboardV2Spec>> {\n const promise = getDashboardSnapshotSrv()\n .getSnapshot(slug)\n .then((r) => ResponseTransformers.ensureV2Response(r));\n\n promise.then((result: DashboardWithAccessInfo<DashboardV2Spec>) => {\n impressionSrv.addDashboardImpression(result.metadata.name);\n\n return result;\n });\n\n return promise;\n }\n}\n\nlet dashboardLoaderSrv = new DashboardLoaderSrv();\nexport { dashboardLoaderSrv };\n\n/** @internal\n * Used for tests only\n */\nexport const setDashboardLoaderSrv = (srv: DashboardLoaderSrv) => {\n if (process.env.NODE_ENV !== 'test') {\n throw new Error('dashboardLoaderSrv can be only overriden in test environment');\n }\n\n dashboardLoaderSrv = srv;\n};\n","import * as React from 'react';\n\nimport { Button } from '../Button/Button';\nimport { Input } from '../Input/Input';\nimport { Stack } from '../Layout/Stack/Stack';\n\nexport type Props = React.ComponentProps<typeof Input> & {\n /** TRUE if the secret was already configured. (It is needed as often the backend doesn't send back the actual secret, only the information that it was configured) */\n isConfigured: boolean;\n /** Called when the user clicks on the \"Reset\" button in order to clear the secret */\n onReset: () => void;\n};\n\nexport const CONFIGURED_TEXT = 'configured';\nexport const RESET_BUTTON_TEXT = 'Reset';\n\n/**\n * Used for secret/password input.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-secretinput--docs\n */\nexport const SecretInput = ({ isConfigured, onReset, ...props }: Props) => (\n <Stack>\n {!isConfigured && <Input {...props} type=\"password\" />}\n {isConfigured && (\n <>\n <Input {...props} type=\"text\" disabled={true} value={CONFIGURED_TEXT} />\n <Button onClick={onReset} variant=\"secondary\">\n {RESET_BUTTON_TEXT}\n </Button>\n </>\n )}\n </Stack>\n);\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as ui from '@grafana/schema';\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options {\n basemap: ui.MapLayerOptions;\n controls: ControlsOptions;\n layers: Array<ui.MapLayerOptions>;\n tooltip: TooltipOptions;\n view: MapViewConfig;\n}\n\nexport const defaultOptions: Partial<Options> = {\n layers: [],\n};\n\nexport interface MapViewConfig {\n allLayers?: boolean;\n id: string;\n lastOnly?: boolean;\n lat?: number;\n layer?: string;\n lon?: number;\n maxZoom?: number;\n minZoom?: number;\n noRepeat?: boolean;\n padding?: number;\n shared?: boolean;\n zoom?: number;\n}\n\nexport const defaultMapViewConfig: Partial<MapViewConfig> = {\n allLayers: true,\n id: 'zero',\n lat: 0,\n lon: 0,\n noRepeat: false,\n zoom: 1,\n};\n\nexport interface ControlsOptions {\n /**\n * let the mouse wheel zoom\n */\n mouseWheelZoom?: boolean;\n /**\n * Lower right\n */\n showAttribution?: boolean;\n /**\n * Show debug\n */\n showDebug?: boolean;\n /**\n * Show measure\n */\n showMeasure?: boolean;\n /**\n * Scale options\n */\n showScale?: boolean;\n /**\n * Zoom (upper left)\n */\n showZoom?: boolean;\n}\n\nexport interface TooltipOptions {\n mode: TooltipMode;\n}\n\nexport enum TooltipMode {\n Details = 'details',\n None = 'none',\n}\n\nexport enum MapCenterID {\n Coords = 'coords',\n Fit = 'fit',\n Zero = 'zero',\n}\n","import {\n AnnotationEvent,\n arrayToDataFrame,\n DataTopic,\n getDefaultTimeRange,\n PanelData,\n LoadingState,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { dataLayers } from '@grafana/scenes';\nimport { AnnotationQuery } from '@grafana/schema';\nimport { PublicAnnotationsDataSource } from 'app/features/query/state/DashboardQueryRunner/PublicAnnotationsDataSource';\n\n/**\n * This class is an extension to dataLayers.AnnotationsDataLayer to provide support for public dashboards.\n */\nexport class DashboardAnnotationsDataLayer extends dataLayers.AnnotationsDataLayer {\n protected async resolveDataSource(query: AnnotationQuery) {\n if (config.publicDashboardAccessToken) {\n return new PublicAnnotationsDataSource();\n }\n return super.resolveDataSource(query);\n }\n\n protected processEvents(\n query: AnnotationQuery,\n events: {\n state: LoadingState;\n events: AnnotationEvent[];\n }\n ) {\n if (config.publicDashboardAccessToken) {\n const stateUpdate: PanelData = {\n series: [],\n timeRange: getDefaultTimeRange(),\n state: events.state,\n };\n\n const df = arrayToDataFrame(events.events);\n df.meta = {\n ...df.meta,\n dataTopic: DataTopic.Annotations,\n };\n\n stateUpdate.annotations = [df];\n\n return stateUpdate;\n } else {\n return super.processEvents(query, events);\n }\n }\n}\n","import { AsyncState } from 'react-use/lib/useAsync';\n\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { Alert, Label, RadioButtonGroup, Stack, Switch } from '@grafana/ui';\nimport { DashboardJson } from 'app/features/manage-dashboards/types';\n\nimport { ExportableResource } from '../ShareExportTab';\n\nexport enum ExportMode {\n Classic = 'classic',\n V1Resource = 'v1-resource',\n V2Resource = 'v2-resource',\n}\n\ninterface Props {\n dashboardJson: AsyncState<{\n json: Dashboard | DashboardJson | DashboardV2Spec | ExportableResource | { error: unknown };\n hasLibraryPanels?: boolean;\n initialSaveModelVersion: 'v1' | 'v2';\n }>;\n isSharingExternally: boolean;\n exportMode: ExportMode;\n isViewingYAML: boolean;\n onExportModeChange: (mode: ExportMode) => void;\n onShareExternallyChange: () => void;\n onViewYAML: () => void;\n}\n\nconst selector = e2eSelectors.pages.ExportDashboardDrawer.ExportAsJson;\n\nexport function ResourceExport({\n dashboardJson,\n isSharingExternally,\n exportMode,\n isViewingYAML,\n onExportModeChange,\n onShareExternallyChange,\n onViewYAML,\n}: Props) {\n const hasLibraryPanels = dashboardJson.value?.hasLibraryPanels;\n const initialSaveModelVersion = dashboardJson.value?.initialSaveModelVersion;\n const isV2Dashboard =\n dashboardJson.value?.json && 'spec' in dashboardJson.value.json && 'elements' in dashboardJson.value.json.spec;\n const showV2LibPanelAlert = isV2Dashboard && isSharingExternally && hasLibraryPanels;\n\n const switchExportLabel =\n exportMode === ExportMode.V2Resource\n ? t('export.json.export-remove-ds-refs', 'Remove deployment details')\n : t('share-modal.export.share-externally-label', `Export for sharing externally`);\n const switchExportModeLabel = t('export.json.export-mode', 'Model');\n const switchExportFormatLabel = t('export.json.export-format', 'Format');\n\n return (\n <Stack gap={2} direction=\"column\">\n <Stack gap={1} direction=\"column\">\n {initialSaveModelVersion === 'v1' && (\n <Stack alignItems=\"center\">\n <Label>{switchExportModeLabel}</Label>\n <RadioButtonGroup\n options={[\n { label: t('dashboard-scene.resource-export.label.classic', 'Classic'), value: ExportMode.Classic },\n {\n label: t('dashboard-scene.resource-export.label.v1-resource', 'V1 Resource'),\n value: ExportMode.V1Resource,\n },\n {\n label: t('dashboard-scene.resource-export.label.v2-resource', 'V2 Resource'),\n value: ExportMode.V2Resource,\n },\n ]}\n value={exportMode}\n onChange={(value) => onExportModeChange(value)}\n />\n </Stack>\n )}\n {initialSaveModelVersion === 'v2' && (\n <Stack alignItems=\"center\">\n <Label>{switchExportModeLabel}</Label>\n <RadioButtonGroup\n options={[\n {\n label: t('dashboard-scene.resource-export.label.v2-resource', 'V2 Resource'),\n value: ExportMode.V2Resource,\n },\n {\n label: t('dashboard-scene.resource-export.label.v1-resource', 'V1 Resource'),\n value: ExportMode.V1Resource,\n },\n ]}\n value={exportMode}\n onChange={(value) => onExportModeChange(value)}\n />\n </Stack>\n )}\n {exportMode !== ExportMode.Classic && (\n <Stack gap={1} alignItems=\"center\">\n <Label>{switchExportFormatLabel}</Label>\n <RadioButtonGroup\n options={[\n { label: t('dashboard-scene.resource-export.label.json', 'JSON'), value: 'json' },\n { label: t('dashboard-scene.resource-export.label.yaml', 'YAML'), value: 'yaml' },\n ]}\n value={isViewingYAML ? 'yaml' : 'json'}\n onChange={onViewYAML}\n />\n </Stack>\n )}\n {(isV2Dashboard ||\n exportMode === ExportMode.Classic ||\n (initialSaveModelVersion === 'v2' && exportMode === ExportMode.V1Resource)) && (\n <Stack gap={1} alignItems=\"start\">\n <Label>{switchExportLabel}</Label>\n <Switch\n label={switchExportLabel}\n value={isSharingExternally}\n onChange={onShareExternallyChange}\n data-testid={selector.exportExternallyToggle}\n />\n </Stack>\n )}\n </Stack>\n\n {showV2LibPanelAlert && (\n <Alert\n title={t(\n 'dashboard-scene.save-dashboard-form.schema-v2-library-panels-export-title',\n 'Library panels will be converted to regular panels'\n )}\n severity=\"warning\"\n >\n <Trans i18nKey=\"dashboard-scene.save-dashboard-form.schema-v2-library-panels-export\">\n Due to limitations in the new dashboard schema (V2), library panels will be converted to regular panels with\n embedded content during external export.\n </Trans>\n </Alert>\n )}\n </Stack>\n );\n}\n","import saveAs from 'file-saver';\nimport yaml from 'js-yaml';\nimport { cloneDeep } from 'lodash';\nimport { useAsync } from 'react-use';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps, SceneObjectBase } from '@grafana/scenes';\nimport { Dashboard } from '@grafana/schema';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { Button, ClipboardButton, CodeEditor, Field, Modal, Stack, Switch } from '@grafana/ui';\nimport { ObjectMeta } from 'app/features/apiserver/types';\nimport { transformDashboardV2SpecToV1 } from 'app/features/dashboard/api/ResponseTransformers';\nimport { DashboardWithAccessInfo } from 'app/features/dashboard/api/types';\nimport { isDashboardV2Spec, isV1ClassicDashboard } from 'app/features/dashboard/api/utils';\nimport { K8S_V1_DASHBOARD_API_CONFIG } from 'app/features/dashboard/api/v1';\nimport { K8S_V2_DASHBOARD_API_CONFIG } from 'app/features/dashboard/api/v2';\nimport { shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { DashboardJson } from 'app/features/manage-dashboards/types';\nimport { DashboardDataDTO } from 'app/types/dashboard';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { makeExportableV1, makeExportableV2 } from '../scene/export/exporters';\nimport { transformSceneToSaveModel } from '../serialization/transformSceneToSaveModel';\nimport { transformSceneToSaveModelSchemaV2 } from '../serialization/transformSceneToSaveModelSchemaV2';\nimport { getVariablesCompatibility } from '../utils/getVariablesCompatibility';\nimport { DashboardInteractions } from '../utils/interactions';\nimport { getDashboardSceneFor, hasLibraryPanelsInV1Dashboard } from '../utils/utils';\n\nimport { ExportMode, ResourceExport } from './ExportButton/ResourceExport';\nimport { SceneShareTabState, ShareView } from './types';\n\nexport interface ExportableResource {\n apiVersion: string;\n kind: 'Dashboard';\n metadata: DashboardWithAccessInfo<DashboardV2Spec>['metadata'] | Partial<ObjectMeta>;\n spec: Dashboard | DashboardModel | DashboardV2Spec | DashboardJson | DashboardDataDTO | { error: unknown };\n // A placeholder for now because as code tooling expects it\n status: {};\n}\n\nexport interface ShareExportTabState extends SceneShareTabState {\n isSharingExternally?: boolean;\n isViewingJSON?: boolean;\n isViewingYAML?: boolean;\n exportMode?: ExportMode;\n}\n\nexport class ShareExportTab extends SceneObjectBase<ShareExportTabState> implements ShareView {\n public tabId = shareDashboardType.export;\n static Component = ShareExportTabRenderer;\n\n constructor(state: Omit<ShareExportTabState, 'panelRef'>) {\n super({\n ...state,\n isSharingExternally: false,\n isViewingJSON: false,\n exportMode: config.featureToggles.kubernetesDashboards ? ExportMode.Classic : undefined,\n });\n }\n\n public getTabLabel() {\n return t('share-modal.tab-title.export', 'Export');\n }\n\n public onShareExternallyChange = () => {\n this.setState({\n isSharingExternally: !this.state.isSharingExternally,\n });\n };\n\n public onExportModeChange = (exportMode: ExportMode) => {\n this.setState({\n exportMode,\n });\n\n if (exportMode === ExportMode.Classic) {\n this.setState({\n isViewingYAML: false,\n });\n }\n };\n\n public onViewJSON = () => {\n this.setState({\n isViewingJSON: !this.state.isViewingJSON,\n });\n };\n\n public onViewYAML = () => {\n this.setState({\n isViewingYAML: !this.state.isViewingYAML,\n });\n };\n\n public getClipboardText() {\n return;\n }\n\n public getExportableDashboardJson = async (): Promise<{\n json: Dashboard | DashboardJson | DashboardV2Spec | ExportableResource | { error: unknown };\n hasLibraryPanels?: boolean;\n initialSaveModelVersion: 'v1' | 'v2';\n }> => {\n const { isSharingExternally, exportMode } = this.state;\n\n const scene = getDashboardSceneFor(this);\n const exportableDashboard = await scene.serializer.makeExportableExternally(scene);\n const initialSaveModel = scene.getInitialSaveModel();\n const initialSaveModelVersion = initialSaveModel && isDashboardV2Spec(initialSaveModel) ? 'v2' : 'v1';\n const origDashboard = scene.serializer.getSaveModel(scene);\n const exportable = isSharingExternally ? exportableDashboard : origDashboard;\n const metadata = getMetadata(scene, Boolean(isSharingExternally));\n\n if (\n isDashboardV2Spec(origDashboard) &&\n 'elements' in exportable &&\n initialSaveModelVersion === 'v2' &&\n exportMode !== ExportMode.V1Resource\n ) {\n this.setState({\n exportMode: ExportMode.V2Resource,\n });\n\n // For automatic V2 path, also process library panels when sharing externally\n let finalSpec = exportable;\n if (isSharingExternally && isDashboardV2Spec(exportable)) {\n const specCopy = JSON.parse(JSON.stringify(exportable));\n const result = await makeExportableV2(specCopy, isSharingExternally);\n if ('error' in result) {\n return {\n json: { error: result.error },\n initialSaveModelVersion,\n hasLibraryPanels: Object.values(origDashboard.elements).some((element) => element.kind === 'LibraryPanel'),\n };\n }\n finalSpec = result;\n }\n\n return {\n json: {\n apiVersion: scene.serializer.apiVersion ?? '',\n kind: 'Dashboard',\n metadata,\n spec: finalSpec,\n status: {},\n },\n initialSaveModelVersion,\n hasLibraryPanels: Object.values(origDashboard.elements).some((element) => element.kind === 'LibraryPanel'),\n };\n }\n\n if (exportMode === ExportMode.V1Resource) {\n // Check if source is V2 and auto-transform to V1\n if (isDashboardV2Spec(origDashboard) && initialSaveModelVersion === 'v2') {\n try {\n const spec = transformSceneToSaveModelSchemaV2(scene);\n const metadata = getMetadata(scene, Boolean(isSharingExternally));\n const spec1 = transformDashboardV2SpecToV1(spec, {\n name: metadata.name ?? '',\n generation: metadata.generation ?? 0,\n resourceVersion: metadata.resourceVersion ?? '0',\n creationTimestamp: metadata.creationTimestamp ?? '',\n });\n\n let exportableV1: Dashboard | DashboardDataDTO | DashboardJson | { error: unknown };\n if (isSharingExternally) {\n const oldModel = new DashboardModel(spec1, undefined, {\n getVariablesFromState: () => {\n return getVariablesCompatibility(window.__grafanaSceneContext);\n },\n });\n exportableV1 = await makeExportableV1(oldModel);\n } else {\n exportableV1 = spec1;\n }\n return {\n json: {\n // Forcing V1 version here to match export mode selection\n apiVersion: `${K8S_V1_DASHBOARD_API_CONFIG.group}/${K8S_V1_DASHBOARD_API_CONFIG.version}`,\n kind: 'Dashboard',\n metadata,\n spec: exportableV1,\n status: {},\n },\n initialSaveModelVersion,\n hasLibraryPanels: hasLibraryPanelsInV1Dashboard(spec1),\n };\n } catch (err) {\n return {\n json: {\n error: `Failed to convert dashboard to v1. ${err}`,\n },\n initialSaveModelVersion,\n hasLibraryPanels: undefined,\n };\n }\n } else {\n // Source is already V1, export as-is\n const spec = transformSceneToSaveModel(scene);\n return {\n json: {\n // Forcing V1 version here to match export mode selection\n apiVersion: `${K8S_V1_DASHBOARD_API_CONFIG.group}/${K8S_V1_DASHBOARD_API_CONFIG.version}`,\n kind: 'Dashboard',\n metadata,\n spec,\n status: {},\n },\n initialSaveModelVersion,\n hasLibraryPanels: hasLibraryPanelsInV1Dashboard(spec),\n };\n }\n }\n\n if (exportMode === ExportMode.V2Resource) {\n const spec = transformSceneToSaveModelSchemaV2(scene);\n const specCopy = JSON.parse(JSON.stringify(spec));\n const statelessSpec = await makeExportableV2(specCopy, isSharingExternally);\n const exportableV2 = isSharingExternally ? statelessSpec : spec;\n // Check if dashboard contains library panels based on dashboard version\n let hasLibraryPanels = false;\n // Case: V1 dashboard loaded (with kubernetesDashboards enabled and dashboardNewLayouts disabled), and user explicitly selected V2Resource export mode\n if (initialSaveModelVersion === 'v1' && !isDashboardV2Spec(origDashboard)) {\n hasLibraryPanels = hasLibraryPanelsInV1Dashboard(origDashboard);\n } else if (isDashboardV2Spec(origDashboard)) {\n // Case: V2 dashboard (either originally V2 or transformed from V1) being exported as V2Resource\n hasLibraryPanels = Object.values(origDashboard.elements).some((element) => element.kind === 'LibraryPanel');\n }\n\n return {\n json: {\n // Forcing V2 version here because in this case we have v1 serializer\n apiVersion: `${K8S_V2_DASHBOARD_API_CONFIG.group}/${K8S_V2_DASHBOARD_API_CONFIG.version}`,\n kind: 'Dashboard',\n metadata,\n spec: exportableV2,\n status: {},\n },\n initialSaveModelVersion,\n hasLibraryPanels,\n };\n }\n\n // Classic mode\n // This handles a case when:\n // 1. dashboardNewLayouts feature toggle is enabled\n // 2. v1 dashboard is loaded\n // 3. dashboard hasn't been edited yet - if it was edited, user would be forced to save it in v2 version\n if (\n initialSaveModelVersion === 'v1' &&\n isDashboardV2Spec(origDashboard) &&\n initialSaveModel &&\n 'panels' in initialSaveModel\n ) {\n const oldModel = new DashboardModel(initialSaveModel, undefined, {\n getVariablesFromState: () => {\n return getVariablesCompatibility(window.__grafanaSceneContext);\n },\n });\n const exportableV1 = isSharingExternally ? await makeExportableV1(oldModel) : initialSaveModel;\n return {\n json: exportableV1,\n hasLibraryPanels: hasLibraryPanelsInV1Dashboard(initialSaveModel),\n initialSaveModelVersion,\n };\n }\n\n // legacy mode or classic mode when dashboardNewLayouts is disabled\n // At this point we know that dashboard should be V1 or could have produced an error\n return {\n json: exportable,\n hasLibraryPanels:\n 'error' in exportable || !isV1ClassicDashboard(origDashboard)\n ? false\n : hasLibraryPanelsInV1Dashboard(origDashboard),\n initialSaveModelVersion,\n };\n };\n\n public onSaveAsFile = async () => {\n const dashboard = await this.getExportableDashboardJson();\n const dashboardJsonPretty = JSON.stringify(dashboard.json, null, 2);\n const { isSharingExternally, isViewingYAML } = this.state;\n\n const blob = new Blob([isViewingYAML ? yaml.dump(dashboard.json) : dashboardJsonPretty], {\n type: 'application/json;charset=utf-8',\n });\n\n const time = new Date().getTime();\n let title = 'dashboard';\n if ('title' in dashboard.json && dashboard.json.title) {\n title = dashboard.json.title;\n }\n const extension = isViewingYAML ? 'yaml' : 'json';\n saveAs(blob, `${title}-${time}.${extension}`);\n\n DashboardInteractions.exportDownloadJsonClicked({\n externally: isSharingExternally,\n dashboard_schema_version: dashboard.initialSaveModelVersion,\n has_library_panels: Boolean(dashboard.hasLibraryPanels),\n format: isViewingYAML ? 'yaml' : 'json',\n action: 'download',\n });\n };\n\n public onClipboardCopy = async () => {\n const dashboard = await this.getExportableDashboardJson();\n const { isSharingExternally, isViewingYAML, exportMode } = this.state;\n\n DashboardInteractions.exportCopyJsonClicked({\n externally: isSharingExternally,\n dashboard_schema_version: dashboard.initialSaveModelVersion,\n has_library_panels: Boolean(dashboard.hasLibraryPanels),\n export_mode: exportMode || 'classic',\n format: isViewingYAML ? 'yaml' : 'json',\n action: 'copy',\n });\n };\n}\n\nfunction getMetadata(\n scene: DashboardScene,\n isSharingExternally: boolean\n): DashboardWithAccessInfo<DashboardV2Spec>['metadata'] | Partial<ObjectMeta> {\n let result: Partial<ObjectMeta> = {};\n\n if (scene.serializer.metadata) {\n if ('k8s' in scene.serializer.metadata) {\n result = scene.serializer.metadata.k8s ? cloneDeep(scene.serializer.metadata.k8s) : {};\n } else if ('annotations' in scene.serializer.metadata) {\n result = cloneDeep(scene.serializer.metadata);\n }\n }\n\n if ('managedFields' in result) {\n delete result['managedFields'];\n }\n\n if (isSharingExternally) {\n // Remove fields that are not needed for sharing externally\n if ('uid' in result) {\n delete result['uid'];\n }\n delete result['resourceVersion'];\n delete result['namespace'];\n\n // iterate over labels and delete all keys that start with grafana.app/\n for (const key in result['labels']) {\n if (key.startsWith('grafana.app/')) {\n // @ts-expect-error\n delete result['labels'][key];\n }\n }\n\n // iterate over annotations and delete all keys that start with grafana.app/\n for (const key in result['annotations']) {\n if (key.startsWith('grafana.app/')) {\n // @ts-expect-error\n delete result['annotations'][key];\n }\n }\n }\n\n return result;\n}\n\nfunction ShareExportTabRenderer({ model }: SceneComponentProps<ShareExportTab>) {\n const { isSharingExternally, isViewingJSON, modalRef, exportMode, isViewingYAML } = model.useState();\n\n const dashboardJson = useAsync(async () => {\n const json = await model.getExportableDashboardJson();\n return json;\n }, [isViewingJSON, isSharingExternally, exportMode]);\n\n const stringifiedDashboardJson = JSON.stringify(dashboardJson.value?.json, null, 2);\n const stringifiedDashboardYAML = yaml.dump(dashboardJson.value?.json, {\n skipInvalid: true,\n });\n const stringifiedDashboard = isViewingYAML ? stringifiedDashboardYAML : stringifiedDashboardJson;\n\n const exportExternallyTranslation = t('share-modal.export.share-externally-label', `Export for sharing externally`);\n\n return (\n <>\n {!isViewingJSON && (\n <>\n <p>\n <Trans i18nKey=\"share-modal.export.info-text\">Export this dashboard.</Trans>\n </p>\n {config.featureToggles.kubernetesDashboards ? (\n <ResourceExport\n dashboardJson={dashboardJson}\n isSharingExternally={isSharingExternally ?? false}\n exportMode={exportMode ?? ExportMode.Classic}\n isViewingYAML={isViewingYAML ?? false}\n onExportModeChange={model.onExportModeChange}\n onShareExternallyChange={model.onShareExternallyChange}\n onViewYAML={model.onViewYAML}\n />\n ) : (\n <Stack gap={2} direction=\"column\">\n <Field label={exportExternallyTranslation}>\n <Switch\n id=\"share-externally-toggle\"\n value={isSharingExternally}\n onChange={model.onShareExternallyChange}\n />\n </Field>\n </Stack>\n )}\n\n <Modal.ButtonRow>\n <Button\n variant=\"secondary\"\n onClick={() => {\n modalRef?.resolve().onDismiss();\n }}\n fill=\"outline\"\n >\n <Trans i18nKey=\"share-modal.export.cancel-button\">Cancel</Trans>\n </Button>\n {isViewingYAML ? (\n <Button variant=\"secondary\" icon=\"brackets-curly\" onClick={model.onViewJSON}>\n <Trans i18nKey=\"share-modal.export.view-button-yaml\">View YAML</Trans>\n </Button>\n ) : (\n <Button variant=\"secondary\" icon=\"brackets-curly\" onClick={model.onViewJSON}>\n <Trans i18nKey=\"share-modal.export.view-button\">View JSON</Trans>\n </Button>\n )}\n <Button variant=\"primary\" icon=\"save\" onClick={() => model.onSaveAsFile()}>\n <Trans i18nKey=\"share-modal.export.save-button\">Save to file</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n )}\n {isViewingJSON && (\n <>\n <AutoSizer disableHeight>\n {({ width }) => {\n if (dashboardJson.value) {\n return (\n <CodeEditor\n value={stringifiedDashboard}\n showLineNumbers={true}\n language={isViewingYAML ? 'yaml' : 'json'}\n showMiniMap={false}\n height=\"500px\"\n width={width}\n />\n );\n }\n\n if (dashboardJson.loading) {\n return (\n <div>\n {' '}\n <Trans i18nKey=\"share-modal.export.loading\">Loading...</Trans>\n </div>\n );\n }\n\n return null;\n }}\n </AutoSizer>\n\n <Modal.ButtonRow>\n <Button variant=\"secondary\" fill=\"outline\" onClick={model.onViewJSON} icon=\"arrow-left\">\n <Trans i18nKey=\"share-modal.export.back-button\">Back to export config</Trans>\n </Button>\n <ClipboardButton\n variant=\"secondary\"\n icon=\"copy\"\n disabled={dashboardJson.loading}\n getText={() => stringifiedDashboard ?? ''}\n onClipboardCopy={model.onClipboardCopy}\n >\n <Trans i18nKey=\"share-modal.view-json.copy-button\">Copy to Clipboard</Trans>\n </ClipboardButton>\n <Button variant=\"primary\" icon=\"save\" disabled={dashboardJson.loading} onClick={() => model.onSaveAsFile()}>\n <Trans i18nKey=\"share-modal.export.save-button\">Save to file</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n )}\n </>\n );\n}\n","import { css } from '@emotion/css';\nimport yaml from 'js-yaml';\nimport { useAsync } from 'react-use';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps } from '@grafana/scenes';\nimport { Button, ClipboardButton, CodeEditor, Label, Spinner, Stack, Switch, useStyles2 } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport { createSuccessNotification } from 'app/core/copy/appNotification';\nimport { dispatch } from 'app/store/store';\n\nimport { ShareExportTab } from '../ShareExportTab';\n\nimport { ExportMode, ResourceExport } from './ResourceExport';\n\nconst selector = e2eSelectors.pages.ExportDashboardDrawer.ExportAsJson;\n\nexport class ExportAsCode extends ShareExportTab {\n static Component = ExportAsCodeRenderer;\n\n public getTabLabel(): string {\n return t('export.json.title', 'Export dashboard');\n }\n}\n\nfunction ExportAsCodeRenderer({ model }: SceneComponentProps<ExportAsCode>) {\n const styles = useStyles2(getStyles);\n const { isSharingExternally, isViewingYAML, exportMode } = model.useState();\n\n const dashboardJson = useAsync(async () => {\n const json = await model.getExportableDashboardJson();\n\n return json;\n }, [isSharingExternally, exportMode]);\n\n const stringifiedDashboardJson = JSON.stringify(dashboardJson.value?.json, null, 2);\n const stringifiedDashboardYAML = yaml.dump(dashboardJson.value?.json, {\n skipInvalid: true,\n });\n const stringifiedDashboard = isViewingYAML ? stringifiedDashboardYAML : stringifiedDashboardJson;\n\n const onClickDownload = async () => {\n await model.onSaveAsFile();\n const message = t('export.json.download-successful_toast_message', 'Your JSON has been downloaded');\n dispatch(notifyApp(createSuccessNotification(message)));\n };\n\n const switchExportLabel = t('export.json.export-externally-label', 'Export the dashboard to use in another instance');\n\n return (\n <div data-testid={selector.container} className={styles.container}>\n <p>\n <Trans i18nKey=\"export.json.info-text\">\n Copy or download a file containing the definition of your dashboard\n </Trans>\n </p>\n\n {config.featureToggles.kubernetesDashboards ? (\n <ResourceExport\n dashboardJson={dashboardJson}\n isSharingExternally={isSharingExternally ?? false}\n exportMode={exportMode ?? ExportMode.Classic}\n isViewingYAML={isViewingYAML ?? false}\n onExportModeChange={model.onExportModeChange}\n onShareExternallyChange={model.onShareExternallyChange}\n onViewYAML={model.onViewYAML}\n />\n ) : (\n <Stack gap={1} alignItems=\"start\">\n <Switch\n label={switchExportLabel}\n data-testid={selector.exportExternallyToggle}\n id=\"export-externally-toggle\"\n value={Boolean(isSharingExternally)}\n onChange={model.onShareExternallyChange}\n />\n <Label>{switchExportLabel}</Label>\n </Stack>\n )}\n\n <div className={styles.codeEditorBox}>\n <AutoSizer data-testid={selector.codeEditor} disableWidth>\n {({ height }) => {\n if (stringifiedDashboard) {\n return (\n <CodeEditor\n value={stringifiedDashboard}\n language={isViewingYAML ? 'yaml' : 'json'}\n showLineNumbers={true}\n showMiniMap={false}\n height={height}\n width=\"100%\"\n readOnly={true}\n />\n );\n }\n\n return dashboardJson.loading && <Spinner />;\n }}\n </AutoSizer>\n </div>\n <div className={styles.buttonsContainer}>\n <Stack gap={1} flex={1} direction={{ xs: 'column', sm: 'row' }}>\n <Button\n data-testid={selector.saveToFileButton}\n variant=\"primary\"\n icon=\"download-alt\"\n onClick={onClickDownload}\n >\n <Trans i18nKey=\"export.json.download-button\">Download file</Trans>\n </Button>\n <ClipboardButton\n data-testid={selector.copyToClipboardButton}\n variant=\"secondary\"\n icon=\"copy\"\n disabled={dashboardJson.loading}\n getText={() => stringifiedDashboard ?? ''}\n onClipboardCopy={model.onClipboardCopy}\n >\n <Trans i18nKey=\"export.json.copy-button\">Copy to clipboard</Trans>\n </ClipboardButton>\n <Button\n data-testid={selector.cancelButton}\n variant=\"secondary\"\n onClick={model.useState().onDismiss}\n fill=\"outline\"\n >\n <Trans i18nKey=\"export.json.cancel-button\">Cancel</Trans>\n </Button>\n </Stack>\n </div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n height: '100%',\n }),\n codeEditorBox: css({\n margin: `${theme.spacing(2, 0)}`,\n height: '75%',\n }),\n buttonsContainer: css({\n paddingBottom: theme.spacing(2),\n }),\n };\n}\n","import { css } from '@emotion/css';\nimport { useMemo, useEffect } from 'react';\nimport { useMeasure } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Alert, LoadingBar, Text, useStyles2 } from '@grafana/ui';\n\ntype ErrorState = {\n message: string;\n title: string;\n} | null;\n\ninterface ImagePreviewProps {\n imageBlob: Blob | null;\n isLoading: boolean;\n error: ErrorState;\n title?: string;\n}\n\nexport function ImagePreview({ imageBlob, isLoading, error, title }: ImagePreviewProps) {\n const styles = useStyles2(getStyles);\n const [ref, { width: measuredWidth }] = useMeasure<HTMLDivElement>();\n\n // Memoize and clean up the object URL for the image\n const imageUrl = useMemo(() => {\n if (!imageBlob) {\n return undefined;\n }\n const url = URL.createObjectURL(imageBlob);\n return url;\n }, [imageBlob]);\n\n useEffect(() => {\n return () => {\n if (imageUrl) {\n URL.revokeObjectURL(imageUrl);\n }\n };\n }, [imageUrl]);\n\n return (\n <div\n className={styles.previewContainer}\n ref={ref}\n aria-label={t('share-modal.image.preview-region', 'Image preview')}\n role=\"region\"\n >\n {isLoading && (\n <div\n className={styles.loadingBarContainer}\n role=\"status\"\n aria-label={t('share-modal.image.generating', 'Generating image...')}\n >\n <LoadingBar width={measuredWidth} />\n {title && (\n <div className={styles.titleContainer}>\n <Text variant=\"body\">{title}</Text>\n </div>\n )}\n </div>\n )}\n\n {error && !isLoading && <ErrorAlert error={error} />}\n {!isLoading && imageUrl && (\n <img\n src={imageUrl}\n alt={t('share-modal.image.preview', 'Preview')}\n className={styles.image}\n aria-label={t('share-modal.image.preview-aria', 'Generated image preview')}\n />\n )}\n </div>\n );\n}\n\nfunction ErrorAlert({ error }: { error: ErrorState }) {\n if (!error) {\n return null;\n }\n\n // Only show message if it's different from the title to avoid repetition\n const showMessage = error.message && error.message !== error.title;\n\n return (\n <Alert severity=\"error\" title={error.title}>\n {showMessage && <div>{error.message}</div>}\n </Alert>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n previewContainer: css({\n position: 'relative',\n width: '100%',\n minHeight: '200px',\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n overflow: 'hidden',\n }),\n loadingBarContainer: css({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n }),\n titleContainer: css({\n padding: theme.spacing(1),\n }),\n image: css({\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: 'contain',\n }),\n});\n","import { lastValueFrom } from 'rxjs';\n\nimport { config, getBackendSrv } from '@grafana/runtime';\nimport { getDashboardUrl } from 'app/features/dashboard-scene/utils/getDashboardUrl';\n\nimport { contextSrv } from '../../../../core/services/context_srv';\nimport { DashboardScene } from '../../scene/DashboardScene';\n\n/**\n * Options for generating a dashboard image\n */\nexport interface ImageGenerationOptions {\n dashboard: DashboardScene;\n scale?: number;\n}\n\n/**\n * Result of image generation attempt\n */\nexport interface ImageGenerationResult {\n blob: Blob;\n error?: string;\n}\n\n/**\n * Generates a dashboard image using the renderer service\n * @param options The options for image generation\n * @returns A promise that resolves to the image generation result\n */\nexport async function generateDashboardImage({\n dashboard,\n scale = config.rendererDefaultImageScale || 2,\n}: ImageGenerationOptions): Promise<ImageGenerationResult> {\n try {\n // Check if renderer plugin is available\n if (!config.rendererAvailable) {\n return {\n blob: new Blob(),\n error: 'Image renderer plugin not installed',\n };\n }\n\n const imageUrl = getDashboardUrl({\n uid: dashboard.state.uid,\n currentQueryParams: window.location.search,\n render: true,\n absolute: true,\n updateQuery: {\n height: -1, // image renderer will scroll through the dashboard and set the appropriate height\n width: window.innerWidth || config.rendererDefaultImageWidth || 1000,\n scale,\n kiosk: true,\n hideNav: true,\n orgId: String(contextSrv.user.orgId),\n fullPageImage: true,\n },\n });\n\n const response = await lastValueFrom(\n getBackendSrv().fetch<Blob>({\n url: imageUrl,\n responseType: 'blob',\n })\n );\n\n if (!response.ok) {\n return {\n blob: new Blob(),\n error: `Failed to generate image: ${response.status} ${response.statusText}`,\n };\n }\n\n // Validate response data format\n if (!(response.data instanceof Blob)) {\n return {\n blob: new Blob(),\n error: 'Invalid response data format',\n };\n }\n\n return {\n blob: response.data,\n };\n } catch (error) {\n return {\n blob: new Blob(),\n error: error instanceof Error && error.message ? error.message : 'Failed to generate image',\n };\n }\n}\n","import { css } from '@emotion/css';\nimport { saveAs } from 'file-saver';\nimport { useEffect } from 'react';\nimport { useAsyncFn } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps, SceneObjectBase } from '@grafana/scenes';\nimport { Alert, Button, TextLink, useStyles2 } from '@grafana/ui';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { getDashboardSceneFor } from 'app/features/dashboard-scene/utils/utils';\n\nimport { ImagePreview } from '../components/ImagePreview';\nimport { SceneShareTabState, ShareView } from '../types';\n\nimport { generateDashboardImage } from './utils';\n\nexport class ExportAsImage extends SceneObjectBase<SceneShareTabState> implements ShareView {\n static Component = ExportAsImageRenderer;\n\n public getTabLabel() {\n return t('share-modal.image.title', 'Export as image');\n }\n}\n\nfunction ExportAsImageRenderer({ model }: SceneComponentProps<ExportAsImage>) {\n const { onDismiss } = model.useState();\n const dashboard = getDashboardSceneFor(model);\n const styles = useStyles2(getStyles);\n\n const [{ loading: isLoading, value: imageBlob, error }, onExport] = useAsyncFn(async () => {\n try {\n const result = await generateDashboardImage({\n dashboard,\n scale: config.rendererDefaultImageScale || 1,\n });\n\n if (result.error) {\n throw new Error(result.error);\n }\n\n DashboardInteractions.generateDashboardImageClicked({\n scale: config.rendererDefaultImageScale || 1,\n shareResource: 'dashboard',\n success: true,\n });\n\n return result.blob;\n } catch (error) {\n console.error('Error exporting image:', error);\n DashboardInteractions.generateDashboardImageClicked({\n scale: config.rendererDefaultImageScale || 1,\n shareResource: 'dashboard',\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate image',\n });\n throw error; // Re-throw to let useAsyncFn handle the error state\n }\n }, [dashboard]);\n\n // Clean up object URLs when component unmounts\n useEffect(() => {\n return () => {\n if (imageBlob) {\n URL.revokeObjectURL(URL.createObjectURL(imageBlob));\n }\n };\n }, [imageBlob]);\n\n const onDownload = () => {\n if (!imageBlob) {\n return;\n }\n\n const time = new Date().getTime();\n const name = dashboard.state.title;\n saveAs(imageBlob, `${name}-${time}.png`);\n\n DashboardInteractions.downloadDashboardImageClicked({\n fileName: `${name}-${time}.png`,\n shareResource: 'dashboard',\n });\n };\n\n if (!config.rendererAvailable) {\n return <RendererAlert />;\n }\n\n return (\n <main>\n <p className={styles.info}>\n <Trans i18nKey=\"share-modal.image.info-text\">Save this dashboard as an image</Trans>\n </p>\n\n <div\n className={styles.buttonRow}\n role=\"group\"\n aria-label={t('share-modal.image.actions', 'Image export actions')}\n >\n {!imageBlob ? (\n <Button\n variant=\"primary\"\n onClick={onExport}\n disabled={isLoading}\n icon=\"gf-layout-simple\"\n aria-describedby={isLoading ? 'generate-status' : undefined}\n >\n <Trans i18nKey=\"share-modal.image.generate-button\">Generate image</Trans>\n </Button>\n ) : (\n <Button variant=\"primary\" onClick={onDownload} icon=\"download-alt\">\n <Trans i18nKey=\"share-modal.image.download-button\">Download image</Trans>\n </Button>\n )}\n <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n <Trans i18nKey=\"share-modal.image.cancel-button\">Cancel</Trans>\n </Button>\n </div>\n\n {isLoading && (\n <div id=\"generate-status\" aria-live=\"polite\" className=\"sr-only\">\n <Trans i18nKey=\"share-modal.image.generating\">Generating image...</Trans>\n </div>\n )}\n\n <ImagePreview\n imageBlob={imageBlob || null}\n isLoading={isLoading}\n error={\n error\n ? {\n title: t('share-modal.image.error-title', 'Failed to generate image'),\n message: error instanceof Error ? error.message : 'Failed to generate image',\n }\n : null\n }\n title={dashboard.state.title}\n />\n </main>\n );\n}\n\nfunction RendererAlert() {\n if (config.rendererAvailable) {\n return null;\n }\n\n return (\n <Alert severity=\"info\" title={t('share-modal.link.render-alert', 'Image renderer plugin not installed')}>\n <div>{t('share-modal.link.render-alert', 'Image renderer plugin not installed')}</div>\n <div>\n <Trans i18nKey=\"share-modal.link.render-instructions\">\n To render an image, you must install the{' '}\n <TextLink href=\"https://grafana.com/grafana/plugins/grafana-image-renderer\" external>\n Grafana image renderer plugin\n </TextLink>\n . Please contact your Grafana administrator to install the plugin.\n </Trans>\n </div>\n </Alert>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n info: css({\n marginBottom: theme.spacing(2),\n }),\n buttonRow: css({\n display: 'flex',\n gap: theme.spacing(2),\n marginBottom: theme.spacing(2),\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { IconButton, useStyles2, Spinner, Stack, Text } from '@grafana/ui';\nimport { ConfirmContent, ConfirmContentProps } from '@grafana/ui/internal';\n\nexport function ShareDrawerConfirmAction({\n onConfirm,\n onDismiss,\n description,\n confirmButtonLabel,\n title,\n isActionLoading,\n}: { title: string; isActionLoading: boolean } & Pick<\n ConfirmContentProps,\n 'description' | 'onConfirm' | 'onDismiss' | 'confirmButtonLabel'\n>) {\n const styles = useStyles2(getStyles);\n\n const ConfirmBody = () => (\n <div className={styles.bodyContainer}>\n <Stack justifyContent=\"space-between\">\n <Stack gap={1} alignItems=\"center\">\n <IconButton\n size=\"xl\"\n name=\"angle-left\"\n aria-label={t('share-drawer.confirm-action.back-arrow-button', 'Back button')}\n onClick={onDismiss}\n />\n <Text variant=\"h4\">{title}</Text>\n </Stack>\n {isActionLoading && <Spinner />}\n </Stack>\n </div>\n );\n\n return (\n <ConfirmContent\n body={<ConfirmBody />}\n description={description}\n confirmButtonLabel={confirmButtonLabel}\n confirmButtonVariant=\"destructive\"\n dismissButtonLabel={t('share-drawer.confirm-action.cancel-button', 'Cancel')}\n dismissButtonVariant=\"secondary\"\n justifyButtons=\"flex-start\"\n onConfirm={onConfirm}\n onDismiss={onDismiss}\n />\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n bodyContainer: css({\n marginBottom: theme.spacing(2),\n }),\n});\n","import { createContext, useContext } from 'react';\n\nimport { DashboardScene } from '../../scene/DashboardScene';\n\ninterface Context {\n dashboard: DashboardScene;\n onDismiss: () => void;\n}\n\nexport const ShareDrawerContext = createContext<Context | undefined>(undefined);\n\nconst useShareDrawerContext = () => {\n const context = useContext(ShareDrawerContext);\n\n if (context === undefined) {\n throw new Error('useShareDrawerContext must be used within a DrawerContext');\n }\n\n return context;\n};\n\nexport { useShareDrawerContext };\n","import { css, cx } from '@emotion/css';\nimport { Controller, useForm } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { sceneGraph } from '@grafana/scenes';\nimport { FieldSet, Icon, Label, Spinner, Stack, Switch, Text, TimeRangeLabel, Tooltip, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { publicDashboardApi, useUpdatePublicDashboardMutation } from 'app/features/dashboard/api/publicDashboardApi';\nimport { ConfigPublicDashboardForm } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/ConfigPublicDashboard';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { useShareDrawerContext } from '../../ShareDrawer/ShareDrawerContext';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally.Configuration;\n\ntype FormInput = Omit<ConfigPublicDashboardForm, 'isPaused'>;\n\nexport default function ShareConfiguration() {\n const styles = useStyles2(getStyles);\n const { dashboard } = useShareDrawerContext();\n const [update, { isLoading }] = useUpdatePublicDashboardMutation();\n\n const { data: publicDashboard } = publicDashboardApi.endpoints?.getPublicDashboard.useQueryState(\n dashboard.state.uid!\n );\n\n const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite);\n const disableForm = isLoading || !hasWritePermissions;\n const timeRangeState = sceneGraph.getTimeRange(dashboard);\n const timeRange = timeRangeState.useState();\n\n const { handleSubmit, setValue, control } = useForm<FormInput>({\n defaultValues: {\n isAnnotationsEnabled: publicDashboard?.annotationsEnabled,\n isTimeSelectionEnabled: publicDashboard?.timeSelectionEnabled,\n },\n });\n\n const onChange = async (name: keyof FormInput, value: boolean) => {\n setValue(name, value);\n await handleSubmit((data) => onUpdate({ ...data, [name]: value }))();\n };\n\n const onUpdate = (data: FormInput) => {\n const { isAnnotationsEnabled, isTimeSelectionEnabled } = data;\n\n update({\n dashboard: dashboard,\n payload: {\n ...publicDashboard!,\n annotationsEnabled: isAnnotationsEnabled,\n timeSelectionEnabled: isTimeSelectionEnabled,\n },\n });\n };\n\n return (\n <Stack direction=\"column\" gap={2}>\n <Text element=\"p\">\n <Trans i18nKey=\"public-dashboard.configuration.settings-label\">Settings</Trans>\n </Text>\n <Stack justifyContent=\"space-between\">\n <form onSubmit={handleSubmit(onUpdate)}>\n <FieldSet disabled={disableForm}>\n <Stack direction=\"column\" gap={2}>\n <Stack gap={1}>\n <Controller\n render={({ field: { ref, ...field } }) => (\n <Switch\n {...field}\n data-testid={selectors.enableTimeRangeSwitch}\n onChange={(e) => {\n DashboardInteractions.publicDashboardTimeSelectionChanged({\n enabled: e.currentTarget.checked,\n });\n onChange('isTimeSelectionEnabled', e.currentTarget.checked);\n }}\n label={t('public-dashboard.configuration.enable-time-range-label', 'Enable time range')}\n />\n )}\n control={control}\n name=\"isTimeSelectionEnabled\"\n />\n <Label\n description={t(\n 'public-dashboard.configuration.enable-time-range-description',\n 'Allow people to change time range'\n )}\n >\n <Trans i18nKey=\"public-dashboard.configuration.enable-time-range-label\">Enable time range</Trans>\n </Label>\n </Stack>\n <Stack gap={1}>\n <Controller\n render={({ field: { ref, ...field } }) => (\n <Switch\n {...field}\n data-testid={selectors.enableAnnotationsSwitch}\n onChange={(e) => {\n DashboardInteractions.publicDashboardAnnotationsSelectionChanged({\n enabled: e.currentTarget.checked,\n });\n onChange('isAnnotationsEnabled', e.currentTarget.checked);\n }}\n label={t('public-dashboard.configuration.display-annotations-label', 'Display annotations')}\n />\n )}\n control={control}\n name=\"isAnnotationsEnabled\"\n />\n <Label\n style={{ flex: 1 }}\n description={t(\n 'public-dashboard.configuration.display-annotations-description',\n 'Present annotations on this dashboard'\n )}\n >\n <Trans i18nKey=\"public-dashboard.configuration.display-annotations-label\">Display annotations</Trans>\n </Label>\n </Stack>\n <Stack gap={1} alignItems=\"flex-start\">\n <div className={styles.timeRange}>\n <Trans i18nKey=\"public-dashboard.configuration.time-range-label\">Time range</Trans>\n </div>\n <div className={cx(styles.timeRange, styles.timeRangeValue)}>\n <TimeRangeLabel value={timeRange.value} />\n </div>\n <Tooltip\n placement=\"right\"\n content={t(\n 'public-dashboard.configuration.time-range-tooltip',\n 'The shared dashboard uses the default time range settings of the dashboard'\n )}\n >\n <Icon name=\"info-circle\" size=\"md\" />\n </Tooltip>\n </Stack>\n </Stack>\n </FieldSet>\n </form>\n {isLoading && <Spinner />}\n </Stack>\n </Stack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n timeRange: css({\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n }),\n timeRangeValue: css({\n color: theme.colors.text.secondary,\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Dropdown, Field, Icon, IconButton, Menu, Spinner, Stack, Text, useStyles2 } from '@grafana/ui';\nimport {\n useReshareAccessToRecipientMutation,\n useDeleteRecipientMutation,\n publicDashboardApi,\n} from 'app/features/dashboard/api/publicDashboardApi';\nimport { PublicDashboard } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\n\nconst selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard.EmailSharingConfiguration;\n\nconst RecipientMenu = ({ onDelete, onReshare }: { onDelete: () => void; onReshare: () => void }) => {\n return (\n <Menu>\n <Menu.Item label={t('public-dashboard.email-sharing.resend-invite-label', 'Resend invite')} onClick={onReshare} />\n <Menu.Item\n label={t('public-dashboard.email-sharing.revoke-access-label', 'Revoke access')}\n destructive\n onClick={onDelete}\n />\n </Menu>\n );\n};\n\nconst EmailList = ({\n recipients,\n dashboardUid,\n publicDashboard,\n}: {\n recipients: PublicDashboard['recipients'];\n dashboardUid: string;\n publicDashboard: PublicDashboard;\n}) => {\n const styles = useStyles2(getStyles);\n\n const [deleteEmail, { isLoading: isDeleteLoading }] = useDeleteRecipientMutation();\n const [reshareAccess, { isLoading: isReshareLoading }] = useReshareAccessToRecipientMutation();\n\n const isLoading = isDeleteLoading || isReshareLoading;\n\n const onDeleteEmail = (recipientUid: string, recipientEmail: string) => {\n DashboardInteractions.revokePublicDashboardEmailClicked();\n deleteEmail({ recipientUid, recipientEmail, dashboardUid: dashboardUid, uid: publicDashboard.uid });\n };\n\n const onReshare = (recipientUid: string) => {\n DashboardInteractions.resendPublicDashboardEmailClicked();\n reshareAccess({ recipientUid, uid: publicDashboard.uid });\n };\n\n return (\n <table data-testid={selectors.EmailSharingList} className={styles.table}>\n <tbody>\n {recipients!.map((recipient, idx) => (\n <tr key={recipient.uid} className={styles.listItem}>\n <td className={styles.user}>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <div className={styles.icon}>\n <Icon name=\"user\" />\n </div>\n <Text>{recipient.recipient}</Text>\n </Stack>\n </td>\n <td>{isLoading && <Spinner />}</td>\n <td>\n <Dropdown\n overlay={\n <RecipientMenu\n onDelete={() => onDeleteEmail(recipient.uid, recipient.recipient)}\n onReshare={() => onReshare(recipient.uid)}\n />\n }\n >\n <IconButton\n name=\"ellipsis-v\"\n aria-label={t('dashboard-scene.email-list.aria-label-emailmenu', 'Toggle email menu')}\n variant=\"secondary\"\n size=\"lg\"\n />\n </Dropdown>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nexport const EmailListConfiguration = ({ dashboard }: { dashboard: DashboardScene }) => {\n const styles = useStyles2(getStyles);\n const { data: publicDashboard } = publicDashboardApi.endpoints?.getPublicDashboard.useQueryState(\n dashboard.state.uid!\n );\n\n return (\n <Field\n label={t('public-dashboard.email-sharing.recipient-list-title', 'People with access')}\n description={t(\n 'public-dashboard.email-sharing.recipient-list-description',\n \"Only people you've directly invited can access this dashboard\"\n )}\n className={styles.listField}\n >\n {!!publicDashboard?.recipients?.length ? (\n <div className={styles.listContainer}>\n <EmailList\n recipients={publicDashboard.recipients}\n dashboardUid={dashboard.state.uid!}\n publicDashboard={publicDashboard}\n />\n </div>\n ) : (\n <></>\n )}\n </Field>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n listField: css({\n marginBottom: 0,\n }),\n listContainer: css({\n maxHeight: '140px',\n overflowY: 'auto',\n }),\n table: css({\n width: '100%',\n }),\n listItem: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n padding: theme.spacing(0.75, 1),\n color: theme.colors.text.secondary,\n }),\n user: css({\n flex: 1,\n }),\n icon: css({\n border: `${theme.spacing(0.25)} solid ${theme.colors.text.secondary}`,\n padding: theme.spacing(0.125, 0.5),\n borderRadius: theme.shape.radius.circle,\n color: theme.colors.text.secondary,\n }),\n});\n","import { useForm } from 'react-hook-form';\n\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Divider, Field, FieldSet, Icon, Input, Stack, Tooltip } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { publicDashboardApi, useAddRecipientMutation } from 'app/features/dashboard/api/publicDashboardApi';\nimport { validEmailRegex } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { useShareDrawerContext } from '../../../../ShareDrawer/ShareDrawerContext';\nimport ShareConfiguration from '../../ShareConfiguration';\n\nimport { EmailListConfiguration } from './EmailListConfiguration';\n\nconst selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard.EmailSharingConfiguration;\n\ntype EmailSharingForm = { email: string };\n\nexport const ConfigEmailSharing = () => {\n const { dashboard } = useShareDrawerContext();\n\n const { data: publicDashboard, isError } = publicDashboardApi.endpoints?.getPublicDashboard.useQueryState(\n dashboard.state.uid!\n );\n const [addEmail, { isLoading: isAddEmailLoading }] = useAddRecipientMutation();\n\n const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite);\n\n const {\n register,\n handleSubmit,\n formState: { errors, isValid },\n reset,\n } = useForm<EmailSharingForm>({\n defaultValues: {\n email: '',\n },\n mode: 'onSubmit',\n });\n\n const onSubmit = async (data: EmailSharingForm) => {\n DashboardInteractions.publicDashboardEmailInviteClicked();\n await addEmail({ recipient: data.email, uid: publicDashboard!.uid, dashboardUid: dashboard.state.uid! }).unwrap();\n reset({ email: '' });\n };\n\n return (\n <div>\n <form onSubmit={handleSubmit(onSubmit)}>\n <FieldSet disabled={!hasWritePermissions || isError}>\n <Field\n label={\n <Stack gap={1} alignItems=\"center\">\n <Trans i18nKey=\"public-dashboard.email-sharing.recipient-invitation-button\">Invite</Trans>\n <Tooltip\n placement=\"right\"\n content={t(\n 'public-dashboard.email-sharing.recipient-invitation-tooltip',\n 'This dashboard contains sensitive data. By using this feature you will be sharing with external people.'\n )}\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n }\n description={t(\n 'public-dashboard.email-sharing.recipient-invitation-description',\n 'Invite someone by email'\n )}\n error={errors.email?.message}\n invalid={!!errors.email?.message}\n >\n <Stack direction=\"row\">\n <Input\n placeholder={t('public-dashboard.email-sharing.recipient-email-placeholder', 'Email')}\n autoCapitalize=\"none\"\n loading={isAddEmailLoading}\n {...register('email', {\n required: t('public-dashboard.email-sharing.recipient-required-email-text', 'Email is required'),\n pattern: {\n value: validEmailRegex,\n message: t('public-dashboard.email-sharing.recipient-invalid-email-text', 'Invalid email'),\n },\n })}\n data-testid={selectors.EmailSharingInput}\n />\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={isAddEmailLoading || !isValid}\n data-testid={selectors.EmailSharingInviteButton}\n >\n <Trans i18nKey=\"public-dashboard.email-sharing.recipient-invitation-button\">Invite</Trans>\n </Button>\n </Stack>\n </Field>\n </FieldSet>\n </form>\n <EmailListConfiguration dashboard={dashboard} />\n <Divider />\n <ShareConfiguration />\n </div>\n );\n};\n","import { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { Alert, Button, Stack } from '@grafana/ui';\n\nconst EMAIL_SHARING_URL =\n 'https://grafana.com/docs/grafana/next/dashboards/share-dashboards-panels/shared-dashboards/#share-externally-with-specific-people';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally;\n\nexport function EmailSharingPricingAlert() {\n return (\n <Alert title=\"\" severity=\"info\" bottomSpacing={0} data-testid={selectors.emailSharingAlert}>\n <Stack justifyContent=\"space-between\" gap={2} alignItems=\"center\">\n <Trans i18nKey=\"public-dashboard.email-sharing.alert-text\">\n Sharing dashboards by email is billed per user for the duration of the 30-day token, regardless of how many\n dashboards are shared. Billing stops after 30 days unless you renew the token.\n </Trans>\n <Button variant=\"secondary\" onClick={() => window.open(EMAIL_SHARING_URL, '_blank')} type=\"button\">\n <Trans i18nKey=\"public-dashboard.email-sharing.learn-more-button\">Learn more</Trans>\n </Button>\n </Stack>\n </Alert>\n );\n}\n","import { css } from '@emotion/css';\nimport { useForm } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Checkbox, FieldSet, Spinner, Stack, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { useCreatePublicDashboardMutation } from 'app/features/dashboard/api/publicDashboardApi';\nimport { PublicDashboardShareType } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { EmailSharingPricingAlert } from '../../../../../dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/EmailSharingPricingAlert';\nimport { useShareDrawerContext } from '../../../ShareDrawer/ShareDrawerContext';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally.Creation;\n\nexport const CreateEmailSharing = ({ hasError }: { hasError: boolean }) => {\n const { dashboard, onDismiss } = useShareDrawerContext();\n const styles = useStyles2(getStyles);\n\n const [createPublicDashboard, { isLoading, isError }] = useCreatePublicDashboardMutation();\n\n const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite);\n const disableInputs = !hasWritePermissions || isLoading || isError || hasError;\n\n const {\n handleSubmit,\n register,\n formState: { isValid },\n } = useForm<{ billAcknowledgment: boolean }>({ mode: 'onChange' });\n\n const onCreate = () => {\n DashboardInteractions.generatePublicDashboardUrlClicked({ share: PublicDashboardShareType.EMAIL });\n createPublicDashboard({ dashboard, payload: { share: PublicDashboardShareType.EMAIL, isEnabled: true } });\n };\n\n return (\n <>\n {hasWritePermissions && <EmailSharingPricingAlert />}\n <form onSubmit={handleSubmit(onCreate)}>\n <FieldSet disabled={disableInputs}>\n <div className={styles.checkbox}>\n <Checkbox\n {...register('billAcknowledgment', { required: true })}\n label={t('public-dashboard.email-sharing.bill-ack', 'I understand that adding users requires payment.*')}\n />\n </div>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Button type=\"submit\" disabled={!isValid} data-testid={selectors.EmailShare.createButton}>\n <Trans i18nKey=\"public-dashboard.email-sharing.accept-button\">Accept</Trans>\n </Button>\n <Button variant=\"secondary\" onClick={onDismiss} data-testid={selectors.EmailShare.cancelButton}>\n <Trans i18nKey=\"public-dashboard.email-sharing.cancel-button\">Cancel</Trans>\n </Button>\n {isLoading && <Spinner />}\n </Stack>\n </FieldSet>\n </form>\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n checkbox: css({\n marginBottom: theme.spacing(2),\n }),\n});\n","import { publicDashboardApi } from 'app/features/dashboard/api/publicDashboardApi';\n\nimport { useShareDrawerContext } from '../../../ShareDrawer/ShareDrawerContext';\n\nimport { ConfigEmailSharing } from './ConfigEmailSharing/ConfigEmailSharing';\nimport { CreateEmailSharing } from './CreateEmailSharing';\n\nexport const EmailSharing = () => {\n const { dashboard } = useShareDrawerContext();\n const { data: publicDashboard, isError } = publicDashboardApi.endpoints?.getPublicDashboard.useQueryState(\n dashboard.state.uid!\n );\n\n return <>{!publicDashboard ? <CreateEmailSharing hasError={isError} /> : <ConfigEmailSharing />}</>;\n};\n","import { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { Alert, Button, Stack } from '@grafana/ui';\n\nconst PUBLIC_DASHBOARD_URL =\n 'https://grafana.com/docs/grafana/next/dashboards/share-dashboards-panels/shared-dashboards';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally;\n\nexport const PublicDashboardAlert = () => (\n <Alert title=\"\" severity=\"info\" bottomSpacing={0} data-testid={selectors.publicAlert}>\n <Stack justifyContent=\"space-between\" gap={2} alignItems=\"center\">\n <Trans i18nKey=\"public-dashboard.public-sharing.alert-text\">\n Sharing this dashboard externally makes it entirely accessible to anyone with the link.\n </Trans>\n <Button variant=\"secondary\" onClick={() => window.open(PUBLIC_DASHBOARD_URL, '_blank')} type=\"button\">\n <Trans i18nKey=\"public-dashboard.public-sharing.learn-more-button\">Learn more</Trans>\n </Button>\n </Stack>\n </Alert>\n);\n","import { css } from '@emotion/css';\nimport { useForm } from 'react-hook-form';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Checkbox, FieldSet, Spinner, Stack, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { useCreatePublicDashboardMutation } from 'app/features/dashboard/api/publicDashboardApi';\nimport { PublicDashboardShareType } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { PublicDashboardAlert } from '../../../../../dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/PublicDashboardAlert';\nimport { useShareDrawerContext } from '../../../ShareDrawer/ShareDrawerContext';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally.Creation;\n\nexport default function CreatePublicSharing({ hasError }: { hasError: boolean }) {\n const { dashboard, onDismiss } = useShareDrawerContext();\n const styles = useStyles2(getStyles);\n\n const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite);\n\n const {\n handleSubmit,\n register,\n formState: { isValid },\n } = useForm<{ publicAcknowledgment: boolean }>({ mode: 'onChange' });\n\n const [createPublicDashboard, { isLoading, isError }] = useCreatePublicDashboardMutation();\n const onCreate = () => {\n DashboardInteractions.generatePublicDashboardUrlClicked({ share: PublicDashboardShareType.PUBLIC });\n createPublicDashboard({ dashboard, payload: { share: PublicDashboardShareType.PUBLIC, isEnabled: true } });\n };\n\n const disableInputs = !hasWritePermissions || isLoading || isError || hasError;\n\n return (\n <>\n {hasWritePermissions && <PublicDashboardAlert />}\n <form onSubmit={handleSubmit(onCreate)}>\n <FieldSet disabled={disableInputs}>\n <div className={styles.checkbox}>\n <Checkbox\n {...register('publicAcknowledgment', { required: true })}\n label={t(\n 'public-dashboard.public-sharing.public-ack',\n 'I understand that this entire dashboard will be public.*'\n )}\n data-testid={selectors.willBePublicCheckbox}\n />\n </div>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Button type=\"submit\" disabled={!isValid} data-testid={selectors.PublicShare.createButton}>\n <Trans i18nKey=\"public-dashboard.public-sharing.accept-button\">Accept</Trans>\n </Button>\n <Button variant=\"secondary\" onClick={onDismiss} data-testid={selectors.PublicShare.cancelButton}>\n <Trans i18nKey=\"public-dashboard.public-sharing.cancel-button\">Cancel</Trans>\n </Button>\n {isLoading && <Spinner />}\n </Stack>\n </FieldSet>\n </form>\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n checkbox: css({\n marginBottom: theme.spacing(2),\n }),\n});\n","import { publicDashboardApi } from 'app/features/dashboard/api/publicDashboardApi';\n\nimport { useShareDrawerContext } from '../../../ShareDrawer/ShareDrawerContext';\nimport ShareConfiguration from '../ShareConfiguration';\n\nimport CreatePublicSharing from './CreatePublicSharing';\n\nexport function PublicSharing() {\n const { dashboard } = useShareDrawerContext();\n const { data: publicDashboard, isError } = publicDashboardApi.endpoints?.getPublicDashboard.useQueryState(\n dashboard.state.uid!\n );\n\n return <>{!publicDashboard ? <CreatePublicSharing hasError={isError} /> : <ShareConfiguration />}</>;\n}\n","import { DataSourceWithBackend } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport { supportedDatasources } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SupportedPubdashDatasources';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\n\nimport { DashboardScene } from '../../scene/DashboardScene';\nimport { getQueryRunnerFor } from '../../utils/utils';\n\nexport const getUnsupportedDashboardDatasources = async (types: string[]): Promise<string[]> => {\n let unsupportedDS = new Set<string>();\n\n for (const type of types) {\n if (!supportedDatasources.has(type)) {\n unsupportedDS.add(type);\n } else {\n const ds = await getDatasourceSrv().get(type);\n if (!(ds instanceof DataSourceWithBackend)) {\n unsupportedDS.add(type);\n }\n }\n }\n\n return Array.from(unsupportedDS);\n};\n\nexport function getPanelDatasourceTypes(scene: DashboardScene): string[] {\n const types = new Set<string>();\n\n const panels = scene.state.body.getVizPanels();\n\n for (const child of panels) {\n const ts = panelDatasourceTypes(child);\n for (const t of ts) {\n types.add(t);\n }\n }\n\n return Array.from(types).sort();\n}\n\nfunction panelDatasourceTypes(vizPanel: VizPanel) {\n const types = new Set<string>();\n\n const queryRunner = getQueryRunnerFor(vizPanel);\n if (queryRunner) {\n for (const q of queryRunner.state.queries) {\n types.add(q.datasource?.type ?? '');\n }\n }\n\n return Array.from(types);\n}\n","import { useAsync } from 'react-use';\n\nimport { DashboardScene } from '../../scene/DashboardScene';\n\nimport { getPanelDatasourceTypes, getUnsupportedDashboardDatasources } from './utils';\n\nexport function useUnsupportedDatasources(dashboard: DashboardScene) {\n const { value: unsupportedDataSources } = useAsync(async () => {\n const types = getPanelDatasourceTypes(dashboard);\n return getUnsupportedDashboardDatasources(types);\n }, []);\n\n return unsupportedDataSources;\n}\n","import { contextSrv } from 'app/core/core';\nimport { EmailSharingPricingAlert } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/EmailSharingPricingAlert';\nimport { UnsupportedDataSourcesAlert } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/UnsupportedDataSourcesAlert';\nimport { UnsupportedTemplateVariablesAlert } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/UnsupportedTemplateVariablesAlert';\nimport {\n isEmailSharingEnabled,\n PublicDashboard,\n PublicDashboardShareType,\n} from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { NoUpsertPermissionsAlert } from '../../../../dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/NoUpsertPermissionsAlert';\nimport { PublicDashboardAlert } from '../../../../dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/PublicDashboardAlert';\nimport { useShareDrawerContext } from '../../ShareDrawer/ShareDrawerContext';\nimport { useUnsupportedDatasources } from '../../public-dashboards/hooks';\n\nexport default function ShareAlerts({ publicDashboard }: { publicDashboard?: PublicDashboard }) {\n const { dashboard } = useShareDrawerContext();\n const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite);\n const unsupportedDataSources = useUnsupportedDatasources(dashboard);\n const hasTemplateVariables = (dashboard.state.$variables?.state.variables.length ?? 0) > 0;\n\n return (\n <>\n {hasWritePermissions && hasTemplateVariables && <UnsupportedTemplateVariablesAlert showDescription={false} />}\n {!hasWritePermissions && <NoUpsertPermissionsAlert mode={publicDashboard ? 'edit' : 'create'} />}\n {hasWritePermissions && !!unsupportedDataSources?.length && (\n <UnsupportedDataSourcesAlert unsupportedDataSources={unsupportedDataSources.join(', ')} />\n )}\n {publicDashboard?.share === PublicDashboardShareType.EMAIL && isEmailSharingEnabled() && (\n <EmailSharingPricingAlert />\n )}\n {publicDashboard?.share === PublicDashboardShareType.PUBLIC && <PublicDashboardAlert />}\n </>\n );\n}\n","import { t } from '@grafana/i18n';\nimport { PublicDashboardShareType } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\n\nexport const getAnyOneWithTheLinkShareOption = () => {\n return {\n label: t('public-dashboard.share-externally.public-share-type-option-label', 'Anyone with the link'),\n description: t(\n 'public-dashboard.share-externally.public-share-type-option-description',\n 'Anyone with the link can access dashboard'\n ),\n value: PublicDashboardShareType.PUBLIC,\n icon: 'globe',\n };\n};\n\nexport const getOnlySpecificPeopleShareOption = () => ({\n label: t('public-dashboard.share-externally.email-share-type-option-label', 'Only specific people'),\n description: t(\n 'public-dashboard.share-externally.email-share-type-option-description',\n 'Only people with the link can access dashboard'\n ),\n value: PublicDashboardShareType.EMAIL,\n icon: 'users-alt',\n});\n","import { css } from '@emotion/css';\n\nimport { SelectableValue, toIconName } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { Icon, Label, Select, Spinner, Stack, Text, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport {\n publicDashboardApi,\n useUpdatePublicDashboardAccessMutation,\n} from 'app/features/dashboard/api/publicDashboardApi';\nimport {\n isEmailSharingEnabled,\n PublicDashboardShareType,\n} from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { useShareDrawerContext } from '../../ShareDrawer/ShareDrawerContext';\n\nimport { getAnyOneWithTheLinkShareOption } from './utils';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally;\nexport default function ShareTypeSelect({\n setShareType,\n options,\n value,\n}: {\n setShareType: (v: SelectableValue<PublicDashboardShareType>) => void;\n value: SelectableValue<PublicDashboardShareType>;\n options: Array<SelectableValue<PublicDashboardShareType>>;\n}) {\n const { dashboard } = useShareDrawerContext();\n const styles = useStyles2(getStyles);\n\n const { data: publicDashboard } = publicDashboardApi.endpoints?.getPublicDashboard.useQueryState(\n dashboard.state.uid!\n );\n const [updateAccess, { isLoading }] = useUpdatePublicDashboardAccessMutation();\n\n const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite);\n const anyOneWithTheLinkOpt = getAnyOneWithTheLinkShareOption();\n\n const onUpdateShareType = (shareType: PublicDashboardShareType) => {\n if (!publicDashboard) {\n return;\n }\n\n DashboardInteractions.publicDashboardShareTypeChange({\n shareType: shareType === PublicDashboardShareType.EMAIL ? 'email' : 'public',\n });\n\n const req = {\n dashboard,\n payload: {\n ...publicDashboard!,\n share: shareType,\n },\n };\n\n updateAccess(req);\n };\n\n return (\n <div>\n <Stack justifyContent=\"space-between\">\n <Label description={value.description}>\n <Trans i18nKey=\"public-dashboard.share-configuration.share-type-label\">Link access</Trans>\n </Label>\n {isLoading && <Spinner />}\n </Stack>\n {isEmailSharingEnabled() ? (\n <Select\n data-testid={selectors.shareTypeSelect}\n options={options}\n value={value}\n disabled={!hasWritePermissions}\n onChange={(v) => {\n setShareType(v);\n onUpdateShareType(v.value!);\n }}\n className={styles.select}\n />\n ) : (\n <Stack gap={1} alignItems=\"center\">\n {toIconName(anyOneWithTheLinkOpt.icon) && <Icon name={toIconName(anyOneWithTheLinkOpt.icon)!} />}\n <Text>{anyOneWithTheLinkOpt.label}</Text>\n </Stack>\n )}\n </div>\n );\n}\n\nconst getStyles = () => {\n return {\n select: css({\n flex: 1,\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneComponentProps, SceneObjectBase } from '@grafana/scenes';\nimport { Button, ClipboardButton, Divider, Spinner, Stack, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport {\n useDeletePublicDashboardMutation,\n useGetPublicDashboardQuery,\n usePauseOrResumePublicDashboardMutation,\n} from 'app/features/dashboard/api/publicDashboardApi';\nimport { Loader } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard';\nimport {\n generatePublicDashboardUrl,\n isEmailSharingEnabled,\n PublicDashboard,\n PublicDashboardShareType,\n} from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { getDashboardSceneFor } from 'app/features/dashboard-scene/utils/utils';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { ShareDrawerConfirmAction } from '../../ShareDrawer/ShareDrawerConfirmAction';\nimport { useShareDrawerContext } from '../../ShareDrawer/ShareDrawerContext';\nimport { SceneShareTabState, ShareView } from '../../types';\n\nimport { EmailSharing } from './EmailShare/EmailSharing';\nimport { PublicSharing } from './PublicShare/PublicSharing';\nimport ShareAlerts from './ShareAlerts';\nimport ShareTypeSelect from './ShareTypeSelect';\nimport { getAnyOneWithTheLinkShareOption, getOnlySpecificPeopleShareOption } from './utils';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally;\n\nconst getShareExternallyOptions = () => {\n return isEmailSharingEnabled()\n ? [getOnlySpecificPeopleShareOption(), getAnyOneWithTheLinkShareOption()]\n : [getAnyOneWithTheLinkShareOption()];\n};\n\nexport class ShareExternally extends SceneObjectBase<SceneShareTabState> implements ShareView {\n static Component = ShareExternallyRenderer;\n\n public getTabLabel() {\n return t('share-dashboard.menu.share-externally-title', 'Share externally');\n }\n}\n\nfunction ShareExternallyRenderer({ model }: SceneComponentProps<ShareExternally>) {\n const [showRevokeAccess, setShowRevokeAccess] = useState(false);\n\n const styles = useStyles2(getStyles);\n const dashboard = getDashboardSceneFor(model);\n\n const { data: publicDashboard, isLoading } = useGetPublicDashboardQuery(dashboard.state.uid!);\n const [deletePublicDashboard, { isLoading: isDeleteLoading }] = useDeletePublicDashboardMutation();\n\n const onRevokeClick = () => {\n setShowRevokeAccess(true);\n };\n\n const onDeleteClick = async () => {\n DashboardInteractions.revokePublicDashboardClicked();\n await deletePublicDashboard({\n dashboard,\n uid: publicDashboard!.uid,\n dashboardUid: dashboard.state.uid!,\n }).unwrap();\n setShowRevokeAccess(false);\n };\n\n if (isLoading) {\n return <Loader />;\n }\n\n if (showRevokeAccess) {\n return (\n <ShareDrawerConfirmAction\n title={t('public-dashboard.share-externally.revoke-access-button', 'Revoke access')}\n confirmButtonLabel={t('public-dashboard.share-externally.revoke-access-button', 'Revoke access')}\n onConfirm={onDeleteClick}\n onDismiss={() => setShowRevokeAccess(false)}\n description={t(\n 'public-dashboard.share-externally.revoke-access-description',\n 'Are you sure you want to revoke this access? The dashboard can no longer be shared.'\n )}\n isActionLoading={isDeleteLoading}\n />\n );\n }\n\n return (\n <div className={styles.container}>\n <ShareExternallyBase publicDashboard={publicDashboard} onRevokeClick={onRevokeClick} />\n </div>\n );\n}\n\nfunction ShareExternallyBase({\n publicDashboard,\n onRevokeClick,\n}: {\n publicDashboard?: PublicDashboard;\n onRevokeClick: () => void;\n}) {\n const options = getShareExternallyOptions();\n const getShareType = useMemo(() => {\n if (publicDashboard && isEmailSharingEnabled()) {\n const opt = options.find((opt) => opt.value === publicDashboard?.share)!;\n return opt ?? options[0];\n }\n\n return options[0];\n }, [publicDashboard, options]);\n\n const [shareType, setShareType] = useState<SelectableValue<PublicDashboardShareType>>(getShareType);\n\n const Config = useMemo(() => {\n if (shareType.value === PublicDashboardShareType.EMAIL && isEmailSharingEnabled()) {\n return <EmailSharing />;\n }\n\n return <PublicSharing />;\n }, [shareType]);\n\n return (\n <Stack direction=\"column\" gap={2} data-testid={selectors.container}>\n <ShareAlerts publicDashboard={publicDashboard} />\n <ShareTypeSelect setShareType={setShareType} value={shareType} options={options} />\n {Config}\n {publicDashboard && (\n <>\n <Divider spacing={0} />\n <Actions publicDashboard={publicDashboard} onRevokeClick={onRevokeClick} />\n </>\n )}\n </Stack>\n );\n}\nfunction Actions({ publicDashboard, onRevokeClick }: { publicDashboard: PublicDashboard; onRevokeClick: () => void }) {\n const { dashboard } = useShareDrawerContext();\n const [update, { isLoading: isUpdateLoading }] = usePauseOrResumePublicDashboardMutation();\n const styles = useStyles2(getStyles);\n\n const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite);\n\n function onCopyURL() {\n DashboardInteractions.publicDashboardUrlCopied();\n }\n\n const onPauseOrResumeClick = async () => {\n DashboardInteractions.publicDashboardPauseSharingClicked({\n paused: !publicDashboard.isEnabled,\n });\n update({\n dashboard: dashboard,\n payload: {\n ...publicDashboard!,\n isEnabled: !publicDashboard.isEnabled,\n },\n });\n };\n\n return (\n <Stack alignItems=\"center\" direction={{ xs: 'column', sm: 'row' }}>\n <div className={styles.actionsContainer}>\n <Stack gap={1} flex={1} direction={{ xs: 'column', sm: 'row' }}>\n <ClipboardButton\n data-testid={selectors.Configuration.copyUrlButton}\n variant=\"primary\"\n fill=\"outline\"\n icon=\"link\"\n getText={() => generatePublicDashboardUrl(publicDashboard!.accessToken!)}\n onClipboardCopy={onCopyURL}\n >\n <Trans i18nKey=\"public-dashboard.share-externally.copy-link-button\">Copy external link</Trans>\n </ClipboardButton>\n <Button\n icon=\"trash-alt\"\n variant=\"destructive\"\n fill=\"outline\"\n disabled={isUpdateLoading || !hasWritePermissions}\n onClick={onRevokeClick}\n data-testid={selectors.Configuration.revokeAccessButton}\n >\n <Trans i18nKey=\"public-dashboard.share-externally.revoke-access-button\">Revoke access</Trans>\n </Button>\n <Button\n icon={publicDashboard.isEnabled ? 'pause' : 'play'}\n variant=\"secondary\"\n fill=\"outline\"\n tooltip={\n publicDashboard.isEnabled\n ? t(\n 'public-dashboard.share-externally.pause-access-tooltip',\n 'Pausing will temporarily disable access to this dashboard for all users'\n )\n : ''\n }\n onClick={onPauseOrResumeClick}\n disabled={isUpdateLoading || !hasWritePermissions}\n data-testid={selectors.Configuration.toggleAccessButton}\n >\n {publicDashboard.isEnabled ? (\n <Trans i18nKey=\"public-dashboard.share-externally.pause-access-button\">Pause access</Trans>\n ) : (\n <Trans i18nKey=\"public-dashboard.share-externally.resume-access-button\">Resume access</Trans>\n )}\n </Button>\n </Stack>\n </div>\n {isUpdateLoading && <Spinner />}\n </Stack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n paddingBottom: theme.spacing(2),\n }),\n actionsContainer: css({\n width: '100%',\n }),\n});\n","import { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { Label, Spinner, Stack, Switch } from '@grafana/ui';\n\nimport { ThemePicker } from '../../dashboard/components/ShareModal/ThemePicker';\n\ninterface Props {\n useLockedTime: boolean;\n onToggleLockedTime: () => void;\n useShortUrl: boolean;\n onUrlShorten: () => void;\n selectedTheme: string;\n onChangeTheme: (v: string) => void;\n isLoading: boolean;\n}\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareInternally;\n\nexport default function ShareInternallyConfiguration({\n useLockedTime,\n onToggleLockedTime,\n useShortUrl,\n onUrlShorten,\n onChangeTheme,\n selectedTheme,\n isLoading,\n}: Props) {\n return (\n <Stack justifyContent=\"space-between\">\n <Stack gap={2} direction=\"column\">\n <Stack gap={1} direction=\"column\">\n <Stack gap={1} alignItems=\"start\">\n <Switch\n label={t('link.share.time-range-label', 'Lock time range')}\n id=\"share-current-time-range\"\n value={useLockedTime}\n onChange={onToggleLockedTime}\n data-testid={selectors.lockTimeRangeSwitch}\n />\n <Label\n description={t(\n 'link.share.time-range-description',\n 'Change the current relative time range to an absolute time range'\n )}\n id=\"time-range-description\"\n >\n <Trans i18nKey=\"link.share.time-range-label\">Lock time range</Trans>\n </Label>\n </Stack>\n <Stack gap={1} alignItems=\"start\">\n <Switch\n id=\"share-short-url\"\n value={useShortUrl}\n label={t('link.share.short-url-label', 'Shorten link')}\n onChange={onUrlShorten}\n data-testid={selectors.shortenUrlSwitch}\n />\n <Label>\n <Trans i18nKey=\"link.share.short-url-label\">Shorten link</Trans>\n </Label>\n </Stack>\n </Stack>\n <ThemePicker selectedTheme={selectedTheme} onChange={onChangeTheme} />\n </Stack>\n {isLoading && <Spinner />}\n </Stack>\n );\n}\n","import { dateTime, UrlQueryMap } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectRef, VizPanel } from '@grafana/scenes';\nimport { TimeZone } from '@grafana/schema';\nimport { Alert, ClipboardButton, Field, FieldSet, Icon, Input, Switch, TextLink } from '@grafana/ui';\nimport { createDashboardShareUrl, createShortLink, getShareUrlParams } from 'app/core/utils/shortLinks';\nimport { ThemePicker } from 'app/features/dashboard/components/ShareModal/ThemePicker';\nimport { getTrackingSource, shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';\n\nimport { getDashboardUrl } from '../utils/getDashboardUrl';\nimport { DashboardInteractions } from '../utils/interactions';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { SceneShareTabState, ShareView } from './types';\n\nexport interface ShareLinkTabState extends SceneShareTabState, ShareOptions {\n panelRef?: SceneObjectRef<VizPanel>;\n}\n\nexport interface ShareLinkConfiguration {\n useLockedTime: boolean;\n useShortUrl: boolean;\n selectedTheme: string;\n}\n\ninterface ShareOptions extends ShareLinkConfiguration {\n shareUrl: string;\n imageUrl: string;\n isBuildUrlLoading: boolean;\n}\n\nexport class ShareLinkTab extends SceneObjectBase<ShareLinkTabState> implements ShareView {\n public tabId = shareDashboardType.link;\n\n static Component = ShareLinkTabRenderer;\n\n constructor(state: Partial<ShareLinkTabState>) {\n super({\n ...state,\n useLockedTime: state.useLockedTime ?? true,\n useShortUrl: state.useShortUrl ?? false,\n selectedTheme: state.selectedTheme ?? 'current',\n shareUrl: '',\n imageUrl: '',\n isBuildUrlLoading: false,\n });\n\n this.addActivationHandler(() => {\n this.buildUrl();\n });\n\n this.onToggleLockedTime = this.onToggleLockedTime.bind(this);\n this.onUrlShorten = this.onUrlShorten.bind(this);\n this.onThemeChange = this.onThemeChange.bind(this);\n }\n\n buildUrl = async (queryOptions?: UrlQueryMap) => {\n this.setState({ isBuildUrlLoading: true });\n const { panelRef, useLockedTime: useAbsoluteTimeRange, useShortUrl, selectedTheme } = this.state;\n const dashboard = getDashboardSceneFor(this);\n const panel = panelRef?.resolve();\n\n const opts = { useAbsoluteTimeRange, theme: selectedTheme, useShortUrl };\n let shareUrl = createDashboardShareUrl(dashboard, opts, panel);\n\n if (useShortUrl) {\n shareUrl = await createShortLink(shareUrl);\n }\n\n const timeRange = sceneGraph.getTimeRange(panel ?? dashboard);\n const urlParamsUpdate = getShareUrlParams(opts, timeRange, panel);\n\n // the image panel solo route uses panelId instead of viewPanel\n let imageQueryParams = urlParamsUpdate;\n if (panel) {\n delete imageQueryParams.viewPanel;\n imageQueryParams.panelId = panel.getPathId();\n // force solo route to use scenes\n imageQueryParams['__feature.dashboardSceneSolo'] = true;\n }\n\n const imageUrl = getDashboardUrl({\n uid: dashboard.state.uid,\n currentQueryParams: window.location.search,\n updateQuery: { ...urlParamsUpdate, ...queryOptions, panelId: panel?.getPathId() },\n absolute: true,\n soloRoute: true,\n render: true,\n timeZone: getRenderTimeZone(timeRange.getTimeZone()),\n });\n\n this.setState({ shareUrl, imageUrl, isBuildUrlLoading: false });\n };\n\n public getTabLabel() {\n return t('share-modal.tab-title.link', 'Link');\n }\n\n async onToggleLockedTime() {\n const useLockedTime = !this.state.useLockedTime;\n this.setState({ useLockedTime });\n await this.buildUrl();\n }\n\n async onUrlShorten() {\n const useShortUrl = !this.state.useShortUrl;\n this.setState({ useShortUrl });\n await this.buildUrl();\n }\n\n async onThemeChange(value: string) {\n this.setState({ selectedTheme: value });\n await this.buildUrl();\n }\n\n getShareUrl = () => {\n return this.state.shareUrl;\n };\n\n onCopy = () => {\n DashboardInteractions.shareLinkCopied({\n currentTimeRange: this.state.useLockedTime,\n theme: this.state.selectedTheme,\n shortenURL: this.state.useShortUrl,\n shareResource: getTrackingSource(this.state.panelRef),\n });\n };\n}\n\nfunction ShareLinkTabRenderer({ model }: SceneComponentProps<ShareLinkTab>) {\n const state = model.useState();\n const { panelRef } = state;\n\n const dashboard = getDashboardSceneFor(model);\n const panel = panelRef?.resolve();\n\n const timeRange = sceneGraph.getTimeRange(panel ?? dashboard);\n const isRelativeTime = timeRange.state.to === 'now' ? true : false;\n\n const { useLockedTime, useShortUrl, selectedTheme, shareUrl, imageUrl } = state;\n\n const selectors = e2eSelectors.pages.SharePanelModal;\n const isDashboardSaved = Boolean(dashboard.state.uid);\n\n const lockTimeRangeLabel = t('share-modal.link.time-range-label', `Lock time range`);\n\n const lockTimeRangeDescription = t(\n 'share-modal.link.time-range-description',\n `Transforms the current relative time range to an absolute time range`\n );\n\n const shortenURLTranslation = t('share-modal.link.shorten-url', `Shorten URL`);\n\n const linkURLTranslation = t('share-modal.link.link-url', `Link URL`);\n\n return (\n <>\n <p>\n <Trans i18nKey=\"share-modal.link.info-text\">\n Create a direct link to this dashboard or panel, customized with the options below.\n </Trans>\n </p>\n <FieldSet>\n <Field label={lockTimeRangeLabel} description={isRelativeTime ? lockTimeRangeDescription : ''}>\n <Switch id=\"share-current-time-range\" value={useLockedTime} onChange={model.onToggleLockedTime} />\n </Field>\n <ThemePicker selectedTheme={selectedTheme} onChange={model.onThemeChange} />\n <Field label={shortenURLTranslation}>\n <Switch id=\"share-shorten-url\" value={useShortUrl} onChange={model.onUrlShorten} />\n </Field>\n\n <Field label={linkURLTranslation}>\n <Input\n id=\"link-url-input\"\n value={shareUrl}\n readOnly\n addonAfter={\n <ClipboardButton icon=\"copy\" variant=\"primary\" getText={model.getShareUrl} onClipboardCopy={model.onCopy}>\n <Trans i18nKey=\"share-modal.link.copy-link-button\">Copy</Trans>\n </ClipboardButton>\n }\n />\n </Field>\n </FieldSet>\n\n {panel && config.rendererAvailable && (\n <>\n {isDashboardSaved && (\n <div className=\"gf-form\">\n <a href={imageUrl} target=\"_blank\" rel=\"noreferrer\" aria-label={selectors.linkToRenderedImage}>\n <Icon name=\"camera\" />\n \n <Trans i18nKey=\"share-modal.link.rendered-image\">Direct link rendered image</Trans>\n </a>\n </div>\n )}\n\n {!isDashboardSaved && (\n <Alert severity=\"info\" title={t('share-modal.link.save-alert', 'Dashboard is not saved')} bottomSpacing={0}>\n <Trans i18nKey=\"share-modal.link.save-dashboard\">\n To render a panel image, you must save the dashboard first.\n </Trans>\n </Alert>\n )}\n </>\n )}\n\n {panel && !config.rendererAvailable && (\n <Alert\n severity=\"info\"\n title={t('share-modal.link.render-alert', 'Image renderer plugin not installed')}\n bottomSpacing={0}\n >\n <Trans i18nKey=\"share-modal.link.render-instructions\">\n To render an image, you must install the{' '}\n <TextLink href=\"https://grafana.com/grafana/plugins/grafana-image-renderer\" external>\n Grafana image renderer plugin\n </TextLink>\n . Please contact your Grafana administrator to install the plugin.\n </Trans>\n </Alert>\n )}\n </>\n );\n}\n\nfunction getRenderTimeZone(timeZone: TimeZone): string {\n const utcOffset = 'UTC' + encodeURIComponent(dateTime().format('Z'));\n\n if (timeZone === 'utc') {\n return 'UTC';\n }\n\n if (timeZone === 'browser') {\n if (!window.Intl) {\n return utcOffset;\n }\n\n const dateFormat = window.Intl.DateTimeFormat();\n const options = dateFormat.resolvedOptions();\n if (!options.timeZone) {\n return utcOffset;\n }\n\n return options.timeZone;\n }\n\n return timeZone;\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneComponentProps } from '@grafana/scenes';\nimport { Alert, ClipboardButton, Divider, Stack, Text, useStyles2 } from '@grafana/ui';\n\nimport ShareInternallyConfiguration from '../../ShareInternallyConfiguration';\nimport { ShareLinkTab, ShareLinkTabState } from '../../ShareLinkTab';\nimport { getShareLinkConfiguration, updateShareLinkConfiguration } from '../utils';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareInternally;\n\nexport class ShareInternally extends ShareLinkTab {\n static Component = ShareInternallyRenderer;\n\n constructor(state: Partial<ShareLinkTabState>) {\n const { useAbsoluteTimeRange, useShortUrl, theme } = getShareLinkConfiguration();\n super({\n ...state,\n useLockedTime: useAbsoluteTimeRange,\n useShortUrl,\n selectedTheme: theme,\n });\n\n this.onToggleLockedTime = this.onToggleLockedTime.bind(this);\n this.onUrlShorten = this.onUrlShorten.bind(this);\n this.onThemeChange = this.onThemeChange.bind(this);\n }\n\n public getTabLabel() {\n return t('share-dashboard.menu.share-internally-title', 'Share internally');\n }\n\n async onToggleLockedTime() {\n const useLockedTime = !this.state.useLockedTime;\n updateShareLinkConfiguration({\n useAbsoluteTimeRange: useLockedTime,\n useShortUrl: this.state.useShortUrl,\n theme: this.state.selectedTheme,\n });\n await super.onToggleLockedTime();\n }\n\n async onUrlShorten() {\n const useShortUrl = !this.state.useShortUrl;\n updateShareLinkConfiguration({\n useShortUrl,\n useAbsoluteTimeRange: this.state.useLockedTime,\n theme: this.state.selectedTheme,\n });\n await super.onUrlShorten();\n }\n\n async onThemeChange(value: string) {\n updateShareLinkConfiguration({\n theme: value,\n useShortUrl: this.state.useShortUrl,\n useAbsoluteTimeRange: this.state.useLockedTime,\n });\n await super.onThemeChange(value);\n }\n}\n\nfunction ShareInternallyRenderer({ model }: SceneComponentProps<ShareInternally>) {\n const styles = useStyles2(getStyles);\n const { useLockedTime, useShortUrl, selectedTheme, isBuildUrlLoading } = model.useState();\n\n return (\n <div className={selectors.container}>\n <Alert severity=\"info\" title={t('link.share.config-alert-title', 'Link settings')}>\n <Trans i18nKey=\"link.share.config-alert-description\">\n Updating your settings will modify the default copy link to include these changes. Please note that these\n settings are saved within your current browser scope.\n </Trans>\n </Alert>\n <div className={styles.configDescription}>\n <Text variant=\"body\">\n <Trans i18nKey=\"link.share.config-description\">\n Create a personalized, direct link to share your dashboard within your organization, with the following\n customization settings:\n </Trans>\n </Text>\n </div>\n <ShareInternallyConfiguration\n useLockedTime={useLockedTime}\n onToggleLockedTime={model.onToggleLockedTime}\n useShortUrl={useShortUrl}\n onUrlShorten={model.onUrlShorten}\n selectedTheme={selectedTheme}\n onChangeTheme={model.onThemeChange}\n isLoading={isBuildUrlLoading}\n />\n <Divider spacing={1} />\n <Stack gap={1} flex={1} direction={{ xs: 'column', sm: 'row' }}>\n <ClipboardButton\n icon=\"link\"\n variant=\"primary\"\n fill=\"outline\"\n disabled={isBuildUrlLoading}\n getText={model.getShareUrl}\n onClipboardCopy={model.onCopy}\n className={styles.copyButtonContainer}\n data-testid={selectors.copyUrlButton}\n >\n <Trans i18nKey=\"link.share.copy-link-button\">Copy link</Trans>\n </ClipboardButton>\n </Stack>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n configDescription: css({\n marginBottom: theme.spacing(2),\n }),\n copyButtonContainer: css({\n marginTop: theme.spacing(2),\n }),\n});\n","import useAsyncFn from 'react-use/lib/useAsyncFn';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectRef, VizPanel } from '@grafana/scenes';\nimport { Dashboard } from '@grafana/schema';\nimport { Button, ClipboardButton, Field, Input, Modal, RadioButtonGroup, Stack } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport { createSuccessNotification } from 'app/core/copy/appNotification';\nimport { getTrackingSource, shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';\nimport { getDashboardSnapshotSrv, SnapshotSharingOptions } from 'app/features/dashboard/services/SnapshotSrv';\nimport { dispatch } from 'app/store/store';\n\nimport { Spec as DashboardV2Spec } from '../../../../../packages/grafana-schema/src/schema/dashboard/v2';\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { transformSceneToSaveModel, trimDashboardForSnapshot } from '../serialization/transformSceneToSaveModel';\nimport {\n transformSceneToSaveModelSchemaV2,\n trimDashboardForSnapshot as trimDashboardForSnapshotV2,\n} from '../serialization/transformSceneToSaveModelSchemaV2';\nimport { DashboardInteractions } from '../utils/interactions';\n\nimport { SceneShareTabState, ShareView } from './types';\n\nconst selectors = e2eSelectors.pages.ShareDashboardModal.SnapshotScene;\n\nexport const getExpireOptions = () => {\n const DEFAULT_EXPIRE_OPTION: SelectableValue<number> = {\n label: t('share-modal.snapshot.expire-week', '1 Week'),\n value: 60 * 60 * 24 * 7,\n };\n\n return [\n {\n label: t('share-modal.snapshot.expire-hour', '1 Hour'),\n value: 60 * 60,\n },\n {\n label: t('share-modal.snapshot.expire-day', '1 Day'),\n value: 60 * 60 * 24,\n },\n DEFAULT_EXPIRE_OPTION,\n {\n label: t('share-modal.snapshot.expire-never', `Never`),\n value: 0,\n },\n ];\n};\n\nconst getDefaultExpireOption = () => {\n return getExpireOptions()[2];\n};\n\nexport interface ShareSnapshotTabState extends SceneShareTabState {\n dashboardRef: SceneObjectRef<DashboardScene>;\n panelRef?: SceneObjectRef<VizPanel>;\n snapshotName: string;\n selectedExpireOption: SelectableValue<number>;\n snapshotSharingOptions?: SnapshotSharingOptions;\n}\n\n// this is a hacky way to pass the uid with the dashboard to the backend so the dashboard can be found\n// and snapshot can be created\ninterface DashboardV2SpecWithUid extends DashboardV2Spec {\n uid?: string;\n}\n\nexport class ShareSnapshotTab extends SceneObjectBase<ShareSnapshotTabState> implements ShareView {\n public tabId = shareDashboardType.snapshot;\n static Component = ShareSnapshotTabRenderer;\n\n public constructor(\n state: Omit<ShareSnapshotTabState, 'snapshotName' | 'selectedExpireOption' | 'snapshotSharingOptions'>\n ) {\n super({\n ...state,\n snapshotName: state.dashboardRef.resolve().state.title,\n selectedExpireOption: getDefaultExpireOption(),\n });\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n }\n\n private _onActivate() {\n getDashboardSnapshotSrv()\n .getSharingOptions()\n .then((shareOptions) => {\n if (this.isActive) {\n this.setState({\n snapshotSharingOptions: shareOptions,\n });\n }\n });\n }\n\n public getTabLabel() {\n return t('share-modal.tab-title.snapshot', 'Snapshot');\n }\n\n public onSnasphotNameChange = (snapshotName: string) => {\n this.setState({ snapshotName });\n };\n\n public onExpireChange = (option: number) => {\n this.setState({\n selectedExpireOption: getExpireOptions().find((o) => o.value === option),\n });\n };\n\n private prepareSnapshot() {\n const timeRange = sceneGraph.getTimeRange(this);\n const { dashboardRef, panelRef } = this.state;\n\n let saveModel: Dashboard | DashboardV2SpecWithUid;\n\n const apiVersion = dashboardRef.resolve().serializer.apiVersion;\n\n const isV2Dashboard =\n apiVersion === 'dashboard.grafana.app/v2beta1' || apiVersion === 'dashboard.grafana.app/v2alpha1';\n\n if (isV2Dashboard) {\n saveModel = transformSceneToSaveModelSchemaV2(dashboardRef.resolve(), true);\n saveModel.uid = dashboardRef.resolve().serializer.getK8SMetadata()?.name;\n return trimDashboardForSnapshotV2(\n this.state.snapshotName.trim() || '',\n timeRange.state.value,\n saveModel,\n panelRef?.resolve()\n );\n }\n\n saveModel = transformSceneToSaveModel(dashboardRef.resolve(), true);\n\n return trimDashboardForSnapshot(\n this.state.snapshotName.trim() || '',\n timeRange.state.value,\n saveModel,\n panelRef?.resolve()\n );\n }\n\n public onSnapshotCreate = async (external = false) => {\n const { selectedExpireOption } = this.state;\n const snapshot = this.prepareSnapshot();\n\n // TODO\n // snapshot.snapshot = {\n // originalUrl: window.location.href,\n // };\n\n const cmdData = {\n dashboard: snapshot,\n name: snapshot.title,\n expires: selectedExpireOption?.value,\n external,\n };\n\n try {\n const response = await getDashboardSnapshotSrv().create(cmdData);\n dispatch(\n notifyApp(createSuccessNotification(t('snapshot.share.success-creation', 'Your snapshot has been created')))\n );\n return response;\n } finally {\n if (external) {\n DashboardInteractions.publishSnapshotClicked({\n expires: cmdData.expires,\n shareResource: getTrackingSource(this.state.panelRef),\n });\n } else {\n DashboardInteractions.publishSnapshotLocalClicked({\n expires: cmdData.expires,\n shareResource: getTrackingSource(this.state.panelRef),\n });\n }\n }\n };\n\n public onSnapshotDelete = async (url: string) => {\n const response = await getBackendSrv().get(url);\n dispatch(\n notifyApp(createSuccessNotification(t('snapshot.share.success-delete', 'Your snapshot has been deleted')))\n );\n return response;\n };\n}\n\nfunction ShareSnapshotTabRenderer({ model }: SceneComponentProps<ShareSnapshotTab>) {\n const { snapshotName, selectedExpireOption, modalRef, snapshotSharingOptions } = model.useState();\n\n const [snapshotResult, createSnapshot] = useAsyncFn(async (external = false) => {\n return model.onSnapshotCreate(external);\n });\n\n const [deleteSnapshotResult, deleteSnapshot] = useAsyncFn(async (url: string) => {\n return await getBackendSrv().get(url);\n });\n\n // If snapshot has been deleted - show message and allow to close modal\n if (deleteSnapshotResult.value) {\n return (\n <Trans i18nKey=\"share-modal.snapshot.deleted-message\">\n The snapshot has been deleted. If you have already accessed it once, then it might take up to an hour before\n before it is removed from browser caches or CDN caches.\n </Trans>\n );\n }\n\n return (\n <>\n {/* Before snapshot has been created show configuration */}\n {!Boolean(snapshotResult.value) && (\n <>\n <div>\n <p>\n <Trans i18nKey=\"share-modal.snapshot.info-text-1\">\n A snapshot is an instant way to share an interactive dashboard publicly. When created, we strip\n sensitive data like queries (metric, template, and annotation) and panel links, leaving only the visible\n metric data and series names embedded in your dashboard.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"share-modal.snapshot.info-text-2\">\n Keep in mind, your snapshot <em>can be viewed by anyone</em> that has the link and can access the URL.\n Share wisely.\n </Trans>\n </p>\n </div>\n\n <Field label={t('share-modal.snapshot.name', `Snapshot name`)}>\n <Input\n id=\"snapshot-name-input\"\n width={30}\n defaultValue={snapshotName}\n onBlur={(e) => model.onSnasphotNameChange(e.target.value)}\n />\n </Field>\n\n <Field label={t('share-modal.snapshot.expire', `Expire`)}>\n <RadioButtonGroup<number>\n id=\"expire-select-input\"\n options={getExpireOptions()}\n value={selectedExpireOption?.value}\n onChange={model.onExpireChange}\n />\n </Field>\n\n <Modal.ButtonRow>\n <Button\n variant=\"secondary\"\n onClick={() => {\n modalRef?.resolve().onDismiss();\n }}\n fill=\"outline\"\n >\n <Trans i18nKey=\"share-modal.snapshot.cancel-button\">Cancel</Trans>\n </Button>\n\n {snapshotSharingOptions?.externalEnabled && (\n <Button variant=\"secondary\" disabled={snapshotResult.loading} onClick={() => createSnapshot(true)}>\n {snapshotSharingOptions?.externalSnapshotName}\n </Button>\n )}\n <Button\n variant=\"primary\"\n disabled={snapshotResult.loading}\n onClick={() => createSnapshot()}\n data-testid={selectors.PublishSnapshot}\n >\n <Trans i18nKey=\"share-modal.snapshot.local-button\">Publish Snapshot</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n )}\n\n {/* When snapshot has been created - show link and allow copy/deletion */}\n {snapshotResult.value && (\n <Stack direction=\"column\" gap={0}>\n <Field label={t('share-modal.snapshot.url-label', 'Snapshot URL')}>\n <Input\n data-testid={selectors.CopyUrlInput}\n id=\"snapshot-url-input\"\n value={snapshotResult.value.url}\n readOnly\n addonAfter={\n <ClipboardButton\n data-testid={selectors.CopyUrlButton}\n icon=\"copy\"\n variant=\"primary\"\n getText={() => snapshotResult.value!.url}\n >\n <Trans i18nKey=\"share-modal.snapshot.copy-link-button\">Copy</Trans>\n </ClipboardButton>\n }\n />\n </Field>\n\n <div style={{ alignSelf: 'flex-end', padding: '5px' }}>\n <Trans i18nKey=\"share-modal.snapshot.mistake-message\">Did you make a mistake? </Trans> \n <Button\n fill=\"outline\"\n size=\"md\"\n variant=\"destructive\"\n onClick={() => {\n deleteSnapshot(snapshotResult.value!.deleteUrl);\n }}\n >\n <Trans i18nKey=\"share-modal.snapshot.delete-button\">Delete snapshot.</Trans>\n </Button>\n </div>\n </Stack>\n )}\n </>\n );\n}\n","import { css } from '@emotion/css';\nimport { PropsWithChildren } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { SceneObjectRef, VizPanel } from '@grafana/scenes';\nimport { Alert, Button, Divider, Field, Input, RadioButtonGroup, Stack, Text, useStyles2 } from '@grafana/ui';\n\nimport { getExpireOptions } from '../../ShareSnapshotTab';\n\nconst DASHBOARD_SNAPSHOT_URL =\n 'https://grafana.com/docs/grafana/next/dashboards/share-dashboards-panels/#share-a-snapshot';\n\nconst PANEL_SNAPSHOT_URL = 'https://grafana.com/docs/grafana/next/dashboards/share-dashboards-panels/#panel-snapshot';\n\ninterface Props {\n name: string;\n selectedExpireOption: SelectableValue<number>;\n onNameChange: (v: string) => void;\n onExpireChange: (v: number) => void;\n panelRef?: SceneObjectRef<VizPanel>;\n disableInputs: boolean;\n}\nexport function UpsertSnapshot({\n name,\n onNameChange,\n onExpireChange,\n selectedExpireOption,\n panelRef,\n disableInputs,\n children,\n}: Props & PropsWithChildren) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n <Alert severity=\"info\" title={''}>\n <Stack justifyContent=\"space-between\" gap={2} alignItems=\"center\">\n <Text>\n {panelRef ? (\n <Trans i18nKey=\"snapshot.share-panel.info-alert\">\n A Grafana panel snapshot publicly shares a panel while removing sensitive data such as queries and panel\n links, leaving only visible metrics and series names. Anyone with the link can access the snapshot.\n </Trans>\n ) : (\n <Trans i18nKey=\"snapshot.share.info-alert\">\n A Grafana dashboard snapshot publicly shares a dashboard while removing sensitive data such as queries\n and panel links, leaving only visible metrics and series names. Anyone with the link can access the\n snapshot.\n </Trans>\n )}\n </Text>\n <Button\n variant=\"secondary\"\n onClick={() => window.open(panelRef ? PANEL_SNAPSHOT_URL : DASHBOARD_SNAPSHOT_URL, '_blank')}\n type=\"button\"\n >\n <Trans i18nKey=\"snapshot.share.learn-more-button\">Learn more</Trans>\n </Button>\n </Stack>\n </Alert>\n <fieldset disabled={disableInputs}>\n <Field label={t('snapshot.share.name-label', 'Snapshot name')}>\n <Input id=\"snapshot-name-input\" value={name} onChange={(e) => onNameChange(e.currentTarget.value)} />\n </Field>\n <Field label={t('snapshot.share.expiration-label', 'Expires in')}>\n <RadioButtonGroup<number>\n id=\"expire-select-input\"\n options={getExpireOptions()}\n value={selectedExpireOption?.value}\n onChange={onExpireChange}\n />\n </Field>\n </fieldset>\n <Divider />\n {children}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n paddingBottom: theme.spacing(2),\n }),\n});\n","import { useState } from 'react';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\n\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps } from '@grafana/scenes';\nimport { Alert, Button, ClipboardButton, Spinner, Stack, TextLink } from '@grafana/ui';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { SnapshotSharingOptions } from '../../../../dashboard/services/SnapshotSrv';\nimport { ShareDrawerConfirmAction } from '../../ShareDrawer/ShareDrawerConfirmAction';\nimport { ShareSnapshotTab } from '../../ShareSnapshotTab';\nimport { ShareView } from '../../types';\n\nimport { UpsertSnapshot } from './UpsertSnapshot';\n\nconst selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareSnapshot;\n\nexport class ShareSnapshot extends ShareSnapshotTab implements ShareView {\n static Component = ShareSnapshotRenderer;\n\n public getTabLabel() {\n return t('share-dashboard.menu.share-snapshot-title', 'Share snapshot');\n }\n}\n\nfunction ShareSnapshotRenderer({ model }: SceneComponentProps<ShareSnapshot>) {\n const [showDeleteConfirmation, setShowDeleteConfirmation] = useState(false);\n const [showDeletedAlert, setShowDeletedAlert] = useState(false);\n const [step, setStep] = useState(1);\n\n const { snapshotName, snapshotSharingOptions, selectedExpireOption, panelRef, onDismiss, dashboardRef } =\n model.useState();\n\n const [snapshotResult, createSnapshot] = useAsyncFn(async (external = false) => {\n const response = await model.onSnapshotCreate(external);\n setStep(2);\n return response;\n });\n const [deleteSnapshotResult, deleteSnapshot] = useAsyncFn(async (url: string) => {\n const response = await model.onSnapshotDelete(url);\n setStep(1);\n setShowDeleteConfirmation(false);\n setShowDeletedAlert(true);\n return response;\n });\n\n const onCancelClick = () => {\n onDismiss?.();\n };\n\n const reset = () => {\n model.onSnasphotNameChange(dashboardRef.resolve().state.title);\n setStep(1);\n };\n\n const onDeleteSnapshotClick = async () => {\n await deleteSnapshot(snapshotResult.value?.deleteUrl!);\n reset();\n };\n\n if (showDeleteConfirmation) {\n return (\n <ShareDrawerConfirmAction\n title={t('snapshot.share.delete-title', 'Delete snapshot')}\n confirmButtonLabel={t('snapshot.share.delete-button', 'Delete snapshot')}\n onConfirm={onDeleteSnapshotClick}\n onDismiss={() => setShowDeleteConfirmation(false)}\n description={t('snapshot.share.delete-description', 'Are you sure you want to delete this snapshot?')}\n isActionLoading={deleteSnapshotResult.loading}\n />\n );\n }\n\n return (\n <div data-testid={selectors.container}>\n <>\n {step === 1 && showDeletedAlert && (\n <Alert severity=\"info\" title={''} onRemove={() => setShowDeletedAlert(false)}>\n <Trans i18nKey=\"snapshot.share.deleted-alert\">\n Snapshot deleted. It could take an hour to be cleared from CDN caches.\n </Trans>\n </Alert>\n )}\n <UpsertSnapshot\n name={snapshotName ?? ''}\n selectedExpireOption={selectedExpireOption}\n onNameChange={model.onSnasphotNameChange}\n onExpireChange={model.onExpireChange}\n disableInputs={step === 2}\n panelRef={panelRef}\n >\n <Stack justifyContent=\"space-between\" gap={{ xs: 2 }} direction={{ xs: 'column', xl: 'row' }}>\n {step === 1 ? (\n <CreateSnapshotActions\n onCreateClick={createSnapshot}\n isLoading={snapshotResult.loading}\n onCancelClick={onCancelClick}\n sharingOptions={snapshotSharingOptions}\n />\n ) : (\n step === 2 &&\n snapshotResult.value && (\n <UpsertSnapshotActions\n url={snapshotResult.value!.url}\n onDeleteClick={() => setShowDeleteConfirmation(true)}\n onNewSnapshotClick={reset}\n />\n )\n )}\n <TextLink icon=\"external-link-alt\" href={`${config.appSubUrl || ''}/dashboard/snapshots`} external>\n {t('snapshot.share.view-all-button', 'View all snapshots')}\n </TextLink>\n </Stack>\n </UpsertSnapshot>\n </>\n </div>\n );\n}\n\nconst CreateSnapshotActions = ({\n isLoading,\n onCreateClick,\n onCancelClick,\n sharingOptions,\n}: {\n isLoading: boolean;\n sharingOptions?: SnapshotSharingOptions;\n onCancelClick: () => void;\n onCreateClick: (isExternal?: boolean) => void;\n}) => (\n <Stack gap={1} flex={1} direction={{ xs: 'column', sm: 'row' }}>\n <Button\n variant=\"primary\"\n disabled={isLoading}\n onClick={() => onCreateClick()}\n data-testid={selectors.publishSnapshot}\n >\n <Trans i18nKey=\"snapshot.share.local-button\">Publish snapshot</Trans>\n </Button>\n {sharingOptions?.externalEnabled && (\n <Button variant=\"secondary\" disabled={isLoading} onClick={() => onCreateClick(true)}>\n {sharingOptions?.externalSnapshotName}\n </Button>\n )}\n <Button variant=\"secondary\" fill=\"outline\" onClick={onCancelClick}>\n <Trans i18nKey=\"snapshot.share.cancel-button\">Cancel</Trans>\n </Button>\n {isLoading && <Spinner />}\n </Stack>\n);\n\nconst UpsertSnapshotActions = ({\n url,\n onDeleteClick,\n onNewSnapshotClick,\n}: {\n url: string;\n onDeleteClick: () => void;\n onNewSnapshotClick: () => void;\n}) => {\n const hasDeletePermission = contextSrv.hasPermission(AccessControlAction.SnapshotsDelete);\n const deleteTooltip = hasDeletePermission\n ? ''\n : t('snapshot.share.delete-permission-tooltip', \"You don't have permission to delete snapshots\");\n\n return (\n <Stack justifyContent=\"flex-start\" gap={1} direction={{ xs: 'column', sm: 'row' }}>\n <ClipboardButton\n icon=\"link\"\n variant=\"primary\"\n fill=\"outline\"\n getText={() => url}\n data-testid={selectors.copyUrlButton}\n >\n <Trans i18nKey=\"snapshot.share.copy-link-button\">Copy link</Trans>\n </ClipboardButton>\n <Button\n icon=\"trash-alt\"\n variant=\"destructive\"\n fill=\"outline\"\n onClick={onDeleteClick}\n disabled={!hasDeletePermission}\n tooltip={deleteTooltip}\n >\n <Trans i18nKey=\"snapshot.share.delete-button\">Delete snapshot</Trans>\n </Button>\n <Button variant=\"secondary\" fill=\"solid\" onClick={onNewSnapshotClick}>\n <Trans i18nKey=\"snapshot.share.new-snapshot-button\">New snapshot</Trans>\n </Button>\n </Stack>\n );\n};\n","import { t } from '@grafana/i18n';\nimport { SceneComponentProps, SceneObjectBase, SceneObjectRef, VizPanel } from '@grafana/scenes';\nimport { LibraryPanel } from '@grafana/schema';\nimport { ShareLibraryPanel } from 'app/features/dashboard/components/ShareModal/ShareLibraryPanel';\nimport { shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\n\nimport { DashboardGridItem } from '../scene/layout-default/DashboardGridItem';\nimport { gridItemToPanel, transformSceneToSaveModel } from '../serialization/transformSceneToSaveModel';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { SceneShareTabState } from './types';\n\nexport interface ShareLibraryPanelTabState extends SceneShareTabState {\n panelRef?: SceneObjectRef<VizPanel>;\n}\n\nexport class ShareLibraryPanelTab extends SceneObjectBase<ShareLibraryPanelTabState> {\n public tabId = shareDashboardType.libraryPanel;\n static Component = ShareLibraryPanelTabRenderer;\n\n public getTabLabel() {\n return t('share-panel.drawer.new-library-panel-title', 'New library panel');\n }\n}\n\nfunction ShareLibraryPanelTabRenderer({ model }: SceneComponentProps<ShareLibraryPanelTab>) {\n const { panelRef, modalRef } = model.useState();\n\n if (!panelRef) {\n return null;\n }\n\n const panel = panelRef.resolve();\n const parent = panel.parent;\n\n if (parent instanceof DashboardGridItem) {\n const dashboardScene = getDashboardSceneFor(model);\n const panelJson = gridItemToPanel(parent);\n const panelModel = new PanelModel(panelJson);\n\n const dashboardJson = transformSceneToSaveModel(dashboardScene);\n const dashboardModel = new DashboardModel(dashboardJson);\n\n return (\n <ShareLibraryPanel\n initialFolderUid={dashboardScene.state.meta.folderUid}\n dashboard={dashboardModel}\n panel={panelModel}\n onDismiss={() => {\n modalRef ? modalRef.resolve().onDismiss() : dashboardScene.closeModal();\n }}\n onCreateLibraryPanel={(libPanel: LibraryPanel) => dashboardScene.createLibraryPanel(panel, libPanel)}\n />\n );\n }\n\n return null;\n}\n","import { TimeRange } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectRef, VizPanel } from '@grafana/scenes';\nimport { ShareEmbed } from 'app/features/dashboard/components/ShareModal/ShareEmbed';\nimport { buildParams, shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { PanelTimeRange } from '../scene/panel-timerange/PanelTimeRange';\nimport { getDashboardUrl } from '../utils/getDashboardUrl';\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { SceneShareTabState } from './types';\n\nexport interface SharePanelEmbedTabState extends SceneShareTabState {\n panelRef: SceneObjectRef<VizPanel>;\n}\n\nexport class SharePanelEmbedTab extends SceneObjectBase<SharePanelEmbedTabState> {\n public tabId = shareDashboardType.embed;\n static Component = SharePanelEmbedTabRenderer;\n\n public constructor(state: SharePanelEmbedTabState) {\n super(state);\n }\n\n public getTabLabel() {\n return t('share-panel.drawer.share-embed-title', 'Share embed');\n }\n}\n\nfunction SharePanelEmbedTabRenderer({ model }: SceneComponentProps<SharePanelEmbedTab>) {\n const { panelRef } = model.useState();\n const p = panelRef.resolve();\n\n const dash = getDashboardSceneFor(model);\n const { uid: dashUid } = dash.useState();\n const timeRangeState = sceneGraph.getTimeRange(p);\n\n const timeFrom = timeRangeState instanceof PanelTimeRange ? timeRangeState.state.timeFrom : undefined;\n\n return (\n <ShareEmbed\n panelId={p.getPathId()}\n timeFrom={timeFrom}\n range={timeRangeState.state.value}\n dashboard={{ uid: dashUid ?? '', time: timeRangeState.state.value }}\n buildIframe={getIframeBuilder(dash)}\n onCancelClick={() => dash.closeModal()}\n />\n );\n}\n\nconst getIframeBuilder =\n (dashboard: DashboardScene) =>\n (\n useCurrentTimeRange: boolean,\n _dashboardUid: string,\n selectedTheme?: string,\n panelId?: string,\n timeFrom?: string,\n range?: TimeRange\n ) => {\n const params = buildParams({ useCurrentTimeRange, selectedTheme, panelId, timeFrom, range });\n const editOrViewPanel = params.get('editPanel') ?? params.get('viewPanel') ?? '';\n params.set('panelId', editOrViewPanel);\n params.delete('editPanel');\n params.delete('viewPanel');\n params.set('__feature.dashboardSceneSolo', 'true');\n\n const soloUrl = getDashboardUrl({\n absolute: true,\n soloRoute: true,\n uid: dashboard.state.uid,\n slug: dashboard.state.meta.slug,\n currentQueryParams: params.toString(),\n });\n return `<iframe src=\"${soloUrl}\" width=\"450\" height=\"200\" frameborder=\"0\"></iframe>`;\n };\n","import { css } from '@emotion/css';\nimport saveAs from 'file-saver';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useAsyncFn } from 'react-use';\nimport { lastValueFrom } from 'rxjs';\n\nimport { GrafanaTheme2, UrlQueryMap } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config, getBackendSrv } from '@grafana/runtime';\nimport { Button, ClipboardButton, Field, FieldSet, Icon, Input, Stack, Text, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { DashboardInteractions } from '../../utils/interactions';\nimport { ImagePreview } from '../components/ImagePreview';\n\ntype ImageSettingsForm = {\n width: number;\n height: number;\n scaleFactor: number;\n};\n\ntype Props = {\n title: string;\n buildUrl: (urlParams: UrlQueryMap) => void;\n imageUrl: string;\n disabled: boolean;\n theme: string;\n};\n\nexport function SharePanelPreview({ title, imageUrl, buildUrl, disabled, theme }: Props) {\n const styles = useStyles2(getStyles);\n\n const {\n handleSubmit,\n register,\n watch,\n formState: { errors, isValid },\n } = useForm<ImageSettingsForm>({\n mode: 'onChange',\n defaultValues: {\n width: 1000,\n height: 500,\n scaleFactor: 1,\n },\n });\n\n useEffect(() => {\n buildUrl({ width: watch('width'), height: watch('height'), scale: watch('scaleFactor') });\n }, [buildUrl, watch]);\n\n const [{ loading, value: image, error }, renderImage] = useAsyncFn(async (imageUrl) => {\n const response = await lastValueFrom(getBackendSrv().fetch<BlobPart>({ url: imageUrl, responseType: 'blob' }));\n return new Blob([response.data], { type: 'image/png' });\n }, []);\n\n const onRenderImageClick = async (data: ImageSettingsForm) => {\n const { width, height, scaleFactor } = data;\n DashboardInteractions.generatePanelImageClicked({\n width,\n height,\n scaleFactor,\n theme,\n shareResource: 'panel',\n });\n\n await renderImage(imageUrl);\n };\n\n const onDownloadImageClick = () => {\n DashboardInteractions.downloadPanelImageClicked({ shareResource: 'panel' });\n saveAs(image!, `${title}.png`);\n };\n\n const onChange = () => {\n buildUrl({ width: watch('width'), height: watch('height'), scale: watch('scaleFactor') });\n };\n\n return (\n <section aria-labelledby=\"panel-preview-heading\">\n <Stack gap={2} direction=\"column\">\n <Text element=\"h4\" id=\"panel-preview-heading\">\n <Trans i18nKey=\"share-panel-image.preview.title\">Panel preview</Trans>\n </Text>\n <form\n onSubmit={handleSubmit(onRenderImageClick)}\n aria-label={t('share-panel-image.form.label', 'Panel image settings')}\n >\n <FieldSet\n disabled={!config.rendererAvailable}\n label={\n <Stack gap={1} alignItems=\"center\">\n <Text element=\"h5\">\n <Trans i18nKey=\"share-panel-image.settings.title\">Image settings</Trans>\n </Text>\n <Tooltip\n content={t(\n 'share-panel-image.settings.max-warning',\n 'Setting maximums are limited by the image renderer service'\n )}\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n }\n >\n <Stack gap={1} justifyContent=\"space-between\" direction={{ xs: 'column', sm: 'row' }}>\n <Field\n label={t('share-panel-image.settings.width-label', 'Width')}\n className={styles.imageConfigurationField}\n required\n invalid={!!errors.width}\n error={errors.width?.message}\n >\n <Input\n {...register('width', {\n required: t('share-panel-image.settings.width-required', 'Width is required'),\n min: {\n value: 1,\n message: t('share-panel-image.settings.width-min', 'Width must be equal or greater than 1'),\n },\n valueAsNumber: true,\n onChange: onChange,\n })}\n placeholder={t('share-panel-image.settings.width-placeholder', '1000')}\n type=\"number\"\n suffix=\"px\"\n aria-label={t('share-panel-image.settings.width-label', 'Width')}\n />\n </Field>\n <Field\n label={t('share-panel-image.settings.height-label', 'Height')}\n className={styles.imageConfigurationField}\n required\n invalid={!!errors.height}\n error={errors.height?.message}\n >\n <Input\n {...register('height', {\n required: t('share-panel-image.settings.height-required', 'Height is required'),\n min: {\n value: 1,\n message: t('share-panel-image.settings.height-min', 'Height must be equal or greater than 1'),\n },\n valueAsNumber: true,\n onChange: onChange,\n })}\n placeholder={t('share-panel-image.settings.height-placeholder', '500')}\n type=\"number\"\n suffix=\"px\"\n aria-label={t('share-panel-image.settings.height-label', 'Height')}\n />\n </Field>\n <Field\n label={t('share-panel-image.settings.scale-factor-label', 'Scale factor')}\n className={styles.imageConfigurationField}\n required\n invalid={!!errors.scaleFactor}\n error={errors.scaleFactor?.message}\n >\n <Input\n {...register('scaleFactor', {\n required: t('share-panel-image.settings.scale-factor-required', 'Scale factor is required'),\n min: {\n value: 1,\n message: t(\n 'share-panel-image.settings.scale-factor-min',\n 'Scale factor must be equal or greater than 1'\n ),\n },\n valueAsNumber: true,\n onChange: onChange,\n })}\n placeholder={t('share-panel-image.settings.scale-factor-placeholder', '1')}\n type=\"number\"\n aria-label={t('share-panel-image.settings.scale-factor-label', 'Scale factor')}\n />\n </Field>\n </Stack>\n <Stack gap={1} direction={{ xs: 'column', sm: 'row' }}>\n <Button\n icon=\"gf-layout-simple\"\n variant=\"secondary\"\n fill=\"solid\"\n type=\"submit\"\n disabled={disabled || loading || !isValid}\n aria-describedby={disabled ? 'generate-button-disabled-help' : undefined}\n >\n <Trans i18nKey=\"link.share-panel.render-image\">Generate image</Trans>\n </Button>\n <Button\n onClick={onDownloadImageClick}\n icon={'download-alt'}\n variant=\"secondary\"\n disabled={!image || loading || disabled}\n aria-describedby={!image && !loading ? 'download-button-disabled-help' : undefined}\n >\n <Trans i18nKey=\"link.share-panel.download-image\">Download image</Trans>\n </Button>\n <ClipboardButton\n icon=\"link\"\n variant=\"secondary\"\n disabled={disabled || !isValid}\n aria-describedby={disabled || !isValid ? 'copy-image-link-disabled-help' : undefined}\n getText={() => imageUrl}\n onClipboardCopy={() => DashboardInteractions.copyImageUrlClicked({ shareResource: 'panel' })}\n >\n <Trans i18nKey=\"link.share-panel.copy-image-link\">Copy image link</Trans>\n </ClipboardButton>\n </Stack>\n {disabled && (\n <Text variant=\"bodySmall\" color=\"secondary\" id=\"generate-button-disabled-help\">\n <Trans i18nKey=\"share-panel-image.disabled-help\">Save the dashboard to enable image generation</Trans>\n </Text>\n )}\n {!image && !loading && (\n <Text variant=\"bodySmall\" color=\"secondary\" id=\"download-button-disabled-help\">\n <Trans i18nKey=\"share-panel-image.download-disabled-help\">\n Generate an image first to enable download\n </Trans>\n </Text>\n )}\n </FieldSet>\n </form>\n\n <ImagePreview\n imageBlob={image || null}\n isLoading={loading}\n error={\n error\n ? { title: t('share-panel-image.error-title', 'Failed to generate image'), message: error.message }\n : null\n }\n title={title}\n />\n </Stack>\n </section>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n imageConfigurationField: css({\n flex: 1,\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { SceneComponentProps } from '@grafana/scenes';\nimport { Alert, ClipboardButton, Divider, Stack, Text, TextLink, useStyles2 } from '@grafana/ui';\n\nimport { getDashboardSceneFor } from '../../utils/utils';\nimport ShareInternallyConfiguration from '../ShareInternallyConfiguration';\nimport { ShareLinkTab, ShareLinkTabState } from '../ShareLinkTab';\n\nimport { SharePanelPreview } from './SharePanelPreview';\n\nexport class SharePanelInternally extends ShareLinkTab {\n static Component = SharePanelInternallyRenderer;\n\n constructor(state: Partial<ShareLinkTabState>) {\n super(state);\n }\n\n public getTabLabel() {\n return t('share-panel.drawer.share-link-title', 'Link settings');\n }\n}\n\nfunction SharePanelInternallyRenderer({ model }: SceneComponentProps<SharePanelInternally>) {\n const styles = useStyles2(getStyles);\n\n const { useLockedTime, useShortUrl, selectedTheme, isBuildUrlLoading, imageUrl, panelRef } = model.useState();\n\n const panelTitle = panelRef?.resolve().state.title;\n const dashboard = getDashboardSceneFor(model);\n const isDashboardSaved = Boolean(dashboard.state.uid);\n\n return (\n <div>\n <Text variant=\"body\">\n <Trans i18nKey=\"link.share-panel.config-description\">\n Create a personalized, direct link to share your panel within your organization, with the following\n customization settings:\n </Trans>\n </Text>\n <div className={styles.configurationContainer}>\n <ShareInternallyConfiguration\n useLockedTime={useLockedTime}\n onToggleLockedTime={model.onToggleLockedTime}\n useShortUrl={useShortUrl}\n onUrlShorten={model.onUrlShorten}\n selectedTheme={selectedTheme}\n onChangeTheme={model.onThemeChange}\n isLoading={isBuildUrlLoading}\n />\n <ClipboardButton\n icon=\"link\"\n variant=\"primary\"\n fill=\"outline\"\n disabled={isBuildUrlLoading}\n getText={model.getShareUrl}\n onClipboardCopy={model.onCopy}\n >\n <Trans i18nKey=\"link.share.copy-link-button\">Copy link</Trans>\n </ClipboardButton>\n </div>\n <Divider spacing={2} />\n <Stack gap={2} direction=\"column\">\n {!isDashboardSaved && (\n <Alert severity=\"info\" title={t('share-modal.link.save-alert', 'Dashboard is not saved')} bottomSpacing={0}>\n <Trans i18nKey=\"share-modal.link.save-dashboard\">\n To render a panel image, you must save the dashboard first.\n </Trans>\n </Alert>\n )}\n {!config.rendererAvailable && (\n <Alert\n severity=\"info\"\n title={t('share-modal.link.render-alert', 'Image renderer plugin not installed')}\n bottomSpacing={0}\n >\n <Trans i18nKey=\"share-modal.link.render-instructions\">\n To render an image, you must install the{' '}\n <TextLink href=\"https://grafana.com/grafana/plugins/grafana-image-renderer\" external>\n Grafana image renderer plugin\n </TextLink>\n . Please contact your Grafana administrator to install the plugin.\n </Trans>\n </Alert>\n )}\n <SharePanelPreview\n title={panelTitle || ''}\n buildUrl={model.buildUrl}\n imageUrl={imageUrl}\n disabled={!isDashboardSaved}\n theme={selectedTheme}\n />\n </Stack>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n configurationContainer: css({\n marginTop: theme.spacing(2),\n }),\n});\n","import { locationService } from '@grafana/runtime';\nimport { SceneComponentProps, SceneObjectBase, SceneObjectRef, SceneObjectState, VizPanel } from '@grafana/scenes';\nimport { Drawer } from '@grafana/ui';\n\nimport { shareDashboardType } from '../../../dashboard/components/ShareModal/utils';\nimport { DashboardScene } from '../../scene/DashboardScene';\nimport { getDashboardSceneFor } from '../../utils/utils';\nimport { ExportAsCode } from '../ExportButton/ExportAsCode';\nimport { ExportAsImage } from '../ExportButton/ExportAsImage';\nimport { ShareExternally } from '../ShareButton/share-externally/ShareExternally';\nimport { ShareInternally } from '../ShareButton/share-internally/ShareInternally';\nimport { ShareSnapshot } from '../ShareButton/share-snapshot/ShareSnapshot';\nimport { ShareLibraryPanelTab } from '../ShareLibraryPanelTab';\nimport { SharePanelEmbedTab } from '../SharePanelEmbedTab';\nimport { SharePanelInternally } from '../panel-share/SharePanelInternally';\nimport { ModalSceneObjectLike, SceneShareTabState, ShareView } from '../types';\n\nimport { ShareDrawerContext } from './ShareDrawerContext';\n\nexport interface ShareDrawerState extends SceneObjectState {\n panelRef?: SceneObjectRef<VizPanel>;\n shareView: string;\n activeShare?: ShareView;\n}\n\ntype CustomShareViewType = { id: string; shareOption: new (...args: SceneShareTabState[]) => ShareView };\nconst customShareViewOptions: CustomShareViewType[] = [];\n\nexport function addDashboardShareView(shareView: CustomShareViewType) {\n customShareViewOptions.push(shareView);\n}\n\nexport class ShareDrawer extends SceneObjectBase<ShareDrawerState> implements ModalSceneObjectLike {\n static Component = ShareDrawerRenderer;\n\n constructor(state: Omit<ShareDrawerState, 'activeShare'>) {\n super({ ...state });\n this.addActivationHandler(() => this.buildActiveShare(state.shareView!));\n }\n\n onDismiss = () => {\n if (this.state.activeShare?.onDismiss) {\n this.state.activeShare.onDismiss();\n } else if (this.state.panelRef) {\n const dashboard = getDashboardSceneFor(this);\n dashboard.closeModal();\n } else {\n locationService.partial({ shareView: null });\n }\n };\n\n private buildActiveShare(shareView: string) {\n const { panelRef } = this.state;\n const dashboard = getDashboardSceneFor(this);\n\n const activeShare = panelRef\n ? getPanelShareView(shareView, this.onDismiss, dashboard.getRef(), panelRef)\n : getShareView(shareView, this.onDismiss, dashboard.getRef(), panelRef);\n\n this.setState({ activeShare });\n }\n}\n\nfunction ShareDrawerRenderer({ model }: SceneComponentProps<ShareDrawer>) {\n const { activeShare } = model.useState();\n const dashboard = getDashboardSceneFor(model);\n\n return (\n <Drawer title={activeShare?.getTabLabel()} onClose={model.onDismiss} size=\"md\">\n <ShareDrawerContext.Provider value={{ dashboard, onDismiss: model.onDismiss }}>\n {activeShare && <activeShare.Component model={activeShare} />}\n </ShareDrawerContext.Provider>\n </Drawer>\n );\n}\n\nfunction getShareView(\n shareView: string,\n onDismiss: () => void,\n dashboardRef: SceneObjectRef<DashboardScene>,\n panelRef?: SceneObjectRef<VizPanel>\n): ShareView {\n const currentShareView = customShareViewOptions.find((s) => s.id === shareView);\n if (currentShareView) {\n return new currentShareView.shareOption({ onDismiss });\n }\n\n switch (shareView) {\n case shareDashboardType.link:\n return new ShareInternally({ onDismiss });\n case shareDashboardType.publicDashboard:\n return new ShareExternally({ onDismiss });\n case shareDashboardType.snapshot:\n return new ShareSnapshot({ dashboardRef, panelRef, onDismiss });\n case shareDashboardType.export:\n return new ExportAsCode({ onDismiss });\n case shareDashboardType.image:\n return new ExportAsImage({ onDismiss });\n default:\n return new ShareInternally({ onDismiss });\n }\n}\n\nfunction getPanelShareView(\n shareView: string,\n onDismiss: () => void,\n dashboardRef: SceneObjectRef<DashboardScene>,\n panelRef: SceneObjectRef<VizPanel>\n): ShareView {\n switch (shareView) {\n case shareDashboardType.link:\n return new SharePanelInternally({ panelRef, onDismiss });\n case shareDashboardType.snapshot:\n return new ShareSnapshot({ dashboardRef, panelRef, onDismiss });\n case shareDashboardType.embed:\n return new SharePanelEmbedTab({ panelRef, onDismiss });\n case shareDashboardType.libraryPanel:\n return new ShareLibraryPanelTab({ panelRef, onDismiss });\n default:\n return new SharePanelInternally({ panelRef, onDismiss });\n }\n}\n","/**\n * Mode to describe if a legend is isolated/selected or being appended to an existing\n * series selection.\n * @alpha\n */\n\nexport enum SeriesVisibilityChangeMode {\n ToggleSelection = 'select',\n AppendToSelection = 'append',\n}\n\nexport type OnSelectRangeCallback = (selections: RangeSelection2D[]) => void;\n\nexport interface RangeSelection1D {\n from: number;\n to: number;\n}\n\nexport interface RangeSelection2D {\n x?: RangeSelection1D;\n y?: RangeSelection1D;\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo, MatcherConfig } from '../../types/transformations';\nimport { getFieldMatcher, getFrameMatchers } from '../matchers';\n\nimport { DataTransformerID } from './ids';\nimport { noopTransformer } from './noop';\n\nexport interface FilterOptions {\n include?: MatcherConfig;\n exclude?: MatcherConfig;\n}\n\nexport const filterFieldsTransformer: DataTransformerInfo<FilterOptions> = {\n id: DataTransformerID.filterFields,\n name: 'Filter Fields',\n description: 'select a subset of fields',\n defaultOptions: {},\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options: FilterOptions, ctx) => (source) => {\n if (!options.include && !options.exclude) {\n return source.pipe(noopTransformer.operator({}, ctx));\n }\n\n if (typeof options.include?.options === 'string') {\n options.include.options = options.include?.options;\n } else if (typeof options.include?.options?.pattern === 'string') {\n options.include.options.pattern = options.include?.options.pattern;\n }\n\n if (typeof options.exclude?.options === 'string') {\n options.exclude.options = options.exclude?.options;\n } else if (typeof options.exclude?.options?.pattern === 'string') {\n options.exclude.options.pattern = options.exclude?.options.pattern;\n }\n\n return source.pipe(\n map((data) => {\n const include = options.include ? getFieldMatcher(options.include) : null;\n const exclude = options.exclude ? getFieldMatcher(options.exclude) : null;\n\n const processed: DataFrame[] = [];\n for (const series of data) {\n // Find the matching field indexes\n const fields: Field[] = [];\n for (let i = 0; i < series.fields.length; i++) {\n const field = series.fields[i];\n\n if (exclude) {\n if (exclude(field, series, data)) {\n continue;\n }\n if (!include) {\n fields.push(field);\n }\n }\n if (include && include(field, series, data)) {\n fields.push(field);\n }\n }\n\n if (!fields.length) {\n continue;\n }\n const copy = {\n ...series, // all the other properties\n fields, // but a different set of fields\n };\n processed.push(copy);\n }\n return processed;\n })\n );\n },\n};\n\nexport const filterFramesTransformer: DataTransformerInfo<FilterOptions> = {\n id: DataTransformerID.filterFrames,\n name: 'Filter Frames',\n description: 'select a subset of frames',\n defaultOptions: {},\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options, ctx) => (source) => {\n if (!options.include && !options.exclude) {\n return source.pipe(noopTransformer.operator({}, ctx));\n }\n\n return source.pipe(\n map((data) => {\n const include = options.include ? getFrameMatchers(options.include) : null;\n const exclude = options.exclude ? getFrameMatchers(options.exclude) : null;\n\n const processed: DataFrame[] = [];\n for (const series of data) {\n if (exclude) {\n if (exclude(series)) {\n continue;\n }\n if (!include) {\n processed.push(series);\n }\n }\n if (include && include(series)) {\n processed.push(series);\n }\n }\n return processed;\n })\n );\n },\n};\n","type ResourceBranchUrlOptions = {\n baseUrl?: string;\n paramName?: string;\n paramValue?: string;\n repoType?: string;\n};\n\nexport function buildResourceBranchRedirectUrl({\n baseUrl = '/dashboards',\n paramName,\n paramValue,\n repoType,\n}: ResourceBranchUrlOptions): string {\n const params = new URLSearchParams();\n\n if (paramName && paramValue) {\n params.set(paramName, paramValue);\n }\n\n if (repoType) {\n params.set('repo_type', repoType);\n }\n\n const queryString = params.toString();\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n}\n","import { Trans } from '@grafana/i18n';\n\nexport function BranchValidationError() {\n return (\n <>\n <Trans i18nKey=\"dashboard-scene.branch-validation-error.invalid-branch-name\">Invalid branch name.</Trans>\n <ul style={{ padding: '0 20px' }}>\n <li>\n <Trans i18nKey=\"dashboard-scene.branch-validation-error.cannot-start-with\">\n It cannot start with '/' or end with '/', '.', or whitespace.\n </Trans>\n </li>\n <li>\n <Trans i18nKey=\"dashboard-scene.branch-validation-error.it-cannot-contain-or\">\n It cannot contain '//' or '..'.\n </Trans>\n </li>\n <li>\n <Trans i18nKey=\"dashboard-scene.branch-validation-error.cannot-contain-invalid-characters\">\n It cannot contain invalid characters: '~', '^', ':', '?', '*', '[', '\\\\', or ']'.\n </Trans>\n </li>\n <li>\n <Trans i18nKey=\"dashboard-scene.branch-validation-error.least-valid-character\">\n It must have at least one valid character.\n </Trans>\n </li>\n </ul>\n </>\n );\n}\n","import { useMemo } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { GetRepositoryRefsApiResponse, RepositoryView } from 'app/api/clients/provisioning/v0alpha1';\n\ninterface UseBranchDropdownOptionsParams {\n repository?: RepositoryView;\n prBranch?: string;\n lastBranch?: string;\n branchData?: GetRepositoryRefsApiResponse;\n}\n\ninterface BranchOption {\n label: string;\n value: string;\n description?: string;\n}\n\nfunction getBranchDescriptions() {\n return {\n configured: t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.suffix-configured-branch',\n 'Configured branch'\n ),\n pr: t('provisioned-resource-form.save-or-delete-resource-shared-fields.suffix-pr-branch', 'Pull request branch'),\n lastUsed: t('provisioned-resource-form.save-or-delete-resource-shared-fields.suffix-last-used', 'Last branch'),\n };\n}\n\n/**\n * Hook to generate branch dropdown options with proper ordering and deduplication.\n * Order: Configured branch → PR branch → Last used branch → Other branches\n */\nexport const useBranchDropdownOptions = ({\n repository,\n prBranch,\n lastBranch,\n branchData,\n}: UseBranchDropdownOptionsParams): BranchOption[] => {\n const descriptions = useMemo(() => getBranchDescriptions(), []);\n\n const options: BranchOption[] = [];\n const addedBranches = new Set<string>();\n\n const configuredBranch = repository?.branch;\n\n if (configuredBranch) {\n options.push({\n label: `${configuredBranch}`,\n value: configuredBranch,\n description: descriptions.configured,\n });\n addedBranches.add(configuredBranch);\n }\n\n if (prBranch && !addedBranches.has(prBranch)) {\n options.push({\n label: prBranch,\n value: prBranch,\n description: descriptions.pr,\n });\n addedBranches.add(prBranch);\n }\n\n if (lastBranch && !addedBranches.has(lastBranch)) {\n options.push({\n label: lastBranch,\n value: lastBranch,\n description: descriptions.lastUsed,\n });\n addedBranches.add(lastBranch);\n }\n\n if (branchData?.items) {\n for (const ref of branchData.items) {\n if (!addedBranches.has(ref.name)) {\n options.push({ label: ref.name, value: ref.name });\n addedBranches.add(ref.name);\n }\n }\n }\n\n return options;\n};\n","import { generateTimestamp } from './timestamp';\n\n/**\n * Generate a new branch name for provisioned resources.\n * Uses the resource type as a prefix and appends a timestamp.\n */\nexport function generateNewBranchName(resourceType: string): string {\n return `${resourceType}/${generateTimestamp()}`;\n}\n","import { skipToken } from '@reduxjs/toolkit/query/react';\nimport { memo, useMemo } from 'react';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport { t } from '@grafana/i18n';\nimport { Combobox, Field, Input, RadioButtonGroup, TextArea } from '@grafana/ui';\nimport { RepositoryView, useGetRepositoryRefsQuery } from 'app/api/clients/provisioning/v0alpha1';\nimport { BranchValidationError } from 'app/features/provisioning/Shared/BranchValidationError';\nimport { WorkflowOption } from 'app/features/provisioning/types';\nimport { validateBranchName } from 'app/features/provisioning/utils/git';\nimport { isGitProvider } from 'app/features/provisioning/utils/repositoryTypes';\n\nimport { useBranchDropdownOptions } from '../../hooks/useBranchDropdownOptions';\nimport { useLastBranch } from '../../hooks/useLastBranch';\nimport { usePRBranch } from '../../hooks/usePRBranch';\nimport { generateNewBranchName } from '../utils/newBranchName';\n\ninterface DashboardEditFormSharedFieldsProps {\n resourceType: 'dashboard' | 'folder';\n workflowOptions: Array<{ label: string; value: string }>;\n isNew?: boolean;\n readOnly?: boolean;\n workflow?: WorkflowOption;\n repository?: RepositoryView;\n hidePath?: boolean;\n}\n\nexport const ResourceEditFormSharedFields = memo<DashboardEditFormSharedFieldsProps>(\n ({ readOnly = false, workflow, workflowOptions, repository, isNew, resourceType, hidePath = false }) => {\n const {\n control,\n register,\n setValue,\n clearErrors,\n formState: { errors },\n } = useFormContext();\n\n const {\n data: branchData,\n isLoading: branchLoading,\n error: branchError,\n } = useGetRepositoryRefsQuery(\n !repository?.name || !isGitProvider(repository.type) ? skipToken : { name: repository.name }\n );\n\n const { getLastBranch } = useLastBranch();\n const prBranch = usePRBranch();\n const lastBranch = getLastBranch(repository?.name);\n\n const branchOptions = useBranchDropdownOptions({\n repository,\n prBranch,\n lastBranch,\n branchData,\n });\n\n const newBranchDefaultName = useMemo(() => generateNewBranchName(resourceType), [resourceType]);\n\n const pathText =\n resourceType === 'dashboard'\n ? t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.description-file-path',\n 'File path inside the repository (.json or .yaml)'\n )\n : t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.description-folder-path',\n 'Folder path inside the repository'\n );\n\n return (\n <>\n {/* Path */}\n {!hidePath && (\n <Field\n noMargin\n label={t('provisioned-resource-form.save-or-delete-resource-shared-fields.label-path', 'Path')}\n description={t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.description-inside-repository',\n pathText\n )}\n >\n <Input id=\"dashboard-path\" type=\"text\" {...register('path')} readOnly={!isNew} />\n </Field>\n )}\n\n {/* Comment */}\n <Field\n noMargin\n label={t('provisioned-resource-form.save-or-delete-resource-shared-fields.label-comment', 'Comment')}\n >\n <TextArea\n id=\"provisioned-resource-form-comment\"\n {...register('comment')}\n disabled={readOnly}\n placeholder={t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.comment-placeholder-describe-changes-optional',\n 'Add a note to describe your changes (optional)'\n )}\n rows={5}\n />\n </Field>\n\n {/* Workflow */}\n {repository?.type && isGitProvider(repository.type) && !readOnly && (\n <>\n <Field\n noMargin\n style={{ overflow: 'auto' }} // TODO Fix radio button group display on smaller screens\n label={t('provisioned-resource-form.save-or-delete-resource-shared-fields.label-workflow', 'Workflow')}\n >\n <Controller\n control={control}\n name=\"workflow\"\n render={({ field: { ref, onChange, ...field } }) => (\n <RadioButtonGroup\n id=\"provisioned-resource-form-workflow\"\n {...field}\n options={workflowOptions}\n onChange={(nextWorkflow) => {\n onChange(nextWorkflow);\n clearErrors('ref');\n if (nextWorkflow === 'branch') {\n setValue('ref', newBranchDefaultName);\n } else if (nextWorkflow === 'write' && repository?.branch) {\n setValue('ref', repository.branch);\n }\n }}\n />\n )}\n />\n </Field>\n {(workflow === 'write' || workflow === 'branch') && (\n <Field\n htmlFor=\"provisioned-ref\"\n noMargin\n label={t('provisioned-resource-form.save-or-delete-resource-shared-fields.label-branch', 'Branch')}\n description={t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.description-branch-name-in-git-hub',\n 'Branch name in GitHub'\n )}\n invalid={Boolean(errors.ref || branchError)}\n error={\n errors.ref ? (\n <BranchValidationError />\n ) : branchError ? (\n t('provisioning.config-form.error-fetch-branches', 'Failed to fetch branches')\n ) : undefined\n }\n >\n <Controller\n name=\"ref\"\n control={control}\n rules={{ validate: validateBranchName }}\n render={({ field: { ref, onChange, ...field } }) =>\n workflow === 'write' ? (\n <Combobox\n {...field}\n invalid={!!errors.ref}\n id=\"provisioned-ref\"\n onChange={(option) => onChange(option ? option.value : '')}\n placeholder={t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.placeholder-branch',\n 'Select or enter branch name'\n )}\n options={branchOptions}\n loading={branchLoading}\n isClearable\n />\n ) : (\n <Input\n {...field}\n invalid={!!errors.ref}\n id=\"provisioned-ref\"\n onChange={onChange}\n placeholder={t(\n 'provisioned-resource-form.save-or-delete-resource-shared-fields.placeholder-new-branch',\n 'Enter new branch name'\n )}\n />\n )\n }\n />\n </Field>\n )}\n </>\n )}\n </>\n );\n }\n);\nResourceEditFormSharedFields.displayName = 'ResourceEditFormSharedFields';\n","import { useId } from '@react-aria/utils';\nimport { FormEvent, PropsWithChildren } from 'react';\nimport * as React from 'react';\n\nimport { Field, Input } from '@grafana/ui';\n\ninterface VariableTextFieldProps {\n value?: string;\n defaultValue?: string;\n name?: string;\n placeholder?: string;\n onChange?: (event: FormEvent<HTMLInputElement>) => void;\n testId?: string;\n required?: boolean;\n width?: number;\n grow?: boolean;\n onBlur?: (event: FormEvent<HTMLInputElement>) => void;\n maxLength?: number;\n description?: React.ReactNode;\n invalid?: boolean;\n error?: React.ReactNode;\n}\n\nexport function VariableTextField({\n value,\n defaultValue,\n name,\n placeholder = '',\n onChange,\n testId,\n width,\n required,\n onBlur,\n grow,\n description,\n invalid,\n error,\n maxLength,\n}: PropsWithChildren<VariableTextFieldProps>) {\n const id = useId(name);\n\n return (\n <Field label={name} description={description} invalid={invalid} error={error} htmlFor={id}>\n <Input\n type=\"text\"\n id={id}\n placeholder={placeholder}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n onBlur={onBlur}\n width={grow ? undefined : (width ?? 30)}\n data-testid={testId}\n maxLength={maxLength}\n required={required}\n />\n </Field>\n );\n}\n","import { css } from '@emotion/css';\n\n/**\n * A simple \"flex: 1;\" component you can use in combination with the Stack component(s), like so\n *\n * <Stack direction=\"row\">\n * <span>hello</span>\n * <Spacer />\n * <span>world</span>\n * </Stack>\n */\n\nexport const Spacer = () => (\n <span\n className={css({\n flex: 1,\n })}\n />\n);\n","import { css } from '@emotion/css';\n\nimport { t } from '@grafana/i18n';\nimport { Badge, Icon, Tooltip, useStyles2 } from '@grafana/ui';\nimport { UpdatedBy } from 'app/types/unified-alerting-dto';\n\nimport { getSpecialUidsDisplayMap } from './versions-utils';\n\nexport const UpdatedByUser = ({ user }: { user: UpdatedBy | null | undefined }) => {\n const unknown = t('alerting.alertVersionHistory.unknown', 'Unknown');\n const SPECIAL_UID_MAP = getSpecialUidsDisplayMap();\n const styles = useStyles2(getStyles);\n\n const unknownCase = (\n <Tooltip\n content={t(\n 'alerting.alertVersionHistory.unknown-change-description',\n 'This update was made prior to the implementation of alert rule version history. The user who made the change is not tracked, but future changes will include the user'\n )}\n >\n <span>\n <span className={styles.underline}>{unknown} </span>\n <Icon name=\"question-circle\" />\n </span>\n </Tooltip>\n );\n if (!user) {\n return unknownCase;\n }\n const specialCase = SPECIAL_UID_MAP[user.uid];\n if (specialCase || !user) {\n return (\n <Tooltip content={specialCase.tooltipContent}>\n <span>\n <Badge\n className={styles.badge}\n text={specialCase.name}\n color={specialCase.badgeColor}\n icon={specialCase.icon}\n />\n </span>\n </Tooltip>\n );\n }\n if (user.name) {\n return user.name;\n }\n if (user.uid) {\n return t('alerting.alertVersionHistory.user-id', 'User ID {{uid}}', { uid: user.uid });\n }\n return unknownCase;\n};\n\nconst getStyles = () => {\n return {\n badge: css({ cursor: 'help' }),\n underline: css({\n textDecoration: 'underline dotted',\n textUnderlineOffset: '5px',\n cursor: 'help',\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { SVGProps } from 'react';\nimport SVG from 'react-inlinesvg';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\nimport grotCTASvg from './grot-cta.svg';\n\nexport interface Props {\n width?: SVGProps<SVGElement>['width'];\n height?: SVGProps<SVGElement>['height'];\n}\n\nexport const GrotCTA = ({ width = 'auto', height }: Props) => {\n const styles = useStyles2(getStyles);\n\n return <SVG src={grotCTASvg} className={styles.svg} height={height} width={width} />;\n};\n\nGrotCTA.displayName = 'GrotCTA';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n svg: css({\n '#grot-cta-cactus-1, #grot-cta-cactus-2': {\n fill: theme.isDark ? '#58558c' : '#c9c5f4',\n },\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { SVGProps, useEffect, useRef } from 'react';\nimport SVG from 'react-inlinesvg';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\nimport notFoundSvg from './grot-not-found.svg';\n\nconst MIN_ARM_ROTATION = -20;\nconst MAX_ARM_ROTATION = 5;\nconst MIN_ARM_TRANSLATION = -5;\nconst MAX_ARM_TRANSLATION = 5;\n\nexport interface Props {\n width?: SVGProps<SVGElement>['width'];\n height?: SVGProps<SVGElement>['height'];\n}\n\nexport const GrotNotFound = ({ width = 'auto', height }: Props) => {\n const svgRef = useRef<SVGElement>(null);\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n const handleMouseMove = (event: MouseEvent) => {\n // don't apply animation if reduced motion preference is set\n if (window.matchMedia('(prefers-reduced-motion: reduce').matches) {\n return;\n }\n\n const grotArm = svgRef.current?.querySelector('#grot-not-found-arm');\n const grotMagnifier = svgRef.current?.querySelector('#grot-not-found-magnifier');\n\n const { clientX, clientY } = event;\n const { innerWidth, innerHeight } = window;\n const heightRatio = clientY / innerHeight;\n const widthRatio = clientX / innerWidth;\n const rotation = getIntermediateValue(heightRatio, MIN_ARM_ROTATION, MAX_ARM_ROTATION);\n const translation = getIntermediateValue(widthRatio, MIN_ARM_TRANSLATION, MAX_ARM_TRANSLATION);\n\n window.requestAnimationFrame(() => {\n grotArm?.setAttribute('style', `transform: rotate(${rotation}deg) translateX(${translation}%)`);\n grotMagnifier?.setAttribute('style', `transform: rotate(${rotation}deg) translateX(${translation}%)`);\n });\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n };\n }, []);\n\n return <SVG innerRef={svgRef} src={notFoundSvg} className={styles.svg} height={height} width={width} />;\n};\n\nGrotNotFound.displayName = 'GrotNotFound';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n svg: css({\n '#grot-not-found-arm, #grot-not-found-magnifier': {\n transformOrigin: 'center',\n },\n }),\n };\n};\n\n/**\n * Given a start value, end value, and a ratio, return the intermediate value\n * Works with negative and inverted start/end values\n */\nconst getIntermediateValue = (ratio: number, start: number, end: number) => {\n const value = ratio * (end - start) + start;\n return value;\n};\n","import { css } from '@emotion/css';\nimport { AriaRole, ReactNode } from 'react';\nimport * as React from 'react';\nimport SVG from 'react-inlinesvg';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Box } from '../Layout/Box/Box';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { Text } from '../Text/Text';\n\nimport { GrotCTA } from './GrotCTA/GrotCTA';\nimport { GrotNotFound } from './GrotNotFound/GrotNotFound';\nimport GrotCompleted from './grot-completed.svg';\n\ninterface Props {\n /**\n * Provide a button to render below the message\n */\n button?: ReactNode;\n hideImage?: boolean;\n /**\n * Override the default image for the variant\n */\n image?: ReactNode;\n /**\n * Message to display to the user\n */\n message: string;\n /**\n * Which variant to use. Affects the default image shown.\n */\n variant: 'call-to-action' | 'not-found' | 'completed';\n /**\n * Use to set `alert` when needed. See documentation for the use case\n */\n role?: AriaRole;\n}\n\n/**\n * The EmptyState component consists of a message and optionally an image, button, and additional information.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-emptystate--docs\n */\nexport const EmptyState = ({\n button,\n children,\n image,\n message,\n hideImage = false,\n variant,\n role,\n}: React.PropsWithChildren<Props>) => {\n const styles = useStyles2(getStyles);\n const imageToShow = image ?? getDefaultImageForVariant(variant);\n\n return (\n <Box paddingY={4} display=\"flex\" direction=\"column\" alignItems=\"center\" role={role}>\n <div className={styles.container}>\n {!hideImage && imageToShow}\n <Stack direction=\"column\" alignItems=\"center\">\n <Text variant=\"h4\" textAlignment=\"center\">\n {message}\n </Text>\n {children && (\n <Text color=\"secondary\" textAlignment=\"center\">\n {children}\n </Text>\n )}\n </Stack>\n {button}\n </div>\n </Box>\n );\n};\n\nfunction getDefaultImageForVariant(variant: Props['variant']) {\n switch (variant) {\n case 'call-to-action': {\n return <GrotCTA width={300} />;\n }\n case 'not-found': {\n return <GrotNotFound width={300} />;\n }\n case 'completed': {\n return <SVG src={GrotCompleted} width={300} />;\n }\n default: {\n throw new Error(`Unknown variant: ${variant}`);\n }\n }\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: theme.spacing(4),\n maxWidth: '600px',\n }),\n});\n","import { PureComponent, createRef } from 'react';\n\nimport { JsonExplorer, JsonExplorerConfig } from './json_explorer/json_explorer'; // We have made some monkey-patching of json-formatter-js so we can't switch right now\n\ninterface Props {\n className?: string;\n json: {};\n config?: JsonExplorerConfig;\n open?: number;\n onDidRender?: (formattedJson: {}) => void;\n}\n\nexport class JSONFormatter extends PureComponent<Props> {\n private wrapperRef = createRef<HTMLDivElement>();\n\n static defaultProps = {\n open: 3,\n config: {\n animateOpen: true,\n },\n };\n\n componentDidMount() {\n this.renderJson();\n }\n\n componentDidUpdate() {\n this.renderJson();\n }\n\n renderJson = () => {\n const { json, config, open, onDidRender } = this.props;\n const wrapperEl = this.wrapperRef.current;\n const formatter = new JsonExplorer(json, open, config);\n // @ts-ignore\n const hasChildren: boolean = wrapperEl.hasChildNodes();\n if (hasChildren) {\n // @ts-ignore\n wrapperEl.replaceChild(formatter.render(), wrapperEl.lastChild);\n } else {\n // @ts-ignore\n wrapperEl.appendChild(formatter.render());\n }\n\n if (onDidRender) {\n onDidRender(formatter.json);\n }\n };\n\n render() {\n const { className } = this.props;\n return <div className={className} ref={this.wrapperRef} />;\n }\n}\n","import { css } from '@emotion/css';\nimport { HTMLProps, useEffect } from 'react';\nimport * as React from 'react';\nimport { useForm, Mode, DefaultValues, SubmitHandler, FieldValues } from 'react-hook-form';\n\nimport { FormAPI } from '../../types/forms';\n\ninterface FormProps<T extends FieldValues> extends Omit<HTMLProps<HTMLFormElement>, 'onSubmit' | 'children'> {\n validateOn?: Mode;\n validateOnMount?: boolean;\n validateFieldsOnMount?: string | string[];\n defaultValues?: DefaultValues<T>;\n onSubmit: SubmitHandler<T>;\n children: (api: FormAPI<T>) => React.ReactNode;\n /** Sets max-width for container. Use it instead of setting individual widths on inputs.*/\n maxWidth?: number | 'none';\n}\n\n/**\n * @deprecated use the `useForm` hook from react-hook-form instead\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-form--docs\n */\nexport function Form<T extends FieldValues>({\n defaultValues,\n onSubmit,\n validateOnMount = false,\n validateFieldsOnMount,\n children,\n validateOn = 'onSubmit',\n maxWidth = 600,\n ...htmlProps\n}: FormProps<T>) {\n const { handleSubmit, trigger, formState, ...rest } = useForm<T>({\n mode: validateOn,\n defaultValues,\n });\n\n useEffect(() => {\n if (validateOnMount) {\n //@ts-expect-error\n trigger(validateFieldsOnMount);\n }\n }, [trigger, validateFieldsOnMount, validateOnMount]);\n\n return (\n <form\n className={css({\n maxWidth: maxWidth !== 'none' ? maxWidth + 'px' : maxWidth,\n width: '100%',\n })}\n onSubmit={handleSubmit(onSubmit)}\n {...htmlProps}\n >\n {children({ errors: formState.errors, formState, trigger, ...rest })}\n </form>\n );\n}\n","import { TypedVariableModel } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport {\n AnnotationQuery,\n DataQuery,\n DataSourceRef,\n Panel,\n RowPanel,\n VariableModel,\n VariableType,\n FieldConfigSource as FieldConfigSourceV1,\n FieldColorModeId as FieldColorModeIdV1,\n ThresholdsMode as ThresholdsModeV1,\n MappingType as MappingTypeV1,\n SpecialValueMatch as SpecialValueMatchV1,\n} from '@grafana/schema';\nimport {\n AnnotationQueryKind,\n Spec as DashboardV2Spec,\n DataLink,\n DatasourceVariableKind,\n defaultSpec as defaultDashboardV2Spec,\n defaultFieldConfigSource,\n defaultTimeSettingsSpec,\n PanelQueryKind,\n QueryVariableKind,\n TransformationKind,\n FieldColorModeId,\n FieldConfigSource,\n ThresholdsMode,\n SpecialValueMatch,\n AdhocVariableKind,\n CustomVariableKind,\n ConstantVariableKind,\n IntervalVariableKind,\n TextVariableKind,\n GroupByVariableKind,\n LibraryPanelKind,\n PanelKind,\n GridLayoutItemKind,\n defaultDataQueryKind,\n RowsLayoutRowKind,\n GridLayoutKind,\n} from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { DashboardLink, DataTransformerConfig } from '@grafana/schema/src/raw/dashboard/x/dashboard_types.gen';\nimport { isWeekStart, WeekStart } from '@grafana/ui';\nimport {\n AnnoKeyCreatedBy,\n AnnoKeyDashboardGnetId,\n AnnoKeyDashboardIsSnapshot,\n AnnoKeyDashboardSnapshotOriginalUrl,\n AnnoKeyFolder,\n AnnoKeySlug,\n AnnoKeyUpdatedBy,\n AnnoKeyUpdatedTimestamp,\n DeprecatedInternalId,\n ObjectMeta,\n} from 'app/features/apiserver/types';\nimport { transformV2ToV1AnnotationQuery } from 'app/features/dashboard-scene/serialization/annotations';\nimport { GRID_ROW_HEIGHT } from 'app/features/dashboard-scene/serialization/const';\nimport { validateFiltersOrigin } from 'app/features/dashboard-scene/serialization/sceneVariablesSetToVariables';\nimport { TypedVariableModelV2 } from 'app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene';\nimport { getDefaultDataSourceRef } from 'app/features/dashboard-scene/serialization/transformSceneToSaveModelSchemaV2';\nimport {\n transformCursorSyncV2ToV1,\n transformSortVariableToEnumV1,\n transformVariableHideToEnumV1,\n transformVariableRefreshToEnumV1,\n} from 'app/features/dashboard-scene/serialization/transformToV1TypesUtils';\nimport {\n LEGACY_STRING_VALUE_KEY,\n transformCursorSynctoEnum,\n transformDataTopic,\n transformSortVariableToEnum,\n transformVariableHideToEnum,\n transformVariableRefreshToEnum,\n} from 'app/features/dashboard-scene/serialization/transformToV2TypesUtils';\nimport { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';\n\nimport { DashboardWithAccessInfo } from './types';\nimport { isDashboardResource, isDashboardV0Spec, isDashboardV2Resource, isDashboardV2Spec } from './utils';\n\nexport function ensureV2Response(\n dto: DashboardDTO | DashboardWithAccessInfo<DashboardDataDTO> | DashboardWithAccessInfo<DashboardV2Spec>\n): DashboardWithAccessInfo<DashboardV2Spec> {\n if (isDashboardV2Resource(dto)) {\n return dto;\n }\n let dashboard: DashboardDataDTO;\n\n if (isDashboardResource(dto)) {\n dashboard = dto.spec;\n } else {\n dashboard = dto.dashboard;\n }\n\n let accessMeta: DashboardWithAccessInfo<DashboardV2Spec>['access'];\n let annotationsMeta: DashboardWithAccessInfo<DashboardV2Spec>['metadata']['annotations'];\n let labelsMeta: DashboardWithAccessInfo<DashboardV2Spec>['metadata']['labels'];\n let creationTimestamp;\n\n if (isDashboardResource(dto)) {\n accessMeta = dto.access;\n annotationsMeta = {\n ...dto.metadata.annotations,\n [AnnoKeyDashboardGnetId]: dashboard.gnetId ?? undefined,\n };\n creationTimestamp = dto.metadata.creationTimestamp;\n labelsMeta = {\n [DeprecatedInternalId]: dto.metadata.labels?.[DeprecatedInternalId],\n };\n } else {\n accessMeta = {\n url: dto.meta.url,\n slug: dto.meta.slug,\n canSave: dto.meta.canSave,\n canEdit: dto.meta.canEdit,\n canDelete: dto.meta.canDelete,\n canShare: dto.meta.canShare,\n canStar: dto.meta.canStar,\n canAdmin: dto.meta.canAdmin,\n annotationsPermissions: dto.meta.annotationsPermissions,\n };\n annotationsMeta = {\n [AnnoKeyCreatedBy]: dto.meta.createdBy,\n [AnnoKeyUpdatedBy]: dto.meta.updatedBy,\n [AnnoKeyUpdatedTimestamp]: dto.meta.updated,\n [AnnoKeyFolder]: dto.meta.folderUid,\n [AnnoKeySlug]: dto.meta.slug,\n };\n if (dashboard.gnetId) {\n annotationsMeta[AnnoKeyDashboardGnetId] = dashboard.gnetId;\n }\n if (dto.meta.isSnapshot) {\n // FIXME -- lets not put non-annotation data in annotations!\n annotationsMeta[AnnoKeyDashboardIsSnapshot] = 'true';\n }\n\n creationTimestamp = dto.meta.created;\n labelsMeta = {\n [DeprecatedInternalId]: dashboard.id?.toString() ?? undefined,\n };\n }\n\n if (annotationsMeta?.[AnnoKeyDashboardIsSnapshot]) {\n annotationsMeta[AnnoKeyDashboardSnapshotOriginalUrl] = dashboard.snapshot?.originalUrl;\n }\n\n const metadata = {\n creationTimestamp: creationTimestamp || '', // TODO verify this empty string is valid\n name: dashboard.uid,\n resourceVersion: dashboard.version?.toString() || '0',\n annotations: annotationsMeta,\n labels: labelsMeta,\n };\n\n if (!isDashboardResource(dto)) {\n if (isDashboardV2Spec(dto.dashboard)) {\n // sometimes we can have a v2 spec returned through legacy api like public dashboard\n // in that case we need to return dashboard as it is, since the conversion is not needed\n return {\n apiVersion: 'v2beta1',\n kind: 'DashboardWithAccessInfo',\n metadata,\n spec: dto.dashboard,\n access: accessMeta,\n };\n }\n }\n\n const timeSettingsDefaults = defaultTimeSettingsSpec();\n const dashboardDefaults = defaultDashboardV2Spec();\n const [elements, layout] = getElementsFromPanels(dashboard.panels || []);\n // @ts-expect-error - dashboard.templating.list is VariableModel[] and we need TypedVariableModel[] here\n // that would allow accessing unique properties for each variable type that the API returns\n const variables = getVariables(dashboard.templating?.list || []);\n const annotations = getAnnotations(dashboard.annotations?.list || []);\n\n const spec: DashboardV2Spec = {\n title: dashboard.title,\n description: dashboard.description,\n tags: dashboard.tags ?? [],\n cursorSync: transformCursorSynctoEnum(dashboard.graphTooltip),\n preload: dashboard.preload || dashboardDefaults.preload,\n liveNow: dashboard.liveNow,\n editable: dashboard.editable,\n revision: dashboard.revision,\n timeSettings: {\n from: dashboard.time?.from || timeSettingsDefaults.from,\n to: dashboard.time?.to || timeSettingsDefaults.to,\n timezone: dashboard.timezone || timeSettingsDefaults.timezone,\n autoRefresh: dashboard.refresh || timeSettingsDefaults.autoRefresh,\n autoRefreshIntervals: dashboard.timepicker?.refresh_intervals || timeSettingsDefaults.autoRefreshIntervals,\n fiscalYearStartMonth: dashboard.fiscalYearStartMonth || timeSettingsDefaults.fiscalYearStartMonth,\n hideTimepicker: dashboard.timepicker?.hidden || timeSettingsDefaults.hideTimepicker,\n quickRanges: dashboard.timepicker?.quick_ranges,\n weekStart: getWeekStart(dashboard.weekStart, timeSettingsDefaults.weekStart),\n nowDelay: dashboard.timepicker?.nowDelay || timeSettingsDefaults.nowDelay,\n },\n links: dashboard.links || [],\n annotations,\n variables,\n elements,\n layout,\n };\n\n return {\n apiVersion: 'v2beta1',\n kind: 'DashboardWithAccessInfo',\n metadata,\n spec,\n access: accessMeta,\n };\n}\n\nexport function ensureV1Response(\n dashboard: DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec> | DashboardWithAccessInfo<DashboardDataDTO>\n): DashboardDTO {\n // if dashboard is not on v1 schema or v2 schema, return as is\n if (!isDashboardResource(dashboard)) {\n return dashboard;\n }\n\n const spec = dashboard.spec;\n // if dashboard is on v1 schema\n if (isDashboardV0Spec(spec)) {\n return {\n meta: {\n ...dashboard.access,\n isNew: false,\n isFolder: false,\n uid: dashboard.metadata.name,\n k8s: dashboard.metadata,\n version: dashboard.metadata.generation,\n },\n dashboard: spec,\n };\n } else {\n // if dashboard is on v2 schema convert to v1 schema\n return {\n meta: {\n created: dashboard.metadata.creationTimestamp,\n createdBy: dashboard.metadata.annotations?.[AnnoKeyCreatedBy] ?? '',\n updated: dashboard.metadata.annotations?.[AnnoKeyUpdatedTimestamp],\n updatedBy: dashboard.metadata.annotations?.[AnnoKeyUpdatedBy],\n folderUid: dashboard.metadata.annotations?.[AnnoKeyFolder],\n slug: dashboard.metadata.annotations?.[AnnoKeySlug],\n url: dashboard.access.url,\n canAdmin: dashboard.access.canAdmin,\n canDelete: dashboard.access.canDelete,\n canEdit: dashboard.access.canEdit,\n canSave: dashboard.access.canSave,\n canShare: dashboard.access.canShare,\n canStar: dashboard.access.canStar,\n annotationsPermissions: dashboard.access.annotationsPermissions,\n },\n dashboard: transformDashboardV2SpecToV1(spec, dashboard.metadata),\n };\n }\n}\n\nexport const ResponseTransformers = {\n ensureV2Response,\n ensureV1Response,\n};\n\nfunction getElementsFromPanels(\n panels: Array<Panel | RowPanel>\n): [DashboardV2Spec['elements'], DashboardV2Spec['layout']] {\n const elements: DashboardV2Spec['elements'] = {};\n const layout: DashboardV2Spec['layout'] = {\n kind: 'GridLayout',\n spec: {\n items: [],\n },\n };\n\n if (!panels) {\n return [elements, layout];\n }\n\n if (panels.some(isRowPanel)) {\n return convertToRowsLayout(panels);\n }\n\n // iterate over panels\n for (const p of panels) {\n const [element, elementName] = buildElement(p);\n\n elements[elementName] = element;\n\n layout.spec.items.push(buildGridItemKind(p, elementName));\n }\n\n return [elements, layout];\n}\n\nfunction convertToRowsLayout(\n panels: Array<Panel | RowPanel>\n): [DashboardV2Spec['elements'], DashboardV2Spec['layout']] {\n let currentRow: RowsLayoutRowKind | null = null;\n let legacyRowY = 0;\n const elements: DashboardV2Spec['elements'] = {};\n const layout: DashboardV2Spec['layout'] = {\n kind: 'RowsLayout',\n spec: {\n rows: [],\n },\n };\n\n for (const p of panels) {\n if (isRowPanel(p)) {\n legacyRowY = p.gridPos!.y;\n if (currentRow) {\n // Flush current row to layout before we create a new one\n layout.spec.rows.push(currentRow);\n }\n\n // If the row is collapsed it will have panels\n const rowElements = [];\n for (const panel of p.panels || []) {\n const [element, name] = buildElement(panel);\n elements[name] = element;\n rowElements.push(buildGridItemKind(panel, name, yOffsetInRows(panel, legacyRowY)));\n }\n\n currentRow = buildRowKind(p, rowElements);\n } else {\n const [element, elementName] = buildElement(p);\n\n elements[elementName] = element;\n\n if (currentRow) {\n // Collect panels to current layout row\n if (currentRow.spec.layout.kind === 'GridLayout') {\n currentRow.spec.layout.spec.items.push(buildGridItemKind(p, elementName, yOffsetInRows(p, legacyRowY)));\n } else {\n throw new Error('RowsLayoutRow from legacy row must have a GridLayout');\n }\n } else {\n // This is the first row. In V1 these items could live outside of a row. In V2 they will be in a row with header hidden so that it will look similar to V1.\n const grid: GridLayoutKind = {\n kind: 'GridLayout',\n spec: {\n items: [buildGridItemKind(p, elementName)],\n },\n };\n\n // Since this row does not exist in V1, we simulate it being outside of the grid above the first panel\n // The Y position does not matter for the rows layout, but it's used to calculate the position of the panels in the grid layout in the row.\n legacyRowY = -1;\n\n currentRow = {\n kind: 'RowsLayoutRow',\n spec: {\n collapse: false,\n title: '',\n hideHeader: true,\n layout: grid,\n },\n };\n }\n }\n }\n\n if (currentRow) {\n // Flush last row to layout\n layout.spec.rows.push(currentRow);\n }\n return [elements, layout];\n}\n\nfunction isRowPanel(panel: Panel | RowPanel): panel is RowPanel {\n return panel.type === 'row';\n}\n\nfunction getWeekStart(weekStart?: string, defaultWeekStart?: WeekStart): WeekStart | undefined {\n if (!weekStart || !isWeekStart(weekStart)) {\n return defaultWeekStart;\n }\n return weekStart;\n}\n\nfunction buildRowKind(p: RowPanel, elements: GridLayoutItemKind[]): RowsLayoutRowKind {\n return {\n kind: 'RowsLayoutRow',\n spec: {\n collapse: p.collapsed,\n title: p.title ?? '',\n repeat: p.repeat ? { value: p.repeat, mode: 'variable' } : undefined,\n layout: {\n kind: 'GridLayout',\n spec: {\n items: elements,\n },\n },\n },\n };\n}\n\nfunction buildGridItemKind(p: Panel, elementName: string, yOverride?: number): GridLayoutItemKind {\n return {\n kind: 'GridLayoutItem',\n spec: {\n x: p.gridPos!.x,\n y: yOverride ?? p.gridPos!.y,\n width: p.gridPos!.w,\n height: p.gridPos!.h,\n repeat: p.repeat\n ? { value: p.repeat, mode: 'variable', direction: p.repeatDirection, maxPerRow: p.maxPerRow }\n : undefined,\n element: {\n kind: 'ElementReference',\n name: elementName!,\n },\n },\n };\n}\n\nfunction yOffsetInRows(p: Panel, rowY: number): number {\n return p.gridPos!.y - rowY - GRID_ROW_HEIGHT;\n}\n\nfunction buildElement(p: Panel): [PanelKind | LibraryPanelKind, string] {\n const element_identifier = `panel-${p.id}`;\n\n if (p.libraryPanel) {\n // LibraryPanelKind\n const panelKind: LibraryPanelKind = {\n kind: 'LibraryPanel',\n spec: {\n libraryPanel: {\n uid: p.libraryPanel.uid,\n name: p.libraryPanel.name,\n },\n id: p.id!,\n title: p.title ?? '',\n },\n };\n\n return [panelKind, element_identifier];\n } else {\n // PanelKind\n const panelKind = buildPanelKind(p);\n return [panelKind, element_identifier];\n }\n}\n\nfunction getDefaultDatasourceType() {\n // if there is no default datasource, return 'grafana' as default\n return getDefaultDataSourceRef()?.type ?? 'grafana';\n}\n\nexport function getDefaultDatasource(): DataSourceRef {\n const configDefaultDS = getDefaultDataSourceRef() ?? { type: 'grafana', uid: '-- Grafana --' };\n\n if (configDefaultDS.uid && !configDefaultDS.apiVersion) {\n // get api version from config\n const dsInstance = config.datasources[configDefaultDS.uid];\n configDefaultDS.apiVersion = dsInstance.apiVersion ?? undefined;\n }\n\n return {\n apiVersion: configDefaultDS.apiVersion,\n type: configDefaultDS.type,\n uid: configDefaultDS.uid,\n };\n}\n\nexport function getPanelQueries(targets: DataQuery[], panelDatasource: DataSourceRef): PanelQueryKind[] {\n return targets.map((t) => {\n const { refId, hide, datasource, ...query } = t;\n const q: PanelQueryKind = {\n kind: 'PanelQuery',\n spec: {\n refId: t.refId,\n hidden: t.hide ?? false,\n query: {\n kind: 'DataQuery',\n version: defaultDataQueryKind().version,\n group: t.datasource?.type || panelDatasource.type!,\n datasource: {\n name: t.datasource?.uid || panelDatasource.uid!,\n },\n spec: {\n ...query,\n },\n },\n },\n };\n return q;\n });\n}\n\nexport function buildPanelKind(p: Panel): PanelKind {\n const queries = getPanelQueries((p.targets as unknown as DataQuery[]) || [], p.datasource || getDefaultDatasource());\n\n const transformations = getPanelTransformations(p.transformations || []);\n\n const panelKind: PanelKind = {\n kind: 'Panel',\n spec: {\n title: p.title || '',\n description: p.description || '',\n vizConfig: {\n kind: 'VizConfig',\n group: p.type,\n version: p.pluginVersion!,\n spec: {\n fieldConfig: (p.fieldConfig as any) || defaultFieldConfigSource(),\n options: p.options as any,\n },\n },\n links:\n p.links?.map<DataLink>((l) => ({\n title: l.title,\n url: l.url || '',\n targetBlank: l.targetBlank,\n })) || [],\n id: p.id!,\n data: {\n kind: 'QueryGroup',\n spec: {\n queries,\n transformations,\n queryOptions: {\n cacheTimeout: p.cacheTimeout,\n maxDataPoints: p.maxDataPoints,\n interval: p.interval,\n hideTimeOverride: p.hideTimeOverride,\n queryCachingTTL: p.queryCachingTTL,\n timeFrom: p.timeFrom,\n timeShift: p.timeShift,\n },\n },\n },\n },\n };\n return panelKind;\n}\n\nfunction getPanelTransformations(transformations: DataTransformerConfig[]): TransformationKind[] {\n return transformations.map((t) => {\n return {\n kind: t.id,\n spec: {\n ...t,\n topic: transformDataTopic(t.topic),\n },\n };\n });\n}\n\nfunction getVariables(vars: TypedVariableModel[]): DashboardV2Spec['variables'] {\n const variables: DashboardV2Spec['variables'] = [];\n for (const v of vars) {\n const commonProperties = {\n name: v.name,\n label: v.label,\n ...(v.description && { description: v.description }),\n skipUrlSync: Boolean(v.skipUrlSync),\n hide: transformVariableHideToEnum(v.hide),\n };\n\n let ds: DataSourceRef | undefined;\n let dsType: string | undefined;\n\n switch (v.type) {\n case 'query':\n let query = v.query || {};\n\n if (typeof query === 'string') {\n console.warn(\n 'Query variable query is a string which is deprecated in the schema v2. It should extend DataQuery'\n );\n query = {\n [LEGACY_STRING_VALUE_KEY]: query,\n };\n }\n\n const qv: QueryVariableKind = {\n kind: 'QueryVariable',\n spec: {\n ...commonProperties,\n multi: Boolean(v.multi),\n includeAll: Boolean(v.includeAll),\n ...(v.allValue && { allValue: v.allValue }),\n current: {\n value: v.current?.value,\n text: v.current?.text,\n },\n options: v.options || [],\n refresh: transformVariableRefreshToEnum(v.refresh),\n ...(v.datasource && { datasource: v.datasource }),\n regex: v.regex || '',\n sort: transformSortVariableToEnum(v.sort),\n query: {\n kind: 'DataQuery',\n version: defaultDataQueryKind().version,\n group: v.datasource?.type ?? getDefaultDatasourceType(),\n datasource: {\n name: v.datasource?.uid,\n },\n spec: query,\n },\n allowCustomValue: v.allowCustomValue ?? true,\n },\n };\n variables.push(qv);\n break;\n case 'datasource':\n let pluginId = getDefaultDatasourceType();\n\n if (v.query && typeof v.query === 'string') {\n pluginId = v.query;\n }\n\n const dv: DatasourceVariableKind = {\n kind: 'DatasourceVariable',\n spec: {\n ...commonProperties,\n multi: Boolean(v.multi),\n includeAll: Boolean(v.includeAll),\n ...(v.allValue && { allValue: v.allValue }),\n current: {\n value: v.current.value,\n text: v.current.text,\n },\n options: v.options || [],\n refresh: transformVariableRefreshToEnum(v.refresh),\n pluginId,\n regex: v.regex || '',\n allowCustomValue: v.allowCustomValue ?? true,\n },\n };\n variables.push(dv);\n break;\n case 'custom':\n const cv: CustomVariableKind = {\n kind: 'CustomVariable',\n spec: {\n ...commonProperties,\n query: v.query,\n current: {\n value: v.current.value,\n text: v.current.text,\n },\n options: v.options,\n multi: v.multi,\n includeAll: v.includeAll,\n ...(v.allValue && { allValue: v.allValue }),\n allowCustomValue: v.allowCustomValue ?? true,\n },\n };\n variables.push(cv);\n break;\n case 'adhoc':\n ds = v.datasource || getDefaultDatasource();\n dsType = ds.type ?? getDefaultDatasourceType();\n\n const av: AdhocVariableKind = {\n kind: 'AdhocVariable',\n group: dsType,\n spec: {\n ...commonProperties,\n baseFilters: validateFiltersOrigin(v.baseFilters) || [],\n filters: validateFiltersOrigin(v.filters) || [],\n defaultKeys: v.defaultKeys || [],\n allowCustomValue: v.allowCustomValue ?? true,\n },\n };\n\n if (ds.uid) {\n av.datasource = {\n name: ds.uid,\n };\n }\n\n variables.push(av);\n break;\n case 'constant':\n const cnts: ConstantVariableKind = {\n kind: 'ConstantVariable',\n spec: {\n ...commonProperties,\n current: {\n value: v.current.value,\n // Constant variable doesn't use text state\n text: v.current.value,\n },\n query: v.query,\n },\n };\n variables.push(cnts);\n break;\n case 'interval':\n const intrv: IntervalVariableKind = {\n kind: 'IntervalVariable',\n spec: {\n ...commonProperties,\n current: {\n value: v.current.value,\n // Interval variable doesn't use text state\n text: v.current.value,\n },\n query: v.query,\n refresh: 'onTimeRangeChanged',\n options: v.options,\n auto: v.auto,\n auto_min: v.auto_min,\n auto_count: v.auto_count,\n },\n };\n variables.push(intrv);\n break;\n case 'textbox':\n const tx: TextVariableKind = {\n kind: 'TextVariable',\n spec: {\n ...commonProperties,\n current: {\n value: v.current.value,\n // Text variable doesn't use text state\n text: v.current.value,\n },\n query: v.query,\n },\n };\n variables.push(tx);\n break;\n case 'groupby':\n ds = v.datasource || getDefaultDatasource();\n dsType = ds.type ?? getDefaultDatasourceType();\n\n const gb: GroupByVariableKind = {\n kind: 'GroupByVariable',\n group: dsType,\n spec: {\n ...commonProperties,\n options: v.options,\n current: {\n value: v.current.value,\n text: v.current.text,\n },\n multi: v.multi,\n },\n };\n\n if (ds.uid) {\n gb.datasource = {\n name: ds.uid,\n };\n }\n\n variables.push(gb);\n break;\n default:\n // do not throw error, just log it\n console.error(`Variable transformation not implemented: ${v.type}`);\n }\n }\n return variables;\n}\n\nfunction getAnnotations(annotations: AnnotationQuery[]): DashboardV2Spec['annotations'] {\n return annotations.map((a) => {\n const aq: AnnotationQueryKind = {\n kind: 'AnnotationQuery',\n spec: {\n name: a.name,\n ...(a.datasource && { datasource: a.datasource }),\n enable: a.enable,\n hide: Boolean(a.hide),\n iconColor: a.iconColor,\n builtIn: Boolean(a.builtIn),\n query: {\n kind: 'DataQuery',\n version: defaultDataQueryKind().version,\n group: a.datasource?.type || getDefaultDatasourceType(),\n datasource: {\n name: a.datasource?.uid,\n },\n spec: {\n ...a.target,\n },\n },\n filter: a.filter,\n },\n };\n return aq;\n });\n}\n\nfunction getVariablesV1(vars: DashboardV2Spec['variables']): VariableModel[] {\n const variables: VariableModel[] = [];\n\n for (const v of vars) {\n const commonProperties = {\n name: v.spec.name,\n label: v.spec.label,\n ...(v.spec.description && { description: v.spec.description }),\n skipUrlSync: v.spec.skipUrlSync,\n hide: transformVariableHideToEnumV1(v.spec.hide),\n type: transformToV1VariableTypes(v),\n };\n\n switch (v.kind) {\n case 'QueryVariable':\n const qv: VariableModel = {\n ...commonProperties,\n current: v.spec.current,\n options: v.spec.options,\n query:\n LEGACY_STRING_VALUE_KEY in v.spec.query.spec\n ? v.spec.query.spec[LEGACY_STRING_VALUE_KEY]\n : v.spec.query.spec,\n datasource: {\n type: v.spec.query?.spec.group,\n uid: v.spec.query?.spec.datasource?.name,\n },\n sort: transformSortVariableToEnumV1(v.spec.sort),\n refresh: transformVariableRefreshToEnumV1(v.spec.refresh),\n regex: v.spec.regex,\n allValue: v.spec.allValue,\n includeAll: v.spec.includeAll,\n multi: v.spec.multi,\n // @ts-expect-error - definition is not part of v1 VariableModel\n definition: v.spec.definition,\n };\n variables.push(qv);\n break;\n case 'DatasourceVariable':\n const dv: VariableModel = {\n ...commonProperties,\n current: v.spec.current,\n options: [],\n regex: v.spec.regex,\n refresh: transformVariableRefreshToEnumV1(v.spec.refresh),\n query: v.spec.pluginId,\n multi: v.spec.multi,\n allValue: v.spec.allValue,\n includeAll: v.spec.includeAll,\n };\n variables.push(dv);\n break;\n case 'CustomVariable':\n const cv: VariableModel = {\n ...commonProperties,\n current: {\n text: v.spec.current.value,\n value: v.spec.current.value,\n },\n options: v.spec.options,\n query: v.spec.query,\n multi: v.spec.multi,\n allValue: v.spec.allValue,\n includeAll: v.spec.includeAll,\n };\n variables.push(cv);\n break;\n case 'ConstantVariable':\n const constant: VariableModel = {\n ...commonProperties,\n current: {\n text: v.spec.current.value,\n value: v.spec.current.value,\n },\n hide: transformVariableHideToEnumV1(v.spec.hide),\n // @ts-expect-error\n query: v.spec.current.value,\n };\n variables.push(constant);\n break;\n case 'IntervalVariable':\n const iv: VariableModel = {\n ...commonProperties,\n current: {\n text: v.spec.current.value,\n value: v.spec.current.value,\n },\n hide: transformVariableHideToEnumV1(v.spec.hide),\n query: v.spec.query,\n refresh: transformVariableRefreshToEnumV1(v.spec.refresh),\n options: v.spec.options,\n // @ts-expect-error\n auto: v.spec.auto,\n auto_min: v.spec.auto_min,\n auto_count: v.spec.auto_count,\n };\n variables.push(iv);\n break;\n case 'TextVariable':\n const current = {\n text: v.spec.current.value,\n value: v.spec.current.value,\n };\n\n const tv: VariableModel = {\n ...commonProperties,\n current: {\n text: v.spec.current.value,\n value: v.spec.current.value,\n },\n options: [{ ...current, selected: true }],\n query: v.spec.query,\n };\n variables.push(tv);\n break;\n case 'GroupByVariable':\n const gv: VariableModel = {\n ...commonProperties,\n datasource: {\n uid: v.datasource?.name,\n type: v.group,\n },\n current: v.spec.current,\n options: v.spec.options,\n };\n variables.push(gv);\n break;\n case 'AdhocVariable':\n const av: VariableModel = {\n ...commonProperties,\n datasource: {\n uid: v.datasource?.name,\n type: v.group,\n },\n // @ts-expect-error\n baseFilters: v.spec.baseFilters,\n filters: v.spec.filters,\n defaultKeys: v.spec.defaultKeys,\n };\n variables.push(av);\n break;\n default:\n // do not throw error, just log it\n console.error(`Variable transformation not implemented: ${v}`);\n }\n }\n return variables;\n}\n\ninterface LibraryPanelDTO extends Pick<Panel, 'libraryPanel' | 'id' | 'title' | 'gridPos' | 'type'> {}\n\nfunction getPanelsV1(\n panels: DashboardV2Spec['elements'],\n layout: DashboardV2Spec['layout']\n): Array<Panel | LibraryPanelDTO> {\n const panelsV1: Array<Panel | LibraryPanelDTO | RowPanel> = [];\n\n let maxPanelId = 0;\n\n if (layout.kind !== 'GridLayout') {\n throw new Error('Cannot convert non-GridLayout layout to v1');\n }\n\n for (const item of layout.spec.items) {\n const panel = panels[item.spec.element.name];\n const v1Panel = transformV2PanelToV1Panel(panel, item);\n panelsV1.push(v1Panel);\n if (v1Panel.id ?? 0 > maxPanelId) {\n maxPanelId = v1Panel.id ?? 0;\n }\n }\n\n // Update row panel ids to be unique\n for (const panel of panelsV1) {\n if (panel.type === 'row' && panel.id === -1) {\n panel.id = ++maxPanelId;\n }\n }\n return panelsV1;\n}\n\nfunction transformV2PanelToV1Panel(\n p: PanelKind | LibraryPanelKind,\n layoutElement: GridLayoutItemKind,\n yOverride?: number\n): Panel | LibraryPanelDTO {\n const { x, y, width, height, repeat } = layoutElement?.spec || { x: 0, y: 0, width: 0, height: 0 };\n const gridPos = { x, y: yOverride ?? y, w: width, h: height };\n if (p.kind === 'Panel') {\n const panel = p.spec;\n return {\n id: panel.id,\n type: panel.vizConfig.group,\n title: panel.title,\n description: panel.description,\n fieldConfig: transformMappingsToV1(panel.vizConfig.spec.fieldConfig),\n options: panel.vizConfig.spec.options,\n pluginVersion: panel.vizConfig.version,\n links:\n // @ts-expect-error - Panel link is wrongly typed as DashboardLink\n panel.links?.map<DashboardLink>((l) => ({\n title: l.title,\n url: l.url,\n ...(l.targetBlank && { targetBlank: l.targetBlank }),\n })) || [],\n targets: panel.data.spec.queries.map((q) => {\n return {\n refId: q.spec.refId,\n hide: q.spec.hidden,\n datasource: {\n uid: q.spec.query.spec.datasource?.uid,\n type: q.spec.query.spec.group,\n },\n ...q.spec.query.spec,\n };\n }),\n transformations: panel.data.spec.transformations.map((t) => t.spec),\n gridPos,\n cacheTimeout: panel.data.spec.queryOptions.cacheTimeout,\n maxDataPoints: panel.data.spec.queryOptions.maxDataPoints,\n interval: panel.data.spec.queryOptions.interval,\n hideTimeOverride: panel.data.spec.queryOptions.hideTimeOverride,\n queryCachingTTL: panel.data.spec.queryOptions.queryCachingTTL,\n timeFrom: panel.data.spec.queryOptions.timeFrom,\n timeShift: panel.data.spec.queryOptions.timeShift,\n transparent: panel.transparent,\n ...(repeat?.value && { repeat: repeat.value }),\n ...(repeat?.direction && { repeatDirection: repeat.direction }),\n ...(repeat?.maxPerRow && { maxPerRow: repeat.maxPerRow }),\n };\n } else if (p.kind === 'LibraryPanel') {\n const panel = p.spec;\n return {\n id: panel.id,\n title: panel.title,\n gridPos,\n libraryPanel: {\n uid: panel.libraryPanel.uid,\n name: panel.libraryPanel.name,\n },\n type: 'library-panel-ref',\n };\n } else {\n throw new Error(`Unknown element kind: ${p}`);\n }\n}\n\nexport function transformMappingsToV1(fieldConfig: FieldConfigSource): FieldConfigSourceV1 {\n const getThresholdsMode = (mode: ThresholdsMode): ThresholdsModeV1 => {\n switch (mode) {\n case 'absolute':\n return ThresholdsModeV1.Absolute;\n case 'percentage':\n return ThresholdsModeV1.Percentage;\n default:\n return ThresholdsModeV1.Absolute;\n }\n };\n\n const transformedDefaults: any = {\n ...fieldConfig.defaults,\n };\n\n if (fieldConfig.defaults.mappings) {\n transformedDefaults.mappings = fieldConfig.defaults.mappings.map((mapping) => {\n switch (mapping.type) {\n case 'value':\n return {\n ...mapping,\n type: MappingTypeV1.ValueToText,\n };\n case 'range':\n return {\n ...mapping,\n type: MappingTypeV1.RangeToText,\n };\n case 'regex':\n return {\n ...mapping,\n type: MappingTypeV1.RegexToText,\n };\n case 'special':\n return {\n ...mapping,\n options: {\n ...mapping.options,\n match: transformSpecialValueMatchToV1(mapping.options.match),\n },\n type: MappingTypeV1.SpecialValue,\n };\n default:\n return mapping;\n }\n });\n }\n\n if (fieldConfig.defaults.thresholds) {\n transformedDefaults.thresholds = {\n ...fieldConfig.defaults.thresholds,\n mode: getThresholdsMode(fieldConfig.defaults.thresholds.mode),\n };\n }\n\n if (fieldConfig.defaults.color?.mode) {\n transformedDefaults.color = {\n ...fieldConfig.defaults.color,\n mode: colorIdToEnumv1(fieldConfig.defaults.color.mode),\n };\n }\n\n return {\n ...fieldConfig,\n defaults: transformedDefaults,\n };\n}\n\nfunction colorIdToEnumv1(colorId: FieldColorModeId): FieldColorModeIdV1 {\n switch (colorId) {\n case 'thresholds':\n return FieldColorModeIdV1.Thresholds;\n case 'palette-classic':\n return FieldColorModeIdV1.PaletteClassic;\n case 'palette-classic-by-name':\n return FieldColorModeIdV1.PaletteClassicByName;\n case 'continuous-GrYlRd':\n return FieldColorModeIdV1.ContinuousGrYlRd;\n case 'continuous-RdYlGr':\n return FieldColorModeIdV1.ContinuousRdYlGr;\n case 'continuous-BlYlRd':\n return FieldColorModeIdV1.ContinuousBlYlRd;\n case 'continuous-YlRd':\n return FieldColorModeIdV1.ContinuousYlRd;\n case 'continuous-BlPu':\n return FieldColorModeIdV1.ContinuousBlPu;\n case 'continuous-YlBl':\n return FieldColorModeIdV1.ContinuousYlBl;\n case 'continuous-blues':\n return FieldColorModeIdV1.ContinuousBlues;\n case 'continuous-reds':\n return FieldColorModeIdV1.ContinuousReds;\n case 'continuous-greens':\n return FieldColorModeIdV1.ContinuousGreens;\n case 'continuous-purples':\n return FieldColorModeIdV1.ContinuousPurples;\n case 'fixed':\n return FieldColorModeIdV1.Fixed;\n case 'shades':\n return FieldColorModeIdV1.Shades;\n default:\n return FieldColorModeIdV1.Thresholds;\n }\n}\n\nfunction transformSpecialValueMatchToV1(match: SpecialValueMatch): SpecialValueMatchV1 {\n switch (match) {\n case 'true':\n return SpecialValueMatchV1.True;\n case 'false':\n return SpecialValueMatchV1.False;\n case 'null':\n return SpecialValueMatchV1.Null;\n case 'nan':\n return SpecialValueMatchV1.NaN;\n case 'null+nan':\n return SpecialValueMatchV1.NullAndNan;\n case 'empty':\n return SpecialValueMatchV1.Empty;\n default:\n throw new Error(`Unknown match type: ${match}`);\n }\n}\n\nfunction transformToV1VariableTypes(variable: TypedVariableModelV2): VariableType {\n switch (variable.kind) {\n case 'QueryVariable':\n return 'query';\n case 'DatasourceVariable':\n return 'datasource';\n case 'CustomVariable':\n return 'custom';\n case 'ConstantVariable':\n return 'constant';\n case 'IntervalVariable':\n return 'interval';\n case 'TextVariable':\n return 'textbox';\n case 'GroupByVariable':\n return 'groupby';\n case 'AdhocVariable':\n return 'adhoc';\n default:\n throw new Error(`Unknown variable type: ${variable}`);\n }\n}\n\nexport function transformDashboardV2SpecToV1(spec: DashboardV2Spec, metadata: ObjectMeta): DashboardDataDTO {\n const annotations = spec.annotations.map(transformV2ToV1AnnotationQuery);\n\n const variables = getVariablesV1(spec.variables);\n const panels = getPanelsV1(spec.elements, spec.layout);\n return {\n uid: metadata.name,\n title: spec.title,\n description: spec.description,\n tags: spec.tags,\n schemaVersion: 40,\n graphTooltip: transformCursorSyncV2ToV1(spec.cursorSync),\n preload: spec.preload,\n liveNow: spec.liveNow,\n editable: spec.editable,\n gnetId: metadata.annotations?.[AnnoKeyDashboardGnetId],\n revision: spec.revision,\n time: {\n from: spec.timeSettings.from,\n to: spec.timeSettings.to,\n },\n timezone: spec.timeSettings.timezone,\n refresh: spec.timeSettings.autoRefresh,\n timepicker: {\n refresh_intervals: spec.timeSettings.autoRefreshIntervals,\n hidden: spec.timeSettings.hideTimepicker,\n quick_ranges: spec.timeSettings.quickRanges,\n nowDelay: spec.timeSettings.nowDelay,\n },\n fiscalYearStartMonth: spec.timeSettings.fiscalYearStartMonth,\n weekStart: spec.timeSettings.weekStart,\n version: metadata.generation,\n links: spec.links,\n annotations: { list: annotations },\n panels,\n templating: { list: variables },\n };\n}\n","import { store } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { DashboardScene } from '../scene/DashboardScene';\nimport { EditableDashboardElementInfo } from '../scene/types/EditableDashboardElement';\n\nimport { DashboardInteractions } from './interactions';\n\nexport function trackDashboardSceneLoaded(dashboard: DashboardScene, duration?: number) {\n const dynamicDashboardsTrackingInformation = dashboard.getDynamicDashboardsTrackingInformation();\n\n DashboardInteractions.dashboardInitialized({\n theme: undefined,\n duration,\n isScene: true,\n ...(dashboard.getTrackingInformation() ?? {}),\n ...(dynamicDashboardsTrackingInformation\n ? {\n tabCount: dynamicDashboardsTrackingInformation.tabCount,\n templateVariableCount: dynamicDashboardsTrackingInformation.templateVariableCount,\n maxNestingLevel: dynamicDashboardsTrackingInformation.maxNestingLevel,\n dashStructure: dynamicDashboardsTrackingInformation.dashStructure,\n conditionalRenderRules: dynamicDashboardsTrackingInformation.conditionalRenderRulesCount,\n autoLayoutCount: dynamicDashboardsTrackingInformation.autoLayoutCount,\n customGridLayoutCount: dynamicDashboardsTrackingInformation.customGridLayoutCount,\n }\n : {}),\n });\n}\n\nexport const trackDeleteDashboardElement = (element: EditableDashboardElementInfo) => {\n switch (element?.typeName) {\n case 'Row':\n DashboardInteractions.trackRemoveRowClick();\n break;\n case 'Tab':\n DashboardInteractions.trackRemoveTabClick();\n break;\n default:\n break;\n }\n};\n\nexport const trackDashboardSceneEditButtonClicked = (dashboardUid?: string) => {\n DashboardInteractions.editButtonClicked({\n outlineExpanded: !store.getBool('grafana.dashboard.edit-pane.outline.collapsed', true),\n dashboardUid,\n });\n};\n\nexport function trackDashboardSceneCreatedOrSaved(\n isNew: boolean,\n dashboard: DashboardScene,\n initialProperties: { name: string; url: string; expression_types?: string[] }\n) {\n // url values for dashboard library experiment\n const urlParams = new URLSearchParams(window.location.search);\n const pluginId = urlParams.get('pluginId') || undefined;\n const sourceEntryPoint = urlParams.get('sourceEntryPoint') || undefined;\n const libraryItemId = urlParams.get('libraryItemId') || undefined;\n const creationOrigin = urlParams.get('creationOrigin') || undefined;\n\n const dynamicDashboardsTrackingInformation = dashboard.getDynamicDashboardsTrackingInformation();\n\n const dashboardLibraryProperties = config.featureToggles.dashboardLibrary\n ? {\n datasourceTypes: [pluginId],\n sourceEntryPoint,\n libraryItemId,\n creationOrigin,\n }\n : {};\n\n DashboardInteractions.dashboardCreatedOrSaved(isNew, {\n ...initialProperties,\n ...(dynamicDashboardsTrackingInformation\n ? {\n uid: dashboard.state.uid,\n numPanels: dynamicDashboardsTrackingInformation.panelCount,\n conditionalRenderRules: dynamicDashboardsTrackingInformation.conditionalRenderRulesCount,\n autoLayoutCount: dynamicDashboardsTrackingInformation.autoLayoutCount,\n customGridLayoutCount: dynamicDashboardsTrackingInformation.customGridLayoutCount,\n panelsByDatasourceType: dynamicDashboardsTrackingInformation.panelsByDatasourceType,\n ...dashboardLibraryProperties,\n }\n : {\n ...dashboardLibraryProperties,\n }),\n });\n}\n","import classNames from 'classnames';\nimport { ReactNode } from 'react';\n\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { PopoverContent } from '../Tooltip/types';\n\ninterface Props {\n children: ReactNode;\n className?: string;\n htmlFor?: string;\n isFocused?: boolean;\n isInvalid?: boolean;\n tooltip?: PopoverContent;\n width?: number | 'auto';\n /** Make tooltip interactive */\n interactive?: boolean;\n}\n\nexport const FormLabel = ({\n children,\n isFocused,\n isInvalid,\n className,\n htmlFor,\n tooltip,\n width,\n interactive,\n ...rest\n}: Props) => {\n const classes = classNames(className, `gf-form-label width-${width ? width : '10'}`, {\n 'gf-form-label--is-focused': isFocused,\n 'gf-form-label--is-invalid': isInvalid,\n });\n\n return (\n <label className={classes} {...rest} htmlFor={htmlFor}>\n {children}\n {tooltip && (\n <Tooltip placement=\"top\" content={tooltip} theme={'info'} interactive={interactive}>\n <Icon name=\"info-circle\" size=\"sm\" style={{ marginLeft: '10px' }} />\n </Tooltip>\n )}\n </label>\n );\n};\n\nexport const InlineFormLabel = FormLabel;\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { OptionPaneItemOverrideInfo } from './types';\n\nexport interface Props {\n overrides: OptionPaneItemOverrideInfo[];\n}\n\nexport function OptionsPaneItemOverrides({ overrides }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n {overrides.map((override, index) => (\n <Tooltip content={override.tooltip} key={index.toString()} placement=\"top\">\n <div aria-label={override.description} className={styles[override.type]} />\n </Tooltip>\n ))}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const common = {\n width: 8,\n height: 8,\n borderRadius: theme.shape.radius.circle,\n marginLeft: theme.spacing(1),\n top: '-1px',\n };\n\n return {\n wrapper: css({\n display: 'flex',\n }),\n rule: css({\n ...common,\n position: 'relative',\n backgroundColor: theme.colors.primary.main,\n }),\n data: css({\n ...common,\n position: 'relative',\n backgroundColor: theme.colors.warning.main,\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { ReactNode } from 'react';\nimport * as React from 'react';\nimport Highlighter from 'react-highlight-words';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Field, Label, useStyles2 } from '@grafana/ui';\n\nimport { OptionsPaneCategoryDescriptor } from './OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemOverrides } from './OptionsPaneItemOverrides';\nimport { OptionPaneItemOverrideInfo } from './types';\n\nexport interface OptionsPaneItemInfo {\n title?: string;\n value?: any;\n description?: string;\n popularRank?: number;\n render: (descriptor: OptionsPaneItemDescriptor) => React.ReactElement;\n skipField?: boolean;\n showIf?: () => boolean;\n /** Hook for controlling visibility */\n useShowIf?: () => boolean;\n overrides?: OptionPaneItemOverrideInfo[];\n addon?: ReactNode;\n /** Must be unique on the page! */\n id: string;\n}\n\n/**\n * This is not a real React component but an intermediary to enable deep option search without traversing a React node tree.\n */\nexport class OptionsPaneItemDescriptor {\n parent!: OptionsPaneCategoryDescriptor;\n props: OptionsPaneItemInfo;\n\n constructor(props: OptionsPaneItemInfo) {\n this.props = { ...props };\n }\n\n render(searchQuery?: string) {\n return <OptionsPaneItem key={this.props.id} itemDescriptor={this} searchQuery={searchQuery} />;\n }\n\n useShowIf() {\n if (this.props.useShowIf) {\n return this.props.useShowIf();\n }\n\n if (this.props.showIf) {\n return this.props.showIf();\n }\n\n return true;\n }\n}\n\ninterface OptionsPaneItemProps {\n itemDescriptor: OptionsPaneItemDescriptor;\n searchQuery?: string;\n}\n\nfunction OptionsPaneItem({ itemDescriptor, searchQuery }: OptionsPaneItemProps) {\n const { title, description, id, render, skipField } = itemDescriptor.props;\n const key = `${itemDescriptor.parent.props.id} ${title}`;\n const showIf = itemDescriptor.useShowIf();\n\n if (!showIf) {\n return null;\n }\n\n if (skipField) {\n return render(itemDescriptor);\n }\n\n return (\n <Field\n label={renderOptionLabel(itemDescriptor, searchQuery)}\n description={description}\n key={key}\n aria-label={selectors.components.PanelEditor.OptionsPane.fieldLabel(key)}\n htmlFor={id}\n >\n {render(itemDescriptor)}\n </Field>\n );\n}\n\nfunction renderOptionLabel(itemDescriptor: OptionsPaneItemDescriptor, searchQuery?: string): ReactNode {\n const { title, description, overrides, id, addon } = itemDescriptor.props;\n\n if (!title) {\n return null;\n }\n\n if (!searchQuery) {\n // Do not render label for categories with only one child\n if (itemDescriptor.parent.props.title === title && !overrides?.length) {\n return null;\n }\n\n return <OptionPaneLabel title={title} description={description} overrides={overrides} addon={addon} htmlFor={id} />;\n }\n\n const categories: React.ReactNode[] = [];\n\n if (itemDescriptor.parent.parent) {\n categories.push(highlightWord(itemDescriptor.parent.parent.props.title, searchQuery));\n }\n\n if (itemDescriptor.parent.props.title !== title) {\n categories.push(highlightWord(itemDescriptor.parent.props.title, searchQuery));\n }\n\n return (\n <Label description={description && highlightWord(description, searchQuery)} category={categories} htmlFor={id}>\n {highlightWord(title, searchQuery)}\n {overrides && overrides.length > 0 && <OptionsPaneItemOverrides overrides={overrides} />}\n </Label>\n );\n}\n\nfunction highlightWord(word: string, query: string) {\n return <Highlighter textToHighlight={word} searchWords={[query]} highlightClassName={'search-fragment-highlight'} />;\n}\n\ninterface OptionPanelLabelProps {\n title: string;\n description?: string;\n overrides?: OptionPaneItemOverrideInfo[];\n addon: ReactNode;\n htmlFor?: string;\n}\n\nfunction OptionPaneLabel({ title, description, overrides, addon, htmlFor }: OptionPanelLabelProps) {\n const styles = useStyles2(getLabelStyles);\n return (\n <div className={styles.container}>\n <Label description={description} htmlFor={htmlFor}>\n {title}\n {overrides && overrides.length > 0 && <OptionsPaneItemOverrides overrides={overrides} />}\n </Label>\n {addon}\n </div>\n );\n}\n\nfunction getLabelStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n display: 'flex',\n justifyContent: 'space-between',\n }),\n };\n}\n","import { uniqBy } from 'lodash';\n\nimport { AppEvents, DateTime, LocalStorageValueProvider, TimeRange, isDateTime, rangeUtil } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { TimeRangePickerProps, TimeRangePicker } from '@grafana/ui';\nimport appEvents from 'app/core/app_events';\n\nconst LOCAL_STORAGE_KEY = 'grafana.dashboard.timepicker.history';\nconst MAX_HISTORY_ITEMS = 4;\n\ninterface Props extends Omit<TimeRangePickerProps, 'history' | 'theme'> {}\n\n// Simplified object to store in local storage\ninterface TimePickerHistoryItem {\n from: string;\n to: string;\n}\n\nexport const TimePickerWithHistory = (props: Props) => {\n return (\n <LocalStorageValueProvider<unknown> storageKey={LOCAL_STORAGE_KEY} defaultValue={[]}>\n {(values, onSaveToStore) => {\n const validHistory = getValidHistory(values);\n const history = deserializeHistory(validHistory);\n\n return (\n <TimeRangePicker\n {...props}\n history={history}\n onChange={(value) => {\n onAppendToHistory(value, validHistory, onSaveToStore);\n props.onChange(value);\n }}\n onError={(error?: string) =>\n appEvents.emit(AppEvents.alertError, [\n t('time-picker.copy-paste.default-error-title', 'Invalid time range'),\n t('time-picker.copy-paste.default-error-message', `{{error}} is not a valid time range`, { error }),\n ])\n }\n />\n );\n }}\n </LocalStorageValueProvider>\n );\n};\n\nfunction getValidHistory(values: unknown): TimePickerHistoryItem[] {\n const result: TimePickerHistoryItem[] = [];\n\n if (!Array.isArray(values)) {\n return result;\n }\n // Check if the values are already in the correct format\n\n for (let item of values) {\n const parsed = getValidHistoryItem(item);\n if (parsed) {\n result.push(parsed);\n }\n }\n\n return result;\n}\n\nexport function deserializeHistory(values: TimePickerHistoryItem[]): TimeRange[] {\n return values.map((item) => rangeUtil.convertRawToRange(item, 'utc', undefined, 'YYYY-MM-DD HH:mm:ss'));\n}\n\nfunction onAppendToHistory(\n newTimeRange: TimeRange,\n values: TimePickerHistoryItem[],\n onSaveToStore: (values: TimePickerHistoryItem[]) => void\n) {\n if (!isAbsoluteTimeRange(newTimeRange)) {\n // If the time range is not absolute, do not append it to history, ex: last 5 minutes\n return;\n }\n\n // Convert DateTime objects to strings\n const toAppend = {\n from: convertToISOString(newTimeRange.raw.from),\n to: convertToISOString(newTimeRange.raw.to),\n };\n\n const toStore = limit([toAppend, ...values]);\n onSaveToStore(toStore);\n}\n\nfunction isAbsoluteTimeRange(value: TimeRange): boolean {\n return isDateTime(value.raw.from) || isDateTime(value.raw.to);\n}\n\nfunction limit(value: TimePickerHistoryItem[]): TimePickerHistoryItem[] {\n return uniqBy(value, (v) => v.from + v.to).slice(0, MAX_HISTORY_ITEMS);\n}\n\n/**\n * Check if the value is a valid TimePickerHistoryItem. If it doesn't match the format exactly, it will return false.\n * @returns true if the value match exactly to TimePickerHistoryItem, false otherwise\n */\nexport function getValidHistoryItem(value: unknown): TimePickerHistoryItem | null {\n // First check if it's a valid object\n if (typeof value !== 'object' || value === null) {\n return null;\n }\n\n // Check if it has exactly two properties\n if (Object.keys(value).length !== 2) {\n return null;\n }\n\n // Check if it has the required properties\n if (!('from' in value) || !('to' in value)) {\n return null;\n }\n\n const { from, to } = value;\n // Check if both properties are strings\n if (typeof from === 'string' && typeof to === 'string') {\n return { from, to };\n }\n\n return null;\n}\n\nfunction convertToISOString(value: DateTime | string): string {\n if (typeof value === 'string') {\n return value;\n }\n\n if (!value?.toISOString) {\n throw console.error('Invalid DateTime object passed to convertToISOString');\n }\n\n return value.toISOString();\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nexport const pluginVersion = \"12.3.0\";\n\nexport enum TextMode {\n Code = 'code',\n HTML = 'html',\n Markdown = 'markdown',\n}\n\nexport enum CodeLanguage {\n Go = 'go',\n Html = 'html',\n Json = 'json',\n Markdown = 'markdown',\n Plaintext = 'plaintext',\n Sql = 'sql',\n Typescript = 'typescript',\n Xml = 'xml',\n Yaml = 'yaml',\n}\n\nexport const defaultCodeLanguage: CodeLanguage = CodeLanguage.Plaintext;\n\nexport interface CodeOptions {\n /**\n * The language passed to monaco code editor\n */\n language: CodeLanguage;\n showLineNumbers: boolean;\n showMiniMap: boolean;\n}\n\nexport const defaultCodeOptions: Partial<CodeOptions> = {\n language: CodeLanguage.Plaintext,\n showLineNumbers: false,\n showMiniMap: false,\n};\n\nexport interface Options {\n code?: CodeOptions;\n content: string;\n mode: TextMode;\n}\n\nexport const defaultOptions: Partial<Options> = {\n content: `# Title\n\nFor markdown syntax help: [commonmark.org/help](https://commonmark.org/help/)`,\n mode: TextMode.Markdown,\n};\n","import { AlignedData } from 'uplot';\n\nimport { join } from '../transformations/transformers/joinDataFrames';\nimport { Labels, QueryResultMeta } from '../types/data';\nimport { FieldDTO, DataFrame, Field, FieldType } from '../types/dataFrame';\nimport { parseLabels } from '../utils/labels';\nimport { renderLegendFormat } from '../utils/legend';\n\nimport { DataFrameJSON, decodeFieldValueEntities, FieldSchema } from './DataFrameJSON';\nimport { guessFieldTypeFromValue, toFilteredDataFrameDTO } from './processDataFrame';\n\n/**\n * Indicate if the frame is appened or replace\n *\n * @alpha\n */\nexport enum StreamingFrameAction {\n Append = 'append',\n Replace = 'replace',\n}\n\n/**\n * @alpha\n * */\nexport interface StreamingFrameOptions {\n maxLength: number; // 1000\n maxDelta: number; // how long to keep things\n action: StreamingFrameAction; // default will append\n\n /** optionally format field names based on labels */\n displayNameFormat?: string;\n}\n\n/**\n * Stream packet info is attached to StreamingDataFrames and indicate how many\n * rows were added to the end of the frame. The number of discarded rows can be\n * calculated from previous state\n */\nexport interface StreamPacketInfo {\n number: number;\n action: StreamingFrameAction;\n length: number;\n schemaChanged: boolean;\n}\n\nconst PROM_STYLE_METRIC_LABEL = '__name__';\n\nenum PushMode {\n wide,\n labels,\n // long\n}\n\nexport type SerializedStreamingDataFrame = {\n name?: string;\n fields: FieldDTO[];\n refId?: string;\n meta: QueryResultMeta;\n schemaFields: FieldSchema[];\n timeFieldIndex: number;\n pushMode: PushMode;\n length: number;\n packetInfo: StreamPacketInfo;\n options: StreamingFrameOptions;\n labels: Set<string>;\n};\n\n/**\n * Unlike a circular buffer, this will append and periodically slice the front\n */\nexport class StreamingDataFrame implements DataFrame {\n name?: string;\n refId?: string;\n meta: QueryResultMeta = {};\n\n fields: Field[] = [];\n length = 0;\n\n private schemaFields: FieldSchema[] = [];\n private timeFieldIndex = -1;\n private pushMode = PushMode.wide;\n\n // current labels\n private labels: Set<string> = new Set();\n readonly packetInfo: StreamPacketInfo = {\n schemaChanged: true,\n number: 0,\n action: StreamingFrameAction.Replace,\n length: 0,\n };\n\n private constructor(public options: StreamingFrameOptions) {\n // Get Length to show up if you use spread\n Object.defineProperty(this, 'length', {\n enumerable: true,\n });\n\n // Get fields to show up if you use spread\n Object.defineProperty(this, 'fields', {\n enumerable: true,\n });\n }\n\n serialize = (\n fieldPredicate?: (f: Field) => boolean,\n optionsOverride?: Partial<StreamingFrameOptions>,\n trimValues?: {\n maxLength?: number;\n }\n ): SerializedStreamingDataFrame => {\n const options = optionsOverride ? Object.assign({}, { ...this.options, ...optionsOverride }) : this.options;\n const dataFrameDTO = toFilteredDataFrameDTO(this, fieldPredicate);\n\n const numberOfItemsToRemove = getNumberOfItemsToRemove(\n dataFrameDTO.fields.map((f) => f.values ?? []),\n typeof trimValues?.maxLength === 'number' ? Math.min(trimValues.maxLength, options.maxLength) : options.maxLength,\n this.timeFieldIndex,\n options.maxDelta\n );\n\n dataFrameDTO.fields = dataFrameDTO.fields.map((f) => ({\n ...f,\n values: f.values?.slice(numberOfItemsToRemove),\n }));\n\n const length = dataFrameDTO.fields[0]?.values?.length ?? 0;\n\n return {\n ...dataFrameDTO,\n // TODO: Labels and schema are not filtered by field\n labels: this.labels,\n schemaFields: this.schemaFields,\n\n name: this.name,\n refId: this.refId,\n meta: this.meta,\n length,\n timeFieldIndex: this.timeFieldIndex,\n pushMode: this.pushMode,\n packetInfo: this.packetInfo,\n options,\n };\n };\n\n private initFromSerialized = (serialized: Omit<SerializedStreamingDataFrame, 'options'>) => {\n this.name = serialized.name;\n this.refId = serialized.refId;\n this.meta = serialized.meta;\n this.length = serialized.length;\n this.labels = serialized.labels;\n this.schemaFields = serialized.schemaFields;\n this.timeFieldIndex = serialized.timeFieldIndex;\n this.pushMode = serialized.pushMode;\n this.packetInfo.length = serialized.packetInfo.length;\n this.packetInfo.number = serialized.packetInfo.number;\n this.packetInfo.action = StreamingFrameAction.Replace;\n this.packetInfo.schemaChanged = true;\n this.fields = serialized.fields.map((f) => ({\n ...f,\n type: f.type ?? FieldType.other,\n config: f.config ?? {},\n values: f.values ?? [],\n }));\n\n assureValuesAreWithinLengthLimit(\n this.fields.map((f) => f.values),\n this.options.maxLength,\n this.timeFieldIndex,\n this.options.maxDelta\n );\n };\n\n static deserialize = (serialized: SerializedStreamingDataFrame) => {\n const frame = new StreamingDataFrame(serialized.options);\n frame.initFromSerialized(serialized);\n return frame;\n };\n\n static empty = (opts?: Partial<StreamingFrameOptions>): StreamingDataFrame =>\n new StreamingDataFrame(getStreamingFrameOptions(opts));\n\n static fromDataFrameJSON = (frame: DataFrameJSON, opts?: Partial<StreamingFrameOptions>): StreamingDataFrame => {\n const streamingDataFrame = new StreamingDataFrame(getStreamingFrameOptions(opts));\n streamingDataFrame.push(frame);\n return streamingDataFrame;\n };\n\n private get alwaysReplace() {\n return this.options.action === StreamingFrameAction.Replace;\n }\n\n needsResizing = ({ maxLength, maxDelta }: StreamingFrameOptions) => {\n const needsMoreLength = maxLength && this.options.maxLength < maxLength;\n const needsBiggerDelta = maxDelta && this.options.maxDelta < maxDelta;\n const needsToOverrideDefaultInfinityDelta = maxDelta && this.options.maxDelta === Infinity;\n return Boolean(needsMoreLength || needsBiggerDelta || needsToOverrideDefaultInfinityDelta);\n };\n\n resize = ({ maxLength, maxDelta }: Partial<StreamingFrameOptions>) => {\n if (maxDelta) {\n if (this.options.maxDelta === Infinity) {\n this.options.maxDelta = maxDelta;\n } else {\n this.options.maxDelta = Math.max(maxDelta, this.options.maxDelta);\n }\n }\n this.options.maxLength = Math.max(this.options.maxLength, maxLength ?? 0);\n };\n\n /**\n * apply the new message to the existing data. This will replace the existing schema\n * if a new schema is included in the message, or append data matching the current schema\n */\n push(msg: DataFrameJSON): StreamPacketInfo {\n const { schema, data } = msg;\n\n this.packetInfo.number++;\n this.packetInfo.length = 0;\n this.packetInfo.schemaChanged = false;\n\n if (schema) {\n this.pushMode = PushMode.wide;\n this.timeFieldIndex = schema.fields.findIndex((f) => f.type === FieldType.time);\n const firstField = schema.fields[0];\n if (\n this.timeFieldIndex === 1 &&\n firstField.type === FieldType.string &&\n (firstField.name === 'labels' || firstField.name === 'Labels')\n ) {\n this.pushMode = PushMode.labels;\n this.timeFieldIndex = 0; // after labels are removed!\n }\n\n const niceSchemaFields = this.pushMode === PushMode.labels ? schema.fields.slice(1) : schema.fields;\n\n this.refId = schema.refId;\n if (schema.meta) {\n this.meta = { ...schema.meta };\n }\n\n const { displayNameFormat } = this.options;\n if (hasSameStructure(this.schemaFields, niceSchemaFields)) {\n const len = niceSchemaFields.length;\n this.fields.forEach((f, idx) => {\n const sf = niceSchemaFields[idx % len];\n f.config = sf.config ?? {};\n f.labels = sf.labels;\n });\n if (displayNameFormat) {\n this.fields.forEach((f) => {\n const labels = { [PROM_STYLE_METRIC_LABEL]: f.name, ...f.labels };\n f.config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n });\n }\n } else {\n this.packetInfo.schemaChanged = true;\n const isWide = this.pushMode === PushMode.wide;\n this.fields = niceSchemaFields.map((f) => {\n const config = f.config ?? {};\n if (displayNameFormat) {\n const labels = { [PROM_STYLE_METRIC_LABEL]: f.name, ...f.labels };\n config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n }\n return {\n config,\n name: f.name,\n labels: f.labels,\n type: f.type ?? FieldType.other,\n // transfer old values by type & name, unless we relied on labels to match fields\n values: isWide\n ? (this.fields.find((of) => of.name === f.name && f.type === of.type)?.values ??\n Array(this.length).fill(undefined))\n : [],\n };\n });\n }\n\n this.schemaFields = niceSchemaFields;\n }\n\n if (data && data.values.length && data.values[0].length) {\n let { values, entities } = data;\n\n if (entities) {\n entities.forEach((ents, i) => {\n if (ents) {\n decodeFieldValueEntities(ents, values[i]);\n // TODO: append replacements to field\n }\n });\n }\n\n if (this.pushMode === PushMode.labels) {\n // augment and transform data to match current schema for standard circPush() path\n const labeledTables = transpose(values);\n\n // make sure fields are initalized for each label\n for (const label of labeledTables.keys()) {\n if (!this.labels.has(label)) {\n this.packetInfo.schemaChanged = true;\n this.addLabel(label);\n }\n }\n\n // TODO: cache higher up\n let dummyTable = Array(this.schemaFields.length).fill([]);\n\n let tables: AlignedData[] = [];\n this.labels.forEach((label) => {\n tables.push(labeledTables.get(label) ?? dummyTable);\n });\n\n values = join(tables);\n }\n\n if (values.length !== this.fields.length) {\n if (this.fields.length) {\n throw new Error(\n `push message mismatch. Expected: ${this.fields.length}, received: ${values.length} (labels=${\n this.pushMode === PushMode.labels\n })`\n );\n }\n\n this.fields = values.map((vals, idx) => {\n let name = `Field ${idx}`;\n let type = guessFieldTypeFromValue(vals[0]);\n const isTime = idx === 0 && type === FieldType.number && (vals as number[])[0] > 1600016688632;\n if (isTime) {\n type = FieldType.time;\n name = 'Time';\n }\n\n return {\n name,\n type,\n config: {},\n values: [],\n };\n });\n }\n\n let appended = values;\n this.packetInfo.length = values[0].length;\n\n if (this.alwaysReplace || !this.length) {\n this.packetInfo.action = StreamingFrameAction.Replace;\n } else {\n this.packetInfo.action = StreamingFrameAction.Append;\n\n // mutates appended\n appended = this.fields.map((f) => f.values);\n circPush(appended, values, this.options.maxLength, this.timeFieldIndex, this.options.maxDelta);\n }\n\n appended.forEach((v, i) => {\n const field = this.fields[i];\n const { state } = field;\n field.values = v;\n if (state) {\n state.calcs = undefined;\n }\n });\n\n // Update the frame length\n this.length = appended[0].length;\n }\n\n return {\n ...this.packetInfo,\n };\n }\n\n pushNewValues = (values: unknown[][]) => {\n if (!values?.length) {\n return;\n }\n\n this.packetInfo.action = this.options.action;\n this.packetInfo.number++;\n this.packetInfo.length = values[0].length;\n this.packetInfo.schemaChanged = false;\n\n if (this.options.action === StreamingFrameAction.Append) {\n circPush(\n this.fields.map((f) => f.values),\n values,\n this.options.maxLength,\n this.timeFieldIndex,\n this.options.maxDelta\n );\n } else {\n values.forEach((v, i) => {\n if (this.fields[i]) {\n this.fields[i].values = v;\n }\n });\n\n assureValuesAreWithinLengthLimit(\n this.fields.map((f) => f.values),\n this.options.maxLength,\n this.timeFieldIndex,\n this.options.maxDelta\n );\n }\n const newLength = this.fields?.[0]?.values.length;\n if (newLength !== undefined) {\n this.length = newLength;\n }\n };\n\n resetStateCalculations = () => {\n this.fields.forEach((f) => {\n f.state = {\n ...(f.state ?? {}),\n calcs: undefined,\n range: undefined,\n };\n });\n };\n\n getMatchingFieldIndexes = (fieldPredicate: (f: Field) => boolean): number[] =>\n this.fields\n .map((f, index) => (fieldPredicate(f) ? index : undefined))\n .filter((val) => val !== undefined) as number[];\n\n getValuesFromLastPacket = (): unknown[][] =>\n this.fields.map((f) => {\n const values = f.values;\n return values.slice(Math.max(values.length - this.packetInfo.length));\n });\n\n hasAtLeastOnePacket = () => Boolean(this.packetInfo.length);\n\n // adds a set of fields for a new label\n private addLabel(label: string) {\n const { displayNameFormat } = this.options;\n const labelCount = this.labels.size;\n\n // parse labels\n const parsedLabels = parseLabelsFromField(label);\n\n if (labelCount === 0) {\n // mutate existing fields and add labels\n this.fields.forEach((f, i) => {\n if (i > 0) {\n f.labels = parsedLabels;\n if (displayNameFormat) {\n const labels = { [PROM_STYLE_METRIC_LABEL]: f.name, ...parsedLabels };\n f.config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n }\n }\n });\n } else {\n for (let i = 1; i < this.schemaFields.length; i++) {\n let proto = this.schemaFields[i] as Field;\n const config = proto.config ?? {};\n if (displayNameFormat) {\n const labels = { [PROM_STYLE_METRIC_LABEL]: proto.name, ...parsedLabels };\n config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n }\n this.fields.push({\n ...proto,\n config,\n labels: parsedLabels,\n values: Array(this.length).fill(undefined),\n });\n }\n }\n\n this.labels.add(label);\n }\n\n getOptions = (): Readonly<StreamingFrameOptions> => this.options;\n}\n\nexport function getStreamingFrameOptions(opts?: Partial<StreamingFrameOptions>): StreamingFrameOptions {\n return {\n maxLength: opts?.maxLength ?? 1000,\n maxDelta: opts?.maxDelta ?? Infinity,\n action: opts?.action ?? StreamingFrameAction.Append,\n displayNameFormat: opts?.displayNameFormat,\n };\n}\n\n// converts vertical insertion records with table keys in [0] and column values in [1...N]\n// to join()-able tables with column arrays\nexport function transpose(vrecs: unknown[][]) {\n let tableKeys = new Set(vrecs[0]);\n let tables = new Map();\n\n tableKeys.forEach((key) => {\n let cols = Array(vrecs.length - 1)\n .fill(null)\n .map(() => []);\n\n tables.set(key, cols);\n });\n\n for (let r = 0; r < vrecs[0].length; r++) {\n let table = tables.get(vrecs[0][r]);\n for (let c = 1; c < vrecs.length; c++) {\n table[c - 1].push(vrecs[c][r]);\n }\n }\n\n return tables;\n}\n\n// binary search for index of closest value\nexport function closestIdx(num: number, arr: number[], lo?: number, hi?: number) {\n let mid;\n lo = lo || 0;\n hi = hi || arr.length - 1;\n let bitwise = hi <= 2147483647;\n\n while (hi - lo > 1) {\n mid = bitwise ? (lo + hi) >> 1 : Math.floor((lo + hi) / 2);\n\n if (arr[mid] < num) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n if (num - arr[lo] <= arr[hi] - num) {\n return lo;\n }\n\n return hi;\n}\n\nexport function parseLabelsFromField(str: string): Labels {\n if (!str.length) {\n return {};\n }\n if (str.charAt(0) === '{') {\n return parseLabels(str);\n }\n const parsedLabels: Labels = {};\n str.split(',').forEach((kv) => {\n const [key, val] = kv.trim().split('=');\n parsedLabels[key] = val;\n });\n return parsedLabels;\n}\n\n/**\n * @internal // not exported in yet\n */\nexport function getLastStreamingDataFramePacket(frame: DataFrame) {\n if (frame instanceof StreamingDataFrame) {\n const pi = frame.packetInfo;\n return pi.action;\n }\n return undefined;\n}\n\n// mutable circular push\nfunction circPush(data: unknown[][], newData: unknown[][], maxLength = Infinity, deltaIdx = 0, maxDelta = Infinity) {\n for (let i = 0; i < data.length; i++) {\n for (let k = 0; k < newData[i].length; k++) {\n data[i].push(newData[i][k]);\n }\n }\n\n return assureValuesAreWithinLengthLimit(data, maxLength, deltaIdx, maxDelta);\n}\n\nfunction assureValuesAreWithinLengthLimit(data: unknown[][], maxLength = Infinity, deltaIdx = 0, maxDelta = Infinity) {\n const count = getNumberOfItemsToRemove(data, maxLength, deltaIdx, maxDelta);\n\n if (count) {\n for (let i = 0; i < data.length; i++) {\n data[i].splice(0, count);\n }\n }\n\n return count;\n}\n\nfunction getNumberOfItemsToRemove(data: unknown[][], maxLength = Infinity, deltaIdx = 0, maxDelta = Infinity) {\n if (!data[0]?.length) {\n return 0;\n }\n\n const nlen = data[0].length;\n\n let sliceIdx = 0;\n\n if (nlen > maxLength) {\n sliceIdx = nlen - maxLength;\n }\n\n if (maxDelta !== Infinity && deltaIdx >= 0) {\n const deltaLookup = data[deltaIdx] as number[];\n\n const low = deltaLookup[sliceIdx];\n const high = deltaLookup[nlen - 1];\n\n if (high - low > maxDelta) {\n sliceIdx = closestIdx(high - maxDelta, deltaLookup, sliceIdx);\n }\n }\n\n return sliceIdx;\n}\n\nfunction hasSameStructure(a: FieldSchema[], b: FieldSchema[]): boolean {\n if (a?.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n const fA = a[i];\n const fB = b[i];\n if (fA.name !== fB.name || fA.type !== fB.type) {\n return false;\n }\n }\n return true;\n}\n","import { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '@grafana/aws-sdk';\nimport { DataFrame, DataSourceRef } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\n\nimport * as raw from './dataquery.gen';\n\nexport * from './dataquery.gen';\n\nexport type CloudWatchQuery =\n | raw.CloudWatchMetricsQuery\n | raw.CloudWatchLogsQuery\n | raw.CloudWatchAnnotationQuery\n | raw.CloudWatchLogsAnomaliesQuery\n | CloudWatchDefaultQuery;\n\n// We want to allow setting defaults for both Logs and Metrics queries\nexport type CloudWatchDefaultQuery = Omit<raw.CloudWatchLogsQuery, 'queryMode'> & raw.CloudWatchMetricsQuery;\n\nexport interface MultiFilters {\n [key: string]: string[];\n}\n\nexport type Direction = 'ASC' | 'DESC';\n\nexport type LogAction = 'GetQueryResults' | 'GetLogEvents' | 'StartQuery' | 'StopQuery';\n\nexport enum CloudWatchLogsQueryStatus {\n Scheduled = 'Scheduled',\n Running = 'Running',\n Complete = 'Complete',\n Failed = 'Failed',\n Cancelled = 'Cancelled',\n Timeout = 'Timeout',\n}\n\nexport interface CloudWatchJsonData extends AwsAuthDataSourceJsonData {\n timeField?: string;\n database?: string;\n customMetricsNamespaces?: string;\n endpoint?: string;\n // Time string like 15s, 10m etc, see rangeUtils.intervalToMs.\n logsTimeout?: string;\n // Used to create links if logs contain traceId.\n tracingDatasourceUid?: string;\n\n logGroups?: raw.LogGroup[];\n /**\n * @deprecated use logGroups\n */\n defaultLogGroups?: string[];\n}\n\nexport interface CloudWatchSecureJsonData extends AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n}\n\nexport type CloudWatchLogsRequest = GetLogEventsRequest | StartQueryRequest | QueryParam;\n\nexport interface GetLogEventsRequest extends DataQuery {\n /**\n * The name of the log group.\n */\n logGroupName: string;\n /**\n * The name of the log stream.\n */\n logStreamName: string;\n /**\n * The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a timestamp equal to this time or later than this time are included. Events with a timestamp earlier than this time are not included.\n */\n startTime?: number;\n /**\n * The end of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. Events with a timestamp equal to or later than this time are not included.\n */\n endTime?: number;\n /**\n * The token for the next set of items to return. (You received this token from a previous call.) Using this token works only when you specify true for startFromHead.\n */\n nextToken?: string;\n /**\n * The maximum number of log events returned. If you don't specify a value, the maximum is as many log events as can fit in a response size of 1 MB, up to 10,000 log events.\n */\n limit?: number;\n /**\n * If the value is true, the earliest log events are returned first. If the value is false, the latest log events are returned first. The default value is false. If you are using nextToken in this operation, you must specify true for startFromHead.\n */\n startFromHead?: boolean;\n region: string;\n}\n\nexport interface TSDBResponse<T = any> {\n results: Record<string, TSDBQueryResult<T>>;\n message?: string;\n}\n\nexport interface TSDBQueryResult<T = any> {\n refId: string;\n series: TSDBTimeSeries[];\n tables: Array<TSDBTable<T>>;\n frames: DataFrame[];\n\n error?: string;\n meta?: any;\n}\n\nexport interface TSDBTable<T = any> {\n columns: Array<{ text: string }>;\n rows: T[];\n}\n\nexport interface DataQueryError<CloudWatchMetricsQuery> {\n data?: {\n message?: string;\n error?: string;\n results: Record<string, TSDBQueryResult<CloudWatchMetricsQuery>>;\n };\n message?: string;\n}\n\nexport interface TSDBTimeSeries {\n name: string;\n points: TSDBTimePoint[];\n tags?: Record<string, string>;\n}\nexport type TSDBTimePoint = [number, number];\n\nexport interface LogGroupField {\n /**\n * The name of a log field.\n */\n name: string;\n /**\n * The percentage of log events queried that contained the field.\n */\n percent?: number;\n}\n\nexport interface StartQueryRequest extends DataQuery {\n /**\n * The log group on which to perform the query. A StartQuery operation must include a logGroupNames or a logGroupName parameter, but not both.\n */\n logGroupName?: string;\n /**\n * The list of log groups to be queried. You can include up to 20 log groups. A StartQuery operation must include a logGroupNames or a logGroupName parameter, but not both.\n */\n logGroupNames?: string[] /* not quite deprecated yet, but will be soon */;\n logGroups?: raw.LogGroup[];\n /**\n * The query string to use. For more information, see CloudWatch Logs Insights Query Syntax.\n */\n queryString: string;\n /**\n * The maximum number of log events to return in the query. If the query string uses the fields command, only the specified fields and their values are returned. The default is 1000.\n */\n limit?: number;\n refId: string;\n region: string;\n}\n\nexport interface QueryParam extends DataQuery {\n queryId: string;\n refId: string;\n limit?: number;\n region: string;\n statsGroups?: string[];\n}\n\nexport interface MetricRequest {\n from: string;\n to: string;\n queries: MetricQuery[];\n debug?: boolean;\n}\n\nexport interface MetricQuery {\n [key: string]: any;\n datasource?: DataSourceRef;\n refId?: string;\n maxDataPoints?: number;\n intervalMs?: number;\n}\n\nexport enum VariableQueryType {\n Regions = 'regions',\n Namespaces = 'namespaces',\n Metrics = 'metrics',\n DimensionKeys = 'dimensionKeys',\n DimensionValues = 'dimensionValues',\n EBSVolumeIDs = 'ebsVolumeIDs',\n EC2InstanceAttributes = 'ec2InstanceAttributes',\n ResourceArns = 'resourceARNs',\n Statistics = 'statistics',\n LogGroups = 'logGroups',\n Accounts = 'accounts',\n}\n\nexport interface OldVariableQuery extends DataQuery {\n queryType: VariableQueryType;\n namespace: string;\n region: string;\n metricName: string;\n dimensionKey: string;\n dimensionFilters: string;\n ec2Filters: string;\n instanceID: string;\n attributeName: string;\n resourceType: string;\n tags: string;\n}\n\nexport interface VariableQuery extends DataQuery {\n queryType: VariableQueryType;\n namespace: string;\n region: string;\n metricName: string;\n dimensionKey: string;\n dimensionFilters?: raw.Dimensions;\n ec2Filters?: MultiFilters;\n instanceID: string;\n attributeName: string;\n resourceType: string;\n tags?: MultiFilters;\n logGroupPrefix?: string;\n accountId?: string;\n}\n\nexport interface LegacyAnnotationQuery extends raw.MetricStat, DataQuery {\n actionPrefix: string;\n alarmNamePrefix: string;\n alias: string;\n builtIn: number;\n datasource: any;\n dimensions: raw.Dimensions;\n enable: boolean;\n expression: string;\n hide: boolean;\n iconColor: string;\n id: string;\n matchExact: boolean;\n metricName: string;\n name: string;\n namespace: string;\n period: string;\n prefixMatching: boolean;\n region: string;\n statistic: string;\n statistics: string[];\n target: {\n limit: number;\n matchAny: boolean;\n tags: any[];\n type: string;\n };\n type: string;\n}\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { ThemeBreakpointsKey } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\nexport function useMediaQueryMinWidth(breakpoint: ThemeBreakpointsKey): boolean {\n const theme = useTheme2();\n const mediaQuery = useMemo(\n () => window.matchMedia(`(min-width: ${theme.breakpoints.values[breakpoint]}px)`),\n [theme, breakpoint]\n );\n const [isMatch, setIsMatch] = useState(mediaQuery.matches);\n\n useEffect(() => {\n const onChange = (e: MediaQueryListEvent) => setIsMatch(e.matches);\n mediaQuery.addEventListener('change', onChange);\n return () => mediaQuery.removeEventListener('change', onChange);\n }, [mediaQuery]);\n\n return isMatch;\n}\n","import { config } from '@grafana/runtime';\nimport {\n CloudNotifierType,\n NotificationChannelOption,\n NotifierDTO,\n} from 'app/features/alerting/unified/types/alerting';\n\nimport { option } from './notifier-types';\n\nconst basicAuthOption: NotificationChannelOption = option(\n 'basic_auth',\n 'Basic auth',\n 'Sets the `Authorization` header with the configured username and password. Password and password_file are mutually exclusive.',\n {\n element: 'subform',\n subformOptions: [\n option('username', 'Username', ''),\n option('password', 'Password', ''),\n option('password_file', 'Password file', ''),\n ],\n }\n);\n\nconst tlsConfigOption: NotificationChannelOption = option('tls_config', 'TLS config', 'Configures the TLS settings.', {\n element: 'subform',\n subformOptions: [\n option('ca_file', 'CA file', 'CA certificate to validate the server certificate with.'),\n option('cert_file', 'Cert file', 'Certificate for client cert authentication to the server.'),\n option('key_file', 'Key file', 'Key file for client cert authentication to the server.'),\n option('server_name', 'Server name', 'ServerName extension to indicate the name of the server.'),\n option('insecure_skip_verify', 'Skip verify', 'Disable validation of the server certificate.', {\n element: 'checkbox',\n }),\n ],\n});\n\nconst oauth2ConfigOption: NotificationChannelOption = option('oauth2', 'OAuth2', 'Configures the OAuth2 settings.', {\n element: 'subform',\n subformOptions: [\n option('client_id', 'Client ID', 'The OAuth2 client ID', { required: true }),\n option('client_secret', 'Client secret', 'The OAuth2 client secret', { required: true }),\n // ths \"client_secret_file\" is not allowed for security reasons in Mimir / Cloud Alertmanager so we also disable it for OSS Alertmanager – sorry!\n // option(\n // 'client_secret_file',\n // 'Client secret file',\n // 'OAuth2 client secret file location. Mutually exclusive with client_secret.',\n // ),\n option('token_url', 'Token URL', 'The OAuth2 token exchange URL', { required: true }),\n option('scopes', 'Scopes', 'Comma-separated list of scopes', {\n element: 'string_array',\n }),\n option('endpoint_params', 'Additional parameters', '', { element: 'key_value_map' }),\n ],\n});\n\nconst httpConfigOption: NotificationChannelOption = option(\n 'http_config',\n 'HTTP Config',\n 'Note that `basic_auth`, `bearer_token` and `bearer_token_file` options are mutually exclusive.',\n {\n element: 'subform',\n subformOptions: [\n option('bearer_token', 'Bearer token', 'Sets the `Authorization` header with the configured bearer token.'),\n option(\n 'bearer_token_file',\n 'Bearer token file',\n 'Sets the `Authorization` header with the bearer token read from the configured file.'\n ),\n option('proxy_url', 'Proxy URL', 'Optional proxy URL.'),\n basicAuthOption,\n tlsConfigOption,\n oauth2ConfigOption,\n ],\n }\n);\n\nconst jiraNotifier: NotifierDTO<CloudNotifierType> = {\n name: 'Jira',\n description: 'Send notifications to Jira Service Management',\n type: 'jira',\n info: '',\n heading: 'Jira settings',\n options: [\n option('api_url', 'API URL', 'The host to send Jira API requests to', { required: true }),\n option('project', 'Project Key', 'The project key where issues are created', { required: true }),\n option('summary', 'Summary', 'Issue summary template', { placeholder: '{{ template \"jira.default.summary\" . }}' }),\n option('description', 'Description', 'Issue description template', {\n placeholder: '{{ template \"jira.default.description\" . }}',\n }),\n option('labels', 'Labels', ' Labels to be added to the issue', { element: 'string_array' }),\n option('priority', 'Priority', 'Priority of the issue', {\n placeholder: '{{ template \"jira.default.priority\" . }}',\n }),\n option('issue_type', 'Issue Type', 'Type of the issue (e.g. Bug)', { required: true }),\n option(\n 'reopen_transition',\n 'Reopen transition',\n 'Name of the workflow transition to reopen an issue. The target status should not have the category \"done\"'\n ),\n option(\n 'resolve_transition',\n 'Resolve transition',\n 'Name of the workflow transition to resolve an issue. The target status must have the category \"done\"'\n ),\n option(\n 'wont_fix_resolution',\n \"Won't fix resolution\",\n 'If \"Reopen transition\" is defined, ignore issues with that resolution'\n ),\n option(\n 'reopen_duration',\n 'Reopen duration',\n 'If \"Reopen transition\" is defined, reopen the issue when it is not older than this value (rounded down to the nearest minute)',\n {\n placeholder: 'Use duration format, for example: 1.2s, 100ms',\n }\n ),\n option('fields', 'Fields', 'Other issue and custom fields', {\n element: 'key_value_map',\n }),\n httpConfigOption,\n ],\n};\n\nexport const cloudNotifierTypes: Array<NotifierDTO<CloudNotifierType>> = [\n {\n name: 'Email',\n description: 'Send notification over SMTP',\n type: 'email',\n info: '',\n heading: 'Email settings',\n options: [\n option(\n 'to',\n 'To',\n 'The email address to send notifications to. You can enter multiple addresses using a \",\" separator',\n { required: true }\n ),\n option('from', 'From', 'The sender address.'),\n option('smarthost', 'SMTP host', 'The SMTP host through which emails are sent.'),\n option('hello', 'Hello', 'The hostname to identify to the SMTP server.'),\n option('auth_username', 'Username', 'SMTP authentication information'),\n option('auth_password', 'Password', 'SMTP authentication information'),\n option('auth_secret', 'Secret', 'SMTP authentication information'),\n option('auth_identity', 'Identity', 'SMTP authentication information'),\n option('require_tls', 'Require TLS', 'The SMTP TLS requirement', { element: 'checkbox' }),\n option('html', 'Email HTML body', 'The HTML body of the email notification.', {\n placeholder: '{{ template \"email.default.html\" . }}',\n element: 'textarea',\n }),\n option('text', 'Email text body', 'The text body of the email notification.', { element: 'textarea' }),\n option(\n 'headers',\n 'Headers',\n 'Further headers email header key/value pairs. Overrides any headers previously set by the notification implementation.',\n { element: 'key_value_map' }\n ),\n tlsConfigOption,\n ],\n },\n {\n name: 'PagerDuty',\n description: 'Send notifications to PagerDuty',\n type: 'pagerduty',\n info: '',\n heading: 'PagerDuty settings',\n options: [\n option(\n 'routing_key',\n 'Routing key',\n 'The PagerDuty integration key (when using PagerDuty integration type `Events API v2`)'\n ),\n option(\n 'service_key',\n 'Service key',\n 'The PagerDuty integration key (when using PagerDuty integration type `Prometheus`).'\n ),\n option('url', 'URL', 'The URL to send API requests to'),\n option('client', 'Client', 'The client identification of the Alertmanager.', {\n placeholder: '{{ template \"pagerduty.default.client\" . }}',\n }),\n option('client_url', 'Client URL', 'A backlink to the sender of the notification.', {\n placeholder: '{{ template \"pagerduty.default.clientURL\" . }}',\n }),\n option('description', 'Description', 'A description of the incident.', {\n placeholder: '{{ template \"pagerduty.default.description\" .}}',\n }),\n option('severity', 'Severity', 'Severity of the incident.', { placeholder: 'error' }),\n option(\n 'details',\n 'Details',\n 'A set of arbitrary key/value pairs that provide further detail about the incident.',\n {\n element: 'key_value_map',\n }\n ),\n option('images', 'Images', 'Images to attach to the incident.', {\n element: 'subform_array',\n subformOptions: [\n option('href', 'URL', '', { required: true }),\n option('source', 'Source', '', { required: true }),\n option('alt', 'Alt', '', { required: true }),\n ],\n }),\n option('links', 'Links', 'Links to attach to the incident.', {\n element: 'subform_array',\n subformOptions: [option('href', 'URL', '', { required: true }), option('text', 'Text', '', { required: true })],\n }),\n httpConfigOption,\n ],\n },\n {\n name: 'Pushover',\n description: 'Send notifications to Pushover',\n type: 'pushover',\n info: '',\n heading: 'Pushover settings',\n options: [\n option('user_key', 'User key', 'The recipient user’s user key.', { required: true }),\n option('token', 'Token', 'Your registered application’s API token, see https://pushover.net/app', {\n required: true,\n }),\n option('title', 'Title', 'Notification title.', {\n placeholder: '{{ template \"pushover.default.title\" . }}',\n }),\n option('message', 'Message', 'Notification message.', {\n placeholder: '{{ template \"pushover.default.message\" . }}',\n }),\n option('url', 'URL', 'A supplementary URL shown alongside the message.', {\n placeholder: '{{ template \"pushover.default.url\" . }}',\n }),\n option('priority', 'Priority', 'Priority, see https://pushover.net/api#priority', {\n placeholder: '{{ if eq .Status \"firing\" }}2{{ else }}0{{ end }}',\n }),\n option(\n 'retry',\n 'Retry',\n 'How often the Pushover servers will send the same notification to the user. Must be at least 30 seconds.',\n {\n placeholder: '1m',\n }\n ),\n option(\n 'expire',\n 'Expire',\n 'How long your notification will continue to be retried for, unless the user acknowledges the notification.',\n {\n placeholder: '1h',\n }\n ),\n option(\n 'ttl',\n 'TTL',\n 'The number of seconds before a message expires and is deleted automatically. Examples: 10s, 5m30s, 8h.',\n {\n // allow 30s, 4m30s, etc\n validationRule: '^(\\\\d+[s|m|h])+$|^$',\n element: 'input',\n }\n ),\n httpConfigOption,\n ],\n },\n {\n name: 'Slack',\n description: 'Send notifications to Slack',\n type: 'slack',\n info: '',\n heading: 'Slack settings',\n options: [\n option('api_url', 'Webhook URL', 'The Slack webhook URL.'),\n option('channel', 'Channel', 'The #channel or @user to send notifications to.', { required: true }),\n option('icon_emoji', 'Emoji icon', ''),\n option('icon_url', 'Icon URL', ''),\n option('link_names', 'Names link', '', { element: 'checkbox' }),\n option('username', 'Username', '', { placeholder: '{{ template \"slack.default.username\" . }}' }),\n option('callback_id', 'Callback ID', '', { placeholder: '{{ template \"slack.default.callbackid\" . }}' }),\n option('color', 'Color', '', { placeholder: '{{ if eq .Status \"firing\" }}danger{{ else }}good{{ end }}' }),\n option('fallback', 'Fallback', '', { placeholder: '{{ template \"slack.default.fallback\" . }}' }),\n option('footer', 'Footer', '', { placeholder: '{{ template \"slack.default.footer\" . }}' }),\n option('mrkdwn_in', 'Mrkdwn fields', 'An array of field names that should be formatted by mrkdwn syntax.', {\n element: 'string_array',\n }),\n option('pretext', 'Pre-text', '', { placeholder: '{{ template \"slack.default.pretext\" . }}' }),\n option('short_fields', 'Short fields', '', { element: 'checkbox' }),\n option('text', 'Message body', '', { element: 'textarea', placeholder: '{{ template \"slack.default.text\" . }}' }),\n option('title', 'Title', '', { placeholder: '{{ template \"slack.default.title\" . }}' }),\n option('title_link', 'Title link', '', { placeholder: '{{ template \"slack.default.titlelink\" . }}' }),\n option('image_url', 'Image URL', ''),\n option('thumb_url', 'Thumbnail URL', ''),\n option('actions', 'Actions', '', {\n element: 'subform_array',\n subformOptions: [\n option('text', 'Text', '', { required: true }),\n option('type', 'Type', '', { required: true }),\n option('url', 'URL', 'Either url or name and value are mandatory.'),\n option('name', 'Name', ''),\n option('value', 'Value', ''),\n option('confirm', 'Confirm', '', {\n element: 'subform',\n subformOptions: [\n option('text', 'Text', '', { required: true }),\n option('dismiss_text', 'Dismiss text', ''),\n option('ok_text', 'OK text', ''),\n option('title', 'Title', ''),\n ],\n }),\n option('style', 'Style', ''),\n ],\n }),\n option('fields', 'Fields', '', {\n element: 'subform_array',\n subformOptions: [\n option('title', 'Title', '', { required: true }),\n option('value', 'Value', '', { required: true }),\n option('short', 'Short', '', { element: 'checkbox' }),\n ],\n }),\n httpConfigOption,\n ],\n },\n ...(config.featureToggles?.alertingJiraIntegration ? [jiraNotifier] : []),\n {\n name: 'OpsGenie',\n description: 'Send notifications to OpsGenie',\n type: 'opsgenie',\n info: '',\n heading: 'OpsGenie settings',\n options: [\n option('api_key', 'API key', 'The API key to use when talking to the OpsGenie API.'),\n option('api_url', 'API URL', 'The host to send OpsGenie API requests to.'),\n option('message', 'Message', 'Alert text limited to 130 characters.'),\n option('description', 'Description', 'A description of the incident.', {\n placeholder: '{{ template \"opsgenie.default.description\" . }}',\n }),\n option('source', 'Source', 'A backlink to the sender of the notification.', {\n placeholder: '{{ template \"opsgenie.default.source\" . }}',\n }),\n option(\n 'details',\n 'Details',\n 'A set of arbitrary key/value pairs that provide further detail about the incident.',\n {\n element: 'key_value_map',\n }\n ),\n option('tags', 'Tags', 'Comma separated list of tags attached to the notifications.'),\n option('note', 'Note', 'Additional alert note.'),\n option('priority', 'Priority', 'Priority level of alert. Possible values are P1, P2, P3, P4, and P5.'),\n option('responders', 'Responders', 'List of responders responsible for notifications.', {\n element: 'subform_array',\n subformOptions: [\n option('type', 'Type', '\"team\", \"user\", \"escalation\" or schedule\".', { required: true }),\n option('id', 'ID', 'Exactly one of these fields should be defined.'),\n option('name', 'Name', 'Exactly one of these fields should be defined.'),\n option('username', 'Username', 'Exactly one of these fields should be defined.'),\n ],\n }),\n httpConfigOption,\n ],\n },\n {\n name: 'VictorOps',\n description: 'Send notifications to VictorOps',\n type: 'victorops',\n info: '',\n heading: 'VictorOps settings',\n options: [\n option('api_key', 'API key', 'The API key to use when talking to the VictorOps API.'),\n option('api_url', 'API URL', 'The VictorOps API URL.'),\n option('routing_key', 'Routing key', 'A key used to map the alert to a team.', { required: true }),\n option('message_type', 'Message type', 'Describes the behavior of the alert (CRITICAL, WARNING, INFO).'),\n option('entity_display_name', 'Entity display name', 'Contains summary of the alerted problem.', {\n placeholder: '{{ template \"victorops.default.entity_display_name\" . }}',\n }),\n option('state_message', 'State message', 'Contains long explanation of the alerted problem.', {\n placeholder: '{{ template \"victorops.default.state_message\" . }}',\n }),\n option('monitoring_tool', 'Monitoring tool', 'The monitoring tool the state message is from.', {\n placeholder: '{{ template \"victorops.default.monitoring_tool\" . }}',\n }),\n httpConfigOption,\n ],\n },\n {\n name: 'Webhook',\n description: 'Send notifications to a webhook',\n type: 'webhook',\n info: '',\n heading: 'Webhook settings',\n options: [\n option('url', 'URL', 'The endpoint to send HTTP POST requests to.', { required: true }),\n option(\n 'max_alerts',\n 'Max alerts',\n 'The maximum number of alerts to include in a single webhook message. Alerts above this threshold are truncated. When leaving this at its default value of 0, all alerts are included.',\n {\n placeholder: '0',\n inputType: 'number',\n validationRule: '(^\\\\d+$|^$)',\n setValueAs: (value) => {\n const integer = Number(value);\n return Number.isFinite(integer) ? integer : 0;\n },\n }\n ),\n option(\n 'timeout',\n 'Timeout',\n 'The maximum time to wait for a webhook request to complete, before failing the request and allowing it to be retried. The default value of 0s indicates that no timeout should be applied. NOTE: This will have no effect if set higher than the group_interval.',\n {\n placeholder: 'Use duration format, for example: 1.2s, 100ms',\n }\n ),\n httpConfigOption,\n ],\n },\n {\n name: 'Discord',\n description: 'Sends notifications to Discord',\n type: 'discord',\n info: '',\n heading: 'Discord settings',\n options: [\n option('title', 'Title', 'Templated title of the message', {\n placeholder: '{{ template \"discord.default.title\" . }}',\n }),\n option(\n 'message',\n 'Message Content',\n 'Mention a group using @ or a user using <@ID> when notifying in a channel',\n { placeholder: '{{ template \"discord.default.message\" . }}' }\n ),\n option('webhook_url', 'Webhook URL', '', { placeholder: 'Discord webhook URL', required: true }),\n httpConfigOption,\n ],\n },\n {\n name: 'Cisco Webex Teams',\n description: 'Sends notifications to Cisco Webex Teams',\n type: 'webex',\n info: '',\n heading: 'Cisco Webex Teams settings',\n options: [\n option('api_url', 'API URL', 'The Webex Teams API URL', {\n placeholder: 'https://webexapis.com/v1/messages',\n }),\n option('room_id', 'Room ID', 'ID of the Webex Teams room where to send the messages', {\n required: true,\n }),\n option('message', 'Message', 'Message template', {\n placeholder: '{{ template \"webex.default.message\" .}}',\n }),\n {\n ...httpConfigOption,\n required: true,\n },\n ],\n },\n {\n name: 'Telegram',\n description: 'Sends notifications to Telegram',\n type: 'telegram',\n info: '',\n heading: 'Telegram settings',\n options: [\n option('api_url', 'API URL', 'The Telegram API URL', {\n placeholder: 'https://api.telegram.org',\n }),\n option('bot_token', 'Bot token', 'Telegram bot token', {\n required: true,\n }),\n option('chat_id', 'Chat ID', 'ID of the chat where to send the messages', {\n required: true,\n setValueAs: (value) => (typeof value === 'string' ? parseInt(value, 10) : value),\n }),\n option('message', 'Message', 'Message template', {\n placeholder: '{{ template \"webex.default.message\" .}}',\n }),\n option('disable_notifications', 'Disable notifications', 'Disable telegram notifications', {\n element: 'checkbox',\n }),\n option('parse_mode', 'Parse mode', 'Parse mode for telegram message', {\n element: 'select',\n // If we've set '' on the API, then the Select won't populate with the correct value,\n // so the easiest way to fix this is to set the default value to ''\n defaultValue: { label: 'None', value: '' },\n selectOptions: [\n // Note that the value for Cloud AM is '',\n // and for Grafana AM it is 'None'\n { label: 'None', value: '' },\n { label: 'MarkdownV2', value: 'MarkdownV2' },\n { label: 'Markdown', value: 'Markdown' },\n { label: 'HTML', value: 'HTML' },\n ],\n }),\n httpConfigOption,\n ],\n },\n {\n name: 'Amazon SNS',\n description: 'Sends notifications to Amazon SNS',\n type: 'sns',\n info: '',\n heading: 'Amazon SNS settings',\n options: [\n option('api_url', 'API URL', 'The Amazon SNS API URL'),\n option(\n 'sigv4',\n 'SigV4 authentication',\n \"Configures AWS's Signature Verification 4 signing process to sign requests\",\n {\n element: 'subform',\n subformOptions: [\n option(\n 'region',\n 'Region',\n 'The AWS region. If blank, the region from the default credentials chain is used'\n ),\n option(\n 'access_key',\n 'Access key',\n 'The AWS API access_key. If blank the environment variable \"AWS_ACCESS_KEY_ID\" is used'\n ),\n option(\n 'secret_key',\n 'Secret key',\n 'The AWS API secret_key. If blank the environment variable \"AWS_ACCESS_SECRET_ID\" is used'\n ),\n option('profile', 'Profile', 'Named AWS profile used to authenticate'),\n option('role_arn', 'Role ARN', 'AWS Role ARN, an alternative to using AWS API keys'),\n ],\n }\n ),\n option(\n 'topic_arn',\n 'SNS topic ARN',\n \"If you don't specify this value, you must specify a value for the phone_number or target_arn. If you are using a FIFO SNS topic you should set a message group interval longer than 5 minutes to prevent messages with the same group key being deduplicated by the SNS default deduplication window\"\n ),\n option(\n 'phone_number',\n 'Phone number',\n \"Phone number if message is delivered via SMS in E.164 format. If you don't specify this value, you must specify a value for the topic_arn or target_arn\"\n ),\n option(\n 'target_arn',\n 'Target ARN',\n \"The mobile platform endpoint ARN if message is delivered via mobile notifications. If you don't specify this value, you must specify a value for the topic_arn or phone_number\"\n ),\n\n option('subject', 'Subject', 'Subject line when the message is delivered', {\n placeholder: '{{ template \"sns.default.subject\" .}}',\n }),\n option('message', 'Message', 'The message content of the SNS notification', {\n placeholder: '{{ template \"sns.default.message\" .}}',\n }),\n option('attributes', 'Attributes', 'SNS message attributes', {\n element: 'key_value_map',\n }),\n httpConfigOption,\n ],\n },\n {\n name: 'WeChat',\n description: 'Sends notifications to WeChat',\n type: 'wechat',\n info: '',\n heading: 'WeChat settings',\n options: [\n option('api_url', 'API URL', 'The WeChat API URL'),\n option('api_secret', 'API Secret', 'The API key to use when talking to the WeChat API'),\n option('corp_id', 'Corp ID', 'The corp id for authentication'),\n option('message', 'Message', 'API request data as defined by the WeChat API', {\n placeholder: '{{ template \"wechat.default.message\" . }}',\n }),\n option('message_type', 'Message type', 'Type of the message type', {\n element: 'select',\n defaultValue: { label: 'Text', value: 'text' },\n selectOptions: [\n { label: 'Text', value: 'text' },\n { label: 'Markdown', value: 'markdown' },\n ],\n }),\n option('agent_id', 'Agent ID', '', {\n placeholder: '{{ template \"wechat.default.agent_id\" . }}',\n }),\n option('to_user', 'to user', '', {\n placeholder: '{{ template \"wechat.default.to_user\" . }}',\n }),\n option('to_party', 'to party', '', {\n placeholder: '{{ template \"wechat.default.to_party\" . }}',\n }),\n option('to_tag', 'to tag', '', {\n placeholder: '{{ template \"wechat.default.to_tag\" . }}',\n }),\n ],\n },\n {\n name: 'Microsoft Teams',\n description: 'Sends notifications to Microsoft Teams',\n type: 'msteams',\n info: '',\n heading: 'Microsoft Teams settings',\n options: [\n option('webhook_url', 'Webhook URL', 'The incoming webhook URL.'),\n option('title', 'Title', 'Message title template.', {\n placeholder: '{{ template \"teams.default.title\" . }}',\n }),\n option('text', 'Text', 'Message body template.', {\n placeholder: '{{ template \"teams.default.text\" . }}',\n }),\n ],\n },\n];\n\nexport const globalConfigOptions: NotificationChannelOption[] = [\n // email\n option('smtp_from', 'SMTP from', 'The default SMTP From header field.'),\n option(\n 'smtp_smarthost',\n 'SMTP smarthost',\n 'The default SMTP smarthost used for sending emails, including port number. Port number usually is 25, or 587 for SMTP over TLS (sometimes referred to as STARTTLS). Example: smtp.example.org:587'\n ),\n option('smtp_hello', 'SMTP hello', 'The default hostname to identify to the SMTP server.', {\n placeholder: 'localhost',\n }),\n option(\n 'smtp_auth_username',\n 'SMTP auth username',\n \"SMTP Auth using CRAM-MD5, LOGIN and PLAIN. If empty, Alertmanager doesn't authenticate to the SMTP server.\"\n ),\n option('smtp_auth_password', 'SMTP auth password', 'SMTP Auth using LOGIN and PLAIN.'),\n option('smtp_auth_identity', 'SMTP auth identity', 'SMTP Auth using PLAIN.'),\n option('smtp_auth_secret', 'SMTP auth secret', 'SMTP Auth using CRAM-MD5.'),\n option(\n 'smtp_require_tls',\n 'SMTP require TLS',\n 'The default SMTP TLS requirement. Note that Go does not support unencrypted connections to remote SMTP endpoints.',\n {\n element: 'checkbox',\n }\n ),\n\n // slack\n option('slack_api_url', 'Slack API URL', ''),\n option('victorops_api_key', 'VictorOps API key', ''),\n option('victorops_api_url', 'VictorOps API URL', '', {\n placeholder: 'https://alert.victorops.com/integrations/generic/20131114/alert/',\n }),\n option('pagerduty_url', 'PagerDuty URL', 'https://events.pagerduty.com/v2/enqueue'),\n option('opsgenie_api_key', 'OpsGenie API key', ''),\n option('opsgenie_api_url', 'OpsGenie API URL', '', { placeholder: 'https://api.opsgenie.com/' }),\n option('wechat_api_url', 'WeChat API URL', '', { placeholder: 'https://qyapi.weixin.qq.com/cgi-bin/' }),\n option('wechat_api_secret', 'WeChat API secret', ''),\n option('wechat_api_corp_id', 'WeChat API corp id', ''),\n option('webex_api_url', 'Cisco Webex Teams API URL', ''),\n option('telegram_api_url', 'The Telegram API URL', ''),\n httpConfigOption,\n option(\n 'resolve_timeout',\n 'Resolve timeout',\n 'ResolveTimeout is the default value used by alertmanager if the alert does not include EndsAt, after this time passes it can declare the alert as resolved if it has not been updated. This has no impact on alerts from Prometheus, as they always include EndsAt.',\n {\n placeholder: '5m',\n }\n ),\n];\n","import { createAction, PayloadAction } from '@reduxjs/toolkit';\nimport { AnyAction } from 'redux';\n\nimport {\n TimeRange,\n HistoryItem,\n DataSourceApi,\n ExplorePanelsState,\n PreferredVisualisationType,\n RawTimeRange,\n ExploreCorrelationHelperData,\n EventBusExtended,\n} from '@grafana/data';\nimport { CorrelationData } from '@grafana/runtime';\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\nimport { getQueryKeys } from 'app/core/utils/explore';\nimport { getCorrelationsBySourceUIDs } from 'app/features/correlations/utils';\nimport { getTimeZone } from 'app/features/profile/state/selectors';\nimport { ExploreItemState } from 'app/types/explore';\nimport { createAsyncThunk, ThunkResult } from 'app/types/store';\n\nimport { datasourceReducer } from './datasource';\nimport { queryReducer, runQueries } from './query';\nimport { timeReducer, updateTime } from './time';\nimport {\n makeExplorePaneState,\n loadAndInitDatasource,\n createEmptyQueryResponse,\n getRange,\n getDatasourceUIDs,\n} from './utils';\n// Types\n\n//\n// Actions and Payloads\n//\n\n/**\n * Keep track of the Explore container size, in particular the width.\n * The width will be used to calculate graph intervals (number of datapoints).\n */\nexport interface ChangeSizePayload {\n exploreId: string;\n width: number;\n}\n\nexport const changeSizeAction = createAction<ChangeSizePayload>('explore/changeSize');\n\ninterface ChangeCompactModePayload {\n exploreId: string;\n compact: boolean;\n}\nexport const changeCompactModeAction = createAction<ChangeCompactModePayload>('explore/changeCompactMode');\n\n/**\n * Tracks the state of explore panels that gets synced with the url.\n */\ninterface ChangePanelsState {\n exploreId: string;\n panelsState: ExplorePanelsState;\n}\n\nexport const changePanelsStateAction = createAction<ChangePanelsState>('explore/changePanels');\n\nexport function changePanelState(\n exploreId: string,\n panel: PreferredVisualisationType,\n panelState: ExplorePanelsState[PreferredVisualisationType]\n): ThunkResult<void> {\n return async (dispatch, getState) => {\n const exploreItem = getState().explore.panes[exploreId];\n if (exploreItem === undefined) {\n return;\n }\n const { panelsState } = exploreItem;\n dispatch(\n changePanelsStateAction({\n exploreId,\n panelsState: {\n ...panelsState,\n [panel]: panelState,\n },\n })\n );\n };\n}\n\n/**\n * Tracks the state of correlation helper data in the panel\n */\ninterface ChangeCorrelationHelperData {\n exploreId: string;\n correlationEditorHelperData?: ExploreCorrelationHelperData;\n}\n\nexport const changeCorrelationHelperData = createAction<ChangeCorrelationHelperData>(\n 'explore/changeCorrelationHelperData'\n);\n\nexport interface UpdateQueryLibraryRefPayload {\n exploreId: string;\n queryLibraryRef?: string;\n}\n\nexport const updateQueryLibraryRefAction = createAction<UpdateQueryLibraryRefPayload>('explore/updateQueryLibraryRef');\n\n/**\n * Initialize Explore state with state from the URL and the React component.\n * Call this only on components for with the Explore state has not been initialized.\n */\ninterface InitializeExplorePayload {\n exploreId: string;\n queries: DataQuery[];\n range: TimeRange;\n history: HistoryItem[];\n datasourceInstance?: DataSourceApi;\n compact: boolean;\n eventBridge: EventBusExtended;\n queryLibraryRef?: string;\n}\n\nconst initializeExploreAction = createAction<InitializeExplorePayload>('explore/initializeExploreAction');\n\nexport interface SetUrlReplacedPayload {\n exploreId: string;\n}\n\nexport const setUrlReplacedAction = createAction<SetUrlReplacedPayload>('explore/setUrlReplaced');\n\nexport interface SaveCorrelationsPayload {\n exploreId: string;\n correlations: CorrelationData[];\n}\n\nexport const saveCorrelationsAction = createAction<SaveCorrelationsPayload>('explore/saveCorrelationsAction');\n\n/**\n * Keep track of the Explore container size, in particular the width.\n * The width will be used to calculate graph intervals (number of datapoints).\n */\nexport function changeSize(exploreId: string, { width }: { width: number }): PayloadAction<ChangeSizePayload> {\n return changeSizeAction({ exploreId, width });\n}\n\nexport function changeCompactMode(exploreId: string, compact: boolean): PayloadAction<ChangeCompactModePayload> {\n return changeCompactModeAction({ exploreId, compact });\n}\n\nexport interface InitializeExploreOptions {\n exploreId: string;\n datasource: DataSourceRef | string | undefined;\n queries: DataQuery[];\n range: RawTimeRange;\n panelsState?: ExplorePanelsState;\n correlationHelperData?: ExploreCorrelationHelperData;\n position?: number;\n eventBridge: EventBusExtended;\n queryLibraryRef?: string;\n compact: boolean;\n}\n\n/**\n * Initialize Explore state with state from the URL and the React component.\n * Call this only on components for with the Explore state has not been initialized.\n *\n * The `datasource` param will be passed to the datasource service `get` function\n * and can be either a string that is the name or uid, or a datasourceRef\n * This is to maximize compatability with how datasources are accessed from the URL param.\n */\nexport const initializeExplore = createAsyncThunk(\n 'explore/initializeExplore',\n async (\n {\n exploreId,\n datasource,\n queries,\n range,\n panelsState,\n compact,\n correlationHelperData,\n eventBridge,\n queryLibraryRef,\n }: InitializeExploreOptions,\n { dispatch, getState, fulfillWithValue }\n ) => {\n let instance = undefined;\n let history: HistoryItem[] = [];\n\n if (datasource) {\n const orgId = getState().user.orgId;\n const loadResult = await loadAndInitDatasource(orgId, datasource);\n instance = loadResult.instance;\n history = loadResult.history;\n }\n\n dispatch(\n initializeExploreAction({\n exploreId,\n queries,\n range: getRange(range, getTimeZone(getState().user)),\n datasourceInstance: instance,\n history,\n compact,\n eventBridge,\n queryLibraryRef,\n })\n );\n if (panelsState !== undefined) {\n dispatch(changePanelsStateAction({ exploreId, panelsState }));\n }\n\n dispatch(updateTime({ exploreId }));\n\n if (instance) {\n const datasourceUIDs = getDatasourceUIDs(instance.uid, queries);\n const correlations = await getCorrelationsBySourceUIDs(datasourceUIDs);\n dispatch(saveCorrelationsAction({ exploreId: exploreId, correlations: correlations.correlations || [] }));\n\n dispatch(runQueries({ exploreId }));\n }\n\n // initialize new pane with helper data\n if (correlationHelperData !== undefined && getState().explore.correlationEditorDetails?.editorMode) {\n dispatch(\n changeCorrelationHelperData({\n exploreId,\n correlationEditorHelperData: correlationHelperData,\n })\n );\n }\n\n return fulfillWithValue({ exploreId, state: getState().explore.panes[exploreId]! });\n }\n);\n\n/**\n * Reducer for an Explore area, to be used by the global Explore reducer.\n */\n// Redux Toolkit uses ImmerJs as part of their solution to ensure that state objects are not mutated.\n// ImmerJs has an autoFreeze option that freezes objects from change which means this reducer can't be migrated to createSlice\n// because the state would become frozen and during run time we would get errors because flot (Graph lib) would try to mutate\n// the frozen state.\n// https://github.com/reduxjs/redux-toolkit/issues/242\nexport const paneReducer = (state: ExploreItemState = makeExplorePaneState(), action: AnyAction): ExploreItemState => {\n state = queryReducer(state, action);\n state = datasourceReducer(state, action);\n state = timeReducer(state, action);\n\n if (changeSizeAction.match(action)) {\n const containerWidth = Math.floor(action.payload.width);\n return { ...state, containerWidth };\n }\n\n if (changeCompactModeAction.match(action)) {\n const compact = action.payload.compact;\n return { ...state, compact };\n }\n\n if (changePanelsStateAction.match(action)) {\n const { panelsState } = action.payload;\n return { ...state, panelsState };\n }\n\n if (changeCorrelationHelperData.match(action)) {\n const { correlationEditorHelperData } = action.payload;\n return { ...state, correlationEditorHelperData };\n }\n\n if (saveCorrelationsAction.match(action)) {\n return {\n ...state,\n correlations: action.payload.correlations,\n };\n }\n\n if (updateQueryLibraryRefAction.match(action)) {\n return {\n ...state,\n queryLibraryRef: action.payload.queryLibraryRef,\n };\n }\n\n if (initializeExploreAction.match(action)) {\n const { queries, range, datasourceInstance, history, eventBridge, compact, queryLibraryRef } = action.payload;\n\n return {\n ...state,\n range,\n queries,\n initialized: true,\n eventBridge,\n queryKeys: getQueryKeys(queries),\n datasourceInstance,\n history,\n queryResponse: createEmptyQueryResponse(),\n cache: [],\n correlations: [],\n queryLibraryRef,\n compact,\n };\n }\n\n return state;\n};\n","import { css, cx } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { FC, useCallback, useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\n\nimport {\n CoreApp,\n DataFrame,\n GrafanaTheme2,\n LoadingState,\n PanelData,\n dateTimeFormat,\n isTimeSeriesFrames,\n} from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, AutoSizeInput, Button, IconButton, Stack, Text, clearButtonStyles, useStyles2 } from '@grafana/ui';\nimport { ClassicConditions } from 'app/features/expressions/components/ClassicConditions';\nimport { Math } from 'app/features/expressions/components/Math';\nimport { Reduce } from 'app/features/expressions/components/Reduce';\nimport { Resample } from 'app/features/expressions/components/Resample';\nimport { SqlExpr } from 'app/features/expressions/components/SqlExpr';\nimport { Threshold } from 'app/features/expressions/components/Threshold';\nimport {\n ExpressionQuery,\n ExpressionQueryType,\n expressionTypes,\n getExpressionLabel,\n} from 'app/features/expressions/types';\nimport { AlertQuery, PromAlertingRuleState } from 'app/types/unified-alerting-dto';\n\nimport { usePagination } from '../../hooks/usePagination';\nimport { RuleFormValues } from '../../types/rule-form';\nimport { isGrafanaRecordingRuleByType } from '../../utils/rules';\nimport { PopupCard } from '../HoverCard';\nimport { Spacer } from '../Spacer';\nimport { AlertStateTag } from '../rules/AlertStateTag';\n\nimport { ExpressionStatusIndicator } from './ExpressionStatusIndicator';\nimport { formatLabels, formatSeriesValue, getSeriesLabels, getSeriesName, getSeriesValue, isEmptySeries } from './util';\n\ninterface ExpressionProps {\n isAlertCondition?: boolean;\n data?: PanelData;\n error?: Error;\n warning?: Error;\n queries: AlertQuery[];\n query: ExpressionQuery;\n onSetCondition: (refId: string) => void;\n onUpdateRefId: (oldRefId: string, newRefId: string) => void;\n onRemoveExpression: (refId: string) => void;\n onUpdateExpressionType: (refId: string, type: ExpressionQueryType) => void;\n onChangeQuery: (query: ExpressionQuery) => void;\n}\n\nexport const Expression: FC<ExpressionProps> = ({\n queries = [],\n query,\n data,\n error,\n warning,\n isAlertCondition,\n onSetCondition,\n onUpdateRefId,\n onRemoveExpression,\n onUpdateExpressionType, // this method is not used? maybe we should remove it\n onChangeQuery,\n}) => {\n const styles = useStyles2(getStyles);\n\n const queryType = query?.type;\n\n const { setError, clearErrors, watch } = useFormContext<RuleFormValues>();\n const type = watch('type');\n const isGrafanaRecordingRule = type ? isGrafanaRecordingRuleByType(type) : false;\n\n const onQueriesValidationError = useCallback(\n (errorMsg: string | undefined) => {\n if (errorMsg) {\n setError('queries', { type: 'custom', message: errorMsg });\n } else {\n clearErrors('queries');\n }\n },\n [setError, clearErrors]\n );\n\n const isLoading = data && Object.values(data).some((d) => Boolean(d) && d.state === LoadingState.Loading);\n const hasResults = Array.isArray(data?.series) && !isLoading;\n const series = data?.series ?? [];\n\n const alertCondition = isAlertCondition ?? false;\n\n const { seriesCount, groupedByState } = getGroupedByStateAndSeriesCount(series);\n\n const renderExpressionType = useCallback(\n (query: ExpressionQuery) => {\n // these are the refs we can choose from that don't include the current one\n const availableRefIds = queries\n .filter((q) => query.refId !== q.refId)\n .map((q) => ({ value: q.refId, label: q.refId }));\n\n switch (query.type) {\n case ExpressionQueryType.math:\n return <Math onChange={onChangeQuery} query={query} labelWidth={'auto'} onRunQuery={() => {}} />;\n\n case ExpressionQueryType.reduce:\n return (\n <Reduce\n onChange={onChangeQuery}\n refIds={availableRefIds}\n labelWidth={'auto'}\n app={CoreApp.UnifiedAlerting}\n query={query}\n />\n );\n\n case ExpressionQueryType.resample:\n return <Resample onChange={onChangeQuery} query={query} labelWidth={'auto'} refIds={availableRefIds} />;\n\n case ExpressionQueryType.classic:\n return <ClassicConditions onChange={onChangeQuery} query={query} refIds={availableRefIds} />;\n\n case ExpressionQueryType.threshold:\n return (\n <Threshold\n onChange={onChangeQuery}\n query={query}\n labelWidth={'auto'}\n refIds={availableRefIds}\n onError={onQueriesValidationError}\n useHysteresis={true}\n />\n );\n\n case ExpressionQueryType.sql:\n return (\n <SqlExpr\n onChange={(query) => onChangeQuery(query)}\n query={query}\n refIds={availableRefIds}\n alerting\n queries={[]}\n />\n );\n\n default:\n return (\n <Trans i18nKey=\"alerting.expression.not-supported\" values={{ expression: query.type }}>\n Expression not supported: {'{{expression}}'}\n </Trans>\n );\n }\n },\n [onChangeQuery, queries, onQueriesValidationError]\n );\n\n const selectedExpressionType = expressionTypes.find((o) => o.value === queryType);\n const selectedExpressionDescription = selectedExpressionType?.description ?? '';\n\n return (\n <div\n className={cx(\n styles.expression.wrapper,\n alertCondition && styles.expression.alertCondition,\n queryType === ExpressionQueryType.classic && styles.expression.classic,\n queryType !== ExpressionQueryType.classic && styles.expression.nonClassic\n )}\n >\n <div className={styles.expression.stack}>\n <Header\n refId={query.refId}\n queryType={queryType}\n onRemoveExpression={() => onRemoveExpression(query.refId)}\n onUpdateRefId={(newRefId) => onUpdateRefId(query.refId, newRefId)}\n onSetCondition={onSetCondition}\n query={query}\n alertCondition={alertCondition}\n />\n <div className={styles.expression.body}>\n {error && (\n <Alert title={t('alerting.expression.title-expression-failed', 'Expression failed')} severity=\"error\">\n {error.message}\n </Alert>\n )}\n {warning && (\n <Alert title={t('alerting.expression.title-expression-warning', 'Expression warning')} severity=\"warning\">\n {warning.message}\n </Alert>\n )}\n <div className={styles.expression.description}>{selectedExpressionDescription}</div>\n {renderExpressionType(query)}\n </div>\n {hasResults && (\n <>\n <ExpressionResult\n series={series}\n isAlertCondition={isAlertCondition}\n isRecordingRule={isGrafanaRecordingRule}\n />\n {!isGrafanaRecordingRule && (\n <div className={styles.footer}>\n <Stack direction=\"row\" alignItems=\"center\">\n <Spacer />\n\n <PreviewSummary\n isCondition={Boolean(isAlertCondition)}\n firing={groupedByState[PromAlertingRuleState.Firing].length}\n normal={groupedByState[PromAlertingRuleState.Inactive].length}\n seriesCount={seriesCount}\n />\n </Stack>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n};\n\ninterface ExpressionResultProps {\n series: DataFrame[];\n isAlertCondition?: boolean;\n isRecordingRule?: boolean;\n}\nexport const PAGE_SIZE = 20;\nexport const ExpressionResult: FC<ExpressionResultProps> = ({ series, isAlertCondition, isRecordingRule = false }) => {\n const { pageItems, previousPage, nextPage, numberOfPages, pageStart, pageEnd } = usePagination(series, 1, PAGE_SIZE);\n const styles = useStyles2(getStyles);\n\n // sometimes we receive results where every value is just \"null\" when noData occurs\n const emptyResults = isEmptySeries(series);\n const isTimeSeriesResults = !emptyResults && isTimeSeriesFrames(series);\n\n const shouldShowPagination = numberOfPages > 1;\n\n return (\n <div className={styles.expression.results}>\n {!emptyResults && isTimeSeriesResults && (\n <div>\n {pageItems.map((frame, index) => (\n <TimeseriesRow\n key={uniqueId()}\n frame={frame}\n index={pageStart + index}\n isAlertCondition={isAlertCondition}\n />\n ))}\n </div>\n )}\n {!emptyResults &&\n !isTimeSeriesResults &&\n pageItems.map((frame, index) => (\n // There's no way to uniquely identify a frame that doesn't cause render bugs :/ (Gilles)\n <FrameRow\n key={uniqueId()}\n frame={frame}\n index={pageStart + index}\n isAlertCondition={isAlertCondition}\n isRecordingRule={isRecordingRule}\n />\n ))}\n {emptyResults && (\n <div className={cx(styles.expression.noData, styles.mutedText)}>\n <Trans i18nKey=\"alerting.expression-result.no-data\">No data</Trans>\n </div>\n )}\n {shouldShowPagination && (\n <div className={styles.pagination.wrapper} data-testid=\"paginate-expression\">\n <Stack>\n <Button\n variant=\"secondary\"\n fill=\"outline\"\n onClick={previousPage}\n icon=\"angle-left\"\n size=\"sm\"\n aria-label={t('alerting.expression-result.aria-label-previouspage', 'previous-page')}\n />\n <Spacer />\n <span className={styles.mutedText}>\n <Trans\n i18nKey=\"alerting.expression-result.page-counter\"\n values={{ pageStart, pageEnd, numPages: series.length }}\n >\n {'{{pageStart}}'} - {'{{pageEnd}}'} of {'{{numPages}}'}\n </Trans>\n </span>\n <Spacer />\n <Button\n variant=\"secondary\"\n fill=\"outline\"\n onClick={nextPage}\n icon=\"angle-right\"\n size=\"sm\"\n aria-label={t('alerting.expression-result.aria-label-nextpage', 'next-page')}\n />\n </Stack>\n </div>\n )}\n </div>\n );\n};\n\nexport const PreviewSummary: FC<{ firing: number; normal: number; isCondition: boolean; seriesCount: number }> = ({\n firing,\n normal,\n isCondition,\n seriesCount,\n}) => {\n const { mutedText } = useStyles2(getStyles);\n\n if (seriesCount === 0) {\n return (\n <span className={mutedText}>\n <Trans i18nKey=\"alerting.preview-summary.no-series\">No series</Trans>\n </span>\n );\n }\n\n if (isCondition) {\n return <span className={mutedText}>{`${seriesCount} series: ${firing} firing, ${normal} normal`}</span>;\n }\n\n return <span className={mutedText}>{`${seriesCount} series`}</span>;\n};\n\nexport function getGroupedByStateAndSeriesCount(series: DataFrame[]) {\n const noDataSeries = series.filter((serie) => getSeriesValue(serie) === undefined).length;\n const groupedByState = {\n // we need to filter out series with no data (undefined) or zero value\n [PromAlertingRuleState.Firing]: series.filter(\n (serie) => getSeriesValue(serie) !== undefined && getSeriesValue(serie) !== 0\n ),\n [PromAlertingRuleState.Inactive]: series.filter((serie) => getSeriesValue(serie) === 0),\n };\n\n const seriesCount = series.length - noDataSeries;\n\n return { groupedByState, seriesCount };\n}\n\ninterface HeaderProps {\n refId: string;\n queryType: ExpressionQueryType;\n onUpdateRefId: (refId: string) => void;\n onRemoveExpression: () => void;\n onSetCondition: (refId: string) => void;\n query: ExpressionQuery;\n alertCondition: boolean;\n}\n\nconst Header: FC<HeaderProps> = ({\n refId,\n queryType,\n onUpdateRefId,\n onRemoveExpression,\n onSetCondition,\n alertCondition,\n query,\n}) => {\n const styles = useStyles2(getStyles);\n const clearButton = useStyles2(clearButtonStyles);\n /**\n * There are 3 edit modes:\n *\n * 1. \"refId\": Editing the refId (ie. A -> B)\n * 2. \"expressionType\": Editing the type of the expression (ie. Reduce -> Math)\n * 3. \"false\": This means we're not editing either of those\n */\n const [editMode, setEditMode] = useState<'refId' | 'expressionType' | false>(false);\n\n const editing = editMode !== false;\n const editingRefId = editing && editMode === 'refId';\n\n return (\n <header className={styles.header.wrapper}>\n <Stack direction=\"row\" gap={0.5} alignItems=\"center\">\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n {!editingRefId && (\n <button type=\"button\" className={cx(clearButton, styles.editable)} onClick={() => setEditMode('refId')}>\n <div className={styles.expression.refId}>{refId}</div>\n </button>\n )}\n {editingRefId && (\n <AutoSizeInput\n autoFocus\n defaultValue={refId}\n minWidth={5}\n onFocus={(event) => event.target.select()}\n onBlur={(event) => {\n onUpdateRefId(event.currentTarget.value);\n setEditMode(false);\n }}\n />\n )}\n <div>{getExpressionLabel(queryType)}</div>\n </Stack>\n <Spacer />\n <ExpressionStatusIndicator\n refId={refId}\n onSetCondition={() => onSetCondition(query.refId)}\n isCondition={alertCondition}\n />\n <IconButton\n name=\"trash-alt\"\n variant=\"secondary\"\n className={styles.mutedIcon}\n onClick={onRemoveExpression}\n tooltip={t('alerting.header.tooltip-remove', 'Remove expression \"{{refId}}\"', { refId })}\n />\n </Stack>\n </header>\n );\n};\n\ninterface FrameProps extends Pick<ExpressionProps, 'isAlertCondition'> {\n frame: DataFrame;\n index: number;\n isRecordingRule?: boolean;\n}\n\nconst OpeningBracket = () => <span>{'{'}</span>;\nconst ClosingBracket = () => <span>{'}'}</span>;\nconst Quote = () => <span>"</span>;\nconst Equals = () => <span>{'='}</span>;\n\nfunction FrameRow({ frame, index, isAlertCondition, isRecordingRule }: FrameProps) {\n const styles = useStyles2(getStyles);\n\n const name = getSeriesName(frame) || 'Series ' + index;\n const value = getSeriesValue(frame);\n const labelsRecord = getSeriesLabels(frame);\n const labels = Object.entries(labelsRecord);\n const hasLabels = labels.length > 0;\n\n const showFiring = isAlertCondition && value !== 0;\n const showNormal = isAlertCondition && value === 0;\n\n const title = `${hasLabels ? '' : name}${hasLabels ? `{${formatLabels(labelsRecord)}}` : ''}`;\n const shouldRenderSumary = !isRecordingRule;\n\n return (\n <div className={styles.expression.resultsRow}>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <div className={styles.expression.resultLabel} title={title}>\n <Text variant=\"code\">\n {hasLabels ? (\n <>\n <OpeningBracket />\n {labels.map(([key, value], index) => (\n <Text variant=\"body\" key={uniqueId()}>\n <span className={styles.expression.labelKey}>{key}</span>\n <Equals />\n <Quote />\n <span className={styles.expression.labelValue}>{value}</span>\n <Quote />\n {index < labels.length - 1 && <span>, </span>}\n </Text>\n ))}\n <ClosingBracket />\n </>\n ) : (\n <span className={styles.expression.labelKey}>{title}</span>\n )}\n </Text>\n </div>\n <div className={styles.expression.resultValue}>{formatSeriesValue(value)}</div>\n {shouldRenderSumary && (\n <>\n {showFiring && <AlertStateTag state={PromAlertingRuleState.Firing} size=\"sm\" />}\n {showNormal && <AlertStateTag state={PromAlertingRuleState.Inactive} size=\"sm\" />}\n </>\n )}\n </Stack>\n </div>\n );\n}\ninterface TimeseriesRowProps extends Omit<FrameProps, 'isRecordingRule'> {}\nconst TimeseriesRow: FC<TimeseriesRowProps & { index: number }> = ({ frame, index }) => {\n const styles = useStyles2(getStyles);\n\n const valueField = frame.fields[1]; // field 0 is \"time\", field 1 is \"value\"\n\n const hasLabels = valueField.labels;\n const displayNameFromDS = valueField.config?.displayNameFromDS;\n const name = displayNameFromDS ?? (hasLabels ? formatLabels(valueField.labels ?? {}) : 'Series ' + index);\n\n const timestamps = frame.fields[0].values;\n\n const getTimestampFromIndex = (index: number) => frame.fields[0].values[index];\n const getValueFromIndex = (index: number) => frame.fields[1].values[index];\n\n return (\n <div className={styles.expression.resultsRow}>\n <Stack direction=\"row\" alignItems=\"center\">\n <span className={cx(styles.mutedText, styles.expression.resultLabel)} title={name}>\n {name}\n </span>\n <div className={styles.expression.resultValue}>\n <PopupCard\n placement=\"right\"\n wrapperClassName={styles.timeseriesTableWrapper}\n content={\n <table className={styles.timeseriesTable}>\n <thead>\n <tr>\n <th>\n <Trans i18nKey=\"alerting.timeseries-row.timestamp\">Timestamp</Trans>\n </th>\n <th>\n <Trans i18nKey=\"alerting.timeseries-row.value\">Value</Trans>\n </th>\n </tr>\n </thead>\n <tbody>\n {timestamps.map((_, index) => (\n <tr key={index}>\n <td className={styles.mutedText}>{dateTimeFormat(getTimestampFromIndex(index))}</td>\n <td className={styles.expression.resultValue}>{getValueFromIndex(index)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n }\n >\n <span>\n <Trans i18nKey=\"alerting.timeseries-row.time-series-data\">Time series data</Trans>\n </span>\n </PopupCard>\n </div>\n </Stack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n expression: {\n wrapper: css({\n display: 'flex',\n border: `solid 1px ${theme.colors.border.medium}`,\n flex: 1,\n flexBasis: '400px',\n borderRadius: theme.shape.radius.default,\n overflow: 'hidden',\n }),\n stack: css({\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'nowrap',\n gap: 0,\n width: '100%',\n minWidth: '0', // this one is important to prevent text overflow\n }),\n classic: css({\n maxWidth: '100%',\n }),\n nonClassic: css({\n maxWidth: '640px',\n }),\n alertCondition: css({}),\n body: css({\n padding: theme.spacing(1),\n flex: 1,\n }),\n description: css({\n marginBottom: theme.spacing(1),\n fontSize: theme.typography.size.xs,\n color: theme.colors.text.secondary,\n }),\n refId: css({\n fontWeight: theme.typography.fontWeightBold,\n color: theme.colors.primary.text,\n }),\n results: css({\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'nowrap',\n\n borderTop: `solid 1px ${theme.colors.border.medium}`,\n }),\n noResults: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }),\n resultsRow: css({\n padding: `${theme.spacing(0.75)} ${theme.spacing(1)}`,\n\n '&:nth-child(odd)': {\n backgroundColor: theme.colors.background.secondary,\n },\n\n '&:hover': {\n backgroundColor: theme.colors.background.canvas,\n },\n }),\n labelKey: css({\n color: theme.isDark ? '#73bf69' : '#56a64b',\n }),\n labelValue: css({\n color: theme.isDark ? '#ce9178' : '#a31515',\n }),\n resultValue: css({\n textAlign: 'right',\n }),\n resultLabel: css({\n flex: 1,\n overflowX: 'auto',\n\n display: 'inline-block',\n whiteSpace: 'nowrap',\n }),\n noData: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(),\n }),\n },\n mutedText: css({\n color: theme.colors.text.secondary,\n fontSize: '0.9em',\n\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n header: {\n wrapper: css({\n background: theme.colors.background.secondary,\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n borderBottom: `solid 1px ${theme.colors.border.weak}`,\n }),\n },\n footer: css({\n background: theme.colors.background.secondary,\n padding: theme.spacing(1),\n borderTop: `solid 1px ${theme.colors.border.weak}`,\n }),\n draggableIcon: css({\n cursor: 'grab',\n }),\n mutedIcon: css({\n color: theme.colors.text.secondary,\n }),\n editable: css({\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n border: `solid 1px ${theme.colors.border.weak}`,\n borderRadius: theme.shape.radius.default,\n\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1),\n cursor: 'pointer',\n }),\n timeseriesTableWrapper: css({\n maxHeight: '500px',\n\n overflowY: 'scroll',\n }),\n timeseriesTable: css({\n tableLayout: 'auto',\n\n width: '100%',\n height: '100%',\n\n 'td, th': {\n padding: theme.spacing(1),\n },\n\n td: {\n background: theme.colors.background.primary,\n },\n\n th: {\n background: theme.colors.background.secondary,\n },\n\n tr: {\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n\n '&:last-of-type': {\n borderBottom: 'none',\n },\n },\n }),\n pagination: {\n wrapper: css({\n borderTop: `1px solid ${theme.colors.border.medium}`,\n padding: theme.spacing(),\n }),\n },\n});\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { InlineFieldRow } from '../Forms/InlineFieldRow';\nimport { InlineLabel } from '../Forms/InlineLabel';\n\n/**\n * Horizontal section for editor components.\n *\n * @alpha\n */\nexport const SegmentSection = ({\n label,\n htmlFor,\n children,\n fill,\n}: {\n // Name of the section\n label: string;\n // htmlFor for the label\n htmlFor?: string;\n // List of components in the section\n children: React.ReactNode;\n // Fill the space at the end\n fill?: boolean;\n}) => {\n const styles = useStyles2(getStyles);\n return (\n <>\n <InlineFieldRow>\n <InlineLabel htmlFor={htmlFor} width={12} className={styles.label}>\n {label}\n </InlineLabel>\n {children}\n {fill && (\n <div className={styles.fill}>\n <InlineLabel>{''}</InlineLabel>\n </div>\n )}\n </InlineFieldRow>\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n label: css({\n color: theme.colors.primary.text,\n }),\n fill: css({\n flexGrow: 1,\n marginBottom: theme.spacing(0.5),\n }),\n});\n","import { UrlQueryMap, urlUtil } from '@grafana/data';\nimport { config, locationSearchToObject } from '@grafana/runtime';\n\nexport interface DashboardUrlOptions {\n uid?: string;\n slug?: string;\n subPath?: string;\n updateQuery?: UrlQueryMap;\n /** Set to location.search to preserve current params */\n currentQueryParams: string;\n /** * Returns solo panel route instead */\n soloRoute?: boolean;\n /** return render url */\n render?: boolean;\n /** Return an absolute URL */\n absolute?: boolean;\n // Add tz to query params\n timeZone?: string;\n // Check if we are on the home dashboard\n isHomeDashboard?: boolean;\n isSnapshot?: boolean;\n}\n\nexport function getDashboardUrl(options: DashboardUrlOptions) {\n let path = `/d/${options.uid}`;\n\n if (!options.uid) {\n path = '/dashboard/new';\n }\n\n if (options.isSnapshot) {\n path = `/dashboard/snapshot/${options.uid}`;\n }\n\n if (options.soloRoute) {\n path = `/d-solo/${options.uid}`;\n }\n\n if (options.slug) {\n path += `/${options.slug}`;\n }\n\n if (options.subPath) {\n path += options.subPath;\n }\n\n if (options.render) {\n path = '/render' + path;\n\n options.updateQuery = {\n ...options.updateQuery,\n width: options.updateQuery?.width || 1000,\n height: options.updateQuery?.height || 500,\n tz: options.timeZone,\n };\n }\n\n if (options.isHomeDashboard) {\n path = '/';\n }\n\n const params = options.currentQueryParams ? locationSearchToObject(options.currentQueryParams) : {};\n\n delete params['shareView'];\n\n if (options.updateQuery) {\n for (const key in options.updateQuery) {\n // removing params with null | undefined\n if (options.updateQuery[key] === null || options.updateQuery[key] === undefined) {\n delete params[key];\n } else {\n params[key] = options.updateQuery[key];\n }\n }\n }\n\n const relativeUrl = urlUtil.renderUrl(path, params);\n\n if (options.absolute) {\n return config.appUrl + relativeUrl.slice(1);\n }\n\n return relativeUrl;\n}\n","/*\n Transforms CDN hosted plugin source code.\n Plugins that require loading via a CDN need to have their asset paths translated to point to the configured CDN.\n e.g. public/plugins/my-plugin/data/ -> http://my-host.com/my-plugin/0.3.3/public/plugins/my-plugin/data/\n */\nexport function transformPluginSourceForCDN({\n url,\n source,\n transformSourceMapURL = false,\n transformAssets = true,\n}: {\n url: string;\n source: string;\n transformSourceMapURL?: boolean;\n transformAssets?: boolean;\n}): string {\n const splitUrl = url.split('/public/plugins/');\n const baseAddress = splitUrl[0];\n const pluginId = splitUrl[1].split('/')[0];\n\n // handle basic asset paths that include public/plugins\n let newSource = source;\n if (transformAssets) {\n newSource = newSource.replace(/(\\/?)(public\\/plugins)/g, `${baseAddress}/$2`);\n newSource = newSource.replace(/([\"|'])(plugins\\/.+?.css)([\"|'])/g, `$1${baseAddress}/public/$2$3`);\n }\n\n if (transformSourceMapURL) {\n newSource = newSource.replace(\n /(\\/\\/#\\ssourceMappingURL=)(.+)\\.map/g,\n `$1${baseAddress}/public/plugins/${pluginId}/$2.map`\n );\n }\n\n return newSource;\n}\n","import { DataSourceInstanceSettings, DataSourceJsonData, DataSourceSettings } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { PERMISSIONS_TIME_INTERVALS } from 'app/features/alerting/unified/components/mute-timings/permissions';\nimport { PERMISSIONS_NOTIFICATION_POLICIES } from 'app/features/alerting/unified/components/notification-policies/permissions';\nimport {\n AlertManagerDataSourceJsonData,\n AlertManagerImplementation,\n AlertmanagerChoice,\n} from 'app/plugins/datasource/alertmanager/types';\nimport { AccessControlAction } from 'app/types/accessControl';\nimport {\n DataSourceRulesSourceIdentifier as DataSourceRulesSourceIdentifier,\n GrafanaRulesSourceIdentifier,\n GrafanaRulesSourceSymbol,\n RuleIdentifier,\n RulesSource,\n RulesSourceIdentifier,\n RulesSourceUid,\n} from 'app/types/unified-alerting';\nimport grafanaIconSvg from 'img/grafana_icon.svg';\n\nimport { alertmanagerApi } from '../api/alertmanagerApi';\nimport { PERMISSIONS_CONTACT_POINTS } from '../components/contact-points/permissions';\nimport { PERMISSIONS_TEMPLATES } from '../components/templates/permissions';\nimport { useAlertManagersByPermission } from '../hooks/useAlertManagerSources';\nimport { isAlertManagerWithConfigAPI } from '../state/AlertmanagerContext';\n\nimport { instancesPermissions, notificationsPermissions, silencesPermissions } from './access-control';\nimport { isExtraConfig } from './alertmanager/extraConfigs';\nimport { getAllDataSources } from './config';\nimport { isGrafanaRuleIdentifier } from './rules';\n\nexport const GRAFANA_RULES_SOURCE_NAME = 'grafana';\nexport const GRAFANA_DATASOURCE_NAME = '-- Grafana --';\n\nexport const GrafanaRulesSource: GrafanaRulesSourceIdentifier = {\n uid: GrafanaRulesSourceSymbol,\n name: GRAFANA_RULES_SOURCE_NAME,\n ruleSourceType: 'grafana',\n};\n\n/**\n * @deprecated use \"SupportedRulesSourceType\" and related types instead\n */\nexport enum DataSourceType {\n Alertmanager = 'alertmanager',\n Loki = 'loki',\n Prometheus = 'prometheus',\n AmazonPrometheus = 'grafana-amazonprometheus-datasource',\n AzurePrometheus = 'grafana-azureprometheus-datasource',\n}\n\nexport interface AlertManagerDataSource {\n name: string;\n displayName?: string;\n imgUrl: string;\n meta?: DataSourceInstanceSettings['meta'];\n hasConfigurationAPI?: boolean;\n handleGrafanaManagedAlerts?: boolean;\n}\n\nexport function getRulesDataSources() {\n const hasReadPermission = contextSrv.hasPermission(AccessControlAction.AlertingRuleExternalRead);\n const hasWritePermission = contextSrv.hasPermission(AccessControlAction.AlertingRuleExternalWrite);\n if (!hasReadPermission && !hasWritePermission) {\n return [];\n }\n\n return getAllDataSources()\n .filter((ds) => isSupportedExternalRulesSourceType(ds.type))\n .filter((ds) => isDataSourceManagingAlerts(ds))\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function getRulesSourceUniqueKey(rulesSource: RulesSource): string {\n return isGrafanaRulesSource(rulesSource) ? 'grafana' : (rulesSource.uid ?? rulesSource.id);\n}\n\nexport function getRulesDataSource(rulesSourceName: string) {\n return getRulesDataSources().find((x) => x.name === rulesSourceName);\n}\n\nexport function getRulesDataSourceByUID(uid: string) {\n return getRulesDataSources().find((x) => x.uid === uid);\n}\n\nexport function getAlertManagerDataSources() {\n return getAllDataSources()\n .filter(isAlertmanagerDataSourceInstance)\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function isAlertmanagerDataSourceInstance(\n dataSource: DataSourceInstanceSettings\n): dataSource is DataSourceInstanceSettings<AlertManagerDataSourceJsonData> {\n return dataSource.type === DataSourceType.Alertmanager;\n}\n\nexport function isAlertmanagerDataSource(\n dataSource: DataSourceSettings\n): dataSource is DataSourceSettings<AlertManagerDataSourceJsonData> {\n return dataSource.type === DataSourceType.Alertmanager;\n}\n\nexport function getExternalDsAlertManagers() {\n return getAlertManagerDataSources().filter((ds) => ds.jsonData.handleGrafanaManagedAlerts);\n}\n\nexport function isAlertmanagerDataSourceInterestedInAlerts(\n dataSourceSettings: DataSourceSettings<AlertManagerDataSourceJsonData>\n) {\n return dataSourceSettings.jsonData.handleGrafanaManagedAlerts === true;\n}\n\nconst grafanaAlertManagerDataSource: AlertManagerDataSource = {\n name: GRAFANA_RULES_SOURCE_NAME,\n imgUrl: grafanaIconSvg,\n hasConfigurationAPI: true,\n};\n\n// Used only as a fallback for Alert Group plugin\nexport function getAllAlertManagerDataSources(): AlertManagerDataSource[] {\n return [\n grafanaAlertManagerDataSource,\n ...getAlertManagerDataSources().map<AlertManagerDataSource>((ds) => ({\n name: ds.name,\n displayName: ds.name,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n })),\n ];\n}\n\n/**\n * This method gets all alert managers that the user has access, and then filter them first by being able to handle grafana managed alerts,\n * and then depending on the current alerting configuration returns either only the internal alert managers, only the external alert managers, or both.\n *\n */\nexport function useGetAlertManagerDataSourcesByPermissionAndConfig(\n permission: 'instance' | 'notification'\n): AlertManagerDataSource[] {\n const allAlertManagersByPermission = useAlertManagersByPermission(permission); // this hook memoizes the result of getAlertManagerDataSourcesByPermission\n\n const externalDsAlertManagers: AlertManagerDataSource[] =\n allAlertManagersByPermission.availableExternalDataSources.filter((ds) => ds.handleGrafanaManagedAlerts);\n const internalDSAlertManagers = allAlertManagersByPermission.availableInternalDataSources;\n\n //get current alerting configuration\n const { currentData: amConfigStatus } = alertmanagerApi.endpoints.getGrafanaAlertingConfigurationStatus.useQuery();\n\n const alertmanagerChoice = amConfigStatus?.alertmanagersChoice;\n\n switch (alertmanagerChoice) {\n case AlertmanagerChoice.Internal:\n return internalDSAlertManagers;\n case AlertmanagerChoice.External:\n return externalDsAlertManagers;\n default:\n return [...internalDSAlertManagers, ...externalDsAlertManagers];\n }\n}\n\n/**\n * This method gets all alert managers that the user has access to and then split them into two groups:\n * 1. Internal alert managers\n * 2. External alert managers\n */\nexport function getAlertManagerDataSourcesByPermission(permission: 'instance' | 'notification'): {\n availableInternalDataSources: AlertManagerDataSource[];\n availableExternalDataSources: AlertManagerDataSource[];\n} {\n const availableInternalDataSources: AlertManagerDataSource[] = [];\n const availableExternalDataSources: AlertManagerDataSource[] = [];\n const permissions = {\n instance: instancesPermissions.read,\n notification: notificationsPermissions.read,\n silence: silencesPermissions.read,\n };\n\n const builtinAlertmanagerPermissions = [\n ...Object.values(permissions).flatMap((permissions) => permissions.grafana),\n ...PERMISSIONS_CONTACT_POINTS,\n ...PERMISSIONS_NOTIFICATION_POLICIES,\n ...PERMISSIONS_TEMPLATES,\n ...PERMISSIONS_TIME_INTERVALS,\n ];\n\n const hasPermissionsForInternalAlertmanager = builtinAlertmanagerPermissions.some((permission) =>\n contextSrv.hasPermission(permission)\n );\n\n if (hasPermissionsForInternalAlertmanager) {\n availableInternalDataSources.push(grafanaAlertManagerDataSource);\n }\n\n if (contextSrv.hasPermission(permissions[permission].external)) {\n const cloudSources = getAlertManagerDataSources().map<AlertManagerDataSource>((ds) => ({\n name: ds.name,\n displayName: ds.name,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n hasConfigurationAPI: isAlertManagerWithConfigAPI(ds.jsonData),\n handleGrafanaManagedAlerts: ds.jsonData.handleGrafanaManagedAlerts,\n }));\n availableExternalDataSources.push(...cloudSources);\n }\n\n return { availableInternalDataSources, availableExternalDataSources };\n}\n\nexport function getAllRulesSourceNames(): string[] {\n const availableRulesSources: string[] = getRulesDataSources().map((r) => r.name);\n\n if (contextSrv.hasPermission(AccessControlAction.AlertingRuleRead)) {\n availableRulesSources.push(GRAFANA_RULES_SOURCE_NAME);\n }\n\n return availableRulesSources;\n}\n\nexport function getExternalRulesSources(): DataSourceRulesSourceIdentifier[] {\n return getRulesDataSources().map((ds) => ({\n name: ds.name,\n uid: ds.uid,\n ruleSourceType: 'datasource',\n }));\n}\n\nexport function getAllRulesSources(): RulesSource[] {\n const availableRulesSources: RulesSource[] = getRulesDataSources();\n\n if (contextSrv.hasPermission(AccessControlAction.AlertingRuleRead)) {\n availableRulesSources.unshift(GRAFANA_RULES_SOURCE_NAME);\n }\n\n return availableRulesSources;\n}\n\nexport function getRulesSourceName(rulesSource: RulesSource): string {\n return isCloudRulesSource(rulesSource) ? rulesSource.name : rulesSource;\n}\n\nexport function getRulesSourceUid(rulesSource: RulesSource): string {\n return isCloudRulesSource(rulesSource) ? rulesSource.uid : GRAFANA_RULES_SOURCE_NAME;\n}\n\nexport function isCloudRulesSource(rulesSource: RulesSource | string): rulesSource is DataSourceInstanceSettings {\n return rulesSource !== GRAFANA_RULES_SOURCE_NAME;\n}\n\nexport function isVanillaPrometheusAlertManagerDataSource(name: string): boolean {\n return (\n name !== GRAFANA_RULES_SOURCE_NAME &&\n getAlertmanagerDataSourceByName(name)?.jsonData?.implementation === AlertManagerImplementation.prometheus\n );\n}\n\nexport function isProvisionedDataSource(dataSource: DataSourceSettings): boolean {\n return dataSource.readOnly === true;\n}\n\nexport function isGrafanaRulesSource(\n rulesSource: RulesSource | string\n): rulesSource is typeof GRAFANA_RULES_SOURCE_NAME {\n return rulesSource === GRAFANA_RULES_SOURCE_NAME;\n}\n\nexport function getDataSourceByName(name: string): DataSourceInstanceSettings<DataSourceJsonData> | undefined {\n return getAllDataSources().find((source) => source.name === name);\n}\n\nexport function getDataSourceByUid(dsUid: string): DataSourceInstanceSettings<DataSourceJsonData> | undefined {\n return getAllDataSources().find((source) => source.uid === dsUid);\n}\n\nexport function getAlertmanagerDataSourceByName(name: string) {\n return getAllDataSources()\n .filter(isAlertmanagerDataSourceInstance)\n .find((source) => source.name === name);\n}\n\nexport function getRulesSourceByName(name: string): RulesSource | undefined {\n if (name === GRAFANA_RULES_SOURCE_NAME) {\n return GRAFANA_RULES_SOURCE_NAME;\n }\n return getDataSourceByName(name);\n}\n\nexport function getDatasourceAPIId(dataSourceName: string) {\n if (dataSourceName === GRAFANA_RULES_SOURCE_NAME) {\n return GRAFANA_RULES_SOURCE_NAME;\n }\n const ds = getDataSourceByName(dataSourceName);\n if (!ds) {\n throw new Error(`Datasource \"${dataSourceName}\" not found`);\n }\n return String(ds.id);\n}\n\nexport function getDatasourceAPIUid(dataSourceName: string) {\n if (dataSourceName === GRAFANA_RULES_SOURCE_NAME) {\n return GRAFANA_RULES_SOURCE_NAME;\n }\n\n if (isExtraConfig(dataSourceName)) {\n return dataSourceName;\n }\n\n const ds = getDataSourceByName(dataSourceName);\n if (!ds) {\n throw new Error(`Datasource \"${dataSourceName}\" not found`);\n }\n return ds.uid;\n}\n\nexport function getDataSourceUID(rulesSourceIdentifier: { rulesSourceName: string } | { uid: RulesSourceUid }) {\n if ('uid' in rulesSourceIdentifier) {\n return rulesSourceIdentifier.uid;\n }\n\n if (rulesSourceIdentifier.rulesSourceName === GRAFANA_RULES_SOURCE_NAME) {\n return GrafanaRulesSourceSymbol;\n }\n\n const ds = getRulesDataSource(rulesSourceIdentifier.rulesSourceName);\n if (!ds) {\n return undefined;\n }\n return ds.uid;\n}\n\nexport function getFirstCompatibleDataSource(): DataSourceInstanceSettings<DataSourceJsonData> | undefined {\n return getDataSourceSrv().getList({ alerting: true })[0];\n}\n\nexport function getDefaultOrFirstCompatibleDataSource(): DataSourceInstanceSettings<DataSourceJsonData> | undefined {\n const defaultDataSource = getDataSourceSrv().getInstanceSettings('default');\n const defaultIsCompatible = defaultDataSource?.meta.alerting ?? false;\n\n return defaultIsCompatible ? defaultDataSource : getFirstCompatibleDataSource();\n}\n\nexport function isDataSourceManagingAlerts(ds: DataSourceInstanceSettings<DataSourceJsonData>) {\n return ds.jsonData.manageAlerts !== false; //if this prop is undefined it defaults to true\n}\n\nexport function isDataSourceAllowedAsRecordingRulesTarget(ds: DataSourceInstanceSettings<DataSourceJsonData>) {\n return ds.jsonData.allowAsRecordingRulesTarget !== false; // if this prop is undefined it defaults to true\n}\n\nexport function ruleIdentifierToRuleSourceIdentifier(ruleIdentifier: RuleIdentifier): RulesSourceIdentifier {\n if (isGrafanaRuleIdentifier(ruleIdentifier)) {\n return { uid: GrafanaRulesSourceSymbol, name: GRAFANA_RULES_SOURCE_NAME, ruleSourceType: 'grafana' };\n }\n\n return {\n uid: getDatasourceAPIUid(ruleIdentifier.ruleSourceName),\n name: ruleIdentifier.ruleSourceName,\n ruleSourceType: 'datasource',\n };\n}\n\n/**\n * Check if the given type is a supported external Prometheus flavored rules source type.\n */\nexport function isSupportedExternalPrometheusFlavoredRulesSourceType(\n type: string\n): type is SupportedExternalPrometheusFlavoredRulesSourceType {\n return SUPPORTED_EXTERNAL_PROMETHEUS_FLAVORED_RULE_SOURCE_TYPES.find((t) => t === type) !== undefined;\n}\nexport const SUPPORTED_EXTERNAL_PROMETHEUS_FLAVORED_RULE_SOURCE_TYPES = [\n 'prometheus',\n 'grafana-amazonprometheus-datasource',\n 'grafana-azureprometheus-datasource',\n] as const;\nexport type SupportedExternalPrometheusFlavoredRulesSourceType =\n (typeof SUPPORTED_EXTERNAL_PROMETHEUS_FLAVORED_RULE_SOURCE_TYPES)[number]; // infer the type from the tuple above so we can maintain a single source of truth\n\n/**\n * Check if the given type is a supported external rules source type. Includes Loki and Prometheus flavored types.\n */\nexport function isSupportedExternalRulesSourceType(type: string): type is SupportedExternalRulesSourceType {\n return SUPPORTED_EXTERNAL_RULE_SOURCE_TYPES.find((t) => t === type) !== undefined;\n}\nexport type SupportedExternalRulesSourceType = 'loki' | SupportedExternalPrometheusFlavoredRulesSourceType;\nexport const SUPPORTED_EXTERNAL_RULE_SOURCE_TYPES = [\n 'loki',\n ...SUPPORTED_EXTERNAL_PROMETHEUS_FLAVORED_RULE_SOURCE_TYPES,\n] as const;\n\n/**\n * Check if the given type is a supported rules source type. Includes \"grafana\" for Grafana Managed Rules.\n */\nexport function isSupportedRulesSourceType(type: string): type is SupportedRulesSourceType {\n return type === GRAFANA_RULES_SOURCE_NAME || isSupportedExternalRulesSourceType(type);\n}\nexport type SupportedRulesSourceType = 'grafana' | SupportedExternalRulesSourceType;\nexport const SUPPORTED_RULE_SOURCE_TYPES = [\n GRAFANA_RULES_SOURCE_NAME,\n ...SUPPORTED_EXTERNAL_RULE_SOURCE_TYPES,\n] as const satisfies string[];\n\nexport function isValidRecordingRulesTarget(ds: DataSourceInstanceSettings<DataSourceJsonData>): boolean {\n return isSupportedExternalPrometheusFlavoredRulesSourceType(ds.type) && isDataSourceAllowedAsRecordingRulesTarget(ds);\n}\n","import { PanelPluginMeta, PluginState, unEscapeStringFromRegex } from '@grafana/data';\nimport { config } from 'app/core/config';\n\nexport function getAllPanelPluginMeta(): PanelPluginMeta[] {\n const allPanels = config.panels;\n\n return Object.keys(allPanels)\n .filter((key) => allPanels[key]['hideFromList'] === false)\n .map((key) => allPanels[key])\n .sort((a: PanelPluginMeta, b: PanelPluginMeta) => a.sort - b.sort);\n}\n\nexport function getWidgetPluginMeta(): PanelPluginMeta[] {\n return getAllPanelPluginMeta().filter((panel) => !!panel.skipDataQuery);\n}\n\nexport function getVizPluginMeta(): PanelPluginMeta[] {\n return getAllPanelPluginMeta().filter((panel) => !panel.skipDataQuery);\n}\n\nexport function filterPluginList(\n pluginsList: PanelPluginMeta[],\n searchQuery: string, // Note: this will be an escaped regex string as it comes from `FilterInput`\n pluginId?: string\n): PanelPluginMeta[] {\n if (!searchQuery.length) {\n return pluginsList.filter((p) => {\n if (p.state === PluginState.deprecated) {\n return pluginId === p.id;\n }\n return true;\n });\n }\n\n const query = unEscapeStringFromRegex(searchQuery).toLowerCase();\n const first: PanelPluginMeta[] = [];\n const match: PanelPluginMeta[] = [];\n const isGraphQuery = 'graph'.startsWith(query);\n\n for (const item of pluginsList) {\n if (item.state === PluginState.deprecated && pluginId !== item.id) {\n continue;\n }\n\n const name = item.name.toLowerCase();\n const idx = name.indexOf(query);\n\n if (idx === 0) {\n first.push(item);\n } else if (idx > 0) {\n match.push(item);\n } else if (isGraphQuery && item.id === 'timeseries') {\n first.push(item);\n }\n }\n\n return first.concat(match);\n}\n","import { ComponentType } from 'react';\n\nimport {\n NumberFieldConfigSettings,\n SelectFieldConfigSettings,\n SliderFieldConfigSettings,\n StringFieldConfigSettings,\n} from '../field/overrides/processors';\nimport { RegistryItem, Registry } from '../utils/Registry';\n\nimport { OptionEditorConfig } from './options';\n\n/**\n * Option editor registry item\n */\nexport interface OptionsEditorItem<TOptions, TSettings, TEditorProps, TValue>\n extends RegistryItem,\n OptionEditorConfig<TOptions, TSettings, TValue> {\n /**\n * React component used to edit the options property\n */\n editor: ComponentType<TEditorProps>;\n\n /*\n * @param value\n */\n getItemsCount?: (value?: TValue) => number;\n}\n\n/**\n * Describes an API for option editors UI builder\n */\ninterface OptionsUIRegistryBuilderAPI<\n TOptions,\n TEditorProps,\n T extends OptionsEditorItem<TOptions, any, TEditorProps, any>,\n> {\n addNumberInput?<TSettings extends NumberFieldConfigSettings = NumberFieldConfigSettings>(\n config: OptionEditorConfig<TOptions, TSettings, number>\n ): this;\n\n addSliderInput?<TSettings extends SliderFieldConfigSettings = SliderFieldConfigSettings>(\n config: OptionEditorConfig<TOptions, TSettings, number>\n ): this;\n\n addTextInput?<TSettings extends StringFieldConfigSettings = StringFieldConfigSettings>(\n config: OptionEditorConfig<TOptions, TSettings, string>\n ): this;\n\n addStringArray?<TSettings extends StringFieldConfigSettings = StringFieldConfigSettings>(\n config: OptionEditorConfig<TOptions, TSettings, string[]>\n ): this;\n\n addSelect?<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n config: OptionEditorConfig<TOptions, TSettings, TOption>\n ): this;\n\n addRadio?<TOption, TSettings extends SelectFieldConfigSettings<TOption> = SelectFieldConfigSettings<TOption>>(\n config: OptionEditorConfig<TOptions, TSettings, TOption>\n ): this;\n\n addBooleanSwitch?<TSettings>(config: OptionEditorConfig<TOptions, TSettings, boolean>): this;\n\n addUnitPicker?<TSettings>(config: OptionEditorConfig<TOptions, TSettings, string>): this;\n\n addColorPicker?<TSettings>(config: OptionEditorConfig<TOptions, TSettings, string>): this;\n\n /**\n * Enables custom editor definition\n * @param config\n */\n addCustomEditor<TSettings, TValue>(config: OptionsEditorItem<TOptions, TSettings, TEditorProps, TValue>): this;\n\n /**\n * Returns registry of option editors\n */\n getRegistry: () => Registry<T>;\n}\n\nexport abstract class OptionsUIRegistryBuilder<\n TOptions,\n TEditorProps,\n T extends OptionsEditorItem<TOptions, any, TEditorProps, any>,\n> implements OptionsUIRegistryBuilderAPI<TOptions, TEditorProps, T>\n{\n private properties: T[] = [];\n\n addCustomEditor<TSettings, TValue>(config: T & OptionsEditorItem<TOptions, TSettings, TEditorProps, TValue>): this {\n this.properties.push(config);\n return this;\n }\n\n getRegistry() {\n return new Registry(() => {\n return this.properties;\n });\n }\n\n getItems() {\n return this.properties;\n }\n}\n","import { set, cloneDeep } from 'lodash';\n\nimport {\n FieldNamePickerConfigSettings,\n NumberFieldConfigSettings,\n SelectFieldConfigSettings,\n SliderFieldConfigSettings,\n StringFieldConfigSettings,\n UnitFieldConfigSettings,\n booleanOverrideProcessor,\n identityOverrideProcessor,\n numberOverrideProcessor,\n selectOverrideProcessor,\n stringOverrideProcessor,\n unitOverrideProcessor,\n} from '../field/overrides/processors';\nimport {\n StandardEditorContext,\n StandardEditorProps,\n standardEditorsRegistry,\n} from '../field/standardFieldConfigEditorRegistry';\nimport { PanelOptionsSupplier } from '../panel/PanelPlugin';\nimport { OptionsEditorItem, OptionsUIRegistryBuilder } from '../types/OptionsUIRegistryBuilder';\nimport { isObject } from '../types/data';\nimport { FieldConfigPropertyItem, FieldConfigEditorConfig } from '../types/fieldOverrides';\nimport { PanelOptionsEditorConfig, PanelOptionsEditorItem } from '../types/panel';\n\n/**\n * Fluent API for declarative creation of field config option editors\n */\nexport class FieldConfigEditorBuilder<TOptions> extends OptionsUIRegistryBuilder<\n TOptions,\n StandardEditorProps,\n FieldConfigPropertyItem<TOptions>\n> {\n addNumberInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & NumberFieldConfigSettings, number>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n override: standardEditorsRegistry.get('number').editor,\n editor: standardEditorsRegistry.get('number').editor,\n process: numberOverrideProcessor,\n shouldApply: config.shouldApply ?? (() => true),\n settings: config.settings || {},\n });\n }\n\n addSliderInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & SliderFieldConfigSettings, number>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n override: standardEditorsRegistry.get('slider').editor,\n editor: standardEditorsRegistry.get('slider').editor,\n process: numberOverrideProcessor,\n shouldApply: config.shouldApply ?? (() => true),\n settings: config.settings || {},\n });\n }\n\n addTextInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n override: standardEditorsRegistry.get('text').editor,\n editor: standardEditorsRegistry.get('text').editor,\n process: stringOverrideProcessor,\n shouldApply: config.shouldApply ?? (() => true),\n settings: config.settings || {},\n });\n }\n\n addSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n config: FieldConfigEditorConfig<TOptions, TSettings, TOption>\n ) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n override: standardEditorsRegistry.get('select').editor,\n editor: standardEditorsRegistry.get('select').editor,\n process: selectOverrideProcessor,\n // ???\n shouldApply: config.shouldApply ? config.shouldApply : () => true,\n settings: config.settings || { options: [] },\n });\n }\n\n addRadio<TOption, TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, TOption>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n override: standardEditorsRegistry.get('radio').editor,\n editor: standardEditorsRegistry.get('radio').editor,\n process: selectOverrideProcessor,\n // ???\n shouldApply: config.shouldApply ? config.shouldApply : () => true,\n settings: config.settings || { options: [] },\n });\n }\n\n addBooleanSwitch<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, boolean>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('boolean').editor,\n override: standardEditorsRegistry.get('boolean').editor,\n process: booleanOverrideProcessor,\n shouldApply: config.shouldApply ? config.shouldApply : () => true,\n settings: config.settings || {},\n });\n }\n\n addColorPicker<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, string>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('color').editor,\n override: standardEditorsRegistry.get('color').editor,\n process: identityOverrideProcessor,\n shouldApply: config.shouldApply ? config.shouldApply : () => true,\n settings: config.settings || {},\n });\n }\n\n addUnitPicker<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & UnitFieldConfigSettings, string>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('unit').editor,\n override: standardEditorsRegistry.get('unit').editor,\n process: unitOverrideProcessor,\n shouldApply: config.shouldApply ? config.shouldApply : () => true,\n settings: config.settings || {},\n });\n }\n\n addFieldNamePicker<TSettings>(\n config: FieldConfigEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n ): this {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('field-name').editor,\n override: standardEditorsRegistry.get('field-name').editor,\n process: identityOverrideProcessor,\n shouldApply: config.shouldApply ? config.shouldApply : () => true,\n settings: config.settings || {},\n });\n }\n\n addGenericEditor<TSettings>(\n config: FieldConfigEditorConfig<TOptions, TSettings & any>, // & any... i give up!\n editor: (props: StandardEditorProps<TSettings>) => JSX.Element\n ): this {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: editor,\n override: editor,\n process: identityOverrideProcessor,\n shouldApply: config.shouldApply ? config.shouldApply : () => true,\n settings: config.settings || {},\n });\n }\n}\n\nexport interface NestedValueAccess {\n getValue: (path: string) => any;\n onChange: (path: string, value: any) => void;\n getContext?: (parent: StandardEditorContext<any>) => StandardEditorContext<any>;\n}\nexport interface NestedPanelOptions<TSub = any> {\n path: string;\n category?: string[];\n defaultValue?: TSub;\n build: PanelOptionsSupplier<TSub>;\n values?: (parent: NestedValueAccess) => NestedValueAccess;\n}\n\nexport class NestedPanelOptionsBuilder<TSub = any> implements OptionsEditorItem<TSub, any, any, any> {\n path = '';\n category?: string[];\n defaultValue?: TSub;\n id = 'nested-panel-options';\n name = 'nested';\n editor = () => null;\n\n constructor(public cfg: NestedPanelOptions<TSub>) {\n this.path = cfg.path;\n this.category = cfg.category;\n this.defaultValue = this.getDefaultValue(cfg);\n }\n\n private getDefaultValue(cfg: NestedPanelOptions<TSub>): TSub {\n let result = isObject(cfg.defaultValue) ? cloneDeep(cfg.defaultValue) : {};\n\n const builder = new PanelOptionsEditorBuilder<TSub>();\n cfg.build(builder, { data: [] });\n\n for (const item of builder.getItems()) {\n if (item.defaultValue != null) {\n set(result, item.path, item.defaultValue);\n }\n }\n\n // TSub is defined as type any and we need to cast it back\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return result as TSub;\n }\n\n getBuilder = () => {\n return this.cfg.build;\n };\n\n getNestedValueAccess = (parent: NestedValueAccess) => {\n const values = this.cfg.values;\n if (values) {\n return values(parent);\n }\n // by default prefix the path\n return {\n getValue: (path: string) => parent.getValue(`${this.path}.${path}`),\n onChange: (path: string, value: any) => parent.onChange(`${this.path}.${path}`, value),\n };\n };\n}\n\nexport function isNestedPanelOptions(item: unknown): item is NestedPanelOptionsBuilder {\n return isObject(item) && 'id' in item && item.id === 'nested-panel-options';\n}\n\n/**\n * Fluent API for declarative creation of panel options\n */\nexport class PanelOptionsEditorBuilder<TOptions> extends OptionsUIRegistryBuilder<\n TOptions,\n StandardEditorProps,\n PanelOptionsEditorItem<TOptions>\n> {\n addNestedOptions<Sub>(opts: NestedPanelOptions<Sub>) {\n const s = new NestedPanelOptionsBuilder<Sub>(opts);\n return this.addCustomEditor(s);\n }\n\n addNumberInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & NumberFieldConfigSettings, number>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('number').editor,\n });\n }\n\n addSliderInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & SliderFieldConfigSettings, number>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('slider').editor,\n });\n }\n\n addTextInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('text').editor,\n });\n }\n\n addStringArray<TSettings>(\n config: PanelOptionsEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string[]>\n ) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('strings').editor,\n });\n }\n\n addSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n ) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('select').editor,\n });\n }\n\n addMultiSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n ) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('multi-select').editor,\n });\n }\n\n addRadio<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n ) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('radio').editor,\n });\n }\n\n addBooleanSwitch<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, boolean>) {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('boolean').editor,\n });\n }\n\n addColorPicker<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, string>): this {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('color').editor,\n settings: config.settings || {},\n });\n }\n\n addTimeZonePicker<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, string>): this {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('timezone').editor,\n settings: config.settings || {},\n });\n }\n\n addUnitPicker<TSettings>(\n config: PanelOptionsEditorConfig<TOptions, TSettings & UnitFieldConfigSettings, string>\n ): this {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('unit').editor,\n });\n }\n\n addFieldNamePicker<TSettings>(\n config: PanelOptionsEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n ): this {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('field-name').editor,\n });\n }\n\n addDashboardPicker<TSettings>(\n config: PanelOptionsEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n ): this {\n return this.addCustomEditor({\n ...config,\n id: config.path,\n editor: standardEditorsRegistry.get('dashboard-uid').editor, // added at runtime\n });\n }\n}\n","/**\n * Hashes a string using the DJB2 algorithm.\n */\nexport function djb2Hash(str: string): number {\n let hash = 5381;\n\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n\n return hash >>> 0; // Ensure the result is an unsigned 32-bit integer\n}\n","// @ts-ignore\nimport sqlFormatter from 'sql-formatter-plus';\n\nexport function formatSQL(q: string) {\n return sqlFormatter.format(q).replace(/(\\$ \\{ .* \\})|(\\$ __)|(\\$ \\w+)/g, (m: string) => {\n return m.replace(/\\s/g, '');\n });\n}\n","import { Func, FuncParameter } from './types';\n\nexport const COMMON_FNS: Func[] = [\n { name: 'AVG' },\n { name: 'COUNT' },\n { name: 'MAX' },\n { name: 'MIN' },\n { name: 'SUM' },\n];\n\nconst intervalParam: FuncParameter = {\n name: 'Interval',\n required: true,\n options: () => {\n return Promise.resolve([{ label: '$__interval', value: '$__interval' }]);\n },\n};\nconst fillParam: FuncParameter = {\n name: 'Fill',\n required: false,\n options: () =>\n Promise.resolve([\n { label: '0', value: '0' },\n { label: 'NULL', value: 'NULL' },\n { label: 'previous', value: 'previous' },\n ]),\n};\n\nexport const MACRO_FUNCTIONS = (columnParam: FuncParameter) => [\n {\n name: '$__timeGroup',\n description: 'Time grouping function',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__timeGroupAlias',\n description: 'Time grouping function with time as alias',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__time',\n description: 'An expression to rename the column to time',\n parameters: [columnParam],\n },\n {\n name: '$__timeEpoch',\n parameters: [columnParam],\n },\n {\n name: '$__unixEpochGroup',\n parameters: [columnParam, intervalParam, fillParam],\n },\n {\n name: '$__unixEpochGroupAlias',\n parameters: [columnParam, intervalParam, fillParam],\n },\n];\n\nexport const MACRO_NAMES = [\n '$__time',\n '$__timeEpoch',\n '$__timeFilter',\n '$__timeFrom',\n '$__timeTo',\n '$__timeGroup',\n '$__timeGroupAlias',\n '$__unixEpochFilter',\n '$__unixEpochNanoFilter',\n '$__unixEpochNanoFrom',\n '$__unixEpochNanoTo',\n '$__unixEpochGroup',\n '$__unixEpochGroupAlias',\n];\n","import { uniqBy } from 'lodash';\n\nimport { DataFrame, MetricFindValue } from '@grafana/data';\n\nimport type { ResponseParser as ResponseParserType } from './types';\n\nexport class ResponseParser implements ResponseParserType {\n transformMetricFindResponse(frame: DataFrame): MetricFindValue[] {\n const values: MetricFindValue[] = [];\n const textField = frame.fields.find((f) => f.name === '__text');\n const valueField = frame.fields.find((f) => f.name === '__value');\n\n if (textField && valueField) {\n for (let i = 0; i < textField.values.length; i++) {\n values.push({ text: '' + textField.values[i], value: '' + valueField.values[i] });\n }\n } else {\n for (const field of frame.fields) {\n for (const value of field.values) {\n values.push({ text: value });\n }\n }\n }\n\n return uniqBy(values, 'text');\n }\n}\n","import { css } from '@emotion/css';\nimport { lazy, Suspense } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\nimport type { SqlQueryEditorProps } from './QueryEditor';\nconst QueryEditor = lazy(() => import(/* webpackChunkName: \"sql-query-editor\" */ './QueryEditor'));\n\nexport function SqlQueryEditorLazy(props: SqlQueryEditorProps) {\n const styles = useStyles2(getStyles);\n\n return (\n <Suspense\n fallback={\n <LoadingPlaceholder\n text={t('grafana-sql.components.sql-query-editor-lazy.text-loading-editor', 'Loading editor')}\n className={styles.container}\n />\n }\n >\n <QueryEditor {...props} />\n </Suspense>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n marginBottom: 'unset',\n marginLeft: theme.spacing(1),\n }),\n };\n};\n","import { AnnotationQuery } from '@grafana/data';\n\nimport { applyQueryDefaults } from '../defaults';\nimport { SQLQuery } from '../types';\n\nexport default function migrateAnnotation(annotation: AnnotationQuery<SQLQuery>) {\n const oldQuery = typeof annotation.rawQuery === 'string' ? annotation.rawQuery : null;\n\n if (!oldQuery) {\n return annotation;\n }\n\n const newQuery = applyQueryDefaults({ refId: 'Annotation', ...(annotation.target ?? {}), rawSql: oldQuery });\n\n return {\n ...annotation,\n rawQuery: undefined,\n workspace: undefined,\n subscription: undefined,\n queryType: undefined,\n target: newQuery,\n };\n}\n","import { lastValueFrom, Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n getDefaultTimeRange,\n DataFrame,\n DataFrameView,\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n MetricFindValue,\n ScopedVars,\n CoreApp,\n getSearchFilterScopedVar,\n LegacyMetricFindQueryOptions,\n VariableWithMultiSupport,\n TimeRange,\n} from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport {\n BackendDataSourceResponse,\n DataSourceWithBackend,\n FetchResponse,\n getBackendSrv,\n getTemplateSrv,\n toDataQueryResponse,\n TemplateSrv,\n reportInteraction,\n} from '@grafana/runtime';\n\nimport { ResponseParser } from '../ResponseParser';\nimport { SqlQueryEditorLazy } from '../components/QueryEditorLazy';\nimport { MACRO_NAMES } from '../constants';\nimport { DB, SQLQuery, SQLOptions, SqlQueryModel, QueryFormat } from '../types';\nimport migrateAnnotation from '../utils/migration';\n\nexport abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {\n id: number;\n responseParser: ResponseParser;\n name: string;\n interval: string;\n db: DB;\n preconfiguredDatabase: string;\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<SQLOptions>,\n protected readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.responseParser = new ResponseParser();\n this.id = instanceSettings.id;\n const settingsData = instanceSettings.jsonData || {};\n this.interval = settingsData.timeInterval || '1m';\n this.db = this.getDB();\n /*\n The `settingsData.database` will be defined if a default database has been defined in either\n 1) the ConfigurationEditor.tsx, OR 2) the provisioning config file, either under `jsondata.database`, or simply `database`.\n */\n this.preconfiguredDatabase = settingsData.database ?? '';\n this.annotations = {\n prepareAnnotation: migrateAnnotation,\n QueryEditor: SqlQueryEditorLazy,\n };\n }\n\n abstract getDB(dsID?: number): DB;\n\n abstract getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): SqlQueryModel;\n\n getResponseParser() {\n return this.responseParser;\n }\n\n interpolateVariable = (value: string | string[] | number, variable: VariableWithMultiSupport) => {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n return this.getQueryModel().quoteLiteral(value);\n } else {\n return String(value).replace(/'/g, \"''\");\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value)) {\n const quotedValues = value.map((v) => this.getQueryModel().quoteLiteral(v));\n return quotedValues.join(',');\n }\n\n return value;\n };\n\n interpolateVariablesInQueries(queries: SQLQuery[], scopedVars: ScopedVars): SQLQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n filterQuery(query: SQLQuery): boolean {\n return !query.hide;\n }\n\n applyTemplateVariables(target: SQLQuery, scopedVars: ScopedVars) {\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(target.rawSql, scopedVars, this.interpolateVariable),\n format: target.format,\n };\n }\n\n query(request: DataQueryRequest<SQLQuery>): Observable<DataQueryResponse> {\n // This logic reenables the previous SQL behavior regarding what databases are available for the user to query.\n const databaseIssue = this.checkForDatabaseIssue(request);\n\n if (!!databaseIssue) {\n const error = new Error(databaseIssue);\n return throwError(() => error);\n }\n\n request.targets.forEach((target) => {\n if (request.app === CoreApp.Dashboard || request.app === CoreApp.PanelViewer) {\n return;\n }\n\n reportInteraction('grafana_sql_query_executed', {\n datasource: target.datasource?.type,\n editorMode: target.editorMode,\n format: target.format,\n app: request.app,\n });\n });\n\n return super.query(request);\n }\n\n private checkForDatabaseIssue(request: DataQueryRequest<SQLQuery>) {\n // If the datasource is Postgres and there is no default database configured - either never configured or removed - return a database issue.\n if (this.type === 'grafana-postgresql-datasource' && !this.preconfiguredDatabase) {\n return `You do not currently have a default database configured for this data source. Postgres requires a default\n database with which to connect. Please configure one through the Data Sources Configuration page, or if you\n are using a provisioning file, update that configuration file with a default database.`;\n }\n\n // No need to check for database change/update issues if the datasource is being used in Explore.\n if (request.app !== CoreApp.Explore) {\n /*\n If a preconfigured datasource database has been added/updated - and the user has built ANY number of queries using a\n database OTHER than the preconfigured one, return a database issue - since those databases are no longer available.\n The user will need to update their queries to use the preconfigured database.\n */\n if (!!this.preconfiguredDatabase) {\n for (const target of request.targets) {\n // Test for database configuration change only if query was made in `builder` mode.\n if (\n target.editorMode === EditorMode.Builder &&\n target.dataset &&\n target.dataset !== this.preconfiguredDatabase\n ) {\n return `The configuration for this panel's data source has been modified. The previous database used in this panel's\n saved query is no longer available. Please update the query to use the new database option.\n Previous query parameters will be preserved until the query is updated.`;\n }\n }\n }\n }\n\n return;\n }\n\n async metricFindQuery(query: string, options?: LegacyMetricFindQueryOptions): Promise<MetricFindValue[]> {\n const range = options?.range;\n if (range == null) {\n // i cannot create a scenario where this happens, we handle it just to be sure.\n return [];\n }\n\n let refId = 'tempvar';\n if (options && options.variable && options.variable.name) {\n refId = options.variable.name;\n }\n\n const scopedVars = {\n ...options?.scopedVars,\n ...getSearchFilterScopedVar({ query, wildcardChar: '%', options }),\n };\n\n const rawSql = this.templateSrv.replace(query, scopedVars, this.interpolateVariable);\n\n const interpolatedQuery: SQLQuery = {\n refId: refId,\n datasource: this.getRef(),\n rawSql,\n format: QueryFormat.Table,\n };\n\n // NOTE: we can remove this try-catch when https://github.com/grafana/grafana/issues/82250\n // is fixed.\n let response;\n try {\n response = await this.runMetaQuery(interpolatedQuery, range);\n } catch (error) {\n console.error(error);\n throw new Error('error when executing the sql query');\n }\n return this.getResponseParser().transformMetricFindResponse(response);\n }\n\n // NOTE: this always runs with the `@grafana/data/getDefaultTimeRange` time range\n async runSql<T extends object>(query: string, options?: RunSQLOptions) {\n const range = getDefaultTimeRange();\n const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options?.refId }, range);\n return new DataFrameView<T>(frame);\n }\n\n private runMetaQuery(request: Partial<SQLQuery>, range: TimeRange): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const queries: DataQuery[] = [{ ...request, datasource: request.datasource || this.getRef(), refId }];\n\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n headers: this.getRequestHeaders(),\n data: {\n from: range.from.valueOf().toString(),\n to: range.to.valueOf().toString(),\n queries,\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0] ?? { fields: [] };\n })\n )\n );\n }\n\n targetContainsTemplate(target: SQLQuery) {\n let queryWithoutMacros = target.rawSql;\n MACRO_NAMES.forEach((value) => {\n queryWithoutMacros = queryWithoutMacros?.replace(value, '') || '';\n });\n return this.templateSrv.containsTemplate(queryWithoutMacros);\n }\n}\n\ninterface RunSQLOptions extends LegacyMetricFindQueryOptions {\n refId?: string;\n}\n","import { useState } from 'react';\n\nimport { Input } from '@grafana/ui';\n\ntype NumberInputProps = {\n value: number;\n defaultValue: number;\n onChange: (value: number) => void;\n width: number;\n};\n\nexport function NumberInput({ value, defaultValue, onChange, width }: NumberInputProps) {\n const [isEmpty, setIsEmpty] = useState(false);\n return (\n <Input\n type=\"number\"\n placeholder={String(defaultValue)}\n value={isEmpty ? '' : value}\n onChange={(e) => {\n if (e.currentTarget.value?.trim() === '') {\n setIsEmpty(true);\n onChange(defaultValue);\n } else {\n setIsEmpty(false);\n const newVal = Number(e.currentTarget.value);\n if (!Number.isNaN(newVal)) {\n onChange(newVal);\n }\n }\n }}\n width={width}\n />\n );\n}\n","import { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, Label, Stack, Tooltip } from '@grafana/ui';\n\nimport { SQLOptions } from '../../types';\n\nimport { NumberInput } from './NumberInput';\n\ninterface Props {\n labelWidth: number;\n onMaxLifetimeChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\nexport function MaxLifetimeField({ labelWidth, onMaxLifetimeChanged, jsonData }: Props) {\n return (\n <Field\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-lifetime\">Max lifetime</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-lifetime\">\n The maximum amount of time in seconds a connection may be reused. If set to 0, connections are\n reused forever.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <NumberInput\n value={jsonData.connMaxLifetime}\n defaultValue={config.sqlConnectionLimits.connMaxLifetime}\n onChange={onMaxLifetimeChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n","import { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, Label, Stack, Tooltip } from '@grafana/ui';\n\nimport { SQLOptions } from '../../types';\n\nimport { NumberInput } from './NumberInput';\n\ninterface Props {\n labelWidth: number;\n onMaxConnectionsChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\n\nexport function MaxOpenConnectionsField({ labelWidth, onMaxConnectionsChanged, jsonData }: Props) {\n return (\n <Field\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-open\">Max open</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-open\">\n The maximum number of open connections to the database. If <i>Max idle connections</i> is greater\n than 0 and the <i>Max open connections</i> is less than <i>Max idle connections</i>, then\n <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If set\n to 0, there is no limit on the number of open connections.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <NumberInput\n value={jsonData.maxOpenConns}\n defaultValue={config.sqlConnectionLimits.maxOpenConns}\n onChange={onMaxConnectionsChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n","import { DataSourceSettings } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { ConfigSubSection } from '@grafana/plugin-ui';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, InlineLabel, Label, Stack, Switch, Tooltip } from '@grafana/ui';\n\nimport { SQLConnectionLimits, SQLOptions } from '../../types';\n\nimport { MaxLifetimeField } from './MaxLifetimeField';\nimport { MaxOpenConnectionsField } from './MaxOpenConnectionsField';\nimport { NumberInput } from './NumberInput';\n\ninterface Props<T> {\n onOptionsChange: Function;\n options: DataSourceSettings<SQLOptions>;\n}\n\nexport const ConnectionLimits = <T extends SQLConnectionLimits>(props: Props<T>) => {\n const { onOptionsChange, options } = props;\n const jsonData = options.jsonData;\n const autoIdle = jsonData.maxIdleConnsAuto !== undefined ? jsonData.maxIdleConnsAuto : false;\n\n // Update JSON data with new values\n const updateJsonData = (values: {}) => {\n const newOpts = {\n ...options,\n jsonData: {\n ...jsonData,\n ...values,\n },\n };\n\n return onOptionsChange(newOpts);\n };\n\n // For the case of idle connections and connection lifetime\n // use a shared function to update respective properties\n const onJSONDataNumberChanged = (property: keyof SQLConnectionLimits) => {\n return (number?: number) => {\n updateJsonData({ [property]: number });\n };\n };\n\n // When the maximum number of connections is changed\n // see if we have the automatic idle option enabled\n const onMaxConnectionsChanged = (number?: number) => {\n if (autoIdle && number) {\n updateJsonData({\n maxOpenConns: number,\n maxIdleConns: number,\n });\n } else {\n updateJsonData({\n maxOpenConns: number,\n });\n }\n };\n\n // Update auto idle setting when control is toggled\n // and set minimum idle connections if automatic\n // is selected\n const onConnectionIdleAutoChanged = () => {\n let idleConns = undefined;\n let maxConns = undefined;\n\n // If the maximum number of open connections is undefined\n // and we're setting auto idle then set the default amount\n // otherwise take the numeric amount and get the value from that\n if (!autoIdle) {\n if (jsonData.maxOpenConns !== undefined) {\n maxConns = jsonData.maxOpenConns;\n idleConns = jsonData.maxOpenConns;\n }\n } else {\n maxConns = jsonData.maxOpenConns;\n idleConns = jsonData.maxIdleConns;\n }\n\n updateJsonData({\n maxIdleConnsAuto: !autoIdle,\n maxIdleConns: idleConns,\n maxOpenConns: maxConns,\n });\n };\n\n const labelWidth = 40;\n\n return (\n <ConfigSubSection\n title={t('grafana-sql.components.connection-limits.title-connection-limits', 'Connection limits')}\n >\n <MaxOpenConnectionsField\n labelWidth={labelWidth}\n onMaxConnectionsChanged={onMaxConnectionsChanged}\n jsonData={jsonData}\n />\n\n <Field\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.auto-max-idle\">Auto max idle</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans\n i18nKey=\"grafana-sql.components.connection-limits.content-auto-max-idle\"\n values={{ defaultMaxIdle: config.sqlConnectionLimits.maxIdleConns }}\n >\n If enabled, automatically set the number of <i>Maximum idle connections</i> to the same value as\n <i> Max open connections</i>. If the number of maximum open connections is not set it will be set\n to the default ({'{{defaultMaxIdle}}'}).\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <Switch value={autoIdle} onChange={onConnectionIdleAutoChanged} />\n </Field>\n\n <Field\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-idle\">Max idle</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-idle\">\n The maximum number of connections in the idle connection pool.If <i>Max open connections</i> is\n greater than 0 but less than the <i>Max idle connections</i>, then the <i>Max idle connections</i>{' '}\n will be reduced to match the <i>Max open connections</i> limit. If set to 0, no idle connections\n are retained.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n {autoIdle ? (\n <InlineLabel width={labelWidth}>{options.jsonData.maxIdleConns}</InlineLabel>\n ) : (\n <NumberInput\n value={jsonData.maxIdleConns}\n defaultValue={config.sqlConnectionLimits.maxIdleConns}\n onChange={(value) => {\n onJSONDataNumberChanged('maxIdleConns')(value);\n }}\n width={labelWidth}\n />\n )}\n </Field>\n\n <MaxLifetimeField\n labelWidth={labelWidth}\n onMaxLifetimeChanged={onJSONDataNumberChanged('connMaxLifetime')}\n jsonData={jsonData}\n />\n </ConfigSubSection>\n );\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\n// this custom component is necessary because the Grafana UI <Divider /> component is not backwards compatible with Grafana < 10.1.0\nexport const Divider = () => {\n const styles = useStyles2(getStyles);\n return <hr className={styles.horizontalDivider} />;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n horizontalDivider: css({\n borderTop: `1px solid ${theme.colors.border.weak}`,\n margin: theme.spacing(2, 0),\n width: '100%',\n }),\n };\n};\n","import {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n KeyValue,\n onUpdateDatasourceSecureJsonDataOption,\n updateDatasourcePluginResetOption,\n} from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Field, Icon, Label, SecretTextArea, Tooltip, Stack } from '@grafana/ui';\n\nexport interface Props<T extends DataSourceJsonData, S> {\n editorProps: DataSourcePluginOptionsEditorProps<T, S>;\n showCACert?: boolean;\n showKeyPair?: boolean;\n secureJsonFields?: KeyValue<Boolean>;\n labelWidth?: number;\n}\n\nexport const TLSSecretsConfig = <T extends DataSourceJsonData, S extends {} = {}>(props: Props<T, S>) => {\n const { editorProps, showCACert, showKeyPair = true } = props;\n const { secureJsonFields } = editorProps.options;\n return (\n <>\n {showKeyPair ? (\n <Field\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-certificate\">\n TLS/SSL Client Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-certificate\">\n To authenticate with an TLS/SSL client certificate, provide the client certificate here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientCert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientCert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientCert');\n }}\n />\n </Field>\n ) : null}\n {showCACert ? (\n <Field\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-root-certificate\">\n TLS/SSL Root Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-root-certificate\">\n If the selected TLS/SSL mode requires a server root certificate, provide it here\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsCACert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsCACert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsCACert');\n }}\n />\n </Field>\n ) : null}\n {showKeyPair ? (\n <Field\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-key\">TLS/SSL Client Key</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-key\">\n To authenticate with a client TLS/SSL certificate, provide the key here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN RSA PRIVATE KEY-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientKey}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientKey')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientKey');\n }}\n />\n </Field>\n ) : null}\n </>\n );\n};\n","import { createMonitoringLogger } from '@grafana/runtime';\n\nexport const sqlPluginLogger = createMonitoringLogger('features.plugins.sql');\n","import { useEffect } from 'react';\n\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { SQLOptions } from '../../types';\nimport { sqlPluginLogger } from '../../utils/logging';\n\n/**\n * 1. Moves the database field from the options object to jsonData.database and empties the database field.\n * 2. If max open connections, max idle connections, and auto idle are all undefined set these to default values.\n */\nexport function useMigrateDatabaseFields<T extends SQLOptions, S = {}>({\n onOptionsChange,\n options,\n}: DataSourcePluginOptionsEditorProps<T, S>) {\n useEffect(() => {\n const jsonData = options.jsonData;\n let newOptions = { ...options };\n let optionsUpdated = false;\n\n // Migrate the database field from the column into the jsonData object\n if (options.database) {\n sqlPluginLogger.logDebug(`Migrating from options.database with value ${options.database} for ${options.name}`);\n newOptions.database = '';\n newOptions.jsonData = { ...jsonData, database: options.database };\n optionsUpdated = true;\n }\n\n // Set default values for max open connections, max idle connection,\n // and auto idle if they're all undefined\n if (\n jsonData.maxOpenConns === undefined &&\n jsonData.maxIdleConns === undefined &&\n jsonData.maxIdleConnsAuto === undefined\n ) {\n const { maxOpenConns, maxIdleConns } = config.sqlConnectionLimits;\n\n sqlPluginLogger.logDebug(\n `Setting default max open connections to ${maxOpenConns} and setting max idle connection to ${maxIdleConns}`\n );\n\n // Spread from the jsonData in new options in case\n // the database field was migrated as well\n newOptions.jsonData = {\n ...newOptions.jsonData,\n maxOpenConns: maxOpenConns,\n maxIdleConns: maxIdleConns,\n maxIdleConnsAuto: true,\n };\n\n // Make sure we issue an update if options changed\n optionsUpdated = true;\n }\n\n // If the maximum connection lifetime hasn't been\n // otherwise set fill in with the default from configuration\n if (jsonData.connMaxLifetime === undefined) {\n const { connMaxLifetime } = config.sqlConnectionLimits;\n\n // Spread new options and add our value\n newOptions.jsonData = {\n ...newOptions.jsonData,\n connMaxLifetime: connMaxLifetime,\n };\n\n // Note that we've updated the options\n optionsUpdated = true;\n }\n\n // Only issue an update if we changed options\n if (optionsUpdated) {\n onOptionsChange(newOptions);\n }\n }, [onOptionsChange, options]);\n}\n","import { LANGUAGES, ResourceLoader, Resources } from '@grafana/i18n';\n\nconst resources = LANGUAGES.reduce<Record<string, () => Promise<{ default: Resources }>>>((acc, lang) => {\n acc[lang.code] = async () => await import(`./locales/${lang.code}/grafana-sql.json`);\n return acc;\n}, {});\n\nexport const loadResources: ResourceLoader = async (resolvedLanguage: string) => {\n const translation = await resources[resolvedLanguage]();\n return translation.default;\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport * as React from 'react';\nimport { RangeJSON, Range as SlateRange } from 'slate';\nimport Plain from 'slate-plain-serializer';\nimport { Editor, Plugin } from 'slate-react';\n\nconst isIndentLeftHotkey = isKeyHotkey('mod+[');\nconst isShiftTabHotkey = isKeyHotkey('shift+tab');\nconst isIndentRightHotkey = isKeyHotkey('mod+]');\n\nconst SLATE_TAB = ' ';\n\nconst handleTabKey = (event: React.KeyboardEvent<Element>, editor: Editor, next: Function): void => {\n const {\n startBlock,\n endBlock,\n selection: {\n start: { offset: startOffset, key: startKey },\n end: { offset: endOffset, key: endKey },\n },\n } = editor.value;\n if (Plain.serialize(editor.value) === '') {\n return;\n }\n event.preventDefault();\n const first = startBlock.getFirstText();\n\n const startBlockIsSelected =\n first && startOffset === 0 && startKey === first.key && endOffset === first.text.length && endKey === first.key;\n\n if (startBlockIsSelected || !startBlock.equals(endBlock)) {\n handleIndent(editor, 'right');\n } else {\n editor.insertText(SLATE_TAB);\n }\n};\n\nconst handleIndent = (editor: Editor, indentDirection: 'left' | 'right') => {\n const curSelection = editor.value.selection;\n const selectedBlocks = editor.value.document.getLeafBlocksAtRange(curSelection).toArray();\n\n if (indentDirection === 'left') {\n for (const block of selectedBlocks) {\n const blockWhitespace = block.text.length - block.text.trimLeft().length;\n\n const textKey = block.getFirstText()!.key;\n\n const rangeProperties: RangeJSON = {\n anchor: {\n key: textKey,\n offset: blockWhitespace,\n path: [],\n },\n focus: {\n key: textKey,\n offset: blockWhitespace,\n path: [],\n },\n };\n\n editor.deleteBackwardAtRange(SlateRange.create(rangeProperties), Math.min(SLATE_TAB.length, blockWhitespace));\n }\n } else {\n const { startText } = editor.value;\n const textBeforeCaret = startText.text.slice(0, curSelection.start.offset);\n const isWhiteSpace = /^\\s*$/.test(textBeforeCaret);\n\n for (const block of selectedBlocks) {\n editor.insertTextByKey(block.getFirstText()!.key, 0, SLATE_TAB);\n }\n\n if (isWhiteSpace) {\n editor.moveStartBackward(SLATE_TAB.length);\n }\n }\n};\n\n// Clears the rest of the line after the caret\nexport function IndentationPlugin(): Plugin {\n return {\n onKeyDown(event, editor, next) {\n if (isIndentLeftHotkey(event) || isShiftTabHotkey(event)) {\n event.preventDefault();\n handleIndent(editor, 'left');\n } else if (isIndentRightHotkey(event)) {\n event.preventDefault();\n handleIndent(editor, 'right');\n } else if (event.key === 'Tab') {\n handleTabKey(event, editor, next);\n } else {\n return next();\n }\n\n return true;\n },\n };\n}\n","import { groupBy, isArray, pick, reduce, uniqueId } from 'lodash';\n\nimport { RoutingTree, RoutingTreeRoute } from '../api/notifications/v0alpha1/notifications.api.gen';\nimport { Label } from '../matchers/types';\nimport { LabelMatchDetails, matchLabels } from '../matchers/utils';\n\nimport { Route, RouteWithID } from './types';\n\nexport const INHERITABLE_KEYS = ['receiver', 'group_by', 'group_wait', 'group_interval', 'repeat_interval'] as const;\nexport type InheritableKeys = typeof INHERITABLE_KEYS;\nexport type InheritableProperties = Pick<Route, InheritableKeys[number]>;\n\n// Represents matching information for a single route in the traversal path\nexport type RouteMatchInfo<T extends Route> = {\n route: T;\n matchDetails: LabelMatchDetails[];\n matched: boolean;\n};\n\nexport interface RouteMatchResult<T extends Route> {\n route: T;\n labels: Label[];\n // Track matching information for each route in the traversal path\n matchingJourney: Array<RouteMatchInfo<T>>;\n}\n\n/**\n * This function performs a depth-first left-to-right search through the route tree and returns the matching routing nodes.\n *\n * If the current node is not a match, return nothing\n * Normalization should have happened earlier in the code\n */\nexport function findMatchingRoutes<T extends Route>(\n route: T,\n labels: Label[],\n matchingJourney: Array<RouteMatchInfo<T>> = []\n): Array<RouteMatchResult<T>> {\n let childMatches: Array<RouteMatchResult<T>> = [];\n\n // Check if the current node matches\n const matchResult = matchLabels(route.matchers ?? [], labels);\n\n // Create matching info for this route\n const currentMatchInfo: RouteMatchInfo<T> = {\n route,\n matchDetails: matchResult.details,\n matched: matchResult.matches,\n };\n\n // Add current route's matching info to the journey\n const currentMatchingJourney = [...matchingJourney, currentMatchInfo];\n\n // If the current node is not a match, return nothing\n if (!matchResult.matches) {\n return [];\n }\n\n // If the current node matches, recurse through child nodes\n if (route.routes) {\n for (const child of route.routes) {\n const matchingChildren = findMatchingRoutes(child, labels, currentMatchingJourney);\n // TODO how do I solve this typescript thingy? It looks correct to me /shrug\n // @ts-ignore\n childMatches = childMatches.concat(matchingChildren);\n // we have matching children and we don't want to continue, so break here\n if (matchingChildren.length && !child.continue) {\n break;\n }\n }\n }\n\n // If no child nodes were matches, the current node itself is a match.\n if (childMatches.length === 0) {\n childMatches.push({\n route,\n labels,\n matchingJourney: currentMatchingJourney,\n });\n }\n\n return childMatches;\n}\n\n/**\n * This function will compute the full tree with inherited properties – this is mostly used for search and filtering\n */\nexport function computeInheritedTree<T extends Route>(parent: T): T {\n return {\n ...parent,\n routes: parent.routes?.map((child) => {\n const inheritedProperties = getInheritedProperties(parent, child);\n\n return computeInheritedTree({\n ...child,\n ...inheritedProperties,\n });\n }),\n };\n}\n\n// inherited properties are config properties that exist on the parent route (or its inherited properties) but not on the child route\nexport function getInheritedProperties<T extends Route>(\n parentRoute: T,\n childRoute: T,\n propertiesParentInherited?: InheritableProperties\n): InheritableProperties {\n const propsFromParent: InheritableProperties = pick(parentRoute, INHERITABLE_KEYS);\n const inheritableProperties: InheritableProperties = {\n ...propsFromParent,\n ...propertiesParentInherited,\n } as const;\n\n // @ts-expect-error we're using \"keyof\" for the property so the type checker can help us out but this makes the\n // reduce function signature unhappy\n const inherited = reduce(\n inheritableProperties,\n (inheritedProperties: InheritableProperties, parentValue, property: keyof InheritableProperties) => {\n const parentHasValue = parentValue != null;\n\n const inheritableValues = [undefined, '', null];\n const childIsInheriting = inheritableValues.some((value) => childRoute[property] === value);\n const inheritFromValue = childIsInheriting && parentHasValue;\n\n const inheritEmptyGroupByFromParent =\n property === 'group_by' &&\n parentHasValue &&\n isArray(childRoute[property]) &&\n childRoute[property]?.length === 0;\n\n const inheritFromParent = inheritFromValue || inheritEmptyGroupByFromParent;\n\n if (inheritFromParent) {\n // @ts-ignore\n inheritedProperties[property] = parentValue;\n }\n\n return inheritedProperties;\n },\n {}\n );\n\n return inherited;\n}\n\nexport function addUniqueIdentifier(route: Route): RouteWithID {\n return {\n id: uniqueId('route-'),\n ...route,\n routes: route.routes?.map(addUniqueIdentifier) ?? [],\n };\n}\n\n// all policies that were matched of a single tree\nexport type TreeMatch = {\n /* we'll include the entire expanded policy tree for diagnostics */\n expandedTree: RouteWithID;\n /* the routes that matched the labels where the key is a route and the value is an array of instances that match that route */\n matchedPolicies: Map<RouteWithID, Array<RouteMatchResult<RouteWithID>>>;\n};\n\n/**\n * This function will return what notification policies would match a set of labels.\n *\n * ⚠️ This function is rather CPU intensive depending on both the size of the labels list and the size of the notification policy tree.\n * When using this function, consider wrapping it in a web-worker to offload this from the main JavaScript thread.\n *\n * @param instances - A set of labels for which you want to determine the matching policies\n * @param routingTree - A notification policy tree (or subtree)\n */\nexport function matchInstancesToRoute(rootRoute: Route, instances: Label[][]): TreeMatch {\n // initially empty map of matches policies\n const matchedPolicies = new Map();\n\n // compute the entire expanded tree for matching routes and diagnostics\n // this will include inherited properties from parent nodes\n const expandedTree = addUniqueIdentifier(computeInheritedTree(rootRoute));\n\n // let's first find all matching routes for the provided instances\n const matchesArray = instances.flatMap((labels) => findMatchingRoutes(expandedTree, labels));\n\n // now group the matches by route ID\n // this will give us a map of route IDs to their matching instances\n // we use the route ID as the key to ensure uniqueness\n const groupedByRoute = groupBy(matchesArray, (match) => match.route.id);\n Object.entries(groupedByRoute).forEach(([_key, match]) => {\n matchedPolicies.set(match[0].route, match);\n });\n\n return {\n expandedTree,\n matchedPolicies,\n };\n}\n\n/**\n * Converts a RoutingTree to a Route by merging defaults with routes.\n *\n * @param routingTree - The RoutingTree from the API\n * @returns A Route that can be used with the matching functions\n */\nexport function convertRoutingTreeToRoute(routingTree: RoutingTree): Route {\n const convertRoutingTreeRoutes = (routes: RoutingTreeRoute[]): Route[] => {\n return routes.map(\n (route): Route => ({\n ...route,\n routes: route.routes ? convertRoutingTreeRoutes(route.routes) : [],\n })\n );\n };\n\n // Create the root route by merging defaults with the route structure\n const rootRoute: Route = {\n ...routingTree.spec.defaults,\n continue: false,\n active_time_intervals: [],\n mute_time_intervals: [],\n matchers: [], // Root route has no matchers (catch-all)\n routes: convertRoutingTreeRoutes(routingTree.spec.routes),\n };\n\n return rootRoute;\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataTopic } from '@grafana/schema';\n\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\n/*\n\"schema\": {\n \"meta\": {\n \"custom\": {\n \"resultType\": \"exemplar\"\n }\n },\n*/\n\n// ResultType?\n\nexport enum FrameType {\n Exemplar = 'exemplar',\n TimeRegion = 'timeRegion',\n Annotation = 'annotation',\n}\n\nexport interface ConvertFrameTypeTransformerOptions {\n targetType?: FrameType;\n}\n\n/** @alpha */\nexport const convertFrameTypeTransformer: DataTransformerInfo<ConvertFrameTypeTransformerOptions> = {\n id: DataTransformerID.convertFrameType,\n name: 'Convert frame type',\n description: 'Convert data frame(s) to another type.',\n\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n return convertFrameType(options, data);\n })\n ),\n};\n\nfunction convertFrameType(options: ConvertFrameTypeTransformerOptions, frames: DataFrame[]): DataFrame[] {\n const { targetType } = options;\n return targetType === FrameType.Exemplar ? frames.map(convertSeriesToExemplar) : frames;\n}\n\nfunction convertSeriesToExemplar(frame: DataFrame): DataFrame {\n // TODO: ensure time field\n // TODO: ensure value field\n\n return {\n ...frame,\n name: 'exemplar',\n meta: {\n ...frame.meta,\n dataTopic: DataTopic.Annotations,\n custom: {\n ...frame.meta?.custom,\n resultType: 'exemplar',\n },\n },\n };\n}\n","import { DataTransformerInfo } from '../../types/transformations';\nimport { FrameMatcherID } from '../matchers/ids';\n\nimport { filterFramesTransformer, FilterOptions } from './filter';\nimport { DataTransformerID } from './ids';\n\nexport interface FilterFramesByRefIdTransformerOptions {\n include?: string;\n exclude?: string;\n}\n\nexport const filterFramesByRefIdTransformer: DataTransformerInfo<FilterFramesByRefIdTransformerOptions> = {\n id: DataTransformerID.filterByRefId,\n name: 'Filter data by query refId',\n description: 'select a subset of results',\n defaultOptions: {},\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options, ctx) => (source) => {\n const filterOptions: FilterOptions = {};\n if (options.include) {\n filterOptions.include = {\n id: FrameMatcherID.byRefId,\n options: options.include,\n };\n }\n if (options.exclude) {\n filterOptions.exclude = {\n id: FrameMatcherID.byRefId,\n options: options.exclude,\n };\n }\n\n return source.pipe(filterFramesTransformer.operator(filterOptions, ctx));\n },\n};\n","import { map } from 'rxjs/operators';\n\nimport { TimeZone } from '@grafana/schema';\n\nimport { cacheFieldDisplayNames } from '../../field/fieldState';\nimport { DataFrame } from '../../types/dataFrame';\nimport {\n DataTransformContext,\n DataTransformerInfo,\n TransformationApplicabilityLevels,\n} from '../../types/transformations';\n\nimport { fieldToStringField } from './convertFieldType';\nimport { DataTransformerID } from './ids';\n\nexport interface FormatTimeTransformerOptions {\n timeField: string;\n outputFormat: string;\n timezone: TimeZone;\n}\n\nexport const formatTimeTransformer: DataTransformerInfo<FormatTimeTransformerOptions> = {\n id: DataTransformerID.formatTime,\n name: 'Format time',\n description: 'Set the output format of a time field',\n defaultOptions: { timeField: '', outputFormat: '', useTimezone: true },\n isApplicable: (data: DataFrame[]) => {\n // Search for a time field\n // if there is one then we can use this transformation\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type === 'time') {\n return TransformationApplicabilityLevels.Applicable;\n }\n }\n }\n\n return TransformationApplicabilityLevels.NotApplicable;\n },\n isApplicableDescription:\n 'The Format time transformation requires a time field to work. No time field could be found.',\n operator: (options, ctx) => (source) =>\n source.pipe(\n map((data) => {\n return applyFormatTime(options, data, ctx);\n })\n ),\n};\n\n/**\n * @internal\n */\nexport const applyFormatTime = (\n { timeField, outputFormat, timezone }: FormatTimeTransformerOptions,\n data: DataFrame[],\n ctx?: DataTransformContext\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n cacheFieldDisplayNames(data);\n\n outputFormat = ctx?.interpolate(outputFormat) ?? outputFormat;\n\n return data.map((frame) => ({\n ...frame,\n fields: frame.fields.map((field) => {\n if (field.state?.displayName === timeField) {\n field = fieldToStringField(field, outputFormat, { timeZone: timezone });\n }\n\n return field;\n }),\n }));\n};\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport {\n SpecialValue,\n DataTransformerInfo,\n TransformationApplicabilityLevels,\n DataTransformContext,\n} from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\nimport { getSpecialValue } from './utils';\n\nexport interface GroupingToMatrixTransformerOptions {\n columnField?: string;\n rowField?: string;\n valueField?: string;\n emptyValue?: SpecialValue;\n}\n\nconst DEFAULT_COLUMN_FIELD = 'Time';\nconst DEFAULT_ROW_FIELD = 'Time';\nconst DEFAULT_VALUE_FIELD = 'Value';\nconst DEFAULT_EMPTY_VALUE = SpecialValue.Empty;\n\n// grafana-data does not have access to runtime so we are accessing the window object\n// to get access to the feature toggle\nconst supportDataplaneFallback = window.grafanaBootData?.settings?.featureToggles?.dataplaneFrontendFallback;\n\nexport const groupingToMatrixTransformer: DataTransformerInfo<GroupingToMatrixTransformerOptions> = {\n id: DataTransformerID.groupingToMatrix,\n name: 'Grouping to Matrix',\n description: 'Groups series by field and return a matrix visualisation',\n defaultOptions: {\n columnField: DEFAULT_COLUMN_FIELD,\n rowField: DEFAULT_ROW_FIELD,\n valueField: DEFAULT_VALUE_FIELD,\n },\n /**\n * Grouping to matrix requires at least 3 fields to work.\n */\n isApplicable: (data: DataFrame[]) => {\n let numFields = 0;\n\n for (const frame of data) {\n numFields += frame.fields.length;\n }\n\n return numFields >= 3\n ? TransformationApplicabilityLevels.Applicable\n : TransformationApplicabilityLevels.NotApplicable;\n },\n isApplicableDescription: (data: DataFrame[]) => {\n let numFields = 0;\n\n for (const frame of data) {\n numFields += frame.fields.length;\n }\n\n return `Grouping to matrix requires at least 3 fields to work. Currently there are ${numFields} fields.`;\n },\n operator: (options: GroupingToMatrixTransformerOptions, ctx: DataTransformContext) => (source) =>\n source.pipe(\n map((data) => {\n const columnFieldMatch = options.columnField || DEFAULT_COLUMN_FIELD;\n const rowFieldMatch = options.rowField || DEFAULT_ROW_FIELD;\n const valueFieldMatch = options.valueField || DEFAULT_VALUE_FIELD;\n const emptyValue = options.emptyValue || DEFAULT_EMPTY_VALUE;\n\n // Accept only single queries\n if (data.length !== 1) {\n return data;\n }\n\n const frame = data[0];\n const keyColumnField = findKeyField(frame, columnFieldMatch);\n const keyRowField = findKeyField(frame, rowFieldMatch);\n const valueField = findKeyField(frame, valueFieldMatch);\n const rowColumnField = `${rowFieldMatch}\\\\${columnFieldMatch}`;\n\n if (!keyColumnField || !keyRowField || !valueField) {\n return data;\n }\n\n const columnValues = uniqueValues(keyColumnField.values);\n const rowValues = uniqueValues(keyRowField.values);\n\n const matrixValues: { [key: string]: { [key: string]: unknown } } = {};\n\n for (let index = 0; index < valueField.values.length; index++) {\n const columnName = keyColumnField.values[index];\n const rowName = keyRowField.values[index];\n const value = valueField.values[index];\n\n if (!matrixValues[columnName]) {\n matrixValues[columnName] = {};\n }\n\n matrixValues[columnName][rowName] = value;\n }\n\n const fields: Field[] = [\n {\n name: rowColumnField,\n values: rowValues,\n type: keyRowField.type,\n config: { ...keyRowField.config },\n },\n ];\n\n for (const columnName of columnValues) {\n let values = [];\n for (const rowName of rowValues) {\n // nested dataframes need to be undefined when empty\n const value =\n matrixValues[columnName][rowName] ??\n (valueField.type === FieldType.frame ? undefined : getSpecialValue(emptyValue));\n values.push(value);\n }\n\n // setting the displayNameFromDS in prometheus overrides\n // the column name based on value fields that are numbers\n // this prevents columns that should be named 1000190\n // from becoming named {__name__: 'metricName'}\n if (supportDataplaneFallback && typeof columnName === 'number') {\n valueField.config = { ...valueField.config, displayNameFromDS: undefined };\n }\n\n // the names of these columns need to be the selected column values, and not be overridden with the display name\n delete valueField.config.displayName;\n\n fields.push({\n name: columnName?.toString() ?? null,\n values: values,\n config: valueField.config,\n type: valueField.type,\n });\n }\n\n return [\n {\n fields,\n length: rowValues.length,\n },\n ];\n })\n ),\n};\n\nfunction uniqueValues<T>(values: T[]): T[] {\n const unique = new Set<T>(values);\n return Array.from(unique);\n}\n\nfunction findKeyField(frame: DataFrame, matchTitle: string): Field | null {\n for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n const field = frame.fields[fieldIndex];\n\n // support for dataplane contract with Prometheus and change in location of field name\n let matches: boolean;\n if (supportDataplaneFallback) {\n const matcher = fieldMatchers.get(FieldMatcherID.byName).get(matchTitle);\n matches = matcher(field, frame, [frame]);\n } else {\n matches = matchTitle === getFieldDisplayName(field);\n }\n\n if (matches) {\n return field;\n }\n }\n\n return null;\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface LimitTransformerOptions {\n limitField?: number | string;\n}\n\nconst DEFAULT_LIMIT_FIELD = 10;\n\nexport const limitTransformer: DataTransformerInfo<LimitTransformerOptions> = {\n id: DataTransformerID.limit,\n name: 'Limit',\n description: 'Limit the number of items to the top N',\n defaultOptions: {\n limitField: DEFAULT_LIMIT_FIELD,\n },\n\n operator: (options, ctx) => (source) =>\n source.pipe(\n map((data) => {\n let limit = DEFAULT_LIMIT_FIELD;\n if (options.limitField !== undefined) {\n if (typeof options.limitField === 'string') {\n limit = parseInt(options.limitField, 10);\n } else {\n limit = options.limitField;\n }\n }\n\n return data.map((frame) => {\n if (frame.length > limit) {\n return {\n ...frame,\n fields: frame.fields.map((f) => {\n return {\n ...f,\n // Clear cached field calculations since applying a limit changes the dataset\n // and previously computed stats (min, max, mean, etc.) are no longer valid\n state: {\n ...f.state,\n calcs: undefined,\n },\n values:\n limit >= 0 ? f.values.slice(0, limit) : f.values.slice(f.values.length + limit, f.values.length),\n };\n }),\n length: Math.abs(limit),\n };\n }\n\n return frame;\n });\n })\n ),\n};\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface RenameFieldsTransformerOptions {\n renameByName: Record<string, string>;\n}\n\nexport const renameFieldsTransformer: DataTransformerInfo<RenameFieldsTransformerOptions> = {\n id: DataTransformerID.rename,\n name: 'Rename fields by name',\n description: 'Rename fields based on configuration given by user',\n defaultOptions: {\n renameByName: {},\n },\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n const renamer = createRenamer(options.renameByName);\n\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n return data.map((frame) => ({\n ...frame,\n fields: renamer(frame),\n }));\n })\n ),\n};\n\nconst createRenamer =\n (renameByName: Record<string, string>) =>\n (frame: DataFrame): Field[] => {\n if (!renameByName || Object.keys(renameByName).length === 0) {\n return frame.fields;\n }\n\n return frame.fields.map((field) => {\n const displayName = getFieldDisplayName(field, frame);\n const renameTo = renameByName[displayName];\n\n if (typeof renameTo !== 'string' || renameTo.length === 0) {\n return field;\n }\n\n return {\n ...field,\n config: {\n ...field.config,\n displayName: renameTo,\n },\n state: {\n ...field.state,\n displayName: renameTo,\n },\n };\n });\n };\n","import { DataFrame } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\n\nimport { filterFieldsByNameTransformer } from './filterByName';\nimport { DataTransformerID } from './ids';\nimport { orderFieldsTransformer, OrderFieldsTransformerOptions } from './order';\nimport { renameFieldsTransformer, RenameFieldsTransformerOptions } from './rename';\n\nexport interface OrganizeFieldsTransformerOptions\n extends OrderFieldsTransformerOptions,\n RenameFieldsTransformerOptions {\n excludeByName: Record<string, boolean>;\n includeByName?: Record<string, boolean>;\n}\n\nexport const organizeFieldsTransformer: DataTransformerInfo<OrganizeFieldsTransformerOptions> = {\n id: DataTransformerID.organize,\n name: 'Organize fields by name',\n description: 'Order, filter and rename fields based on configuration given by user',\n defaultOptions: {\n excludeByName: {},\n indexByName: {},\n renameByName: {},\n includeByName: {},\n },\n isApplicable: (data: DataFrame[]) => {\n return data.length > 1\n ? TransformationApplicabilityLevels.NotPossible\n : TransformationApplicabilityLevels.Applicable;\n },\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options, ctx) => (source) =>\n source.pipe(\n filterFieldsByNameTransformer.operator(\n {\n include: options.includeByName ? { names: mapToExcludeArray(options.includeByName) } : undefined,\n exclude: { names: mapToExcludeArray(options.excludeByName) },\n },\n ctx\n ),\n orderFieldsTransformer.operator(options, ctx),\n renameFieldsTransformer.operator(options, ctx)\n ),\n};\n\nconst mapToExcludeArray = (excludeByName: Record<string, boolean>): string[] => {\n if (!excludeByName) {\n return [];\n }\n\n return Object.keys(excludeByName).filter((name) => excludeByName[name]);\n};\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { stringToJsRegex } from '../../text/string';\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\n/**\n * Options for renameByRegexTransformer\n *\n * @public\n */\nexport interface RenameByRegexTransformerOptions {\n regex: string;\n renamePattern: string;\n}\n\n/**\n * Replaces the displayName of a field by applying a regular expression\n * to match the name and a pattern for the replacement.\n *\n * @public\n */\nexport const renameByRegexTransformer: DataTransformerInfo<RenameByRegexTransformerOptions> = {\n id: DataTransformerID.renameByRegex,\n name: 'Rename fields by regex',\n description: 'Rename fields based on regular expression by users.',\n defaultOptions: {\n regex: '(.*)',\n renamePattern: '$1',\n },\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n return data.map(renameFieldsByRegex(options));\n })\n ),\n};\n\nconst renameFieldsByRegex = (options: RenameByRegexTransformerOptions) => (frame: DataFrame) => {\n const regex = stringToJsRegex(options.regex);\n const fields = frame.fields.map((field) => {\n const displayName = getFieldDisplayName(field, frame);\n if (!regex.test(displayName)) {\n return field;\n }\n const newDisplayName = displayName.replace(regex, options.renamePattern);\n return {\n ...field,\n config: { ...field.config, displayName: newDisplayName },\n state: { ...field.state, displayName: newDisplayName },\n };\n });\n return { ...frame, fields };\n};\n","import { omit } from 'lodash';\nimport { map } from 'rxjs/operators';\n\nimport { MutableDataFrame } from '../../dataframe/MutableDataFrame';\nimport { sortDataFrame } from '../../dataframe/processDataFrame';\nimport { isTimeSeriesFrames } from '../../dataframe/utils';\nimport { getFrameDisplayName } from '../../field/fieldState';\nimport {\n Field,\n FieldType,\n TIME_SERIES_METRIC_FIELD_NAME,\n TIME_SERIES_TIME_FIELD_NAME,\n TIME_SERIES_VALUE_FIELD_NAME,\n} from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface SeriesToRowsTransformerOptions {}\n\nexport const seriesToRowsTransformer: DataTransformerInfo<SeriesToRowsTransformerOptions> = {\n id: DataTransformerID.seriesToRows,\n name: 'Series to rows',\n description: 'Combines multiple series into a single serie and appends a column with metric name per value.',\n defaultOptions: {},\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n if (!Array.isArray(data) || data.length === 0) {\n return data;\n }\n\n data = data.filter((frame) => frame.length > 0);\n if (!isTimeSeriesFrames(data)) {\n return data;\n }\n\n const timeFieldByIndex: Record<number, number> = {};\n const targetFields = new Set<string>();\n const dataFrame = new MutableDataFrame({\n refId: `${DataTransformerID.seriesToRows}-${data.map((frame) => frame.refId).join('-')}`,\n fields: [],\n });\n const metricField: Field = {\n name: TIME_SERIES_METRIC_FIELD_NAME,\n values: [],\n config: {},\n type: FieldType.string,\n };\n\n for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n const frame = data[frameIndex];\n\n for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n const field = frame.fields[fieldIndex];\n\n if (field.type === FieldType.time) {\n timeFieldByIndex[frameIndex] = fieldIndex;\n\n if (!targetFields.has(TIME_SERIES_TIME_FIELD_NAME)) {\n dataFrame.addField(copyFieldStructure(field, TIME_SERIES_TIME_FIELD_NAME));\n dataFrame.addField(metricField);\n targetFields.add(TIME_SERIES_TIME_FIELD_NAME);\n }\n continue;\n }\n\n if (!targetFields.has(TIME_SERIES_VALUE_FIELD_NAME)) {\n dataFrame.addField(copyFieldStructure(field, TIME_SERIES_VALUE_FIELD_NAME));\n targetFields.add(TIME_SERIES_VALUE_FIELD_NAME);\n }\n }\n }\n\n for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n const frame = data[frameIndex];\n\n for (let valueIndex = 0; valueIndex < frame.length; valueIndex++) {\n const timeFieldIndex = timeFieldByIndex[frameIndex];\n const valueFieldIndex = timeFieldIndex === 0 ? 1 : 0;\n\n dataFrame.add({\n [TIME_SERIES_TIME_FIELD_NAME]: frame.fields[timeFieldIndex].values[valueIndex],\n [TIME_SERIES_METRIC_FIELD_NAME]: getFrameDisplayName(frame),\n [TIME_SERIES_VALUE_FIELD_NAME]: frame.fields[valueFieldIndex].values[valueIndex],\n });\n }\n }\n\n return [sortDataFrame(dataFrame, 0, true)];\n })\n ),\n};\n\nconst copyFieldStructure = (field: Field, name: string): Field => {\n return {\n ...omit(field, ['values', 'state', 'labels', 'config', 'name']),\n name: name,\n values: [],\n config: {\n ...omit(field.config, ['displayName', 'displayNameFromDS']),\n },\n };\n};\n","import { map } from 'rxjs/operators';\n\nimport { sortDataFrame } from '../../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformContext, DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface SortByField {\n field: string;\n desc?: boolean;\n index?: number;\n}\n\nexport interface SortByTransformerOptions {\n // NOTE: this structure supports an array, however only the first entry is used\n // future versions may support multi-sort options\n sort: SortByField[];\n}\n\nexport const sortByTransformer: DataTransformerInfo<SortByTransformerOptions> = {\n id: DataTransformerID.sortBy,\n name: 'Sort by',\n description: 'Sort fields in a frame.',\n defaultOptions: {\n fields: {},\n },\n\n /**\n * Return a modified copy of the series. If the transform is not or should not\n * be applied, just return the input series\n */\n operator: (options, ctx) => (source) =>\n source.pipe(\n map((data) => {\n if (!Array.isArray(data) || data.length === 0 || !options?.sort?.length) {\n return data;\n }\n return sortDataFrames(data, options.sort, ctx);\n })\n ),\n};\n\nfunction sortDataFrames(data: DataFrame[], sort: SortByField[], ctx: DataTransformContext): DataFrame[] {\n return data.map((frame) => {\n const s = attachFieldIndex(frame, sort, ctx);\n if (s.length && s[0].index != null) {\n return sortDataFrame(frame, s[0].index, s[0].desc);\n }\n return frame;\n });\n}\n\nfunction attachFieldIndex(frame: DataFrame, sort: SortByField[], ctx: DataTransformContext): SortByField[] {\n return sort.map((s) => {\n if (s.index != null) {\n // null or undefined\n return s;\n }\n\n return {\n ...s,\n index: frame.fields.findIndex((f) => s.field === getFieldDisplayName(f, frame)),\n };\n });\n}\n","import { map } from 'rxjs/operators';\n\nimport { cacheFieldDisplayNames } from '../../field/fieldState';\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, SpecialValue } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\nimport { getSpecialValue } from './utils';\n\nexport interface TransposeTransformerOptions {\n firstFieldName?: string;\n restFieldsName?: string;\n emptyValue?: SpecialValue;\n}\n\nexport const transposeTransformer: DataTransformerInfo<TransposeTransformerOptions> = {\n id: DataTransformerID.transpose,\n name: 'Transpose',\n description: 'Transpose the data frame',\n defaultOptions: {},\n\n operator: (options) => (source) =>\n source.pipe(\n map((data) => {\n if (data.length === 0) {\n return data;\n }\n return transposeDataFrame(options, data);\n })\n ),\n};\n\nfunction transposeDataFrame(options: TransposeTransformerOptions, data: DataFrame[]): DataFrame[] {\n cacheFieldDisplayNames(data);\n const emptyValue = options.emptyValue ?? SpecialValue.Empty;\n\n return data.map((frame) => {\n const firstField = frame.fields[0];\n const firstName = !options.firstFieldName ? 'Field' : options.firstFieldName;\n const restName = !options.restFieldsName ? 'Value' : options.restFieldsName;\n const useFirstFieldAsHeaders =\n firstField.type === FieldType.string || firstField.type === FieldType.time || firstField.type === FieldType.enum;\n const headers = useFirstFieldAsHeaders\n ? [firstName, ...fieldValuesAsStrings(firstField, firstField.values, emptyValue)]\n : [firstName, ...firstField.values.map((_, i) => restName)];\n const rows = useFirstFieldAsHeaders\n ? frame.fields\n .map((field) => {\n return field.state?.displayName ?? field.name;\n })\n .slice(1)\n : frame.fields.map((field) => field.state?.displayName ?? field.name);\n const fieldType = determineFieldType(\n useFirstFieldAsHeaders\n ? frame.fields.map((field) => field.type).slice(1)\n : frame.fields.map((field) => field.type)\n );\n\n const newFields = headers.map((fieldName, index) => {\n if (index === 0) {\n return {\n name: firstName,\n type: FieldType.string,\n config: {},\n values: rows,\n };\n }\n\n const values = frame.fields.map((field) => {\n if (fieldType === FieldType.string) {\n return fieldValuesAsStrings(field, [field.values[index - 1]], emptyValue)[0];\n }\n return field.values[index - 1];\n });\n\n const labelName = useFirstFieldAsHeaders ? firstField.name : 'row';\n const labelValue = useFirstFieldAsHeaders ? fieldName : index;\n\n return {\n name: useFirstFieldAsHeaders ? restName : fieldName,\n labels: {\n [labelName]: labelValue,\n },\n type: fieldType,\n config: {},\n values: useFirstFieldAsHeaders ? values.slice(1) : values,\n };\n });\n return {\n ...frame,\n fields: newFields,\n length: Math.max(...newFields.map((field) => field.values.length)),\n refId: `${DataTransformerID.transpose}-${frame.refId}`,\n };\n });\n}\n\nfunction determineFieldType(fieldTypes: FieldType[]): FieldType {\n const uniqueFieldTypes = new Set(fieldTypes);\n return uniqueFieldTypes.size === 1 ? [...uniqueFieldTypes][0] : FieldType.string;\n}\n\nfunction fieldValuesAsStrings(field: Field, values: unknown[], emptyValue: SpecialValue) {\n switch (field.type) {\n case FieldType.time:\n case FieldType.number:\n case FieldType.boolean:\n case FieldType.string:\n return values.map((v) => (v != null ? `${v}` : getSpecialValue(emptyValue)));\n case FieldType.enum:\n // @ts-ignore\n return values.map((v) => field.config.type!.enum!.text![v] ?? getSpecialValue(emptyValue));\n default:\n return values.map((v) => (v != null ? JSON.stringify(v) : getSpecialValue(emptyValue)));\n }\n}\n","import { calculateFieldTransformer } from './transformers/calculateField';\nimport { concatenateTransformer } from './transformers/concat';\nimport { convertFieldTypeTransformer } from './transformers/convertFieldType';\nimport { convertFrameTypeTransformer } from './transformers/convertFrameType';\nimport { ensureColumnsTransformer } from './transformers/ensureColumns';\nimport { filterFieldsTransformer, filterFramesTransformer } from './transformers/filter';\nimport { filterFieldsByNameTransformer } from './transformers/filterByName';\nimport { filterFramesByRefIdTransformer } from './transformers/filterByRefId';\nimport { filterByValueTransformer } from './transformers/filterByValue';\nimport { formatStringTransformer } from './transformers/formatString';\nimport { formatTimeTransformer } from './transformers/formatTime';\nimport { groupByTransformer } from './transformers/groupBy';\nimport { groupToNestedTable } from './transformers/groupToNestedTable';\nimport { groupingToMatrixTransformer } from './transformers/groupingToMatrix';\nimport { histogramTransformer } from './transformers/histogram';\nimport { joinByFieldTransformer } from './transformers/joinByField';\nimport { labelsToFieldsTransformer } from './transformers/labelsToFields';\nimport { limitTransformer } from './transformers/limit';\nimport { mergeTransformer } from './transformers/merge';\nimport { noopTransformer } from './transformers/noop';\nimport { orderFieldsTransformer } from './transformers/order';\nimport { organizeFieldsTransformer } from './transformers/organize';\nimport { reduceTransformer } from './transformers/reduce';\nimport { renameFieldsTransformer } from './transformers/rename';\nimport { renameByRegexTransformer } from './transformers/renameByRegex';\nimport { seriesToRowsTransformer } from './transformers/seriesToRows';\nimport { sortByTransformer } from './transformers/sortBy';\nimport { transposeTransformer } from './transformers/transpose';\n\nexport const standardTransformers = {\n noopTransformer,\n filterFieldsTransformer,\n filterFieldsByNameTransformer,\n filterFramesTransformer,\n filterFramesByRefIdTransformer,\n filterByValueTransformer,\n formatStringTransformer,\n formatTimeTransformer,\n orderFieldsTransformer,\n organizeFieldsTransformer,\n reduceTransformer,\n concatenateTransformer,\n calculateFieldTransformer,\n joinByFieldTransformer,\n /** @deprecated */\n seriesToColumnsTransformer: joinByFieldTransformer,\n seriesToRowsTransformer,\n renameFieldsTransformer,\n labelsToFieldsTransformer,\n ensureColumnsTransformer,\n groupByTransformer,\n sortByTransformer,\n mergeTransformer,\n renameByRegexTransformer,\n histogramTransformer,\n convertFieldTypeTransformer,\n convertFrameTypeTransformer,\n groupingToMatrixTransformer,\n limitTransformer,\n groupToNestedTable,\n transposeTransformer,\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport { LdapState, LdapConnectionInfo, LdapError, SyncInfo, LdapUser } from 'app/types/ldap';\nimport {\n UserAdminState,\n UserDTO,\n UserOrg,\n UserSession,\n UserAdminError,\n UserListAdminState,\n UserFilter,\n UserListAnonymousDevicesState,\n UserAnonymousDeviceDTO,\n AnonUserFilter,\n} from 'app/types/user';\n\nconst initialLdapState: LdapState = {\n connectionInfo: [],\n syncInfo: undefined,\n user: undefined,\n connectionError: undefined,\n userError: undefined,\n};\n\nconst ldapSlice = createSlice({\n name: 'ldap',\n initialState: initialLdapState,\n reducers: {\n ldapConnectionInfoLoadedAction: (state, action: PayloadAction<LdapConnectionInfo>): LdapState => ({\n ...state,\n ldapError: undefined,\n connectionInfo: action.payload,\n }),\n ldapFailedAction: (state, action: PayloadAction<LdapError>): LdapState => ({\n ...state,\n ldapError: action.payload,\n }),\n ldapSyncStatusLoadedAction: (state, action: PayloadAction<SyncInfo>): LdapState => ({\n ...state,\n syncInfo: action.payload,\n }),\n userMappingInfoLoadedAction: (state, action: PayloadAction<LdapUser>): LdapState => ({\n ...state,\n user: action.payload,\n userError: undefined,\n }),\n userMappingInfoFailedAction: (state, action: PayloadAction<LdapError>): LdapState => ({\n ...state,\n user: undefined,\n userError: action.payload,\n }),\n clearUserMappingInfoAction: (state, action: PayloadAction<undefined>): LdapState => ({\n ...state,\n user: undefined,\n }),\n clearUserErrorAction: (state, action: PayloadAction<undefined>): LdapState => ({\n ...state,\n userError: undefined,\n }),\n },\n});\n\nexport const {\n clearUserErrorAction,\n clearUserMappingInfoAction,\n ldapConnectionInfoLoadedAction,\n ldapFailedAction,\n ldapSyncStatusLoadedAction,\n userMappingInfoFailedAction,\n userMappingInfoLoadedAction,\n} = ldapSlice.actions;\n\nexport const ldapReducer = ldapSlice.reducer;\n\n// UserAdminPage\n\nconst initialUserAdminState: UserAdminState = {\n user: undefined,\n sessions: [],\n orgs: [],\n isLoading: true,\n error: undefined,\n};\n\nexport const userAdminSlice = createSlice({\n name: 'userAdmin',\n initialState: initialUserAdminState,\n reducers: {\n userProfileLoadedAction: (state, action: PayloadAction<UserDTO>): UserAdminState => ({\n ...state,\n user: action.payload,\n }),\n userOrgsLoadedAction: (state, action: PayloadAction<UserOrg[]>): UserAdminState => ({\n ...state,\n orgs: action.payload,\n }),\n userSessionsLoadedAction: (state, action: PayloadAction<UserSession[]>): UserAdminState => ({\n ...state,\n sessions: action.payload,\n }),\n userAdminPageLoadedAction: (state, action: PayloadAction<boolean>): UserAdminState => ({\n ...state,\n isLoading: !action.payload,\n }),\n userAdminPageFailedAction: (state, action: PayloadAction<UserAdminError>): UserAdminState => ({\n ...state,\n error: action.payload,\n isLoading: false,\n }),\n },\n});\n\nexport const {\n userProfileLoadedAction,\n userOrgsLoadedAction,\n userSessionsLoadedAction,\n userAdminPageLoadedAction,\n userAdminPageFailedAction,\n} = userAdminSlice.actions;\n\nexport const userAdminReducer = userAdminSlice.reducer;\n\n// UserListAdminPage\n\nconst initialUserListAdminState: UserListAdminState = {\n users: [],\n query: '',\n page: 0,\n perPage: 50,\n totalPages: 1,\n showPaging: false,\n filters: [{ name: 'activeLast30Days', value: false }],\n isLoading: true,\n};\n\ninterface UsersFetched {\n users: UserDTO[];\n perPage: number;\n page: number;\n totalCount: number;\n}\n\nexport const userListAdminSlice = createSlice({\n name: 'userListAdmin',\n initialState: initialUserListAdminState,\n reducers: {\n usersFetched: (state, action: PayloadAction<UsersFetched>) => {\n const { totalCount, perPage, ...rest } = action.payload;\n const totalPages = Math.ceil(totalCount / perPage);\n\n return {\n ...state,\n ...rest,\n totalPages,\n perPage,\n showPaging: totalPages > 1,\n isLoading: false,\n };\n },\n usersFetchBegin: (state) => {\n return { ...state, isLoading: true };\n },\n usersFetchEnd: (state) => {\n return { ...state, isLoading: false };\n },\n queryChanged: (state, action: PayloadAction<string>) => ({\n ...state,\n query: action.payload,\n page: 0,\n }),\n pageChanged: (state, action: PayloadAction<number>) => ({\n ...state,\n page: action.payload,\n }),\n sortChanged: (state, action: PayloadAction<UserListAdminState['sort']>) => ({\n ...state,\n page: 0,\n sort: action.payload,\n }),\n filterChanged: (state, action: PayloadAction<UserFilter>) => {\n const { name, value } = action.payload;\n\n if (state.filters.some((filter) => filter.name === name)) {\n return {\n ...state,\n page: 0,\n filters: state.filters.map((filter) => (filter.name === name ? { ...filter, value } : filter)),\n };\n }\n return {\n ...state,\n page: 0,\n filters: [...state.filters, action.payload],\n };\n },\n },\n});\n\nexport const { usersFetched, usersFetchBegin, usersFetchEnd, queryChanged, pageChanged, filterChanged, sortChanged } =\n userListAdminSlice.actions;\nexport const userListAdminReducer = userListAdminSlice.reducer;\n\n// UserListAnonymousPage\n\nconst initialUserListAnonymousDevicesState: UserListAnonymousDevicesState = {\n devices: [],\n query: '',\n page: 0,\n perPage: 50,\n totalPages: 1,\n showPaging: false,\n filters: [{ name: 'activeLast30Days', value: true }],\n};\n\ninterface UsersAnonymousDevicesFetched {\n devices: UserAnonymousDeviceDTO[];\n perPage: number;\n page: number;\n totalCount: number;\n}\n\nexport const userListAnonymousDevicesSlice = createSlice({\n name: 'userListAnonymousDevices',\n initialState: initialUserListAnonymousDevicesState,\n reducers: {\n usersAnonymousDevicesFetched: (state, action: PayloadAction<UsersAnonymousDevicesFetched>) => {\n const { totalCount, perPage, ...rest } = action.payload;\n const totalPages = Math.ceil(totalCount / perPage);\n\n return {\n ...state,\n ...rest,\n totalPages,\n perPage,\n showPaging: totalPages > 1,\n };\n },\n anonQueryChanged: (state, action: PayloadAction<string>) => ({\n ...state,\n query: action.payload,\n page: 0,\n }),\n anonPageChanged: (state, action: PayloadAction<number>) => ({\n ...state,\n page: action.payload,\n }),\n anonUserSortChanged: (state, action: PayloadAction<UserListAnonymousDevicesState['sort']>) => ({\n ...state,\n page: 0,\n sort: action.payload,\n }),\n filterChanged: (state, action: PayloadAction<AnonUserFilter>) => {\n const { name, value } = action.payload;\n\n if (state.filters.some((filter) => filter.name === name)) {\n return {\n ...state,\n page: 0,\n filters: state.filters.map((filter) => (filter.name === name ? { ...filter, value } : filter)),\n };\n }\n return {\n ...state,\n page: 0,\n filters: [...state.filters, action.payload],\n };\n },\n },\n});\n\nexport const { usersAnonymousDevicesFetched, anonUserSortChanged, anonPageChanged, anonQueryChanged } =\n userListAnonymousDevicesSlice.actions;\nexport const userListAnonymousDevicesReducer = userListAnonymousDevicesSlice.reducer;\n\nexport default {\n ldap: ldapReducer,\n userAdmin: userAdminReducer,\n userListAdmin: userListAdminReducer,\n userListAnonymousDevices: userListAnonymousDevicesReducer,\n};\n","import { css, cx } from '@emotion/css';\nimport { useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport const ScrollIndicators = ({ children }: React.PropsWithChildren<{}>) => {\n const [showScrollTopIndicator, setShowTopScrollIndicator] = useState(false);\n const [showScrollBottomIndicator, setShowBottomScrollIndicator] = useState(false);\n const scrollTopMarker = useRef<HTMLDivElement>(null);\n const scrollBottomMarker = useRef<HTMLDivElement>(null);\n const styles = useStyles2(getStyles);\n\n // Here we observe the top and bottom markers to determine if we should show the scroll indicators\n useEffect(() => {\n const intersectionObserver = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.target === scrollTopMarker.current) {\n setShowTopScrollIndicator(!entry.isIntersecting);\n } else if (entry.target === scrollBottomMarker.current) {\n setShowBottomScrollIndicator(!entry.isIntersecting);\n }\n });\n });\n [scrollTopMarker, scrollBottomMarker].forEach((ref) => {\n if (ref.current) {\n intersectionObserver.observe(ref.current);\n }\n });\n return () => intersectionObserver.disconnect();\n }, []);\n\n return (\n <>\n <div\n className={cx(styles.scrollIndicator, styles.scrollTopIndicator, {\n [styles.scrollIndicatorVisible]: showScrollTopIndicator,\n })}\n />\n <div className={styles.scrollContent}>\n <div ref={scrollTopMarker} />\n {children}\n <div ref={scrollBottomMarker} />\n </div>\n <div\n className={cx(styles.scrollIndicator, styles.scrollBottomIndicator, {\n [styles.scrollIndicatorVisible]: showScrollBottomIndicator,\n })}\n />\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n scrollContent: css({\n flex: 1,\n position: 'relative',\n }),\n scrollIndicator: css({\n height: theme.spacing(6),\n left: 0,\n opacity: 0,\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create('opacity'),\n },\n zIndex: 1,\n }),\n scrollTopIndicator: css({\n background: `linear-gradient(0deg, transparent, ${theme.colors.background.canvas})`,\n top: 0,\n }),\n scrollBottomIndicator: css({\n background: `linear-gradient(180deg, transparent, ${theme.colors.background.canvas})`,\n bottom: 0,\n }),\n scrollIndicatorVisible: css({\n opacity: 1,\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { RefCallback, useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\nimport Scrollbars, { positionValues } from 'react-custom-scrollbars-2';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { ScrollIndicators } from './ScrollIndicators';\n\nexport type ScrollbarPosition = positionValues;\n\ninterface Props {\n className?: string;\n testId?: string;\n autoHide?: boolean;\n autoHideTimeout?: number;\n autoHeightMax?: string;\n hideTracksWhenNotNeeded?: boolean;\n hideHorizontalTrack?: boolean;\n hideVerticalTrack?: boolean;\n scrollRefCallback?: RefCallback<HTMLDivElement>;\n scrollTop?: number;\n setScrollTop?: (position: ScrollbarPosition) => void;\n showScrollIndicators?: boolean;\n autoHeightMin?: number | string;\n updateAfterMountMs?: number;\n onScroll?: React.UIEventHandler;\n divId?: string;\n}\n\n/**\n * Wraps component into <Scrollbars> component from `react-custom-scrollbars`\n * @deprecated Use `ScrollContainer` from `@grafana/ui` instead. It uses native scrollbars and has a simpler API.\n */\nexport const CustomScrollbar = ({\n autoHide = false,\n autoHideTimeout = 200,\n setScrollTop,\n className,\n testId,\n autoHeightMin = '0',\n autoHeightMax = '100%',\n hideTracksWhenNotNeeded = false,\n hideHorizontalTrack,\n hideVerticalTrack,\n scrollRefCallback,\n showScrollIndicators = false,\n updateAfterMountMs,\n scrollTop,\n onScroll,\n children,\n divId,\n}: React.PropsWithChildren<Props>) => {\n const ref = useRef<Scrollbars & { view: HTMLDivElement; update: () => void }>(null);\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n if (ref.current && scrollRefCallback) {\n scrollRefCallback(ref.current.view);\n }\n }, [ref, scrollRefCallback]);\n\n useScrollTop(ref.current, scrollTop);\n\n /**\n * Special logic for doing a update a few milliseconds after mount to check for\n * updated height due to dynamic content\n */\n useEffect(() => {\n if (!updateAfterMountMs) {\n return;\n }\n setTimeout(() => {\n const scrollbar = ref.current;\n if (scrollbar?.update) {\n scrollbar.update();\n }\n }, updateAfterMountMs);\n }, [updateAfterMountMs]);\n\n function renderTrack(className: string, hideTrack: boolean | undefined, passedProps: JSX.IntrinsicElements['div']) {\n if (passedProps.style && hideTrack) {\n passedProps.style.display = 'none';\n }\n\n return <div {...passedProps} className={className} />;\n }\n\n const renderTrackHorizontal = useCallback(\n (passedProps: JSX.IntrinsicElements['div']) => {\n return renderTrack('track-horizontal', hideHorizontalTrack, passedProps);\n },\n [hideHorizontalTrack]\n );\n\n const renderTrackVertical = useCallback(\n (passedProps: JSX.IntrinsicElements['div']) => {\n return renderTrack('track-vertical', hideVerticalTrack, passedProps);\n },\n [hideVerticalTrack]\n );\n\n const renderThumbHorizontal = useCallback((passedProps: JSX.IntrinsicElements['div']) => {\n return <div {...passedProps} className=\"thumb-horizontal\" />;\n }, []);\n\n const renderThumbVertical = useCallback((passedProps: JSX.IntrinsicElements['div']) => {\n return <div {...passedProps} className=\"thumb-vertical\" />;\n }, []);\n\n const renderView = useCallback(\n (passedProps: JSX.IntrinsicElements['div']) => {\n // fixes issues of visibility on safari and ios devices\n if (passedProps.style && passedProps.style['WebkitOverflowScrolling'] === 'touch') {\n passedProps.style['WebkitOverflowScrolling'] = 'auto';\n }\n\n return <div {...passedProps} className=\"scrollbar-view\" id={divId} />;\n },\n [divId]\n );\n\n const onScrollStop = useCallback(() => {\n ref.current && setScrollTop && setScrollTop(ref.current.getValues());\n }, [setScrollTop]);\n\n return (\n <Scrollbars\n data-testid={testId}\n ref={ref}\n className={cx(styles.customScrollbar, className, {\n [styles.scrollbarWithScrollIndicators]: showScrollIndicators,\n })}\n onScrollStop={onScrollStop}\n autoHeight={true}\n autoHide={autoHide}\n autoHideTimeout={autoHideTimeout}\n hideTracksWhenNotNeeded={hideTracksWhenNotNeeded}\n // These autoHeightMin & autoHeightMax options affect firefox and chrome differently.\n // Before these where set to inherit but that caused problems with cut of legends in firefox\n autoHeightMax={autoHeightMax}\n autoHeightMin={autoHeightMin}\n renderTrackHorizontal={renderTrackHorizontal}\n renderTrackVertical={renderTrackVertical}\n renderThumbHorizontal={renderThumbHorizontal}\n renderThumbVertical={renderThumbVertical}\n renderView={renderView}\n onScroll={onScroll}\n >\n {showScrollIndicators ? <ScrollIndicators>{children}</ScrollIndicators> : children}\n </Scrollbars>\n );\n};\n\nexport default CustomScrollbar;\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n customScrollbar: css({\n // Fix for Firefox. For some reason sometimes .view container gets a height of its content, but in order to\n // make scroll working it should fit outer container size (scroll appears only when inner container size is\n // greater than outer one).\n display: 'flex',\n flexGrow: 1,\n '.scrollbar-view': {\n display: 'flex',\n flexGrow: 1,\n flexDirection: 'column',\n },\n '.track-vertical': {\n borderRadius: theme.shape.borderRadius(2),\n width: `${theme.spacing(1)} !important`,\n right: 0,\n bottom: theme.spacing(0.25),\n top: theme.spacing(0.25),\n },\n '.track-horizontal': {\n borderRadius: theme.shape.borderRadius(2),\n height: `${theme.spacing(1)} !important`,\n right: theme.spacing(0.25),\n bottom: theme.spacing(0.25),\n left: theme.spacing(0.25),\n },\n '.thumb-vertical': {\n background: theme.colors.action.focus,\n borderRadius: theme.shape.borderRadius(2),\n opacity: 0,\n },\n '.thumb-horizontal': {\n background: theme.colors.action.focus,\n borderRadius: theme.shape.borderRadius(2),\n opacity: 0,\n },\n '&:hover': {\n '.thumb-vertical, .thumb-horizontal': {\n opacity: 1,\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: 'opacity 0.3s ease-in-out',\n },\n },\n },\n }),\n // override the scroll container position so that the scroll indicators\n // are positioned at the top and bottom correctly.\n // react-custom-scrollbars doesn't provide any way for us to hook in nicely,\n // so we have to override with !important. feelsbad.\n scrollbarWithScrollIndicators: css({\n '.scrollbar-view': {\n // Need type assertion here due to the use of !important\n // see https://github.com/frenic/csstype/issues/114#issuecomment-697201978\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n position: 'static !important' as 'static',\n },\n }),\n };\n};\n\n/**\n * Calling scrollTop on a scrollbar ref in a useEffect can race with internal state in react-custom-scrollbars-2, causing scrollTop to get called on a stale reference, which prevents the element from scrolling as desired.\n * Adding the reference to the useEffect dependency array not notify react that the reference has changed (and is an eslint violation), so we create a custom hook so updates to the reference trigger another render, fixing the race condition bug.\n *\n * @param scrollBar\n * @param scrollTop\n */\nfunction useScrollTop(\n scrollBar: (Scrollbars & { view: HTMLDivElement; update: () => void }) | null,\n scrollTop?: number\n) {\n useEffect(() => {\n if (scrollBar && scrollTop != null) {\n scrollBar.scrollTop(scrollTop);\n }\n }, [scrollTop, scrollBar]);\n}\n","/* eslint-disable no-restricted-imports */\nimport {\n Action,\n addListener as addListenerUntyped,\n AsyncThunk,\n AsyncThunkOptions,\n AsyncThunkPayloadCreator,\n createAsyncThunk as createAsyncThunkUntyped,\n PayloadAction,\n TypedAddListener,\n} from '@reduxjs/toolkit';\nimport {\n useSelector as useSelectorUntyped,\n TypedUseSelectorHook,\n useDispatch as useDispatchUntyped,\n} from 'react-redux';\nimport { ThunkAction, ThunkDispatch as GenericThunkDispatch } from 'redux-thunk';\n\nimport type { createRootReducer } from 'app/core/reducers/root';\nimport { AppDispatch, RootState } from 'app/store/configureStore';\n\nexport type StoreState = ReturnType<ReturnType<typeof createRootReducer>>;\n\n/*\n * Utility type to get strongly types thunks\n */\nexport type ThunkResult<R> = ThunkAction<R, StoreState, undefined, PayloadAction<any>>;\n\nexport type ThunkDispatch = GenericThunkDispatch<StoreState, undefined, Action>;\n\n// Typed useDispatch & useSelector hooks\nexport const useDispatch: () => AppDispatch = useDispatchUntyped;\nexport const useSelector: TypedUseSelectorHook<RootState> = useSelectorUntyped;\n\ntype DefaultThunkApiConfig = { dispatch: AppDispatch; state: StoreState };\nexport const createAsyncThunk = <Returned, ThunkArg = void, ThunkApiConfig extends {} = DefaultThunkApiConfig>(\n typePrefix: string,\n payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>,\n options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>\n): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> =>\n createAsyncThunkUntyped<Returned, ThunkArg, ThunkApiConfig>(typePrefix, payloadCreator, options);\n\nexport const addListener = addListenerUntyped as TypedAddListener<RootState, AppDispatch>;\n","import { NavModelItem } from '@grafana/data';\n\nimport { IconName } from '../../types/icon';\nimport { Tab } from '../Tabs/Tab';\nimport { TabsBar } from '../Tabs/TabsBar';\n\nimport { ModalHeader } from './ModalHeader';\n\ninterface ModalTab {\n value: string;\n label: string;\n icon?: IconName;\n tabSuffix?: NavModelItem['tabSuffix'];\n}\n\ninterface Props {\n icon: IconName;\n title: string;\n tabs: ModalTab[];\n activeTab: string;\n onChangeTab(tab: ModalTab): void;\n}\n\nexport const ModalTabsHeader = ({ icon, title, tabs, activeTab, onChangeTab }: Props) => {\n return (\n <ModalHeader icon={icon} title={title}>\n <TabsBar hideBorder={true}>\n {tabs.map((t, index) => {\n return (\n <Tab\n key={`${t.value}-${index}`}\n label={t.label}\n icon={t.icon}\n suffix={t.tabSuffix}\n active={t.value === activeTab}\n onChangeTab={() => onChangeTab(t)}\n />\n );\n })}\n </TabsBar>\n </ModalHeader>\n );\n};\n","import { PropsWithChildren, useState, createContext, useContext, useEffect } from 'react';\n\nimport { useSelector } from 'app/types/store';\n\nimport { selectRichHistorySettings } from '../state/selectors';\n\nexport enum Tabs {\n RichHistory = 'Query history',\n Starred = 'Starred',\n Settings = 'Settings',\n}\n\ntype RichHistoryContextType = {\n selectedTab: Tabs;\n setSelectedTab: (tab: Tabs) => void;\n drawerOpened: boolean;\n setDrawerOpened: (value: boolean) => void;\n};\n\nexport const QueriesDrawerContext = createContext<RichHistoryContextType>({\n selectedTab: Tabs.RichHistory,\n setSelectedTab: () => {},\n drawerOpened: false,\n setDrawerOpened: () => {},\n});\n\nexport function useQueriesDrawerContext() {\n return useContext(QueriesDrawerContext);\n}\n\nexport function QueriesDrawerContextProvider({ children }: PropsWithChildren) {\n const [selectedTab, setSelectedTab] = useState<Tabs>(Tabs.RichHistory);\n const [drawerOpened, setDrawerOpened] = useState<boolean>(false);\n\n const settings = useSelector(selectRichHistorySettings);\n\n useEffect(() => {\n if (settings) {\n setSelectedTab(settings.starredTabAsFirstTab ? Tabs.Starred : Tabs.RichHistory);\n }\n }, [settings, setSelectedTab]);\n\n return (\n <QueriesDrawerContext.Provider\n value={{\n selectedTab,\n setSelectedTab,\n drawerOpened,\n setDrawerOpened,\n }}\n >\n {children}\n </QueriesDrawerContext.Provider>\n );\n}\n","import { ChangeEvent, FormEvent } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Stack } from '@grafana/ui';\nimport { VariableCheckboxField } from 'app/features/dashboard-scene/settings/variables/components/VariableCheckboxField';\nimport { VariableTextField } from 'app/features/dashboard-scene/settings/variables/components/VariableTextField';\n\ninterface SelectionOptionsFormProps {\n multi: boolean;\n includeAll: boolean;\n allowCustomValue?: boolean;\n allValue?: string | null;\n onMultiChange: (event: ChangeEvent<HTMLInputElement>) => void;\n onAllowCustomValueChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n onIncludeAllChange: (event: ChangeEvent<HTMLInputElement>) => void;\n onAllValueChange: (event: FormEvent<HTMLInputElement>) => void;\n}\n\nexport function SelectionOptionsForm({\n multi,\n allowCustomValue,\n includeAll,\n allValue,\n onMultiChange,\n onAllowCustomValueChange,\n onIncludeAllChange,\n onAllValueChange,\n}: SelectionOptionsFormProps) {\n return (\n <Stack direction=\"column\" gap={2} height=\"inherit\" alignItems=\"start\">\n <VariableCheckboxField\n value={multi}\n name={t('dashboard-scene.selection-options-form.name-multi-value', 'Multi-value')}\n description={t(\n 'dashboard-scene.selection-options-form.description-enables-multiple-values-selected',\n 'Enables multiple values to be selected at the same time'\n )}\n onChange={onMultiChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.selectionOptionsMultiSwitch}\n />\n {onAllowCustomValueChange && ( // backwards compat with old arch, remove on cleanup\n <VariableCheckboxField\n value={allowCustomValue ?? true}\n name={t('dashboard-scene.selection-options-form.name-allow-custom-values', 'Allow custom values')}\n description={t(\n 'dashboard-scene.selection-options-form.description-enables-users-custom-values',\n 'Enables users to add custom values to the list'\n )}\n onChange={onAllowCustomValueChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.selectionOptionsAllowCustomValueSwitch}\n />\n )}\n <VariableCheckboxField\n value={includeAll}\n name={t('dashboard-scene.selection-options-form.name-include-all-option', 'Include All option')}\n description={t(\n 'dashboard-scene.selection-options-form.description-enables-option-include-variables',\n 'Enables an option to include all values'\n )}\n onChange={onIncludeAllChange}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.selectionOptionsIncludeAllSwitch}\n />\n {includeAll && (\n <VariableTextField\n defaultValue={allValue ?? ''}\n onBlur={onAllValueChange}\n name={t('dashboard-scene.selection-options-form.name-custom-all-value', 'Custom all value')}\n testId={selectors.pages.Dashboard.Settings.Variables.Edit.General.selectionOptionsCustomAllInput}\n />\n )}\n </Stack>\n );\n}\n","import { useAsyncFn } from 'react-use';\nimport { lastValueFrom } from 'rxjs';\n\nimport { getDataSourceSrv, FetchResponse, CorrelationData, CorrelationsData } from '@grafana/runtime';\nimport { useGrafana } from 'app/core/context/GrafanaContext';\n\nimport {\n Correlation,\n CreateCorrelationParams,\n CreateCorrelationResponse,\n GetCorrelationsParams,\n RemoveCorrelationParams,\n RemoveCorrelationResponse,\n UpdateCorrelationParams,\n UpdateCorrelationResponse,\n} from './types';\nimport { correlationsLogger } from './utils';\n\nexport interface CorrelationsResponse {\n correlations: Correlation[];\n page: number;\n limit: number;\n totalCount: number;\n}\n\nconst toEnrichedCorrelationData = ({ sourceUID, ...correlation }: Correlation): CorrelationData | undefined => {\n const sourceDatasource = getDataSourceSrv().getInstanceSettings(sourceUID);\n const targetDatasource =\n correlation.type === 'query' ? getDataSourceSrv().getInstanceSettings(correlation.targetUID) : undefined;\n\n // According to #72258 we will remove logic to handle orgId=0/null as global correlations.\n // This logging is to check if there are any customers who did not migrate existing correlations.\n // See Deprecation Notice in https://github.com/grafana/grafana/pull/72258 for more details\n if (correlation?.orgId === undefined || correlation?.orgId === null || correlation?.orgId === 0) {\n correlationsLogger.logWarning('Invalid correlation config: Missing org id.');\n }\n\n if (\n sourceDatasource &&\n sourceDatasource?.uid !== undefined &&\n targetDatasource?.uid !== undefined &&\n correlation.type === 'query'\n ) {\n return {\n ...correlation,\n source: sourceDatasource,\n target: targetDatasource,\n };\n }\n\n if (\n sourceDatasource &&\n sourceDatasource?.uid !== undefined &&\n targetDatasource?.uid === undefined &&\n correlation.type === 'external'\n ) {\n return {\n ...correlation,\n source: sourceDatasource,\n };\n }\n\n correlationsLogger.logWarning(`Invalid correlation config: Missing source or target.`, {\n source: JSON.stringify(sourceDatasource),\n target: JSON.stringify(targetDatasource),\n });\n return undefined;\n};\n\nconst validSourceFilter = (correlation: CorrelationData | undefined): correlation is CorrelationData => !!correlation;\n\nexport const toEnrichedCorrelationsData = (correlationsResponse: CorrelationsResponse): CorrelationsData => {\n return {\n ...correlationsResponse,\n correlations: correlationsResponse.correlations.map(toEnrichedCorrelationData).filter(validSourceFilter),\n };\n};\n\nexport function getData<T>(response: FetchResponse<T>) {\n return response.data;\n}\n\n/**\n * hook for managing correlations data.\n * TODO: ideally this hook shouldn't have any side effect like showing notifications on error\n * and let consumers handle them. It works nicely with the correlations settings page, but when we'll\n * expose this we'll have to remove those side effects.\n */\nexport const useCorrelations = () => {\n const { backend } = useGrafana();\n\n const [getInfo, get] = useAsyncFn<(params: GetCorrelationsParams) => Promise<CorrelationsData>>(\n (params) =>\n lastValueFrom(\n backend.fetch<CorrelationsResponse>({\n url: '/api/datasources/correlations',\n params: { page: params.page },\n method: 'GET',\n showErrorAlert: false,\n })\n )\n .then(getData)\n .then(toEnrichedCorrelationsData),\n [backend]\n );\n\n const [createInfo, create] = useAsyncFn<(params: CreateCorrelationParams) => Promise<CorrelationData>>(\n ({ sourceUID, ...correlation }) =>\n backend\n .post<CreateCorrelationResponse>(`/api/datasources/uid/${sourceUID}/correlations`, correlation)\n .then((response) => {\n const enrichedCorrelation = toEnrichedCorrelationData(response.result);\n if (enrichedCorrelation !== undefined) {\n return enrichedCorrelation;\n } else {\n throw new Error('invalid sourceUID');\n }\n }),\n [backend]\n );\n\n const [removeInfo, remove] = useAsyncFn<(params: RemoveCorrelationParams) => Promise<{ message: string }>>(\n ({ sourceUID, uid }) =>\n backend.delete<RemoveCorrelationResponse>(`/api/datasources/uid/${sourceUID}/correlations/${uid}`),\n [backend]\n );\n\n const [updateInfo, update] = useAsyncFn<(params: UpdateCorrelationParams) => Promise<CorrelationData>>(\n ({ sourceUID, uid, ...correlation }) =>\n backend\n .patch<UpdateCorrelationResponse>(`/api/datasources/uid/${sourceUID}/correlations/${uid}`, correlation)\n .then((response) => {\n const enrichedCorrelation = toEnrichedCorrelationData(response.result);\n if (enrichedCorrelation !== undefined) {\n return enrichedCorrelation;\n } else {\n throw new Error('invalid sourceUID');\n }\n }),\n [backend]\n );\n\n return {\n create: {\n execute: create,\n ...createInfo,\n },\n update: {\n execute: update,\n ...updateInfo,\n },\n get: {\n execute: get,\n ...getInfo,\n },\n remove: {\n execute: remove,\n ...removeInfo,\n },\n };\n};\n","import { css } from '@emotion/css';\nimport { ReactElement, useCallback, useMemo, memo } from 'react';\n\nimport { FeatureState, GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Dropdown, FeatureBadge, Icon, Menu, Tooltip, useStyles2 } from '@grafana/ui';\nimport { ExpressionQueryType, expressionTypes } from 'app/features/expressions/types';\n\nconst EXPRESSION_ICON_MAP = {\n [ExpressionQueryType.math]: 'calculator-alt',\n [ExpressionQueryType.reduce]: 'compress-arrows',\n [ExpressionQueryType.resample]: 'sync',\n [ExpressionQueryType.classic]: 'cog',\n [ExpressionQueryType.threshold]: 'sliders-v-alt',\n [ExpressionQueryType.sql]: 'database',\n} as const satisfies Record<ExpressionQueryType, string>;\n\ninterface ExpressionTypeDropdownProps {\n children: ReactElement;\n handleOnSelect: (value: ExpressionQueryType) => void;\n}\n\ninterface ExpressionMenuItemProps {\n item: SelectableValue<ExpressionQueryType>;\n onSelect: (value: ExpressionQueryType) => void;\n}\n\nconst ExpressionMenuItem = memo<ExpressionMenuItemProps>(({ item, onSelect }) => {\n const { value, label, description } = item;\n const styles = useStyles2(getStyles);\n\n const handleClick = useCallback(() => onSelect(value!), [value, onSelect]);\n\n return (\n <Menu.Item\n component={() => (\n <div className={styles.expressionTypeItem} role=\"menuitem\">\n <div className={styles.expressionTypeItemContent} data-testid={`expression-type-${value}`}>\n <Icon className={styles.icon} name={EXPRESSION_ICON_MAP[value!]} aria-hidden=\"true\" />\n {label}\n {value === ExpressionQueryType.sql && <FeatureBadge featureState={FeatureState.new} />}\n </div>\n <Tooltip placement=\"right\" content={description!}>\n <Icon className={styles.infoIcon} name=\"info-circle\" />\n </Tooltip>\n </div>\n )}\n key={value}\n label=\"\"\n onClick={handleClick}\n />\n );\n});\n\nExpressionMenuItem.displayName = 'ExpressionMenuItem';\n\nexport const ExpressionTypeDropdown = memo<ExpressionTypeDropdownProps>(({ handleOnSelect, children }) => {\n const menuItems = useMemo(\n () => expressionTypes.map((item) => <ExpressionMenuItem key={item.value} item={item} onSelect={handleOnSelect} />),\n [handleOnSelect]\n );\n\n const menuOverlay = useMemo(() => <Menu role=\"menu\">{menuItems}</Menu>, [menuItems]);\n\n return (\n <Dropdown placement=\"bottom-start\" overlay={menuOverlay}>\n {children}\n </Dropdown>\n );\n});\n\nExpressionTypeDropdown.displayName = 'ExpressionTypeDropdown';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n expressionTypeItem: css({\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }),\n\n expressionTypeItemContent: css({\n flexGrow: 1,\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }),\n\n icon: css({\n color: theme.colors.text.secondary,\n flexShrink: 0,\n }),\n\n infoIcon: css({\n opacity: 0.7,\n color: theme.colors.text.secondary,\n flexShrink: 0,\n }),\n };\n};\n","import { getDataSourceSrv } from '@grafana/runtime';\nimport { RichHistoryQuery } from 'app/types/explore';\n\nimport { RichHistoryRemoteStorageDTO } from './RichHistoryRemoteStorage';\n\nexport const fromDTO = (dto: RichHistoryRemoteStorageDTO): RichHistoryQuery => {\n const datasource = getDataSourceSrv().getInstanceSettings({ uid: dto.datasourceUid });\n\n return {\n id: dto.uid,\n createdAt: dto.createdAt * 1000,\n datasourceName: datasource?.name || '', // will be show on the list as coming from a removed data source\n datasourceUid: dto.datasourceUid,\n starred: dto.starred,\n comment: dto.comment,\n queries: dto.queries,\n };\n};\n\nexport const toDTO = (richHistory: RichHistoryQuery): RichHistoryRemoteStorageDTO => {\n return {\n uid: richHistory.id,\n createdAt: Math.floor(richHistory.createdAt / 1000),\n datasourceUid: richHistory.datasourceUid,\n starred: richHistory.starred,\n comment: richHistory.comment,\n queries: richHistory.queries,\n };\n};\n","import { lastValueFrom } from 'rxjs';\n\nimport { DataQuery } from '@grafana/data';\nimport { getBackendSrv, getDataSourceSrv } from '@grafana/runtime';\nimport { RichHistoryQuery } from 'app/types/explore';\n\nimport { PreferencesService } from '../services/PreferencesService';\nimport { RichHistorySearchFilters, RichHistorySettings, SortOrder } from '../utils/richHistoryTypes';\n\nimport RichHistoryStorage, { RichHistoryStorageWarningDetails } from './RichHistoryStorage';\nimport { fromDTO } from './remoteStorageConverter';\n\nexport type RichHistoryRemoteStorageDTO = {\n uid: string;\n createdAt: number;\n datasourceUid: string;\n starred: boolean;\n comment: string;\n queries: DataQuery[];\n};\n\ntype RichHistoryRemoteStorageResultsPayloadDTO = {\n result: {\n queryHistory: RichHistoryRemoteStorageDTO[];\n totalCount: number;\n };\n};\n\ntype RichHistoryRemoteStorageUpdatePayloadDTO = {\n result: RichHistoryRemoteStorageDTO;\n};\n\nexport default class RichHistoryRemoteStorage implements RichHistoryStorage {\n private readonly preferenceService: PreferencesService;\n\n constructor() {\n this.preferenceService = new PreferencesService('user');\n }\n\n async addToRichHistory(\n newRichHistoryQuery: Omit<RichHistoryQuery, 'id' | 'createdAt'>\n ): Promise<{ warning?: RichHistoryStorageWarningDetails; richHistoryQuery: RichHistoryQuery }> {\n const { result } = await getBackendSrv().post(`/api/query-history`, {\n dataSourceUid: newRichHistoryQuery.datasourceUid,\n queries: newRichHistoryQuery.queries,\n });\n return {\n richHistoryQuery: fromDTO(result),\n };\n }\n\n async deleteAll(): Promise<void> {\n throw new Error('not supported');\n }\n\n async deleteRichHistory(id: string): Promise<void> {\n getBackendSrv().delete(`/api/query-history/${id}`);\n }\n\n async getRichHistory(filters: RichHistorySearchFilters) {\n const params = buildQueryParams(filters);\n\n let requestId = 'query-history-get-all';\n\n if (filters.starred) {\n requestId = 'query-history-get-starred';\n }\n\n const queryHistory = await lastValueFrom(\n getBackendSrv().fetch<RichHistoryRemoteStorageResultsPayloadDTO>({\n method: 'GET',\n url: `/api/query-history?${params}`,\n // to ensure any previous requests are cancelled\n requestId,\n })\n );\n\n const data = queryHistory.data;\n const richHistory = (data.result.queryHistory || []).map(fromDTO);\n const total = data.result.totalCount || 0;\n\n return { richHistory, total };\n }\n\n async getSettings(): Promise<RichHistorySettings> {\n const preferences = await this.preferenceService.load();\n return {\n activeDatasourcesOnly: false,\n lastUsedDatasourceFilters: undefined,\n retentionPeriod: 14,\n starredTabAsFirstTab: preferences.queryHistory?.homeTab === 'starred',\n };\n }\n\n async updateComment(id: string, comment: string | undefined): Promise<RichHistoryQuery> {\n const dto: RichHistoryRemoteStorageUpdatePayloadDTO = await getBackendSrv().patch(`/api/query-history/${id}`, {\n comment: comment,\n });\n return fromDTO(dto.result);\n }\n\n updateSettings(settings: RichHistorySettings): Promise<void> {\n return this.preferenceService.patch({\n queryHistory: {\n homeTab: settings.starredTabAsFirstTab ? 'starred' : 'query',\n },\n });\n }\n\n async updateStarred(id: string, starred: boolean): Promise<RichHistoryQuery> {\n let dto: RichHistoryRemoteStorageUpdatePayloadDTO;\n if (starred) {\n dto = await getBackendSrv().post(`/api/query-history/star/${id}`);\n } else {\n dto = await getBackendSrv().delete(`/api/query-history/star/${id}`);\n }\n return fromDTO(dto.result);\n }\n}\n\nfunction buildQueryParams(filters: RichHistorySearchFilters): string {\n let params = `${filters.datasourceFilters\n .map((datasourceName) => {\n const uid = getDataSourceSrv().getInstanceSettings(datasourceName)!.uid;\n return `datasourceUid=${encodeURIComponent(uid)}`;\n })\n .join('&')}`;\n if (filters.search) {\n params = params + `&searchString=${filters.search}`;\n }\n if (filters.sortOrder) {\n params = params + `&sort=${filters.sortOrder === SortOrder.Ascending ? 'time-asc' : 'time-desc'}`;\n }\n if (!filters.starred) {\n params = params + `&to=${filters.to}`;\n params = params + `&from=${filters.from}`;\n }\n params = params + `&limit=100`;\n params = params + `&page=${filters.page || 1}`;\n if (filters.starred) {\n params = params + `&onlyStarred=${filters.starred}`;\n }\n return params;\n}\n","import { config } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\n\nimport { SortOrder } from '../utils/richHistoryTypes';\n\nimport RichHistoryLocalStorage from './RichHistoryLocalStorage';\nimport RichHistoryRemoteStorage from './RichHistoryRemoteStorage';\nimport RichHistoryStorage from './RichHistoryStorage';\n\nconst richHistoryLocalStorage = new RichHistoryLocalStorage();\nconst richHistoryRemoteStorage = new RichHistoryRemoteStorage();\n\n// for query history operations\nexport const getRichHistoryStorage = (): RichHistoryStorage => {\n return config.queryHistoryEnabled ? richHistoryRemoteStorage : richHistoryLocalStorage;\n};\n\n// for autocomplete read and write operations\nexport const getLocalRichHistoryStorage = (): RichHistoryStorage => {\n return richHistoryLocalStorage;\n};\n\ninterface RichHistorySupportedFeatures {\n availableFilters: SortOrder[];\n lastUsedDataSourcesAvailable: boolean;\n clearHistory: boolean;\n onlyActiveDataSource: boolean;\n changeRetention: boolean;\n queryHistoryAvailable: boolean;\n}\n\nexport const supportedFeatures = (): RichHistorySupportedFeatures => {\n return config.queryHistoryEnabled\n ? {\n availableFilters: [SortOrder.Descending, SortOrder.Ascending],\n lastUsedDataSourcesAvailable: false,\n clearHistory: false,\n onlyActiveDataSource: false,\n changeRetention: false,\n queryHistoryAvailable: contextSrv.isSignedIn,\n }\n : {\n availableFilters: [SortOrder.Descending, SortOrder.Ascending, SortOrder.DatasourceAZ, SortOrder.DatasourceZA],\n lastUsedDataSourcesAvailable: true,\n clearHistory: true,\n onlyActiveDataSource: true,\n changeRetention: true,\n queryHistoryAvailable: true,\n };\n};\n","import { produce } from 'immer';\nimport { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { isFetchError } from '@grafana/runtime';\nimport { Badge } from '@grafana/ui';\nimport { NotifierDTO } from 'app/features/alerting/unified/types/alerting';\nimport { getIrmIfPresentOrOnCallPluginId } from 'app/features/alerting/unified/utils/config';\n\nimport { useAppNotification } from '../../../../../../../core/copy/appNotification';\nimport { Receiver } from '../../../../../../../plugins/datasource/alertmanager/types';\nimport { ONCALL_INTEGRATION_V2_FEATURE, onCallApi } from '../../../../api/onCallApi';\nimport { usePluginBridge } from '../../../../hooks/usePluginBridge';\nimport { option } from '../../../../utils/notifier-types';\n\nimport { GRAFANA_ONCALL_INTEGRATION_TYPE, ReceiverTypes } from './onCall';\n\nexport enum OnCallIntegrationType {\n NewIntegration = 'new_oncall_integration',\n ExistingIntegration = 'existing_oncall_integration',\n}\n\nexport enum OnCallIntegrationSetting {\n IntegrationType = 'integration_type',\n IntegrationName = 'integration_name',\n}\n\nenum OnCallIntegrationStatus {\n Disabled = 'disabled',\n // The old integration done exclusively on the OnCall side\n // Relies on automatic creation of contact points and altering notification policies\n // If enabled Alerting UI should not enable any OnCall integration features\n V1 = 'v1',\n // The new integration - On Alerting side we create OnCall integrations and use theirs URLs\n // as parameters for oncall contact points\n V2 = 'v2',\n}\n\nfunction useOnCallPluginStatus() {\n const {\n installed: isOnCallEnabled,\n loading: isPluginBridgeLoading,\n error: pluginError,\n } = usePluginBridge(getIrmIfPresentOrOnCallPluginId());\n\n const {\n data: onCallFeatures = [],\n error: onCallFeaturesError,\n isLoading: isOnCallFeaturesLoading,\n } = onCallApi.endpoints.features.useQuery(undefined, { skip: !isOnCallEnabled });\n\n const integrationStatus = useMemo((): OnCallIntegrationStatus => {\n if (!isOnCallEnabled) {\n return OnCallIntegrationStatus.Disabled;\n }\n // TODO Support for V2 integration should be added when the OnCall team introduces the necessary changes\n\n return onCallFeatures.includes(ONCALL_INTEGRATION_V2_FEATURE)\n ? OnCallIntegrationStatus.V2\n : OnCallIntegrationStatus.V1;\n }, [isOnCallEnabled, onCallFeatures]);\n\n const isAlertingV2IntegrationEnabled = useMemo(\n () => integrationStatus === OnCallIntegrationStatus.V2,\n [integrationStatus]\n );\n\n return {\n isOnCallEnabled,\n integrationStatus,\n isAlertingV2IntegrationEnabled,\n isOnCallStatusLoading: isPluginBridgeLoading || isOnCallFeaturesLoading,\n onCallError: pluginError ?? onCallFeaturesError,\n };\n}\n\nexport function useOnCallIntegration() {\n const notifyApp = useAppNotification();\n\n const { isOnCallEnabled, integrationStatus, isAlertingV2IntegrationEnabled, isOnCallStatusLoading, onCallError } =\n useOnCallPluginStatus();\n\n const { useCreateIntegrationMutation, useGrafanaOnCallIntegrationsQuery, useLazyValidateIntegrationNameQuery } =\n onCallApi;\n\n const [validateIntegrationNameQuery, { isFetching: isValidating }] = useLazyValidateIntegrationNameQuery();\n const [createIntegrationMutation] = useCreateIntegrationMutation();\n\n const {\n data: grafanaOnCallIntegrations = [],\n isLoading: isLoadingOnCallIntegrations,\n isError: isIntegrationsQueryError,\n } = useGrafanaOnCallIntegrationsQuery(undefined, { skip: !isAlertingV2IntegrationEnabled });\n\n const onCallFormValidators = useMemo(() => {\n return {\n integration_name: async (value: string) => {\n try {\n await validateIntegrationNameQuery(value).unwrap();\n return true;\n } catch (error) {\n if (isFetchError(error) && error.status === 409) {\n return t(\n 'alerting.irm-integration.integration-name-exists',\n 'Integration of this name already exists in IRM'\n );\n }\n\n notifyApp.error(\n t(\n 'alerting.irm-integration.validation-failed',\n 'Failed to validate IRM integration name. Is the OnCall API available?'\n )\n );\n throw error;\n }\n },\n url: (value: string) => {\n if (!isAlertingV2IntegrationEnabled) {\n return true;\n }\n\n return grafanaOnCallIntegrations.map((i) => i.integration_url).includes(value)\n ? true\n : t('alerting.irm-integration.integration-required', 'Selection of existing IRM integration is required');\n },\n };\n }, [grafanaOnCallIntegrations, validateIntegrationNameQuery, isAlertingV2IntegrationEnabled, notifyApp]);\n\n const extendOnCallReceivers = useCallback(\n (receiver: Receiver): Receiver => {\n if (!isAlertingV2IntegrationEnabled) {\n return receiver;\n }\n\n return produce(receiver, (draft) => {\n draft.grafana_managed_receiver_configs?.forEach((config) => {\n if (config.type === ReceiverTypes.OnCall) {\n config.settings[OnCallIntegrationSetting.IntegrationType] = OnCallIntegrationType.ExistingIntegration;\n }\n });\n });\n },\n [isAlertingV2IntegrationEnabled]\n );\n\n const createOnCallIntegrations = useCallback(\n async (receiver: Receiver): Promise<Receiver> => {\n if (!isAlertingV2IntegrationEnabled) {\n return receiver;\n }\n\n const onCallIntegrations =\n receiver.grafana_managed_receiver_configs?.filter((c) => c.type === ReceiverTypes.OnCall) ?? [];\n const newOnCallIntegrations = onCallIntegrations.filter(\n (c) => c.settings[OnCallIntegrationSetting.IntegrationType] === OnCallIntegrationType.NewIntegration\n );\n\n const createNewOnCallIntegrationJobs = newOnCallIntegrations.map(async (c) => {\n const newIntegration = await createIntegrationMutation({\n integration: GRAFANA_ONCALL_INTEGRATION_TYPE,\n verbal_name: c.settings[OnCallIntegrationSetting.IntegrationName],\n }).unwrap();\n\n c.settings.url = newIntegration.integration_url;\n });\n\n await Promise.all(createNewOnCallIntegrationJobs);\n\n return produce(receiver, (draft) => {\n draft.grafana_managed_receiver_configs?.forEach((c) => {\n // Clean up the settings before sending the receiver to the backend\n // The settings object can contain any additional data but integration type and name are purely frontend thing\n // and should not be sent and kept in the backend\n if (c.type === ReceiverTypes.OnCall) {\n delete c.settings[OnCallIntegrationSetting.IntegrationType];\n delete c.settings[OnCallIntegrationSetting.IntegrationName];\n }\n });\n });\n },\n [isAlertingV2IntegrationEnabled, createIntegrationMutation]\n );\n\n const extendOnCallNotifierFeatures = useCallback(\n (notifier: NotifierDTO): NotifierDTO => {\n // If V2 integration is not enabled the receiver will not be extended\n // We still allow users to use this contact point but they need to provide URL manually\n // As they do for webhook integration\n // Removing the oncall notifier from the list of available notifiers has drawbacks - it's tricky to define what should happen\n // if someone turned off or downgraded the OnCall plugin but had some receivers configured with OnCall notifier\n // By falling back to plain URL input we allow users to change the config with OnCall disabled/not supporting V2 integration\n if (notifier.type === ReceiverTypes.OnCall && isAlertingV2IntegrationEnabled) {\n const options = notifier.options.filter((o) => o.propertyName !== 'url');\n\n const newIntegrationOption: SelectableValue<string> = {\n value: OnCallIntegrationType.NewIntegration,\n label: t('alerting.irm-integration.new-integration', 'New IRM integration'),\n description: t(\n 'alerting.irm-integration.new-integration-description',\n 'A new IRM integration without escalation chains will be automatically created'\n ),\n };\n const existingIntegrationOption: SelectableValue<string> = {\n value: OnCallIntegrationType.ExistingIntegration,\n label: t('alerting.irm-integration.existing-integration', 'Existing IRM integration'),\n description: t(\n 'alerting.irm-integration.existing-integration-description',\n 'Use an existing IRM integration'\n ),\n };\n\n options.unshift(\n option(\n OnCallIntegrationSetting.IntegrationType,\n t('alerting.irm-integration.connection-method', 'How to connect to IRM'),\n '',\n {\n required: true,\n element: 'radio',\n defaultValue: newIntegrationOption,\n selectOptions: [newIntegrationOption, existingIntegrationOption],\n }\n ),\n option(\n OnCallIntegrationSetting.IntegrationName,\n t('alerting.irm-integration.integration-name', 'Integration name'),\n t('alerting.irm-integration.integration-name-description', 'The name of the new IRM integration'),\n {\n required: true,\n showWhen: { field: 'integration_type', is: OnCallIntegrationType.NewIntegration },\n }\n ),\n option(\n 'url',\n t('alerting.irm-integration.integration', 'IRM Integration'),\n t('alerting.irm-integration.integration-description', 'The IRM integration to send alerts to'),\n {\n element: 'select',\n required: true,\n showWhen: { field: 'integration_type', is: OnCallIntegrationType.ExistingIntegration },\n selectOptions: grafanaOnCallIntegrations.map((i) => ({\n label: i.display_name,\n description: i.integration_url,\n value: i.integration_url,\n })),\n }\n )\n );\n\n return { ...notifier, options };\n }\n\n return notifier;\n },\n [grafanaOnCallIntegrations, isAlertingV2IntegrationEnabled]\n );\n\n return {\n integrationStatus,\n onCallNotifierMeta: {\n enabled: !!isOnCallEnabled,\n order: -1, // The default is 0. We want OnCall to be the first on the list\n description: isOnCallEnabled\n ? t('alerting.irm-integration.enabled-description', 'Seamless way to handle alerts and manage incidents')\n : t('alerting.irm-integration.disabled-description', 'Enable IRM through a Webhook integration'),\n badge: <Badge color=\"blue\" text={t('alerting.irm-integration.recommended', 'Recommended')} />,\n },\n extendOnCallNotifierFeatures,\n extendOnCallReceivers,\n createOnCallIntegrations,\n onCallFormValidators,\n isLoadingOnCallIntegration: isLoadingOnCallIntegrations || isOnCallStatusLoading,\n isValidating,\n hasOnCallError: Boolean(onCallError) || isIntegrationsQueryError,\n };\n}\n","import { FeatureToggles } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { RepositoryViewList } from 'app/api/clients/provisioning/v0alpha1';\n\nexport const requiredFeatureToggles: Array<keyof FeatureToggles> = ['provisioning', 'kubernetesDashboards'];\n\n/**\n * Checks if all required feature toggles are enabled\n * @returns true if all required feature toggles are enabled\n */\nexport const checkRequiredFeatures = (): boolean => {\n const featureToggles = config.featureToggles || {};\n return requiredFeatureToggles.every((toggle) => featureToggles[toggle]);\n};\n\n/**\n * Checks if public access is configured\n * @returns true if the app URL is configured for external access\n */\nexport const checkPublicAccess = (): boolean => {\n return Boolean(config.appUrl && config.appUrl.indexOf('://localhost') < 0);\n};\n\n/**\n * Checks if image renderer is configured\n * @returns true if the image renderer is available\n */\nexport const checkImageRenderer = (): boolean => {\n return Boolean(config.rendererAvailable);\n};\n\n/**\n * Checks if image rendering is allowed by provisioning configuration\n * @param settings - Provisioning settings from the backend\n * @returns true if image rendering is allowed for provisioning workflows\n */\nexport const checkImageRenderingAllowed = (settings?: RepositoryViewList): boolean => {\n // Default to true if settings are not available\n return settings?.allowImageRendering !== false;\n};\n\n/**\n * Returns the configuration status of all features\n * @param settings - Optional provisioning settings from the backend\n * @returns Object containing the status of required and optional features\n */\nexport const getConfigurationStatus = (settings?: RepositoryViewList) => {\n const hasRequiredFeatures = checkRequiredFeatures();\n const hasPublicAccess = checkPublicAccess();\n const hasImageRenderer = checkImageRenderer();\n const imageRenderingAllowed = checkImageRenderingAllowed(settings);\n\n return {\n hasRequiredFeatures,\n hasPublicAccess,\n hasImageRenderer,\n imageRenderingAllowed,\n missingOnlyOptionalFeatures: hasRequiredFeatures && (!hasPublicAccess || !hasImageRenderer),\n missingRequiredFeatures: !hasRequiredFeatures,\n everythingConfigured: hasRequiredFeatures && hasPublicAccess && hasImageRenderer && imageRenderingAllowed,\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { autoUpdate, offset, Side, useFloating, useTransitionStyles } from '@floating-ui/react';\nimport { useLayoutEffect } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\nimport { getPositioningMiddleware } from '../../utils/floating';\nimport { Icon } from '../Icon/Icon';\nimport { Portal } from '../Portal/Portal';\n\nexport interface InlineToastProps {\n children: React.ReactNode;\n suffixIcon?: IconName;\n referenceElement: HTMLElement | null;\n placement: Side;\n /**\n * @deprecated\n * Placement to use if there is not enough space to show the full toast with the original placement\n * This is now done automatically.\n */\n alternativePlacement?: Side;\n}\n\n/**\n * Used to indicate temporal status near fields/components, such as a *Saved* indicator next to a field, or a little *Copied!* indicator above a button.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/information-inlinetoast--docs\n */\nexport function InlineToast({ referenceElement, children, suffixIcon, placement }: InlineToastProps) {\n const styles = useStyles2(getStyles);\n const theme = useTheme2();\n\n // the order of middleware is important!\n // `arrow` should almost always be at the end\n // see https://floating-ui.com/docs/arrow#order\n const middleware = [offset(8), ...getPositioningMiddleware(placement)];\n\n const { context, refs, floatingStyles } = useFloating({\n open: true,\n placement,\n middleware,\n whileElementsMounted: autoUpdate,\n strategy: 'fixed',\n });\n\n useLayoutEffect(() => {\n refs.setReference(referenceElement);\n }, [referenceElement, refs]);\n\n const { styles: placementStyles } = useTransitionStyles(context, {\n initial: ({ side }) => {\n return {\n opacity: 0,\n transform: getInitialTransform(side, theme),\n };\n },\n duration: theme.transitions.duration.shortest,\n });\n\n return (\n <Portal>\n <div style={{ display: 'inline-block', ...floatingStyles }} ref={refs.setFloating} aria-live=\"polite\">\n <span className={cx(styles.root)} style={placementStyles}>\n {children && <span>{children}</span>}\n {suffixIcon && <Icon name={suffixIcon} />}\n </span>\n </div>\n </Portal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n ...theme.typography.bodySmall,\n willChange: 'transform',\n background: theme.components.tooltip.background,\n color: theme.components.tooltip.text,\n padding: theme.spacing(0.5, 1.5), // get's an extra .5 of vertical padding to account for the rounded corners\n borderRadius: theme.shape.radius.pill,\n display: 'inline-flex',\n gap: theme.spacing(0.5),\n alignItems: 'center',\n }),\n };\n};\n\nconst getInitialTransform = (placement: InlineToastProps['placement'], theme: GrafanaTheme2) => {\n const gap = 1;\n\n switch (placement) {\n case 'top':\n return `translateY(${theme.spacing(gap)})`;\n case 'bottom':\n return `translateY(-${theme.spacing(gap)})`;\n case 'left':\n return `translateX(${theme.spacing(gap)})`;\n case 'right':\n return `translateX(-${theme.spacing(gap)})`;\n }\n};\n","import * as React from 'react';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\n\nimport { getModalStyles } from './getModalStyles';\n\ninterface Props {\n title: string;\n id?: string;\n /** @deprecated */\n icon?: IconName;\n /** @deprecated */\n iconTooltip?: string;\n}\n\n/** @internal */\nexport const ModalHeader = ({ icon, iconTooltip, title, children, id }: React.PropsWithChildren<Props>) => {\n const styles = useStyles2(getModalStyles);\n\n return (\n <>\n <h2 className={styles.modalHeaderTitle} id={id}>\n {title}\n </h2>\n {children}\n </>\n );\n};\n","import { Range } from 'uplot';\n\nimport {\n DataFrame,\n FieldConfig,\n FieldSparkline,\n FieldType,\n isLikelyAscendingVector,\n sortDataFrame,\n applyNullInsertThreshold,\n Field,\n} from '@grafana/data';\nimport { GraphFieldConfig } from '@grafana/schema';\n\n/** @internal\n * Given a sparkline config returns a DataFrame ready to be turned into Plot data set\n **/\nexport function preparePlotFrame(sparkline: FieldSparkline, config?: FieldConfig<GraphFieldConfig>): DataFrame {\n const length = sparkline.y.values.length;\n const yFieldConfig = {\n ...sparkline.y.config,\n ...config,\n };\n\n const xField = sparkline.x ?? {\n name: '',\n values: [...Array(length).keys()],\n type: FieldType.number,\n config: {},\n };\n\n let frame: DataFrame = {\n refId: 'sparkline',\n fields: [\n xField,\n {\n ...sparkline.y,\n config: yFieldConfig,\n },\n ],\n length,\n };\n\n if (!isLikelyAscendingVector(xField.values)) {\n frame = sortDataFrame(frame, 0);\n }\n\n return applyNullInsertThreshold({\n frame,\n refFieldPseudoMin: sparkline.timeRange?.from.valueOf(),\n refFieldPseudoMax: sparkline.timeRange?.to.valueOf(),\n });\n}\n\n/**\n * apply configuration defaults and ensure that the range is never two equal values.\n */\nexport function getYRange(field: Field, alignedFrame: DataFrame): Range.MinMax {\n let { min, max } = alignedFrame.fields[1].state?.range!;\n\n // enure that the min/max from the field config are respected\n min = Math.max(min!, field.config.min ?? -Infinity);\n max = Math.min(max!, field.config.max ?? Infinity);\n\n // if noValue is set, ensure that it is included in the range as well\n const noValue = +alignedFrame.fields[1].config?.noValue!;\n if (!Number.isNaN(noValue)) {\n min = Math.min(min, noValue);\n max = Math.max(max, noValue);\n }\n\n // if min and max are equal after all of that, create a range\n // that allows the sparkline to be visible in the center of the viz\n if (min === max) {\n if (min === 0) {\n max = 100;\n } else if (min < 0) {\n max = 0;\n min *= 2;\n } else {\n min = 0;\n max *= 2;\n }\n }\n\n return [min, max];\n}\n","import { isEqual } from 'lodash';\nimport { PureComponent } from 'react';\nimport { AlignedData, Range } from 'uplot';\n\nimport {\n compareDataFrameStructures,\n DataFrame,\n Field,\n FieldConfig,\n FieldSparkline,\n FieldType,\n getFieldColorModeForField,\n nullToValue,\n} from '@grafana/data';\nimport {\n AxisPlacement,\n GraphDrawStyle,\n GraphFieldConfig,\n VisibilityMode,\n ScaleDirection,\n ScaleOrientation,\n} from '@grafana/schema';\n\nimport { Themeable2 } from '../../types/theme';\nimport { UPlotChart } from '../uPlot/Plot';\nimport { UPlotConfigBuilder } from '../uPlot/config/UPlotConfigBuilder';\nimport { preparePlotData2, getStackingGroups } from '../uPlot/utils';\n\nimport { getYRange, preparePlotFrame } from './utils';\n\nexport interface SparklineProps extends Themeable2 {\n width: number;\n height: number;\n config?: FieldConfig<GraphFieldConfig>;\n sparkline: FieldSparkline;\n}\n\ninterface State {\n data: AlignedData;\n alignedDataFrame: DataFrame;\n configBuilder: UPlotConfigBuilder;\n}\n\nconst defaultConfig: GraphFieldConfig = {\n drawStyle: GraphDrawStyle.Line,\n showPoints: VisibilityMode.Auto,\n axisPlacement: AxisPlacement.Hidden,\n pointSize: 2,\n};\n\n/** @internal */\nexport class Sparkline extends PureComponent<SparklineProps, State> {\n constructor(props: SparklineProps) {\n super(props);\n\n const alignedDataFrame = preparePlotFrame(props.sparkline, props.config);\n\n this.state = {\n data: preparePlotData2(alignedDataFrame, getStackingGroups(alignedDataFrame)),\n alignedDataFrame,\n configBuilder: this.prepareConfig(alignedDataFrame),\n };\n }\n\n static getDerivedStateFromProps(props: SparklineProps, state: State) {\n const _frame = preparePlotFrame(props.sparkline, props.config);\n const frame = nullToValue(_frame);\n if (!frame) {\n return { ...state };\n }\n\n return {\n ...state,\n data: preparePlotData2(frame, getStackingGroups(frame)),\n alignedDataFrame: frame,\n };\n }\n\n componentDidUpdate(prevProps: SparklineProps, prevState: State) {\n const { alignedDataFrame } = this.state;\n\n if (!alignedDataFrame) {\n return;\n }\n\n let rebuildConfig = false;\n\n if (prevProps.sparkline !== this.props.sparkline) {\n const isStructureChanged = !compareDataFrameStructures(this.state.alignedDataFrame, prevState.alignedDataFrame);\n const isRangeChanged = !isEqual(\n alignedDataFrame.fields[1].state?.range,\n prevState.alignedDataFrame.fields[1].state?.range\n );\n rebuildConfig = isStructureChanged || isRangeChanged;\n } else {\n rebuildConfig = !isEqual(prevProps.config, this.props.config);\n }\n\n if (rebuildConfig) {\n this.setState({ configBuilder: this.prepareConfig(alignedDataFrame) });\n }\n }\n\n getYRange(field: Field): Range.MinMax {\n return getYRange(field, this.state.alignedDataFrame);\n }\n\n prepareConfig(data: DataFrame) {\n const { theme } = this.props;\n const builder = new UPlotConfigBuilder();\n\n builder.setCursor({\n show: false,\n x: false, // no crosshairs\n y: false,\n });\n\n // X is the first field in the alligned frame\n const xField = data.fields[0];\n builder.addScale({\n scaleKey: 'x',\n orientation: ScaleOrientation.Horizontal,\n direction: ScaleDirection.Right,\n isTime: false, //xField.type === FieldType.time,\n range: () => {\n const { sparkline } = this.props;\n if (sparkline.x) {\n if (sparkline.timeRange && sparkline.x.type === FieldType.time) {\n return [sparkline.timeRange.from.valueOf(), sparkline.timeRange.to.valueOf()];\n }\n const vals = sparkline.x.values;\n return [vals[0], vals[vals.length - 1]];\n }\n return [0, sparkline.y.values.length - 1];\n },\n });\n\n builder.addAxis({\n scaleKey: 'x',\n theme,\n placement: AxisPlacement.Hidden,\n });\n\n for (let i = 0; i < data.fields.length; i++) {\n const field = data.fields[i];\n const config: FieldConfig<GraphFieldConfig> = field.config;\n const customConfig: GraphFieldConfig = {\n ...defaultConfig,\n ...config.custom,\n };\n\n if (field === xField || field.type !== FieldType.number) {\n continue;\n }\n\n const scaleKey = config.unit || '__fixed';\n builder.addScale({\n scaleKey,\n orientation: ScaleOrientation.Vertical,\n direction: ScaleDirection.Up,\n range: () => this.getYRange(field),\n });\n\n builder.addAxis({\n scaleKey,\n theme,\n placement: AxisPlacement.Hidden,\n });\n\n const colorMode = getFieldColorModeForField(field);\n const seriesColor = colorMode.getCalculator(field, theme)(0, 0);\n const pointsMode =\n customConfig.drawStyle === GraphDrawStyle.Points ? VisibilityMode.Always : customConfig.showPoints;\n\n builder.addSeries({\n pxAlign: false,\n scaleKey,\n theme,\n colorMode,\n thresholds: config.thresholds,\n drawStyle: customConfig.drawStyle!,\n lineColor: customConfig.lineColor ?? seriesColor,\n lineWidth: customConfig.lineWidth,\n lineInterpolation: customConfig.lineInterpolation,\n showPoints: pointsMode,\n pointSize: customConfig.pointSize,\n fillOpacity: customConfig.fillOpacity,\n fillColor: customConfig.fillColor,\n lineStyle: customConfig.lineStyle,\n gradientMode: customConfig.gradientMode,\n spanNulls: customConfig.spanNulls,\n });\n }\n\n return builder;\n }\n\n render() {\n const { data, configBuilder } = this.state;\n const { width, height } = this.props;\n return <UPlotChart data={data} config={configBuilder} width={width} height={height} />;\n }\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options {\n selectedSeries: number;\n}\n\nexport const defaultOptions: Partial<Options> = {\n selectedSeries: 0,\n};\n","import { css, cx } from '@emotion/css';\nimport { ReactNode } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport interface LabelProps extends React.HTMLAttributes<HTMLLegendElement> {\n children: string | ReactNode;\n description?: string;\n}\n\nexport const getLegendStyles = (theme: GrafanaTheme2) => {\n return {\n legend: css({\n fontSize: theme.typography.h3.fontSize,\n fontWeight: theme.typography.fontWeightRegular,\n margin: theme.spacing(0, 0, 2, 0),\n }),\n };\n};\n\n/**\n * Legend should be used to add a caption to a group of related form elements that have been grouped toegheter into a `FieldSet`.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/forms-legend--docs\n */\nexport const Legend = ({ children, className, ...legendProps }: LabelProps) => {\n const styles = useStyles2(getLegendStyles);\n\n return (\n <legend className={cx(styles.legend, className)} {...legendProps}>\n {children}\n </legend>\n );\n};\n","import { ComponentType } from 'react';\n\nimport { EventBus } from '../events/types';\nimport { DataFrame } from '../types/dataFrame';\nimport { VariableSuggestionsScope, VariableSuggestion } from '../types/dataLink';\nimport { InterpolateFunction } from '../types/panel';\nimport { Registry, RegistryItem } from '../utils/Registry';\n\nimport { FieldConfigOptionsRegistry } from './FieldConfigOptionsRegistry';\n\nexport interface StandardEditorContext<TOptions, TState = any> {\n data: DataFrame[]; // All results\n replaceVariables?: InterpolateFunction;\n eventBus?: EventBus;\n getSuggestions?: (scope?: VariableSuggestionsScope) => VariableSuggestion[];\n options?: TOptions;\n instanceState?: TState;\n isOverride?: boolean;\n annotations?: DataFrame[];\n}\n\nexport interface StandardEditorProps<TValue = any, TSettings = any, TOptions = any, TState = any> {\n value: TValue;\n onChange: (value?: TValue) => void;\n context: StandardEditorContext<TOptions, TState>;\n id?: string;\n\n item: RegistryItem & {\n settings?: TSettings;\n };\n}\n\nexport interface StandardEditorsRegistryItem<TValue = any, TSettings = any> extends RegistryItem {\n editor: ComponentType<StandardEditorProps<TValue, TSettings>>;\n settings?: TSettings;\n}\nexport const standardFieldConfigEditorRegistry = new FieldConfigOptionsRegistry();\n\nexport const standardEditorsRegistry = new Registry<StandardEditorsRegistryItem>();\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { locationService } from '@grafana/runtime';\nimport { ConfirmModal } from '@grafana/ui';\nimport { dispatch } from 'app/store/store';\nimport { EditableRuleIdentifier, RuleGroupIdentifierV2 } from 'app/types/unified-alerting';\n\nimport { shouldAllowRecoveringDeletedRules, shouldUsePrometheusRulesPrimary } from '../../featureToggles';\nimport { useDeleteRuleFromGroup } from '../../hooks/ruleGroup/useDeleteRuleFromGroup';\nimport { usePrometheusConsistencyCheck } from '../../hooks/usePrometheusConsistencyCheck';\nimport { fetchPromAndRulerRulesAction, fetchRulerRulesAction } from '../../state/actions';\nimport { ruleGroupIdentifierV2toV1 } from '../../utils/groupIdentifier';\nimport { isCloudRuleIdentifier } from '../../utils/rules';\n\ntype DeleteModalHook = [\n JSX.Element,\n (ruleIdentifier: EditableRuleIdentifier, groupIdentifier: RuleGroupIdentifierV2) => void,\n () => void,\n];\ntype DeleteRuleInfo = { ruleIdentifier: EditableRuleIdentifier; groupIdentifier: RuleGroupIdentifierV2 } | undefined;\n\nconst prometheusRulesPrimary = shouldUsePrometheusRulesPrimary();\n\nexport const useDeleteModal = (redirectToListView = false): DeleteModalHook => {\n const [ruleToDelete, setRuleToDelete] = useState<DeleteRuleInfo>();\n const [deleteRuleFromGroup] = useDeleteRuleFromGroup();\n const { waitForRemoval } = usePrometheusConsistencyCheck();\n const isSoftDeleteEnabled = shouldAllowRecoveringDeletedRules();\n\n const dismissModal = useCallback(() => {\n setRuleToDelete(undefined);\n }, []);\n\n const showModal = useCallback((ruleIdentifier: EditableRuleIdentifier, groupIdentifier: RuleGroupIdentifierV2) => {\n setRuleToDelete({ ruleIdentifier, groupIdentifier });\n }, []);\n\n const deleteRule = useCallback(async () => {\n if (!ruleToDelete) {\n return;\n }\n\n const { ruleIdentifier, groupIdentifier } = ruleToDelete;\n\n const groupIdentifierV1 = ruleGroupIdentifierV2toV1(groupIdentifier);\n const rulesSourceName = groupIdentifierV1.dataSourceName;\n\n await deleteRuleFromGroup.execute(groupIdentifierV1, ruleIdentifier);\n\n // refetch rules for this rules source\n // @TODO remove this when we moved everything to RTKQ – then the endpoint will simply invalidate the tags\n dispatch(fetchPromAndRulerRulesAction({ rulesSourceName }));\n\n if (prometheusRulesPrimary && isCloudRuleIdentifier(ruleIdentifier)) {\n await waitForRemoval(ruleIdentifier);\n } else {\n // Without this the delete popup will close and the user will still see the deleted rule\n await dispatch(fetchRulerRulesAction({ rulesSourceName }));\n }\n\n dismissModal();\n\n if (redirectToListView) {\n locationService.replace('/alerting/list');\n }\n }, [deleteRuleFromGroup, dismissModal, ruleToDelete, redirectToListView, waitForRemoval]);\n\n const modal = useMemo(\n () => (\n <ConfirmModal\n isOpen={Boolean(ruleToDelete)}\n title={t('alerting.delete-rule-modal.title', 'Delete rule')}\n body={\n isSoftDeleteEnabled\n ? t(\n 'alerting.delete-rule-modal.with-soft-delete',\n 'Are you sure you want to delete this rule? This rule will be recoverable from the Recently deleted page by a user with an admin role.'\n )\n : t(\n 'alerting.delete-rule-modal.without-soft-delete',\n 'Deleting this rule will permanently remove it from your alert rule list. Are you sure you want to delete this rule?'\n )\n }\n confirmText={t('alerting.use-delete-modal.modal.confirmText-yes-delete', 'Yes, delete')}\n icon=\"exclamation-triangle\"\n onConfirm={deleteRule}\n onDismiss={dismissModal}\n />\n ),\n [ruleToDelete, deleteRule, dismissModal, isSoftDeleteEnabled]\n );\n\n return [modal, showModal, dismissModal];\n};\n","let _context: CanvasRenderingContext2D;\nconst cache = new Map<string, TextMetrics>();\nconst cacheLimit = 500;\nlet ctxFontStyle = '';\n\n/**\n * @internal\n */\nexport function getCanvasContext() {\n if (!_context) {\n _context = document.createElement('canvas').getContext('2d')!;\n }\n return _context;\n}\n\n/**\n * @beta\n */\nexport function measureText(text: string, fontSize: number, fontWeight = 400): TextMetrics {\n const fontStyle = `${fontWeight} ${fontSize}px 'Inter'`;\n const cacheKey = text + fontStyle;\n const fromCache = cache.get(cacheKey);\n\n if (fromCache) {\n return fromCache;\n }\n\n const context = getCanvasContext();\n\n if (ctxFontStyle !== fontStyle) {\n context.font = ctxFontStyle = fontStyle;\n }\n\n const metrics = context.measureText(text);\n\n if (cache.size === cacheLimit) {\n cache.clear();\n }\n\n cache.set(cacheKey, metrics);\n\n return metrics;\n}\n\n/**\n * @beta\n */\nexport function calculateFontSize(\n text: string,\n width: number,\n height: number,\n lineHeight: number,\n maxSize?: number,\n fontWeight?: number\n) {\n // calculate width in 14px\n const textSize = measureText(text, 14, fontWeight);\n // how much bigger than 14px can we make it while staying within our width constraints\n const fontSizeBasedOnWidth = (width / (textSize.width + 2)) * 14;\n const fontSizeBasedOnHeight = height / lineHeight;\n\n // final fontSize\n const optimalSize = Math.min(fontSizeBasedOnHeight, fontSizeBasedOnWidth);\n return Math.min(optimalSize, maxSize ?? optimalSize);\n}\n","import { DataFrame, formattedValueToString } from '@grafana/data';\n\nimport { instantQueryRawVirtualizedListData } from '../RawListContainer';\n\ntype instantQueryMetricList = { [index: string]: { [index: string]: instantQueryRawVirtualizedListData } };\n\nexport const RawPrometheusListItemEmptyValue = ' ';\n\n/**\n * transform dataFrame to instantQueryRawVirtualizedListData\n * @param dataFrame\n */\nexport const getRawPrometheusListItemsFromDataFrame = (dataFrame: DataFrame): instantQueryRawVirtualizedListData[] => {\n const metricList: instantQueryMetricList = {};\n const outputList: instantQueryRawVirtualizedListData[] = [];\n\n // Filter out time\n const newFields = dataFrame.fields.filter((field) => !['Time'].includes(field.name));\n\n // Get name from each series\n let metricNames: string[] = newFields.find((field) => field.name === '__name__')?.values ?? [];\n if (!metricNames.length && newFields.length && newFields[0].values.length) {\n // These results do not have series labels\n // Matching the native prometheus UI which appears to only show the permutations of the first field in the query result.\n metricNames = Array(newFields[0].values.length).fill('');\n }\n\n // Get everything that isn't the name from each series\n const metricLabels = dataFrame.fields.filter((field) => !['__name__'].includes(field.name));\n\n metricNames.forEach(function (metric: string, i: number) {\n metricList[metric] = {};\n const formattedMetric: instantQueryRawVirtualizedListData = metricList[metric][i] ?? {};\n\n for (const field of metricLabels) {\n const label = field.name;\n\n if (label !== 'Time') {\n // Initialize the objects\n if (typeof field?.display === 'function') {\n const value = field?.display(field.values[i]);\n if (!isNaN(value.numeric)) {\n formattedMetric[label] = value.numeric.toString(10);\n } else {\n const stringValue = formattedValueToString(value);\n\n if (stringValue) {\n formattedMetric[label] = stringValue;\n } else if (label.includes('Value #')) {\n formattedMetric[label] = RawPrometheusListItemEmptyValue;\n }\n }\n } else {\n console.warn('Field display method is missing!');\n }\n }\n }\n\n outputList.push({\n ...formattedMetric,\n __name__: metric,\n });\n });\n\n return outputList;\n};\n","import { ComparisonOperation } from '@grafana/schema';\n\n/**\n * Compare two values\n *\n * @internal -- not yet exported in `@grafana/data`\n */\nexport function compareValues(\n left: string | number | boolean | null | undefined,\n op: ComparisonOperation,\n right: string | number | boolean | null | undefined\n) {\n // Normalize null|undefined values\n if (left == null || right == null) {\n if (left == null) {\n left = 'null';\n }\n if (right == null) {\n right = 'null';\n }\n if (op === ComparisonOperation.GTE || op === ComparisonOperation.LTE) {\n op = ComparisonOperation.EQ; // check for equality\n }\n }\n\n switch (op) {\n case ComparisonOperation.EQ:\n return `${left}` === `${right}`;\n case ComparisonOperation.NEQ:\n return `${left}` !== `${right}`;\n case ComparisonOperation.GT:\n return left > right;\n case ComparisonOperation.GTE:\n return left >= right;\n case ComparisonOperation.LT:\n return left < right;\n case ComparisonOperation.LTE:\n return left <= right;\n default:\n return false;\n }\n}\n","import { Value } from 'slate';\nimport { Editor } from 'slate-react';\n\nimport { SearchFunctionType } from '../utils/searchFunctions';\n\n/**\n * @internal\n */\nexport type SearchFunction = (items: CompletionItem[], prefix: string) => CompletionItem[];\n\nexport interface CompletionItemGroup {\n /**\n * Label that will be displayed for all entries of this group.\n */\n label: string;\n\n /**\n * List of suggestions of this group.\n */\n items: CompletionItem[];\n\n /**\n * If true, match only by prefix (and not mid-word).\n * @deprecated use searchFunctionType instead\n */\n prefixMatch?: boolean;\n\n /**\n * Function type used to create auto-complete list\n * @alpha\n */\n searchFunctionType?: SearchFunctionType;\n\n /**\n * If true, do not filter items in this group based on the search.\n */\n skipFilter?: boolean;\n\n /**\n * If true, do not sort items.\n */\n skipSort?: boolean;\n}\n\nexport enum CompletionItemKind {\n GroupTitle = 'GroupTitle',\n}\n\n/**\n * @internal\n */\nexport type HighlightPart = {\n start: number;\n end: number;\n};\n\nexport interface CompletionItem {\n /**\n * The label of this completion item. By default\n * this is also the text that is inserted when selecting\n * this completion.\n */\n label: string;\n\n /**\n * The kind of this completion item. An icon is chosen\n * by the editor based on the kind.\n */\n kind?: CompletionItemKind | string;\n\n /**\n * A human-readable string with additional information\n * about this item, like type or symbol information.\n */\n detail?: string;\n\n /**\n * A human-readable string, can be Markdown, that represents a doc-comment.\n */\n documentation?: string;\n\n /**\n * A string that should be used when comparing this item\n * with other items. When `falsy` the `label` is used.\n * @deprecated use sortValue instead\n */\n sortText?: string;\n\n /**\n * A string or number that should be used when comparing this\n * item with other items. When `undefined` then `label` is used.\n * @alpha\n */\n sortValue?: string | number;\n\n /**\n * Parts of the label to be highlighted\n * @internal\n */\n highlightParts?: HighlightPart[];\n\n /**\n * A string that should be used when filtering a set of\n * completion items. When `falsy` the `label` is used.\n */\n filterText?: string;\n\n /**\n * A string or snippet that should be inserted in a document when selecting\n * this completion. When `falsy` the `label` is used.\n */\n insertText?: string;\n\n /**\n * Delete number of characters before the caret position,\n * by default the letters from the beginning of the word.\n */\n deleteBackwards?: number;\n\n /**\n * Number of steps to move after the insertion, can be negative.\n */\n move?: number;\n}\n\nexport interface TypeaheadOutput {\n context?: string;\n suggestions: CompletionItemGroup[];\n}\n\nexport interface TypeaheadInput {\n text: string;\n prefix: string;\n wrapperClasses: string[];\n labelKey?: string;\n value?: Value;\n editor?: Editor;\n}\n\nexport interface SuggestionsState {\n groupedItems: CompletionItemGroup[];\n typeaheadPrefix: string;\n typeaheadContext: string;\n typeaheadText: string;\n}\n","import { Plugin } from 'slate-react';\n\nconst getCopiedText = (textBlocks: string[], startOffset: number, endOffset: number) => {\n if (!textBlocks.length) {\n return undefined;\n }\n\n const excludingLastLineLength = textBlocks.slice(0, -1).join('').length + textBlocks.length - 1;\n return textBlocks.join('\\n').slice(startOffset, excludingLastLineLength + endOffset);\n};\n\n// Remove unicode special symbol - byte order mark (BOM), U+FEFF.\nconst removeBom = (str: string | undefined): string | undefined => {\n return str?.replace(/[\\uFEFF]/g, '');\n};\n\nexport function ClipboardPlugin(): Plugin {\n const clipboardPlugin: Plugin = {\n onCopy(event, editor, next) {\n event.preventDefault();\n\n const { document, selection } = editor.value;\n const {\n start: { offset: startOffset },\n end: { offset: endOffset },\n } = selection;\n const selectedBlocks = document\n .getLeafBlocksAtRange(selection)\n .toArray()\n .map((block) => block.text);\n\n const copiedText = removeBom(getCopiedText(selectedBlocks, startOffset, endOffset));\n if (copiedText && event.clipboardData) {\n event.clipboardData.setData('Text', copiedText);\n }\n\n return true;\n },\n\n onPaste(event, editor, next) {\n event.preventDefault();\n if (event.clipboardData) {\n const pastedValue = removeBom(event.clipboardData.getData('Text'));\n const lines = pastedValue?.split('\\n');\n\n if (lines && lines.length) {\n editor.insertText(lines[0]);\n for (const line of lines.slice(1)) {\n editor.splitBlock().insertText(line);\n }\n }\n }\n\n return true;\n },\n };\n\n return {\n ...clipboardPlugin,\n onCut(event, editor, next) {\n clipboardPlugin.onCopy!(event, editor, next);\n editor.deleteAtRange(editor.value.selection);\n\n return true;\n },\n };\n}\n","import { css, cx } from '@emotion/css';\nimport { MouseEventHandler } from 'react';\nimport * as React from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { GrafanaTheme2, isUnsignedPluginSignature, PanelPluginMeta, PluginState } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { IconButton, PluginSignatureBadge, useStyles2 } from '@grafana/ui';\nimport { SkeletonComponent, attachSkeleton } from '@grafana/ui/unstable';\nimport { PluginStateInfo } from 'app/features/plugins/components/PluginStateInfo';\n\ninterface Props {\n isCurrent: boolean;\n plugin: PanelPluginMeta;\n title: string;\n onClick: MouseEventHandler<HTMLDivElement>;\n onDelete?: () => void;\n disabled?: boolean;\n showBadge?: boolean;\n description?: string;\n}\n\nconst IMAGE_SIZE = 38;\n\nconst PanelTypeCardComponent = ({\n isCurrent,\n title,\n plugin,\n onClick,\n onDelete,\n disabled,\n showBadge,\n description,\n children,\n}: React.PropsWithChildren<Props>) => {\n const styles = useStyles2(getStyles);\n\n const isDisabled = disabled || plugin.state === PluginState.deprecated;\n const cssClass = cx({\n [styles.item]: true,\n [styles.itemDisabled]: isDisabled,\n [styles.current]: isCurrent,\n });\n\n return (\n // TODO: fix keyboard a11y\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n className={cssClass}\n aria-label={selectors.components.PluginVisualization.item(plugin.name)}\n data-testid={selectors.components.PluginVisualization.item(plugin.name)}\n onClick={isDisabled ? undefined : onClick}\n title={\n isCurrent ? t('panel.panel-type-card.title-click-to-close', 'Click again to close this section') : plugin.name\n }\n >\n <img className={cx(styles.img, { [styles.disabled]: isDisabled })} src={plugin.info.logos.small} alt=\"\" />\n\n <div className={cx(styles.itemContent, { [styles.disabled]: isDisabled })}>\n <div className={styles.name}>{title}</div>\n {description ? <span className={styles.description}>{description}</span> : null}\n {children}\n </div>\n {showBadge && (\n <div className={cx(styles.badge, { [styles.disabled]: isDisabled })}>\n <PanelPluginBadge plugin={plugin} />\n </div>\n )}\n {onDelete && (\n <IconButton\n name=\"trash-alt\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete();\n }}\n className={styles.deleteButton}\n aria-label={t(\n 'panel.panel-type-card.aria-label-delete-button-on-panel-type-card',\n 'Delete button on panel type card'\n )}\n tooltip={t('panel.panel-type-card.tooltip-delete', 'Delete')}\n />\n )}\n </div>\n );\n};\nPanelTypeCardComponent.displayName = 'PanelTypeCard';\n\ninterface SkeletonProps {\n hasDescription?: boolean;\n hasDelete?: boolean;\n}\n\nconst PanelTypeCardSkeleton: SkeletonComponent<React.PropsWithChildren<SkeletonProps>> = ({\n children,\n hasDescription,\n hasDelete,\n rootProps,\n}) => {\n const styles = useStyles2(getStyles);\n const skeletonStyles = useStyles2(getSkeletonStyles);\n return (\n <div className={styles.item} {...rootProps}>\n <Skeleton className={cx(styles.img, skeletonStyles.image)} width={IMAGE_SIZE} height={IMAGE_SIZE} />\n\n <div className={styles.itemContent}>\n <div className={styles.name}>\n <Skeleton width={160} />\n </div>\n {hasDescription ? <Skeleton containerClassName={styles.description} width={80} /> : null}\n {children}\n </div>\n {hasDelete && (\n <Skeleton containerClassName={cx(styles.deleteButton, skeletonStyles.deleteButton)} width={16} height={16} />\n )}\n </div>\n );\n};\n\nexport const PanelTypeCard = attachSkeleton(PanelTypeCardComponent, PanelTypeCardSkeleton);\n\nconst getSkeletonStyles = () => {\n return {\n deleteButton: css({\n lineHeight: 1,\n }),\n image: css({\n lineHeight: 1,\n }),\n };\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n item: css({\n position: 'relative',\n display: 'flex',\n flexShrink: 0,\n cursor: 'pointer',\n background: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z1,\n border: `1px solid ${theme.colors.background.secondary}`,\n alignItems: 'center',\n padding: theme.spacing(1),\n width: '100%',\n overflow: 'hidden',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: theme.transitions.create(['background'], {\n duration: theme.transitions.duration.short,\n }),\n },\n\n '&:hover': {\n background: theme.colors.emphasize(theme.colors.background.secondary, 0.03),\n },\n }),\n itemContent: css({\n overflow: 'hidden',\n position: 'relative',\n padding: theme.spacing(0, 1),\n }),\n itemDisabled: css({\n cursor: 'default',\n\n '&, &:hover': {\n background: theme.colors.action.disabledBackground,\n },\n }),\n current: css({\n label: 'currentVisualizationItem',\n border: `1px solid ${theme.colors.primary.border}`,\n background: theme.colors.action.selected,\n }),\n disabled: css({\n opacity: 0.6,\n filter: 'grayscale(1)',\n cursor: 'default',\n pointerEvents: 'none',\n }),\n name: css({\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n fontSize: theme.typography.size.sm,\n fontWeight: theme.typography.fontWeightMedium,\n width: '100%',\n }),\n description: css({\n display: 'block',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightLight,\n width: '100%',\n maxHeight: '4.5em',\n }),\n img: css({\n maxHeight: IMAGE_SIZE,\n width: IMAGE_SIZE,\n display: 'flex',\n alignItems: 'center',\n }),\n badge: css({\n background: theme.colors.background.primary,\n }),\n deleteButton: css({\n cursor: 'pointer',\n marginLeft: 'auto',\n }),\n };\n};\n\ninterface PanelPluginBadgeProps {\n plugin: PanelPluginMeta;\n}\n\nconst PanelPluginBadge = ({ plugin }: PanelPluginBadgeProps) => {\n if (isUnsignedPluginSignature(plugin.signature)) {\n return <PluginSignatureBadge status={plugin.signature} />;\n }\n\n return <PluginStateInfo state={plugin.state} />;\n};\n\nPanelPluginBadge.displayName = 'PanelPluginBadge';\n","/* Javascript plotting library for jQuery, version 0.8.3.\n\nCopyright (c) 2007-2014 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\n*/\n\n// first an inline dependency, jquery.colorhelpers.js, we inline it here\n// for convenience\n\n/* Plugin for jQuery for working with colors.\n *\n * Version 1.1.\n *\n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n * $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n * var c = $.color.extract($(\"#mydiv\"), 'background-color');\n * console.log(c.r, c.g, c.b, c.a);\n * $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */\n(function($) { $.color = {}; $.color.make = function(r, g, b, a) { var o = {}; o.r = r || 0; o.g = g || 0; o.b = b || 0; o.a = a != null ? a : 1; o.add = function(c, d) { for (var i = 0; i < c.length; ++i)o[c.charAt(i)] += d; return o.normalize() }; o.scale = function(c, f) { for (var i = 0; i < c.length; ++i)o[c.charAt(i)] *= f; return o.normalize() }; o.toString = function() { if (o.a >= 1) { return \"rgb(\" + [o.r, o.g, o.b].join(\",\") + \")\" } else { return \"rgba(\" + [o.r, o.g, o.b, o.a].join(\",\") + \")\" } }; o.normalize = function() { function clamp(min, value, max) { return value < min ? min : value > max ? max : value } o.r = clamp(0, parseInt(o.r), 255); o.g = clamp(0, parseInt(o.g), 255); o.b = clamp(0, parseInt(o.b), 255); o.a = clamp(0, o.a, 1); return o }; o.clone = function() { return $.color.make(o.r, o.b, o.g, o.a) }; return o.normalize() }; $.color.extract = function(elem, css) { var c; do { c = elem.css(css).toLowerCase(); if (c != \"\" && c != \"transparent\") break; elem = elem.parent() } while (elem.length && !$.nodeName(elem.get(0), \"body\")); if (c == \"rgba(0, 0, 0, 0)\") c = \"transparent\"; return $.color.parse(c) }; $.color.parse = function(str) { var res, m = $.color.make; if (res = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(str)) return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10)); if (res = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str)) return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4])); if (res = /rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(str)) return m(parseFloat(res[1]) * 2.55, parseFloat(res[2]) * 2.55, parseFloat(res[3]) * 2.55); if (res = /rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str)) return m(parseFloat(res[1]) * 2.55, parseFloat(res[2]) * 2.55, parseFloat(res[3]) * 2.55, parseFloat(res[4])); if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)) return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)) return m(parseInt(res[1] + res[1], 16), parseInt(res[2] + res[2], 16), parseInt(res[3] + res[3], 16)); var name = $.trim(str).toLowerCase(); if (name == \"transparent\") return m(255, 255, 255, 0); else { res = lookupColors[name] || [0, 0, 0]; return m(res[0], res[1], res[2]) } }; var lookupColors = { aqua: [0, 255, 255], azure: [240, 255, 255], beige: [245, 245, 220], black: [0, 0, 0], blue: [0, 0, 255], brown: [165, 42, 42], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgrey: [169, 169, 169], darkgreen: [0, 100, 0], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkviolet: [148, 0, 211], fuchsia: [255, 0, 255], gold: [255, 215, 0], green: [0, 128, 0], indigo: [75, 0, 130], khaki: [240, 230, 140], lightblue: [173, 216, 230], lightcyan: [224, 255, 255], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightyellow: [255, 255, 224], lime: [0, 255, 0], magenta: [255, 0, 255], maroon: [128, 0, 0], navy: [0, 0, 128], olive: [128, 128, 0], orange: [255, 165, 0], pink: [255, 192, 203], purple: [128, 0, 128], violet: [128, 0, 128], red: [255, 0, 0], silver: [192, 192, 192], white: [255, 255, 255], yellow: [255, 255, 0] } })(jQuery);\n\n// the actual Flot code\n(function($) {\n\n // Cache the prototype hasOwnProperty for faster access\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n // A shim to provide 'detach' to jQuery versions prior to 1.4. Using a DOM\n // operation produces the same effect as detach, i.e. removing the element\n // without touching its jQuery data.\n\n // Do not merge this into Flot 0.9, since it requires jQuery 1.4.4+.\n\n if (!$.fn.detach) {\n $.fn.detach = function() {\n return this.each(function() {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n });\n };\n }\n\n ///////////////////////////////////////////////////////////////////////////\n // The Canvas object is a wrapper around an HTML5 <canvas> tag.\n //\n // @constructor\n // @param {string} cls List of classes to apply to the canvas.\n // @param {element} container Element onto which to append the canvas.\n //\n // Requiring a container is a little iffy, but unfortunately canvas\n // operations don't work unless the canvas is attached to the DOM.\n\n function Canvas(cls, container) {\n\n var element = container.children(\".\" + cls)[0];\n\n if (element == null) {\n\n element = document.createElement(\"canvas\");\n element.className = cls;\n\n $(element).css({ direction: \"ltr\", position: \"absolute\", left: 0, top: 0 })\n .appendTo(container);\n\n // If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas\n\n if (!element.getContext) {\n if (window.G_vmlCanvasManager) {\n element = window.G_vmlCanvasManager.initElement(element);\n } else {\n throw new Error(\"Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.\");\n }\n }\n }\n\n this.element = element;\n\n var context = this.context = element.getContext(\"2d\");\n\n // Determine the screen's ratio of physical to device-independent\n // pixels. This is the ratio between the canvas width that the browser\n // advertises and the number of pixels actually present in that space.\n\n // The iPhone 4, for example, has a device-independent width of 320px,\n // but its screen is actually 640px wide. It therefore has a pixel\n // ratio of 2, while most normal devices have a ratio of 1.\n\n var devicePixelRatio = window.devicePixelRatio || 1,\n backingStoreRatio =\n context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio || 1;\n\n this.pixelRatio = devicePixelRatio / backingStoreRatio;\n\n // Size the canvas to match the internal dimensions of its container\n\n this.resize(container.width(), container.height());\n\n // Collection of HTML div layers for text overlaid onto the canvas\n\n this.textContainer = null;\n this.text = {};\n\n // Cache of text fragments and metrics, so we can avoid expensively\n // re-calculating them when the plot is re-rendered in a loop.\n\n this._textCache = {};\n this._textSizeCache = window.flotTextSizeCache = window.flotTextSizeCache || {};\n }\n\n // Resizes the canvas to the given dimensions.\n //\n // @param {number} width New width of the canvas, in pixels.\n // @param {number} width New height of the canvas, in pixels.\n\n Canvas.prototype.resize = function(width, height) {\n\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid dimensions for plot, width = \" + width + \", height = \" + height);\n }\n\n var element = this.element,\n context = this.context,\n pixelRatio = this.pixelRatio;\n\n // Resize the canvas, increasing its density based on the display's\n // pixel ratio; basically giving it more pixels without increasing the\n // size of its element, to take advantage of the fact that retina\n // displays have that many more pixels in the same advertised space.\n\n // Resizing should reset the state (excanvas seems to be buggy though)\n\n if (this.width != width) {\n element.width = width * pixelRatio;\n element.style.width = width + \"px\";\n this.width = width;\n }\n\n if (this.height != height) {\n element.height = height * pixelRatio;\n element.style.height = height + \"px\";\n this.height = height;\n }\n\n // Save the context, so we can reset in case we get replotted. The\n // restore ensure that we're really back at the initial state, and\n // should be safe even if we haven't saved the initial state yet.\n\n context.restore();\n context.save();\n\n // Scale the coordinate space to match the display density; so even though we\n // may have twice as many pixels, we still want lines and other drawing to\n // appear at the same size; the extra pixels will just make them crisper.\n\n context.scale(pixelRatio, pixelRatio);\n };\n\n // Clears the entire canvas area, not including any overlaid HTML text\n\n Canvas.prototype.clear = function() {\n this.context.clearRect(0, 0, this.width, this.height);\n };\n\n // Finishes rendering the canvas, including managing the text overlay.\n\n Canvas.prototype.render = function() {\n\n var cache = this._textCache;\n\n // For each text layer, add elements marked as active that haven't\n // already been rendered, and remove those that are no longer active.\n\n for (var layerKey in cache) {\n if (hasOwnProperty.call(cache, layerKey)) {\n\n var layer = this.getTextLayer(layerKey),\n layerCache = cache[layerKey];\n\n layer.hide();\n\n for (var styleKey in layerCache) {\n if (hasOwnProperty.call(layerCache, styleKey)) {\n var styleCache = layerCache[styleKey];\n for (var key in styleCache) {\n if (hasOwnProperty.call(styleCache, key)) {\n\n var positions = styleCache[key].positions;\n\n for (var i = 0, position; position = positions[i]; i++) {\n if (position.active) {\n if (!position.rendered) {\n layer.append(position.element);\n position.rendered = true;\n }\n } else {\n positions.splice(i--, 1);\n if (position.rendered) {\n position.element.detach();\n }\n }\n }\n\n if (positions.length == 0) {\n delete styleCache[key];\n }\n }\n }\n }\n }\n\n layer.show();\n }\n }\n };\n\n // Creates (if necessary) and returns the text overlay container.\n //\n // @param {string} classes String of space-separated CSS classes used to\n // uniquely identify the text layer.\n // @return {object} The jQuery-wrapped text-layer div.\n\n Canvas.prototype.getTextLayer = function(classes) {\n\n var layer = this.text[classes];\n\n // Create the text layer if it doesn't exist\n\n if (layer == null) {\n\n // Create the text layer container, if it doesn't exist\n\n if (this.textContainer == null) {\n this.textContainer = $(\"<div class='flot-text flot-temp-elem'></div>\")\n .css({\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n 'font-size': \"smaller\",\n color: \"#545454\"\n })\n .insertAfter(this.element);\n }\n\n layer = this.text[classes] = $(\"<div></div>\")\n .addClass(classes)\n .css({\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n })\n .appendTo(this.textContainer);\n }\n\n return layer;\n };\n\n // Creates (if necessary) and returns a text info object.\n //\n // The object looks like this:\n //\n // {\n // width: Width of the text's wrapper div.\n // height: Height of the text's wrapper div.\n // element: The jQuery-wrapped HTML div containing the text.\n // positions: Array of positions at which this text is drawn.\n // }\n //\n // The positions array contains objects that look like this:\n //\n // {\n // active: Flag indicating whether the text should be visible.\n // rendered: Flag indicating whether the text is currently visible.\n // element: The jQuery-wrapped HTML div containing the text.\n // x: X coordinate at which to draw the text.\n // y: Y coordinate at which to draw the text.\n // }\n //\n // Each position after the first receives a clone of the original element.\n //\n // The idea is that that the width, height, and general 'identity' of the\n // text is constant no matter where it is placed; the placements are a\n // secondary property.\n //\n // Canvas maintains a cache of recently-used text info objects; getTextInfo\n // either returns the cached element or creates a new entry.\n //\n // @param {string} layer A string of space-separated CSS classes uniquely\n // identifying the layer containing this text.\n // @param {string} text Text string to retrieve info for.\n // @param {(string|object)=} font Either a string of space-separated CSS\n // classes or a font-spec object, defining the text's font and style.\n // @param {number=} angle Angle at which to rotate the text, in degrees.\n // Angle is currently unused, it will be implemented in the future.\n // @param {number=} width Maximum width of the text before it wraps.\n // @return {object} a text info object.\n\n Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n var textStyle, layerCache, styleCache, info;\n\n // Cast the value to a string, in case we were given a number or such\n\n text = \"\" + text;\n\n // If the font is a font-spec object, generate a CSS font definition\n\n if (typeof font === \"object\") {\n textStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px/\" + font.lineHeight + \"px \" + font.family;\n } else {\n textStyle = font;\n }\n\n // Retrieve (or create) the cache for the text's layer and styles\n\n layerCache = this._textCache[layer];\n\n if (layerCache == null) {\n layerCache = this._textCache[layer] = {};\n }\n\n styleCache = layerCache[textStyle];\n\n if (styleCache == null) {\n styleCache = layerCache[textStyle] = {};\n }\n\n info = styleCache[text];\n\n // If we can't find a matching element in our cache, create a new one\n\n if (info == null) {\n\n var element = $(\"<div></div>\").html(text)\n .css({\n position: \"absolute\",\n 'max-width': width,\n top: -9999\n })\n .appendTo(this.getTextLayer(layer));\n\n if (typeof font === \"object\") {\n element.css({\n font: textStyle,\n color: font.color\n });\n } else if (typeof font === \"string\") {\n element.addClass(font);\n }\n\n info = styleCache[text] = { element: element, positions: [] };\n\n var size = this._textSizeCache[text];\n if (size) {\n info.width = size.width;\n info.height = size.height;\n } else {\n info.width = element.outerWidth(true);\n info.height = element.outerHeight(true);\n this._textSizeCache[text] = { width: info.width, height: info.height };\n }\n element.detach();\n }\n\n return info;\n };\n\n // Adds a text string to the canvas text overlay.\n //\n // The text isn't drawn immediately; it is marked as rendering, which will\n // result in its addition to the canvas on the next render pass.\n //\n // @param {string} layer A string of space-separated CSS classes uniquely\n // identifying the layer containing this text.\n // @param {number} x X coordinate at which to draw the text.\n // @param {number} y Y coordinate at which to draw the text.\n // @param {string} text Text string to draw.\n // @param {(string|object)=} font Either a string of space-separated CSS\n // classes or a font-spec object, defining the text's font and style.\n // @param {number=} angle Angle at which to rotate the text, in degrees.\n // Angle is currently unused, it will be implemented in the future.\n // @param {number=} width Maximum width of the text before it wraps.\n // @param {string=} halign Horizontal alignment of the text; either \"left\",\n // \"center\" or \"right\".\n // @param {string=} valign Vertical alignment of the text; either \"top\",\n // \"middle\" or \"bottom\".\n\n Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n var info = this.getTextInfo(layer, text, font, angle, width),\n positions = info.positions;\n\n // Tweak the div's position to match the text's alignment\n\n if (halign == \"center\") {\n x -= info.width / 2;\n } else if (halign == \"right\") {\n x -= info.width;\n }\n\n if (valign == \"middle\") {\n y -= info.height / 2;\n } else if (valign == \"bottom\") {\n y -= info.height;\n }\n\n // Determine whether this text already exists at this position.\n // If so, mark it for inclusion in the next render pass.\n\n for (var i = 0, position; position = positions[i]; i++) {\n if (position.x == x && position.y == y) {\n position.active = true;\n return;\n }\n }\n\n // If the text doesn't exist at this position, create a new entry\n\n // For the very first position we'll re-use the original element,\n // while for subsequent ones we'll clone it.\n\n position = {\n active: true,\n rendered: false,\n element: positions.length ? info.element.clone() : info.element,\n x: x,\n y: y\n };\n\n positions.push(position);\n\n // Move the element to its final position within the container\n\n position.element.css({\n top: Math.round(y),\n left: Math.round(x),\n 'text-align': halign\t// In case the text wraps\n });\n };\n\n // Removes one or more text strings from the canvas text overlay.\n //\n // If no parameters are given, all text within the layer is removed.\n //\n // Note that the text is not immediately removed; it is simply marked as\n // inactive, which will result in its removal on the next render pass.\n // This avoids the performance penalty for 'clear and redraw' behavior,\n // where we potentially get rid of all text on a layer, but will likely\n // add back most or all of it later, as when redrawing axes, for example.\n //\n // @param {string} layer A string of space-separated CSS classes uniquely\n // identifying the layer containing this text.\n // @param {number=} x X coordinate of the text.\n // @param {number=} y Y coordinate of the text.\n // @param {string=} text Text string to remove.\n // @param {(string|object)=} font Either a string of space-separated CSS\n // classes or a font-spec object, defining the text's font and style.\n // @param {number=} angle Angle at which the text is rotated, in degrees.\n // Angle is currently unused, it will be implemented in the future.\n\n Canvas.prototype.removeText = function(layer, x, y, text, font, angle) {\n if (text == null) {\n var layerCache = this._textCache[layer];\n if (layerCache != null) {\n for (var styleKey in layerCache) {\n if (hasOwnProperty.call(layerCache, styleKey)) {\n var styleCache = layerCache[styleKey];\n for (var key in styleCache) {\n if (hasOwnProperty.call(styleCache, key)) {\n var positions = styleCache[key].positions;\n for (var i = 0, position; position = positions[i]; i++) {\n position.active = false;\n }\n }\n }\n }\n }\n }\n } else {\n var positions = this.getTextInfo(layer, text, font, angle).positions;\n for (var i = 0, position; position = positions[i]; i++) {\n if (position.x == x && position.y == y) {\n position.active = false;\n }\n }\n }\n };\n\n ///////////////////////////////////////////////////////////////////////////\n // The top-level container for the entire plot.\n\n function Plot(placeholder, data_, options_, plugins) {\n // data is on the form:\n // [ series1, series2 ... ]\n // where series is either just the data as [ [x1, y1], [x2, y2], ... ]\n // or { data: [ [x1, y1], [x2, y2], ... ], label: \"some label\", ... }\n\n var series = [],\n options = {\n // the color theme used for graphs\n colors: [\"#edc240\", \"#afd8f8\", \"#cb4b4b\", \"#4da74d\", \"#9440ed\"],\n legend: {\n show: true,\n noColumns: 1, // number of colums in legend table\n labelFormatter: null, // fn: string -> string\n labelBoxBorderColor: \"#ccc\", // border color for the little label boxes\n container: null, // container (as jQuery object) to put legend in, null means default on top of graph\n position: \"ne\", // position of default legend container within plot\n margin: 5, // distance from grid edge to default legend container within plot\n backgroundColor: null, // null means auto-detect\n backgroundOpacity: 0.85, // set to 0 to avoid background\n sorted: null // default to no legend sorting\n },\n xaxis: {\n show: null, // null = auto-detect, true = always, false = never\n position: \"bottom\", // or \"top\"\n mode: null, // null or \"time\"\n font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: \"italic\", weight: \"bold\", family: \"sans-serif\", variant: \"small-caps\" }\n color: null, // base color, labels, ticks\n tickColor: null, // possibly different color of ticks, e.g. \"rgba(0,0,0,0.15)\"\n transform: null, // null or f: number -> number to transform axis\n inverseTransform: null, // if transform is set, this should be the inverse function\n min: null, // min. value to show, null means set automatically\n max: null, // max. value to show, null means set automatically\n autoscaleMargin: null, // margin in % to add if auto-setting min/max\n ticks: null, // either [1, 3] or [[1, \"a\"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks\n tickFormatter: null, // fn: number -> string\n labelWidth: null, // size of tick labels in pixels\n labelHeight: null,\n reserveSpace: null, // whether to reserve space even if axis isn't shown\n tickLength: null, // size in pixels of ticks, or \"full\" for whole line\n alignTicksWithAxis: null, // axis number or null for no sync\n tickDecimals: null, // no. of decimals, null means auto\n tickSize: null, // number or [number, \"unit\"]\n minTickSize: null // number or [number, \"unit\"]\n },\n yaxis: {\n autoscaleMargin: 0.02,\n position: \"left\" // or \"right\"\n },\n xaxes: [],\n yaxes: [],\n series: {\n points: {\n show: false,\n radius: 3,\n lineWidth: 2, // in pixels\n fill: true,\n fillColor: \"#ffffff\",\n symbol: \"circle\" // or callback\n },\n lines: {\n // we don't put in show: false so we can see\n // whether lines were actively disabled\n lineWidth: 2, // in pixels\n fill: false,\n fillColor: null,\n steps: false\n // Omit 'zero', so we can later default its value to\n // match that of the 'fill' option.\n },\n bars: {\n show: false,\n lineWidth: 2, // in pixels\n barWidth: 1, // in units of the x axis\n fill: true,\n fillColor: null,\n align: \"left\", // \"left\", \"right\", or \"center\"\n horizontal: false,\n zero: true\n },\n shadowSize: 3,\n highlightColor: null\n },\n grid: {\n show: true,\n aboveData: false,\n color: \"#545454\", // primary color used for outline and labels\n backgroundColor: null, // null for transparent, else color\n borderColor: null, // set if different from the grid color\n tickColor: null, // color for the ticks, e.g. \"rgba(0,0,0,0.15)\"\n margin: 0, // distance from the canvas edge to the grid\n labelMargin: 5, // in pixels\n eventSectionHeight: 0, // space for event section\n axisMargin: 8, // in pixels\n borderWidth: 2, // in pixels\n minBorderMargin: null, // in pixels, null means taken from points radius\n markings: null, // array of ranges or fn: axes -> array of ranges\n markingsColor: \"#f4f4f4\",\n markingsLineWidth: 2,\n // interactive stuff\n clickable: false,\n hoverable: false,\n autoHighlight: true, // highlight in case mouse is near\n mouseActiveRadius: 10 // how far the mouse can be away to activate an item\n },\n interaction: {\n redrawOverlayInterval: 1000 / 60 // time between updates, -1 means in same flow\n },\n hooks: {}\n },\n surface = null, // the canvas for the plot itself\n overlay = null, // canvas for interactive stuff on top of plot\n eventHolder = null, // jQuery object that events should be bound to\n ctx = null, octx = null,\n xaxes = [], yaxes = [],\n plotOffset = { left: 0, right: 0, top: 0, bottom: 0 },\n plotWidth = 0, plotHeight = 0,\n hooks = {\n processOptions: [],\n processRawData: [],\n processDatapoints: [],\n processOffset: [],\n processRange: [],\n drawBackground: [],\n drawSeries: [],\n draw: [],\n bindEvents: [],\n drawOverlay: [],\n shutdown: []\n },\n plot = this;\n\n // public functions\n plot.setData = setData;\n plot.setupGrid = setupGrid;\n plot.draw = draw;\n plot.getPlaceholder = function() { return placeholder; };\n plot.getCanvas = function() { return surface.element; };\n plot.getPlotOffset = function() { return plotOffset; };\n plot.width = function() { return plotWidth; };\n plot.height = function() { return plotHeight; };\n plot.offset = function() {\n var o = eventHolder.offset();\n o.left += plotOffset.left;\n o.top += plotOffset.top;\n return o;\n };\n plot.getData = function() { return series; };\n plot.getAxes = function() {\n var res = {}, i;\n $.each(xaxes.concat(yaxes), function(_, axis) {\n if (axis)\n res[axis.direction + (axis.n != 1 ? axis.n : \"\") + \"axis\"] = axis;\n });\n return res;\n };\n plot.getXAxes = function() { return xaxes; };\n plot.getYAxes = function() { return yaxes; };\n plot.c2p = canvasToAxisCoords;\n plot.p2c = axisToCanvasCoords;\n plot.getOptions = function() { return options; };\n plot.highlight = highlight;\n plot.unhighlight = unhighlight;\n plot.triggerRedrawOverlay = triggerRedrawOverlay;\n plot.pointOffset = function(point) {\n return {\n left: parseInt(xaxes[axisNumber(point, \"x\") - 1].p2c(+point.x) + plotOffset.left, 10),\n top: parseInt(yaxes[axisNumber(point, \"y\") - 1].p2c(+point.y) + plotOffset.top, 10)\n };\n };\n plot.shutdown = shutdown;\n plot.destroy = function() {\n shutdown();\n placeholder.removeData(\"plot\").empty();\n\n series = [];\n options = null;\n surface = null;\n overlay = null;\n eventHolder = null;\n ctx = null;\n octx = null;\n xaxes = [];\n yaxes = [];\n hooks = null;\n highlights = [];\n plot = null;\n };\n plot.resize = function() {\n var width = placeholder.width(),\n height = placeholder.height();\n surface.resize(width, height);\n overlay.resize(width, height);\n };\n\n // public attributes\n plot.hooks = hooks;\n\n // initialize\n initPlugins(plot);\n parseOptions(options_);\n setupCanvases();\n setData(data_);\n setupGrid();\n draw();\n bindEvents();\n\n\n function executeHooks(hook, args) {\n args = [plot].concat(args);\n for (var i = 0; i < hook.length; ++i)\n hook[i].apply(this, args);\n }\n\n function initPlugins() {\n\n // References to key classes, allowing plugins to modify them\n\n var classes = {\n Canvas: Canvas\n };\n\n for (var i = 0; i < plugins.length; ++i) {\n var p = plugins[i];\n p.init(plot, classes);\n if (p.options)\n $.extend(true, options, p.options);\n }\n }\n\n function parseOptions(opts) {\n\n $.extend(true, options, opts);\n\n // $.extend merges arrays, rather than replacing them. When less\n // colors are provided than the size of the default palette, we\n // end up with those colors plus the remaining defaults, which is\n // not expected behavior; avoid it by replacing them here.\n\n if (opts && opts.colors) {\n options.colors = opts.colors;\n }\n\n if (options.xaxis.color == null)\n options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n if (options.yaxis.color == null)\n options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility\n options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;\n if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility\n options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;\n\n if (options.grid.borderColor == null)\n options.grid.borderColor = options.grid.color;\n if (options.grid.tickColor == null)\n options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n // Fill in defaults for axis options, including any unspecified\n // font-spec fields, if a font-spec was provided.\n\n // If no x/y axis options were provided, create one of each anyway,\n // since the rest of the code assumes that they exist.\n\n var i, axisOptions, axisCount,\n fontSize = placeholder.css(\"font-size\"),\n fontSizeDefault = fontSize ? +fontSize.replace(\"px\", \"\") : 13,\n fontDefaults = {\n style: placeholder.css(\"font-style\"),\n size: Math.round(0.8 * fontSizeDefault),\n variant: placeholder.css(\"font-variant\"),\n weight: placeholder.css(\"font-weight\"),\n family: placeholder.css(\"font-family\")\n };\n\n axisCount = options.xaxes.length || 1;\n for (i = 0; i < axisCount; ++i) {\n\n axisOptions = options.xaxes[i];\n if (axisOptions && !axisOptions.tickColor) {\n axisOptions.tickColor = axisOptions.color;\n }\n\n axisOptions = $.extend(true, {}, options.xaxis, axisOptions);\n options.xaxes[i] = axisOptions;\n\n if (axisOptions.font) {\n axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n if (!axisOptions.font.color) {\n axisOptions.font.color = axisOptions.color;\n }\n if (!axisOptions.font.lineHeight) {\n axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);\n }\n }\n }\n\n axisCount = options.yaxes.length || 1;\n for (i = 0; i < axisCount; ++i) {\n\n axisOptions = options.yaxes[i];\n if (axisOptions && !axisOptions.tickColor) {\n axisOptions.tickColor = axisOptions.color;\n }\n\n axisOptions = $.extend(true, {}, options.yaxis, axisOptions);\n options.yaxes[i] = axisOptions;\n\n if (axisOptions.font) {\n axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n if (!axisOptions.font.color) {\n axisOptions.font.color = axisOptions.color;\n }\n if (!axisOptions.font.lineHeight) {\n axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);\n }\n }\n }\n\n // backwards compatibility, to be removed in future\n if (options.xaxis.noTicks && options.xaxis.ticks == null)\n options.xaxis.ticks = options.xaxis.noTicks;\n if (options.yaxis.noTicks && options.yaxis.ticks == null)\n options.yaxis.ticks = options.yaxis.noTicks;\n if (options.x2axis) {\n options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);\n options.xaxes[1].position = \"top\";\n // Override the inherit to allow the axis to auto-scale\n if (options.x2axis.min == null) {\n options.xaxes[1].min = null;\n }\n if (options.x2axis.max == null) {\n options.xaxes[1].max = null;\n }\n }\n if (options.y2axis) {\n options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);\n options.yaxes[1].position = \"right\";\n // Override the inherit to allow the axis to auto-scale\n if (options.y2axis.min == null) {\n options.yaxes[1].min = null;\n }\n if (options.y2axis.max == null) {\n options.yaxes[1].max = null;\n }\n }\n if (options.grid.coloredAreas)\n options.grid.markings = options.grid.coloredAreas;\n if (options.grid.coloredAreasColor)\n options.grid.markingsColor = options.grid.coloredAreasColor;\n if (options.lines)\n $.extend(true, options.series.lines, options.lines);\n if (options.points)\n $.extend(true, options.series.points, options.points);\n if (options.bars)\n $.extend(true, options.series.bars, options.bars);\n if (options.shadowSize != null)\n options.series.shadowSize = options.shadowSize;\n if (options.highlightColor != null)\n options.series.highlightColor = options.highlightColor;\n\n // save options on axes for future reference\n for (i = 0; i < options.xaxes.length; ++i)\n getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];\n for (i = 0; i < options.yaxes.length; ++i)\n getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];\n\n // add hooks from options\n for (var n in hooks)\n if (options.hooks[n] && options.hooks[n].length)\n hooks[n] = hooks[n].concat(options.hooks[n]);\n\n executeHooks(hooks.processOptions, [options]);\n }\n\n function setData(d) {\n series = parseData(d);\n fillInSeriesOptions();\n processData();\n }\n\n function parseData(d) {\n var res = [];\n for (var i = 0; i < d.length; ++i) {\n var s = $.extend(true, {}, options.series);\n\n if (d[i].data != null) {\n s.data = d[i].data; // move the data instead of deep-copy\n delete d[i].data;\n\n $.extend(true, s, d[i]);\n\n d[i].data = s.data;\n }\n else\n s.data = d[i];\n res.push(s);\n }\n\n return res;\n }\n\n function axisNumber(obj, coord) {\n var a = obj[coord + \"axis\"];\n if (typeof a == \"object\") // if we got a real axis, extract number\n a = a.n;\n if (typeof a != \"number\")\n a = 1; // default to first axis\n return a;\n }\n\n function allAxes() {\n // return flat array without annoying null entries\n return $.grep(xaxes.concat(yaxes), function(a) { return a; });\n }\n\n function canvasToAxisCoords(pos) {\n // return an object with x/y corresponding to all used axes\n var res = {}, i, axis;\n for (i = 0; i < xaxes.length; ++i) {\n axis = xaxes[i];\n if (axis)\n res[\"x\" + axis.n] = axis.c2p(pos.left);\n }\n\n for (i = 0; i < yaxes.length; ++i) {\n axis = yaxes[i];\n if (axis)\n res[\"y\" + axis.n] = axis.c2p(pos.top);\n }\n\n if (res.x1 !== undefined)\n res.x = res.x1;\n if (res.y1 !== undefined)\n res.y = res.y1;\n\n return res;\n }\n\n function axisToCanvasCoords(pos) {\n // get canvas coords from the first pair of x/y found in pos\n var res = {}, i, axis, key;\n\n for (i = 0; i < xaxes.length; ++i) {\n axis = xaxes[i];\n if (axis && axis.used) {\n key = \"x\" + axis.n;\n if (pos[key] == null && axis.n == 1)\n key = \"x\";\n\n if (pos[key] != null) {\n res.left = axis.p2c(pos[key]);\n break;\n }\n }\n }\n\n for (i = 0; i < yaxes.length; ++i) {\n axis = yaxes[i];\n if (axis && axis.used) {\n key = \"y\" + axis.n;\n if (pos[key] == null && axis.n == 1)\n key = \"y\";\n\n if (pos[key] != null) {\n res.top = axis.p2c(pos[key]);\n break;\n }\n }\n }\n\n return res;\n }\n\n function getOrCreateAxis(axes, number) {\n if (!axes[number - 1])\n axes[number - 1] = {\n n: number, // save the number for future reference\n direction: axes == xaxes ? \"x\" : \"y\",\n options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)\n };\n\n return axes[number - 1];\n }\n\n function fillInSeriesOptions() {\n\n var neededColors = series.length, maxIndex = -1, i;\n\n // Subtract the number of series that already have fixed colors or\n // color indexes from the number that we still need to generate.\n\n for (i = 0; i < series.length; ++i) {\n var sc = series[i].color;\n if (sc != null) {\n neededColors--;\n if (typeof sc == \"number\" && sc > maxIndex) {\n maxIndex = sc;\n }\n }\n }\n\n // If any of the series have fixed color indexes, then we need to\n // generate at least as many colors as the highest index.\n\n if (neededColors <= maxIndex) {\n neededColors = maxIndex + 1;\n }\n\n // Generate all the colors, using first the option colors and then\n // variations on those colors once they're exhausted.\n\n var c, colors = [], colorPool = options.colors,\n colorPoolSize = colorPool.length, variation = 0;\n\n for (i = 0; i < neededColors; i++) {\n\n c = $.color.parse(colorPool[i % colorPoolSize] || \"#666\");\n\n // Each time we exhaust the colors in the pool we adjust\n // a scaling factor used to produce more variations on\n // those colors. The factor alternates negative/positive\n // to produce lighter/darker colors.\n\n // Reset the variation after every few cycles, or else\n // it will end up producing only white or black colors.\n\n if (i % colorPoolSize == 0 && i) {\n if (variation >= 0) {\n if (variation < 0.5) {\n variation = -variation - 0.2;\n } else variation = 0;\n } else variation = -variation;\n }\n\n colors[i] = c.scale('rgb', 1 + variation);\n }\n\n // Finalize the series options, filling in their colors\n\n var colori = 0, s;\n for (i = 0; i < series.length; ++i) {\n s = series[i];\n\n // assign colors\n if (s.color == null) {\n s.color = colors[colori].toString();\n ++colori;\n }\n else if (typeof s.color == \"number\")\n s.color = colors[s.color].toString();\n\n // turn on lines automatically in case nothing is set\n if (s.lines.show == null) {\n var v, show = true;\n for (v in s)\n if (s[v] && s[v].show) {\n show = false;\n break;\n }\n if (show)\n s.lines.show = true;\n }\n\n // If nothing was provided for lines.zero, default it to match\n // lines.fill, since areas by default should extend to zero.\n\n if (s.lines.zero == null) {\n s.lines.zero = !!s.lines.fill;\n }\n\n // setup axes\n s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, \"x\"));\n s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, \"y\"));\n }\n }\n\n function processData() {\n var topSentry = Number.POSITIVE_INFINITY,\n bottomSentry = Number.NEGATIVE_INFINITY,\n fakeInfinity = Number.MAX_VALUE,\n i, j, k, m, length,\n s, points, ps, x, y, axis, val, f, p,\n data, format;\n\n function updateAxis(axis, min, max) {\n if (min < axis.datamin && min != -fakeInfinity)\n axis.datamin = min;\n if (max > axis.datamax && max != fakeInfinity)\n axis.datamax = max;\n }\n\n $.each(allAxes(), function(_, axis) {\n // init axis\n axis.datamin = topSentry;\n axis.datamax = bottomSentry;\n axis.used = false;\n });\n\n for (i = 0; i < series.length; ++i) {\n s = series[i];\n s.datapoints = { points: [] };\n\n executeHooks(hooks.processRawData, [s, s.data, s.datapoints]);\n }\n\n // first pass: clean and copy data\n for (i = 0; i < series.length; ++i) {\n s = series[i];\n\n data = s.data;\n format = s.datapoints.format;\n\n if (!format) {\n format = [];\n // find out how to copy\n format.push({ x: true, number: true, required: true });\n format.push({ y: true, number: true, required: true });\n\n if (s.stack || s.bars.show || (s.lines.show && s.lines.fill)) {\n var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n if (s.bars.horizontal) {\n delete format[format.length - 1].y;\n format[format.length - 1].x = true;\n }\n }\n\n s.datapoints.format = format;\n }\n\n if (s.datapoints.pointsize != null)\n continue; // already filled in\n\n s.datapoints.pointsize = format.length;\n\n ps = s.datapoints.pointsize;\n points = s.datapoints.points;\n\n var insertSteps = s.lines.show && s.lines.steps;\n s.xaxis.used = s.yaxis.used = true;\n\n for (j = k = 0; j < data.length; ++j, k += ps) {\n p = data[j];\n\n var nullify = p == null;\n if (!nullify) {\n for (m = 0; m < ps; ++m) {\n val = p[m];\n f = format[m];\n\n if (f) {\n if (f.number && val != null) {\n val = +val; // convert to number\n if (isNaN(val))\n val = null;\n else if (val == Infinity)\n val = fakeInfinity;\n else if (val == -Infinity)\n val = -fakeInfinity;\n }\n\n if (val == null) {\n if (f.required)\n nullify = true;\n\n if (f.defaultValue != null)\n val = f.defaultValue;\n }\n }\n\n points[k + m] = val;\n }\n }\n\n if (nullify) {\n for (m = 0; m < ps; ++m) {\n val = points[k + m];\n if (val != null) {\n f = format[m];\n // extract min/max info\n if (f.autoscale !== false) {\n if (f.x) {\n updateAxis(s.xaxis, val, val);\n }\n if (f.y) {\n updateAxis(s.yaxis, val, val);\n }\n }\n }\n points[k + m] = null;\n }\n }\n\n if (insertSteps && k > 0 && (!nullify || points[k - ps] != null)) {\n // copy the point to make room for a middle point\n for (m = 0; m < ps; ++m)\n points[k + ps + m] = points[k + m];\n\n // middle point has same y\n points[k + 1] = points[k - ps + 1] || 0;\n\n // if series has null values, let's give the last !null value a nice step\n if (nullify)\n points[k] = p[0];\n\n // we've added a point, better reflect that\n k += ps;\n }\n }\n }\n\n // give the hooks a chance to run\n for (i = 0; i < series.length; ++i) {\n s = series[i];\n points = s.datapoints.points;\n ps = s.datapoints.pointsize;\n\n // grafana\n if (s.transform === 'negative-Y') {\n for (j = 0; j < points.length; j += ps) {\n if (points[j] == null)\n continue;\n\n val = points[j + 1];\n points[j + 1] = -val;\n }\n }\n\n executeHooks(hooks.processDatapoints, [s, s.datapoints]);\n }\n\n // second pass: find datamax/datamin for auto-scaling\n for (i = 0; i < series.length; ++i) {\n s = series[i];\n points = s.datapoints.points;\n ps = s.datapoints.pointsize;\n format = s.datapoints.format;\n\n var xmin = topSentry, ymin = topSentry,\n xmax = bottomSentry, ymax = bottomSentry;\n\n for (j = 0; j < points.length; j += ps) {\n if (points[j] == null)\n continue;\n\n for (m = 0; m < ps; ++m) {\n val = points[j + m];\n f = format[m];\n if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)\n continue;\n\n if (f.x) {\n if (val < xmin)\n xmin = val;\n if (val > xmax)\n xmax = val;\n }\n if (f.y) {\n if (val < ymin)\n ymin = val;\n if (val > ymax)\n ymax = val;\n }\n }\n }\n\n if (s.bars.show) {\n // make sure we got room for the bar on the dancing floor\n var delta;\n\n switch (s.bars.align) {\n case \"left\":\n delta = 0;\n break;\n case \"right\":\n delta = -s.bars.barWidth;\n break;\n default:\n delta = -s.bars.barWidth / 2;\n }\n\n if (s.bars.horizontal) {\n ymin += delta;\n ymax += delta + s.bars.barWidth;\n }\n else {\n xmin += delta;\n xmax += delta + s.bars.barWidth;\n }\n }\n\n updateAxis(s.xaxis, xmin, xmax);\n updateAxis(s.yaxis, ymin, ymax);\n }\n\n $.each(allAxes(), function(_, axis) {\n if (axis.datamin == topSentry)\n axis.datamin = null;\n if (axis.datamax == bottomSentry)\n axis.datamax = null;\n });\n }\n\n function setupCanvases() {\n // Make sure the placeholder is clear of everything except canvases\n // from a previous plot in this container that we'll try to re-use.\n\n placeholder.find(\".flot-temp-elem\").remove();\n\n if (placeholder.css(\"position\") == 'static')\n placeholder.css(\"position\", \"relative\"); // for positioning labels and overlay\n\n surface = new Canvas(\"flot-base\", placeholder);\n overlay = new Canvas(\"flot-overlay\", placeholder); // overlay canvas for interactive features\n\n ctx = surface.context;\n octx = overlay.context;\n\n // define which element we're listening for events on\n eventHolder = $(overlay.element).unbind();\n\n // If we're re-using a plot object, shut down the old one\n\n var existing = placeholder.data(\"plot\");\n\n if (existing) {\n existing.shutdown();\n overlay.clear();\n }\n\n // save in case we get replotted\n placeholder.data(\"plot\", plot);\n }\n\n function bindEvents() {\n // bind events\n if (options.grid.hoverable) {\n eventHolder.mousemove(onMouseMove);\n\n // Use bind, rather than .mouseleave, because we officially\n // still support jQuery 1.2.6, which doesn't define a shortcut\n // for mouseenter or mouseleave. This was a bug/oversight that\n // was fixed somewhere around 1.3.x. We can return to using\n // .mouseleave when we drop support for 1.2.6.\n\n eventHolder.bind(\"mouseleave\", onMouseLeave);\n $(document).bind(\"touchend\", onTouch);\n }\n\n if (options.grid.clickable)\n eventHolder.click(onClick);\n\n executeHooks(hooks.bindEvents, [eventHolder]);\n }\n\n function shutdown() {\n if (redrawTimeout)\n clearTimeout(redrawTimeout);\n\n eventHolder.unbind(\"mousemove\", onMouseMove);\n eventHolder.unbind(\"mouseleave\", onMouseLeave);\n eventHolder.unbind(\"click\", onClick);\n $(document).unbind(\"touchend\", onTouch);\n\n executeHooks(hooks.shutdown, [eventHolder]);\n }\n\n function setTransformationHelpers(axis) {\n // set helper functions on the axis, assumes plot area\n // has been computed already\n\n function identity(x) { return x; }\n\n var s, m, t = axis.options.transform || identity,\n it = axis.options.inverseTransform;\n\n // precompute how much the axis is scaling a point\n // in canvas space\n if (axis.direction == \"x\") {\n s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));\n m = Math.min(t(axis.max), t(axis.min));\n }\n else {\n s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));\n s = -s;\n m = Math.max(t(axis.max), t(axis.min));\n }\n\n // data point to canvas coordinate\n if (t == identity) // slight optimization\n axis.p2c = function(p) { return (p - m) * s; };\n else\n axis.p2c = function(p) { return (t(p) - m) * s; };\n // canvas coordinate to data point\n if (!it)\n axis.c2p = function(c) { return m + c / s; };\n else\n axis.c2p = function(c) { return it(m + c / s); };\n }\n\n function measureTickLabels(axis) {\n\n var opts = axis.options,\n ticks = axis.ticks || [],\n labelWidth = opts.labelWidth || 0,\n labelHeight = opts.labelHeight || 0,\n maxWidth = labelWidth || (axis.direction == \"x\" ? Math.floor(surface.width / (ticks.length || 1)) : null),\n legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n font = opts.font || \"flot-tick-label tickLabel\";\n\n for (var i = 0; i < ticks.length; ++i) {\n\n var t = ticks[i];\n\n if (!t.label)\n continue;\n\n var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);\n\n /// Grafana fix, add +1 to label width\n labelWidth = Math.max(labelWidth, info.width + 1);\n labelHeight = Math.max(labelHeight, info.height);\n }\n\n axis.labelWidth = opts.labelWidth || labelWidth;\n axis.labelHeight = opts.labelHeight || labelHeight;\n }\n\n function allocateAxisBoxFirstPhase(axis) {\n // find the bounding box of the axis by looking at label\n // widths/heights and ticks, make room by diminishing the\n // plotOffset; this first phase only looks at one\n // dimension per axis, the other dimension depends on the\n // other axes so will have to wait\n\n var lw = axis.labelWidth,\n lh = axis.labelHeight,\n pos = axis.options.position,\n isXAxis = axis.direction === \"x\",\n tickLength = axis.options.tickLength,\n axisMargin = options.grid.axisMargin,\n padding = options.grid.labelMargin,\n eventSectionPadding = options.grid.eventSectionHeight,\n innermost = true,\n outermost = true,\n first = true,\n found = false;\n\n // Determine the axis's position in its direction and on its side\n\n $.each(isXAxis ? xaxes : yaxes, function(i, a) {\n if (a && (a.show || a.reserveSpace)) {\n if (a === axis) {\n found = true;\n } else if (a.options.position === pos) {\n if (found) {\n outermost = false;\n } else {\n innermost = false;\n }\n }\n if (!found) {\n first = false;\n }\n }\n });\n\n // The outermost axis on each side has no margin\n\n if (outermost) {\n axisMargin = 0;\n }\n\n // The ticks for the first axis in each direction stretch across\n\n if (tickLength == null) {\n tickLength = first ? \"full\" : 5;\n }\n\n if (!isNaN(+tickLength))\n padding += +tickLength;\n\n if (isXAxis) {\n // Add space for event section\n lh += padding;\n lh += eventSectionPadding;\n\n if (pos == \"bottom\") {\n plotOffset.bottom += lh + axisMargin;\n axis.box = { top: surface.height - plotOffset.bottom, height: lh };\n }\n else {\n axis.box = { top: plotOffset.top + axisMargin, height: lh };\n plotOffset.top += lh + axisMargin;\n }\n }\n else {\n lw += padding;\n\n if (pos == \"left\") {\n axis.box = { left: plotOffset.left + axisMargin, width: lw };\n plotOffset.left += lw + axisMargin;\n }\n else {\n plotOffset.right += lw + axisMargin;\n axis.box = { left: surface.width - plotOffset.right, width: lw };\n }\n }\n\n // save for future reference\n axis.position = pos;\n axis.tickLength = tickLength;\n axis.box.padding = padding;\n axis.box.eventSectionPadding = eventSectionPadding;\n axis.innermost = innermost;\n }\n\n function allocateAxisBoxSecondPhase(axis) {\n // now that all axis boxes have been placed in one\n // dimension, we can set the remaining dimension coordinates\n if (axis.direction == \"x\") {\n axis.box.left = plotOffset.left - axis.labelWidth / 2;\n axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;\n }\n else {\n axis.box.top = plotOffset.top - axis.labelHeight / 2;\n axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;\n }\n }\n\n function adjustLayoutForThingsStickingOut() {\n // possibly adjust plot offset to ensure everything stays\n // inside the canvas and isn't clipped off\n\n var minMargin = options.grid.minBorderMargin,\n axis, i;\n\n // check stuff from the plot (FIXME: this should just read\n // a value from the series, otherwise it's impossible to\n // customize)\n if (minMargin == null) {\n minMargin = 0;\n for (i = 0; i < series.length; ++i)\n minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth / 2));\n }\n\n var margins = {\n left: minMargin,\n right: minMargin,\n top: minMargin,\n bottom: minMargin\n };\n\n // check axis labels, note we don't check the actual\n // labels but instead use the overall width/height to not\n // jump as much around with replots\n $.each(allAxes(), function(_, axis) {\n if (axis.reserveSpace && axis.ticks && axis.ticks.length) {\n if (axis.direction === \"x\") {\n margins.left = Math.max(margins.left, axis.labelWidth / 2);\n margins.right = Math.max(margins.right, axis.labelWidth / 2);\n } else {\n margins.bottom = Math.max(margins.bottom, axis.labelHeight / 2);\n margins.top = Math.max(margins.top, axis.labelHeight / 2);\n }\n }\n });\n\n plotOffset.left = Math.ceil(Math.max(margins.left, plotOffset.left));\n plotOffset.right = Math.ceil(Math.max(margins.right, plotOffset.right));\n plotOffset.top = Math.ceil(Math.max(margins.top, plotOffset.top));\n plotOffset.bottom = Math.ceil(Math.max(margins.bottom, plotOffset.bottom));\n }\n\n function setupGrid() {\n var i, axes = allAxes(), showGrid = options.grid.show;\n\n // Initialize the plot's offset from the edge of the canvas\n\n for (var a in plotOffset) {\n var margin = options.grid.margin || 0;\n plotOffset[a] = typeof margin == \"number\" ? margin : margin[a] || 0;\n }\n\n executeHooks(hooks.processOffset, [plotOffset]);\n\n // If the grid is visible, add its border width to the offset\n\n for (var a in plotOffset) {\n if (typeof (options.grid.borderWidth) == \"object\") {\n plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;\n }\n else {\n plotOffset[a] += showGrid ? options.grid.borderWidth : 0;\n }\n }\n\n $.each(axes, function(_, axis) {\n var axisOpts = axis.options;\n axis.show = axisOpts.show == null ? axis.used : axisOpts.show;\n axis.reserveSpace = axisOpts.reserveSpace == null ? axis.show : axisOpts.reserveSpace;\n setRange(axis);\n });\n\n executeHooks(hooks.processRange, []);\n\n if (showGrid) {\n\n var allocatedAxes = $.grep(axes, function(axis) {\n return axis.show || axis.reserveSpace;\n });\n\n var snaped = false;\n for (var i = 0; i < 2; i++) {\n $.each(allocatedAxes, function(_, axis) {\n // make the ticks\n setupTickGeneration(axis);\n setTicks(axis);\n snaped = snapRangeToTicks(axis, axis.ticks) || snaped;\n // find labelWidth/Height for axis\n measureTickLabels(axis);\n });\n\n if (snaped && hooks.processRange.length > 0) {\n executeHooks(hooks.processRange, []);\n snaped = false;\n } else {\n break;\n }\n }\n\n // with all dimensions calculated, we can compute the\n // axis bounding boxes, start from the outside\n // (reverse order)\n for (i = allocatedAxes.length - 1; i >= 0; --i)\n allocateAxisBoxFirstPhase(allocatedAxes[i]);\n\n // make sure we've got enough space for things that\n // might stick out\n adjustLayoutForThingsStickingOut();\n\n $.each(allocatedAxes, function(_, axis) {\n allocateAxisBoxSecondPhase(axis);\n });\n }\n\n\n plotWidth = surface.width - plotOffset.left - plotOffset.right;\n plotHeight = surface.height - plotOffset.bottom - plotOffset.top;\n\n // now we got the proper plot dimensions, we can compute the scaling\n $.each(axes, function(_, axis) {\n setTransformationHelpers(axis);\n });\n\n if (showGrid) {\n drawAxisLabels();\n }\n\n insertLegend();\n }\n\n function setRange(axis) {\n var opts = axis.options,\n min = +(opts.min != null ? opts.min : axis.datamin),\n max = +(opts.max != null ? opts.max : axis.datamax),\n delta = max - min;\n\n if (delta == 0.0) {\n // Grafana fix: wide Y min and max using increased wideFactor\n // when all series values are the same\n var wideFactor = 0.25;\n var widen = Math.abs(max == 0 ? 1 : max * wideFactor);\n\n if (opts.min == null) {\n min -= widen;\n }\n // always widen max if we couldn't widen min to ensure we\n // don't fall into min == max which doesn't work\n if (opts.max == null || opts.min != null) {\n max += widen;\n }\n }\n else {\n // consider autoscaling\n var margin = opts.autoscaleMargin;\n if (margin != null) {\n if (opts.min == null) {\n min -= delta * margin;\n // make sure we don't go below zero if all values\n // are positive\n if (min < 0 && axis.datamin != null && axis.datamin >= 0)\n min = 0;\n }\n if (opts.max == null) {\n max += delta * margin;\n if (max > 0 && axis.datamax != null && axis.datamax <= 0)\n max = 0;\n }\n }\n }\n axis.min = min;\n axis.max = max;\n }\n\n // grafana change\n function getSignificantDigitCount(n) {\n //remove decimal and make positive\n n = Math.abs(String(n).replace(\".\", \"\"));\n if (n == 0) {\n return 0;\n }\n\n // kill the 0s at the end of n\n while (n != 0 && n % 10 == 0) {\n n /= 10;\n }\n\n // get number of digits\n return Math.floor(Math.log(n) / Math.LN10) + 1;\n }\n\n function setupTickGeneration(axis) {\n var opts = axis.options;\n\n // estimate number of ticks\n var noTicks;\n if (typeof opts.ticks == \"number\" && opts.ticks > 0)\n noTicks = opts.ticks;\n else\n // heuristic based on the model a*sqrt(x) fitted to\n // some data points that seemed reasonable\n noTicks = 0.3 * Math.sqrt(axis.direction == \"x\" ? surface.width : surface.height);\n\n var delta = (axis.max - axis.min) / noTicks,\n dec = -Math.floor(Math.log(delta) / Math.LN10),\n maxDec = opts.tickDecimals;\n\n if (maxDec != null && dec > maxDec) {\n dec = maxDec;\n }\n\n var magn = Math.pow(10, -dec),\n norm = delta / magn, // norm is between 1.0 and 10.0\n size;\n\n if (norm < 1.5) {\n size = 1;\n } else if (norm < 3) {\n size = 2;\n // special case for 2.5, requires an extra decimal\n if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {\n size = 2.5;\n ++dec;\n }\n } else if (norm < 7.5) {\n size = 5;\n } else {\n size = 10;\n }\n\n size *= magn;\n\n if (opts.minTickSize != null && size < opts.minTickSize) {\n size = opts.minTickSize;\n }\n\n axis.delta = delta;\n axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);\n axis.tickSize = opts.tickSize || size;\n\n // Time mode was moved to a plug-in in 0.8, and since so many people use it\n // we'll add an especially friendly reminder to make sure they included it.\n\n if (opts.mode == \"time\" && !axis.tickGenerator) {\n throw new Error(\"Time mode requires the flot.time plugin.\");\n }\n\n // Flot supports base-10 axes; any other mode else is handled by a plug-in,\n // like flot.time.js.\n\n if (!axis.tickGenerator) {\n\n axis.tickGenerator = function(axis) {\n\n var ticks = [],\n start = floorInBase(axis.min, axis.tickSize),\n i = 0,\n v = Number.NaN,\n prev;\n\n do {\n prev = v;\n v = start + i * axis.tickSize;\n ticks.push(v);\n ++i;\n } while (v < axis.max && v != prev);\n return ticks;\n };\n\n axis.tickFormatter = function(value, axis) {\n\n var factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;\n var formatted = \"\" + Math.round(value * factor) / factor;\n\n // If tickDecimals was specified, ensure that we have exactly that\n // much precision; otherwise default to the value's own precision.\n\n if (axis.tickDecimals != null) {\n var decimal = formatted.indexOf(\".\");\n var precision = decimal == -1 ? 0 : formatted.length - decimal - 1;\n if (precision < axis.tickDecimals) {\n return (precision ? formatted : formatted + \".\") + (\"\" + factor).substr(1, axis.tickDecimals - precision);\n }\n }\n\n return formatted;\n };\n }\n\n if ($.isFunction(opts.tickFormatter))\n axis.tickFormatter = function(v, axis) { return \"\" + opts.tickFormatter(v, axis); };\n\n if (opts.alignTicksWithAxis != null) {\n var otherAxis = (axis.direction == \"x\" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];\n if (otherAxis && otherAxis.used && otherAxis != axis) {\n // consider snapping min/max to outermost nice ticks\n var niceTicks = axis.tickGenerator(axis);\n if (niceTicks.length > 0) {\n if (opts.min == null)\n axis.min = Math.min(axis.min, niceTicks[0]);\n if (opts.max == null && niceTicks.length > 1)\n axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);\n }\n\n axis.tickGenerator = function(axis) {\n // copy ticks, scaled to this axis\n var ticks = [], v, i;\n for (i = 0; i < otherAxis.ticks.length; ++i) {\n v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);\n v = axis.min + v * (axis.max - axis.min);\n ticks.push(v);\n }\n return ticks;\n };\n\n // we might need an extra decimal since forced\n // ticks don't necessarily fit naturally\n if (!axis.mode && opts.tickDecimals == null) {\n var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),\n ts = axis.tickGenerator(axis);\n\n // only proceed if the tick interval rounded\n // with an extra decimal doesn't give us a\n // zero at end\n if (!(ts.length > 1 && /\\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))\n axis.tickDecimals = extraDec;\n }\n }\n }\n }\n\n function setTicks(axis) {\n var oticks = axis.options.ticks, ticks = [];\n if (oticks == null || (typeof oticks == \"number\" && oticks > 0))\n ticks = axis.tickGenerator(axis);\n else if (oticks) {\n if ($.isFunction(oticks))\n // generate the ticks\n ticks = oticks(axis);\n else\n ticks = oticks;\n }\n\n // clean up/labelify the supplied ticks, copy them over\n var i, v;\n axis.ticks = [];\n for (i = 0; i < ticks.length; ++i) {\n var label = null;\n var t = ticks[i];\n if (typeof t == \"object\") {\n v = +t[0];\n if (t.length > 1)\n label = t[1];\n }\n else\n v = +t;\n if (label == null)\n label = axis.tickFormatter(v, axis);\n if (!isNaN(v))\n axis.ticks.push({ v: v, label: label });\n }\n }\n\n function snapRangeToTicks(axis, ticks) {\n var changed = false;\n if (axis.options.autoscaleMargin && ticks.length > 0) {\n // snap to ticks\n if (axis.options.min == null) {\n axis.min = Math.min(axis.min, ticks[0].v);\n changed = true;\n }\n if (axis.options.max == null && ticks.length > 1) {\n axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);\n changed = true;\n }\n }\n return changed;\n }\n\n function draw() {\n\n surface.clear();\n\n executeHooks(hooks.drawBackground, [ctx]);\n\n var grid = options.grid;\n\n // draw background, if any\n if (grid.show && grid.backgroundColor)\n drawBackground();\n\n if (grid.show && !grid.aboveData) {\n drawGrid();\n }\n\n for (var i = 0; i < series.length; ++i) {\n executeHooks(hooks.drawSeries, [ctx, series[i]]);\n drawSeries(series[i]);\n }\n\n executeHooks(hooks.draw, [ctx]);\n\n if (grid.show && grid.aboveData) {\n drawGrid();\n }\n\n surface.render();\n\n // A draw implies that either the axes or data have changed, so we\n // should probably update the overlay highlights as well.\n\n triggerRedrawOverlay();\n }\n\n function extractRange(ranges, coord) {\n var axis, from, to, key, axes = allAxes();\n\n for (var i = 0; i < axes.length; ++i) {\n axis = axes[i];\n if (axis.direction == coord) {\n key = coord + axis.n + \"axis\";\n if (!ranges[key] && axis.n == 1)\n key = coord + \"axis\"; // support x1axis as xaxis\n if (ranges[key]) {\n from = ranges[key].from;\n to = ranges[key].to;\n break;\n }\n }\n }\n\n // backwards-compat stuff - to be removed in future\n if (!ranges[key]) {\n axis = coord == \"x\" ? xaxes[0] : yaxes[0];\n from = ranges[coord + \"1\"];\n to = ranges[coord + \"2\"];\n }\n\n // auto-reverse as an added bonus\n if (from != null && to != null && from > to) {\n var tmp = from;\n from = to;\n to = tmp;\n }\n\n return { from: from, to: to, axis: axis };\n }\n\n function drawBackground() {\n ctx.save();\n ctx.translate(plotOffset.left, plotOffset.top);\n\n ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, \"rgba(255, 255, 255, 0)\");\n ctx.fillRect(0, 0, plotWidth, plotHeight);\n ctx.restore();\n }\n\n function drawGrid() {\n var i, axes, bw, bc;\n\n ctx.save();\n ctx.translate(plotOffset.left, plotOffset.top);\n\n // draw markings\n var markings = options.grid.markings;\n if (markings) {\n if ($.isFunction(markings)) {\n axes = plot.getAxes();\n // xmin etc. is backwards compatibility, to be\n // removed in the future\n axes.xmin = axes.xaxis.min;\n axes.xmax = axes.xaxis.max;\n axes.ymin = axes.yaxis.min;\n axes.ymax = axes.yaxis.max;\n\n markings = markings(axes);\n }\n\n for (i = 0; i < markings.length; ++i) {\n var m = markings[i],\n xrange = extractRange(m, \"x\"),\n yrange = extractRange(m, \"y\");\n\n // fill in missing\n if (xrange.from == null)\n xrange.from = xrange.axis.min;\n if (xrange.to == null)\n xrange.to = xrange.axis.max;\n if (yrange.from == null)\n yrange.from = yrange.axis.min;\n if (yrange.to == null)\n yrange.to = yrange.axis.max;\n\n // clip\n if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||\n yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)\n continue;\n\n xrange.from = Math.max(xrange.from, xrange.axis.min);\n xrange.to = Math.min(xrange.to, xrange.axis.max);\n yrange.from = Math.max(yrange.from, yrange.axis.min);\n yrange.to = Math.min(yrange.to, yrange.axis.max);\n\n var xequal = xrange.from === xrange.to,\n yequal = yrange.from === yrange.to;\n\n if (xequal && yequal) {\n continue;\n }\n\n // then draw\n xrange.from = Math.floor(xrange.axis.p2c(xrange.from));\n xrange.to = Math.floor(xrange.axis.p2c(xrange.to));\n yrange.from = Math.floor(yrange.axis.p2c(yrange.from));\n yrange.to = Math.floor(yrange.axis.p2c(yrange.to));\n\n if (xequal || yequal) {\n var lineWidth = m.lineWidth || options.grid.markingsLineWidth,\n subPixel = lineWidth % 2 ? 0.5 : 0;\n ctx.beginPath();\n ctx.strokeStyle = m.color || options.grid.markingsColor;\n ctx.lineWidth = lineWidth;\n if (xequal) {\n ctx.moveTo(xrange.to + subPixel, yrange.from);\n ctx.lineTo(xrange.to + subPixel, yrange.to);\n } else {\n ctx.moveTo(xrange.from, yrange.to + subPixel);\n ctx.lineTo(xrange.to, yrange.to + subPixel);\n }\n ctx.stroke();\n } else {\n ctx.fillStyle = m.color || options.grid.markingsColor;\n ctx.fillRect(xrange.from, yrange.to,\n xrange.to - xrange.from,\n yrange.from - yrange.to);\n }\n }\n }\n\n // draw the ticks\n axes = allAxes();\n bw = options.grid.borderWidth;\n\n for (var j = 0; j < axes.length; ++j) {\n var axis = axes[j], box = axis.box,\n t = axis.tickLength, x, y, xoff, yoff;\n if (!axis.show || axis.ticks.length == 0)\n continue;\n\n ctx.lineWidth = 1;\n\n // find the edges\n if (axis.direction == \"x\") {\n x = 0;\n if (t == \"full\")\n y = (axis.position == \"top\" ? 0 : plotHeight);\n else\n y = box.top - plotOffset.top + (axis.position == \"top\" ? box.height : 0);\n }\n else {\n y = 0;\n if (t == \"full\")\n x = (axis.position == \"left\" ? 0 : plotWidth);\n else\n x = box.left - plotOffset.left + (axis.position == \"left\" ? box.width : 0);\n }\n\n // draw tick bar\n if (!axis.innermost) {\n ctx.strokeStyle = axis.options.color;\n ctx.beginPath();\n xoff = yoff = 0;\n if (axis.direction == \"x\")\n xoff = plotWidth + 1;\n else\n yoff = plotHeight + 1;\n\n if (ctx.lineWidth == 1) {\n if (axis.direction == \"x\") {\n y = Math.floor(y) + 0.5;\n } else {\n x = Math.floor(x) + 0.5;\n }\n }\n\n ctx.moveTo(x, y);\n ctx.lineTo(x + xoff, y + yoff);\n ctx.stroke();\n }\n\n // draw ticks\n\n ctx.strokeStyle = axis.options.tickColor;\n\n ctx.beginPath();\n for (i = 0; i < axis.ticks.length; ++i) {\n var v = axis.ticks[i].v;\n\n xoff = yoff = 0;\n\n if (isNaN(v) || v < axis.min || v > axis.max\n // skip those lying on the axes if we got a border\n || (t == \"full\"\n && ((typeof bw == \"object\" && bw[axis.position] > 0) || bw > 0)\n && (v == axis.min || v == axis.max)))\n continue;\n\n if (axis.direction == \"x\") {\n x = axis.p2c(v);\n yoff = t == \"full\" ? -plotHeight : t;\n\n if (axis.position == \"top\")\n yoff = -yoff;\n }\n else {\n y = axis.p2c(v);\n xoff = t == \"full\" ? -plotWidth : t;\n\n if (axis.position == \"left\")\n xoff = -xoff;\n }\n\n if (ctx.lineWidth == 1) {\n if (axis.direction == \"x\")\n x = Math.floor(x) + 0.5;\n else\n y = Math.floor(y) + 0.5;\n }\n\n ctx.moveTo(x, y);\n ctx.lineTo(x + xoff, y + yoff);\n }\n\n ctx.stroke();\n }\n\n\n // draw border\n if (bw) {\n // If either borderWidth or borderColor is an object, then draw the border\n // line by line instead of as one rectangle\n bc = options.grid.borderColor;\n if (typeof bw == \"object\" || typeof bc == \"object\") {\n if (typeof bw !== \"object\") {\n bw = { top: bw, right: bw, bottom: bw, left: bw };\n }\n if (typeof bc !== \"object\") {\n bc = { top: bc, right: bc, bottom: bc, left: bc };\n }\n\n if (bw.top > 0) {\n ctx.strokeStyle = bc.top;\n ctx.lineWidth = bw.top;\n ctx.beginPath();\n ctx.moveTo(0 - bw.left, 0 - bw.top / 2);\n ctx.lineTo(plotWidth, 0 - bw.top / 2);\n ctx.stroke();\n }\n\n if (bw.right > 0) {\n ctx.strokeStyle = bc.right;\n ctx.lineWidth = bw.right;\n ctx.beginPath();\n ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);\n ctx.lineTo(plotWidth + bw.right / 2, plotHeight);\n ctx.stroke();\n }\n\n if (bw.bottom > 0) {\n ctx.strokeStyle = bc.bottom;\n ctx.lineWidth = bw.bottom;\n ctx.beginPath();\n ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);\n ctx.lineTo(0, plotHeight + bw.bottom / 2);\n ctx.stroke();\n }\n\n if (bw.left > 0) {\n ctx.strokeStyle = bc.left;\n ctx.lineWidth = bw.left;\n ctx.beginPath();\n ctx.moveTo(0 - bw.left / 2, plotHeight + bw.bottom);\n ctx.lineTo(0 - bw.left / 2, 0);\n ctx.stroke();\n }\n }\n else {\n ctx.lineWidth = bw;\n ctx.strokeStyle = options.grid.borderColor;\n ctx.strokeRect(-bw / 2, -bw / 2, plotWidth + bw, plotHeight + bw);\n }\n }\n\n ctx.restore();\n }\n\n function drawAxisLabels() {\n\n $.each(allAxes(), function(_, axis) {\n var box = axis.box,\n legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n font = axis.options.font || \"flot-tick-label tickLabel\",\n tick, x, y, halign, valign;\n\n // Remove text before checking for axis.show and ticks.length;\n // otherwise plugins, like flot-tickrotor, that draw their own\n // tick labels will end up with both theirs and the defaults.\n\n surface.removeText(layer);\n\n if (!axis.show || axis.ticks.length == 0)\n return;\n\n for (var i = 0; i < axis.ticks.length; ++i) {\n\n tick = axis.ticks[i];\n if (!tick.label || tick.v < axis.min || tick.v > axis.max)\n continue;\n\n if (axis.direction == \"x\") {\n halign = \"center\";\n x = plotOffset.left + axis.p2c(tick.v);\n if (axis.position == \"bottom\") {\n y = box.top + box.padding + box.eventSectionPadding;\n } else {\n y = box.top + box.height - box.padding;\n valign = \"bottom\";\n }\n } else {\n valign = \"middle\";\n y = plotOffset.top + axis.p2c(tick.v);\n if (axis.position == \"left\") {\n x = box.left + box.width - box.padding;\n halign = \"right\";\n } else {\n x = box.left + box.padding;\n }\n }\n\n surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);\n }\n });\n }\n\n function drawOrphanedPoints(series) {\n /* Filters series data for points with no neighbors before or after\n * and plots single 0.5 radius points for them so that they are displayed.\n */\n var abandonedPoints = [];\n var beforeX = null;\n var afterX = null;\n var datapoints = series.datapoints;\n // find any points with no neighbors before or after\n var emptyPoints = [];\n for (var j = 0; j < datapoints.pointsize - 2; j++) {\n emptyPoints.push(0);\n }\n for (var i = 0; i < datapoints.points.length; i += datapoints.pointsize) {\n var x = datapoints.points[i], y = datapoints.points[i + 1];\n if (i === datapoints.points.length - datapoints.pointsize) {\n afterX = null;\n } else {\n afterX = datapoints.points[i + datapoints.pointsize];\n }\n if (x !== null && y !== null && beforeX === null && afterX === null) {\n abandonedPoints.push(x);\n abandonedPoints.push(y);\n abandonedPoints.push.apply(abandonedPoints, emptyPoints);\n }\n beforeX = x;\n\n }\n var olddatapoints = datapoints.points\n datapoints.points = abandonedPoints;\n\n series.points.radius = series.lines.lineWidth / 2;\n // plot the orphan points with a radius of lineWidth/2\n drawSeriesPoints(series);\n // reset old info\n datapoints.points = olddatapoints;\n }\n\n function drawSeries(series) {\n if (series.lines.show) {\n drawSeriesLines(series);\n if (!series.points.show && !series.bars.show) {\n // not necessary if user wants points displayed for everything\n drawOrphanedPoints(series);\n }\n }\n if (series.bars.show)\n drawSeriesBars(series);\n if (series.points.show)\n drawSeriesPoints(series);\n }\n\n function drawSeriesLines(series) {\n function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {\n var points = datapoints.points,\n ps = datapoints.pointsize,\n prevx = null, prevy = null;\n\n ctx.beginPath();\n for (var i = ps; i < points.length; i += ps) {\n var x1 = points[i - ps], y1 = points[i - ps + 1],\n x2 = points[i], y2 = points[i + 1];\n\n if (x1 == null || x2 == null)\n continue;\n\n // clip with ymin\n if (y1 <= y2 && y1 < axisy.min) {\n if (y2 < axisy.min)\n continue; // line segment is outside\n // compute new intersection point\n x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n y1 = axisy.min;\n }\n else if (y2 <= y1 && y2 < axisy.min) {\n if (y1 < axisy.min)\n continue;\n x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n y2 = axisy.min;\n }\n\n // clip with ymax\n if (y1 >= y2 && y1 > axisy.max) {\n if (y2 > axisy.max)\n continue;\n x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n y1 = axisy.max;\n }\n else if (y2 >= y1 && y2 > axisy.max) {\n if (y1 > axisy.max)\n continue;\n x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n y2 = axisy.max;\n }\n\n // clip with xmin\n if (x1 <= x2 && x1 < axisx.min) {\n if (x2 < axisx.min)\n continue;\n y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n x1 = axisx.min;\n }\n else if (x2 <= x1 && x2 < axisx.min) {\n if (x1 < axisx.min)\n continue;\n y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n x2 = axisx.min;\n }\n\n // clip with xmax\n if (x1 >= x2 && x1 > axisx.max) {\n if (x2 > axisx.max)\n continue;\n y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n x1 = axisx.max;\n }\n else if (x2 >= x1 && x2 > axisx.max) {\n if (x1 > axisx.max)\n continue;\n y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n x2 = axisx.max;\n }\n\n if (x1 != prevx || y1 != prevy)\n ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n\n prevx = x2;\n prevy = y2;\n ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);\n }\n ctx.stroke();\n }\n\n function plotLineArea(datapoints, axisx, axisy) {\n var points = datapoints.points,\n ps = datapoints.pointsize,\n bottom = Math.min(Math.max(0, axisy.min), axisy.max),\n i = 0, top, areaOpen = false,\n ypos = 1, segmentStart = 0, segmentEnd = 0;\n\n // we process each segment in two turns, first forward\n // direction to sketch out top, then once we hit the\n // end we go backwards to sketch the bottom\n while (true) {\n if (ps > 0 && i > points.length + ps)\n break;\n\n i += ps; // ps is negative if going backwards\n\n var x1 = points[i - ps],\n y1 = points[i - ps + ypos],\n x2 = points[i], y2 = points[i + ypos];\n\n if (areaOpen) {\n if (ps > 0 && x1 != null && x2 == null) {\n // at turning point\n segmentEnd = i;\n ps = -ps;\n ypos = 2;\n continue;\n }\n\n if (ps < 0 && i == segmentStart + ps) {\n // done with the reverse sweep\n ctx.fill();\n areaOpen = false;\n ps = -ps;\n ypos = 1;\n i = segmentStart = segmentEnd + ps;\n continue;\n }\n }\n\n if (x1 == null || x2 == null)\n continue;\n\n // clip x values\n\n // clip with xmin\n if (x1 <= x2 && x1 < axisx.min) {\n if (x2 < axisx.min)\n continue;\n y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n x1 = axisx.min;\n }\n else if (x2 <= x1 && x2 < axisx.min) {\n if (x1 < axisx.min)\n continue;\n y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n x2 = axisx.min;\n }\n\n // clip with xmax\n if (x1 >= x2 && x1 > axisx.max) {\n if (x2 > axisx.max)\n continue;\n y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n x1 = axisx.max;\n }\n else if (x2 >= x1 && x2 > axisx.max) {\n if (x1 > axisx.max)\n continue;\n y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n x2 = axisx.max;\n }\n\n if (!areaOpen) {\n // open area\n ctx.beginPath();\n ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));\n areaOpen = true;\n }\n\n // now first check the case where both is outside\n if (y1 >= axisy.max && y2 >= axisy.max) {\n ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));\n ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));\n continue;\n }\n else if (y1 <= axisy.min && y2 <= axisy.min) {\n ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));\n ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));\n continue;\n }\n\n // else it's a bit more complicated, there might\n // be a flat maxed out rectangle first, then a\n // triangular cutout or reverse; to find these\n // keep track of the current x values\n var x1old = x1, x2old = x2;\n\n // clip the y values, without shortcutting, we\n // go through all cases in turn\n\n // clip with ymin\n if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {\n x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n y1 = axisy.min;\n }\n else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {\n x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n y2 = axisy.min;\n }\n\n // clip with ymax\n if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {\n x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n y1 = axisy.max;\n }\n else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {\n x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n y2 = axisy.max;\n }\n\n // if the x value was changed we got a rectangle\n // to fill\n if (x1 != x1old) {\n ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));\n // it goes to (x1, y1), but we fill that below\n }\n\n // fill triangular section, this sometimes result\n // in redundant points if (x1, y1) hasn't changed\n // from previous line to, but we just ignore that\n ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));\n ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n\n // fill the other rectangle if it's there\n if (x2 != x2old) {\n ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));\n }\n }\n }\n\n ctx.save();\n ctx.translate(plotOffset.left, plotOffset.top);\n ctx.lineJoin = \"round\";\n\n var lw = series.lines.lineWidth,\n sw = series.shadowSize;\n // FIXME: consider another form of shadow when filling is turned on\n if (lw > 0 && sw > 0) {\n // draw shadow as a thick and thin line with transparency\n ctx.lineWidth = sw;\n ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n // position shadow at angle from the mid of line\n var angle = Math.PI / 18;\n plotLine(series.datapoints, Math.sin(angle) * (lw / 2 + sw / 2), Math.cos(angle) * (lw / 2 + sw / 2), series.xaxis, series.yaxis);\n ctx.lineWidth = sw / 2;\n plotLine(series.datapoints, Math.sin(angle) * (lw / 2 + sw / 4), Math.cos(angle) * (lw / 2 + sw / 4), series.xaxis, series.yaxis);\n }\n\n ctx.lineWidth = lw;\n ctx.strokeStyle = series.color;\n var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);\n if (fillStyle) {\n ctx.fillStyle = fillStyle;\n plotLineArea(series.datapoints, series.xaxis, series.yaxis);\n }\n\n if (lw > 0)\n plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);\n ctx.restore();\n }\n\n function drawSeriesPoints(series) {\n function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {\n var points = datapoints.points, ps = datapoints.pointsize;\n\n for (var i = 0; i < points.length; i += ps) {\n var x = points[i], y = points[i + 1];\n if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n continue;\n\n ctx.beginPath();\n x = axisx.p2c(x);\n y = axisy.p2c(y) + offset;\n if (symbol == \"circle\")\n ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);\n else\n symbol(ctx, x, y, radius, shadow);\n ctx.closePath();\n\n if (fillStyle) {\n ctx.fillStyle = fillStyle;\n ctx.fill();\n }\n ctx.stroke();\n }\n }\n\n ctx.save();\n ctx.translate(plotOffset.left, plotOffset.top);\n\n var lw = series.points.lineWidth,\n sw = series.shadowSize,\n radius = series.points.radius,\n symbol = series.points.symbol;\n\n // If the user sets the line width to 0, we change it to a very\n // small value. A line width of 0 seems to force the default of 1.\n // Doing the conditional here allows the shadow setting to still be\n // optional even with a lineWidth of 0.\n\n if (lw == 0)\n lw = 0.0001;\n\n if (lw > 0 && sw > 0) {\n // draw shadow in two steps\n var w = sw / 2;\n ctx.lineWidth = w;\n ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n plotPoints(series.datapoints, radius, null, w + w / 2, true,\n series.xaxis, series.yaxis, symbol);\n\n ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n plotPoints(series.datapoints, radius, null, w / 2, true,\n series.xaxis, series.yaxis, symbol);\n }\n\n ctx.lineWidth = lw;\n ctx.strokeStyle = series.color;\n plotPoints(series.datapoints, radius,\n getFillStyle(series.points, series.color), 0, false,\n series.xaxis, series.yaxis, symbol);\n ctx.restore();\n }\n\n function drawBar(x, y, b, barLeft, barRight, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {\n var left, right, bottom, top,\n drawLeft, drawRight, drawTop, drawBottom,\n tmp;\n\n // in horizontal mode, we start the bar from the left\n // instead of from the bottom so it appears to be\n // horizontal rather than vertical\n if (horizontal) {\n drawBottom = drawRight = drawTop = true;\n drawLeft = false;\n left = b;\n right = x;\n top = y + barLeft;\n bottom = y + barRight;\n\n // account for negative bars\n if (right < left) {\n tmp = right;\n right = left;\n left = tmp;\n drawLeft = true;\n drawRight = false;\n }\n }\n else {\n drawLeft = drawRight = drawTop = true;\n drawBottom = false;\n left = x + barLeft;\n right = x + barRight;\n bottom = b;\n top = y;\n\n // account for negative bars\n if (top < bottom) {\n tmp = top;\n top = bottom;\n bottom = tmp;\n drawBottom = true;\n drawTop = false;\n }\n }\n\n // clip\n if (right < axisx.min || left > axisx.max ||\n top < axisy.min || bottom > axisy.max)\n return;\n\n if (left < axisx.min) {\n left = axisx.min;\n drawLeft = false;\n }\n\n if (right > axisx.max) {\n right = axisx.max;\n drawRight = false;\n }\n\n if (bottom < axisy.min) {\n bottom = axisy.min;\n drawBottom = false;\n }\n\n if (top > axisy.max) {\n top = axisy.max;\n drawTop = false;\n }\n\n left = axisx.p2c(left);\n bottom = axisy.p2c(bottom);\n right = axisx.p2c(right);\n top = axisy.p2c(top);\n\n // fill the bar\n if (fillStyleCallback) {\n c.fillStyle = fillStyleCallback(bottom, top);\n c.fillRect(left, top, right - left, bottom - top)\n }\n\n // draw outline\n if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {\n c.beginPath();\n\n // FIXME: inline moveTo is buggy with excanvas\n c.moveTo(left, bottom);\n if (drawLeft)\n c.lineTo(left, top);\n else\n c.moveTo(left, top);\n if (drawTop)\n c.lineTo(right, top);\n else\n c.moveTo(right, top);\n if (drawRight)\n c.lineTo(right, bottom);\n else\n c.moveTo(right, bottom);\n if (drawBottom)\n c.lineTo(left, bottom);\n else\n c.moveTo(left, bottom);\n c.stroke();\n }\n }\n\n function drawSeriesBars(series) {\n function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {\n var points = datapoints.points, ps = datapoints.pointsize;\n\n for (var i = 0; i < points.length; i += ps) {\n if (points[i] == null)\n continue;\n drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);\n }\n }\n\n ctx.save();\n ctx.translate(plotOffset.left, plotOffset.top);\n\n // FIXME: figure out a way to add shadows (for instance along the right edge)\n ctx.lineWidth = series.bars.lineWidth;\n ctx.strokeStyle = series.color;\n\n var barLeft;\n\n switch (series.bars.align) {\n case \"left\":\n barLeft = 0;\n break;\n case \"right\":\n barLeft = -series.bars.barWidth;\n break;\n default:\n barLeft = -series.bars.barWidth / 2;\n }\n\n var fillStyleCallback = series.bars.fill ? function(bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;\n plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);\n ctx.restore();\n }\n\n function getFillStyle(filloptions, seriesColor, bottom, top) {\n var fill = filloptions.fill;\n if (!fill)\n return null;\n\n if (filloptions.fillColor)\n return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);\n\n var c = $.color.parse(seriesColor);\n c.a = typeof fill == \"number\" ? fill : 0.4;\n c.normalize();\n return c.toString();\n }\n\n function insertLegend() {\n\n if (options.legend.container != null) {\n $.find(options.legend.container).html(\"\");\n } else {\n placeholder.find(\".legend\").remove();\n }\n\n if (!options.legend.show) {\n return;\n }\n\n var fragments = [], entries = [], rowStarted = false,\n lf = options.legend.labelFormatter, s, label;\n\n // Build a list of legend entries, with each having a label and a color\n\n for (var i = 0; i < series.length; ++i) {\n s = series[i];\n if (s.label) {\n label = lf ? lf(s.label, s) : s.label;\n if (label) {\n entries.push({\n label: label,\n color: s.color\n });\n }\n }\n }\n\n // Sort the legend using either the default or a custom comparator\n\n if (options.legend.sorted) {\n if ($.isFunction(options.legend.sorted)) {\n entries.sort(options.legend.sorted);\n } else if (options.legend.sorted == \"reverse\") {\n entries.reverse();\n } else {\n var ascending = options.legend.sorted != \"descending\";\n entries.sort(function(a, b) {\n return a.label == b.label ? 0 : (\n (a.label < b.label) != ascending ? 1 : -1 // Logical XOR\n );\n });\n }\n }\n\n // Generate markup for the list of entries, in their final order\n\n for (var i = 0; i < entries.length; ++i) {\n\n var entry = entries[i];\n\n if (i % options.legend.noColumns == 0) {\n if (rowStarted)\n fragments.push('</tr>');\n fragments.push('<tr>');\n rowStarted = true;\n }\n\n fragments.push(\n '<td class=\"legendColorBox\"><div style=\"border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px\"><div style=\"width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden\"></div></div></td>' +\n '<td class=\"legendLabel\">' + entry.label + '</td>'\n );\n }\n\n if (rowStarted)\n fragments.push('</tr>');\n\n if (fragments.length == 0)\n return;\n\n var table = '<table style=\"font-size:smaller;color:' + options.grid.color + '\">' + fragments.join(\"\") + '</table>';\n if (options.legend.container != null)\n $(options.legend.container).html(table);\n else {\n var pos = \"\",\n p = options.legend.position,\n m = options.legend.margin;\n if (m[0] == null)\n m = [m, m];\n if (p.charAt(0) == \"n\")\n pos += 'top:' + (m[1] + plotOffset.top) + 'px;';\n else if (p.charAt(0) == \"s\")\n pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';\n if (p.charAt(1) == \"e\")\n pos += 'right:' + (m[0] + plotOffset.right) + 'px;';\n else if (p.charAt(1) == \"w\")\n pos += 'left:' + (m[0] + plotOffset.left) + 'px;';\n var legend = $('<div class=\"legend\">' + table.replace('style=\"', 'style=\"position:absolute;' + pos + ';') + '</div>').appendTo(placeholder);\n if (options.legend.backgroundOpacity != 0.0) {\n // put in the transparent background\n // separately to avoid blended labels and\n // label boxes\n var c = options.legend.backgroundColor;\n if (c == null) {\n c = options.grid.backgroundColor;\n if (c && typeof c == \"string\")\n c = $.color.parse(c);\n else\n c = $.color.extract(legend, 'background-color');\n c.a = 1;\n c = c.toString();\n }\n var div = legend.children();\n $('<div style=\"position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos + 'background-color:' + c + ';\"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);\n }\n }\n }\n\n\n // interactive features\n\n var highlights = [],\n redrawTimeout = null;\n\n // returns the data item the mouse is over, or null if none is found\n function findNearbyItem(mouseX, mouseY, seriesFilter) {\n var maxDistance = options.grid.mouseActiveRadius,\n smallestDistance = maxDistance * maxDistance + 1,\n item = null, foundPoint = false, i, j, ps;\n\n for (i = series.length - 1; i >= 0; --i) {\n if (!seriesFilter(series[i]))\n continue;\n\n var s = series[i],\n axisx = s.xaxis,\n axisy = s.yaxis,\n points = s.datapoints.points,\n mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster\n my = axisy.c2p(mouseY),\n maxx = maxDistance / axisx.scale,\n maxy = maxDistance / axisy.scale;\n\n ps = s.datapoints.pointsize;\n // with inverse transforms, we can't use the maxx/maxy\n // optimization, sadly\n if (axisx.options.inverseTransform)\n maxx = Number.MAX_VALUE;\n if (axisy.options.inverseTransform)\n maxy = Number.MAX_VALUE;\n\n if (s.lines.show || s.points.show) {\n for (j = 0; j < points.length; j += ps) {\n var x = points[j], y = points[j + 1];\n if (x == null)\n continue;\n\n // For points and lines, the cursor must be within a\n // certain distance to the data point\n if (x - mx > maxx || x - mx < -maxx ||\n y - my > maxy || y - my < -maxy)\n continue;\n\n // We have to calculate distances in pixels, not in\n // data units, because the scales of the axes may be different\n var dx = Math.abs(axisx.p2c(x) - mouseX),\n dy = Math.abs(axisy.p2c(y) - mouseY),\n dist = dx * dx + dy * dy; // we save the sqrt\n\n // use <= to ensure last point takes precedence\n // (last generally means on top of)\n if (dist < smallestDistance) {\n smallestDistance = dist;\n item = [i, j / ps];\n }\n }\n }\n\n if (s.bars.show && !item) { // no other point can be nearby\n\n var barLeft, barRight;\n\n switch (s.bars.align) {\n case \"left\":\n barLeft = 0;\n break;\n case \"right\":\n barLeft = -s.bars.barWidth;\n break;\n default:\n barLeft = -s.bars.barWidth / 2;\n }\n\n barRight = barLeft + s.bars.barWidth;\n\n for (j = 0; j < points.length; j += ps) {\n var x = points[j], y = points[j + 1], b = points[j + 2];\n if (x == null)\n continue;\n\n // for a bar graph, the cursor must be inside the bar\n if (series[i].bars.horizontal ?\n (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&\n my >= y + barLeft && my <= y + barRight) :\n (mx >= x + barLeft && mx <= x + barRight &&\n my >= Math.min(b, y) && my <= Math.max(b, y)))\n item = [i, j / ps];\n }\n }\n }\n\n if (item) {\n i = item[0];\n j = item[1];\n ps = series[i].datapoints.pointsize;\n\n return {\n datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),\n dataIndex: j,\n series: series[i],\n seriesIndex: i\n };\n }\n\n return null;\n }\n\n function onMouseMove(e) {\n if (options.grid.hoverable)\n triggerClickHoverEvent(\"plothover\", e,\n function(s) { return s[\"hoverable\"] != false; });\n }\n\n function onMouseLeave(e) {\n if (options.grid.hoverable)\n triggerClickHoverEvent(\"plothover\", e,\n function(s) { return false; });\n }\n\n function onClick(e) {\n if (plot.isSelecting) {\n return;\n }\n\n triggerClickHoverEvent(\"plotclick\", e, function(s) { return s[\"clickable\"] != false; });\n }\n\n // grafana addon - added to support mobile devices click in plot\n function onTouch(e) {\n if (!e.cancelable) {\n return;\n }\n\n if (!eventHolder.is(e.target) && eventHolder.has(e.target).length === 0) {\n triggerClickHoverEvent(\"plotleave\", e, function(s) { false; });\n return;\n }\n\n onMouseMove(mapFromTouchEvent(e));\n e.preventDefault();\n }\n\n // grafana addon - added to support mobile devices and mapping touch event to click event structure\n function mapFromTouchEvent(e) {\n if (!e || !e.originalEvent) {\n return e;\n }\n\n if (e.pageX && e.pageY) {\n return e;\n }\n\n var original = e.originalEvent;\n\n if (original.changedTouches.length === 0) {\n return e;\n }\n\n var touch = original.changedTouches[0];\n e.pageX = touch.pageX;\n e.pageY = touch.pageY;\n\n return e;\n }\n\n // trigger click or hover event (they send the same parameters\n // so we share their code)\n function triggerClickHoverEvent(eventname, event, seriesFilter) {\n var offset = eventHolder.offset(),\n canvasX = event.pageX - offset.left - plotOffset.left,\n canvasY = event.pageY - offset.top - plotOffset.top,\n pos = canvasToAxisCoords({ left: canvasX, top: canvasY });\n\n pos.pageX = event.pageX;\n pos.pageY = event.pageY;\n\n // Add ctrlKey and metaKey to event\n pos.ctrlKey = event.ctrlKey;\n pos.metaKey = event.metaKey;\n\n var item = findNearbyItem(canvasX, canvasY, seriesFilter);\n\n if (item) {\n // fill in mouse pos for any listeners out there\n item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);\n item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);\n }\n\n if (options.grid.autoHighlight) {\n // clear auto-highlights\n for (var i = 0; i < highlights.length; ++i) {\n var h = highlights[i];\n if (h.auto == eventname &&\n !(item && h.series == item.series &&\n h.point[0] == item.datapoint[0] &&\n h.point[1] == item.datapoint[1]))\n unhighlight(h.series, h.point);\n }\n\n if (item)\n highlight(item.series, item.datapoint, eventname);\n }\n\n placeholder.trigger(eventname, [pos, item]);\n }\n\n function triggerRedrawOverlay() {\n var t = options.interaction.redrawOverlayInterval;\n if (t == -1) { // skip event queue\n drawOverlay();\n return;\n }\n\n if (!redrawTimeout)\n redrawTimeout = setTimeout(drawOverlay, t);\n }\n\n function drawOverlay() {\n redrawTimeout = null;\n\n // draw highlights\n octx.save();\n overlay.clear();\n octx.translate(plotOffset.left, plotOffset.top);\n\n var i, hi;\n for (i = 0; i < highlights.length; ++i) {\n hi = highlights[i];\n\n if (hi.series.bars.show)\n drawBarHighlight(hi.series, hi.point);\n else\n drawPointHighlight(hi.series, hi.point);\n }\n octx.restore();\n\n executeHooks(hooks.drawOverlay, [octx]);\n }\n\n function highlight(s, point, auto) {\n if (typeof s == \"number\")\n s = series[s];\n\n if (typeof point == \"number\") {\n var ps = s.datapoints.pointsize;\n point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n }\n\n var i = indexOfHighlight(s, point);\n if (i == -1) {\n highlights.push({ series: s, point: point, auto: auto });\n\n triggerRedrawOverlay();\n }\n else if (!auto)\n highlights[i].auto = false;\n }\n\n function unhighlight(s, point) {\n if (s == null && point == null) {\n highlights = [];\n triggerRedrawOverlay();\n return;\n }\n\n if (typeof s == \"number\")\n s = series[s];\n\n if (typeof point == \"number\") {\n var ps = s.datapoints.pointsize;\n point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n }\n\n var i = indexOfHighlight(s, point);\n if (i != -1) {\n highlights.splice(i, 1);\n\n triggerRedrawOverlay();\n }\n }\n\n function indexOfHighlight(s, p) {\n for (var i = 0; i < highlights.length; ++i) {\n var h = highlights[i];\n if (h.series == s && h.point[0] == p[0]\n && h.point[1] == p[1])\n return i;\n }\n return -1;\n }\n\n function drawPointHighlight(series, point) {\n var x = point[0], y = point[1],\n axisx = series.xaxis, axisy = series.yaxis,\n highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();\n\n if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n return;\n\n var pointRadius = series.points.radius + series.points.lineWidth / 2;\n octx.lineWidth = pointRadius;\n octx.strokeStyle = highlightColor;\n var radius = 1.5 * pointRadius;\n x = axisx.p2c(x);\n y = axisy.p2c(y);\n\n octx.beginPath();\n if (series.points.symbol == \"circle\")\n octx.arc(x, y, radius, 0, 2 * Math.PI, false);\n else\n series.points.symbol(octx, x, y, radius, false);\n octx.closePath();\n octx.stroke();\n }\n\n function drawBarHighlight(series, point) {\n var highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),\n fillStyle = highlightColor,\n barLeft;\n\n switch (series.bars.align) {\n case \"left\":\n barLeft = 0;\n break;\n case \"right\":\n barLeft = -series.bars.barWidth;\n break;\n default:\n barLeft = -series.bars.barWidth / 2;\n }\n\n octx.lineWidth = series.bars.lineWidth;\n octx.strokeStyle = highlightColor;\n\n drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,\n function() { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);\n }\n\n function getColorOrGradient(spec, bottom, top, defaultColor) {\n if (typeof spec == \"string\")\n return spec;\n else {\n // assume this is a gradient spec; IE currently only\n // supports a simple vertical gradient properly, so that's\n // what we support too\n var gradient = ctx.createLinearGradient(0, top, 0, bottom);\n\n for (var i = 0, l = spec.colors.length; i < l; ++i) {\n var c = spec.colors[i];\n if (typeof c != \"string\") {\n var co = $.color.parse(defaultColor);\n if (c.brightness != null)\n co = co.scale('rgb', c.brightness);\n if (c.opacity != null)\n co.a *= c.opacity;\n c = co.toString();\n }\n gradient.addColorStop(i / (l - 1), c);\n }\n\n return gradient;\n }\n }\n }\n\n // Add the plot function to the top level of the jQuery object\n\n $.plot = function(placeholder, data, options) {\n //var t0 = new Date();\n var plot = new Plot($(placeholder), data, options, $.plot.plugins);\n //(window.console ? console.log : alert)(\"time used (msecs): \" + ((new Date()).getTime() - t0.getTime()));\n return plot;\n };\n\n $.plot.version = \"0.8.3\";\n\n $.plot.plugins = [];\n\n // Also add the plot function as a chainable property\n\n $.fn.plot = function(data, options) {\n return this.each(function() {\n $.plot(this, data, options);\n });\n };\n\n // round to nearby lower multiple of base\n function floorInBase(n, base) {\n return base * Math.floor(n / base);\n }\n\n})(jQuery);\n","import * as React from 'react';\n\nimport { DataQuery, DataSourceJsonData } from '@grafana/schema';\n\nimport { ScopedVars } from './ScopedVars';\nimport { DataSourcePluginMeta, DataSourceSettings } from './datasource';\nimport { IconName } from './icon';\nimport { PanelData } from './panel';\nimport { AbsoluteTimeRange, RawTimeRange, TimeZone } from './time';\n\n// Plugin Extensions types\n// ---------------------------------------\n\nexport enum PluginExtensionTypes {\n link = 'link',\n component = 'component',\n function = 'function',\n}\n\ntype PluginExtensionBase = {\n id: string;\n type: PluginExtensionTypes;\n title: string;\n description: string;\n pluginId: string;\n};\nexport type PluginExtensionLink = PluginExtensionBase & {\n type: PluginExtensionTypes.link;\n path?: string;\n onClick?: (event?: React.MouseEvent) => void;\n icon?: IconName;\n category?: string;\n};\n\nexport type PluginExtensionComponentMeta = Omit<PluginExtensionComponent, 'component'>;\n\nexport type PluginExtensionComponent<Props = {}> = PluginExtensionBase & {\n type: PluginExtensionTypes.component;\n component: React.ComponentType<Props>;\n};\n\nexport type ComponentTypeWithExtensionMeta<Props = {}> = React.ComponentType<Props> & {\n meta: PluginExtensionComponentMeta;\n};\n\nexport type PluginExtensionFunction<Signature = () => void> = PluginExtensionBase & {\n type: PluginExtensionTypes.function;\n fn: Signature;\n};\n\nexport type PluginExtension = PluginExtensionLink | PluginExtensionComponent | PluginExtensionFunction;\n\n// Objects used for registering extensions (in app plugins)\n// --------------------------------------------------------\n\ntype PluginExtensionConfigBase = {\n /**\n * The title of the link extension\n */\n title: string;\n\n /**\n * A short description\n */\n description?: string;\n};\n\nexport type PluginExtensionAddedComponentConfig<Props = {}> = PluginExtensionConfigBase & {\n /**\n * The target extension points where the component will be added\n */\n targets: string | string[];\n\n /**\n * The title of the component\n */\n title: string;\n\n /**\n * A short description of the component\n */\n description: string;\n\n /**\n * The React component that will added to the target extension points\n */\n component: React.ComponentType<Props>;\n};\nexport type PluginExtensionAddedFunctionConfig<Signature = unknown> = PluginExtensionConfigBase & {\n /**\n * The target extension points where the component will be added\n */\n targets: string | string[];\n\n /**\n * The function to be executed\n */\n fn: Signature;\n};\n\nexport type PluginAddedLinksConfigureFunc<Context extends object> = (context: Readonly<Context> | undefined) =>\n | Partial<{\n title: string;\n description: string;\n path: string;\n onClick: (event: React.MouseEvent | undefined, helpers: PluginExtensionEventHelpers<Context>) => void;\n icon: IconName;\n category: string;\n }>\n | undefined;\n\nexport type PluginExtensionAddedLinkConfig<Context extends object = object> = PluginExtensionConfigBase & {\n /**\n * The target extension points where the link will be added\n */\n targets: string | string[];\n\n /** A URL path that will be used as the href for the rendered link extension\n * (It is optional, because in some cases the action will be handled by the `onClick` handler instead of navigating to a new page)\n */\n path?: string;\n\n /** A URL path that will be used as the href for the rendered link extension\n * (It is optional, because in some cases the action will be handled by the `onClick` handler instead of navigating to a new page)\n * path?: string;\n *\n * A function that will be called when the link is clicked\n * (It is called with the original event object)\n */\n onClick?: (event: React.MouseEvent | undefined, helpers: PluginExtensionEventHelpers<Context>) => void;\n\n // (Optional) A function that can be used to configure the extension dynamically based on the extension point's context\n configure?: PluginAddedLinksConfigureFunc<Context>;\n\n // (Optional) A icon that can be displayed in the ui for the extension option.\n icon?: IconName;\n\n // (Optional) A category to be used when grouping the options in the ui\n category?: string;\n};\n\nexport type PluginExtensionExposedComponentConfig<Props = {}> = PluginExtensionConfigBase & {\n /**\n * The unique identifier of the component\n * Shoud be in the format of `<pluginId>/<componentName>/<componentVersion>`. e.g. `myorg-todo-app/todo-list/v1`\n */\n id: string;\n\n /**\n * The React component that will be exposed to other plugins\n */\n component: React.ComponentType<Props>;\n};\n\nexport type PluginExtensionOpenModalOptions = {\n // The title of the modal\n title: string;\n // A React element that will be rendered inside the modal\n body: React.ElementType<{ onDismiss?: () => void }>;\n // Width of the modal in pixels or percentage\n width?: string | number;\n // Height of the modal in pixels or percentage\n height?: string | number;\n};\n\nexport type PluginExtensionEventHelpers<Context extends object = object> = {\n context?: Readonly<Context>;\n // The ID of the extension point that triggered this event\n extensionPointId: string;\n // Opens a modal dialog and renders the provided React component inside it\n openModal: (options: PluginExtensionOpenModalOptions) => void;\n /**\n * @internal\n * Opens the extension sidebar with the registered component.\n * @param componentTitle The title of the component to be opened in the sidebar.\n * @param props The props to be passed to the component.\n */\n openSidebar: (componentTitle: string, props?: Record<string, unknown>) => void;\n /**\n * @internal\n * Closes the extension sidebar.\n */\n closeSidebar: () => void;\n /**\n * @internal\n * Toggles the extension sidebar with the registered component.\n * If the sidebar is open with the same component, it will be closed.\n * If the sidebar is closed or open with a different component, it will be opened with the specified component.\n * @param componentTitle The title of the component to be toggled in the sidebar.\n * @param props The props to be passed to the component.\n */\n toggleSidebar: (componentTitle: string, props?: Record<string, unknown>) => void;\n};\n\n// Extension Points & Contexts\n// --------------------------------------------------------\n\n// Extension Points available in core Grafana\nexport enum PluginExtensionPoints {\n AlertInstanceAction = 'grafana/alerting/instance/action',\n AlertingHomePage = 'grafana/alerting/home',\n AlertingAlertingRuleAction = 'grafana/alerting/alertingrule/action',\n AlertingRecordingRuleAction = 'grafana/alerting/recordingrule/action',\n AlertingRuleQueryEditor = 'grafana/alerting/alertingrule/queryeditor',\n CommandPalette = 'grafana/commandpalette/action',\n DashboardPanelMenu = 'grafana/dashboard/panel/menu',\n DashboardEmpty = 'grafana/dashboard/empty',\n DataSourceConfig = 'grafana/datasources/config',\n DataSourceConfigActions = 'grafana/datasources/config/actions',\n DataSourceConfigErrorStatus = 'grafana/datasources/config/error-status',\n DataSourceConfigStatus = 'grafana/datasources/config/status',\n ExploreToolbarAction = 'grafana/explore/toolbar/action',\n UserProfileTab = 'grafana/user/profile/tab',\n TraceViewDetails = 'grafana/traceview/details',\n TraceViewHeaderActions = 'grafana/traceview/header/actions',\n QueryEditorRowAdaptiveTelemetryV1 = 'grafana/query-editor-row/adaptivetelemetry/v1',\n TraceViewResourceAttributes = 'grafana/traceview/resource-attributes',\n LogsViewResourceAttributes = 'grafana/logsview/resource-attributes',\n AppChrome = 'grafana/app/chrome/v1',\n ExtensionSidebar = 'grafana/extension-sidebar/v0-alpha',\n}\n\n// Don't use directly in a plugin!\n// Extension point IDs that contain dynamic segments and are not valid as static values — they require runtime substitution of certain parts.\n// (They cannot be used as is. E.g. \"grafana/nav-landing-page/.*/v1\" becomes \"grafana/nav-landing-page/observability/v1\" during runtime.)\nexport enum PluginExtensionPointPatterns {\n NavLandingPage = 'grafana/dynamic/nav-landing-page/nav-id-.*/v1',\n}\n\n// Extension Points available in plugins\nexport enum PluginExtensionExposedComponents {\n CentralAlertHistorySceneV1 = 'grafana/central-alert-history-scene/v1',\n AddToDashboardFormV1 = 'grafana/add-to-dashboard-form/v1',\n}\n\nexport type PluginExtensionPanelContext = {\n pluginId: string;\n id: number;\n title: string;\n timeRange: RawTimeRange;\n timeZone: TimeZone;\n dashboard: Dashboard;\n targets: DataQuery[];\n scopedVars?: ScopedVars;\n data?: PanelData;\n};\n\nexport type CentralAlertHistorySceneV1Props = {\n defaultLabelsFilter?: string;\n defaultTimeRange?: { from: string; to: string };\n hideFilters?: boolean;\n hideAlertRuleColumn?: boolean;\n};\n\nexport type PluginExtensionQueryEditorRowAdaptiveTelemetryV1Context = {\n /** An ordered list of lower-case [a-z]+ string identifiers to provide context clues of where this component is being embedded and how we might want to consider displaying it */\n contextHints?: string[];\n query?: DataQuery & { expr?: string };\n};\n\nexport type PluginExtensionDataSourceConfigContext<\n JsonData extends DataSourceJsonData = DataSourceJsonData,\n SecureJsonData = {},\n> = {\n // The current datasource settings\n dataSource: DataSourceSettings<JsonData>;\n\n // Meta information about the datasource plugin\n dataSourceMeta: DataSourcePluginMeta;\n\n // Testing status\n testingStatus?: {\n message?: string | null;\n status?: string | null;\n };\n\n // Can be used to update the `jsonData` field on the datasource\n // (Only updates the form, it still needs to be saved by the user)\n setJsonData: (jsonData: JsonData) => void;\n setSecureJsonData: (secureJsonData: SecureJsonData) => void;\n};\n\nexport type PluginExtensionCommandPaletteContext = {};\n\nexport type PluginExtensionResourceAttributesContext = {\n // Key-value pairs of resource attributes, attribute name is the key\n attributes: Record<string, string[]>;\n spanAttributes?: Record<string, string[]>;\n timeRange: AbsoluteTimeRange;\n datasource: {\n type: string;\n uid: string;\n };\n};\n\nexport type DataSourceConfigErrorStatusContext = {\n dataSource: {\n type: string;\n uid: string;\n name: string;\n };\n testingStatus: {\n message?: string | null;\n status?: string | null;\n details?: Record<string, unknown>;\n };\n};\n\nexport type PluginExtensionDataSourceConfigActionsContext = {\n dataSource: {\n type: string;\n uid: string;\n name: string;\n typeName: string;\n };\n};\n\nexport type PluginExtensionDataSourceConfigStatusContext = {\n dataSource: {\n type: string;\n uid: string;\n name: string;\n typeName: string;\n };\n testingStatus?: {\n message?: string | null;\n status?: string | null;\n details?: Record<string, unknown>;\n };\n severity: 'success' | 'error' | 'warning' | 'info';\n};\n\ntype Dashboard = {\n uid: string;\n title: string;\n tags: string[];\n};\n","import { Observable, from, retry, catchError, filter, map, mergeMap } from 'rxjs';\n\nimport { isLiveChannelMessageEvent, LiveChannelScope } from '@grafana/data';\nimport { config, getBackendSrv, getGrafanaLiveSrv } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\n\nimport { getAPINamespace } from '../../api/utils';\n\nimport {\n ListOptions,\n ListOptionsFieldSelector,\n ListOptionsLabelSelector,\n MetaStatus,\n Resource,\n ResourceForCreate,\n ResourceList,\n ResourceClient,\n ObjectMeta,\n WatchOptions,\n K8sAPIGroupList,\n AnnoKeySavedFromUI,\n ResourceEvent,\n ResourceClientWriteParams,\n GroupVersionResource,\n} from './types';\n\nexport class ScopedResourceClient<T = object, S = object, K = string> implements ResourceClient<T, S, K> {\n readonly url: string;\n readonly gvr: GroupVersionResource;\n\n constructor(gvr: GroupVersionResource, namespaced = true) {\n const ns = namespaced ? `namespaces/${getAPINamespace()}/` : '';\n this.gvr = gvr;\n this.url = `/apis/${gvr.group}/${gvr.version}/${ns}${gvr.resource}`;\n }\n\n public async get(name: string): Promise<Resource<T, S, K>> {\n return getBackendSrv().get<Resource<T, S, K>>(`${this.url}/${name}`);\n }\n\n public watch(params?: WatchOptions): Observable<ResourceEvent<T, S, K>> {\n const requestParams = {\n watch: true,\n labelSelector: this.parseListOptionsSelector(params?.labelSelector),\n fieldSelector: this.parseListOptionsSelector(params?.fieldSelector),\n };\n if (params?.name) {\n requestParams.fieldSelector = `metadata.name=${params.name}`;\n }\n\n // For now, watch over live only supports provisioning\n if (this.gvr.group === 'provisioning.grafana.app') {\n let query = '';\n if (requestParams.fieldSelector?.startsWith('metadata.name=')) {\n query = requestParams.fieldSelector.substring('metadata.name'.length);\n }\n return getGrafanaLiveSrv()\n .getStream<ResourceEvent<T, S, K>>({\n scope: LiveChannelScope.Watch,\n namespace: this.gvr.group,\n path: `${this.gvr.version}/${this.gvr.resource}${query}/${contextSrv.user.uid}`,\n })\n .pipe(\n filter((event) => isLiveChannelMessageEvent(event)),\n map((event) => event.message)\n );\n }\n\n const decoder = new TextDecoder();\n return getBackendSrv()\n .chunked({\n url: this.url,\n params: requestParams,\n method: 'GET',\n })\n .pipe(\n filter((response) => response.ok && response.data instanceof Uint8Array),\n map((response) => {\n const text = decoder.decode(response.data);\n return text.split('\\n');\n }),\n mergeMap((text) => from(text)),\n filter((line) => line.length > 0),\n map((line) => {\n try {\n return JSON.parse(line);\n } catch (e) {\n console.warn('Invalid JSON in watch stream:', e, line);\n return null;\n }\n }),\n filter((event): event is ResourceEvent<T, S, K> => event !== null),\n retry({ count: 3, delay: 1000 }),\n catchError((error) => {\n console.error('Watch stream error:', error);\n throw error;\n })\n );\n }\n\n public async subresource<S>(name: string, path: string, params?: Record<string, unknown>): Promise<S> {\n return getBackendSrv().get<S>(`${this.url}/${name}/${path}`, params);\n }\n\n public async list(opts?: ListOptions | undefined): Promise<ResourceList<T, S, K>> {\n const finalOpts = opts || {};\n finalOpts.labelSelector = this.parseListOptionsSelector(finalOpts?.labelSelector);\n finalOpts.fieldSelector = this.parseListOptionsSelector(finalOpts?.fieldSelector);\n\n return getBackendSrv().get<ResourceList<T, S, K>>(this.url, opts);\n }\n\n public async create(obj: ResourceForCreate<T, K>, params?: ResourceClientWriteParams): Promise<Resource<T, S, K>> {\n if (!obj.metadata.name && !obj.metadata.generateName) {\n const login = contextSrv.user.login;\n // GenerateName lets the apiserver create a unique name by appending random characters to the prefix.\n // This strips out special characters, numbers, and symbols to ensure a valid prefix.\n const alphabeticChars = login ? login.replace(/[^a-zA-Z]/g, '').slice(0, 2) : '';\n obj.metadata.generateName = alphabeticChars || 'g';\n }\n setSavedFromUIAnnotation(obj.metadata);\n return getBackendSrv().post(this.url, obj, {\n params,\n });\n }\n\n public async update(obj: Resource<T, S, K>, params?: ResourceClientWriteParams): Promise<Resource<T, S, K>> {\n setSavedFromUIAnnotation(obj.metadata);\n const url = `${this.url}/${obj.metadata.name}`;\n return getBackendSrv().put<Resource<T, S, K>>(url, obj, {\n params,\n });\n }\n\n public async delete(name: string, showSuccessAlert: boolean): Promise<MetaStatus> {\n return getBackendSrv().delete<MetaStatus>(`${this.url}/${name}`, undefined, {\n showSuccessAlert,\n });\n }\n\n private parseListOptionsSelector = parseListOptionsSelector;\n}\n\n// add the origin annotations so we know what was set from the UI\nfunction setSavedFromUIAnnotation(meta: Partial<ObjectMeta>) {\n if (!meta.annotations) {\n meta.annotations = {};\n }\n meta.annotations[AnnoKeySavedFromUI] = config.buildInfo.versionString;\n}\n\nexport class DatasourceAPIVersions {\n private apiVersions?: { [pluginID: string]: string };\n\n async get(pluginID: string): Promise<string | undefined> {\n if (this.apiVersions) {\n return this.apiVersions[pluginID];\n }\n const apis = await getBackendSrv().get<K8sAPIGroupList>('/apis');\n const apiVersions: { [pluginID: string]: string } = {};\n apis.groups.forEach((group) => {\n if (group.name.includes('datasource.grafana.app')) {\n const id = group.name.split('.')[0];\n apiVersions[id] = group.preferredVersion.version;\n // workaround for plugins that don't append '-datasource' for the group name\n // e.g. org-plugin-datasource uses org-plugin.datasource.grafana.app\n if (!id.endsWith('-datasource')) {\n if (!id.includes('-')) {\n // workaroud for Grafana plugins that don't include the org either\n // e.g. testdata uses testdata.datasource.grafana.app\n apiVersions[`grafana-${id}-datasource`] = group.preferredVersion.version;\n } else {\n apiVersions[`${id}-datasource`] = group.preferredVersion.version;\n }\n }\n }\n });\n this.apiVersions = apiVersions;\n return apiVersions[pluginID];\n }\n}\n\nexport const parseListOptionsSelector = (selector: ListOptionsLabelSelector | ListOptionsFieldSelector | undefined) => {\n if (!Array.isArray(selector)) {\n return selector;\n }\n\n return selector\n .map((label) => {\n const key = String(label.key);\n const operator = label.operator;\n\n switch (operator) {\n case '=':\n case '!=':\n return `${key}${operator}${label.value}`;\n\n case 'in':\n case 'notin':\n return `${key} ${operator} (${label.value.join(',')})`;\n\n case '':\n case '!':\n return `${operator}${key}`;\n\n default:\n return null;\n }\n })\n .filter(Boolean)\n .join(',');\n};\n","import { DashboardLayoutManager } from './DashboardLayoutManager';\n\nexport interface DashboardLayoutGrid extends DashboardLayoutManager {\n /**\n * Merge the layout with another layout\n */\n mergeGrid(other: DashboardLayoutGrid): void;\n}\n\nexport function isDashboardLayoutGrid(obj: DashboardLayoutManager): obj is DashboardLayoutGrid {\n return 'mergeGrid' in obj;\n}\n","import { css, cx } from '@emotion/css';\nimport { forwardRef, ReactNode } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport interface Props {\n /** Children should be a single <Tab /> or an array of <Tab /> */\n children: ReactNode;\n className?: string;\n /** For hiding the bottom border (on PageHeader for example) */\n hideBorder?: boolean;\n}\n\n/**\n * A composition component for rendering a TabBar with Tabs for navigation.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/navigation-tabs--docs\n */\nexport const TabsBar = forwardRef<HTMLDivElement, Props>(({ children, className, hideBorder = false }, ref) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={cx(styles.tabsWrapper, hideBorder && styles.noBorder, className)} ref={ref}>\n <div className={styles.tabs} role=\"tablist\">\n {children}\n </div>\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n tabsWrapper: css({\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n overflowX: 'auto',\n }),\n noBorder: css({\n borderBottom: 0,\n }),\n tabs: css({\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }),\n});\n\nTabsBar.displayName = 'TabsBar';\n","import { RelativeTimeRange } from '@grafana/data';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { ExpressionQuery, ExpressionQueryType } from '../../../expressions/types';\n\nconst FALL_BACK_TIME_RANGE = { from: 21600, to: 0 };\n\nexport const getTimeRangeForExpression = (query: ExpressionQuery, queries: AlertQuery[]): RelativeTimeRange => {\n const referencedRefIds: string[] | undefined = getReferencedIds(query, queries);\n\n if (!referencedRefIds) {\n return FALL_BACK_TIME_RANGE;\n }\n\n const { from, to } = getTimeRanges(referencedRefIds, queries);\n\n if (!from.length && !to.length) {\n return FALL_BACK_TIME_RANGE;\n }\n\n return {\n from: Math.max(...from),\n to: Math.min(...to),\n };\n};\n\nconst getReferencedIds = (model: ExpressionQuery, queries: AlertQuery[]): string[] | undefined => {\n switch (model.type) {\n case ExpressionQueryType.classic:\n return getReferencedIdsForClassicCondition(model);\n case ExpressionQueryType.math:\n case ExpressionQueryType.sql:\n return getReferencedIdsForMath(model, queries);\n case ExpressionQueryType.resample:\n case ExpressionQueryType.reduce:\n case ExpressionQueryType.threshold:\n return getReferencedIdsForReduce(model);\n }\n};\n\nconst getReferencedIdsForClassicCondition = (model: ExpressionQuery) => {\n return model.conditions?.map((condition) => {\n return condition.query.params[0];\n });\n};\n\nconst getTimeRanges = (referencedRefIds: string[], queries: AlertQuery[]) => {\n const from: number[] = [];\n const to = [FALL_BACK_TIME_RANGE.to];\n for (const referencedRefIdsKey of referencedRefIds) {\n const query = queries.find((query) => query.refId === referencedRefIdsKey);\n\n if (!query || !query.relativeTimeRange) {\n continue;\n }\n from.push(query.relativeTimeRange.from);\n to.push(query.relativeTimeRange.to);\n }\n\n return {\n from,\n to,\n };\n};\n\nconst getReferencedIdsForMath = (model: ExpressionQuery, queries: AlertQuery[]) => {\n return (\n queries\n // filter queries of type query and filter expression on if it includes any refIds\n .filter((q) => q.queryType === 'query' && model.expression?.includes(q.refId))\n .map((q) => {\n return q.refId;\n })\n );\n};\n\nconst getReferencedIdsForReduce = (model: ExpressionQuery) => {\n return model.expression ? [model.expression] : undefined;\n};\n","import { reject } from 'lodash';\nimport { Observable, OperatorFunction, ReplaySubject, Unsubscribable, of } from 'rxjs';\nimport { catchError, map, share } from 'rxjs/operators';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DataFrameJSON,\n LoadingState,\n PanelData,\n TimeRange,\n dataFrameFromJSON,\n getDefaultTimeRange,\n preProcessPanelData,\n rangeUtil,\n withLoadingIndicator,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { DataSourceWithBackend, FetchResponse, getDataSourceSrv, toDataQueryError } from '@grafana/runtime';\nimport { BackendSrv, getBackendSrv } from 'app/core/services/backend_srv';\nimport { isExpressionQuery } from 'app/features/expressions/guards';\nimport { cancelNetworkRequestsOnUnsubscribe } from 'app/features/query/state/processing/canceler';\nimport { setStructureRevision } from 'app/features/query/state/processing/revision';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { LinkError, createDAGFromQueriesSafe, getDescendants } from '../components/rule-editor/dag';\nimport { getTimeRangeForExpression } from '../utils/timeRange';\n\nexport interface AlertingQueryResult {\n error?: string;\n status?: number; // HTTP status error\n frames: DataFrameJSON[];\n}\n\nexport interface AlertingQueryResponse {\n results: Record<string, AlertingQueryResult>;\n}\nexport class AlertingQueryRunner {\n private subject: ReplaySubject<Record<string, PanelData>>;\n private subscription?: Unsubscribable;\n private lastResult: Record<string, PanelData>;\n\n constructor(\n private backendSrv = getBackendSrv(),\n private dataSourceSrv = getDataSourceSrv()\n ) {\n this.subject = new ReplaySubject(1);\n this.lastResult = {};\n }\n\n get(): Observable<Record<string, PanelData>> {\n return this.subject.asObservable();\n }\n\n async run(queries: AlertQuery[], condition: string) {\n const queriesToRun = await this.prepareQueries(queries);\n\n // if we don't have any queries to run we just bail\n if (queriesToRun.length === 0) {\n return;\n }\n\n // if the condition isn't part of the queries to run, try to run the alert rule without it.\n // It indicates that the \"condition\" node points to a non-existent node. We still want to be able to evaluate the other nodes.\n const isConditionAvailable = queriesToRun.some((query) => query.refId === condition);\n const ruleCondition = isConditionAvailable ? condition : '';\n\n this.subscription = runRequest(this.backendSrv, queriesToRun, ruleCondition).subscribe({\n next: (dataPerQuery) => {\n const nextResult = applyChange(dataPerQuery, (refId, data) => {\n const previous = this.lastResult[refId];\n const preProcessed = preProcessPanelData(data, previous);\n return setStructureRevision(preProcessed, previous);\n });\n\n // add link errors to the panelData and mark them as errors\n const [_, linkErrors] = createDAGFromQueriesSafe(queries);\n linkErrors.forEach((linkError) => {\n nextResult[linkError.source] = createLinkErrorPanelData(linkError);\n });\n\n this.lastResult = nextResult;\n this.subject.next(this.lastResult);\n },\n\n error: (error: Error) => {\n this.lastResult = mapErrorToPanelData(this.lastResult, error);\n this.subject.next(this.lastResult);\n },\n });\n }\n\n // this function will omit any invalid queries and all of its descendants from the list of queries\n // to do this we will convert the list of queries into a DAG and walk the invalid node's output edges recursively\n async prepareQueries(queries: AlertQuery[]): Promise<AlertQuery[]> {\n const queriesToExclude: string[] = [];\n\n // find all invalid nodes and omit those\n for (const query of queries) {\n const refId = query.model.refId;\n\n // expression queries cannot be excluded / filtered out\n if (isExpressionQuery(query.model)) {\n continue;\n }\n\n const dataSourceInstance = await this.dataSourceSrv.get(query.datasourceUid);\n const skipRunningQuery =\n dataSourceInstance instanceof DataSourceWithBackend &&\n dataSourceInstance.filterQuery &&\n !dataSourceInstance.filterQuery(query.model);\n\n if (skipRunningQuery) {\n queriesToExclude.push(refId);\n }\n }\n\n // exclude nodes that failed to link and their child nodes from the final queries array by trying to parse the graph\n // ⚠️ also make sure all dependent nodes are omitted, otherwise we will be evaluating a broken graph with missing references\n const [cleanGraph] = createDAGFromQueriesSafe(queries);\n const cleanNodes = Object.keys(cleanGraph.nodes);\n\n // find descendant nodes of data queries that have been excluded\n queriesToExclude.forEach((refId) => {\n const descendants = getDescendants(refId, cleanGraph);\n queriesToExclude.push(...descendants);\n });\n\n // also exclude all nodes that aren't in cleanGraph, this means they point to other broken nodes\n const nodesNotInGraph = queries.filter((query) => !cleanNodes.includes(query.refId));\n nodesNotInGraph.forEach((node) => {\n queriesToExclude.push(node.refId);\n });\n\n return reject(queries, (query) => queriesToExclude.includes(query.refId));\n }\n\n cancel() {\n if (!this.subscription) {\n return;\n }\n this.subscription.unsubscribe();\n\n let requestIsRunning = false;\n\n const nextResult = applyChange(this.lastResult, (refId, data) => {\n if (data.state === LoadingState.Loading) {\n requestIsRunning = true;\n }\n\n return {\n ...data,\n state: LoadingState.Done,\n };\n });\n\n if (requestIsRunning) {\n this.subject.next(nextResult);\n }\n }\n\n destroy() {\n if (this.subject) {\n this.subject.complete();\n }\n\n this.cancel();\n }\n}\n\nconst runRequest = (\n backendSrv: BackendSrv,\n queries: AlertQuery[],\n condition: string\n): Observable<Record<string, PanelData>> => {\n const initial = initialState(queries, LoadingState.Loading);\n const request = {\n data: { data: queries, condition },\n url: '/api/v1/eval',\n method: 'POST',\n requestId: uuidv4(),\n };\n\n return withLoadingIndicator({\n whileLoading: initial,\n source: backendSrv.fetch<AlertingQueryResponse>(request).pipe(\n mapToPanelData(initial),\n catchError((error) => of(mapErrorToPanelData(initial, error))),\n cancelNetworkRequestsOnUnsubscribe(backendSrv, request.requestId),\n share()\n ),\n });\n};\n\nconst initialState = (queries: AlertQuery[], state: LoadingState): Record<string, PanelData> => {\n return queries.reduce((dataByQuery: Record<string, PanelData>, query) => {\n dataByQuery[query.refId] = {\n state,\n series: [],\n timeRange: getTimeRange(query, queries),\n };\n\n return dataByQuery;\n }, {});\n};\n\nconst getTimeRange = (query: AlertQuery, queries: AlertQuery[]): TimeRange => {\n if (isExpressionQuery(query.model)) {\n const relative = getTimeRangeForExpression(query.model, queries);\n return rangeUtil.relativeToTimeRange(relative);\n }\n\n if (!query.relativeTimeRange) {\n console.warn(`Query with refId: ${query.refId} did not have any relative time range, using default.`);\n return getDefaultTimeRange();\n }\n\n return rangeUtil.relativeToTimeRange(query.relativeTimeRange);\n};\n\nconst mapToPanelData = (\n dataByQuery: Record<string, PanelData>\n): OperatorFunction<FetchResponse<AlertingQueryResponse>, Record<string, PanelData>> => {\n return map((response) => {\n const { data } = response;\n const results: Record<string, PanelData> = {};\n\n for (const [refId, result] of Object.entries(data.results)) {\n const { error, status, frames = [] } = result;\n\n // extract errors from the /eval results\n const errors = error ? [{ message: error, refId, status }] : [];\n\n results[refId] = {\n errors,\n timeRange: dataByQuery[refId].timeRange,\n state: LoadingState.Done,\n series: frames.map(dataFrameFromJSON),\n };\n }\n\n return results;\n });\n};\n\nconst mapErrorToPanelData = (lastResult: Record<string, PanelData>, error: Error): Record<string, PanelData> => {\n const queryError = toDataQueryError(error);\n\n return applyChange(lastResult, (_refId, data) => {\n if (data.state === LoadingState.Error) {\n return data;\n }\n return {\n ...data,\n state: LoadingState.Error,\n error: queryError,\n };\n });\n};\n\nconst applyChange = (\n initial: Record<string, PanelData>,\n change: (refId: string, data: PanelData) => PanelData\n): Record<string, PanelData> => {\n const nextResult: Record<string, PanelData> = {};\n\n for (const [refId, data] of Object.entries(initial)) {\n nextResult[refId] = change(refId, data);\n }\n\n return nextResult;\n};\n\nconst createLinkErrorPanelData = (error: LinkError): PanelData => ({\n series: [],\n state: LoadingState.Error,\n errors: [\n {\n message: createLinkErrorMessage(error),\n },\n ],\n timeRange: getDefaultTimeRange(),\n});\n\nfunction createLinkErrorMessage(error: LinkError): string {\n const isSelfReference = error.source === error.target;\n\n return isSelfReference\n ? t('alerting.dag.self-reference', \"You can't link an expression to itself\")\n : t(\n 'alerting.dag.missing-reference',\n `Expression \"{{source}}\" failed to run because \"{{target}}\" is missing or also failed.`,\n {\n source: error.source,\n target: error.target,\n }\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { LoadingState, PanelData } from '@grafana/data';\n\nimport { AlertQuery } from '../../../../../../types/unified-alerting-dto';\nimport { AlertingQueryRunner } from '../../../state/AlertingQueryRunner';\n\nexport function useAlertQueryRunner() {\n const [queryPreviewData, setQueryPreviewData] = useState<Record<string, PanelData>>({});\n\n const runner = useRef(new AlertingQueryRunner());\n\n useEffect(() => {\n const currentRunner = runner.current;\n\n currentRunner.get().subscribe((data) => {\n setQueryPreviewData(data);\n });\n\n return () => {\n currentRunner.destroy();\n };\n }, []);\n\n const clearPreviewData = useCallback(() => {\n setQueryPreviewData({});\n }, []);\n\n const cancelQueries = useCallback(() => {\n runner.current.cancel();\n }, []);\n\n const runQueries = useCallback((queriesToPreview: AlertQuery[], condition: string) => {\n runner.current.run(queriesToPreview, condition);\n }, []);\n\n const isPreviewLoading = useMemo(() => {\n return Object.values(queryPreviewData).some((d) => d.state === LoadingState.Loading);\n }, [queryPreviewData]);\n\n return { queryPreviewData, runQueries, cancelQueries, isPreviewLoading, clearPreviewData };\n}\n","import * as React from 'react';\n\nimport { CombinedRule, RuleIdentifier } from 'app/types/unified-alerting';\n\ninterface Context {\n rule: CombinedRule;\n identifier: RuleIdentifier;\n}\n\nconst AlertRuleContext = React.createContext<Context | undefined>(undefined);\n\ntype Props = Context & React.PropsWithChildren & {};\n\nconst AlertRuleProvider = ({ children, rule, identifier }: Props) => {\n const value: Context = {\n rule,\n identifier,\n };\n\n return <AlertRuleContext.Provider value={value}>{children}</AlertRuleContext.Provider>;\n};\n\nconst useAlertRule = () => {\n const context = React.useContext(AlertRuleContext);\n\n if (context === undefined) {\n throw new Error('useAlertRule must be used within a AlertRuleContext');\n }\n\n return context;\n};\n\nexport { AlertRuleProvider, useAlertRule };\n","import { createSlice, createEntityAdapter, Reducer, AnyAction, PayloadAction } from '@reduxjs/toolkit';\n\nimport { PanelPlugin } from '@grafana/data';\n\nimport { STATE_PREFIX } from '../constants';\nimport { CatalogPlugin, ReducerState, RequestStatus } from '../types';\n\nimport {\n fetchDetails,\n install,\n uninstall,\n loadPluginDashboards,\n panelPluginLoaded,\n fetchAllLocal,\n addPlugins,\n} from './actions';\n\nexport const pluginsAdapter = createEntityAdapter<CatalogPlugin>();\n\nconst isPendingRequest = (action: AnyAction) => new RegExp(`${STATE_PREFIX}\\/(.*)\\/pending`).test(action.type);\n\nconst isFulfilledRequest = (action: AnyAction) => new RegExp(`${STATE_PREFIX}\\/(.*)\\/fulfilled`).test(action.type);\n\nconst isRejectedRequest = (action: AnyAction) => new RegExp(`${STATE_PREFIX}\\/(.*)\\/rejected`).test(action.type);\n\n// Extract the trailing '/pending', '/rejected', or '/fulfilled'\nconst getOriginalActionType = (type: string) => {\n const separator = type.lastIndexOf('/');\n\n return type.substring(0, separator);\n};\n\nexport const initialState: ReducerState = {\n items: pluginsAdapter.getInitialState(),\n requests: {},\n\n // Backwards compatibility\n // (we need to have the following fields in the store as well to be backwards compatible with other parts of Grafana)\n // TODO<remove once the \"plugin_admin_enabled\" feature flag is removed>\n plugins: [],\n errors: [],\n searchQuery: '',\n hasFetched: false,\n dashboards: [],\n isLoadingPluginDashboards: false,\n panels: {},\n};\n\nconst slice = createSlice({\n name: 'plugins',\n initialState,\n reducers: {},\n extraReducers: (builder) =>\n builder\n .addCase(addPlugins, (state, action: PayloadAction<CatalogPlugin[]>) => {\n pluginsAdapter.upsertMany(state.items, action.payload);\n })\n // Fetch All local\n .addCase(fetchAllLocal.fulfilled, (state, action) => {\n pluginsAdapter.upsertMany(state.items, action.payload);\n })\n // Fetch Details\n .addCase(fetchDetails.fulfilled, (state, action) => {\n pluginsAdapter.updateOne(state.items, action.payload);\n })\n // Install\n .addCase(install.fulfilled, (state, action) => {\n pluginsAdapter.updateOne(state.items, action.payload);\n })\n // Uninstall\n .addCase(uninstall.fulfilled, (state, action) => {\n pluginsAdapter.updateOne(state.items, action.payload);\n })\n // Load a panel plugin (backward-compatibility)\n // TODO<remove once the \"plugin_admin_enabled\" feature flag is removed>\n .addCase(panelPluginLoaded, (state, action: PayloadAction<PanelPlugin>) => {\n state.panels[action.payload.meta.id] = action.payload;\n })\n // Start loading panel dashboards (backward-compatibility)\n // TODO<remove once the \"plugin_admin_enabled\" feature flag is removed>\n .addCase(loadPluginDashboards.pending, (state, action) => {\n state.isLoadingPluginDashboards = true;\n state.dashboards = [];\n })\n // Load panel dashboards (backward-compatibility)\n // TODO<remove once the \"plugin_admin_enabled\" feature flag is removed>\n .addCase(loadPluginDashboards.fulfilled, (state, action) => {\n state.isLoadingPluginDashboards = false;\n // eslint-disable-next-line\n state.dashboards = action.payload as any; // WritableDraft<PluginDashboard>[],...>\n })\n .addMatcher(isPendingRequest, (state, action) => {\n state.requests[getOriginalActionType(action.type)] = {\n status: RequestStatus.Pending,\n };\n })\n .addMatcher(isFulfilledRequest, (state, action) => {\n state.requests[getOriginalActionType(action.type)] = {\n status: RequestStatus.Fulfilled,\n };\n })\n .addMatcher(isRejectedRequest, (state, action: PayloadAction) => {\n state.requests[getOriginalActionType(action.type)] = {\n status: RequestStatus.Rejected,\n error: action.payload,\n };\n }),\n});\n\nexport const reducer: Reducer<ReducerState, AnyAction> = slice.reducer;\n","import { css } from '@emotion/css';\nimport { FC, CSSProperties, ComponentType } from 'react';\nimport * as React from 'react';\nimport { useMeasure } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { LegendPlacement } from '@grafana/schema';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { ScrollContainer } from '../ScrollContainer/ScrollContainer';\n\n/**\n * @beta\n */\nexport interface VizLayoutProps {\n width: number;\n height: number;\n legend?: React.ReactElement<VizLayoutLegendProps> | null;\n children: (width: number, height: number) => React.ReactNode;\n}\n\n/**\n * @beta\n */\nexport interface VizLayoutComponentType extends FC<VizLayoutProps> {\n Legend: ComponentType<VizLayoutLegendProps>;\n}\n\n/**\n * @beta\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/plugins-vizlayout--docs\n */\nexport const VizLayout: VizLayoutComponentType = ({ width, height, legend, children }) => {\n const theme = useTheme2();\n const styles = useStyles2(getVizStyles);\n const containerStyle: CSSProperties = {\n display: 'flex',\n width: `${width}px`,\n height: `${height}px`,\n };\n const [legendRef, legendMeasure] = useMeasure<HTMLDivElement>();\n\n if (!legend) {\n return (\n <>\n <div style={containerStyle} className={styles.viz}>\n {children(width, height)}\n </div>\n </>\n );\n }\n\n let { placement, maxHeight = '35%', maxWidth = '60%' } = legend.props;\n\n if (document.body.clientWidth < theme.breakpoints.values.lg) {\n placement = 'bottom';\n }\n\n let size: VizSize | null = null;\n\n const legendStyle: CSSProperties = {};\n\n switch (placement) {\n case 'bottom':\n containerStyle.flexDirection = 'column';\n legendStyle.maxHeight = maxHeight;\n\n if (legendMeasure.height) {\n size = { width, height: height - legendMeasure.height };\n }\n break;\n case 'right':\n containerStyle.flexDirection = 'row';\n legendStyle.maxWidth = maxWidth;\n\n if (legendMeasure.width) {\n size = { width: width - legendMeasure.width, height };\n }\n\n if (legend.props.width) {\n legendStyle.width = legend.props.width;\n size = { width: width - legend.props.width, height };\n }\n break;\n }\n\n // This happens when position is switched from bottom to right\n // Then we preserve old with for one render cycle until legend is measured in it's new position\n if (size?.width === 0) {\n size.width = width;\n }\n\n if (size?.height === 0) {\n size.height = height;\n }\n\n return (\n <div style={containerStyle}>\n <div className={styles.viz}>{size && children(size.width, size.height)}</div>\n <div style={legendStyle} ref={legendRef}>\n <ScrollContainer>{legend}</ScrollContainer>\n </div>\n </div>\n );\n};\n\nexport const getVizStyles = (theme: GrafanaTheme2) => {\n return {\n viz: css({\n flexGrow: 2,\n borderRadius: theme.shape.radius.default,\n '&:focus-visible': getFocusStyles(theme),\n }),\n };\n};\ninterface VizSize {\n width: number;\n height: number;\n}\n\n/**\n * @beta\n */\nexport interface VizLayoutLegendProps {\n placement: LegendPlacement;\n children: React.ReactNode;\n maxHeight?: string;\n maxWidth?: string;\n width?: number;\n}\n\n/**\n * @beta\n */\nexport const VizLayoutLegend: FC<VizLayoutLegendProps> = ({ children }) => {\n return <>{children}</>;\n};\n\nVizLayout.Legend = VizLayoutLegend;\n","import { ComponentType } from 'react';\nimport { Reducer } from 'redux';\n\nimport { Registry, TypedVariableModel, UrlQueryValue, VariableOption, VariableType } from '@grafana/data';\n\nimport { VariableEditorProps } from './editor/types';\nimport { VariablePickerProps } from './pickers/types';\nimport { VariablesState } from './state/types';\n\nexport interface VariableAdapter<Model extends TypedVariableModel> {\n id: VariableType;\n description: string;\n name: string;\n initialState: Model;\n dependsOn: (variable: Model, variableToTest: Model) => boolean;\n setValue: (variable: Model, option: VariableOption, emitChanges?: boolean) => Promise<void>;\n setValueFromUrl: (variable: Model, urlValue: UrlQueryValue) => Promise<void>;\n updateOptions: (variable: Model, searchFilter?: string) => Promise<void>;\n getSaveModel: (variable: Model, saveCurrentAsDefault?: boolean) => Partial<Model>;\n getValueForUrl: (variable: Model) => string | string[];\n picker: ComponentType<VariablePickerProps<Model>>;\n editor: ComponentType<VariableEditorProps<Model>>;\n reducer: Reducer<VariablesState>;\n beforeAdding?: (model: any) => any;\n}\n\nexport const variableAdapters = new Registry<VariableAdapter<any>>();\n","import { logMeasurement, reportInteraction, config } from '@grafana/runtime';\nimport { performanceUtils, type SceneObject } from '@grafana/scenes';\n\ninterface SceneInteractionProfileEvent {\n origin: string;\n duration: number;\n networkDuration: number;\n startTs: number;\n endTs: number;\n}\n\nlet dashboardSceneProfiler: performanceUtils.SceneRenderProfiler | undefined;\n\nexport function getDashboardSceneProfiler() {\n if (!dashboardSceneProfiler) {\n // Create panel profiling configuration\n const panelProfilingConfig = {\n watchStateKey: 'body', // Watch dashboard body changes for panel structure changes\n };\n\n dashboardSceneProfiler = new performanceUtils.SceneRenderProfiler(panelProfilingConfig);\n }\n return dashboardSceneProfiler;\n}\n\nexport function getDashboardComponentInteractionCallback(uid: string, title: string) {\n return (e: SceneInteractionProfileEvent) => {\n const payload = {\n duration: e.duration,\n networkDuration: e.networkDuration,\n startTs: e.startTs,\n endTs: e.endTs,\n timeSinceBoot: performance.measure('time_since_boot', 'frontend_boot_js_done_time_seconds').duration,\n };\n\n reportInteraction('dashboard_interaction', {\n interactionType: e.origin,\n uid,\n ...payload,\n });\n\n logMeasurement(`dashboard_interaction`, payload, { interactionType: e.origin, dashboard: uid, title: title });\n };\n}\n\n// Enhanced function to create profiler with dashboard metadata\nexport function getDashboardSceneProfilerWithMetadata(uid: string, title: string) {\n const profiler = getDashboardSceneProfiler();\n\n // Set metadata for observer notifications\n profiler.setMetadata({\n dashboardUID: uid,\n dashboardTitle: title,\n });\n\n // Note: Analytics aggregator initialization and observer registration\n // is now handled by DashboardAnalyticsInitializerBehavior\n\n return profiler;\n}\n\n// Function to enable panel profiling for a specific dashboard\nexport function enablePanelProfilingForDashboard(dashboard: SceneObject, uid: string) {\n // Check if panel profiling should be enabled for this dashboard\n const shouldEnablePanelProfiling =\n config.dashboardPerformanceMetrics.findIndex((configUid) => configUid === '*' || configUid === uid) !== -1;\n\n if (shouldEnablePanelProfiling) {\n const profiler = getDashboardSceneProfiler();\n // Attach panel profiling to this dashboard\n profiler.attachPanelProfiling(dashboard);\n }\n}\n","import {\n DataFrame,\n Field,\n getDisplayProcessor,\n getFieldColorModeForField,\n GrafanaTheme2,\n getFieldConfigWithMinMax,\n} from '@grafana/data';\nimport { ColorDimensionConfig } from '@grafana/schema';\n\nimport { DimensionSupplier } from './types';\nimport { findField, getLastNotNullFieldValue } from './utils';\n\n//---------------------------------------------------------\n// Color dimension\n//---------------------------------------------------------\n\nexport function getColorDimension(\n frame: DataFrame | undefined,\n config: ColorDimensionConfig,\n theme: GrafanaTheme2\n): DimensionSupplier<string> {\n return getColorDimensionForField(findField(frame, config.field), config, theme);\n}\n\nexport function getColorDimensionForField(\n field: Field | undefined,\n config: ColorDimensionConfig,\n theme: GrafanaTheme2\n): DimensionSupplier<string> {\n if (!field) {\n const v = theme.visualization.getColorByName(config.fixed ?? 'grey');\n return {\n isAssumed: Boolean(config.field?.length) || !config.fixed,\n fixed: v,\n value: () => v,\n get: (i) => v,\n };\n }\n\n // Use the expensive color calculation by value\n const mode = getFieldColorModeForField(field);\n if (mode.isByValue || field.config.mappings?.length) {\n // Force this to use local min/max for range\n const config = getFieldConfigWithMinMax(field, true);\n if (config !== field.config) {\n field = { ...field, config };\n field.state = undefined;\n }\n\n const disp = getDisplayProcessor({ field, theme });\n const getColor = (value: unknown): string => {\n return disp(value).color ?? '#ccc';\n };\n\n return {\n field,\n get: (index: number): string => getColor(field!.values[index]),\n value: () => getColor(getLastNotNullFieldValue(field!)),\n };\n }\n\n // Typically series or fixed color (does not depend on value)\n const fixed = mode.getCalculator(field, theme)(0, 0);\n return {\n fixed,\n value: () => fixed,\n get: (i) => fixed,\n field,\n };\n}\n","import { css } from '@emotion/css';\n\nimport {\n FieldType,\n formattedValueToString,\n getDisplayProcessor,\n GrafanaTheme2,\n QueryResultMetaStat,\n TimeZone,\n} from '@grafana/data';\nimport { useStyles2, useTheme2 } from '@grafana/ui';\n\ninterface InspectStatsTableProps {\n timeZone: TimeZone;\n name: string;\n stats: QueryResultMetaStat[];\n}\n\nexport const InspectStatsTable = ({ timeZone, name, stats }: InspectStatsTableProps) => {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n if (!stats || !stats.length) {\n return null;\n }\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.heading}>{name}</div>\n <table className=\"filter-table width-30\">\n <tbody>\n {stats.map((stat, index) => {\n return (\n <tr key={`${stat.displayName}-${index}`}>\n <td>{stat.displayName}</td>\n <td className={styles.cell}>{formatStat(stat, timeZone, theme)}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n};\n\nfunction formatStat(stat: QueryResultMetaStat, timeZone: TimeZone, theme: GrafanaTheme2): string {\n const display = getDisplayProcessor({\n field: {\n type: FieldType.number,\n config: stat,\n },\n theme,\n timeZone,\n });\n return formattedValueToString(display(stat.value));\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n heading: css({\n fontSize: theme.typography.body.fontSize,\n marginBottom: theme.spacing(1),\n }),\n wrapper: css({\n paddingBottom: theme.spacing(2),\n }),\n cell: css({\n textAlign: 'right',\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface Props {\n name: string;\n traceIds: string[];\n}\n\nexport const InspectStatsTraceIdsTable = ({ name, traceIds }: Props) => {\n const styles = useStyles2(getStyles);\n\n if (traceIds.length === 0) {\n return null;\n }\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.heading}>{name}</div>\n <table className=\"filter-table width-30\">\n <tbody>\n {traceIds.map((traceId, index) => {\n return (\n <tr key={`${traceId}-${index}`}>\n <td>{traceId}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n heading: css({\n fontSize: theme.typography.body.fontSize,\n marginBottom: theme.spacing(1),\n }),\n wrapper: css({\n paddingBottom: theme.spacing(2),\n }),\n cell: css({\n textAlign: 'right',\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { PanelData, QueryResultMetaStat, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { InspectStatsTable } from './InspectStatsTable';\nimport { InspectStatsTraceIdsTable } from './InspectStatsTraceIdsTable';\n\ninterface InspectStatsTabProps {\n data: PanelData;\n timeZone: TimeZone;\n}\n\nexport const InspectStatsTab = ({ data, timeZone }: InspectStatsTabProps) => {\n if (!data.request) {\n return null;\n }\n let stats: QueryResultMetaStat[] = [];\n\n const requestTime = data.request.endTime ? data.request.endTime - data.request.startTime : -1;\n const processingTime = data.timings?.dataProcessingTime || -1;\n let dataRows = 0;\n\n for (const frame of data.series) {\n dataRows += frame.length;\n }\n\n if (requestTime > 0) {\n stats.push({\n displayName: t('dashboard.inspect-stats.request-time', 'Total request time'),\n value: requestTime,\n unit: 'ms',\n });\n }\n if (processingTime > 0) {\n stats.push({\n displayName: t('dashboard.inspect-stats.processing-time', 'Data processing time'),\n value: processingTime,\n unit: 'ms',\n });\n }\n stats.push({\n displayName: t('dashboard.inspect-stats.queries', 'Number of queries'),\n value: data.request.targets?.length ?? 0,\n });\n stats.push({\n displayName: t('dashboard.inspect-stats.rows', 'Total number rows'),\n value: dataRows,\n });\n\n let dataStats: QueryResultMetaStat[] = [];\n\n for (const series of data.series) {\n if (series.meta && series.meta.stats) {\n dataStats = dataStats.concat(series.meta.stats);\n }\n }\n\n const statsTableName = t('dashboard.inspect-stats.table-title', 'Stats');\n const dataStatsTableName = t('dashboard.inspect-stats.data-title', 'Data source stats');\n const traceIdsStatsTableName = t('dashboard.inspect-stats.data-traceids', 'Trace IDs');\n\n return (\n <div aria-label={selectors.components.PanelInspector.Stats.content} className={containerStyles}>\n <InspectStatsTable timeZone={timeZone} name={statsTableName} stats={stats} />\n <InspectStatsTable timeZone={timeZone} name={dataStatsTableName} stats={dataStats} />\n <InspectStatsTraceIdsTable name={traceIdsStatsTableName} traceIds={data.traceIds ?? []} />\n </div>\n );\n};\n\nconst containerStyles = css({\n height: '100%',\n overflowY: 'scroll',\n});\n","import { useMemo } from 'react';\n\nimport { getDataSourceSrv, isExpressionReference } from '@grafana/runtime';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nexport function useAlertQueriesStatus(queries: AlertQuery[]) {\n const allDataSourcesAvailable = useMemo(\n () =>\n queries\n .filter((query) => !isExpressionReference(query.datasourceUid))\n .every((query) => {\n const instanceSettings = getDataSourceSrv().getInstanceSettings(query.datasourceUid);\n return Boolean(instanceSettings);\n }),\n [queries]\n );\n\n return { allDataSourcesAvailable };\n}\n","import { ExploreUrlState } from '@grafana/data';\nimport { DEFAULT_RANGE } from 'app/features/explore/state/constants';\n\nimport { BaseExploreURL, MigrationHandler } from './types';\n\nexport interface ExploreURLV0 extends BaseExploreURL {\n schemaVersion: 0;\n left: ExploreUrlState;\n right?: ExploreUrlState;\n}\n\nexport const v0Migrator: MigrationHandler<never, ExploreURLV0> = {\n parse: (params) => {\n // If no params are provided, return the default state without errors\n // This means the user accessed the explore page without any params\n if (!params.left && !params.right) {\n return {\n to: {\n left: {\n datasource: null,\n queries: [],\n range: {\n from: DEFAULT_RANGE.from,\n to: DEFAULT_RANGE.to,\n },\n },\n schemaVersion: 0,\n },\n error: false,\n };\n }\n\n let left: ExploreUrlState | undefined;\n let right: ExploreUrlState | undefined;\n let leftError, rightError: boolean | undefined;\n\n if (typeof params.left === 'string') {\n [left, leftError] = parsePaneState(params.left);\n }\n\n if (typeof params.right === 'string') {\n [right, rightError] = parsePaneState(params.right);\n } else if (params.right) {\n right = FALLBACK_PANE_VALUE;\n rightError = true;\n }\n\n if (!left) {\n left = FALLBACK_PANE_VALUE;\n }\n\n return {\n to: {\n schemaVersion: 0,\n left,\n ...(right && { right }),\n },\n error: !!leftError || !!rightError,\n };\n },\n};\n\nconst isSegment = (segment: { [key: string]: string }, ...props: string[]) =>\n props.some((prop) => segment.hasOwnProperty(prop));\n\nenum ParseUrlStateIndex {\n RangeFrom = 0,\n RangeTo = 1,\n Datasource = 2,\n SegmentsStart = 3,\n}\n\nconst FALLBACK_PANE_VALUE: ExploreUrlState = {\n datasource: null,\n queries: [],\n range: DEFAULT_RANGE,\n};\n\nfunction parsePaneState(initial: string): [ExploreUrlState, boolean] {\n let parsed;\n try {\n parsed = JSON.parse(initial);\n } catch {\n return [FALLBACK_PANE_VALUE, true];\n }\n\n if (!Array.isArray(parsed)) {\n return [{ queries: [], range: DEFAULT_RANGE, ...parsed }, false];\n }\n\n if (parsed.length <= ParseUrlStateIndex.SegmentsStart) {\n return [FALLBACK_PANE_VALUE, true];\n }\n\n const range = {\n from: parsed[ParseUrlStateIndex.RangeFrom],\n to: parsed[ParseUrlStateIndex.RangeTo],\n };\n const datasource = parsed[ParseUrlStateIndex.Datasource];\n const parsedSegments = parsed.slice(ParseUrlStateIndex.SegmentsStart);\n const queries = parsedSegments.filter((segment) => !isSegment(segment, 'ui', 'mode', '__panelsState'));\n\n const panelsState = parsedSegments.find((segment) => isSegment(segment, '__panelsState'))?.__panelsState;\n return [{ datasource, queries, range, panelsState }, false];\n}\n","import { ExploreUrlState } from '@grafana/data';\nimport { ID_ALPHABET, generateExploreId } from 'app/core/utils/explore';\nimport { DEFAULT_RANGE } from 'app/features/explore/state/constants';\n\nimport { hasKey } from '../../utils';\n\nimport { BaseExploreURL, MigrationHandler } from './types';\nimport { ExploreURLV0 } from './v0';\n\nexport interface ExploreURLV1 extends BaseExploreURL {\n schemaVersion: 1;\n panes: {\n [id: string]: ExploreUrlState;\n };\n}\n\nexport const v1Migrator: MigrationHandler<ExploreURLV0, ExploreURLV1> = {\n parse: (params) => {\n if (!params || !params.panes || typeof params.panes !== 'string') {\n return {\n to: {\n schemaVersion: 1,\n panes: {\n [generateExploreId()]: DEFAULT_STATE,\n },\n },\n error: false,\n };\n }\n\n let rawPanes: unknown;\n try {\n rawPanes = JSON.parse(params.panes);\n } catch {}\n\n if (rawPanes == null || typeof rawPanes !== 'object') {\n return {\n to: {\n schemaVersion: 1,\n panes: {\n [generateExploreId()]: DEFAULT_STATE,\n },\n },\n error: true,\n };\n }\n\n const panes = Object.entries(rawPanes)\n .map(([key, value]) => [key, applyDefaults(value)] as const)\n .reduce<Record<string, ExploreUrlState>>((acc, [key, value]) => {\n let newKey = key;\n // Panes IDs must be 3 characters long and contain at least one letter\n if (\n newKey.length !== 3 ||\n /^\\d+$/.test(newKey) ||\n newKey.split('').some((ch) => {\n return ID_ALPHABET.indexOf(ch) === -1;\n })\n ) {\n newKey = generateExploreId();\n }\n\n return {\n ...acc,\n [newKey]: value,\n };\n }, {});\n\n if (!Object.keys(panes).length) {\n panes[generateExploreId()] = DEFAULT_STATE;\n }\n\n return {\n to: {\n schemaVersion: 1,\n panes,\n },\n error: false,\n };\n },\n migrate: (params) => {\n return {\n schemaVersion: 1,\n panes: {\n [generateExploreId()]: params.left,\n ...(params.right && { [generateExploreId()]: params.right }),\n },\n };\n },\n};\n\nconst DEFAULT_STATE: ExploreUrlState = {\n datasource: null,\n queries: [],\n range: DEFAULT_RANGE,\n};\n\nfunction applyDefaults(input: unknown): ExploreUrlState {\n if (!input || typeof input !== 'object') {\n return DEFAULT_STATE;\n }\n\n return {\n ...DEFAULT_STATE,\n // queries\n ...(hasKey('queries', input) && Array.isArray(input.queries) && { queries: input.queries }),\n // datasource\n ...(hasKey('datasource', input) && typeof input.datasource === 'string' && { datasource: input.datasource }),\n // panelsState\n ...(hasKey('panelsState', input) &&\n !!input.panelsState &&\n typeof input.panelsState === 'object' && { panelsState: input.panelsState }),\n // range\n ...(hasKey('range', input) &&\n !!input.range &&\n typeof input.range === 'object' &&\n hasKey('from', input.range) &&\n hasKey('to', input.range) &&\n typeof input.range.from === 'string' &&\n typeof input.range.to === 'string' && { range: { from: input.range.from, to: input.range.to } }),\n ...(hasKey('compact', input) && typeof input.compact === 'boolean' && { compact: input.compact }),\n };\n}\n","import { ExploreQueryParams } from 'app/types/explore';\n\nimport { v0Migrator } from './migrators/v0';\nimport { ExploreURLV1, v1Migrator } from './migrators/v1';\n\ntype ExploreURL = ExploreURLV1;\n\nexport const parseURL = (params: ExploreQueryParams) => {\n return migrate(params);\n};\n\nconst migrators = [v0Migrator, v1Migrator] as const;\n\nconst migrate = (params: ExploreQueryParams): [ExploreURL, boolean] => {\n const schemaVersion = getSchemaVersion(params);\n\n const [parser, ...migratorsToRun] = migrators.slice(schemaVersion);\n\n const { error, to } = parser.parse(params);\n\n // @ts-expect-error\n const final: ExploreURL = migratorsToRun.reduce((acc, migrator) => {\n // @ts-expect-error\n return migrator.migrate ? migrator.migrate(acc) : acc;\n }, to);\n\n return [final, error];\n};\n\nfunction getSchemaVersion(params: ExploreQueryParams): number {\n if (!params || !('schemaVersion' in params) || !params.schemaVersion) {\n return 0;\n }\n\n if (typeof params.schemaVersion === 'number') {\n return params.schemaVersion;\n }\n\n if (typeof params.schemaVersion === 'string') {\n return Number.parseInt(params.schemaVersion, 10);\n }\n\n return 0;\n}\n","import { isEqual } from 'lodash';\n\nimport { CoreApp, DataSourceApi, ExploreUrlState, isTruthy } from '@grafana/data';\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\nimport { getLastUsedDatasourceUID } from 'app/core/utils/explore';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';\n\nimport { DEFAULT_RANGE } from '../../state/constants';\nimport { isFulfilled } from '../utils';\n\nexport type InitState = 'pending' | 'done' | 'notstarted';\n\n/**\n * Compare 2 explore urls and return a map of what changed. Used to update the local state with all the\n * side effects needed.\n */\nexport const urlDiff = (\n oldUrlState: ExploreUrlState | undefined,\n currentUrlState: ExploreUrlState | undefined\n): {\n datasource: boolean;\n queries: boolean;\n range: boolean;\n panelsState: boolean;\n} => {\n const datasource = !isEqual(currentUrlState?.datasource, oldUrlState?.datasource);\n const queries = !isEqual(currentUrlState?.queries, oldUrlState?.queries);\n const range = !isEqual(currentUrlState?.range || DEFAULT_RANGE, oldUrlState?.range || DEFAULT_RANGE);\n const panelsState = !isEqual(currentUrlState?.panelsState, oldUrlState?.panelsState);\n\n return {\n datasource,\n queries,\n range,\n panelsState,\n };\n};\n\n/**\n * Returns the datasource that an explore pane should be using.\n * If the URL specifies a datasource and that datasource exists, it will be used unless said datasource is mixed.\n * Otherwise the datasource will be extracted from the first query specifying a valid datasource.\n *\n * If there's no datasource in the queries, the last used datasource will be used.\n * if there's no last used datasource, the default datasource will be used.\n *\n * @param rootDatasource the top-level datasource specified in the URL\n * @param queries the queries in the pane\n * @param orgId the orgId of the user\n *\n * @returns the datasource UID that the pane should use, undefined if no suitable datasource is found\n */\nexport async function getPaneDatasource(\n rootDatasource: DataSourceRef | string | null | undefined,\n queries: DataQuery[],\n orgId: number\n) {\n // If there's a root datasource, use it unless it's unavailable\n if (rootDatasource) {\n try {\n return await getDatasourceSrv().get(rootDatasource);\n } catch (_) {}\n }\n\n // Else we try to find a datasource in the queries\n const queriesDatasources = [\n ...new Set(\n queries\n .map((q) => q.datasource)\n .filter(isTruthy)\n .map((ds) => (typeof ds === 'string' ? ds : ds.uid))\n ),\n ];\n\n try {\n if (queriesDatasources.length >= 1) {\n const datasources = (await Promise.allSettled(queriesDatasources.map((ds) => getDatasourceSrv().get(ds)))).filter(\n isFulfilled\n );\n\n // if queries have multiple (valid) datasources, we return the mixed datasource\n if (datasources.length > 1) {\n return await getDatasourceSrv().get(MIXED_DATASOURCE_NAME);\n }\n\n // otherwise we return the first datasource.\n if (datasources.length === 1) {\n return await getDatasourceSrv().get(queriesDatasources[0]);\n }\n }\n } catch (_) {}\n\n // If none of the queries specify a valid datasource, we use the last used one\n return (\n getDatasourceSrv()\n .get(getLastUsedDatasourceUID(orgId))\n // Or the default one\n .catch(() => getDatasourceSrv().get())\n .catch(() => undefined)\n );\n}\n\nexport function getDefaultQuery(ds: DataSourceApi) {\n return { ...ds.getDefaultQuery?.(CoreApp.Explore), refId: 'A', datasource: ds.getRef() };\n}\n\nexport function isMixedDatasource(datasource: DataSourceApi) {\n return datasource.name === MIXED_DATASOURCE_NAME;\n}\n\nexport function getQueryFilter(datasource?: DataSourceApi) {\n // if the root datasource is mixed, filter out queries that don't have a datasource.\n if (datasource && isMixedDatasource(datasource)) {\n return (q: DataQuery) => !!q.datasource;\n } else {\n // else filter out queries that have a datasource different from the root one.\n // Queries may not have a datasource, if so, it's assumed they are using the root datasource\n return (q: DataQuery) => {\n if (!q.datasource) {\n return true;\n }\n // Due to legacy URLs, `datasource` in queries may be a string. This logic should probably be in the migration\n if (typeof q.datasource === 'string') {\n return q.datasource === datasource?.uid || q.datasource === datasource?.name;\n }\n\n return q.datasource.uid === datasource?.uid;\n };\n }\n}\n\nexport async function removeQueriesWithInvalidDatasource(queries: DataQuery[]) {\n const results = await Promise.allSettled(\n queries.map((query) => {\n return getDatasourceSrv()\n .get(query.datasource)\n .then((ds) => ({\n query,\n ds,\n }));\n })\n );\n\n return results.filter(isFulfilled).map(({ value }) => value.query);\n}\n","import { isEqual } from 'lodash';\n\nimport { EventBusSrv } from '@grafana/data';\nimport { changeDatasource } from 'app/features/explore/state/datasource';\nimport { changePanelsStateAction, initializeExplore } from 'app/features/explore/state/explorePane';\nimport { splitClose, syncTimesAction } from 'app/features/explore/state/main';\nimport { cancelQueries, runQueries, setQueriesAction } from 'app/features/explore/state/query';\nimport { updateTime } from 'app/features/explore/state/time';\nimport { fromURLRange } from 'app/features/explore/state/utils';\nimport { withUniqueRefIds } from 'app/features/explore/utils/queries';\nimport { ExploreItemState } from 'app/types/explore';\nimport { ThunkDispatch } from 'app/types/store';\n\nimport { getUrlStateFromPaneState } from '../index';\nimport { urlDiff } from '../internal.utils';\nimport { ExploreURLV1 } from '../migrators/v1';\n\nexport function syncFromURL(\n urlState: ExploreURLV1,\n panesState: Record<string, undefined | ExploreItemState>,\n dispatch: ThunkDispatch\n) {\n // if navigating the history causes one of the time range to not being equal to all the other ones,\n // we set syncedTimes to false to avoid inconsistent UI state.\n // Ideally `syncedTimes` should be saved in the URL.\n const paneArray = Object.values(urlState.panes);\n if (paneArray.length > 1) {\n const paneTimesUnequal = paneArray.some(({ range }, _, [{ range: firstRange }]) => !isEqual(range, firstRange));\n dispatch(syncTimesAction({ syncedTimes: !paneTimesUnequal })); // if all time ranges are equal, keep them synced\n }\n\n Object.entries(urlState.panes).forEach(async ([exploreId, urlPane], i) => {\n const { datasource, queries, range, panelsState } = urlPane;\n\n const paneState = panesState[exploreId];\n\n if (paneState !== undefined) {\n const update = urlDiff(urlPane, getUrlStateFromPaneState(paneState));\n\n Promise.resolve()\n .then(async () => {\n if (update.datasource && datasource) {\n await dispatch(changeDatasource({ exploreId, datasource }));\n }\n return;\n })\n .then(async () => {\n if (update.range) {\n dispatch(updateTime({ exploreId, rawRange: fromURLRange(range) }));\n }\n\n if (update.queries) {\n dispatch(setQueriesAction({ exploreId, queries: withUniqueRefIds(queries) }));\n }\n\n if (update.queries || update.range) {\n await dispatch(cancelQueries(exploreId));\n dispatch(runQueries({ exploreId }));\n }\n\n if (update.panelsState && panelsState) {\n dispatch(changePanelsStateAction({ exploreId, panelsState }));\n }\n });\n } else {\n // This happens when browser history is used to navigate.\n // In this case we want to initialize the pane with the data from the URL\n // if it's not present in the store. This may happen if the user has navigated\n // from split view to non-split view and then back to split view.\n dispatch(\n initializeExplore({\n exploreId,\n datasource: datasource || '',\n queries: withUniqueRefIds(queries),\n range: fromURLRange(range),\n panelsState,\n compact: !!urlPane.compact,\n position: i,\n eventBridge: new EventBusSrv(),\n })\n );\n }\n });\n\n // Close all the panes that are not in the URL but are still in the store\n // ie. because the user has navigated back after opening the split view.\n Object.keys(panesState)\n .filter((keyInStore) => !Object.keys(urlState.panes).includes(keyInStore))\n .forEach((paneId) => dispatch(splitClose(paneId)));\n}\n","import { identity, isEqual } from 'lodash';\nimport { MutableRefObject } from 'react';\n\nimport { EventBusSrv } from '@grafana/data';\nimport { LocationService } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\nimport { initializeExplore } from 'app/features/explore/state/explorePane';\nimport { clearPanes, syncTimesAction } from 'app/features/explore/state/main';\nimport { fromURLRange } from 'app/features/explore/state/utils';\nimport { withUniqueRefIds } from 'app/features/explore/utils/queries';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { ThunkDispatch } from 'app/types/store';\n\nimport { getUrlStateFromPaneState } from '../index';\nimport {\n getDefaultQuery,\n getPaneDatasource,\n getQueryFilter,\n InitState,\n isMixedDatasource,\n removeQueriesWithInvalidDatasource,\n} from '../internal.utils';\nimport { ExploreURLV1 } from '../migrators/v1';\n\nexport function initializeFromURL(\n urlState: ExploreURLV1,\n initState: MutableRefObject<InitState>,\n orgId: number,\n dispatch: ThunkDispatch,\n location: LocationService\n) {\n // Clear all the panes in the store first to avoid stale data.\n dispatch(clearPanes());\n\n Promise.all(\n Object.entries(urlState.panes).map(([exploreId, { datasource, queries, range, panelsState, compact }]) => {\n return getPaneDatasource(datasource, queries, orgId).then((paneDatasource) => {\n return Promise.resolve(\n // Given the Grafana datasource will always be present, this should always be defined.\n paneDatasource\n ? queries.length\n ? // if we have queries in the URL, we use them\n withUniqueRefIds(queries)\n // but filter out the ones that are not compatible with the pane datasource\n .filter(getQueryFilter(paneDatasource))\n .map(\n isMixedDatasource(paneDatasource)\n ? identity<DataQuery>\n : (query) => ({ ...query, datasource: paneDatasource.getRef() })\n )\n : getDatasourceSrv()\n // otherwise we get a default query from the pane datasource or from the default datasource if the pane datasource is mixed\n .get(isMixedDatasource(paneDatasource) ? undefined : paneDatasource.getRef())\n .then((ds) => [getDefaultQuery(ds)])\n : []\n ).then(async (queries) => {\n // we remove queries that have an invalid datasources\n let validQueries = await removeQueriesWithInvalidDatasource(queries);\n\n if (!validQueries.length && paneDatasource) {\n // and in case there's no query left we add a default one.\n validQueries = [\n getDefaultQuery(isMixedDatasource(paneDatasource) ? await getDatasourceSrv().get() : paneDatasource),\n ];\n }\n\n return { exploreId, compact, range, panelsState, queries: validQueries, datasource: paneDatasource };\n });\n });\n })\n ).then(async (panes) => {\n const initializedPanes = await Promise.all(\n panes.map(({ exploreId, range, panelsState, queries, datasource, compact }) => {\n return dispatch(\n initializeExplore({\n exploreId,\n datasource,\n queries,\n range: fromURLRange(range),\n panelsState,\n eventBridge: new EventBusSrv(),\n compact: !!compact,\n })\n ).unwrap();\n })\n );\n\n if (initializedPanes.length > 1) {\n const paneTimesUnequal = initializedPanes.some(\n ({ state }, _, [{ state: firstState }]) => !isEqual(state.range.raw, firstState.range.raw)\n );\n dispatch(syncTimesAction({ syncedTimes: !paneTimesUnequal })); // if all time ranges are equal, keep them synced\n }\n\n const panesObj = initializedPanes.reduce((acc, { exploreId, state }) => {\n return {\n ...acc,\n [exploreId]: getUrlStateFromPaneState(state),\n };\n }, {});\n\n // we need to use partial here beacuse replace doesn't encode the query params.\n const oldQuery = location.getSearchObject();\n\n // we create the default query params from the current URL, omitting all the properties we know should be in the final url.\n // This includes params from previous schema versions and 'schemaVersion', 'panes', 'orgId' as we want to replace those.\n let defaults: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(oldQuery).filter(\n ([key]) => !['schemaVersion', 'panes', 'orgId', 'left', 'right'].includes(key)\n )) {\n defaults[key] = value;\n }\n\n const searchParams = new URLSearchParams({\n // we set the schemaVersion as the first parameter so that when URLs are truncated the schemaVersion is more likely to be present.\n schemaVersion: `${urlState.schemaVersion}`,\n panes: JSON.stringify(panesObj),\n orgId: `${orgId}`,\n ...defaults,\n });\n\n location.replace({\n pathname: location.getLocation().pathname,\n search: searchParams.toString(),\n });\n initState.current = 'done';\n });\n}\n","import { Action } from '@reduxjs/toolkit';\nimport { isEqual } from 'lodash';\nimport { MutableRefObject } from 'react';\n\nimport { UrlQueryMap } from '@grafana/data';\nimport { LocationService } from '@grafana/runtime';\nimport { changeDatasource } from 'app/features/explore/state/datasource';\nimport { changeCompactModeAction, changePanelsStateAction } from 'app/features/explore/state/explorePane';\nimport { splitClose, splitOpen } from 'app/features/explore/state/main';\nimport { runQueries } from 'app/features/explore/state/query';\nimport { changeRangeAction } from 'app/features/explore/state/time';\nimport { ExploreState } from 'app/types/explore';\n\nimport { getUrlStateFromPaneState } from '../index';\nimport { InitState } from '../internal.utils';\n\n/*\nWe want to update the URL when:\n - a pane is opened or closed\n - a query is run\n - range is changed\n - panel state is updated\n - a datasource change has completed.\n - compact mode changes\n\nNote: Changing datasource causes a bunch of actions to be dispatched, we want to update the URL\nonly when the change set has completed. This is done by checking if the changeDatasource.pending action\nhas been dispatched and pausing the listener until the changeDatasource.fulfilled action is dispatched.\n*/\nexport function syncToURLPredicate(paused: MutableRefObject<boolean>, action: Action) {\n paused.current = changeDatasource.pending.type === action.type;\n\n return (\n [\n splitClose.type,\n splitOpen.fulfilled.type,\n runQueries.pending.type,\n changeRangeAction.type,\n changePanelsStateAction.type,\n changeDatasource.fulfilled.type,\n changeCompactModeAction.type,\n ].includes(action.type) && !paused.current\n );\n}\n\nexport function syncToURL(\n exploreState: ExploreState,\n prevParams: MutableRefObject<UrlQueryMap>,\n initState: MutableRefObject<InitState>,\n location: LocationService\n) {\n const panesQueryParams = Object.entries(exploreState.panes).reduce((acc, [id, paneState]) => {\n if (!paneState) {\n return acc;\n }\n return {\n ...acc,\n [id]: getUrlStateFromPaneState(paneState),\n };\n }, {});\n\n if (!isEqual(prevParams.current.panes, JSON.stringify(panesQueryParams))) {\n // If there's no previous state it means we are mounting explore for the first time,\n // in this case we want to replace the URL instead of pushing a new entry to the history.\n // If the init state is 'pending' it means explore still hasn't finished initializing. in that case we skip\n // pushing a new entry in the history as the first entry will be pushed after initialization.\n const replace =\n (!!prevParams.current.panes && Object.values(prevParams.current.panes).filter(Boolean).length === 0) ||\n initState.current === 'pending';\n\n prevParams.current = {\n panes: JSON.stringify(panesQueryParams),\n };\n\n location.partial({ panes: prevParams.current.panes }, replace);\n }\n}\n","import { isEmpty, isObject, mapValues, omitBy } from 'lodash';\n\nimport { ExploreUrlState, toURLRange } from '@grafana/data';\nimport { clearQueryKeys } from 'app/core/utils/explore';\nimport { ExploreItemState } from 'app/types/explore';\n\nexport function getUrlStateFromPaneState(pane: ExploreItemState): ExploreUrlState {\n return {\n // datasourceInstance should not be undefined anymore here but in case there is some path for it to be undefined\n // lets just fallback instead of crashing.\n datasource: pane.datasourceInstance?.uid || '',\n queries: pane.queries.map(clearQueryKeys),\n range: toURLRange(pane.range.raw),\n // don't include panelsState in the url unless a piece of state is actually set\n panelsState: pruneObject(pane.panelsState),\n compact: pane.compact,\n };\n}\n\n/**\n * recursively walks an object, removing keys where the value is undefined\n * if the resulting object is empty, returns undefined\n **/\nfunction pruneObject(obj: object): object | undefined {\n let pruned = mapValues(obj, (value: unknown) => {\n if (isObject(value)) {\n if (Array.isArray(value)) {\n // For arrays, recursively prune each item and filter out empty results\n const prunedArray = value\n .map((item: unknown) => (isObject(item) ? pruneObject(item) : item))\n .filter((item: unknown) => !isEmpty(item));\n return prunedArray.length > 0 ? prunedArray : undefined;\n }\n return pruneObject(value);\n }\n return value;\n });\n pruned = omitBy<typeof pruned>(pruned, isEmpty);\n if (isEmpty(pruned)) {\n return undefined;\n }\n return pruned;\n}\n","import { useEffect, useRef } from 'react';\n\nimport { useGrafana } from 'app/core/context/GrafanaContext';\nimport { useAppNotification } from 'app/core/copy/appNotification';\nimport { ExploreQueryParams } from 'app/types/explore';\nimport { addListener, useDispatch, useSelector } from 'app/types/store';\n\nimport { selectPanes } from '../../state/selectors';\n\nimport { parseURL } from './parseURL';\nimport { syncFromURL } from './synchronizer/fromURL';\nimport { initializeFromURL } from './synchronizer/init';\nimport { syncToURL, syncToURLPredicate } from './synchronizer/toURL';\n\nexport { getUrlStateFromPaneState } from './external.utils';\n\n/**\n * Bi-directionally syncs URL changes with Explore's state.\n */\nexport function useStateSync(params: ExploreQueryParams) {\n const { location } = useGrafana();\n const dispatch = useDispatch();\n const panesState = useSelector(selectPanes);\n const panesStateRef = useRef(panesState);\n const orgId = useSelector((state) => state.user.orgId);\n const prevParams = useRef(params);\n const initState = useRef<'notstarted' | 'pending' | 'done'>('notstarted');\n const paused = useRef(false);\n const { warning } = useAppNotification();\n\n useEffect(() => {\n // This happens when the user navigates to an explore \"empty page\" while within Explore.\n // ie. by clicking on the explore when explore is active.\n if (!params.panes) {\n initState.current = 'notstarted';\n prevParams.current = params;\n }\n }, [params]);\n\n useEffect(() => {\n const unsubscribe = dispatch(\n addListener({\n predicate: (action) => syncToURLPredicate(paused, action),\n effect: async (_, { cancelActiveListeners, delay, getState }) => {\n // The following 2 lines will debounce updates to avoid creating history entries when rapid changes\n // are committed to the store.\n cancelActiveListeners();\n await delay(200);\n syncToURL(getState().explore, prevParams, initState, location);\n },\n })\n );\n\n // @ts-expect-error the return type of addListener is actually callable, but dispatch is not middleware-aware\n return () => unsubscribe();\n }, [dispatch, location]);\n\n useEffect(() => {\n panesStateRef.current = panesState;\n }, [panesState]);\n\n useEffect(() => {\n const isURLOutOfSync = prevParams.current?.panes !== params.panes;\n\n const [urlState, hasParseError] = parseURL(params);\n hasParseError &&\n warning(\n 'Could not parse Explore URL',\n 'The requested URL contains invalid parameters, a default Explore state has been loaded.'\n );\n\n // This happens when the user first navigates to explore.\n // Here we want to initialize each pane initial data, wether it comes\n // from the url or as a result of migrations.\n if (!isURLOutOfSync && initState.current === 'notstarted') {\n initState.current = 'pending';\n initializeFromURL(urlState, initState, orgId, dispatch, location);\n }\n\n prevParams.current = params;\n\n if (isURLOutOfSync && initState.current === 'done') {\n syncFromURL(urlState, panesStateRef.current, dispatch);\n }\n }, [dispatch, orgId, location, params, warning]);\n}\n","import { reportInteraction } from '@grafana/runtime';\n\nexport function reportActionTrigger(actionType: string, isOneClick: boolean, visualizationType: string) {\n reportInteraction('dashboards_action_interaction', {\n event: 'dashboards_action_interaction',\n action: 'trigger_action',\n action_type: actionType,\n visualization_type: visualizationType,\n trigger_type: isOneClick ? 'one_click' : 'button',\n context: 'panel_runtime',\n });\n}\n","import { GrafanaRulesSourceSymbol, RulerDataSourceConfig, RulesSourceUid } from 'app/types/unified-alerting';\n\nimport {\n AlertmanagerApiFeatures,\n PromApplication,\n RulesSourceApplication,\n} from '../../../../types/unified-alerting-dto';\nimport { GRAFANA_RULES_SOURCE_NAME, getDataSourceUID, getRulesDataSourceByUID } from '../utils/datasource';\n\nimport { alertingApi } from './alertingApi';\nimport { discoverAlertmanagerFeatures, discoverFeaturesByUid } from './buildInfo';\n\nexport const GRAFANA_RULER_CONFIG: RulerDataSourceConfig = {\n dataSourceName: 'grafana',\n dataSourceUid: 'grafana',\n apiVersion: 'legacy',\n};\n\nexport interface RulesSourceFeatures {\n name: string;\n uid: string;\n application: RulesSourceApplication;\n rulerConfig?: RulerDataSourceConfig;\n}\n\nexport const featureDiscoveryApi = alertingApi.injectEndpoints({\n endpoints: (build) => ({\n discoverAmFeatures: build.query<AlertmanagerApiFeatures, { amSourceName: string }>({\n queryFn: async ({ amSourceName }) => {\n try {\n const amFeatures = await discoverAlertmanagerFeatures(amSourceName);\n return { data: amFeatures };\n } catch (error) {\n return { error: error };\n }\n },\n }),\n\n discoverDsFeatures: build.query<RulesSourceFeatures, { rulesSourceName: string } | { uid: RulesSourceUid }>({\n queryFn: async (rulesSourceIdentifier) => {\n const dataSourceUID = getDataSourceUID(rulesSourceIdentifier);\n if (!dataSourceUID) {\n return { error: new Error(`Unable to find data source for ${JSON.stringify(rulesSourceIdentifier)}`) };\n }\n\n if (dataSourceUID === GrafanaRulesSourceSymbol) {\n return {\n data: {\n name: GRAFANA_RULES_SOURCE_NAME,\n uid: GRAFANA_RULES_SOURCE_NAME,\n application: 'grafana',\n rulerConfig: GRAFANA_RULER_CONFIG,\n } satisfies RulesSourceFeatures,\n };\n }\n\n const dataSourceSettings = dataSourceUID ? getRulesDataSourceByUID(dataSourceUID) : undefined;\n if (!dataSourceSettings) {\n return { error: new Error(`Missing data source configuration for ${rulesSourceIdentifier}`) };\n }\n\n try {\n const features = await discoverFeaturesByUid(dataSourceSettings.uid);\n\n const rulerConfig = features.features.rulerApiEnabled\n ? ({\n dataSourceName: dataSourceSettings.name,\n dataSourceUid: dataSourceSettings.uid,\n apiVersion: features.application === PromApplication.Cortex ? 'legacy' : 'config',\n } satisfies RulerDataSourceConfig)\n : undefined;\n\n return {\n data: {\n name: dataSourceSettings.name,\n uid: dataSourceSettings.uid,\n application: features.application,\n rulerConfig,\n } satisfies RulesSourceFeatures,\n };\n } catch (error) {\n return { error: error };\n }\n },\n }),\n }),\n});\n","import { skipToken } from '@reduxjs/toolkit/query/react';\n\nimport { OrgRole } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Folder, useGetFolderQuery } from 'app/api/clients/folder/v1beta1';\nimport { RepositoryView, useGetFrontendSettingsQuery } from 'app/api/clients/provisioning/v0alpha1';\nimport { contextSrv } from 'app/core/core';\nimport { AnnoKeyManagerIdentity } from 'app/features/apiserver/types';\n\nimport { RepoType } from '../Wizard/types';\nimport { getIsReadOnlyRepo } from '../utils/repository';\n\ninterface GetResourceRepositoryArgs {\n name?: string; // the repository name\n folderName?: string; // folder we are targeting\n skipQuery?: boolean;\n}\n\ninterface RepositoryViewData {\n repository?: RepositoryView;\n repoType?: RepoType;\n folder?: Folder;\n isLoading?: boolean;\n isInstanceManaged: boolean;\n isReadOnlyRepo: boolean;\n}\n\n// This is safe to call as a viewer (you do not need full access to the Repository configs)\nexport const useGetResourceRepositoryView = ({\n name,\n folderName,\n skipQuery,\n}: GetResourceRepositoryArgs): RepositoryViewData => {\n const hasNoRole = contextSrv.user.orgRole === OrgRole.None;\n\n const provisioningEnabled = config.featureToggles.provisioning;\n const { data: settingsData, isLoading: isSettingsLoading } = useGetFrontendSettingsQuery(\n !provisioningEnabled || skipQuery || hasNoRole ? skipToken : undefined\n );\n\n const skipFolderQuery = !folderName || !provisioningEnabled || skipQuery || hasNoRole;\n const { data: folder, isLoading: isFolderLoading } = useGetFolderQuery(\n skipFolderQuery ? skipToken : { name: folderName }\n );\n\n if (!provisioningEnabled) {\n return { isLoading: false, isInstanceManaged: false, isReadOnlyRepo: false };\n }\n\n if (isSettingsLoading || isFolderLoading) {\n return { isLoading: true, isInstanceManaged: false, isReadOnlyRepo: false };\n }\n\n const items = settingsData?.items ?? [];\n\n if (!items.length) {\n return { folder, isInstanceManaged: false, isReadOnlyRepo: false };\n }\n\n const instanceRepo = items.find((repo) => repo.target === 'instance');\n const isInstanceManaged = Boolean(instanceRepo);\n\n if (name) {\n const repository = items.find((repo) => repo.name === name);\n if (repository) {\n return {\n repository,\n folder,\n isInstanceManaged,\n isReadOnlyRepo: getIsReadOnlyRepo(repository),\n };\n }\n }\n\n // Find the matching folder repository\n if (folderName) {\n // For root values it will be the same\n let repository = items.find((repo) => repo.name === folderName);\n if (repository) {\n return {\n repository,\n folder,\n isInstanceManaged,\n isReadOnlyRepo: getIsReadOnlyRepo(repository),\n };\n }\n\n // For nested folders we need to see what the folder thinks\n const annotatedFolderName = folder?.metadata?.annotations?.[AnnoKeyManagerIdentity];\n if (annotatedFolderName) {\n repository = items.find((repo) => repo.name === annotatedFolderName);\n if (repository) {\n return {\n repository,\n folder,\n isInstanceManaged,\n isReadOnlyRepo: getIsReadOnlyRepo(repository),\n };\n }\n }\n }\n\n return {\n repository: instanceRepo,\n folder,\n isInstanceManaged,\n isReadOnlyRepo: getIsReadOnlyRepo(instanceRepo),\n repoType: instanceRepo?.type,\n };\n};\n","import { Action } from '@reduxjs/toolkit';\nimport { Dispatch } from 'react';\nimport { from, merge, of, Subscription, timer } from 'rxjs';\nimport { catchError, finalize, mapTo, mergeMap, share, takeUntil } from 'rxjs/operators';\n\nimport { deleteLibraryPanel as apiDeleteLibraryPanel, getLibraryPanels } from '../../state/api';\n\nimport { initialLibraryPanelsViewState, initSearch, searchCompleted } from './reducer';\n\ntype SearchDispatchResult = (dispatch: Dispatch<Action>, abortController?: AbortController) => void;\n\ninterface SearchArgs {\n perPage: number;\n page: number;\n searchString: string;\n sortDirection?: string;\n panelFilter?: string[];\n folderFilterUIDs?: string[];\n currentPanelId?: string;\n}\n\nexport function searchForLibraryPanels(args: SearchArgs): SearchDispatchResult {\n // Functions to support filtering out library panels per plugin type that have skipDataQuery set to true\n\n return function (dispatch, abortController) {\n const subscription = new Subscription();\n const dataObservable = from(\n getLibraryPanels({\n searchString: args.searchString,\n perPage: args.perPage,\n page: args.page,\n excludeUid: args.currentPanelId,\n sortDirection: args.sortDirection,\n typeFilter: args.panelFilter,\n folderFilterUIDs: args.folderFilterUIDs,\n signal: abortController?.signal,\n })\n ).pipe(\n //filter out library panels per plugin type that have skipDataQuery set to true\n mergeMap((libraryPanelsResult) => {\n const { elements: libraryPanels } = libraryPanelsResult;\n return of({ ...libraryPanelsResult, elements: libraryPanels });\n }),\n mergeMap(({ perPage, elements: libraryPanels, page, totalCount }) =>\n of(searchCompleted({ libraryPanels, page, perPage, totalCount }))\n ),\n catchError((err) => {\n // Check if this is an aborted request - if so, silently ignore it\n const isAbortError =\n err.name === 'AbortError' || err.cancelled === true || err.statusText === 'Request was aborted';\n\n if (isAbortError) {\n return of(); // Silently ignore aborted requests\n }\n\n // For real errors, log and show error to user\n console.error('Error fetching library panels:', err);\n\n // Update state to show empty results\n return of(searchCompleted({ ...initialLibraryPanelsViewState, page: args.page, perPage: args.perPage }));\n }),\n finalize(() => subscription.unsubscribe()), // make sure we unsubscribe\n share()\n );\n\n subscription.add(\n // If 50ms without a response dispatch a loading state\n // mapTo will translate the timer event into a loading state\n // takeUntil will cancel the timer emit when first response is received on the dataObservable\n merge(timer(50).pipe(mapTo(initSearch()), takeUntil(dataObservable)), dataObservable).subscribe(dispatch)\n );\n };\n}\n\nexport function deleteLibraryPanel(uid: string, args: SearchArgs) {\n return async function (dispatch: Dispatch<Action>) {\n try {\n await apiDeleteLibraryPanel(uid);\n searchForLibraryPanels(args)(dispatch);\n } catch (e) {\n console.error(e);\n }\n };\n}\n\nexport function asyncDispatcher(dispatch: Dispatch<Action>) {\n return function (action: Action | SearchDispatchResult | Function, abortController?: AbortController) {\n if (action instanceof Function) {\n return action(dispatch, abortController);\n }\n return dispatch(action);\n };\n}\n","import { FALLBACK_COLOR, Field, FieldType, formattedValueToString, getFieldColorModeForField } from '@grafana/data';\nimport { SortOrder, TooltipDisplayMode } from '@grafana/schema';\n\nimport { ColorIndicatorStyles } from './VizTooltipColorIndicator';\nimport { ColorIndicator, ColorPlacement, VizTooltipItem } from './types';\n\nexport const calculateTooltipPosition = (\n xPos = 0,\n yPos = 0,\n tooltipWidth = 0,\n tooltipHeight = 0,\n xOffset = 0,\n yOffset = 0,\n windowWidth = 0,\n windowHeight = 0\n) => {\n let x = xPos;\n let y = yPos;\n\n const overflowRight = Math.max(xPos + xOffset + tooltipWidth - (windowWidth - xOffset), 0);\n const overflowLeft = Math.abs(Math.min(xPos - xOffset - tooltipWidth - xOffset, 0));\n const wouldOverflowRight = overflowRight > 0;\n const wouldOverflowLeft = overflowLeft > 0;\n\n const overflowBelow = Math.max(yPos + yOffset + tooltipHeight - (windowHeight - yOffset), 0);\n const overflowAbove = Math.abs(Math.min(yPos - yOffset - tooltipHeight - yOffset, 0));\n const wouldOverflowBelow = overflowBelow > 0;\n const wouldOverflowAbove = overflowAbove > 0;\n\n if (wouldOverflowRight && wouldOverflowLeft) {\n x = overflowRight > overflowLeft ? xOffset : windowWidth - xOffset - tooltipWidth;\n } else if (wouldOverflowRight) {\n x = xPos - xOffset - tooltipWidth;\n } else {\n x = xPos + xOffset;\n }\n\n if (wouldOverflowBelow && wouldOverflowAbove) {\n y = overflowBelow > overflowAbove ? yOffset : windowHeight - yOffset - tooltipHeight;\n } else if (wouldOverflowBelow) {\n y = yPos - yOffset - tooltipHeight;\n } else {\n y = yPos + yOffset;\n }\n return { x, y };\n};\n\nexport const getColorIndicatorClass = (colorIndicator: string, styles: ColorIndicatorStyles) => {\n switch (colorIndicator) {\n case ColorIndicator.series:\n return styles.series;\n case ColorIndicator.value:\n return styles.value;\n case ColorIndicator.hexagon:\n return styles.hexagon;\n case ColorIndicator.pie_1_4:\n return styles.pie_1_4;\n case ColorIndicator.pie_2_4:\n return styles.pie_2_4;\n case ColorIndicator.pie_3_4:\n return styles.pie_3_4;\n case ColorIndicator.marker_sm:\n return styles.marker_sm;\n case ColorIndicator.marker_md:\n return styles.marker_md;\n case ColorIndicator.marker_lg:\n return styles.marker_lg;\n default:\n return styles.value;\n }\n};\n\nconst numberCmp = (a: VizTooltipItem, b: VizTooltipItem) => a.numeric! - b.numeric!;\nconst collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nconst stringCmp = (a: VizTooltipItem, b: VizTooltipItem) => collator.compare(`${a.value}`, `${b.value}`);\n\nexport const getContentItems = (\n fields: Field[],\n xField: Field,\n dataIdxs: Array<number | null>,\n seriesIdx: number | null | undefined,\n mode: TooltipDisplayMode,\n sortOrder: SortOrder,\n fieldFilter = (field: Field) => true,\n hideZeros = false,\n _restFields?: Field[]\n): VizTooltipItem[] => {\n let rows: VizTooltipItem[] = [];\n\n let allNumeric = true;\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n\n if (\n field === xField ||\n field.type === FieldType.time ||\n !fieldFilter(field) ||\n field.config.custom?.hideFrom?.tooltip\n ) {\n continue;\n }\n\n // in single mode, skip all but closest field\n if (mode === TooltipDisplayMode.Single && seriesIdx !== i) {\n continue;\n }\n\n let dataIdx = dataIdxs[i];\n\n // omit non-hovered\n if (dataIdx == null) {\n continue;\n }\n\n if (!(field.type === FieldType.number || field.type === FieldType.boolean || field.type === FieldType.enum)) {\n allNumeric = false;\n }\n\n const v = fields[i].values[dataIdx];\n\n if ((v == null && field.config.noValue == null) || (hideZeros && v === 0)) {\n continue;\n }\n\n const display = field.display!(v); // super expensive :(\n\n // sort NaN and non-numeric to bottom (regardless of sort order)\n const numeric = !Number.isNaN(display.numeric)\n ? display.numeric\n : sortOrder === SortOrder.Descending\n ? Number.MIN_SAFE_INTEGER\n : Number.MAX_SAFE_INTEGER;\n\n const { colorIndicator, colorPlacement } = getIndicatorAndPlacement(field);\n\n rows.push({\n label: field.state?.displayName ?? field.name,\n value: formattedValueToString(display),\n color: display.color ?? FALLBACK_COLOR,\n colorIndicator,\n colorPlacement,\n isActive: mode === TooltipDisplayMode.Multi && seriesIdx === i,\n numeric,\n lineStyle: field.config.custom?.lineStyle,\n });\n }\n\n _restFields?.forEach((field) => {\n if (!field.config.custom?.hideFrom?.tooltip) {\n const { colorIndicator, colorPlacement } = getIndicatorAndPlacement(field);\n const display = field.display!(field.values[dataIdxs[0]!]);\n\n rows.push({\n label: field.state?.displayName ?? field.name,\n value: formattedValueToString(display),\n color: FALLBACK_COLOR,\n colorIndicator,\n colorPlacement,\n lineStyle: field.config.custom?.lineStyle,\n isHiddenFromViz: true,\n });\n }\n });\n\n if (sortOrder !== SortOrder.None && rows.length > 1) {\n const cmp = allNumeric ? numberCmp : stringCmp;\n const mult = sortOrder === SortOrder.Descending ? -1 : 1;\n rows.sort((a, b) => mult * cmp(a, b));\n }\n\n return rows;\n};\n\nconst getIndicatorAndPlacement = (field: Field) => {\n const colorMode = getFieldColorModeForField(field);\n\n let colorIndicator = ColorIndicator.series;\n let colorPlacement = ColorPlacement.first;\n\n if (colorMode.isByValue) {\n colorIndicator = ColorIndicator.value;\n colorPlacement = ColorPlacement.trailing;\n }\n\n return { colorIndicator, colorPlacement };\n};\n","import { get } from 'lodash';\nimport { lastValueFrom } from 'rxjs';\n\nimport { usePluginContext, type UserStorage as UserStorageType } from '@grafana/data';\n\nimport { config } from '../config';\nimport { BackendSrvRequest, getBackendSrv } from '../services';\n\nconst baseURL = `/apis/userstorage.grafana.app/v0alpha1/namespaces/${config.namespace}/user-storage`;\n\ninterface RequestOptions extends BackendSrvRequest {\n manageError?: (err: unknown) => { error: unknown };\n showErrorAlert?: boolean;\n\n // rtk codegen sets this\n body?: BackendSrvRequest['data'];\n}\n\nexport type UserStorageSpec = {\n data: { [key: string]: string };\n};\n\nasync function apiRequest<T>(requestOptions: RequestOptions) {\n try {\n const { data: responseData, ...meta } = await lastValueFrom(\n getBackendSrv().fetch<T>({\n ...requestOptions,\n url: baseURL + requestOptions.url,\n data: requestOptions.body,\n showErrorAlert: false,\n })\n );\n return { data: responseData, meta };\n } catch (error) {\n return requestOptions.manageError ? requestOptions.manageError(error) : { error };\n }\n}\n\n/**\n * A class for interacting with the backend user storage.\n * Exposed internally only to avoid misuse (wrong service name)..\n */\nexport class UserStorage implements UserStorageType {\n private service: string;\n private resourceName: string;\n private userUID: string;\n private canUseUserStorage: boolean;\n private storageSpec: UserStorageSpec | null | undefined;\n\n constructor(service: string) {\n this.service = service;\n this.userUID = config.bootData.user.uid === '' ? config.bootData.user.id.toString() : config.bootData.user.uid;\n this.resourceName = `${service}:${this.userUID}`;\n this.canUseUserStorage = config.bootData.user.isSignedIn;\n }\n\n private async init() {\n if (this.storageSpec !== undefined) {\n return;\n }\n const userStorage = await apiRequest<{ spec: UserStorageSpec }>({\n url: `/${this.resourceName}`,\n method: 'GET',\n manageError: (error) => {\n if (get(error, 'status') === 404) {\n this.storageSpec = null;\n return { error: null };\n }\n return { error };\n },\n });\n if ('error' in userStorage) {\n return userStorage.error;\n }\n this.storageSpec = userStorage.data.spec;\n return;\n }\n\n async getItem(key: string): Promise<string | null> {\n if (!this.canUseUserStorage) {\n // Fallback to localStorage\n return localStorage.getItem(`${this.resourceName}:${key}`);\n }\n // Ensure this.storageSpec is initialized\n await this.init();\n if (!this.storageSpec) {\n // Also, fallback to localStorage for backward compatibility\n return localStorage.getItem(`${this.resourceName}:${key}`);\n }\n return this.storageSpec.data[key];\n }\n\n async setItem(key: string, value: string): Promise<void> {\n if (!this.canUseUserStorage) {\n // Fallback to localStorage\n localStorage.setItem(`${this.resourceName}:${key}`, value);\n return;\n }\n\n const newData = { data: { [key]: value } };\n // Ensure this.storageSpec is initialized\n const error = await this.init();\n if (error) {\n // Fallback to localStorage\n localStorage.setItem(`${this.resourceName}:${key}`, value);\n return;\n }\n\n if (!this.storageSpec) {\n // No user storage found, create a new one\n await apiRequest<UserStorageSpec>({\n url: `/`,\n method: 'POST',\n body: {\n metadata: { name: this.resourceName, labels: { user: this.userUID, service: this.service } },\n spec: newData,\n },\n manageError: (error) => {\n // Fallback to localStorage\n localStorage.setItem(`${this.resourceName}:${key}`, value);\n return { error };\n },\n });\n this.storageSpec = newData;\n return;\n }\n\n // Update existing user storage\n this.storageSpec.data[key] = value;\n await apiRequest<UserStorageSpec>({\n headers: { 'Content-Type': 'application/merge-patch+json' },\n url: `/${this.resourceName}`,\n method: 'PATCH',\n body: { spec: newData },\n manageError: (error) => {\n // Fallback to localStorage\n localStorage.setItem(`${this.resourceName}:${key}`, value);\n return { error };\n },\n });\n }\n}\n\n// This is a type alias to avoid breaking changes\nexport interface PluginUserStorage extends UserStorageType {}\n\n/**\n * A hook for interacting with the backend user storage (or local storage if not enabled).\n * @returns An scoped object for a plugin and a user with getItem and setItem functions.\n * @alpha Experimental\n */\nexport function usePluginUserStorage(): PluginUserStorage {\n const context = usePluginContext();\n if (!context) {\n throw new Error(`No PluginContext found. The usePluginUserStorage() hook can only be used from a plugin.`);\n }\n return new UserStorage(context?.meta.id);\n}\n","import { xor } from 'lodash';\n\nimport {\n DataFrame,\n LoadingState,\n PanelData,\n ThresholdsConfig,\n ThresholdsMode,\n isTimeSeriesFrames,\n} from '@grafana/data';\nimport { GraphThresholdsStyleMode } from '@grafana/schema';\nimport { config } from 'app/core/config';\nimport { EvalFunction } from 'app/features/alerting/state/alertDef';\nimport { isExpressionQuery } from 'app/features/expressions/guards';\nimport { ClassicCondition, ExpressionQueryType } from 'app/features/expressions/types';\nimport { AlertQuery } from 'app/types/unified-alerting-dto';\n\nimport { createDagFromQueries, getOriginOfRefId } from './dag';\n\nexport function queriesWithUpdatedReferences(\n queries: AlertQuery[],\n previousRefId: string,\n newRefId: string\n): AlertQuery[] {\n return queries.map((query) => {\n if (previousRefId === newRefId) {\n return query;\n }\n\n if (!isExpressionQuery(query.model)) {\n return query;\n }\n\n const isMathExpression = query.model.type === 'math';\n const isReduceExpression = query.model.type === 'reduce';\n const isResampleExpression = query.model.type === 'resample';\n const isClassicExpression = query.model.type === 'classic_conditions';\n const isThresholdExpression = query.model.type === 'threshold';\n\n if (isMathExpression) {\n return {\n ...query,\n model: {\n ...query.model,\n expression: updateMathExpressionRefs(query.model.expression ?? '', previousRefId, newRefId),\n },\n };\n }\n\n if (isResampleExpression || isReduceExpression || isThresholdExpression) {\n const isReferencing = query.model.expression === previousRefId;\n\n return {\n ...query,\n model: {\n ...query.model,\n expression: isReferencing ? newRefId : query.model.expression,\n },\n };\n }\n\n if (isClassicExpression) {\n const conditions = query.model.conditions?.map((condition) => ({\n ...condition,\n query: {\n ...condition.query,\n params: condition.query.params.map((param: string) => (param === previousRefId ? newRefId : param)),\n },\n }));\n\n return { ...query, model: { ...query.model, conditions } };\n }\n\n return query;\n });\n}\n\nexport function updateMathExpressionRefs(expression: string, previousRefId: string, newRefId: string): string {\n const oldExpression = new RegExp('(\\\\$' + previousRefId + '\\\\b)|(\\\\${' + previousRefId + '})', 'gm');\n const newExpression = '${' + newRefId + '}';\n\n return expression.replace(oldExpression, newExpression);\n}\n\nexport function refIdExists(queries: AlertQuery[], refId: string | null): boolean {\n return queries.find((query) => query.refId === refId) !== undefined;\n}\n\nexport function containsPathSeparator(value: string): boolean {\n return value.includes('/') || value.includes('\\\\');\n}\n\n// this function assumes we've already checked if the data passed in to the function is of the alert condition\nexport function errorFromCurrentCondition(data: PanelData): Error | undefined {\n if (data.series.length === 0) {\n return;\n }\n\n const isTimeSeriesResults = isTimeSeriesFrames(data.series);\n\n let error;\n if (isTimeSeriesResults) {\n error = new Error('You cannot use time series data as an alert condition, consider adding a reduce expression.');\n }\n\n return error;\n}\n\nexport function errorFromPreviewData(data: PanelData): Error | undefined {\n // give preference to QueryErrors\n if (data.errors?.length) {\n return new Error(data.errors[0].message);\n }\n\n return;\n}\n\nexport function warningFromSeries(series: DataFrame[]): Error | undefined {\n const notices = series[0]?.meta?.notices ?? [];\n const warning = notices.find((notice) => notice.severity === 'warning')?.text;\n\n return warning ? new Error(warning) : undefined;\n}\n\nexport type ThresholdDefinition = {\n config: ThresholdsConfig;\n mode: GraphThresholdsStyleMode;\n};\n\nexport type ThresholdDefinitions = Record<string, ThresholdDefinition>;\n\n/**\n * This function will retrieve threshold definitions for the given array of data and expression queries.\n */\nexport function getThresholdsForQueries(queries: AlertQuery[], condition: string | null) {\n const thresholds: ThresholdDefinitions = {};\n const SUPPORTED_EXPRESSION_TYPES = [ExpressionQueryType.threshold, ExpressionQueryType.classic];\n\n if (!condition) {\n return thresholds;\n }\n\n for (const query of queries) {\n if (!isExpressionQuery(query.model)) {\n continue;\n }\n\n // currently only supporting \"threshold\" & \"classic_condition\" expressions\n if (!SUPPORTED_EXPRESSION_TYPES.includes(query.model.type)) {\n continue;\n }\n\n if (!Array.isArray(query.model.conditions)) {\n continue;\n }\n\n if (query.model.refId !== condition) {\n continue;\n }\n\n // if any of the conditions are a \"range\" we switch to an \"area\" threshold view and ignore single threshold values\n // the time series panel does not support both.\n const hasRangeThreshold = query.model.conditions.some(isRangeCondition);\n\n query.model.conditions.forEach((condition) => {\n const threshold = condition.evaluator.params;\n\n // \"classic_conditions\" use `condition.query.params[]` and \"threshold\" uses `query.model.expression`\n const refId = condition.query?.params[0] ?? query.model.expression;\n\n // if an expression hasn't been linked to a data query yet, it won't have a refId\n if (!refId) {\n return;\n }\n\n const isRangeThreshold = isRangeCondition(condition);\n\n try {\n // create a DAG so we can find the origin of the current expression\n const graph = createDagFromQueries(queries);\n\n const originRefIDs = getOriginOfRefId(refId, graph);\n const originQueries = queries.filter((query) => originRefIDs.includes(query.refId));\n\n originQueries.forEach((originQuery) => {\n const originRefID = originQuery.refId;\n\n // check if the origin is a data query\n const originIsDataQuery = !isExpressionQuery(originQuery?.model);\n\n // if yes, add threshold config to the refId of the data Query\n const hasValidOrigin = Boolean(originIsDataQuery && originRefID);\n\n // create the initial data structure for this origin refId\n if (originRefID && !thresholds[originRefID]) {\n thresholds[originRefID] = {\n config: {\n mode: ThresholdsMode.Absolute,\n steps: [],\n },\n mode: GraphThresholdsStyleMode.Line,\n };\n }\n\n if (originRefID && hasValidOrigin && !isRangeThreshold && !hasRangeThreshold) {\n appendSingleThreshold(originRefID, threshold[0]);\n } else if (originRefID && hasValidOrigin && isRangeThreshold) {\n appendRangeThreshold(originRefID, threshold, condition.evaluator.type);\n thresholds[originRefID].mode = GraphThresholdsStyleMode.LineAndArea;\n }\n });\n } catch (err) {\n console.error('Failed to parse thresholds', err);\n return;\n }\n });\n }\n\n function appendSingleThreshold(refId: string, value: number): void {\n thresholds[refId].config.steps.push(\n ...[\n {\n value: -Infinity,\n color: 'transparent',\n },\n {\n value: value,\n color: config.theme2.colors.error.main,\n },\n ]\n );\n }\n\n function appendRangeThreshold(refId: string, values: number[], type: EvalFunction): void {\n if (type === EvalFunction.IsWithinRange) {\n thresholds[refId].config.steps.push(\n ...[\n {\n value: -Infinity,\n color: 'transparent',\n },\n {\n value: values[0],\n color: config.theme2.colors.error.main,\n },\n {\n value: values[1],\n color: config.theme2.colors.error.main,\n },\n {\n value: values[1],\n color: 'transparent',\n },\n ]\n );\n }\n\n if (type === EvalFunction.IsOutsideRange) {\n thresholds[refId].config.steps.push(\n ...[\n {\n value: -Infinity,\n color: config.theme2.colors.error.main,\n },\n // we have to duplicate this value, or the graph will not display the handle in the right color\n {\n value: values[0],\n color: config.theme2.colors.error.main,\n },\n {\n value: values[0],\n color: 'transparent',\n },\n {\n value: values[1],\n color: config.theme2.colors.error.main,\n },\n ]\n );\n }\n\n if (type === EvalFunction.IsWithinRangeIncluded) {\n thresholds[refId].config.steps.push(\n ...[\n {\n value: -Infinity,\n color: 'transparent',\n },\n {\n value: values[0],\n color: config.theme2.colors.error.main,\n },\n {\n value: values[1],\n color: config.theme2.colors.error.main,\n },\n {\n value: values[1],\n color: 'transparent',\n },\n ]\n );\n }\n\n if (type === EvalFunction.IsOutsideRangeIncluded) {\n thresholds[refId].config.steps.push(\n ...[\n {\n value: -Infinity,\n color: config.theme2.colors.error.main,\n },\n // we have to duplicate this value, or the graph will not display the handle in the right color\n {\n value: values[0],\n color: config.theme2.colors.error.main,\n },\n {\n value: values[0],\n color: 'transparent',\n },\n {\n value: values[1],\n color: config.theme2.colors.error.main,\n },\n ]\n );\n }\n\n // now also sort the threshold values, if we don't then they will look weird in the time series panel\n // TODO this doesn't work for negative values for now, those need to be sorted inverse\n thresholds[refId].config.steps.sort((a, b) => a.value - b.value);\n\n // also make sure we remove any \"undefined\" values from our steps in case the threshold config is incomplete\n thresholds[refId].config.steps = thresholds[refId].config.steps.filter((step) => step.value !== undefined);\n }\n\n return thresholds;\n}\n\nfunction isRangeCondition(condition: ClassicCondition) {\n return (\n condition.evaluator.type === EvalFunction.IsWithinRange ||\n condition.evaluator.type === EvalFunction.IsOutsideRange ||\n condition.evaluator.type === EvalFunction.IsOutsideRangeIncluded ||\n condition.evaluator.type === EvalFunction.IsWithinRangeIncluded\n );\n}\n\nexport function getStatusMessage(data: PanelData): string | undefined {\n const genericErrorMessage = 'Failed to fetch data';\n if (data.state !== LoadingState.Error) {\n return;\n }\n\n const errors = data.errors;\n if (errors?.length) {\n return errors.map((error) => error.message ?? genericErrorMessage).join(', ');\n }\n\n return data.error?.message ?? genericErrorMessage;\n}\n\n/**\n * This function finds what refIds have been updated given the previous Array of queries and an Array of updated data queries.\n * All expression queries are discarded from the arrays, since we have separate handlers for those (see \"onUpdateRefId\") of the ExpressionEditor\n *\n * This code assumes not more than 1 query refId has changed per \"onChangeQueries\",\n */\nexport function findRenamedDataQueryReferences(\n previousQueries: AlertQuery[],\n updatedQueries: AlertQuery[]\n): [string, string] {\n const updatedDataQueries = updatedQueries\n .filter((query) => !isExpressionQuery(query.model))\n .map((query) => query.refId);\n const previousDataQueries = previousQueries\n .filter((query) => !isExpressionQuery(query.model))\n .map((query) => query.refId);\n\n // given the following two arrays\n // ['A', 'B', 'C'] and ['FOO', 'B' 'C']\n // the \"xor\" function will return ['A', 'FOO'] because those are not in both arrays\n const [oldRefId, newRefId] = xor(previousDataQueries, updatedDataQueries);\n\n return [oldRefId, newRefId];\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip {\n /**\n * Bucket count (approx)\n */\n bucketCount?: number;\n /**\n * Offset buckets by this amount\n */\n bucketOffset?: number;\n /**\n * Size of each bucket\n */\n bucketSize?: number;\n /**\n * Combines multiple series into a single histogram\n */\n combine?: boolean;\n}\n\nexport const defaultOptions: Partial<Options> = {\n bucketCount: 30,\n bucketOffset: 0,\n};\n\nexport interface FieldConfig extends common.AxisConfig, common.HideableFieldConfig, common.StackableFieldConfig {\n /**\n * Controls the fill opacity of the bars.\n */\n fillOpacity?: number;\n /**\n * Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option.\n * Gradient appearance is influenced by the Fill opacity setting.\n */\n gradientMode?: common.GraphGradientMode;\n /**\n * Controls line width of the bars.\n */\n lineWidth?: number;\n}\n\nexport const defaultFieldConfig: Partial<FieldConfig> = {\n fillOpacity: 80,\n gradientMode: common.GraphGradientMode.None,\n lineWidth: 1,\n};\n","import { toDuration } from '@grafana/data';\n\nexport interface TimeProps {\n timeInMs: number;\n className?: string;\n humanize?: boolean;\n}\n\nexport const Time = ({ timeInMs, className, humanize }: TimeProps) => {\n return <span className={className}>{formatTime(timeInMs, humanize)}</span>;\n};\n\nconst formatTime = (timeInMs: number, humanize = false): string => {\n const inSeconds = timeInMs / 1000;\n\n if (!humanize) {\n return `${inSeconds.toFixed(1)}s`;\n }\n\n const duration = toDuration(inSeconds, 'seconds');\n const hours = duration.hours();\n const minutes = duration.minutes();\n const seconds = duration.seconds();\n\n if (hours) {\n return `${hours}h ${minutes}m ${seconds}s`;\n }\n\n if (minutes) {\n return `${minutes}m ${seconds}s`;\n }\n\n return `${seconds}s`;\n};\n","import { createAction, createReducer } from '@reduxjs/toolkit';\nimport { remove, toArray, unset } from 'lodash';\n\nimport { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types';\n\nimport { TemplateFormValues } from '../../components/receivers/TemplateForm';\nimport { ensureDefine } from '../../utils/templates';\n\nexport const addNotificationTemplateAction = createAction<{ template: TemplateFormValues }>('notificationTemplate/add');\nexport const updateNotificationTemplateAction = createAction<{\n name: string;\n template: TemplateFormValues;\n}>('notificationTemplate/update');\nexport const deleteNotificationTemplateAction = createAction<{ name: string }>('notificationTemplate/delete');\n\nconst initialState: AlertManagerCortexConfig = {\n alertmanager_config: {},\n template_files: {},\n};\n\n/**\n * This reducer will manage action related to notification templates and make sure all operations on the alertmanager\n * configuration happen immutably and only mutate what they need.\n */\nexport const notificationTemplatesReducer = createReducer(initialState, (builder) => {\n builder\n .addCase(addNotificationTemplateAction, (draft, { payload }) => {\n const { alertmanager_config = {}, template_files = {} } = draft;\n const { template } = payload;\n\n const targetTemplateExists = template_files[template.title] !== undefined;\n if (targetTemplateExists) {\n throw new Error('target template already exists');\n }\n\n // wrap content in \"define\" if it's not already wrapped, in case user did not do it/\n // it's not obvious that this is needed for template to work\n const content = ensureDefine(template.title, template.content);\n\n // add the template to the list of template files\n template_files[template.title] = content;\n\n // add the template to the alertmanager_config\n alertmanager_config.templates = toArray(alertmanager_config.templates).concat(template.title);\n })\n .addCase(updateNotificationTemplateAction, (draft, { payload }) => {\n const { alertmanager_config = {}, template_files = {} } = draft;\n const { name, template } = payload;\n const renaming = name !== template.title;\n\n const targetExists = template_files[name] !== undefined;\n if (!targetExists) {\n throw new Error(`Expected notification template ${name} to exist, but did not find it in the config`);\n }\n\n // wrap content in \"define\" if it's not already wrapped, in case user did not do it/\n // it's not obvious that this is needed for template to work\n const content = ensureDefine(template.title, template.content);\n\n if (renaming) {\n const oldName = name;\n const newName = template.title;\n\n const targetExists = template_files[newName] !== undefined;\n if (targetExists) {\n throw new Error(`Duplicate template name ${newName}`);\n }\n\n unset(template_files, oldName);\n remove(alertmanager_config.templates ?? [], (templateName) => templateName === oldName);\n alertmanager_config.templates = toArray(alertmanager_config.templates).concat(template.title);\n }\n\n template_files[template.title] = content;\n })\n .addCase(deleteNotificationTemplateAction, (draft, { payload }) => {\n const { name } = payload;\n const { alertmanager_config = {}, template_files = {} } = draft;\n\n unset(template_files, name);\n remove(alertmanager_config.templates ?? [], (templateName) => templateName === name);\n });\n});\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { PureComponent } from 'react';\n\nimport { DataSourceSettings } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Button } from '../Button/Button';\nimport { FormField } from '../FormField/FormField';\nimport { Icon } from '../Icon/Icon';\nimport { SecretFormField } from '../SecretFormField/SecretFormField';\n\nexport interface CustomHeader {\n id: string;\n name: string;\n value: string;\n configured: boolean;\n}\n\nexport type CustomHeaders = CustomHeader[];\n\nexport interface Props {\n dataSourceConfig: DataSourceSettings<any, any>;\n onChange: (config: DataSourceSettings) => void;\n}\n\nexport interface State {\n headers: CustomHeaders;\n}\n\ninterface CustomHeaderRowProps {\n header: CustomHeader;\n onReset: (id: string) => void;\n onRemove: (id: string) => void;\n onChange: (value: CustomHeader) => void;\n onBlur: () => void;\n}\n\nconst getCustomHeaderRowStyles = () => ({\n layout: css({\n display: 'flex',\n alignItems: 'center',\n marginBottom: '4px',\n '> *': {\n marginLeft: '4px',\n marginBottom: 0,\n height: '100%',\n '&:first-child, &:last-child': {\n marginLeft: 0,\n },\n },\n }),\n});\n\nconst CustomHeaderRow = ({ header, onBlur, onChange, onRemove, onReset }: CustomHeaderRowProps) => {\n const styles = useStyles2(getCustomHeaderRowStyles);\n\n return (\n <div className={styles.layout}>\n <FormField\n label={t('grafana-ui.data-source-settings.custom-headers-header', 'Header')}\n name=\"name\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"X-Custom-Header\"\n labelWidth={5}\n value={header.name || ''}\n onChange={(e) => onChange({ ...header, name: e.target.value })}\n onBlur={onBlur}\n />\n <SecretFormField\n label={t('grafana-ui.data-source-settings.custom-headers-header-value', 'Value')}\n aria-label={t('grafana-ui.data-source-settings.custom-headers-header-value', 'Value')}\n name=\"value\"\n isConfigured={header.configured}\n value={header.value}\n labelWidth={5}\n inputWidth={header.configured ? 11 : 12}\n placeholder={t('grafana-ui.data-source-settings.custom-headers-header-placeholder', 'Header Value')}\n onReset={() => onReset(header.id)}\n onChange={(e) => onChange({ ...header, value: e.target.value })}\n onBlur={onBlur}\n />\n <Button\n type=\"button\"\n aria-label={t('grafana-ui.data-source-settings.custom-headers-header-remove', 'Remove header')}\n variant=\"secondary\"\n size=\"xs\"\n onClick={(_e) => onRemove(header.id)}\n >\n <Icon name=\"trash-alt\" />\n </Button>\n </div>\n );\n};\n\nCustomHeaderRow.displayName = 'CustomHeaderRow';\n\nexport class CustomHeadersSettings extends PureComponent<Props, State> {\n state: State = {\n headers: [],\n };\n\n constructor(props: Props) {\n super(props);\n const { jsonData, secureJsonData, secureJsonFields } = this.props.dataSourceConfig;\n this.state = {\n headers: Object.keys(jsonData)\n .sort()\n .filter((key) => key.startsWith('httpHeaderName'))\n .map((key, index) => {\n return {\n id: uniqueId(),\n name: jsonData[key],\n value: secureJsonData !== undefined ? secureJsonData[key] : '',\n configured: (secureJsonFields && secureJsonFields[`httpHeaderValue${index + 1}`]) || false,\n };\n }),\n };\n }\n\n updateSettings = () => {\n const { headers } = this.state;\n\n // we remove every httpHeaderName* field\n const newJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.jsonData).filter(([key, val]) => !key.startsWith('httpHeaderName'))\n );\n\n // we remove every httpHeaderValue* field\n const newSecureJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.secureJsonData || {}).filter(\n ([key, val]) => !key.startsWith('httpHeaderValue')\n )\n );\n\n // then we add the current httpHeader-fields\n for (const [index, header] of headers.entries()) {\n newJsonData[`httpHeaderName${index + 1}`] = header.name;\n if (!header.configured) {\n newSecureJsonData[`httpHeaderValue${index + 1}`] = header.value;\n }\n }\n\n this.props.onChange({\n ...this.props.dataSourceConfig,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n });\n };\n\n onHeaderAdd = () => {\n this.setState((prevState) => {\n return { headers: [...prevState.headers, { id: uniqueId(), name: '', value: '', configured: false }] };\n });\n };\n\n onHeaderChange = (headerIndex: number, value: CustomHeader) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((item, index) => {\n if (headerIndex !== index) {\n return item;\n }\n return { ...value };\n }),\n };\n });\n };\n\n onHeaderReset = (headerId: string) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((h, i) => {\n if (h.id !== headerId) {\n return h;\n }\n return {\n ...h,\n value: '',\n configured: false,\n };\n }),\n };\n });\n };\n\n onHeaderRemove = (headerId: string) => {\n this.setState(\n ({ headers }) => ({\n headers: headers.filter((h) => h.id !== headerId),\n }),\n this.updateSettings\n );\n };\n\n render() {\n const { headers } = this.state;\n const { dataSourceConfig } = this.props;\n\n return (\n <div className={'gf-form-group'}>\n <div className=\"gf-form\">\n <h6>\n <Trans i18nKey=\"grafana-ui.data-source-settings.custom-headers-title\">Custom HTTP Headers</Trans>\n </h6>\n </div>\n <div>\n {headers.map((header, i) => (\n <CustomHeaderRow\n key={header.id}\n header={header}\n onChange={(h) => {\n this.onHeaderChange(i, h);\n }}\n onBlur={this.updateSettings}\n onRemove={this.onHeaderRemove}\n onReset={this.onHeaderReset}\n />\n ))}\n </div>\n {!dataSourceConfig.readOnly && (\n <div className=\"gf-form\">\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n type=\"button\"\n onClick={(e) => {\n this.onHeaderAdd();\n }}\n >\n <Trans i18nKey=\"grafana-ui.data-source-settings.custom-headers-add\">Add header</Trans>\n </Button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CustomHeadersSettings;\n","import {\n DataFrame,\n DataFrameJSON,\n DataFrameView,\n getDisplayProcessor,\n SelectableValue,\n toDataFrame,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, getBackendSrv } from '@grafana/runtime';\nimport { TermCount } from 'app/core/components/TagFilter/TagFilter';\n\nimport { DashboardQueryResult, GrafanaSearcher, QueryResponse, SearchQuery, SearchResultMeta } from './types';\nimport { replaceCurrentFolderQuery } from './utils';\n\n// The backend returns an empty frame with a special name to indicate that the indexing engine is being rebuilt,\n// and that it can not serve any search requests. We are temporarily using the old SQL Search API as a fallback when that happens.\nconst loadingFrameName = 'Loading';\n\nconst searchURI = 'api/search-v2';\n\ntype SearchAPIResponse = {\n frames: DataFrameJSON[];\n};\n\nconst folderViewSort = 'name_sort';\n\nexport class BlugeSearcher implements GrafanaSearcher {\n constructor(private fallbackSearcher: GrafanaSearcher) {}\n\n async search(query: SearchQuery): Promise<QueryResponse> {\n if (query.facet?.length) {\n throw new Error('facets not supported!');\n }\n return this.doSearchQuery(query);\n }\n\n async starred(query: SearchQuery): Promise<QueryResponse> {\n if (query.facet?.length) {\n throw new Error('facets not supported!');\n }\n // get the starred dashboards\n const starsUIDS = await getBackendSrv().get('api/user/stars');\n if (starsUIDS?.length) {\n return this.doSearchQuery({\n uid: starsUIDS,\n query: query.query ?? '*',\n });\n }\n // Nothing is starred\n return {\n view: new DataFrameView({ length: 0, fields: [] }),\n totalRows: 0,\n loadMoreItems: async (startIndex: number, stopIndex: number): Promise<void> => {\n return;\n },\n isItemLoaded: (index: number): boolean => {\n return true;\n },\n };\n }\n\n async tags(query: SearchQuery): Promise<TermCount[]> {\n const req = {\n ...query,\n query: query.query ?? '*',\n sort: undefined, // no need to sort the initial query results (not used)\n facet: [{ field: 'tag' }],\n limit: 1, // 0 would be better, but is ignored by the backend\n };\n\n const resp = await getBackendSrv().post<SearchAPIResponse>(searchURI, req);\n const frames = resp.frames.map((f) => toDataFrame(f));\n\n if (frames[0]?.name === loadingFrameName) {\n return this.fallbackSearcher.tags(query);\n }\n\n for (const frame of frames) {\n if (frame.fields[0].name === 'tag') {\n return getTermCountsFrom(frame);\n }\n }\n\n return [];\n }\n\n async getLocationInfo() {\n // TODO: Implement location info, or deprecate this entire file(?)\n return {};\n }\n\n // This should eventually be filled by an API call, but hardcoded is a good start\n getSortOptions(): Promise<SelectableValue[]> {\n const opts: SelectableValue[] = [\n { value: folderViewSort, label: t('search.bluge-searcher.opts.label.alphabetically-az', 'Alphabetically (A-Z)') },\n { value: '-name_sort', label: t('search.bluge-searcher.opts.label.alphabetically-za', 'Alphabetically (Z-A)') },\n ];\n\n if (config.licenseInfo.enabledFeatures.analytics) {\n for (const sf of sortFields) {\n opts.push({ value: `-${sf.name}`, label: `${sf.display} (most)` });\n opts.push({ value: `${sf.name}`, label: `${sf.display} (least)` });\n }\n for (const sf of sortTimeFields) {\n opts.push({ value: `-${sf.name}`, label: `${sf.display} (recent)` });\n opts.push({ value: `${sf.name}`, label: `${sf.display} (oldest)` });\n }\n }\n\n return Promise.resolve(opts);\n }\n\n async doSearchQuery(query: SearchQuery): Promise<QueryResponse> {\n query = await replaceCurrentFolderQuery(query);\n const req = {\n ...query,\n query: query.query ?? '*',\n limit: query.limit ?? firstPageSize,\n };\n\n const rsp = await getBackendSrv().post<SearchAPIResponse>(searchURI, req);\n const frames = rsp.frames.map((f) => toDataFrame(f));\n\n const first = frames.length ? toDataFrame(frames[0]) : { fields: [], length: 0 };\n\n if (first.name === loadingFrameName) {\n return this.fallbackSearcher.search(query);\n }\n\n for (const field of first.fields) {\n field.display = getDisplayProcessor({ field, theme: config.theme2 });\n }\n\n // Make sure the object exists\n if (!first.meta?.custom) {\n first.meta = {\n ...first.meta,\n custom: {\n count: first.length,\n max_score: 1,\n },\n };\n }\n\n const meta = first.meta.custom as SearchResultMeta;\n if (!meta.locationInfo) {\n meta.locationInfo = {}; // always set it so we can append\n }\n\n // Set the field name to a better display name\n if (meta.sortBy?.length) {\n const field = first.fields.find((f) => f.name === meta.sortBy);\n if (field) {\n const name = getSortFieldDisplayName(field.name);\n meta.sortBy = name;\n field.name = name; // make it look nicer\n }\n }\n\n let loadMax = 0;\n let pending: Promise<void> | undefined = undefined;\n const getNextPage = async () => {\n while (loadMax > view.dataFrame.length) {\n const from = view.dataFrame.length;\n if (from >= meta.count) {\n return;\n }\n const resp = await getBackendSrv().post<SearchAPIResponse>(searchURI, {\n ...(req ?? {}),\n from,\n limit: nextPageSizes,\n });\n const frame = toDataFrame(resp.frames[0]);\n\n if (!frame) {\n console.log('no results', frame);\n return;\n }\n if (frame.fields.length !== view.dataFrame.fields.length) {\n console.log('invalid shape', frame, view.dataFrame);\n return;\n }\n\n // Append the raw values to the same array buffer\n const length = frame.length + view.dataFrame.length;\n for (let i = 0; i < frame.fields.length; i++) {\n const values = view.dataFrame.fields[i].values;\n values.push(...frame.fields[i].values);\n }\n view.dataFrame.length = length;\n\n // Add all the location lookup info\n const submeta = frame.meta?.custom as SearchResultMeta;\n if (submeta?.locationInfo && meta) {\n for (const [key, value] of Object.entries(submeta.locationInfo)) {\n meta.locationInfo[key] = value;\n }\n }\n }\n pending = undefined;\n };\n\n const view = new DataFrameView<DashboardQueryResult>(first);\n return {\n totalRows: meta.count ?? first.length,\n view,\n loadMoreItems: async (startIndex: number, stopIndex: number): Promise<void> => {\n loadMax = Math.max(loadMax, stopIndex);\n if (!pending) {\n pending = getNextPage();\n }\n return pending;\n },\n isItemLoaded: (index: number): boolean => {\n return index < view.dataFrame.length;\n },\n };\n }\n\n getFolderViewSort(): string {\n return 'name_sort';\n }\n}\n\nconst firstPageSize = 50;\nconst nextPageSizes = 100;\n\nfunction getTermCountsFrom(frame: DataFrame): TermCount[] {\n const keys = frame.fields[0].values;\n const vals = frame.fields[1].values;\n const counts: TermCount[] = [];\n for (let i = 0; i < frame.length; i++) {\n counts.push({ term: keys[i], count: vals[i] });\n }\n return counts;\n}\n\n// Enterprise only sort field values for dashboards\nconst sortFields = [\n { name: 'views_total', display: 'Views total' },\n { name: 'views_last_30_days', display: 'Views 30 days' },\n { name: 'errors_total', display: 'Errors total' },\n { name: 'errors_last_30_days', display: 'Errors 30 days' },\n];\n\n// Enterprise only time sort field values for dashboards\nconst sortTimeFields = [\n { name: 'created_at', display: 'Created time' },\n { name: 'updated_at', display: 'Updated time' },\n];\n\n/** Given the internal field name, this gives a reasonable display name for the table colum header */\nfunction getSortFieldDisplayName(name: string) {\n for (const sf of sortFields) {\n if (sf.name === name) {\n return sf.display;\n }\n }\n for (const sf of sortTimeFields) {\n if (sf.name === name) {\n return sf.display;\n }\n }\n return name;\n}\n","import uFuzzy from '@leeoniya/ufuzzy';\n\nimport { DataFrameView, SelectableValue } from '@grafana/data';\nimport { TermCount } from 'app/core/components/TagFilter/TagFilter';\n\nimport { DashboardQueryResult, GrafanaSearcher, QueryResponse, SearchQuery } from './types';\n\nexport class FrontendSearcher implements GrafanaSearcher {\n readonly cache = new Map<string, Promise<FullResultCache>>();\n\n constructor(private parent: GrafanaSearcher) {}\n\n async search(query: SearchQuery): Promise<QueryResponse> {\n if (query.facet?.length) {\n throw new Error('facets not supported!');\n }\n\n // we don't yet support anything except default (relevance)\n if (query.sort != null) {\n throw new Error('custom sorting is not supported yet');\n }\n\n // Don't bother... not needed for this exercise\n if (query.tags?.length || query.ds_uid?.length) {\n return this.parent.search(query);\n }\n\n // TODO -- make sure we refresh after a while\n const all = await this.getCache(query.kind);\n const view = all.search(query.query);\n return {\n isItemLoaded: () => true,\n loadMoreItems: async (startIndex: number, stopIndex: number): Promise<void> => {},\n totalRows: view.length,\n view,\n };\n }\n\n async getCache(kind?: string[]): Promise<FullResultCache> {\n const key = kind ? kind.sort().join(',') : '*';\n\n const cacheHit = this.cache.get(key);\n if (cacheHit) {\n try {\n return await cacheHit;\n } catch (e) {\n // delete the cache key so that the next request will retry\n this.cache.delete(key);\n return new FullResultCache(new DataFrameView({ name: 'error', fields: [], length: 0 }));\n }\n }\n\n const resultPromise = this.parent\n .search({\n kind, // match the request\n limit: 5000, // max for now\n })\n .then((res) => new FullResultCache(res.view));\n\n this.cache.set(key, resultPromise);\n return resultPromise;\n }\n\n async starred(query: SearchQuery): Promise<QueryResponse> {\n return this.parent.starred(query);\n }\n\n sortPlaceholder = 'Default (Relevance)';\n\n // returns the appropriate sorting options\n async getSortOptions(): Promise<SelectableValue[]> {\n return this.parent.getSortOptions();\n }\n\n async tags(query: SearchQuery): Promise<TermCount[]> {\n return this.parent.tags(query);\n }\n\n async getLocationInfo() {\n return this.parent.getLocationInfo();\n }\n\n getFolderViewSort(): string {\n return this.parent.getFolderViewSort();\n }\n}\n\nclass FullResultCache {\n readonly names: string[];\n empty: DataFrameView<DashboardQueryResult>;\n\n ufuzzy = new uFuzzy({\n intraMode: 1,\n intraIns: 1,\n intraSub: 1,\n intraTrn: 1,\n intraDel: 1,\n });\n\n constructor(private full: DataFrameView<DashboardQueryResult>) {\n this.names = this.full.fields.name.values;\n\n // Copy with empty values\n this.empty = new DataFrameView<DashboardQueryResult>({\n ...this.full.dataFrame, // copy folder metadata\n fields: this.full.dataFrame.fields.map((v) => ({ ...v, values: [] })),\n length: 0, // for now\n });\n }\n\n // single instance that is mutated for each response (not great, but OK for now)\n search(query?: string): DataFrameView<DashboardQueryResult> {\n if (!query?.length || query === '*') {\n return this.full;\n }\n\n const allFields = this.full.dataFrame.fields;\n const haystack = this.names;\n\n // eslint-disable-next-line\n const values = allFields.map((v) => [] as any[]); // empty value for each field\n\n let [idxs, info, order] = this.ufuzzy.search(haystack, query, 5);\n\n for (let c = 0; c < allFields.length; c++) {\n let src = allFields[c].values;\n let dst = values[c];\n\n // <= 1000 matches (ranked)\n if (info && order) {\n for (let i = 0; i < order.length; i++) {\n let haystackIdx = info.idx[order[i]];\n dst.push(src[haystackIdx]);\n }\n }\n // > 1000 matches (unranked)\n else if (idxs) {\n for (let i = 0; i < idxs.length; i++) {\n let haystackIdx = idxs[i];\n dst.push(src[haystackIdx]);\n }\n }\n }\n\n // mutates the search object\n this.empty.dataFrame.fields.forEach((f, idx) => {\n f.values = values[idx]; // or just set it?\n });\n this.empty.dataFrame.length = this.empty.dataFrame.fields[0].values.length;\n\n return this.empty;\n }\n}\n","import { DataFrame, DataFrameView, FieldType, getDisplayProcessor, SelectableValue } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { TermCount } from 'app/core/components/TagFilter/TagFilter';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport { PermissionLevel } from 'app/types/acl';\n\nimport { DEFAULT_MAX_VALUES, GENERAL_FOLDER_UID, TYPE_KIND_MAP } from '../constants';\nimport { DashboardSearchHit, DashboardSearchItemType } from '../types';\n\nimport { deletedDashboardsCache } from './deletedDashboardsCache';\nimport { DashboardQueryResult, GrafanaSearcher, LocationInfo, QueryResponse, SearchQuery, SortOptions } from './types';\nimport { filterSearchResults, replaceCurrentFolderQuery, searchHitsToDashboardSearchHits } from './utils';\n\ninterface APIQuery {\n query?: string;\n tag?: string[];\n limit?: number;\n page?: number;\n type?: DashboardSearchItemType;\n dashboardUID?: string[];\n folderUIDs?: string[];\n sort?: string;\n starred?: boolean;\n permission?: PermissionLevel;\n deleted?: boolean;\n}\n\n// Internal object to hold folderId\ninterface LocationInfoEXT extends LocationInfo {\n folderUid?: string;\n}\n\nexport class SQLSearcher implements GrafanaSearcher {\n locationInfo: Record<string, LocationInfoEXT> = {\n general: {\n kind: 'folder',\n name: 'Dashboards',\n url: '/dashboards',\n },\n }; // share location info with everyone\n\n private async composeQuery(apiQuery: APIQuery, searchOptions: SearchQuery): Promise<APIQuery> {\n const query = await replaceCurrentFolderQuery(searchOptions);\n\n if (query.query?.length && query.query !== '*') {\n apiQuery.query = query.query;\n }\n\n // search v1 supports only one kind\n if (query.kind?.length === 1 && TYPE_KIND_MAP[query.kind[0]]) {\n apiQuery.type = TYPE_KIND_MAP[query.kind[0]];\n }\n\n if (query.uid) {\n apiQuery.dashboardUID = query.uid;\n } else if (query.location?.length) {\n apiQuery.folderUIDs = [query.location];\n }\n\n return apiQuery;\n }\n\n async search(query: SearchQuery): Promise<QueryResponse> {\n if (query.facet?.length) {\n throw new Error('facets not supported!');\n }\n\n if (query.from !== undefined) {\n if (!query.limit) {\n throw new Error('Must specify non-zero limit parameter when using from');\n }\n\n if ((query.from / query.limit) % 1 !== 0) {\n throw new Error('From parameter must be a multiple of limit');\n }\n }\n\n const limit = query.limit ?? (query.from !== undefined ? 1 : DEFAULT_MAX_VALUES);\n const page =\n query.from !== undefined\n ? // prettier-ignore\n (query.from / limit) + 1 // pages are 1-indexed, so need to +1 to get there\n : undefined;\n\n const q = await this.composeQuery(\n {\n limit: limit,\n tag: query.tags,\n sort: query.sort,\n permission: query.permission,\n page,\n deleted: query.deleted,\n },\n query\n );\n\n return this.doAPIQuery(q);\n }\n\n async starred(query: SearchQuery): Promise<QueryResponse> {\n if (query.facet?.length) {\n throw new Error('facets not supported!');\n }\n\n const q = await this.composeQuery(\n {\n limit: query.limit ?? DEFAULT_MAX_VALUES, // default 1k max values\n tag: query.tags,\n sort: query.sort,\n starred: query.starred,\n },\n query\n );\n\n return this.doAPIQuery(q);\n }\n\n // returns the appropriate sorting options\n async getSortOptions(): Promise<SelectableValue[]> {\n const opts = await backendSrv.get<SortOptions>('/api/search/sorting');\n return opts.sortOptions.map((v) => ({\n value: v.name,\n label: v.displayName,\n }));\n }\n\n // NOTE: the bluge query will find tags within the current results, the SQL based one does not\n async tags(query: SearchQuery): Promise<TermCount[]> {\n const terms = await backendSrv.get<TermCount[]>('/api/dashboards/tags');\n return terms.sort((a, b) => b.count - a.count);\n }\n\n async getLocationInfo() {\n return this.locationInfo;\n }\n\n async doAPIQuery(query: APIQuery): Promise<QueryResponse> {\n let rsp: DashboardSearchHit[];\n\n if (query.deleted) {\n const allDeletedHits = await deletedDashboardsCache.get();\n rsp = searchHitsToDashboardSearchHits(filterSearchResults(allDeletedHits, query));\n } else {\n rsp = await backendSrv.get<DashboardSearchHit[]>('/api/search', query);\n }\n\n // Field values (columnar)\n const kind: string[] = [];\n const name: string[] = [];\n const uid: string[] = [];\n const url: string[] = [];\n const tags: string[][] = [];\n const location: string[] = [];\n const sortBy: number[] = [];\n const isDeleted: boolean[] = [];\n const permanentlyDeleteDate: Array<Date | undefined> = [];\n let sortMetaName: string | undefined;\n\n for (let hit of rsp) {\n const k = hit.type === 'dash-folder' ? 'folder' : 'dashboard';\n kind.push(k);\n name.push(hit.title);\n uid.push(hit.uid);\n url.push(hit.url);\n tags.push(hit.tags);\n sortBy.push(hit.sortMeta!);\n isDeleted.push(hit.isDeleted ?? false);\n permanentlyDeleteDate.push(hit.permanentlyDeleteDate ? new Date(hit.permanentlyDeleteDate) : undefined);\n\n let v = hit.folderUid;\n if (!v && k === 'dashboard') {\n v = GENERAL_FOLDER_UID;\n }\n location.push(v!);\n\n if (hit.sortMetaName?.length) {\n sortMetaName = hit.sortMetaName;\n }\n\n if (hit.folderUid && hit.folderTitle) {\n this.locationInfo[hit.folderUid] = {\n kind: 'folder',\n name: hit.folderTitle,\n url: hit.folderUrl!,\n folderUid: hit.folderUid,\n };\n } else if (k === 'folder') {\n this.locationInfo[hit.uid] = {\n kind: k,\n name: hit.title!,\n url: hit.url,\n folderUid: hit.folderUid,\n };\n }\n }\n\n const data: DataFrame = {\n fields: [\n { name: 'kind', type: FieldType.string, config: {}, values: kind },\n { name: 'name', type: FieldType.string, config: {}, values: name },\n { name: 'uid', type: FieldType.string, config: {}, values: uid },\n { name: 'url', type: FieldType.string, config: {}, values: url },\n { name: 'tags', type: FieldType.other, config: {}, values: tags },\n { name: 'location', type: FieldType.string, config: {}, values: location },\n { name: 'isDeleted', type: FieldType.boolean, config: {}, values: isDeleted },\n { name: 'permanentlyDeleteDate', type: FieldType.time, config: {}, values: permanentlyDeleteDate },\n ],\n length: name.length,\n meta: {\n custom: {\n count: name.length,\n max_score: 1,\n locationInfo: this.locationInfo,\n },\n },\n };\n\n // Add enterprise sort fields as a field in the frame\n if (sortMetaName?.length && sortBy.length) {\n data.meta!.custom!.sortBy = sortMetaName;\n data.fields.push({\n name: sortMetaName, // Used in display\n type: FieldType.number,\n config: {},\n values: sortBy,\n });\n }\n\n for (const field of data.fields) {\n field.display = getDisplayProcessor({ field, theme: config.theme2 });\n }\n\n const view = new DataFrameView<DashboardQueryResult>(data);\n return {\n totalRows: data.length,\n view,\n\n // Paging not supported with this version\n loadMoreItems: async (startIndex: number, stopIndex: number): Promise<void> => {},\n isItemLoaded: (index: number): boolean => true,\n };\n }\n\n getFolderViewSort = () => {\n // sorts alphabetically in memory after retrieving the folders from the database\n return '';\n };\n}\n","import { isEmpty } from 'lodash';\n\nimport { BASE_URL as v0alphaBaseURL } from '@grafana/api-clients/rtkq/dashboard/v0alpha1';\nimport { generatedAPI as legacyUserAPI } from '@grafana/api-clients/rtkq/legacy/user';\nimport { DataFrame, DataFrameView, getDisplayProcessor, SelectableValue, toDataFrame } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config, getBackendSrv } from '@grafana/runtime';\nimport { generatedAPI, ListStarsApiResponse } from 'app/api/clients/preferences/v1alpha1';\nimport { getAPIBaseURL } from 'app/api/utils';\nimport { TermCount } from 'app/core/components/TagFilter/TagFilter';\nimport { contextSrv } from 'app/core/core';\nimport kbn from 'app/core/utils/kbn';\nimport { dispatch } from 'app/store/store';\n\nimport { deletedDashboardsCache } from './deletedDashboardsCache';\nimport {\n DashboardQueryResult,\n GrafanaSearcher,\n LocationInfo,\n QueryResponse,\n SearchQuery,\n SearchResultMeta,\n} from './types';\nimport { filterSearchResults, replaceCurrentFolderQuery } from './utils';\n\n// The backend returns an empty frame with a special name to indicate that the indexing engine is being rebuilt,\n// and that it can not serve any search requests. We are temporarily using the old SQL Search API as a fallback when that happens.\nconst loadingFrameName = 'Loading';\n\nconst searchURI = `${v0alphaBaseURL}/search`;\n\nexport type SearchHit = {\n resource: string; // dashboards | folders\n name: string;\n title: string;\n location: string;\n folder: string;\n tags: string[];\n\n field: Record<string, string | number>; // extra fields from the backend - sort fields included here as well\n\n // calculated in the frontend\n url: string;\n};\n\nexport type SearchAPIResponse = {\n totalHits: number;\n hits: SearchHit[];\n facets?: {\n tags?: {\n terms?: Array<{\n term: string;\n count: number;\n }>;\n };\n };\n};\n\nconst folderViewSort = 'name_sort';\n\nexport class UnifiedSearcher implements GrafanaSearcher {\n locationInfo: Promise<Record<string, LocationInfo>>;\n\n constructor(private fallbackSearcher: GrafanaSearcher) {\n this.locationInfo = loadLocationInfo();\n }\n\n async search(query: SearchQuery): Promise<QueryResponse> {\n if (query.facet?.length) {\n throw new Error('facets not supported!');\n }\n return this.doSearchQuery(query);\n }\n\n async starred(query: SearchQuery): Promise<QueryResponse> {\n if (query.facet?.length) {\n throw new Error('facets not supported!');\n }\n // get the starred dashboards\n let starsIds: string[] | undefined = [];\n if (config.featureToggles.starsFromAPIServer) {\n const name = `user-${contextSrv.user.uid}`;\n const result: { data: ListStarsApiResponse } = await dispatch(\n generatedAPI.endpoints.listStars.initiate({\n fieldSelector: `metadata.name=${name}`,\n })\n );\n starsIds =\n result.data.items?.[0].spec.resource.find(\n (info) => info.group === 'dashboard.grafana.app' && info.kind === 'Dashboard'\n )?.names || [];\n } else {\n starsIds = await dispatch(legacyUserAPI.endpoints.getStars.initiate()).unwrap();\n }\n\n if (starsIds?.length) {\n return this.doSearchQuery({\n ...query,\n name: starsIds,\n query: query.query ?? '*',\n });\n }\n // Nothing is starred\n return noDataResponse();\n }\n\n async tags(query: SearchQuery): Promise<TermCount[]> {\n const qry = query.query ?? '*';\n let uri = `${searchURI}?facet=tags&query=${qry}&limit=1`;\n const resp = await getBackendSrv().get<SearchAPIResponse>(uri);\n return resp.facets?.tags?.terms || [];\n }\n\n async getLocationInfo() {\n return this.locationInfo;\n }\n\n // TODO: Implement this correctly\n getSortOptions(): Promise<SelectableValue[]> {\n const opts: SelectableValue[] = [\n {\n value: folderViewSort,\n label: t('search.unified-searcher.opts.label.alphabetically-az', 'Alphabetically (A-Z)'),\n },\n { value: '-name_sort', label: t('search.unified-searcher.opts.label.alphabetically-za', 'Alphabetically (Z-A)') },\n ];\n\n if (config.licenseInfo.enabledFeatures.analytics) {\n for (const sf of sortFields) {\n opts.push({ value: `-${sf.name}`, label: `${sf.display} (most)` });\n opts.push({ value: `${sf.name}`, label: `${sf.display} (least)` });\n }\n }\n\n return Promise.resolve(opts);\n }\n\n async doSearchQuery(query: SearchQuery): Promise<QueryResponse> {\n const uri = await this.newRequest(query);\n\n let rsp: SearchAPIResponse;\n\n if (query.deleted) {\n const data = await deletedDashboardsCache.get();\n const results = filterSearchResults(data, query);\n rsp = { hits: results, totalHits: results.length };\n } else {\n rsp = await this.fetchResponse(uri);\n }\n const first = toDashboardResults(rsp, query.sort ?? '');\n if (first.name === loadingFrameName) {\n return this.fallbackSearcher.search(query);\n }\n\n const customMeta = first.meta?.custom;\n const meta: SearchResultMeta = {\n count: customMeta?.count ?? first.length,\n max_score: customMeta?.max_score ?? 1,\n locationInfo: customMeta?.locationInfo ?? {},\n sortBy: customMeta?.sortBy,\n };\n meta.locationInfo = await this.locationInfo;\n\n // Update the DataFrame meta to point to the typed meta object\n if (first.meta) {\n first.meta.custom = meta;\n }\n\n // Set the field name to a better display name\n if (meta.sortBy?.length) {\n const field = first.fields.find((f) => f.name === meta.sortBy);\n if (field) {\n const name = getSortFieldDisplayName(field.name);\n // We don't want to directly change the field name, just the display name\n // When the columns names get generated it uses getFieldDisplayName(), which will check if there is a field.config.displayName\n field.config.displayName = name;\n }\n }\n\n let loadMax = 0;\n let pending: Promise<void> | undefined = undefined;\n const getNextPage = async () => {\n while (loadMax > view.dataFrame.length) {\n const offset = view.dataFrame.length;\n if (offset >= meta.count) {\n return;\n }\n const nextPageUrl = `${uri}&offset=${offset}`;\n const resp = await this.fetchResponse(nextPageUrl);\n const frame = toDashboardResults(resp, query.sort ?? '');\n if (!frame) {\n console.log('no results', frame);\n return;\n }\n if (frame.fields.length !== view.dataFrame.fields.length) {\n console.log('invalid shape', frame, view.dataFrame);\n return;\n }\n\n // Append the raw values to the same array buffer\n const length = frame.length + view.dataFrame.length;\n frame.fields.forEach((f) => {\n const field = view.dataFrame.fields.find((vf) => vf.name === f.name);\n if (field) {\n field.values.push(...f.values);\n }\n });\n\n view.dataFrame.length = length;\n\n // Add all the location lookup info\n const submeta = frame.meta?.custom;\n if (submeta?.locationInfo && meta) {\n // Merge locationInfo from submeta into meta\n const subLocationInfo = submeta.locationInfo;\n if (subLocationInfo && typeof subLocationInfo === 'object') {\n Object.assign(meta.locationInfo, subLocationInfo);\n }\n }\n }\n pending = undefined;\n };\n\n const view = new DataFrameView<DashboardQueryResult>(first);\n return {\n totalRows: meta.count ?? first.length,\n view,\n loadMoreItems: async (startIndex: number, stopIndex: number): Promise<void> => {\n loadMax = Math.max(loadMax, stopIndex + 1);\n if (!pending) {\n pending = getNextPage();\n }\n return pending;\n },\n isItemLoaded: (index: number): boolean => {\n return index < view.dataFrame.length;\n },\n };\n }\n\n async fetchResponse(uri: string) {\n const rsp = await getBackendSrv().get<SearchAPIResponse>(uri);\n const isFolderCacheStale = await this.isFolderCacheStale(rsp.hits);\n if (!isFolderCacheStale) {\n return rsp;\n }\n // sync the location info (folders)\n this.locationInfo = loadLocationInfo();\n // recheck for missing folders\n const hasMissing = await this.isFolderCacheStale(rsp.hits);\n if (!hasMissing) {\n return rsp;\n }\n\n const locationInfo = await this.locationInfo;\n const hits = rsp.hits.map((hit) => {\n if (hit.folder === undefined) {\n return { ...hit, location: 'general', folder: 'general' };\n }\n\n // this means a user has permission to see this dashboard, but not the folder contents\n if (locationInfo[hit.folder] === undefined) {\n return { ...hit, location: 'sharedwithme', folder: 'sharedwithme' };\n }\n\n return hit;\n });\n\n const totalHits = rsp.totalHits - (rsp.hits.length - hits.length);\n return { ...rsp, hits, totalHits };\n }\n\n async isFolderCacheStale(hits: SearchHit[]): Promise<boolean> {\n const locationInfo = await this.locationInfo;\n return hits.some((hit) => {\n return hit.folder !== undefined && locationInfo[hit.folder] === undefined;\n });\n }\n\n private async newRequest(query: SearchQuery): Promise<string> {\n query = await replaceCurrentFolderQuery(query);\n\n let uri = searchURI;\n uri += `?query=${encodeURIComponent(query.query ?? '*')}`;\n uri += `&limit=${query.limit ?? pageSize}`;\n\n if (query.offset) {\n uri += `&offset=${query.offset}`;\n }\n\n if (!isEmpty(query.location)) {\n uri += `&folder=${query.location}`;\n }\n\n if (query.kind) {\n // filter resource types\n uri += '&' + query.kind.map((kind) => `type=${kind}`).join('&');\n }\n\n if (query.tags?.length) {\n uri += '&' + query.tags.map((tag) => `tag=${encodeURIComponent(tag)}`).join('&');\n }\n\n if (query.sort) {\n const sort = query.sort.replace('_sort', '').replace('name', 'title');\n uri += `&sort=${sort}`;\n const sortField = sort.startsWith('-') ? sort.substring(1) : sort;\n\n uri += `&field=${sortField}`; // we want to the sort field to be included in the response\n }\n\n if (query.name?.length) {\n uri += '&' + query.name.map((name) => `name=${encodeURIComponent(name)}`).join('&');\n }\n\n if (query.uid?.length) {\n // legacy support for filtering by dashboard uid\n uri += '&' + query.uid.map((name) => `name=${encodeURIComponent(name)}`).join('&');\n }\n\n if (query.deleted) {\n uri = `${getAPIBaseURL('dashboard.grafana.app', 'v1beta1')}/dashboards/?labelSelector=grafana.app/get-trash=true`;\n }\n return uri;\n }\n\n getFolderViewSort(): string {\n return 'name_sort';\n }\n}\n\nconst pageSize = 50;\n\n// Enterprise only sort field values for dashboards\nconst sortFields = [\n { name: 'views_total', display: 'Views total' },\n { name: 'views_last_30_days', display: 'Views 30 days' },\n { name: 'errors_total', display: 'Errors total' },\n { name: 'errors_last_30_days', display: 'Errors 30 days' },\n];\n\nfunction noDataResponse(): QueryResponse | PromiseLike<QueryResponse> {\n return {\n view: new DataFrameView({ length: 0, fields: [] }),\n totalRows: 0,\n loadMoreItems: async (startIndex: number, stopIndex: number): Promise<void> => {\n return;\n },\n isItemLoaded: (index: number): boolean => {\n return true;\n },\n };\n}\n\n/** Given the internal field name, this gives a reasonable display name for the table colum header */\nfunction getSortFieldDisplayName(name: string) {\n for (const sf of sortFields) {\n if (sf.name === name) {\n return sf.display;\n }\n }\n return name;\n}\n\nexport function toDashboardResults(rsp: SearchAPIResponse, sort: string): DataFrame {\n const hits = rsp.hits;\n if (hits.length < 1) {\n return { fields: [], length: 0 };\n }\n const dashboardHits = hits.map((hit) => {\n let location = hit.folder;\n if (hit.resource === 'dashboards' && isEmpty(location)) {\n location = 'general';\n }\n\n // display null field values as \"-\"\n const field = Object.fromEntries(\n Object.entries(hit.field ?? {}).map(([key, value]) => [key, value == null ? '-' : value])\n );\n\n return {\n ...hit,\n uid: hit.name,\n url: toURL(hit.resource, hit.name, hit.title),\n tags: hit.tags || [],\n folder: hit.folder || 'general',\n location,\n name: hit.title, // 🤯 FIXME hit.name is k8s name, eg grafana dashboards UID\n kind: hit.resource.substring(0, hit.resource.length - 1), // dashboard \"kind\" is not plural\n ...field,\n };\n });\n const frame = toDataFrame(dashboardHits);\n frame.meta = {\n custom: {\n count: rsp.totalHits,\n max_score: 1,\n },\n };\n if (sort && frame.meta.custom) {\n // trim the \"-\" from sort if it exists\n frame.meta.custom.sortBy = sort.startsWith('-') ? sort.substring(1) : sort;\n }\n\n for (const field of frame.fields) {\n field.display = getDisplayProcessor({ field, theme: config.theme2 });\n }\n return frame;\n}\n\nasync function loadLocationInfo(): Promise<Record<string, LocationInfo>> {\n // TODO: use proper pagination for search.\n const uri = `${searchURI}?type=folders&limit=100000`;\n const rsp = getBackendSrv()\n .get<SearchAPIResponse>(uri)\n .then((rsp) => {\n const locationInfo: Record<string, LocationInfo> = {\n general: {\n kind: 'folder',\n name: 'Dashboards',\n url: '/dashboards',\n }, // share location info with everyone\n sharedwithme: {\n kind: 'sharedwithme',\n name: 'Shared with me',\n url: '',\n },\n };\n for (const hit of rsp.hits) {\n locationInfo[hit.name] = {\n name: hit.title,\n kind: 'folder',\n url: toURL('folders', hit.name, hit.title),\n };\n }\n return locationInfo;\n });\n return rsp;\n}\n\nfunction toURL(resource: string, name: string, title: string): string {\n if (resource === 'folders') {\n return `/dashboards/f/${name}`;\n }\n const slug = kbn.slugifyForUrl(title);\n return `/d/${name}/${slug}`;\n}\n","import { config } from '@grafana/runtime';\n\nimport { BlugeSearcher } from './bluge';\nimport { FrontendSearcher } from './frontend';\nimport { SQLSearcher } from './sql';\nimport { GrafanaSearcher } from './types';\nimport { UnifiedSearcher } from './unified';\n\nlet searcher: GrafanaSearcher | undefined = undefined;\n\nexport function getGrafanaSearcher(): GrafanaSearcher {\n if (!searcher) {\n const sqlSearcher = new SQLSearcher();\n\n const useBluge = config.featureToggles.panelTitleSearch;\n searcher = useBluge ? new BlugeSearcher(sqlSearcher) : sqlSearcher;\n if (useBluge && window.location.search.includes('do-frontend-query')) {\n return new FrontendSearcher(searcher);\n }\n\n const useUnifiedStorageSearch = config.featureToggles.unifiedStorageSearchUI;\n searcher = useUnifiedStorageSearch ? new UnifiedSearcher(sqlSearcher) : sqlSearcher;\n }\n return searcher!;\n}\n\n/**\n * Testing only - otherwise tests will use the same searcher instance, making it hard to test unified search vs legacy\n * @deprecated Don't use this other than in tests!\n */\nexport function resetGrafanaSearcher() {\n if (process.env.NODE_ENV !== 'test') {\n throw new Error('resetGrafanaSearcher can only be used in tests');\n }\n searcher = undefined;\n}\n","import { useCallback } from 'react';\n\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { config, locationService } from '@grafana/runtime';\nimport { IconName, Menu } from '@grafana/ui';\nimport { getTrackingSource, shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';\n\nimport { DashboardScene } from '../../scene/DashboardScene';\nimport { DashboardInteractions } from '../../utils/interactions';\n\nconst newExportButtonSelector = e2eSelectors.pages.Dashboard.DashNav.NewExportButton.Menu;\n\nexport interface ExportDrawerMenuItem {\n shareId: string;\n testId?: string;\n label: string;\n description?: string;\n icon: IconName;\n renderCondition: boolean;\n onClick: (d: DashboardScene) => void;\n}\n\nconst customShareDrawerItem: ExportDrawerMenuItem[] = [];\n\nexport function addDashboardExportDrawerItem(item: ExportDrawerMenuItem) {\n customShareDrawerItem.push(item);\n}\n\nexport default function ExportMenu({ dashboard }: { dashboard: DashboardScene }) {\n const onMenuItemClick = (shareView: string) => {\n locationService.partial({ shareView });\n };\n\n const buildMenuItems = useCallback(() => {\n const menuItems: ExportDrawerMenuItem[] = [];\n\n customShareDrawerItem.forEach((d) => menuItems.push(d));\n\n const label = config.featureToggles.kubernetesDashboards\n ? t('dashboard.toolbar.new.export.tooltip.as-code', 'Export as code')\n : t('share-dashboard.menu.export-json-title', 'Export as JSON');\n\n menuItems.push({\n shareId: shareDashboardType.export,\n testId: newExportButtonSelector.exportAsJson,\n icon: 'arrow',\n label,\n renderCondition: true,\n onClick: () => onMenuItemClick(shareDashboardType.export),\n });\n\n menuItems.push({\n shareId: shareDashboardType.image,\n testId: newExportButtonSelector.exportAsImage,\n icon: 'camera',\n label: t('share-dashboard.menu.export-image-title', 'Export as image'),\n renderCondition: Boolean(config.featureToggles.sharingDashboardImage),\n onClick: () => onMenuItemClick(shareDashboardType.image),\n });\n\n return menuItems.filter((item) => item.renderCondition);\n }, []);\n\n const onClick = (item: ExportDrawerMenuItem) => {\n DashboardInteractions.sharingCategoryClicked({\n item: item.shareId,\n shareResource: getTrackingSource(),\n });\n\n item.onClick(dashboard);\n };\n\n return (\n <Menu\n ariaLabel={t('dashboard.export.menu.label', 'Export dashboard menu')}\n data-testid={newExportButtonSelector.container}\n >\n {buildMenuItems().map((item) => (\n <Menu.Item\n key={item.label}\n label={item.label}\n icon={item.icon}\n description={item.description}\n onClick={() => onClick(item)}\n testId={item.testId}\n />\n ))}\n </Menu>\n );\n}\n","import { LineStyle } from '@grafana/schema';\n\nexport enum ColorIndicator {\n series = 'series',\n value = 'value',\n hexagon = 'hexagon',\n pie_1_4 = 'pie_1_4',\n pie_2_4 = 'pie_2_4',\n pie_3_4 = 'pie_3_4',\n marker_sm = 'marker_sm',\n marker_md = 'marker_md',\n marker_lg = 'marker_lg',\n}\n\nexport enum ColorPlacement {\n hidden = 'hidden',\n first = 'first',\n leading = 'leading',\n trailing = 'trailing',\n}\n\nexport interface VizTooltipItem {\n label: string;\n value: string;\n color?: string;\n colorIndicator?: ColorIndicator;\n colorPlacement?: ColorPlacement;\n isActive?: boolean;\n lineStyle?: LineStyle;\n isHiddenFromViz?: boolean;\n\n // internal/tmp for sorting\n numeric?: number;\n}\n\nexport const DEFAULT_COLOR_INDICATOR = ColorIndicator.series;\n","import { Record } from 'immutable';\nimport * as React from 'react';\nimport { Mark, Node, Decoration } from 'slate';\nimport { Editor } from 'slate-react';\n\nimport TOKEN_MARK from './TOKEN_MARK';\n\nexport interface OptionsFormat {\n // Determine which node should be highlighted\n onlyIn?: (node: Node) => boolean;\n // Returns the syntax for a node that should be highlighted\n getSyntax?: (node: Node) => string;\n // Render a highlighting mark in a highlighted node\n renderMark?: ({ mark, children }: { mark: Mark; children: React.ReactNode }) => void | React.ReactNode;\n}\n\n/**\n * Default filter for code blocks\n */\nfunction defaultOnlyIn(node: Node): boolean {\n return node.object === 'block' && node.type === 'code_block';\n}\n\n/**\n * Default getter for syntax\n */\nfunction defaultGetSyntax(node: Node): string {\n return 'javascript';\n}\n\n/**\n * Default rendering for decorations\n */\nfunction defaultRenderDecoration(\n props: { children: React.ReactNode; decoration: Decoration },\n editor: Editor,\n next: () => any\n): void | React.ReactNode {\n const { decoration } = props;\n if (decoration.type !== TOKEN_MARK) {\n return next();\n }\n\n const className = decoration.data.get('className');\n return <span className={className}>{props.children}</span>;\n}\n\n/**\n * The plugin options\n */\nclass Options\n extends Record({\n onlyIn: defaultOnlyIn,\n getSyntax: defaultGetSyntax,\n renderDecoration: defaultRenderDecoration,\n })\n implements OptionsFormat\n{\n declare readonly onlyIn: (node: Node) => boolean;\n declare readonly getSyntax: (node: Node) => string;\n declare readonly renderDecoration: (\n {\n decoration,\n children,\n }: {\n decoration: Decoration;\n children: React.ReactNode;\n },\n editor: Editor,\n next: () => any\n ) => void | React.ReactNode;\n\n constructor(props: OptionsFormat) {\n super(props);\n }\n}\n\nexport default Options;\n","import Prism, { LanguageMap } from 'prismjs';\nimport { Block, Text, Decoration } from 'slate';\nimport { Plugin } from 'slate-react';\n\nimport TOKEN_MARK from './TOKEN_MARK';\nimport Options, { OptionsFormat } from './options';\n\nexport interface Token {\n content: string;\n offsets?: {\n start: number;\n end: number;\n };\n types: string[];\n aliases: string[];\n prev?: Token | null;\n next?: Token | null;\n}\n\n/**\n * A Slate plugin to highlight code syntax.\n */\nexport function SlatePrism(optsParam: OptionsFormat = {}, prismLanguages = Prism.languages as LanguageMap): Plugin {\n const opts: Options = new Options(optsParam);\n\n return {\n decorateNode: (node, editor, next) => {\n if (!opts.onlyIn(node)) {\n return next();\n }\n\n const block = Block.create(node as Block);\n const grammarName = opts.getSyntax(block);\n const grammar = prismLanguages[grammarName];\n\n if (!grammar) {\n // Grammar not loaded\n return [];\n }\n\n // Tokenize the whole block text\n const texts = block.getTexts();\n const blockText = texts.map((text) => text && text.getText()).join('\\n');\n const tokens = Prism.tokenize(blockText, grammar);\n const flattened = flattenTokens(tokens);\n\n const newData = editor.value.data.set('tokens', flattened);\n editor.setData(newData);\n return decorateNode(opts, tokens, block);\n },\n\n renderDecoration: (props, editor, next) =>\n opts.renderDecoration(\n {\n children: props.children,\n decoration: props.decoration,\n },\n editor,\n next\n ),\n };\n}\n\n/**\n * Returns the decoration for a node\n */\nfunction decorateNode(opts: Options, tokens: Array<string | Prism.Token>, block: Block) {\n const texts = block.getTexts();\n\n // The list of decorations to return\n const decorations: Decoration[] = [];\n let textStart = 0;\n let textEnd = 0;\n\n texts.forEach((text) => {\n textEnd = textStart + text!.getText().length;\n\n let offset = 0;\n function processToken(token: string | Prism.Token, accu?: string | number) {\n if (typeof token === 'string') {\n if (accu) {\n const decoration = createDecoration({\n text: text!,\n textStart,\n textEnd,\n start: offset,\n end: offset + token.length,\n className: `prism-token token ${accu}`,\n block,\n });\n\n if (decoration) {\n decorations.push(decoration);\n }\n }\n offset += token.length;\n } else {\n accu = `${accu} ${token.type}`;\n if (token.alias) {\n accu += ' ' + token.alias;\n }\n\n if (typeof token.content === 'string') {\n const decoration = createDecoration({\n text: text!,\n textStart,\n textEnd,\n start: offset,\n end: offset + token.content.length,\n className: `prism-token token ${accu}`,\n block,\n });\n\n if (decoration) {\n decorations.push(decoration);\n }\n\n offset += token.content.length;\n } else {\n // When using token.content instead of token.matchedStr, token can be deep\n for (let i = 0; i < token.content.length; i += 1) {\n // @ts-ignore\n processToken(token.content[i], accu);\n }\n }\n }\n }\n\n tokens.forEach(processToken);\n textStart = textEnd + 1; // account for added `\\n`\n });\n\n return decorations;\n}\n\n/**\n * Return a decoration range for the given text.\n */\nfunction createDecoration({\n text,\n textStart,\n textEnd,\n start,\n end,\n className,\n block,\n}: {\n text: Text; // The text being decorated\n textStart: number; // Its start position in the whole text\n textEnd: number; // Its end position in the whole text\n start: number; // The position in the whole text where the token starts\n end: number; // The position in the whole text where the token ends\n className: string; // The prism token classname\n block: Block;\n}): Decoration | null {\n if (start >= textEnd || end <= textStart) {\n // Ignore, the token is not in the text\n return null;\n }\n\n // Shrink to this text boundaries\n start = Math.max(start, textStart);\n end = Math.min(end, textEnd);\n\n // Now shift offsets to be relative to this text\n start -= textStart;\n end -= textStart;\n\n const myDec = block.createDecoration({\n object: 'decoration',\n anchor: {\n key: text.key,\n offset: start,\n object: 'point',\n },\n focus: {\n key: text.key,\n offset: end,\n object: 'point',\n },\n type: TOKEN_MARK,\n data: { className },\n });\n\n return myDec;\n}\n\nfunction flattenToken(token: string | Prism.Token | Array<string | Prism.Token>): Token[] {\n if (typeof token === 'string') {\n return [\n {\n content: token,\n types: [],\n aliases: [],\n },\n ];\n } else if (Array.isArray(token)) {\n return token.flatMap((t) => flattenToken(t));\n } else if (token instanceof Prism.Token) {\n return flattenToken(token.content).flatMap((t) => {\n let aliases: string[] = [];\n if (typeof token.alias === 'string') {\n aliases = [token.alias];\n } else {\n aliases = token.alias ?? [];\n }\n\n return {\n content: t.content,\n types: [token.type, ...t.types],\n aliases: [...aliases, ...t.aliases],\n };\n });\n }\n\n return [];\n}\n\nexport function flattenTokens(token: string | Prism.Token | Array<string | Prism.Token>) {\n const tokens = flattenToken(token);\n\n if (!tokens.length) {\n return [];\n }\n\n const firstToken = tokens[0];\n firstToken.prev = null;\n firstToken.next = tokens.length >= 2 ? tokens[1] : null;\n firstToken.offsets = {\n start: 0,\n end: firstToken.content.length,\n };\n\n for (let i = 1; i < tokens.length - 1; i++) {\n tokens[i].prev = tokens[i - 1];\n tokens[i].next = tokens[i + 1];\n\n tokens[i].offsets = {\n start: tokens[i - 1].offsets!.end,\n end: tokens[i - 1].offsets!.end + tokens[i].content.length,\n };\n }\n\n const lastToken = tokens[tokens.length - 1];\n lastToken.prev = tokens.length >= 2 ? tokens[tokens.length - 2] : null;\n lastToken.next = null;\n lastToken.offsets = {\n start: tokens.length >= 2 ? tokens[tokens.length - 2].offsets!.end : 0,\n end:\n tokens.length >= 2 ? tokens[tokens.length - 2].offsets!.end + lastToken.content.length : lastToken.content.length,\n };\n\n return tokens;\n}\n","import { css, cx } from '@emotion/css';\nimport { useDismiss, useFloating, useInteractions } from '@floating-ui/react';\nimport { FocusScope } from '@react-aria/focus';\nimport { FormEvent, MouseEvent, useState } from 'react';\n\nimport { dateTime, getDefaultTimeRange, GrafanaTheme2, TimeRange, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\nimport { getInputStyles } from '../Input/Input';\n\nimport { TimePickerContent } from './TimeRangePicker/TimePickerContent';\nimport { TimeRangeLabel } from './TimeRangePicker/TimeRangeLabel';\nimport { WeekStart } from './WeekStartPicker';\nimport { getQuickOptions } from './options';\nimport { isValidTimeRange } from './utils';\n\nexport interface TimeRangeInputProps {\n value: TimeRange;\n timeZone?: TimeZone;\n onChange: (timeRange: TimeRange) => void;\n onChangeTimeZone?: (timeZone: TimeZone) => void;\n hideTimeZone?: boolean;\n placeholder?: string;\n clearable?: boolean;\n /** Controls horizontal alignment of the picker menu */\n isReversed?: boolean;\n /** Controls visibility of the preset time ranges (e.g. **Last 5 minutes**) in the picker menu */\n hideQuickRanges?: boolean;\n disabled?: boolean;\n showIcon?: boolean;\n /** Which day of the week the calendar should start on. Possible values: \"saturday\", \"sunday\" or \"monday\" */\n weekStart?: WeekStart;\n}\n\nconst noop = () => {};\n\n/**\n * A variant of TimeRangePicker for use in forms.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/date-time-pickers-timerangeinput--docs\n */\nexport const TimeRangeInput = ({\n value,\n onChange,\n onChangeTimeZone = noop,\n clearable,\n weekStart,\n hideTimeZone = true,\n timeZone = 'browser',\n placeholder = 'Select time range',\n isReversed = true,\n hideQuickRanges = false,\n disabled = false,\n showIcon = false,\n}: TimeRangeInputProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const styles = useStyles2(getStyles, disabled);\n\n const onOpen = (event: FormEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n if (disabled) {\n return;\n }\n setIsOpen(!isOpen);\n };\n\n const onClose = () => {\n setIsOpen(false);\n };\n\n const onRangeChange = (timeRange: TimeRange) => {\n onClose();\n onChange(timeRange);\n };\n\n const onRangeClear = (event: MouseEvent<SVGElement>) => {\n event.stopPropagation();\n const from = dateTime(null);\n const to = dateTime(null);\n onChange({ from, to, raw: { from, to } });\n };\n\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n placement: 'bottom-start',\n strategy: 'fixed',\n });\n\n const dismiss = useDismiss(context, {\n bubbles: {\n outsidePress: false,\n },\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n return (\n <div className={styles.container}>\n <button\n type=\"button\"\n className={styles.pickerInput}\n data-testid={selectors.components.TimePicker.openButton}\n onClick={onOpen}\n ref={refs.setReference}\n {...getReferenceProps()}\n >\n {showIcon && <Icon name=\"clock-nine\" size={'sm'} className={styles.icon} />}\n\n <TimeRangeLabel value={value} timeZone={timeZone} placeholder={placeholder} />\n\n {!disabled && (\n <span className={styles.caretIcon}>\n {isValidTimeRange(value) && clearable && (\n <Icon className={styles.clearIcon} name=\"times\" size=\"lg\" onClick={onRangeClear} />\n )}\n <Icon name={isOpen ? 'angle-up' : 'angle-down'} size=\"lg\" />\n </span>\n )}\n </button>\n {isOpen && (\n <FocusScope contain autoFocus restoreFocus>\n <section className={styles.content} ref={refs.setFloating} style={floatingStyles} {...getFloatingProps()}>\n <TimePickerContent\n timeZone={timeZone}\n value={isValidTimeRange(value) ? value : getDefaultTimeRange()}\n onChange={onRangeChange}\n quickOptions={getQuickOptions()}\n onChangeTimeZone={onChangeTimeZone}\n className={styles.content}\n hideTimeZone={hideTimeZone}\n isReversed={isReversed}\n hideQuickRanges={hideQuickRanges}\n weekStart={weekStart}\n />\n </section>\n </FocusScope>\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, disabled = false) => {\n const inputStyles = getInputStyles({ theme, invalid: false });\n return {\n container: css({\n display: 'flex',\n position: 'relative',\n }),\n content: css({\n marginLeft: 0,\n position: 'absolute',\n top: '116%',\n zIndex: theme.zIndex.modal,\n }),\n pickerInput: cx(\n inputStyles.input,\n disabled && inputStyles.inputDisabled,\n inputStyles.wrapper,\n css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n cursor: 'pointer',\n paddingRight: 0,\n lineHeight: `${theme.spacing.gridSize * 4 - 2}px`,\n })\n ),\n caretIcon: cx(\n inputStyles.suffix,\n css({\n position: 'relative',\n top: '-1px',\n marginLeft: theme.spacing(0.5),\n })\n ),\n clearIcon: css({\n marginRight: theme.spacing(0.5),\n '&:hover': {\n color: theme.colors.text.maxContrast,\n },\n }),\n placeholder: css({\n color: theme.colors.text.disabled,\n opacity: 1,\n }),\n icon: css({\n marginRight: theme.spacing(0.5),\n }),\n };\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Input, defaultIntervals, Field } from '@grafana/ui';\n\nimport { getTimeSrv } from '../../services/TimeSrv';\n\nexport interface Props {\n refreshIntervals?: string[];\n onRefreshIntervalChange: (interval: string[]) => void;\n getIntervalsFunc?: typeof getValidIntervals;\n validateIntervalsFunc?: typeof validateIntervals;\n}\n\nexport const AutoRefreshIntervals = ({\n refreshIntervals,\n onRefreshIntervalChange,\n getIntervalsFunc = getValidIntervals,\n validateIntervalsFunc = validateIntervals,\n}: Props) => {\n const [intervals, setIntervals] = useState<string[]>(getIntervalsFunc(refreshIntervals ?? defaultIntervals));\n const [invalidIntervalsMessage, setInvalidIntervalsMessage] = useState<string | null>(null);\n\n useEffect(() => {\n const intervals = getIntervalsFunc(refreshIntervals ?? defaultIntervals);\n setIntervals(intervals);\n }, [getIntervalsFunc, refreshIntervals]);\n\n const intervalsString = useMemo(() => {\n if (!Array.isArray(intervals)) {\n return '';\n }\n\n return intervals.join(',');\n }, [intervals]);\n\n const onIntervalsChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newIntervals = event.currentTarget.value ? event.currentTarget.value.split(',') : [];\n\n setIntervals(newIntervals);\n },\n [setIntervals]\n );\n\n const onIntervalsBlur = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const invalidMessage = validateIntervalsFunc(intervals);\n\n if (invalidMessage === null) {\n // only refresh dashboard JSON if intervals are valid\n onRefreshIntervalChange(getIntervalsFunc(intervals));\n }\n\n setInvalidIntervalsMessage(invalidMessage);\n },\n [getIntervalsFunc, intervals, onRefreshIntervalChange, validateIntervalsFunc]\n );\n\n return (\n <Field\n label={t('dashboard-settings.general.auto-refresh-label', 'Auto refresh')}\n description={t(\n 'dashboard-settings.general.auto-refresh-description',\n \"Define the auto refresh intervals that should be available in the auto refresh list. Use the format '5s' for seconds, '1m' for minutes, '1h' for hours, and '1d' for days (e.g.: '5s,10s,30s,1m,5m,15m,30m,1h,2h,1d').\"\n )}\n error={invalidIntervalsMessage}\n invalid={!!invalidIntervalsMessage}\n >\n <Input\n id=\"auto-refresh-input\"\n invalid={!!invalidIntervalsMessage}\n value={intervalsString}\n onChange={onIntervalsChange}\n onBlur={onIntervalsBlur}\n />\n </Field>\n );\n};\n\nexport const validateIntervals = (\n intervals: string[],\n dependencies: { getTimeSrv: typeof getTimeSrv } = { getTimeSrv }\n): string | null => {\n try {\n getValidIntervals(intervals, dependencies);\n return null;\n } catch (err) {\n return err instanceof Error ? err.message : 'Invalid intervals';\n }\n};\n\nexport const getValidIntervals = (\n intervals: string[],\n dependencies: { getTimeSrv: typeof getTimeSrv } = { getTimeSrv }\n) => {\n const cleanIntervals = intervals.filter((i) => i.trim() !== '').map((interval) => interval.replace(/\\s+/g, ''));\n return [...new Set(dependencies.getTimeSrv().getValidIntervals(cleanIntervals))];\n};\n","import { isEmpty } from 'lodash';\nimport { FormEvent, memo, useState } from 'react';\n\nimport { rangeUtil, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { CollapsableSection, Field, Input, Switch, TimeZonePicker, WeekStart, WeekStartPicker } from '@grafana/ui';\n\nimport { AutoRefreshIntervals } from './AutoRefreshIntervals';\n\ninterface Props {\n onWeekStartChange: (weekStart?: WeekStart) => void;\n onTimeZoneChange: (timeZone: TimeZone) => void;\n onRefreshIntervalChange: (interval: string[]) => void;\n onNowDelayChange: (nowDelay: string) => void;\n onHideTimePickerChange: (hide: boolean) => void;\n onLiveNowChange: (liveNow: boolean) => void;\n refreshIntervals?: string[];\n timePickerHidden?: boolean;\n nowDelay?: string;\n timezone: TimeZone;\n weekStart?: WeekStart;\n liveNow?: boolean;\n}\n\nexport const TimePickerSettings = memo(\n ({\n onWeekStartChange,\n onTimeZoneChange,\n onRefreshIntervalChange,\n onNowDelayChange,\n onHideTimePickerChange,\n onLiveNowChange,\n refreshIntervals,\n timePickerHidden,\n nowDelay,\n timezone,\n weekStart,\n liveNow,\n }: Props) => {\n const [isNowDelayValid, setIsNowDelayValid] = useState(true);\n\n const handleNowDelayChange = (event: FormEvent<HTMLInputElement>) => {\n const value = event.currentTarget.value;\n\n if (isEmpty(value)) {\n setIsNowDelayValid(true);\n return onNowDelayChange(value);\n }\n\n if (rangeUtil.isValidTimeSpan(value)) {\n setIsNowDelayValid(true);\n return onNowDelayChange(value);\n }\n\n setIsNowDelayValid(false);\n };\n\n const handleHideTimePickerChange = () => {\n onHideTimePickerChange(!timePickerHidden);\n };\n\n const handleLiveNowChange = () => {\n onLiveNowChange(!liveNow);\n };\n\n const handleTimeZoneChange = (timeZone?: string) => {\n if (typeof timeZone !== 'string') {\n return;\n }\n onTimeZoneChange(timeZone);\n };\n\n const handleWeekStartChange = (weekStart?: WeekStart) => {\n onWeekStartChange(weekStart);\n };\n\n return (\n <CollapsableSection label={t('dashboard-settings.time-picker.time-options-label', 'Time options')} isOpen={true}>\n <Field\n label={t('dashboard-settings.time-picker.time-zone-label', 'Time zone')}\n data-testid={selectors.components.TimeZonePicker.containerV2}\n >\n <TimeZonePicker\n inputId=\"time-options-input\"\n includeInternal={true}\n value={timezone}\n onChange={handleTimeZoneChange}\n width={40}\n />\n </Field>\n <Field\n label={t('dashboard-settings.time-picker.week-start-label', 'Week start')}\n data-testid={selectors.components.WeekStartPicker.containerV2}\n >\n <WeekStartPicker inputId=\"week-start-input\" width={40} value={weekStart} onChange={handleWeekStartChange} />\n </Field>\n <AutoRefreshIntervals refreshIntervals={refreshIntervals} onRefreshIntervalChange={onRefreshIntervalChange} />\n <Field\n label={t('dashboard-settings.time-picker.now-delay-label', 'Now delay')}\n description={t(\n 'dashboard-settings.time-picker.now-delay-description',\n 'Exclude recent data that may be incomplete.'\n )}\n >\n <Input\n id=\"now-delay-input\"\n invalid={!isNowDelayValid}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"0m\"\n onChange={handleNowDelayChange}\n defaultValue={nowDelay}\n />\n </Field>\n <Field label={t('dashboard-settings.time-picker.hide-time-picker', 'Hide time picker')}>\n <Switch id=\"hide-time-picker-toggle\" value={!!timePickerHidden} onChange={handleHideTimePickerChange} />\n </Field>\n <Field\n label={t('dashboard-settings.time-picker.refresh-live-dashboards-label', 'Refresh live dashboards')}\n description={t(\n 'dashboard-settings.time-picker.refresh-live-dashboards-description',\n 'Continuously update panels when the time range includes the current time'\n )}\n >\n <Switch id=\"refresh-live-dashboards-toggle\" value={!!liveNow} onChange={handleLiveNowChange} />\n </Field>\n </CollapsableSection>\n );\n }\n);\nTimePickerSettings.displayName = 'TimePickerSettings';\n","import { clone, each, map } from 'lodash';\n\nexport class QueryPartDef {\n type: string;\n params: any[];\n defaultParams: any[];\n renderer: any;\n category: any;\n addStrategy: any;\n\n constructor(options: any) {\n this.type = options.type;\n this.params = options.params;\n this.defaultParams = options.defaultParams;\n this.renderer = options.renderer;\n this.category = options.category;\n this.addStrategy = options.addStrategy;\n }\n}\n\nexport class QueryPart {\n part: any;\n def: QueryPartDef;\n params: any[];\n text: string;\n\n constructor(part: any, def: QueryPartDef) {\n this.part = part;\n this.def = def;\n if (!this.def) {\n throw { message: 'Could not find query part ' + part.type };\n }\n\n part.params = part.params || clone(this.def.defaultParams);\n this.params = part.params;\n this.text = '';\n this.updateText();\n }\n\n render(innerExpr: string) {\n return this.def.renderer(this, innerExpr);\n }\n\n hasMultipleParamsInString(strValue: string, index: number) {\n if (strValue.indexOf(',') === -1) {\n return false;\n }\n\n return this.def.params[index + 1] && this.def.params[index + 1].optional;\n }\n\n updateParam(strValue: string, index: number) {\n // handle optional parameters\n // if string contains ',' and next param is optional, split and update both\n if (this.hasMultipleParamsInString(strValue, index)) {\n each(strValue.split(','), (partVal, idx) => {\n this.updateParam(partVal.trim(), idx);\n });\n return;\n }\n\n if (strValue === '' && this.def.params[index].optional) {\n this.params.splice(index, 1);\n } else {\n this.params[index] = strValue;\n }\n\n this.part.params = this.params;\n this.updateText();\n }\n\n updateText() {\n if (this.params.length === 0) {\n this.text = this.def.type + '()';\n return;\n }\n\n let text = this.def.type + '(';\n text += this.params.join(', ');\n text += ')';\n this.text = text;\n }\n}\n\nexport function functionRenderer(part: any, innerExpr: string) {\n const str = part.def.type + '(';\n const parameters = map(part.params, (value, index) => {\n const paramType = part.def.params[index];\n if (paramType.type === 'time') {\n if (value === 'auto') {\n value = '$__interval';\n }\n }\n if (paramType.quote === 'single') {\n return \"'\" + value + \"'\";\n } else if (paramType.quote === 'double') {\n return '\"' + value + '\"';\n }\n\n return value;\n });\n\n if (innerExpr) {\n parameters.unshift(innerExpr);\n }\n return str + parameters.join(', ') + ')';\n}\n\nexport function suffixRenderer(part: QueryPart, innerExpr: string) {\n return innerExpr + ' ' + part.params[0];\n}\n\nexport function identityRenderer(part: QueryPart, innerExpr: string) {\n return part.params[0];\n}\n\nexport function quotedIdentityRenderer(part: QueryPart, innerExpr: string) {\n return '\"' + part.params[0] + '\"';\n}\n","// This file was generated by lezer-generator. You probably shouldn't edit it.\nexport const AlertRuleSearch = 1,\n FilterExpression = 2,\n DataSourceToken = 3,\n FilterValue = 4,\n NameSpaceToken = 5,\n LabelToken = 6,\n GroupToken = 7,\n RuleToken = 8,\n StateToken = 9,\n TypeToken = 10,\n HealthToken = 11,\n DashboardToken = 12,\n PluginsToken = 13,\n ContactPointToken = 14,\n RuleSourceToken = 15,\n FreeFormExpression = 16,\n Dialect_dataSourceFilter = 0,\n Dialect_nameSpaceFilter = 1,\n Dialect_labelFilter = 2,\n Dialect_groupFilter = 3,\n Dialect_ruleFilter = 4,\n Dialect_stateFilter = 5,\n Dialect_typeFilter = 6,\n Dialect_healthFilter = 7,\n Dialect_dashboardFilter = 8,\n Dialect_pluginsFilter = 9,\n Dialect_contactPointFilter = 10,\n Dialect_sourceFilter = 11;\n","// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport { LRParser } from '@lezer/lr';\nexport const parser = LRParser.deserialize({\n version: 14,\n states:\n \"!vOQOPOOO!OOPO'#ClOOOO'#Cl'#ClOQOPO'#CpOOOO'#Cm'#CmQQOPOOO#POQO'#C^O#UOPO'#CnO#ZOPO,59WOOOO,59[,59[OOOO-E6k-E6kOOOO,58x,58xOOOO,59Y,59YOOOO-E6l-E6l\",\n stateData:\n '%Q~ORUOTUOUUOVUOWUOXUOYUOZUO[UO]UO^UO_UOePOgQO~OfVOR`XT`XU`XV`XW`XX`XY`XZ`X[`X]`X^`X_`Xe`Xg`X~OSZO~Oe[O~OfVOR`aT`aU`aV`aW`aX`aY`aZ`a[`a]`a^`a_`ae`ag`a~OR~T~U~V~W~Y~Z~[~]~^~_~R_^][ZYXWVUTe~',\n goto: '!OePPfPPPPPPPPPPPPPfkqPwVRORTQTORYTQWPR]WSSOTRXR',\n nodeNames:\n '⚠ AlertRuleSearch FilterExpression DataSourceToken FilterValue NameSpaceToken LabelToken GroupToken RuleToken StateToken TypeToken HealthToken DashboardToken PluginsToken ContactPointToken RuleSourceToken FreeFormExpression',\n maxTerm: 23,\n skippedNodes: [0],\n repeatNodeCount: 2,\n tokenData:\n \"$*nRRtqr#crs&ost#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]+q!]#V#c#V#W-T#W#X@m#X#Z#c#Z#[!/S#[#]!7|#]#`#c#`#a!B`#a#b#c#b#c!KY#c#d#c#d#e#,W#e#f#c#f#g#8S#g#h#?d#h#i$#^#i$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#jcSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cQ$zcSQqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uQ&YP;=`<%l$uQ&`P;=`;NQ$uR&fP;=`<%l#cR&lP;=`;NQ#cR&rrX^(|pq(|qr(|st(|tu(|uv(|vw(|wx(|xy(|yz(|z{(|{|(||!P(|!P!Q(|!QPsX^(|pq(|qr(|rs+^st(|tu(|uv(|vw(|wx(|xy(|yz(|z{(|{|(||!P(|!P!Q(|!Q[#g$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!)ceSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#V#c#V#W!*t#W$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!*{eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y!,^#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!,ecSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]!-p!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!-wcSQRPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR!/ZeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#f#c#f#g!0l#g$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!0seSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#c#c#c#d!2U#d$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!2]eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#i#c#i#j!3n#j$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!3ueSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#d#c#d#e!5W#e$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!5_cSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]!6j!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!6qcSQVPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR!8TeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y!9f#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!9meSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#T#c#T#U!;O#U$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!;VeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#`#c#`#a!<h#a$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!<oeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#h#c#h#i!>Q#i$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!>XeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#[#c#[#]!?j#]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!?qcSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]!@|!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!ATcSQZPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR!BgeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#T#c#T#U!Cx#U$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!DPeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#U#c#U#V!Eb#V$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!EieSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y!Fz#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!GReSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#`#c#`#a!Hd#a$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!HkcSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]!Iv!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!I}cSQUPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR!KaeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#T#c#T#U!Lr#U$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!LyeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#a#c#a#b!N[#b$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR!NceSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y# t#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR# {eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#g#c#g#h##^#h$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR##eeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#d#c#d#e#$v#e$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#$}eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#T#c#T#U#&`#U$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#&geSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#V#c#V#W#'x#W$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#(PeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y#)b#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#)icSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]#*t!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#*{cSQTPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR#,_eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#`#c#`#a#-p#a$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#-weSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#i#c#i#j#/Y#j$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#/aeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#Z#c#Z#[#0r#[$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#0yeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#]#c#]#^#2[#^$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#2ceSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#b#c#b#c#3t#c$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#3{eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#g#c#g#h#5^#h$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#5ecSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]#6p!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#6wcSQ]Pqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR#8ZeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#i#c#i#j#9l#j$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#9seSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#`#c#`#a#;U#a$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#;]eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y#<n#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#<ucSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]#>Q!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#>XcSQWPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR#?kgSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#c#c#c#d#AS#d#h#c#h#i#I|#i$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#AZeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#i#c#i#j#Bl#j$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#BseSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#f#c#f#g#DU#g$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#D]eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#V#c#V#W#En#W$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#EueSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y#GW#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#G_cSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]#Hj!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#HqcSQ_Pqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR#JTeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#T#c#T#U#Kf#U$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#KmeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#h#c#h#i#MO#i$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#MVeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y#Nh#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR#NocSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$ z!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR$!RcSQXPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$uR$#eeSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#m#c#m#n$$v#n$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR$$}eSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#d#c#d#e$&`#e$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR$&geSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$u!]#X#c#X#Y$'x#Y$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR$(PcSQePqr#cst#ctu#cuv#cvw#cwx#cxy#cyz#cz{#c{|#c|!P#c!P!Q#c!Q![#c![!]$)[!]$Ch#c$JU;'S#c;'S;(d&c;(d;(e&i<%lO#cR$)ccSQYPqr$ust$utu$uuv$uvw$uwx$uxy$uyz$uz{$u{|$u|!P$u!P!Q$u!Q![$u![!]$u!]$Ch$u$JU;'S$u;'S;(d&V;(d;(e&]<%lO$u\",\n tokenizers: [0, 1],\n topRules: { AlertRuleSearch: [0, 1] },\n dialects: {\n dataSourceFilter: 150,\n nameSpaceFilter: 152,\n labelFilter: 154,\n groupFilter: 156,\n ruleFilter: 158,\n stateFilter: 90,\n typeFilter: 160,\n healthFilter: 162,\n dashboardFilter: 164,\n pluginsFilter: 166,\n contactPointFilter: 168,\n sourceFilter: 170,\n },\n tokenPrec: 172,\n});\n","import { SyntaxNode } from '@lezer/common';\nimport { trim } from 'lodash';\n\nimport { parser } from './search';\nimport * as terms from './search.terms';\n\nconst filterTokenToTypeMap: Record<number, string> = {\n [terms.DataSourceToken]: 'datasource',\n [terms.NameSpaceToken]: 'namespace',\n [terms.LabelToken]: 'label',\n [terms.RuleToken]: 'rule',\n [terms.GroupToken]: 'group',\n [terms.StateToken]: 'state',\n [terms.TypeToken]: 'type',\n [terms.HealthToken]: 'health',\n [terms.DashboardToken]: 'dashboard',\n [terms.PluginsToken]: 'plugins',\n [terms.ContactPointToken]: 'contactPoint',\n [terms.RuleSourceToken]: 'source',\n};\n\n// This enum allows to configure parser behavior\n// Depending on our needs we can enable and disable only selected filters\n// Thanks to that we can create multiple different filters having the same search grammar\nexport enum FilterSupportedTerm {\n dataSource = 'dataSourceFilter',\n nameSpace = 'nameSpaceFilter',\n label = 'labelFilter',\n group = 'groupFilter',\n rule = 'ruleFilter',\n state = 'stateFilter',\n type = 'typeFilter',\n health = 'healthFilter',\n dashboard = 'dashboardFilter',\n plugins = 'pluginsFilter',\n contactPoint = 'contactPointFilter',\n source = 'sourceFilter',\n}\n\nexport type QueryFilterMapper = Record<number, (filter: string) => void>;\n\nexport interface FilterExpr {\n type: number;\n value: string;\n}\n\nexport function parseQueryToFilter(\n query: string,\n supportedTerms: FilterSupportedTerm[],\n filterMapper: QueryFilterMapper\n) {\n traverseNodeTree(query, supportedTerms, (node) => {\n if (node.type.id === terms.FilterExpression) {\n const filter = getFilterFromSyntaxNode(query, node);\n\n if (filter.type && filter.value) {\n const filterHandler = filterMapper[filter.type];\n if (filterHandler) {\n filterHandler(filter.value);\n }\n }\n } else if (node.type.id === terms.FreeFormExpression) {\n const filterHandler = filterMapper[terms.FreeFormExpression];\n if (filterHandler) {\n filterHandler(getNodeContent(query, node));\n }\n }\n });\n}\n\nfunction getFilterFromSyntaxNode(query: string, filterExpressionNode: SyntaxNode): { type?: number; value?: string } {\n if (filterExpressionNode.type.id !== terms.FilterExpression) {\n throw new Error('Invalid node provided. Only FilterExpression nodes are supported');\n }\n\n const filterTokenNode = filterExpressionNode.firstChild;\n if (!filterTokenNode) {\n return { type: undefined, value: undefined };\n }\n\n const filterValueNode = filterExpressionNode.getChild(terms.FilterValue);\n const filterValue = filterValueNode ? trim(getNodeContent(query, filterValueNode), '\"') : undefined;\n\n return { type: filterTokenNode.type.id, value: filterValue };\n}\n\nfunction getNodeContent(query: string, node: SyntaxNode) {\n return query.slice(node.from, node.to).trim().replace(/\\\"/g, '');\n}\n\nexport function applyFiltersToQuery(\n query: string,\n supportedTerms: FilterSupportedTerm[],\n filters: FilterExpr[]\n): string {\n const existingFilterNodes: SyntaxNode[] = [];\n traverseNodeTree(query, supportedTerms, (node) => {\n if (node.type.id === terms.FilterExpression && node.firstChild) {\n existingFilterNodes.push(node.firstChild);\n }\n if (node.type.id === terms.FreeFormExpression) {\n existingFilterNodes.push(node);\n }\n });\n\n const newQueryExpressions: string[] = [];\n\n // Apply filters from filterState in the same order as they appear in the search query\n // This allows to remain the order of filters in the search input during changes\n existingFilterNodes.forEach((filterNode) => {\n const matchingFilterIdx = filters.findIndex((f) => f.type === filterNode.type.id);\n if (matchingFilterIdx === -1) {\n return;\n }\n\n if (filterNode.parent?.type.is(terms.FilterExpression)) {\n const filterToken = filterTokenToTypeMap[filterNode.type.id];\n const filterItem = filters.splice(matchingFilterIdx, 1)[0];\n newQueryExpressions.push(`${filterToken}:${getSafeFilterValue(filterItem.value)}`);\n }\n\n if (filterNode.type.is(terms.FreeFormExpression)) {\n const freeFormWordNode = filters.splice(matchingFilterIdx, 1)[0];\n newQueryExpressions.push(freeFormWordNode.value);\n }\n });\n\n // Apply new filters that hasn't been in the query yet\n filters.forEach((fs) => {\n if (fs.type === terms.FreeFormExpression) {\n newQueryExpressions.push(fs.value);\n } else {\n newQueryExpressions.push(`${filterTokenToTypeMap[fs.type]}:${getSafeFilterValue(fs.value)}`);\n }\n });\n\n return newQueryExpressions.join(' ');\n}\n\nfunction traverseNodeTree(query: string, supportedTerms: FilterSupportedTerm[], visit: (node: SyntaxNode) => void) {\n const dialect = supportedTerms.join(' ');\n const parsed = parser.configure({ dialect }).parse(query);\n const cursor = parsed.cursor();\n do {\n visit(cursor.node);\n } while (cursor.next());\n}\n\nfunction getSafeFilterValue(filterValue: string) {\n const containsWhiteSpaces = /\\s/.test(filterValue);\n return containsWhiteSpaces ? `\\\"${filterValue}\\\"` : filterValue;\n}\n","import { PromAlertingRuleState, PromRuleType, isPromAlertingRuleState } from '../../../../types/unified-alerting-dto';\nimport { getRuleHealth, getRuleSource, isPromRuleType } from '../utils/rules';\n\nimport * as terms from './search.terms';\nimport {\n FilterExpr,\n FilterSupportedTerm,\n QueryFilterMapper,\n applyFiltersToQuery,\n parseQueryToFilter,\n} from './searchParser';\n\nexport interface RulesFilter {\n freeFormWords: string[];\n namespace?: string;\n groupName?: string;\n ruleName?: string;\n ruleState?: PromAlertingRuleState;\n ruleType?: PromRuleType;\n dataSourceNames: string[];\n labels: string[];\n ruleHealth?: RuleHealth;\n dashboardUid?: string;\n plugins?: 'hide';\n contactPoint?: string | null;\n ruleSource?: RuleSource;\n}\n\nconst filterSupportedTerms: FilterSupportedTerm[] = [\n FilterSupportedTerm.dataSource,\n FilterSupportedTerm.nameSpace,\n FilterSupportedTerm.label,\n FilterSupportedTerm.group,\n FilterSupportedTerm.rule,\n FilterSupportedTerm.state,\n FilterSupportedTerm.type,\n FilterSupportedTerm.health,\n FilterSupportedTerm.dashboard,\n FilterSupportedTerm.plugins,\n FilterSupportedTerm.contactPoint,\n FilterSupportedTerm.source,\n];\n\nexport enum RuleHealth {\n Ok = 'ok',\n Error = 'error',\n NoData = 'nodata',\n Unknown = 'unknown',\n}\n\nexport enum RuleSource {\n Grafana = 'grafana',\n DataSource = 'datasource',\n}\n\n// Define how to map parsed tokens into the filter object\nexport function getSearchFilterFromQuery(query: string): RulesFilter {\n const filter: RulesFilter = { labels: [], freeFormWords: [], dataSourceNames: [] };\n\n const tokenToFilterMap: QueryFilterMapper = {\n [terms.DataSourceToken]: (value) => filter.dataSourceNames.push(value),\n [terms.NameSpaceToken]: (value) => (filter.namespace = value),\n [terms.GroupToken]: (value) => (filter.groupName = value),\n [terms.RuleToken]: (value) => (filter.ruleName = value),\n [terms.LabelToken]: (value) => filter.labels.push(value),\n [terms.StateToken]: (value) => (filter.ruleState = parseStateToken(value)),\n [terms.TypeToken]: (value) => (isPromRuleType(value) ? (filter.ruleType = value) : undefined),\n [terms.HealthToken]: (value) => (filter.ruleHealth = getRuleHealth(value)),\n [terms.DashboardToken]: (value) => (filter.dashboardUid = value),\n [terms.PluginsToken]: (value) => (filter.plugins = value === 'hide' ? value : undefined),\n [terms.ContactPointToken]: (value) => (filter.contactPoint = value),\n [terms.RuleSourceToken]: (value) => (filter.ruleSource = getRuleSource(value)),\n [terms.FreeFormExpression]: (value) => filter.freeFormWords.push(value),\n };\n\n parseQueryToFilter(query, filterSupportedTerms, tokenToFilterMap);\n\n return filter;\n}\n\n// Reverse of the previous function\n// Describes how to map the object into an array of tokens and values\nexport function applySearchFilterToQuery(query: string, filter: RulesFilter): string {\n const filterStateArray: FilterExpr[] = [];\n\n // Convert filter object into an array\n // It allows to pick filters from the array in the same order as they were applied in the original query\n if (filter.dataSourceNames) {\n filterStateArray.push(...filter.dataSourceNames.map((t) => ({ type: terms.DataSourceToken, value: t })));\n }\n if (filter.namespace) {\n filterStateArray.push({ type: terms.NameSpaceToken, value: filter.namespace });\n }\n if (filter.groupName) {\n filterStateArray.push({ type: terms.GroupToken, value: filter.groupName });\n }\n if (filter.ruleName) {\n filterStateArray.push({ type: terms.RuleToken, value: filter.ruleName });\n }\n if (filter.ruleState) {\n filterStateArray.push({ type: terms.StateToken, value: filter.ruleState });\n }\n if (filter.ruleType) {\n filterStateArray.push({ type: terms.TypeToken, value: filter.ruleType });\n }\n if (filter.ruleHealth) {\n filterStateArray.push({ type: terms.HealthToken, value: filter.ruleHealth });\n }\n if (filter.labels) {\n filterStateArray.push(...filter.labels.map((l) => ({ type: terms.LabelToken, value: l })));\n }\n if (filter.dashboardUid) {\n filterStateArray.push({ type: terms.DashboardToken, value: filter.dashboardUid });\n }\n if (filter.plugins) {\n filterStateArray.push({ type: terms.PluginsToken, value: filter.plugins });\n }\n if (filter.ruleSource) {\n filterStateArray.push({ type: terms.RuleSourceToken, value: filter.ruleSource });\n }\n if (filter.freeFormWords) {\n filterStateArray.push(...filter.freeFormWords.map((word) => ({ type: terms.FreeFormExpression, value: word })));\n }\n if (filter.contactPoint) {\n filterStateArray.push({ type: terms.ContactPointToken, value: filter.contactPoint });\n }\n\n return applyFiltersToQuery(query, filterSupportedTerms, filterStateArray);\n}\n\nfunction parseStateToken(value: string): PromAlertingRuleState | undefined {\n if (value === 'normal') {\n return PromAlertingRuleState.Inactive;\n }\n\n if (isPromAlertingRuleState(value)) {\n return value;\n }\n\n return;\n}\n","import { useId } from '@react-aria/utils';\nimport { useCallback, useState } from 'react';\nimport * as React from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { TextArea, useStyles2 } from '@grafana/ui';\n\nimport { getStyles } from '../../dashboard-scene/settings/variables/components/VariableTextAreaField';\nimport { VariableQueryEditorProps } from '../types';\n\nexport const LEGACY_VARIABLE_QUERY_EDITOR_NAME = 'Grafana-LegacyVariableQueryEditor';\n\nexport const LegacyVariableQueryEditor = ({ onChange, query }: VariableQueryEditorProps) => {\n const styles = useStyles2(getStyles);\n const [value, setValue] = useState(query);\n\n const onValueChange = (event: React.FormEvent<HTMLTextAreaElement>) => {\n setValue(event.currentTarget.value);\n };\n\n const onBlur = useCallback(\n (event: React.FormEvent<HTMLTextAreaElement>) => {\n onChange(event.currentTarget.value, event.currentTarget.value);\n },\n [onChange]\n );\n\n const id = useId();\n\n return (\n <TextArea\n id={id}\n rows={2}\n value={value}\n onChange={onValueChange}\n onBlur={onBlur}\n placeholder={t(\n 'variables.legacy-variable-query-editor.placeholder-metric-name-or-tags-query',\n 'Metric name or tags query'\n )}\n required\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.QueryVariable.queryOptionsQueryInput}\n cols={52}\n className={styles.textarea}\n />\n );\n};\n\nLegacyVariableQueryEditor.displayName = LEGACY_VARIABLE_QUERY_EDITOR_NAME;\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2, dateTimeFormat } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { LibraryPanelBehavior } from '../scene/LibraryPanelBehavior';\n\ninterface Props {\n libraryPanel: LibraryPanelBehavior;\n}\n\nexport const LibraryVizPanelInfo = ({ libraryPanel }: Props) => {\n const styles = useStyles2(getStyles);\n\n const libraryPanelState = libraryPanel.useState();\n const tz = libraryPanelState.$timeRange?.getTimeZone();\n const meta = libraryPanelState._loadedPanel?.meta;\n if (!meta) {\n return null;\n }\n\n return (\n <div className={styles.info}>\n <div className={styles.libraryPanelInfo}>\n <Trans i18nKey=\"dashboard-scene.library-viz-panel-info.usage-count\" count={meta.connectedDashboards}>\n Used on {'{{count}}'} dashboards\n </Trans>\n </div>\n <div className={styles.libraryPanelInfo}>\n <Trans\n i18nKey=\"dashboard-scene.library-viz-panel-info.last-edited\"\n values={{ timeAgo: dateTimeFormat(meta.updated, { format: 'L', timeZone: tz }) }}\n components={{\n person: (\n <>\n {meta.updatedBy.avatarUrl && (\n <img\n className={styles.userAvatar}\n src={meta.updatedBy.avatarUrl}\n alt={`Avatar for ${meta.updatedBy.name}`}\n />\n )}\n {meta.updatedBy.name}\n </>\n ),\n }}\n >\n {'{{timeAgo}}'} by\n {'<person />'}\n </Trans>\n </div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n info: css({\n lineHeight: 1,\n }),\n libraryPanelInfo: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n userAvatar: css({\n borderRadius: theme.shape.radius.circle,\n boxSizing: 'content-box',\n width: '22px',\n height: '22px',\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n }),\n };\n};\n","import { get as lodashGet } from 'lodash';\n\nimport { DataFrame, FieldConfigPropertyItem, FieldConfigSource } from '@grafana/data';\n\nimport { OptionPaneItemOverrideInfo } from '../types';\n\nexport const dataOverrideTooltipDescription =\n 'Some data fields have this option pre-configured. Add a field override rule to override the pre-configured value.';\nexport const overrideRuleTooltipDescription = 'An override rule exists for this property';\n\nexport function getOptionOverrides(\n fieldOption: FieldConfigPropertyItem,\n fieldConfig: FieldConfigSource,\n frames: DataFrame[] | undefined\n): OptionPaneItemOverrideInfo[] {\n const infoDots: OptionPaneItemOverrideInfo[] = [];\n\n // Look for options overriden in data field config\n if (frames) {\n for (const frame of frames) {\n for (const field of frame.fields) {\n const value = lodashGet(field.config, fieldOption.path);\n if (value == null) {\n continue;\n }\n\n infoDots.push({\n type: 'data',\n description: dataOverrideTooltipDescription,\n tooltip: dataOverrideTooltipDescription,\n });\n\n break;\n }\n }\n }\n\n const overrideRuleFound = fieldConfig.overrides.some((rule) =>\n rule.properties.some((prop) => prop.id === fieldOption.id)\n );\n\n if (overrideRuleFound) {\n infoDots.push({\n type: 'rule',\n description: overrideRuleTooltipDescription,\n tooltip: overrideRuleTooltipDescription,\n });\n }\n\n return infoDots;\n}\n","import { get as lodashGet } from 'lodash';\n\nimport {\n EventBus,\n InterpolateFunction,\n PanelData,\n PanelPlugin,\n StandardEditorContext,\n VariableSuggestionsScope,\n PanelOptionsEditorBuilder,\n} from '@grafana/data';\nimport { NestedValueAccess, isNestedPanelOptions, PanelOptionsSupplier } from '@grafana/data/internal';\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport { Input } from '@grafana/ui';\nimport { LibraryVizPanelInfo } from 'app/features/dashboard-scene/panel-edit/LibraryVizPanelInfo';\nimport { LibraryPanelBehavior } from 'app/features/dashboard-scene/scene/LibraryPanelBehavior';\nimport { getDataLinksVariableSuggestions } from 'app/features/panel/panellinks/link_srv';\n\nimport { OptionsPaneCategoryDescriptor } from './OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from './OptionsPaneItemDescriptor';\nimport { getOptionOverrides } from './state/getOptionOverrides';\nimport { OptionPaneRenderProps } from './types';\nimport { setOptionImmutably, updateDefaultFieldConfigValue } from './utils';\n\ntype categoryGetter = (categoryNames?: string[]) => OptionsPaneCategoryDescriptor;\n\ninterface GetStandardEditorContextProps {\n data: PanelData | undefined;\n replaceVariables: InterpolateFunction;\n options: Record<string, unknown>;\n eventBus: EventBus;\n instanceState: OptionPaneRenderProps['instanceState'];\n}\n\nexport function getStandardEditorContext({\n data,\n replaceVariables,\n options,\n eventBus,\n instanceState,\n}: GetStandardEditorContextProps): StandardEditorContext<unknown, unknown> {\n const dataSeries = data?.series ?? [];\n\n const context: StandardEditorContext<unknown, unknown> = {\n data: dataSeries,\n replaceVariables,\n options,\n eventBus,\n getSuggestions: (scope?: VariableSuggestionsScope) => getDataLinksVariableSuggestions(dataSeries, scope),\n instanceState,\n annotations: data?.annotations,\n };\n\n return context;\n}\n\nexport function getVisualizationOptions(props: OptionPaneRenderProps): OptionsPaneCategoryDescriptor[] {\n const { plugin, panel, onPanelOptionsChanged, onFieldConfigsChange, data, dashboard, instanceState } = props;\n const currentOptions = panel.getOptions();\n const currentFieldConfig = panel.fieldConfig;\n const categoryIndex: Record<string, OptionsPaneCategoryDescriptor> = {};\n\n const context = getStandardEditorContext({\n data,\n replaceVariables: panel.replaceVariables,\n options: currentOptions,\n eventBus: dashboard.events,\n instanceState,\n });\n\n const getOptionsPaneCategory = (categoryNames?: string[]): OptionsPaneCategoryDescriptor => {\n const categoryName = (categoryNames && categoryNames[0]) ?? `${plugin.meta.name}`;\n const category = categoryIndex[categoryName];\n\n if (category) {\n return category;\n }\n\n return (categoryIndex[categoryName] = new OptionsPaneCategoryDescriptor({\n title: categoryName,\n id: categoryName,\n sandboxId: plugin.meta.id,\n }));\n };\n\n const access: NestedValueAccess = {\n getValue: (path) => lodashGet(currentOptions, path),\n onChange: (path, value) => {\n const newOptions = setOptionImmutably(currentOptions, path, value);\n onPanelOptionsChanged(newOptions);\n },\n };\n\n // Load the options into categories\n fillOptionsPaneItems(plugin.meta.id, plugin.getPanelOptionsSupplier(), access, getOptionsPaneCategory, context);\n\n /**\n * Field options\n */\n for (const fieldOption of plugin.fieldConfigRegistry.list()) {\n if (fieldOption.isCustom) {\n if (\n fieldOption.showIf &&\n !fieldOption.showIf(currentFieldConfig.defaults.custom, data?.series, data?.annotations)\n ) {\n continue;\n }\n } else {\n if (fieldOption.showIf && !fieldOption.showIf(currentFieldConfig.defaults, data?.series, data?.annotations)) {\n continue;\n }\n }\n\n if (fieldOption.hideFromDefaults) {\n continue;\n }\n\n const category = getOptionsPaneCategory(fieldOption.category);\n const Editor = fieldOption.editor;\n\n const defaults = currentFieldConfig.defaults;\n const value = fieldOption.isCustom\n ? defaults.custom\n ? lodashGet(defaults.custom, fieldOption.path)\n : undefined\n : lodashGet(defaults, fieldOption.path);\n\n if (fieldOption.getItemsCount) {\n category.props.itemsCount = fieldOption.getItemsCount(value);\n }\n\n const htmlId = `${plugin.meta.id}-${fieldOption.path}`;\n category.addItem(\n new OptionsPaneItemDescriptor({\n title: fieldOption.name,\n id: htmlId,\n description: fieldOption.description,\n overrides: getOptionOverrides(fieldOption, currentFieldConfig, data?.series),\n render: function renderEditor() {\n const onChange = (v: unknown) => {\n onFieldConfigsChange(\n updateDefaultFieldConfigValue(currentFieldConfig, fieldOption.path, v, fieldOption.isCustom)\n );\n };\n\n return <Editor value={value} onChange={onChange} item={fieldOption} context={context} id={htmlId} />;\n },\n })\n );\n }\n\n return Object.values(categoryIndex);\n}\n\nexport function getLibraryVizPanelOptionsCategory(libraryPanel: LibraryPanelBehavior): OptionsPaneCategoryDescriptor {\n const descriptor = new OptionsPaneCategoryDescriptor({\n title: t(\n 'dashboard.get-library-viz-panel-options-category.descriptor.title.library-panel-options',\n 'Library panel options'\n ),\n id: 'Library panel options',\n isOpenDefault: true,\n });\n\n descriptor\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.get-library-viz-panel-options-category.title.name', 'Name'),\n id: 'library-panel-name',\n value: libraryPanel,\n popularRank: 1,\n render: function renderName(descriptor) {\n return (\n <Input\n id={descriptor.props.id}\n data-testid=\"library panel name input\"\n defaultValue={libraryPanel.state.name}\n onBlur={(e) => libraryPanel.setState({ name: e.currentTarget.value })}\n />\n );\n },\n })\n )\n .addItem(\n new OptionsPaneItemDescriptor({\n title: t('dashboard.get-library-viz-panel-options-category.title.information', 'Information'),\n id: 'library-panel-information',\n render: function renderLibraryPanelInformation() {\n return <LibraryVizPanelInfo libraryPanel={libraryPanel} />;\n },\n })\n );\n\n return descriptor;\n}\n\nexport interface OptionPaneRenderProps2 {\n panel: VizPanel;\n eventBus: EventBus;\n plugin: PanelPlugin;\n data?: PanelData;\n instanceState: unknown;\n}\n\nexport function getVisualizationOptions2(props: OptionPaneRenderProps2): OptionsPaneCategoryDescriptor[] {\n const { plugin, panel, data, eventBus, instanceState } = props;\n\n const categoryIndex: Record<string, OptionsPaneCategoryDescriptor> = {};\n const getOptionsPaneCategory = (categoryNames?: string[]): OptionsPaneCategoryDescriptor => {\n const categoryName = categoryNames?.[0] ?? plugin.meta.name;\n const category = categoryIndex[categoryName];\n\n if (category) {\n return category;\n }\n\n return (categoryIndex[categoryName] = new OptionsPaneCategoryDescriptor({\n title: categoryName,\n id: categoryName,\n sandboxId: plugin.meta.id,\n }));\n };\n\n const currentOptions = panel.state.options;\n const access: NestedValueAccess = {\n getValue: (path) => lodashGet(currentOptions, path),\n onChange: (path, value) => {\n if (path === 'timeCompare') {\n reportInteraction('panel_setting_interaction', {\n viz_type: plugin.meta.id,\n feature_type: 'time_comparison',\n option_type: value ? 'toggle_enabled' : 'toggle_disabled',\n });\n }\n\n const newOptions = setOptionImmutably(currentOptions, path, value);\n panel.onOptionsChange(newOptions);\n },\n };\n\n const context = getStandardEditorContext({\n data,\n replaceVariables: panel.interpolate,\n options: currentOptions,\n eventBus: eventBus,\n instanceState,\n });\n\n // Load the options into categories\n fillOptionsPaneItems(plugin.meta.id, plugin.getPanelOptionsSupplier(), access, getOptionsPaneCategory, context);\n\n // Field options\n const currentFieldConfig = panel.state.fieldConfig;\n for (const fieldOption of plugin.fieldConfigRegistry.list()) {\n const hideOption =\n fieldOption.showIf &&\n (fieldOption.isCustom\n ? !fieldOption.showIf(currentFieldConfig.defaults.custom, data?.series, data?.annotations)\n : !fieldOption.showIf(currentFieldConfig.defaults, data?.series, data?.annotations));\n if (fieldOption.hideFromDefaults || hideOption) {\n continue;\n }\n\n const category = getOptionsPaneCategory(fieldOption.category);\n const Editor = fieldOption.editor;\n\n const defaults = currentFieldConfig.defaults;\n const value = fieldOption.isCustom\n ? defaults.custom\n ? lodashGet(defaults.custom, fieldOption.path)\n : undefined\n : lodashGet(defaults, fieldOption.path);\n\n if (fieldOption.getItemsCount) {\n category.props.itemsCount = fieldOption.getItemsCount(value);\n }\n\n const htmlId = `${plugin.meta.id}-${fieldOption.path}`;\n category.addItem(\n new OptionsPaneItemDescriptor({\n title: fieldOption.name,\n id: htmlId,\n description: fieldOption.description,\n overrides: getOptionOverrides(fieldOption, currentFieldConfig, data?.series),\n render: function renderEditor() {\n const onChange = (v: unknown) => {\n panel.onFieldConfigChange(\n updateDefaultFieldConfigValue(currentFieldConfig, fieldOption.path, v, fieldOption.isCustom),\n true\n );\n };\n\n return <Editor value={value} onChange={onChange} item={fieldOption} context={context} id={htmlId} />;\n },\n })\n );\n }\n\n return Object.values(categoryIndex);\n}\n\n/**\n * This will iterate all options panes and add register them with the configured categories\n *\n * @internal\n */\nexport function fillOptionsPaneItems(\n idPrefix: string,\n supplier: PanelOptionsSupplier<any>,\n access: NestedValueAccess,\n getOptionsPaneCategory: categoryGetter,\n context: StandardEditorContext<any>,\n parentCategory?: OptionsPaneCategoryDescriptor\n) {\n const builder = new PanelOptionsEditorBuilder();\n supplier(builder, context);\n\n for (const pluginOption of builder.getItems()) {\n if (pluginOption.showIf && !pluginOption.showIf(context.options, context.data, context.annotations)) {\n continue;\n }\n\n const htmlId = `${idPrefix}-${pluginOption.id}`;\n\n let category = parentCategory;\n if (!category) {\n category = getOptionsPaneCategory(pluginOption.category);\n } else if (pluginOption.category?.[0]?.length) {\n category = category.getCategory(pluginOption.category[0]);\n }\n\n // Nested options get passed up one level\n if (isNestedPanelOptions(pluginOption)) {\n const subAccess = pluginOption.getNestedValueAccess(access);\n const subContext = subAccess.getContext\n ? subAccess.getContext(context)\n : { ...context, options: access.getValue(pluginOption.path) };\n\n fillOptionsPaneItems(\n htmlId,\n pluginOption.getBuilder(),\n subAccess,\n getOptionsPaneCategory,\n subContext,\n category // parent category\n );\n continue;\n }\n\n const Editor = pluginOption.editor;\n category.addItem(\n new OptionsPaneItemDescriptor({\n title: pluginOption.name,\n id: htmlId,\n description: pluginOption.description,\n render: function renderEditor() {\n return (\n <Editor\n value={access.getValue(pluginOption.path)}\n onChange={(value) => {\n access.onChange(pluginOption.path, value);\n }}\n item={pluginOption}\n context={context}\n id={htmlId}\n />\n );\n },\n })\n );\n }\n}\n","import { IoK8SApimachineryPkgApisMetaV1ObjectMeta } from 'app/features/alerting/unified/openapi/receiversApi.gen';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\nimport { K8sAnnotations, PROVENANCE_NONE } from 'app/features/alerting/unified/utils/k8s/constants';\n\n/**\n * Should we call the kubernetes-style API for managing alertmanager entities?\n *\n * Requires the alertmanager referenced being the Grafana AM,\n * and the `alertingApiServer` feature toggle being enabled\n */\nexport const shouldUseK8sApi = (alertmanager?: string) => {\n return alertmanager === GRAFANA_RULES_SOURCE_NAME;\n};\n\ntype EntityToCheck = {\n metadata?: IoK8SApimachineryPkgApisMetaV1ObjectMeta;\n};\n\n/**\n * Check the metadata of a kubernetes entity and check if has the necessary annotations\n * that denote it as provisioned\n */\nexport const isK8sEntityProvisioned = (k8sEntity: EntityToCheck) => {\n const provenance = getAnnotation(k8sEntity, K8sAnnotations.Provenance);\n return Boolean(provenance && provenance !== PROVENANCE_NONE);\n};\n\nexport const ANNOTATION_PREFIX_ACCESS = 'grafana.com/access/';\n\n/**\n * Checks annotations on a k8s entity to see if the requesting user has the required permission\n */\nexport const getAnnotation = (k8sEntity: EntityToCheck, annotation: K8sAnnotations) =>\n k8sEntity.metadata?.annotations?.[annotation];\n\nexport const canEditEntity = (k8sEntity: EntityToCheck) =>\n getAnnotation(k8sEntity, K8sAnnotations.AccessWrite) === 'true';\n\nexport const canAdminEntity = (k8sEntity: EntityToCheck) =>\n getAnnotation(k8sEntity, K8sAnnotations.AccessAdmin) === 'true';\n\nexport const canDeleteEntity = (k8sEntity: EntityToCheck) =>\n getAnnotation(k8sEntity, K8sAnnotations.AccessDelete) === 'true';\n\n/**\n * Escape \\ and = characters for field selectors.\n * The Kubernetes API Machinery will decode those automatically.\n */\nexport const encodeFieldSelector = (value: string): string => {\n return value.replaceAll(/\\\\/g, '\\\\\\\\').replaceAll(/\\=/g, '\\\\=').replaceAll(/,/g, '\\\\,');\n};\n\ntype FieldSelector = [string, string] | [string, string, '=' | '!='];\nexport const stringifyFieldSelector = (fieldSelectors: FieldSelector[]): string => {\n return fieldSelectors\n .map(([key, value, operator = '=']) => `${key}${operator}${encodeFieldSelector(value)}`)\n .join(',');\n};\n","import { PropsWithChildren, useMemo } from 'react';\n\nimport { VariableRefresh } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Field, RadioButtonGroup } from '@grafana/ui';\nimport { useMediaQueryMinWidth } from 'app/core/hooks/useMediaQueryMinWidth';\n\ninterface Props {\n onChange: (option: VariableRefresh) => void;\n refresh: VariableRefresh;\n testId?: string;\n}\n\nconst REFRESH_OPTIONS = [\n { label: 'On dashboard load', value: VariableRefresh.onDashboardLoad },\n { label: 'On time range change', value: VariableRefresh.onTimeRangeChanged },\n];\n\nexport function QueryVariableRefreshSelect({ onChange, refresh, testId }: PropsWithChildren<Props>) {\n const isSmallScreen = !useMediaQueryMinWidth('sm');\n\n const value = useMemo(\n () => REFRESH_OPTIONS.find((o) => o.value === refresh)?.value ?? REFRESH_OPTIONS[0].value,\n [refresh]\n );\n\n return (\n <Field\n label={t('variables.query-variable-refresh-select.label-refresh', 'Refresh')}\n description={t(\n 'variables.query-variable-refresh-select.description-update-values-variable',\n 'When to update the values of this variable'\n )}\n data-testid={testId}\n >\n <RadioButtonGroup\n options={REFRESH_OPTIONS}\n onChange={onChange}\n value={value}\n size={isSmallScreen ? 'sm' : 'md'}\n />\n </Field>\n );\n}\n","import { autoMigrateAngular } from './PanelModel';\n\nexport function getPanelPluginToMigrateTo(panel: any): string | undefined {\n // Graph needs special logic as it can be migrated to multiple panels\n // Also, graphite was previously migrated to graph in the schema version 2 migration in DashboardMigrator.ts\n // but this was a bug because in there graphite was set to graph, but since those migrations run\n // after PanelModel.restoreModel where autoMigrateFrom is set, this caused the graph migration to be skipped.\n // And this resulted in a dashboard with invalid panels.\n if (panel.type === 'graph' || panel.type === 'graphite') {\n if (panel.xaxis?.mode === 'series') {\n if (panel.legend?.values) {\n return 'bargauge';\n }\n\n return 'barchart';\n }\n\n if (panel.xaxis?.mode === 'histogram') {\n return 'histogram';\n }\n\n return 'timeseries';\n }\n\n return autoMigrateAngular[panel.type];\n}\n","import type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api';\n\n// these map to the builtin token types\nenum TokenType {\n Delimiter = 'delimiter',\n Keyword = 'keyword',\n Function = 'type.identifier',\n String = 'string',\n Variable = 'variable.name',\n Number = 'number',\n Comment = 'comment',\n Operator = 'operator',\n Identifier = 'idenfifier',\n}\n\n// list of available functions in Alertmanager templates\n// see https://cs.github.com/prometheus/alertmanager/blob/805e505288ce82c3e2b625a3ca63aaf2b0aa9cea/template/template.go?q=join#L132-L151\nexport enum AlertmanagerTemplateFunction {\n toUpper = 'toUpper',\n toLower = 'toLower',\n title = 'title',\n join = 'join',\n match = 'match',\n safeHtml = 'safeHtml',\n reReplaceAll = 'reReplaceAll',\n stringSlice = 'stringSlice',\n}\n\n// list of available Gomplate functions in Alertmanager templates\n// see https://github.com/hairyhenderson/gomplate\nexport const GomplateFunctions = {\n coll: [\n {\n keyword: 'coll.Dict',\n definition:\n 'Creates a map with string keys from key/value pairs. All keys are converted to strings. If an odd number of arguments is provided, the last is used as the key with an empty string value.',\n usage: 'function(key string, val any, ...)',\n example: `{{ coll.Dict \"name\" \"Frank\" \"age\" 42 | data.ToYAML }}`,\n },\n {\n keyword: 'coll.Slice',\n definition: 'Creates a slice (like an array or list). Useful when needing to range over a bunch of variables.',\n usage: 'function(in ...any)',\n example: `{{ range coll.Slice \"Bart\" \"Lisa\" \"Maggie\" }}Hello, {{ . }}{{ end }}`,\n },\n {\n keyword: 'coll.Append',\n definition: 'Appends a value to the end of a list. Creates a new list rather than modifying the input.',\n usage: 'function(value any, list []any)',\n example: `{{ coll.Slice 1 1 2 3 | append 5 }}`,\n },\n ],\n\n data: [\n {\n keyword: 'data.JSON',\n definition: 'Converts a JSON string into an object. Works for JSON Objects and Arrays.',\n usage: 'function(json string)',\n example: `{{ ($json | data.JSON).hello }}`,\n },\n {\n keyword: 'data.ToJSON',\n definition: 'Converts an object to a JSON document.',\n usage: 'function(obj any)',\n example: `{{ (\\`{\"foo\":{\"hello\":\"world\"}}\\` | json).foo | data.ToJSON }}`,\n },\n {\n keyword: 'data.ToJSONPretty',\n definition: 'Converts an object to a pretty-printed (indented) JSON document.',\n usage: 'function(indent string, obj any)',\n example: `{{ \\`{\"hello\":\"world\"}\\` | data.JSON | data.ToJSONPretty \" \" }}`,\n },\n ],\n\n tmpl: [\n {\n keyword: 'tmpl.Exec',\n definition:\n 'Execute (render) the named template. This is equivalent to using the `template` action, except the result is returned as a string. This allows for post-processing of templates.',\n usage: 'function(name string, [context any])',\n example: `{{ tmpl.Exec \"T1\" | strings.ToUpper }}`,\n },\n {\n keyword: 'tmpl.Inline',\n definition:\n 'Render the given string as a template, just like a nested template. If the template is given a name, it can be re-used later with the `template` keyword. A context can be provided, otherwise the default gomplate context will be used.',\n usage: 'function(partial string, context any)',\n example: `{{ tmpl.Inline \"{{print \\`hello world\\`}}\" }}`,\n },\n ],\n\n time: [\n {\n keyword: 'time.Now',\n definition: \"Returns the current local time, as a time.Time. This wraps Go's time.Now.\",\n usage: 'function()',\n example: `{{ (time.Now).UTC.Format \"Day 2 of month 1 in year 2006 (timezone MST)\" }}`,\n },\n ],\n};\n\nexport const availableAlertManagerFunctions = [\n ...Object.values(AlertmanagerTemplateFunction),\n ...Object.keys(GomplateFunctions).map((namespace) => namespace),\n];\n\n// boolean functions\nconst booleanFunctions = ['eq', 'ne', 'lt', 'le', 'gt', 'ge'];\n\n// built-in functions for Go templates\nexport const builtinFunctions = [\n 'and',\n 'call',\n 'html',\n 'index',\n 'slice',\n 'js',\n 'len',\n 'not',\n 'or',\n 'print',\n 'printf',\n 'println',\n 'urlquery',\n ...booleanFunctions,\n];\n\n// Go template keywords\nexport const keywords = ['define', 'if', 'else', 'end', 'range', 'break', 'continue', 'template', 'block', 'with'];\n\n// Monarch language definition, see https://microsoft.github.io/monaco-editor/monarch.html\n// check https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/go/go.ts for an example\n// see https://pkg.go.dev/text/template for the available keywords etc\nexport const language: monacoType.languages.IMonarchLanguage = {\n defaultToken: '', // change this to \"invalid\" to find tokens that were never matched\n keywords: keywords,\n functions: [...builtinFunctions, ...availableAlertManagerFunctions],\n operators: ['|'],\n tokenizer: {\n root: [\n // strings\n [/\"/, TokenType.String, '@string'],\n [/`/, TokenType.String, '@rawstring'],\n // numbers\n [/\\d*\\d+[eE]([\\-+]?\\d+)?/, 'number.float'],\n [/\\d*\\.\\d+([eE][\\-+]?\\d+)?/, 'number.float'],\n [/0[xX][0-9a-fA-F']*[0-9a-fA-F]/, 'number.hex'],\n [/0[0-7']*[0-7]/, 'number.octal'],\n [/0[bB][0-1']*[0-1]/, 'number.binary'],\n [/\\d[\\d']*/, TokenType.Number],\n [/\\d/, TokenType.Number],\n // delimiter: after number because of .\\d floats\n [/[;,.]/, TokenType.Delimiter],\n // delimiters\n [/{{-?/, TokenType.Delimiter],\n [/-?}}/, TokenType.Delimiter],\n // variables\n [/\\.([A-Za-z]+)?/, TokenType.Variable],\n // identifiers and keywords\n [\n /[a-zA-Z_]\\w*/,\n {\n cases: {\n '@keywords': { token: TokenType.Keyword },\n '@functions': { token: TokenType.Function },\n '@default': TokenType.Identifier,\n },\n },\n ],\n // comments\n [/\\/\\*.*\\*\\//, TokenType.Comment],\n ],\n string: [\n [/[^\\\\\"]+/, TokenType.String],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, TokenType.String, '@pop'],\n ],\n rawstring: [\n [/[^\\`]/, TokenType.String],\n [/`/, TokenType.String, '@pop'],\n ],\n },\n};\n\nexport const conf: monacoType.languages.LanguageConfiguration = {\n comments: {\n blockComment: ['/*', '*/'],\n },\n brackets: [\n ['{{', '}}'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{{', close: '}}' },\n { open: '(', close: ')' },\n { open: '`', close: '`' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{{', close: '}}' },\n { open: '(', close: ')' },\n { open: '`', close: '`' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n};\n","import { useMemo } from 'react';\n\nimport { DataFrame, Field, getFieldDisplayName, SelectableValue, FieldNamePickerBaseNameMode } from '@grafana/data';\n\nimport { getFieldTypeIcon } from '../../types/icon';\n\n/**\n * @internal\n */\nexport interface FrameFieldsDisplayNames {\n // The display names\n display: Set<string>;\n\n // raw field names (that are explicitly not visible)\n raw: Set<string>;\n\n // Field mappings (duplicates are not supported)\n fields: Map<string, Field>;\n}\n\n/**\n * @internal\n */\nexport function frameHasName(name: string | undefined, names: FrameFieldsDisplayNames) {\n if (!name) {\n return false;\n }\n return names.display.has(name) || names.raw.has(name);\n}\n\n/**\n * Returns the distinct names in a set of frames\n */\nexport function getFrameFieldsDisplayNames(\n data: DataFrame[],\n filter?: (field: Field) => boolean\n): FrameFieldsDisplayNames {\n const names: FrameFieldsDisplayNames = {\n display: new Set<string>(),\n raw: new Set<string>(),\n fields: new Map<string, Field>(),\n };\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (filter && !filter(field)) {\n continue;\n }\n const disp = getFieldDisplayName(field, frame, data);\n names.display.add(disp);\n names.fields.set(disp, field);\n if (field.name && disp !== field.name) {\n names.raw.add(field.name);\n names.fields.set(field.name, field);\n }\n }\n }\n return names;\n}\n\n/**\n * @internal\n */\nexport function useFieldDisplayNames(data: DataFrame[], filter?: (field: Field) => boolean): FrameFieldsDisplayNames {\n return useMemo(() => {\n return getFrameFieldsDisplayNames(data, filter);\n }, [data, filter]);\n}\n\n/**\n * @internal\n */\nexport function useSelectOptions(\n displayNames: FrameFieldsDisplayNames,\n currentName?: string,\n firstItem?: SelectableValue<string>,\n fieldType?: string,\n baseNameMode?: FieldNamePickerBaseNameMode\n): Array<SelectableValue<string>> {\n return useMemo(() => {\n let found = false;\n const options: Array<SelectableValue<string>> = [];\n if (firstItem) {\n options.push(firstItem);\n }\n if (baseNameMode === FieldNamePickerBaseNameMode.OnlyBaseNames) {\n for (const name of displayNames.raw) {\n if (!found && name === currentName) {\n found = true;\n }\n options.push({\n value: name,\n label: `${name} (base field name)`,\n });\n }\n } else {\n for (const name of displayNames.display) {\n if (!found && name === currentName) {\n found = true;\n }\n const field = displayNames.fields.get(name);\n if (!fieldType || fieldType === field?.type) {\n options.push({\n value: name,\n label: name,\n icon: field ? getFieldTypeIcon(field) : undefined,\n });\n }\n }\n\n if (baseNameMode !== FieldNamePickerBaseNameMode.ExcludeBaseNames) {\n for (const name of displayNames.raw) {\n if (!displayNames.display.has(name)) {\n if (!found && name === currentName) {\n found = true;\n }\n options.push({\n value: name,\n label: `${name} (base field name)`,\n });\n }\n }\n }\n }\n\n if (currentName && !found) {\n options.push({\n value: currentName,\n label: `${currentName} (not found)`,\n });\n }\n return options;\n }, [displayNames, currentName, firstItem, fieldType, baseNameMode]);\n}\n","import { css, cx } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useOverlay } from '@react-aria/overlays';\nimport { useState, useEffect, useRef, useId } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Alert } from '../Alert/Alert';\nimport { clearButtonStyles } from '../Button/Button';\nimport { IconButton } from '../IconButton/IconButton';\n\n// Define the image item interface\nexport interface CarouselImage {\n path: string;\n name: string;\n}\n\nexport interface CarouselProps {\n images: CarouselImage[];\n}\n\n/**\n * The Carousel component displays a grid of image thumbnails that can be clicked to view full-sized images in a modal with navigation controls. It provides an elegant way to present collections of images or screenshots with fullscreen preview capabilities.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/overlays-carousel--docs\n */\nexport const Carousel: React.FC<CarouselProps> = ({ images }) => {\n const [selectedIndex, setSelectedIndex] = useState<number | null>(null);\n const [imageErrors, setImageErrors] = useState<Record<string, boolean>>({});\n const [validImages, setValidImages] = useState<CarouselImage[]>(images);\n const id = useId();\n\n const styles = useStyles2(getStyles);\n const resetButtonStyles = useStyles2(clearButtonStyles);\n\n const handleImageError = (path: string) => {\n setImageErrors((prev) => ({\n ...prev,\n [path]: true,\n }));\n };\n\n useEffect(() => {\n const filteredImages = images.filter((image) => !imageErrors[image.path]);\n setValidImages(filteredImages);\n }, [imageErrors, images]);\n\n const openPreview = (index: number) => {\n setSelectedIndex(index);\n };\n\n const closePreview = () => {\n setSelectedIndex(null);\n };\n\n const goToNext = () => {\n if (selectedIndex !== null && validImages.length > 0) {\n setSelectedIndex((selectedIndex + 1) % validImages.length);\n }\n };\n\n const goToPrevious = () => {\n if (selectedIndex !== null && validImages.length > 0) {\n setSelectedIndex((selectedIndex - 1 + validImages.length) % validImages.length);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (selectedIndex === null) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowRight':\n goToNext();\n break;\n case 'ArrowLeft':\n goToPrevious();\n break;\n case 'Escape':\n closePreview();\n break;\n default:\n break;\n }\n };\n\n const ref = useRef<HTMLDivElement>(null);\n\n const { overlayProps, underlayProps } = useOverlay({ isOpen: selectedIndex !== null, onClose: closePreview }, ref);\n const { dialogProps } = useDialog({}, ref);\n\n if (validImages.length === 0) {\n return (\n <Alert\n title={t('carousel.error', 'Something went wrong loading images')}\n severity=\"warning\"\n data-testid=\"alert-warning\"\n />\n );\n }\n\n return (\n <>\n <div className={cx(styles.imageGrid)}>\n {validImages.map((image, index) => {\n const imageNameId = `${id}-carousel-image-${index}`;\n return (\n <button\n aria-label={t('grafana-ui.carousel.aria-label-open-image', 'Open image preview')}\n aria-describedby={imageNameId}\n type=\"button\"\n key={image.path}\n onClick={() => openPreview(index)}\n className={cx(resetButtonStyles, styles.imageButton)}\n >\n <img src={image.path} alt=\"\" onError={() => handleImageError(image.path)} />\n <p id={imageNameId}>{image.name}</p>\n </button>\n );\n })}\n </div>\n\n {selectedIndex !== null && (\n <OverlayContainer>\n <div role=\"presentation\" className={styles.underlay} onClick={closePreview} {...underlayProps} />\n <FocusScope contain autoFocus restoreFocus>\n {/* convenience method for keyboard users */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n data-testid=\"carousel-full-screen\"\n ref={ref}\n {...overlayProps}\n {...dialogProps}\n onKeyDown={handleKeyDown}\n className={styles.overlay}\n >\n <IconButton\n name=\"times\"\n aria-label={t('carousel.close', 'Close')}\n size=\"xl\"\n onClick={closePreview}\n className={cx(styles.closeButton)}\n />\n\n <IconButton\n size=\"xl\"\n name=\"angle-left\"\n aria-label={t('carousel.previous', 'Previous')}\n onClick={goToPrevious}\n data-testid=\"previous-button\"\n />\n\n <div className={styles.imageContainer} data-testid=\"carousel-full-image\">\n <img\n className={styles.imagePreview}\n src={validImages[selectedIndex].path}\n alt={validImages[selectedIndex].name}\n onError={() => handleImageError(validImages[selectedIndex].path)}\n />\n </div>\n\n <IconButton\n size=\"xl\"\n name=\"angle-right\"\n aria-label={t('carousel.next', 'Next')}\n onClick={goToNext}\n data-testid=\"next-button\"\n />\n </div>\n </FocusScope>\n </OverlayContainer>\n )}\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n imageButton: css({\n textAlign: 'left',\n }),\n imageContainer: css({\n display: 'flex',\n justifyContent: 'center',\n flex: 1,\n }),\n imagePreview: css({\n borderRadius: theme.shape.radius.lg,\n maxWidth: '100%',\n maxHeight: '80vh',\n objectFit: 'contain',\n }),\n imageGrid: css({\n display: 'grid',\n gridTemplateColumns: `repeat(auto-fill, minmax(200px, 1fr))`,\n gap: theme.spacing(2),\n marginBottom: '20px',\n\n '& img': {\n width: '100%',\n height: '150px',\n objectFit: 'cover',\n border: theme.colors.border.strong,\n borderRadius: theme.shape.radius.default,\n boxShadow: theme.shadows.z1,\n },\n '& p': {\n margin: theme.spacing(0.5, 0),\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.colors.text.primary,\n },\n }),\n underlay: css({\n position: 'fixed',\n zIndex: theme.zIndex.modalBackdrop,\n inset: 0,\n backgroundColor: theme.components.overlay.background,\n }),\n overlay: css({\n alignItems: 'center',\n display: 'flex',\n gap: theme.spacing(1),\n height: 'fit-content',\n marginBottom: 'auto',\n marginTop: 'auto',\n padding: theme.spacing(2),\n position: 'fixed',\n inset: 0,\n zIndex: theme.zIndex.modal,\n }),\n closeButton: css({\n color: theme.colors.text.primary,\n position: 'fixed',\n top: theme.spacing(2),\n right: theme.spacing(2),\n }),\n});\n","import React, { createContext, useCallback, useContext } from 'react';\n\nexport interface ElementSelectionOnSelectOptions {\n /** If specified, this will ignore the shift key press */\n multi?: boolean;\n\n /** If true, this will make sure the element is selected */\n force?: boolean;\n}\n\n/** @alpha */\nexport interface ElementSelectionContextState {\n /**\n * Turn on selection mode & show selection state\n */\n enabled?: boolean;\n /** List of currently selected elements */\n selected: ElementSelectionContextItem[];\n onSelect: (item: ElementSelectionContextItem, options: ElementSelectionOnSelectOptions) => void;\n onClear: () => void;\n}\n\nexport interface ElementSelectionContextItem {\n id: string;\n}\n\nexport const ElementSelectionContext = createContext<ElementSelectionContextState | undefined>(undefined);\n\nexport interface UseElementSelectionResult {\n isSelected?: boolean;\n isSelectable?: boolean;\n onSelect?: (evt: React.MouseEvent, options?: ElementSelectionOnSelectOptions) => void;\n onClear?: () => void;\n}\n\nexport function useElementSelection(id: string | undefined): UseElementSelectionResult {\n if (!id) {\n return {};\n }\n\n const context = useContext(ElementSelectionContext);\n if (!context) {\n return {};\n }\n\n const isSelected = context.selected.some((item) => item.id === id);\n const onSelect = useCallback(\n (evt: React.MouseEvent, options: ElementSelectionOnSelectOptions = {}) => {\n if (!context.enabled) {\n return;\n }\n\n // To prevent this click form clearing the selection\n evt.stopPropagation();\n\n // Prevent text selection caused by shift click\n if (evt.shiftKey) {\n evt.preventDefault();\n window.getSelection()?.empty();\n }\n\n context.onSelect({ id }, { ...options, multi: options.multi ?? evt.shiftKey });\n },\n [context, id]\n );\n\n const onClear = useCallback(() => {\n if (!context.enabled) {\n return;\n }\n\n context.onClear();\n }, [context]);\n\n return { isSelected, onSelect, onClear, isSelectable: context.enabled };\n}\n","import { CoreApp, DataSourceApi, getNextRefId, hasQueryExportSupport, hasQueryImportSupport } from '@grafana/data';\nimport { getTemplateSrv, isExpressionReference } from '@grafana/runtime';\nimport { DataQuery } from '@grafana/schema';\n\nexport async function updateQueries(\n nextDS: DataSourceApi,\n nextDSUidOrVariableExpression: string,\n queries: DataQuery[],\n currentDS?: DataSourceApi\n): Promise<DataQuery[]> {\n let nextQueries = queries;\n const datasource = { ...nextDS.getRef(), uid: nextDSUidOrVariableExpression };\n const DEFAULT_QUERY = { ...nextDS?.getDefaultQuery?.(CoreApp.PanelEditor), datasource, refId: 'A' };\n\n // we are changing data source type\n if (currentDS?.meta.id !== nextDS.meta.id) {\n // If changing to mixed do nothing\n if (nextDS.meta.mixed) {\n return queries;\n }\n // when both data sources support abstract queries\n else if (hasQueryExportSupport(currentDS) && hasQueryImportSupport(nextDS)) {\n const abstractQueries = await currentDS.exportToAbstractQueries(queries);\n nextQueries = await nextDS.importFromAbstractQueries(abstractQueries);\n }\n // when datasource supports query import\n else if (currentDS && nextDS.importQueries) {\n nextQueries = await nextDS.importQueries(queries, currentDS);\n }\n // Otherwise clear queries that do not match the next datasource UID\n else {\n if (currentDS) {\n const templateSrv = getTemplateSrv();\n const reducedQueries: DataQuery[] = [];\n let nextUid = nextDS.uid;\n const nextIsTemplate = templateSrv.containsTemplate(nextDSUidOrVariableExpression);\n if (nextIsTemplate) {\n nextUid = templateSrv.replace(nextDS.uid);\n }\n // Queries will only be preserved if the datasource UID of the query matches the UID\n // of the next chosen datasource\n const nextDsQueries = queries.reduce((reduced, currentQuery) => {\n if (currentQuery.datasource) {\n let currUid = currentQuery.datasource.uid;\n const currIsTemplate = templateSrv.containsTemplate(currUid);\n if (currIsTemplate) {\n currUid = templateSrv.replace(currentQuery.datasource.uid);\n }\n if (currUid === nextUid && currIsTemplate === nextIsTemplate) {\n currentQuery.refId = getNextRefId(reduced);\n return reduced.concat([currentQuery]);\n }\n }\n return reduced;\n }, reducedQueries);\n\n if (nextDsQueries.length > 0) {\n return nextDsQueries;\n }\n }\n\n return [DEFAULT_QUERY];\n }\n }\n\n if (nextQueries.length === 0) {\n return [DEFAULT_QUERY];\n }\n\n // Set data source on all queries except expression queries\n return nextQueries.map((query) => {\n if (!isExpressionReference(query.datasource) && !nextDS.meta.mixed) {\n query.datasource = datasource;\n }\n return query;\n });\n}\n","import { t } from '@grafana/i18n';\n\nimport { withTheme2 } from '../../themes/ThemeContext';\nimport { InlineField } from '../Forms/InlineField';\nimport { InlineSwitch } from '../Switch/Switch';\nimport { PopoverContentProps } from '../Tooltip/types';\n\nimport { ColorPickerPopover, ColorPickerProps } from './ColorPickerPopover';\n\nexport interface SeriesColorPickerPopoverProps extends ColorPickerProps, PopoverContentProps {\n yaxis?: number;\n onToggleAxis?: () => void;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/pickers-seriescolorpicker--docs\n */\nexport const SeriesColorPickerPopover = (props: SeriesColorPickerPopoverProps) => {\n const { yaxis, onToggleAxis, color, ...colorPickerProps } = props;\n const yAxisLabel = t('grafana-ui.series-color-picker-popover.y-axis-usage', 'Use right y-axis');\n const customPickers = onToggleAxis\n ? {\n yaxis: {\n name: 'Y-Axis',\n tabComponent() {\n return (\n <InlineField labelWidth={20} label={yAxisLabel}>\n <InlineSwitch value={yaxis === 2} label={yAxisLabel} onChange={onToggleAxis} />\n </InlineField>\n );\n },\n },\n }\n : undefined;\n return <ColorPickerPopover {...colorPickerProps} color={color || '#000000'} customPickers={customPickers} />;\n};\n\n// This component is to enable SeriesColorPickerPopover usage via series-color-picker-popover directive\nexport const SeriesColorPickerPopoverWithTheme = withTheme2(SeriesColorPickerPopover);\n","import { DataFrame, Field } from '@grafana/data';\nimport { ScalarDimensionConfig, ScalarDimensionMode } from '@grafana/schema';\n\nimport { DimensionSupplier } from './types';\nimport { findField, getLastNotNullFieldValue } from './utils';\n\n//---------------------------------------------------------\n// Scalar dimension\n//---------------------------------------------------------\nexport function getScalarDimension(\n frame: DataFrame | undefined,\n config: ScalarDimensionConfig\n): DimensionSupplier<number> {\n return getScalarDimensionForField(findField(frame, config?.field), config);\n}\nexport function getScalarDimensionForField(\n field: Field | undefined,\n cfg: ScalarDimensionConfig\n): DimensionSupplier<number> {\n if (!field) {\n const v = cfg.fixed ?? 0;\n return {\n isAssumed: Boolean(cfg.field?.length) || !cfg.fixed,\n fixed: v,\n value: () => v,\n get: () => v,\n };\n }\n\n //mod mode as default\n let validated = (value: number) => {\n return value % cfg.max;\n };\n\n //capped mode\n if (cfg.mode === ScalarDimensionMode.Clamped) {\n validated = (value: number) => {\n if (value < cfg.min) {\n return cfg.min;\n }\n if (value > cfg.max) {\n return cfg.max;\n }\n return value;\n };\n }\n\n const get = (i: number) => {\n const v = field.values[i];\n if (v === null || typeof v !== 'number') {\n return 0;\n }\n return validated(v);\n };\n\n return {\n field,\n get,\n value: () => getLastNotNullFieldValue(field),\n };\n}\n","import { reportInteraction } from '@grafana/runtime';\n\nconst SCHEMA_VERSION = 1;\n\ntype ContentKind = 'datasource_dashboard';\n// in future this could be \"template_dashboard\" if/when items become templates or \"community_dashboard\"\n// | 'template_dashboard' | 'community_dashboard';\n\ntype SourceEntryPoint = 'datasource_page';\n// possible future flows onboarding, create-dashboard, empty states\n// | 'create_dashboard' | 'empty_state';\n\nexport const DashboardLibraryInteractions = {\n loaded: (properties: {\n numberOfItems: number;\n contentKinds: ContentKind[];\n datasourceTypes: string[];\n sourceEntryPoint: SourceEntryPoint;\n }) => {\n reportDashboardLibraryInteraction('loaded', properties);\n },\n itemClicked: (properties: {\n contentKind: ContentKind;\n datasourceTypes: string[];\n libraryItemId: string;\n libraryItemTitle: string;\n sourceEntryPoint: SourceEntryPoint;\n }) => {\n reportDashboardLibraryInteraction('item_clicked', properties);\n },\n};\n\nconst reportDashboardLibraryInteraction = (name: string, properties?: Record<string, unknown>) => {\n reportInteraction(`grafana_dashboard_library_${name}`, { ...properties, schema_version: SCHEMA_VERSION });\n};\n","import { css } from '@emotion/css';\nimport { useState } from 'react';\nimport { useSearchParams } from 'react-router-dom-v5-compat';\nimport { useAsync } from 'react-use';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { getBackendSrv, getDataSourceSrv, locationService } from '@grafana/runtime';\nimport { Button, useStyles2, Text, Box, Stack, Grid } from '@grafana/ui';\nimport { PluginDashboard } from 'app/types/plugins';\nimport dashboardLibrary1 from 'img/dashboard-library/dashboard_library_1.jpg';\nimport dashboardLibrary2 from 'img/dashboard-library/dashboard_library_2.jpg';\nimport dashboardLibrary3 from 'img/dashboard-library/dashboard_library_3.jpg';\nimport dashboardLibrary4 from 'img/dashboard-library/dashboard_library_4.jpg';\nimport dashboardLibrary5 from 'img/dashboard-library/dashboard_library_5.jpg';\nimport dashboardLibrary6 from 'img/dashboard-library/dashboard_library_6.jpg';\n\nimport { DASHBOARD_LIBRARY_ROUTES } from '../types';\n\nimport { DashboardLibraryInteractions } from './interactions';\n\nexport const DashboardLibrarySection = () => {\n const [searchParams] = useSearchParams();\n const datasourceUid = searchParams.get('dashboardLibraryDatasourceUid');\n\n const [showAll, setShowAll] = useState(false);\n\n const { value: templateDashboards } = useAsync(async (): Promise<PluginDashboard[]> => {\n if (!datasourceUid) {\n return [];\n }\n\n const ds = getDataSourceSrv().getInstanceSettings(datasourceUid);\n if (!ds) {\n return [];\n }\n\n try {\n const dashboards = await getBackendSrv().get(`api/plugins/${ds.type}/dashboards`, undefined, undefined, {\n showErrorAlert: false,\n });\n\n if (dashboards.length > 0) {\n DashboardLibraryInteractions.loaded({\n numberOfItems: dashboards.length,\n contentKinds: ['datasource_dashboard'],\n datasourceTypes: [ds.type],\n sourceEntryPoint: 'datasource_page',\n });\n }\n return dashboards;\n } catch (error) {\n console.error('Error loading template dashboards', error);\n return [];\n }\n }, [datasourceUid]);\n\n const hasMoreThanThree = templateDashboards && templateDashboards.length > 3;\n const dashboardsToShow = showAll ? templateDashboards : templateDashboards?.slice(0, 3);\n\n const styles = useStyles2(getStyles, dashboardsToShow?.length);\n\n const onImportDashboardClick = async (dashboard: PluginDashboard) => {\n DashboardLibraryInteractions.itemClicked({\n contentKind: 'datasource_dashboard',\n datasourceTypes: [dashboard.pluginId],\n libraryItemId: dashboard.uid,\n libraryItemTitle: dashboard.title,\n sourceEntryPoint: 'datasource_page',\n });\n\n const params = new URLSearchParams({\n datasource: datasourceUid || '',\n title: dashboard.title || 'Template',\n pluginId: dashboard.pluginId,\n path: dashboard.path,\n // tracking event purpose values\n sourceEntryPoint: 'datasource_page',\n libraryItemId: dashboard.uid,\n creationOrigin: 'dashboard_library_datasource_dashboard',\n });\n\n const templateUrl = `${DASHBOARD_LIBRARY_ROUTES.Template}?${params.toString()}`;\n locationService.push(templateUrl);\n };\n\n if (!templateDashboards?.length) {\n return null;\n }\n\n return (\n <Box borderRadius=\"lg\" borderColor=\"strong\" borderStyle=\"dashed\" padding={4} flex={1}>\n <Stack direction=\"column\" alignItems=\"center\" gap={2}>\n <Text element=\"h3\" textAlignment=\"center\" weight=\"medium\">\n <Trans i18nKey=\"dashboard.empty.start-with-suggested-dashboards\">\n Start with a pre-made dashboard from your data source\n </Trans>\n </Text>\n <Box marginTop={2}>\n <Grid\n gap={4}\n columns={{\n xs: 1,\n sm: (dashboardsToShow?.length || 1) >= 2 ? 2 : 1,\n lg: (dashboardsToShow?.length || 1) >= 3 ? 3 : (dashboardsToShow?.length || 1) >= 2 ? 2 : 1,\n }}\n >\n {dashboardsToShow?.map((dashboard, index) => (\n <TemplateDashboardBox\n key={dashboard.uid}\n index={index}\n dashboard={dashboard}\n onImportClick={onImportDashboardClick}\n />\n )) || []}\n </Grid>\n </Box>\n {hasMoreThanThree && (\n <Button\n variant=\"secondary\"\n fill=\"outline\"\n size=\"sm\"\n onClick={() => setShowAll((prev) => !prev)}\n className={styles.showMoreButton}\n >\n {showAll ? (\n <Trans i18nKey=\"dashboard.empty.show-less-dashboards\">Show less</Trans>\n ) : (\n <Trans i18nKey=\"dashboard.empty.show-more-dashboards\">Show more</Trans>\n )}\n </Button>\n )}\n </Stack>\n </Box>\n );\n};\n\nconst TemplateDashboardBox = ({\n dashboard,\n onImportClick,\n index,\n}: {\n dashboard: PluginDashboard;\n onImportClick: (d: PluginDashboard) => void;\n index: number;\n}) => {\n const dashboardLibraryImages = [\n dashboardLibrary1,\n dashboardLibrary2,\n dashboardLibrary3,\n dashboardLibrary4,\n dashboardLibrary5,\n dashboardLibrary6,\n ];\n\n const styles = useStyles2(getStyles);\n return (\n <div className={styles.templateDashboardBox}>\n <img\n src={index <= 5 ? dashboardLibraryImages[index] : dashboardLibraryImages[index % dashboardLibraryImages.length]}\n width={285}\n height={160}\n alt={dashboard.title}\n className={styles.templateDashboardImage}\n />\n <div className={styles.templateDashboardTitle}>\n <Text element=\"p\" textAlignment=\"center\">\n {dashboard.title}\n </Text>\n </div>\n <Button fill=\"outline\" onClick={() => onImportClick(dashboard)} size=\"sm\">\n <Trans i18nKey=\"dashboard.empty.use-template-button\">Use this dashboard</Trans>\n </Button>\n </div>\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2, dashboardsLength?: number) {\n return {\n templateDashboardBox: css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n alignItems: 'center',\n }),\n templateDashboardTitle: css({\n flex: 1,\n }),\n templateDashboardImage: css({\n borderRadius: theme.shape.radius.default,\n borderColor: theme.colors.text.primary,\n borderWidth: 1,\n borderStyle: 'solid',\n objectFit: 'cover',\n }),\n showMoreButton: css({\n marginTop: theme.spacing(2),\n }),\n };\n}\n","import { PluginExtensionPoints } from '@grafana/data';\nimport { config, renderLimitedComponents, usePluginComponents } from '@grafana/runtime';\nimport PageLoader from 'app/core/components/PageLoader/PageLoader';\n\ninterface DashboardEmptyExtensionPointProps {\n renderDefaultUI: () => JSX.Element;\n onAddVisualization?: () => void;\n onAddLibraryPanel?: () => void;\n onImportDashboard?: () => void;\n}\n\nexport function DashboardEmptyExtensionPoint(props: DashboardEmptyExtensionPointProps): JSX.Element | null {\n if (config.featureToggles.enableDashboardEmptyExtensions !== true) {\n return props.renderDefaultUI();\n }\n\n return <InternalDashboardEmptyExtensionPoint {...props} />;\n}\n\n// We have this \"internal\" component so we can prevent pre-loading the plugins associated with the extension-point if the feature is not enabled.\nfunction InternalDashboardEmptyExtensionPoint(props: DashboardEmptyExtensionPointProps): JSX.Element | null {\n const { components, isLoading } = usePluginComponents<DashboardEmptyExtensionPointProps>({\n extensionPointId: PluginExtensionPoints.DashboardEmpty,\n });\n\n if (isLoading) {\n return <PageLoader />;\n }\n\n return (\n renderLimitedComponents<DashboardEmptyExtensionPointProps>({\n props,\n components: components,\n // We only ever want one component to replace the default empty state UI (so that we don't end up with two competing/default UIs being rendered).\n // And, currently, we only want to allow setupguide-app to be able to do this.\n limit: 1,\n pluginId: 'grafana-setupguide-app',\n }) ?? props.renderDefaultUI()\n );\n}\n","import { useMemo } from 'react';\n\nimport { locationService } from '@grafana/runtime';\nimport { buildPanelEditScene } from 'app/features/dashboard-scene/panel-edit/PanelEditor';\nimport { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\nimport { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';\nimport { useGetResourceRepositoryView } from 'app/features/provisioning/hooks/useGetResourceRepositoryView';\nimport { useDispatch, useSelector } from 'app/types/store';\n\nimport { setInitialDatasource } from '../../state/reducers';\nimport {\n onCreateNewPanel,\n onAddLibraryPanel as onAddLibraryPanelImpl,\n onImportDashboard as onImportDashboardImpl,\n} from '../../utils/dashboard';\n\nimport type { Props } from './DashboardEmpty';\n\nexport const useIsReadOnlyRepo = ({ dashboard }: Props) => {\n const { isReadOnlyRepo } = useGetResourceRepositoryView({\n folderName: dashboard instanceof DashboardScene ? dashboard.state.meta.folderUid : dashboard.meta.folderUid,\n });\n\n return isReadOnlyRepo;\n};\n\ninterface HookProps extends Props {\n isReadOnlyRepo: boolean;\n}\n\nexport const useOnAddVisualization = ({ dashboard, canCreate, isReadOnlyRepo }: HookProps) => {\n const dispatch = useDispatch();\n const initialDatasource = useSelector((state) => state.dashboard.initialDatasource);\n\n return useMemo(() => {\n if (!canCreate || isReadOnlyRepo) {\n return undefined;\n }\n\n return () => {\n if (dashboard instanceof DashboardScene) {\n const panel = dashboard.onCreateNewPanel();\n dashboard.setState({ editPanel: buildPanelEditScene(panel, true) });\n locationService.partial({ firstPanel: true });\n } else {\n const id = onCreateNewPanel(dashboard, initialDatasource);\n dispatch(setInitialDatasource(undefined));\n locationService.partial({ editPanel: id, firstPanel: true });\n }\n\n DashboardInteractions.emptyDashboardButtonClicked({ item: 'add_visualization' });\n };\n }, [canCreate, isReadOnlyRepo, dashboard, dispatch, initialDatasource]);\n};\n\nexport const useOnAddLibraryPanel = ({ dashboard, canCreate, isReadOnlyRepo }: HookProps) => {\n const isProvisioned = dashboard instanceof DashboardScene && dashboard.isManagedRepository();\n\n return useMemo(() => {\n if (!canCreate || isProvisioned || isReadOnlyRepo) {\n return undefined;\n }\n\n return () => {\n DashboardInteractions.emptyDashboardButtonClicked({ item: 'import_from_library' });\n if (dashboard instanceof DashboardScene) {\n dashboard.onShowAddLibraryPanelDrawer();\n } else {\n onAddLibraryPanelImpl(dashboard);\n }\n };\n }, [canCreate, isProvisioned, isReadOnlyRepo, dashboard]);\n};\n\nexport const useOnImportDashboard = ({ dashboard, canCreate, isReadOnlyRepo }: HookProps) => {\n const isProvisioned = dashboard instanceof DashboardScene && dashboard.isManagedRepository();\n return useMemo(() => {\n if (!canCreate || isProvisioned || isReadOnlyRepo) {\n return undefined;\n }\n\n return () => {\n DashboardInteractions.emptyDashboardButtonClicked({ item: 'import_dashboard' });\n onImportDashboardImpl();\n };\n }, [canCreate, isReadOnlyRepo, isProvisioned]);\n};\n","import { css, cx } from '@emotion/css';\nimport { useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom-v5-compat';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Button, useStyles2, Text, Box, Stack, TextLink } from '@grafana/ui';\nimport { DashboardModel } from 'app/features/dashboard/state/DashboardModel';\nimport { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';\n\nimport { DashboardLibrarySection } from '../DashboardLibrary/DashboardLibrarySection';\n\nimport { DashboardEmptyExtensionPoint } from './DashboardEmptyExtensionPoint';\nimport {\n useIsReadOnlyRepo,\n useOnAddVisualization,\n useOnAddLibraryPanel,\n useOnImportDashboard,\n} from './DashboardEmptyHooks';\n\ninterface InternalProps {\n onAddVisualization?: () => void;\n onAddLibraryPanel?: () => void;\n onImportDashboard?: () => void;\n}\n\nconst InternalDashboardEmpty = ({ onAddVisualization, onAddLibraryPanel, onImportDashboard }: InternalProps) => {\n const styles = useStyles2(getStyles);\n\n const [searchParams] = useSearchParams();\n const dashboardLibraryDatasourceUid = searchParams.get('dashboardLibraryDatasourceUid');\n\n return (\n <Stack alignItems=\"center\" justifyContent=\"center\">\n <div\n className={cx(styles.wrapper, {\n [styles.wrapperMaxWidth]: !config.featureToggles.dashboardLibrary || !dashboardLibraryDatasourceUid,\n })}\n >\n <Stack alignItems=\"stretch\" justifyContent=\"center\" gap={4} direction=\"column\">\n <Box borderRadius=\"lg\" borderColor=\"strong\" borderStyle=\"dashed\" padding={4}>\n <Stack direction=\"column\" alignItems=\"center\" gap={2}>\n <Text element=\"h1\" textAlignment=\"center\" weight=\"medium\">\n <Trans i18nKey=\"dashboard.empty.add-visualization-header\">\n Start your new dashboard by adding a visualization\n </Trans>\n </Text>\n <Box marginBottom={2} paddingX={4}>\n <Text element=\"p\" textAlignment=\"center\" color=\"secondary\">\n <Trans i18nKey=\"dashboard.empty.add-visualization-body\">\n Select a data source and then query and visualize your data with charts, stats and tables or create\n lists, markdowns and other widgets.\n </Trans>\n </Text>\n </Box>\n <Button\n size=\"lg\"\n icon=\"plus\"\n data-testid={selectors.pages.AddDashboard.itemButton('Create new panel button')}\n onClick={onAddVisualization}\n disabled={!onAddVisualization}\n >\n <Trans i18nKey=\"dashboard.empty.add-visualization-button\">Add visualization</Trans>\n </Button>\n </Stack>\n </Box>\n {config.featureToggles.dashboardLibrary && dashboardLibraryDatasourceUid && <DashboardLibrarySection />}\n <Stack direction={{ xs: 'column', md: 'row' }} wrap=\"wrap\" gap={4}>\n <Box borderRadius=\"lg\" borderColor=\"strong\" borderStyle=\"dashed\" padding={3} flex={1}>\n <Stack direction=\"column\" alignItems=\"center\" gap={1}>\n <Text element=\"h3\" textAlignment=\"center\" weight=\"medium\">\n <Trans i18nKey=\"dashboard.empty.add-library-panel-header\">Import panel</Trans>\n </Text>\n <Box marginBottom={2}>\n <Text element=\"p\" textAlignment=\"center\" color=\"secondary\">\n <Trans i18nKey=\"dashboard.empty.add-library-panel-body\">\n Add visualizations that are shared with other dashboards.\n </Trans>\n </Text>\n </Box>\n <Button\n icon=\"plus\"\n fill=\"outline\"\n data-testid={selectors.pages.AddDashboard.itemButton('Add a panel from the panel library button')}\n onClick={onAddLibraryPanel}\n disabled={!onAddLibraryPanel}\n >\n <Trans i18nKey=\"dashboard.empty.add-library-panel-button\">Add library panel</Trans>\n </Button>\n </Stack>\n </Box>\n <Box borderRadius=\"lg\" borderColor=\"strong\" borderStyle=\"dashed\" padding={3} flex={1}>\n <Stack direction=\"column\" alignItems=\"center\" gap={1}>\n <Text element=\"h3\" textAlignment=\"center\" weight=\"medium\">\n <Trans i18nKey=\"dashboard.empty.import-a-dashboard-header\">Import a dashboard</Trans>\n </Text>\n <Box marginBottom={2}>\n <Text element=\"p\" textAlignment=\"center\" color=\"secondary\">\n <Trans i18nKey=\"dashboard.empty.import-a-dashboard-body\">\n Import dashboards from files or{' '}\n <TextLink external href=\"https://grafana.com/grafana/dashboards/\">\n grafana.com\n </TextLink>\n .\n </Trans>\n </Text>\n </Box>\n <Button\n icon=\"upload\"\n fill=\"outline\"\n data-testid={selectors.pages.AddDashboard.itemButton('Import dashboard button')}\n onClick={onImportDashboard}\n disabled={!onImportDashboard}\n >\n <Trans i18nKey=\"dashboard.empty.import-dashboard-button\">Import dashboard</Trans>\n </Button>\n </Stack>\n </Box>\n </Stack>\n </Stack>\n </div>\n </Stack>\n );\n};\n\nexport interface Props {\n dashboard: DashboardModel | DashboardScene;\n canCreate: boolean;\n}\n\n// We pass the default empty UI through to the extension point so that the extension can conditionally render it if needed.\n// For example, an extension might want to render custom UI for a specific experiment cohort, and the default UI for everyone else.\nconst DashboardEmpty = (props: Props) => {\n const isReadOnlyRepo = useIsReadOnlyRepo(props);\n const onAddVisualization = useOnAddVisualization({ ...props, isReadOnlyRepo });\n const onAddLibraryPanel = useOnAddLibraryPanel({ ...props, isReadOnlyRepo });\n const onImportDashboard = useOnImportDashboard({ ...props, isReadOnlyRepo });\n\n return (\n <DashboardEmptyExtensionPoint\n renderDefaultUI={useCallback(\n () => (\n <InternalDashboardEmpty\n onAddVisualization={onAddVisualization}\n onAddLibraryPanel={onAddLibraryPanel}\n onImportDashboard={onImportDashboard}\n />\n ),\n [onAddVisualization, onAddLibraryPanel, onImportDashboard]\n )}\n onAddVisualization={onAddVisualization}\n onAddLibraryPanel={onAddLibraryPanel}\n onImportDashboard={onImportDashboard}\n />\n );\n};\n\nexport default DashboardEmpty;\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n wrapper: css({\n label: 'dashboard-empty-wrapper',\n flexDirection: 'column',\n gap: theme.spacing.gridSize * 4,\n paddingTop: theme.spacing(2),\n\n [theme.breakpoints.up('sm')]: {\n paddingTop: theme.spacing(12),\n },\n }),\n wrapperMaxWidth: css({\n maxWidth: '890px',\n }),\n };\n}\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { DynamicTable, DynamicTableProps } from './DynamicTable';\n\nexport type DynamicTableWithGuidelinesProps<T> = Omit<DynamicTableProps<T>, 'renderPrefixHeader, renderPrefixCell'>;\n\n// DynamicTable, but renders visual guidelines on the left, for larger screen widths\nexport const DynamicTableWithGuidelines = <T extends object>({\n renderExpandedContent,\n ...props\n}: DynamicTableWithGuidelinesProps<T>) => {\n const styles = useStyles2(getStyles);\n return (\n <DynamicTable\n renderExpandedContent={\n renderExpandedContent\n ? (item, index, items) => (\n <>\n {!(index === items.length - 1) && <div className={cx(styles.contentGuideline, styles.guideline)} />}\n {renderExpandedContent(item, index, items)}\n </>\n )\n : undefined\n }\n renderPrefixHeader={() => (\n <div className={styles.relative}>\n <div className={cx(styles.headerGuideline, styles.guideline)} />\n </div>\n )}\n renderPrefixCell={(_, index, items) => (\n <div className={styles.relative}>\n <div className={cx(styles.topGuideline, styles.guideline)} />\n {!(index === items.length - 1) && <div className={cx(styles.bottomGuideline, styles.guideline)} />}\n </div>\n )}\n {...props}\n />\n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n relative: css({\n position: 'relative',\n height: '100%',\n }),\n guideline: css({\n left: '-19px',\n borderLeft: `1px solid ${theme.colors.border.weak}`,\n position: 'absolute',\n\n [theme.breakpoints.down('md')]: {\n display: 'none',\n },\n }),\n topGuideline: css({\n width: '18px',\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n top: 0,\n bottom: '50%',\n }),\n bottomGuideline: css({\n top: '50%',\n bottom: 0,\n }),\n contentGuideline: css({\n top: 0,\n bottom: 0,\n left: '-49px !important',\n }),\n headerGuideline: css({\n top: '-17px',\n bottom: 0,\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport { FormEvent, useCallback, useState } from 'react';\nimport * as React from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { ComponentSize } from '../../types/size';\nimport { trimFileName } from '../../utils/file';\nimport { getButtonStyles } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\n\nexport interface Props {\n /** Callback function to handle uploaded file */\n onFileUpload: (event: FormEvent<HTMLInputElement>) => void;\n /** Accepted file extensions */\n accept?: string;\n /** Overwrite or add to style */\n className?: string;\n /** Button size */\n size?: ComponentSize;\n /** Show the file name */\n showFileName?: boolean;\n}\n\n/**\n * A button-styled input that triggers file upload popup. Button text and accepted file extensions can be customized via `label` and `accepted` props respectively.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-fileupload--docs\n */\nexport const FileUpload = ({\n onFileUpload,\n className,\n children = 'Upload file',\n accept = '*',\n size = 'md',\n showFileName,\n}: React.PropsWithChildren<Props>) => {\n const style = useStyles2(getStyles(size));\n const [fileName, setFileName] = useState('');\n const id = uuidv4();\n\n const onChange = useCallback(\n (event: FormEvent<HTMLInputElement>) => {\n const file = event.currentTarget?.files?.[0];\n if (file) {\n setFileName(file.name ?? '');\n }\n onFileUpload(event);\n },\n [onFileUpload]\n );\n\n return (\n <>\n <input\n type=\"file\"\n id={id}\n className={style.fileUpload}\n onChange={onChange}\n multiple={false}\n accept={accept}\n data-testid={selectors.components.FileUpload.inputField}\n />\n <label htmlFor={id} className={cx(style.labelWrapper, className)}>\n <Icon name=\"upload\" className={style.icon} />\n {children}\n </label>\n\n {showFileName && fileName && (\n <span\n aria-label={t('grafana-ui.file-upload.file-name', 'File name')}\n className={style.fileName}\n data-testid={selectors.components.FileUpload.fileNameSpan}\n >\n {trimFileName(fileName)}\n </span>\n )}\n </>\n );\n};\n\nconst getStyles = (size: ComponentSize) => (theme: GrafanaTheme2) => {\n const buttonStyles = getButtonStyles({ theme, variant: 'primary', size, iconOnly: false });\n const focusStyle = getFocusStyles(theme);\n\n return {\n fileUpload: css({\n height: '0.1px',\n opacity: '0',\n overflow: 'hidden',\n position: 'absolute',\n width: '0.1px',\n zIndex: -1,\n '&:focus + label': focusStyle,\n '&:focus-visible + label': focusStyle,\n }),\n labelWrapper: buttonStyles.button,\n icon: buttonStyles.icon,\n fileName: css({\n marginLeft: theme.spacing(0.5),\n }),\n };\n};\n","import { AnnotationEvent } from '../types/annotations';\nimport { DataFrame } from '../types/dataFrame';\n\nimport { BusEventBase, BusEventWithPayload } from './types';\n\n/**\n * When hovering over an element this will identify\n *\n * For performance reasons, this object will usually be mutated between updates. This\n * will avoid creating new objects for events that fire frequently (ie each mouse pixel)\n *\n * @alpha\n */\nexport interface DataHoverPayload {\n data?: DataFrame; // source data\n rowIndex?: number; // the hover row\n columnIndex?: number; // the hover column\n dataId?: string; // identifying string to correlate data between publishers and subscribers\n\n // When dragging, this will capture the point when the mouse was down\n point: Record<string, number | null>; // { time: 5678, lengthft: 456 } // each axis|scale gets a value\n down?: Record<string, number | null>;\n}\n\n/** @alpha */\nexport class DataHoverEvent extends BusEventWithPayload<DataHoverPayload> {\n static type = 'data-hover';\n}\n\n/** @alpha */\nexport class DataHoverClearEvent extends BusEventBase {\n static type = 'data-hover-clear';\n}\n\n/** @alpha */\nexport class DataSelectEvent extends BusEventWithPayload<DataHoverPayload> {\n static type = 'data-select';\n}\n\n/** @alpha */\nexport class AnnotationChangeEvent extends BusEventWithPayload<Partial<AnnotationEvent>> {\n static type = 'annotation-event';\n}\n\n// Loaded the first time a dashboard is loaded (not on every render)\nexport type DashboardLoadedEventPayload<T> = {\n dashboardId: string; // eeep, this should be UID\n orgId?: number;\n userId?: number;\n grafanaVersion?: string;\n queries: Record<string, T[]>;\n};\n\n/** @alpha */\nexport class DashboardLoadedEvent<T> extends BusEventWithPayload<DashboardLoadedEventPayload<T>> {\n static type = 'dashboard-loaded';\n}\nexport class DataSourceUpdatedSuccessfully extends BusEventBase {\n static type = 'datasource-updated-successfully';\n}\nexport class DataSourceTestSucceeded extends BusEventBase {\n static type = 'datasource-test-succeeded';\n}\n\nexport class DataSourceTestFailed extends BusEventBase {\n static type = 'datasource-test-failed';\n}\n\nexport class SetPanelAttentionEvent extends BusEventWithPayload<{ panelId: string | number }> {\n static type = 'set-panel-attention';\n}\n","// This needs to be in its own file to avoid circular references\n\n// Builtin Predicates\n// not using 'any' and 'never' since they are reserved keywords\nexport enum MatcherID {\n anyMatch = 'anyMatch', // checks children\n allMatch = 'allMatch', // checks children\n invertMatch = 'invertMatch', // checks child\n alwaysMatch = 'alwaysMatch',\n neverMatch = 'neverMatch',\n}\n\nexport enum FieldMatcherID {\n // Specific Types\n numeric = 'numeric',\n time = 'time', // Can be multiple times\n first = 'first',\n firstTimeField = 'firstTimeField', // Only the first time field\n\n // With arguments\n byType = 'byType',\n byTypes = 'byTypes',\n byName = 'byName',\n byNames = 'byNames',\n byRegexp = 'byRegexp',\n byRegexpOrNames = 'byRegexpOrNames',\n byFrameRefID = 'byFrameRefID',\n byValue = 'byValue',\n // byIndex = 'byIndex',\n // byLabel = 'byLabel',\n}\n\n/**\n * Field name matchers\n */\nexport enum FrameMatcherID {\n byName = 'byName',\n byRefId = 'byRefId',\n byIndex = 'byIndex',\n}\n\n/**\n * @public\n */\nexport enum ValueMatcherID {\n regex = 'regex',\n isNull = 'isNull',\n isNotNull = 'isNotNull',\n greater = 'greater',\n greaterOrEqual = 'greaterOrEqual',\n lower = 'lower',\n lowerOrEqual = 'lowerOrEqual',\n equal = 'equal',\n notEqual = 'notEqual',\n substring = 'substring',\n notSubstring = 'notSubstring',\n between = 'between',\n}\n","import { css } from '@emotion/css';\nimport { Suspense, lazy, useCallback, useMemo, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Modal, useStyles2 } from '@grafana/ui';\nimport { RulerGrafanaRuleDTO } from 'app/types/unified-alerting-dto';\n\nconst AnnotationsStateHistory = lazy(() => import('../components/rules/state-history/StateHistory'));\nconst LokiStateHistory = lazy(() => import('../components/rules/state-history/LokiStateHistory'));\n\nexport enum StateHistoryImplementation {\n Loki = 'loki',\n Annotations = 'annotations',\n}\n\nfunction useStateHistoryModal() {\n const [showModal, setShowModal] = useState<boolean>(false);\n const [rule, setRule] = useState<RulerGrafanaRuleDTO | undefined>();\n\n const styles = useStyles2(getStyles);\n\n // can be \"loki\", \"multiple\" or \"annotations\"\n const stateHistoryBackend = config.unifiedAlerting.stateHistory?.backend;\n // can be \"loki\" or \"annotations\"\n const stateHistoryPrimary = config.unifiedAlerting.stateHistory?.primary;\n\n // if \"loki\" is either the backend or the primary, show the new state history implementation\n const usingNewAlertStateHistory = [stateHistoryBackend, stateHistoryPrimary].some(\n (implementation) => implementation === StateHistoryImplementation.Loki\n );\n const implementation = usingNewAlertStateHistory\n ? StateHistoryImplementation.Loki\n : StateHistoryImplementation.Annotations;\n\n const dismissModal = useCallback(() => {\n setRule(undefined);\n setShowModal(false);\n }, []);\n\n const openModal = useCallback((rule: RulerGrafanaRuleDTO) => {\n setRule(rule);\n setShowModal(true);\n }, []);\n\n const StateHistoryModal = useMemo(() => {\n if (!rule) {\n return null;\n }\n\n return (\n <Modal\n isOpen={showModal}\n onDismiss={dismissModal}\n closeOnBackdropClick={true}\n closeOnEscape={true}\n title={t('alerting.use-state-history-modal.state-history-modal.title-state-history', 'State history')}\n className={styles.modal}\n contentClassName={styles.modalContent}\n >\n <Suspense fallback={'Loading...'}>\n {implementation === StateHistoryImplementation.Loki && <LokiStateHistory ruleUID={rule.grafana_alert.uid} />}\n {implementation === StateHistoryImplementation.Annotations && (\n <AnnotationsStateHistory ruleUID={rule.grafana_alert.uid ?? ''} />\n )}\n </Suspense>\n </Modal>\n );\n }, [rule, showModal, dismissModal, implementation, styles]);\n\n return {\n StateHistoryModal,\n showStateHistoryModal: openModal,\n hideStateHistoryModal: dismissModal,\n };\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n modal: css({\n width: '80%',\n height: '80%',\n minWidth: '800px',\n }),\n modalContent: css({\n height: '100%',\n width: '100%',\n padding: theme.spacing(2),\n }),\n});\n\nexport { useStateHistoryModal };\n","import { css } from '@emotion/css';\nimport { Draggable } from '@hello-pangea/dnd';\nimport { ChangeEventHandler } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Icon, IconButton, Input, Stack, useStyles2 } from '@grafana/ui';\n\nexport interface VariableStaticOptionsFormItem {\n id: string;\n label: string;\n value: string;\n}\n\ninterface VariableStaticOptionsFormItemEditorProps {\n item: VariableStaticOptionsFormItem;\n index: number;\n onChange: (item: VariableStaticOptionsFormItem) => void;\n onRemove: (item: VariableStaticOptionsFormItem) => void;\n}\n\nexport function VariableStaticOptionsFormItemEditor({\n item,\n index,\n onChange,\n onRemove,\n}: VariableStaticOptionsFormItemEditorProps) {\n const styles = useStyles2(getStyles);\n\n const handleValueChange: ChangeEventHandler<HTMLInputElement> = (evt) => {\n if (item.value !== evt.currentTarget.value) {\n onChange({ ...item, value: evt.currentTarget.value });\n }\n };\n\n const handleLabelChange: ChangeEventHandler<HTMLInputElement> = (evt) => {\n if (item.label !== evt.currentTarget.value) {\n onChange({ ...item, label: evt.currentTarget.value });\n }\n };\n\n const handleRemove = () => onRemove(item);\n\n return (\n <Draggable draggableId={item.id} index={index}>\n {(draggableProvided) => (\n <tr\n ref={draggableProvided.innerRef}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.StaticOptionsEditor.row}\n {...draggableProvided.draggableProps}\n >\n <td>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.StaticOptionsEditor.moveButton}\n {...draggableProvided.dragHandleProps}\n >\n <Icon\n title={t('variables.static-options.drag-and-drop', 'Drag and drop to reorder')}\n name=\"draggabledots\"\n size=\"lg\"\n className={styles.dragIcon}\n />\n </Stack>\n </td>\n <td>\n <Input\n value={item.value}\n placeholder={t('variables.static-options.value-placeholder', 'Value')}\n onChange={handleValueChange}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.StaticOptionsEditor.valueInput}\n />\n </td>\n <td>\n <Input\n value={item.label}\n placeholder={t('variables.static-options.label-placeholder', 'Defaults to value')}\n onChange={handleLabelChange}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.StaticOptionsEditor.labelInput}\n />\n </td>\n <td>\n <Stack direction=\"row\" alignItems=\"center\">\n <IconButton\n name=\"trash-alt\"\n aria-label={t('variables.static-options.remove-option-button-label', 'Remove option')}\n onClick={handleRemove}\n data-testid={selectors.pages.Dashboard.Settings.Variables.Edit.StaticOptionsEditor.deleteButton}\n />\n </Stack>\n </td>\n </tr>\n )}\n </Draggable>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n dragIcon: css({\n cursor: 'grab',\n\n // create a focus ring around the whole row when the drag handle is tab-focused\n // needs position: relative on the drag row to work correctly\n '&:focus-visible&:after': {\n bottom: 0,\n content: '\"\"',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n outline: `2px solid ${theme.colors.primary.main}`,\n outlineOffset: '-2px',\n },\n }),\n});\n","import { css } from '@emotion/css';\nimport { DragDropContext, Droppable, DropResult } from '@hello-pangea/dnd';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { useStyles2 } from '@grafana/ui';\n\nimport {\n VariableStaticOptionsFormItem,\n VariableStaticOptionsFormItemEditor,\n} from './VariableStaticOptionsFormItemEditor';\n\ninterface VariableStaticOptionsFormProps {\n items: VariableStaticOptionsFormItem[];\n onChange: (items: VariableStaticOptionsFormItem[]) => void;\n}\n\nexport function VariableStaticOptionsFormItems({ items, onChange }: VariableStaticOptionsFormProps) {\n const styles = useStyles2(getStyles);\n\n const handleReorder = (result: DropResult) => {\n if (!result || !result.destination) {\n return;\n }\n\n const startIdx = result.source.index;\n const endIdx = result.destination.index;\n\n if (startIdx === endIdx) {\n return;\n }\n\n const newItems = [...items];\n const [removedItem] = newItems.splice(startIdx, 1);\n newItems.splice(endIdx, 0, removedItem);\n onChange(newItems);\n };\n\n const handleChange = (item: VariableStaticOptionsFormItem) => {\n const idx = items.findIndex((currentItem) => currentItem.id === item.id);\n\n if (idx === -1) {\n return;\n }\n\n const newOptions = [...items];\n newOptions[idx] = item;\n onChange(newOptions);\n };\n\n const handleRemove = (item: VariableStaticOptionsFormItem) => {\n const newOptions = items.filter((currentItem) => currentItem.id !== item.id);\n onChange(newOptions);\n };\n\n return (\n <table className={styles.table}>\n <thead>\n <tr>\n <th className={styles.headerIconColumn} />\n <th className={styles.headerInputColumn}>\n <Trans i18nKey=\"variables.static-options.value-header\">Value</Trans>\n </th>\n <th className={styles.headerInputColumn}>\n <Trans i18nKey=\"variables.static-options.label-header\">Display text</Trans>\n </th>\n <th className={styles.headerIconColumn} />\n </tr>\n </thead>\n <DragDropContext onDragEnd={handleReorder}>\n <Droppable droppableId=\"static-options-list\" direction=\"vertical\">\n {(droppableProvided) => (\n <tbody ref={droppableProvided.innerRef} {...droppableProvided.droppableProps}>\n {items.map((item, idx) => (\n <VariableStaticOptionsFormItemEditor\n item={item}\n index={idx}\n onChange={handleChange}\n onRemove={handleRemove}\n key={item.id}\n />\n ))}\n {droppableProvided.placeholder}\n </tbody>\n )}\n </Droppable>\n </DragDropContext>\n </table>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n table: css({\n 'tbody tr': css({\n position: 'relative',\n }),\n\n 'tbody tr:hover': css({\n background: theme.colors.action.hover,\n }),\n\n 'th, td': {\n padding: theme.spacing(1),\n width: '49%',\n },\n\n 'th:first-child, td:first-child, th:last-child, td:last-child': css({\n width: '1%',\n }),\n }),\n headerIconColumn: css({\n width: '1%',\n }),\n headerInputColumn: css({\n width: '49%',\n }),\n});\n","import { css } from '@emotion/css';\nimport { useEffect, useState, useRef, useCallback, useImperativeHandle, forwardRef } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { VariableValueOption } from '@grafana/scenes';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { VariableStaticOptionsFormAddButton } from './VariableStaticOptionsFormAddButton';\nimport { VariableStaticOptionsFormItem } from './VariableStaticOptionsFormItemEditor';\nimport { VariableStaticOptionsFormItems } from './VariableStaticOptionsFormItems';\n\ninterface VariableStaticOptionsFormProps {\n options: VariableValueOption[];\n onChange: (options: VariableValueOption[]) => void;\n\n allowEmptyValue?: boolean;\n isInModal?: boolean;\n}\n\nexport interface VariableStaticOptionsFormRef {\n addItem: () => void;\n}\n\nexport const VariableStaticOptionsForm = forwardRef<VariableStaticOptionsFormRef, VariableStaticOptionsFormProps>(\n function ({ options, onChange, allowEmptyValue, isInModal = false }: VariableStaticOptionsFormProps, ref) {\n const styles = useStyles2(getStyles, isInModal);\n\n // Whenever the form is updated, we want to ignore the next update from the parent component.\n // This is because the parent component will update the options, and we don't want to update the items again.\n // This is a hack to prevent the form from updating twice and losing items and IDs.\n // Alternatively, we could maintain a list of emitted items and compare the new options to it, but this is less performant.\n const ignoreNextUpdate = useRef<boolean>(false);\n\n const mapOption = useCallback(\n (option: VariableValueOption) => ({\n label: option.label,\n value: String(option.value),\n id: uuidv4(),\n }),\n []\n );\n\n const [items, setItems] = useState<VariableStaticOptionsFormItem[]>(\n options.length ? options.map(mapOption) : [createEmptyItem()]\n );\n\n useEffect(() => {\n if (!ignoreNextUpdate.current) {\n setItems(\n options.length\n ? options.map((option) => ({\n label: option.label,\n value: String(option.value),\n id: uuidv4(),\n }))\n : [createEmptyItem()]\n );\n }\n\n ignoreNextUpdate.current = false;\n }, [options]);\n\n const updateItems = useCallback(\n (items: VariableStaticOptionsFormItem[]) => {\n setItems(items);\n ignoreNextUpdate.current = true;\n onChange(\n items.reduce<VariableValueOption[]>((acc, item) => {\n const value = item.value.trim();\n\n if (!allowEmptyValue && !value) {\n return acc;\n }\n\n const label = item.label.trim();\n\n if (!label && !value) {\n return acc;\n }\n\n acc.push({\n label: label ? label : value,\n value,\n });\n\n return acc;\n }, [])\n );\n },\n [allowEmptyValue, onChange]\n );\n\n const handleAdd = useCallback(() => setItems([...items, createEmptyItem()]), [items]);\n\n useImperativeHandle(ref, () => ({ addItem: handleAdd }), [handleAdd]);\n\n return (\n <div className={styles.container}>\n <VariableStaticOptionsFormItems items={items} onChange={updateItems} />\n {!isInModal && (\n <div>\n <VariableStaticOptionsFormAddButton onAdd={handleAdd} />\n </div>\n )}\n </div>\n );\n }\n);\n\nVariableStaticOptionsForm.displayName = 'VariableStaticOptionsForm';\n\nconst getStyles = (theme: GrafanaTheme2, isInModal: boolean) => ({\n container: css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n width: '100%',\n maxWidth: theme.spacing(60),\n ...(isInModal\n ? {\n maxWidth: '100%',\n\n // Simulate sticky modal buttons\n maxHeight: 'calc(80vh - 170px)',\n overflow: 'auto',\n minHeight: theme.spacing(5),\n }\n : {}),\n }),\n});\n\nfunction createEmptyItem(): VariableStaticOptionsFormItem {\n return {\n label: '',\n value: '',\n id: uuidv4(),\n };\n}\n","import { createContext, ReactNode, useCallback, useContext, useEffect, useState, useMemo } from 'react';\nimport { useLocalStorage } from 'react-use';\n\nimport { PluginExtensionPoints, store } from '@grafana/data';\nimport { getAppEvents, reportInteraction, usePluginLinks, locationService } from '@grafana/runtime';\nimport { ExtensionPointPluginMeta, getExtensionPointPluginMeta } from 'app/features/plugins/extensions/utils';\nimport { CloseExtensionSidebarEvent, OpenExtensionSidebarEvent, ToggleExtensionSidebarEvent } from 'app/types/events';\n\nimport { DEFAULT_EXTENSION_SIDEBAR_WIDTH, MAX_EXTENSION_SIDEBAR_WIDTH } from './ExtensionSidebar';\n\nexport const EXTENSION_SIDEBAR_DOCKED_LOCAL_STORAGE_KEY = 'grafana.navigation.extensionSidebarDocked';\nexport const EXTENSION_SIDEBAR_WIDTH_LOCAL_STORAGE_KEY = 'grafana.navigation.extensionSidebarWidth';\nconst PERMITTED_EXTENSION_SIDEBAR_PLUGINS = [\n 'grafana-investigations-app',\n 'grafana-assistant-app',\n 'grafana-dash-app',\n // The docs plugin ID is transitioning from grafana-grafanadocsplugin-app to grafana-pathfinder-app.\n // Support both until that migration is complete.\n 'grafana-grafanadocsplugin-app',\n 'grafana-pathfinder-app',\n];\n\nexport type ExtensionSidebarContextType = {\n /**\n * Whether the extension sidebar is open.\n */\n isOpen: boolean;\n /**\n * The id of the component that is currently docked in the sidebar. If the id is undefined, nothing will be rendered.\n */\n dockedComponentId: string | undefined;\n /**\n * Sest the id of the component that will be rendered in the extension sidebar.\n */\n setDockedComponentId: (componentId: string | undefined) => void;\n /**\n * A map of all components that are available for the extension point.\n */\n availableComponents: ExtensionPointPluginMeta;\n /**\n * The width of the extension sidebar.\n */\n extensionSidebarWidth: number;\n /**\n * Set the width of the extension sidebar.\n */\n setExtensionSidebarWidth: (width: number) => void;\n\n props?: Record<string, unknown>;\n};\n\nexport const ExtensionSidebarContext = createContext<ExtensionSidebarContextType>({\n isOpen: false,\n dockedComponentId: undefined,\n setDockedComponentId: () => {},\n availableComponents: new Map(),\n extensionSidebarWidth: DEFAULT_EXTENSION_SIDEBAR_WIDTH,\n setExtensionSidebarWidth: () => {},\n});\n\nexport function useExtensionSidebarContext() {\n return useContext(ExtensionSidebarContext);\n}\n\ninterface ExtensionSidebarContextProps {\n children: ReactNode;\n}\n\nexport const ExtensionSidebarContextProvider = ({ children }: ExtensionSidebarContextProps) => {\n const [props, setProps] = useState<Record<string, unknown> | undefined>(undefined);\n const storedDockedPluginId = store.get(EXTENSION_SIDEBAR_DOCKED_LOCAL_STORAGE_KEY);\n const [extensionSidebarWidth, setExtensionSidebarWidth] = useLocalStorage(\n EXTENSION_SIDEBAR_WIDTH_LOCAL_STORAGE_KEY,\n DEFAULT_EXTENSION_SIDEBAR_WIDTH\n );\n\n const [currentPath, setCurrentPath] = useState(locationService.getLocation().pathname);\n\n useEffect(() => {\n const subscription = locationService.getLocationObservable().subscribe((location) => {\n setCurrentPath(location.pathname);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, []);\n\n // these links are needed to conditionally render the extension component\n // that means, a plugin would need to register both, a link and a component to\n // `grafana/extension-sidebar/v0-alpha` and the link's `configure` method would control\n // whether the component is rendered or not\n const { links, isLoading } = usePluginLinks({\n extensionPointId: PluginExtensionPoints.ExtensionSidebar,\n context: {\n path: currentPath,\n },\n });\n\n // get all components for this extension point, but only for the permitted plugins\n // if the extension sidebar is not enabled, we will return an empty map\n const availableComponents = useMemo(\n () =>\n new Map(\n Array.from(getExtensionPointPluginMeta(PluginExtensionPoints.ExtensionSidebar).entries()).filter(\n ([pluginId, pluginMeta]) =>\n PERMITTED_EXTENSION_SIDEBAR_PLUGINS.includes(pluginId) &&\n links.some(\n (link) =>\n link.pluginId === pluginId &&\n pluginMeta.addedComponents.some((component) => component.title === link.title)\n )\n )\n ),\n [links]\n );\n\n // check if the stored docked component is still available\n let defaultDockedComponentId: string | undefined;\n if (storedDockedPluginId) {\n const dockedMeta = getComponentMetaFromComponentId(storedDockedPluginId);\n if (dockedMeta) {\n defaultDockedComponentId = storedDockedPluginId;\n }\n }\n const [dockedComponentId, setDockedComponentId] = useState<string | undefined>(defaultDockedComponentId);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (dockedComponentId) {\n const dockedMeta = getComponentMetaFromComponentId(dockedComponentId);\n if (dockedMeta) {\n const plugin = availableComponents.get(dockedMeta.pluginId);\n if (!plugin || !plugin.addedComponents.some((c) => c.title === dockedMeta.componentTitle)) {\n setDockedComponentId(undefined);\n }\n } else {\n // no component found, so we clear the docked component id\n setDockedComponentId(undefined);\n }\n }\n }, [isLoading, availableComponents, dockedComponentId]);\n\n const setDockedComponentWithProps = useCallback(\n (componentId: string | undefined, props?: Record<string, unknown>) => {\n setProps(props);\n setDockedComponentId(componentId);\n },\n [setDockedComponentId]\n );\n\n useEffect(() => {\n // handler to open the extension sidebar from plugins. this is done with the `helpers.openSidebar` function\n const openSidebarHandler = (event: OpenExtensionSidebarEvent) => {\n if (\n event.payload.pluginId &&\n event.payload.componentTitle &&\n PERMITTED_EXTENSION_SIDEBAR_PLUGINS.includes(event.payload.pluginId) &&\n availableComponents\n .get(event.payload.pluginId)\n ?.addedComponents.some((component) => component.title === event.payload.componentTitle)\n ) {\n setDockedComponentWithProps(\n JSON.stringify({ pluginId: event.payload.pluginId, componentTitle: event.payload.componentTitle }),\n event.payload.props\n );\n }\n };\n\n const closeSidebarHandler = () => {\n setDockedComponentId(undefined);\n };\n\n const toggleSidebarHandler = (event: ToggleExtensionSidebarEvent) => {\n const currentComponentMeta = getComponentMetaFromComponentId(dockedComponentId ?? '');\n const isCurrentlyOpen =\n currentComponentMeta?.pluginId === event.payload.pluginId &&\n currentComponentMeta?.componentTitle === event.payload.componentTitle;\n\n if (isCurrentlyOpen) {\n closeSidebarHandler();\n } else {\n openSidebarHandler(event);\n }\n };\n\n const openSubscription = getAppEvents().subscribe(OpenExtensionSidebarEvent, openSidebarHandler);\n const closeSubscription = getAppEvents().subscribe(CloseExtensionSidebarEvent, closeSidebarHandler);\n const toggleSubscription = getAppEvents().subscribe(ToggleExtensionSidebarEvent, toggleSidebarHandler);\n return () => {\n openSubscription.unsubscribe();\n closeSubscription.unsubscribe();\n toggleSubscription.unsubscribe();\n };\n }, [setDockedComponentWithProps, availableComponents, dockedComponentId]);\n\n // update the stored docked component id when it changes\n useEffect(() => {\n // wait for the plugin links to be loaded before we update the stored docked component id\n if (isLoading) {\n return;\n }\n const componentMeta = getComponentMetaFromComponentId(dockedComponentId ?? '');\n const storedComponentId = store.get(EXTENSION_SIDEBAR_DOCKED_LOCAL_STORAGE_KEY);\n const storedComponentMeta = getComponentMetaFromComponentId(storedComponentId ?? '');\n const opened = dockedComponentId !== undefined;\n // we either want to track opened events, or closed events when we have a previous component\n if (opened || storedComponentMeta) {\n reportInteraction('grafana_extension_sidebar_changed', {\n opened: opened,\n componentTitle: (opened ? componentMeta : storedComponentMeta)?.componentTitle,\n pluginId: (opened ? componentMeta : storedComponentMeta)?.pluginId,\n fromLocalstorage: storedComponentId === dockedComponentId,\n });\n }\n if (dockedComponentId) {\n store.set(EXTENSION_SIDEBAR_DOCKED_LOCAL_STORAGE_KEY, dockedComponentId);\n } else {\n store.delete(EXTENSION_SIDEBAR_DOCKED_LOCAL_STORAGE_KEY);\n }\n }, [dockedComponentId, isLoading]);\n\n return (\n <ExtensionSidebarContext.Provider\n value={{\n isOpen: dockedComponentId !== undefined,\n dockedComponentId,\n setDockedComponentId: (componentId) => setDockedComponentWithProps(componentId, undefined),\n availableComponents,\n extensionSidebarWidth: Math.min(\n extensionSidebarWidth ?? DEFAULT_EXTENSION_SIDEBAR_WIDTH,\n MAX_EXTENSION_SIDEBAR_WIDTH\n ),\n setExtensionSidebarWidth,\n props,\n }}\n >\n {children}\n </ExtensionSidebarContext.Provider>\n );\n};\n\nexport function getComponentIdFromComponentMeta(pluginId: string, componentTitle: string) {\n return JSON.stringify({ pluginId, componentTitle });\n}\n\nexport function getComponentMetaFromComponentId(\n componentId: string\n): { pluginId: string; componentTitle: string } | undefined {\n try {\n const parsed = JSON.parse(componentId);\n if (\n typeof parsed === 'object' &&\n parsed !== null &&\n 'pluginId' in parsed &&\n 'componentTitle' in parsed &&\n typeof parsed.pluginId === 'string' &&\n typeof parsed.componentTitle === 'string'\n ) {\n return parsed;\n }\n return undefined;\n } catch (error) {\n return undefined;\n }\n}\n\n// The interactive learning plugin ID is transitioning from grafana-grafanadocsplugin-app to grafana-pathfinder-app.\n// Support both until that migration is complete.\n// Prioritize the new plugin ID (grafana-pathfinder-app).\nexport function getInteractiveLearningPluginId(availableComponents: ExtensionPointPluginMeta): string | undefined {\n if (availableComponents.has('grafana-pathfinder-app')) {\n return 'grafana-pathfinder-app';\n }\n\n if (availableComponents.has('grafana-grafanadocsplugin-app')) {\n return 'grafana-grafanadocsplugin-app';\n }\n\n return undefined;\n}\n","import { dateTime, locationUtil, TimeRange, urlUtil, rangeUtil } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { createShortLink } from 'app/core/utils/shortLinks';\nimport { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';\n\nimport { contextSrv } from '../../../../core/services/context_srv';\nimport { PanelModel } from '../../state/PanelModel';\n\nexport interface BuildParamsArgs {\n useCurrentTimeRange: boolean;\n selectedTheme?: string;\n panelId?: string;\n timeFrom?: string;\n search?: string;\n range?: TimeRange;\n orgId?: number;\n}\n\nexport function buildParams({\n useCurrentTimeRange,\n selectedTheme,\n panelId,\n timeFrom,\n search = window.location.search,\n range = getTimeSrv().timeRange(),\n orgId = contextSrv.user.orgId,\n}: BuildParamsArgs): URLSearchParams {\n const searchParams = new URLSearchParams(search);\n\n // Use panel's relative time if it's set\n if (timeFrom) {\n const { from, to } = rangeUtil.describeTextRange(timeFrom);\n searchParams.set('from', from);\n searchParams.set('to', to);\n } else {\n searchParams.set('from', String(range.from.valueOf()));\n searchParams.set('to', String(range.to.valueOf()));\n }\n searchParams.set('orgId', String(orgId));\n\n if (!useCurrentTimeRange) {\n searchParams.delete('from');\n searchParams.delete('to');\n }\n\n if (selectedTheme !== 'current') {\n searchParams.set('theme', selectedTheme!);\n }\n\n if (panelId && !searchParams.has('editPanel')) {\n searchParams.set('viewPanel', panelId);\n }\n\n // Token is unique to the authenticated identity and should not be shared with the URL,\n // so we are stripping it from the query params as a safety measure.\n searchParams.delete('auth_token');\n\n // The shareView param is used to indicate that the sharing modal is open and should never be included in the URL\n searchParams.delete('shareView');\n\n return searchParams;\n}\n\nexport function buildBaseUrl() {\n let baseUrl = window.location.href;\n const queryStart = baseUrl.indexOf('?');\n\n if (queryStart !== -1) {\n baseUrl = baseUrl.substring(0, queryStart);\n }\n\n return baseUrl;\n}\n\nexport async function buildShareUrl(\n useCurrentTimeRange: boolean,\n selectedTheme?: string,\n panel?: PanelModel,\n shortenUrl?: boolean\n) {\n const baseUrl = buildBaseUrl();\n const params = buildParams({\n useCurrentTimeRange,\n selectedTheme,\n panelId: panel?.id ? String(panel.id) : undefined,\n timeFrom: panel?.timeFrom,\n });\n const shareUrl = urlUtil.appendQueryToUrl(baseUrl, params.toString());\n if (shortenUrl) {\n return await createShortLink(shareUrl);\n }\n return shareUrl;\n}\n\nexport function buildSoloUrl(\n useCurrentTimeRange: boolean,\n dashboardUid: string,\n selectedTheme?: string,\n panelId?: string,\n timeFrom?: string,\n range?: TimeRange\n) {\n const baseUrl = buildBaseUrl();\n const params = buildParams({\n useCurrentTimeRange,\n selectedTheme,\n panelId: panelId,\n timeFrom,\n range,\n });\n\n let soloUrl = baseUrl.replace(config.appSubUrl + '/dashboard/', config.appSubUrl + '/dashboard-solo/');\n soloUrl = soloUrl.replace(config.appSubUrl + '/d/', config.appSubUrl + '/d-solo/');\n\n // For handling the case when default_home_dashboard_path is set in the grafana config\n const strippedUrl = locationUtil.stripBaseFromUrl(baseUrl);\n if (strippedUrl === '/') {\n soloUrl = `${config.appUrl}d-solo/${dashboardUid}`;\n }\n\n const editOrViewPanel = params.get('editPanel') ?? params.get('viewPanel') ?? '';\n params.set('panelId', editOrViewPanel);\n params.delete('editPanel');\n params.delete('viewPanel');\n\n return urlUtil.appendQueryToUrl(soloUrl, params.toString());\n}\n\nexport function buildImageUrl(\n useCurrentTimeRange: boolean,\n dashboardUid: string,\n selectedTheme?: string,\n panel?: PanelModel\n) {\n let soloUrl = buildSoloUrl(\n useCurrentTimeRange,\n dashboardUid,\n selectedTheme,\n panel?.id ? String(panel.id) : undefined,\n panel?.timeFrom\n );\n let imageUrl = soloUrl.replace(config.appSubUrl + '/dashboard-solo/', config.appSubUrl + '/render/dashboard-solo/');\n imageUrl = imageUrl.replace(config.appSubUrl + '/d-solo/', config.appSubUrl + '/render/d-solo/');\n imageUrl +=\n `&width=${config.rendererDefaultImageWidth}` +\n `&height=${config.rendererDefaultImageHeight}` +\n `&scale=${config.rendererDefaultImageScale}` +\n getLocalTimeZone();\n\n return imageUrl;\n}\n\nexport function buildIframeHtml(\n useCurrentTimeRange: boolean,\n dashboardUid: string,\n selectedTheme?: string,\n panelId?: string,\n timeFrom?: string,\n range?: TimeRange\n) {\n let soloUrl = buildSoloUrl(useCurrentTimeRange, dashboardUid, selectedTheme, panelId, timeFrom, range);\n return `<iframe src=\"${soloUrl}\" width=\"450\" height=\"200\" frameborder=\"0\"></iframe>`;\n}\n\nexport function getLocalTimeZone() {\n const utcOffset = '&tz=UTC' + encodeURIComponent(dateTime().format('Z'));\n\n // Older browser does not the internationalization API\n if (!window.Intl) {\n return utcOffset;\n }\n\n const dateFormat = window.Intl.DateTimeFormat();\n if (!dateFormat.resolvedOptions) {\n return utcOffset;\n }\n\n const options = dateFormat.resolvedOptions();\n if (!options.timeZone) {\n return utcOffset;\n }\n\n return '&tz=' + encodeURIComponent(options.timeZone);\n}\n\nexport const getTrackingSource = (panel?: Object | undefined) => {\n return panel ? 'panel' : 'dashboard';\n};\n\nexport const shareDashboardType: {\n [key: string]: string;\n} = {\n link: 'link',\n snapshot: 'snapshot',\n export: 'export',\n embed: 'embed',\n libraryPanel: 'library_panel',\n pdf: 'pdf',\n report: 'report',\n publicDashboard: 'public_dashboard',\n inviteUser: 'invite_user',\n image: 'image',\n};\n","import $ from 'jquery';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\n\nimport {\n DisplayValue,\n formattedValueToString,\n FieldConfig,\n ThresholdsMode,\n GAUGE_DEFAULT_MAXIMUM,\n GAUGE_DEFAULT_MINIMUM,\n GrafanaTheme2,\n FieldColorModeId,\n FALLBACK_COLOR,\n} from '@grafana/data';\nimport { VizTextDisplayOptions, VizOrientation, Threshold } from '@grafana/schema';\n\nimport { calculateFontSize } from '../../utils/measureText';\nimport { clearButtonStyles } from '../Button/Button';\n\nimport { calculateGaugeAutoProps, DEFAULT_THRESHOLDS, getFormattedThresholds } from './utils';\n\nexport interface Props {\n height: number;\n field: FieldConfig;\n showThresholdMarkers: boolean;\n showThresholdLabels: boolean;\n width: number;\n value: DisplayValue;\n text?: VizTextDisplayOptions;\n onClick?: React.MouseEventHandler<HTMLElement>;\n className?: string;\n theme: GrafanaTheme2;\n orientation?: VizOrientation;\n}\n\nexport class Gauge extends PureComponent<Props> {\n canvasElement: HTMLDivElement | null = null;\n\n static defaultProps: Partial<Props> = {\n showThresholdMarkers: true,\n showThresholdLabels: false,\n field: {\n min: 0,\n max: 100,\n thresholds: DEFAULT_THRESHOLDS,\n },\n };\n\n componentDidMount() {\n this.draw();\n }\n\n componentDidUpdate() {\n this.draw();\n }\n\n draw() {\n const { field, showThresholdLabels, showThresholdMarkers, width, height, theme, value, orientation } = this.props;\n\n const autoProps = calculateGaugeAutoProps(width, height, value.title);\n // If the gauge is in vertical layout, we need to set the width of the gauge to the height of the gauge\n const calculatedGaugeWidth = orientation === VizOrientation.Vertical ? autoProps.gaugeHeight : width;\n const dimension = Math.min(calculatedGaugeWidth, autoProps.gaugeHeight);\n const backgroundColor = theme.colors.background.secondary;\n const gaugeWidthReduceRatio = showThresholdLabels ? 1.5 : 1;\n const gaugeWidth = Math.min(dimension / 5.5, 40) / gaugeWidthReduceRatio;\n const thresholdMarkersWidth = gaugeWidth / 5;\n const text = formattedValueToString(value);\n // This not 100% accurate as I am unsure of flot's calculations here\n const valueWidthBase = Math.min(calculatedGaugeWidth, dimension * 1.3) * 0.9;\n // remove gauge & marker width (on left and right side)\n // and 10px is some padding that flot adds to the outer canvas\n const valueWidth =\n valueWidthBase -\n ((gaugeWidth + (showThresholdMarkers ? thresholdMarkersWidth : 0) + (showThresholdLabels ? 10 : 0)) * 2 + 10);\n const fontSize = this.props.text?.valueSize ?? calculateFontSize(text, valueWidth, dimension, 1, gaugeWidth * 1.7);\n const thresholdLabelFontSize = Math.max(fontSize / 2.5, 12);\n\n let min = field.min ?? GAUGE_DEFAULT_MINIMUM;\n let max = field.max ?? GAUGE_DEFAULT_MAXIMUM;\n let numeric = value.numeric;\n\n if (field.thresholds?.mode === ThresholdsMode.Percentage) {\n min = 0;\n max = 100;\n if (value.percent === undefined) {\n numeric = ((numeric - min) / (max - min)) * 100;\n } else {\n numeric = value.percent! * 100;\n }\n }\n\n const decimals = field.decimals === undefined ? 2 : field.decimals!;\n\n if (showThresholdMarkers) {\n min = +min.toFixed(decimals);\n max = +max.toFixed(decimals);\n }\n\n let thresholds: Threshold[] = [];\n\n if (field.color?.mode === FieldColorModeId.Thresholds) {\n thresholds = getFormattedThresholds(decimals, field, theme);\n } else {\n thresholds = [{ value: field.min ?? GAUGE_DEFAULT_MINIMUM, color: value.color ?? FALLBACK_COLOR }];\n }\n\n const options = {\n series: {\n gauges: {\n gauge: {\n min,\n max,\n neutralValue: field.custom?.neutral,\n background: { color: backgroundColor },\n border: { color: null },\n shadow: { show: false },\n width: gaugeWidth,\n },\n frame: { show: false },\n label: { show: false },\n layout: { margin: 0, thresholdWidth: 0, vMargin: 0 },\n cell: { border: { width: 0 } },\n threshold: {\n values: thresholds,\n label: {\n show: showThresholdLabels,\n margin: thresholdMarkersWidth + 1,\n font: { size: thresholdLabelFontSize },\n },\n show: showThresholdMarkers && thresholds.length > 1,\n width: thresholdMarkersWidth,\n },\n value: {\n color: value.color,\n formatter: () => {\n return text;\n },\n font: { size: fontSize, family: theme.typography.fontFamily },\n },\n show: true,\n },\n },\n };\n\n const plotSeries = {\n data: [[0, numeric]],\n label: value.title,\n };\n\n try {\n if (this.canvasElement) {\n $.plot(this.canvasElement, [plotSeries], options);\n }\n } catch (err) {\n console.error('Gauge rendering error', err, options, value);\n }\n }\n\n renderVisualization = () => {\n const { width, value, height, onClick, text, theme, orientation } = this.props;\n const autoProps = calculateGaugeAutoProps(width, height, value.title, orientation);\n\n // If the gauge is in vertical layout, we need to set the width of the gauge to the height of the gauge\n const gaugeWidth = orientation === VizOrientation.Vertical ? `${autoProps.gaugeHeight}px` : '100%';\n\n const gaugeElement = (\n <div\n style={{ height: `${autoProps.gaugeHeight}px`, width: gaugeWidth }}\n ref={(element) => (this.canvasElement = element)}\n />\n );\n\n return (\n <>\n {onClick ? (\n <button className={clearButtonStyles(theme)} type=\"button\" onClick={onClick}>\n {gaugeElement}\n </button>\n ) : (\n gaugeElement\n )}\n {autoProps.showLabel && (\n <div\n style={{\n textAlign: 'center',\n fontSize: text?.titleSize ?? autoProps.titleFontSize,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n position: 'relative',\n width: gaugeWidth,\n top: '-4px',\n cursor: 'default',\n }}\n >\n {value.title}\n </div>\n )}\n </>\n );\n };\n\n render() {\n return (\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n overflow: 'hidden',\n }}\n className={this.props.className}\n >\n {this.renderVisualization()}\n </div>\n );\n }\n}\n","import { css } from '@emotion/css';\nimport { useDismiss, useFloating, useInteractions } from '@floating-ui/react';\nimport { useMemo, ReactNode } from 'react';\n\nimport { ActionModel, GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { getPositioningMiddleware } from '../../utils/floating';\nimport { Portal } from '../Portal/Portal';\nimport { VizTooltipFooter } from '../VizTooltip/VizTooltipFooter';\nimport { VizTooltipWrapper } from '../VizTooltip/VizTooltipWrapper';\n\nimport { DataLinksActionsTooltipCoords } from './utils';\n\ninterface Props {\n links: LinkModel[];\n actions?: ActionModel[];\n value?: ReactNode;\n coords: DataLinksActionsTooltipCoords;\n onTooltipClose?: () => void;\n}\n\n/**\n *\n * @internal\n */\nexport const DataLinksActionsTooltip = ({ links, actions, value, coords, onTooltipClose }: Props) => {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const placement = 'right-start';\n\n // the order of middleware is important!\n const middleware = getPositioningMiddleware(placement);\n\n const virtual = useMemo(() => {\n const { clientX, clientY } = coords;\n\n // https://floating-ui.com/docs/virtual-elements\n return {\n getBoundingClientRect() {\n return {\n width: 0,\n height: 0,\n x: clientX,\n y: clientY,\n top: clientY,\n left: clientX,\n right: clientX,\n bottom: clientY,\n };\n },\n };\n }, [coords]);\n\n const refCallback = (el: HTMLDivElement) => {\n refs.setFloating(el);\n refs.setReference(virtual);\n };\n\n const { context, refs, floatingStyles } = useFloating({\n open: true,\n placement,\n onOpenChange: onTooltipClose,\n middleware,\n // whileElementsMounted: autoUpdate,\n });\n\n const dismiss = useDismiss(context);\n\n const { getFloatingProps, getReferenceProps } = useInteractions([dismiss]);\n\n if (links.length === 0 && !Boolean(actions?.length)) {\n return null;\n }\n\n return (\n <>\n {/* TODO: we can remove `value` from this component when TableRT is fully deprecated */}\n {value}\n <Portal zIndex={theme.zIndex.tooltip}>\n <div\n ref={refCallback}\n {...getReferenceProps()}\n {...getFloatingProps()}\n style={floatingStyles}\n className={styles.tooltipWrapper}\n data-testid={selectors.components.DataLinksActionsTooltip.tooltipWrapper}\n >\n <VizTooltipWrapper>\n <VizTooltipFooter dataLinks={links} actions={actions} />\n </VizTooltipWrapper>\n </div>\n </Portal>\n </>\n );\n};\n\nexport const renderSingleLink = (link: LinkModel, children: ReactNode, className?: string): ReactNode => {\n return (\n <a\n href={link.href}\n onClick={link.onClick}\n target={link.target}\n title={link.title}\n data-testid={selectors.components.DataLinksContextMenu.singleLink}\n className={className}\n >\n {children}\n </a>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n tooltipWrapper: css({\n whiteSpace: 'pre',\n borderRadius: theme.shape.radius.default,\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n boxShadow: theme.shadows.z3,\n userSelect: 'text',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n };\n};\n","import { z } from 'zod';\n\nimport alertDef from 'app/features/alerting/state/alertDef';\nimport { RuleFormType } from 'app/features/alerting/unified/types/rule-form';\nimport { ExpressionQueryType } from 'app/features/expressions/types';\nimport { GrafanaAlertStateDecision } from 'app/types/unified-alerting-dto';\n\n// Schema for __expr__ type queries (reduce, threshold, etc.)\nexport const exprQuerySchema = z.object({\n refId: z.string().describe('Reference ID for the query, e.g., \"B\", \"C\", etc.'),\n type: z.enum(ExpressionQueryType).describe('Expression type'),\n datasource: z.object({\n uid: z.literal('__expr__').describe('Must be \"__expr__\" for expression queries'),\n type: z.literal('__expr__').describe('Must be \"__expr__\" for expression queries'),\n }),\n conditions: z\n .array(\n z.object({\n type: z.string().describe('Condition type, e.g., \"query\"'),\n evaluator: z.object({\n params: z.array(z.any()).describe('Parameters for the evaluator'),\n type: z.enum(alertDef.evalFunctions.map((ef) => ef.value)).describe('Evaluator type'),\n }),\n operator: z.object({\n type: z.enum(alertDef.evalOperators.map((eo) => eo.value)).describe('Operator type'),\n }),\n query: z.object({\n params: z.array(z.string()).describe('Query parameters, typically the refId to evaluate'),\n }),\n reducer: z.object({\n params: z.array(z.any()).describe('Parameters for the reducer'),\n type: z.string().describe('Reducer type, e.g., \"last\", \"avg\", \"sum\", \"count\", \"min\", \"max\"'),\n }),\n })\n )\n .optional()\n .describe('Conditions for the expression query'),\n reducer: z.string().optional().describe('Reducer function, e.g., \"last\", \"avg\", \"sum\"'),\n expression: z.string().optional().describe('Expression referencing other queries, e.g., \"A\"'),\n math: z.string().optional().describe('Math expression for math type queries'),\n});\n\n// Schema for regular datasource queries\nexport const alertingQuerySchema = z.object({\n refId: z.string().describe('Reference ID for the query, e.g., \"A\", \"B\", etc.'),\n queryType: z.string().optional().default('alerting').describe('Type of query (e.g., \"alerting\", \"recording\")'),\n expression: z\n .string()\n .optional()\n .default('')\n .describe('Query expression to be executed. This can not include variables (e.g. $var).'),\n instant: z.boolean().optional().default(true).describe('Whether the query is an instant query'),\n range: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the query is a range query, should be false if instant is true'),\n datasource: z.object({\n type: z.string().optional().describe('Datasource type or \"__expr__\" when it is an expression query'),\n uid: z.string().optional().describe('Datasource UID'),\n }),\n});\n\n// Combined schema that supports both regular and expression queries\nexport const alertingModelSchema = z.union([alertingQuerySchema, exprQuerySchema]);\n\n// Main navigate to alert form schema - merged from both alertingSchemaApi and formDefaults\nexport const alertingAlertRuleFormSchema = z.object({\n // Common fields\n name: z.string().optional().describe('Name of the alert rule'),\n type: z.enum(RuleFormType).optional().catch(RuleFormType.grafana).describe('Type of the alert rule'),\n dataSourceName: z.string().optional().default(''),\n group: z.string().optional().describe('Alert group name'),\n\n // Labels and annotations\n labels: z\n .array(\n z.object({\n key: z.string().describe('Label key'),\n value: z.string().describe('Label value'),\n })\n )\n .optional()\n .default([])\n .describe('Labels for the alert rule'),\n annotations: z\n .array(\n z.object({\n key: z\n .string()\n .describe('Annotation key; for dashboard panel annotations, use \"__dashboardUid__\" or \"__panelId__\"'),\n value: z.string().describe('Annotation value'),\n })\n )\n .optional().describe(`Optional annotations for the alert rule. When creating alerts from a dashboard panel, include:\n - {\"key\": \"__dashboardUid__\", \"value\": \"<dashboard-uid>\"}\n - {\"key\": \"__panelId__\", \"value\": \"<panel-id>\"}\n These annotations link the alert back to the source dashboard and panel.`),\n\n // Folder configuration\n folder: z\n .object({\n kind: z.enum(['folder']).default('folder'),\n uid: z.string().describe('Folder UID where the alert rule will be created'),\n title: z.string().optional().default('').describe('Folder title'),\n })\n .optional()\n .describe('Folder configuration for the alert rule'),\n\n // Queries\n queries: z\n .array(\n z.object({\n refId: z.string().describe('Reference ID for the query (e.g., \"A\", \"B\", \"C\")'),\n queryType: z.string().optional().default('instant').describe('Type of query (e.g., \"instant\")'),\n relativeTimeRange: z\n .object({\n from: z.number().describe('Relative time from in seconds (e.g., 3600 for 1 hour)'),\n to: z.number().default(0).describe('Relative time to in seconds (usually 0 for \"now\")'),\n })\n .optional(),\n datasourceUid: z.string().describe('Datasource UID for the query'),\n model: alertingModelSchema.describe('Query model containing the actual query configuration'),\n })\n )\n .optional()\n .default([])\n .describe('Array of queries that form the alert rule'),\n\n // Alert rule configuration\n condition: z.string().optional().describe('Reference ID of the query that acts as the condition (e.g., \"C\")'),\n noDataState: z.enum(GrafanaAlertStateDecision).optional().describe('State when no data is available'),\n execErrState: z.enum(GrafanaAlertStateDecision).optional().describe('State when there is an execution error'),\n evaluateEvery: z.string().optional().describe('Evaluation interval'),\n evaluateFor: z.string().optional().describe('Evaluation duration'),\n keepFiringFor: z.string().optional().describe('Keep firing duration'),\n isPaused: z.boolean().optional().default(false).describe('Whether the rule is paused'),\n\n // Manual routing and contact points\n manualRouting: z\n .boolean()\n .optional()\n .default(true)\n .describe('Whether to use manual routing. If true, contactPoints are used.'),\n contactPoints: z\n .record(\n z.string(),\n z.object({\n selectedContactPoint: z.string().describe('Selected contact point to send the alert to'),\n overrideGrouping: z.boolean().describe('Whether to override the default grouping'),\n groupBy: z.array(z.string()).describe('Group by labels'),\n overrideTimings: z.boolean().describe('Whether to override the default timings'),\n groupWaitValue: z.string().describe('Group wait value'),\n groupIntervalValue: z.string().describe('Group interval value'),\n repeatIntervalValue: z.string().describe('Repeat interval value'),\n muteTimeIntervals: z.array(z.string()).describe('Mute time intervals'),\n activeTimeIntervals: z.array(z.string()).describe('Active time intervals'),\n })\n )\n .optional()\n .default({\n GRAFANA_RULES_SOURCE_NAME: {\n selectedContactPoint: 'default',\n overrideGrouping: false,\n groupBy: [],\n overrideTimings: false,\n groupWaitValue: '',\n groupIntervalValue: '',\n repeatIntervalValue: '',\n muteTimeIntervals: [],\n activeTimeIntervals: [],\n },\n })\n .describe('Contact points configuration'),\n\n // Editor settings\n editorSettings: z\n .object({\n simplifiedQueryEditor: z.boolean(),\n simplifiedNotificationEditor: z.boolean(),\n })\n .optional()\n .default({ simplifiedQueryEditor: true, simplifiedNotificationEditor: true })\n .describe('Editor settings'),\n\n // Additional fields\n metric: z.string().optional().describe('Metric name for Grafana recording rules'),\n targetDatasourceUid: z.string().optional().describe('Target datasource UID for Grafana recording rules'),\n\n // Navigation\n returnTo: z.string().optional().describe('Optional URL to return to after creating the alert'),\n});\n\n// Export types for use in plugins\nexport type AlertingAlertRuleFormSchemaType = z.infer<typeof alertingAlertRuleFormSchema>;\nexport type AlertingQuerySchemaType = z.infer<typeof alertingQuerySchema>;\nexport type ExprQuerySchemaType = z.infer<typeof exprQuerySchema>;\nexport type AlertingModelSchemaType = z.infer<typeof alertingModelSchema>;\n\n// Simple API that only exposes the navigate to alert rule form schema\nexport const alertingAlertRuleFormSchemaApi = {\n alertingAlertRuleFormSchema,\n};\n","import { Observable } from 'rxjs';\n\nimport { PluginExtensionLink } from '@grafana/data';\n\ntype GetObservablePluginLinksOptions = {\n context?: object | Record<string | symbol, unknown>;\n extensionPointId: string;\n limitPerPlugin?: number;\n};\n\nexport type GetObservablePluginLinks = (options: GetObservablePluginLinksOptions) => Observable<PluginExtensionLink[]>;\n\nlet singleton: GetObservablePluginLinks | undefined;\n\nexport function setGetObservablePluginLinks(fn: GetObservablePluginLinks): void {\n // We allow overriding the registry in tests\n if (singleton && process.env.NODE_ENV !== 'test') {\n throw new Error('setGetObservablePluginLinks() function should only be called once, when Grafana is starting.');\n }\n\n singleton = fn;\n}\n\nexport function getObservablePluginLinks(options: GetObservablePluginLinksOptions): Observable<PluginExtensionLink[]> {\n if (!singleton) {\n throw new Error('getObservablePluginLinks() can only be used after the Grafana instance has started.');\n }\n\n return singleton(options);\n}\n","import { Registry, RegistryItem } from '@grafana/data';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\n\nimport { DashboardLayoutManager } from '../../scene/types/DashboardLayoutManager';\n\nimport { deserializeAutoGridLayout } from './AutoGridLayoutSerializer';\nimport { deserializeDefaultGridLayout } from './DefaultGridLayoutSerializer';\nimport { deserializeRowsLayout } from './RowsLayoutSerializer';\nimport { deserializeTabsLayout } from './TabsLayoutSerializer';\n\ninterface LayoutSerializerRegistryItem extends RegistryItem {\n deserialize: (\n layout: DashboardV2Spec['layout'],\n elements: DashboardV2Spec['elements'],\n preload: boolean,\n panelIdGenerator?: () => number\n ) => DashboardLayoutManager;\n}\n\nexport const layoutDeserializerRegistry: Registry<LayoutSerializerRegistryItem> =\n new Registry<LayoutSerializerRegistryItem>(() => {\n return [\n {\n id: 'GridLayout',\n name: 'Grid Layout',\n deserialize: deserializeDefaultGridLayout,\n },\n {\n id: 'AutoGridLayout',\n name: 'Auto Grid Layout',\n deserialize: deserializeAutoGridLayout,\n },\n {\n id: 'RowsLayout',\n name: 'Rows Layout',\n deserialize: deserializeRowsLayout,\n },\n {\n id: 'TabsLayout',\n name: 'Tabs Layout',\n deserialize: deserializeTabsLayout,\n },\n ];\n });\n","import { css, cx } from '@emotion/css';\nimport {\n arrow,\n autoUpdate,\n FloatingArrow,\n FloatingFocusManager,\n offset,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n} from '@floating-ui/react';\nimport { Placement } from '@popperjs/core';\nimport { memo, cloneElement, isValidElement, useRef, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { getPositioningMiddleware } from '../../utils/floating';\nimport { buildTooltipTheme, getPlacement } from '../../utils/tooltipUtils';\nimport { IconButton } from '../IconButton/IconButton';\n\nimport { ToggletipContent } from './types';\n\nexport interface ToggletipProps {\n /** The theme used to display the toggletip */\n theme?: 'info' | 'error';\n /** The title to be displayed on the header */\n title?: JSX.Element | string;\n /** determine whether to show or not the close button **/\n closeButton?: boolean;\n /** Callback function to be called when the toggletip is closed */\n onClose?: () => void;\n /** The preferred placement of the toggletip */\n placement?: Placement;\n /** The text or component that houses the content of the toggleltip */\n content: ToggletipContent;\n /** The text or component to be displayed on the toggletip's bottom */\n footer?: JSX.Element | string;\n /** The UI control users interact with to display toggletips */\n children: JSX.Element;\n /** Determine whether the toggletip should fit its content or not */\n fitContent?: boolean;\n /** Determine whether the toggletip should be shown or not */\n show?: boolean;\n /** Callback function to be called when the toggletip is opened */\n onOpen?: () => void;\n}\n\n/**\n * Toggletips, similar to Tooltips, provide contextual support for users when needed. They are hidden by default, a UI trigger or text link are clicked to set them to their visible state. Toggletips, unlike tooltips, are persistent until a user takes action to dismiss them by clicking on the required “X” (close) trigger. Toggletips are capable of containing varying types of complex content including interactive components, buttons, and dropdowns.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/overlays-toggletip--docs\n */\nexport const Toggletip = memo(\n ({\n children,\n theme = 'info',\n placement = 'auto',\n content,\n title,\n closeButton = true,\n onClose,\n footer,\n fitContent = false,\n onOpen,\n show,\n }: ToggletipProps) => {\n const arrowRef = useRef(null);\n const grafanaTheme = useTheme2();\n const styles = useStyles2(getStyles);\n const style = styles[theme];\n const [controlledVisible, setControlledVisible] = useState(show);\n const isOpen = show ?? controlledVisible;\n const floatingUIPlacement = getPlacement(placement);\n\n // the order of middleware is important!\n // `arrow` should almost always be at the end\n // see https://floating-ui.com/docs/arrow#order\n const middleware = [\n offset(8),\n ...getPositioningMiddleware(floatingUIPlacement),\n arrow({\n element: arrowRef,\n }),\n ];\n\n const { context, refs, floatingStyles } = useFloating({\n open: isOpen,\n placement: floatingUIPlacement,\n onOpenChange: (open) => {\n if (show === undefined) {\n setControlledVisible(open);\n }\n if (!open) {\n onClose?.();\n } else {\n onOpen?.();\n }\n },\n middleware,\n whileElementsMounted: autoUpdate,\n strategy: 'fixed',\n });\n\n const click = useClick(context);\n const dismiss = useDismiss(context);\n\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss, click]);\n\n return (\n <>\n {cloneElement(children, {\n ref: refs.setReference,\n tabIndex: 0,\n 'aria-expanded': isOpen,\n ...getReferenceProps(),\n })}\n {isOpen && (\n <FloatingFocusManager context={context} modal={false} closeOnFocusOut={false}>\n <div\n data-testid=\"toggletip-content\"\n className={cx(style.container, {\n [styles.fitContent]: fitContent,\n })}\n ref={refs.setFloating}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n <FloatingArrow\n strokeWidth={0.3}\n stroke={grafanaTheme.colors.border.weak}\n className={style.arrow}\n ref={arrowRef}\n context={context}\n />\n {Boolean(title) && <div className={style.header}>{title}</div>}\n {closeButton && (\n <div className={style.headerClose}>\n <IconButton\n aria-label={t('grafana-ui.toggletip.close', 'Close')}\n name=\"times\"\n data-testid=\"toggletip-header-close\"\n onClick={() => {\n setControlledVisible(false);\n onClose?.();\n }}\n />\n </div>\n )}\n <div className={style.body}>\n {(typeof content === 'string' || isValidElement(content)) && content}\n {typeof content === 'function' && content({})}\n </div>\n {Boolean(footer) && <div className={style.footer}>{footer}</div>}\n </div>\n </FloatingFocusManager>\n )}\n </>\n );\n }\n);\n\nToggletip.displayName = 'Toggletip';\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n const info = buildTooltipTheme(\n theme,\n theme.colors.background.primary,\n theme.colors.border.weak,\n theme.components.tooltip.text,\n { topBottom: 2, rightLeft: 2 }\n );\n const error = buildTooltipTheme(\n theme,\n theme.colors.error.main,\n theme.colors.error.main,\n theme.colors.error.contrastText,\n { topBottom: 2, rightLeft: 2 }\n );\n\n return {\n info,\n error,\n fitContent: css({\n maxWidth: 'fit-content',\n }),\n };\n};\n","import { PluginError, PluginMeta, renderMarkdown } from '@grafana/data';\nimport { getBackendSrv, isFetchError } from '@grafana/runtime';\nimport { accessControlQueryParam } from 'app/core/utils/accessControl';\n\nimport { API_ROOT, GCOM_API_ROOT, INSTANCE_API_ROOT } from './constants';\nimport { isLocalPluginVisibleByConfig, isRemotePluginVisibleByConfig } from './helpers';\nimport {\n LocalPlugin,\n RemotePlugin,\n CatalogPluginDetails,\n Version,\n PluginVersion,\n InstancePlugin,\n ProvisionedPlugin,\n} from './types';\n\nexport async function getPluginDetails(id: string): Promise<CatalogPluginDetails> {\n const remote = await getRemotePlugin(id);\n const isPublished = Boolean(remote);\n const [localPlugins, versions, localReadme, localChangelog] = await Promise.all([\n getLocalPlugins(),\n getPluginVersions(id, isPublished),\n getLocalPluginReadme(id),\n getLocalPluginChangelog(id),\n ]);\n\n const local = localPlugins.find((p) => p.id === id);\n const dependencies = local?.dependencies || remote?.json?.dependencies;\n\n return {\n grafanaDependency: dependencies?.grafanaDependency ?? dependencies?.grafanaVersion ?? '',\n pluginDependencies: dependencies?.plugins || [],\n links: local?.info.links || remote?.json?.info.links || [],\n readme: localReadme || remote?.readme,\n versions,\n statusContext: remote?.statusContext ?? '',\n iam: remote?.json?.iam,\n changelog: remote?.changelog || localChangelog,\n licenseUrl: remote?.licenseUrl,\n documentationUrl: remote?.documentationUrl,\n sponsorshipUrl: remote?.sponsorshipUrl,\n repositoryUrl: remote?.repositoryUrl,\n raiseAnIssueUrl: remote?.raiseAnIssueUrl,\n signatureType: local?.signatureType || (remote?.signatureType !== '' ? remote?.signatureType : undefined),\n signature: local?.signature,\n screenshots: remote?.json?.info.screenshots || local?.info.screenshots,\n };\n}\n\nexport async function getRemotePlugins(): Promise<RemotePlugin[]> {\n try {\n const { items: remotePlugins }: { items: RemotePlugin[] } = await getBackendSrv().get(`${GCOM_API_ROOT}/plugins`, {\n // We are also fetching deprecated plugins, because we would like to be able to label plugins in the list that are both installed and deprecated.\n // (We won't show not installed deprecated plugins in the list)\n includeDeprecated: true,\n });\n\n return remotePlugins.filter(isRemotePluginVisibleByConfig);\n } catch (error) {\n if (isFetchError(error)) {\n // It can happen that GCOM is not available, in that case we show a limited set of information to the user.\n error.isHandled = true;\n console.error('Failed to fetch plugins from catalog (default https://grafana.com/api/plugins)');\n return [];\n }\n\n throw error;\n }\n}\n\nexport async function getPluginErrors(): Promise<PluginError[]> {\n try {\n return await getBackendSrv().get(`${API_ROOT}/errors`);\n } catch (error) {\n return [];\n }\n}\n\nasync function getRemotePlugin(id: string): Promise<RemotePlugin | undefined> {\n try {\n return await getBackendSrv().get(`${GCOM_API_ROOT}/plugins/${id}`, {});\n } catch (error) {\n if (isFetchError(error)) {\n // It can happen that GCOM is not available, in that case we show a limited set of information to the user.\n error.isHandled = true;\n }\n return;\n }\n}\n\nasync function getPluginVersions(id: string, isPublished: boolean): Promise<Version[]> {\n try {\n if (!isPublished) {\n return [];\n }\n\n const versions: { items: PluginVersion[] } = await getBackendSrv().get(`${GCOM_API_ROOT}/plugins/${id}/versions`);\n\n return (versions.items || []).map((v) => ({\n version: v.version,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isCompatible: v.isCompatible,\n grafanaDependency: v.grafanaDependency,\n angularDetected: v.angularDetected,\n }));\n } catch (error) {\n if (isFetchError(error)) {\n // It can happen that GCOM is not available, in that case we show a limited set of information to the user.\n error.isHandled = true;\n }\n return [];\n }\n}\n\nasync function getLocalPluginReadme(id: string): Promise<string> {\n try {\n const markdown: string = await getBackendSrv().get(`${API_ROOT}/${id}/markdown/README`);\n const markdownAsHtml = markdown ? renderMarkdown(markdown) : '';\n\n return markdownAsHtml;\n } catch (error) {\n if (isFetchError(error)) {\n error.isHandled = true;\n }\n return '';\n }\n}\n\nasync function getLocalPluginChangelog(id: string): Promise<string> {\n try {\n const markdown: string = await getBackendSrv().get(`${API_ROOT}/${id}/markdown/CHANGELOG`);\n const markdownAsHtml = markdown ? renderMarkdown(markdown) : '';\n return markdownAsHtml;\n } catch (error) {\n if (isFetchError(error)) {\n error.isHandled = true;\n }\n return '';\n }\n}\n\nexport async function getLocalPlugins(): Promise<LocalPlugin[]> {\n const localPlugins: LocalPlugin[] = await getBackendSrv().get(\n `${API_ROOT}`,\n accessControlQueryParam({ embedded: 0 })\n );\n\n return localPlugins.filter(isLocalPluginVisibleByConfig);\n}\n\nexport async function getInstancePlugins(): Promise<InstancePlugin[]> {\n const { items: instancePlugins }: { items: InstancePlugin[] } = await getBackendSrv().get(\n `${INSTANCE_API_ROOT}/plugins`\n );\n\n return instancePlugins;\n}\n\nexport async function getProvisionedPlugins(): Promise<ProvisionedPlugin[]> {\n const { items: provisionedPlugins }: { items: Array<{ type: string }> } = await getBackendSrv().get(\n `${INSTANCE_API_ROOT}/provisioned-plugins`\n );\n\n return provisionedPlugins.map((plugin) => ({ slug: plugin.type }));\n}\n\nexport async function installPlugin(id: string, version?: string) {\n // This will install the latest compatible version based on the logic\n // on the backend.\n return await getBackendSrv().post(\n `${API_ROOT}/${id}/install`,\n { version },\n {\n // Error is displayed in the page\n showErrorAlert: false,\n }\n );\n}\n\nexport async function uninstallPlugin(id: string) {\n return await getBackendSrv().post(`${API_ROOT}/${id}/uninstall`);\n}\n\nexport async function updatePluginSettings(id: string, data: Partial<PluginMeta>) {\n const response = await getBackendSrv().datasourceRequest({\n url: `/api/plugins/${id}/settings`,\n method: 'POST',\n data,\n });\n\n return response?.data;\n}\n\nexport const api = { getRemotePlugins, getInstalledPlugins: getLocalPlugins, installPlugin, uninstallPlugin };\n","import { CompletionItem, SearchFunction } from '../types/completion';\n\nimport { fuzzyMatch } from './fuzzy';\n\n/**\n * List of auto-complete search function used by SuggestionsPlugin.handleTypeahead()\n * @alpha\n */\nexport enum SearchFunctionType {\n Word = 'Word',\n Prefix = 'Prefix',\n Fuzzy = 'Fuzzy',\n}\n\n/**\n * Exact-word matching for auto-complete suggestions.\n * - Returns items containing the searched text.\n * @internal\n */\nconst wordSearch: SearchFunction = (items: CompletionItem[], text: string): CompletionItem[] => {\n return items.filter((c) => (c.filterText || c.label).includes(text));\n};\n\n/**\n * Prefix-based search for auto-complete suggestions.\n * - Returns items starting with the searched text.\n * @internal\n */\nconst prefixSearch: SearchFunction = (items: CompletionItem[], text: string): CompletionItem[] => {\n return items.filter((c) => (c.filterText || c.label).startsWith(text));\n};\n\n/**\n * Fuzzy search for auto-complete suggestions.\n * - Returns items containing all letters from the search text occurring in the same order.\n * - Stores highlight parts with parts of the text phrase found by fuzzy search\n * @internal\n */\nconst fuzzySearch: SearchFunction = (items: CompletionItem[], text: string): CompletionItem[] => {\n text = text.toLowerCase();\n return items.filter((item) => {\n const { distance, ranges, found } = fuzzyMatch(item.label.toLowerCase(), text);\n if (!found) {\n return false;\n }\n item.sortValue = distance;\n item.highlightParts = ranges;\n return true;\n });\n};\n\n/**\n * @internal\n */\nexport const SearchFunctionMap = {\n [SearchFunctionType.Word]: wordSearch,\n [SearchFunctionType.Prefix]: prefixSearch,\n [SearchFunctionType.Fuzzy]: fuzzySearch,\n};\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\n\ninterface Props {\n label: string | undefined;\n children?: React.ReactNode;\n}\n\nexport const TimeZoneGroup = (props: Props) => {\n const { children, label } = props;\n const styles = useStyles2(getStyles);\n\n if (!label) {\n return <div>{children}</div>;\n }\n\n return (\n <div>\n <div className={styles.header}>\n <span className={styles.label}>{label}</span>\n </div>\n {children}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n header: css({\n padding: '7px 10px',\n width: '100%',\n borderTop: `1px solid ${theme.colors.border.weak}`,\n textTransform: 'capitalize',\n }),\n label: css({\n fontSize: theme.typography.size.sm,\n color: theme.colors.text.secondary,\n fontWeight: theme.typography.fontWeightMedium,\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { isString } from 'lodash';\nimport { PropsWithChildren, RefCallback } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, SelectableValue, getTimeZoneInfo } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { Icon } from '../../Icon/Icon';\n\nimport { TimeZoneDescription } from './TimeZoneDescription';\nimport { TimeZoneOffset } from './TimeZoneOffset';\nimport { TimeZoneTitle } from './TimeZoneTitle';\n\ninterface Props {\n isFocused: boolean;\n isSelected: boolean;\n innerProps: JSX.IntrinsicElements['div'];\n innerRef: RefCallback<HTMLDivElement>;\n data: SelectableZone;\n}\n\nconst offsetClassName = 'tz-utc-offset';\n\nexport interface SelectableZone extends SelectableValue<string> {\n searchIndex: string;\n}\n\nexport const WideTimeZoneOption = (props: PropsWithChildren<Props>) => {\n const { children, innerProps, innerRef, data, isSelected, isFocused } = props;\n const styles = useStyles2(getStyles);\n const timestamp = Date.now();\n const containerStyles = cx(styles.container, isFocused && styles.containerFocused);\n\n if (!isString(data.value)) {\n return null;\n }\n\n const timeZoneInfo = getTimeZoneInfo(data.value, timestamp);\n\n return (\n <div className={containerStyles} {...innerProps} ref={innerRef} data-testid={selectors.components.Select.option}>\n <div className={cx(styles.leftColumn, styles.row)}>\n <div className={cx(styles.leftColumn, styles.wideRow)}>\n <TimeZoneTitle title={children} />\n <div className={styles.spacer} />\n <TimeZoneDescription info={timeZoneInfo} />\n </div>\n <div className={styles.rightColumn}>\n <TimeZoneOffset\n /* Use the timeZoneInfo to pass the correct timeZone name,\n as 'Default' has value '' which defaults to browser timezone */\n timeZone={timeZoneInfo?.ianaName || data.value}\n timestamp={timestamp}\n className={offsetClassName}\n />\n {isSelected && (\n <span>\n <Icon name=\"check\" />\n </span>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport const CompactTimeZoneOption = (props: React.PropsWithChildren<Props>) => {\n const { children, innerProps, innerRef, data, isSelected, isFocused } = props;\n const styles = useStyles2(getStyles);\n const timestamp = Date.now();\n const containerStyles = cx(styles.container, isFocused && styles.containerFocused);\n\n if (!isString(data.value)) {\n return null;\n }\n\n const timeZoneInfo = getTimeZoneInfo(data.value, timestamp);\n\n return (\n <div className={containerStyles} {...innerProps} ref={innerRef} data-testid={selectors.components.Select.option}>\n <div className={styles.body}>\n <div className={styles.row}>\n <div className={styles.leftColumn}>\n <TimeZoneTitle title={children} />\n </div>\n <div className={styles.rightColumn}>\n {isSelected && (\n <span>\n <Icon name=\"check\" />\n </span>\n )}\n </div>\n </div>\n <div className={styles.row}>\n <div className={styles.leftColumn}>\n <TimeZoneDescription info={timeZoneInfo} />\n </div>\n <div className={styles.rightColumn}>\n <TimeZoneOffset\n timestamp={timestamp}\n /* Use the timeZoneInfo to pass the correct timeZone name,\n as 'Default' has value '' which defaults to browser timezone */\n timeZone={timeZoneInfo?.ianaName || data.value}\n className={offsetClassName}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'row',\n flexShrink: 0,\n whiteSpace: 'nowrap',\n cursor: 'pointer',\n padding: '6px 8px 4px',\n\n '&:hover': {\n background: theme.colors.action.hover,\n },\n }),\n containerFocused: css({\n background: theme.colors.action.hover,\n }),\n body: css({\n display: 'flex',\n fontWeight: theme.typography.fontWeightMedium,\n flexDirection: 'column',\n flexGrow: 1,\n }),\n row: css({\n display: 'flex',\n flexDirection: 'row',\n }),\n leftColumn: css({\n flexGrow: 1,\n textOverflow: 'ellipsis',\n }),\n rightColumn: css({\n justifyContent: 'flex-end',\n alignItems: 'center',\n }),\n wideRow: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'baseline',\n }),\n spacer: css({\n marginLeft: '6px',\n }),\n});\n","import { toLower, isEmpty, isString } from 'lodash';\nimport { useMemo, useCallback } from 'react';\n\nimport {\n SelectableValue,\n getTimeZoneInfo,\n TimeZoneInfo,\n getTimeZoneGroups,\n GroupedTimeZones,\n TimeZone,\n InternalTimeZones,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { Select } from '../Select/Select';\n\nimport { TimeZoneGroup } from './TimeZonePicker/TimeZoneGroup';\nimport { formatUtcOffset } from './TimeZonePicker/TimeZoneOffset';\nimport { CompactTimeZoneOption, WideTimeZoneOption, SelectableZone } from './TimeZonePicker/TimeZoneOption';\n\nexport interface Props {\n onChange: (timeZone?: TimeZone) => void;\n value?: TimeZone;\n width?: number;\n autoFocus?: boolean;\n onBlur?: () => void;\n includeInternal?: boolean | InternalTimeZones[];\n disabled?: boolean;\n inputId?: string;\n menuShouldPortal?: boolean;\n openMenuOnFocus?: boolean;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/date-time-pickers-timezonepicker--docs\n */\nexport const TimeZonePicker = (props: Props) => {\n const {\n onChange,\n width,\n autoFocus = false,\n onBlur,\n value,\n includeInternal = false,\n disabled = false,\n inputId,\n menuShouldPortal = true,\n openMenuOnFocus = true,\n } = props;\n const groupedTimeZones = useTimeZones(includeInternal);\n const selected = useSelectedTimeZone(groupedTimeZones, value);\n const filterBySearchIndex = useFilterBySearchIndex();\n const TimeZoneOption = width && width <= 45 ? CompactTimeZoneOption : WideTimeZoneOption;\n\n const onChangeTz = useCallback(\n (selectable: SelectableValue<string>) => {\n if (!selectable || !isString(selectable.value)) {\n return onChange(value);\n }\n onChange(selectable.value);\n },\n [onChange, value]\n );\n\n return (\n <Select\n inputId={inputId}\n value={selected}\n placeholder={t('time-picker.zone.select-search-input', 'Type to search (country, city, abbreviation)')}\n autoFocus={autoFocus}\n menuShouldPortal={menuShouldPortal}\n openMenuOnFocus={openMenuOnFocus}\n width={width}\n filterOption={filterBySearchIndex}\n options={groupedTimeZones}\n onChange={onChangeTz}\n onBlur={onBlur}\n components={{ Option: TimeZoneOption, Group: TimeZoneGroup }}\n disabled={disabled}\n aria-label={t('time-picker.zone.select-aria-label', 'Time zone picker')}\n />\n );\n};\n\ninterface SelectableZoneGroup extends SelectableValue<string> {\n options: SelectableZone[];\n}\n\nconst useTimeZones = (includeInternal: boolean | InternalTimeZones[]): SelectableZoneGroup[] => {\n const now = Date.now();\n\n const timeZoneGroups = useMemo(() => {\n return getTimeZoneGroups(includeInternal).map((group: GroupedTimeZones) => {\n const options = group.zones.reduce((options: SelectableZone[], zone) => {\n const info = getTimeZoneInfo(zone, now);\n\n if (!info) {\n return options;\n }\n\n const name = info.name.replace(/_/g, ' ');\n\n options.push({\n label: name,\n value: info.zone,\n searchIndex: getSearchIndex(name, info, now),\n });\n\n return options;\n }, []);\n\n return {\n label: group.name,\n options,\n };\n });\n }, [includeInternal, now]);\n\n return timeZoneGroups;\n};\n\nconst useSelectedTimeZone = (\n groups: SelectableZoneGroup[],\n timeZone: TimeZone | undefined\n): SelectableZone | undefined => {\n return useMemo(() => {\n if (timeZone === undefined) {\n return undefined;\n }\n\n const tz = toLower(timeZone);\n\n const group = groups.find((group) => {\n if (!group.label) {\n return isInternal(tz);\n }\n return tz.startsWith(toLower(group.label));\n });\n\n return group?.options.find((option) => {\n if (isEmpty(tz)) {\n return option.value === InternalTimeZones.default;\n }\n return toLower(option.value) === tz;\n });\n }, [groups, timeZone]);\n};\n\nconst isInternal = (timeZone: TimeZone): boolean => {\n switch (timeZone) {\n case InternalTimeZones.default:\n case InternalTimeZones.localBrowserTime:\n case InternalTimeZones.utc:\n return true;\n\n default:\n return false;\n }\n};\n\nconst useFilterBySearchIndex = () => {\n return useCallback((option: SelectableValue, searchQuery: string) => {\n if (!searchQuery || !option.data || !option.data.searchIndex) {\n return true;\n }\n return option.data.searchIndex.indexOf(toLower(searchQuery)) > -1;\n }, []);\n};\n\nconst getSearchIndex = (label: string, info: TimeZoneInfo, timestamp: number): string => {\n const parts: string[] = [\n toLower(info.zone),\n toLower(info.abbreviation),\n toLower(formatUtcOffset(timestamp, info.zone)),\n ];\n\n if (label !== info.zone) {\n parts.push(toLower(label));\n }\n\n for (const country of info.countries) {\n parts.push(toLower(country.name));\n parts.push(toLower(country.code));\n }\n\n return parts.join('|');\n};\n","import { property } from 'lodash';\n\ninterface FieldAccessorCache {\n [key: string]: (obj: object) => any;\n}\n\nlet fieldAccessorCache: FieldAccessorCache = {};\n\nexport function getFieldAccessor(fieldPath: string) {\n const accessor = fieldAccessorCache[fieldPath];\n if (accessor) {\n return accessor;\n }\n\n return (fieldAccessorCache[fieldPath] = property(fieldPath));\n}\n","import { VariableValue, FormatVariable } from '@grafana/scenes';\nimport { VariableModel, VariableType } from '@grafana/schema';\n\nimport { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE } from '../variables/constants';\n\nexport class LegacyVariableWrapper implements FormatVariable {\n state: { name: string; value: VariableValue; text: VariableValue; type: VariableType };\n\n constructor(variable: VariableModel, value: VariableValue, text: VariableValue) {\n this.state = { name: variable.name, value, text, type: variable.type };\n }\n\n getValue(_fieldPath: string): VariableValue {\n let { value } = this.state;\n\n if (value === 'string' || value === 'number' || value === 'boolean') {\n return value;\n }\n\n return String(value);\n }\n\n getValueText(): string {\n const { value, text } = this.state;\n\n if (typeof text === 'string') {\n return value === ALL_VARIABLE_VALUE ? ALL_VARIABLE_TEXT : text;\n }\n\n if (Array.isArray(text)) {\n return text.join(' + ');\n }\n\n console.log('value', text);\n return String(text);\n }\n}\n\nlet legacyVariableWrapper: LegacyVariableWrapper | undefined;\n\n/**\n * Reuses a single instance to avoid unnecessary memory allocations\n */\nexport function getVariableWrapper(variable: VariableModel, value: VariableValue, text: VariableValue) {\n // TODO: provide more legacy variable properties, i.e. multi, includeAll that are used in custom interpolators,\n // see Prometheus data source for example\n if (!legacyVariableWrapper) {\n legacyVariableWrapper = new LegacyVariableWrapper(variable, value, text);\n } else {\n legacyVariableWrapper.state.name = variable.name;\n legacyVariableWrapper.state.type = variable.type;\n legacyVariableWrapper.state.value = value;\n legacyVariableWrapper.state.text = text;\n }\n\n return legacyVariableWrapper;\n}\n","import { formatRegistry } from '@grafana/scenes';\nimport { VariableFormatID } from '@grafana/schema';\n\nimport { isAdHoc } from '../variables/guard';\n\nimport { getVariableWrapper } from './LegacyVariableWrapper';\n\nexport function formatVariableValue(value: any, format?: any, variable?: any, text?: string): string {\n // for some scopedVars there is no variable\n variable = variable || {};\n\n if (value === null || value === undefined) {\n return '';\n }\n\n if (isAdHoc(variable) && format !== VariableFormatID.QueryParam) {\n return '';\n }\n\n // if it's an object transform value to string\n if (!Array.isArray(value) && typeof value === 'object') {\n value = `${value}`;\n }\n\n if (typeof format === 'function') {\n return format(value, variable, formatVariableValue);\n }\n\n if (!format) {\n format = VariableFormatID.Glob;\n }\n\n // some formats have arguments that come after ':' character\n let args = format.split(':');\n if (args.length > 1) {\n format = args[0];\n args = args.slice(1);\n } else {\n args = [];\n }\n\n let formatItem = formatRegistry.getIfExists(format);\n\n if (!formatItem) {\n console.error(`Variable format ${format} not found. Using glob format as fallback.`);\n formatItem = formatRegistry.get(VariableFormatID.Glob);\n }\n\n const formatVariable = getVariableWrapper(variable, value, text ?? value);\n return formatItem.formatter(value, args, formatVariable);\n}\n","import { Field, DataFrame, getFieldDisplayName, formatLabels } from '@grafana/data';\n\n/**\n * This object is created often, and only used when tmplates exist. Using a proxy lets us delay\n * calculations of the more complex structures (label names) until they are actually used\n */\nexport function getTemplateProxyForField(field: Field, frame?: DataFrame, frames?: DataFrame[]): any {\n return new Proxy(\n {}, // This object shows up in test snapshots\n {\n get: (obj, key) => {\n if (key === 'name') {\n return field.name;\n }\n\n if (key === 'displayName') {\n return getFieldDisplayName(field, frame, frames);\n }\n\n if (key === 'labels' || key === 'formattedLabels') {\n // formattedLabels deprecated\n if (!field.labels) {\n return '';\n }\n return {\n ...field.labels,\n __values: Object.values(field.labels).sort().join(', '),\n toString: () => {\n return formatLabels(field.labels!, '', true);\n },\n };\n }\n return undefined;\n },\n }\n );\n}\n","import {\n DisplayProcessor,\n FieldType,\n formattedValueToString,\n getDisplayProcessor,\n getFieldDisplayValuesProxy,\n getFrameDisplayName,\n ScopedVars,\n} from '@grafana/data';\nimport { VariableCustomFormatterFn } from '@grafana/scenes';\n\nimport { getFieldAccessor } from './fieldAccessorCache';\nimport { formatVariableValue } from './formatVariableValue';\nimport { getTemplateProxyForField } from './templateProxies';\n\n/**\n * ${__value.raw/nummeric/text/time} macro\n */\nexport function valueMacro(\n match: string,\n fieldPath?: string,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n) {\n const value = getValueForValueMacro(match, fieldPath, scopedVars);\n return formatVariableValue(value, format);\n}\n\nfunction getValueForValueMacro(match: string, fieldPath?: string, scopedVars?: ScopedVars) {\n const dataContext = scopedVars?.__dataContext;\n if (!dataContext) {\n return match;\n }\n\n const { frame, rowIndex, field, calculatedValue } = dataContext.value;\n\n if (calculatedValue) {\n switch (fieldPath) {\n case 'numeric':\n return calculatedValue.numeric.toString();\n case 'raw':\n return calculatedValue.numeric;\n case 'time':\n return '';\n case 'text':\n default:\n return formattedValueToString(calculatedValue);\n }\n }\n\n if (rowIndex === undefined) {\n return match;\n }\n\n if (fieldPath === 'time') {\n const timeField = frame.fields.find((f) => f.type === FieldType.time);\n return timeField ? timeField.values[rowIndex] : undefined;\n }\n\n const value = field.values[rowIndex];\n if (fieldPath === 'raw') {\n return value;\n }\n\n const displayProcessor = field.display ?? getFallbackDisplayProcessor();\n const result = displayProcessor(value);\n\n switch (fieldPath) {\n case 'numeric':\n return result.numeric;\n case 'text':\n return result.text;\n default:\n return formattedValueToString(result);\n }\n}\n\n/**\n * Macro support doing things like.\n * ${__data.name}\n * ${__data.fields[0].name}\n * ${__data.fields[\"Value\"].labels.cluster}\n *\n * Requires rowIndex on dataContext\n */\nexport function dataMacro(\n match: string,\n fieldPath?: string,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n) {\n const dataContext = scopedVars?.__dataContext;\n if (!dataContext || !fieldPath) {\n return match;\n }\n\n const { frame, rowIndex } = dataContext.value;\n\n if (rowIndex === undefined || fieldPath === undefined) {\n return match;\n }\n\n const obj = {\n name: frame.name,\n refId: frame.refId,\n fields: getFieldDisplayValuesProxy({ frame, rowIndex }),\n };\n\n const value = getFieldAccessor(fieldPath)(obj) ?? '';\n return formatVariableValue(value, format);\n}\n\nlet fallbackDisplayProcessor: DisplayProcessor | undefined;\n\nfunction getFallbackDisplayProcessor() {\n if (!fallbackDisplayProcessor) {\n fallbackDisplayProcessor = getDisplayProcessor();\n }\n\n return fallbackDisplayProcessor;\n}\n\n/**\n * ${__series} = frame display name\n */\nexport function seriesNameMacro(\n match: string,\n fieldPath?: string,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n) {\n const dataContext = scopedVars?.__dataContext;\n if (!dataContext) {\n return match;\n }\n\n if (fieldPath !== 'name') {\n return match;\n }\n\n const { frame, frameIndex } = dataContext.value;\n const value = getFrameDisplayName(frame, frameIndex);\n return formatVariableValue(value, format);\n}\n\n/**\n * Handles expressions like\n * ${__field.name}\n * ${__field.labels.cluster}\n */\nexport function fieldMacro(\n match: string,\n fieldPath?: string,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n) {\n const dataContext = scopedVars?.__dataContext;\n if (!dataContext) {\n return match;\n }\n\n if (fieldPath === undefined || fieldPath === '') {\n return match;\n }\n\n const { frame, field, data } = dataContext.value;\n const obj = getTemplateProxyForField(field, frame, data);\n\n const value = getFieldAccessor(fieldPath)(obj) ?? '';\n return formatVariableValue(value, format);\n}\n","import moment from 'moment-timezone';\n\nimport { DataLinkBuiltInVars, getTimeZone, ScopedVars, urlUtil } from '@grafana/data';\n\nimport { getTimeSrv } from '../dashboard/services/TimeSrv';\nimport { getVariablesUrlParams } from '../variables/getAllVariableValuesForUrl';\n\nimport { dataMacro, fieldMacro, seriesNameMacro, valueMacro } from './dataMacros';\nimport { MacroHandler } from './types';\n\nexport const macroRegistry: Record<string, MacroHandler> = {\n ['__value']: valueMacro,\n ['__data']: dataMacro,\n ['__series']: seriesNameMacro,\n ['__field']: fieldMacro,\n [DataLinkBuiltInVars.includeVars]: includeVarsMacro,\n [DataLinkBuiltInVars.keepTime]: urlTimeRangeMacro,\n ['__timezone']: timeZoneMacro,\n};\n\nfunction includeVarsMacro(match: string, fieldPath?: string, scopedVars?: ScopedVars) {\n const allVariablesParams = getVariablesUrlParams(scopedVars);\n return urlUtil.toUrlParams(allVariablesParams);\n}\n\nfunction urlTimeRangeMacro() {\n return urlUtil.toUrlParams(getTimeSrv().timeRangeForUrl());\n}\n\nfunction timeZoneMacro() {\n const timeZone = getTimeZone({ timeZone: getTimeSrv().timeModel?.getTimezone() });\n return timeZone === 'browser' ? moment.tz.guess() : timeZone;\n}\n","import { escape, isString } from 'lodash';\n\nimport {\n deprecationWarning,\n ScopedVars,\n TimeRange,\n AdHocVariableFilter,\n AdHocVariableModel,\n TypedVariableModel,\n ScopedVar,\n} from '@grafana/data';\nimport {\n getDataSourceSrv,\n setTemplateSrv,\n TemplateSrv as BaseTemplateSrv,\n VariableInterpolation,\n} from '@grafana/runtime';\nimport { sceneGraph, VariableCustomFormatterFn, SceneObject } from '@grafana/scenes';\nimport { VariableFormatID } from '@grafana/schema';\n\nimport { getVariablesCompatibility } from '../dashboard-scene/utils/getVariablesCompatibility';\nimport { variableAdapters } from '../variables/adapters';\nimport { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE } from '../variables/constants';\nimport { isAdHoc } from '../variables/guard';\nimport { getFilteredVariables, getVariables, getVariableWithName } from '../variables/state/selectors';\nimport { variableRegex } from '../variables/utils';\n\nimport { getFieldAccessor } from './fieldAccessorCache';\nimport { formatVariableValue } from './formatVariableValue';\nimport { macroRegistry } from './macroRegistry';\n\n/**\n * Internal regex replace function\n */\ntype ReplaceFunction = (fullMatch: string, variableName: string, fieldPath: string, format: string) => string;\n\nexport interface TemplateSrvDependencies {\n getFilteredVariables: typeof getFilteredVariables;\n getVariables: typeof getVariables;\n getVariableWithName: typeof getVariableWithName;\n}\n\nconst runtimeDependencies: TemplateSrvDependencies = {\n getFilteredVariables,\n getVariables,\n getVariableWithName,\n};\n\nexport class TemplateSrv implements BaseTemplateSrv {\n private _variables: any[];\n private regex = variableRegex;\n private index: any = {};\n private grafanaVariables = new Map<string, any>();\n private _timeRange?: TimeRange | null = null;\n private _adhocFiltersDeprecationWarningLogged = new Map<string, boolean>();\n\n constructor(private dependencies: TemplateSrvDependencies = runtimeDependencies) {\n this._variables = [];\n }\n\n init(variables: any, timeRange?: TimeRange) {\n this._variables = variables;\n this._timeRange = timeRange;\n this.updateIndex();\n }\n\n /**\n * @deprecated: this instance variable should not be used and will be removed in future releases\n *\n * Use getVariables function instead\n */\n get variables(): TypedVariableModel[] {\n deprecationWarning('template_srv.ts', 'variables', 'getVariables');\n return this.getVariables();\n }\n\n getVariables(): TypedVariableModel[] {\n // For scenes we have this backward compatiblity translation\n if (window.__grafanaSceneContext) {\n return getVariablesCompatibility(window.__grafanaSceneContext);\n }\n\n return this.dependencies.getVariables();\n }\n\n get timeRange(): TimeRange | null | undefined {\n if (window.__grafanaSceneContext && window.__grafanaSceneContext.isActive) {\n const sceneTimeRange = sceneGraph.getTimeRange(window.__grafanaSceneContext);\n\n return sceneTimeRange.state.value;\n }\n\n return this._timeRange;\n }\n\n updateIndex() {\n const existsOrEmpty = (value: unknown) => value || value === '';\n\n this.index = this._variables.reduce((acc, currentValue) => {\n if (currentValue.current && (currentValue.current.isNone || existsOrEmpty(currentValue.current.value))) {\n acc[currentValue.name] = currentValue;\n }\n return acc;\n }, {});\n\n if (this.timeRange) {\n const from = this.timeRange.from.valueOf().toString();\n const to = this.timeRange.to.valueOf().toString();\n\n this.index = {\n ...this.index,\n ['__from']: {\n current: { value: from, text: from },\n },\n ['__to']: {\n current: { value: to, text: to },\n },\n };\n }\n }\n\n updateTimeRange(timeRange: TimeRange) {\n this._timeRange = timeRange;\n this.updateIndex();\n }\n\n variableInitialized(variable: any) {\n this.index[variable.name] = variable;\n }\n\n /**\n * @deprecated\n * Use filters property on the request (DataQueryRequest) or if this is called from\n * interpolateVariablesInQueries or applyTemplateVariables it is passed as a new argument\n **/\n getAdhocFilters(datasourceName: string, skipDeprecationWarning?: boolean): AdHocVariableFilter[] {\n let filters: AdHocVariableFilter[] = [];\n let ds = getDataSourceSrv().getInstanceSettings(datasourceName);\n\n if (!ds) {\n return [];\n }\n\n if (!skipDeprecationWarning && !this._adhocFiltersDeprecationWarningLogged.get(ds.type)) {\n if (process.env.NODE_ENV !== 'test') {\n deprecationWarning(\n `DataSource ${ds.type}`,\n 'templateSrv.getAdhocFilters',\n 'filters property on the request (DataQueryRequest). Or if this is called from interpolateVariablesInQueries or applyTemplateVariables it is passed as a new argument'\n );\n }\n this._adhocFiltersDeprecationWarningLogged.set(ds.type, true);\n }\n\n for (const variable of this.getAdHocVariables()) {\n const variableUid = variable.datasource?.uid;\n\n if (variableUid === ds.uid) {\n filters = filters.concat(variable.filters);\n } else if (variableUid?.indexOf('$') === 0) {\n if (this.replace(variableUid) === ds.uid) {\n filters = filters.concat(variable.filters);\n }\n }\n }\n\n return filters;\n }\n\n setGrafanaVariable(name: string, value: any) {\n this.grafanaVariables.set(name, value);\n }\n\n /**\n * @deprecated: setGlobalVariable function should not be used and will be removed in future releases\n *\n * Use addVariable action to add variables to Redux instead\n */\n setGlobalVariable(name: string, variable: any) {\n deprecationWarning('template_srv.ts', 'setGlobalVariable', '');\n this.index = {\n ...this.index,\n [name]: {\n current: variable,\n },\n };\n }\n\n getVariableName(expression: string) {\n this.regex.lastIndex = 0;\n const match = this.regex.exec(expression);\n if (!match) {\n return null;\n }\n const variableName = match.slice(1).find((match) => match !== undefined);\n return variableName;\n }\n\n containsTemplate(target: string | undefined): boolean {\n if (!target) {\n return false;\n }\n\n // Scenes compatability\n if (window.__grafanaSceneContext && window.__grafanaSceneContext.isActive) {\n // We are just checking that this is a valid variable reference, and we are not looking up the variable\n this.regex.lastIndex = 0;\n const match = this.regex.exec(target);\n return !!match;\n }\n\n const name = this.getVariableName(target);\n const variable = name && this.getVariableAtIndex(name);\n return variable !== null && variable !== undefined;\n }\n\n variableExists(expression: string): boolean {\n deprecationWarning('template_srv.ts', 'variableExists', 'containsTemplate');\n return this.containsTemplate(expression);\n }\n\n highlightVariablesAsHtml(str: string) {\n if (!str || !isString(str)) {\n return str;\n }\n\n str = escape(str);\n return this._replaceWithVariableRegex(str, undefined, (match, variableName) => {\n if (this.getVariableAtIndex(variableName)) {\n return '<span class=\"template-variable\">' + match + '</span>';\n }\n return match;\n });\n }\n\n getAllValue(variable: any) {\n if (variable.allValue) {\n return variable.allValue;\n }\n const values = [];\n for (let i = 1; i < variable.options.length; i++) {\n values.push(variable.options[i].value);\n }\n return values;\n }\n\n private getVariableValue(scopedVar: ScopedVar, fieldPath: string | undefined) {\n if (fieldPath) {\n return getFieldAccessor(fieldPath)(scopedVar.value);\n }\n\n return scopedVar.value;\n }\n\n private getVariableText(scopedVar: ScopedVar, value: any) {\n if (scopedVar.value === value || typeof value !== 'string') {\n return scopedVar.text;\n }\n\n return value;\n }\n\n replace(\n target?: string,\n scopedVars?: ScopedVars,\n format?: string | Function | undefined,\n interpolations?: VariableInterpolation[]\n ): string {\n // Scenes compatability (primary method) is via SceneObject inside scopedVars. This way we get a much more accurate \"local\" scope for the evaluation\n if (scopedVars && scopedVars.__sceneObject) {\n // We are using valueOf here as __sceneObject can be after scenes 5.6.0 a SafeSerializableSceneObject that overrides valueOf to return the underlying SceneObject\n const sceneObject: SceneObject = scopedVars.__sceneObject.value.valueOf();\n return sceneGraph.interpolate(\n sceneObject,\n target,\n scopedVars,\n format as string | VariableCustomFormatterFn | undefined,\n interpolations\n );\n }\n\n // Scenes compatability: (secondary method) is using the current active scene as the scope for evaluation.\n if (window.__grafanaSceneContext && window.__grafanaSceneContext.isActive) {\n return sceneGraph.interpolate(\n window.__grafanaSceneContext,\n target,\n scopedVars,\n format as string | VariableCustomFormatterFn | undefined,\n interpolations\n );\n }\n\n if (!target) {\n return target ?? '';\n }\n\n this.regex.lastIndex = 0;\n\n return this._replaceWithVariableRegex(target, format, (match, variableName, fieldPath, fmt) => {\n const value = this._evaluateVariableExpression(match, variableName, fieldPath, fmt, scopedVars);\n\n // If we get passed this interpolations map we will also record all the expressions that were replaced\n if (interpolations) {\n interpolations.push({ match, variableName, fieldPath, format: fmt, value, found: value !== match });\n }\n\n return value;\n });\n }\n\n private _evaluateVariableExpression(\n match: string,\n variableName: string,\n fieldPath: string,\n format: string | VariableCustomFormatterFn | undefined,\n scopedVars: ScopedVars | undefined\n ) {\n const variable = this.getVariableAtIndex(variableName);\n const scopedVar = scopedVars?.[variableName];\n\n if (scopedVar) {\n const value = this.getVariableValue(scopedVar, fieldPath);\n const text = this.getVariableText(scopedVar, value);\n\n if (value !== null && value !== undefined) {\n return formatVariableValue(value, format, variable, text);\n }\n }\n\n if (!variable) {\n const macro = macroRegistry[variableName];\n if (macro) {\n return macro(match, fieldPath, scopedVars, format);\n }\n\n return match;\n }\n\n if (format === VariableFormatID.QueryParam || isAdHoc(variable)) {\n const value = variableAdapters.get(variable.type).getValueForUrl(variable);\n const text = isAdHoc(variable) ? variable.id : variable.current.text;\n\n return formatVariableValue(value, format, variable, text);\n }\n\n const systemValue = this.grafanaVariables.get(variable.current.value);\n if (systemValue) {\n return formatVariableValue(systemValue, format, variable);\n }\n\n let value = variable.current.value;\n let text = variable.current.text;\n\n if (this.isAllValue(value)) {\n value = this.getAllValue(variable);\n text = ALL_VARIABLE_TEXT;\n // skip formatting of custom all values unless format set to text or percentencode\n if (variable.allValue && format !== VariableFormatID.Text && format !== VariableFormatID.PercentEncode) {\n return this.replace(value);\n }\n }\n\n if (fieldPath) {\n const fieldValue = this.getVariableValue({ value, text }, fieldPath);\n if (fieldValue !== null && fieldValue !== undefined) {\n return formatVariableValue(fieldValue, format, variable, text);\n }\n }\n\n return formatVariableValue(value, format, variable, text);\n }\n\n /**\n * Tries to unify the different variable format capture groups into a simpler replacer function\n */\n private _replaceWithVariableRegex(text: string, format: string | Function | undefined, replace: ReplaceFunction) {\n this.regex.lastIndex = 0;\n\n return text.replace(this.regex, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {\n const variableName = var1 || var2 || var3;\n const fmt = fmt2 || fmt3 || format;\n return replace(match, variableName, fieldPath, fmt);\n });\n }\n\n isAllValue(value: unknown) {\n return value === ALL_VARIABLE_VALUE || (Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE);\n }\n\n replaceWithText(target: string, scopedVars?: ScopedVars) {\n deprecationWarning('template_srv.ts', 'replaceWithText()', 'replace(), and specify the :text format');\n return this.replace(target, scopedVars, 'text');\n }\n\n private getVariableAtIndex(name: string) {\n if (!name) {\n return;\n }\n\n if (!this.index[name]) {\n return this.dependencies.getVariableWithName(name);\n }\n\n return this.index[name];\n }\n\n private getAdHocVariables(): AdHocVariableModel[] {\n return this.dependencies.getFilteredVariables(isAdHoc) as AdHocVariableModel[];\n }\n}\n\n// Expose the template srv\nconst srv = new TemplateSrv();\n\nsetTemplateSrv(srv);\n\nexport const getTemplateSrv = () => srv;\n","import { DataFrame, Field } from '@grafana/data';\nimport { ConnectionDirection, DirectionDimensionConfig, DirectionDimensionMode } from '@grafana/schema';\n\nimport { DimensionSupplier } from './types';\nimport { findField, getLastNotNullFieldValue } from './utils';\n\n//---------------------------------------------------------\n// Direction dimension\n//---------------------------------------------------------\n\nexport function getDirectionDimension(\n frame: DataFrame | undefined,\n config: DirectionDimensionConfig\n): DimensionSupplier<ConnectionDirection> {\n return getDirectionDimensionForField(findField(frame, config.field), config);\n}\n\nexport function getDirectionDimensionForField(\n field: Field | undefined,\n config: DirectionDimensionConfig\n): DimensionSupplier<ConnectionDirection> {\n const mode = config.mode ?? DirectionDimensionMode.Fixed;\n\n if (mode === DirectionDimensionMode.Fixed || !field) {\n const v = config.fixed ?? ConnectionDirection.Forward;\n return {\n isAssumed: Boolean(config.field?.length) || !config.fixed,\n fixed: v,\n value: () => v,\n get: () => v,\n };\n }\n\n const getDirectionFromValue = (value: unknown): ConnectionDirection => {\n if (value == null) {\n return ConnectionDirection.Forward;\n }\n\n const numValue = Number(value);\n if (isNaN(numValue)) {\n return ConnectionDirection.Forward;\n }\n\n if (numValue > 0) {\n return ConnectionDirection.Forward;\n } else if (numValue < 0) {\n return ConnectionDirection.Reverse;\n } else {\n return ConnectionDirection.None;\n }\n };\n\n return {\n field,\n get: (index: number): ConnectionDirection => getDirectionFromValue(field.values[index]),\n value: () => getDirectionFromValue(getLastNotNullFieldValue(field)),\n };\n}\n","import { DataFrame, PanelData, Field, getFieldDisplayName, ReducerID } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport {\n ResourceDimensionConfig,\n ScaleDimensionConfig,\n TextDimensionConfig,\n ColorDimensionConfig,\n ScalarDimensionConfig,\n DirectionDimensionConfig,\n ConnectionDirection,\n} from '@grafana/schema';\n\nimport { getColorDimension } from './color';\nimport { getDirectionDimension } from './direction';\nimport { getResourceDimension } from './resource';\nimport { getScalarDimension } from './scalar';\nimport { getScaledDimension } from './scale';\nimport { getTextDimension } from './text';\nimport { DimensionSupplier } from './types';\n\nexport function getColorDimensionFromData(\n data: PanelData | undefined,\n cfg: ColorDimensionConfig\n): DimensionSupplier<string> {\n if (data?.series && cfg.field) {\n for (const frame of data.series) {\n const d = getColorDimension(frame, cfg, config.theme2);\n if (!d.isAssumed || data.series.length === 1) {\n return d;\n }\n }\n }\n return getColorDimension(undefined, cfg, config.theme2);\n}\n\nexport function getDirectionDimensionFromData(\n data: PanelData | undefined,\n cfg: DirectionDimensionConfig\n): DimensionSupplier<ConnectionDirection> {\n if (data?.series && cfg.field) {\n for (const frame of data.series) {\n const d = getDirectionDimension(frame, cfg);\n if (!d.isAssumed || data.series.length === 1) {\n return d;\n }\n }\n }\n return getDirectionDimension(undefined, cfg);\n}\n\nexport function getScaleDimensionFromData(\n data: PanelData | undefined,\n cfg: ScaleDimensionConfig\n): DimensionSupplier<number> {\n if (data?.series && cfg.field) {\n for (const frame of data.series) {\n const d = getScaledDimension(frame, cfg);\n if (!d.isAssumed || data.series.length === 1) {\n return d;\n }\n }\n }\n return getScaledDimension(undefined, cfg);\n}\n\nexport function getScalarDimensionFromData(\n data: PanelData | undefined,\n cfg: ScalarDimensionConfig\n): DimensionSupplier<number> {\n if (data?.series && cfg.field) {\n for (const frame of data.series) {\n const d = getScalarDimension(frame, cfg);\n if (!d.isAssumed || data.series.length === 1) {\n return d;\n }\n }\n }\n return getScalarDimension(undefined, cfg);\n}\n\nexport function getResourceDimensionFromData(\n data: PanelData | undefined,\n cfg: ResourceDimensionConfig\n): DimensionSupplier<string> {\n if (data?.series && cfg.field) {\n for (const frame of data.series) {\n const d = getResourceDimension(frame, cfg);\n if (!d.isAssumed || data.series.length === 1) {\n return d;\n }\n }\n }\n return getResourceDimension(undefined, cfg);\n}\n\nexport function getTextDimensionFromData(\n data: PanelData | undefined,\n cfg: TextDimensionConfig\n): DimensionSupplier<string> {\n if (data?.series && cfg.field) {\n for (const frame of data.series) {\n const d = getTextDimension(frame, cfg);\n if (!d.isAssumed || data.series.length === 1) {\n return d;\n }\n }\n }\n return getTextDimension(undefined, cfg);\n}\n\nexport function findField(frame?: DataFrame, name?: string): Field | undefined {\n const idx = findFieldIndex(name, frame);\n return idx == null ? undefined : frame!.fields[idx];\n}\n\nexport function findFieldIndex(name?: string, frame?: DataFrame, frames?: DataFrame[]): number | undefined {\n if (!frame || !name?.length) {\n return undefined;\n }\n\n for (let i = 0; i < frame.fields.length; i++) {\n const field = frame.fields[i];\n if (name === field.name) {\n return i;\n }\n const disp = getFieldDisplayName(field, frame, frames);\n if (name === disp) {\n return i;\n }\n }\n return undefined;\n}\n\nexport function getLastNotNullFieldValue<T>(field: Field): T {\n const calcs = field.state?.calcs;\n if (calcs) {\n const v = calcs[ReducerID.lastNotNull];\n if (v != null) {\n return v;\n }\n }\n\n const data = field.values;\n let idx = data.length - 1;\n while (idx >= 0) {\n const v = data[idx--];\n if (v != null) {\n return v;\n }\n }\n return undefined as T;\n}\n","import * as React from 'react';\nimport { Plugin } from 'slate-react';\n\nexport function RunnerPlugin({ handler }: { handler?: (e: React.KeyboardEvent) => void }): Plugin {\n return {\n onKeyDown(event, editor, next) {\n // Handle enter\n if (handler && event.key === 'Enter' && (event.shiftKey || event.ctrlKey)) {\n // Submit on Enter\n event.preventDefault();\n handler(event);\n return editor;\n }\n\n return next();\n },\n };\n}\n","import { config, isFetchError } from '@grafana/runtime';\n\nexport const getAPINamespace = () => config.namespace;\n\n/**\n * Get a base URL for a k8s API endpoint with parameterised namespace given it's group and version\n * @param group the k8s group, e.g. dashboard.grafana.app\n * @param version e.g. v0alpha1\n * @returns\n */\nexport const getAPIBaseURL = (group: string, version: string) => {\n return `/apis/${group}/${version}/namespaces/${getAPINamespace()}` as const;\n};\n\n/**\n * Normalize error from various error formats into a string message\n * @param e the raw error\n * @returns string error message\n */\nexport const normalizeError = (e: unknown): string => {\n if (!e) {\n return 'Unknown error';\n }\n\n if (typeof e === 'object') {\n if ('data' in e && e.data && typeof e.data === 'object' && 'message' in e.data) {\n return String(e.data.message);\n }\n\n // Direct error with message property\n if ('message' in e) {\n return String(e.message);\n }\n\n // Nested error wrapper (RTK Query format)\n if ('error' in e) {\n if (e.error instanceof Error) {\n return e.error.message;\n } else if (isFetchError(e.error)) {\n if (e.error.data && typeof e.error.data === 'object' && 'message' in e.error.data) {\n return String(e.error.data.message);\n }\n if (Array.isArray(e.error.data.errors) && e.error.data.errors.length) {\n return e.error.data.errors.join('\\n');\n }\n }\n }\n }\n\n if (e instanceof Error) {\n return e.message;\n }\n\n return String(e);\n};\nexport function handleRequestError(error: unknown) {\n if (isFetchError(error) || error instanceof Error) {\n return { error };\n } else {\n return { error: new Error('Unknown error') };\n }\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { TableCellHeight } from '@grafana/schema';\n\nexport function useTableStyles(theme: GrafanaTheme2, cellHeightOption: TableCellHeight) {\n const borderColor = theme.colors.border.weak;\n const resizerColor = theme.colors.primary.border;\n const cellPadding = 6;\n const cellHeight = getCellHeight(theme, cellHeightOption, cellPadding);\n const rowHeight = cellHeight + 2;\n const headerHeight = 28;\n\n const buildCellContainerStyle = (\n color?: string,\n background?: string,\n backgroundHover?: string,\n overflowOnHover?: boolean,\n asCellText?: boolean,\n textShouldWrap?: boolean,\n textWrapped?: boolean,\n rowStyled?: boolean,\n rowExpanded?: boolean\n ) => {\n return css({\n label: overflowOnHover ? 'cellContainerOverflow' : 'cellContainerNoOverflow',\n padding: `${cellPadding}px`,\n width: '100%',\n // Cell height need to account for row border\n height: rowExpanded ? 'auto !important' : `${rowHeight - 1}px`,\n wordBreak: textWrapped ? 'break-all' : 'inherit',\n\n display: 'flex',\n\n ...(asCellText\n ? {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n userSelect: 'text',\n whiteSpace: 'nowrap',\n }\n : {}),\n\n alignItems: 'center',\n borderRight: `1px solid ${borderColor}`,\n\n color: rowStyled ? 'inherit' : (color ?? undefined),\n background: rowStyled ? undefined : (background ?? undefined),\n backgroundClip: 'padding-box',\n\n '&:last-child:not(:only-child)': {\n borderRight: 'none',\n },\n\n '&:hover': {\n overflow: overflowOnHover && !textWrapped ? 'visible' : undefined,\n width: textShouldWrap || !overflowOnHover ? 'auto' : 'auto !important',\n height: (textShouldWrap || overflowOnHover) && !textWrapped ? 'auto !important' : `${rowHeight - 1}px`,\n minHeight: `${rowHeight - 1}px`,\n wordBreak: textShouldWrap ? 'break-word' : undefined,\n whiteSpace: textShouldWrap && overflowOnHover ? 'normal' : 'nowrap',\n boxShadow: overflowOnHover ? `0 0 2px ${theme.colors.primary.main}` : undefined,\n background: rowStyled ? 'inherit' : (backgroundHover ?? theme.colors.background.primary),\n zIndex: 1,\n '.cellActions': {\n background: theme.components.tooltip.background,\n color: theme.components.tooltip.text,\n visibility: 'visible',\n opacity: 1,\n width: 'auto',\n borderRadius: theme.shape.radius.default,\n },\n },\n\n a: {\n color: 'inherit',\n },\n\n '.cellActions': {\n display: 'flex',\n position: overflowOnHover ? undefined : 'absolute',\n top: overflowOnHover ? undefined : '1px',\n right: overflowOnHover ? undefined : 0,\n margin: overflowOnHover ? theme.spacing(0, 0, 0, 1) : 'auto',\n visibility: 'hidden',\n opacity: 0,\n width: 0,\n alignItems: 'center',\n height: '100%',\n padding: theme.spacing(0.5, 0, 0.5, 0.5),\n background: theme.components.tooltip.background,\n color: theme.components.tooltip.text,\n },\n\n '.cellActionsLeft': {\n right: 'auto !important',\n left: 0,\n },\n });\n };\n\n return {\n theme,\n cellHeight,\n buildCellContainerStyle,\n cellPadding,\n cellHeightInner: cellHeight - cellPadding * 2,\n rowHeight,\n table: css({\n height: '100%',\n width: '100%',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n }),\n thead: css({\n label: 'thead',\n height: `${headerHeight}px`,\n overflowY: 'auto',\n overflowX: 'hidden',\n position: 'relative',\n }),\n tfoot: css({\n label: 'tfoot',\n height: `${headerHeight}px`,\n borderTop: `1px solid ${borderColor}`,\n overflowY: 'auto',\n overflowX: 'hidden',\n position: 'relative',\n }),\n headerRow: css({\n label: 'row',\n borderBottom: `1px solid ${borderColor}`,\n }),\n headerCell: css({\n height: '100%',\n padding: `0 ${cellPadding}px`,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n display: 'flex',\n alignItems: 'center',\n fontWeight: theme.typography.fontWeightMedium,\n\n '&:last-child': {\n borderRight: 'none',\n },\n }),\n headerCellLabel: css({\n border: 'none',\n padding: 0,\n background: 'inherit',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontWeight: theme.typography.fontWeightMedium,\n display: 'flex',\n alignItems: 'center',\n marginRight: theme.spacing(0.5),\n\n '&:hover': {\n textDecoration: 'underline',\n color: theme.colors.text.link,\n },\n }),\n cellContainerText: buildCellContainerStyle(undefined, undefined, undefined, true, true),\n cellContainerTextNoOverflow: buildCellContainerStyle(undefined, undefined, undefined, false, true),\n\n cellContainer: buildCellContainerStyle(undefined, undefined, undefined, true, false),\n cellContainerNoOverflow: buildCellContainerStyle(undefined, undefined, undefined, false, false),\n cellText: css({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n userSelect: 'text',\n whiteSpace: 'nowrap',\n cursor: 'text',\n }),\n sortIcon: css({\n marginLeft: theme.spacing(0.5),\n }),\n cellLink: css({\n cursor: 'pointer',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n userSelect: 'text',\n whiteSpace: 'nowrap',\n color: `${theme.colors.text.link} !important`,\n fontWeight: theme.typography.fontWeightMedium,\n paddingRight: theme.spacing(1.5),\n '&:hover': {\n textDecoration: 'underline',\n color: theme.colors.text.link,\n },\n }),\n cellLinkEmpty: css({\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n userSelect: 'text',\n whiteSpace: 'nowrap',\n fontWeight: theme.typography.fontWeightMedium,\n paddingRight: theme.spacing(1.5),\n }),\n cellLinkForColoredCell: css({\n cursor: 'pointer',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n userSelect: 'text',\n whiteSpace: 'nowrap',\n fontWeight: theme.typography.fontWeightMedium,\n textDecoration: 'underline',\n }),\n imageCellLink: css({\n cursor: 'pointer',\n overflow: 'hidden',\n height: '100%',\n }),\n headerFilter: css({\n background: 'transparent',\n border: 'none',\n label: 'headerFilter',\n padding: 0,\n }),\n paginationWrapper: css({\n display: 'flex',\n height: `${cellHeight}px`,\n justifyContent: 'center',\n alignItems: 'center',\n width: '100%',\n li: {\n marginBottom: 0,\n },\n }),\n paginationSummary: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n display: 'flex',\n justifyContent: 'flex-end',\n padding: theme.spacing(0, 1, 0, 2),\n }),\n\n tableContentWrapper: (totalColumnsWidth: number) => {\n const width = totalColumnsWidth !== undefined ? `${totalColumnsWidth}px` : '100%';\n\n return css({\n label: 'tableContentWrapper',\n width,\n display: 'flex',\n flexDirection: 'column',\n });\n },\n row: css({\n label: 'row',\n borderBottom: `1px solid ${borderColor}`,\n\n '&:hover': {\n backgroundColor: theme.components.table.rowHoverBackground,\n },\n\n '&:last-child': {\n borderBottom: 0,\n },\n }),\n imageCell: css({\n height: '100%',\n }),\n resizeHandle: css({\n label: 'resizeHandle',\n cursor: 'col-resize !important',\n display: 'inline-block',\n background: resizerColor,\n opacity: 0,\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: 'opacity 0.2s ease-in-out',\n },\n width: '8px',\n height: '100%',\n position: 'absolute',\n right: '-4px',\n borderRadius: theme.shape.radius.default,\n top: 0,\n touchAction: 'none',\n\n '&:hover': {\n opacity: 1,\n },\n }),\n typeIcon: css({\n marginRight: theme.spacing(1),\n color: theme.colors.text.secondary,\n }),\n noData: css({\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n }),\n expanderCell: css({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n height: `${rowHeight}px`,\n cursor: 'pointer',\n }),\n };\n}\n\nexport type TableStyles = ReturnType<typeof useTableStyles>;\n\nfunction getCellHeight(theme: GrafanaTheme2, cellHeightOption: TableCellHeight, cellPadding: number) {\n const bodyFontSize = theme.typography.fontSize;\n const lineHeight = theme.typography.body.lineHeight;\n\n switch (cellHeightOption) {\n case 'md':\n return 42;\n case 'lg':\n return 48;\n case 'sm':\n default:\n return cellPadding * 2 + bodyFontSize * lineHeight;\n }\n}\n","import { useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { IconName } from '../../types/icon';\nimport { ComponentSize } from '../../types/size';\nimport { Button, ButtonFill, ButtonVariant } from '../Button/Button';\nimport { Select } from '../Select/Select';\n\nexport interface ValuePickerProps<T> {\n /** Aria label applied to the input field */\n ['aria-label']?: string;\n /** Label to display on the picker button */\n label: string;\n /** Icon to display on the picker button */\n icon?: IconName;\n /** ValuePicker options */\n options: Array<SelectableValue<T>>;\n /** Callback to handle selected option */\n onChange: (value: SelectableValue<T>) => void;\n /** Which ButtonVariant to render */\n variant?: ButtonVariant;\n /** Size of button */\n size?: ComponentSize;\n /** Min width for select in grid units */\n minWidth?: number;\n /** Should the picker cover the full width of its parent */\n isFullWidth?: boolean;\n /** Control where the menu is rendered */\n menuPlacement?: 'auto' | 'bottom' | 'top';\n /** Which ButtonFill to use */\n fill?: ButtonFill;\n\n /** custom css applied to the button */\n buttonCss?: string;\n}\n\n/**\n * A component that looks like a button but transforms into a select when clicked.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/pickers-valuepicker--docs\n */\nexport function ValuePicker<T>({\n 'aria-label': ariaLabel,\n label,\n icon,\n options,\n onChange,\n variant,\n minWidth = 16,\n size = 'sm',\n isFullWidth = true,\n menuPlacement,\n fill,\n buttonCss,\n}: ValuePickerProps<T>) {\n const [isPicking, setIsPicking] = useState(false);\n const theme = useTheme2();\n\n return (\n <>\n {!isPicking && (\n <Button\n size={size || 'sm'}\n className={buttonCss}\n icon={icon || 'plus'}\n onClick={() => setIsPicking(true)}\n variant={variant}\n fill={fill}\n fullWidth={isFullWidth}\n data-testid={selectors.components.ValuePicker.button(ariaLabel ?? label)}\n >\n {label}\n </Button>\n )}\n\n {isPicking && (\n <span style={{ minWidth: theme.spacing(minWidth), flexGrow: isFullWidth ? 1 : undefined }}>\n <Select\n placeholder={label}\n options={options}\n aria-label={selectors.components.ValuePicker.select(ariaLabel ?? label)}\n isOpen\n onCloseMenu={() => setIsPicking(false)}\n autoFocus={true}\n onChange={(value) => {\n setIsPicking(false);\n onChange(value);\n }}\n menuPlacement={menuPlacement}\n />\n </span>\n )}\n </>\n );\n}\n","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as ui from '@grafana/schema';\n\nexport const pluginVersion = \"12.3.0\";\n\nexport interface Options {\n /**\n * Controls the height of the rows\n */\n cellHeight?: ui.TableCellHeight;\n /**\n * Enable pagination on the table\n */\n enablePagination?: boolean;\n /**\n * Represents the index of the selected frame\n */\n frameIndex: number;\n /**\n * Defines the number of columns to freeze on the left side of the table\n */\n frozenColumns?: {\n left?: number;\n };\n /**\n * limits the maximum height of a row, if text wrapping or dynamic height is enabled\n */\n maxRowHeight?: number;\n /**\n * Controls whether the panel should show the header\n */\n showHeader: boolean;\n /**\n * Controls whether the header should show icons for the column types\n */\n showTypeIcons?: boolean;\n /**\n * Used to control row sorting\n */\n sortBy?: Array<ui.TableSortByFieldState>;\n}\n\nexport const defaultOptions: Partial<Options> = {\n cellHeight: ui.TableCellHeight.Sm,\n frameIndex: 0,\n showHeader: true,\n showTypeIcons: false,\n sortBy: [],\n};\n\nexport interface FieldConfig extends ui.TableFieldOptions {}\n","import { cloneDeep, identity, isNumber, omit, pickBy } from 'lodash';\n\nimport {\n convertOldAngularValueMappings,\n FieldColorModeId,\n FieldConfig,\n fieldReducers,\n PanelModel,\n ReduceDataOptions,\n ReducerID,\n sortThresholds,\n Threshold,\n ThresholdsConfig,\n ThresholdsMode,\n validateFieldConfig,\n ValueMapping,\n VizOrientation,\n} from '@grafana/data';\nimport { LegendDisplayMode, OptionsWithLegend, OptionsWithTextFormatting } from '@grafana/schema';\n\nexport interface SingleStatBaseOptions extends OptionsWithTextFormatting {\n reduceOptions: ReduceDataOptions;\n orientation: VizOrientation;\n}\n\nconst optionsToKeep = ['reduceOptions', 'orientation'];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function sharedSingleStatPanelChangedHandler(\n panel: PanelModel<Partial<SingleStatBaseOptions>> | any,\n prevPluginId: string,\n prevOptions: any\n) {\n let options = panel.options;\n\n panel.fieldConfig = panel.fieldConfig || {\n defaults: {},\n overrides: [],\n };\n\n // Migrating from angular singlestat\n if ((prevPluginId === 'singlestat' || prevPluginId === 'grafana-singlestat-panel') && prevOptions.angular) {\n return migrateFromAngularSinglestat(panel, prevOptions);\n } else if (prevPluginId === 'graph') {\n // Migrating from Graph panel\n return migrateFromGraphPanel(panel, prevOptions);\n }\n\n for (const k of optionsToKeep) {\n if (prevOptions.hasOwnProperty(k)) {\n options[k] = cloneDeep(prevOptions[k]);\n }\n }\n\n return options;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction migrateFromGraphPanel(panel: PanelModel<Partial<SingleStatBaseOptions>> | any, prevOptions: any) {\n const graphOptions: GraphOptions = prevOptions.angular;\n\n const options: SingleStatBaseOptions & OptionsWithLegend = {\n orientation: VizOrientation.Auto,\n reduceOptions: {\n values: false,\n calcs: [],\n },\n legend: {\n displayMode: LegendDisplayMode.List,\n showLegend: true,\n placement: 'bottom',\n calcs: [],\n },\n };\n\n if (graphOptions.xaxis?.mode === 'series') {\n panel.fieldConfig = {\n ...panel.fieldConfig,\n defaults: {\n ...panel.fieldConfig.defaults,\n color: { mode: 'palette-classic' },\n },\n };\n\n // Value options calculation migration\n if (graphOptions.xaxis.values) {\n options.reduceOptions.calcs = getReducerForMigration(graphOptions.xaxis.values);\n }\n\n // Legend migration\n const legendConfig = graphOptions.legend;\n if (legendConfig) {\n if (legendConfig.show) {\n options.legend.displayMode = legendConfig.alignAsTable ? LegendDisplayMode.Table : LegendDisplayMode.List;\n } else {\n options.legend.showLegend = false;\n }\n\n if (legendConfig.rightSide) {\n options.legend.placement = 'right';\n }\n\n if (legendConfig.values) {\n const enabledLegendValues = pickBy(legendConfig, identity);\n options.legend.calcs = getReducersFromLegend(enabledLegendValues);\n }\n\n if (legendConfig.sideWidth) {\n options.legend.width = legendConfig.sideWidth;\n }\n }\n }\n\n return options;\n}\n\nfunction migrateFromAngularSinglestat(panel: PanelModel<Partial<SingleStatBaseOptions>> | any, prevOptions: any) {\n const prevPanel = prevOptions.angular;\n const reducer = fieldReducers.getIfExists(prevPanel.valueName);\n const options: SingleStatBaseOptions = {\n reduceOptions: {\n calcs: [reducer ? reducer.id : ReducerID.mean],\n },\n orientation: VizOrientation.Horizontal,\n };\n\n const defaults: FieldConfig = {};\n\n if (prevPanel.format) {\n defaults.unit = prevPanel.format;\n }\n\n if (prevPanel.tableColumn) {\n options.reduceOptions.fields = `/^${prevPanel.tableColumn}$/`;\n }\n\n if (prevPanel.nullPointMode) {\n defaults.nullValueMode = prevPanel.nullPointMode;\n }\n\n if (prevPanel.nullText) {\n defaults.noValue = prevPanel.nullText;\n }\n\n if (prevPanel.decimals || prevPanel.decimals === 0) {\n defaults.decimals = prevPanel.decimals;\n }\n\n // Convert thresholds and color values\n if (prevPanel.thresholds && prevPanel.colors) {\n const levels = prevPanel.thresholds.split(',').map((strVale: string) => {\n return Number(strVale.trim());\n });\n\n // One more color than threshold\n const thresholds: Threshold[] = [];\n for (const color of prevPanel.colors) {\n const idx = thresholds.length - 1;\n if (idx >= 0) {\n thresholds.push({ value: levels[idx], color });\n } else {\n thresholds.push({ value: -Infinity, color });\n }\n }\n\n defaults.thresholds = {\n mode: ThresholdsMode.Absolute,\n steps: thresholds,\n };\n }\n\n // Convert value mappings\n const mappings = convertOldAngularValueMappings(prevPanel, defaults.thresholds);\n if (mappings && mappings.length) {\n defaults.mappings = mappings;\n }\n\n if (prevPanel.gauge && prevPanel.gauge.show) {\n defaults.min = prevPanel.gauge.minValue;\n defaults.max = prevPanel.gauge.maxValue;\n }\n\n panel.fieldConfig.defaults = defaults;\n\n return options;\n}\n\nexport function sharedSingleStatMigrationHandler(panel: PanelModel<SingleStatBaseOptions>): SingleStatBaseOptions {\n if (!panel.options) {\n // This happens on the first load or when migrating from angular\n return {\n reduceOptions: {\n calcs: [ReducerID.mean],\n },\n orientation: VizOrientation.Horizontal,\n };\n }\n\n const previousVersion = parseFloat(panel.pluginVersion || '6.1');\n let options = panel.options as any;\n\n if (previousVersion < 6.2) {\n options = migrateFromValueOptions(options);\n }\n\n if (previousVersion < 6.3) {\n options = moveThresholdsAndMappingsToField(options);\n }\n\n const { fieldOptions } = options;\n\n if (previousVersion < 6.6 && fieldOptions) {\n // discard the old `override` options and enter an empty array\n if (fieldOptions && fieldOptions.override) {\n const { override, ...rest } = options.fieldOptions;\n options = {\n ...options,\n fieldOptions: {\n ...rest,\n overrides: [],\n },\n };\n }\n\n // Move thresholds to steps\n let thresholds = fieldOptions?.defaults?.thresholds;\n if (thresholds) {\n delete fieldOptions.defaults.thresholds;\n } else {\n thresholds = fieldOptions?.thresholds;\n delete fieldOptions.thresholds;\n }\n\n if (thresholds) {\n fieldOptions.defaults.thresholds = {\n mode: ThresholdsMode.Absolute,\n steps: thresholds,\n };\n }\n\n // Migrate color from simple string to a mode\n const { defaults } = fieldOptions;\n if (defaults.color && typeof defaults.color === 'string') {\n defaults.color = {\n mode: FieldColorModeId.Fixed,\n fixedColor: defaults.color,\n };\n }\n\n validateFieldConfig(defaults);\n }\n\n if (previousVersion < 7.0) {\n panel.fieldConfig = panel.fieldConfig || { defaults: {}, overrides: [] };\n panel.fieldConfig = {\n defaults:\n fieldOptions && fieldOptions.defaults\n ? { ...panel.fieldConfig.defaults, ...fieldOptions.defaults }\n : panel.fieldConfig.defaults,\n overrides:\n fieldOptions && fieldOptions.overrides\n ? [...panel.fieldConfig.overrides, ...fieldOptions.overrides]\n : panel.fieldConfig.overrides,\n };\n\n if (fieldOptions) {\n options.reduceOptions = {\n values: fieldOptions.values,\n limit: fieldOptions.limit,\n calcs: fieldOptions.calcs,\n };\n }\n\n delete options.fieldOptions;\n }\n\n if (previousVersion < 7.1) {\n // move title to displayName\n const oldTitle = (panel.fieldConfig.defaults as any).title;\n if (oldTitle !== undefined && oldTitle !== null) {\n panel.fieldConfig.defaults.displayName = oldTitle;\n delete (panel.fieldConfig.defaults as any).title;\n }\n }\n\n if (previousVersion < 8.0) {\n // Explicit min/max was removed for percent/percentunit in 8.0\n const config = panel.fieldConfig?.defaults;\n let unit = config?.unit;\n if (unit === 'percent') {\n if (!isNumber(config.min)) {\n config.min = 0;\n }\n if (!isNumber(config.max)) {\n config.max = 100;\n }\n } else if (unit === 'percentunit') {\n if (!isNumber(config.min)) {\n config.min = 0;\n }\n if (!isNumber(config.max)) {\n config.max = 1;\n }\n }\n }\n\n return options;\n}\n\nexport function moveThresholdsAndMappingsToField(old: any) {\n const { fieldOptions } = old;\n\n if (!fieldOptions) {\n return old;\n }\n\n const { mappings, ...rest } = old.fieldOptions;\n\n let thresholds: ThresholdsConfig | undefined = undefined;\n if (old.thresholds) {\n thresholds = {\n mode: ThresholdsMode.Absolute,\n steps: migrateOldThresholds(old.thresholds)!,\n };\n }\n\n return {\n ...old,\n fieldOptions: {\n ...rest,\n defaults: {\n ...fieldOptions.defaults,\n mappings,\n thresholds,\n },\n },\n };\n}\n\n/*\n * Moves valueMappings and thresholds from root to new fieldOptions object\n * Renames valueOptions to to defaults and moves it under fieldOptions\n */\nexport function migrateFromValueOptions(old: any) {\n const { valueOptions } = old;\n if (!valueOptions) {\n return old;\n }\n\n const fieldOptions: any = {};\n const fieldDefaults: any = {};\n\n fieldOptions.mappings = old.valueMappings;\n fieldOptions.thresholds = old.thresholds;\n fieldOptions.defaults = fieldDefaults;\n\n fieldDefaults.unit = valueOptions.unit;\n fieldDefaults.decimals = valueOptions.decimals;\n\n // Make sure the stats have a valid name\n if (valueOptions.stat) {\n const reducer = fieldReducers.get(valueOptions.stat);\n if (reducer) {\n fieldOptions.calcs = [reducer.id];\n }\n }\n\n fieldDefaults.min = old.minValue;\n fieldDefaults.max = old.maxValue;\n\n const newOptions = {\n ...old,\n fieldOptions,\n };\n\n return omit(newOptions, 'valueMappings', 'thresholds', 'valueOptions', 'minValue', 'maxValue');\n}\n\nexport function migrateOldThresholds(thresholds?: any[]): Threshold[] | undefined {\n if (!thresholds || !thresholds.length) {\n return undefined;\n }\n const copy = thresholds.map((t) => {\n return {\n // Drops 'index'\n value: t.value === null ? -Infinity : t.value,\n color: t.color,\n };\n });\n sortThresholds(copy);\n copy[0].value = -Infinity;\n return copy;\n}\n\n/**\n * @deprecated use convertOldAngularValueMappings instead\n * Convert the angular single stat mapping to new react style\n */\nexport function convertOldAngularValueMapping(panel: any): ValueMapping[] {\n return convertOldAngularValueMappings(panel);\n}\n\ninterface GraphOptions {\n xaxis: {\n mode: 'series' | 'time' | 'histogram';\n values?: string[];\n };\n legend: {\n show: boolean;\n alignAsTable: boolean;\n rightSide: boolean;\n values: boolean;\n min?: boolean;\n max?: boolean;\n avg?: boolean;\n current?: boolean;\n total?: boolean;\n sideWidth?: number;\n };\n}\n\nfunction getReducersFromLegend(obj: Record<string, unknown>): string[] {\n const ids: string[] = [];\n for (const key in obj) {\n const reducer = fieldReducers.getIfExists(key);\n if (reducer) {\n ids.push(reducer.id);\n }\n }\n return ids;\n}\n\n// same as public/app/plugins/panel/barchart/migrations.ts\nfunction getReducerForMigration(reducers: string[] | undefined) {\n const transformReducers: string[] = [];\n\n reducers?.forEach((reducer) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n if (!Object.values(ReducerID).includes(reducer as ReducerID)) {\n if (reducer === 'current') {\n transformReducers.push(ReducerID.lastNotNull);\n } else if (reducer === 'total') {\n transformReducers.push(ReducerID.sum);\n } else if (reducer === 'avg') {\n transformReducers.push(ReducerID.mean);\n }\n } else {\n transformReducers.push(reducer);\n }\n });\n\n return reducers ? transformReducers : [ReducerID.sum];\n}\n","import { DataSourceRef as CommonDataSourceRef, DataSourceRef, DataTopic } from '../common/common.gen';\nimport * as raw from '../raw/dashboard/x/dashboard_types.gen';\n\nimport { DataQuery } from './common.types';\n\nexport type { CommonDataSourceRef as DataSourceRef };\n\nexport interface Panel<TOptions = Record<string, unknown>, TCustomFieldConfig = Record<string, unknown>>\n extends Omit<raw.Panel, 'fieldConfig'> {\n fieldConfig?: FieldConfigSource<TCustomFieldConfig>;\n}\n\nexport interface RowPanel extends Omit<raw.RowPanel, 'panels'> {\n panels: Panel[];\n}\n\nexport enum VariableHide {\n dontHide,\n hideLabel,\n hideVariable,\n inControlsMenu,\n}\n\nexport interface VariableModel extends Omit<raw.VariableModel, 'datasource'> {\n datasource?: DataSourceRef | null;\n}\n\nexport interface Dashboard extends Omit<raw.Dashboard, 'templating' | 'annotations' | 'panels'> {\n panels?: Array<Panel | RowPanel>;\n annotations?: AnnotationContainer;\n templating?: {\n list?: VariableModel[];\n };\n}\n\nexport interface AnnotationQuery<TQuery extends DataQuery = DataQuery>\n extends Omit<raw.AnnotationQuery, 'target' | 'datasource'> {\n datasource?: DataSourceRef | null;\n target?: TQuery;\n // TODO: When migrating to snapshot queries, remove this property.\n // With snapshot queries annotations become a part of the panel snapshot data.\n snapshotData?: unknown;\n}\n\nexport interface AnnotationContainer extends Omit<raw.AnnotationContainer, 'list'> {\n list?: AnnotationQuery[]; // use the version from this file\n}\n\nexport interface FieldConfig<TOptions = Record<string, unknown>> extends raw.FieldConfig {\n custom?: TOptions & Record<string, unknown>;\n}\n\nexport interface FieldConfigSource<TOptions = Record<string, unknown>> extends Omit<raw.FieldConfigSource, 'defaults'> {\n defaults: FieldConfig<TOptions>;\n}\n\nexport interface MatcherConfig<TConfig = any> extends raw.MatcherConfig {\n options?: TConfig;\n}\n\nexport interface DataTransformerConfig<TOptions = any> extends raw.DataTransformerConfig {\n options: TOptions;\n topic?: DataTopic;\n}\n\nexport interface TimeOption extends raw.TimeOption {}\n\nexport interface TimePickerConfig extends raw.TimePickerConfig {}\n\nexport const defaultDashboard = raw.defaultDashboard as Dashboard;\nexport const defaultVariableModel = {\n ...raw.defaultVariableModel,\n} as VariableModel;\nexport const defaultTimePickerConfig = raw.defaultTimePickerConfig as TimePickerConfig;\nexport const defaultPanel: Partial<Panel> = raw.defaultPanel;\nexport const defaultRowPanel: Partial<Panel> = raw.defaultRowPanel;\nexport const defaultFieldConfig: Partial<FieldConfig> = raw.defaultFieldConfig;\nexport const defaultFieldConfigSource: Partial<FieldConfigSource> = raw.defaultFieldConfigSource;\nexport const defaultMatcherConfig: Partial<MatcherConfig> = raw.defaultMatcherConfig;\nexport const defaultAnnotationQuery: Partial<AnnotationQuery> = raw.defaultAnnotationQuery as AnnotationQuery;\nexport const defaultAnnotationContainer: Partial<AnnotationContainer> =\n raw.defaultAnnotationContainer as AnnotationContainer;\n","import { config, locationService } from '@grafana/runtime';\nimport { Dashboard } from '@grafana/schema/dist/esm/index.gen';\nimport { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';\nimport { Status } from '@grafana/schema/src/schema/dashboard/v2';\nimport { Resource } from 'app/features/apiserver/types';\nimport { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';\n\nimport { SaveDashboardCommand } from '../components/SaveDashboard/types';\n\nimport { DashboardWithAccessInfo } from './types';\n\nexport function isV2StoredVersion(version: string | undefined): boolean {\n return version === 'v2alpha1' || version === 'v2beta1';\n}\n\nexport function getDashboardsApiVersion(responseFormat?: 'v1' | 'v2') {\n const isDashboardSceneEnabled = config.featureToggles.dashboardScene;\n const isKubernetesDashboardsEnabled = config.featureToggles.kubernetesDashboards;\n const forcingOldDashboardArch = locationService.getSearch().get('scenes') === 'false';\n\n // Force legacy API when dashboard scene is disabled or explicitly forced\n if (!isDashboardSceneEnabled || forcingOldDashboardArch) {\n if (responseFormat === 'v2') {\n throw new Error('v2 is not supported for legacy architecture');\n }\n\n return isKubernetesDashboardsEnabled ? 'v1' : 'legacy';\n }\n\n // Unified manages redirection between v1 and v2, but when responseFormat is undefined we get the unified API\n if (isKubernetesDashboardsEnabled) {\n if (responseFormat === 'v1') {\n return 'v1';\n }\n if (responseFormat === 'v2') {\n return 'v2';\n }\n return 'unified';\n }\n\n // Handle non-kubernetes case\n if (responseFormat === 'v2') {\n throw new Error('v2 is not supported if kubernetes dashboards are disabled');\n }\n\n return 'legacy';\n}\n\n// This function is used to determine if the dashboard is in v2 format or also v1 format\nexport function isDashboardResource(\n obj?: DashboardDTO | DashboardWithAccessInfo<DashboardV2Spec> | DashboardWithAccessInfo<DashboardDataDTO> | null\n): obj is DashboardWithAccessInfo<DashboardV2Spec> | DashboardWithAccessInfo<DashboardDataDTO> {\n if (!obj) {\n return false;\n }\n // is v1 or v2 format?\n const isK8sDashboard = 'kind' in obj && obj.kind === 'DashboardWithAccessInfo';\n return isK8sDashboard;\n}\n\nexport function isDashboardV2Spec(obj: Dashboard | DashboardDataDTO | DashboardV2Spec): obj is DashboardV2Spec {\n return 'elements' in obj;\n}\n\nexport function isDashboardV0Spec(obj: DashboardDataDTO | DashboardV2Spec): obj is DashboardDataDTO {\n return !isDashboardV2Spec(obj); // not v2 spec means it's v1 spec\n}\n\nexport function isDashboardV2Resource(\n obj: DashboardDTO | DashboardWithAccessInfo<DashboardDataDTO> | DashboardWithAccessInfo<DashboardV2Spec>\n): obj is DashboardWithAccessInfo<DashboardV2Spec> {\n return isDashboardResource(obj) && isDashboardV2Spec(obj.spec);\n}\n\nexport function isV1DashboardCommand(\n cmd: SaveDashboardCommand<Dashboard | DashboardV2Spec>\n): cmd is SaveDashboardCommand<Dashboard> {\n return !isDashboardV2Spec(cmd.dashboard);\n}\n\nexport function isV1ClassicDashboard(obj: Dashboard | DashboardV2Spec): obj is Dashboard {\n return !isDashboardV2Spec(obj);\n}\n\nexport function isV2DashboardCommand(\n cmd: SaveDashboardCommand<Dashboard | DashboardV2Spec>\n): cmd is SaveDashboardCommand<DashboardV2Spec> {\n return isDashboardV2Spec(cmd.dashboard);\n}\n\n/**\n * Helper function to extract the stored version from a dashboard resource if conversion failed\n * @param item - Dashboard resource item\n * @returns The stored version string if conversion failed, undefined otherwise\n */\nexport function getFailedVersion(\n item: Resource<Dashboard | DashboardV2Spec | DashboardDataDTO, Status>\n): string | undefined {\n return item.status?.conversion?.failed ? item.status.conversion.storedVersion : undefined;\n}\n\n/**\n * Helper function to check if a dashboard resource has a failed conversion from specific versions\n * @param item - Dashboard resource item\n * @param versionPrefixes - Array of version prefixes to check (e.g., ['v1', 'v2'])\n * @returns True if conversion failed and stored version starts with any of the specified prefixes\n */\nexport function failedFromVersion(\n item: Resource<Dashboard | DashboardV2Spec | DashboardDataDTO, Status>,\n versionPrefixes: string[]\n): boolean {\n const storedVersion = getFailedVersion(item);\n return !!storedVersion && versionPrefixes.some((prefix) => storedVersion.startsWith(prefix));\n}\n","import { css, cx } from '@emotion/css';\nimport { HTMLProps } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, NavModelItem } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { IconName } from '../../types/icon';\nimport { clearButtonStyles } from '../Button/Button';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip } from '../Tooltip/Tooltip';\n\nimport { Counter } from './Counter';\n\nexport interface TabProps extends HTMLProps<HTMLElement> {\n label: string;\n active?: boolean;\n /** When provided, it is possible to use the tab as a hyperlink. Use in cases where the tabs update location. */\n href?: string;\n icon?: IconName;\n onChangeTab?: (event: React.MouseEvent<HTMLElement>) => void;\n /** A number rendered next to the text. Usually used to display the number of items in a tab's view. */\n counter?: number | null;\n /** Extra content, displayed after the tab label and counter */\n suffix?: NavModelItem['tabSuffix'];\n truncate?: boolean;\n tooltip?: string;\n /** When true, the tab will be disabled and not clickable */\n disabled?: boolean;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/navigation-tabs--docs\n */\nexport const Tab = React.forwardRef<HTMLElement, TabProps>(\n (\n {\n label,\n active,\n icon,\n onChangeTab,\n counter,\n suffix: Suffix,\n className,\n href,\n truncate,\n tooltip,\n disabled,\n ...otherProps\n },\n ref\n ) => {\n const tabsStyles = useStyles2(getStyles);\n const clearStyles = useStyles2(clearButtonStyles);\n\n const content = () => (\n <>\n {icon && <Icon name={icon} data-testid={`tab-icon-${icon}`} />}\n {label}\n {typeof counter === 'number' && <Counter value={counter} />}\n {Suffix && <Suffix className={tabsStyles.suffix} />}\n </>\n );\n\n const linkClass = cx(\n clearStyles,\n tabsStyles.link,\n active ? tabsStyles.activeStyle : tabsStyles.notActive,\n truncate && tabsStyles.linkTruncate,\n disabled && tabsStyles.disabled\n );\n\n const commonProps = {\n className: linkClass,\n 'data-testid': selectors.components.Tab.title(label),\n ...otherProps,\n onClick: disabled ? undefined : onChangeTab,\n role: 'tab',\n 'aria-selected': active,\n 'aria-disabled': disabled,\n tabIndex: disabled ? -1 : undefined,\n title: !!tooltip ? undefined : otherProps.title, // If tooltip is provided, don't set the title on the link or button, it looks weird\n };\n\n let tab = null;\n\n if (href) {\n tab = (\n <div className={cx(tabsStyles.item, truncate && tabsStyles.itemTruncate, className)}>\n <a\n {...commonProps}\n href={disabled ? undefined : href}\n // don't think we can avoid the type assertion here :(\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n ref={ref as React.ForwardedRef<HTMLAnchorElement>}\n >\n {content()}\n </a>\n </div>\n );\n } else {\n tab = (\n <div className={cx(tabsStyles.item, truncate && tabsStyles.itemTruncate, className)}>\n <button\n {...commonProps}\n type=\"button\"\n // don't think we can avoid the type assertion here :(\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n >\n {content()}\n </button>\n </div>\n );\n }\n\n if (tooltip) {\n return <Tooltip content={tooltip}>{tab}</Tooltip>;\n }\n\n return tab;\n }\n);\n\nTab.displayName = 'Tab';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n item: css({\n listStyle: 'none',\n position: 'relative',\n display: 'flex',\n whiteSpace: 'nowrap',\n padding: theme.spacing(0, 0.5),\n }),\n itemTruncate: css({\n maxWidth: theme.spacing(40),\n }),\n link: css({\n color: theme.colors.text.secondary,\n padding: theme.spacing(1, 1.5, 1),\n borderRadius: theme.shape.radius.default,\n\n display: 'block',\n height: '100%',\n\n svg: {\n marginRight: theme.spacing(1),\n },\n\n '&:focus-visible': getFocusStyles(theme),\n\n '&::before': {\n display: 'block',\n content: '\" \"',\n position: 'absolute',\n left: 0,\n right: 0,\n height: '2px',\n borderRadius: theme.shape.radius.default,\n bottom: 0,\n },\n }),\n linkTruncate: css({\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordBreak: 'break-word',\n overflow: 'hidden',\n }),\n notActive: css({\n 'a:hover, &:hover, &:focus': {\n color: theme.colors.text.primary,\n\n '&::before': {\n backgroundColor: theme.colors.action.hover,\n },\n },\n }),\n activeStyle: css({\n label: 'activeTabStyle',\n color: theme.colors.text.primary,\n overflow: 'hidden',\n\n '&::before': {\n backgroundImage: theme.colors.gradients.brandHorizontal,\n },\n }),\n suffix: css({\n marginLeft: theme.spacing(1),\n }),\n disabled: css({\n color: theme.colors.text.disabled,\n cursor: 'not-allowed',\n\n '&:hover, &:focus': {\n color: theme.colors.text.disabled,\n\n '&::before': {\n backgroundColor: 'transparent',\n },\n },\n }),\n };\n};\n","import { cloneDeep } from 'lodash';\n\nimport {\n dateTimeFormat,\n TimeRange,\n PanelData,\n DataTransformerConfig,\n DataFrameJSON,\n LoadingState,\n dataFrameToJSON,\n DataTopic,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport { GrafanaQueryType } from 'app/plugins/datasource/grafana/types';\n\nimport { DashboardGridItem } from '../../scene/layout-default/DashboardGridItem';\nimport { gridItemToPanel, vizPanelToPanel } from '../../serialization/transformSceneToSaveModel';\nimport { getQueryRunnerFor, isLibraryPanel } from '../../utils/utils';\n\nimport { Randomize, randomizeData } from './randomizer';\n\nexport function getPanelDataFrames(data?: PanelData): DataFrameJSON[] {\n const frames: DataFrameJSON[] = [];\n if (data?.series) {\n for (const f of data.series) {\n frames.push(dataFrameToJSON(f));\n }\n }\n if (data?.annotations) {\n for (const f of data.annotations) {\n const json = dataFrameToJSON(f);\n if (!json.schema?.meta) {\n json.schema!.meta = {};\n }\n json.schema!.meta.dataTopic = DataTopic.Annotations;\n frames.push(json);\n }\n }\n\n return frames;\n}\n\nexport function getGithubMarkdown(panel: VizPanel, snapshot: string): string {\n const info = {\n panelType: panel.state.pluginId,\n datasource: '??',\n };\n const grafanaVersion = config.buildInfo.versionString;\n\n let md = `| Key | Value |\n|--|--|\n| Panel | ${info.panelType} @ ${panel.state.pluginVersion ?? grafanaVersion} |\n| Grafana | ${grafanaVersion} // ${config.buildInfo.edition} |\n`;\n\n if (snapshot) {\n md += '<details><summary>Panel debug snapshot dashboard</summary>\\n\\n```json\\n' + snapshot + '\\n```\\n</details>';\n }\n return md;\n}\n\nexport async function getDebugDashboard(panel: VizPanel, rand: Randomize, timeRange: TimeRange) {\n let saveModel: ReturnType<typeof gridItemToPanel> = { type: '' };\n const gridItem = panel.parent as DashboardGridItem;\n\n if (isLibraryPanel(panel)) {\n saveModel = {\n ...gridItemToPanel(gridItem),\n ...vizPanelToPanel(panel),\n };\n } else {\n saveModel = gridItemToPanel(gridItem);\n }\n\n const dashboard = cloneDeep(embeddedDataTemplate);\n const info = {\n panelType: panel.state.pluginId,\n datasource: '??',\n };\n\n // reproducable\n const queryRunner = getQueryRunnerFor(panel)!;\n\n if (!queryRunner.state.data) {\n return;\n }\n\n const data = queryRunner.state.data;\n\n const dsref = queryRunner?.state.datasource;\n const frames = randomizeData(getPanelDataFrames(data), rand);\n const grafanaVersion = config.buildInfo.versionString;\n const queries = queryRunner.state.queries ?? [];\n const annotationsCount = data.annotations ? data.annotations.reduce((acc, c) => c.length + acc, 0) : 0;\n const html = `<table width=\"100%\">\n <tr>\n <th width=\"2%\">Panel</th>\n <td >${info.panelType} @ ${saveModel.pluginVersion ?? grafanaVersion}</td>\n </tr>\n <tr>\n <th>Queries</th>\n <td>${queries\n .map((t) => {\n const ds = t.datasource ?? dsref;\n return `${t.refId}[${ds?.type}]`;\n })\n .join(', ')}</td>\n </tr>\n ${getTransformsRow(saveModel)}\n ${getDataRow(data, frames)}\n ${getAnnotationsRow(data)}\n <tr>\n <th>Grafana</th>\n <td>${grafanaVersion} // ${config.buildInfo.edition}</td>\n </tr>\n </table>`.trim();\n\n // Replace the panel with embedded data\n dashboard.panels[0] = {\n ...saveModel,\n ...dashboard.panels[0],\n targets: [\n {\n refId: 'A',\n datasource: {\n type: 'grafana',\n uid: 'grafana',\n },\n queryType: GrafanaQueryType.Snapshot,\n snapshot: frames,\n },\n ],\n };\n\n // delete library panel not to load the panel from the db\n delete dashboard.panels[0].libraryPanel;\n\n if (saveModel.transformations?.length) {\n const last = dashboard.panels[dashboard.panels.length - 1];\n last.title = last.title + ' (after transformations)';\n\n const before = cloneDeep(last);\n before.id = 100;\n before.title = 'Data (before transformations)';\n before.gridPos.w = 24; // full width\n before.targets[0].withTransforms = false;\n dashboard.panels.push(before);\n }\n\n if (annotationsCount > 0) {\n const DEBUG_DASHBOARD_TITLE_DO_NOT_TRANSLATE = 'Annotations';\n dashboard.panels.push({\n id: 7,\n gridPos: {\n h: 6,\n w: 24,\n x: 0,\n y: 20,\n },\n type: 'table',\n title: DEBUG_DASHBOARD_TITLE_DO_NOT_TRANSLATE,\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n options: {\n showTypeIcons: true,\n },\n targets: [\n {\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n panelId: 2,\n withTransforms: true,\n topic: DataTopic.Annotations,\n refId: 'A',\n },\n ],\n });\n }\n\n dashboard.panels[1].options.content = html;\n dashboard.panels[2].options.content = JSON.stringify(saveModel, null, 2);\n\n dashboard.title = `Debug: ${saveModel.title} // ${dateTimeFormat(new Date())}`;\n dashboard.tags = ['debug', `debug-${info.panelType}`];\n dashboard.time = {\n from: timeRange.from.toISOString(),\n to: timeRange.to.toISOString(),\n };\n\n return dashboard;\n}\n\n// eslint-disable-next-line\nfunction getTransformsRow(saveModel: any): string {\n if (!saveModel.transformations) {\n return '';\n }\n return `<tr>\n <th>Transform</th>\n <td>${saveModel.transformations.map((t: DataTransformerConfig) => t.id).join(', ')}</td>\n </tr>`;\n}\n\nfunction getDataRow(data: PanelData, frames: DataFrameJSON[]): string {\n let frameCount = data.series.length ?? 0;\n let fieldCount = 0;\n let rowCount = 0;\n for (const frame of data.series) {\n fieldCount += frame.fields.length;\n rowCount += frame.length;\n }\n return (\n '<tr>' +\n '<th>Data</th>' +\n '<td>' +\n `${data.state !== LoadingState.Done ? data.state : ''} ` +\n `${frameCount} frames, ${fieldCount} fields, ` +\n `${rowCount} rows ` +\n // `(${formattedValueToString(getValueFormat('decbytes')(raw?.length))} JSON)` +\n '</td>' +\n '</tr>'\n );\n}\n\nfunction getAnnotationsRow(data: PanelData): string {\n if (!data.annotations?.length) {\n return '';\n }\n\n return `<tr>\n <th>Annotations</th>\n <td>${data.annotations.reduce((acc, c) => c.length + acc, 0)}</td>\n</tr>`;\n}\n\n// eslint-disable-next-line\nconst embeddedDataTemplate: any = {\n // should be dashboard model when that is accurate enough\n panels: [\n {\n id: 2,\n title: 'Reproduced with embedded data',\n datasource: {\n type: 'grafana',\n uid: 'grafana',\n },\n gridPos: {\n h: 13,\n w: 15,\n x: 0,\n y: 0,\n },\n },\n {\n gridPos: {\n h: 7,\n w: 9,\n x: 15,\n y: 0,\n },\n id: 5,\n options: {\n content: '...',\n mode: 'html',\n },\n title: 'Debug info',\n type: 'text',\n },\n {\n id: 6,\n title: 'Original Panel JSON',\n type: 'text',\n gridPos: {\n h: 13,\n w: 9,\n x: 15,\n y: 7,\n },\n options: {\n content: '...',\n mode: 'code',\n code: {\n language: 'json',\n showLineNumbers: true,\n showMiniMap: true,\n },\n },\n },\n {\n id: 3,\n title: 'Data from panel above',\n type: 'table',\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n gridPos: {\n h: 7,\n w: 15,\n x: 0,\n y: 13,\n },\n options: {\n showTypeIcons: true,\n },\n targets: [\n {\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n panelId: 2,\n withTransforms: true,\n refId: 'A',\n },\n ],\n },\n ],\n schemaVersion: 37,\n};\n","import saveAs from 'file-saver';\n\nimport { dateTimeFormat, formattedValueToString, getValueFormat, SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { sceneGraph, SceneObject, VizPanel } from '@grafana/scenes';\nimport { StateManagerBase } from 'app/core/services/StateManagerBase';\n\nimport { transformSaveModelToScene } from '../../serialization/transformSaveModelToScene';\n\nimport { Randomize } from './randomizer';\nimport { getDebugDashboard, getGithubMarkdown } from './utils';\n\ninterface SupportSnapshotState {\n currentTab: SnapshotTab;\n showMessage: ShowMessage;\n options: Array<SelectableValue<ShowMessage>>;\n snapshotText: string;\n markdownText: string;\n snapshotSize?: string;\n randomize: Randomize;\n loading?: boolean;\n error?: {\n title: string;\n message: string;\n };\n panel: VizPanel;\n panelTitle: string;\n\n // eslint-disable-next-line\n snapshot?: any;\n snapshotUpdate: number;\n scene?: SceneObject;\n}\n\nexport enum SnapshotTab {\n Support,\n Data,\n}\n\nexport enum ShowMessage {\n PanelSnapshot,\n GithubComment,\n}\n\nexport class SupportSnapshotService extends StateManagerBase<SupportSnapshotState> {\n constructor(panel: VizPanel) {\n super({\n panel,\n panelTitle: sceneGraph.interpolate(panel, panel.state.title, {}, 'text'),\n currentTab: SnapshotTab.Support,\n showMessage: ShowMessage.GithubComment,\n snapshotText: '',\n markdownText: '',\n randomize: {},\n snapshotUpdate: 0,\n options: [\n {\n label: t('dashboard-scene.support-snapshot-service.label.git-hub-comment', 'GitHub comment'),\n description: 'Copy and paste this message into a GitHub issue or comment',\n value: ShowMessage.GithubComment,\n },\n {\n label: t('dashboard-scene.support-snapshot-service.label.panel-support-snapshot', 'Panel support snapshot'),\n description: t(\n 'dashboard-scene.support-snapshot-service.description.dashboard-troubleshoot-visualization-issues',\n 'Dashboard JSON used to help troubleshoot visualization issues'\n ),\n value: ShowMessage.PanelSnapshot,\n },\n ],\n });\n }\n\n async buildDebugDashboard() {\n const { panel, randomize, snapshotUpdate } = this.state;\n const snapshot = await getDebugDashboard(panel, randomize, sceneGraph.getTimeRange(panel).state.value);\n const snapshotText = JSON.stringify(snapshot, null, 2);\n const markdownText = getGithubMarkdown(panel, snapshotText);\n const snapshotSize = formattedValueToString(getValueFormat('bytes')(snapshotText?.length ?? 0));\n\n let scene: SceneObject | undefined = undefined;\n if (snapshot) {\n try {\n const dash = transformSaveModelToScene({ dashboard: snapshot, meta: { isEmbedded: true } });\n scene = dash.state.body; // skip the wrappers\n } catch (ex) {\n console.log('Error creating scene:', ex);\n }\n }\n\n this.setState({ snapshot, snapshotText, markdownText, snapshotSize, snapshotUpdate: snapshotUpdate + 1, scene });\n }\n\n onCurrentTabChange = (value: SnapshotTab) => {\n this.setState({ currentTab: value });\n };\n\n onShowMessageChange = (value: SelectableValue<ShowMessage>) => {\n this.setState({ showMessage: value.value! });\n };\n\n onGetMarkdownForClipboard = () => {\n const { markdownText } = this.state;\n const maxLen = Math.pow(1024, 2) * 1.5; // 1.5MB\n\n if (markdownText.length > maxLen) {\n this.setState({\n error: {\n title: t(\n 'dashboard-scene.support-snapshot-service.title.copy-to-clipboard-failed',\n 'Copy to clipboard failed'\n ),\n message: 'Snapshot is too large, consider download and attaching a file instead',\n },\n });\n\n return '';\n }\n\n return markdownText;\n };\n\n onDownloadDashboard = () => {\n const { snapshotText, panelTitle } = this.state;\n const blob = new Blob([snapshotText], {\n type: 'text/plain',\n });\n const fileName = `debug-${panelTitle}-${dateTimeFormat(new Date())}.json.txt`;\n saveAs(blob, fileName);\n };\n\n onSetSnapshotText = (snapshotText: string) => {\n this.setState({ snapshotText });\n };\n\n onToggleRandomize = (k: keyof Randomize) => {\n const { randomize } = this.state;\n this.setState({ randomize: { ...randomize, [k]: !randomize[k] } });\n };\n}\n","import { css } from '@emotion/css';\nimport { useMemo, useEffect } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { GrafanaTheme2, FeatureState } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { VizPanel } from '@grafana/scenes';\nimport {\n Drawer,\n Tab,\n TabsBar,\n CodeEditor,\n useStyles2,\n Field,\n InlineSwitch,\n Button,\n Spinner,\n Alert,\n FeatureBadge,\n Select,\n ClipboardButton,\n Stack,\n TextLink,\n} from '@grafana/ui';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { AccessControlAction } from 'app/types/accessControl';\n\nimport { ShowMessage, SnapshotTab, SupportSnapshotService } from './SupportSnapshotService';\n\ninterface Props {\n panel: VizPanel;\n onClose: () => void;\n}\n\nexport function HelpWizard({ panel, onClose }: Props) {\n const styles = useStyles2(getStyles);\n const service = useMemo(() => new SupportSnapshotService(panel), [panel]);\n const plugin = panel.getPlugin();\n\n const {\n currentTab,\n loading,\n error,\n options,\n showMessage,\n snapshotSize,\n markdownText,\n snapshotText,\n randomize,\n panelTitle,\n scene,\n } = service.useState();\n\n useEffect(() => {\n service.buildDebugDashboard();\n }, [service, plugin, randomize]);\n\n if (!plugin) {\n return null;\n }\n\n const tabs = [\n { label: t('dashboard-scene.help-wizard.tabs.label.snapshot', 'Snapshot'), value: SnapshotTab.Support },\n { label: t('dashboard-scene.help-wizard.tabs.label.data', 'Data'), value: SnapshotTab.Data },\n ];\n\n const hasSupportBundleAccess =\n config.supportBundlesEnabled && contextSrv.hasPermission(AccessControlAction.ActionSupportBundlesCreate);\n\n return (\n <Drawer\n title={t('dashboard-scene.help-wizard.title-get-help-with-this-panel', 'Get help with this panel')}\n size=\"lg\"\n onClose={onClose}\n subtitle={\n <Stack direction=\"column\" gap={1}>\n <Stack direction=\"row\" gap={1}>\n <FeatureBadge featureState={FeatureState.beta} />\n <TextLink href=\"https://grafana.com/docs/grafana/latest/troubleshooting/\" external>\n <Trans i18nKey=\"dashboard-scene.help-wizard.troubleshooting-docs\">Troubleshooting docs</Trans>\n </TextLink>\n </Stack>\n <span className=\"muted\">\n <Trans i18nKey=\"dashboard-scene.help-wizard.troubleshooting-request-help\">\n To request troubleshooting help, send a snapshot of this panel to Grafana Labs Technical Support. The\n snapshot contains query response data and panel settings.\n </Trans>\n </span>\n {hasSupportBundleAccess && (\n <span className=\"muted\">\n <Trans i18nKey=\"dashboard-scene-help-wizard.support-bundle\">\n You can also retrieve a support bundle containing information concerning your Grafana instance and\n configured datasources in the <TextLink href=\"/support-bundles\">support bundles section</TextLink>.\n </Trans>\n </span>\n )}\n </Stack>\n }\n tabs={\n <TabsBar>\n {tabs.map((t, index) => (\n <Tab\n key={`${t.value}-${index}`}\n label={t.label}\n active={t.value === currentTab}\n onChangeTab={() => service.onCurrentTabChange(t.value!)}\n />\n ))}\n </TabsBar>\n }\n >\n {loading && <Spinner />}\n {error && <Alert title={error.title}>{error.message}</Alert>}\n\n {currentTab === SnapshotTab.Data && (\n <div className={styles.code}>\n <div className={styles.opts}>\n <Field label={t('dashboard-scene.help-wizard.label-template', 'Template')} className={styles.field}>\n <Select options={options} value={showMessage} onChange={service.onShowMessageChange} />\n </Field>\n\n {showMessage === ShowMessage.GithubComment ? (\n <ClipboardButton icon=\"copy\" getText={service.onGetMarkdownForClipboard}>\n <Trans i18nKey=\"dashboard-scene.help-wizard.copy-to-clipboard\">Copy to clipboard</Trans>\n </ClipboardButton>\n ) : (\n <Button icon=\"download-alt\" onClick={service.onDownloadDashboard}>\n <Trans i18nKey=\"dashboard-scene.help-wizard.download-snapshot\">Download ({{ snapshotSize }})</Trans>\n </Button>\n )}\n </div>\n <AutoSizer disableWidth>\n {({ height }) => (\n <CodeEditor\n width=\"100%\"\n height={height}\n language={showMessage === ShowMessage.GithubComment ? 'markdown' : 'json'}\n showLineNumbers={true}\n showMiniMap={true}\n value={showMessage === ShowMessage.GithubComment ? markdownText : snapshotText}\n readOnly={false}\n onBlur={service.onSetSnapshotText}\n />\n )}\n </AutoSizer>\n </div>\n )}\n {currentTab === SnapshotTab.Support && (\n <>\n <Field\n label={t('dashboard-scene.help-wizard.label-randomize-data', 'Randomize data')}\n description={t(\n 'dashboard-scene.help-wizard.description-randomize-data',\n 'Modify the original data to hide sensitive information. Note the lengths will stay the same, and duplicate values will be equal.'\n )}\n >\n <Stack>\n <InlineSwitch\n label={t('dashboard-scene.help-wizard.randomize-labels-label-labels', 'Labels')}\n id=\"randomize-labels\"\n showLabel={true}\n value={Boolean(randomize.labels)}\n onChange={() => service.onToggleRandomize('labels')}\n />\n <InlineSwitch\n label={t('dashboard-scene.help-wizard.randomize-field-names-label-field-names', 'Field names')}\n id=\"randomize-field-names\"\n showLabel={true}\n value={Boolean(randomize.names)}\n onChange={() => service.onToggleRandomize('names')}\n />\n <InlineSwitch\n label={t('dashboard-scene.help-wizard.randomize-string-values-label-string-values', 'String values')}\n id=\"randomize-string-values\"\n showLabel={true}\n value={Boolean(randomize.values)}\n onChange={() => service.onToggleRandomize('values')}\n />\n </Stack>\n </Field>\n\n <Field\n label={t('dashboard-scene.help-wizard.label-support-snapshot', 'Support snapshot')}\n description={t('dashboard-scene.help-wizard.description-support-snapshot', 'Panel: {{panelTitle}}', {\n panelTitle,\n })}\n >\n <Stack>\n <Button icon=\"download-alt\" onClick={service.onDownloadDashboard}>\n <Trans i18nKey=\"dashboard-scene.help-wizard.download-dashboard\">Dashboard ({{ snapshotSize }})</Trans>\n </Button>\n <ClipboardButton\n icon=\"github\"\n getText={service.onGetMarkdownForClipboard}\n title={t(\n 'dashboard-scene.help-wizard.title-complete-git-hub-comment-clipboard',\n 'Copy a complete GitHub comment to the clipboard'\n )}\n >\n <Trans i18nKey=\"dashboard-scene.help-wizard.copy-to-clipboard\">Copy to clipboard</Trans>\n </ClipboardButton>\n </Stack>\n </Field>\n\n <div style={{ height: '100%', overflow: 'auto', display: 'flex' }}>\n {scene && <scene.Component model={scene} />}\n </div>\n </>\n )}\n </Drawer>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n code: css({\n flexGrow: 1,\n height: '100%',\n overflow: 'scroll',\n }),\n field: css({\n width: '100%',\n }),\n opts: css({\n display: 'flex',\n width: '100%',\n flexGrow: 0,\n alignItems: 'center',\n justifyContent: 'flex-end',\n\n '& button': {\n marginLeft: theme.spacing(1),\n },\n }),\n };\n};\n","import { LoadingState } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport {\n SceneComponentProps,\n SceneDataProvider,\n SceneDataTransformer,\n sceneGraph,\n SceneObjectBase,\n SceneObjectRef,\n SceneObjectState,\n VizPanel,\n} from '@grafana/scenes';\nimport { InspectTab } from 'app/features/inspector/types';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\n\nimport { InspectDataTab as InspectDataTabOld } from '../../inspector/InspectDataTab';\n\nexport interface InspectDataTabState extends SceneObjectState {\n panelRef: SceneObjectRef<VizPanel>;\n options: GetDataOptions;\n}\n\nexport class InspectDataTab extends SceneObjectBase<InspectDataTabState> {\n public constructor(state: Omit<InspectDataTabState, 'options'>) {\n super({\n ...state,\n options: {\n withTransforms: false,\n withFieldConfig: true,\n },\n });\n }\n\n public getTabLabel() {\n return t('dashboard.inspect.data-tab', 'Data');\n }\n\n public getTabValue() {\n return InspectTab.Data;\n }\n\n public onOptionsChange = (options: GetDataOptions) => {\n this.setState({ options });\n };\n\n static Component = ({ model }: SceneComponentProps<InspectDataTab>) => {\n const { options } = model.useState();\n const panel = model.state.panelRef.resolve();\n const dataProvider = sceneGraph.getData(panel);\n const { data } = getDataProviderToSubscribeTo(dataProvider, options.withTransforms).useState();\n const timeRange = sceneGraph.getTimeRange(panel);\n\n if (!data) {\n <div>\n <Trans i18nKey=\"dashboard-scene.inspect-data-tab.no-data-found\">No data found</Trans>\n </div>;\n }\n\n return (\n <InspectDataTabOld\n isLoading={data?.state === LoadingState.Loading}\n data={data?.series}\n options={options}\n hasTransformations={hasTransformations(dataProvider)}\n timeZone={timeRange.getTimeZone()}\n panelPluginId={panel.state.pluginId}\n dataName={sceneGraph.interpolate(panel, panel.state.title)}\n fieldConfig={panel.state.fieldConfig}\n onOptionsChange={model.onOptionsChange}\n />\n );\n };\n}\n\nfunction hasTransformations(dataProvider: SceneDataProvider) {\n if (dataProvider instanceof SceneDataTransformer) {\n return dataProvider.state.transformations.length > 0;\n }\n\n return false;\n}\n\nfunction getDataProviderToSubscribeTo(dataProvider: SceneDataProvider, withTransforms: boolean) {\n if (!withTransforms && dataProvider instanceof SceneDataTransformer && dataProvider.state.$data) {\n return dataProvider.state.$data;\n }\n\n return dataProvider;\n}\n","import { isEqual } from 'lodash';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Trans, t } from '@grafana/i18n';\nimport {\n SceneComponentProps,\n SceneDataTransformer,\n sceneGraph,\n SceneGridItemStateLike,\n SceneObjectBase,\n SceneObjectRef,\n SceneObjectState,\n SceneQueryRunner,\n sceneUtils,\n VizPanel,\n} from '@grafana/scenes';\nimport { LibraryPanel } from '@grafana/schema/';\nimport { Button, CodeEditor, Field, Select, useStyles2 } from '@grafana/ui';\nimport { isDashboardV2Spec } from 'app/features/dashboard/api/utils';\nimport { getPanelDataFrames } from 'app/features/dashboard/components/HelpWizard/utils';\nimport { PanelModel } from 'app/features/dashboard/state/PanelModel';\nimport { getPanelInspectorStyles2 } from 'app/features/inspector/styles';\nimport { InspectTab } from 'app/features/inspector/types';\nimport { getPrettyJSON } from 'app/features/inspector/utils/utils';\nimport { reportPanelInspectInteraction } from 'app/features/search/page/reporting';\n\nimport { DashboardGridItem } from '../scene/layout-default/DashboardGridItem';\nimport { buildGridItemForPanel } from '../serialization/transformSaveModelToScene';\nimport { gridItemToPanel, vizPanelToPanel } from '../serialization/transformSceneToSaveModel';\nimport { vizPanelToSchemaV2 } from '../serialization/transformSceneToSaveModelSchemaV2';\nimport {\n getDashboardSceneFor,\n getLibraryPanelBehavior,\n getPanelIdForVizPanel,\n getQueryRunnerFor,\n isLibraryPanel,\n} from '../utils/utils';\n\nexport type ShowContent = 'panel-json' | 'panel-data' | 'data-frames';\n\nexport interface InspectJsonTabState extends SceneObjectState {\n panelRef: SceneObjectRef<VizPanel>;\n source: ShowContent;\n jsonText: string;\n onClose: () => void;\n}\n\nexport class InspectJsonTab extends SceneObjectBase<InspectJsonTabState> {\n public constructor(state: Omit<InspectJsonTabState, 'source' | 'jsonText'>) {\n super({\n ...state,\n source: 'panel-json',\n jsonText: getJsonText('panel-json', state.panelRef.resolve()),\n });\n }\n\n public getTabLabel() {\n return t('dashboard.inspect.json-tab', 'JSON');\n }\n\n public getTabValue() {\n return InspectTab.JSON;\n }\n\n public getOptions(): Array<SelectableValue<ShowContent>> {\n const panel = this.state.panelRef.resolve();\n const dataProvider = panel.state.$data ?? panel.parent?.state.$data;\n\n const options: Array<SelectableValue<ShowContent>> = [\n {\n label: t('dashboard.inspect-json.panel-json-label', 'Panel JSON'),\n description: t(\n 'dashboard.inspect-json.panel-json-description',\n 'The model saved in the dashboard JSON that configures how everything works.'\n ),\n value: 'panel-json',\n },\n ];\n\n if (dataProvider) {\n options.push({\n label: t('dashboard.inspect-json.panel-data-label', 'Panel data'),\n description: t(\n 'dashboard.inspect-json.panel-data-description',\n 'The raw model passed to the panel visualization'\n ),\n value: 'panel-data',\n });\n options.push({\n label: t('dashboard.inspect-json.dataframe-label', 'DataFrame JSON (from Query)'),\n description: t(\n 'dashboard.inspect-json.dataframe-description',\n 'Raw data without transformations and field config applied. '\n ),\n value: 'data-frames',\n });\n }\n\n return options;\n }\n\n public onChangeSource = (value: SelectableValue<ShowContent>) => {\n this.setState({ source: value.value!, jsonText: getJsonText(value.value!, this.state.panelRef.resolve()) });\n };\n\n public onApplyChange = () => {\n const panel = this.state.panelRef.resolve();\n const dashboard = getDashboardSceneFor(panel);\n const jsonObj = JSON.parse(this.state.jsonText);\n\n const panelModel = new PanelModel(jsonObj);\n const gridItem = buildGridItemForPanel(panelModel);\n const newState = sceneUtils.cloneSceneObjectState(gridItem.state);\n\n if (!(panel.parent instanceof DashboardGridItem)) {\n console.error('Cannot update state of panel', panel, gridItem);\n return;\n }\n\n this.state.onClose();\n\n if (!dashboard.state.isEditing) {\n dashboard.onEnterEditMode();\n }\n\n panel.parent.setState(newState);\n\n //Report relevant updates\n reportPanelInspectInteraction(InspectTab.JSON, 'apply', {\n panel_type_changed: panel.state.pluginId !== panelModel.type,\n panel_id_changed: getPanelIdForVizPanel(panel) !== panelModel.id,\n panel_grid_pos_changed: hasGridPosChanged(panel.parent.state, newState),\n panel_targets_changed: hasQueriesChanged(getQueryRunnerFor(panel), getQueryRunnerFor(newState.$data)),\n });\n };\n\n public onCodeEditorBlur = (value: string) => {\n this.setState({ jsonText: value });\n };\n\n public isEditable() {\n if (this.state.source !== 'panel-json') {\n return false;\n }\n\n const panel = this.state.panelRef.resolve();\n\n // Library panels are not editable from the inspect\n if (isLibraryPanel(panel)) {\n return false;\n }\n\n // V2 dashboard panels are not editable from the inspect\n if (isDashboardV2Spec(getDashboardSceneFor(panel).getSaveModel())) {\n return false;\n }\n\n // Only support normal grid items for now and not repeated items\n if (panel.parent instanceof DashboardGridItem && panel.parent.isRepeated()) {\n return false;\n }\n\n const dashboard = getDashboardSceneFor(panel);\n return dashboard.state.meta.canEdit;\n }\n\n static Component = InspectJsonTabComponent;\n}\n\nfunction InspectJsonTabComponent({ model }: SceneComponentProps<InspectJsonTab>) {\n const { source: show, jsonText } = model.useState();\n const styles = useStyles2(getPanelInspectorStyles2);\n const options = model.getOptions();\n\n return (\n <div className={styles.wrap}>\n <div className={styles.toolbar} data-testid={selectors.components.PanelInspector.Json.content}>\n <Field label={t('dashboard.inspect-json.select-source', 'Select source')} className=\"flex-grow-1\">\n <Select\n inputId=\"select-source-dropdown\"\n options={options}\n value={options.find((v) => v.value === show) ?? options[0].value}\n onChange={model.onChangeSource}\n />\n </Field>\n {model.isEditable() && (\n <Button className={styles.toolbarItem} onClick={model.onApplyChange}>\n <Trans i18nKey=\"dashboard-scene.inspect-json-tab.apply\">Apply</Trans>\n </Button>\n )}\n </div>\n\n <div className={styles.content}>\n <AutoSizer disableWidth>\n {({ height }) => (\n <CodeEditor\n width=\"100%\"\n height={height}\n language=\"json\"\n showLineNumbers={true}\n showMiniMap={jsonText.length > 100}\n value={jsonText}\n readOnly={!model.isEditable()}\n onBlur={model.onCodeEditorBlur}\n />\n )}\n </AutoSizer>\n </div>\n </div>\n );\n}\n\nfunction getJsonText(show: ShowContent, panel: VizPanel): string {\n let objToStringify: object = {};\n\n switch (show) {\n case 'panel-json': {\n reportPanelInspectInteraction(InspectTab.JSON, 'panelData');\n\n const isInspectingLibraryPanel = isLibraryPanel(panel);\n const gridItem = panel.parent;\n\n if (isInspectingLibraryPanel) {\n objToStringify = libraryPanelToLegacyRepresentation(panel);\n break;\n }\n\n if (isDashboardV2Spec(getDashboardSceneFor(panel).getSaveModel())) {\n objToStringify = vizPanelToSchemaV2(panel);\n break;\n } else {\n if (gridItem instanceof DashboardGridItem) {\n objToStringify = gridItemToPanel(gridItem);\n }\n }\n\n break;\n }\n\n case 'panel-data': {\n reportPanelInspectInteraction(InspectTab.JSON, 'panelJSON');\n\n const dataProvider = sceneGraph.getData(panel);\n if (dataProvider.state.data) {\n objToStringify = panel.applyFieldConfig(dataProvider.state.data);\n }\n break;\n }\n\n case 'data-frames': {\n reportPanelInspectInteraction(InspectTab.JSON, 'dataFrame');\n const dataProvider = sceneGraph.getData(panel);\n\n if (dataProvider.state.data) {\n // Get raw untransformed data\n if (dataProvider instanceof SceneDataTransformer && dataProvider.state.$data?.state.data) {\n objToStringify = getPanelDataFrames(dataProvider.state.$data!.state.data);\n } else {\n objToStringify = getPanelDataFrames(dataProvider.state.data);\n }\n }\n }\n }\n\n return getPrettyJSON(objToStringify);\n}\n\n/**\n *\n * @param panel Must hold a LibraryPanel behavior\n * @returns object representation of the legacy library panel structure.\n */\nfunction libraryPanelToLegacyRepresentation(panel: VizPanel<{}, {}>) {\n if (!isLibraryPanel(panel)) {\n throw 'Panel not a library panel';\n }\n\n const gridItem = panel.parent;\n\n if (!(gridItem instanceof DashboardGridItem)) {\n throw 'LibraryPanel not child of DashboardGridItem';\n }\n\n const gridPos = {\n x: gridItem.state.x || 0,\n y: gridItem.state.y || 0,\n h: gridItem.state.height || 0,\n w: gridItem.state.width || 0,\n };\n const libraryPanelObj = vizPanelToLibraryPanel(panel);\n const panelObj = vizPanelToPanel(panel.clone({ $behaviors: undefined }), gridPos, false, gridItem);\n\n return { libraryPanel: { ...libraryPanelObj }, ...panelObj };\n}\n\nfunction vizPanelToLibraryPanel(panel: VizPanel): LibraryPanel {\n if (!isLibraryPanel(panel)) {\n throw new Error('Panel not a Library panel');\n }\n\n const libraryPanel = getLibraryPanelBehavior(panel);\n\n if (!libraryPanel) {\n throw new Error('Library panel behavior not found');\n }\n\n if (!libraryPanel.state._loadedPanel) {\n throw new Error('Library panel not loaded');\n }\n return libraryPanel.state._loadedPanel;\n}\n\nfunction hasGridPosChanged(a: SceneGridItemStateLike, b: SceneGridItemStateLike) {\n return a.x !== b.x || a.y !== b.y || a.width !== b.width || a.height !== b.height;\n}\n\nfunction hasQueriesChanged(a: SceneQueryRunner | undefined, b: SceneQueryRunner | undefined) {\n if (a === undefined || b === undefined) {\n return false;\n }\n\n return !isEqual(a.state.queries, b.state.queries);\n}\n","import { DataSourceApi } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport {\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneObjectRef,\n VizPanel,\n} from '@grafana/scenes';\nimport { InspectTab } from 'app/features/inspector/types';\n\nexport interface InspectMetaDataTabState extends SceneObjectState {\n panelRef: SceneObjectRef<VizPanel>;\n dataSource: DataSourceApi;\n}\n\nexport class InspectMetaDataTab extends SceneObjectBase<InspectMetaDataTabState> {\n public getTabLabel() {\n return t('dashboard.inspect.meta-tab', 'Meta data');\n }\n\n public getTabValue() {\n return InspectTab.Meta;\n }\n\n static Component = ({ model }: SceneComponentProps<InspectMetaDataTab>) => {\n const { panelRef, dataSource } = model.state;\n const data = sceneGraph.getData(panelRef.resolve());\n const Inspector = dataSource.components?.MetadataInspector;\n\n if (!data.state.data || !Inspector) {\n return null;\n }\n\n return <Inspector datasource={dataSource} data={data.state.data.series} />;\n };\n}\n","import { t } from '@grafana/i18n';\nimport {\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneObjectRef,\n VizPanel,\n} from '@grafana/scenes';\nimport { QueryInspector } from 'app/features/inspector/QueryInspector';\nimport { InspectTab } from 'app/features/inspector/types';\n\nimport { getQueryRunnerFor } from '../utils/utils';\n\nexport interface InspectQueryTabState extends SceneObjectState {\n panelRef: SceneObjectRef<VizPanel>;\n}\n\nexport class InspectQueryTab extends SceneObjectBase<InspectQueryTabState> {\n public getTabLabel() {\n return t('dashboard.inspect.query-tab', 'Query');\n }\n\n public getTabValue() {\n return InspectTab.Query;\n }\n\n public onRefreshQuery = () => {\n const queryRunner = getQueryRunnerFor(this.state.panelRef.resolve());\n\n if (queryRunner) {\n queryRunner.runQueries();\n }\n };\n\n static Component = ({ model }: SceneComponentProps<InspectQueryTab>) => {\n const data = sceneGraph.getData(model.state.panelRef.resolve()).useState();\n\n if (!data.data) {\n return null;\n }\n\n return <QueryInspector data={data.data} onRefreshQuery={model.onRefreshQuery} />;\n };\n}\n","import { t } from '@grafana/i18n';\nimport {\n SceneComponentProps,\n sceneGraph,\n SceneObjectBase,\n SceneObjectState,\n SceneObjectRef,\n VizPanel,\n} from '@grafana/scenes';\nimport { InspectTab } from 'app/features/inspector/types';\n\nimport { InspectStatsTab as OldInspectStatsTab } from '../../inspector/InspectStatsTab';\n\nexport interface InspectDataTabState extends SceneObjectState {\n panelRef: SceneObjectRef<VizPanel>;\n}\n\nexport class InspectStatsTab extends SceneObjectBase<InspectDataTabState> {\n public getTabLabel() {\n return t('dashboard.inspect.stats-tab', 'Stats');\n }\n\n public getTabValue() {\n return InspectTab.Stats;\n }\n\n static Component = ({ model }: SceneComponentProps<InspectStatsTab>) => {\n const data = sceneGraph.getData(model.state.panelRef.resolve()).useState();\n const timeRange = sceneGraph.getTimeRange(model.state.panelRef.resolve());\n\n if (!data.data) {\n return null;\n }\n\n return <OldInspectStatsTab data={data.data} timeZone={timeRange.getTimeZone()} />;\n };\n}\n","import { Trans, t } from '@grafana/i18n';\nimport {\n SceneComponentProps,\n SceneObjectBase,\n SceneObjectState,\n sceneGraph,\n VizPanel,\n SceneObjectRef,\n} from '@grafana/scenes';\nimport { Alert, Drawer, Tab, TabsBar } from '@grafana/ui';\nimport { getDataSourceWithInspector } from 'app/features/dashboard/components/Inspector/hooks';\nimport { supportsDataQuery } from 'app/features/dashboard/components/PanelEditor/utils';\nimport { InspectTab } from 'app/features/inspector/types';\n\nimport { getDashboardSceneFor } from '../utils/utils';\n\nimport { HelpWizard } from './HelpWizard/HelpWizard';\nimport { InspectDataTab } from './InspectDataTab';\nimport { InspectJsonTab } from './InspectJsonTab';\nimport { InspectMetaDataTab } from './InspectMetaDataTab';\nimport { InspectQueryTab } from './InspectQueryTab';\nimport { InspectStatsTab } from './InspectStatsTab';\nimport { SceneInspectTab } from './types';\n\ninterface PanelInspectDrawerState extends SceneObjectState {\n tabs?: SceneInspectTab[];\n currentTab: InspectTab;\n panelRef: SceneObjectRef<VizPanel>;\n pluginNotLoaded?: boolean;\n canEdit?: boolean;\n}\n\nexport class PanelInspectDrawer extends SceneObjectBase<PanelInspectDrawerState> {\n static Component = PanelInspectRenderer;\n\n constructor(state: PanelInspectDrawerState) {\n super(state);\n this.addActivationHandler(() => this._activationHandler());\n }\n\n private _activationHandler() {\n this.buildTabs(0);\n }\n\n /**\n * We currently have no async await to get the panel plugin from the VizPanel.\n * That is why there is a retry argument here and a setTimeout, to try again a bit later.\n */\n async buildTabs(retry: number) {\n const panelRef = this.state.panelRef;\n const plugin = panelRef.resolve()?.getPlugin();\n const tabs: SceneInspectTab[] = [];\n\n if (!plugin) {\n if (retry < 2000) {\n setTimeout(() => this.buildTabs(retry + 100), 100);\n } else {\n this.setState({ pluginNotLoaded: true });\n }\n }\n\n if (panelRef) {\n if (supportsDataQuery(plugin)) {\n const data = sceneGraph.getData(panelRef.resolve());\n\n tabs.push(new InspectDataTab({ panelRef }));\n tabs.push(new InspectStatsTab({ panelRef }));\n tabs.push(new InspectQueryTab({ panelRef }));\n\n const dsWithInspector = await getDataSourceWithInspector(data.state.data);\n if (dsWithInspector) {\n tabs.push(new InspectMetaDataTab({ panelRef, dataSource: dsWithInspector }));\n }\n }\n\n tabs.push(new InspectJsonTab({ panelRef, onClose: this.onClose }));\n }\n\n this.setState({ tabs });\n }\n\n getDrawerTitle() {\n const panel = this.state.panelRef?.resolve();\n if (panel) {\n return sceneGraph.interpolate(panel, `Inspect: ${panel.state.title}`);\n }\n return `Inspect panel`;\n }\n\n onClose = () => {\n getDashboardSceneFor(this).closeModal();\n };\n}\n\nfunction PanelInspectRenderer({ model }: SceneComponentProps<PanelInspectDrawer>) {\n const { tabs, pluginNotLoaded, panelRef, currentTab } = model.useState();\n\n if (!tabs) {\n return null;\n }\n\n const vizPanel = panelRef!.resolve();\n const activeTab = tabs.find((tab) => tab.getTabValue() === currentTab) ?? tabs[0];\n\n if (currentTab === InspectTab.Help) {\n return <HelpWizard panel={vizPanel} onClose={model.onClose} />;\n }\n\n return (\n <Drawer\n title={model.getDrawerTitle()}\n onClose={model.onClose}\n size=\"md\"\n tabs={\n <TabsBar>\n {tabs.map((tab) => {\n return (\n <Tab\n key={tab.state.key!}\n label={tab.getTabLabel()}\n active={tab === activeTab}\n onChangeTab={() => {\n model.setState({ currentTab: tab.getTabValue() });\n }}\n />\n );\n })}\n </TabsBar>\n }\n >\n {pluginNotLoaded && (\n <Alert\n title={t('dashboard-scene.panel-inspect-renderer.title-panel-plugin-not-loaded', 'Panel plugin not loaded')}\n >\n <Trans i18nKey=\"dashboard-scene.panel-inspect-renderer.body-panel-plugin-not-loaded\">\n Make sure the panel you want to inspect is visible and has been displayed before opening inspect.\n </Trans>\n </Alert>\n )}\n {activeTab.Component && <activeTab.Component model={activeTab} />}\n </Drawer>\n );\n}\n","import * as React from 'react';\n\nimport { AbsoluteTimeRange, FieldConfigSource, PanelData } from '@grafana/data';\n\n/**\n * Describes the properties that can be passed to the PanelRenderer.\n *\n * @typeParam P - Panel options type for the panel being rendered.\n * @typeParam F - Field options type for the panel being rendered.\n *\n * @internal\n */\nexport interface PanelRendererProps<P extends object = {}, F extends object = {}> {\n data?: PanelData;\n pluginId: string;\n title: string;\n options?: Partial<P>;\n onOptionsChange?: (options: P) => void;\n onFieldConfigChange?: (config: FieldConfigSource<F>) => void;\n onChangeTimeRange?: (timeRange: AbsoluteTimeRange) => void;\n fieldConfig?: FieldConfigSource<Partial<F>>;\n timeZone?: string;\n width: number;\n height: number;\n}\n\n/**\n * Simplified type with defaults that describes the PanelRenderer.\n *\n * @internal\n */\nexport type PanelRendererType<P extends object = {}, F extends object = {}> = React.ComponentType<\n PanelRendererProps<P, F>\n>;\n\n/**\n * PanelRenderer component that will be set via the {@link setPanelRenderer} function\n * when Grafana starts. The implementation being used during runtime lives in Grafana\n * core.\n *\n * @internal\n */\nexport let PanelRenderer: PanelRendererType = () => {\n return <div>PanelRenderer can only be used after Grafana instance has been started.</div>;\n};\n\n/**\n * Used to bootstrap the PanelRenderer during application start so the PanelRenderer\n * is exposed via runtime.\n *\n * @internal\n */\nexport function setPanelRenderer(renderer: PanelRendererType) {\n PanelRenderer = renderer;\n}\n","import { throttle } from 'lodash';\n\ntype Args = Parameters<typeof console.log>;\n\n/**\n * @internal\n * */\nconst throttledLog = throttle((...t: Args) => {\n console.log(...t);\n}, 500);\n\n/**\n * @internal\n */\nexport interface Logger {\n logger: (...t: Args) => void;\n enable: () => void;\n disable: () => void;\n isEnabled: () => boolean;\n}\n\n/** @internal */\nexport const createLogger = (name: string): Logger => {\n let loggingEnabled = false;\n\n if (typeof window !== 'undefined') {\n loggingEnabled = window.localStorage.getItem('grafana.debug') === 'true';\n }\n\n return {\n logger: (id: string, throttle = false, ...t: Args) => {\n if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test' || !loggingEnabled) {\n return;\n }\n const fn = throttle ? throttledLog : console.log;\n fn(`[${name}: ${id}]:`, ...t);\n },\n enable: () => (loggingEnabled = true),\n disable: () => (loggingEnabled = false),\n isEnabled: () => loggingEnabled,\n };\n};\n","import { isNumber, set, unset, get, cloneDeep } from 'lodash';\nimport { createContext, useContext, useMemo, useRef } from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { ThresholdsMode, VariableFormatID } from '@grafana/schema';\n\nimport { compareArrayValues, compareDataFrameStructures } from '../dataframe/frameComparisons';\nimport { createDataFrame, guessFieldTypeForField } from '../dataframe/processDataFrame';\nimport { PanelPlugin } from '../panel/PanelPlugin';\nimport { asHexString } from '../themes/colorManipulator';\nimport { GrafanaTheme2 } from '../themes/types';\nimport { ReducerID, reduceField } from '../transformations/fieldReducer';\nimport { fieldMatchers } from '../transformations/matchers';\nimport { ScopedVars, DataContextScopedVar } from '../types/ScopedVars';\nimport { DataFrame, NumericRange, FieldType, Field, ValueLinkConfig, FieldConfig } from '../types/dataFrame';\nimport { LinkModel, DataLink } from '../types/dataLink';\nimport { DisplayProcessor, DisplayValue, DecimalCount } from '../types/displayValue';\nimport { FieldColorModeId } from '../types/fieldColor';\nimport {\n DynamicConfigValue,\n ApplyFieldOverrideOptions,\n FieldOverrideContext,\n FieldConfigPropertyItem,\n DataLinkPostProcessor,\n FieldConfigSource,\n} from '../types/fieldOverrides';\nimport { InterpolateFunction, PanelData } from '../types/panel';\nimport { TimeZone } from '../types/time';\nimport { FieldMatcher } from '../types/transformations';\nimport { mapInternalLinkToExplore } from '../utils/dataLinks';\nimport { locationUtil } from '../utils/location';\n\nimport { FieldConfigOptionsRegistry } from './FieldConfigOptionsRegistry';\nimport { getDisplayProcessor, getRawDisplayProcessor } from './displayProcessor';\nimport { getMinMaxAndDelta } from './scale';\nimport { standardFieldConfigEditorRegistry } from './standardFieldConfigEditorRegistry';\n\ninterface OverrideProps {\n match: FieldMatcher;\n properties: DynamicConfigValue[];\n}\n\nexport function findNumericFieldMinMax(data: DataFrame[]): NumericRange {\n let min: number | null = null;\n let max: number | null = null;\n\n const reducers = [ReducerID.min, ReducerID.max];\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type === FieldType.number) {\n const stats = reduceField({ field, reducers });\n const statsMin = stats[ReducerID.min];\n const statsMax = stats[ReducerID.max];\n\n if (min === null || statsMin < min) {\n min = statsMin;\n }\n\n if (max === null || statsMax > max) {\n max = statsMax;\n }\n }\n }\n }\n\n return { min, max, delta: (max ?? 0) - (min ?? 0) };\n}\n\n/**\n * Return a copy of the DataFrame with all rules applied\n */\nexport function applyFieldOverrides(options: ApplyFieldOverrideOptions): DataFrame[] {\n if (!options.data) {\n return [];\n }\n\n const source = options.fieldConfig;\n if (!source) {\n return options.data;\n }\n\n const fieldConfigRegistry = options.fieldConfigRegistry ?? standardFieldConfigEditorRegistry;\n\n let seriesIndex = 0;\n let globalRange: NumericRange | undefined = undefined;\n\n // Prepare the Matchers\n const override: OverrideProps[] = [];\n if (source.overrides) {\n for (const rule of source.overrides) {\n const info = fieldMatchers.get(rule.matcher.id);\n if (info) {\n override.push({\n match: info.get(rule.matcher.options),\n properties: rule.properties,\n });\n }\n }\n }\n\n return options.data.map((originalFrame, index) => {\n // Need to define this new frame here as it's passed to the getLinkSupplier function inside the fields loop\n const newFrame: DataFrame = { ...originalFrame };\n // Copy fields\n newFrame.fields = newFrame.fields.map((field) => {\n return {\n ...field,\n config: cloneDeep(field.config),\n state: {\n ...field.state,\n },\n };\n });\n\n for (const field of newFrame.fields) {\n const config = field.config;\n\n field.state!.scopedVars = {\n __dataContext: {\n value: {\n data: options.data!,\n frame: newFrame,\n frameIndex: index,\n field: field,\n },\n },\n };\n\n const context = {\n field: field,\n data: options.data!,\n dataFrameIndex: index,\n replaceVariables: options.replaceVariables,\n fieldConfigRegistry: fieldConfigRegistry,\n };\n\n // Anything in the field config that's not set by the datasource\n // will be filled in by panel's field configuration\n setFieldConfigDefaults(config, source.defaults, context);\n\n // Find any matching rules and then override\n for (const rule of override) {\n if (rule.match(field, newFrame, options.data!)) {\n for (const prop of rule.properties) {\n // config.scopedVars is set already here\n setDynamicConfigValue(config, prop, context);\n }\n }\n }\n\n // Try harder to set a real value that is not 'other'\n let type = field.type;\n if (!type || type === FieldType.other) {\n const t = guessFieldTypeForField(field);\n if (t) {\n type = t;\n }\n }\n\n // Set the Min/Max value automatically\n const { range, newGlobalRange } = calculateRange(config, field, globalRange, options.data!);\n globalRange = newGlobalRange;\n\n // Clear any cached displayName as it can change during field overrides process\n field.state!.displayName = null;\n field.state!.seriesIndex = seriesIndex;\n field.state!.range = range;\n field.type = type;\n\n // Some color modes needs series index to assign field color so we count\n // up series index here but ignore time fields\n if (field.type !== FieldType.time) {\n seriesIndex++;\n }\n\n // and set the display processor using it\n field.display = getDisplayProcessor({\n field: field,\n theme: options.theme,\n timeZone: options.timeZone,\n });\n\n // Wrap the display with a cache to avoid double calls\n if (field.config.unit !== 'dateTimeFromNow') {\n field.display = cachingDisplayProcessor(field.display, 2500);\n }\n\n // Attach data links supplier\n field.getLinks = getLinksSupplier(\n newFrame,\n field,\n field.state!.scopedVars,\n context.replaceVariables,\n options.timeZone,\n options.dataLinkPostProcessor\n );\n\n if (field.type === FieldType.nestedFrames) {\n for (const nestedFrames of field.values) {\n for (let nfIndex = 0; nfIndex < nestedFrames.length; nfIndex++) {\n // TODO: should we apply fieldOverrides to nested frames?\n\n for (const valueField of nestedFrames[nfIndex].fields) {\n // Get display processor for nested fields\n valueField.display = getDisplayProcessor({\n field: valueField,\n theme: options.theme,\n timeZone: options.timeZone,\n });\n\n valueField.state = {\n scopedVars: {\n __dataContext: {\n value: {\n data: nestedFrames,\n frame: nestedFrames[nfIndex],\n frameIndex: nfIndex,\n field: valueField,\n },\n },\n },\n };\n\n valueField.getLinks = getLinksSupplier(\n nestedFrames[nfIndex],\n valueField,\n valueField.state!.scopedVars,\n context.replaceVariables,\n options.timeZone,\n options.dataLinkPostProcessor\n );\n }\n }\n }\n }\n\n if (field.type === FieldType.frame) {\n field.values = applyFieldOverrides({\n ...options,\n // nested frames can be `undefined` in certain situations, like after `merge` transform due to padding the value array.\n // let's replace them with empty frames to avoid errors applying overrides\n data: field.values.map(\n (nestedFrame: DataFrame | undefined): DataFrame => nestedFrame ?? createDataFrame({ fields: [] })\n ),\n });\n }\n }\n\n return newFrame;\n });\n}\n\nfunction calculateRange(\n config: FieldConfig,\n field: Field,\n globalRange: NumericRange | undefined,\n data: DataFrame[]\n): { range?: { min?: number | null; max?: number | null; delta: number }; newGlobalRange: NumericRange | undefined } {\n // If range is defined with min/max, use it\n if (isNumber(config.min) && isNumber(config.max)) {\n const range = { min: config.min, max: config.max, delta: config.max - config.min };\n return { range, newGlobalRange: globalRange ?? range };\n }\n\n // Only calculate ranges when the field is a number and one of min/max is set to auto.\n if (field.type !== FieldType.number || (isNumber(config.min) && isNumber(config.max))) {\n return { newGlobalRange: globalRange };\n }\n\n // Calculate the min/max from the field.\n if (config.fieldMinMax) {\n const localRange = getMinMaxAndDelta(field);\n const min = config.min ?? localRange.min;\n const max = config.max ?? localRange.max;\n return { range: { min, max, delta: max! - min! }, newGlobalRange: globalRange };\n }\n\n // We use the global range if supplied, otherwise we calculate it.\n const newGlobalRange = globalRange ?? findNumericFieldMinMax(data);\n const min = config.min ?? newGlobalRange!.min;\n const max = config.max ?? newGlobalRange!.max;\n return { range: { min, max, delta: max! - min! }, newGlobalRange };\n}\n\n// this is a significant optimization for streaming, where we currently re-process all values in the buffer on ech update\n// via field.display(value). this can potentially be removed once we...\n// 1. process data packets incrementally and/if cache the results in the streaming datafame (maybe by buffer index)\n// 2. have the ability to selectively get display color or text (but not always both, which are each quite expensive)\n// 3. sufficently optimize text formatting and threshold color determinitation\nfunction cachingDisplayProcessor(disp: DisplayProcessor, maxCacheSize = 2500): DisplayProcessor {\n type dispCache = Map<unknown, DisplayValue>;\n // decimals -> cache mapping, -1 is unspecified decimals\n const caches = new Map<number, dispCache>();\n\n // pre-init caches for up to 15 decimals\n for (let i = -1; i <= 15; i++) {\n caches.set(i, new Map());\n }\n\n return (value: unknown, decimals?: DecimalCount) => {\n let cache = caches.get(decimals ?? -1)!;\n\n let v = cache.get(value);\n\n if (!v) {\n // Don't grow too big\n if (cache.size === maxCacheSize) {\n cache.clear();\n }\n\n v = disp(value, decimals);\n\n // convert to hex6 or hex8 so downstream we can cheaply test for alpha (and set new alpha)\n // via a simple length check (in colorManipulator) rather using slow parsing via tinycolor\n if (v.color) {\n v.color = asHexString(v.color);\n }\n\n cache.set(value, v);\n }\n\n return v;\n };\n}\n\nexport interface FieldOverrideEnv extends FieldOverrideContext {\n fieldConfigRegistry: FieldConfigOptionsRegistry;\n}\n\nexport function setDynamicConfigValue(config: FieldConfig, value: DynamicConfigValue, context: FieldOverrideEnv) {\n const reg = context.fieldConfigRegistry;\n const item = reg.getIfExists(value.id);\n\n if (!item) {\n return;\n }\n\n const val = item.process(value.value, context, item.settings);\n\n const remove = val === undefined || val === null;\n\n if (remove) {\n if (item.isCustom && config.custom) {\n unset(config.custom, item.path);\n } else {\n unset(config, item.path);\n }\n } else {\n if (item.isCustom) {\n if (!config.custom) {\n config.custom = {};\n }\n set(config.custom, item.path, val);\n } else {\n set(config, item.path, val);\n }\n }\n}\n\n// config -> from DS\n// defaults -> from Panel config\nexport function setFieldConfigDefaults(config: FieldConfig, defaults: FieldConfig, context: FieldOverrideEnv) {\n // For cases where we have links on the datasource config and the panel config, we need to merge them\n if (config.links && defaults.links) {\n // Combine the data source links and the panel default config links\n config.links = [...config.links, ...defaults.links];\n }\n\n // if we have a base threshold set by default but not on the config, we need to merge it in\n const defaultBaseStep =\n defaults?.thresholds?.mode === ThresholdsMode.Absolute &&\n defaults.thresholds?.steps.find((step) => step.value === -Infinity);\n if (\n config.thresholds?.mode === ThresholdsMode.Absolute &&\n !config.thresholds.steps.some((step) => step.value === -Infinity) &&\n defaultBaseStep\n ) {\n config.thresholds.steps = [defaultBaseStep, ...config.thresholds.steps];\n }\n for (const fieldConfigProperty of context.fieldConfigRegistry.list()) {\n if (fieldConfigProperty.isCustom && !config.custom) {\n config.custom = {};\n }\n processFieldConfigValue(\n fieldConfigProperty.isCustom ? config.custom : config,\n fieldConfigProperty.isCustom ? defaults.custom : defaults,\n fieldConfigProperty,\n context\n );\n }\n\n validateFieldConfig(config);\n}\n\nfunction processFieldConfigValue(\n destination: Record<string, unknown>, // it's mutable\n source: Record<string, unknown>,\n fieldConfigProperty: FieldConfigPropertyItem,\n context: FieldOverrideEnv\n) {\n const currentConfig = get(destination, fieldConfigProperty.path);\n if (currentConfig === null || currentConfig === undefined) {\n const item = context.fieldConfigRegistry.getIfExists(fieldConfigProperty.id);\n if (!item) {\n return;\n }\n\n if (item && item.shouldApply(context.field!)) {\n const val = item.process(get(source, item.path), context, item.settings);\n if (val !== undefined && val !== null) {\n set(destination, item.path, val);\n }\n }\n }\n}\n\n/**\n * This checks that all options on FieldConfig make sense. It mutates any value that needs\n * fixed. In particular this makes sure that the first threshold value is -Infinity (not valid in JSON)\n */\nexport function validateFieldConfig(config: FieldConfig) {\n const { thresholds } = config;\n\n if (!config.color) {\n if (thresholds) {\n config.color = {\n mode: FieldColorModeId.Thresholds,\n };\n }\n // No Color settings\n } else if (!config.color.mode) {\n // Without a mode, skip color altogether\n delete config.color;\n }\n\n // Verify that max > min (swap if necessary)\n if (config.hasOwnProperty('min') && config.hasOwnProperty('max') && config.min! > config.max!) {\n const tmp = config.max;\n config.max = config.min;\n config.min = tmp;\n }\n}\n\nconst defaultInternalLinkPostProcessor: DataLinkPostProcessor = (options) => {\n // For internal links at the moment only destination is Explore.\n const { link, linkModel, dataLinkScopedVars, field, replaceVariables } = options;\n\n if (link.internal) {\n return mapInternalLinkToExplore({\n link,\n internalLink: link.internal,\n scopedVars: dataLinkScopedVars,\n field,\n range: link.internal.range,\n replaceVariables,\n });\n } else {\n return linkModel;\n }\n};\n\nexport const getLinksSupplier =\n (\n frame: DataFrame,\n field: Field,\n fieldScopedVars: ScopedVars,\n replaceVariables: InterpolateFunction,\n timeZone?: TimeZone,\n dataLinkPostProcessor?: DataLinkPostProcessor\n ) =>\n (config: ValueLinkConfig): Array<LinkModel<Field>> => {\n if (!field.config.links || field.config.links.length === 0) {\n return [];\n }\n\n const linkModels = field.config.links.map((link: DataLink) => {\n const dataContext: DataContextScopedVar = getFieldDataContextClone(frame, field, fieldScopedVars);\n const dataLinkScopedVars = {\n ...fieldScopedVars,\n __dataContext: dataContext,\n };\n\n const boundReplaceVariables: InterpolateFunction = (value, scopedVars, format) =>\n replaceVariables(value, { ...dataLinkScopedVars, ...scopedVars }, format);\n\n // We are not displaying reduction result\n if (config.valueRowIndex !== undefined && !isNaN(config.valueRowIndex)) {\n dataContext.value.rowIndex = config.valueRowIndex;\n } else {\n dataContext.value.calculatedValue = config.calculatedValue;\n }\n\n let linkModel: LinkModel<Field>;\n\n let href =\n link.onClick || !link.onBuildUrl\n ? link.url\n : link.onBuildUrl({\n origin: field,\n replaceVariables: boundReplaceVariables,\n });\n\n if (href) {\n href = locationUtil.assureBaseUrl(href.replace(/\\n/g, ''));\n href = replaceVariables(href, dataLinkScopedVars, VariableFormatID.UriEncode);\n\n if (href?.length > 0) {\n href = locationUtil.processUrl(href);\n }\n }\n\n if (link.onClick) {\n linkModel = {\n href,\n title: replaceVariables(link.title || '', dataLinkScopedVars),\n target: link.targetBlank ? '_blank' : undefined,\n onClick: (evt: MouseEvent, origin: Field) => {\n link.onClick!({\n origin: origin ?? field,\n e: evt,\n replaceVariables: boundReplaceVariables,\n });\n },\n origin: field,\n oneClick: link.oneClick ?? false,\n };\n } else {\n linkModel = {\n href,\n title: replaceVariables(link.title || '', dataLinkScopedVars),\n target: link.targetBlank ? '_blank' : undefined,\n origin: field,\n oneClick: link.oneClick ?? false,\n };\n }\n\n return (dataLinkPostProcessor || defaultInternalLinkPostProcessor)({\n frame,\n field,\n dataLinkScopedVars,\n replaceVariables,\n config,\n link,\n linkModel,\n });\n });\n\n return linkModels.filter((link): link is LinkModel => !!link);\n };\n\n/**\n * Return a copy of the DataFrame with raw data\n */\nexport function applyRawFieldOverrides(data: DataFrame[]): DataFrame[] {\n if (!data || data.length === 0) {\n return [];\n }\n\n const newData = [...data];\n const processor = getRawDisplayProcessor();\n\n for (let frameIndex = 0; frameIndex < newData.length; frameIndex++) {\n const newFrame = { ...newData[frameIndex] };\n const newFields = [...newFrame.fields];\n\n for (let fieldIndex = 0; fieldIndex < newFields.length; fieldIndex++) {\n newFields[fieldIndex] = {\n ...newFields[fieldIndex],\n display: processor,\n };\n }\n\n newData[frameIndex] = {\n ...newFrame,\n fields: newFields,\n };\n }\n\n return newData;\n}\n\n/**\n * @internal\n */\nexport function useFieldOverrides(\n plugin: PanelPlugin | undefined,\n fieldConfig: FieldConfigSource | undefined,\n data: PanelData | undefined,\n timeZone: string,\n theme: GrafanaTheme2,\n replace: InterpolateFunction\n): PanelData | undefined {\n const fieldConfigRegistry = plugin?.fieldConfigRegistry;\n const structureRev = useRef(0);\n const prevSeries = usePrevious(data?.series);\n\n const { dataLinkPostProcessor } = useDataLinksContext();\n\n return useMemo(() => {\n if (!fieldConfigRegistry || !fieldConfig || !data) {\n return;\n }\n\n const series = data?.series;\n\n if (\n data.structureRev == null &&\n series &&\n prevSeries &&\n !compareArrayValues(series, prevSeries, compareDataFrameStructures)\n ) {\n structureRev.current++;\n }\n\n const panelData: PanelData = {\n structureRev: structureRev.current,\n ...data,\n series: applyFieldOverrides({\n data: series,\n fieldConfig,\n fieldConfigRegistry,\n replaceVariables: replace,\n theme,\n timeZone,\n dataLinkPostProcessor,\n }),\n };\n if (data.annotations && data.annotations.length > 0) {\n panelData.annotations = applyFieldOverrides({\n data: data.annotations,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n replaceVariables: replace,\n theme,\n timeZone,\n dataLinkPostProcessor,\n });\n }\n return panelData;\n }, [fieldConfigRegistry, fieldConfig, data, prevSeries, timeZone, theme, replace, dataLinkPostProcessor]);\n}\n\n/**\n * Clones the existing dataContext or creates a new one\n */\nexport function getFieldDataContextClone(frame: DataFrame, field: Field, fieldScopedVars: ScopedVars) {\n if (fieldScopedVars?.__dataContext) {\n return {\n value: {\n ...fieldScopedVars.__dataContext.value,\n },\n };\n }\n\n return { value: { frame, field, data: [frame] } };\n}\n\n/**\n * @internal\n */\nexport const DataLinksContext = createContext<{\n dataLinkPostProcessor: DataLinkPostProcessor;\n}>({ dataLinkPostProcessor: defaultInternalLinkPostProcessor });\n\n/**\n * @internal\n */\nexport const useDataLinksContext = () => useContext(DataLinksContext);\n","import { api } from './baseAPI';\nexport const addTagTypes = ['API Discovery', 'Dashboard', 'LibraryPanel', 'Search'] as const;\nconst injectedRtkApi = api\n .enhanceEndpoints({\n addTagTypes,\n })\n .injectEndpoints({\n endpoints: (build) => ({\n getApiResources: build.query<GetApiResourcesApiResponse, GetApiResourcesApiArg>({\n query: () => ({ url: `/apis/dashboard.grafana.app/v0alpha1/` }),\n providesTags: ['API Discovery'],\n }),\n listDashboard: build.query<ListDashboardApiResponse, ListDashboardApiArg>({\n query: (queryArg) => ({\n url: `/dashboards`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['Dashboard'],\n }),\n createDashboard: build.mutation<CreateDashboardApiResponse, CreateDashboardApiArg>({\n query: (queryArg) => ({\n url: `/dashboards`,\n method: 'POST',\n body: queryArg.dashboard,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Dashboard'],\n }),\n deletecollectionDashboard: build.mutation<DeletecollectionDashboardApiResponse, DeletecollectionDashboardApiArg>({\n query: (queryArg) => ({\n url: `/dashboards`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n continue: queryArg['continue'],\n dryRun: queryArg.dryRun,\n fieldSelector: queryArg.fieldSelector,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n },\n }),\n invalidatesTags: ['Dashboard'],\n }),\n getDashboard: build.query<GetDashboardApiResponse, GetDashboardApiArg>({\n query: (queryArg) => ({\n url: `/dashboards/${queryArg.name}`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['Dashboard'],\n }),\n replaceDashboard: build.mutation<ReplaceDashboardApiResponse, ReplaceDashboardApiArg>({\n query: (queryArg) => ({\n url: `/dashboards/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.dashboard,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['Dashboard'],\n }),\n deleteDashboard: build.mutation<DeleteDashboardApiResponse, DeleteDashboardApiArg>({\n query: (queryArg) => ({\n url: `/dashboards/${queryArg.name}`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n },\n }),\n invalidatesTags: ['Dashboard'],\n }),\n updateDashboard: build.mutation<UpdateDashboardApiResponse, UpdateDashboardApiArg>({\n query: (queryArg) => ({\n url: `/dashboards/${queryArg.name}`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['Dashboard'],\n }),\n getDashboardDto: build.query<GetDashboardDtoApiResponse, GetDashboardDtoApiArg>({\n query: (queryArg) => ({ url: `/dashboards/${queryArg.name}/dto` }),\n providesTags: ['Dashboard'],\n }),\n listLibraryPanel: build.query<ListLibraryPanelApiResponse, ListLibraryPanelApiArg>({\n query: (queryArg) => ({\n url: `/librarypanels`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['LibraryPanel'],\n }),\n createLibraryPanel: build.mutation<CreateLibraryPanelApiResponse, CreateLibraryPanelApiArg>({\n query: (queryArg) => ({\n url: `/librarypanels`,\n method: 'POST',\n body: queryArg.libraryPanel,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['LibraryPanel'],\n }),\n deletecollectionLibraryPanel: build.mutation<\n DeletecollectionLibraryPanelApiResponse,\n DeletecollectionLibraryPanelApiArg\n >({\n query: (queryArg) => ({\n url: `/librarypanels`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n continue: queryArg['continue'],\n dryRun: queryArg.dryRun,\n fieldSelector: queryArg.fieldSelector,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n },\n }),\n invalidatesTags: ['LibraryPanel'],\n }),\n getLibraryPanel: build.query<GetLibraryPanelApiResponse, GetLibraryPanelApiArg>({\n query: (queryArg) => ({\n url: `/librarypanels/${queryArg.name}`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['LibraryPanel'],\n }),\n replaceLibraryPanel: build.mutation<ReplaceLibraryPanelApiResponse, ReplaceLibraryPanelApiArg>({\n query: (queryArg) => ({\n url: `/librarypanels/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.libraryPanel,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['LibraryPanel'],\n }),\n deleteLibraryPanel: build.mutation<DeleteLibraryPanelApiResponse, DeleteLibraryPanelApiArg>({\n query: (queryArg) => ({\n url: `/librarypanels/${queryArg.name}`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n },\n }),\n invalidatesTags: ['LibraryPanel'],\n }),\n updateLibraryPanel: build.mutation<UpdateLibraryPanelApiResponse, UpdateLibraryPanelApiArg>({\n query: (queryArg) => ({\n url: `/librarypanels/${queryArg.name}`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['LibraryPanel'],\n }),\n getSearch: build.query<GetSearchApiResponse, GetSearchApiArg>({\n query: (queryArg) => ({\n url: `/search`,\n params: {\n query: queryArg.query,\n type: queryArg['type'],\n folder: queryArg.folder,\n facet: queryArg.facet,\n tags: queryArg.tags,\n sort: queryArg.sort,\n limit: queryArg.limit,\n explain: queryArg.explain,\n },\n }),\n providesTags: ['Search'],\n }),\n getSearchSortable: build.query<GetSearchSortableApiResponse, GetSearchSortableApiArg>({\n query: () => ({ url: `/search/sortable` }),\n providesTags: ['Search'],\n }),\n }),\n overrideExisting: false,\n });\nexport { injectedRtkApi as generatedAPI };\nexport type GetApiResourcesApiResponse = /** status 200 OK */ ApiResourceList;\nexport type GetApiResourcesApiArg = void;\nexport type ListDashboardApiResponse = /** status 200 OK */ DashboardList;\nexport type ListDashboardApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type CreateDashboardApiResponse = /** status 200 OK */\n | Dashboard\n | /** status 201 Created */ Dashboard\n | /** status 202 Accepted */ Dashboard;\nexport type CreateDashboardApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n dashboard: Dashboard;\n};\nexport type DeletecollectionDashboardApiResponse = /** status 200 OK */ Status;\nexport type DeletecollectionDashboardApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n};\nexport type GetDashboardApiResponse = /** status 200 OK */ Dashboard;\nexport type GetDashboardApiArg = {\n /** name of the Dashboard */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplaceDashboardApiResponse = /** status 200 OK */ Dashboard | /** status 201 Created */ Dashboard;\nexport type ReplaceDashboardApiArg = {\n /** name of the Dashboard */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n dashboard: Dashboard;\n};\nexport type DeleteDashboardApiResponse = /** status 200 OK */ Status | /** status 202 Accepted */ Status;\nexport type DeleteDashboardApiArg = {\n /** name of the Dashboard */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n};\nexport type UpdateDashboardApiResponse = /** status 200 OK */ Dashboard | /** status 201 Created */ Dashboard;\nexport type UpdateDashboardApiArg = {\n /** name of the Dashboard */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type GetDashboardDtoApiResponse = /** status 200 OK */ DashboardWithAccessInfo;\nexport type GetDashboardDtoApiArg = {\n /** name of the DashboardWithAccessInfo */\n name: string;\n};\nexport type ListLibraryPanelApiResponse = /** status 200 OK */ LibraryPanelList;\nexport type ListLibraryPanelApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type CreateLibraryPanelApiResponse = /** status 200 OK */\n | LibraryPanel\n | /** status 201 Created */ LibraryPanel\n | /** status 202 Accepted */ LibraryPanel;\nexport type CreateLibraryPanelApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n libraryPanel: LibraryPanel;\n};\nexport type DeletecollectionLibraryPanelApiResponse = /** status 200 OK */ Status;\nexport type DeletecollectionLibraryPanelApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n};\nexport type GetLibraryPanelApiResponse = /** status 200 OK */ LibraryPanel;\nexport type GetLibraryPanelApiArg = {\n /** name of the LibraryPanel */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplaceLibraryPanelApiResponse = /** status 200 OK */ LibraryPanel | /** status 201 Created */ LibraryPanel;\nexport type ReplaceLibraryPanelApiArg = {\n /** name of the LibraryPanel */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n libraryPanel: LibraryPanel;\n};\nexport type DeleteLibraryPanelApiResponse = /** status 200 OK */ Status | /** status 202 Accepted */ Status;\nexport type DeleteLibraryPanelApiArg = {\n /** name of the LibraryPanel */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n};\nexport type UpdateLibraryPanelApiResponse = /** status 200 OK */ LibraryPanel | /** status 201 Created */ LibraryPanel;\nexport type UpdateLibraryPanelApiArg = {\n /** name of the LibraryPanel */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type GetSearchApiResponse = /** status 200 undefined */ SearchResults;\nexport type GetSearchApiArg = {\n /** user query string */\n query?: string;\n /** search dashboards or folders. When empty, this will search both */\n type?: 'folder' | 'dashboard';\n /** search/list within a folder (not recursive) */\n folder?: string;\n /** count distinct terms for selected fields */\n facet?: string[];\n /** tag query filter */\n tags?: string[];\n /** sortable field */\n sort?: string;\n /** number of results to return */\n limit?: number;\n /** add debugging info that may help explain why the result matched */\n explain?: boolean;\n};\nexport type GetSearchSortableApiResponse = /** status 200 undefined */ {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Sortable fields (depends on backend support) */\n fields: any[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n};\nexport type GetSearchSortableApiArg = void;\nexport type ApiResource = {\n /** categories is a list of the grouped resources this resource belongs to (e.g. 'all') */\n categories?: string[];\n /** group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\". */\n group?: string;\n /** kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') */\n kind: string;\n /** name is the plural name of the resource. */\n name: string;\n /** namespaced indicates if a resource is namespaced or not. */\n namespaced: boolean;\n /** shortNames is a list of suggested short names of the resource. */\n shortNames?: string[];\n /** singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface. */\n singularName: string;\n /** The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates. */\n storageVersionHash?: string;\n /** verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy) */\n verbs: string[];\n /** version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\". */\n version?: string;\n};\nexport type ApiResourceList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** groupVersion is the group and version this APIResourceList is for. */\n groupVersion: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** resources contains the name of the resources and if they are namespaced. */\n resources: ApiResource[];\n};\nexport type Time = string;\nexport type FieldsV1 = object;\nexport type ManagedFieldsEntry = {\n /** APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted. */\n apiVersion?: string;\n /** FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\" */\n fieldsType?: string;\n /** FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type. */\n fieldsV1?: FieldsV1;\n /** Manager is an identifier of the workflow managing these fields. */\n manager?: string;\n /** Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'. */\n operation?: string;\n /** Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource. */\n subresource?: string;\n /** Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over. */\n time?: Time;\n};\nexport type OwnerReference = {\n /** API version of the referent. */\n apiVersion: string;\n /** If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned. */\n blockOwnerDeletion?: boolean;\n /** If true, this reference points to the managing controller. */\n controller?: boolean;\n /** Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n /** Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name: string;\n /** UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid: string;\n};\nexport type ObjectMeta = {\n /** Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations */\n annotations?: {\n [key: string]: string;\n };\n /** CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n \n Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n creationTimestamp?: Time;\n /** Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. */\n deletionGracePeriodSeconds?: number;\n /** DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n \n Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n deletionTimestamp?: Time;\n /** Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list. */\n finalizers?: string[];\n /** GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n \n If this field is specified and the generated name exists, the server will return a 409.\n \n Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency */\n generateName?: string;\n /** A sequence number representing a specific generation of the desired state. Populated by the system. Read-only. */\n generation?: number;\n /** Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels */\n labels?: {\n [key: string]: string;\n };\n /** ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object. */\n managedFields?: ManagedFieldsEntry[];\n /** Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name?: string;\n /** Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n \n Must be a DNS_LABEL. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces */\n namespace?: string;\n /** List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller. */\n ownerReferences?: OwnerReference[];\n /** An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n \n Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n /** UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n \n Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type Unstructured = {\n [key: string]: any;\n};\nexport type DashboardConversionStatus = {\n /** The error message from the conversion. Empty if the conversion has not failed. */\n error?: string;\n /** Whether from another version has failed. If true, means that the dashboard is not valid, and the caller should instead fetch the stored version. */\n failed: boolean;\n /** The original value map[string]any */\n source?: object;\n /** The version which was stored when the dashboard was created / updated. Fetching this version should always succeed. */\n storedVersion?: string;\n};\nexport type DashboardStatus = {\n /** Optional conversion status. */\n conversion?: DashboardConversionStatus;\n};\nexport type Dashboard = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ObjectMeta;\n /** Spec is the spec of the Dashboard */\n spec: Unstructured;\n status: DashboardStatus;\n};\nexport type ListMeta = {\n /** continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message. */\n continue?: string;\n /** remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact. */\n remainingItemCount?: number;\n /** String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n};\nexport type DashboardList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: Dashboard[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ListMeta;\n};\nexport type StatusCause = {\n /** The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n \n Examples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\" */\n field?: string;\n /** A human-readable description of the cause of the error. This field may be presented as-is to a reader. */\n message?: string;\n /** A machine-readable description of the cause of the error. If this value is empty there is no information available. */\n reason?: string;\n};\nexport type StatusDetails = {\n /** The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. */\n causes?: StatusCause[];\n /** The group attribute of the resource associated with the status StatusReason. */\n group?: string;\n /** The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). */\n name?: string;\n /** If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action. */\n retryAfterSeconds?: number;\n /** UID of the resource. (when there is a single resource which can be described). More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type Status = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Suggested HTTP return code for this status, 0 if not set. */\n code?: number;\n /** Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. */\n details?: StatusDetails;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** A human-readable description of the status of this operation. */\n message?: string;\n /** Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n metadata?: ListMeta;\n /** A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. */\n reason?: string;\n /** Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status */\n status?: string;\n};\nexport type Patch = object;\nexport type AnnotationActions = {\n canAdd: boolean;\n canDelete: boolean;\n canEdit: boolean;\n};\nexport type AnnotationPermission = {\n dashboard: AnnotationActions;\n organization: AnnotationActions;\n};\nexport type DashboardAccess = {\n annotationsPermissions: AnnotationPermission;\n canAdmin: boolean;\n canDelete: boolean;\n canEdit: boolean;\n /** The permissions part */\n canSave: boolean;\n canStar: boolean;\n /** Metadata fields */\n slug?: string;\n url?: string;\n};\nexport type DashboardWithAccessInfo = {\n access: DashboardAccess;\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ObjectMeta;\n /** Spec is the spec of the Dashboard */\n spec: Unstructured;\n status: DashboardStatus;\n};\nexport type DataSourceRef = {\n /** The apiserver version */\n apiVersion?: string;\n /** The datasource plugin type */\n type: string;\n /** Datasource UID (NOTE: name in k8s) */\n uid?: string;\n};\nexport type GridPos = {\n h: number;\n w: number;\n x: number;\n y: number;\n};\nexport type DataQuery = {\n /** The datasource */\n datasource?: {\n /** The apiserver version */\n apiVersion?: string;\n /** The datasource plugin type */\n type: string;\n /** Datasource UID (NOTE: name in k8s) */\n uid?: string;\n };\n /** true if query is disabled (ie should not be returned to the dashboard)\n NOTE: this does not always imply that the query should not be executed since\n the results from a hidden query may be used as the input to other queries (SSE etc) */\n hide?: boolean;\n /** Interval is the suggested duration between time points in a time series query.\n NOTE: the values for intervalMs is not saved in the query model. It is typically calculated\n from the interval required to fill a pixels in the visualization */\n intervalMs?: number;\n /** MaxDataPoints is the maximum number of data points that should be returned from a time series query.\n NOTE: the values for maxDataPoints is not saved in the query model. It is typically calculated\n from the number of pixels visible in a visualization */\n maxDataPoints?: number;\n /** QueryType is an optional identifier for the type of query.\n It can be used to distinguish different types of queries. */\n queryType?: string;\n /** RefID is the unique identifier of the query, set by the frontend call. */\n refId?: string;\n /** Optionally define expected query result behavior */\n resultAssertions?: {\n /** Maximum frame count */\n maxFrames?: number;\n /** Type asserts that the frame matches a known type structure.\n \n \n Possible enum values:\n - `\"\"`\n - `\"timeseries-wide\"`\n - `\"timeseries-long\"`\n - `\"timeseries-many\"`\n - `\"timeseries-multi\"`\n - `\"directory-listing\"`\n - `\"table\"`\n - `\"numeric-wide\"`\n - `\"numeric-multi\"`\n - `\"numeric-long\"`\n - `\"log-lines\"` */\n type?:\n | ''\n | 'timeseries-wide'\n | 'timeseries-long'\n | 'timeseries-many'\n | 'timeseries-multi'\n | 'directory-listing'\n | 'table'\n | 'numeric-wide'\n | 'numeric-multi'\n | 'numeric-long'\n | 'log-lines';\n /** TypeVersion is the version of the Type property. Versions greater than 0.0 correspond to the dataplane\n contract documentation https://grafana.github.io/dataplane/contract/. */\n typeVersion: number[];\n };\n /** TimeRange represents the query range\n NOTE: unlike generic /ds/query, we can now send explicit time values in each query\n NOTE: the values for timeRange are not saved in a dashboard, they are constructed on the fly */\n timeRange?: {\n /** From is the start time of the query. */\n from: string;\n /** To is the end time of the query. */\n to: string;\n };\n [key: string]: any;\n};\nexport type LibraryPanelSpec = {\n /** The default datasource type */\n datasource?: DataSourceRef;\n /** Library panel description */\n description?: string;\n /** The fieldConfig schema depends on the panel type */\n fieldConfig: Unstructured;\n /** The grid position */\n gridPos?: GridPos;\n /** The links for the panel */\n links?: Unstructured[];\n /** The options schema depends on the panel type */\n options: Unstructured;\n /** The title of the panel when displayed in the dashboard */\n panelTitle?: string;\n /** The panel type */\n pluginVersion?: string;\n /** The datasource queries */\n targets?: DataQuery[];\n /** The title of the library panel */\n title?: string;\n /** Whether the panel is transparent */\n transparent?: boolean;\n /** The panel type */\n type: string;\n};\nexport type LibraryPanelStatus = {\n /** The properties previously stored in SQL that are not included in this model */\n missing?: Unstructured;\n /** Translation warnings (mostly things that were in SQL columns but not found in the saved body) */\n warnings?: string[];\n};\nexport type LibraryPanel = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** Standard object's metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n metadata?: ObjectMeta;\n /** Panel properties */\n spec: LibraryPanelSpec;\n /** Status will show errors */\n status?: LibraryPanelStatus;\n};\nexport type LibraryPanelList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: LibraryPanel[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata?: ListMeta;\n};\nexport type TermFacet = {\n count?: number;\n term?: string;\n};\nexport type FacetResult = {\n field?: string;\n /** The number of documents that do *not* have this field */\n missing?: number;\n terms?: TermFacet[];\n /** The distinct terms */\n total?: number;\n};\nexport type ManagedBy = {\n id?: string;\n kind: string;\n};\nexport type DashboardHit = {\n /** Dashboard description */\n description?: string;\n /** Explain the score (if possible) */\n explain?: any;\n /** Stick untyped extra fields in this object (including the sort value) */\n field?: any;\n /** The k8s name (eg, grafana UID) for the parent folder */\n folder?: string;\n managedBy?: ManagedBy;\n /** The k8s \"name\" (eg, grafana UID) */\n name: string;\n /** Dashboard or folder */\n resource: string;\n /** When using \"real\" search, this is the score */\n score?: number;\n /** Filter tags */\n tags?: string[];\n /** The display name */\n title: string;\n};\nexport type SortBy = {\n desc?: boolean;\n field: string;\n};\nexport type SearchResults = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n facets?: {\n [key: string]: FacetResult;\n };\n hits: DashboardHit[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** Max score */\n maxScore?: number;\n /** Where the query started from */\n offset?: number;\n /** Cost of running the query */\n queryCost?: number;\n sortBy?: SortBy;\n /** The number of matching results */\n totalHits: number;\n};\nexport const {\n useGetApiResourcesQuery,\n useLazyGetApiResourcesQuery,\n useListDashboardQuery,\n useLazyListDashboardQuery,\n useCreateDashboardMutation,\n useDeletecollectionDashboardMutation,\n useGetDashboardQuery,\n useLazyGetDashboardQuery,\n useReplaceDashboardMutation,\n useDeleteDashboardMutation,\n useUpdateDashboardMutation,\n useGetDashboardDtoQuery,\n useLazyGetDashboardDtoQuery,\n useListLibraryPanelQuery,\n useLazyListLibraryPanelQuery,\n useCreateLibraryPanelMutation,\n useDeletecollectionLibraryPanelMutation,\n useGetLibraryPanelQuery,\n useLazyGetLibraryPanelQuery,\n useReplaceLibraryPanelMutation,\n useDeleteLibraryPanelMutation,\n useUpdateLibraryPanelMutation,\n useGetSearchQuery,\n useLazyGetSearchQuery,\n useGetSearchSortableQuery,\n useLazyGetSearchSortableQuery,\n} = injectedRtkApi;\n","export { BASE_URL, API_GROUP, API_VERSION } from './baseAPI';\nimport { addTagTypes, generatedAPI as rawAPI } from './endpoints.gen';\n\nexport * from './endpoints.gen';\nexport const generatedAPI = rawAPI.enhanceEndpoints({\n addTagTypes: [...addTagTypes, 'Folder', 'Dashboard'],\n});\n","import { css } from '@emotion/css';\nimport clsx from 'clsx';\nimport React, { HTMLAttributes } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nexport interface Props extends HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\nexport const VizTooltipWrapper = ({ children, className }: Props) => {\n const styles = useStyles2(getStyles);\n return (\n <div className={clsx(styles, className)} data-testid={selectors.components.Panels.Visualization.Tooltip.Wrapper}>\n {children}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) =>\n css({\n display: 'flex',\n flexDirection: 'column',\n fontSize: theme.typography.bodySmall.fontSize,\n });\n","import { getBuiltInThemes } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nexport function getSelectableThemes() {\n const allowedExtraThemes = [];\n\n if (config.featureToggles.grafanaconThemes) {\n allowedExtraThemes.push('desertbloom');\n allowedExtraThemes.push('gildedgrove');\n allowedExtraThemes.push('sapphiredusk');\n allowedExtraThemes.push('tron');\n allowedExtraThemes.push('gloom');\n }\n\n return getBuiltInThemes(allowedExtraThemes);\n}\n","import { DataSourceInstanceSettings, PluginMeta } from '@grafana/data';\n\nimport { config } from '../../config';\n\nexport type PluginEventProperties = {\n grafana_version: string;\n plugin_type: string;\n plugin_version: string;\n plugin_id: string;\n plugin_name: string;\n};\n\nexport function createPluginEventProperties(meta: PluginMeta): PluginEventProperties {\n return {\n grafana_version: config.buildInfo.version,\n plugin_type: String(meta.type),\n plugin_version: meta.info.version,\n plugin_id: meta.id,\n plugin_name: meta.name,\n };\n}\n\nexport type DataSourcePluginEventProperties = PluginEventProperties & {\n datasource_uid: string;\n};\n\nexport function createDataSourcePluginEventProperties(\n instanceSettings: DataSourceInstanceSettings\n): DataSourcePluginEventProperties {\n return {\n ...createPluginEventProperties(instanceSettings.meta),\n datasource_uid: instanceSettings.uid,\n };\n}\n","import { omit } from 'lodash';\n\nimport { FieldConfigSource, PanelPlugin } from '@grafana/data';\nimport { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT } from 'app/core/constants';\n\nimport { PanelModel } from '../../state/PanelModel';\n\nimport { DisplayMode } from './types';\n\nexport function calculatePanelSize(mode: DisplayMode, width: number, height: number, panel: PanelModel) {\n if (mode === DisplayMode.Fill) {\n return { width, height };\n }\n const panelPadding = 8 * 6;\n const sidebarWidth = 60;\n\n const colWidth = (window.innerWidth - sidebarWidth - GRID_CELL_VMARGIN * 4) / GRID_COLUMN_COUNT;\n const pWidth = colWidth * panel.gridPos.w;\n const pHeight = GRID_CELL_HEIGHT * panel.gridPos.h + panelPadding;\n const scale = Math.min(width / pWidth, height / pHeight);\n\n if (pWidth <= width && pHeight <= height) {\n return {\n width: pWidth,\n height: pHeight,\n };\n }\n\n return {\n width: pWidth * scale,\n height: pHeight * scale,\n };\n}\n\nexport function supportsDataQuery(plugin: PanelPlugin | undefined | null): boolean {\n return plugin?.meta.skipDataQuery === false;\n}\n\nexport const updateDefaultFieldConfigValue = (\n config: FieldConfigSource,\n name: string,\n value: unknown,\n isCustom?: boolean\n) => {\n let defaults = { ...config.defaults };\n const remove = value == null || value === '';\n\n if (isCustom) {\n if (defaults.custom) {\n if (remove) {\n defaults.custom = omit(defaults.custom, name);\n } else {\n defaults.custom = setOptionImmutably(defaults.custom, name, value);\n }\n } else if (!remove) {\n defaults.custom = setOptionImmutably(defaults.custom, name, value);\n }\n } else if (remove) {\n defaults = omit(defaults, name);\n } else {\n defaults = setOptionImmutably(defaults, name, value);\n }\n\n return {\n ...config,\n defaults,\n };\n};\n\nexport function setOptionImmutably<T extends object>(options: T, path: string | string[], value: any): T {\n const splat = !Array.isArray(path) ? path.split('.') : path;\n\n const key = splat.shift()!;\n if (key.endsWith(']')) {\n const idx = key.lastIndexOf('[');\n const index = +key.substring(idx + 1, key.length - 1);\n const propKey = key.substring(0, idx);\n let current = (options as Record<string, any>)[propKey];\n const arr = Array.isArray(current) ? [...current] : [];\n if (splat.length) {\n current = arr[index];\n if (current == null || typeof current !== 'object') {\n current = {};\n }\n value = setOptionImmutably(current, splat, value);\n }\n arr[index] = value;\n return { ...options, [propKey]: arr };\n }\n\n if (!splat.length) {\n return { ...options, [key]: value };\n }\n\n let current = (options as Record<string, any>)[key];\n\n if (current == null || typeof current !== 'object') {\n current = {};\n }\n\n return { ...options, [key]: setOptionImmutably(current, splat, value) };\n}\n","import { compare, Operation } from 'fast-json-patch';\n// @ts-ignore\nimport jsonMap from 'json-source-map';\nimport { flow, get, isArray, isEmpty, last, sortBy, tail, toNumber, isNaN } from 'lodash';\n\nexport type Diff = {\n op: 'add' | 'replace' | 'remove' | 'copy' | 'test' | '_get' | 'move';\n value: unknown;\n originalValue: unknown;\n path: string[];\n startLineNumber: number;\n endLineNumber: number;\n};\n\nexport type Diffs = {\n [key: string]: Diff[];\n};\n\ntype JSONValue = string | Object;\n\nexport const jsonDiff = (lhs: JSONValue, rhs: JSONValue): Diffs => {\n const diffs = compare(lhs, rhs);\n const lhsMap = jsonMap.stringify(lhs, null, 2);\n const rhsMap = jsonMap.stringify(rhs, null, 2);\n\n const getDiffInformation = (diffs: Operation[]): Diff[] => {\n return diffs.map((diff) => {\n let originalValue = undefined;\n let value = undefined;\n let startLineNumber = 0;\n let endLineNumber = 0;\n\n const path = tail(diff.path.split('/'));\n\n if (diff.op === 'replace' && rhsMap.pointers[diff.path]) {\n originalValue = get(lhs, path);\n value = diff.value;\n startLineNumber = rhsMap.pointers[diff.path].value.line;\n endLineNumber = rhsMap.pointers[diff.path].valueEnd.line;\n }\n if (diff.op === 'add' && rhsMap.pointers[diff.path]) {\n value = diff.value;\n startLineNumber = rhsMap.pointers[diff.path].value.line;\n endLineNumber = rhsMap.pointers[diff.path].valueEnd.line;\n }\n if (diff.op === 'remove' && lhsMap.pointers[diff.path]) {\n originalValue = get(lhs, path);\n startLineNumber = lhsMap.pointers[diff.path].value.line;\n endLineNumber = lhsMap.pointers[diff.path].valueEnd.line;\n }\n\n return {\n op: diff.op,\n value,\n path,\n originalValue,\n startLineNumber,\n endLineNumber,\n };\n });\n };\n\n const sortByLineNumber = (diffs: Diff[]) => sortBy(diffs, 'startLineNumber');\n const groupByPath = (diffs: Diff[]) =>\n diffs.reduce<Record<string, Diff[]>>((acc, value) => {\n const groupKey: string = value.path[0];\n if (!acc[groupKey]) {\n acc[groupKey] = [];\n }\n acc[groupKey].push(value);\n return acc;\n }, {});\n\n return flow([getDiffInformation, sortByLineNumber, groupByPath])(diffs);\n};\n\nexport const getDiffText = (diff: Diff, showProp = true) => {\n const prop = last(diff.path)!;\n const propIsNumeric = isNumeric(prop);\n const val = diff.op === 'remove' ? diff.originalValue : diff.value;\n let text = getDiffOperationText(diff.op);\n\n if (showProp) {\n if (propIsNumeric) {\n text += ` item ${prop}`;\n } else {\n if (isArray(val) && !isEmpty(val)) {\n text += ` ${val.length} ${prop}`;\n } else {\n text += ` ${prop}`;\n }\n }\n }\n\n return text;\n};\n\nconst isNumeric = (value: string) => !isNaN(toNumber(value));\n\nexport const getDiffOperationText = (operation: string): string => {\n if (operation === 'add') {\n return 'added';\n }\n if (operation === 'remove') {\n return 'deleted';\n }\n return 'changed';\n};\n","import { createApi } from '@reduxjs/toolkit/query/react';\n\nimport { getAPIBaseURL } from '../../../../utils/utils';\nimport { createBaseQuery } from '../../createBaseQuery';\n\nexport const API_GROUP = 'shorturl.grafana.app' as const;\nexport const API_VERSION = 'v1alpha1' as const;\nexport const BASE_URL = getAPIBaseURL(API_GROUP, API_VERSION);\n\nexport const api = createApi({\n reducerPath: 'shortURLAPIv1alpha1',\n baseQuery: createBaseQuery({\n baseURL: BASE_URL,\n }),\n endpoints: () => ({}),\n});\n","import { api } from './baseAPI';\nexport const addTagTypes = ['API Discovery', 'ShortURL'] as const;\nconst injectedRtkApi = api\n .enhanceEndpoints({\n addTagTypes,\n })\n .injectEndpoints({\n endpoints: (build) => ({\n getApiResources: build.query<GetApiResourcesApiResponse, GetApiResourcesApiArg>({\n query: () => ({ url: `/apis/shorturl.grafana.app/v1alpha1/` }),\n providesTags: ['API Discovery'],\n }),\n listShortUrl: build.query<ListShortUrlApiResponse, ListShortUrlApiArg>({\n query: (queryArg) => ({\n url: `/shorturls`,\n params: {\n pretty: queryArg.pretty,\n allowWatchBookmarks: queryArg.allowWatchBookmarks,\n continue: queryArg['continue'],\n fieldSelector: queryArg.fieldSelector,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n watch: queryArg.watch,\n },\n }),\n providesTags: ['ShortURL'],\n }),\n createShortUrl: build.mutation<CreateShortUrlApiResponse, CreateShortUrlApiArg>({\n query: (queryArg) => ({\n url: `/shorturls`,\n method: 'POST',\n body: queryArg.shortUrl,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['ShortURL'],\n }),\n deletecollectionShortUrl: build.mutation<DeletecollectionShortUrlApiResponse, DeletecollectionShortUrlApiArg>({\n query: (queryArg) => ({\n url: `/shorturls`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n continue: queryArg['continue'],\n dryRun: queryArg.dryRun,\n fieldSelector: queryArg.fieldSelector,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n labelSelector: queryArg.labelSelector,\n limit: queryArg.limit,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n resourceVersion: queryArg.resourceVersion,\n resourceVersionMatch: queryArg.resourceVersionMatch,\n sendInitialEvents: queryArg.sendInitialEvents,\n timeoutSeconds: queryArg.timeoutSeconds,\n },\n }),\n invalidatesTags: ['ShortURL'],\n }),\n getShortUrl: build.query<GetShortUrlApiResponse, GetShortUrlApiArg>({\n query: (queryArg) => ({\n url: `/shorturls/${queryArg.name}`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['ShortURL'],\n }),\n replaceShortUrl: build.mutation<ReplaceShortUrlApiResponse, ReplaceShortUrlApiArg>({\n query: (queryArg) => ({\n url: `/shorturls/${queryArg.name}`,\n method: 'PUT',\n body: queryArg.shortUrl,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['ShortURL'],\n }),\n deleteShortUrl: build.mutation<DeleteShortUrlApiResponse, DeleteShortUrlApiArg>({\n query: (queryArg) => ({\n url: `/shorturls/${queryArg.name}`,\n method: 'DELETE',\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n gracePeriodSeconds: queryArg.gracePeriodSeconds,\n ignoreStoreReadErrorWithClusterBreakingPotential: queryArg.ignoreStoreReadErrorWithClusterBreakingPotential,\n orphanDependents: queryArg.orphanDependents,\n propagationPolicy: queryArg.propagationPolicy,\n },\n }),\n invalidatesTags: ['ShortURL'],\n }),\n updateShortUrl: build.mutation<UpdateShortUrlApiResponse, UpdateShortUrlApiArg>({\n query: (queryArg) => ({\n url: `/shorturls/${queryArg.name}`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['ShortURL'],\n }),\n getShortUrlGoto: build.query<GetShortUrlGotoApiResponse, GetShortUrlGotoApiArg>({\n query: (queryArg) => ({ url: `/shorturls/${queryArg.name}/goto` }),\n providesTags: ['ShortURL'],\n }),\n getShortUrlStatus: build.query<GetShortUrlStatusApiResponse, GetShortUrlStatusApiArg>({\n query: (queryArg) => ({\n url: `/shorturls/${queryArg.name}/status`,\n params: {\n pretty: queryArg.pretty,\n },\n }),\n providesTags: ['ShortURL'],\n }),\n replaceShortUrlStatus: build.mutation<ReplaceShortUrlStatusApiResponse, ReplaceShortUrlStatusApiArg>({\n query: (queryArg) => ({\n url: `/shorturls/${queryArg.name}/status`,\n method: 'PUT',\n body: queryArg.shortUrl,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n },\n }),\n invalidatesTags: ['ShortURL'],\n }),\n updateShortUrlStatus: build.mutation<UpdateShortUrlStatusApiResponse, UpdateShortUrlStatusApiArg>({\n query: (queryArg) => ({\n url: `/shorturls/${queryArg.name}/status`,\n method: 'PATCH',\n body: queryArg.patch,\n params: {\n pretty: queryArg.pretty,\n dryRun: queryArg.dryRun,\n fieldManager: queryArg.fieldManager,\n fieldValidation: queryArg.fieldValidation,\n force: queryArg.force,\n },\n }),\n invalidatesTags: ['ShortURL'],\n }),\n }),\n overrideExisting: false,\n });\nexport { injectedRtkApi as generatedAPI };\nexport type GetApiResourcesApiResponse = /** status 200 OK */ ApiResourceList;\nexport type GetApiResourcesApiArg = void;\nexport type ListShortUrlApiResponse = /** status 200 OK */ ShortUrlList;\nexport type ListShortUrlApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. */\n allowWatchBookmarks?: boolean;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n /** Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion. */\n watch?: boolean;\n};\nexport type CreateShortUrlApiResponse = /** status 200 OK */\n | ShortUrl\n | /** status 201 Created */ ShortUrl\n | /** status 202 Accepted */ ShortUrl;\nexport type CreateShortUrlApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n shortUrl: ShortUrl;\n};\nexport type DeletecollectionShortUrlApiResponse = /** status 200 OK */ Status;\nexport type DeletecollectionShortUrlApiArg = {\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n \n This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications. */\n continue?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** A selector to restrict the list of returned objects by their fields. Defaults to everything. */\n fieldSelector?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** A selector to restrict the list of returned objects by their labels. Defaults to everything. */\n labelSelector?: string;\n /** limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n \n The server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned. */\n limit?: number;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n /** resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersion?: string;\n /** resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n \n Defaults to unset */\n resourceVersionMatch?: string;\n /** `sendInitialEvents=true` may be set together with `watch=true`. In that case, the watch stream will begin with synthetic events to produce the current state of objects in the collection. Once all such events have been sent, a synthetic \"Bookmark\" event will be sent. The bookmark will report the ResourceVersion (RV) corresponding to the set of objects, and be marked with `\"k8s.io/initial-events-end\": \"true\"` annotation. Afterwards, the watch stream will proceed as usual, sending watch events corresponding to changes (subsequent to the RV) to objects watched.\n \n When `sendInitialEvents` option is set, we require `resourceVersionMatch` option to also be set. The semantic of the watch request is as following: - `resourceVersionMatch` = NotOlderThan\n is interpreted as \"data at least as new as the provided `resourceVersion`\"\n and the bookmark event is send when the state is synced\n to a `resourceVersion` at least as fresh as the one provided by the ListOptions.\n If `resourceVersion` is unset, this is interpreted as \"consistent read\" and the\n bookmark event is send when the state is synced at least to the moment\n when request started being processed.\n - `resourceVersionMatch` set to any other value or unset\n Invalid error is returned.\n \n Defaults to true if `resourceVersion=\"\"` or `resourceVersion=\"0\"` (for backward compatibility reasons) and to false otherwise. */\n sendInitialEvents?: boolean;\n /** Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity. */\n timeoutSeconds?: number;\n};\nexport type GetShortUrlApiResponse = /** status 200 OK */ ShortUrl;\nexport type GetShortUrlApiArg = {\n /** name of the ShortURL */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplaceShortUrlApiResponse = /** status 200 OK */ ShortUrl | /** status 201 Created */ ShortUrl;\nexport type ReplaceShortUrlApiArg = {\n /** name of the ShortURL */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n shortUrl: ShortUrl;\n};\nexport type DeleteShortUrlApiResponse = /** status 200 OK */ Status | /** status 202 Accepted */ Status;\nexport type DeleteShortUrlApiArg = {\n /** name of the ShortURL */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately. */\n gracePeriodSeconds?: number;\n /** if set to true, it will trigger an unsafe deletion of the resource in case the normal deletion flow fails with a corrupt object error. A resource is considered corrupt if it can not be retrieved from the underlying storage successfully because of a) its data can not be transformed e.g. decryption failure, or b) it fails to decode into an object. NOTE: unsafe deletion ignores finalizer constraints, skips precondition checks, and removes the object from the storage. WARNING: This may potentially break the cluster if the workload associated with the resource being unsafe-deleted relies on normal deletion flow. Use only if you REALLY know what you are doing. The default value is false, and the user must opt in to enable it */\n ignoreStoreReadErrorWithClusterBreakingPotential?: boolean;\n /** Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both. */\n orphanDependents?: boolean;\n /** Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground. */\n propagationPolicy?: string;\n};\nexport type UpdateShortUrlApiResponse = /** status 200 OK */ ShortUrl | /** status 201 Created */ ShortUrl;\nexport type UpdateShortUrlApiArg = {\n /** name of the ShortURL */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type GetShortUrlGotoApiResponse = /** status 200 OK */ GetGoto;\nexport type GetShortUrlGotoApiArg = {\n /** name of the ResourceCallOptions */\n name: string;\n};\nexport type GetShortUrlStatusApiResponse = /** status 200 OK */ ShortUrl;\nexport type GetShortUrlStatusApiArg = {\n /** name of the ShortURL */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n};\nexport type ReplaceShortUrlStatusApiResponse = /** status 200 OK */ ShortUrl | /** status 201 Created */ ShortUrl;\nexport type ReplaceShortUrlStatusApiArg = {\n /** name of the ShortURL */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n shortUrl: ShortUrl;\n};\nexport type UpdateShortUrlStatusApiResponse = /** status 200 OK */ ShortUrl | /** status 201 Created */ ShortUrl;\nexport type UpdateShortUrlStatusApiArg = {\n /** name of the ShortURL */\n name: string;\n /** If 'true', then the output is pretty printed. Defaults to 'false' unless the user-agent indicates a browser or command-line HTTP tool (curl and wget). */\n pretty?: string;\n /** When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed */\n dryRun?: string;\n /** fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch). */\n fieldManager?: string;\n /** fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default in v1.23+ - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered. */\n fieldValidation?: string;\n /** Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests. */\n force?: boolean;\n patch: Patch;\n};\nexport type ApiResource = {\n /** categories is a list of the grouped resources this resource belongs to (e.g. 'all') */\n categories?: string[];\n /** group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\". */\n group?: string;\n /** kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') */\n kind: string;\n /** name is the plural name of the resource. */\n name: string;\n /** namespaced indicates if a resource is namespaced or not. */\n namespaced: boolean;\n /** shortNames is a list of suggested short names of the resource. */\n shortNames?: string[];\n /** singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface. */\n singularName: string;\n /** The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates. */\n storageVersionHash?: string;\n /** verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy) */\n verbs: string[];\n /** version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\". */\n version?: string;\n};\nexport type ApiResourceList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** groupVersion is the group and version this APIResourceList is for. */\n groupVersion: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** resources contains the name of the resources and if they are namespaced. */\n resources: ApiResource[];\n};\nexport type Time = string;\nexport type FieldsV1 = object;\nexport type ManagedFieldsEntry = {\n /** APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted. */\n apiVersion?: string;\n /** FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\" */\n fieldsType?: string;\n /** FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type. */\n fieldsV1?: FieldsV1;\n /** Manager is an identifier of the workflow managing these fields. */\n manager?: string;\n /** Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'. */\n operation?: string;\n /** Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource. */\n subresource?: string;\n /** Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over. */\n time?: Time;\n};\nexport type OwnerReference = {\n /** API version of the referent. */\n apiVersion: string;\n /** If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned. */\n blockOwnerDeletion?: boolean;\n /** If true, this reference points to the managing controller. */\n controller?: boolean;\n /** Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n /** Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name: string;\n /** UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid: string;\n};\nexport type ObjectMeta = {\n /** Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations */\n annotations?: {\n [key: string]: string;\n };\n /** CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n \n Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n creationTimestamp?: Time;\n /** Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only. */\n deletionGracePeriodSeconds?: number;\n /** DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n \n Populated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata */\n deletionTimestamp?: Time;\n /** Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list. */\n finalizers?: string[];\n /** GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n \n If this field is specified and the generated name exists, the server will return a 409.\n \n Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency */\n generateName?: string;\n /** A sequence number representing a specific generation of the desired state. Populated by the system. Read-only. */\n generation?: number;\n /** Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels */\n labels?: {\n [key: string]: string;\n };\n /** ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object. */\n managedFields?: ManagedFieldsEntry[];\n /** Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names */\n name?: string;\n /** Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n \n Must be a DNS_LABEL. Cannot be updated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces */\n namespace?: string;\n /** List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller. */\n ownerReferences?: OwnerReference[];\n /** An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n \n Populated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n /** UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n \n Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type ShortUrlSpec = {\n /** The original path to where the short url is linking too e.g. https://localhost:3000/eer8i1kictngga/new-dashboard-with-lib-panel */\n path: string;\n};\nexport type ShortUrlOperatorState = {\n /** descriptiveState is an optional more descriptive state field which has no requirements on format */\n descriptiveState?: string;\n /** details contains any extra information that is operator-specific */\n details?: {\n [key: string]: {\n [key: string]: any;\n };\n };\n /** lastEvaluation is the ResourceVersion last evaluated */\n lastEvaluation: string;\n /** state describes the state of the lastEvaluation.\n It is limited to three possible states for machine evaluation. */\n state: 'success' | 'in_progress' | 'failed';\n};\nexport type ShortUrlStatus = {\n /** additionalFields is reserved for future use */\n additionalFields?: {\n [key: string]: {\n [key: string]: any;\n };\n };\n /** The last time the short URL was used, 0 is the initial value */\n lastSeenAt: number;\n /** operatorStates is a map of operator ID to operator state evaluations.\n Any operator which consumes this kind SHOULD add its state evaluation information to this field. */\n operatorStates?: {\n [key: string]: ShortUrlOperatorState;\n };\n};\nexport type ShortUrl = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion: string;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind: string;\n metadata: ObjectMeta;\n spec: ShortUrlSpec;\n status?: ShortUrlStatus;\n};\nexport type ListMeta = {\n /** continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message. */\n continue?: string;\n /** remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact. */\n remainingItemCount?: number;\n /** String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency */\n resourceVersion?: string;\n /** Deprecated: selfLink is a legacy read-only field that is no longer populated by the system. */\n selfLink?: string;\n};\nexport type ShortUrlList = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n items: ShortUrl[];\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n metadata: ListMeta;\n};\nexport type StatusCause = {\n /** The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n \n Examples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\" */\n field?: string;\n /** A human-readable description of the cause of the error. This field may be presented as-is to a reader. */\n message?: string;\n /** A machine-readable description of the cause of the error. If this value is empty there is no information available. */\n reason?: string;\n};\nexport type StatusDetails = {\n /** The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes. */\n causes?: StatusCause[];\n /** The group attribute of the resource associated with the status StatusReason. */\n group?: string;\n /** The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described). */\n name?: string;\n /** If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action. */\n retryAfterSeconds?: number;\n /** UID of the resource. (when there is a single resource which can be described). More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids */\n uid?: string;\n};\nexport type Status = {\n /** APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources */\n apiVersion?: string;\n /** Suggested HTTP return code for this status, 0 if not set. */\n code?: number;\n /** Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type. */\n details?: StatusDetails;\n /** Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n kind?: string;\n /** A human-readable description of the status of this operation. */\n message?: string;\n /** Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds */\n metadata?: ListMeta;\n /** A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it. */\n reason?: string;\n /** Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status */\n status?: string;\n};\nexport type Patch = object;\nexport type GetGoto = {\n url: string;\n};\nexport const {\n useGetApiResourcesQuery,\n useLazyGetApiResourcesQuery,\n useListShortUrlQuery,\n useLazyListShortUrlQuery,\n useCreateShortUrlMutation,\n useDeletecollectionShortUrlMutation,\n useGetShortUrlQuery,\n useLazyGetShortUrlQuery,\n useReplaceShortUrlMutation,\n useDeleteShortUrlMutation,\n useUpdateShortUrlMutation,\n useGetShortUrlGotoQuery,\n useLazyGetShortUrlGotoQuery,\n useGetShortUrlStatusQuery,\n useLazyGetShortUrlStatusQuery,\n useReplaceShortUrlStatusMutation,\n useUpdateShortUrlStatusMutation,\n} = injectedRtkApi;\n","export { BASE_URL, API_GROUP, API_VERSION } from './baseAPI';\nimport { generatedAPI as rawAPI } from './endpoints.gen';\n\nexport * from './endpoints.gen';\nexport const generatedAPI = rawAPI.enhanceEndpoints({});\n","import { useEffect, useState } from 'react';\n\nimport { LS_PANEL_COPY_KEY, LS_ROW_COPY_KEY, LS_TAB_COPY_KEY } from 'app/core/constants';\nimport store from 'app/core/store';\n\nexport function useClipboardState() {\n const [hasCopiedPanel, setHasCopiedPanel] = useState(store.exists(LS_PANEL_COPY_KEY));\n const [hasCopiedRow, setHasCopiedRow] = useState(store.exists(LS_ROW_COPY_KEY));\n const [hasCopiedTab, setHasCopiedTab] = useState(store.exists(LS_TAB_COPY_KEY));\n\n useEffect(() => {\n const unsubscribe = store.subscribe(LS_PANEL_COPY_KEY, () => {\n setHasCopiedPanel(store.exists(LS_PANEL_COPY_KEY));\n });\n\n const unsubscribeRow = store.subscribe(LS_ROW_COPY_KEY, () => {\n setHasCopiedRow(store.exists(LS_ROW_COPY_KEY));\n });\n\n const unsubscribeTab = store.subscribe(LS_TAB_COPY_KEY, () => {\n setHasCopiedTab(store.exists(LS_TAB_COPY_KEY));\n });\n\n return () => {\n unsubscribe();\n unsubscribeRow();\n unsubscribeTab();\n };\n }, []);\n\n return {\n hasCopiedPanel,\n hasCopiedRow,\n hasCopiedTab,\n };\n}\n","import { getBackendSrv } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\nimport { FormModel } from 'app/features/org/UserInviteForm';\nimport { AccessControlAction } from 'app/types/accessControl';\nimport { createAsyncThunk } from 'app/types/store';\nimport { Invitee } from 'app/types/user';\n\nexport const fetchInvitees = createAsyncThunk('users/fetchInvitees', async () => {\n if (!contextSrv.hasPermission(AccessControlAction.OrgUsersAdd)) {\n return [];\n }\n\n const invitees: Invitee[] = await getBackendSrv().get('/api/org/invites');\n return invitees;\n});\n\nexport const addInvitee = createAsyncThunk('users/addInvitee', async (addInviteForm: FormModel, { dispatch }) => {\n await getBackendSrv().post(`/api/org/invites`, addInviteForm);\n await dispatch(fetchInvitees());\n});\n\nexport const revokeInvite = createAsyncThunk('users/revokeInvite', async (code: string) => {\n await getBackendSrv().patch(`/api/org/invites/${code}/revoke`, {});\n return code;\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ConfirmModal, useStyles2 } from '@grafana/ui';\n\nconst Body = () => {\n const styles = useStyles2(getStyles);\n\n return (\n <p className={styles.description}>\n {t(\n 'shared-dashboard.delete-modal.revoke-body-text',\n 'Are you sure you want to revoke this access? The dashboard can no longer be shared.'\n )}\n </p>\n );\n};\n\nexport const DeletePublicDashboardModal = ({\n onConfirm,\n onDismiss,\n}: {\n onConfirm: () => void;\n onDismiss: () => void;\n}) => {\n const translatedRevocationModalText = t('shared-dashboard.delete-modal.revoke-title', 'Revoke access');\n return (\n <ConfirmModal\n isOpen\n body={<Body />}\n onConfirm={onConfirm}\n onDismiss={onDismiss}\n title={translatedRevocationModalText}\n icon=\"trash-alt\"\n confirmText={translatedRevocationModalText}\n />\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n title: css({\n marginBottom: theme.spacing(1),\n }),\n description: css({\n fontSize: theme.typography.body.fontSize,\n }),\n});\n","import { config } from '@grafana/runtime';\n\nimport { sandboxPluginDependencies } from '../sandbox/pluginDependencies';\n\nimport { SHARED_DEPENDENCY_PREFIX } from './constants';\nimport { SystemJS } from './systemjs';\n\nexport function buildImportMap(importMap: Record<string, System.Module>) {\n return Object.keys(importMap).reduce<Record<string, string>>((acc, key) => {\n // Use the 'package:' prefix to act as a URL instead of a bare specifier\n const module_name = `${SHARED_DEPENDENCY_PREFIX}:${key}`;\n\n // expose dependency to loaders\n addPreload(module_name, importMap[key]);\n\n sandboxPluginDependencies.set(key, importMap[key]);\n\n acc[key] = module_name;\n return acc;\n }, {});\n}\n\nfunction addPreload(id: string, preload: (() => Promise<System.Module>) | System.Module) {\n if (SystemJS.has(id)) {\n return;\n }\n\n let resolvedId;\n try {\n resolvedId = SystemJS.resolve(id);\n } catch (e) {\n console.log(e);\n }\n\n if (resolvedId && SystemJS.has(resolvedId)) {\n return;\n }\n\n const moduleId = resolvedId || id;\n if (typeof preload === 'function') {\n SystemJS.register(id, [], (_export) => {\n return {\n execute: async function () {\n const module = await preload();\n _export(module);\n },\n };\n });\n } else {\n SystemJS.set(moduleId, preload);\n }\n}\n\nexport function isHostedOnCDN(path: string) {\n return Boolean(config.pluginsCDNBaseURL) && path.startsWith(config.pluginsCDNBaseURL);\n}\n\n// This function is used to dynamically prepend the appSubUrl in the frontend.\n// This is required because if serve_from_sub_path is false the Image Renderer sets the subpath\n// to an empty string and sets appurl to localhost which causes plugins to fail to load.\n// https://github.com/grafana/grafana/issues/76180\nexport function resolveModulePath(path: string) {\n if (path.startsWith('http') || path.startsWith('/')) {\n return path;\n }\n\n return `${config.appSubUrl ?? ''}/${path}`;\n}\n","import { cx } from '@emotion/css';\nimport { isObject } from 'lodash';\nimport { HTMLProps } from 'react';\nimport * as React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { InlineLabel } from '../Forms/InlineLabel';\n\nimport { SegmentSelect } from './SegmentSelect';\nimport { getSegmentStyles } from './styles';\nimport { SegmentProps } from './types';\nimport { useExpandableLabel } from './useExpandableLabel';\n\nexport interface SegmentSyncProps<T> extends SegmentProps, Omit<HTMLProps<HTMLDivElement>, 'value' | 'onChange'> {\n value?: T | SelectableValue<T>;\n onChange: (item: SelectableValue<T>) => void;\n options: Array<SelectableValue<T>>;\n inputMinWidth?: number;\n}\n\n/**\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/inputs-segment--docs\n */\nexport function Segment<T>({\n options,\n value,\n onChange,\n Component,\n className,\n allowCustomValue,\n allowEmptyValue,\n placeholder,\n disabled,\n inputMinWidth,\n inputPlaceholder,\n onExpandedChange,\n autofocus = false,\n ...rest\n}: React.PropsWithChildren<SegmentSyncProps<T>>) {\n const [Label, labelWidth, expanded, setExpanded] = useExpandableLabel(autofocus, onExpandedChange);\n const width = inputMinWidth ? Math.max(inputMinWidth, labelWidth) : labelWidth;\n const styles = useStyles2(getSegmentStyles);\n\n if (!expanded) {\n const label = isObject(value) ? value.label : value;\n const labelAsString = label != null ? String(label) : undefined;\n\n return (\n <Label\n disabled={disabled}\n Component={\n Component || (\n <InlineLabel\n className={cx(\n styles.segment,\n {\n [styles.queryPlaceholder]: placeholder !== undefined && !value,\n [styles.disabled]: disabled,\n },\n className\n )}\n >\n {labelAsString || placeholder}\n </InlineLabel>\n )\n }\n />\n );\n }\n\n return (\n <SegmentSelect\n {...rest}\n value={value && !isObject(value) ? { value } : value}\n placeholder={inputPlaceholder}\n options={options}\n width={width}\n onClickOutside={() => setExpanded(false)}\n allowCustomValue={allowCustomValue}\n allowEmptyValue={allowEmptyValue}\n onChange={(item) => {\n setExpanded(false);\n onChange(item);\n }}\n />\n );\n}\n","import { memo } from 'react';\n\nimport { DataFrame, getFieldDisplayName, getFieldSeriesColor } from '@grafana/data';\nimport { VizLegendOptions, AxisPlacement } from '@grafana/schema';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { VizLayout, VizLayoutLegendProps } from '../VizLayout/VizLayout';\nimport { VizLegend } from '../VizLegend/VizLegend';\nimport { VizLegendItem } from '../VizLegend/types';\n\nimport { UPlotConfigBuilder } from './config/UPlotConfigBuilder';\nimport { getDisplayValuesForCalcs } from './utils';\n\ninterface PlotLegendProps extends VizLegendOptions, Omit<VizLayoutLegendProps, 'children'> {\n data: DataFrame[];\n config: UPlotConfigBuilder;\n}\n\n/**\n * mostly duplicates logic in PlotLegend below :(\n *\n * @internal\n */\nexport function hasVisibleLegendSeries(config: UPlotConfigBuilder, data: DataFrame[]) {\n return config.getSeries().some((s) => {\n const fieldIndex = s.props.dataFrameFieldIndex;\n\n if (!fieldIndex) {\n return false;\n }\n\n const field = data[fieldIndex.frameIndex]?.fields[fieldIndex.fieldIndex];\n\n if (!field || field.config.custom?.hideFrom?.legend) {\n return false;\n }\n\n return true;\n });\n}\n\nexport const PlotLegend = memo(\n ({ data, config, placement, calcs, displayMode, ...vizLayoutLegendProps }: PlotLegendProps) => {\n const theme = useTheme2();\n const legendItems = config\n .getSeries()\n .map<VizLegendItem | undefined>((s) => {\n const seriesConfig = s.props;\n const fieldIndex = seriesConfig.dataFrameFieldIndex;\n const axisPlacement = config.getAxisPlacement(s.props.scaleKey);\n\n if (!fieldIndex) {\n return undefined;\n }\n\n const field = data[fieldIndex.frameIndex]?.fields[fieldIndex.fieldIndex];\n\n if (!field || field.config.custom?.hideFrom?.legend) {\n return undefined;\n }\n\n const label = getFieldDisplayName(field, data[fieldIndex.frameIndex]!, data);\n const scaleColor = getFieldSeriesColor(field, theme);\n const seriesColor = scaleColor.color;\n\n return {\n disabled: !(seriesConfig.show ?? true),\n fieldIndex,\n color: seriesColor,\n label,\n yAxis: axisPlacement === AxisPlacement.Left || axisPlacement === AxisPlacement.Bottom ? 1 : 2,\n getDisplayValues: () => getDisplayValuesForCalcs(calcs, field, theme),\n getItemKey: () => `${label}-${fieldIndex.frameIndex}-${fieldIndex.fieldIndex}`,\n lineStyle: seriesConfig.lineStyle,\n };\n })\n .filter((i): i is VizLegendItem => i !== undefined);\n\n return (\n <VizLayout.Legend placement={placement} {...vizLayoutLegendProps}>\n <VizLegend\n placement={placement}\n items={legendItems}\n displayMode={displayMode}\n sortBy={vizLayoutLegendProps.sortBy}\n sortDesc={vizLayoutLegendProps.sortDesc}\n isSortable={true}\n />\n </VizLayout.Legend>\n );\n }\n);\n\nPlotLegend.displayName = 'PlotLegend';\n","import { partition } from 'lodash';\n\nimport { DataFrame, Field, FieldWithIndex, LinkModel, LogRowModel, ScopedVars } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { safeStringifyValue } from 'app/core/utils/explore';\nimport { ExploreFieldLinkModel } from 'app/features/explore/utils/links';\nimport { GetFieldLinksFn } from 'app/plugins/panel/logs/types';\n\nimport { parseLogsFrame } from '../logsFrame';\n\nexport type FieldDef = {\n keys: string[];\n values: string[];\n links?: Array<LinkModel<Field>> | ExploreFieldLinkModel[];\n fieldIndex: number;\n};\n\n/**\n * Returns all fields for log row which consists of fields we parse from the message itself and additional fields\n * found in the dataframe (they may contain links).\n */\nexport const getAllFields = (row: LogRowModel, getFieldLinks?: GetFieldLinksFn) => {\n return getDataframeFields(row, getFieldLinks);\n};\n\n/**\n * A log line may contain many links that would all need to go on their own logs detail row\n * This iterates through and creates a FieldDef (row) per link.\n */\nexport const createLogLineLinks = (hiddenFieldsWithLinks: FieldDef[]): FieldDef[] => {\n let fieldsWithLinksFromVariableMap: FieldDef[] = [];\n hiddenFieldsWithLinks.forEach((linkField) => {\n linkField.links?.forEach((link: LinkModel | ExploreFieldLinkModel) => {\n if ('variables' in link && link.variables.length > 0) {\n // convert ExploreFieldLinkModel to LinkModel by omitting variables field\n const fieldDefFromLink: LinkModel = {\n href: link.href,\n title: link.title,\n origin: link.origin,\n onClick: link.onClick,\n target: link.target,\n };\n const variableKeys = link.variables.map((variable) => {\n const varName = variable.variableName;\n const fieldPath = variable.fieldPath ? `.${variable.fieldPath}` : '';\n return `${varName}${fieldPath}`;\n });\n const variableValues = link.variables.map((variable) => (variable.found ? variable.value : ''));\n fieldsWithLinksFromVariableMap.push({\n keys: variableKeys,\n values: variableValues,\n links: [fieldDefFromLink],\n fieldIndex: linkField.fieldIndex,\n });\n }\n });\n });\n return fieldsWithLinksFromVariableMap;\n};\n\n/**\n * creates fields from the dataframe-fields, adding data-links, when field.config.links exists\n */\nexport const getDataframeFields = (row: LogRowModel, getFieldLinks?: GetFieldLinksFn): FieldDef[] => {\n const nonEmptyVisibleFields = getNonEmptyVisibleFields(row);\n return nonEmptyVisibleFields.map((field) => {\n const vars: ScopedVars = {\n __labels: {\n text: t('logs.get-dataframe-fields.vars.text.labels', 'Labels'),\n value: {\n tags: { ...row.labels },\n },\n },\n };\n const links = getFieldLinks ? getFieldLinks(field, row.rowIndex, row.dataFrame, vars) : [];\n const fieldVal = field.values[row.rowIndex];\n const outputVal =\n typeof fieldVal === 'string' || typeof fieldVal === 'number' ? fieldVal.toString() : safeStringifyValue(fieldVal);\n return {\n keys: [field.name],\n values: [outputVal],\n links: links,\n fieldIndex: field.index,\n };\n });\n};\n\ntype VisOptions = {\n keepTimestamp?: boolean;\n keepBody?: boolean;\n};\n\n// return the fields (their indices to be exact) that should be visible\n// based on the logs dataframe structure\nfunction getVisibleFieldIndices(frame: DataFrame, opts: VisOptions): Set<number> {\n const logsFrame = parseLogsFrame(frame);\n if (logsFrame === null) {\n // should not really happen\n return new Set();\n }\n\n // we want to show every \"extra\" field\n const visibleFieldIndices = new Set(logsFrame.extraFields.map((f) => f.index));\n\n // we always show the severity field\n if (logsFrame.severityField !== null) {\n visibleFieldIndices.add(logsFrame.severityField.index);\n }\n\n if (opts.keepBody) {\n visibleFieldIndices.add(logsFrame.bodyField.index);\n }\n\n if (opts.keepTimestamp) {\n visibleFieldIndices.add(logsFrame.timeField.index);\n }\n\n return visibleFieldIndices;\n}\n\n// split the dataframe's fields into visible and hidden arrays.\n// note: does not do any row-level checks,\n// for example does not check if the field's values are nullish\n// or not at a givn row.\nexport function separateVisibleFields(\n frame: DataFrame,\n opts?: VisOptions\n): { visible: FieldWithIndex[]; hidden: FieldWithIndex[] } {\n const fieldsWithIndex: FieldWithIndex[] = frame.fields.map((field, index) => ({ ...field, index }));\n\n const visibleFieldIndices = getVisibleFieldIndices(frame, opts ?? {});\n\n const [visible, hidden] = partition(fieldsWithIndex, (f) => {\n // hidden fields are always hidden\n if (f.config.custom?.hidden) {\n return false;\n }\n\n // fields with data-links are visible\n if ((f.config.links ?? []).length > 0) {\n return true;\n }\n\n return visibleFieldIndices.has(f.index);\n });\n\n return { visible, hidden };\n}\n\n// Optimized version of separateVisibleFields() to only return visible fields for getAllFields()\nfunction getNonEmptyVisibleFields(row: LogRowModel, opts?: VisOptions): FieldWithIndex[] {\n const frame = row.dataFrame;\n const visibleFieldIndices = getVisibleFieldIndices(frame, opts ?? {});\n const visibleFields: FieldWithIndex[] = [];\n for (let index = 0; index < frame.fields.length; index++) {\n const field = frame.fields[index];\n // ignore empty fields\n if (field.values[row.rowIndex] == null) {\n continue;\n }\n // hidden fields are always hidden\n if (field.config.custom?.hidden) {\n continue;\n }\n\n // fields with data-links are visible\n if ((field.config.links && field.config.links.length > 0) || visibleFieldIndices.has(index)) {\n visibleFields.push({ ...field, index });\n }\n }\n return visibleFields;\n}\n","import { omit } from 'lodash';\n\nimport { AnnotationQuery, isEmptyObject, TimeRange } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport {\n behaviors,\n dataLayers,\n QueryVariable,\n SceneDataQuery,\n SceneDataTransformer,\n SceneQueryRunner,\n SceneVariables,\n SceneVariableSet,\n VizPanel,\n} from '@grafana/scenes';\nimport { DataSourceRef, VariableRefresh } from '@grafana/schema';\nimport { sortedDeepCloneWithoutNulls } from 'app/core/utils/object';\n\nimport {\n Spec as DashboardV2Spec,\n defaultSpec as defaultDashboardV2Spec,\n defaultFieldConfigSource,\n PanelKind,\n PanelQueryKind,\n TransformationKind,\n FieldConfigSource,\n DataTransformerConfig,\n PanelQuerySpec,\n DataQueryKind,\n QueryOptionsSpec,\n QueryVariableKind,\n TextVariableKind,\n IntervalVariableKind,\n DatasourceVariableKind,\n CustomVariableKind,\n ConstantVariableKind,\n GroupByVariableKind,\n AdhocVariableKind,\n AnnotationQueryKind,\n DataLink,\n LibraryPanelKind,\n Element,\n DashboardCursorSync,\n FieldColor,\n defaultFieldConfig,\n defaultDataQueryKind,\n SwitchVariableKind,\n} from '../../../../../packages/grafana-schema/src/schema/dashboard/v2';\nimport { DashboardDataLayerSet } from '../scene/DashboardDataLayerSet';\nimport { DashboardScene, DashboardSceneState } from '../scene/DashboardScene';\nimport { PanelTimeRange } from '../scene/panel-timerange/PanelTimeRange';\nimport { dashboardSceneGraph } from '../utils/dashboardSceneGraph';\nimport { getLibraryPanelBehavior, getPanelIdForVizPanel, getQueryRunnerFor, isLibraryPanel } from '../utils/utils';\n\nimport { DSReferencesMapping } from './DashboardSceneSerializer';\nimport { transformV1ToV2AnnotationQuery } from './annotations';\nimport { sceneVariablesSetToSchemaV2Variables } from './sceneVariablesSetToVariables';\nimport { colorIdEnumToColorIdV2, transformCursorSynctoEnum } from './transformToV2TypesUtils';\n\n// FIXME: This is temporary to avoid creating partial types for all the new schema, it has some performance implications, but it's fine for now\ntype DeepPartial<T> = T extends object\n ? {\n [P in keyof T]?: DeepPartial<T[P]>;\n }\n : T;\n\nexport function transformSceneToSaveModelSchemaV2(scene: DashboardScene, isSnapshot = false): DashboardV2Spec {\n const sceneDash = scene.state;\n const timeRange = sceneDash.$timeRange!.state;\n\n const controlsState = sceneDash.controls?.state;\n const refreshPicker = controlsState?.refreshPicker;\n\n const dsReferencesMapping: DSReferencesMapping = scene.serializer.getDSReferencesMapping();\n\n const dashboardSchemaV2: DeepPartial<DashboardV2Spec> = {\n //dashboard settings\n title: sceneDash.title,\n description: sceneDash.description,\n cursorSync: getCursorSync(sceneDash),\n liveNow: getLiveNow(sceneDash),\n preload: sceneDash.preload ?? defaultDashboardV2Spec().preload,\n editable: sceneDash.editable ?? defaultDashboardV2Spec().editable,\n links: sceneDash.links ?? defaultDashboardV2Spec().links,\n tags: sceneDash.tags ?? defaultDashboardV2Spec().tags,\n // EOF dashboard settings\n\n // time settings\n timeSettings: {\n timezone: timeRange.timeZone,\n from: timeRange.from,\n to: timeRange.to,\n autoRefresh: refreshPicker?.state.refresh || '',\n autoRefreshIntervals: refreshPicker?.state.intervals,\n hideTimepicker: controlsState?.hideTimeControls ?? false,\n weekStart: timeRange.weekStart,\n fiscalYearStartMonth: timeRange.fiscalYearStartMonth,\n nowDelay: timeRange.UNSAFE_nowDelay,\n quickRanges: controlsState?.timePicker.state.quickRanges,\n },\n // EOF time settings\n\n // variables\n variables: getVariables(sceneDash, dsReferencesMapping),\n // EOF variables\n\n // elements\n elements: getElements(scene, dsReferencesMapping),\n // EOF elements\n\n // annotations\n annotations: getAnnotations(sceneDash, dsReferencesMapping),\n // EOF annotations\n\n // layout\n layout: sceneDash.body.serialize(),\n // EOF layout\n };\n\n try {\n // validateDashboardSchemaV2 will throw an error if the dashboard is not valid\n if (validateDashboardSchemaV2(dashboardSchemaV2)) {\n return sortedDeepCloneWithoutNulls(dashboardSchemaV2, true);\n }\n // should never reach this point, validation should throw an error\n throw new Error('Error we could transform the dashboard to schema v2: ' + dashboardSchemaV2);\n } catch (reason) {\n console.error('Error transforming dashboard to schema v2: ' + reason, dashboardSchemaV2);\n throw new Error('Error transforming dashboard to schema v2: ' + reason);\n }\n}\n\nfunction getCursorSync(state: DashboardSceneState) {\n const cursorSync = state.$behaviors?.find((b): b is behaviors.CursorSync => b instanceof behaviors.CursorSync)?.state\n .sync;\n\n return transformCursorSynctoEnum(cursorSync);\n}\n\nfunction getLiveNow(state: DashboardSceneState) {\n const liveNow =\n state.$behaviors?.find((b): b is behaviors.LiveNowTimer => b instanceof behaviors.LiveNowTimer)?.isEnabled ||\n undefined;\n // hack for validator\n if (liveNow === undefined) {\n return Boolean(defaultDashboardV2Spec().liveNow);\n }\n return Boolean(liveNow);\n}\n\nfunction getElements(scene: DashboardScene, dsReferencesMapping: DSReferencesMapping) {\n const panels = scene.state.body.getVizPanels() ?? [];\n const panelsArray = panels.map((vizPanel) => {\n return vizPanelToSchemaV2(vizPanel, dsReferencesMapping);\n });\n return createElements(panelsArray, scene);\n}\n\nexport function vizPanelToSchemaV2(\n vizPanel: VizPanel,\n dsReferencesMapping?: DSReferencesMapping\n): PanelKind | LibraryPanelKind {\n if (isLibraryPanel(vizPanel)) {\n const behavior = getLibraryPanelBehavior(vizPanel)!;\n const elementSpec: LibraryPanelKind = {\n kind: 'LibraryPanel',\n spec: {\n id: getPanelIdForVizPanel(vizPanel),\n title: vizPanel.state.title,\n libraryPanel: {\n uid: behavior.state.uid,\n name: behavior.state.name,\n },\n },\n };\n return elementSpec;\n }\n\n const defaults = handleFieldConfigDefaultsConversion(vizPanel);\n\n const vizFieldConfig: FieldConfigSource = {\n ...vizPanel.state.fieldConfig,\n defaults,\n };\n\n const elementSpec: PanelKind = {\n kind: 'Panel',\n spec: {\n id: getPanelIdForVizPanel(vizPanel),\n title: vizPanel.state.title,\n description: vizPanel.state.description ?? '',\n links: getPanelLinks(vizPanel),\n transparent: vizPanel.state.displayMode === 'transparent' ? true : undefined,\n data: {\n kind: 'QueryGroup',\n spec: {\n queries: getVizPanelQueries(vizPanel, dsReferencesMapping),\n transformations: getVizPanelTransformations(vizPanel),\n queryOptions: getVizPanelQueryOptions(vizPanel),\n },\n },\n vizConfig: {\n kind: 'VizConfig',\n group: vizPanel.state.pluginId,\n version: vizPanel.state.pluginVersion ?? '',\n spec: {\n options: vizPanel.state.options,\n fieldConfig: vizFieldConfig ?? defaultFieldConfigSource(),\n },\n },\n },\n };\n return elementSpec;\n}\n\nfunction handleFieldConfigDefaultsConversion(vizPanel: VizPanel) {\n if (!vizPanel.state.fieldConfig || !vizPanel.state.fieldConfig.defaults) {\n return defaultFieldConfig();\n }\n\n // Handle type conversion for color mode\n const rawColor = vizPanel.state.fieldConfig.defaults.color;\n let color: FieldColor | undefined;\n\n if (rawColor) {\n const convertedMode = colorIdEnumToColorIdV2(rawColor.mode);\n\n if (convertedMode) {\n color = {\n ...rawColor,\n mode: convertedMode,\n };\n }\n }\n\n // Remove null from the defaults because schema V2 doesn't support null for these fields\n const decimals = vizPanel.state.fieldConfig.defaults.decimals ?? undefined;\n const min = vizPanel.state.fieldConfig.defaults.min ?? undefined;\n const max = vizPanel.state.fieldConfig.defaults.max ?? undefined;\n\n const defaults = Object.fromEntries(\n Object.entries({\n ...vizPanel.state.fieldConfig.defaults,\n decimals,\n min,\n max,\n color,\n }).filter(([_, value]) => {\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return value !== undefined;\n })\n );\n\n return defaults;\n}\n\nfunction getPanelLinks(panel: VizPanel): DataLink[] {\n const vizLinks = dashboardSceneGraph.getPanelLinks(panel);\n if (vizLinks) {\n return vizLinks.state.rawLinks ?? [];\n }\n return [];\n}\n\nexport function getVizPanelQueries(vizPanel: VizPanel, dsReferencesMapping?: DSReferencesMapping): PanelQueryKind[] {\n const queries: PanelQueryKind[] = [];\n const queryRunner = getQueryRunnerFor(vizPanel);\n const vizPanelQueries = queryRunner?.state.queries;\n\n if (vizPanelQueries) {\n vizPanelQueries.forEach((query) => {\n const queryDatasource = getElementDatasource(vizPanel, query, 'panel', queryRunner, dsReferencesMapping);\n\n const dataQuery: DataQueryKind = {\n kind: 'DataQuery',\n version: defaultDataQueryKind().version,\n group: getDataQueryKind(query, queryRunner),\n datasource: {\n name: queryDatasource?.uid,\n },\n spec: omit(query, 'datasource', 'refId', 'hide'),\n };\n\n if (!dataQuery.datasource?.name) {\n delete dataQuery.datasource;\n }\n\n const querySpec: PanelQuerySpec = {\n query: dataQuery,\n refId: query.refId,\n hidden: Boolean(query.hide),\n };\n queries.push({\n kind: 'PanelQuery',\n spec: querySpec,\n });\n });\n }\n return queries;\n}\n\nexport function getDataQueryKind(query: SceneDataQuery | string, queryRunner?: SceneQueryRunner): string {\n // Query is a string - get default data source type\n if (typeof query === 'string') {\n const defaultDS = getDefaultDataSourceRef();\n return defaultDS?.type || '';\n }\n\n // Query has explicit datasource with type\n if (query.datasource?.type) {\n return query.datasource.type;\n }\n\n // Get type from query runner's datasource\n if (queryRunner?.state.datasource?.type) {\n return queryRunner.state.datasource.type;\n }\n\n // Fall back to default datasource\n const defaultDS = getDefaultDataSourceRef();\n return defaultDS?.type || '';\n}\n\nexport function getDataQuerySpec(query: SceneDataQuery): DataQueryKind['spec'] {\n return query;\n}\n\nfunction getVizPanelTransformations(vizPanel: VizPanel): TransformationKind[] {\n let transformations: TransformationKind[] = [];\n const dataProvider = vizPanel.state.$data;\n if (dataProvider instanceof SceneDataTransformer) {\n const transformationList = dataProvider.state.transformations;\n\n if (transformationList.length === 0) {\n return [];\n }\n\n for (const transformationItem of transformationList) {\n const transformation = transformationItem;\n\n if ('id' in transformation) {\n // Transformation is a DataTransformerConfig\n const transformationSpec: DataTransformerConfig = {\n id: transformation.id,\n disabled: transformation.disabled,\n filter: transformation.filter,\n ...(transformation.topic && { topic: transformation.topic }),\n options: transformation.options,\n };\n\n transformations.push({\n kind: transformation.id,\n spec: transformationSpec,\n });\n } else {\n throw new Error('Unsupported transformation type');\n }\n }\n }\n return transformations;\n}\n\nfunction getVizPanelQueryOptions(vizPanel: VizPanel): QueryOptionsSpec {\n let queryOptions: QueryOptionsSpec = {};\n const queryRunner = getQueryRunnerFor(vizPanel);\n\n if (queryRunner) {\n queryOptions.maxDataPoints = queryRunner.state.maxDataPoints;\n\n if (queryRunner.state.cacheTimeout) {\n queryOptions.cacheTimeout = queryRunner.state.cacheTimeout;\n }\n\n if (queryRunner.state.queryCachingTTL) {\n queryOptions.queryCachingTTL = queryRunner.state.queryCachingTTL;\n }\n if (queryRunner.state.minInterval) {\n queryOptions.interval = queryRunner.state.minInterval;\n }\n }\n\n const panelTime = vizPanel.state.$timeRange;\n\n if (panelTime instanceof PanelTimeRange) {\n queryOptions.timeFrom = panelTime.state.timeFrom;\n queryOptions.timeShift = panelTime.state.timeShift;\n queryOptions.hideTimeOverride = panelTime.state.hideTimeOverride;\n queryOptions.timeCompare = panelTime.state.compareWith;\n }\n return queryOptions;\n}\n\nexport function createElements(panels: Element[], scene: DashboardScene): Record<string, Element> {\n return panels.reduce<Record<string, Element>>((elements, panel) => {\n let elementKey = scene.serializer.getElementIdForPanel(panel.spec.id);\n elements[elementKey!] = panel;\n return elements;\n }, {});\n}\n\nfunction getVariables(oldDash: DashboardSceneState, dsReferencesMapping?: DSReferencesMapping) {\n const variablesSet = oldDash.$variables;\n\n // variables is an array of all variables kind (union)\n let variables: Array<\n | QueryVariableKind\n | TextVariableKind\n | IntervalVariableKind\n | DatasourceVariableKind\n | CustomVariableKind\n | ConstantVariableKind\n | GroupByVariableKind\n | AdhocVariableKind\n | SwitchVariableKind\n > = [];\n\n if (variablesSet instanceof SceneVariableSet) {\n variables = sceneVariablesSetToSchemaV2Variables(variablesSet, false, dsReferencesMapping);\n }\n\n return variables;\n}\n\nfunction getAnnotations(state: DashboardSceneState, dsReferencesMapping?: DSReferencesMapping): AnnotationQueryKind[] {\n const data = state.$data;\n if (!(data instanceof DashboardDataLayerSet)) {\n return [];\n }\n const annotations: AnnotationQueryKind[] = [];\n for (const layer of data.state.annotationLayers) {\n if (!(layer instanceof dataLayers.AnnotationsDataLayer)) {\n continue;\n }\n\n const datasource = getElementDatasource(layer, layer.state.query, 'annotation', undefined, dsReferencesMapping);\n\n let layerDs = layer.state.query.datasource;\n\n if (!layerDs) {\n // This can happen only if we are transforming a scene that was created\n // from a v1 spec. In v1 annotation layer can contain no datasource ref, which is guaranteed\n // for layers created for v2 schema. See transform transformSaveModelSchemaV2ToScene.ts.\n // In this case we will resolve default data source\n layerDs = getDefaultDataSourceRef();\n console.error(\n 'Misconfigured AnnotationsDataLayer: Data source is required for annotations. Resolving default data source',\n layer,\n layerDs\n );\n }\n\n const result = transformV1ToV2AnnotationQuery(layer.state.query, layerDs.type!, layerDs.uid!, {\n enable: layer.state.isEnabled,\n hide: layer.state.isHidden,\n });\n\n const annotationQuery = layer.state.query;\n\n // If filter is an empty array, don't save it\n if (annotationQuery.filter?.ids?.length) {\n result.spec.filter = annotationQuery.filter;\n }\n\n // Finally, if the datasource references mapping did not containt data source ref,\n // this means that the original model that was fetched did not contain it. In such scenario we don't want to save\n // the explicit data source reference, so lets remove it from the save model.\n if (!datasource) {\n delete result.spec.query.datasource;\n }\n\n annotations.push(result);\n }\n\n return annotations;\n}\n\nexport function getAnnotationQueryKind(annotationQuery: AnnotationQuery): string {\n if (annotationQuery.datasource?.type) {\n return annotationQuery.datasource.type;\n } else {\n const ds = getDefaultDataSourceRef();\n if (ds) {\n return ds.type!; // in the datasource list from bootData \"id\" is the type\n }\n // if we can't find the default datasource, return grafana as default\n return 'grafana';\n }\n}\n\nexport function getDefaultDataSourceRef(): DataSourceRef {\n // we need to return the default datasource configured in the BootConfig\n const defaultDatasource = config.defaultDatasource;\n\n // get default datasource type\n const dsList = config.datasources;\n const ds = dsList[defaultDatasource];\n\n return { type: ds.meta.id, uid: ds.name }; // in the datasource list from bootData \"id\" is the type\n}\n\nexport function trimDashboardForSnapshot(title: string, time: TimeRange, dash: DashboardV2Spec, panel?: VizPanel) {\n let spec: DashboardV2Spec = {\n ...dash,\n title,\n timeSettings: {\n ...dash.timeSettings,\n from: time.from.toISOString(),\n to: time.to.toISOString(),\n },\n links: [],\n };\n\n // When VizPanel is present, we are snapshoting a single panel. The rest of the panels is removed from the dashboard,\n // and the panel is resized to 24x20 grid and placed at the top of the dashboard.\n if (panel) {\n const panelId = getPanelIdForVizPanel(panel);\n\n // Find the panel in elements\n const panelElementKey = Object.keys(dash.elements || {}).find((key) => {\n const element = dash.elements![key];\n return element.spec.id === panelId;\n });\n\n if (panelElementKey) {\n // Keep only this panel in elements\n spec.elements = {\n [panelElementKey]: dash.elements![panelElementKey],\n };\n\n spec.layout = {\n kind: 'GridLayout',\n spec: {\n items: [\n {\n kind: 'GridLayoutItem',\n spec: {\n element: {\n kind: 'ElementReference',\n name: panelElementKey,\n },\n width: 24,\n height: 20,\n x: 0,\n y: 0,\n },\n },\n ],\n },\n };\n }\n }\n\n // Remove links from all panels\n spec.elements = Object.fromEntries(\n Object.entries(spec.elements).map(([key, element]) => {\n if ('links' in element) {\n element.links = [];\n }\n return [key, element];\n })\n );\n\n if (spec.annotations) {\n const annotations = spec.annotations.filter((annotation) => annotation.spec.enable) || [];\n const trimedAnnotations = annotations.map((annotation): AnnotationQueryKind => {\n return {\n kind: 'AnnotationQuery',\n spec: {\n name: annotation.spec.name,\n enable: annotation.spec.enable,\n iconColor: annotation.spec.iconColor,\n builtIn: annotation.spec.builtIn,\n hide: annotation.spec.hide,\n query: annotation.spec.query,\n },\n };\n });\n spec.annotations = trimedAnnotations;\n }\n\n if (spec.variables) {\n spec.variables.forEach((variable) => {\n if ('query' in variable) {\n variable.query = '';\n }\n if ('options' in variable && 'current' in variable) {\n variable.options = variable.current && !isEmptyObject(variable.current) ? [variable.current] : [];\n }\n\n if ('refresh' in variable) {\n variable.refresh = VariableRefresh.never;\n }\n });\n }\n\n return spec;\n}\n\n// Function to know if the dashboard transformed is a valid DashboardV2Spec\nexport function validateDashboardSchemaV2(dash: unknown): dash is DashboardV2Spec {\n if (typeof dash !== 'object' || dash === null || Array.isArray(dash)) {\n throw new Error('Dashboard is not an object or is null');\n }\n\n // Required properties\n if (!('title' in dash) || typeof dash.title !== 'string') {\n throw new Error('Title is not a string');\n }\n if (!('timeSettings' in dash) || typeof dash.timeSettings !== 'object' || dash.timeSettings === null) {\n throw new Error('TimeSettings is not an object or is null');\n }\n if (!('variables' in dash) || !Array.isArray(dash.variables)) {\n throw new Error('Variables is not an array');\n }\n if (!('elements' in dash) || typeof dash.elements !== 'object' || dash.elements === null) {\n throw new Error('Elements is not an object or is null');\n }\n if (!('annotations' in dash) || !Array.isArray(dash.annotations)) {\n throw new Error('Annotations is not an array');\n }\n if (!('layout' in dash) || typeof dash.layout !== 'object' || dash.layout === null) {\n throw new Error('Layout is not an object or is null');\n }\n\n // Optional properties - only validate if present\n if ('description' in dash && dash.description !== undefined && typeof dash.description !== 'string') {\n throw new Error('Description is not a string');\n }\n if ('cursorSync' in dash && dash.cursorSync !== undefined) {\n const validCursorSyncValues = ((): string[] => {\n const typeValues: DashboardCursorSync[] = ['Off', 'Crosshair', 'Tooltip'];\n return typeValues;\n })();\n\n if (typeof dash.cursorSync !== 'string' || !validCursorSyncValues.includes(dash.cursorSync)) {\n throw new Error('CursorSync is not a valid value');\n }\n }\n if ('liveNow' in dash && dash.liveNow !== undefined && typeof dash.liveNow !== 'boolean') {\n throw new Error('LiveNow is not a boolean');\n }\n if ('preload' in dash && dash.preload !== undefined && typeof dash.preload !== 'boolean') {\n throw new Error('Preload is not a boolean');\n }\n if ('editable' in dash && dash.editable !== undefined && typeof dash.editable !== 'boolean') {\n throw new Error('Editable is not a boolean');\n }\n if ('links' in dash && dash.links !== undefined && !Array.isArray(dash.links)) {\n throw new Error('Links is not an array');\n }\n if ('tags' in dash && dash.tags !== undefined && !Array.isArray(dash.tags)) {\n throw new Error('Tags is not an array');\n }\n if ('id' in dash && dash.id !== undefined && typeof dash.id !== 'number') {\n throw new Error('ID is not a number');\n }\n\n // Time settings validation\n const timeSettings = dash.timeSettings;\n\n // Required time settings\n if (!('from' in timeSettings) || typeof timeSettings.from !== 'string') {\n throw new Error('From is not a string');\n }\n if (!('to' in timeSettings) || typeof timeSettings.to !== 'string') {\n throw new Error('To is not a string');\n }\n if (!('autoRefresh' in timeSettings) || typeof timeSettings.autoRefresh !== 'string') {\n throw new Error('AutoRefresh is not a string');\n }\n if (!('hideTimepicker' in timeSettings) || typeof timeSettings.hideTimepicker !== 'boolean') {\n throw new Error('HideTimepicker is not a boolean');\n }\n\n // Optional time settings with defaults\n if (\n 'autoRefreshIntervals' in timeSettings &&\n timeSettings.autoRefreshIntervals !== undefined &&\n !Array.isArray(timeSettings.autoRefreshIntervals)\n ) {\n throw new Error('AutoRefreshIntervals is not an array');\n }\n if ('timezone' in timeSettings && timeSettings.timezone !== undefined && typeof timeSettings.timezone !== 'string') {\n throw new Error('Timezone is not a string');\n }\n if (\n 'quickRanges' in timeSettings &&\n timeSettings.quickRanges !== undefined &&\n !Array.isArray(timeSettings.quickRanges)\n ) {\n throw new Error('QuickRanges is not an array');\n }\n if ('weekStart' in timeSettings && timeSettings.weekStart !== undefined) {\n if (\n typeof timeSettings.weekStart !== 'string' ||\n !['saturday', 'sunday', 'monday'].includes(timeSettings.weekStart)\n ) {\n throw new Error('WeekStart should be one of \"saturday\", \"sunday\" or \"monday\"');\n }\n }\n if ('nowDelay' in timeSettings && timeSettings.nowDelay !== undefined && typeof timeSettings.nowDelay !== 'string') {\n throw new Error('NowDelay is not a string');\n }\n if (\n 'fiscalYearStartMonth' in timeSettings &&\n timeSettings.fiscalYearStartMonth !== undefined &&\n typeof timeSettings.fiscalYearStartMonth !== 'number'\n ) {\n throw new Error('FiscalYearStartMonth is not a number');\n }\n\n // Layout validation\n if (!('kind' in dash.layout)) {\n throw new Error('Layout kind is required');\n }\n\n if (dash.layout.kind === 'GridLayout') {\n validateGridLayout(dash.layout);\n } else if (dash.layout.kind === 'RowsLayout') {\n validateRowsLayout(dash.layout);\n }\n\n return true;\n}\n\nfunction validateGridLayout(layout: unknown) {\n if (typeof layout !== 'object' || layout === null) {\n throw new Error('Layout is not an object or is null');\n }\n if (!('kind' in layout) || layout.kind !== 'GridLayout') {\n throw new Error('Layout kind is not GridLayout');\n }\n if (!('spec' in layout) || typeof layout.spec !== 'object' || layout.spec === null) {\n throw new Error('Layout spec is not an object or is null');\n }\n if (!('items' in layout.spec) || !Array.isArray(layout.spec.items)) {\n throw new Error('Layout spec items is not an array');\n }\n}\n\nfunction validateRowsLayout(layout: unknown) {\n if (typeof layout !== 'object' || layout === null) {\n throw new Error('Layout is not an object or is null');\n }\n if (!('kind' in layout) || layout.kind !== 'RowsLayout') {\n throw new Error('Layout kind is not RowsLayout');\n }\n if (!('spec' in layout) || typeof layout.spec !== 'object' || layout.spec === null) {\n throw new Error('Layout spec is not an object or is null');\n }\n if (!('rows' in layout.spec) || !Array.isArray(layout.spec.rows)) {\n throw new Error('Layout spec items is not an array');\n }\n}\n\nexport function getAutoAssignedDSRef(\n element: VizPanel | SceneVariables | dataLayers.AnnotationsDataLayer,\n type: 'panels' | 'variables' | 'annotations',\n elementMapReferences?: DSReferencesMapping\n): Set<string> {\n if (!elementMapReferences) {\n return new Set();\n }\n if (type === 'panels' && isVizPanel(element)) {\n const elementKey = dashboardSceneGraph.getElementIdentifierForVizPanel(element);\n return elementMapReferences.panels.get(elementKey) || new Set();\n }\n\n if (type === 'variables') {\n return elementMapReferences.variables;\n }\n\n if (type === 'annotations') {\n return elementMapReferences.annotations;\n }\n\n // if type is not panels, annotations, or variables, throw error\n throw new Error(`Invalid type ${type} for getAutoAssignedDSRef`);\n}\n\n/**\n * Determines if a data source reference should be persisted for a query or variable\n */\nexport function getPersistedDSFor<T extends SceneDataQuery | QueryVariable | AnnotationQuery>(\n element: T,\n autoAssignedDsRef: Set<string>,\n type: 'query' | 'variable' | 'annotation',\n context?: SceneQueryRunner\n): DataSourceRef | undefined {\n // Get the element identifier - refId for queries, name for variables\n const elementId = getElementIdentifier(element, type);\n\n // If the element is in the auto-assigned set, it didn't have a datasource specified\n if (autoAssignedDsRef?.has(elementId)) {\n return undefined;\n }\n\n // Return appropriate datasource reference based on element type\n if (type === 'query') {\n if ('datasource' in element && element.datasource) {\n // If element has its own datasource, use that\n return element.datasource;\n }\n\n // For queries missing a datasource but not in auto-assigned set, use datasource from context (queryRunner)\n return context?.state?.datasource;\n }\n\n if (type === 'variable' && 'state' in element && 'datasource' in element.state) {\n return element.state.datasource || {};\n }\n\n if (type === 'annotation' && 'datasource' in element) {\n return element.datasource || {};\n }\n\n return undefined;\n}\n\n/**\n * Helper function to extract which identifier to use from a query or variable element\n * @returns refId for queries, name for variables\n * TODO: we will add annotations in the future\n */\nfunction getElementIdentifier<T extends SceneDataQuery | QueryVariable | AnnotationQuery>(\n element: T,\n type: 'query' | 'variable' | 'annotation'\n): string {\n // when is type query look for refId\n if (type === 'query') {\n return 'refId' in element ? element.refId : '';\n }\n\n if (type === 'variable') {\n // when is type variable look for the name of the variable\n return 'state' in element && 'name' in element.state ? element.state.name : '';\n }\n\n // when is type annotation look for annotation name\n if (type === 'annotation') {\n return 'name' in element ? element.name : '';\n }\n\n throw new Error(`Invalid type ${type} for getElementIdentifier`);\n}\n\nfunction isVizPanel(element: VizPanel | SceneVariables | dataLayers.AnnotationsDataLayer): element is VizPanel {\n // FIXME: is there another way to do this?\n return 'pluginId' in element.state;\n}\n\nfunction isSceneVariables(\n element: VizPanel | SceneVariables | dataLayers.AnnotationsDataLayer\n): element is SceneVariables {\n // Check for properties unique to SceneVariables but not in VizPanel\n return !('pluginId' in element.state) && ('variables' in element.state || 'getValue' in element);\n}\n\nfunction isSceneDataQuery(query: SceneDataQuery | QueryVariable | AnnotationQuery): query is SceneDataQuery {\n return 'refId' in query && !('state' in query);\n}\n\nfunction isAnnotationQuery(query: SceneDataQuery | QueryVariable | AnnotationQuery): query is AnnotationQuery {\n return 'datasource' in query && 'name' in query;\n}\n\nfunction isQueryVariable(query: SceneDataQuery | QueryVariable | AnnotationQuery): query is QueryVariable {\n return 'state' in query && 'name' in query.state;\n}\n\n/**\n * Get the persisted datasource for a query or variable\n * When a query or variable is created it could not have a datasource set\n * we want to respect that and not overwrite it with the auto assigned datasources\n * resolved in runtime\n *\n */\nexport function getElementDatasource(\n element: VizPanel | SceneVariables | dataLayers.AnnotationsDataLayer,\n queryElement: SceneDataQuery | QueryVariable | AnnotationQuery,\n type: 'panel' | 'variable' | 'annotation',\n queryRunner?: SceneQueryRunner,\n dsReferencesMapping?: DSReferencesMapping\n): DataSourceRef | undefined {\n let result: DataSourceRef | undefined;\n if (type === 'panel') {\n if (!queryRunner || !isVizPanel(element) || !isSceneDataQuery(queryElement)) {\n return undefined;\n }\n // Get datasource for panel query\n const autoAssignedRefs = getAutoAssignedDSRef(element, 'panels', dsReferencesMapping);\n result = getPersistedDSFor(queryElement, autoAssignedRefs, 'query', queryRunner);\n }\n\n if (type === 'variable') {\n if (!isSceneVariables(element) || !isQueryVariable(queryElement)) {\n return undefined;\n }\n // Get datasource for variable\n const autoAssignedRefs = getAutoAssignedDSRef(element, 'variables', dsReferencesMapping);\n\n result = getPersistedDSFor(queryElement, autoAssignedRefs, 'variable');\n }\n\n if (type === 'annotation') {\n if (!isAnnotationQuery(queryElement)) {\n return undefined;\n }\n // Get datasource for annotation\n const autoAssignedRefs = getAutoAssignedDSRef(element, 'annotations', dsReferencesMapping);\n result = getPersistedDSFor(queryElement, autoAssignedRefs, 'annotation');\n }\n // Important: Only return the datasource if it's not in auto-assigned refs\n // and if the result would not be an empty object\n return Object.keys(result || {}).length > 0 ? result : undefined;\n}\n","import { dateMath, dateTimeParse, isDateTime, TimeRange, TimeZone } from '@grafana/data';\n\nimport { commonFormat } from './commonFormat';\n\nexport function isValid(value: string, roundUp?: boolean, timeZone?: TimeZone): boolean {\n if (isDateTime(value)) {\n return value.isValid();\n }\n\n // handles `now` math\n if (dateMath.isMathString(value)) {\n return dateMath.isValid(value);\n }\n\n const parsed = dateTimeParse(value, { roundUp, timeZone, format: commonFormat });\n return parsed.isValid();\n}\n\nexport function isValidTimeRange(range: TimeRange) {\n return dateMath.isValid(range.from) && dateMath.isValid(range.to);\n}\n","import { PropsWithChildren, ReactElement, useMemo } from 'react';\n\nimport { DataSourceInstanceSettings } from '../../types/datasource';\n\nimport { PluginContext, DataSourcePluginContextType } from './PluginContext';\n\nexport type DataSourcePluginContextProviderProps = {\n instanceSettings: DataSourceInstanceSettings;\n};\n\nexport function DataSourcePluginContextProvider(\n props: PropsWithChildren<DataSourcePluginContextProviderProps>\n): ReactElement {\n const { children, instanceSettings } = props;\n const value: DataSourcePluginContextType = useMemo(() => {\n return { instanceSettings, meta: instanceSettings.meta };\n }, [instanceSettings]);\n\n return <PluginContext.Provider value={value}>{children}</PluginContext.Provider>;\n}\n","import { AppEvents } from '@grafana/data';\nimport appEvents from 'app/core/app_events';\nimport { Silence, SilenceCreatePayload } from 'app/plugins/datasource/alertmanager/types';\n\nimport { alertingApi } from './alertingApi';\n\nexport type SilenceCreatedResponse = {\n silenceId: string;\n};\n\nexport const alertSilencesApi = alertingApi.injectEndpoints({\n endpoints: (build) => ({\n getSilences: build.query<\n Silence[],\n {\n datasourceUid: string;\n ruleMetadata?: boolean;\n accessControl?: boolean;\n }\n >({\n query: ({ datasourceUid, ruleMetadata, accessControl }) => ({\n url: `/api/alertmanager/${datasourceUid}/api/v2/silences`,\n params: {\n ruleMetadata,\n // query param is lowercased on backend for consistency with folder endpoint\n accesscontrol: accessControl,\n },\n }),\n providesTags: (result) => {\n return result\n ? [\n ...result.map(({ id }) => ({ type: 'AlertmanagerSilences' as const, id })),\n { type: 'AlertmanagerSilences' },\n ]\n : [{ type: 'AlertmanagerSilences' }];\n },\n }),\n\n getSilence: build.query<\n Silence,\n {\n datasourceUid: string;\n id: string;\n ruleMetadata?: boolean;\n accessControl?: boolean;\n }\n >({\n query: ({ datasourceUid, id, ruleMetadata, accessControl }) => ({\n url: `/api/alertmanager/${datasourceUid}/api/v2/silence/${id}`,\n showErrorAlert: false,\n params: {\n ruleMetadata,\n // query param is lowercased on backend for consistency with folder endpoint\n accesscontrol: accessControl,\n },\n }),\n providesTags: (result, error, { id }) =>\n result ? [{ type: 'AlertmanagerSilences', id }] : ['AlertmanagerSilences'],\n }),\n\n createSilence: build.mutation<\n SilenceCreatedResponse,\n {\n datasourceUid: string;\n payload: SilenceCreatePayload;\n }\n >({\n query: ({ datasourceUid, payload }) => ({\n url: `/api/alertmanager/${datasourceUid}/api/v2/silences`,\n method: 'POST',\n data: payload,\n }),\n invalidatesTags: ['AlertmanagerSilences', 'AlertmanagerAlerts'],\n onQueryStarted: async (arg, { queryFulfilled }) => {\n try {\n await queryFulfilled;\n appEvents.emit(AppEvents.alertSuccess, ['Silence created']);\n } catch (error) {\n appEvents.emit(AppEvents.alertError, ['Could not create silence']);\n }\n },\n }),\n\n expireSilence: build.mutation<\n {\n message: string;\n },\n {\n datasourceUid: string;\n silenceId: string;\n }\n >({\n query: ({ datasourceUid, silenceId }) => ({\n url: `/api/alertmanager/${datasourceUid}/api/v2/silence/${silenceId}`,\n method: 'DELETE',\n }),\n invalidatesTags: ['AlertmanagerSilences'],\n }),\n }),\n});\n","import { customAlphabet } from 'nanoid';\nimport { Unsubscribable } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n AdHocVariableFilter,\n CoreApp,\n DataQuery,\n DataQueryRequest,\n DataSourceApi,\n DataSourceRef,\n DefaultTimeZone,\n getNextRefId,\n IntervalValues,\n locationUtil,\n LogsDedupStrategy,\n LogsSortOrder,\n rangeUtil,\n RawTimeRange,\n ScopedVars,\n TimeRange,\n TimeZone,\n toURLRange,\n urlUtil,\n} from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { RefreshPicker } from '@grafana/ui';\nimport store from 'app/core/store';\nimport { ExpressionDatasourceUID } from 'app/features/expressions/types';\nimport { QueryOptions, QueryTransaction } from 'app/types/explore';\n\nexport const DEFAULT_UI_STATE = {\n dedupStrategy: LogsDedupStrategy.none,\n};\n\nexport const ID_ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\nconst nanoid = customAlphabet(ID_ALPHABET, 3);\n\nconst LAST_USED_DATASOURCE_KEY = 'grafana.explore.datasource';\nconst lastUsedDatasourceKeyForOrgId = (orgId: number) => `${LAST_USED_DATASOURCE_KEY}.${orgId}`;\nexport const getLastUsedDatasourceUID = (orgId: number) =>\n store.getObject<string>(lastUsedDatasourceKeyForOrgId(orgId));\nexport const setLastUsedDatasourceUID = (orgId: number, datasourceUID: string) =>\n store.setObject(lastUsedDatasourceKeyForOrgId(orgId), datasourceUID);\n\nexport interface GetExploreUrlArguments {\n queries: DataQuery[];\n dsRef: DataSourceRef | null | undefined;\n timeRange: TimeRange;\n scopedVars: ScopedVars | undefined;\n adhocFilters?: AdHocVariableFilter[];\n}\n\nexport function generateExploreId() {\n while (true) {\n const id = nanoid(3);\n\n if (!/^\\d+$/.test(id)) {\n return id;\n }\n }\n}\n\n/**\n * Returns an Explore-URL that contains a panel's queries and the dashboard time range.\n */\nexport async function getExploreUrl(args: GetExploreUrlArguments): Promise<string | undefined> {\n const { queries, dsRef, timeRange, scopedVars, adhocFilters } = args;\n const interpolatedQueries = (\n await Promise.allSettled(\n queries\n // Explore does not support expressions so filter those out\n .filter((q) => q.datasource?.uid !== ExpressionDatasourceUID)\n .map(async (q) => {\n // if the query defines a datasource, use that one, otherwise use the one from the panel, which should always be defined.\n // this will rejects if the datasource is not found, or return the default one if dsRef is not provided.\n const queryDs = await getDataSourceSrv().get(q.datasource || dsRef);\n\n return {\n // interpolate the query using its datasource `interpolateVariablesInQueries` method if defined, othewise return the query as-is.\n ...(queryDs.interpolateVariablesInQueries?.([q], scopedVars ?? {}, adhocFilters)[0] || q),\n // But always set the datasource as it's required in Explore.\n // NOTE: if for some reason the query has the \"mixed\" datasource, we omit the property;\n // Upon initialization, Explore use its own logic to determine the datasource.\n ...(!queryDs.meta.mixed && { datasource: queryDs.getRef() }),\n };\n })\n )\n )\n .filter(\n <T>(promise: PromiseSettledResult<T>): promise is PromiseFulfilledResult<T> => promise.status === 'fulfilled'\n )\n .map((q) => q.value);\n\n const exploreState = JSON.stringify({\n [generateExploreId()]: {\n range: toURLRange(timeRange.raw),\n queries: interpolatedQueries,\n datasource: dsRef?.uid,\n },\n });\n return locationUtil.assureBaseUrl(urlUtil.renderUrl('/explore', { panes: exploreState, schemaVersion: 1 }));\n}\n\nexport function requestIdGenerator(exploreId: string) {\n return `explore_${exploreId}`;\n}\n\nexport function buildQueryTransaction(\n exploreId: string,\n queries: DataQuery[],\n queryOptions: QueryOptions,\n range: TimeRange,\n scanning: boolean,\n timeZone?: TimeZone,\n scopedVars?: ScopedVars\n): QueryTransaction {\n const panelId = Number.parseInt(exploreId, 36);\n const { interval, intervalMs } = getIntervals(range, queryOptions.minInterval, queryOptions.maxDataPoints);\n\n const request: DataQueryRequest = {\n app: CoreApp.Explore,\n // TODO probably should be taken from preferences but does not seem to be used anyway.\n timezone: timeZone || DefaultTimeZone,\n startTime: Date.now(),\n interval,\n intervalMs,\n panelId,\n targets: queries, // Datasources rely on DataQueries being passed under the targets key.\n range,\n requestId: requestIdGenerator(exploreId),\n rangeRaw: range.raw,\n scopedVars: {\n __interval: { text: interval, value: interval },\n __interval_ms: { text: intervalMs, value: intervalMs },\n ...scopedVars,\n },\n maxDataPoints: queryOptions.maxDataPoints,\n liveStreaming: queryOptions.liveStreaming,\n skipQueryCache: true,\n };\n\n return {\n queries,\n request,\n scanning,\n id: generateKey(), // reusing for unique ID\n done: false,\n };\n}\n\nexport const clearQueryKeys: (query: DataQuery) => DataQuery = ({ key, ...rest }) => rest;\n\nexport const safeStringifyValue = (value: unknown, space?: number) => {\n if (value === undefined || value === null) {\n return '';\n }\n\n try {\n return JSON.stringify(value, null, space);\n } catch (error) {\n console.error(error);\n }\n\n return '';\n};\n\nexport function generateKey(index = 0): string {\n return `Q-${uuidv4()}-${index}`;\n}\n\nexport async function generateEmptyQuery(\n queries: DataQuery[],\n index = 0,\n dataSourceOverride?: DataSourceRef\n): Promise<DataQuery> {\n let datasourceInstance: DataSourceApi | undefined;\n let datasourceRef: DataSourceRef | null | undefined;\n let defaultQuery: Partial<DataQuery> | undefined;\n\n // datasource override is if we have switched datasources with no carry-over - we want to create a new query with a datasource we define\n // it's also used if there's a root datasource and there were no previous queries\n if (dataSourceOverride) {\n datasourceRef = dataSourceOverride;\n } else if (queries.length > 0 && queries[queries.length - 1].datasource) {\n // otherwise use last queries' datasource\n datasourceRef = queries[queries.length - 1].datasource;\n } else {\n datasourceInstance = await getDataSourceSrv().get();\n defaultQuery = datasourceInstance.getDefaultQuery?.(CoreApp.Explore);\n datasourceRef = datasourceInstance.getRef();\n }\n\n if (!datasourceInstance) {\n datasourceInstance = await getDataSourceSrv().get(datasourceRef);\n defaultQuery = datasourceInstance.getDefaultQuery?.(CoreApp.Explore);\n }\n\n return { ...defaultQuery, refId: getNextRefId(queries), key: generateKey(index), datasource: datasourceRef };\n}\n\nexport const generateNewKeyAndAddRefIdIfMissing = (target: DataQuery, queries: DataQuery[], index = 0): DataQuery => {\n const key = generateKey(index);\n const refId = target.refId || getNextRefId(queries);\n\n return { ...target, refId, key };\n};\n\n/**\n * Ensure at least one target exists and that targets have the necessary keys\n *\n * This will return an empty array if there are no datasources, as Explore is not usable in that state\n */\nexport async function ensureQueries(\n queries?: DataQuery[],\n newQueryDataSourceOverride?: DataSourceRef\n): Promise<DataQuery[]> {\n if (queries && typeof queries === 'object' && queries.length > 0) {\n const allQueries = [];\n for (let index = 0; index < queries.length; index++) {\n const query = queries[index];\n const key = generateKey(index);\n let refId = query.refId;\n if (!refId) {\n refId = getNextRefId(allQueries);\n }\n\n // if a query has a datasource, validate it and only add it if valid\n // if a query doesn't have a datasource, do not worry about it at this step\n let validDS = true;\n if (query.datasource) {\n try {\n await getDataSourceSrv().get(query.datasource.uid);\n } catch {\n console.error(`One of the queries has a datasource that is no longer available and was removed.`);\n validDS = false;\n }\n }\n\n if (validDS) {\n allQueries.push({\n ...query,\n refId,\n key,\n });\n }\n }\n return allQueries;\n }\n try {\n // if a datasource override get its ref, otherwise get the default datasource\n const emptyQueryRef = newQueryDataSourceOverride ?? (await getDataSourceSrv().get()).getRef();\n const emptyQuery = await generateEmptyQuery(queries ?? [], undefined, emptyQueryRef);\n return [emptyQuery];\n } catch {\n // if there are no datasources, return an empty array because we will not allow use of explore\n // this will occur on init of explore with no datasources defined\n return [];\n }\n}\n\n/**\n * A target is non-empty when it has keys (with non-empty values) other than refId, key, context and datasource.\n * FIXME: While this is reasonable for practical use cases, a query without any propery might still be \"non-empty\"\n * in its own scope, for instance when there's no user input needed. This might be the case for an hypothetic datasource in\n * which query options are only set in its config and the query object itself, as generated from its query editor it's always \"empty\"\n */\nconst validKeys = ['refId', 'key', 'context', 'datasource'];\nexport function hasNonEmptyQuery<TQuery extends DataQuery>(queries: TQuery[]): boolean {\n return (\n queries &&\n queries.some((query) => {\n const entries = Object.entries(query)\n .filter(([key, _]) => validKeys.indexOf(key) === -1)\n .filter(([_, value]) => value);\n return entries.length > 0;\n })\n );\n}\n\nexport const getQueryKeys = (queries: DataQuery[]): string[] => {\n const queryKeys = queries.reduce<string[]>((newQueryKeys, query, index) => {\n const primaryKey = query.datasource?.uid || query.key;\n return newQueryKeys.concat(`${primaryKey}-${index}`);\n }, []);\n\n return queryKeys;\n};\n\nexport const getTimeRange = (timeZone: TimeZone, rawRange: RawTimeRange, fiscalYearStartMonth: number): TimeRange => {\n let range = rangeUtil.convertRawToRange(rawRange, timeZone, fiscalYearStartMonth);\n\n return range;\n};\n\nexport const refreshIntervalToSortOrder = (refreshInterval?: string) =>\n RefreshPicker.isLive(refreshInterval) ? LogsSortOrder.Ascending : LogsSortOrder.Descending;\n\nexport const stopQueryState = (querySubscription: Unsubscribable | undefined) => {\n if (querySubscription) {\n querySubscription.unsubscribe();\n }\n};\n\nexport function getIntervals(range: TimeRange, lowLimit?: string, resolution?: number): IntervalValues {\n if (!resolution) {\n return { interval: '1s', intervalMs: 1000 };\n }\n\n return rangeUtil.calculateInterval(range, resolution, lowLimit);\n}\n\nexport const copyStringToClipboard = (string: string) => {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard.writeText(string);\n } else {\n const el = document.createElement('textarea');\n el.value = string;\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n }\n};\n","import { DataFrame, FieldConfigSource, PanelData, PanelPlugin } from '@grafana/data';\n\nimport { DashboardModel } from '../../state/DashboardModel';\nimport { PanelModel } from '../../state/PanelModel';\n\nexport interface PanelEditorTab {\n id: string;\n text: string;\n active: boolean;\n icon: string;\n}\n\nexport enum PanelEditorTabId {\n Query = 'query',\n Transform = 'transform',\n Visualize = 'visualize',\n Alert = 'alert',\n}\n\nexport enum DisplayMode {\n Fill = 0,\n Fit = 1,\n Exact = 2,\n}\n\nexport enum PanelEditTableToggle {\n Off = 0,\n Table = 1,\n}\n\nexport const displayModes = [\n { value: DisplayMode.Fill, label: 'Fill', description: 'Use all available space' },\n { value: DisplayMode.Exact, label: 'Actual', description: 'Make same size as on the dashboard' },\n];\n\nexport const panelEditTableModes = [\n {\n value: PanelEditTableToggle.Off,\n label: 'Visualization',\n description: 'Show using selected visualization',\n },\n { value: PanelEditTableToggle.Table, label: 'Table', description: 'Show raw data in table form' },\n];\n\n/** @internal */\nexport interface Props {\n plugin: PanelPlugin;\n config: FieldConfigSource;\n onChange: (config: FieldConfigSource) => void;\n /* Helpful for IntelliSense */\n data: DataFrame[];\n}\n\nexport interface OptionPaneRenderProps {\n panel: PanelModel;\n plugin: PanelPlugin;\n data?: PanelData;\n dashboard: DashboardModel;\n instanceState: unknown;\n onPanelConfigChange: <T extends keyof PanelModel>(configKey: T, value: PanelModel[T]) => void;\n onPanelOptionsChanged: (options: PanelModel['options']) => void;\n onFieldConfigsChange: (config: FieldConfigSource) => void;\n}\n\nexport interface OptionPaneItemOverrideInfo {\n type: 'data' | 'rule';\n onClick?: () => void;\n tooltip: string;\n description: string;\n}\n\nexport enum VisualizationSelectPaneTab {\n Visualizations,\n LibraryPanels,\n Suggestions,\n}\n","import { memo, useMemo, useCallback } from 'react';\n\nimport { FieldMatcherID, fieldMatchers, SelectableValue, FieldType, DataFrame } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { getFieldTypeIconName } from '../../types/icon';\nimport { Select } from '../Select/Select';\n\nimport { MatcherUIProps, FieldMatcherUIRegistryItem } from './types';\n\nexport const FieldTypeMatcherEditor = memo<MatcherUIProps<string>>((props) => {\n const { data, options, onChange: onChangeFromProps, id } = props;\n const counts = useFieldCounts(data);\n const selectOptions = useSelectOptions(counts, options);\n\n const onChange = useCallback(\n (selection: SelectableValue<string>) => {\n return onChangeFromProps(selection.value!);\n },\n [onChangeFromProps]\n );\n\n const selectedOption = selectOptions.find((v) => v.value === options);\n return <Select inputId={id} value={selectedOption} options={selectOptions} onChange={onChange} />;\n});\nFieldTypeMatcherEditor.displayName = 'FieldTypeMatcherEditor';\n\n// Select options for all field types.\n// This is not eported to the published package, but used internally\nexport const getAllFieldTypeIconOptions: () => Array<SelectableValue<FieldType>> = () => [\n {\n value: FieldType.number,\n label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-number', 'Number'),\n icon: getFieldTypeIconName(FieldType.number),\n },\n {\n value: FieldType.string,\n label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-string', 'String'),\n icon: getFieldTypeIconName(FieldType.string),\n },\n {\n value: FieldType.time,\n label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-time', 'Time'),\n icon: getFieldTypeIconName(FieldType.time),\n },\n {\n value: FieldType.boolean,\n label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-boolean', 'Boolean'),\n icon: getFieldTypeIconName(FieldType.boolean),\n },\n {\n value: FieldType.trace,\n label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-traces', 'Traces'),\n icon: getFieldTypeIconName(FieldType.trace),\n },\n {\n value: FieldType.enum,\n label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-enum', 'Enum'),\n icon: getFieldTypeIconName(FieldType.enum),\n },\n {\n value: FieldType.other,\n label: t('grafana-ui.matchers-ui.get-all-field-type-icon-options.label-other', 'Other'),\n icon: getFieldTypeIconName(FieldType.other),\n },\n];\n\nconst useFieldCounts = (data: DataFrame[]): Map<FieldType, number> => {\n return useMemo(() => {\n const counts: Map<FieldType, number> = new Map();\n for (const t of getAllFieldTypeIconOptions()) {\n counts.set(t.value!, 0);\n }\n for (const frame of data) {\n for (const field of frame.fields) {\n const key = field.type || FieldType.other;\n let v = counts.get(key);\n if (!v) {\n v = 0;\n }\n counts.set(key, v + 1);\n }\n }\n return counts;\n }, [data]);\n};\n\nconst useSelectOptions = (counts: Map<string, number>, opt?: string): Array<SelectableValue<string>> => {\n return useMemo(() => {\n let found = false;\n const options: Array<SelectableValue<string>> = [];\n for (const t of getAllFieldTypeIconOptions()) {\n const count = counts.get(t.value!);\n const match = opt === t.value;\n if (count || match) {\n options.push({\n ...t,\n label: `${t.label} (${counts.get(t.value!)})`,\n });\n }\n if (match) {\n found = true;\n }\n }\n if (opt && !found) {\n options.push({\n value: opt,\n label: `${opt} (No matches)`,\n });\n }\n return options;\n }, [counts, opt]);\n};\n\nexport const getFieldTypeMatcherItem: () => FieldMatcherUIRegistryItem<string> = () => ({\n id: FieldMatcherID.byType,\n component: FieldTypeMatcherEditor,\n matcher: fieldMatchers.get(FieldMatcherID.byType),\n name: t('grafana-ui.matchers-ui.name-fields-with-type', 'Fields with type'),\n description: t(\n 'grafana-ui.matchers-ui.description-fields-with-type',\n 'Set properties for fields of a specific type (number, string, boolean)'\n ),\n optionsToLabel: (options) => options,\n});\n","import { memoize } from 'lodash';\nimport moment from 'moment-timezone';\n\nimport { TimeZone } from '../types/time';\n\nimport { getTimeZone } from './common';\n\nexport enum InternalTimeZones {\n default = '',\n localBrowserTime = 'browser',\n utc = 'utc',\n}\n\nexport const timeZoneFormatUserFriendly = (timeZone: TimeZone | undefined) => {\n switch (getTimeZone({ timeZone })) {\n case 'browser':\n return 'Local browser time';\n case 'utc':\n return 'UTC';\n default:\n return timeZone;\n }\n};\n\nexport const getZone = (timeZone: string) => {\n return moment.tz.zone(timeZone);\n};\n\nexport interface TimeZoneCountry {\n code: string;\n name: string;\n}\nexport interface TimeZoneInfo {\n name: string;\n zone: string;\n countries: TimeZoneCountry[];\n abbreviation: string;\n offsetInMins: number;\n ianaName: string;\n}\n\nexport interface GroupedTimeZones {\n name: string;\n zones: TimeZone[];\n}\n\nexport const getTimeZoneInfo = (zone: string, timestamp: number): TimeZoneInfo | undefined => {\n const internal = mapInternal(zone, timestamp);\n\n if (internal) {\n return internal;\n }\n\n return mapToInfo(zone, timestamp);\n};\n\nexport const getTimeZones = memoize((includeInternal: boolean | InternalTimeZones[] = false): TimeZone[] => {\n const initial: TimeZone[] = [];\n\n if (includeInternal === true) {\n initial.push(InternalTimeZones.default, InternalTimeZones.localBrowserTime, InternalTimeZones.utc);\n } else if (includeInternal) {\n initial.push(...includeInternal);\n }\n\n return moment.tz.names().reduce((zones: TimeZone[], zone: string) => {\n const countriesForZone = countriesByTimeZone[zone];\n\n if (!Array.isArray(countriesForZone) || countriesForZone.length === 0) {\n return zones;\n }\n\n zones.push(zone);\n return zones;\n }, initial);\n});\n\nexport const getTimeZoneGroups = memoize(\n (includeInternal: boolean | InternalTimeZones[] = false): GroupedTimeZones[] => {\n const timeZones = getTimeZones(includeInternal);\n\n const groups = timeZones.reduce((groups: Record<string, TimeZone[]>, zone: TimeZone) => {\n const delimiter = zone.indexOf('/');\n\n if (delimiter === -1) {\n const group = '';\n groups[group] = groups[group] ?? [];\n groups[group].push(zone);\n\n return groups;\n }\n\n const group = zone.slice(0, delimiter);\n groups[group] = groups[group] ?? [];\n groups[group].push(zone);\n\n return groups;\n }, {});\n\n return Object.keys(groups).map((name) => ({\n name,\n zones: groups[name],\n }));\n }\n);\n\nconst mapInternal = (zone: string, timestamp: number): TimeZoneInfo | undefined => {\n switch (zone) {\n case InternalTimeZones.utc: {\n return {\n name: 'Coordinated Universal Time',\n ianaName: 'UTC',\n zone,\n countries: [],\n abbreviation: 'UTC, GMT',\n offsetInMins: 0,\n };\n }\n\n case InternalTimeZones.default: {\n const tz = getTimeZone();\n const isInternal = tz === 'browser' || tz === 'utc';\n const info = isInternal ? mapInternal(tz, timestamp) : mapToInfo(tz, timestamp);\n\n return {\n countries: countriesByTimeZone[tz] ?? [],\n abbreviation: '',\n offsetInMins: 0,\n ...info,\n ianaName: info?.ianaName ?? '',\n name: 'Default',\n zone,\n };\n }\n\n case InternalTimeZones.localBrowserTime: {\n const tz = moment.tz.guess(true);\n const info = mapToInfo(tz, timestamp);\n\n return {\n countries: countriesByTimeZone[tz] ?? [],\n abbreviation: 'Your local time',\n offsetInMins: new Date().getTimezoneOffset(),\n ...info,\n name: 'Browser Time',\n ianaName: info?.ianaName ?? '',\n zone,\n };\n }\n\n default:\n return undefined;\n }\n};\n\nconst abbrevationWithoutOffset = (abbrevation: string): string => {\n if (/^(\\+|\\-).+/.test(abbrevation)) {\n return '';\n }\n return abbrevation;\n};\n\nconst mapToInfo = (timeZone: TimeZone, timestamp: number): TimeZoneInfo | undefined => {\n const momentTz = moment.tz.zone(timeZone);\n if (!momentTz) {\n return undefined;\n }\n\n return {\n name: timeZone,\n ianaName: momentTz.name,\n zone: timeZone,\n countries: countriesByTimeZone[timeZone] ?? [],\n abbreviation: abbrevationWithoutOffset(momentTz.abbr(timestamp)),\n offsetInMins: momentTz.utcOffset(timestamp),\n };\n};\n\n// Country names by ISO 3166-1-alpha-2 code\nconst countryByCode: Record<string, string> = {\n AF: 'Afghanistan',\n AX: 'Aland Islands',\n AL: 'Albania',\n DZ: 'Algeria',\n AS: 'American Samoa',\n AD: 'Andorra',\n AO: 'Angola',\n AI: 'Anguilla',\n AQ: 'Antarctica',\n AG: 'Antigua And Barbuda',\n AR: 'Argentina',\n AM: 'Armenia',\n AW: 'Aruba',\n AU: 'Australia',\n AT: 'Austria',\n AZ: 'Azerbaijan',\n BS: 'Bahamas',\n BH: 'Bahrain',\n BD: 'Bangladesh',\n BB: 'Barbados',\n BY: 'Belarus',\n BE: 'Belgium',\n BZ: 'Belize',\n BJ: 'Benin',\n BM: 'Bermuda',\n BT: 'Bhutan',\n BO: 'Bolivia',\n BA: 'Bosnia And Herzegovina',\n BW: 'Botswana',\n BV: 'Bouvet Island',\n BR: 'Brazil',\n IO: 'British Indian Ocean Territory',\n BN: 'Brunei Darussalam',\n BG: 'Bulgaria',\n BF: 'Burkina Faso',\n BI: 'Burundi',\n KH: 'Cambodia',\n CM: 'Cameroon',\n CA: 'Canada',\n CV: 'Cape Verde',\n KY: 'Cayman Islands',\n CF: 'Central African Republic',\n TD: 'Chad',\n CL: 'Chile',\n CN: 'China',\n CX: 'Christmas Island',\n CC: 'Cocos (Keeling) Islands',\n CO: 'Colombia',\n KM: 'Comoros',\n CG: 'Congo',\n CD: 'Congo, Democratic Republic',\n CK: 'Cook Islands',\n CR: 'Costa Rica',\n CI: \"Cote D'Ivoire\",\n HR: 'Croatia',\n CU: 'Cuba',\n CY: 'Cyprus',\n CZ: 'Czech Republic',\n DK: 'Denmark',\n DJ: 'Djibouti',\n DM: 'Dominica',\n DO: 'Dominican Republic',\n EC: 'Ecuador',\n EG: 'Egypt',\n SV: 'El Salvador',\n GQ: 'Equatorial Guinea',\n ER: 'Eritrea',\n EE: 'Estonia',\n ET: 'Ethiopia',\n FK: 'Falkland Islands (Malvinas)',\n FO: 'Faroe Islands',\n FJ: 'Fiji',\n FI: 'Finland',\n FR: 'France',\n GF: 'French Guiana',\n PF: 'French Polynesia',\n TF: 'French Southern Territories',\n GA: 'Gabon',\n GM: 'Gambia',\n GE: 'Georgia',\n DE: 'Germany',\n GH: 'Ghana',\n GI: 'Gibraltar',\n GR: 'Greece',\n GL: 'Greenland',\n GD: 'Grenada',\n GP: 'Guadeloupe',\n GU: 'Guam',\n GT: 'Guatemala',\n GG: 'Guernsey',\n GN: 'Guinea',\n GW: 'Guinea-Bissau',\n GY: 'Guyana',\n HT: 'Haiti',\n HM: 'Heard Island & Mcdonald Islands',\n VA: 'Holy See (Vatican City State)',\n HN: 'Honduras',\n HK: 'Hong Kong',\n HU: 'Hungary',\n IS: 'Iceland',\n IN: 'India',\n ID: 'Indonesia',\n IR: 'Iran (Islamic Republic Of)',\n IQ: 'Iraq',\n IE: 'Ireland',\n IM: 'Isle Of Man',\n IL: 'Israel',\n IT: 'Italy',\n JM: 'Jamaica',\n JP: 'Japan',\n JE: 'Jersey',\n JO: 'Jordan',\n KZ: 'Kazakhstan',\n KE: 'Kenya',\n KI: 'Kiribati',\n KR: 'Korea',\n KW: 'Kuwait',\n KG: 'Kyrgyzstan',\n LA: \"Lao People's Democratic Republic\",\n LV: 'Latvia',\n LB: 'Lebanon',\n LS: 'Lesotho',\n LR: 'Liberia',\n LY: 'Libyan Arab Jamahiriya',\n LI: 'Liechtenstein',\n LT: 'Lithuania',\n LU: 'Luxembourg',\n MO: 'Macao',\n MK: 'Macedonia',\n MG: 'Madagascar',\n MW: 'Malawi',\n MY: 'Malaysia',\n MV: 'Maldives',\n ML: 'Mali',\n MT: 'Malta',\n MH: 'Marshall Islands',\n MQ: 'Martinique',\n MR: 'Mauritania',\n MU: 'Mauritius',\n YT: 'Mayotte',\n MX: 'Mexico',\n FM: 'Micronesia (Federated States Of)',\n MD: 'Moldova',\n MC: 'Monaco',\n MN: 'Mongolia',\n ME: 'Montenegro',\n MS: 'Montserrat',\n MA: 'Morocco',\n MZ: 'Mozambique',\n MM: 'Myanmar',\n NA: 'Namibia',\n NR: 'Nauru',\n NP: 'Nepal',\n NL: 'Netherlands',\n AN: 'Netherlands Antilles',\n NC: 'New Caledonia',\n NZ: 'New Zealand',\n NI: 'Nicaragua',\n NE: 'Niger',\n NG: 'Nigeria',\n NU: 'Niue',\n NF: 'Norfolk Island',\n MP: 'Northern Mariana Islands',\n NO: 'Norway',\n OM: 'Oman',\n PK: 'Pakistan',\n PW: 'Palau',\n PS: 'Palestine, State of',\n PA: 'Panama',\n PG: 'Papua New Guinea',\n PY: 'Paraguay',\n PE: 'Peru',\n PH: 'Philippines',\n PN: 'Pitcairn',\n PL: 'Poland',\n PT: 'Portugal',\n PR: 'Puerto Rico',\n QA: 'Qatar',\n RE: 'Reunion',\n RO: 'Romania',\n RU: 'Russian Federation',\n RW: 'Rwanda',\n BL: 'Saint Barthelemy',\n SH: 'Saint Helena',\n KN: 'Saint Kitts And Nevis',\n LC: 'Saint Lucia',\n MF: 'Saint Martin',\n PM: 'Saint Pierre And Miquelon',\n VC: 'Saint Vincent And Grenadines',\n WS: 'Samoa',\n SM: 'San Marino',\n ST: 'Sao Tome And Principe',\n SA: 'Saudi Arabia',\n SN: 'Senegal',\n RS: 'Serbia',\n SC: 'Seychelles',\n SL: 'Sierra Leone',\n SG: 'Singapore',\n SK: 'Slovakia',\n SI: 'Slovenia',\n SB: 'Solomon Islands',\n SO: 'Somalia',\n ZA: 'South Africa',\n GS: 'South Georgia And Sandwich Isl.',\n ES: 'Spain',\n LK: 'Sri Lanka',\n SD: 'Sudan',\n SR: 'Suriname',\n SJ: 'Svalbard And Jan Mayen',\n SZ: 'Swaziland',\n SE: 'Sweden',\n CH: 'Switzerland',\n SY: 'Syrian Arab Republic',\n TW: 'Taiwan',\n TJ: 'Tajikistan',\n TZ: 'Tanzania',\n TH: 'Thailand',\n TL: 'Timor-Leste',\n TG: 'Togo',\n TK: 'Tokelau',\n TO: 'Tonga',\n TT: 'Trinidad And Tobago',\n TN: 'Tunisia',\n TR: 'Turkey',\n TM: 'Turkmenistan',\n TC: 'Turks And Caicos Islands',\n TV: 'Tuvalu',\n UG: 'Uganda',\n UA: 'Ukraine',\n AE: 'United Arab Emirates',\n GB: 'United Kingdom',\n US: 'United States',\n UM: 'United States Outlying Islands',\n UY: 'Uruguay',\n UZ: 'Uzbekistan',\n VU: 'Vanuatu',\n VE: 'Venezuela',\n VN: 'Viet Nam',\n VG: 'Virgin Islands, British',\n VI: 'Virgin Islands, U.S.',\n WF: 'Wallis And Futuna',\n EH: 'Western Sahara',\n YE: 'Yemen',\n ZM: 'Zambia',\n ZW: 'Zimbabwe',\n};\n\nconst countriesByTimeZone = ((): Record<string, TimeZoneCountry[]> => {\n return moment.tz.countries().reduce((all: Record<string, TimeZoneCountry[]>, code) => {\n const timeZones = moment.tz.zonesForCountry(code);\n return timeZones.reduce((all: Record<string, TimeZoneCountry[]>, timeZone) => {\n if (!all[timeZone]) {\n all[timeZone] = [];\n }\n\n const name = countryByCode[code];\n\n if (!name) {\n return all;\n }\n\n // Fix: Only include Antarctica if timezone starts with \"Antarctica/\"\n // https://github.com/grafana/grafana/issues/104688\n if (code === 'AQ' && !timeZone.startsWith('Antarctica/')) {\n return all;\n }\n\n all[timeZone].push({ code, name });\n return all;\n }, all);\n }, {});\n})();\n","import * as React from 'react';\nimport uPlot, { Options, AlignedData } from 'uplot';\n\nimport { UPlotConfigBuilder } from './config/UPlotConfigBuilder';\n\n/**\n * @internal -- not a public API\n */\nexport const FIXED_UNIT = '__fixed';\n\nexport type PlotConfig = Pick<\n Options,\n 'mode' | 'series' | 'scales' | 'axes' | 'cursor' | 'bands' | 'hooks' | 'select' | 'tzDate' | 'padding'\n>;\n\nexport type FacetValues = any[];\nexport type FacetSeries = FacetValues[];\nexport type FacetedData = [_: null, ...series: FacetSeries];\n\nexport interface PlotProps {\n data: AlignedData | FacetedData;\n width: number;\n height: number;\n config: UPlotConfigBuilder;\n children?: React.ReactNode;\n // Reference to uPlot instance\n plotRef?: (u: uPlot) => void;\n}\n\nexport abstract class PlotConfigBuilder<P, T> {\n constructor(public props: P) {}\n abstract getConfig(): T;\n}\n\n/**\n * @alpha\n */\nexport type PlotTooltipInterpolator = (\n updateActiveSeriesIdx: (sIdx: number | null) => void,\n updateActiveDatapointIdx: (dIdx: number | null) => void,\n updateTooltipPosition: (clear?: boolean) => void,\n u: uPlot\n) => void;\n\nexport interface PlotSelection {\n min: number;\n max: number;\n\n // selection bounding box, relative to canvas\n bbox: {\n top: number;\n left: number;\n width: number;\n height: number;\n };\n}\n","import { memo } from 'react';\nimport Skeleton from 'react-loading-skeleton';\n\nimport { Box, Text } from '@grafana/ui';\n\nimport { useGetFolderQueryFacade } from '../../../api/clients/folder/v1beta1/hooks';\nimport { DashboardsTreeItem } from '../../../features/browse-dashboards/types';\n\ninterface ParentTextProps {\n folder: string;\n}\n\nfunction ParentText({ folder }: ParentTextProps) {\n return (\n <Box marginLeft={1}>\n <Text variant={'bodySmall'} color={'secondary'} truncate>\n /{folder}\n </Text>\n </Box>\n );\n}\n\nexport const FolderParent = memo(function FolderParent({ item }: { item: DashboardsTreeItem }) {\n if (item.item.kind !== 'folder') {\n return null;\n }\n\n if (item.item.parentTitle) {\n return <ParentText folder={item.item.parentTitle} />;\n }\n\n const parentUID = item.item.parentUID || item.parentUID;\n\n if (parentUID) {\n return <NetworkFolderParent uid={parentUID} />;\n }\n\n return null;\n});\n\nfunction NetworkFolderParent({ uid }: { uid: string }) {\n const result = useGetFolderQueryFacade(uid);\n\n if (result.isLoading) {\n return <Skeleton width={50} />;\n }\n\n if (result.data) {\n return <ParentText folder={result.data.title} />;\n }\n\n return null;\n}\n","import { css, cx } from '@emotion/css';\nimport { useCallback, useId, useMemo, useRef } from 'react';\nimport * as React from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport { FixedSizeList as List } from 'react-window';\nimport InfiniteLoader from 'react-window-infinite-loader';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { IconButton, useStyles2, Text } from '@grafana/ui';\nimport { Indent } from 'app/core/components/Indent/Indent';\nimport { childrenByParentUIDSelector, rootItemsSelector } from 'app/features/browse-dashboards/state/hooks';\nimport { DashboardsTreeItem } from 'app/features/browse-dashboards/types';\nimport { DashboardViewItem } from 'app/features/search/types';\nimport { useSelector } from 'app/types/store';\n\nimport { FolderParent } from './FolderParent';\nimport { FolderRepo } from './FolderRepo';\n\nconst ROW_HEIGHT = 40;\nconst CHEVRON_SIZE = 'md';\n\nexport const getDOMId = (idPrefix: string, id: string) => `${idPrefix}-${id || 'root'}`;\n\ninterface NestedFolderListProps {\n items: DashboardsTreeItem[];\n focusedItemIndex: number;\n foldersAreOpenable: boolean;\n idPrefix: string;\n selectedFolder: string | undefined;\n onFolderExpand: (uid: string, newOpenState: boolean) => void;\n onFolderSelect: (item: DashboardViewItem) => void;\n isItemLoaded: (itemIndex: number) => boolean;\n requestLoadMore: (folderUid: string | undefined) => void;\n emptyFolders: Set<string>;\n}\n\nexport function NestedFolderList({\n items,\n focusedItemIndex,\n foldersAreOpenable,\n idPrefix,\n selectedFolder,\n onFolderExpand,\n onFolderSelect,\n isItemLoaded,\n requestLoadMore,\n emptyFolders,\n}: NestedFolderListProps) {\n const infiniteLoaderRef = useRef<InfiniteLoader>(null);\n const styles = useStyles2(getStyles);\n\n const virtualData = useMemo(\n (): VirtualData => ({\n items,\n focusedItemIndex,\n foldersAreOpenable,\n selectedFolder,\n onFolderExpand,\n onFolderSelect,\n idPrefix,\n emptyFolders,\n }),\n [\n items,\n focusedItemIndex,\n foldersAreOpenable,\n selectedFolder,\n onFolderExpand,\n onFolderSelect,\n idPrefix,\n emptyFolders,\n ]\n );\n\n const handleIsItemLoaded = useCallback(\n (itemIndex: number) => {\n return isItemLoaded(itemIndex);\n },\n [isItemLoaded]\n );\n\n const handleLoadMore = useCallback(\n (startIndex: number, endIndex: number) => {\n const { parentUID } = items[startIndex];\n requestLoadMore(parentUID);\n },\n [requestLoadMore, items]\n );\n\n return (\n <div className={styles.table} role=\"tree\">\n {items.length > 0 ? (\n <InfiniteLoader\n ref={infiniteLoaderRef}\n itemCount={items.length}\n isItemLoaded={handleIsItemLoaded}\n loadMoreItems={handleLoadMore}\n >\n {({ onItemsRendered, ref }) => (\n <List\n ref={ref}\n height={ROW_HEIGHT * Math.min(6.5, items.length)}\n width=\"100%\"\n itemData={virtualData}\n itemSize={ROW_HEIGHT}\n itemCount={items.length}\n onItemsRendered={onItemsRendered}\n >\n {Row}\n </List>\n )}\n </InfiniteLoader>\n ) : (\n <div className={styles.emptyMessage}>\n <Trans i18nKey=\"browse-dashboards.folder-picker.empty-message\">No folders found</Trans>\n </div>\n )}\n </div>\n );\n}\n\ninterface VirtualData extends Omit<NestedFolderListProps, 'isItemLoaded' | 'requestLoadMore'> {}\n\ninterface RowProps {\n index: number;\n style: React.CSSProperties;\n data: VirtualData;\n}\n\nconst SKELETON_WIDTHS = [100, 200, 130, 160, 150];\n\nfunction Row({ index, style: virtualStyles, data }: RowProps) {\n const {\n items,\n focusedItemIndex,\n foldersAreOpenable,\n selectedFolder,\n onFolderExpand,\n onFolderSelect,\n idPrefix,\n emptyFolders,\n } = data;\n const { item, isOpen, level, parentUID } = items[index];\n const rowRef = useRef<HTMLDivElement>(null);\n const labelId = useId();\n const rootCollection = useSelector(rootItemsSelector);\n const childrenCollections = useSelector(childrenByParentUIDSelector);\n const children = (item.uid ? childrenCollections[item.uid] : rootCollection)?.items ?? [];\n let siblings: DashboardViewItem[] = [];\n // only look for siblings if we're not at the root\n if (item.uid) {\n siblings = (parentUID ? childrenCollections[parentUID] : rootCollection)?.items ?? [];\n }\n\n const styles = useStyles2(getStyles);\n\n const handleExpand = useCallback(\n (ev: React.MouseEvent<HTMLButtonElement>) => {\n ev.preventDefault();\n ev.stopPropagation();\n if (item.uid) {\n onFolderExpand(item.uid, !isOpen);\n }\n },\n [item.uid, isOpen, onFolderExpand]\n );\n\n const handleSelect = useCallback(() => {\n if (item.kind === 'folder') {\n onFolderSelect(item);\n }\n }, [item, onFolderSelect]);\n\n if (item.kind === 'ui' && item.uiKind === 'pagination-placeholder') {\n return (\n <span style={virtualStyles} className={styles.row}>\n <Indent level={level} spacing={2} />\n <Skeleton width={SKELETON_WIDTHS[index % SKELETON_WIDTHS.length]} />\n </span>\n );\n }\n\n if (item.kind !== 'folder') {\n const itemKind = item.kind;\n const itemUID = item.uid;\n return process.env.NODE_ENV !== 'production' ? (\n <span style={virtualStyles} className={styles.row}>\n <Trans i18nKey=\"browse-dashboards.folder-picker.non-folder-item\">\n Non-folder {{ itemKind }} {{ itemUID }}\n </Trans>\n </span>\n ) : null;\n }\n\n // We don't have a direct value of whether things are coming from user searching but this seems to be a good\n // approximation as when searching all items will be at top level, while things that are actually in the top level\n // when just looking at a folders tree should not have parent.\n const isSearchItem = level === 0 && item.parentUID !== undefined;\n\n return (\n // don't need a key handler here, it's handled at the input level in NestedFolderPicker\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n ref={rowRef}\n style={virtualStyles}\n className={cx(styles.row, {\n [styles.rowFocused]: index === focusedItemIndex,\n [styles.rowSelected]: item.uid === selectedFolder,\n })}\n tabIndex={-1}\n onClick={handleSelect}\n aria-expanded={isOpen}\n aria-selected={item.uid === selectedFolder}\n aria-labelledby={labelId}\n aria-level={level + 1} // aria-level is 1-indexed\n role=\"treeitem\"\n aria-owns={children.length > 0 ? children.map((child) => getDOMId(idPrefix, child.uid)).join(' ') : undefined}\n aria-setsize={children.length}\n aria-posinset={siblings.findIndex((i) => i.uid === item.uid) + 1}\n id={getDOMId(idPrefix, item.uid)}\n >\n <div className={styles.rowBody}>\n <Indent level={level} spacing={2} />\n\n {foldersAreOpenable && !emptyFolders.has(item.uid) ? (\n <IconButton\n size={CHEVRON_SIZE}\n // by using onMouseDown here instead of onClick we can stop focus moving\n // to the button when the user clicks it (via preventDefault + stopPropagation)\n onMouseDown={handleExpand}\n // Additionally, prevent the click event from bubbling to the row, which would select the folder\n onClick={(ev) => {\n ev.preventDefault();\n ev.stopPropagation();\n }}\n // tabIndex not needed here because we handle keyboard navigation at the input level\n tabIndex={-1}\n aria-label={isOpen ? `Collapse folder ${item.title}` : `Expand folder ${item.title}`}\n name={isOpen ? 'angle-down' : 'angle-right'}\n />\n ) : (\n <span className={styles.folderButtonSpacer} />\n )}\n\n <label className={styles.label} id={labelId}>\n <Text truncate>{item.title}</Text>\n <FolderRepo folder={item} />\n </label>\n {isSearchItem && <FolderParent item={items[index]} />}\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const rowBody = css({\n height: ROW_HEIGHT,\n display: 'flex',\n position: 'relative',\n alignItems: 'center',\n flexGrow: 1,\n gap: theme.spacing(0.5),\n overflow: 'hidden',\n padding: theme.spacing(0, 1),\n });\n\n return {\n table: css({\n background: theme.components.input.background,\n }),\n\n emptyMessage: css({\n padding: theme.spacing(1),\n textAlign: 'center',\n width: '100%',\n }),\n\n folderButtonSpacer: css({\n paddingLeft: theme.spacing(2.5),\n }),\n\n row: css({\n display: 'flex',\n position: 'relative',\n alignItems: 'center',\n [':not(:first-child)']: {\n borderTop: `solid 1px ${theme.colors.border.weak}`,\n },\n }),\n\n rowFocused: css({\n backgroundColor: theme.colors.background.secondary,\n }),\n\n rowSelected: css({\n '&::before': {\n display: 'block',\n content: '\"\"',\n position: 'absolute',\n left: 0,\n bottom: 0,\n top: 0,\n width: 4,\n borderRadius: theme.shape.radius.default,\n backgroundImage: theme.colors.gradients.brandVertical,\n },\n }),\n\n rowBody,\n\n label: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n lineHeight: ROW_HEIGHT + 'px',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n '&:hover': {\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n }),\n };\n};\n","import { css, cx } from '@emotion/css';\nimport { forwardRef, ReactNode, ButtonHTMLAttributes } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Icon, getInputStyles, useTheme2, Text } from '@grafana/ui';\nimport { getFocusStyles, getMouseFocusStyles } from '@grafana/ui/internal';\n\nimport { FolderPickerSkeleton } from './Skeleton';\n\ninterface TriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n isLoading: boolean;\n handleClearSelection?: (event: React.MouseEvent<SVGElement> | React.KeyboardEvent<SVGElement>) => void;\n invalid?: boolean;\n label?: ReactNode;\n}\n\nfunction Trigger(\n { handleClearSelection, isLoading, invalid, label, ...rest }: TriggerProps,\n ref: React.ForwardedRef<HTMLButtonElement>\n) {\n const theme = useTheme2();\n\n const styles = getStyles(theme, invalid);\n\n const handleKeyDown = (event: React.KeyboardEvent<SVGElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleClearSelection?.(event);\n }\n };\n\n if (isLoading) {\n return <FolderPickerSkeleton />;\n }\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.inputWrapper}>\n {label ? (\n <div className={styles.prefix}>\n <Icon name=\"folder\" />\n </div>\n ) : undefined}\n\n <button\n type=\"button\"\n className={cx(styles.fakeInput, label ? styles.hasPrefix : undefined)}\n {...rest}\n ref={ref}\n >\n {label ? (\n <Text truncate>{label}</Text>\n ) : (\n <Text truncate color=\"secondary\">\n <Trans i18nKey=\"browse-dashboards.folder-picker.button-label\">Select folder</Trans>\n </Text>\n )}\n\n {!isLoading && handleClearSelection && (\n <Icon\n role=\"button\"\n tabIndex={0}\n aria-label={t('browse-dashboards.folder-picker.clear-selection', 'Clear selection')}\n className={styles.clearIcon}\n name=\"times\"\n onClick={handleClearSelection}\n onKeyDown={handleKeyDown}\n />\n )}\n </button>\n\n <div className={styles.suffix}>\n <Icon name=\"angle-down\" />\n </div>\n </div>\n </div>\n );\n}\n\nexport default forwardRef(Trigger);\n\nconst getStyles = (theme: GrafanaTheme2, invalid = false) => {\n const baseStyles = getInputStyles({ theme, invalid });\n\n return {\n wrapper: baseStyles.wrapper,\n inputWrapper: baseStyles.inputWrapper,\n\n prefix: css([\n baseStyles.prefix,\n {\n pointerEvents: 'none',\n color: theme.colors.text.primary,\n },\n ]),\n\n suffix: css([\n baseStyles.suffix,\n {\n pointerEvents: 'none',\n },\n ]),\n\n fakeInput: css([\n baseStyles.input,\n {\n textAlign: 'left',\n\n letterSpacing: 'normal',\n\n // We want the focus styles to appear only when tabbing through, not when clicking the button\n // (and when focus is restored after command palette closes)\n '&:focus': {\n outline: 'unset',\n boxShadow: 'unset',\n },\n\n '&:focus-visible': getFocusStyles(theme),\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'nowrap',\n justifyContent: 'space-between',\n paddingRight: 28,\n },\n ]),\n\n hasPrefix: css({\n paddingLeft: 28,\n }),\n\n clearIcon: css({\n color: theme.colors.text.secondary,\n cursor: 'pointer',\n '&:hover': {\n color: theme.colors.text.primary,\n },\n '&:focus:not(:focus-visible)': getMouseFocusStyles(theme),\n '&:focus-visible': getFocusStyles(theme),\n }),\n };\n};\n","import { generatedAPI } from '@grafana/api-clients/rtkq/dashboard/v0alpha1';\n\nexport const dashboardAPIv0alpha1 = generatedAPI.enhanceEndpoints({});\n\nexport const { useGetSearchQuery } = dashboardAPIv0alpha1;\n","import { createSelector } from '@reduxjs/toolkit';\nimport { QueryStatus } from '@reduxjs/toolkit/query';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { dashboardAPIv0alpha1 } from 'app/api/clients/dashboard/v0alpha1';\nimport { DashboardViewItemWithUIItems, DashboardsTreeItem } from 'app/features/browse-dashboards/types';\nimport { useDispatch, useSelector } from 'app/types/store';\n\nimport { ManagerKind } from '../../../features/apiserver/types';\nimport { PAGE_SIZE } from '../../../features/browse-dashboards/api/services';\nimport { getPaginationPlaceholders } from '../../../features/browse-dashboards/state/utils';\n\nimport { UseFoldersQueryProps } from './useFoldersQuery';\nimport { getRootFolderItem } from './utils';\n\ntype GetFolderChildrenQuery = ReturnType<ReturnType<typeof dashboardAPIv0alpha1.endpoints.getSearch.select>>;\ntype GetFolderChildrenRequest = {\n unsubscribe: () => void;\n};\n\nconst rootFolderToken = 'general';\nconst collator = new Intl.Collator();\n\n/**\n * Returns a loaded folder hierarchy as a flat list and a function to load folders.\n * This version uses the getFolderChildren API from the folder v1beta1 API. Compared to legacy API, the v1beta1 API\n * does not have pagination at the moment.\n */\n\ntype Props = Omit<UseFoldersQueryProps, 'permission'>;\nexport function useFoldersQueryAppPlatform({\n isBrowsing,\n openFolders,\n /* rootFolderUID: configure which folder to start browsing from */\n rootFolderUID,\n rootFolderItem,\n}: Props) {\n const dispatch = useDispatch();\n\n // Keep a list of all request subscriptions so we can unsubscribe from them when the component is unmounted\n const requestsRef = useRef<GetFolderChildrenRequest[]>([]);\n\n // Set of UIDs for which children were requested but were empty.\n const [emptyFolders, setEmptyFolders] = useState<Set<string>>(new Set());\n\n // Keep a list of selectors for dynamic state selection\n const [selectors, setSelectors] = useState<Array<ReturnType<typeof dashboardAPIv0alpha1.endpoints.getSearch.select>>>(\n []\n );\n\n // This is an aggregated dynamic selector of all the selectors for all the request issued while loading the folder\n // tree and returns the whole tree that was loaded so far.\n const listAllFoldersSelector = useMemo(() => {\n return createSelector(selectors, (...responses) => {\n // Returns loading true if any of the responses is still loading\n let isLoading = false;\n\n const responseByParent: Record<string, GetFolderChildrenQuery> = {};\n\n for (const response of responses) {\n if (response.status === QueryStatus.pending) {\n isLoading = true;\n }\n\n const parentName = response.originalArgs?.folder;\n if (parentName) {\n responseByParent[parentName] = response;\n }\n }\n\n return {\n isLoading,\n responseByParent,\n };\n });\n }, [selectors]);\n\n const state = useSelector(listAllFoldersSelector);\n\n // Loads folders for the given parent UID\n const requestNextPage = useCallback(\n (parentUid: string | undefined) => {\n const finalParentUid = parentUid ?? rootFolderToken;\n const response = state.responseByParent[finalParentUid];\n const isLoading = response?.status === QueryStatus.pending;\n\n // If already loading, don't request again\n if (isLoading) {\n return;\n }\n\n const args = { folder: finalParentUid, type: 'folder' } as const;\n\n // Make a request\n const subscription = dispatch(dashboardAPIv0alpha1.endpoints.getSearch.initiate(args));\n\n // Add selector for the response to the list so we can then have an aggregated selector for all the folders\n const selector = dashboardAPIv0alpha1.endpoints.getSearch.select(args);\n setSelectors((selectors) => selectors.concat(selector));\n\n // the subscriptions are saved in a ref so they can be unsubscribed on unmount\n requestsRef.current = requestsRef.current.concat([subscription]);\n },\n [state, dispatch]\n );\n\n // Unsubscribe from all requests when the component is unmounted\n useEffect(() => {\n return () => {\n for (const req of requestsRef.current) {\n req.unsubscribe();\n }\n };\n }, []);\n\n // Convert the individual responses into a flat list of folders, with level indicating\n // the depth in the hierarchy.\n const treeList = useMemo(() => {\n if (!isBrowsing) {\n return [];\n }\n\n function createFlatList(\n parentUid: string | undefined,\n response: GetFolderChildrenQuery | undefined,\n level: number\n ): Array<DashboardsTreeItem<DashboardViewItemWithUIItems>> {\n let folders = response?.data?.hits ? [...response.data.hits] : [];\n folders.sort((a, b) => collator.compare(a.title, b.title));\n\n const list = folders.flatMap((item) => {\n const name = item.name;\n const folderIsOpen = openFolders[name];\n const flatItem: DashboardsTreeItem<DashboardViewItemWithUIItems> = {\n isOpen: Boolean(folderIsOpen),\n level: level,\n item: {\n kind: 'folder' as const,\n title: item.title,\n // We use resource name as UID because well, not sure what metadata.uid would be used for now as you cannot\n // query by it.\n uid: name,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n managedBy: item.managedBy?.kind as ManagerKind | undefined,\n parentUID: item.folder,\n },\n };\n\n const childResponse = folderIsOpen && state.responseByParent[name];\n if (childResponse) {\n // If we finished loading and there are no children add to empty list\n if (\n childResponse.data &&\n childResponse.status !== QueryStatus.pending &&\n childResponse.data.hits.length === 0\n ) {\n setEmptyFolders((prev) => new Set(prev).add(name));\n }\n const childFlatItems = createFlatList(name, childResponse, level + 1);\n return [flatItem, ...childFlatItems];\n }\n\n return flatItem;\n });\n\n if (!response) {\n // The pagination placeholders are what actually triggers the call to the next page. So if there is no response,\n // meaning to request for some children, we add these placeholders, and they will trigger the load.\n list.push(...getPaginationPlaceholders(PAGE_SIZE, parentUid, level));\n }\n return list;\n }\n\n const startingToken = rootFolderUID ?? rootFolderToken;\n const rootFlatTree = createFlatList(startingToken, state.responseByParent[startingToken], 1);\n rootFlatTree.unshift(rootFolderItem || getRootFolderItem());\n\n return rootFlatTree;\n }, [state, isBrowsing, openFolders, rootFolderUID, rootFolderItem]);\n\n return {\n emptyFolders,\n items: treeList,\n isLoading: state.isLoading,\n requestNextPage,\n };\n}\n","import { createSelector } from '@reduxjs/toolkit';\nimport { QueryDefinition, BaseQueryFn, QueryActionCreatorResult } from '@reduxjs/toolkit/query';\nimport { RequestOptions } from 'http';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ListFolderQueryArgs, browseDashboardsAPI } from 'app/features/browse-dashboards/api/browseDashboardsAPI';\nimport { PAGE_SIZE } from 'app/features/browse-dashboards/api/services';\nimport { getPaginationPlaceholders } from 'app/features/browse-dashboards/state/utils';\nimport { DashboardViewItemWithUIItems, DashboardsTreeItem } from 'app/features/browse-dashboards/types';\nimport { FolderListItemDTO } from 'app/types/folders';\nimport { useDispatch, useSelector } from 'app/types/store';\n\nimport { UseFoldersQueryProps } from './useFoldersQuery';\nimport { getRootFolderItem } from './utils';\n\ntype ListFoldersQuery = ReturnType<ReturnType<typeof browseDashboardsAPI.endpoints.listFolders.select>>;\ntype ListFoldersRequest = QueryActionCreatorResult<\n QueryDefinition<\n ListFolderQueryArgs,\n BaseQueryFn<RequestOptions>,\n 'getFolder',\n FolderListItemDTO[],\n 'browseDashboardsAPI'\n >\n>;\n\nconst PENDING_STATUS = 'pending';\n\n/**\n * Returns whether the set of pages are 'fully loaded', the last page number, and if the last page is currently loading\n */\nfunction getPagesLoadStatus(pages: ListFoldersQuery[]): [boolean, number | undefined, boolean] {\n const lastPage = pages.at(-1);\n const lastPageNumber = lastPage?.originalArgs?.page;\n const lastPageLoading = lastPage?.status === PENDING_STATUS;\n\n if (!lastPage?.data) {\n // If there's no pages yet, or the last page is still loading\n return [false, lastPageNumber, lastPageLoading];\n } else {\n return [lastPage.data.length < lastPage.originalArgs.limit, lastPageNumber, lastPageLoading];\n }\n}\n\n/**\n * Returns a loaded folder hierarchy as a flat list and a function to load more pages.\n */\nexport function useFoldersQueryLegacy({\n isBrowsing,\n openFolders,\n permission,\n /* rootFolderUID: configure which folder to start browsing from */\n rootFolderUID,\n rootFolderItem,\n}: UseFoldersQueryProps) {\n const dispatch = useDispatch();\n\n // Keep a list of all request subscriptions so we can unsubscribe from them when the component is unmounted\n const requestsRef = useRef<ListFoldersRequest[]>([]);\n\n // Set of UIDs for which children were requested but were empty.\n const [emptyFolders, setEmptyFolders] = useState<Set<string>>(new Set());\n\n // Keep a list of selectors for dynamic state selection\n const [selectors, setSelectors] = useState<\n Array<ReturnType<typeof browseDashboardsAPI.endpoints.listFolders.select>>\n >([]);\n\n const listAllFoldersSelector = useMemo(() => {\n return createSelector(selectors, (...pages) => {\n let isLoading = false;\n const rootPages: ListFoldersQuery[] = [];\n const pagesByParent: Record<string, ListFoldersQuery[]> = {};\n\n for (const page of pages) {\n if (page.status === PENDING_STATUS) {\n isLoading = true;\n }\n\n const parentUid = page.originalArgs?.parentUid;\n if (parentUid) {\n if (!pagesByParent[parentUid]) {\n pagesByParent[parentUid] = [];\n }\n\n pagesByParent[parentUid].push(page);\n } else {\n rootPages.push(page);\n }\n }\n\n return {\n isLoading,\n rootPages,\n pagesByParent,\n };\n });\n }, [selectors]);\n\n const state = useSelector(listAllFoldersSelector);\n\n // Loads the next page of folders for the given parent UID by inspecting the\n // state to determine what the next page is\n const requestNextPage = useCallback(\n (parentUid: string | undefined) => {\n const pages = parentUid ? state.pagesByParent[parentUid] : state.rootPages;\n const [fullyLoaded, pageNumber, lastPageLoading] = getPagesLoadStatus(pages ?? []);\n\n // If fully loaded or the last page is still loading, don't request a new page\n if (fullyLoaded || lastPageLoading) {\n return;\n }\n\n const args = { parentUid, page: (pageNumber ?? 0) + 1, limit: PAGE_SIZE, permission };\n const subscription = dispatch(browseDashboardsAPI.endpoints.listFolders.initiate(args));\n\n const selector = browseDashboardsAPI.endpoints.listFolders.select({\n parentUid: subscription.arg.parentUid,\n page: subscription.arg.page,\n limit: subscription.arg.limit,\n permission: subscription.arg.permission,\n });\n\n setSelectors((pages) => pages.concat(selector));\n\n // the subscriptions are saved in a ref so they can be unsubscribed on unmount\n requestsRef.current = requestsRef.current.concat([subscription]);\n },\n [state, dispatch, permission]\n );\n\n // Unsubscribe from all requests when the component is unmounted\n useEffect(() => {\n return () => {\n for (const req of requestsRef.current) {\n req.unsubscribe();\n }\n };\n }, []);\n\n // Convert the individual responses into a flat list of folders, with level indicating\n // the depth in the hierarchy.\n const treeList = useMemo(() => {\n if (!isBrowsing) {\n return [];\n }\n\n function createFlatList(\n parentUid: string | undefined,\n pages: ListFoldersQuery[],\n level: number\n ): Array<DashboardsTreeItem<DashboardViewItemWithUIItems>> {\n const flatList = pages.flatMap((page) => {\n const pageItems = page.data ?? [];\n\n return pageItems.flatMap((item) => {\n const folderIsOpen = openFolders[item.uid];\n const flatItem: DashboardsTreeItem<DashboardViewItemWithUIItems> = {\n isOpen: Boolean(folderIsOpen),\n level: level,\n item: {\n kind: 'folder' as const,\n title: item.title,\n uid: item.uid,\n managedBy: item.managedBy,\n parentUID: item.parentUid,\n },\n };\n\n const childPages = folderIsOpen && state.pagesByParent[item.uid];\n\n if (childPages) {\n const childFlatItems = createFlatList(item.uid, childPages, level + 1);\n\n // If we finished loading and there are no children add to empty list\n if (childPages[0] && childPages[0].status !== PENDING_STATUS && childFlatItems.length === 0) {\n setEmptyFolders((prev) =>