@neowhale/storefront 0.2.28 → 0.2.29

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.
@@ -7,7 +7,9 @@ var EVENT_MAP = {
7
7
  begin_checkout: "InitiateCheckout",
8
8
  purchase: "Purchase",
9
9
  search: "Search",
10
- category_view: "ViewContent"
10
+ category_view: "ViewContent",
11
+ lead: "Lead",
12
+ cta_click: "ViewContent"
11
13
  };
12
14
  var MetaPixelProvider = class {
13
15
  constructor(pixelId) {
@@ -71,7 +73,9 @@ var EVENT_MAP2 = {
71
73
  begin_checkout: "begin_checkout",
72
74
  purchase: "purchase",
73
75
  search: "search",
74
- category_view: "view_item_list"
76
+ category_view: "view_item_list",
77
+ lead: "generate_lead",
78
+ cta_click: "select_content"
75
79
  };
76
80
  var GooglePixelProvider = class {
77
81
  constructor(measurementId) {
@@ -154,5 +158,5 @@ var PixelManager = class {
154
158
  };
155
159
 
156
160
  export { PixelManager };
157
- //# sourceMappingURL=chunk-PXS2DPVL.js.map
158
- //# sourceMappingURL=chunk-PXS2DPVL.js.map
161
+ //# sourceMappingURL=chunk-MZO7BCGU.js.map
162
+ //# sourceMappingURL=chunk-MZO7BCGU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pixels/meta-pixel.ts","../src/pixels/google-pixel.ts","../src/pixels/pixel-manager.ts"],"names":["EVENT_MAP"],"mappings":";AAGA,IAAM,SAAA,GAAoC;AAAA,EACxC,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,aAAA;AAAA,EACd,WAAA,EAAa,WAAA;AAAA,EACb,gBAAA,EAAkB,gBAAA;AAAA,EAClB,cAAA,EAAgB,kBAAA;AAAA,EAChB,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,QAAA;AAAA,EACR,aAAA,EAAe,aAAA;AAAA,EACf,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW;AACb,CAAA;AAEO,IAAM,oBAAN,MAAiD;AAAA,EAKtD,YAAY,OAAA,EAAiB;AAJ7B,IAAA,IAAA,CAAS,IAAA,GAAO,MAAA;AAEhB,IAAA,IAAA,CAAQ,MAAA,GAAS,KAAA;AAGf,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,IAAI,KAAK,MAAA,EAAQ;AAGjB,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,IAAI,CAAC,EAAE,GAAA,EAAK;AACV,MAAA,MAAM,CAAA,GAAU,CAAA,CAAE,GAAA,GAAM,SAAA,GAAa,IAAA,EAAa;AAChD,QAAA,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,MAChE,CAAA;AACA,MAAA,IAAI,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,IAAA,GAAO,CAAA;AACtB,MAAA,CAAA,CAAE,IAAA,GAAO,CAAA;AACT,MAAA,CAAA,CAAE,MAAA,GAAS,IAAA;AACX,MAAA,CAAA,CAAE,OAAA,GAAU,KAAA;AACZ,MAAA,CAAA,CAAE,QAAQ,EAAC;AAAA,IACb;AAGA,IAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,gDAAA;AACb,MAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,EAAQ;AAC9B,MAAA,MAAA,CAAO,OAAA,GAAU,MAAM,OAAA,EAAQ;AAC/B,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,oBAAA,CAAqB,QAAQ,EAAE,CAAC,CAAA;AACvD,MAAA,KAAA,EAAO,UAAA,EAAY,YAAA,CAAa,MAAA,EAAQ,KAAK,CAAA;AAAA,IAC/C,CAAC,CAAA;AAED,IAAA,CAAA,CAAE,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA;AAC1B,IAAA,CAAA,CAAE,GAAA,CAAI,SAAS,UAAU,CAAA;AACzB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EAEA,KAAA,CAAM,OAAe,MAAA,EAAwC;AAC3D,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,IAAI,OAAO,CAAA,CAAE,GAAA,KAAQ,UAAA,EAAY;AAEjC,IAAA,MAAM,SAAA,GAAY,UAAU,KAAK,CAAA;AACjC,IAAA,IAAI,CAAC,SAAA,EAAW;AAGhB,IAAA,MAAM,EAAE,OAAA,EAAS,GAAG,IAAA,EAAK,GAAI,UAAU,EAAC;AACxC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,IAAI,EAAE,MAAA,GAAS,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,OAAA,GAAU,EAAE,OAAA,EAAQ,GAAI,MAAA;AAExC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,CAAA,CAAE,GAAA,CAAI,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,CAAA,CAAE,GAAA,CAAI,OAAA,EAAS,SAAA,EAAW,IAAI,OAAO,CAAA;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,QAAA,GAAoB;AAClB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AACF,CAAA;;;AC9EA,IAAMA,UAAAA,GAAoC;AAAA,EACxC,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc,WAAA;AAAA,EACd,WAAA,EAAa,aAAA;AAAA,EACb,gBAAA,EAAkB,kBAAA;AAAA,EAClB,cAAA,EAAgB,gBAAA;AAAA,EAChB,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,QAAA;AAAA,EACR,aAAA,EAAe,gBAAA;AAAA,EACf,IAAA,EAAM,eAAA;AAAA,EACN,SAAA,EAAW;AACb,CAAA;AAEO,IAAM,sBAAN,MAAmD;AAAA,EAKxD,YAAY,aAAA,EAAuB;AAJnC,IAAA,IAAA,CAAS,IAAA,GAAO,QAAA;AAEhB,IAAA,IAAA,CAAQ,MAAA,GAAS,KAAA;AAGf,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,IAAI,KAAK,MAAA,EAAQ;AAEjB,IAAA,MAAM,CAAA,GAAI,MAAA;AAGV,IAAA,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAA,IAAa,EAAC;AAC9B,IAAA,IAAI,CAAC,EAAE,IAAA,EAAM;AACX,MAAA,CAAA,CAAE,IAAA,GAAO,YAAa,IAAA,EAAa;AACjC,QAAA,CAAA,CAAE,SAAA,CAAU,KAAK,SAAS,CAAA;AAAA,MAC5B,CAAA;AACA,MAAA,CAAA,CAAE,IAAA,CAAK,IAAA,kBAAM,IAAI,IAAA,EAAM,CAAA;AACvB,MAAA,CAAA,CAAE,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,aAAa,CAAA;AAAA,IACrC;AAGA,IAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AACf,MAAA,MAAA,CAAO,GAAA,GAAM,CAAA,4CAAA,EAA+C,IAAA,CAAK,aAAa,CAAA,CAAA;AAC9E,MAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,EAAQ;AAC9B,MAAA,MAAA,CAAO,OAAA,GAAU,MAAM,OAAA,EAAQ;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,IAClC,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EAEA,KAAA,CAAM,OAAe,MAAA,EAAwC;AAC3D,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,CAAA,GAAI,MAAA;AACV,IAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY;AAElC,IAAA,MAAM,QAAA,GAAWA,WAAU,KAAK,CAAA;AAChC,IAAA,IAAI,CAAC,QAAA,EAAU;AAGf,IAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAY,cAAc,QAAA,EAAU,KAAA,EAAO,MAAM,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,OAAA,EAAS,YAAY,KAAA,EAAO,YAAA,EAAc,GAAG,IAAA,EAAK,GAAI,UAAU,EAAC;AAElK,IAAA,MAAM,SAAA,GAAqC,EAAE,GAAG,IAAA,EAAK;AAErD,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,SAAA,CAAU,KAAA,GAAQ,KAAA;AAC3C,IAAA,IAAI,QAAA,YAAoB,cAAA,GAAiB,QAAA;AACzC,IAAA,IAAI,KAAA,YAAiB,WAAA,GAAc,KAAA;AAGnC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,SAAA,CAAU,QAAQ,CAAC;AAAA,QACjB,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAW,YAAA;AAAA,QACX,UAAU,QAAA,IAAY,CAAA;AAAA,QACtB,KAAA;AAAA,QACA,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAEA,IAAA,SAAA,CAAU,QAAA,GAAW,KAAA;AAErB,IAAA,CAAA,CAAE,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU,SAAS,CAAA;AAAA,EACrC;AAAA,EAEA,QAAA,GAAoB;AAClB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AACF,CAAA;;;ACtFO,IAAM,eAAN,MAAmB;AAAA,EAGxB,YAAY,OAAA,EAAwB;AAFpC,IAAA,IAAA,CAAQ,YAA6B,EAAC;AAGpC,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,MAAA,CAAO,QAAA,KAAa,MAAA,IAAU,MAAA,CAAO,QAAA,EAAU;AACjD,QAAA,IAAA,CAAK,UAAU,IAAA,CAAK,IAAI,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAW,MAAA,CAAO,QAAA,KAAa,QAAA,IAAY,OAAO,cAAA,EAAgB;AAChE,QAAA,IAAA,CAAK,UAAU,IAAA,CAAK,IAAI,mBAAA,CAAoB,MAAA,CAAO,cAAc,CAAC,CAAA;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,GAA4B;AAChC,IAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAAA,EACvD;AAAA,EAEA,KAAA,CAAM,OAAe,MAAA,EAAwC;AAC3D,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,SAAA,EAAW;AACrC,MAAA,IAAI,QAAA,CAAS,UAAS,EAAG;AACvB,QAAA,QAAA,CAAS,KAAA,CAAM,OAAO,MAAM,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACF","file":"chunk-MZO7BCGU.js","sourcesContent":["import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → Meta standard event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'PageView',\n product_view: 'ViewContent',\n add_to_cart: 'AddToCart',\n remove_from_cart: 'RemoveFromCart',\n begin_checkout: 'InitiateCheckout',\n purchase: 'Purchase',\n search: 'Search',\n category_view: 'ViewContent',\n lead: 'Lead',\n cta_click: 'ViewContent',\n}\n\nexport class MetaPixelProvider implements PixelProvider {\n readonly name = 'meta'\n private pixelId: string\n private loaded = false\n\n constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n // Initialize fbq queue\n const w = window as any\n if (!w.fbq) {\n const n: any = (w.fbq = function (...args: any[]) {\n n.callMethod ? n.callMethod.apply(n, args) : n.queue.push(args)\n })\n if (!w._fbq) w._fbq = n\n n.push = n\n n.loaded = true\n n.version = '2.0'\n n.queue = []\n }\n\n // Inject script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = 'https://connect.facebook.net/en_US/fbevents.js'\n script.onload = () => resolve()\n script.onerror = () => resolve() // don't block on load failure\n const first = document.getElementsByTagName('script')[0]\n first?.parentNode?.insertBefore(script, first)\n })\n\n w.fbq('init', this.pixelId)\n w.fbq('track', 'PageView')\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.fbq !== 'function') return\n\n const metaEvent = EVENT_MAP[event]\n if (!metaEvent) return\n\n // Extract eventID for Meta dedup (fbq 4th arg), pass remaining as event params\n const { eventID, ...rest } = params ?? {}\n const hasParams = Object.keys(rest).length > 0\n const options = eventID ? { eventID } : undefined\n\n if (hasParams) {\n w.fbq('track', metaEvent, rest, options)\n } else {\n w.fbq('track', metaEvent, {}, options)\n }\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → GA4 recommended event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'page_view',\n product_view: 'view_item',\n add_to_cart: 'add_to_cart',\n remove_from_cart: 'remove_from_cart',\n begin_checkout: 'begin_checkout',\n purchase: 'purchase',\n search: 'search',\n category_view: 'view_item_list',\n lead: 'generate_lead',\n cta_click: 'select_content',\n}\n\nexport class GooglePixelProvider implements PixelProvider {\n readonly name = 'google'\n private measurementId: string\n private loaded = false\n\n constructor(measurementId: string) {\n this.measurementId = measurementId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n const w = window as any\n\n // Initialize dataLayer\n w.dataLayer = w.dataLayer || []\n if (!w.gtag) {\n w.gtag = function (...args: any[]) {\n w.dataLayer.push(arguments)\n }\n w.gtag('js', new Date())\n w.gtag('config', this.measurementId)\n }\n\n // Inject gtag.js script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = `https://www.googletagmanager.com/gtag/js?id=${this.measurementId}`\n script.onload = () => resolve()\n script.onerror = () => resolve()\n document.head.appendChild(script)\n })\n\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.gtag !== 'function') return\n\n const ga4Event = EVENT_MAP[event]\n if (!ga4Event) return\n\n // Strip eventID (Meta-specific), map to GA4 params\n const { eventID, product_id, product_name, quantity, price, tier, total, order_id, order_number, cart_id, item_count, query, result_count, ...rest } = params ?? {}\n\n const ga4Params: Record<string, unknown> = { ...rest }\n\n if (total !== undefined) ga4Params.value = total\n if (order_id) ga4Params.transaction_id = order_id\n if (query) ga4Params.search_term = query\n\n // Build items array for e-commerce events\n if (product_id) {\n ga4Params.items = [{\n item_id: product_id,\n item_name: product_name,\n quantity: quantity ?? 1,\n price,\n item_variant: tier,\n }]\n }\n\n ga4Params.currency = 'USD'\n\n w.gtag('event', ga4Event, ga4Params)\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelConfig, PixelProvider } from './types.js'\nimport { MetaPixelProvider } from './meta-pixel.js'\nimport { GooglePixelProvider } from './google-pixel.js'\n\nexport class PixelManager {\n private providers: PixelProvider[] = []\n\n constructor(configs: PixelConfig[]) {\n for (const config of configs) {\n if (config.provider === 'meta' && config.pixel_id) {\n this.providers.push(new MetaPixelProvider(config.pixel_id))\n } else if (config.provider === 'google' && config.measurement_id) {\n this.providers.push(new GooglePixelProvider(config.measurement_id))\n }\n }\n }\n\n async initialize(): Promise<void> {\n await Promise.all(this.providers.map((p) => p.load()))\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n for (const provider of this.providers) {\n if (provider.isLoaded()) {\n provider.track(event, params)\n }\n }\n }\n}\n"]}
@@ -9,7 +9,9 @@ var EVENT_MAP = {
9
9
  begin_checkout: "InitiateCheckout",
10
10
  purchase: "Purchase",
11
11
  search: "Search",
12
- category_view: "ViewContent"
12
+ category_view: "ViewContent",
13
+ lead: "Lead",
14
+ cta_click: "ViewContent"
13
15
  };
14
16
  var MetaPixelProvider = class {
15
17
  constructor(pixelId) {
@@ -73,7 +75,9 @@ var EVENT_MAP2 = {
73
75
  begin_checkout: "begin_checkout",
74
76
  purchase: "purchase",
75
77
  search: "search",
76
- category_view: "view_item_list"
78
+ category_view: "view_item_list",
79
+ lead: "generate_lead",
80
+ cta_click: "select_content"
77
81
  };
78
82
  var GooglePixelProvider = class {
79
83
  constructor(measurementId) {
@@ -156,5 +160,5 @@ var PixelManager = class {
156
160
  };
157
161
 
158
162
  exports.PixelManager = PixelManager;
159
- //# sourceMappingURL=chunk-7KXJLHGA.cjs.map
160
- //# sourceMappingURL=chunk-7KXJLHGA.cjs.map
163
+ //# sourceMappingURL=chunk-UW2U5BRY.cjs.map
164
+ //# sourceMappingURL=chunk-UW2U5BRY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pixels/meta-pixel.ts","../src/pixels/google-pixel.ts","../src/pixels/pixel-manager.ts"],"names":["EVENT_MAP"],"mappings":"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","file":"chunk-UW2U5BRY.cjs","sourcesContent":["import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → Meta standard event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'PageView',\n product_view: 'ViewContent',\n add_to_cart: 'AddToCart',\n remove_from_cart: 'RemoveFromCart',\n begin_checkout: 'InitiateCheckout',\n purchase: 'Purchase',\n search: 'Search',\n category_view: 'ViewContent',\n lead: 'Lead',\n cta_click: 'ViewContent',\n}\n\nexport class MetaPixelProvider implements PixelProvider {\n readonly name = 'meta'\n private pixelId: string\n private loaded = false\n\n constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n // Initialize fbq queue\n const w = window as any\n if (!w.fbq) {\n const n: any = (w.fbq = function (...args: any[]) {\n n.callMethod ? n.callMethod.apply(n, args) : n.queue.push(args)\n })\n if (!w._fbq) w._fbq = n\n n.push = n\n n.loaded = true\n n.version = '2.0'\n n.queue = []\n }\n\n // Inject script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = 'https://connect.facebook.net/en_US/fbevents.js'\n script.onload = () => resolve()\n script.onerror = () => resolve() // don't block on load failure\n const first = document.getElementsByTagName('script')[0]\n first?.parentNode?.insertBefore(script, first)\n })\n\n w.fbq('init', this.pixelId)\n w.fbq('track', 'PageView')\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.fbq !== 'function') return\n\n const metaEvent = EVENT_MAP[event]\n if (!metaEvent) return\n\n // Extract eventID for Meta dedup (fbq 4th arg), pass remaining as event params\n const { eventID, ...rest } = params ?? {}\n const hasParams = Object.keys(rest).length > 0\n const options = eventID ? { eventID } : undefined\n\n if (hasParams) {\n w.fbq('track', metaEvent, rest, options)\n } else {\n w.fbq('track', metaEvent, {}, options)\n }\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → GA4 recommended event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'page_view',\n product_view: 'view_item',\n add_to_cart: 'add_to_cart',\n remove_from_cart: 'remove_from_cart',\n begin_checkout: 'begin_checkout',\n purchase: 'purchase',\n search: 'search',\n category_view: 'view_item_list',\n lead: 'generate_lead',\n cta_click: 'select_content',\n}\n\nexport class GooglePixelProvider implements PixelProvider {\n readonly name = 'google'\n private measurementId: string\n private loaded = false\n\n constructor(measurementId: string) {\n this.measurementId = measurementId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n const w = window as any\n\n // Initialize dataLayer\n w.dataLayer = w.dataLayer || []\n if (!w.gtag) {\n w.gtag = function (...args: any[]) {\n w.dataLayer.push(arguments)\n }\n w.gtag('js', new Date())\n w.gtag('config', this.measurementId)\n }\n\n // Inject gtag.js script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = `https://www.googletagmanager.com/gtag/js?id=${this.measurementId}`\n script.onload = () => resolve()\n script.onerror = () => resolve()\n document.head.appendChild(script)\n })\n\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.gtag !== 'function') return\n\n const ga4Event = EVENT_MAP[event]\n if (!ga4Event) return\n\n // Strip eventID (Meta-specific), map to GA4 params\n const { eventID, product_id, product_name, quantity, price, tier, total, order_id, order_number, cart_id, item_count, query, result_count, ...rest } = params ?? {}\n\n const ga4Params: Record<string, unknown> = { ...rest }\n\n if (total !== undefined) ga4Params.value = total\n if (order_id) ga4Params.transaction_id = order_id\n if (query) ga4Params.search_term = query\n\n // Build items array for e-commerce events\n if (product_id) {\n ga4Params.items = [{\n item_id: product_id,\n item_name: product_name,\n quantity: quantity ?? 1,\n price,\n item_variant: tier,\n }]\n }\n\n ga4Params.currency = 'USD'\n\n w.gtag('event', ga4Event, ga4Params)\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelConfig, PixelProvider } from './types.js'\nimport { MetaPixelProvider } from './meta-pixel.js'\nimport { GooglePixelProvider } from './google-pixel.js'\n\nexport class PixelManager {\n private providers: PixelProvider[] = []\n\n constructor(configs: PixelConfig[]) {\n for (const config of configs) {\n if (config.provider === 'meta' && config.pixel_id) {\n this.providers.push(new MetaPixelProvider(config.pixel_id))\n } else if (config.provider === 'google' && config.measurement_id) {\n this.providers.push(new GooglePixelProvider(config.measurement_id))\n }\n }\n }\n\n async initialize(): Promise<void> {\n await Promise.all(this.providers.map((p) => p.load()))\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n for (const provider of this.providers) {\n if (provider.isLoaded()) {\n provider.track(event, params)\n }\n }\n }\n}\n"]}
@@ -331,7 +331,7 @@ interface WhaleStorefrontConfig {
331
331
  */
332
332
  recordingRate?: number;
333
333
  }
334
- type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search';
334
+ type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search' | 'lead' | 'cta_click';
335
335
  interface QRLandingPage {
336
336
  title: string | null;
337
337
  description: string | null;
@@ -331,7 +331,7 @@ interface WhaleStorefrontConfig {
331
331
  */
332
332
  recordingRate?: number;
333
333
  }
334
- type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search';
334
+ type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search' | 'lead' | 'cta_click';
335
335
  interface QRLandingPage {
336
336
  title: string | null;
337
337
  description: string | null;
package/dist/index.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunk7KXJLHGA_cjs = require('./chunk-7KXJLHGA.cjs');
3
+ var chunkUW2U5BRY_cjs = require('./chunk-UW2U5BRY.cjs');
4
4
  var chunkV5KCIYKG_cjs = require('./chunk-V5KCIYKG.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "PixelManager", {
9
9
  enumerable: true,
10
- get: function () { return chunk7KXJLHGA_cjs.PixelManager; }
10
+ get: function () { return chunkUW2U5BRY_cjs.PixelManager; }
11
11
  });
12
12
  Object.defineProperty(exports, "WhaleClient", {
13
13
  enumerable: true,
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-BWUWE_7m.cjs';
2
- export { P as PixelManager } from './pixel-manager-BRPU9JKk.cjs';
1
+ export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-CwCSPAHp.cjs';
2
+ export { P as PixelManager } from './pixel-manager-ti1xc1eC.cjs';
3
3
 
4
4
  /**
5
5
  * Resilient HTTP sender for analytics/event payloads.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-BWUWE_7m.js';
2
- export { P as PixelManager } from './pixel-manager-CJaD49Xb.js';
1
+ export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-CwCSPAHp.js';
2
+ export { P as PixelManager } from './pixel-manager-LiLpBmPy.js';
3
3
 
4
4
  /**
5
5
  * Resilient HTTP sender for analytics/event payloads.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { PixelManager } from './chunk-PXS2DPVL.js';
1
+ export { PixelManager } from './chunk-MZO7BCGU.js';
2
2
  export { WhaleClient, resilientSend } from './chunk-WNZOA4FB.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-BWUWE_7m.cjs';
1
+ import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-CwCSPAHp.cjs';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-BWUWE_7m.js';
1
+ import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-CwCSPAHp.js';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { p as PixelConfig } from './client-BWUWE_7m.js';
1
+ import { p as PixelConfig } from './client-CwCSPAHp.js';
2
2
 
3
3
  declare class PixelManager {
4
4
  private providers;
@@ -1,4 +1,4 @@
1
- import { p as PixelConfig } from './client-BWUWE_7m.cjs';
1
+ import { p as PixelConfig } from './client-CwCSPAHp.cjs';
2
2
 
3
3
  declare class PixelManager {
4
4
  private providers;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk7KXJLHGA_cjs = require('../chunk-7KXJLHGA.cjs');
3
+ var chunkUW2U5BRY_cjs = require('../chunk-UW2U5BRY.cjs');
4
4
  var chunkV5KCIYKG_cjs = require('../chunk-V5KCIYKG.cjs');
5
5
  var react = require('react');
6
6
  var navigation = require('next/navigation');
@@ -674,7 +674,7 @@ function PixelInitializer({ onReady, onTheme }) {
674
674
  onTheme(config.theme);
675
675
  }
676
676
  if (ctx.config.trackingEnabled && config.pixels && config.pixels.length > 0) {
677
- const manager = new chunk7KXJLHGA_cjs.PixelManager(config.pixels);
677
+ const manager = new chunkUW2U5BRY_cjs.PixelManager(config.pixels);
678
678
  await manager.initialize();
679
679
  onReady(manager);
680
680
  }
@@ -2468,13 +2468,14 @@ function SectionRenderer({
2468
2468
  section,
2469
2469
  data,
2470
2470
  theme,
2471
- tracking
2471
+ tracking,
2472
+ onEvent
2472
2473
  }) {
2473
2474
  const [showCOA, setShowCOA] = react.useState(false);
2474
2475
  const el = (() => {
2475
2476
  switch (section.type) {
2476
2477
  case "hero":
2477
- return /* @__PURE__ */ jsxRuntime.jsx(HeroSection, { section, theme, tracking });
2478
+ return /* @__PURE__ */ jsxRuntime.jsx(HeroSection, { section, theme, tracking, onEvent });
2478
2479
  case "text":
2479
2480
  return /* @__PURE__ */ jsxRuntime.jsx(TextSection, { section, theme });
2480
2481
  case "image":
@@ -2484,7 +2485,7 @@ function SectionRenderer({
2484
2485
  case "gallery":
2485
2486
  return /* @__PURE__ */ jsxRuntime.jsx(GallerySection, { section, theme });
2486
2487
  case "cta":
2487
- return /* @__PURE__ */ jsxRuntime.jsx(CTASection, { section, theme, tracking });
2488
+ return /* @__PURE__ */ jsxRuntime.jsx(CTASection, { section, theme, tracking, onEvent });
2488
2489
  case "stats":
2489
2490
  return /* @__PURE__ */ jsxRuntime.jsx(StatsSection, { section, theme });
2490
2491
  case "product_card":
@@ -2494,7 +2495,7 @@ function SectionRenderer({
2494
2495
  case "social_links":
2495
2496
  return /* @__PURE__ */ jsxRuntime.jsx(SocialLinksSection, { section, theme });
2496
2497
  case "lead_capture":
2497
- return /* @__PURE__ */ jsxRuntime.jsx(LeadCaptureSection, { section, data, theme });
2498
+ return /* @__PURE__ */ jsxRuntime.jsx(LeadCaptureSection, { section, data, theme, onEvent });
2498
2499
  case "divider":
2499
2500
  return /* @__PURE__ */ jsxRuntime.jsx(DividerSection, { theme });
2500
2501
  default:
@@ -2506,7 +2507,7 @@ function SectionRenderer({
2506
2507
  showCOA && data?.coa && /* @__PURE__ */ jsxRuntime.jsx(COAModal, { coa: data.coa, theme, onClose: () => setShowCOA(false) })
2507
2508
  ] });
2508
2509
  }
2509
- function HeroSection({ section, theme, tracking }) {
2510
+ function HeroSection({ section, theme, tracking, onEvent }) {
2510
2511
  const { title, subtitle, background_image, cta_text, cta_url } = section.content;
2511
2512
  return /* @__PURE__ */ jsxRuntime.jsxs(
2512
2513
  "div",
@@ -2548,7 +2549,10 @@ function HeroSection({ section, theme, tracking }) {
2548
2549
  "a",
2549
2550
  {
2550
2551
  href: cta_url,
2551
- onClick: () => trackClick(tracking, cta_text, cta_url),
2552
+ onClick: () => {
2553
+ trackClick(tracking, cta_text, cta_url);
2554
+ onEvent?.("cta_click", { label: cta_text, url: cta_url });
2555
+ },
2552
2556
  style: {
2553
2557
  display: "inline-block",
2554
2558
  padding: "0.875rem 2rem",
@@ -2634,7 +2638,7 @@ function GallerySection({ section, theme }) {
2634
2638
  }
2635
2639
  ) }, i)) }) });
2636
2640
  }
2637
- function CTASection({ section, theme, tracking }) {
2641
+ function CTASection({ section, theme, tracking, onEvent }) {
2638
2642
  const { title, subtitle, buttons } = section.content;
2639
2643
  if (!buttons || buttons.length === 0) return null;
2640
2644
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { padding: "2rem 1.5rem", maxWidth: 480, margin: "0 auto", display: "flex", flexDirection: "column", gap: "0.75rem" }, children: [
@@ -2663,7 +2667,10 @@ function CTASection({ section, theme, tracking }) {
2663
2667
  "a",
2664
2668
  {
2665
2669
  href: btn.url,
2666
- onClick: () => trackClick(tracking, btn.text, btn.url, i),
2670
+ onClick: () => {
2671
+ trackClick(tracking, btn.text, btn.url, i);
2672
+ onEvent?.("cta_click", { label: btn.text, url: btn.url });
2673
+ },
2667
2674
  style: {
2668
2675
  display: "block",
2669
2676
  width: "100%",
@@ -2818,7 +2825,7 @@ function COAViewerSection({
2818
2825
  onShowCOA();
2819
2826
  }, style: buttonStyle, children: buttonLabel }) });
2820
2827
  }
2821
- function LeadCaptureSection({ section, data, theme }) {
2828
+ function LeadCaptureSection({ section, data, theme, onEvent }) {
2822
2829
  const c = section.content;
2823
2830
  const [firstName, setFirstName] = react.useState("");
2824
2831
  const [email, setEmail] = react.useState("");
@@ -2855,6 +2862,7 @@ function LeadCaptureSection({ section, data, theme }) {
2855
2862
  throw new Error(body?.error?.message || "Something went wrong. Please try again.");
2856
2863
  }
2857
2864
  setStatus("success");
2865
+ onEvent?.("lead", { email, first_name: firstName || void 0, source: c.source || "landing_page", landing_page_slug: slug || void 0 });
2858
2866
  } catch (err) {
2859
2867
  setErrorMsg(err instanceof Error ? err.message : "Something went wrong. Please try again.");
2860
2868
  setStatus("error");
@@ -3391,7 +3399,8 @@ function LandingPage({
3391
3399
  gatewayUrl = "https://whale-gateway.fly.dev",
3392
3400
  renderSection,
3393
3401
  onDataLoaded,
3394
- onError
3402
+ onError,
3403
+ onEvent
3395
3404
  }) {
3396
3405
  const [state, setState] = react.useState("loading");
3397
3406
  const [data, setData] = react.useState(null);
@@ -3439,12 +3448,13 @@ function LandingPage({
3439
3448
  if (state === "expired") return /* @__PURE__ */ jsxRuntime.jsx(DefaultExpired2, {});
3440
3449
  if (state === "error") return /* @__PURE__ */ jsxRuntime.jsx(DefaultError2, { message: errorMsg });
3441
3450
  if (!data) return null;
3442
- return /* @__PURE__ */ jsxRuntime.jsx(PageLayout, { data, gatewayUrl, renderSection });
3451
+ return /* @__PURE__ */ jsxRuntime.jsx(PageLayout, { data, gatewayUrl, renderSection, onEvent });
3443
3452
  }
3444
3453
  function PageLayout({
3445
3454
  data,
3446
3455
  gatewayUrl,
3447
- renderSection
3456
+ renderSection,
3457
+ onEvent
3448
3458
  }) {
3449
3459
  const { landing_page: lp, store } = data;
3450
3460
  const theme = {
@@ -3464,11 +3474,11 @@ function PageLayout({
3464
3474
  lp.custom_css && /* @__PURE__ */ jsxRuntime.jsx("style", { children: lp.custom_css }),
3465
3475
  logoUrl && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "1.5rem", display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: logoUrl, alt: store?.name || "Store", style: { height: 40, objectFit: "contain" } }) }),
3466
3476
  sorted.map((section) => {
3467
- const defaultRenderer = () => /* @__PURE__ */ jsxRuntime.jsx(SectionRenderer, { section, data: sectionData, theme }, section.id);
3477
+ const defaultRenderer = () => /* @__PURE__ */ jsxRuntime.jsx(SectionRenderer, { section, data: sectionData, theme, onEvent }, section.id);
3468
3478
  if (renderSection) {
3469
3479
  return /* @__PURE__ */ jsxRuntime.jsx("div", { children: renderSection(section, defaultRenderer) }, section.id);
3470
3480
  }
3471
- return /* @__PURE__ */ jsxRuntime.jsx(SectionRenderer, { section, data: sectionData, theme }, section.id);
3481
+ return /* @__PURE__ */ jsxRuntime.jsx(SectionRenderer, { section, data: sectionData, theme, onEvent }, section.id);
3472
3482
  }),
3473
3483
  store?.name && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "2rem 1.5rem", borderTop: `1px solid ${theme.surface}`, textAlign: "center" }, children: /* @__PURE__ */ jsxRuntime.jsxs("p", { style: { fontSize: "0.75rem", color: theme.muted, margin: 0 }, children: [
3474
3484
  "Powered by ",