@fynd-design-engineering/fynd-one-v2 2.2.11 → 3.0.0

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 +1,153 @@
1
- "use strict";(()=>{var s=(o,e,r)=>{if(console.log("\u{1F50D} Tracking Event:",o),console.log("\u{1F4CA} Properties:",e),window.posthog){console.log("\u2705 PostHog found - sending event");try{window.posthog.capture(o,e),console.log("\u2705 PostHog event sent successfully")}catch(n){console.error("\u274C PostHog error:",n)}}else console.log("\u274C PostHog not found");if(window.gtag){console.log("\u2705 gtag found - sending to GA4");let n=r||o,i={event_category:"fynd_engagement",event_label:e.source_page,custom_source_page:e.source_page,custom_fynd_product:e.fynd_product,custom_interface:e.interface,custom_device_type:e.device_type,custom_utm_source:e.utm_source,custom_utm_medium:e.utm_medium,custom_utm_campaign:e.utm_campaign,custom_referrer:e.referrer,..."form_name"in e&&{custom_form_name:e.form_name}};console.log("\u{1F4E4} GA4 Event Name:",n),console.log("\u{1F4E4} GA4 Payload:",i);try{window.gtag("event",n,i),console.log("\u2705 Event sent to GA4 successfully")}catch(t){console.error("\u274C GA4 error:",t)}}else console.log("\u274C gtag not found - GA4 not loaded"),console.log("Available on window:",Object.keys(window).filter(n=>n.includes("g")));console.log("---")},c=()=>{let o=window.location.pathname,e={source_page:o==="/"?o+" Home":o,fynd_product:"fynd.com website",interface:"Webflow",device_type:/Mobile|Android|iPhone|iPad/.test(navigator.userAgent)?"Mobile":"Web",utm_source:new URLSearchParams(window.location.search).get("utm_source")||"",utm_medium:new URLSearchParams(window.location.search).get("utm_medium")||"",utm_campaign:new URLSearchParams(window.location.search).get("utm_campaign")||"",referrer:document.referrer};return console.log("\u{1F4CB} Generated tracking properties:",e),e},g=o=>{let r={...c(),form_name:o};return console.log("\u{1F4CB} Generated form tracking properties:",r),r};window.getTrackingProperties=c;window.getTrackingPropertiesWithForm=g;window.interactedForm="";document.addEventListener("DOMContentLoaded",function(){console.log("\u{1F680} Debug tracking script loaded");let o=document.createElement("button");o.textContent="Test GA4 Event",o.style.cssText="position:fixed;top:10px;right:10px;z-index:9999;background:red;color:white;padding:10px;border:none;border-radius:4px;cursor:pointer;",o.onclick=function(){console.log("\u{1F9EA} Testing GA4 integration..."),s("fynd_test_event",window.getTrackingProperties())},document.body.appendChild(o),console.log("\u{1F534} Test button added to page")});document.addEventListener("DOMContentLoaded",function(){setTimeout(()=>{console.log("\u{1F50D} === GA4 Integration Diagnostic Report ===");let o=typeof window.gtag;console.log("gtag type:",o),console.log("gtag available:",o!=="undefined");let e=typeof window.posthog;console.log("PostHog type:",e),console.log("PostHog available:",e!=="undefined");let r="dataLayer"in window;console.log("dataLayer exists:",r),r&&console.log("dataLayer length:",window.dataLayer?.length||"undefined");let n=document.querySelectorAll('script[src*="googletagmanager"], script[src*="google-analytics"]');console.log("GA script tags found:",n.length),n.forEach((t,a)=>{console.log(`GA Script ${a+1}:`,t.src)});let i=Object.keys(window).filter(t=>t.toLowerCase().includes("google")||t.toLowerCase().includes("gtag")||t.toLowerCase().includes("ga")||t.toLowerCase().includes("analytics"));if(console.log("GA-related window properties:",i),o==="undefined")console.log("\u274C GA4 (gtag) not loaded. Check your GA4 installation."),console.log("\u{1F4A1} Make sure the Google Analytics script loads before this debug script");else{console.log("\u2705 GA4 (gtag) is loaded and ready");try{window.gtag("config","test"),console.log("\u2705 gtag function is callable")}catch(t){console.log("\u26A0\uFE0F gtag function exists but threw error:",t)}}console.log(e==="undefined"?"\u274C PostHog not loaded":"\u2705 PostHog is loaded and ready"),console.log("=== End Diagnostic Report ==="),setTimeout(()=>{console.log("\u{1F916} Auto-triggering test event..."),s("fynd_auto_test_event",window.getTrackingProperties())},5e3)},2e3)});var l=window.fetch;window.fetch=function(...o){let e=o[0]?.toString()||"";return(e.includes("google-analytics")||e.includes("collect"))&&console.log("\u{1F4E1} GA4 network request detected:",e),l.apply(this,o)};})();
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 +1,74 @@
1
- "use strict";(()=>{var t="form_success_tracking",n=10*60*500;function s(){let e=new URLSearchParams(window.location.search).get("form_name");return e?decodeURIComponent(e):null}function i(r){try{let e=sessionStorage.getItem(t);if(!e)return!1;let o=JSON.parse(e);return Date.now()-o.timestamp>n?(sessionStorage.removeItem(t),!1):o.formName===r}catch(e){return console.error("Error checking form success tracking:",e),sessionStorage.removeItem(t),!1}}function a(r){try{let e={timestamp:Date.now(),formName:r};sessionStorage.setItem(t,JSON.stringify(e))}catch(e){console.error("Error storing form success tracking data:",e)}}document.addEventListener("DOMContentLoaded",function(){let r=s();if(!r){console.log("No form name found in URL parameters");return}if(i(r)){console.log(`Form success for "${r}" already tracked in this session`);return}window.posthog&&window.getTrackingPropertiesWithForm?(window.posthog.capture("fynd_form_success",window.getTrackingPropertiesWithForm(r)),a(r),console.log(`Form success tracked for "${r}"`)):console.warn("PostHog or tracking functions not available")});})();
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 +1,98 @@
1
- "use strict";(()=>{var a=()=>{let e=window.location.pathname;return{source_page:e==="/"?`${e} Home`:e,fynd_product:"fynd.com website",interface:"Webflow",device_type:/Mobile|Android|iPhone|iPad/.test(navigator.userAgent)?"Mobile":"Web",utm_source:new URLSearchParams(window.location.search).get("utm_source")||"",utm_medium:new URLSearchParams(window.location.search).get("utm_medium")||"",utm_campaign:new URLSearchParams(window.location.search).get("utm_campaign")||"",referrer:document.referrer}},d=e=>({...a(),form_name:e}),r=(e,t)=>{window.posthog&&window.posthog.capture(e,t)};window.getTrackingProperties=a;window.getTrackingPropertiesWithForm=d;window.interactedForm="";function m(e){let t=e.closest("form");return t&&t.getAttribute("data-name")||null}document.addEventListener("DOMContentLoaded",function(){let e=window.getTrackingProperties();window.posthog&&window.posthog.capture("$pageview",e)});window.addEventListener("load",function(){r("fynd_page_loaded",window.getTrackingProperties())});document.addEventListener("DOMContentLoaded",function(){let e=document.querySelectorAll('[data-ph="sign-up"]'),t=document.querySelectorAll('[data-ph="sign-in"]'),s=document.querySelectorAll('[href="#footer-form"]'),o=document.querySelectorAll('[data-ph="book-a-demo"]');document.querySelectorAll('[type="submit"]').forEach(n=>{n.addEventListener("click",function(){let c=m(this);setTimeout(()=>{(window.validationPassed=!0)&&r("fynd_form_submitted",window.getTrackingPropertiesWithForm(c||""))},100)})}),e.forEach(n=>{n.addEventListener("click",function(){r("fynd_clicked_sign_up",window.getTrackingProperties())})}),t.forEach(n=>{n.addEventListener("click",function(){r("fynd_clicked_sign_in",window.getTrackingProperties())})}),s.forEach(n=>{n.addEventListener("click",function(){r("fynd_clicked_scroll_to_form",window.getTrackingProperties())})}),o.forEach(n=>{n.addEventListener("click",function(){r("fynd_clicked_book_a_demo",window.getTrackingProperties())})})});document.addEventListener("DOMContentLoaded",function(){let e=document.querySelectorAll("[data-posthog-trigger]"),t=new Set;e.forEach(s=>{s.addEventListener("change",function(){let o=this.closest("form");if(o){if(t.has(o))return null;t.add(o);let i=o.getAttribute("data-name");return window.interactedForm=i||"",i?(r("fynd_form_started",window.getTrackingPropertiesWithForm(i)),i):null}else return null})})});})();
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 +1,7 @@
1
1
  {
2
2
  "version": 3,
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// Track form interactions\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n // Select all form fields with data-posthog-trigger attribute\n const formFields = document.querySelectorAll(\"[data-posthog-trigger]\") as NodeListOf<Element>;\n\n // Keep track of forms that have already been processed\n const processedForms = new Set<HTMLFormElement>();\n\n formFields.forEach((field: Element) => {\n field.addEventListener(\"change\", function (this: Element): string | null {\n // Find the parent form element\n const parentForm = this.closest(\"form\") as HTMLFormElement | null;\n\n if (parentForm) {\n // Check if this form has already been processed\n if (processedForms.has(parentForm)) {\n return null;\n }\n\n // Mark this form as processed\n processedForms.add(parentForm);\n\n // Get the data-name attribute value from the parent form\n const formName = parentForm.getAttribute(\"data-name\");\n window.interactedForm = formName || \"\";\n\n if (formName) {\n trackEvent(\n \"fynd_form_started\",\n window.getTrackingPropertiesWithForm(formName)\n );\n return formName;\n } else {\n return null;\n }\n } else {\n return null;\n }\n });\n });\n});"],
5
- "mappings": "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",
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
6
  "names": []
7
7
  }