@neowhale/storefront 0.2.45 → 0.2.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -379,7 +379,7 @@ interface QRLandingData {
379
379
  }
380
380
  interface LandingSection {
381
381
  id: string;
382
- type: 'hero' | 'collage_hero' | 'text' | 'image' | 'video' | 'gallery' | 'cta' | 'stats' | 'product_card' | 'coa_viewer' | 'social_links' | 'divider' | 'lead_capture' | 'testimonials' | 'value_stack' | 'faq' | 'trust_badges' | 'countdown' | 'custom';
382
+ type: 'hero' | 'collage_hero' | 'text' | 'image' | 'video' | 'gallery' | 'cta' | 'stats' | 'product_card' | 'coa_viewer' | 'social_links' | 'divider' | 'lead_capture' | 'testimonials' | 'value_stack' | 'faq' | 'trust_badges' | 'countdown' | 'location_card' | 'custom';
383
383
  content: Record<string, unknown>;
384
384
  order: number;
385
385
  config?: Record<string, unknown>;
@@ -379,7 +379,7 @@ interface QRLandingData {
379
379
  }
380
380
  interface LandingSection {
381
381
  id: string;
382
- type: 'hero' | 'collage_hero' | 'text' | 'image' | 'video' | 'gallery' | 'cta' | 'stats' | 'product_card' | 'coa_viewer' | 'social_links' | 'divider' | 'lead_capture' | 'testimonials' | 'value_stack' | 'faq' | 'trust_badges' | 'countdown' | 'custom';
382
+ type: 'hero' | 'collage_hero' | 'text' | 'image' | 'video' | 'gallery' | 'cta' | 'stats' | 'product_card' | 'coa_viewer' | 'social_links' | 'divider' | 'lead_capture' | 'testimonials' | 'value_stack' | 'faq' | 'trust_badges' | 'countdown' | 'location_card' | 'custom';
383
383
  content: Record<string, unknown>;
384
384
  order: number;
385
385
  config?: Record<string, unknown>;
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-D7_7p7ja.cjs';
2
- export { P as PixelManager } from './pixel-manager-Blj8hb-X.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-CiKYpyRa.cjs';
2
+ export { P as PixelManager } from './pixel-manager-DoH7abe_.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-D7_7p7ja.js';
2
- export { P as PixelManager } from './pixel-manager-DB8LLw9V.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-CiKYpyRa.js';
2
+ export { P as PixelManager } from './pixel-manager-DLJ39HCy.js';
3
3
 
4
4
  /**
5
5
  * Resilient HTTP sender for analytics/event payloads.
@@ -1347,6 +1347,179 @@ var WhaleStorefront = (function (exports) {
1347
1347
  ] }, u.label)) })
1348
1348
  ] });
1349
1349
  }
1350
+ var PIN_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>';
1351
+ var BAG_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 01-8 0"/></svg>';
1352
+ var STAR_PATH = "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z";
1353
+ function LocationStars({ rating, count, accent }) {
1354
+ return /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: "0.375rem" }, children: [
1355
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: "2px" }, children: [1, 2, 3, 4, 5].map((s) => /* @__PURE__ */ jsx(
1356
+ "svg",
1357
+ {
1358
+ width: 12,
1359
+ height: 12,
1360
+ viewBox: "0 0 20 20",
1361
+ fill: s <= Math.round(rating) ? accent : "rgba(255,255,255,0.1)",
1362
+ children: /* @__PURE__ */ jsx("path", { d: STAR_PATH })
1363
+ },
1364
+ s
1365
+ )) }),
1366
+ /* @__PURE__ */ jsx("span", { style: { color: "rgba(255,255,255,0.5)", fontSize: "0.75rem", fontWeight: 500 }, children: [
1367
+ rating.toFixed(1),
1368
+ " \xB7 ",
1369
+ count,
1370
+ " reviews"
1371
+ ] })
1372
+ ] });
1373
+ }
1374
+ function LocationCardSection({ section, theme, onEvent }) {
1375
+ const c = section.content;
1376
+ const locations = c.locations || [];
1377
+ if (locations.length === 0) return null;
1378
+ const brandFont = c.brand_font || "inherit";
1379
+ return /* @__PURE__ */ jsx("div", { style: { padding: "0.75rem 1rem", maxWidth: 900, margin: "0 auto" }, children: /* @__PURE__ */ jsx("div", { style: {
1380
+ display: "grid",
1381
+ gridTemplateColumns: locations.length === 1 ? "minmax(0, 420px)" : `repeat(${Math.min(locations.length, 4)}, 1fr)`,
1382
+ gap: "clamp(0.75rem, 2vw, 1rem)",
1383
+ justifyContent: "center"
1384
+ }, children: locations.map((loc, i) => {
1385
+ const dirUrl = loc.directions_url || `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`;
1386
+ return /* @__PURE__ */ jsx("div", { style: {
1387
+ background: "#0C0C0C",
1388
+ border: "1px solid rgba(255,255,255,0.06)",
1389
+ overflow: "hidden",
1390
+ display: "flex",
1391
+ flexDirection: "column"
1392
+ }, children: [
1393
+ /* @__PURE__ */ jsx("div", { style: { position: "relative", aspectRatio: "4/5", overflow: "hidden" }, children: [
1394
+ /* @__PURE__ */ jsx(
1395
+ "img",
1396
+ {
1397
+ src: loc.image,
1398
+ alt: loc.name,
1399
+ style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }
1400
+ }
1401
+ ),
1402
+ /* @__PURE__ */ jsx("div", { style: {
1403
+ position: "absolute",
1404
+ inset: 0,
1405
+ background: "linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)"
1406
+ } }),
1407
+ /* @__PURE__ */ jsx("div", { style: { position: "absolute", bottom: 0, left: 0, padding: "clamp(1rem, 3vw, 1.25rem)" }, children: [
1408
+ /* @__PURE__ */ jsx("p", { style: {
1409
+ fontFamily: brandFont,
1410
+ fontSize: "clamp(1.5rem, 6vw, 1.875rem)",
1411
+ color: "#fff",
1412
+ margin: 0,
1413
+ lineHeight: 1
1414
+ }, children: loc.name }),
1415
+ /* @__PURE__ */ jsx("p", { style: {
1416
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
1417
+ letterSpacing: "0.2em",
1418
+ color: "rgba(255,255,255,0.6)",
1419
+ margin: "0.375rem 0 0",
1420
+ fontWeight: 600,
1421
+ textTransform: "uppercase"
1422
+ }, children: [
1423
+ loc.city,
1424
+ ", ",
1425
+ loc.state
1426
+ ] })
1427
+ ] })
1428
+ ] }),
1429
+ /* @__PURE__ */ jsx("div", { style: {
1430
+ padding: "clamp(0.875rem, 3vw, 1.25rem)",
1431
+ display: "flex",
1432
+ flexDirection: "column",
1433
+ gap: "0.625rem",
1434
+ flex: 1
1435
+ }, children: [
1436
+ loc.tagline && /* @__PURE__ */ jsx("p", { style: { fontSize: "0.8125rem", color: "rgba(255,255,255,0.5)", fontWeight: 500, fontStyle: "italic", margin: 0 }, children: loc.tagline }),
1437
+ loc.rating != null && loc.review_count != null && loc.review_count > 0 && /* @__PURE__ */ jsx(LocationStars, { rating: loc.rating, count: loc.review_count, accent: theme.accent }),
1438
+ loc.address && /* @__PURE__ */ jsx(
1439
+ "a",
1440
+ {
1441
+ href: dirUrl,
1442
+ target: "_blank",
1443
+ rel: "noopener noreferrer",
1444
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none", lineHeight: 1.6 },
1445
+ children: [
1446
+ loc.address,
1447
+ ", ",
1448
+ loc.city,
1449
+ ", ",
1450
+ loc.state
1451
+ ]
1452
+ }
1453
+ ),
1454
+ loc.phone && /* @__PURE__ */ jsx(
1455
+ "a",
1456
+ {
1457
+ href: loc.phone_href || `tel:${loc.phone}`,
1458
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none" },
1459
+ children: loc.phone
1460
+ }
1461
+ ),
1462
+ loc.hours && /* @__PURE__ */ jsx("p", { style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, margin: 0 }, children: loc.hours }),
1463
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: "0.5rem", marginTop: "auto", paddingTop: "0.25rem" }, children: [
1464
+ /* @__PURE__ */ jsx(
1465
+ "a",
1466
+ {
1467
+ href: dirUrl,
1468
+ target: "_blank",
1469
+ rel: "noopener noreferrer",
1470
+ onClick: () => onEvent?.("cta_click", { label: "directions", location: loc.name }),
1471
+ style: {
1472
+ flex: 1,
1473
+ display: "flex",
1474
+ alignItems: "center",
1475
+ justifyContent: "center",
1476
+ gap: "0.375rem",
1477
+ padding: "0.625rem",
1478
+ background: "#fff",
1479
+ color: "#000",
1480
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
1481
+ fontWeight: 700,
1482
+ letterSpacing: "0.1em",
1483
+ textTransform: "uppercase",
1484
+ textDecoration: "none"
1485
+ },
1486
+ children: [
1487
+ /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: PIN_SVG } }),
1488
+ "Directions"
1489
+ ]
1490
+ }
1491
+ ),
1492
+ loc.shop_url && /* @__PURE__ */ jsx(
1493
+ "a",
1494
+ {
1495
+ href: loc.shop_url,
1496
+ onClick: () => onEvent?.("cta_click", { label: "shop", location: loc.name }),
1497
+ style: {
1498
+ flex: 1,
1499
+ display: "flex",
1500
+ alignItems: "center",
1501
+ justifyContent: "center",
1502
+ gap: "0.375rem",
1503
+ padding: "0.625rem",
1504
+ border: "1px solid rgba(255,255,255,0.15)",
1505
+ color: "rgba(255,255,255,0.8)",
1506
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
1507
+ fontWeight: 700,
1508
+ letterSpacing: "0.1em",
1509
+ textTransform: "uppercase",
1510
+ textDecoration: "none"
1511
+ },
1512
+ children: [
1513
+ /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: BAG_SVG } }),
1514
+ "Shop"
1515
+ ]
1516
+ }
1517
+ )
1518
+ ] })
1519
+ ] })
1520
+ ] }, i);
1521
+ }) }) });
1522
+ }
1350
1523
 
1351
1524
  // src/react/components/section-renderer.tsx
1352
1525
  function SectionRenderer({
@@ -1393,6 +1566,8 @@ var WhaleStorefront = (function (exports) {
1393
1566
  return /* @__PURE__ */ jsx(TrustBadgesSection, { section, theme });
1394
1567
  case "countdown":
1395
1568
  return /* @__PURE__ */ jsx(CountdownSection, { section, theme });
1569
+ case "location_card":
1570
+ return /* @__PURE__ */ jsx(LocationCardSection, { section, theme, onEvent });
1396
1571
  case "divider":
1397
1572
  return /* @__PURE__ */ jsx(DividerSection, { theme });
1398
1573
  default:
@@ -1,4 +1,4 @@
1
- import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-D7_7p7ja.cjs';
1
+ import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-CiKYpyRa.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-D7_7p7ja.js';
1
+ import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-CiKYpyRa.js';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { p as PixelConfig } from './client-D7_7p7ja.js';
1
+ import { p as PixelConfig } from './client-CiKYpyRa.js';
2
2
 
3
3
  declare class PixelManager {
4
4
  private providers;
@@ -1,4 +1,4 @@
1
- import { p as PixelConfig } from './client-D7_7p7ja.cjs';
1
+ import { p as PixelConfig } from './client-CiKYpyRa.cjs';
2
2
 
3
3
  declare class PixelManager {
4
4
  private providers;
@@ -3085,6 +3085,179 @@ function CountdownSection({ section, theme }) {
3085
3085
  ] }, u.label)) })
3086
3086
  ] });
3087
3087
  }
3088
+ var PIN_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>';
3089
+ var BAG_SVG = '<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 01-8 0"/></svg>';
3090
+ var STAR_PATH = "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z";
3091
+ function LocationStars({ rating, count, accent }) {
3092
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.375rem" }, children: [
3093
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: "2px" }, children: [1, 2, 3, 4, 5].map((s) => /* @__PURE__ */ jsxRuntime.jsx(
3094
+ "svg",
3095
+ {
3096
+ width: 12,
3097
+ height: 12,
3098
+ viewBox: "0 0 20 20",
3099
+ fill: s <= Math.round(rating) ? accent : "rgba(255,255,255,0.1)",
3100
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: STAR_PATH })
3101
+ },
3102
+ s
3103
+ )) }),
3104
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: "rgba(255,255,255,0.5)", fontSize: "0.75rem", fontWeight: 500 }, children: [
3105
+ rating.toFixed(1),
3106
+ " \xB7 ",
3107
+ count,
3108
+ " reviews"
3109
+ ] })
3110
+ ] });
3111
+ }
3112
+ function LocationCardSection({ section, theme, onEvent }) {
3113
+ const c = section.content;
3114
+ const locations = c.locations || [];
3115
+ if (locations.length === 0) return null;
3116
+ const brandFont = c.brand_font || "inherit";
3117
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "0.75rem 1rem", maxWidth: 900, margin: "0 auto" }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
3118
+ display: "grid",
3119
+ gridTemplateColumns: locations.length === 1 ? "minmax(0, 420px)" : `repeat(${Math.min(locations.length, 4)}, 1fr)`,
3120
+ gap: "clamp(0.75rem, 2vw, 1rem)",
3121
+ justifyContent: "center"
3122
+ }, children: locations.map((loc, i) => {
3123
+ const dirUrl = loc.directions_url || `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(loc.address + ", " + loc.city + ", " + loc.state)}`;
3124
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
3125
+ background: "#0C0C0C",
3126
+ border: "1px solid rgba(255,255,255,0.06)",
3127
+ overflow: "hidden",
3128
+ display: "flex",
3129
+ flexDirection: "column"
3130
+ }, children: [
3131
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "relative", aspectRatio: "4/5", overflow: "hidden" }, children: [
3132
+ /* @__PURE__ */ jsxRuntime.jsx(
3133
+ "img",
3134
+ {
3135
+ src: loc.image,
3136
+ alt: loc.name,
3137
+ style: { width: "100%", height: "100%", objectFit: "cover", display: "block" }
3138
+ }
3139
+ ),
3140
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
3141
+ position: "absolute",
3142
+ inset: 0,
3143
+ background: "linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)"
3144
+ } }),
3145
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "absolute", bottom: 0, left: 0, padding: "clamp(1rem, 3vw, 1.25rem)" }, children: [
3146
+ /* @__PURE__ */ jsxRuntime.jsx("p", { style: {
3147
+ fontFamily: brandFont,
3148
+ fontSize: "clamp(1.5rem, 6vw, 1.875rem)",
3149
+ color: "#fff",
3150
+ margin: 0,
3151
+ lineHeight: 1
3152
+ }, children: loc.name }),
3153
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { style: {
3154
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
3155
+ letterSpacing: "0.2em",
3156
+ color: "rgba(255,255,255,0.6)",
3157
+ margin: "0.375rem 0 0",
3158
+ fontWeight: 600,
3159
+ textTransform: "uppercase"
3160
+ }, children: [
3161
+ loc.city,
3162
+ ", ",
3163
+ loc.state
3164
+ ] })
3165
+ ] })
3166
+ ] }),
3167
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
3168
+ padding: "clamp(0.875rem, 3vw, 1.25rem)",
3169
+ display: "flex",
3170
+ flexDirection: "column",
3171
+ gap: "0.625rem",
3172
+ flex: 1
3173
+ }, children: [
3174
+ loc.tagline && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "0.8125rem", color: "rgba(255,255,255,0.5)", fontWeight: 500, fontStyle: "italic", margin: 0 }, children: loc.tagline }),
3175
+ loc.rating != null && loc.review_count != null && loc.review_count > 0 && /* @__PURE__ */ jsxRuntime.jsx(LocationStars, { rating: loc.rating, count: loc.review_count, accent: theme.accent }),
3176
+ loc.address && /* @__PURE__ */ jsxRuntime.jsxs(
3177
+ "a",
3178
+ {
3179
+ href: dirUrl,
3180
+ target: "_blank",
3181
+ rel: "noopener noreferrer",
3182
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none", lineHeight: 1.6 },
3183
+ children: [
3184
+ loc.address,
3185
+ ", ",
3186
+ loc.city,
3187
+ ", ",
3188
+ loc.state
3189
+ ]
3190
+ }
3191
+ ),
3192
+ loc.phone && /* @__PURE__ */ jsxRuntime.jsx(
3193
+ "a",
3194
+ {
3195
+ href: loc.phone_href || `tel:${loc.phone}`,
3196
+ style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, textDecoration: "none" },
3197
+ children: loc.phone
3198
+ }
3199
+ ),
3200
+ loc.hours && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "0.75rem", color: "rgba(255,255,255,0.35)", fontWeight: 500, margin: 0 }, children: loc.hours }),
3201
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "0.5rem", marginTop: "auto", paddingTop: "0.25rem" }, children: [
3202
+ /* @__PURE__ */ jsxRuntime.jsxs(
3203
+ "a",
3204
+ {
3205
+ href: dirUrl,
3206
+ target: "_blank",
3207
+ rel: "noopener noreferrer",
3208
+ onClick: () => onEvent?.("cta_click", { label: "directions", location: loc.name }),
3209
+ style: {
3210
+ flex: 1,
3211
+ display: "flex",
3212
+ alignItems: "center",
3213
+ justifyContent: "center",
3214
+ gap: "0.375rem",
3215
+ padding: "0.625rem",
3216
+ background: "#fff",
3217
+ color: "#000",
3218
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
3219
+ fontWeight: 700,
3220
+ letterSpacing: "0.1em",
3221
+ textTransform: "uppercase",
3222
+ textDecoration: "none"
3223
+ },
3224
+ children: [
3225
+ /* @__PURE__ */ jsxRuntime.jsx("span", { dangerouslySetInnerHTML: { __html: PIN_SVG } }),
3226
+ "Directions"
3227
+ ]
3228
+ }
3229
+ ),
3230
+ loc.shop_url && /* @__PURE__ */ jsxRuntime.jsxs(
3231
+ "a",
3232
+ {
3233
+ href: loc.shop_url,
3234
+ onClick: () => onEvent?.("cta_click", { label: "shop", location: loc.name }),
3235
+ style: {
3236
+ flex: 1,
3237
+ display: "flex",
3238
+ alignItems: "center",
3239
+ justifyContent: "center",
3240
+ gap: "0.375rem",
3241
+ padding: "0.625rem",
3242
+ border: "1px solid rgba(255,255,255,0.15)",
3243
+ color: "rgba(255,255,255,0.8)",
3244
+ fontSize: "clamp(0.65rem, 1.5vw, 0.75rem)",
3245
+ fontWeight: 700,
3246
+ letterSpacing: "0.1em",
3247
+ textTransform: "uppercase",
3248
+ textDecoration: "none"
3249
+ },
3250
+ children: [
3251
+ /* @__PURE__ */ jsxRuntime.jsx("span", { dangerouslySetInnerHTML: { __html: BAG_SVG } }),
3252
+ "Shop"
3253
+ ]
3254
+ }
3255
+ )
3256
+ ] })
3257
+ ] })
3258
+ ] }, i);
3259
+ }) }) });
3260
+ }
3088
3261
  function SectionRenderer({
3089
3262
  section,
3090
3263
  data,
@@ -3129,6 +3302,8 @@ function SectionRenderer({
3129
3302
  return /* @__PURE__ */ jsxRuntime.jsx(TrustBadgesSection, { section, theme });
3130
3303
  case "countdown":
3131
3304
  return /* @__PURE__ */ jsxRuntime.jsx(CountdownSection, { section, theme });
3305
+ case "location_card":
3306
+ return /* @__PURE__ */ jsxRuntime.jsx(LocationCardSection, { section, theme, onEvent });
3132
3307
  case "divider":
3133
3308
  return /* @__PURE__ */ jsxRuntime.jsx(DividerSection, { theme });
3134
3309
  default: