{"version":3,"file":"coopse.script.8707.b4300366.chunk.js","mappings":"iIAAIA,E,WACJ,SAASC,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAuBnR,IArBgBO,IACd,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,aACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMf,IAAOA,EAAkB,gBAAoB,IAAK,CAClEsB,GAAI,sBACU,gBAAoB,OAAQ,CAC1CA,GAAI,QACJC,EAAG,u2DACA,C,4BCtBHvB,E,WACJ,SAASC,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAuBnR,IArBwBO,IACtB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMf,IAAOA,EAAkB,gBAAoB,IAAK,CAClEsB,GAAI,mCACU,gBAAoB,OAAQ,CAC1CA,GAAI,SACJC,EAAG,sNACA,C,4BCtBHC,E,WACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAoBnR,IAlBiBO,IACf,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,gBACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3ED,EAAG,2SACD,C,2BCnBFC,E,WACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAsBnR,IApBqBO,IACnB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EC,SAAU,UACVC,SAAU,UACVH,EAAG,ufACD,C,4BCrBFC,E,WACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAsBnR,IApBgBO,IACd,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EC,SAAU,UACVC,SAAU,UACVH,EAAG,srBACD,C,4BCrBFC,E,WACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAoBnR,IAlBiBO,IACf,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3ED,EAAG,udACD,C,0BCnBFC,E,WACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAsBnR,IApBgBO,IACd,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EC,SAAU,UACVC,SAAU,UACVH,EAAG,ysBACD,C,4BCrBFC,E,WACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAsBnR,IApBkBO,IAChB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EC,SAAU,UACVC,SAAU,UACVH,EAAG,wiBACD,C,sBCpBN,KAAgB,OAAS,WAAW,iBAAiB,WAAW,iBAAiB,WAAW,eAAe,WAAW,iBAAiB,WAAW,cAAc,WAAW,gBAAgB,WAAW,iBAAiB,WAAW,gBAAgB,W,qJCKlP,MAAMI,GAAkB,IAAAC,OAAK,IAAM,kJAcnC,MAZiB,KACb,MAAM,OAAEC,EAAM,MAAEC,EAAK,WAAEC,IAAe,EAAAC,EAAA,MAEtC,OACI,SAAC,KAAK,CAACH,OAAQA,EAAQC,MAAOA,EAAOC,WAAYA,EAAYE,kBAAkB,aAAY,UACvF,SAAC,EAAAC,SAAQ,CAACC,UAAU,SAACC,EAAA,GAAa,CAACC,WAAS,IAAG,UAC3C,SAACV,EAAe,OAG3B,E,qDCVL,MAKMW,EAAiC,G,4PCXvC,GAAgB,eAAiB,WAAW,cAAgB,WAAW,UAAY,WAAW,SAAW,WAAW,aAAe,WAAW,YAAc,WAAW,SAAW,WAAW,cAAgB,WAAW,gBAAkB,WAAW,SAAW,WAAW,uBAAyB,WAAW,kBAAoB,YCoOnU,EAnM0B,K,UACtB,MAAOC,EAAWC,GAAgB,YAAe,IAE3C,OAAEX,EAAM,MAAEC,EAAK,KAAEW,IAAS,EAAAC,EAAA,GAAS,KAAgBC,YAEnDC,GAAa,UACbC,GAAmB,UACnBC,GAAW,WAEX,iBAAEC,GAAqBC,EAAA,EAAUC,aAAaC,cAC9C,oBAAEC,GAAwBH,EAAA,EAAUC,aAEpCG,EAAmB,IAAQC,mBAAmB,MAC9CC,EAAwB,IAAQD,mBAAmB,MACnDE,GACDH,IAAqB,QAA0CE,IAChEV,EAEEY,EAAW,IAAQH,mBAAmB,OAEpCI,KAAMC,IAAoB,EAAAC,EAAA,GAAwBd,IAClDY,KAAMG,EAAsBvB,UAAWwB,IAA2B,EAAAC,EAAA,GACzD,WAAbN,GAAyBZ,GAGvBmB,EAAyB,IAAYA,uBAAuBL,GAE5DM,GAAuB,EAAAC,EAAA,KAE7B,aAAgB,KACZ,GAAID,EAAqBE,UAAW,CAEhC,GAAInB,GAAoBW,IAAoBK,EAExC,YADAI,OAAOC,SAASC,KAAOlB,GAI3BrB,GACJ,IACD,CACCA,EACAqB,EACAJ,EACAW,EACAK,EACAC,EAAqBE,YAGzB,MAAQT,KAAMa,IAAkB,EAAAC,EAAA,MAEhC,IAAAC,YAAU,KACN,GAAIjB,IAAsBM,EAAwB,CAC9C,MAAMY,EAAiB,MAGJb,aAAoB,EAApBA,EAAsBc,MACpCC,GAASF,EAAeG,SAASD,EAAKrD,KAAOqD,EAAKE,cAInDC,EAAA,EAAYC,oBAAoBC,MAChCvC,IAER,IACD,CAACmB,EAAsBC,EAAwBpB,EAAMc,IAExD,MAkBM0B,EAAU,KACZ,IAA2BnD,MAAMoD,mCACjCpD,GAAO,EAGX,OACI,UAAC,IAAK,CACFD,OAAQA,EACRC,MAAOmD,EACPhD,kBAAmB,IACf,EAAOkD,eACPrC,EAAW,EAAOsC,uBAAyB,IAC9C,WAED,gBAAKC,UAAW,EAAOC,cAAa,UAChC,SAACC,EAAA,EAAc,CACXC,MAAM,aACNC,QAASR,EACTS,KAAM,GACNC,KAAM,IACNC,MAAM,QACNP,UAAW,EAAOQ,iBAG1B,iBAAKR,UAAW,EAAOS,UAAS,WAC5B,SAACC,EAAA,EAAW,CAACV,UAAW,EAAOW,SAAQ,yDAGvC,iBAAKX,UAAW,EAAOY,aAAY,WAC/B,SAACC,EAAA,EAAK,CAACC,IAAI,+BAA+BhF,OAAO,MAAMD,MAAM,MAAMkF,IAAI,MACvE,iBAAKf,UAAW,EAAOgB,YAAW,WAC9B,SAACC,EAAA,EAAQ,CACLC,0BAA0B,MAC1BlB,UAAW,EAAOiB,SAAQ,aACdhC,aAAa,EAAbA,EAAekC,oBAC3BlF,GAAG,SACHmF,gBAtDMC,IAC1BlE,GAAckE,EAAQ,EAsDFd,MACsC,QAAlC,EAAAtB,aAAa,EAAbA,EAAekC,2BAAmB,QAClC,4GAGPlC,IACG,iBAAKe,UAAW,EAAOsB,cAAa,WAChC,mIAIA,uBACKrC,EAAcsC,iBAAiBC,MAC5B,4CACc,KACV,cACIxC,KAAMC,EAAcsC,iBAAiBC,IACrCC,OAAO,SACPC,IAAI,aAAY,gCAGf,IAAG,4DAQhC,iBAAK1B,UAAW,EAAO2B,gBAAe,WAClC,SAACC,EAAA,EAAM,CACHzB,MAAM,UACNC,QApFD,KACnB,MAAMyB,EAAsB,KAGxBnE,GAAoBgB,GACpBmD,EAAoBC,KAAK,MAG7BnD,EAAqBoD,OAAOF,EAAoB,EA6E5BG,WAAS,EACTC,SAAU/E,EAAS,sBAIvB,SAAC0E,EAAA,EAAM,CAACzB,MAAM,iBAAiBC,QA/E5B,KACnB,IAA2B8B,KAAKrC,mCAChCpD,GAAO,EA6EiEuF,WAAS,4BAIxC,QAA5B,EAAA/C,aAAa,EAAbA,EAAekD,qBAAa,eAAEX,OACa,QAAxC,EAAAvC,aAAa,EAAbA,EAAemD,iCAAyB,eAAEZ,OACtC,gBAAKxB,UAAW,EAAOqC,SAAQ,UAC3B,oCACa,KACT,cACIrD,KAAMC,EAAckD,cAAcX,IAClCC,OAAO,SACPC,IAAI,aAAY,aACL,gBAAe,kBAGzB,IAAG,MACJ,KACJ,cACI1C,KAAMC,EAAcmD,0BAA0BZ,IAC9CC,OAAO,SACPC,IAAI,aAAY,aACL,iCAAgC,mCAG3C,iBAQnC,E,iCCzBL,EAhL+B,K,UAC3B,MAAOxE,EAAWC,GAAgB,YAAe,IAE3C,OAAEX,EAAM,MAAEC,EAAK,KAAEW,IAAS,EAAAC,EAAA,GAAS,KAAgBC,YAEnDC,GAAa,UACbE,GAAW,UAEXM,EAAmB,IAAQC,mBAAmB,MAC9CC,EAAwB,IAAQD,mBAAmB,MACnDE,GACDH,IAAqB,QAA0CE,IAChEV,EAEEY,EAAW,IAAQH,mBAAmB,OAEpCI,KAAMkE,EAAoBtF,UAAWwB,IACzC,EAAA+D,EAAA,IAA0B,EAAoB,WAAbpE,GAAyBZ,GAExDoB,GAAuB,EAAA6D,EAAA,GAAY,CACrCC,WAAaC,GACFC,EAAA,EAA6BC,UAChCC,MAAMC,QAAQJ,GAAWA,EAAU,CAACA,IACpC,GAGRK,UAAW,KACP,IAA2BC,QAAQnD,mCACnCpD,GAAO,KAIP2B,KAAMa,IAAkB,EAAAC,EAAA,MAGhC,IAAAC,YAAU,K,MACN,GAAIjB,IAAsBM,EAAwB,CAC9C,MAAMY,EAAiB,MAGwB,QAA5B,EAAAkD,aAAkB,EAAlBA,EAAoBW,gBAAQ,eAAE5D,MAAMC,GACnDF,EAAeG,SAASD,EAAK4D,WAI7BzD,EAAA,EAAYC,oBAAoBC,MAChCvC,IAER,IACD,CAACkF,EAAoB9D,EAAwBpB,EAAMc,IAEtD,MAcM0B,EAAU,KACZ,IAA2BnD,MAAMoD,mCACjCpD,GAAO,EAGX,OACI,UAAC,IAAK,CACFD,OAAQA,EACRC,MAAOmD,EACPhD,kBAAmB,IACf,EAAOkD,eACPrC,EAAW,EAAOsC,uBAAyB,IAC9C,WAED,gBAAKC,UAAW,EAAOC,cAAa,UAChC,SAACC,EAAA,EAAc,CACXC,MAAM,aACNC,QAASR,EACTS,KAAM,GACNC,KAAM,IACNC,MAAM,QACNP,UAAW,EAAOQ,iBAG1B,iBAAKR,UAAW,EAAOS,UAAS,WAC5B,SAACC,EAAA,EAAW,CAACV,UAAW,EAAOW,SAAQ,yDAGvC,iBAAKX,UAAW,EAAOY,aAAY,WAC/B,SAACC,EAAA,EAAK,CAACC,IAAI,+BAA+BhF,OAAO,MAAMD,MAAM,MAAMkF,IAAI,MACvE,iBAAKf,UAAW,EAAOgB,YAAW,WAC9B,SAACC,EAAA,EAAQ,CACLC,0BAA0B,MAC1BlB,UAAW,EAAOiB,SAAQ,aACdhC,aAAa,EAAbA,EAAekC,oBAC3BlF,GAAG,SACHmF,gBAlDMC,IAC1BlE,GAAckE,EAAQ,EAkDFd,MACsC,QAAlC,EAAAtB,aAAa,EAAbA,EAAekC,2BAAmB,QAClC,4GAGPlC,IACG,iBAAKe,UAAW,EAAOsB,cAAa,WAChC,mIAIA,uBACKrC,EAAcsC,iBAAiBC,MAC5B,4CACc,KACV,cACIxC,KAAMC,EAAcsC,iBAAiBC,IACrCC,OAAO,SACPC,IAAI,aAAY,gCAGf,IAAG,4DAQhC,iBAAK1B,UAAW,EAAO2B,gBAAe,WAClC,SAACC,EAAA,EAAM,CACHzB,MAAM,UACNC,QAhFD,KACnB,MAAMhB,EAAiB,KAGvBT,EAAqBoD,OAAO3C,EAAe,EA6EvB4C,WAAS,EACTC,SAAU/E,EAAS,sBAIvB,SAAC0E,EAAA,EAAM,CAACzB,MAAM,iBAAiBC,QA/E5B,KACnB,IAA2B8B,KAAKrC,mCAChCpD,GAAO,EA6EiEuF,WAAS,4BAIxC,QAA5B,EAAA/C,aAAa,EAAbA,EAAekD,qBAAa,eAAEX,OACa,QAAxC,EAAAvC,aAAa,EAAbA,EAAemD,iCAAyB,eAAEZ,OACtC,gBAAKxB,UAAW,EAAOqC,SAAQ,UAC3B,oCACa,KACT,cACIrD,KAAMC,EAAckD,cAAcX,IAClCC,OAAO,SACPC,IAAI,aAAY,aACL,gBAAe,kBAGzB,IAAG,MACJ,KACJ,cACI1C,KAAMC,EAAcmD,0BAA0BZ,IAC9CC,OAAO,SACPC,IAAI,aAAY,aACL,iCAAgC,mCAG3C,iBAQnC,ECpLL,EAdgC,KAC5B,MAAM,oBAAEyB,EAAmB,kBAAEC,GAAsBzF,EAAA,EAAUC,aAAaC,aAE1E,OAAIuF,EACO,KAGPD,GACO,SAAC,EAAO,KAGZ,SAAC,EAAY,GAAG,E,iCCwC3B,ICvDIhH,EDuDJ,EATuBkH,IAjCI,IAGRC,EAAGC,EAAGrH,EACTsH,EA8BP1E,OAAO2E,UAjCR,QAAuB,KAAmBC,cAE/BJ,EAwBRxE,OAxBWyE,EAwBHzE,OAAO2E,QAxBDvH,EAwBUyH,SAvBnBH,EAAI,WAEJA,EAAEI,EAAE1I,UACR,EAEAsI,EAAEK,EAAI,GAENL,EAAEI,EAAI,SAAUE,GAEZN,EAAEK,EAAE/B,KAAKgC,EACb,EASiB,mBAANP,IACPD,EAAEG,QAAUD,EATN,W,MACN,MAAMO,EAAI7H,EAAE8H,cAAc,UAC1BD,EAAEE,KAAO,kBACTF,EAAEG,OAAQ,EACVH,EAAEjD,IAAM,wCACR,MAAMqD,EAAIjI,EAAEkI,qBAAqB,UAAU,GAC/B,QAAZ,EAAAD,EAAEE,kBAAU,SAAEC,aAAaP,EAAGI,EAClC,CAGII,IAGRzF,OAAO2E,QAAQ,QACf3E,OAAO0F,eAAeC,QAAQ,oBAAqB,SAQvD3F,OAAO2E,QAAQ,iBAAiB,SAAUiB,GACtCrB,EAAGqB,EACP,GAAE,EEnBN,GA5B6B,KACzB,MAAOC,EAAMC,IAAW,IAAAC,WAAS,IAC1BC,EAAaC,IAAkB,IAAAF,UAAS,IAQ/C,OACI,iCACI,SAACjD,EAAA,EAAM,CAACqC,KAAK,SAAS7D,QARd,KACZ4E,GAA4BN,IACxBK,EAAeL,GACfE,GAAQ,EAAK,GACf,EAI0CzE,MAAM,QAAO,uCAIrD,SAAC8E,EAAA,EAAW,CACRN,KAAMA,EACNO,QAAQ,8BACRC,QAAS,uBAAuBL,IAChCrI,MAAO,KACHmI,GAAQ,EAAM,MAI7B,E,YD7BL,SAAShK,KAAa,OAAOA,GAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,GAASY,MAAM,KAAMN,UAAY,CAsBnR,IEvBIP,GFuBJ,GApBkBc,IAChB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,GAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EC,SAAU,UACVC,SAAU,UACVH,EAAG,wpCACD,EGHN,GAdsB,KAQd,SAAC0F,EAAA,EAAM,CAACxB,QAPM,KACVtB,QAAUA,OAAOsG,OACjBtG,OAAOsG,MAAM,aACjB,EAI4BC,WAAW,SAACC,GAAA,EAAI,CAAChF,KAAM,KAAgBH,MAAM,QAAO,uCCXxF,GAAyC,WAAzC,GAA6E,WAA7E,GAA0J,WAA1J,GAAyQ,WAAzQ,GAAyU,WAAzU,GAAyhB,WAAzhB,GAAgpB,W,oCCsBhpB,GArBqB,EAAGoF,a,MACpB,OACI,gBAAKvF,UDH0F,WCG5D,UAC/B,gBAAIA,UAAW,GAAiB,WAC5B,eAAIA,UDL8G,WCK/E,UAC/B,yBACI,cAAGhB,KAAuB,QAAjB,EAAAuG,EAAOC,kBAAU,eAAEhE,IAAG,SAAG+D,EAAOE,aAGhDF,EAAOG,MACHC,QAAO,CAACC,EAAOC,IAAUA,EAAQ,IACjCC,KAAKC,IACF,eAAI/F,UAAW,GAAiB,UAC5B,cAAGhB,KAAM+G,EAAKvE,IAAG,SAAGuE,EAAK7C,QADU6C,EAAKC,iBAM/D,ECDL,GAduBpK,IACnB,MAAM,WAAEqK,IAAe,EAAAC,GAAA,GAAsB,MAAsBC,kBAEnE,OACI,SAACC,GAAA,EAAQ,CACLC,YAAY,uDACZJ,WAAYA,EACZK,MAAO1K,EAAM2K,QACbC,WAAajB,IAAW,SAAC,GAAY,CAACA,OAAQA,IAC9CkB,cAAe,CAAClB,EAAQM,KAAS,MAAC,SAAoB,QAAjB,EAAAN,EAAOC,kBAAU,eAAEQ,aAAaH,GAAO,GAEnF,E,YC8BL,GAzCuBjK,IAEf,iCACI,gBAAKoE,UHPiK,WGOrI,UAC7B,cAAGhB,KAAK,IAAG,aAAY,kBAAiB,UACpC,SAACsG,GAAA,EAAI,CACDhF,KAAM,KACNxE,OAAQ,GACRkE,UHZuL,WGYtJ,wBAM7C,eAAGA,UHlB2N,WGkB5L,WAC9B,2CACiB,KACb,cACIA,UAAW,GACXhB,KAAK,mJACLyC,OAAO,SACPC,IAAI,sBAAqB,0BAGzB,8BAGJ,iBAAMgF,MAAO,CAAEC,QAAS,gBAAgB,oCAE3C/K,EAAMgL,YAAYd,KAAKe,IACpB,2BACI,cAAG7G,UAAW,GAA0BhB,KAAM6H,EAAWrF,IAAG,SACvDqF,EAAW3D,iB,YCmCxC,GA5DqBtH,IACjB,MAAOkL,EAAwBC,IAA6B,IAAAlC,WAAS,GAE/DmC,GAAsB,EAAAC,GAAA,GACxB,wHACAH,GAaJ,OAVA,IAAA3H,YAAU,KACN,MAAM+H,EAAe,KACjBH,GAA0B,QAAuB,KAAmBI,WAAW,EAKnF,OAFA,EAAAC,EAAA,IAAqB,UAAWF,GAEzB,KAAM,EAAAE,EAAA,IAAwB,UAAWF,EAAa,GAC9D,KAGC,iBAAKlH,UAAU,eAAc,WACzB,eAAIA,UAAW,GAAS,gCACxB,iBAAKA,UJhCsR,WIgCpP,UAClCpE,EAAMyL,MAAMvB,KAAKwB,IAEd,gBACItH,UAAW,GAA2B,SAGrCsH,EAAK9F,KACF,cAAGxC,KAAMsI,EAAK9F,IAAKC,OAAO,SAASC,IAAI,aAAY,UAC/C,gBACI5F,OAAQwL,EAAKC,YACbxG,IAAKuG,EAAKE,aACV1G,IAAKwG,EAAKG,SACVC,QAAQ,YAIhB,gBACI5L,OAAQwL,EAAKC,YACbxG,IAAKuG,EAAKE,aACV1G,IAAKwG,EAAKG,SACVC,QAAQ,UAhBX,GAAGJ,EAAK9F,OAAO8F,EAAKE,gBAAgBF,EAAKC,eAAeD,EAAKG,eAsB1E,gBACIzH,UAAW,IACP,GACA,sBAGR,gBAAK0G,MAAO,CAAEC,QAAS,QAAUgB,IAAKX,SAGjD,E,YC5BL,GAnCsBpL,IACdkD,OAAO8I,qBACP,SAAC,GAAa,CAACrB,QAAS3K,EAAM2K,WAI9B,SAACsB,GAAAC,EAAUC,KAAI,CAAC9D,KAAK,SAAS+D,aAAW,EAAChI,ULXogB,WKWne,SACtEpE,EAAM2K,QAAQT,KAAI,CAACP,EAAQM,K,QAAU,OAClC,UAACgC,GAAAC,EAAUG,KAAI,CAEXjI,UAAW,ILfwjB,WAAqB,YKgBxlBkI,OAAwB,QAAjB,EAAA3C,EAAOC,kBAAU,eAAEQ,UAAUmC,aAActC,EAAMsC,WAAU,WAElE,SAACN,GAAAC,EAAUM,OAAM,CAACC,SAAO,YACrB,eAAIrI,UAAW,GAA6B,UACxC,SAAC6H,GAAAC,EAAUQ,QAAO,CAACtI,UAAW,GAA6B,SACtDuF,EAAOE,cAIpB,SAACoC,GAAAC,EAAUS,QAAO,CAACvI,ULzB6oB,WKyBrmB,UACvD,eAAIA,UAAW,GAAiB,SAC3BuF,EAAOG,MAAMI,KAAKC,IACf,eAAI/F,UAAW,GAAiB,UAC5B,cAAGhB,KAAM+G,EAAKvE,IAAG,SAAGuE,EAAK7C,QADU6C,EAAKC,mBAdlC,QAAjB,EAAAT,EAAOC,kBAAU,eAAEQ,UAqB/B,O,wBPnCb,SAAS,KAAa,OAAO,GAAWnL,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAG,GAASQ,MAAM,KAAMN,UAAY,CAuBnR,IQxBI,GRwBJ,GArByBO,IACvB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMf,KAAOA,GAAkB,gBAAoB,IAAK,CAClEsB,GAAI,oCACU,gBAAoB,OAAQ,CAC1CA,GAAI,SACJC,EAAG,m9FACA,EQrBP,SAAS,KAAa,OAAO,GAAWrB,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAG,GAASQ,MAAM,KAAMN,UAAY,CAyBnR,IC1BI,GD0BJ,GAvBuBO,IACrB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAM,KAAO,GAAkB,gBAAoB,IAAK,CAClEO,GAAI,kCACU,gBAAoB,OAAQ,CAC1CA,GAAI,QACJG,SAAU,UACVC,SAAU,UACVH,EAAG,oQACA,ECvBP,SAAS,KAAa,OAAO,GAAWrB,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAG,GAASQ,MAAM,KAAMN,UAAY,CA4BnR,OA1BwBO,IACtB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAM,KAAO,GAAkB,gBAAoB,IAAK,CAClEO,GAAI,mCACU,gBAAoB,IAAK,CACvCA,GAAI,SACU,gBAAoB,OAAQ,CAC1CC,EAAG,gDACY,gBAAoB,OAAQ,CAC3CA,EAAG,wMACY,gBAAoB,OAAQ,CAC3CA,EAAG,6KACC,ECuCR,GAvDqB,KACjB,MAAMsM,EAAc,CAChB,CACIhH,IAAK,wCACLlB,KAAM,KACNC,MAAO,yBAEX,CACIiB,IAAK,4BACLlB,KAAM,KACNC,MAAO,iBACP1E,MAAO,GACPC,OAAQ,IAEZ,CACI0F,IAAK,yCACLlB,KAAM,GACNC,MAAO,0BAEX,CACIiB,IAAK,2CACLlB,KAAM,GACNC,MAAO,wBAEX,CACIiB,IAAK,+CACLlB,KAAM,GACNC,MAAO,0BAIf,OACI,gBAAKP,UR1Cwb,WQ0C1Z,SAC9BwI,EAAY1C,KAAKC,IACd,gBAAsB/F,UR5C6b,WQ4C3Z,UACpD,cACIhB,KAAM+G,EAAKvE,IACXC,OAAO,SACPC,IAAI,sBAAqB,aACbqE,EAAKxF,MAAK,UAEtB,SAAC+E,GAAA,EAAI,CACDhF,KAAMyF,EAAKzF,KACXzE,MAAOkK,EAAKlK,OAAS,GACrBC,OAAQiK,EAAKjK,QAAU,GACvBkE,URvDqe,WQuDnc,sBAXpC+F,EAAKxF,UAkB1B,ECSL,GAvDoB3E,IAChB,MAAM,OAAE6M,GAAW7M,EAEb6B,GAAW,UAEXiL,GAAe,SACfC,GAAmB,QAAgBC,GAAUA,EAAMC,GAAGC,OAAOH,mBAGnE,IAAKD,GAAgBC,EACjB,OAAO,KAGX,MAAMI,EAAeN,EAAOlC,QAAQZ,QAC/BJ,IAAU,MAAC,QAAEA,EAAOE,WAA6B,QAAjB,EAAAF,EAAOC,kBAAU,eAAEhE,MAAO+D,EAAOG,MAAMvK,OAAS,CAAC,IAGtF,OACI,mBAAQ6E,UAAW,ITlCF,WSkC4B,aAAY,UACrD,iBAAKA,UAAW,IAAW,kBAAmBvC,GAAY,2BAA0B,WAChF,iBAAKuC,UAAW,GAA6B,UACxCvC,GACG,SAAC,GAAY,CAAC8I,QAASwC,KAEvB,SAAC,GAAa,CAACxC,QAASwC,KAE5B,gBAAK/I,UAAU,qDAAoD,UAC/D,SAAC,GAAa,OAElB,gBAAKA,UAAU,0BAAyB,UACpC,gBAAKA,UAAU,6BAA4B,UACvC,SAAC,GAAoB,YAKjC,gBAAKA,UAAW,GAA6B,UACzC,iBAAKA,UAAU,0FAAyF,WACpG,SAAC,GAAW,CAACqH,MAAOoB,EAAOpB,QAC1BzL,EAAMoN,eAGf,iBAAKhJ,UAAU,qBAAoB,WAC/B,gBAAKA,UAAU,0BAAyB,UACpC,SAAC,GAAa,CAAC4G,YAAa6B,EAAO7B,iBAEvC,gBAAK5G,UAAU,0BAAyB,UACpC,SAAC,GAAY,aAKhC,ECXL,GArDIpE,I,MAQA,OACI,iBAAKoE,UAAU,gCAA+B,WAC1C,gBAAKA,UAAU,eAAc,UACzB,eAAIA,UAAW,GAAS,qCAE5B,iBAAKA,UVjBuV,WUiBpT,WACpC,gBAAKA,UAAW,IVlB4V,WUkBlU,eAAc,UACpD,iBAAKA,UVnBuX,WUmB/V,WACzB,gBACIc,IAA6B,QAAxB,EAAAlF,EAAMqN,0BAAkB,eAAEzH,IAC/BT,IAAKnF,EAAMsN,0BACXrN,MAAM,KACNC,OAAO,QAEX,mBACA,yEAGR,iBAAKkE,UV9BsZ,WU8BvX,WAChC,0BACI,cAAGhB,KAAMpD,EAAMuN,kBAAiB,UAC5B,gBACIrI,IAAI,0CACJhF,OAAO,KACPD,MAAM,MACNkF,IAAI,2BAIhB,0BACI,cAAG/B,KAAMpD,EAAMwN,sBAAqB,UAChC,gBACItI,IAAI,4CACJhF,OAAO,KACPD,MAAM,MACNkF,IAAI,yCAO/B,EC1BL,GAvBgBnF,IACZ,MAAM,OAAE6M,GAAW7M,EAInB,OAF+B+B,EAAA,EAAU0L,iBAAiBC,uBAG/C,MAIP,SAAC,GAAU,CAACb,OAAQ7M,EAAM6M,OAAM,SAC3BA,EAAOc,wBACJ,SAAC,GAAgB,CACbH,sBAAuBX,EAAOW,sBAC9BD,kBAAmBV,EAAOU,kBAC1BF,mBAAoBR,EAAOQ,mBAC3BC,0BAA2BT,EAAOS,6BAIjD,E,2GCZL,MAyDMM,GAAwB,KAC1B,MAAOhN,EAAQiN,IAAa,IAAA5E,WAAS,GACrC,OACI,iCACI,SAAC6E,GAAA,EAAQ,CACLrJ,KAAM,GACNsJ,YACI,SAACC,GAAA,EAAU,CACPzJ,MAAM,WACNE,KAAM,GACND,QAAS,IAAMqJ,GAAWI,IAAUA,IAAK,mBAKjDnD,MAAO,CACHoD,aAAc,IACjB,gCAIL,SAAC7E,EAAA,EAAW,CACRN,KAAMnI,EACN0I,QAAQ,4BACRC,SAAS,SAAC4E,GAAW,IACrBtN,MAAO,IAAMgN,GAAU,OAGlC,EAGCM,GAAc,KAChB,MAAM,aAAEC,EAAY,QAAEC,EAAO,UAAEC,IAAc,SAAQ,CACjDC,KAAM,WACNC,eAAgB,WAChBC,cAAe,CACXC,WAAY,MAYdC,GAAsB,EAAA/H,EAAA,GAAY,CACpCC,WAAmB+H,IAAqE,2CACpF,gBAAgBA,EAAO,IAC3BzH,UAAW,KACPjE,OAAOC,SAAS0L,QAAQ,IAIhC,OACI,4BACI,4GACA,wBACI,8DAEJ,kBACIzK,UAAU,2CACV0K,SAAUV,GAzBL,KACb,MAAMW,EAAaT,KACb,WAAEI,GAAeK,EACjBC,EAAU,IAAQC,cAAcP,GACtCC,EAAoBxI,OAAO,CACvB+I,kBAAmBR,EACnBS,mBAAoBH,EAAU,QAAU,MAC1C,IAkBsC,WAEhC,SAAC,MAAU,CACPI,OAAQ,EAAGC,QAAOC,iB,MAAiB,OAC/B,SAACC,GAAA,EAAS,CACN5K,MAAM,oBACN6K,YAAU,EACVC,mBAAmB,OACnBnD,MAAO+C,EAAM/C,MACbhF,KAAM+H,EAAM/H,KACZoI,SAAUL,EAAMK,SAChBC,OAAQN,EAAMM,OACd5D,IAAKsD,EAAMtD,IACX6D,eAAgC,QAAhB,EAAAN,EAAWO,aAAK,eAAEtG,QAClCuG,YAAaR,EAAWO,OAE/B,EACDvI,KAAK,aACLyI,MAAO,CACHC,UAAU,GAEd3B,QAASA,IAEZM,EAAoB1L,YACjB,6CAAqB0L,EAAoBnM,KAAKyN,SAGjDtB,EAAoBuB,UAAW,mEAChC,SAAClK,EAAA,EAAM,CACHqC,KAAK,SACLhC,SAAUsI,EAAoB1L,WAAa0L,EAAoBwB,UAAS,2BAMvF,EAGCC,GAAapQ,IACf,MAAOqQ,EAAMC,IAAW,IAAArH,UAAS,IAAIsH,OAC/B,MAAEC,EAAK,QAAEC,EAAO,QAAEC,IAAY,EAAAC,GAAA,GAAmB,CACnDC,MAAOP,EACPQ,IAAK7Q,EAAM6Q,OAEf,IAAAtN,YAAU,KACN,MAAMuN,EAAWC,aAAY,KACzBT,EAAQ,IAAIC,KAAO,GACpB,KAEH,MAAO,KACHS,cAAcF,EAAS,CAC1B,GACF,IACH,MAAMG,EAAU,CAACC,EAAaC,IAAmBC,OAAOF,GAAKG,SAASF,EAAQ,KAC9E,OACI,0BAAO,GAAGF,EAAQT,GAAS,EAAG,MAAMS,EAAQR,GAAW,EAAG,MAAMQ,EAC5DP,GAAW,EACX,MAEP,EAGCY,GAA2BtR,KAC7B,IAAAuD,YAAU,KACN,MAAMgO,EAAUC,WAAWxR,EAAMyR,QAASC,OAAO1R,EAAM2R,SAAWpB,KAAKqB,OACvE,MAAO,KACHC,aAAaN,EAAQ,CACxB,GAEF,CAACvR,EAAM2R,UAEH,MAGX,OApM4B,K,MACxB,MAAO/Q,EAAQiN,IAAa,IAAA5E,WAAS,GAC/BwI,EAAU,KAAY,iDAClB,WACNvO,OAAOC,SAAS0L,QACpB,IACA,GAAI9M,EAAA,EAAU0L,iBAAiBqE,iBAC3B,OAAO,SAAClE,GAAqB,IAEjC,IAAK7L,EAAA,EAAU0L,iBAAiBsE,gBAC5B,OAAO,KAEX,MAAMC,GAAW,WACjB,KAAKA,aAAQ,EAARA,EAAUC,eACX,OAAO,KAGX,MAAMC,GAAa,EAAAC,GAAA,GAAW,IAAI5B,KAAKyB,EAASL,UAAW,IAC3D,OACI,iCACI,SAAC7D,GAAA,EAAQ,CACLrJ,KAAM,GACNsJ,YACI,SAACC,GAAA,EAAU,CACPzJ,MAAM,WACNE,KAAM,GACND,QAAS,IAAMqJ,GAAWI,IAAUA,IAAK,kBAKjDnD,MAAO,CACHoD,aAAc,IACjB,SAEkC,QAAlC,EAAAnM,EAAA,EAAU0L,iBAAiB2E,eAAO,eAAEnC,SAEzC,SAAC5G,EAAA,EAAW,CACRN,KAAMnI,EACN0I,QAAQ,+BACRC,SACI,iBAAKnF,UAAU,eAAc,2CAEzB,kBAAM,IAAErC,EAAA,EAAU0L,iBAAiB4E,QACnC,iBAAKjO,UAAU,gEAA+D,WAC1E,SAAC4B,EAAA,EAAM,CAACxB,QAASiN,EAAO,sBACxB,SAACrB,GAAS,CAACS,IAAKqB,UAI5BrR,MAAO,IAAMgN,GAAU,MAE3B,SAACyD,GAAuB,CAACK,QAASO,EAAYT,QAASA,MAE9D,E,wBCTL,GApCsEzR,KAClE,EAAAsS,EAAA,MACA,WACA,UvBZsC,EAACC,GAAgB,KACvD,MAAMpP,GAAW,WAEjB,IAAAI,YAAU,KAV4B,IAACiP,EAW/BD,IAASlR,EAAqBsC,SAASR,EAASqP,YAXjBA,EAYGrP,EAASqP,SAXnDC,EAAA,EAAYC,cAAc,CAAEC,IAAKH,IACjCI,QAAQC,WAAW,wBAAwB,QAAmBL,IAWtDnR,EAAqB6E,KAAK/C,EAASqP,UACvC,GACD,CAACD,EAAMpP,EAASqP,UAAU,EuBK7BM,GAEA,MAAMjG,EAAS,WACX,IACIkG,gBACIhR,EAAA,EAAUC,aAAa6K,SAE/B,IAGJ,OACI,iCACI,SAACmG,EAAA,EAAM,CAACC,gBAAgB,2BAA0B,UAC9C,SAACC,GAAA,GAAc,CAAC7S,GAAG,mBAEvB,SAAC2S,EAAA,EAAM,CAACC,gBAAgB,qBAAoB,UACxC,SAACC,GAAA,GAAQ,CAAC9P,KAAK,eAAc,gCAGjC,SAAC+P,GAAA,EAAkB,IAClBnT,EAAMoN,UACP,SAAC,EAAa,KACd,SAACgG,EAAA,EAAY,WACT,SAAC,GAAmB,OAExB,SAAC,EAAQ,KAET,SAACC,EAAA,EAAgB,CAACC,QAAQ,SAASlE,OAAQ,KAAM,SAAC,GAAM,CAACvC,OAAQA,QAExE,C,uGChDL,EANgC,KAC5B,MAAMd,ECEmC,MACzC,MAAMwH,GAAsB,IAAAC,SAAgB,GACtCC,GAAe,IAAAD,QAAuB,MAEtCE,GAAY,OAAeC,EAAA,EAAqBD,WAmCtD,OAjCA,IAAAE,kBAAgB,KACZ,IAAKF,GAAaH,EAAoBM,QAAS,OAE/C,MAAMC,EAAW,IAAIC,kBAAiB,KAClC,MAAMC,EAAUjM,SAASkM,cAAc,uBACnCD,IACAE,EAAmBF,GACnBF,EAASK,aACb,IAGED,EAAsBF,IACxB,MAAMI,EAAaX,EAAaI,QAEhC,GAAIG,GAAWI,EAAY,CACvB,MAAMC,EAAaL,EAAQM,WAAU,GAErCD,EAAWvJ,MAAMyJ,SAAW,SAC5BH,EAAWtJ,MAAM0J,IAAM,kCAEvBJ,EAAWK,YAAYJ,GACvBL,EAAQU,SACRnB,EAAoBM,SAAU,CAClC,GAKJ,OAFAC,EAASa,QAAQ5M,SAAU,CAAE6M,WAAW,EAAMC,SAAS,IAEhD,KACHf,EAASK,YAAY,CACxB,GACF,CAACT,IAEGD,CAAY,EDzCPqB,GAEZ,OAAO,gBAAK/I,IAAKA,EAAKjB,MAAO,CAAEyJ,SAAU,WAAYQ,OAAQ,EAAGC,MAAO,IAAO,C,8LE4ElF,EAnE4EhV,IACxE,MAAM,OACFiV,EAAM,MACNC,EAAK,OACLtU,EAAM,MACNC,EAAK,KACLkI,EAAI,UACJ3H,EAAS,MACT+T,EAAK,KACL3T,EAAI,SACJ4T,EAAQ,yBACRC,EAAwB,eACxBC,IACA,UAEE,iBAAEC,IAAqB,OACzBL,EACAD,aAAM,EAANA,EAAQO,UACRF,EACAlU,GA+BJ,OANA,IAAAmC,YAAU,KACFwF,GACAvH,GACJ,GACD,CAACuH,EAAMvH,KAGN,SAACiU,EAAA,EAAM,CACHC,YAAY,cACZC,UAAWT,EACXU,aAAcR,EACd3Q,KAAMzE,EAAMyE,KACZoR,KAAMjV,EACNkV,iBAAiB,0CACjBC,YAAY,kDACZC,aArCkC,KACtCT,IAEA,IAAIU,EAAY7U,EAAY8T,EAAQD,aAAM,EAANA,EAAQO,UAI5C,GAHKS,IACDA,EAAY,IAEZjW,EAAMkW,kBAGN,OAFArV,SACAb,EAAMkW,kBAAkBD,EAAWf,GAIvC,MAAMiB,GAAoB,QACtBF,EACAf,EACAG,GACFe,KAEFlT,OAAOC,SAASC,KAAO+S,CAAiB,EAmBpCE,cAAelB,EACfmB,QAASnB,EAAK,gBACA,UAErB,E,2CC3BL,EArCyF,EACrFG,iBACAiB,eACAnJ,eAEA,MAAMoJ,GAAwB,OAAeC,EAAA,EAAeD,uBAEtDE,GAAuB,IAAAC,cACzB,CAAOC,EAA2BC,KAAkB,0CAChD,eACIA,EACAL,EACA,CACIM,SAAU,EACVC,SAAU,EACVC,OAAQ,EACRC,QAAS3B,IAAmB4B,EAAA,EAAmBC,QAAU,GAAK,EAC9DC,UAAW,IAEf,EACAR,E,KAER,CAACJ,EAAuBlB,IAG5B,OACI,SAAC,IAAmB,CAChBiB,aAAcA,EACdc,eAAgBX,EAChBpB,eAAgBA,EAChBgC,mBAAoB,EAAC,SAEpBlK,GAER,E,qBCrCE,MAAMmK,EAA6B,QACtC,IACI,2GA8GR,MAvGoFvX,IAChF,MAAM,MACFkV,EAAK,MACLrU,EAAK,UACLO,EAAS,OACT6T,EAAM,eACNK,EAAc,yBACdD,EAAwB,0BACxBmC,IACA,SACEC,GAAY,IAAAjE,QAAyB,OAErC,iBACFkE,EAAgB,sBAChBC,EAAqB,qBACrBC,EAAoB,iBACpBrC,EAAgB,8BAChBsC,EAA6B,gBAC7BC,EAAe,0BACfC,EAAyB,+BACzBC,IACA,OAAkC9C,EAAOD,aAAM,EAANA,EAAQO,UAAWF,EAAgBlU,GAU1E6W,EAAwB,KAC1BJ,GAA+B,EAqC7BK,EAAiB,eAAkB,KAAK,MAAC,OAAiB,QAAjB,EAAAT,EAAU5D,eAAO,eAAEsE,MAAM,GAAE,CAACV,IAE3E,OACI,SAACW,EAAA,EAAa,CACV1C,YAAY,cACZM,aA3BkC,KACtCT,IAEA,IAAIU,EAAY7U,EAAY8T,EAAQD,aAAM,EAANA,EAAQO,UAI5C,GAHKS,IACDA,EAAY,IAEZjW,EAAMkW,kBAGN,OAFArV,SACAb,EAAMkW,kBAAkBD,EAAWf,GAIvC,MAAMiB,GAAoB,QACtBF,EACAf,EACAG,GACFe,KAEFlT,OAAOC,SAASC,KAAO+S,CAAiB,EASpCkC,eApDmB,KACvBX,GAAkB,EAoDdY,aAjDiB,KACrBX,GAAuB,EAiDnB5L,IAAK0L,EACL3B,iBAAiB,0CACjByC,iBAAiB,sBACjBC,eACI,SAACC,EAAA,EAAoB,CACjBC,YAAalB,EACblQ,KAAK,+BACLqR,mBAAiB,IACnB,UAGN,SAACpB,EAA0B,CACvBqB,kBAAmBX,EACnBY,yBAA0BZ,EAC1Ba,uBApDuB,KAC/BhB,GAAiB,EAoDTiB,wBAAyBhB,EACzBiB,6BAA8BhB,EAC9BiB,YA3DY,KACpBrB,OAAqBsB,OAAWA,OAAWA,EAAU,EA2D7CC,aApDa,KACrBrB,GAAiB,EAoDTsB,SAAUlB,EACVmB,yBAAuB,KAGlC,ECvGL,MAWMC,EAAqEtZ,IACvE,MAAMuZ,GAA6BvZ,EAAMwZ,eAEzC,OACI,gCACKD,IACG,SAAC/M,EAAA,EAAY,CACTiN,YACI,SAAC,EAAe,CAACvD,kBAAmBlW,EAAMkW,kBAAmBzR,KAAK,aAI9E,SAAC,EAAmB,CAACyR,kBAAmBlW,EAAMkW,oBAC7ClW,EAAMoN,WAEd,EAGL,MA7BsEpN,IAClE,MAAMuW,EAAevW,EAAMkV,OAAS,GAC9BwE,GCjB0BC,EDiBa3Z,EAAM4Z,cCd/C3a,OAAO4a,OAAO3C,EAAA,GACThN,KAAKxG,GAASA,EAAKoW,sBACnBnW,SAASgW,EAAkBI,eAG7BJ,EACDzC,EAAA,EAAmB8C,MATM,IAACL,EDmBhC,OACI,SAAC,EAAmB,CAACpD,aAAcA,EAAcjB,eAAgBoE,EAAgB,UAC7E,SAACJ,EAAiB,iBAAKtZ,KAE9B,E,sBEsCL,EArDsBA,IAKlB,MAAMia,GAAQ,UAEd,OACI,iCACI,SAACC,EAAA,EAA8B,KAC/B,SAAC7G,EAAA,EAAgB,CACbC,QAAQ,oBACRlE,OAAS+K,I,MAAmC,OACxC,SAACC,EAAA,EAAiB,CACdC,mBAAoB,CAChB3P,MAAkC,QAA3B,EAAAyP,EAASE,0BAAkB,eAAE3P,OAExC4P,YAAaH,EAASG,YACtBC,cAAeva,EAAMua,cACrBC,6BAA8Bxa,EAAMwa,+BAAgC,GAE3E,KAEL,SAACnH,EAAA,EAAgB,CACbC,QAAQ,qBACRlE,OAAS+K,I,MAAmC,OACxC,SAACM,EAAA,EAAkB,CACfJ,mBAAoB,CAChB3P,MAAkC,QAA3B,EAAAyP,EAASE,0BAAkB,eAAE3P,OAExC4P,YAAaH,EAASG,YACtBE,6BAA8Bxa,EAAMwa,+BAAgC,EACpEf,WAEIQ,GACI,SAACS,EAAA,EAAe,KAEhB,SAAC,EAAY,CACTd,YAAaO,EAASP,YACtBJ,eAAgBW,EAASX,eACzBtE,MAAOiF,EAASjF,MAChBoF,YAAaH,EAASG,YACtBpE,kBAAmBlW,EAAMkW,qBAK5C,MAGZ,C,kHC9CL,MAyDMyE,EAAe,CACjBC,KA1DS,KACT,MAAQpY,KAAMqY,IAAa,UACrBC,EAAaD,IAAa,IAASE,SAEzC,OACI,cACI3W,UAAW,IAAW,eACtBhB,KACI,IAAUqK,iBAAiBuN,sBAAwBF,EAC7C,IAAU9Y,aAAaiZ,UAAUC,KAAKtV,IACtC,IAAU5D,aAAamZ,UAAUvV,IAAG,aAEnC,kBAAiB,UAE5B,SAAC,IAAI,CAAClB,KAAM,IAAY,oBAE/B,EA2CD0W,OAxCYpb,IAER,gBACIoE,UAAW,IACP,eACA,YACApE,EAAMqb,WAAa,0BACnBrb,EAAMsb,UAAY,yBACI,cAAtBtb,EAAMsa,aAA+B,0BACf,UAAtBta,EAAMsa,aAA2B,uBAErCxP,MAAO,CAAEyQ,OAAQ,GAAG,SAEnBvb,EAAMoN,WA4BfoO,SAvBcxb,IACP,gBAAKoE,UAAU,oBAAmB,SAAEpE,EAAMoN,WAuBjDqO,QApBazb,IACN,gBAAKoE,UAAU,uBAAsB,SAAEpE,EAAMoN,WAoBpDsO,SAjBc1b,IACP,gBAAKoE,UAAU,wBAAuB,SAAEpE,EAAMoN,WAiBrDuO,WAdgB3b,IACT,gBAAKoE,UAAU,sBAAqB,SAAEpE,EAAMoN,WAcnDwO,UAXe5b,IACR,gBAAKoE,UAAU,qBAAoB,SAAEpE,EAAMoN,YAatD,K,8LCrBA,EAzCkFpN,IAC9E,MAAM,SAAEwS,IAAa,UAErB,OACI,6BAAgB,WAAWpO,UAAU,aAAY,UAC7C,eAAIA,UAAU,kBAAiB,SAC1BpE,EAAM0K,MAAMR,KAAKxG,IACd,MAAMmY,EAAkBnY,EAAKoY,WAAY,OAAkBpY,EAAKkC,IAAK4M,GACrE,OACI,eAEIpO,UAAW,IACqB,QAA5BpE,EAAM+b,mBAA+B,iBACT,WAA5B/b,EAAM+b,mBAAkC,oBACxC,sBACArY,EAAKoY,UAAY,aACpB,UAED,6BACkBD,EACdzY,KAAMM,EAAKkC,IAEXxB,UAAW,IAAW,mBAAkB,YAC7B,WAAWV,EAAK4D,KAAKyS,cAAciC,QAAQ,MAAO,OAC7DxX,QAAUnF,IACN,IAAsB4c,sBAClBvY,EAAK4D,KACLjI,EAAE6c,cAAc9Y,KACnB,EACJ,UAED,iBAAMgB,UAAU,sBAAqB,SAAEV,EAAK4D,QAVvC5D,EAAK4D,OAXT5D,EAAK4D,KAwBjB,OAIhB,E,iCCeL,EA7D2BtH,I,UAQvB,MAAMmc,GAAc,QAAyB,KAAYC,IACnDC,GAAY,QAAyB,KAAYC,MAC/C9Z,KAAMqY,IAAa,EAAA0B,EAAA,MAGrBC,EAFa3B,IAAa,IAASE,UAEIhZ,EAAA,EAAU0L,iBAAiBC,uBAExE,OACI,UAACiN,EAAA,EAAaS,OAAM,CAACd,YAAata,EAAMsa,YAAagB,UAAQ,YAExDa,IACG,gBAAK/X,UAAU,0BAAyB,UAClCpE,EAAMua,gBAAiB,SAACkC,EAAA,EAAkB,CAAClY,MAAM,aAG3D,SAACoW,EAAA,EAAaa,SAAQ,WAClB,SAACb,EAAA,EAAac,QAAO,UAChBU,GACG,SAACxB,EAAA,EAAaC,KAAI,KAElB,iCACI,SAAC8B,EAAA,EAAa,CACVC,uBAAuB,EACvBC,gBAAyC,QAAxB,EAAA5c,EAAMqa,0BAAkB,eAAE3P,QAE9C2R,IAAa,SAAC1B,EAAA,EAAaC,KAAI,cAKrB,QAAxB,EAAA5a,EAAMqa,0BAAkB,eAAE3P,MAAMnL,UAC/B,SAACob,EAAA,EAAagB,WAAU,WACpB,SAAC,EAAkB,CACfI,kBAAkB,MAClBrR,MAA+B,QAAxB,EAAA1K,EAAMqa,0BAAkB,eAAE3P,WAI7C,SAACiQ,EAAA,EAAaiB,UAAS,WACnB,SAACjB,EAAA,EAAae,SAAQ,WAChBS,IACE,SAACU,EAAA,EAAc,CACXL,uBAAwBA,EACxBhC,6BAA8Bxa,EAAMwa,6BACpCF,YAAata,EAAMsa,oBAM1C,C,4DCrED/Z,E,iCACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAsBnR,MApBiBO,IACf,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EC,SAAU,UACVC,SAAU,UACVH,EAAG,gfACD,E,0CCXN,MAAMwc,EAAiB,QAAW,IAAM,kCAsCxC,MA/BuB9c,IACnB,MAAM,OAAEY,EAAM,MAAEC,EAAK,KAAEW,IAAS,EAAAC,EAAA,GAAS,KAAUqb,gBAEnD,OACK9c,EAAM2c,wBACH,6BAAgB,YAAW,UACvB,SAAC,KAAK,CACF/b,OAAQA,EACRC,MAAOA,EACPkc,OAAQ,IACRC,UAAU,OACVC,sBAAsB,EACtBC,cAAgBnR,IACZ,SAACoR,EAAA,EAAgB,CACbpR,IAAKA,EACLrH,KAAM,EACNC,MAAM,OACNH,QAAShD,EACT+C,MAAM,aAEb,UAED,SAAC,WAAc,CAACrD,UAAU,SAACC,EAAA,GAAa,CAACC,WAAS,IAAG,UACjD,SAAC0b,EAAc,CAAC9Y,QAASnD,SAK5C,C,6DC7CDN,E,oQACJ,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAGJ,EAASY,MAAM,KAAMN,UAAY,CAsBnR,MApBwBO,IACtB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAOb,EAAS,CACtDiB,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAMS,IAAUA,EAAqB,gBAAoB,OAAQ,CAC3EC,SAAU,UACVC,SAAU,UACVH,EAAG,+gKACD,E,sHCpBN,EAAyE,WAAzE,EAAsP,WAAtP,EAA4S,WC0B5S,MAmPM8c,EAAuC,EAAGC,eACxCA,GAEI,SAAC3T,EAAA,EAAI,CACDhF,KAAM,IACNN,UDlRyG,WCmRzGnE,MAAO,GACPC,OAAQ,GAAE,oBAOlB,iBAAKkE,UD3RiK,WC2RpI,WAC9B,SAACsF,EAAA,EAAI,CAAChF,KAAM,EAAkBN,UD5R2G,WC4R3E,oBAC9D,SAACsF,EAAA,EAAI,CAAChF,KAAM,IAAWzE,MAAO,GAAIC,OAAQ,GAAIkE,UD7RuI,WC6RhH,sBAKjF,MAxQqD,EACjDkZ,qBACAC,yBACAC,sB,YAEA,MAAMC,GAAW,UACXC,GAAY,UAEZ9b,GAAmB,WACnB,qBAAEoZ,GAAyBjZ,EAAA,EAAU0L,kBAGvCxK,UAAW0a,EACXnb,KAAMyS,EACN7T,UAAWwc,IACX,EAAAC,EAAA,KAA2BJ,IAEvBjb,KAAMsb,EAAkB1c,UAAW2c,IAAyB,EAAAC,EAAA,GAAS,CACzEC,SAAU,KACVC,QAASC,EAAA,EAAYC,mBACrBC,UAAWZ,IAKTa,EACFb,KACGM,IAAyBD,GACvBA,GAAoBA,EAAiBve,OAAS,IAE/CiD,KAAMa,IAAkB,EAAAC,EAAA,GAA2B,CACvD,uBACA,mBACA,qCACA,yBACA,oBACA,kBACA,kBACA,kBACA,yBACA,yBACA,yBACA,6BACA,+BACA,6BACA,+BACA,6BACA,+BACA,sBACA,kCACA,yBACA,uCAEJ,OAAKD,EAEDib,GAEI,iBAAKla,UDnFc,WCmFgB,WAC/B,gBAAKA,UDpF8B,WCoFN,UACzB,SAACsF,EAAA,EAAI,CACDhF,KAAM,IACNN,UAAU,aACVnE,MAAO,GACPC,OAAQ,GACRJ,MAAM,eAGd,SAACgF,EAAA,EAAW,CAACV,UAAW,EAAe,SAClCf,EAAckb,qBACTlb,EAAckb,qBACd,6CAETlb,EAAcmb,mBAAoB,uBAAInb,EAAcmb,oBACJ,QAAhD,EAAAnb,EAAcob,0CAAkC,eAAE7Y,MAC/CvC,EAAcqb,yBACV,SAAC1Y,EAAA,EAAM,CAACyG,SAAO,EAAClI,MAAM,UAAUH,UAAU,aAAY,UAClD,cACIhB,KAAsD,QAAhD,EAAAC,EAAcob,0CAAkC,eAAE7Y,IACxDxB,UAAW,EAAuB,SAEjCf,EAAcqb,+BASvC,iBACIta,UAAW,IACP,EACAsZ,GAAa1C,EDtH+b,WCsHjZ,IAC9D,WAECyC,IACE,gBAAKrZ,UD1H2E,WC0HhD,SAC3BsZ,GAAa1C,GACV,SAAClW,EAAA,EAAW,CAACV,UD5Hod,WC4Hnb,SACzCsZ,EAAY,gBAAkB,MAGnC,iCACI,SAAC5Y,EAAA,EAAW,CAACV,UAAW,EAAe,SAClCf,EAAcsb,kBACTtb,EAAcsb,kBACd,0BAERtb,EAAcub,iBACZvb,EAAcwb,iBACdxb,EAAcyb,mBACd,0BACKzb,EAAcub,kBACX,2BACI,SAACxB,EAAQ,CACLC,YAAaha,EAAc0b,uBAAsB,oBAGrD,0CAAkB1b,EAAcub,mBAChC,iBAAMxa,UAAU,mBAAkB,SAC7Bf,EAAc0b,uBACT1b,EAAc2b,2BACd3b,EAAc4b,kCAK/B5b,EAAcwb,kBACX,2BACI,SAACzB,EAAQ,CACLC,YAAaha,EAAc6b,uBAAsB,oBAGrD,0CAAkB7b,EAAcwb,mBAChC,iBAAMza,UAAU,mBAAkB,SAC7Bf,EAAc6b,uBACT7b,EAAc8b,2BACd9b,EAAc+b,kCAK/B/b,EAAcyb,kBACX,2BACI,SAAC1B,EAAQ,CACLC,YAAaha,EAAcgc,uBAAsB,oBAGrD,0CAAkBhc,EAAcyb,mBAChC,iBAAM1a,UAAU,mBAAkB,SAC7Bf,EAAcgc,uBACThc,EAAcic,2BACdjc,EAAckc,qCAOvClc,EAAcmc,sBACkC,QAA7C,EAAAnc,EAAcoc,uCAA+B,eAAE7Z,OAC3C,SAACI,EAAA,EAAM,CAACyG,SAAO,EAAClI,MAAM,UAAU6B,WAAS,YACrC,cACIhD,KAAMC,EAAcoc,gCAAgC7Z,IACpDpB,QAASgZ,EACTpZ,UAAW,EAAuB,SAEjCf,EAAcmc,yBAI7B5d,GACEyB,EAAcqc,yBACkC,QAAhD,EAAArc,EAAcsc,0CAAkC,eAAE/Z,OAC9C,iBAAKxB,UDxM+O,WCwMzM,0BACzB,KACd,cACIhB,KACIC,EAAcsc,mCAAmC/Z,IAErDpB,QAASgZ,EAAe,SAEvBna,EAAcqc,iCAQ9CjC,IACG,iBAAKrZ,UAAW,EAAa,WACzB,SAACU,EAAA,EAAW,CAACV,UD1N2T,WC0NhS,+BAEvCuZ,IACG,iCACI,gBAAKvZ,UAAW,ID9N8V,WC8N3T,gBAAe,SAC7DkZ,GAAsBrI,GACnB,iCACI,0BACK,IAAQ2K,4BAA4B3K,EAAO4K,WAEhD,mDACA,iBAAMzb,UAAU,mBAAkB,sBAEtC,MAKPkZ,GAAsBrI,IACnB,gBAAK7Q,UD7O6X,WC6OjW,UAC7B,SAAC0b,EAAA,EAAgB,CACbC,cAAe9K,EAAO8K,cACtBC,WDhPyZ,WCiPzZC,YAAa,KACT,IAAeC,WAAWC,sBACtB,eACH,EAELN,OAAQ5K,EAAO4K,cAMlCjC,IACG,SAACwC,EAAA,EAAM,CAAC7b,MAAM,QAAQ8b,qBD7PuR,aCgQhT9C,IACG,SAACvX,EAAA,EAAM,CAACyG,SAAO,EAAClI,MAAM,UAAU6B,WAAS,YACrC,cAAGhD,KAAMma,EAAwB/Y,QAASgZ,EAAe,qCAnLtD,IA2L1B,E,WCzPL,MAAM8C,EAAgB,CAACC,EAAgDC,KACnE,QAAkBtH,IAAdqH,EAAyB,OAAO,KAEpC,MAAME,EAAaF,EAAUG,MAAMC,IAAQ,MACvC,OAAsB,QAAtB,EAAAA,aAAI,EAAJA,EAAMC,wBAAgB,eAAEnd,MAAMod,GAAUA,EAAMxgB,KAAOmgB,GAAe,IAGxE,OAAOC,EAAaA,EAAWnZ,KAAO,IAAI,EAoG9C,IC7HI,ED6HJ,EAjGuDtH,I,QACnD,MACIwC,KAAMse,EACN7d,UAAW8d,EACX3f,UAAW4f,IACX,SAEEpH,GAAc,EAAAqH,EAAA,MAEdC,EAAYJ,GAEVte,KAAM8a,IAAuB,EAAA6D,EAAA,KAC/Bpf,EAAA,EAAU0L,iBAAiB2T,mBAG3B5D,EAAmBne,IACrB,IAAsBgiB,YAAYC,MAAMjiB,EAAE6c,cAAcqF,UAAWliB,EAAE6c,cAAc9Y,KAAK,EA2C5F,OAPA,IAAAG,YAAU,KACN,IAAsB8d,YAAY7f,OAC3B,KACH,IAAsB6f,YAAYxgB,OAAO,IAE9C,KAGC,iCACI,SAAC,EAAqB,CAClByc,mBAAoBA,EACpBC,uBAAwBxb,EAAA,EAAUC,aAAawf,OAAOjE,uBACtDC,gBAAiBA,KAErB,gBAAKpZ,UE7FsD,WF6F7B,UAC1B,SAAC,KAAiB,CAAChD,UAAW4f,EAAa,SACtCD,IACG,qCACmB7H,IAAdgI,IACG,SAACO,EAAA,EAAe,CACZX,MAAOI,EACPQ,aAA4C,QAA9B,EAAiB,QAAjB,EAAA9H,aAAW,EAAXA,EAAapX,YAAI,eAAEmf,mBAAW,eAAEthB,GAC9C4Y,YAlDJ,CACxB5Z,EACAqE,K,QAEyB,QAAzB,EAAA1D,EAAM4hB,2BAAmB,gBAAGviB,GAC5B,IAAsBwiB,oCAAoCP,MACzB,QAA7B,EAAAhB,EAAcQ,EAAOpd,EAAKrD,WAAG,QAAIhB,EAAE6c,cAAcqF,UACf,OAAlCjB,EAAcQ,EAAOpd,EAAKrD,SAAe6Y,EAAY7Z,EAAE6c,cAAcqF,UACrE,eACAliB,EAAE6c,cAAcqF,UAChBliB,EAAE6c,cAAc9Y,KACnB,EAwC2B0e,WArCHpe,IACzB,IAAsBme,oCAAoCrgB,KAAKugB,WAC3Dre,EAAK4D,KACL,eACH,EAkC2B0a,YA/BFte,IAC1B,IAAsBme,oCAAoChhB,MAAMohB,YAC5Dve,EAAK4D,KACL,eACH,KA8BmB,gBAAKlD,UE1GiB,WF0GO,UACzB,SAAC4B,EAAA,EAAM,CAACzB,MAAM,QAAQkI,SAAO,YACzB,cACIrJ,KAAMrB,EAAA,EAAUC,aAAakgB,UAC7B1d,QAhELnF,IAC3B,IAAgB8iB,SAChB3E,EAAgBne,EAAE,EA8D4C,mCAWjE,EGnFL,EA5B2B,KACvB,MAAM,KAAEmC,EAAI,OAAEZ,EAAM,MAAEC,IAAU,EAAAY,EAAA,GAAS,KAAU2gB,eAEnD,OACI,SAAC,KAAK,CACFxhB,OAAQA,EACRC,MAAOA,EACPkc,OAAQ,IACRG,cAAgBnR,IACZ,SAACoR,EAAA,EAAgB,CACbpR,IAAKA,EACLrH,KAAM,IACNC,MAAM,YACN0d,aAAa,OACb7d,QAAShD,EACT+C,MAAM,aAEb,UAED,SAAC,IAAe,CAACP,QAASnD,EAAK,UAC3B,SAAC,WAAc,CAACK,UAAU,SAACC,EAAA,GAAa,CAACC,WAAS,IAAG,UACjD,SAAC,EAAiB,SAIjC,E,sBFnCL,SAAS,IAAa,OAAO,EAAWnC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAG,EAASQ,MAAM,KAAMN,UAAY,CAsBnR,IGvBI,GHuBJ,GApBgBO,IACd,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAO,EAAS,CACtDI,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAM,IAAU,EAAqB,gBAAoB,OAAQ,CAC3EU,SAAU,UACVC,SAAU,UACVH,EAAG,ujCACD,E,uEIyDN,GAhEoB,EAChBgiB,iBAIA,MAAMC,GAAW,WACX,QAAEC,IAAY,EAAAzhB,GAAA,MACd0hB,GAAa,QAAehM,GAAA,EAAeiM,mBAO3CC,GAAgB,QAAeC,GAAA,EAAmBC,oBAaxD,OAXA,IAAAtf,YAAU,KAGS,QAFA,KAAmBuf,SAASC,IAAI,qBAG3C7f,OAAOC,SAASqP,SAASwQ,QAAQjhB,EAAA,EAAUC,aAAaiZ,UAAUrV,MAAQ,IAE1E4c,IACA,KAAmBM,SAASpO,OAAO,oBACvC,GACD,CAAC6N,EAAUC,KAGV,SAACS,EAAA,EAAgB,WACb,SAAC9F,EAAA,EAAgB,CACbzY,KAAM,GACNC,MACQge,EAAgB,EAAU,gBAAgBA,UACxB,IAAlBA,EAA4B,uBACzB,WAEXne,QA3BI,KACZ0e,GAAA,EAASC,IAAIC,SAASC,WAAWZ,GACjCD,GAAS,EAyBe,YACN,eAAc,gBACV,SACdje,MAAQoe,EAA6B,QAAb,WAAoB,UAE5C,8BAAiB,OAAM,UACnB,SAACW,EAAApX,EAAa,CACVqX,MAAOjB,EACP7d,KAAK,QACL+e,KAAMb,EAAgB,GACtBnO,KAAM,EACNQ,OAAQ,EACRyO,eAAgB,CACZC,IAAKf,EACLgB,KAAMhB,EACNpR,QAAS,IACTqS,QAAQ,EACRC,OAAO,GACV,SAEAlB,SAKpB,E,YD1EL,SAAS,KAAa,OAAO,GAAW1jB,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAG,GAASQ,MAAM,KAAMN,UAAY,CAsBnR,IEvBI,GAAOwkB,GAAQC,GFuBnB,GApBoBlkB,IAClB,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EU,SAAU,UACVC,SAAU,UACVH,EAAG,86CACD,EEpBN,SAAS,KAAa,OAAO,GAAWrB,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,CAAG,GAAEE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,GAAK,CAAE,OAAOL,CAAG,EAAG,GAASQ,MAAM,KAAMN,UAAY,CAwBnR,OAtBiBO,IACf,IAAI,MACFC,EAAK,QACLC,KACGC,GACDH,EACJ,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,MACPC,OAAQ,MACRC,QAAS,YACTC,MAAO,6BACP,kBAAmBL,GAClBC,GAAQF,EAAqB,gBAAoB,QAAS,CAC3DO,GAAIN,GACHD,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EQ,EAAG,6JACAwjB,KAAWA,GAAsB,gBAAoB,OAAQ,CAChExjB,EAAG,8IACAyjB,KAAWA,GAAsB,gBAAoB,OAAQ,CAChEzjB,EAAG,oKACD,E,oCCiBN,GAzBIN,IAOI,UAACgkB,GAAA,GAAa,CAACC,aAAcjkB,EAAMikB,aAAY,UAC1CjkB,EAAMkkB,aACP,SAACC,GAAA,EAAO,iBAAKnkB,EAAMokB,aAAY,CAAEhgB,UCvBnB,WDuB4C,UACtD,SAAC,MAAU,UAAEpE,EAAMoN,iBAenC,GATiBpN,IACN,SAAC,KAAM,iBAAKA,EAAK,UAAGA,EAAMoN,Y,kCEkCrC,GA1DcpN,IAEN,+BACQA,EAAK,CACToE,UAAW,IACP,KAAiBigB,WCZC,WDclBrkB,EAAMoE,WACT,SAEApE,EAAMoN,YAgDnB,GA3CcpN,IAEN,+BACQA,EAAK,CACToE,UAAW,IACP,KAAiBiI,KC3BmB,WD6BpCrM,EAAMoE,WACT,SAEApE,EAAMoN,YAiCnB,GA5BcpN,IAEN,SAAC,KAAQ,iBAAKA,EAAK,CAAEoE,UAAW,ICvC8B,WDuCSpE,EAAMoE,WAAU,SAClFpE,EAAMoN,YAyBnB,GApByBpN,GAIdA,EAAM0E,MACT,SAACgF,EAAA,EAAI,CACDhF,KAAM1E,EAAM0E,KACZN,UAAW,ICpDqE,WDoD1BpE,EAAMoE,WAAU,mBAG1E,KEMR,GAtD8BpE,IAK1B,MAAOY,EAAQiN,IAAa,IAAA5E,WAAS,GAgBrC,OACI,SAAC,GAAoB,CACjBgb,aAhBoBK,IACpBA,GACAzW,GAAU,GACV,IAAsB0W,WAAW/iB,SAEjCqM,GAAU,GACV,IAAsB0W,WAAW1jB,QACrC,EAUIqjB,aACI,SAACle,EAAA,EAAM,CAACyG,SAAO,EAAC+X,QAAM,EAACjgB,MAAM,eAAeH,UChCnC,WDgC2D,UAChE,SAAC,GAAqB,WAClB,SAACqgB,GAAAvY,EAAc,CACXvH,MAAO3E,EAAM2E,MACbD,KAAM9D,EAAS,IAAYZ,EAAM0E,WAGpC,UAGb,SAAC,GAAoB,UAChB1E,EAAM0K,MAAMR,KAAKxG,IACd,SAAC,GAAoB,WACjB,UAAC,GAAoB,CACjBN,KAAMM,EAAKkC,IACX8e,QAAUrlB,IAvBN,EAAC+D,EAAcM,KACvC,IAAsB6gB,WAAWjD,MAAM5d,EAAK4D,KAAMlE,EAAK,EAuB/Bwe,CAAqBviB,EAAEwG,OAA6BzC,KAAMM,EAAK,EAClE,WAED,SAAC,GAAwB,CAACU,UCnDX,WDmDmCM,KAAMhB,EAAKgB,OAC5DhB,EAAK4D,SARa5D,EAAK4D,WAc/C,E,kCEtDE,MAAMwC,GAAkC,CAC3C,CACIxC,KAAM,qBACN1B,IAAK7D,EAAA,EAAUC,aAAawf,OAAOmD,iBACnCjgB,KAAM,MAEV,CACI4C,KAAM,uBACN1B,IAAK7D,EAAA,EAAUC,aAAawf,OAAOoD,oBACnClgB,KAAM,MAEV,CACI4C,KAAM,iBACN1B,IAAK7D,EAAA,EAAUC,aAAawf,OAAOqD,oBACnCngB,KAAM,MAEV,CACI4C,KAAM,iBACN1B,IAAK7D,EAAA,EAAUC,aAAagV,OAAO8N,gBACnCpgB,KAAM,OAIDqgB,GAAqC,CAC9C,CACIzd,KAAM,qBACN1B,IAAK7D,EAAA,EAAUC,aAAawf,OAAOmD,iBACnCjgB,KAAM,MAEV,CACI4C,KAAM,uBACN1B,IAAK7D,EAAA,EAAUC,aAAawf,OAAOoD,oBACnClgB,KAAM,OC7BDsgB,GAA4B,KACrC,MAAMC,GAAa,UAEbva,GAAQ,IAAAwa,UAAQ,IAAOD,EAAa,IAAIF,IAAY,IAAIjb,KAAS,CAACmb,IAExE,OAAO,SAAC,GAAoB,CAACva,MAAOA,EAAO/F,MAAM,iBAAiBD,KAAM,MAAa,EAG5EygB,GAA2B,KACpC,MAAMF,GAAa,UAEbva,GAAQ,IAAAwa,UAAQ,K,MAClB,MAAME,EAAgBH,EAAa,IAAIF,IAAY,IAAIjb,IAEjDub,EAAkBJ,EAC2B,QAA7C,EAAAljB,EAAA,EAAUC,aAAasjB,IAAIC,0BAAkB,eAAE3f,IAC/C7D,EAAA,EAAUC,aAAawf,OAAOjE,uBAUpC,OARI8H,GACAD,EAAcI,QAAQ,CAClBle,KAAM,4BACN1B,IAAKyf,EACL3gB,KAAM,KAIP0gB,CAAa,GACrB,CAACH,IAEJ,OAAO,SAAC,GAAoB,CAACva,MAAOA,EAAO/F,MAAM,aAAaD,KAAM,IAAa,EC3B/E+gB,GAAczlB,IAEZ,iCACI,iBAAKoE,UAAU,0BAAyB,WAClCpE,EAAMwc,yBAA0B,SAACwI,GAAyB,KAC5D,SAAC,EAAkB,QAEvB,gBAAK5gB,UAAU,6BAA4B,SACrCpE,EAAMwc,wBAGJ,SAAC,EAAkB,KAFnB,SAAC2I,GAAwB,SAkF7C,OAzEwBnlB,IAKpB,MAAM0lB,GAAkB,UAClBT,GAAa,WACb,yBAAEU,EAAwB,yBAAEC,IAA6B,QAAoB,CAC/EX,aACAY,eAAe,UACfH,oBAGEI,EAAuB,KACzB,IAAgBC,MAAM,KAAM,QAAQ,EAGxC,OAAIH,GAEI,SAAC5f,EAAA,EAAM,CAACzB,MAAM,UAAUkI,SAAO,EAACrI,UAAU,cAAa,UACnD,cACI0B,IAAI,WACJ1C,MAAM,QAAY,UAAW,SAC7BoB,QAASshB,EAAoB,gCAQzCH,GAEI,SAAC3f,EAAA,EAAM,CAACzB,MAAM,UAAUkI,SAAO,EAACrI,UAAU,cAAa,UACnD,cACI0B,IAAI,WACJ1C,MAAM,QAAY,UAAW,SAC7BoB,QAASshB,EAAoB,gCASzC,gCACMJ,GAmBE,SAACD,GAAU,CAACjJ,uBAAwBxc,EAAMwc,0BAlB1C,SAACxW,EAAA,EAAM,CACHzB,MAAM,UACNkI,SAAO,EACPjI,QAASshB,EACT1hB,UAAU,cAAa,UAEvB,cACI0B,IAAI,WACJ1C,MAAM,QACF6hB,EAAa,UAAY,UACzB,OACAjlB,EAAMwa,8BACT,yBAQb,SAACwL,GAAU,CAAC1D,WAAkC,cAAtBtiB,EAAMsa,YAA8B,QAAU,eAE7E,C,0OCjGL,EAAyG,WC+DzG,EA1C6B,I,IAAA,SAAE2L,GAAW,GAAI,EAAKjmB,GAAK,UAA3B,cACzB,MAAMkmB,GAAgB,IAAA1S,QAAO,MAE7B,OACI,SAAC2S,EAAA,EAAa,CACVC,QAASF,EACTvC,GAAI3jB,EAAMY,OACV2Q,QAAS0U,EAAW,IAAM,EAC1BI,WAAY,CACRC,YAAa,IAAW,GACxBC,UAAW,IAAW,IAE1B3C,QAAM,EACN4C,eAAa,YAEb,gBACIza,IAAKma,EACLO,KAAK,UACLriB,UAAW,IDvCsD,WCuC3B6hB,GDvCM,YCuC4B,UAExE,iBAAK7hB,UDzCyG,WCyChF,WAC1B,gBAAKA,UD1C0H,WC0CjG,SAAGpE,EAAM6J,UACvC,gBAAKzF,UD3C+I,WC2CtH,SAAGpE,EAAM0mB,WACvC,gBAAKtiB,UD5CsL,WC4C/J,UACxB,SAACE,EAAA,EAAc,CACXC,MAAM,aACNC,QAASxE,EAAMa,MACf4D,KAAM,GACNC,KAAM,IACNC,MAAM,aAGd,iBAAKP,UDrDmK,WCqD3I,WACzB,SAAC4B,EAAA,EAAM,iBAAKhG,EAAM2mB,mBAAkB,CAAEpiB,MAAM,UAAU6B,WAAS,MAC/D,SAACJ,EAAA,EAAM,iBAAKhG,EAAM4mB,qBAAoB,CAAEriB,MAAM,iBAAiB6B,WAAS,cAK3F,E,gECwCL,EAnFsFpG,IAClF,MAAO+I,EAAMC,IAAW,IAAAC,WAAS,IAEjC,IAAA1F,YAAU,KACN,MAAMsjB,EAAiB9kB,EAAA,EAAU0L,iBAAiBiY,gBAC5CoB,EAA4B,MAC5B,IAAQC,KAAK,QAC2B,IAA1C7jB,OAAO8jB,OAAOC,wBAElB,IAAIC,EAQJ,OAPKL,GAAmBC,MACpBI,EAAS1V,YAAW,KACXsV,KACD9d,GAAQ,EACZ,GACD,MAEA,KACH6I,aAAaqV,EAAO,CACvB,GACF,IAEH,MAOMjC,GAAa,UAEbkC,GAAW,QACblC,EAAa,UAAY,UACzB,OACAjlB,EAAMwa,8BAGJ4M,GAAmB,QAAoBnC,EAAa,UAAY,WAEtE,OACI,SAAC,EAAmB,CAChBgB,UAAQ,EACRrlB,OAAQmI,EACRlI,MArBM,KACV,IAAQwmB,OAAO,KAAuB,QACtC,IAASxd,OAAOyd,cAAczmB,QAE9BmI,GAAQ,EAAM,EAkBVa,OAAQ7J,EAAMsJ,QACdod,QAAS1mB,EAAM0mB,QACfC,mBAAoB,CAChBla,SAAS,EACTW,UACI,cACItH,IAAI,WACJ1C,KAAM+jB,EACN3iB,QAAUnF,IACNA,EAAEkoB,iBACF,IAAQF,OAAO,KAAuB,QACtC,IAASxd,OAAOyd,cAAcE,YAC9B,IAAgBzB,MAAM,KAAM,SAC5B7iB,OAAOC,SAASC,KAAO/D,EAAE6c,cAAc9Y,IAAI,EAC9C,uBAMbwjB,qBAAsB,CAClBna,SAAS,EACTW,UACI,cACItH,IAAI,WACJ1C,KAAMgkB,EACN5iB,QAAS,KACL,IAAQ6iB,OAAO,KAAuB,QACtC,IAASxd,OAAOyd,cAAcG,mBAAmB,EACpD,2BAOpB,E,4CCtBL,EA9D4BznB,I,MAQxB,MAAMmc,GAAc,QAAyB,KAAYC,IACnDsL,GAAoB,QAAgB1a,GAAUA,EAAMC,GAAGC,OAAOwa,qBAE5DllB,KAAMqY,IAAa,EAAA0B,EAAA,MAGrBC,EAFa3B,IAAa,IAASE,UAEIhZ,EAAA,EAAU0L,iBAAiBC,uBAExE,OACI,iCACI,UAACiN,EAAA,EAAaS,OAAM,CAACd,YAAata,EAAMsa,YAAW,WAC/C,SAACK,EAAA,EAAaa,SAAQ,UACjBW,IACG,SAACxB,EAAA,EAAac,QAAO,WACjB,SAACiB,EAAA,EAAa,CACVC,uBAAuB,EACvBC,gBAAyC,QAAxB,EAAA5c,EAAMqa,0BAAkB,eAAE3P,YAK1D1K,EAAMyZ,aACH,SAACkB,EAAA,EAAagB,WAAU,UAAE3b,EAAMyZ,cAEpC,SAACkB,EAAA,EAAaiB,UAAS,UAClBO,IACG,SAACxB,EAAA,EAAae,SAAQ,WAClB,SAACmB,EAAA,EAAc,CACXL,uBAAwBA,EACxBhC,6BAA8Bxa,EAAMwa,6BACpCF,YAAata,EAAMsa,mBAKnC,SAACqN,EAAA,EAAuB,QAE5B,gBACIvjB,UAAU,sEACV0G,MAAO,CAAEkK,MAAO,GAAG,UAEjB0S,IACE,SAAC,EAAoB,CACjBlN,6BAA8Bxa,EAAMwa,6BACpClR,QAAQ,OACRod,QAAQ,oEAIpB,SAAC,IAAqB,MAE7B,C,oHCjEE,MAyBMkB,EAAoB,MACT,QAAyB,KAAYxL,I,8CCV7D,EAfsBpc,IAClB,MAAM+L,GAAM,IAAAyH,QAAuB,MAGnC,OAFA,EAAAqU,EAAAlgB,GAAgC,uBAAwBoE,IAGpD,gBAAKA,IAAKA,EAAK3H,UAAW,IAAW,gBAAe,YAAY,eAAc,SACzEpE,EAAMyZ,aACH,gBAAKgN,KAAK,SAASriB,UAAU,kBAAiB,SACzCpE,EAAMyZ,cAItB,C,6HCdE,MAAMqO,EAAc,CAAC,EAAG,EAAG,EAAG,GCCxBC,EAA8BC,IACvC,OAAQA,GACJ,KAAK,EACD,OAAOC,EAAA,EAAiBC,YAC5B,KAAK,EACD,OAAOD,EAAA,EAAiBE,YAC5B,KAAK,EACD,OAAOF,EAAA,EAAiBG,YAC5B,KAAK,EACD,OAAOH,EAAA,EAAiBI,YAC5B,QAGI,OADAzV,QAAQ/C,MAAM,qDACPoY,EAAA,EAAiBI,YAEhC,ECeJ,MAvBwDroB,IACpD,MAAMsoB,EAAczkB,EAAA,EAAY0kB,gBAAgBD,YAAYtoB,EAAMK,KAC3D0I,EAAMC,IAAW,IAAAC,WAAUqf,GAOlC,OACI,SAACL,EAAA,EAAY,CACTlf,KAAMA,EACNkd,UAAU,EACVuC,iBATiB,KACrB3kB,EAAA,EAAY0kB,gBAAgBE,QAAQzoB,EAAMK,IAC1C2I,GAAQ,EAAM,EAQV0f,WAA4B,IAAhB1oB,EAAMgoB,MAClB3f,KAAM0f,EAA2B/nB,EAAMgoB,OACvCW,kBAAmB3oB,EAAM4oB,QAAO,SAE/B5oB,EAAMoN,UAEd,ECAL,EAvBsEpN,I,MAClE,MAAM+L,GAAM,IAAAyH,QAAuB,MAGnC,OAFA,EAAAqU,EAAAlgB,GAAgC,gCAAiCoE,IAEhD,QAAZ,EAAA/L,EAAM6oB,cAAM,eAAEtpB,SAEf,gBAAKwM,IAAKA,EAAK3H,UAAU,eAAc,SAClCpE,EAAM6oB,OAAO3e,KAAK4e,IAAU,OACzB,SAAC,EAAK,CAEFzoB,GAAIyoB,EAAMzoB,GACV2nB,OFnBkB9W,EEmBW4X,EAAMd,MFlB5CF,EAAYnkB,SAASuN,GEkBgC4X,EAAMd,WAAQ9O,GAC1D0P,QAASE,EAAMF,UAAW,SAACG,EAAA,EAAO,CAACC,KAAMF,EAAMF,UAAW,UAE1D,iBAAMxkB,UAAU,mBAAkB,UAC9B,SAAC2kB,EAAA,EAAO,CAACC,KAAMF,EAAMxf,aANpBwf,EAAMzoB,IFjBM,IAAC6Q,CE0BzB,MAdyB,IAgBjC,E,WCjBL,EAX2B,KAEnB,SAACmC,EAAA,EAAgB,CACbC,QAAQ,eACRlE,OAAS+K,IACL,SAAC,EAAY,CAAC0O,OAAQ1O,EAAS0O,U,4FCR/C,GAAgB,mBAAmB,WAAW,gBAAgB,YCuB9D,EAlByB,cAKvB,CAAC7oB,EAAO+L,KAEF,SAACkd,EAAA,EAAU,eACPld,IAAKA,GACD/L,EAAK,CACTuE,MAAM,eACNH,UAAW,EAAO,WAAWpE,EAAMuE,SAAQ,SAE1CvE,EAAMoN,a,4FCCnB,EAR0B,KAAY,0CAI9B,aAHuB,SAAyB2V,IAC5C,gCAEYvgB,IACpB,I,WCZG,MAAM0mB,EAAuB,KAClB,EAAAlL,EAAA,GAAS,CACnBC,SAAU,KAAsBkL,IAChCjL,QAAS,KAAY,0CAEjB,aADoB,GAExB,IACAkL,UAAW,K,uMCiFnB,EAlEsB,cAGpB,CAACppB,EAAOqpB,KACN,MAAM,MAAEnU,EAAK,OAAEtU,EAAM,MAAEuU,EAAK,SAAEC,EAAQ,WAAEkU,EAAU,KAAEvgB,IAAS,SAEvDoT,GAAc,QAAyB,KAAYC,IAEnDmN,GAAiB,IAAA/V,QAAyB,MAGhD,OAFA,IAAAgW,qBAAoBH,GAAU,IAAME,EAAe1V,WAG/C,UAAC4V,EAAA,GAAK,CACFzoB,kBCvCoB,WDwCpBJ,OAAQA,EACRC,MAAOsU,EACP8H,sBAAsB,EACtByM,UAAU,OACVC,kBAAmB3pB,EAAMqY,eACzBuR,qCAAsC5pB,EAAM4pB,qCAC5CC,UAAW7pB,EAAM6pB,UAAS,WAE1B,SAACC,EAAA,EAAc,WACX,SAAChlB,EAAA,EAAW,6BAEhB,iBACIV,UAAW,ICpDmC,WDsD1C2E,GCtDoF,YDuDvF,WAED,SAAC0M,EAAA,EAAM,CACH1J,IAAKwd,EACL7T,YAAa1V,EAAM0V,YACnBC,UAAWT,EACXU,aAAcR,EACd3Q,KAAM0X,EAAc,QAAU,SAC9BrG,iBAAkB9V,EAAM8V,iBACxBC,YAAa/V,EAAMuY,iBACnBvC,aAAchW,EAAMgW,aACpBK,cAAelB,EACfmB,QAAS,K,MACLgT,IACsB,QAAtB,EAAAC,EAAe1V,eAAO,SAAEkW,OAAO,EAEnCC,cAAY,eACAhqB,EAAMiqB,kBAEtB,SAAChB,EAAA,EAAU,CACP1kB,MAAM,iBACNG,KAAM,IACNC,MAAM,QACNF,KAAM,GACND,QAAS,KACL2Q,IACAnV,EAAMsY,cAAc,OAI/BtY,EAAMwY,eACP,SAAC,EAAAvX,SAAQ,CAACC,SAAU,KAAI,SACnB6H,IAAQ,gBAAK3E,UCvFqG,WDuFtE,SAAGpE,EAAMoN,eAGjE,G,6JE1FL,EAAuD,WAAvD,EAAmF,WAAnF,EAAuH,WCoFvH,EApE4BpN,IACxB,MAAM,KAAEkG,IAAS,EAAAgkB,EAAA,KACXjF,GAAa,WACb,SAAEzS,IAAa,UAErB,OACI,gBACIpO,UAAW,IDvBU,WCyBD,UAAhBpE,EAAMuE,ODzBoI,WC0B1H,UAAhBvE,EAAMuE,OD1BuK,YC2BhL,WAED,eACIH,UAAW,IACP,EACA,GACC6gB,GAAc,GAClB,UAED,cACI7hB,KAAMrB,EAAA,EAAUC,aAAamoB,IAAIhP,UAAUvV,IAC3CpB,QAAUnF,IACNA,EAAEkoB,iBACF,IAAsBtL,sBAClB5c,EAAE6c,cAAcqF,UAChBliB,EAAE6c,cAAc9Y,MAEpB8C,EAAK7G,EAAE6c,cAAc9Y,KAAK,EAC7B,gBACa,OACVrB,EAAA,EAAUC,aAAamoB,IAAIhP,UAAUvV,IACrC4M,GACH,wBAKNzQ,EAAA,EAAUC,aAAasjB,IAAInK,YAC1B,eACI/W,UAAW,IACP,EACA,EACA6gB,GAAc,GACjB,UAED,cACI7hB,KAAMrB,EAAA,EAAUC,aAAasjB,IAAInK,UAAUvV,IAC3CpB,QAAUnF,IACNA,EAAEkoB,iBACF,IAAsBtL,sBAClB5c,EAAE6c,cAAcqF,UAChBliB,EAAE6c,cAAc9Y,MAEpB8C,EAAK7G,EAAE6c,cAAc9Y,KAAK,EAC7B,gBACa,OACVrB,EAAA,EAAUC,aAAasjB,IAAInK,UAAUvV,IACrC4M,GACH,yBAOpB,C,wBClFL,IAAY0E,E,gCAAZ,SAAYA,GACR,wBACA,wBACA,kBACA,oBACA,oBACA,kBACA,eACH,CARD,CAAYA,IAAAA,EAAkB,I,8FCiD9B,IAlBwClX,IACpC,MAAMoqB,GAAoB,OAAe,IAAmBvH,oBACtDwH,GAAoB,OAAe,IAAcC,mBACjDC,GAAgB,QAAgBvd,GAAUA,EAAMwd,KAAKC,YAAYrpB,YAGjEspB,EACFL,IACCE,GAjC+B,EAACH,EAA2BO,KAChE,IAAIC,EAYAC,EAKJ,OAhB0B,IAAtBT,IACAQ,EAAiB,uBAEK,IAAtBR,IACAQ,EAAiB,sCAGjBR,EAAoB,IACpBQ,EAAiB,iBAAiBR,wBAIlCO,IACAE,EAAkB,gBAAgB,IAAQC,6BAA6BH,MAGpE,GAAG,CAACC,EAAgBC,GAAiB9gB,OAAOghB,SAASC,KAAK,OAAO,EAgBpEC,CAAgCb,EAAmBpqB,EAAM2qB,YAE7D,OACI,SAAC,IAAc,aAAW,SAAQ,cAAa,OAAM,SAChDD,GAER,C,mFC/CaQ,E,sBAAlB,SAAkBA,GACd,mCACH,CAFD,CAAkBA,IAAAA,EAAa,K,gDCUxB,MAAMC,EAA8D,KACvE,MAAMC,GAAiB,OAAeC,EAAA,EAAeD,gBACrD,OAAO,SAACE,EAAe,CAACC,wBAAyB,KAAOH,EAAgBI,OAAO,GAAS,EAQtFF,EAAsEtrB,IACxE,MAIQyrB,WAAYC,EAAS,iBAAEC,IAAqB,EAAAC,EAAA,IAAc,IAAWC,MAW7E,OACI,SAAC5D,EAAA,EAAY,CACT5f,KAAM4f,EAAA,EAAiB6D,QACvB/iB,MAZM8G,EAYK6b,IAVX1rB,EAAMurB,0BAA6B1b,GAAQ7P,EAAMurB,wBAAwB1b,QAG1DA,aAAK,EAALA,EAAOkc,kBAAmBlc,EAAM/G,OAASoiB,EAAcc,iBAQtExD,iBAnBiB,KACrBmD,GAAkB,EAmBdM,qBAAsB,IACtBT,MAAOxrB,EAAMwrB,MACbU,SAAS,YAAW,SAEnBR,aAAS,EAATA,EAAWK,kBAlBP,IAAClc,CAoBb,EAGL,O,6DCXA,IAnC8B7P,IAK1B,MAAMmsB,GAAa,IAAA3Y,SAAiBxT,EAAM2Y,oBACnCyT,EAAgBC,IAAqB,IAAApjB,UAAiB,IAmB7D,OAjBA,IAAA1F,YAAU,KAGD4oB,EAAWtY,QAMZwY,EAAkBrsB,EAAM0Y,aALxBlH,YAAW,KACP6a,EAAkBrsB,EAAM0Y,aACxByT,EAAWtY,SAAU,CAAI,GAC1B,KAKA,KACHhC,kBAZAN,EAYqB,IAE1B,CAACvR,EAAM0Y,eAGN,SAAC,IAAc,mBACM1Y,EAAMsH,KAAI,YACjB,SAAQ,SAEjB8kB,GAER,C,6HCzBE,MAAME,EAAmB,I,IAAA,sBAC5BC,GAAwB,GAAK,EAC1BvsB,GAAK,UAFoB,2BAI5B,MAAM+L,GAAM,IAAAyH,QAAiC,MAQ7C,OANA,IAAAjQ,YAAU,KACFwI,EAAI8H,SAAW7T,EAAMwsB,WACrBzgB,EAAI8H,QAAQkW,OAChB,GACD,CAAC/pB,EAAMwsB,UAAWzgB,KAGjB,gCAGK/L,EAAMoN,SAENmf,GAAyBvsB,EAAMysB,SAC5B,gBAAKroB,UAAU,aAAY,UACvB,SAAC,IAAc,CACXsoB,SAAU,EACVnoB,MAAM,aACNE,KAAM,GACND,QAASxE,EAAMysB,OACf/nB,KAAM,EAAAwH,EACNvH,MAAM,gBAIlB,gBAAKP,UAAU,cAAa,UACxB,SAAC,IAAc,CACX2H,IAAKA,EACLrH,KAAM,IACNH,MAAM,aACNC,QAASxE,EAAMgE,QACfS,KAAM,GACNE,MAAM,cAIrB,C,kFCpDagoB,E,uHAAlB,SAAkBA,GACd,oBACA,oBACA,cACA,wBACA,uBACA,uBACA,uBACA,sBACH,CATD,CAAkBA,IAAAA,EAAgB,KCiClC,MAuGMC,EAAsB,cACxB,CAAC5sB,EAAO+L,KAEA,iBAAKA,IAAKA,EAAK3H,UAAWpE,EAAM6sB,gBAAiBroB,QAASxE,EAAMwE,QAAO,WACnE,iBACIJ,UAAW,IACP,iBACgB,SAAhBpE,EAAM8sB,OAAoB,6BAC7B,UAEA9sB,EAAM2oB,oBACH,oBACItgB,KAAK,SACLjE,UAAU,sDACVI,QAASxE,EAAM+sB,cAAa,aACjB,WAAU,UAEpB/sB,EAAMoN,UACP,SAAC1D,EAAA,EAAI,CACDhF,KAAM,IACNsoB,gBAAiBhtB,EAAMitB,WAAa,SAAW,OAAM,uBAM/DjtB,EAAM2oB,oBACuB,iBAAnB3oB,EAAMoN,UACV,gBAAKhJ,UAAU,iBAAgB,SAAEpE,EAAMoN,WAEvCpN,EAAc,UAGrBA,EAAMwoB,mBACH,mBACIhkB,QAASxE,EAAMwoB,iBACfngB,KAAK,SACLf,KAAK,cACLlD,UAAU,eAAc,UAExB,SAACqgB,EAAAvY,EAAc,CAACxH,KAAM,IAAWC,MAAM,eAKlD3E,EAAM2oB,mBAAqB3oB,EAAMitB,aAC9B,gBAAK7oB,UAAU,yBAAwB,SAAEpE,EAAM2oB,yBAOnE,MA5JsB,I,IAAA,MAClBmE,EAAQ,SAAQ,SAChB7G,GAAW,GAAI,EACZjmB,GAAK,UAHU,sBAKlB,MAAM6sB,EAAkB,IACpB,SACA7sB,EAAMqI,OAASskB,EAAiBb,SAAW,kBAC3C9rB,EAAMqI,OAASskB,EAAiBO,MAAQ,eACxCltB,EAAMqI,OAASskB,EAAiBQ,SAAW,kBAC3CntB,EAAMqI,OAASskB,EAAiBS,WAAa,iBAC7CptB,EAAMqI,OAASskB,EAAiBtE,aAAe,qCAC/CroB,EAAMqI,OAASskB,EAAiBvE,aAAe,qCAC/CpoB,EAAMqI,OAASskB,EAAiBxE,aAAe,qCAC/CnoB,EAAMqI,OAASskB,EAAiBzE,aAAe,qCAC/CjC,GAAY,mBACZjmB,EAAMwrB,OAAS,gBACfxrB,EAAMqtB,SACNrtB,EAAMwE,SAAW,kBACjBxE,EAAMujB,OAAS,WAAWvjB,EAAMujB,QAChCvjB,EAAMstB,SAAW,mBAGfpH,GAAgB,IAAA1S,QAAO,OAEtByZ,EAAYM,IAAiB,IAAAtkB,WAAS,IAE7C,EAAAukB,EAAA,GACIxtB,EAAM+I,QAAU/I,EAAMisB,wBAA0BjsB,EAAMwoB,iBACtDxoB,EAAMisB,sBACN,KAAK,MAAC,OAAsB,QAAtB,EAAAjsB,EAAMwoB,wBAAgB,sBAAI,IAGpC,MAAM7b,GAAU,IAAAuY,UACZ,KACI,SAAC0H,EAAmB,CAChB7gB,IAAKma,EACL2G,gBAAiBA,EACjBroB,QAASxE,EAAMwE,QACfgkB,iBACKxoB,EAAMisB,sBAAyBjsB,EAAM0oB,gBAEhCxP,EADAlZ,EAAMwoB,iBAGhByE,WAAYA,EACZF,cAAe,IAAMQ,GAAetf,IAAUA,IAC9C0a,kBAAmB3oB,EAAM2oB,kBACzBmE,MAAOA,EAAK,SAEX9sB,EAAMoN,YAGf,CACIyf,EACA7sB,EAAMwE,QACNxE,EAAMisB,qBACNjsB,EAAM0oB,WACN1oB,EAAMwoB,iBACNxoB,EAAM2oB,kBACN3oB,EAAMoN,SACN6f,EACAH,IAIR,OAAK7G,GASD,4BAAgBjmB,EAAM+I,KAAO/I,EAAMksB,SAAW,MAAK,UAC/C,SAAC/F,EAAA,EAAa,CACVC,QAASF,EACTvC,GAAI3jB,EAAM+I,KACVwI,QAAS,IACT8U,WAAY,CACRoH,WAAY,aACZlH,UAAW,cAEf3C,QAAM,EACN4C,eAAa,WAEZ7Z,MApBL3M,EAAM+I,KACC4D,EAEJ,IAoBV,C,iDC7GL,IAJsB3M,IACX,SAAC,IAAgB,CAACsT,QAAQ,eAAc,SAAEtT,EAAMoN,U,oICyB3D,IAtByB,EACrBkG,UACAlE,SACAhC,eAEA,MAAMsgB,EAAkBzmB,MAAM0mB,KAC1B5lB,SAAS6lB,kBAAiB,QAAkCta,KAE3DvJ,OAAOghB,SACP7gB,KAAKxG,IAAS,QAA8BA,KAEjD,OACI,8BACKgqB,EAAgBxjB,KAAKxG,IAClB,SAAC,IAAM,CAAemqB,QAASnqB,EAAKslB,KAAI,SAClC5Z,GAAUA,EAAO,OAAD,wBAAM1L,EAAK1D,OAAK,CAAEK,GAAIqD,EAAKrD,OAAU+M,GAD9C1J,EAAKrD,OAK7B,C,iHCpBL,EATIoH,IAEA,MAAMsE,GAAM,IAAAyH,QAAO/L,GAInB,OAHA,IAAAlE,YAAU,KACNwI,EAAI8H,QAAUpM,CAAE,KAEb,IAAAkP,cAAY,IAAIzO,IAAe6D,EAAI8H,WAAW3L,IAAO,CAAC6D,GAAK,ECmEtE,EA7DoC,CAChC+hB,EACAlf,EACAmf,KAEA,MAAMC,GAAgB,EAAAC,EAAA,IAAY,IAC1BF,EAAQG,WAAaH,EAAQI,cACtB,IAAAjiB,GAAuB4hB,EAAMC,EAAQI,cAEzCL,KAGL,OACF7Y,EACApF,MAAOue,EACPC,QAASC,EAAY,MACrBC,EAAK,QACLziB,EAAO,OACP0iB,IACA,QACAR,EACA,IAAIpf,GACJ,CACI6f,eAAgBV,EAAQU,eACxBC,aAAeC,GACJ,gCACCA,aAAG,EAAHA,EAAKD,eAAgB,MAAK,CAC9BzZ,OAAQ8Y,aAAO,EAAPA,EAASa,mBACjB9iB,QAASiiB,aAAO,EAAPA,EAASc,oBAClBhf,MAAOke,aAAO,EAAPA,EAASe,oBAGxBC,WAAYhB,EAAQiB,mBACbhiB,GAAW,OAAD,wBAAMA,GAAK,CAAElB,SAAS,IACjC,KAAM,CAAGA,SAAS,IACxBmjB,SAAWpf,IAEA,CACH2e,OAA0B,QAC1B1iB,SAAS,EACTmJ,YAAQiE,EACRrJ,MAAO,IAAIqf,EAAA,EAAqBrf,OAUhD,MAAO,CACHwe,QALY,GAAiB,IAAInmB,IAC1BomB,KAAgBpmB,KAKvB+M,SACAuZ,SACAptB,UAAW0K,EACX+D,MAAQue,aAAU,EAAVA,EAAiDe,UACzDC,WAAYb,EACf,C,uECrEU,SAASN,EAAeoB,GACnC,MAAMtjB,GAAM,IAAAyH,UAMZ,OAJKzH,EAAI8H,UACL9H,EAAI8H,QAAU,CAAEvH,MAAO+iB,MAGpBtjB,EAAI8H,QAAQvH,KACvB,C,8HCuDA,IArD4B,KACxB,MAAMiW,GAAW,SAEX+M,GAAoB,OAAe,IAA2BC,0BAyB5DlB,QAASmB,IAA0B,QAAoBC,GAvBxC,CAAOA,IAA0B,0CACpD,MAAMC,QAAc,IAASC,eAAeF,GAC5ClN,EAAS,IAAaqN,kBAAkB,CAAEF,QAAOD,oBAC7CH,aAAiB,EAAjBA,EAAmB/vB,gBACbgjB,EAAS,IAAWsN,SAASP,IACnC/M,EAAS,IAAyBuN,2BAE1C,IAiBIC,CAAeN,MAGXpB,QAAS2B,IAA4B,QACzC,CAACvN,EAAoBwN,IAnBA,EAAOxN,EAAoBwN,KAAwB,0CACxE,MAAMP,QAAc,IAASC,eAAeM,GAC5C1N,EACI,IAAa2N,wBAAwB,CACjCR,QACAjN,iBAGJ6M,aAAiB,EAAjBA,EAAmB/vB,gBACbgjB,EAAS,IAAWsN,SAASP,IACnC/M,EAAS,IAAyBuN,2BAE1C,IAOiDK,CAAiB1N,EAAYwN,MAGxE,sBAAEG,EAAqB,gBAAEC,EAAe,iBAAEC,IAAqB,QAChEtjB,GAAUA,EAAM0iB,SAGrB,IAAAnsB,YAAU,KACF6sB,GACAZ,EAAsBY,EAC1B,GACD,CAACZ,EAAuBY,KAE3B,IAAA7sB,YAAU,KACF8sB,GAAmBC,GACnBN,EAAwBK,EAAiBC,EAC7C,GACD,CAACN,EAAyBK,EAAiBC,GAAkB,C,kFC7D7D,MAAMzI,EAAkC,CAC3C0I,EACAxkB,EACAsS,GAAmB,KAEnB,MAAMmS,EAAe,eAAW,KAC5B,GAAIzkB,EAAI8H,QAAS,CACb,MAAM,OAAE3T,GAAW6L,EAAI8H,QAAQ4c,wBAC/B1oB,SAAS2oB,gBAAgB5lB,MAAM6lB,YAAYJ,EAAuB,GAAGrwB,MACzE,IACD,MAEH,OAAgBgD,OAAQ,SAAUstB,GAAc,OAAMtX,EAAWmF,EAAQ,C,kFCZ7E,MAqBMuS,EAAavoB,GAA+BwoB,IAC9C,MAAMC,EAAkC,CACpCA,MAAO,aACPzoB,OACA0oB,UAAWF,IAGf,OAAaC,EAAM,EAejBE,EAA2B,CAC7B3oB,EACA4oB,EACAC,EACAL,KAEA,MAAMC,EAA+B,CACjCA,MAAO,cACPK,WAAYF,EACZG,UAAWF,GAAY,eACvBH,UAAWF,GAEXxoB,IACAyoB,EAAMzoB,KAAOA,IAEjB,OAAayoB,EAAM,EAavB,OACIO,mBAAmB,EAAAC,EAAA,IAxEG,CACtBjpB,EACAkpB,EACAC,EACAP,EACAC,EACAL,KAEA,MAAMC,EAAgC,CAClCA,MAAO,cACPzoB,OACAopB,eAAgBF,GAAgB,eAChCG,eAAgBF,GAAgB,eAChCL,WAAYF,GAAa,eACzBG,UAAWF,GAAY,eACvBH,UAAWF,IAGf,OAAaC,EAAM,IAuDnBa,mBAAmB,EAAAL,EAAA,GAAaV,EAAU,wBAC1CgB,oBAAoB,EAAAN,EAAA,GAAaV,EAAU,qBAC3CiB,kBAAkB,EAAAP,EAAA,IA5CG,CAACL,EAAmBJ,KACzC,MAAMC,EAAuC,CACzCA,MAAO,cACPzoB,KAAM,cACN8oB,WAAYF,EACZG,UAAW,eACXL,UAAWF,IAGf,OAAaC,EAAM,IAoCnBgB,gBAAgB,EAAAR,EAAA,IAfIT,IACpB,MAAMC,EAAmC,CACrCA,MAAO,aACPzoB,KAAM,cACN0oB,UAAWF,IAGf,OAAaC,EAAM,IASnB5Q,WAAY,CACRC,uBAAuB,EAAAmR,EAAA,IAAcT,GACjCG,EAAyB,KAAM,mBAAe9X,EAAW2X,KAE7DkB,kBAAkB,EAAAT,EAAA,IAAa,CAACL,EAAmBC,EAAkBL,IACjEG,EAAyB,eAAgBC,EAAWC,EAAUL,M,6FC/E1E,MAAMmB,EAAwB1c,IAC1B,OAAQA,GACJ,KAAK4B,EAAA,EAAmB+a,UACpB,MAAO,WACX,KAAK/a,EAAA,EAAmBgb,UACpB,MAAO,WACX,KAAKhb,EAAA,EAAmBC,QACpB,MAAO,UACX,KAAKD,EAAA,EAAmBib,OACpB,MAAO,SACX,KAAKjb,EAAA,EAAmBkb,OACpB,MAAO,SACX,KAAKlb,EAAA,EAAmBmb,QACpB,MAAO,OACX,KAAKnb,EAAA,EAAmB8C,MACxB,QACI,MAAO,QACf,EAoIJ,OACIsY,iCAAiC,EAAAhB,EAAA,IAtCG,CAACiB,EAAkBC,KACvD,MAAM1B,EAA+C,CACjDA,MAAO,+CACPzoB,KAAM,oBACN8oB,WAAYoB,EACZE,WAAYD,IAGhB,OAAa1B,EAAM,IA+BnB4B,mBAAmB,EAAApB,EAAA,IA9DlBhc,GACD,EACIqd,mBACAC,qBACAC,wBAMA,MAEM/B,EAAgC,CAClCA,MAAO,sBACPgC,YAAaF,EACbG,qBAAsBJ,EACtBK,oBANgBhB,EAAqB1c,GAOrC2d,sBAAuBJ,IAG3B,OAAa/B,EAAM,IA2CvBoC,QAAQ,EAAA5B,EAAA,IAxHPhc,GACA6d,GACD,EACIR,mBACAC,qBACAC,wBAMA,MAEM/B,EAAqB,CACvBA,MAAO,SACPkC,oBAJgBhB,EAAqB1c,GAKrC8d,gCAAiCD,EACjCL,YAA4C,KAA/BF,aAAkB,EAAlBA,EAAoBrzB,aAAe2Z,EAAY0Z,EAC5DG,qBAAsBJ,EACtBM,sBAAuBJ,IAG3B,OAAa/B,EAAM,IAmGvBuC,sBAAsB,EAAA/B,EAAA,IA/FrBhc,GAAyC6d,IACtC,MAEMrC,EAAmC,CACrCA,MAAO,yBACPkC,oBAJgBhB,EAAqB1c,GAKrCjN,KAAM8qB,IAGV,OAAarC,EAAM,IAuFvBwC,0BAA0B,EAAAhC,EAAA,IAnFzBhc,GACA6d,GACD,EAAG5e,WAAUgf,SAAQC,eACjB,MAEM1C,EAAuC,CACzCA,MAAO,yBACPkC,oBAJgBhB,EAAqB1c,GAKrCjN,KAAM8qB,EACN5e,WACAkf,QAASF,EACTG,UAAWF,IAGf,OAAa1C,EAAM,IAsEvB6C,iBAAiB,EAAArC,EAAA,IA/BhBsC,GAA4BC,GAAwBve,IACjD,MAAMwe,EAAc9B,EAAqB1c,GACnCjN,EA1GY,CAACurB,IACvB,OAAQA,GACJ,IAAK,UACD,MAAO,eACX,IAAK,aACD,MAAO,QACX,QACI,OAAO,KACf,EAkGiBG,CAAkBH,GAEzB9C,EAA8B,CAChCA,MAAO,oBACPkD,aAAcF,EACdzrB,OACAyqB,YAAae,IAGjB,OAAa/C,EAAM,IAqBvBmD,iBAAiB,EAAA3C,EAAA,IAlBIhc,IACrB,MAEMwb,EAA8B,CAChCA,MAAO,oBACPkC,oBAJgBhB,EAAqB1c,KAOzC,OAAawb,EAAM,I,wGCnJhB,MAAMoD,EAAoC,CAC7CC,EACA3e,EACAF,EACAlU,KAEA,MAAMgzB,EAAuBhzB,OAAY8X,EAAYib,EAC/CE,EAAmBjzB,OAAY8X,EAAY1D,EAE3C8e,GAAwB,IAAA9gB,aAA2B0F,IACzD,IAAA3V,YAAU,KACF+wB,EAAsBzgB,UAAYugB,IAClCE,EAAsBzgB,aAAUqF,EACpC,GACD,CAACkb,IAEJ,MAAMG,EAAoB,CACtBpB,EACAN,K,MAGIyB,EAAsBzgB,UAAYugB,QACTlb,IAAzBkb,IAKJE,EAAsBzgB,QAAUugB,EAEQ,QAAxC,MAAkBlB,OAAO5d,UAAe,SAAG6d,EAAH,CAAkB,CACtDP,mBAAoBwB,EACpBzB,iBAAkB0B,EAClBxB,sBACF,EAGA2B,EAA4B,IAAkBnB,qBAAqB/d,GACnEmf,EACF,IAAkBnB,yBAAyBhe,GA0C/C,MAAO,CACHkf,4BACAC,gCACAF,oBACA7c,iBA5CqB,KACrB6c,EAAkB,SAClBC,SAAAA,EAA4B,QAAQ,EA2CpC7c,sBAxC0B,KAC1B4c,EAAkB,WAClBC,SAAAA,EAA4B,UAAU,EAuCtC5c,qBApCyB,CAAC2b,EAAiBC,EAAmBjf,KAC9DggB,EAAkB,qBAClBE,SAAAA,EAAgC,oBAAhCA,CAAqD,CAAElB,SAAQC,WAAUjf,YAAW,EAmCpFgB,iBAhCqB,KACrBgf,EAAkB,SAClBC,SAAAA,EAA4B,QAAQ,EA+BpC3c,8BA5BkC,KAClC0c,EAAkB,mBAClBC,SAAAA,EAA4B,kBAAkB,EA2B9C1c,gBAxBoB,KACpByc,EAAkB,eAClBC,SAAAA,EAA4B,cAAc,EAuB1Czc,0BApB8B,CAACwb,EAAgBC,EAAkBjf,KACjEggB,EAAkB,eAClBE,SAAAA,EAAgC,cAAhCA,CAA+C,CAAElB,SAAQC,WAAUjf,YAAW,EAmB9EyD,+BAhBmC,CAACub,EAAgBC,EAAkBjf,KACtEggB,EAAkB,oBAClBE,SAAAA,EAAgC,mBAAhCA,CAAoD,CAAElB,SAAQC,WAAUjf,YAAW,EAetF,EAEQmgB,EAA6C,CACtDP,EACA3e,EACAF,EACAlU,KAEA,MAAM,kBAAEmzB,EAAiB,0BAAEC,EAAyB,8BAAEC,GAClDP,EAAkCC,EAAe3e,EAAWF,EAAgBlU,GA+DhF,MAAO,CACHsW,iBA9DsBid,IAEtBJ,EAAkB,QADUnzB,OAAY8X,EAAYyb,GAEpDH,SAAAA,EAA4B,QAAQ,EA4DpC7c,sBAzD2Bgd,IAE3BJ,EAAkB,UADUnzB,OAAY8X,EAAYyb,GAEpDH,SAAAA,EAA4B,UAAU,EAuDtCI,2BApDgCD,IAEhCJ,EAAkB,oBADUnzB,OAAY8X,EAAYyb,GAEpDH,SAAAA,EAA4B,oBAAoB,EAkDhD5c,qBA/CyB,CACzB+c,EACApB,EACAC,EACAjf,KAGAggB,EAAkB,oBADUnzB,OAAY8X,EAAYyb,GAEpDF,SAAAA,EAAgC,oBAAhCA,CAAqD,CAAElB,SAAQC,WAAUjf,YAAW,EAwCpFgB,iBArCsBof,IAEtBJ,EAAkB,QADUnzB,OAAY8X,EAAYyb,GAEpDH,SAAAA,EAA4B,QAAQ,EAmCpC3c,8BAhCmC8c,IAEnCJ,EAAkB,kBADUnzB,OAAY8X,EAAYyb,GAEpDH,SAAAA,EAA4B,kBAAkB,EA8B9Czc,0BA3B8B,CAC9B4c,EACApB,EACAC,EACAjf,KAEAggB,EAAkB,cAAeI,GACjCF,SAAAA,EAAgC,cAAhCA,CAA+C,CAAElB,SAAQC,WAAUjf,YAAW,EAqB9EyD,+BAlBmC,CACnC2c,EACApB,EACAC,EACAjf,KAEAggB,EAAkB,mBAAoBI,GACtCF,SAAAA,EAAgC,mBAAhCA,CAAoD,CAAElB,SAAQC,WAAUjf,YAAW,EAYtF,C,8FC7JL,IAbyBvU,IAEjB,SAAC,IAAgC,WAC7B,UAAC,IAA0C,CAACuW,aAAa,GAAE,WACvD,SAAC,IAAY,CAACkD,YAAY,SAAC,IAAkB,CAAChV,KAAK,aACnD,SAAC,IAAsB,CAACowB,2BAA2B,EAAOC,iBAAe,IAExE90B,EAAMoN,a,uECbhB,MAAM2nB,EAA4B,CAAC7f,EAAgBif,KACtD,MAAM,IAAEvuB,GAAQ,IAAU5D,aAAaiZ,UAAUiY,OAC3C8B,EAAc,IAAIC,gBAOxB,OANI/f,GACA8f,EAAYE,IAAI,IAAKhgB,GAGrBif,GAAiBA,IAAkBjf,GAAO8f,EAAYE,IAAI,KAAMf,GAE7D,GAAGvuB,KAAOovB,EAAYzoB,YAAY,C,6HCCtC,MAAM4oB,EAAgC,QACzC,IAAM,uFAgIV,IAvHIn1B,IAEA,MAAM,MACFkV,EAAK,UACLM,EAAS,UACTpU,EAAS,MACT+T,EAAK,OACLF,EAAM,eACNK,EAAc,0BACdkC,IACA,UACE,KAAEtR,IAAS,SACXuR,GAAY,IAAAjE,QAAyB,OAErC,iBACFkE,EAAgB,sBAChBC,EAAqB,2BACrBid,EAA0B,qBAC1Bhd,EAAoB,iBACpBrC,EAAgB,8BAChBsC,EAA6B,0BAC7BE,EAAyB,+BACzBC,IACA,OACA9C,EACAD,aAAM,EAANA,EAAQO,UACRF,EACAlU,IAGGg0B,EAAgCC,IAAqC,IAAApsB,WAAS,GA2B/EqsB,EAAYl0B,EAAY8T,EAAQM,EAEhC+f,EAAwB,CAACC,EAAqBC,KAChD,GAAID,EAAY,CACZ,MAAMrf,GAAoB,OAA0Bqf,EAAYC,GAChEvvB,EAAKiQ,GACLhB,IACAkgB,GAAkC,EACtC,GAeEnd,GAAiB,IAAAvB,cAAY,KAAK,MAAC,OAAiB,QAAjB,EAAAc,EAAU5D,eAAO,eAAEsE,MAAM,GAAE,CAACV,IAErE,OACI,UAAC,IAAa,CACV/B,YAAY,WACZM,aAjBmB,KAClBhW,EAAM60B,4BACPtf,EAAiBN,aAAM,EAANA,EAAQ0f,cACzBY,EAAsBD,EAAWpgB,GACrC,EAcImD,eAtDmB,KACvBX,EAAiBzC,aAAM,EAANA,EAAQ0f,aAAa,EAsDlCrc,aAnDiB,KACrBX,EAAsB1C,aAAM,EAANA,EAAQ0f,aAAa,EAmDvC5oB,IAAK0L,EACL3B,iBAAiB,4BACjByC,iBAAiB,sBACjBC,eACI,SAAC,IAAoB,CACjBE,YAAalB,EACblQ,KAAK,kCACLqR,mBAAiB,IAGzBkR,UAAW,KACPwL,GAAkC,EAAM,EAE5CzL,qCAAsCwL,EAA8B,WAEpE,SAACD,EAA6B,CAC1B/b,SAAUlB,EACVwd,mBA9BmB,KAC3B7d,EAA8B5C,aAAM,EAANA,EAAQ0f,cACtCY,EAAsBD,EAAWpgB,EAAM,EA6B/BygB,iBAAkB31B,EAAM60B,0BACxBC,gBAAiB90B,EAAM80B,gBACvBc,YApEc,K,MACtBhB,EAA2B3f,aAAM,EAANA,EAAQ0f,cAClB,QAAjB,EAAAld,EAAU5D,eAAO,SAAEkW,OAAO,EAmElB9Q,YAhEY,CAACvV,EAAkBuG,KACvC2N,EAAqB3C,aAAM,EAANA,EAAQ0f,aAAcjxB,EAAKgL,WAAYhL,EAAK4D,KAAM2C,EAAM,EAgErE4rB,qBA7DqB,CAACnyB,EAAkBuG,KAChD8N,EAA0B9C,aAAM,EAANA,EAAQ0f,aAAcjxB,EAAKgL,WAAYhL,EAAK4D,KAAM2C,EAAM,EA6D1E6rB,0BA1D0B,CAACpyB,EAAkBuG,KACrD+N,EAA+B/C,aAAM,EAANA,EAAQ0f,aAAcjxB,EAAKgL,WAAYhL,EAAK4D,KAAM2C,EAAM,EA0D/EoP,yBAAuB,KAE3B,SAAC,IAA8B,MAEtC,C,+HCrIL,MAAM0c,GAAkC,IAAAC,eAErC,CACCC,WAAW,IAGFC,EAAqC,KAC9B,IAAAC,YAAWJ,GAIlBK,EAAmC,EAAGhpB,eAC/C,MAAM,UAAE6oB,IAAc,OAAU,CAC5B3uB,KAAM,6BACN+K,OAAQ,IAAU5E,iBAAiB4E,OACnCgM,SAAS,IAGPgY,EAAM,WAAc,KAAM,CAAGJ,eAAc,CAACA,IAElD,OACI,SAACF,EAAgCO,SAAQ,CAAChqB,MAAO+pB,EAAG,SAC/CjpB,GAER,C,8JCwFL,EAnGkFpN,IAC9E,MAAM,MACFkV,EAAK,UACLM,EAAS,OACT5U,EAAM,UACNQ,EAAS,KACTI,EAAI,MACJ2T,EAAK,SACLC,EAAQ,KACRrM,EAAI,eACJuM,EAAc,mBACdihB,EAAkB,MAClB1mB,IACA,EAAA2mB,EAAA,MAEE,UAAEP,IAAc,UAEhB,iBAAE1gB,IAAqB,OACzBL,EACAM,EACAF,EACAlU,IAGE,2BAAEwzB,IAA+B,OACnC1f,EACAM,EACAF,EACAlU,IAGE,KAAE8E,IAAS,EAAAgkB,EAAA,MAEjB,IAAA3mB,YAAU,KACFwF,IAASktB,GACTz0B,GACJ,GACD,CAACuH,EAAMvH,EAAMy0B,IAEhB,MAAMQ,EAAmB,KACrBlhB,IACAggB,EAAsBrgB,EAAOM,EAAU,EAGrC+f,EAAwB,CAACC,EAAqBC,KAChD,GAAID,EAAY,CACZ,MAAMrf,GAAoB,OAA0Bqf,EAAYC,GAChEvvB,EAAKiQ,GACLhB,GACJ,GAQEuhB,GAAQH,aAAkB,EAAlBA,EAAoBG,MAAMxsB,KAAKysB,IAAO,CAAGjM,KAAMiM,EAAIjT,IAAKiT,QAAU,GAEhF,OAAOV,GACH,SAACW,EAAA,GAAkB,CACfC,YAAY,WACZpyB,KAAMzE,EAAMyE,KACZqyB,WAAY5hB,EACZ6hB,cAAe3hB,EACf4hB,oBAAoB,EACpBC,qBAAsBpnB,EACtBnF,MAAOwK,EAAQwhB,EAAQ,GACvB5nB,SAAU2nB,EACVS,kBAAoBxT,IAjBI,IAACyT,EAkBjBzT,IAlBiByT,EAmBOzT,EAAInX,WAlBxCqoB,EAA2B2B,aAAkB,EAAlBA,EAAoBG,MAAMn3B,QACrDg2B,EAAsB4B,GAkBd,EAEJC,iBAAkB,IAAG,SAEnB1zB,IACE,SAACkzB,EAAA,GAAsB,CAACS,UAAW3zB,EAAKgnB,KAAI,UACxC,SAACkM,EAAA,GAA2B,UAAElzB,EAAKgnB,YAK/C,SAACjV,EAAA,EAAM,CACHC,YAAY,WACZC,UAAWT,EACXU,aAAcR,EACd3Q,KAAMzE,EAAMyE,KACZoR,KAAMjV,EACNkV,iBAAiB,4BACjBE,cAAgBhW,EAAM60B,2BAA6B4B,QAAqBvd,EACxE7C,cAAelB,EACfmB,QAASnB,EAAK,gBACA,SACdY,YAAY,mDAEnB,C,6HCxCL,IAvBI/V,IAEA,MAAMwW,GAAwB,OAAe,IAAeA,wBACtD,UAAEyf,IAAc,SAEhBqB,GAAyB,IAAA3gB,cAC3B,CAAOC,EAA2BC,KAAkB,0CAChD,OA5CR0gB,EA4CgC3gB,EA3ChC1B,EA2C8C2B,EA1C9C2gB,EA0CsDhhB,EAzCtDihB,EAyC6ExB,GAxC5E,0CAED,MAAMyB,EAAgBD,EAChB,IAAIE,SAAoEC,IACpEA,EAAQ,CACJltB,MAAO,GACPwK,QACAM,UAAWN,EACXyf,aAAc,EACdkD,oBAAqB,IACvB,IAEN,IAAWC,mBACP,CACI5c,KAAM,EACN6c,eAAgB,GAChBlE,WAAY3e,EACZ8iB,OAAQ,GACRC,OAAQ,GACRT,WAEJD,EACA,MACA,GAGV,OAAOI,QAAQxO,IAAI,CACfuO,EACA,IAAWQ,aAAahjB,EAAO,EAAG,EAAGqiB,EAAa,KAAMC,IAEhE,IAnCgC,IAC5BD,EACAriB,EACAsiB,EACAC,CAyCuF,KACnF,CAACjhB,EAAuByf,IAG5B,OACI,SAAC,IAAmB,CAChB1f,aAAcvW,EAAMuW,cAAgB,KACpCc,eAAgBigB,EAChBhiB,eAAgB,IAAmB4c,UACnC5a,mBAAoB,EAAC,SAEpBtX,EAAMoN,UAEd,C,6FCnEE,MAmBM+qB,EAAkB,KAAK,MAChC,MAAsE,UAA3B,QAA3C,MAAIlD,gBAAgB/xB,OAAOC,SAAS+vB,eAAO,eAAEnQ,IAAI,iBAA2B,EAEnEqV,EAAuB,CAAC9wB,EAAc+wB,EAAoBhmB,KACnE,MACMimB,EAxByB,EAAChxB,EAAc+K,KAC9C,IAAK/K,IAAS+K,EACV,OAAuB,IAAhBkmB,KAAKC,SAEhB,MAAMC,EAAenxB,EAAO+K,EAC5B,IACIzK,EACA8wB,EAFAC,EAAO,EAIX,IAAK/wB,EAAI,EAAGA,EAAI6wB,EAAal5B,OAAQqI,GAAK,EACtC8wB,EAAMD,EAAaG,WAAWhxB,GAE9B+wB,GAAQA,GAAQ,GAAKA,EAAOD,EAE5BC,GAAQ,EAEZ,OAAOJ,KAAKM,IAAIF,GAAQ,GAAG,EAQNG,CADM,GAAGxxB,KAAQ+wB,IACuBhmB,GAC7D,OAAOimB,EAAeD,EAAa,IAAM,GAAG,E,eCpBzC,MAiDMU,EAAY,EACrBzxB,OACA8C,YACAiI,SACAgM,UACA2a,aAAY,MAQZ,MAAM,UAAE/C,EAAS,UAAEgD,EAAS,iBAAEC,GA9DC,CAAChxB,IAKhC,MAAM,KAAEZ,EAAI,UAAE8C,EAAS,OAAEiI,GAAWnK,GAE5B+tB,UAAWkD,EAAiBF,UAAWG,IAAkB,IAAAlU,UAAQ,K,MACrE,MAAMmU,EAAuD,QAA3C,EAAAt3B,EAAA,EAAUC,aAAaC,aAAaq3B,eAAO,eACvDvvB,QAAQrG,KAAWA,EAAK2a,UACzBqC,MACIlhB,GAC2B,IAAvBA,EAAE4K,UAAU7K,QAAgBC,EAAE8H,OAASA,GAChB,IAAvB9H,EAAE4K,UAAU7K,QACTC,EAAE8H,OAASA,KACT8C,GACF5K,EAAE4K,UAAUzG,SAASyG,KAGrC,IAAI6rB,GAAY,EACZgD,GAAY,EAEhB,GAAII,EAAW,CACX,MAAME,EDAS,EAACF,EAAyChnB,KACjE,MAAM,KAAE/K,GAAS+xB,EACjB,IAAIE,EAASC,EAAA,EAAczW,IAAIzb,GAoB/B,OAlBKiyB,EAWIA,EAAOlB,aAAegB,EAAUhB,aACrCkB,EAAOlB,WAAagB,EAAUhB,WAC9BkB,EAAOE,YAAcrB,EAAqB9wB,EAAM+xB,EAAUhB,WAAYhmB,GACtEknB,EAAOG,SAAW,IAAInpB,KACtBipB,EAAA,EAActE,IAAIqE,KAdlBA,EAAS,CACLjyB,KAAM+xB,EAAU/xB,KAChB+wB,WAAYgB,EAAUhB,WACtBsB,QAAS,IAAIppB,KACbmpB,SAAU,IAAInpB,KACdkpB,YAAarB,EAAqB9wB,EAAM+xB,EAAUhB,WAAYhmB,IAElEmnB,EAAA,EAActE,IAAIqE,IAUfA,CAAM,ECtBUK,CAAYP,EAAWhnB,GACtC4jB,EAAmC,MAAvBsD,EAAOE,YACnBR,GAAY,CAChB,CAEA,MAAO,CAAEhD,UAAWA,GAAakC,IAAmBc,YAAW,GAChE,CAAC7uB,EAAW9C,EAAM+K,IAcrB,MAAO,CAAE4jB,UAAWkD,EAAiBD,kBAZZ,IAAAviB,cACpBkjB,IAEGjnB,QAAQknB,OAAO,aAAaxyB,sBAAyBuyB,KAEjD1B,KAEJ,IAAWoB,OAAOQ,gBAAgBzyB,EAAMuyB,EAAQ,GAEpD,CAACvyB,IAGkD2xB,UAAWG,EAAe,EAmB9BY,CAAoB,CACnE1yB,OACA8C,YACAiI,WAGE4nB,GAAoB,IAAAzmB,SAAO,GAE3B0mB,GAAc,IAAAvjB,cACfkjB,IACQb,EAKAiB,EAAkBpmB,UACnBomB,EAAkBpmB,SAAU,EAC5BqlB,EAAiBW,IANjBX,EAAiBW,EAOrB,GAEJ,CAACX,EAAkBF,IAkBvB,OAfA,IAAAz1B,YAAU,KDrCgB,MAC1B,MAAM42B,EAAap4B,EAAA,EAAUC,aAAaC,aAAaq3B,QAEvD,GAAIa,EAAY,CACZ,MAAMC,EAAkBZ,EAAA,EACnBrQ,MACApf,QAAQswB,GAASF,EAAWG,OAAOC,GAAYA,EAAQjzB,OAAS+yB,EAAK/yB,SAE1EkyB,EAAA,EAAc9kB,OAAO0lB,EAAgBlwB,KAAKmwB,GAASA,EAAK/yB,OAC5D,GC6BIkzB,EAAgB,GACjB,KAEH,IAAAj3B,YAAU,KACF01B,GAAa5a,GAET6b,EADAjE,EACY,IAEA,IAEpB,GACD,CAACiE,EAAajB,EAAW5a,EAAS4X,EAAW3uB,EAAM8C,IAG/C,CAAE6rB,UAAWgD,GAAa5a,GAAW4X,EAAW,C,6FCxGpD,MAAM9U,EAAsB,CAAC9C,GAAmB,KACrC,OAAS,CACnBJ,SAAU,KAAgBwc,gBAC1Bvc,QAAS,IAAYwc,oBACrBC,MAAO,EACPtc,UACA+K,UAAW,K,6FCNZ,MAAMvL,EAA2B,CAACQ,GAAmB,KAC1C,OAAS,CACnBJ,SAAU,KAAgB2c,yBAC1B1c,QAAS,IAAY2c,gBACrBF,MAAO,EACPtc,W,iICVD,MAAMyc,EAAkB,CAC3BL,gBAAiB,CAAC,mBAClBM,eAAgB,CAAC,kBACjBC,6BAA+BC,GAAmB,IAAIH,EAAgBC,eAAgBE,GACtFC,UAAW,CAAC,kBAEZC,oBAAsBC,GAAkB,CAAC,sBAAuBA,GAChEC,oBAAqB,CAAC,uBACtBC,iBAAkB,CAAC,yBACnBV,yBAA0B,CAAC,4BAC3BW,2BAA4B,CAAC,8BAC7BC,sBAAuB,CAAC,iBACxBC,4BAA6B,CAAC,wBAGrBC,EAAqB,CAC9BvS,IAAK,CAAC,uBACNwS,MAAQC,GAAkB,IAAIF,EAAmBvS,IAAKyS,IAG7CC,EAA0B,CACnC1S,IAAK,CAAC,2BACN2S,WAAaC,GAA8B,IAAIF,EAAwB1S,IAAK4S,GAC5EC,OAAQ,CAACrO,EAAYsO,EAAU/gB,EAAcghB,IAAqB,IAC3DL,EAAwB1S,IAC3BwE,EACAsO,EACA/gB,EACAghB,IAIKC,EAAoB,CAC7BhT,IAAK,CAAC,qBACNiT,kBAAoBC,GAAiB,IAAIF,EAAkBhT,IAAKkT,G,sICsBpE,EAvC8Er8B,IAC1E,MAAQwC,KAAM85B,IAAmB,EAAAh5B,EAAA,MAE1ByF,EAAMC,IAAW,IAAAC,WAAS,GAKjC,OACI,iCACI,oBACI7E,UAAW,IAAWpE,EAAMggB,WC3BnB,YD4BT3X,KAAK,SACL7D,QAAS,K,MARjBwE,GAAQ,GAUqB,QAAjB,EAAAhJ,EAAMigB,mBAAW,gBAAI,EACxB,aACW,aAAajgB,EAAM+f,sCAAsC/f,EAAM6f,gCAA+B,gBAC5F,SAAQ,sBAEZ,KACV,iBAAMzb,UAAU,oBAAmB,SAC9B,IAAQwb,4BAA4B5f,EAAM+f,iBACvC,IAAG,kBAGduc,aAAc,EAAdA,EAAgBC,iCACbD,aAAc,EAAdA,EAAgBE,6BACZ,SAACnzB,EAAA,EAAW,CACRN,KAAMA,EACNO,QAASgzB,EAAeC,8BACxBhzB,QAAS+yB,EAAeE,0BACxB37B,MAAO,IAAMmI,GAAQ,OAIxC,C,iFEjDE,MAAM1F,EACTm5B,IAEA,QACI,IAAUz6B,aAAawf,OAAOkb,4BAC9B,CACIC,MAAO,EACPC,OAAQH,GAEZ,CAAEI,OAAQ,K,6JCZlB,EAAyD,WAAzD,EAAuJ,WAAvJ,EAAqN,WCC9M,MAAMC,EAAmB,CAAC5hB,EAA6BwG,IACtDxG,EAAK7a,KAAOqhB,GAIZxG,EAAK0F,kBAAoB1F,EAAK0F,iBAAiBrhB,OAAS,GACpD2b,EAAK0F,iBAAiBnd,MAAMod,KAAYic,EAAiBjc,EAAOa,KAJ7DxG,EAAK7a,QAGhB,ECmBE08B,EAAkB,CAACjc,EAAgCzgB,IAC9CygB,EAAMJ,MAAMxF,GAASA,EAAK7a,KAAOqR,OAAOrR,KAmE7C28B,EAAO,cACT,CAACh9B,EAAO+L,KACJ,MACI,gBAAiBkxB,EACjB,gBAAiBC,EAAY,KAC7B70B,GAEArI,EADGm9B,GAAI,QACPn9B,EALE,0CAON,OAEI,8BAAOm9B,EAAI,CAAEpxB,IAAKA,EAAG,SAChB/L,EAAMoN,WAEd,IAIHgwB,EAeF,EACAC,cACA35B,KAAM45B,EACNtV,QACAtG,eACAzI,cACA6I,aACAE,cACAub,iBAGA,MAAMC,EAAcF,EAAa1c,iBAAiBrhB,OAAS,GAAKyoB,EAAQ,EAElEyV,IAAW/b,KAAkBob,EAAiBQ,EAAc5b,GAC5D7F,EAAkB4hB,IAAU,OAAkBH,EAAa13B,KAAO,GAAIy3B,GAE5E,OACI,SAACpxB,EAAAC,EAAUG,KAAI,CACXjI,UFhJmF,WEiJnFkI,MAAOgxB,EAAaj9B,GAAGkM,WACvBE,SAAO,YAGP,2BACI,SAACR,EAAAC,EAAUM,OAAM,CAACC,SAAO,EAACrI,UFtJkF,WEsJjD,SACtDo5B,GACG,SAACvxB,EAAAC,EAAUQ,QAAO,CAACtI,UAAW,EAAc,UACxC,gBACIA,UAAW,EAAoB,YACpB,oBAAmB,OAAgBk5B,EAAah2B,QAAO,UAElE,gBACIlD,UAAW,IF9JiS,WEgKxSm5B,EFhK+U,WEgK/R,IACnD,SAEAD,EAAah2B,YAK1B,SAAC2E,EAAAC,EAAUQ,QAAO,CACdtI,UAAW,IACP,EACA4jB,EAAQ,GF3KmM,WE4K3MyV,GF5KiO,WAAjE,YE+KpKhxB,SAAO,EACPixB,aAAa,EAAK,eACJ7hB,EAAe,UAE7B,SAACmhB,EAAI,CACD55B,KAAMk6B,EAAa13B,IAEnBpB,QAAUnF,GAAM4Z,aAAW,EAAXA,EAAc5Z,EAAGi+B,GAAa,UAE9C,gBACIl5B,UAAW,EAAoB,YACpB,oBAAmB,OAC1Bk5B,EAAah2B,QACd,UAEH,gBAAKlD,UF9LwQ,WE8LlP,SAAGk5B,EAAah2B,UAT1C,GAAGg2B,EAAaj9B,UAepCm9B,IACG,SAACvxB,EAAAC,EAAUS,QAAO,WACd,SAACV,EAAAC,EAAUC,KAAI,CACXC,aAAW,EACX/D,KAAK,SACLjE,UAAW,IACP,EF1M+P,YE6MnQqI,SAAO,EACPH,MAAOoV,aAAY,EAAZA,EAAcnV,WAAU,UAE/B,wBACK+wB,EAAa1c,iBAAiB1W,KAAKyzB,IAChC,SAACP,EAAiB,CACdC,YAAaA,EAEb35B,KAAMi6B,EACN3V,MAAOA,EAAQ,EACftG,aAAcA,EACdzI,YAAc5Z,GACV4Z,aAAW,EAAXA,EAAc5Z,EAAGs+B,EAAwBL,GAE7Cxb,WAAYA,EACZE,YAAaA,EACbub,WAAYA,GATPI,EAAuBt9B,gBAjEnDi9B,EAAaj9B,GAmFzB,EAGL,MA5M4EL,IACxE,MAAM,SAAEwS,IAAa,UACforB,GAAwB,IAAApqB,QAAe,KACtCqqB,EAAYC,IAAiB,IAAA70B,eAA6BiQ,GAYjE,OAVA,IAAA3V,YAAU,K,MACN,GAAIvD,EAAM0hB,aAAc,CACpB,MAAMqc,EAC4D,QAD3C,EAAA/9B,EAAM8gB,MACxBJ,MAAMxF,KAAW4hB,EAAiB5hB,EAAMlb,EAAM0hB,uBAAe,eAC5DrhB,GAAGkM,WAETuxB,EAAcC,GAAkB,GACpC,IACD,CAAC/9B,EAAM0hB,aAAc1hB,EAAM8gB,SAG1B,6BAAgB,cAAc1c,UF7Cf,WE6CqC,UAChD,SAAC6H,EAAAC,EAAUC,KAAI,CACXC,aAAW,EACX/D,KAAK,SACLjE,UAAW,EACXqI,SAAO,EACPH,MAAOuxB,EACPG,cAAgBC,I,QACZ,GAAIA,EAAa,CACb,MAAMC,EAAenB,EAAgB/8B,EAAM8gB,MAAOmd,GAC9CC,IACgB,QAAhB,EAAAl+B,EAAM8hB,kBAAU,gBAAGoc,GAE3B,KAAO,CACH,MAAMA,EAAenB,EACjB/8B,EAAM8gB,MACN8c,EAAsB/pB,SAEtBqqB,IACiB,QAAjB,EAAAl+B,EAAMgiB,mBAAW,gBAAGkc,GAE5B,CAEAJ,EAAcG,GACdL,EAAsB/pB,QAAUoqB,CAAW,EAE/C3Q,SAAO,YAEP,eAAIlpB,UAAW,IAAWpE,EAAMu9B,YFzE8H,YEyE/F,SAC1Dv9B,EAAM8gB,MAAM5W,KAAKi0B,IACd,SAACf,EAAiB,CACdC,YAAa7qB,EAEb9O,KAAMy6B,EACNnW,MAAO,EACPtG,aAAc1hB,EAAM0hB,aACpBzI,YAAajZ,EAAMiZ,YACnB6I,WAAY9hB,EAAM8hB,WAClBE,YAAahiB,EAAMgiB,YACnBub,WAAYv9B,EAAMu9B,YAPbY,EAAkB99B,WAa9C,C,sJCnEL,MAAM+9B,EAA6B,gBAA8C,CAC7Ex9B,QAAQ,EACRqU,YAAQiE,EACR1B,0BAA2B,GAC3B3H,WAAOqJ,EACPnQ,MAAM,EACNmM,WAAOgE,EACP5D,oBAAgB4D,EAChB7D,8BAA0B6D,EAC1BsV,OAAQ,gBACRptB,WAAW,IAGTi9B,EAAwB,KAC1B,MAAM,IAAIC,MAAM,oDAAoD,EAOlEC,EAAgC,gBAA4C,CAC9EnpB,SAAUipB,EACV/U,WAAY+U,EACZ78B,KAAM68B,EACNx9B,MAAOw9B,EACPlpB,MAAOkpB,EACPG,6BAA8BH,IAUrBI,EAA6E,EACtFrxB,WACAiK,iBACA/B,iBACAiB,eACAe,qBACA6W,mBAEA,MAAM,OACFlZ,EAAM,kBACNypB,EAAiB,OACjB99B,EAAM,MACNuU,EAAK,KACL3T,EAAI,MACJX,EAAK,MACLgP,EAAK,KACL9G,EAAI,MACJmM,EAAK,SACLE,EAAQ,WACRkU,EAAU,OACVkF,EAAM,UACNptB,EAAS,6BACTo9B,GC5C8B,EAClCG,EACAtnB,EACAC,EACA6W,KAEA,MAAM,KAAE3sB,EAAI,MAAEX,EAAK,OAAED,IAAW,EAAAa,EAAA,GAAS,KAAagU,SAE/CP,EAAOE,IAAY,IAAAnM,UAAS01B,GAAoB,KAChDnnB,EAA2BgnB,IAAgC,IAAAv1B,UAAS,IAErE21B,EAAQzQ,GAAgB,KAExB,YAAE0Q,EAAW,OAAE5pB,EAAM,MAAEpF,EAAK,OAAE2e,EAAM,UAAEptB,GA9CZ,EAChCuU,EACA0B,EACAC,EACAsnB,KAEA,MASM,OAAEpQ,EAAM,MAAE3e,EAAK,OAAEoF,EAAM,UAAE7T,IAAc,EAAA09B,EAAA,IAT9B,CAAOvH,EAA0B7M,KAAiB,0CAE7D,KAAIA,EAAKnrB,OAAS+X,GAIlB,OAAOD,EAAekgB,EAAa7M,EACvC,KAEiF,CAAC/U,GAAY,CAC1F8Y,iBAAkB9Y,EAClBqZ,oBAAoB,EACpBd,WAAW,EACXC,aAAcyQ,IAKlB,MAAO,CACHC,cAH8B,YAAXrQ,IAA0BvZ,MAAyB,UAAXuZ,IAAsB3e,GAIjFoF,SACApF,QACAzO,YACAotB,SACH,EAgByDuQ,CACtD7pB,EACAmC,EACAC,EACAsnB,GAGEtV,GAAa,IAAA3S,cAAY,IAAMvB,EAAS,KAAK,IAQnD,MAAO,CACHH,SACArU,SACAuU,OATU,IAAAwB,cAAY,KACtB9V,IACAyoB,IACAkV,EAA6B,GAAG,GACjC,CAAC39B,EAAOyoB,IAMP9nB,OACAX,QACAgP,QACA9G,KAAM81B,EACNA,cACA3pB,QACAE,WACAkU,aACAkF,SACAptB,YACAs9B,kBAAmBlnB,EACnBgnB,+BACH,EDCGQ,CAAuBzoB,EAAcc,EAAgBC,EAAoB6W,GAEvE9Y,GAA2B,QAAsCC,GAEvE,OAAO,gBACHipB,EAA8BjI,SAC9B,CACIhqB,MAAO,CACH6I,QACA3T,OACAX,QACAuU,WACAkU,aACAkV,iCAGR,gBACIJ,EAA2B9H,SAC3B,CACIhqB,MAAO,CACH2I,SACAuC,0BAA2BknB,EAC3B99B,SACAiP,QACA9G,OACAmM,QACAI,iBACAkZ,SACAptB,YACAiU,6BAGRjI,GAEP,EAGQ6xB,EAAwB,KACjC,MAAMjyB,EAAQ,aAA+CoxB,GACvD7b,EAAW,aAAiBgc,GAElC,QAAcrlB,IAAVlM,QAAoCkM,IAAbqJ,EACvB,MAAM,IAAI+b,MAAM,mEAEpB,OAAO,OAAP,wBAAYtxB,GAAUuV,EAAQ,C,8KEzG3B,MAAM2c,EAAwB,CACjChqB,EACAsB,EACA2oB,EACAC,EACA7H,KAEA,MAAM8H,EAAgB,CAClBnkB,KAAM,EACN6c,eAAgB,EAChBC,OAAQ,GACRC,OAAQ,IASNqH,EAAqD,CACvDC,IAAK,IAETD,EAA2BC,IAAIr5B,KARgB,CAC3CmC,KAAM,OACNm3B,eAAgB,SAChBlzB,MAAO,wBAQX,MAAMmzB,EAAoD,CACtDp3B,KAAM,YACNq3B,cAAe,8BACfF,eAAgB,WAChBlzB,OAAO,IAAIiE,MAAOovB,cAAc3jB,QAAQ,IAAK,MAE3C4jB,EAAkD,CACpDv3B,KAAM,YACNq3B,cAAe,4BACfF,eAAgB,cAChBlzB,OAAO,IAAIiE,MAAOovB,cAAc3jB,QAAQ,IAAK,MAiB3C6jB,EAA6C,CAC/CN,IAAK,IAETM,EAAmBN,IAAIr5B,KAAK05B,GAC5BC,EAAmBN,IAAIr5B,KAAKu5B,GAC5BI,EAAmBN,IAAIr5B,KApB0B,CAC7CmC,KAAM,OACNiE,MAAO,kBACPkzB,eAAgB,WAkBpBK,EAAmBN,IAAIr5B,KAVgC,CACnD45B,IAPyC,CACzCz3B,KAAM,YACNq3B,cAAe,qBACfpzB,MAAO,gBACPkzB,eAAgB,YAcpB,MAAMO,EAAkC,CACpCC,GAAI,IAERD,EAASC,GAAG95B,KAAKo5B,GACjBS,EAASC,GAAG95B,KAAK25B,GAEjB,MAAMI,EAAyB,CAC3B/kB,KAAM,EACN6c,eAAgB,EAChBC,OAAQ,GACRC,OAAQ,GACRluB,OAAQg2B,GAGZ,OAAO,IAAWG,iBACd,CACIrM,WAAY3e,EACZsiB,QAAShhB,EACT2pB,qBAAsB,OAAF,wBACbd,GAAa,CAChBtH,eAAgBoH,EAAoBpoB,WAExCqpB,qBAAsB,OAAF,wBACbf,GAAa,CAChBtH,eAAgBoH,EAAoBroB,WAExCupB,mBAAoB,OAAF,wBACXhB,GAAa,CAChBtH,eAAgBoH,EAAoBnoB,SAExCspB,oBAAqB,OAAF,wBACZjB,GAAa,CAChBtH,eAAgBoH,EAAoBloB,UAExCspB,uBAAwB,OAAF,wBACfN,GAAsB,CACzBlI,eAAgBoH,EAAoB/nB,aAG5CgoB,EACA7H,EACH,EAGQiJ,EAA6B,CACtCC,EACArB,KAEA,MAAM5oB,GAAwB,OAAe,IAAeA,wBACtD,QAAE6X,EAAO,OAAEpZ,EAAM,MAAEpF,EAAK,UAAEzO,EAAS,OAAEotB,IAAW,QAClD,CAAC3X,EAAgB6pB,EAAgCC,IACtCzB,EACHroB,EACA6pB,EACAD,EACAE,OACAznB,KAaZ,MAAO,CACHjE,SACApF,QACAzO,YACAw/B,OAZU,IAAAjqB,cACTE,IACOL,GACA6X,EAAQxX,EAAQL,EAAuB4oB,EAC3C,GAEJ,CAAC5oB,EAAuB4oB,EAAa/Q,IAOrCG,SACH,EAqGQqS,EAAiC,CAC1C3E,EACA4E,EACA5lB,KAEA,MAAM1E,GAAwB,OAAe,IAAeA,wBACtD,QAAE6X,EAAO,OAAEpZ,EAAM,MAAEpF,EAAK,UAAEzO,EAAS,OAAEotB,IAAW,QAClD,CAAC3X,EAAgBkqB,EAAuBL,IAC7B,IAAWR,iBA1GW,EACrCrM,EACA2D,EACAwJ,EACA9E,EACA4E,KAEA,MAAMG,EAAyB,CAC3B/lB,KAAM8lB,EACNjJ,eAAgBmE,EAChBlE,OAAQ,GACRC,OAAQ,IASNqH,EAAqD,CACvDC,IAAK,IAETD,EAA2BC,IAAIr5B,KARgB,CAC3CmC,KAAM,OACNm3B,eAAgB,SAChBlzB,MAAO,wBAQX,MAAMmzB,EAAoD,CACtDp3B,KAAM,YACNq3B,cAAe,8BACfF,eAAgB,WAChBlzB,OAAO,IAAIiE,MAAOovB,cAAc3jB,QAAQ,IAAK,MAE3C4jB,EAAkD,CACpDv3B,KAAM,YACNq3B,cAAe,4BACfF,eAAgB,cAChBlzB,OAAO,IAAIiE,MAAOovB,cAAc3jB,QAAQ,IAAK,MAiB3C6jB,EAA6C,CAC/CN,IAAK,IAGTM,EAAmBN,IAAIr5B,KAAK05B,GAC5BC,EAAmBN,IAAIr5B,KAAKu5B,GAC5BI,EAAmBN,IAAIr5B,KArB0B,CAC7CmC,KAAM,OACNiE,MAAO,kBACPkzB,eAAgB,WAmBpBK,EAAmBN,IAAIr5B,KAXgC,CACnD45B,IAPyC,CACzCz3B,KAAM,YACNq3B,cAAe,qBACfpzB,MAAO,gBACPkzB,eAAgB,YAepB,MAAMO,EAAkC,CACpCC,GAAI,IAERD,EAASC,GAAG95B,KAAKo5B,GACjBS,EAASC,GAAG95B,KAAK25B,GAEjB,MAAMqB,EAA+B,CACjChmB,KAAM8lB,EACNjJ,eAAgBmE,EAChBlE,OAAQ,GACRC,OAAQ,GACRluB,OAAQg2B,GAsBZ,MAnBiD,CAC7ClM,aACA2D,UACA2I,qBACIW,IAAe,IAAiBK,SAAWF,OAAyB/nB,EACxEknB,qBACIU,IAAe,IAAiBM,SAAWH,OAAyB/nB,EACxEqnB,uBACIO,IAAe,IAAiBO,UAAYH,OAA+BhoB,EAC/EmnB,mBACIS,IAAe,IAAiB3O,OAAS8O,OAAyB/nB,EACtEonB,oBACIQ,IAAe,IAAiB3pB,QAAU8pB,OAAyB/nB,EACvEooB,8BACIR,IAAe,IAAiB3pB,QAC1B,OAAD,wBAAM8pB,GAAsB,CAAE/lB,KAAM,SACnChC,EAGY,EAYdqoB,CACI1qB,EACA6pB,EACAK,EACA7E,EACA4E,IAEJ,OACA5nB,IAGR,CAAE8V,oBAAoB,IAY1B,MAAO,CACH5tB,YACA6T,SACApF,QACA+wB,OAbU,IAAAjqB,cACTE,IACOL,GACA6X,EAAQxX,EAAQqE,EAAM1E,EAC1B,GAEJ,CAACA,EAAuB6X,EAASnT,IAQjCsT,SACH,C,sECvSE,MAAMgI,EAA+B,K,YACxC,MAAMjuB,GAAI,SAOV,OANe,OAAH,wBACLA,GAAC,CACJ0M,OAAiB,QAAT,EAAA1M,aAAC,EAADA,EAAG0M,cAAM,eAAG,GACpBshB,mBAA6B,QAAT,EAAAhuB,aAAC,EAADA,EAAG0M,cAAM,eAAG,GAChCO,WAAyB,QAAd,EAAS,QAAT,EAAAjN,aAAC,EAADA,EAAG0M,cAAM,eAAG,UAAE,eAAEO,aAAajN,aAAC,EAADA,EAAG2M,QAElC,C,wBCXjB,IAAYssB,E,gCAAZ,SAAYA,GACR,oBACA,sBACA,kBACA,sBACA,uBACH,CAND,CAAYA,IAAAA,EAAgB,I,iFCG5B,MAAMC,GAAqB,SACvB,QAAc,IAAUz/B,aAAa0/B,aAAa97B,MAGzC+7B,EAAqB,CAC9BC,KAAMH,EACN3qB,SAAU,GAAG2qB,aACbzqB,OAAQ,GAAGyqB,YACXI,YAAa,GAAGJ,gB,gRCLb,MAAMK,EACTxsB,IAEA,OAAQA,GACJ,KAAK,IAAmB4c,UACpB,OAAO,IAAiBiP,SAC5B,KAAK,IAAmBhqB,QACpB,OAAO,IAAiBA,QAC5B,KAAK,IAAmBib,OACpB,OAAO,IAAiBiP,UAC5B,KAAK,IAAmBlP,OACpB,OAAO,IAAiBA,OAC5B,KAAK,IAAmBF,UACxB,KAAK,IAAmBI,QACxB,KAAK,IAAmBrY,MACxB,QACI,OACR,EAGE+nB,EAA+B,CACjC,CAAC,IAAiB5qB,SAAU,SAC5B,CAAC,IAAiBgqB,UAAW,QAC7B,CAAC,IAAiBhP,QAAS,UAC3B,CAAC,IAAiBiP,UAAW,WAC7B,CAAC,IAAiBC,WAAY,eAGrBW,EAA4B/sB,GAC9B,GAAGA,EAAOgtB,aAAaC,EAA6BjtB,EAAO6rB,YAAY/mB,gBAGrEooB,EAA+B,CAACC,EAAmBtB,IACrD,aAAasB,iBAAyBF,EACzCpB,GACF/mB,gBAGOmoB,EAAgC75B,GACjCA,GAAQ05B,EAA6B15B,IAAU,GAS9Cg6B,EAA0B,CACnCvB,EACAjN,EACAjB,KAEA,MAAMuB,EACFvB,GAAsBA,IAAuBiB,EAAa,OAAOjB,IAAuB,GAG5F,OAAQkO,GACJ,KAAK,IAAiBK,SAClB,MAAO,CACH94B,KAAM,WACN+N,KAAM,GAAG,IAAUpU,aAAaiZ,UAAUiY,OAAOttB,SAASiuB,IAAaM,KAG/E,KAAK,IAAiBhd,QAClB,MAAO,CACH9O,KAAM,WACN+N,KAAM,GAAG,IAAUpU,aAAasgC,OAAO18B,aAAaiuB,IAAaM,KAGzE,KAAK,IAAiBhC,OAClB,MAAO,CACH9pB,KAAM,WACN+N,KAAM,GAAG,IAAmBY,gBAAgB6c,IAAaM,KAGjE,KAAK,IAAiBiN,SAClB,MAAO,CACH/4B,KAAM,WACN+N,KAAM,GAAG,IAAmBU,kBAAkB+c,IAAaM,KAGnE,KAAK,IAAiBkN,UAClB,MAAO,CACHh5B,KAAM,WACN+N,KAAM,GAAG,IAAmByrB,qBAAqBhO,IAAaM,KAEtE,QACI,MAAO,CACH9rB,KAAM,WACN+N,KAAM,UAAUyd,IAAaM,KAEzC,EAISoO,EAAkC,CAC3CzB,EACAjN,EACAjB,KAEA,MAAMuB,EACFvB,GAAsBA,IAAuBiB,EAAa,OAAOjB,IAAuB,GAG5F,OAAQkO,GACJ,KAAK,IAAiBK,SAClB,MAAO,CACH94B,KAAM,WACN+N,KAAM,GAAG,IAAUpU,aAAaiZ,UAAUiY,OAAOttB,SAASiuB,IAAaM,KAG/E,KAAK,IAAiBhd,QAClB,MAAO,CACH9O,KAAM,WACN+N,KAAM,GAAG,IAAUpU,aAAasgC,OAAO18B,aAAaiuB,IAAaM,KAEzE,KAAK,IAAiBhC,OAClB,MAAO,CACH9pB,KAAM,WACN+N,KAAM,GAAG,IAAmBY,gBAAgB6c,IAAaM,KAEjE,KAAK,IAAiBiN,SAClB,MAAO,CACH/4B,KAAM,WACN+N,KAAM,GAAG,IAAmBU,kBAAkB+c,IAAaM,KAEnE,KAAK,IAAiBkN,UAClB,MAAO,CACHh5B,KAAM,WACN+N,KAAM,GAAG,IAAmByrB,qBAAqBhO,IAAaM,KAEtE,QACI,MAAO,CACH9rB,KAAM,WACN+N,KAAM,GAAG,IAAmBwrB,cAAc/N,IAAaM,KAEnE,EAGSqO,EAA0BvtB,I,cACnC,OAAKA,EAG6C,CAC9C,CACIgtB,UAAiC,QAAtB,EAAAhtB,aAAM,EAANA,EAAQwtB,sBAAc,eAAE9N,aACnCmM,WAAY,IAAiBK,UAEjC,CACIc,UAAgC,QAArB,EAAAhtB,aAAM,EAANA,EAAQytB,qBAAa,eAAE/N,aAClCmM,WAAY,IAAiB3pB,SAEjC,CACI8qB,UAA+B,QAApB,EAAAhtB,aAAM,EAANA,EAAQ0tB,oBAAY,eAAEhO,aACjCmM,WAAY,IAAiB3O,QAEjC,CACI8P,UAAiC,QAAtB,EAAAhtB,aAAM,EAANA,EAAQ2tB,sBAAc,eAAEjO,aACnCmM,WAAY,IAAiBM,UAEjC,CACIa,UAAmC,QAAxB,EAAAhtB,aAAM,EAANA,EAAQ4tB,wBAAgB,eAAElO,aACrCmM,WAAY,IAAiBO,YAGhCt3B,QAAQrG,GAASA,EAAKu+B,WAAav+B,EAAKu+B,UAAY,IACpD/3B,KAAwBxG,IAAS,CAC9Bu+B,UAAWv+B,EAAKu+B,UAChBnB,WAAYp9B,EAAKo9B,eA3Bd,IA8BgB,EAGlBgC,EAAkC,CAC3CjP,EACAjB,EACAmQ,KAEA,MAAM5O,EACFvB,GAAsBA,IAAuBiB,EAAa,OAAOjB,IAAuB,GAG5F,YACS1Z,IADD6pB,EAEO,CACH16B,KAAM,WACN+N,KAAM,GAAG,IAAUpU,aAAa0/B,aAAa97B,aAAaiuB,IAAaM,KAGpE,CACH9rB,KAAM,WACN+N,KAAM,GACF,IAAUpU,aAAa0/B,aAAa97B,aAC9BiuB,IAAaM,KAAiB+N,EACpCa,KAGhB,C,8FChMJ,MAAM9Z,EAAa,cACf,CAAC,EAA2Cld,K,IAA3C,KAAErH,EAAI,MAAEC,EAAK,SAAEyI,GAAQ,EAAK41B,GAAW,UAAvC,6BACG,OACI,UAAC,I,iBAEOA,EAAW,CACfxe,QAAM,EACNzY,IAAKA,EACLk3B,aAAa,SAAC,IAAc,UAAED,EAAYC,aAAe,WAA0B,WAEnF,SAAC,EAAA/2B,EAAc,CAACvH,MAAOA,EAAOD,KAAMA,IACnC0I,KAER,IAIT,K,wICOA,MAAMqI,EAAS,cACX,CAACzV,EAAOqpB,KACJ,MAAM6Z,GAAW,IAAA1vB,QAAyB,OAC1C,IAAAgW,qBAAoBH,GAAU,IAAM6Z,EAASrvB,WAoB7C,IAAAtQ,YAAU,K,MACFvD,EAAMgqB,eACU,QAAhB,EAAAkZ,EAASrvB,eAAO,SAAEkW,QACtB,GACD,CAAC/pB,EAAMgqB,aAAckZ,IAExB,MAAMC,GAAgB,IAAAC,SAEtB,OACI,UAAC,IAAU,CACP3+B,KAAMzE,EAAMyE,KACZoR,KAAM7V,EAAM6V,KACZzR,UAAW,IAAWpE,EAAM2V,WAAa,IAAO,aAAc3V,EAAMoE,WAAU,WAE9E,UAAC,IAAa,WAETpE,EAAM+V,cACH,SAAC,IAAc,4BACX,iBAAM1V,GAAI8iC,EAAa,SAAGnjC,EAAM+V,iBAGxC,SAAC,IAAe,eACA,eACZhK,IAAKm3B,EACL76B,KAAK,SACLg7B,aAAa,SACbC,aAActjC,EAAMsjC,aACpBzM,YAAa72B,EAAM8V,iBACnBpG,SA9CWrQ,I,QACvB,MAAM,MAAEiN,GAAUjN,EAAE6c,cACF,QAAlB,EAAAlc,EAAM4V,oBAAY,gBAAGtJ,GACF,QAAnB,EAAAtM,EAAM+2B,qBAAa,gBAAG13B,EAAE,EA4CZiN,MAAOtM,EAAM2V,UACb4tB,QAASvjC,EAAMwjC,aACf7zB,OAAQ3P,EAAMyjC,YACdC,UA5COrkC,I,QACL,UAAVA,EAAEqkB,KAAmB1jB,EAAMgW,eACX,QAAhB,EAAAktB,EAASrvB,eAAO,SAAEsE,OAClBnY,EAAMgW,gBAGI,WAAV3W,EAAEqkB,KAAoB1jB,EAAMqW,gBACZ,QAAhB,EAAA6sB,EAASrvB,eAAO,SAAEsE,OAClBnY,EAAMqW,gBACV,EAoCY7R,QAASxE,EAAM2jC,aAAY,gBACZ3jC,EAAM,iBAAgB,aACzBA,EAAM8V,iBAAgB,mBAChB9V,EAAM+V,aAAeotB,KAE3C,SAAC,IAAa,CACVztB,YAAa1V,EAAM0V,YACnBohB,WAAY92B,EAAM2V,UAClBK,aAAchW,EAAMgW,aACpB4tB,iBAAkB,CAAEp/B,QAASxE,EAAMsW,cAI1CtW,EAAMoN,WAEd,IAIT,K,kHClEA,IArCuBpN,IAQf,iBAAKoE,UAAW,IAAO,kBAAiB,UACnCpE,EAAM82B,YAAc92B,EAAM4jC,kBAAoB5jC,EAAM4jC,iBAAiBp/B,UAClE,SAAC,IAAc,eACXuH,IAAK/L,EAAM6jC,eACXn/B,KAAM,IACNC,MAAM,QACNJ,MAAM,aACNE,KAAM,IACFzE,EAAM4jC,iBAAgB,CAC1Bp/B,QAASxE,EAAM4jC,iBAAiBp/B,WAGvCxE,EAAM82B,YAAc92B,EAAMgW,cACvB,SAAC,IAAc,CACXvR,KAAM,GACNF,MAAM,WACNG,KAAM,IACNF,QAASxE,EAAMgW,aACfrR,MAAO3E,EAAM0V,aAAe,SAGhC,iCAAiBtR,UAAW,IAAW,IAAO,gBAAe,UACzD,SAAC,IAAI,CAACM,KAAM,U,iFClChC,MAAMo/B,EAAgB,cAA0D,CAAC9jC,EAAO+L,KAEhF,gBAAKA,IAAKA,EAAK3H,UAAW,IAAW,IAAO,kBAAmB,aAAY,SACtEpE,EAAMoN,aAKnB,K,iFCPA,MAAM22B,EAAkB,cACpB,CAAC/jC,EAAO+L,KAEA,gCACIA,IAAKA,EACLtH,KAAM,GACFzE,EAAK,CACToE,UAAW,IAAW,IAAO,gBAAiBpE,EAAMoE,gBAMpE,K,iHChBO,MAAM4/B,EAAmBz/B,IAC5B,OAAQA,GACJ,IAAK,QACD,OAAO,IAAO,iBAClB,IAAK,SACD,OAAO,IAAO,kBAClB,IAAK,QACD,OAAO,IAAO,iBAClB,QACI,MAAO,GACf,ECkBJ,MAnBmB,cACf,CAACvE,EAAO+L,KAEA,gBACIA,IAAKA,EACL3H,UAAW,IACP,IAAOqR,OACPzV,EAAM6V,MAAQ,IAAO,kBACrBmuB,EAAgBhkC,EAAMyE,MACtBzE,EAAMoE,WACT,YACS,SAAQ,SAEjBpE,EAAMoN,Y,8RCOvB,EApBiB,I,IAAA,SAAEA,EAAQ,MAAEJ,GAAK,EAAKhN,GAAK,UAA3B,sBACb,MAAM,aAAEokB,IAAiB,EAAA6f,EAAA,GAAWjkC,EAAOgN,GAErClC,EAAQ,OAAH,wBAAQsZ,EAAatZ,OAAU9K,EAAM8K,OAEhD,OACI,SAACo5B,EAAA,GAAO,WACJ,gCAEQ9f,EAAY,CAChBhgB,UCrBU,WDsBV2H,IAAK/L,EAAMmkC,WACXr5B,MAAOA,EAAK,SAEXsC,MAGZ,E,iCEqHL,EA5G8CpN,IAC1C,MAAMokC,EAAW,SAA6B,MACxCC,EAAa,SAA6B,MAC1Chb,EAAW,SAA+B,MAC1Cib,EAAa,SAAa,MAC1BH,EAAa,SAA6B,MAC1CN,EAAiB,SAAgC,MAEjD72B,GAAQ,EAAAu3B,EAAA,GAAiB,OAAD,wBACvBvkC,GAAK,CACRwkC,mBAAmB,EACnBC,uBAAuB,MAIvBb,iBAAkBc,EAAoB,WACtCC,EAAU,aACVC,EAAY,iBACZC,GC5C6B,EACjC7kC,EACAgN,KAEA,MAAM,WAAEm3B,EAAU,SAAE9a,EAAQ,WAAEib,EAAU,SAAEx1B,GAA4B9O,EAAf8kC,GAAU,QAAK9kC,EAAhE,oDAEA,WAAE2kC,EAAU,iBAAEf,EAAgB,WAAEmB,EAAU,iBAAEF,IAAqB,EAAAG,EAAA,GAAe,OAAD,wBAE1EF,GAAU,CACbx4B,MAAOU,EAAM8pB,WACbpnB,SAAU1C,EAAMi4B,cAChBC,aAAc,MACdvgC,MAAO3E,EAAM62B,YACbsO,QAAS,KACLn4B,EAAMi4B,cAAc,IACpBj4B,EAAMnM,OAAO,EAEjBiO,SAAWxC,IAEmC,OAAtCU,EAAMo4B,iBAAiBC,aACvBv2B,SAAAA,EAAWxC,EAAO,MACtB,EAEJi3B,QAAS,KAEDv2B,EAAM8pB,YACN9pB,EAAMxL,MACV,IAGR,CACI8K,MAAOU,EAAM8pB,WACbwO,SAAUt4B,EAAMi4B,eAEpB5b,IAGE,aAAEub,EAAcD,WAAYY,IAAuB,EAAAC,EAAA,GAAY,OAAD,wBAEzDV,GAAU,CACbX,aACAG,aACAjb,WACA1kB,MAAO3E,EAAM62B,YAEb0M,aAASrqB,EACTusB,mBAAevsB,EACfvJ,YAAQuJ,EACRwqB,eAAWxqB,EACXwsB,aAASxsB,EACTysB,cAAUzsB,IAEdlM,GAGJ,MAAO,CACH+3B,aACAF,mBACAF,YAAY,EAAAiB,EAAA,GAAWL,EAAoBZ,GAC3CC,eACAhB,mBACH,EDhBGiC,CAAsB,OAAD,wBAEd7lC,GAAK,CACRqpB,WACAib,aACAH,eAEJn3B,IAGE,YAAEg2B,IAAgB,EAAA8C,EAAA,GAAUpB,EAAsBb,IAEjDkC,EAAWC,IAAgB,IAAA/8B,UAAwB,MACpDg9B,GAAW,IAAAtvB,cAAY,K,MACzB,MAAMuvB,EAA4B,QAAhB,EAAA9B,EAASvwB,eAAO,eAAE4c,wBAChCyV,GACAF,EAAgBE,EAAUlxB,MAAQkxB,EAAUC,KAA/B,KACjB,GACD,CAAC/B,EAAU4B,IEzEe,CAAwBjY,IAKrD,MAAM,IAAEhiB,EAAG,WAAEq6B,EAAU,SAAEH,GAAalY,GAEtC,IAAAxqB,YAAU,KACN,MAAMyQ,EAAUjI,aAAG,EAAHA,EAAK8H,QACrB,IAAKG,EACD,OAGJ9Q,OAAOmjC,iBAAiB,SAAUJ,GAAU,GAE5C,MAAMK,EAAyB,IAAIpjC,OAAOqjC,gBAAgBC,IACjDA,EAAQjnC,QAIb0mC,GAAU,IAId,OAFAK,EAAuB3xB,QAAQX,EAAS,CAAEyyB,IAAKL,IAExC,KACCpyB,GACAsyB,EAAuBI,UAAU1yB,EACrC,CACH,GACF,CAACiyB,EAAUl6B,EAAKq6B,GAAY,EF8C/BO,CAAkB,CAAE56B,IAAKq4B,EAAUgC,WAAY,aAAcH,aAE7D,MAAMlwB,EACwB,IAA1B/I,EAAM45B,WAAWniC,KACX,sBACA,kDAEV,OACI,SAACoiC,EAAA,GAAqBvQ,SAAQ,CAAChqB,MAAOU,EAAK,UACvC,UAAC85B,EAAA,EAAU,CAAC/6B,IAAKq4B,EAAU3/B,KAAMzE,EAAMyE,KAAMoR,KAAM7V,EAAM6V,KAAI,WACzD,UAACiuB,EAAA,EAAa,CAAC/3B,IAAKs4B,EAAU,WAC1B,SAACN,EAAA,EAAe,eACZh4B,IAAKsd,GACDsb,EAAU,cACF3kC,EAAM62B,gBAEtB,SAACkQ,EAAA,EAAa,CACVjQ,WAAY9pB,EAAM8pB,WAClB9gB,aACIhW,EAAM8O,SACA,KAAK,MAAC,OAAc,QAAd,EAAA9O,EAAM8O,gBAAQ,sBAAG9B,EAAM8pB,WAAY,KAAK,OAC9C5d,EAEVxD,YAAa1V,EAAM0V,YACnBmuB,eAAgBA,EAChBD,iBAAkBZ,KAEtB,iCAAU6B,EAAgB,CAAE/5B,MAAO,CAAEC,QAAS,QAAQ,SACjDgL,QAGR/I,EAAMpM,SACH,SAAC,EAAO,CACJoM,MAAOA,EACPm3B,WAAYA,EACZE,WAAYA,EACZ2C,OAAQ,GACRl8B,MACI,CACI,+BAAgCi7B,GAGxCkB,UAAU,eACVC,UAAWlnC,EAAMo3B,iBACjB+P,YAAU,YAEV,SAAC,KAAc,iBACPvC,EAAY,CAChBN,WAAYA,EACZt3B,MAAOA,EAAK,aACD,UAIXgqB,mBAAoBh3B,EAAMg3B,qBAAuBh3B,EAAM8O,SACvDs4B,iBACIpnC,EAAMonC,kBAAoB,KAAO,yBAErCnQ,mBAAoBj3B,EAAMi3B,mBAC1BoQ,iBAAkBrnC,EAAMqnC,kBAAoB,KAAO,mBACnDC,cDxIqB,oBC8I5C,EAKE,MAAMC,EAAyBl7B,EAAA,EAEzBm7B,EAA6BC,EAAA,GAE7BC,EAA8B,EAAGt6B,eAC1C,MAAMJ,EAAQ,aAAiB65B,EAAA,IAC/B,IAAK75B,EACD,OAAOI,EAGX,MAAM,IAAEu6B,EAAG,KAAEC,EAAI,YAAEC,GG9JwB,EAACC,EAAe3Q,KAC3D,IAAK2Q,IAAU3Q,EACX,MAAO,CACHwQ,IAAKG,EACLD,YAAa,KACbD,KAAM,MAId,MAAMG,EAAiBD,aAAK,EAALA,EAAO/tB,cACxBiuB,EAAgB7Q,aAAI,EAAJA,EAAMpd,cAE5B,IAAI4tB,EAAM,GACNE,EAAc,GACdD,EAAO,GAGX,GAAII,GAAiBD,EAAepkC,SAASqkC,GAAgB,CACzD,MAAMC,EAAaF,EAAe/kB,QAAQglB,GACpCE,EAAWD,EAAaD,EAAczoC,OAE5CooC,EAAMG,EAAMK,MAAM,EAAGF,GACrBJ,EAAcC,EAAMK,MAAMF,EAAYC,GACtCN,EAAOE,EAAMK,MAAMD,EACvB,MACIP,EAAMG,EAGV,MAAO,CACHH,MACAE,cACAD,OACH,EH8HkCQ,CAAgCh7B,EAAUJ,EAAM8pB,YAEnF,OACI,2BACK6Q,IAAO,0BAAOA,IACdE,IAAe,iBAAMzjC,UDlK0C,WCkKX,SAAGyjC,IACvDD,IAAQ,0BAAOA,MAEvB,C,2FIrKL,GAAgB,UAAY,WAAW,KAAO,WAAW,iBAAmB,WAAW,KAAO,WAAW,aAAe,WAAW,YAAc,WAAW,SAAW,WAAW,mBAAqB,WAAW,OAAS,YCiC3N,EAnBkB5nC,IACd,MAAMqoC,EAAU,IACZ,EAAOv6B,SACQ,KAAf9N,EAAMyE,MAAe,EAAO6jC,SAC1BtoC,EAAM+N,YAAc,EAAOw6B,mBAC7B,EAAOC,KACPxoC,EAAMyoC,aAAe,EAAOC,aAGhC,OACI,gBAAKtkC,UAAW,EAAOS,UAAS,UAC5B,iBAAKT,UAAWikC,EAASv9B,MAAO9K,EAAM8K,MAAK,UACtC9K,EAAMoN,SACNpN,EAAM+N,aAAc,gBAAK3J,UAAW,EAAOukC,OAAM,SAAG3oC,EAAM+N,iBAGtE,C,wKC9BL,GAAgB,UAAY,WAAW,aAAe,WAAW,gBAAkB,WAAW,eAAiB,WAAW,MAAQ,WAAW,SAAW,WAAW,YAAc,WAAW,WAAa,WAAW,WAAa,WAAW,MAAQ,WAAW,eAAiB,YCuHhR,EAdkB,CACd5B,KA5FmBnM,IACnB,SAAC,EAAAkM,E,iBAEOlM,EAAK,CACToE,UAAW,IAAWpE,EAAMoE,UAAW,EAAOS,WAAU,SAEvD7E,EAAMoN,YAuFXw7B,aAnF2B5oC,IAC3B,gBAAKoE,UAAW,EAAOwkC,aAAY,SAAG5oC,EAAMoN,WAmF5Cy7B,eAhF6B7oC,IAC7B,gBAAKoE,UAAW,EAAOykC,eAAc,SAAG7oC,EAAMoN,WAgF9C07B,gBA7E8B9oC,IAC9B,gBAAKoE,UAAW,EAAO0kC,gBAAe,SAAG9oC,EAAMoN,WA6E/C27B,MA1EoB/oC,IAKpB,IAAIgpC,EAAYhpC,EAAMyP,mBACtB,OAAKzP,EAAM2E,OAOP3E,EAAMwP,iBAA4B0J,IAAd8vB,IACpBA,EAAY,SAGXA,GAA2B,SAAdA,GAKd,UAAC,IAAS,CAAC5kC,UAAW,IAAW,EAAO2kC,OAAM,UACzC/oC,EAAM2E,MACN3E,EAAMwP,YAEH,iEAEA,gDAVD,SAAC,IAAS,CAACpL,UAAW,EAAO2kC,MAAK,SAAG/oC,EAAM2E,SAX3C,IAwBV,EA4CDskC,WAzCyBjpC,IACxBA,EAAMkpC,YAAclpC,EAAMmpC,kBACvB,SAAC,IAAQ,CAACC,KAAK,cAAchlC,UAAW,EAAO6kC,WAAU,SACpD,CAACjpC,EAAMkpC,WAAYlpC,EAAMmpC,gBAAgBp/B,OAAOghB,SAASC,KAAK,QAuCvEqe,gBAnC8BrpC,GAC9BA,EAAM4P,iBACF,SAAC,IAAc,CAACxL,UAAW,EAAOklC,eAAc,SAAGtpC,EAAM4P,iBAkC7D25B,OA5BqBvpC,GACrBA,EAAMoN,WAAY,gBAAKhJ,UAAW,EAAOolC,WAAU,SAAGxpC,EAAMoN,WA4B5Dq8B,QAhCsBzpC,GACtBA,EAAMoN,WAAY,gBAAKhJ,UAAW,EAAOslC,YAAW,SAAG1pC,EAAMoN,WAgC7Du8B,MA3BmB,cAAuC,CAACC,EAAQ79B,KACnE,SAAC,IAAS,CACNA,IAAKA,EACL3H,UAAW,EAAG0L,eAAgB,IAAW,EAAO65B,MAAO75B,GAAa,EAAO,mBAyB/E+5B,SArBsB,cAAqD,CAAC7pC,EAAO+L,KACnF,SAAC,IAAY,eACTA,IAAKA,GACD/L,EAAK,CACToE,UAAW,EAAG0L,eACV,IAAW9P,EAAMoE,UAAW,EAAOylC,SAAU/5B,GAAa,EAAO,oB,uEC9D7E,MAAMP,EAAY,cAGhB,CAACvP,EAAO+L,K,MACN,MAAQ+9B,OAAQC,EAAa5M,KAAM6M,IAAmB,OAGpDhqC,EAAO,CACL2E,MAAO3E,EAAM2E,MACbukC,WAAYlpC,EAAMkpC,WAClBt5B,eAAgB5P,EAAM4P,eACtBu5B,eAAgBnpC,EAAMmpC,eACtBc,YAAajqC,EAAMiqC,YACnBx6B,mBAAoBzP,EAAMyP,qBAG9B,OACI,UAAC,IAAUtD,KAAI,iBACP69B,EAAc,CAClBE,aAAcH,EAAYZ,eAE1BgB,mBAAqD,QAAjC,EAAAH,EAAeG,0BAAkB,QAAI,OAAM,WAE/D,UAAC,IAAUvB,aAAY,YACnB,SAAC,IAAUG,MAAK,CACZpkC,MAAOolC,EAAYplC,MACnB6K,WAAYw6B,EAAex6B,WAC3BC,mBAAoBzP,EAAMyP,sBAE9B,SAAC,IAAUw5B,WAAU,CACjBC,WAAYa,EAAYb,WACxBC,eAAgBY,EAAYZ,qBAIpC,UAAC,IAAUN,eAAc,YACrB,SAAC,IAAUc,MAAK,CAAC59B,IAAKA,IACrB/L,EAAMiqC,cAAe,SAAC,IAAUR,QAAO,UAAEzpC,EAAMiqC,iBAGnDF,EAAYn6B,iBACT,SAAC,IAAUk5B,gBAAe,WACtB,SAAC,IAAUO,gBAAe,CAACz5B,eAAgBm6B,EAAYn6B,sBAItE,IAGL,K,uEC/EO,MAAMw6B,EAAoC,CAC7CC,EACAP,KAEA,MAAMQ,EAAyBrrC,OAAOsrC,KAAKF,GAAOtgC,QAC7C2Z,IAASzkB,OAAOsrC,KAAKT,GAAQnmC,SAAS+f,KAGrCyZ,GAAO,OAAKkN,EAAOC,GACzB,MAAO,CAAER,SAAQ3M,OAAM,C","sources":["webpack:///../../packages/icons/src/coopLogos/coop.svg","webpack:///../../packages/icons/src/logos/facebook.mono.svg","webpack:///../../packages/icons/src/logos/x.mono.svg","webpack:///../../packages/icons/src/stroke2/arrow-left.svg","webpack:///../../packages/icons/src/stroke2/bag1.svg","webpack:///../../packages/icons/src/stroke2/heart.svg","webpack:///../../packages/icons/src/stroke2/home.svg","webpack:///../../packages/icons/src/stroke2/search.svg","webpack:///../../packages/components/src/Search/Search.module.scss","webpack:///./src/microApps/common/components/molecules/CncFlyIn.tsx","webpack:///./src/microApps/common/hooks/usePageConsumptionTracking.ts","webpack:///./src/microApps/member/components/Consent/Consent.module.less","webpack:///./src/microApps/member/components/Consent/Consent.tsx","webpack:///./src/microApps/member/components/Consent/ConsentAdobe.tsx","webpack:///./src/microApps/member/components/Consent/ConsentSwitch.tsx","webpack:///./src/utility/upscopeUtils.ts","webpack:///../../packages/icons/src/stroke2/shield.svg","webpack:///./src/microApps/base/components/UpscopeTriggerButton.tsx","webpack:///../../packages/icons/src/logos/instagram.mono.svg","webpack:///./src/microApps/base/components/Footer/ConsentButton.tsx","webpack:///./src/microApps/base/components/Footer/Footer.module.less","webpack:///./src/microApps/base/components/Footer/FooterColumn.tsx","webpack:///./src/microApps/base/components/Footer/FooterColumns.tsx","webpack:///./src/microApps/base/components/Footer/FooterContact.tsx","webpack:///./src/microApps/base/components/Footer/FooterLogos.tsx","webpack:///./src/microApps/base/components/Footer/FooterMobile.tsx","webpack:///../../packages/icons/src/logos/youtube.mono.svg","webpack:///../../packages/icons/src/logos/linkedin.mono.svg","webpack:///./src/microApps/base/components/Footer/FooterSocial.tsx","webpack:///./src/microApps/base/components/Footer/BaseFooter.tsx","webpack:///./src/microApps/base/components/Footer/FooterMobileApps.tsx","webpack:///./src/microApps/base/components/Footer/Footer.tsx","webpack:///./src/microApps/base/components/ImpersonationNotice/ImpersonationNotice.tsx","webpack:///./src/microApps/base/components/CommonLayout/CommonLayout.tsx","webpack:///./src/microApps/base/components/Header/EpiQuickNavigatorButton/EpiQuickNavigatorButton.tsx","webpack:///./src/microApps/base/components/Header/EpiQuickNavigatorButton/EpiQuickNavigatorButton.hooks.ts","webpack:///./src/microApps/base/components/GlobalSearch/GlobalSearchBar.tsx","webpack:///./src/microApps/base/components/GlobalSearch/GlobalSearchContext.tsx","webpack:///./src/microApps/base/components/GlobalSearch/GlobalSearchOverlay.tsx","webpack:///./src/microApps/base/components/GlobalSearch/GlobalSearch.tsx","webpack:///./src/microApps/base/components/GlobalSearch/GlobalSearch.utils.ts","webpack:///./src/microApps/base/components/Header/GlobalHeader.tsx","webpack:///./src/microApps/base/components/Header/HeaderBanner.tsx","webpack:///./src/microApps/base/components/Header/FeaturedNavigation.tsx","webpack:///./src/microApps/base/components/Header/HeaderFluidBanner.tsx","webpack:///../../packages/icons/src/stroke2/menu1.svg","webpack:///./src/microApps/base/components/Header/HeaderLeftNav.tsx","webpack:///../../packages/icons/src/stroke2/dotted-circle.svg","webpack:///./src/microApps/base/components/MyCoopProfileFlyIn/MenuHeaderBonusSystem/MenuHeaderBonusSystem.module.less","webpack:///./src/microApps/base/components/MyCoopProfileFlyIn/MenuHeaderBonusSystem/MenuHeaderBonusSystem.tsx","webpack:///./src/microApps/base/components/MyCoopProfileFlyIn/MyCoopProfileMenu.tsx","webpack:///../../packages/icons/src/stroke2/bag2.svg","webpack:///./src/microApps/base/components/MyCoopProfileFlyIn/MyCoopProfileFlyIn.module.less","webpack:///./src/microApps/base/components/MyCoopProfileFlyIn/MyCoopProfileFlyIn.tsx","webpack:///../../packages/icons/src/stroke2/overview.svg","webpack:///./src/microApps/base/components/Header/CncTrigger.tsx","webpack:///../../packages/icons/src/stroke2/menu5.svg","webpack:///../../packages/components/src/PopoverDialog/PopoverDialog.tsx","webpack:///../../packages/components/src/PopoverDialog/PopoverDialog.module.scss","webpack:///../../packages/components/src/PopoverLinkList/PopoverLinkList.tsx","webpack:///../../packages/components/src/PopoverLinkList/PopoverLinkList.module.scss","webpack:///./src/microApps/base/components/Header/HeaderProfileDropdown/HeaderProfilePopover.tsx","webpack:///./src/microApps/base/components/Header/HeaderProfileDropdown/HeaderProfilePopover.module.less","webpack:///./src/microApps/base/components/Header/HeaderProfileDropdown/HeaderProfilePopover.utils.ts","webpack:///./src/microApps/base/components/Header/HeaderProfileDropdown/HeaderProfileDropdown.tsx","webpack:///./src/microApps/base/components/Header/HeaderRightNav.tsx","webpack:///../../packages/components/src/TooltipNotification/TooltipNotification.module.scss","webpack:///../../packages/components/src/TooltipNotification/TooltipNotification.tsx","webpack:///./src/microApps/base/components/LoginReminderTooltip/LoginReminderTooltip.tsx","webpack:///./src/microApps/base/components/Header/HeaderStickyBanner.tsx","webpack:///./src/microApps/base/components/Header/Header.hooks.ts","webpack:///./src/microApps/base/components/Header/HeaderSearch.tsx","webpack:///./src/microApps/base/components/HeaderAlerts/HeaderAlerts.types.ts","webpack:///./src/microApps/base/components/HeaderAlerts/HeaderAlerts.utils.ts","webpack:///./src/microApps/base/components/HeaderAlerts/Alert.tsx","webpack:///./src/microApps/base/components/HeaderAlerts/HeaderAlerts.tsx","webpack:///./src/microApps/base/components/HeaderAlerts/HeaderAlertsPortal.tsx","webpack:///./src/microApps/base/components/HeaderIconButton/HeaderIconButton.module.less","webpack:///./src/microApps/base/components/HeaderIconButton/HeaderIconButton.tsx","webpack:///./src/microApps/episerver/api/localContentApi.ts","webpack:///./src/microApps/base/components/MyCoopProfileFlyIn/MyCoopProfileFlyIn.hooks.ts","webpack:///./src/microApps/base/components/SearchOverlay/SearchOverlay.tsx","webpack:///./src/microApps/base/components/SearchOverlay/SearchOverlay.module.less","webpack:///./src/microApps/base/components/UserTypeModeSwitch/UserTypeModeSwitch.module.less","webpack:///./src/microApps/base/components/UserTypeModeSwitch/UserTypeModeSwitch.tsx","webpack:///./src/microApps/base/models/SearchFromPageType.ts","webpack:///./src/microApps/cart/components/atoms/CartSummaryAccessibilityLogger.tsx","webpack:///./src/microApps/common/exceptions/exceptionDefinitions.ts","webpack:///./src/microApps/cart/components/molecules/CartErrorNotice.tsx","webpack:///./src/microApps/common/components/A11yAnnouncer/DelayedA11yAnnouncer.tsx","webpack:///./src/microApps/common/components/atoms/FlyInNavigation.tsx","webpack:///./src/microApps/common/components/atoms/NoticeRibbon/NoticeRibbon.types.ts","webpack:///./src/microApps/common/components/atoms/NoticeRibbon/NoticeRibbon.tsx","webpack:///./src/microApps/common/components/atoms/StickyBottom/StickyBottom.tsx","webpack:///./src/microApps/common/components/molecules/ComponentPortals.tsx","webpack:///./src/microApps/common/hooks/useEventCallback.ts","webpack:///./src/microApps/common/hooks/useAsyncAbortableDispatcher.ts","webpack:///./src/microApps/common/hooks/useConstant.ts","webpack:///./src/microApps/common/hooks/useCurrentStoreSync.tsx","webpack:///./src/microApps/common/hooks/useDocumentPropertyHeightSetter.ts","webpack:///./src/microApps/common/tracking/ga4/bonus/ga4BonusEvents.ts","webpack:///./src/microApps/common/tracking/ga4/search/ga4SearchEvents.ts","webpack:///./src/microApps/common/tracking/hooks/useSearchOverlayGA4Tracking.ts","webpack:///./src/microApps/ecommerce/components/EcommerceLayout/EcommerceSearch.tsx","webpack:///./src/microApps/ecommerce/components/EcommerceSearchBar/EcommerceSearchBar.utils.ts","webpack:///./src/microApps/ecommerce/components/EcommerceSearchBar/EcommerceSearchOverlay.tsx","webpack:///./src/microApps/ecommerce/components/EcommerceSearchBar/SearchAutocompleteAbTestContext.tsx","webpack:///./src/microApps/ecommerce/components/EcommerceSearchBar/EcommerceSearchBar.tsx","webpack:///./src/microApps/ecommerce/contexts/ecommerceProductSearchStateContext.tsx","webpack:///./src/utility/abTests.ts","webpack:///./src/microApps/ecommerce/hooks/useAbTests.ts","webpack:///./src/microApps/member/pointshop/hooks/useEligibleForBonus.ts","webpack:///./src/microApps/member/pointshop/hooks/useHouseholdPointBalance.ts","webpack:///./src/microApps/member/pointshop/pointsQueryKeys.ts","webpack:///./src/microApps/myCoop/components/BonusInfoConfirm/BonusInfoConfirm.tsx","webpack:///./src/microApps/myCoop/components/BonusInfoConfirm/BonusInfoConfirm.module.scss","webpack:///./src/microApps/myCoop/hooks/useMyCoopSettingsPageQuery.ts","webpack:///./src/microApps/myCoop/profileMenu/ProfileMenuList/ProfileMenuList.module.scss","webpack:///./src/microApps/myCoop/profileMenu/ProfileMenuList/ProfileMenuList.utils.ts","webpack:///./src/microApps/myCoop/profileMenu/ProfileMenuList/ProfileMenuList.tsx","webpack:///./src/microApps/search/contexts/searchStateContext.ts","webpack:///./src/microApps/common/hooks/useSearchDropdownState.ts","webpack:///./src/microApps/search/hooks/useGlobalSearchState.ts","webpack:///./src/microApps/search/hooks/useProductSearchStateContext.ts","webpack:///./src/microApps/search/models/SearchResultType.ts","webpack:///./src/microApps/search/utils/globalSearchRoutes.ts","webpack:///./src/microApps/search/utils/searchResultUtils.ts","webpack:///../../packages/components/src/Button/IconButton.tsx","webpack:///../../packages/components/src/Search/Search.tsx","webpack:///../../packages/components/src/Search/SearchActions.tsx","webpack:///../../packages/components/src/Search/SearchContent.tsx","webpack:///../../packages/components/src/Search/SearchInputSlot.tsx","webpack:///../../packages/components/src/Search/Search.utils.ts","webpack:///../../packages/components/src/Search/SearchRoot.tsx","webpack:///../../packages/components/src/SearchAutocomplete/Popover.tsx","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.module.scss","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.tsx","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.hooks.ts","webpack:///../../packages/hooks/src/useResizeObserver.ts","webpack:///../../packages/components/src/SearchAutocomplete/SearchAutocomplete.utils.ts","webpack:///../../packages/components/src/Snackbar/Snackbar.module.scss","webpack:///../../packages/components/src/Snackbar/Snackbar.tsx","webpack:///../../packages/components/src/TextField/TextField.module.scss","webpack:///../../packages/components/src/TextField/TextField.tsx","webpack:///../../packages/components/src/TextInput/TextInput.tsx","webpack:///../../packages/utils/src/splitCustomObjectFromIntersection.ts"],"sourcesContent":["var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCoop = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 183 64\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Variant=Coop Green\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"layer\",\n d: \"M156.933 43.5162C149.832 43.5162 146.951 38.1727 146.951 32.2355C146.951 26.1994 149.881 20.8559 156.933 20.8559C164.035 20.8559 166.915 26.1994 166.915 32.2355C166.965 38.1727 164.035 43.5162 156.933 43.5162V43.5162ZM107.966 43.5162C100.864 43.5162 97.984 38.1727 97.984 32.2355C97.984 26.1994 100.914 20.8559 107.966 20.8559C115.068 20.8559 117.948 26.1994 117.948 32.2355C117.948 38.1727 115.068 43.5162 107.966 43.5162ZM61.7304 43.5162C54.6287 43.5162 51.7483 38.1727 51.7483 32.2355C51.7483 26.1994 54.6287 20.8559 61.7304 20.8559C68.8322 20.8559 71.7126 26.1994 71.7126 32.2355C71.7126 38.1727 68.8322 43.5162 61.7304 43.5162ZM156.933 11.0596C145.312 11.0596 135.876 15.9083 132.45 24.5667C129.023 15.9083 119.587 11.0596 107.966 11.0596C97.6364 11.0596 89.0448 14.8693 84.8235 21.796C80.6518 14.9187 72.0602 11.0596 61.7304 11.0596C47.0303 11.0596 35.8066 18.8274 35.8066 32.1861C35.8066 35.5505 36.5019 38.5685 37.8428 41.1908C37.6938 41.2403 37.4951 41.3392 37.3462 41.3887C36.7005 41.6361 35.9556 41.8835 35.161 42.1308C33.1249 42.6751 30.8404 42.972 28.5559 42.972C21.9011 42.972 15.892 38.8159 15.892 32.384C15.892 25.4078 21.0072 21.2517 27.662 21.2517C30.1948 21.3012 32.1813 21.4496 34.1678 22.1423C34.1678 22.1423 36.4522 17.1452 40.3259 14.2755C39.581 13.9292 38.7864 13.5829 37.9918 13.2365C34.5154 11.7522 30.4431 11.0596 25.8741 11.0596C11.1741 11.0596 0 18.8274 0 32.1861C0 45.4953 11.1741 53.2631 25.8741 53.2631C29.7478 53.2631 34.0684 52.7188 37.7931 51.6798C39.1837 51.3335 42.4614 50.245 44.8452 48.8597C49.3148 51.7293 55.175 53.2631 61.7304 53.2631C72.0602 53.2631 80.6518 49.4534 84.8731 42.5267C89.0944 49.4039 97.686 53.2631 108.016 53.2631C118.346 53.2631 126.888 49.4534 131.109 42.5761V63.9995H146.902V51.8777C149.981 52.7683 153.358 53.2631 156.983 53.2631C171.683 53.2631 182.857 45.5447 182.857 32.1861C182.857 18.8274 171.633 11.0596 156.933 11.0596Z\"\n }))));\n};\nexport default SvgCoop;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFacebookmono = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Brand=facebook, monochrome=True\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Vector\",\n d: \"M16.7473 6.0625H14.4626C13.7323 6.0625 13.1848 6.36175 13.1848 7.11819V8.4375H16.7473L16.4647 12H13.1848V21.5H9.62231V12H7.24731V8.4375H9.62231V6.15394C9.62231 3.75281 10.8858 2.5 13.7323 2.5H16.7473V6.0625Z\"\n }))));\n};\nexport default SvgFacebookmono;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgXmono = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 1200 1227\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z\"\n })));\n};\nexport default SvgXmono;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgArrowLeft = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10.7071 4.2924C10.3166 3.90188 9.68342 3.90188 9.29289 4.2924L2.29289 11.2924C1.90237 11.6829 1.90237 12.3161 2.29289 12.7066L9.29289 19.7066C9.68342 20.0971 10.3166 20.0971 10.7071 19.7066C11.0976 19.3161 11.0976 18.6829 10.7071 18.2924L5.41421 12.9995L16 12.9995C18.2091 12.9995 20 14.7904 20 16.9995C20 17.5518 20.4477 17.9995 21 17.9995C21.5523 17.9995 22 17.5518 22 16.9995C22 13.6858 19.3137 10.9995 16 10.9995L5.41421 10.9995L10.7071 5.70662C11.0976 5.31609 11.0976 4.68293 10.7071 4.2924Z\"\n })));\n};\nexport default SvgArrowLeft;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBag1 = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.514 2.14266C9.98758 2.42681 10.1411 3.04107 9.857 3.51465L7.7657 7.00015H16.2333L14.142 3.51465C13.8579 3.04107 14.0114 2.42681 14.485 2.14266C14.9586 1.85851 15.5729 2.01208 15.857 2.48566L18.5657 7.00015H20.7187C22.0199 7.00015 22.9746 8.22293 22.659 9.48522L20.159 19.4852C19.9364 20.3756 19.1365 21.0002 18.2187 21.0002H5.78028C4.86255 21.0002 4.06258 20.3756 3.84 19.4852L1.34 9.48522C1.02442 8.22293 1.97914 7.00015 3.28028 7.00015H5.43332L8.14201 2.48566C8.42616 2.01208 9.04042 1.85851 9.514 2.14266ZM5.98117 9.00015H3.28028L5.78028 19.0002H18.2187L20.7187 9.00015H18.0178C18.0062 9.00035 17.9946 9.00035 17.9831 9.00015H6.01595C6.00437 9.00035 5.99277 9.00035 5.98117 9.00015Z\"\n })));\n};\nexport default SvgBag1;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgHeart = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 22C11.8 22 11.7 22 11.5 21.9C11.4 21.8 8 19.8 5.5 17.6C2.5 14.8 1 12 1 9.2C1 5.8 3.8 3 7.3 3C9.1 3 10.8 3.8 12 5.1C13.2 3.8 14.9 3 16.7 3C20.2 3 23 5.8 23 9.2C23 12.2 21.6 14.8 18.5 17.6C16 19.8 12.7 21.8 12.5 21.9C12.4 22 12.2 22 12 22ZM7.3 5C4.9 5 3 6.9 3 9.2C3 11.4 4.3 13.8 6.8 16.1C8.6 17.7 10.9 19.2 12 19.9C13 19.3 15.4 17.7 17.2 16.1C19.8 13.8 21 11.6 21 9.2C21 6.9 19.1 5 16.7 5C15.1 5 13.6 5.9 12.9 7.3C12.6 7.9 11.5 7.9 11.1 7.3C10.4 5.9 8.9 5 7.3 5Z\"\n })));\n};\nexport default SvgHeart;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgHome = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.82896 3.10508C5.16774 2.42752 5.86027 1.99951 6.61781 1.99951H17.3817C18.1393 1.99951 18.8318 2.42752 19.1706 3.10508L22.1706 9.10508C22.7378 10.2395 22.1174 11.5449 20.9998 11.9039V20.9995C20.9998 21.5518 20.5521 21.9995 19.9998 21.9995H3.99978C3.4475 21.9995 2.99978 21.5518 2.99978 20.9995V11.9039C1.88217 11.5449 1.26173 10.2395 1.82896 9.10508L4.82896 3.10508ZM4.99978 11.9995V19.9995H6.99978V14.9995C6.99978 14.4472 7.4475 13.9995 7.99978 13.9995H15.9998C16.5521 13.9995 16.9998 14.4472 16.9998 14.9995V19.9995H18.9998V11.9995H4.99978ZM14.9998 19.9995V15.9995H12.9998V19.9995H14.9998ZM10.9998 19.9995V15.9995H8.99978V19.9995H10.9998ZM17.3817 3.99951H6.61782L3.61781 9.99951H20.3817L17.3817 3.99951Z\"\n })));\n};\nexport default SvgHome;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSearch = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M15.1215 6.63627C12.7784 4.29312 8.97941 4.29312 6.63627 6.63627C4.29312 8.97941 4.29312 12.7784 6.63627 15.1215C8.97941 17.4647 12.7784 17.4647 15.1215 15.1215C17.4647 12.7784 17.4647 8.97941 15.1215 6.63627ZM5.22205 5.22205C8.34625 2.09786 13.4116 2.09786 16.5358 5.22205C19.4205 8.10678 19.6416 12.6465 17.1991 15.7849L20.7784 19.3642C21.1689 19.7547 21.1689 20.3879 20.7784 20.7784C20.3879 21.1689 19.7547 21.1689 19.3642 20.7784L15.7849 17.1991C12.6465 19.6416 8.10678 19.4205 5.22205 16.5358C2.09786 13.4116 2.09786 8.34625 5.22205 5.22205Z\"\n })));\n};\nexport default SvgSearch;","// extracted by mini-css-extract-plugin\nexport default {\"Search\":\"ZJoyxDAW\",\"Search--hidden\":\"dcXQdb7D\",\"Search-content\":\"oDq6An2m\",\"Search-input\":\"rXjMsUPA\",\"Search-actions\":\"gIEZRGNZ\",\"Search-icon\":\"vJ6gvrQv\",\"Search--large\":\"awlM8ShU\",\"Search--medium\":\"K6UbBi1w\",\"Search--small\":\"dozh4_al\"};","import { OverlayLoader } from '@coop/components';\nimport { lazy, Suspense } from 'react';\n\nimport { useCncFlyInState } from '../../hooks/useCncFlyInState';\nimport { FlyIn } from '../atoms/Modal';\n\nconst CncStepSwitcher = lazy(() => import('../../../cnc/components/CncStepSwitcher'));\n\nconst CncFlyIn = () => {\n const { isOpen, close, afterClose } = useCncFlyInState();\n\n return (\n <FlyIn isOpen={isOpen} close={close} afterClose={afterClose} additionalClasses=\"u-textLeft\">\n <Suspense fallback={<OverlayLoader isLoading />}>\n <CncStepSwitcher />\n </Suspense>\n </FlyIn>\n );\n};\n\nexport default CncFlyIn;\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\n/* eslint-disable no-console */\nimport { appInsights } from '../../../appInsights';\nimport { ensureLeadingSlash } from '../utils/urlUtils';\n\nconst sendPageViewToApplicationInisghts = (pathname: string) => {\n appInsights.trackPageView({ uri: pathname });\n console.logNotProd('PageView sent to AI:', ensureLeadingSlash(pathname));\n};\n\nconst pathnamesAlreadySent: string[] = [];\n\nexport const usePageConsumptionTracking = (when: boolean = true) => {\n const location = useLocation();\n\n useEffect(() => {\n if (when && !pathnamesAlreadySent.includes(location.pathname)) {\n sendPageViewToApplicationInisghts(location.pathname);\n pathnamesAlreadySent.push(location.pathname);\n }\n }, [when, location.pathname]);\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"OuterContainer\":\"oC4dcuv8\",\"CloseButtoDiv\":\"nXVjTT4W\",\"Container\":\"TFNsuUh4\",\"Headline\":\"y317uNCx\",\"InnerContent\":\"D4PEUbcq\",\"CheckboxDiv\":\"J3M5QW9b\",\"Checkbox\":\"cMfsEvhD\",\"ConditionText\":\"CyZHE2gc\",\"ButtonContainer\":\"lb_h_hoy\",\"ReadMore\":\"Z6z372OE\",\"OuterContainerIsMobile\":\"fYt4JvtI\",\"ScrollableContent\":\"IHwR4ADe\"};","import { Button, Checkbox, ChipIconButton, Modal, ModalHeader } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport { appConfig } from '../../../../appConfig';\nimport {\n IDS_REDIRECTREASON_QUERY,\n IDS_REDIRECTREASON_QUERYVALUE_SIGNUP,\n} from '../../../../utility/consts';\nimport { Helpers } from '../../../../utility/helpers';\nimport Image from '../../../common/components/atoms/Image';\nimport { useIsMobile } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport useModal from '../../../common/hooks/useModal';\nimport {\n useHasUserAKimCustomerId,\n useIsUserAuthenticated,\n} from '../../../common/hooks/useUserProfile';\nimport persistance from '../../../common/persistance/persistance';\nimport { FullOverlayType } from '../../../common/store/structureDefinitions/modalState';\nimport { ga4EmailSubscriptionEvents } from '../../../common/tracking/ga4/emailSubscription';\nimport { useSubscribeConsent } from '../../../consent/components/hooks/useSubscribeConsent';\nimport useConsentQuery from '../../../myCoop/consentSubscriptions/hooks/useConsentQuery';\nimport { useMyCoopSettingsPageQuery } from '../../../myCoop/hooks/useMyCoopSettingsPageQuery';\nimport {\n MEMBER_CONSENT_NEWSLETTERS_EMAIL,\n MEMBER_CONSENT_NEWSLETTERS_SMS,\n MEMBER_CONSENT_QUERY,\n} from '../../consts';\nimport { useKimCustomerDataQuery } from '../../hooks/useKimCustomerDataQuery';\nimport memberUtils from '../../member.utils';\nimport styles from './Consent.module.less';\n\nconst Consent: React.FC = () => {\n const [isDisbled, setIsDisbled] = React.useState(true);\n\n const { isOpen, close, open } = useModal(FullOverlayType.ConsentBox);\n\n const isLoggedIn = useIsUserAuthenticated();\n const hasKimCustomerId = useHasUserAKimCustomerId();\n const isMobile = useIsMobile();\n\n const { enableConsentSms } = appConfig.coopSettings.featureFlags;\n const { consentPhonePageUrl } = appConfig.coopSettings;\n\n const hasRedirectQuery = Helpers.getParameterByName(IDS_REDIRECTREASON_QUERY);\n const hasMemberConsentQuery = Helpers.getParameterByName(MEMBER_CONSENT_QUERY);\n const shouldShowConsent =\n (hasRedirectQuery === IDS_REDIRECTREASON_QUERYVALUE_SIGNUP || !!hasMemberConsentQuery) &&\n isLoggedIn;\n\n const hasQuery = Helpers.getParameterByName(IDS_REDIRECTREASON_QUERY);\n\n const { data: kimCustomerData } = useKimCustomerDataQuery(hasKimCustomerId);\n const { data: consentSubscriptions, isLoading: isLoadingSubscriptions } = useConsentQuery(\n hasQuery === 'signup' && isLoggedIn,\n );\n\n const kimPhoneNumberVerified = memberUtils.kimPhoneNumberVerified(kimCustomerData);\n\n const subscribeNowMutation = useSubscribeConsent();\n\n React.useEffect(() => {\n if (subscribeNowMutation.isSuccess) {\n // if phonenumber is not verified (or missing), go to phone consent\n if (enableConsentSms && kimCustomerData && !kimPhoneNumberVerified) {\n window.location.href = consentPhonePageUrl;\n return;\n }\n\n close();\n }\n }, [\n close,\n consentPhonePageUrl,\n enableConsentSms,\n kimCustomerData,\n kimPhoneNumberVerified,\n subscribeNowMutation.isSuccess,\n ]);\n\n const { data: settingsTexts } = useMyCoopSettingsPageQuery();\n\n useEffect(() => {\n if (shouldShowConsent && !isLoadingSubscriptions) {\n const allNewsletters = MEMBER_CONSENT_NEWSLETTERS_EMAIL;\n\n // Check if user has ANY consent, then dont show this modal.\n const hasConsent = consentSubscriptions?.some(\n (item) => allNewsletters.includes(item.id) && item.accepted,\n );\n\n if (!hasConsent) {\n persistance.consentShownSession.add();\n open();\n }\n }\n }, [consentSubscriptions, isLoadingSubscriptions, open, shouldShowConsent]);\n\n const handleCheckedChanged = (checked: boolean) => {\n setIsDisbled(!checked);\n };\n const approveClicked = () => {\n const allConsentsToTurnOn = MEMBER_CONSENT_NEWSLETTERS_EMAIL;\n\n // if phonenumber is verified, add sms consent too\n if (enableConsentSms && kimPhoneNumberVerified) {\n allConsentsToTurnOn.push(MEMBER_CONSENT_NEWSLETTERS_SMS);\n }\n\n subscribeNowMutation.mutate(allConsentsToTurnOn);\n };\n\n const skippedClicked = () => {\n ga4EmailSubscriptionEvents.skip.sendEmailSubscriptionInteraction();\n close();\n };\n const onClose = () => {\n ga4EmailSubscriptionEvents.close.sendEmailSubscriptionInteraction();\n close();\n };\n\n return (\n <Modal\n isOpen={isOpen}\n close={onClose}\n additionalClasses={classNames(\n styles.OuterContainer,\n isMobile ? styles.OuterContainerIsMobile : '',\n )}\n >\n <div className={styles.CloseButtoDiv}>\n <ChipIconButton\n theme=\"whiteGreen\"\n onClick={onClose}\n size={32}\n icon={CloseIcon}\n label=\"Stäng\"\n className={styles.CloseButton}\n />\n </div>\n <div className={styles.Container}>\n <ModalHeader className={styles.Headline}>\n Missa inget av det alldeles särskilt extra\n </ModalHeader>\n <div className={styles.InnerContent}>\n <Image src=\"/Assets/Icons/paperplane.svg\" height=\"114\" width=\"136\" alt=\"\" />\n <div className={styles.CheckboxDiv}>\n <Checkbox\n indicatorVerticalPosition=\"top\"\n className={styles.Checkbox}\n aria-label={settingsTexts?.consentCheckboxText}\n id=\"jatack\"\n onCheckedChange={handleCheckedChanged}\n label={\n settingsTexts?.consentCheckboxText ??\n 'Ja tack! Jag vill ha goda kampanjer och personliga erbjudanden frÃ¥n Coop, X:-tra och samarbetspartners.'\n }\n />\n {settingsTexts && (\n <div className={styles.ConditionText}>\n <p>\n Och du! Självklart kan du när som helst Ã¥terkalla ditt samtycke\n eller ändra inställningar för utskick.\n </p>\n <p>\n {settingsTexts.personalDataLink.url && (\n <>\n Läs gärna{' '}\n <a\n href={settingsTexts.personalDataLink.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n integritetspolicyn\n </a>{' '}\n för att se hur Coop hanterar personuppgifter.\n </>\n )}\n </p>\n </div>\n )}\n </div>\n <div className={styles.ButtonContainer}>\n <Button\n theme=\"primary\"\n onClick={approveClicked}\n fullWidth\n disabled={isDisbled}\n >\n Godkänn\n </Button>\n <Button theme=\"primaryOutline\" onClick={skippedClicked} fullWidth>\n Nej tack\n </Button>\n </div>\n {settingsTexts?.aboutCoopLink?.url &&\n settingsTexts?.aboutCoopAssociationsLink?.url && (\n <div className={styles.ReadMore}>\n <p>\n Vilka är{' '}\n <a\n href={settingsTexts.aboutCoopLink.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"Vilka är Coop\"\n >\n Coop\n </a>{' '}\n och{' '}\n <a\n href={settingsTexts.aboutCoopAssociationsLink.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"Vilka är Konsumentföreningarna\"\n >\n Konsumentföreningarna\n </a>\n ?\n </p>\n </div>\n )}\n </div>\n </div>\n </Modal>\n );\n};\n\nexport default Consent;\n","import { Button, Checkbox, ChipIconButton, Modal, ModalHeader } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport { useMutation } from '@tanstack/react-query';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport {\n IDS_REDIRECTREASON_QUERY,\n IDS_REDIRECTREASON_QUERYVALUE_SIGNUP,\n} from '../../../../utility/consts';\nimport { Helpers } from '../../../../utility/helpers';\nimport Image from '../../../common/components/atoms/Image';\nimport { useIsMobile } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport { consentAdobeSubscriptionFlow } from '../../../common/flow/consentAdobeSubscriptionFlow';\nimport useModal from '../../../common/hooks/useModal';\nimport { useIsUserAuthenticated } from '../../../common/hooks/useUserProfile';\nimport persistance from '../../../common/persistance/persistance';\nimport { FullOverlayType } from '../../../common/store/structureDefinitions/modalState';\nimport { ga4EmailSubscriptionEvents } from '../../../common/tracking/ga4/emailSubscription';\nimport useEmailSubscriptionQuery from '../../../myCoop/emailSubscriptions/hooks/useEmailSubscriptionQuery';\nimport { useMyCoopSettingsPageQuery } from '../../../myCoop/hooks/useMyCoopSettingsPageQuery';\nimport { ADOBE_MEMBER_CONSENT_NEWSLETTERS_EMAIL, MEMBER_CONSENT_QUERY } from '../../consts';\nimport styles from './Consent.module.less';\n\nconst ConsentAdobe: React.FC = () => {\n const [isDisbled, setIsDisbled] = React.useState(true);\n\n const { isOpen, close, open } = useModal(FullOverlayType.ConsentBox);\n\n const isLoggedIn = useIsUserAuthenticated();\n const isMobile = useIsMobile();\n\n const hasRedirectQuery = Helpers.getParameterByName(IDS_REDIRECTREASON_QUERY);\n const hasMemberConsentQuery = Helpers.getParameterByName(MEMBER_CONSENT_QUERY);\n const shouldShowConsent =\n (hasRedirectQuery === IDS_REDIRECTREASON_QUERYVALUE_SIGNUP || !!hasMemberConsentQuery) &&\n isLoggedIn;\n\n const hasQuery = Helpers.getParameterByName(IDS_REDIRECTREASON_QUERY);\n\n const { data: emailSubscriptions, isLoading: isLoadingSubscriptions } =\n useEmailSubscriptionQuery(false, hasQuery === 'signup' && isLoggedIn);\n\n const subscribeNowMutation = useMutation({\n mutationFn: (service: string | Array<string>) => {\n return consentAdobeSubscriptionFlow.subscribe(\n Array.isArray(service) ? service : [service],\n false,\n );\n },\n onSuccess: () => {\n ga4EmailSubscriptionEvents.confirm.sendEmailSubscriptionInteraction();\n close();\n },\n });\n\n const { data: settingsTexts } = useMyCoopSettingsPageQuery();\n\n // Only run once (or if query changes)\n useEffect(() => {\n if (shouldShowConsent && !isLoadingSubscriptions) {\n const allNewsletters = ADOBE_MEMBER_CONSENT_NEWSLETTERS_EMAIL;\n\n // here check for consent in Adobe. If user has ANY consent, then dont show this modal\n const hasConsent = emailSubscriptions?.services?.some((item) =>\n allNewsletters.includes(item.name),\n );\n\n if (!hasConsent) {\n persistance.consentShownSession.add();\n open();\n }\n }\n }, [emailSubscriptions, isLoadingSubscriptions, open, shouldShowConsent]);\n\n const handleCheckedChanged = (checked: boolean) => {\n setIsDisbled(!checked);\n };\n const approveClicked = () => {\n const allNewsletters = ADOBE_MEMBER_CONSENT_NEWSLETTERS_EMAIL;\n\n // add all emails on the consent list\n subscribeNowMutation.mutate(allNewsletters);\n };\n\n const skippedClicked = () => {\n ga4EmailSubscriptionEvents.skip.sendEmailSubscriptionInteraction();\n close();\n };\n const onClose = () => {\n ga4EmailSubscriptionEvents.close.sendEmailSubscriptionInteraction();\n close();\n };\n\n return (\n <Modal\n isOpen={isOpen}\n close={onClose}\n additionalClasses={classNames(\n styles.OuterContainer,\n isMobile ? styles.OuterContainerIsMobile : '',\n )}\n >\n <div className={styles.CloseButtoDiv}>\n <ChipIconButton\n theme=\"whiteGreen\"\n onClick={onClose}\n size={32}\n icon={CloseIcon}\n label=\"Stäng\"\n className={styles.CloseButton}\n />\n </div>\n <div className={styles.Container}>\n <ModalHeader className={styles.Headline}>\n Missa inget av det alldeles särskilt extra\n </ModalHeader>\n <div className={styles.InnerContent}>\n <Image src=\"/Assets/Icons/paperplane.svg\" height=\"114\" width=\"136\" alt=\"\" />\n <div className={styles.CheckboxDiv}>\n <Checkbox\n indicatorVerticalPosition=\"top\"\n className={styles.Checkbox}\n aria-label={settingsTexts?.consentCheckboxText}\n id=\"jatack\"\n onCheckedChange={handleCheckedChanged}\n label={\n settingsTexts?.consentCheckboxText ??\n 'Ja tack! Jag vill ha goda kampanjer och personliga erbjudanden frÃ¥n Coop, X:-tra och samarbetspartners.'\n }\n />\n {settingsTexts && (\n <div className={styles.ConditionText}>\n <p>\n Och du! Självklart kan du när som helst Ã¥terkalla ditt samtycke\n eller ändra inställningar för utskick.\n </p>\n <p>\n {settingsTexts.personalDataLink.url && (\n <>\n Läs gärna{' '}\n <a\n href={settingsTexts.personalDataLink.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n integritetspolicyn\n </a>{' '}\n för att se hur Coop hanterar personuppgifter.\n </>\n )}\n </p>\n </div>\n )}\n </div>\n <div className={styles.ButtonContainer}>\n <Button\n theme=\"primary\"\n onClick={approveClicked}\n fullWidth\n disabled={isDisbled}\n >\n Godkänn\n </Button>\n <Button theme=\"primaryOutline\" onClick={skippedClicked} fullWidth>\n Nej tack\n </Button>\n </div>\n {settingsTexts?.aboutCoopLink?.url &&\n settingsTexts?.aboutCoopAssociationsLink?.url && (\n <div className={styles.ReadMore}>\n <p>\n Vilka är{' '}\n <a\n href={settingsTexts.aboutCoopLink.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"Vilka är Coop\"\n >\n Coop\n </a>{' '}\n och{' '}\n <a\n href={settingsTexts.aboutCoopAssociationsLink.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"Vilka är Konsumentföreningarna\"\n >\n Konsumentföreningarna\n </a>\n ?\n </p>\n </div>\n )}\n </div>\n </div>\n </Modal>\n );\n};\n\nexport default ConsentAdobe;\n","import { appConfig } from '../../../../appConfig';\nimport Consent from './Consent';\nimport ConsentAdobe from './ConsentAdobe';\n\nconst ConsentSwitch: React.FC = () => {\n const { enableConsentKimApi, enableConsentPage } = appConfig.coopSettings.featureFlags;\n\n if (enableConsentPage) {\n return null;\n }\n\n if (enableConsentKimApi) {\n return <Consent />;\n }\n\n return <ConsentAdobe />;\n};\n\nexport default ConsentSwitch;\n","/* eslint-disable no-param-reassign */\n/* eslint-disable func-names */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable prefer-rest-params */\n/* eslint-disable no-var */\n\n// docs: https://github.com/upscopeio/js-api\n\nimport { GdprCookiePurposes, hasAcceptedGdprPurpose } from './gdpr';\n\n/**\n * Download, initialize Upscope and create session to keep downloading the script on further pages when user navigates on coop.se during the session\n */\nexport const initUpscope = () => {\n if (hasAcceptedGdprPurpose(GdprCookiePurposes.Functional)) {\n // @ts-ignore\n (function (w, u, d) {\n var i = function () {\n // @ts-ignore\n i.c(arguments);\n };\n // @ts-ignore\n i.q = [];\n // @ts-ignore\n i.c = function (args: any) {\n // @ts-ignore\n i.q.push(args);\n };\n const l = function () {\n const s = d.createElement('script');\n s.type = 'text/javascript';\n s.async = true;\n s.src = 'https://code.upscope.io/qPrDRknSJ5.js';\n const x = d.getElementsByTagName('script')[0];\n x.parentNode?.insertBefore(s, x);\n };\n if (typeof u !== 'function') {\n w.Upscope = i;\n l();\n }\n })(window, window.Upscope, document);\n window.Upscope('init');\n window.sessionStorage.setItem('coop_allowupscope', 'true');\n }\n};\n\nconst getLookupCode = (cb: (lookupCode: string) => void) => {\n if (!window.Upscope) {\n initUpscope();\n }\n window.Upscope('getLookupCode', function (code: string) {\n cb(code);\n });\n};\n\nexport default {\n getLookupCode,\n};\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgShield = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.6401 2.067C11.8717 1.97767 12.1283 1.97767 12.3599 2.067L19.3599 4.767C19.7456 4.91578 20 5.28658 20 5.7V12C20 15.1348 17.982 17.6365 16.169 19.2683C15.2435 20.1012 14.3224 20.7521 13.6345 21.1943C13.2895 21.4161 13.0006 21.587 12.7956 21.7038C12.693 21.7622 12.6112 21.8071 12.5538 21.8382C12.525 21.8537 12.5023 21.8657 12.4861 21.8743L12.4667 21.8844L12.4608 21.8875L12.4587 21.8886C12.4587 21.8886 12.4573 21.8893 12 21C11.5427 21.8893 11.542 21.889 11.542 21.889L11.5392 21.8875L11.5333 21.8844L11.5139 21.8743C11.4977 21.8657 11.475 21.8537 11.4462 21.8382C11.3888 21.8071 11.307 21.7622 11.2044 21.7038C10.9994 21.587 10.7105 21.4161 10.3655 21.1943C9.67757 20.7521 8.75654 20.1012 7.83104 19.2683C6.01795 17.6365 4 15.1348 4 12V5.7C4 5.28658 4.2544 4.91578 4.64013 4.767L11.6401 2.067ZM12 21L11.542 21.889C11.8291 22.0366 12.1703 22.0369 12.4573 21.8893L12 21ZM12 19.8532C12.154 19.7623 12.3411 19.6481 12.553 19.5119C13.1776 19.1104 14.0065 18.5238 14.831 17.7817C16.518 16.2635 18 14.2652 18 12V6.3861L12 4.07181L6 6.3861V12C6 14.2652 7.48205 16.2635 9.16896 17.7817C9.99346 18.5238 10.8224 19.1104 11.447 19.5119C11.6589 19.6481 11.846 19.7623 12 19.8532Z\"\n })));\n};\nexport default SvgShield;","import { Button, ConfirmInfo } from '@coop/components';\nimport { useState } from 'react';\n\nimport upscopeUtils from '../../../utility/upscopeUtils';\n\nconst UpscopeTriggerButton = () => {\n const [show, setShow] = useState(false);\n const [upscopeCode, setUpscopeCode] = useState('');\n\n const onClick = () => {\n upscopeUtils.getLookupCode((code) => {\n setUpscopeCode(code);\n setShow(true);\n });\n };\n return (\n <>\n <Button type=\"button\" onClick={onClick} theme=\"light\">\n Skärmdelning via Upscope\n </Button>\n\n <ConfirmInfo\n show={show}\n heading=\"Skärmdelning med kundtjänst\"\n message={`Vänligen ange kod : ${upscopeCode}`}\n close={() => {\n setShow(false);\n }}\n />\n </>\n );\n};\n\nexport default UpscopeTriggerButton;\n","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgInstagrammono = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Brand=instagram, monochrome=True\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Vector\",\n d: \"M11.9956 1.99829C9.27971 1.99829 8.93887 2.01016 7.87219 2.05871C6.8076 2.10746 6.08092 2.276 5.44508 2.5233C4.78737 2.77871 4.22944 3.12038 3.67361 3.67641C3.11736 4.23226 2.77568 4.79017 2.51943 5.44767C2.2715 6.08371 2.10275 6.81058 2.05484 7.87475C2.00713 8.94141 1.99463 9.28246 1.99463 11.9983C1.99463 14.7141 2.00672 15.0539 2.05504 16.1206C2.10401 17.1852 2.27255 17.9118 2.51963 18.5477C2.77526 19.2054 3.11693 19.7633 3.67298 20.3191C4.22862 20.8754 4.78653 21.2179 5.44383 21.4733C6.08008 21.7206 6.80698 21.8891 7.87135 21.9379C8.93804 21.9864 9.27866 21.9983 11.9943 21.9983C14.7104 21.9983 15.0502 21.9864 16.1169 21.9379C17.1815 21.8891 17.909 21.7206 18.5452 21.4733C19.2027 21.2179 19.7598 20.8754 20.3154 20.3191C20.8717 19.7633 21.2134 19.2054 21.4696 18.5479C21.7155 17.9118 21.8842 17.185 21.9342 16.1208C21.9821 15.0541 21.9946 14.7141 21.9946 11.9983C21.9946 9.28245 21.9821 8.94163 21.9342 7.87496C21.8842 6.81037 21.7155 6.08371 21.4696 5.44788C21.2134 4.79016 20.8717 4.23225 20.3154 3.67641C19.7592 3.12016 19.2029 2.7785 18.5446 2.52329C17.9071 2.276 17.18 2.10746 16.1154 2.05871C15.0487 2.01016 14.7091 1.99829 11.9924 1.99829H11.9956ZM11.0985 3.80038C11.3647 3.79996 11.6618 3.80038 11.9956 3.80038C14.6656 3.80038 14.9821 3.80996 16.0364 3.85788C17.0115 3.90246 17.5406 4.06537 17.8931 4.20225C18.3598 4.3835 18.6925 4.60017 19.0423 4.95016C19.3923 5.30017 19.609 5.6335 19.7907 6.10016C19.9275 6.45224 20.0907 6.98141 20.135 7.95642C20.1829 9.01058 20.1934 9.32725 20.1934 11.996C20.1934 14.6647 20.1829 14.9814 20.135 16.0356C20.0904 17.0106 19.9275 17.5398 19.7907 17.8918C19.6094 18.3585 19.3923 18.6908 19.0423 19.0406C18.6923 19.3906 18.36 19.6072 17.8931 19.7885C17.541 19.926 17.0115 20.0885 16.0364 20.1331C14.9823 20.181 14.6656 20.1914 11.9956 20.1914C9.32533 20.1914 9.00887 20.181 7.95469 20.1331C6.97969 20.0881 6.45052 19.9252 6.0978 19.7883C5.63112 19.607 5.29778 19.3904 4.94779 19.0404C4.59778 18.6904 4.38112 18.3579 4.19944 17.891C4.06256 17.5389 3.89944 17.0097 3.85507 16.0348C3.80715 14.9806 3.79756 14.6639 3.79756 11.9935C3.79756 9.32309 3.80715 9.00808 3.85507 7.95392C3.89965 6.97891 4.06256 6.44975 4.19944 6.09725C4.38069 5.63058 4.59778 5.29725 4.94779 4.94725C5.29778 4.59725 5.63112 4.38059 6.0978 4.19892C6.4503 4.06141 6.97969 3.89892 7.95469 3.85412C8.8772 3.81245 9.2347 3.79996 11.0985 3.79787L11.0985 3.80038ZM17.3335 5.46079C16.671 5.46079 16.1335 5.99767 16.1335 6.66037C16.1335 7.32288 16.671 7.86038 17.3335 7.86038C17.996 7.86038 18.5336 7.32288 18.5336 6.66037C18.5336 5.99787 17.996 5.46038 17.3335 5.46038L17.3335 5.46079ZM11.9956 6.86287C9.15949 6.86287 6.8601 9.16225 6.8601 11.9983C6.8601 14.8343 9.15949 17.1327 11.9956 17.1327C14.8316 17.1327 17.1302 14.8343 17.1302 11.9983C17.1302 9.16225 14.8314 6.86287 11.9954 6.86287H11.9956ZM11.9956 8.66496C13.8364 8.66496 15.3289 10.1573 15.3289 11.9983C15.3289 13.8391 13.8364 15.3316 11.9956 15.3316C10.1545 15.3316 8.6622 13.8391 8.6622 11.9983C8.6622 10.1573 10.1545 8.66496 11.9956 8.66496Z\"\n }))));\n};\nexport default SvgInstagrammono;","/* eslint-disable no-underscore-dangle */\nimport { Button, Icon } from '@coop/components';\nimport { ShieldIcon } from '@coop/icons';\n\nconst ConsentButton = () => {\n const showPopup = () => {\n if (window && window.__cmp) {\n window.__cmp('showScreen');\n }\n };\n\n return (\n <Button onClick={showPopup} rightSlot={<Icon icon={ShieldIcon} />} theme=\"light\">\n Inställningar för cookies\n </Button>\n );\n};\n\nexport default ConsentButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"Footer\":\"yHaPZPPc\",\"h2\":\"SnJF1goK\",\"FooterPrimaryContainer\":\"Xvldcimo\",\"FooterColumn\":\"hIGrQQxI\",\"FooterHeading\":\"prOM14vt\",\"FooterItem\":\"PT9oOHuf\",\"FooterLogo\":\"N2SV1uVF\",\"FooterLogoImage\":\"oCV6OCDX\",\"FooterContact\":\"vtsiK_Yy\",\"FooterContactLink\":\"H19vt5Tv\",\"FooterShopOnline\":\"gNojaNHA\",\"FooterShopOnlineItem\":\"do8RW5pw\",\"FooterDownloadApp\":\"LXyRKfSH\",\"QRCode\":\"Mxni5C0c\",\"ScanQR\":\"IPbAioTp\",\"DownloadLinks\":\"MRWcxUzo\",\"FooterSocial\":\"JrKmCAXD\",\"FooterSocialItem\":\"lFJETf7_\",\"FooterSocialIcon\":\"VCGBFncs\",\"FooterList\":\"gkielae3\",\"FooterAccordion\":\"hAnCTaUW\",\"FooterAccordionItem\":\"QeuBeGC7\",\"Divider\":\"BqNnredc\",\"FooterAccordionTrigger\":\"wXdBvkSD\",\"FooterAccordionContent\":\"yUI5Qi0p\"};","import styles from './Footer.module.less';\n\nconst FooterColumn = ({ column }: { column: FooterColumn }) => {\n return (\n <div className={styles.FooterColumn}>\n <ul className={styles.FooterList}>\n <li className={styles.FooterHeading}>\n <h2>\n <a href={column.headerLink?.url}>{column.header}</a>\n </h2>\n </li>\n {column.links\n .filter((_link, index) => index > 0)\n .map((link) => (\n <li className={styles.FooterItem} key={link.contentId}>\n <a href={link.url}>{link.name}</a>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport default FooterColumn;\n","import { CoopSwiperBreakpoints } from '../../../../utility/coopSwiperBreakpoints';\nimport ItemGrid from '../../../ecommerce/components/ItemGrid/ItemGrid';\nimport { useBreakpointsSidebar } from '../../../ecommerce/hooks/useBreakpoints';\nimport FooterColumn from './FooterColumn';\n\nconst FooterColumns = (props: Pick<FrontendFooter, 'columns'>) => {\n const { cellsInRow } = useBreakpointsSidebar(CoopSwiperBreakpoints.AREA_FOOTER_GRID);\n\n return (\n <ItemGrid\n gridClasses=\"Grid--gutterH Grid--gutterVsm u-lg-flexJustifyCenter\"\n cellsInRow={cellsInRow}\n items={props.columns}\n renderItem={(column) => <FooterColumn column={column} />}\n itemUniqueKey={(column, index) => `${column.headerLink?.contentId}_${index}`}\n />\n );\n};\n\nexport default FooterColumns;\n","import { Icon } from '@coop/components';\nimport { CoopLogoIcon } from '@coop/icons';\n\nimport styles from './Footer.module.less';\n\nconst FooterContact = (props: Pick<FrontendFooter, 'bottomLinks'>) => {\n return (\n <>\n <div className={styles.FooterLogo}>\n <a href=\"/\" aria-label=\"Till startsidan\">\n <Icon\n icon={CoopLogoIcon}\n height={26}\n className={styles.FooterLogoImage}\n aria-hidden\n />\n </a>\n </div>\n\n <p className={styles.FooterContact}>\n <span>\n Coop Sverige{' '}\n <a\n className={styles.FooterContactLink}\n href=\"https://www.google.se/maps/place/Coop+Huvudkontor/59.3598297,17.9783251,15z/data=!4m5!3m4!1s0x0:0x824f828e19b3770c!8m2!3d59.3598297!4d17.9783251\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n 171 88 Solna\n </a>\n , Telefon: 010-742 00 00, \n {/* dont break word on the organisation number */}\n <span style={{ display: 'inline-block' }}>Org.nr: 556710-5480</span>\n </span>\n {props.bottomLinks.map((bottomLink) => (\n <span>\n <a className={styles.FooterContactLink} href={bottomLink.url}>\n {bottomLink.name}\n </a>\n </span>\n ))}\n </p>\n </>\n );\n};\n\nexport default FooterContact;\n","import classNames from 'classnames';\nimport { useEffect, useState } from 'react';\n\nimport {\n gdprAddEventListener,\n GdprCookiePurposes,\n gdprRemoveEventListener,\n hasAcceptedGdprPurpose,\n} from '../../../../utility/gdpr';\nimport useHtmlScriptParser from '../../../common/hooks/useHtmlScriptParser';\nimport styles from './Footer.module.less';\n\nconst FooterLogos = (props: Pick<FrontendFooter, 'logos'>) => {\n const [consentPurposeAccepted, setConsentPurposeAccepted] = useState(false);\n\n const scriptsContainerRef = useHtmlScriptParser(\n '<script type=\"text/plain\" src=\"https://cert.tryggehandel.net/js/script.js?id=a45e1529-7d52-45a5-8e2f-c79cddb2f92b\" />',\n consentPurposeAccepted,\n );\n\n useEffect(() => {\n const checkPurpose = () => {\n setConsentPurposeAccepted(hasAcceptedGdprPurpose(GdprCookiePurposes.Marketing));\n };\n\n gdprAddEventListener('consent', checkPurpose);\n\n return () => gdprRemoveEventListener('consent', checkPurpose);\n }, []);\n\n return (\n <div className=\"u-textCenter\">\n <h2 className={styles.h2}>Handla pÃ¥ coop.se</h2>\n <div className={styles.FooterShopOnline}>\n {props.logos.map((logo) => (\n // eslint-disable-next-line react/no-array-index-key\n <div\n className={styles.FooterShopOnlineItem}\n key={`${logo.url}_${logo.imageAltText}_${logo.imageHeight}_${logo.imageSrc}`}\n >\n {logo.url ? (\n <a href={logo.url} target=\"_blank\" rel=\"noreferrer\">\n <img\n height={logo.imageHeight}\n alt={logo.imageAltText}\n src={logo.imageSrc}\n loading=\"lazy\"\n />\n </a>\n ) : (\n <img\n height={logo.imageHeight}\n alt={logo.imageAltText}\n src={logo.imageSrc}\n loading=\"lazy\"\n />\n )}\n </div>\n ))}\n\n <div\n className={classNames(\n styles.FooterShopOnlineItem,\n 'teh-certificate', // this class is important since Trygghandel script is looking for it\n )}\n />\n <div style={{ display: 'none' }} ref={scriptsContainerRef} />\n </div>\n </div>\n );\n};\n\nexport default FooterLogos;\n","import { Accordion } from '@coop/components';\nimport classNames from 'classnames';\n\nimport styles from './Footer.module.less';\nimport FooterColumns from './FooterColumns';\n\nconst FooterMobile = (props: Pick<FrontendFooter, 'columns'>) => {\n if (window.isPrerenderCrawler) {\n <FooterColumns columns={props.columns} />;\n }\n\n return (\n <Accordion.Root type=\"single\" collapsible className={styles.FooterAccordion}>\n {props.columns.map((column, index) => (\n <Accordion.Item\n key={column.headerLink?.contentId}\n className={classNames(styles.FooterAccordionItem, styles.Divider)}\n value={column.headerLink?.contentId.toString() || index.toString()}\n >\n <Accordion.Header asChild>\n <h2 className={styles.FooterAccordionTrigger}>\n <Accordion.Trigger className={styles.FooterAccordionTrigger}>\n {column.header}\n </Accordion.Trigger>\n </h2>\n </Accordion.Header>\n <Accordion.Content className={styles.FooterAccordionContent}>\n <ul className={styles.FooterList}>\n {column.links.map((link) => (\n <li className={styles.FooterItem} key={link.contentId}>\n <a href={link.url}>{link.name}</a>\n </li>\n ))}\n </ul>\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Accordion.Root>\n );\n};\n\nexport default FooterMobile;\n","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgYoutubemono = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Brand=youtube, monochrome=True\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"layer\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.385 3.184C7.984 2.939 16.011 2.938 19.615 3.184C23.516 3.451 23.971 5.815 24 12C23.971 18.196 23.512 20.55 19.615 20.816C16.011 21.062 7.985 21.061 4.385 20.816C0.484 20.549 0.029 18.185 0 12C0.029 5.804 0.488 3.45 4.385 3.184ZM9 16V8L17 11.993L9 16Z\"\n }))));\n};\nexport default SvgYoutubemono;","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgLinkedinmono = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Brand=linkedin, monochrome=True\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"layer\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.06032 20.5H7.28898V8.66156H4.06032V20.5Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.79126 5.39846C3.79126 6.4467 4.63502 7.29691 5.67465 7.29691C6.71535 7.29691 7.55804 6.4467 7.55804 5.39846C7.55804 4.35022 6.71428 3.5 5.67465 3.5C4.63502 3.5 3.79126 4.35022 3.79126 5.39846Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.975 20.5H20.2036V13.2258C20.2036 7.57242 14.1725 7.77798 12.6701 10.5611V8.66156H9.44142V20.5H12.6701V14.4689C12.6701 11.1186 16.975 10.8441 16.975 14.4689V20.5Z\"\n })))));\n};\nexport default SvgLinkedinmono;","import { Icon } from '@coop/components';\nimport {\n FacebookLogoMonoIcon,\n InstagramLogoMonoIcon,\n LinkedinLogoMonoIcon,\n XLogoMonoIcon,\n YoutubeLogoMonoIcon,\n} from '@coop/icons';\n\nimport styles from './Footer.module.less';\n\nconst FooterSocial = () => {\n const socialLinks = [\n {\n url: 'https://www.facebook.com/CoopSverige/',\n icon: FacebookLogoMonoIcon,\n label: 'Coop Sverige Facebook',\n },\n {\n url: 'https://x.com/coopsverige',\n icon: XLogoMonoIcon,\n label: 'Coop Sverige X',\n width: 16,\n height: 16,\n },\n {\n url: 'https://www.instagram.com/coopsverige/',\n icon: InstagramLogoMonoIcon,\n label: 'Coop Sverige Instagram',\n },\n {\n url: 'https://www.youtube.com/user/CoopSverige',\n icon: YoutubeLogoMonoIcon,\n label: 'Coop Sverige YouTube',\n },\n {\n url: 'https://www.linkedin.com/company/coopsverige',\n icon: LinkedinLogoMonoIcon,\n label: 'Coop Sverige LinkedIn',\n },\n ];\n\n return (\n <div className={styles.FooterSocial}>\n {socialLinks.map((link) => (\n <div key={link.label} className={styles.FooterSocialItem}>\n <a\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={link.label}\n >\n <Icon\n icon={link.icon}\n width={link.width || 20}\n height={link.height || 20}\n className={styles.FooterSocialIcon}\n aria-hidden\n />\n </a>\n </div>\n ))}\n </div>\n );\n};\n\nexport default FooterSocial;\n","/* eslint-disable no-param-reassign */\nimport classNames from 'classnames';\n\nimport {\n useIsFromMedium,\n useIsMobile,\n} from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport { useAppSelector } from '../../../common/hooks/useThunkDispatch';\nimport UpscopeTriggerButton from '../UpscopeTriggerButton';\nimport ConsentButton from './ConsentButton';\nimport styles from './Footer.module.less';\nimport FooterColumns from './FooterColumns';\nimport FooterContact from './FooterContact';\nimport FooterLogos from './FooterLogos';\nimport FooterMobile from './FooterMobile';\nimport FooterSocial from './FooterSocial';\n\nconst BaseFooter = (props: React.PropsWithChildren<{ footer: FrontendFooter }>) => {\n const { footer } = props;\n\n const isMobile = useIsMobile();\n\n const isFromMedium = useIsFromMedium();\n const hideFooterMobile = useAppSelector((state) => state.ui.shared.hideFooterMobile);\n\n // moved from backend and styles, but strange logic to hide it only on last order/ saved carts etc and only on mobile but not in desktop? Since its on bottom dunno why user would care\n if (!isFromMedium && hideFooterMobile) {\n return null;\n }\n\n const validColumns = footer.columns.filter(\n (column) => !!column.header && !!column.headerLink?.url && column.links.length > 0,\n );\n\n return (\n <footer className={classNames(styles.Footer, 'u-noPrint')}>\n <div className={classNames('Main-container', !isMobile && 'Main-container--padding')}>\n <div className={styles.FooterPrimaryContainer}>\n {isMobile ? (\n <FooterMobile columns={validColumns} />\n ) : (\n <FooterColumns columns={validColumns} />\n )}\n <div className=\"u-flex u-flexJustifyCenter u-marginTlg u-marginBlg\">\n <ConsentButton />\n </div>\n <div className=\"u-lg-hidden u-marginBlg\">\n <div className=\"u-flex u-flexJustifyCenter\">\n <UpscopeTriggerButton />\n </div>\n </div>\n </div>\n\n <div className={styles.FooterPrimaryContainer}>\n <div className=\"u-flex u-flexDirectionColumn u-flexJustifySpaceAround u-flexGap16 u-md-flexDirectionRow\">\n <FooterLogos logos={footer.logos} />\n {props.children}\n </div>\n </div>\n <div className=\"Grid Grid--gutterV\">\n <div className=\"Grid-cell u-md-size2of3\">\n <FooterContact bottomLinks={footer.bottomLinks} />\n </div>\n <div className=\"Grid-cell u-md-size1of3\">\n <FooterSocial />\n </div>\n </div>\n </div>\n </footer>\n );\n};\n\nexport default BaseFooter;\n","import classNames from 'classnames';\n\nimport styles from './Footer.module.less';\n\nconst FooterMobileApps = (\n props: Pick<\n FrontendFooter,\n | 'downloadAppAndroidUrl'\n | 'downloadAppIOSUrl'\n | 'downloadAppQRImage'\n | 'downloadAppQRImageAltText'\n >,\n) => {\n return (\n <div className=\"u-textCenter u-flexShrinkNone\">\n <div className=\"u-textCenter\">\n <h2 className={styles.h2}>Ladda ner Coop-appen</h2>\n </div>\n <div className={styles.FooterDownloadApp}>\n <div className={classNames(styles.QRCode, 'u-textSmall')}>\n <div className={styles.ScanQR}>\n <img\n src={props.downloadAppQRImage?.url}\n alt={props.downloadAppQRImageAltText}\n width=\"75\"\n height=\"75\"\n />\n <br />\n <b>Scanna QR-koden för att ladda ner appen</b>\n </div>\n </div>\n <div className={styles.DownloadLinks}>\n <div>\n <a href={props.downloadAppIOSUrl}>\n <img\n src=\"/Assets/Images/DownloadApp/appstore.png\"\n height=\"35\"\n width=\"102\"\n alt=\"Hämta i App Store\"\n />\n </a>\n </div>\n <div>\n <a href={props.downloadAppAndroidUrl}>\n <img\n src=\"/Assets/Images/DownloadApp/googleplay.png\"\n height=\"35\"\n width=\"117\"\n alt=\"Ladda ned pÃ¥ Google Play\"\n />\n </a>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default FooterMobileApps;\n","/* eslint-disable no-param-reassign */\n\nimport { appConfig } from '../../../../appConfig';\nimport BaseFooter from './BaseFooter';\nimport FooterMobileApps from './FooterMobileApps';\n\nconst Footer = (props: { footer: FrontendFooter }) => {\n const { footer } = props;\n\n const IsShoppingForMunicipal = appConfig.coopUserSettings.isShoppingForMunicipal;\n\n if (IsShoppingForMunicipal) {\n return null;\n }\n\n return (\n <BaseFooter footer={props.footer}>\n {footer.footerShowDownloadApp && (\n <FooterMobileApps\n downloadAppAndroidUrl={footer.downloadAppAndroidUrl}\n downloadAppIOSUrl={footer.downloadAppIOSUrl}\n downloadAppQRImage={footer.downloadAppQRImage}\n downloadAppQRImageAltText={footer.downloadAppQRImageAltText}\n />\n )}\n </BaseFooter>\n );\n};\n\nexport default Footer;\n","import { Button, ChipButton, ConfirmInfo, Snackbar, TextInput } from '@coop/components';\nimport { useMutation } from '@tanstack/react-query';\nimport { addSeconds, intervalToDuration } from 'date-fns';\nimport { useEffect, useState } from 'react';\nimport { Controller, useForm } from 'react-hook-form';\n\nimport { appConfig } from '../../../../appConfig';\nimport { Helpers } from '../../../../utility/helpers';\nimport {\n cancelImpersonation,\n getCachedAuthToken,\n impersonateUser,\n} from '../../../common/api/auth/getAuthToken';\n\nconst ImpersonationNotice = () => {\n const [isOpen, setIsOpen] = useState(false);\n const signout = async () => {\n await cancelImpersonation();\n window.location.reload();\n };\n if (appConfig.coopUserSettings.allowImpersonate) {\n return <StartImpersonationBar />;\n }\n if (!appConfig.coopUserSettings.isImpersonating) {\n return null;\n }\n const identity = getCachedAuthToken();\n if (!identity?.impersonating) {\n return null;\n }\n // lets expire sooner to be safe\n const expireTime = addSeconds(new Date(identity.expires), -60);\n return (\n <>\n <Snackbar\n size={48}\n actionSlot={\n <ChipButton\n theme=\"greenCta\"\n size={32}\n onClick={() => setIsOpen((prev) => !prev)}\n >\n Info\n </ChipButton>\n }\n style={{\n marginBottom: 24,\n }}\n >\n {appConfig.coopUserSettings.profile?.email}\n </Snackbar>\n <ConfirmInfo\n show={isOpen}\n heading=\"Du imiterar en annan person.\"\n message={\n <div className=\"u-textCenter\">\n Du imiterar en person med id:\n <br /> {appConfig.coopUserSettings.userId}\n <div className=\"u-flex u-flexJustifySpaceBetween u-flexAlignCenter u-marginT \">\n <Button onClick={signout}>Avsluta</Button>\n <CountDown end={expireTime} />\n </div>\n </div>\n }\n close={() => setIsOpen(false)}\n />\n <ImpersonationExpiration expires={expireTime} signout={signout} />\n </>\n );\n};\n\nconst StartImpersonationBar = () => {\n const [isOpen, setIsOpen] = useState(false);\n return (\n <>\n <Snackbar\n size={48}\n actionSlot={\n <ChipButton\n theme=\"greenCta\"\n size={32}\n onClick={() => setIsOpen((prev) => !prev)}\n >\n Öppna\n </ChipButton>\n }\n style={{\n marginBottom: 24,\n }}\n >\n Logga in som kund\n </Snackbar>\n <ConfirmInfo\n show={isOpen}\n heading=\"Logga in som en användare\"\n message={<Impersonate />}\n close={() => setIsOpen(false)}\n />\n </>\n );\n};\n\nconst Impersonate = () => {\n const { handleSubmit, control, getValues } = useForm({\n mode: 'onSubmit',\n reValidateMode: 'onChange',\n defaultValues: {\n identifier: '',\n },\n });\n const onSubmit = () => {\n const formValues = getValues();\n const { identifier } = formValues;\n const isEmail = Helpers.validateEmail(identifier);\n impersonateMutation.mutate({\n userToImpersonate: identifier,\n userIdentifierType: isEmail ? 'Email' : 'Id',\n });\n };\n const impersonateMutation = useMutation({\n mutationFn: async (params: { userToImpersonate: string; userIdentifierType: string }) =>\n impersonateUser(params),\n onSuccess: () => {\n window.location.reload();\n },\n });\n\n return (\n <div>\n <p>Skriv in e-postadressen eller användarens id för att logga in som den personen.</p>\n <p>\n <strong>Obs! Allt som görs loggas!</strong>\n </p>\n <form\n className=\"u-flex u-flexDirectionColumn u-heightAll\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <Controller\n render={({ field, fieldState }) => (\n <TextInput\n label=\"Id / E-postadress\"\n isRequired\n necessityIndicator=\"none\"\n value={field.value}\n name={field.name}\n onChange={field.onChange}\n onBlur={field.onBlur}\n ref={field.ref}\n validationText={fieldState.error?.message}\n isInvalid={!!fieldState.error}\n />\n )}\n name=\"identifier\"\n rules={{\n required: true,\n }}\n control={control}\n />\n {impersonateMutation.isSuccess && (\n <div>Du imiterar nu {impersonateMutation.data.email}</div>\n )}\n\n {impersonateMutation.isError && <div>Ã…h, misslyckades imitera användaren.</div>}\n <Button\n type=\"submit\"\n disabled={impersonateMutation.isSuccess || impersonateMutation.isPending}\n >\n Logga in\n </Button>\n </form>\n </div>\n );\n};\n\nconst CountDown = (props: { end: Date }) => {\n const [time, setTime] = useState(new Date());\n const { hours, minutes, seconds } = intervalToDuration({\n start: time,\n end: props.end,\n });\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date());\n }, 1000);\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n const zeroPad = (num: number, places: number) => String(num).padStart(places, '0');\n return (\n <span>{`${zeroPad(hours || 0, 2)}:${zeroPad(minutes || 0, 2)}:${zeroPad(\n seconds || 0,\n 2,\n )}`}</span>\n );\n};\n\nconst ImpersonationExpiration = (props: { expires: Date; signout: () => void }) => {\n useEffect(() => {\n const timeout = setTimeout(props.signout, Number(props.expires) - Date.now());\n return () => {\n clearTimeout(timeout);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.expires]);\n\n return null;\n};\n\nexport default ImpersonationNotice;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport type { FC } from 'react';\nimport * as React from 'react';\n\nimport { appConfig } from '../../../../appConfig';\nimport Portal from '../../../common/components/atoms/Portal';\nimport StickyBottom from '../../../common/components/atoms/StickyBottom';\nimport CncFlyIn from '../../../common/components/molecules/CncFlyIn';\nimport ComponentPortals from '../../../common/components/molecules/ComponentPortals';\nimport useCurrentStoreSync from '../../../common/hooks/useCurrentStoreSync';\nimport { usePageConsumptionTracking } from '../../../common/hooks/usePageConsumptionTracking';\nimport ConsentSwitch from '../../../member/components/Consent/ConsentSwitch';\nimport Footer from '../Footer/Footer';\nimport { HeaderAlertsPortal } from '../HeaderAlerts';\nimport ImpersonationNotice from '../ImpersonationNotice';\nimport { SkipLink, SkipLinkTarget } from '../SkipLink';\nimport { useInitialCartFetch, useRedirectReasonHandler } from './CommonLayout.hooks';\n\ninterface CommonLayoutProps {}\n\n/**\n * Contains common components and hooks that are common for all other layouts like EcommerceLayout, BaseLayout\n */\nconst CommonLayout: FC<React.PropsWithChildren<CommonLayoutProps>> = (props) => {\n useCurrentStoreSync();\n useInitialCartFetch();\n useRedirectReasonHandler();\n usePageConsumptionTracking();\n\n const footer = React.useMemo(\n () =>\n structuredClone(\n appConfig.coopSettings.footer,\n ) as RecursiveRemoveReadonly<FrontendFooter>,\n [],\n );\n\n return (\n <>\n <Portal domNodeSelector=\"#skipLinkToContentTarget\">\n <SkipLinkTarget id=\"mainContent\" />\n </Portal>\n <Portal domNodeSelector=\"#skipLinkToContent\">\n <SkipLink href=\"#mainContent\">Hoppa över meny</SkipLink>\n </Portal>\n\n <HeaderAlertsPortal />\n {props.children}\n <ConsentSwitch />\n <StickyBottom>\n <ImpersonationNotice />\n </StickyBottom>\n <CncFlyIn />\n\n <ComponentPortals cmpName=\"Footer\" render={() => <Footer footer={footer} />} />\n </>\n );\n};\n\nexport default CommonLayout;\n","import { useEpiEditButtonRepositioning } from './EpiQuickNavigatorButton.hooks';\n\nconst EpiQuickNavigatorButton = () => {\n const ref = useEpiEditButtonRepositioning();\n\n return <div ref={ref} style={{ position: 'absolute', bottom: 0, right: 0 }} />;\n};\n\nexport default EpiQuickNavigatorButton;\n","import { useLayoutEffect, useRef } from 'react';\n\nimport { useAppSelector } from '../../../../common/hooks/useThunkDispatch';\nimport { userProfileSelectors } from '../../../../common/selectors/userProfileSelectors';\n\nexport const useEpiEditButtonRepositioning = () => {\n const hasBeenRepositioned = useRef<boolean>(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const isEpiUser = useAppSelector(userProfileSelectors.isEpiUser);\n\n useLayoutEffect(() => {\n if (!isEpiUser || hasBeenRepositioned.current) return;\n\n const observer = new MutationObserver(() => {\n const element = document.querySelector('#epi-quickNavigator');\n if (element) {\n handleElementFound(element);\n observer.disconnect();\n }\n });\n\n const handleElementFound = (element: Element) => {\n const targetNode = containerRef.current;\n\n if (element && targetNode) {\n const clonedNode = element.cloneNode(true) as HTMLUListElement;\n\n clonedNode.style.position = 'static';\n targetNode.style.top = `var(--headerStickyBannerHeight)`;\n\n targetNode.appendChild(clonedNode);\n element.remove();\n hasBeenRepositioned.current = true;\n }\n };\n\n observer.observe(document, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n };\n }, [isEpiUser]);\n\n return containerRef;\n};\n","import { Search } from '@coop/components';\nimport type { FC } from 'react';\nimport { useEffect } from 'react';\n\nimport { useSearchOverlayGA4ActionTracking } from '../../../common/tracking/hooks/useSearchOverlayGA4Tracking';\nimport { useSearchStateContext } from '../../../search/contexts/searchStateContext';\nimport type { GlobalSearchResults } from '../../../search/models/models';\nimport { getFullSearchResultUrlWithOrder } from '../../../search/utils/searchResultUtils';\n\ninterface GlobalSearchBarProps {\n performFullSearch?: (newQuery: string, originalQuery?: string) => void;\n size: React.ComponentProps<typeof Search>['size'];\n}\n\nconst GlobalSearchBar: FC<React.PropsWithChildren<GlobalSearchBarProps>> = (props) => {\n const {\n result,\n query,\n isOpen,\n close,\n show,\n isLoading,\n clear,\n open,\n setQuery,\n expectedSearchResultType,\n searchFromPage,\n } = useSearchStateContext<GlobalSearchResults>();\n\n const { trackEnterAction } = useSearchOverlayGA4ActionTracking(\n query,\n result?.queryUsed,\n searchFromPage,\n isLoading,\n );\n\n const navigateToGlobalSearchResultsPage = () => {\n trackEnterAction();\n\n let realQuery = isLoading ? query : result?.queryUsed;\n if (!realQuery) {\n realQuery = '';\n }\n if (props.performFullSearch) {\n close();\n props.performFullSearch(realQuery, query);\n return;\n }\n\n const viewAllResultsUrl = getFullSearchResultUrlWithOrder(\n realQuery,\n query,\n expectedSearchResultType,\n ).path;\n\n window.location.href = viewAllResultsUrl;\n };\n\n useEffect(() => {\n if (show) {\n open();\n }\n }, [show, open]);\n\n return (\n <Search\n submitLabel=\"Sök pÃ¥ Coop\"\n inputText={query}\n setInputText={setQuery}\n size={props.size}\n hide={isOpen}\n inputPlaceholder=\"Sök recept, varor, butiker och artiklar\"\n description=\"Sökresultaten kommer att visas medan du skriver\"\n onEnterPress={navigateToGlobalSearchResultsPage}\n onEscapePress={clear}\n onReset={clear}\n aria-haspopup=\"dialog\"\n />\n );\n};\n\nexport default GlobalSearchBar;\n","import type { FC } from 'react';\nimport { useCallback } from 'react';\n\nimport { useAppSelector } from '../../../common/hooks/useThunkDispatch';\nimport { storeSelectors } from '../../../common/selectors/storeSelectors';\nimport { SearchStateProvider } from '../../../search/contexts/searchStateContext';\nimport { globalSearchAbortable } from '../../../search/hooks/useGlobalSearchState';\nimport { SearchFromPageType } from '../../models/SearchFromPageType';\n\ninterface GlobalSearchStateProviderProps {\n initialQuery: string;\n searchFromPage: SearchFromPageType;\n}\n\nconst GlobalSearchContext: FC<React.PropsWithChildren<GlobalSearchStateProviderProps>> = ({\n searchFromPage,\n initialQuery,\n children,\n}) => {\n const currentProductionUnit = useAppSelector(storeSelectors.currentProductionUnit);\n\n const globalSearchFunction = useCallback(\n async (_abortSignal: AbortSignal, _query: string) =>\n globalSearchAbortable(\n _query,\n currentProductionUnit,\n {\n articles: 4,\n products: 4,\n stores: 4,\n recipes: searchFromPage === SearchFromPageType.Recipes ? 10 : 5,\n pointshop: 6,\n },\n true,\n _abortSignal,\n ),\n [currentProductionUnit, searchFromPage],\n );\n\n return (\n <SearchStateProvider\n initialQuery={initialQuery}\n searchFunction={globalSearchFunction}\n searchFromPage={searchFromPage}\n minimumQueryLength={2}\n >\n {children}\n </SearchStateProvider>\n );\n};\n\nexport default GlobalSearchContext;\n","import type { FC } from 'react';\nimport * as React from 'react';\nimport { useRef } from 'react';\n\nimport DelayedA11yAnnouncer from '../../../common/components/A11yAnnouncer/DelayedA11yAnnouncer';\nimport { useSearchOverlayGA4ActionTracking } from '../../../common/tracking/hooks/useSearchOverlayGA4Tracking';\nimport { useSearchStateContext } from '../../../search/contexts/searchStateContext';\nimport type { GlobalSearchResults } from '../../../search/models/models';\nimport { getFullSearchResultUrlWithOrder } from '../../../search/utils/searchResultUtils';\nimport SearchOverlay from '../SearchOverlay';\n\nexport const GlobalSearchOverlayContent = React.lazy(\n () =>\n import('../../../search/components/GlobalSearchOverlayContent/GlobalSearchOverlayContent'),\n);\n\ninterface GlobalSearchOverlayProps {\n performFullSearch?: (newQuery: string, originalQuery?: string) => void;\n}\n\nconst GlobalSearchOverlay: FC<React.PropsWithChildren<GlobalSearchOverlayProps>> = (props) => {\n const {\n query,\n close,\n isLoading,\n result,\n searchFromPage,\n expectedSearchResultType,\n a11yResultAnnounceMessage,\n } = useSearchStateContext<GlobalSearchResults>();\n const searchRef = useRef<HTMLInputElement>(null);\n\n const {\n trackAbortAction,\n trackCloseClickAction,\n trackListObjectClick,\n trackEnterAction,\n trackSeeAllResultsClickAction,\n trackLabelClick,\n trackAddToCartClickAction,\n trackRemoveFromCartClickAction,\n } = useSearchOverlayGA4ActionTracking(query, result?.queryUsed, searchFromPage, isLoading);\n\n const handleOutsideClick = () => {\n trackAbortAction();\n };\n\n const handleClearClick = () => {\n trackCloseClickAction();\n };\n\n const handleAllResultsClick = () => {\n trackSeeAllResultsClickAction();\n };\n\n const handleItemClick = () => {\n trackListObjectClick(undefined, undefined, undefined); // in global search event we dont care about positioning or names of the items, its relevant only for ecommerce page\n };\n\n const handleOtherResultTypeClick = () => {\n trackLabelClick();\n };\n\n const handleLabelClick = () => {\n trackLabelClick();\n };\n\n const navigateToGlobalSearchResultsPage = () => {\n trackEnterAction();\n\n let realQuery = isLoading ? query : result?.queryUsed;\n if (!realQuery) {\n realQuery = '';\n }\n if (props.performFullSearch) {\n close();\n props.performFullSearch(realQuery, query);\n return;\n }\n\n const viewAllResultsUrl = getFullSearchResultUrlWithOrder(\n realQuery,\n query,\n expectedSearchResultType,\n ).path;\n\n window.location.href = viewAllResultsUrl;\n };\n\n const onResultScroll = React.useCallback(() => searchRef.current?.blur(), [searchRef]);\n\n return (\n <SearchOverlay\n submitLabel=\"Sök pÃ¥ Coop\"\n onEnterPress={navigateToGlobalSearchResultsPage}\n onOutsideClick={handleOutsideClick}\n onClearClick={handleClearClick}\n ref={searchRef}\n inputPlaceholder=\"Sök recept, varor, butiker och artiklar\"\n inputDescription=\"Förslag visas nedan\"\n announcerSlot={\n <DelayedA11yAnnouncer\n a11yMessage={a11yResultAnnounceMessage}\n name=\"GlobalSearchResultsAnnouncer\"\n delayFirstMessage\n />\n }\n >\n <GlobalSearchOverlayContent\n onAllResultsClick={handleAllResultsClick}\n onAllResultsForTypeClick={handleAllResultsClick}\n onOtherResultTypeClick={handleOtherResultTypeClick}\n onProductAddToCartClick={trackAddToCartClickAction}\n onProductRemoveFromCartClick={trackRemoveFromCartClickAction}\n onItemClick={handleItemClick}\n onLabelClick={handleLabelClick}\n onScroll={onResultScroll}\n useMaxHeightCalculation\n />\n </SearchOverlay>\n );\n};\n\nexport default GlobalSearchOverlay;\n","/* eslint-disable react/jsx-props-no-spreading */\n\nimport type { FC } from 'react';\n\nimport { HeaderSearch } from '../Header';\nimport type { GlobalHeaderDOMProps } from './GlobalSearch.types';\nimport { getTypedCurrentPage } from './GlobalSearch.utils';\nimport GlobalSearchBar from './GlobalSearchBar';\nimport GlobalSearchContext from './GlobalSearchContext';\nimport GlobalSearchOverlay from './GlobalSearchOverlay';\n\ninterface GlobalHeaderProps\n extends Pick<GlobalHeaderDOMProps, 'currentPage' | 'searchDisabled' | 'headerTheme'> {\n query?: string;\n performFullSearch?: (query: string, originalQuery?: string) => void;\n}\n\nconst GlobalSearch: FC<React.PropsWithChildren<GlobalHeaderProps>> = (props) => {\n const initialQuery = props.query || '';\n const typedCurrentPage = getTypedCurrentPage(props.currentPage);\n\n return (\n <GlobalSearchContext initialQuery={initialQuery} searchFromPage={typedCurrentPage}>\n <GlobalSearchInner {...props} />\n </GlobalSearchContext>\n );\n};\n\nconst GlobalSearchInner: FC<React.PropsWithChildren<GlobalHeaderProps>> = (props) => {\n const shouldShowGlobalSearchBar = !props.searchDisabled;\n\n return (\n <>\n {shouldShowGlobalSearchBar && (\n <HeaderSearch\n searchSlot={\n <GlobalSearchBar performFullSearch={props.performFullSearch} size=\"small\" />\n }\n />\n )}\n <GlobalSearchOverlay performFullSearch={props.performFullSearch} />\n {props.children}\n </>\n );\n};\n\nexport default GlobalSearch;\n","import { SearchFromPageType } from '../../models/SearchFromPageType';\n\nexport const getTypedCurrentPage = (currentPageString?: string) => {\n const isEnum: boolean =\n !!currentPageString &&\n Object.values(SearchFromPageType)\n .map((item) => item.toLocaleLowerCase())\n .includes(currentPageString.toLowerCase() as SearchFromPageType);\n\n const searchFromPage = isEnum\n ? (currentPageString as SearchFromPageType)\n : SearchFromPageType.Other;\n\n return searchFromPage;\n};\n","import CartSummaryAccessibilityLogger from '../../../cart/components/atoms/CartSummaryAccessibilityLogger';\nimport ComponentPortals from '../../../common/components/molecules/ComponentPortals';\nimport { useIsB2BRoute } from '../../../common/utils/b2bUtils';\nimport EcommerceSearch from '../../../ecommerce/components/EcommerceLayout/EcommerceSearch';\nimport type { GlobalHeaderDOMProps } from '../GlobalSearch';\nimport GlobalSearch from '../GlobalSearch';\nimport type { HeaderPortalDOMProps } from './Header.types';\nimport HeaderFluidBanner from './HeaderFluidBanner';\nimport HeaderStickyBanner from './HeaderStickyBanner';\n\nconst GlobalHeader = (props: {\n stayAfterLoginLogoutRedirect?: boolean;\n performFullSearch?: (query: string, originalQuery?: string) => void;\n hideB2BSwitch: boolean;\n}) => {\n const isB2B = useIsB2BRoute();\n\n return (\n <>\n <CartSummaryAccessibilityLogger />\n <ComponentPortals\n cmpName=\"HeaderFluidBanner\"\n render={(domProps: HeaderPortalDOMProps) => (\n <HeaderFluidBanner\n featuredNavigation={{\n items: domProps.featuredNavigation?.items,\n }}\n headerTheme={domProps.headerTheme}\n hideB2BSwitch={props.hideB2BSwitch}\n stayAfterLoginLogoutRedirect={props.stayAfterLoginLogoutRedirect || false}\n />\n )}\n />\n <ComponentPortals\n cmpName=\"HeaderStickyBanner\"\n render={(domProps: GlobalHeaderDOMProps) => (\n <HeaderStickyBanner\n featuredNavigation={{\n items: domProps.featuredNavigation?.items,\n }}\n headerTheme={domProps.headerTheme}\n stayAfterLoginLogoutRedirect={props.stayAfterLoginLogoutRedirect || false}\n searchSlot={\n // b2b customers should always see EcommerceSearch on all pages\n isB2B ? (\n <EcommerceSearch />\n ) : (\n <GlobalSearch\n currentPage={domProps.currentPage}\n searchDisabled={domProps.searchDisabled}\n query={domProps.query}\n headerTheme={domProps.headerTheme}\n performFullSearch={props.performFullSearch}\n />\n )\n }\n />\n )}\n />\n </>\n );\n};\n\nexport default GlobalHeader;\n","import { Icon } from '@coop/components';\nimport { CoopLogoIcon } from '@coop/icons';\nimport classnames from 'classnames';\n\nimport { appConfig } from '../../../../appConfig';\nimport { useUserTypeQuery } from '../../../common/hooks/useUserType';\nimport { UserType } from '../../../common/store/structureDefinitions/userState';\n\ninterface BannerProps {\n headerTheme: 'black' | 'darkGreen';\n bordered?: boolean;\n wideSlots?: boolean;\n}\n\nconst Logo = () => {\n const { data: userType } = useUserTypeQuery();\n const isPunchout = userType === UserType.punchout;\n\n return (\n <a\n className={classnames('Header-logo')}\n href={\n appConfig.coopUserSettings.isShoppingForAnother || isPunchout\n ? appConfig.coopSettings.ecommerce.page.url\n : appConfig.coopSettings.startPage.url\n }\n aria-label=\"Till startsidan\"\n >\n <Icon icon={CoopLogoIcon} aria-hidden />\n </a>\n );\n};\n\nconst Banner = (props: React.PropsWithChildren<BannerProps>) => {\n return (\n <div\n className={classnames(\n 'HeaderBanner',\n 'u-noPrint',\n props.wideSlots && 'HeaderBanner--wideSlots',\n props.bordered && 'HeaderBanner--bordered',\n props.headerTheme === 'darkGreen' && 'HeaderBanner--darkGreen',\n props.headerTheme === 'black' && 'HeaderBanner--black',\n )}\n style={{ zIndex: 2 }}\n >\n {props.children}\n </div>\n );\n};\n\nconst LeftSlot = (props: React.PropsWithChildren<{}>) => {\n return <div className=\"HeaderBanner-Left\">{props.children}</div>;\n};\n\nconst LeftNav = (props: React.PropsWithChildren<{}>) => {\n return <div className=\"HeaderBanner-LeftNav\">{props.children}</div>;\n};\n\nconst RightNav = (props: React.PropsWithChildren<{}>) => {\n return <div className=\"HeaderBanner-RightNav\">{props.children}</div>;\n};\n\nconst CenterSlot = (props: React.PropsWithChildren<{}>) => {\n return <div className=\"HeaderBanner-Center\">{props.children}</div>;\n};\n\nconst RightSlot = (props: React.PropsWithChildren<{}>) => {\n return <div className=\"HeaderBanner-Right\">{props.children}</div>;\n};\n\nconst HeaderBanner = {\n Logo,\n Banner,\n LeftSlot,\n LeftNav,\n RightNav,\n CenterSlot,\n RightSlot,\n};\n\nexport default HeaderBanner;\n","import classnames from 'classnames';\nimport type { FC } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { ga4NavigationTracking } from '../../../common/tracking/ga4/navigation';\nimport { isAriaCurrentPage } from '../../../common/utils/accessibilityUtils';\n\nexport interface SiteNavigationItem {\n isActive: boolean;\n name: string;\n url: string;\n contentLinkId: number;\n}\n\ninterface FeaturedNavigationProps {\n items: SiteNavigationItem[];\n indicatorPosition: 'top' | 'bottom';\n}\n\nconst FeaturedNavigation: FC<React.PropsWithChildren<FeaturedNavigationProps>> = (props) => {\n const { pathname } = useLocation();\n\n return (\n <nav aria-label=\"Genvägar\" className=\"Navigation\">\n <ul className=\"Navigation-List\">\n {props.items.map((item) => {\n const ariaCurrentPage = item.isActive && isAriaCurrentPage(item.url, pathname);\n return (\n <li\n key={item.name}\n className={classnames(\n props.indicatorPosition === 'top' && 'Indicator--Top',\n props.indicatorPosition === 'bottom' && 'Indicator--Bottom',\n 'Navigation-ListItem',\n item.isActive && 'is-active',\n )}\n >\n <a\n aria-current={ariaCurrentPage}\n href={item.url}\n key={item.name}\n className={classnames('Navigation-Link')}\n data-test={`mainnav-${item.name.toLowerCase().replace(' & ', '-')}`}\n onClick={(e) => {\n ga4NavigationTracking.headerNavigationClick(\n item.name,\n e.currentTarget.href,\n );\n }}\n >\n <span className=\"Navigation-LinkText\">{item.name}</span>\n </a>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n};\n\nexport default FeaturedNavigation;\n","import { appConfig } from '../../../../appConfig';\nimport { BrowserSize } from '../../../../utility/browser';\nimport { useFromBrowserMediaQuery } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport { useUserTypeQuery } from '../../../common/hooks/useUserType';\nimport { UserType } from '../../../common/store/structureDefinitions/userState';\nimport UserTypeModeSwitch from '../UserTypeModeSwitch';\nimport FeaturedNavigation from './FeaturedNavigation';\nimport HeaderBanner from './HeaderBanner';\nimport HeaderLeftNav from './HeaderLeftNav';\nimport HeaderRightNav from './HeaderRightNav';\n\nconst HeaderFluidBanner = (props: {\n featuredNavigation: {\n items: React.ComponentProps<typeof FeaturedNavigation>['items'];\n };\n headerTheme: 'darkGreen' | 'black';\n stayAfterLoginLogoutRedirect: boolean;\n hideB2BSwitch: boolean;\n}) => {\n const isFromLarge = useFromBrowserMediaQuery(BrowserSize.lg);\n const isFromXsm = useFromBrowserMediaQuery(BrowserSize.xsm);\n const { data: userType } = useUserTypeQuery();\n const isPunchout = userType === UserType.punchout;\n\n const disableMyFavoritesMenu = isPunchout || appConfig.coopUserSettings.isShoppingForMunicipal;\n\n return (\n <HeaderBanner.Banner headerTheme={props.headerTheme} bordered>\n {/* This is actually absolutely positioned to the right side but put here in order to be first in focus order */}\n {isFromLarge && (\n <div className=\"HeaderBanner-ModeSwitch\">\n {!props.hideB2BSwitch && <UserTypeModeSwitch theme=\"white\" />}\n </div>\n )}\n <HeaderBanner.LeftSlot>\n <HeaderBanner.LeftNav>\n {isFromLarge ? (\n <HeaderBanner.Logo />\n ) : (\n <>\n <HeaderLeftNav\n disableSiteNavigation={false}\n navigationItems={props.featuredNavigation?.items}\n />\n {isFromXsm && <HeaderBanner.Logo />}\n </>\n )}\n </HeaderBanner.LeftNav>\n </HeaderBanner.LeftSlot>\n {!!props.featuredNavigation?.items.length && (\n <HeaderBanner.CenterSlot>\n <FeaturedNavigation\n indicatorPosition=\"top\"\n items={props.featuredNavigation?.items}\n />\n </HeaderBanner.CenterSlot>\n )}\n <HeaderBanner.RightSlot>\n <HeaderBanner.RightNav>\n {!isFromLarge && (\n <HeaderRightNav\n disableMyFavoritesMenu={disableMyFavoritesMenu}\n stayAfterLoginLogoutRedirect={props.stayAfterLoginLogoutRedirect}\n headerTheme={props.headerTheme}\n />\n )}\n </HeaderBanner.RightNav>\n </HeaderBanner.RightSlot>\n </HeaderBanner.Banner>\n );\n};\n\nexport default HeaderFluidBanner;\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgMenu1 = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2 5.99951C2 5.44723 2.44772 4.99951 3 4.99951H21C21.5523 4.99951 22 5.44723 22 5.99951C22 6.5518 21.5523 6.99951 21 6.99951H3C2.44772 6.99951 2 6.5518 2 5.99951ZM2 11.9995C2 11.4472 2.44772 10.9995 3 10.9995H21C21.5523 10.9995 22 11.4472 22 11.9995C22 12.5518 21.5523 12.9995 21 12.9995H3C2.44772 12.9995 2 12.5518 2 11.9995ZM2 17.9995C2 17.4472 2.44772 16.9995 3 16.9995H21C21.5523 16.9995 22 17.4472 22 17.9995C22 18.5518 21.5523 18.9995 21 18.9995H3C2.44772 18.9995 2 18.5518 2 17.9995Z\"\n })));\n};\nexport default SvgMenu1;","import { OverlayLoader } from '@coop/components';\nimport { Menu1Icon } from '@coop/icons';\nimport * as React from 'react';\n\nimport { FlyIn } from '../../../common/components/atoms/Modal';\nimport useModal from '../../../common/hooks/useModal';\nimport { FlyInType } from '../../../common/store/structureDefinitions/modalState';\nimport HeaderIconButton from '../HeaderIconButton/HeaderIconButton';\nimport type { SiteNavigationItem } from './FeaturedNavigation';\n\nconst SiteNavigation = React.lazy(() => import('../SiteNavigation'));\n\ninterface HeaderLeftNavProps {\n disableSiteNavigation: boolean;\n navigationItems: SiteNavigationItem[];\n}\n\nconst HeaderLeftNav = (props: React.PropsWithChildren<HeaderLeftNavProps>) => {\n const { isOpen, close, open } = useModal(FlyInType.SiteNavigation);\n\n return (\n !props.disableSiteNavigation && (\n <nav aria-label=\"Huvudmeny\">\n <FlyIn\n isOpen={isOpen}\n close={close}\n sizePx={375}\n alignment=\"left\"\n initialFocusOnDialog={false}\n renderTrigger={(ref) => (\n <HeaderIconButton\n ref={ref}\n icon={Menu1Icon}\n label=\"Meny\"\n onClick={open}\n theme=\"bordered\"\n />\n )}\n >\n <React.Suspense fallback={<OverlayLoader isLoading />}>\n <SiteNavigation onClose={close} />\n </React.Suspense>\n </FlyIn>\n </nav>\n )\n );\n};\n\nexport default HeaderLeftNav;\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgDottedCircle = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 1.41176C11.9003 1.41176 11.8009 1.41314 11.7019 1.41588C11.3122 1.42664 10.9875 1.11945 10.9768 0.729746C10.966 0.340046 11.2732 0.0154094 11.6629 0.00464883C11.7749 0.00155602 11.8873 0 12 0C12.1127 0 12.2251 0.00155606 12.3371 0.00464887C12.7268 0.0154094 13.034 0.340046 13.0232 0.729746C13.0125 1.11945 12.6878 1.42664 12.2981 1.41588C12.1991 1.41314 12.0997 1.41176 12 1.41176ZM8.63042 1.19383C8.76953 1.55801 8.58706 1.96601 8.22288 2.10512C8.03751 2.17592 7.85463 2.25179 7.67442 2.33256C7.31866 2.492 6.90102 2.33285 6.74158 1.9771C6.58214 1.62135 6.74128 1.2037 7.09704 1.04426C7.30143 0.952662 7.50885 0.866605 7.71913 0.786287C8.08332 0.647181 8.49131 0.829644 8.63042 1.19383ZM15.3696 1.19383C15.5087 0.829644 15.9167 0.647182 16.2809 0.786288C16.4911 0.866606 16.6986 0.952662 16.903 1.04426C17.2587 1.2037 17.4179 1.62135 17.2584 1.9771C17.099 2.33285 16.6813 2.492 16.3256 2.33256C16.1454 2.25179 15.9625 2.17592 15.7771 2.10512C15.4129 1.96601 15.2305 1.55801 15.3696 1.19383ZM4.75383 3.30795C5.0217 3.59119 5.00925 4.03795 4.72601 4.30583C4.58207 4.44195 4.44195 4.58207 4.30583 4.726C4.03795 5.00924 3.59119 5.0217 3.30795 4.75383C3.02471 4.48596 3.01225 4.03919 3.28012 3.75595C3.43428 3.59295 3.59295 3.43427 3.75595 3.28012C4.03919 3.01225 4.48596 3.0247 4.75383 3.30795ZM19.2462 3.30795C19.514 3.02471 19.9608 3.01225 20.2441 3.28012C20.407 3.43428 20.5657 3.59295 20.7199 3.75595C20.9878 4.03919 20.9753 4.48596 20.6921 4.75383C20.4088 5.0217 19.962 5.00925 19.6942 4.72601C19.558 4.58207 19.4179 4.44195 19.274 4.30583C18.9908 4.03795 18.9783 3.59119 19.2462 3.30795ZM1.9771 6.74158C2.33285 6.90101 2.492 7.31866 2.33256 7.67441C2.25179 7.85463 2.17592 8.03751 2.10512 8.22288C1.96601 8.58706 1.55801 8.76953 1.19383 8.63042C0.829644 8.49131 0.647182 8.08331 0.786288 7.71913C0.866606 7.50885 0.952662 7.30143 1.04426 7.09704C1.2037 6.74128 1.62135 6.58214 1.9771 6.74158ZM22.0229 6.74158C22.3787 6.58214 22.7963 6.74128 22.9557 7.09704C23.0473 7.30143 23.1334 7.50885 23.2137 7.71913C23.3528 8.08332 23.1704 8.49131 22.8062 8.63042C22.442 8.76953 22.034 8.58706 21.8949 8.22288C21.8241 8.03751 21.7482 7.85463 21.6674 7.67442C21.508 7.31866 21.6671 6.90102 22.0229 6.74158ZM0.729746 10.9768C1.11945 10.9875 1.42664 11.3122 1.41588 11.7019C1.41314 11.8009 1.41176 11.9003 1.41176 12C1.41176 12.0997 1.41314 12.1991 1.41588 12.2981C1.42664 12.6878 1.11945 13.0125 0.729746 13.0232C0.340046 13.034 0.0154094 12.7268 0.00464883 12.3371C0.00155602 12.2251 0 12.1127 0 12C0 11.8873 0.00155606 11.7749 0.00464887 11.6629C0.0154094 11.2732 0.340046 10.966 0.729746 10.9768ZM23.2703 10.9768C23.66 10.966 23.9846 11.2732 23.9954 11.6629C23.9984 11.7749 24 11.8873 24 12C24 12.1127 23.9984 12.2251 23.9954 12.3371C23.9846 12.7268 23.66 13.034 23.2703 13.0232C22.8806 13.0125 22.5734 12.6878 22.5841 12.2981C22.5869 12.1991 22.5882 12.0997 22.5882 12C22.5882 11.9003 22.5869 11.8009 22.5841 11.7019C22.5734 11.3122 22.8806 10.9875 23.2703 10.9768ZM1.19383 15.3696C1.55801 15.2305 1.96601 15.4129 2.10512 15.7771C2.17592 15.9625 2.25179 16.1454 2.33256 16.3256C2.492 16.6813 2.33285 17.099 1.9771 17.2584C1.62135 17.4179 1.2037 17.2587 1.04426 16.903C0.952662 16.6986 0.866605 16.4911 0.786287 16.2809C0.647181 15.9167 0.829644 15.5087 1.19383 15.3696ZM22.8062 15.3696C23.1704 15.5087 23.3528 15.9167 23.2137 16.2809C23.1334 16.4911 23.0473 16.6986 22.9557 16.903C22.7963 17.2587 22.3787 17.4179 22.0229 17.2584C21.6671 17.099 21.508 16.6813 21.6674 16.3256C21.7482 16.1454 21.8241 15.9625 21.8949 15.7771C22.034 15.4129 22.442 15.2305 22.8062 15.3696ZM3.30795 19.2462C3.59119 18.9783 4.03795 18.9908 4.30583 19.274C4.44195 19.4179 4.58207 19.558 4.726 19.6942C5.00924 19.962 5.0217 20.4088 4.75383 20.6921C4.48596 20.9753 4.03919 20.9878 3.75595 20.7199C3.59295 20.5657 3.43427 20.407 3.28012 20.244C3.01225 19.9608 3.0247 19.514 3.30795 19.2462ZM20.6921 19.2462C20.9753 19.514 20.9878 19.9608 20.7199 20.2441C20.5657 20.407 20.407 20.5657 20.244 20.7199C19.9608 20.9878 19.514 20.9753 19.2462 20.6921C18.9783 20.4088 18.9908 19.962 19.274 19.6942C19.4179 19.558 19.558 19.4179 19.6942 19.274C19.962 18.9908 20.4088 18.9783 20.6921 19.2462ZM6.74158 22.0229C6.90101 21.6671 7.31866 21.508 7.67441 21.6674C7.85463 21.7482 8.03751 21.8241 8.22288 21.8949C8.58706 22.034 8.76953 22.442 8.63042 22.8062C8.49131 23.1704 8.08331 23.3528 7.71913 23.2137C7.50885 23.1334 7.30143 23.0473 7.09704 22.9557C6.74128 22.7963 6.58214 22.3787 6.74158 22.0229ZM17.2584 22.0229C17.4179 22.3787 17.2587 22.7963 16.903 22.9557C16.6986 23.0473 16.4911 23.1334 16.2809 23.2137C15.9167 23.3528 15.5087 23.1704 15.3696 22.8062C15.2305 22.442 15.4129 22.034 15.7771 21.8949C15.9625 21.8241 16.1454 21.7482 16.3256 21.6674C16.6813 21.508 17.099 21.6671 17.2584 22.0229ZM10.9768 23.2703C10.9875 22.8806 11.3122 22.5734 11.7019 22.5841C11.8009 22.5869 11.9003 22.5882 12 22.5882C12.0997 22.5882 12.1991 22.5869 12.2981 22.5841C12.6878 22.5734 13.0125 22.8806 13.0232 23.2703C13.034 23.66 12.7268 23.9846 12.3371 23.9954C12.2251 23.9984 12.1127 24 12 24C11.8873 24 11.7749 23.9984 11.6629 23.9954C11.2732 23.9846 10.966 23.66 10.9768 23.2703Z\"\n })));\n};\nexport default SvgDottedCircle;","// extracted by mini-css-extract-plugin\nexport default {\"HeaderBroken\":\"lCKHgMs5\",\"Circle\":\"umZlg46a\",\"Headline\":\"mf7bgyxB\",\"NotMember\":\"kF0xgnsG\",\"IconChecked\":\"G2vPXW2P\",\"IconNotChecked\":\"OSDOP8QR\",\"IconCircleX\":\"FQx7RXp7\",\"IconX\":\"rMOf2gQi\",\"CloseIcon\":\"QaQ4HO1e\",\"NotAMemberButton\":\"tBaMmRDL\",\"NotConnectedTextLink\":\"ti3Y2mNc\",\"Header\":\"DzwuKXZW\",\"PointLoader\":\"qk2lxceg\",\"PrePoints\":\"kHY6kz7Q\",\"Points\":\"Wl7FUVSH\",\"Points-value\":\"mJjaD8q6\",\"PostPoints\":\"fHIV_Q1R\",\"InformationButton\":\"GhrzUxJz\",\"HeaderCompany\":\"h1UXyi3Z\",\"HeadlineCompany\":\"wvei73rN\"};","import { Button, Icon, Loader, ModalHeader } from '@coop/components';\nimport { CheckmarkIcon, CloseIcon, DottedCircleIcon, Warning1Icon } from '@coop/icons';\nimport { useQuery } from '@tanstack/react-query';\nimport classnames from 'classnames';\nimport type { FC } from 'react';\n\nimport { appConfig } from '../../../../../appConfig';\nimport { Helpers } from '../../../../../utility/helpers';\nimport loyaltyFlow from '../../../../common/flow/loyaltyFlow';\nimport {\n useHasUserAKimCustomerId,\n useIsUserAMember,\n useIsUserCompany,\n} from '../../../../common/hooks/useUserProfile';\nimport { ga4BonusEvents } from '../../../../common/tracking/ga4/bonus';\nimport { useHouseholdPointBalance } from '../../../../member/pointshop/hooks/useHouseholdPointBalance';\nimport BonusInfoConfirm from '../../../../myCoop/components/BonusInfoConfirm';\nimport { useMyCoopSettingsPageQuery } from '../../../../myCoop/hooks/useMyCoopSettingsPageQuery';\nimport { associationNamesQueryKey } from '../../../../myCoop/myCoopQueries';\nimport styles from './MenuHeaderBonusSystem.module.less';\n\ninterface MenuChildrenProps {\n isEligibleForBonus: boolean | undefined;\n myBonusOverviewPageUrl: string;\n handleLinkClick: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\nconst MenuHeaderBonusSystem: FC<MenuChildrenProps> = ({\n isEligibleForBonus,\n myBonusOverviewPageUrl,\n handleLinkClick,\n}) => {\n const isMember = useIsUserAMember();\n const isCompany = useIsUserCompany();\n\n const hasKimCustomerId = useHasUserAKimCustomerId();\n const { isShoppingForAnother } = appConfig.coopUserSettings;\n\n const {\n isSuccess: pointsIsSuccess,\n data: result,\n isLoading: pointsIsLoading,\n } = useHouseholdPointBalance(!!isMember);\n\n const { data: associationNames, isLoading: associationIsLoading } = useQuery({\n queryKey: associationNamesQueryKey,\n queryFn: loyaltyFlow.getMembershipNames,\n enabled: !!isMember,\n });\n\n // A member needs to have at least one association\n\n const memberMissingAssociations =\n isMember &&\n ((!associationIsLoading && !associationNames) ||\n (associationNames && associationNames.length < 1));\n\n const { data: settingsTexts } = useMyCoopSettingsPageQuery([\n 'brokenMemberHeadline',\n 'brokenMemberText',\n 'brokenMemberButtonContentReference',\n 'brokenMemberButtonText',\n 'notMemberHeadline',\n 'notMemberPoint1',\n 'notMemberPoint2',\n 'notMemberPoint3',\n 'notMemberPoint1Checked',\n 'notMemberPoint2Checked',\n 'notMemberPoint3Checked',\n 'notMemberPoint1CheckedText',\n 'notMemberPoint1UnCheckedText',\n 'notMemberPoint2CheckedText',\n 'notMemberPoint2UnCheckedText',\n 'notMemberPoint3CheckedText',\n 'notMemberPoint3UnCheckedText',\n 'notMemberButtonText',\n 'notMemberButtonContentReference',\n 'notConnectedButtonText',\n 'notConnectedButtonContentReference',\n ]);\n if (!settingsTexts) return null;\n\n if (memberMissingAssociations) {\n return (\n <div className={styles.HeaderBroken}>\n <div className={styles.Circle}>\n <Icon\n icon={Warning1Icon}\n className=\"u-colorRed\"\n width={32}\n height={32}\n title=\"Varning\"\n />\n </div>\n <ModalHeader className={styles.Headline}>\n {settingsTexts.brokenMemberHeadline\n ? settingsTexts.brokenMemberHeadline\n : 'NÃ¥got gick fel. Poäng kunde inte hämtas.'}\n </ModalHeader>\n {settingsTexts.brokenMemberText && <p>{settingsTexts.brokenMemberText}</p>}\n {settingsTexts.brokenMemberButtonContentReference?.url &&\n settingsTexts.brokenMemberButtonText && (\n <Button asChild theme=\"primary\" className=\"u-sizeFull\">\n <a\n href={settingsTexts.brokenMemberButtonContentReference?.url}\n className={styles.NotAMemberButton}\n >\n {settingsTexts.brokenMemberButtonText}\n </a>\n </Button>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={classnames(\n styles.Header,\n isCompany || isShoppingForAnother ? styles.HeaderCompany : '',\n )}\n >\n {!isMember && (\n <div className={styles.NotMember}>\n {isCompany || isShoppingForAnother ? (\n <ModalHeader className={styles.HeadlineCompany}>\n {isCompany ? 'Företagskonto' : ''}\n </ModalHeader>\n ) : (\n <>\n <ModalHeader className={styles.Headline}>\n {settingsTexts.notMemberHeadline\n ? settingsTexts.notMemberHeadline\n : 'Inloggad (ej medlem)'}\n </ModalHeader>\n {(settingsTexts.notMemberPoint1 ||\n settingsTexts.notMemberPoint2 ||\n settingsTexts.notMemberPoint3) && (\n <ul>\n {settingsTexts.notMemberPoint1 && (\n <li>\n <ListIcon\n isChecked={!!settingsTexts.notMemberPoint1Checked}\n aria-hidden\n />\n <div aria-hidden>{settingsTexts.notMemberPoint1}</div>\n <span className=\"u-hiddenVisually\">\n {settingsTexts.notMemberPoint1Checked\n ? settingsTexts.notMemberPoint1CheckedText\n : settingsTexts.notMemberPoint1UnCheckedText}\n </span>\n </li>\n )}\n\n {settingsTexts.notMemberPoint2 && (\n <li>\n <ListIcon\n isChecked={!!settingsTexts.notMemberPoint2Checked}\n aria-hidden\n />\n <div aria-hidden>{settingsTexts.notMemberPoint2}</div>\n <span className=\"u-hiddenVisually\">\n {settingsTexts.notMemberPoint2Checked\n ? settingsTexts.notMemberPoint2CheckedText\n : settingsTexts.notMemberPoint2UnCheckedText}\n </span>\n </li>\n )}\n\n {settingsTexts.notMemberPoint3 && (\n <li>\n <ListIcon\n isChecked={!!settingsTexts.notMemberPoint3Checked}\n aria-hidden\n />\n <div aria-hidden>{settingsTexts.notMemberPoint3}</div>\n <span className=\"u-hiddenVisually\">\n {settingsTexts.notMemberPoint3Checked\n ? settingsTexts.notMemberPoint3CheckedText\n : settingsTexts.notMemberPoint3UnCheckedText}\n </span>\n </li>\n )}\n </ul>\n )}\n\n {settingsTexts.notMemberButtonText &&\n settingsTexts.notMemberButtonContentReference?.url && (\n <Button asChild theme=\"primary\" fullWidth>\n <a\n href={settingsTexts.notMemberButtonContentReference.url}\n onClick={handleLinkClick}\n className={styles.NotAMemberButton}\n >\n {settingsTexts.notMemberButtonText}\n </a>\n </Button>\n )}\n {!hasKimCustomerId &&\n settingsTexts.notConnectedButtonText &&\n settingsTexts.notConnectedButtonContentReference?.url && (\n <div className={styles.NotConnectedTextLink}>\n Redan medlem?{' '}\n <a\n href={\n settingsTexts.notConnectedButtonContentReference.url\n }\n onClick={handleLinkClick}\n >\n {settingsTexts.notConnectedButtonText}\n </a>\n </div>\n )}\n </>\n )}\n </div>\n )}\n {isMember && (\n <div className={styles.Header}>\n <ModalHeader className={styles.PrePoints}>Bonus att använda</ModalHeader>\n\n {pointsIsSuccess && (\n <>\n <div className={classnames(styles['Points-value'], 'u-textCenter')}>\n {isEligibleForBonus && result ? (\n <>\n <span>\n {Helpers.formatMemberPointsAndAmount(result.points)}\n </span>\n <span aria-hidden> p</span>\n <span className=\"u-hiddenVisually\">poäng</span>\n </>\n ) : (\n '-'\n )}\n </div>\n\n {isEligibleForBonus && result && (\n <div className={styles.PostPoints}>\n <BonusInfoConfirm\n monetaryWorth={result.monetaryWorth}\n cssClasses={styles.InformationButton}\n onClickOpen={() => {\n ga4BonusEvents.navigation.infoSymbolInteraction(\n 'profile menu',\n );\n }}\n points={result.points}\n />\n </div>\n )}\n </>\n )}\n {pointsIsLoading && (\n <Loader theme=\"green\" additionalClassNames={styles.PointLoader} />\n )}\n\n {myBonusOverviewPageUrl && (\n <Button asChild theme=\"primary\" fullWidth>\n <a href={myBonusOverviewPageUrl} onClick={handleLinkClick}>\n Till översikten\n </a>\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};\n\nconst ListIcon: FC<{ isChecked: boolean }> = ({ isChecked }) => {\n if (isChecked) {\n return (\n <Icon\n icon={CheckmarkIcon}\n className={styles.IconChecked}\n width={32}\n height={32}\n aria-hidden\n />\n );\n }\n\n return (\n <div className={styles.IconCircleX}>\n <Icon icon={DottedCircleIcon} className={styles.IconNotChecked} aria-hidden />\n <Icon icon={CloseIcon} width={16} height={16} className={styles.IconX} aria-hidden />\n </div>\n );\n};\n\nexport default MenuHeaderBonusSystem;\n","import { Button, FullOverlayLoader } from '@coop/components';\nimport type { FC } from 'react';\nimport { useEffect } from 'react';\n\nimport { appConfig } from '../../../../appConfig';\nimport { ga4NavigationTracking } from '../../../common/tracking/ga4/navigation';\nimport { ga4UserTracking } from '../../../common/tracking/ga4/user';\nimport type { MyCoopProfileMenuItem } from '../../../episerver/api/localContentApi';\nimport { useCurrentEpiPage } from '../../../episerver/components/hooks/useCurrentEpiPage';\nimport { useEligibleForBonus } from '../../../member/pointshop/hooks/useEligibleForBonus';\nimport ProfileMenuList from '../../../myCoop/profileMenu/ProfileMenuList';\nimport MenuHeaderBonusSystem from './MenuHeaderBonusSystem';\nimport { useMyCoopProfileMenu } from './MyCoopProfileFlyIn.hooks';\nimport styles from './MyCoopProfileFlyIn.module.less';\n\ninterface MyCoopProfileMenuProps {\n handleListItemClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\nconst getParentName = (menuItems: MyCoopProfileMenuItem[] | undefined, selectedPageId: number) => {\n if (menuItems === undefined) return null;\n\n const parentMenu = menuItems.find((menu) =>\n menu?.menuItemChildren?.some((child) => child.id === selectedPageId),\n );\n\n return parentMenu ? parentMenu.name : null;\n};\n\nconst MyCoopProfileMenu: FC<MyCoopProfileMenuProps> = (props) => {\n const {\n data: pages,\n isSuccess: menuIsSuccess,\n isLoading: menuIsLoading,\n } = useMyCoopProfileMenu();\n\n const currentPage = useCurrentEpiPage();\n\n const menuPages = pages;\n\n const { data: isEligibleForBonus } = useEligibleForBonus(\n !!appConfig.coopUserSettings.isMedmeraCustomer,\n );\n\n const handleLinkClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n ga4NavigationTracking.profileMenu.click(e.currentTarget.innerText, e.currentTarget.href);\n };\n\n const handleLogoutLinkClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n ga4UserTracking.logout();\n handleLinkClick(e);\n };\n\n const handleListItemClick = (\n e: React.MouseEvent<HTMLAnchorElement>,\n item: MyCoopProfileMenuItem,\n ) => {\n props.handleListItemClick?.(e);\n ga4NavigationTracking.profileMenuWalletInteractionTrigger.click(\n getParentName(pages, item.id) ?? e.currentTarget.innerText,\n getParentName(pages, item.id) === null ? undefined : e.currentTarget.innerText,\n 'profile menu',\n e.currentTarget.innerText,\n e.currentTarget.href,\n );\n };\n\n const handleItemOpenClick = (item: MyCoopProfileMenuItem) => {\n ga4NavigationTracking.profileMenuWalletInteractionTrigger.open.level1Open(\n item.name,\n 'profile menu',\n );\n };\n\n const handleItemCloseClick = (item: MyCoopProfileMenuItem) => {\n ga4NavigationTracking.profileMenuWalletInteractionTrigger.close.level1Close(\n item.name,\n 'profile menu',\n );\n };\n\n useEffect(() => {\n ga4NavigationTracking.profileMenu.open();\n return () => {\n ga4NavigationTracking.profileMenu.close();\n };\n }, []);\n\n return (\n <>\n <MenuHeaderBonusSystem\n isEligibleForBonus={isEligibleForBonus}\n myBonusOverviewPageUrl={appConfig.coopSettings.myCoop.myBonusOverviewPageUrl}\n handleLinkClick={handleLinkClick}\n />\n <div className={styles.Content}>\n <FullOverlayLoader isLoading={menuIsLoading}>\n {menuIsSuccess && (\n <>\n {menuPages !== undefined && (\n <ProfileMenuList\n pages={menuPages}\n activePageId={currentPage?.data?.contentLink?.id}\n onItemClick={handleListItemClick}\n onItemOpen={handleItemOpenClick}\n onItemClose={handleItemCloseClick}\n />\n )}\n <div className={styles.Footer}>\n <Button theme=\"light\" asChild>\n <a\n href={appConfig.coopSettings.logoutUrl}\n onClick={handleLogoutLinkClick}\n >\n Logga ut\n </a>\n </Button>\n </div>\n </>\n )}\n </FullOverlayLoader>\n </div>\n </>\n );\n};\n\nexport default MyCoopProfileMenu;\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBag2 = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.79338 2.79289C4.18391 2.40237 4.81707 2.40237 5.2076 2.79289L9.4147 6.99997H20.7197C22.0208 6.99997 22.9756 8.22275 22.66 9.48505L20.16 19.485C19.9374 20.3754 19.1374 21 18.2197 21H5.78126C4.86352 21 4.06356 20.3754 3.84097 19.485L1.34097 9.48504C1.0254 8.22275 1.98012 6.99997 3.28126 6.99997H6.58626L3.79339 4.20711C3.40286 3.81658 3.40286 3.18342 3.79338 2.79289ZM8.58627 8.99997H3.28126L5.78126 19H18.2197L20.7197 8.99997H11.4147L12.7076 10.2929C13.0981 10.6834 13.0981 11.3166 12.7076 11.7071C12.3171 12.0976 11.6839 12.0976 11.2934 11.7071L8.58627 8.99997ZM8.00048 14C8.55277 14 9.00048 14.4477 9.00048 15V17C9.00048 17.5523 8.55277 18 8.00048 18C7.4482 18 7.00048 17.5523 7.00048 17V15C7.00048 14.4477 7.4482 14 8.00048 14ZM12.0005 14C12.5528 14 13.0005 14.4477 13.0005 15V17C13.0005 17.5523 12.5528 18 12.0005 18C11.4482 18 11.0005 17.5523 11.0005 17V15C11.0005 14.4477 11.4482 14 12.0005 14ZM16.0005 14C16.5528 14 17.0005 14.4477 17.0005 15V17C17.0005 17.5523 16.5528 18 16.0005 18C15.4482 18 15.0005 17.5523 15.0005 17V15C15.0005 14.4477 15.4482 14 16.0005 14Z\"\n })));\n};\nexport default SvgBag2;","// extracted by mini-css-extract-plugin\nexport default {\"EmptyHeader\":\"CDJKXKme\",\"Footer\":\"PA50agCi\",\"Content\":\"JKO_uO6T\"};","import { OverlayLoader } from '@coop/components';\nimport { UserIcon } from '@coop/icons';\nimport * as React from 'react';\n\nimport { FlyinNavigation } from '../../../common/components/atoms/FlyInNavigation';\nimport { FlyIn } from '../../../common/components/atoms/Modal';\nimport useModal from '../../../common/hooks/useModal';\nimport { FlyInType } from '../../../common/store/structureDefinitions/modalState';\nimport HeaderIconButton from '../HeaderIconButton/HeaderIconButton';\nimport MyCoopProfileMenu from './MyCoopProfileMenu';\n\nconst MyCoopProfileFlyIn = () => {\n const { open, isOpen, close } = useModal(FlyInType.MyProfileMenu);\n\n return (\n <FlyIn\n isOpen={isOpen}\n close={close}\n sizePx={375}\n renderTrigger={(ref) => (\n <HeaderIconButton\n ref={ref}\n icon={UserIcon}\n label=\"Mitt coop\"\n testSelector=\"user\"\n onClick={open}\n theme=\"bordered\"\n />\n )}\n >\n <FlyinNavigation onClose={close}>\n <React.Suspense fallback={<OverlayLoader isLoading />}>\n <MyCoopProfileMenu />\n </React.Suspense>\n </FlyinNavigation>\n </FlyIn>\n );\n};\n\nexport default MyCoopProfileFlyIn;\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgOverview = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2 4.99951C2 3.34266 3.34315 1.99951 5 1.99951H8C9.65685 1.99951 11 3.34266 11 4.99951V9.99951C11 11.6564 9.65685 12.9995 8 12.9995H5C3.34315 12.9995 2 11.6564 2 9.99951V4.99951ZM5 3.99951C4.44772 3.99951 4 4.44723 4 4.99951V9.99951C4 10.5518 4.44772 10.9995 5 10.9995H8C8.55228 10.9995 9 10.5518 9 9.99951V4.99951C9 4.44723 8.55228 3.99951 8 3.99951H5ZM13 4.99951C13 3.34266 14.3431 1.99951 16 1.99951H19C20.6569 1.99951 22 3.34266 22 4.99951V5.99951C22 7.65637 20.6569 8.99951 19 8.99951H16C14.3431 8.99951 13 7.65637 13 5.99951V4.99951ZM16 3.99951C15.4477 3.99951 15 4.44723 15 4.99951V5.99951C15 6.5518 15.4477 6.99951 16 6.99951H19C19.5523 6.99951 20 6.5518 20 5.99951V4.99951C20 4.44723 19.5523 3.99951 19 3.99951H16ZM13 13.9995C13 12.3427 14.3431 10.9995 16 10.9995H19C20.6569 10.9995 22 12.3427 22 13.9995V18.9995C22 20.6564 20.6569 21.9995 19 21.9995H16C14.3431 21.9995 13 20.6564 13 18.9995V13.9995ZM16 12.9995C15.4477 12.9995 15 13.4472 15 13.9995V18.9995C15 19.5518 15.4477 19.9995 16 19.9995H19C19.5523 19.9995 20 19.5518 20 18.9995V13.9995C20 13.4472 19.5523 12.9995 19 12.9995H16ZM2 17.9995C2 16.3427 3.34315 14.9995 5 14.9995H8C9.65685 14.9995 11 16.3427 11 17.9995V18.9995C11 20.6564 9.65685 21.9995 8 21.9995H5C3.34315 21.9995 2 20.6564 2 18.9995V17.9995ZM5 16.9995C4.44772 16.9995 4 17.4472 4 17.9995V18.9995C4 19.5518 4.44772 19.9995 5 19.9995H8C8.55228 19.9995 9 19.5518 9 18.9995V17.9995C9 17.4472 8.55228 16.9995 8 16.9995H5Z\"\n })));\n};\nexport default SvgOverview;","import type { Badge } from '@coop/components';\nimport { AnimatedBadge, BadgePositioning } from '@coop/components';\nimport { Bag2Icon } from '@coop/icons';\nimport { useEffect } from 'react';\n\nimport { appConfig } from '../../../../appConfig';\nimport { LocalStorageFacade } from '../../../../facades/storage/localStorageFacade';\nimport cartItemsSelectors from '../../../cart/selectors/cartItemsSelectors';\nimport { useCncFlyInState } from '../../../common/hooks/useCncFlyInState';\nimport { useAppDispatch, useAppSelector } from '../../../common/hooks/useThunkDispatch';\nimport { storeSelectors } from '../../../common/selectors/storeSelectors';\nimport tracking from '../../../common/tracking/tracking';\nimport HeaderIconButton from '../HeaderIconButton';\n\nconst CartTrigger = ({\n badgeColor,\n}: {\n badgeColor: React.ComponentProps<typeof Badge>['color'];\n}) => {\n const dispatch = useAppDispatch();\n const { initCnc } = useCncFlyInState();\n const postalCode = useAppSelector(storeSelectors.currentPostalCode);\n\n const openCnc = () => {\n tracking.cnc.openFrom.cartIcon(!!postalCode);\n initCnc();\n };\n\n const cartItemCount = useAppSelector(cartItemsSelectors.selectCartQuantity);\n\n useEffect(() => {\n const action = LocalStorageFacade.instance.get('Ecommerce:action');\n if (\n action === 'cnc' &&\n window.location.pathname.indexOf(appConfig.coopSettings.ecommerce.url) > -1\n ) {\n initCnc();\n LocalStorageFacade.instance.remove('Ecommerce:action');\n }\n }, [dispatch, initCnc]);\n\n return (\n <BadgePositioning>\n <HeaderIconButton\n icon={Bag2Icon}\n label={(() => {\n if (cartItemCount > 1) return `Varukorg med ${cartItemCount} varor`;\n if (cartItemCount === 1) return 'Varukorg med en vara';\n return 'Varukorg';\n })()}\n onClick={openCnc}\n data-test=\"showMiniCart\"\n aria-haspopup=\"dialog\"\n theme={!cartItemCount ? 'bordered' : 'solid'}\n >\n <div aria-hidden=\"true\">\n <AnimatedBadge\n color={badgeColor}\n size=\"small\"\n wide={cartItemCount > 99}\n top={-6}\n right={-6}\n animationProps={{\n key: cartItemCount,\n in: !!cartItemCount,\n timeout: 500,\n appear: true,\n enter: true,\n }}\n >\n {cartItemCount}\n </AnimatedBadge>\n </div>\n </HeaderIconButton>\n </BadgePositioning>\n );\n};\n\nexport default CartTrigger;\n","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgMenu5 = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 16.5C12.9665 16.5 13.75 17.2835 13.75 18.25C13.75 19.2165 12.9665 20 12 20C11.0335 20 10.25 19.2165 10.25 18.25C10.25 17.2835 11.0335 16.5 12 16.5Z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 4C12.9665 4 13.75 4.7835 13.75 5.75C13.75 6.7165 12.9665 7.5 12 7.5C11.0335 7.5 10.25 6.7165 10.25 5.75C10.25 4.7835 11.0335 4 12 4Z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 10.25C12.9665 10.25 13.75 11.0335 13.75 12C13.75 12.9665 12.9665 13.75 12 13.75C11.0335 13.75 10.25 12.9665 10.25 12C10.25 11.0335 11.0335 10.25 12 10.25Z\"\n })));\n};\nexport default SvgMenu5;","'use client';\n\n/* eslint-disable react/jsx-props-no-spreading */\nimport type * as React from 'react';\nimport {\n type Popover as AriaPopover,\n Button,\n Dialog as AriaDialog,\n DialogTrigger,\n Popover,\n} from 'react-aria-components';\n\nimport styles from './PopoverDialog.module.scss';\n\nconst Dialog = (\n props: React.PropsWithChildren<{\n triggerSlot: React.ReactNode;\n popoverProps?: React.ComponentProps<typeof AriaPopover>;\n onOpenChange?: (isOpen: boolean) => void;\n }>,\n) => {\n return (\n <DialogTrigger onOpenChange={props.onOpenChange}>\n {props.triggerSlot}\n <Popover {...props.popoverProps} className={styles.Popover}>\n <AriaDialog>{props.children}</AriaDialog>\n </Popover>\n </DialogTrigger>\n );\n};\n\nconst Trigger = (props: React.ComponentProps<typeof Button>) => {\n return <Button {...props}>{props.children}</Button>;\n};\n\nconst PopoverDialog = {\n Dialog,\n Trigger,\n};\n\nexport default PopoverDialog;\n","// extracted by mini-css-extract-plugin\nexport default {\"Popover\":\"KeGmhcI_\"};","/* eslint-disable react/jsx-props-no-spreading */\nimport classnames from 'classnames';\nimport { Link as AriaLink } from 'react-aria-components';\n\nimport actionListStyles from '../ActionList/ActionList.module.scss';\nimport { Icon } from '../Icon';\nimport popoverLinkListStyles from './PopoverLinkList.module.scss';\n\nconst List = (props: React.ComponentProps<'ul'>) => {\n return (\n <ul\n {...props}\n className={classnames(\n actionListStyles.ActionList,\n popoverLinkListStyles.PopoverLinkList,\n props.className,\n )}\n >\n {props.children}\n </ul>\n );\n};\n\nconst Item = (props: React.ComponentProps<'li'>) => {\n return (\n <li\n {...props}\n className={classnames(\n actionListStyles.Item,\n popoverLinkListStyles.Item,\n props.className,\n )}\n >\n {props.children}\n </li>\n );\n};\n\nconst Link = (props: React.ComponentProps<typeof AriaLink>) => {\n return (\n <AriaLink {...props} className={classnames(popoverLinkListStyles.Link, props.className)}>\n {props.children}\n </AriaLink>\n );\n};\n\nexport const LinkIcon = (props: {\n icon?: React.ComponentProps<typeof Icon>['icon'];\n className?: string;\n}) => {\n return props.icon ? (\n <Icon\n icon={props.icon}\n className={classnames(popoverLinkListStyles.LinkIcon, props.className)}\n aria-hidden\n />\n ) : null;\n};\n\nconst PopoverLinkList = {\n List,\n Item,\n Link,\n LinkIcon,\n};\n\nexport default PopoverLinkList;\n","// extracted by mini-css-extract-plugin\nexport default {\"PopoverLinkList\":\"lbTEfFSg\",\"Item\":\"zCNohEah\",\"Link\":\"mC4tFWoT\",\"LinkIcon\":\"CNL_aw_Y\"};","import { AccessibleIcon, Button, PopoverDialog, PopoverLinkList } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport { useState } from 'react';\n\nimport { ga4NavigationTracking } from '../../../../common/tracking/ga4/navigation';\nimport styles from './HeaderProfilePopover.module.less';\nimport type { ProfilePopoverLinkItem } from './HeaderProfilePopover.types';\n\nconst HeaderProfilePopover = (props: {\n items: ProfilePopoverLinkItem[];\n label: string;\n icon: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const handleTriggerClick = (_isOpen: boolean) => {\n if (_isOpen) {\n setIsOpen(true);\n ga4NavigationTracking.savedItems.open();\n } else {\n setIsOpen(false);\n ga4NavigationTracking.savedItems.close();\n }\n };\n\n const handleListItemClick = (href: string, item: ProfilePopoverLinkItem) => {\n ga4NavigationTracking.savedItems.click(item.name, href);\n };\n\n return (\n <PopoverDialog.Dialog\n onOpenChange={handleTriggerClick}\n triggerSlot={\n <Button asChild asIcon theme=\"whiteOutline\" className={styles.Button}>\n <PopoverDialog.Trigger>\n <AccessibleIcon\n label={props.label}\n icon={isOpen ? CloseIcon : props.icon}\n />\n </PopoverDialog.Trigger>\n </Button>\n }\n >\n <PopoverLinkList.List>\n {props.items.map((item) => (\n <PopoverLinkList.Item key={item.name}>\n <PopoverLinkList.Link\n href={item.url}\n onPress={(e) => {\n handleListItemClick((e.target as HTMLAnchorElement).href, item);\n }}\n >\n <PopoverLinkList.LinkIcon className={styles.Icon} icon={item.icon} />\n {item.name}\n </PopoverLinkList.Link>\n </PopoverLinkList.Item>\n ))}\n </PopoverLinkList.List>\n </PopoverDialog.Dialog>\n );\n};\n\nexport default HeaderProfilePopover;\n","// extracted by mini-css-extract-plugin\nexport default {\"Button\":\"HtPD3RSm\",\"Icon\":\"VxeuNkeD\"};","import { Bag1Icon, HeartIcon, HomeIcon, PaperIcon } from '@coop/icons';\n\nimport { appConfig } from '../../../../../appConfig';\nimport type { ProfilePopoverLinkItem } from './HeaderProfilePopover.types';\n\nexport const links: ProfilePopoverLinkItem[] = [\n {\n name: 'Sparade varukorgar',\n url: appConfig.coopSettings.myCoop.savedCartListUrl,\n icon: Bag1Icon,\n },\n {\n name: 'Sparade inköpslistor',\n url: appConfig.coopSettings.myCoop.shoppingListPageUrl,\n icon: PaperIcon,\n },\n {\n name: 'Sparade recept',\n url: appConfig.coopSettings.myCoop.savedRecipesPageUrl,\n icon: HeartIcon,\n },\n {\n name: 'Favoritbutiker',\n url: appConfig.coopSettings.stores.mapStorePageUrl,\n icon: HomeIcon,\n },\n] as const;\n\nexport const b2bLinks: ProfilePopoverLinkItem[] = [\n {\n name: 'Sparade varukorgar',\n url: appConfig.coopSettings.myCoop.savedCartListUrl,\n icon: Bag1Icon,\n },\n {\n name: 'Sparade inköpslistor',\n url: appConfig.coopSettings.myCoop.shoppingListPageUrl,\n icon: PaperIcon,\n },\n] as const;\n","import { HeartIcon, Menu5Icon, OverviewIcon } from '@coop/icons';\nimport { useMemo } from 'react';\n\nimport { appConfig } from '../../../../../appConfig';\nimport { useIsB2BRoute } from '../../../../common/utils/b2bUtils';\nimport HeaderProfilePopover from './HeaderProfilePopover';\nimport { b2bLinks, links } from './HeaderProfilePopover.utils';\n\nexport const HeaderMyFavoritesDropdown = () => {\n const isB2BRoute = useIsB2BRoute();\n\n const items = useMemo(() => (isB2BRoute ? [...b2bLinks] : [...links]), [isB2BRoute]);\n\n return <HeaderProfilePopover items={items} label=\"Mina favoriter\" icon={HeartIcon} />;\n};\n\nexport const HeaderProfileDotDropdown = () => {\n const isB2BRoute = useIsB2BRoute();\n\n const items = useMemo(() => {\n const filteredLinks = isB2BRoute ? [...b2bLinks] : [...links];\n\n const overviewPageUrl = isB2BRoute\n ? appConfig.coopSettings.b2b.myCoopOverviewPage?.url\n : appConfig.coopSettings.myCoop.myBonusOverviewPageUrl;\n\n if (overviewPageUrl) {\n filteredLinks.unshift({\n name: 'Mitt Coop & Bonusöversikt',\n url: overviewPageUrl,\n icon: OverviewIcon,\n });\n }\n\n return filteredLinks;\n }, [isB2BRoute]);\n\n return <HeaderProfilePopover items={items} label=\"Min profil\" icon={Menu5Icon} />;\n};\n","import { Button } from '@coop/components';\n\nimport { useIsUserAuthenticated, useIsUserCompany } from '../../../common/hooks/useUserProfile';\nimport { ga4UserTracking } from '../../../common/tracking/ga4/user';\nimport { isInB2BCrossContext, useIsB2BRoute } from '../../../common/utils/b2bUtils';\nimport { getLoginUrl, getLoginUrlWithReturnUrl } from '../../../common/utils/urlUtils';\nimport MyCoopProfileFlyIn from '../MyCoopProfileFlyIn';\nimport CncTrigger from './CncTrigger';\nimport { HeaderMyFavoritesDropdown, HeaderProfileDotDropdown } from './HeaderProfileDropdown';\n\nconst ProfileNav = (props: { disableMyFavoritesMenu: boolean }) => {\n return (\n <>\n <div className=\"HeaderBanner-ProfileNav\">\n {!props.disableMyFavoritesMenu && <HeaderMyFavoritesDropdown />}\n <MyCoopProfileFlyIn />\n </div>\n <div className=\"HeaderBanner-ProfileDotNav\">\n {!props.disableMyFavoritesMenu ? (\n <HeaderProfileDotDropdown />\n ) : (\n <MyCoopProfileFlyIn />\n )}\n </div>\n </>\n );\n};\n\nconst HeaderRightNav = (props: {\n disableMyFavoritesMenu: boolean;\n stayAfterLoginLogoutRedirect: boolean;\n headerTheme: 'black' | 'darkGreen';\n}) => {\n const isAuthenticated = useIsUserAuthenticated();\n const isB2BRoute = useIsB2BRoute();\n const { companyUserOnPrivateSite, privateUserOnCompanySite } = isInB2BCrossContext({\n isB2BRoute,\n isUserCompany: useIsUserCompany(),\n isAuthenticated,\n });\n\n const onLoginClickTracking = () => {\n ga4UserTracking.login(null, 'start');\n };\n\n if (privateUserOnCompanySite) {\n return (\n <Button theme=\"primary\" asChild className=\"LoginButton\">\n <a\n rel=\"nofollow\"\n href={getLoginUrl('company', 'login')}\n onClick={onLoginClickTracking}\n >\n Logga in företag\n </a>\n </Button>\n );\n }\n\n if (companyUserOnPrivateSite) {\n return (\n <Button theme=\"primary\" asChild className=\"LoginButton\">\n <a\n rel=\"nofollow\"\n href={getLoginUrl('private', 'login')}\n onClick={onLoginClickTracking}\n >\n Logga in privat\n </a>\n </Button>\n );\n }\n\n return (\n <>\n {!isAuthenticated ? (\n <Button\n theme=\"primary\"\n asChild\n onClick={onLoginClickTracking}\n className=\"LoginButton\"\n >\n <a\n rel=\"nofollow\"\n href={getLoginUrlWithReturnUrl(\n isB2BRoute ? 'company' : 'private',\n 'none',\n props.stayAfterLoginLogoutRedirect,\n )}\n >\n Logga in\n </a>\n </Button>\n ) : (\n <ProfileNav disableMyFavoritesMenu={props.disableMyFavoritesMenu} />\n )}\n <CncTrigger badgeColor={props.headerTheme === 'darkGreen' ? 'white' : 'ctaGreen'} />\n </>\n );\n};\n\nexport default HeaderRightNav;\n","// extracted by mini-css-extract-plugin\nexport default {\"PositionTopRight\":\"WLHIcOiI\",\"is-animated\":\"BsyjQGCP\",\"Wrapper\":\"WaA3X7EF\",\"is-visible\":\"s6k7BeWp\",\"Tooltip\":\"bDxLqf80\",\"Heading\":\"at62Osnh\",\"Content\":\"AKn5li8_\",\"Footer\":\"MegBALFy\",\"Close\":\"vU8hKe7u\"};","/* eslint-disable react/jsx-props-no-spreading */\nimport { Button, ChipIconButton } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type * as React from 'react';\nimport { useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport styles from './TooltipNotification.module.scss';\n\ntype RestrictedButtonProps = Omit<React.ComponentProps<typeof Button>, 'theme' | 'fullWidth'>;\n\ninterface TooltipNotificationProps {\n isOpen: boolean;\n close: () => void;\n header: string;\n content?: string;\n animated?: boolean;\n primaryButtonProps: RestrictedButtonProps;\n secondaryButtonProps: RestrictedButtonProps;\n}\n\nconst TooltipNotification = ({ animated = true, ...props }: TooltipNotificationProps) => {\n const transitionRef = useRef(null);\n\n return (\n <CSSTransition\n nodeRef={transitionRef}\n in={props.isOpen}\n timeout={animated ? 200 : 0}\n classNames={{\n enterActive: classNames(styles['is-visible']),\n enterDone: classNames(styles['is-visible']),\n }}\n appear\n unmountOnExit\n >\n <div\n ref={transitionRef}\n role=\"tooltip\"\n className={classNames(styles.Wrapper, animated && styles['is-animated'])}\n >\n <div className={styles.Tooltip}>\n <div className={styles.Heading}>{props.header}</div>\n <div className={styles.Content}>{props.content}</div>\n <div className={styles.Close}>\n <ChipIconButton\n theme=\"whiteGreen\"\n onClick={props.close}\n size={32}\n icon={CloseIcon}\n label=\"Stäng\"\n />\n </div>\n <div className={styles.Footer}>\n <Button {...props.primaryButtonProps} theme=\"primary\" fullWidth />\n <Button {...props.secondaryButtonProps} theme=\"primaryOutline\" fullWidth />\n </div>\n </div>\n </div>\n </CSSTransition>\n );\n};\n\nexport default TooltipNotification;\n","import { TooltipNotification } from '@coop/components';\nimport type { FC } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { appConfig } from '../../../../appConfig';\nimport { Cookies } from '../../../../utility/cookies';\nimport { COOKIE_LOGIN_REMINDER } from '../../../common/persistance/cookie/cookieKeys';\nimport { ga4UserTracking } from '../../../common/tracking/ga4/user';\nimport Tracking from '../../../common/tracking/tracking';\nimport { useIsB2BRoute } from '../../../common/utils/b2bUtils';\nimport { getCreateAccountUrl, getLoginUrlWithReturnUrl } from '../../../common/utils/urlUtils';\n\ninterface LoginReminderTooltipProps {\n stayAfterLoginLogoutRedirect: boolean;\n heading: string;\n content: string;\n}\n\nconst LoginReminderTooltip: FC<React.PropsWithChildren<LoginReminderTooltipProps>> = (props) => {\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n const isUserLoggedIn = appConfig.coopUserSettings.isAuthenticated;\n const hasSeenTooltipThisSession = () =>\n !!Cookies.read(COOKIE_LOGIN_REMINDER) ||\n window.abtest.loginReminderPopupShown === false;\n\n let handle: NodeJS.Timeout;\n if (!isUserLoggedIn && !hasSeenTooltipThisSession()) {\n handle = setTimeout(() => {\n if (!hasSeenTooltipThisSession()) {\n setShow(true);\n }\n }, 40000);\n }\n return () => {\n clearTimeout(handle);\n };\n }, []);\n\n const close = () => {\n Cookies.create(COOKIE_LOGIN_REMINDER, 'true');\n Tracking.header.loginReminder.close();\n\n setShow(false);\n };\n\n const isB2BRoute = useIsB2BRoute();\n\n const loginUrl = getLoginUrlWithReturnUrl(\n isB2BRoute ? 'company' : 'private',\n 'none',\n props.stayAfterLoginLogoutRedirect,\n );\n\n const createAccountUrl = getCreateAccountUrl(isB2BRoute ? 'company' : 'private');\n\n return (\n <TooltipNotification\n animated\n isOpen={show}\n close={close}\n header={props.heading}\n content={props.content}\n primaryButtonProps={{\n asChild: true,\n children: (\n <a\n rel=\"nofollow\"\n href={loginUrl}\n onClick={(e) => {\n e.preventDefault();\n Cookies.create(COOKIE_LOGIN_REMINDER, 'true');\n Tracking.header.loginReminder.goToLogin();\n ga4UserTracking.login(null, 'start');\n window.location.href = e.currentTarget.href;\n }}\n >\n Logga in\n </a>\n ),\n }}\n secondaryButtonProps={{\n asChild: true,\n children: (\n <a\n rel=\"nofollow\"\n href={createAccountUrl}\n onClick={() => {\n Cookies.create(COOKIE_LOGIN_REMINDER, 'true');\n Tracking.header.loginReminder.goToCreateAccount();\n }}\n >\n Skapa konto\n </a>\n ),\n }}\n />\n );\n};\n\nexport default LoginReminderTooltip;\n","import { appConfig } from '../../../../appConfig';\nimport { BrowserSize } from '../../../../utility/browser';\nimport { HeaderCartErrorNotice } from '../../../cart/components/molecules/CartErrorNotice';\nimport { useFromBrowserMediaQuery } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport { useAppSelector } from '../../../common/hooks/useThunkDispatch';\nimport { useUserTypeQuery } from '../../../common/hooks/useUserType';\nimport { UserType } from '../../../common/store/structureDefinitions/userState';\nimport LoginReminderTooltip from '../LoginReminderTooltip';\nimport EpiQuickNavigatorButton from './EpiQuickNavigatorButton';\nimport type FeaturedNavigation from './FeaturedNavigation';\nimport HeaderBanner from './HeaderBanner';\nimport HeaderLeftNav from './HeaderLeftNav';\nimport HeaderRightNav from './HeaderRightNav';\n\nconst HeaderStickyBanner = (props: {\n featuredNavigation: {\n items: React.ComponentProps<typeof FeaturedNavigation>['items'];\n };\n headerTheme: 'darkGreen' | 'black';\n stayAfterLoginLogoutRedirect: boolean;\n searchSlot?: React.ReactNode;\n}) => {\n const isFromLarge = useFromBrowserMediaQuery(BrowserSize.lg);\n const hideLoginReminder = useAppSelector((state) => state.ui.shared.hideLoginReminder);\n\n const { data: userType } = useUserTypeQuery();\n const isPunchout = userType === UserType.punchout;\n\n const disableMyFavoritesMenu = isPunchout || appConfig.coopUserSettings.isShoppingForMunicipal;\n\n return (\n <>\n <HeaderBanner.Banner headerTheme={props.headerTheme}>\n <HeaderBanner.LeftSlot>\n {isFromLarge && (\n <HeaderBanner.LeftNav>\n <HeaderLeftNav\n disableSiteNavigation={false}\n navigationItems={props.featuredNavigation?.items}\n />\n </HeaderBanner.LeftNav>\n )}\n </HeaderBanner.LeftSlot>\n {props.searchSlot && (\n <HeaderBanner.CenterSlot>{props.searchSlot}</HeaderBanner.CenterSlot>\n )}\n <HeaderBanner.RightSlot>\n {isFromLarge && (\n <HeaderBanner.RightNav>\n <HeaderRightNav\n disableMyFavoritesMenu={disableMyFavoritesMenu}\n stayAfterLoginLogoutRedirect={props.stayAfterLoginLogoutRedirect}\n headerTheme={props.headerTheme}\n />\n </HeaderBanner.RightNav>\n )}\n </HeaderBanner.RightSlot>\n <EpiQuickNavigatorButton />\n </HeaderBanner.Banner>\n <div\n className=\"u-posAbsolute u-flex u-flexDirectionColumn u-flexGap12 u-paddingAsm\"\n style={{ right: 0 }}\n >\n {!hideLoginReminder && (\n <LoginReminderTooltip\n stayAfterLoginLogoutRedirect={props.stayAfterLoginLogoutRedirect}\n heading=\"Hej!\"\n content=\"Glöm inte att logga in för att se erbjudanden i ditt omrÃ¥de.\"\n />\n )}\n </div>\n <HeaderCartErrorNotice />\n </>\n );\n};\n\nexport default HeaderStickyBanner;\n","import { useElementEvent } from '@coop/hooks';\nimport { useCallback, useRef, useState } from 'react';\n\nimport { BrowserSize } from '../../../../utility/browser';\nimport { useFromBrowserMediaQuery } from '../../../common/components/atoms/ResponsiveBreakpoints';\n\ntype ScrollDirection = 'up' | 'down' | null;\n\nexport const useScrolDirection = () => {\n const [direction, setDirection] = useState<ScrollDirection>(null);\n\n const lastKnownPos = useRef(0);\n const checkDirection = useCallback(() => {\n const currentScroll = window.scrollY;\n const isScrolledToEnd =\n Math.abs(document.documentElement.scrollHeight - window.innerHeight - window.scrollY) <=\n 1;\n // scroll-bouncing in Safari has a nevative scrollY when it happens, dont trigger the state if scroll bouncing is detected\n if (currentScroll >= 0 && !isScrolledToEnd) {\n if (currentScroll > lastKnownPos.current) {\n setDirection('down');\n } else {\n setDirection('up');\n }\n lastKnownPos.current = currentScroll;\n }\n }, []);\n\n useElementEvent(window, 'scroll', checkDirection, true);\n\n return direction;\n};\n\nexport const useIsMobileHeader = () => {\n const isFromLarge = useFromBrowserMediaQuery(BrowserSize.lg);\n\n return !isFromLarge;\n};\n","import classNames from 'classnames';\nimport { type ReactNode, useRef } from 'react';\n\nimport { useDocumentPropertyHeightSetter } from '../../../common/hooks/useDocumentPropertyHeightSetter';\n\ninterface SearchInContentProps {\n searchSlot: ReactNode;\n}\n\nconst HeaderSearch = (props: SearchInContentProps) => {\n const ref = useRef<HTMLDivElement>(null);\n useDocumentPropertyHeightSetter('--headerSearchHeight', ref);\n\n return (\n <div ref={ref} className={classNames('HeaderSearch')} data-test=\"searchHeader\">\n {props.searchSlot && (\n <div role=\"search\" className=\"HeaderSearchBar\">\n {props.searchSlot}\n </div>\n )}\n </div>\n );\n};\n\nexport default HeaderSearch;\n","export interface HeaderAlert {\n heading: string;\n details: string;\n level: number;\n id: string;\n}\n\nexport const AlertLevels = [1, 2, 3, 4] as const;\n\nexport type AlertLevel = (typeof AlertLevels)[number];\n\n/**\n * Same as HeaderAlertsReactProps on backend\n */\nexport interface HeaderAlertsPortalDOMProps {\n alerts: HeaderAlert[];\n}\n","import { NoticeRibbonType } from '../../../common/components/atoms/NoticeRibbon';\nimport type { AlertLevel } from './HeaderAlerts.types';\nimport { AlertLevels } from './HeaderAlerts.types';\n\nexport const isAlertLevelSupported = (num: number): num is AlertLevel => {\n return AlertLevels.includes(num as AlertLevel);\n};\n\nexport const getNoticeTypeForAlertLevel = (level?: AlertLevel) => {\n switch (level) {\n case 4:\n return NoticeRibbonType.alertLevel4;\n case 3:\n return NoticeRibbonType.alertLevel3;\n case 2:\n return NoticeRibbonType.alertLevel2;\n case 1:\n return NoticeRibbonType.alertLevel1;\n default: {\n // eslint-disable-next-line no-console\n console.error('Unsupported alert level. Using Level1 as fallback');\n return NoticeRibbonType.alertLevel1;\n }\n }\n};\n","import type { FC, ReactNode } from 'react';\nimport { useState } from 'react';\n\nimport NoticeRibbon from '../../../common/components/atoms/NoticeRibbon';\nimport persistance from '../../../common/persistance/persistance';\nimport type { AlertLevel } from './HeaderAlerts.types';\nimport { getNoticeTypeForAlertLevel } from './HeaderAlerts.utils';\n\ninterface AlertProps {\n id: string;\n level?: AlertLevel;\n details: ReactNode | string;\n children: ReactNode;\n}\n\nconst Alert: FC<React.PropsWithChildren<AlertProps>> = (props) => {\n const isDismissed = persistance.alertsDismissed.isDismissed(props.id);\n const [show, setShow] = useState(!isDismissed);\n\n const handleCloseClick = () => {\n persistance.alertsDismissed.dismiss(props.id);\n setShow(false);\n };\n\n return (\n <NoticeRibbon\n show={show}\n animated={false}\n handleCloseClick={handleCloseClick}\n blockClose={props.level === 1} // the VERY important messages can't be closed\n type={getNoticeTypeForAlertLevel(props.level)}\n expandableContent={props.details}\n >\n {props.children}\n </NoticeRibbon>\n );\n};\n\nexport default Alert;\n","import { type FC, useRef } from 'react';\n\nimport RawHtml from '../../../common/components/atoms/RawHtml';\nimport { useDocumentPropertyHeightSetter } from '../../../common/hooks/useDocumentPropertyHeightSetter';\nimport Alert from './Alert';\nimport type { HeaderAlert } from './HeaderAlerts.types';\nimport { isAlertLevelSupported } from './HeaderAlerts.utils';\n\ninterface HeaderAlertsProps {\n alerts: HeaderAlert[];\n}\n\nconst HeaderAlerts: FC<React.PropsWithChildren<HeaderAlertsProps>> = (props) => {\n const ref = useRef<HTMLDivElement>(null);\n useDocumentPropertyHeightSetter('--headerAlertsContainerHeight', ref);\n\n if (!props.alerts?.length) return null;\n return (\n <div ref={ref} className=\"HeaderAlerts\">\n {props.alerts.map((alert) => (\n <Alert\n key={alert.id}\n id={alert.id}\n level={isAlertLevelSupported(alert.level) ? alert.level : undefined}\n details={alert.details && <RawHtml html={alert.details} />}\n >\n <span className=\"u-textWeightBold\">\n <RawHtml html={alert.heading} />\n </span>\n </Alert>\n ))}\n </div>\n );\n};\n\nexport default HeaderAlerts;\n","import ComponentPortals from '../../../common/components/molecules/ComponentPortals';\nimport HeaderAlerts from './HeaderAlerts';\nimport type { HeaderAlertsPortalDOMProps } from './HeaderAlerts.types';\n\nconst HeaderAlertsPortal = () => {\n return (\n <ComponentPortals\n cmpName=\"HeaderAlerts\"\n render={(domProps: HeaderAlertsPortalDOMProps) => (\n <HeaderAlerts alerts={domProps.alerts} />\n )}\n />\n );\n};\n\nexport default HeaderAlertsPortal;\n","// extracted by mini-css-extract-plugin\nexport default {\"Button--bordered\":\"PDaCI9O9\",\"Button--solid\":\"Ly3sGWeB\"};","/* eslint-disable react/jsx-props-no-spreading */\nimport { IconButton } from '@coop/components';\nimport * as React from 'react';\n\nimport styles from './HeaderIconButton.module.less';\n\nconst HeaderIconButton = React.forwardRef<\n HTMLButtonElement,\n Omit<React.ComponentProps<typeof IconButton>, 'theme'> & {\n theme: 'bordered' | 'solid';\n }\n>((props, ref) => {\n return (\n <IconButton\n ref={ref}\n {...props}\n theme=\"whiteOutline\"\n className={styles[`Button--${props.theme}`]}\n >\n {props.children}\n </IconButton>\n );\n});\n\nexport default HeaderIconButton;\n","import getLocalApiAxiosClient from '../../common/api/clients/localApiAxiosClient';\n\nexport interface MyCoopProfileMenuItem {\n id: number;\n name: string;\n url: string;\n icon: string;\n linkType: PageShortcutType;\n menuItemChildren: MyCoopProfileMenuItem[];\n}\n\nconst localContentApi = {\n getMyCoopProfileMenu: async () => {\n const response = await getLocalApiAxiosClient().get<MyCoopProfileMenuItem[]>(\n '/content/myCoop/profileMenu',\n );\n return response.data;\n },\n};\n\nexport default localContentApi;\n","import { useQuery } from '@tanstack/react-query';\n\nimport localContentApi from '../../../episerver/api/localContentApi';\nimport { myCoopProfileMenuKeys } from '../../../myCoop/myCoopQueries';\n\nexport const useMyCoopProfileMenu = () => {\n const query = useQuery({\n queryKey: myCoopProfileMenuKeys.all,\n queryFn: async () => {\n const pages = await localContentApi.getMyCoopProfileMenu();\n return pages;\n },\n staleTime: 1000 * 60 * 15, // 15 minutes\n });\n\n return query;\n};\n","import { IconButton, ModalHeader, Search, VisuallyHidden } from '@coop/components';\nimport { CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport * as React from 'react';\nimport { Suspense, useImperativeHandle, useRef } from 'react';\n\nimport { BrowserSize } from '../../../../utility/browser';\nimport { Modal } from '../../../common/components/atoms/Modal';\nimport { useFromBrowserMediaQuery } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport { useSearchStateContext } from '../../../search/contexts/searchStateContext';\nimport styles from './SearchOverlay.module.less';\n\ninterface SearchOverlayProps {\n onEnterPress: () => void;\n children: ReactNode;\n onOutsideClick: () => void;\n onClearClick: () => void;\n inputPlaceholder: string;\n announcerSlot?: React.ReactNode;\n inputAriaLabel?: React.ComponentPropsWithoutRef<typeof Search>['aria-label'];\n inputDescription?: string;\n submitLabel: string;\n dangerouslyDisableFocusBackToTrigger?: boolean;\n onExiting?: () => void;\n}\n\nconst SearchOverlay = React.forwardRef<\n HTMLInputElement,\n React.PropsWithChildren<SearchOverlayProps>\n>((props, inputRef) => {\n const { query, isOpen, clear, setQuery, resetQuery, show } = useSearchStateContext();\n\n const isFromLarge = useFromBrowserMediaQuery(BrowserSize.lg);\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(inputRef, () => searchInputRef.current as HTMLInputElement);\n\n return (\n <Modal\n additionalClasses={styles.SearchOverlay}\n isOpen={isOpen}\n close={clear}\n initialFocusOnDialog={false}\n animation=\"fade\"\n afterOutsideClick={props.onOutsideClick}\n dangerouslyDisableFocusBackToTrigger={props.dangerouslyDisableFocusBackToTrigger}\n onExiting={props.onExiting}\n >\n <VisuallyHidden>\n <ModalHeader>Sökresultat</ModalHeader>\n </VisuallyHidden>\n <div\n className={classNames(\n styles.SearchBarWrapper,\n show && styles['SearchBarWrapper--hasResults'],\n )}\n >\n <Search\n ref={searchInputRef}\n submitLabel={props.submitLabel}\n inputText={query}\n setInputText={setQuery}\n size={isFromLarge ? 'large' : 'medium'}\n inputPlaceholder={props.inputPlaceholder}\n description={props.inputDescription}\n onEnterPress={props.onEnterPress}\n onEscapePress={clear}\n onReset={() => {\n resetQuery();\n searchInputRef.current?.focus();\n }}\n focusOnMount\n aria-label={props.inputAriaLabel}\n />\n <IconButton\n theme=\"primaryOutline\"\n icon={CloseIcon}\n label=\"Stäng\"\n size={40}\n onClick={() => {\n clear();\n props.onClearClick();\n }}\n />\n </div>\n {props.announcerSlot}\n <Suspense fallback={null}>\n {show && <div className={styles.SearchResults}>{props.children}</div>}\n </Suspense>\n </Modal>\n );\n});\nexport default SearchOverlay;\n","// extracted by mini-css-extract-plugin\nexport default {\"SearchOverlay\":\"ZgyFRuzM\",\"SearchBarWrapper\":\"A9IckKLf\",\"SearchBarWrapper--hasResults\":\"piJ1bTI2\",\"SearchResults\":\"cHXmyJRN\",\"Notice\":\"fKeUN46R\"};","// extracted by mini-css-extract-plugin\nexport default {\"UserModeSwitch\":\"LR_cbOR8\",\"UserMode\":\"curu4fhF\",\"UserModeActive\":\"cQDO5f0Y\",\"UserMode--topIndicator\":\"JOu10xf7\",\"UserModeSwitch--white\":\"sTbbms8U\",\"UserModeSwitch--green\":\"f1EqwMpN\"};","import classNames from 'classnames';\nimport { useLocation } from 'react-router-dom';\n\nimport { appConfig } from '../../../../appConfig';\nimport { ga4NavigationTracking } from '../../../common/tracking/ga4/navigation';\nimport { isAriaCurrentPage } from '../../../common/utils/accessibilityUtils';\nimport { useIsB2BRoute } from '../../../common/utils/b2bUtils';\nimport useReactRouting from '../../../ecommerce/hooks/useReactRouting';\nimport styles from './UserTypeModeSwitch.module.less';\n\ninterface UserTypeModeSwitchProps {\n theme: 'white' | 'green';\n}\n\n/**\n * Switch for B2B / B2C sites\n */\nconst UserTypeModeSwitch = (props: UserTypeModeSwitchProps) => {\n const { push } = useReactRouting();\n const isB2BRoute = useIsB2BRoute();\n const { pathname } = useLocation();\n\n return (\n <ul\n className={classNames(\n styles.UserModeSwitch,\n props.theme === 'white' && styles['UserModeSwitch--white'],\n props.theme === 'green' && styles['UserModeSwitch--green'],\n )}\n >\n <li\n className={classNames(\n styles.UserMode,\n styles['UserMode--topIndicator'],\n !isB2BRoute && styles.UserModeActive,\n )}\n >\n <a\n href={appConfig.coopSettings.b2c.startPage.url}\n onClick={(e) => {\n e.preventDefault();\n ga4NavigationTracking.headerNavigationClick(\n e.currentTarget.innerText,\n e.currentTarget.href,\n );\n push(e.currentTarget.href);\n }}\n aria-current={isAriaCurrentPage(\n appConfig.coopSettings.b2c.startPage.url,\n pathname,\n )}\n >\n Privat\n </a>\n </li>\n {!!appConfig.coopSettings.b2b.startPage && (\n <li\n className={classNames(\n styles.UserMode,\n styles['UserMode--topIndicator'],\n isB2BRoute && styles.UserModeActive,\n )}\n >\n <a\n href={appConfig.coopSettings.b2b.startPage.url}\n onClick={(e) => {\n e.preventDefault();\n ga4NavigationTracking.headerNavigationClick(\n e.currentTarget.innerText,\n e.currentTarget.href,\n );\n push(e.currentTarget.href);\n }}\n aria-current={isAriaCurrentPage(\n appConfig.coopSettings.b2b.startPage.url,\n pathname,\n )}\n >\n Företag\n </a>\n </li>\n )}\n </ul>\n );\n};\nexport default UserTypeModeSwitch;\n","// Sync with SearchOverlayCurrentPage on backend\nexport enum SearchFromPageType {\n StartPage = 'startpage',\n Ecommerce = 'ecommerce',\n Stores = 'stores',\n Recipes = 'recipes',\n Finance = 'finance',\n Member = 'member',\n Other = 'other',\n}\n","import { VisuallyHidden } from '@coop/components';\n\nimport { Helpers } from '../../../../utility/helpers';\nimport { useAppSelector } from '../../../common/hooks/useThunkDispatch';\nimport { cartSelectors } from '../../../common/selectors/cartSelectors';\nimport cartItemsSelectors from '../../selectors/cartItemsSelectors';\n\nconst getCartSummaryAccessibilityText = (totalCartQuantity: number, totalPrice?: number) => {\n let cartCountLabel;\n if (totalCartQuantity === 0) {\n cartCountLabel = 'Din varukorg är tom';\n }\n if (totalCartQuantity === 1) {\n cartCountLabel = 'Totalt har du en vara i varukorgen';\n }\n\n if (totalCartQuantity > 1) {\n cartCountLabel = `Totalt har du ${totalCartQuantity} varor i varukorgen`;\n }\n\n let totalPriceLabel;\n if (totalPrice) {\n totalPriceLabel = `Totalpris är ${Helpers.toEcommercePriceWithCurrency(totalPrice)}`;\n }\n\n return `${[cartCountLabel, totalPriceLabel].filter(Boolean).join('. ')}`;\n};\n\ninterface CartSummaryAccessibilityLoggerProps {\n totalPrice?: number; // when we will be able to display cart value in CnCTrigger, this should be read from Redux instead\n}\n\nconst CartSummaryAccessibilityLogger = (props: CartSummaryAccessibilityLoggerProps) => {\n const totalCartQuantity = useAppSelector(cartItemsSelectors.selectCartQuantity);\n const cartIsInitialized = useAppSelector(cartSelectors.isCartInitialized);\n const cartIsLoading = useAppSelector((state) => state.cart.cartLoading.isLoading);\n\n // Update the text when cart is done loading, until then state will preseve the previous text\n const text =\n cartIsInitialized &&\n !cartIsLoading &&\n getCartSummaryAccessibilityText(totalCartQuantity, props.totalPrice);\n\n return (\n <VisuallyHidden aria-live=\"polite\" aria-atomic=\"true\">\n {text}\n </VisuallyHidden>\n );\n};\n\nexport default CartSummaryAccessibilityLogger;\n","export const enum ExceptionCode {\n dinnerOnlyStore = 'dinnerOnlyStore',\n}\n\nexport interface ApiHybrisValidationException {\n errors: {\n message: string;\n reason: string;\n type: string;\n subject: string;\n }[];\n}\n\nexport type ApiExceptionType =\n | 'Default'\n | 'Validation'\n | 'OpenId'\n | 'Redirect'\n | 'BankId'\n | 'Cart'\n | 'BankIdCollect';\n\nexport interface ApiBaseException<TCode = string> {\n friendlyMessage: string;\n code: TCode | null;\n type: ApiExceptionType;\n}\n\nexport interface ValidationError<TCode = string> {\n field: string;\n friendlyMessage: string;\n code?: TCode | null;\n}\n\nexport interface ApiValidationException extends ApiBaseException {\n validationErrors: ValidationError[];\n type: 'Validation';\n}\n\nexport interface ApiCartException<TCode = string> extends ApiBaseException<TCode> {\n type: 'Cart';\n code: TCode | null;\n friendlyMessage: never;\n}\n\nexport interface ApiDefaultException extends ApiBaseException {\n field: string | null;\n type: 'Default';\n}\n\nexport interface ApiOpenIdException extends ApiBaseException {\n field: string;\n type: 'OpenId';\n redirectUrl: string;\n isOpenIdError: boolean;\n}\n\nexport interface ApiRedirectException extends ApiBaseException {\n type: 'Redirect';\n redirectUrl: string;\n}\n\nexport type ApiException =\n | ApiDefaultException\n | ApiValidationException\n | ApiOpenIdException\n | ApiCartException\n | ApiRedirectException;\n","import type { FC } from 'react';\n\nimport NoticeRibbon, { NoticeRibbonType } from '../../../common/components/atoms/NoticeRibbon';\nimport type { ApiBaseException } from '../../../common/exceptions/exceptionDefinitions';\nimport { ExceptionCode } from '../../../common/exceptions/exceptionDefinitions';\nimport { useGroupError } from '../../../common/hooks/useGroupError';\nimport { useAppSelector } from '../../../common/hooks/useThunkDispatch';\nimport { modalSelectors } from '../../../common/selectors/modalSelectors';\nimport { ErrorGroup } from '../../../common/store/structureDefinitions/errorsState';\n\nexport const HeaderCartErrorNotice: FC<React.PropsWithChildren<unknown>> = () => {\n const isAnyModalOpen = useAppSelector(modalSelectors.isAnyModalOpen);\n return <CartErrorNotice additionalShowCondition={() => !isAnyModalOpen} fixed={false} />;\n};\n\ninterface CartErrorNoticeProps {\n additionalShowCondition?: (error: ApiBaseException) => boolean;\n fixed?: boolean;\n}\n\nconst CartErrorNotice: FC<React.PropsWithChildren<CartErrorNoticeProps>> = (props) => {\n const handleCloseClick = () => {\n clearGroupErrors();\n };\n\n const { firstError: cartError, clearGroupErrors } = useGroupError(ErrorGroup.Cart);\n\n const show = (error: ApiBaseException | null) => {\n const condition =\n props.additionalShowCondition && !!error ? props.additionalShowCondition(error) : true;\n\n return (\n condition && !!error?.friendlyMessage && error.code !== ExceptionCode.dinnerOnlyStore\n );\n };\n\n return (\n <NoticeRibbon\n type={NoticeRibbonType.warning}\n show={show(cartError)}\n handleCloseClick={handleCloseClick}\n hideAfterMiliseconds={5000}\n fixed={props.fixed}\n ariaLive=\"assertive\"\n >\n {cartError?.friendlyMessage}\n </NoticeRibbon>\n );\n};\n\nexport default CartErrorNotice;\n","import { VisuallyHidden } from '@coop/components';\nimport { useEffect, useRef, useState } from 'react';\n\n// when aria live is added first time to the DOM, itll not be read by the screen readers, hence we need to delay the first message so its picked up\nconst DelayedA11yAnnouncer = (props: {\n a11yMessage: string;\n name: string;\n delayFirstMessage: boolean;\n}) => {\n const wasDelayed = useRef<boolean>(!props.delayFirstMessage);\n const [delayedMessage, setDelayedMessage] = useState<string>('');\n\n useEffect(() => {\n let timeout: NodeJS.Timeout;\n\n if (!wasDelayed.current) {\n setTimeout(() => {\n setDelayedMessage(props.a11yMessage);\n wasDelayed.current = true;\n }, 500);\n } else {\n setDelayedMessage(props.a11yMessage);\n }\n\n return () => {\n clearTimeout(timeout);\n };\n }, [props.a11yMessage]);\n\n return (\n <VisuallyHidden\n data-a11-logger={props.name} // just to show which logger it belongs too\n aria-live=\"polite\"\n >\n {delayedMessage}\n </VisuallyHidden>\n );\n};\n\nexport default DelayedA11yAnnouncer;\n","import { ChipIconButton } from '@coop/components';\nimport { ArrowLeftIcon, CloseIcon } from '@coop/icons';\nimport { useEffect, useRef } from 'react';\n\ninterface FlyInNavigationProps {\n backNavigationAllowed?: boolean;\n onBack?: () => void;\n onClose: () => void;\n autoFocus?: boolean;\n}\n\nexport const FlyinNavigation = ({\n backNavigationAllowed = false,\n ...props\n}: React.PropsWithChildren<FlyInNavigationProps>) => {\n const ref = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (ref.current && props.autoFocus) {\n ref.current.focus();\n }\n }, [props.autoFocus, ref]);\n\n return (\n <>\n {/* children are on top, to prevent z-index wars - when elements have the same zindex (or default), the DOM order determines whoch one is on top */}\n {/* both close and back are absolute here, so the order of children in JSX doesnt matter */}\n {props.children}\n\n {backNavigationAllowed && props.onBack && (\n <div className=\"FlyIn-back\">\n <ChipIconButton\n tabIndex={0}\n theme=\"whiteGreen\"\n size={32}\n onClick={props.onBack}\n icon={ArrowLeftIcon}\n label=\"Tillbaka\"\n />\n </div>\n )}\n <div className=\"FlyIn-close\">\n <ChipIconButton\n ref={ref}\n icon={CloseIcon}\n theme=\"whiteGreen\"\n onClick={props.onClose}\n size={32}\n label=\"Stäng\"\n />\n </div>\n </>\n );\n};\n\nexport default FlyinNavigation;\n","export const enum NoticeRibbonType {\n success = 'success',\n warning = 'warning',\n info = 'info',\n editOrder = 'editOrder',\n alertLevel1 = 'alert1',\n alertLevel2 = 'alert2',\n alertLevel3 = 'alert3',\n alertLevel4 = 'alert4',\n}\n","import { AccessibleIcon, Icon } from '@coop/components';\nimport { useSetTimeout } from '@coop/hooks';\nimport { ChevronDownIcon, CloseIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport * as React from 'react';\nimport { useMemo, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport { NoticeRibbonType } from './NoticeRibbon.types';\n\ntype NotceRibbonAlign = 'left' | 'center';\n\ntype NoticeRibbonColor = 'accentPink';\n\ninterface NoticeRibbonProps {\n show: boolean;\n type?: NoticeRibbonType;\n animated?: boolean;\n extraCss?: string;\n onClick?: () => void;\n handleCloseClick?: (e?: React.MouseEvent<HTMLButtonElement>) => void;\n hideAfterMiliseconds?: number; // set null if you want to disable automatic hide\n children?: React.ReactNode;\n expandableContent?: ReactNode;\n blockClose?: boolean;\n fixed?: boolean;\n align?: NotceRibbonAlign;\n color?: NoticeRibbonColor;\n rounded?: boolean;\n ariaLive?: 'assertive' | 'polite';\n}\n\nconst NoticeRibbon = ({\n align = 'center',\n animated = true,\n ...props\n}: React.PropsWithChildren<NoticeRibbonProps>) => {\n const containerStyles = classNames(\n 'Notice',\n props.type === NoticeRibbonType.warning && 'Notice--warning',\n props.type === NoticeRibbonType.info && 'Notice--info',\n props.type === NoticeRibbonType.success && 'Notice--success',\n props.type === NoticeRibbonType.editOrder && 'Notice--yellow',\n props.type === NoticeRibbonType.alertLevel1 && 'Notice--alert Notice--alert-level1',\n props.type === NoticeRibbonType.alertLevel2 && 'Notice--alert Notice--alert-level2',\n props.type === NoticeRibbonType.alertLevel3 && 'Notice--alert Notice--alert-level3',\n props.type === NoticeRibbonType.alertLevel4 && 'Notice--alert Notice--alert-level4',\n animated && 'Notice--animated',\n props.fixed && 'Notice--fixed',\n props.extraCss,\n props.onClick && 'u-cursorPointer',\n props.color && `Notice--${props.color}`,\n props.rounded && 'Notice--rounded',\n );\n\n const transitionRef = useRef(null);\n\n const [isExpanded, setIsExpanded] = useState(false);\n\n useSetTimeout(\n props.show && !!props.hideAfterMiliseconds && !!props.handleCloseClick,\n props.hideAfterMiliseconds!,\n () => props.handleCloseClick?.(),\n );\n\n const Content = useMemo(\n () => (\n <NoticeRibbonContent\n ref={transitionRef}\n containerStyles={containerStyles}\n onClick={props.onClick}\n handleCloseClick={\n !props.hideAfterMiliseconds && !props.blockClose\n ? props.handleCloseClick\n : undefined\n }\n isExpanded={isExpanded}\n onExpandClick={() => setIsExpanded((prev) => !prev)}\n expandableContent={props.expandableContent}\n align={align}\n >\n {props.children}\n </NoticeRibbonContent>\n ),\n [\n containerStyles,\n props.onClick,\n props.hideAfterMiliseconds,\n props.blockClose,\n props.handleCloseClick,\n props.expandableContent,\n props.children,\n isExpanded,\n align,\n ],\n );\n\n if (!animated) {\n if (props.show) {\n return Content;\n }\n return null;\n }\n\n return (\n // Retrigger aria-live when the same text is shown multiple times. Without this, screen readers will not announce the same text if it is shown multiple times.\n <div aria-live={props.show ? props.ariaLive : 'off'}>\n <CSSTransition\n nodeRef={transitionRef}\n in={props.show}\n timeout={200}\n classNames={{\n appearDone: 'is-visible',\n enterDone: 'is-visible',\n }}\n appear\n unmountOnExit\n >\n {Content}\n </CSSTransition>\n </div>\n );\n};\n\ninterface NoticeRibbonContentProps {\n containerStyles: string;\n onClick?: () => void;\n handleCloseClick?: () => void;\n children: ReactNode;\n isExpanded: boolean;\n expandableContent: ReactNode;\n onExpandClick: () => void;\n align?: NotceRibbonAlign;\n}\n\nconst NoticeRibbonContent = React.forwardRef<HTMLDivElement, NoticeRibbonContentProps>(\n (props, ref) => {\n return (\n <div ref={ref} className={props.containerStyles} onClick={props.onClick}>\n <div\n className={classNames(\n 'Notice-content',\n props.align === 'left' && 'Notice-content--alignLeft',\n )}\n >\n {props.expandableContent && (\n <button\n type=\"button\"\n className=\"Notice-heading u-outlineDefault u-outlineSolidBase2\"\n onClick={props.onExpandClick}\n aria-label=\"Visa mer\"\n >\n {props.children}\n <Icon\n icon={ChevronDownIcon}\n rotateClockwise={props.isExpanded ? '180deg' : '0deg'}\n aria-hidden\n />\n </button>\n )}\n\n {!props.expandableContent &&\n (typeof props.children === 'string' ? (\n <div className=\"Notice-heading\">{props.children}</div>\n ) : (\n props.children\n ))}\n\n {props.handleCloseClick && (\n <button\n onClick={props.handleCloseClick}\n type=\"button\"\n name=\"closebutton\"\n className=\"Notice-close\"\n >\n <AccessibleIcon icon={CloseIcon} label=\"Stäng\" />\n </button>\n )}\n </div>\n\n {props.expandableContent && props.isExpanded && (\n <div className=\"Notice-expandedContent\">{props.expandableContent}</div>\n )}\n </div>\n );\n },\n);\n\nexport default NoticeRibbon;\n","import type React from 'react';\n\nimport ComponentPortals from '../../molecules/ComponentPortals';\n\ninterface StickyBottomProps {\n className?: string;\n children: React.ReactNode;\n}\n\nconst StickyBottom = (props: React.PropsWithChildren<StickyBottomProps>) => {\n return <ComponentPortals cmpName=\"StickyBottom\">{props.children}</ComponentPortals>;\n};\n\nexport default StickyBottom;\n","import type { ReactNode } from 'react';\n\nimport { buildReactComponentSelectorByName, getReactComponentData } from '../../init/reactMounting';\nimport Portal from '../atoms/Portal';\n\ninterface ComponentPortalsProps<TProps extends object = object> {\n cmpName: string;\n\n render?: (cmpProps: TProps & { id?: string }) => React.ReactNode;\n children?: ReactNode;\n}\n\n/** Finds components (can be multiple instances) of a given name and creates a Portal for them */\nconst ComponentPortals = <TProps extends object = object>({\n cmpName,\n render,\n children,\n}: ComponentPortalsProps<TProps>) => {\n const foundComponents = Array.from<HTMLElement>(\n document.querySelectorAll(buildReactComponentSelectorByName(cmpName)),\n )\n .filter(Boolean)\n .map((item) => getReactComponentData<TProps>(item));\n\n return (\n <>\n {foundComponents.map((item) => (\n <Portal key={item.id} domNode={item.html}>\n {(render && render({ ...item.props, id: item.id })) || children}\n </Portal>\n ))}\n </>\n );\n};\n\nexport default ComponentPortals;\n","import { useCallback, useEffect, useRef } from 'react';\n\nconst useEventCallback = <R = unknown, Args extends unknown[] = unknown[]>(\n cb: (...args: Args) => R,\n) => {\n const ref = useRef(cb);\n useEffect(() => {\n ref.current = cb;\n });\n return useCallback((...args: Args) => ref.current(...args), [ref]);\n};\n\nexport default useEventCallback;\n","import AwesomeDebouncePromise from 'awesome-debounce-promise';\nimport type { AsyncState, AsyncStateStatus, UseAsyncOptions } from 'react-async-hook';\nimport { useAsyncAbortable } from 'react-async-hook';\n\nimport type { ApiException } from '../exceptions/exceptionDefinitions';\nimport { AsyncDispatcherError } from './AsyncDispatcherError';\nimport type { AsyncDispatcherOptions } from './useAsyncDispatcher';\nimport useConstant from './useConstant';\nimport useEventCallback from './useEventCallback';\n\ninterface AsyncAbortableDispatcherOptions<R> extends AsyncDispatcherOptions<R> {\n debounced?: boolean;\n debounceTime?: number;\n}\n\nconst useAsyncAbortableDispatcher = <R = unknown, Args extends unknown[] = unknown[]>(\n func: (abortSignal: AbortSignal, ...args: Args) => Promise<R>,\n params: Args,\n options: AsyncAbortableDispatcherOptions<R>,\n) => {\n const asyncFunction = useConstant(() => {\n if (options.debounced && options.debounceTime) {\n return AwesomeDebouncePromise(func, options.debounceTime);\n }\n return func;\n });\n\n const {\n result,\n error: asyncError,\n execute: asyncExecute,\n reset,\n loading,\n status,\n } = useAsyncAbortable(\n asyncFunction,\n [...params] as Args,\n {\n executeOnMount: options.executeOnMount,\n initialState: (opt) => {\n return {\n ...(opt?.initialState || null),\n result: options?.initialResultState,\n loading: options?.initialLoadingState,\n error: options?.initialErrorState,\n } as AsyncState<R>;\n },\n setLoading: options.keepPreviousResult\n ? (state) => ({ ...state, loading: true })\n : () => ({ loading: true }),\n setError: (error: unknown): AsyncState<R> => {\n // this is the default in react-hook-async\n return {\n status: <AsyncStateStatus>'error',\n loading: false,\n result: undefined,\n error: new AsyncDispatcherError(error as ApiException),\n };\n },\n } as UseAsyncOptions<R>,\n );\n\n const execute = useEventCallback((...args: Args) => {\n return asyncExecute(...args);\n });\n\n return {\n execute,\n result,\n status,\n isLoading: loading,\n error: (asyncError as AsyncDispatcherError | undefined)?.exception,\n clearError: reset,\n };\n};\n\nexport default useAsyncAbortableDispatcher;\n","import { useRef } from 'react';\n\ntype F<T> = { value: T };\n\nexport default function useConstant<T>(callback: () => T): T {\n const ref = useRef<F<T>>();\n\n if (!ref.current) {\n ref.current = { value: callback() };\n }\n\n return ref.current.value;\n}\n","import { useEffect } from 'react';\n\nimport { storeApi } from '../api/store/storeApi';\nimport { unsyncedCartItemsSelectors } from '../selectors/unsyncedCartItemsSelectors';\nimport { storeActions } from '../store/slices/store/storeSlice';\nimport { unsyncedCartItemsActions } from '../store/slices/unsyncedCartItemsSlice';\nimport { cartThunks } from '../thunks/cartThunks';\nimport { useAsyncDispatcher } from './useAsyncDispatcher';\nimport { useAppDispatch, useAppSelector } from './useThunkDispatch';\n\n/**\n * Use this if you want to keep in sync Store context cookie with Redux store, usually should be used once in an active component tree\n * If you want only the current values, get them directly from Redux store\n */\nconst useCurrentStoreSync = () => {\n const dispatch = useAppDispatch();\n\n const unsyncedCartItems = useAppSelector(unsyncedCartItemsSelectors.selectUnsyncedCartItems);\n\n const setPickupStore = async (pickupPointId: string) => {\n const store = await storeApi.fetchStoreById(pickupPointId);\n dispatch(storeActions.selectPickupStore({ store, pickupPointId }));\n if (unsyncedCartItems?.length) {\n await dispatch(cartThunks.addItems(unsyncedCartItems));\n dispatch(unsyncedCartItemsActions.removeUnsyncedCartItems());\n }\n };\n\n const setDeliveryStore = async (postalCode: string, baseStoreId: string) => {\n const store = await storeApi.fetchStoreById(baseStoreId);\n dispatch(\n storeActions.selectHomeDeliveryStore({\n store,\n postalCode,\n }),\n );\n if (unsyncedCartItems?.length) {\n await dispatch(cartThunks.addItems(unsyncedCartItems));\n dispatch(unsyncedCartItemsActions.removeUnsyncedCartItems());\n }\n };\n\n const { execute: setPickupStoreExecute } = useAsyncDispatcher((pickupPointId: string) =>\n setPickupStore(pickupPointId),\n );\n\n const { execute: setDeliveryStoreExecute } = useAsyncDispatcher(\n (postalCode: string, baseStoreId: string) => setDeliveryStore(postalCode, baseStoreId),\n );\n\n const { selectedPickupPointId, selectedZipCode, productionUnitId } = useAppSelector(\n (state) => state.store,\n );\n\n useEffect(() => {\n if (selectedPickupPointId) {\n setPickupStoreExecute(selectedPickupPointId);\n }\n }, [setPickupStoreExecute, selectedPickupPointId]);\n\n useEffect(() => {\n if (selectedZipCode && productionUnitId) {\n setDeliveryStoreExecute(selectedZipCode, productionUnitId);\n }\n }, [setDeliveryStoreExecute, selectedZipCode, productionUnitId]);\n};\n\nexport default useCurrentStoreSync;\n","import { useElementEvent } from '@coop/hooks';\nimport _ from 'underscore';\n\nexport const useDocumentPropertyHeightSetter = (\n htmlPropertyNameToSet: `--${string}`,\n ref: React.RefObject<HTMLElement>,\n enabled: boolean = true,\n) => {\n const handleResize = _.throttle(() => {\n if (ref.current) {\n const { height } = ref.current.getBoundingClientRect();\n document.documentElement.style.setProperty(htmlPropertyNameToSet, `${height}px`);\n }\n }, 200);\n\n useElementEvent(window, 'resize', handleResize, true, undefined, enabled);\n};\n","import { failSilently } from '../../utils/failSilently';\nimport { sendGA4Event } from '../shared/sendGa4Event';\n\nconst walletInteraction = (\n type: 'wallet open' | 'wallet close' | 'wallet click',\n walletLevel1: string | undefined,\n walletLevel2: string | undefined,\n clickText: string | undefined,\n clickUrl: string | undefined,\n pageType: string,\n) => {\n const event: WalletInteractionEvent = {\n event: 'interaction',\n type,\n wallet_level_1: walletLevel1 || 'not selected',\n wallet_level_2: walletLevel2 || 'not selected',\n click_text: clickText || 'not selected',\n click_url: clickUrl || 'not selected',\n page_type: pageType,\n };\n\n sendGA4Event(event);\n};\n\nconst viewBonus = (type: BonusImpressionType) => (pageType: string) => {\n const event: SendBonusImpressionEvent = {\n event: 'impression',\n type,\n page_type: pageType,\n };\n\n sendGA4Event(event);\n};\n\nconst chartInteraction = (clickText: string, pageType: string) => {\n const event: SavedLastYearInteractionEvent = {\n event: 'interaction',\n type: 'saved bonus',\n click_text: clickText,\n click_url: 'not selected',\n page_type: pageType,\n };\n\n sendGA4Event(event);\n};\n\nconst navigateBonusInteraction = (\n type: BonusInteractionEventType | null,\n clickText: string,\n clickUrl: string | undefined,\n pageType: string,\n) => {\n const event: BonusInteractionEvent = {\n event: 'interaction',\n click_text: clickText,\n click_url: clickUrl || 'not selected',\n page_type: pageType,\n };\n if (type) {\n event.type = type;\n }\n sendGA4Event(event);\n};\n\nconst viewSavedBonus = (pageType: string) => {\n const event: SavedBonusImpressionEvent = {\n event: 'impression',\n type: 'saved bonus',\n page_type: pageType,\n };\n\n sendGA4Event(event);\n};\n\nexport default {\n walletInteraction: failSilently(walletInteraction),\n viewHowDoesItWork: failSilently(viewBonus('how the bonus works')),\n viewLastMonthBonus: failSilently(viewBonus('last month bonus')),\n chartInteraction: failSilently(chartInteraction),\n viewSavedBonus: failSilently(viewSavedBonus),\n navigation: {\n infoSymbolInteraction: failSilently((pageType: string) =>\n navigateBonusInteraction(null, 'info symbol', undefined, pageType),\n ),\n bonusInteraction: failSilently((clickText: string, clickUrl: string, pageType: string) =>\n navigateBonusInteraction('usable bonus', clickText, clickUrl, pageType),\n ),\n },\n};\n","import { SearchFromPageType } from '../../../../base/models/SearchFromPageType';\nimport { failSilently } from '../../utils/failSilently';\nimport { sendGA4Event } from '../shared/sendGa4Event';\n\ntype SearchType = 'resultPage' | 'overlay';\n\nconst mapSearchFeatureName = (searchFromPage?: SearchFromPageType): SearchFeatureName => {\n switch (searchFromPage) {\n case SearchFromPageType.StartPage:\n return 'homepage';\n case SearchFromPageType.Ecommerce:\n return 'products';\n case SearchFromPageType.Recipes:\n return 'recipes';\n case SearchFromPageType.Stores:\n return 'stores';\n case SearchFromPageType.Member:\n return 'member';\n case SearchFromPageType.Finance:\n return 'bank';\n case SearchFromPageType.Other:\n default:\n return 'other';\n }\n};\n\nconst mapSearchTypeToGa = (searchType: SearchType) => {\n switch (searchType) {\n case 'overlay':\n return 'autocomplete';\n case 'resultPage':\n return 'enter';\n default:\n return null;\n }\n};\n\nconst search =\n (searchFromPage?: SearchFromPageType) =>\n (actionTrigger: SearchTermActionTriggerType) =>\n ({\n actualSearchTerm,\n originalSearchTerm,\n totalResultNumber,\n }: {\n actualSearchTerm?: string;\n originalSearchTerm?: string;\n totalResultNumber?: number;\n }) => {\n const featureName = mapSearchFeatureName(searchFromPage);\n\n const event: SearchEvent = {\n event: 'search',\n search_feature_name: featureName,\n search_term_action_type_trigger: actionTrigger,\n search_term: originalSearchTerm?.length === 0 ? undefined : originalSearchTerm,\n search_term_inferred: actualSearchTerm,\n search_results_number: totalResultNumber,\n };\n\n sendGA4Event(event);\n };\n\nconst searchDropdownAction =\n (searchFromPage?: SearchFromPageType) => (actionTrigger: SearchTermActionTriggerType) => {\n const featureName = mapSearchFeatureName(searchFromPage);\n\n const event: SearchDropdownActionEvent = {\n event: 'search_dropdown_action',\n search_feature_name: featureName,\n type: actionTrigger,\n };\n\n sendGA4Event(event);\n };\n\nconst searchDropdownItemAction =\n (searchFromPage?: SearchFromPageType) =>\n (actionTrigger: SearchTermActionTriggerType) =>\n ({ position, itemId, itemName }: { position?: number; itemId?: string; itemName?: string }) => {\n const featureName = mapSearchFeatureName(searchFromPage);\n\n const event: SearchDropdownItemActionEvent = {\n event: 'search_dropdown_action',\n search_feature_name: featureName,\n type: actionTrigger,\n position,\n item_id: itemId,\n item_name: itemName,\n };\n\n sendGA4Event(event);\n };\n\nconst viewSearchResults =\n (searchFromPage?: SearchFromPageType) =>\n ({\n actualSearchTerm,\n originalSearchTerm,\n totalResultNumber,\n }: {\n actualSearchTerm: string;\n originalSearchTerm: string;\n totalResultNumber: number;\n }) => {\n const featureName = mapSearchFeatureName(searchFromPage);\n\n const event: ViewSearchResultsEvent = {\n event: 'view_search_results',\n search_term: originalSearchTerm,\n search_term_inferred: actualSearchTerm,\n search_feature_name: featureName,\n search_results_number: totalResultNumber,\n };\n\n sendGA4Event(event);\n };\n\nconst viewSearchResultSuggestionClick = (linkText: string, linkUrl: string) => {\n const event: ViewSearchResultsSuggestionClickEvent = {\n event: 'view_search_results_other_suggestions_clicks',\n type: 'other_suggestions',\n click_text: linkText,\n click_path: linkUrl,\n };\n\n sendGA4Event(event);\n};\n\nconst noSearchResults =\n (searchType: SearchType) => (searchTerm: string) => (searchFromPage?: SearchFromPageType) => {\n const featureName = mapSearchFeatureName(searchFromPage);\n const type = mapSearchTypeToGa(searchType);\n\n const event: NoSearchResultsEvent = {\n event: 'no_search_results',\n feature_name: featureName,\n type,\n search_term: searchTerm,\n };\n\n sendGA4Event(event);\n };\n\nconst searchIconClick = (searchFromPage?: SearchFromPageType) => {\n const featureName = mapSearchFeatureName(searchFromPage);\n\n const event: SearchIconClickEvent = {\n event: 'search_icon_click',\n search_feature_name: featureName,\n };\n\n sendGA4Event(event);\n};\n\nexport default {\n viewSearchResultSuggestionClick: failSilently(viewSearchResultSuggestionClick),\n viewSearchResults: failSilently(viewSearchResults),\n search: failSilently(search),\n searchDropdownAction: failSilently(searchDropdownAction),\n searchDropdownItemAction: failSilently(searchDropdownItemAction),\n noSearchResults: failSilently(noSearchResults),\n searchIconClick: failSilently(searchIconClick),\n};\n","import { useEffect, useRef } from 'react';\n\nimport type { SearchFromPageType } from '../../../base/models/SearchFromPageType';\nimport { ga4SearchTracking } from '../ga4/search';\n\nexport const useSearchOverlayGA4ActionTracking = (\n originalQuery: string | undefined,\n queryUsed: string | undefined,\n searchFromPage: SearchFromPageType | undefined,\n isLoading: boolean,\n) => {\n const originalQueryToTrack = isLoading ? undefined : originalQuery;\n const queryUsedToTrack = isLoading ? undefined : queryUsed;\n\n const previousOriginalQuery = useRef<string | undefined>(undefined);\n useEffect(() => {\n if (previousOriginalQuery.current !== originalQueryToTrack) {\n previousOriginalQuery.current = undefined;\n }\n }, [originalQueryToTrack]);\n\n const trackSearchAction = (\n actionTrigger: SearchTermActionTriggerType,\n totalResultNumber?: number,\n ) => {\n if (\n previousOriginalQuery.current === originalQueryToTrack &&\n originalQueryToTrack !== undefined\n ) {\n return;\n }\n\n previousOriginalQuery.current = originalQueryToTrack;\n\n ga4SearchTracking.search(searchFromPage)?.(actionTrigger)({\n originalSearchTerm: originalQueryToTrack,\n actualSearchTerm: queryUsedToTrack,\n totalResultNumber,\n });\n };\n\n const trackSearchDropdownAction = ga4SearchTracking.searchDropdownAction(searchFromPage);\n const trackSearchDropdownItemAction =\n ga4SearchTracking.searchDropdownItemAction(searchFromPage);\n\n const trackAbortAction = () => {\n trackSearchAction('abort');\n trackSearchDropdownAction?.('abort');\n };\n\n const trackCloseClickAction = () => {\n trackSearchAction('click_x');\n trackSearchDropdownAction?.('click_x');\n };\n\n const trackListObjectClick = (itemId?: string, itemName?: string, position?: number) => {\n trackSearchAction('click_list_object');\n trackSearchDropdownItemAction?.('click_list_object')({ itemId, itemName, position });\n };\n\n const trackEnterAction = () => {\n trackSearchAction('enter');\n trackSearchDropdownAction?.('enter');\n };\n\n const trackSeeAllResultsClickAction = () => {\n trackSearchAction('see_all_results');\n trackSearchDropdownAction?.('see_all_results');\n };\n\n const trackLabelClick = () => {\n trackSearchAction('click_label');\n trackSearchDropdownAction?.('click_label');\n };\n\n const trackAddToCartClickAction = (itemId: string, itemName: string, position: number) => {\n trackSearchAction('add_to_cart');\n trackSearchDropdownItemAction?.('add_to_cart')({ itemId, itemName, position });\n };\n\n const trackRemoveFromCartClickAction = (itemId: string, itemName: string, position: number) => {\n trackSearchAction('remove_from_cart');\n trackSearchDropdownItemAction?.('remove_from_cart')({ itemId, itemName, position });\n };\n\n return {\n trackSearchDropdownAction,\n trackSearchDropdownItemAction,\n trackSearchAction,\n trackAbortAction,\n trackCloseClickAction,\n trackListObjectClick,\n trackEnterAction,\n trackSeeAllResultsClickAction,\n trackLabelClick,\n trackAddToCartClickAction,\n trackRemoveFromCartClickAction,\n };\n};\nexport const useEcommerceSearchOverlayGA4ActionTracking = (\n originalQuery: string | undefined,\n queryUsed: string | undefined,\n searchFromPage: SearchFromPageType | undefined,\n isLoading: boolean,\n) => {\n const { trackSearchAction, trackSearchDropdownAction, trackSearchDropdownItemAction } =\n useSearchOverlayGA4ActionTracking(originalQuery, queryUsed, searchFromPage, isLoading);\n\n const trackAbortAction = (totalResults?: number) => {\n const totalResultsToTrack = isLoading ? undefined : totalResults;\n trackSearchAction('abort', totalResultsToTrack);\n trackSearchDropdownAction?.('abort');\n };\n\n const trackCloseClickAction = (totalResults?: number) => {\n const totalResultsToTrack = isLoading ? undefined : totalResults;\n trackSearchAction('click_x', totalResultsToTrack);\n trackSearchDropdownAction?.('click_x');\n };\n\n const trackAutocompleteItemClick = (totalResults?: number) => {\n const totalResultsToTrack = isLoading ? undefined : totalResults;\n trackSearchAction('other_suggestions', totalResultsToTrack);\n trackSearchDropdownAction?.('other_suggestions');\n };\n\n const trackListObjectClick = (\n totalResults: number | undefined,\n itemId: string,\n itemName: string,\n position: number,\n ) => {\n const totalResultsToTrack = isLoading ? undefined : totalResults;\n trackSearchAction('click_list_object', totalResultsToTrack);\n trackSearchDropdownItemAction?.('click_list_object')({ itemId, itemName, position });\n };\n\n const trackEnterAction = (totalResults?: number) => {\n const totalResultsToTrack = isLoading ? undefined : totalResults;\n trackSearchAction('enter', totalResultsToTrack);\n trackSearchDropdownAction?.('enter');\n };\n\n const trackSeeAllResultsClickAction = (totalResults?: number) => {\n const totalResultsToTrack = isLoading ? undefined : totalResults;\n trackSearchAction('see_all_results', totalResultsToTrack);\n trackSearchDropdownAction?.('see_all_results');\n };\n\n const trackAddToCartClickAction = (\n totalResults: number | undefined,\n itemId: string,\n itemName: string,\n position: number,\n ) => {\n trackSearchAction('add_to_cart', totalResults);\n trackSearchDropdownItemAction?.('add_to_cart')({ itemId, itemName, position });\n };\n\n const trackRemoveFromCartClickAction = (\n totalResults: number | undefined,\n itemId: string,\n itemName: string,\n position: number,\n ) => {\n trackSearchAction('remove_from_cart', totalResults);\n trackSearchDropdownItemAction?.('remove_from_cart')({ itemId, itemName, position });\n };\n\n return {\n trackAbortAction,\n trackCloseClickAction,\n trackAutocompleteItemClick,\n trackListObjectClick,\n trackEnterAction,\n trackSeeAllResultsClickAction,\n trackAddToCartClickAction,\n trackRemoveFromCartClickAction,\n };\n};\n","import type React from 'react';\n\nimport { HeaderSearch } from '../../../base/components/Header';\nimport EcommerceProductSearchStateContextProvider from '../../contexts/ecommerceProductSearchStateContext';\nimport EcommerceSearchBar from '../EcommerceSearchBar';\nimport EcommerceSearchOverlay from '../EcommerceSearchBar/EcommerceSearchOverlay';\nimport { SearchAutocompleteAbTestProvider } from '../EcommerceSearchBar/SearchAutocompleteAbTestContext';\n\nconst EcommerceSearch = (props: React.PropsWithChildren<{}>) => {\n return (\n <SearchAutocompleteAbTestProvider>\n <EcommerceProductSearchStateContextProvider initialQuery=\"\">\n <HeaderSearch searchSlot={<EcommerceSearchBar size=\"small\" />} />\n <EcommerceSearchOverlay dontNavigateToFullResults={false} addToCartSilent />\n\n {props.children}\n </EcommerceProductSearchStateContextProvider>\n </SearchAutocompleteAbTestProvider>\n );\n};\n\nexport default EcommerceSearch;\n","import { appConfig } from '../../../../appConfig';\n\nexport const buildAllProductResultsUrl = (query?: string, originalQuery?: string) => {\n const { url } = appConfig.coopSettings.ecommerce.search;\n const searchQuery = new URLSearchParams();\n if (query) {\n searchQuery.set('q', query);\n }\n\n if (originalQuery && originalQuery !== query) searchQuery.set('oq', originalQuery);\n\n return `${url}?${searchQuery.toString()}`;\n};\n","import type { FC } from 'react';\nimport * as React from 'react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport SearchOverlay from '../../../base/components/SearchOverlay';\nimport CartSummaryAccessibilityLogger from '../../../cart/components/atoms/CartSummaryAccessibilityLogger';\nimport DelayedA11yAnnouncer from '../../../common/components/A11yAnnouncer/DelayedA11yAnnouncer';\nimport { useEcommerceSearchOverlayGA4ActionTracking } from '../../../common/tracking/hooks/useSearchOverlayGA4Tracking';\nimport { useProductSearchStateContext } from '../../../search/hooks/useProductSearchStateContext';\nimport useReactRouting from '../../hooks/useReactRouting';\nimport { buildAllProductResultsUrl } from './EcommerceSearchBar.utils';\n\nexport const EcommerceSearchOverlayResults = React.lazy(\n () => import('./EcommerceSearchOverlayResults'),\n);\n\ninterface EcommerceSearchOverlayProps {\n dontNavigateToFullResults: boolean;\n addToCartSilent: boolean;\n}\n\nconst EcommerceSearchOverlay: FC<React.PropsWithChildren<EcommerceSearchOverlayProps>> = (\n props,\n) => {\n const {\n query,\n queryUsed,\n isLoading,\n clear,\n result,\n searchFromPage,\n a11yResultAnnounceMessage,\n } = useProductSearchStateContext();\n const { push } = useReactRouting();\n const searchRef = useRef<HTMLInputElement>(null);\n\n const {\n trackAbortAction,\n trackCloseClickAction,\n trackAutocompleteItemClick,\n trackListObjectClick,\n trackEnterAction,\n trackSeeAllResultsClickAction,\n trackAddToCartClickAction,\n trackRemoveFromCartClickAction,\n } = useEcommerceSearchOverlayGA4ActionTracking(\n query,\n result?.queryUsed,\n searchFromPage,\n isLoading,\n );\n\n const [disableModalFocusBackToTrigger, setDisableModalFocusBackToTrigger] = useState(false);\n\n const handleOutsideClick = () => {\n trackAbortAction(result?.totalResults);\n };\n\n const handleClearClick = () => {\n trackCloseClickAction(result?.totalResults);\n };\n\n const handleOnHintClick = () => {\n trackAutocompleteItemClick(result?.totalResults);\n searchRef.current?.focus();\n };\n\n const handleItemClick = (item: ApiProduct, index: number) => {\n trackListObjectClick(result?.totalResults, item.identifier, item.name, index);\n };\n\n const handleItemAddToCartClick = (item: ApiProduct, index: number) => {\n trackAddToCartClickAction(result?.totalResults, item.identifier, item.name, index);\n };\n\n const handleItemRemoveFromCartClick = (item: ApiProduct, index: number) => {\n trackRemoveFromCartClickAction(result?.totalResults, item.identifier, item.name, index);\n };\n\n const usedQuery = isLoading ? query : queryUsed;\n\n const navigateToResultsPage = (_usedQuery?: string, _originalQuery?: string) => {\n if (_usedQuery) {\n const viewAllResultsUrl = buildAllProductResultsUrl(_usedQuery, _originalQuery);\n push(viewAllResultsUrl);\n clear();\n setDisableModalFocusBackToTrigger(true);\n }\n };\n\n const handleOnEnterPress = () => {\n if (!props.dontNavigateToFullResults) {\n trackEnterAction(result?.totalResults);\n navigateToResultsPage(usedQuery, query);\n }\n };\n\n const handleFullResultsClick = () => {\n trackSeeAllResultsClickAction(result?.totalResults);\n navigateToResultsPage(usedQuery, query);\n };\n\n const onResultScroll = useCallback(() => searchRef.current?.blur(), [searchRef]);\n\n return (\n <SearchOverlay\n submitLabel=\"Sök vara\"\n onEnterPress={handleOnEnterPress}\n onOutsideClick={handleOutsideClick}\n onClearClick={handleClearClick}\n ref={searchRef}\n inputPlaceholder=\"Sök bland tusentals varor\"\n inputDescription=\"Förslag visas nedan\"\n announcerSlot={\n <DelayedA11yAnnouncer\n a11yMessage={a11yResultAnnounceMessage}\n name=\"EcommerceSearchResultsAnnouncer\"\n delayFirstMessage\n />\n }\n onExiting={() => {\n setDisableModalFocusBackToTrigger(false);\n }}\n dangerouslyDisableFocusBackToTrigger={disableModalFocusBackToTrigger}\n >\n <EcommerceSearchOverlayResults\n onScroll={onResultScroll}\n onFullResultsClick={handleFullResultsClick}\n dontNavigateAway={props.dontNavigateToFullResults}\n addToCartSilent={props.addToCartSilent}\n onHintClick={handleOnHintClick}\n onItemClick={handleItemClick}\n onItemAddToCartClick={handleItemAddToCartClick}\n onItemRemoveFromCartClick={handleItemRemoveFromCartClick}\n useMaxHeightCalculation\n />\n <CartSummaryAccessibilityLogger />\n </SearchOverlay>\n );\n};\n\nexport default EcommerceSearchOverlay;\n","import React, { createContext, useContext } from 'react';\n\nimport { appConfig } from '../../../../appConfig';\nimport { useAbTest } from '../../hooks/useAbTests';\n\nconst SearchAutocompleteAbTestContext = createContext<{\n isVariant: boolean;\n}>({\n isVariant: false,\n});\n\nexport const useSearchAutocompleteAbTestContext = () => {\n const context = useContext(SearchAutocompleteAbTestContext);\n return context;\n};\n\nexport const SearchAutocompleteAbTestProvider = ({ children }: React.PropsWithChildren<{}>) => {\n const { isVariant } = useAbTest({\n name: 'search_autocomplete_abtest',\n userId: appConfig.coopUserSettings.userId,\n enabled: true,\n });\n\n const obj = React.useMemo(() => ({ isVariant }), [isVariant]);\n\n return (\n <SearchAutocompleteAbTestContext.Provider value={obj}>\n {children}\n </SearchAutocompleteAbTestContext.Provider>\n );\n};\n","import { Search, SearchAutocomplete, SearchAutocompleteItem } from '@coop/components';\nimport { SearchAutocompleteItemLabel } from '@coop/components/src/SearchAutocomplete/SearchAutocomplete';\nimport { type FC, useEffect } from 'react';\n\nimport {\n useEcommerceSearchOverlayGA4ActionTracking,\n useSearchOverlayGA4ActionTracking,\n} from '../../../common/tracking/hooks/useSearchOverlayGA4Tracking';\nimport { useProductSearchStateContext } from '../../../search/hooks/useProductSearchStateContext';\nimport useReactRouting from '../../hooks/useReactRouting';\nimport { buildAllProductResultsUrl } from './EcommerceSearchBar.utils';\nimport { useSearchAutocompleteAbTestContext } from './SearchAutocompleteAbTestContext';\n\ninterface EcommerceSearchBarProps {\n size: React.ComponentProps<typeof Search>['size'];\n dontNavigateToFullResults?: boolean;\n}\n\nconst EcommerceSearchBar: FC<React.PropsWithChildren<EcommerceSearchBarProps>> = (props) => {\n const {\n query,\n queryUsed,\n isOpen,\n isLoading,\n open,\n clear,\n setQuery,\n show,\n searchFromPage,\n autocompleteResult,\n error,\n } = useProductSearchStateContext();\n\n const { isVariant } = useSearchAutocompleteAbTestContext();\n\n const { trackEnterAction } = useSearchOverlayGA4ActionTracking(\n query,\n queryUsed,\n searchFromPage,\n isLoading,\n );\n\n const { trackAutocompleteItemClick } = useEcommerceSearchOverlayGA4ActionTracking(\n query,\n queryUsed,\n searchFromPage,\n isLoading,\n );\n\n const { push } = useReactRouting();\n\n useEffect(() => {\n if (show && !isVariant) {\n open();\n }\n }, [show, open, isVariant]);\n\n const handleEnterPress = () => {\n trackEnterAction();\n navigateToResultsPage(query, queryUsed);\n };\n\n const navigateToResultsPage = (_usedQuery?: string, _originalQuery?: string) => {\n if (_usedQuery) {\n const viewAllResultsUrl = buildAllProductResultsUrl(_usedQuery, _originalQuery);\n push(viewAllResultsUrl);\n clear();\n }\n };\n\n const handleOnHintAbTestClick = (hint: string) => {\n trackAutocompleteItemClick(autocompleteResult?.hints.length);\n navigateToResultsPage(hint);\n };\n\n const hints = autocompleteResult?.hints.map((ss) => ({ text: ss, key: ss })) || [];\n\n return isVariant ? (\n <SearchAutocomplete\n placeholder=\"Sök vara\"\n size={props.size}\n inputValue={query}\n onInputChange={setQuery}\n showEmptyStateWhen={false}\n showErrorStateWhen={!!error}\n items={query ? hints : []}\n onSubmit={handleEnterPress}\n onSelectionChange={(key) => {\n if (key) {\n handleOnHintAbTestClick(key.toString());\n }\n }}\n overlayMaxHeight={500}\n >\n {(item) => (\n <SearchAutocompleteItem textValue={item.text}>\n <SearchAutocompleteItemLabel>{item.text}</SearchAutocompleteItemLabel>\n </SearchAutocompleteItem>\n )}\n </SearchAutocomplete>\n ) : (\n <Search\n submitLabel=\"Sök vara\"\n inputText={query}\n setInputText={setQuery}\n size={props.size}\n hide={isOpen}\n inputPlaceholder=\"Sök bland tusentals varor\"\n onEnterPress={(!props.dontNavigateToFullResults && handleEnterPress) || undefined}\n onEscapePress={clear}\n onReset={clear}\n aria-haspopup=\"dialog\"\n description=\"Sökresultaten kommer att visas medan du skriver\"\n />\n );\n};\n\nexport default EcommerceSearchBar;\n","import { type FC, useCallback } from 'react';\n\nimport { SearchFromPageType } from '../../base/models/SearchFromPageType';\nimport { useAppSelector } from '../../common/hooks/useThunkDispatch';\nimport { storeSelectors } from '../../common/selectors/storeSelectors';\nimport { SearchStateProvider } from '../../search/contexts/searchStateContext';\nimport searchFlow from '../../search/flow/searchFlow';\nimport { useSearchAutocompleteAbTestContext } from '../components/EcommerceSearchBar/SearchAutocompleteAbTestContext';\n\ninterface ProviderProps {\n initialQuery?: string;\n}\n\nconst searchProductsAbortable = async (\n abortSignal: AbortSignal,\n query: string,\n storeId: string,\n isAutocompleteAbTest: boolean,\n) => {\n // fake emtpy result if we are in the autocomplete abtest\n const searchPromise = isAutocompleteAbTest\n ? new Promise<Awaited<ReturnType<typeof searchFlow.searchProductsLoop>>>((resolve) => {\n resolve({\n items: [],\n query,\n queryUsed: query,\n totalResults: 0,\n spellingSuggestions: [],\n });\n })\n : searchFlow.searchProductsLoop(\n {\n page: 0,\n resultsPerPage: 15,\n searchTerm: query,\n facets: [],\n sortBy: [],\n storeId,\n },\n abortSignal,\n null,\n true,\n );\n\n return Promise.all([\n searchPromise,\n searchFlow.autocomplete(query, 0, 6, abortSignal, null, storeId),\n ]);\n};\n\nconst EcommerceProductSearchStateContextProvider: FC<React.PropsWithChildren<ProviderProps>> = (\n props,\n) => {\n const currentProductionUnit = useAppSelector(storeSelectors.currentProductionUnit);\n const { isVariant } = useSearchAutocompleteAbTestContext();\n\n const searchProductsFunction = useCallback(\n async (_abortSignal: AbortSignal, _query: string) =>\n searchProductsAbortable(_abortSignal, _query, currentProductionUnit, isVariant),\n [currentProductionUnit, isVariant],\n );\n\n return (\n <SearchStateProvider\n initialQuery={props.initialQuery || null}\n searchFunction={searchProductsFunction}\n searchFromPage={SearchFromPageType.Ecommerce}\n minimumQueryLength={2}\n >\n {props.children}\n </SearchStateProvider>\n );\n};\n\nexport default EcommerceProductSearchStateContextProvider;\n","import { appConfig } from '../appConfig';\nimport abTestStorage from '../microApps/common/persistance/localStorage/abTestStorage';\n\n/** Randomize between 0-99, if a user is logged in, always create same hash */\nexport const randomizePersistant = (name: string, userId?: string) => {\n if (!name || !userId) {\n return Math.random() * 100;\n }\n const stringToHash = name + userId;\n let hash = 0;\n let i;\n let chr;\n\n for (i = 0; i < stringToHash.length; i += 1) {\n chr = stringToHash.charCodeAt(i);\n // eslint-disable-next-line no-bitwise\n hash = (hash << 5) - hash + chr;\n // eslint-disable-next-line no-bitwise\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash) % 100;\n};\n\nexport const isAbTestPreview = () =>\n new URLSearchParams(window.location.search)?.get('abTestPreview') === 'true';\n\nexport const calculateAbTestValue = (name: string, percentage: number, userId?: string) => {\n const nameWithPercentage = `${name}_${percentage}`;\n const randomNumber = randomizePersistant(nameWithPercentage, userId);\n return randomNumber < percentage ? '1' : '0';\n};\n\nexport const setupAbTest = (epiAbTest: RecursiveReadonly<EpiAbTest>, userId?: string) => {\n const { name } = epiAbTest;\n let abTest = abTestStorage.get(name);\n\n if (!abTest) {\n abTest = {\n name: epiAbTest.name,\n percentage: epiAbTest.percentage,\n created: new Date(),\n modified: new Date(),\n abTestValue: calculateAbTestValue(name, epiAbTest.percentage, userId),\n };\n abTestStorage.set(abTest);\n }\n // if the percentage is changed in CMS on an existing test, we need to recalculate ab test value\n else if (abTest.percentage !== epiAbTest.percentage) {\n abTest.percentage = epiAbTest.percentage;\n abTest.abTestValue = calculateAbTestValue(name, epiAbTest.percentage, userId);\n abTest.modified = new Date();\n abTestStorage.set(abTest);\n }\n\n return abTest;\n};\n\nexport const cleanupAbTests = () => {\n const epiAbTests = appConfig.coopSettings.featureFlags.abTests;\n\n if (epiAbTests) {\n const abTestsToRemove = abTestStorage\n .all()\n .filter((test) => epiAbTests.every((epiTest) => epiTest.name !== test.name));\n\n abTestStorage.remove(abTestsToRemove.map((test) => test.name));\n }\n};\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { appConfig } from '../../../appConfig';\nimport { cleanupAbTests, isAbTestPreview, setupAbTest } from '../../../utility/abTests';\nimport gaTracking from '../../common/tracking/tracking';\n\n/**\n * This hook makes the user responsible for triggering interaction tracking\n */\nexport const useImperativeAbTest = (args: {\n name: string;\n contentId?: string;\n userId?: string;\n}) => {\n const { name, contentId, userId } = args;\n\n const { isVariant: isResultVariant, isEnabled: isTestEnabled } = useMemo(() => {\n const epiAbTest = appConfig.coopSettings.featureFlags.abTests\n ?.filter((item) => !!item.enabled)\n .find(\n (t) =>\n (t.contentId.length === 0 && t.name === name) ||\n (t.contentId.length !== 0 &&\n t.name === name &&\n !!contentId &&\n t.contentId.includes(contentId)),\n );\n\n let isVariant = false;\n let isEnabled = false;\n\n if (epiAbTest) {\n const abTest = setupAbTest(epiAbTest, userId);\n isVariant = abTest.abTestValue === '1';\n isEnabled = true;\n }\n\n return { isVariant: isVariant || isAbTestPreview(), isEnabled };\n }, [contentId, name, userId]);\n\n const trackInteraction = useCallback(\n (variant: string) => {\n // eslint-disable-next-line no-console\n console.logDev(`Triggered ${name} AB test. Result: ${variant}`);\n\n if (isAbTestPreview()) return;\n\n gaTracking.abTest.userInteraction(name, variant);\n },\n [name],\n );\n\n return { isVariant: isResultVariant, trackInteraction, isEnabled: isTestEnabled };\n};\n\n/**\n * This hook will automatically trigger the test when component loads\n */\nexport const useAbTest = ({\n name,\n contentId,\n userId,\n enabled,\n trackOnce = false,\n}: {\n name: string;\n contentId?: string;\n userId?: string;\n enabled: boolean;\n trackOnce?: boolean;\n}) => {\n const { isVariant, isEnabled, trackInteraction } = useImperativeAbTest({\n name,\n contentId,\n userId,\n });\n\n const alreadyTrackedRef = useRef(false);\n\n const trackAbTest = useCallback(\n (variant: string) => {\n if (!trackOnce) {\n trackInteraction(variant);\n return;\n }\n\n if (!alreadyTrackedRef.current) {\n alreadyTrackedRef.current = true;\n trackInteraction(variant);\n }\n },\n [trackInteraction, trackOnce],\n );\n\n useEffect(() => {\n cleanupAbTests();\n }, []);\n\n useEffect(() => {\n if (isEnabled && enabled) {\n if (isVariant) {\n trackAbTest('B');\n } else {\n trackAbTest('A');\n }\n }\n }, [trackAbTest, isEnabled, enabled, isVariant, name, contentId]);\n\n // to become variant you need to check all flags. We dont want to show variant if someone had previously saved abtest \"B\" and the test is disabled\n return { isVariant: isEnabled && enabled && isVariant };\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport loyaltyFlow from '../../../common/flow/loyaltyFlow';\nimport { pointsQueryKeys } from '../pointsQueryKeys';\n\nexport const useEligibleForBonus = (enabled: boolean = true) => {\n const query = useQuery({\n queryKey: pointsQueryKeys.eliableForBonus,\n queryFn: loyaltyFlow.getEligibleForBonus,\n retry: 1,\n enabled,\n staleTime: 1000 * 60 * 5, // 5 minutes\n });\n\n return query;\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport loyaltyFlow from '../../../common/flow/loyaltyFlow';\nimport { pointsQueryKeys } from '../pointsQueryKeys';\n\nexport const useHouseholdPointBalance = (enabled: boolean = true) => {\n const query = useQuery({\n queryKey: pointsQueryKeys.householdMonetaryBalance,\n queryFn: loyaltyFlow.getPointBalance,\n retry: 0,\n enabled,\n });\n\n return query;\n};\n","export const pointsQueryKeys = {\n eliableForBonus: ['eliableForBonus'],\n expiringPoints: ['expiringPoints'],\n expiringPointsByNumberMonths: (months: number) => [...pointsQueryKeys.expiringPoints, months],\n allOffers: ['allPointOffers'],\n\n pointBalanceByMonth: (month: number) => ['pointBalanceByMonth', month],\n previousMonthsBonus: ['previousMonthsBonus'],\n householdBalance: ['householdPointBalance'],\n householdMonetaryBalance: ['householdMonetaryBalance'],\n pointsMatrixStructureLevel: ['pointsMatrixStructureLevel'],\n member20PointsSummary: ['pointsSummary'],\n member20PointsSummaryYearly: ['pointsSummaryYearly'],\n};\n\nexport const searchedPointOffer = {\n all: ['searchedPointOffers'],\n byIds: (ids: number[]) => [...searchedPointOffer.all, ids],\n};\n\nexport const offerPropositionHistory = {\n all: ['offerPropositionHistory'],\n byRedeemed: (includedRedeemed: boolean) => [...offerPropositionHistory.all, includedRedeemed],\n byDate: (from: Date, to: Date, page: number, pageSize: number) => [\n ...offerPropositionHistory.all,\n from,\n to,\n page,\n pageSize,\n ],\n};\n\nexport const vklVoucherDetails = {\n all: ['vklVoucherDetails'],\n byTransactionGuid: (guid: string) => [...vklVoucherDetails.all, guid],\n};\n","import { ConfirmInfo } from '@coop/components';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport type React from 'react';\nimport { useState } from 'react';\n\nimport { Helpers } from '../../../../utility/helpers';\nimport { useMyCoopSettingsPageQuery } from '../../hooks/useMyCoopSettingsPageQuery';\nimport styles from './BonusInfoConfirm.module.scss';\n\nexport interface BonusInfoConfirmProps {\n monetaryWorth: number;\n cssClasses: string;\n onClickOpen?: () => void;\n points: number;\n}\n\nconst BonusInfoConfirm: FC<React.PropsWithChildren<BonusInfoConfirmProps>> = (props) => {\n const { data: myCoopSettings } = useMyCoopSettingsPageQuery();\n\n const [show, setShow] = useState(false);\n const handleOpenClick = () => {\n setShow(true);\n };\n\n return (\n <>\n <button\n className={classNames(props.cssClasses, styles.Button)}\n type=\"button\"\n onClick={() => {\n handleOpenClick();\n props.onClickOpen?.();\n }}\n aria-label={`Motsvarar ${props.monetaryWorth} kronor hos Coop, där ${props.points} poäng ger detta belopp`}\n aria-haspopup=\"dialog\"\n >\n Motsvarar{' '}\n <span className=\"u-textWeightBold \">\n {Helpers.formatMemberPointsAndAmount(props.monetaryWorth)}\n </span>{' '}\n kr hos Coop\n </button>\n {myCoopSettings?.bonusInfoNotificationHeadline &&\n myCoopSettings?.bonusInfoNotificationText && (\n <ConfirmInfo\n show={show}\n heading={myCoopSettings.bonusInfoNotificationHeadline}\n message={myCoopSettings.bonusInfoNotificationText}\n close={() => setShow(false)}\n />\n )}\n </>\n );\n};\n\nexport default BonusInfoConfirm;\n","// extracted by mini-css-extract-plugin\nexport default {\"Button\":\"N20qN_7E\"};","import { appConfig } from '../../../appConfig';\nimport { useEpiPageByContentId } from '../../episerver/components/hooks/useCurrentEpiPage';\nimport type { EpiMyCoopSettingsPageType } from '../../episerver/components/pages/EpiMyCoopSettingsPage/epiMyCoopSettingsPageType';\n\nexport const useMyCoopSettingsPageQuery = (\n selectedFields?: (keyof EpiMyCoopSettingsPageType)[] | undefined,\n) =>\n useEpiPageByContentId<EpiMyCoopSettingsPageType>(\n appConfig.coopSettings.myCoop.myCoopSettingsPageContentId,\n {\n depth: 1,\n select: selectedFields,\n },\n { gcTime: 1000 * 60 * 5 },\n );\n","// extracted by mini-css-extract-plugin\nexport default {\"List\":\"vfqN_Jlx\",\"ProfileMenuAccordion\":\"jpnD1w74\",\"ProfileMenuAccordionItem\":\"zQSA8hT4\",\"AccordionHeader\":\"w8DFxMda\",\"AccordionItem\":\"OUixFbxG\",\"Container\":\"TyXkjLC_\",\"Item\":\"NWsphqoc\",\"Trigger\":\"X1eTklmJ\",\"SubLevel\":\"yPhRzVnS\",\"isActive\":\"rWwJESKl\",\"AccordionContent\":\"oH4ugInF\",\"Link\":\"CNXdNmSU\",\"AccordionItemName\":\"w5OF3uKY\",\"AccordionItemNameSideMenu\":\"aI6BPFEG\"};","import type { MyCoopProfileMenuItem } from '../../../episerver/api/localContentApi';\n\nexport const getTopActivePage = (page: MyCoopProfileMenuItem, activePageId: number) => {\n if (page.id === activePageId) {\n return page.id;\n }\n\n if (page.menuItemChildren && page.menuItemChildren.length > 0) {\n if (page.menuItemChildren.some((child) => !!getTopActivePage(child, activePageId))) {\n return page.id;\n }\n }\n\n return undefined;\n};\n","/* eslint-disable unused-imports/no-unused-vars */\nimport { Accordion } from '@coop/components';\nimport classnames from 'classnames';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { isAriaCurrentPage } from '../../../common/utils/accessibilityUtils';\nimport { urlFriendlySlug } from '../../../common/utils/sanitizeUtils';\nimport type { MyCoopProfileMenuItem } from '../../../episerver/api/localContentApi';\nimport styles from './ProfileMenuList.module.scss';\nimport { getTopActivePage } from './ProfileMenuList.utils';\n\ninterface ProfileMenuListProps {\n pages: MyCoopProfileMenuItem[];\n activePageId?: number;\n onItemClick?: (\n e: React.MouseEvent<HTMLAnchorElement>,\n item: MyCoopProfileMenuItem,\n parentItem?: MyCoopProfileMenuItem,\n ) => void;\n onItemOpen?: (item: MyCoopProfileMenuItem) => void;\n onItemClose?: (item: MyCoopProfileMenuItem) => void;\n isSideMenu?: boolean;\n}\n\nconst getMenuPageById = (pages: MyCoopProfileMenuItem[], id: string) => {\n return pages.find((page) => page.id === Number(id));\n};\n\nconst ProfileMenuList: FC<React.PropsWithChildren<ProfileMenuListProps>> = (props) => {\n const { pathname } = useLocation();\n const previouslyExpandedRef = useRef<string>('');\n const [expandedId, setExpandedId] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (props.activePageId) {\n const expandedPageId = props.pages\n .find((page) => !!getTopActivePage(page, props.activePageId!))\n ?.id.toString();\n\n setExpandedId(expandedPageId || ''); // Accordion uses empty string to indicate collapsed item\n }\n }, [props.activePageId, props.pages]);\n\n return (\n <nav aria-label=\"Profilmenyn\" className={styles.List}>\n <Accordion.Root\n collapsible\n type=\"single\"\n className={styles.ProfileMenuAccordion}\n asChild\n value={expandedId}\n onValueChange={(_expandedId) => {\n if (_expandedId) {\n const expandedItem = getMenuPageById(props.pages, _expandedId);\n if (expandedItem) {\n props.onItemOpen?.(expandedItem);\n }\n } else {\n const expandedItem = getMenuPageById(\n props.pages,\n previouslyExpandedRef.current,\n );\n if (expandedItem) {\n props.onItemClose?.(expandedItem);\n }\n }\n\n setExpandedId(_expandedId);\n previouslyExpandedRef.current = _expandedId;\n }}\n rounded\n >\n <ul className={classnames(props.isSideMenu && styles.Container)}>\n {props.pages.map((myCoopProfilePage: MyCoopProfileMenuItem) => (\n <MenuItemAccordion\n currentPath={pathname}\n key={myCoopProfilePage.id}\n item={myCoopProfilePage}\n level={1}\n activePageId={props.activePageId}\n onItemClick={props.onItemClick}\n onItemOpen={props.onItemOpen}\n onItemClose={props.onItemClose}\n isSideMenu={props.isSideMenu}\n />\n ))}\n </ul>\n </Accordion.Root>\n </nav>\n );\n};\n\nconst Link = React.forwardRef<HTMLAnchorElement, React.ComponentPropsWithoutRef<'a'>>(\n (props, ref) => {\n const {\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls,\n type,\n ...rest\n } = props;\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <a {...rest} ref={ref}>\n {props.children}\n </a>\n );\n },\n);\n\nconst MenuItemAccordion: FC<\n React.PropsWithChildren<{\n currentPath: string;\n item: MyCoopProfileMenuItem;\n level: number;\n activePageId?: number;\n onItemClick?: (\n e: React.MouseEvent<HTMLAnchorElement>,\n item: MyCoopProfileMenuItem,\n parentItem?: MyCoopProfileMenuItem,\n ) => void;\n onItemOpen?: (item: MyCoopProfileMenuItem) => void;\n onItemClose?: (item: MyCoopProfileMenuItem) => void;\n isSideMenu?: boolean;\n }>\n> = ({\n currentPath,\n item: menuPageItem,\n level,\n activePageId,\n onItemClick,\n onItemOpen,\n onItemClose,\n isSideMenu,\n}) => {\n // business requirement to show expandable children only on level 1\n const hasChildren = menuPageItem.menuItemChildren.length > 0 && level < 2;\n\n const active = !!activePageId && !!getTopActivePage(menuPageItem, activePageId);\n const ariaCurrentPage = active && isAriaCurrentPage(menuPageItem.url || '', currentPath);\n\n return (\n <Accordion.Item\n className={styles.ProfileMenuAccordionItem}\n value={menuPageItem.id.toString()}\n asChild\n key={menuPageItem.id}\n >\n <li>\n <Accordion.Header asChild className={styles.AccordionHeader}>\n {hasChildren ? (\n <Accordion.Trigger className={styles.Trigger}>\n <div\n className={styles.AccordionItem}\n data-test={`profileMenuItem-${urlFriendlySlug(menuPageItem.name)}`}\n >\n <div\n className={classnames(\n styles.AccordionItemName,\n isSideMenu ? styles.AccordionItemNameSideMenu : '',\n )}\n >\n {menuPageItem.name}\n </div>\n </div>\n </Accordion.Trigger>\n ) : (\n <Accordion.Trigger\n className={classnames(\n styles.Trigger,\n level > 1 && styles.SubLevel,\n active && styles.isActive,\n styles.Item,\n )}\n asChild\n withChevron={false}\n aria-current={ariaCurrentPage}\n >\n <Link\n href={menuPageItem.url}\n key={`${menuPageItem.id}`}\n onClick={(e) => onItemClick?.(e, menuPageItem)}\n >\n <div\n className={styles.AccordionItem}\n data-test={`profileMenuItem-${urlFriendlySlug(\n menuPageItem.name,\n )}`}\n >\n <div className={styles.Link}>{menuPageItem.name}</div>\n </div>\n </Link>\n </Accordion.Trigger>\n )}\n </Accordion.Header>\n {hasChildren && (\n <Accordion.Content>\n <Accordion.Root\n collapsible\n type=\"single\"\n className={classnames(\n styles.ProfileMenuAccordion,\n styles.AccordionContent,\n )}\n asChild\n value={activePageId?.toString()}\n >\n <ul>\n {menuPageItem.menuItemChildren.map((myCoopProfileChildPage) => (\n <MenuItemAccordion\n currentPath={currentPath}\n key={myCoopProfileChildPage.id}\n item={myCoopProfileChildPage}\n level={level + 1}\n activePageId={activePageId}\n onItemClick={(e) =>\n onItemClick?.(e, myCoopProfileChildPage, menuPageItem)\n }\n onItemOpen={onItemOpen}\n onItemClose={onItemClose}\n isSideMenu={isSideMenu}\n />\n ))}\n </ul>\n </Accordion.Root>\n </Accordion.Content>\n )}\n </li>\n </Accordion.Item>\n );\n};\n\nexport default ProfileMenuList;\n","import type { FC } from 'react';\nimport * as React from 'react';\nimport type { AsyncStateStatus } from 'react-async-hook';\n\nimport type { SearchFromPageType } from '../../base/models/SearchFromPageType';\nimport type { ApiException } from '../../common/exceptions/exceptionDefinitions';\nimport { useSearchDropdownState } from '../../common/hooks/useSearchDropdownState';\nimport type { SearchResultType } from '../models/SearchResultType';\nimport { mapSearchFromPageToExpectedResultType } from '../utils/searchResultUtils';\n\ninterface SearchDropdownState<TResult> {\n result?: TResult;\n a11yResultAnnounceMessage: string;\n isOpen: boolean;\n error?: ApiException;\n show: boolean;\n query?: string;\n status: AsyncStateStatus;\n searchFromPage?: SearchFromPageType;\n expectedSearchResultType?: SearchResultType;\n isLoading: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst SearchDropdownStateContext = React.createContext<SearchDropdownState<any>>({\n isOpen: false,\n result: undefined,\n a11yResultAnnounceMessage: '',\n error: undefined,\n show: false,\n query: undefined,\n searchFromPage: undefined,\n expectedSearchResultType: undefined,\n status: 'not-requested',\n isLoading: false,\n});\n\nconst contextNotInitialized = () => {\n throw new Error('SearchDropdownDispatchContext not yet initialized');\n};\n\ntype SearchDropdownDispatch = Pick<\n ReturnType<typeof useSearchDropdownState>,\n 'setQuery' | 'resetQuery' | 'open' | 'close' | 'clear' | 'setA11yResultAnnounceMessage'\n>;\nconst SearchDropdownDispatchContext = React.createContext<SearchDropdownDispatch>({\n setQuery: contextNotInitialized,\n resetQuery: contextNotInitialized,\n open: contextNotInitialized,\n close: contextNotInitialized,\n clear: contextNotInitialized,\n setA11yResultAnnounceMessage: contextNotInitialized,\n});\n\ninterface SearchStateProviderProps {\n initialQuery: string | null;\n searchFromPage?: SearchFromPageType;\n searchFunction: (signal: AbortSignal, query: string) => Promise<unknown>;\n minimumQueryLength: number;\n debounceTime?: number;\n}\nexport const SearchStateProvider: FC<React.PropsWithChildren<SearchStateProviderProps>> = ({\n children,\n searchFunction,\n searchFromPage,\n initialQuery,\n minimumQueryLength,\n debounceTime,\n}) => {\n const {\n result,\n resultDescription,\n isOpen,\n clear,\n open,\n close,\n error,\n show,\n query,\n setQuery,\n resetQuery,\n status,\n isLoading,\n setA11yResultAnnounceMessage,\n } = useSearchDropdownState(initialQuery, searchFunction, minimumQueryLength, debounceTime);\n\n const expectedSearchResultType = mapSearchFromPageToExpectedResultType(searchFromPage);\n\n return React.createElement(\n SearchDropdownDispatchContext.Provider,\n {\n value: {\n clear,\n open,\n close,\n setQuery,\n resetQuery,\n setA11yResultAnnounceMessage,\n },\n },\n React.createElement(\n SearchDropdownStateContext.Provider,\n {\n value: {\n result,\n a11yResultAnnounceMessage: resultDescription,\n isOpen,\n error,\n show,\n query,\n searchFromPage,\n status,\n isLoading,\n expectedSearchResultType,\n },\n },\n children,\n ),\n );\n};\n\nexport const useSearchStateContext = <TResult = unknown>() => {\n const state = React.useContext<SearchDropdownState<TResult>>(SearchDropdownStateContext);\n const dispatch = React.useContext(SearchDropdownDispatchContext);\n\n if (state === undefined || dispatch === undefined) {\n throw new Error('useSearchStateContext must be used within a SearchStateProvider');\n }\n return { ...state, ...dispatch };\n};\n","import { useCallback, useState } from 'react';\n\nimport { DropdownType } from '../store/structureDefinitions/modalState';\nimport useAsyncAbortableDispatcher from './useAsyncAbortableDispatcher';\nimport useModal from './useModal';\n\nconst useAbortableDebouncedSearch = <TResult>(\n inputText: string,\n searchFunction: (signal: AbortSignal, query: string) => Promise<TResult>,\n minimumQueryLength: number,\n delay: number,\n) => {\n const search = async (abortSignal: AbortSignal, text: string) => {\n // If the input is empty, return nothing immediately (without the debouncing delay!)\n if (text.length < minimumQueryLength) {\n return undefined;\n }\n\n return searchFunction(abortSignal, text);\n };\n\n const { status, error, result, isLoading } = useAsyncAbortableDispatcher(search, [inputText], {\n executeOnMount: !!inputText,\n keepPreviousResult: true,\n debounced: true,\n debounceTime: delay,\n });\n\n const hasResponse = !!(status === 'success' && !!result) || !!(status === 'error' && error);\n\n return {\n hasResponse,\n result,\n error,\n isLoading,\n status,\n };\n};\n\nexport const useSearchDropdownState = <TResult>(\n initialInputText: string | null,\n searchFunction: (signal: AbortSignal, query: string) => Promise<TResult>,\n minimumQueryLength: number,\n debounceTime?: number,\n) => {\n const { open, close, isOpen } = useModal(DropdownType.Search);\n\n const [query, setQuery] = useState(initialInputText || '');\n const [a11yResultAnnounceMessage, setA11yResultAnnounceMessage] = useState('');\n\n const delay = debounceTime || 300;\n\n const { hasResponse, result, error, status, isLoading } = useAbortableDebouncedSearch(\n query,\n searchFunction,\n minimumQueryLength,\n delay,\n );\n\n const resetQuery = useCallback(() => setQuery(''), []);\n\n const clear = useCallback(() => {\n close();\n resetQuery();\n setA11yResultAnnounceMessage('');\n }, [close, resetQuery]);\n\n return {\n result,\n isOpen,\n clear,\n open,\n close,\n error,\n show: hasResponse,\n hasResponse,\n query,\n setQuery,\n resetQuery,\n status,\n isLoading,\n resultDescription: a11yResultAnnounceMessage,\n setA11yResultAnnounceMessage,\n };\n};\n","import { useCallback } from 'react';\n\nimport { useAsyncDispatcher } from '../../common/hooks/useAsyncDispatcher';\nimport { useAppSelector } from '../../common/hooks/useThunkDispatch';\nimport { storeSelectors } from '../../common/selectors/storeSelectors';\nimport type {\n ApiLoopSearchAndFilter,\n ApiLoopSearchFilter,\n ApiLoopSearchInverseFilter,\n ApiLoopSearchOrFilter,\n} from '../api/searchRequests';\nimport searchFlow from '../flow/searchFlow';\nimport type { GlobalSearchRequest } from '../models/models';\nimport { SearchResultType } from '../models/SearchResultType';\n\nexport interface SearchResultPageCountPerType {\n products: number;\n recipes: number;\n stores: number;\n articles: number;\n pointshop: number;\n}\n\nexport const globalSearchAbortable = (\n query: string,\n currentProductionUnit: string,\n resultCountsPerPage: SearchResultPageCountPerType,\n quickSearch: boolean,\n abortSignal?: AbortSignal,\n) => {\n const searchRequest = {\n page: 0,\n resultsPerPage: 0,\n facets: [],\n sortBy: [],\n };\n\n // PARTNERERBJUDANDEN\n const partnerTypeFilter: ApiLoopSearchFilter = {\n type: 'type',\n comparisonMode: 'equals',\n value: 'PartneroffersEntity',\n };\n const partnererbjudandeAndFilter: ApiLoopSearchAndFilter = {\n and: [],\n };\n partnererbjudandeAndFilter.and.push(partnerTypeFilter);\n\n // POINTSHOP\n const pointshopValidityStartFilter: ApiLoopSearchFilter = {\n type: 'attribute',\n attributeName: 'pointshop_validityStartDate',\n comparisonMode: 'lessThan',\n value: new Date().toISOString().replace('T', ' '),\n };\n const pointshopValidityEndFilter: ApiLoopSearchFilter = {\n type: 'attribute',\n attributeName: 'pointshop_validityEndDate',\n comparisonMode: 'greaterThan',\n value: new Date().toISOString().replace('T', ' '),\n };\n const pointshopTypeFilter: ApiLoopSearchFilter = {\n type: 'type',\n value: 'PointshopEntity',\n comparisonMode: 'equals',\n };\n const notHiddenFilter: ApiLoopSearchFilter = {\n type: 'attribute',\n attributeName: 'pointshop_category',\n value: 'Dold kategori',\n comparisonMode: 'equals',\n };\n const pointshopNotFilter: ApiLoopSearchInverseFilter = {\n not: notHiddenFilter,\n };\n\n const pointshopAndFilter: ApiLoopSearchAndFilter = {\n and: [],\n };\n pointshopAndFilter.and.push(pointshopValidityEndFilter);\n pointshopAndFilter.and.push(pointshopValidityStartFilter);\n pointshopAndFilter.and.push(pointshopTypeFilter);\n pointshopAndFilter.and.push(pointshopNotFilter);\n\n const orFilter: ApiLoopSearchOrFilter = {\n or: [],\n };\n orFilter.or.push(partnererbjudandeAndFilter);\n orFilter.or.push(pointshopAndFilter);\n\n const searchRequestPointshop = {\n page: 0,\n resultsPerPage: 0,\n facets: [],\n sortBy: [],\n filter: orFilter,\n };\n\n return searchFlow.searchGlobalLoop(\n {\n searchTerm: query,\n storeId: currentProductionUnit,\n productSearchRequest: {\n ...searchRequest,\n resultsPerPage: resultCountsPerPage.products,\n },\n articleSearchRequest: {\n ...searchRequest,\n resultsPerPage: resultCountsPerPage.articles,\n },\n storeSearchRequest: {\n ...searchRequest,\n resultsPerPage: resultCountsPerPage.stores,\n },\n recipeSearchRequest: {\n ...searchRequest,\n resultsPerPage: resultCountsPerPage.recipes,\n },\n pointshopSearchRequest: {\n ...searchRequestPointshop,\n resultsPerPage: resultCountsPerPage.pointshop,\n },\n },\n quickSearch,\n abortSignal,\n );\n};\n\nexport const useGlobalSearchResultState = (\n pageCounts: SearchResultPageCountPerType,\n quickSearch: boolean,\n) => {\n const currentProductionUnit = useAppSelector(storeSelectors.currentProductionUnit);\n const { execute, result, error, isLoading, status } = useAsyncDispatcher(\n (_query: string, _currentProductionUnit: string, _quickSearch: boolean) => {\n return globalSearchAbortable(\n _query,\n _currentProductionUnit,\n pageCounts,\n _quickSearch,\n undefined,\n );\n },\n );\n\n const fetch = useCallback(\n (_query: string) => {\n if (currentProductionUnit) {\n execute(_query, currentProductionUnit, quickSearch);\n }\n },\n [currentProductionUnit, quickSearch, execute],\n );\n return {\n result,\n error,\n isLoading,\n fetch,\n status,\n };\n};\n\nconst getGlobalSearchSingleTypeRequest = (\n searchTerm: string,\n storeId: string,\n selectedPage: number,\n pageSize: number,\n resultType: SearchResultType,\n): GlobalSearchRequest => {\n const filledSingleTypeRquest = {\n page: selectedPage,\n resultsPerPage: pageSize,\n facets: [],\n sortBy: [],\n };\n\n // PARTNERERBJUDANDEN\n const partnerTypeFilter: ApiLoopSearchFilter = {\n type: 'type',\n comparisonMode: 'equals',\n value: 'PartneroffersEntity',\n };\n const partnererbjudandeAndFilter: ApiLoopSearchAndFilter = {\n and: [],\n };\n partnererbjudandeAndFilter.and.push(partnerTypeFilter);\n\n // POINTSHOP\n const pointshopValidityStartFilter: ApiLoopSearchFilter = {\n type: 'attribute',\n attributeName: 'pointshop_validityStartDate',\n comparisonMode: 'lessThan',\n value: new Date().toISOString().replace('T', ' '),\n };\n const pointshopValidityEndFilter: ApiLoopSearchFilter = {\n type: 'attribute',\n attributeName: 'pointshop_validityEndDate',\n comparisonMode: 'greaterThan',\n value: new Date().toISOString().replace('T', ' '),\n };\n const pointshopTypeFilter: ApiLoopSearchFilter = {\n type: 'type',\n value: 'PointshopEntity',\n comparisonMode: 'equals',\n };\n const notHiddenFilter: ApiLoopSearchFilter = {\n type: 'attribute',\n attributeName: 'pointshop_category',\n value: 'Dold kategori',\n comparisonMode: 'equals',\n };\n const pointshopNotFilter: ApiLoopSearchInverseFilter = {\n not: notHiddenFilter,\n };\n\n const pointshopAndFilter: ApiLoopSearchAndFilter = {\n and: [],\n };\n\n pointshopAndFilter.and.push(pointshopValidityEndFilter);\n pointshopAndFilter.and.push(pointshopValidityStartFilter);\n pointshopAndFilter.and.push(pointshopTypeFilter);\n pointshopAndFilter.and.push(pointshopNotFilter);\n\n const orFilter: ApiLoopSearchOrFilter = {\n or: [],\n };\n orFilter.or.push(partnererbjudandeAndFilter);\n orFilter.or.push(pointshopAndFilter);\n\n const filledSingleTypeFilterRquest = {\n page: selectedPage,\n resultsPerPage: pageSize,\n facets: [],\n sortBy: [],\n filter: orFilter,\n };\n\n const globalSearchRequest: GlobalSearchRequest = {\n searchTerm,\n storeId,\n productSearchRequest:\n resultType === SearchResultType.Products ? filledSingleTypeRquest : undefined,\n articleSearchRequest:\n resultType === SearchResultType.Articles ? filledSingleTypeRquest : undefined,\n pointshopSearchRequest:\n resultType === SearchResultType.Pointshop ? filledSingleTypeFilterRquest : undefined,\n storeSearchRequest:\n resultType === SearchResultType.Stores ? filledSingleTypeRquest : undefined,\n recipeSearchRequest:\n resultType === SearchResultType.Recipes ? filledSingleTypeRquest : undefined,\n recipeCategoriesSearchRequest:\n resultType === SearchResultType.Recipes\n ? { ...filledSingleTypeRquest, page: 0 }\n : undefined, // every time we fetch recipes in GlobalSearchState, we also want recipe categories\n };\n\n return globalSearchRequest;\n};\n\nexport const useGlobalSearchSingleTypeState = (\n pageSize: number,\n resultType: SearchResultType,\n page: number,\n) => {\n const currentProductionUnit = useAppSelector(storeSelectors.currentProductionUnit);\n const { execute, result, error, isLoading, status } = useAsyncDispatcher(\n (_query: string, _selectedPage: number, _currentProductionUnit: string) => {\n return searchFlow.searchGlobalLoop(\n getGlobalSearchSingleTypeRequest(\n _query,\n _currentProductionUnit,\n _selectedPage,\n pageSize,\n resultType,\n ),\n false,\n undefined,\n );\n },\n { keepPreviousResult: true },\n );\n\n const fetch = useCallback(\n (_query: string) => {\n if (currentProductionUnit) {\n execute(_query, page, currentProductionUnit);\n }\n },\n [currentProductionUnit, execute, page],\n );\n\n return {\n isLoading,\n result,\n error,\n fetch,\n status,\n };\n};\n","import { useSearchStateContext } from '../contexts/searchStateContext';\nimport type { AutocompleteResponse, LoopSearchProductResults } from '../models/models';\n\nexport const useProductSearchStateContext = () => {\n const x = useSearchStateContext<[LoopSearchProductResults, AutocompleteResponse]>();\n const mapped = {\n ...x,\n result: x?.result?.[0],\n autocompleteResult: x?.result?.[1],\n queryUsed: x?.result?.[0]?.queryUsed || x?.query,\n };\n return mapped;\n};\n","export enum SearchResultType {\n Recipes = 'Recipes',\n Products = 'Products',\n Stores = 'Stores',\n Articles = 'Articles',\n Pointshop = 'Pointshop',\n}\n","import { appConfig } from '../../../appConfig';\nimport { ensureSlashes, trimTrailingSlash } from '../../common/utils/stringUtils';\n\nconst GLOBAL_SEARCH_PAGE = trimTrailingSlash(\n ensureSlashes(appConfig.coopSettings.globalSearch.url),\n);\n\nexport const globalSearchRoutes = {\n root: GLOBAL_SEARCH_PAGE,\n articles: `${GLOBAL_SEARCH_PAGE}/artiklar`,\n stores: `${GLOBAL_SEARCH_PAGE}/butiker`,\n pointOffers: `${GLOBAL_SEARCH_PAGE}/erbjudanden`,\n};\n","import { appConfig } from '../../../appConfig';\nimport { SearchFromPageType } from '../../base/models/SearchFromPageType';\nimport type { GlobalSearchResults } from '../models/models';\nimport { SearchResultType } from '../models/SearchResultType';\nimport { globalSearchRoutes } from './globalSearchRoutes';\n\nexport const mapSearchFromPageToExpectedResultType = (\n searchFromPage?: SearchFromPageType,\n): SearchResultType | undefined => {\n switch (searchFromPage) {\n case SearchFromPageType.Ecommerce:\n return SearchResultType.Products;\n case SearchFromPageType.Recipes:\n return SearchResultType.Recipes;\n case SearchFromPageType.Member:\n return SearchResultType.Pointshop;\n case SearchFromPageType.Stores:\n return SearchResultType.Stores;\n case SearchFromPageType.StartPage:\n case SearchFromPageType.Finance:\n case SearchFromPageType.Other:\n default:\n return undefined;\n }\n};\n\nconst formattedSearchResultTypeMap = {\n [SearchResultType.Recipes]: 'Recept',\n [SearchResultType.Products]: 'Varor',\n [SearchResultType.Stores]: 'Butiker',\n [SearchResultType.Articles]: 'Artiklar',\n [SearchResultType.Pointshop]: 'Erbjudanden',\n} as const;\n\nexport const getSearchResultCountName = (result: SearchResultCount) => {\n return `${result.itemCount} ${getFormattedSearchResultType(result.resultType).toLowerCase()}`;\n};\n\nexport const getSearchResultTypeAriaLabel = (totalHits: number, resultType: SearchResultType) => {\n return `visa alla ${totalHits} träffar för ${getFormattedSearchResultType(\n resultType,\n ).toLowerCase()}`;\n};\n\nexport const getFormattedSearchResultType = (type?: SearchResultType) => {\n return (type && formattedSearchResultTypeMap[type]) || '';\n};\n\nexport interface SearchResultCount {\n resultType: SearchResultType;\n itemCount: number;\n}\n\n// Used in the context of Global Search Result page\nexport const getFullSearchResultLink = (\n resultType: SearchResultType | undefined,\n searchTerm: string,\n originalSearchTerm?: string,\n) => {\n const originalQuery = `${\n originalSearchTerm && originalSearchTerm !== searchTerm ? `&oq=${originalSearchTerm}` : ''\n }`;\n\n switch (resultType) {\n case SearchResultType.Products:\n return {\n type: 'absolute' as const,\n path: `${appConfig.coopSettings.ecommerce.search.url}?q=${searchTerm}${originalQuery}`,\n };\n\n case SearchResultType.Recipes:\n return {\n type: 'absolute' as const,\n path: `${appConfig.coopSettings.recipe.url}?query=${searchTerm}${originalQuery}`,\n };\n\n case SearchResultType.Stores:\n return {\n type: 'relative' as const,\n path: `${globalSearchRoutes.stores}?query=${searchTerm}${originalQuery}`,\n };\n\n case SearchResultType.Articles:\n return {\n type: 'relative' as const,\n path: `${globalSearchRoutes.articles}?query=${searchTerm}${originalQuery}`,\n };\n\n case SearchResultType.Pointshop:\n return {\n type: 'relative' as const,\n path: `${globalSearchRoutes.pointOffers}?query=${searchTerm}${originalQuery}`,\n };\n default:\n return {\n type: 'relative' as const,\n path: `?query=${searchTerm}${originalQuery}`,\n };\n }\n};\n\n// Used in any context, will always generate absolute links\nexport const getFullSearchResultAbsoluteLink = (\n resultType: SearchResultType | undefined,\n searchTerm: string,\n originalSearchTerm?: string,\n) => {\n const originalQuery = `${\n originalSearchTerm && originalSearchTerm !== searchTerm ? `&oq=${originalSearchTerm}` : ''\n }`;\n\n switch (resultType) {\n case SearchResultType.Products:\n return {\n type: 'absolute' as const,\n path: `${appConfig.coopSettings.ecommerce.search.url}?q=${searchTerm}${originalQuery}`,\n };\n\n case SearchResultType.Recipes:\n return {\n type: 'absolute' as const,\n path: `${appConfig.coopSettings.recipe.url}?query=${searchTerm}${originalQuery}`,\n };\n case SearchResultType.Stores:\n return {\n type: 'absolute' as const,\n path: `${globalSearchRoutes.stores}?query=${searchTerm}${originalQuery}`,\n };\n case SearchResultType.Articles:\n return {\n type: 'absolute' as const,\n path: `${globalSearchRoutes.articles}?query=${searchTerm}${originalQuery}`,\n };\n case SearchResultType.Pointshop:\n return {\n type: 'absolute' as const,\n path: `${globalSearchRoutes.pointOffers}?query=${searchTerm}${originalQuery}`,\n };\n default:\n return {\n type: 'absolute' as const,\n path: `${globalSearchRoutes.root}?query=${searchTerm}${originalQuery}`,\n };\n }\n};\n\nexport const getNonEmptyResultTypes = (result?: GlobalSearchResults) => {\n if (!result) {\n return null;\n }\n const existingResultCounts: SearchResultCount[] = [\n {\n itemCount: result?.productResults?.totalResults,\n resultType: SearchResultType.Products,\n },\n {\n itemCount: result?.recipeResults?.totalResults,\n resultType: SearchResultType.Recipes,\n },\n {\n itemCount: result?.storeResults?.totalResults,\n resultType: SearchResultType.Stores,\n },\n {\n itemCount: result?.articleResults?.totalResults,\n resultType: SearchResultType.Articles,\n },\n {\n itemCount: result?.pointshopResults?.totalResults,\n resultType: SearchResultType.Pointshop,\n },\n ]\n .filter((item) => item.itemCount && item.itemCount > 0)\n .map<SearchResultCount>((item) => ({\n itemCount: item.itemCount!,\n resultType: item.resultType,\n }));\n\n return existingResultCounts;\n};\n\nexport const getFullSearchResultUrlWithOrder = (\n searchTerm: string,\n originalSearchTerm: string | undefined,\n searchResultType?: SearchResultType,\n) => {\n const originalQuery = `${\n originalSearchTerm && originalSearchTerm !== searchTerm ? `&oq=${originalSearchTerm}` : ''\n }`;\n\n switch (searchResultType) {\n case undefined:\n return {\n type: 'absolute' as const,\n path: `${appConfig.coopSettings.globalSearch.url}?query=${searchTerm}${originalQuery}`,\n };\n default:\n return {\n type: 'absolute' as const,\n path: `${\n appConfig.coopSettings.globalSearch.url\n }?query=${searchTerm}${originalQuery}#${getFormattedSearchResultType(\n searchResultType,\n )}`,\n };\n }\n};\n","import * as React from 'react';\nimport { VisuallyHidden } from 'react-aria';\n\nimport type { Icon } from '../Icon';\nimport { AccessibleIcon } from '../Icon';\nimport Button from './Button';\nimport type { ButtonProps } from './Button.types';\n\ntype IconButtonProps = {\n icon: Parameters<typeof Icon>[0]['icon'];\n label: string;\n} & Omit<ButtonProps, 'asIcon' | 'asChild'>;\n\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ icon, label, children, ...buttonProps }, ref) => {\n return (\n <Button\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...buttonProps}\n asIcon\n ref={ref}\n loadingText={<VisuallyHidden>{buttonProps.loadingText || 'Laddar'}</VisuallyHidden>}\n >\n <AccessibleIcon label={label} icon={icon} />\n {children}\n </Button>\n );\n },\n);\n\nexport default IconButton;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport type { PropsWithChildren } from 'react';\nimport * as React from 'react';\nimport { useEffect, useId, useImperativeHandle, useRef } from 'react';\nimport { VisuallyHidden } from 'react-aria';\n\nimport styles from './Search.module.scss';\nimport type { SearchSize } from './Search.types';\nimport SearchActions from './SearchActions';\nimport SearchContent from './SearchContent';\nimport SearchInputSlot from './SearchInputSlot';\nimport SearchRoot from './SearchRoot';\n\nexport interface SearchProps {\n className?: string;\n inputText?: string;\n defaultValue?: string;\n inputPlaceholder: string;\n noBorderRadius?: boolean;\n focusOnMount?: boolean;\n size: SearchSize;\n hide?: boolean;\n setInputText?: (newText: string) => void;\n onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onReset?: () => void;\n onInputClick?: () => void;\n onInputFocus?: () => void;\n onInputBlur?: () => void;\n onEnterPress?: () => void;\n onEscapePress?: () => void;\n 'aria-haspopup'?: React.ComponentPropsWithoutRef<'input'>['aria-haspopup'];\n 'aria-label'?: React.ComponentPropsWithoutRef<'input'>['aria-label'];\n description?: string;\n submitLabel?: string;\n}\n\nconst Search = React.forwardRef<HTMLInputElement, PropsWithChildren<SearchProps>>(\n (props, inputRef) => {\n const localRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(inputRef, () => localRef.current as HTMLInputElement);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.currentTarget;\n props.setInputText?.(value);\n props.onInputChange?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && props.onEnterPress) {\n localRef.current?.blur();\n props.onEnterPress();\n }\n\n if (e.key === 'Escape' && props.onEscapePress) {\n localRef.current?.blur();\n props.onEscapePress();\n }\n };\n\n useEffect(() => {\n if (props.focusOnMount) {\n localRef.current?.focus();\n }\n }, [props.focusOnMount, localRef]);\n\n const descriptionId = useId();\n\n return (\n <SearchRoot\n size={props.size}\n hide={props.hide}\n className={classNames(props.inputText && styles['has-value'], props.className)}\n >\n <SearchContent>\n {/* https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-describedby - elements referenced by describedby can be hidden */}\n {props.description && (\n <VisuallyHidden aria-hidden>\n <span id={descriptionId}>{props.description}</span>\n </VisuallyHidden>\n )}\n <SearchInputSlot\n data-testid=\"search-input\"\n ref={localRef}\n type=\"search\"\n enterKeyHint=\"search\"\n defaultValue={props.defaultValue}\n placeholder={props.inputPlaceholder}\n onChange={handleInputChange}\n value={props.inputText}\n onFocus={props.onInputFocus}\n onBlur={props.onInputBlur}\n onKeyDown={handleKeyDown}\n onClick={props.onInputClick}\n aria-haspopup={props['aria-haspopup']}\n aria-label={props.inputPlaceholder}\n aria-describedby={props.description && descriptionId}\n />\n <SearchActions\n submitLabel={props.submitLabel}\n inputValue={props.inputText}\n onEnterPress={props.onEnterPress}\n clearButtonProps={{ onClick: props.onReset }}\n />\n </SearchContent>\n\n {props.children}\n </SearchRoot>\n );\n },\n);\n\nexport default Search;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport { CloseIcon, SearchIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type * as React from 'react';\n\nimport { ChipIconButton } from '../Chip';\nimport { Icon } from '../Icon';\nimport styles from './Search.module.scss';\n\nconst SearchActions = (props: {\n inputValue?: string;\n submitLabel?: string;\n onEnterPress?: () => void;\n clearButtonRef?: React.RefObject<HTMLButtonElement>;\n clearButtonProps?: React.ComponentPropsWithoutRef<'button'>;\n}) => {\n return (\n <div className={styles['Search-actions']}>\n {props.inputValue && props.clearButtonProps && props.clearButtonProps.onClick && (\n <ChipIconButton\n ref={props.clearButtonRef}\n icon={CloseIcon}\n label=\"Rensa\"\n theme=\"whiteGreen\"\n size={24}\n {...props.clearButtonProps}\n onClick={props.clearButtonProps.onClick}\n />\n )}\n {props.inputValue && props.onEnterPress ? (\n <ChipIconButton\n size={32}\n theme=\"greenCta\"\n icon={SearchIcon}\n onClick={props.onEnterPress}\n label={props.submitLabel || 'Sök'}\n />\n ) : (\n <div aria-hidden className={classNames(styles['Search-icon'])}>\n <Icon icon={SearchIcon} />\n </div>\n )}\n </div>\n );\n};\n\nexport default SearchActions;\n","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport styles from './Search.module.scss';\n\nconst SearchContent = React.forwardRef<HTMLDivElement, React.PropsWithChildren>((props, ref) => {\n return (\n <div ref={ref} className={classNames(styles['Search-content'], 'u-noPrint')}>\n {props.children}\n </div>\n );\n});\n\nexport default SearchContent;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport styles from './Search.module.scss';\n\nconst SearchInputSlot = React.forwardRef<HTMLInputElement, React.ComponentProps<'input'>>(\n (props, ref) => {\n return (\n <input\n ref={ref}\n size={1} // Enables it to shrink below default 20 which is needed for small screens\n {...props}\n className={classNames(styles['Search-input'], props.className)}\n />\n );\n },\n);\n\nexport default SearchInputSlot;\n","import styles from './Search.module.scss';\nimport type { SearchSize } from './Search.types';\n\nexport const getClassForSize = (theme: SearchSize) => {\n switch (theme) {\n case 'small':\n return styles['Search--small'];\n case 'medium':\n return styles['Search--medium'];\n case 'large':\n return styles['Search--large'];\n default:\n return '';\n }\n};\n","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport styles from './Search.module.scss';\nimport type { SearchBarOptions } from './Search.types';\nimport { getClassForSize } from './Search.utils';\n\ninterface SearchProps extends SearchBarOptions {\n className?: string;\n}\n\nconst SearchRoot = React.forwardRef<HTMLDivElement, React.PropsWithChildren<SearchProps>>(\n (props, ref) => {\n return (\n <div\n ref={ref}\n className={classNames(\n styles.Search,\n props.hide && styles['Search--hidden'],\n getClassForSize(props.size),\n props.className,\n )}\n data-test=\"search\"\n >\n {props.children}\n </div>\n );\n },\n);\n\nexport default SearchRoot;\n","import type * as React from 'react';\nimport { type AriaPopoverProps, Overlay, usePopover } from 'react-aria';\nimport type { OverlayTriggerState } from 'react-stately';\n\nimport styles from './SearchAutocomplete.module.scss';\n\ninterface PopoverProps extends AriaPopoverProps {\n style?: React.CSSProperties;\n children: React.ReactNode;\n state: OverlayTriggerState;\n}\n\nconst Popover = ({ children, state, ...props }: PopoverProps) => {\n const { popoverProps } = usePopover(props, state);\n\n const style = { ...popoverProps.style, ...props.style };\n\n return (\n <Overlay>\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...popoverProps}\n className={styles.Popover}\n ref={props.popoverRef as React.RefObject<HTMLDivElement>}\n style={style}\n >\n {children}\n </div>\n </Overlay>\n );\n};\n\nexport default Popover;\n","// extracted by mini-css-extract-plugin\nexport default {\"Popover\":\"bXxScuMl\",\"ItemLabel\":\"_KG9rfUt\",\"HintHighlight\":\"j6ln53QE\"};","/* eslint-disable react/button-has-type */\n/* eslint-disable react/jsx-props-no-spreading */\nimport { useResizeObserver } from '@coop/hooks';\n/* eslint-disable react/jsx-props-no-spreading */\nimport type { ComboBoxProps } from '@react-types/combobox';\nimport { useCallback, useState } from 'react';\nimport * as React from 'react';\nimport { useButton } from 'react-aria';\nimport { ComboBoxStateContext } from 'react-aria-components';\nimport { type ComboBoxStateOptions, Item, useComboBoxState } from 'react-stately';\n\nimport {\n type ResultListBoxStateShowProps,\n DynamicListBox,\n ListBoxItemIcon,\n} from '../ListBox/ListBox';\nimport {\n type SearchBarOptions,\n SearchActions,\n SearchContent,\n SearchInputSlot,\n SearchRoot,\n} from '../Search';\nimport Popover from './Popover';\nimport { useSearchAutocomplete } from './SearchAutocomplete.hooks';\nimport styles from './SearchAutocomplete.module.scss';\nimport { hightlightAutocompleteSubstring } from './SearchAutocomplete.utils';\n\ninterface SearchAutocompleteProps<T extends object>\n extends Omit<ComboBoxProps<T>, 'label'>,\n SearchBarOptions,\n ResultListBoxStateShowProps {\n defaultFilter?: ComboBoxStateOptions<T>['defaultFilter'];\n submitLabel?: string;\n onSubmit?: (value: string, item: T | null) => void;\n overlayMaxHeight?: number;\n}\n\nconst SearchAutocomplete = <T extends object>(props: SearchAutocompleteProps<T>) => {\n const outerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listBoxRef = React.useRef(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const clearButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const state = useComboBoxState({\n ...props,\n allowsCustomValue: true,\n allowsEmptyCollection: true, // search must always have a state of no results if no items are found\n });\n\n const {\n clearButtonProps: ariaClearButtonProps,\n inputProps,\n listBoxProps,\n descriptionProps,\n } = useSearchAutocomplete(\n {\n ...props,\n inputRef,\n listBoxRef,\n popoverRef,\n },\n state,\n );\n\n const { buttonProps } = useButton(ariaClearButtonProps, clearButtonRef);\n\n const [menuWidth, setMenuWidth] = useState<string | null>(null);\n const onResize = useCallback(() => {\n const outerRect = outerRef.current?.getBoundingClientRect();\n if (outerRect) {\n setMenuWidth(`${outerRect.right - outerRect.left}px`);\n }\n }, [outerRef, setMenuWidth]);\n\n useResizeObserver({ ref: outerRef, boxOptions: 'border-box', onResize });\n\n const description =\n state.collection.size !== 0\n ? 'Förslag visas nedan'\n : 'Sökresultaten kommer att visas medan du skriver';\n\n return (\n <ComboBoxStateContext.Provider value={state}>\n <SearchRoot ref={outerRef} size={props.size} hide={props.hide}>\n <SearchContent ref={triggerRef}>\n <SearchInputSlot\n ref={inputRef}\n {...inputProps}\n aria-label={props.placeholder}\n />\n <SearchActions\n inputValue={state.inputValue}\n onEnterPress={\n props.onSubmit\n ? () => props.onSubmit?.(state.inputValue, null)\n : undefined\n }\n submitLabel={props.submitLabel}\n clearButtonRef={clearButtonRef}\n clearButtonProps={buttonProps}\n />\n <span {...descriptionProps} style={{ display: 'none' }}>\n {description}\n </span>\n </SearchContent>\n {state.isOpen && (\n <Popover\n state={state}\n popoverRef={popoverRef}\n triggerRef={triggerRef}\n offset={12}\n style={\n {\n '--coop-listbox-trigger-width': menuWidth,\n } as React.CSSProperties\n }\n placement=\"bottom start\"\n maxHeight={props.overlayMaxHeight}\n isNonModal\n >\n <DynamicListBox\n {...listBoxProps}\n listBoxRef={listBoxRef}\n state={state}\n aria-label=\"förslag\"\n /* Show empty state only when full search (a.k.a. \"go to all results\") action is NOT available\n * Autocomplete is not a full search thats why we shouldnt say that results are empty (we dont know that yet), its only the suggestions that are empty\n */\n showEmptyStateWhen={props.showEmptyStateWhen && !props.onSubmit}\n renderEmptyState={\n props.renderEmptyState || (() => 'Vi hittar ingen träff')\n }\n showErrorStateWhen={props.showErrorStateWhen}\n renderErrorState={props.renderErrorState || (() => 'Fel vid sökning')}\n itemClassName={styles.ItemLabel}\n />\n </Popover>\n )}\n </SearchRoot>\n </ComboBoxStateContext.Provider>\n );\n};\n\nexport default SearchAutocomplete;\n\nexport const SearchAutocompleteItem = Item;\n\nexport const SearchAutocompleteItemIcon = ListBoxItemIcon;\n\nexport const SearchAutocompleteItemLabel = ({ children }: { children: string }) => {\n const state = React.useContext(ComboBoxStateContext);\n if (!state) {\n return children;\n }\n\n const { pre, post, highlighted } = hightlightAutocompleteSubstring(children, state.inputValue);\n\n return (\n <div>\n {pre && <span>{pre}</span>}\n {highlighted && <span className={styles.HintHighlight}>{highlighted}</span>}\n {post && <span>{post}</span>}\n </div>\n );\n};\n","import type { RefObject } from 'react';\nimport { mergeProps, useComboBox, useSearchField } from 'react-aria';\nimport type { ComboBoxState } from 'react-stately';\n\ninterface SearchAutocompleteOptions<T> {\n placeholder?: string;\n inputRef: RefObject<HTMLInputElement | null>;\n popoverRef: RefObject<HTMLDivElement | null>;\n listBoxRef: RefObject<HTMLElement | null>;\n onSubmit?: (value: string, item: T | null) => void;\n}\n\nexport const useSearchAutocomplete = <T>(\n props: SearchAutocompleteOptions<T>,\n state: ComboBoxState<T>,\n) => {\n const { popoverRef, inputRef, listBoxRef, onSubmit, ...otherProps } = props;\n\n const { inputProps, clearButtonProps, labelProps, descriptionProps } = useSearchField(\n {\n ...otherProps,\n value: state.inputValue,\n onChange: state.setInputValue,\n autoComplete: 'off',\n label: props.placeholder,\n onClear: () => {\n state.setInputValue('');\n state.close();\n },\n onSubmit: (value) => {\n // Prevent submission from search field if menu item was selected\n if (state.selectionManager.focusedKey === null) {\n onSubmit?.(value, null);\n }\n },\n onFocus: () => {\n // Open when in put alreday has some value. Input value is retained i.e. after outside click and user might want to see the results again\n if (state.inputValue) {\n state.open();\n }\n },\n },\n {\n value: state.inputValue,\n setValue: state.setInputValue,\n },\n inputRef,\n );\n\n const { listBoxProps, inputProps: comboBoxInputProps } = useComboBox(\n {\n ...otherProps,\n popoverRef,\n listBoxRef,\n inputRef,\n label: props.placeholder,\n // those will be merged with the inputProps from useSearchField\n onFocus: undefined,\n onFocusChange: undefined,\n onBlur: undefined,\n onKeyDown: undefined,\n onKeyUp: undefined,\n validate: undefined,\n },\n state,\n );\n\n return {\n labelProps,\n descriptionProps,\n inputProps: mergeProps(comboBoxInputProps, inputProps),\n listBoxProps,\n clearButtonProps,\n };\n};\n","import { type RefObject, useEffect } from 'react';\n\nexport const useResizeObserver = <T extends HTMLElement>(options: {\n ref: RefObject<T>;\n boxOptions?: ResizeObserverBoxOptions;\n onResize: () => void;\n}) => {\n const { ref, boxOptions, onResize } = options;\n\n useEffect(() => {\n const element = ref?.current;\n if (!element) {\n return;\n }\n\n window.addEventListener('resize', onResize, false);\n\n const resizeObserverInstance = new window.ResizeObserver((entries) => {\n if (!entries.length) {\n return;\n }\n\n onResize();\n });\n resizeObserverInstance.observe(element, { box: boxOptions });\n\n return () => {\n if (element) {\n resizeObserverInstance.unobserve(element);\n }\n };\n }, [onResize, ref, boxOptions]);\n};\n","export const hightlightAutocompleteSubstring = (input: string, hint: string) => {\n if (!input || !hint) {\n return {\n pre: input,\n highlighted: null,\n post: null,\n };\n }\n\n const inputLowercase = input?.toLowerCase();\n const hintLowercase = hint?.toLowerCase();\n\n let pre = '';\n let highlighted = '';\n let post = '';\n\n // Check if the query matches any part of the text\n if (hintLowercase && inputLowercase.includes(hintLowercase)) {\n const startIndex = inputLowercase.indexOf(hintLowercase);\n const endIndex = startIndex + hintLowercase.length;\n\n pre = input.slice(0, startIndex);\n highlighted = input.slice(startIndex, endIndex);\n post = input.slice(endIndex);\n } else {\n pre = input;\n }\n\n return {\n pre,\n highlighted,\n post,\n };\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"v5ga9oxE\",\"Show\":\"Ctwqr1Hn\",\"fadeInFromBottom\":\"bow7Nw2N\",\"Hide\":\"ukTHsYFM\",\"fadeOutToTop\":\"D_Na4SyN\",\"NoAnimation\":\"h5BArB58\",\"Snackbar\":\"JN_hwGvR\",\"SnackbarWithAction\":\"MUzJ5p6O\",\"Size48\":\"O_CHwijs\"};","import classNames from 'classnames';\nimport type * as React from 'react';\n\nimport styles from './Snackbar.module.scss';\n\ninterface SnackbarProps {\n children?: React.ReactNode;\n actionSlot?: React.ReactNode;\n size: SnackbarSizes;\n style?: React.CSSProperties;\n noAnimation?: boolean;\n}\n\ntype SnackbarSizes = 48;\n\nconst Snackbar = (props: SnackbarProps) => {\n const classes = classNames(\n styles.Snackbar,\n props.size === 48 && styles.Size48,\n !!props.actionSlot && styles.SnackbarWithAction,\n styles.Show,\n props.noAnimation && styles.NoAnimation,\n );\n\n return (\n <div className={styles.Container}>\n <div className={classes} style={props.style}>\n {props.children}\n {props.actionSlot && <div className={styles.Action}>{props.actionSlot}</div>}\n </div>\n </div>\n );\n};\n\nexport default Snackbar;\n","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"mzNAH6Pz\",\"TopContainer\":\"jU8P02pG\",\"BottomContainer\":\"dxPSebVp\",\"InputContainer\":\"KhcWGy_U\",\"Input\":\"FB9Zekja\",\"TextArea\":\"DJjSRY6R\",\"PostfixSlot\":\"YyrA4WeF\",\"PrefixSlot\":\"_XIGwGkW\",\"HelperText\":\"z4f00Lmh\",\"Label\":\"FvaO26Ls\",\"ValidationText\":\"zssnVrz1\"};","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport React from 'react';\nimport type { TextAreaProps, TextFieldProps } from 'react-aria-components';\nimport {\n FieldError as AriaFieldError,\n Input as AriaInput,\n Label as AriaLabel,\n Text as AriaText,\n TextArea as AriaTextArea,\n TextField as AriaTextField,\n} from 'react-aria-components';\n\nimport styles from './TextField.module.scss';\n\nconst TextFieldRoot = (props: TextFieldProps) => (\n <AriaTextField\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n className={classNames(props.className, styles.Container)}\n >\n {props.children}\n </AriaTextField>\n);\n\nconst TextFieldTopContainer = (props: { children: React.ReactNode }) => (\n <div className={styles.TopContainer}>{props.children}</div>\n);\n\nconst TextFieldInputContainer = (props: { children: React.ReactNode }) => (\n <div className={styles.InputContainer}>{props.children}</div>\n);\n\nconst TextFieldBottomContainer = (props: { children: React.ReactNode }) => (\n <div className={styles.BottomContainer}>{props.children}</div>\n);\n\nconst TextFieldLabel = (props: {\n label?: string;\n isRequired?: boolean;\n necessityIndicator?: 'label' | 'none';\n}) => {\n let indicator = props.necessityIndicator;\n if (!props.label) {\n return null;\n }\n\n // This case is for backwards compatibility. If the field is required, but the indicator is not set, we default to 'label'.\n // This essentially replaces old * indicator with (obligatoriskt) text if the indicator is not yet set.\n // This is to avoid breaking changes in the UI after new TextInput is deployed.\n if (props.isRequired && indicator === undefined) {\n indicator = 'label';\n }\n\n if (!indicator || indicator === 'none') {\n return <AriaLabel className={styles.Label}>{props.label}</AriaLabel>;\n }\n\n return (\n <AriaLabel className={classNames(styles.Label)}>\n {props.label}\n {props.isRequired ? (\n // Required is dealt with aria-required in the input. tehre is no ARIA for optional fields, so they must be part of the label, available for screenreaders.\n <span aria-hidden> (obligatoriskt)</span>\n ) : (\n <span> (frivilligt)</span>\n )}\n </AriaLabel>\n );\n};\n\nconst TextFieldHelperText = (props: { helperText?: string; disabledReason?: React.ReactNode }) =>\n (props.helperText || props.disabledReason) && (\n <AriaText slot=\"description\" className={styles.HelperText}>\n {[props.helperText, props.disabledReason].filter(Boolean).join('. ')}\n </AriaText>\n );\n\nconst TextFieldValidationError = (props: { validationText?: string }) =>\n props.validationText && (\n <AriaFieldError className={styles.ValidationText}>{props.validationText}</AriaFieldError>\n );\n\nconst TextFieldPostfix = (props: { children: React.ReactNode }) =>\n props.children && <div className={styles.PostfixSlot}>{props.children}</div>;\n\nconst TextFieldPrefix = (props: { children: React.ReactNode }) =>\n props.children && <div className={styles.PrefixSlot}>{props.children}</div>;\n\nconst TextFieldInput = React.forwardRef<HTMLInputElement, {}>((_props, ref) => (\n <AriaInput\n ref={ref}\n className={({ isInvalid }) => classNames(styles.Input, isInvalid && styles['is-invalid'])}\n />\n));\n\nconst TextFieldTextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>((props, ref) => (\n <AriaTextArea\n ref={ref}\n {...props}\n className={({ isInvalid }) =>\n classNames(props.className, styles.TextArea, isInvalid && styles['is-invalid'])\n }\n />\n));\n\nconst TextField = {\n Root: TextFieldRoot,\n TopContainer: TextFieldTopContainer,\n InputContainer: TextFieldInputContainer,\n BottomContainer: TextFieldBottomContainer,\n Label: TextFieldLabel,\n HelperText: TextFieldHelperText,\n ValidationError: TextFieldValidationError,\n Prefix: TextFieldPrefix,\n Postfix: TextFieldPostfix,\n Input: TextFieldInput,\n TextArea: TextFieldTextArea,\n};\n\nexport default TextField;\n","/* eslint-disable jsx-a11y/label-has-associated-control */\n/* eslint-disable react/jsx-props-no-spreading */\nimport { splitCustomObjectFromIntersection } from '@coop/utils';\nimport * as React from 'react';\nimport type { TextFieldProps } from 'react-aria-components';\n\nimport { TextField } from '../TextField';\n\ninterface TextInputCustomProps {\n label?: string;\n helperText?: string;\n validationText?: string;\n disabledReason?: React.ReactNode;\n postfixSlot?: React.ReactNode;\n /**\n * In certain cases it is needed to hide the indicator that a field is required or optional.\n * It might depend on the context of the form and how many required fields there is versus optional ones.\n * If most fields in a form are required - show indicator for optional ones.\n * If most fields in a form are optional - show indicator for required ones.\n * By default the label indicator is shown.\n * @default \"label\"\n */\n necessityIndicator?: 'label' | 'none';\n}\n\n// Override React Aria's TextFieldProps to add comments for some props\ninterface TextFieldOverridenProps {\n /**\n * @deprecated Use helperText instead with a correct UX copy. Placeholder will be removed from TextInput for A11Y reasons.\n * */\n placeholder?: string;\n\n /** Makes a field required for A11Y purposes. It does not add a visual cue when necessityIndicator is set to 'none'. */\n isRequired?: boolean;\n\n /** Use disabledReason instead. It will make the field read only (focusable) and provide the text why its disabled in the help text label. */\n isDisabled?: never;\n}\n\nconst TextInput = React.forwardRef<\n HTMLInputElement,\n TextInputCustomProps & TextFieldProps & TextFieldOverridenProps\n>((props, ref) => {\n const { custom: customProps, rest: textInputProps } = splitCustomObjectFromIntersection<\n TextInputCustomProps,\n TextFieldProps\n >(props, {\n label: props.label,\n helperText: props.helperText,\n validationText: props.validationText,\n disabledReason: props.disabledReason,\n postfixSlot: props.postfixSlot,\n necessityIndicator: props.necessityIndicator,\n });\n\n return (\n <TextField.Root\n {...textInputProps}\n isReadOnly={!!customProps.disabledReason}\n // We mostly use the inputs with React Hook Form, so the validation behavior must be set to aria\n validationBehavior={textInputProps.validationBehavior ?? 'aria'}\n >\n <TextField.TopContainer>\n <TextField.Label\n label={customProps.label}\n isRequired={textInputProps.isRequired}\n necessityIndicator={props.necessityIndicator}\n />\n <TextField.HelperText\n helperText={customProps.helperText}\n disabledReason={customProps.disabledReason}\n />\n </TextField.TopContainer>\n\n <TextField.InputContainer>\n <TextField.Input ref={ref} />\n {props.postfixSlot && <TextField.Postfix>{props.postfixSlot}</TextField.Postfix>}\n </TextField.InputContainer>\n\n {customProps.validationText && (\n <TextField.BottomContainer>\n <TextField.ValidationError validationText={customProps.validationText} />\n </TextField.BottomContainer>\n )}\n </TextField.Root>\n );\n});\n\nexport default TextInput;\n","import { pick } from 'lodash-es';\n\ntype AllOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? K : never }[keyof T];\ntype AllNonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\n\ntype OptionalToMaybeUndefined<T> = { [K in AllOptionalKeys<T>]: T[K] | undefined } & {\n [K in AllNonOptionalKeys<T>]: T[K];\n};\n\nexport const splitCustomObjectFromIntersection = <TCustom extends {}, TResult extends {}>(\n whole: TCustom & TResult,\n custom: OptionalToMaybeUndefined<TCustom>,\n) => {\n const keysNotFromCustomProps = Object.keys(whole).filter(\n (key) => !Object.keys(custom).includes(key),\n );\n\n const rest = pick(whole, keysNotFromCustomProps) as TResult;\n return { custom, rest };\n};\n"],"names":["_g","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_ref","title","titleId","props","width","height","viewBox","xmlns","id","d","_path","fillRule","clipRule","CncStepSwitcher","lazy","isOpen","close","afterClose","useCncFlyInState","additionalClasses","Suspense","fallback","OverlayLoader","isLoading","pathnamesAlreadySent","isDisbled","setIsDisbled","open","useModal","ConsentBox","isLoggedIn","hasKimCustomerId","isMobile","enableConsentSms","appConfig","coopSettings","featureFlags","consentPhonePageUrl","hasRedirectQuery","getParameterByName","hasMemberConsentQuery","shouldShowConsent","hasQuery","data","kimCustomerData","useKimCustomerDataQuery","consentSubscriptions","isLoadingSubscriptions","useConsentQuery","kimPhoneNumberVerified","subscribeNowMutation","useSubscribeConsent","isSuccess","window","location","href","settingsTexts","useMyCoopSettingsPageQuery","useEffect","allNewsletters","some","item","includes","accepted","persistance","consentShownSession","add","onClose","sendEmailSubscriptionInteraction","OuterContainer","OuterContainerIsMobile","className","CloseButtoDiv","ChipIconButton","theme","onClick","size","icon","label","CloseButton","Container","ModalHeader","Headline","InnerContent","Image","src","alt","CheckboxDiv","Checkbox","indicatorVerticalPosition","consentCheckboxText","onCheckedChange","checked","ConditionText","personalDataLink","url","target","rel","ButtonContainer","Button","allConsentsToTurnOn","push","mutate","fullWidth","disabled","skip","aboutCoopLink","aboutCoopAssociationsLink","ReadMore","emailSubscriptions","useEmailSubscriptionQuery","useMutation","mutationFn","service","consentAdobeSubscriptionFlow","subscribe","Array","isArray","onSuccess","confirm","services","name","enableConsentKimApi","enableConsentPage","cb","w","u","i","Upscope","Functional","document","c","q","args","s","createElement","type","async","x","getElementsByTagName","parentNode","insertBefore","l","sessionStorage","setItem","code","show","setShow","useState","upscopeCode","setUpscopeCode","upscopeUtils","ConfirmInfo","heading","message","__cmp","rightSlot","Icon","column","headerLink","header","links","filter","_link","index","map","link","contentId","cellsInRow","useBreakpoints","AREA_FOOTER_GRID","ItemGrid","gridClasses","items","columns","renderItem","itemUniqueKey","style","display","bottomLinks","bottomLink","consentPurposeAccepted","setConsentPurposeAccepted","scriptsContainerRef","useHtmlScriptParser","checkPurpose","Marketing","gdpr","logos","logo","imageHeight","imageAltText","imageSrc","loading","ref","isPrerenderCrawler","Accordion","A","Root","collapsible","Item","value","toString","Header","asChild","Trigger","Content","socialLinks","footer","isFromMedium","hideFooterMobile","state","ui","shared","validColumns","children","downloadAppQRImage","downloadAppQRImageAltText","downloadAppIOSUrl","downloadAppAndroidUrl","coopUserSettings","isShoppingForMunicipal","footerShowDownloadApp","StartImpersonationBar","setIsOpen","Snackbar","actionSlot","ChipButton","prev","marginBottom","Impersonate","handleSubmit","control","getValues","mode","reValidateMode","defaultValues","identifier","impersonateMutation","params","reload","onSubmit","formValues","isEmail","validateEmail","userToImpersonate","userIdentifierType","render","field","fieldState","TextInput","isRequired","necessityIndicator","onChange","onBlur","validationText","error","isInvalid","rules","required","email","isError","isPending","CountDown","time","setTime","Date","hours","minutes","seconds","intervalToDuration","start","end","interval","setInterval","clearInterval","zeroPad","num","places","String","padStart","ImpersonationExpiration","timeout","setTimeout","signout","Number","expires","now","clearTimeout","allowImpersonate","isImpersonating","identity","impersonating","expireTime","addSeconds","profile","userId","useCurrentStoreSync","when","pathname","appInsights","trackPageView","uri","console","logNotProd","usePageConsumptionTracking","structuredClone","Portal","domNodeSelector","SkipLink","HeaderAlerts","StickyBottom","ComponentPortals","cmpName","hasBeenRepositioned","useRef","containerRef","isEpiUser","userProfileSelectors","useLayoutEffect","current","observer","MutationObserver","element","querySelector","handleElementFound","disconnect","targetNode","clonedNode","cloneNode","position","top","appendChild","remove","observe","childList","subtree","useEpiEditButtonRepositioning","bottom","right","result","query","clear","setQuery","expectedSearchResultType","searchFromPage","trackEnterAction","queryUsed","Search","submitLabel","inputText","setInputText","hide","inputPlaceholder","description","onEnterPress","realQuery","performFullSearch","viewAllResultsUrl","path","onEscapePress","onReset","initialQuery","currentProductionUnit","storeSelectors","globalSearchFunction","useCallback","_abortSignal","_query","articles","products","stores","recipes","SearchFromPageType","Recipes","pointshop","searchFunction","minimumQueryLength","GlobalSearchOverlayContent","a11yResultAnnounceMessage","searchRef","trackAbortAction","trackCloseClickAction","trackListObjectClick","trackSeeAllResultsClickAction","trackLabelClick","trackAddToCartClickAction","trackRemoveFromCartClickAction","handleAllResultsClick","onResultScroll","blur","SearchOverlay","onOutsideClick","onClearClick","inputDescription","announcerSlot","DelayedA11yAnnouncer","a11yMessage","delayFirstMessage","onAllResultsClick","onAllResultsForTypeClick","onOtherResultTypeClick","onProductAddToCartClick","onProductRemoveFromCartClick","onItemClick","undefined","onLabelClick","onScroll","useMaxHeightCalculation","GlobalSearchInner","shouldShowGlobalSearchBar","searchDisabled","searchSlot","typedCurrentPage","currentPageString","currentPage","values","toLocaleLowerCase","toLowerCase","Other","isB2B","CartSummaryAccessibilityLogger","domProps","HeaderFluidBanner","featuredNavigation","headerTheme","hideB2BSwitch","stayAfterLoginLogoutRedirect","HeaderStickyBanner","EcommerceSearch","HeaderBanner","Logo","userType","isPunchout","punchout","isShoppingForAnother","ecommerce","page","startPage","Banner","wideSlots","bordered","zIndex","LeftSlot","LeftNav","RightNav","CenterSlot","RightSlot","ariaCurrentPage","isActive","indicatorPosition","replace","headerNavigationClick","currentTarget","isFromLarge","lg","isFromXsm","xsm","useUserType","disableMyFavoritesMenu","UserTypeModeSwitch","HeaderLeftNav","disableSiteNavigation","navigationItems","HeaderRightNav","SiteNavigation","sizePx","alignment","initialFocusOnDialog","renderTrigger","HeaderIconButton","ListIcon","isChecked","isEligibleForBonus","myBonusOverviewPageUrl","handleLinkClick","isMember","isCompany","pointsIsSuccess","pointsIsLoading","useHouseholdPointBalance","associationNames","associationIsLoading","useQuery","queryKey","queryFn","loyaltyFlow","getMembershipNames","enabled","memberMissingAssociations","brokenMemberHeadline","brokenMemberText","brokenMemberButtonContentReference","brokenMemberButtonText","notMemberHeadline","notMemberPoint1","notMemberPoint2","notMemberPoint3","notMemberPoint1Checked","notMemberPoint1CheckedText","notMemberPoint1UnCheckedText","notMemberPoint2Checked","notMemberPoint2CheckedText","notMemberPoint2UnCheckedText","notMemberPoint3Checked","notMemberPoint3CheckedText","notMemberPoint3UnCheckedText","notMemberButtonText","notMemberButtonContentReference","notConnectedButtonText","notConnectedButtonContentReference","formatMemberPointsAndAmount","points","BonusInfoConfirm","monetaryWorth","cssClasses","onClickOpen","navigation","infoSymbolInteraction","Loader","additionalClassNames","getParentName","menuItems","selectedPageId","parentMenu","find","menu","menuItemChildren","child","pages","menuIsSuccess","menuIsLoading","useCurrentEpiPage","menuPages","useEligibleForBonus","isMedmeraCustomer","profileMenu","click","innerText","myCoop","ProfileMenuList","activePageId","contentLink","handleListItemClick","profileMenuWalletInteractionTrigger","onItemOpen","level1Open","onItemClose","level1Close","logoutUrl","logout","MyProfileMenu","testSelector","badgeColor","dispatch","initCnc","postalCode","currentPostalCode","cartItemCount","cartItemsSelectors","selectCartQuantity","instance","get","indexOf","BadgePositioning","tracking","cnc","openFrom","cartIcon","AnimatedBadge","color","wide","animationProps","key","in","appear","enter","_path2","_path3","Dialog","onOpenChange","triggerSlot","Popover","popoverProps","ActionList","_isOpen","savedItems","asIcon","AccessibleIcon","onPress","savedCartListUrl","shoppingListPageUrl","savedRecipesPageUrl","mapStorePageUrl","b2bLinks","HeaderMyFavoritesDropdown","isB2BRoute","useMemo","HeaderProfileDotDropdown","filteredLinks","overviewPageUrl","b2b","myCoopOverviewPage","unshift","ProfileNav","isAuthenticated","companyUserOnPrivateSite","privateUserOnCompanySite","isUserCompany","onLoginClickTracking","login","CncTrigger","animated","transitionRef","CSSTransition","nodeRef","classNames","enterActive","enterDone","unmountOnExit","role","content","primaryButtonProps","secondaryButtonProps","isUserLoggedIn","hasSeenTooltipThisSession","read","abtest","loginReminderPopupShown","handle","loginUrl","createAccountUrl","create","loginReminder","preventDefault","goToLogin","goToCreateAccount","hideLoginReminder","EpiQuickNavigatorButton","useIsMobileHeader","useDocumentPropertyHeightSetter","AlertLevels","getNoticeTypeForAlertLevel","level","NoticeRibbon","alertLevel4","alertLevel3","alertLevel2","alertLevel1","isDismissed","alertsDismissed","handleCloseClick","dismiss","blockClose","expandableContent","details","alerts","alert","RawHtml","html","IconButton","useMyCoopProfileMenu","all","staleTime","inputRef","resetQuery","searchInputRef","useImperativeHandle","Modal","animation","afterOutsideClick","dangerouslyDisableFocusBackToTrigger","onExiting","VisuallyHidden","focus","focusOnMount","inputAriaLabel","useReactRouting","b2c","totalCartQuantity","cartIsInitialized","isCartInitialized","cartIsLoading","cart","cartLoading","text","totalPrice","cartCountLabel","totalPriceLabel","toEcommercePriceWithCurrency","Boolean","join","getCartSummaryAccessibilityText","ExceptionCode","HeaderCartErrorNotice","isAnyModalOpen","modalSelectors","CartErrorNotice","additionalShowCondition","fixed","firstError","cartError","clearGroupErrors","useGroupError","Cart","warning","friendlyMessage","dinnerOnlyStore","hideAfterMiliseconds","ariaLive","wasDelayed","delayedMessage","setDelayedMessage","FlyinNavigation","backNavigationAllowed","autoFocus","onBack","tabIndex","NoticeRibbonType","NoticeRibbonContent","containerStyles","align","onExpandClick","rotateClockwise","isExpanded","info","success","editOrder","extraCss","rounded","setIsExpanded","useSetTimeout","appearDone","foundComponents","from","querySelectorAll","domNode","func","options","asyncFunction","useConstant","debounced","debounceTime","asyncError","execute","asyncExecute","reset","status","executeOnMount","initialState","opt","initialResultState","initialLoadingState","initialErrorState","setLoading","keepPreviousResult","setError","AsyncDispatcherError","exception","clearError","callback","unsyncedCartItems","selectUnsyncedCartItems","setPickupStoreExecute","pickupPointId","store","fetchStoreById","selectPickupStore","addItems","removeUnsyncedCartItems","setPickupStore","setDeliveryStoreExecute","baseStoreId","selectHomeDeliveryStore","setDeliveryStore","selectedPickupPointId","selectedZipCode","productionUnitId","htmlPropertyNameToSet","handleResize","getBoundingClientRect","documentElement","setProperty","viewBonus","pageType","event","page_type","navigateBonusInteraction","clickText","clickUrl","click_text","click_url","walletInteraction","failSilently","walletLevel1","walletLevel2","wallet_level_1","wallet_level_2","viewHowDoesItWork","viewLastMonthBonus","chartInteraction","viewSavedBonus","bonusInteraction","mapSearchFeatureName","StartPage","Ecommerce","Stores","Member","Finance","viewSearchResultSuggestionClick","linkText","linkUrl","click_path","viewSearchResults","actualSearchTerm","originalSearchTerm","totalResultNumber","search_term","search_term_inferred","search_feature_name","search_results_number","search","actionTrigger","search_term_action_type_trigger","searchDropdownAction","searchDropdownItemAction","itemId","itemName","item_id","item_name","noSearchResults","searchType","searchTerm","featureName","mapSearchTypeToGa","feature_name","searchIconClick","useSearchOverlayGA4ActionTracking","originalQuery","originalQueryToTrack","queryUsedToTrack","previousOriginalQuery","trackSearchAction","trackSearchDropdownAction","trackSearchDropdownItemAction","useEcommerceSearchOverlayGA4ActionTracking","totalResults","trackAutocompleteItemClick","dontNavigateToFullResults","addToCartSilent","buildAllProductResultsUrl","searchQuery","URLSearchParams","set","EcommerceSearchOverlayResults","disableModalFocusBackToTrigger","setDisableModalFocusBackToTrigger","usedQuery","navigateToResultsPage","_usedQuery","_originalQuery","onFullResultsClick","dontNavigateAway","onHintClick","onItemAddToCartClick","onItemRemoveFromCartClick","SearchAutocompleteAbTestContext","createContext","isVariant","useSearchAutocompleteAbTestContext","useContext","SearchAutocompleteAbTestProvider","obj","Provider","autocompleteResult","useProductSearchStateContext","handleEnterPress","hints","ss","SearchAutocomplete","placeholder","inputValue","onInputChange","showEmptyStateWhen","showErrorStateWhen","onSelectionChange","hint","overlayMaxHeight","textValue","searchProductsFunction","abortSignal","storeId","isAutocompleteAbTest","searchPromise","Promise","resolve","spellingSuggestions","searchProductsLoop","resultsPerPage","facets","sortBy","autocomplete","isAbTestPreview","calculateAbTestValue","percentage","randomNumber","Math","random","stringToHash","chr","hash","charCodeAt","abs","randomizePersistant","useAbTest","trackOnce","isEnabled","trackInteraction","isResultVariant","isTestEnabled","epiAbTest","abTests","abTest","abTestStorage","abTestValue","modified","created","setupAbTest","variant","logDev","userInteraction","useImperativeAbTest","alreadyTrackedRef","trackAbTest","epiAbTests","abTestsToRemove","test","every","epiTest","cleanupAbTests","eliableForBonus","getEligibleForBonus","retry","householdMonetaryBalance","getPointBalance","pointsQueryKeys","expiringPoints","expiringPointsByNumberMonths","months","allOffers","pointBalanceByMonth","month","previousMonthsBonus","householdBalance","pointsMatrixStructureLevel","member20PointsSummary","member20PointsSummaryYearly","searchedPointOffer","byIds","ids","offerPropositionHistory","byRedeemed","includedRedeemed","byDate","to","pageSize","vklVoucherDetails","byTransactionGuid","guid","myCoopSettings","bonusInfoNotificationHeadline","bonusInfoNotificationText","selectedFields","myCoopSettingsPageContentId","depth","select","gcTime","getTopActivePage","getMenuPageById","Link","ariaExpanded","ariaControls","rest","MenuItemAccordion","currentPath","menuPageItem","isSideMenu","hasChildren","active","withChevron","myCoopProfileChildPage","previouslyExpandedRef","expandedId","setExpandedId","expandedPageId","onValueChange","_expandedId","expandedItem","myCoopProfilePage","SearchDropdownStateContext","contextNotInitialized","Error","SearchDropdownDispatchContext","setA11yResultAnnounceMessage","SearchStateProvider","resultDescription","initialInputText","delay","hasResponse","useAsyncAbortableDispatcher","useAbortableDebouncedSearch","useSearchDropdownState","useSearchStateContext","globalSearchAbortable","resultCountsPerPage","quickSearch","searchRequest","partnererbjudandeAndFilter","and","comparisonMode","pointshopValidityStartFilter","attributeName","toISOString","pointshopValidityEndFilter","pointshopAndFilter","not","orFilter","or","searchRequestPointshop","searchGlobalLoop","productSearchRequest","articleSearchRequest","storeSearchRequest","recipeSearchRequest","pointshopSearchRequest","useGlobalSearchResultState","pageCounts","_currentProductionUnit","_quickSearch","fetch","useGlobalSearchSingleTypeState","resultType","_selectedPage","selectedPage","filledSingleTypeRquest","filledSingleTypeFilterRquest","Products","Articles","Pointshop","recipeCategoriesSearchRequest","getGlobalSearchSingleTypeRequest","SearchResultType","GLOBAL_SEARCH_PAGE","globalSearch","globalSearchRoutes","root","pointOffers","mapSearchFromPageToExpectedResultType","formattedSearchResultTypeMap","getSearchResultCountName","itemCount","getFormattedSearchResultType","getSearchResultTypeAriaLabel","totalHits","getFullSearchResultLink","recipe","getFullSearchResultAbsoluteLink","getNonEmptyResultTypes","productResults","recipeResults","storeResults","articleResults","pointshopResults","getFullSearchResultUrlWithOrder","searchResultType","buttonProps","loadingText","localRef","descriptionId","useId","enterKeyHint","defaultValue","onFocus","onInputFocus","onInputBlur","onKeyDown","onInputClick","clearButtonProps","clearButtonRef","SearchContent","SearchInputSlot","getClassForSize","usePopover","Overlay","popoverRef","outerRef","triggerRef","listBoxRef","useComboBoxState","allowsCustomValue","allowsEmptyCollection","ariaClearButtonProps","inputProps","listBoxProps","descriptionProps","otherProps","labelProps","useSearchField","setInputValue","autoComplete","onClear","selectionManager","focusedKey","setValue","comboBoxInputProps","useComboBox","onFocusChange","onKeyUp","validate","mergeProps","useSearchAutocomplete","useButton","menuWidth","setMenuWidth","onResize","outerRect","left","boxOptions","addEventListener","resizeObserverInstance","ResizeObserver","entries","box","unobserve","useResizeObserver","collection","ComboBox","SearchRoot","SearchActions","offset","placement","maxHeight","isNonModal","renderEmptyState","renderErrorState","itemClassName","SearchAutocompleteItem","SearchAutocompleteItemIcon","ListBox","SearchAutocompleteItemLabel","pre","post","highlighted","input","inputLowercase","hintLowercase","startIndex","endIndex","slice","hightlightAutocompleteSubstring","classes","Size48","SnackbarWithAction","Show","noAnimation","NoAnimation","Action","TopContainer","InputContainer","BottomContainer","Label","indicator","HelperText","helperText","disabledReason","slot","ValidationError","ValidationText","Prefix","PrefixSlot","Postfix","PostfixSlot","Input","_props","TextArea","custom","customProps","textInputProps","postfixSlot","isReadOnly","validationBehavior","splitCustomObjectFromIntersection","whole","keysNotFromCustomProps","keys"],"sourceRoot":""}