@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.
- package/dist/{chunk-PXS2DPVL.js → chunk-MZO7BCGU.js} +8 -4
- package/dist/chunk-MZO7BCGU.js.map +1 -0
- package/dist/{chunk-7KXJLHGA.cjs → chunk-UW2U5BRY.cjs} +8 -4
- package/dist/chunk-UW2U5BRY.cjs.map +1 -0
- package/dist/{client-BWUWE_7m.d.cts → client-CwCSPAHp.d.cts} +1 -1
- package/dist/{client-BWUWE_7m.d.ts → client-CwCSPAHp.d.ts} +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/next/index.d.cts +1 -1
- package/dist/next/index.d.ts +1 -1
- package/dist/{pixel-manager-CJaD49Xb.d.ts → pixel-manager-LiLpBmPy.d.ts} +1 -1
- package/dist/{pixel-manager-BRPU9JKk.d.cts → pixel-manager-ti1xc1eC.d.cts} +1 -1
- package/dist/react/index.cjs +26 -16
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +6 -4
- package/dist/react/index.d.ts +6 -4
- package/dist/react/index.js +25 -15
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-7KXJLHGA.cjs.map +0 -1
- package/dist/chunk-PXS2DPVL.js.map +0 -1
|
@@ -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-
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
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":"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","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-
|
|
160
|
-
//# sourceMappingURL=chunk-
|
|
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
|
|
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
|
|
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-
|
|
2
|
-
export { P as PixelManager } from './pixel-manager-
|
|
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-
|
|
2
|
-
export { P as PixelManager } from './pixel-manager-
|
|
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
package/dist/next/index.d.cts
CHANGED
package/dist/next/index.d.ts
CHANGED
package/dist/react/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
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
|
|
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: () =>
|
|
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: () =>
|
|
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 ",
|