@rtstic.dev/pulse 0.0.101 → 0.0.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/form/book-a-demo/thank-you.ts"],
4
- "sourcesContent": ["function getSessionData() {\n return {\n firstName: sessionStorage.getItem(\"ty_firstName\") ?? \"\",\n lastName: sessionStorage.getItem(\"ty_lastName\") ?? \"\",\n email: sessionStorage.getItem(\"ty_email\") ?? \"\",\n showCalendar: sessionStorage.getItem(\"ty_showCalendar\") === \"true\",\n calendarName: sessionStorage.getItem(\"ty_calendarName\") ?? \"\",\n embedUrl: sessionStorage.getItem(\"ty_embedUrl\") ?? \"\",\n flow: sessionStorage.getItem(\"ty_flow\") ?? \"\",\n };\n}\n\nfunction hasCookieConsent(): boolean {\n const state = (window as any).Termly?.getConsentState();\n if (!state) return false;\n return state.analytics === true && state.advertising === true;\n}\n\nfunction showThankYou(): void {\n const container = document.querySelector<HTMLElement>(\"[hs-calender-block]\");\n if (container) {\n container.setAttribute(\"hs-calender-block-active\", \"false\");\n container.innerHTML = \"\";\n }\n document.querySelectorAll<HTMLElement>(\"[hs-thankyou-block-active]\")\n .forEach((el) => el.setAttribute(\"hs-thankyou-block-active\", \"true\"));\n}\n\nfunction loadCalendar(data: ReturnType<typeof getSessionData>): void {\n // calendar disabled for now \u2014 always show thank you\n showThankYou();\n return;\n // ...\n // keeping below code for future use\n // const container = document.querySelector<HTMLElement>(\"[hs-calender-block]\");\n // if (!container) return;\n\n // const consentGiven = hasCookieConsent();\n\n // if (!data.showCalendar || !data.embedUrl || !consentGiven) {\n // showThankYou();\n // return;\n // }\n\n // container.setAttribute(\"hs-calender-block-active\", \"true\");\n // container.innerHTML = \"\";\n // document.querySelectorAll<HTMLElement>(\"[hs-thankyou-block-active]\")\n // .forEach((el) => el.setAttribute(\"hs-thankyou-block-active\", \"false\"));\n\n // const prefillParams = new URLSearchParams();\n // if (data.firstName) prefillParams.set(\"firstName\", data.firstName);\n // if (data.lastName) prefillParams.set(\"lastName\", data.lastName);\n // if (data.email) prefillParams.set(\"email\", data.email);\n\n // const separator = data.embedUrl.includes(\"?\") ? \"&\" : \"?\";\n // const embedUrl = prefillParams.toString()\n // ? `${data.embedUrl}${separator}${prefillParams.toString()}`\n // : data.embedUrl;\n\n // const meetingsDiv = document.createElement(\"div\");\n // meetingsDiv.className = \"meetings-iframe-container\";\n // meetingsDiv.setAttribute(\"data-src\", embedUrl);\n // container.appendChild(meetingsDiv);\n\n // const scriptSrc = \"https://static.hsappstatic.net/MeetingsEmbed/ex/MeetingsEmbedCode.js\";\n // const existingScript = document.querySelector<HTMLScriptElement>(`script[src=\"${scriptSrc}\"]`);\n // if (existingScript) existingScript.remove();\n\n // const script = document.createElement(\"script\");\n // script.type = \"text/javascript\";\n // script.src = scriptSrc;\n // container.appendChild(script);\n}\n\nfunction setFlowAttribute(): void {\n const flow = sessionStorage.getItem(\"ty_flow\") ?? \"\";\n if (!flow) return;\n\n document.querySelectorAll<HTMLElement>(\"[hs-thankyou-flow]\")\n .forEach((el) => {\n const elFlow = el.getAttribute(\"hs-thankyou-flow\");\n el.setAttribute(\n \"form-flow-active\",\n elFlow === flow ? \"true\" : \"false\"\n );\n });\n}\n\n// \u2500\u2500 Active boot \u2014 shows thank you for all cases \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction init(): void {\n const data = getSessionData();\n // console.log(\"embedUrl:\", data.embedUrl);\n // console.log(\"showCalendar:\", data.showCalendar);\n setFlowAttribute();\n showThankYou();\n\n if (data.embedUrl) {\n // Strip any existing params from the embed URL before redirecting\n const cleanUrl = data.embedUrl.split(\"?\")[0];\n\n setTimeout(() => {\n window.location.href = cleanUrl;\n }, 1000);\n }\n}\n\n// \u2500\u2500 Future boot \u2014 uncomment when calendar is ready \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// document.addEventListener(\"DOMContentLoaded\", () => {\n// const data = getSessionData();\n// setFlowAttribute();\n// showThankYou();\n//\n// (window as any).Termly?.on(\"initialized\", () => {\n// setTimeout(() => loadCalendar(data), 300);\n// });\n//\n// (window as any).Termly?.on(\"consent\", () => {\n// setTimeout(() => loadCalendar(data), 300);\n// });\n//\n// setTimeout(() => {\n// const state = (window as any).Termly?.getConsentState();\n// if (state) loadCalendar(data);\n// }, 500);\n// });\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n init();\n console.log(\"welcome\uD83D\uDC38\")\n});"],
5
- "mappings": ";;;AAAA,WAAS,iBAAiB;AACtB,WAAO;AAAA,MACH,WAAW,eAAe,QAAQ,cAAc,KAAK;AAAA,MACrD,UAAU,eAAe,QAAQ,aAAa,KAAK;AAAA,MACnD,OAAO,eAAe,QAAQ,UAAU,KAAK;AAAA,MAC7C,cAAc,eAAe,QAAQ,iBAAiB,MAAM;AAAA,MAC5D,cAAc,eAAe,QAAQ,iBAAiB,KAAK;AAAA,MAC3D,UAAU,eAAe,QAAQ,aAAa,KAAK;AAAA,MACnD,MAAM,eAAe,QAAQ,SAAS,KAAK;AAAA,IAC/C;AAAA,EACJ;AAQA,WAAS,eAAqB;AAC1B,UAAM,YAAY,SAAS,cAA2B,qBAAqB;AAC3E,QAAI,WAAW;AACX,gBAAU,aAAa,4BAA4B,OAAO;AAC1D,gBAAU,YAAY;AAAA,IAC1B;AACA,aAAS,iBAA8B,4BAA4B,EAC9D,QAAQ,CAAC,OAAO,GAAG,aAAa,4BAA4B,MAAM,CAAC;AAAA,EAC5E;AAgDA,WAAS,mBAAyB;AAC9B,UAAM,OAAO,eAAe,QAAQ,SAAS,KAAK;AAClD,QAAI,CAAC,KAAM;AAEX,aAAS,iBAA8B,oBAAoB,EACtD,QAAQ,CAAC,OAAO;AACb,YAAM,SAAS,GAAG,aAAa,kBAAkB;AACjD,SAAG;AAAA,QACC;AAAA,QACA,WAAW,OAAO,SAAS;AAAA,MAC/B;AAAA,IACJ,CAAC;AAAA,EACT;AAGA,WAAS,OAAa;AAClB,UAAM,OAAO,eAAe;AAG5B,qBAAiB;AACjB,iBAAa;AAEb,QAAI,KAAK,UAAU;AAEf,YAAM,WAAW,KAAK,SAAS,MAAM,GAAG,EAAE,CAAC;AAE3C,iBAAW,MAAM;AACb,eAAO,SAAS,OAAO;AAAA,MAC3B,GAAG,GAAI;AAAA,IACX;AAAA,EACJ;AAsBA,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,SAAK;AACL,YAAQ,IAAI,kBAAW;AAAA,EAC3B,CAAC;",
4
+ "sourcesContent": ["function getSessionData() {\n return {\n firstName: sessionStorage.getItem(\"ty_firstName\") ?? \"\",\n lastName: sessionStorage.getItem(\"ty_lastName\") ?? \"\",\n email: sessionStorage.getItem(\"ty_email\") ?? \"\",\n showCalendar: sessionStorage.getItem(\"ty_showCalendar\") === \"true\",\n calendarName: sessionStorage.getItem(\"ty_calendarName\") ?? \"\",\n embedUrl: sessionStorage.getItem(\"ty_embedUrl\") ?? \"\",\n flow: sessionStorage.getItem(\"ty_flow\") ?? \"\",\n };\n}\n\nfunction hasCookieConsent(): boolean {\n const state = (window as any).Termly?.getConsentState();\n if (!state) return false;\n return state.analytics === true && state.advertising === true;\n}\n\nfunction showThankYou(): void {\n const container = document.querySelector<HTMLElement>(\"[hs-calender-block]\");\n if (container) {\n container.setAttribute(\"hs-calender-block-active\", \"false\");\n container.innerHTML = \"\";\n }\n document.querySelectorAll<HTMLElement>(\"[hs-thankyou-block-active]\")\n .forEach((el) => el.setAttribute(\"hs-thankyou-block-active\", \"true\"));\n}\n\nfunction setFlowAttribute(): void {\n const flow = sessionStorage.getItem(\"ty_flow\") ?? \"\";\n if (!flow) return;\n\n document.querySelectorAll<HTMLElement>(\"[hs-thankyou-flow]\")\n .forEach((el) => {\n const elFlow = el.getAttribute(\"hs-thankyou-flow\");\n el.setAttribute(\n \"form-flow-active\",\n elFlow === flow ? \"true\" : \"false\"\n );\n });\n}\n\nfunction init(): void {\n const data = getSessionData();\n setFlowAttribute();\n showThankYou();\n\n if (data.embedUrl && data.showCalendar) {\n const baseUrl = data.embedUrl.split(\"?\")[0];\n\n const params = new URLSearchParams();\n if (data.firstName) params.set(\"firstName\", data.firstName);\n if (data.lastName) params.set(\"lastName\", data.lastName);\n if (data.email) params.set(\"email\", data.email);\n\n const finalUrl = params.toString() ? `${baseUrl}?${params.toString()}` : baseUrl;\n\n setTimeout(() => {\n window.location.href = finalUrl;\n }, 1000);\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n init();\n});"],
5
+ "mappings": ";;;AAAA,WAAS,iBAAiB;AACtB,WAAO;AAAA,MACH,WAAW,eAAe,QAAQ,cAAc,KAAK;AAAA,MACrD,UAAU,eAAe,QAAQ,aAAa,KAAK;AAAA,MACnD,OAAO,eAAe,QAAQ,UAAU,KAAK;AAAA,MAC7C,cAAc,eAAe,QAAQ,iBAAiB,MAAM;AAAA,MAC5D,cAAc,eAAe,QAAQ,iBAAiB,KAAK;AAAA,MAC3D,UAAU,eAAe,QAAQ,aAAa,KAAK;AAAA,MACnD,MAAM,eAAe,QAAQ,SAAS,KAAK;AAAA,IAC/C;AAAA,EACJ;AAQA,WAAS,eAAqB;AAC1B,UAAM,YAAY,SAAS,cAA2B,qBAAqB;AAC3E,QAAI,WAAW;AACX,gBAAU,aAAa,4BAA4B,OAAO;AAC1D,gBAAU,YAAY;AAAA,IAC1B;AACA,aAAS,iBAA8B,4BAA4B,EAC9D,QAAQ,CAAC,OAAO,GAAG,aAAa,4BAA4B,MAAM,CAAC;AAAA,EAC5E;AAEA,WAAS,mBAAyB;AAC9B,UAAM,OAAO,eAAe,QAAQ,SAAS,KAAK;AAClD,QAAI,CAAC,KAAM;AAEX,aAAS,iBAA8B,oBAAoB,EACtD,QAAQ,CAAC,OAAO;AACb,YAAM,SAAS,GAAG,aAAa,kBAAkB;AACjD,SAAG;AAAA,QACC;AAAA,QACA,WAAW,OAAO,SAAS;AAAA,MAC/B;AAAA,IACJ,CAAC;AAAA,EACT;AAEA,WAAS,OAAa;AAClB,UAAM,OAAO,eAAe;AAC5B,qBAAiB;AACjB,iBAAa;AAEb,QAAI,KAAK,YAAY,KAAK,cAAc;AACpC,YAAM,UAAU,KAAK,SAAS,MAAM,GAAG,EAAE,CAAC;AAE1C,YAAM,SAAS,IAAI,gBAAgB;AACnC,UAAI,KAAK,UAAW,QAAO,IAAI,aAAa,KAAK,SAAS;AAC1D,UAAI,KAAK,SAAU,QAAO,IAAI,YAAY,KAAK,QAAQ;AACvD,UAAI,KAAK,MAAO,QAAO,IAAI,SAAS,KAAK,KAAK;AAE9C,YAAM,WAAW,OAAO,SAAS,IAAI,GAAG,OAAO,IAAI,OAAO,SAAS,CAAC,KAAK;AAEzE,iBAAW,MAAM;AACb,eAAO,SAAS,OAAO;AAAA,MAC3B,GAAG,GAAI;AAAA,IACX;AAAA,EACJ;AAEA,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,SAAK;AAAA,EACT,CAAC;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- "use strict";(()=>{var y=["google.","bing.com","yahoo.","duckduckgo.com","baidu.com","yandex.","ask.com","ecosia.org","aol.com","startpage.com","qwant.com","brave.com","search.brave.com","naver.com","daum.net","sogou.com","so.com","seznam.cz","onesearch.com","swisscows.com","mojeek.com","presearch.com","search.yahoo.com","googlesyndication.com","googleadservices.com"],M=["facebook.com","fb.com","fb.me","l.facebook.com","lm.facebook.com","m.facebook.com","instagram.com","l.instagram.com","twitter.com","t.co","x.com","linkedin.com","lnkd.in","pinterest.com","pin.it","reddit.com","tiktok.com","youtube.com","youtu.be","snapchat.com","tumblr.com","threads.net","mastodon.social","bsky.app","whatsapp.com","wechat.com","weibo.com","vk.com","quora.com","medium.com","discord.com","discord.gg","telegram.org","t.me","slack.com"],P={"facebook.com":"Facebook","fb.com":"Facebook","fb.me":"Facebook","l.facebook.com":"Facebook","lm.facebook.com":"Facebook","m.facebook.com":"Facebook","instagram.com":"Instagram","l.instagram.com":"Instagram","twitter.com":"Twitter","t.co":"Twitter","x.com":"Twitter","linkedin.com":"LinkedIn","lnkd.in":"LinkedIn","pinterest.com":"Pinterest","pin.it":"Pinterest","reddit.com":"Reddit","tiktok.com":"TikTok","youtube.com":"YouTube","youtu.be":"YouTube","snapchat.com":"Snapchat","tumblr.com":"Tumblr","threads.net":"Threads","mastodon.social":"Mastodon","bsky.app":"Bluesky","whatsapp.com":"WhatsApp","wechat.com":"WeChat","weibo.com":"Weibo","vk.com":"VK","quora.com":"Quora","medium.com":"Medium","discord.com":"Discord","discord.gg":"Discord","telegram.org":"Telegram","t.me":"Telegram","slack.com":"Slack"},A={"google.":"Google","bing.com":"Bing","yahoo.":"Yahoo","duckduckgo.com":"DuckDuckGo","baidu.com":"Baidu","yandex.":"Yandex","ask.com":"Ask","ecosia.org":"Ecosia","aol.com":"AOL","startpage.com":"Startpage","qwant.com":"Qwant","brave.com":"Brave","search.brave.com":"Brave","naver.com":"Naver","daum.net":"Daum","sogou.com":"Sogou","so.com":"360 Search","seznam.cz":"Seznam","googlesyndication.com":"Google","googleadservices.com":"Google"};(function(){"use strict";let c={utmKeys:["utm_source","utm_medium","utm_campaign","utm_term","utm_content","utm_id"],clickIdKeys:["gclid","msclkid","fbclid"],linkSelectors:["a[href]","button[onclick*='location']","button[onclick*='window.open']","button[onclick*='href']","[data-href]"],inputSelector:"[data-utm-input]",inputKeyMap:{source:"utm_source",medium:"utm_medium",campaign:"utm_campaign",term:"utm_term",content:"utm_content",id:"utm_id",utm_source:"utm_source",utm_medium:"utm_medium",utm_campaign:"utm_campaign",utm_term:"utm_term",utm_content:"utm_content",utm_id:"utm_id",gclid:"gclid",msclkid:"msclkid",fbclid:"fbclid",channel:"_channel",channeldrilldown1:"_channelDrilldown1",channeldrilldown2:"_channelDrilldown2",channeldrilldown3:"_channelDrilldown3",landingpage:"_landingPage",landingpagegroup:"_landingPageGroup"}};function g(n,t){let o=n.toLowerCase(),e=t.toLowerCase();return e.endsWith(".")?o===e.slice(0,-1)||o.includes("."+e.slice(0,-1)+".")||o.startsWith(e):o===e||o.endsWith("."+e)}function w(n){return y.some(t=>g(n,t))}function h(n){return M.some(t=>g(n,t))}function T(n){for(let[t,o]of Object.entries(A))if(g(n,t))return o;return b(n)}function p(n){for(let[t,o]of Object.entries(P))if(g(n,t))return o;return b(n)}function b(n){return n.replace(/^www\./,"")}function f(n){let t=n.toLowerCase().trim();return Object.values(P).map(e=>e.toLowerCase()).includes(t)?!0:M.some(e=>t===e||t===e.replace(".com",""))}function U(n){let t=n.toLowerCase().trim();return Object.values(A).map(e=>e.toLowerCase()).includes(t)?!0:y.some(e=>{let i=e.replace(/\.$/,"");return t===i||t===i.replace(".com","")})}function r(n,...t){if(!n)return!1;let o=n.toLowerCase();return t.some(e=>o.includes(e.toLowerCase()))}function k(n,...t){if(!n)return!1;let o=n.toLowerCase().trim();return t.some(e=>o===e.toLowerCase())}function R(){let n=new URLSearchParams(window.location.search),t={};c.utmKeys.forEach(e=>{let i=n.get(e);i&&(t[e]=i)}),c.clickIdKeys.forEach(e=>{let i=n.get(e);i&&(t[e]=i)});let o=n.get("source");return o&&!t.utm_source&&(t.source=o),t}function C(n){return!!n.utm_source||!!n.utm_medium||!!n.utm_campaign||!!n.source||!!n.gclid||!!n.msclkid||!!n.fbclid}function N(n){return!!n.utm_source||!!n.utm_medium||!!n.utm_campaign}function I(){try{if(!document.referrer)return"";let n=new URL(document.referrer);return n.hostname===window.location.hostname?"":n.hostname.toLowerCase()}catch{return""}}function O(){return window.location.pathname+window.location.search}function K(){let n=window.location.pathname.split("/").filter(Boolean);return n.length>0?"/"+n[0]:"/"}function W(n,t){let o=n.utm_source||"",e=n.utm_medium||"",i=n.utm_campaign||"",d=n.utm_term||"",l=n.utm_content||"",u=n.source||"",m=n.gclid||"",v=n.msclkid||"",E=O(),Y=K(),a={landingPage:E,landingPageGroup:Y};if(k(e,"social")&&(f(o)||h(t))){let s=f(o)?D(o):p(t);return{...a,channel:"Organic Social",channelDrilldown1:s,channelDrilldown2:i,channelDrilldown3:l}}if(k(e,"email"))return{...a,channel:"Email Marketing",channelDrilldown1:o||"Email",channelDrilldown2:i,channelDrilldown3:l};if(r(o,"paidsocial")||r(e,"paidsocial")||r(e,"paid","ppc","cpc")&&f(o)||r(e,"paid","ppc","cpc")&&h(t)){let s=f(o)?D(o):h(t)?p(t):o||"Paid Social";return{...a,channel:"Paid Social",channelDrilldown1:s,channelDrilldown2:i,channelDrilldown3:d||l}}if(r(o,"paidsearch")||r(e,"paidsearch")||r(o,"adwords","ppc","cpc")||r(e,"adwords","ppc","cpc")||r(i,"adwords","ppc","cpc")||m||v||N(n)&&w(t)){let s="Paid Search";return m?s="Google":v?s="Bing":U(o)?s=D(o):w(t)?s=T(t):o&&(s=o),{...a,channel:"Paid Search",channelDrilldown1:s,channelDrilldown2:i,channelDrilldown3:d}}return k(e,"display")?{...a,channel:"Display",channelDrilldown1:o||"Display",channelDrilldown2:i,channelDrilldown3:l}:r(e,"affiliate")?{...a,channel:"Affiliates",channelDrilldown1:o||"Affiliate",channelDrilldown2:i,channelDrilldown3:l}:C(n)?{...a,channel:"Other Campaigns",channelDrilldown1:o||u,channelDrilldown2:e,channelDrilldown3:i}:t&&h(t)?{...a,channel:"Organic Social",channelDrilldown1:p(t),channelDrilldown2:"",channelDrilldown3:""}:t&&w(t)?{...a,channel:"Organic Search",channelDrilldown1:T(t),channelDrilldown2:"",channelDrilldown3:""}:t?{...a,channel:"Referral",channelDrilldown1:b(t),channelDrilldown2:E,channelDrilldown3:""}:{...a,channel:"Direct",channelDrilldown1:"Direct",channelDrilldown2:E,channelDrilldown3:""}}function D(n){return n&&n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()}function G(n,t){try{return n.startsWith("/")||n.startsWith("./")||n.startsWith("../")?!0:/^[a-z]+:/i.test(n)&&!n.startsWith("http")?!1:n.startsWith("http")?new URL(n).hostname===t:n.startsWith("//")?new URL("https:"+n).hostname===t:!n.includes("://")}catch(o){return console.warn("UTM: Error parsing URL:",n,o),!1}}function j(n,t){try{let o=new URL(n,window.location.origin);return Object.entries(t).forEach(([e,i])=>{c.utmKeys.includes(e)&&(o.searchParams.has(e)||o.searchParams.set(e,i))}),o.toString()}catch(o){return console.warn("UTM: Error processing URL:",n,o),n}}function L(n){return n.getAttribute("data-utm-exception")==="true"}function _(n,t){if(L(n))return;let o=window.location.hostname,e=null;if(n instanceof HTMLAnchorElement&&n.href?e=n.href:n instanceof HTMLElement&&n.dataset.href&&(e=n.dataset.href),e&&G(e,o)){let i=j(e,t);n instanceof HTMLAnchorElement?n.href=i:n instanceof HTMLElement&&n.dataset.href&&(n.dataset.href=i)}}function q(n){document.querySelectorAll(c.linkSelectors.join(", ")).forEach(t=>_(t,n))}function S(n,t){if(L(n))return;let o=n.getAttribute("data-utm-input")?.trim().toLowerCase();if(!o)return;let e=c.inputKeyMap[o];if(!e){console.warn(`UTM: Unknown data-utm-input value "${o}"`);return}let i=t[e];if(i&&(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)){if(n.value&&n.value.trim()!=="")return;n.value=i,n.dispatchEvent(new Event("input",{bubbles:!0})),n.dispatchEvent(new Event("change",{bubbles:!0}))}}function x(n){document.querySelectorAll(c.inputSelector).forEach(t=>S(t,n))}function B(n){let t={};return Object.entries(n.params).forEach(([o,e])=>{t[o]=e}),t._channel=n.attribution.channel,t._channelDrilldown1=n.attribution.channelDrilldown1,t._channelDrilldown2=n.attribution.channelDrilldown2,t._channelDrilldown3=n.attribution.channelDrilldown3,t._landingPage=n.attribution.landingPage,t._landingPageGroup=n.attribution.landingPageGroup,t}function z(n,t){let o=[...c.linkSelectors,c.inputSelector].join(", "),e=null,i=[];function d(){let l=i.slice();i=[],e=null,l.forEach(u=>{u.matches?.(c.inputSelector)?S(u,t):u.matches?.(c.linkSelectors.join(", "))&&_(u,n),u.querySelectorAll?.(o).forEach(m=>{m.matches(c.inputSelector)?S(m,t):_(m,n)})})}new MutationObserver(l=>{l.forEach(u=>{u.addedNodes.forEach(m=>{m.nodeType===Node.ELEMENT_NODE&&i.push(m)})}),i.length>0&&!e&&(e=setTimeout(d,50))}).observe(document.body,{childList:!0,subtree:!0})}function F(){let n=R(),t=I(),o=W(n,t),e={params:n,attribution:o},i=B(e),d=()=>{q(e.params),x(i),z(e.params,i)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",d):d()}F()})();})();
1
+ "use strict";(()=>{var P=["google.","bing.com","yahoo.","duckduckgo.com","baidu.com","yandex.","ask.com","ecosia.org","aol.com","startpage.com","qwant.com","brave.com","search.brave.com","naver.com","daum.net","sogou.com","so.com","seznam.cz","onesearch.com","swisscows.com","mojeek.com","presearch.com","search.yahoo.com","googlesyndication.com","googleadservices.com"],y=["facebook.com","fb.com","fb.me","l.facebook.com","lm.facebook.com","m.facebook.com","instagram.com","l.instagram.com","twitter.com","t.co","x.com","linkedin.com","lnkd.in","pinterest.com","pin.it","reddit.com","tiktok.com","youtube.com","youtu.be","snapchat.com","tumblr.com","threads.net","mastodon.social","bsky.app","whatsapp.com","wechat.com","weibo.com","vk.com","quora.com","medium.com","discord.com","discord.gg","telegram.org","t.me","slack.com"],A={"facebook.com":"Facebook","fb.com":"Facebook","fb.me":"Facebook","l.facebook.com":"Facebook","lm.facebook.com":"Facebook","m.facebook.com":"Facebook","instagram.com":"Instagram","l.instagram.com":"Instagram","twitter.com":"Twitter","t.co":"Twitter","x.com":"Twitter","linkedin.com":"LinkedIn","lnkd.in":"LinkedIn","pinterest.com":"Pinterest","pin.it":"Pinterest","reddit.com":"Reddit","tiktok.com":"TikTok","youtube.com":"YouTube","youtu.be":"YouTube","snapchat.com":"Snapchat","tumblr.com":"Tumblr","threads.net":"Threads","mastodon.social":"Mastodon","bsky.app":"Bluesky","whatsapp.com":"WhatsApp","wechat.com":"WeChat","weibo.com":"Weibo","vk.com":"VK","quora.com":"Quora","medium.com":"Medium","discord.com":"Discord","discord.gg":"Discord","telegram.org":"Telegram","t.me":"Telegram","slack.com":"Slack"},R={"google.":"Google","bing.com":"Bing","yahoo.":"Yahoo","duckduckgo.com":"DuckDuckGo","baidu.com":"Baidu","yandex.":"Yandex","ask.com":"Ask","ecosia.org":"Ecosia","aol.com":"AOL","startpage.com":"Startpage","qwant.com":"Qwant","brave.com":"Brave","search.brave.com":"Brave","naver.com":"Naver","daum.net":"Daum","sogou.com":"Sogou","so.com":"360 Search","seznam.cz":"Seznam","googlesyndication.com":"Google","googleadservices.com":"Google"};(function(){"use strict";let r={utmKeys:["utm_source","utm_medium","utm_campaign","utm_term","utm_content","utm_id"],clickIdKeys:["gclid","msclkid","fbclid"],linkSelectors:["a[href]","button[onclick*='location']","button[onclick*='window.open']","button[onclick*='href']","[data-href]"],inputSelector:"[data-utm-input]",inputKeyMap:{source:"utm_source",medium:"utm_medium",campaign:"utm_campaign",term:"utm_term",content:"utm_content",id:"utm_id",utm_source:"utm_source",utm_medium:"utm_medium",utm_campaign:"utm_campaign",utm_term:"utm_term",utm_content:"utm_content",utm_id:"utm_id",gclid:"gclid",msclkid:"msclkid",fbclid:"fbclid",channel:"_channel",channeldrilldown1:"_channelDrilldown1",channeldrilldown2:"_channelDrilldown2",channeldrilldown3:"_channelDrilldown3",landingpage:"_landingPage",landingpagegroup:"_landingPageGroup"}};function g(n,t){let o=n.toLowerCase(),e=t.toLowerCase();return e.endsWith(".")?o===e.slice(0,-1)||o.includes("."+e.slice(0,-1)+".")||o.startsWith(e):o===e||o.endsWith("."+e)}function p(n){return P.some(t=>g(n,t))}function h(n){return y.some(t=>g(n,t))}function T(n){for(let[t,o]of Object.entries(R))if(g(n,t))return o;return k(n)}function b(n){for(let[t,o]of Object.entries(A))if(g(n,t))return o;return k(n)}function k(n){return n.replace(/^www\./,"")}function f(n){let t=n.toLowerCase().trim();return Object.values(A).map(e=>e.toLowerCase()).includes(t)?!0:y.some(e=>t===e||t===e.replace(".com",""))}function U(n){let t=n.toLowerCase().trim();return Object.values(R).map(e=>e.toLowerCase()).includes(t)?!0:P.some(e=>{let i=e.replace(/\.$/,"");return t===i||t===i.replace(".com","")})}function l(n,...t){if(!n)return!1;let o=n.toLowerCase();return t.some(e=>o.includes(e.toLowerCase()))}function D(n,...t){if(!n)return!1;let o=n.toLowerCase().trim();return t.some(e=>o===e.toLowerCase())}function C(){let n=new URLSearchParams(window.location.search),t={};r.utmKeys.forEach(e=>{let i=n.get(e);i&&(t[e]=i)}),r.clickIdKeys.forEach(e=>{let i=n.get(e);i&&(t[e]=i)});let o=n.get("source");return o&&!t.utm_source&&(t.source=o),t}function N(n){return!!n.utm_source||!!n.utm_medium||!!n.utm_campaign||!!n.source||!!n.gclid||!!n.msclkid||!!n.fbclid}function O(n){return!!n.utm_source||!!n.utm_medium||!!n.utm_campaign}function I(){try{if(!document.referrer)return"";let n=new URL(document.referrer);return n.hostname===window.location.hostname?"":n.hostname.toLowerCase()}catch{return""}}function G(){return window.location.pathname+window.location.search}function K(){let n=window.location.pathname.split("/").filter(Boolean);return n.length>0?"/"+n[0]:"/"}function W(n,t){let o=n.utm_source||"",e=n.utm_medium||"",i=n.utm_campaign||"",d=n.utm_term||"",s=n.utm_content||"",u=n.source||"",m=n.gclid||"",M=n.msclkid||"",w=G(),Q=K(),c={landingPage:w,landingPageGroup:Q},v=Object.entries({"chatgpt.com":"ChatGPT","chat.openai.com":"ChatGPT","perplexity.ai":"Perplexity","you.com":"You.com","phind.com":"Phind","claude.ai":"Claude","gemini.google.com":"Gemini","copilot.microsoft.com":"Copilot"}).find(([a])=>g(t,a));if(v)return{...c,channel:"LLMs",channelDrilldown1:v[1],channelDrilldown2:w,channelDrilldown3:""};if(D(e,"social")&&(f(o)||h(t))){let a=f(o)?_(o):b(t);return{...c,channel:"Organic Social",channelDrilldown1:a,channelDrilldown2:i,channelDrilldown3:s}}if(D(e,"email"))return{...c,channel:"Email Marketing",channelDrilldown1:o||"Email",channelDrilldown2:i,channelDrilldown3:s};if(l(o,"paidsocial")||l(e,"paidsocial")||l(e,"paid","ppc","cpc")&&f(o)||l(e,"paid","ppc","cpc")&&h(t)){let a=f(o)?_(o):h(t)?b(t):o||"Paid Social";return{...c,channel:"Paid Social",channelDrilldown1:a,channelDrilldown2:i,channelDrilldown3:d||s}}if(l(o,"paidsearch")||l(e,"paidsearch")||l(o,"adwords","ppc","cpc")||l(e,"adwords","ppc","cpc")||l(i,"adwords","ppc","cpc")||m||M||O(n)&&p(t)){let a="Paid Search";return m?a="Google":M?a="Bing":U(o)?a=_(o):p(t)?a=T(t):o&&(a=o),{...c,channel:"Paid Search",channelDrilldown1:a,channelDrilldown2:i,channelDrilldown3:d}}return D(e,"display")?{...c,channel:"Display",channelDrilldown1:o||"Display",channelDrilldown2:i,channelDrilldown3:s}:l(e,"affiliate")?{...c,channel:"Affiliates",channelDrilldown1:o||"Affiliate",channelDrilldown2:i,channelDrilldown3:s}:N(n)?{...c,channel:"Other Campaigns",channelDrilldown1:o||u,channelDrilldown2:e,channelDrilldown3:i}:t&&h(t)?{...c,channel:"Organic Social",channelDrilldown1:b(t),channelDrilldown2:"",channelDrilldown3:""}:t&&p(t)?{...c,channel:"Organic Search",channelDrilldown1:T(t),channelDrilldown2:"",channelDrilldown3:""}:t?{...c,channel:"Referral",channelDrilldown1:k(t),channelDrilldown2:w,channelDrilldown3:""}:{...c,channel:"Direct",channelDrilldown1:"Direct",channelDrilldown2:w,channelDrilldown3:""}}function _(n){return n&&n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()}function j(n,t){try{return n.startsWith("/")||n.startsWith("./")||n.startsWith("../")?!0:/^[a-z]+:/i.test(n)&&!n.startsWith("http")?!1:n.startsWith("http")?new URL(n).hostname===t:n.startsWith("//")?new URL("https:"+n).hostname===t:!n.includes("://")}catch(o){return console.warn("UTM: Error parsing URL:",n,o),!1}}function x(n,t){try{let o=new URL(n,window.location.origin);return Object.entries(t).forEach(([e,i])=>{r.utmKeys.includes(e)&&(o.searchParams.has(e)||o.searchParams.set(e,i))}),o.toString()}catch(o){return console.warn("UTM: Error processing URL:",n,o),n}}function E(n){return n.getAttribute("data-utm-exception")==="true"}function L(n,t){if(E(n))return;let o=window.location.hostname,e=null;if(n instanceof HTMLAnchorElement&&n.href?e=n.href:n instanceof HTMLElement&&n.dataset.href&&(e=n.dataset.href),e&&j(e,o)){let i=x(e,t);n instanceof HTMLAnchorElement?n.href=i:n instanceof HTMLElement&&n.dataset.href&&(n.dataset.href=i)}}function q(n){document.querySelectorAll(r.linkSelectors.join(", ")).forEach(t=>L(t,n))}function S(n,t){if(E(n))return;let o=n.getAttribute("data-utm-input")?.trim().toLowerCase();if(!o)return;let e=r.inputKeyMap[o];if(!e){console.warn(`UTM: Unknown data-utm-input value "${o}"`);return}let i=t[e];if(i&&(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)){if(n.value&&n.value.trim()!=="")return;n.value=i,n.dispatchEvent(new Event("input",{bubbles:!0})),n.dispatchEvent(new Event("change",{bubbles:!0}))}}function B(n){document.querySelectorAll(r.inputSelector).forEach(t=>S(t,n))}function Y(n){let t={};return Object.entries(n.params).forEach(([o,e])=>{t[o]=e}),t._channel=n.attribution.channel,t._channelDrilldown1=n.attribution.channelDrilldown1,t._channelDrilldown2=n.attribution.channelDrilldown2,t._channelDrilldown3=n.attribution.channelDrilldown3,t._landingPage=n.attribution.landingPage,t._landingPageGroup=n.attribution.landingPageGroup,t}function z(n,t){let o=[...r.linkSelectors,r.inputSelector].join(", "),e=null,i=[];function d(){let s=i.slice();i=[],e=null,s.forEach(u=>{u.matches?.(r.inputSelector)?S(u,t):u.matches?.(r.linkSelectors.join(", "))&&L(u,n),u.querySelectorAll?.(o).forEach(m=>{m.matches(r.inputSelector)?S(m,t):L(m,n)})})}new MutationObserver(s=>{s.forEach(u=>{u.addedNodes.forEach(m=>{m.nodeType===Node.ELEMENT_NODE&&i.push(m)})}),i.length>0&&!e&&(e=setTimeout(d,50))}).observe(document.body,{childList:!0,subtree:!0})}function F(){let n=C(),t=I(),o=W(n,t),e={params:n,attribution:o},i=Y(e),d=()=>{q(e.params),B(i),z(e.params,i)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",d):d()}F()})();})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/form/utm-propagation.ts"],
4
- "sourcesContent": ["// UTM Attribution & Propagation Script (TypeScript)\n// \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\n// 1. Captures UTM params, gclid, msclkid, fbclid from URL\n// 2. Falls back to referrer analysis when no UTMs are present\n// 3. Categorises visitors into channels using an 11-rule priority cascade\n// (mirrors Attributer's logic)\n// 4. Propagates UTM params to internal links (without overriding existing params)\n// 5. Fills form fields marked with data-utm-input (without overriding existing values)\n// 6. No cookies or storage \u2014 reads fresh from URL on every page load\n// (UTMs persist across pages via link propagation in rule 4)\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Types\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\ninterface UTMParams {\n [key: string]: string;\n}\n\ninterface AttributionResult {\n channel: string;\n channelDrilldown1: string;\n channelDrilldown2: string;\n channelDrilldown3: string;\n landingPage: string;\n landingPageGroup: string;\n}\n\ninterface AttributionData {\n params: UTMParams;\n attribution: AttributionResult;\n}\n\ninterface UTMConfig {\n utmKeys: string[];\n clickIdKeys: string[];\n linkSelectors: string[];\n inputSelector: string;\n inputKeyMap: Record<string, string>;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Recognised Domain Lists\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst SEARCH_ENGINES: string[] = [\n \"google.\",\n \"bing.com\",\n \"yahoo.\",\n \"duckduckgo.com\",\n \"baidu.com\",\n \"yandex.\",\n \"ask.com\",\n \"ecosia.org\",\n \"aol.com\",\n \"startpage.com\",\n \"qwant.com\",\n \"brave.com\",\n \"search.brave.com\",\n \"naver.com\",\n \"daum.net\",\n \"sogou.com\",\n \"so.com\",\n \"seznam.cz\",\n \"onesearch.com\",\n \"swisscows.com\",\n \"mojeek.com\",\n \"presearch.com\",\n \"search.yahoo.com\",\n \"googlesyndication.com\",\n \"googleadservices.com\",\n];\n\nconst SOCIAL_NETWORKS: string[] = [\n \"facebook.com\",\n \"fb.com\",\n \"fb.me\",\n \"l.facebook.com\",\n \"lm.facebook.com\",\n \"m.facebook.com\",\n \"instagram.com\",\n \"l.instagram.com\",\n \"twitter.com\",\n \"t.co\",\n \"x.com\",\n \"linkedin.com\",\n \"lnkd.in\",\n \"pinterest.com\",\n \"pin.it\",\n \"reddit.com\",\n \"tiktok.com\",\n \"youtube.com\",\n \"youtu.be\",\n \"snapchat.com\",\n \"tumblr.com\",\n \"threads.net\",\n \"mastodon.social\",\n \"bsky.app\",\n \"whatsapp.com\",\n \"wechat.com\",\n \"weibo.com\",\n \"vk.com\",\n \"quora.com\",\n \"medium.com\",\n \"discord.com\",\n \"discord.gg\",\n \"telegram.org\",\n \"t.me\",\n \"slack.com\",\n];\n\nconst SOCIAL_DISPLAY_NAMES: Record<string, string> = {\n \"facebook.com\": \"Facebook\",\n \"fb.com\": \"Facebook\",\n \"fb.me\": \"Facebook\",\n \"l.facebook.com\": \"Facebook\",\n \"lm.facebook.com\": \"Facebook\",\n \"m.facebook.com\": \"Facebook\",\n \"instagram.com\": \"Instagram\",\n \"l.instagram.com\": \"Instagram\",\n \"twitter.com\": \"Twitter\",\n \"t.co\": \"Twitter\",\n \"x.com\": \"Twitter\",\n \"linkedin.com\": \"LinkedIn\",\n \"lnkd.in\": \"LinkedIn\",\n \"pinterest.com\": \"Pinterest\",\n \"pin.it\": \"Pinterest\",\n \"reddit.com\": \"Reddit\",\n \"tiktok.com\": \"TikTok\",\n \"youtube.com\": \"YouTube\",\n \"youtu.be\": \"YouTube\",\n \"snapchat.com\": \"Snapchat\",\n \"tumblr.com\": \"Tumblr\",\n \"threads.net\": \"Threads\",\n \"mastodon.social\": \"Mastodon\",\n \"bsky.app\": \"Bluesky\",\n \"whatsapp.com\": \"WhatsApp\",\n \"wechat.com\": \"WeChat\",\n \"weibo.com\": \"Weibo\",\n \"vk.com\": \"VK\",\n \"quora.com\": \"Quora\",\n \"medium.com\": \"Medium\",\n \"discord.com\": \"Discord\",\n \"discord.gg\": \"Discord\",\n \"telegram.org\": \"Telegram\",\n \"t.me\": \"Telegram\",\n \"slack.com\": \"Slack\",\n};\n\nconst SEARCH_DISPLAY_NAMES: Record<string, string> = {\n \"google.\": \"Google\",\n \"bing.com\": \"Bing\",\n \"yahoo.\": \"Yahoo\",\n \"duckduckgo.com\": \"DuckDuckGo\",\n \"baidu.com\": \"Baidu\",\n \"yandex.\": \"Yandex\",\n \"ask.com\": \"Ask\",\n \"ecosia.org\": \"Ecosia\",\n \"aol.com\": \"AOL\",\n \"startpage.com\": \"Startpage\",\n \"qwant.com\": \"Qwant\",\n \"brave.com\": \"Brave\",\n \"search.brave.com\": \"Brave\",\n \"naver.com\": \"Naver\",\n \"daum.net\": \"Daum\",\n \"sogou.com\": \"Sogou\",\n \"so.com\": \"360 Search\",\n \"seznam.cz\": \"Seznam\",\n \"googlesyndication.com\": \"Google\",\n \"googleadservices.com\": \"Google\",\n};\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Main IIFE\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n(function (): void {\n \"use strict\";\n\n const config: UTMConfig = {\n utmKeys: [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n \"utm_id\",\n ],\n clickIdKeys: [\"gclid\", \"msclkid\", \"fbclid\"],\n linkSelectors: [\n \"a[href]\",\n \"button[onclick*='location']\",\n \"button[onclick*='window.open']\",\n \"button[onclick*='href']\",\n \"[data-href]\",\n ],\n inputSelector: \"[data-utm-input]\",\n inputKeyMap: {\n source: \"utm_source\",\n medium: \"utm_medium\",\n campaign: \"utm_campaign\",\n term: \"utm_term\",\n content: \"utm_content\",\n id: \"utm_id\",\n utm_source: \"utm_source\",\n utm_medium: \"utm_medium\",\n utm_campaign: \"utm_campaign\",\n utm_term: \"utm_term\",\n utm_content: \"utm_content\",\n utm_id: \"utm_id\",\n gclid: \"gclid\",\n msclkid: \"msclkid\",\n fbclid: \"fbclid\",\n channel: \"_channel\",\n channeldrilldown1: \"_channelDrilldown1\",\n channeldrilldown2: \"_channelDrilldown2\",\n channeldrilldown3: \"_channelDrilldown3\",\n landingpage: \"_landingPage\",\n landingpagegroup: \"_landingPageGroup\",\n },\n };\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Helper: Domain Matching\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function domainMatches(hostname: string, pattern: string): boolean {\n const h = hostname.toLowerCase();\n const p = pattern.toLowerCase();\n if (p.endsWith(\".\")) {\n return h === p.slice(0, -1) || h.includes(\".\" + p.slice(0, -1) + \".\") || h.startsWith(p);\n }\n return h === p || h.endsWith(\".\" + p);\n }\n\n function isRecognisedSearchEngine(hostname: string): boolean {\n return SEARCH_ENGINES.some((pattern) => domainMatches(hostname, pattern));\n }\n\n function isRecognisedSocialNetwork(hostname: string): boolean {\n return SOCIAL_NETWORKS.some((domain) => domainMatches(hostname, domain));\n }\n\n function getSearchEngineName(hostname: string): string {\n for (const [pattern, name] of Object.entries(SEARCH_DISPLAY_NAMES)) {\n if (domainMatches(hostname, pattern)) return name;\n }\n return cleanDomain(hostname);\n }\n\n function getSocialNetworkName(hostname: string): string {\n for (const [domain, name] of Object.entries(SOCIAL_DISPLAY_NAMES)) {\n if (domainMatches(hostname, domain)) return name;\n }\n return cleanDomain(hostname);\n }\n\n function cleanDomain(hostname: string): string {\n return hostname.replace(/^www\\./, \"\");\n }\n\n function valueIsSocialNetwork(value: string): boolean {\n const v = value.toLowerCase().trim();\n const allNames = Object.values(SOCIAL_DISPLAY_NAMES).map((n) => n.toLowerCase());\n if (allNames.includes(v)) return true;\n return SOCIAL_NETWORKS.some((domain) => v === domain || v === domain.replace(\".com\", \"\"));\n }\n\n function valueIsSearchEngine(value: string): boolean {\n const v = value.toLowerCase().trim();\n const allNames = Object.values(SEARCH_DISPLAY_NAMES).map((n) => n.toLowerCase());\n if (allNames.includes(v)) return true;\n return SEARCH_ENGINES.some((pattern) => {\n const clean = pattern.replace(/\\.$/, \"\");\n return v === clean || v === clean.replace(\".com\", \"\");\n });\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Helper: String checks\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function containsAny(value: string | undefined, ...terms: string[]): boolean {\n if (!value) return false;\n const v = value.toLowerCase();\n return terms.some((t) => v.includes(t.toLowerCase()));\n }\n\n function equalsAny(value: string | undefined, ...terms: string[]): boolean {\n if (!value) return false;\n const v = value.toLowerCase().trim();\n return terms.some((t) => v === t.toLowerCase());\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Param Capture from URL\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function getCapturedParams(): UTMParams {\n const urlParams = new URLSearchParams(window.location.search);\n const captured: UTMParams = {};\n\n config.utmKeys.forEach((key) => {\n const value = urlParams.get(key);\n if (value) captured[key] = value;\n });\n\n config.clickIdKeys.forEach((key) => {\n const value = urlParams.get(key);\n if (value) captured[key] = value;\n });\n\n const bareSource = urlParams.get(\"source\");\n if (bareSource && !captured[\"utm_source\"]) {\n captured[\"source\"] = bareSource;\n }\n\n return captured;\n }\n\n function hasTrackingParams(params: UTMParams): boolean {\n return (\n !!params.utm_source ||\n !!params.utm_medium ||\n !!params.utm_campaign ||\n !!params.source ||\n !!params.gclid ||\n !!params.msclkid ||\n !!params.fbclid\n );\n }\n\n function hasUTMParams(params: UTMParams): boolean {\n return !!params.utm_source || !!params.utm_medium || !!params.utm_campaign;\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Referrer Analysis\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function getReferrerHostname(): string {\n try {\n if (!document.referrer) return \"\";\n const url = new URL(document.referrer);\n if (url.hostname === window.location.hostname) return \"\";\n return url.hostname.toLowerCase();\n } catch {\n return \"\";\n }\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Landing Page Info\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function getLandingPage(): string {\n return window.location.pathname + window.location.search;\n }\n\n function getLandingPageGroup(): string {\n const segments = window.location.pathname.split(\"/\").filter(Boolean);\n return segments.length > 0 ? \"/\" + segments[0] : \"/\";\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Channel Categorisation Engine (11-rule cascade)\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function categorise(params: UTMParams, referrerHost: string): AttributionResult {\n const utm_source = params.utm_source || \"\";\n const utm_medium = params.utm_medium || \"\";\n const utm_campaign = params.utm_campaign || \"\";\n const utm_term = params.utm_term || \"\";\n const utm_content = params.utm_content || \"\";\n const bare_source = params.source || \"\";\n const gclid = params.gclid || \"\";\n const msclkid = params.msclkid || \"\";\n\n const landingPage = getLandingPage();\n const landingPageGroup = getLandingPageGroup();\n\n const base = { landingPage, landingPageGroup };\n\n // Rule 1: Organic Social\n if (equalsAny(utm_medium, \"social\")) {\n if (valueIsSocialNetwork(utm_source) || isRecognisedSocialNetwork(referrerHost)) {\n const sourceName = valueIsSocialNetwork(utm_source)\n ? capitalise(utm_source)\n : getSocialNetworkName(referrerHost);\n return { ...base, channel: \"Organic Social\", channelDrilldown1: sourceName, channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n }\n\n // Rule 2: Email Marketing\n if (equalsAny(utm_medium, \"email\")) {\n return { ...base, channel: \"Email Marketing\", channelDrilldown1: utm_source || \"Email\", channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n\n // Rule 3: Paid Social\n if (\n containsAny(utm_source, \"paidsocial\") ||\n containsAny(utm_medium, \"paidsocial\") ||\n (containsAny(utm_medium, \"paid\", \"ppc\", \"cpc\") && valueIsSocialNetwork(utm_source)) ||\n (containsAny(utm_medium, \"paid\", \"ppc\", \"cpc\") && isRecognisedSocialNetwork(referrerHost))\n ) {\n const sourceName = valueIsSocialNetwork(utm_source)\n ? capitalise(utm_source)\n : isRecognisedSocialNetwork(referrerHost)\n ? getSocialNetworkName(referrerHost)\n : utm_source || \"Paid Social\";\n return { ...base, channel: \"Paid Social\", channelDrilldown1: sourceName, channelDrilldown2: utm_campaign, channelDrilldown3: utm_term || utm_content };\n }\n\n // Rule 4: Paid Search\n if (\n containsAny(utm_source, \"paidsearch\") ||\n containsAny(utm_medium, \"paidsearch\") ||\n containsAny(utm_source, \"adwords\", \"ppc\", \"cpc\") ||\n containsAny(utm_medium, \"adwords\", \"ppc\", \"cpc\") ||\n containsAny(utm_campaign, \"adwords\", \"ppc\", \"cpc\") ||\n gclid || msclkid ||\n (hasUTMParams(params) && isRecognisedSearchEngine(referrerHost))\n ) {\n let sourceName = \"Paid Search\";\n if (gclid) sourceName = \"Google\";\n else if (msclkid) sourceName = \"Bing\";\n else if (valueIsSearchEngine(utm_source)) sourceName = capitalise(utm_source);\n else if (isRecognisedSearchEngine(referrerHost)) sourceName = getSearchEngineName(referrerHost);\n else if (utm_source) sourceName = utm_source;\n return { ...base, channel: \"Paid Search\", channelDrilldown1: sourceName, channelDrilldown2: utm_campaign, channelDrilldown3: utm_term };\n }\n\n // Rule 5: Display\n if (equalsAny(utm_medium, \"display\")) {\n return { ...base, channel: \"Display\", channelDrilldown1: utm_source || \"Display\", channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n\n // Rule 6: Affiliates\n if (containsAny(utm_medium, \"affiliate\")) {\n return { ...base, channel: \"Affiliates\", channelDrilldown1: utm_source || \"Affiliate\", channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n\n // Rule 7: Other Campaigns\n if (hasTrackingParams(params)) {\n return { ...base, channel: \"Other Campaigns\", channelDrilldown1: utm_source || bare_source, channelDrilldown2: utm_medium, channelDrilldown3: utm_campaign };\n }\n\n // Rule 8: Organic Social (by referrer)\n if (referrerHost && isRecognisedSocialNetwork(referrerHost)) {\n return { ...base, channel: \"Organic Social\", channelDrilldown1: getSocialNetworkName(referrerHost), channelDrilldown2: \"\", channelDrilldown3: \"\" };\n }\n\n // Rule 9: Organic Search (by referrer)\n if (referrerHost && isRecognisedSearchEngine(referrerHost)) {\n return { ...base, channel: \"Organic Search\", channelDrilldown1: getSearchEngineName(referrerHost), channelDrilldown2: \"\", channelDrilldown3: \"\" };\n }\n\n // Rule 10: Referral\n if (referrerHost) {\n return { ...base, channel: \"Referral\", channelDrilldown1: cleanDomain(referrerHost), channelDrilldown2: landingPage, channelDrilldown3: \"\" };\n }\n\n // Rule 11: Direct\n return { ...base, channel: \"Direct\", channelDrilldown1: \"Direct\", channelDrilldown2: landingPage, channelDrilldown3: \"\" };\n }\n\n function capitalise(str: string): string {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Link Processing (propagate UTM params to internal links)\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function isInternalLink(url: string, currentHost: string): boolean {\n try {\n if (url.startsWith(\"/\") || url.startsWith(\"./\") || url.startsWith(\"../\")) return true;\n if (/^[a-z]+:/i.test(url) && !url.startsWith(\"http\")) return false;\n if (url.startsWith(\"http\")) return new URL(url).hostname === currentHost;\n if (url.startsWith(\"//\")) return new URL(\"https:\" + url).hostname === currentHost;\n if (!url.includes(\"://\")) return true;\n return false;\n } catch (e) {\n console.warn(\"UTM: Error parsing URL:\", url, e);\n return false;\n }\n }\n\n function addUTMToURL(url: string, utmParams: UTMParams): string {\n try {\n const urlObj = new URL(url, window.location.origin);\n Object.entries(utmParams).forEach(([key, value]) => {\n if (!config.utmKeys.includes(key)) return;\n if (urlObj.searchParams.has(key)) return; // never override existing\n urlObj.searchParams.set(key, value);\n });\n return urlObj.toString();\n } catch (e) {\n console.warn(\"UTM: Error processing URL:\", url, e);\n return url;\n }\n }\n\n function hasUTMException(element: Element): boolean {\n return element.getAttribute(\"data-utm-exception\") === \"true\";\n }\n\n function processLink(element: Element, utmParams: UTMParams): void {\n if (hasUTMException(element)) return;\n\n const currentHost = window.location.hostname;\n let url: string | null = null;\n\n if (element instanceof HTMLAnchorElement && element.href) {\n url = element.href;\n } else if (element instanceof HTMLElement && element.dataset.href) {\n url = element.dataset.href;\n }\n\n if (url && isInternalLink(url, currentHost)) {\n const updatedURL = addUTMToURL(url, utmParams);\n if (element instanceof HTMLAnchorElement) {\n element.href = updatedURL;\n } else if (element instanceof HTMLElement && element.dataset.href) {\n element.dataset.href = updatedURL;\n }\n }\n }\n\n function processAllLinks(utmParams: UTMParams): void {\n document.querySelectorAll(config.linkSelectors.join(\", \")).forEach((el) => processLink(el, utmParams));\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Input Field Processing\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function processInput(element: Element, allValues: Record<string, string>): void {\n if (hasUTMException(element)) return;\n\n const shortKey = element.getAttribute(\"data-utm-input\")?.trim().toLowerCase();\n if (!shortKey) return;\n\n const internalKey = config.inputKeyMap[shortKey];\n if (!internalKey) {\n console.warn(`UTM: Unknown data-utm-input value \"${shortKey}\"`);\n return;\n }\n\n const value = allValues[internalKey];\n if (!value) return;\n\n if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLTextAreaElement ||\n element instanceof HTMLSelectElement\n ) {\n if (element.value && element.value.trim() !== \"\") return; // never override\n element.value = value;\n element.dispatchEvent(new Event(\"input\", { bubbles: true }));\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n }\n\n function processAllInputs(allValues: Record<string, string>): void {\n document.querySelectorAll(config.inputSelector).forEach((el) => processInput(el, allValues));\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Build flat key\u2192value map for form fields\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function buildValueMap(data: AttributionData): Record<string, string> {\n const map: Record<string, string> = {};\n Object.entries(data.params).forEach(([key, value]) => { map[key] = value; });\n map[\"_channel\"] = data.attribution.channel;\n map[\"_channelDrilldown1\"] = data.attribution.channelDrilldown1;\n map[\"_channelDrilldown2\"] = data.attribution.channelDrilldown2;\n map[\"_channelDrilldown3\"] = data.attribution.channelDrilldown3;\n map[\"_landingPage\"] = data.attribution.landingPage;\n map[\"_landingPageGroup\"] = data.attribution.landingPageGroup;\n return map;\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // MutationObserver (handles dynamically added content)\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function observeNewContent(utmParams: UTMParams, allValues: Record<string, string>): void {\n const allSelectors = [...config.linkSelectors, config.inputSelector].join(\", \");\n\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let pendingNodes: Element[] = [];\n\n function flushPending(): void {\n const nodes = pendingNodes.slice();\n pendingNodes = [];\n debounceTimer = null;\n\n nodes.forEach((element) => {\n if (element.matches?.(config.inputSelector)) {\n processInput(element, allValues);\n } else if (element.matches?.(config.linkSelectors.join(\", \"))) {\n processLink(element, utmParams);\n }\n element.querySelectorAll?.(allSelectors).forEach((child) => {\n if (child.matches(config.inputSelector)) {\n processInput(child, allValues);\n } else {\n processLink(child, utmParams);\n }\n });\n });\n }\n\n new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n pendingNodes.push(node as Element);\n }\n });\n });\n if (pendingNodes.length > 0 && !debounceTimer) {\n debounceTimer = setTimeout(flushPending, 50);\n }\n }).observe(document.body, { childList: true, subtree: true });\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Init \u2014 no cookies, no storage, fresh on every load\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function init(): void {\n const freshParams = getCapturedParams();\n const referrerHost = getReferrerHostname();\n\n const attribution = categorise(freshParams, referrerHost);\n const data: AttributionData = { params: freshParams, attribution };\n const allValues = buildValueMap(data);\n\n const run = (): void => {\n processAllLinks(data.params);\n processAllInputs(allValues);\n observeNewContent(data.params, allValues);\n };\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", run);\n } else {\n run();\n }\n }\n\n init();\n})();"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// UTM Attribution & Propagation Script (TypeScript)\n// \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\n// 1. Captures UTM params, gclid, msclkid, fbclid from URL\n// 2. Falls back to referrer analysis when no UTMs are present\n// 3. Categorises visitors into channels using an 11-rule priority cascade\n// (mirrors Attributer's logic)\n// 4. Propagates UTM params to internal links (without overriding existing params)\n// 5. Fills form fields marked with data-utm-input (without overriding existing values)\n// 6. No cookies or storage \u2014 reads fresh from URL on every page load\n// (UTMs persist across pages via link propagation in rule 4)\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Types\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\ninterface UTMParams {\n [key: string]: string;\n}\n\ninterface AttributionResult {\n channel: string;\n channelDrilldown1: string;\n channelDrilldown2: string;\n channelDrilldown3: string;\n landingPage: string;\n landingPageGroup: string;\n}\n\ninterface AttributionData {\n params: UTMParams;\n attribution: AttributionResult;\n}\n\ninterface UTMConfig {\n utmKeys: string[];\n clickIdKeys: string[];\n linkSelectors: string[];\n inputSelector: string;\n inputKeyMap: Record<string, string>;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Recognised Domain Lists\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst SEARCH_ENGINES: string[] = [\n \"google.\",\n \"bing.com\",\n \"yahoo.\",\n \"duckduckgo.com\",\n \"baidu.com\",\n \"yandex.\",\n \"ask.com\",\n \"ecosia.org\",\n \"aol.com\",\n \"startpage.com\",\n \"qwant.com\",\n \"brave.com\",\n \"search.brave.com\",\n \"naver.com\",\n \"daum.net\",\n \"sogou.com\",\n \"so.com\",\n \"seznam.cz\",\n \"onesearch.com\",\n \"swisscows.com\",\n \"mojeek.com\",\n \"presearch.com\",\n \"search.yahoo.com\",\n \"googlesyndication.com\",\n \"googleadservices.com\",\n];\n\nconst SOCIAL_NETWORKS: string[] = [\n \"facebook.com\",\n \"fb.com\",\n \"fb.me\",\n \"l.facebook.com\",\n \"lm.facebook.com\",\n \"m.facebook.com\",\n \"instagram.com\",\n \"l.instagram.com\",\n \"twitter.com\",\n \"t.co\",\n \"x.com\",\n \"linkedin.com\",\n \"lnkd.in\",\n \"pinterest.com\",\n \"pin.it\",\n \"reddit.com\",\n \"tiktok.com\",\n \"youtube.com\",\n \"youtu.be\",\n \"snapchat.com\",\n \"tumblr.com\",\n \"threads.net\",\n \"mastodon.social\",\n \"bsky.app\",\n \"whatsapp.com\",\n \"wechat.com\",\n \"weibo.com\",\n \"vk.com\",\n \"quora.com\",\n \"medium.com\",\n \"discord.com\",\n \"discord.gg\",\n \"telegram.org\",\n \"t.me\",\n \"slack.com\",\n];\n\nconst SOCIAL_DISPLAY_NAMES: Record<string, string> = {\n \"facebook.com\": \"Facebook\",\n \"fb.com\": \"Facebook\",\n \"fb.me\": \"Facebook\",\n \"l.facebook.com\": \"Facebook\",\n \"lm.facebook.com\": \"Facebook\",\n \"m.facebook.com\": \"Facebook\",\n \"instagram.com\": \"Instagram\",\n \"l.instagram.com\": \"Instagram\",\n \"twitter.com\": \"Twitter\",\n \"t.co\": \"Twitter\",\n \"x.com\": \"Twitter\",\n \"linkedin.com\": \"LinkedIn\",\n \"lnkd.in\": \"LinkedIn\",\n \"pinterest.com\": \"Pinterest\",\n \"pin.it\": \"Pinterest\",\n \"reddit.com\": \"Reddit\",\n \"tiktok.com\": \"TikTok\",\n \"youtube.com\": \"YouTube\",\n \"youtu.be\": \"YouTube\",\n \"snapchat.com\": \"Snapchat\",\n \"tumblr.com\": \"Tumblr\",\n \"threads.net\": \"Threads\",\n \"mastodon.social\": \"Mastodon\",\n \"bsky.app\": \"Bluesky\",\n \"whatsapp.com\": \"WhatsApp\",\n \"wechat.com\": \"WeChat\",\n \"weibo.com\": \"Weibo\",\n \"vk.com\": \"VK\",\n \"quora.com\": \"Quora\",\n \"medium.com\": \"Medium\",\n \"discord.com\": \"Discord\",\n \"discord.gg\": \"Discord\",\n \"telegram.org\": \"Telegram\",\n \"t.me\": \"Telegram\",\n \"slack.com\": \"Slack\",\n};\n\nconst SEARCH_DISPLAY_NAMES: Record<string, string> = {\n \"google.\": \"Google\",\n \"bing.com\": \"Bing\",\n \"yahoo.\": \"Yahoo\",\n \"duckduckgo.com\": \"DuckDuckGo\",\n \"baidu.com\": \"Baidu\",\n \"yandex.\": \"Yandex\",\n \"ask.com\": \"Ask\",\n \"ecosia.org\": \"Ecosia\",\n \"aol.com\": \"AOL\",\n \"startpage.com\": \"Startpage\",\n \"qwant.com\": \"Qwant\",\n \"brave.com\": \"Brave\",\n \"search.brave.com\": \"Brave\",\n \"naver.com\": \"Naver\",\n \"daum.net\": \"Daum\",\n \"sogou.com\": \"Sogou\",\n \"so.com\": \"360 Search\",\n \"seznam.cz\": \"Seznam\",\n \"googlesyndication.com\": \"Google\",\n \"googleadservices.com\": \"Google\",\n};\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// Main IIFE\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n(function (): void {\n \"use strict\";\n\n const config: UTMConfig = {\n utmKeys: [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n \"utm_id\",\n ],\n clickIdKeys: [\"gclid\", \"msclkid\", \"fbclid\"],\n linkSelectors: [\n \"a[href]\",\n \"button[onclick*='location']\",\n \"button[onclick*='window.open']\",\n \"button[onclick*='href']\",\n \"[data-href]\",\n ],\n inputSelector: \"[data-utm-input]\",\n inputKeyMap: {\n source: \"utm_source\",\n medium: \"utm_medium\",\n campaign: \"utm_campaign\",\n term: \"utm_term\",\n content: \"utm_content\",\n id: \"utm_id\",\n utm_source: \"utm_source\",\n utm_medium: \"utm_medium\",\n utm_campaign: \"utm_campaign\",\n utm_term: \"utm_term\",\n utm_content: \"utm_content\",\n utm_id: \"utm_id\",\n gclid: \"gclid\",\n msclkid: \"msclkid\",\n fbclid: \"fbclid\",\n channel: \"_channel\",\n channeldrilldown1: \"_channelDrilldown1\",\n channeldrilldown2: \"_channelDrilldown2\",\n channeldrilldown3: \"_channelDrilldown3\",\n landingpage: \"_landingPage\",\n landingpagegroup: \"_landingPageGroup\",\n },\n };\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Helper: Domain Matching\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function domainMatches(hostname: string, pattern: string): boolean {\n const h = hostname.toLowerCase();\n const p = pattern.toLowerCase();\n if (p.endsWith(\".\")) {\n return h === p.slice(0, -1) || h.includes(\".\" + p.slice(0, -1) + \".\") || h.startsWith(p);\n }\n return h === p || h.endsWith(\".\" + p);\n }\n\n function isRecognisedSearchEngine(hostname: string): boolean {\n return SEARCH_ENGINES.some((pattern) => domainMatches(hostname, pattern));\n }\n\n function isRecognisedSocialNetwork(hostname: string): boolean {\n return SOCIAL_NETWORKS.some((domain) => domainMatches(hostname, domain));\n }\n\n function getSearchEngineName(hostname: string): string {\n for (const [pattern, name] of Object.entries(SEARCH_DISPLAY_NAMES)) {\n if (domainMatches(hostname, pattern)) return name;\n }\n return cleanDomain(hostname);\n }\n\n function getSocialNetworkName(hostname: string): string {\n for (const [domain, name] of Object.entries(SOCIAL_DISPLAY_NAMES)) {\n if (domainMatches(hostname, domain)) return name;\n }\n return cleanDomain(hostname);\n }\n\n function cleanDomain(hostname: string): string {\n return hostname.replace(/^www\\./, \"\");\n }\n\n function valueIsSocialNetwork(value: string): boolean {\n const v = value.toLowerCase().trim();\n const allNames = Object.values(SOCIAL_DISPLAY_NAMES).map((n) => n.toLowerCase());\n if (allNames.includes(v)) return true;\n return SOCIAL_NETWORKS.some((domain) => v === domain || v === domain.replace(\".com\", \"\"));\n }\n\n function valueIsSearchEngine(value: string): boolean {\n const v = value.toLowerCase().trim();\n const allNames = Object.values(SEARCH_DISPLAY_NAMES).map((n) => n.toLowerCase());\n if (allNames.includes(v)) return true;\n return SEARCH_ENGINES.some((pattern) => {\n const clean = pattern.replace(/\\.$/, \"\");\n return v === clean || v === clean.replace(\".com\", \"\");\n });\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Helper: String checks\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function containsAny(value: string | undefined, ...terms: string[]): boolean {\n if (!value) return false;\n const v = value.toLowerCase();\n return terms.some((t) => v.includes(t.toLowerCase()));\n }\n\n function equalsAny(value: string | undefined, ...terms: string[]): boolean {\n if (!value) return false;\n const v = value.toLowerCase().trim();\n return terms.some((t) => v === t.toLowerCase());\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Param Capture from URL\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function getCapturedParams(): UTMParams {\n const urlParams = new URLSearchParams(window.location.search);\n const captured: UTMParams = {};\n\n config.utmKeys.forEach((key) => {\n const value = urlParams.get(key);\n if (value) captured[key] = value;\n });\n\n config.clickIdKeys.forEach((key) => {\n const value = urlParams.get(key);\n if (value) captured[key] = value;\n });\n\n const bareSource = urlParams.get(\"source\");\n if (bareSource && !captured[\"utm_source\"]) {\n captured[\"source\"] = bareSource;\n }\n\n return captured;\n }\n\n function hasTrackingParams(params: UTMParams): boolean {\n return (\n !!params.utm_source ||\n !!params.utm_medium ||\n !!params.utm_campaign ||\n !!params.source ||\n !!params.gclid ||\n !!params.msclkid ||\n !!params.fbclid\n );\n }\n\n function hasUTMParams(params: UTMParams): boolean {\n return !!params.utm_source || !!params.utm_medium || !!params.utm_campaign;\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Referrer Analysis\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function getReferrerHostname(): string {\n try {\n if (!document.referrer) return \"\";\n const url = new URL(document.referrer);\n if (url.hostname === window.location.hostname) return \"\";\n return url.hostname.toLowerCase();\n } catch {\n return \"\";\n }\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Landing Page Info\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function getLandingPage(): string {\n return window.location.pathname + window.location.search;\n }\n\n function getLandingPageGroup(): string {\n const segments = window.location.pathname.split(\"/\").filter(Boolean);\n return segments.length > 0 ? \"/\" + segments[0] : \"/\";\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Channel Categorisation Engine (11-rule cascade)\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function categorise(params: UTMParams, referrerHost: string): AttributionResult {\n const utm_source = params.utm_source || \"\";\n const utm_medium = params.utm_medium || \"\";\n const utm_campaign = params.utm_campaign || \"\";\n const utm_term = params.utm_term || \"\";\n const utm_content = params.utm_content || \"\";\n const bare_source = params.source || \"\";\n const gclid = params.gclid || \"\";\n const msclkid = params.msclkid || \"\";\n\n const landingPage = getLandingPage();\n const landingPageGroup = getLandingPageGroup();\n\n const base = { landingPage, landingPageGroup };\n\n // Rule 0: LLMs\n const LLM_DOMAINS: Record<string, string> = {\n \"chatgpt.com\": \"ChatGPT\",\n \"chat.openai.com\": \"ChatGPT\",\n \"perplexity.ai\": \"Perplexity\",\n \"you.com\": \"You.com\",\n \"phind.com\": \"Phind\",\n \"claude.ai\": \"Claude\",\n \"gemini.google.com\": \"Gemini\",\n \"copilot.microsoft.com\": \"Copilot\",\n };\n\n const matchedLLM = Object.entries(LLM_DOMAINS).find(([domain]) => domainMatches(referrerHost, domain));\n if (matchedLLM) {\n return { ...base, channel: \"LLMs\", channelDrilldown1: matchedLLM[1], channelDrilldown2: landingPage, channelDrilldown3: \"\" };\n }\n\n // Rule 1: Organic Social\n if (equalsAny(utm_medium, \"social\")) {\n if (valueIsSocialNetwork(utm_source) || isRecognisedSocialNetwork(referrerHost)) {\n const sourceName = valueIsSocialNetwork(utm_source)\n ? capitalise(utm_source)\n : getSocialNetworkName(referrerHost);\n return { ...base, channel: \"Organic Social\", channelDrilldown1: sourceName, channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n }\n\n // Rule 2: Email Marketing\n if (equalsAny(utm_medium, \"email\")) {\n return { ...base, channel: \"Email Marketing\", channelDrilldown1: utm_source || \"Email\", channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n\n // Rule 3: Paid Social\n if (\n containsAny(utm_source, \"paidsocial\") ||\n containsAny(utm_medium, \"paidsocial\") ||\n (containsAny(utm_medium, \"paid\", \"ppc\", \"cpc\") && valueIsSocialNetwork(utm_source)) ||\n (containsAny(utm_medium, \"paid\", \"ppc\", \"cpc\") && isRecognisedSocialNetwork(referrerHost))\n ) {\n const sourceName = valueIsSocialNetwork(utm_source)\n ? capitalise(utm_source)\n : isRecognisedSocialNetwork(referrerHost)\n ? getSocialNetworkName(referrerHost)\n : utm_source || \"Paid Social\";\n return { ...base, channel: \"Paid Social\", channelDrilldown1: sourceName, channelDrilldown2: utm_campaign, channelDrilldown3: utm_term || utm_content };\n }\n\n // Rule 4: Paid Search\n if (\n containsAny(utm_source, \"paidsearch\") ||\n containsAny(utm_medium, \"paidsearch\") ||\n containsAny(utm_source, \"adwords\", \"ppc\", \"cpc\") ||\n containsAny(utm_medium, \"adwords\", \"ppc\", \"cpc\") ||\n containsAny(utm_campaign, \"adwords\", \"ppc\", \"cpc\") ||\n gclid || msclkid ||\n (hasUTMParams(params) && isRecognisedSearchEngine(referrerHost))\n ) {\n let sourceName = \"Paid Search\";\n if (gclid) sourceName = \"Google\";\n else if (msclkid) sourceName = \"Bing\";\n else if (valueIsSearchEngine(utm_source)) sourceName = capitalise(utm_source);\n else if (isRecognisedSearchEngine(referrerHost)) sourceName = getSearchEngineName(referrerHost);\n else if (utm_source) sourceName = utm_source;\n return { ...base, channel: \"Paid Search\", channelDrilldown1: sourceName, channelDrilldown2: utm_campaign, channelDrilldown3: utm_term };\n }\n\n // Rule 5: Display\n if (equalsAny(utm_medium, \"display\")) {\n return { ...base, channel: \"Display\", channelDrilldown1: utm_source || \"Display\", channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n\n // Rule 6: Affiliates\n if (containsAny(utm_medium, \"affiliate\")) {\n return { ...base, channel: \"Affiliates\", channelDrilldown1: utm_source || \"Affiliate\", channelDrilldown2: utm_campaign, channelDrilldown3: utm_content };\n }\n\n // Rule 7: Other Campaigns\n if (hasTrackingParams(params)) {\n return { ...base, channel: \"Other Campaigns\", channelDrilldown1: utm_source || bare_source, channelDrilldown2: utm_medium, channelDrilldown3: utm_campaign };\n }\n\n // Rule 8: Organic Social (by referrer)\n if (referrerHost && isRecognisedSocialNetwork(referrerHost)) {\n return { ...base, channel: \"Organic Social\", channelDrilldown1: getSocialNetworkName(referrerHost), channelDrilldown2: \"\", channelDrilldown3: \"\" };\n }\n\n // Rule 9: Organic Search (by referrer)\n if (referrerHost && isRecognisedSearchEngine(referrerHost)) {\n return { ...base, channel: \"Organic Search\", channelDrilldown1: getSearchEngineName(referrerHost), channelDrilldown2: \"\", channelDrilldown3: \"\" };\n }\n\n // Rule 10: Referral\n if (referrerHost) {\n return { ...base, channel: \"Referral\", channelDrilldown1: cleanDomain(referrerHost), channelDrilldown2: landingPage, channelDrilldown3: \"\" };\n }\n\n // Rule 11: Direct\n return { ...base, channel: \"Direct\", channelDrilldown1: \"Direct\", channelDrilldown2: landingPage, channelDrilldown3: \"\" };\n }\n\n function capitalise(str: string): string {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Link Processing (propagate UTM params to internal links)\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function isInternalLink(url: string, currentHost: string): boolean {\n try {\n if (url.startsWith(\"/\") || url.startsWith(\"./\") || url.startsWith(\"../\")) return true;\n if (/^[a-z]+:/i.test(url) && !url.startsWith(\"http\")) return false;\n if (url.startsWith(\"http\")) return new URL(url).hostname === currentHost;\n if (url.startsWith(\"//\")) return new URL(\"https:\" + url).hostname === currentHost;\n if (!url.includes(\"://\")) return true;\n return false;\n } catch (e) {\n console.warn(\"UTM: Error parsing URL:\", url, e);\n return false;\n }\n }\n\n function addUTMToURL(url: string, utmParams: UTMParams): string {\n try {\n const urlObj = new URL(url, window.location.origin);\n Object.entries(utmParams).forEach(([key, value]) => {\n if (!config.utmKeys.includes(key)) return;\n if (urlObj.searchParams.has(key)) return; // never override existing\n urlObj.searchParams.set(key, value);\n });\n return urlObj.toString();\n } catch (e) {\n console.warn(\"UTM: Error processing URL:\", url, e);\n return url;\n }\n }\n\n function hasUTMException(element: Element): boolean {\n return element.getAttribute(\"data-utm-exception\") === \"true\";\n }\n\n function processLink(element: Element, utmParams: UTMParams): void {\n if (hasUTMException(element)) return;\n\n const currentHost = window.location.hostname;\n let url: string | null = null;\n\n if (element instanceof HTMLAnchorElement && element.href) {\n url = element.href;\n } else if (element instanceof HTMLElement && element.dataset.href) {\n url = element.dataset.href;\n }\n\n if (url && isInternalLink(url, currentHost)) {\n const updatedURL = addUTMToURL(url, utmParams);\n if (element instanceof HTMLAnchorElement) {\n element.href = updatedURL;\n } else if (element instanceof HTMLElement && element.dataset.href) {\n element.dataset.href = updatedURL;\n }\n }\n }\n\n function processAllLinks(utmParams: UTMParams): void {\n document.querySelectorAll(config.linkSelectors.join(\", \")).forEach((el) => processLink(el, utmParams));\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Input Field Processing\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function processInput(element: Element, allValues: Record<string, string>): void {\n if (hasUTMException(element)) return;\n\n const shortKey = element.getAttribute(\"data-utm-input\")?.trim().toLowerCase();\n if (!shortKey) return;\n\n const internalKey = config.inputKeyMap[shortKey];\n if (!internalKey) {\n console.warn(`UTM: Unknown data-utm-input value \"${shortKey}\"`);\n return;\n }\n\n const value = allValues[internalKey];\n if (!value) return;\n\n if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLTextAreaElement ||\n element instanceof HTMLSelectElement\n ) {\n if (element.value && element.value.trim() !== \"\") return; // never override\n element.value = value;\n element.dispatchEvent(new Event(\"input\", { bubbles: true }));\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n }\n\n function processAllInputs(allValues: Record<string, string>): void {\n document.querySelectorAll(config.inputSelector).forEach((el) => processInput(el, allValues));\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Build flat key\u2192value map for form fields\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function buildValueMap(data: AttributionData): Record<string, string> {\n const map: Record<string, string> = {};\n Object.entries(data.params).forEach(([key, value]) => { map[key] = value; });\n map[\"_channel\"] = data.attribution.channel;\n map[\"_channelDrilldown1\"] = data.attribution.channelDrilldown1;\n map[\"_channelDrilldown2\"] = data.attribution.channelDrilldown2;\n map[\"_channelDrilldown3\"] = data.attribution.channelDrilldown3;\n map[\"_landingPage\"] = data.attribution.landingPage;\n map[\"_landingPageGroup\"] = data.attribution.landingPageGroup;\n return map;\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // MutationObserver (handles dynamically added content)\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function observeNewContent(utmParams: UTMParams, allValues: Record<string, string>): void {\n const allSelectors = [...config.linkSelectors, config.inputSelector].join(\", \");\n\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let pendingNodes: Element[] = [];\n\n function flushPending(): void {\n const nodes = pendingNodes.slice();\n pendingNodes = [];\n debounceTimer = null;\n\n nodes.forEach((element) => {\n if (element.matches?.(config.inputSelector)) {\n processInput(element, allValues);\n } else if (element.matches?.(config.linkSelectors.join(\", \"))) {\n processLink(element, utmParams);\n }\n element.querySelectorAll?.(allSelectors).forEach((child) => {\n if (child.matches(config.inputSelector)) {\n processInput(child, allValues);\n } else {\n processLink(child, utmParams);\n }\n });\n });\n }\n\n new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n pendingNodes.push(node as Element);\n }\n });\n });\n if (pendingNodes.length > 0 && !debounceTimer) {\n debounceTimer = setTimeout(flushPending, 50);\n }\n }).observe(document.body, { childList: true, subtree: true });\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Init \u2014 no cookies, no storage, fresh on every load\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function init(): void {\n const freshParams = getCapturedParams();\n const referrerHost = getReferrerHostname();\n\n const attribution = categorise(freshParams, referrerHost);\n const data: AttributionData = { params: freshParams, attribution };\n const allValues = buildValueMap(data);\n\n const run = (): void => {\n processAllLinks(data.params);\n processAllInputs(allValues);\n observeNewContent(data.params, allValues);\n };\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", run);\n } else {\n run();\n }\n }\n\n init();\n})();"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- "use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{console.log("[promptbar] DOMContentLoaded fired");let o=window.gsap,b=document.querySelectorAll("[prompt-slide-image-inner]");console.log("[float] elements found:",b.length),b.forEach(e=>{o.set(e,{x:0,y:0});function t(){o.to(e,{x:o.utils.random(-20,20),y:o.utils.random(-20,20),duration:o.utils.random(2,3),ease:"sine.inOut",onComplete:t})}o.delayedCall(o.utils.random(0,4),t)});let u=[{prompt:"Build a list of country music dancers that wear cowboy hats",slide:0},{prompt:"Build a list of grandma creators who do hip hop lip sync content",slide:1},{prompt:"Build a list of meme pages that are perfect for an EDM launch",slide:2}],s=document.querySelector("[promptbar=word-count]"),m=document.querySelector("[promptbar=submit]"),l=document.querySelector("[promptbar=border]"),d=document.querySelector("[promptbar=text-slot]"),p=document.querySelector("[promptbar=submit-loader]"),I=!1,i=new window.Swiper("[promptbar-slider]",{loop:!0,speed:0,effect:"fade",fadeEffect:{crossFade:!1},pagination:{el:".swiper-pagination",clickable:!0},keyboard:{enabled:!0},mousewheel:{enabled:!0},autoplay:!1});if(console.log("[slider] imageSlider instance:",i??"NOT FOUND \u274C"),console.log("[slider] Swiper available on window:",window.Swiper?"\u2705":"NOT FOUND \u274C"),console.log("[slider] .swiper element exists:",document.querySelector(".swiper")??"NOT FOUND \u274C"),console.log("[slider] slide count:",i?.slides?.length??"unknown"),console.log("[slider] active index:",i?.activeIndex??"unknown"),console.log("[promptbar] wordCount: ",s??"NOT FOUND \u274C"),console.log("[promptbar] sendBtn: ",m??"NOT FOUND \u274C"),console.log("[promptbar] barBorder: ",l??"NOT FOUND \u274C"),console.log("[promptbar] textSlot: ",d??"NOT FOUND \u274C"),console.log("[promptbar] gsap: ",o?"\u2705":"NOT FOUND \u274C"),!s||!m||!l||!d||!o){console.error("[promptbar] One or more dependencies missing. Aborting.");return}console.log("[promptbar] All elements found \u2705 Starting loop...");let g=0,h=!1;function c(e){return new Promise(t=>setTimeout(t,e))}function x(e){let t=e.trim().split(/\s+/).filter(Boolean).length;s.textContent=`${t||0}/300 words`}function w(e){let t=document.createElement("div");return t.className="chroma-text",t.setAttribute("data-animate","false"),t.textContent=e,t}function A(e){return console.log(`[promptbar] textIn \u2192 "${e}"`),new Promise(t=>{let n=o.timeline({defaults:{ease:"power1.out"}}),r=d.querySelector(".chroma-text");r&&(n.to(r,{duration:.4,autoAlpha:0,ease:"power1.in"}),n.add(()=>r.remove()));let a;n.add(()=>{a=w(e),d.appendChild(a),a.setAttribute("data-animate","true"),O(e),console.log("[promptbar] chroma element appended")}),n.to(()=>a,{duration:.6,autoAlpha:1}),n.add(()=>{console.log("[promptbar] textIn done \u2705"),t()})})}function E(){return console.log("[promptbar] triggerSendClick"),new Promise(e=>{m.setAttribute("is-clicked","true"),L(),setTimeout(()=>{m.setAttribute("is-clicked","false"),setTimeout(e,250)},120)})}function C(e,t){return console.log("[promptbar] triggerBorderAnimation started, going to slide:",t),new Promise(n=>{l.removeAttribute("is-animating"),setTimeout(()=>{l.setAttribute("is-animating","true");let r=window.getComputedStyle(l);console.log("[promptbar] animation-name:",r.animationName),console.log("[promptbar] animation-duration:",r.animationDuration);let a=setTimeout(()=>{console.warn("[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F"),l.removeAttribute("is-animating"),n()},4500);l.addEventListener("animationend",()=>{clearTimeout(a),l.removeAttribute("is-animating"),console.log("[promptbar] triggerBorderAnimation done \u2705"),n()},{once:!0})},50)})}function O(e){let t=e.trim().split(/\s+/).filter(Boolean).length,n={value:0};o.to(n,{value:t,duration:.8,ease:"power2.out",onUpdate:()=>{s.textContent=`${Math.round(n.value)}/300 words`},onComplete:()=>{s.textContent=`${t}/300 words`}})}function D(e,t){return new Promise(n=>{let a=e.slides[e.activeIndex].querySelectorAll("[prompt-slide-image]");o.timeline({onComplete:n}).to(a,{scale:1.5,opacity:0,filter:"blur(16px)",duration:1,ease:"power2.in",stagger:.05}).add(()=>{e.slideToLoop(t),requestAnimationFrame(()=>{let S=e.slides[e.activeIndex],M=S.querySelectorAll("[prompt-slide-image]");e.slides.forEach(T=>{T!==S&&o.set(T.querySelectorAll("[prompt-slide-image]"),{scale:.8,opacity:0,filter:"blur(12px)"})}),o.fromTo(M,{scale:.8,opacity:0,filter:"blur(12px)"},{scale:1,opacity:1,filter:"blur(0px)",duration:1,ease:"power3.out",stagger:.07,onComplete:n})})},"-=0.25")})}function y(e){setTimeout(()=>{e.slides[e.activeIndex]?.querySelectorAll("[prompt-skeleton]")?.forEach(r=>{let a=Math.random()*1500;r.style.transition="opacity 0.5s ease",r.style.opacity="1",setTimeout(()=>{r.style.opacity="0"},a)})},50)}function L(){p&&(p.style.opacity="1",setTimeout(()=>{p.style.opacity="0"},2500))}function N(){requestAnimationFrame(()=>{let t=i.slides[i.activeIndex].querySelectorAll("[prompt-slide-image]");o.fromTo(t,{scale:.8,opacity:0,filter:"blur(12px)"},{scale:1,opacity:1,filter:"blur(0px)",duration:1,ease:"power3.out",stagger:.07})})}async function q(){for(;;){if(h)return;let e=u[g%u.length];await A(e.prompt),g++,await c(100),E(),C(i,e.slide),await c(1500),await D(i,e.slide),y(i),await c(2e3)}}let f=u[0],v=w(f.prompt);d.appendChild(v),v.setAttribute("data-animate","true"),x(f.prompt),i.slideToLoop(f.slide),N(),y(i),g=1,c(3e3).then(()=>q())});})();
1
+ "use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{let n=window.gsap;document.querySelectorAll("[prompt-slide-image-inner]").forEach(e=>{n.set(e,{x:0,y:0});function t(){n.to(e,{x:n.utils.random(-20,20),y:n.utils.random(-20,20),duration:n.utils.random(2,3),ease:"sine.inOut",onComplete:t})}n.delayedCall(n.utils.random(0,4),t)});let m=[{prompt:"Build a list of country music dancers that wear cowboy hats",slide:0},{prompt:"Build a list of grandma creators who do hip hop lip sync content",slide:1},{prompt:"Build a list of meme pages that are perfect for an EDM launch",slide:2}],l=document.querySelector("[promptbar=word-count]"),c=document.querySelector("[promptbar=submit]"),a=document.querySelector("[promptbar=border]"),d=document.querySelector("[promptbar=text-slot]"),p=document.querySelector("[promptbar=submit-loader]"),D=!1,s=new window.Swiper("[promptbar-slider]",{loop:!0,speed:0,effect:"fade",fadeEffect:{crossFade:!1},pagination:{el:".swiper-pagination",clickable:!0},keyboard:{enabled:!0},mousewheel:{enabled:!0},autoplay:!1});if(!l||!c||!a||!d||!n){console.error("[promptbar] One or more dependencies missing. Aborting.");return}let f=0,h=!1;function u(e){return new Promise(t=>setTimeout(t,e))}function x(e){let t=e.trim().split(/\s+/).filter(Boolean).length;l.textContent=`${t||0}/300 words`}function y(e){let t=document.createElement("div");return t.className="chroma-text",t.setAttribute("data-animate","false"),t.textContent=e,t}function E(e){return new Promise(t=>{let o=n.timeline({defaults:{ease:"power1.out"}}),r=d.querySelector(".chroma-text");r&&(o.to(r,{duration:.4,autoAlpha:0,ease:"power1.in"}),o.add(()=>r.remove()));let i;o.add(()=>{i=y(e),d.appendChild(i),i.setAttribute("data-animate","true"),C(e)}),o.to(()=>i,{duration:.6,autoAlpha:1}),o.add(()=>{t()})})}function T(){return new Promise(e=>{c.setAttribute("is-clicked","true"),q(),setTimeout(()=>{c.setAttribute("is-clicked","false"),setTimeout(e,250)},120)})}function A(e,t){return new Promise(o=>{a.removeAttribute("is-animating"),setTimeout(()=>{a.setAttribute("is-animating","true");let r=window.getComputedStyle(a),i=setTimeout(()=>{console.warn("[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F"),a.removeAttribute("is-animating"),o()},4500);a.addEventListener("animationend",()=>{clearTimeout(i),a.removeAttribute("is-animating"),o()},{once:!0})},50)})}function C(e){let t=e.trim().split(/\s+/).filter(Boolean).length,o={value:0};n.to(o,{value:t,duration:.8,ease:"power2.out",onUpdate:()=>{l.textContent=`${Math.round(o.value)}/300 words`},onComplete:()=>{l.textContent=`${t}/300 words`}})}function L(e,t){return new Promise(o=>{let i=e.slides[e.activeIndex].querySelectorAll("[prompt-slide-image]");n.timeline({onComplete:o}).to(i,{scale:1.5,opacity:0,filter:"blur(16px)",duration:1,ease:"power2.in",stagger:.05}).add(()=>{e.slideToLoop(t),requestAnimationFrame(()=>{let v=e.slides[e.activeIndex],P=v.querySelectorAll("[prompt-slide-image]");e.slides.forEach(S=>{S!==v&&n.set(S.querySelectorAll("[prompt-slide-image]"),{scale:.8,opacity:0,filter:"blur(12px)"})}),n.fromTo(P,{scale:.8,opacity:0,filter:"blur(12px)"},{scale:1,opacity:1,filter:"blur(0px)",duration:1,ease:"power3.out",stagger:.07,onComplete:o})})},"-=0.25")})}function b(e){setTimeout(()=>{e.slides[e.activeIndex]?.querySelectorAll("[prompt-skeleton]")?.forEach(r=>{let i=Math.random()*1500;r.style.transition="opacity 0.5s ease",r.style.opacity="1",setTimeout(()=>{r.style.opacity="0"},i)})},50)}function q(){p&&(p.style.opacity="1",setTimeout(()=>{p.style.opacity="0"},2500))}function M(){requestAnimationFrame(()=>{let t=s.slides[s.activeIndex].querySelectorAll("[prompt-slide-image]");n.fromTo(t,{scale:.8,opacity:0,filter:"blur(12px)"},{scale:1,opacity:1,filter:"blur(0px)",duration:1,ease:"power3.out",stagger:.07})})}async function I(){for(;;){if(h)return;let e=m[f%m.length];await E(e.prompt),f++,await u(100),T(),A(s,e.slide),await u(1500),await L(s,e.slide),b(s),await u(2e3)}}let g=m[0],w=y(g.prompt);d.appendChild(w),w.setAttribute("data-animate","true"),x(g.prompt),s.slideToLoop(g.slide),M(),b(s),f=1,u(3e3).then(()=>I())});})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/promptbar/index.ts"],
4
- "sourcesContent": ["document.addEventListener('DOMContentLoaded', () => {\n\n console.log('[promptbar] DOMContentLoaded fired');\n\n const gsap = (window as any).gsap;\n\n const floatEls = document.querySelectorAll('[prompt-slide-image-inner]');\n console.log('[float] elements found:', floatEls.length);\n\n floatEls.forEach((el) => {\n gsap.set(el, { x: 0, y: 0 });\n\n function drift() {\n gsap.to(el, {\n x: gsap.utils.random(-20, 20),\n y: gsap.utils.random(-20, 20),\n duration: gsap.utils.random(2, 3),\n ease: 'sine.inOut',\n onComplete: drift,\n });\n }\n\n gsap.delayedCall(gsap.utils.random(0, 4), drift);\n });\n\n const slides: { prompt: string; slide: number }[] = [\n { prompt: \"Build a list of country music dancers that wear cowboy hats\", slide: 0 },\n { prompt: \"Build a list of grandma creators who do hip hop lip sync content\", slide: 1 },\n { prompt: \"Build a list of meme pages that are perfect for an EDM launch\", slide: 2 },\n ];\n\n const wordCount = document.querySelector('[promptbar=word-count]') as HTMLSpanElement;\n const sendBtn = document.querySelector('[promptbar=submit]') as HTMLDivElement;\n const barBorder = document.querySelector('[promptbar=border]') as HTMLDivElement;\n const textSlot = document.querySelector('[promptbar=text-slot]') as HTMLDivElement;\n const submitButtonLoading = document.querySelector('[promptbar=submit-loader]') as HTMLDivElement;\n\n let sliderRevealed = false;\n\n const imageSlider = new (window as any).Swiper('[promptbar-slider]', {\n loop: true,\n speed: 0,\n effect: 'fade',\n fadeEffect: { crossFade: false },\n pagination: { el: '.swiper-pagination', clickable: true },\n keyboard: { enabled: true },\n mousewheel: { enabled: true },\n autoplay: false,\n });\n\n console.log('[slider] imageSlider instance:', imageSlider ?? 'NOT FOUND \u274C');\n console.log('[slider] Swiper available on window:', (window as any).Swiper ? '\u2705' : 'NOT FOUND \u274C');\n console.log('[slider] .swiper element exists:', document.querySelector('.swiper') ?? 'NOT FOUND \u274C');\n console.log('[slider] slide count:', imageSlider?.slides?.length ?? 'unknown');\n console.log('[slider] active index:', imageSlider?.activeIndex ?? 'unknown');\n\n console.log('[promptbar] wordCount: ', wordCount ?? 'NOT FOUND \u274C');\n console.log('[promptbar] sendBtn: ', sendBtn ?? 'NOT FOUND \u274C');\n console.log('[promptbar] barBorder: ', barBorder ?? 'NOT FOUND \u274C');\n console.log('[promptbar] textSlot: ', textSlot ?? 'NOT FOUND \u274C');\n console.log('[promptbar] gsap: ', gsap ? '\u2705' : 'NOT FOUND \u274C');\n\n if (!wordCount || !sendBtn || !barBorder || !textSlot || !gsap) {\n console.error('[promptbar] One or more dependencies missing. Aborting.');\n return;\n }\n\n console.log('[promptbar] All elements found \u2705 Starting loop...');\n\n let currentIndex: number = 0;\n let cancelled: boolean = false;\n\n // \u2500\u2500 Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n function updateWordCount(text: string): void {\n const words = text.trim().split(/\\s+/).filter(Boolean).length;\n wordCount.textContent = `${words || 0}/300 words`;\n }\n\n // \u2500\u2500 chroma element factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function makeChromaElement(text: string): HTMLDivElement {\n const div = document.createElement('div');\n div.className = 'chroma-text';\n div.setAttribute('data-animate', 'false');\n div.textContent = text;\n return div;\n }\n\n // \u2500\u2500 textIn \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function textIn(text: string): Promise<void> {\n console.log(`[promptbar] textIn \u2192 \"${text}\"`);\n return new Promise(resolve => {\n const tl = gsap.timeline({ defaults: { ease: 'power1.out' } });\n\n const existing = textSlot.querySelector('.chroma-text') as HTMLDivElement | null;\n if (existing) {\n tl.to(existing, {\n duration: 0.4,\n autoAlpha: 0,\n ease: 'power1.in',\n });\n tl.add(() => existing.remove());\n }\n\n let newEl: HTMLDivElement;\n\n tl.add(() => {\n newEl = makeChromaElement(text);\n textSlot.appendChild(newEl);\n newEl.setAttribute('data-animate', 'true');\n animateWordCount(text);\n console.log('[promptbar] chroma element appended');\n });\n\n tl.to(() => newEl, {\n duration: 0.6,\n autoAlpha: 1,\n });\n\n tl.add(() => {\n console.log('[promptbar] textIn done \u2705');\n resolve();\n });\n });\n }\n\n // \u2500\u2500 Animation steps \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function triggerSendClick(): Promise<void> {\n console.log('[promptbar] triggerSendClick');\n return new Promise(resolve => {\n sendBtn.setAttribute('is-clicked', 'true');\n triggerSubmitLoader();\n setTimeout(() => {\n sendBtn.setAttribute('is-clicked', 'false');\n setTimeout(resolve, 250);\n }, 120);\n });\n }\n\n function triggerBorderAnimation(slider: any, slideIndex: number): Promise<void> {\n console.log('[promptbar] triggerBorderAnimation started, going to slide:', slideIndex);\n return new Promise(resolve => {\n barBorder.removeAttribute('is-animating');\n\n setTimeout(() => {\n barBorder.setAttribute('is-animating', 'true');\n\n const computedStyle = window.getComputedStyle(barBorder);\n console.log('[promptbar] animation-name:', computedStyle.animationName);\n console.log('[promptbar] animation-duration:', computedStyle.animationDuration);\n\n const fallback = setTimeout(() => {\n console.warn('[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F');\n barBorder.removeAttribute('is-animating');\n resolve();\n }, 4500);\n\n barBorder.addEventListener('animationend', () => {\n clearTimeout(fallback);\n barBorder.removeAttribute('is-animating');\n console.log('[promptbar] triggerBorderAnimation done \u2705');\n resolve();\n }, { once: true });\n\n }, 50);\n });\n }\n\n function animateWordCount(text: string): void {\n const target = text.trim().split(/\\s+/).filter(Boolean).length;\n const counter = { value: 0 };\n\n gsap.to(counter, {\n value: target,\n duration: 0.8,\n ease: 'power2.out',\n onUpdate: () => {\n wordCount.textContent = `${Math.round(counter.value)}/${300} words`;\n },\n onComplete: () => {\n wordCount.textContent = `${target}/300 words`;\n }\n });\n }\n\n function transitionSlides(slider: any, nextIndex: number): Promise<void> {\n return new Promise(resolve => {\n const currentSlide = slider.slides[slider.activeIndex];\n const currentImages = currentSlide.querySelectorAll('[prompt-slide-image]');\n\n const tl = gsap.timeline({ onComplete: resolve });\n\n tl.to(currentImages, {\n scale: 1.5,\n opacity: 0,\n filter: 'blur(16px)',\n duration: 1,\n ease: 'power2.in',\n stagger: 0.05,\n })\n .add(() => {\n slider.slideToLoop(nextIndex);\n\n requestAnimationFrame(() => {\n const newSlide = slider.slides[slider.activeIndex];\n const newImages = newSlide.querySelectorAll('[prompt-slide-image]');\n\n slider.slides.forEach((slide: HTMLElement) => {\n if (slide !== newSlide) {\n gsap.set(slide.querySelectorAll('[prompt-slide-image]'), {\n scale: 0.8, opacity: 0, filter: 'blur(12px)'\n });\n }\n });\n\n gsap.fromTo(newImages,\n { scale: 0.8, opacity: 0, filter: 'blur(12px)' },\n {\n scale: 1,\n opacity: 1,\n filter: 'blur(0px)',\n duration: 1,\n ease: 'power3.out',\n stagger: 0.07,\n onComplete: resolve\n }\n );\n });\n\n }, '-=0.25');\n });\n }\n\n // \u2500\u2500 Skeleton fade out \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function fadeOutSkeletons(slider: any): void {\n setTimeout(() => {\n const activeSlide = slider.slides[slider.activeIndex];\n const skeletons = activeSlide?.querySelectorAll('[prompt-skeleton]');\n skeletons?.forEach((skeleton: HTMLElement) => {\n const randomDelay = Math.random() * 1500;\n skeleton.style.transition = 'opacity 0.5s ease';\n skeleton.style.opacity = '1';\n setTimeout(() => {\n skeleton.style.opacity = '0';\n }, randomDelay);\n });\n }, 50);\n }\n\n // \u2500\u2500 Submit loader \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function triggerSubmitLoader(): void {\n if (!submitButtonLoading) return;\n submitButtonLoading.style.opacity = '1';\n setTimeout(() => {\n submitButtonLoading.style.opacity = '0';\n }, 2500);\n }\n\n // \u2500\u2500 Reveal initial slide (runs once on load) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function revealInitialSlide(): void {\n requestAnimationFrame(() => {\n const firstSlide = imageSlider.slides[imageSlider.activeIndex];\n const firstImages = firstSlide.querySelectorAll('[prompt-slide-image]');\n gsap.fromTo(firstImages,\n { scale: 0.8, opacity: 0, filter: 'blur(12px)' },\n {\n scale: 1,\n opacity: 1,\n filter: 'blur(0px)',\n duration: 1,\n ease: 'power3.out',\n stagger: 0.07,\n }\n );\n });\n }\n\n // \u2500\u2500 Main loop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n async function runLoop(): Promise<void> {\n while (true) {\n if (cancelled) return;\n\n const item = slides[currentIndex % slides.length];\n\n await textIn(item.prompt);\n\n currentIndex++;\n\n await sleep(100);\n triggerSendClick();\n triggerBorderAnimation(imageSlider, item.slide);\n\n await sleep(1500);\n await transitionSlides(imageSlider, item.slide);\n fadeOutSkeletons(imageSlider);\n\n await sleep(2000);\n }\n }\n\n // \u2500\u2500 Set initial state (iteration 0 already happened) \u2500\u2500\u2500\u2500\u2500\u2500\n\n const firstItem = slides[0];\n\n const initialEl = makeChromaElement(firstItem.prompt);\n textSlot.appendChild(initialEl);\n initialEl.setAttribute('data-animate', 'true');\n updateWordCount(firstItem.prompt);\n\n imageSlider.slideToLoop(firstItem.slide);\n revealInitialSlide();\n fadeOutSkeletons(imageSlider);\n\n currentIndex = 1;\n\n sleep(3000).then(() => runLoop());\n\n});"],
5
- "mappings": "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",
4
+ "sourcesContent": ["document.addEventListener('DOMContentLoaded', () => {\n\n // console.log('[promptbar] DOMContentLoaded fired');\n\n const gsap = (window as any).gsap;\n\n const floatEls = document.querySelectorAll('[prompt-slide-image-inner]');\n // console.log('[float] elements found:', floatEls.length);\n\n floatEls.forEach((el) => {\n gsap.set(el, { x: 0, y: 0 });\n\n function drift() {\n gsap.to(el, {\n x: gsap.utils.random(-20, 20),\n y: gsap.utils.random(-20, 20),\n duration: gsap.utils.random(2, 3),\n ease: 'sine.inOut',\n onComplete: drift,\n });\n }\n\n gsap.delayedCall(gsap.utils.random(0, 4), drift);\n });\n\n const slides: { prompt: string; slide: number }[] = [\n { prompt: \"Build a list of country music dancers that wear cowboy hats\", slide: 0 },\n { prompt: \"Build a list of grandma creators who do hip hop lip sync content\", slide: 1 },\n { prompt: \"Build a list of meme pages that are perfect for an EDM launch\", slide: 2 },\n ];\n\n const wordCount = document.querySelector('[promptbar=word-count]') as HTMLSpanElement;\n const sendBtn = document.querySelector('[promptbar=submit]') as HTMLDivElement;\n const barBorder = document.querySelector('[promptbar=border]') as HTMLDivElement;\n const textSlot = document.querySelector('[promptbar=text-slot]') as HTMLDivElement;\n const submitButtonLoading = document.querySelector('[promptbar=submit-loader]') as HTMLDivElement;\n\n let sliderRevealed = false;\n\n const imageSlider = new (window as any).Swiper('[promptbar-slider]', {\n loop: true,\n speed: 0,\n effect: 'fade',\n fadeEffect: { crossFade: false },\n pagination: { el: '.swiper-pagination', clickable: true },\n keyboard: { enabled: true },\n mousewheel: { enabled: true },\n autoplay: false,\n });\n\n // console.log('[slider] imageSlider instance:', imageSlider ?? 'NOT FOUND \u274C');\n // console.log('[slider] Swiper available on window:', (window as any).Swiper ? '\u2705' : 'NOT FOUND \u274C');\n // console.log('[slider] .swiper element exists:', document.querySelector('.swiper') ?? 'NOT FOUND \u274C');\n // console.log('[slider] slide count:', imageSlider?.slides?.length ?? 'unknown');\n // console.log('[slider] active index:', imageSlider?.activeIndex ?? 'unknown');\n\n // console.log('[promptbar] wordCount: ', wordCount ?? 'NOT FOUND \u274C');\n // console.log('[promptbar] sendBtn: ', sendBtn ?? 'NOT FOUND \u274C');\n // console.log('[promptbar] barBorder: ', barBorder ?? 'NOT FOUND \u274C');\n // console.log('[promptbar] textSlot: ', textSlot ?? 'NOT FOUND \u274C');\n // console.log('[promptbar] gsap: ', gsap ? '\u2705' : 'NOT FOUND \u274C');\n\n if (!wordCount || !sendBtn || !barBorder || !textSlot || !gsap) {\n console.error('[promptbar] One or more dependencies missing. Aborting.');\n return;\n }\n\n // console.log('[promptbar] All elements found \u2705 Starting loop...');\n\n let currentIndex: number = 0;\n let cancelled: boolean = false;\n\n // \u2500\u2500 Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n function updateWordCount(text: string): void {\n const words = text.trim().split(/\\s+/).filter(Boolean).length;\n wordCount.textContent = `${words || 0}/300 words`;\n }\n\n // \u2500\u2500 chroma element factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function makeChromaElement(text: string): HTMLDivElement {\n const div = document.createElement('div');\n div.className = 'chroma-text';\n div.setAttribute('data-animate', 'false');\n div.textContent = text;\n return div;\n }\n\n // \u2500\u2500 textIn \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function textIn(text: string): Promise<void> {\n // console.log(`[promptbar] textIn \u2192 \"${text}\"`);\n return new Promise(resolve => {\n const tl = gsap.timeline({ defaults: { ease: 'power1.out' } });\n\n const existing = textSlot.querySelector('.chroma-text') as HTMLDivElement | null;\n if (existing) {\n tl.to(existing, {\n duration: 0.4,\n autoAlpha: 0,\n ease: 'power1.in',\n });\n tl.add(() => existing.remove());\n }\n\n let newEl: HTMLDivElement;\n\n tl.add(() => {\n newEl = makeChromaElement(text);\n textSlot.appendChild(newEl);\n newEl.setAttribute('data-animate', 'true');\n animateWordCount(text);\n // console.log('[promptbar] chroma element appended');\n });\n\n tl.to(() => newEl, {\n duration: 0.6,\n autoAlpha: 1,\n });\n\n tl.add(() => {\n // console.log('[promptbar] textIn done \u2705');\n resolve();\n });\n });\n }\n\n // \u2500\u2500 Animation steps \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function triggerSendClick(): Promise<void> {\n // console.log('[promptbar] triggerSendClick');\n return new Promise(resolve => {\n sendBtn.setAttribute('is-clicked', 'true');\n triggerSubmitLoader();\n setTimeout(() => {\n sendBtn.setAttribute('is-clicked', 'false');\n setTimeout(resolve, 250);\n }, 120);\n });\n }\n\n function triggerBorderAnimation(slider: any, slideIndex: number): Promise<void> {\n // console.log('[promptbar] triggerBorderAnimation started, going to slide:', slideIndex);\n return new Promise(resolve => {\n barBorder.removeAttribute('is-animating');\n\n setTimeout(() => {\n barBorder.setAttribute('is-animating', 'true');\n\n const computedStyle = window.getComputedStyle(barBorder);\n // console.log('[promptbar] animation-name:', computedStyle.animationName);\n // console.log('[promptbar] animation-duration:', computedStyle.animationDuration);\n\n const fallback = setTimeout(() => {\n console.warn('[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F');\n barBorder.removeAttribute('is-animating');\n resolve();\n }, 4500);\n\n barBorder.addEventListener('animationend', () => {\n clearTimeout(fallback);\n barBorder.removeAttribute('is-animating');\n // console.log('[promptbar] triggerBorderAnimation done \u2705');\n resolve();\n }, { once: true });\n\n }, 50);\n });\n }\n\n function animateWordCount(text: string): void {\n const target = text.trim().split(/\\s+/).filter(Boolean).length;\n const counter = { value: 0 };\n\n gsap.to(counter, {\n value: target,\n duration: 0.8,\n ease: 'power2.out',\n onUpdate: () => {\n wordCount.textContent = `${Math.round(counter.value)}/${300} words`;\n },\n onComplete: () => {\n wordCount.textContent = `${target}/300 words`;\n }\n });\n }\n\n function transitionSlides(slider: any, nextIndex: number): Promise<void> {\n return new Promise(resolve => {\n const currentSlide = slider.slides[slider.activeIndex];\n const currentImages = currentSlide.querySelectorAll('[prompt-slide-image]');\n\n const tl = gsap.timeline({ onComplete: resolve });\n\n tl.to(currentImages, {\n scale: 1.5,\n opacity: 0,\n filter: 'blur(16px)',\n duration: 1,\n ease: 'power2.in',\n stagger: 0.05,\n })\n .add(() => {\n slider.slideToLoop(nextIndex);\n\n requestAnimationFrame(() => {\n const newSlide = slider.slides[slider.activeIndex];\n const newImages = newSlide.querySelectorAll('[prompt-slide-image]');\n\n slider.slides.forEach((slide: HTMLElement) => {\n if (slide !== newSlide) {\n gsap.set(slide.querySelectorAll('[prompt-slide-image]'), {\n scale: 0.8, opacity: 0, filter: 'blur(12px)'\n });\n }\n });\n\n gsap.fromTo(newImages,\n { scale: 0.8, opacity: 0, filter: 'blur(12px)' },\n {\n scale: 1,\n opacity: 1,\n filter: 'blur(0px)',\n duration: 1,\n ease: 'power3.out',\n stagger: 0.07,\n onComplete: resolve\n }\n );\n });\n\n }, '-=0.25');\n });\n }\n\n // \u2500\u2500 Skeleton fade out \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function fadeOutSkeletons(slider: any): void {\n setTimeout(() => {\n const activeSlide = slider.slides[slider.activeIndex];\n const skeletons = activeSlide?.querySelectorAll('[prompt-skeleton]');\n skeletons?.forEach((skeleton: HTMLElement) => {\n const randomDelay = Math.random() * 1500;\n skeleton.style.transition = 'opacity 0.5s ease';\n skeleton.style.opacity = '1';\n setTimeout(() => {\n skeleton.style.opacity = '0';\n }, randomDelay);\n });\n }, 50);\n }\n\n // \u2500\u2500 Submit loader \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function triggerSubmitLoader(): void {\n if (!submitButtonLoading) return;\n submitButtonLoading.style.opacity = '1';\n setTimeout(() => {\n submitButtonLoading.style.opacity = '0';\n }, 2500);\n }\n\n // \u2500\u2500 Reveal initial slide (runs once on load) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function revealInitialSlide(): void {\n requestAnimationFrame(() => {\n const firstSlide = imageSlider.slides[imageSlider.activeIndex];\n const firstImages = firstSlide.querySelectorAll('[prompt-slide-image]');\n gsap.fromTo(firstImages,\n { scale: 0.8, opacity: 0, filter: 'blur(12px)' },\n {\n scale: 1,\n opacity: 1,\n filter: 'blur(0px)',\n duration: 1,\n ease: 'power3.out',\n stagger: 0.07,\n }\n );\n });\n }\n\n // \u2500\u2500 Main loop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n async function runLoop(): Promise<void> {\n while (true) {\n if (cancelled) return;\n\n const item = slides[currentIndex % slides.length];\n\n await textIn(item.prompt);\n\n currentIndex++;\n\n await sleep(100);\n triggerSendClick();\n triggerBorderAnimation(imageSlider, item.slide);\n\n await sleep(1500);\n await transitionSlides(imageSlider, item.slide);\n fadeOutSkeletons(imageSlider);\n\n await sleep(2000);\n }\n }\n\n // \u2500\u2500 Set initial state (iteration 0 already happened) \u2500\u2500\u2500\u2500\u2500\u2500\n\n const firstItem = slides[0];\n\n const initialEl = makeChromaElement(firstItem.prompt);\n textSlot.appendChild(initialEl);\n initialEl.setAttribute('data-animate', 'true');\n updateWordCount(firstItem.prompt);\n\n imageSlider.slideToLoop(firstItem.slide);\n revealInitialSlide();\n fadeOutSkeletons(imageSlider);\n\n currentIndex = 1;\n\n sleep(3000).then(() => runLoop());\n\n});"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtstic.dev/pulse",
3
- "version": "0.0.101",
3
+ "version": "0.0.102",
4
4
  "description": "pulse website",
5
5
  "license": "license-of-your-project",
6
6
  "keywords": [],