{"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":"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","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 <html lang=\"\"> 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":""}