{"version":3,"file":"Widgets.CoverageMap-2961f9781d29aa8dcaed.js","mappings":"wGAAO,SAASA,EAAiBC,EAAUC,EAAQC,IAQ5C,SAA8BC,EAAQH,EAAUC,EAAQC,GAC3D,MAAME,EAAcH,EAAOI,MAAM,KAEjC,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAASO,OAAQD,IAAK,CACtC,MAAME,EAAUR,EAASM,GAEzB,IAAK,IAAIG,EAAI,EAAGA,EAAIL,EAAYG,OAAQE,IAAK,CACzC,MAAMC,EAAQN,EAAYK,GAGtBD,EAAQT,iBAAiBW,EAAOR,EAIxC,CACJ,CACJ,CAvBIS,CAAqB,EAAOX,EAAUC,EAAQC,EAClD,C,wDCFA,IAAIU,EAAW,EAAQ,MACnBC,EAAM,EAAQ,OACdC,EAAW,EAAQ,OAMnBC,EAAYC,KAAKC,IACjBC,EAAYF,KAAKG,IAqLrBC,EAAOC,QA7HP,SAAkBC,EAAMC,EAAMC,GAC5B,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARZ,EACT,MAAM,IAAIa,UAzEQ,uBAmFpB,SAASC,EAAWC,GAClB,IAAIC,EAAOb,EACPc,EAAUb,EAKd,OAHAD,EAAWC,OAAWc,EACtBT,EAAiBM,EACjBT,EAASN,EAAKmB,MAAMF,EAASD,EAE/B,CAqBA,SAASI,EAAaL,GACpB,IAAIM,EAAoBN,EAAOP,EAM/B,YAAyBU,IAAjBV,GAA+Ba,GAAqBpB,GACzDoB,EAAoB,GAAOV,GANJI,EAAON,GAM8BJ,CACjE,CAEA,SAASiB,IACP,IAAIP,EAAOxB,IACX,GAAI6B,EAAaL,GACf,OAAOQ,EAAaR,GAGtBR,EAAUiB,WAAWF,EA3BvB,SAAuBP,GACrB,IAEIU,EAAcxB,GAFMc,EAAOP,GAI/B,OAAOG,EACHf,EAAU6B,EAAapB,GAJDU,EAAON,IAK7BgB,CACN,CAmBqCC,CAAcX,GACnD,CAEA,SAASQ,EAAaR,GAKpB,OAJAR,OAAUW,EAINN,GAAYT,EACPW,EAAWC,IAEpBZ,EAAWC,OAAWc,EACfZ,EACT,CAcA,SAASqB,IACP,IAAIZ,EAAOxB,IACPqC,EAAaR,EAAaL,GAM9B,GAJAZ,EAAW0B,UACXzB,EAAW0B,KACXtB,EAAeO,EAEXa,EAAY,CACd,QAAgBV,IAAZX,EACF,OAzEN,SAAqBQ,GAMnB,OAJAN,EAAiBM,EAEjBR,EAAUiB,WAAWF,EAAcrB,GAE5BS,EAAUI,EAAWC,GAAQT,CACtC,CAkEayB,CAAYvB,GAErB,GAAIG,EAIF,OAFAqB,aAAazB,GACbA,EAAUiB,WAAWF,EAAcrB,GAC5Ba,EAAWN,EAEtB,CAIA,YAHgBU,IAAZX,IACFA,EAAUiB,WAAWF,EAAcrB,IAE9BK,CACT,CAGA,OA3GAL,EAAOT,EAASS,IAAS,EACrBX,EAASY,KACXQ,IAAYR,EAAQQ,QAEpBL,GADAM,EAAS,YAAaT,GACHT,EAAUD,EAASU,EAAQG,UAAY,EAAGJ,GAAQI,EACrEO,EAAW,aAAcV,IAAYA,EAAQU,SAAWA,GAoG1De,EAAUM,OApCV,gBACkBf,IAAZX,GACFyB,aAAazB,GAEfE,EAAiB,EACjBN,EAAWK,EAAeJ,EAAWG,OAAUW,CACjD,EA+BAS,EAAUO,MA7BV,WACE,YAAmBhB,IAAZX,EAAwBD,EAASiB,EAAahC,IACvD,EA4BOoC,CACT,C,wBC5LA,IAAIQ,EAAO,EAAQ,OAsBnBrC,EAAOC,QAJG,WACR,OAAOoC,EAAKC,KAAK7C,KACnB,C,4WCPA,MAAM8C,EAAY,CAAC,EACnB,IAAIC,EAEJ,SAASC,EAAUC,GACf,MAA+C,SAAxCC,OAAOC,iBAAiBF,GAAIG,UAAsB,OAAaH,EAC1E,CAEA,MAAMI,EAAc,CAChBC,cAAsBC,GAAyB,oCACvCR,EACAQ,WAIiB,sCAETC,mBAKN,SACNC,WAAWC,kBAAkBC,IAAI,uDAE3B,sECrCP,W,4BAEH,MAAMpD,QAAe,qCAErBqD,KAAKC,KAAK,KAAMtD,EAAOuD,QAC3B,E,0RDiCcC,GAENhB,EAAIA,GAAKG,OAAOH,EAChBQ,KAXIF,EAAYW,WAYpB,IAEAA,UAAW,KACPL,IAAI,QAAQM,SACZN,IAAI,4BAA4BM,QAAQ,EAG5CC,KAAOC,IACH,MAAMC,EAAgBD,EAAKE,KAAK,wBAC3BD,EAAc1E,SAInBR,iBAAiB,oBAAoB,IAAY,2CACxB,sCAETsE,aACRH,EAAYW,WAEpB,MAEAL,IAAIW,UAAUC,OAAM,WAChB,IAAIC,EAAqB,EACzBJ,EAAcK,MAAK,CAAChF,EAAGwD,KACnB,MAAMyB,EAAef,IAAIV,GACzBI,EAAYsB,gBAAgBD,GAE5BA,EACKL,KAAK,0BACLO,IAAI,SACJC,GAAG,SAAUC,IACVrB,WAAWsB,eAAeD,EAAEE,eAAe,GAC3CvB,WAAWwB,2BAA2BH,EAAEE,cAAe,SAAU,SAAS,IAGlFN,EACKL,KAAK,mBACLO,MACAC,GAAG,SAAS,WACTxB,EAAYsB,gBAAgBD,EAChC,IAEJ,MAAMQ,EAAcR,EAAaL,KAAK,yBAClCa,EAAYxF,OACZwF,EAAYL,GAAG,QAAS,KAAK,WACzBxB,EAAY8B,mBAAmBT,EAAcQ,EACjD,IAEIlC,EAAUC,GACVI,EAAY+B,OAAOV,GAEnBF,G,IAKRA,EAAqB,GACrBb,IAAIT,QAAQ2B,GAAG,gBAAiBxB,EAAYgC,gBAEpD,IAAE,EAGNF,mBAAoB,CAACT,EAAmCQ,KACpDA,EAAYN,IAAI,SAChBM,EAAYI,QAAQ,qCAAqCjB,KAAK,SAASJ,SACvEiB,EAAYjB,SAEZR,WAAW8B,WAAW,cAAe,YACrCb,EAAaL,KAAK,mCAAmCmB,YAAY,UACjEnC,EAAY+B,OAAOV,GAEnB,MAAMe,EAAO,WACPC,EAAMhB,EAAaY,QAAQ,OAAOG,MACxC,GAAIC,EAAIhG,OAAQ,CACZ,MAAMiG,EAAoD,UAA5CD,EAAI,GAAGE,aAAaH,GAAMI,cAClCC,EAAUC,OAAOC,OACnB,CACIC,OAAQ3B,SAAS4B,KAAKC,aACtBC,KAAM,cAEVT,EAAQ,CAAEU,SAAU,OAAU,CAAEA,SAAU,oBAAqBC,IAAKhC,SAASiC,SAASC,OAG1FtD,OAAOuD,OAAOC,YAAYZ,EAAS,I,GAI3CT,gBAAiB,KAAS,KAEtB,MAAMjB,EAAgBT,IAAI,wBAC1B,IAAIgD,EAAoB,EACxBvC,EAAcK,MAAK,CAAChF,EAAGwD,KACnB,MAAMyB,EAAef,IAAIV,GACnBiC,EAAcR,EAAaL,KAAK,yBAClCK,EAAakC,KAAK,gBAAkB1B,EAAYxF,OAAS,IACzDsD,EAAUC,GACVI,EAAY+B,OAAOV,GAEnBiC,I,IAGkB,IAAtBA,GACAhD,IAAIT,QAAQ0B,IAAI,gBAAiBvB,EAAYgC,gB,GAElD,KAEHD,OAASV,IACDA,EAAakC,KAAK,iBAIjB7D,GAOLU,WAAWC,kBAAkBC,IAAI,iDAEjCN,EAAYwD,SAASnC,IARjBrB,EAAYC,eAAc,KACtBD,EAAY+B,OAAOV,EAAa,IAON,EAGtCmC,SAAWnC,IACP,MAAMoC,EAAMpC,EAAakC,KAAK,OACxBG,EAAMrC,EAAakC,KAAK,OACxBI,EAAQtC,EAAakC,KAAK,SAE1BK,EAAqBvC,EAAakC,KAAK,eAE7C9D,EAAUmE,GAAc,CAAC,EAEzB,MAAMC,EAAgBxC,EAAaL,KAAK,YAAc4C,GAClDC,EAAcxH,QACd2D,EAAY8D,WAAWD,EAAcE,IAAI,GAAIN,EAAKC,EAAKC,EAAOC,GAGlE,MAAMI,EAAiB3C,EAAaL,KAAK,aAAe4C,GACpDI,EAAe3H,QACf2D,EAAYiE,YAAYD,EAAeD,IAAI,GAAIN,EAAKC,EAAKC,EAAOC,GAGpE,MAAMM,EAAmB7C,EAAaL,KAAK,eAAiB4C,GACxDM,EAAiB7H,QACjB2D,EAAYmE,cAAcD,EAAiBH,IAAI,GAAIN,EAAKC,EAAKC,EAAOC,GAGxEvC,EAAaL,KAAwB,wBAAwBQ,GAAG,SAASC,IACrEzB,EAAYoE,WAAW3C,EAAGmC,EAAW,IAGzCvC,EAAakC,KAAK,eAAe,EAAK,EAG1Ca,WAAY,CAAC3C,EAAyCmC,KAClD,MAAMS,EAAW5E,EAAUmE,GACrBU,EAAahE,IAAImB,EAAEE,eAAeS,KAAK,QACzCkC,IAAe,qBAAuBV,EACtCS,EAASE,OAAOC,YACTF,IAAe,sBAAwBV,EAC9CS,EAASI,QAAQD,YACVF,IAAe,wBAA0BV,GAChDS,EAASK,UAAUF,W,EAI3BG,eAAgB,KACZ,MAAMC,EAAUxE,WAAWyE,uBAAuBC,YAElD,OADc9E,EAAY+E,wBAAwBH,EACtC,EAGhBI,UAAW,CAAC1I,EAAsBmH,EAAaC,EAAauB,EAA0BC,KAClF,MAAM7C,EAAM3C,EAAE2C,IAAI/F,EAAQ6I,GAAI,CAC1BC,OAAQ,CAAC3B,EAAKC,GACd2B,KAAM/E,IAAIhE,GAASiH,KAAK,SAAW,GAEnC+B,oBAAoB,EACpBC,iBAAiB,EACjBC,aAAa,EACbC,mBAAmB,EACnBC,KAAK,IAgBT,OAbA1F,EAAY2F,oBAAoBC,MAAMvD,GACtCrC,EAAY6F,iBAAiBxD,GAE7B6C,EAAMU,MAAMvD,GAE2C,SAAnDrC,EAAY8F,0BAA0BxJ,IACtC0D,EAAY+F,oBAAoBzJ,EAASmH,EAAKC,GAAKkC,MAAMvD,GAAK2D,UAAUf,GAG5E5C,EAAIb,GAAG,WAAW,WACdxB,EAAYiG,UAAU3J,EAAS+F,EACnC,IAEOA,CAAG,EAGdsD,kBAAmB,KACf,MAAMO,EAAcxG,EAAEyG,QAAQD,cAI9B,OAHAA,EAAYE,eACR,2NAEGF,CAAW,EAGtBnB,wBAA0BH,IACtB,MAAMyB,EAAoBjG,WAAWyE,uBAAuBwB,kBAC5D,OAAO3G,EAAE4G,SAAS,CACdC,YAAaF,EACbG,MAAO,mBAAqB5B,GAC9B,EAGNkB,0BAA4BxJ,GACjBgE,IAAIhE,GAASiH,KAAK,gBAAgBf,cAG7CuD,oBAAqB,CAACzJ,EAAsBmH,EAAaC,KACrD,MAAM+C,EAAgBnG,IAAIhE,GAASiH,KAAK,cAClCmD,EAAU,IAAIhH,EAAEiH,KAAK,CACvBC,QAASH,EACTI,UAAW,gFACXC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,IACjBC,YAAa,CAAC,GAAI,IAClBC,WAAY,CAAC,GAAI,MAGrB,OAAOvH,EAAEwH,OAAO,CAACzD,EAAKC,GAAM,CACxByD,KAAMT,GACR,EAGNT,UAAW,CAAC3J,EAAsB+F,KAC9BrC,EAAYoH,gBAAgB9K,EAAS,OAAQ+F,EAAIgF,UAAU,EAG/DvD,WAAY,CAACxH,EAAsBmH,EAAaC,EAAauB,EAA0BrB,KACnF,MAAMS,EAAW5E,EAAUmE,GACrB0D,EAAWtH,EAAY2E,iBACvBtC,EAAMrC,EAAYgF,UAAU1I,EAASmH,EAAKC,EAAKuB,EAAkBqC,GACvEjD,EAASE,OAASlC,EAClB,MAAMkF,EAAa7H,EAAE8H,aACrBD,EAAWE,SACP/H,EAAEgI,UACE,GAAG7H,OAAOO,WAAWuH,iBAK7BJ,EAAW/F,GAAG,SAAS,WAAa,IAEpC+F,EAAW3B,MAAMvD,EAAI,EAGzB4B,YAAa,CAAC3H,EAAsBmH,EAAaC,EAAauB,EAA0BrB,KACpF,MAAMS,EAAW5E,EAAUmE,GACrB0D,EAAWtH,EAAY2E,iBACvBtC,EAAMrC,EAAYgF,UAAU1I,EAASmH,EAAKC,EAAKuB,EAAkBqC,GACvEjD,EAASI,QAAUpC,EAEnB,MAAMuF,EAAYtH,IAAIhE,GAASiH,KAAK,aACpC,IAAKqE,EAAW,OAChB,MAAMC,EAAkBvH,IAAIhE,GAASiH,KAAK,gBAEpCuE,EAAe,IAAIpI,EAAEiH,KAAK,CAC5BC,QAASiB,EACThB,UAAW,gFACXC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,IACjBC,YAAa,CAAC,GAAI,IAClBC,WAAY,CAAC,GAAI,MAGfc,EAAsB/H,EAAY8F,0BAA0BxJ,GAClE,IAAK,IAAIF,EAAI,EAAGA,EAAIwL,EAAUvL,OAAQD,IAAK,CACvC,MAAM4L,EAAWJ,EAAUxL,GAO3B,GALAsD,EAAEwH,OAAO,CAACc,EAASvE,IAAKuE,EAAStE,KAAM,CACnCyD,KAAMW,IAELlC,MAAMvD,GACN2D,UAAUgC,EAASC,MACI,SAAxBF,EAAgC,CAChC,MAAMG,EAAO,CACT,CACIzE,IAAKA,EACLC,IAAKA,GAET,CACID,IAAKuE,EAASvE,IACdC,IAAKsE,EAAStE,MAGtBhE,EAAEyI,SAASD,EAAM,CACbE,MAAO,UACPC,QAAS,EACTC,OAAQ,IACT1C,MAAMvD,E,CAEb,GAAI2F,EAASO,UAAYP,EAASO,SAASlM,OAAQ,CAC/C,MAAMmM,EAAU,IAAI9I,EAAE+I,QAAQT,EAASO,SAAU,CAC7CH,MAAO,UACPE,OAAQ,EACRD,QAAS,GACTK,YAAa,KAEjBrG,EAAIoF,SAASe,E,IAKzBrE,cAAe,CAAC7H,EAAsBmH,EAAaC,EAAauB,EAA0BrB,KACtF,MAAMS,EAAW5E,EAAUmE,GAErB0D,EAAWtH,EAAY2E,iBAC7BN,EAASiD,SAAWA,EAEpB,MAAMjF,EAAMrC,EAAYgF,UAAU1I,EAASmH,EAAKC,EAAKuB,EAAkBqC,GACvEjD,EAASK,UAAYrC,EAErB,MAAMsG,EAAqBrI,IAAIhE,GAAS8G,SAASA,SAEjDiB,EAASuE,UAAY,GACrBvE,EAASwE,aAAe,GAExB7I,EAAY8I,mBAAmBxM,EAASsH,GAExC+E,EACK3H,KAAK,+BACLQ,GAAG,UAAWC,GACXzB,EAAY+I,iBAAiBtH,EAAGnF,EAASsH,EAAY+E,KAG7DA,EACK3H,KAAwB,gCACxBQ,GAAG,UAAWC,GACXzB,EAAYgJ,iBAAiBvH,EAAGnF,EAASsH,EAAY+E,IACxD,EAGTI,iBAAkB,CACdtH,EACAnF,EACAsH,EACA+E,KAIIlH,EAAEE,cAAcsH,QAChBxH,EAAEE,cAAcuH,aAAa,UAAW,IAExCzH,EAAEE,cAAcwH,gBAAgB,WAGpCnJ,EAAY8I,mBAAmBxM,EAASsH,GAExC,MAAMwF,EAAW,GACbT,EAAmB3H,KAAK,qDAAqD3E,OAAS,GAC1DsM,EAAmB3H,KAAK,+CAChCI,MAAK,CAAChF,EAAGiN,KACzBD,EAASE,KAAKhJ,IAAI+I,GAAS9F,KAAK,mBAAmB,IAEvDvD,EAAYoH,gBAAgBuB,EAAoB,4BAA6BS,EAASG,SAEtFvJ,EAAYoH,gBAAgBuB,EAAoB,4BAA6B,K,EAIrFK,iBAAkB,CACdvH,EACAnF,EACAsH,EACA+E,KAIA,IAAIlH,EAAEE,cAAcrE,SAASkM,SAAQ,CAACC,EAAGrN,KACjCqF,EAAEE,cAAc+H,gBAAkBtN,EAClCqN,EAAEP,aAAa,WAAY,IAE3BO,EAAEN,gBAAgB,W,IAI1B,MAAMQ,EAAahB,EAAmB3H,KAAK,+BAI3C2I,EAAWvH,KAAK,UAAW,IAE3BuH,EAAWvG,SAASjB,YAAY,UAEhC,MAAMyH,EAAWtJ,IAAImB,EAAEE,eAAeX,KAAK,aAC3ChB,EAAYoH,gBAAgBuB,EAAoB,uBAAwBiB,EAASC,OACjF7J,EAAYoH,gBAAgBuB,EAAoB,4BAA6B,MAE3C,GAA9BiB,EAASrG,KAAK,cACdoF,EACK3H,KAAK,oBAAsB4C,GAC3BR,SACA0G,SAAS,UAEgB,GAA9BF,EAASrG,KAAK,cACdoF,EACK3H,KAAK,mBAAqB4C,GAC1BR,SACA0G,SAAS,UAGlB9J,EAAY8I,mBAAmBxM,EAASsH,EAAW,EAGvDkF,mBAAoB,SAAUiB,EAAwBnG,GAClD,MAAMS,EAAW5E,EAAUmE,GAG3BS,EAASuE,UAAUoB,OAAO,EAAG3F,EAASuE,UAAUvM,QAEhD,MAAMiL,EAAWjD,EAASiD,SAAS2C,eAC/B3C,EAAS4C,gBACTlK,EAAYmK,iBAAiBJ,EAAWzC,EAAUjD,GAElDiD,EAAS9F,GAAG,cAAc,KACtBxB,EAAYmK,iBAAiBJ,EAAWzC,EAAUjD,EAAS,GAGvE,EAEA8F,iBAAkB,CAACJ,EAAwBzC,EAAUjD,KACjD/D,IAAIc,KAAKiD,EAASwE,cAAc,SAAUuB,EAAOC,GACzC/C,EAASgD,SAASD,IAAQ/C,EAASiD,YAAYF,GAC/C/C,EAASkD,UAAUH,IAAQ/C,EAASmD,aAAaJ,EACzD,IACAhG,EAASwE,aAAe,GACxBvI,IAAIA,IAAIyJ,GAAW3G,SAASA,SAASpC,KAAK,+BAA+B+C,MAAM2G,WAAWtJ,MACtF,CAAChF,EAAGwD,KACA,MAAM+K,EAASrK,IAAIyJ,GAAW3G,SAASA,SAASpC,KAAK,gDAErD,GAAIpB,EAAGqJ,QAAS,CACZ,IAAI2B,EACAC,EAWJ,GAVwC,OAApCvK,IAAIV,GAAI2D,KAAK,oBACbqH,EAAY,UACZC,EAAQF,EAAOpH,KAAK,cACuB,OAApCjD,IAAIV,GAAI2D,KAAK,oBACpBqH,EAAY,UACZC,EAAQF,EAAOpH,KAAK,cACuB,OAApCjD,IAAIV,GAAI2D,KAAK,qBACpBqH,EAAY,UACZC,EAAQF,EAAOpH,KAAK,cAEpBsH,GAASA,EAAMxO,OAAQ,CACvB,MAAMyO,EAASD,EAAM1O,MAAM,KAC3BmE,IAAIc,KAAK0J,GAAQ,SAAUV,EAAOW,GAC9B1G,EAASwE,aAAaS,KAAKyB,GAC3B,MAAMC,EAASD,EAAE5O,MAAM,KACvB,GAAsB,IAAlB6O,EAAO3O,OAAc,CACrB,MAAM4O,EAASD,EAAO,GAChBH,EAAQG,EAAO,GACrB1D,EAAS4D,UAAUH,EAAG,CAClBhI,KAAM,SACNE,IAAK,YAAcgI,IAEvB3D,EAASG,SAAS,CACdtC,GAAI4F,EACJhI,KAAM,OACNkI,OAAQF,EACR,eAAgBF,EAChBM,MAAO,CACH,aAAcP,EACd,eAAgB,K,CAIhC,G,KAIf,EAGL/E,iBAAkBxD,IACVjC,WAAWgL,mBACX/I,EAAIgJ,SAASC,UACD5L,EAAEyG,QACToF,WAAW,CACRC,QAAS,UAEZ5F,MAAMvD,GACPoJ,KAAK,qC,EAIjBrE,gBAAiB,CAAC9K,EAA4CoP,EAAqBrB,KAC/E,MAAMhI,EAAM/B,IAAIhE,GAAS2F,QAAQ,wBAC3B0J,EAAStJ,EAAIkB,KAAK,gBAClBN,EAAMZ,EAAIkB,KAAK,aAEhBoI,GAAW1I,IAIhBZ,EAAIkB,KAAK,eAAgBnD,WAAWwL,2BAA2BD,EAAQD,EAAarB,IACpFhI,EAAIkB,KAAK,YAAanD,WAAWwL,2BAA2B3I,EAAKyI,EAAarB,IAC9ErK,EAAYsB,gBAAgBe,GAAI,EAGpCf,gBAAkBhF,IACd,IAAI2G,EAAK4I,EACKvL,IAAIhE,GAAS0E,KAAK,mBAAmB8K,GAAG,aAElD7I,EAAM3C,IAAIhE,GAASiH,KAAK,gBACxBN,EAAMA,EAAI8I,QAAQ,KAAM,SACxBF,EAASvL,IAAIhE,GAASiH,KAAK,qBAE3BN,EAAM3C,IAAIhE,GAASiH,KAAK,aACxBsI,EAASvL,IAAIhE,GAASiH,KAAK,iBAG/BjD,IAAIhE,GAAS0E,KAAK,0BAA0B6I,IAAIgC,EAAOE,QAAQ,QAAS9I,GAAK,GAYrF7C,WAAW4L,WAAW,wFANtB,WACI5L,WAAW6L,YAAcjM,EACzBI,WAAW8L,WAAa,IAAMlM,EAAYa,KAAKP,IAAI,SACnDF,WAAW8L,YACf,G,+CE1jBO,MAAMC,UAAgC,IACzC,WAAAC,GACIC,QACAnN,KAAKoN,MAAQ,QACjB,CAEA,YAAAC,CAAaC,EAAkBvQ,EAAgB0H,EAAe0G,GAC1D,IACI,MACM9G,EAD0BrE,KAAKuN,6BACAlJ,KAErCrE,KAAKwN,kBAAkB,CACnBlQ,MAAO,MAAMgQ,KAAYvQ,IAASuG,cAClCmK,eAAgBH,EAChBI,aAAc3Q,EACd4Q,YAAalJ,EACbmJ,YAAaC,MAAM1C,QAAkB/L,GAAa+L,EAClD2C,cAAezJ,EAAK0J,QACpBC,oBAAqB3J,EAAK4J,e,CAEhC,MAAOC,GACLlO,KAAKmO,QAAQC,MAAM,qCAAqCd,aAAoBvQ,YAAiB0H,IAASyJ,E,CAE9G,CAEA,YAAAG,CAAatK,GACT,MAAMuK,EAA0BtO,KAAKuN,6BAC/BgB,EAASD,EAAwBC,OAEvC,IACQA,EAAOC,wBACDzK,GAAOA,EAAI5G,QAAU,IAAMmR,EAAwBjK,OACrDN,EAAMuK,EAAwBjK,KAAKoK,aAEvCrN,IAAIc,KAAKqM,EAAOG,UAAU,SAAUxD,EAAOyD,GACvCC,GAAG,SAAUD,EAAQE,cAAe,CAAE9F,KAAM4F,EAAQG,UAAWC,gBAAgB,GAAQ,QACnFJ,EAAQK,gBACRJ,GAAGD,EAAQG,UAAY,WAAY,UAEvCF,GAAGD,EAAQG,UAAY,OAAQ,eAAe,IACzC/K,GAAOA,EAAI5G,QAAU,EACtByR,GAAGD,EAAQG,UAAY,QAAS,YAEhCF,GAAGD,EAAQG,UAAY,QAAS,WAAY,CACxClN,KAAMmC,GAGlB,I,CAEN,MAAOmK,GACLlO,KAAKmO,QAAQC,MAAM,+BAA+BrK,IAAOmK,E,CAEjE,CAEA,qBAAAe,CAAsBlL,GAClB,IACI,MAAMuK,EAA0BtO,KAAKuN,6BAC/BO,EAAgBQ,EAAwBjK,KAAK0J,UAE9ChK,GAAOA,EAAI5G,QAAU,KACtB4G,EAAMuK,EAAwBjK,KAAKoK,eAGlC1K,GAAOA,EAAI5G,QAAU,KAAG4G,EAAM,GAAGC,SAASkL,WAAWlL,SAASmL,UAEnE,MAAMC,EAAkC,CACpC9R,MAAO,uBACP+R,UAAWtL,EACX+J,cAAeA,GAGnB9N,KAAKwN,kBAAkB4B,E,CACzB,MAAOlB,GACLlO,KAAKmO,QAAQC,MAAM,4BAA6BF,E,CAExD,CAEA,aAAAoB,CAAcvL,GACV,IACI/D,KAAKqO,aAAatK,GAClB/D,KAAKiP,sBAAsBlL,E,CAC7B,MAAOmK,GACLlO,KAAKmO,QAAQC,MAAM,gCAAgCrK,IAAOmK,E,CAElE,CAEA,UAAAqB,CAAWC,GACP,MAAM9O,EAAKqB,SAAS0N,cAAc,QAElC,OADA/O,EAAGgP,OAAO3N,SAAS4N,eAAeH,IAC3B9O,EAAGkP,SACd,CAEM,IAAAjO,G,4BACE3B,KAAK6P,wBAIH7P,KAAK8P,WACf,E,gTClGS,YACLnP,OAAOO,WAAW2O,wBAIhB,wCAKNlP,OAAOO,WAAasC,OAAOC,OAAO,IAAI,EAAqB9C,OAAOO,YAAc,CAAC,SAE3EP,OAAOO,WAAWS,QACxB,EAAAoO,EAAA,KACJ,E,YAda,K,kPAAA,E,uCCLN,SAASC,EAAatP,GACzB,GAA4C,SAAxCC,OAAOC,iBAAiBF,GAAIG,QAC5B,OAAO,EAMX,MAAMoP,EAAOvP,EAAGwP,wBACVC,EAAiBxP,OAAOyP,aAAerO,SAASsO,gBAAgBC,aACtE,OAAOL,EAAKM,OAAS,GAAKN,EAAKO,KAAO,GAAKP,EAAKO,KAAOL,CAC3D,C,uICRO,SAASM,IACZ,OAAOrP,IAAI,UACf,CAEO,SAASsP,IACZtP,KAAI,WACA,MAAM2O,EAASU,IACVV,EAAO5S,QAEO,CACfwT,aAAc,KACdC,gBAAiB,KACjBjP,KAAM,WACF,MAAMkP,EAA2C,SAArCd,EAAO1L,KAAK,OAAOf,cACzBS,EAAMgM,EAAO1L,KAAK,OAElByM,EAAYxQ,KAAK7C,OACvB,QAAwB,CACpBH,MAAO,oBACPyT,iBAAkB,WAGtB,MAAMrQ,EAAKqP,EAAO,GAEdc,GACA,KAA6B,CAAClQ,OAAQD,EAAIA,EAAGsQ,eAAgB,SAAUhR,KAAKiR,UAAUC,KAAKlR,OAC3F,KAA6B,CAACW,QAAS,OAAQX,KAAKiR,UAAUC,KAAKlR,SAEnE,KAA6B,CAACW,OAAQD,EAAIA,EAAGsQ,eAAgB,SAAUhR,KAAKmR,OAAOD,KAAKlR,OACxF,KAA6B,CAACW,QAAS,OAAQX,KAAKmR,OAAOD,KAAKlR,QAGpEoB,IAAIgQ,KAAK,CACLC,QAASrR,KACT6D,KAAM,MACNE,IAAKA,EACLuN,YAAa,cAEZC,MAAK,SAAUlN,GACZ0L,EAAOjO,KAAK,mBAAmB0P,KAAKnN,GAEpCnD,WAAWuQ,eACXvQ,WAAWwQ,eAEPxQ,WAAW8L,YACX9L,WAAW8L,YAEnB,IACC2E,MAAK,SAAUC,EAAOC,EAAYzD,GAC/B2B,EAAOjO,KAAK,mBAAmB0P,KAAKzB,EAAOjO,KAAK,iBAAiB0P,QAEjEtQ,WAAWiN,QAAQC,MACf,sCAAsCrK,cAAgB8N,aAAsBzD,oBAAwBwD,EAAME,iBAG9G,QAAwB,CACpBxU,MAAO,eACPyT,iBAAkB,SAClB3C,MAAOA,GAEf,IACC2D,QAAO,KACJhC,EAAOjO,KAAK,iBAAiBJ,SAC7BqO,EAAOjO,KAAK,mBAAmBJ,SAE/B,MAAMsQ,EAAU1R,KAAK7C,OACrB,QAAwB,CACpBH,MAAO,kBACPyT,iBAAkB,SAClBkB,UAAWD,EAAUlB,GAAa,MAGlCD,EACA7Q,KAAKiR,YAELjR,KAAKmR,Q,GAGrB,EAEAA,OAAQ,WACJe,mBAAmBlS,KAAK2Q,cACxB3Q,KAAK2Q,aAAewB,oBAAoBnS,KAAKoS,QAAQlB,KAAKlR,MAAO,CAC7DsM,QAAS,KAEjB,EAEA8F,QAAS,WACLzR,OAAOuD,OAAOC,YACV,CACIL,SAAU,oBACVC,IAAKhC,SAASiC,SAASC,KACvBP,OAAQqM,EAAOrM,UAEnB,IAER,EAEAuN,UAAW,WACPiB,mBAAmBlS,KAAK4Q,iBACxB5Q,KAAK4Q,gBAAkBuB,oBAAoBnS,KAAKqS,WAAWnB,KAAKlR,MAAO,CACnEsM,QAAS,KAEjB,EAEA+F,WAAY,WACR1R,OAAOuD,OAAOC,YACV,CACIL,SAAU,MACVD,KAAM,aACNH,OAAQqM,EAAOrM,UAEnB,IAER,GAGO/B,MACf,GACJ,C","sources":["webpack://@whistleout/webui/./Areas/Widgets/js/common/utils/EventHelper.js","webpack://@whistleout/webui/../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/debounce.js","webpack://@whistleout/webui/../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/now.js","webpack://@whistleout/webui/./Areas/Widgets/js/CoverageMap.ts","webpack://@whistleout/webui/./Areas/Shared/js/vendor/deferred/cartodbjs.ts","webpack://@whistleout/webui/./Areas/Widgets/js/common/common.ts","webpack://@whistleout/webui/./Areas/Widgets/js/common/index.ts","webpack://@whistleout/webui/./Areas/Widgets/js/common/utils/ViewportHelper.ts","webpack://@whistleout/webui/./Areas/Widgets/js/common/widget.ts"],"sourcesContent":["export function addEventListener(elements, events, handler) {\n _addOrRemoveListener('add', elements, events, handler);\n}\n\nexport function removeEventListener(elements, events, handler) {\n _addOrRemoveListener('remove', elements, events, handler);\n}\n\nexport function _addOrRemoveListener(action, elements, events, handler) {\n const eventsArray = events.split(' ');\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n\n for (let j = 0; j < eventsArray.length; j++) {\n const event = eventsArray[j];\n\n if (action === 'add') {\n element.addEventListener(event, handler);\n } else {\n element.removeEventListener(event, handler);\n }\n }\n }\n}\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","// TODO: Fix ESLint violations and enable the rules below\n/* eslint-disable eqeqeq */\n/* eslint-disable block-scoped-var */\n/* eslint-disable no-redeclare */\n\n'use strict';\n\nimport debounce from 'lodash/debounce';\n\nimport { initBootstrapSelect } from '../../Shared/js/vendor/deferred';\nimport { initCartoDb } from '../../Shared/js/vendor/deferred/cartodbjs';\nimport { isInViewport } from './common/utils/ViewportHelper';\n\nconst instances = {};\nlet L;\n\nfunction isVisible(el: HTMLElement) {\n return window.getComputedStyle(el).display !== 'none' && isInViewport(el);\n}\n\nconst coverageMap = {\n loadLibraries: async (callback: () => void) => {\n if (L) {\n callback();\n return;\n }\n\n const mapbox = await import(/* webpackChunkName: \"mapbox\" */ 'mapbox-gl');\n\n if (!mapbox.supported()) {\n coverageMap.removeMap();\n return;\n }\n\n await initBootstrapSelect();\n WhistleOut.applySelectPicker(wo$('.container-widget-coverage-map .selectpicker'));\n\n await import(/* webpackChunkName: \"leaflet\" */ '../../Shared/js/vendor/deferred/leaflet');\n await initCartoDb();\n\n L = L || window.L;\n callback();\n },\n\n removeMap: () => {\n wo$('#map').remove();\n wo$('[data-goto-coverage-map]').remove();\n },\n\n init: (page: JQuery) => {\n const mapContainers = page.find('[data-coverage-maps]');\n if (!mapContainers.length) {\n return;\n }\n\n addEventListener('DOMContentLoaded', async () => {\n const mapbox = await import(/* webpackChunkName: \"mapbox\" */ 'mapbox-gl');\n\n if (!mapbox.supported()) {\n coverageMap.removeMap();\n }\n });\n\n wo$(document).ready(function () {\n let mapsNotInitialized = 0;\n mapContainers.each((i, el) => {\n const mapContainer = wo$(el);\n coverageMap.updateWidgetUrl(mapContainer);\n\n mapContainer\n .find('input[data-embed-code]')\n .off('click')\n .on('click', (e: JQuery.ClickEvent) => {\n WhistleOut.focusAndSelect(e.currentTarget, true);\n WhistleOut.triggerPopoverNotification(e.currentTarget, 'Copied', 'bottom');\n });\n\n mapContainer\n .find('input[data-amp]')\n .off()\n .on('click', function () {\n coverageMap.updateWidgetUrl(mapContainer);\n });\n\n const placeholder = mapContainer.find('div[data-placeholder]');\n if (placeholder.length) {\n placeholder.on('click', 'a', function () {\n coverageMap.onMapActivateClick(mapContainer, placeholder);\n });\n } else {\n if (isVisible(el)) {\n coverageMap.doInit(mapContainer);\n } else {\n mapsNotInitialized++;\n }\n }\n });\n\n if (mapsNotInitialized > 0) {\n wo$(window).on('resize scroll', coverageMap.viewportChanged);\n }\n });\n },\n\n onMapActivateClick: (mapContainer: JQuery, placeholder: JQuery) => {\n placeholder.off('click');\n placeholder.closest('div.container-widget-coverage-map').find('style').remove();\n placeholder.remove();\n\n WhistleOut.trackEvent('CoverageMap', 'Activate');\n mapContainer.find('[data-map-content]>:first-child').removeClass('hidden');\n coverageMap.doInit(mapContainer);\n\n const attr = 'data-amp';\n const map = mapContainer.closest(`div[${attr}]`);\n if (map.length) {\n const isAmp = map[0].getAttribute(attr).toLowerCase() !== 'false';\n const message = Object.assign(\n {\n height: document.body.scrollHeight,\n type: 'embed-size'\n },\n isAmp ? { sentinel: 'amp' } : { sentinel: 'whistleout-widget', url: document.location.href }\n );\n\n window.parent.postMessage(message, '*');\n }\n },\n\n viewportChanged: debounce(() => {\n console.log('scrolled maps');\n const mapContainers = wo$('[data-coverage-maps]');\n let mapsNotInitilized = 0;\n mapContainers.each((i, el) => {\n const mapContainer = wo$(el);\n const placeholder = mapContainer.find('div[data-placeholder]');\n if (mapContainer.data('initialised') || placeholder.length > 0) return;\n if (isVisible(el)) {\n coverageMap.doInit(mapContainer);\n } else {\n mapsNotInitilized++;\n }\n });\n if (mapsNotInitilized === 0) {\n wo$(window).off('resize scroll', coverageMap.viewportChanged);\n }\n }, 100),\n\n doInit: (mapContainer: JQuery) => {\n if (mapContainer.data('initialised')) {\n return;\n }\n\n if (!L) {\n coverageMap.loadLibraries(() => {\n coverageMap.doInit(mapContainer);\n });\n return;\n }\n\n WhistleOut.applySelectPicker(wo$('.container-widget-coverage-map .selectpicker'));\n\n coverageMap.showMaps(mapContainer);\n },\n\n showMaps: (mapContainer: JQuery) => {\n const lat = mapContainer.data('lat');\n const lng = mapContainer.data('lng');\n const label = mapContainer.data('label');\n\n const instanceId: string = mapContainer.data('instance-id');\n console.log('initialized map ' + instanceId);\n instances[instanceId] = {};\n\n const nbnMapElement = mapContainer.find('#nbn-map-' + instanceId);\n if (nbnMapElement.length) {\n coverageMap.showNbnMap(nbnMapElement.get(0), lat, lng, label, instanceId);\n }\n\n const adslMapElement = mapContainer.find('#adsl-map-' + instanceId);\n if (adslMapElement.length) {\n coverageMap.showAdslMap(adslMapElement.get(0), lat, lng, label, instanceId);\n }\n\n const mobileMapElement = mapContainer.find('#mobile-map-' + instanceId);\n if (mobileMapElement.length) {\n coverageMap.showMobileMap(mobileMapElement.get(0), lat, lng, label, instanceId);\n }\n\n mapContainer.find('a[data-toggle=\"tab\"]').on('click', e => {\n coverageMap.onTabClick(e, instanceId);\n });\n\n mapContainer.data('initialised', true);\n },\n\n onTabClick: (e: JQuery.ClickEvent, instanceId: string) => {\n const instance = instances[instanceId];\n const targetHref = wo$(e.currentTarget).attr('href');\n if (targetHref === '#nbn-coverage-tab-' + instanceId) {\n instance.nbnMap._onResize();\n } else if (targetHref === '#adsl-coverage-tab-' + instanceId) {\n instance.adslMap._onResize();\n } else if (targetHref === '#mobile-coverage-tab-' + instanceId) {\n instance.mobileMap._onResize();\n }\n },\n\n createMapBoxGl: () => {\n const styleId = WhistleOut.getSiteConfiguration().mapBoxStyle;\n const mapGl = coverageMap.createMapboxVectorLayer(styleId);\n return mapGl;\n },\n\n createMap: (element: HTMLElement, lat: number, lng: number, formattedAddress: string, mapGl) => {\n const map = L.map(element.id, {\n center: [lat, lng],\n zoom: wo$(element).data('zoom') || 14,\n\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: true,\n fullscreenControl: true,\n tap: false\n });\n\n coverageMap.createAttribution().addTo(map);\n coverageMap.setMobileOptions(map);\n\n mapGl.addTo(map);\n\n if (coverageMap.shouldShowCurrentLocation(element) === 'true') {\n coverageMap.createAddressMarker(element, lat, lng).addTo(map).bindPopup(formattedAddress);\n }\n\n map.on('zoomend', function () {\n coverageMap.onZoomEnd(element, map);\n });\n\n return map;\n },\n\n createAttribution: () => {\n const attribution = L.control.attribution();\n attribution.addAttribution(\n 'Map data © OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox'\n );\n return attribution;\n },\n\n createMapboxVectorLayer: (styleId: string) => {\n const mapBoxAccessToken = WhistleOut.getSiteConfiguration().mapBoxAccessToken;\n return L.mapboxGL({\n accessToken: mapBoxAccessToken,\n style: 'mapbox://styles/' + styleId\n });\n },\n\n shouldShowCurrentLocation: (element: HTMLElement) => {\n return wo$(element).data('show-current').toLowerCase();\n },\n\n createAddressMarker: (element: HTMLElement, lat: number, lng: number) => {\n const markerIconUrl = wo$(element).data('marker-url');\n const redIcon = new L.Icon({\n iconUrl: markerIconUrl,\n shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png',\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n shadowSize: [41, 41]\n });\n\n return L.marker([lat, lng], {\n icon: redIcon\n });\n },\n\n onZoomEnd: (element: HTMLElement, map) => {\n coverageMap.updateEmbedUrls(element, 'zoom', map.getZoom());\n },\n\n showNbnMap: (element: HTMLElement, lat: number, lng: number, formattedAddress: string, instanceId: string) => {\n const instance = instances[instanceId];\n const mapBoxGl = coverageMap.createMapBoxGl();\n const map = coverageMap.createMap(element, lat, lng, formattedAddress, mapBoxGl);\n instance.nbnMap = map;\n const nbnCoLayer = L.layerGroup();\n nbnCoLayer.addLayer(\n L.tileLayer(\n `${window.WhistleOut.nbnTileLayer}`\n )\n );\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n nbnCoLayer.on('error', function () {}); // TODO: Log warning in Rollbar\n\n nbnCoLayer.addTo(map);\n },\n\n showAdslMap: (element: HTMLElement, lat: number, lng: number, formattedAddress: string, instanceId: string) => {\n const instance = instances[instanceId];\n const mapBoxGl = coverageMap.createMapBoxGl();\n const map = coverageMap.createMap(element, lat, lng, formattedAddress, mapBoxGl);\n instance.adslMap = map;\n\n const exchanges = wo$(element).data('exchanges');\n if (!exchanges) return;\n const exchangeIconUrl = wo$(element).data('exchange-url');\n\n const exchangeIcon = new L.Icon({\n iconUrl: exchangeIconUrl,\n shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png',\n iconSize: [32, 37],\n iconAnchor: [12, 37],\n popupAnchor: [1, -34],\n shadowSize: [41, 41]\n });\n\n const showCurrentLocation = coverageMap.shouldShowCurrentLocation(element);\n for (let i = 0; i < exchanges.length; i++) {\n const exchange = exchanges[i];\n\n L.marker([exchange.lat, exchange.lng], {\n icon: exchangeIcon\n })\n .addTo(map)\n .bindPopup(exchange.name);\n if (showCurrentLocation === 'true') {\n const path = [\n {\n lat: lat,\n lng: lng\n },\n {\n lat: exchange.lat,\n lng: exchange.lng\n }\n ];\n L.polyline(path, {\n color: '#FF0000',\n opacity: 1.0,\n weight: 2\n }).addTo(map);\n }\n if (exchange.boundary && exchange.boundary.length) {\n const polygon = new L.Polygon(exchange.boundary, {\n color: '#8e50d8',\n weight: 2,\n opacity: 0.6,\n fillOpacity: 0.5\n });\n map.addLayer(polygon);\n }\n }\n },\n\n showMobileMap: (element: HTMLElement, lat: number, lng: number, formattedAddress: string, instanceId: string) => {\n const instance = instances[instanceId];\n\n const mapBoxGl = coverageMap.createMapBoxGl();\n instance.mapBoxGl = mapBoxGl;\n\n const map = coverageMap.createMap(element, lat, lng, formattedAddress, mapBoxGl);\n instance.mobileMap = map;\n\n const mobileMapContainer = wo$(element).parent().parent();\n\n instance.providers = [];\n instance.mapboxLayers = [];\n\n coverageMap.reloadMobileLayers(element, instanceId);\n\n mobileMapContainer\n .find('input[data-mobile-sublayer]')\n .on('change', (e: JQuery.ChangeEvent) =>\n coverageMap.onSublayerChange(e, element, instanceId, mobileMapContainer)\n );\n\n mobileMapContainer\n .find('select[data-mobile-provider]')\n .on('change', (e: JQuery.ChangeEvent) =>\n coverageMap.onProviderChange(e, element, instanceId, mobileMapContainer)\n );\n },\n\n onSublayerChange: (\n e: JQuery.ChangeEvent,\n element: HTMLElement,\n instanceId: string,\n mobileMapContainer: JQuery\n ) => {\n // The HTML element attributes are not updated by default,\n // do this here explicitly\n if (e.currentTarget.checked) {\n e.currentTarget.setAttribute('checked', '');\n } else {\n e.currentTarget.removeAttribute('checked');\n }\n\n coverageMap.reloadMobileLayers(element, instanceId);\n\n const networks = [];\n if (mobileMapContainer.find('input[data-mobile-sublayer]:visible:not(:checked)').length > 0) {\n const checkedNetworkTypes = mobileMapContainer.find('input[data-mobile-sublayer]:visible:checked');\n checkedNetworkTypes.each((i, network) => {\n networks.push(wo$(network).data('mobile-sublayer'));\n });\n coverageMap.updateEmbedUrls(mobileMapContainer, 'defaultMobileNetworkTypes', networks.join());\n } else {\n coverageMap.updateEmbedUrls(mobileMapContainer, 'defaultMobileNetworkTypes', null);\n }\n },\n\n onProviderChange: (\n e: JQuery.ChangeEvent,\n element: HTMLElement,\n instanceId: string,\n mobileMapContainer: JQuery\n ) => {\n // The HTML element attributes are not updated by default,\n // do this here explicitly\n [...e.currentTarget.options].forEach((p, i) => {\n if (e.currentTarget.selectedIndex === i) {\n p.setAttribute('selected', '');\n } else {\n p.removeAttribute('selected');\n }\n });\n\n const checkboxes = mobileMapContainer.find('input[data-mobile-sublayer]');\n\n // TODO: try using prop() instead of attr() or vanilla JS\n // HACK: .prop() doesn't work for some reason\n checkboxes.attr('checked', '');\n\n checkboxes.parent().removeClass('hidden');\n\n const selected = wo$(e.currentTarget).find(':selected');\n coverageMap.updateEmbedUrls(mobileMapContainer, 'defaultMobileNetwork', selected.val() as string);\n coverageMap.updateEmbedUrls(mobileMapContainer, 'defaultMobileNetworkTypes', null);\n\n if (selected.data('3g-hidden') == true) {\n mobileMapContainer\n .find('#threeg-checkbox-' + instanceId)\n .parent()\n .addClass('hidden');\n }\n if (selected.data('5g-hidden') == true) {\n mobileMapContainer\n .find('#fiveg-checkbox-' + instanceId)\n .parent()\n .addClass('hidden');\n }\n\n coverageMap.reloadMobileLayers(element, instanceId);\n },\n\n reloadMobileLayers: function (container: HTMLElement, instanceId: string) {\n const instance = instances[instanceId];\n\n // Remove existing items\n instance.providers.splice(0, instance.providers.length);\n\n const mapBoxGl = instance.mapBoxGl.getMapboxMap();\n if (mapBoxGl.isStyleLoaded()) {\n coverageMap.loadMapBoxLayers(container, mapBoxGl, instance);\n } else {\n mapBoxGl.on('style.load', () => {\n coverageMap.loadMapBoxLayers(container, mapBoxGl, instance);\n });\n }\n },\n\n loadMapBoxLayers: (container: HTMLElement, mapBoxGl, instance) => {\n wo$.each(instance.mapboxLayers, function (index, value) {\n if (mapBoxGl.getLayer(value)) mapBoxGl.removeLayer(value);\n if (mapBoxGl.getSource(value)) mapBoxGl.removeSource(value);\n });\n instance.mapboxLayers = [];\n wo$(wo$(container).parent().parent().find('input[data-mobile-sublayer]').get().reverse()).each(\n (i, el: HTMLInputElement) => {\n const option = wo$(container).parent().parent().find('select[data-mobile-provider] option:selected');\n\n if (el.checked) {\n let fillColor;\n let layer;\n if (wo$(el).data('mobile-sublayer') === '3g') {\n fillColor = '#af8cdb';\n layer = option.data('3g-mapbox');\n } else if (wo$(el).data('mobile-sublayer') === '4g') {\n fillColor = '#8f53d5';\n layer = option.data('4g-mapbox');\n } else if (wo$(el).data('mobile-sublayer') === '5g') {\n fillColor = '#710FE3';\n layer = option.data('5g-mapbox');\n }\n if (layer && layer.length) {\n const layers = layer.split(',');\n wo$.each(layers, function (index, v) {\n instance.mapboxLayers.push(v);\n const values = v.split('|');\n if (values.length === 2) {\n const source = values[0];\n const layer = values[1];\n mapBoxGl.addSource(v, {\n type: 'vector',\n url: 'mapbox://' + source\n });\n mapBoxGl.addLayer({\n id: v,\n type: 'fill',\n source: v,\n 'source-layer': layer,\n paint: {\n 'fill-color': fillColor,\n 'fill-opacity': 0.5\n }\n });\n }\n });\n }\n }\n }\n );\n },\n\n setMobileOptions: map => {\n if (WhistleOut.isMobileDevice()) {\n map.dragging.disable();\n const box = L.control\n .messagebox({\n timeout: 9999999\n })\n .addTo(map);\n box.show('Use two fingers to scroll the map');\n }\n },\n\n updateEmbedUrls: (element: JQuery | HTMLElement, queryString: string, value: string) => {\n const map = wo$(element).closest('[data-coverage-maps]');\n const ampUrl = map.data('embed-ampurl');\n const url = map.data('embed-url');\n\n if (!ampUrl || !url) {\n return;\n }\n\n map.data('embed-ampurl', WhistleOut.updateQueryStringParameter(ampUrl, queryString, value));\n map.data('embed-url', WhistleOut.updateQueryStringParameter(url, queryString, value));\n coverageMap.updateWidgetUrl(map);\n },\n\n updateWidgetUrl: (element: JQuery | HTMLElement) => {\n let url, format;\n const isAmp = wo$(element).find('input[data-amp]').is(':checked');\n if (isAmp) {\n url = wo$(element).data('embed-ampurl');\n url = url.replace(/&/g, '&');\n format = wo$(element).data('embed-ampformat');\n } else {\n url = wo$(element).data('embed-url');\n format = wo$(element).data('embed-format');\n }\n\n wo$(element).find('input[data-embed-code]').val(format.replace('{url}', url));\n }\n};\n\nexport type CoverageMapType = typeof coverageMap;\n\nfunction main() {\n WhistleOut.CoverageMap = coverageMap;\n WhistleOut.initWidget = () => coverageMap.init(wo$('body'));\n WhistleOut.initWidget();\n}\n\nWhistleOut.initModule(import.meta.url, main);\n","export async function initCartoDb() {\n // eslint-disable-next-line import/no-unresolved\n const module = await import('../../../../../js/responsive/maps/cartodb?raw');\n // eslint-disable-next-line no-useless-call, no-eval\n eval.call(null, module.default);\n}\n","/* globals ga */\n\nimport type { WoDataLayerItem } from '../../../Shared/js/@types/WoDataLayer';\nimport { WhistleOutContext } from '../../../Shared/js/common/common';\n\nexport class WhistleOutContextWidget extends WhistleOutContext {\n constructor() {\n super();\n this.scope = 'widget';\n }\n\n pushGtmEvent(category: string, action: string, label: string, value: { nonInteraction: boolean }) {\n try {\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n const data = analyticsClientSideData.data;\n\n this.pushDataLayerItem({\n event: `wo_${category}_${action}`.toLowerCase(),\n customCategory: category,\n customAction: action,\n customLabel: label,\n customValue: isNaN(value as never) ? undefined : +value,\n customCountry: data.country,\n customProductAreaId: data.productAreaId\n });\n } catch (err) {\n this.Rollbar.error(`WhistleOut.pushGtmEvent: category=${category}, action=${action}, label=${label}`, err);\n }\n }\n\n sendPageView(url: string) {\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n const config = analyticsClientSideData.config;\n\n try {\n if (config.trackPageImpression) {\n if ((!url || url.length <= 0) && analyticsClientSideData.data)\n url = analyticsClientSideData.data.trackingUrl;\n\n wo$.each(config.accounts, function (index, account) {\n ga('create', account.accountNumber, { name: account.trackerId, useAmpClientId: true }, 'auto');\n if (account.linkIdTracking) {\n ga(account.trackerId + '.require', 'linkid');\n }\n ga(account.trackerId + '.set', 'anonymizeIp', true);\n if (!url || url.length <= 0) {\n ga(account.trackerId + '.send', 'pageview');\n } else {\n ga(account.trackerId + '.send', 'pageview', {\n page: url\n });\n }\n });\n }\n } catch (err) {\n this.Rollbar.error(`WhistleOut.sendPageView url=${url}`, err);\n }\n }\n\n pushGtmWidgetPageView(url: string) {\n try {\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n const customCountry = analyticsClientSideData.data.country;\n\n if (!url || url.length <= 0) {\n url = analyticsClientSideData.data.trackingUrl;\n }\n\n if (!url || url.length <= 0) url = `${location.pathname}${location.search}`;\n\n const dataLayerValue = {\n event: 'widgetCustomPageView',\n customUrl: url,\n customCountry: customCountry\n };\n\n this.pushDataLayerItem(dataLayerValue);\n } catch (err) {\n this.Rollbar.error('WhistleOut.ushGtmPageView', err);\n }\n }\n\n trackPageView(url?: string) {\n try {\n this.sendPageView(url);\n this.pushGtmWidgetPageView(url);\n } catch (err) {\n this.Rollbar.error(`WhistleOut.trackPageView url=${url}`, err);\n }\n }\n\n encodeHtml(str: string) {\n const el = document.createElement('span');\n el.append(document.createTextNode(str));\n return el.innerHTML;\n }\n\n async init() {\n if (this.isInitRequested) {\n return;\n }\n\n await this.initBase();\n }\n}\n","import '../../../Shared/js/polyfills';\n\nimport { WhistleOutContextWidget as WhistleOutContext } from './common';\nimport { widgetInit } from './widget';\n\n(async () => {\n if (window.WhistleOut.isInitRequested) {\n return;\n }\n\n await import(/* webpackMode: 'eager' */ '../vendor');\n\n // Some properties of window.WhistleOut can be initialised\n // by inline scripts before this main initialisation,\n // so we need to merge it\n window.WhistleOut = Object.assign(new WhistleOutContext(), window.WhistleOut || {});\n\n await window.WhistleOut.init();\n widgetInit();\n})();\n","export function isInViewport(el: HTMLElement) {\n if (window.getComputedStyle(el).display === 'none') {\n return false;\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\n // Based on: https://github.com/Emmaccen/isElementInView/blob/main/view.js\n\n const rect = el.getBoundingClientRect();\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n return rect.bottom > 0 && rect.top >= 0 && rect.top <= viewportHeight;\n}\n","import { pushDataLayerItemWidget } from '../../../Shared/js/utils/datalayer';\nimport * as EventHelper from './utils/EventHelper';\n\nexport function getWidget() {\n return wo$('#widget');\n}\n\nexport function widgetInit() {\n wo$(function () {\n const widget = getWidget();\n if (!widget.length) return;\n\n const controller = {\n resizeTaskId: null,\n resizeTaskAmpId: null,\n init: function () {\n const amp = widget.data('amp').toLowerCase() === 'true';\n const url = widget.data('url');\n\n const startTime = Date.now();\n pushDataLayerItemWidget({\n event: 'widget_load_begin',\n widget_placement: 'iframe'\n });\n\n const el = widget[0];\n\n if (amp) {\n EventHelper.addEventListener([window, el, el.parentElement], 'resize', this.resizeAmp.bind(this));\n EventHelper.addEventListener([window], 'load', this.resizeAmp.bind(this));\n } else {\n EventHelper.addEventListener([window, el, el.parentElement], 'resize', this.resize.bind(this));\n EventHelper.addEventListener([window], 'load', this.resize.bind(this));\n }\n\n wo$.ajax({\n context: this,\n type: 'GET',\n url: url,\n contentType: 'text/html'\n })\n .done(function (data) {\n widget.find('#widget-content').html(data);\n\n WhistleOut.applyPopover();\n WhistleOut.showTracking();\n\n if (WhistleOut.initWidget) {\n WhistleOut.initWidget();\n }\n })\n .fail(function (jqXHR, textStatus, error) {\n widget.find('#widget-content').html(widget.find('#widget-error').html());\n\n WhistleOut.Rollbar.error(\n `ajax error in Widget.js requesting ${url}, status: ${textStatus}, error: ${error}, responseText: ${jqXHR.responseText}`\n );\n\n pushDataLayerItemWidget({\n event: 'widget_error',\n widget_placement: 'iframe',\n error: error\n });\n })\n .always(() => {\n widget.find('#widget-error').remove();\n widget.find('#widget-loading').remove();\n\n const endTime = Date.now();\n pushDataLayerItemWidget({\n event: 'widget_load_end',\n widget_placement: 'iframe',\n duration: (endTime - startTime) / 1000\n });\n\n if (amp) {\n this.resizeAmp();\n } else {\n this.resize();\n }\n });\n },\n\n resize: function () {\n cancelIdleCallback(this.resizeTaskId);\n this.resizeTaskId = requestIdleCallback(this._resize.bind(this), {\n timeout: 300\n });\n },\n\n _resize: function () {\n window.parent.postMessage(\n {\n sentinel: 'whistleout-widget',\n url: document.location.href,\n height: widget.height()\n },\n '*'\n );\n },\n\n resizeAmp: function () {\n cancelIdleCallback(this.resizeTaskAmpId);\n this.resizeTaskAmpId = requestIdleCallback(this._resizeAmp.bind(this), {\n timeout: 300\n });\n },\n\n _resizeAmp: function () {\n window.parent.postMessage(\n {\n sentinel: 'amp',\n type: 'embed-size',\n height: widget.height()\n },\n '*'\n );\n }\n };\n\n controller.init();\n });\n}\n"],"names":["addEventListener","elements","events","handler","action","eventsArray","split","i","length","element","j","event","_addOrRemoveListener","isObject","now","toNumber","nativeMax","Math","max","nativeMin","min","module","exports","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","undefined","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","timeWaiting","remainingWait","debounced","isInvoking","arguments","this","leadingEdge","clearTimeout","cancel","flush","root","Date","instances","L","isVisible","el","window","getComputedStyle","display","coverageMap","loadLibraries","callback","supported","WhistleOut","applySelectPicker","wo$","eval","call","default","initCartoDb","removeMap","remove","init","page","mapContainers","find","document","ready","mapsNotInitialized","each","mapContainer","updateWidgetUrl","off","on","e","focusAndSelect","currentTarget","triggerPopoverNotification","placeholder","onMapActivateClick","doInit","viewportChanged","closest","trackEvent","removeClass","attr","map","isAmp","getAttribute","toLowerCase","message","Object","assign","height","body","scrollHeight","type","sentinel","url","location","href","parent","postMessage","mapsNotInitilized","data","showMaps","lat","lng","label","instanceId","nbnMapElement","showNbnMap","get","adslMapElement","showAdslMap","mobileMapElement","showMobileMap","onTabClick","instance","targetHref","nbnMap","_onResize","adslMap","mobileMap","createMapBoxGl","styleId","getSiteConfiguration","mapBoxStyle","createMapboxVectorLayer","createMap","formattedAddress","mapGl","id","center","zoom","attributionControl","scrollWheelZoom","zoomControl","fullscreenControl","tap","createAttribution","addTo","setMobileOptions","shouldShowCurrentLocation","createAddressMarker","bindPopup","onZoomEnd","attribution","control","addAttribution","mapBoxAccessToken","mapboxGL","accessToken","style","markerIconUrl","redIcon","Icon","iconUrl","shadowUrl","iconSize","iconAnchor","popupAnchor","shadowSize","marker","icon","updateEmbedUrls","getZoom","mapBoxGl","nbnCoLayer","layerGroup","addLayer","tileLayer","nbnTileLayer","exchanges","exchangeIconUrl","exchangeIcon","showCurrentLocation","exchange","name","path","polyline","color","opacity","weight","boundary","polygon","Polygon","fillOpacity","mobileMapContainer","providers","mapboxLayers","reloadMobileLayers","onSublayerChange","onProviderChange","checked","setAttribute","removeAttribute","networks","network","push","join","forEach","p","selectedIndex","checkboxes","selected","val","addClass","container","splice","getMapboxMap","isStyleLoaded","loadMapBoxLayers","index","value","getLayer","removeLayer","getSource","removeSource","reverse","option","fillColor","layer","layers","v","values","source","addSource","paint","isMobileDevice","dragging","disable","messagebox","timeout","show","queryString","ampUrl","updateQueryStringParameter","format","is","replace","initModule","CoverageMap","initWidget","WhistleOutContextWidget","constructor","super","scope","pushGtmEvent","category","getAnalyticsClientSideData","pushDataLayerItem","customCategory","customAction","customLabel","customValue","isNaN","customCountry","country","customProductAreaId","productAreaId","err","Rollbar","error","sendPageView","analyticsClientSideData","config","trackPageImpression","trackingUrl","accounts","account","ga","accountNumber","trackerId","useAmpClientId","linkIdTracking","pushGtmWidgetPageView","pathname","search","dataLayerValue","customUrl","trackPageView","encodeHtml","str","createElement","append","createTextNode","innerHTML","isInitRequested","initBase","widget","isInViewport","rect","getBoundingClientRect","viewportHeight","innerHeight","documentElement","clientHeight","bottom","top","getWidget","widgetInit","resizeTaskId","resizeTaskAmpId","amp","startTime","widget_placement","parentElement","resizeAmp","bind","resize","ajax","context","contentType","done","html","applyPopover","showTracking","fail","jqXHR","textStatus","responseText","always","endTime","duration","cancelIdleCallback","requestIdleCallback","_resize","_resizeAmp"],"sourceRoot":""}