@lime-bundles/react 7.4.0 → 7.5.1

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/index.cjs CHANGED
@@ -34,6 +34,7 @@ __export(index_exports, {
34
34
  VolumeBundle: () => VolumeBundle,
35
35
  WIDGET_CONFIG_DEFAULTS: () => import_core17.WIDGET_CONFIG_DEFAULTS,
36
36
  applyWidgetConfigVars: () => import_core17.applyWidgetConfigVars,
37
+ bundleSaleCents: () => import_core17.bundleSaleCents,
37
38
  calculateDiscount: () => import_core17.calculateDiscount,
38
39
  calculateTierSavings: () => import_core17.calculateTierSavings,
39
40
  computeBundleSaleCents: () => import_core17.computeBundleSaleCents,
@@ -750,8 +751,34 @@ function BundleCountdown({
750
751
  ] });
751
752
  }
752
753
 
753
- // src/components/FixedBundle.tsx
754
+ // src/components/ThumbnailPlaceholder.tsx
754
755
  var import_jsx_runtime3 = require("react/jsx-runtime");
756
+ function PlaceholderMark() {
757
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
758
+ "svg",
759
+ {
760
+ className: "lb-bundle-placeholder-icon",
761
+ viewBox: "0 0 48 48",
762
+ "data-lb-placeholder": "",
763
+ "aria-hidden": "true",
764
+ focusable: "false",
765
+ children: [
766
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "15", y: "15", width: "18", height: "18", rx: "2" }),
767
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "20.5", cy: "20.5", r: "1.5" }),
768
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M33 27l-5-5L17 33" })
769
+ ]
770
+ }
771
+ );
772
+ }
773
+ function placeholderBoxClass(boxClass) {
774
+ return `${boxClass} lb-thumb--placeholder`;
775
+ }
776
+ function ThumbnailPlaceholder({ className }) {
777
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: placeholderBoxClass(className), children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(PlaceholderMark, {}) });
778
+ }
779
+
780
+ // src/components/FixedBundle.tsx
781
+ var import_jsx_runtime4 = require("react/jsx-runtime");
755
782
  function FixedBundle(props) {
756
783
  const {
757
784
  shopDomain,
@@ -878,9 +905,9 @@ function FixedBundle(props) {
878
905
  }
879
906
  }, [bundle, onAddToCart, onError, trackAddToCart, selectedVariants]);
880
907
  if (result.status === "loading") {
881
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
882
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
883
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
908
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
909
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
910
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
884
911
  ] });
885
912
  }
886
913
  if (result.status === "error") return null;
@@ -907,7 +934,7 @@ function FixedBundle(props) {
907
934
  const savingsPercent = comparePrice > 0 && savings > 0 ? Math.round(savings / comparePrice * 100) : 0;
908
935
  const showCompare = bundle.widgetConfig.pricing.showComparePrice && savings > 0;
909
936
  const showSavings = bundle.widgetConfig.savingsBar.visible && savings > 0;
910
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
937
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
911
938
  "div",
912
939
  {
913
940
  ref: (el) => {
@@ -918,18 +945,18 @@ function FixedBundle(props) {
918
945
  role: "region",
919
946
  "aria-label": bundle.title,
920
947
  children: [
921
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "lb-bundle-header__content", children: [
922
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
923
- bundle.description && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
948
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-bundle-header__content", children: [
949
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
950
+ bundle.description && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
924
951
  ] }) }),
925
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
952
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
926
953
  BundleCountdown,
927
954
  {
928
955
  endsAt: bundle.endsAt,
929
956
  widgetConfig: bundle.widgetConfig
930
957
  }
931
958
  ),
932
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "lb-bundle__products lb-edge-fade", ref: productsEdgeFadeRef, children: bundle.products.map((product) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
959
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-bundle__products lb-edge-fade", ref: productsEdgeFadeRef, children: bundle.products.map((product) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
933
960
  FixedProductRow,
934
961
  {
935
962
  bundle,
@@ -940,29 +967,29 @@ function FixedBundle(props) {
940
967
  },
941
968
  product.id
942
969
  )) }),
943
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "lb-bundle-divider" }),
944
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "lb-bundle-summary", children: [
945
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "lb-bundle-summary__text", children: [
946
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
947
- showSavings && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
970
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-bundle-divider" }),
971
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-bundle-summary", children: [
972
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-bundle-summary__text", children: [
973
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
974
+ showSavings && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
948
975
  "You save",
949
976
  " ",
950
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { "data-savings-amount": true, children: (0, import_core8.formatMoney)(savings, currency) }),
977
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-savings-amount": true, children: (0, import_core8.formatMoney)(savings, currency) }),
951
978
  " ",
952
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { "data-savings-percent": true, children: [
979
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { "data-savings-percent": true, children: [
953
980
  "(",
954
981
  savingsPercent,
955
982
  "%)"
956
983
  ] })
957
984
  ] })
958
985
  ] }),
959
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
960
- showCompare && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core8.formatMoney)(comparePrice, currency) }),
961
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core8.formatMoney)(salePrice, currency) })
986
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
987
+ showCompare && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core8.formatMoney)(comparePrice, currency) }),
988
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core8.formatMoney)(salePrice, currency) })
962
989
  ] })
963
990
  ] }),
964
- cartError && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
965
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
991
+ cartError && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
992
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
966
993
  "button",
967
994
  {
968
995
  className: "lb-bundle__cta",
@@ -1012,15 +1039,15 @@ function FixedProductRow({ bundle, product, currency, isOos, onVariantChange })
1012
1039
  bundle.widgetConfig.lowStockThreshold,
1013
1040
  bundle.widgetConfig.showLowStockBadge
1014
1041
  );
1015
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1042
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1016
1043
  "div",
1017
1044
  {
1018
1045
  className: isOos ? "lb-bundle-product-row lb-bundle-product-row--oos" : "lb-bundle-product-row",
1019
1046
  "aria-disabled": isOos || void 0,
1020
1047
  part: "product",
1021
1048
  children: [
1022
- isOos && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "lb-bundle-product-row__oos", children: "Out of stock" }),
1023
- thumbImage && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1049
+ isOos && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-bundle-product-row__oos", children: "Out of stock" }),
1050
+ thumbImage ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1024
1051
  "img",
1025
1052
  {
1026
1053
  src: thumbImage.url,
@@ -1030,12 +1057,12 @@ function FixedProductRow({ bundle, product, currency, isOos, onVariantChange })
1030
1057
  width: thumbImage.width ?? void 0,
1031
1058
  height: thumbImage.height ?? void 0
1032
1059
  }
1033
- ),
1034
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "lb-bundle__product-info", children: [
1035
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "lb-bundle__product-title", children: product.title }),
1036
- !showPicker && displayVariant && variants.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "lb-bundle-variant-badge", children: displayVariant.title }),
1037
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "lb-bundle-product-prices", children: [
1038
- compareAt && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1060
+ ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ThumbnailPlaceholder, { className: "lb-bundle__product-image" }),
1061
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-bundle__product-info", children: [
1062
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "lb-bundle__product-title", children: product.title }),
1063
+ !showPicker && displayVariant && variants.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-bundle-variant-badge", children: displayVariant.title }),
1064
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "lb-bundle-product-prices", children: [
1065
+ compareAt && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1039
1066
  "span",
1040
1067
  {
1041
1068
  className: "lb-bundle-product-compare-price",
@@ -1043,9 +1070,9 @@ function FixedProductRow({ bundle, product, currency, isOos, onVariantChange })
1043
1070
  children: compareAt
1044
1071
  }
1045
1072
  ),
1046
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "lb-bundle__product-price", "data-product-price": true, children: priceText })
1073
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-bundle__product-price", "data-product-price": true, children: priceText })
1047
1074
  ] }),
1048
- unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1075
+ unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1049
1076
  "span",
1050
1077
  {
1051
1078
  className: "lb-bundle__product-unit-price",
@@ -1053,18 +1080,18 @@ function FixedProductRow({ bundle, product, currency, isOos, onVariantChange })
1053
1080
  children: unitPriceText
1054
1081
  }
1055
1082
  ),
1056
- showLowStock && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "lb-bundle-low-stock-badge", children: [
1083
+ showLowStock && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "lb-bundle-low-stock-badge", children: [
1057
1084
  "Only ",
1058
1085
  displayVariant.quantityAvailable,
1059
1086
  " left"
1060
1087
  ] }),
1061
- showPicker && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "lb-bundle__product-variant-pickers", children: optionNames.map((optionName, optionIndex) => {
1088
+ showPicker && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-bundle__product-variant-pickers", children: optionNames.map((optionName, optionIndex) => {
1062
1089
  const dropdownOptions = optionsFor(optionIndex).map((o) => ({
1063
1090
  value: o.value,
1064
1091
  label: o.value,
1065
1092
  disabled: o.disabled
1066
1093
  }));
1067
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1094
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1068
1095
  VariantDropdown,
1069
1096
  {
1070
1097
  options: dropdownOptions,
@@ -1076,7 +1103,7 @@ function FixedProductRow({ bundle, product, currency, isOos, onVariantChange })
1076
1103
  );
1077
1104
  }) })
1078
1105
  ] }),
1079
- displayVariant && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "lb-bundle-qty-chip", "data-qty-inline": true, children: [
1106
+ displayVariant && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "lb-bundle-qty-chip", "data-qty-inline": true, children: [
1080
1107
  "\xD7",
1081
1108
  displayQty
1082
1109
  ] })
@@ -1202,7 +1229,7 @@ function useFocusTrap({
1202
1229
  }
1203
1230
 
1204
1231
  // src/components/MixMatchPicker.tsx
1205
- var import_jsx_runtime4 = require("react/jsx-runtime");
1232
+ var import_jsx_runtime5 = require("react/jsx-runtime");
1206
1233
  function ruleFor(bundle, productId, variantId) {
1207
1234
  if (variantId) {
1208
1235
  const vRule = bundle.variantRules[variantId];
@@ -1336,7 +1363,7 @@ function MixMatchPicker({
1336
1363
  // inside carries the interactive role + focus trap. So the static-element
1337
1364
  // interaction lint does not apply to this backdrop.
1338
1365
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
1339
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1366
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1340
1367
  "div",
1341
1368
  {
1342
1369
  ref: (el) => {
@@ -1348,7 +1375,7 @@ function MixMatchPicker({
1348
1375
  "data-bundle-gid": bundle.id,
1349
1376
  onMouseDown: onOverlayMouseDown,
1350
1377
  onMouseUp: onOverlayMouseUp,
1351
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1378
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1352
1379
  "div",
1353
1380
  {
1354
1381
  ref: dialogRef,
@@ -1358,13 +1385,13 @@ function MixMatchPicker({
1358
1385
  "aria-labelledby": titleId,
1359
1386
  tabIndex: -1,
1360
1387
  children: [
1361
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-header", children: [
1362
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-header-top", children: [
1363
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-heading", children: [
1364
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h4", { className: "lb-mix-match__modal-title", id: titleId, children: "Add to your bundle" }),
1365
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "lb-mix-match__modal-subtitle", "data-modal-subtitle": true, children: subtitle })
1388
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__modal-header", children: [
1389
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__modal-header-top", children: [
1390
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__modal-heading", children: [
1391
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h4", { className: "lb-mix-match__modal-title", id: titleId, children: "Add to your bundle" }),
1392
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "lb-mix-match__modal-subtitle", "data-modal-subtitle": true, children: subtitle })
1366
1393
  ] }),
1367
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1394
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1368
1395
  "button",
1369
1396
  {
1370
1397
  ref: closeBtnRef,
@@ -1373,16 +1400,16 @@ function MixMatchPicker({
1373
1400
  "data-modal-close": true,
1374
1401
  "aria-label": "Close",
1375
1402
  onClick: onClose,
1376
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, {})
1403
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon, {})
1377
1404
  }
1378
1405
  )
1379
1406
  ] }),
1380
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1407
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1381
1408
  "div",
1382
1409
  {
1383
1410
  className: "lb-mix-match__progress lb-mix-match__modal-progress",
1384
1411
  "data-progress": true,
1385
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1412
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1386
1413
  "div",
1387
1414
  {
1388
1415
  className: "lb-mix-match__progress-segments",
@@ -1390,7 +1417,7 @@ function MixMatchPicker({
1390
1417
  "aria-valuenow": shownUnits,
1391
1418
  "aria-valuemin": 0,
1392
1419
  "aria-valuemax": requiredQty,
1393
- children: Array.from({ length: requiredQty }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1420
+ children: Array.from({ length: requiredQty }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1394
1421
  "span",
1395
1422
  {
1396
1423
  className: `lb-mix-match__progress-segment${i < shownUnits ? " lb-mix-match__progress-segment--filled" : ""}`,
@@ -1403,8 +1430,8 @@ function MixMatchPicker({
1403
1430
  }
1404
1431
  )
1405
1432
  ] }),
1406
- wc.showSearch && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-search", children: [
1407
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1433
+ wc.showSearch && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__modal-search", children: [
1434
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1408
1435
  "input",
1409
1436
  {
1410
1437
  type: "text",
@@ -1418,7 +1445,7 @@ function MixMatchPicker({
1418
1445
  onChange: (e) => setQuery(e.target.value)
1419
1446
  }
1420
1447
  ),
1421
- query.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1448
+ query.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1422
1449
  "button",
1423
1450
  {
1424
1451
  type: "button",
@@ -1426,11 +1453,11 @@ function MixMatchPicker({
1426
1453
  "data-modal-search-clear": true,
1427
1454
  "aria-label": "Clear search",
1428
1455
  onClick: () => setQuery(""),
1429
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SearchClearIcon, {})
1456
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SearchClearIcon, {})
1430
1457
  }
1431
1458
  )
1432
1459
  ] }),
1433
- showFilters && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1460
+ showFilters && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1434
1461
  "div",
1435
1462
  {
1436
1463
  className: "lb-mix-match__filters",
@@ -1439,7 +1466,7 @@ function MixMatchPicker({
1439
1466
  "aria-label": "Filter by product type",
1440
1467
  children: [FILTERS_ALL, ...productTypes].map((value) => {
1441
1468
  const isActive = value === activeType;
1442
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1469
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1443
1470
  "button",
1444
1471
  {
1445
1472
  type: "button",
@@ -1454,7 +1481,7 @@ function MixMatchPicker({
1454
1481
  })
1455
1482
  }
1456
1483
  ),
1457
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-mix-match__modal-list", "data-modal-list": true, children: filtered.map((ep) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1484
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-mix-match__modal-list", "data-modal-list": true, children: filtered.map((ep) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1458
1485
  MixMatchPickerRow,
1459
1486
  {
1460
1487
  bundle,
@@ -1473,10 +1500,10 @@ function MixMatchPicker({
1473
1500
  },
1474
1501
  ep.product.id
1475
1502
  )) }),
1476
- showEmpty && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-mix-match__modal-empty", "data-modal-empty": true, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: "No products match your search" }) }),
1477
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-modal-live": true, "aria-live": "polite", className: "lb-visually-hidden", children: `${filtered.length} products shown` }),
1478
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-footer", children: [
1479
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1503
+ showEmpty && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-mix-match__modal-empty", "data-modal-empty": true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children: "No products match your search" }) }),
1504
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { "data-modal-live": true, "aria-live": "polite", className: "lb-visually-hidden", children: `${filtered.length} products shown` }),
1505
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__modal-footer", children: [
1506
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1480
1507
  "span",
1481
1508
  {
1482
1509
  className: "lb-mix-match__modal-footer-count",
@@ -1485,7 +1512,7 @@ function MixMatchPicker({
1485
1512
  children: `${shownUnits} of ${requiredQty} added`
1486
1513
  }
1487
1514
  ),
1488
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1515
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1489
1516
  "button",
1490
1517
  {
1491
1518
  type: "button",
@@ -1619,7 +1646,7 @@ function MixMatchPickerRow({
1619
1646
  }
1620
1647
  const priceCents = parseFloat(currentVariant.price.amount);
1621
1648
  const compareCents = currentVariant.compareAtPrice ? parseFloat(currentVariant.compareAtPrice.amount) : null;
1622
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1649
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1623
1650
  "div",
1624
1651
  {
1625
1652
  className: `lb-mix-match__modal-product${isOos ? " lb-mix-match__modal-product--sold-out" : ""}${variantInBundle ? " lb-mix-match__modal-product--in-bundle" : ""}`,
@@ -1628,21 +1655,27 @@ function MixMatchPickerRow({
1628
1655
  "data-type": product.productType ?? "",
1629
1656
  "aria-disabled": isOos || void 0,
1630
1657
  children: [
1631
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-product-thumb", children: [
1632
- thumbImage && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1633
- "img",
1634
- {
1635
- src: thumbImage.url,
1636
- alt: thumbImage.altText ?? product.title,
1637
- loading: "lazy",
1638
- width: thumbImage.width ?? void 0,
1639
- height: thumbImage.height ?? void 0
1640
- }
1641
- ),
1642
- variantInBundle && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-mix-match__modal-added-badge", children: "Added" })
1643
- ] }),
1644
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-product-info", children: [
1645
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "lb-mix-match__modal-product-title", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1658
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1659
+ "div",
1660
+ {
1661
+ className: thumbImage ? "lb-mix-match__modal-product-thumb" : placeholderBoxClass("lb-mix-match__modal-product-thumb"),
1662
+ children: [
1663
+ thumbImage ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1664
+ "img",
1665
+ {
1666
+ src: thumbImage.url,
1667
+ alt: thumbImage.altText ?? product.title,
1668
+ loading: "lazy",
1669
+ width: thumbImage.width ?? void 0,
1670
+ height: thumbImage.height ?? void 0
1671
+ }
1672
+ ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PlaceholderMark, {}),
1673
+ variantInBundle && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__modal-added-badge", children: "Added" })
1674
+ ]
1675
+ }
1676
+ ),
1677
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__modal-product-info", children: [
1678
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "lb-mix-match__modal-product-title", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1646
1679
  "a",
1647
1680
  {
1648
1681
  href: `/products/${product.handle}`,
@@ -1651,24 +1684,24 @@ function MixMatchPickerRow({
1651
1684
  children: product.title
1652
1685
  }
1653
1686
  ) }),
1654
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "lb-mix-match__modal-product-price", children: [
1655
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-row-price-sale": true, children: (0, import_core9.formatMoney)(priceCents, currency) }),
1656
- compareCents !== null && compareCents > priceCents && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("s", { className: "lb-mix-match__modal-product-compare", "data-row-compare": true, children: (0, import_core9.formatMoney)(compareCents, currency) })
1687
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "lb-mix-match__modal-product-price", children: [
1688
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { "data-row-price-sale": true, children: (0, import_core9.formatMoney)(priceCents, currency) }),
1689
+ compareCents !== null && compareCents > priceCents && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("s", { className: "lb-mix-match__modal-product-compare", "data-row-compare": true, children: (0, import_core9.formatMoney)(compareCents, currency) })
1657
1690
  ] }),
1658
- unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "lb-mix-match__modal-product-unit-price lb-bundle-product-unit-price", children: unitPriceText }),
1659
- showPicker && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-bundle-variant-option-groups", children: optionNames.map((optionName, optionIndex) => {
1691
+ unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "lb-mix-match__modal-product-unit-price lb-bundle-product-unit-price", children: unitPriceText }),
1692
+ showPicker && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-bundle-variant-option-groups", children: optionNames.map((optionName, optionIndex) => {
1660
1693
  const dropdownOptions = optionsFor(optionIndex).map((o) => ({
1661
1694
  value: o.value,
1662
1695
  label: o.value,
1663
1696
  disabled: o.disabled
1664
1697
  }));
1665
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1698
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1666
1699
  "div",
1667
1700
  {
1668
1701
  className: "lb-bundle-variant-option-group",
1669
1702
  children: [
1670
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-bundle-variant-option-label", children: optionName }),
1671
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1703
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-bundle-variant-option-label", children: optionName }),
1704
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1672
1705
  VariantDropdown,
1673
1706
  {
1674
1707
  className: "lb-mix-match__variant-select-dropdown",
@@ -1683,17 +1716,17 @@ function MixMatchPickerRow({
1683
1716
  optionName
1684
1717
  );
1685
1718
  }) }),
1686
- !showPicker && variants.length === 1 && currentVariant.title !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-mix-match__filled-variant", children: currentVariant.title }),
1687
- !isOos && needsMoreSpots && remainingUnits > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-mix-match__modal-needs-spots", children: rule.min === 1 ? "Needs 1 spot" : `Needs ${rule.min} spots` }),
1688
- isOos ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "lb-mix-match__modal-sold-out-label", children: "Sold out" }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "lb-mix-match__modal-product-actions", children: [
1689
- showStepper && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "lb-bundle-variant-option-group lb-mix-match__qty-stepper-group", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1719
+ !showPicker && variants.length === 1 && currentVariant.title !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__filled-variant", children: currentVariant.title }),
1720
+ !isOos && needsMoreSpots && remainingUnits > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__modal-needs-spots", children: rule.min === 1 ? "Needs 1 spot" : `Needs ${rule.min} spots` }),
1721
+ isOos ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__modal-sold-out-label", children: "Sold out" }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__modal-product-actions", children: [
1722
+ showStepper && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-bundle-variant-option-group lb-mix-match__qty-stepper-group", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1690
1723
  "div",
1691
1724
  {
1692
1725
  className: "lb-mix-match__qty-stepper",
1693
1726
  role: "group",
1694
1727
  "aria-label": "Quantity",
1695
1728
  children: [
1696
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1729
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1697
1730
  "button",
1698
1731
  {
1699
1732
  type: "button",
@@ -1714,7 +1747,7 @@ function MixMatchPickerRow({
1714
1747
  children: "\u2212"
1715
1748
  }
1716
1749
  ),
1717
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1750
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1718
1751
  "span",
1719
1752
  {
1720
1753
  className: "lb-mix-match__qty-stepper-value",
@@ -1723,7 +1756,7 @@ function MixMatchPickerRow({
1723
1756
  children: shownQty
1724
1757
  }
1725
1758
  ),
1726
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1759
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1727
1760
  "button",
1728
1761
  {
1729
1762
  type: "button",
@@ -1747,7 +1780,7 @@ function MixMatchPickerRow({
1747
1780
  ]
1748
1781
  }
1749
1782
  ) }),
1750
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1783
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1751
1784
  "button",
1752
1785
  {
1753
1786
  type: "button",
@@ -1766,7 +1799,7 @@ function MixMatchPickerRow({
1766
1799
  );
1767
1800
  }
1768
1801
  function CloseIcon() {
1769
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1802
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1770
1803
  "svg",
1771
1804
  {
1772
1805
  width: "20",
@@ -1776,14 +1809,14 @@ function CloseIcon() {
1776
1809
  xmlns: "http://www.w3.org/2000/svg",
1777
1810
  "aria-hidden": "true",
1778
1811
  children: [
1779
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
1780
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
1812
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
1813
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
1781
1814
  ]
1782
1815
  }
1783
1816
  );
1784
1817
  }
1785
1818
  function SearchClearIcon() {
1786
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1819
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1787
1820
  "svg",
1788
1821
  {
1789
1822
  width: "16",
@@ -1792,13 +1825,13 @@ function SearchClearIcon() {
1792
1825
  fill: "currentColor",
1793
1826
  xmlns: "http://www.w3.org/2000/svg",
1794
1827
  "aria-hidden": "true",
1795
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M14.348 5.652a.5.5 0 0 0-.707 0L10 9.293 6.36 5.652a.5.5 0 1 0-.708.707L9.293 10l-3.641 3.641a.5.5 0 0 0 .708.707L10 10.707l3.641 3.641a.5.5 0 0 0 .707-.707L10.707 10l3.641-3.641a.5.5 0 0 0 0-.707z" })
1828
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M14.348 5.652a.5.5 0 0 0-.707 0L10 9.293 6.36 5.652a.5.5 0 1 0-.708.707L9.293 10l-3.641 3.641a.5.5 0 0 0 .708.707L10 10.707l3.641 3.641a.5.5 0 0 0 .707-.707L10.707 10l3.641-3.641a.5.5 0 0 0 0-.707z" })
1796
1829
  }
1797
1830
  );
1798
1831
  }
1799
1832
 
1800
1833
  // src/components/MixMatchBundle.tsx
1801
- var import_jsx_runtime5 = require("react/jsx-runtime");
1834
+ var import_jsx_runtime6 = require("react/jsx-runtime");
1802
1835
  function ruleFor2(bundle, productId, variantId) {
1803
1836
  if (variantId) {
1804
1837
  const vRule = bundle.variantRules[variantId];
@@ -2095,9 +2128,9 @@ function MixMatchBundle(props) {
2095
2128
  }
2096
2129
  }, [bundle, selections, valid, onAddToCart, onError, trackAddToCart, totalQuantity]);
2097
2130
  if (result.status === "loading") {
2098
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
2099
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
2100
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
2131
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
2132
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
2133
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
2101
2134
  ] });
2102
2135
  }
2103
2136
  if (result.status === "error") return null;
@@ -2116,7 +2149,7 @@ function MixMatchBundle(props) {
2116
2149
  if (requiredBlocked) return null;
2117
2150
  const currency = bundle.products[0]?.priceRange.minVariantPrice.currencyCode ?? "USD";
2118
2151
  const ctaLabel = addingToCart ? "Adding..." : bundle.widgetConfig.cta.ctaText || "Add to cart";
2119
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2152
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2120
2153
  "div",
2121
2154
  {
2122
2155
  ref: (el) => {
@@ -2128,19 +2161,19 @@ function MixMatchBundle(props) {
2128
2161
  "aria-label": bundle.title,
2129
2162
  "data-required-quantity": requiredUnits,
2130
2163
  children: [
2131
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-bundle-header__content", children: [
2132
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
2133
- bundle.description && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
2164
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle-header__content", children: [
2165
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
2166
+ bundle.description && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
2134
2167
  ] }) }),
2135
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2168
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2136
2169
  BundleCountdown,
2137
2170
  {
2138
2171
  endsAt: bundle.endsAt,
2139
2172
  widgetConfig: bundle.widgetConfig
2140
2173
  }
2141
2174
  ),
2142
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__progress", "data-progress": true, children: [
2143
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2175
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-mix-match__progress", "data-progress": true, children: [
2176
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2144
2177
  "div",
2145
2178
  {
2146
2179
  className: "lb-mix-match__progress-segments",
@@ -2148,7 +2181,7 @@ function MixMatchBundle(props) {
2148
2181
  "aria-valuenow": shownUnits,
2149
2182
  "aria-valuemin": 0,
2150
2183
  "aria-valuemax": requiredUnits,
2151
- children: Array.from({ length: requiredUnits }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2184
+ children: Array.from({ length: requiredUnits }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2152
2185
  "span",
2153
2186
  {
2154
2187
  className: `lb-mix-match__progress-segment${i < shownUnits ? " lb-mix-match__progress-segment--filled" : ""}`,
@@ -2158,8 +2191,8 @@ function MixMatchBundle(props) {
2158
2191
  ))
2159
2192
  }
2160
2193
  ),
2161
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__progress-labels", children: [
2162
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2194
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-mix-match__progress-labels", children: [
2195
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2163
2196
  "span",
2164
2197
  {
2165
2198
  className: "lb-mix-match__progress-count",
@@ -2168,7 +2201,7 @@ function MixMatchBundle(props) {
2168
2201
  children: `${shownUnits} of ${requiredUnits} added`
2169
2202
  }
2170
2203
  ),
2171
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2204
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2172
2205
  "span",
2173
2206
  {
2174
2207
  className: "lb-mix-match__progress-remaining",
@@ -2179,7 +2212,7 @@ function MixMatchBundle(props) {
2179
2212
  )
2180
2213
  ] })
2181
2214
  ] }),
2182
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2215
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2183
2216
  "div",
2184
2217
  {
2185
2218
  className: "lb-mix-match__slots lb-edge-fade",
@@ -2190,15 +2223,21 @@ function MixMatchBundle(props) {
2190
2223
  button provides the keyboard/AT path (its activation bubbles
2191
2224
  here); × stops propagation. */
2192
2225
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -- keyboard path is the inner "Edit selection" title button whose activation bubbles to this handler
2193
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2226
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2194
2227
  "div",
2195
2228
  {
2196
2229
  className: "lb-mix-match__slot lb-mix-match__slot--filled",
2197
2230
  onClick: () => setPickerOpen(true),
2198
2231
  children: [
2199
- item.featuredImage && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-bundle-thumbnail", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("img", { src: item.featuredImage, alt: item.title, loading: "lazy" }) }),
2200
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-mix-match__filled-info", children: [
2201
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2232
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2233
+ "div",
2234
+ {
2235
+ className: item.featuredImage ? "lb-bundle-thumbnail" : placeholderBoxClass("lb-bundle-thumbnail"),
2236
+ children: item.featuredImage ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: item.featuredImage, alt: item.title, loading: "lazy" }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PlaceholderMark, {})
2237
+ }
2238
+ ),
2239
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-mix-match__filled-info", children: [
2240
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2202
2241
  "button",
2203
2242
  {
2204
2243
  type: "button",
@@ -2207,15 +2246,15 @@ function MixMatchBundle(props) {
2207
2246
  children: item.title
2208
2247
  }
2209
2248
  ),
2210
- item.variantTitle && item.variantTitle !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__filled-variant", children: item.variantTitle }),
2211
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "lb-mix-match__filled-price", children: [
2212
- item.compareAtPrice !== null && item.compareAtPrice > item.price && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("s", { className: "lb-mix-match__filled-compare", children: (0, import_core10.formatMoney)(item.compareAtPrice, currency) }),
2213
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-bundle-product-price", children: (0, import_core10.formatMoney)(item.price, currency) }),
2214
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-bundle-qty-inline", children: `\xD7${item.quantity}` })
2249
+ item.variantTitle && item.variantTitle !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-mix-match__filled-variant", children: item.variantTitle }),
2250
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-mix-match__filled-price", children: [
2251
+ item.compareAtPrice !== null && item.compareAtPrice > item.price && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("s", { className: "lb-mix-match__filled-compare", children: (0, import_core10.formatMoney)(item.compareAtPrice, currency) }),
2252
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-product-price", children: (0, import_core10.formatMoney)(item.price, currency) }),
2253
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-qty-inline", children: `\xD7${item.quantity}` })
2215
2254
  ] }),
2216
- item.unitPrice && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-bundle-product-unit-price", children: item.unitPrice })
2255
+ item.unitPrice && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-product-unit-price", children: item.unitPrice })
2217
2256
  ] }),
2218
- canRemoveItem(bundle, selections, item) ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2257
+ canRemoveItem(bundle, selections, item) ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2219
2258
  "button",
2220
2259
  {
2221
2260
  type: "button",
@@ -2225,13 +2264,13 @@ function MixMatchBundle(props) {
2225
2264
  e.stopPropagation();
2226
2265
  removeSlot(index);
2227
2266
  },
2228
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon2, {})
2267
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(CloseIcon2, {})
2229
2268
  }
2230
2269
  ) : (
2231
2270
  /* Required pick at its floor — quiet state chip instead of
2232
2271
  the ×; removal returns once another slot covers the
2233
2272
  product's minimum (variant swap flow). */
2234
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__slot-required", children: "Required" })
2273
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-mix-match__slot-required", children: "Required" })
2235
2274
  )
2236
2275
  ]
2237
2276
  },
@@ -2240,7 +2279,7 @@ function MixMatchBundle(props) {
2240
2279
  ))
2241
2280
  }
2242
2281
  ),
2243
- totalQuantity < requiredUnits && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2282
+ totalQuantity < requiredUnits && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2244
2283
  "button",
2245
2284
  {
2246
2285
  type: "button",
@@ -2248,34 +2287,34 @@ function MixMatchBundle(props) {
2248
2287
  "data-add-product-trigger": true,
2249
2288
  onClick: () => setPickerOpen(true),
2250
2289
  children: [
2251
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__add-product-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PlusIcon, {}) }),
2252
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-mix-match__add-product-label", children: "Add a product" })
2290
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-mix-match__add-product-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PlusIcon, {}) }),
2291
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-mix-match__add-product-label", children: "Add a product" })
2253
2292
  ]
2254
2293
  }
2255
2294
  ),
2256
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "lb-bundle-divider" }),
2257
- selections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-bundle-summary", "data-pricing-section": true, children: [
2258
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "lb-bundle-summary__text", children: [
2259
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
2260
- bundle.widgetConfig.savingsBar.visible && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
2295
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-bundle-divider" }),
2296
+ selections.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle-summary", "data-pricing-section": true, children: [
2297
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle-summary__text", children: [
2298
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
2299
+ bundle.widgetConfig.savingsBar.visible && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
2261
2300
  "You save",
2262
2301
  " ",
2263
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { "data-savings-amount": true, children: (0, import_core10.formatMoney)(summary.savings, currency) }),
2302
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-savings-amount": true, children: (0, import_core10.formatMoney)(summary.savings, currency) }),
2264
2303
  " ",
2265
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { "data-savings-percent": true, children: [
2304
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { "data-savings-percent": true, children: [
2266
2305
  "(",
2267
2306
  summary.savingsPercent,
2268
2307
  "%)"
2269
2308
  ] })
2270
2309
  ] })
2271
2310
  ] }),
2272
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
2273
- bundle.widgetConfig.pricing.showComparePrice && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core10.formatMoney)(summary.comparePrice, currency) }),
2274
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core10.formatMoney)(summary.salePrice, currency) })
2311
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
2312
+ bundle.widgetConfig.pricing.showComparePrice && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core10.formatMoney)(summary.comparePrice, currency) }),
2313
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core10.formatMoney)(summary.salePrice, currency) })
2275
2314
  ] })
2276
2315
  ] }),
2277
- cartError && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
2278
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2316
+ cartError && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
2317
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2279
2318
  "button",
2280
2319
  {
2281
2320
  className: "lb-bundle__cta",
@@ -2285,7 +2324,7 @@ function MixMatchBundle(props) {
2285
2324
  children: ctaLabel
2286
2325
  }
2287
2326
  ),
2288
- pickerOpen && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2327
+ pickerOpen && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2289
2328
  MixMatchPicker,
2290
2329
  {
2291
2330
  bundle,
@@ -2325,7 +2364,7 @@ function countInStockProducts(bundle) {
2325
2364
  return count;
2326
2365
  }
2327
2366
  function PlusIcon() {
2328
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2367
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2329
2368
  "svg",
2330
2369
  {
2331
2370
  width: "18",
@@ -2335,14 +2374,14 @@ function PlusIcon() {
2335
2374
  xmlns: "http://www.w3.org/2000/svg",
2336
2375
  "aria-hidden": "true",
2337
2376
  children: [
2338
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "9", y1: "3", x2: "9", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
2339
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "3", y1: "9", x2: "15", y2: "9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
2377
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("line", { x1: "9", y1: "3", x2: "9", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
2378
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("line", { x1: "3", y1: "9", x2: "15", y2: "9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
2340
2379
  ]
2341
2380
  }
2342
2381
  );
2343
2382
  }
2344
2383
  function CloseIcon2() {
2345
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2384
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2346
2385
  "svg",
2347
2386
  {
2348
2387
  width: "16",
@@ -2352,8 +2391,8 @@ function CloseIcon2() {
2352
2391
  xmlns: "http://www.w3.org/2000/svg",
2353
2392
  "aria-hidden": "true",
2354
2393
  children: [
2355
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
2356
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
2394
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
2395
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
2357
2396
  ]
2358
2397
  }
2359
2398
  );
@@ -2362,7 +2401,7 @@ function CloseIcon2() {
2362
2401
  // src/components/VolumeBundle.tsx
2363
2402
  var import_react13 = require("react");
2364
2403
  var import_core11 = require("@lime-bundles/core");
2365
- var import_jsx_runtime6 = require("react/jsx-runtime");
2404
+ var import_jsx_runtime7 = require("react/jsx-runtime");
2366
2405
  function VolumeBundle(props) {
2367
2406
  const {
2368
2407
  shopDomain,
@@ -2529,15 +2568,15 @@ function VolumeBundle(props) {
2529
2568
  tierSavings
2530
2569
  ]);
2531
2570
  if (result.status === "loading") {
2532
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
2533
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
2534
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-skeleton lb-skeleton--tiers" })
2571
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
2572
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
2573
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-skeleton lb-skeleton--tiers" })
2535
2574
  ] });
2536
2575
  }
2537
2576
  if (result.status === "error") return null;
2538
2577
  if (!bundle) return null;
2539
2578
  if (!product) return null;
2540
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2579
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
2541
2580
  "div",
2542
2581
  {
2543
2582
  ref: (el) => {
@@ -2548,19 +2587,19 @@ function VolumeBundle(props) {
2548
2587
  role: "region",
2549
2588
  "aria-label": bundle.title,
2550
2589
  children: [
2551
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle-header__content", children: [
2552
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
2553
- bundle.description && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
2590
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-header__content", children: [
2591
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
2592
+ bundle.description && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
2554
2593
  ] }) }),
2555
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2594
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2556
2595
  BundleCountdown,
2557
2596
  {
2558
2597
  endsAt: bundle.endsAt,
2559
2598
  widgetConfig: bundle.widgetConfig
2560
2599
  }
2561
2600
  ),
2562
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle-product-row lb-bundle-product-row--volume", children: [
2563
- thumbImage && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2601
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-product-row lb-bundle-product-row--volume", children: [
2602
+ thumbImage ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2564
2603
  "img",
2565
2604
  {
2566
2605
  src: thumbImage.url,
@@ -2570,21 +2609,21 @@ function VolumeBundle(props) {
2570
2609
  width: thumbImage.width ?? void 0,
2571
2610
  height: thumbImage.height ?? void 0
2572
2611
  }
2573
- ),
2574
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle__product-info", children: [
2575
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "lb-bundle__product-title", children: product.title }),
2576
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("p", { className: "lb-bundle__product-price", children: [
2612
+ ) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ThumbnailPlaceholder, { className: "lb-bundle__product-image" }),
2613
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle__product-info", children: [
2614
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "lb-bundle__product-title", children: product.title }),
2615
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("p", { className: "lb-bundle__product-price", children: [
2577
2616
  (0, import_core11.formatMoney)(basePrice, currency),
2578
2617
  " each"
2579
2618
  ] }),
2580
- unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "lb-bundle__product-unit-price", children: unitPriceText }),
2581
- showPicker && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-bundle__product-variant-pickers", children: optionNames.map((optionName, optionIndex) => {
2619
+ unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "lb-bundle__product-unit-price", children: unitPriceText }),
2620
+ showPicker && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-bundle__product-variant-pickers", children: optionNames.map((optionName, optionIndex) => {
2582
2621
  const dropdownOptions = optionsFor(optionIndex).map((o) => ({
2583
2622
  value: o.value,
2584
2623
  label: o.value,
2585
2624
  disabled: o.disabled
2586
2625
  }));
2587
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2626
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2588
2627
  VariantDropdown,
2589
2628
  {
2590
2629
  options: dropdownOptions,
@@ -2597,7 +2636,7 @@ function VolumeBundle(props) {
2597
2636
  }) })
2598
2637
  ] })
2599
2638
  ] }),
2600
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2639
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2601
2640
  "div",
2602
2641
  {
2603
2642
  className: "lb-bundle__tiers lb-edge-fade",
@@ -2609,7 +2648,7 @@ function VolumeBundle(props) {
2609
2648
  const showCompare = bundle.widgetConfig.pricing.showComparePrice && ts.savings > 0;
2610
2649
  const isChecked = activeTier === ts.tier;
2611
2650
  const available = tierAvailable(ts.tier.minQuantity);
2612
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2651
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
2613
2652
  "div",
2614
2653
  {
2615
2654
  className: `lb-bundle__tier ${ts.isActive ? "lb-bundle__tier--active" : ""} ${available ? "" : "lb-bundle__tier--oos"}`,
@@ -2627,21 +2666,21 @@ function VolumeBundle(props) {
2627
2666
  }
2628
2667
  },
2629
2668
  children: [
2630
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle__tier-radio", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle__tier-radio-dot" }) }),
2631
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle__tier-info", children: [
2632
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle__tier-label", children: [
2669
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle__tier-radio", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle__tier-radio-dot" }) }),
2670
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle__tier-info", children: [
2671
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle__tier-label", children: [
2633
2672
  "Buy ",
2634
2673
  ts.tier.minQuantity
2635
2674
  ] }),
2636
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle__tier-price", children: [
2637
- showCompare && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle__tier-compare", children: (0, import_core11.formatMoney)(basePrice, currency) }),
2638
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: (0, import_core11.formatMoney)(ts.unitPrice, currency) }),
2639
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle__tier-unit", children: "each" })
2675
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle__tier-price", children: [
2676
+ showCompare && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle__tier-compare", children: (0, import_core11.formatMoney)(basePrice, currency) }),
2677
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: (0, import_core11.formatMoney)(ts.unitPrice, currency) }),
2678
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle__tier-unit", children: "each" })
2640
2679
  ] })
2641
2680
  ] }),
2642
- (tierIndex === popularTierIndex || savingsPercent > 0) && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle__tier-right", children: [
2643
- tierIndex === popularTierIndex && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle__tier-badge", children: bundle.widgetConfig.popularBadge.text }),
2644
- savingsPercent > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle__tier-savings", children: [
2681
+ (tierIndex === popularTierIndex || savingsPercent > 0) && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle__tier-right", children: [
2682
+ tierIndex === popularTierIndex && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle__tier-badge", children: bundle.widgetConfig.popularBadge.text }),
2683
+ savingsPercent > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle__tier-savings", children: [
2645
2684
  "Save ",
2646
2685
  savingsPercent,
2647
2686
  "%"
@@ -2654,10 +2693,10 @@ function VolumeBundle(props) {
2654
2693
  })
2655
2694
  }
2656
2695
  ),
2657
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle__quantity-selector", children: [
2658
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("label", { htmlFor: `lb-qty-${bundle.id}`, children: "Quantity" }),
2659
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle__quantity-control", children: [
2660
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2696
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle__quantity-selector", children: [
2697
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("label", { htmlFor: `lb-qty-${bundle.id}`, children: "Quantity" }),
2698
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle__quantity-control", children: [
2699
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2661
2700
  "button",
2662
2701
  {
2663
2702
  "aria-label": "Decrease quantity",
@@ -2665,7 +2704,7 @@ function VolumeBundle(props) {
2665
2704
  children: "\u2212"
2666
2705
  }
2667
2706
  ),
2668
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2707
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2669
2708
  "input",
2670
2709
  {
2671
2710
  id: `lb-qty-${bundle.id}`,
@@ -2679,7 +2718,7 @@ function VolumeBundle(props) {
2679
2718
  className: "lb-bundle__quantity-input"
2680
2719
  }
2681
2720
  ),
2682
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2721
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2683
2722
  "button",
2684
2723
  {
2685
2724
  "aria-label": "Increase quantity",
@@ -2689,23 +2728,23 @@ function VolumeBundle(props) {
2689
2728
  )
2690
2729
  ] })
2691
2730
  ] }),
2692
- cartError && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
2731
+ cartError && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
2693
2732
  bundle && displayVariant && (0, import_core11.shouldShowLowStockBadge)(
2694
2733
  displayVariant,
2695
2734
  minTierQty,
2696
2735
  bundle.widgetConfig.lowStockThreshold,
2697
2736
  bundle.widgetConfig.showLowStockBadge
2698
- ) && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle-low-stock-badge", children: [
2737
+ ) && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle-low-stock-badge", children: [
2699
2738
  "Only ",
2700
2739
  displayVariant.quantityAvailable,
2701
2740
  " left"
2702
2741
  ] }),
2703
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "lb-bundle-divider" }),
2704
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle-summary", children: [
2705
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "lb-bundle-summary__text", children: [
2706
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle-summary__label", "data-total-label": true, children: [
2742
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-bundle-divider" }),
2743
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-summary", children: [
2744
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-summary__text", children: [
2745
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle-summary__label", "data-total-label": true, children: [
2707
2746
  "Total",
2708
- bundle.widgetConfig.pricing.showItemCount && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { "data-item-count": true, children: [
2747
+ bundle.widgetConfig.pricing.showItemCount && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { "data-item-count": true, children: [
2709
2748
  " ",
2710
2749
  "(",
2711
2750
  quantity,
@@ -2714,24 +2753,24 @@ function VolumeBundle(props) {
2714
2753
  ")"
2715
2754
  ] })
2716
2755
  ] }),
2717
- bundle.widgetConfig.savingsBar.visible && volumeSavings > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
2756
+ bundle.widgetConfig.savingsBar.visible && volumeSavings > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
2718
2757
  "You save",
2719
2758
  " ",
2720
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-savings-amount": true, children: (0, import_core11.formatMoney)(volumeSavings, currency) }),
2759
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { "data-savings-amount": true, children: (0, import_core11.formatMoney)(volumeSavings, currency) }),
2721
2760
  " ",
2722
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { "data-savings-percent": true, children: [
2761
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { "data-savings-percent": true, children: [
2723
2762
  "(",
2724
2763
  volumeSavingsPercent,
2725
2764
  "%)"
2726
2765
  ] })
2727
2766
  ] })
2728
2767
  ] }),
2729
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
2730
- bundle.widgetConfig.pricing.showComparePrice && volumeSavings > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core11.formatMoney)(undiscountedTotal, currency) }),
2731
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "lb-bundle-sale-price", "data-total-price": true, children: (0, import_core11.formatMoney)(volumeTotal, currency) })
2768
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
2769
+ bundle.widgetConfig.pricing.showComparePrice && volumeSavings > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core11.formatMoney)(undiscountedTotal, currency) }),
2770
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle-sale-price", "data-total-price": true, children: (0, import_core11.formatMoney)(volumeTotal, currency) })
2732
2771
  ] })
2733
2772
  ] }),
2734
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2773
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2735
2774
  "button",
2736
2775
  {
2737
2776
  className: "lb-bundle__cta",
@@ -2749,7 +2788,7 @@ function VolumeBundle(props) {
2749
2788
  // src/components/BogoBundle.tsx
2750
2789
  var import_react14 = require("react");
2751
2790
  var import_core12 = require("@lime-bundles/core");
2752
- var import_jsx_runtime7 = require("react/jsx-runtime");
2791
+ var import_jsx_runtime8 = require("react/jsx-runtime");
2753
2792
  function discountedUnit(price, percent) {
2754
2793
  const cents = Math.round(price * 100);
2755
2794
  const discounted = cents - Math.floor(cents * percent / 100);
@@ -2883,9 +2922,9 @@ function BogoBundle(props) {
2883
2922
  }
2884
2923
  }, [bundle, buyProduct, getProduct, selectedVariants, resolveVariant, onAddToCart, onError, trackAddToCart, percent]);
2885
2924
  if (result.status === "loading") {
2886
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
2887
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
2888
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
2925
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
2926
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
2927
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
2889
2928
  ] });
2890
2929
  }
2891
2930
  if (result.status === "error") return null;
@@ -2902,7 +2941,7 @@ function BogoBundle(props) {
2902
2941
  const showCompare = bundle.widgetConfig.pricing.showComparePrice && savings > 0;
2903
2942
  const showSavings = bundle.widgetConfig.savingsBar.visible && savings > 0;
2904
2943
  const badge = percent === 100 ? "Free" : `${percent}% off`;
2905
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
2944
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2906
2945
  "div",
2907
2946
  {
2908
2947
  ref: (el) => {
@@ -2913,19 +2952,19 @@ function BogoBundle(props) {
2913
2952
  role: "region",
2914
2953
  "aria-label": bundle.title,
2915
2954
  children: [
2916
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-header__content", children: [
2917
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
2918
- bundle.description && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
2955
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-bundle-header__content", children: [
2956
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
2957
+ bundle.description && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
2919
2958
  ] }) }),
2920
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2959
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2921
2960
  BundleCountdown,
2922
2961
  {
2923
2962
  endsAt: bundle.endsAt,
2924
2963
  widgetConfig: bundle.widgetConfig
2925
2964
  }
2926
2965
  ),
2927
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle__products", children: [
2928
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2966
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-bundle__products", children: [
2967
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2929
2968
  BogoProductRow,
2930
2969
  {
2931
2970
  side: "buy",
@@ -2937,11 +2976,11 @@ function BogoBundle(props) {
2937
2976
  onVariantChange: handleVariantChange
2938
2977
  }
2939
2978
  ),
2940
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-bogo__plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("svg", { width: "12", height: "12", viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
2941
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("line", { x1: "9", y1: "3", x2: "9", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
2942
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("line", { x1: "3", y1: "9", x2: "15", y2: "9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
2979
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-bogo__plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("svg", { width: "12", height: "12", viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
2980
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("line", { x1: "9", y1: "3", x2: "9", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
2981
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("line", { x1: "3", y1: "9", x2: "15", y2: "9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
2943
2982
  ] }) }),
2944
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2983
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2945
2984
  BogoProductRow,
2946
2985
  {
2947
2986
  side: "get",
@@ -2954,29 +2993,29 @@ function BogoBundle(props) {
2954
2993
  }
2955
2994
  )
2956
2995
  ] }),
2957
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-bundle-divider" }),
2958
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-summary", children: [
2959
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-summary__text", children: [
2960
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
2961
- showSavings && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
2996
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-bundle-divider" }),
2997
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-bundle-summary", children: [
2998
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-bundle-summary__text", children: [
2999
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
3000
+ showSavings && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
2962
3001
  "You save",
2963
3002
  " ",
2964
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { "data-savings-amount": true, children: (0, import_core12.formatMoney)(savings, currency) }),
3003
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "data-savings-amount": true, children: (0, import_core12.formatMoney)(savings, currency) }),
2965
3004
  " ",
2966
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { "data-savings-percent": true, children: [
3005
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { "data-savings-percent": true, children: [
2967
3006
  "(",
2968
3007
  savingsPercent,
2969
3008
  "%)"
2970
3009
  ] })
2971
3010
  ] })
2972
3011
  ] }),
2973
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
2974
- showCompare && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core12.formatMoney)(comparePrice, currency) }),
2975
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core12.formatMoney)(salePrice, currency) })
3012
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
3013
+ showCompare && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core12.formatMoney)(comparePrice, currency) }),
3014
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core12.formatMoney)(salePrice, currency) })
2976
3015
  ] })
2977
3016
  ] }),
2978
- cartError && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
2979
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
3017
+ cartError && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
3018
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2980
3019
  "button",
2981
3020
  {
2982
3021
  className: "lb-bundle__cta",
@@ -3015,8 +3054,8 @@ function BogoProductRow({ side, product, quantity, percent, badge, currency, onV
3015
3054
  currency
3016
3055
  ) : null;
3017
3056
  const thumbImage = displayVariant?.image ?? product.featuredImage;
3018
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle-product-row", part: "product", "data-bogo-role": side, children: [
3019
- thumbImage && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
3057
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-bundle-product-row", part: "product", "data-bogo-role": side, children: [
3058
+ thumbImage ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3020
3059
  "img",
3021
3060
  {
3022
3061
  src: thumbImage.url,
@@ -3026,12 +3065,12 @@ function BogoProductRow({ side, product, quantity, percent, badge, currency, onV
3026
3065
  width: thumbImage.width ?? void 0,
3027
3066
  height: thumbImage.height ?? void 0
3028
3067
  }
3029
- ),
3030
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "lb-bundle__product-info", children: [
3031
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "lb-bundle__product-title", children: product.title }),
3032
- !showPicker && displayVariant && variants.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle-variant-badge", children: displayVariant.title }),
3033
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle-product-prices", children: [
3034
- compareAt && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
3068
+ ) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ThumbnailPlaceholder, { className: "lb-bundle__product-image" }),
3069
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-bundle__product-info", children: [
3070
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "lb-bundle__product-title", children: product.title }),
3071
+ !showPicker && displayVariant && variants.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-bundle-variant-badge", children: displayVariant.title }),
3072
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "lb-bundle-product-prices", children: [
3073
+ compareAt && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3035
3074
  "span",
3036
3075
  {
3037
3076
  className: "lb-bundle-product-compare-price",
@@ -3039,13 +3078,13 @@ function BogoProductRow({ side, product, quantity, percent, badge, currency, onV
3039
3078
  children: compareAt
3040
3079
  }
3041
3080
  ),
3042
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bundle__product-price", "data-product-price": true, children: priceText }),
3043
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { className: "lb-bundle-qty-inline", "data-qty-inline": true, children: [
3081
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-bundle__product-price", "data-product-price": true, children: priceText }),
3082
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "lb-bundle-qty-inline", "data-qty-inline": true, children: [
3044
3083
  "\xD7",
3045
3084
  quantity
3046
3085
  ] })
3047
3086
  ] }),
3048
- unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
3087
+ unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3049
3088
  "span",
3050
3089
  {
3051
3090
  className: "lb-bundle__product-unit-price",
@@ -3053,13 +3092,13 @@ function BogoProductRow({ side, product, quantity, percent, badge, currency, onV
3053
3092
  children: unitPriceText
3054
3093
  }
3055
3094
  ),
3056
- showPicker && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "lb-bundle__product-variant-pickers", children: optionNames.map((optionName, optionIndex) => {
3095
+ showPicker && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-bundle__product-variant-pickers", children: optionNames.map((optionName, optionIndex) => {
3057
3096
  const dropdownOptions = optionsFor(optionIndex).map((o) => ({
3058
3097
  value: o.value,
3059
3098
  label: o.value,
3060
3099
  disabled: o.disabled
3061
3100
  }));
3062
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
3101
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3063
3102
  VariantDropdown,
3064
3103
  {
3065
3104
  options: dropdownOptions,
@@ -3071,7 +3110,7 @@ function BogoProductRow({ side, product, quantity, percent, badge, currency, onV
3071
3110
  );
3072
3111
  }) })
3073
3112
  ] }),
3074
- badge && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "lb-bogo__badge", children: badge })
3113
+ badge && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-bogo__badge", children: badge })
3075
3114
  ] });
3076
3115
  }
3077
3116
 
@@ -3083,7 +3122,7 @@ var import_core14 = require("@lime-bundles/core");
3083
3122
  var import_react15 = require("react");
3084
3123
  var import_react_dom2 = require("react-dom");
3085
3124
  var import_core13 = require("@lime-bundles/core");
3086
- var import_jsx_runtime8 = require("react/jsx-runtime");
3125
+ var import_jsx_runtime9 = require("react/jsx-runtime");
3087
3126
  function ruleFor3(bundle, productId, variantId) {
3088
3127
  if (variantId) {
3089
3128
  const vRule = bundle.variantRules[variantId];
@@ -3284,7 +3323,7 @@ function MultiStepPicker({
3284
3323
  // inside carries the interactive role + focus trap. So the static-element
3285
3324
  // interaction lint does not apply to this backdrop.
3286
3325
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
3287
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3326
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3288
3327
  "div",
3289
3328
  {
3290
3329
  ref: (el) => {
@@ -3296,7 +3335,7 @@ function MultiStepPicker({
3296
3335
  "data-bundle-gid": bundle.id,
3297
3336
  onMouseDown: onOverlayMouseDown,
3298
3337
  onMouseUp: onOverlayMouseUp,
3299
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
3338
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
3300
3339
  "div",
3301
3340
  {
3302
3341
  ref: dialogRef,
@@ -3306,10 +3345,10 @@ function MultiStepPicker({
3306
3345
  "aria-labelledby": titleId,
3307
3346
  tabIndex: -1,
3308
3347
  children: [
3309
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-header", children: [
3310
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-header-top", children: [
3311
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-heading", children: [
3312
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3348
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__modal-header", children: [
3349
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__modal-header-top", children: [
3350
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__modal-heading", children: [
3351
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3313
3352
  "h4",
3314
3353
  {
3315
3354
  className: "lb-mix-match__modal-title",
@@ -3319,9 +3358,9 @@ function MultiStepPicker({
3319
3358
  children: "Add to your bundle"
3320
3359
  }
3321
3360
  ),
3322
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "lb-mix-match__modal-subtitle", "data-modal-subtitle": true, children: subtitle })
3361
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "lb-mix-match__modal-subtitle", "data-modal-subtitle": true, children: subtitle })
3323
3362
  ] }),
3324
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3363
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3325
3364
  "button",
3326
3365
  {
3327
3366
  ref: closeBtnRef,
@@ -3330,16 +3369,16 @@ function MultiStepPicker({
3330
3369
  "data-modal-close": true,
3331
3370
  "aria-label": "Close",
3332
3371
  onClick: onClose,
3333
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CloseIcon3, {})
3372
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CloseIcon3, {})
3334
3373
  }
3335
3374
  )
3336
3375
  ] }),
3337
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3376
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3338
3377
  "div",
3339
3378
  {
3340
3379
  className: "lb-mix-match__progress lb-mix-match__modal-progress",
3341
3380
  "data-progress": true,
3342
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3381
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3343
3382
  "div",
3344
3383
  {
3345
3384
  className: "lb-mix-match__progress-segments",
@@ -3348,7 +3387,7 @@ function MultiStepPicker({
3348
3387
  "aria-valuenow": shownUnits,
3349
3388
  "aria-valuemin": 0,
3350
3389
  "aria-valuemax": stepMin,
3351
- children: Array.from({ length: stepMin }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3390
+ children: Array.from({ length: stepMin }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3352
3391
  "span",
3353
3392
  {
3354
3393
  className: `lb-mix-match__progress-segment${i < shownUnits ? " lb-mix-match__progress-segment--filled" : ""}`,
@@ -3361,8 +3400,8 @@ function MultiStepPicker({
3361
3400
  }
3362
3401
  )
3363
3402
  ] }),
3364
- wc.showSearch && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-search", children: [
3365
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3403
+ wc.showSearch && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__modal-search", children: [
3404
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3366
3405
  "input",
3367
3406
  {
3368
3407
  type: "text",
@@ -3376,7 +3415,7 @@ function MultiStepPicker({
3376
3415
  onChange: (e) => setQuery(e.target.value)
3377
3416
  }
3378
3417
  ),
3379
- query.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3418
+ query.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3380
3419
  "button",
3381
3420
  {
3382
3421
  type: "button",
@@ -3384,11 +3423,11 @@ function MultiStepPicker({
3384
3423
  "data-modal-search-clear": true,
3385
3424
  "aria-label": "Clear search",
3386
3425
  onClick: () => setQuery(""),
3387
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SearchClearIcon2, {})
3426
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SearchClearIcon2, {})
3388
3427
  }
3389
3428
  )
3390
3429
  ] }),
3391
- showFilters && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3430
+ showFilters && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3392
3431
  "div",
3393
3432
  {
3394
3433
  className: "lb-mix-match__filters",
@@ -3397,7 +3436,7 @@ function MultiStepPicker({
3397
3436
  "aria-label": "Filter by product type",
3398
3437
  children: [FILTERS_ALL2, ...productTypes].map((value) => {
3399
3438
  const isActive = value === activeType;
3400
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3439
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3401
3440
  "button",
3402
3441
  {
3403
3442
  type: "button",
@@ -3412,7 +3451,7 @@ function MultiStepPicker({
3412
3451
  })
3413
3452
  }
3414
3453
  ),
3415
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-mix-match__modal-list", "data-modal-list": true, ref: listRef, children: filtered.map((ep) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3454
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-mix-match__modal-list", "data-modal-list": true, ref: listRef, children: filtered.map((ep) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3416
3455
  MultiStepPickerRow,
3417
3456
  {
3418
3457
  bundle,
@@ -3430,10 +3469,10 @@ function MultiStepPicker({
3430
3469
  },
3431
3470
  `${stepIndex}:${ep.product.id}`
3432
3471
  )) }),
3433
- showEmpty && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-mix-match__modal-empty", "data-modal-empty": true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { children: "No products match your search" }) }),
3434
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "data-modal-live": true, "aria-live": "polite", className: "lb-visually-hidden", children: announcement || (query.trim() ? `${filtered.length} products shown` : "") }),
3435
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-footer lb-multi-step__modal-footer", children: [
3436
- stepIndex > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3472
+ showEmpty && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-mix-match__modal-empty", "data-modal-empty": true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { children: "No products match your search" }) }),
3473
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { "data-modal-live": true, "aria-live": "polite", className: "lb-visually-hidden", children: announcement || (query.trim() ? `${filtered.length} products shown` : "") }),
3474
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__modal-footer lb-multi-step__modal-footer", children: [
3475
+ stepIndex > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3437
3476
  "button",
3438
3477
  {
3439
3478
  type: "button",
@@ -3443,7 +3482,7 @@ function MultiStepPicker({
3443
3482
  children: "Back"
3444
3483
  }
3445
3484
  ),
3446
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3485
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3447
3486
  "span",
3448
3487
  {
3449
3488
  className: "lb-mix-match__modal-footer-count",
@@ -3452,7 +3491,7 @@ function MultiStepPicker({
3452
3491
  children: `${shownUnits} of ${stepMin} added`
3453
3492
  }
3454
3493
  ),
3455
- !isLastStep && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3494
+ !isLastStep && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3456
3495
  "button",
3457
3496
  {
3458
3497
  type: "button",
@@ -3465,7 +3504,7 @@ function MultiStepPicker({
3465
3504
  children: "Next"
3466
3505
  }
3467
3506
  ),
3468
- isLastStep && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3507
+ isLastStep && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3469
3508
  "button",
3470
3509
  {
3471
3510
  type: "button",
@@ -3608,7 +3647,7 @@ function MultiStepPickerRow({
3608
3647
  }
3609
3648
  const priceCents = parseFloat(currentVariant.price.amount);
3610
3649
  const compareCents = currentVariant.compareAtPrice ? parseFloat(currentVariant.compareAtPrice.amount) : null;
3611
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
3650
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
3612
3651
  "div",
3613
3652
  {
3614
3653
  className: `lb-mix-match__modal-product${isOos ? " lb-mix-match__modal-product--sold-out" : ""}${variantInStep ? " lb-mix-match__modal-product--in-bundle" : ""}`,
@@ -3617,21 +3656,27 @@ function MultiStepPickerRow({
3617
3656
  "data-type": product.productType ?? "",
3618
3657
  "aria-disabled": isOos || void 0,
3619
3658
  children: [
3620
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-product-thumb", children: [
3621
- thumbImage && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3622
- "img",
3623
- {
3624
- src: thumbImage.url,
3625
- alt: thumbImage.altText ?? product.title,
3626
- loading: "lazy",
3627
- width: thumbImage.width ?? void 0,
3628
- height: thumbImage.height ?? void 0
3629
- }
3630
- ),
3631
- variantInStep && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-mix-match__modal-added-badge", children: "Added" })
3632
- ] }),
3633
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-product-info", children: [
3634
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "lb-mix-match__modal-product-title", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3659
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
3660
+ "div",
3661
+ {
3662
+ className: thumbImage ? "lb-mix-match__modal-product-thumb" : placeholderBoxClass("lb-mix-match__modal-product-thumb"),
3663
+ children: [
3664
+ thumbImage ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3665
+ "img",
3666
+ {
3667
+ src: thumbImage.url,
3668
+ alt: thumbImage.altText ?? product.title,
3669
+ loading: "lazy",
3670
+ width: thumbImage.width ?? void 0,
3671
+ height: thumbImage.height ?? void 0
3672
+ }
3673
+ ) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PlaceholderMark, {}),
3674
+ variantInStep && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-mix-match__modal-added-badge", children: "Added" })
3675
+ ]
3676
+ }
3677
+ ),
3678
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__modal-product-info", children: [
3679
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "lb-mix-match__modal-product-title", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3635
3680
  "a",
3636
3681
  {
3637
3682
  href: `/products/${product.handle}`,
@@ -3640,24 +3685,24 @@ function MultiStepPickerRow({
3640
3685
  children: product.title
3641
3686
  }
3642
3687
  ) }),
3643
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("p", { className: "lb-mix-match__modal-product-price", children: [
3644
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "data-row-price-sale": true, children: (0, import_core13.formatMoney)(priceCents, currency) }),
3645
- compareCents !== null && compareCents > priceCents && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("s", { className: "lb-mix-match__modal-product-compare", "data-row-compare": true, children: (0, import_core13.formatMoney)(compareCents, currency) })
3688
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("p", { className: "lb-mix-match__modal-product-price", children: [
3689
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { "data-row-price-sale": true, children: (0, import_core13.formatMoney)(priceCents, currency) }),
3690
+ compareCents !== null && compareCents > priceCents && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("s", { className: "lb-mix-match__modal-product-compare", "data-row-compare": true, children: (0, import_core13.formatMoney)(compareCents, currency) })
3646
3691
  ] }),
3647
- unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "lb-mix-match__modal-product-unit-price lb-bundle-product-unit-price", children: unitPriceText }),
3648
- showPicker && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-bundle-variant-option-groups", children: optionNames.map((optionName, optionIndex) => {
3692
+ unitPriceText && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "lb-mix-match__modal-product-unit-price lb-bundle-product-unit-price", children: unitPriceText }),
3693
+ showPicker && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-bundle-variant-option-groups", children: optionNames.map((optionName, optionIndex) => {
3649
3694
  const dropdownOptions = optionsFor(optionIndex).map((o) => ({
3650
3695
  value: o.value,
3651
3696
  label: o.value,
3652
3697
  disabled: o.disabled
3653
3698
  }));
3654
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
3699
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
3655
3700
  "div",
3656
3701
  {
3657
3702
  className: "lb-bundle-variant-option-group",
3658
3703
  children: [
3659
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-bundle-variant-option-label", children: optionName }),
3660
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3704
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-bundle-variant-option-label", children: optionName }),
3705
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3661
3706
  VariantDropdown,
3662
3707
  {
3663
3708
  className: "lb-mix-match__variant-select-dropdown",
@@ -3672,17 +3717,17 @@ function MultiStepPickerRow({
3672
3717
  optionName
3673
3718
  );
3674
3719
  }) }),
3675
- !showPicker && variants.length === 1 && currentVariant.title !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-mix-match__filled-variant", children: currentVariant.title }),
3676
- !isOos && needsMoreSpots && room > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-mix-match__modal-needs-spots", children: vRule.min === 1 ? "Needs 1 spot" : `Needs ${vRule.min} spots` }),
3677
- isOos ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "lb-mix-match__modal-sold-out-label", children: "Sold out" }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "lb-mix-match__modal-product-actions", children: [
3678
- showStepper && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "lb-bundle-variant-option-group lb-mix-match__qty-stepper-group", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
3720
+ !showPicker && variants.length === 1 && currentVariant.title !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-mix-match__filled-variant", children: currentVariant.title }),
3721
+ !isOos && needsMoreSpots && room > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-mix-match__modal-needs-spots", children: vRule.min === 1 ? "Needs 1 spot" : `Needs ${vRule.min} spots` }),
3722
+ isOos ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-mix-match__modal-sold-out-label", children: "Sold out" }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__modal-product-actions", children: [
3723
+ showStepper && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-bundle-variant-option-group lb-mix-match__qty-stepper-group", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
3679
3724
  "div",
3680
3725
  {
3681
3726
  className: "lb-mix-match__qty-stepper",
3682
3727
  role: "group",
3683
3728
  "aria-label": "Quantity",
3684
3729
  children: [
3685
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3730
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3686
3731
  "button",
3687
3732
  {
3688
3733
  type: "button",
@@ -3704,7 +3749,7 @@ function MultiStepPickerRow({
3704
3749
  children: "\u2212"
3705
3750
  }
3706
3751
  ),
3707
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3752
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3708
3753
  "span",
3709
3754
  {
3710
3755
  className: "lb-mix-match__qty-stepper-value",
@@ -3713,7 +3758,7 @@ function MultiStepPickerRow({
3713
3758
  children: shownQty
3714
3759
  }
3715
3760
  ),
3716
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3761
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3717
3762
  "button",
3718
3763
  {
3719
3764
  type: "button",
@@ -3738,7 +3783,7 @@ function MultiStepPickerRow({
3738
3783
  ]
3739
3784
  }
3740
3785
  ) }),
3741
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3786
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3742
3787
  "button",
3743
3788
  {
3744
3789
  type: "button",
@@ -3757,7 +3802,7 @@ function MultiStepPickerRow({
3757
3802
  );
3758
3803
  }
3759
3804
  function CloseIcon3() {
3760
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
3805
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
3761
3806
  "svg",
3762
3807
  {
3763
3808
  width: "20",
@@ -3767,14 +3812,14 @@ function CloseIcon3() {
3767
3812
  xmlns: "http://www.w3.org/2000/svg",
3768
3813
  "aria-hidden": "true",
3769
3814
  children: [
3770
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
3771
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
3815
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
3816
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
3772
3817
  ]
3773
3818
  }
3774
3819
  );
3775
3820
  }
3776
3821
  function SearchClearIcon2() {
3777
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3822
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3778
3823
  "svg",
3779
3824
  {
3780
3825
  width: "16",
@@ -3783,13 +3828,13 @@ function SearchClearIcon2() {
3783
3828
  fill: "currentColor",
3784
3829
  xmlns: "http://www.w3.org/2000/svg",
3785
3830
  "aria-hidden": "true",
3786
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: "M14.348 5.652a.5.5 0 0 0-.707 0L10 9.293 6.36 5.652a.5.5 0 1 0-.708.707L9.293 10l-3.641 3.641a.5.5 0 0 0 .708.707L10 10.707l3.641 3.641a.5.5 0 0 0 .707-.707L10.707 10l3.641-3.641a.5.5 0 0 0 0-.707z" })
3831
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "M14.348 5.652a.5.5 0 0 0-.707 0L10 9.293 6.36 5.652a.5.5 0 1 0-.708.707L9.293 10l-3.641 3.641a.5.5 0 0 0 .708.707L10 10.707l3.641 3.641a.5.5 0 0 0 .707-.707L10.707 10l3.641-3.641a.5.5 0 0 0 0-.707z" })
3787
3832
  }
3788
3833
  );
3789
3834
  }
3790
3835
 
3791
3836
  // src/components/MultiStepBundle.tsx
3792
- var import_jsx_runtime9 = require("react/jsx-runtime");
3837
+ var import_jsx_runtime10 = require("react/jsx-runtime");
3793
3838
  function ruleFor4(bundle, productId, variantId) {
3794
3839
  if (variantId) {
3795
3840
  const vRule = bundle.variantRules[variantId];
@@ -4088,9 +4133,9 @@ function MultiStepBundle(props) {
4088
4133
  }
4089
4134
  }, [bundle, selections, valid, onAddToCart, onError, trackAddToCart, totalQuantity, steps]);
4090
4135
  if (result.status === "loading") {
4091
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
4092
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
4093
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
4136
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: `lb-bundle lb-bundle--loading ${className ?? ""}`, children: [
4137
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "lb-skeleton lb-skeleton--title" }),
4138
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "lb-skeleton lb-skeleton--products" })
4094
4139
  ] });
4095
4140
  }
4096
4141
  if (result.status === "error") return null;
@@ -4111,7 +4156,7 @@ function MultiStepBundle(props) {
4111
4156
  if (requiredBlocked) return null;
4112
4157
  const currency = bundle.products[0]?.priceRange.minVariantPrice.currencyCode ?? "USD";
4113
4158
  const ctaLabel = addingToCart ? "Adding..." : bundle.widgetConfig.cta.ctaText || "Add to cart";
4114
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4159
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4115
4160
  "div",
4116
4161
  {
4117
4162
  ref: (el) => {
@@ -4123,19 +4168,19 @@ function MultiStepBundle(props) {
4123
4168
  "aria-label": bundle.title,
4124
4169
  "data-required-quantity": totalMin,
4125
4170
  children: [
4126
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-bundle-header__content", children: [
4127
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
4128
- bundle.description && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
4171
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "lb-bundle-header", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "lb-bundle-header__content", children: [
4172
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { className: "lb-bundle-title", children: bundle.title }),
4173
+ bundle.description && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "lb-bundle-subtitle", children: bundle.description })
4129
4174
  ] }) }),
4130
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4175
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4131
4176
  BundleCountdown,
4132
4177
  {
4133
4178
  endsAt: bundle.endsAt,
4134
4179
  widgetConfig: bundle.widgetConfig
4135
4180
  }
4136
4181
  ),
4137
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__progress", "data-progress": true, children: [
4138
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4182
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "lb-mix-match__progress", "data-progress": true, children: [
4183
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4139
4184
  "div",
4140
4185
  {
4141
4186
  className: "lb-mix-match__progress-segments",
@@ -4143,7 +4188,7 @@ function MultiStepBundle(props) {
4143
4188
  "aria-valuenow": completedSteps,
4144
4189
  "aria-valuemin": 0,
4145
4190
  "aria-valuemax": steps.length,
4146
- children: Array.from({ length: steps.length }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4191
+ children: Array.from({ length: steps.length }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4147
4192
  "span",
4148
4193
  {
4149
4194
  className: `lb-mix-match__progress-segment${i < completedSteps ? " lb-mix-match__progress-segment--filled" : ""}`,
@@ -4153,8 +4198,8 @@ function MultiStepBundle(props) {
4153
4198
  ))
4154
4199
  }
4155
4200
  ),
4156
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__progress-labels", children: [
4157
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4201
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "lb-mix-match__progress-labels", children: [
4202
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4158
4203
  "span",
4159
4204
  {
4160
4205
  className: "lb-mix-match__progress-count",
@@ -4163,7 +4208,7 @@ function MultiStepBundle(props) {
4163
4208
  children: `${completedSteps} of ${steps.length} steps completed`
4164
4209
  }
4165
4210
  ),
4166
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4211
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4167
4212
  "span",
4168
4213
  {
4169
4214
  className: "lb-mix-match__progress-remaining",
@@ -4174,8 +4219,8 @@ function MultiStepBundle(props) {
4174
4219
  )
4175
4220
  ] })
4176
4221
  ] }),
4177
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-multi-step__groups", "data-step-groups": true, children: steps.map((step, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react16.Fragment, { children: [
4178
- i === firstUnsatisfied && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4222
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "lb-multi-step__groups", "data-step-groups": true, children: steps.map((step, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react16.Fragment, { children: [
4223
+ i === firstUnsatisfied && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4179
4224
  "button",
4180
4225
  {
4181
4226
  type: "button",
@@ -4184,28 +4229,28 @@ function MultiStepBundle(props) {
4184
4229
  "aria-label": `${anyPicks ? "Continue building" : "Choose your products"}: ${step.name}`,
4185
4230
  onClick: () => setPickerOpenAt(firstUnsatisfied),
4186
4231
  children: [
4187
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4232
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4188
4233
  "span",
4189
4234
  {
4190
4235
  className: "lb-mix-match__add-product-icon",
4191
4236
  "aria-hidden": "true",
4192
- children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PlusIcon2, {})
4237
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PlusIcon2, {})
4193
4238
  }
4194
4239
  ),
4195
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "lb-multi-step__door-copy", children: [
4196
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-mix-match__add-product-label", children: anyPicks ? "Continue building" : "Choose your products" }),
4197
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-multi-step__door-sub", children: anyPicks ? `${remainingSteps} ${remainingSteps === 1 ? "step" : "steps"} to go` : `${steps.length} quick ${steps.length === 1 ? "step" : "steps"}` })
4240
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "lb-multi-step__door-copy", children: [
4241
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-mix-match__add-product-label", children: anyPicks ? "Continue building" : "Choose your products" }),
4242
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-multi-step__door-sub", children: anyPicks ? `${remainingSteps} ${remainingSteps === 1 ? "step" : "steps"} to go` : `${steps.length} quick ${steps.length === 1 ? "step" : "steps"}` })
4198
4243
  ] })
4199
4244
  ]
4200
4245
  }
4201
4246
  ),
4202
- (selections[i] ?? []).length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4247
+ (selections[i] ?? []).length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4203
4248
  "section",
4204
4249
  {
4205
4250
  className: "lb-multi-step__group",
4206
4251
  "data-step-group": i,
4207
4252
  "data-step-mode": "row",
4208
- children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4253
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4209
4254
  "button",
4210
4255
  {
4211
4256
  type: "button",
@@ -4214,7 +4259,7 @@ function MultiStepBundle(props) {
4214
4259
  "aria-label": `${step.minQuantity === 1 && step.maxQuantity === 1 ? "Choose a product" : "Choose products"}: ${step.name}`,
4215
4260
  onClick: () => setPickerOpenAt(i),
4216
4261
  children: [
4217
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4262
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4218
4263
  "span",
4219
4264
  {
4220
4265
  className: "lb-multi-step__step-ix",
@@ -4222,8 +4267,8 @@ function MultiStepBundle(props) {
4222
4267
  children: i + 1
4223
4268
  }
4224
4269
  ),
4225
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-multi-step__group-name", children: step.name }),
4226
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4270
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-multi-step__group-name", children: step.name }),
4271
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4227
4272
  "span",
4228
4273
  {
4229
4274
  className: `lb-multi-step__group-count${stepSatisfied(i) ? " lb-multi-step__group-count--met" : ""}`,
@@ -4235,16 +4280,16 @@ function MultiStepBundle(props) {
4235
4280
  }
4236
4281
  )
4237
4282
  }
4238
- ) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4283
+ ) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4239
4284
  "section",
4240
4285
  {
4241
4286
  className: "lb-multi-step__group",
4242
4287
  "data-step-group": i,
4243
4288
  "data-step-mode": "open",
4244
4289
  children: [
4245
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-multi-step__group-heading", children: [
4246
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-multi-step__group-name", children: step.name }),
4247
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4290
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "lb-multi-step__group-heading", children: [
4291
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-multi-step__group-name", children: step.name }),
4292
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4248
4293
  "span",
4249
4294
  {
4250
4295
  className: `lb-multi-step__group-count${stepSatisfied(i) ? " lb-multi-step__group-count--met" : ""}`,
@@ -4253,7 +4298,7 @@ function MultiStepBundle(props) {
4253
4298
  }
4254
4299
  )
4255
4300
  ] }),
4256
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4301
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4257
4302
  "div",
4258
4303
  {
4259
4304
  className: "lb-mix-match__slots lb-edge-fade lb-multi-step__group-slots",
@@ -4263,22 +4308,28 @@ function MultiStepBundle(props) {
4263
4308
  title button provides the keyboard/AT path (its
4264
4309
  activation bubbles here); × stops propagation. */
4265
4310
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -- keyboard path is the inner "Edit selection" title button whose activation bubbles to this handler
4266
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4311
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4267
4312
  "div",
4268
4313
  {
4269
4314
  className: "lb-mix-match__slot lb-mix-match__slot--filled",
4270
4315
  onClick: () => setPickerOpenAt(i),
4271
4316
  children: [
4272
- item.featuredImage && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-bundle-thumbnail", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4273
- "img",
4317
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4318
+ "div",
4274
4319
  {
4275
- src: item.featuredImage,
4276
- alt: item.title,
4277
- loading: "lazy"
4320
+ className: item.featuredImage ? "lb-bundle-thumbnail" : placeholderBoxClass("lb-bundle-thumbnail"),
4321
+ children: item.featuredImage ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4322
+ "img",
4323
+ {
4324
+ src: item.featuredImage,
4325
+ alt: item.title,
4326
+ loading: "lazy"
4327
+ }
4328
+ ) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PlaceholderMark, {})
4278
4329
  }
4279
- ) }),
4280
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-mix-match__filled-info", children: [
4281
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4330
+ ),
4331
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "lb-mix-match__filled-info", children: [
4332
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4282
4333
  "button",
4283
4334
  {
4284
4335
  type: "button",
@@ -4287,15 +4338,15 @@ function MultiStepBundle(props) {
4287
4338
  children: item.title
4288
4339
  }
4289
4340
  ),
4290
- item.variantTitle && item.variantTitle !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-mix-match__filled-variant", children: item.variantTitle }),
4291
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "lb-mix-match__filled-price", children: [
4292
- item.compareAtPrice !== null && item.compareAtPrice > item.price && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("s", { className: "lb-mix-match__filled-compare", children: (0, import_core14.formatMoney)(item.compareAtPrice, currency) }),
4293
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-bundle-product-price", children: (0, import_core14.formatMoney)(item.price, currency) }),
4294
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-bundle-qty-inline", children: `\xD7${item.quantity}` })
4341
+ item.variantTitle && item.variantTitle !== "Default Title" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-mix-match__filled-variant", children: item.variantTitle }),
4342
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "lb-mix-match__filled-price", children: [
4343
+ item.compareAtPrice !== null && item.compareAtPrice > item.price && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("s", { className: "lb-mix-match__filled-compare", children: (0, import_core14.formatMoney)(item.compareAtPrice, currency) }),
4344
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-bundle-product-price", children: (0, import_core14.formatMoney)(item.price, currency) }),
4345
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-bundle-qty-inline", children: `\xD7${item.quantity}` })
4295
4346
  ] }),
4296
- item.unitPrice && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-bundle-product-unit-price", children: item.unitPrice })
4347
+ item.unitPrice && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-bundle-product-unit-price", children: item.unitPrice })
4297
4348
  ] }),
4298
- canRemoveItem2(bundle, selections, item) ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4349
+ canRemoveItem2(bundle, selections, item) ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4299
4350
  "button",
4300
4351
  {
4301
4352
  type: "button",
@@ -4305,13 +4356,13 @@ function MultiStepBundle(props) {
4305
4356
  e.stopPropagation();
4306
4357
  removeSlot(i, index);
4307
4358
  },
4308
- children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CloseIcon4, {})
4359
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CloseIcon4, {})
4309
4360
  }
4310
4361
  ) : (
4311
4362
  /* Required pick at its floor — quiet state chip instead
4312
4363
  of the ×; removal returns once another slot covers
4313
4364
  the product's minimum (variant swap flow). */
4314
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-mix-match__slot-required", children: "Required" })
4365
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-mix-match__slot-required", children: "Required" })
4315
4366
  )
4316
4367
  ]
4317
4368
  },
@@ -4324,29 +4375,29 @@ function MultiStepBundle(props) {
4324
4375
  }
4325
4376
  )
4326
4377
  ] }, i)) }),
4327
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "lb-bundle-divider" }),
4328
- allSatisfied && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-bundle-summary", "data-pricing-section": true, children: [
4329
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "lb-bundle-summary__text", children: [
4330
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
4331
- bundle.widgetConfig.savingsBar.visible && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
4378
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "lb-bundle-divider" }),
4379
+ allSatisfied && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "lb-bundle-summary", "data-pricing-section": true, children: [
4380
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "lb-bundle-summary__text", children: [
4381
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-bundle-summary__label", children: "Bundle total" }),
4382
+ bundle.widgetConfig.savingsBar.visible && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("p", { className: "lb-bundle-savings-line", "data-savings-bar": true, children: [
4332
4383
  "You save",
4333
4384
  " ",
4334
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { "data-savings-amount": true, children: (0, import_core14.formatMoney)(summary.savings, currency) }),
4385
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "data-savings-amount": true, children: (0, import_core14.formatMoney)(summary.savings, currency) }),
4335
4386
  " ",
4336
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { "data-savings-percent": true, children: [
4387
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { "data-savings-percent": true, children: [
4337
4388
  "(",
4338
4389
  summary.savingsPercent,
4339
4390
  "%)"
4340
4391
  ] })
4341
4392
  ] })
4342
4393
  ] }),
4343
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
4344
- bundle.widgetConfig.pricing.showComparePrice && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core14.formatMoney)(summary.comparePrice, currency) }),
4345
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core14.formatMoney)(summary.salePrice, currency) })
4394
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "lb-bundle-summary__prices", children: [
4395
+ bundle.widgetConfig.pricing.showComparePrice && summary.savings > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-bundle-compare-price", "data-compare-price": true, children: (0, import_core14.formatMoney)(summary.comparePrice, currency) }),
4396
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "lb-bundle-sale-price", "data-sale-price": true, children: (0, import_core14.formatMoney)(summary.salePrice, currency) })
4346
4397
  ] })
4347
4398
  ] }),
4348
- cartError && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
4349
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4399
+ cartError && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "lb-bundle__error", role: "alert", children: cartError }),
4400
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4350
4401
  "button",
4351
4402
  {
4352
4403
  className: "lb-bundle__cta",
@@ -4356,7 +4407,7 @@ function MultiStepBundle(props) {
4356
4407
  children: ctaLabel
4357
4408
  }
4358
4409
  ),
4359
- pickerOpenAt !== null && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4410
+ pickerOpenAt !== null && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4360
4411
  MultiStepPicker,
4361
4412
  {
4362
4413
  bundle,
@@ -4391,7 +4442,7 @@ function stepHasInStockProduct(bundle, stepIndex) {
4391
4442
  });
4392
4443
  }
4393
4444
  function PlusIcon2() {
4394
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4445
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4395
4446
  "svg",
4396
4447
  {
4397
4448
  width: "18",
@@ -4401,14 +4452,14 @@ function PlusIcon2() {
4401
4452
  xmlns: "http://www.w3.org/2000/svg",
4402
4453
  "aria-hidden": "true",
4403
4454
  children: [
4404
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("line", { x1: "9", y1: "3", x2: "9", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
4405
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("line", { x1: "3", y1: "9", x2: "15", y2: "9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
4455
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("line", { x1: "9", y1: "3", x2: "9", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
4456
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("line", { x1: "3", y1: "9", x2: "15", y2: "9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
4406
4457
  ]
4407
4458
  }
4408
4459
  );
4409
4460
  }
4410
4461
  function CloseIcon4() {
4411
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4462
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4412
4463
  "svg",
4413
4464
  {
4414
4465
  width: "16",
@@ -4418,8 +4469,8 @@ function CloseIcon4() {
4418
4469
  xmlns: "http://www.w3.org/2000/svg",
4419
4470
  "aria-hidden": "true",
4420
4471
  children: [
4421
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
4422
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
4472
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("line", { x1: "5", y1: "5", x2: "15", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }),
4473
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("line", { x1: "15", y1: "5", x2: "5", y2: "15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
4423
4474
  ]
4424
4475
  }
4425
4476
  );
@@ -4505,6 +4556,7 @@ var import_core17 = require("@lime-bundles/core");
4505
4556
  VolumeBundle,
4506
4557
  WIDGET_CONFIG_DEFAULTS,
4507
4558
  applyWidgetConfigVars,
4559
+ bundleSaleCents,
4508
4560
  calculateDiscount,
4509
4561
  calculateTierSavings,
4510
4562
  computeBundleSaleCents,