pb-sxp-ui 1.20.28 → 1.20.30

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.
Files changed (33) hide show
  1. package/dist/index.cjs +204 -50
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +204 -50
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.min.cjs +9 -9
  6. package/dist/index.min.cjs.map +1 -1
  7. package/dist/index.min.js +9 -9
  8. package/dist/index.min.js.map +1 -1
  9. package/dist/pb-ui.js +204 -50
  10. package/dist/pb-ui.js.map +1 -1
  11. package/dist/pb-ui.min.js +9 -9
  12. package/dist/pb-ui.min.js.map +1 -1
  13. package/es/core/components/StructurePage/index.js +25 -12
  14. package/es/core/context/SxpDataSourceProvider.d.ts +1 -1
  15. package/es/core/utils/materials.js +30 -7
  16. package/es/core/utils/tool.d.ts +1 -0
  17. package/es/core/utils/tool.js +43 -0
  18. package/es/materials/sxp/popup/AddToCart/index.js +27 -8
  19. package/es/materials/sxp/popup/AddToCart/index.new.js +27 -6
  20. package/es/materials/sxp/popup/AddToCart/index.old.js +13 -2
  21. package/es/materials/sxp/popup/CommodityDetail/index.js +21 -16
  22. package/es/materials/sxp/popup/CommodityDetailDiroNew/index.js +25 -0
  23. package/lib/core/components/StructurePage/index.js +25 -12
  24. package/lib/core/context/SxpDataSourceProvider.d.ts +1 -1
  25. package/lib/core/utils/materials.js +29 -6
  26. package/lib/core/utils/tool.d.ts +1 -0
  27. package/lib/core/utils/tool.js +45 -1
  28. package/lib/materials/sxp/popup/AddToCart/index.js +27 -8
  29. package/lib/materials/sxp/popup/AddToCart/index.new.js +27 -6
  30. package/lib/materials/sxp/popup/AddToCart/index.old.js +12 -1
  31. package/lib/materials/sxp/popup/CommodityDetail/index.js +21 -16
  32. package/lib/materials/sxp/popup/CommodityDetailDiroNew/index.js +25 -0
  33. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -420,6 +420,54 @@ function getUrlParamByKey(key) {
420
420
  }
421
421
  return (_b = params[key]) !== null && _b !== void 0 ? _b : '';
422
422
  }
423
+ /**
424
+ * 货币代码到货币符号的映射
425
+ * 根据 Shopify 返回的 currencyCode 获取对应的货币符号
426
+ */
427
+ function getCurrencySymbol(currencyCode) {
428
+ const currencySymbolMap = {
429
+ // 主要货币
430
+ USD: '$', // 美元
431
+ EUR: '€', // 欧元
432
+ GBP: '£', // 英镑
433
+ JPY: '¥', // 日元
434
+ CNY: '¥', // 人民币
435
+ KRW: '₩', // 韩元
436
+ INR: '₹', // 印度卢比
437
+ RUB: '₽', // 俄罗斯卢布
438
+ BRL: 'R$', // 巴西雷亚尔
439
+ CAD: 'CA$', // 加拿大元
440
+ AUD: 'A$', // 澳元
441
+ CHF: 'CHF', // 瑞士法郎
442
+ SEK: 'kr', // 瑞典克朗
443
+ NOK: 'kr', // 挪威克朗
444
+ DKK: 'kr', // 丹麦克朗
445
+ PLN: 'zł', // 波兰兹罗提
446
+ THB: '฿', // 泰铢
447
+ IDR: 'Rp', // 印尼盾
448
+ MYR: 'RM', // 马来西亚林吉特
449
+ PHP: '₱', // 菲律宾比索
450
+ SGD: 'S$', // 新加坡元
451
+ HKD: 'HK$', // 港币
452
+ TWD: 'NT$', // 新台币
453
+ NZD: 'NZ$', // 新西兰元
454
+ MXN: 'MX$', // 墨西哥比索
455
+ ZAR: 'R', // 南非兰特
456
+ TRY: '₺', // 土耳其里拉
457
+ AED: 'AED', // 阿联酋迪拉姆
458
+ SAR: 'SAR', // 沙特里亚尔
459
+ ILS: '₪', // 以色列新谢克尔
460
+ ARS: 'AR$', // 阿根廷比索
461
+ CLP: 'CL$', // 智利比索
462
+ COP: 'CO$', // 哥伦比亚比索
463
+ VND: '₫', // 越南盾
464
+ EGP: 'E£', // 埃及镑
465
+ NGN: '₦', // 尼日利亚奈拉
466
+ PKR: '₨', // 巴基斯坦卢比
467
+ BDT: '৳', // 孟加拉塔卡
468
+ };
469
+ return currencySymbolMap[currencyCode.toUpperCase()] || currencyCode;
470
+ }
423
471
 
424
472
  var tool = /*#__PURE__*/Object.freeze({
425
473
  __proto__: null,
@@ -427,6 +475,7 @@ var tool = /*#__PURE__*/Object.freeze({
427
475
  generateRandomString: generateRandomString,
428
476
  getBrowserInfo: getBrowserInfo,
429
477
  getCookie: getCookie,
478
+ getCurrencySymbol: getCurrencySymbol,
430
479
  getDevice: getDevice$1,
431
480
  getIndexByblockType: getIndexByblockType,
432
481
  getScreenReader: getScreenReader,
@@ -11004,7 +11053,7 @@ const getBgStyle = (imgSrc) => {
11004
11053
  : '';
11005
11054
  };
11006
11055
  const getPriceText = ({ product, enableFormattedPrice, globalConfig, isHiddenDef, style }) => {
11007
- var _a, _b, _c, _d, _e, _f, _g, _h;
11056
+ var _a, _b, _c, _d, _e;
11008
11057
  let text = '';
11009
11058
  if ((!(product === null || product === void 0 ? void 0 : product.currency) || !(product === null || product === void 0 ? void 0 : product.price)) && isHiddenDef)
11010
11059
  return null;
@@ -11012,18 +11061,51 @@ const getPriceText = ({ product, enableFormattedPrice, globalConfig, isHiddenDef
11012
11061
  if (typeof price !== 'number')
11013
11062
  return text;
11014
11063
  let priceSymbol = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.priceSymbol;
11015
- let currency = (product === null || product === void 0 ? void 0 : product.currency) ? (_c = (_b = (_a = product === null || product === void 0 ? void 0 : product.currency) === null || _a === void 0 ? void 0 : _a.split('-')[1]) === null || _b === void 0 ? void 0 : _b.toUpperCase()) !== null && _c !== void 0 ? _c : '' : '$';
11064
+ // product.currency 中提取货币代码
11065
+ // 支持多种格式:
11066
+ // 1. "EUR" - 直接是货币代码
11067
+ // 2. "USD-$" - 货币代码-货币符号
11068
+ // 3. "$-USD" - 货币符号-货币代码 (不常见)
11069
+ let currencyCode = '';
11070
+ if (product === null || product === void 0 ? void 0 : product.currency) {
11071
+ const parts = product.currency.split('-');
11072
+ if (parts.length > 1) {
11073
+ // 判断哪一部分是货币代码(通常是3个大写字母)
11074
+ // 货币代码通常是3个字母,如 USD, EUR, GBP
11075
+ const firstPart = parts[0].toUpperCase();
11076
+ const secondPart = parts[1].toUpperCase();
11077
+ // 如果第一部分是3个字母,则认为是货币代码
11078
+ if (/^[A-Z]{3}$/.test(firstPart)) {
11079
+ currencyCode = firstPart;
11080
+ }
11081
+ else if (/^[A-Z]{3}$/.test(secondPart)) {
11082
+ currencyCode = secondPart;
11083
+ }
11084
+ else {
11085
+ // 都不是标准格式,取第一部分
11086
+ currencyCode = firstPart;
11087
+ }
11088
+ }
11089
+ else {
11090
+ currencyCode = parts[0].toUpperCase();
11091
+ }
11092
+ }
11093
+ else {
11094
+ currencyCode = 'USD'; // 默认美元
11095
+ }
11096
+ // 使用货币代码映射获取货币符号
11097
+ let currency = getCurrencySymbol(currencyCode);
11016
11098
  const isToLocStr = enableFormattedPrice === undefined || enableFormattedPrice;
11017
11099
  let decPic = price === null || price === void 0 ? void 0 : price.toString();
11018
11100
  if (priceSymbol === null || priceSymbol === void 0 ? void 0 : priceSymbol.showTwoDecimalPoint) {
11019
11101
  decPic = price === null || price === void 0 ? void 0 : price.toFixed(2);
11020
11102
  }
11021
- let decInd = (_d = decPic === null || decPic === void 0 ? void 0 : decPic.indexOf('.')) !== null && _d !== void 0 ? _d : -1;
11103
+ let decInd = (_a = decPic === null || decPic === void 0 ? void 0 : decPic.indexOf('.')) !== null && _a !== void 0 ? _a : -1;
11022
11104
  if (isToLocStr) {
11023
11105
  text =
11024
- (_e = price === null || price === void 0 ? void 0 : price.toLocaleString('zh', {
11106
+ (_b = price === null || price === void 0 ? void 0 : price.toLocaleString('zh', {
11025
11107
  minimumFractionDigits: (priceSymbol === null || priceSymbol === void 0 ? void 0 : priceSymbol.showTwoDecimalPoint) ? 2 : 0
11026
- })) !== null && _e !== void 0 ? _e : '';
11108
+ })) !== null && _b !== void 0 ? _b : '';
11027
11109
  let startIndex = 0;
11028
11110
  let endIndex = decInd !== null && decInd !== void 0 ? decInd : text === null || text === void 0 ? void 0 : text.length;
11029
11111
  if ((priceSymbol === null || priceSymbol === void 0 ? void 0 : priceSymbol.millesimalSymbol) === '.') {
@@ -11054,7 +11136,7 @@ const getPriceText = ({ product, enableFormattedPrice, globalConfig, isHiddenDef
11054
11136
  }
11055
11137
  });
11056
11138
  }
11057
- currency = `<span style="font-family:${(_h = (_g = (_f = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.priceSymbol) === null || _f === void 0 ? void 0 : _f.fontFamily) !== null && _g !== void 0 ? _g : style === null || style === void 0 ? void 0 : style['fontFamily-en']) !== null && _h !== void 0 ? _h : 'inherit'}">${currency}</span>`;
11139
+ currency = `<span style="font-family:${(_e = (_d = (_c = globalConfig === null || globalConfig === void 0 ? void 0 : globalConfig.priceSymbol) === null || _c === void 0 ? void 0 : _c.fontFamily) !== null && _d !== void 0 ? _d : style === null || style === void 0 ? void 0 : style['fontFamily-en']) !== null && _e !== void 0 ? _e : 'inherit'}">${currency}</span>`;
11058
11140
  text = setFontForText(text, style);
11059
11141
  if ((priceSymbol === null || priceSymbol === void 0 ? void 0 : priceSymbol.currencyPosition) && (priceSymbol === null || priceSymbol === void 0 ? void 0 : priceSymbol.currencyPosition) !== 'none') {
11060
11142
  text = (priceSymbol === null || priceSymbol === void 0 ? void 0 : priceSymbol.currencyPosition) === 'left' ? currency + text : text + currency;
@@ -11090,30 +11172,37 @@ const CommodityDetail$1 = (_a) => {
11090
11172
  cta = p === null || p === void 0 ? void 0 : p.bindCta;
11091
11173
  }
11092
11174
  const handleLink = (e) => {
11093
- // 如果启用了加购功能且配置了加购弹窗ID,则打开加购弹窗
11175
+ // 如果启用了加购功能且配置了加购弹窗ID,检查是否是 Shopify 商品
11094
11176
  if (enableAddToCart && addToCartPopupId) {
11095
- // 设置弹窗数据
11096
- setPopupDetailData === null || setPopupDetailData === void 0 ? void 0 : setPopupDetailData(Object.assign(Object.assign({}, data), { index: position }));
11097
- // 上报点击事件
11098
- bffFbReport === null || bffFbReport === void 0 ? void 0 : bffFbReport({
11099
- eventName: 'ClickCTA',
11100
- product: product ? [product] : undefined,
11101
- contentType: 'product',
11102
- data,
11103
- position,
11104
- cta_text: cta === null || cta === void 0 ? void 0 : cta.enTitle,
11105
- cta_action_type: 'open_internal_popup',
11106
- target_content_id: product === null || product === void 0 ? void 0 : product.itemId
11107
- });
11108
- console.log('[CommodityDetail] 打开加购弹窗:', addToCartPopupId);
11109
- // 打开加购弹窗
11110
- if (typeof window !== 'undefined' && window.sxpPopup) {
11111
- window.sxpPopup(addToCartPopupId);
11177
+ // 问题3:只有 Shopify 商品(有 shopifyId)才打开加购弹窗
11178
+ if (!(product === null || product === void 0 ? void 0 : product.shopifyId)) {
11179
+ console.warn('[CommodityDetail] 非 Shopify 商品,跳过加购弹窗');
11180
+ // 继续执行默认行为(跳转链接)
11112
11181
  }
11113
11182
  else {
11114
- console.warn('[CommodityDetail] sxpPopup 方法不存在');
11183
+ // 设置弹窗数据
11184
+ setPopupDetailData === null || setPopupDetailData === void 0 ? void 0 : setPopupDetailData(Object.assign(Object.assign({}, data), { index: position }));
11185
+ // 上报点击事件
11186
+ bffFbReport === null || bffFbReport === void 0 ? void 0 : bffFbReport({
11187
+ eventName: 'ClickCTA',
11188
+ product: product ? [product] : undefined,
11189
+ contentType: 'product',
11190
+ data,
11191
+ position,
11192
+ cta_text: cta === null || cta === void 0 ? void 0 : cta.enTitle,
11193
+ cta_action_type: 'open_internal_popup',
11194
+ target_content_id: product === null || product === void 0 ? void 0 : product.itemId
11195
+ });
11196
+ console.log('[CommodityDetail] 打开加购弹窗:', addToCartPopupId);
11197
+ // 打开加购弹窗
11198
+ if (typeof window !== 'undefined' && window.sxpPopup) {
11199
+ window.sxpPopup(addToCartPopupId);
11200
+ }
11201
+ else {
11202
+ console.warn('[CommodityDetail] sxpPopup 方法不存在');
11203
+ }
11204
+ return;
11115
11205
  }
11116
- return;
11117
11206
  }
11118
11207
  // 默认行为:跳转到商品链接
11119
11208
  if (product === null || product === void 0 ? void 0 : product.link) {
@@ -12083,7 +12172,7 @@ var settingRender$d = [
12083
12172
 
12084
12173
  const AddToCartPopup$1 = ({ isActive = true }) => {
12085
12174
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
12086
- const { popupDetailData, globalConfig } = useSxpDataSource();
12175
+ const { popupDetailData, globalConfig, bffFbReport } = useSxpDataSource();
12087
12176
  const [productData, setProductData] = React.useState(null);
12088
12177
  const [selectedOptions, setSelectedOptions] = React.useState({});
12089
12178
  const [selectedVariant, setSelectedVariant] = React.useState(null);
@@ -12223,6 +12312,18 @@ const AddToCartPopup$1 = ({ isActive = true }) => {
12223
12312
  shopifyDomain,
12224
12313
  selectedVariant
12225
12314
  });
12315
+ // 上报 sessionCompleted 事件(问题4)
12316
+ bffFbReport === null || bffFbReport === void 0 ? void 0 : bffFbReport({
12317
+ eventName: 'sessionCompleted',
12318
+ product: product ? [product] : undefined,
12319
+ contentType: 'product',
12320
+ rec: data,
12321
+ position: data === null || data === void 0 ? void 0 : data.index,
12322
+ cta_text: 'Add To Cart',
12323
+ cta_action_type: 'add_to_cart',
12324
+ target_content_id: product === null || product === void 0 ? void 0 : product.itemId,
12325
+ target_url: `https://${shopifyDomain}/cart/add`
12326
+ });
12226
12327
  // 使用 Shopify 的 /cart/add 接口,通过查询参数添加商品
12227
12328
  // 这种方式会跳转到购物车页面而不是结算页面
12228
12329
  const params = new URLSearchParams({
@@ -12237,6 +12338,10 @@ const AddToCartPopup$1 = ({ isActive = true }) => {
12237
12338
  const totalPrice = selectedVariant
12238
12339
  ? (parseFloat(selectedVariant.price.amount) * quantity).toFixed(2)
12239
12340
  : '0.00';
12341
+ // 只有选择了 variant 后才显示货币符号
12342
+ const displayPrice = selectedVariant
12343
+ ? `${getCurrencySymbol(selectedVariant.price.currencyCode)}${totalPrice}`
12344
+ : totalPrice;
12240
12345
  if (loading) {
12241
12346
  return (React.createElement("div", { className: 'add-to-cart-popup' },
12242
12347
  React.createElement("div", { className: 'loading' }, "Loading...")));
@@ -12270,9 +12375,7 @@ const AddToCartPopup$1 = ({ isActive = true }) => {
12270
12375
  "Available: ",
12271
12376
  selectedVariant.quantityAvailable))),
12272
12377
  React.createElement("div", { className: 'variant-price-row' },
12273
- React.createElement("div", { className: 'price' },
12274
- "$",
12275
- totalPrice),
12378
+ React.createElement("div", { className: 'price' }, displayPrice),
12276
12379
  React.createElement("div", { className: 'quantity-selector' },
12277
12380
  React.createElement("button", { className: 'qty-btn', onClick: () => setQuantity(Math.max(1, quantity - 1)), disabled: quantity <= 1 }, "\u2212"),
12278
12381
  React.createElement("span", { className: 'qty-value' }, quantity),
@@ -12280,16 +12383,26 @@ const AddToCartPopup$1 = ({ isActive = true }) => {
12280
12383
  React.createElement("div", { className: 'variant-options' }, productData.options.map(option => (React.createElement("div", { key: option.name, className: 'option-group' },
12281
12384
  React.createElement("div", { className: 'option-label' }, option.name),
12282
12385
  React.createElement("div", { className: 'option-values' }, option.values.map(value => {
12283
- // 检查这个选项是否可选(availableForSale = true,如果有 quantityAvailable 则还需 > 0)
12386
+ // 检查这个选项值与当前已选择的其他选项组合后是否可用
12284
12387
  const isAvailable = productData.variants.edges.some(({ node: variant }) => {
12388
+ // 检查这个variant是否匹配当前选项值
12285
12389
  const hasThisOption = variant.selectedOptions.some(opt => opt.name === option.name && opt.value === value);
12286
- if (!hasThisOption || !variant.availableForSale)
12390
+ if (!hasThisOption)
12287
12391
  return false;
12288
- // 如果有 quantityAvailable 字段,则需要检查库存
12289
- if (variant.quantityAvailable !== undefined) {
12290
- return variant.quantityAvailable > 0;
12291
- }
12292
- // 没有 quantityAvailable 字段时,只要 availableForSale 为 true 就可选
12392
+ // 检查这个variant是否匹配其他已选择的选项
12393
+ const matchesOtherSelections = Object.entries(selectedOptions).every(([key, val]) => {
12394
+ // 跳过当前正在检查的选项
12395
+ if (key === option.name)
12396
+ return true;
12397
+ return variant.selectedOptions.some(opt => opt.name === key && opt.value === val);
12398
+ });
12399
+ if (!matchesOtherSelections)
12400
+ return false;
12401
+ // 检查是否可售
12402
+ if (!variant.availableForSale)
12403
+ return false;
12404
+ // 如果有 quantityAvailable 字段且为0,但 availableForSale 为 true,仍然可选(问题2)
12405
+ // 如果 quantityAvailable 不存在,只要 availableForSale 为 true 就可选
12293
12406
  return true;
12294
12407
  });
12295
12408
  const isSelected = selectedOptions[option.name] === value;
@@ -12340,7 +12453,35 @@ const CommodityDetailDiroNew$1 = (_a) => {
12340
12453
  }
12341
12454
  const handleLink = (e) => {
12342
12455
  e.preventDefault();
12343
- // 上报点击事件
12456
+ // 问题3:只有 Shopify 商品(有 shopifyId)才打开加购弹窗
12457
+ if (!(product === null || product === void 0 ? void 0 : product.shopifyId)) {
12458
+ console.warn('[CommodityDetailDiroNew] 非 Shopify 商品,跳转到外链');
12459
+ // 上报点击事件
12460
+ ctaEvent === null || ctaEvent === void 0 ? void 0 : ctaEvent({
12461
+ eventSubject: 'clickCta',
12462
+ eventDescription: 'User clicked the CTA'
12463
+ }, data, product, position);
12464
+ bffFbReport === null || bffFbReport === void 0 ? void 0 : bffFbReport({
12465
+ eventName: 'ClickCTA',
12466
+ product: product ? [product] : undefined,
12467
+ contentType: 'product',
12468
+ data,
12469
+ position,
12470
+ cta_text: cta === null || cta === void 0 ? void 0 : cta.enTitle,
12471
+ cta_action_type: 'open_external_link',
12472
+ target_content_id: product === null || product === void 0 ? void 0 : product.itemId,
12473
+ target_url: product === null || product === void 0 ? void 0 : product.link
12474
+ });
12475
+ if (!isPost) {
12476
+ productView(data, product, cta, viewTime || curTimeRef.current, position);
12477
+ }
12478
+ // 跳转到商品链接
12479
+ if (product === null || product === void 0 ? void 0 : product.link) {
12480
+ window.location.href = window.getJointUtmLink(product.link);
12481
+ }
12482
+ return;
12483
+ }
12484
+ // Shopify 商品:上报点击事件
12344
12485
  ctaEvent === null || ctaEvent === void 0 ? void 0 : ctaEvent({
12345
12486
  eventSubject: 'clickCta',
12346
12487
  eventDescription: 'User clicked the CTA'
@@ -19267,7 +19408,8 @@ const baseStyles = {
19267
19408
  // Carousel Section
19268
19409
  carouselSection: {
19269
19410
  width: '100%',
19270
- position: 'relative'
19411
+ position: 'relative',
19412
+ padding: '20px 16px'
19271
19413
  },
19272
19414
  carouselImageContainer: {
19273
19415
  width: '100%',
@@ -19298,7 +19440,7 @@ const baseStyles = {
19298
19440
  },
19299
19441
  carouselInfoSection: {
19300
19442
  width: '100%',
19301
- padding: '20px',
19443
+ padding: '10px 20px',
19302
19444
  backgroundColor: '#000',
19303
19445
  color: '#fff',
19304
19446
  textAlign: 'center'
@@ -19494,7 +19636,7 @@ const baseStyles = {
19494
19636
  }
19495
19637
  };
19496
19638
  const StructurePage = (_a) => {
19497
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
19639
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
19498
19640
  var { containerStyle, containerHeight = 664, containerWidth = 375, className = '', apiUrl = 'https://bff-be-dev.chatlabs.net/api/v1/recommend/list', requestBody, editorMode = false, multiCTAConfig: propMultiCTAConfig, videoPlayIcon: propVideoPlayIcon, isCmsMode = false, storyId, customHeaders } = _a, rest = __rest(_a, ["containerStyle", "containerHeight", "containerWidth", "className", "apiUrl", "requestBody", "editorMode", "multiCTAConfig", "videoPlayIcon", "isCmsMode", "storyId", "customHeaders"]);
19499
19641
  const [data, setData] = React.useState(null);
19500
19642
  const [loading, setLoading] = React.useState(true);
@@ -19579,7 +19721,7 @@ const StructurePage = (_a) => {
19579
19721
  const config = multiCTAConfig[configKey];
19580
19722
  // 定义允许的样式属性列表
19581
19723
  const styleKeys = [
19582
- 'fontSize', 'color', 'textAlign', 'fontWeight',
19724
+ 'fontSize', 'color', 'textAlign', 'fontWeight', 'fontStyle', 'textDecoration',
19583
19725
  'backgroundColor', 'padding', 'margin', 'borderRadius',
19584
19726
  'showBorder', 'borderWidth', 'borderColor',
19585
19727
  'buttonBackgroundColor', 'buttonTextColor', 'buttonWidth', 'buttonHeight'
@@ -19606,8 +19748,16 @@ const StructurePage = (_a) => {
19606
19748
  if (styleConfig.textAlign && typeof styleConfig.textAlign === 'string') {
19607
19749
  customStyle.textAlign = styleConfig.textAlign;
19608
19750
  }
19609
- if (styleConfig.fontWeight && typeof styleConfig.fontWeight === 'number') {
19610
- customStyle.fontWeight = styleConfig.fontWeight;
19751
+ if (styleConfig.fontWeight) {
19752
+ customStyle.fontWeight = typeof styleConfig.fontWeight === 'number'
19753
+ ? styleConfig.fontWeight
19754
+ : styleConfig.fontWeight;
19755
+ }
19756
+ if (styleConfig.fontStyle && typeof styleConfig.fontStyle === 'string') {
19757
+ customStyle.fontStyle = styleConfig.fontStyle;
19758
+ }
19759
+ if (styleConfig.textDecoration && typeof styleConfig.textDecoration === 'string') {
19760
+ customStyle.textDecoration = styleConfig.textDecoration;
19611
19761
  }
19612
19762
  if (styleConfig.backgroundColor && typeof styleConfig.backgroundColor === 'string') {
19613
19763
  customStyle.backgroundColor = styleConfig.backgroundColor;
@@ -19886,8 +20036,8 @@ const StructurePage = (_a) => {
19886
20036
  React.createElement("video", { ref: heroVideoRef, src: data.heroSection.url, style: baseStyles.heroVideo, autoPlay: true, muted: true, loop: true, playsInline: true, controls: false }),
19887
20037
  isHeroVideoPaused && (React.createElement(FormatImage$1, { className: 'clc-pb-video-pause', src: videoPlayIcon, alt: 'play' })))) : ((_e = data.heroSection.imgUrls) === null || _e === void 0 ? void 0 : _e[0]) ? (React.createElement("img", { src: data.heroSection.imgUrls[0], alt: 'Hero', style: baseStyles.heroImage })) : null,
19888
20038
  React.createElement("div", { style: baseStyles.heroOverlay }, renderCTA('heroButton', (_g = (_f = data.heroSection.bindProducts) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.bindCta, (_h = data.heroSection.bindProducts) === null || _h === void 0 ? void 0 : _h[0], baseStyles.heroButton))))),
19889
- data.carouselSection && data.carouselSection.length > 0 && (React.createElement("div", { style: mergeStyles(baseStyles.carouselSection, 'carouselSection') },
19890
- React.createElement("div", { style: baseStyles.carouselImageContainer },
20039
+ data.carouselSection && data.carouselSection.length > 0 && (React.createElement("div", { style: Object.assign(Object.assign({}, mergeStyles(baseStyles.carouselSection, 'carouselSection')), (((_j = multiCTAConfig === null || multiCTAConfig === void 0 ? void 0 : multiCTAConfig.carouselContainerStyle) === null || _j === void 0 ? void 0 : _j.padding) && { padding: multiCTAConfig.carouselContainerStyle.padding })) },
20040
+ React.createElement("div", { style: Object.assign(Object.assign({}, baseStyles.carouselImageContainer), (((_k = multiCTAConfig === null || multiCTAConfig === void 0 ? void 0 : multiCTAConfig.carouselContainerStyle) === null || _k === void 0 ? void 0 : _k.aspectRatio) && { aspectRatio: multiCTAConfig.carouselContainerStyle.aspectRatio })) },
19891
20041
  React.createElement("div", { style: Object.assign(Object.assign({}, baseStyles.carouselContainer), { transform: `translateX(-${carouselIndex * 100}%)` }) }, data.carouselSection.map((item, index) => {
19892
20042
  var _a;
19893
20043
  return (React.createElement("div", { key: item.itemId, style: baseStyles.carouselSlide }, item.url ? (React.createElement("div", { style: { position: 'relative', width: '100%', height: '100%' }, onClick: () => handleCarouselVideoClick(index) },
@@ -19899,13 +20049,14 @@ const StructurePage = (_a) => {
19899
20049
  React.createElement("button", { style: Object.assign(Object.assign({}, baseStyles.arrowButton), { left: '10px' }), onClick: handleCarouselPrev }, "\u2039"),
19900
20050
  React.createElement("button", { style: Object.assign(Object.assign({}, baseStyles.arrowButton), { right: '10px' }), onClick: handleCarouselNext }, "\u203A")),
19901
20051
  React.createElement("div", { style: mergeStyles(baseStyles.carouselInfoSection, 'carouselSection') },
19902
- ((_j = data.carouselSection[carouselIndex]) === null || _j === void 0 ? void 0 : _j.text) && (React.createElement("div", { style: mergeStyles(baseStyles.carouselText, 'carouselSection') }, (_k = data.carouselSection[carouselIndex]) === null || _k === void 0 ? void 0 : _k.text)),
19903
- renderCTA('carouselButton', (_o = (_m = (_l = data.carouselSection[carouselIndex]) === null || _l === void 0 ? void 0 : _l.bindProducts) === null || _m === void 0 ? void 0 : _m[0]) === null || _o === void 0 ? void 0 : _o.bindCta, (_q = (_p = data.carouselSection[carouselIndex]) === null || _p === void 0 ? void 0 : _p.bindProducts) === null || _q === void 0 ? void 0 : _q[0], baseStyles.carouselButton)))),
20052
+ ((_l = data.carouselSection[carouselIndex]) === null || _l === void 0 ? void 0 : _l.text) && (React.createElement("div", { style: mergeStyles(baseStyles.carouselText, 'carouselSection') }, (_m = data.carouselSection[carouselIndex]) === null || _m === void 0 ? void 0 : _m.text)),
20053
+ renderCTA('carouselButton', (_q = (_p = (_o = data.carouselSection[carouselIndex]) === null || _o === void 0 ? void 0 : _o.bindProducts) === null || _p === void 0 ? void 0 : _p[0]) === null || _q === void 0 ? void 0 : _q.bindCta, (_s = (_r = data.carouselSection[carouselIndex]) === null || _r === void 0 ? void 0 : _r.bindProducts) === null || _s === void 0 ? void 0 : _s[0], baseStyles.carouselButton)))),
19904
20054
  data.highlightRevealSection && (React.createElement("div", { style: mergeStyles(baseStyles.highlightSection, 'highlightSection') },
19905
20055
  React.createElement("div", { style: baseStyles.highlightImageContainer },
19906
20056
  React.createElement("img", { src: data.highlightRevealSection.landingImageUrl || data.highlightRevealSection.cover, alt: data.highlightRevealSection.title, style: baseStyles.highlightImage })),
19907
20057
  React.createElement("div", { style: mergeStyles(baseStyles.highlightInfoSection, 'highlightSection') },
19908
- React.createElement("div", { style: mergeStyles(baseStyles.highlightTitle, 'highlightSection') }, data.highlightRevealSection.title),
20058
+ data.highlightRevealSection.text && (React.createElement("div", { style: { marginBottom: '10px' } },
20059
+ React.createElement("div", { style: mergeStyles(baseStyles.highlightTitle, 'highlightSection') }, data.highlightRevealSection.text))),
19909
20060
  renderCTA('highlightButton', data.highlightRevealSection.bindCta, data.highlightRevealSection, baseStyles.highlightButton)))),
19910
20061
  data.productGridSection && data.productGridSection.length > 0 && (React.createElement("div", { style: mergeStyles(baseStyles.productGrid, 'productGrid') }, (() => {
19911
20062
  // 创建一个6格的网格 (3行 x 2列),根据position放置产品
@@ -19955,7 +20106,10 @@ const StructurePage = (_a) => {
19955
20106
  });
19956
20107
  })())),
19957
20108
  data.footerSection && (React.createElement("div", { style: mergeStyles(baseStyles.footerSection, 'footerSection') },
19958
- React.createElement("div", { style: mergeStyles(baseStyles.footerInfoSection, 'footerSection') }, renderCTA('footerButton', data.footerSection.bindCta, data.footerSection, baseStyles.footerButton)),
20109
+ React.createElement("div", { style: mergeStyles(baseStyles.footerInfoSection, 'footerSection') },
20110
+ data.footerSection.text && (React.createElement("div", { style: { marginBottom: '15px' } },
20111
+ React.createElement("div", { style: mergeStyles(baseStyles.footerText, 'footerSection') }, data.footerSection.text))),
20112
+ renderCTA('footerButton', data.footerSection.bindCta, data.footerSection, baseStyles.footerButton)),
19959
20113
  React.createElement("div", { style: baseStyles.footerImageContainer },
19960
20114
  React.createElement("img", { src: data.footerSection.landingImageUrl || data.footerSection.cover, alt: data.footerSection.title, style: baseStyles.footerImage }))))));
19961
20115
  };