@fynd-design-engineering/fynd-one-v2 3.3.45 → 3.3.47
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.
- package/dist/form/download-file.js +1 -1
- package/dist/form/download-file.js.map +2 -2
- package/dist/global/contact-popup.js +10 -1
- package/dist/global/contact-popup.js.map +2 -2
- package/dist/hacktimus/2025.js +1 -0
- package/dist/hacktimus/2025.js.map +7 -0
- package/package.json +1 -1
- package/dist/analytics/debug.js +0 -153
- package/dist/analytics/debug.js.map +0 -7
- package/dist/analytics/form-success.js +0 -74
- package/dist/analytics/form-success.js.map +0 -7
- package/dist/analytics/main.js +0 -98
- package/dist/analytics/main.js.map +0 -7
- package/dist/files.html +0 -479
- package/dist/posthog/attributes.js +0 -1
- package/dist/posthog/attributes.js.map +0 -7
- package/dist/posthog/form-success.js +0 -74
- package/dist/posthog/form-success.js.map +0 -7
- package/dist/posthog/index.js +0 -147
- package/dist/posthog/index.js.map +0 -7
- package/dist/posthog/main.js +0 -1
- package/dist/posthog/main.js.map +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{function s(e){let n=/https:\/\/drive\.google\.com\/file\/d\/([a-zA-Z0-9_-]+)\//;if(/https:\/\/drive\.google\.com\/uc\?export=download&id=([a-zA-Z0-9_-]+)/.test(e))return e;let t=e.match(n);return t&&t[1]?`https://drive.google.com/uc?export=download&id=${t[1]}`:e}function d(e){let n=document.getElementById("asset-success-richtext");if(!n)return;let o=n.getElementsByTagName("a");for(let t of o)t.textContent&&t.textContent.toLowerCase().includes("download")&&(t.href=e)}document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("asset-form-submit");if(!e){console.error("Submit button not found");return}e.addEventListener("click",function(){setTimeout(()=>{let n=document.getElementById("asset-form-success");if(n
|
|
1
|
+
"use strict";(()=>{function s(e){let n=/https:\/\/drive\.google\.com\/file\/d\/([a-zA-Z0-9_-]+)\//;if(/https:\/\/drive\.google\.com\/uc\?export=download&id=([a-zA-Z0-9_-]+)/.test(e))return e;let t=e.match(n);return t&&t[1]?`https://drive.google.com/uc?export=download&id=${t[1]}`:e}function d(e){let n=document.getElementById("asset-success-richtext");if(!n)return;let o=n.getElementsByTagName("a");for(let t of o)t.textContent&&t.textContent.toLowerCase().includes("download")&&(t.href=e)}function c(e){if(!e)return!1;let n=window.getComputedStyle(e),o=n.display,t=n.visibility,i=n.opacity;return!(o==="none"||t==="hidden"||i==="0"||e.classList.contains("hidden")||e.classList.contains("d-none"))}document.addEventListener("DOMContentLoaded",function(){let e=document.getElementById("asset-form-submit");if(!e){console.error("Submit button not found");return}e.addEventListener("click",function(){setTimeout(()=>{let n=document.getElementById("asset-form-success");if(c(n)){let o=document.getElementById("asset-download"),t=s(o?.href||"");o?.setAttribute("href",t),d(t),o&&o.click(),console.log("Download link updated:",t)}else console.warn("Please fill the form correctly before downloading the asset.")},1500)})});})();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../bin/live-reload.js", "../../src/form/download-file.ts"],
|
|
4
|
-
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "function checkDownloadURL(url: string): string {\n const driveFileRegex = /https:\\/\\/drive\\.google\\.com\\/file\\/d\\/([a-zA-Z0-9_-]+)\\//;\n const directDownloadRegex = /https:\\/\\/drive\\.google\\.com\\/uc\\?export=download&id=([a-zA-Z0-9_-]+)/;\n\n // If it's already a direct download link, return as is\n if (directDownloadRegex.test(url)) {\n return url;\n }\n // If it's a normal Google Drive file link, convert it\n const match = url.match(driveFileRegex);\n if (match && match[1]) {\n const fileId = match[1];\n return `https://drive.google.com/uc?export=download&id=${fileId}`;\n }\n return url;\n}\n\nfunction updateDownloadLinks(url: string) {\n const container = document.getElementById(\"asset-success-richtext\");\n if (!container) return;\n\n // Find all <a> tags inside container\n const links = container.getElementsByTagName(\"a\");\n\n for (const link of links) {\n if (link.textContent && link.textContent.toLowerCase().includes(\"download\")) {\n link.href = url;\n }\n }\n}\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n const submitButton = document.getElementById(\"asset-form-submit\") as HTMLInputElement;\n\n if (!submitButton) {\n console.error(\"Submit button not found\");\n return;\n }\n\n submitButton.addEventListener(\"click\", function (): void {\n // Wait 1000ms then check for success div\n setTimeout((): void => {\n const successEl = document.getElementById(\"asset-form-success\") as HTMLElement | null;\n if (successEl
|
|
5
|
-
"mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACVA,WAAS,iBAAiB,KAAqB;AAC7C,UAAM,iBAAiB;AACvB,UAAM,sBAAsB;AAG5B,QAAI,oBAAoB,KAAK,GAAG,GAAG;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,IAAI,MAAM,cAAc;AACtC,QAAI,SAAS,MAAM,CAAC,GAAG;AACrB,YAAM,SAAS,MAAM,CAAC;AACtB,aAAO,kDAAkD,MAAM;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAEA,WAAS,oBAAoB,KAAa;AACxC,UAAM,YAAY,SAAS,eAAe,wBAAwB;AAClE,QAAI,CAAC,UAAW;AAGhB,UAAM,QAAQ,UAAU,qBAAqB,GAAG;AAEhD,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,eAAe,KAAK,YAAY,YAAY,EAAE,SAAS,UAAU,GAAG;AAC3E,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAGA,WAAS,iBAAiB,oBAAoB,WAAkB;AAC9D,UAAM,eAAe,SAAS,eAAe,mBAAmB;AAEhE,QAAI,CAAC,cAAc;AACjB,cAAQ,MAAM,yBAAyB;AACvC;AAAA,IACF;AAEA,iBAAa,iBAAiB,SAAS,WAAkB;AAEvD,iBAAW,MAAY;AACrB,cAAM,YAAY,SAAS,eAAe,oBAAoB;AAC9D,YAAI,
|
|
4
|
+
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "function checkDownloadURL(url: string): string {\n const driveFileRegex = /https:\\/\\/drive\\.google\\.com\\/file\\/d\\/([a-zA-Z0-9_-]+)\\//;\n const directDownloadRegex = /https:\\/\\/drive\\.google\\.com\\/uc\\?export=download&id=([a-zA-Z0-9_-]+)/;\n\n // If it's already a direct download link, return as is\n if (directDownloadRegex.test(url)) {\n return url;\n }\n // If it's a normal Google Drive file link, convert it\n const match = url.match(driveFileRegex);\n if (match && match[1]) {\n const fileId = match[1];\n return `https://drive.google.com/uc?export=download&id=${fileId}`;\n }\n return url;\n}\n\nfunction updateDownloadLinks(url: string) {\n const container = document.getElementById(\"asset-success-richtext\");\n if (!container) return;\n\n // Find all <a> tags inside container\n const links = container.getElementsByTagName(\"a\");\n\n for (const link of links) {\n if (link.textContent && link.textContent.toLowerCase().includes(\"download\")) {\n link.href = url;\n }\n }\n}\n\nfunction isSuccessVisible(successEl: HTMLElement | null): boolean {\n if (!successEl) return false;\n\n // Get the computed style (includes CSS from classes, not just inline)\n const computedStyle = window.getComputedStyle(successEl);\n const display = computedStyle.display;\n const visibility = computedStyle.visibility;\n const opacity = computedStyle.opacity;\n\n // Check if the element or its styles hide it\n const isHidden =\n display === \"none\" ||\n visibility === \"hidden\" ||\n opacity === \"0\" ||\n successEl.classList.contains(\"hidden\") ||\n successEl.classList.contains(\"d-none\");\n\n return !isHidden;\n}\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n const submitButton = document.getElementById(\"asset-form-submit\") as HTMLInputElement;\n\n if (!submitButton) {\n console.error(\"Submit button not found\");\n return;\n }\n\n submitButton.addEventListener(\"click\", function (): void {\n // Wait 1000ms then check for success div\n setTimeout((): void => {\n const successEl = document.getElementById(\"asset-form-success\") as HTMLElement | null;\n if (isSuccessVisible(successEl)) {\n const downloadLink = document.getElementById(\"asset-download\") as HTMLAnchorElement | null;\n const checkedDownloadURL = checkDownloadURL(downloadLink?.href || \"\");\n downloadLink?.setAttribute(\"href\", checkedDownloadURL);\n updateDownloadLinks(checkedDownloadURL);\n if (downloadLink) {\n downloadLink.click();\n }\n console.log(\"Download link updated:\", checkedDownloadURL);\n }\n else {\n console.warn(\"Please fill the form correctly before downloading the asset.\");\n }\n }, 1500);\n });\n});"],
|
|
5
|
+
"mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACVA,WAAS,iBAAiB,KAAqB;AAC7C,UAAM,iBAAiB;AACvB,UAAM,sBAAsB;AAG5B,QAAI,oBAAoB,KAAK,GAAG,GAAG;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,IAAI,MAAM,cAAc;AACtC,QAAI,SAAS,MAAM,CAAC,GAAG;AACrB,YAAM,SAAS,MAAM,CAAC;AACtB,aAAO,kDAAkD,MAAM;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAEA,WAAS,oBAAoB,KAAa;AACxC,UAAM,YAAY,SAAS,eAAe,wBAAwB;AAClE,QAAI,CAAC,UAAW;AAGhB,UAAM,QAAQ,UAAU,qBAAqB,GAAG;AAEhD,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,eAAe,KAAK,YAAY,YAAY,EAAE,SAAS,UAAU,GAAG;AAC3E,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,WAAS,iBAAiB,WAAwC;AAChE,QAAI,CAAC,UAAW,QAAO;AAGvB,UAAM,gBAAgB,OAAO,iBAAiB,SAAS;AACvD,UAAM,UAAU,cAAc;AAC9B,UAAM,aAAa,cAAc;AACjC,UAAM,UAAU,cAAc;AAG9B,UAAM,WACJ,YAAY,UACZ,eAAe,YACf,YAAY,OACZ,UAAU,UAAU,SAAS,QAAQ,KACrC,UAAU,UAAU,SAAS,QAAQ;AAEvC,WAAO,CAAC;AAAA,EACV;AAGA,WAAS,iBAAiB,oBAAoB,WAAkB;AAC9D,UAAM,eAAe,SAAS,eAAe,mBAAmB;AAEhE,QAAI,CAAC,cAAc;AACjB,cAAQ,MAAM,yBAAyB;AACvC;AAAA,IACF;AAEA,iBAAa,iBAAiB,SAAS,WAAkB;AAEvD,iBAAW,MAAY;AACrB,cAAM,YAAY,SAAS,eAAe,oBAAoB;AAC9D,YAAI,iBAAiB,SAAS,GAAG;AAC/B,gBAAM,eAAe,SAAS,eAAe,gBAAgB;AAC7D,gBAAM,qBAAqB,iBAAiB,cAAc,QAAQ,EAAE;AACpE,wBAAc,aAAa,QAAQ,kBAAkB;AACrD,8BAAoB,kBAAkB;AACtC,cAAI,cAAc;AAChB,yBAAa,MAAM;AAAA,UACrB;AACA,kBAAQ,IAAI,0BAA0B,kBAAkB;AAAA,QAC1D,OACK;AACH,kBAAQ,KAAK,8DAA8D;AAAA,QAC7E;AAAA,MACF,GAAG,IAAI;AAAA,IACT,CAAC;AAAA,EACH,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1,10 @@
|
|
|
1
|
-
"use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{let n=document.querySelector('[data-popup-contact="wrapper"]'),e=document.querySelector('[data-popup-contact="content"]'),
|
|
1
|
+
"use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{let n=document.querySelector('[data-popup-contact="wrapper"]'),e=document.querySelector('[data-popup-contact="content"]'),o=document.querySelector('[data-popup-contact="overlay"]'),p=document.querySelectorAll('[data-popup-contact-trigger="open"]'),i=document.querySelectorAll('[data-popup-contact-trigger="close"]');n.style.display="none",o.style.opacity="0",e.style.opacity="0",e.style.transform="scale(0.95)";let c=document.createElement("style");c.id="contact-popup-style",c.textContent=`
|
|
2
|
+
.iti.iti--container {
|
|
3
|
+
z-index: 100000000000 !important;
|
|
4
|
+
}
|
|
5
|
+
@media (max-width: 768px) {
|
|
6
|
+
.iti.iti--container {
|
|
7
|
+
width: 320px !important;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
`;function s(){document.body.style.overflow="hidden"}function r(){document.body.style.overflow=""}function d(){document.getElementById("contact-popup-style")||document.head.appendChild(c)}function y(){let t=document.getElementById("contact-popup-style");t&&t.remove()}function l(){n.style.display="flex",s(),d(),requestAnimationFrame(()=>{o.style.transition="opacity 0.25s ease",e.style.transition="opacity 0.25s ease, transform 0.25s ease",o.style.opacity="1",e.style.opacity="1",e.style.transform="scale(1)"})}function a(){o.style.opacity="0",e.style.opacity="0",e.style.transform="scale(0.95)",setTimeout(()=>{n.style.display="none",r(),y()},250)}p.forEach(t=>t.addEventListener("click",l)),i.forEach(t=>t.addEventListener("click",a)),o.addEventListener("click",t=>{t.target===o&&a()}),window.openContactPopup=l,window.closeContactPopup=a});})();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../bin/live-reload.js", "../../src/global/contact-popup.ts"],
|
|
4
|
-
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "document.addEventListener(\"DOMContentLoaded\", () => {\n const wrapper = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"wrapper\"]'\n )!;\n const content = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"content\"]'\n )!;\n const overlay = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"overlay\"]'\n )!;\n const openTriggers = document.querySelectorAll<HTMLElement>(\n '[data-popup-contact-trigger=\"open\"]'\n );\n const closeTriggers = document.querySelectorAll<HTMLElement>(\n '[data-popup-contact-trigger=\"close\"]'\n );\n\n //
|
|
5
|
-
"mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACVA,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,eAAe,SAAS;AAAA,MAC5B;AAAA,IACF;AACA,UAAM,gBAAgB,SAAS;AAAA,MAC7B;AAAA,IACF;AAGA,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,YAAY;
|
|
4
|
+
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "document.addEventListener(\"DOMContentLoaded\", () => {\n const wrapper = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"wrapper\"]'\n )!;\n const content = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"content\"]'\n )!;\n const overlay = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"overlay\"]'\n )!;\n const openTriggers = document.querySelectorAll<HTMLElement>(\n '[data-popup-contact-trigger=\"open\"]'\n );\n const closeTriggers = document.querySelectorAll<HTMLElement>(\n '[data-popup-contact-trigger=\"close\"]'\n );\n\n // initial\n wrapper.style.display = \"none\";\n overlay.style.opacity = \"0\";\n content.style.opacity = \"0\";\n content.style.transform = \"scale(0.95)\";\n\n // add a dynamic style tag for .iti.iti--container when popup is open\n const popupStyle = document.createElement(\"style\");\n popupStyle.id = \"contact-popup-style\";\n popupStyle.textContent = `\n .iti.iti--container {\n z-index: 100000000000 !important;\n }\n @media (max-width: 768px) {\n .iti.iti--container {\n width: 320px !important;\n }\n }\n `;\n\n function lockScroll() {\n document.body.style.overflow = \"hidden\";\n }\n\n function unlockScroll() {\n document.body.style.overflow = \"\";\n }\n\n function addPopupStyle() {\n if (!document.getElementById(\"contact-popup-style\")) {\n document.head.appendChild(popupStyle);\n }\n }\n\n function removePopupStyle() {\n const existing = document.getElementById(\"contact-popup-style\");\n if (existing) existing.remove();\n }\n\n function openPopup() {\n wrapper.style.display = \"flex\";\n lockScroll();\n addPopupStyle();\n\n requestAnimationFrame(() => {\n overlay.style.transition = \"opacity 0.25s ease\";\n content.style.transition = \"opacity 0.25s ease, transform 0.25s ease\";\n overlay.style.opacity = \"1\";\n content.style.opacity = \"1\";\n content.style.transform = \"scale(1)\";\n });\n }\n\n function closePopup() {\n overlay.style.opacity = \"0\";\n content.style.opacity = \"0\";\n content.style.transform = \"scale(0.95)\";\n setTimeout(() => {\n wrapper.style.display = \"none\";\n unlockScroll();\n removePopupStyle();\n }, 250);\n }\n\n openTriggers.forEach((el) => el.addEventListener(\"click\", openPopup));\n closeTriggers.forEach((el) => el.addEventListener(\"click\", closePopup));\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) closePopup();\n });\n\n (window as any).openContactPopup = openPopup;\n (window as any).closeContactPopup = closePopup;\n});\n"],
|
|
5
|
+
"mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACVA,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,eAAe,SAAS;AAAA,MAC5B;AAAA,IACF;AACA,UAAM,gBAAgB,SAAS;AAAA,MAC7B;AAAA,IACF;AAGA,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,YAAY;AAG1B,UAAM,aAAa,SAAS,cAAc,OAAO;AACjD,eAAW,KAAK;AAChB,eAAW,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWzB,aAAS,aAAa;AACpB,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,aAAS,eAAe;AACtB,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,aAAS,gBAAgB;AACvB,UAAI,CAAC,SAAS,eAAe,qBAAqB,GAAG;AACnD,iBAAS,KAAK,YAAY,UAAU;AAAA,MACtC;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,YAAM,WAAW,SAAS,eAAe,qBAAqB;AAC9D,UAAI,SAAU,UAAS,OAAO;AAAA,IAChC;AAEA,aAAS,YAAY;AACnB,cAAQ,MAAM,UAAU;AACxB,iBAAW;AACX,oBAAc;AAEd,4BAAsB,MAAM;AAC1B,gBAAQ,MAAM,aAAa;AAC3B,gBAAQ,MAAM,aAAa;AAC3B,gBAAQ,MAAM,UAAU;AACxB,gBAAQ,MAAM,UAAU;AACxB,gBAAQ,MAAM,YAAY;AAAA,MAC5B,CAAC;AAAA,IACH;AAEA,aAAS,aAAa;AACpB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,YAAY;AAC1B,iBAAW,MAAM;AACf,gBAAQ,MAAM,UAAU;AACxB,qBAAa;AACb,yBAAiB;AAAA,MACnB,GAAG,GAAG;AAAA,IACR;AAEA,iBAAa,QAAQ,CAAC,OAAO,GAAG,iBAAiB,SAAS,SAAS,CAAC;AACpE,kBAAc,QAAQ,CAAC,OAAO,GAAG,iBAAiB,SAAS,UAAU,CAAC;AACtE,YAAQ,iBAAiB,SAAS,CAAC,MAAM;AACvC,UAAI,EAAE,WAAW,QAAS,YAAW;AAAA,IACvC,CAAC;AAED,IAAC,OAAe,mBAAmB;AACnC,IAAC,OAAe,oBAAoB;AAAA,EACtC,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(()=>{var u=window.matchMedia("(prefers-reduced-motion: reduce)").matches,f=new Swiper("[fynd-slider='testimonials']",{slidesPerView:"auto",spaceBetween:20,loop:!0,speed:5e3,allowTouchMove:!0,grabCursor:!0,autoplay:u?!1:{delay:0}}),p=new Swiper("[fynd-slider='incentive']",{slidesPerView:"auto",spaceBetween:20,loop:!1}),m=new Date("2025-12-05T00:00:00Z");function r(){let s=new Date().getTime(),e=m.getTime()-s;if(e<=0){document.querySelectorAll("[fynd-timer]").forEach(n=>{n.textContent="00"}),clearInterval(w);return}let a=Math.floor(e/(1e3*60*60*24)),i=Math.floor(e/(1e3*60*60)%24),c=Math.floor(e/(1e3*60)%60),l=Math.floor(e/1e3%60),t=(n,d)=>{let o=document.querySelector(`[fynd-timer=${n}]`);o&&(o.textContent=d.toString().padStart(2,"0"))};t("day",a),t("hour",i),t("minute",c),t("second",l)}var w=setInterval(r,1e3);r();})();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../bin/live-reload.js", "../../src/hacktimus/2025.ts"],
|
|
4
|
+
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "declare const Swiper: any;\n\nconst hasReducedMotion: boolean =\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n// Testimonials Swiper\nconst testimonialsSwiper = new Swiper(\"[fynd-slider='testimonials']\", {\n slidesPerView: 'auto',\n spaceBetween: 20,\n loop: true,\n speed: 5000,\n allowTouchMove: true,\n grabCursor: true,\n autoplay: hasReducedMotion\n ? false\n : {\n delay: 0,\n },\n});\n\n// Incentive Swiper\nconst incentiveSwiper = new Swiper(\"[fynd-slider='incentive']\", {\n slidesPerView: 'auto',\n spaceBetween: 20,\n loop: false,\n});\n\n\n// Simple countdown timer for elements with fynd-timer attributes\n// Date/time hardcoded in code itself\n\nconst targetDate = new Date(\"2025-12-05T00:00:00Z\"); // December 5th, 2025 UTC\n\nfunction updateTimer() {\n const now = new Date().getTime();\n const distance = targetDate.getTime() - now;\n\n if (distance <= 0) {\n document.querySelectorAll<HTMLElement>(\"[fynd-timer]\").forEach(el => {\n el.textContent = \"00\";\n });\n clearInterval(timer);\n return;\n }\n\n const days = Math.floor(distance / (1000 * 60 * 60 * 24));\n const hours = Math.floor((distance / (1000 * 60 * 60)) % 24);\n const minutes = Math.floor((distance / (1000 * 60)) % 60);\n const seconds = Math.floor((distance / 1000) % 60);\n\n const setText = (attr: string, val: number) => {\n const el = document.querySelector<HTMLElement>(`[fynd-timer=${attr}]`);\n if (el) el.textContent = val.toString().padStart(2, \"0\");\n };\n\n setText(\"day\", days);\n setText(\"hour\", hours);\n setText(\"minute\", minutes);\n setText(\"second\", seconds);\n}\n\nconst timer = setInterval(updateTimer, 1000);\nupdateTimer();"],
|
|
5
|
+
"mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACRA,MAAM,mBACF,OAAO,WAAW,kCAAkC,EAAE;AAG1D,MAAM,qBAAqB,IAAI,OAAO,gCAAgC;AAAA,IAClE,eAAe;AAAA,IACf,cAAc;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU,mBACJ,QACA;AAAA,MACE,OAAO;AAAA,IACX;AAAA,EACR,CAAC;AAGD,MAAM,kBAAkB,IAAI,OAAO,6BAA6B;AAAA,IAC5D,eAAe;AAAA,IACf,cAAc;AAAA,IACd,MAAM;AAAA,EACV,CAAC;AAMD,MAAM,aAAa,oBAAI,KAAK,sBAAsB;AAElD,WAAS,cAAc;AACnB,UAAM,OAAM,oBAAI,KAAK,GAAE,QAAQ;AAC/B,UAAM,WAAW,WAAW,QAAQ,IAAI;AAExC,QAAI,YAAY,GAAG;AACf,eAAS,iBAA8B,cAAc,EAAE,QAAQ,QAAM;AACjE,WAAG,cAAc;AAAA,MACrB,CAAC;AACD,oBAAc,KAAK;AACnB;AAAA,IACJ;AAEA,UAAM,OAAO,KAAK,MAAM,YAAY,MAAO,KAAK,KAAK,GAAG;AACxD,UAAM,QAAQ,KAAK,MAAO,YAAY,MAAO,KAAK,MAAO,EAAE;AAC3D,UAAM,UAAU,KAAK,MAAO,YAAY,MAAO,MAAO,EAAE;AACxD,UAAM,UAAU,KAAK,MAAO,WAAW,MAAQ,EAAE;AAEjD,UAAM,UAAU,CAAC,MAAc,QAAgB;AAC3C,YAAM,KAAK,SAAS,cAA2B,eAAe,IAAI,GAAG;AACrE,UAAI,GAAI,IAAG,cAAc,IAAI,SAAS,EAAE,SAAS,GAAG,GAAG;AAAA,IAC3D;AAEA,YAAQ,OAAO,IAAI;AACnB,YAAQ,QAAQ,KAAK;AACrB,YAAQ,UAAU,OAAO;AACzB,YAAQ,UAAU,OAAO;AAAA,EAC7B;AAEA,MAAM,QAAQ,YAAY,aAAa,GAAI;AAC3C,cAAY;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/package.json
CHANGED
package/dist/analytics/debug.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
(() => {
|
|
3
|
-
// bin/live-reload.js
|
|
4
|
-
if (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1") {
|
|
5
|
-
new EventSource(`${"http://localhost:3000"}/esbuild`).addEventListener(
|
|
6
|
-
"change",
|
|
7
|
-
() => location.reload()
|
|
8
|
-
);
|
|
9
|
-
} else {
|
|
10
|
-
console.log("Live reload disabled: not running on localhost");
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// src/analytics/debug.ts
|
|
14
|
-
var trackEvent = (eventName, properties, gaEventName) => {
|
|
15
|
-
console.log("\u{1F50D} Tracking Event:", eventName);
|
|
16
|
-
console.log("\u{1F4CA} Properties:", properties);
|
|
17
|
-
if (window.posthog) {
|
|
18
|
-
console.log("\u2705 PostHog found - sending event");
|
|
19
|
-
try {
|
|
20
|
-
window.posthog.capture(eventName, properties);
|
|
21
|
-
console.log("\u2705 PostHog event sent successfully");
|
|
22
|
-
} catch (error) {
|
|
23
|
-
console.error("\u274C PostHog error:", error);
|
|
24
|
-
}
|
|
25
|
-
} else {
|
|
26
|
-
console.log("\u274C PostHog not found");
|
|
27
|
-
}
|
|
28
|
-
if (window.gtag) {
|
|
29
|
-
console.log("\u2705 gtag found - sending to GA4");
|
|
30
|
-
const gtagEventName = gaEventName || eventName;
|
|
31
|
-
const gtagPayload = {
|
|
32
|
-
event_category: "fynd_engagement",
|
|
33
|
-
event_label: properties.source_page,
|
|
34
|
-
custom_source_page: properties.source_page,
|
|
35
|
-
custom_fynd_product: properties.fynd_product,
|
|
36
|
-
custom_interface: properties.interface,
|
|
37
|
-
custom_device_type: properties.device_type,
|
|
38
|
-
custom_utm_source: properties.utm_source,
|
|
39
|
-
custom_utm_medium: properties.utm_medium,
|
|
40
|
-
custom_utm_campaign: properties.utm_campaign,
|
|
41
|
-
custom_referrer: properties.referrer,
|
|
42
|
-
..."form_name" in properties && { custom_form_name: properties.form_name }
|
|
43
|
-
};
|
|
44
|
-
console.log("\u{1F4E4} GA4 Event Name:", gtagEventName);
|
|
45
|
-
console.log("\u{1F4E4} GA4 Payload:", gtagPayload);
|
|
46
|
-
try {
|
|
47
|
-
window.gtag("event", gtagEventName, gtagPayload);
|
|
48
|
-
console.log("\u2705 Event sent to GA4 successfully");
|
|
49
|
-
} catch (error) {
|
|
50
|
-
console.error("\u274C GA4 error:", error);
|
|
51
|
-
}
|
|
52
|
-
} else {
|
|
53
|
-
console.log("\u274C gtag not found - GA4 not loaded");
|
|
54
|
-
console.log("Available on window:", Object.keys(window).filter((key) => key.includes("g")));
|
|
55
|
-
}
|
|
56
|
-
console.log("---");
|
|
57
|
-
};
|
|
58
|
-
var getTrackingProperties = () => {
|
|
59
|
-
const pathname = window.location.pathname;
|
|
60
|
-
const properties = {
|
|
61
|
-
source_page: pathname === "/" ? pathname + " Home" : pathname,
|
|
62
|
-
fynd_product: "fynd.com website",
|
|
63
|
-
interface: "Webflow",
|
|
64
|
-
device_type: /Mobile|Android|iPhone|iPad/.test(navigator.userAgent) ? "Mobile" : "Web",
|
|
65
|
-
utm_source: new URLSearchParams(window.location.search).get("utm_source") || "",
|
|
66
|
-
utm_medium: new URLSearchParams(window.location.search).get("utm_medium") || "",
|
|
67
|
-
utm_campaign: new URLSearchParams(window.location.search).get("utm_campaign") || "",
|
|
68
|
-
referrer: document.referrer
|
|
69
|
-
};
|
|
70
|
-
console.log("\u{1F4CB} Generated tracking properties:", properties);
|
|
71
|
-
return properties;
|
|
72
|
-
};
|
|
73
|
-
var getTrackingPropertiesWithForm = (formName) => {
|
|
74
|
-
const baseProperties = getTrackingProperties();
|
|
75
|
-
const propertiesWithForm = {
|
|
76
|
-
...baseProperties,
|
|
77
|
-
form_name: formName
|
|
78
|
-
};
|
|
79
|
-
console.log("\u{1F4CB} Generated form tracking properties:", propertiesWithForm);
|
|
80
|
-
return propertiesWithForm;
|
|
81
|
-
};
|
|
82
|
-
window.getTrackingProperties = getTrackingProperties;
|
|
83
|
-
window.getTrackingPropertiesWithForm = getTrackingPropertiesWithForm;
|
|
84
|
-
window.interactedForm = "";
|
|
85
|
-
document.addEventListener("DOMContentLoaded", function() {
|
|
86
|
-
console.log("\u{1F680} Debug tracking script loaded");
|
|
87
|
-
const testButton = document.createElement("button");
|
|
88
|
-
testButton.textContent = "Test GA4 Event";
|
|
89
|
-
testButton.style.cssText = "position:fixed;top:10px;right:10px;z-index:9999;background:red;color:white;padding:10px;border:none;border-radius:4px;cursor:pointer;";
|
|
90
|
-
testButton.onclick = function() {
|
|
91
|
-
console.log("\u{1F9EA} Testing GA4 integration...");
|
|
92
|
-
trackEvent("fynd_test_event", window.getTrackingProperties());
|
|
93
|
-
};
|
|
94
|
-
document.body.appendChild(testButton);
|
|
95
|
-
console.log("\u{1F534} Test button added to page");
|
|
96
|
-
});
|
|
97
|
-
document.addEventListener("DOMContentLoaded", function() {
|
|
98
|
-
setTimeout(() => {
|
|
99
|
-
console.log("\u{1F50D} === GA4 Integration Diagnostic Report ===");
|
|
100
|
-
const gtagType = typeof window.gtag;
|
|
101
|
-
console.log("gtag type:", gtagType);
|
|
102
|
-
console.log("gtag available:", gtagType !== "undefined");
|
|
103
|
-
const posthogType = typeof window.posthog;
|
|
104
|
-
console.log("PostHog type:", posthogType);
|
|
105
|
-
console.log("PostHog available:", posthogType !== "undefined");
|
|
106
|
-
const dataLayerExists = "dataLayer" in window;
|
|
107
|
-
console.log("dataLayer exists:", dataLayerExists);
|
|
108
|
-
if (dataLayerExists) {
|
|
109
|
-
console.log("dataLayer length:", window.dataLayer?.length || "undefined");
|
|
110
|
-
}
|
|
111
|
-
const gaScripts = document.querySelectorAll('script[src*="googletagmanager"], script[src*="google-analytics"]');
|
|
112
|
-
console.log("GA script tags found:", gaScripts.length);
|
|
113
|
-
gaScripts.forEach((script, index) => {
|
|
114
|
-
console.log(`GA Script ${index + 1}:`, script.src);
|
|
115
|
-
});
|
|
116
|
-
const gaProperties = Object.keys(window).filter(
|
|
117
|
-
(key) => key.toLowerCase().includes("google") || key.toLowerCase().includes("gtag") || key.toLowerCase().includes("ga") || key.toLowerCase().includes("analytics")
|
|
118
|
-
);
|
|
119
|
-
console.log("GA-related window properties:", gaProperties);
|
|
120
|
-
if (gtagType === "undefined") {
|
|
121
|
-
console.log("\u274C GA4 (gtag) not loaded. Check your GA4 installation.");
|
|
122
|
-
console.log("\u{1F4A1} Make sure the Google Analytics script loads before this debug script");
|
|
123
|
-
} else {
|
|
124
|
-
console.log("\u2705 GA4 (gtag) is loaded and ready");
|
|
125
|
-
try {
|
|
126
|
-
window.gtag("config", "test");
|
|
127
|
-
console.log("\u2705 gtag function is callable");
|
|
128
|
-
} catch (error) {
|
|
129
|
-
console.log("\u26A0\uFE0F gtag function exists but threw error:", error);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (posthogType === "undefined") {
|
|
133
|
-
console.log("\u274C PostHog not loaded");
|
|
134
|
-
} else {
|
|
135
|
-
console.log("\u2705 PostHog is loaded and ready");
|
|
136
|
-
}
|
|
137
|
-
console.log("=== End Diagnostic Report ===");
|
|
138
|
-
setTimeout(() => {
|
|
139
|
-
console.log("\u{1F916} Auto-triggering test event...");
|
|
140
|
-
trackEvent("fynd_auto_test_event", window.getTrackingProperties());
|
|
141
|
-
}, 5e3);
|
|
142
|
-
}, 2e3);
|
|
143
|
-
});
|
|
144
|
-
var originalFetch = window.fetch;
|
|
145
|
-
window.fetch = function(...args) {
|
|
146
|
-
const url = args[0]?.toString() || "";
|
|
147
|
-
if (url.includes("google-analytics") || url.includes("collect")) {
|
|
148
|
-
console.log("\u{1F4E1} GA4 network request detected:", url);
|
|
149
|
-
}
|
|
150
|
-
return originalFetch.apply(this, args);
|
|
151
|
-
};
|
|
152
|
-
})();
|
|
153
|
-
//# sourceMappingURL=debug.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/analytics/debug.ts"],
|
|
4
|
-
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// Debug version with TypeScript typing\n\n// Type definitions\ninterface TrackingProperties {\n source_page: string;\n fynd_product: string;\n interface: string;\n device_type: string;\n utm_source: string;\n utm_medium: string;\n utm_campaign: string;\n referrer: string;\n}\n\ninterface TrackingPropertiesWithForm extends TrackingProperties {\n form_name: string;\n}\n\n// PostHog interface\ninterface PostHog {\n capture: (eventName: string, properties: TrackingProperties | TrackingPropertiesWithForm) => void;\n}\n\n// Google Analytics gtag interface\ndeclare function gtag(command: string, targetId: string, config?: any): void;\n\n// Extend Window interface to include custom properties\ndeclare global {\n interface Window {\n getTrackingProperties: () => TrackingProperties;\n getTrackingPropertiesWithForm: (formName: string) => TrackingPropertiesWithForm;\n interactedForm: string;\n posthog: PostHog;\n gtag: typeof gtag;\n }\n}\n\n// This export statement is needed to make this file a module\nexport { };\n\n// Helper function to send events to both PostHog and GA4 (with debugging)\nconst trackEvent = (eventName: string, properties: TrackingProperties | TrackingPropertiesWithForm, gaEventName?: string): void => {\n console.log('\uD83D\uDD0D Tracking Event:', eventName);\n console.log('\uD83D\uDCCA Properties:', properties);\n\n // PostHog tracking\n if (window.posthog) {\n console.log('\u2705 PostHog found - sending event');\n try {\n window.posthog.capture(eventName, properties);\n console.log('\u2705 PostHog event sent successfully');\n } catch (error) {\n console.error('\u274C PostHog error:', error);\n }\n } else {\n console.log('\u274C PostHog not found');\n }\n\n // Google Analytics tracking\n if (window.gtag) {\n console.log('\u2705 gtag found - sending to GA4');\n const gtagEventName: string = gaEventName || eventName;\n const gtagPayload = {\n event_category: 'fynd_engagement',\n event_label: properties.source_page,\n custom_source_page: properties.source_page,\n custom_fynd_product: properties.fynd_product,\n custom_interface: properties.interface,\n custom_device_type: properties.device_type,\n custom_utm_source: properties.utm_source,\n custom_utm_medium: properties.utm_medium,\n custom_utm_campaign: properties.utm_campaign,\n custom_referrer: properties.referrer,\n ...(('form_name' in properties) && { custom_form_name: properties.form_name })\n };\n\n console.log('\uD83D\uDCE4 GA4 Event Name:', gtagEventName);\n console.log('\uD83D\uDCE4 GA4 Payload:', gtagPayload);\n\n try {\n window.gtag('event', gtagEventName, gtagPayload);\n console.log('\u2705 Event sent to GA4 successfully');\n } catch (error) {\n console.error('\u274C GA4 error:', error);\n }\n } else {\n console.log('\u274C gtag not found - GA4 not loaded');\n console.log('Available on window:', Object.keys(window).filter(key => key.includes('g')));\n }\n\n console.log('---');\n};\n\n// Default tracking properties function (with debugging)\nconst getTrackingProperties = (): TrackingProperties => {\n const pathname: string = window.location.pathname;\n\n const properties: TrackingProperties = {\n source_page: pathname === \"/\" ? pathname + \" Home\" : pathname,\n fynd_product: \"fynd.com website\",\n interface: \"Webflow\",\n device_type: /Mobile|Android|iPhone|iPad/.test(navigator.userAgent)\n ? \"Mobile\"\n : \"Web\",\n utm_source:\n new URLSearchParams(window.location.search).get(\"utm_source\") || \"\",\n utm_medium:\n new URLSearchParams(window.location.search).get(\"utm_medium\") || \"\",\n utm_campaign:\n new URLSearchParams(window.location.search).get(\"utm_campaign\") || \"\",\n referrer: document.referrer,\n };\n\n console.log('\uD83D\uDCCB Generated tracking properties:', properties);\n return properties;\n};\n\n// Function to get tracking properties with form name (with debugging)\nconst getTrackingPropertiesWithForm = (formName: string): TrackingPropertiesWithForm => {\n const baseProperties = getTrackingProperties();\n const propertiesWithForm: TrackingPropertiesWithForm = {\n ...baseProperties,\n form_name: formName,\n };\n\n console.log('\uD83D\uDCCB Generated form tracking properties:', propertiesWithForm);\n return propertiesWithForm;\n};\n\n// Assign functions to window object\nwindow.getTrackingProperties = getTrackingProperties;\nwindow.getTrackingPropertiesWithForm = getTrackingPropertiesWithForm;\nwindow.interactedForm = \"\";\n\n// Test button - add this temporarily to your page\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n console.log('\uD83D\uDE80 Debug tracking script loaded');\n\n // Create a test button\n const testButton: HTMLButtonElement = document.createElement('button');\n testButton.textContent = 'Test GA4 Event';\n testButton.style.cssText = 'position:fixed;top:10px;right:10px;z-index:9999;background:red;color:white;padding:10px;border:none;border-radius:4px;cursor:pointer;';\n\n testButton.onclick = function (): void {\n console.log('\uD83E\uDDEA Testing GA4 integration...');\n trackEvent('fynd_test_event', window.getTrackingProperties());\n };\n\n document.body.appendChild(testButton);\n console.log('\uD83D\uDD34 Test button added to page');\n});\n\n// Check if GA4 is loaded with detailed diagnostics\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n setTimeout(() => {\n console.log('\uD83D\uDD0D === GA4 Integration Diagnostic Report ===');\n\n // Check gtag\n const gtagType = typeof window.gtag;\n console.log('gtag type:', gtagType);\n console.log('gtag available:', gtagType !== 'undefined');\n\n // Check PostHog\n const posthogType = typeof window.posthog;\n console.log('PostHog type:', posthogType);\n console.log('PostHog available:', posthogType !== 'undefined');\n\n // Check dataLayer\n const dataLayerExists = 'dataLayer' in window;\n console.log('dataLayer exists:', dataLayerExists);\n if (dataLayerExists) {\n console.log('dataLayer length:', (window as any).dataLayer?.length || 'undefined');\n }\n\n // Check for Google Analytics script tags\n const gaScripts = document.querySelectorAll('script[src*=\"googletagmanager\"], script[src*=\"google-analytics\"]');\n console.log('GA script tags found:', gaScripts.length);\n gaScripts.forEach((script, index) => {\n console.log(`GA Script ${index + 1}:`, (script as HTMLScriptElement).src);\n });\n\n // List all window properties that might be GA-related\n const gaProperties = Object.keys(window).filter(key =>\n key.toLowerCase().includes('google') ||\n key.toLowerCase().includes('gtag') ||\n key.toLowerCase().includes('ga') ||\n key.toLowerCase().includes('analytics')\n );\n console.log('GA-related window properties:', gaProperties);\n\n // Overall status\n if (gtagType === 'undefined') {\n console.log('\u274C GA4 (gtag) not loaded. Check your GA4 installation.');\n console.log('\uD83D\uDCA1 Make sure the Google Analytics script loads before this debug script');\n } else {\n console.log('\u2705 GA4 (gtag) is loaded and ready');\n\n // Test gtag function\n try {\n window.gtag('config', 'test');\n console.log('\u2705 gtag function is callable');\n } catch (error) {\n console.log('\u26A0\uFE0F gtag function exists but threw error:', error);\n }\n }\n\n if (posthogType === 'undefined') {\n console.log('\u274C PostHog not loaded');\n } else {\n console.log('\u2705 PostHog is loaded and ready');\n }\n\n console.log('=== End Diagnostic Report ===');\n\n // Auto-trigger a test event after 5 seconds\n setTimeout(() => {\n console.log('\uD83E\uDD16 Auto-triggering test event...');\n trackEvent('fynd_auto_test_event', window.getTrackingProperties());\n }, 5000);\n\n }, 2000);\n});\n\n// Network request interceptor to see if GA4 requests are being made\nconst originalFetch = window.fetch;\nwindow.fetch = function (...args): Promise<Response> {\n const url = args[0]?.toString() || '';\n if (url.includes('google-analytics') || url.includes('collect')) {\n console.log('\uD83D\uDCE1 GA4 network request detected:', url);\n }\n return originalFetch.apply(this, args);\n};"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
(() => {
|
|
3
|
-
// bin/live-reload.js
|
|
4
|
-
if (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1") {
|
|
5
|
-
new EventSource(`${"http://localhost:3000"}/esbuild`).addEventListener(
|
|
6
|
-
"change",
|
|
7
|
-
() => location.reload()
|
|
8
|
-
);
|
|
9
|
-
} else {
|
|
10
|
-
console.log("Live reload disabled: not running on localhost");
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// src/analytics/form-success.ts
|
|
14
|
-
var FORM_SUCCESS_STORAGE_KEY = "form_success_tracking";
|
|
15
|
-
var SESSION_DURATION_MS = 10 * 60 * 500;
|
|
16
|
-
function getFormName() {
|
|
17
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
18
|
-
const formName = urlParams.get("form_name");
|
|
19
|
-
return formName ? decodeURIComponent(formName) : null;
|
|
20
|
-
}
|
|
21
|
-
function hasFormSuccessBeenTracked(formName) {
|
|
22
|
-
try {
|
|
23
|
-
const storedData = sessionStorage.getItem(FORM_SUCCESS_STORAGE_KEY);
|
|
24
|
-
if (!storedData) {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
const parsedData = JSON.parse(storedData);
|
|
28
|
-
const currentTime = Date.now();
|
|
29
|
-
const timeDifference = currentTime - parsedData.timestamp;
|
|
30
|
-
if (timeDifference > SESSION_DURATION_MS) {
|
|
31
|
-
sessionStorage.removeItem(FORM_SUCCESS_STORAGE_KEY);
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
return parsedData.formName === formName;
|
|
35
|
-
} catch (error) {
|
|
36
|
-
console.error("Error checking form success tracking:", error);
|
|
37
|
-
sessionStorage.removeItem(FORM_SUCCESS_STORAGE_KEY);
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
function markFormSuccessAsTracked(formName) {
|
|
42
|
-
try {
|
|
43
|
-
const trackingData = {
|
|
44
|
-
timestamp: Date.now(),
|
|
45
|
-
formName
|
|
46
|
-
};
|
|
47
|
-
sessionStorage.setItem(FORM_SUCCESS_STORAGE_KEY, JSON.stringify(trackingData));
|
|
48
|
-
} catch (error) {
|
|
49
|
-
console.error("Error storing form success tracking data:", error);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
document.addEventListener("DOMContentLoaded", function() {
|
|
53
|
-
const currentFormName = getFormName();
|
|
54
|
-
if (!currentFormName) {
|
|
55
|
-
console.log("No form name found in URL parameters");
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
if (hasFormSuccessBeenTracked(currentFormName)) {
|
|
59
|
-
console.log(`Form success for "${currentFormName}" already tracked in this session`);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
if (window.posthog && window.getTrackingPropertiesWithForm) {
|
|
63
|
-
window.posthog.capture(
|
|
64
|
-
"fynd_form_success",
|
|
65
|
-
window.getTrackingPropertiesWithForm(currentFormName)
|
|
66
|
-
);
|
|
67
|
-
markFormSuccessAsTracked(currentFormName);
|
|
68
|
-
console.log(`Form success tracked for "${currentFormName}"`);
|
|
69
|
-
} else {
|
|
70
|
-
console.warn("PostHog or tracking functions not available");
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
})();
|
|
74
|
-
//# sourceMappingURL=form-success.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/analytics/form-success.ts"],
|
|
4
|
-
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// Type definitions (if not already defined elsewhere)\ninterface TrackingProperties {\n source_page: string;\n fynd_product: string;\n interface: string;\n device_type: string;\n utm_source: string;\n utm_medium: string;\n utm_campaign: string;\n referrer: string;\n}\n\ninterface TrackingPropertiesWithForm extends TrackingProperties {\n form_name: string;\n}\n\ninterface PostHog {\n capture: (eventName: string, properties: TrackingProperties | TrackingPropertiesWithForm) => void;\n}\n\n// Global declarations (if not already defined elsewhere)\ndeclare global {\n interface Window {\n getTrackingPropertiesWithForm: (formName: string) => TrackingPropertiesWithForm;\n posthog: PostHog;\n }\n}\n\n// This export statement makes the file a module and allows global declarations to work\nexport { };\n\n// Session storage key for tracking form success events\nconst FORM_SUCCESS_STORAGE_KEY = 'form_success_tracking';\nconst SESSION_DURATION_MS = 10 * 60 * 500;\n\ninterface FormSuccessData {\n timestamp: number;\n formName: string;\n}\n\nfunction getFormName(): string | null {\n const urlParams: URLSearchParams = new URLSearchParams(window.location.search);\n const formName: string | null = urlParams.get(\"form_name\");\n return formName ? decodeURIComponent(formName) : null;\n}\n\nfunction hasFormSuccessBeenTracked(formName: string): boolean {\n try {\n const storedData: string | null = sessionStorage.getItem(FORM_SUCCESS_STORAGE_KEY);\n\n if (!storedData) {\n return false;\n }\n\n const parsedData: FormSuccessData = JSON.parse(storedData);\n const currentTime: number = Date.now();\n const timeDifference: number = currentTime - parsedData.timestamp;\n\n // Check if the session has expired (more than 10 minutes)\n if (timeDifference > SESSION_DURATION_MS) {\n // Session expired, remove old data\n sessionStorage.removeItem(FORM_SUCCESS_STORAGE_KEY);\n return false;\n }\n\n // Check if the same form success was already tracked in this session\n return parsedData.formName === formName;\n } catch (error) {\n console.error('Error checking form success tracking:', error);\n // If there's an error, clear the storage and allow tracking\n sessionStorage.removeItem(FORM_SUCCESS_STORAGE_KEY);\n return false;\n }\n}\n\nfunction markFormSuccessAsTracked(formName: string): void {\n try {\n const trackingData: FormSuccessData = {\n timestamp: Date.now(),\n formName: formName\n };\n\n sessionStorage.setItem(FORM_SUCCESS_STORAGE_KEY, JSON.stringify(trackingData));\n } catch (error) {\n console.error('Error storing form success tracking data:', error);\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n const currentFormName: string | null = getFormName();\n\n if (!currentFormName) {\n console.log('No form name found in URL parameters');\n return;\n }\n\n // Check if form success has already been tracked for this form in the current session\n if (hasFormSuccessBeenTracked(currentFormName)) {\n console.log(`Form success for \"${currentFormName}\" already tracked in this session`);\n return;\n }\n\n if (window.posthog && window.getTrackingPropertiesWithForm) {\n window.posthog.capture(\n \"fynd_form_success\",\n window.getTrackingPropertiesWithForm(currentFormName)\n );\n\n // Mark this form success as tracked\n markFormSuccessAsTracked(currentFormName);\n console.log(`Form success tracked for \"${currentFormName}\"`);\n } else {\n console.warn(\"PostHog or tracking functions not available\");\n }\n});"],
|
|
5
|
-
"mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,gDAAgD;AAAA,EAC9D;;;ACsBA,MAAM,2BAA2B;AACjC,MAAM,sBAAsB,KAAK,KAAK;AAOtC,WAAS,cAA6B;AAClC,UAAM,YAA6B,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC7E,UAAM,WAA0B,UAAU,IAAI,WAAW;AACzD,WAAO,WAAW,mBAAmB,QAAQ,IAAI;AAAA,EACrD;AAEA,WAAS,0BAA0B,UAA2B;AAC1D,QAAI;AACA,YAAM,aAA4B,eAAe,QAAQ,wBAAwB;AAEjF,UAAI,CAAC,YAAY;AACb,eAAO;AAAA,MACX;AAEA,YAAM,aAA8B,KAAK,MAAM,UAAU;AACzD,YAAM,cAAsB,KAAK,IAAI;AACrC,YAAM,iBAAyB,cAAc,WAAW;AAGxD,UAAI,iBAAiB,qBAAqB;AAEtC,uBAAe,WAAW,wBAAwB;AAClD,eAAO;AAAA,MACX;AAGA,aAAO,WAAW,aAAa;AAAA,IACnC,SAAS,OAAO;AACZ,cAAQ,MAAM,yCAAyC,KAAK;AAE5D,qBAAe,WAAW,wBAAwB;AAClD,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,WAAS,yBAAyB,UAAwB;AACtD,QAAI;AACA,YAAM,eAAgC;AAAA,QAClC,WAAW,KAAK,IAAI;AAAA,QACpB;AAAA,MACJ;AAEA,qBAAe,QAAQ,0BAA0B,KAAK,UAAU,YAAY,CAAC;AAAA,IACjF,SAAS,OAAO;AACZ,cAAQ,MAAM,6CAA6C,KAAK;AAAA,IACpE;AAAA,EACJ;AAEA,WAAS,iBAAiB,oBAAoB,WAAkB;AAC5D,UAAM,kBAAiC,YAAY;AAEnD,QAAI,CAAC,iBAAiB;AAClB,cAAQ,IAAI,sCAAsC;AAClD;AAAA,IACJ;AAGA,QAAI,0BAA0B,eAAe,GAAG;AAC5C,cAAQ,IAAI,qBAAqB,eAAe,mCAAmC;AACnF;AAAA,IACJ;AAEA,QAAI,OAAO,WAAW,OAAO,+BAA+B;AACxD,aAAO,QAAQ;AAAA,QACX;AAAA,QACA,OAAO,8BAA8B,eAAe;AAAA,MACxD;AAGA,+BAAyB,eAAe;AACxC,cAAQ,IAAI,6BAA6B,eAAe,GAAG;AAAA,IAC/D,OAAO;AACH,cAAQ,KAAK,6CAA6C;AAAA,IAC9D;AAAA,EACJ,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/analytics/main.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
(() => {
|
|
3
|
-
// bin/live-reload.js
|
|
4
|
-
if (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1") {
|
|
5
|
-
new EventSource(`${"http://localhost:3000"}/esbuild`).addEventListener(
|
|
6
|
-
"change",
|
|
7
|
-
() => location.reload()
|
|
8
|
-
);
|
|
9
|
-
} else {
|
|
10
|
-
console.log("Live reload disabled: not running on localhost");
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// src/analytics/main.ts
|
|
14
|
-
var getTrackingProperties = () => {
|
|
15
|
-
const pathname = window.location.pathname;
|
|
16
|
-
return {
|
|
17
|
-
source_page: pathname === "/" ? `${pathname} Home` : pathname,
|
|
18
|
-
fynd_product: "fynd.com website",
|
|
19
|
-
interface: "Webflow",
|
|
20
|
-
device_type: /Mobile|Android|iPhone|iPad/.test(navigator.userAgent) ? "Mobile" : "Web",
|
|
21
|
-
utm_source: new URLSearchParams(window.location.search).get("utm_source") || "",
|
|
22
|
-
utm_medium: new URLSearchParams(window.location.search).get("utm_medium") || "",
|
|
23
|
-
utm_campaign: new URLSearchParams(window.location.search).get("utm_campaign") || "",
|
|
24
|
-
referrer: document.referrer
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
var getTrackingPropertiesWithForm = (formName) => {
|
|
28
|
-
return {
|
|
29
|
-
...getTrackingProperties(),
|
|
30
|
-
form_name: formName
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
var trackEvent = (eventName, properties) => {
|
|
34
|
-
if (window.posthog) {
|
|
35
|
-
window.posthog.capture(eventName, properties);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
window.getTrackingProperties = getTrackingProperties;
|
|
39
|
-
window.getTrackingPropertiesWithForm = getTrackingPropertiesWithForm;
|
|
40
|
-
window.interactedForm = "";
|
|
41
|
-
function getParentFormName(fieldElement) {
|
|
42
|
-
const parentForm = fieldElement.closest("form");
|
|
43
|
-
if (parentForm) {
|
|
44
|
-
const formName = parentForm.getAttribute("data-name");
|
|
45
|
-
return formName || null;
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
document.addEventListener("DOMContentLoaded", function() {
|
|
50
|
-
const trackingProps = window.getTrackingProperties();
|
|
51
|
-
if (window.posthog) {
|
|
52
|
-
window.posthog.capture("$pageview", trackingProps);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
window.addEventListener("load", function() {
|
|
56
|
-
trackEvent("fynd_page_loaded", window.getTrackingProperties());
|
|
57
|
-
});
|
|
58
|
-
document.addEventListener("DOMContentLoaded", function() {
|
|
59
|
-
const signUpButtons = document.querySelectorAll('[data-ph="sign-up"]');
|
|
60
|
-
const signInButtons = document.querySelectorAll('[data-ph="sign-in"]');
|
|
61
|
-
const scrollToFormButtons = document.querySelectorAll(
|
|
62
|
-
'[href="#footer-form"]'
|
|
63
|
-
);
|
|
64
|
-
const bookADemoButtons = document.querySelectorAll('[data-ph="book-a-demo"]');
|
|
65
|
-
const submitButtons = document.querySelectorAll('[type="submit"]');
|
|
66
|
-
submitButtons.forEach((button) => {
|
|
67
|
-
button.addEventListener("click", function() {
|
|
68
|
-
const formName = getParentFormName(this);
|
|
69
|
-
setTimeout(() => {
|
|
70
|
-
if (window.validationPassed = true) {
|
|
71
|
-
trackEvent("fynd_form_submitted", window.getTrackingPropertiesWithForm(formName || ""));
|
|
72
|
-
}
|
|
73
|
-
}, 100);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
signUpButtons.forEach((button) => {
|
|
77
|
-
button.addEventListener("click", function() {
|
|
78
|
-
trackEvent("fynd_clicked_sign_up", window.getTrackingProperties());
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
signInButtons.forEach((button) => {
|
|
82
|
-
button.addEventListener("click", function() {
|
|
83
|
-
trackEvent("fynd_clicked_sign_in", window.getTrackingProperties());
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
scrollToFormButtons.forEach((button) => {
|
|
87
|
-
button.addEventListener("click", function() {
|
|
88
|
-
trackEvent("fynd_clicked_scroll_to_form", window.getTrackingProperties());
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
bookADemoButtons.forEach((button) => {
|
|
92
|
-
button.addEventListener("click", function() {
|
|
93
|
-
trackEvent("fynd_clicked_book_a_demo", window.getTrackingProperties());
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
})();
|
|
98
|
-
//# sourceMappingURL=main.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/analytics/main.ts"],
|
|
4
|
-
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "import { createLanguageService } from \"typescript\";\n\n// Type definitions\ninterface TrackingProperties {\n source_page: string;\n fynd_product: string;\n interface: string;\n device_type: string;\n utm_source: string;\n utm_medium: string;\n utm_campaign: string;\n referrer: string;\n}\n\ninterface TrackingPropertiesWithForm extends TrackingProperties {\n form_name: string;\n}\n\n// PostHog interface\ninterface PostHog {\n capture: (\n eventName: string,\n properties: TrackingProperties | TrackingPropertiesWithForm\n ) => void;\n}\n\n// Extend Window interface to include custom properties\ndeclare global {\n interface Window {\n getTrackingProperties: () => TrackingProperties;\n getTrackingPropertiesWithForm: (\n formName: string\n ) => TrackingPropertiesWithForm;\n interactedForm: string;\n validationPassed?: boolean;\n posthog: PostHog;\n }\n}\n\n// This export statement is needed to make this file a module\n// and allow the global declarations to work properly\nexport { };\n\n// Default tracking properties function\nconst getTrackingProperties = (): TrackingProperties => {\n const pathname: string = window.location.pathname;\n\n return {\n source_page: pathname === \"/\" ? `${pathname} Home` : pathname,\n fynd_product: \"fynd.com website\",\n interface: \"Webflow\",\n device_type: /Mobile|Android|iPhone|iPad/.test(navigator.userAgent)\n ? \"Mobile\"\n : \"Web\",\n utm_source:\n new URLSearchParams(window.location.search).get(\"utm_source\") || \"\",\n utm_medium:\n new URLSearchParams(window.location.search).get(\"utm_medium\") || \"\",\n utm_campaign:\n new URLSearchParams(window.location.search).get(\"utm_campaign\") || \"\",\n referrer: document.referrer,\n };\n};\n\n// Function to get tracking properties with form name\nconst getTrackingPropertiesWithForm = (\n formName: string\n): TrackingPropertiesWithForm => {\n return {\n ...getTrackingProperties(),\n form_name: formName,\n };\n};\n\n// Helper function to send events to PostHog\nconst trackEvent = (\n eventName: string,\n properties: TrackingProperties | TrackingPropertiesWithForm\n) => {\n // PostHog tracking\n if (window.posthog) {\n window.posthog.capture(eventName, properties);\n }\n};\n\n// Assign functions to window object\nwindow.getTrackingProperties = getTrackingProperties;\nwindow.getTrackingPropertiesWithForm = getTrackingPropertiesWithForm;\nwindow.interactedForm = \"\";\n\n// Getting parent form name by passing field element\nfunction getParentFormName(fieldElement: Element): string | null {\n const parentForm = fieldElement.closest(\"form\") as HTMLFormElement | null;\n if (parentForm) {\n const formName = parentForm.getAttribute(\"data-name\");\n return formName || null;\n }\n return null;\n}\n\n// Initialize PostHog pageview\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n const trackingProps = window.getTrackingProperties();\n\n // PostHog pageview\n if (window.posthog) {\n window.posthog.capture(\"$pageview\", trackingProps);\n }\n});\n\n// Track page load event\nwindow.addEventListener(\"load\", function (): void {\n trackEvent(\"fynd_page_loaded\", window.getTrackingProperties());\n});\n\n// Button click tracking for sign up, sign in, scroll to form and book a demo buttons\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n const signUpButtons = document.querySelectorAll('[data-ph=\"sign-up\"]') as NodeListOf<Element>;\n const signInButtons = document.querySelectorAll('[data-ph=\"sign-in\"]') as NodeListOf<Element>;\n const scrollToFormButtons = document.querySelectorAll(\n '[href=\"#footer-form\"]'\n ) as NodeListOf<Element>;\n const bookADemoButtons = document.querySelectorAll('[data-ph=\"book-a-demo\"]') as NodeListOf<Element>;\n const submitButtons = document.querySelectorAll('[type=\"submit\"]') as NodeListOf<Element>;\n\n submitButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", function (this: HTMLElement): void {\n const formName = getParentFormName(this);\n setTimeout(() => {\n if (window.validationPassed = true) {\n // If validation passed, track the submit event\n trackEvent(\"fynd_form_submitted\", window.getTrackingPropertiesWithForm(formName || \"\"));\n }\n }, 100);\n });\n });\n\n signUpButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", function (): void {\n trackEvent(\"fynd_clicked_sign_up\", window.getTrackingProperties());\n });\n });\n\n signInButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", function (): void {\n trackEvent(\"fynd_clicked_sign_in\", window.getTrackingProperties());\n });\n });\n\n scrollToFormButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", function (): void {\n trackEvent(\"fynd_clicked_scroll_to_form\", window.getTrackingProperties());\n });\n });\n\n bookADemoButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", function (): void {\n trackEvent(\"fynd_clicked_book_a_demo\", window.getTrackingProperties());\n });\n });\n});\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|