{"version":3,"file":"static/js/ec29d860405351b01ea3.bundle.js","mappings":"gxBA0CM,MAAOA,EAmBTC,YACIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAaG,KAAAC,YAAc,KACjB,MAAMP,EAAmBQ,EAAAA,EAAA,GAClBC,KAAKT,oBAAoBU,SACzBC,EAAAA,EAAAA,IAAKF,KAAKT,oBAAoBY,UAWrC,OARiBC,EAAAA,EAAAA,eACb,GAAGJ,KAAKX,YAAYW,KAAKH,UAAUG,KAAKP,UAAYO,KAAKN,cAAcM,KAAKR,SAASa,KAEjFC,GAAW,GAAGA,EAAQC,iBAAmBD,EAAQE,sBAAwB,KAAOF,EAAQG,uBAAyB,aAChHC,EAAAA,EAAAA,iBAAgBnB,KACrBS,KAAKV,YACLU,KAAKH,SAKN,KAAAc,mBAAqB,IAAM,yBAE3B,KAAAC,cAAgB,IAAiB,UA9BpCZ,KAAKX,SAAWA,EAChBW,KAAKV,YAAcA,EACnBU,KAAKP,SAAWA,EAChBO,KAAKN,WAAaA,EAClBM,KAAKT,oBAAsBA,EAC3BS,KAAKR,SAAWA,EAChBQ,KAAKL,kBAAoBA,EACzBK,KAAKJ,qBAAuBA,EAC5BI,KAAKH,OAASA,GA+Cf,MAAMgB,EAA4BA,CACrCC,EACAC,KAEA,MAAM1B,EACyC,aAA3CyB,EAAKE,eAAeC,UAAU5B,UAA4ByB,EAAKE,eAAeE,OAASJ,EAAKE,eAAeE,MAAMC,WAC3G,WACA,SAEJ5B,EAAsB6B,EAAAA,yBAAyBC,cAAcP,GAAMQ,oBACnEC,GAAgBC,EAAAA,EAAAA,IAAuBV,EAAKE,gBAC5CrB,MAnHoB8B,EAmHqBX,KAlH9BW,EAAUC,aAAiDC,IAAvCF,EAAUC,OAAO/B,oBAA0E,IAAvC8B,EAAUC,OAAO/B,mBAD9G,IAA8B8B,EAoH1B,MAAM7B,EAxGV,SAA+B6B,GAA+D,IAAAG,EAC1F,QAAyB,QAAjBA,EAACH,EAAUC,cAAM,IAAAE,IAAhBA,EAAkBC,oBAuGEC,CAAsBhB,GAMnD,GAJIA,EAAKE,eAAeE,OAASJ,EAAKE,eAAeE,MAAMa,UACvDxC,EAAoBY,QAAU,CAAE6B,QAAuBC,KAAKC,MAAMC,mBAAmBrB,EAAKE,eAAeE,MAAMa,YAGlG,aAAb1C,EACA,OAAO,IAAI0B,EACP1B,EACAyB,EAAKE,eAAe1B,YACpBC,EACAgC,IACET,EAAKE,eAAeC,UAAUmB,QAAWtB,EAAKE,eAAeE,OAASJ,EAAKE,eAAeE,MAAMC,YAAe,QACjHQ,EACAhC,EACAC,EACAkB,EAAKE,eAAenB,QAErB,GAAiB,WAAbR,GAAyByB,EAAKE,eAAeE,OAASJ,EAAKE,eAAeE,MAAMmB,EACvF,OAAO,IAAItB,EACP1B,EACAyB,EAAKE,eAAe1B,YACpBC,EACAgC,OACAI,EACAb,EAAKE,eAAeE,MAAMmB,EAC1B1C,EACAC,EACAkB,EAAKE,eAAenB,QAErB,GACU,WAAbR,GACAyB,EAAKE,eAAeE,OACpBJ,EAAKE,eAAeE,MAAMoB,WAC1BxB,EAAKE,eAAeE,MAAMqB,eAE1B,OAAO,IAAIxB,EACP1B,EACAyB,EAAKE,eAAe1B,YACpBC,EACAgC,OACAI,EACAM,KAAKO,UAAU,CAAEC,UAAW3B,EAAKE,eAAeE,MAAMoB,UAAWI,eAAgB5B,EAAKE,eAAeE,MAAMqB,iBAC3G5C,EACAC,EACAkB,EAAKE,eAAenB,QAI5B,MAAM,IAAI8C,MAAM,0D,qPCvIRC,E,uCA7BN,MAAOC,UAAyC1D,EAAAA,EAAtDC,c,oBAKW,KAAAuB,mBAAqB,IAAc,0BAMnC,KAAAC,cAAgB,IAEG,aAAlBZ,KAAKX,UACJW,KAAKR,UAAYQ,KAAKR,SAASsD,OAAS,GACxC9C,KAAKT,qBACFS,KAAKT,oBAAoBY,SACzBH,KAAKT,oBAAoBY,QAAQ6B,SACjChC,KAAKT,oBAAoBY,QAAQ6B,QAAQc,OAAS,EAE/C,UAEJ,gBAOf,SAAYF,GAIRA,EAAA,kBAKAA,EAAA,kBAKAA,EAAA,kBAdJ,CAAYA,IAAAA,EAAoC,KAuDhD,SAASG,EAAaC,EAA8BC,GAChD,IAAKC,EAAAA,gBAAgBC,YAAYH,EAAQI,iBAErC,OAAO,EAEX,IAAK,MAAMC,KAAaL,EAAQI,gBAC5B,GACIC,EAAUC,WAAaL,EAA8BM,mCACrDF,EAAUG,YAAcP,EAA8BQ,sCAItD,OAAO,EAIf,OAAO,EA2DL,SAAUC,EACZC,EACAV,EACAW,GAEA,IAAKV,EAAAA,gBAAgBC,YAAYQ,IAAaE,EAAAA,iBAAiBC,kBAAkBb,GAC7E,MAAO,GAEX,OAAQW,EAAQ5C,eAAe+C,IAAIrC,OAAOsC,6BACtC,KAAKpB,EAAqCqB,QACtC,OA5DZ,SACIN,EACAV,GAEA,IAAKC,EAAAA,gBAAgBC,YAAYQ,GAC7B,MAAO,GAEX,MAAMO,EAA0C,GAEhD,IAAK,MAAMlB,KAAWW,EACbZ,EAAaC,EAASC,IACvBiB,EAAiBC,KAAKnB,GAG9B,OAAOkB,EA8CQE,CAAyBT,EAAUV,GAC9C,KAAKL,EAAqCyB,QACtC,OAvCZ,SACIV,EACAV,GAEA,IAAKC,EAAAA,gBAAgBC,YAAYQ,GAC7B,MAAO,GAEX,MAAMW,EAAyC,GACzCC,EAA4C,GAElD,IAAK,MAAMvB,KAAWW,EACdZ,EAAaC,EAASC,GACtBsB,EAAmBJ,KAAKnB,GAExBsB,EAAgBH,KAAKnB,GAG7B,OAAOsB,EAAgBE,OAAOD,GAsBfE,CAAiCd,EAAUV,GACtD,QACI,OAAOU,GAWZe,eAAeC,EAClBC,EACAhB,EACAiB,GAEA,MAEMC,EAAiCF,EAAqBvE,KAAI0E,IAC5D,MAAMC,GAAcC,EAAAA,EAAAA,yBAAwBF,EAAqBnB,EAAQ5C,eAAe1B,aAMxF,OAJI0F,IACAD,EAAoBG,gBAAkBF,GAGnCD,KAKX,GACInB,EAAQ5C,eAAe+C,IAAIrC,OAAOyD,iBAAmBC,EAAAA,gBAAgBC,YACd,IAAvDzB,EAAQ5C,eAAe+C,IAAIrC,OAAO4D,iBAElC,MAAO,CACH3B,SAAUmB,EACVS,MAAOV,MAAAA,EAAAA,EApBqB,GAuBpC,MAAM5B,QAAsCuC,EAAAA,EAAAA,gCAA+B,CAAEC,cAAe7B,IA0B5F,MAAO,CACHD,SAF6BD,EAvBVoB,EAA+BzE,KAAI0E,IACtD,GAAI7B,EAAAA,gBAAgBC,YAAY4B,EAAoB3B,iBAChD,IAAK,MAAMsC,KAAWX,EAAoB3B,gBAGlCH,QACqBtB,IAArB+D,EAAQpC,UACRoC,EAAQpC,WAAaL,EAA8BM,mCAEG,QAAtDK,EAAQ5C,eAAe+C,IAAIrC,OAAOiE,iBAClCD,EAAQlC,YAAcP,EAA8BQ,wCAMpDiC,EAAQlC,UAAY,IAKhC,OAAOuB,KAEgF9B,EAA+BW,GAGtH2B,MAAOV,MAAAA,EAAAA,EAnDyB,EAqDhCe,gCAAiC3C,EAC3BA,EAA8BM,uCAC9B5B,GAgFP,MAAMkE,GAAmBC,EAAAA,EAAAA,IAA2B,CACvDC,GAAI,qFACJC,OAxEJtB,eAAsBuB,EAAyCrC,GAC3D,IAAIsC,EACAC,EACJ,MAAMC,EAA6C,GAWnD,GAVAA,EAAoBC,QAAU,CAC1BC,UAAW1C,EAAQ5C,eAAe1B,YAAYiH,UAC9CC,UAAW5C,EAAQ5C,eAAe1B,YAAYmH,WAElDL,EAAoBM,WAAaT,EAAMzG,SACvC4G,EAAoBO,mBAAoB,EACxCP,EAAoBQ,sBAAuB,EAC3CR,EAAoBS,SAAWjD,EAAQ5C,eAAenB,OAG/B,aAAnBoG,EAAM5G,UAA4BuE,EAAQ5C,eAAeE,OAAS0C,EAAQ5C,eAAeE,MAAMC,WAAa,CAC5G,IAAI8E,EAAMxG,SAWN,MAAM,IAAIkD,MAAM,wFAVhByD,EAAoBU,YAAc,CAACb,EAAMxG,UAJnB,GAKtBsH,QAAQC,IAAI,wBAAyBZ,GACrCF,GAAUe,EAAAA,EAAAA,uBACN,CACIxB,cAAe7B,EACfrE,oBAAqB0G,EAAM1G,qBAE/B6G,QAKL,GAAIH,EAAMvG,YAAckE,EAAQ5C,eAAeE,OAAS0C,EAAQ5C,eAAeE,MAAMmB,EACxF+D,EAAoBc,gBAAkBjB,EAAMvG,WAC5CwG,GAAUe,EAAAA,EAAAA,uBACN,CACIxB,cAAe7B,EACfrE,oBAAqB0G,EAAM1G,qBAE/B6G,OAED,MACHH,EAAMvG,YACNkE,EAAQ5C,eAAeE,OACvB0C,EAAQ5C,eAAeE,MAAMoB,WAC7BsB,EAAQ5C,eAAeE,MAAMqB,gBAoB7B,MAAM,IAAII,MAAM,qGAnBlB,CACE,MAAMwE,EAAelF,KAAKC,MAAM+D,EAAMvG,YAEtC,GADAyG,EAAkBiB,OAAOD,EAAa1E,WAClC2E,OAAOC,MAAMlB,GACb,MAAM,IAAIxD,MAAM,mDACb,IAAKwE,EAAazE,eACrB,MAAM,IAAIC,MAAM,0CAEhByD,EAAoBkB,qBAAuBH,EAAazE,eACxD0D,EAAoBmB,IAAM,CAACpB,GAvCL,GAwCtBD,GAAUe,EAAAA,EAAAA,uBACN,CACIxB,cAAe7B,EACfrE,oBAAqB0G,EAAM1G,qBAE/B6G,IAOZ,MAAMxB,QAA6BsB,EAGnC,OAFAa,QAAQC,IAAI,uBAAwBpC,GAE7BD,EAAeC,EAAsBhB,EAASsC,EAAQsB,SAASjC,QAMtEU,MA3QiBnF,IACjB,MAAMmF,GAAQpF,EAAAA,EAAAA,GAA0BC,EAAM+B,GAc9C,OAXIoD,EAAM1G,oBAAoBU,QAAUa,EAAKY,SACzCuE,EAAM1G,oBAAoBU,OAAOwH,IAAM3G,EAAKY,OAAOgG,cAAgB,GAInEzB,EAAM1G,oBAAoBU,QAAUa,EAAKE,eAAeE,OAASJ,EAAKE,eAAeE,MAAMyG,OAC3F1B,EAAM1G,oBAAoBU,OAAO2H,MAAQ9G,EAAKE,eAAeE,MAAMyG,MAGvE1B,EAAM1G,oBAAoBgG,OAAQ,EAE3BU,KA+PX,K,oOCnUO,MAAM4B,EAAc,CACvBC,0BAA2B,eAC3BC,sBAAuB,oBACvBC,uBAAwB,qBACxBC,oBAAqB,WACrBC,qBAAsB,YACtBC,qBAAsB,YACtBC,sBAAuB,aACvBC,wBAAyB,cACzBC,qBAAsB,WACtBC,0BAA2B,iBAMzB,MAAOC,EAGTpJ,YAAYE,GAIL,KAAAQ,YAAc,KAAMM,EAAAA,EAAAA,eAAc,oBAAqBJ,KAAKV,aAE5D,KAAAqB,mBAAqB,IAAM,oBAE3B,KAAAC,cAAgB,IAAiB,UAPpCZ,KAAKV,YAAcA,GAepBoF,eAAe+D,EAA6BxC,EAA0ByC,GACzE,OAAOC,EAAAA,EAAAA,6BAA4B,CAAElD,cAAeiD,IAAOE,MAAMC,IACxBA,EAAoBC,oBAAsB,IAC1EzI,KAA4C0I,IACzC,IAAIC,EAAM,GACV,GAAID,EAAWE,WACX,OAAQF,EAAWE,WAAWC,eAC1B,IAAK,OACDF,EAAMD,EAAWI,aAAetB,EAAYK,qBAAuBL,EAAYI,oBAC/E,MACJ,IAAK,QACDe,EAAMD,EAAWI,aAAetB,EAAYO,sBAAwBP,EAAYM,qBAChF,MACJ,IAAK,gBACDa,EAAMD,EAAWI,aAAetB,EAAYG,uBAAyBH,EAAYE,sBACjF,MACJ,IAAK,UACDiB,EAAMnB,EAAYC,0BAClB,MACJ,IAAK,mBACDkB,EAAMnB,EAAYQ,wBAClB,MACJ,IAAK,WACDW,EAAMnB,EAAYS,qBAClB,MACJ,IAAK,gBACDU,EAAMnB,EAAYU,+BAK1BG,EAAIU,UAAUC,QAAQ,2DAE1B,GAAIL,EACA,MAAO,CACHA,IAAAA,EACAD,WAAAA,MAKXO,OAAOC,WAIb,MAAMC,EAAe/H,GACjB,IAAI+G,EAAkB/G,EAAUT,eAAe1B,aAG7CmK,GAAyC3D,EAAAA,EAAAA,IAA2B,CAC7EC,GAAI,qFACJC,OAA8CyC,EAC9CxC,MAAOuD,IAGX,K,8HC1GKE,E,wBCGEhF,eAAeiF,EAClBC,EACArK,EACAmJ,GAEA,OAAOmB,EAAAA,EAAAA,+BAA8B,CAAEpE,cAAeiD,EAAKnJ,oBAAAA,GAAuBqK,GAAgBhB,MAC7FkB,IACG,IAAKA,EAED,OADApB,EAAIqB,MAAM,sDACyB,GAGvC,MAAMC,GAAUF,GAAmB,IAAIzJ,KAAK4J,GAA6DA,IAEzG,OAAsB,IAAlBD,EAAOlH,QACP4F,EAAIqB,MAAM,8EACyB,IAGhCC,MDtBnB,SAAKN,GACDA,EAAAA,EAAA,mDACAA,EAAAA,EAAA,iDAFJ,CAAKA,IAAAA,EAAa,KAQZ,MAAOQ,UAAkC/K,EAAAA,EAA/CC,c,oBACW,KAAAuB,mBAAqB,IAAM,iBAE3B,KAAAC,cAAgB,IAEG,aAAlBZ,KAAKX,UACJW,KAAKR,UAAYQ,KAAKR,SAASsD,OAAS,GACxC9C,KAAKT,qBACFS,KAAKT,oBAAoBY,SACzBH,KAAKT,oBAAoBY,QAAQ6B,SACjChC,KAAKT,oBAAoBY,QAAQ6B,QAAQc,OAAS,EAE/C,UAEJ,eAiFR,MAAM+C,GAAmBC,EAAAA,EAAAA,IAA2B,CACvDC,GAAI,iFACJC,OAlEJtB,eAAsBuB,EAAkCyC,GACpD,IAAIvC,EACJ,GAAuB,aAAnBF,EAAM5G,SAAyB,CAC/B,GAAI4G,EAAMxG,SACN,OAAOkK,EACH,CACI7C,YAAa,CAACb,EAAMxG,UAAYiK,EAAcS,wBAC9C9D,QAAS,CACLC,UAAWL,EAAM3G,YAAYiH,UAC7BC,UAAWP,EAAM3G,YAAYmH,WAEjCC,WAAYT,EAAMrG,qBAAuBqG,EAAMzG,SAAW,GAC1DqH,SAAU6B,EAAI1H,eAAenB,QAEjCoG,EAAM1G,oBACNmJ,GAGR,MAAM,IAAI/F,MAAM,oFAEhB,GAAIsD,EAAMvG,YAAcgJ,EAAI1H,eAAeE,OAASwH,EAAI1H,eAAeE,MAAMmB,EACzE,OAAOsH,EACH,CACIzC,gBAAiBjB,EAAMvG,WACvB2G,QAAS,CACLC,UAAWL,EAAM3G,YAAYiH,UAC7BC,UAAWP,EAAM3G,YAAYmH,WAEjCC,WAAYT,EAAMrG,qBAAuBqG,EAAMzG,SAAW,GAC1DqH,SAAU6B,EAAI1H,eAAenB,QAEjCoG,EAAM1G,oBACNmJ,GAGR,GAAIzC,EAAMvG,YAAcgJ,EAAI1H,eAAeE,OAASwH,EAAI1H,eAAeE,MAAMoB,UAAW,CACpF,MAAM6E,EAAelF,KAAKC,MAAM+D,EAAMvG,YAEtC,GADAyG,EAAkBiB,OAAOD,EAAa1E,WAClC2E,OAAOC,MAAMlB,GACb,MAAM,IAAIxD,MAAM,mDACb,GAAKwE,EAAazE,eAGrB,OAAOiH,EACH,CACItD,QAAS,CACLC,UAAWL,EAAM3G,YAAYiH,UAC7BC,UAAWP,EAAM3G,YAAYmH,WAEjCC,WAAYT,EAAMrG,qBAAuBqG,EAAMzG,SAAW,GAC1D8H,qBAAsBH,EAAazE,eACnC6E,IAAK,CAACpB,GAAmBuD,EAAcU,uBACvCvD,SAAU6B,EAAI1H,eAAenB,QAEjCoG,EAAM1G,oBACNmJ,GAdJ,MAAM,IAAI/F,MAAM,0CAkBpB,MAAM,IAAIA,MAAM,sGAQxBsD,MA5EiBnF,IACVD,EAAAA,EAAAA,GAA0BC,EAAMoJ,KA8E3C,K,2HE1GA,MAAMG,EAAwB,CAC1B,gBACA,uBACA,kBACA,qBACA,wBACA,YAQS7I,EAA0BR,IACnC,MAAMsJ,EAAyBC,EAAuC,WAAYvJ,GAClF,OAAKsJ,GAA4D,IAAlCA,EAAuBxH,OAIxBwH,EACzBjK,KAAImK,IACD,IACI,MAAMC,EAAqC,GAI3C,OAHAJ,EAAsBK,SAAQ,CAACC,EAAYC,KACvCH,EAAcE,GAAcH,EAAkBI,MAE3CH,EACT,MAAAI,GACE,WAGPvB,OAAOC,SAfD,IA2CFuB,EAAmBA,CAACC,EAAcvL,EAAkCwL,EAA+BC,KAE5G,QAAiBtJ,IAAbnC,EAAwB,CACxB,GAAwB,IAApBA,EAASsD,OACTiI,EAAQG,aAAaC,OAAO,gBACzB,CACH,MAAMC,EAAiB5L,EAAS6L,MAAK,CAACC,EAAOC,IACzCD,EAAM/K,iBAAmBgL,EAAOhL,iBAAmB+K,EAAM/K,gBAAkBgL,EAAOhL,gBAAkB,GAAK,IAE7GwK,EAAQG,aAAaM,IAAI,WAAYvJ,KAAKO,UA9BrBhD,CAAAA,IAC7B,MAAMiM,EAA4C,GAUlD,OARAjM,EAASkL,SAAQpK,IACb,MAAMkK,EAAyC,GAC/CH,EAAsBK,SAAQC,IAC1BH,EAAkBrG,KAAK7D,EAAQqK,OAEnCc,EAAmBtH,KAAKqG,MAGrBiB,GAmBqDC,CAAiBN,KAKzE,OADAL,EAAQG,aAAaC,OAAO,QACrBJ,EAAQY,KAGnB,YAAuBhK,IAAnBqJ,GAC8B,IAA1BA,EAAelI,OACfiI,EAAQG,aAAaC,OAAO,WAE5BJ,EAAQG,aAAaM,IAAI,UAAWvJ,KAAKO,UAAUwI,IAIvDD,EAAQG,aAAaC,OAAO,QACrBJ,EAAQY,OAGfV,GACAF,EAAQG,aAAaM,IAAI,OAAQP,EAAUW,YAGxCb,EAAQY,OAQNpB,EAAkBA,CAAIvB,EAAahI,IACxCA,EAAeE,OAASF,EAAeE,MAAM8H,GACnC/G,KAAKC,MAAMC,mBAAmBnB,EAAeE,MAAM8H,KAE1D,KAOE6C,EAAiB7K,GACtB8K,EAAAA,GAASC,UACF,IAAIC,IAAIC,OAAOC,SAASP,MAI/B3K,EAAemL,IAAIC,WAAWT,KACvB,IAAIK,IAAIhL,EAAemL,IAAIC,WAAWT,MAE1C,IAAIK,IAAsBhL,EAAemL,IAAIC,a,sGCpHjD,MAAMC,EAAqEC,IAC9E,MAAM,SAAE3I,EAAQ,UAAE4I,EAAS,0BAAEC,GAA8BF,EAa3D,OACIG,IAAAA,cAAA,OAAKC,UAAU,yBACV/I,EAASb,OAAS,EACfa,EAAStD,KAAI,CAACsM,EAA0BC,IAEhCH,IAAAA,cAAA,KACIzD,IAAK4D,EACLC,MAAO,CAAEC,OAAQ,WACjBC,QAASA,IAnBAC,EAACpC,EAAeqC,KAC7C,MACMC,GADmBC,EAAAA,EAAAA,IAAW,WAAYb,EAAM1I,QAAQwJ,eAChBC,QAAQ,WAAY,qBAC5DC,EAA8BnL,mBAAmB+K,GACvDnG,QAAQC,IAAIsG,GACZvG,QAAQC,IAAI,gCACZ,MAAMuG,EAAYD,MAAAA,GAAAA,EAA6BE,SAAS,KAAO,IAAM,IACrEvB,OAAOC,SAASuB,OAAO,GAAGH,IAA8BC,QAAgBN,MAYrCD,CAAyBJ,EAAKD,EAAKM,UAClDP,UAAU,iBACV3G,GAAG,mBAEH0G,IAAAA,cAAA,OAAKC,UAAU,wBACXD,IAAAA,cAAA,QAAMC,UAAU,+BAA6B,cAC7CD,IAAAA,cAAA,OACIC,UAAU,6BACVgB,MAAM,OACNC,OAAO,OACPC,QAAQ,gBACRf,MAAO,CAAEgB,QAAS,eAAgBC,cAAe,WAEjDrB,IAAAA,cAAA,QACIsB,EAAE,42BACFlB,MAAO,CAAEmB,KAAM,0BAI3BvB,IAAAA,cAAA,OAAKC,UAAU,6CACVC,EAAKsB,UACFxB,IAAAA,cAAA,OACIyB,IAAKvB,EAAKsB,SACVE,IAAI,6EAIhB1B,IAAAA,cAAA,OAAKC,UAAU,2BACXD,IAAAA,cAAA,OAAKC,UAAU,kCAAkCC,EAAKyB,MACtD3B,IAAAA,cAAA,KAAGC,UAAU,wCACR,GAAGC,EAAK0B,YAAYC,UAAU,EAxCrC,YA0DF7B,IAAAA,cAAA,OAAKC,UAAU,iCACXD,IAAAA,cAAA,OACIC,UAAU,sCACVgB,MAAM,QACNC,OAAO,QACPC,QAAQ,gBACRf,MAAO,CAAEgB,QAAS,eAAgBC,cAAe,WAEjDrB,IAAAA,cAAA,QACIsB,EAAE,42BACFlB,MAAO,CAAEmB,KAAM,yBAGvBvB,IAAAA,cAAA,QAAMC,UAAU,wCAAwCC,EAAK4B,OAC7D9B,IAAAA,cAAA,QAAMC,UAAU,wCAAsC,iBAMtED,IAAAA,cAAA,OAAKC,UAAU,+BACoB,UAA9BF,EACKD,MAAAA,OAAS,EAATA,EAAWiC,gCACXjC,MAAAA,OAAS,EAATA,EAAWkC,yBAAwB,Q,mNC3FvD,MAAOC,EAAbtP,cACuB,KAAAuP,cAA8C,KAE9C,KAAAC,eAAwC,GAExC,KAAAC,eAAqC,KAErC,KAAAC,kBAAmC,KAEnC,KAAAtP,SAA8C,KAE9C,KAAAuP,kBAAwC,EAExC,KAAAC,SAAmB,GAEnB,KAAA3P,SAAyB,UAEzB,KAAA4P,eAAuC,KAEvC,KAAAC,cAA4C,GAE5C,KAAAC,cAAuB,KApB9BC,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,yCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,yCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qCAECD,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,oCAMT,MAAOC,EAAblQ,cACW,KAAAU,YAAc,IAAM,gBAEpB,KAAAa,mBAAqB,IAAM,gBAE3B,KAAAC,cAAgB,IAAiB,WAGrC8D,eAAe6K,EAAoBtJ,EAA2ByC,GACjE,OAAO,IAAIgG,EAOR,MAAMc,EAAuB/N,GACzB,IAAI6N,EAMf,GAAexJ,EAAAA,EAAAA,IAA0C,CACrDE,OAAgCuJ,EAChCtJ,MAAOuJ,K,4BCnEJ,IAAWC,EAQAC,E,yBARlB,SAAkBD,GACdA,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,cACAA,EAAA,YALJ,CAAkBA,IAAAA,EAAmB,KAQrC,SAAkBC,GACdA,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,UALJ,CAAkBA,IAAAA,EAAQ,M,+DCCdC,EAmDAC,EA8BAC,E,4vBAwDN,SAAUC,EAAYC,GACxB,OACIA,IAAkBC,EAAAA,kBAAkBC,UACpCF,IAAkBC,EAAAA,kBAAkBE,SACpCH,IAAkBC,EAAAA,kBAAkBG,QAStC,SAAUC,EACZC,EACAC,GAGA,OAAOA,EAAmBC,MAAMC,GAC5BC,EAA8BJ,EAAqBG,KAUrD,SAAUC,EAA8BJ,EAA0CG,GAEpF,OACIA,EAAoBjQ,kBAAoB8P,EAAoB9P,iBAC5DiQ,EAAoBE,qBAAuBL,EAAoBK,oBAC/DF,EAAoBG,gBAAkBN,EAAoBM,gBACzDb,EAAYU,EAAoBG,gBAC7BH,EAAoBhQ,uBAAyB6P,EAAoB7P,sBAIvE,SAAUoQ,EACZC,EACAC,GAEA,MAAMC,EAAmD,GACzD,IAAIC,GAAmB,EAsBvB,GArBAF,EAA0BpG,SAASuG,IAC/B,GAAIR,EAA8BI,EAAuBR,oBAAqBY,IAE1E,GADAD,GAAmB,EACfH,EAAuBK,YAAa,CACpC,MAAMC,EAAIpR,EAAAA,EAAA,GACHkR,GAAiB,IACpBzQ,0BAC2CmB,IAAtCkP,EAAuBO,YAA4B,GAAGP,EAAuBO,cAC9EH,EAAkBzQ,qBACtBC,2BACyCkB,IAApCkP,EAAuBQ,UAA0B,GAAGR,EAAuBQ,YAC5EJ,EAAkBxQ,wBAE1BsQ,EAA0B5M,KAAKgN,SAInCJ,EAA0B5M,KAAK8M,OAIlCD,EAAkB,CACnB,MAAMG,EAAIpR,EAAAA,EAAA,GACH8Q,EAAuBR,qBAAmB,IAC7C7P,0BAC2CmB,IAAtCkP,EAAuBO,YAA4B,GAAGP,EAAuBO,cAC9EP,EAAuBR,oBAAoB7P,qBAC/CC,2BACyCkB,IAApCkP,EAAuBQ,UAA0B,GAAGR,EAAuBQ,YAC5ER,EAAuBR,oBAAoB5P,wBAEnDsQ,EAA0B5M,KAAKgN,GAI1BN,EAAuBR,oBAAoBM,gBAAkBX,EAAAA,kBAAkBsB,MAC5ET,EAAuBR,oBAAoBM,gBAAkBX,EAAAA,kBAAkBuB,WACnFV,EAAuBW,8BAA8BC,mBAAqBC,EAAAA,YAAYC,cAEtFd,EAAuBW,8BAA8BI,OAAOlH,SAASmH,IACjE,GAAIA,EAAMtR,kBAAoB4Q,EAAK5Q,iBAAmBsR,EAAMrR,uBAAyB2Q,EAAK3Q,0BAEnF,CACH,MAAMsR,EAAgBf,EAA0BgB,WAAWC,GACvDvB,EAA8BoB,EAAOG,KAErCF,GAAiB,GACjBf,EAA0BkB,OAAOH,EAAe,OAOpE,OAAOf,GA7OX,SAAYpB,GASRA,EAAAA,EAAA,iBAWAA,EAAAA,EAAA,2BAUAA,EAAAA,EAAA,eAUAA,EAAAA,EAAA,qBAxCJ,CAAYA,IAAAA,EAAgC,KAmD5C,SAAYC,GASRA,EAAAA,EAAA,mBAUAA,EAAAA,EAAA,iBAnBJ,CAAYA,IAAAA,EAAuB,KA8BnC,SAAYC,GASRA,EAAAA,EAAA,eAUAA,EAAAA,EAAA,yBAUAA,EAAAA,EAAA,uBAUAA,EAAAA,EAAA,iBAUAA,EAAAA,EAAA,mBAjDJ,CAAYA,IAAAA,EAAoB,KC1EhC,IAAqBqC,EAArB,cAA2CzF,EAAAA,cAevCrN,YAAYkN,GACR6F,MAAM7F,GAfO,KAAA8F,iBAA2B,gBAsH3B,KAAAC,SAAYC,IACzBA,EAAEC,iBACFD,EAAEE,kBAEF,MAAMC,EAASH,EAAEI,cACXC,EAAWF,EAAOG,aAAa,SAAUpF,SAAS,6BAClDqF,EAAkBF,OAAWhR,EAAY3B,KAAK8S,0BAA0BL,GAE1EzS,KAAKsM,MAAMyG,iBACX/S,KAAKsM,MAAMyG,gBAAgB,CACvBJ,SAAAA,EACAK,YAAaP,EACbQ,cAAeJ,EACfK,gBAAiBT,EAAOU,eAnHhCnT,KAAKoT,SAAUC,EAAAA,EAAAA,kBAAiB,QAASrT,KAAKsM,MAAMgH,iBAAmB,IAZjE,0BACN,MAAM,gBAAEC,GAAoBvT,KAAKsM,MACjC,OAAOiH,EAAgBlT,KAAKwS,IACjB,CACH7J,IAAKhJ,KAAKwT,uBAAuBX,GACjCY,MAAOZ,MAUZa,SACH,MAAM,aAAEC,EAAY,MAAEC,EAAK,WAAEC,EAAU,gBAAEC,EAAe,eAAEC,GAAmB/T,KAAKsM,MAC5E0H,EAAQhU,KAAKiU,oBACnBjU,KAAKoT,QAAQc,cAAcC,MAAQR,EACnC,MAAMS,GAAqBC,EAAAA,EAAAA,wBAAuBrU,KAAKsM,MAAMgH,iBAAmBtT,KAAKoT,SACrF,OACI3G,EAAAA,cAAA,OAAKC,UAAU,sBACVsH,EAAMlR,OAAS,GAAK8Q,GAASnH,EAAAA,cAAA,QAAMC,UAAU,6BAA6BkH,GAC3EnH,EAAAA,cAAA,MAAIC,UAAW4H,GAAAA,CAAWT,EAAY,2BAA4B,kBAC7DG,EAAM3T,KAAI,CAACsM,EAAmB/B,KAC3B,MAAM2J,EAAgB,CAClB,gBAAiB3J,EACjB,eAAgBoJ,EAAMlR,QAG1B9C,KAAKoT,QAAQc,cAAcC,MAAQxH,EAAK3D,IACxC,MAAM3F,GAAYgR,EAAAA,EAAAA,wBAAuBrU,KAAKsM,MAAMgH,iBAAmBtT,KAAKoT,SAE5E,OACI3G,EAAAA,cAAA,KAAA+H,OAAA/G,OAAA,CAAIf,UAAU,gCAAgC1D,IAAK2D,EAAK3D,KAASuL,GAC7D9H,EAAAA,cAAA,IAAA+H,OAAA/G,OAAA,CACIf,UAAU,2BACVf,KAAM3L,KAAKsM,MAAMmI,WAAW9H,EAAK8G,OAAO,GAAM,aAClC,GAAG9G,EAAK3D,OAAO8K,IAC3B/G,QAAS/M,KAAKqS,SACdqC,KAAK,UACDrR,GAEHsJ,EAAK3D,IACNyD,EAAAA,cAAA,QACIC,UAAW,GAAG1M,KAAKoS,6CACnBsC,KAAK,SAAQ,aACDX,UAOnCC,EAAMlR,OAAS,GAAK6Q,GACjBlH,EAAAA,cAAA,IAAA+H,OAAA/G,OAAA,CACI9B,KAAM3L,KAAKsM,MAAMmI,WAAW,IAAI,GAChC/H,UAAU,iCACN0H,EAAkB,CACtBrH,QAAS/M,KAAKqS,WAEbsB,IAObH,uBAAuBnD,GAC3B,MAAM,aAAEsE,EAAY,uBAAEC,EAAsB,iBAAEC,EAAgB,UAAEzL,GAAcpJ,KAAKsM,MAC7EwI,EAAgBH,GAAgB,MAChCI,EAAcH,EACpB,IAcII,EAdAC,EAAc,GAClB,GAAIJ,GAAoBA,EAAiBtE,KAAM,CAC3C,MAAM2E,EAASL,EAAiBtE,MAC3B4E,KACKA,EAAUvD,OAAOrB,MAAMkD,GAA+BhD,EAA8BgD,EAAOpD,OAGhG6E,EAGDD,EAAcC,EAAOE,SAAW,GAFhChM,EAAUC,QAAQ,oEAe1B,OAPI2L,EADAlF,EAAYO,EAAoBM,eACboE,EACd1H,QAAQ,MAAOrN,KAAKqV,aAAahF,EAAoB7P,qBAAsB6P,EAAoBiF,WAC/FjI,QAAQ,MAAOrN,KAAKqV,aAAahF,EAAoB5P,sBAAuB4P,EAAoBiF,WAElFjF,EAAoBkF,+BAAiClF,EAAoB7P,sBAAwB,GAGjHsU,EAAczH,QAAQ,MAAO4H,GAAa5H,QAAQ,MAAO2H,GAG5DK,aAAaG,EAA4BC,GAC7C,IAAKD,IAAWC,EAEZ,OADAzV,KAAKsM,MAAMlD,UAAUW,MAAM,2CACpByL,GAAU,GAErB,IAAIxL,EAASwL,EAEb,IACIxL,EAAShK,KAAKsM,MAAM1I,QAAS8R,iBAAiBC,eAAevO,OAAOoO,GAASC,GAC/E,MAAOG,GACL5V,KAAKsM,MAAMlD,UAAUC,QAAQ,8BAA8BW,MAAW4L,KAG1E,OAAO5L,EAqBH8I,0BAA0BE,GAC9B,MAAMhJ,EAAShK,KAAKiU,oBAAoB1D,MACpCsF,IAAa7C,EAAY8C,aAAe9C,EAAY8C,YAAYC,UAAYF,EAAS7M,MAEzF,OAAQgB,GAAUA,EAAOyJ,YAAU9R,KAxI7ByN,EAAAA,EAAAA,IAAA,CAAT4G,EAAAA,IAAQ,wCALQ9D,GAAa9C,EAAAA,EAAAA,IAAA,CADjC6G,EAAAA,IACoB/D,G,kBCdd,MAAMgE,EAAwCC,IAAa,IAAZ,KAAEC,GAAMD,EAC1D,OACI1J,EAAAA,cAAA,QAAMC,UAAU,kDACZD,EAAAA,cAAA,MAAIC,UAAU,cAAY,IAAG0J,EAAI,OCYhCC,EAA8DF,IAOtE,IAPuE,QACxEnT,EAAO,QACPY,EAAO,cACP0S,EAAa,UACb/J,EAAS,iBACT+G,EAAgB,eAChB/Q,GACH4T,EACG,GAAgB,OAAZnT,EACA,OAAO,KAGX,MAAMuT,EAAcvT,EAAQoL,KACtBoI,EAAkBxT,GAAWA,EAAQM,SAAWN,EAAQM,SAAW,EACnEmT,GAAaC,EAAAA,EAAAA,uBAAsB1T,EAAQoL,MAAQ,GAAIoI,EAAiB5S,GAAWA,EAAQwJ,mBAAezL,GAC1GgV,GAAgBC,EAAAA,EAAAA,qBAAoB5T,EAAQ6T,OAAQjT,EAAQwJ,cAAcpM,eAAe1B,aACzFwX,EACFvU,GAAqC,iBAAnBA,EACZgK,EAAUwK,sCACVxK,EAAUyK,gCAGd5D,GAAUC,EAAAA,EAAAA,kBAAiB,QAASC,EAAmBiD,EAAcC,EAAgB5K,YAErFvI,GAAYgR,EAAAA,EAAAA,wBAAuBf,EAAmBF,GAC5D,OACI3G,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAAA,IAAA+H,OAAA/G,OAAA,CACI9B,KAAM8K,EACN1J,SAASkK,EAAAA,EAAAA,kBAAiB3D,EAAmBF,EAASpQ,EAAQoL,OAC1D/K,EAAS,cACDL,EAAQoL,OAEpB3B,EAAAA,cAAA,OAAKC,UAAU,0CAmB/B,SACI4J,EACAY,EACAC,EACAC,EACAT,EACA/S,GAEA,IAAKuT,IAAaD,IAAiBZ,EAC/B,OAAO,KAEX,MAAMe,EAAkB,CACpBnJ,IAAKiJ,EACLC,QAASA,GAAoB,IAE3BE,EAAa,CACfJ,aAAAA,EACAZ,cAAAA,EACAiB,YAAaZ,GAEjB,OAAOlK,EAAAA,cAAC+K,EAAAA,GAAKhD,OAAA/G,OAAA,GAAK4J,EAASC,EAAU,CAAEG,oBAAoB,QAAQzW,eAAgB4C,KAtClE8T,CACGpB,EACA1S,EAAQ+T,QAAQT,aAChBlU,EAAQkC,gBACRlC,EAAQoL,KACRuI,EACA/S,EAAQwJ,cAAcpM,kBAIlCyL,EAAAA,cAAA,OAAKC,UAAU,2CACXD,EAAAA,cAAA,KAAGC,UAAU,4CAA4CoK,IA8B7Cc,EA7BQ5U,MAAAA,OAAO,EAAPA,EAASoL,KA8BlC3B,EAAAA,cAAA,MAAIC,UAAU,kDAAkDkL,MAD3E,IAA4BA,GCvFrB,MAAMC,EAAwB1B,IAAA,IAAC,KAAEC,EAAI,UAAE1J,EAAS,KAAEf,EAAI,UAAEmM,GAAW3B,EAAA,OACtE1J,EAAAA,cAAA,KAAGC,UAAWA,EAAWf,KAAMA,EAAI,aAAcmM,GAC5C,IACA1B,EAAM,MCkBF2B,EAA4CzL,IACrD,MAAM,KAAE8J,EAAI,QAAErJ,EAAO,UAAE+K,EAAS,SAAEE,EAAQ,GAAEjS,GAAOuG,EACnD,OACIG,IAAAA,cAAA,UAAQ1G,GAAIA,EAAI2G,UAAU,aAAY,aAAaoL,EAAW/K,QAASA,EAASkL,IAAKD,GAChF5B,IAcP8B,EAAa5L,GAEXG,IAAAA,cAAC0L,EAAAA,MAAK,CACFC,WAAS,EACTC,gBAAgB,aAChBC,eAAgBhM,EAAMiM,UACtBC,OAAQlM,EAAMkM,OACdC,OAAQnM,EAAMoM,cACdhM,UAAU,0BACViM,OAAQ,OAKdC,EAAmBtM,GACdG,IAAAA,cAACoM,EAAAA,YAAW,CAACJ,OAAQnM,EAAMoM,eAAgBpM,EAAMC,UAAUuM,YAGhEC,EAAmBzM,GAEjBG,IAAAA,cAACuM,EAAAA,YAAW,KACRvM,IAAAA,cAACwM,EAAAA,OAAM,CAAClM,QAAST,EAAMoM,cAAehM,UAAU,iEAC3CJ,EAAMC,UAAU2M,uB,qECmBjC,MA6pBA,EA7pBmE5M,IAAQ,IAAA6M,EAAAC,EAAAC,EAAAC,EAAAC,EACvE,MAAM,KACFC,EAAI,QACJ5V,EAAO,cACP0S,EAAa,gBAKbmD,EAAe,qBACfC,EAAoB,UACpBC,EAAS,SACTC,EAAQ,GACR7T,EAAE,iBACFuN,EAAgB,gBAChBuG,EAAe,wBAIfC,EAAuB,MACvBC,GACAzN,EACEtJ,EAAUwW,EAAKxW,QASrB,SAASgX,EAAiBC,EAA+BC,EAA2BC,GAChF,MAAMC,EAAY,IAAIpO,IAAIiO,EAAuBC,EAAYvC,QAAQrY,YAAY+a,SAC7ED,EAAUE,OACVF,EAAUE,QAAU,IAAIH,IAExBC,EAAUE,QAAUH,EAIxB,OADmB,IAAInO,IAAIoO,EAAUzO,MACnB4O,SAAWH,EAAUE,OAQ3C,SAASE,EAA8BC,GAAiC,IAAAC,EACpE,IAAKD,IAAgBA,EAAYrX,gBAC7B,OAAO,KAGX,MAAMuX,EAAiBF,EAAYrX,gBAAgBmN,MAC/CqK,IAAc,IAAAC,EAAA,OAA0B,QAAtBA,EAAAD,EAAexF,eAAO,IAAAyF,OAAA,EAAtBA,EAAwBC,uBAAwBC,EAAAA,eAAeC,SAErF,IAAK9X,EAAAA,gBAAgBC,YAAYwX,MAAAA,OAAc,EAAdA,EAAgBM,UAC7C,OAAO,KAIX,OADoF,QAAjEP,EAAGC,EAAgBM,SAAS1K,MAAK5D,IAA2B,IAAnBA,EAAKuO,mBAAmB,IAAAR,EAAAA,EAAIC,EAAgBM,SAAS,GAsErH,IAAIxE,EAAazT,GAAU0T,EAAAA,EAAAA,uBAAkC,QAAbyC,EAACnW,EAAQoL,YAAI,IAAA+K,EAAAA,EAAI,GAAInW,EAAQM,SAAUM,EAAQwJ,mBAAezL,GAAa,GACvHgY,GAAalD,IACbA,EAAauD,EAAiBvD,EAAY7S,EAAS,cAEvD,MAAMuX,EAAsF,QAA7D/B,EAhE/B,SAAkDc,EAA2BO,GAGzE,GAFoBP,EACkCnW,IAAIrC,OAAO0Z,oCACvBL,EAAAA,eAAeM,KACrD,OAAOZ,MAAAA,OAAW,EAAXA,EAAavV,gBAExB,MAAMoW,EAAgBd,EAA8BC,GACpD,OAAOa,GAAiBpY,EAAAA,gBAAgBC,YAAYmY,EAAcC,mBAC5DC,EAAAA,EAAAA,kBAAiBF,EAAcC,iBAAiB,GAAIrB,EAAYvC,QAAQrY,aACxEmb,MAAAA,OAAW,EAAXA,EAAavV,gBAuDWuW,CAAyC7X,EAASZ,UAAQ,IAAAoW,EAAAA,EAAIpW,MAAAA,OAAO,EAAPA,EAASkC,gBACnGwW,EAA2F,QAAnErC,EA9C9B,SACIa,EACAzD,EACAgE,GAEA,MACMW,EADclB,EACkCnW,IAAIrC,OAAO0Z,kCAGjE,GAAI9O,EAAMyN,MAAO,KAAA4B,EAAAC,EAAAC,EACb,MAAMjR,EAAa5H,MAAAA,GAA4B,QAArB2Y,EAAP3Y,EAAS8Y,2BAAmB,IAAAH,OAAA,EAA5BA,EAA8B5J,WAAUgK,GAAe,yBAAVA,EAAEC,MAClE,GACIpR,GAAS,GAATA,MACA5H,GAAAA,EAAS8Y,sBACT9Y,MAAAA,GAA4B,QAArB4Y,EAAP5Y,EAAS8Y,2BAAmB,IAAAF,OAAA,EAA5BA,EAA8B9Y,QAAS,GACqB,MAA5DE,MAAAA,GAAmC,QAA5B6Y,EAAP7Y,EAAS8Y,oBAAoBlR,UAAM,IAAAiR,GAAO,QAAPA,EAAnCA,EAAqCI,aAAK,IAAAJ,OAAA,EAA1CA,EAA4CK,aAC9C,KAAAC,EACE,MAAMC,EAAqB,IAAIpQ,IAAIyK,EAAYyD,EAAYvC,QAAQrY,YAAY+a,SAE/E,OADA+B,EAAmBlR,aAAaM,IAAI,SAAUxI,MAAAA,GAAmC,QAA5BmZ,EAAPnZ,EAAS8Y,oBAAoBlR,UAAM,IAAAuR,GAAO,QAAPA,EAAnCA,EAAqCF,aAAK,IAAAE,OAAA,EAA1CA,EAA4CD,aACnFE,EAAmB7B,SAAW6B,EAAmB9B,OAG5D,GAAIhO,EAAM+P,WAAY,CAClB,MAAMD,EAAqB,IAAIpQ,IAAIyK,EAAYyD,EAAYvC,QAAQrY,YAAY+a,SAE/E,OADA+B,EAAmBlR,aAAaM,IAAI,SAAUc,EAAM+P,YAC7CD,EAAmB7B,SAAW6B,EAAmB9B,QAIhE,GAAIc,IAAsCL,EAAAA,eAAeM,KACrD,OAAO5E,EAEX,MAAM6E,EAAgBd,EAA8BC,GACpD,OAAKa,GAAkBA,EAAcgB,YAK9BtC,EAAiBvD,EAAYyD,EADhB,SAASoB,EAAcgB,eAHhC7F,EAYkB8F,CAAmC3Y,EAAS6S,EAAYzT,UAAQ,IAAAqW,EAAAA,EAAI5C,GAC9F+F,EAAiBd,EAA0Be,IAAqBC,EAAAA,EAAAA,aAChEC,EAAkBxB,EAA2ByB,IAAsBF,EAAAA,EAAAA,aACnEG,IAAuBH,EAAAA,EAAAA,UAAS,IAAII,EAAAA,YAErCxX,EAAmB1B,EAAQG,IAAIrC,OAAO4D,iBACtCyX,EAAwB,CAC1BjE,WAAY,oBACZkE,gBAAiB,0BACjBtN,SAAUpD,MAAAA,GAAa,QAARgN,EAALhN,EAAO5K,cAAM,IAAA4X,OAAA,EAAbA,EAAe5J,UAQvBuN,EAAwBxQ,IAAAA,aAC1B,CAACyN,EAA2BgD,KACxB,MAAMC,EAAgBD,EAAWC,cAEjC,GADAN,EAAoBO,SAASD,EAAeD,GACxCG,EAAAA,iBAAiBC,mBAAmBJ,EAAWzJ,OAC/C,OAEJ,MAAM0G,EAAc,GAAGgD,KAAiBD,EAAWzJ,QACnD,IAAI8J,EAA2B,GAC/B,GAAIf,EAAehP,SAAS2P,GAAgB,CACxC,MAAMK,EAAS,IAAIxR,IAAIwQ,EAAgBtC,EAAYvC,QAAQrY,YAAY+a,SACvEmD,EAAOtS,aAAaC,OAAOgS,GAC3BI,EAA2BvD,EAAiBwD,EAAO5R,WAAYhI,EAASuW,QAExEoD,EAA2BvD,EAAiBwC,EAAgB5Y,EAASuW,GAGzE,GADAsC,EAAkBc,GACdJ,IAAkBpC,EAAAA,eAAeC,MAAO,CACxC,MAAMyC,EAAwBva,EAAAA,gBAAgBC,YAAY+Z,EAAWQ,kBAC/DR,EAAWQ,iBAAiB,QAC5B/b,EACAqD,GAAcwW,EAAAA,EAAAA,kBAAiBiC,EAAuBvD,EAAYvC,QAAQrY,aAChFsd,EAAmB5X,MAG3B,CAAC6X,EAAqBjZ,EAAS4Y,IAGnC,IAAKxZ,EACD,OAAO,KAGX,MAAM2a,EAAcza,EAAAA,gBAAgB0a,YACT,QADoBrE,EAC3CvW,EAAQI,uBAAe,IAAAmW,OAAA,EAAvBA,EAAyBlZ,KAAIsM,IAAO,IAAAkR,EAAAC,EAAAC,EAAAC,EAChC,MAAMC,EAAsD,QAApCJ,EAAe,QAAfC,EAAGnR,EAAKyI,eAAO,IAAA0I,OAAA,EAAZA,EAAchD,2BAAmB,IAAA+C,EAAAA,EAAI,GAMhE,KAL8BK,EAAAA,EAAAA,8BAC1BD,EACAra,EACAua,EAAAA,4BAA4BC,aAG5B,OAAO,KAGX,MACMhD,EADcxX,EACkCG,IAAIrC,OAAO0Z,kCAE3D+B,EAAgBc,EAChBI,EAgBA,QAhBQN,EACG,QADHC,EACVrR,EAAKsO,gBAAQ,IAAA+C,OAAA,EAAbA,EAAe3d,KAAiB6c,IAAa,IAAAoB,EAAAC,EAAAC,EAAAC,EACzC,MAAO,CACHrc,OAAQ,GAAgB,QAAhBkc,EAAG3R,EAAKrJ,gBAAQ,IAAAgb,EAAAA,EAAI,MAAML,KAA4C,QAA1BM,EAAIrB,EAAWZ,mBAAW,IAAAiC,EAAAA,EAAI,KAClF9K,MAA6B,QAAxB+K,EAAEtB,EAAWZ,mBAAW,IAAAkC,EAAAA,EAAI,GACjCrB,cAAAA,EACAuB,aAAcxB,EAAWyB,mBACzBxH,SAAU+F,EAAW0B,eACrBlB,iBAAkBR,EAAW3B,iBAC7BsD,UAAW3B,EAAWhC,UACtB4D,WACIxZ,IACAwU,MAAAA,GAEC,QAFsB2E,EAAvB3E,EAAyBvJ,MACrBwO,IAAqB,IAAAC,EAAA,OAAID,EAAsBtL,SAAiC,QAA5BuL,EAAM9B,EAAWZ,mBAAW,IAAA0C,EAAAA,EAAI,cACvF,IAAAP,OAAA,EAFDA,EAEGK,uBAEb,IAAAf,EAAAA,EAAI,GASV,OAPI3C,IAAsCL,EAAAA,eAAeM,MACrDnY,EAAAA,gBAAgBC,YAAYkb,KAC3BA,EAASY,MAAKC,GAAUA,EAAOL,aAChC1B,IAAkBpC,EAAAA,eAAeC,QAEjCqD,EAAS,GAAGQ,WAAY,GAErB,CAAE5R,SAAUN,EAAKrJ,SAAU+a,SAAAA,OAKpCjL,GAAUC,EAAAA,EAAAA,kBAAiB,QAASC,EAAmB,GAAItQ,EAAQM,SAASsI,YAE5EvI,GAAYgR,EAAAA,EAAAA,wBAAuBf,EAAmBF,GA4F5D,SAAS+L,EAAmBC,EAAiBC,GACzC,GAAID,GAAUC,EAAqB,CAC/B,MAAMC,EAAgBF,EAAOG,QAAQ,GACrC,OAAOC,EAAAA,EAAAA,QAAOH,GAAuB,GAAIC,EAAe,KAE5D,MAAO,GASX,SAASG,EAAmBC,EAAsBC,GAC9C,OAAID,GAAeC,GACRH,EAAAA,EAAAA,QAAOG,GAA4B,GAAID,GAE3C,GAaX,SAASE,EACLC,EACAC,EACAV,EACAC,EACAK,EACAC,GAEA,MAAMI,EAA2BN,EAAmBC,EAAaC,MAAAA,EAAAA,EAA4B,IAC7F,MAAO,GAAGE,MAAAA,EAAAA,EAAQ,MAAMC,MAAAA,EAAAA,EAAS,MAAMX,EAAmBC,EAAQC,KAC9DU,EAA2B,IAAIA,IAA6B,KA6OpE,OACItT,IAAAA,cAAAA,IAAAA,SAAA,KAOIA,IAAAA,cAAA,OAAKC,UAAU,0BACXD,IAAAA,cAAA,KAAGd,KAAM6Q,EAAgBwD,IAAI,aAAatT,UAAU,qBAAqB+F,OAAQsH,EAAQ,SAAW,SAChGtN,IAAAA,cAAA,wBAAoB,GAAGC,UAAU,uBAC5B1J,EAAQoL,KACT3B,IAAAA,cAAA,0BAAsB,GAAGC,UAAU,iDA7GvD,SAAqC1J,GACjC,OACIyJ,IAAAA,cAAA,IAAA+H,OAAA/G,OAAA,CACI9B,KAAM6Q,EACNzP,SAASkK,EAAAA,EAAAA,kBAAiB3D,EAAmBF,EAASpQ,EAAQoL,MAAM,aACxDwR,EACR5c,EAAQoL,KACRxK,EAAQ8R,iBAAiBC,eAAe3S,EAAQid,OAChDjd,EAAQkd,cACRzG,EACAzW,EAAQmd,aACRzG,IAEArW,EAAS,CACbqJ,UAAU,2BAEVD,IAAAA,cAAC2T,EAAAA,IAAe,CAACC,KAAM,MA8FVC,CAA4Btd,MAIzCyJ,IAAAA,cAAA,OAAKC,UAAU,8BACXD,IAAAA,cAAA,OAAKC,UAAU,SACXD,IAAAA,cAAA,yBAAqB,GAAGC,UAAU,kBAlPtD,SACI6T,EACArJ,EACAC,EACAqJ,EACApJ,EACApW,GAEA,IAAKmW,IAAaD,IAAiBqJ,EAC/B,OAAO,KAGX,MAAME,EAAoB,CACtBvS,IAAKiJ,EACLC,QAASA,GAAoB,GAC7BG,YAAaiJ,GAEXlJ,EAA0B,CAAEJ,aAAAA,GAIlC,OAHAI,EAAWJ,aAAeA,EAC1BI,EAAWhB,cAAgBiK,EAC3BjJ,EAAWhB,cAAcoK,iBAAkB,EACpCjU,IAAAA,cAAC+K,EAAAA,GAAKhD,OAAA/G,OAAA,GAAKgT,EAAWnJ,EAAU,CAAEG,oBAAoB,QAAQzW,eAAgBA,KA8NhE0W,CACGpB,EACA1S,EAAQ+T,QAAQT,aAChByF,EACA3Z,EAAQkC,gBACRlC,EAAQoL,KACRxK,EAAQwJ,cAAcpM,kBAIlCyL,IAAAA,cAAA,OAAKC,UAAU,uBACXD,IAAAA,cAAA,yBAAqB,GAAGC,UAAU,+BAC9BD,IAAAA,cAAA,SACKzJ,EAAQqL,YAAcrL,EAAQqL,YAAc,kCAC7C5B,IAAAA,cAAA,WAAM,QAMtBA,IAAAA,cAAA,OAAKC,UAAU,uBACXD,IAAAA,cAAA,OAAKC,UAAU,6BAvFV,QAAbiU,EAACnH,EAAKxW,eAAO,IAAA2d,GAAZA,EAAcvd,gBAKZqJ,IAAAA,cAAA,OAAKC,UAAU,sBAG1B,SAAwB1J,GAEpB,OAAOA,MAAAA,OAAO,EAAPA,EAASI,gBAAgBkG,QAC5B,CAACjG,EAAgBuH,IAAkC,sBAAnBvH,EAAU+K,MAAmD,aAAnB/K,EAAU+K,OACtF/N,KAAI,CAACgD,EAAgBuH,IAEf6B,IAAAA,cAAA,OAAKzD,IAAK4B,EAAO8B,UAAU,2BACtBrJ,EAAUG,UAAUod,MAAM,KAAK,MAVAC,CAAerH,EAAKxW,UAHrDyJ,IAAAA,cAAA,OAAKC,UAAU,uBAuFR1J,EAAQoL,KAAmC,KAlXxDlL,EAAAA,gBAAgBC,YAAYwa,GAK7BlR,IAAAA,cAAA,OAAKC,UAAU,2BACViR,EAAYtd,KAAIsM,GAETF,IAAAA,cAACqU,EAAAA,gCAA+B,CAC5B9X,IAAK2D,EAAKM,SACVrJ,QAASA,EACTmd,kBAAmB9D,EACnBoB,SAAU1R,EAAK0R,cAXxB,KAkXK5R,IAAAA,cAAA,OAAKC,UAAU,mCACTqN,GAASF,GAAmB7W,EAAQM,UA1V9D,SAAyB0d,EAA4BrU,GACjD,GAAkB,OAAdqU,EACA,OAGJ,MAAMC,EAAyCpE,EAAoBqE,YAAY7gB,KAAsBge,IAC1F,CACH8C,oBAAoBC,EAAAA,EAAAA,4CAA2C/C,EAASlB,eACxEkE,eAAgB,CACZ/d,SAAU,EACV2Y,MAAOoC,EAAS5K,WAI5B,OAAOhH,IAAAA,aAAmBuU,EAAiC,CAAEM,kBAAmB3U,EAAMsU,mBAAAA,IA4UhBM,CAAgB1H,EAAiB7W,EAAQM,WACzFyW,GA1H1B,SAA4BzN,GACxB,MAAMkV,EACF/U,IAAAA,cAACgV,EAAAA,QAAkB,CACf/f,OAAQqb,EACRxQ,UAAWmV,EAAAA,GACX3d,IAAK,GACLH,QAASA,EACTwF,UAAWkD,MAAAA,OAAK,EAALA,EAAOgH,iBAClBqO,uBAAwB,SAASrV,GAC7B,MAAM,IAAI3J,MAAM,+BAEpBif,WAAY,SACRtV,GAEA,MAAM,IAAI3J,MAAM,+BAEpB6W,KAAMlN,EAAMkN,KACZqI,YAAa,GACbC,aAAc,GACd/b,GAAI,GACJ6T,SAAU,KAMlB,OAFA7S,QAAQC,IAAI,wBAAyBwa,GAE9BA,EAgGwBO,CAAmBzV,KAGtCG,IAAAA,cAAA,OAAKC,UAAU,8BACXD,IAAAA,cAAA,yBAAqB,GAAGC,UAAU,yBAC9BD,IAAAA,cAAA,0BAAsB,KAChB7I,EAAQG,IAAIrC,OAAOsgB,YApLjD,SACI9H,EACA+H,EACAC,EACAC,EACAC,EACAtK,GAMA,MAAMuK,GAAgBD,MAAAA,OAAY,EAAZA,EAAcxW,kBAAcjK,EAC5C0d,EAAsBF,EAAmBgD,EAAWrK,GACpD6H,EAA2BF,EAAmBrY,OAAOib,GAAgB3I,GAE3E,OACIjN,IAAAA,cAAC6V,EAAAA,gBAAe,CACZ1e,QAASsW,EACTnU,GAAImc,EACJtI,SAAUqI,EACVE,UAAYA,GAAY,EACxBI,YAAaF,EACbG,UAAQ,EACR1K,UAAWuH,EACX3F,qBAAsBiG,EACtBnG,KAAM,KA2JciJ,CAAa7e,EAASgW,EAAU7T,EAAI/C,EAAQkd,cAAeld,EAAQmd,aAAc1G,SApGjH,IAAgCkH,GCjmBpC,SAAS+B,EAAkB9c,EAAqD5C,GAC5E,IAAK4C,IAAoC1C,EAAAA,gBAAgBC,YAAYH,EAAQI,iBACzE,OAEJ,MAAMuf,EAAqB3f,EAAQI,gBAAgBmN,MAAKlN,GAAaA,EAAUC,WAAasC,IAC5F,OAAI+c,EACOA,EAAmBnf,eAD9B,EAMG,MAAMof,EAAgEzM,IAgBxE,IAhByE,SAC1ExS,EAAQ,QACRC,EAAO,cACP0S,EAAa,UACb/J,EAAS,WACTsW,EAAU,SACVX,EAAQ,oBACRY,EAAmB,iBACnBxP,EAAgB,cAChByP,EAAa,gCACbnd,EAA+B,qBAC/Bod,EAAoB,gCACpBC,EAA+B,SAC/BC,EAAQ,MACRnJ,EAAK,WACLsC,GACHlG,EACG,MAAMgN,EAA2C,CAC7CC,oBAAqB7W,EAAU8W,4BAGnC,OAAIH,EAEIzW,EAAAA,cAAA,MAAIC,UAAU,iCACT/I,EAAStD,KAAI,CAAC2C,EAA8B4H,IACzC6B,EAAAA,cAAA,MAAIC,UAAU,+BAA+B1D,IAAK4B,GAC9C6B,EAAAA,cAAC6W,EAAwB,CACrBvJ,MAAOA,EACPnW,QAASA,EACT0P,iBAAkBA,EAClBgD,cAAeA,EACfiN,cAAehX,EAAUiX,iBACzBC,kBAAmBlX,EAAUmX,yBAC7BC,iBAAkBpX,EAAUqX,wBAC5BnK,gBAAiBlN,EAAUsX,uBAC3BlK,UAAWmJ,EACX/c,GAAImc,EACJtI,SAAUiJ,EACVrJ,KAAM,CAAExW,QAAAA,GACR6W,gBAAiBkJ,EACjBe,eAAgBpB,EAAkB9c,EAAiC5C,GACnEggB,qBAAsBA,EACtBG,eAAgBA,EAChBrJ,wBAAyBmJ,MAAAA,OAA+B,EAA/BA,EAAiC1S,MACtDwO,GACI7b,EAAAA,gBAAgBC,YAAY4b,IAC5BA,EAAsB,GAAGgF,kBAAoB/gB,EAAQghB,kBAE7D3H,WAAYA,QAQ5B5P,EAAAA,cAAA,MAAIC,UAAU,iBACT/I,EAAStD,KAAI,CAAC2C,EAA8B4H,IACzC6B,EAAAA,cAAA,MAAIC,UAAU,iCAAiC1D,IAAK4B,GAChD6B,EAAAA,cAACwX,EAAAA,iBAAgB,CACbrgB,QAASA,EACT0P,iBAAkBA,EAClBgD,cAAeA,EACfiN,cAAehX,EAAUiX,iBACzBC,kBAAmBlX,EAAUmX,yBAC7BC,iBAAkBpX,EAAUqX,wBAC5BnK,gBAAiBlN,EAAUsX,uBAC3BlK,UAAWmJ,EACX/c,GAAImc,EACJtI,SAAUiJ,EACVrJ,KAAM,CAAExW,QAAAA,GACR6W,gBAAiBkJ,EACjBe,eAAgBpB,EAAkB9c,EAAiC5C,GACnEggB,qBAAsBA,EACtBG,eAAgBA,EAChBrJ,wBAAyBmJ,MAAAA,OAA+B,EAA/BA,EAAiC1S,MACtDwO,GACI7b,EAAAA,gBAAgBC,YAAY4b,IAC5BA,EAAsB,GAAGgF,kBAAoB/gB,EAAQghB,yB,qBCjFzF,IAAqBE,EAArB,cAA6CzX,EAAAA,UAWzCrN,YAAmBkN,GAA4B,IAAA6X,EAAAhO,EAAAiO,EAAAC,EAAAC,EAAAC,EAAAC,EAC3CrS,MAAM7F,GAXO,KAAAmY,6BAAoD,IAAIC,IA0IxD,KAAAC,UAAY,CAACC,EAAkBC,EAAkBC,IACvD,CACH,CACIC,QAAS,GAAGH,UACZI,YAAa,GAAGH,IAChBI,iBAAkB,SAEtB,CACIF,QAAS,GAAGH,QACZI,YAAa,GAAGF,IAChBG,iBAAkB,QAgBb,KAAAC,gBAAkB,CAC/BN,EACAO,EACAC,EACAC,EACAC,EACAC,EACAT,KACqB,IAAAU,EAAAC,EAErB,MAAO,CACH,CACI1f,GAAI,GAAG6e,IAAWO,uBAClB1R,MAAQ2R,GAAehe,OAAOge,IAJN,EAKxBtN,UAAW,GAA0C,QAA1C0N,EAAGxlB,KAAKsM,MAAMoZ,oCAA4B,IAAAF,EAAAA,EAAI,MAAMxlB,KAAK2lB,eACpEC,cAAe,GAAGP,KAEtB,CACItf,GAAI,GAAG6e,IAAWO,qBAClB1R,MAAOrM,OAAOke,IAAgBle,OAAO0d,GACrChN,UAAW,GAA0C,QAA1C2N,EAAGzlB,KAAKsM,MAAMuZ,oCAA4B,IAAAJ,EAAAA,EAAI,MAAMzlB,KAAK2lB,eACpEC,cAAe,GAAGL,OA7K1BvlB,KAAK8lB,eAAiB9lB,KAAK8lB,eAAeC,KAAK/lB,MAC/CA,KAAKgmB,kBAAoBhmB,KAAKgmB,kBAAkBD,KAAK/lB,MACrDA,KAAKimB,wBAA0BjmB,KAAKimB,wBAAwBF,KAAK/lB,MACjEA,KAAKkmB,WAAalmB,KAAKkmB,WAAWH,KAAK/lB,MACvCA,KAAKmmB,WAAanmB,KAAKmmB,WAAWJ,KAAK/lB,MACvCA,KAAKomB,iBAAmBpmB,KAAKomB,iBAAiBL,KAAK/lB,MACnDA,KAAKqmB,iBAAmBrmB,KAAKqmB,iBAAiBN,KAAK/lB,MAEnDA,KAAKsmB,SAAW7Z,EAAAA,YAChBzM,KAAKumB,SAAW9Z,EAAAA,YAEhB,MAAM,4BAAE+Z,GAAgCxmB,KAAKsM,MACvCma,EAA8D,QAApDtC,EAAGqC,MAAAA,OAA2B,EAA3BA,EAA6BhmB,4BAAoB,IAAA2jB,EAAAA,EAAI,IAClEuC,EAAaF,MAAAA,OAA2B,EAA3BA,EAA6B/lB,sBAC1CmkB,EAAW,UAAU+B,OAAO3mB,KAAKsM,MAAMkF,8BAA8BlO,aAAaqjB,OACpF3mB,KAAKsM,MAAM+D,oBAAoB9P,mBAE7BqmB,EAAW5mB,KAAKsM,MAAM+D,oBAAoB7P,qBAC1CqmB,EAAW7mB,KAAKsM,MAAM+D,oBAAoB5P,sBAC1CokB,EAAW7kB,KAAKqV,aAAauR,GAC7B9B,EAAW9kB,KAAKqV,aAAawR,GAC7BC,EAAyB9mB,KAAK2kB,UAAUC,EAAUC,EAAUC,GAC5DM,EACiH,QADtGjP,EAC+C,QAD/CiO,EACyB,QADzBC,EACbrkB,KAAKsM,MAAMka,mCAA2B,IAAAnC,OAAA,EAAtCA,EAAwC7jB,4BAAoB,IAAA4jB,EAAAA,EAAIpkB,KAAKsM,MAAM+D,oBAAoB7P,4BAAoB,IAAA2V,EAAAA,EAAI,IACrHmP,EAEkD,QAFvChB,EACgD,QADhDC,EACyB,QADzBC,EACbxkB,KAAKsM,MAAMka,mCAA2B,IAAAhC,OAAA,EAAtCA,EAAwC/jB,6BAAqB,IAAA8jB,EAAAA,EAC7DvkB,KAAKsM,MAAM+D,oBAAoB5P,6BAAqB,IAAA6jB,EAAAA,EACpDuC,EACExB,EAAmBrlB,KAAKqV,aAAa+P,GACrCG,EAAmBvlB,KAAKqV,aAAaiQ,GACrCyB,EAAkB/mB,KAAKsM,MAAM6Y,UAAY,IAAIwB,OAAO3mB,KAAKsM,MAAM6Y,aAAe,GAC9E6B,EAAoChnB,KAAKklB,gBAC3CN,EACAmC,EACA3B,EACAC,EACAC,EACAC,EACAT,GAEJ9kB,KAAKinB,MAAQ,CACTC,WAAW,EACXC,wBAAoBxlB,EACpBylB,wBAAoBzlB,EACpByjB,YAAaqB,EACbnB,YAAaoB,EACbW,YAAY,EACZC,YAAY,EACZ1C,SAAAA,EACAgC,SAAAA,EACAC,SAAAA,EACAC,OAAAA,EACAE,aAAAA,GA1DE,mBACN,OAAOhnB,KAAKsM,MAAM+D,oBAAoBiF,UAAY,GA6D/CiS,sBAAsBC,EAAkCC,GAC3D,OAAIznB,KAAKinB,QAAUQ,GAAaznB,KAAKsM,QAAUkb,EAM5CE,mBAAmBC,GAClBA,IAAkB3nB,KAAKsM,OACvBtM,KAAK4nB,oBAINlU,SACH,MAAM,oBAAErD,EAAmB,8BAAEmB,EAA6B,sBAAEqW,GAA0B7nB,KAAKsM,MAE3F,GAAK+D,GAAwBmB,EAO7B,MAA6B,UAAzBxR,KAAKsM,MAAMwb,UACJ9nB,KAAK+nB,qBAGT/nB,KAAKgoB,gBAVRH,EAAsBze,UAAUwM,MAC5B,kGAeJgS,oBAAiB,IAAAK,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACrB,MAAM1D,EAAW,UAAU+B,OAAO3mB,KAAKsM,MAAMkF,8BAA8BlO,aAAaqjB,OACpF3mB,KAAKsM,MAAM+D,oBAAoB9P,mBAE7BqmB,EAAW5mB,KAAKsM,MAAM+D,oBAAoB7P,qBAC1CqmB,EAAW7mB,KAAKsM,MAAM+D,oBAAoB5P,sBAC1CokB,EAAW7kB,KAAKqV,aAAauR,GAC7B9B,EAAW9kB,KAAKqV,aAAawR,GAC7BC,EAAyB9mB,KAAK2kB,UAAUC,EAAUC,EAAUC,GAC5DM,EACiH,QADtG6C,EAC+C,QAD/CC,EACyB,QADzBC,EACbnoB,KAAKsM,MAAMka,mCAA2B,IAAA2B,OAAA,EAAtCA,EAAwC3nB,4BAAoB,IAAA0nB,EAAAA,EAAIloB,KAAKsM,MAAM+D,oBAAoB7P,4BAAoB,IAAAynB,EAAAA,EAAI,IACrH3C,EAEkD,QAFvC8C,EACgD,QADhDC,EACyB,QADzBC,EACbtoB,KAAKsM,MAAMka,mCAA2B,IAAA8B,OAAA,EAAtCA,EAAwC7nB,6BAAqB,IAAA4nB,EAAAA,EAC7DroB,KAAKsM,MAAM+D,oBAAoB5P,6BAAqB,IAAA2nB,EAAAA,EACpDvB,EACExB,EAAmBrlB,KAAKqV,aAAa+P,GACrCG,EAAmBvlB,KAAKqV,aAAaiQ,GACrCyB,EAAkB/mB,KAAKsM,MAAM6Y,UAAY,IAAIwB,OAAO3mB,KAAKsM,MAAM6Y,aAAe,GAC9E6B,EAAoChnB,KAAKklB,gBAC3CN,EACAmC,EACA3B,EACAC,EACAC,EACAC,EACAT,GAEJ9kB,KAAKuoB,SAAS,CAAE3D,SAAAA,EAAUgC,SAAAA,EAAUC,SAAAA,EAAUC,OAAAA,EAAQE,aAAAA,IA8DlDe,qBACJ,MAAM,WAAEjJ,EAAU,8BAAEtN,EAA6B,sBAAEqW,GAA0B7nB,KAAKsM,OAC5E,YAAE8Y,EAAW,YAAEE,EAAW,WAAE+B,EAAU,WAAEC,EAAU,mBAAEH,EAAkB,mBAAEC,GAAuBpnB,KAAKinB,MAGpGuB,EAAY,CACd,cAFoBX,EAAsBY,iBAAmB,OAAOpb,QAAQ,MAAOmE,EAA8B4D,SAAW,IAG5H,gBAAiB0J,GAOf4J,EAAoB,mEACtBvB,EAAqB,qCAAuC,IAE1DwB,EAAoB,mEACtBvB,EAAqB,qCAAuC,IAI1DwB,EAAuB5oB,KAAK6oB,2BAA2BzD,EAAaiC,EAAYF,GAChF2B,EAAuB9oB,KAAK6oB,2BAA2BvD,EAAagC,EAAYF,GACtF,OACI3a,EAAAA,cAAA,OAAA+H,OAAA/G,OAAA,CAAMf,UAAU,0CAA6C8b,GACzD/b,EAAAA,cAAA,SAAOC,UANW,8EAObmb,EAAsBkB,SACvBtc,EAAAA,cAAA,SACIC,UAAWgc,EACXM,SAAUhpB,KAAKkmB,WACf+C,QAASjpB,KAAKkmB,WACdgD,OAAQlpB,KAAKomB,iBACb3S,MAAOmV,EACP3Q,IAAKjY,KAAKsmB,YAGlB7Z,EAAAA,cAAA,SAAOC,UAhBW,8EAiBbmb,EAAsBsB,SACvB1c,EAAAA,cAAA,SACIC,UAAWic,EACXS,YAAaN,OAAuBnnB,EAAYkmB,EAAsBwB,mBACtEL,SAAUhpB,KAAKmmB,WACf8C,QAASjpB,KAAKmmB,WACd+C,OAAQlpB,KAAKqmB,iBACb5S,MAAOqV,EACP7Q,IAAKjY,KAAKumB,YAGjBY,GACG1a,EAAAA,cAAA,QAAMC,UAAU,wFACXya,GAGRC,GAAsBD,IAAuBC,GAC1C3a,EAAAA,cAAA,QAAMC,UAAU,wFACX0a,IAObY,gBACJ,MAAM,WAAElJ,EAAU,UAAEqG,GAAcnlB,KAAKsM,MACjCgd,EAAiB,CACnB,gBAAiBxK,GAGrB,OACIrS,EAAAA,cAAC8c,EAAAA,OAAM/U,OAAA/G,OAAA,CACHf,UAAU,mCACV1D,IAAKhJ,KAAKinB,MAAMrC,SAChBO,UAAWA,EACXpf,GAAI/F,KAAKinB,MAAMrC,SACf4E,QAAQ,EACRC,IAAMzpB,KAAKinB,MAAML,UAAYxf,OAAOpH,KAAKinB,MAAML,gBAAcjlB,EAC7D+nB,IAAM1pB,KAAKinB,MAAMJ,UAAYzf,OAAOpH,KAAKinB,MAAMJ,gBAAcllB,EAC7DgoB,KAAM,EACNC,YAAY,aACZ9C,OAAQ9mB,KAAKinB,MAAMH,OACnB+C,YAAU,EACVC,aAAW,EACX9C,aAAchnB,KAAKinB,MAAMD,aACzB+C,YAAa/pB,KAAKgmB,kBAClBgD,SAAUgB,GAAAA,CAAShqB,KAAK8lB,eAAgB,KACxCmE,kBAAmBjqB,KAAKimB,yBACpBqD,IAKRpD,WAAWgE,GACflqB,KAAKmqB,aAAaD,EAAO,OAGrB/D,WAAW+D,GACflqB,KAAKmqB,aAAaD,EAAO,OAGrBC,aAAaD,EAA2CE,GAC5D,MAAMC,EAAc,WAAWD,IACzBE,EAAa,UAAUF,IAC7BpqB,KAAKuoB,SAAS,CACV,CAAC8B,GAAcrqB,KAAKuqB,2BAA2BL,EAAMxX,cAAce,OACnE,CAAC6W,IAAa,IAIdlE,iBAAiB8D,GACrB,MAAMM,EAAmBxqB,KAAKuqB,2BAA2BL,EAAMxX,cAAce,OAC7EzT,KAAKuoB,SAAS,CACVnD,YAAaoF,EACbC,YAAY,IAEhB,MAAMnE,EAAWlf,OAAOojB,IAClB,SACFE,EAAQ,8BACRlZ,EAA6B,oBAC7BnB,EAAmB,sBACnBwX,EAAqB,4BACrBrB,GACAxmB,KAAKsM,MACHod,EAAOlD,GAA+BA,EAA4B/lB,4BAA0BkB,EAE5FgpB,EAASjB,EAAMtiB,OAAOsiB,QAAO/nB,EAEnC,OAAI0F,MAAMif,IACNtmB,KAAKuoB,SAAS,CAAEpB,mBAAoBU,EAAsB+C,qBAC1D5qB,KAAK6qB,OAAO,QACL,GAGP7qB,KAAK8qB,eAAexE,EAAUqE,IAC9BD,EAAS,CACLlZ,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbE,WAAYkV,EACZjV,SAAUsZ,KAEP,IAEX3qB,KAAK6qB,OAAO,QAEL,GAGHxE,iBAAiB6D,GACrB,MAAMa,EAAmB/qB,KAAKuqB,2BAA2BL,EAAMxX,cAAce,OAC7EzT,KAAKuoB,SAAS,CACVjD,YAAayF,EACbC,YAAY,IAEhB,MAAMzE,EAAWnf,OAAO2jB,IAClB,SACFL,EAAQ,8BACRlZ,EAA6B,oBAC7BnB,EAAmB,sBACnBwX,EAAqB,4BACrBrB,GACAxmB,KAAKsM,MACHmd,EAAOjD,GAA+BA,EAA4BhmB,sBAAyB,IAE3FyqB,EAAS7jB,OAAOqiB,GAEtB,OAAIpiB,MAAMkf,IACNvmB,KAAKuoB,SAAS,CAAEnB,mBAAoBS,EAAsB+C,qBAC1D5qB,KAAK6qB,OAAO,QACL,KAGP7qB,KAAK8qB,eAAeG,EAAQ1E,KACxBlW,EACAqa,EAAS,CACLlZ,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbE,WAAY6Z,EACZ5Z,SAAUkV,IAGdvmB,KAAK6qB,OAAO,QAET,GAMPA,OAAOT,GACX,MAAMnS,EAAoB,QAAdmS,EAAsBpqB,KAAKumB,SAAWvmB,KAAKsmB,SAEvD4E,YAAW,KACHjT,GAAOA,EAAIkT,SACXlT,EAAIkT,QAAQC,UAEjB,IAGCvC,2BACJhT,EACAwV,EACAC,GAEA,OAAID,GAAWC,QAAgC3pB,IAAbkU,EACvBA,EAEJ7V,KAAKqV,aAAaQ,GAGrBiV,eAAerB,EAAaC,GAChC,MAAM,sBAAE7B,GAA0B7nB,KAAKsM,MACvC,YAAY3K,IAAR+nB,MAIAD,EAAMC,KACN1pB,KAAKuoB,SAAS,CACVpB,mBAAoBU,EAAsB0D,qBAC1CnE,mBAAoBS,EAAsB0D,wBAEvC,IAMPlW,aAAaG,GAEjB,OADexV,KAAKsM,MAAM1I,QAAQ8R,iBAAiBC,eAAevO,OAAOoO,GAASxV,KAAK2lB,cAInF4E,2BAA2BtkB,GAE/B,MAAMulB,EAAapkB,OAAOnB,GAC1B,IAAKoB,MAAMmkB,GACP,OAAOvlB,EAKX,OAD4BjG,KAAKykB,6BAA6BgH,IAAIxlB,IACpCA,EAI1B6f,eAAe4F,GAEnB,GAA2C,cAAvCA,EAAyBC,UAA2B,CACpD,MAAM,SAAEjB,EAAQ,8BAAElZ,EAA6B,oBAAEnB,GAAwBrQ,KAAKsM,MAC1E+D,GAAuBqb,IACvBhB,EAAS,CACLlZ,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbE,WAAYsa,EAAyBE,gBACrCva,SAAUqa,EAAyBG,mBAGvC7rB,KAAK8rB,oBAAoBJ,KAK7B1F,kBAAkB0F,GACtB,MAAM,SAAEhB,EAAQ,8BAAElZ,EAA6B,oBAAEnB,GAAwBrQ,KAAKsM,MAC1E+D,GAAuBqb,IACvBhB,EAAS,CACLlZ,8BAAAA,EACAnB,oBAAAA,EACAa,aAAa,EACbE,WAAYsa,EAAyBE,gBACrCva,SAAUqa,EAAyBG,mBAGvC7rB,KAAK8rB,oBAAoBJ,IAIzBI,oBAAoBJ,GACxB,GAAIA,EAAyB3lB,GAAI,CAC7B,MAAML,EAAUqmB,SAASC,eAAe,GAAGN,EAAyB3lB,WAChEL,GACAwlB,YAAW,KACPxlB,EAAQ0lB,UACT,IAKPnF,wBAAwBgG,GAC5B,OAAOjsB,KAAKqV,aAAa,GAAG4W,QA3dtB7c,EAAAA,EAAAA,IAAA,CAAT4G,EAAAA,IAAQ,iCAPQkO,GAAe9U,EAAAA,EAAAA,IAAA,CADnC6G,EAAAA,IACoBiO,G,gRCKP,MAAOgI,UAAmBzf,EAAAA,UAKpCrN,YAAmBkN,GACf6F,MAAM7F,GA4IO,KAAA+F,SAAYC,IACzBA,EAAEC,iBAEF,MAAM,8BAAEf,EAA6B,oBAAEnB,EAAmB,4BAAEmW,GAAgCxmB,KAAKsM,MACjGvF,QAAQC,IAAI,uBAAwBwK,EAA+BnB,EAAqBmW,GACpFnW,IACArQ,KAAKsM,MAAMoe,SAAS,CAChBlZ,8BAAAA,EACAnB,oBAAAA,EACAa,aAAcsV,IAGlB0E,YAAW,KACPlrB,KAAKmsB,WAAWhB,SAAWnrB,KAAKmsB,WAAWhB,QAAQC,UACpD,KAzJPprB,KAAKqS,SAAWrS,KAAKqS,SAAS0T,KAAK/lB,MACnCA,KAAKinB,MAAQ,CACTC,YAAalnB,KAAKsM,MAAMka,6BAE5BxmB,KAAKmsB,WAAa1f,EAAAA,YAClBzM,KAAKoT,SAAUC,EAAAA,EAAAA,kBAAiB,QAASrT,KAAKsM,MAAMgH,iBAAmB,IAGpEiU,sBAAsBC,EAA6BC,GACtD,OAAIznB,KAAKinB,QAAUQ,GAAaznB,KAAKsM,QAAUkb,EAM5C9T,SAAM,IAAA0Y,EACT,MAAAC,EAcIrsB,KAAKsM,OAdH,WACFwS,EAAU,sBACV+I,EAAqB,8BACrBrW,EAA6B,oBAC7BnB,EAAmB,4BACnBmW,EAA2B,sBAC3B8F,EAAqB,4BACrBC,EAA2B,MAC3B3hB,EAAK,SACL4hB,EAAQ,SACR9B,EAAQ,QACR9mB,EAAO,iBACP0P,GAEH+Y,EADMI,GAAKC,EAAAA,EAAAA,GAAAL,EAAAM,GAEZ,IAAKtc,EAED,YADAwX,EAAsBze,UAAUwM,MAAM,sEAGrCvF,EAAoB7P,sBACrBqnB,EAAsBze,UAAUC,QAC5B,2DAA2DpH,KAAKO,UAAU6N,MAGlF,MAAMuc,EAAiBpb,EAA8BC,mBAAqBC,EAAAA,YAAYC,aACtF,IAAIkb,EAAoBD,EAAiB,gBAAkB,eAC3DC,EAAoB,0BAA0BA,IAC9C,MAAMzC,EAAYwC,EAAiB,QAAU,WACvC1F,IAAcV,EAEpB,GADAqG,EAAoB3F,EAAY,GAAG2F,YAA8BA,EAC7Drb,EAA8Bsb,cAAgBjd,EAAAA,qBAAqBkd,OACnE,OAAO/sB,KAAKgtB,cACR3c,EACAmB,EACA0V,EACAtjB,EACAgH,EACA0I,EACAgZ,EACAC,GAGRvsB,KAAKoT,QAAQc,cAAcC,MAAQ9D,EAAoBkF,+BAAiClF,EAAoB7P,qBAC5G,MAAM6C,GAAYgR,EAAAA,EAAAA,wBAAuBf,EAAmBtT,KAAKoT,SAC3D6Z,EAAuB5c,EAAoBkF,8BAC3ClF,EAAoBkF,8BAA8BqL,MAAM,MAChB,QAAxCwL,EAAA/b,EAAoB7P,4BAAoB,IAAA4rB,OAAA,EAAxCA,EAA0CxL,MAAM,OAAQ,GAE9D,OACInU,EAAAA,cAAA,MAAIC,UAAU,yBAAyB3G,GAAI,GAAGyL,EAA8B4D,WAAYxK,KACpF6B,EAAAA,cAAA,IAAA+H,OAAA/G,OAAA,CACIzE,IAAKwd,EAA8B,OAAS,QAC5CvO,IAAKjY,KAAKmsB,WACVxgB,KAAM3L,KAAKktB,iBACXC,SAAU,EACVpgB,QAAS/M,KAAKqS,SACd3F,UAAWmgB,EACXnY,KAAM0V,EAAS,iBACC5D,GACZnjB,EACAopB,GAEHzsB,KAAKotB,gBACN3gB,EAAAA,cAAA,QAAMC,UAAU,iCACXugB,EAAqB,IAAMA,EAAqB,QAClBtrB,IAA9B0O,EAAoB9B,OAAuB,KAAK8B,EAAoB9B,YAOjF6e,gBAAa,IAAAC,EAAAC,EAAAC,EACjB,MAAMld,EAAsBrQ,KAAKsM,MAAM+D,oBAEjC+F,EAAO/F,EAAoBkF,+BAAiClF,EAAoB7P,sBAAwB,GAExG2c,EAAsF,QAAzEkQ,EAAoD,QAApDC,EAAIttB,KAAKsM,MAAMkF,8BAA8B4D,eAAO,IAAAkY,OAAA,EAAhDA,EAAkDxS,2BAAmB,IAAAuS,EAAAA,EAAI,GAC1FG,GAAYnQ,EAAAA,iBAAiBC,mBAAmBjN,EAAoBsO,oBACpE8O,GAAYpQ,EAAAA,iBAAiBC,mBAAmBjN,EAAoBuO,gBAIpEjB,GAHiB6P,GAAYC,KAEbvP,EAAAA,EAAAA,8BAA6Bf,EAAend,KAAKsM,MAAM1I,SAEvE,CACI,CACIxB,OAAQ,GAAsC,QAAtCmrB,EAAGld,EAAoB9P,uBAAe,IAAAgtB,EAAAA,EAAI,MAAMpQ,KAAiB/G,IACzE3C,MAAO2C,EACP+G,cAAAA,EACAuB,aAAcrO,EAAoBsO,mBAClCxH,SAAU9G,EAAoBuO,sBAGtCjd,EAEN,OAAKgc,EAKDlR,EAAAA,cAACihB,EAAAA,gBAAe,CACZhhB,UAAU,iCACVpN,YAAaU,KAAKsM,MAAM1I,QAAQ+T,QAAQrY,YACxCquB,KAAMhQ,EACNiQ,oBAAoB,IARjB,KAaPV,iBACJ,MAAM,WAAEzY,EAAU,8BAAEjD,EAA6B,oBAAEnB,EAAmB,4BAAEmW,GAAgCxmB,KAAKsM,MAE7G,OAAI+D,EACOoE,EAAW,CACdjD,8BAAAA,EACAnB,oBAAAA,EACAa,aAAcsV,IAIf,GAqBHwG,cACJ3c,EACAmB,EACA0V,EACAtjB,EACAgH,EACA0I,EACAua,EACAC,GAEA,GAAIzd,EAAoB7P,qBAAsB,KAAA4jB,EAAA2J,EAC1C/tB,KAAKoT,QAAQc,cAAcC,MAAQ9D,EAAoBkF,8BACvD,MAAMlS,GAAYgR,EAAAA,EAAAA,wBAAuBf,EAAmBtT,KAAKoT,SAC3D4a,EAAgB5mB,OAAO6mB,SAAS5d,EAAoB7P,qBAAsB,IAC1E0tB,EAAgD,QAAnC9J,EAAGpkB,KAAKsM,MAAM6hB,6BAAqB,IAAA/J,OAAA,EAAhCA,EAAkC7T,MACpDkD,GAASA,EAAM9C,gBAAkBN,EAAoBM,gBAEnDyd,EAAiBhnB,OAAO6mB,UAASC,MAAAA,OAAa,EAAbA,EAAe1tB,uBAAwB,IAAK,IAC7E6tB,EAAyB,EAC/B,IAAIC,EAA+B,sBAE/BA,EADAN,EAAgBI,EACO,GAAGE,QACnBN,EAAgBI,EACA,GAAGE,UAEH,GAAGA,aAE9B,MAAMC,OAC4B5sB,IAA9B0O,EAAoB9B,OAAuB8B,EAAoB9B,QAAU8f,EACnEP,IAAkCtO,EAAAA,EAAAA,QAAOsO,EAAgCzd,EAAoB9B,OAC7Fsf,IAA4BrO,EAAAA,EAAAA,QAAOqO,EAA0Bxd,EAAoB9B,OAC3F,OACI9B,EAAAA,cAAA,MACIC,UAAU,yBACVgI,KAAO1U,KAAKsM,MAAMkiB,kBAAgC7sB,EAAjB,eACjCoE,GAAI,GAAGyL,EAA8B4D,WAAYxK,KAEjD6B,EAAAA,cAAA,IAAA+H,OAAA/G,OAAA,CACI9B,KAAM3L,KAAKktB,iBACXxY,KAAK,QAAO,eACEwS,EAAS,aACX,GAAG1V,EAA8B4D,WAAY/E,EAAoBkF,0DAC3EgZ,IACFxhB,QAAS/M,KAAKqS,UACVhP,GAEJoJ,EAAAA,cAAC6V,EAAAA,gBAAe,CACZ5V,UAAW4hB,EACXnM,UAAW6L,EACXzL,YAA8D,QAAnDwL,EAAE1d,EAAoBkF,qCAA6B,IAAAwY,EAAAA,EAAI1d,EAAoB7P,qBACtFiuB,WAAW,EACXjM,UAAQ,EACR1K,UAAU,GACVlU,QAASA,EACTmC,GAAI/F,KAAKsM,MAAM4V,SACftI,SAAU5Z,KAAKsM,MAAM2V,eACrBzI,KAAM,KAEV/M,EAAAA,cAAA,QAAMC,UAAU,8BAA6B,cAAc1M,KAAKsM,MAAMkiB,aAAe,YAAS7sB,QAC3DA,IAA9B0O,EAAoB9B,OAAuB,IAAI8B,EAAoB9B,c,gBCzNhG,MAAMmgB,UAAsBjiB,EAAAA,UAGxBrN,YAAYkN,GACR6F,MAAM7F,GAHF,KAAAqiB,aAAuB,EAK3B3uB,KAAK4uB,cAAgB5uB,KAAK4uB,cAAc7I,KAAK/lB,MAC7CA,KAAK6uB,iBAAmB7uB,KAAK6uB,iBAAiB9I,KAAK/lB,MAEnD,MAAM8uB,EAAa9uB,KAAKsM,MAAMyiB,wBAC9B/uB,KAAK2uB,aAAc,EAMnB3uB,KAAKinB,MAAQ,CACT+H,SAAUF,GAWXvH,sBAAsBC,EAAgCC,GACzD,OAAIznB,KAAKinB,QAAUQ,GAAaznB,KAAKsM,QAAUkb,EAM5CyH,2BACkC,KAAjCjvB,KAAKsM,MAAM4iB,mBACPlvB,KAAKinB,MAAM+H,WAAahvB,KAAKsM,MAAM4iB,mBACnClvB,KAAKuoB,SAAS,CAAEyG,SAAUhvB,KAAKsM,MAAM4iB,oBAK1Cxb,SACH,MAAM,wBAAEyb,EAAuB,sBAAEtH,GAA0B7nB,KAAKsM,MAQhE,GANAvF,QAAQC,IAAImoB,GAEPA,GACDtH,EAAsBze,UAAUwM,MAAM,wDAGtCuZ,EAAwBrC,cAAgBjd,EAAAA,qBAAqBkd,QAAU/sB,KAAKsM,MAAM1I,QAAQG,IAAIrC,OAAOsgB,WACrG,OAAO,KAGNhiB,KAAK2uB,aACN3uB,KAAKivB,2BAGTjvB,KAAK2uB,aAAc,EAMnB,OACIliB,EAAAA,cAAA,OAAKC,UAAW,gCAAgCyiB,EAAwB/Z,WACpE3I,EAAAA,cAACwM,EAAAA,OAAM,CACHvM,UAAW1M,KAAKinB,MAAM+H,SAAW,qCAAuC,sCAAqC,aACjGG,EAAwB/Z,SAAW,eAC/CrI,QAAS/M,KAAK6uB,iBAAgB,gBACf7uB,KAAKinB,MAAM+H,UAEW,aAApCG,EAAwB/Z,QAZbga,KACbpvB,KAAKsM,MAAM5K,OAAO2tB,iBAWiCD,GAAoBD,EAAwB/Z,SAGlG3I,EAAAA,cAAC6iB,EAAAA,SAAQ,CAAC9W,OAAQxY,KAAKinB,MAAM+H,SAAUO,QAAS,KAC3CvvB,KAAKwvB,kBAAkBL,KAMhCK,kBAAkBL,GACtB,OAAIrf,EAAYqf,EAAwBxe,eAC7B3Q,KAAKyvB,aAAaN,GAEtBnvB,KAAK0vB,yBAAyBP,GAGjCO,yBAAyBP,GAC7B,MAAM,WACFrQ,EAAU,sBACV+I,EAAqB,sBACrBsG,EAAqB,QACrBvqB,EAAO,sBACP0oB,EAAqB,4BACrBC,EAA2B,SAC3BoD,GACA3vB,KAAKsM,MAIHoI,EAFFya,EAAwB1d,mBAAqBC,EAAAA,YAAYC,cACzDwd,EAAwBrC,cAAgBjd,EAAAA,qBAAqBkd,OACnC,CAAErY,KAAM,mBAAiB/S,EACjDiuB,EAAoBT,EAAwBvd,QAAU,GACtDie,EAAYD,EAAkBvvB,KAAI,CAACwR,EAA4BjH,KACjE,IAAKiH,EAID,OAHAgW,EAAsBze,UAAUwM,MAC5B,6DAA6DuZ,EAAwB7rB,aAAa6rB,EAAwB/Z,YAEvH,KAGX,MAAMoR,EAA8BpW,EAAgCyB,EAAOsc,GAE3E,OACI1hB,EAAAA,cAACyf,EAAU,CACP1a,8BAA+B2d,EAC/B9e,oBAAqBwB,EACrB2U,4BAA6BA,EAC7B2H,sBAAuBA,EAAsB7kB,QAAOwmB,GAChDF,EAAkBrf,MAAKkD,GAASA,EAAMlT,kBAAoBuvB,EAAcvvB,oBAE5EsnB,sBAAuBA,EACvB6C,SAAU1qB,KAAK4uB,cACfna,WAAYzU,KAAKsM,MAAMmI,WACvBqK,WAAYA,EACZ9V,IAAK4B,EACLA,MAAOA,EACPhH,QAASA,EACTse,SAAUliB,KAAKsM,MAAM4V,SACrBD,eAAgBjiB,KAAKsM,MAAM2V,eAC3B3O,iBAAkBtT,KAAKsM,MAAMgH,iBAC7BgZ,sBAAuBA,EACvBC,4BAA6BA,EAC7BiC,aAAcmB,OAI1B,OACIljB,EAAAA,cAAA,KAAA+H,OAAA/G,OAAA,CACIf,UAAW,2BAA2ByiB,EAAwB/Z,WAC1DV,EAAI,cACIya,EAAwB/Z,UAEnCya,GAKLE,cAAcZ,GAClB,OACIA,EAAwBa,uBAAyBC,EAAAA,gBAAgBC,OACjEf,EAAwBa,uBAAyBC,EAAAA,gBAAgB1G,QACjE4F,EAAwBa,uBAAyBC,EAAAA,gBAAgBE,eAE1D,SAEJ,QAGHV,aAAaN,GACjB,MAAM,WACFrQ,EAAU,sBACV+I,EAAqB,sBACrBsG,EAAqB,QACrBvqB,EAAO,6BACP8hB,EAA4B,6BAC5BG,GACA7lB,KAAKsM,MAGHujB,GADoBV,EAAwBvd,QAAU,IACxBvR,KAAI,CAACwR,EAA4BjH,KACjE,IAAKiH,EAID,OAHAgW,EAAsBze,UAAUwM,MAC5B,4CAA4CuZ,EAAwB7rB,aAAa6rB,EAAwB/Z,YAEtG,KAGX,MAAMoR,EAA8BpW,EAAgCyB,EAAOsc,GAErErG,EAAY9nB,KAAK+vB,cAAcZ,GAC/BnmB,EAAMwd,EACN,GAAGA,EAA4BhmB,wBAAwBgmB,EAA4B/lB,wBACnF,gBAAgBmK,IACtB,OACI6B,EAAAA,cAAA,MAAIC,UAAW,sEAAoC1D,IAAK4B,GACpD6B,EAAAA,cAACyX,EAAe,CACZ1S,8BAA+B2d,EAC/B9e,oBAAqBwB,EACrB2U,4BAA6BA,EAC7BqB,sBAAuBA,EACvB6C,SAAU1qB,KAAK4uB,cACfna,WAAYzU,KAAKsM,MAAMmI,WACvBqK,WAAYA,EACZgJ,UAAWA,EACX9e,IAAKA,EACLmc,UAAWnc,EACXpF,QAASA,EACT8hB,6BAA8BA,EAC9BG,6BAA8BA,EAC9B3D,SAAUliB,KAAKsM,MAAM4V,SACrBD,eAAgBjiB,KAAKsM,MAAM2V,qBAK3C,OAAOxV,EAAAA,cAAA,MAAIC,UAAW,yCAAyCyiB,EAAwB/Z,WAAYya,GAG/FjB,cAAc/d,GAClB7Q,KAAKsM,MAAM8jB,iBAAiBvf,GAGxBge,mBACJ9nB,QAAQC,IAAI,cACZhH,KAAKuoB,UAAS8H,IAAa,CACvBrB,UAAWqB,EAAUrB,aAEzBhvB,KAAK2uB,aAAc,GAU3B,UCvRa2B,EAAkCna,IAAA,IAAC,UAAE5I,GAAW4I,EAAA,OAAK1J,EAAAA,cAAA,gBAAQc,EAAS,MCCtEgjB,GAA0Bpa,IAAA,IAAC,KAAEC,EAAI,UAAE1J,GAAWyJ,EAAA,OAAK1J,EAAAA,cAAA,QAAMC,UAAWA,GAAS,IAAI0J,EAAI,M,8nBCkKlG,IAAqBoa,GAAqBC,GAA1C,cAAmDhkB,EAAAA,cAkF/CrN,YAAmBkN,EAAsE2a,GACrF9U,MAAM7F,GA1EF,KAAAokB,oBAAqBC,EAAAA,GAAAA,IAAc3wB,KAAKsM,MAAM1I,SAC9C,KAAAgtB,sBAAuBC,EAAAA,GAAAA,IAAgB7wB,KAAKsM,MAAM1I,QAAQ+T,QAAQmZ,KAAKC,sBAA8B/wB,KAAKsM,MAAM1I,SAChH,KAAAotB,qCAA2CC,EAAAA,GAAAA,IAC/CC,EAAAA,GACAC,EAAAA,GACAnxB,KAAK4wB,qBACL5wB,KAAK0wB,mBACL1wB,KAAKsM,MAAM1I,SAGE,KAAAwtB,sBAAkD,CAC/D,CACIpoB,IAAKnB,EAAAA,YAAYC,0BACjB2L,MACiD,UAA7CzT,KAAKgxB,oCACChxB,KAAKsM,MAAMC,UAAU8kB,iCACrBrxB,KAAKsM,MAAMC,UAAUzE,2BAEnC,CACIkB,IAAKnB,EAAAA,YAAYS,qBACjBmL,MACiD,UAA7CzT,KAAKgxB,oCACChxB,KAAKsM,MAAMC,UAAU+kB,4BACrBtxB,KAAKsM,MAAMC,UAAUjE,sBAEnC,CACIU,IAAKnB,EAAAA,YAAYI,oBACjBwL,MACiD,UAA7CzT,KAAKgxB,oCACChxB,KAAKsM,MAAMC,UAAUglB,2BACrBvxB,KAAKsM,MAAMC,UAAUtE,qBAEnC,CACIe,IAAKnB,EAAAA,YAAYK,qBACjBuL,MACiD,UAA7CzT,KAAKgxB,oCACChxB,KAAKsM,MAAMC,UAAUilB,4BACrBxxB,KAAKsM,MAAMC,UAAUrE,sBAEnC,CACIc,IAAKnB,EAAAA,YAAYG,uBACjByL,MACiD,UAA7CzT,KAAKgxB,oCACChxB,KAAKsM,MAAMC,UAAUklB,8BACrBzxB,KAAKsM,MAAMC,UAAUvE,yBAQtB,KAAA0pB,UAAgC1xB,KAAKsM,MAAM1I,QAAQ+T,QAAQ1W,UAAU5B,SAa9E,KAAAsyB,mBAAyC,EAMhC,KAAAC,kBAAoB,EAuKpB,KAAAC,qBAAuBntB,MAAOotB,EAA8BnuB,KAAiD,IAAAouB,EAAAC,EACnG,aAAnBhyB,KAAK0xB,UACLI,EAAczyB,SAAW,WAEzByyB,EAAczyB,SAAW,SAG7B,IAmCI4yB,EAnCAC,EAA6B,GAE7BlyB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,OAASlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMa,UACrEmwB,EAAejwB,KAAKC,MAAMC,mBAAmBnC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMa,WAGlF+vB,EAAchjB,kBACT9O,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,QAAUlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMyG,MAAQ3H,KAAKsM,MAAM5K,OAAOgG,cAAgB,KAAQ,EAC7HoqB,EAAcjjB,eAAiB,CAAE7M,QAASkwB,GAC1CJ,EAAc9iB,SAAWhP,KAAKsM,MAAM5K,OAAOgG,cAAgB,GAC3DoqB,EAAcljB,eAAiBjL,EAASA,SACxCmuB,EAAcnjB,eAAgBnN,EAAAA,EAAAA,IAAuBxB,KAAKsM,MAAM1I,QAAQ+T,SACxEma,EAAc3iB,cAAgBnP,KAAKmyB,qBAAqBxuB,MAAAA,OAAQ,EAARA,EAAUA,SAAS,IAC3EmuB,EAAc/iB,kBAAoB/O,KAAKoyB,kBAAkBzuB,MAAAA,OAAQ,EAARA,EAAUA,SAAS,IAExEmuB,EAAcljB,eAAe9L,QAE5BgvB,EAAchjB,kBAAoB,IAAMgjB,EAAc9iB,UAAY,IAEnEhP,KAAKuoB,SAAS,CACV8J,mBAAmB,EACnBC,wBAAwB,EACxBC,wBAAwB,IAErBT,EAAcljB,eAAe9L,QAAUgvB,EAAchjB,kBAAoB,IAAMgjB,EAAc9iB,UAAY,KAC5GhP,KAAKinB,MAAMqL,wBACXtyB,KAAKuoB,SAAS,CACV8J,mBAAmB,EACnBC,wBAAwB,EACxBC,wBAAwB,IAOpC,MAAM,QAAE3uB,EAAO,KAAE4V,GAASxZ,KAAKsM,MAG3B2lB,EADAruB,GAAWA,EAAQ+T,SAAW/T,EAAQ+T,QAAQzW,OAAS0C,EAAQ+T,QAAQzW,MAAMmB,EAC/DuB,EAAQ+T,QAAQzW,MAAMmB,EAG/BmX,EAAK/Z,SAASuK,QACXymB,GAAsB+B,gBAAgB5uB,EAAQ+T,QAAQ9X,OAAQ2Z,EAAK/Z,SAASuK,OAAOyoB,mBACtFjZ,EAAK/Z,SAASuK,QAAUwP,EAAK/Z,SAASuK,OAAOoE,KAGtD,MAAMskB,GAAgBC,EAAAA,GAAAA,IAClB,CAAEltB,cAAezF,KAAKsM,MAAM1I,QAAQwJ,cAAewlB,YAAa,OAChE,CACIvsB,QAAS,CAAEC,UAA6C,QAApCyrB,EAAE/xB,KAAKsM,MAAM1I,QAAQ+T,QAAQkb,eAAO,IAAAd,OAAA,EAAlCA,EAAoCzuB,SAAUkD,UAAW,GAC/EG,mBAAmB,EACnBE,SAAoC,QAA5BmrB,EAAEhyB,KAAKsM,MAAM1I,QAAQ+T,eAAO,IAAAqa,OAAA,EAA1BA,EAA4BnyB,OACtC6G,WAAYorB,EAAcnjB,eAAiB,GAC3CzH,gBAAiB+qB,EACjBrrB,sBAAsB,IAGzBgC,MAAKkqB,IACF/rB,QAAQC,IAAI,4BAA6B8rB,GACzC9yB,KAAKuoB,SAAQxoB,GAAAA,GAAC,GAAKC,KAAKinB,OAAK,IAAE8L,qBAAsBD,QAExDE,OAAM1gB,IACHvL,QAAQ6O,MAAM,qBAAsBtD,MAGtC2gB,GAAeC,EAAAA,GAAAA,IAAwB,CAAEztB,cAAezF,KAAKsM,MAAM1I,QAAQwJ,cAAewlB,YAAa,QAAShqB,MAClHuqB,IACInzB,KAAKuoB,SAAQxoB,GAAAA,GAAC,GAAKC,KAAKinB,OAAK,IAAEmM,YAAaD,QAI9CE,EAAmCzvB,EAAQG,IAAIrC,OAAO4xB,wBACtDC,EAA8B3vB,EAAQG,IAAIrC,OAAO8xB,uBACvD,IAAIC,EAAqCC,QAAQC,UAE7CzwB,EAAAA,gBAAgBC,YAAYkwB,KAC3BA,EAAiC7lB,SAASuN,EAAAA,eAAeM,OAC1DnY,EAAAA,gBAAgBC,YAAYowB,KAC3BA,EAA4B/lB,SAASuN,EAAAA,eAAeM,OACrDrb,KAAKsM,MAAM5K,OAAO/B,oBAElB8zB,EAAqCzzB,KAAK4zB,wCAG1C9B,EAAcljB,eAAe9L,QAASgvB,MAAAA,OAAa,EAAbA,EAAe/iB,qBACjD/O,KAAKinB,MAAMqL,wBACXtyB,KAAKuoB,SAAS,CACV+J,wBAAwB,IAG5BtyB,KAAKinB,MAAMoL,mBACXryB,KAAKuoB,SAAS,CACV8J,mBAAmB,IAGvBryB,KAAKinB,MAAMsL,wBACXvyB,KAAKuoB,SAAS,CACVgK,wBAAwB,WAM9BmB,QAAQG,IAAI,CAACnB,EAAeO,EAAcQ,IAAqCT,OAAMc,IACvF/sB,QAAQC,IAAI8sB,EAAIC,aAqIP,KAAAC,yBAA4BC,IAEpCj0B,KAAKinB,MAAMqL,wBACR7lB,EAAAA,cAAA,OAAKC,UAAU,gCACXD,EAAAA,cAAA,UAAQM,QAAS/M,KAAKk0B,kBAAmBxnB,UAAU,iCACf,UAA/BunB,EACKj0B,KAAKsM,MAAMC,UAAU4nB,oBACrBn0B,KAAKsM,MAAMC,UAAU6nB,eAO9B,KAAAF,kBAAoBxvB,UAAW,IAAA2vB,EAAAC,EAC5C,MAAMxC,QAAsB9xB,KAAKsM,MAAMkN,KAAKsY,cAEtC7rB,EAAQ,IAAIpD,EAAAA,iCACdivB,EAAczyB,SACdW,KAAKsM,MAAM1I,QAAQ+T,QAAQrY,YAC3B,CACIW,OAAQ,CACJwH,IAAKzH,KAAKsM,MAAM5K,OAAOgG,cAAgB,GACvCE,KAAM5H,KAAKinB,MAAMsN,eAAiBv0B,KAAKsM,MAAM5K,OAAOgG,cAAgB,KAExEnC,OAAO,EACPpF,QAAS2xB,EAAcjjB,gBAAkB,IAE7CijB,EAAcnjB,eAAiB,KAC7B3O,KAAKsM,MAAM1I,QAAQ+T,QAAQ1W,UAAUmB,QAAU,GAEjDpC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,OAASlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EAC/DrC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EACjCJ,KAAKO,UAAU,CACXC,UAA2C,QAAlC4xB,EAAEr0B,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAmzB,OAAA,EAAhCA,EAAkC/xB,UAC7CI,eAAgD,QAAlC4xB,EAAEt0B,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAozB,OAAA,EAAhCA,EAAkC/xB,oBAEzDvC,KAAKsM,OAAStM,KAAKsM,MAAM5K,aAAkDC,IAAxC3B,KAAKsM,MAAM5K,OAAO/B,mBAAmCK,KAAKsM,MAAM5K,OAAO/B,mBAC7GK,KAAKsM,MAAM5K,OAAOG,mBAClB7B,KAAKsM,MAAM1I,QAAQ+T,QAAQ9X,SAE/B20B,EAAAA,EAAAA,SAAsBvuB,EAAOjG,KAAKsM,MAAM1I,QAAQwJ,eAAexE,MAAK6rB,IAAiB,IAAAC,EAAAC,EACjF7C,EAAc3iB,cAAgB,IAAI2iB,EAAc3iB,iBAAkBnP,KAAKmyB,qBAAqBsC,MAAAA,OAAc,EAAdA,EAAgB9wB,SAAS,KACrHmuB,EAAcljB,eAAiB,IAAIkjB,EAAcljB,kBAAmB6lB,EAAe9wB,UACnFmuB,EAAchjB,kBAC0B,OAApCgjB,EAAchjB,wBAAkEnN,IAApCmwB,EAAchjB,kBACpDgjB,EAAchjB,kBAAoB,EAClC,EAEN9O,KAAKsM,MAAM5K,OAAOkzB,+BAAgF,QAAnDF,EAAI10B,KAAKsM,MAAM1I,QAAQwJ,cAAcpM,sBAAc,IAAA0zB,GAAM,QAANA,EAA/CA,EAAiD5D,YAAI,IAAA4D,GAArDA,EAAuDG,iBAC1G70B,KAAK80B,kBAEgC,KAArCL,MAAAA,GAAwB,QAAVE,EAAdF,EAAgB9wB,gBAAQ,IAAAgxB,OAAA,EAAxBA,EAA0B7xB,SAC1B9C,KAAKuoB,SAAS,CAAEgK,wBAAwB,EAAMF,mBAAmB,EAAMC,wBAAwB,IAE/FR,EAAcljB,eAAe9L,QAAU9C,KAAKoyB,kBAAkBqC,MAAAA,OAAc,EAAdA,EAAgB9wB,SAAS,IACvF3D,KAAKuoB,SAAS,CACV+J,wBAAwB,EACxBC,wBAAwB,IAErBT,EAAcljB,eAAe9L,OAAS9C,KAAKoyB,kBAAkBqC,MAAAA,OAAc,EAAdA,EAAgB9wB,SAAS,KAE7F3D,KAAKuoB,SAAS,CACV+J,wBAAwB,EACxBC,wBAAwB,IAIhCxrB,QAAQC,IAAI,4BAA6B8qB,EAAcljB,mBAG3D5O,KAAKuoB,SAAS,CAAEgM,cAAev0B,KAAKinB,MAAMsN,eAAiBv0B,KAAKsM,MAAM5K,OAAOgG,cAAgB,OAOhF,KAAAqtB,mBAAqB,KAE7B/0B,KAAKinB,MAAMoL,mBACR5lB,EAAAA,cAAA,OAAKC,UAAU,0BACXD,EAAAA,cAAA,UAAQM,QAAS/M,KAAKg1B,qBAAsBtoB,UAAU,iCAA+B,cAQpF,KAAAsoB,qBAAuBtwB,UAAW,IAAAuwB,EAAAC,EAC/C,MAAMpD,QAAsB9xB,KAAKsM,MAAMkN,KAAKsY,cAEtC7rB,EAAQ,IAAIpD,EAAAA,iCACdivB,EAAczyB,SACdW,KAAKsM,MAAM1I,QAAQ+T,QAAQrY,YAC3B,CACIW,OAAQ,CACJwH,IAAKzH,KAAKsM,MAAM5K,OAAOgG,cAAgB,GACvCE,KAAM5H,KAAKinB,MAAMsN,eAAiBv0B,KAAKsM,MAAM5K,OAAOgG,cAAgB,KAExEnC,OAAO,EACPpF,QAAS2xB,EAAcjjB,gBAAkB,IAE7CijB,EAAcnjB,eAAiB,KAC7B3O,KAAKsM,MAAM1I,QAAQ+T,QAAQ1W,UAAUmB,QAAU,GAEjDpC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,OAASlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EAC/DrC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EACjCJ,KAAKO,UAAU,CACXC,UAA2C,QAAlCwyB,EAAEj1B,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAA+zB,OAAA,EAAhCA,EAAkC3yB,UAC7CI,eAAgD,QAAlCwyB,EAAEl1B,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAg0B,OAAA,EAAhCA,EAAkC3yB,oBAEzDvC,KAAKsM,OAAStM,KAAKsM,MAAM5K,aAAkDC,IAAxC3B,KAAKsM,MAAM5K,OAAO/B,mBAAmCK,KAAKsM,MAAM5K,OAAO/B,mBAC7GK,KAAKsM,MAAM5K,OAAOG,mBAClB7B,KAAKsM,MAAM1I,QAAQ+T,QAAQ9X,SAE/B20B,EAAAA,EAAAA,SAAsBvuB,EAAOjG,KAAKsM,MAAM1I,QAAQwJ,eAAexE,MAAK6rB,IAAiB,IAAAU,EAAAC,EACjFtD,EAAc3iB,cAAgB,IAAI2iB,EAAc3iB,iBAAkBnP,KAAKmyB,qBAAqBsC,MAAAA,OAAc,EAAdA,EAAgB9wB,SAAS,KACrHmuB,EAAcljB,eAAiB,IAAI6lB,EAAe9wB,UAClDmuB,EAAchjB,kBAC0B,OAApCgjB,EAAchjB,wBAAkEnN,IAApCmwB,EAAchjB,kBACpDgjB,EAAchjB,kBAAoB,EAClC,EAEN9O,KAAKsM,MAAM5K,OAAOkzB,+BAAgF,QAAnDO,EAAIn1B,KAAKsM,MAAM1I,QAAQwJ,cAAcpM,sBAAc,IAAAm0B,GAAM,QAANA,EAA/CA,EAAiDrE,YAAI,IAAAqE,GAArDA,EAAuDN,iBAC1G70B,KAAK80B,kBAEgC,KAArCL,MAAAA,GAAwB,QAAVW,EAAdX,EAAgB9wB,gBAAQ,IAAAyxB,OAAA,EAAxBA,EAA0BtyB,SAC1B9C,KAAKuoB,SAAS,CAAEgK,wBAAwB,EAAMF,mBAAmB,EAAMC,wBAAwB,IAEnGvrB,QAAQC,IAAI,4BAA6B8qB,EAAcljB,mBAG3D5O,KAAKuoB,SAAS,CAAEgM,cAAev0B,KAAKinB,MAAMsN,eAAiBv0B,KAAKsM,MAAM5K,OAAOgG,cAAgB,OAOhF,KAAA2tB,4BAA+BpB,IAEvCj0B,KAAKinB,MAAMsL,wBACR9lB,EAAAA,cAAA,OAAKC,UAAU,gCACXD,EAAAA,cAAA,UAAQM,QAAS/M,KAAKs1B,8BAA+B5oB,UAAU,iCAC3B,UAA/BunB,EACKj0B,KAAKsM,MAAMC,UAAU4nB,oBACrBn0B,KAAKsM,MAAMC,UAAU6nB,eAO9B,KAAAkB,8BAAgC5wB,UAAW,IAAA6wB,EAAAC,EACxD,MAAM1D,QAAsB9xB,KAAKsM,MAAMkN,KAAKsY,cACtC2D,EAAmB,IAAI3D,EAAcljB,gBACrC3I,EAAQ,IAAIpD,EAAAA,iCACdivB,EAAczyB,SACdW,KAAKsM,MAAM1I,QAAQ+T,QAAQrY,YAC3B,CACIW,OAAQ,CACJwH,IAAKzH,KAAKsM,MAAM5K,OAAOgG,aACvBE,KAAM5H,KAAKinB,MAAMsN,eAAiBv0B,KAAKsM,MAAM5K,OAAOgG,cAAgB,KAExEnC,OAAO,EACPpF,QAAS2xB,EAAcjjB,gBAAkB,IAE7CijB,EAAcnjB,eAAiB,KAC7B3O,KAAKsM,MAAM1I,QAAQ+T,QAAQ1W,UAAUmB,QAAU,GAEjDpC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,OAASlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EAC/DrC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EACjCJ,KAAKO,UAAU,CACXC,UAA2C,QAAlC8yB,EAAEv1B,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAq0B,OAAA,EAAhCA,EAAkCjzB,UAC7CI,eAAgD,QAAlC8yB,EAAEx1B,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAs0B,OAAA,EAAhCA,EAAkCjzB,oBAEzDvC,KAAKsM,OAAStM,KAAKsM,MAAM5K,aAAkDC,IAAxC3B,KAAKsM,MAAM5K,OAAO/B,mBAAmCK,KAAKsM,MAAM5K,OAAO/B,mBAC7GK,KAAKsM,MAAM5K,OAAOG,mBAClB7B,KAAKsM,MAAM1I,QAAQ+T,QAAQ9X,SAE/B20B,EAAAA,EAAAA,SAAsBvuB,EAAOjG,KAAKsM,MAAM1I,QAAQwJ,eAAexE,MAAK6rB,IAAiB,IAAAiB,EAAAC,EACjF7D,EAAc3iB,cAAgB,IAAI2iB,EAAc3iB,iBAAkBnP,KAAKmyB,qBAAqBsC,MAAAA,OAAc,EAAdA,EAAgB9wB,SAAS,KACrHmuB,EAAcljB,eAAiB,IAAI6mB,KAAqBhB,EAAe9wB,UAEnE3D,KAAKsM,MAAM5K,OAAOkzB,+BAAgF,QAAnDc,EAAI11B,KAAKsM,MAAM1I,QAAQwJ,cAAcpM,sBAAc,IAAA00B,GAAM,QAANA,EAA/CA,EAAiD5E,YAAI,IAAA4E,GAArDA,EAAuDb,iBAC1G70B,KAAK80B,kBAEgC,KAArCL,MAAAA,GAAwB,QAAVkB,EAAdlB,EAAgB9wB,gBAAQ,IAAAgyB,OAAA,EAAxBA,EAA0B7yB,SAC1B9C,KAAKuoB,SAAS,CAAEgK,wBAAwB,EAAMF,mBAAmB,EAAMC,wBAAwB,IAEnGvrB,QAAQC,IAAIytB,MAEhBz0B,KAAKuoB,SAAS,CAAEgM,cAAev0B,KAAKinB,MAAMsN,eAAiBv0B,KAAKsM,MAAM5K,OAAOgG,cAAgB,OAOhF,KAAAyqB,qBAAwByD,IACrC,GAAIA,GAAgBA,EAAa9Z,qBAAuB8Z,EAAa9Z,oBAAoB,GAAI,KAAA+Z,EACzF,MAAMjrB,EAAgD,QAA3CirB,EAAWD,EAAa9Z,2BAAmB,IAAA+Z,OAAA,EAAhCA,EAAkC9jB,WAAWgK,GAAqB,uBAAVA,EAAEC,MAChF,GAAIpR,GAAS,EAAG,KAAAkrB,EACZ,MAAMC,GAAgF,QAA7CD,EAAAF,EAAa9Z,oBAAoBlR,GAAOqR,aAAK,IAAA6Z,OAAA,EAA7CA,EAA+C5Z,cAAe,GACvG,IAAK6Z,EAID,OAH0C,IAAtC/1B,KAAKinB,MAAMsL,wBACXvyB,KAAKuoB,SAAS,CAAEgK,wBAAwB,IAErC,GAEX,MAAMyD,EAA4B/zB,KAAKC,MAAM6zB,GAC7C,GAAIC,EAAmBlzB,OAAS,EAI5B,OAHI9C,KAAKinB,MAAMsL,wBACXvyB,KAAKuoB,SAAS,CAAEgK,wBAAwB,IAErCyD,EAAmB1sB,QAAQqD,GACvBA,EAAKspB,YAAkC,OAApBtpB,EAAKspB,cAQ/C,OADAj2B,KAAKuoB,SAAS,CAAEgK,wBAAwB,IACjC,IAOM,KAAAH,kBAAqBwD,IAA8C,IAAAM,EAChF,MAAM3vB,EAA8C,QAArC2vB,EAAGl2B,KAAKsM,MAAM1I,QAAQ+T,QAAQkb,eAAO,IAAAqD,OAAA,EAAlCA,EAAoC5yB,SAEtD,GAAIsyB,GAAgBA,EAAa9Z,qBAAuB8Z,EAAa9Z,oBAAoB,GAAI,KAAAqa,EAEzF,MAAMvrB,EAAgD,QAA3CurB,EAAWP,EAAa9Z,2BAAmB,IAAAqa,OAAA,EAAhCA,EAAkCpkB,WAAWgK,GAAWA,EAAEC,KAAOzV,IACvF,GAAIqE,GAAS,EAAG,KAAAwrB,EACZ,MAAMC,GAAqE,QAA7CD,EAAAR,EAAa9Z,oBAAoBlR,GAAOqR,aAAK,IAAAma,OAAA,EAA7CA,EAA+CE,YAAa,EAC1F,GAAID,EAAgB,EAChB,OAAOA,GAInB,OAAO,GAOM,KAAAE,sBAAyB/lB,GAEM,IAAxCA,EAAoBjQ,iBACuB,IAA3CiQ,EAAoBE,oBACkB,IAAtCF,EAAoBG,cAQX,KAAA6lB,YAAc,KAC3B,GAAmC,KAA/Bx2B,KAAKinB,MAAMwP,gBACX,OAGJ,MAAM,KAAEjd,GAASxZ,KAAKsM,MAChBoqB,EAAuB,CACzBn2B,gBAAiB,EACjBoQ,cAAe,EACfnQ,qBAAsBR,KAAKinB,MAAMwP,gBACjCh2B,sBAAuBT,KAAKinB,MAAMwP,gBAClCnhB,SAAU,GACVqhB,UAAW,EACXpoB,MAAO,EACPgH,8BAA+B,GAC/BqhB,+BAAgC,GAChC9a,oBAAqB,GACrBpL,mBAAoB,EACpBkO,oBAAgBjd,EAChBgd,wBAAoBhd,EACpB,cAAe,sEAEnB3B,KAAKuoB,SAAS,CAAEkO,gBAAiB,KACjC,MAAM3lB,EAA6B0I,EAAKsY,cAAc9nB,QAAUwP,EAAKsY,cAAc9nB,OAAO2E,eAAkB,GAE5G,GAAImC,EAA0BhO,OAAS,EAAG,CACtC,MAAM+zB,EAAmB/lB,EAA0BiB,WAAWd,GAC1DjR,KAAKu2B,sBAAsBtlB,KAYxB,IAAA6lB,EARP,GAFA/vB,QAAQC,IAAI,mBAAoB6vB,IAEN,IAAtBA,EACA/lB,EAA0B+lB,GAAoBH,EAC9C3vB,QAAQC,IAAIhH,KAAKsM,MAAMkN,KAAKsY,gBAC5BiF,EAAAA,EAAAA,KAAY,KACR/2B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ8E,kBAAoB,EAC1D9O,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ2E,cAAgBmC,KAE1D7E,OAAO+qB,QAAQC,UAAU,GAAI,IAAInsB,EAAAA,EAAAA,KAAiBe,EAAAA,EAAAA,IAAc7L,KAAKsM,MAAM1I,QAAQ+T,SAAU7G,SAE1C,QAAnDgmB,EAAA92B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ2E,qBAAa,IAAAmoB,GAAnDA,EAAqD3yB,KAAKuyB,OAE3D,KAAAQ,EACgD,QAAnDA,EAAAl3B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ2E,qBAAa,IAAAuoB,GAAnDA,EAAqD/yB,KAAKuyB,KAcjD,KAAAS,mBAAqB,KAAU,IAAAC,EAC5C,OACI3qB,EAAAA,cAAA,OAAKC,UAAU,wCACXD,EAAAA,cAAA,QACI4qB,SAAU/kB,IACNA,EAAEC,kBAEN7F,UAAU,8CACVgI,KAAK,SAAQ,aACF,SACXmL,KAAK,cAELpT,EAAAA,cAAA,SACIuc,SAAUA,IAAMhpB,KAAKuoB,SAAS,CAAEkO,gBAAiBz2B,KAAKs3B,eAAenM,QAAQ1X,QAC7EwE,IAAKjY,KAAKs3B,eACV7jB,MAAOzT,KAAKinB,MAAMwP,gBAClBc,UAAWjlB,GAAe,UAAVA,EAAEtJ,KAAmBhJ,KAAKw2B,cAC1C9pB,UAAU,0BACV8qB,KAAK,OACLpO,aAA8B,QAAjBgO,EAAAp3B,KAAKsM,MAAM5K,cAAM,IAAA01B,OAAA,EAAjBA,EAAmBK,oBAAqB,mBAAkB,aAC5D,uBAEfhrB,EAAAA,cAAA,UACIM,QAASA,IAAM/M,KAAKinB,MAAMwP,iBAAmBz2B,KAAKuoB,SAAS,CAAEkO,gBAAiB,KAC9E/pB,UAAU,wCACV8qB,KAAK,SAAQ,aACF,WAEf/qB,EAAAA,cAAA,UACIM,QAAS/M,KAAKw2B,YACd9pB,UAAU,wCACV8qB,KAAK,SAAQ,aACF,qBAWd,KAAA5D,qCAAuClvB,UAA0B,IAAAgzB,EAAAC,EAC9E,MAAMC,EAAmE,QAAvDF,EAAuC,QAAvCC,EAAG33B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,cAAM,IAAA2tB,OAAA,EAApCA,EAAsC/oB,sBAAc,IAAA8oB,EAAAA,EAAI,GAEvEzU,QAAwC4U,EAAAA,EAAAA,wDAC1C,IAAIC,EAAAA,mDAAmDF,EAAc53B,KAAKsM,MAAM1I,SAChF5D,KAAKsM,MAAM1I,QAAQwJ,eAGnBlK,EAAAA,gBAAgBC,YAAY8f,IAC5BjjB,KAAKuoB,SAAS,CAAEtF,gCAAAA,KAOP,KAAA6R,gBAAkBpwB,UAA0B,IAAAqzB,EAAAC,EACzD,MAAMJ,EAAmE,QAAvDG,EAAuC,QAAvCC,EAAGh4B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,cAAM,IAAAguB,OAAA,EAApCA,EAAsCppB,sBAAc,IAAAmpB,EAAAA,EAAI,GACvEp0B,QAAiBs0B,EAAAA,EAAAA,gCACnB,IAAIC,EAAAA,iCAAiCN,GACrC53B,KAAKsM,MAAM1I,QAAQwJ,sBAGKpN,KAAKsM,MAAMkN,KAAKsY,eAC9BljB,eAAiBjL,GAGlB,KAAAw0B,sBAAwB,KACrC,MAAM,UAAE5rB,GAAcvM,KAAKsM,MAC3B,MRx/B0BA,CAAAA,IACvB,CACH8rB,MAAOlgB,EAAU5L,GACjB+rB,YAAazf,EAAgBtM,GAC7BgsB,YAAavf,EAAgBzM,GAC7BisB,UAAW9rB,IAAAA,cAAC+rB,EAAAA,UAAS,CAAC9rB,UAAU,4BQm/BzB+rB,CAAkB,CACrBlsB,UAAW,CACP2M,qBAAsB3M,EAAUmsB,4BAChC5f,WAAYvM,EAAUuM,YAE1BN,OAAQxY,KAAKinB,MAAM0R,YACnBpgB,UAAWvY,KAAK44B,gBAChBlgB,cAAe1Y,KAAK64B,gBAIX,KAAAC,oBAAuBC,IAAwD,IAAAC,EAC5F,MAAM,KAAExf,EAAI,QAAE5V,EAAO,UAAE2I,GAAcvM,KAAKsM,MAE1C,IAAI2sB,EAAsC,GAEtCA,EADAr1B,GAAWA,EAAQ+T,SAAW/T,EAAQ+T,QAAQzW,OAAS0C,EAAQ+T,QAAQzW,MAAMmB,EAC3D,IAAIuB,EAAQ+T,QAAQzW,MAAMmB,KAGvCmX,EAAK/Z,SAASuK,QACXymB,GAAsB+B,gBAAgB5uB,EAAQ+T,QAAQ9X,OAAQ2Z,EAAK/Z,SAASuK,OAAOyoB,mBACtFjZ,EAAK/Z,SAASuK,QAAUwP,EAAK/Z,SAASuK,OAAOoE,KAEtD,MAAM8qB,EAA2C,QAAvBF,EAAQC,SAAe,IAAAD,OAAA,EAAfA,EAAiBpY,MAAM,KACzD,IACIuY,EADAC,EAAmB,GAEnB5f,EAAKsY,eAAiBtY,EAAKsY,cAAc9nB,aAA0DrI,IAAhD6X,EAAKsY,cAAc9nB,OAAO+E,kBAC7EoqB,EAAqB3f,EAAKsY,cAAc9nB,OAAO+E,kBACxCyK,EAAK7V,UAAY6V,EAAK7V,SAASqG,SACtCmvB,EAAqB3f,EAAK7V,SAASqG,OAAOzE,OAI1C6zB,EADAD,GAA6C,IAAvBA,EAEK,IAAvBA,GACM3Z,EAAAA,EAAAA,QACoC,UAAhCuZ,EAA0CxsB,EAAU8sB,wBAA0B9sB,EAAU+sB,iBACxFH,GAE4B,UAAhCJ,EACAxsB,EAAUgtB,kBACVhtB,EAAUitB,YAEDha,EAAAA,EAAAA,QACiB,UAAhCuZ,EAA0CxsB,EAAU8sB,wBAA0B9sB,EAAU+sB,iBACxF,GAeR,MAAO,CACHG,eAAgB,CAAE/sB,UAAW,qCAbhB9I,EAAQ+T,QAAQ+hB,kBAAoB,gBAAgB91B,EAAQ+T,QAAQ+hB,kBAAkBC,gBAAkB,MAcrH/hB,MAAO,CACHgiB,YAbJntB,EAAAA,cAAC8jB,GAAK,CACF7jB,UAAU,4CACV0J,KAAsC,UAAhC2iB,EAA0CxsB,EAAUstB,wBAA0BttB,EAAUutB,mBAY9FC,UATUd,GACdxsB,EAAAA,cAAC8jB,GAAK,CAAC7jB,UAAU,0CAA0C0J,KAAM8iB,EAAqB,IAAMA,EAAqB,KAS7Gc,WAPWvtB,EAAAA,cAAC8jB,GAAK,CAAC7jB,UAAU,2CAA2C0J,KAAMgjB,OAYxE,KAAAa,sBAAwB,KACrC,MAAM,KAAEzgB,GAASxZ,KAAKsM,MAChB4tB,EAAoB1gB,EAAK0gB,kBAAkBlwB,OAejD,MAAO,CACHmwB,2BAA4B,CAAEC,IAAK,MAAO1tB,UAAW,kDACrD2tB,sBAfAH,GACAA,EAAkB75B,KAAI,CAACoT,EAA8B7I,IAE7C6B,EAAAA,cAACoL,EAAI,CACD7O,IAAK4B,EACLwL,KAAM3C,EAAMrF,KACZ0J,UAAW,GAAG9X,KAAKsM,MAAMC,UAAU+tB,gCAAgC7mB,EAAMrF,OACzEzC,KAAM8H,EAAM8mB,QASxBC,2BAL0B/tB,EAAAA,cAAC6jB,EAAS,CAAC/iB,UAAU,QAStC,KAAAktB,oBAAsB,KACnC,MAAM,UAAEluB,GAAcvM,KAAKsM,MACrBouB,EAAiB16B,KAAK26B,+BAAiC36B,KAAKinB,MAAM2T,aAAaC,qBACrF,IAAIC,EAAkB96B,KAAKoxB,sBAEvBpxB,KAAKsM,MAAM1I,QAAQG,IAAIrC,OAAOsgB,aAC9B8Y,EAAkB96B,KAAKoxB,sBAAsB9nB,QAAOyxB,GAAyC,uBAAvBA,EAAe/xB,OAmBzF,MAAO,CACHgyB,iBAAkB,CAAEtuB,UAAW,gDAC/BuuB,eAlBAxuB,EAAAA,cAACyuB,EAAAA,gBAAe,CACZC,eAAe,uBACfC,UACiD,UAA7Cp7B,KAAKgxB,oCACCzkB,EAAU8uB,2BACV9uB,EAAU+uB,oBAEpBC,WAAW,yBACXC,kBAAkB,wBAClBC,YAAY,OACZC,gBAAiBZ,EACjBa,eAAgBjB,EAChBkB,eAAgB57B,KAAK67B,sBACrB5jB,IAAKjY,KAAK87B,+BASL,KAAAC,uBAAyB,KACtC,MAAM,OAAEr6B,EAAM,QAAEkC,EAAO,KAAE4V,EAAI,UAAEjN,GAAcvM,KAAKsM,MAC5CwlB,EAAgBtY,GAAQA,EAAKsY,eAAiBtY,EAAKsY,cAAc9nB,OACjEe,GAAUc,EAAAA,EAAAA,IAAcjI,EAAQ+T,SAChCjQ,EAAehG,EAAOgG,cAAgB,GACtCuD,EACF6mB,GAAqD,OAApCA,EAAchjB,kBACzBgjB,EAAchjB,mBAAqB9O,KAAKsM,MAAM5K,OAAOgG,cAAgB,IACpE1H,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,QAAUlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMyG,MAAS,EACpFq0B,EAAclK,GAAiBA,EAAc/iB,mBAAsB,EACnEktB,EAAe1vB,EAAU2vB,uBACzBC,EAAW5vB,EAAU6vB,mBAE3B,OAAIJ,GAAct0B,EACP,KAGP+E,EAAAA,cAAC4vB,EAAAA,uBAAsB,CACnB3vB,UAAU,yCACVgI,KAAK,aAAY,aACLnI,EAAU+vB,2BACtBnwB,IAAKpB,EAAQY,KACb4wB,IAAI,OACJvoB,MAAOgoB,EACPt0B,aAAcA,EACd80B,aAAcvxB,EACdgxB,aAAcj8B,KAAKy8B,YAAYR,GAC/BE,SAAUn8B,KAAK08B,YAAYP,GAC3BQ,kBAAmBV,EACnBW,cAAeT,EACf7oB,iBAAkBtT,KAAKsT,oBAKlB,KAAAupB,kBAAoB,KACjC,MAAM,OAAEn7B,EAAM,QAAEkC,EAAO,KAAE4V,EAAI,UAAEjN,GAAcvM,KAAKsM,MAC5CwlB,EAAgBtY,GAAQA,EAAKsY,eAAiBtY,EAAKsY,cAAc9nB,OACjEe,GAAUc,EAAAA,EAAAA,IAAcjI,EAAQ+T,SAChCjQ,EAAehG,EAAOgG,cAAgB,GACtCuD,EACF6mB,GAAqD,OAApCA,EAAchjB,kBACzBgjB,EAAchjB,mBAAqB9O,KAAKsM,MAAM5K,OAAOgG,cAAgB,IACpE1H,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,QAAUlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMyG,MAAS,EACpFq0B,EAAclK,GAAiBA,EAAc/iB,mBAAsB,EACnEktB,EAAe1vB,EAAU2vB,uBACzBC,EAAW5vB,EAAU6vB,mBAE3B,OAAIJ,GAAct0B,EACP,KAGP+E,EAAAA,cAAC4vB,EAAAA,uBAAsB,CACnB3vB,UAAU,yCACVgI,KAAK,aAAY,aACLnI,EAAU+vB,2BACtBnwB,IAAKpB,EAAQY,KACb4wB,IAAI,OACJvoB,MAAOgoB,EACPt0B,aAAcA,EACd80B,aAAcvxB,EACdgxB,aAAcj8B,KAAKy8B,YAAYR,GAC/BE,SAAUn8B,KAAK08B,YAAYP,GAC3BQ,kBAAmBV,EACnBW,cAAeT,EACf7oB,iBAAkBtT,KAAKsT,oBAKlB,KAAAwpB,uBAAyB,KACtC,MAAM,OAAEp7B,EAAM,QAAEkC,EAAO,KAAE4V,EAAI,UAAEjN,GAAcvM,KAAKsM,MAC5CwlB,EAAgBtY,GAAQA,EAAKsY,eAAiBtY,EAAKsY,cAAc9nB,OACjEe,GAAUc,EAAAA,EAAAA,IAAcjI,EAAQ+T,SAChCjQ,EAAehG,EAAOgG,cAAgB,GACtCuD,EACF6mB,GAAqD,OAApCA,EAAchjB,kBACzBgjB,EAAchjB,mBAAqB9O,KAAKsM,MAAM5K,OAAOgG,cAAgB,IACpE1H,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,QAAUlB,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMyG,MAAS,EACpFq0B,EAAclK,GAAiBA,EAAc/iB,mBAAsB,EACnEktB,EAAe1vB,EAAU2vB,uBACzBC,EAAW5vB,EAAU6vB,mBAE3B,OAAIJ,GAAct0B,EACP,KAGP+E,EAAAA,cAAC4vB,EAAAA,uBAAsB,CACnB3vB,UAAU,yCACVgI,KAAK,aAAY,aACLnI,EAAU+vB,2BACtBnwB,IAAKpB,EAAQY,KACb4wB,IAAI,OACJvoB,MAAOgoB,EACPt0B,aAAcA,EACd80B,aAAcvxB,EACdgxB,aAAcj8B,KAAKy8B,YAAYR,GAC/BE,SAAUn8B,KAAK08B,YAAYP,GAC3BQ,kBAAmBV,EACnBW,cAAeT,EACf7oB,iBAAkBtT,KAAKsT,oBAKlB,KAAAypB,eAAiB,KAC9B,MAAM,KAAEvjB,EAAI,QAAE5V,EAAO,OAAElC,GAAW1B,KAAKsM,MACjC0wB,EAAoBp5B,EAAQ+T,QAAQzW,OAAS0C,EAAQ+T,QAAQzW,MAAM+7B,WAAa,QAAU,SAC1FC,EACFl9B,KAAKsM,MAAM5K,OAAOG,oBAAsBqB,EAAAA,gBAAgBC,YAAYnD,KAAKinB,MAAMznB,UACzEQ,KAAKinB,MAAMznB,SAAS8J,QAAOhJ,GAChB4C,EAAAA,gBAAgBC,YAAY7C,EAAQsR,UAE/C4H,EAAKha,SAASwK,QACdwP,EAAKha,SAASwK,OAAOV,QAAOhJ,GACjB4C,EAAAA,gBAAgBC,YAAY7C,EAAQsR,UAGnDurB,EAAkB3jB,EAAKsY,cAAc9nB,QAAUwP,EAAKsY,cAAc9nB,OAAO2E,eAAkB,GACjG5H,QAAQC,IAAItF,GAEZ1B,KAAKo9B,uBAAuBF,GAAiBA,EAAcp6B,OAAQpB,EAAO+N,qBAC1E,MAAM4tB,EAAmBr9B,KAAK2xB,mBA+B9B,MAAO,CACH2L,oBAAqB,CAAE5wB,UAAW,2CAClC6wB,wBAAyB,CAAE7wB,UAAW,+CACtClN,SAhCA09B,GACAA,EAAc78B,KAAI,CAAC8uB,EAAmDvkB,IAE9D6B,EAAAA,cAACiiB,EAAa,CACVQ,kBAAmBlvB,KAAKinB,MAAMuW,kBAC9BvlB,IAAKjY,KAAKy9B,YACVtO,wBAAyBA,EACzBhB,sBAAuBgP,EACvBtV,sBAAuB7nB,KAAK09B,uBAC5BhY,6BAA8B1lB,KAAKsM,MAAMC,UAAUoxB,oCACnD9X,6BAA8B7lB,KAAKsM,MAAMC,UAAUqxB,oCACnD50B,IAAK4B,EACLwlB,iBAAkBpwB,KAAK69B,kBACvBppB,WAAYzU,KAAK89B,iBACjBhf,YAAY,EACZiQ,2BAA4BsO,GAAoBA,EAAmBzyB,GACnEoyB,kBAAmBA,EACnBp5B,QAASA,EACTse,SAAUliB,KAAKsM,MAAMvG,GACrBkc,eAAgBjiB,KAAKsM,MAAMsN,SAC3BtG,iBAAkBtT,KAAKsT,iBACvBgZ,sBAAuBtsB,KAAKsM,MAAMC,UAAUwxB,6BAC5CxR,4BAA6BvsB,KAAKsM,MAAMC,UAAUyxB,mCAClDrO,SAAU3vB,KAAK2vB,SACfjuB,OAAQA,QAYX,KAAAu8B,kBAAoB,KACjC,MAAM,UAAE1xB,EAAS,KAAEiN,EAAI,UAAEpQ,GAAcpJ,KAAKsM,MACtC4xB,EAAoB1kB,EAAKsY,cAAc9nB,QAAUwP,EAAKsY,cAAc9nB,OAAO2E,eAAkB,GACnG,OACIlC,EAAAA,cAACyF,EAAa,CACV2B,WAAW,gCACXF,aAAcpH,EAAU4xB,oBACxBvqB,MAAOrH,EAAU6xB,0BACjBrqB,eAAgBxH,EAAU8xB,sBAC1B9qB,gBAAiB2qB,EAEjBrpB,iBAAkB2E,EAAKha,SAASwK,OAChC2K,aAAcpI,EAAU+xB,oBACxB1pB,uBAAwBrI,EAAUgyB,8BAClCn1B,UAAWA,EACX2J,gBAAiB/S,KAAKw+B,iBACtB/pB,WAAYzU,KAAKy+B,iCACjB3qB,gBAAiBvH,EAAUmyB,uBAC3BprB,iBAAkBtT,KAAKsT,iBACvB1P,QAAS5D,KAAKsM,MAAM1I,WAKf,KAAA+6B,aAAgBnyB,IAA0C,IAAAoyB,EAAAC,EACvE,MAAM,cAAEvoB,EAAa,oBAAEwM,GAAwB9iB,KAAKsM,MAAM5K,QACpD,UAAE6K,GAAcvM,KAAKsM,MACrBwyB,EAAgB9+B,KAAKsM,MAAM1I,QAAQG,IAAIrC,OAAOq9B,eAC9CplB,EAAYmJ,IAA0C,SAAlBgc,GAA8C,oBAAlBA,GAChEE,EAAoBh/B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAUhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO4E,gBAAmB,GAKpHqwB,EAAgBj/B,KAAKsM,MAAM4yB,OAASl/B,KAAKsM,MAAM4yB,MAAMle,WAAahhB,KAAKsM,MAAM4yB,MAAMle,UAAU,GAC7Fme,EAA+D,QAAtCP,EAAG5+B,KAAKsM,MAAMkN,KAAK4lB,aAAap1B,cAAM,IAAA40B,OAAA,EAAnCA,EAAqCruB,MACnE6uB,GAAsC,0DAAtBA,EAAahxB,OA0DjC,OAvD2B,IAAvB4wB,EAAYl8B,QACP9C,KAAKinB,MAAMqL,wBACZtyB,KAAKuoB,SAAS,CAAE+J,wBAAwB,IAExCtyB,KAAKinB,MAAMoY,sBACXr/B,KAAKuoB,SAAS,CAAE8W,sBAAsB,KAGrCr/B,KAAKinB,MAAMoY,sBACZr/B,KAAKuoB,SAAS,CAAE8W,sBAAsB,IA4C9Ct4B,QAAQC,IAAI,mBAAoBg4B,GAEF,IAAvBA,EAAYl8B,OACf2J,EAAAA,cAACmW,EAAwB,CACrBjf,SAAUq7B,EACVp7B,QAAS5D,KAAKsM,MAAM1I,QACpB0S,cAAeA,EACf/J,UAAWA,EACXsW,WAAY7iB,KAAKsM,MAAMsN,SACvBsI,SAAUliB,KAAKsM,MAAMvG,GACrB+c,oBAAqBnJ,EACrBrG,iBAAkBtT,KAAKsT,iBACvByP,cAAekc,EACfr5B,gCAAgE,QAAjCi5B,EAAE7+B,KAAKsM,MAAMkN,KAAK7V,SAASqG,cAAM,IAAA60B,OAAA,EAA/BA,EAAiCj5B,gCAClEod,qBAAsBmc,MAAAA,OAAyB,EAAzBA,EAA2BG,UACjDrc,gCAAiCjjB,KAAKinB,MAAMhE,kCAGhDxW,EAAAA,cAAA,OAAKC,UAAU,+BACV1M,KAAKsM,MAAM5K,OAAOgO,WAAawhB,EAAAA,GACI,UAA9B1kB,EACID,EAAUgzB,wBACVhzB,EAAUizB,iBACgB,UAA9BhzB,EACAD,EAAUiC,gCACVjC,EAAUkC,2BAKX,KAAAgxB,qBAAwBjzB,IAAkD,IAAAkzB,EAAAC,EACvF,MAAM,cAAErpB,EAAa,oBAAEwM,GAAwB9iB,KAAKsM,MAAM5K,QACpD,UAAE6K,GAAcvM,KAAKsM,MACrBwyB,EAAgB9+B,KAAKsM,MAAM1I,QAAQG,IAAIrC,OAAOq9B,eAC9CplB,EAAYmJ,IAA0C,SAAlBgc,GAA8C,oBAAlBA,GACtE,IAAIE,EAAoBh/B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAUhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO4E,gBAAmB,GAC1F,IAAAgxB,EAAH,IAAvBZ,EAAYl8B,SACZk8B,EAAeh/B,KAAKsM,MAAMkN,KAAK7V,SAASqG,SAAyC,QAAnC41B,EAAI5/B,KAAKsM,MAAMkN,KAAK7V,SAASqG,cAAM,IAAA41B,OAAA,EAA/BA,EAAiCj8B,WAAa,IAGpG,MAAMs7B,EAAgBj/B,KAAKsM,MAAM4yB,OAASl/B,KAAKsM,MAAM4yB,MAAMle,WAAahhB,KAAKsM,MAAM4yB,MAAMle,UAAU,GAC7Fme,EAA+D,QAAtCO,EAAG1/B,KAAKsM,MAAMkN,KAAK4lB,aAAap1B,cAAM,IAAA01B,OAAA,EAAnCA,EAAqCnvB,MACnE6uB,GAAsC,0DAAtBA,EAAahxB,OAyBjC,OAtB2B,IAAvB4wB,EAAYl8B,SACP9C,KAAKinB,MAAMqL,wBACZtyB,KAAKuoB,SAAS,CAAE+J,wBAAwB,KAoBlB,IAAvB0M,EAAYl8B,OACf2J,EAAAA,cAACmW,EAAwB,CACrBM,UAAU,EACVvf,SAAUq7B,EACVp7B,QAAS5D,KAAKsM,MAAM1I,QACpB0S,cAAeA,EACf/J,UAAWA,EACXsW,WAAY7iB,KAAKsM,MAAMsN,SACvBsI,SAAUliB,KAAKsM,MAAMvG,GACrB+c,oBAAqBnJ,EACrBrG,iBAAkBtT,KAAKsT,iBACvByP,cAAekc,EACfr5B,gCAAgE,QAAjC+5B,EAAE3/B,KAAKsM,MAAMkN,KAAK7V,SAASqG,cAAM,IAAA21B,OAAA,EAA/BA,EAAiC/5B,gCAClEod,qBAAsBmc,MAAAA,OAAyB,EAAzBA,EAA2BG,UACjDrc,gCAAiCjjB,KAAKinB,MAAMhE,kCAGhDxW,EAAAA,cAAA,OAAKC,UAAU,+BACoB,UAA9BF,EAAwCD,EAAUiC,gCAAkCjC,EAAUkC,yBAAwB,MAKlH,KAAAoxB,2BAA8BrzB,IAC3C,MAEM7I,GAFe3D,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAUhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO4E,gBAAmB,IAExFtF,QAAOtG,IAAU,IAAA2Y,EAAAC,EAAAC,EAC1C,MAAMjR,EAAwC,QAAnC+Q,EAAQ3Y,EAAQ8Y,2BAAmB,IAAAH,OAAA,EAA3BA,EAA6B5J,WAAUgK,GAAe,wBAAVA,EAAEC,MACjE,OACIpR,GAAS,GACT5H,IACAA,MAAAA,OAAO,EAAPA,EAAS8Y,uBACT9Y,MAAAA,GAA4B,QAArB4Y,EAAP5Y,EAAS8Y,2BAAmB,IAAAF,OAAA,EAA5BA,EAA8B9Y,QAAS,GACqB,MAA5DE,MAAAA,GAAmC,QAA5B6Y,EAAP7Y,EAAS8Y,oBAAoBlR,UAAM,IAAAiR,GAAO,QAAPA,EAAnCA,EAAqCI,aAAK,IAAAJ,OAAA,EAA1CA,EAA4CK,gBAG9C4jB,EAAwC,GAE9Cn8B,GACIA,EAAS+G,SAAQ1H,IAAU,IAAAmW,EAAAgD,EAAA4jB,EACvB,MAAMtpB,EAAazT,GACb0T,EAAAA,EAAAA,uBAAkC,QAAbyC,EAACnW,EAAQoL,YAAI,IAAA+K,EAAAA,EAAI,GAAInW,EAAQM,SAAUtD,KAAKsM,MAAM1I,QAAQwJ,mBAAezL,GAC9F,GACAsM,GAAWuN,EAAAA,EAAAA,kBAAiBxY,EAAQkC,gBAAiBlF,KAAKsM,MAAM1I,QAAQ+T,QAAQrY,cAAgB,GAChGsL,EAAa5H,MAAAA,GAA4B,QAArBmZ,EAAPnZ,EAAS8Y,2BAAmB,IAAAK,OAAA,EAA5BA,EAA8BpK,WAAUgK,GAAe,wBAAVA,EAAEC,MAC5DgkB,EAAoBh9B,MAAAA,GAA4B,QAArB+8B,EAAP/8B,EAAS8Y,2BAAmB,IAAAikB,OAAA,EAA5BA,EAA8BhuB,WAAUgK,GAAe,cAAVA,EAAEC,MACzE,GAAIpR,GAAS,EAAG,KAAAq1B,EAAAC,EAAAC,EAAAC,EACZ,MAAMC,EAAqC,CACvCpzB,SAAUjK,EAAQM,SAClBiL,MACKvL,IACGA,MAAAA,OAAO,EAAPA,EAAS8Y,uBACT9Y,MAAAA,GAA4B,QAArBi9B,EAAPj9B,EAAS8Y,2BAAmB,IAAAmkB,OAAA,EAA5BA,EAA8Bn9B,QAAS,IACC,QADAo9B,EACxCl9B,EAAQ8Y,oBAAoBlR,GAAOqR,aAAK,IAAAikB,OAAA,EAAxCA,EAA0ChkB,cAC9C,IACJ7N,YAAarL,EAAQqL,aAAe,GACpCD,KAAMpL,EAAQoL,MAAQ,GACtBkyB,WAAY7pB,EACZxI,SAAUA,EACV1H,UACKy5B,GAAgB,IACbh9B,MAAAA,OAAO,EAAPA,EAAS8Y,uBACT9Y,MAAAA,GAA4B,QAArBm9B,EAAPn9B,EAAS8Y,2BAAmB,IAAAqkB,OAAA,EAA5BA,EAA8Br9B,QAAS,IACQ,QADPs9B,EACxCp9B,EAAQ8Y,oBAAoBkkB,GAAc/jB,aAAK,IAAAmkB,OAAA,EAA/CA,EAAiD9J,YACrD,GAERwJ,EAAgB37B,KAAKk8B,OAQjC,OAJ2BP,EAAgBx2B,QACvC+2B,IAAc,IAAAE,EAAA,OAAIF,EAAe95B,aAAgD,QAAvCg6B,EAAKvgC,KAAKsM,MAAM1I,QAAQ+T,QAAQkb,eAAO,IAAA0N,OAAA,EAAlCA,EAAoCj9B,cAM1E,KAAAk9B,gBAAkB,CAACh0B,EAAmCusB,KAAoD,IAAA0H,EAAAC,EAAAC,EAAAC,EACvH,MAAM,QAAEh9B,EAAO,KAAE4V,EAAI,OAAE9X,EAAM,UAAE6K,GAAcvM,KAAKsM,MAOlD,IAAI2lB,EACA4O,EAEAj9B,GAAWA,EAAQ+T,SAAW/T,EAAQ+T,QAAQzW,OAAS0C,EAAQ+T,QAAQzW,MAAMmB,GAC7E4vB,EAAc,IAAIruB,EAAQ+T,QAAQzW,MAAMmB,KACxCw+B,EAAoBj9B,EAAQ+T,QAAQzW,MAAMmB,IAE1C4vB,EACKzY,EAAK/Z,SAASuK,QACXymB,GAAsB+B,gBAAgB5uB,EAAQ+T,QAAQ9X,OAAQ2Z,EAAK/Z,SAASuK,OAAOyoB,mBACtFjZ,EAAK/Z,SAASuK,QAAUwP,EAAK/Z,SAASuK,OAAOoE,KAElDyyB,EAAoB5O,GAKxB,MAAM6O,EAAe,GAAGp/B,MAAAA,GAAoB,QAAd++B,EAAN/+B,EAAQo/B,oBAAY,IAAAL,OAAA,EAApBA,EAAsB7f,MAAM,MAAM,QAAQigB,IAC5DE,EAAe,GAAGr/B,MAAAA,GAAoB,QAAdg/B,EAANh/B,EAAQq/B,oBAAY,IAAAL,OAAA,EAApBA,EAAsB9f,MAAM,MAAM,QAAQigB,IAC5DG,EAAe,GAAGt/B,MAAAA,GAAoB,QAAdi/B,EAANj/B,EAAQs/B,oBAAY,IAAAL,OAAA,EAApBA,EAAsB/f,MAAM,MAAM,QAAQigB,IAC5DI,EAAe,GAAGv/B,MAAAA,GAAoB,QAAdk/B,EAANl/B,EAAQu/B,oBAAY,IAAAL,OAAA,EAApBA,EAAsBhgB,MAAM,MAAM,QAAQigB,IAG5DK,EAA4B,GAClC,IAAIC,EAA8B,GAElC,OAAInhC,KAAKinB,MAAMmM,YAAYtwB,OAAS,GAChC9C,KAAKinB,MAAMmM,YAAY/yB,KAAK+yB,IAAiC,IAAAgO,EAEzD,MAAMx2B,EAA4C,QAAvCw2B,EAAQphC,KAAKinB,MAAM8L,4BAAoB,IAAAqO,OAAA,EAA/BA,EAAiCrvB,WAAUgK,IAAC,IAAAslB,EAAA,OAAItlB,EAAEulB,KAAMlO,MAAAA,GAAe,QAAJiO,EAAXjO,EAAakO,UAAE,IAAAD,OAAA,EAAfA,EAAiBz1B,eAE5E,IAAA21B,EAAZ32B,GAAS,GACTs2B,EAAqB/8B,KAAK,CACtBoC,UAAW6sB,EAAYkO,GACvBE,YAAapO,EAAYhlB,KACzBqzB,eACIzhC,KAAKinB,MAAM8L,sBACX/yB,KAAKinB,MAAM8L,qBAAqBnoB,KACM,QADA22B,EACtCvhC,KAAKinB,MAAM8L,qBAAqBnoB,UAAM,IAAA22B,OAAA,EAAtCA,EAAwChzB,YAKxDxH,QAAQC,IAAI,uBAAwBk6B,GAEhCA,EAAqBp+B,OAAS,GAC9Bo+B,EAAqB7gC,KAAKsM,IAClBA,EAAK60B,YAAYh0B,SAAS,WAC1B2zB,EAAuBh9B,KAAIpE,GAAAA,GAAC,GAAK4M,GAAI,IAAE+0B,UAAWZ,KAGlDn0B,EAAK60B,YAAYh0B,SAAS,aAC1B2zB,EAAuBh9B,KAAIpE,GAAAA,GAAC,GAAK4M,GAAI,IAAE+0B,UAAWX,KAGlDp0B,EAAK60B,YAAYh0B,SAAS,UAC1B2zB,EAAuBh9B,KAAIpE,GAAAA,GAAC,GAAK4M,GAAI,IAAE+0B,UAAWT,KAGlDt0B,EAAK60B,YAAYh0B,SAAS,UAC1B2zB,EAAuBh9B,KAAIpE,GAAAA,GAAC,GAAK4M,GAAI,IAAE+0B,UAAWV,QAK9DG,EAAyBA,EAAuB73B,QAAQqD,GAC7CA,EAAKpG,YAAc3C,EAAQ+T,QAAQrY,YAAYiH,YAGtD46B,EAAuBr+B,OAAS,EAE5B2J,EAAAA,cAAA,MAAIC,UAAU,uBACTy0B,EAAuB9gC,KAAKshC,IACzB,GAAIA,EAA2Bp7B,YAAc3C,EAAQ+T,QAAQrY,YAAYiH,UAAW,CAChF,MAAMq7B,EAAar1B,EAAUs1B,qBACxBx0B,QAAQ,MAAOs0B,EAA2BF,gBAC1Cp0B,QAAQ,MAAO4kB,GACf5kB,QAAQ,MAAOs0B,EAA2BH,aACzCM,EAAoBv1B,EAAUw1B,4BAC/B10B,QAAQ,MAAOs0B,EAA2BF,gBAC1Cp0B,QAAQ,MAAO4kB,GACf5kB,QAAQ,MAAOs0B,EAA2BH,aAC/C,OACI/0B,EAAAA,cAAA,MAAIC,UAAU,4BAA4B1D,IAAK24B,EAA2Bp7B,WACtEkG,EAAAA,cAAA,KACIC,UAAU,4BACVf,KAAMg2B,EAA2BD,UACjC1hB,IAAI,aACJvN,OAAO,UAEPhG,EAAAA,cAAA,YAAuC,UAAhCssB,EAA0C+I,EAAoBF,GAAmB,IACxFn1B,EAAAA,cAACu1B,GAAAA,IAAY,CAACt1B,UAAU,oCAKpC,OAAO,SAOnBD,EAAAA,cAAA,OAAKC,UAAU,+BACsB,UAAhCqsB,EACKxsB,EAAUiC,gCACVjC,EAAUkC,2BAO5BhC,EAAAA,cAAA,OAAKC,UAAU,+BACsB,UAAhCqsB,EAA0CxsB,EAAUiC,gCAAkCjC,EAAUkC,2BAK5F,KAAAotB,sBAAyBoG,IACtC,MAAM,QAAEr+B,GAAY5D,KAAKsM,MACnBtL,EAAiB4C,GAAWA,EAAQ+T,QACpCvK,EAAgBxJ,GAAWA,EAAQwJ,cAEzC,IAAKpM,IAAmBoM,IAAkBpN,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ,CAC5E,MAAM4L,EAAQ,mDAAoD5U,EAAqC,GAApB,qBAC9EoM,EAAmC,GAAnB,sCAErBpN,KAAKsM,MAAMlD,UAAUC,QAAQuM,GAGjC3J,OAAO+qB,QAAQC,UACX,GACA,IACAnsB,EAAAA,EAAAA,KACIe,EAAAA,EAAAA,IAAc7L,KAAKsM,MAAM1I,QAAQ+T,cACjChW,EACA,CAAC3B,KAAKkiC,iCAAiCD,EAAatG,sBACpDh6B,IAGJ3B,KAAKinB,MAAMqL,wBACXtyB,KAAKuoB,SAAQxoB,GAAAA,GAAC,GAAKC,KAAKinB,OAAK,IAAEqL,wBAAwB,EAAOiC,cAAe,MAEjFwC,EAAAA,EAAAA,KAAY,KACR/2B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ8E,kBAAoB,EAC1D9O,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ6E,eAAiB,CACnD7M,QAAS,CAAChC,KAAKkiC,iCAAiCD,EAAatG,sBAKxD,KAAAuG,iCAAoCC,IACjD,MAAM,KAAE3oB,GAASxZ,KAAKsM,MAEtB,IAAKkN,EAAK3Q,oBAAoBmB,OAC1B,MAAO,GAGX,MAAMo4B,EAAsB5oB,EAAK3Q,oBAAoBmB,OAAOuG,MAAK1H,GACtDA,EAAoBG,MAAQm5B,EAAOn5B,MAG9C,OAAIo5B,EACOA,EAAoBr5B,WAGxB,IAOM,KAAAs5B,uBAAyB,KAA6B,IAAAC,EACnE,MAAMC,EAAmD,QAAvCD,EAAGtiC,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,cAAM,IAAAs4B,OAAA,EAApCA,EAAsCzzB,eAC3D,GAAI3L,EAAAA,gBAAgBC,YAAYo/B,MAAAA,OAAY,EAAZA,EAAcvgC,SAC1C,OAAOugC,EAAcvgC,QAAQ,GAGjC,MAAMwgC,GAAej4B,EAAAA,EAAAA,IAA8B,UAAWvK,KAAKsM,MAAM1I,QAAQ+T,SACjF,OAAIzU,EAAAA,gBAAgBC,YAAYq/B,GACrBA,EAAa,QADxB,GAWa,KAAA7H,4BAA8B,KAC3C,MAAM8H,EAAmBziC,KAAKqiC,yBAExBx5B,EAAsB7I,KAAKsM,MAAMkN,KAAK3Q,oBAAoBmB,OAEhE,IAAKy4B,IAAqB55B,EACtB,OAGJ,MAAM65B,EAAqB75B,EAAoB0H,MAC3CoyB,GACIA,EAAmB55B,WAAWE,aAAew5B,EAAiBx5B,YAC9D05B,EAAmB55B,WAAWI,eAAiBs5B,EAAiBt5B,eAExE,OAAKu5B,EAIE1iC,KAAKoxB,sBAAsB7gB,MAAKwqB,GAAkBA,EAAe/xB,MAAQ05B,EAAmB15B,WAJnG,GAOa,KAAA60B,kBAAqBhtB,IAClC9J,QAAQC,IAAI,yBAA0B6J,GACtC,MAAM,QAAEjN,GAAY5D,KAAKsM,MACnBtL,EAAiB4C,GAAWA,EAAQ+T,QACpCvK,EAAgBxJ,GAAWA,EAAQwJ,cAEzC,IAAKpM,IAAmBoM,IAAkBpN,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ,CAC5E,MAAM4L,EAAQ,8CAA+C5U,EAAqC,GAApB,qBACzEoM,EAAmC,GAAnB,sCAErBpN,KAAKsM,MAAMlD,UAAUC,QAAQuM,GAGjC,MAAM7E,EAA4BH,EAC9BC,EACC7Q,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAUhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO2E,eAAkB,IAGpG5H,QAAQC,IAAI,4BAA6B+J,GAEzC9E,OAAO+qB,QAAQC,UAAU,GAAI,IAAInsB,EAAAA,EAAAA,KAAiBe,EAAAA,EAAAA,IAAc7L,KAAKsM,MAAM1I,QAAQ+T,SAAU5G,KAC7FgmB,EAAAA,EAAAA,KAAY,KACR/2B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ8E,kBAAoB,EAC1D9O,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ2E,cAAgBoC,MAI7C,KAAA+sB,iBAAoBjtB,IAEjC,GADA9J,QAAQC,IAAI6J,GACR7Q,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAQ,CACtC,MAAM44B,EAAwBhyB,EAC1BC,EACA7Q,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO2E,eAAiB,IAG1D,OAAO7D,EAAAA,EAAAA,KAAiBe,EAAAA,EAAAA,IAAc7L,KAAKsM,MAAM1I,QAAQ+T,SAAUirB,GAGvE,OADA5iC,KAAKsM,MAAMlD,UAAUC,QAAQ,uFACtB,IAGM,KAAAm1B,iBAAoByD,IACjC,MAAM,KAAEzoB,EAAI,UAAEpQ,GAAcpJ,KAAKsM,MAEjC,IAAKkN,EAAKsY,cAAc9nB,OAEpB,YADAZ,EAAUC,QAAQ,sGAItB,IAAIyH,EAA6B0I,EAAKsY,cAAc9nB,QAAUwP,EAAKsY,cAAc9nB,OAAO2E,eAAkB,GAE1G,GAAKszB,EAAatvB,SASX,CACH7B,EAA4B,GAG5B,MAAM+xB,EAAoB7iC,KAAK87B,2BAA2B3Q,SAAWnrB,KAAK87B,2BAA2B3Q,QAAQ7e,MAAMivB,WAC7GuH,EAAkBD,GAAqB9W,SAASC,eAAe6W,GACrE3X,YAAW,KACP4X,GAAmBA,EAAgB1X,UACpC,QAjBqB,CACxB,MAAM2X,EAAiBd,EAAahvB,cACpC,IAAK8vB,EAED,YADA35B,EAAUC,QAAQ,gFAGtByH,EAA4BA,EAA0BxH,QACjD2H,IAA4CR,EAA8BsyB,EAAgB9xB,KAanG,MAAMlG,GAAUc,EAAAA,EAAAA,IAAc7L,KAAKsM,MAAM1I,QAAQ+T,SACjD1L,OAAO+qB,QAAQC,UAAU,GAAI,IAAInsB,EAAAA,EAAAA,IAAiBC,EAAS+F,IAC3D0I,EAAKsY,cAAc9nB,OAAO8E,kBAAoB,EAC9C0K,EAAKsY,cAAc9nB,OAAO2E,cAAgBmC,GAG7B,KAAA2tB,iCAAmC,CAAC5rB,EAAsCmwB,KACvF,MAAM,KAAExpB,EAAI,UAAEpQ,GAAcpJ,KAAKsM,MAC3BvB,GAAUc,EAAAA,EAAAA,IAAc7L,KAAKsM,MAAM1I,QAAQ+T,SAEjD,IAAK6B,EAAKsY,cAAc9nB,OAEpB,OADAZ,EAAUC,QAAQ,yGACX0B,EAAQY,KAGnB,IAAImF,EAA6B0I,EAAKsY,cAAc9nB,QAAUwP,EAAKsY,cAAc9nB,OAAO2E,eAAkB,GAE1G,GAAKq0B,EASDlyB,EAA4B,OATf,CACb,IAAK+B,EAED,OADAzJ,EAAUC,QAAQ,wFACX0B,EAAQY,KAEnBmF,EAA4BA,EAA0BxH,QACjD2H,IAA4CR,EAA8BoC,EAAiB5B,KAMpG,OAAOnG,EAAAA,EAAAA,IAAiBC,EAAS+F,IA4CpB,KAAAssB,uBAAyB,CAACF,EAAwB+F,KAC/D,OAAQA,GACJ,KAAKxzB,GAAAA,EAAoBokB,IACrB7zB,KAAK2xB,mBAAqBuL,EAC1B,MACJ,KAAKztB,GAAAA,EAAoByzB,IACrBljC,KAAK2xB,mBAAqB,EAC1B,MACJ,KAAKliB,GAAAA,EAAoB0zB,IACrBnjC,KAAK2xB,mBAAqB,EAC1B,MACJ,KAAKliB,GAAAA,EAAoB2zB,MACrBpjC,KAAK2xB,mBAAqB,EAC1B,MACJ,KAAKliB,GAAAA,EAAoB4zB,KACrBrjC,KAAK2xB,mBAAqB,EAC1B,MACJ,QACI3xB,KAAK2xB,mBAAqB,IASrB,KAAA8K,YAAe6G,GAExB72B,EAAAA,cAAA,OAAKC,UAAU,wBACXD,EAAAA,cAAA,QAAMC,UAAU,oCAAmC,cAAa,SAChED,EAAAA,cAAA,QAAMC,UAAU,aAAa42B,IAUxB,KAAA5G,YAAe6G,GAExB92B,EAAAA,cAAA,OAAKC,UAAU,wBACXD,EAAAA,cAAA,QAAMC,UAAU,aAAa62B,GAC7B92B,EAAAA,cAAA,QAAMC,UAAU,qCAAoC,cAAa,UAU5D,KAAA82B,yBAA4BzK,GAErCtsB,EAAAA,cAAA,OAAKC,UAAU,gEACXD,EAAAA,cAAA,UAAQC,UAAU,yDAAyDK,QAASA,IAAM/M,KAAKyjC,oBAAmB,IAC7E,UAAhC1K,EACK/4B,KAAKsM,MAAMC,UAAUm3B,qBACrB1jC,KAAKsM,MAAMC,UAAUo3B,eAE/Bl3B,EAAAA,cAAA,QAAMC,UAAU,wBAAsB,KACtCD,EAAAA,cAAA,UAAQC,UAAU,2DAA2DK,QAASA,IAAM/M,KAAKyjC,oBAAmB,IAC/E,UAAhC1K,EACK/4B,KAAKsM,MAAMC,UAAUq3B,uBACrB5jC,KAAKsM,MAAMC,UAAUs3B,kBAW1B,KAAAJ,mBAAsBK,IACnC9jC,KAAKuoB,SAAS,CAAEiV,kBAAmBsG,KAvuDnC9jC,KAAK+jC,UACDz3B,EAAM1I,QAAQ+T,SAAWrL,EAAM1I,QAAQ+T,QAAQqsB,QAAgD,WAAtC13B,EAAM1I,QAAQ+T,QAAQqsB,OAAOC,KAAoB,KAAO,KACrHjkC,KAAK44B,gBAAkBnsB,EAAAA,YACvBzM,KAAK87B,2BAA6BrvB,EAAAA,YAClCzM,KAAK64B,aAAe74B,KAAK64B,aAAa9S,KAAK/lB,MAC3CA,KAAKkkC,gBAAkBlkC,KAAKkkC,gBAAgBne,KAAK/lB,MACjDA,KAAKkP,cAAgB,GACrBlP,KAAKs3B,eAAiB7qB,EAAAA,YACtBzM,KAAKy9B,YAAchxB,EAAAA,YACnBzM,KAAKinB,MAAQ,CACT2T,aAAc,CACVuJ,SAAS,EACTtJ,qBAAsB76B,KAAKoxB,sBAAsB,IAErDuH,aAAa,EACbn5B,SAAU,GACVi3B,gBAAiB,GACjBlC,cAAe,EACf6P,QAAS,EACTC,cAAe,EACf/R,wBAAwB,EACxBD,mBAAmB,EACnBE,wBAAwB,EACxB8M,sBAAsB,EACtB7B,kBAAmB,GACnBpK,YAAa,GACbL,qBAAsB,IAE1B,MAAM,0BAAEuR,EAAyB,gBAAEC,EAAe,gBAAEC,EAAe,uBAAEC,GAA2BzkC,KAAKsM,MAAMC,UAErG1M,EAASG,KAAKsM,MAAM1I,QAAQ+T,QAAQ9X,OACpCuJ,EAAYpJ,KAAKsM,MAAMlD,UACvBwhB,EAAqB5qB,KAAKsM,MAAMC,UAAUm4B,gCAC1CnZ,EAAuBvrB,KAAKsM,MAAMC,UAAUo4B,+BAClD3kC,KAAK09B,uBAAyB,CAC1Bt0B,UAAAA,EACAvJ,OAAAA,EACAwpB,mBAAoBib,EACpBvb,SAAUwb,EACVpb,SAAUqb,EACV/b,gBAAiBgc,EACjB7Z,mBAAAA,EACAW,qBAAAA,GAEJvrB,KAAKsT,kBAAmBsxB,EAAAA,EAAAA,oBACpB5kC,KAAKsM,MAAM1I,QAAQ+T,QAAQ+hB,kBAC3B15B,KAAKsM,MAAMwV,aACX9hB,KAAKsM,MAAMlD,WAIfpJ,KAAKmyB,qBAAqB,IAC1BnyB,KAAKkkC,kBApIC,eACN,MAA0B,OAAnBlkC,KAAK+jC,WAAyC,OAAnB/jC,KAAK+jC,UAsIpC,uBAAuBlkC,EAAgBglC,GAAyC,IAAAC,EACnF,IAAIC,EAKJ,OAJIllC,GAAUglC,GAAoB3hC,EAAAA,gBAAgBC,YAAY0hC,KAC1DE,EAAkBF,EAAiBt0B,MAAK5D,GAAQA,EAAK9F,SAAU8yB,gBAAkB95B,EAAO85B,iBAGtE,QAAtBmL,EAAOC,SAAe,IAAAD,OAAA,EAAfA,EAAiBxzB,KAGrB,0BAAuB,IAAA0zB,EACtBl5B,EAAAA,GAASC,WAAaE,OAAOg5B,mBAC7Bh5B,OAAOg5B,iBAAiB,SAAUjlC,KAAKkkC,iBACvClkC,KAAKkkC,mBAELlkC,KAAKsM,MAAM5K,OAAOkzB,+BAAgF,QAAnDoQ,EAAIhlC,KAAKsM,MAAM1I,QAAQwJ,cAAcpM,sBAAc,IAAAgkC,GAAM,QAANA,EAA/CA,EAAiDlU,YAAI,IAAAkU,GAArDA,EAAuDnQ,iBAC1G70B,KAAK80B,kBAGT,MAAMnxB,QAAiB3D,KAAKsM,MAAMkN,KAAK7V,SACjCmuB,QAAsB9xB,KAAKsM,MAAMkN,KAAKsY,oBAEtC9xB,KAAK6xB,qBAAqBC,EAAenuB,IAC/CuhC,EAAAA,EAAAA,KACI,KAAK,IAAAC,EACD,MAAO,CACwB,QADxBA,EACHrT,EAAcnjB,qBAAa,IAAAw2B,OAAA,EAA3BA,EAA6BriC,OAE7BgvB,EAAcjjB,mBAKtBnK,UAAW,IAAA0gC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAApZ,EAAAqZ,EACP,MAAMC,EAAmB7T,EACnB7rB,EAAQ,IAAIpD,EAAAA,iCACd8iC,EAAiBtmC,SACjBW,KAAKsM,MAAM1I,QAAQ+T,QAAQrY,YAC3B,CACIW,OAAQ,CACJwH,IAAKzH,KAAKsM,MAAM5K,OAAOgG,aACvBE,KAAMg+B,KAAKlc,IAAIic,EAAiB32B,UAA8C,QAAtCo2B,EAAIO,EAAiB72B,yBAAiB,IAAAs2B,EAAAA,EAAI,GAAI,IAE1F7/B,OAAO,EACPpF,QAAwC,QAAjCklC,EAAEM,EAAiB92B,sBAAc,IAAAw2B,EAAAA,EAAI,IAElB,QAD7BC,EACDK,EAAiBh3B,qBAAa,IAAA22B,EAAAA,EAAI,KAEhCtlC,KAAKsM,MAAM1I,QAAQ+T,QAAQ1W,UAAUgM,UAAY,GAGnB,QAAhCs4B,EAAAvlC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAqkC,GAAhCA,EAAkCljC,EAC5BrC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EACjCJ,KAAKO,UAAU,CACXC,UAA2C,QAAlC+iC,EAAExlC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAskC,OAAA,EAAhCA,EAAkCljC,UAC7CI,eAAgD,QAAlC+iC,EAAEzlC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAukC,OAAA,EAAhCA,EAAkCljC,mBAGhD,QAAX8pB,EAACrsB,KAAKsM,aAAK,IAAA+f,GAAQ,QAARA,EAAVA,EAAY3qB,cAAM,IAAA2qB,IAAlBA,EAAoB1sB,mBACtBK,KAAKsM,MAAM5K,OAAOG,mBAClB7B,KAAKsM,MAAM1I,QAAQ+T,QAAQ9X,QAGzB40B,QAAuBD,EAAAA,EAAAA,SAAsBvuB,EAAOjG,KAAKsM,MAAM1I,QAAQwJ,eAa7E,GAZAu4B,EAAiB52B,kBAAoB/O,KAAKoyB,kBAAkBqC,MAAAA,OAAc,EAAdA,EAAgB9wB,SAAS,IACrFgiC,EAAiB/2B,eAAiB6lB,EAAe9wB,SAI7C3D,KAAKsM,MAAM5K,OAAOkzB,+BAC6B,QADA8Q,EAC/C1lC,KAAKsM,MAAM1I,QAAQwJ,cAAcpM,sBAAc,IAAA0kC,GAAM,QAANA,EAA/CA,EAAiD5U,YAAI,IAAA4U,GAArDA,EAAuD7Q,iBAGvD70B,KAAK80B,kBAGL90B,KAAKsM,MAAM5K,OAAOG,mBAAoB,KAAAgkC,EAAAC,EAAAC,EAAAC,EAAAC,EACtC,MAAMC,EAAe,IAAIh8B,EAAAA,0BACrBy7B,EAAiBtmC,SACjBW,KAAKsM,MAAM1I,QAAQ+T,QAAQrY,YAC3B,CACIW,OAAQ,CACJwH,IAAKzH,KAAKsM,MAAM5K,OAAOgG,aACvBE,KAAMg+B,KAAKlc,IACPic,EAAiB32B,UAA8C,QAAtC62B,EAAIF,EAAiB72B,yBAAiB,IAAA+2B,EAAAA,EAAI7lC,KAAK4xB,mBACxE5xB,KAAK4xB,oBAGbrsB,OAAO,EACPpF,QAAwC,QAAjC2lC,EAAEH,EAAiB92B,sBAAc,IAAAi3B,EAAAA,EAAI,IAElB,QAD7BC,EACDJ,EAAiBh3B,qBAAa,IAAAo3B,EAAAA,EAAI,KAEhC/lC,KAAKsM,MAAM1I,QAAQ+T,QAAQ1W,UAAUgM,UAAY,GACnB,QAAhC+4B,EAAAhmC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAA8kC,GAAhCA,EAAkC3jC,EAC5BrC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,MAAMmB,EACD,QADE4jC,EAClCjmC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAA+kC,OAAA,EAAhCA,EAAkC3jC,WACxC,EACAtC,KAAKsM,MAAM5K,OAAOG,wBAClBF,GAGEnC,QAAiB2mC,EAAAA,EAAAA,SAA4BD,EAAclmC,KAAKsM,MAAM1I,QAAQwJ,eACpFpN,KAAKuoB,SAAS,CAAE/oB,SAAAA,QA0HzB4mC,uBACCt6B,EAAAA,GAASC,WAAaE,OAAOo6B,qBAC7Bp6B,OAAOo6B,oBAAoB,SAAUrmC,KAAKkkC,iBAI3CxwB,SAAM,IAAA4yB,EACT,MAAM,cAAEhwB,EAAa,UAAE5J,EAAS,SAAEgD,GAAa1P,KAAKsM,MAAM5K,QACpD,UAAE6K,EAAS,QAAE3I,GAAY5D,KAAKsM,MAC9B3I,EAAY3D,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAUhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO4E,gBAAmB,GAC5G23B,EAAiBvmC,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAUhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAOiF,gBAAmB,KACvH,IAAIu3B,EAAiB,GAGrB,MAAMC,GAAa9V,EAAAA,GAAAA,IAAc/sB,GAC3B8iC,GAAe7V,EAAAA,GAAAA,IAAgBjtB,EAAQ+T,QAAQmZ,KAAKC,sBAA8BntB,GAClF4I,GAAiCykB,EAAAA,GAAAA,IACnCvhB,EACAi3B,EAAAA,GACAD,EACAD,EACA7iC,GAEEm1B,GAAmC9H,EAAAA,GAAAA,IACrCvhB,EACAyhB,EAAAA,GACAuV,EACAD,EACA7iC,GAEEqwB,GAAkChD,EAAAA,GAAAA,IAAyBvhB,EAAiBk3B,EAAAA,GAAeF,EAAcD,EAAY7iC,GAEtHD,GAAgC,IAApBA,EAASb,SACtB0jC,EACuB,aAAnBxmC,KAAK0xB,UACDjlB,EAAAA,cAAA,OAAKC,UAAU,+BAA6B,iDAE5CD,EAAAA,cAAA,OAAKC,UAAU,+BACoB,UAA9BF,EACKD,EAAUiC,gCACVjC,EAAUkC,yBAAwB,MAKxD,MAAMo4B,EAAoB7mC,KAAK2+B,aAAanyB,GACtCs6B,EAAuB9mC,KAAKwgC,gBAAgBh0B,EAA2BusB,GACvEgO,EAA4B/mC,KAAKy/B,qBAAqBjzB,GACtDw6B,EAAwBhnC,KAAK6/B,2BAA2BrzB,GACxDy6B,EACFx6B,EAAAA,cAAC4J,EAAuB,CACpBrT,QAASujC,EACT3iC,QAAS5D,KAAKsM,MAAM1I,QACpB0S,cAAeA,EACf/J,UAAWA,EACXsW,WAAY7iB,KAAKsM,MAAMsN,SACvBsI,SAAUliB,KAAKsM,MAAMvG,GACrBuN,iBAAkBtT,KAAKsT,iBACvB/Q,eAAgBvC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,QAAyC,QAApColC,EAAItmC,KAAKsM,MAAM1I,QAAQ+T,QAAQzW,aAAK,IAAAolC,OAAA,EAAhCA,EAAkC/jC,kBAI9FwE,QAAQC,IAAI,qBAAsBhH,KAAKsM,OAEvC,MAAM46B,EAA8BnnC,GAAAA,GAAA,GAC7BC,KAAKsM,OAAK,IACb3I,SAAUkjC,EACVM,YAAaL,EACbM,iBAAkBL,EAClBM,eAAgBrnC,KAAKm3B,qBACrBmQ,eAAgBtnC,KAAK84B,oBAAoBC,GACzCmB,mBAAoBl6B,KAAKsM,MAAM5K,OAAO6lC,kBAAoBvnC,KAAKi6B,wBAC/DuN,WAAYxnC,KAAK+8B,iBACjBrwB,UAAW4H,GAAAA,CAAW,6BAA8B5H,GACpD8jB,sBAAuB,CACnBiX,YAAaznC,KAAKsM,MAClBI,UAAW4H,GAAAA,CAAW,6BAA8B5H,IAExDg7B,cACI1nC,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAqE,IAA3DhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO+E,kBACvE/O,KAAKy6B,sBACL,KACVkN,mBAAoB3nC,KAAK+7B,yBACzB6L,cAAe5nC,KAAK68B,oBACpBgL,mBAAoB7nC,KAAK88B,yBAEzBgL,kBAAmB,CAAEp7B,UAAW,wCAChCq7B,wBAAyB,CAAEr7B,UAAW,+CACtCs7B,qBAAsB,CAAEt7B,UAAW,oDACnCu7B,iCAAkC,CAAEv7B,UAAW,sDAC/Cw7B,cAAeloC,KAAKi+B,oBACpBkK,YACInoC,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAAqE,IAA3DhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAO+E,kBACzEtC,EAAAA,cAACsL,EAAW,CACR3B,KAAsC,UAAhC2iB,EAA0CxsB,EAAU67B,kBAAoB77B,EAAUuM,WACxFhB,UAA2C,UAAhCihB,EAA0CxsB,EAAU67B,kBAAoB77B,EAAUuM,WAC7Fd,SAAUhY,KAAK44B,gBACf7rB,QAAS/M,KAAK64B,aACd9yB,GAAG,wBAEP,KACRsiC,kBAAmBroC,KAAKm4B,wBACxBxI,SAAU3vB,KAAK2vB,SACf2Y,aAAc9B,GAAa/5B,EAAAA,cAACyJ,EAAY,CAACE,KAAMowB,IAC/C+B,uBAAwB,CAAE77B,UAAW,4BACrC87B,mBACIxoC,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,QAC0B,OAAxDhK,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAOiF,qBACmBtN,IAAxD3B,KAAKsM,MAAMkN,KAAKsY,cAAc9nB,OAAOiF,eAC/Bg4B,EACA,KACV/3B,cAAelP,KAAKkP,cACpB83B,sBAAuBA,EACvByB,eAAgBzoC,KAAKg0B,yBAAyBC,GAC9CyU,kBAAmB1oC,KAAK+0B,qBACxB4T,mBAAoB3oC,KAAKq1B,4BAA4BpB,GACrDoL,qBAAsBr/B,KAAKinB,MAAMoY,qBACjCuJ,yBAA0B5oC,KAAKwjC,yBAAyBzK,GACxDvsB,0BAA2BA,EAC3BusB,4BAA6BA,EAC7B9E,2BAA4BA,IAEhC,OAAOj0B,KAAKsM,MAAMsV,WAAWslB,GA8tCzB2B,eACJ,MAAM,QAAEjlC,GAAY5D,KAAKsM,MAGzB,GAAI1I,EAAQ+T,SAAW/T,EAAQ+T,QAAQqsB,QAA0C,WAAhCpgC,EAAQ+T,QAAQqsB,OAAOC,KACpE,MAAO,KAGX,GAAIn4B,EAAAA,GAASC,WAAaE,OAAO68B,WAAY,CACzC,MAAM5xB,EAAetT,EAAQ+T,QAAQT,aACrC,GAAIA,EACA,OAAIA,EAAa6xB,IAAM98B,OAAO68B,YAAc5xB,EAAa6xB,GAAGC,EACjD,KACA9xB,EAAa+xB,IAAMh9B,OAAO68B,YAAc5xB,EAAa+xB,GAAGD,EACxD,KACA9xB,EAAagyB,IAAMj9B,OAAO68B,YAAc5xB,EAAagyB,GAAGF,EACxD,KACA9xB,EAAaiyB,IAAMl9B,OAAO68B,YAAc5xB,EAAaiyB,GAAGH,EACxD,KAEJ,KAIf,MAAO,KAGHnQ,eACJ74B,KAAKuoB,SAAS,CACVoQ,aAAc34B,KAAKinB,MAAM0R,cAIzBuL,kBACJlkC,KAAK+jC,UAAY/jC,KAAK6oC,eAElB7oC,KAAKinB,MAAM0R,cAAgB34B,KAAK2vB,UAChC3vB,KAAK64B,kBApuDHzpB,EAAAA,EAAAA,IAAA,CAAT4G,EAAAA,IAAQ,+BA4DT5G,EAAAA,EAAAA,IAAA,CADCC,EAAAA,IAAU,iCA/DMmhB,GAAqBC,IAAArhB,EAAAA,EAAAA,IAAA,CADzC6G,EAAAA,IACoBua,I,8LChId,MAAM4Y,EAA8D98B,IACvE,MAAM,UAAE+8B,EAAS,UAAE38B,EAAS,UAAEH,EAAS,0BAAEC,GAA8BF,EACvEvF,QAAQC,IAAI,qBAAsBqiC,GAGlC,MAAMC,EAAwBD,EAAU//B,QACnCigC,IAAa,IAAAC,EAAA,MAC4B,WAAtCD,MAAAA,GAAkB,QAAVC,EAARD,EAAUE,gBAAQ,IAAAD,OAAA,EAAlBA,EAAoBtgC,kBAA+BqgC,MAAAA,GAAAA,EAAUG,UAAqBl8B,SAAS,4BAGnG,OACIf,IAAAA,cAAAA,IAAAA,SAAA,KACK68B,GAAyBA,EAAsBxmC,OAAS,EACrD2J,IAAAA,cAAA,OAAKC,UAAWA,GACX48B,MAAAA,OAAqB,EAArBA,EAAuBjpC,KAAI,CAACkpC,EAAe3+B,IACxC6B,IAAAA,cAACk9B,EAAgB,CAAC5jC,GAAIwjC,EAASjI,GAAIiI,SAAUA,EAAUvgC,IAAKugC,EAASjI,QAU7E70B,IAAAA,cAAA,OAAKC,UAAU,+BACoB,UAA9BF,EAAwCD,EAAUiC,gCAAkCjC,EAAUkC,yBAAwB,OAQrIk7B,EAAoBr9B,IAAc,IAAAs9B,EACpC,MAAM,SAAEL,GAAaj9B,EAErB,OACIG,IAAAA,cAAA,OAAKC,UAAU,iCACXD,IAAAA,cAAA,OAAKC,UAAU,mCAwiBe,SAAlCC,OADgBA,EA7hBQ48B,IA8hBV,QAAVM,EAAJl9B,EAAM88B,gBAAQ,IAAAI,OAAA,EAAdA,EAAgB3gC,gBAjfA4gC,GAkfMn9B,EAAKo9B,SAlfGC,GAkfOr9B,EAAK+8B,UAhf1Cj9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,SAAUD,GACVhqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,GACPr+B,KAAMm+B,GAAO,aACD,mBAAmBE,MAE/Bv9B,IAAAA,cAACy9B,EAAAA,IAAU,QAwe0B,WAAlCv9B,MAAAA,GAAc,QAAVw9B,EAAJx9B,EAAM88B,gBAAQ,IAAAU,OAAA,EAAdA,EAAgBjhC,eAChBkhC,EAAgBz9B,EAAKo9B,SAAUp9B,EAAK+8B,WACF,WAAlC/8B,MAAAA,GAAc,QAAV09B,EAAJ19B,EAAM88B,gBAAQ,IAAAY,OAAA,EAAdA,EAAgBnhC,eAChBohC,EAAgB39B,EAAKo9B,SAAUp9B,EAAK+8B,WACF,SAAlC/8B,MAAAA,GAAc,QAAV49B,EAAJ59B,EAAM88B,gBAAQ,IAAAc,OAAA,EAAdA,EAAgBrhC,eAChBshC,EAAc79B,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAV89B,EAAJ99B,EAAM88B,gBAAQ,IAAAgB,OAAA,EAAdA,EAAgBvhC,eAzc/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,SAAUD,EACVhqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACi+B,EAAAA,IAAS,OA+bPC,CAAch+B,EAAKo9B,SAAUp9B,EAAK+8B,WACA,eAAlC/8B,MAAAA,GAAc,QAAVi+B,EAAJj+B,EAAM88B,gBAAQ,IAAAmB,OAAA,EAAdA,EAAgB1hC,eA3a/B,SAA6B4gC,EAAcE,GACvC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACo+B,EAAAA,IAAa,OAiaXC,CAAoBn+B,EAAKo9B,SAAUp9B,EAAK+8B,WACN,SAAlC/8B,MAAAA,GAAc,QAAVo+B,EAAJp+B,EAAM88B,gBAAQ,IAAAsB,OAAA,EAAdA,EAAgB7hC,eA7Z/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACu+B,EAAAA,IAAW,OAmZTC,CAAct+B,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAVu+B,EAAJv+B,EAAM88B,gBAAQ,IAAAyB,OAAA,EAAdA,EAAgBhiC,eA/Y/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC0+B,EAAAA,IAAW,OAqYTC,CAAcz+B,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAV0+B,EAAJ1+B,EAAM88B,gBAAQ,IAAA4B,OAAA,EAAdA,EAAgBniC,eAjY/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC6+B,EAAAA,IAAS,OAuXPC,CAAc5+B,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAV6+B,EAAJ7+B,EAAM88B,gBAAQ,IAAA+B,OAAA,EAAdA,EAAgBtiC,gBAEkB,UAAlCyD,MAAAA,GAAc,QAAV8+B,EAAJ9+B,EAAM88B,gBAAQ,IAAAgC,OAAA,EAAdA,EAAgBviC,eADhBwiC,EAAc/+B,EAAKo9B,SAAUp9B,EAAK+8B,WAGA,SAAlC/8B,MAAAA,GAAc,QAAVg/B,EAAJh/B,EAAM88B,gBAAQ,IAAAkC,OAAA,EAAdA,EAAgBziC,eAvW/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACm/B,EAAAA,IAAa,OA6VXC,CAAcl/B,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAVm/B,EAAJn/B,EAAM88B,gBAAQ,IAAAqC,OAAA,EAAdA,EAAgB5iC,gBAEkB,UAAlCyD,MAAAA,GAAc,QAAVo/B,EAAJp/B,EAAM88B,gBAAQ,IAAAsC,OAAA,EAAdA,EAAgB7iC,eADhB8iC,EAAer/B,EAAKo9B,SAAUp9B,EAAK+8B,WAGD,UAAlC/8B,MAAAA,GAAc,QAAVs/B,EAAJt/B,EAAM88B,gBAAQ,IAAAwC,OAAA,EAAdA,EAAgB/iC,gBAEkB,SAAlCyD,MAAAA,GAAc,QAAVu/B,EAAJv/B,EAAM88B,gBAAQ,IAAAyC,OAAA,EAAdA,EAAgBhjC,eADhBkhC,EAAgBz9B,EAAKo9B,SAAUp9B,EAAK+8B,WAGF,UAAlC/8B,MAAAA,GAAc,QAAVw/B,EAAJx/B,EAAM88B,gBAAQ,IAAA0C,OAAA,EAAdA,EAAgBjjC,eAjV/B,SAAwB4gC,EAAcE,GAClC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC2/B,EAAAA,IAAa,OAuUXC,CAAe1/B,EAAKo9B,SAAUp9B,EAAK+8B,WACD,SAAlC/8B,MAAAA,GAAc,QAAV2/B,EAAJ3/B,EAAM88B,gBAAQ,IAAA6C,OAAA,EAAdA,EAAgBpjC,eAnU/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC8/B,EAAAA,IAA6B,OAyT3BC,CAAc7/B,EAAKo9B,SAAUp9B,EAAK+8B,WACA,WAAlC/8B,MAAAA,GAAc,QAAV8/B,EAAJ9/B,EAAM88B,gBAAQ,IAAAgD,OAAA,EAAdA,EAAgBvjC,eAChBwjC,EAAe//B,EAAKo9B,SAAUp9B,EAAK+8B,WACD,SAAlC/8B,MAAAA,GAAc,QAAVggC,EAAJhgC,EAAM88B,gBAAQ,IAAAkD,OAAA,EAAdA,EAAgBzjC,eAvS/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACmgC,EAAAA,IAAkB,OA6RhBC,CAAclgC,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAVmgC,EAAJngC,EAAM88B,gBAAQ,IAAAqD,OAAA,EAAdA,EAAgB5jC,eAChBkhC,EAAgBz9B,EAAKo9B,SAAUp9B,EAAK+8B,WACF,SAAlC/8B,MAAAA,GAAc,QAAVogC,EAAJpgC,EAAM88B,gBAAQ,IAAAsD,OAAA,EAAdA,EAAgB7jC,gBAEkB,UAAlCyD,MAAAA,GAAc,QAAVqgC,EAAJrgC,EAAM88B,gBAAQ,IAAAuD,OAAA,EAAdA,EAAgB9jC,eADhBshC,EAAc79B,EAAKo9B,SAAUp9B,EAAK+8B,WAGA,SAAlC/8B,MAAAA,GAAc,QAAVsgC,EAAJtgC,EAAM88B,gBAAQ,IAAAwD,OAAA,EAAdA,EAAgB/jC,eA/R/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACygC,EAAAA,IAAyB,OAqRvBC,CAAcxgC,EAAKo9B,SAAUp9B,EAAK+8B,WACA,UAAlC/8B,MAAAA,GAAc,QAAVygC,EAAJzgC,EAAM88B,gBAAQ,IAAA2D,OAAA,EAAdA,EAAgBlkC,eAjR/B,SAAwB4gC,EAAcE,GAClC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC4gC,EAAAA,IAAqB,OAuQnBC,CAAe3gC,EAAKo9B,SAAUp9B,EAAK+8B,WACD,SAAlC/8B,MAAAA,GAAc,QAAV4gC,EAAJ5gC,EAAM88B,gBAAQ,IAAA8D,OAAA,EAAdA,EAAgBrkC,eAChBkhC,EAAgBz9B,EAAKo9B,SAAUp9B,EAAK+8B,WACF,SAAlC/8B,MAAAA,GAAc,QAAV6gC,EAAJ7gC,EAAM88B,gBAAQ,IAAA+D,OAAA,EAAdA,EAAgBtkC,eArQ/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACghC,EAAAA,IAAqB,OA2PnBC,CAAc/gC,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAVghC,EAAJhhC,EAAM88B,gBAAQ,IAAAkE,OAAA,EAAdA,EAAgBzkC,eAvP/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACmhC,EAAAA,IAAe,OA6ObC,CAAclhC,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAVmhC,EAAJnhC,EAAM88B,gBAAQ,IAAAqE,OAAA,EAAdA,EAAgB5kC,eAChBkhC,EAAgBz9B,EAAKo9B,SAAUp9B,EAAK+8B,WACF,WAAlC/8B,MAAAA,GAAc,QAAVohC,EAAJphC,EAAM88B,gBAAQ,IAAAsE,OAAA,EAAdA,EAAgB7kC,eAChBwjC,EAAe//B,EAAKo9B,SAAUp9B,EAAK+8B,WACD,SAAlC/8B,MAAAA,GAAc,QAAVqhC,EAAJrhC,EAAM88B,gBAAQ,IAAAuE,OAAA,EAAdA,EAAgB9kC,gBAEkB,UAAlCyD,MAAAA,GAAc,QAAVshC,EAAJthC,EAAM88B,gBAAQ,IAAAwE,OAAA,EAAdA,EAAgB/kC,eADhBohC,EAAgB39B,EAAKo9B,SAAUp9B,EAAK+8B,WAGF,SAAlC/8B,MAAAA,GAAc,QAAVuhC,EAAJvhC,EAAM88B,gBAAQ,IAAAyE,OAAA,EAAdA,EAAgBhlC,eAjP/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC0hC,EAAAA,IAAqB,OAuOnBC,CAAczhC,EAAKo9B,SAAUp9B,EAAK+8B,WACA,SAAlC/8B,MAAAA,GAAc,QAAV0hC,EAAJ1hC,EAAM88B,gBAAQ,IAAA4E,OAAA,EAAdA,EAAgBnlC,eAnO/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC6hC,EAAAA,IAAa,OAyNXC,CAAc5hC,EAAKo9B,SAAUp9B,EAAK+8B,WACA,aAAlC/8B,MAAAA,GAAc,QAAV6hC,EAAJ7hC,EAAM88B,gBAAQ,IAAA+E,OAAA,EAAdA,EAAgBtlC,eArM/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,SAAUD,EACVhqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACgiC,EAAAA,IAAgB,OA2LdC,CAAc/hC,EAAKo9B,SAAUp9B,EAAK+8B,WACA,UAAlC/8B,MAAAA,GAAc,QAAVgiC,EAAJhiC,EAAM88B,gBAAQ,IAAAkF,OAAA,EAAdA,EAAgBzlC,eAvL/B,SAA4B4gC,EAAcE,GACtC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,SAAUD,EACVhqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACmiC,EAAAA,IAAS,OA6KPC,CAAmBliC,EAAKo9B,SAAUp9B,EAAK+8B,WACL,SAAlC/8B,MAAAA,GAAc,QAAVmiC,GAAJniC,EAAMoiC,gBAAQ,IAAAD,QAAA,EAAdA,GAAgB5lC,gBAEkB,SAAlCyD,MAAAA,GAAc,QAAVqiC,GAAJriC,EAAMoiC,gBAAQ,IAAAC,QAAA,EAAdA,GAAgB9lC,gBAEkB,SAAlCyD,MAAAA,GAAc,QAAVsiC,GAAJtiC,EAAMoiC,gBAAQ,IAAAE,QAAA,EAAdA,GAAgB/lC,eAHhBgmC,EAAgBviC,EAAKwiC,SAAUxiC,EAAKq9B,WAKF,SAAlCr9B,MAAAA,GAAc,QAAVyiC,GAAJziC,EAAMoiC,gBAAQ,IAAAK,QAAA,EAAdA,GAAgBlmC,gBAEkB,UAAlCyD,MAAAA,GAAc,QAAV0iC,GAAJ1iC,EAAMoiC,gBAAQ,IAAAM,QAAA,EAAdA,GAAgBnmC,gBAEkB,SAAlCyD,MAAAA,GAAc,QAAV2iC,GAAJ3iC,EAAMoiC,gBAAQ,IAAAO,QAAA,EAAdA,GAAgBpmC,eAHhBqmC,EAAgB5iC,EAAKwiC,SAAUxiC,EAAKq9B,WAKF,UAAlCr9B,MAAAA,GAAc,QAAV6iC,GAAJ7iC,EAAMoiC,gBAAQ,IAAAS,QAAA,EAAdA,GAAgBtmC,eArJ/B,SAAwB4gC,EAAcE,GAClC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,UAAQ,EACRjqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBA,KAE/Br9B,IAAAA,cAACgjC,EAAAA,IAAgB,CAACpvB,KAAM,MA2IrBqvB,CAAe/iC,EAAKwiC,SAAUxiC,EAAKq9B,WACD,UAAlCr9B,MAAAA,GAAc,QAAVgjC,GAAJhjC,EAAMoiC,gBAAQ,IAAAY,QAAA,EAAdA,GAAgBzmC,gBAEkB,SAAlCyD,MAAAA,GAAc,QAAVijC,GAAJjjC,EAAMoiC,gBAAQ,IAAAa,QAAA,EAAdA,GAAgB1mC,eAzI/B,SAAwB4gC,EAAcE,GAClC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,UAAQ,EACRjqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBA,KAE/Br9B,IAAAA,cAACojC,EAAAA,IAAsB,CAACxvB,KAAM,MA6H3ByvB,CAAenjC,EAAKwiC,SAAUxiC,EAAKq9B,WAGD,SAAlCr9B,MAAAA,GAAc,QAAVojC,GAAJpjC,EAAMoiC,gBAAQ,IAAAgB,QAAA,EAAdA,GAAgB7mC,eA3G/B,SAAuB4gC,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,UAAQ,EACRjqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBA,KAE/Br9B,IAAAA,cAACujC,EAAAA,IAAU,CAAC3vB,KAAM,MAiGf4vB,CAActjC,EAAKwiC,SAAUxiC,EAAKq9B,WA5OjD,SAA0BF,EAAcE,GACpC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACyjC,EAAAA,IAAM,OAmOJC,CAAiBxjC,EAAKo9B,SAAUp9B,EAAK+8B,WAznBpCj9B,IAAAA,cAAA,UAAI88B,MAAAA,OAAQ,EAARA,EAAUG,YAAa,6CAE/Bj9B,IAAAA,cAAA,OAAKC,UAAU,mCACXD,IAAAA,cAAA,SACIA,IAAAA,cAAA,wBACC88B,MAAAA,OAAQ,EAARA,EAAU6G,cAAe,4CAE9B3jC,IAAAA,cAAA,SACIA,IAAAA,cAAA,qBAAe,KAAE88B,MAAAA,GAAkB,QAAVK,EAARL,EAAUE,gBAAQ,IAAAG,OAAA,EAAlBA,EAAoBjQ,gBAAiB,OAE1DltB,IAAAA,cAAA,SACIA,IAAAA,cAAA,sCACC88B,MAAAA,OAAQ,EAARA,EAAU8G,mBAAoB,UA+gBnD,IAAwB1jC,EAASk9B,EAAAM,EAAAE,EAAAE,EAAAE,EAAAG,EAAAG,EAAAG,EAAAG,EAAAG,EAAAC,EAAAE,EAAAG,EAAAC,EAAAE,EAAAC,EAAAC,EAAAG,EAAAG,EAAAE,EAAAG,EAAAC,EAAAC,EAAAC,EAAAG,EAAAG,EAAAC,EAAAG,EAAAG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAG,EAAAG,EAAAG,EAAAG,GAAAE,GAAAC,GAAAG,GAAAC,GAAAC,GAAAE,GAAAG,GAAAC,GAAAG,GAhfTjG,GAAcE,IAgBtC,SAASM,EAAgBR,EAAcE,GACnC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,SAAUD,EACVhqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC6jC,EAAAA,GAAW,OAKxB,SAAS9F,EAAcV,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,SAAUD,EACVhqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACgiC,EAAAA,IAAgB,OAqB7B,SAASrE,EAAgBN,EAAcE,GACnC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC0+B,EAAAA,IAAW,OAqExB,SAASO,EAAc5B,EAAcE,GACjC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACy9B,EAAAA,IAAU,OAqBvB,SAAS8B,EAAelC,EAAcE,GAClC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAAC8jC,EAAAA,IAAO,OAqCpB,SAAS7D,EAAe5C,EAAcE,GAClC,OACIv9B,IAAAA,cAAA,KACIw9B,SAAUD,EACVv3B,OAAO,SACPuN,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBE,KAE/Bv9B,IAAAA,cAACujC,EAAAA,IAAU,OAqKvB,SAASd,EAAgBpF,EAAcE,GACnC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,UAAQ,EACRjqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBA,KAE/Br9B,IAAAA,cAAC+jC,EAAAA,IAAW,CAACnwB,KAAM,MAK/B,SAASkvB,EAAgBzF,EAAcE,GACnC,OACIv9B,IAAAA,cAAA,KACIgG,OAAO,SACPw3B,UAAQ,EACRjqB,IAAI,aACJtT,UAAU,eACVkL,MAAOoyB,EACPr+B,KAAMm+B,EAAO,aACD,mBAAmBA,KAE/Br9B,IAAAA,cAACu+B,EAAAA,IAAW,CAAC3qB,KAAM,M,MCliBxB,MAAMowB,EAAsEnkC,IAC/E,MAAM,iBACFokC,EAAgB,UAChBhkC,EAAS,0BACTikC,EAAyB,UACzBpkC,EAAS,0BACTC,EAAyB,2BACzBynB,GAEA3nB,EAKJ,OAJAvF,QAAQC,IAAI,qBAAsB0pC,GAK9BjkC,IAAAA,cAAAA,IAAAA,SAAA,KACKikC,EAAiB5tC,OAAS,EACvB2J,IAAAA,cAAA,OAAKC,UAAWA,GACXgkC,MAAAA,OAAgB,EAAhBA,EAAkBrwC,KAAI,CAACuwC,EAAehmC,IACnC6B,IAAAA,cAACokC,EAAgB,CAAC9qC,GAAI6qC,EAAS7qC,GAAI6qC,SAAUA,EAAU5nC,IAAK4nC,EAAS7qC,OAEzE0G,IAAAA,cAAA,OAAKC,UAAU,0CACXD,IAAAA,cAAA,UAAQM,QAAS4jC,EAA2BjkC,UAAU,iCAClB,UAA/BunB,EAAyC1nB,EAAU4nB,oBAAsB5nB,EAAU6nB,gBAMhG3nB,IAAAA,cAAA,OAAKC,UAAU,+BAGoB,UAA9BF,EAAwCD,EAAUiC,gCAAkCjC,EAAUkC,4BAO7GoiC,EAAoBvkC,IACtB,MAAM,SAAEskC,GAAatkC,EAErB,OACIG,IAAAA,cAAA,OAAKC,UAAU,2BACXD,IAAAA,cAAA,OAAKC,UAAU,mCACXD,IAAAA,cAAA,KAAGd,KAAMilC,EAASE,WAAU,aAAcF,EAASh5B,MAAOoI,IAAI,aAAavN,OAAO,UAC9EhG,IAAAA,cAAA,MAAIC,UAAU,kCAAkCkkC,EAASh5B,QAE7DnL,IAAAA,cAAA,OAAKC,UAAU,mCACXD,IAAAA,cAAA,WACKmkC,MAAAA,OAAQ,EAARA,EAAUG,UAAWtkC,IAAAA,cAAA,UAAKmkC,MAAAA,OAAQ,EAARA,EAAUG,QAAQ,KAC5CH,MAAAA,OAAQ,EAARA,EAAUI,kBAAmBvkC,IAAAA,cAAA,UAAKmkC,MAAAA,OAAQ,EAARA,EAAUI,gBAAgB,KAC5DJ,MAAAA,OAAQ,EAARA,EAAUK,mBAAoBxkC,IAAAA,cAAA,UAAKmkC,MAAAA,OAAQ,EAARA,EAAUK,iBAAiB,MAGvExkC,IAAAA,cAAA,OAAKC,UAAU,wCACXD,IAAAA,cAAA,SACKmkC,EAASM,aAAe,GAAGN,MAAAA,OAAQ,EAARA,EAAUM,YAAYC,MAAM,EAAG,OAAOP,EAASM,YAAYpuC,OAAS,IAAM,MAAQ,QAI1H2J,IAAAA,cAAA,OAAKC,UAAU,mCACXD,IAAAA,cAAA,OAAKC,UAAU,kCACVkkC,EAASQ,oBACN3kC,IAAAA,cAAA,KAAGd,KAAMilC,EAASE,WAAU,aAAcF,EAASh5B,MAAOoI,IAAI,aAAavN,OAAO,UAC9EhG,IAAAA,cAAA,OAAKyB,IAAK0iC,EAASQ,oBAAqBjjC,IAAI,MAGhD1B,IAAAA,cAAA,OAAKC,UAAU,qCAAmC,aAG1DD,IAAAA,cAAA,OAAKC,UAAU,gCACXD,IAAAA,cAAA,KAAGd,KAAMilC,EAASE,WAAU,aAAcF,EAASh5B,MAAOoI,IAAI,aAAavN,OAAO,UAC9EhG,IAAAA,cAAA,6BACkBA,IAAAA,cAAC4kC,EAAAA,IAAiB,Y,wBCrD5D,MAimBA,EA/lB0C/kC,IAAQ,IAAAglC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAC9C,MAAM,sBACFnhB,EAAqB,SACrB7sB,EAAQ,YACRwjC,EAAW,iBACXC,EAAgB,eAChBC,EAAc,kBAIdS,EAAiB,wBACjBC,EAAuB,cACvBG,EAAa,SACbvY,EAAQ,YACRwY,EAAW,kBACXE,EAAiB,eACjBf,EAAc,WACdE,EAAU,cAEVE,EAAa,iCAEbO,EAAgC,uBAEhCM,EAAsB,mBACtBC,EAAkB,QAClB5kC,EAAO,KACP4V,EAAI,sBACJwtB,EAAqB,OACrBtlC,EAAM,eACN+mC,EAAc,mBACdE,EAAkB,qBAClBtJ,EAAoB,yBACpBuJ,EAAwB,UACxBr8B,EAAS,0BACTC,EAAyB,4BACzBusB,EAA2B,2BAC3B9E,GACA3nB,EAGJ,IAAIslC,EAEAA,EADAhuC,GAAWA,EAAQ+T,SAAW/T,EAAQ+T,QAAQzW,OAAS0C,EAAQ+T,QAAQzW,MAAMmB,EAC9D,IAAIuB,EAAQ+T,QAAQzW,MAAMmB,KAE1BmX,EAAK/Z,SAASuK,QAAUwP,EAAK/Z,SAASuK,OAAOoE,KAEhEwjC,EAAgBA,EAAwB77B,OAAO1I,QAAQ,KAAM,IAG7D,MAAOwkC,EAAeC,IAAoBp1B,EAAAA,EAAAA,UAAS,aAC5Cq1B,EAAeC,IAAoBt1B,EAAAA,EAAAA,UAAS,aAC5Cg0B,EAAkBuB,IAAuBv1B,EAAAA,EAAAA,UAAgB,KACzDw1B,EAA4BC,IAAiCz1B,EAAAA,EAAAA,YAE9D01B,EAA0B,GAChCrrC,QAAQC,IAAIsF,EAAMkN,KAAKsY,eAEvB,MAAM3iB,GAAiC,QAApBmiC,EAAUhlC,EAAMkN,YAAI,IAAA83B,GAAe,QAAfA,EAAVA,EAAYxf,qBAAa,IAAAwf,GAAQ,QAARA,EAAzBA,EAA2BtnC,cAAM,IAAAsnC,OAAA,EAAjCA,EAAmCniC,cAC1DkjC,GAAsBA,KAEpBL,EADkB,aAAlBD,EACiB,WAEA,aAGnBO,GAA+D,YAAtC,QAAVf,EAAAjlC,EAAMkN,YAAI,IAAA+3B,GAAe,QAAfA,EAAVA,EAAYzf,qBAAa,IAAAyf,GAAQ,QAARA,EAAzBA,EAA2BvnC,cAAM,IAAAunC,OAAA,EAAjCA,EAAmClyC,WAExDkzC,EAAAA,EAAAA,YAAU,KACF7wC,EAAO8wC,WACPV,EAAiB,SAEtB,IAEH,MAAMW,GAA2B/tC,UAC7B,IAAIguC,EAGJ,GAFAZ,EAAiB,YAEe,IAA5BpB,EAAiB5tC,OAAc,KAAA6vC,EAC/B,IACID,QAAwBE,EAAAA,EAAAA,IACpB,CAAEntC,cAAe7B,EAAQwJ,cAAewlB,YAAa,OACrDgf,EACA,GAEN,MAAOt/B,GACLvL,QAAQC,IAAIsL,GAgBhB,OAdAvL,QAAQC,IAAI,yBAA0B0rC,GACtC3rC,QAAQ8rC,MAAM,sBAAuBnC,GACrCuB,EAAoB,IAAmB,QAAlBU,EAAGD,SAAe,IAAAC,GAAQ,QAARA,EAAfA,EAAiBr4B,cAAM,IAAAq4B,OAAA,EAAvBA,EAAyBG,UACjDX,EAA8B,CAC1BY,KAAML,EAAgBp4B,OAAOy4B,KAC7BC,SAAUN,EAAgBp4B,OAAO04B,SACjCC,aAAcP,EAAgBp4B,OAAO24B,eAGzClsC,QAAQC,IAAI,wBAAyB0rC,QACrC3rC,QAAQ8rC,MAAM,qBAAsBnC,KAQtCC,GAA4BjsC,UAC9B,IAAIguC,EAEmB,IAAAQ,EAaoDC,EAb3E,IAAKzC,EASD,OARAgC,QAAwBE,EAAAA,EAAAA,IAAyB,CAAEntC,cAAe7B,EAAQwJ,cAAewlB,YAAa,OAASgf,EAAc,GAC7HK,EAAoB,IAAmB,QAAlBiB,EAAGR,SAAe,IAAAQ,GAAQ,QAARA,EAAfA,EAAiB54B,cAAM,IAAA44B,OAAA,EAAvBA,EAAyBJ,eACjDX,EAA8B,CAC1BY,KAAML,EAAgBp4B,OAAOy4B,KAC7BC,SAAUN,EAAgBp4B,OAAO04B,SACjCC,aAAcP,EAAgBp4B,OAAO24B,eAMzCf,GAA8BA,EAA2Ba,OACrDrC,EAAiB5tC,OAASovC,EAA2Be,eACrDP,QAAwBE,EAAAA,EAAAA,IACpB,CAAEntC,cAAe7B,EAAQwJ,cAAewlB,YAAa,OACrDgf,EAEAM,EAA2Ba,KAAO,GAEtCd,EAAoB,IAAIvB,KAAoC,QAAlByC,EAAGT,SAAe,IAAAS,GAAQ,QAARA,EAAfA,EAAiB74B,cAAM,IAAA64B,OAAA,EAAvBA,EAAyBL,UACtEX,EAA8B,CAC1BY,KAAML,EAAgBp4B,OAAOy4B,KAC7BC,SAAUN,EAAgBp4B,OAAO04B,SACjCC,aAAcP,EAAgBp4B,OAAO24B,kBAwB/CG,GAAkBA,CACpB9mC,EACAk7B,EACAvM,EACAoY,EACA9mC,IAEI0uB,EACOxuB,IAAAA,aACHH,EAAMisB,UACN,GACA+a,GAAWrY,EAAgBoY,GAC3BE,GAAc/L,EAAYj7B,IAG3B,KAGLgnC,GAAgBA,CAACjnC,EAA6BC,KAChD,MAAM,SAAE/M,EAAQ,oBAAE89B,EAAmB,wBAAEC,GAA4BjxB,EACnE,OAAI9M,EAEIiN,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAK8vB,GACN9wB,IAAAA,cAAA,MAAIC,UAAU,mDACuB,UAAhCqsB,EAA0CxsB,MAAAA,OAAS,EAATA,EAAWknC,kBAAoBlnC,MAAAA,OAAS,EAATA,EAAWmnC,YAExF9K,EACDn8B,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAK6vB,GACL99B,EAASa,KAAI,CAACszC,EAAS/oC,IACpB6B,IAAAA,cAACA,IAAAA,SAAc,CAACzD,IAAK4B,GAAQ+oC,OAOzClnC,IAAAA,cAAA,OAAKC,UAAU,+CACXD,IAAAA,cAAA,MAAIC,UAAU,mDACuB,UAAhCqsB,EAA0CxsB,MAAAA,OAAS,EAATA,EAAWknC,kBAAoBlnC,MAAAA,OAAS,EAATA,EAAWmnC,YAEzFjnC,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAK6vB,MAOpBgW,GAAaA,CAAChnC,EAAyB+mC,KACzC,MAAM,iBAAErY,EAAgB,eAAEC,GAAmB3uB,EAC7C,OAAI2uB,IAAmBoY,EACZ5mC,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKutB,GAAmBC,GAEjC,MAqBL2Y,GAAetnC,IACjB,MAAM,MAAEsL,EAAK,eAAE6hB,GAAmBntB,EAElC,OAAIsL,EAEInL,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKgsB,GACNhtB,IAAAA,cAAA,UACKmL,EAAMgiB,YACNhiB,EAAMmiB,UAAS,IAAGniB,EAAMoiB,WAAU,MAK5C,MAGL6Z,GAAoBnvC,YAEpB2uC,GAAmE,QAAnD7B,EAAGllC,EAAM1I,QAAQwJ,cAAcpM,eAAeE,aAAK,IAAAswC,OAAA,EAAhDA,EAAkDjvC,eA+BrEuxC,GAAkD,UAAhC/a,EAA0CxsB,EAAUwnC,0BAA4BxnC,EAAUynC,mBAC5GC,GAAkD,UAAhClb,EAA0CxsB,EAAU2nC,0BAA4B3nC,EAAU4nC,mBAEpG,IAAAC,GAAAC,GAAd,OAAI1kB,EAEIljB,IAAAA,cAAC6nC,EAAAA,OAAM9/B,OAAA/G,OAAA,GAAK+iB,IACN9uB,EAAO8wC,WAC2C,YAAtC,QAAV4B,GAAA9nC,EAAMkN,YAAI,IAAA46B,IAAe,QAAfA,GAAVA,GAAYtiB,qBAAa,IAAAsiB,IAAQ,QAARA,GAAzBA,GAA2BpqC,cAAM,IAAAoqC,QAAA,EAAjCA,GAAmC/0C,WACa,aAAtC,QAAVg1C,GAAA/nC,EAAMkN,YAAI,IAAA66B,IAAe,QAAfA,GAAVA,GAAYviB,qBAAa,IAAAuiB,IAAQ,QAARA,GAAzBA,GAA2BrqC,cAAM,IAAAqqC,QAAA,EAAjCA,GAAmCh1C,WACnCgoC,EAEH/6B,EAAM5K,OAAOgO,WAAaA,EAAAA,EAAS6kC,KAAOX,GAAYtM,GACtDh7B,EAAM5K,OAAOgO,WAAaA,EAAAA,EAAS6kC,KAAOrM,EAC1CC,EAvJmBqM,EAC5BC,EACAjN,EACAvM,EACAoY,EACA9mC,IAEOE,IAAAA,aACHgoC,EAAWrc,MACX,GACAqc,EAAWpc,YACX+a,GAAgBqB,EAAYjN,EAAYvM,EAAgBoY,EAAkB9mC,GAC1EkoC,EAAWnc,aA4INkc,CAAwBnM,EAAmBb,EAAYE,EAAe2L,GAAkB/mC,EAAMC,WAC/FE,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAK86B,GAAyBC,GACnC/7B,IAAAA,cAAA,OAAKC,UAAU,gCACXD,IAAAA,cAAA,WACIA,IAAAA,cAAA,UACIM,QAASA,IAAM+kC,EAAiB,YAChCplC,UAAW,4CAA6D,aAAlBmlC,EAA+B,SAAW,KAE/D,UAAhC9Y,EAA0CxsB,EAAUmoC,wBAA0BnoC,EAAUooC,kBAE7FloC,IAAAA,cAAAA,IAAAA,SAAA,KACK/K,EAAOgO,WAAaA,EAAAA,EAAS6kC,KAE1B9nC,IAAAA,cAAA,UACIC,UAAW,mBAAoC,QAAlBmlC,EAA0B,SAAW,IAClE9kC,QAASA,IAAM+kC,EAAiB,QAEC,UAAhC/Y,EAA0CxsB,EAAUqoC,kBAAoBroC,EAAUsoC,YAI3FpoC,IAAAA,cAAA,UACIC,UAAW,mBAAoC,cAAlBmlC,EAAgC,SAAW,IACxE9kC,QAASA,IAAM+kC,EAAiB,cAEC,UAAhC/Y,EAA0CxsB,EAAUuoC,wBAA0BvoC,EAAUwoC,kBAE5FrzC,EAAOgO,WAAaA,EAAAA,EAAS6kC,KAC1B9nC,IAAAA,cAAA,UACIM,QAASA,IAAM+kC,EAAiB,sBAChCplC,UAAW,mBAAoC,uBAAlBmlC,EAAyC,SAAW,KAEhD,UAAhC9Y,EACKxsB,EAAUyoC,gCACVzoC,EAAU0oC,0BAGxBxoC,IAAAA,cAAA,UACIC,UAAW,mBAAoC,aAAlBmlC,EAA+B,SAAW,IACvE9kC,QAAS0lC,IAEwB,UAAhC1Z,EACKxsB,EAAU2oC,4BACV3oC,EAAU4oC,wBAI3B7oC,EAAM5K,OAAOgO,WAAaA,EAAAA,EAAS6kC,KAChC9nC,IAAAA,cAAA,OAAKC,UAAU,4BACXD,IAAAA,cAAA,YAAO66B,EAAe1vB,MAAMoiB,cAIrB,aAAlB6X,IAAiCnwC,EAAO8wC,WACrC/lC,IAAAA,cAAAA,IAAAA,SAAA,KACKH,EAAM5K,OAAOgO,WAAaA,EAAAA,EAAS6kC,KAAOlV,GACvC5yB,IAAAA,cAAA,OAAKC,UAAU,kCACXD,IAAAA,cAAA,QACIM,QAASslC,GACT3lC,UAAW,gCACW,aAAlBqlC,EAA+B,qBAAuB,yBAKtEtlC,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKq6B,GAEa,aAAlBiK,EAA+BpuC,EAAWyjC,GAE9CqB,GAIU,QAAlBoJ,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKq6B,GAELX,IAMM,cAAlB0K,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAI,CAAC9mC,UAAU,6CACZD,IAAAA,cAAC28B,EAAiB,CACdxvB,SAAS,WACT7T,GAAG,gBACHnC,QAAS0I,EAAM1I,QACfylC,UAAWl6B,GACXimC,wBAAyBhD,EACzB1lC,UAAU,iCACV8M,KAAMrK,GACN0kC,kBAAmBA,GACnBtnC,UAAWA,EACXC,0BAA2BA,KAGlCm8B,GAIU,uBAAlBkJ,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAI,CAAC9mC,UAAU,6CACZD,IAAAA,cAACJ,EAAAA,EAAqB,CAClB1I,SAAUqjC,EACVpjC,QAAS0I,EAAM1I,QACfmC,GAAI,GACJ6T,SAAU,GACVJ,KAAMwtB,EACNz6B,UAAWA,EACXC,0BAA2BA,EAC3BynB,2BAA4BA,MAMzB,aAAlB4d,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAI,CAAC9mC,UAAU,uCACZD,IAAAA,cAACgkC,EAAyB,CACtB72B,SAAS,WACT7T,GAAG,gBACHnC,QAAS0I,EAAM1I,QACf8sC,iBAAkBA,EAElBwB,2BAA4BA,EAC5BxlC,UAAU,2BACV8M,KAAMk3B,EACNC,0BAA2BA,GAC3BpkC,UAAWA,EACXC,0BAA2BA,EAC3BynB,2BAA4BA,OAUpDxnB,IAAAA,cAAC6nC,EAAAA,OAAM9/B,OAAA/G,OAAA,GAAK+iB,IACN9uB,EAAO8wC,WAC2C,YAAtC,QAAVf,EAAAnlC,EAAMkN,YAAI,IAAAi4B,GAAe,QAAfA,EAAVA,EAAY3f,qBAAa,IAAA2f,GAAQ,QAARA,EAAzBA,EAA2BznC,cAAM,IAAAynC,OAAA,EAAjCA,EAAmCpyC,WACa,aAAtC,QAAVqyC,EAAAplC,EAAMkN,YAAI,IAAAk4B,GAAe,QAAfA,EAAVA,EAAY5f,qBAAa,IAAA4f,GAAQ,QAARA,EAAzBA,EAA2B1nC,cAAM,IAAA0nC,OAAA,EAAjCA,EAAmCryC,WACnCgoC,EAEJ56B,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKw6B,GACLvmC,EAAOgO,WAAaA,EAAAA,EAAS6kC,KAAOhB,GAAc/L,EAAYl7B,EAAMC,WACrEE,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKs6B,GACNt7B,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAK86B,GAAyBC,GACnC/7B,IAAAA,cAAA,OAAKC,UAAU,iDACV46B,GAAkBsM,GAAYtM,GAC9BY,GAELz7B,IAAAA,cAAA,OAAKC,UAAU,6CACVg7B,IAAkB2L,IAAoBC,GAAW5L,IAEtDj7B,IAAAA,cAAA,OACIC,UACIhL,EAAOgO,WAAaA,EAAAA,EAAS6kC,IACvB,+BACA,oDAGV9nC,IAAAA,cAAA,YACM/K,EAAO8wC,WACL/lC,IAAAA,cAAA,UACIM,QAASA,IAAM+kC,EAAiB,YAChCplC,UAAW,4CAA6D,aAAlBmlC,EAA+B,SAAW,KAE/D,UAAhC9Y,EACKxsB,EAAUmoC,wBACVnoC,EAAUooC,mBAItBrC,IAAgE,aAAtC,QAAVX,EAAArlC,EAAMkN,YAAI,IAAAm4B,GAAe,QAAfA,EAAVA,EAAY7f,qBAAa,IAAA6f,GAAQ,QAARA,EAAzBA,EAA2B3nC,cAAM,IAAA2nC,OAAA,EAAjCA,EAAmCtyC,YACjDoN,IAAAA,cAAA,UACIM,QAASA,IAAM+kC,EAAiB,OAChCplC,UAAW,mBAAoC,QAAlBmlC,EAA0B,SAAW,KAEjC,UAAhC9Y,EAA0CxsB,EAAUqoC,kBAAoBroC,EAAUsoC,YAG3FpoC,IAAAA,cAAA,UACIM,QAASA,IAAM+kC,EAAiB,aAChCplC,UAAW,mBAAoC,cAAlBmlC,EAAgC,SAAW,KAEvC,UAAhC9Y,EAA0CxsB,EAAUuoC,wBAA0BvoC,EAAUwoC,kBAE5FrzC,EAAOgO,WAAaA,EAAAA,EAAS6kC,KAC1B9nC,IAAAA,cAAA,UACIM,QAASA,IAAM+kC,EAAiB,sBAChCplC,UAAW,mBAAoC,uBAAlBmlC,EAAyC,SAAW,KAEhD,UAAhC9Y,EACKxsB,EAAUyoC,gCACVzoC,EAAU0oC,0BAGxBxoC,IAAAA,cAAA,UACIM,QAAS0lC,GACT/lC,UAAW,mBAAoC,aAAlBmlC,EAA+B,SAAW,KAEtC,UAAhC9Y,EACKxsB,EAAU2oC,4BACV3oC,EAAU4oC,uBAGvB7oC,EAAM5K,OAAOgO,WAAaA,EAAAA,EAAS6kC,KAChC9nC,IAAAA,cAAA,OAAKC,UAAU,4BACXD,IAAAA,cAAA,YAAO66B,EAAe1vB,MAAMoiB,cAIrB,aAAlB6X,IAAiCnwC,EAAO8wC,WACrC/lC,IAAAA,cAAAA,IAAAA,SAAA,KACK4yB,GACG5yB,IAAAA,cAAA,OAAKC,UAAU,kCACXD,IAAAA,cAAA,UACIM,QAASslC,GACT3lC,UAAU,8DAEVD,IAAAA,cAAA,YAAyB,aAAlBslC,EAA+B+B,GAAkBG,MAIpExnC,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKq6B,GAEa,aAAlBiK,EAA+BpuC,EAAWyjC,GAE9CqB,GAIU,QAAlBoJ,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAIh/B,OAAA/G,OAAA,GAAKq6B,GAELX,IAMM,cAAlB0K,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAI,CAAC9mC,UAAU,6CACZD,IAAAA,cAAC28B,EAAiB,CACdxvB,SAAS,WACT7T,GAAG,gBACHnC,QAAS0I,EAAM1I,QACfylC,UAAWl6B,GACXimC,wBAAyBhD,EACzB1lC,UAAU,iCACV8M,KAAMrK,GACN0kC,kBAAmBA,GACnBtnC,UAAWA,EACXC,0BAA2BA,KAGlCm8B,GAIU,uBAAlBkJ,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAI,CAAC9mC,UAAU,6CACZD,IAAAA,cAACJ,EAAAA,EAAqB,CAClB1I,SAAUqjC,EACVpjC,QAAS0I,EAAM1I,QACfmC,GAAI,GACJ6T,SAAU,GACVJ,KAAMwtB,EACNz6B,UAAWA,EACXC,0BAA2BA,EAC3BynB,2BAA4BA,MAMzB,aAAlB4d,GACGplC,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAC+mC,EAAAA,KAAI,CAAC9mC,UAAU,uCACZD,IAAAA,cAACgkC,EAAyB,CACtB72B,SAAS,WACT7T,GAAG,gBACHnC,QAAS0I,EAAM1I,QACf8sC,iBAAkBA,EAElBwB,2BAA4BA,EAC5BxlC,UAAU,2BACV8M,KAAMk3B,EACNC,0BAA2BA,GAC3BpkC,UAAWA,EACXC,0BAA2BA,EAC3BynB,2BAA4BA,OAO/CvyB,EAAOgO,WAAaA,EAAAA,EAAS6kC,KAAOhB,GAAc/L,EAAYl7B,EAAMC,e,inBCtoBrF,MAAM8oC,EAAU,CAAEC,QAAS,GAAIzzB,YAAa,IAmBlC0zB,EAA8BA,CAACC,EAAqBC,KAUlD,GADAJ,EAAQxzB,YAAY2zB,GAAuBC,GACtCJ,EAAQxzB,YAAY2zB,GAAqBE,QAC1C,MAAM,IAAI/yC,MAAM,oBAAsB6yC,EAAsB,mCAEhEH,EAAQxzB,YAAY2zB,GAAqBE,QAAQC,UAAUC,eAAiBJ,EACxEH,EAAQxzB,YAAY2zB,GAAqBE,QAAQC,UAAU5vC,KAC3DsvC,EAAQxzB,YAAYwzB,EAAQxzB,YAAY2zB,GAAqBE,QAAQC,UAAU5vC,IAAMyvC,IAMhGH,EAAQC,QAAQ,+BAAiC,CAC9CO,EAAGA,IAAMC,EAAQ,MACjBC,MAAO,kBACPC,GAAI,CAAC,CAACn2B,KAAK,WAAao2B,KAAK,0EAA2EC,MAAO,GAAG,CAACr2B,KAAK,oBAAsBo2B,KAAK,oFAAqFC,MAAO,GAAG,CAACr2B,KAAK,iBAAmBo2B,KAAK,0EAA2EC,MAAO,GAAG,CAACr2B,KAAK,eAAiBo2B,KAAK,uEAAwEC,MAAO,GAAG,CAACr2B,KAAK,gBAAkBo2B,KAAK,sDAAuDC,MAAO,GAAG,CAACr2B,KAAK,WAAao2B,KAAK,8EAA+EC,MAAO,GAAG,CAACr2B,KAAK,WAAao2B,KAAK,0EAA2EC,MAAO,GAAG,CAACr2B,KAAK,sBAAwBo2B,KAAK,8EAA+EC,MAAO,IAEx4BC,KAAK,EACLC,GAAI,YACJC,EAAG,8BACHt6B,EAAG,YAEHu6B,IAAK,GAGLpN,GAAI,2CAOAqM,EAF4B,0EACXO,EAAQ,MAQzBP,EAF4B,oFACXO,EAAQ,MAQzBP,EAF4B,uEACXO,EAAQ,KAQzBP,EAF4B,0EACXO,EAAQ,KAQzBP,EAF4B,8EACXO,EAAQ,MAQzBP,EAF4B,8EACXO,EAAQ,MAQzBP,EAF4B,0EACXO,EAAQ,MAQzBP,EAF4B,sDACXO,EAAQ,OAMjC7pC,OAAOsqC,aAAetqC,OAAOsqC,cAAgB,GAC7CtqC,OAAOsqC,aAAajB,QAAOv1C,EAAAA,EAAA,GACpBkM,OAAOsqC,aAAajB,SAAW,IAC/BD,EAAQC,SAGXrpC,OAAOsqC,aAAa10B,YAAW9hB,EAAAA,EAAA,GAC5BkM,OAAOsqC,aAAa10B,aAAe,IACnCwzB,EAAQxzB,aAEY,MAAM20B,EAAiB,GAC9BA,EAAe,uFAAyF,CAChHX,EAAGA,IAAMC,EAAQ,MACjBW,GAAI,mDAEpBxqC,OAAOsqC,aAAetqC,OAAOsqC,cAAgB,GAC7CtqC,OAAOsqC,aAAaC,eAAcz2C,EAAAA,EAAA,GACPkM,OAAOsqC,aAAaC,gBAAkB,IACtCA,I,mBCpI3BE,EAAOC,QAAUlqC,O,oBCAjBiqC,EAAOC,QAAUC,W","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/actions/base-collection-action.ts?38c1","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/actions/get-full-products-by-collection.ts?c88a","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/actions/get-mapped-search-configuration.ts?3738","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/actions/get-refiners-for-collection.ts?d711","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/actions/get-product-refiner-hierarchy.ts?3111","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/actions/url-utils.ts?1118","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/curated-collections-list-view.tsx?6d6b","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/list-page-state.ts?1cac","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/moe-search-result-container.props.autogenerated.ts?e2d6","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/utilities.ts?ba40","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/choice-summary.tsx?96d2","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/error-message.tsx?5fa0","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/feature-search-result-item.tsx?6940","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/link.tsx?3524","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/modal.tsx?3108","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/product-list-view.tsx?7e34","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/product-search-result-items.tsx?5f0e","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/range-refine-item.tsx?1b3f","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/refine-item.tsx?60d1","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/refine-submenu.tsx?1cc8","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/separator.tsx?006c","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/title.tsx?a21c","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/moe-search-result-container.tsx?1750","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/artifacts-list-view.tsx?1d46","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/components/external-resources-list.view.tsx?6bc9","webpack://Msdyn365.Commerce.Online/./src/modules/moe-search-result-container/moe-search-result-container.view.tsx?97cf","webpack://Msdyn365.Commerce.Online/./lib/moe-search-result-container/module-registration.js?c9c2","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CacheType, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { convertToString, IQueryResultSettings, ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\r\nimport { buildCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { toJS } from 'mobx';\r\n\r\nimport { hydrateRefinersFromUrl } from './url-utils';\r\n\r\n/**\r\n * Export listPageType.\r\n */\r\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\r\n\r\n/**\r\n * Get include attributes from config.\r\n * @param inputData - ICreateActionContext.\r\n * @returns Boolean.\r\n */\r\nfunction getIncludeAttributes(inputData: ICreateActionContext, IGeneric>): boolean {\r\n if (inputData && inputData.config && inputData.config.includeAttributes !== undefined && inputData.config.includeAttributes === true) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Get updateRefinerPanel from config.\r\n * @param inputData - ICreateActionContext.\r\n * @returns Boolean.\r\n */\r\nfunction getUpdateRefinerPanel(inputData: ICreateActionContext, IGeneric>): boolean {\r\n return !!inputData.config?.updateRefinerPanel;\r\n}\r\n\r\n/**\r\n * BaseCollection Action Input.\r\n */\r\nexport class BaseCollectionInput implements IActionInput {\r\n public pageType: listPageType;\r\n\r\n public category: number | undefined;\r\n\r\n public searchText: string | undefined;\r\n\r\n public refiners: ProductRefinerValue[];\r\n\r\n public queryResultSettings: IQueryResultSettings;\r\n\r\n public apiSettings: ICommerceApiSettings;\r\n\r\n public includeAttributes: boolean | undefined;\r\n\r\n public locale?: string;\r\n\r\n public isUpdateRefinerPanel?: boolean;\r\n\r\n public constructor(\r\n pageType: listPageType,\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ProductRefinerValue[],\r\n category: number | undefined,\r\n searchText: string | undefined,\r\n includeAttributes: boolean | undefined,\r\n isUpdateRefinerPanel?: boolean | undefined,\r\n locale?: string\r\n ) {\r\n this.pageType = pageType;\r\n this.apiSettings = apiSettings;\r\n this.category = category;\r\n this.searchText = searchText;\r\n this.queryResultSettings = queryResultSettings;\r\n this.refiners = refiners;\r\n this.includeAttributes = includeAttributes;\r\n this.isUpdateRefinerPanel = isUpdateRefinerPanel;\r\n this.locale = locale;\r\n }\r\n\r\n public getCacheKey = () => {\r\n const queryResultSettings = {\r\n ...this.queryResultSettings.Paging,\r\n ...toJS(this.queryResultSettings.Sorting)\r\n };\r\n\r\n const cacheKey = buildCacheKey(\r\n `${this.pageType}-${this.locale}-${this.category || this.searchText}-${this.refiners.map(\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n refiner => `${refiner.RefinerRecordId + (refiner.LeftValueBoundString || '') + (refiner.RightValueBoundString || '')}-`\r\n )}-${convertToString(queryResultSettings)}`,\r\n this.apiSettings,\r\n this.locale\r\n );\r\n return cacheKey;\r\n };\r\n\r\n public getCacheObjectType = () => 'CollectionActionResult';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n// TODO: Create a data model here or import one to capture the response of the action\r\nexport interface IGetFullProductsByCollectionData {\r\n text: string;\r\n}\r\n\r\nexport type CollectionClassConstructor = new (\r\n pageType: listPageType,\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ProductRefinerValue[],\r\n category: number | undefined,\r\n searchText: string | undefined,\r\n includeAttributes: boolean | undefined,\r\n isUpdateRefinerPanel?: boolean | undefined,\r\n locale?: string\r\n) => BaseCollectionInput;\r\n\r\n/**\r\n * TODO: Use this function to create the input required to make the action call.\r\n * @param args\r\n * @param inputClassConstuctor\r\n */\r\nexport const createBaseCollectionInput = (\r\n args: ICreateActionContext,\r\n inputClassConstuctor: CollectionClassConstructor\r\n): BaseCollectionInput => {\r\n const pageType =\r\n args.requestContext.urlTokens.pageType === 'Category' || (args.requestContext.query && args.requestContext.query.categoryId)\r\n ? 'Category'\r\n : 'Search';\r\n\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\r\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\r\n const includeAttributes = getIncludeAttributes(args);\r\n const isUpdateRefinerPanel = getUpdateRefinerPanel(args);\r\n\r\n if (args.requestContext.query && args.requestContext.query.sorting) {\r\n queryResultSettings.Sorting = { Columns: JSON.parse(decodeURIComponent(args.requestContext.query.sorting)) };\r\n }\r\n\r\n if (pageType === 'Category') {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n +(args.requestContext.urlTokens.itemId || (args.requestContext.query && args.requestContext.query.categoryId) || 0),\r\n undefined,\r\n includeAttributes,\r\n isUpdateRefinerPanel,\r\n args.requestContext.locale\r\n );\r\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.q) {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n undefined,\r\n args.requestContext.query.q,\r\n includeAttributes,\r\n isUpdateRefinerPanel,\r\n args.requestContext.locale\r\n );\r\n } else if (\r\n pageType === 'Search' &&\r\n args.requestContext.query &&\r\n args.requestContext.query.productId &&\r\n args.requestContext.query.recommendation\r\n ) {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n undefined,\r\n JSON.stringify({ ProductId: args.requestContext.query.productId, Recommendation: args.requestContext.query.recommendation }),\r\n includeAttributes,\r\n isUpdateRefinerPanel,\r\n args.requestContext.locale\r\n );\r\n }\r\n\r\n throw new Error('[getFullProductsForCollection]Unable to create input');\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { AsyncResult, ChannelInventoryConfiguration, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { getInventoryConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport { ArrayExtensions, generateProductImageUrl, InventoryLevels, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\r\n\r\n/**\r\n * GetFullProductsByCollection Action Input.\r\n */\r\nexport class GetFullProductsByCollectionInput extends BaseCollectionInput implements IActionInput {\r\n /**\r\n * The cache object type.\r\n * @returns The cache object type.\r\n */\r\n public getCacheObjectType = (): string => 'FullProductSearchResult';\r\n\r\n /**\r\n * The data cache type.\r\n * @returns The data cache type.\r\n */\r\n public dataCacheType = (): CacheType => {\r\n if (\r\n this.pageType !== 'Category' ||\r\n (this.refiners && this.refiners.length > 0) ||\r\n (this.queryResultSettings &&\r\n this.queryResultSettings.Sorting &&\r\n this.queryResultSettings.Sorting.Columns &&\r\n this.queryResultSettings.Sorting.Columns.length > 0)\r\n ) {\r\n return 'request';\r\n }\r\n return 'application';\r\n };\r\n}\r\n\r\n/**\r\n * This setting defines inventory filtering options.\r\n */\r\nexport enum ProductListInventoryFilteringOptions {\r\n /**\r\n * Filter out all products out of stock.\r\n */\r\n HideOOS = 'hideOOS',\r\n\r\n /**\r\n * Sort products by availability, OOS goes last.\r\n */\r\n SortOOS = 'sortOOS',\r\n\r\n /**\r\n * No filtering selected.\r\n */\r\n Default = 'default'\r\n}\r\n\r\n/**\r\n * The full product search result with count interface.\r\n */\r\nexport interface IFullProductsSearchResultsWithCount {\r\n products: ProductSearchResult[];\r\n count: number;\r\n channelInventoryConfigurationId?: number;\r\n}\r\n\r\n/**\r\n * CreateInput function which creates and actionInput used to fetch products for a list page.\r\n * @param args - The API arguments.\r\n * @returns IActionInput - The action input.\r\n */\r\nconst createInput = (args: ICreateActionContext<{ itemsPerPage: number; includedAttributes: boolean | undefined }>): IActionInput => {\r\n const input = createBaseCollectionInput(args, GetFullProductsByCollectionInput);\r\n\r\n // Set Top\r\n if (input.queryResultSettings.Paging && args.config) {\r\n input.queryResultSettings.Paging.Top = args.config.itemsPerPage || 1;\r\n }\r\n\r\n // Set Skip\r\n if (input.queryResultSettings.Paging && args.requestContext.query && args.requestContext.query.skip) {\r\n input.queryResultSettings.Paging.Skip = +args.requestContext.query.skip;\r\n }\r\n\r\n input.queryResultSettings.count = true;\r\n\r\n return input;\r\n};\r\n\r\n/**\r\n * Finds whether a product is out of stock based on the attribute.\r\n * @param product - The product.\r\n * @param channelInventoryConfiguration - The channel configuration.\r\n * @returns True if is OOS, false otherwise.\r\n */\r\nfunction isOutOfStock(product: ProductSearchResult, channelInventoryConfiguration: ChannelInventoryConfiguration): boolean {\r\n if (!ArrayExtensions.hasElements(product.AttributeValues)) {\r\n // If no attributes then assume is in stock\r\n return false;\r\n }\r\n for (const attribute of product.AttributeValues) {\r\n if (\r\n attribute.RecordId === channelInventoryConfiguration.InventoryProductAttributeRecordId &&\r\n attribute.TextValue === channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\r\n ) {\r\n // The matching recordId indicates that is the inventory attribute\r\n // if the text value are the same then is out of stock.\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Returns only in stock products.\r\n * @param products - The product.\r\n * @param channelInventoryConfiguration - The channel configuration.\r\n * @returns Filtered product search result.\r\n */\r\nfunction filterOutOfStockProducts(\r\n products: ProductSearchResult[],\r\n channelInventoryConfiguration: ChannelInventoryConfiguration\r\n): ProductSearchResult[] {\r\n if (!ArrayExtensions.hasElements(products)) {\r\n return [];\r\n }\r\n const filteredProducts: ProductSearchResult[] = [];\r\n\r\n for (const product of products) {\r\n if (!isOutOfStock(product, channelInventoryConfiguration)) {\r\n filteredProducts.push(product);\r\n }\r\n }\r\n return filteredProducts;\r\n}\r\n\r\n/**\r\n * Returns sorted products based on availability.\r\n * @param products - The product.\r\n * @param channelInventoryConfiguration - The channel configuration.\r\n * @returns Sorted product search result.\r\n */\r\nfunction sortsProductsBasedOnAvailability(\r\n products: ProductSearchResult[],\r\n channelInventoryConfiguration: ChannelInventoryConfiguration\r\n): ProductSearchResult[] {\r\n if (!ArrayExtensions.hasElements(products)) {\r\n return [];\r\n }\r\n const inStockProducts: ProductSearchResult[] = [];\r\n const outOfStockProducts: ProductSearchResult[] = [];\r\n\r\n for (const product of products) {\r\n if (isOutOfStock(product, channelInventoryConfiguration)) {\r\n outOfStockProducts.push(product);\r\n } else {\r\n inStockProducts.push(product);\r\n }\r\n }\r\n return inStockProducts.concat(outOfStockProducts);\r\n}\r\n\r\n/**\r\n * Returns list of products based on inventory information.\r\n * @param products - The products.\r\n * @param channelInventoryConfiguration - The channel configuration.\r\n * @param context - The context.\r\n * @returns List of product based on the inventory information.\r\n */\r\nexport function returnProductsBasedOnInventoryInformation(\r\n products: ProductSearchResult[],\r\n channelInventoryConfiguration: ChannelInventoryConfiguration,\r\n context: IActionContext\r\n): ProductSearchResult[] {\r\n if (!ArrayExtensions.hasElements(products) || ObjectExtensions.isNullOrUndefined(channelInventoryConfiguration)) {\r\n return [];\r\n }\r\n switch (context.requestContext.app.config.productListInventoryDisplay) {\r\n case ProductListInventoryFilteringOptions.HideOOS:\r\n return filterOutOfStockProducts(products, channelInventoryConfiguration);\r\n case ProductListInventoryFilteringOptions.SortOOS:\r\n return sortsProductsBasedOnAvailability(products, channelInventoryConfiguration);\r\n default:\r\n return products;\r\n }\r\n}\r\n\r\n/**\r\n * Returns list of products based on inventory information.\r\n * @param productSearchResults - The products.\r\n * @param context - The context.\r\n * @param metadataCount - The metadata count.\r\n * @returns List of product based on the inventory information.\r\n */\r\nexport async function returnProducts(\r\n productSearchResults: ProductSearchResult[],\r\n context: IActionContext,\r\n metadataCount: number | undefined\r\n): Promise {\r\n const defaultProductCount: number = 0;\r\n\r\n const productSearchResultsWithImages = productSearchResults.map(productSearchResult => {\r\n const newImageUrl = generateProductImageUrl(productSearchResult, context.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n productSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return productSearchResult;\r\n });\r\n\r\n // If inventory level is threshold or inventory check is disabled then return the list of products without the inventory configuration\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\r\n if (\r\n context.requestContext.app.config.inventoryLevel === InventoryLevels.threshold ||\r\n context.requestContext.app.config.enableStockCheck === false\r\n ) {\r\n return {\r\n products: productSearchResultsWithImages,\r\n count: metadataCount ?? defaultProductCount\r\n };\r\n }\r\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: context });\r\n\r\n const mappedProducts = productSearchResultsWithImages.map(productSearchResult => {\r\n if (ArrayExtensions.hasElements(productSearchResult.AttributeValues)) {\r\n for (const element of productSearchResult.AttributeValues) {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- need check.\r\n if (\r\n channelInventoryConfiguration &&\r\n element.RecordId !== undefined &&\r\n element.RecordId === channelInventoryConfiguration.InventoryProductAttributeRecordId &&\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\r\n context.requestContext.app.config.inventoryRanges !== 'all' &&\r\n element.TextValue !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\r\n ) {\r\n // If same RecordId then it means that is the Inventory attribute\r\n // Based on the inventory range (and filtering options), the inventory label will be displayed\r\n // If Inventory range is 'All' then in stock and out of stock labels are shown, else only OOS\r\n // if the text value is different that the channelInventoryConfiguration.InventoryOutOfStockAttributeValueText then is in stock\r\n element.TextValue = '';\r\n }\r\n }\r\n }\r\n\r\n return productSearchResult;\r\n });\r\n const productsBasedOnInventory = returnProductsBasedOnInventoryInformation(mappedProducts, channelInventoryConfiguration, context);\r\n return {\r\n products: productsBasedOnInventory,\r\n count: metadataCount ?? defaultProductCount,\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check config.\r\n channelInventoryConfigurationId: channelInventoryConfiguration\r\n ? channelInventoryConfiguration.InventoryProductAttributeRecordId\r\n : undefined\r\n };\r\n}\r\n\r\n/**\r\n * Action function to fetch products for a list page.\r\n * @param input - The input.\r\n * @param context - The context.\r\n * @returns IFullProductsSearchResultsWithCount - The full product search result with count.\r\n */\r\nasync function action(input: GetFullProductsByCollectionInput, context: IActionContext): Promise {\r\n let promise: AsyncResult;\r\n let searchProductId;\r\n const searchCriteriaInput: ProductSearchCriteria = {};\r\n searchCriteriaInput.Context = {\r\n ChannelId: context.requestContext.apiSettings.channelId,\r\n CatalogId: context.requestContext.apiSettings.catalogId\r\n };\r\n searchCriteriaInput.Refinement = input.refiners;\r\n searchCriteriaInput.IncludeAttributes = true;\r\n searchCriteriaInput.SkipVariantExpansion = true;\r\n searchCriteriaInput.Language = context.requestContext.locale;\r\n const defaultNumber: number = 0;\r\n\r\n if (input.pageType === 'Category' || (context.requestContext.query && context.requestContext.query.categoryId)) {\r\n if (input.category) {\r\n searchCriteriaInput.CategoryIds = [input.category || defaultNumber];\r\n console.log('search criteria input', searchCriteriaInput);\r\n promise = searchByCriteriaAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: input.queryResultSettings\r\n },\r\n searchCriteriaInput\r\n );\r\n } else {\r\n throw new Error('[GetFullProductsForCollection]Category Page Detected, but no global categoryId found');\r\n }\r\n } else if (input.searchText && context.requestContext.query && context.requestContext.query.q) {\r\n searchCriteriaInput.SearchCondition = input.searchText;\r\n promise = searchByCriteriaAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: input.queryResultSettings\r\n },\r\n searchCriteriaInput\r\n );\r\n } else if (\r\n input.searchText &&\r\n context.requestContext.query &&\r\n context.requestContext.query.productId &&\r\n context.requestContext.query.recommendation\r\n ) {\r\n const searchObject = JSON.parse(input.searchText);\r\n searchProductId = Number(searchObject.ProductId);\r\n if (Number.isNaN(searchProductId)) {\r\n throw new Error('Failed to cast search product id into a number.');\r\n } else if (!searchObject.Recommendation) {\r\n throw new Error('Failed to retrieve the Recommendation.');\r\n } else {\r\n searchCriteriaInput.RecommendationListId = searchObject.Recommendation;\r\n searchCriteriaInput.Ids = [searchProductId || defaultNumber];\r\n promise = searchByCriteriaAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: input.queryResultSettings\r\n },\r\n searchCriteriaInput\r\n );\r\n }\r\n } else {\r\n throw new Error('[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found');\r\n }\r\n\r\n const productSearchResults = await promise;\r\n console.log('productSearchResults', productSearchResults);\r\n\r\n return returnProducts(productSearchResults, context, promise.metadata.count);\r\n}\r\n\r\nexport const actionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search-result-container/get-full-products-by-collection',\r\n action: >action,\r\n input: createInput\r\n});\r\n\r\nexport default actionDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSearchConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n// TODO: import from commerce entities when available\r\ninterface SearchConfiguration {\r\n ProductSortColumns?: SortColumn[];\r\n}\r\n\r\nexport interface MappedSearchConfiguration {\r\n key: string;\r\n sortColumn: SortColumn;\r\n}\r\n\r\nexport const sortOptions = {\r\n sortByOptionRelevanceDesc: 'Ranking-Desc',\r\n sortByOptionRatingAsc: 'AverageRating-Asc',\r\n sortByOptionRatingDesc: 'AverageRating-Desc',\r\n sortByOptionNameAsc: 'Name-Asc',\r\n sortByOptionNameDesc: 'Name-Desc',\r\n sortByOptionPriceAsc: 'Price-Asc',\r\n sortByOptionPriceDesc: 'Price-Desc',\r\n sortByOptionBestSelling: 'BestSelling',\r\n sortByOptionNewScore: 'NewScore',\r\n sortByOptionTrendingScore: 'TrendingScore'\r\n};\r\n\r\n/**\r\n * ActionInput class for the get-mapped-search-configuration Data Action.\r\n */\r\nexport class MappedSearchInput implements IActionInput {\r\n private readonly apiSettings: ICommerceApiSettings;\r\n\r\n constructor(apiSettings: ICommerceApiSettings) {\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey('MappedSearchInput', this.apiSettings);\r\n\r\n public getCacheObjectType = () => 'MappedSearchInput';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n/**\r\n * Get a mapped search configuration that is easy to use for sorting.\r\n * @param input\r\n * @param ctx\r\n */\r\nexport async function getMappedSearchConfiguration(input: MappedSearchInput, ctx: IActionContext): Promise {\r\n return getSearchConfigurationAsync({ callerContext: ctx }).then((searchConfiguration: SearchConfiguration) => {\r\n return (searchConfiguration.ProductSortColumns || [])\r\n .map((sortColumn: SortColumn) => {\r\n let key = '';\r\n if (sortColumn.ColumnName) {\r\n switch (sortColumn.ColumnName.toUpperCase()) {\r\n case 'NAME':\r\n key = sortColumn.IsDescending ? sortOptions.sortByOptionNameDesc : sortOptions.sortByOptionNameAsc;\r\n break;\r\n case 'PRICE':\r\n key = sortColumn.IsDescending ? sortOptions.sortByOptionPriceDesc : sortOptions.sortByOptionPriceAsc;\r\n break;\r\n case 'AVERAGERATING':\r\n key = sortColumn.IsDescending ? sortOptions.sortByOptionRatingDesc : sortOptions.sortByOptionRatingAsc;\r\n break;\r\n case 'RANKING':\r\n key = sortOptions.sortByOptionRelevanceDesc;\r\n break;\r\n case 'BESTSELLINGSCORE':\r\n key = sortOptions.sortByOptionBestSelling;\r\n break;\r\n case 'NEWSCORE':\r\n key = sortOptions.sortByOptionNewScore;\r\n break;\r\n case 'TRENDINGSCORE':\r\n key = sortOptions.sortByOptionTrendingScore;\r\n break;\r\n default:\r\n }\r\n } else {\r\n ctx.telemetry.warning('[get-mapped-search-configuration] unknown search option');\r\n }\r\n if (key) {\r\n return {\r\n key,\r\n sortColumn\r\n };\r\n }\r\n return undefined;\r\n })\r\n .filter(Boolean);\r\n });\r\n}\r\n\r\nexport const createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new MappedSearchInput(inputData.requestContext.apiSettings);\r\n};\r\n\r\nexport const getMappedSearchConfigurationDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search-result-container/get-mapped-search-configuration',\r\n action: >getMappedSearchConfiguration,\r\n input: createInput\r\n});\r\n\r\nexport default getMappedSearchConfigurationDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\r\n\r\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\r\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\r\n\r\n/**\r\n * Default Category/Product Id Values.\r\n */\r\nenum DefaultValues {\r\n defaultCategoryIdValue = 0,\r\n defaultProductIdValue = 0\r\n}\r\n\r\n/**\r\n * Refiners-by-Collection Input action.\r\n */\r\nexport class RefinersByCollectionInput extends BaseCollectionInput implements IActionInput {\r\n public getCacheObjectType = () => 'ProductRefiner';\r\n\r\n public dataCacheType = () => {\r\n if (\r\n this.pageType !== 'Category' ||\r\n (this.refiners && this.refiners.length > 0) ||\r\n (this.queryResultSettings &&\r\n this.queryResultSettings.Sorting &&\r\n this.queryResultSettings.Sorting.Columns &&\r\n this.queryResultSettings.Sorting.Columns.length > 0)\r\n ) {\r\n return 'request';\r\n }\r\n return 'application';\r\n };\r\n}\r\n\r\n/**\r\n * Create input method which creates an ActionInput for fetching list page refiners.\r\n * @param args\r\n */\r\nconst createInput = (args: ICreateActionContext): IActionInput => {\r\n return createBaseCollectionInput(args, RefinersByCollectionInput);\r\n};\r\n\r\n/**\r\n * Action method which fetches refiners for the given list page.\r\n * @param input\r\n * @param ctx\r\n */\r\nasync function action(input: RefinersByCollectionInput, ctx: IActionContext): Promise {\r\n let searchProductId;\r\n if (input.pageType === 'Category') {\r\n if (input.category) {\r\n return getProductRefinerHierarchy(\r\n {\r\n CategoryIds: [input.category || DefaultValues.defaultCategoryIdValue],\r\n Context: {\r\n ChannelId: input.apiSettings.channelId,\r\n CatalogId: input.apiSettings.catalogId\r\n },\r\n Refinement: input.isUpdateRefinerPanel ? input.refiners : [],\r\n Language: ctx.requestContext.locale\r\n },\r\n input.queryResultSettings,\r\n ctx\r\n );\r\n }\r\n throw new Error('[GetRefinersForCollection]Category Page Detected, but no global categoryId found');\r\n } else {\r\n if (input.searchText && ctx.requestContext.query && ctx.requestContext.query.q) {\r\n return getProductRefinerHierarchy(\r\n {\r\n SearchCondition: input.searchText,\r\n Context: {\r\n ChannelId: input.apiSettings.channelId,\r\n CatalogId: input.apiSettings.catalogId\r\n },\r\n Refinement: input.isUpdateRefinerPanel ? input.refiners : [],\r\n Language: ctx.requestContext.locale\r\n },\r\n input.queryResultSettings,\r\n ctx\r\n );\r\n }\r\n if (input.searchText && ctx.requestContext.query && ctx.requestContext.query.productId) {\r\n const searchObject = JSON.parse(input.searchText);\r\n searchProductId = Number(searchObject.ProductId);\r\n if (Number.isNaN(searchProductId)) {\r\n throw new Error('Failed to cast search product id into a number.');\r\n } else if (!searchObject.Recommendation) {\r\n throw new Error('Failed to retrieve the Recommendation.');\r\n } else {\r\n return getProductRefinerHierarchy(\r\n {\r\n Context: {\r\n ChannelId: input.apiSettings.channelId,\r\n CatalogId: input.apiSettings.catalogId\r\n },\r\n Refinement: input.isUpdateRefinerPanel ? input.refiners : [],\r\n RecommendationListId: searchObject.Recommendation,\r\n Ids: [searchProductId || DefaultValues.defaultProductIdValue],\r\n Language: ctx.requestContext.locale\r\n },\r\n input.queryResultSettings,\r\n ctx\r\n );\r\n }\r\n } else {\r\n throw new Error('[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found');\r\n }\r\n }\r\n}\r\n\r\nexport const actionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search-result-container/get-refiners-for-collection',\r\n action: >action,\r\n input: createInput\r\n});\r\n\r\nexport default actionDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { IQueryResultSettings, ProductRefiner, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * Uses Bulk refiner API to get refiners and child refiner values.\r\n * @param searchCriteria Product search criteria.\r\n * @param maxItems Max items.\r\n * @param queryResultSettings\r\n * @param ctx Action context.\r\n */\r\nexport async function getProductRefinerHierarchy(\r\n searchCriteria: ProductSearchCriteria,\r\n queryResultSettings: IQueryResultSettings,\r\n ctx: IActionContext\r\n): Promise {\r\n return getProductSearchRefinersAsync({ callerContext: ctx, queryResultSettings }, searchCriteria).then(\r\n (productRefiners: ProductRefiner[]) => {\r\n if (!productRefiners) {\r\n ctx.trace('[getRefinersByCriteriaAction] returned no refiners');\r\n return [];\r\n }\r\n\r\n const result = (productRefiners || []).map((productRefiner: ProductRefiner) => productRefiner);\r\n\r\n if (result.length === 0) {\r\n ctx.trace('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\r\n return [];\r\n }\r\n\r\n return result;\r\n }\r\n );\r\n}\r\n","/* eslint-disable security/detect-object-injection */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * Refiner Compression:\r\n * Refiners contains a non-trivial amount of data that is required to successfully make\r\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\r\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\r\n * the following array style index-based format:\r\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText].\r\n */\r\nconst compressedRefinerKeys = [\r\n 'DataTypeValue',\r\n 'LeftValueBoundString',\r\n 'RefinerRecordId',\r\n 'RefinerSourceValue',\r\n 'RightValueBoundString',\r\n 'UnitText'\r\n];\r\n\r\n/**\r\n * Hydrates compressed refiner data from URL.\r\n * @param fullUrl The full URL of the page.\r\n * @param requestContext\r\n */\r\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\r\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\r\n if (!compressedRefinerArray || compressedRefinerArray.length === 0) {\r\n return [];\r\n }\r\n\r\n return compressedRefinerArray\r\n .map(compressedRefiner => {\r\n try {\r\n const parsedRefiner: ProductRefinerValue = {};\r\n compressedRefinerKeys.forEach((refinerKey, index) => {\r\n parsedRefiner[refinerKey] = compressedRefiner[index];\r\n });\r\n return parsedRefiner;\r\n } catch {\r\n return undefined;\r\n }\r\n })\r\n .filter(Boolean);\r\n};\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs.\r\n * @param refiners The uncompressed refiners.\r\n */\r\nexport const compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach(refiner => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach(refinerKey => {\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n\r\n/**\r\n * Method which creates a URL contiaining serialized active refiners.\r\n * @param fullUrl The Current URL of the page.\r\n * @param refiners The refiners which should be added to the URL.\r\n * @param sortingColumns\r\n * @param skipCount\r\n */\r\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\r\n // Refiner Change flow\r\n if (refiners !== undefined) {\r\n if (refiners.length === 0) {\r\n fullUrl.searchParams.delete('refiners');\r\n } else {\r\n const sortedRefiners = refiners.sort((first, second) =>\r\n first.RefinerRecordId && second.RefinerRecordId && first.RefinerRecordId > second.RefinerRecordId ? 1 : -1\r\n );\r\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(sortedRefiners)));\r\n }\r\n\r\n // Adding or removing a refiner means we want to always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (sortingColumns !== undefined) {\r\n if (sortingColumns.length === 0) {\r\n fullUrl.searchParams.delete('sorting');\r\n } else {\r\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\r\n }\r\n\r\n // Changing the sort means always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (skipCount) {\r\n fullUrl.searchParams.set('skip', skipCount.toString());\r\n }\r\n\r\n return fullUrl.href;\r\n};\r\n\r\n/**\r\n * Parses a query param from the query object of the request context.\r\n * @param key The query parameter key.\r\n * @param requestContext The request context.\r\n */\r\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\r\n if (requestContext.query && requestContext.query[key]) {\r\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Gets the current URL of the page from the request context.\r\n * @param requestContext The request context.\r\n */\r\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\r\n if (MsDyn365.isBrowser) {\r\n return new URL(window.location.href);\r\n }\r\n\r\n // NOTE: Typing on requestURL is incorrect\r\n if (requestContext.url.requestUrl.href) {\r\n return new URL(requestContext.url.requestUrl.href);\r\n }\r\n return new URL((requestContext.url.requestUrl));\r\n};\r\n","/* eslint-disable react/react-in-jsx-scope */\r\nimport { IComponentProps, getUrlSync } from '@msdyn365-commerce/core';\r\nimport React from 'react';\r\nimport { IMoeSearchResultContainerResources } from '../moe-search-result-container.props.autogenerated';\r\n\r\nexport interface ICuratedCollectionComponentProps extends IComponentProps<{}> {\r\n className?: string;\r\n products: ICuratedCollection[];\r\n resources?: IMoeSearchResultContainerResources;\r\n preferredLanguageForError: string;\r\n preferredLanguageForButton: string;\r\n}\r\n\r\nexport interface ICuratedCollection {\r\n productURL: string;\r\n imageURL: string;\r\n Name: string;\r\n Description: string;\r\n Count: string;\r\n recordId: number;\r\n channelId: number;\r\n}\r\n\r\nexport const CuratedCollectionList: React.FC = (props: ICuratedCollectionComponentProps) => {\r\n const { products, resources, preferredLanguageForError } = props;\r\n\r\n const onClickCuratedCollection = (index: number, recordId: number) => {\r\n const wishlistURL: any = getUrlSync('wishlist', props.context.actionContext);\r\n const curatedCollectionUrl: any = wishlistURL.replace('wishlist', 'curatedcollection');\r\n const decodedCuratedCollectionURL = decodeURIComponent(curatedCollectionUrl);\r\n console.log(decodedCuratedCollectionURL);\r\n console.log('inside view collection click');\r\n const separator = decodedCuratedCollectionURL?.includes('?') ? '&' : '?';\r\n window.location.assign(`${decodedCuratedCollectionURL}${separator}rid=${recordId}`);\r\n };\r\n const descriptionLength = 350;\r\n\r\n return (\r\n
\r\n {products.length > 0 ? (\r\n products.map((item: ICuratedCollection, idx: number) => {\r\n return (\r\n onClickCuratedCollection(idx, item.recordId)}\r\n className='collectionCard'\r\n id='collection-1994'\r\n >\r\n
\r\n Collection\r\n \r\n \r\n \r\n
\r\n
\r\n {item.imageURL && (\r\n \r\n )}\r\n
\r\n
\r\n
{item.Name}
\r\n

\r\n {`${item.Description.substring(0, descriptionLength)}...`}\r\n

\r\n {/*

\r\n \r\n \r\n \r\n 10\r\n

*/}\r\n
\r\n
\r\n \r\n \r\n \r\n {item.Count}\r\n Resources\r\n
\r\n \r\n );\r\n })\r\n ) : (\r\n
\r\n {preferredLanguageForError === 'maori'\r\n ? resources?.resultSearchNotFoundTextInMaori\r\n : resources?.resultSearchNotFoundText}\r\n .\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductPrice, ProductRefinerValue, ProductSearchResult, SimpleProduct, SortingInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { observable } from 'mobx';\r\n\r\nimport { listPageType } from './actions';\r\n\r\n/**\r\n * ListPageState class.\r\n */\r\nexport class ListPageState {\r\n @observable public activeFilters: ProductRefinerValue[] | null = null;\r\n\r\n @observable public activeProducts: ProductSearchResult[] = [];\r\n\r\n @observable public sortingCritera: SortingInfo | null = null;\r\n\r\n @observable public currentPageNumber: number | null = null;\r\n\r\n @observable public refiners: IProductRefinerHierarchy[] | null = null;\r\n\r\n @observable public totalProductCount: number | undefined = 0;\r\n\r\n @observable public pageSize: number = 10;\r\n\r\n @observable public pageType: listPageType = 'Unknown';\r\n\r\n @observable public featureProduct: SimpleProduct | null = null;\r\n\r\n @observable public productPrices: ProductPrice[] | undefined = [];\r\n\r\n @observable public artifactsData: any[] = [];\r\n}\r\n\r\n/**\r\n * ListPageStateInput - action input.\r\n */\r\nexport class ListPageStateInput implements IActionInput {\r\n public getCacheKey = () => 'ListPageState';\r\n\r\n public getCacheObjectType = () => 'ListPageState';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nexport async function listPageStateAction(input: ListPageStateInput, ctx: IActionContext): Promise {\r\n return new ListPageState();\r\n}\r\n\r\n/**\r\n * Create new input for create action.\r\n * @param inputData\r\n */\r\nexport const createListPageInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new ListPageStateInput();\r\n};\r\n\r\n/**\r\n * ListPageState - create action.\r\n */\r\nexport default createObservableDataAction({\r\n action: >listPageStateAction,\r\n input: createListPageInput\r\n});\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IMoeSearchResultContainer containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum expandRefinersCount {\r\n all = 'all',\r\n one = 'one',\r\n two = 'two',\r\n three = 'three',\r\n four = 'four'\r\n}\r\n\r\nexport const enum siteName {\r\n och = 'och',\r\n nzc = 'nzc',\r\n twk = 'twk',\r\n kwr = 'kwr',\r\n koh = 'koh'\r\n}\r\n\r\nexport interface IMoeSearchResultContainerConfig extends Msdyn365.IModuleConfig {\r\n itemsPerPage: number;\r\n allowBackNavigation?: boolean;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n expandRefinersCount?: expandRefinersCount;\r\n disableHierarchy?: boolean;\r\n includeAttributes?: boolean;\r\n enableAffiliationBasedPricing?: boolean;\r\n updateRefinerPanel?: boolean;\r\n className?: string;\r\n learningAreaName?: string;\r\n siteName: siteName;\r\n searchTextBoxName?: string;\r\n domainData?: string;\r\n ochSearch?: boolean;\r\n nzcSearchUrl?: string;\r\n twkSearchUrl?: string;\r\n kohSearchUrl?: string;\r\n kwrSearchUrl?: string;\r\n}\r\n\r\nexport interface IMoeSearchResultContainerResources {\r\n noResultsForRefinersText: string;\r\n noResultsForRefinersTextInMaori: string;\r\n resultCategoryNotFoundText: string;\r\n resultCategoryNotFoundTextInMaori: string;\r\n resultSearchNotFoundText: string;\r\n resultSearchNotFoundTextInMaori: string;\r\n paginationAriaLabel: string;\r\n paginationAriaLabelInMaori: string;\r\n priceFree: string;\r\n priceFreeInMaori: string;\r\n priceRangeSeparator: string;\r\n priceRangeSeparatorInMaori: string;\r\n originalPriceText: string;\r\n originalPriceTextInMaori: string;\r\n currentPriceText: string;\r\n currentPriceTextInMaori: string;\r\n ratingAriaLabel: string;\r\n ratingAriaLabelInMaori: string;\r\n flipperNext: string;\r\n flipperNextInMaori: string;\r\n flipperPrevious: string;\r\n flipperPreviousInMaori: string;\r\n searchTextPrefix: string;\r\n searchTextPrefixInMaori: string;\r\n numberOfProducts: string;\r\n numberOfProductsInMaori: string;\r\n oneProduct: string;\r\n oneProductInMaori: string;\r\n categoryLinkAriaLabel: string;\r\n categoryLinkAriaLabelInMaori: string;\r\n sortByDropdownLabel: string;\r\n sortByDropdownLabelInMaori: string;\r\n sortByOptionNameAsc: string;\r\n sortByOptionNameAscInMaori: string;\r\n sortByOptionNameDesc: string;\r\n sortByOptionNameDescInMaori: string;\r\n sortByOptionPriceAsc: string;\r\n sortByOptionPriceAscInMaori: string;\r\n sortByOptionPriceDesc: string;\r\n sortByOptionPriceDescInMaori: string;\r\n sortByOptionRatingDesc: string;\r\n sortByOptionRatingDescInMaori: string;\r\n sortByOptionBestSelling: string;\r\n sortByOptionBestSellingInMaori: string;\r\n sortByOptionNewScore: string;\r\n sortByOptionNewScoreInMaori: string;\r\n sortByOptionTrendingScore: string;\r\n sortByOptionTrendingScoreInMaori: string;\r\n sortByOptionRelevanceDesc: string;\r\n sortByOptionRelevanceDescInMaori: string;\r\n placeholderTextMax: string;\r\n placeholderTextMaxInMaori: string;\r\n minLabel: string;\r\n minLabelInMaori: string;\r\n maxLabel: string;\r\n maxLabelInMaori: string;\r\n rangeNameFormat: string;\r\n rangeNameFormatInMaori: string;\r\n validationErrorNotNumber: string;\r\n validationErrorNotNumberInMaori: string;\r\n validationErrorNotRange: string;\r\n validationErrorNotRangeInMaori: string;\r\n clearAllText: string;\r\n clearAllTextInMaori: string;\r\n choiceSummaryLabel: string;\r\n choiceSummaryLabelInMaori: string;\r\n choiceFormat: string;\r\n choiceFormatInMaori: string;\r\n choiceRangeValueFormat: string;\r\n choiceRangeValueFormatInMaori: string;\r\n choiceAriaLabel: string;\r\n choiceAriaLabelInMaori: string;\r\n closeAriaLabel: string;\r\n closeAriaLabelInMaori: string;\r\n modalTitle: string;\r\n modalTitleInMaori: string;\r\n modalCloseButtonText: string;\r\n modalCloseButtonTextInMaori: string;\r\n minValueSliderThumbAriaLabel: string;\r\n minValueSliderThumbAriaLabelInMaori: string;\r\n maxValueSliderThumbAriaLabel: string;\r\n maxValueSliderThumbAriaLabelInMaori: string;\r\n featureSimilarLooksTitle: string;\r\n featureSimilarLooksTitleInMaori: string;\r\n featureSimilarDescriptionTitle: string;\r\n featureSimilarDescriptionTitleInMaori: string;\r\n productCountAriaLabel: string;\r\n productCountAriaLabelInMaori: string;\r\n singleProductCountAriaLabel: string;\r\n singleProductCountAriaLabelInMaori: string;\r\n listViewButtonText: string;\r\n listViewButtonTextInMaori: string;\r\n tileViewButtonText: string;\r\n tileViewButtonTextInMaori: string;\r\n showMoreText: string;\r\n showMoreTextInMaori: string;\r\n filterText: string;\r\n filterTextInMaori: string;\r\n externalSitesTabText: string;\r\n externalSitesTabTextInMaori: string;\r\n artifactsTabText: string;\r\n artifactsTabTextInMaori: string;\r\n ochTabText: string;\r\n ochTabTextInMaori: string;\r\n resourcesTabText: string;\r\n resourcesTabTextInMaori: string;\r\n curatedCollectionTabText: string;\r\n curatedCollectionTabTextInMaori: string;\r\n expandAllText: string;\r\n expandAllTextInMaori: string;\r\n collapseAllText: string;\r\n collapseAllTextInMaori: string;\r\n ochSearchResultsText: string;\r\n ochSearchResultsTextInMaori: string;\r\n clickFiltersText: string;\r\n clickFiltersTextInMaori: string;\r\n}\r\n\r\nexport interface IMoeSearchResultContainerProps extends Msdyn365.IModule {\r\n resources: IMoeSearchResultContainerResources;\r\n config: IMoeSearchResultContainerConfig;\r\n slots: {\r\n quickview: React.ReactNode[];\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ITelemetry } from '@msdyn365-commerce/core';\r\nimport { AttributeDataType, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\n\r\n/**\r\n * Types of product refiner values.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport enum ProductRefinerValueDataTypeValue {\r\n /**\r\n * Range slider is used for selections like price.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Range = 1,\r\n\r\n /**\r\n * Range input is a different way to specify ranges and can be expressed with input boxes\r\n * as well as a set of discrete single-select type values.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n RangeInput = 4,\r\n\r\n /**\r\n * This is a discrete list item, either multi-select or single-select.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n List = 5,\r\n\r\n /**\r\n * Boolean types allows only single-select.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Boolean = 6\r\n}\r\n\r\n/**\r\n * Types of product refiners.\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport enum ProductRefinerTypeValue {\r\n /**\r\n * Refiner values are single-select.\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Single = 0,\r\n\r\n /**\r\n * Refiner values are multi-select.\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Multi = 1\r\n}\r\n\r\n/**\r\n * ProductRefinerSource enum type.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport enum ProductRefinerSource {\r\n /**\r\n * The None member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n None = 0,\r\n\r\n /**\r\n * The Attribute member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Attribute = 1,\r\n\r\n /**\r\n * The Category member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Category = 2,\r\n\r\n /**\r\n * The Price member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Price = 3,\r\n\r\n /**\r\n * The Rating member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Rating = 4\r\n}\r\n\r\n/**\r\n * Checks if the data type value corresponds to a slider.\r\n * @param dataTypeValue\r\n */\r\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\r\n return (\r\n dataTypeValue === AttributeDataType.Currency ||\r\n dataTypeValue === AttributeDataType.Decimal ||\r\n dataTypeValue === AttributeDataType.Integer\r\n );\r\n}\r\n\r\n/**\r\n * Find the refinement criterion associated with this product refiner value.\r\n * @param productRefinerValue Product refiner value to match.\r\n * @param refinementCriteria Selected refinement criteria.\r\n */\r\nexport function findMatchingRefinementCriterion(\r\n productRefinerValue: ProductRefinerValue,\r\n refinementCriteria: ProductRefinerValue[]\r\n): ProductRefinerValue | undefined {\r\n // If the value is a range, then match only on data type value; otherwise match on item string\r\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\r\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\r\n );\r\n}\r\n\r\n/**\r\n * Find the refinement criterion associated with this product refiner value.\r\n * @param productRefinerValue Product refiner value to match.\r\n * @param refinementCriteria Selected refinement criteria.\r\n * @param refinementCriterion\r\n */\r\nexport function isMatchingRefinementCriterion(productRefinerValue: ProductRefinerValue, refinementCriterion: ProductRefinerValue): boolean {\r\n // If the value is a range, then match only on data type value; otherwise match on item string\r\n return (\r\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\r\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\r\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\r\n (isRangeType(refinementCriterion.DataTypeValue) ||\r\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\r\n );\r\n}\r\n\r\nexport function getUpdatedRefinementCriteria(\r\n itemToggleNotification: IRefineItemToggleNotification,\r\n currentRefinementCriteria: ProductRefinerValue[]\r\n): ProductRefinerValue[] {\r\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\r\n let toggledItemFound = false;\r\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\r\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\r\n toggledItemFound = true;\r\n if (itemToggleNotification.isSelecting) {\r\n const next = {\r\n ...selectedCriterion,\r\n LeftValueBoundString:\r\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\r\n selectedCriterion.LeftValueBoundString,\r\n RightValueBoundString:\r\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\r\n selectedCriterion.RightValueBoundString\r\n };\r\n updatedRefinementCriteria.push(next);\r\n } // Else the item is being de-selected, so omit it from the refinement criteria\r\n } else {\r\n // Keep existing criterion because it is not in the item toggle notification\r\n updatedRefinementCriteria.push(selectedCriterion);\r\n }\r\n });\r\n\r\n if (!toggledItemFound) {\r\n const next = {\r\n ...itemToggleNotification.productRefinerValue,\r\n LeftValueBoundString:\r\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\r\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\r\n RightValueBoundString:\r\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\r\n itemToggleNotification.productRefinerValue.RightValueBoundString\r\n };\r\n updatedRefinementCriteria.push(next);\r\n\r\n // If single select, then deselect any others in the parent refiner group\r\n if (\r\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\r\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\r\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\r\n ) {\r\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\r\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\r\n // Do nothing\r\n } else {\r\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\r\n isMatchingRefinementCriterion(child, criterion)\r\n );\r\n if (matchingIndex > -1) {\r\n updatedRefinementCriteria.splice(matchingIndex, 1);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return updatedRefinementCriteria;\r\n}\r\n\r\nexport function formatPrice(\r\n amount: string | undefined,\r\n currency: string | undefined,\r\n locale: string | undefined,\r\n telemetry: ITelemetry\r\n): string {\r\n if (!amount || !currency) {\r\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\r\n return amount || '';\r\n }\r\n const priceAmount = (amount && Number(amount)) || 0;\r\n let result: string;\r\n\r\n try {\r\n result = new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currencyDisplay: 'symbol',\r\n currency,\r\n minimumFractionDigits: 0\r\n }).format(priceAmount);\r\n } catch (error) {\r\n result = `${priceAmount} ${currency}`;\r\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\r\n }\r\n\r\n return result;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IChoiceSummaryProps } from './choice-summary.props';\r\nimport { isMatchingRefinementCriterion, isRangeType } from './utilities';\r\n\r\ninterface IRefinerMap {\r\n key: string;\r\n value: ProductRefinerValue;\r\n}\r\n\r\n/**\r\n * ChoiceSummary component.\r\n */\r\n@observer\r\nexport default class ChoiceSummary extends React.PureComponent {\r\n private readonly closeButtonGlyph: string = 'msi-close-btn';\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n @computed get selectedRefinersMap(): IRefinerMap[] {\r\n const { selectedChoices } = this.props;\r\n return selectedChoices.map((selectedRefiner: ProductRefinerValue) => {\r\n return {\r\n key: this._getKeyForRefinerValue(selectedRefiner),\r\n value: selectedRefiner\r\n } as IRefinerMap;\r\n });\r\n }\r\n\r\n constructor(props: Readonly) {\r\n super(props);\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\r\n const items = this.selectedRefinersMap;\r\n this.payLoad.contentAction.etext = clearAllText;\r\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n return (\r\n
\r\n {items.length > 0 && label && {label}}\r\n
    \r\n {items.map((item: IRefinerMap, index: number) => {\r\n const listItemProps = {\r\n 'aria-posinset': index,\r\n 'aria-setsize': items.length\r\n };\r\n\r\n this.payLoad.contentAction.etext = item.key;\r\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n\r\n return (\r\n
  • \r\n \r\n {item.key}\r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n {items.length > 0 && clearAllText && (\r\n \r\n {clearAllText}\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue): string {\r\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry } = this.props;\r\n const overallFormat = choiceFormat || '{1}';\r\n const rangeFormat = choiceRangeValueFormat;\r\n let refinerName = '';\r\n if (refinerHierarchy && refinerHierarchy.find) {\r\n const parent = refinerHierarchy.find(\r\n (hierarchy: IProductRefinerHierarchy) =>\r\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\r\n );\r\n\r\n if (!parent) {\r\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\r\n } else {\r\n refinerName = parent.KeyName || '';\r\n }\r\n }\r\n\r\n let refinerValueName: string;\r\n if (isRangeType(productRefinerValue.DataTypeValue)) {\r\n refinerValueName = rangeFormat\r\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\r\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\r\n } else {\r\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n }\r\n\r\n return overallFormat.replace('{0}', refinerName).replace('{1}', refinerValueName);\r\n }\r\n\r\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\r\n if (!amount || !currency) {\r\n this.props.telemetry.trace('[choice-summary] could not format price');\r\n return amount || '';\r\n }\r\n let result = amount;\r\n\r\n try {\r\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\r\n } catch (error) {\r\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private readonly _onClick = (e: React.MouseEvent): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const target = e.currentTarget as HTMLElement;\r\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\r\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\r\n\r\n if (this.props.onChoiceClicked) {\r\n this.props.onChoiceClicked({\r\n clearAll,\r\n itemClicked: target,\r\n choiceClicked: selectedRefiner,\r\n nextItemToFocus: target.nextSibling as HTMLElement\r\n });\r\n }\r\n };\r\n\r\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\r\n const result = this.selectedRefinersMap.find(\r\n selected => (itemClicked.textContent && itemClicked.textContent.trim()) === selected.key\r\n );\r\n return (result && result.value) || undefined;\r\n }\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface IErrorMessage {\r\n text?: string;\r\n}\r\n\r\nexport const ErrorMessage: React.FC = ({ text }) => {\r\n return (\r\n \r\n
{text}
\r\n
\r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IMoeSearchResultContainerResources } from '../moe-search-result-container.props.autogenerated';\r\n\r\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\r\n\r\ninterface IFeatureSearchResultItem {\r\n product: SimpleProduct | null;\r\n context: ICoreContext;\r\n resources: IMoeSearchResultContainerResources;\r\n imageSettings?: IImageSettings;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n recommendation?: string;\r\n}\r\n\r\nexport const FeatureSearchResultItem: React.FC = ({\r\n product,\r\n context,\r\n imageSettings,\r\n resources,\r\n telemetryContent,\r\n recommendation\r\n}) => {\r\n if (product === null) {\r\n return null;\r\n }\r\n\r\n const productName = product.Name;\r\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\r\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\r\n const fallbackImage = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\r\n const heading =\r\n recommendation && recommendation === 'descriptions'\r\n ? resources.featureSimilarDescriptionTitleInMaori\r\n : resources.featureSimilarLooksTitleInMaori;\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n
\r\n \r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n fallbackImage,\r\n context.actionContext.requestContext\r\n )}\r\n
\r\n \r\n
\r\n

{heading}

\r\n {renderProductTitle(product?.Name)}\r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction renderProductPlacementImage(\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n altText?: string,\r\n fallbackImage?: string,\r\n context?: IRequestContext\r\n): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : ''\r\n };\r\n const imageProps = {\r\n gridSettings,\r\n imageSettings,\r\n fallBackSrc: fallbackImage\r\n };\r\n return ;\r\n}\r\n\r\nfunction renderProductTitle(title?: string): JSX.Element | null {\r\n return

{title}

;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface ILink {\r\n className?: string;\r\n text?: string;\r\n href?: string;\r\n ariaLabel?: string;\r\n}\r\n\r\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\r\n \r\n {' '}\r\n {text}{' '}\r\n \r\n);\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport interface ISearchResultModalViewProps {\r\n modal: React.ReactElement;\r\n modalHeader: React.ReactElement;\r\n modalFooter: React.ReactElement;\r\n modalBody: React.ReactElement;\r\n}\r\n\r\ninterface IModalToggleProps {\r\n innerRef: React.RefObject | undefined;\r\n id: string;\r\n text: string;\r\n ariaLabel: string;\r\n onClick(): void;\r\n}\r\n\r\nexport interface ISearchResultModalResources {\r\n modalTitle: string;\r\n modalCloseButtonText: string;\r\n}\r\n\r\nexport interface ISearchResultModalProps {\r\n resources: ISearchResultModalResources;\r\n isOpen: boolean;\r\n returnRef: React.RefObject | undefined;\r\n onModalToggle(): void;\r\n}\r\n\r\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\r\n const { text, onClick, ariaLabel, innerRef, id } = props;\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\r\n return {\r\n modal: modalNode(props),\r\n modalHeader: modalHeaderNode(props),\r\n modalFooter: modalFooterNode(props),\r\n modalBody: \r\n };\r\n};\r\n\r\nconst modalNode = (props: ISearchResultModalProps) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\r\n return {props.resources.modalTitle};\r\n};\r\n\r\nconst modalFooterNode = (props: ISearchResultModalProps) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable security/detect-object-injection */\r\n/* eslint-disable @typescript-eslint/no-unnecessary-type-arguments */\r\n/* eslint-disable react/jsx-no-bind */\r\n/* eslint-disable react/no-unknown-property */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGridSettings,\r\n IImageData,\r\n IImageProps,\r\n IImageSettings,\r\n Image,\r\n IRequestContext\r\n // msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\n// import {\r\n// IPriceComponentResources,\r\n// ISwatchItem,\r\n// PriceComponent,\r\n// ProductComponentSwatchComponent,\r\n// RatingComponent\r\n// } from '@msdyn365-commerce/components';\r\nimport { IPriceComponentResources, ISwatchItem, ProductComponentSwatchComponent, RatingComponent } from '@msdyn365-commerce/components';\r\n// import { ProductDimension } from '@msdyn365-commerce/retail-proxy';\r\n// import { AttributeSwatch, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { AttributeSwatch, ProductSearchResult, ProductDimension } from '@msdyn365-commerce/retail-proxy';\r\n// import {\r\n// ArrayExtensions,\r\n// checkIfShouldDisplayAsSwatch,\r\n// convertDimensionTypeToProductDimensionType,\r\n// Dictionary,\r\n// DimensionSwatchDisplayTypes,\r\n// DimensionTypes,\r\n// generateImageUrl,\r\n// getProductPageUrlSync,\r\n// IDimensionsApp,\r\n// StringExtensions\r\n// } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n ArrayExtensions,\r\n checkIfShouldDisplayAsSwatch,\r\n Dictionary,\r\n DimensionSwatchDisplayTypes,\r\n DimensionTypes,\r\n generateImageUrl,\r\n getProductPageUrlSync,\r\n IDimensionsApp,\r\n StringExtensions,\r\n convertDimensionTypeToProductDimensionType\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport React, { JSXElementConstructor, ReactElement, useState } from 'react';\r\n// import React, { useState } from 'react';\r\nimport { BiRightArrowAlt } from 'react-icons/bi';\r\nimport MoeAddToCollection from '../../moe-addtocollection/moe-addtocollection.view';\r\nimport { ADD_TO_COLLECTION_RESOURCES } from '../../../utilities/constants';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n ratingCountAriaLabel?: string;\r\n allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n inventoryLabel?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\r\n isOCH?: boolean;\r\n domainData?: string;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {}\r\n\r\n// const PriceComponentActions = {};\r\n\r\nconst ProductListViewComponent: React.FC = props => {\r\n const {\r\n data,\r\n context,\r\n imageSettings,\r\n // savingsText,\r\n // freePriceText,\r\n // originalPriceText,\r\n // currentPriceText,\r\n ratingAriaLabel,\r\n ratingCountAriaLabel,\r\n allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n quickViewButton,\r\n // inventoryLabel,\r\n // isPriceMinMaxEnabled,\r\n // priceResources,\r\n dimensionAvailabilities,\r\n isOCH\r\n } = props;\r\n const product = data.product;\r\n\r\n /**\r\n * Updates the product url link to product details page.\r\n * @param productDetailsPageUrl - Product page url.\r\n * @param coreContext - Context of the module using the component.\r\n * @param queryString - Querystring to be added to the URL.\r\n * @returns The update product page url.\r\n */\r\n function updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\r\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\r\n if (sourceUrl.search) {\r\n sourceUrl.search += `&${queryString}`;\r\n } else {\r\n sourceUrl.search += queryString;\r\n }\r\n\r\n const updatedUrl = new URL(sourceUrl.href);\r\n return updatedUrl.pathname + sourceUrl.search;\r\n }\r\n\r\n /**\r\n * Gets the product page url from the default swatch selected.\r\n * @param productData - Product card to be rendered.\r\n * @returns The default color swatch selected if any.\r\n */\r\n function getDefaultColorSwatchSelected(productData?: ProductSearchResult): AttributeSwatch | null {\r\n if (!productData || !productData.AttributeValues) {\r\n return null;\r\n }\r\n\r\n const colorAttribute = productData.AttributeValues.find(\r\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === DimensionTypes.color\r\n );\r\n if (!ArrayExtensions.hasElements(colorAttribute?.Swatches)) {\r\n return null;\r\n }\r\n\r\n const defaultSwatch = colorAttribute!.Swatches.find(item => item.IsDefault === true) ?? colorAttribute!.Swatches[0];\r\n return defaultSwatch;\r\n }\r\n\r\n /**\r\n * Gets the product image from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\n function getProductImageUrlFromDefaultColorSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n return productData?.PrimaryImageUrl;\r\n }\r\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n return defaultSwatch && ArrayExtensions.hasElements(defaultSwatch.ProductImageUrls)\r\n ? generateImageUrl(defaultSwatch.ProductImageUrls[0], coreContext.request.apiSettings)\r\n : productData?.PrimaryImageUrl;\r\n }\r\n\r\n /**\r\n * Gets the product page url from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productUrl - Product page url for the product card.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\n function getProductPageUrlFromDefaultSwatch(\r\n coreContext: ICoreContext,\r\n productUrl: string,\r\n productData?: ProductSearchResult\r\n ): string | undefined {\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n // Moe change: check domain config and update\r\n if (props.isOCH) {\r\n const index: any = product?.ExtensionProperties?.findIndex(p => p.Key === 'LocaleDomainMappings');\r\n if (\r\n index > -1 &&\r\n product?.ExtensionProperties &&\r\n product?.ExtensionProperties?.length > 0 &&\r\n product?.ExtensionProperties[index]?.Value?.StringValue !== ''\r\n ) {\r\n const constructedFullUrl = new URL(productUrl, coreContext.request.apiSettings.baseUrl);\r\n constructedFullUrl.searchParams.set('domain', product?.ExtensionProperties[index]?.Value?.StringValue as string);\r\n return constructedFullUrl.pathname + constructedFullUrl.search;\r\n }\r\n\r\n if (props.domainData) {\r\n const constructedFullUrl = new URL(productUrl, coreContext.request.apiSettings.baseUrl);\r\n constructedFullUrl.searchParams.set('domain', props.domainData);\r\n return constructedFullUrl.pathname + constructedFullUrl.search;\r\n }\r\n }\r\n\r\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n return productUrl;\r\n }\r\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n if (!defaultSwatch || !defaultSwatch.SwatchValue) {\r\n return productUrl;\r\n }\r\n\r\n const queryString = `color=${defaultSwatch.SwatchValue}`;\r\n return updateProductUrl(productUrl, coreContext, queryString);\r\n }\r\n\r\n let productUrl = product ? getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined) : '';\r\n if (allowBack && productUrl) {\r\n productUrl = updateProductUrl(productUrl, context, 'back=true');\r\n }\r\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultColorSwatch(context, product) ?? product?.PrimaryImageUrl;\r\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\r\n const [productPageUrl = productPageUrlFromSwatch, setProductPageUrl] = useState();\r\n const [productImageUrl = productImageUrlFromSwatch, setProductImageUrl] = useState();\r\n const [selectedSwatchItems] = useState(new Dictionary());\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n const enableStockCheck = context.app.config.enableStockCheck;\r\n const addToCollectionConfig = {\r\n modalTitle: 'Add to collection',\r\n modalTitleMaori: 'Tāpirihia ki te kohinga',\r\n siteName: props?.config?.siteName\r\n };\r\n\r\n /**\r\n * Updates the product page and Image url based on swatch selected.\r\n * @param coreContext - Context of the caller.\r\n * @param swatchItem - Dimension swatch selected.\r\n */\r\n const updatePageAndImageUrl = React.useCallback(\r\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\r\n const dimensionType = swatchItem.dimensionType;\r\n selectedSwatchItems.setValue(dimensionType, swatchItem);\r\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\r\n return;\r\n }\r\n const queryString = `${dimensionType}=${swatchItem.value}`;\r\n let productPageUrlWithSwatch = '';\r\n if (productPageUrl.includes(dimensionType)) {\r\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\r\n newUrl.searchParams.delete(dimensionType);\r\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\r\n } else {\r\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\r\n }\r\n setProductPageUrl(productPageUrlWithSwatch);\r\n if (dimensionType === DimensionTypes.color) {\r\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\r\n ? swatchItem.productImageUrls[0]\r\n : undefined;\r\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\r\n setProductImageUrl(newImageUrl);\r\n }\r\n },\r\n [selectedSwatchItems, context, productPageUrl]\r\n );\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n const swatchItems = ArrayExtensions.validValues(\r\n product.AttributeValues?.map(item => {\r\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\r\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(\r\n dimensionTypeValue as DimensionTypes,\r\n context as ICoreContext,\r\n DimensionSwatchDisplayTypes.productCard\r\n );\r\n if (!shouldDisplayAsSwatch) {\r\n return null;\r\n }\r\n\r\n const siteContext = context as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n const dimensionType = dimensionTypeValue as DimensionTypes;\r\n const swatches =\r\n item.Swatches?.map(swatchItem => {\r\n return {\r\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\r\n value: swatchItem.SwatchValue ?? '',\r\n dimensionType,\r\n colorHexCode: swatchItem.SwatchColorHexCode,\r\n imageUrl: swatchItem.SwatchImageUrl,\r\n productImageUrls: swatchItem.ProductImageUrls,\r\n isDefault: swatchItem.IsDefault,\r\n isDisabled:\r\n enableStockCheck &&\r\n dimensionAvailabilities?.find(\r\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\r\n )?.isDisabled\r\n };\r\n }) ?? [];\r\n if (\r\n dimensionToPreSelectInProductCard !== DimensionTypes.none &&\r\n ArrayExtensions.hasElements(swatches) &&\r\n !swatches.some(swatch => swatch.isDefault) &&\r\n dimensionType === DimensionTypes.color\r\n ) {\r\n swatches[0].isDefault = true;\r\n }\r\n return { recordId: item.RecordId, swatches };\r\n })\r\n );\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\r\n // const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\r\n\r\n // /**\r\n // * Gets the react node for product unit of measure display.\r\n // * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\r\n // * @returns The node representing markup for unit of measure component.\r\n // */\r\n // function renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\r\n // if (!unitOfMeasure) {\r\n // return null;\r\n // }\r\n // return (\r\n //
\r\n // {unitOfMeasure}\r\n //
\r\n // );\r\n // }\r\n\r\n /**\r\n * Gets the react node for product availability.\r\n * @param inventoryAvailabilityLabel - The product information.\r\n * @returns The node representing markup for product availability.\r\n */\r\n // function renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\r\n // if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\r\n // return null;\r\n // }\r\n\r\n // return (\r\n //
\r\n // {inventoryAvailabilityLabel}\r\n //
\r\n // );\r\n // }\r\n\r\n /**\r\n * Gets the react node for product dimension as swatch.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductDimensions(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(swatchItems)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {swatchItems.map(item => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param quickview - Quick view node.\r\n * @param item - Product id to de displayed in quickview.\r\n * @returns The product quickview component.\r\n */\r\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\r\n if (quickview === null) {\r\n return undefined;\r\n }\r\n\r\n const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\r\n return {\r\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\r\n DimensionValue: {\r\n RecordId: 0,\r\n Value: swatches.value\r\n }\r\n };\r\n });\r\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\r\n }\r\n\r\n /**\r\n * Gets the aria label for rating.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Aria label format for rating.\r\n * @returns The product rating aria label string.\r\n */\r\n function getRatingAriaLabel(rating?: number, ratingAriaLabelText?: string): string {\r\n if (rating && ratingAriaLabelText) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabelText || '', roundedRating, '5');\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label for review count.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Aria label format for review.\r\n * @returns The product review count aria label string.\r\n */\r\n function getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\r\n if (reviewCount && ratingCountAriaLabelText) {\r\n return format(ratingCountAriaLabelText || '', reviewCount);\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label string for product that includes product name with its price and rating.\r\n * @param name - Product name.\r\n * @param price - Product price.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Rating aria label text.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Number of ratings.\r\n * @returns The aria label string for the product card.\r\n */\r\n function renderLabel(\r\n name?: string,\r\n price?: string,\r\n rating?: number,\r\n ratingAriaLabelText?: string,\r\n reviewCount?: number,\r\n ratingCountAriaLabelText?: string\r\n ): string {\r\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\r\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\r\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\r\n }`;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param productCardimageSettings - Module image settings for product card.\r\n * @param gridSettings - Grid settings defined in theme.\r\n * @param imageUrl - Image url.\r\n * @param fallbackImageUrl - Fallback url for imge.\r\n * @param altText - Image Alt text.\r\n * @param requestContext - Request context using the component.\r\n * @returns React component for product image.\r\n */\r\n function renderProductPlacementImage(\r\n productCardimageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n fallbackImageUrl?: string,\r\n altText?: string,\r\n requestContext?: IRequestContext\r\n ): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !productCardimageSettings) {\r\n return null;\r\n }\r\n\r\n const image: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : '',\r\n fallBackSrc: fallbackImageUrl\r\n };\r\n const imageProps: IImageProps = { gridSettings };\r\n imageProps.gridSettings = gridSettings;\r\n imageProps.imageSettings = productCardimageSettings;\r\n imageProps.imageSettings.cropFocalRegion = true;\r\n return ;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param basePrice - Product base price.\r\n * @param adjustedPrice - Product adjusted price.\r\n * @param maxVariantPrice - Product variant max price.\r\n * @param minVariantPrice - Product variant min price.\r\n * @param savingsPriceResourceText - Product price saving text.\r\n * @param freePriceResourceText - Product price free text.\r\n * @param originalPriceResourceText - Product price original text.\r\n * @param currentPriceResourceText - Product price current text.\r\n * @returns React component for Product price.\r\n */\r\n // function renderPrice(\r\n // coreContext: ICoreContext,\r\n // moduleTypeName: string,\r\n // moduleId: string,\r\n // basePrice?: number,\r\n // adjustedPrice?: number,\r\n // maxVariantPrice?: number,\r\n // minVariantPrice?: number,\r\n // savingsPriceResourceText?: string,\r\n // freePriceResourceText?: string,\r\n // originalPriceResourceText?: string,\r\n // currentPriceResourceText?: string\r\n // ): JSX.Element | null {\r\n // const price: ProductPrice = {\r\n // BasePrice: basePrice,\r\n // AdjustedPrice: adjustedPrice,\r\n // CustomerContextualPrice: adjustedPrice,\r\n // MaxVariantPrice: maxVariantPrice ? maxVariantPrice : adjustedPrice,\r\n // MinVariantPrice: minVariantPrice ? minVariantPrice : adjustedPrice\r\n // };\r\n\r\n // return (\r\n // \r\n // );\r\n // }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param description - Product description.\r\n * @returns The product description component.\r\n */\r\n // function renderDescription(description?: string): JSX.Element | null {\r\n // return

{description}

;\r\n // }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param avgRating - Average rating.\r\n * @param totalRatings - Total rating.\r\n * @param ariaLabel - Aria label for rating.\r\n * @returns React component for Product rating.\r\n */\r\n function renderRating(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n avgRating?: number,\r\n totalRatings?: number,\r\n ariaLabel?: string\r\n ): JSX.Element | null {\r\n // if (!avgRating) {\r\n // return null;\r\n // }\r\n\r\n const numberRatings = totalRatings?.toString() || undefined;\r\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\r\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n function renderRightNavigationButton(product: any) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n function renderResourceIcon(props: any) {\r\n const addtocollectionIcon = (\r\n {\r\n throw new Error('Function not implemented .');\r\n }}\r\n renderView={function>(\r\n props: T\r\n ): ReactElement> | null {\r\n throw new Error('Function not implemented .');\r\n }}\r\n data={props.data}\r\n dataActions={{}}\r\n friendlyName={''}\r\n id={''}\r\n typeName={''}\r\n />\r\n );\r\n\r\n console.log('listviewResourceIcon1', addtocollectionIcon);\r\n\r\n return addtocollectionIcon;\r\n }\r\n\r\n function renderProductAttributes() {\r\n if (!data.product?.AttributeValues) {\r\n //return null;\r\n return
;\r\n }\r\n\r\n return
{renderTextCell(data.product)}
;\r\n }\r\n\r\n function renderTextCell(product: any): JSX.Element | null {\r\n // eslint-disable-next-line eqeqeq\r\n return product?.AttributeValues.filter(\r\n (attribute: any, index: any) => attribute.Name === 'Resource Language' || attribute.Name === 'Audience'\r\n ).map((attribute: any, index: any) => {\r\n return (\r\n
\r\n {attribute.TextValue.split(';')[0]}\r\n
\r\n );\r\n });\r\n }\r\n\r\n // /**\r\n // * Gets the react node for product description.\r\n // * @param quickview - Quick view node.\r\n // * @param item - Product id to de displayed in quickview.\r\n // * @returns The product quickview component.\r\n // */\r\n // function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\r\n // if (quickview === null) {\r\n // return undefined;\r\n // }\r\n\r\n // const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\r\n // return {\r\n // DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\r\n // DimensionValue: {\r\n // RecordId: 0,\r\n // Value: swatches.value\r\n // }\r\n // };\r\n // });\r\n // return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\r\n // }\r\n\r\n // console.log(\"product component\");\r\n\r\n return (\r\n <>\r\n {/*\r\n Changes::\r\n New layout\r\n For old Layout: Goto component override in theme and find product.component.tsx file\r\n */}\r\n\r\n
\r\n \r\n

\r\n {product.Name}\r\n \r\n {renderRightNavigationButton(product)}\r\n \r\n

\r\n
\r\n
\r\n
\r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context.actionContext.requestContext\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n

\r\n {product.Description ? product.Description : 'This product has no description'}\r\n
\r\n  \r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {renderProductAttributes()}\r\n {!product.Name ? renderProductDimensions() : null}\r\n
\r\n {!isOCH && quickViewButton && product.RecordId && renderQuickView(quickViewButton, product.RecordId)}\r\n {!isOCH && renderResourceIcon(props)}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\n// export const ProductListViewComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n// IProductComponent\r\n// >('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductListViewComponent;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IMoeSearchResultContainerResources } from '../moe-search-result-container.props.autogenerated';\r\nimport ProductListViewComponent from './product-list-view';\r\n\r\ninterface IProductSearchResultItems {\r\n products: ProductSearchResult[];\r\n context: ICoreContext;\r\n resources: IMoeSearchResultContainerResources;\r\n imageSettings?: IImageSettings;\r\n moduleType: string;\r\n moduleId: string;\r\n allowBackNavigation?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n quickviewSlot?: {} | null | undefined;\r\n channelInventoryConfigurationId?: number;\r\n isPriceMinMaxEnabled?: boolean;\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n listView?: boolean;\r\n isOCH?: boolean;\r\n domainData?: string;\r\n}\r\n\r\n/**\r\n * Returns the product inventory label.\r\n * @param channelInventoryConfigurationId - The channel configuration Id.\r\n * @param product - The product.\r\n * @returns The inventory label.\r\n */\r\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\r\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\r\n return undefined;\r\n }\r\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\r\n if (inventoryAttribute) {\r\n return inventoryAttribute.TextValue;\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const ProductSearchResultItems: React.FC = ({\r\n products,\r\n context,\r\n imageSettings,\r\n resources,\r\n moduleType,\r\n moduleId,\r\n allowBackNavigation,\r\n telemetryContent,\r\n quickviewSlot,\r\n channelInventoryConfigurationId,\r\n isPriceMinMaxEnabled,\r\n productsDimensionAvailabilities,\r\n listView,\r\n isOCH,\r\n domainData\r\n}) => {\r\n const priceResources: IPriceComponentResources = {\r\n priceRangeSeparator: resources.priceRangeSeparatorInMaori\r\n };\r\n\r\n if (listView) {\r\n return (\r\n
    \r\n {products.map((product: ProductSearchResult, index: number) => (\r\n
  • \r\n \r\n ArrayExtensions.hasElements(dimensionAvailability) &&\r\n dimensionAvailability[0].masterProductId === product.MasterProductId\r\n )}\r\n domainData={domainData}\r\n />\r\n
  • \r\n ))}\r\n
\r\n );\r\n } else {\r\n return (\r\n
    \r\n {products.map((product: ProductSearchResult, index: number) => (\r\n
  • \r\n \r\n ArrayExtensions.hasElements(dimensionAvailability) &&\r\n dimensionAvailability[0].masterProductId === product.MasterProductId\r\n )}\r\n />\r\n
  • \r\n ))}\r\n
\r\n );\r\n }\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\r\nimport debounce from 'lodash/debounce';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\r\n\r\ntype InputType = 'Min' | 'Max';\r\n\r\nexport type RangeRefineItemType = 'slider' | 'input';\r\n\r\n/**\r\n * Range refine item properties.\r\n */\r\nexport interface IRangeRefineItemProps extends IRefineItemProps {\r\n rangeType: RangeRefineItemType;\r\n minValueSliderThumbAriaLabel?: string;\r\n maxValueSliderThumbAriaLabel?: string;\r\n sliderKey?: string;\r\n}\r\n\r\n/**\r\n * Range refine item state.\r\n */\r\nexport interface IRangeRefineItemState extends IRefineItemState {\r\n validationErrorMin: string | undefined;\r\n validationErrorMax: string | undefined;\r\n selectedMin: string | undefined;\r\n selectedMax: string | undefined;\r\n touchedMin: boolean;\r\n touchedMax: boolean;\r\n sliderId: string;\r\n minValue: string | undefined;\r\n maxValue: string | undefined;\r\n labels: ISliderLabel[];\r\n sliderThumbs: ISliderThumbProps[];\r\n}\r\n\r\n/**\r\n * RangeRefineItem component (controlled by RefineSubmenu).\r\n */\r\n@observer\r\nexport default class RangeRefineItem extends React.Component {\r\n private readonly _formattedPriceReverseLookup: Map = new Map();\r\n\r\n private readonly minInput: React.RefObject;\r\n\r\n private readonly maxInput: React.RefObject;\r\n\r\n @computed get currencyCode(): string {\r\n return this.props.productRefinerValue.UnitText || '';\r\n }\r\n\r\n public constructor(props: IRangeRefineItemProps) {\r\n super(props);\r\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\r\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\r\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\r\n this._changeMin = this._changeMin.bind(this);\r\n this._changeMax = this._changeMax.bind(this);\r\n this._finishChangeMin = this._finishChangeMin.bind(this);\r\n this._finishChangeMax = this._finishChangeMax.bind(this);\r\n\r\n this.minInput = React.createRef();\r\n this.maxInput = React.createRef();\r\n\r\n const { selectedRefinementCriterion } = this.props;\r\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\r\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\r\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\r\n this.props.productRefinerValue.RefinerRecordId\r\n )}`;\r\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\r\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\r\n const minPrice = this._formatPrice(minValue);\r\n const maxPrice = this._formatPrice(maxValue);\r\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\r\n const selectedMin =\r\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\r\n const selectedMax =\r\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\r\n this.props.productRefinerValue.RightValueBoundString ??\r\n maxValue;\r\n const selectedMinPrice = this._formatPrice(selectedMin);\r\n const selectedMaxPrice = this._formatPrice(selectedMax);\r\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\r\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\r\n sliderId,\r\n sliderKeyString,\r\n selectedMin,\r\n selectedMinPrice,\r\n selectedMax,\r\n selectedMaxPrice,\r\n maxPrice\r\n );\r\n this.state = {\r\n isChecked: false,\r\n validationErrorMin: undefined,\r\n validationErrorMax: undefined,\r\n selectedMin: initialMin,\r\n selectedMax: initialMax,\r\n touchedMin: false,\r\n touchedMax: false,\r\n sliderId,\r\n minValue,\r\n maxValue,\r\n labels,\r\n sliderThumbs\r\n };\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\r\n if (previousProps !== this.props) {\r\n this.updateSliderProps();\r\n }\r\n }\r\n\r\n public render(): JSX.Element | undefined {\r\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\r\n\r\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\r\n refineItemCommonProps.telemetry.error(\r\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\r\n );\r\n return undefined;\r\n }\r\n\r\n if (this.props.rangeType === 'input') {\r\n return this._renderInputFields();\r\n }\r\n\r\n return this._renderSlider();\r\n }\r\n\r\n /**\r\n * Function to update slider props.\r\n */\r\n private updateSliderProps(): void {\r\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\r\n this.props.productRefinerValue.RefinerRecordId\r\n )}`;\r\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\r\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\r\n const minPrice = this._formatPrice(minValue);\r\n const maxPrice = this._formatPrice(maxValue);\r\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\r\n const selectedMin =\r\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\r\n const selectedMax =\r\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\r\n this.props.productRefinerValue.RightValueBoundString ??\r\n maxValue;\r\n const selectedMinPrice = this._formatPrice(selectedMin);\r\n const selectedMaxPrice = this._formatPrice(selectedMax);\r\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\r\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\r\n sliderId,\r\n sliderKeyString,\r\n selectedMin,\r\n selectedMinPrice,\r\n selectedMax,\r\n selectedMaxPrice,\r\n maxPrice\r\n );\r\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\r\n }\r\n\r\n /**\r\n * Function to create the labels for slider.\r\n * @param sliderId - Slider element id for the DOM.\r\n * @param minPrice - Slider min value.\r\n * @param maxPrice - Slider max value.\r\n * @returns Array labels.\r\n */\r\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\r\n return [\r\n {\r\n labelId: `${sliderId}_start`,\r\n labelString: `${minPrice}`,\r\n labelPositioning: 'start'\r\n },\r\n {\r\n labelId: `${sliderId}_end`,\r\n labelString: `${maxPrice}`,\r\n labelPositioning: 'end'\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Function to create the slider thumbs for slider.\r\n * @param sliderId - Slider element id for the DOM.\r\n * @param sliderKey - Unique key for slider.\r\n * @param selectedMin - Slider selected min value.\r\n * @param selectedMinPrice - Slider selected min price.\r\n * @param selectedMax - Slider selected max value.\r\n * @param selectedMaxPrice - Slider selected max price..\r\n * @param maxPrice - Slider max price..\r\n * @returns Slider Thumb Props.\r\n */\r\n private readonly getSliderThumbs = (\r\n sliderId: string,\r\n sliderKey: string,\r\n selectedMin: string,\r\n selectedMinPrice: string,\r\n selectedMax: string | undefined,\r\n selectedMaxPrice: string,\r\n maxPrice: string\r\n ): ISliderThumbProps[] => {\r\n const sliderThumbDefaultValue = 0;\r\n return [\r\n {\r\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\r\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\r\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\r\n ariaValueText: `${selectedMinPrice}`\r\n },\r\n {\r\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\r\n value: Number(selectedMax) || Number(maxPrice),\r\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\r\n ariaValueText: `${selectedMaxPrice}`\r\n }\r\n ];\r\n };\r\n\r\n private _renderInputFields(): JSX.Element | undefined {\r\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\r\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\r\n\r\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\r\n const formAttrs = {\r\n 'aria-label': rangeAriaLabel,\r\n 'aria-disabled': isDisabled\r\n };\r\n\r\n // To enable price formatting of selected fields, this is the approach:\r\n // initial value: min=0 formatted as price, max=undefined\r\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\r\n // onBlur: validate and format entered value as price\r\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\r\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\r\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\r\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\r\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\r\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\r\n return (\r\n
\r\n \r\n \r\n {validationErrorMin && (\r\n \r\n {validationErrorMin}\r\n \r\n )}\r\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\r\n \r\n {validationErrorMax}\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n private _renderSlider(): JSX.Element | undefined {\r\n const { isDisabled, sliderKey } = this.props;\r\n const ariaAttributes = {\r\n 'aria-disabled': isDisabled\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _changeMin(event: React.FocusEvent): void {\r\n this._changeValue(event, 'Min');\r\n }\r\n\r\n private _changeMax(event: React.FocusEvent): void {\r\n this._changeValue(event, 'Max');\r\n }\r\n\r\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\r\n const selectedKey = `selected${inputType}`;\r\n const touchedKey = `touched${inputType}`;\r\n this.setState({\r\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\r\n [touchedKey]: true\r\n });\r\n }\r\n\r\n private _finishChangeMin(event: React.FocusEvent): boolean {\r\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\r\n this.setState({\r\n selectedMin: selectedMinValue,\r\n minTouched: false\r\n });\r\n const minInput = Number(selectedMinValue);\r\n const {\r\n onToggle,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n refineItemCommonProps,\r\n selectedRefinementCriterion\r\n } = this.props;\r\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\r\n\r\n const maxNum = max ? Number(max) : undefined;\r\n\r\n if (isNaN(minInput)) {\r\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\r\n this._focus('Min');\r\n return false;\r\n }\r\n\r\n if (this._validateRange(minInput, maxNum)) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: minInput,\r\n rangeEnd: maxNum\r\n });\r\n return true;\r\n }\r\n this._focus('Min');\r\n\r\n return false;\r\n }\r\n\r\n private _finishChangeMax(event: React.FocusEvent): boolean {\r\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\r\n this.setState({\r\n selectedMax: selectedMaxValue,\r\n maxTouched: false\r\n });\r\n const maxInput = Number(selectedMaxValue);\r\n const {\r\n onToggle,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n refineItemCommonProps,\r\n selectedRefinementCriterion\r\n } = this.props;\r\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\r\n\r\n const minNum = Number(min);\r\n\r\n if (isNaN(maxInput)) {\r\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\r\n this._focus('Max');\r\n return false;\r\n }\r\n\r\n if (this._validateRange(minNum, maxInput)) {\r\n if (productRefinerValue) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: minNum,\r\n rangeEnd: maxInput\r\n });\r\n } else {\r\n this._focus('Max');\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _focus(inputType: InputType): void {\r\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\r\n\r\n setTimeout(() => {\r\n if (ref && ref.current) {\r\n ref.current.focus();\r\n }\r\n }, 50);\r\n }\r\n\r\n private _getFormattedSelectedValue(\r\n selected: string | undefined,\r\n touched: boolean,\r\n validationError: string | undefined\r\n ): string | undefined {\r\n if (touched || validationError || selected === undefined) {\r\n return selected;\r\n }\r\n return this._formatPrice(selected);\r\n }\r\n\r\n private _validateRange(min: number, max: number | undefined): boolean {\r\n const { refineItemCommonProps } = this.props;\r\n if (max === undefined) {\r\n return true;\r\n }\r\n\r\n if (min > max) {\r\n this.setState({\r\n validationErrorMin: refineItemCommonProps.validationErrorRange,\r\n validationErrorMax: refineItemCommonProps.validationErrorRange\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _formatPrice(amount: string | undefined): string {\r\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\r\n return result;\r\n }\r\n\r\n private _getInputWithoutFormatting(input: string): string {\r\n // First try to cast raw input to a number\r\n const inputAsNum = Number(input);\r\n if (!isNaN(inputAsNum)) {\r\n return input;\r\n }\r\n\r\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\r\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\r\n return reverseLookupResult || input;\r\n }\r\n\r\n // NOTE: Fix types once Shared Components build pipeline bug fixed\r\n private _onRangeUpdate(sliderChangeNotification: any): void {\r\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\r\n if (sliderChangeNotification.eventType !== 'mousemove') {\r\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\r\n if (productRefinerValue && sliderChangeNotification) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: sliderChangeNotification.firstThumbValue,\r\n rangeEnd: sliderChangeNotification.secondThumbValue\r\n });\r\n\r\n this._focusOnSliderThumb(sliderChangeNotification);\r\n }\r\n }\r\n }\r\n\r\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\r\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\r\n if (productRefinerValue && sliderChangeNotification) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: sliderChangeNotification.firstThumbValue,\r\n rangeEnd: sliderChangeNotification.secondThumbValue\r\n });\r\n\r\n this._focusOnSliderThumb(sliderChangeNotification);\r\n }\r\n }\r\n\r\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\r\n if (sliderChangeNotification.id) {\r\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\r\n if (element) {\r\n setTimeout(() => {\r\n element.focus();\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n private _handleRangeTooltipText(tooltip: number): string {\r\n return this._formatPrice(`${tooltip}`);\r\n }\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\r\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IRefineItemCommonProps } from './refine-item.props.common';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\n\r\n/**\r\n * RefineItem properties.\r\n */\r\nexport interface IRefineItemProps {\r\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\r\n productRefinerValue: ProductRefinerValue;\r\n selectedRefinementCriterion: ProductRefinerValue | undefined;\r\n selectedRefinerValues?: ProductRefinerValue[];\r\n refineItemCommonProps: IRefineItemCommonProps;\r\n isDisabled: boolean;\r\n context: ICoreContext>;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n index?: number;\r\n productCountAriaLabel?: string;\r\n singleProductCountAriaLabel?: string;\r\n isMobileView?: boolean;\r\n\r\n /**\r\n * The telemetry content\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onToggle(notfication: Readonly): void;\r\n urlBuilder(refiner: IRefineItemToggleNotification): string;\r\n}\r\n\r\n/**\r\n * Refine item state.\r\n */\r\nexport interface IRefineItemState extends React.ComponentState {\r\n isChecked: boolean;\r\n renderingError?: object;\r\n}\r\n\r\n/**\r\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\r\n */\r\nexport default class RefineItem extends React.Component {\r\n private readonly anchorType: React.RefObject;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n public constructor(props: IRefineItemProps) {\r\n super(props);\r\n this._onClick = this._onClick.bind(this);\r\n this.state = {\r\n isChecked: !!this.props.selectedRefinementCriterion\r\n };\r\n this.anchorType = React.createRef();\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n selectedRefinementCriterion,\r\n productCountAriaLabel,\r\n singleProductCountAriaLabel,\r\n index,\r\n children,\r\n onToggle,\r\n context,\r\n telemetryContent,\r\n ...attrs\r\n } = this.props;\r\n if (!productRefinerValue) {\r\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\r\n return undefined;\r\n }\r\n if (!productRefinerValue.LeftValueBoundString) {\r\n refineItemCommonProps.telemetry.warning(\r\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\r\n );\r\n }\r\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\r\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\r\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\r\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\r\n const isChecked = !!selectedRefinementCriterion;\r\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\r\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\r\n return this._renderRating(\r\n productRefinerValue,\r\n parentProductRefinerHierarchy,\r\n isChecked,\r\n context,\r\n index,\r\n telemetryContent,\r\n productCountAriaLabel,\r\n singleProductCountAriaLabel\r\n );\r\n }\r\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString;\r\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\r\n const refinerItemTextArray = productRefinerValue.LeftValueBoundLocalizedString\r\n ? productRefinerValue.LeftValueBoundLocalizedString.split('^')\r\n : productRefinerValue.LeftValueBoundString?.split('^') || '';\r\n\r\n return (\r\n
  • \r\n \r\n {this._renderSwatch()}\r\n \r\n {refinerItemTextArray[1] || refinerItemTextArray[0]}\r\n {productRefinerValue.Count !== undefined && ` (${productRefinerValue.Count})`}\r\n \r\n \r\n
  • \r\n );\r\n }\r\n\r\n private _renderSwatch(): JSX.Element | null {\r\n const productRefinerValue = this.props.productRefinerValue;\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\r\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n\r\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\r\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\r\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\r\n const hasValidSwatch = hasColor || hasImage;\r\n const shouldDisplayAsSwatch =\r\n hasValidSwatch && checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\r\n const swatchItems = shouldDisplayAsSwatch\r\n ? [\r\n {\r\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\r\n value: text,\r\n dimensionType,\r\n colorHexCode: productRefinerValue.SwatchColorHexCode,\r\n imageUrl: productRefinerValue.SwatchImageUrl\r\n }\r\n ]\r\n : undefined;\r\n\r\n if (!swatchItems) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _getRefinerUrl(): string {\r\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\r\n\r\n if (productRefinerValue) {\r\n return urlBuilder({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: !selectedRefinementCriterion\r\n });\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private readonly _onClick = (e: React.MouseEvent): void => {\r\n e.preventDefault();\r\n\r\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\r\n console.log('productRefinerValues', parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion);\r\n if (productRefinerValue) {\r\n this.props.onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: !selectedRefinementCriterion\r\n });\r\n\r\n setTimeout(() => {\r\n this.anchorType.current && this.anchorType.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n private _renderRating(\r\n productRefinerValue: ProductRefinerValue,\r\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\r\n isChecked: boolean,\r\n context: ICoreContext,\r\n index?: number,\r\n telemetryContent?: ITelemetryContent,\r\n ratingUserCountAriaLabel?: string,\r\n ratingSingleUserCountAriaLabel?: string\r\n ): JSX.Element | undefined {\r\n if (productRefinerValue.LeftValueBoundString) {\r\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\r\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\r\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\r\n const ratingRefiner = this.props.selectedRefinerValues?.find(\r\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\r\n );\r\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\r\n const defaultChkProductCount = 1;\r\n let ratingComponentClass: string = 'ms-rating-component';\r\n if (refinerRating > selectedRating) {\r\n ratingComponentClass = `${ratingComponentClass}__up`;\r\n } else if (refinerRating < selectedRating) {\r\n ratingComponentClass = `${ratingComponentClass}__down`;\r\n } else {\r\n ratingComponentClass = `${ratingComponentClass}__current`;\r\n }\r\n const productCountAriaLabelValue =\r\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\r\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\r\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\r\n return (\r\n \r\n \r\n \r\n \r\n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\r\n \r\n \r\n \r\n );\r\n }\r\n return undefined;\r\n }\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\r\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\r\nimport RefineItem from './refine-item';\r\nimport { IRefineItemCommonProps } from './refine-item.props.common';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\r\n\r\n/**\r\n * Properties associated with the RefineSubmenu component.\r\n */\r\nexport interface IRefineSubmenuProps {\r\n tempRangeTypeTODO: RangeRefineItemType;\r\n minValueSliderThumbAriaLabel?: string;\r\n maxValueSliderThumbAriaLabel?: string;\r\n productRefinerHierarchy: IProductRefinerHierarchy;\r\n selectedRefinerValues: ProductRefinerValue[];\r\n refineItemCommonProps: IRefineItemCommonProps;\r\n isDisabled: boolean;\r\n isExpandedOnInitialLoad: boolean;\r\n context: ICoreContext>;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n productCountAriaLabel?: string;\r\n singleProductCountAriaLabel?: string;\r\n isMobile?: boolean;\r\n\r\n /**\r\n * The telemetry content\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onUpdateRefiners(notfication: Readonly): void;\r\n urlBuilder(refiner: IRefineItemToggleNotification): string;\r\n config: any;\r\n expandCollapseAll?: string | boolean;\r\n}\r\n\r\n/**\r\n * Refine submenu state.\r\n */\r\nexport interface IRefineSubmenuState extends React.ComponentState {\r\n expanded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * The RefineSubmenu component renders the submenu category and child items.\r\n * This computed observes the stateful category hierarchy object.\r\n * @extends {React.PureComponent}\r\n */\r\nclass RefineSubmenu extends React.Component {\r\n private localExpand: boolean = false;\r\n\r\n constructor(props: IRefineSubmenuProps) {\r\n super(props);\r\n\r\n this._onToggleItem = this._onToggleItem.bind(this);\r\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\r\n\r\n const isExpanded = this.props.isExpandedOnInitialLoad;\r\n this.localExpand = false;\r\n\r\n // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\r\n // isExpanded = true;\r\n // }\r\n\r\n this.state = {\r\n expanded: isExpanded\r\n };\r\n }\r\n\r\n // public componentDidMount() {\r\n // if (this.props.expandCollapseAll !== '') {\r\n // console.log('We got here');\r\n // this.setState({ isExpanded: this.props.expandCollapseAll });\r\n // }\r\n // }\r\n\r\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public _renderExpandCollapseAll() {\r\n if (this.props.expandCollapseAll !== '') {\r\n if (this.state.expanded !== this.props.expandCollapseAll) {\r\n this.setState({ expanded: this.props.expandCollapseAll as any });\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\r\n\r\n console.log(productRefinerHierarchy);\r\n\r\n if (!productRefinerHierarchy) {\r\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\r\n }\r\n\r\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\r\n return null;\r\n }\r\n\r\n if (!this.localExpand) {\r\n this._renderExpandCollapseAll();\r\n }\r\n\r\n this.localExpand = false;\r\n\r\n const setLearningArea = (): string => {\r\n return this.props.config.learningAreaName;\r\n };\r\n\r\n return (\r\n
    \r\n \r\n {productRefinerHierarchy.KeyName === 'Category' ? setLearningArea() : productRefinerHierarchy.KeyName}\r\n \r\n\r\n \r\n {this._renderChildItems(productRefinerHierarchy)}\r\n \r\n
    \r\n );\r\n }\r\n\r\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\r\n return this._renderRange(productRefinerHierarchy);\r\n }\r\n return this._renderSingleMultiSelect(productRefinerHierarchy);\r\n }\r\n\r\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n selectedRefinerValues,\r\n context,\r\n productCountAriaLabel,\r\n singleProductCountAriaLabel,\r\n isMobile\r\n } = this.props;\r\n const isSingleSelect =\r\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\r\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\r\n const role = isSingleSelect ? { role: 'radiogroup' } : undefined;\r\n const refinerValuesList = productRefinerHierarchy.Values || [];\r\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\r\n if (!child) {\r\n refineItemCommonProps.telemetry.error(\r\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\r\n );\r\n return null;\r\n }\r\n\r\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\r\n\r\n return (\r\n \r\n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\r\n )}\r\n refineItemCommonProps={refineItemCommonProps}\r\n onToggle={this._onToggleItem}\r\n urlBuilder={this.props.urlBuilder}\r\n isDisabled={isDisabled}\r\n key={index}\r\n index={index}\r\n context={context}\r\n moduleId={this.props.moduleId}\r\n moduleTypeName={this.props.moduleTypeName}\r\n telemetryContent={this.props.telemetryContent}\r\n productCountAriaLabel={productCountAriaLabel}\r\n singleProductCountAriaLabel={singleProductCountAriaLabel}\r\n isMobileView={isMobile}\r\n />\r\n );\r\n });\r\n return (\r\n \r\n {listItems}\r\n \r\n );\r\n }\r\n\r\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\r\n if (\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\r\n ) {\r\n return 'slider';\r\n }\r\n return 'input';\r\n }\r\n\r\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n selectedRefinerValues,\r\n context,\r\n minValueSliderThumbAriaLabel,\r\n maxValueSliderThumbAriaLabel\r\n } = this.props;\r\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\r\n const refinerValuesList = productRefinerHierarchy.Values || [];\r\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\r\n if (!child) {\r\n refineItemCommonProps.telemetry.error(\r\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\r\n );\r\n return null;\r\n }\r\n\r\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\r\n\r\n const rangeType = this._getRangeType(productRefinerHierarchy);\r\n const key = selectedRefinementCriterion\r\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\r\n : `not-selected-${index}`;\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n });\r\n return
      {listItems}
    ;\r\n }\r\n\r\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\r\n this.props.onUpdateRefiners(itemToggleNotification);\r\n }\r\n\r\n private _onToggleSubmenu(): void {\r\n console.log('ToggleItem');\r\n this.setState(prevState => ({\r\n expanded: !prevState.expanded\r\n }));\r\n this.localExpand = true;\r\n }\r\n\r\n // private _ToggleExpandCollapseSubmenu(refineExpandState: boolean): void {\r\n // this.setState({\r\n // expanded: refineExpandState\r\n // });\r\n // }\r\n}\r\n\r\nexport default RefineSubmenu;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface ISeparator {\r\n separator: string;\r\n}\r\n\r\nexport const Separator: React.FC = ({ separator }) => {separator} ;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface ITitle {\r\n className: string;\r\n text: string;\r\n}\r\n\r\nexport const Title: React.FC = ({ text, className }) => {text} ;\r\n","/* eslint-disable @typescript-eslint/restrict-plus-operands */\r\n/* eslint-disable security/detect-object-injection */\r\n/* eslint-disable @typescript-eslint/no-floating-promises */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n CategoryHierarchy as CategoryHierarchyData,\r\n IProductRefinerHierarchy,\r\n IProductsDimensionsAvailabilities\r\n} from '@msdyn365-commerce/commerce-entities';\r\nimport MsDyn365, { ICoreContext } from '@msdyn365-commerce/core';\r\nimport {\r\n format,\r\n ProductPrice,\r\n ProductRefinerValue,\r\n ProductSearchResult,\r\n SortColumn,\r\n TextValueTranslation\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n DimensionAvailabilitiesForProductSearchResultInput,\r\n DimensionTypes,\r\n getDimensionAvailabilitiesForProductSearchResultAction,\r\n getPriceForProductSearchResult,\r\n IDimensionsApp,\r\n PriceForProductSearchResultInput,\r\n getProductPageUrlSync,\r\n generateImageUrl\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getTelemetryObject,\r\n ILabeledDropdownOnChangeNotification,\r\n ILabeledDropdownOption,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\r\n LabeledDropdown,\r\n UncontrolledPagination\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed, observable, reaction, transaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n buildListPageUrl,\r\n getCollectionProducts,\r\n getCollectionRefinersAction,\r\n getCurrentUrl,\r\n GetFullProductsByCollectionInput,\r\n IFullProductsSearchResultsWithCount,\r\n parseQueryParam,\r\n RefinersByCollectionInput,\r\n sortOptions\r\n} from './actions';\r\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\r\nimport {\r\n ErrorMessage,\r\n FeatureSearchResultItem,\r\n getUpdatedRefinementCriteria,\r\n IChoiceSummaryClickNotification,\r\n IRefineItemCommonProps,\r\n IRefineItemToggleNotification,\r\n ISearchResultModalViewProps,\r\n isMatchingRefinementCriterion,\r\n Link,\r\n ModalToggle,\r\n ProductSearchResultItems,\r\n SearchResultModal,\r\n Separator,\r\n Title,\r\n ICuratedCollection\r\n} from './components';\r\nimport ChoiceSummary from './components/choice-summary';\r\nimport RefineSubmenu from './components/refine-submenu';\r\nimport { IMoeSearchResultContainerData } from './moe-search-result-container.data';\r\nimport { expandRefinersCount, IMoeSearchResultContainerProps } from './moe-search-result-container.props.autogenerated';\r\nimport { ERROR_OR_NOTIFICATION, HEADER_FOOTER, KWR, SEARCH_SITE_LANGUAGE } from '../../utilities/constants';\r\nimport { getToggleLang, getUserPrefLang, getUserPreferredLanguage } from '../../utilities/language-change';\r\nimport { FaArrowRight } from 'react-icons/fa';\r\nimport { IMOEChannel } from '../../actions/extensions/DataServiceEntities.g';\r\nimport { getMOEOnlineStoresAsync, moeSearchProductsAsync } from '../../actions/extensions/DataActionExtension.g';\r\nimport { ListPageState } from './list-page-state';\r\n\r\nexport interface ISearchResultContainerViewProps extends IMoeSearchResultContainerProps {\r\n products?: React.ReactNode;\r\n className?: string;\r\n SearchResultContainer: IModuleProps;\r\n TitleViewProps: ITitleViewProps;\r\n categoryHierarchy: ICategoryHierarchyViewProps;\r\n pagination?: React.ReactNode;\r\n ProductsContainer: INodeProps;\r\n ProductSectionContainer: INodeProps;\r\n refineMenu: IRefineMenuViewProps;\r\n sortByOptions: ISortByViewProps;\r\n choiceSummary?: React.ReactNode;\r\n modalToggle: React.ReactNode;\r\n searchResultModal: ISearchResultModalViewProps;\r\n isMobile: boolean;\r\n CategoryNavContainer: INodeProps;\r\n RefineAndProductSectionContainer: INodeProps;\r\n errorMessage: React.ReactNode;\r\n FeatureSearchContainer: INodeProps;\r\n similarLookProduct?: React.ReactNode;\r\n productPrices?: ProductPrice[];\r\n curatedCollectionData: ICuratedCollection[];\r\n}\r\n\r\nexport interface ITitleViewProps {\r\n TitleContainer: INodeProps;\r\n title: ISearchResultTitle;\r\n}\r\n\r\nexport interface IRefineMenuViewProps {\r\n RefineMenuContainer: INodeProps;\r\n RefinerSectionContainer: INodeProps;\r\n refiners?: React.ReactNode[];\r\n}\r\n\r\nexport interface ICategoryHierarchyViewProps {\r\n categoryHierarchyList?: React.ReactNode[];\r\n categoryHierarchySeparator?: React.ReactNode;\r\n CategoryHierarchyContainer: INodeProps;\r\n}\r\n\r\nexport interface ISortByViewProps {\r\n SortingContainer: INodeProps;\r\n sortByDropDown?: React.ReactNode;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Title component for search result container.\r\n */\r\nexport interface ISearchResultTitle {\r\n titlePrefix?: React.ReactNode;\r\n titleText?: React.ReactNode;\r\n titleCount?: React.ReactNode;\r\n}\r\n\r\nexport interface ISearchResultContainerState {\r\n sortingState: ISortByCollectionState;\r\n modalIsOpen: boolean;\r\n refiners: IProductRefinerHierarchy[];\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n localSearchText: string;\r\n resourcesSkip: number;\r\n ochSkip: number;\r\n artifactsSkip: number;\r\n removeResourceShowMore: boolean;\r\n removeOchShowMore: boolean;\r\n removeArtifactShowMore: boolean;\r\n enableListViewToggle?: boolean;\r\n expandAllRefiners?: string | boolean;\r\n channelData: IMOEChannel[];\r\n tahurangiSearchCount: any[];\r\n}\r\n\r\ninterface ISortByCollectionState {\r\n selectedSortByOption: ILabeledDropdownOption;\r\n pending: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * SearchResultContainer component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nexport default class SearchResultContainer extends React.PureComponent<\r\n IMoeSearchResultContainerProps,\r\n ISearchResultContainerState\r\n> {\r\n @computed get isMobile(): boolean {\r\n return this._viewport === 'xs' || this._viewport === 'sm';\r\n }\r\n\r\n // Identifying Language\r\n private toggleLangStarting = getToggleLang(this.props.context);\r\n private userPrefLangStarting = getUserPrefLang(this.props.context.request.user.customerAccountNumber as any, this.props.context);\r\n private preferredSearchSiteLanguageStarting: any = getUserPreferredLanguage(\r\n KWR,\r\n SEARCH_SITE_LANGUAGE,\r\n this.userPrefLangStarting,\r\n this.toggleLangStarting,\r\n this.props.context\r\n );\r\n\r\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\r\n {\r\n key: sortOptions.sortByOptionRelevanceDesc,\r\n value:\r\n this.preferredSearchSiteLanguageStarting === 'maori'\r\n ? this.props.resources.sortByOptionRelevanceDescInMaori\r\n : this.props.resources.sortByOptionRelevanceDesc\r\n },\r\n {\r\n key: sortOptions.sortByOptionNewScore,\r\n value:\r\n this.preferredSearchSiteLanguageStarting === 'maori'\r\n ? this.props.resources.sortByOptionNewScoreInMaori\r\n : this.props.resources.sortByOptionNewScore\r\n },\r\n {\r\n key: sortOptions.sortByOptionNameAsc,\r\n value:\r\n this.preferredSearchSiteLanguageStarting === 'maori'\r\n ? this.props.resources.sortByOptionNameAscInMaori\r\n : this.props.resources.sortByOptionNameAsc\r\n },\r\n {\r\n key: sortOptions.sortByOptionNameDesc,\r\n value:\r\n this.preferredSearchSiteLanguageStarting === 'maori'\r\n ? this.props.resources.sortByOptionNameDescInMaori\r\n : this.props.resources.sortByOptionNameDesc\r\n },\r\n {\r\n key: sortOptions.sortByOptionRatingDesc,\r\n value:\r\n this.preferredSearchSiteLanguageStarting === 'maori'\r\n ? this.props.resources.sortByOptionRatingDescInMaori\r\n : this.props.resources.sortByOptionRatingDesc\r\n }\r\n // { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSellingInMaori },\r\n // { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScoreInMaori }\r\n ];\r\n\r\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\r\n\r\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\r\n\r\n @observable\r\n private _viewport: GridSize;\r\n\r\n private readonly _modalToggleRef: React.RefObject;\r\n\r\n private readonly localSearchRef: React.RefObject;\r\n\r\n private readonly refineChild: React.RefObject;\r\n\r\n private readonly _sortAndFilterContainerRef: React.RefObject;\r\n\r\n private expandrefinerCount: number | undefined = 0;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly productPrices: ProductPrice[];\r\n\r\n private readonly defaultPageNumber = 0;\r\n\r\n public constructor(props: IMoeSearchResultContainerProps, state: ISearchResultContainerState) {\r\n super(props);\r\n this._viewport =\r\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._modalToggleRef = React.createRef();\r\n this._sortAndFilterContainerRef = React.createRef();\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.productPrices = [];\r\n this.localSearchRef = React.createRef();\r\n this.refineChild = React.createRef();\r\n this.state = {\r\n sortingState: {\r\n pending: false,\r\n selectedSortByOption: this.sortByDropdownOptions[0]\r\n },\r\n modalIsOpen: false,\r\n refiners: [],\r\n localSearchText: '',\r\n resourcesSkip: 0,\r\n ochSkip: 0,\r\n artifactsSkip: 0,\r\n removeResourceShowMore: true,\r\n removeOchShowMore: true,\r\n removeArtifactShowMore: true,\r\n enableListViewToggle: false,\r\n expandAllRefiners: '',\r\n channelData: [],\r\n tahurangiSearchCount: []\r\n };\r\n const { placeholderTextMaxInMaori, minLabelInMaori, maxLabelInMaori, rangeNameFormatInMaori } = this.props.resources;\r\n\r\n const locale = this.props.context.request.locale;\r\n const telemetry = this.props.telemetry;\r\n const validationErrorNaN = this.props.resources.validationErrorNotNumberInMaori;\r\n const validationErrorRange = this.props.resources.validationErrorNotRangeInMaori;\r\n this._refineItemCommonProps = {\r\n telemetry,\r\n locale,\r\n placeholderTextMax: placeholderTextMaxInMaori,\r\n minLabel: minLabelInMaori,\r\n maxLabel: maxLabelInMaori,\r\n rangeNameFormat: rangeNameFormatInMaori,\r\n validationErrorNaN,\r\n validationErrorRange\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n // To remove show more button in the starting\r\n this._getAllArtifactsData({} as any);\r\n this._updateViewport();\r\n }\r\n\r\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\r\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n }\r\n\r\n return nameTranslation?.Text;\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n if (MsDyn365.isBrowser && window.addEventListener) {\r\n window.addEventListener('resize', this._updateViewport);\r\n this._updateViewport();\r\n }\r\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext?.user?.isAuthenticated) {\r\n this._getActivePrice();\r\n }\r\n\r\n const products = await this.props.data.products;\r\n const listPageState = await this.props.data.listPageState;\r\n\r\n await this._updateListPageState(listPageState, products);\r\n reaction(\r\n () => {\r\n return [\r\n listPageState.activeFilters?.length,\r\n // listPageState.currentPageNumber,\r\n listPageState.sortingCritera\r\n // ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns),\r\n // listPageState.sortingCritera?.Columns\r\n ];\r\n },\r\n async () => {\r\n const newListPageState = listPageState;\r\n const input = new GetFullProductsByCollectionInput(\r\n newListPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\r\n },\r\n count: true,\r\n Sorting: newListPageState.sortingCritera ?? {}\r\n },\r\n newListPageState.activeFilters ?? [],\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\r\n +(this.props.context.request.urlTokens.recordId || 0),\r\n\r\n // eslint-disable-next-line max-len -- existing code\r\n this.props.context.request.query?.q\r\n ? this.props.context.request.query.q\r\n : JSON.stringify({\r\n ProductId: this.props.context.request.query?.productId,\r\n Recommendation: this.props.context.request.query?.recommendation\r\n }),\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\r\n !!this.props?.config?.includeAttributes,\r\n this.props.config.updateRefinerPanel,\r\n this.props.context.request.locale\r\n );\r\n\r\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\r\n newListPageState.totalProductCount = this._getProductsCount(productResults?.products[0]);\r\n newListPageState.activeProducts = productResults.products;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\r\n if (\r\n this.props.config.enableAffiliationBasedPricing &&\r\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\r\n this._getActivePrice();\r\n }\r\n\r\n if (this.props.config.updateRefinerPanel) {\r\n const refinerInput = new RefinersByCollectionInput(\r\n newListPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(\r\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\r\n this.defaultPageNumber\r\n )\r\n },\r\n count: true,\r\n Sorting: newListPageState.sortingCritera ?? {}\r\n },\r\n newListPageState.activeFilters ?? [],\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\r\n +(this.props.context.request.urlTokens.recordId || 0),\r\n this.props.context.request.query?.q\r\n ? this.props.context.request.query.q\r\n : this.props.context.request.query?.productId,\r\n false,\r\n this.props.config.updateRefinerPanel,\r\n undefined\r\n );\r\n\r\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\r\n this.setState({ refiners });\r\n }\r\n }\r\n );\r\n }\r\n\r\n private readonly _updateListPageState = async (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount) => {\r\n if (this._pageType === 'Category') {\r\n listPageState.pageType = 'Category';\r\n } else {\r\n listPageState.pageType = 'Search';\r\n }\r\n\r\n let querySorting: SortColumn[] = [];\r\n\r\n if (this.props.context.request.query && this.props.context.request.query.sorting) {\r\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\r\n }\r\n\r\n listPageState.currentPageNumber =\r\n (this.props.context.request.query && +this.props.context.request.query.skip / (this.props.config.itemsPerPage || 10)) || 0;\r\n listPageState.sortingCritera = { Columns: querySorting };\r\n listPageState.pageSize = this.props.config.itemsPerPage || 10;\r\n listPageState.activeProducts = products.products;\r\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request);\r\n listPageState.artifactsData = this._getAllArtifactsData(products?.products[0]);\r\n listPageState.totalProductCount = this._getProductsCount(products?.products[0]);\r\n if (\r\n listPageState.activeProducts.length <\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n (listPageState.currentPageNumber + 1) * (listPageState.pageSize || 10)\r\n ) {\r\n this.setState({\r\n removeOchShowMore: true,\r\n removeResourceShowMore: true,\r\n removeArtifactShowMore: true\r\n });\r\n } else if (listPageState.activeProducts.length > (listPageState.currentPageNumber + 1) * (listPageState.pageSize || 10)) {\r\n if (this.state.removeResourceShowMore) {\r\n this.setState({\r\n removeOchShowMore: false,\r\n removeResourceShowMore: false,\r\n removeArtifactShowMore: false\r\n });\r\n }\r\n }\r\n\r\n // Construct Base Search URL\r\n let searchTitle: string | undefined;\r\n const { context, data } = this.props;\r\n\r\n if (context && context.request && context.request.query && context.request.query.q) {\r\n searchTitle = context.request.query.q;\r\n } else {\r\n searchTitle =\r\n (data.category.result &&\r\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\r\n (data.category.result && data.category.result.Name);\r\n }\r\n\r\n const searchRequest = moeSearchProductsAsync(\r\n { callerContext: this.props.context.actionContext, bypassCache: 'get' },\r\n {\r\n Context: { ChannelId: this.props.context.request.channel?.RecordId, CatalogId: 0 },\r\n IncludeAttributes: true,\r\n Language: this.props.context.request?.locale,\r\n Refinement: listPageState.activeFilters || [],\r\n SearchCondition: searchTitle,\r\n SkipVariantExpansion: true\r\n }\r\n )\r\n .then(channelCountResponse => {\r\n console.log('channelCountResponse---==', channelCountResponse);\r\n this.setState({ ...this.state, tahurangiSearchCount: channelCountResponse });\r\n })\r\n .catch(e => {\r\n console.error('search count error', e);\r\n });\r\n\r\n const storeRequest = getMOEOnlineStoresAsync({ callerContext: this.props.context.actionContext, bypassCache: 'get' }).then(\r\n channelResponse => {\r\n this.setState({ ...this.state, channelData: channelResponse });\r\n }\r\n );\r\n\r\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\r\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\r\n let getDimensionsAvailabilitiesRequest = Promise.resolve();\r\n if (\r\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\r\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\r\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\r\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\r\n this.props.config.includeAttributes\r\n ) {\r\n getDimensionsAvailabilitiesRequest = this._getProductsDimensionsAvailabilities();\r\n }\r\n\r\n if (listPageState.activeProducts.length < listPageState?.totalProductCount) {\r\n if (this.state.removeResourceShowMore) {\r\n this.setState({\r\n removeResourceShowMore: false\r\n });\r\n }\r\n if (this.state.removeOchShowMore) {\r\n this.setState({\r\n removeOchShowMore: false\r\n });\r\n }\r\n if (this.state.removeArtifactShowMore) {\r\n this.setState({\r\n removeArtifactShowMore: false\r\n });\r\n }\r\n }\r\n\r\n // execute 3 requests in parallel and await together\r\n await Promise.all([searchRequest, storeRequest, getDimensionsAvailabilitiesRequest]).catch(err => {\r\n console.log(err.message);\r\n });\r\n };\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser && window.removeEventListener) {\r\n window.removeEventListener('resize', this._updateViewport);\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { imageSettings, className, siteName } = this.props.config;\r\n const { resources, context } = this.props;\r\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n const searchProduct = (this.props.data.listPageState.result && this.props.data.listPageState.result.featureProduct) || null;\r\n let errorText: any = '';\r\n\r\n // Identifying Language\r\n const toggleLang = getToggleLang(context);\r\n const userPrefLang = getUserPrefLang(context.request.user.customerAccountNumber as any, context);\r\n const preferredLanguageForError: any = getUserPreferredLanguage(\r\n siteName as any,\r\n ERROR_OR_NOTIFICATION,\r\n userPrefLang,\r\n toggleLang,\r\n context\r\n );\r\n const preferredSearchSiteLanguage: any = getUserPreferredLanguage(\r\n siteName as any,\r\n SEARCH_SITE_LANGUAGE,\r\n userPrefLang,\r\n toggleLang,\r\n context\r\n );\r\n const preferredLanguageForButton: any = getUserPreferredLanguage(siteName as any, HEADER_FOOTER, userPrefLang, toggleLang, context);\r\n\r\n if (!products || products.length === 0) {\r\n errorText =\r\n this._pageType === 'Category' ? (\r\n
    No resources found for the selected category.
    \r\n ) : (\r\n
    \r\n {preferredLanguageForError === 'maori'\r\n ? resources.resultSearchNotFoundTextInMaori\r\n : resources.resultSearchNotFoundText}\r\n .\r\n
    \r\n );\r\n }\r\n const productsComponent = this._getProducts(preferredLanguageForError);\r\n const ochProductsComponent = this._getOchProducts(preferredLanguageForError, preferredSearchSiteLanguage);\r\n const ListViewProductsComponent = this._getListViewProducts(preferredLanguageForError);\r\n const curatedCollectionData = this._getCuratedCollectionsData(preferredLanguageForError);\r\n const featureComponent = (\r\n \r\n );\r\n\r\n console.log('MOE Search Results', this.props);\r\n\r\n const searchResultContainerViewProps = {\r\n ...this.props,\r\n products: productsComponent,\r\n ochProducts: ochProductsComponent,\r\n productsListView: ListViewProductsComponent,\r\n localSearchBar: this._getLocalSearchBar(),\r\n TitleViewProps: this._getCollectionTitle(preferredSearchSiteLanguage),\r\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\r\n refineMenu: this._getRefineMenu(),\r\n className: classnames('ms-search-result-container', className),\r\n SearchResultContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-search-result-container', className)\r\n },\r\n sortByOptions:\r\n this.props.data.listPageState.result && this.props.data.listPageState.result.totalProductCount !== 0\r\n ? this._getSortingDropDown()\r\n : null,\r\n ministryPagination: this._getMinistryPagination(),\r\n ochPagination: this._getOchPagination(),\r\n externalPagination: this._getExternalPagination(),\r\n\r\n ProductsContainer: { className: 'ms-search-result-container__Products' },\r\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\r\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\r\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\r\n choiceSummary: this._getChoiceSummary(),\r\n modalToggle:\r\n this.props.data.listPageState.result && this.props.data.listPageState.result.totalProductCount !== 0 ? (\r\n \r\n ) : null,\r\n searchResultModal: this._getSearchResultModal(),\r\n isMobile: this.isMobile,\r\n errorMessage: errorText && ,\r\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\r\n similarLookProduct:\r\n this.props.data.listPageState.result &&\r\n this.props.data.listPageState.result.featureProduct !== null &&\r\n this.props.data.listPageState.result.featureProduct !== undefined\r\n ? featureComponent\r\n : null,\r\n productPrices: this.productPrices,\r\n curatedCollectionData: curatedCollectionData,\r\n resourceButton: this._getResourcesShowmoreBtn(preferredLanguageForButton),\r\n ochResourceButton: this._getOchShowmoreBtn(),\r\n allArtifactsButton: this._getAllartifactsShowmoreBtn(preferredLanguageForButton),\r\n enableListViewToggle: this.state.enableListViewToggle,\r\n expandCollapseAllButtons: this._renderCollapseExpandAll(preferredSearchSiteLanguage),\r\n preferredLanguageForError: preferredLanguageForError,\r\n preferredSearchSiteLanguage: preferredSearchSiteLanguage,\r\n preferredLanguageForButton: preferredLanguageForButton\r\n };\r\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Get Resources show more button.\r\n * @returns Void.\r\n */\r\n private readonly _getResourcesShowmoreBtn = (preferredLanguageForButton: string): React.ReactNode => {\r\n return (\r\n !this.state.removeResourceShowMore && (\r\n
    \r\n \r\n
    \r\n )\r\n );\r\n };\r\n\r\n private readonly _addMoreResources = async () => {\r\n const listPageState = await this.props.data.listPageState;\r\n // const currentResources = [...listPageState.activeProducts];\r\n const input = new GetFullProductsByCollectionInput(\r\n listPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage || 10,\r\n Skip: this.state.resourcesSkip + (this.props.config.itemsPerPage || 10)\r\n },\r\n count: true,\r\n Sorting: listPageState.sortingCritera || {}\r\n },\r\n listPageState.activeFilters || [],\r\n +(this.props.context.request.urlTokens.itemId || 0),\r\n\r\n this.props.context.request.query && this.props.context.request.query.q\r\n ? this.props.context.request.query.q\r\n : JSON.stringify({\r\n ProductId: this.props.context.request.query?.productId,\r\n Recommendation: this.props.context.request.query?.recommendation\r\n }),\r\n !!(this.props && this.props.config && this.props.config.includeAttributes !== undefined && this.props.config.includeAttributes),\r\n this.props.config.updateRefinerPanel,\r\n this.props.context.request.locale\r\n );\r\n getCollectionProducts(input, this.props.context.actionContext).then(productResults => {\r\n listPageState.artifactsData = [...listPageState.artifactsData, ...this._getAllArtifactsData(productResults?.products[0])];\r\n listPageState.activeProducts = [...listPageState.activeProducts, ...productResults.products];\r\n listPageState.currentPageNumber =\r\n listPageState.currentPageNumber !== null && listPageState.currentPageNumber !== undefined\r\n ? listPageState.currentPageNumber + 1\r\n : 0;\r\n // listPageState.totalProductCount = listPageState.activeProducts.length;\r\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext?.user?.isAuthenticated) {\r\n this._getActivePrice();\r\n }\r\n if (productResults?.products?.length === 0) {\r\n this.setState({ removeArtifactShowMore: true, removeOchShowMore: true, removeResourceShowMore: true });\r\n }\r\n if (listPageState.activeProducts.length >= this._getProductsCount(productResults?.products[0])) {\r\n this.setState({\r\n removeResourceShowMore: true,\r\n removeArtifactShowMore: true\r\n });\r\n } else if (listPageState.activeProducts.length < this._getProductsCount(productResults?.products[0])) {\r\n // if (this.state.removeResourceShowMore) {\r\n this.setState({\r\n removeResourceShowMore: false,\r\n removeArtifactShowMore: false\r\n });\r\n // }\r\n }\r\n console.log('List page active products', listPageState.activeProducts);\r\n });\r\n\r\n this.setState({ resourcesSkip: this.state.resourcesSkip + (this.props.config.itemsPerPage || 10) });\r\n };\r\n\r\n /**\r\n * Get OCH show more button.\r\n * @returns Void.\r\n */\r\n private readonly _getOchShowmoreBtn = (): React.ReactNode => {\r\n return (\r\n !this.state.removeOchShowMore && (\r\n
    \r\n \r\n
    \r\n )\r\n );\r\n };\r\n\r\n private readonly _addOchMoreResources = async () => {\r\n const listPageState = await this.props.data.listPageState;\r\n // const currentResources = [...listPageState.activeProducts];\r\n const input = new GetFullProductsByCollectionInput(\r\n listPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage || 10,\r\n Skip: this.state.resourcesSkip + (this.props.config.itemsPerPage || 10)\r\n },\r\n count: true,\r\n Sorting: listPageState.sortingCritera || {}\r\n },\r\n listPageState.activeFilters || [],\r\n +(this.props.context.request.urlTokens.itemId || 0),\r\n\r\n this.props.context.request.query && this.props.context.request.query.q\r\n ? this.props.context.request.query.q\r\n : JSON.stringify({\r\n ProductId: this.props.context.request.query?.productId,\r\n Recommendation: this.props.context.request.query?.recommendation\r\n }),\r\n !!(this.props && this.props.config && this.props.config.includeAttributes !== undefined && this.props.config.includeAttributes),\r\n this.props.config.updateRefinerPanel,\r\n this.props.context.request.locale\r\n );\r\n getCollectionProducts(input, this.props.context.actionContext).then(productResults => {\r\n listPageState.artifactsData = [...listPageState.artifactsData, ...this._getAllArtifactsData(productResults?.products[0])];\r\n listPageState.activeProducts = [...productResults.products];\r\n listPageState.currentPageNumber =\r\n listPageState.currentPageNumber !== null && listPageState.currentPageNumber !== undefined\r\n ? listPageState.currentPageNumber + 1\r\n : 0;\r\n // listPageState.totalProductCount = listPageState.activeProducts.length;\r\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext?.user?.isAuthenticated) {\r\n this._getActivePrice();\r\n }\r\n if (productResults?.products?.length === 0) {\r\n this.setState({ removeArtifactShowMore: true, removeOchShowMore: true, removeResourceShowMore: true });\r\n }\r\n console.log('List page active products', listPageState.activeProducts);\r\n });\r\n\r\n this.setState({ resourcesSkip: this.state.resourcesSkip + (this.props.config.itemsPerPage || 10) });\r\n };\r\n\r\n /**\r\n * Get All Artifacts show more button.\r\n * @returns Void.\r\n */\r\n private readonly _getAllartifactsShowmoreBtn = (preferredLanguageForButton: string): React.ReactNode => {\r\n return (\r\n !this.state.removeArtifactShowMore && (\r\n
    \r\n \r\n
    \r\n )\r\n );\r\n };\r\n\r\n private readonly _addAllartifactsMoreResources = async () => {\r\n const listPageState = await this.props.data.listPageState;\r\n const currentResources = [...listPageState.activeProducts];\r\n const input = new GetFullProductsByCollectionInput(\r\n listPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: this.state.resourcesSkip + (this.props.config.itemsPerPage || 10)\r\n },\r\n count: true,\r\n Sorting: listPageState.sortingCritera || {}\r\n },\r\n listPageState.activeFilters || [],\r\n +(this.props.context.request.urlTokens.itemId || 0),\r\n\r\n this.props.context.request.query && this.props.context.request.query.q\r\n ? this.props.context.request.query.q\r\n : JSON.stringify({\r\n ProductId: this.props.context.request.query?.productId,\r\n Recommendation: this.props.context.request.query?.recommendation\r\n }),\r\n !!(this.props && this.props.config && this.props.config.includeAttributes !== undefined && this.props.config.includeAttributes),\r\n this.props.config.updateRefinerPanel,\r\n this.props.context.request.locale\r\n );\r\n getCollectionProducts(input, this.props.context.actionContext).then(productResults => {\r\n listPageState.artifactsData = [...listPageState.artifactsData, ...this._getAllArtifactsData(productResults?.products[0])];\r\n listPageState.activeProducts = [...currentResources, ...productResults.products];\r\n // listPageState.totalProductCount = listPageState.activeProducts.length;\r\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext?.user?.isAuthenticated) {\r\n this._getActivePrice();\r\n }\r\n if (productResults?.products?.length === 0) {\r\n this.setState({ removeArtifactShowMore: true, removeOchShowMore: true, removeResourceShowMore: true });\r\n }\r\n console.log(productResults);\r\n });\r\n this.setState({ resourcesSkip: this.state.resourcesSkip + (this.props.config.itemsPerPage || 10) });\r\n };\r\n\r\n /**\r\n * Get products dimension availabilities.\r\n * @returns Void.\r\n */\r\n private readonly _getAllArtifactsData = (firstProduct?: ProductSearchResult): any[] => {\r\n if (firstProduct && firstProduct.ExtensionProperties && firstProduct.ExtensionProperties[0]) {\r\n const index: number = firstProduct.ExtensionProperties?.findIndex((p: any) => p.Key === 'ArtifactSearchList');\r\n if (index > -1) {\r\n const artifactSearchListString: string = firstProduct.ExtensionProperties[index].Value?.StringValue || '';\r\n if (!artifactSearchListString) {\r\n if (this.state.removeArtifactShowMore === false) {\r\n this.setState({ removeArtifactShowMore: true });\r\n }\r\n return [];\r\n }\r\n const artifactSearchList: any[] = JSON.parse(artifactSearchListString);\r\n if (artifactSearchList.length > 0) {\r\n if (this.state.removeArtifactShowMore) {\r\n this.setState({ removeArtifactShowMore: false });\r\n }\r\n return artifactSearchList.filter((item: any) => {\r\n return item.ARTIFACTID && item.ARTIFACTID !== null;\r\n });\r\n }\r\n // return JSON.parse(artifactSearchListString);\r\n }\r\n }\r\n\r\n this.setState({ removeArtifactShowMore: true });\r\n return [];\r\n };\r\n\r\n /**\r\n * Get products count.\r\n * @returns Void.\r\n */\r\n private readonly _getProductsCount = (firstProduct?: ProductSearchResult): number => {\r\n const channelId = this.props.context.request.channel?.RecordId;\r\n\r\n if (firstProduct && firstProduct.ExtensionProperties && firstProduct.ExtensionProperties[0]) {\r\n // eslint-disable-next-line eqeqeq\r\n const index: number = firstProduct.ExtensionProperties?.findIndex((p: any) => p.Key == channelId);\r\n if (index > -1) {\r\n const productsCount: number = firstProduct.ExtensionProperties[index].Value?.LongValue || 0;\r\n if (productsCount > 0) {\r\n return productsCount;\r\n }\r\n }\r\n }\r\n return 0;\r\n };\r\n\r\n /**\r\n * Check whether the local search refinement already exists.\r\n * @returns Void.\r\n */\r\n private readonly isMatchingLocalSearch = (refinementCriterion: ProductRefinerValue): boolean => {\r\n return (\r\n refinementCriterion.RefinerRecordId === 0 &&\r\n refinementCriterion.RefinerSourceValue === 0 &&\r\n refinementCriterion.DataTypeValue === 5\r\n );\r\n };\r\n\r\n /**\r\n * Get products dimension availabilities.\r\n * @returns Void.\r\n */\r\n private readonly searchLocal = () => {\r\n if (this.state.localSearchText === '') {\r\n return;\r\n }\r\n\r\n const { data } = this.props;\r\n const newLocalSearchRecord = {\r\n RefinerRecordId: 0,\r\n DataTypeValue: 5,\r\n LeftValueBoundString: this.state.localSearchText,\r\n RightValueBoundString: this.state.localSearchText,\r\n UnitText: '',\r\n RowNumber: 0,\r\n Count: 1,\r\n LeftValueBoundLocalizedString: '',\r\n RightValueBoundLocalizedString: '',\r\n ExtensionProperties: [],\r\n RefinerSourceValue: 0,\r\n SwatchImageUrl: undefined,\r\n SwatchColorHexCode: undefined,\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.ProductRefinerValue'\r\n };\r\n this.setState({ localSearchText: '' });\r\n const currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (currentRefinementCriteria.length > 0) {\r\n const localSearchIndex = currentRefinementCriteria.findIndex((selectedCriterion: ProductRefinerValue) =>\r\n this.isMatchingLocalSearch(selectedCriterion)\r\n );\r\n console.log('localSearchIndex', localSearchIndex);\r\n\r\n if (localSearchIndex !== -1) {\r\n currentRefinementCriteria[localSearchIndex] = newLocalSearchRecord;\r\n console.log(this.props.data.listPageState);\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.activeFilters = currentRefinementCriteria;\r\n });\r\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), currentRefinementCriteria));\r\n } else {\r\n this.props.data.listPageState.result!.activeFilters?.push(newLocalSearchRecord);\r\n }\r\n } else {\r\n this.props.data.listPageState.result!.activeFilters?.push(newLocalSearchRecord);\r\n }\r\n };\r\n\r\n // /**\r\n // * Get products dimension availabilities.\r\n // * @returns Void.\r\n // */\r\n // private readonly _onLocalSearchKeyPress = () => {};\r\n\r\n /**\r\n * Get Local search bar HTML structure.\r\n * @returns Void.\r\n */\r\n private readonly _getLocalSearchBar = (): any => {\r\n return (\r\n
    \r\n {\r\n e.preventDefault();\r\n }}\r\n className='moe-local-search-form ms-search__searchForm'\r\n role='search'\r\n aria-label='Search'\r\n name='searchForm'\r\n >\r\n this.setState({ localSearchText: this.localSearchRef.current.value })}\r\n ref={this.localSearchRef}\r\n value={this.state.localSearchText}\r\n onKeyDown={e => e.key === 'Enter' && this.searchLocal()}\r\n className='moe-local-search__input'\r\n type='text'\r\n placeholder={this.props.config?.searchTextBoxName || 'Search resources'}\r\n aria-label='Local Search Input'\r\n />\r\n this.state.localSearchText && this.setState({ localSearchText: '' })}\r\n className='moe-local-search__cancel--btn msc-btn'\r\n type='button'\r\n aria-label='cancel'\r\n >\r\n \r\n \r\n
    \r\n );\r\n };\r\n\r\n /**\r\n * Get products dimension availabilities.\r\n * @returns Void.\r\n */\r\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\r\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\r\n\r\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\r\n new DimensionAvailabilitiesForProductSearchResultInput(productsList, this.props.context as ICoreContext),\r\n this.props.context.actionContext\r\n );\r\n\r\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\r\n this.setState({ productsDimensionAvailabilities });\r\n }\r\n };\r\n\r\n /**\r\n * Get the active price for the products.\r\n */\r\n private readonly _getActivePrice = async (): Promise => {\r\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\r\n const products = await getPriceForProductSearchResult(\r\n new PriceForProductSearchResultInput(productsList),\r\n this.props.context.actionContext\r\n );\r\n\r\n const listPageState = await this.props.data.listPageState;\r\n listPageState.activeProducts = products;\r\n };\r\n\r\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\r\n const { resources } = this.props;\r\n return SearchResultModal({\r\n resources: {\r\n modalCloseButtonText: resources.modalCloseButtonTextInMaori,\r\n modalTitle: resources.modalTitle\r\n },\r\n isOpen: this.state.modalIsOpen,\r\n returnRef: this._modalToggleRef,\r\n onModalToggle: this._toggleModal\r\n });\r\n };\r\n\r\n private readonly _getCollectionTitle = (preferredSearchSiteLanguage: string): ITitleViewProps => {\r\n const { data, context, resources } = this.props;\r\n\r\n let collectionTitle: string | undefined = '';\r\n if (context && context.request && context.request.query && context.request.query.q) {\r\n collectionTitle = `\"${context.request.query.q}\"`;\r\n } else {\r\n collectionTitle =\r\n (data.category.result &&\r\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\r\n (data.category.result && data.category.result.Name);\r\n }\r\n const collectionTitleArray: any = collectionTitle?.split('^');\r\n let productCountText = '';\r\n let productCountNumber: number | undefined;\r\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\r\n productCountNumber = data.listPageState.result.totalProductCount;\r\n } else if (data.products && data.products.result) {\r\n productCountNumber = data.products.result.count;\r\n }\r\n\r\n if (productCountNumber && productCountNumber !== 0) {\r\n productCountText =\r\n productCountNumber !== 1\r\n ? format(\r\n preferredSearchSiteLanguage === 'maori' ? resources.numberOfProductsInMaori : resources.numberOfProducts,\r\n productCountNumber\r\n )\r\n : preferredSearchSiteLanguage === 'maori'\r\n ? resources.oneProductInMaori\r\n : resources.oneProduct;\r\n } else {\r\n productCountText = format(\r\n preferredSearchSiteLanguage === 'maori' ? resources.numberOfProductsInMaori : resources.numberOfProducts,\r\n 0\r\n );\r\n }\r\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\r\n const titlePrefix = (\r\n \r\n );\r\n const titleText = collectionTitle && (\r\n \r\n );\r\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\r\n\r\n return {\r\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\r\n title: {\r\n titlePrefix,\r\n titleText,\r\n titleCount\r\n }\r\n };\r\n };\r\n\r\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\r\n const { data } = this.props;\r\n const categoryHierarchy = data.categoryHierarchy.result;\r\n const categoryLinks =\r\n categoryHierarchy &&\r\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\r\n return (\r\n <Link\r\n key={index}\r\n text={value.Name}\r\n ariaLabel={`${this.props.resources.categoryLinkAriaLabelInMaori} ${value.Name}`}\r\n href={value.Url}\r\n />\r\n );\r\n });\r\n const categoryLinkSeparator = <Separator separator='/' />;\r\n\r\n return {\r\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\r\n categoryHierarchyList: categoryLinks,\r\n categoryHierarchySeparator: categoryLinkSeparator\r\n };\r\n };\r\n\r\n private readonly _getSortingDropDown = (): ISortByViewProps => {\r\n const { resources } = this.props;\r\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\r\n let dropdwonOptions = this.sortByDropdownOptions;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\r\n if (this.props.context.app.config.hideRating) {\r\n dropdwonOptions = this.sortByDropdownOptions.filter(dropdownOption => dropdownOption.key !== 'AverageRating-Desc');\r\n }\r\n const dropdown = (\r\n <LabeledDropdown\r\n labelClassname='reviews-list-sort-by'\r\n labelText={\r\n this.preferredSearchSiteLanguageStarting === 'maori'\r\n ? resources.sortByDropdownLabelInMaori\r\n : resources.sortByDropdownLabel\r\n }\r\n dropdownId='categorySortByDropdown'\r\n dropdownClassname='reviews-list-dropdown'\r\n toggleColor='link'\r\n dropdownOptions={dropdwonOptions}\r\n selectedOption={activeDropdown}\r\n onSelectOption={this._updateSortByDropdown}\r\n ref={this._sortAndFilterContainerRef}\r\n />\r\n );\r\n return {\r\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\r\n sortByDropDown: dropdown\r\n };\r\n };\r\n\r\n private readonly _getMinistryPagination = (): React.ReactNode => {\r\n const { config, context, data, resources } = this.props;\r\n const listPageState = data && data.listPageState && data.listPageState.result;\r\n const fullUrl = getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 10;\r\n const skipCount =\r\n listPageState && listPageState.currentPageNumber !== null\r\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\r\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\r\n const totalItems = (listPageState && listPageState.totalProductCount) || 0;\r\n const previousText = resources.flipperPreviousInMaori;\r\n const nextText = resources.flipperNextInMaori;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n return (\r\n <UncontrolledPagination\r\n className='ms-search-result-container__pagination'\r\n role='navigation'\r\n aria-label={resources.paginationAriaLabelInMaori}\r\n url={fullUrl.href}\r\n qsp='skip'\r\n items={totalItems}\r\n itemsPerPage={itemsPerPage}\r\n startingItem={skipCount}\r\n previousText={this._renderPrev(previousText)}\r\n nextText={this._renderNext(nextText)}\r\n previousAriaLabel={previousText}\r\n nextAriaLabel={nextText}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getOchPagination = (): React.ReactNode => {\r\n const { config, context, data, resources } = this.props;\r\n const listPageState = data && data.listPageState && data.listPageState.result;\r\n const fullUrl = getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 10;\r\n const skipCount =\r\n listPageState && listPageState.currentPageNumber !== null\r\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\r\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\r\n const totalItems = (listPageState && listPageState.totalProductCount) || 0;\r\n const previousText = resources.flipperPreviousInMaori;\r\n const nextText = resources.flipperNextInMaori;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n return (\r\n <UncontrolledPagination\r\n className='ms-search-result-container__pagination'\r\n role='navigation'\r\n aria-label={resources.paginationAriaLabelInMaori}\r\n url={fullUrl.href}\r\n qsp='skip'\r\n items={totalItems}\r\n itemsPerPage={itemsPerPage}\r\n startingItem={skipCount}\r\n previousText={this._renderPrev(previousText)}\r\n nextText={this._renderNext(nextText)}\r\n previousAriaLabel={previousText}\r\n nextAriaLabel={nextText}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getExternalPagination = (): React.ReactNode => {\r\n const { config, context, data, resources } = this.props;\r\n const listPageState = data && data.listPageState && data.listPageState.result;\r\n const fullUrl = getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 10;\r\n const skipCount =\r\n listPageState && listPageState.currentPageNumber !== null\r\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\r\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\r\n const totalItems = (listPageState && listPageState.totalProductCount) || 0;\r\n const previousText = resources.flipperPreviousInMaori;\r\n const nextText = resources.flipperNextInMaori;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n return (\r\n <UncontrolledPagination\r\n className='ms-search-result-container__pagination'\r\n role='navigation'\r\n aria-label={resources.paginationAriaLabelInMaori}\r\n url={fullUrl.href}\r\n qsp='skip'\r\n items={totalItems}\r\n itemsPerPage={itemsPerPage}\r\n startingItem={skipCount}\r\n previousText={this._renderPrev(previousText)}\r\n nextText={this._renderNext(nextText)}\r\n previousAriaLabel={previousText}\r\n nextAriaLabel={nextText}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\r\n const { data, context, config } = this.props;\r\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\r\n const validRefiners =\r\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\r\n ? this.state.refiners.filter(refiner => {\r\n return ArrayExtensions.hasElements(refiner.Values);\r\n })\r\n : data.refiners.result &&\r\n data.refiners.result.filter(refiner => {\r\n return ArrayExtensions.hasElements(refiner.Values);\r\n });\r\n\r\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n console.log(config);\r\n\r\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\r\n const expandedRefiners = this.expandrefinerCount;\r\n const subMenus =\r\n validRefiners &&\r\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\r\n return (\r\n <RefineSubmenu\r\n expandCollapseAll={this.state.expandAllRefiners}\r\n ref={this.refineChild}\r\n productRefinerHierarchy={productRefinerHierarchy}\r\n selectedRefinerValues={activeRefiners}\r\n refineItemCommonProps={this._refineItemCommonProps}\r\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabelInMaori}\r\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabelInMaori}\r\n key={index}\r\n onUpdateRefiners={this._onUpdateRefiners}\r\n urlBuilder={this._buildRefinerUrl}\r\n isDisabled={false}\r\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\r\n tempRangeTypeTODO={tempRangeTypeTODO}\r\n context={context}\r\n moduleId={this.props.id}\r\n moduleTypeName={this.props.typeName}\r\n telemetryContent={this.telemetryContent}\r\n productCountAriaLabel={this.props.resources.productCountAriaLabelInMaori}\r\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabelInMaori}\r\n isMobile={this.isMobile}\r\n config={config}\r\n />\r\n );\r\n });\r\n\r\n return {\r\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\r\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\r\n refiners: subMenus\r\n };\r\n };\r\n\r\n private readonly _getChoiceSummary = (): React.ReactNode => {\r\n const { resources, data, telemetry } = this.props;\r\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n return (\r\n <ChoiceSummary\r\n classNames='ms-choice-summary-by-category'\r\n clearAllText={resources.clearAllTextInMaori}\r\n label={resources.choiceSummaryLabelInMaori}\r\n closeAriaLabel={resources.closeAriaLabelInMaori}\r\n selectedChoices={selectedRefiners}\r\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\r\n refinerHierarchy={data.refiners.result}\r\n choiceFormat={resources.choiceFormatInMaori}\r\n choiceRangeValueFormat={resources.choiceRangeValueFormatInMaori}\r\n telemetry={telemetry}\r\n onChoiceClicked={this._onChoiceClicked}\r\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\r\n choiceAriaLabel={resources.choiceAriaLabelInMaori}\r\n telemetryContent={this.telemetryContent}\r\n context={this.props.context}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getProducts = (preferredLanguageForError: string): any => {\r\n const { imageSettings, allowBackNavigation } = this.props.config;\r\n const { resources } = this.props;\r\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\r\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\r\n const allProducts: any = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n // if (allProducts.length === 0) {\r\n // allProducts = (this.props.data.products.result && this.props.data.products.result?.products) || [];\r\n // }\r\n\r\n const quickviewslot = this.props.slots && this.props.slots.quickview && this.props.slots.quickview[0];\r\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n );\r\n\r\n if (allProducts.length === 0) {\r\n if (!this.state.removeResourceShowMore) {\r\n this.setState({ removeResourceShowMore: true });\r\n }\r\n if (this.state.enableListViewToggle) {\r\n this.setState({ enableListViewToggle: false });\r\n }\r\n } else {\r\n if (!this.state.enableListViewToggle) {\r\n this.setState({ enableListViewToggle: true });\r\n }\r\n }\r\n\r\n // this.props.data.listPageState.then(listPageState => {\r\n // if (listPageState.activeProducts.length === 0 && allProducts.products.length > 0) {\r\n // if (this._pageType === 'Category') {\r\n // listPageState.pageType = 'Category';\r\n // } else {\r\n // listPageState.pageType = 'Search';\r\n // }\r\n\r\n // let querySorting: SortColumn[] = [];\r\n\r\n // if (this.props.context.request.query && this.props.context.request.query.sorting) {\r\n // querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\r\n // }\r\n\r\n // listPageState.currentPageNumber =\r\n // (this.props.context.request.query && +this.props.context.request.query.skip / (this.props.config.itemsPerPage || 10)) ||\r\n // 0;\r\n // listPageState.sortingCritera = { Columns: querySorting };\r\n // listPageState.pageSize = this.props.config.itemsPerPage || 10;\r\n // listPageState.activeProducts = allProducts.products;\r\n // // listPageState.totalProductCount = products.count;\r\n // listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request);\r\n // listPageState.artifactsData = this._getAllArtifactsData(allProducts?.products[0]);\r\n // listPageState.totalProductCount = this._getProductsCount(allProducts?.products[0]);\r\n // }\r\n\r\n // // const currPageNumber = listPageState.currentPageNumber ? listPageState.currentPageNumber + 1 : 1;\r\n // // const finalIndex = currPageNumber * (listPageState.pageSize || 10);\r\n // if (allProducts.length < this._getProductsCount(allProducts?.products[0])) {\r\n // if (this.state.removeResourceShowMore) {\r\n // this.setState({ removeResourceShowMore: false });\r\n // }\r\n // }\r\n // if (allProducts.length >= this._getProductsCount(allProducts?.products[0])) {\r\n // if (!this.state.removeResourceShowMore) {\r\n // this.setState({ removeResourceShowMore: true });\r\n // }\r\n // }\r\n // });\r\n\r\n console.log('Channel products', allProducts);\r\n\r\n return allProducts.length !== 0 ? (\r\n <ProductSearchResultItems\r\n products={allProducts}\r\n context={this.props.context}\r\n imageSettings={imageSettings}\r\n resources={resources}\r\n moduleType={this.props.typeName}\r\n moduleId={this.props.id}\r\n allowBackNavigation={allowBack}\r\n telemetryContent={this.telemetryContent}\r\n quickviewSlot={quickviewslot}\r\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\r\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\r\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\r\n />\r\n ) : (\r\n <div className='msc-alert msc-alert-warning'>\r\n {this.props.config.siteName === KWR\r\n ? preferredLanguageForError === 'maori'\r\n ? resources.clickFiltersTextInMaori\r\n : resources.clickFiltersText\r\n : preferredLanguageForError === 'maori'\r\n ? resources.resultSearchNotFoundTextInMaori\r\n : resources.resultSearchNotFoundText}\r\n </div>\r\n );\r\n };\r\n\r\n private readonly _getListViewProducts = (preferredLanguageForError: string): JSX.Element => {\r\n const { imageSettings, allowBackNavigation } = this.props.config;\r\n const { resources } = this.props;\r\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\r\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\r\n let allProducts: any = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n if (allProducts.length === 0) {\r\n allProducts = (this.props.data.products.result && this.props.data.products.result?.products) || [];\r\n }\r\n\r\n const quickviewslot = this.props.slots && this.props.slots.quickview && this.props.slots.quickview[0];\r\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n );\r\n\r\n if (allProducts.length === 0) {\r\n if (!this.state.removeResourceShowMore) {\r\n this.setState({ removeResourceShowMore: true });\r\n }\r\n }\r\n\r\n // this.props.data.listPageState.then(listPageState => {\r\n // // const currPageNumber = listPageState.currentPageNumber ? listPageState.currentPageNumber + 1 : 1;\r\n // // const finalIndex = currPageNumber * (listPageState.pageSize || 10);\r\n // // if (allProducts.length < listPageState?.totalProductCount) {\r\n // // if (this.state.removeResourceShowMore) {\r\n // // this.setState({ removeResourceShowMore: false });\r\n // // }\r\n // // }\r\n // // if (allProducts.length >= listPageState.totalProductCount) {\r\n // // if (!this.state.removeResourceShowMore) {\r\n // // this.setState({ removeResourceShowMore: true });\r\n // // }\r\n // // }\r\n // // products = products.slice(0, finalIndex);\r\n // });\r\n\r\n return allProducts.length !== 0 ? (\r\n <ProductSearchResultItems\r\n listView={true}\r\n products={allProducts}\r\n context={this.props.context}\r\n imageSettings={imageSettings}\r\n resources={resources}\r\n moduleType={this.props.typeName}\r\n moduleId={this.props.id}\r\n allowBackNavigation={allowBack}\r\n telemetryContent={this.telemetryContent}\r\n quickviewSlot={quickviewslot}\r\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\r\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\r\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\r\n />\r\n ) : (\r\n <div className='msc-alert msc-alert-warning'>\r\n {preferredLanguageForError === 'maori' ? resources.resultSearchNotFoundTextInMaori : resources.resultSearchNotFoundText}.\r\n </div>\r\n );\r\n };\r\n\r\n private readonly _getCuratedCollectionsData = (preferredLanguageForError: string): ICuratedCollection[] => {\r\n const allProducts = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n\r\n const products = allProducts.filter(product => {\r\n const index: any = product.ExtensionProperties?.findIndex(p => p.Key === 'RelatedProductCount');\r\n return (\r\n index > -1 &&\r\n product &&\r\n product?.ExtensionProperties &&\r\n product?.ExtensionProperties?.length > 0 &&\r\n product?.ExtensionProperties[index]?.Value?.StringValue !== ''\r\n );\r\n });\r\n const curatedProducts: ICuratedCollection[] = [];\r\n\r\n products &&\r\n products.forEach(product => {\r\n const productUrl = product\r\n ? getProductPageUrlSync(product.Name ?? '', product.RecordId, this.props.context.actionContext, undefined)\r\n : '';\r\n const imageURL = generateImageUrl(product.PrimaryImageUrl, this.props.context.request.apiSettings) || '';\r\n const index: any = product?.ExtensionProperties?.findIndex(p => p.Key === 'RelatedProductCount');\r\n const channelIndex: any = product?.ExtensionProperties?.findIndex(p => p.Key === 'ChannelId');\r\n if (index > -1) {\r\n const curatedProduct: ICuratedCollection = {\r\n recordId: product.RecordId,\r\n Count:\r\n (product &&\r\n product?.ExtensionProperties &&\r\n product?.ExtensionProperties?.length > 0 &&\r\n product.ExtensionProperties[index].Value?.StringValue) ||\r\n '0',\r\n Description: product.Description || '',\r\n Name: product.Name || '',\r\n productURL: productUrl,\r\n imageURL: imageURL,\r\n channelId:\r\n (channelIndex > -1 &&\r\n product?.ExtensionProperties &&\r\n product?.ExtensionProperties?.length > 0 &&\r\n product.ExtensionProperties[channelIndex].Value?.LongValue) ||\r\n 0\r\n };\r\n curatedProducts.push(curatedProduct);\r\n }\r\n });\r\n\r\n const kwrCuratedProducts = curatedProducts.filter(\r\n curatedProduct => curatedProduct.channelId === this.props.context.request.channel?.RecordId\r\n );\r\n\r\n return kwrCuratedProducts;\r\n };\r\n\r\n private readonly _getOchProducts = (preferredLanguageForError: string, preferredSearchSiteLanguage: string): JSX.Element => {\r\n const { context, data, config, resources } = this.props;\r\n // let allProducts = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n // if (allProducts.length === 0) {\r\n // allProducts = (this.props.data.products.result && this.props.data.products.result?.products) || [];\r\n // }\r\n\r\n // Construct Base Search URL\r\n let searchTitle: string | undefined;\r\n let searchTitleForUrl: string | undefined;\r\n\r\n if (context && context.request && context.request.query && context.request.query.q) {\r\n searchTitle = `\"${context.request.query.q}\"`;\r\n searchTitleForUrl = context.request.query.q;\r\n } else {\r\n searchTitle =\r\n (data.category.result &&\r\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\r\n (data.category.result && data.category.result.Name);\r\n\r\n searchTitleForUrl = searchTitle;\r\n }\r\n\r\n // moeSearchProductsAsync(context.actionContext as any, { SearchCondition: searchTitle }, true);\r\n\r\n const nzcSearchUrl = `${config?.nzcSearchUrl?.split('&q')[0]}&q=${searchTitleForUrl}`;\r\n const twkSearchUrl = `${config?.twkSearchUrl?.split('&q')[0]}&q=${searchTitleForUrl}`;\r\n const kohSearchUrl = `${config?.kohSearchUrl?.split('&q')[0]}&q=${searchTitleForUrl}`;\r\n const kwrSearchUrl = `${config?.kwrSearchUrl?.split('&q')[0]}&q=${searchTitleForUrl}`;\r\n\r\n // Get channel resources count information\r\n const channelResourcesData: any = [];\r\n let channelSearchCountInfo: any = [];\r\n\r\n if (this.state.channelData.length > 0) {\r\n this.state.channelData.map((channelData: IMOEChannel): any => {\r\n // eslint-disable-next-line eqeqeq\r\n const index: any = this.state.tahurangiSearchCount?.findIndex(p => p.Id == channelData?.Id?.toString());\r\n\r\n if (index > -1) {\r\n channelResourcesData.push({\r\n channelId: channelData.Id,\r\n channelName: channelData.Name,\r\n resourcesCount:\r\n this.state.tahurangiSearchCount &&\r\n this.state.tahurangiSearchCount[index] &&\r\n this.state.tahurangiSearchCount[index]?.Count\r\n });\r\n }\r\n });\r\n\r\n console.log('channelResourcesData', channelResourcesData);\r\n\r\n if (channelResourcesData.length > 0) {\r\n channelResourcesData.map((item: any) => {\r\n if (item.channelName.includes('ealand')) {\r\n channelSearchCountInfo.push({ ...item, searchUrl: nzcSearchUrl });\r\n }\r\n\r\n if (item.channelName.includes('hildhood')) {\r\n channelSearchCountInfo.push({ ...item, searchUrl: twkSearchUrl });\r\n }\r\n\r\n if (item.channelName.includes('whata')) {\r\n channelSearchCountInfo.push({ ...item, searchUrl: kwrSearchUrl });\r\n }\r\n\r\n if (item.channelName.includes('hanga')) {\r\n channelSearchCountInfo.push({ ...item, searchUrl: kohSearchUrl });\r\n }\r\n });\r\n }\r\n\r\n channelSearchCountInfo = channelSearchCountInfo.filter((item: any) => {\r\n return item.channelId !== context.request.apiSettings.channelId;\r\n });\r\n\r\n if (channelSearchCountInfo.length > 0) {\r\n return (\r\n <ul className='moe-och-srchresults'>\r\n {channelSearchCountInfo.map((channelSearchCountInfoItem: any) => {\r\n if (channelSearchCountInfoItem.channelId !== context.request.apiSettings.channelId) {\r\n const resultText = resources.ochSearchResultsText\r\n .replace('{0}', channelSearchCountInfoItem.resourcesCount)\r\n .replace('{1}', searchTitle as any)\r\n .replace('{2}', channelSearchCountInfoItem.channelName);\r\n const resultTextInMaori = resources.ochSearchResultsTextInMaori\r\n .replace('{0}', channelSearchCountInfoItem.resourcesCount)\r\n .replace('{1}', searchTitle as any)\r\n .replace('{2}', channelSearchCountInfoItem.channelName);\r\n return (\r\n <li className='moe-och-srchresults__item' key={channelSearchCountInfoItem.channelId}>\r\n <a\r\n className='moe-och-srchresults__link'\r\n href={channelSearchCountInfoItem.searchUrl}\r\n rel='noreferrer'\r\n target='_blank'\r\n >\r\n <span>{preferredSearchSiteLanguage === 'maori' ? resultTextInMaori : resultText}</span>{' '}\r\n <FaArrowRight className='moe-och-srchresults__link-icn' />\r\n </a>\r\n </li>\r\n );\r\n } else {\r\n return null;\r\n }\r\n })}\r\n </ul>\r\n );\r\n } else {\r\n return (\r\n <div className='msc-alert msc-alert-warning'>\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? resources.resultSearchNotFoundTextInMaori\r\n : resources.resultSearchNotFoundText}\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <div className='msc-alert msc-alert-warning'>\r\n {preferredSearchSiteLanguage === 'maori' ? resources.resultSearchNotFoundTextInMaori : resources.resultSearchNotFoundText}\r\n </div>\r\n );\r\n };\r\n\r\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\r\n const { context } = this.props;\r\n const requestContext = context && context.request;\r\n const actionContext = context && context.actionContext;\r\n\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\r\n !actionContext ? 'actionContext ' : ''\r\n } could not be found`;\r\n this.props.telemetry.warning(error);\r\n }\r\n\r\n window.history.pushState(\r\n {},\r\n '',\r\n buildListPageUrl(\r\n getCurrentUrl(this.props.context.request),\r\n undefined,\r\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\r\n undefined\r\n )\r\n );\r\n if (this.state.removeResourceShowMore) {\r\n this.setState({ ...this.state, removeResourceShowMore: false, resourcesSkip: 0 });\r\n }\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.sortingCritera = {\r\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\r\n };\r\n });\r\n };\r\n\r\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\r\n const { data } = this.props;\r\n\r\n if (!data.searchConfiguration.result) {\r\n return {};\r\n }\r\n\r\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\r\n return searchConfiguration.key === option.key;\r\n });\r\n\r\n if (mappedConfiguration) {\r\n return mappedConfiguration.sortColumn;\r\n }\r\n\r\n return {};\r\n };\r\n\r\n /**\r\n * Retrieves current sort criteria.\r\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\r\n */\r\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\r\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\r\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\r\n return sortCriteria!.Columns[0];\r\n }\r\n\r\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\r\n if (ArrayExtensions.hasElements(queryColumns)) {\r\n return queryColumns[0];\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Retrieves current selected dropdown option based on the sort criteria.\r\n * @returns Current dropdown option.\r\n */\r\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\r\n const activeSortColumn = this._getSortCriteriaColumn();\r\n\r\n const searchConfiguration = this.props.data.searchConfiguration.result;\r\n\r\n if (!activeSortColumn || !searchConfiguration) {\r\n return undefined;\r\n }\r\n\r\n const activeMappedConfig = searchConfiguration.find(\r\n mappedSearchConfig =>\r\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\r\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\r\n );\r\n if (!activeMappedConfig) {\r\n return undefined;\r\n }\r\n\r\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\r\n };\r\n\r\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\r\n console.log('itemToggleNotification', itemToggleNotification);\r\n const { context } = this.props;\r\n const requestContext = context && context.request;\r\n const actionContext = context && context.actionContext;\r\n\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n const error = `Refine menu cannot refine search criteria: ${!requestContext ? 'requestContext ' : ''} ${\r\n !actionContext ? 'actionContext ' : ''\r\n } could not be found`;\r\n this.props.telemetry.warning(error);\r\n }\r\n\r\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\r\n itemToggleNotification,\r\n (this.props.data.listPageState.result && this.props.data.listPageState.result.activeFilters) || []\r\n );\r\n\r\n console.log('updatedRefinementCriteria', updatedRefinementCriteria);\r\n\r\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\r\n });\r\n };\r\n\r\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\r\n console.log(itemToggleNotification);\r\n if (this.props.data.listPageState.result) {\r\n const newRefinementCriteria = getUpdatedRefinementCriteria(\r\n itemToggleNotification,\r\n this.props.data.listPageState.result.activeFilters || []\r\n );\r\n\r\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\r\n }\r\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\r\n return '';\r\n };\r\n\r\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\r\n const { data, telemetry } = this.props;\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\r\n return;\r\n }\r\n\r\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (!notification.clearAll) {\r\n const selectedChoice = notification.choiceClicked;\r\n if (!selectedChoice) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\r\n return;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\r\n );\r\n } else {\r\n currentRefinementCriteria = [];\r\n\r\n // Set focus to sort and filter\r\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\r\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\r\n setTimeout(() => {\r\n dropdownElement && dropdownElement.focus();\r\n }, 50);\r\n }\r\n\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\r\n data.listPageState.result.currentPageNumber = 0;\r\n data.listPageState.result.activeFilters = currentRefinementCriteria;\r\n };\r\n\r\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\r\n const { data, telemetry } = this.props;\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\r\n return fullUrl.href;\r\n }\r\n\r\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (!isClearAll) {\r\n if (!selectedRefiner) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\r\n return fullUrl.href;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\r\n );\r\n } else {\r\n currentRefinementCriteria = [];\r\n }\r\n\r\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n };\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // Always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'lg';\r\n }\r\n\r\n private _toggleModal(): void {\r\n this.setState({\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n }\r\n\r\n private _updateViewport(): void {\r\n this._viewport = this._getViewport();\r\n\r\n if (this.state.modalIsOpen && !this.isMobile) {\r\n this._toggleModal();\r\n }\r\n }\r\n\r\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\r\n switch (refinerCount) {\r\n case expandRefinersCount.all:\r\n this.expandrefinerCount = validRefiners;\r\n break;\r\n case expandRefinersCount.one:\r\n this.expandrefinerCount = 1;\r\n break;\r\n case expandRefinersCount.two:\r\n this.expandrefinerCount = 2;\r\n break;\r\n case expandRefinersCount.three:\r\n this.expandrefinerCount = 3;\r\n break;\r\n case expandRefinersCount.four:\r\n this.expandrefinerCount = 4;\r\n break;\r\n default:\r\n this.expandrefinerCount = 0;\r\n }\r\n };\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n <div className='msc-pagination__prev'>\r\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\r\n <span className='prev-text'>{paginationPreviousText}</span>\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n <div className='msc-pagination__next'>\r\n <span className='next-text'>{paginationNextText}</span>\r\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Expand collapse all in refine Menu.\r\n * @param None - No Paramters.\r\n * @returns Expand Collapse all JSX.\r\n */\r\n private readonly _renderCollapseExpandAll = (preferredSearchSiteLanguage: string) => {\r\n return (\r\n <div className='ms-search-result-container__refiner-section-expand__collapse'>\r\n <button className='ms-search-result-container__refiner-section-expand-btn' onClick={() => this._expandCollapseAll(true)}>\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? this.props.resources.expandAllTextInMaori\r\n : this.props.resources.expandAllText}\r\n </button>\r\n <span className='expand-all-seperator'>|</span>\r\n <button className='ms-search-result-container__refiner-section-collapse-btn' onClick={() => this._expandCollapseAll(false)}>\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? this.props.resources.collapseAllTextInMaori\r\n : this.props.resources.collapseAllText}\r\n </button>\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Sets expand collapse All State.\r\n * @param refineExpandState - Refinement state for expand and collapse all.\r\n * @returns Nothing.\r\n */\r\n private readonly _expandCollapseAll = (refineExpandState: boolean) => {\r\n this.setState({ expandAllRefiners: refineExpandState });\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable react/no-unknown-property */\r\nimport { IComponentProps } from '@msdyn365-commerce/core';\r\nimport React from 'react';\r\nimport {\r\n BsFillFileEarmarkBarGraphFill,\r\n BsFileEarmarkRichtextFill,\r\n BsFileEarmarkPostFill,\r\n BsFileEarmarkFontFill,\r\n BsFileEarmarkCodeFill,\r\n BsFileEarmarkEaselFill\r\n} from 'react-icons/bs';\r\nimport {\r\n FaFile,\r\n FaFileArchive,\r\n FaFileAudio,\r\n FaFileCode,\r\n FaFileCsv,\r\n FaFileExcel,\r\n FaFileImage,\r\n FaFileInvoice,\r\n FaFilePdf,\r\n FaFilePowerpoint,\r\n FaFileSignature,\r\n FaFileVideo,\r\n FaFileWord,\r\n FaGoogleDrive,\r\n FaHtml5,\r\n FaLeanpub\r\n} from 'react-icons/fa';\r\nimport { HiDocumentReport } from 'react-icons/hi';\r\nimport { RiFileGifFill } from 'react-icons/ri';\r\nimport { SiMicrosoftoutlook } from 'react-icons/si';\r\nimport { IMoeSearchResultContainerResources } from '../moe-search-result-container.props.autogenerated';\r\nexport interface ICollectionItemComponentProps extends IComponentProps<{}> {\r\n className?: string;\r\n artifacts: any;\r\n showMoreArtifacts: any;\r\n ArtifactsDataAttributes: any;\r\n resources?: IMoeSearchResultContainerResources;\r\n preferredLanguageForError: string;\r\n}\r\n\r\nexport const ArtifactsListView: React.FC<ICollectionItemComponentProps> = (props: any) => {\r\n const { artifacts, className, resources, preferredLanguageForError } = props;\r\n console.log('external resources', artifacts);\r\n\r\n // variable declaration\r\n const IMSCCRemovedArtifacts = artifacts.filter(\r\n (artifact: any) =>\r\n artifact?.FILETYPE?.toUpperCase() !== 'IMSCC' && !(artifact?.MEDIANAME as string).includes('CogSearchIndexHelper')\r\n );\r\n\r\n return (\r\n <>\r\n {IMSCCRemovedArtifacts && IMSCCRemovedArtifacts.length > 0 ? (\r\n <div className={className}>\r\n {IMSCCRemovedArtifacts?.map((artifact: any, index: number) => (\r\n <ArtifactResource id={artifact.Id} artifact={artifact} key={artifact.Id} />\r\n ))}\r\n {/* <div className='moe-search-artifacts-resources-showmore--btn'> */}\r\n {/* <button onClick={showMoreExternalResources} className='moe-btn moe-btn--primary-blue'> */}\r\n {/* Show More */}\r\n {/* <span className='moe-search-ext-resources-showmore--spinner'></span> */}\r\n {/* </button> */}\r\n {/* </div> */}\r\n </div>\r\n ) : (\r\n <div className='msc-alert msc-alert-warning'>\r\n {preferredLanguageForError === 'maori' ? resources.resultSearchNotFoundTextInMaori : resources.resultSearchNotFoundText}\r\n .\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst ArtifactResource = (props: any) => {\r\n const { artifact } = props;\r\n\r\n return (\r\n <div className='moe-search-artifacts-resource'>\r\n <div className='moe-search-ext-resource__header'>\r\n {/* <a\r\n target='_blank'\r\n download={artifact?.MEDIANAME}\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title='Word File'\r\n href={artifact.MEDIAURL}\r\n aria-label={`Read More about ${artifact.MEDIAURL}`}\r\n > */}\r\n {renderDocument(artifact)}\r\n {/* </a> */}\r\n <p>{artifact?.MEDIANAME || 'Resource name is not available for this.'}</p>\r\n </div>\r\n <div className='moe-search-ext-resource__footer'>\r\n <p>\r\n <b>Resource: </b>\r\n {artifact?.ProductName || 'Resource name is not available for this.'}\r\n </p>\r\n <p>\r\n <b>Format: </b>.{artifact?.FILETYPE?.toLowerCase() || 'ext'}\r\n </p>\r\n <p>\r\n <b>Intended end user role: </b>\r\n {artifact?.INTENDEDUSERROLE || 'none'}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// const getArtifactIcon = (FILETYPE: any): any => {\r\n// const fileType = FILETYPE?.toUpperCase();\r\n// switch (fileType) {\r\n// case 'DOC':\r\n// return <FaFileWord />;\r\n// case 'IMAGE':\r\n// return <FaFileImage />;\r\n// case 'EXCEL':\r\n// return <FaFileExcel />;\r\n// case 'PPT':\r\n// return <FaFilePowerpoint />;\r\n// case 'EPUB':\r\n// return <FaLeanpub />;\r\n// case 'PDF':\r\n// return <FaFilePdf />;\r\n// case 'GOOGLEDOC':\r\n// return <FaGoogleDrive />;\r\n// case 'IMSCC':\r\n// break;\r\n// default:\r\n// return <FaFile />;\r\n// }\r\n// };\r\n\r\nfunction renderWordFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download={MediaName}\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileWord></FaFileWord>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderExcelFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download={MediaName}\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileExcel></FaFileExcel>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderPPTFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download={MediaName}\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFilePowerpoint></FaFilePowerpoint>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderPDFFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download={MediaName}\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFilePdf></FaFilePdf>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderImageFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileImage />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderGoogleDocFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaGoogleDrive />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderAviFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileVideo />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderBmpFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileImage />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderCsvFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileCsv />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderDocFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileWord />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderGifFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <RiFileGifFill />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderHTMLFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaHtml5 />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderJSONFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileInvoice />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderMhpFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <BsFillFileEarmarkBarGraphFill />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderCodeFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileCode />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderMsgFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <SiMicrosoftoutlook />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderRTFFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <BsFileEarmarkRichtextFill />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderSGMLFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <BsFileEarmarkPostFill />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderTxtFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <BsFileEarmarkFontFill />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderVsdFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileSignature />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderXmlFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <BsFileEarmarkCodeFill />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderZipFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFileArchive />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderotherFiles(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n download={MediaName}\r\n target='_blank'\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFile />\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderGSlides(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download={MediaName}\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaFilePowerpoint></FaFilePowerpoint>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderEbookPreview(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download={MediaName}\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${MediaName}`}\r\n >\r\n <FaLeanpub></FaLeanpub>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderAudioFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${fileURL}`}\r\n >\r\n <FaFileAudio size={30}></FaFileAudio>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderVideoFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${fileURL}`}\r\n >\r\n <FaFileVideo size={30}></FaFileVideo>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderPbixFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${fileURL}`}\r\n >\r\n <HiDocumentReport size={30}></HiDocumentReport>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderUsdzFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${fileURL}`}\r\n >\r\n <BsFileEarmarkEaselFill size={30}></BsFileEarmarkEaselFill>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderDaeFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${fileURL}`}\r\n >\r\n <BsFileEarmarkEaselFill size={30}></BsFileEarmarkEaselFill>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderXsnFile(fileURL: any, MediaName: string) {\r\n return (\r\n <a\r\n target='_blank'\r\n download\r\n rel='noreferrer'\r\n className='tooltip-test'\r\n title={MediaName}\r\n href={fileURL}\r\n aria-label={`Read More about ${fileURL}`}\r\n >\r\n <FaFileCode size={30}></FaFileCode>\r\n </a>\r\n );\r\n}\r\n\r\nfunction renderDocument(item: any) {\r\n if (item?.FILETYPE?.toUpperCase() === 'DOC') {\r\n return renderWordFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'IMAGE') {\r\n return renderImageFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'EXCEL') {\r\n return renderExcelFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'PPT') {\r\n return renderPPTFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'PDF') {\r\n return renderPDFFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'GOOGLEDOC') {\r\n return renderGoogleDocFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'AVI') {\r\n return renderAviFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'BMP') {\r\n return renderBmpFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'CSV') {\r\n return renderCsvFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'DOC') {\r\n return renderDocFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'DOCX') {\r\n return renderDocFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'GIF') {\r\n return renderGifFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'HTM') {\r\n return renderHTMLFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'HTML') {\r\n return renderHTMLFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'JPEG') {\r\n return renderImageFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'JPG') {\r\n return renderImageFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'JSON') {\r\n return renderJSONFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'MHP') {\r\n return renderMhpFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'MHTML') {\r\n return renderCodeFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'MSG') {\r\n return renderMsgFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'PNG') {\r\n return renderImageFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'PPT') {\r\n return renderPPTFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'PPTX') {\r\n return renderPPTFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'RTF') {\r\n return renderRTFFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'SGML') {\r\n return renderSGMLFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'TIF') {\r\n return renderImageFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'TXT') {\r\n return renderTxtFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'VSD') {\r\n return renderVsdFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'WMF') {\r\n return renderImageFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'XHTML') {\r\n return renderCodeFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'XLS') {\r\n return renderExcelFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'XLSX') {\r\n return renderExcelFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'XML') {\r\n return renderXmlFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'ZIP') {\r\n return renderZipFile(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'GSLIDES') {\r\n return renderGSlides(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FILETYPE?.toUpperCase() === 'EPUB') {\r\n return renderEbookPreview(item.MEDIAURL, item.MEDIANAME);\r\n } else if (item?.FileType?.toUpperCase() === 'WAV') {\r\n return renderAudioFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'MP3') {\r\n return renderAudioFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'WMA') {\r\n return renderAudioFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'MP4') {\r\n return renderVideoFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'MPEG') {\r\n return renderVideoFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'MOV') {\r\n return renderVideoFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'PIBX') {\r\n return renderPbixFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'USDZ') {\r\n return renderUsdzFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'DAE') {\r\n return renderDaeFile(item.MediaUrl, item.MediaName);\r\n } else if (item?.FileType?.toUpperCase() === 'XSN') {\r\n return renderXsnFile(item.MediaUrl, item.MediaName);\r\n } else {\r\n return renderotherFiles(item.MEDIAURL, item.MEDIANAME);\r\n }\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IComponentProps } from '@msdyn365-commerce/core';\r\nimport React from 'react';\r\nimport { FaExternalLinkAlt } from 'react-icons/fa';\r\nimport { IMoeSearchResultContainerResources } from '../moe-search-result-container.props.autogenerated';\r\n// import React, { useRef, useState } from 'react';\r\n\r\nexport interface ICollectionItemComponentProps extends IComponentProps<{}> {\r\n className?: string;\r\n externalSiteData: any;\r\n showMoreExternalResources: any;\r\n externalSiteDataAttributes: any;\r\n resources?: IMoeSearchResultContainerResources;\r\n preferredLanguageForError: string;\r\n preferredLanguageForButton: string;\r\n //isExternalResourcesLoading: boolean;\r\n}\r\n\r\nexport const ExternalResourcesListView: React.FC<ICollectionItemComponentProps> = (props: any) => {\r\n const {\r\n externalSiteData,\r\n className,\r\n showMoreExternalResources,\r\n resources,\r\n preferredLanguageForError,\r\n preferredLanguageForButton\r\n //isExternalResourcesLoading\r\n } = props;\r\n console.log('external resources', externalSiteData);\r\n\r\n // variable declaration\r\n\r\n return (\r\n <>\r\n {externalSiteData.length > 0 ? (\r\n <div className={className}>\r\n {externalSiteData?.map((resource: any, index: number) => (\r\n <ExternalResource id={resource.id} resource={resource} key={resource.id} />\r\n ))}\r\n <div className='moe-search-ext-resources-showmore--btn'>\r\n <button onClick={showMoreExternalResources} className='moe-btn moe-btn--primary-blue'>\r\n {preferredLanguageForButton === 'maori' ? resources.showMoreTextInMaori : resources.showMoreText}\r\n {/* <span className='moe-search-ext-resources-showmore--spinner'></span> */}\r\n </button>\r\n </div>\r\n </div>\r\n ) : (\r\n <div className='msc-alert msc-alert-warning'>\r\n {/* {isExternalResourcesLoading && <span>Loading..</span>}\r\n {!isExternalResourcesLoading && */}\r\n {preferredLanguageForError === 'maori' ? resources.resultSearchNotFoundTextInMaori : resources.resultSearchNotFoundText}\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst ExternalResource = (props: any) => {\r\n const { resource } = props;\r\n\r\n return (\r\n <div className='moe-search-ext-resource'>\r\n <div className='moe-search-ext-resource__header'>\r\n <a href={resource.source_url} aria-label={resource.title} rel='noreferrer' target='_blank'>\r\n <h2 className='moe-search-ext-resource--title'>{resource.title}</h2>\r\n </a>\r\n <div className='moe-search-ext-resource--source'>\r\n <ul>\r\n {resource?.dc_type && <li>{resource?.dc_type[0]}</li>}\r\n {resource?.content_partner && <li>{resource?.content_partner[0]}</li>}\r\n {resource?.collection_title && <li>{resource?.collection_title[0]}</li>}\r\n </ul>\r\n </div>\r\n <div className='moe-search-ext-resource--description'>\r\n <p>\r\n {resource.description && `${resource?.description.slice(0, 288)}${resource.description.length > 288 ? '...' : ''}`}\r\n </p>\r\n </div>\r\n </div>\r\n <div className='moe-search-ext-resource__footer'>\r\n <div className='moe-search-ext-resource--image'>\r\n {resource.large_thumbnail_url ? (\r\n <a href={resource.source_url} aria-label={resource.title} rel='noreferrer' target='_blank'>\r\n <img src={resource.large_thumbnail_url} alt='' />\r\n </a>\r\n ) : (\r\n <div className='moe-search-ext-resource__no-image'>No Image</div>\r\n )}\r\n </div>\r\n <div className='moe-search-ext-resource-link'>\r\n <a href={resource.source_url} aria-label={resource.title} rel='noreferrer' target='_blank'>\r\n <span>\r\n digitalnz.org <FaExternalLinkAlt />\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n // ICategoryHierarchyViewProps,\r\n IRefineMenuViewProps,\r\n ISearchResultContainerViewProps,\r\n ISearchResultModalViewProps,\r\n ISortByViewProps,\r\n ITitleViewProps\r\n} from '@msdyn365-commerce-modules/search-result-container';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { getDigitalNZDetailsAsync } from '../../actions/extensions/DataActionExtension.g';\r\nimport { ArtifactsListView } from './components/artifacts-list-view';\r\nimport { ExternalResourcesListView } from './components/external-resources-list.view';\r\nimport { CuratedCollectionList, ICuratedCollection } from './components/curated-collections-list-view';\r\nimport {\r\n IMoeSearchResultContainerProps,\r\n IMoeSearchResultContainerResources,\r\n siteName\r\n} from './moe-search-result-container.props.autogenerated';\r\ninterface productListViewProps {\r\n productsListView?: React.ReactNode;\r\n ministryPagination?: React.ReactNode;\r\n ochPagination?: React.ReactNode;\r\n externalPagination?: React.ReactNode;\r\n ochProducts?: React.ReactNode;\r\n curatedCollectionData: ICuratedCollection[];\r\n localSearchBar?: React.ReactNode;\r\n resourceButton?: React.ReactNode;\r\n ochResourceButton?: React.ReactNode;\r\n allArtifactsButton?: React.ReactNode;\r\n enableListViewToggle?: boolean;\r\n expandCollapseAllButtons: React.ReactNode;\r\n preferredLanguageForError: string;\r\n preferredSearchSiteLanguage: string;\r\n preferredLanguageForButton: string;\r\n}\r\n\r\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps &\r\n productListViewProps &\r\n IMoeSearchResultContainerProps<{}>> = props => {\r\n const {\r\n SearchResultContainer,\r\n products,\r\n ochProducts,\r\n productsListView,\r\n localSearchBar,\r\n // ministryPagination,\r\n // ochPagination,\r\n // externalPagination,\r\n ProductsContainer,\r\n ProductSectionContainer,\r\n choiceSummary,\r\n isMobile,\r\n modalToggle,\r\n searchResultModal,\r\n TitleViewProps,\r\n refineMenu,\r\n //categoryHierarchy,\r\n sortByOptions,\r\n // CategoryNavContainer,\r\n RefineAndProductSectionContainer,\r\n // errorMessage,\r\n FeatureSearchContainer,\r\n similarLookProduct,\r\n context,\r\n data,\r\n curatedCollectionData,\r\n config,\r\n resourceButton,\r\n allArtifactsButton,\r\n enableListViewToggle,\r\n expandCollapseAllButtons,\r\n resources,\r\n preferredLanguageForError,\r\n preferredSearchSiteLanguage,\r\n preferredLanguageForButton\r\n } = props;\r\n\r\n // Variable declarations\r\n let searchString: any;\r\n if (context && context.request && context.request.query && context.request.query.q) {\r\n searchString = `\"${context.request.query.q}\"`;\r\n } else {\r\n searchString = data.category.result && data.category.result.Name;\r\n }\r\n searchString = (searchString as string).trim().replace(/'/g, '');\r\n\r\n // State declarations\r\n const [searchContent, setSearchContent] = useState('ministry');\r\n const [ministryState, setMinistryState] = useState('tileview');\r\n const [externalSiteData, setExternalSiteData] = useState<any[]>([]);\r\n const [externalSiteDataAttributes, setExternalSiteDataAttributes] = useState<any>();\r\n //const [isExternalResourcesLoading, setIsExternalResourcesLoading] = useState<boolean>(true);\r\n const artifactsDataAttributes = {};\r\n console.log(props.data.listPageState);\r\n //@ts-ignore\r\n const artifactsData: any[] = props.data?.listPageState?.result?.artifactsData;\r\n const toggleMinistryState = () => {\r\n if (ministryState === 'tileview') {\r\n setMinistryState('listview');\r\n } else {\r\n setMinistryState('tileview');\r\n }\r\n };\r\n const isSearchPage = props.data?.listPageState?.result?.pageType === 'Search' ? true : false;\r\n\r\n useEffect(() => {\r\n if (config.ochSearch) {\r\n setSearchContent('och');\r\n }\r\n }, []);\r\n\r\n const getExternalSiteResources = async () => {\r\n let extResourceData: any;\r\n setSearchContent('external');\r\n\r\n if (externalSiteData.length === 0) {\r\n try {\r\n extResourceData = await getDigitalNZDetailsAsync(\r\n { callerContext: context.actionContext, bypassCache: 'get' },\r\n searchString,\r\n 1\r\n );\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n console.log('extResourceData before', extResourceData);\r\n console.table('ext res list before', externalSiteData);\r\n setExternalSiteData([...extResourceData?.search?.results]);\r\n setExternalSiteDataAttributes({\r\n page: extResourceData.search.page,\r\n per_page: extResourceData.search.per_page,\r\n result_count: extResourceData.search.result_count\r\n });\r\n\r\n console.log('extResourceData after', extResourceData);\r\n console.table('ext res list after', externalSiteData);\r\n\r\n //setIsExternalResourcesLoading(false);\r\n\r\n return;\r\n }\r\n };\r\n\r\n const showMoreExternalResources = async () => {\r\n let extResourceData: any;\r\n\r\n if (!externalSiteData) {\r\n extResourceData = await getDigitalNZDetailsAsync({ callerContext: context.actionContext, bypassCache: 'get' }, searchString, 1);\r\n setExternalSiteData([...extResourceData?.search?.results]);\r\n setExternalSiteDataAttributes({\r\n page: extResourceData.search.page,\r\n per_page: extResourceData.search.per_page,\r\n result_count: extResourceData.search.result_count\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (externalSiteDataAttributes && externalSiteDataAttributes.page) {\r\n if (externalSiteData.length < externalSiteDataAttributes.result_count) {\r\n extResourceData = await getDigitalNZDetailsAsync(\r\n { callerContext: context.actionContext, bypassCache: 'get' },\r\n searchString,\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n externalSiteDataAttributes.page + 1\r\n );\r\n setExternalSiteData([...externalSiteData, ...extResourceData?.search?.results]);\r\n setExternalSiteDataAttributes({\r\n page: extResourceData.search.page,\r\n per_page: extResourceData.search.per_page,\r\n result_count: extResourceData.search.result_count\r\n });\r\n }\r\n\r\n return;\r\n }\r\n };\r\n\r\n const createSearchResultModal = (\r\n modalProps: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps,\r\n isRecoSearchPage?: string,\r\n resources?: IMoeSearchResultContainerResources\r\n ): JSX.Element => {\r\n return React.cloneElement(\r\n modalProps.modal,\r\n {},\r\n modalProps.modalHeader,\r\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage, resources),\r\n modalProps.modalFooter\r\n );\r\n };\r\n\r\n const createModalBody = (\r\n props: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps,\r\n isRecoSearchPage?: string,\r\n resources?: IMoeSearchResultContainerResources\r\n ): JSX.Element | null => {\r\n if (sortByDropDown) {\r\n return React.cloneElement(\r\n props.modalBody,\r\n {},\r\n renderSort(sortByDropDown, isRecoSearchPage),\r\n renderRefiner(refineMenu, resources)\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const renderRefiner = (props: IRefineMenuViewProps, resources: IMoeSearchResultContainerResources | undefined): JSX.Element | null => {\r\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\r\n if (refiners) {\r\n return (\r\n <Node {...RefinerSectionContainer}>\r\n <h3 className='ms-search-result-container__refiner-section-ttl'>\r\n {preferredSearchSiteLanguage === 'maori' ? resources?.filterTextInMaori : resources?.filterText}\r\n </h3>\r\n {expandCollapseAllButtons}\r\n <Node {...RefineMenuContainer}>\r\n {refiners.map((submenu, index) => (\r\n <React.Fragment key={index}>{submenu}</React.Fragment>\r\n ))}\r\n </Node>\r\n </Node>\r\n );\r\n } else {\r\n return (\r\n <div className='ms-search-result-container__refiner-section'>\r\n <h3 className='ms-search-result-container__refiner-section-ttl'>\r\n {preferredSearchSiteLanguage === 'maori' ? resources?.filterTextInMaori : resources?.filterText}\r\n </h3>\r\n <Node {...RefineMenuContainer}></Node>\r\n </div>\r\n );\r\n }\r\n // return null;\r\n };\r\n\r\n const renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\r\n const { SortingContainer, sortByDropDown } = props;\r\n if (sortByDropDown && !isRecoSearchPage) {\r\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\r\n }\r\n return null;\r\n };\r\n\r\n // const renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\r\n // const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\r\n // if (categoryHierarchyList) {\r\n // return (\r\n // <Node {...CategoryHierarchyContainer}>\r\n // {categoryHierarchyList.map((category, index) => (\r\n // <React.Fragment key={index}>\r\n // {category}\r\n // {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\r\n // </React.Fragment>\r\n // ))}\r\n // </Node>\r\n // );\r\n // }\r\n\r\n // return null;\r\n // };\r\n\r\n const renderTitle = (props: ITitleViewProps): JSX.Element | null => {\r\n const { title, TitleContainer } = props;\r\n\r\n if (title) {\r\n return (\r\n <Node {...TitleContainer}>\r\n <h2>\r\n {title.titlePrefix}\r\n {title.titleText}({title.titleCount})\r\n </h2>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const showMoreArtifacts = async () => {};\r\n\r\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\r\n\r\n // function getArtifacts() {\r\n // try {\r\n // const context: any = { callerContext: props.context.actionContext };\r\n // console.log('Get Props inside get Artifacts');\r\n // // return getArtifactsByItemAsync(context, 'NZH30').then(result => result);\r\n // return getArtifactsSearchResultsAsync(context, {\r\n // Context: {\r\n // ChannelId: 68719479780,\r\n // CatalogId: 0\r\n // },\r\n // IncludeAttributes: true,\r\n // SkipVariantExpansion: true,\r\n // SearchCondition: 'history'\r\n // }).then((result: any) => {\r\n // return result;\r\n // });\r\n // } catch (err) {\r\n // console.log(err);\r\n // return;\r\n // }\r\n // }\r\n\r\n // useEffect(() => {\r\n // getArtifacts()?.then((artifacts: any) => {\r\n // console.log('all Artifacts', artifacts);\r\n // });\r\n // }, []);\r\n\r\n // void getArtifacts();\r\n const listViewBtnText = preferredSearchSiteLanguage === 'maori' ? resources.listViewButtonTextInMaori : resources.listViewButtonText;\r\n const tileViewBtnText = preferredSearchSiteLanguage === 'maori' ? resources.tileViewButtonTextInMaori : resources.tileViewButtonText;\r\n\r\n if (isMobile) {\r\n return (\r\n <Module {...SearchResultContainer}>\r\n {!config.ochSearch &&\r\n props.data?.listPageState?.result?.pageType !== 'Search' &&\r\n props.data?.listPageState?.result?.pageType !== 'Unknown' &&\r\n localSearchBar}\r\n {/* {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)} */}\r\n {props.config.siteName !== siteName.kwr && renderTitle(TitleViewProps)}\r\n {props.config.siteName !== siteName.kwr && choiceSummary}\r\n {modalToggle}\r\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage, props.resources)}\r\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\r\n <div className='moe-tabs moe-tabs--underline'>\r\n <div>\r\n <button\r\n onClick={() => setSearchContent('ministry')}\r\n className={`moe-tabs__item moe-tabs__item-resources ${searchContent === 'ministry' ? 'active' : ''}`}\r\n >\r\n {preferredSearchSiteLanguage === 'maori' ? resources.resourcesTabTextInMaori : resources.resourcesTabText}\r\n </button>\r\n <>\r\n {config.siteName === siteName.kwr && (\r\n //{isSearchPage && props.data?.listPageState?.result?.pageType !== 'Unknown' && (\r\n <button\r\n className={`moe-tabs__item ${searchContent === 'och' ? 'active' : ''}`}\r\n onClick={() => setSearchContent('och')}\r\n >\r\n {preferredSearchSiteLanguage === 'maori' ? resources.ochTabTextInMaori : resources.ochTabText}\r\n </button>\r\n )}\r\n\r\n <button\r\n className={`moe-tabs__item ${searchContent === 'artifacts' ? 'active' : ''}`}\r\n onClick={() => setSearchContent('artifacts')}\r\n >\r\n {preferredSearchSiteLanguage === 'maori' ? resources.artifactsTabTextInMaori : resources.artifactsTabText}\r\n </button>\r\n {config.siteName === siteName.kwr && (\r\n <button\r\n onClick={() => setSearchContent('curate_collections')}\r\n className={`moe-tabs__item ${searchContent === 'curate_collections' ? 'active' : ''}`}\r\n >\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? resources.curatedCollectionTabTextInMaori\r\n : resources.curatedCollectionTabText}\r\n </button>\r\n )}\r\n <button\r\n className={`moe-tabs__item ${searchContent === 'external' ? 'active' : ''}`}\r\n onClick={getExternalSiteResources}\r\n >\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? resources.externalSitesTabTextInMaori\r\n : resources.externalSitesTabText}\r\n </button>\r\n </>\r\n </div>\r\n {props.config.siteName === siteName.kwr && (\r\n <div className='moe-search-results-count'>\r\n <span>{TitleViewProps.title.titleCount}</span>\r\n </div>\r\n )}\r\n </div>\r\n {searchContent === 'ministry' && !config.ochSearch && (\r\n <>\r\n {props.config.siteName !== siteName.kwr && enableListViewToggle && (\r\n <div className='moe-listview__button-container'>\r\n <span\r\n onClick={toggleMinistryState}\r\n className={`moe-listview__button-mobile ${\r\n ministryState === 'tileview' ? 'moe-listview__icon' : 'moe-tileview__icon'\r\n }`}\r\n ></span>\r\n </div>\r\n )}\r\n <Node {...ProductsContainer}>\r\n {/* {errorMessage} */}\r\n {ministryState === 'tileview' ? products : productsListView}\r\n </Node>\r\n {resourceButton}\r\n </>\r\n )}\r\n\r\n {searchContent === 'och' && (\r\n <>\r\n <Node {...ProductsContainer}>\r\n {/* {errorMessage} */}\r\n {ochProducts}\r\n </Node>\r\n {/* {ochResourceButton} */}\r\n </>\r\n )}\r\n\r\n {searchContent === 'artifacts' && (\r\n <>\r\n <Node className='moe-search-artifacts-resources__container'>\r\n <ArtifactsListView\r\n typeName='external'\r\n id='ext-list-view'\r\n context={props.context}\r\n artifacts={artifactsData}\r\n ArtifactsDataAttributes={artifactsDataAttributes}\r\n className='moe-search-artifacts-resources'\r\n data={artifactsData}\r\n showMoreArtifacts={showMoreArtifacts}\r\n resources={resources}\r\n preferredLanguageForError={preferredLanguageForError}\r\n />\r\n </Node>\r\n {allArtifactsButton}\r\n </>\r\n )}\r\n\r\n {searchContent === 'curate_collections' && (\r\n <>\r\n <Node className='moe-search-curated-collections__container'>\r\n <CuratedCollectionList\r\n products={curatedCollectionData}\r\n context={props.context}\r\n id={''}\r\n typeName={''}\r\n data={curatedCollectionData}\r\n resources={resources}\r\n preferredLanguageForError={preferredLanguageForError}\r\n preferredLanguageForButton={preferredLanguageForButton}\r\n ></CuratedCollectionList>\r\n </Node>\r\n </>\r\n )}\r\n\r\n {searchContent === 'external' && (\r\n <>\r\n <Node className='moe-search-ext-resources__container'>\r\n <ExternalResourcesListView\r\n typeName='external'\r\n id='ext-list-view'\r\n context={props.context}\r\n externalSiteData={externalSiteData}\r\n //@ts-ignore\r\n externalSiteDataAttributes={externalSiteDataAttributes}\r\n className='moe-search-ext-resources'\r\n data={externalSiteData}\r\n showMoreExternalResources={showMoreExternalResources}\r\n resources={resources}\r\n preferredLanguageForError={preferredLanguageForError}\r\n preferredLanguageForButton={preferredLanguageForButton}\r\n //isExternalResourcesLoading={isExternalResourcesLoading}\r\n />\r\n </Node>\r\n </>\r\n )}\r\n </Module>\r\n );\r\n }\r\n return (\r\n <Module {...SearchResultContainer}>\r\n {!config.ochSearch &&\r\n props.data?.listPageState?.result?.pageType !== 'Search' &&\r\n props.data?.listPageState?.result?.pageType !== 'Unknown' &&\r\n localSearchBar}\r\n {/* {categoryHierarchy && <Node {...CategoryNavContainer}>{renderCategoryHierarchy(categoryHierarchy)}</Node>} */}\r\n <Node {...RefineAndProductSectionContainer}>\r\n {config.siteName !== siteName.kwr && renderRefiner(refineMenu, props.resources)}\r\n <Node {...ProductSectionContainer}>\r\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\r\n <div className='ms-search-result-wrapper-title-choice-summary'>\r\n {TitleViewProps && renderTitle(TitleViewProps)}\r\n {choiceSummary}\r\n </div>\r\n <div className='ms-search-result-wrapper-sort-by-category'>\r\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\r\n </div>\r\n <div\r\n className={\r\n config.siteName !== siteName.kwr\r\n ? 'moe-tabs moe-tabs--underline'\r\n : 'moe-tabs moe-tabs--underline kwr-tabs--underline'\r\n }\r\n >\r\n <div>\r\n {!config.ochSearch && (\r\n <button\r\n onClick={() => setSearchContent('ministry')}\r\n className={`moe-tabs__item moe-tabs__item-resources ${searchContent === 'ministry' ? 'active' : ''}`}\r\n >\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? resources.resourcesTabTextInMaori\r\n : resources.resourcesTabText}\r\n </button>\r\n )}\r\n\r\n {(isSearchPage || props.data?.listPageState?.result?.pageType === 'Unknown') && (\r\n <button\r\n onClick={() => setSearchContent('och')}\r\n className={`moe-tabs__item ${searchContent === 'och' ? 'active' : ''}`}\r\n >\r\n {preferredSearchSiteLanguage === 'maori' ? resources.ochTabTextInMaori : resources.ochTabText}\r\n </button>\r\n )}\r\n <button\r\n onClick={() => setSearchContent('artifacts')}\r\n className={`moe-tabs__item ${searchContent === 'artifacts' ? 'active' : ''}`}\r\n >\r\n {preferredSearchSiteLanguage === 'maori' ? resources.artifactsTabTextInMaori : resources.artifactsTabText}\r\n </button>\r\n {config.siteName === siteName.kwr && (\r\n <button\r\n onClick={() => setSearchContent('curate_collections')}\r\n className={`moe-tabs__item ${searchContent === 'curate_collections' ? 'active' : ''}`}\r\n >\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? resources.curatedCollectionTabTextInMaori\r\n : resources.curatedCollectionTabText}\r\n </button>\r\n )}\r\n <button\r\n onClick={getExternalSiteResources}\r\n className={`moe-tabs__item ${searchContent === 'external' ? 'active' : ''}`}\r\n >\r\n {preferredSearchSiteLanguage === 'maori'\r\n ? resources.externalSitesTabTextInMaori\r\n : resources.externalSitesTabText}\r\n </button>\r\n </div>\r\n {props.config.siteName === siteName.kwr && (\r\n <div className='moe-search-results-count'>\r\n <span>{TitleViewProps.title.titleCount}</span>\r\n </div>\r\n )}\r\n </div>\r\n {searchContent === 'ministry' && !config.ochSearch && (\r\n <>\r\n {enableListViewToggle && (\r\n <div className='moe-listview__button-container'>\r\n <button\r\n onClick={toggleMinistryState}\r\n className='moe-btn moe-btn--primary-blue moe-listview__button-desktop'\r\n >\r\n <text>{ministryState === 'tileview' ? listViewBtnText : tileViewBtnText}</text>\r\n </button>\r\n </div>\r\n )}\r\n <Node {...ProductsContainer}>\r\n {/* {errorMessage} */}\r\n {ministryState === 'tileview' ? products : productsListView}\r\n </Node>\r\n {resourceButton}\r\n </>\r\n )}\r\n\r\n {searchContent === 'och' && (\r\n <>\r\n <Node {...ProductsContainer}>\r\n {/* {errorMessage} */}\r\n {ochProducts}\r\n </Node>\r\n {/* {ochResourceButton} */}\r\n </>\r\n )}\r\n\r\n {searchContent === 'artifacts' && (\r\n <>\r\n <Node className='moe-search-artifacts-resources__container'>\r\n <ArtifactsListView\r\n typeName='external'\r\n id='ext-list-view'\r\n context={props.context}\r\n artifacts={artifactsData}\r\n ArtifactsDataAttributes={artifactsDataAttributes}\r\n className='moe-search-artifacts-resources'\r\n data={artifactsData}\r\n showMoreArtifacts={showMoreArtifacts}\r\n resources={resources}\r\n preferredLanguageForError={preferredLanguageForError}\r\n />\r\n </Node>\r\n {allArtifactsButton}\r\n </>\r\n )}\r\n\r\n {searchContent === 'curate_collections' && (\r\n <>\r\n <Node className='moe-search-curated-collections__container'>\r\n <CuratedCollectionList\r\n products={curatedCollectionData}\r\n context={props.context}\r\n id={''}\r\n typeName={''}\r\n data={curatedCollectionData}\r\n resources={resources}\r\n preferredLanguageForError={preferredLanguageForError}\r\n preferredLanguageForButton={preferredLanguageForButton}\r\n ></CuratedCollectionList>\r\n </Node>\r\n </>\r\n )}\r\n\r\n {searchContent === 'external' && (\r\n <>\r\n <Node className='moe-search-ext-resources__container'>\r\n <ExternalResourcesListView\r\n typeName='external'\r\n id='ext-list-view'\r\n context={props.context}\r\n externalSiteData={externalSiteData}\r\n //@ts-ignore\r\n externalSiteDataAttributes={externalSiteDataAttributes}\r\n className='moe-search-ext-resources'\r\n data={externalSiteData}\r\n showMoreExternalResources={showMoreExternalResources}\r\n resources={resources}\r\n preferredLanguageForError={preferredLanguageForError}\r\n preferredLanguageForButton={preferredLanguageForButton}\r\n //isExternalResourcesLoading={isExternalResourcesLoading}\r\n />\r\n </Node>\r\n </>\r\n )}\r\n </Node>\r\n {config.siteName === siteName.kwr && renderRefiner(refineMenu, props.resources)}\r\n </Node>\r\n </Module>\r\n );\r\n};\r\n\r\nexport default SearchResultContainerView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['moe-search-result-container'] = {\n c: () => require('partner/modules/moe-search-result-container/moe-search-result-container.tsx'),\n $type: 'containerModule',\n da: [{name:'category', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category', runOn: 0},{name:'categoryHierarchy', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy', runOn: 0},{name:'featureProduct', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'listPageState', path:'modules/moe-search-result-container/list-page-state', runOn: 0},{name:'products', path:'modules/moe-search-result-container/actions/get-full-products-by-collection', runOn: 0},{name:'refiners', path:'modules/moe-search-result-container/actions/get-refiners-for-collection', runOn: 0},{name:'searchConfiguration', path:'modules/moe-search-result-container/actions/get-mapped-search-configuration', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'moe-search-result-container',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/moe-search-result-container'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/moe-search-result-container/actions/get-full-products-by-collection';\n let dataAction = require('partner/modules/moe-search-result-container/actions/get-full-products-by-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/moe-search-result-container/actions/get-mapped-search-configuration';\n let dataAction = require('partner/modules/moe-search-result-container/actions/get-mapped-search-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/moe-search-result-container/actions/get-refiners-for-collection';\n let dataAction = require('partner/modules/moe-search-result-container/actions/get-refiners-for-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/moe-search-result-container/list-page-state';\n let dataAction = require('partner/modules/moe-search-result-container/list-page-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|moe-search-result-container|moe-search-result-container'] = {\n c: () => require('partner/modules/moe-search-result-container/moe-search-result-container.view.tsx'),\n cn: '__local__-__local__-moe-search-result-container'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["BaseCollectionInput","constructor","pageType","apiSettings","queryResultSettings","refiners","category","searchText","includeAttributes","isUpdateRefinerPanel","locale","getCacheKey","_objectSpread","this","Paging","toJS","Sorting","buildCacheKey","map","refiner","RefinerRecordId","LeftValueBoundString","RightValueBoundString","convertToString","getCacheObjectType","dataCacheType","createBaseCollectionInput","args","inputClassConstuctor","requestContext","urlTokens","query","categoryId","QueryResultSettingsProxy","fromInputData","QueryResultSettings","queryRefiners","hydrateRefinersFromUrl","inputData","config","undefined","_inputData$config","updateRefinerPanel","getUpdateRefinerPanel","sorting","Columns","JSON","parse","decodeURIComponent","itemId","q","productId","recommendation","stringify","ProductId","Recommendation","Error","ProductListInventoryFilteringOptions","GetFullProductsByCollectionInput","length","isOutOfStock","product","channelInventoryConfiguration","ArrayExtensions","hasElements","AttributeValues","attribute","RecordId","InventoryProductAttributeRecordId","TextValue","InventoryOutOfStockAttributeValueText","returnProductsBasedOnInventoryInformation","products","context","ObjectExtensions","isNullOrUndefined","app","productListInventoryDisplay","HideOOS","filteredProducts","push","filterOutOfStockProducts","SortOOS","inStockProducts","outOfStockProducts","concat","sortsProductsBasedOnAvailability","async","returnProducts","productSearchResults","metadataCount","productSearchResultsWithImages","productSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","inventoryLevel","InventoryLevels","threshold","enableStockCheck","count","getInventoryConfigurationAsync","callerContext","element","inventoryRanges","channelInventoryConfigurationId","actionDataAction","createObservableDataAction","id","action","input","promise","searchProductId","searchCriteriaInput","Context","ChannelId","channelId","CatalogId","catalogId","Refinement","IncludeAttributes","SkipVariantExpansion","Language","CategoryIds","console","log","searchByCriteriaAsync","SearchCondition","searchObject","Number","isNaN","RecommendationListId","Ids","metadata","Top","itemsPerPage","skip","Skip","sortOptions","sortByOptionRelevanceDesc","sortByOptionRatingAsc","sortByOptionRatingDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","MappedSearchInput","getMappedSearchConfiguration","ctx","getSearchConfigurationAsync","then","searchConfiguration","ProductSortColumns","sortColumn","key","ColumnName","toUpperCase","IsDescending","telemetry","warning","filter","Boolean","createInput","getMappedSearchConfigurationDataAction","DefaultValues","getProductRefinerHierarchy","searchCriteria","getProductSearchRefinersAsync","productRefiners","trace","result","productRefiner","RefinersByCollectionInput","defaultCategoryIdValue","defaultProductIdValue","compressedRefinerKeys","compressedRefinerArray","parseQueryParam","compressedRefiner","parsedRefiner","forEach","refinerKey","index","_unused","buildListPageUrl","fullUrl","sortingColumns","skipCount","searchParams","delete","sortedRefiners","sort","first","second","set","compressedRefiners","compressRefiners","href","toString","getCurrentUrl","MsDyn365","isBrowser","URL","window","location","url","requestUrl","CuratedCollectionList","props","resources","preferredLanguageForError","React","className","item","idx","style","cursor","onClick","onClickCuratedCollection","recordId","curatedCollectionUrl","getUrlSync","actionContext","replace","decodedCuratedCollectionURL","separator","includes","assign","width","height","viewBox","display","verticalAlign","d","fill","imageURL","src","alt","Name","Description","substring","Count","resultSearchNotFoundTextInMaori","resultSearchNotFoundText","ListPageState","activeFilters","activeProducts","sortingCritera","currentPageNumber","totalProductCount","pageSize","featureProduct","productPrices","artifactsData","__decorate","observable","ListPageStateInput","listPageStateAction","createListPageInput","expandRefinersCount","siteName","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Currency","Decimal","Integer","findMatchingRefinementCriterion","productRefinerValue","refinementCriteria","find","refinementCriterion","isMatchingRefinementCriterion","RefinerSourceValue","DataTypeValue","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","isSelecting","next","rangeStart","rangeEnd","Text","TrueFalse","parentProductRefinerHierarchy","RefinerTypeValue","RefinerType","SingleSelect","Values","child","matchingIndex","findIndex","criterion","splice","ChoiceSummary","super","closeButtonGlyph","_onClick","e","preventDefault","stopPropagation","target","currentTarget","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","payLoad","getPayloadObject","telemetryContent","selectedChoices","_getKeyForRefinerValue","value","render","clearAllText","label","classNames","choiceAriaLabel","closeAriaLabel","items","selectedRefinersMap","contentAction","etext","clearAllAttributes","getTelemetryAttributes","classnames","listItemProps","Object","urlBuilder","role","choiceFormat","choiceRangeValueFormat","refinerHierarchy","overallFormat","rangeFormat","refinerValueName","refinerName","parent","hierarchy","KeyName","_formatPrice","UnitText","LeftValueBoundLocalizedString","amount","currency","cultureFormatter","formatCurrency","error","selected","textContent","trim","computed","observer","ErrorMessage","_ref","text","FeatureSearchResultItem","imageSettings","productName","productRecordId","productUrl","getProductPageUrlSync","fallbackImage","getFallbackImageUrl","ItemId","heading","featureSimilarDescriptionTitleInMaori","featureSimilarLooksTitleInMaori","onTelemetryClick","gridSettings","imageUrl","altText","img","imageProps","fallBackSrc","Image","loadFailureBehavior","renderProductPlacementImage","request","title","Link","ariaLabel","ModalToggle","innerRef","ref","modalNode","Modal","autoFocus","applicationNode","returnFocusRef","returnRef","isOpen","toggle","onModalToggle","zIndex","modalHeaderNode","ModalHeader","modalTitle","modalFooterNode","ModalFooter","Button","modalCloseButtonText","_product$Name","_getProductImageUrlFr","_getProductPageUrlFro","_props$config","_product$AttributeVal","data","ratingAriaLabel","ratingCountAriaLabel","allowBack","typeName","quickViewButton","dimensionAvailabilities","isOCH","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","search","pathname","getDefaultColorSwatchSelected","productData","_colorAttribute$Swatc","colorAttribute","attributeValue","_attributeValue$KeyNa","toLocaleLowerCase","DimensionTypes","color","Swatches","IsDefault","productImageUrlFromSwatch","dimensionToPreSelectInProductCard","none","defaultSwatch","ProductImageUrls","generateImageUrl","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","_product$ExtensionPro","_product$ExtensionPro2","_product$ExtensionPro3","ExtensionProperties","p","Key","Value","StringValue","_product$ExtensionPro4","constructedFullUrl","domainData","SwatchValue","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","addToCollectionConfig","modalTitleMaori","updatePageAndImageUrl","swatchItem","dimensionType","setValue","StringExtensions","isNullOrWhitespace","productPageUrlWithSwatch","newUrl","swatchProductImageUrl","productImageUrls","swatchItems","validValues","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionTypeValue","checkIfShouldDisplayAsSwatch","DimensionSwatchDisplayTypes","productCard","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","colorHexCode","SwatchColorHexCode","SwatchImageUrl","isDefault","isDisabled","dimensionAvailability","_swatchItem$SwatchVal3","some","swatch","getRatingAriaLabel","rating","ratingAriaLabelText","roundedRating","toFixed","format","getReviewAriaLabel","reviewCount","ratingCountAriaLabelText","renderLabel","name","price","reviewCountArialableText","rel","Price","AverageRating","TotalRatings","BiRightArrowAlt","size","renderRightNavigationButton","productCardimageSettings","fallbackImageUrl","image","cropFocalRegion","_data$product","split","renderTextCell","ProductComponentSwatchComponent","onSelectDimension","quickview","selectedDimensions","getValues","DimensionTypeValue","convertDimensionTypeToProductDimensionType","DimensionValue","selectedProductId","renderQuickView","addtocollectionIcon","MoeAddToCollection","ADD_TO_COLLECTION_RESOURCES","renderModuleAttributes","renderView","dataActions","friendlyName","renderResourceIcon","hideRating","moduleTypeName","moduleId","avgRating","totalRatings","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","getInventoryLabel","inventoryAttribute","ProductSearchResultItems","moduleType","allowBackNavigation","quickviewSlot","isPriceMinMaxEnabled","productsDimensionAvailabilities","listView","priceResources","priceRangeSeparator","priceRangeSeparatorInMaori","ProductListViewComponent","freePriceText","priceFreeInMaori","originalPriceText","originalPriceTextInMaori","currentPriceText","currentPriceTextInMaori","ratingAriaLabelInMaori","inventoryLabel","masterProductId","MasterProductId","ProductComponent","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_ref2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","currencyCode","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","bind","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","selectedRefinementCriterion","initialMin","initialMax","String","minValue","maxValue","labels","sliderKeyString","sliderThumbs","state","isChecked","validationErrorMin","validationErrorMax","touchedMin","touchedMax","shouldComponentUpdate","nextProps","nextState","componentDidUpdate","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_ref3","_this$props$selectedR5","_this$props$selectedR6","_ref4","_this$props$selectedR7","_this$props$selectedR8","setState","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onChange","onFocus","onBlur","maxLabel","placeholder","placeholderTextMax","ariaAttributes","Slider","inForm","min","max","step","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","event","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","onToggle","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","setTimeout","current","focus","touched","validationError","validationErrorRange","inputAsNum","get","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","document","getElementById","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props","productCountAriaLabel","singleProductCountAriaLabel","children","attrs","_objectWithoutProperties","_excluded","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","refinerItemTextArray","_getRefinerUrl","tabIndex","_renderSwatch","_this$props$parentPro","_this$props$parentPro2","_productRefinerValue$2","hasColor","hasImage","SwatchComponent","list","isSelectionEnabled","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","parseInt","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","isMobileView","hideCount","RefineSubmenu","localExpand","_onToggleItem","_onToggleSubmenu","isExpanded","isExpandedOnInitialLoad","expanded","_renderExpandCollapseAll","expandCollapseAll","productRefinerHierarchy","setLearningArea","learningAreaName","Collapse","timeout","_renderChildItems","_renderRange","_renderSingleMultiSelect","isMobile","refinerValuesList","listItems","selectedValue","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","SliderWithBars","onUpdateRefiners","prevState","Separator","Title","SearchResultContainer","SearchResultContainer_1","toggleLangStarting","getToggleLang","userPrefLangStarting","getUserPrefLang","user","customerAccountNumber","preferredSearchSiteLanguageStarting","getUserPreferredLanguage","KWR","SEARCH_SITE_LANGUAGE","sortByDropdownOptions","sortByOptionRelevanceDescInMaori","sortByOptionNewScoreInMaori","sortByOptionNameAscInMaori","sortByOptionNameDescInMaori","sortByOptionRatingDescInMaori","_pageType","expandrefinerCount","defaultPageNumber","_updateListPageState","listPageState","_this$props$context$r","_this$props$context$r2","searchTitle","querySorting","_getAllArtifactsData","_getProductsCount","removeOchShowMore","removeResourceShowMore","removeArtifactShowMore","getFriendlyName","NameTranslations","searchRequest","moeSearchProductsAsync","bypassCache","channel","channelCountResponse","tahurangiSearchCount","catch","storeRequest","getMOEOnlineStoresAsync","channelResponse","channelData","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","getDimensionsAvailabilitiesRequest","Promise","resolve","_getProductsDimensionsAvailabilities","all","err","message","_getResourcesShowmoreBtn","preferredLanguageForButton","_addMoreResources","showMoreTextInMaori","showMoreText","_this$props$context$r3","_this$props$context$r4","resourcesSkip","getCollectionProducts","productResults","_this$props$context$a","_productResults$produ","enableAffiliationBasedPricing","isAuthenticated","_getActivePrice","_getOchShowmoreBtn","_addOchMoreResources","_this$props$context$r5","_this$props$context$r6","_this$props$context$a2","_productResults$produ2","_getAllartifactsShowmoreBtn","_addAllartifactsMoreResources","_this$props$context$r7","_this$props$context$r8","currentResources","_this$props$context$a3","_productResults$produ3","firstProduct","_firstProduct$Extensi","_firstProduct$Extensi2","artifactSearchListString","artifactSearchList","ARTIFACTID","_this$props$context$r9","_firstProduct$Extensi3","_firstProduct$Extensi4","productsCount","LongValue","isMatchingLocalSearch","searchLocal","localSearchText","newLocalSearchRecord","RowNumber","RightValueBoundLocalizedString","localSearchIndex","_this$props$data$list","transaction","history","pushState","_this$props$data$list2","_getLocalSearchBar","_this$props$config","onSubmit","localSearchRef","onKeyDown","type","searchTextBoxName","_this$props$data$list3","_this$props$data$list4","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","_this$props$data$list5","_this$props$data$list6","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","ModalBody","SearchResultModal","modalCloseButtonTextInMaori","modalIsOpen","_modalToggleRef","_toggleModal","_getCollectionTitle","preferredSearchSiteLanguage","_collectionTitle","collectionTitle","collectionTitleArray","productCountNumber","productCountText","numberOfProductsInMaori","numberOfProducts","oneProductInMaori","oneProduct","TitleContainer","telemetryPageName","toLowerCase","titlePrefix","searchTextPrefixInMaori","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","tag","categoryHierarchyList","categoryLinkAriaLabelInMaori","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdwonOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabelInMaori","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","dropdownOptions","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getMinistryPagination","totalItems","previousText","flipperPreviousInMaori","nextText","flipperNextInMaori","UncontrolledPagination","paginationAriaLabelInMaori","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getOchPagination","_getExternalPagination","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","activeRefiners","_getexpandRefinerCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","expandAllRefiners","refineChild","_refineItemCommonProps","minValueSliderThumbAriaLabelInMaori","maxValueSliderThumbAriaLabelInMaori","_onUpdateRefiners","_buildRefinerUrl","productCountAriaLabelInMaori","singleProductCountAriaLabelInMaori","_getChoiceSummary","selectedRefiners","clearAllTextInMaori","choiceSummaryLabelInMaori","closeAriaLabelInMaori","choiceFormatInMaori","choiceRangeValueFormatInMaori","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","choiceAriaLabelInMaori","_getProducts","_this$props$data$feat","_this$props$data$prod","breaCrumbType","breadcrumbType","allProducts","quickviewslot","slots","isPriceMinMaxFeatureState","featureState","enableListViewToggle","IsEnabled","clickFiltersTextInMaori","clickFiltersText","_getListViewProducts","_this$props$data$feat2","_this$props$data$prod3","_this$props$data$prod2","_getCuratedCollectionsData","curatedProducts","_product$ExtensionPro5","channelIndex","_product$ExtensionPro6","_product$ExtensionPro7","_product$ExtensionPro8","_product$ExtensionPro9","curatedProduct","productURL","_this$props$context$r10","_getOchProducts","_config$nzcSearchUrl","_config$twkSearchUrl","_config$kohSearchUrl","_config$kwrSearchUrl","searchTitleForUrl","nzcSearchUrl","twkSearchUrl","kohSearchUrl","kwrSearchUrl","channelResourcesData","channelSearchCountInfo","_this$state$tahurangi","_channelData$Id","Id","_this$state$tahurangi2","channelName","resourcesCount","searchUrl","channelSearchCountInfoItem","resultText","ochSearchResultsText","resultTextInMaori","ochSearchResultsTextInMaori","FaArrowRight","notification","_getSortColumnFromSelectedOption","option","mappedConfiguration","_getSortCriteriaColumn","_this$props$data$list7","sortCriteria","queryColumns","activeSortColumn","activeMappedConfig","mappedSearchConfig","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","one","two","three","four","paginationPreviousText","paginationNextText","_renderCollapseExpandAll","_expandCollapseAll","expandAllTextInMaori","expandAllText","collapseAllTextInMaori","collapseAllText","refineExpandState","_viewport","device","Type","_updateViewport","pending","ochSkip","artifactsSkip","placeholderTextMaxInMaori","minLabelInMaori","maxLabelInMaori","rangeNameFormatInMaori","validationErrorNotNumberInMaori","validationErrorNotRangeInMaori","getTelemetryObject","nameTranslations","_nameTranslation","nameTranslation","_this$props$context$a4","addEventListener","reaction","_listPageState$active","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r11","_this$props$context$r12","_this$props$context$r13","_this$props$context$a5","newListPageState","Math","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r14","_this$props$context$r15","refinerInput","getCollectionRefinersAction","componentWillUnmount","removeEventListener","_this$props$context$r16","searchProduct","errorText","toggleLang","userPrefLang","ERROR_OR_NOTIFICATION","HEADER_FOOTER","productsComponent","ochProductsComponent","ListViewProductsComponent","curatedCollectionData","featureComponent","searchResultContainerViewProps","ochProducts","productsListView","localSearchBar","TitleViewProps","disableHierarchy","refineMenu","moduleProps","sortByOptions","ministryPagination","ochPagination","externalPagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","modalTitleInMaori","searchResultModal","errorMessage","FeatureSearchContainer","similarLookProduct","resourceButton","ochResourceButton","allArtifactsButton","expandCollapseAllButtons","_getViewport","innerWidth","xs","w","sm","md","lg","ArtifactsListView","artifacts","IMSCCRemovedArtifacts","artifact","_artifact$FILETYPE","FILETYPE","MEDIANAME","ArtifactResource","_artifact$FILETYPE2","_item$FILETYPE","fileURL","MEDIAURL","MediaName","download","FaFileWord","_item$FILETYPE2","renderImageFile","_item$FILETYPE3","renderExcelFile","_item$FILETYPE4","renderPPTFile","_item$FILETYPE5","FaFilePdf","renderPDFFile","_item$FILETYPE6","FaGoogleDrive","renderGoogleDocFile","_item$FILETYPE7","FaFileVideo","renderAviFile","_item$FILETYPE8","FaFileImage","renderBmpFile","_item$FILETYPE9","FaFileCsv","renderCsvFile","_item$FILETYPE10","_item$FILETYPE11","renderDocFile","_item$FILETYPE12","RiFileGifFill","renderGifFile","_item$FILETYPE13","_item$FILETYPE14","renderHTMLFile","_item$FILETYPE15","_item$FILETYPE16","_item$FILETYPE17","FaFileInvoice","renderJSONFile","_item$FILETYPE18","BsFillFileEarmarkBarGraphFill","renderMhpFile","_item$FILETYPE19","renderCodeFile","_item$FILETYPE20","SiMicrosoftoutlook","renderMsgFile","_item$FILETYPE21","_item$FILETYPE22","_item$FILETYPE23","_item$FILETYPE24","BsFileEarmarkRichtextFill","renderRTFFile","_item$FILETYPE25","BsFileEarmarkPostFill","renderSGMLFile","_item$FILETYPE26","_item$FILETYPE27","BsFileEarmarkFontFill","renderTxtFile","_item$FILETYPE28","FaFileSignature","renderVsdFile","_item$FILETYPE29","_item$FILETYPE30","_item$FILETYPE31","_item$FILETYPE32","_item$FILETYPE33","BsFileEarmarkCodeFill","renderXmlFile","_item$FILETYPE34","FaFileArchive","renderZipFile","_item$FILETYPE35","FaFilePowerpoint","renderGSlides","_item$FILETYPE36","FaLeanpub","renderEbookPreview","_item$FileType","FileType","_item$FileType2","_item$FileType3","renderAudioFile","MediaUrl","_item$FileType4","_item$FileType5","_item$FileType6","renderVideoFile","_item$FileType7","HiDocumentReport","renderPbixFile","_item$FileType8","_item$FileType9","BsFileEarmarkEaselFill","renderUsdzFile","_item$FileType10","FaFileCode","renderXsnFile","FaFile","renderotherFiles","ProductName","INTENDEDUSERROLE","FaFileExcel","FaHtml5","FaFileAudio","ExternalResourcesListView","externalSiteData","showMoreExternalResources","resource","ExternalResource","source_url","dc_type","content_partner","collection_title","description","slice","large_thumbnail_url","FaExternalLinkAlt","_props$data","_props$data2","_props$context$action","_props$data5","_props$data6","_props$data7","searchString","searchContent","setSearchContent","ministryState","setMinistryState","setExternalSiteData","externalSiteDataAttributes","setExternalSiteDataAttributes","artifactsDataAttributes","toggleMinistryState","isSearchPage","useEffect","ochSearch","getExternalSiteResources","extResourceData","_extResourceData","getDigitalNZDetailsAsync","table","results","page","per_page","result_count","_extResourceData2","_extResourceData3","createModalBody","isRecoSearchPage","renderSort","renderRefiner","Node","filterTextInMaori","filterText","submenu","renderTitle","showMoreArtifacts","listViewBtnText","listViewButtonTextInMaori","listViewButtonText","tileViewBtnText","tileViewButtonTextInMaori","tileViewButtonText","_props$data3","_props$data4","Module","kwr","createSearchResultModal","modalProps","resourcesTabTextInMaori","resourcesTabText","ochTabTextInMaori","ochTabText","artifactsTabTextInMaori","artifactsTabText","curatedCollectionTabTextInMaori","curatedCollectionTabText","externalSitesTabTextInMaori","externalSitesTabText","ArtifactsDataAttributes","binding","modules","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","pdp","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}