{"version":3,"sources":["webpack://mailgo/../src/mailgo.scss","webpack://mailgo/../node_modules/css-loader/dist/runtime/api.js","webpack://mailgo/../src/mailgo.scss?81f2","webpack://mailgo/../src/constants.ts","webpack://mailgo/../src/utils.ts","webpack://mailgo/../src/mailgo.ts","webpack://mailgo/../src/mobile-detect.ts","webpack://mailgo/./mailgo.dist.ts","webpack://mailgo/webpack/bootstrap","webpack://mailgo/webpack/runtime/make namespace object","webpack://mailgo/webpack/startup"],"names":["___CSS_LOADER_EXPORT___","___CSS_LOADER_API_IMPORT___","i","push","module","id","exports","cssWithMappingToString","list","toString","this","map","item","content","concat","join","modules","mediaQuery","dedupe","alreadyImportedModules","length","_i","result","MAILTO","MAILGO","TEL","CALLTO","SMS","MAILGO_MAIL","MAILGO_TEL","MAILGO_SMS","CLASSIC","LESS_SPAM","spanHTMLTag","aHTMLTag","pHTMLTag","notNumber","RegExp","leadingZeros","validateEmail","email","test","validateEmails","arr","every","copyToClipboard","str","el","document","createElement","value","setAttribute","style","position","left","body","appendChild","selected","getSelection","rangeCount","getRangeAt","select","execCommand","removeChild","removeAllRanges","addRange","setFocusLoop","ref","modal","querySelector","addEventListener","leaveLastLink","leaveFirstLink","e","code","shiftKey","preventDefault","target","closest","focus","strings","config","activeMailgoType","modalMailto","modalTel","url","href","lessSpamHref","mail","cc","bcc","subject","bodyMail","customActionText","customActionTitle","customActionUrl","tel","msg","telegramUsername","skypeUsername","title","titleTel","detailCc","detailBcc","detailSubject","detailBody","detailMsg","ccValue","bccValue","subjectValue","bodyValue","msgValue","activatedLink","gmail","outlook","yahoo","open","telegram","wa","skype","call","copyMail","copyTel","customAction","mailgoCSS","require","lang","defaultStrings","translations","isMobile","mailtoEnabled","telEnabled","smsEnabled","desktopEnabled","mobileEnabled","validateEmailConfig","validateTelConfig","showFooterConfig","loadCSSConfig","mailgoInit","navigator","userAgent","desktop","mobile","mailgoSetLanguage","mailgoExists","getElementById","display","classList","add","dark","enableDarkMode","disableDarkMode","modalBackground","className","modalContent","details","ccSpan","createTextNode","cc_","bccSpan","bcc_","subjectSpan","subject_","bodySpan","body_","open_in_","gmailSpan","mailgoConfigAttributeEnabled","outlookSpan","yahooSpan","openSpan","_default","copy","showFooter","byElement","hideMailgo","mailgoTelExists","detailsTel","msgSpan","telegramSpan","waSpan","whatsapp","skypeSpan","callSpan","_as_default","mailgoClickListener","event","contains","mailgoIsShowing","path","composedPath","forEach","element","HTMLDocument","Window","localMailgoType","getMailgoTypeByElement","activeMailgoModalType","type","mailgoPreRender","mailgoElementOrUrl","mailgoElement","text","maxLength","installation","getAttribute","validateUrl","decodeURIComponent","split","trim","urlParams","URL","searchParams","get","error","console","log","encodeURIComponent","parameters","buildLessSpamHref","substr","validateTel","hasAttribute","mailgoRender","textContent","openGmail","openOutlook","openYahooMail","openDefault","openCustomAction","openWhatsApp","openTelegram","openSkype","showMailgo","mailgoKeydown","urlString","gmailUrl","window","startingOutlookUrl","office365","outlookUrl","yahooUrl","tgUrl","skypeUrl","whatappTel","replace","waUrl","location","activeCopy","copied","setTimeout","customActionUrlEncoded","encodeURI","regexValidate","linkElement","elementHref","keyboardEvent","keyCode","setModalDisplay","removeEventListener","getModalDisplay","by","rel","getModalHTMLElement","activeElement","remove","tagName","parentElement","joinedParams","attribute","actions","languageType","languages","htmlLang","documentElement","language","mailgo","mailgoConfig","loadCSS","mailto","sms","mailgoCSSElement","head","mailgoStyle","initEvent","listenerOptions","mailgoCheckRender","mailgoDirectRender","directUrl","mailgoValidateEmail","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","r","Symbol","toStringTag","Object","defineProperty","__webpack_exports__"],"mappings":"sCACA,IACIA,EAD8B,EAAQ,IACZC,EAA4B,SAASC,GAAG,OAAOA,EAAE,MAE/EF,EAAwBG,KAAK,CAACC,EAAOC,GAAI,+hMAAwiM,KAEjlMD,EAAOE,QAAUN,G,6BCEjBI,EAAOE,QAAU,SAAUC,GACzB,IAAIC,EAAO,GAuDX,OArDAA,EAAKC,SAAW,WACd,OAAOC,KAAKC,KAAI,SAAUC,GACxB,IAAIC,EAAUN,EAAuBK,GAErC,OAAIA,EAAK,GACA,UAAUE,OAAOF,EAAK,GAAI,MAAME,OAAOD,EAAS,KAGlDA,KACNE,KAAK,KAKVP,EAAKN,EAAI,SAAUc,EAASC,EAAYC,GACf,iBAAZF,IAETA,EAAU,CAAC,CAAC,KAAMA,EAAS,MAG7B,IAAIG,EAAyB,GAE7B,GAAID,EACF,IAAK,IAAIhB,EAAI,EAAGA,EAAIQ,KAAKU,OAAQlB,IAAK,CAEpC,IAAIG,EAAKK,KAAKR,GAAG,GAEP,MAANG,IACFc,EAAuBd,IAAM,GAKnC,IAAK,IAAIgB,EAAK,EAAGA,EAAKL,EAAQI,OAAQC,IAAM,CAC1C,IAAIT,EAAO,GAAGE,OAAOE,EAAQK,IAEzBH,GAAUC,EAAuBP,EAAK,MAKtCK,IACGL,EAAK,GAGRA,EAAK,GAAK,GAAGE,OAAOG,EAAY,SAASH,OAAOF,EAAK,IAFrDA,EAAK,GAAKK,GAMdT,EAAKL,KAAKS,MAIPJ,I,oBC/DD,IAAIc,EAAS,EAAQ,IAGjBlB,EAAOE,QADW,iBAAXgB,EACUA,EAEAA,EAAOb,Y,wCCH7B,IAAMc,EAAiB,UACjBC,EAAiB,UACjBC,EAAc,OACdC,EAAiB,UACjBC,EAAc,OAadC,EAA+B,SAC/BC,EAA8B,aAC9BC,EAA8B,aAG9BC,EAAkC,UAClCC,EAAoC,YAGpCC,EAAsB,OACtBC,EAAmB,IACnBC,EAAmB,IAMnBC,EAAoB,IAAIC,OAAO,UAAW,MAC1CC,EAAuB,IAAID,OAAO,MAAO,MCrCzCE,EAAgB,SAACC,GAAD,MAC3B,4JAA4JC,KAC1JD,IAISE,EAAiB,SAACC,GAAD,OAC5BA,EAAIC,MAAML,IASCM,EAAkB,SAACC,GAC9B,IAAIC,EAA0BC,SAASC,cACrC,YAEFF,EAAGG,MAAQJ,EACXC,EAAGI,aAAa,WAAY,IAC5BJ,EAAGK,MAAMC,SAAW,WACpBN,EAAGK,MAAME,KAAO,UAChBN,SAASO,KAAKC,YAAYT,GAC1B,IAAIU,EACFT,SAASU,eAAeC,WAAa,GACjCX,SAASU,eAAeE,WAAW,GAKzC,OAHAb,EAAGc,SACHb,SAASc,YAAY,QACrBd,SAASO,KAAKQ,YAAYhB,KACtBU,IACFT,SAASU,eAAeM,kBACxBhB,SAASU,eAAeO,SAASR,IAC1B,IAMES,EAAe,SAACC,GAC3B,IAAIC,EAAQD,EACZC,EACGC,cAAc,mCACdC,iBAAiB,UAAWC,GAC/BH,EACGC,cAAc,oCACdC,iBAAiB,UAAWE,IAGpBD,EAAgB,SAACE,GAEb,QAAXA,EAAEC,OAAiC,IAAfD,EAAEE,WACxBF,EAAEG,iBAEAH,EAAEI,OACDC,QAAQ,OACRT,cAAc,mBAAmCU,UAI3CP,EAAiB,SAACC,GAEd,QAAXA,EAAEC,OAAiC,IAAfD,EAAEE,WACxBF,EAAEG,iBACAH,EAAEI,OACDC,QAAQ,OACRT,cAAc,kBAAkCU,U,2lHCbvD,IAWIC,EAGAC,EAiBAC,EAGAC,EAA0BC,EAG1BC,EAAUC,EAAcC,EAGxBC,EAAcC,EAAYC,EAAaC,EAAiBC,EAGxDC,EACFC,EACAC,EAGEC,EAAaC,EAAaC,EAA0BC,EAGpDC,EACFC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAGEC,GACFC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GA5EIC,GAAoBC,kBAGtBC,GFzB+B,KE4B7BC,GAAqCC,EAAD,GAWtCC,IAAoB,EAGpBC,IAAyB,EACzBC,IAAsB,EACtBC,IAAsB,EACtBC,IAA0B,EAC1BC,IAAyB,EACzBC,IAA+B,EAC/BC,IAA6B,EAC7BC,IAA4B,EAC5BC,IAAyB,EAsDvBC,GAAa,WAKjB,QACE,GAJFV,GF3H4B,WGf1B,iEAAiExF,KAC/DmG,UAAUC,WAGL,SAEF,iBDwI0B,KAA3B,UAAO5D,SAAP,aAAO,EAAQ6D,WACjBT,GAAiBpD,EAAO6D,QAEnBb,IAAaI,YAIU,KAA1B,UAAOpD,SAAP,aAAO,EAAQ8D,UACjBT,GAAgBrD,EAAO8D,QAEnBd,IAAaK,KAHnB,CAUFU,KAGA,IAAIC,IAAiBjG,SAASkG,eAAetH,GAG7C,GAAIsG,KAAkBe,EAAc,UAElC9D,EAAclC,MACFG,MAAM+F,QAAU,OAC5BhE,EAAY9E,GAAKuB,EACjBuD,EAAYiE,UAAUC,IAAI,WAC1BlE,EAAYhC,aAAa,OAAQ,UACjCgC,EAAYhC,aAAa,WAAY,MACrCgC,EAAYhC,aAAa,kBAAmB,WAG5C,UAAI8B,SAAJ,OAAI,EAAQqE,KACVC,KAEAC,KAIF,IAAIC,EAA+BxG,KACnCwG,EAAgBC,UAAY,eAC5BvE,EAAY3B,YAAYiG,GAGxB,IAAIE,EAA4B1G,KAChC0G,EAAaD,UAAY,kBACzBvE,EAAY3B,YAAYmG,IAGxBvD,EAAQnD,GAAc,WAChB5C,GAAK,UACX+F,EAAMsD,UAAY,UAClBC,EAAanG,YAAY4C,GAGzB,IAAIwD,EAAuB3G,KAC3B2G,EAAQvJ,GAAK,YACbuJ,EAAQF,UAAY,aAEpBpD,EAAWrD,GAAcd,IAChB9B,GAAK,OACd,IAAIwJ,EAAsB5G,GAAchB,GACxC4H,EAAOH,UAAY,QACnBG,EAAOrG,YAAYsG,GAAe9E,EAAQ+E,KAAOhC,GAAegC,OAChEpD,GAAU1D,GAAchB,IAChB5B,GAAK,aACbiG,EAAS9C,YAAYqG,GACrBvD,EAAS9C,YAAYmD,IACrBiD,EAAQpG,YAAY8C,IAEpBC,EAAYtD,GAAcd,IAChB9B,GAAK,QACf,IAAI2J,EAAuB/G,GAAchB,GACzC+H,EAAQN,UAAY,QACpBM,EAAQxG,YAAYsG,GAAe9E,EAAQiF,MAAQlC,GAAekC,QAClErD,GAAW3D,GAAchB,IAChB5B,GAAK,cACdkG,EAAU/C,YAAYwG,GACtBzD,EAAU/C,YAAYoD,IACtBgD,EAAQpG,YAAY+C,IAEpBC,EAAgBvD,GAAcd,IAChB9B,GAAK,YACnB,IAAI6J,EAA2BjH,GAAchB,GAC7CiI,EAAYR,UAAY,QACxBQ,EAAY1G,YACVsG,GAAe9E,EAAQmF,UAAYpC,GAAeoC,YAEpDtD,GAAe5D,GAAchB,IAChB5B,GAAK,kBAClBmG,EAAchD,YAAY0G,GAC1B1D,EAAchD,YAAYqD,IAC1B+C,EAAQpG,YAAYgD,IAEpBC,GAAaxD,GAAcd,IAChB9B,GAAK,SAChB,IAAI+J,EAAwBnH,GAAchB,GAC1CmI,EAASV,UAAY,QACrBU,EAAS5G,YAAYsG,GAAe9E,EAAQqF,OAAStC,GAAesC,SACpEvD,GAAY7D,GAAchB,IAChB5B,GAAK,eACfoG,GAAWjD,YAAY4G,GACvB3D,GAAWjD,YAAYsD,IACvB8C,EAAQpG,YAAYiD,IAEpBkD,EAAanG,YAAYoG,IAGzB3C,GAAQhE,GAAcf,IAChB7B,GAAK,UACX4G,GAAM3B,KAAO,gBACb2B,GAAMmC,UAAUC,IAAI,UACpBpC,GAAMmC,UAAUC,IAAI,WACpBpC,GAAMzD,YACJsG,GAAe9E,EAAQsF,UAAYvC,GAAeuC,WAEpD,IAAIC,EAAyBtH,GAAchB,GAC3CsI,EAAUb,UAAY,QACtBa,EAAU/G,YACRsG,GAAe9E,EAAQiC,OAASc,GAAed,QAEjDA,GAAMzD,YAAY+G,GAEdC,GAA6B,SAAU,UACzCb,EAAanG,YAAYyD,KAI3BC,GAAUjE,GAAcf,IAChB7B,GAAK,YACb6G,GAAQ5B,KAAO,kBACf4B,GAAQkC,UAAUC,IAAI,UACtBnC,GAAQkC,UAAUC,IAAI,aACtBnC,GAAQ1D,YACNsG,GAAe9E,EAAQsF,UAAYvC,GAAeuC,WAEpD,IAAIG,EAA2BxH,GAAchB,GAC7CwI,EAAYf,UAAY,QACxBe,EAAYjH,YACVsG,GAAe9E,EAAQkC,SAAWa,GAAeb,UAEnDA,GAAQ1D,YAAYiH,GAEhBD,GAA6B,SAAU,YACzCb,EAAanG,YAAY0D,KAI3BC,GAAQlE,GAAcf,IAChB7B,GAAK,UACX8G,GAAM7B,KAAO,gBACb6B,GAAMiC,UAAUC,IAAI,UACpBlC,GAAMiC,UAAUC,IAAI,WACpBlC,GAAM3D,YACJsG,GAAe9E,EAAQsF,UAAYvC,GAAeuC,WAEpD,IAAII,EAAyBzH,GAAchB,GAC3CyI,EAAUhB,UAAY,QACtBgB,EAAUlH,YACRsG,GAAe9E,EAAQmC,OAASY,GAAeZ,QAEjDA,GAAM3D,YAAYkH,GAEdF,GAA6B,SAAU,UACzCb,EAAanG,YAAY2D,KAI3BC,GAAOnE,GAAcf,IAChB7B,GAAK,SACV+G,GAAK9B,KAAO,eACZ8B,GAAKgC,UAAUC,IAAI,UACnBjC,GAAKgC,UAAUC,IAAI,aACnB,IAAIsB,EAAwB1H,GAAchB,GAC1C0I,EAASjB,UAAY,QACrBiB,EAASnH,YAAYsG,GAAe9E,EAAQoC,MAAQW,GAAeX,OACnEA,GAAK5D,YAAYmH,GACjBvD,GAAK5D,YACHsG,GAAe9E,EAAQ4F,UAAY7C,GAAe6C,WAGpDjB,EAAanG,YAAY4D,KAGzBK,GAAWxE,GAAcf,IAChB7B,GAAK,SACdoH,GAASnC,KAAO,eAChBmC,GAAS2B,UAAUC,IAAI,UACvB5B,GAAS2B,UAAUC,IAAI,SACvB5B,GAASjE,YAAYsG,GAAe9E,EAAQ6F,MAAQ9C,GAAe8C,OAEnElB,EAAanG,YAAYiE,KAGzBE,GAAe1E,GAAcf,IAChB7B,GAAK,kBAClBsH,GAAarC,KAAO,wBACpBqC,GAAayB,UAAUC,IAAI,UAC3B1B,GAAayB,UAAUC,IAAI,mBACvBmB,GAA6B,SAAU,WACzCb,EAAanG,YAAYmE,SAIO,KAA9B,UAAO1C,SAAP,aAAO,EAAQ6F,cACjBrC,GAAmBxD,EAAO6F,YAGxBrC,IACFkB,EAAanG,YAAYuH,MAI3B/H,SAASO,KAAKC,YAAY2B,GAG1BsE,EAAgBnF,iBAAiB,QAAS0G,IAI5C,IAAIC,IAAoBjI,SAASkG,eAAerH,GAGhD,GAAIsG,KAAe8C,EAAiB,UAElC7F,EAAWnC,MACFG,MAAM+F,QAAU,OACzB/D,EAAS/E,GAAKwB,EACduD,EAASgE,UAAUC,IAAI,WACvBjE,EAASjC,aAAa,OAAQ,UAC9BiC,EAASjC,aAAa,WAAY,MAClCiC,EAASjC,aAAa,kBAAmB,eAGzC,UAAI8B,SAAJ,OAAI,EAAQqE,KACVC,KAEAC,KAIF,IAAIC,EAA+BxG,KACnCwG,EAAgBC,UAAY,eAC5BtE,EAAS5B,YAAYiG,GAGrB,IAAIE,EAA4B1G,KAChC0G,EAAaD,UAAY,kBACzBtE,EAAS5B,YAAYmG,IAGrBtD,EAAWpD,GAAc,WAChB5C,GAAK,cACdgG,EAASqD,UAAY,UACrBC,EAAanG,YAAY6C,GAGzB,IAAI6E,EAA0BjI,KAC9BiI,EAAW7K,GAAK,gBAChB6K,EAAWxB,UAAY,aAEvBhD,GAAYzD,GAAcd,IAChB9B,GAAK,QACf,IAAI8K,EAAuBlI,GAAchB,GACzCkJ,EAAQzB,UAAY,QACpByB,EAAQ3H,YAAYsG,GAAe9E,EAAQqF,OAAStC,GAAesC,SACnEtD,GAAW9D,GAAchB,IAChB5B,GAAK,cACdqG,GAAUlD,YAAY2H,GACtBzE,GAAUlD,YAAYuD,IACtBmE,EAAW1H,YAAYkD,IAEvBiD,EAAanG,YAAY0H,IAGzB7D,GAAWpE,GAAcf,IAChB7B,GAAK,OACdgH,GAAS/B,KAAO,mBAChB+B,GAAS+B,UAAUC,IAAI,UACvBhC,GAAS+B,UAAUC,IAAI,QAGvBhC,GAASjE,MAAM+F,QAAU,OAEzB9B,GAAS7D,YACPsG,GAAe9E,EAAQsF,UAAYvC,GAAeuC,WAEpD,IAAIc,EAA4BnI,GAAchB,GAC9CmJ,EAAa1B,UAAY,QACzB0B,EAAa5H,YACXsG,GAAe9E,EAAQqC,UAAYU,GAAeV,WAEpDA,GAAS7D,YAAY4H,GAEjBZ,GAA6B,SAAU,aACzCb,EAAanG,YAAY6D,KAI3BC,GAAKrE,GAAcf,IAChB7B,GAAK,OACRiH,GAAGhC,KAAO,mBACVgC,GAAG8B,UAAUC,IAAI,UACjB/B,GAAG8B,UAAUC,IAAI,QACjB/B,GAAG9D,YAAYsG,GAAe9E,EAAQsF,UAAYvC,GAAeuC,WACjE,IAAIe,EAAsBpI,GAAchB,GACxCoJ,EAAO3B,UAAY,QACnB2B,EAAO7H,YACLsG,GAAe9E,EAAQsG,UAAYvD,GAAeuD,WAEpDhE,GAAG9D,YAAY6H,GAEXb,GAA6B,SAAU,aACzCb,EAAanG,YAAY8D,KAI3BC,GAAQtE,GAAcf,IAChB7B,GAAK,UACXkH,GAAMjC,KAAO,gBACbiC,GAAM6B,UAAUC,IAAI,UACpB9B,GAAM6B,UAAUC,IAAI,WACpB9B,GAAM/D,YACJsG,GAAe9E,EAAQsF,UAAYvC,GAAeuC,WAEpD,IAAIiB,EAAyBtI,GAAchB,GAC3CsJ,EAAU7B,UAAY,QACtB6B,EAAU/H,YACRsG,GAAe9E,EAAQuC,OAASQ,GAAeR,QAEjDA,GAAM/D,YAAY+H,GAEdf,GAA6B,SAAU,UACzCb,EAAanG,YAAY+D,KAI3BC,GAAOvE,GAAcf,IAChB7B,GAAK,SACVmH,GAAKlC,KAAO,eACZkC,GAAK4B,UAAUC,IAAI,UACnB7B,GAAK4B,UAAUC,IAAI,aACnB,IAAImC,EAAwBvI,GAAchB,GAC1CuJ,EAAS9B,UAAY,QACrB8B,EAAShI,YAAYsG,GAAe9E,EAAQwC,MAAQO,GAAeP,OACnEA,GAAKhE,YAAYgI,GACjBhE,GAAKhE,YACHsG,GAAe9E,EAAQyG,aAAe1D,GAAe0D,cAGvD9B,EAAanG,YAAYgE,KAGzBE,GAAUzE,GAAcf,IAChB7B,GAAK,aACbqH,GAAQpC,KAAO,eACfoC,GAAQ0B,UAAUC,IAAI,UACtB3B,GAAQ0B,UAAUC,IAAI,SACtB3B,GAAQlE,YAAYsG,GAAe9E,EAAQ6F,MAAQ9C,GAAe8C,OAElElB,EAAanG,YAAYkE,SAGS,KAA9B,UAAOzC,SAAP,aAAO,EAAQ6F,cACjBrC,GAAmBxD,EAAO6F,YAGxBrC,IACFkB,EAAanG,YAAYuH,MAI3B/H,SAASO,KAAKC,YAAY4B,GAG1BqE,EAAgBnF,iBAAiB,QAAS0G,IAI5ChI,SAASsB,iBAAiB,QAASoH,MAuBrC,SAASA,GAAoBC,GAE3B,IACG3I,SAASO,KAAKqI,SAASzG,KACvBnC,SAASO,KAAKqI,SAASxG,GAExB,OAAO,EAIT,GAAIyG,KACF,OAAO,EAIT,IAAIC,EACDH,EAAMI,cAAgBJ,EAAMI,gBAC7BA,GAAaJ,EAAM9G,QAwCrB,OAtCIiH,GACFA,EAAKE,SAAQ,SAACC,GACZ,GAAIA,aAAmBC,cAAgBD,aAAmBE,OACxD,OAAO,EAIT,GAAIjE,IAAiBC,IAAcC,GAAY,CAC7C,IAAIgE,EAAkBC,GAAuBJ,GAG7C,GAAIG,EAAiB,OAIfE,EAAqB,UAFzBpH,EAAmBkH,SAEM,aAAG,EAAkBG,KAE9C,GAAID,IAGCpE,IAAiBoE,IAA0B1K,GAC3CuG,IAAcmE,IAA0BzK,GACxCuG,IAAckE,IAA0BxK,GAQzC,OALA6J,EAAM/G,iBAGN4H,GAAgBP,IAET,QAQZ,EAOT,SAASO,GACPC,GACS,UACLC,ED9hBmBC,EAAcC,ECiiBjCL,EAAqB,UAAGrH,SAAH,aAAG,EAAkBqH,KAC1CM,EAAoC,UAAG3H,SAAH,aAAG,EAAkB2H,aAG7D,IAAKN,EAAM,OAAO,EAYlB,GAVkC,iBAAvBE,EAETnH,EAAOmH,GAGPnH,EAAOmH,EAAmBK,aAAa,QACvCJ,EAAgBD,GAIdF,IAAS3K,EAAa,OAmF+C,IAjFvE,GAAIiL,IAAiB9K,EAAS,CACxBgL,GAAYzH,EAAM/D,GACpBiE,EAAOwH,mBAAmB1H,EAAK2H,MAAM,KAAK,GAAGA,MAAM1L,GAAQ,GAAG2L,QACrDH,GAAYzH,EAAM9D,KAC3BgE,EAAOwH,mBAAmB1H,EAAK2H,MAAM,KAAK,GAAGA,MAAMzL,GAAQ,GAAG0L,SAGhE,IAGE,IAAIC,GAFJ9H,EAAM,IAAI+H,IAAI9H,IAEuB+H,aAErC5H,EAAK0H,EAAUG,IAAI,MACnB5H,EAAMyH,EAAUG,IAAI,OACpB3H,EAAUwH,EAAUG,IAAI,WACxB1H,EAAWuH,EAAUG,IAAI,QACzB,MAAOC,GACPC,QAAQC,IAAIF,SAET,GAAIV,IAAiB7K,EAAW,CAGrCwD,EACEkH,EAAcI,aAAa,iBAC3BJ,EAAcI,aAAa,eACvBJ,EAAcI,aAAa,gBAC3B,IACAJ,EAAcI,aAAa,eAC3B,KAEN,IACEzH,EAAM,IAAI+H,IAAI7L,EAASmM,mBAAmBlI,IAC1C,MAAO+H,GACPC,QAAQC,IAAIF,GAGd,IAAII,EAAuB,IAG3BlI,EAAKiH,EAAcI,aAAa,mBAC5BJ,EAAcI,aAAa,mBAC3B,IACAJ,EAAcI,aAAa,kBAC3B,OAGIa,EAAWxN,KAAK,MAAQsF,IAGhCC,EAAMgH,EAAcI,aAAa,oBAC7BJ,EAAcI,aAAa,oBAC3B,IACAJ,EAAcI,aAAa,mBAC3B,OAGKa,EAAWxN,KAAK,OAASuF,IAGlCC,EAAU+G,EAAcI,aAAa,kBAGxBa,EAAWxN,KAAK,WAAawF,IAG1CC,EAAW8G,EAAcI,aAAa,eAGxBa,EAAWxN,KAAK,QAAUyF,GAGxCL,EAAeqI,GACbrM,EAASmM,mBAAmBlI,GAC5BmI,GAQJ,GAHA9H,EAAmB,GACnBC,EAAoB,GACpBC,EAAkB,GACdyE,GAA6B,SAAU,WAAakC,GACtD7G,EAAgB,UACd6G,EAAcI,aAAa,kCADb,QAEdjH,KAEAC,EAAoBD,EDzoBW+G,EDhCU,GE0qBzC/G,GD1oBiB8G,EC2oBf9G,ID1oBO8G,EAAKvL,OAASwL,EACzBD,EAAKkB,OAAO,EAAGjB,EAAY,GAAK,MAChCD,GC6oBA5G,EAAe,UACb2G,EAAcI,aAAa,iCADd,QAC2C/G,EAQ5D,QAJqC,KAAjC,UAAOd,SAAP,aAAO,EAAQ1C,iBACjBgG,GAAsBtD,EAAO1C,eAG3BgG,GAAqB,CAEvB,IAAK7F,EAAe8C,EAAKyH,MAAM,MAC7B,OAAO,EAILxH,IAAO/C,EAAe+C,EAAGwH,MAAM,QAAOxH,EAAK,IAC3CC,IAAQhD,EAAegD,EAAIuH,MAAM,QAAOvH,EAAM,UAIjD,GAAI6G,IAAS1K,EAAY,OAC5B,GAAIgL,IAAiB9K,EAAS,CACxBgL,GAAYzH,EAAM7D,GACpBuE,EAAMgH,mBAAmB1H,EAAK2H,MAAM,KAAK,GAAGA,MAAMxL,GAAK,GAAGyL,QACjDH,GAAYzH,EAAM5D,GAC3BsE,EAAMgH,mBAAmB1H,EAAK2H,MAAM,KAAK,GAAGA,MAAMvL,GAAQ,GAAGwL,QACpDH,GAAYzH,EAAM3D,KAC3BqE,EAAMgH,mBAAmB1H,EAAK2H,MAAM,KAAK,GAAGA,MAAMtL,GAAK,GAAGuL,SAG5D,IAEE,IAAIC,GADJ9H,EAAM,IAAI+H,IAAI9H,IACuB+H,aAGrCpH,EAAMkH,EAAUG,IAAI,QACpB,MAAOC,GACPC,QAAQC,IAAIF,SAET,GAAIV,GAAgB7K,EAAW,CACpCgE,EAAM0G,EAAcI,aAAa,YACjC7G,EAAMyG,EAAcI,aAAa,YAEjC,IACEzH,EAAM,IAAI+H,IAAI3L,EAAMiM,mBAAmB1H,IACvC,MAAOuH,GACPC,QAAQC,IAAIF,GAGd,IAAII,EAAuB,GAGvB1H,GAAK0H,EAAWxN,KAAK,QAAU8F,GAGnCV,EAAeqI,GACbnM,EAAMiM,mBAAmB1H,GACzB2H,GAUJ,QALmC,KAA/B,UAAO1I,SAAP,aAAO,EAAQ6I,eACjBtF,GAAoBvD,EAAO6I,aAIzBtF,KDlxBmB,SAACxC,GAAD,MACzB,2EAA2EvD,KACzEuD,GCixBO8H,CAAY9H,GAAM,OAAO,EAK9BE,EADEwG,GAAiBA,EAAcqB,aAAa,iBAC3BrB,EAAcI,aAAa,iBAE3B,KAKnB3G,EADEuG,GAAiBA,EAAcqB,aAAa,cAC9BrB,EAAcI,aAAa,cAE3B,KAcpB,OATU,QAAN,EAAA7H,SAAA,SAAQqE,MAAQoD,EAActD,UAAUwC,SAAS,QACnDrC,KAEAC,KAIFwE,MAEO,EAoCT,SAASA,KAAwB,MAE3BzB,EAAqB,UAAGrH,SAAH,aAAG,EAAkBqH,KAG9C,QAAKA,IAGDA,IAAS3K,GAEXwE,EAAM6H,YAAczI,EAAKyH,MAAM,KAAKlM,KAAK,MAGrCyJ,GAA6B,SAAU,OAAS/E,GAClDa,EAASlD,MAAM+F,QAAU,QACzBxC,GAAQsH,YAAcxI,EAAGwH,MAAM,KAAKlM,KAAK,OAEzCuF,EAASlD,MAAM+F,QAAU,OAGvBqB,GAA6B,SAAU,QAAU9E,GACnDa,EAAUnD,MAAM+F,QAAU,QAC1BvC,GAASqH,YAAcvI,EAAIuH,MAAM,KAAKlM,KAAK,OAE3CwF,EAAUnD,MAAM+F,QAAU,OAGxBqB,GAA6B,SAAU,YAAc7E,GACvDa,EAAcpD,MAAM+F,QAAU,QAC9BtC,GAAaoH,YAActI,GAE3Ba,EAAcpD,MAAM+F,QAAU,OAG5BqB,GAA6B,SAAU,SAAW5E,GACpDa,GAAWrD,MAAM+F,QAAU,QAC3BrC,GAAUmH,YAAcrI,GAExBa,GAAWrD,MAAM+F,QAAU,OAI7BxB,GAAasG,YAAcpI,EAC3B8B,GAAavB,MAAQN,EACrB6B,GAAavE,MAAM+F,QAAUtD,EAAmB,QAAU,OAG1DoB,GAAM3C,iBAAiB,QAAS4J,IAEhChH,GAAQ5C,iBAAiB,QAAS6J,IAElChH,GAAM7C,iBAAiB,QAAS8J,IAEhChH,GAAK9C,iBAAiB,QAAS+J,IAE/B5G,GAASnD,iBAAiB,QAASuG,IAEnClD,GAAarD,iBAAiB,QAASgK,KAGhC/B,IAAS1K,IAEhBwE,EAAS4H,YAAcjI,EAEnBwE,GAA6B,SAAU,QAAUvE,GACnDS,GAAUtD,MAAM+F,QAAU,QAC1BpC,GAASkH,YAAchI,GAEvBS,GAAUtD,MAAM+F,QAAU,OAI5B7B,GAAGhD,iBAAiB,QAASiK,IAGzBrI,GACFlD,SAASkG,eAAe,QAAQ9F,MAAM+F,QAAU,QAChD9B,GAAS/C,iBAAiB,QAASkK,KAEnCxL,SAASkG,eAAe,QAAQ9F,MAAM+F,QAAU,OAGlD5B,GAAMjD,iBAAiB,QAASmK,IAEhCjH,GAAKlD,iBAAiB,QAAS+J,IAE/B3G,GAAQpD,iBAAiB,QAASuG,KAIpC6D,GAAWnC,GAGXvJ,SAASsB,iBAAiB,UAAWqK,KAE9B,GAIT,IAAMT,GAAY,SAACvC,GAAwB,MAGrCiD,EAFJjD,EAAM/G,iBAGN,IAAIiI,EAAoC,UAAG3H,SAAH,aAAG,EAAkB2H,aAE7D,GAAIA,IAAiB9K,EACnB,IACE6M,EAAYvJ,EAAI5E,WAChB,MAAOgE,GACPmK,EAAYtJ,OAELuH,IAAiB7K,IAC1B4M,EAAYrJ,GAId,IAAIsJ,EACF,mDACAnB,mBAAmBkB,GAGrBE,OAAO1H,KAAKyH,EAAU,SAAU,wBAGhC7D,MAGImD,GAAc,SAACxC,GAAwB,MAC3CA,EAAM/G,iBAGN,IAAImK,EACF,8DAGF,UAAI9J,SAAJ,OAAI,EAAQ+J,YACVD,EACE,oEAIJ,IAAIE,EAAqBF,EAAqBrB,mBAAmBlI,GAG7DG,IACFsJ,EAAaA,EAAWnO,OAAO,YAAc4M,mBAAmB/H,KAG9DC,IACFqJ,EAAaA,EAAWnO,OAAO,SAAW4M,mBAAmB9H,KAI/DkJ,OAAO1H,KAAK6H,EAAY,SAAU,wBAGlCjE,MAGIoD,GAAgB,SAACzC,GACrBA,EAAM/G,iBAGN,IAAIsK,EAAmB,sCAAwC1J,EAG3DG,IACFuJ,EAAWA,EAASpO,OAAO,YAAc4M,mBAAmB/H,KAE1DC,IACFsJ,EAAWA,EAASpO,OAAO,SAAW4M,mBAAmB9H,KAI3DkJ,OAAO1H,KAAK8H,EAAU,SAAU,wBAGhClE,MAGIwD,GAAe,SAAC7C,GAIpB,GAHAA,EAAM/G,iBAGFsB,EAAkB,CAEpB,IAAIiJ,EAAgB,gBAAkBzB,mBAAmBxH,GAGzD4I,OAAO1H,KAAK+H,EAAO,SAAU,wBAG7BnE,OAIEyD,GAAY,SAAC9C,GACjBA,EAAM/G,iBAEN,IAGIwK,EAAmB,SAAW1B,mBAHdvH,GAAiBH,GAMrC8I,OAAO1H,KAAKgI,EAAU,SAAU,wBAGhCpE,MAGIuD,GAAe,SAAC5C,GACpBA,EAAM/G,iBAGN,IAAIyK,EAAarJ,EAAIsJ,QAAQlN,EAAW,IAAIkN,QAAQhN,EAAc,IAG9DiN,EAAgB,iBAAmB7B,mBAAmB2B,GAGtDpJ,IACFsJ,EAAQA,EAAMzO,OAAO,SAAW4M,mBAAmBzH,KAIrD6I,OAAO1H,KAAKmI,EAAO,SAAU,wBAG7BvE,MAGIqD,GAAc,SAAC1C,GAAwB,MAC3CA,EAAM/G,iBAEN,IAAIiI,EAAoC,UAAG3H,SAAH,aAAG,EAAkB2H,aAGzDA,IAAiB9K,EACnB+M,OAAOU,SAASlK,KAAOA,EACduH,IAAiB7K,IAE1B8M,OAAOU,SAASlK,KAAOC,GAGzByF,MAGIH,GAAO,SAACc,GAIW,MACjB8D,GAJN9D,EAAM/G,iBAGFiH,SAGuB,UAAG3G,SAAH,aAAG,EAAkBqH,QAEjC3K,GAEXiB,EAAgB2C,GAChBiK,EAAahI,KAGb5E,EAAgBmD,GAChByJ,EAAa/H,IAGf+H,EAAWxB,YAAcjJ,EAAQ0K,QAAU3H,GAAe2H,OAC1DC,YAAW,WACTF,EAAWxB,YAAcjJ,EAAQ6F,MAAQ9C,GAAe8C,KAExDG,OACC,OAIDsD,GAAmB,SAAC3C,GAGxB,GAFAA,WAAO/G,iBAEHmB,EAAiB,CACnB,IAAM6J,EAAyBC,UAAU9J,GAEzC+I,OAAO1H,KAAKwI,EAAwB,SAAU,wBAGhD5E,MAII+B,GAAc,SAAC1H,GAAuC,IAA1BkH,EAA0B,uDAAXhL,EAC3CuO,EAAgB,IAAIzN,OAAO,IAAMkK,EAAO,SAAU,MACtD,OAAOuD,EAAcrN,KAAK4C,IAI5B,SAASgH,GAAuBJ,GAAyC,UACjE8D,EAAc9D,EACpB,IAAK8D,EAAYjD,aACf,OAAO,KAGT,IAAIkD,EAAsBD,EAAYjD,aAAa,QAGnD,aAAIb,EAAQ7C,iBAAZ,OAAI,EAAmBwC,SFjoCQ,aEkoC7B,OAAO,KAIT,GAAIoE,GAAW,UAAI/D,EAAQ7C,iBAAZ,OAAI,EAAmBwC,SAAS,UAAW,CACxD,GAAImB,GAAYiD,EAAazO,IAAWwL,GAAYiD,EAAaxO,GAE/D,MAAO,CACL+K,KAAM3K,EACNiL,aAAc9K,GAEX,GACLgL,GAAYiD,EAAavO,IACzBsL,GAAYiD,EAAatO,GAGzB,MAAO,CACL6K,KAAM1K,EACNgL,aAAc9K,GAEX,GAAIgL,GAAYiD,EAAarO,GAElC,MAAO,CACL4K,KAAMzK,EACN+K,aAAc9K,GAKpB,GAAoB,YAAhBiO,GAAA,UAA6B/D,EAAQ7C,iBAArC,OAA6B,EAAmBwC,SAAS,UAAW,CAEtE,GACEK,EAAQ8B,aAAa,iBACrB9B,EAAQ8B,aAAa,eAGrB,MAAO,CACLxB,KAAM3K,EACNiL,aAAc7K,GAEX,GAAIiK,EAAQ8B,aAAa,YAE9B,MAAO,CACLxB,KAAM1K,EACNgL,aAAc7K,GAEX,GAAIiK,EAAQ8B,aAAa,YAE9B,MAAO,CACLxB,KAAMzK,EACN+K,aAAc7K,GAKpB,OAAO,KAOT,IAAM2M,GAAgB,SAACsB,GAErB,GAAIpE,KAAmB,OACjBU,EAAqB,UAAGrH,SAAH,aAAG,EAAkBqH,KAE9C,GAAIA,IAAS3K,EACX,OAAQqO,EAAcC,SACpB,KAAK,GAGH,OADAlF,MACO,EACT,KAAK,GAGH,OADAkD,MACO,EACT,KAAK,GAGH,OADAC,MACO,EACT,KAAK,GAGH,OADAC,MACO,EACT,KAAK,GACL,KAAK,GAGH,OADAC,MACO,EACT,KAAK,GAGH,OADAxD,MACO,EACT,KAAK,GAGH,OADAyD,MACO,EACT,QACE,OAAO,OAEN,GAAI/B,IAAS1K,EAClB,OAAQoO,EAAcC,SACpB,KAAK,GAGH,OADAlF,MACO,EACT,KAAK,GAGH,OADAwD,MACO,EACT,KAAK,GAGH,OADAD,MACO,EACT,KAAK,GAGH,OADAE,MACO,EACT,KAAK,GACL,KAAK,GAGH,OADAJ,MACO,EACT,KAAK,GAGH,OADAxD,MACO,EACT,QACE,OAAO,GAIf,OAAO,GAIH6D,GAAa,SAACnC,GAElB4D,GAAgB5D,EAAM,SAIlBvB,GAAa,WAEjBmF,GAAgBvO,EAAa,QAC7BuO,GAAgBtO,EAAY,QAG5BmB,SAASoN,oBAAoB,UAAWzB,KAIpC9C,GAAkB,WACtB,OACG3D,IAAkD,SAAjCmI,GAAgBzO,KAChCuG,IAAcC,KAA+C,SAAhCiI,GAAgBxO,IAI7CkJ,GAAY,WAEhB,IAAIuF,EAAsBrN,GAAcf,GAOxC,OANAoO,EAAGhL,KAAO,sCACVgL,EAAG5G,UAAY,OACf4G,EAAGzL,OAAS,SACZyL,EAAGC,IAAM,sBACTD,EAAG9M,YAAYsG,GAAe,eAEvBwG,GAIHrN,GAAgB,eAACgJ,EAAD,uDAAmB,MAAnB,OACpBjJ,SAASC,cAAcgJ,IAGnBnC,GAAiB,SAACmC,GAAD,OACrBjJ,SAAS8G,eAAemC,IAGpBuE,GAAsB,WAAyC,IAAxCjE,EAAwC,uDAAhB3K,EACnD,OAAI2K,IAAS1K,EACJuD,EAEAD,GAKLkL,GAAkB,eAAClM,EAAD,uDAAwBvC,EAAxB,OACtB4O,GAAoBrM,GAAKf,MAAM+F,SAG3BgH,GAAkB,WAGb,IAFThM,EAES,uDAFcvC,EACvBsB,EACS,uCACLkB,EAAQoM,GAAoBrM,GAE5BC,IACFA,EAAMhB,MAAM+F,QAAUjG,EAER,SAAVA,GAEF8D,GAAgBhE,SAASyN,cACzBrM,EAAMjB,aAAa,cAAe,SAGlCiB,EAAMjB,aAAa,WAAY,KAC/BiB,EAAMW,QACNb,EAAaE,KAEbA,EAAMjB,aAAa,cAAe,QAGlCiB,EAAMjB,aAAa,WAAY,MAC/B6D,GAAcjC,WAMdwE,GAAiB,WAAM,MAEvBgD,EAAqB,UAAGrH,SAAH,aAAG,EAAkBqH,KAC1CA,GACFiE,GAAoBjE,GAAMnD,UAAUC,IAAI,WAKtCG,GAAkB,WAAM,MAExB+C,EAAqB,UAAGrH,SAAH,aAAG,EAAkBqH,KAC1CA,GACFiE,GAAoBjE,GAAMnD,UAAUsH,OAAO,WAKzC3E,GAAe,SACnBhJ,GAIA,IAFA,IAAI+I,EAAO,GAEJ/I,GAAI,CAGT,GAFA+I,EAAK3L,KAAK4C,GAES,SAAfA,EAAG4N,QAGL,OAFA7E,EAAK3L,KAAK6C,UACV8I,EAAK3L,KAAK2O,QACHhD,EAGT/I,EAAKA,EAAG6N,gBAKNhD,GAAoB,SAACrB,EAAcoB,GAEvC,GADApI,EAAegH,EACXoB,GAAcA,EAAWvM,OAAS,EAAG,CACvC,IAAIyP,EAAelD,EAAW5M,KAAK,KACnCwE,EAAeA,EAAazE,OAAO,IAAM+P,GAE3C,OAAOtL,GAIHiF,GAA+B,SACnC+B,EACAuE,GAGA,IAAK7L,EACH,OAAO,EAIT,GAAa,WAATsH,EAAmB,SACrB,GAAItH,IAAU,UAACA,SAAD,QAAC,EAAQ8L,SACrB,OAAO,EAGT,GACE9L,GACAA,EAAO8L,UACwC,KAAzC,QAAN,EAAA9L,SAAA,eAAQ8L,QAAQD,IAEhB,OAAO,OAEJ,GAAa,WAATvE,EAAmB,SAG5B,GAAItH,IAAU,UAACA,SAAD,QAAC,EAAQ2E,SACrB,OAAO,EAGT,GACE3E,GACAA,EAAO2E,UACwC,KAAzC,QAAN,EAAA3E,SAAA,eAAQ2E,QAAQkH,IAEhB,OAAO,EAIX,OAAO,GAIH9H,GAAoB,WAAc,MAClCgI,EAAe,eAGnB,GACQ,QAAN,EAAA/L,SAAA,SAAQ6C,OACiD,IAAxDmJ,UAAsChM,EAAO6C,MAE9CA,GAAO7C,EAAO6C,KACdkJ,EAAe,kBACV,CAGL,IAAIE,EAAmBlO,SAASmO,gBAAgBrJ,KAG/CmJ,WAAsC,SAACG,GAClC,IAAI/O,OAAO,IAAM+O,EAAU,MAAM3O,KAAKyO,KACxCpJ,GAAOsJ,EACPJ,EAAe,gBAQrB,OAFAhM,EAAWgD,EAAoCF,IAExCkJ,GAqBT,SAASK,GAAOC,GACd,IAAI,MAQF,GAHArM,EAAS,EAAH,KAAQqM,IAAkB,UAACxC,cAAD,eAAiBwC,eAAgB,MAG3C,oBAAXxC,OAAwB,eA4BV,EAAvB,QA1B+B,KAA3B,UAAO7J,SAAP,aAAO,EAAQsM,WACjB7I,GAAgBzD,EAAOsM,cAIK,KAA1B,UAAOtM,SAAP,aAAO,EAAQuM,UACjBtJ,GAAgBjD,EAAOuM,aAIE,KAAvB,UAAOvM,SAAP,aAAO,EAAQe,OACjBmC,GAAalD,EAAOe,UAIK,KAAvB,UAAOf,SAAP,aAAO,EAAQwM,OACjBrJ,GAAanD,EAAOwM,KAIlB/I,IAjDU,WAClB,IAAK1F,SAASkG,eAAe,gBAAiB,CAE5C,IAAIwI,EAAqCzO,GACvC,SAEFyO,EAAiBrR,GAAK,eACtBqR,EAAiBnF,KAAO,WACxBmF,EAAiBlO,YAAYsG,GAAelC,KAC5C5E,SAAS2O,KAAKnO,YAAYkO,IA0CtBE,GAIF,UAAI3M,SAAJ,OAAI,EAAQ4M,UACV,UAAI5M,SAAJ,OAAI,EAAQ6M,gBAEV9O,SAASsB,iBACPW,EAAO4M,UACPlJ,GACA1D,EAAO6M,iBAIT9O,SAASsB,iBAAiBW,EAAO4M,UAAWlJ,SAG9CA,KAGF,OAAO,GAET,MAAO4E,GACPC,QAAQC,IAAIF,GAEd,OAAO,EAIa,oBAAXuB,SACRA,OAAezC,uBAAyBA,GACxCyC,OAAepD,oBAAsBA,GACrCoD,OAAeiD,kBAAoBrG,GACnCoD,OAAetC,gBAAkBA,GACjCsC,OAAekD,mBAzvBlB,SAA4BC,GAI1B,OAFAZ,KAEItE,GAAYkF,EAAW1Q,IAAWwL,GAAYkF,EAAWzQ,IAC3D0D,EAAmB,CACjBqH,KAAM3K,EACNiL,aAAc9K,GAETyK,GAAgByF,OAEvBlF,GAAYkF,EAAWxQ,IACvBsL,GAAYkF,EAAWvQ,IACvBqL,GAAYkF,EAAWtQ,MAEvBuD,EAAmB,CACjBqH,KAAM1K,EACNgL,aAAc9K,GAETyK,GAAgByF,KAuuBxBnD,OAAed,aAAeA,GAC9Bc,OAAeoD,oBA1ElB,SAA6B1P,GAC3B,OAAOD,EAAcC,IA0EpBsM,OAAeuC,OAASA,IAY3B,GEpkDqB,CACnBQ,UAAW,uBCLTM,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAahS,QAGrB,IAAIF,EAAS+R,EAAyBE,GAAY,CACjDhS,GAAIgS,EAEJ/R,QAAS,IAOV,OAHAkS,EAAoBH,GAAUjS,EAAQA,EAAOE,QAAS8R,GAG/ChS,EAAOE,QCpBf8R,EAAoBK,EAAI,SAASnS,GACX,oBAAXoS,QAA0BA,OAAOC,aAC1CC,OAAOC,eAAevS,EAASoS,OAAOC,YAAa,CAAEzP,MAAO,WAE7D0P,OAAOC,eAAevS,EAAS,aAAc,CAAE4C,OAAO,KCFvD,IAAI4P,EAAsBV,EAAoB,K","file":"mailgo.min.js","sourcesContent":["// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".m-modal{position:fixed;top:0;right:0;bottom:0;left:0;justify-content:center;align-items:center;flex-direction:column;overflow:hidden;font-size:16.5px;z-index:10000}.m-modal p,.m-modal span,.m-modal strong,.m-modal a{margin:0;padding:0;font-size:100%;line-height:1;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";text-rendering:optimizeLegibility}.m-modal strong{font-weight:700}.m-modal .m-modal-back{position:absolute;z-index:10001;top:0;right:0;bottom:0;left:0;background-color:#20232a;opacity:.8}.m-modal .m-modal-content{position:relative;z-index:10002;box-sizing:content-box;text-align:center;overflow:hidden;min-width:200px;max-width:240px;background-color:#fff;opacity:.95;border-radius:20px;box-shadow:0 3px 20px rgba(32,35,42,.5);border:3px solid #333;color:#4a4a4a;display:flex;flex-direction:column;overflow:auto;padding:24px;transition:.5s box-shadow}.m-modal .m-modal-content:hover,.m-modal .m-modal-content:focus,.m-modal .m-modal-content:active{opacity:1}.m-modal .m-modal-content .m-title{margin-bottom:8px;overflow:hidden;white-space:pre-line;text-overflow:ellipsis;line-height:1.2em}.m-modal .m-modal-content .m-details{margin-bottom:10px}.m-modal .m-modal-content .m-details p{white-space:pre-line;font-size:12px;margin-top:3px;margin-bottom:3px}.m-modal .m-modal-content a{cursor:pointer;padding:10px;color:#4a4a4a;border-radius:20px;text-decoration:none}.m-modal .m-modal-content a.m-gmail{color:#c0372a}.m-modal .m-modal-content a.m-gmail:hover,.m-modal .m-modal-content a.m-gmail:focus,.m-modal .m-modal-content a.m-gmail:active{background-color:rgba(192,55,42,.08);color:#c0372a}.m-modal .m-modal-content a.m-outlook{color:#0967aa}.m-modal .m-modal-content a.m-outlook:hover,.m-modal .m-modal-content a.m-outlook:focus,.m-modal .m-modal-content a.m-outlook:active{background-color:rgba(9,103,170,.08);color:#0967aa}.m-modal .m-modal-content a.m-yahoo{color:#4a00a0}.m-modal .m-modal-content a.m-yahoo:hover,.m-modal .m-modal-content a.m-yahoo:focus,.m-modal .m-modal-content a.m-yahoo:active{background-color:rgba(74,0,160,.08);color:#4a00a0}.m-modal .m-modal-content a.m-tg{color:#086da0}.m-modal .m-modal-content a.m-tg:hover,.m-modal .m-modal-content a.m-tg:focus,.m-modal .m-modal-content a.m-tg:active{background-color:rgba(8,109,160,.08);color:#086da0}.m-modal .m-modal-content a.m-wa{color:#067466}.m-modal .m-modal-content a.m-wa:hover,.m-modal .m-modal-content a.m-wa:focus,.m-modal .m-modal-content a.m-wa:active{background-color:rgba(6,116,102,.08);color:#067466}.m-modal .m-modal-content a.m-skype{color:#076d92}.m-modal .m-modal-content a.m-skype:hover,.m-modal .m-modal-content a.m-skype:focus,.m-modal .m-modal-content a.m-skype:active{background-color:rgba(7,109,146,.08);color:#076d92}.m-modal .m-modal-content a.m-copy{padding:16px 10px;font-size:16px}.m-modal .m-modal-content a.m-default:hover,.m-modal .m-modal-content a.m-default:focus,.m-modal .m-modal-content a.m-default:active,.m-modal .m-modal-content a.m-copy:hover,.m-modal .m-modal-content a.m-copy:focus,.m-modal .m-modal-content a.m-copy:active{background-color:rgba(0,0,0,.08);color:#4a4a4a}.m-modal .m-modal-content a.m-custom-action{color:#0b790b}.m-modal .m-modal-content a.m-custom-action:hover,.m-modal .m-modal-content a.m-custom-action:focus,.m-modal .m-modal-content a.m-custom-action:active{background-color:rgba(11,121,11,.08);color:#0b790b}.m-modal .m-modal-content a.m-by{font-size:12px;margin-top:.8rem;padding:5px;color:#4a4a4a}.m-modal .m-modal-content a.m-by:hover,.m-modal .m-modal-content a.m-by:focus,.m-modal .m-modal-content a.m-by:active{color:#3d3d3d}.m-modal .m-modal-content .w-500{font-weight:500}.m-modal.m-dark .m-modal-content{background-color:#20232a}.m-modal.m-dark .m-modal-content,.m-modal.m-dark .m-modal-content p,.m-modal.m-dark .m-modal-content p span,.m-modal.m-dark .m-modal-content strong{color:#fff}.m-modal.m-dark .m-modal-content a{color:#eaeaea}.m-modal.m-dark .m-modal-content a:not(.m-by):hover,.m-modal.m-dark .m-modal-content a:not(.m-by):focus,.m-modal.m-dark .m-modal-content a:not(.m-by):active{background-color:rgba(134,134,134,.08);color:#eaeaea}.m-modal.m-dark .m-modal-content a.m-gmail{color:#e07d73}.m-modal.m-dark .m-modal-content a.m-gmail:hover,.m-modal.m-dark .m-modal-content a.m-gmail:focus,.m-modal.m-dark .m-modal-content a.m-gmail:active{background-color:rgba(224,125,115,.08);color:#e07d73}.m-modal.m-dark .m-modal-content a.m-outlook{color:#4c9cd7}.m-modal.m-dark .m-modal-content a.m-outlook:hover,.m-modal.m-dark .m-modal-content a.m-outlook:focus,.m-modal.m-dark .m-modal-content a.m-outlook:active{background-color:rgba(76,156,215,.08);color:#4c9cd7}.m-modal.m-dark .m-modal-content a.m-yahoo{color:#ac88d3}.m-modal.m-dark .m-modal-content a.m-yahoo:hover,.m-modal.m-dark .m-modal-content a.m-yahoo:focus,.m-modal.m-dark .m-modal-content a.m-yahoo:active{background-color:rgba(172,136,211,.08);color:#ac88d3}.m-modal.m-dark .m-modal-content a.m-tg{color:#4cabdb}.m-modal.m-dark .m-modal-content a.m-tg:hover,.m-modal.m-dark .m-modal-content a.m-tg:focus,.m-modal.m-dark .m-modal-content a.m-tg:active{background-color:rgba(76,171,219,.08);color:#4cabdb}.m-modal.m-dark .m-modal-content a.m-wa{color:#4cd2c0}.m-modal.m-dark .m-modal-content a.m-wa:hover,.m-modal.m-dark .m-modal-content a.m-wa:focus,.m-modal.m-dark .m-modal-content a.m-wa:active{background-color:rgba(76,210,192,.08);color:#4cd2c0}.m-modal.m-dark .m-modal-content a.m-skype{color:#4cc7f4}.m-modal.m-dark .m-modal-content a.m-skype:hover,.m-modal.m-dark .m-modal-content a.m-skype:focus,.m-modal.m-dark .m-modal-content a.m-skype:active{background-color:rgba(76,199,244,.08);color:#4cc7f4}.m-modal.m-dark .m-modal-content a.m-custom-action{color:#b0ecb0}.m-modal.m-dark .m-modal-content a.m-custom-action:hover,.m-modal.m-dark .m-modal-content a.m-custom-action:focus,.m-modal.m-dark .m-modal-content a.m-custom-action:active{background-color:rgba(176,236,176,.08);color:#b0ecb0}.m-modal.m-dark .m-modal-content a.m-by:hover,.m-modal.m-dark .m-modal-content a.m-by:focus,.m-modal.m-dark .m-modal-content a.m-by:active{color:#fff}\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\n var result = require(\"!!../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!../node_modules/sass-loader/dist/cjs.js!./mailgo.scss\");\n\n if (typeof result === \"string\") {\n module.exports = result;\n } else {\n module.exports = result.toString();\n }\n ","import { MailgoModalType, MailgoInstallationType } from \"mailgo\";\n\n// links\nexport const MAILTO: string = \"mailto:\";\nexport const MAILGO: string = \"mailgo:\";\nexport const TEL: string = \"tel:\";\nexport const CALLTO: string = \"callto:\";\nexport const SMS: string = \"sms:\";\n\n// deep linking\nexport const outlookDeepLink: string = \"ms-outlook://\";\n\n// no mailgo class\nexport const NO_MAILGO: string = \"no-mailgo\";\n\n// responsive settings\nexport const DESKTOP: string = \"desktop\";\nexport const MOBILE: string = \"mobile\";\n\n// mailgo modal types\nexport const MAILGO_MAIL: MailgoModalType = \"mailgo\";\nexport const MAILGO_TEL: MailgoModalType = \"mailgo-tel\";\nexport const MAILGO_SMS: MailgoModalType = \"mailgo-sms\";\n\n// mailgo installation types\nexport const CLASSIC: MailgoInstallationType = \"classic\";\nexport const LESS_SPAM: MailgoInstallationType = \"less-spam\";\n\n// useful html tags\nexport const spanHTMLTag: string = \"span\";\nexport const aHTMLTag: string = \"a\";\nexport const pHTMLTag: string = \"p\";\n\n// default lang\nexport const defaultLang: string = \"en\";\n\n// useful regexp\nexport const notNumber: RegExp = new RegExp(\"[^0-9/]\", \"gi\");\nexport const leadingZeros: RegExp = new RegExp(\"^0+\", \"gi\");\n\n// custom action\nexport const customActionTextMaxLength: number = 20;\n","// validate a single email with regex\nexport const validateEmail = (email: string): boolean =>\n /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(\n email\n );\n\n// validate an array of emails\nexport const validateEmails = (arr: string[]): boolean =>\n arr.every(validateEmail);\n\n// validate a single tel with regex\nexport const validateTel = (tel: string): boolean =>\n /^[+]{0,1}[\\s0-9]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s\\./0-9]*[p]{0,1}[\\s0-9]*$/.test(\n tel\n );\n\n// copy of a string\nexport const copyToClipboard = (str: string): boolean => {\n let el: HTMLTextAreaElement = document.createElement(\n \"textarea\"\n ) as HTMLTextAreaElement;\n el.value = str;\n el.setAttribute(\"readonly\", \"\");\n el.style.position = \"absolute\";\n el.style.left = \"-9999px\";\n document.body.appendChild(el);\n let selected: Range | boolean =\n document.getSelection().rangeCount > 0\n ? document.getSelection().getRangeAt(0)\n : false;\n el.select();\n document.execCommand(\"copy\");\n document.body.removeChild(el);\n if (selected) {\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(selected);\n return true;\n }\n return false;\n};\n\n// set focus loop within modal\nexport const setFocusLoop = (ref: HTMLElement): void => {\n let modal = ref;\n modal\n .querySelector(\".m-modal-content a:last-of-type\")\n .addEventListener(\"keydown\", leaveLastLink);\n modal\n .querySelector(\".m-modal-content a:first-of-type\")\n .addEventListener(\"keydown\", leaveFirstLink);\n};\n\nexport const leaveLastLink = (e: KeyboardEvent): void => {\n // going back to the first link to force looping\n if (e.code === \"Tab\" && e.shiftKey === false) {\n e.preventDefault();\n\n ((e.target as HTMLElement)\n .closest(\"div\")\n .querySelector(\"a:first-of-type\") as HTMLElement).focus();\n }\n};\n\nexport const leaveFirstLink = (e: KeyboardEvent): void => {\n // going back to the first link to force looping\n if (e.code === \"Tab\" && e.shiftKey === true) {\n e.preventDefault();\n ((e.target as HTMLElement)\n .closest(\"div\")\n .querySelector(\"a:last-of-type\") as HTMLElement).focus();\n }\n};\n\nexport const truncate = (text: string, maxLength: number): string => {\n return text && text.length > maxLength\n ? text.substr(0, maxLength - 1) + \"...\"\n : text;\n};\n","import {\n MailgoConfig,\n MailgoTranslations,\n MailgoTranslation,\n MailgoAction,\n MailgoLanguages,\n MailgoType,\n MailgoDetail,\n MailgoInstallationType,\n MailgoModalType,\n} from \"mailgo\";\n\n// polyfill\n// import { mailgoPolyfill } from \"./polyfill\";\n\n// constants\nimport {\n MAILTO,\n MAILGO,\n TEL,\n CALLTO,\n SMS,\n MAILGO_MAIL,\n MAILGO_TEL,\n MAILGO_SMS,\n CLASSIC,\n LESS_SPAM,\n NO_MAILGO,\n MOBILE,\n spanHTMLTag,\n aHTMLTag,\n pHTMLTag,\n defaultLang,\n notNumber,\n leadingZeros,\n customActionTextMaxLength,\n} from \"./constants\";\n\n// utils\nimport {\n validateEmail,\n validateEmails,\n validateTel,\n copyToClipboard,\n setFocusLoop,\n truncate,\n} from \"./utils\";\n\n// i18n for mailgo\nimport languages from \"../i18n/languages.json\";\nimport translations from \"../i18n/translations.json\";\n\n// mobile detect\nimport { userAgent } from \"./mobile-detect\";\n\n// mailgo scss, with toString (https://github.com/webpack-contrib/css-loader#tostring)\nconst mailgoCSS: string = require(\"./mailgo.scss\").toString();\n\n// default language\nlet lang: string = defaultLang;\n\n// default strings\nconst defaultStrings: MailgoTranslation = (translations as MailgoTranslations)[\n defaultLang\n];\n\n// translation strings\nlet strings: MailgoTranslation;\n\n// global mailgo config object\nlet config: MailgoConfig;\n\n// config to check if the client is mobile or desktop\nlet isMobile: boolean = false;\n\n// default config attributes\nlet mailtoEnabled: boolean = true;\nlet telEnabled: boolean = true;\nlet smsEnabled: boolean = false;\nlet desktopEnabled: boolean = true;\nlet mobileEnabled: boolean = true;\nlet validateEmailConfig: boolean = true;\nlet validateTelConfig: boolean = true;\nlet showFooterConfig: boolean = true;\nlet loadCSSConfig: boolean = true;\n\n// activeMailgoType\nlet activeMailgoType: MailgoType;\n\n// modals global object\nlet modalMailto: HTMLElement, modalTel: HTMLElement;\n\n// mailgo general variables\nlet url: URL, href: string, lessSpamHref: string;\n\n// mailgo mail variables\nlet mail: string, cc: string, bcc: string, subject: string, bodyMail: string;\n\n// mailgo mail custom action variables\nlet customActionText: string,\n customActionTitle: string,\n customActionUrl: string;\n\n// mailgo tel variables\nlet tel: string, msg: string, telegramUsername: string, skypeUsername: string;\n\n// the DOM elements\nlet title: HTMLElement,\n titleTel: HTMLElement,\n detailCc: HTMLElement,\n detailBcc: HTMLElement,\n detailSubject: HTMLElement,\n detailBody: HTMLElement,\n detailMsg: HTMLElement,\n ccValue: HTMLElement,\n bccValue: HTMLElement,\n subjectValue: HTMLElement,\n bodyValue: HTMLElement,\n msgValue: HTMLElement,\n activatedLink: HTMLElement;\n\n// mailgo buttons (actions)\nlet gmail: HTMLLinkElement,\n outlook: HTMLLinkElement,\n yahoo: HTMLLinkElement,\n open: HTMLLinkElement,\n telegram: HTMLLinkElement,\n wa: HTMLLinkElement,\n skype: HTMLLinkElement,\n call: HTMLLinkElement,\n copyMail: HTMLLinkElement,\n copyTel: HTMLLinkElement,\n customAction: HTMLLinkElement;\n\n/**\n * mailgoInit\n * the function that creates the mailgo elements in DOM\n */\nconst mailgoInit = (): void => {\n // set the boolean for mobile/desktop\n isMobile = userAgent() === MOBILE;\n\n // responsive settings\n {\n if (typeof config?.desktop !== \"undefined\") {\n desktopEnabled = config.desktop;\n // if it is a desktop and desktop is not enabled no init mailgo\n if (!isMobile && !desktopEnabled) {\n return;\n }\n }\n if (typeof config?.mobile !== \"undefined\") {\n mobileEnabled = config.mobile;\n // if it is a mobile and mobile is not enabled no init mailgo\n if (isMobile && !mobileEnabled) {\n return;\n }\n }\n }\n\n // set the mailgo language\n mailgoSetLanguage();\n\n // mailgo, if mailgo not already exists\n let mailgoExists = !!document.getElementById(MAILGO_MAIL);\n\n // if mailgo is enabled for mailto and it not exists in DOM\n if (mailtoEnabled && !mailgoExists) {\n // modal\n modalMailto = createElement() as HTMLElement;\n modalMailto.style.display = \"none\";\n modalMailto.id = MAILGO_MAIL;\n modalMailto.classList.add(\"m-modal\");\n modalMailto.setAttribute(\"role\", \"dialog\");\n modalMailto.setAttribute(\"tabindex\", \"-1\");\n modalMailto.setAttribute(\"aria-labelledby\", \"m-title\");\n\n // if dark is in config\n if (config?.dark) {\n enableDarkMode();\n } else {\n disableDarkMode();\n }\n\n // background\n let modalBackground: HTMLElement = createElement();\n modalBackground.className = \"m-modal-back\";\n modalMailto.appendChild(modalBackground);\n\n // modal content\n let modalContent: HTMLElement = createElement();\n modalContent.className = \"m-modal-content\";\n modalMailto.appendChild(modalContent);\n\n // title (email address)\n title = createElement(\"strong\");\n title.id = \"m-title\";\n title.className = \"m-title\";\n modalContent.appendChild(title);\n\n // details\n let details: HTMLElement = createElement();\n details.id = \"m-details\";\n details.className = \"m-details\";\n\n detailCc = createElement(pHTMLTag);\n detailCc.id = \"m-cc\";\n let ccSpan: HTMLElement = createElement(spanHTMLTag);\n ccSpan.className = \"w-500\";\n ccSpan.appendChild(createTextNode(strings.cc_ || defaultStrings.cc_));\n ccValue = createElement(spanHTMLTag);\n ccValue.id = \"m-cc-value\";\n detailCc.appendChild(ccSpan);\n detailCc.appendChild(ccValue);\n details.appendChild(detailCc);\n\n detailBcc = createElement(pHTMLTag);\n detailBcc.id = \"m-bcc\";\n let bccSpan: HTMLElement = createElement(spanHTMLTag);\n bccSpan.className = \"w-500\";\n bccSpan.appendChild(createTextNode(strings.bcc_ || defaultStrings.bcc_));\n bccValue = createElement(spanHTMLTag);\n bccValue.id = \"m-bcc-value\";\n detailBcc.appendChild(bccSpan);\n detailBcc.appendChild(bccValue);\n details.appendChild(detailBcc);\n\n detailSubject = createElement(pHTMLTag);\n detailSubject.id = \"m-subject\";\n let subjectSpan: HTMLElement = createElement(spanHTMLTag);\n subjectSpan.className = \"w-500\";\n subjectSpan.appendChild(\n createTextNode(strings.subject_ || defaultStrings.subject_)\n );\n subjectValue = createElement(spanHTMLTag);\n subjectValue.id = \"m-subject-value\";\n detailSubject.appendChild(subjectSpan);\n detailSubject.appendChild(subjectValue);\n details.appendChild(detailSubject);\n\n detailBody = createElement(pHTMLTag);\n detailBody.id = \"m-body\";\n let bodySpan: HTMLElement = createElement(spanHTMLTag);\n bodySpan.className = \"w-500\";\n bodySpan.appendChild(createTextNode(strings.body_ || defaultStrings.body_));\n bodyValue = createElement(spanHTMLTag);\n bodyValue.id = \"m-body-value\";\n detailBody.appendChild(bodySpan);\n detailBody.appendChild(bodyValue);\n details.appendChild(detailBody);\n\n modalContent.appendChild(details);\n\n // Gmail\n gmail = createElement(aHTMLTag) as HTMLLinkElement;\n gmail.id = \"m-gmail\";\n gmail.href = \"#mailgo-gmail\";\n gmail.classList.add(\"m-open\");\n gmail.classList.add(\"m-gmail\");\n gmail.appendChild(\n createTextNode(strings.open_in_ || defaultStrings.open_in_)\n );\n let gmailSpan: HTMLElement = createElement(spanHTMLTag);\n gmailSpan.className = \"w-500\";\n gmailSpan.appendChild(\n createTextNode(strings.gmail || defaultStrings.gmail)\n );\n gmail.appendChild(gmailSpan);\n\n if (mailgoConfigAttributeEnabled(\"action\", \"gmail\")) {\n modalContent.appendChild(gmail);\n }\n\n // Outlook\n outlook = createElement(aHTMLTag) as HTMLLinkElement;\n outlook.id = \"m-outlook\";\n outlook.href = \"#mailgo-outlook\";\n outlook.classList.add(\"m-open\");\n outlook.classList.add(\"m-outlook\");\n outlook.appendChild(\n createTextNode(strings.open_in_ || defaultStrings.open_in_)\n );\n let outlookSpan: HTMLElement = createElement(spanHTMLTag);\n outlookSpan.className = \"w-500\";\n outlookSpan.appendChild(\n createTextNode(strings.outlook || defaultStrings.outlook)\n );\n outlook.appendChild(outlookSpan);\n\n if (mailgoConfigAttributeEnabled(\"action\", \"outlook\")) {\n modalContent.appendChild(outlook);\n }\n\n // Outlook\n yahoo = createElement(aHTMLTag) as HTMLLinkElement;\n yahoo.id = \"m-yahoo\";\n yahoo.href = \"#mailgo-yahoo\";\n yahoo.classList.add(\"m-open\");\n yahoo.classList.add(\"m-yahoo\");\n yahoo.appendChild(\n createTextNode(strings.open_in_ || defaultStrings.open_in_)\n );\n let yahooSpan: HTMLElement = createElement(spanHTMLTag);\n yahooSpan.className = \"w-500\";\n yahooSpan.appendChild(\n createTextNode(strings.yahoo || defaultStrings.yahoo)\n );\n yahoo.appendChild(yahooSpan);\n\n if (mailgoConfigAttributeEnabled(\"action\", \"yahoo\")) {\n modalContent.appendChild(yahoo);\n }\n\n // open default\n open = createElement(aHTMLTag) as HTMLLinkElement;\n open.id = \"m-open\";\n open.href = \"#mailgo-open\";\n open.classList.add(\"m-open\");\n open.classList.add(\"m-default\");\n let openSpan: HTMLElement = createElement(spanHTMLTag);\n openSpan.className = \"w-500\";\n openSpan.appendChild(createTextNode(strings.open || defaultStrings.open));\n open.appendChild(openSpan);\n open.appendChild(\n createTextNode(strings._default || defaultStrings._default)\n );\n\n modalContent.appendChild(open);\n\n // copy\n copyMail = createElement(aHTMLTag) as HTMLLinkElement;\n copyMail.id = \"m-copy\";\n copyMail.href = \"#mailgo-copy\";\n copyMail.classList.add(\"m-copy\");\n copyMail.classList.add(\"w-500\");\n copyMail.appendChild(createTextNode(strings.copy || defaultStrings.copy));\n\n modalContent.appendChild(copyMail);\n\n // custom action\n customAction = createElement(aHTMLTag) as HTMLLinkElement;\n customAction.id = \"m-custom-action\";\n customAction.href = \"#mailgo-custom-action\";\n customAction.classList.add(\"m-open\");\n customAction.classList.add(\"m-custom-action\");\n if (mailgoConfigAttributeEnabled(\"action\", \"custom\")) {\n modalContent.appendChild(customAction);\n }\n\n // hide mailgo.dev in footer only if showFooter is defined and equal to false\n if (typeof config?.showFooter !== \"undefined\") {\n showFooterConfig = config.showFooter;\n }\n\n if (showFooterConfig) {\n modalContent.appendChild(byElement());\n }\n\n // add the modal at the end of the body\n document.body.appendChild(modalMailto);\n\n // every click outside the modal will hide the modal\n modalBackground.addEventListener(\"click\", hideMailgo);\n }\n\n // mailgo tel, if mailgo-tel not already exists\n let mailgoTelExists = !!document.getElementById(MAILGO_TEL);\n\n // if mailgo is enabled for tel/callto and it not exists in DOM\n if (telEnabled && !mailgoTelExists) {\n // modal\n modalTel = createElement() as HTMLElement;\n modalTel.style.display = \"none\";\n modalTel.id = MAILGO_TEL;\n modalTel.classList.add(\"m-modal\");\n modalTel.setAttribute(\"role\", \"dialog\");\n modalTel.setAttribute(\"tabindex\", \"-1\");\n modalTel.setAttribute(\"aria-labelledby\", \"m-tel-title\");\n\n // if dark is in config\n if (config?.dark) {\n enableDarkMode();\n } else {\n disableDarkMode();\n }\n\n // background\n let modalBackground: HTMLElement = createElement();\n modalBackground.className = \"m-modal-back\";\n modalTel.appendChild(modalBackground);\n\n // modal content\n let modalContent: HTMLElement = createElement();\n modalContent.className = \"m-modal-content\";\n modalTel.appendChild(modalContent);\n\n // title (telephone number)\n titleTel = createElement(\"strong\");\n titleTel.id = \"m-tel-title\";\n titleTel.className = \"m-title\";\n modalContent.appendChild(titleTel);\n\n // details\n let detailsTel: HTMLElement = createElement();\n detailsTel.id = \"m-tel-details\";\n detailsTel.className = \"m-details\";\n\n detailMsg = createElement(pHTMLTag);\n detailMsg.id = \"m-msg\";\n let msgSpan: HTMLElement = createElement(spanHTMLTag);\n msgSpan.className = \"w-500\";\n msgSpan.appendChild(createTextNode(strings.body_ || defaultStrings.body_));\n msgValue = createElement(spanHTMLTag);\n msgValue.id = \"m-msg-value\";\n detailMsg.appendChild(msgSpan);\n detailMsg.appendChild(msgValue);\n detailsTel.appendChild(detailMsg);\n\n modalContent.appendChild(detailsTel);\n\n // Telegram\n telegram = createElement(aHTMLTag) as HTMLLinkElement;\n telegram.id = \"m-tg\";\n telegram.href = \"#mailgo-telegram\";\n telegram.classList.add(\"m-open\");\n telegram.classList.add(\"m-tg\");\n\n // by default not display\n telegram.style.display = \"none\";\n\n telegram.appendChild(\n createTextNode(strings.open_in_ || defaultStrings.open_in_)\n );\n let telegramSpan: HTMLElement = createElement(spanHTMLTag);\n telegramSpan.className = \"w-500\";\n telegramSpan.appendChild(\n createTextNode(strings.telegram || defaultStrings.telegram)\n );\n telegram.appendChild(telegramSpan);\n\n if (mailgoConfigAttributeEnabled(\"action\", \"telegram\")) {\n modalContent.appendChild(telegram);\n }\n\n // WhatsApp\n wa = createElement(aHTMLTag) as HTMLLinkElement;\n wa.id = \"m-wa\";\n wa.href = \"#mailgo-whatsapp\";\n wa.classList.add(\"m-open\");\n wa.classList.add(\"m-wa\");\n wa.appendChild(createTextNode(strings.open_in_ || defaultStrings.open_in_));\n let waSpan: HTMLElement = createElement(spanHTMLTag);\n waSpan.className = \"w-500\";\n waSpan.appendChild(\n createTextNode(strings.whatsapp || defaultStrings.whatsapp)\n );\n wa.appendChild(waSpan);\n\n if (mailgoConfigAttributeEnabled(\"action\", \"whatsapp\")) {\n modalContent.appendChild(wa);\n }\n\n // Skype\n skype = createElement(aHTMLTag) as HTMLLinkElement;\n skype.id = \"m-skype\";\n skype.href = \"#mailgo-skype\";\n skype.classList.add(\"m-open\");\n skype.classList.add(\"m-skype\");\n skype.appendChild(\n createTextNode(strings.open_in_ || defaultStrings.open_in_)\n );\n let skypeSpan: HTMLElement = createElement(spanHTMLTag);\n skypeSpan.className = \"w-500\";\n skypeSpan.appendChild(\n createTextNode(strings.skype || defaultStrings.skype)\n );\n skype.appendChild(skypeSpan);\n\n if (mailgoConfigAttributeEnabled(\"action\", \"skype\")) {\n modalContent.appendChild(skype);\n }\n\n // call default\n call = createElement(aHTMLTag) as HTMLLinkElement;\n call.id = \"m-call\";\n call.href = \"#mailgo-open\";\n call.classList.add(\"m-open\");\n call.classList.add(\"m-default\");\n let callSpan: HTMLElement = createElement(spanHTMLTag);\n callSpan.className = \"w-500\";\n callSpan.appendChild(createTextNode(strings.call || defaultStrings.call));\n call.appendChild(callSpan);\n call.appendChild(\n createTextNode(strings._as_default || defaultStrings._as_default)\n );\n\n modalContent.appendChild(call);\n\n // copy\n copyTel = createElement(aHTMLTag) as HTMLLinkElement;\n copyTel.id = \"m-tel-copy\";\n copyTel.href = \"#mailgo-copy\";\n copyTel.classList.add(\"m-copy\");\n copyTel.classList.add(\"w-500\");\n copyTel.appendChild(createTextNode(strings.copy || defaultStrings.copy));\n\n modalContent.appendChild(copyTel);\n\n // hide mailgo.dev in footer only if showFooter is defined and equal to false\n if (typeof config?.showFooter !== \"undefined\") {\n showFooterConfig = config.showFooter;\n }\n\n if (showFooterConfig) {\n modalContent.appendChild(byElement());\n }\n\n // add the modal at the end of the body\n document.body.appendChild(modalTel);\n\n // every click outside the modal will hide the modal\n modalBackground.addEventListener(\"click\", hideMailgo);\n }\n\n // event listener on body, if the element is mailgo-compatible the mailgo modal will be rendered\n document.addEventListener(\"click\", mailgoClickListener);\n};\n\n/**\n * mailgoClickListener\n * function to check if an element is mailgo-enabled or not referencing to\n * mail:\n * document.querySelectorAll(\n * 'a[href^=\"mailto:\" i]:not(.no-mailgo), a[href=\"#mailgo\"], a.mailgo'\n * );\n * tel:\n * document.querySelectorAll(\n * 'a[href^=\"tel:\" i]:not(.no-mailgo), a[href=\"#mailgo\"], a.mailgo'\n * );\n * or\n * document.querySelectorAll(\n * 'a[href^=\"callto:\" i]:not(.no-mailgo), a[href=\"#mailgo\"], a.mailgo'\n * );\n * or\n * document.querySelectorAll(\n * 'a[href^=\"sms:\" i]:not(.no-mailgo), a[href=\"#mailgo\"], a.mailgo'\n * );\n */\nfunction mailgoClickListener(event: Event): boolean {\n // check if the mailgo HTML exists in the body\n if (\n !document.body.contains(modalMailto) &&\n !document.body.contains(modalTel)\n ) {\n return false;\n }\n\n // if a mailgo is already showing do nothing\n if (mailgoIsShowing()) {\n return false;\n }\n\n // the path of the event\n let path =\n (event.composedPath && event.composedPath()) ||\n composedPath(event.target as HTMLElement);\n\n if (path) {\n path.forEach((element: HTMLElement) => {\n if (element instanceof HTMLDocument || element instanceof Window) {\n return false;\n }\n\n // go here only if one of the mailgo modals are enabled\n if (mailtoEnabled || telEnabled || smsEnabled) {\n let localMailgoType = getMailgoTypeByElement(element);\n\n // go on if the localMailgoType is not null\n if (localMailgoType) {\n // set the active mailgo type\n activeMailgoType = localMailgoType;\n\n let activeMailgoModalType = activeMailgoType?.type;\n\n if (activeMailgoModalType) {\n // check if the setting is enabled and if so go with pre-render\n if (\n (mailtoEnabled && activeMailgoModalType === MAILGO_MAIL) ||\n (telEnabled && activeMailgoModalType === MAILGO_TEL) ||\n (smsEnabled && activeMailgoModalType === MAILGO_SMS)\n ) {\n // stop the normal execution of the element click\n event.preventDefault();\n\n // render mailgo\n mailgoPreRender(element as HTMLLinkElement);\n\n return true;\n }\n }\n }\n }\n });\n }\n\n return false;\n}\n\n/**\n * mailgoPreRender\n * function to pre-render a mailgo, it helps populating elements needed by modal\n */\nfunction mailgoPreRender(\n mailgoElementOrUrl: HTMLLinkElement | string\n): boolean {\n let mailgoElement: HTMLLinkElement;\n\n // get the type and installation from current mailgo type\n let type: MailgoModalType = activeMailgoType?.type;\n let installation: MailgoInstallationType = activeMailgoType?.installation;\n\n // if type is not defined return\n if (!type) return false;\n\n if (typeof mailgoElementOrUrl === \"string\") {\n // if the parameter is a string it is the url\n href = mailgoElementOrUrl as string;\n } else {\n // if the paramenter is an HTMLLinkElement get the href attribute and the element\n href = mailgoElementOrUrl.getAttribute(\"href\") as string;\n mailgoElement = mailgoElementOrUrl as HTMLLinkElement;\n }\n\n // mailgo mail\n if (type === MAILGO_MAIL) {\n // if the installation is classic\n if (installation === CLASSIC) {\n if (validateUrl(href, MAILTO)) {\n mail = decodeURIComponent(href.split(\"?\")[0].split(MAILTO)[1].trim());\n } else if (validateUrl(href, MAILGO)) {\n mail = decodeURIComponent(href.split(\"?\")[0].split(MAILGO)[1].trim());\n }\n\n try {\n url = new URL(href);\n\n let urlParams: URLSearchParams = url.searchParams;\n // optional parameters for the email\n cc = urlParams.get(\"cc\");\n bcc = urlParams.get(\"bcc\");\n subject = urlParams.get(\"subject\");\n bodyMail = urlParams.get(\"body\");\n } catch (error) {\n console.log(error);\n }\n } else if (installation === LESS_SPAM) {\n // if the installation is less-spam\n // mail = data-address + @ + data-domain\n mail =\n mailgoElement.getAttribute(\"data-address\") &&\n mailgoElement.getAttribute(\"data-domain\")\n ? mailgoElement.getAttribute(\"data-address\") +\n \"@\" +\n mailgoElement.getAttribute(\"data-domain\")\n : null;\n\n try {\n url = new URL(MAILTO + encodeURIComponent(mail));\n } catch (error) {\n console.log(error);\n }\n\n let parameters: string[] = [];\n\n // cc = data-cc-address + @ + data-cc-domain\n cc = mailgoElement.getAttribute(\"data-cc-address\")\n ? mailgoElement.getAttribute(\"data-cc-address\") +\n \"@\" +\n mailgoElement.getAttribute(\"data-cc-domain\")\n : null;\n\n // if cc is defined add it to parameters\n if (cc) parameters.push(\"cc=\" + cc);\n\n // bcc = data-bcc-address + @ + data-bcc-domain\n bcc = mailgoElement.getAttribute(\"data-bcc-address\")\n ? mailgoElement.getAttribute(\"data-bcc-address\") +\n \"@\" +\n mailgoElement.getAttribute(\"data-bcc-domain\")\n : null;\n\n // if bcc is defined add it to parameters\n if (bcc) parameters.push(\"bcc=\" + bcc);\n\n // subject = data-subject\n subject = mailgoElement.getAttribute(\"data-subject\");\n\n // if subject is defined add it to parameters\n if (subject) parameters.push(\"subject=\" + subject);\n\n // body = data-body\n bodyMail = mailgoElement.getAttribute(\"data-body\");\n\n // if body is defined add it to parameters\n if (bodyMail) parameters.push(\"body=\" + bodyMail);\n\n // set the lessSpamHref\n lessSpamHref = buildLessSpamHref(\n MAILTO + encodeURIComponent(mail),\n parameters\n );\n }\n\n // set custom action text, title and url\n customActionText = \"\";\n customActionTitle = \"\";\n customActionUrl = \"\";\n if (mailgoConfigAttributeEnabled(\"action\", \"custom\") && mailgoElement) {\n customActionText =\n mailgoElement.getAttribute(\"data-custom-action-text\") ??\n customActionText;\n if (customActionText) {\n customActionTitle = customActionText;\n customActionText = truncate(\n customActionText,\n customActionTextMaxLength\n );\n }\n\n customActionUrl =\n mailgoElement.getAttribute(\"data-custom-action-url\") ?? customActionUrl;\n }\n\n // if is in config use it\n if (typeof config?.validateEmail !== \"undefined\") {\n validateEmailConfig = config.validateEmail;\n }\n\n if (validateEmailConfig) {\n // validate the email address\n if (!validateEmails(mail.split(\",\"))) {\n return false;\n }\n\n // if cc, bcc are not valid cc, bcc = \"\"\n if (cc && !validateEmails(cc.split(\",\"))) cc = \"\";\n if (bcc && !validateEmails(bcc.split(\",\"))) bcc = \"\";\n }\n }\n // mailgo tel\n else if (type === MAILGO_TEL) {\n if (installation === CLASSIC) {\n if (validateUrl(href, TEL)) {\n tel = decodeURIComponent(href.split(\"?\")[0].split(TEL)[1].trim());\n } else if (validateUrl(href, CALLTO)) {\n tel = decodeURIComponent(href.split(\"?\")[0].split(CALLTO)[1].trim());\n } else if (validateUrl(href, SMS)) {\n tel = decodeURIComponent(href.split(\"?\")[0].split(SMS)[1].trim());\n }\n\n try {\n url = new URL(href);\n let urlParams: URLSearchParams = url.searchParams;\n\n // optional parameters for the phone number\n msg = urlParams.get(\"body\");\n } catch (error) {\n console.log(error);\n }\n } else if (installation == LESS_SPAM) {\n tel = mailgoElement.getAttribute(\"data-tel\");\n msg = mailgoElement.getAttribute(\"data-msg\");\n\n try {\n url = new URL(TEL + encodeURIComponent(tel));\n } catch (error) {\n console.log(error);\n }\n\n let parameters: string[] = [];\n\n // if msg is defined add it to parameters\n if (msg) parameters.push(\"body=\" + msg);\n\n // set the lessSpamHref\n lessSpamHref = buildLessSpamHref(\n TEL + encodeURIComponent(tel),\n parameters\n );\n }\n\n // if is in config use it\n if (typeof config?.validateTel !== \"undefined\") {\n validateTelConfig = config.validateTel;\n }\n\n // validate the phone number\n if (validateTelConfig) {\n if (!validateTel(tel)) return false;\n }\n\n // Telegram username\n if (mailgoElement && mailgoElement.hasAttribute(\"data-telegram\")) {\n telegramUsername = mailgoElement.getAttribute(\"data-telegram\");\n } else {\n telegramUsername = null;\n }\n\n // Telegram username\n if (mailgoElement && mailgoElement.hasAttribute(\"data-skype\")) {\n skypeUsername = mailgoElement.getAttribute(\"data-skype\");\n } else {\n skypeUsername = null;\n }\n }\n\n // if dark is in config or contained in the element\n if (config?.dark || mailgoElement.classList.contains(\"dark\")) {\n enableDarkMode();\n } else {\n disableDarkMode();\n }\n\n // render mailgo\n mailgoRender();\n\n return true;\n}\n\n/**\n * mailgoDirectRender\n * function to render a mailgo directly from a URL\n */\nfunction mailgoDirectRender(directUrl: string): boolean {\n // start mailgo\n mailgo();\n\n if (validateUrl(directUrl, MAILTO) || validateUrl(directUrl, MAILGO)) {\n activeMailgoType = {\n type: MAILGO_MAIL,\n installation: CLASSIC,\n };\n return mailgoPreRender(directUrl);\n } else if (\n validateUrl(directUrl, TEL) ||\n validateUrl(directUrl, CALLTO) ||\n validateUrl(directUrl, SMS)\n ) {\n activeMailgoType = {\n type: MAILGO_TEL,\n installation: CLASSIC,\n };\n return mailgoPreRender(directUrl);\n }\n\n return false;\n}\n\n/**\n * mailgoRender\n * function to render a mailgo (mail or tel)\n */\nfunction mailgoRender(): boolean {\n // get the type from current mailgo type\n let type: MailgoModalType = activeMailgoType?.type;\n\n // if type is not defined return\n if (!type) return false;\n\n // mailgo mail\n if (type === MAILGO_MAIL) {\n // the title of the modal (email address)\n title.textContent = mail.split(\",\").join(\"\\n\");\n\n // add the details if provided\n if (mailgoConfigAttributeEnabled(\"detail\", \"cc\") && cc) {\n detailCc.style.display = \"block\";\n ccValue.textContent = cc.split(\",\").join(\"\\n\");\n } else {\n detailCc.style.display = \"none\";\n }\n\n if (mailgoConfigAttributeEnabled(\"detail\", \"bcc\") && bcc) {\n detailBcc.style.display = \"block\";\n bccValue.textContent = bcc.split(\",\").join(\"\\n\");\n } else {\n detailBcc.style.display = \"none\";\n }\n\n if (mailgoConfigAttributeEnabled(\"detail\", \"subject\") && subject) {\n detailSubject.style.display = \"block\";\n subjectValue.textContent = subject;\n } else {\n detailSubject.style.display = \"none\";\n }\n\n if (mailgoConfigAttributeEnabled(\"detail\", \"body\") && bodyMail) {\n detailBody.style.display = \"block\";\n bodyValue.textContent = bodyMail;\n } else {\n detailBody.style.display = \"none\";\n }\n\n // custom action text, title and visibility\n customAction.textContent = customActionText;\n customAction.title = customActionTitle;\n customAction.style.display = customActionText ? \"block\" : \"none\";\n\n // add the actions\n gmail.addEventListener(\"click\", openGmail);\n\n outlook.addEventListener(\"click\", openOutlook);\n\n yahoo.addEventListener(\"click\", openYahooMail);\n\n open.addEventListener(\"click\", openDefault);\n\n copyMail.addEventListener(\"click\", copy);\n\n customAction.addEventListener(\"click\", openCustomAction);\n }\n // mailgo tel\n else if (type === MAILGO_TEL) {\n // the title of the modal (tel)\n titleTel.textContent = tel;\n\n if (mailgoConfigAttributeEnabled(\"detail\", \"msg\") && msg) {\n detailMsg.style.display = \"block\";\n msgValue.textContent = msg;\n } else {\n detailMsg.style.display = \"none\";\n }\n\n // add the actions to buttons\n wa.addEventListener(\"click\", openWhatsApp);\n\n // telegram must be shown only if data-telegram is provided\n if (telegramUsername) {\n document.getElementById(\"m-tg\").style.display = \"block\";\n telegram.addEventListener(\"click\", openTelegram);\n } else {\n document.getElementById(\"m-tg\").style.display = \"none\";\n }\n\n skype.addEventListener(\"click\", openSkype);\n\n call.addEventListener(\"click\", openDefault);\n\n copyTel.addEventListener(\"click\", copy);\n }\n\n // show the mailgo\n showMailgo(type);\n\n // add listener keyDown\n document.addEventListener(\"keydown\", mailgoKeydown);\n\n return true;\n}\n\n// actions\nconst openGmail = (event?: Event): void => {\n event.preventDefault();\n\n let urlString: string;\n let installation: MailgoInstallationType = activeMailgoType?.installation;\n\n if (installation === CLASSIC) {\n try {\n urlString = url.toString();\n } catch (e) {\n urlString = href;\n }\n } else if (installation === LESS_SPAM) {\n urlString = lessSpamHref;\n }\n\n // Gmail url\n let gmailUrl: string =\n \"https://mail.google.com/mail/?extsrc=mailto&url=\" +\n encodeURIComponent(urlString);\n\n // open the link\n window.open(gmailUrl, \"_blank\", \"noopener, noreferrer\");\n\n // hide the modal\n hideMailgo();\n};\n\nconst openOutlook = (event?: Event): void => {\n event.preventDefault();\n\n // Outlook starting url\n let startingOutlookUrl: string =\n \"https://outlook.live.com/owa/?path=/mail/action/compose&to=\";\n\n // let the user to decide to open Office365 Outlook instead of the classic outlook.live.com\n if (config?.office365) {\n startingOutlookUrl =\n \"https://outlook.office365.com/owa/?path=/mail/action/compose&to=\";\n }\n\n // Outlook url\n let outlookUrl: string = startingOutlookUrl + encodeURIComponent(mail);\n\n // the details if provided\n if (subject) {\n outlookUrl = outlookUrl.concat(\"&subject=\" + encodeURIComponent(subject));\n }\n\n if (bodyMail) {\n outlookUrl = outlookUrl.concat(\"&body=\" + encodeURIComponent(bodyMail));\n }\n\n // open the link\n window.open(outlookUrl, \"_blank\", \"noopener, noreferrer\");\n\n // hide the modal\n hideMailgo();\n};\n\nconst openYahooMail = (event?: Event): void => {\n event.preventDefault();\n\n // Yahoo url\n let yahooUrl: string = \"https://compose.mail.yahoo.com/?to=\" + mail;\n\n // the details if provided\n if (subject) {\n yahooUrl = yahooUrl.concat(\"&subject=\" + encodeURIComponent(subject));\n }\n if (bodyMail) {\n yahooUrl = yahooUrl.concat(\"&body=\" + encodeURIComponent(bodyMail));\n }\n\n // open the link\n window.open(yahooUrl, \"_blank\", \"noopener, noreferrer\");\n\n // hide the modal\n hideMailgo();\n};\n\nconst openTelegram = (event?: Event): void => {\n event.preventDefault();\n\n // check if telegramUsername exists\n if (telegramUsername) {\n // Telegram url\n let tgUrl: string = \"https://t.me/\" + encodeURIComponent(telegramUsername);\n\n // open the url\n window.open(tgUrl, \"_blank\", \"noopener, noreferrer\");\n\n // hide the modal\n hideMailgo();\n }\n};\n\nconst openSkype = (event?: Event): void => {\n event.preventDefault();\n\n let skype: string = skypeUsername || tel;\n\n // Telegram url\n let skypeUrl: string = \"skype:\" + encodeURIComponent(skype);\n\n // open the url\n window.open(skypeUrl, \"_blank\", \"noopener, noreferrer\");\n\n // hide the modal\n hideMailgo();\n};\n\nconst openWhatsApp = (event?: Event): void => {\n event.preventDefault();\n\n // WhatsApp API doesn't work with non number digits and leading 0s: https://faq.whatsapp.com/general/chats/how-to-use-click-to-chat/\n let whatappTel = tel.replace(notNumber, \"\").replace(leadingZeros, \"\");\n\n // WhatsApp url\n let waUrl: string = \"https://wa.me/\" + encodeURIComponent(whatappTel);\n\n // the details if provided\n if (msg) {\n waUrl = waUrl.concat(\"?text=\" + encodeURIComponent(msg));\n }\n\n // open the url\n window.open(waUrl, \"_blank\", \"noopener, noreferrer\");\n\n // hide the modal\n hideMailgo();\n};\n\nconst openDefault = (event?: Event): void => {\n event.preventDefault();\n\n let installation: MailgoInstallationType = activeMailgoType?.installation;\n\n // if the installation is classic the browser can follow the default behaviour\n if (installation === CLASSIC) {\n window.location.href = href;\n } else if (installation === LESS_SPAM) {\n // if the installation is less-spam use the built less-spam href\n window.location.href = lessSpamHref;\n }\n\n hideMailgo();\n};\n\nconst copy = (event?: Event): void => {\n event.preventDefault();\n\n // the correct copyButton (mail or tel)\n if (mailgoIsShowing()) {\n let activeCopy: HTMLElement;\n\n let type: MailgoModalType = activeMailgoType?.type;\n\n if (type === MAILGO_MAIL) {\n // in case it is showing mail modal copy email address\n copyToClipboard(mail);\n activeCopy = copyMail;\n } else {\n // in case it is showing tel modal copy phone number\n copyToClipboard(tel);\n activeCopy = copyTel;\n }\n\n activeCopy.textContent = strings.copied || defaultStrings.copied;\n setTimeout(() => {\n activeCopy.textContent = strings.copy || defaultStrings.copy;\n // hide after the timeout\n hideMailgo();\n }, 999);\n }\n};\n\nconst openCustomAction = (event?: Event): void => {\n event?.preventDefault();\n\n if (customActionUrl) {\n const customActionUrlEncoded = encodeURI(customActionUrl);\n\n window.open(customActionUrlEncoded, \"_blank\", \"noopener, noreferrer\");\n }\n\n hideMailgo();\n};\n\n// function to find if a link is a mailto, tel, callto or sms\nconst validateUrl = (url: string, type: string = MAILTO) => {\n let regexValidate = new RegExp(\"^\" + type + \"((.)+)\", \"gi\");\n return regexValidate.test(url);\n};\n\n// function that returns if an element is a mailgo\nfunction getMailgoTypeByElement(element: HTMLElement): MailgoType | null {\n const linkElement = element as HTMLLinkElement;\n if (!linkElement.getAttribute) {\n return null;\n }\n\n let elementHref: string = linkElement.getAttribute(\"href\");\n\n // return null if there is no-mailgo in class\n if (element.classList?.contains(NO_MAILGO)) {\n return null;\n }\n\n // the case of classic type of mailgo, like a href=mailto:... or a href=tel:... and the class=mailgo with a useful href\n if (elementHref || element.classList?.contains(\"mailgo\")) {\n if (validateUrl(elementHref, MAILTO) || validateUrl(elementHref, MAILGO)) {\n // a mailto: or mailgo:\n return {\n type: MAILGO_MAIL,\n installation: CLASSIC,\n };\n } else if (\n validateUrl(elementHref, TEL) ||\n validateUrl(elementHref, CALLTO)\n ) {\n // a tel: or callto:\n return {\n type: MAILGO_TEL,\n installation: CLASSIC,\n };\n } else if (validateUrl(elementHref, SMS)) {\n // a sms:\n return {\n type: MAILGO_SMS,\n installation: CLASSIC,\n };\n }\n }\n\n if (elementHref === \"#mailgo\" || element.classList?.contains(\"mailgo\")) {\n // less-spam installation of mailgo, check to the attributes\n if (\n element.hasAttribute(\"data-address\") &&\n element.hasAttribute(\"data-domain\")\n ) {\n // less-spam mailto with data-address and data-domain\n return {\n type: MAILGO_MAIL,\n installation: LESS_SPAM,\n };\n } else if (element.hasAttribute(\"data-tel\")) {\n // less-spam tel with data-tel\n return {\n type: MAILGO_TEL,\n installation: LESS_SPAM,\n };\n } else if (element.hasAttribute(\"data-msg\")) {\n // less-spam sms with data-msd\n return {\n type: MAILGO_SMS,\n installation: LESS_SPAM,\n };\n }\n }\n\n return null;\n}\n\n/**\n * mailgoKeydown\n * function to manage the keydown event when the modal is showing, return a boolean that represents if a useful key has been pressed\n */\nconst mailgoKeydown = (keyboardEvent: KeyboardEvent): boolean => {\n // if mailgo is showing\n if (mailgoIsShowing()) {\n let type: MailgoModalType = activeMailgoType?.type;\n\n if (type === MAILGO_MAIL) {\n switch (keyboardEvent.keyCode) {\n case 27:\n // Escape\n hideMailgo();\n return true;\n case 71:\n // g -> open GMail\n openGmail();\n return true;\n case 79:\n // o -> open Outlook\n openOutlook();\n return true;\n case 89:\n // y -> open Yahoo Mail\n openYahooMail();\n return true;\n case 32:\n case 13:\n // spacebar or enter -> open default\n openDefault();\n return true;\n case 67:\n // c -> copy\n copy();\n return true;\n case 65:\n // a -> custom Action\n openCustomAction();\n return true;\n default:\n return false;\n }\n } else if (type === MAILGO_TEL) {\n switch (keyboardEvent.keyCode) {\n case 27:\n // Escape\n hideMailgo();\n return true;\n case 84:\n // t -> open Telegram\n openTelegram();\n return true;\n case 87:\n // w -> open WhatsApp\n openWhatsApp();\n return true;\n case 83:\n // s -> open Skype\n openSkype();\n return true;\n case 32:\n case 13:\n // spacebar or enter -> open default\n openDefault();\n return true;\n case 67:\n // c -> copy\n copy();\n return true;\n default:\n return false;\n }\n }\n }\n return false;\n};\n\n// show the modal\nconst showMailgo = (type: MailgoModalType): void => {\n // show the correct modal\n setModalDisplay(type, \"flex\");\n};\n\n// hide the modal\nconst hideMailgo = (): void => {\n // hide all the modals\n setModalDisplay(MAILGO_MAIL, \"none\");\n setModalDisplay(MAILGO_TEL, \"none\");\n\n // remove listener keyDown\n document.removeEventListener(\"keydown\", mailgoKeydown);\n};\n\n// is the mailgo modal hidden?\nconst mailgoIsShowing = (): boolean => {\n return (\n (mailtoEnabled && getModalDisplay(MAILGO_MAIL) === \"flex\") ||\n ((telEnabled || smsEnabled) && getModalDisplay(MAILGO_TEL) === \"flex\")\n );\n};\n\nconst byElement = (): HTMLLinkElement => {\n // by element in the footer\n let by: HTMLLinkElement = createElement(aHTMLTag) as HTMLLinkElement;\n by.href = \"https://mailgo.dev?ref=mailgo-modal\";\n by.className = \"m-by\";\n by.target = \"_blank\";\n by.rel = \"noopener noreferrer\";\n by.appendChild(createTextNode(\"mailgo.dev\"));\n\n return by;\n};\n\n// create element\nconst createElement = (element: string = \"div\"): HTMLElement =>\n document.createElement(element);\n\n// create text node\nconst createTextNode = (element: string): Text =>\n document.createTextNode(element);\n\n// get the correct HTMLElement from a type\nconst getModalHTMLElement = (type: MailgoModalType = MAILGO_MAIL) => {\n if (type === MAILGO_TEL) {\n return modalTel;\n } else {\n return modalMailto;\n }\n};\n\n// get display value\nconst getModalDisplay = (ref: MailgoModalType = MAILGO_MAIL): string =>\n getModalHTMLElement(ref).style.display;\n\n// set display value\nconst setModalDisplay = (\n ref: MailgoModalType = MAILGO_MAIL,\n value: string\n): void => {\n let modal = getModalHTMLElement(ref);\n\n if (modal) {\n modal.style.display = value;\n\n if (value === \"flex\") {\n // \"save\" the activated link.\n activatedLink = document.activeElement as HTMLElement;\n modal.setAttribute(\"aria-hidden\", \"false\");\n\n // Focus on the modal container.\n modal.setAttribute(\"tabindex\", \"0\");\n modal.focus();\n setFocusLoop(modal);\n } else {\n modal.setAttribute(\"aria-hidden\", \"true\");\n\n // focus back the activated link for getting back to the context.\n modal.setAttribute(\"tabindex\", \"-1\");\n activatedLink.focus();\n }\n }\n};\n\n// enable dark mode\nconst enableDarkMode = () => {\n // get the type from current mailgo type\n let type: MailgoModalType = activeMailgoType?.type;\n if (type) {\n getModalHTMLElement(type).classList.add(\"m-dark\");\n }\n};\n\n// disable dark mode\nconst disableDarkMode = () => {\n // get the type from current mailgo type\n let type: MailgoModalType = activeMailgoType?.type;\n if (type) {\n getModalHTMLElement(type).classList.remove(\"m-dark\");\n }\n};\n\n// custom composedPath if path or event.composedPath() are not defined\nconst composedPath = (\n el: HTMLElement\n): (HTMLElement | Document | (Window & typeof globalThis))[] => {\n let path = [];\n\n while (el) {\n path.push(el);\n\n if (el.tagName === \"HTML\") {\n path.push(document);\n path.push(window);\n return path;\n }\n\n el = el.parentElement;\n }\n};\n\n// function to recreate a mailto: or tel: href from less-spam\nconst buildLessSpamHref = (type: string, parameters: string[]): string => {\n lessSpamHref = type;\n if (parameters && parameters.length > 0) {\n let joinedParams = parameters.join(\"&\");\n lessSpamHref = lessSpamHref.concat(\"?\" + joinedParams);\n }\n return lessSpamHref;\n};\n\n// function to check an attribute is enabled or not, by default considering it enabled\nconst mailgoConfigAttributeEnabled = (\n type: \"action\" | \"detail\",\n attribute: MailgoAction | MailgoDetail\n): boolean => {\n // by default all the actions and attribute are enabled\n if (!config) {\n return true;\n }\n\n // if the attribute type is action consider the actions config attribute\n if (type === \"action\") {\n if (config && !config?.actions) {\n return true;\n }\n\n if (\n config &&\n config.actions &&\n config?.actions[attribute as MailgoAction] === false\n ) {\n return false;\n }\n } else if (type === \"detail\") {\n // else consider the details attribute\n\n if (config && !config?.details) {\n return true;\n }\n\n if (\n config &&\n config.details &&\n config?.details[attribute as MailgoDetail] === false\n ) {\n return false;\n }\n }\n\n return true;\n};\n\n// manage the language of mailgo\nconst mailgoSetLanguage = (): string => {\n let languageType = \"default lang\";\n\n // if a language is defined in configuration use it\n if (\n config?.lang &&\n (languages as MailgoLanguages).indexOf(config.lang) !== -1\n ) {\n lang = config.lang;\n languageType = \"config lang\";\n } else {\n // else if is defined use it!\n // keep the lang from html\n let htmlLang: string = document.documentElement.lang;\n\n // find the correct language using the lang attribute, not just a === because there a are cases like fr-FR or fr_FR in html lang attribute\n (languages as MailgoLanguages).forEach((language: any) => {\n if (new RegExp(\"^\" + language, \"gi\").test(htmlLang)) {\n lang = language;\n languageType = \"html lang\";\n }\n });\n }\n\n // strings\n strings = (translations as MailgoTranslations)[lang];\n\n return languageType;\n};\n\nconst mailgoStyle = (): void => {\n if (!document.getElementById(\"mailgo-style\")) {\n // mailgo style\n let mailgoCSSElement: HTMLStyleElement = createElement(\n \"style\"\n ) as HTMLStyleElement;\n mailgoCSSElement.id = \"mailgo-style\";\n mailgoCSSElement.type = \"text/css\";\n mailgoCSSElement.appendChild(createTextNode(mailgoCSS));\n document.head.appendChild(mailgoCSSElement);\n }\n};\n\nfunction mailgoValidateEmail(email: string): boolean {\n return validateEmail(email);\n}\n\n// mailgo\nfunction mailgo(mailgoConfig?: MailgoConfig): boolean {\n try {\n // polyfill mailgo\n // mailgoPolyfill();\n\n // set the global config merging window mailgConfig and mailgoConfig passed as a parameter\n config = { ...mailgoConfig, ...((window as any)?.mailgoConfig || null) };\n\n // if the window is defined...\n if (typeof window !== \"undefined\") {\n // if is set in config use it (load the mailgo CSS)\n if (typeof config?.loadCSS !== \"undefined\") {\n loadCSSConfig = config.loadCSS;\n }\n\n // if is set in config use it (enable mailto)\n if (typeof config?.mailto !== \"undefined\") {\n mailtoEnabled = config.mailto;\n }\n\n // if is set in config use it (enable tel)\n if (typeof config?.tel !== \"undefined\") {\n telEnabled = config.tel;\n }\n\n // if is set in config use it (enable sms)\n if (typeof config?.sms !== \"undefined\") {\n smsEnabled = config.sms;\n }\n\n // if load css enabled load it!\n if (loadCSSConfig) {\n // add the style for mailgo\n mailgoStyle();\n }\n\n // if is set an initEvent add the listener\n if (config?.initEvent) {\n if (config?.listenerOptions) {\n // listener options specified\n document.addEventListener(\n config.initEvent,\n mailgoInit,\n config.listenerOptions\n );\n } else {\n // no listener options\n document.addEventListener(config.initEvent, mailgoInit);\n }\n } else {\n mailgoInit();\n }\n\n return true;\n }\n } catch (error) {\n console.log(error);\n }\n return false;\n}\n\n// define the methods also for window element\nif (typeof window !== \"undefined\") {\n (window as any).getMailgoTypeByElement = getMailgoTypeByElement;\n (window as any).mailgoClickListener = mailgoClickListener;\n (window as any).mailgoCheckRender = mailgoClickListener; // for compatibility with old version of mailgo\n (window as any).mailgoPreRender = mailgoPreRender;\n (window as any).mailgoDirectRender = mailgoDirectRender;\n (window as any).mailgoRender = mailgoRender;\n (window as any).mailgoValidateEmail = mailgoValidateEmail;\n (window as any).mailgo = mailgo;\n}\n\nexport {\n getMailgoTypeByElement,\n mailgoClickListener,\n mailgoPreRender,\n mailgoDirectRender,\n mailgoRender,\n mailgoValidateEmail,\n};\n\nexport default mailgo;\n","export const userAgent = () => {\n if (\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n )\n ) {\n return \"mobile\";\n }\n return \"desktop\";\n};\n","// webpack > dist/mailgo.min.js\n\nimport mailgo from \"../src/mailgo\";\n\n// call init mailgo attached to the event DOMContentLoaded\nconst mailgoConfig = {\n initEvent: \"DOMContentLoaded\",\n};\n\nmailgo(mailgoConfig);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module doesn't tell about it's top-level declarations so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(474);\n"],"sourceRoot":""}