{"version":3,"file":"static/js/auto-track.769d79d7.chunk.js","mappings":"8IAmCO,SAASA,EAEdC,EACAC,EACAC,EACAC,GALF,WASE,OAAKH,IAGDA,aAAiBI,QACR,CAACJ,GACH,YAAaA,EACXA,EAAMK,UAENL,GAGJM,SAAQ,SAACC,GAChBA,EAAGC,iBACD,SACA,SAACC,G,QACOC,EAAKT,aAAiBU,SAAWV,EAAMM,GAAMN,EAC7CW,EACJV,aAAsBS,SAAWT,EAAWK,GAAML,EAC9CW,EACJN,EAAGO,aAAa,SAChBP,EAAGQ,eAAe,+BAAgC,SAClDR,EAAGO,aAAa,gBACe,QAA/B,EAAAP,EAAGS,qBAAqB,KAAK,UAAE,eAAEF,aAAa,SAE1CG,GAAa,IAAAC,UACjB,EAAKC,MAAMT,EAAIE,EAAc,OAAPT,QAAO,IAAPA,EAAAA,EAAW,CAAC,GACb,QAArB,IAAKiB,SAASC,eAAO,QAAI,MA9CnC,SAAoBC,EAA4BT,GAC9C,QAAuB,WAAnBS,EAAQC,SAAuBV,EAIrC,EA6CWW,CAAWjB,EAAyBM,IArE/C,SAAoBZ,GAClB,IAAMwB,EAAaxB,EAMnB,SACEwB,EAAWC,SACXD,EAAWE,UACXF,EAAWG,SACVH,EAAWI,QAA+B,GAArBJ,EAAWI,OAKrC,CAsDWC,CAAWrB,IAERI,IACFJ,EAAasB,eACTtB,EAAasB,iBACZtB,EAAauB,aAAc,EAChCf,EACGgB,MAAMC,QAAQC,OACdC,MAAK,WACJC,OAAOC,SAASzB,KAAOA,CACzB,IACCoB,MAAMC,QAAQC,OAGvB,IACA,EAEJ,IAEOI,MAjDEA,IAkDX,CAIO,SAASC,EAEdC,EACAxC,EACAC,EACAC,GALF,WAQE,OAAKsC,GACDA,aAAiBC,kBAAiBD,EAAQ,CAACA,IAE9BA,EAERnC,SAAQ,SAACC,GAChB,KAAMA,aAAcH,SAClB,MAAM,IAAIuC,UAAU,mDACtB,IAAMC,EAAU,SAACnC,G,MACfA,EAAasB,eACTtB,EAAasB,iBACZtB,EAAauB,aAAc,EAEhC,IAAMtB,EAAKT,aAAiBU,SAAWV,EAAMM,GAAMN,EAC7CW,EAAQV,aAAsBS,SAAWT,EAAWK,GAAML,GAE7C,IAAAgB,UACjB,EAAKC,MAAMT,EAAIE,EAAc,OAAPT,QAAO,IAAPA,EAAAA,EAAW,CAAC,GACb,QAArB,IAAKiB,SAASC,eAAO,QAAI,KAIxBY,MAAMC,QAAQC,OACdC,MAAK,WACJ7B,EAAGsC,QACL,IACCZ,MAAMC,QAAQC,MACnB,EAKMW,EAAKT,OAAeU,QAAWV,OAAeW,MAChDF,EACFA,EAAEvC,GAAIsC,OAAOD,GAGbrC,EAAGC,iBAAiB,SAAUoC,GAAS,EAE3C,IAEOL,MAzCYA,IA0CrB,C","sources":["node_modules/@segment/analytics-next/src/core/auto-track.ts"],"sourcesContent":["import { Analytics } from './analytics'\nimport { EventProperties, Options } from './events'\nimport { pTimeout } from './callback'\n\n// Check if a user is opening the link in a new tab\nfunction userNewTab(event: Event): boolean {\n const typedEvent = event as Event & {\n ctrlKey: boolean\n shiftKey: boolean\n metaKey: boolean\n button: number\n }\n if (\n typedEvent.ctrlKey ||\n typedEvent.shiftKey ||\n typedEvent.metaKey ||\n (typedEvent.button && typedEvent.button == 1)\n ) {\n return true\n }\n return false\n}\n\n// Check if the link opens in new tab\nfunction linkNewTab(element: HTMLAnchorElement, href: string | null): boolean {\n if (element.target === '_blank' && href) {\n return true\n }\n return false\n}\n\nexport interface JQueryShim {\n toArray(): TElement[]\n}\n\nexport function link(\n this: Analytics,\n links: Element | Array | JQueryShim | null,\n event: string | Function,\n properties?: EventProperties | Function,\n options?: Options\n): Analytics {\n let elements: Array = []\n // always arrays, handles jquery\n if (!links) {\n return this\n }\n if (links instanceof Element) {\n elements = [links]\n } else if ('toArray' in links) {\n elements = links.toArray()\n } else {\n elements = links\n }\n\n elements.forEach((el: Element) => {\n el.addEventListener(\n 'click',\n (elementEvent: Event) => {\n const ev = event instanceof Function ? event(el) : event\n const props =\n properties instanceof Function ? properties(el) : properties\n const href =\n el.getAttribute('href') ||\n el.getAttributeNS('http://www.w3.org/1999/xlink', 'href') ||\n el.getAttribute('xlink:href') ||\n el.getElementsByTagName('a')[0]?.getAttribute('href')\n\n const trackEvent = pTimeout(\n this.track(ev, props, options ?? {}),\n this.settings.timeout ?? 500\n )\n\n if (\n !linkNewTab(el as HTMLAnchorElement, href) &&\n !userNewTab(elementEvent)\n ) {\n if (href) {\n elementEvent.preventDefault\n ? elementEvent.preventDefault()\n : (elementEvent.returnValue = false)\n trackEvent\n .catch(console.error)\n .then(() => {\n window.location.href = href\n })\n .catch(console.error)\n }\n }\n },\n false\n )\n })\n\n return this\n}\n\nexport type LinkArgs = Parameters\n\nexport function form(\n this: Analytics,\n forms: HTMLFormElement | Array | null,\n event: string | Function,\n properties?: EventProperties | Function,\n options?: Options\n): Analytics {\n // always arrays, handles jquery\n if (!forms) return this\n if (forms instanceof HTMLFormElement) forms = [forms]\n\n const elements = forms\n\n elements.forEach((el) => {\n if (!(el instanceof Element))\n throw new TypeError('Must pass HTMLElement to trackForm/trackSubmit.')\n const handler = (elementEvent: Event): void => {\n elementEvent.preventDefault\n ? elementEvent.preventDefault()\n : (elementEvent.returnValue = false)\n\n const ev = event instanceof Function ? event(el) : event\n const props = properties instanceof Function ? properties(el) : properties\n\n const trackEvent = pTimeout(\n this.track(ev, props, options ?? {}),\n this.settings.timeout ?? 500\n )\n\n trackEvent\n .catch(console.error)\n .then(() => {\n el.submit()\n })\n .catch(console.error)\n }\n\n // Support the events happening through jQuery or Zepto instead of through\n // the normal DOM API, because `el.submit` doesn't bubble up events...\n\n const $ = (window as any).jQuery || (window as any).Zepto\n if ($) {\n $(el).submit(handler)\n } else {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n el.addEventListener('submit', handler, false)\n }\n })\n\n return this\n}\n\nexport type FormArgs = Parameters\n"],"names":["link","links","event","properties","options","Element","toArray","forEach","el","addEventListener","elementEvent","ev","Function","props","href","getAttribute","getAttributeNS","getElementsByTagName","trackEvent","pTimeout","track","settings","timeout","element","target","linkNewTab","typedEvent","ctrlKey","shiftKey","metaKey","button","userNewTab","preventDefault","returnValue","catch","console","error","then","window","location","this","form","forms","HTMLFormElement","TypeError","handler","submit","$","jQuery","Zepto"],"sourceRoot":""}