@rpg-engine/long-bow 0.8.219 → 0.8.221

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/components/DraggableContainer.d.ts +0 -6
  2. package/dist/components/Store/CartView.d.ts +0 -2
  3. package/dist/components/Store/MetadataCollector.d.ts +2 -2
  4. package/dist/components/Store/Store.d.ts +10 -28
  5. package/dist/components/Store/StoreHeader.d.ts +14 -0
  6. package/dist/components/Store/hooks/useStoreCart.d.ts +2 -0
  7. package/dist/components/Store/hooks/useStoreMetadata.d.ts +4 -11
  8. package/dist/components/Store/hooks/useStoreTabs.d.ts +20 -0
  9. package/dist/components/Store/internal/packToBlueprint.d.ts +2 -0
  10. package/dist/components/Store/sections/StoreItemsSection.d.ts +5 -3
  11. package/dist/hooks/useStoreFiltering.d.ts +7 -4
  12. package/dist/long-bow.cjs.development.js +379 -441
  13. package/dist/long-bow.cjs.development.js.map +1 -1
  14. package/dist/long-bow.cjs.production.min.js +1 -1
  15. package/dist/long-bow.cjs.production.min.js.map +1 -1
  16. package/dist/long-bow.esm.js +381 -443
  17. package/dist/long-bow.esm.js.map +1 -1
  18. package/package.json +1 -1
  19. package/src/components/DraggableContainer.tsx +0 -24
  20. package/src/components/Store/CartView.tsx +116 -137
  21. package/src/components/Store/MetadataCollector.tsx +60 -40
  22. package/src/components/Store/Store.tsx +75 -285
  23. package/src/components/Store/StoreHeader.tsx +74 -0
  24. package/src/components/Store/__test__/MetadataCollector.spec.tsx +94 -164
  25. package/src/components/Store/__test__/Store.spec.tsx +4 -0
  26. package/src/components/Store/__test__/useStoreMetadata.spec.tsx +58 -156
  27. package/src/components/Store/__test__/useStoreTabs.spec.tsx +69 -0
  28. package/src/components/Store/hooks/useStoreCart.ts +5 -2
  29. package/src/components/Store/hooks/useStoreMetadata.ts +30 -48
  30. package/src/components/Store/hooks/useStoreTabs.ts +104 -0
  31. package/src/components/Store/internal/packToBlueprint.ts +21 -0
  32. package/src/components/Store/sections/StoreItemsSection.tsx +19 -60
  33. package/src/components/Store/sections/StorePacksSection.tsx +0 -1
  34. package/src/components/shared/ScrollableContent/ScrollableContent.tsx +3 -6
  35. package/src/hooks/useStoreFiltering.spec.tsx +79 -0
  36. package/src/hooks/useStoreFiltering.ts +27 -9
@@ -2474,10 +2474,6 @@ var DraggableContainer = function DraggableContainer(_ref) {
2474
2474
  height = _ref.height,
2475
2475
  minHeight = _ref.minHeight,
2476
2476
  minWidth = _ref.minWidth,
2477
- mobileWidth = _ref.mobileWidth,
2478
- mobileHeight = _ref.mobileHeight,
2479
- _ref$mobileBreakpoint = _ref.mobileBreakpoint,
2480
- mobileBreakpoint = _ref$mobileBreakpoint === void 0 ? 768 : _ref$mobileBreakpoint,
2481
2477
  className = _ref.className,
2482
2478
  _ref$type = _ref.type,
2483
2479
  type = _ref$type === void 0 ? exports.RPGUIContainerTypes.FramedGold : _ref$type,
@@ -2554,9 +2550,6 @@ var DraggableContainer = function DraggableContainer(_ref) {
2554
2550
  height: height || 'auto',
2555
2551
  minWidth: minWidth,
2556
2552
  minHeight: minHeight,
2557
- mobileWidth: mobileWidth,
2558
- mobileHeight: mobileHeight,
2559
- mobileBreakpoint: mobileBreakpoint,
2560
2553
  className: "rpgui-container " + type + " " + className,
2561
2554
  isFullScreen: isFullScreen,
2562
2555
  opacity: opacity
@@ -2573,7 +2566,7 @@ var DraggableContainer = function DraggableContainer(_ref) {
2573
2566
  var Container$a = /*#__PURE__*/styled__default.div.withConfig({
2574
2567
  displayName: "DraggableContainer__Container",
2575
2568
  componentId: "sc-184mpyl-0"
2576
- })(["height:", ";width:", ";min-width:", ";min-height:", ";display:flex;flex-wrap:wrap;image-rendering:pixelated;overflow-y:hidden;", " ", " ", " &.rpgui-container{padding-top:1.5rem;}"], function (props) {
2569
+ })(["height:", ";width:", ";min-width:", ";min-height:", ";display:flex;flex-wrap:wrap;image-rendering:pixelated;overflow-y:hidden;", " ", " &.rpgui-container{padding-top:1.5rem;}"], function (props) {
2577
2570
  return props.height;
2578
2571
  }, function (_ref2) {
2579
2572
  var width = _ref2.width;
@@ -2590,11 +2583,6 @@ var Container$a = /*#__PURE__*/styled__default.div.withConfig({
2590
2583
  }, function (_ref6) {
2591
2584
  var isFullScreen = _ref6.isFullScreen;
2592
2585
  return isFullScreen && styled.css(["justify-content:center;align-items:flex-start;align-content:flex-start;"]);
2593
- }, function (_ref7) {
2594
- var mobileWidth = _ref7.mobileWidth,
2595
- mobileHeight = _ref7.mobileHeight,
2596
- mobileBreakpoint = _ref7.mobileBreakpoint;
2597
- return (mobileWidth || mobileHeight) && styled.css(["@media (max-width:", "px){", " ", "}"], mobileBreakpoint != null ? mobileBreakpoint : 768, mobileWidth && "width: " + mobileWidth + "; min-width: unset;", mobileHeight && "height: " + mobileHeight + "; min-height: unset;");
2598
2586
  });
2599
2587
  var CloseButton$4 = /*#__PURE__*/styled__default.div.withConfig({
2600
2588
  displayName: "DraggableContainer__CloseButton",
@@ -2611,8 +2599,8 @@ var Title$1 = /*#__PURE__*/styled__default.h1.withConfig({
2611
2599
  var Icon = /*#__PURE__*/styled__default.img.withConfig({
2612
2600
  displayName: "DraggableContainer__Icon",
2613
2601
  componentId: "sc-184mpyl-4"
2614
- })(["color:white;z-index:22;font-size:", ";width:", ";margin-right:0.5rem;"], uiFonts.size.xsmall, function (_ref8) {
2615
- var width = _ref8.width;
2602
+ })(["color:white;z-index:22;font-size:", ";width:", ";margin-right:0.5rem;"], uiFonts.size.xsmall, function (_ref7) {
2603
+ var width = _ref7.width;
2616
2604
  return width;
2617
2605
  });
2618
2606
 
@@ -37571,7 +37559,6 @@ var CartView = function CartView(_ref2) {
37571
37559
  paymentMethodLabel = _ref2.paymentMethodLabel,
37572
37560
  trustSignals = _ref2.trustSignals,
37573
37561
  onCloseStore = _ref2.onCloseStore,
37574
- onBuyDC = _ref2.onBuyDC,
37575
37562
  onCheckoutStart = _ref2.onCheckoutStart,
37576
37563
  onPurchaseSuccess = _ref2.onPurchaseSuccess,
37577
37564
  onPurchaseError = _ref2.onPurchaseError,
@@ -37650,11 +37637,6 @@ var CartView = function CartView(_ref2) {
37650
37637
  return _ref3.apply(this, arguments);
37651
37638
  };
37652
37639
  }();
37653
- // Show DC discount nudge when items have DC pricing and user might benefit
37654
- var hasDCItems = cartItems.some(function (ci) {
37655
- return ci.item.dcPrice;
37656
- });
37657
- var showDCNudge = hasDCItems && onBuyDC;
37658
37640
  if (purchasedItems) {
37659
37641
  return React__default.createElement(PurchaseSuccess, {
37660
37642
  items: purchasedItems.map(function (ci) {
@@ -37679,9 +37661,8 @@ var CartView = function CartView(_ref2) {
37679
37661
  return s + ci.quantity;
37680
37662
  }, 0), ")"), React__default.createElement(CloseButton$h, {
37681
37663
  onPointerDown: onClose
37682
- }, React__default.createElement(fa.FaTimes, null))), React__default.createElement(CartItems, null, cartItems.length === 0 ? React__default.createElement(EmptyCart, null, "Your cart is empty") : cartItems.map(function (cartItem) {
37664
+ }, React__default.createElement(fa.FaTimes, null))), React__default.createElement(MainContent$1, null, React__default.createElement(CartItems, null, cartItems.length === 0 ? React__default.createElement(EmptyCart, null, "Your cart is empty") : cartItems.map(function (cartItem) {
37683
37665
  var _cartItem$metadata, _cartItem$metadata2, _cartItem$item$region2, _cartItem$item$region3;
37684
- console.log('Item metadataType: , texturePath:', cartItem.item.metadataType, cartItem.item.texturePath);
37685
37666
  var getSpriteKey = function getSpriteKey(textureKey) {
37686
37667
  return textureKey + '/down/standing/0.png';
37687
37668
  };
@@ -37705,15 +37686,13 @@ var CartView = function CartView(_ref2) {
37705
37686
  onRemoveFromCart(cartItem.item.key);
37706
37687
  }
37707
37688
  }));
37708
- })), React__default.createElement(Footer$2, null, showDCNudge && React__default.createElement(DCNudge, {
37709
- onPointerDown: onBuyDC
37710
- }, React__default.createElement(fa.FaCoins, null), React__default.createElement("span", null, "Save more with DC \u2014 volume discounts available"), React__default.createElement(DCNudgeLink, null, "Buy DC \u2192")), React__default.createElement(TrustBar, {
37711
- signals: trustSignals
37712
- }), React__default.createElement(TotalInfo, null, React__default.createElement(OrderSummaryLabel, null, "Order Summary"), React__default.createElement(TotalRow, null, React__default.createElement("span", null, "Subtotal:"), React__default.createElement("span", null, currencySymbol, formatPrice(total))), dcTotal > 0 && React__default.createElement(TotalRow, null, React__default.createElement("span", null, "DC:"), React__default.createElement("span", null, React__default.createElement(MMORPGNumber, {
37689
+ })), cartItems.length > 0 && React__default.createElement(OrderSummaryPanel, null, React__default.createElement(OrderSummaryLabel, null, "Order Summary"), React__default.createElement(TotalRow, null, React__default.createElement("span", null, "Subtotal:"), React__default.createElement("span", null, currencySymbol, formatPrice(total))), dcTotal > 0 && React__default.createElement(TotalRow, null, React__default.createElement("span", null, "DC:"), React__default.createElement("span", null, React__default.createElement(MMORPGNumber, {
37713
37690
  value: dcTotal
37714
37691
  }), " DC")), React__default.createElement(TotalRow, {
37715
37692
  "$isTotal": true
37716
- }, React__default.createElement("span", null, "Total:"), React__default.createElement("span", null, currencySymbol, formatPrice(total))), paymentMethodLabel && React__default.createElement(PaymentMethodRow, null, React__default.createElement("span", null, "Paying with:"), React__default.createElement("span", null, paymentMethodLabel)), error && React__default.createElement(ErrorMessage$2, null, error)), React__default.createElement(CTAButton, {
37693
+ }, React__default.createElement("span", null, "Total:"), React__default.createElement("span", null, currencySymbol, formatPrice(total))), paymentMethodLabel && React__default.createElement(PaymentMethodRow, null, React__default.createElement("span", null, "Paying with:"), React__default.createElement("span", null, paymentMethodLabel)))), React__default.createElement(Footer$2, null, React__default.createElement(TrustBar, {
37694
+ signals: trustSignals
37695
+ }), error && React__default.createElement(ErrorMessage$2, null, error), React__default.createElement(CTAButton, {
37717
37696
  icon: React__default.createElement(fa.FaShoppingBag, null),
37718
37697
  label: isLoading ? 'Processing...' : "Pay " + currencySymbol + formatPrice(total),
37719
37698
  onClick: handlePurchase,
@@ -37724,11 +37703,11 @@ var CartView = function CartView(_ref2) {
37724
37703
  var Container$M = /*#__PURE__*/styled__default.div.withConfig({
37725
37704
  displayName: "CartView__Container",
37726
37705
  componentId: "sc-ydtyl1-0"
37727
- })(["display:flex;flex-direction:column;width:100%;gap:1rem;padding:1rem;"]);
37706
+ })(["display:flex;flex-direction:column;width:100%;height:100%;padding:1rem;overflow:hidden;box-sizing:border-box;"]);
37728
37707
  var Header$g = /*#__PURE__*/styled__default.div.withConfig({
37729
37708
  displayName: "CartView__Header",
37730
37709
  componentId: "sc-ydtyl1-1"
37731
- })(["display:flex;justify-content:space-between;align-items:center;"]);
37710
+ })(["display:flex;justify-content:space-between;align-items:center;flex-shrink:0;"]);
37732
37711
  var Title$n = /*#__PURE__*/styled__default.h2.withConfig({
37733
37712
  displayName: "CartView__Title",
37734
37713
  componentId: "sc-ydtyl1-2"
@@ -37737,49 +37716,53 @@ var CloseButton$h = /*#__PURE__*/styled__default.div.withConfig({
37737
37716
  displayName: "CartView__CloseButton",
37738
37717
  componentId: "sc-ydtyl1-3"
37739
37718
  })(["padding:0.5rem;min-width:unset;width:42px;height:42px;display:flex;font-size:1.5rem;align-items:center;color:white;justify-content:center;"]);
37719
+ var MainContent$1 = /*#__PURE__*/styled__default.div.withConfig({
37720
+ displayName: "CartView__MainContent",
37721
+ componentId: "sc-ydtyl1-4"
37722
+ })(["display:grid;grid-template-columns:1fr 260px;gap:1rem;flex:1;min-height:0;margin:1rem 0;@media (max-width:700px){grid-template-columns:1fr;gap:0.75rem;}"]);
37740
37723
  var CartItems = /*#__PURE__*/styled__default.div.withConfig({
37741
37724
  displayName: "CartView__CartItems",
37742
- componentId: "sc-ydtyl1-4"
37743
- })(["display:flex;flex-direction:column;gap:0.5rem;overflow-y:auto;max-height:250px;padding-right:0.5rem;&::-webkit-scrollbar{width:6px;}&::-webkit-scrollbar-track{background:rgba(0,0,0,0.2);border-radius:4px;}&::-webkit-scrollbar-thumb{background:#f59e0b;border-radius:4px;&:hover{background:#fbbf24;}}"]);
37725
+ componentId: "sc-ydtyl1-5"
37726
+ })(["display:flex;flex-direction:column;gap:0.5rem;min-height:0;overflow-y:auto;padding-right:0.5rem;&::-webkit-scrollbar{width:6px;}&::-webkit-scrollbar-track{background:rgba(0,0,0,0.2);border-radius:4px;}&::-webkit-scrollbar-thumb{background:#f59e0b;border-radius:4px;&:hover{background:#fbbf24;}}"]);
37727
+ var OrderSummaryPanel = /*#__PURE__*/styled__default.div.withConfig({
37728
+ displayName: "CartView__OrderSummaryPanel",
37729
+ componentId: "sc-ydtyl1-6"
37730
+ })(["display:flex;flex-direction:column;gap:0.5rem;padding:1rem;background:rgba(0,0,0,0.25);border:1px solid rgba(255,255,255,0.08);border-radius:6px;align-self:start;"]);
37744
37731
  var EmptyCart = /*#__PURE__*/styled__default.div.withConfig({
37745
37732
  displayName: "CartView__EmptyCart",
37746
- componentId: "sc-ydtyl1-5"
37733
+ componentId: "sc-ydtyl1-7"
37747
37734
  })(["display:flex;align-items:center;justify-content:center;height:100%;color:#ffffff;font-family:'Press Start 2P',cursive;font-size:0.875rem;opacity:0.7;"]);
37748
37735
  var CartItemRow = /*#__PURE__*/styled__default.div.withConfig({
37749
37736
  displayName: "CartView__CartItemRow",
37750
- componentId: "sc-ydtyl1-6"
37737
+ componentId: "sc-ydtyl1-8"
37751
37738
  })(["display:flex;align-items:center;gap:0.75rem;padding:0.5rem 0.75rem;background:rgba(0,0,0,0.2);border-radius:4px;"]);
37752
37739
  var ItemIconContainer = /*#__PURE__*/styled__default.div.withConfig({
37753
37740
  displayName: "CartView__ItemIconContainer",
37754
- componentId: "sc-ydtyl1-7"
37741
+ componentId: "sc-ydtyl1-9"
37755
37742
  })(["width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:2px;"]);
37756
37743
  var ItemDetails$4 = /*#__PURE__*/styled__default.div.withConfig({
37757
37744
  displayName: "CartView__ItemDetails",
37758
- componentId: "sc-ydtyl1-8"
37745
+ componentId: "sc-ydtyl1-10"
37759
37746
  })(["flex:1;display:flex;flex-direction:column;gap:0.5rem;"]);
37760
37747
  var ItemName$6 = /*#__PURE__*/styled__default.div.withConfig({
37761
37748
  displayName: "CartView__ItemName",
37762
- componentId: "sc-ydtyl1-9"
37749
+ componentId: "sc-ydtyl1-11"
37763
37750
  })(["font-family:'Press Start 2P',cursive;font-size:0.65rem;color:#ffffff;"]);
37764
37751
  var ItemInfo$2 = /*#__PURE__*/styled__default.div.withConfig({
37765
37752
  displayName: "CartView__ItemInfo",
37766
- componentId: "sc-ydtyl1-10"
37753
+ componentId: "sc-ydtyl1-12"
37767
37754
  })(["display:flex;align-items:center;gap:0.4rem;font-family:'Press Start 2P',cursive;font-size:0.55rem;color:#fef08a;"]);
37768
37755
  var Footer$2 = /*#__PURE__*/styled__default.div.withConfig({
37769
37756
  displayName: "CartView__Footer",
37770
- componentId: "sc-ydtyl1-11"
37757
+ componentId: "sc-ydtyl1-13"
37771
37758
  })(["display:flex;flex-direction:column;gap:1rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,0.1);flex-shrink:0;@media (max-width:600px){gap:0.75rem;padding-top:0.75rem;}"]);
37772
- var TotalInfo = /*#__PURE__*/styled__default.div.withConfig({
37773
- displayName: "CartView__TotalInfo",
37774
- componentId: "sc-ydtyl1-12"
37775
- })(["display:flex;flex-direction:column;gap:0.5rem;"]);
37776
37759
  var OrderSummaryLabel = /*#__PURE__*/styled__default.div.withConfig({
37777
37760
  displayName: "CartView__OrderSummaryLabel",
37778
- componentId: "sc-ydtyl1-13"
37761
+ componentId: "sc-ydtyl1-14"
37779
37762
  })(["font-family:'Press Start 2P',cursive;font-size:0.55rem;color:rgba(255,255,255,0.5);text-transform:uppercase;letter-spacing:0.05em;margin-bottom:0.25rem;"]);
37780
37763
  var TotalRow = /*#__PURE__*/styled__default.div.withConfig({
37781
37764
  displayName: "CartView__TotalRow",
37782
- componentId: "sc-ydtyl1-14"
37765
+ componentId: "sc-ydtyl1-15"
37783
37766
  })(["display:flex;align-items:center;justify-content:space-between;gap:1rem;font-family:'Press Start 2P',cursive;font-size:", ";color:", ";", " span:last-child{color:#fef08a;}"], function (p) {
37784
37767
  return p.$isTotal ? '1rem' : '0.75rem';
37785
37768
  }, function (p) {
@@ -37789,35 +37772,27 @@ var TotalRow = /*#__PURE__*/styled__default.div.withConfig({
37789
37772
  });
37790
37773
  var PaymentMethodRow = /*#__PURE__*/styled__default.div.withConfig({
37791
37774
  displayName: "CartView__PaymentMethodRow",
37792
- componentId: "sc-ydtyl1-15"
37793
- })(["display:flex;align-items:center;justify-content:space-between;gap:1rem;font-family:'Press Start 2P',cursive;font-size:0.5rem;color:rgba(255,255,255,0.5);margin-top:0.25rem;span:last-child{color:rgba(255,255,255,0.8);}"]);
37794
- var DCNudge = /*#__PURE__*/styled__default.div.withConfig({
37795
- displayName: "CartView__DCNudge",
37796
37775
  componentId: "sc-ydtyl1-16"
37797
- })(["display:flex;align-items:center;gap:0.5rem;padding:0.5rem 0.75rem;background:rgba(245,158,11,0.1);border:1px solid rgba(245,158,11,0.3);border-radius:4px;cursor:pointer;font-family:'Press Start 2P',cursive;font-size:0.45rem;color:#fbbf24;transition:background 0.15s;line-height:1.4;flex-wrap:wrap;&:hover{background:rgba(245,158,11,0.18);}svg{flex-shrink:0;font-size:0.7rem;}span{flex:1;min-width:140px;}"]);
37798
- var DCNudgeLink = /*#__PURE__*/styled__default.span.withConfig({
37799
- displayName: "CartView__DCNudgeLink",
37800
- componentId: "sc-ydtyl1-17"
37801
- })(["color:#f59e0b;white-space:nowrap;text-decoration:underline;flex:0 0 auto !important;"]);
37776
+ })(["display:flex;align-items:center;justify-content:space-between;gap:1rem;font-family:'Press Start 2P',cursive;font-size:0.5rem;color:rgba(255,255,255,0.5);margin-top:0.25rem;span:last-child{color:rgba(255,255,255,0.8);}"]);
37802
37777
  var ErrorMessage$2 = /*#__PURE__*/styled__default.div.withConfig({
37803
37778
  displayName: "CartView__ErrorMessage",
37804
- componentId: "sc-ydtyl1-18"
37779
+ componentId: "sc-ydtyl1-17"
37805
37780
  })(["color:#ef4444;font-size:0.875rem;font-family:'Press Start 2P',cursive;text-align:center;"]);
37806
37781
  var MetadataInfo = /*#__PURE__*/styled__default.div.withConfig({
37807
37782
  displayName: "CartView__MetadataInfo",
37808
- componentId: "sc-ydtyl1-19"
37783
+ componentId: "sc-ydtyl1-18"
37809
37784
  })(["display:flex;align-items:center;margin-top:0.25rem;gap:0.4rem;font-size:0.55rem;color:#a3e635;background:rgba(163,230,53,0.1);padding:0.2rem 0.4rem;border-radius:4px;"]);
37810
37785
  var MetadataLabel = /*#__PURE__*/styled__default.div.withConfig({
37811
37786
  displayName: "CartView__MetadataLabel",
37812
- componentId: "sc-ydtyl1-20"
37787
+ componentId: "sc-ydtyl1-19"
37813
37788
  })(["display:flex;align-items:center;gap:0.25rem;font-weight:bold;color:#d9f99d;"]);
37814
37789
  var MetadataValue = /*#__PURE__*/styled__default.div.withConfig({
37815
37790
  displayName: "CartView__MetadataValue",
37816
- componentId: "sc-ydtyl1-21"
37791
+ componentId: "sc-ydtyl1-20"
37817
37792
  })(["overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"]);
37818
37793
  var CartMeta = /*#__PURE__*/styled__default.div.withConfig({
37819
37794
  displayName: "CartView__CartMeta",
37820
- componentId: "sc-ydtyl1-22"
37795
+ componentId: "sc-ydtyl1-21"
37821
37796
  })(["font-family:'Press Start 2P',cursive;font-size:0.55rem;color:#ffffff;opacity:0.8;margin-top:0.25rem;"]);
37822
37797
 
37823
37798
  function calcTimeLeft(endsAt) {
@@ -38042,53 +38017,31 @@ var useStoreMetadata = function useStoreMetadata() {
38042
38017
  var _useState = React.useState(false),
38043
38018
  isCollectingMetadata = _useState[0],
38044
38019
  setIsCollectingMetadata = _useState[1];
38045
- var collectMetadata = /*#__PURE__*/function () {
38046
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(item) {
38047
- return _regeneratorRuntime().wrap(function _callee$(_context) {
38048
- while (1) switch (_context.prev = _context.next) {
38049
- case 0:
38050
- if (!(!item.metadataType || item.metadataType !== shared.MetadataType.CharacterSkin)) {
38051
- _context.next = 2;
38052
- break;
38053
- }
38054
- return _context.abrupt("return", null);
38055
- case 2:
38056
- setIsCollectingMetadata(true);
38057
- _context.prev = 3;
38058
- _context.next = 6;
38059
- return new Promise(function (_resolve) {
38060
- // We'll store the resolver functions in a global context
38061
- // that will be accessible to the MetadataCollector component
38062
- window.__metadataResolvers = {
38063
- resolve: function resolve(metadata) {
38064
- _resolve(metadata);
38065
- },
38066
- item: item
38067
- };
38068
- });
38069
- case 6:
38070
- return _context.abrupt("return", _context.sent);
38071
- case 7:
38072
- _context.prev = 7;
38073
- setIsCollectingMetadata(false);
38074
- // Clean up the resolvers
38075
- if (window.__metadataResolvers) {
38076
- delete window.__metadataResolvers;
38077
- }
38078
- return _context.finish(7);
38079
- case 11:
38080
- case "end":
38081
- return _context.stop();
38082
- }
38083
- }, _callee, null, [[3,, 7, 11]]);
38084
- }));
38085
- return function collectMetadata(_x) {
38086
- return _ref.apply(this, arguments);
38087
- };
38088
- }();
38020
+ var _useState2 = React.useState(null),
38021
+ currentMetadataItem = _useState2[0],
38022
+ setCurrentMetadataItem = _useState2[1];
38023
+ var resolverRef = React.useRef(null);
38024
+ var collectMetadata = function collectMetadata(item) {
38025
+ if (!item.metadataType || item.metadataType !== shared.MetadataType.CharacterSkin) {
38026
+ return Promise.resolve(null);
38027
+ }
38028
+ setIsCollectingMetadata(true);
38029
+ setCurrentMetadataItem(item);
38030
+ return new Promise(function (resolve) {
38031
+ resolverRef.current = resolve;
38032
+ });
38033
+ };
38034
+ var resolveMetadata = function resolveMetadata(metadata) {
38035
+ resolverRef.current == null ? void 0 : resolverRef.current(metadata);
38036
+ resolverRef.current = null;
38037
+ setIsCollectingMetadata(false);
38038
+ setCurrentMetadataItem(null);
38039
+ };
38089
38040
  return {
38090
38041
  collectMetadata: collectMetadata,
38091
- isCollectingMetadata: isCollectingMetadata
38042
+ resolveMetadata: resolveMetadata,
38043
+ isCollectingMetadata: isCollectingMetadata,
38044
+ currentMetadataItem: currentMetadataItem
38092
38045
  };
38093
38046
  };
38094
38047
 
@@ -38107,7 +38060,9 @@ var useStoreCart = function useStoreCart() {
38107
38060
  }, []);
38108
38061
  var _useStoreMetadata = useStoreMetadata(),
38109
38062
  collectMetadata = _useStoreMetadata.collectMetadata,
38110
- isCollectingMetadata = _useStoreMetadata.isCollectingMetadata;
38063
+ resolveMetadata = _useStoreMetadata.resolveMetadata,
38064
+ isCollectingMetadata = _useStoreMetadata.isCollectingMetadata,
38065
+ currentMetadataItem = _useStoreMetadata.currentMetadataItem;
38111
38066
  var handleAddToCart = /*#__PURE__*/function () {
38112
38067
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(item, quantity, preselectedMetadata) {
38113
38068
  var metadata;
@@ -38239,7 +38194,9 @@ var useStoreCart = function useStoreCart() {
38239
38194
  closeCart: closeCart,
38240
38195
  getTotalItems: getTotalItems,
38241
38196
  getTotalPrice: getTotalPrice,
38242
- isCollectingMetadata: isCollectingMetadata
38197
+ isCollectingMetadata: isCollectingMetadata,
38198
+ currentMetadataItem: currentMetadataItem,
38199
+ resolveMetadata: resolveMetadata
38243
38200
  };
38244
38201
  };
38245
38202
  // Helper functions
@@ -38268,23 +38225,42 @@ var MetadataCollector = function MetadataCollector(_ref) {
38268
38225
  config = _ref.config,
38269
38226
  onCollect = _ref.onCollect,
38270
38227
  onCancel = _ref.onCancel;
38271
- // Make sure we clean up if unmounted without collecting
38228
+ var isPendingRef = React.useRef(true);
38229
+ var finalize = React.useCallback(function (callback) {
38230
+ if (!isPendingRef.current) {
38231
+ return;
38232
+ }
38233
+ isPendingRef.current = false;
38234
+ callback();
38235
+ }, []);
38236
+ var handleCollect = React.useCallback(function (metadata) {
38237
+ finalize(function () {
38238
+ return onCollect(metadata);
38239
+ });
38240
+ }, [finalize, onCollect]);
38241
+ var handleCancel = React.useCallback(function () {
38242
+ finalize(onCancel);
38243
+ }, [finalize, onCancel]);
38272
38244
  React.useEffect(function () {
38273
38245
  return function () {
38274
- // If we're unmounting without explicitly collecting or canceling,
38275
- // make sure to call onCancel to prevent any hanging promises
38276
- if (window.__metadataResolvers) {
38277
- onCancel();
38278
- }
38246
+ handleCancel();
38247
+ };
38248
+ }, [handleCancel]);
38249
+ React.useEffect(function () {
38250
+ if (metadataType === shared.MetadataType.CharacterSkin) {
38251
+ return undefined;
38252
+ }
38253
+ var timer = window.setTimeout(handleCancel, 0);
38254
+ return function () {
38255
+ return window.clearTimeout(timer);
38279
38256
  };
38280
- }, [onCancel]);
38281
- // Use string comparison instead of direct property access
38282
- if (metadataType === 'CharacterSkin') {
38257
+ }, [handleCancel, metadataType]);
38258
+ if (metadataType === shared.MetadataType.CharacterSkin) {
38283
38259
  return React__default.createElement(CharacterSkinSelectionModal, {
38284
38260
  isOpen: true,
38285
- onClose: onCancel,
38261
+ onClose: handleCancel,
38286
38262
  onConfirm: function onConfirm(selectedSkin) {
38287
- return onCollect({
38263
+ return handleCollect({
38288
38264
  selectedSkin: selectedSkin
38289
38265
  });
38290
38266
  },
@@ -38293,12 +38269,9 @@ var MetadataCollector = function MetadataCollector(_ref) {
38293
38269
  atlasIMG: config.atlasIMG,
38294
38270
  initialSelectedSkin: config.initialSelectedSkin
38295
38271
  });
38296
- } else {
38297
- console.warn("No collector implemented for metadata type: " + metadataType);
38298
- // Auto-cancel for unhandled types to prevent hanging promises
38299
- setTimeout(onCancel, 0);
38300
- return null;
38301
38272
  }
38273
+ console.warn("No collector implemented for metadata type: " + metadataType);
38274
+ return null;
38302
38275
  };
38303
38276
 
38304
38277
  var PaymentMethodModal = function PaymentMethodModal(_ref) {
@@ -38448,6 +38421,159 @@ var ConfirmRow$1 = /*#__PURE__*/styled__default.div.withConfig({
38448
38421
  componentId: "sc-1dxy6lr-12"
38449
38422
  })(["display:flex;justify-content:center;margin-top:4px;"]);
38450
38423
 
38424
+ function packToBlueprint(pack) {
38425
+ return {
38426
+ key: pack.key,
38427
+ name: pack.title,
38428
+ description: pack.description || '',
38429
+ price: pack.priceUSD,
38430
+ currency: shared.PaymentCurrency.USD,
38431
+ texturePath: pack.image["default"] || pack.image.src,
38432
+ type: shared.PurchaseType.Pack,
38433
+ onPurchase: function () {
38434
+ var _onPurchase = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
38435
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
38436
+ while (1) switch (_context.prev = _context.next) {
38437
+ case 0:
38438
+ case "end":
38439
+ return _context.stop();
38440
+ }
38441
+ }, _callee);
38442
+ }));
38443
+ function onPurchase() {
38444
+ return _onPurchase.apply(this, arguments);
38445
+ }
38446
+ return onPurchase;
38447
+ }(),
38448
+ itemType: shared.ItemType.Consumable,
38449
+ itemSubType: shared.ItemSubType.Other,
38450
+ rarity: shared.ItemRarities.Common,
38451
+ weight: 0,
38452
+ isStackable: false,
38453
+ maxStackSize: 1,
38454
+ isUsable: false
38455
+ };
38456
+ }
38457
+
38458
+ var DEFAULT_TAB_ORDER = ['premium', 'packs', 'items'];
38459
+ function isTabAvailable(tabId, params) {
38460
+ var hidePremiumTab = params.hidePremiumTab,
38461
+ hasCharacters = params.hasCharacters,
38462
+ hasRedeem = params.hasRedeem,
38463
+ hasWallet = params.hasWallet,
38464
+ hasHistory = params.hasHistory;
38465
+ if (tabId === 'premium') return !hidePremiumTab;
38466
+ if (tabId === 'characters') return !!hasCharacters;
38467
+ if (tabId === 'redeem') return !!hasRedeem;
38468
+ if (tabId === 'wallet') return !!hasWallet;
38469
+ if (tabId === 'history') return !!hasHistory;
38470
+ return true;
38471
+ }
38472
+ function getInitialActiveTab(availableTabIds, defaultActiveTab) {
38473
+ var _availableTabIds$;
38474
+ if (defaultActiveTab && availableTabIds.includes(defaultActiveTab)) {
38475
+ return defaultActiveTab;
38476
+ }
38477
+ return (_availableTabIds$ = availableTabIds[0]) != null ? _availableTabIds$ : 'items';
38478
+ }
38479
+ function buildAvailableTabIds(params) {
38480
+ var tabOrder = params.tabOrder,
38481
+ hasCharacters = params.hasCharacters,
38482
+ hasRedeem = params.hasRedeem,
38483
+ hasWallet = params.hasWallet,
38484
+ hasHistory = params.hasHistory;
38485
+ var ids = [].concat(tabOrder != null ? tabOrder : DEFAULT_TAB_ORDER, hasCharacters ? ['characters'] : [], hasRedeem ? ['redeem'] : [], hasWallet ? ['wallet'] : [], hasHistory ? ['history'] : []);
38486
+ return Array.from(new Set(ids.filter(function (id) {
38487
+ return isTabAvailable(id, params);
38488
+ })));
38489
+ }
38490
+ function useStoreTabs(params) {
38491
+ var tabOrder = params.tabOrder,
38492
+ hidePremiumTab = params.hidePremiumTab,
38493
+ hasCharacters = params.hasCharacters,
38494
+ hasRedeem = params.hasRedeem,
38495
+ hasWallet = params.hasWallet,
38496
+ hasHistory = params.hasHistory,
38497
+ defaultActiveTab = params.defaultActiveTab,
38498
+ onTabChange = params.onTabChange,
38499
+ getItemCount = params.getItemCount;
38500
+ var availableTabIds = React.useMemo(function () {
38501
+ return buildAvailableTabIds({
38502
+ tabOrder: tabOrder,
38503
+ hidePremiumTab: hidePremiumTab,
38504
+ hasCharacters: hasCharacters,
38505
+ hasRedeem: hasRedeem,
38506
+ hasWallet: hasWallet,
38507
+ hasHistory: hasHistory
38508
+ });
38509
+ }, [tabOrder, hidePremiumTab, hasCharacters, hasRedeem, hasWallet, hasHistory]);
38510
+ var _useState = React.useState(function () {
38511
+ return getInitialActiveTab(availableTabIds, defaultActiveTab);
38512
+ }),
38513
+ activeTab = _useState[0],
38514
+ setActiveTab = _useState[1];
38515
+ var resolvedActiveTab = availableTabIds.includes(activeTab) ? activeTab : getInitialActiveTab(availableTabIds, defaultActiveTab);
38516
+ React.useEffect(function () {
38517
+ if (resolvedActiveTab === activeTab) {
38518
+ return;
38519
+ }
38520
+ setActiveTab(resolvedActiveTab);
38521
+ }, [activeTab, resolvedActiveTab]);
38522
+ var handleTabChange = function handleTabChange(tabId) {
38523
+ var _getItemCount;
38524
+ var nextTab = tabId;
38525
+ if (!availableTabIds.includes(nextTab) || nextTab === resolvedActiveTab) {
38526
+ return;
38527
+ }
38528
+ setActiveTab(nextTab);
38529
+ onTabChange == null ? void 0 : onTabChange(nextTab, (_getItemCount = getItemCount == null ? void 0 : getItemCount(nextTab)) != null ? _getItemCount : 0);
38530
+ };
38531
+ return {
38532
+ availableTabIds: availableTabIds,
38533
+ activeTab: resolvedActiveTab,
38534
+ setActiveTab: setActiveTab,
38535
+ handleTabChange: handleTabChange
38536
+ };
38537
+ }
38538
+
38539
+ var StoreHeader = function StoreHeader(_ref) {
38540
+ var tabs = _ref.tabs,
38541
+ activeTabId = _ref.activeTabId,
38542
+ onTabChange = _ref.onTabChange,
38543
+ cartItemCount = _ref.cartItemCount,
38544
+ onOpenCart = _ref.onOpenCart;
38545
+ return React__default.createElement(HeaderRow, null, React__default.createElement(TabsFlexWrapper, null, React__default.createElement(Tabs, {
38546
+ options: tabs.map(function (t) {
38547
+ return {
38548
+ id: t.id,
38549
+ label: t.label,
38550
+ icon: t.icon
38551
+ };
38552
+ }),
38553
+ activeTabId: activeTabId,
38554
+ onTabChange: onTabChange
38555
+ })), React__default.createElement(CartButtonWrapper, null, React__default.createElement(CTAButton, {
38556
+ icon: React__default.createElement(fa.FaShoppingCart, null),
38557
+ onClick: onOpenCart
38558
+ }), cartItemCount > 0 && React__default.createElement(CartBadge, null, cartItemCount)));
38559
+ };
38560
+ var HeaderRow = /*#__PURE__*/styled__default.div.withConfig({
38561
+ displayName: "StoreHeader__HeaderRow",
38562
+ componentId: "sc-1y26lw-0"
38563
+ })(["display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:0.25rem;padding-top:10px;padding-right:12px;"]);
38564
+ var TabsFlexWrapper = /*#__PURE__*/styled__default.div.withConfig({
38565
+ displayName: "StoreHeader__TabsFlexWrapper",
38566
+ componentId: "sc-1y26lw-1"
38567
+ })(["flex:1;min-width:0;"]);
38568
+ var CartButtonWrapper = /*#__PURE__*/styled__default.div.withConfig({
38569
+ displayName: "StoreHeader__CartButtonWrapper",
38570
+ componentId: "sc-1y26lw-2"
38571
+ })(["position:relative;flex-shrink:0;"]);
38572
+ var CartBadge = /*#__PURE__*/styled__default.div.withConfig({
38573
+ displayName: "StoreHeader__CartBadge",
38574
+ componentId: "sc-1y26lw-3"
38575
+ })(["position:absolute;top:-8px;right:-8px;background:#ef4444;color:white;font-family:'Press Start 2P',cursive;font-size:0.5rem;padding:4px;border-radius:50%;border:2px solid #000;display:flex;align-items:center;justify-content:center;min-width:16px;min-height:16px;box-sizing:content-box;"]);
38576
+
38451
38577
  var ScrollableContent = function ScrollableContent(_ref) {
38452
38578
  var items = _ref.items,
38453
38579
  renderItem = _ref.renderItem,
@@ -38460,8 +38586,7 @@ var ScrollableContent = function ScrollableContent(_ref) {
38460
38586
  layout = _ref$layout === void 0 ? 'list' : _ref$layout,
38461
38587
  _ref$gridColumns = _ref.gridColumns,
38462
38588
  gridColumns = _ref$gridColumns === void 0 ? 4 : _ref$gridColumns,
38463
- _ref$maxHeight = _ref.maxHeight,
38464
- maxHeight = _ref$maxHeight === void 0 ? '500px' : _ref$maxHeight;
38589
+ maxHeight = _ref.maxHeight;
38465
38590
  if (items.length === 0) {
38466
38591
  return React__default.createElement(EmptyMessage$3, null, emptyMessage);
38467
38592
  }
@@ -38517,8 +38642,8 @@ var StyledDropdown$7 = /*#__PURE__*/styled__default(Dropdown).withConfig({
38517
38642
  var Content$4 = /*#__PURE__*/styled__default.div.withConfig({
38518
38643
  displayName: "ScrollableContent__Content",
38519
38644
  componentId: "sc-xhh2um-7"
38520
- })(["display:flex;flex-direction:column;gap:0.5rem;flex:1;padding:1rem;max-height:", ";overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable;&.grid{display:grid;grid-template-columns:repeat( ", ",minmax(0,1fr) );gap:1rem;align-items:start;.ScrollableContent-item{display:flex;align-items:flex-start;}}&.list{display:flex;flex-direction:column;gap:0.5rem;}"], function (props) {
38521
- return props.$maxHeight;
38645
+ })(["display:flex;flex-direction:column;gap:0.5rem;flex:1;padding:1rem;", " &.grid{display:grid;grid-template-columns:repeat( ", ",minmax(0,1fr) );gap:1rem;align-items:start;.ScrollableContent-item{display:flex;align-items:flex-start;}}&.list{display:flex;flex-direction:column;gap:0.5rem;}"], function (p) {
38646
+ return p.$maxHeight ? "max-height: " + p.$maxHeight + "; overflow-y: auto; overflow-x: hidden; scrollbar-gutter: stable;" : '';
38522
38647
  }, function (props) {
38523
38648
  return props.$gridColumns;
38524
38649
  });
@@ -39100,7 +39225,7 @@ var TextInput = /*#__PURE__*/styled__default.input.withConfig({
39100
39225
  componentId: "sc-ptotuo-12"
39101
39226
  })(["width:120px;text-align:center;margin:0 auto;font-size:0.875rem;background:rgba(0,0,0,0.2);color:#ffffff;border:none;padding:0.25rem;"]);
39102
39227
 
39103
- var useStoreFiltering = function useStoreFiltering(items) {
39228
+ var useStoreFiltering = function useStoreFiltering(items, overrideCategoryOptions) {
39104
39229
  var _useState = React.useState(''),
39105
39230
  searchQuery = _useState[0],
39106
39231
  setSearchQuery = _useState[1];
@@ -39108,6 +39233,21 @@ var useStoreFiltering = function useStoreFiltering(items) {
39108
39233
  selectedCategory = _useState2[0],
39109
39234
  setSelectedCategory = _useState2[1];
39110
39235
  var categoryOptions = React.useMemo(function () {
39236
+ if (overrideCategoryOptions) {
39237
+ var normalizedOptions = overrideCategoryOptions.some(function (opt) {
39238
+ return opt.value === 'all';
39239
+ }) ? overrideCategoryOptions : [{
39240
+ value: 'all',
39241
+ label: 'All'
39242
+ }].concat(overrideCategoryOptions);
39243
+ return normalizedOptions.map(function (opt, index) {
39244
+ return {
39245
+ id: index,
39246
+ value: opt.value,
39247
+ option: opt.label
39248
+ };
39249
+ });
39250
+ }
39111
39251
  var uniqueCategories = Array.from(new Set(items.map(function (item) {
39112
39252
  return item.itemType;
39113
39253
  })));
@@ -39119,7 +39259,16 @@ var useStoreFiltering = function useStoreFiltering(items) {
39119
39259
  option: category === 'all' ? 'All' : category
39120
39260
  };
39121
39261
  });
39122
- }, [items]);
39262
+ }, [items, overrideCategoryOptions]);
39263
+ React.useEffect(function () {
39264
+ var _categoryOptions$0$va, _categoryOptions$;
39265
+ if (categoryOptions.some(function (option) {
39266
+ return option.value === selectedCategory;
39267
+ })) {
39268
+ return;
39269
+ }
39270
+ setSelectedCategory((_categoryOptions$0$va = (_categoryOptions$ = categoryOptions[0]) == null ? void 0 : _categoryOptions$.value) != null ? _categoryOptions$0$va : 'all');
39271
+ }, [categoryOptions, selectedCategory]);
39123
39272
  var filteredItems = React.useMemo(function () {
39124
39273
  return items.filter(function (item) {
39125
39274
  var matchesSearch = item.name.toLowerCase().includes(searchQuery.toLowerCase());
@@ -39158,22 +39307,21 @@ var StoreItemsSection = function StoreItemsSection(_ref) {
39158
39307
  onItemView = _ref.onItemView,
39159
39308
  onCategoryChange = _ref.onCategoryChange,
39160
39309
  _ref$currencySymbol = _ref.currencySymbol,
39161
- currencySymbol = _ref$currencySymbol === void 0 ? '$' : _ref$currencySymbol;
39162
- var _useStoreFiltering = useStoreFiltering(items),
39310
+ currencySymbol = _ref$currencySymbol === void 0 ? '$' : _ref$currencySymbol,
39311
+ categoryOptionsProp = _ref.categoryOptions;
39312
+ var _useStoreFiltering = useStoreFiltering(items, categoryOptionsProp),
39163
39313
  searchQuery = _useStoreFiltering.searchQuery,
39164
39314
  setSearchQuery = _useStoreFiltering.setSearchQuery,
39165
39315
  selectedCategory = _useStoreFiltering.selectedCategory,
39166
39316
  setSelectedCategory = _useStoreFiltering.setSelectedCategory,
39167
39317
  categoryOptions = _useStoreFiltering.categoryOptions,
39168
39318
  filteredItems = _useStoreFiltering.filteredItems;
39169
- // Fire category change event when the filter changes
39170
39319
  React.useEffect(function () {
39171
39320
  onCategoryChange == null ? void 0 : onCategoryChange(selectedCategory, filteredItems.length);
39172
39321
  }, [selectedCategory, filteredItems.length]);
39173
39322
  var renderStoreItem = function renderStoreItem(item) {
39174
39323
  var meta = itemBadges[item.key];
39175
39324
  var position = filteredItems.indexOf(item);
39176
- // Prefer a specialized character skin row when needed
39177
39325
  if (item.metadataType === shared.MetadataType.CharacterSkin) {
39178
39326
  return React__default.createElement(StoreCharacterSkinRow, {
39179
39327
  key: item.key,
@@ -39184,7 +39332,6 @@ var StoreItemsSection = function StoreItemsSection(_ref) {
39184
39332
  userAccountType: userAccountType || shared.UserAccountTypes.Free
39185
39333
  });
39186
39334
  }
39187
- // Render text input row when configured for this item key
39188
39335
  if (textInputItemKeys.includes(item.key)) {
39189
39336
  return React__default.createElement(StoreItemRow, Object.assign({
39190
39337
  key: item.key,
@@ -39200,7 +39347,6 @@ var StoreItemsSection = function StoreItemsSection(_ref) {
39200
39347
  currencySymbol: currencySymbol
39201
39348
  }, meta));
39202
39349
  }
39203
- // Fallback to standard arrow-based row
39204
39350
  return React__default.createElement(StoreItemRow, Object.assign({
39205
39351
  key: item.key,
39206
39352
  item: item,
@@ -39214,19 +39360,7 @@ var StoreItemsSection = function StoreItemsSection(_ref) {
39214
39360
  currencySymbol: currencySymbol
39215
39361
  }, meta));
39216
39362
  };
39217
- var _useState = React.useState(false),
39218
- showFilters = _useState[0],
39219
- setShowFilters = _useState[1];
39220
- return React__default.createElement(StoreContainer, null, React__default.createElement(FilterBar, null, React__default.createElement(FilterToggle, {
39221
- "$active": showFilters,
39222
- onClick: function onClick() {
39223
- return setShowFilters(function (prev) {
39224
- return !prev;
39225
- });
39226
- }
39227
- }, React__default.createElement(fa.FaFilter, {
39228
- size: 12
39229
- }), React__default.createElement("span", null, "Filter"))), showFilters && React__default.createElement(SearchHeader$2, null, React__default.createElement(SearchBarContainer$1, null, React__default.createElement(SearchBar, {
39363
+ return React__default.createElement(StoreContainer, null, React__default.createElement(SearchHeader$2, null, React__default.createElement(SearchBarContainer$1, null, React__default.createElement(SearchBar, {
39230
39364
  value: searchQuery,
39231
39365
  onChange: setSearchQuery,
39232
39366
  placeholder: "Search items..."
@@ -39238,15 +39372,12 @@ var StoreItemsSection = function StoreItemsSection(_ref) {
39238
39372
  };
39239
39373
  }),
39240
39374
  activeId: selectedCategory,
39241
- onChange: function onChange(id) {
39242
- return setSelectedCategory(id);
39243
- }
39375
+ onChange: setSelectedCategory
39244
39376
  })), React__default.createElement(ScrollableContent, {
39245
39377
  items: filteredItems,
39246
39378
  renderItem: renderStoreItem,
39247
39379
  emptyMessage: "No items match your filters.",
39248
- layout: "list",
39249
- maxHeight: "none"
39380
+ layout: "list"
39250
39381
  }));
39251
39382
  };
39252
39383
  var StoreContainer = /*#__PURE__*/styled__default.div.withConfig({
@@ -39256,22 +39387,11 @@ var StoreContainer = /*#__PURE__*/styled__default.div.withConfig({
39256
39387
  var SearchHeader$2 = /*#__PURE__*/styled__default.div.withConfig({
39257
39388
  displayName: "StoreItemsSection__SearchHeader",
39258
39389
  componentId: "sc-l6f466-1"
39259
- })(["display:flex;gap:0.5rem;align-items:center;padding-top:0.25rem;"]);
39390
+ })(["display:flex;gap:0.5rem;align-items:center;padding:0.25rem 1rem 0;"]);
39260
39391
  var SearchBarContainer$1 = /*#__PURE__*/styled__default.div.withConfig({
39261
39392
  displayName: "StoreItemsSection__SearchBarContainer",
39262
39393
  componentId: "sc-l6f466-2"
39263
39394
  })(["flex:0.75;"]);
39264
- var FilterBar = /*#__PURE__*/styled__default.div.withConfig({
39265
- displayName: "StoreItemsSection__FilterBar",
39266
- componentId: "sc-l6f466-3"
39267
- })(["display:flex;padding-top:0.25rem;"]);
39268
- var FilterToggle = /*#__PURE__*/styled__default.button.withConfig({
39269
- displayName: "StoreItemsSection__FilterToggle",
39270
- componentId: "sc-l6f466-4"
39271
- })(["display:flex;align-items:center;gap:0.4rem;background:", ";border:1px solid rgba(255,255,255,0.3);color:#fff;padding:0.3rem 0.6rem;border-radius:4px;cursor:pointer;font-family:'Press Start 2P',cursive;font-size:0.55rem;&:hover{background:rgba(255,255,255,0.1);}"], function (_ref2) {
39272
- var $active = _ref2.$active;
39273
- return $active ? 'rgba(255,255,255,0.15)' : 'transparent';
39274
- });
39275
39395
 
39276
39396
  var usePackFiltering = function usePackFiltering(packs) {
39277
39397
  var _useState = React.useState(''),
@@ -39419,8 +39539,7 @@ var StorePacksSection = function StorePacksSection(_ref2) {
39419
39539
  onChange: setSearchQuery,
39420
39540
  placeholder: 'Search packs...'
39421
39541
  },
39422
- layout: "list",
39423
- maxHeight: "50vh"
39542
+ layout: "list"
39424
39543
  });
39425
39544
  };
39426
39545
  var PackRow = /*#__PURE__*/styled__default(ItemRowWrapper).withConfig({
@@ -39724,7 +39843,7 @@ var Store = function Store(_ref) {
39724
39843
  packs = _ref$packs === void 0 ? [] : _ref$packs,
39725
39844
  atlasJSON = _ref.atlasJSON,
39726
39845
  atlasIMG = _ref.atlasIMG,
39727
- _onPurchase4 = _ref.onPurchase,
39846
+ _onPurchase = _ref.onPurchase,
39728
39847
  onShowHistory = _ref.onShowHistory,
39729
39848
  onShowWallet = _ref.onShowWallet,
39730
39849
  walletLabel = _ref.walletLabel,
@@ -39745,11 +39864,6 @@ var Store = function Store(_ref) {
39745
39864
  customHistoryContent = _ref.customHistoryContent,
39746
39865
  _ref$fullScreen = _ref.fullScreen,
39747
39866
  fullScreen = _ref$fullScreen === void 0 ? false : _ref$fullScreen,
39748
- containerWidth = _ref.containerWidth,
39749
- containerHeight = _ref.containerHeight,
39750
- mobileContainerWidth = _ref.mobileContainerWidth,
39751
- mobileContainerHeight = _ref.mobileContainerHeight,
39752
- mobileBreakpoint = _ref.mobileBreakpoint,
39753
39867
  _ref$packsTabLabel = _ref.packsTabLabel,
39754
39868
  packsTabLabel = _ref$packsTabLabel === void 0 ? 'Packs' : _ref$packsTabLabel,
39755
39869
  packsBadge = _ref.packsBadge,
@@ -39759,7 +39873,7 @@ var Store = function Store(_ref) {
39759
39873
  packBadges = _ref.packBadges,
39760
39874
  onItemView = _ref.onItemView,
39761
39875
  onPackView = _ref.onPackView,
39762
- _onTabChange = _ref.onTabChange,
39876
+ onTabChange = _ref.onTabChange,
39763
39877
  onCategoryChange = _ref.onCategoryChange,
39764
39878
  onCartOpen = _ref.onCartOpen,
39765
39879
  onAddToCart = _ref.onAddToCart,
@@ -39767,29 +39881,19 @@ var Store = function Store(_ref) {
39767
39881
  onCheckoutStart = _ref.onCheckoutStart,
39768
39882
  onPurchaseSuccess = _ref.onPurchaseSuccess,
39769
39883
  onPurchaseError = _ref.onPurchaseError,
39770
- onBuyDC = _ref.onBuyDC,
39771
39884
  _ref$currencySymbol = _ref.currencySymbol,
39772
39885
  currencySymbol = _ref$currencySymbol === void 0 ? '$' : _ref$currencySymbol,
39773
39886
  onRedeem = _ref.onRedeem,
39774
39887
  onRedeemInputFocus = _ref.onRedeemInputFocus,
39775
- onRedeemInputBlur = _ref.onRedeemInputBlur;
39776
- var defaultTabOrder = ['premium', 'packs', 'items'];
39888
+ onRedeemInputBlur = _ref.onRedeemInputBlur,
39889
+ _ref$width = _ref.width,
39890
+ width = _ref$width === void 0 ? '1000px' : _ref$width,
39891
+ _ref$height = _ref.height,
39892
+ height = _ref$height === void 0 ? 'min(85vh, 900px)' : _ref$height,
39893
+ itemCategoryOptions = _ref.itemCategoryOptions;
39777
39894
  var _useState = React.useState(null),
39778
39895
  selectedPack = _useState[0],
39779
39896
  setSelectedPack = _useState[1];
39780
- var _useState2 = React.useState(function () {
39781
- var _validTabs$;
39782
- var allTabIds = [].concat(tabOrder != null ? tabOrder : defaultTabOrder, customCharactersContent ? ['characters'] : [], onRedeem ? ['redeem'] : [], onShowWallet || customWalletContent ? ['wallet'] : [], onShowHistory || customHistoryContent ? ['history'] : []);
39783
- var validTabs = Array.from(new Set(allTabIds.filter(function (id) {
39784
- return !(hidePremiumTab && id === 'premium');
39785
- })));
39786
- if (defaultActiveTab && validTabs.includes(defaultActiveTab)) {
39787
- return defaultActiveTab;
39788
- }
39789
- return (_validTabs$ = validTabs[0]) != null ? _validTabs$ : hidePremiumTab ? 'items' : 'premium';
39790
- }),
39791
- activeTab = _useState2[0],
39792
- setActiveTab = _useState2[1];
39793
39897
  var _useStoreCart = useStoreCart(),
39794
39898
  cartItems = _useStoreCart.cartItems,
39795
39899
  handleAddToCart = _useStoreCart.handleAddToCart,
@@ -39799,13 +39903,38 @@ var Store = function Store(_ref) {
39799
39903
  closeCart = _useStoreCart.closeCart,
39800
39904
  getTotalItems = _useStoreCart.getTotalItems,
39801
39905
  getTotalPrice = _useStoreCart.getTotalPrice,
39802
- isCartOpen = _useStoreCart.isCartOpen;
39803
- var _useState3 = React.useState(false),
39804
- isCollectingMetadata = _useState3[0],
39805
- setIsCollectingMetadata = _useState3[1];
39806
- var _useState4 = React.useState(null),
39807
- currentMetadataItem = _useState4[0],
39808
- setCurrentMetadataItem = _useState4[1];
39906
+ isCartOpen = _useStoreCart.isCartOpen,
39907
+ isCollectingMetadata = _useStoreCart.isCollectingMetadata,
39908
+ currentMetadataItem = _useStoreCart.currentMetadataItem,
39909
+ resolveMetadata = _useStoreCart.resolveMetadata;
39910
+ var filteredItems = React.useMemo(function () {
39911
+ return {
39912
+ items: items,
39913
+ premium: items.filter(function (item) {
39914
+ var _item$requiredAccount, _item$requiredAccount2;
39915
+ return ((_item$requiredAccount = (_item$requiredAccount2 = item.requiredAccountType) == null ? void 0 : _item$requiredAccount2.length) != null ? _item$requiredAccount : 0) > 0;
39916
+ })
39917
+ };
39918
+ }, [items]);
39919
+ var _useStoreTabs = useStoreTabs({
39920
+ tabOrder: tabOrder,
39921
+ defaultActiveTab: defaultActiveTab,
39922
+ hidePremiumTab: hidePremiumTab,
39923
+ hasCharacters: !!customCharactersContent,
39924
+ hasRedeem: !!onRedeem,
39925
+ hasWallet: !!(onShowWallet || customWalletContent),
39926
+ hasHistory: !!(onShowHistory || customHistoryContent),
39927
+ onTabChange: onTabChange,
39928
+ getItemCount: function getItemCount(tab) {
39929
+ if (tab === 'items') return filteredItems.items.length;
39930
+ if (tab === 'premium') return filteredItems.premium.length;
39931
+ if (tab === 'packs') return packs.length;
39932
+ return 0;
39933
+ }
39934
+ }),
39935
+ availableTabIds = _useStoreTabs.availableTabIds,
39936
+ activeTab = _useStoreTabs.activeTab,
39937
+ handleTabChange = _useStoreTabs.handleTabChange;
39809
39938
  var handleOpenCart = function handleOpenCart() {
39810
39939
  openCart();
39811
39940
  onCartOpen == null ? void 0 : onCartOpen();
@@ -39822,85 +39951,13 @@ var Store = function Store(_ref) {
39822
39951
  if (quantity === void 0) {
39823
39952
  quantity = 1;
39824
39953
  }
39825
- var packItem = {
39826
- key: pack.key,
39827
- name: pack.title,
39828
- description: pack.description || '',
39829
- price: pack.priceUSD,
39830
- currency: shared.PaymentCurrency.USD,
39831
- texturePath: pack.image["default"] || pack.image.src,
39832
- type: shared.PurchaseType.Pack,
39833
- onPurchase: function () {
39834
- var _onPurchase = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
39835
- return _regeneratorRuntime().wrap(function _callee$(_context) {
39836
- while (1) switch (_context.prev = _context.next) {
39837
- case 0:
39838
- case "end":
39839
- return _context.stop();
39840
- }
39841
- }, _callee);
39842
- }));
39843
- function onPurchase() {
39844
- return _onPurchase.apply(this, arguments);
39845
- }
39846
- return onPurchase;
39847
- }(),
39848
- itemType: shared.ItemType.Consumable,
39849
- itemSubType: shared.ItemSubType.Other,
39850
- rarity: shared.ItemRarities.Common,
39851
- weight: 0,
39852
- isStackable: false,
39853
- maxStackSize: 1,
39854
- isUsable: false
39855
- };
39856
- handleAddToCart(packItem, quantity);
39857
- onAddToCart == null ? void 0 : onAddToCart(packItem, quantity);
39858
- };
39859
- var filterItems = function filterItems(itemsToFilter, type) {
39860
- return itemsToFilter.filter(function (item) {
39861
- if (type === 'premium') {
39862
- var _item$requiredAccount, _item$requiredAccount2;
39863
- return (_item$requiredAccount = (_item$requiredAccount2 = item.requiredAccountType) == null ? void 0 : _item$requiredAccount2.length) != null ? _item$requiredAccount : 0 > 0;
39864
- }
39865
- return true;
39866
- });
39867
- };
39868
- var filteredItems = React.useMemo(function () {
39869
- return {
39870
- items: filterItems(items, 'items'),
39871
- premium: filterItems(items, 'premium')
39872
- };
39873
- }, [items]);
39874
- var handleMetadataCollected = function handleMetadataCollected(metadata) {
39875
- if (currentMetadataItem && window.__metadataResolvers) {
39876
- // Resolve the promise in the useStoreMetadata hook
39877
- window.__metadataResolvers.resolve(metadata);
39878
- // Reset the metadata collection state
39879
- setCurrentMetadataItem(null);
39880
- // Removed unused setPendingMetadataQuantity call
39881
- }
39954
+ var bp = packToBlueprint(pack);
39955
+ handleAddToCart(bp, quantity);
39956
+ onAddToCart == null ? void 0 : onAddToCart(bp, quantity);
39882
39957
  };
39883
- var handleMetadataCancel = function handleMetadataCancel() {
39884
- if (window.__metadataResolvers) {
39885
- // Resolve with null to indicate cancellation
39886
- window.__metadataResolvers.resolve(null);
39887
- }
39888
- // Reset the metadata collection state
39889
- setCurrentMetadataItem(null);
39890
- // Removed unused setPendingMetadataQuantity call
39891
- setIsCollectingMetadata(false);
39892
- };
39893
- if (loading) {
39894
- return React__default.createElement(LoadingMessage$1, null, "Loading...");
39895
- }
39896
- if (error) {
39897
- return React__default.createElement(ErrorMessage$3, null, error);
39898
- }
39899
- // Build tabs dynamically based on props
39900
- var tabIds = [].concat(tabOrder != null ? tabOrder : defaultTabOrder, customCharactersContent ? ['characters'] : [], onRedeem ? ['redeem'] : [], onShowWallet || customWalletContent ? ['wallet'] : [], onShowHistory || customHistoryContent ? ['history'] : []);
39901
- var availableTabIds = Array.from(new Set(tabIds.filter(function (id) {
39902
- return !(hidePremiumTab && id === 'premium');
39903
- })));
39958
+ var makePackQuickBuy = onQuickBuy ? function (pack, qty) {
39959
+ return onQuickBuy(packToBlueprint(pack), qty);
39960
+ } : undefined;
39904
39961
  var tabsMap = {
39905
39962
  premium: {
39906
39963
  id: 'premium',
@@ -39914,40 +39971,7 @@ var Store = function Store(_ref) {
39914
39971
  return pack.priceUSD >= 9.99;
39915
39972
  }),
39916
39973
  onAddToCart: handleAddPackToCart,
39917
- onQuickBuy: onQuickBuy ? function (pack, qty) {
39918
- var bp = {
39919
- key: pack.key,
39920
- name: pack.title,
39921
- description: pack.description || '',
39922
- price: pack.priceUSD,
39923
- currency: shared.PaymentCurrency.USD,
39924
- texturePath: pack.image["default"] || pack.image.src,
39925
- type: shared.PurchaseType.Pack,
39926
- onPurchase: function () {
39927
- var _onPurchase2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
39928
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
39929
- while (1) switch (_context2.prev = _context2.next) {
39930
- case 0:
39931
- case "end":
39932
- return _context2.stop();
39933
- }
39934
- }, _callee2);
39935
- }));
39936
- function onPurchase() {
39937
- return _onPurchase2.apply(this, arguments);
39938
- }
39939
- return onPurchase;
39940
- }(),
39941
- itemType: shared.ItemType.Consumable,
39942
- itemSubType: shared.ItemSubType.Other,
39943
- rarity: shared.ItemRarities.Common,
39944
- weight: 0,
39945
- isStackable: false,
39946
- maxStackSize: 1,
39947
- isUsable: false
39948
- };
39949
- onQuickBuy(bp, qty);
39950
- } : undefined,
39974
+ onQuickBuy: makePackQuickBuy,
39951
39975
  onSelectPack: setSelectedPack,
39952
39976
  atlasJSON: atlasJSON,
39953
39977
  atlasIMG: atlasIMG,
@@ -39972,40 +39996,7 @@ var Store = function Store(_ref) {
39972
39996
  return pack.priceUSD < 9.99;
39973
39997
  }),
39974
39998
  onAddToCart: handleAddPackToCart,
39975
- onQuickBuy: onQuickBuy ? function (pack, qty) {
39976
- var bp = {
39977
- key: pack.key,
39978
- name: pack.title,
39979
- description: pack.description || '',
39980
- price: pack.priceUSD,
39981
- currency: shared.PaymentCurrency.USD,
39982
- texturePath: pack.image["default"] || pack.image.src,
39983
- type: shared.PurchaseType.Pack,
39984
- onPurchase: function () {
39985
- var _onPurchase3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
39986
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
39987
- while (1) switch (_context3.prev = _context3.next) {
39988
- case 0:
39989
- case "end":
39990
- return _context3.stop();
39991
- }
39992
- }, _callee3);
39993
- }));
39994
- function onPurchase() {
39995
- return _onPurchase3.apply(this, arguments);
39996
- }
39997
- return onPurchase;
39998
- }(),
39999
- itemType: shared.ItemType.Consumable,
40000
- itemSubType: shared.ItemSubType.Other,
40001
- rarity: shared.ItemRarities.Common,
40002
- weight: 0,
40003
- isStackable: false,
40004
- maxStackSize: 1,
40005
- isUsable: false
40006
- };
40007
- onQuickBuy(bp, qty);
40008
- } : undefined,
39999
+ onQuickBuy: makePackQuickBuy,
40009
40000
  onSelectPack: setSelectedPack,
40010
40001
  atlasJSON: atlasJSON,
40011
40002
  atlasIMG: atlasIMG,
@@ -40024,7 +40015,7 @@ var Store = function Store(_ref) {
40024
40015
  content: React__default.createElement(StoreItemsSection, {
40025
40016
  items: filteredItems.items,
40026
40017
  onAddToCart: handleAddToCartTracked,
40027
- onQuickBuy: onQuickBuy ? function (item, qty, _meta) {
40018
+ onQuickBuy: onQuickBuy ? function (item, qty) {
40028
40019
  return onQuickBuy(item, qty);
40029
40020
  } : undefined,
40030
40021
  atlasJSON: atlasJSON,
@@ -40034,7 +40025,8 @@ var Store = function Store(_ref) {
40034
40025
  itemBadges: itemBadges,
40035
40026
  onItemView: onItemView,
40036
40027
  onCategoryChange: onCategoryChange,
40037
- currencySymbol: currencySymbol
40028
+ currencySymbol: currencySymbol,
40029
+ categoryOptions: itemCategoryOptions
40038
40030
  })
40039
40031
  },
40040
40032
  characters: {
@@ -40084,42 +40076,42 @@ var Store = function Store(_ref) {
40084
40076
  }))
40085
40077
  }
40086
40078
  };
40079
+ if (loading) return React__default.createElement(LoadingMessage$1, null, "Loading...");
40080
+ if (error) return React__default.createElement(ErrorMessage$3, null, error);
40087
40081
  return React__default.createElement(DraggableContainer, {
40088
- title: "Store",
40089
40082
  onCloseButton: onClose,
40090
- width: containerWidth != null ? containerWidth : "1000px",
40083
+ width: width,
40091
40084
  minWidth: "700px",
40092
- height: containerHeight != null ? containerHeight : "min(85vh, 900px)",
40093
- mobileWidth: mobileContainerWidth != null ? mobileContainerWidth : "95vw",
40094
- mobileHeight: mobileContainerHeight != null ? mobileContainerHeight : "95vh",
40095
- mobileBreakpoint: mobileBreakpoint,
40085
+ height: height,
40096
40086
  type: exports.RPGUIContainerTypes.Framed,
40097
- cancelDrag: "[class*='Store__Container'], [class*='CartView'], [class*='StoreItemDetails'], .close-button",
40087
+ cancelDrag: ".store-scroll-area, [class*='CartView'], [class*='StoreItemDetails'], .close-button",
40098
40088
  isFullScreen: fullScreen
40099
- }, isCollectingMetadata && currentMetadataItem && currentMetadataItem.metadataType ? React__default.createElement(MetadataCollector, {
40089
+ }, isCollectingMetadata && currentMetadataItem != null && currentMetadataItem.metadataType ? React__default.createElement(MetadataCollector, {
40100
40090
  metadataType: currentMetadataItem.metadataType,
40101
40091
  config: currentMetadataItem.metadataConfig || {},
40102
- onCollect: handleMetadataCollected,
40103
- onCancel: handleMetadataCancel
40092
+ onCollect: resolveMetadata,
40093
+ onCancel: function onCancel() {
40094
+ return resolveMetadata(null);
40095
+ }
40104
40096
  }) : isCartOpen ? React__default.createElement(CartView, {
40105
40097
  cartItems: cartItems,
40106
40098
  onRemoveFromCart: handleRemoveFromCartTracked,
40107
40099
  onClose: closeCart,
40108
40100
  onPurchase: function () {
40109
- var _onPurchase5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
40110
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
40111
- while (1) switch (_context4.prev = _context4.next) {
40101
+ var _onPurchase2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
40102
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
40103
+ while (1) switch (_context.prev = _context.next) {
40112
40104
  case 0:
40113
- handleCartPurchase(_onPurchase4);
40114
- return _context4.abrupt("return", true);
40105
+ handleCartPurchase(_onPurchase);
40106
+ return _context.abrupt("return", true);
40115
40107
  case 2:
40116
40108
  case "end":
40117
- return _context4.stop();
40109
+ return _context.stop();
40118
40110
  }
40119
- }, _callee4);
40111
+ }, _callee);
40120
40112
  }));
40121
40113
  function onPurchase() {
40122
- return _onPurchase5.apply(this, arguments);
40114
+ return _onPurchase2.apply(this, arguments);
40123
40115
  }
40124
40116
  return onPurchase;
40125
40117
  }(),
@@ -40128,7 +40120,6 @@ var Store = function Store(_ref) {
40128
40120
  onCheckoutStart: onCheckoutStart,
40129
40121
  onPurchaseSuccess: onPurchaseSuccess,
40130
40122
  onPurchaseError: onPurchaseError,
40131
- onBuyDC: onBuyDC,
40132
40123
  currencySymbol: currencySymbol
40133
40124
  }) : selectedPack ? React__default.createElement(StoreItemDetails, {
40134
40125
  item: _extends({}, selectedPack, {
@@ -40143,7 +40134,9 @@ var Store = function Store(_ref) {
40143
40134
  return handleAddPackToCart(selectedPack);
40144
40135
  },
40145
40136
  currencySymbol: currencySymbol
40146
- }) : React__default.createElement(Container$Q, null, featuredItems && featuredItems.length > 0 && React__default.createElement(FeaturedBanner, {
40137
+ }) : React__default.createElement(Container$Q, {
40138
+ className: "store-scroll-area"
40139
+ }, featuredItems && featuredItems.length > 0 && React__default.createElement(FeaturedBanner, {
40147
40140
  items: featuredItems,
40148
40141
  atlasJSON: atlasJSON,
40149
40142
  atlasIMG: atlasIMG,
@@ -40157,48 +40150,17 @@ var Store = function Store(_ref) {
40157
40150
  var blueprint = items.find(function (bp) {
40158
40151
  return bp.key === item.key;
40159
40152
  });
40160
- if (blueprint) onQuickBuy(blueprint, 1);else {
40153
+ if (blueprint) {
40154
+ onQuickBuy(blueprint, 1);
40155
+ } else {
40161
40156
  var pack = packs.find(function (p) {
40162
40157
  return p.key === item.key;
40163
40158
  });
40164
- if (pack) {
40165
- var packBlueprint = {
40166
- key: pack.key,
40167
- name: pack.title,
40168
- description: pack.description || '',
40169
- price: pack.priceUSD,
40170
- currency: shared.PaymentCurrency.USD,
40171
- texturePath: pack.image["default"] || pack.image.src,
40172
- type: shared.PurchaseType.Pack,
40173
- onPurchase: function () {
40174
- var _onPurchase6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
40175
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
40176
- while (1) switch (_context5.prev = _context5.next) {
40177
- case 0:
40178
- case "end":
40179
- return _context5.stop();
40180
- }
40181
- }, _callee5);
40182
- }));
40183
- function onPurchase() {
40184
- return _onPurchase6.apply(this, arguments);
40185
- }
40186
- return onPurchase;
40187
- }(),
40188
- itemType: shared.ItemType.Consumable,
40189
- itemSubType: shared.ItemSubType.Other,
40190
- rarity: shared.ItemRarities.Common,
40191
- weight: 0,
40192
- isStackable: false,
40193
- maxStackSize: 1,
40194
- isUsable: false
40195
- };
40196
- onQuickBuy(packBlueprint, 1);
40197
- }
40159
+ if (pack) onQuickBuy(packToBlueprint(pack), 1);
40198
40160
  }
40199
40161
  } : undefined
40200
- }), React__default.createElement(MainContent$1, null, React__default.createElement(HeaderRow, null, React__default.createElement(TabsFlexWrapper, null, React__default.createElement(Tabs, {
40201
- options: availableTabIds.map(function (id) {
40162
+ }), React__default.createElement(MainContent$2, null, React__default.createElement(StoreHeader, {
40163
+ tabs: availableTabIds.map(function (id) {
40202
40164
  var _tabsMap$id, _tabsMap$id2;
40203
40165
  return {
40204
40166
  id: id,
@@ -40207,20 +40169,12 @@ var Store = function Store(_ref) {
40207
40169
  };
40208
40170
  }),
40209
40171
  activeTabId: activeTab,
40210
- onTabChange: function onTabChange(tabId) {
40211
- var nextTab = tabId;
40212
- setActiveTab(nextTab);
40213
- if (_onTabChange) {
40214
- var itemCount = nextTab === 'items' ? filteredItems.items.length : nextTab === 'premium' ? filteredItems.premium.length : nextTab === 'packs' ? packs.length : 0;
40215
- _onTabChange(nextTab, itemCount);
40216
- }
40217
- }
40218
- })), React__default.createElement(CartButtonWrapper, null, React__default.createElement(CTAButton, {
40172
+ onTabChange: handleTabChange,
40173
+ cartItemCount: getTotalItems(),
40174
+ onOpenCart: handleOpenCart
40175
+ }), React__default.createElement(TabContent, null, (_tabsMap$activeTab = tabsMap[activeTab]) == null ? void 0 : _tabsMap$activeTab.content)), cartItems.length > 0 && React__default.createElement(Footer$3, null, React__default.createElement(CTAButton, {
40219
40176
  icon: React__default.createElement(fa.FaShoppingCart, null),
40220
- onClick: handleOpenCart
40221
- }), getTotalItems() > 0 && React__default.createElement(CartBadge, null, getTotalItems()))), React__default.createElement(TabContent, null, (_tabsMap$activeTab = tabsMap[activeTab]) == null ? void 0 : _tabsMap$activeTab.content)), cartItems.length > 0 && React__default.createElement(Footer$3, null, React__default.createElement(CTAButton, {
40222
- icon: React__default.createElement(fa.FaShoppingCart, null),
40223
- label: "Checkout \xB7 " + getTotalItems() + " item" + (getTotalItems() !== 1 ? 's' : '') + " (" + currencySymbol + getTotalPrice().toFixed(2) + ")",
40177
+ label: "Proceed to Checkout (" + currencySymbol + getTotalPrice().toFixed(2) + ")",
40224
40178
  onClick: handleOpenCart,
40225
40179
  fullWidth: true
40226
40180
  }))));
@@ -40228,50 +40182,34 @@ var Store = function Store(_ref) {
40228
40182
  var Container$Q = /*#__PURE__*/styled__default.div.withConfig({
40229
40183
  displayName: "Store__Container",
40230
40184
  componentId: "sc-64dj00-0"
40231
- })(["display:flex;flex-direction:column;width:100%;height:calc(100% - 48px);gap:0.5rem;position:relative;overflow:hidden;"]);
40232
- var HeaderRow = /*#__PURE__*/styled__default.div.withConfig({
40233
- displayName: "Store__HeaderRow",
40234
- componentId: "sc-64dj00-1"
40235
- })(["display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:0.25rem;padding-top:10px;padding-right:12px;"]);
40236
- var TabsFlexWrapper = /*#__PURE__*/styled__default.div.withConfig({
40237
- displayName: "Store__TabsFlexWrapper",
40238
- componentId: "sc-64dj00-2"
40239
- })(["flex:1;min-width:0;"]);
40240
- var CartButtonWrapper = /*#__PURE__*/styled__default.div.withConfig({
40241
- displayName: "Store__CartButtonWrapper",
40242
- componentId: "sc-64dj00-3"
40243
- })(["position:relative;flex-shrink:0;"]);
40244
- var CartBadge = /*#__PURE__*/styled__default.div.withConfig({
40245
- displayName: "Store__CartBadge",
40246
- componentId: "sc-64dj00-4"
40247
- })(["position:absolute;top:-8px;right:-8px;background:#ef4444;color:white;font-family:'Press Start 2P',cursive;font-size:0.5rem;padding:4px;border-radius:50%;border:2px solid #000;display:flex;align-items:center;justify-content:center;min-width:16px;min-height:16px;box-sizing:content-box;"]);
40248
- var MainContent$1 = /*#__PURE__*/styled__default.div.withConfig({
40185
+ })(["display:flex;flex-direction:column;width:100%;height:100%;gap:0.5rem;position:relative;overflow:hidden;"]);
40186
+ var MainContent$2 = /*#__PURE__*/styled__default.div.withConfig({
40249
40187
  displayName: "Store__MainContent",
40250
- componentId: "sc-64dj00-5"
40188
+ componentId: "sc-64dj00-1"
40251
40189
  })(["flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden;"]);
40252
40190
  var TabContent = /*#__PURE__*/styled__default.div.withConfig({
40253
40191
  displayName: "Store__TabContent",
40254
- componentId: "sc-64dj00-6"
40192
+ componentId: "sc-64dj00-2"
40255
40193
  })(["flex:1;overflow-y:auto;"]);
40256
40194
  var Footer$3 = /*#__PURE__*/styled__default.div.withConfig({
40257
40195
  displayName: "Store__Footer",
40258
- componentId: "sc-64dj00-7"
40259
- })(["padding:0.5rem;border-top:2px solid #f59e0b;background:rgba(0,0,0,0.2);flex-shrink:0;"]);
40196
+ componentId: "sc-64dj00-3"
40197
+ })(["padding:1rem;border-top:2px solid #f59e0b;background:rgba(0,0,0,0.2);flex-shrink:0;"]);
40260
40198
  var TabLabelWithBadge = /*#__PURE__*/styled__default.span.withConfig({
40261
40199
  displayName: "Store__TabLabelWithBadge",
40262
- componentId: "sc-64dj00-8"
40200
+ componentId: "sc-64dj00-4"
40263
40201
  })(["display:inline-flex;align-items:center;gap:5px;"]);
40264
40202
  var LoadingMessage$1 = /*#__PURE__*/styled__default.div.withConfig({
40265
40203
  displayName: "Store__LoadingMessage",
40266
- componentId: "sc-64dj00-9"
40204
+ componentId: "sc-64dj00-5"
40267
40205
  })(["text-align:center;color:", ";padding:2rem;"], uiColors.white);
40268
40206
  var ErrorMessage$3 = /*#__PURE__*/styled__default.div.withConfig({
40269
40207
  displayName: "Store__ErrorMessage",
40270
- componentId: "sc-64dj00-10"
40208
+ componentId: "sc-64dj00-6"
40271
40209
  })(["text-align:center;color:", ";padding:2rem;"], uiColors.red);
40272
40210
  var CenteredContent = /*#__PURE__*/styled__default.div.withConfig({
40273
40211
  displayName: "Store__CenteredContent",
40274
- componentId: "sc-64dj00-11"
40212
+ componentId: "sc-64dj00-7"
40275
40213
  })(["display:flex;align-items:center;justify-content:center;height:100%;padding:2rem;"]);
40276
40214
 
40277
40215
  var TextArea = function TextArea(_ref) {