@loafmarkets/ui 0.1.27 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -3388,10 +3388,6 @@ var YourOrders = React5.forwardRef(
3388
3388
  }
3389
3389
  const gridTemplateColumns = columnTemplateParts.join(" ");
3390
3390
  const displayTitle = title ?? activeTab?.title ?? activeTab?.label ?? "Portfolio Holdings";
3391
- console.log("[YourOrders] tabs:", tabs?.map((t) => ({ id: t.id, ordersCount: t.orders?.length })));
3392
- console.log("[YourOrders] activeTabId prop:", activeTabId);
3393
- console.log("[YourOrders] effectiveActiveTabId:", effectiveActiveTabId);
3394
- console.log("[YourOrders] activeTab:", activeTab?.id, "orders count:", activeOrders?.length);
3395
3391
  const hasOrders = Array.isArray(activeOrders) && activeOrders.length > 0;
3396
3392
  const emptyMessage = activeTab?.emptyState ?? "No holdings yet. Start trading to build your portfolio.";
3397
3393
  const renderOrders = () => {
@@ -4455,23 +4451,12 @@ var Header = ({
4455
4451
  const [isMoreMenuOpen, setIsMoreMenuOpen] = useState(false);
4456
4452
  const [showLoginPopup, setShowLoginPopup] = useState(false);
4457
4453
  const [loginPopupInitialView, setLoginPopupInitialView] = useState(void 0);
4458
- useEffect(() => {
4459
- console.log("[LoginTrace][Header] mounted");
4460
- return () => console.log("[LoginTrace][Header] unmounted");
4461
- }, []);
4462
- useEffect(() => {
4463
- console.log("[LoginTrace][Header] showLoginPopup changed", { showLoginPopup, loginPopupInitialView });
4464
- }, [showLoginPopup, loginPopupInitialView]);
4465
- useEffect(() => {
4466
- console.log("[LoginTrace][Header] loginPopupComponent updated", { hasComponent: Boolean(LoginPopupComponent) });
4467
- }, [LoginPopupComponent]);
4468
4454
  useEffect(() => {
4469
4455
  const handleClickOutside = (event) => {
4470
4456
  const target = event.target;
4471
4457
  if (!target) return;
4472
4458
  const clickedInsideUserMenu = target.closest(".user-menu") || target.closest(".user-menu-dropdown");
4473
4459
  if (isUserMenuOpen && !clickedInsideUserMenu) {
4474
- console.log("[LoginTrace][Header] Closing user menu due to outside click");
4475
4460
  setIsUserMenuOpen(false);
4476
4461
  }
4477
4462
  if (isMobileMenuOpen && !target.closest(".mobile-menu") && !target.closest(".mobile-menu-button")) {
@@ -4491,7 +4476,6 @@ var Header = ({
4491
4476
  const handleExternalLoginPopup = (event) => {
4492
4477
  const customEvent = event;
4493
4478
  setLoginPopupInitialView(customEvent.detail?.initialView);
4494
- console.log("[LoginTrace][Header] Received LOGIN_POPUP_EVENT", customEvent.detail);
4495
4479
  setShowLoginPopup(true);
4496
4480
  };
4497
4481
  window.addEventListener(LOGIN_POPUP_EVENT, handleExternalLoginPopup);
@@ -4506,7 +4490,6 @@ var Header = ({
4506
4490
  };
4507
4491
  const handleUserMenuToggle = () => {
4508
4492
  const nextState = !isUserMenuOpen;
4509
- console.log("[LoginTrace][Header] User dropdown toggle clicked", { nextState });
4510
4493
  setIsUserMenuOpen(nextState);
4511
4494
  };
4512
4495
  const performNavigation = (path) => {
@@ -4551,13 +4534,11 @@ var Header = ({
4551
4534
  const handleLogoutClick = async (event) => {
4552
4535
  event?.preventDefault();
4553
4536
  closeMenus();
4554
- console.log("[LoginTrace][Header] Logout option selected, invoking onLogout handler");
4555
4537
  await onLogout?.();
4556
4538
  };
4557
4539
  const handleAddFundingClick = (event) => {
4558
4540
  event?.preventDefault();
4559
4541
  closeMenus();
4560
- console.log("[LoginTrace][Header] Add funding selected");
4561
4542
  if (LoginPopupComponent) {
4562
4543
  setLoginPopupInitialView("funding");
4563
4544
  setShowLoginPopup(true);
@@ -4566,7 +4547,6 @@ var Header = ({
4566
4547
  const handlePortfolioNavigate = (event) => {
4567
4548
  event?.preventDefault();
4568
4549
  closeMenus();
4569
- console.log("[LoginTrace][Header] Portfolio selected");
4570
4550
  if (_onOrdersNavigate) {
4571
4551
  _onOrdersNavigate();
4572
4552
  return;
@@ -4610,7 +4590,6 @@ var Header = ({
4610
4590
  return false;
4611
4591
  };
4612
4592
  const handleSignIn = () => {
4613
- console.log("[LoginTrace][Header] handleSignIn invoked", { hasCustomHandler: Boolean(onSignInClick) });
4614
4593
  if (onSignInClick) {
4615
4594
  onSignInClick();
4616
4595
  return;
@@ -4619,12 +4598,10 @@ var Header = ({
4619
4598
  return;
4620
4599
  }
4621
4600
  if (LoginPopupComponent) {
4622
- console.log("[LoginTrace][Header] Opening login popup via handleSignIn");
4623
4601
  setShowLoginPopup(true);
4624
4602
  }
4625
4603
  };
4626
4604
  const handleLoginPopupClose = React5__default.useCallback(() => {
4627
- console.log("[LoginTrace][Header] Closing login popup via onClose handler");
4628
4605
  setShowLoginPopup(false);
4629
4606
  setLoginPopupInitialView(void 0);
4630
4607
  }, []);
@@ -4854,7 +4831,6 @@ var Header = ({
4854
4831
  {
4855
4832
  type: "button",
4856
4833
  onClick: (event) => {
4857
- console.log("[LoginTrace][Header] Add funding menu item clicked");
4858
4834
  handleAddFundingClick(event);
4859
4835
  },
4860
4836
  children: /* @__PURE__ */ jsx(MenuItem, { children: "Add funding" })
@@ -4865,7 +4841,6 @@ var Header = ({
4865
4841
  {
4866
4842
  type: "button",
4867
4843
  onClick: (event) => {
4868
- console.log("[LoginTrace][Header] Logout menu item clicked");
4869
4844
  void handleLogoutClick(event);
4870
4845
  },
4871
4846
  children: /* @__PURE__ */ jsx(MenuItem, { className: "logout", children: "Logout" })
@@ -5457,19 +5432,8 @@ var LoginPopup = ({
5457
5432
  const [fundingError, setFundingError] = useState("");
5458
5433
  const [transakWidgetUrl, setTransakWidgetUrl] = useState(null);
5459
5434
  const suppressAutoCloseRef = React5__default.useRef(false);
5460
- useEffect(() => {
5461
- console.log("[LoginTrace][Popup] mounted");
5462
- return () => console.log("[LoginTrace][Popup] unmounted");
5463
- }, []);
5464
- useEffect(() => {
5465
- console.log("[LoginTrace][Popup] view updated", { view });
5466
- }, [view]);
5467
- useEffect(() => {
5468
- console.log("[LoginTrace][Popup] auth props updated", { isAuthenticated, hasUser: Boolean(currentUser) });
5469
- }, [isAuthenticated, currentUser]);
5470
5435
  useEffect(() => {
5471
5436
  if (typeof initialView === "string") {
5472
- console.log("[LoginTrace][Popup] initialView prop changed", { initialView });
5473
5437
  setView(initialView);
5474
5438
  }
5475
5439
  }, [initialView]);
@@ -5479,20 +5443,16 @@ var LoginPopup = ({
5479
5443
  if (!event.origin.includes("transak.com") && !event.origin.includes("global.transak.com")) {
5480
5444
  return;
5481
5445
  }
5482
- console.log("[LoginTrace][Popup] Transak message received", event.data);
5483
5446
  try {
5484
5447
  const data = typeof event.data === "string" ? JSON.parse(event.data) : event.data;
5485
5448
  if (data.event_id === "TRANSAK_ORDER_SUCCESSFUL") {
5486
- console.log("[LoginTrace][Popup] Transak order successful", data);
5487
5449
  setTimeout(() => {
5488
5450
  onClose();
5489
5451
  }, 2e3);
5490
5452
  } else if (data.event_id === "TRANSAK_ORDER_FAILED") {
5491
- console.error("[LoginTrace][Popup] Transak order failed", data);
5492
5453
  setFundingError("Transaction failed. Please try again.");
5493
5454
  setTransakWidgetUrl(null);
5494
5455
  } else if (data.event_id === "TRANSAK_WIDGET_CLOSE") {
5495
- console.log("[LoginTrace][Popup] Transak widget closed by user");
5496
5456
  setTransakWidgetUrl(null);
5497
5457
  }
5498
5458
  } catch (err) {
@@ -5504,56 +5464,40 @@ var LoginPopup = ({
5504
5464
  }, [transakWidgetUrl, onClose]);
5505
5465
  useEffect(() => {
5506
5466
  if (!autoCloseOnAuth) {
5507
- console.log("[LoginTrace][Popup] autoClose disabled", { autoCloseOnAuth, view });
5508
5467
  return;
5509
5468
  }
5510
5469
  if (suppressAutoCloseRef.current) {
5511
- console.log("[LoginTrace][Popup] autoClose suppressed", { view });
5512
5470
  return;
5513
5471
  }
5514
5472
  if (view === "kyc" || view === "kyc-success" || view === "kyc-failed" || view === "funding") {
5515
- console.log("[LoginTrace][Popup] autoClose skipped due to onboarding view", { view });
5516
5473
  return;
5517
5474
  }
5518
- console.log("[LoginTrace][Popup] autoClose effect evaluating", {
5519
- autoCloseOnAuth,
5520
- isAuthenticated,
5521
- hasUser: Boolean(currentUser),
5522
- view
5523
- });
5524
5475
  if (isAuthenticated || currentUser) {
5525
- console.log("[LoginTrace][Popup] autoClose triggered", { isAuthenticated, hasUser: Boolean(currentUser), view });
5526
5476
  onClose();
5527
5477
  }
5528
5478
  }, [autoCloseOnAuth, currentUser, isAuthenticated, onClose, view]);
5529
5479
  const handleWalletLogin = async () => {
5530
- console.log("[LoginTrace][Popup] Wallet login clicked, onWalletLogin:", !!onWalletLogin);
5531
5480
  if (onWalletLogin) {
5532
5481
  try {
5533
- console.log("[LoginTrace][Popup] Calling onWalletLogin...");
5534
5482
  await onWalletLogin();
5535
- console.log("[LoginTrace][Popup] onWalletLogin completed, closing popup");
5536
5483
  onClose();
5537
5484
  return;
5538
5485
  } catch (err) {
5539
5486
  console.error("[LoginTrace][Popup] Wallet login failed", err);
5540
5487
  }
5541
5488
  }
5542
- console.log("[LoginTrace][Popup] No onWalletLogin handler, closing popup");
5543
5489
  onClose();
5544
5490
  if (onOpenEarlyAccess) {
5545
5491
  onOpenEarlyAccess();
5546
5492
  }
5547
5493
  };
5548
5494
  const handleEmailClick = (signUp = false) => {
5549
- console.log("[LoginTrace][Popup] handleEmailClick", { signUp });
5550
5495
  setIsSignUp(signUp);
5551
5496
  setView("email");
5552
5497
  setError("");
5553
5498
  };
5554
5499
  const handleSendCode = async (event) => {
5555
5500
  event?.preventDefault();
5556
- console.log("[LoginTrace][Popup] handleSendCode invoked", { email, isSignUp, handle, eventType: event?.type });
5557
5501
  if (!email || !email.includes("@")) {
5558
5502
  setError("Please enter a valid email address");
5559
5503
  return;
@@ -5570,10 +5514,8 @@ var LoginPopup = ({
5570
5514
  setError("");
5571
5515
  const normalizedHandle = isSignUp ? handle.trim() : void 0;
5572
5516
  try {
5573
- console.log("[LoginTrace][Popup] Attempting demo login fallback", { hasDemoHandler: Boolean(onDemoLogin) });
5574
5517
  const demoResult = await onDemoLogin?.(email, normalizedHandle ?? null);
5575
5518
  if (demoResult && demoResult.success) {
5576
- console.log("[LoginTrace][Popup] Demo login succeeded, skipping OTP flow");
5577
5519
  setLoading(false);
5578
5520
  return;
5579
5521
  }
@@ -5586,23 +5528,19 @@ var LoginPopup = ({
5586
5528
  return;
5587
5529
  }
5588
5530
  try {
5589
- console.log("[LoginTrace][Popup] Calling onSendEmailCode", { email, isSignUp, normalizedHandle });
5590
5531
  await onSendEmailCode({ email, isSignUp, handle: normalizedHandle ?? null });
5591
- console.log("[LoginTrace][Popup] onSendEmailCode resolved, switching to OTP view");
5592
5532
  setView("otp");
5593
5533
  setOtp(Array(OTP_INPUT_LENGTH).fill(""));
5594
5534
  } catch (err) {
5595
5535
  const message = err instanceof Error ? err.message : "Failed to send verification code";
5596
5536
  console.error("[LoginTrace][Popup] onSendEmailCode threw", err);
5597
5537
  if (!isSignUp && message.includes("No account found")) {
5598
- console.log("[LoginTrace][Popup] No account found during sign-in, switching to sign-up view");
5599
5538
  setIsSignUp(true);
5600
5539
  setError("");
5601
5540
  setLoading(false);
5602
5541
  return;
5603
5542
  }
5604
5543
  if (isSignUp && message.includes("Account already exists")) {
5605
- console.log("[LoginTrace][Popup] Account exists during sign-up, auto-switching to sign-in and sending OTP");
5606
5544
  setIsSignUp(false);
5607
5545
  try {
5608
5546
  await onSendEmailCode({ email, isSignUp: false, handle: null });
@@ -5671,7 +5609,6 @@ var LoginPopup = ({
5671
5609
  const handleVerifyCode = async (event) => {
5672
5610
  event.preventDefault();
5673
5611
  const code = otp.join("");
5674
- console.log("[LoginTrace][Popup] handleVerifyCode", { codeLength: code.length, isSignUp });
5675
5612
  if (code.length !== OTP_INPUT_LENGTH) {
5676
5613
  setError("Please enter the 6-digit code");
5677
5614
  return;
@@ -5686,10 +5623,8 @@ var LoginPopup = ({
5686
5623
  suppressAutoCloseRef.current = true;
5687
5624
  }
5688
5625
  try {
5689
- console.log("[LoginTrace][Popup] Calling onVerifyEmailCode");
5690
5626
  await onVerifyEmailCode({ code, email });
5691
5627
  if (isSignUp) {
5692
- console.log("[LoginTrace][Popup] Signup OTP verified, moving to funding view");
5693
5628
  setView("funding");
5694
5629
  setLoading(false);
5695
5630
  return;
@@ -8434,12 +8369,6 @@ var STATUS_COLOR2 = {
8434
8369
  CLOSED: "#848e9c",
8435
8370
  CANCELLED: "#f6465d"
8436
8371
  };
8437
- var recentOrderPurchases = [
8438
- { name: "investor_au", amount: 12500 },
8439
- { name: "sydney_prop", amount: 25e3 },
8440
- { name: "heritage_inv", amount: 5e4 },
8441
- { name: "mosman_buyer", amount: 7500 }
8442
- ];
8443
8372
  function AssetSelectorBar({ propertyName, tokenPrice, offeringValuation }) {
8444
8373
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
8445
8374
  return /* @__PURE__ */ jsx(AssetSelectorWrapper, { children: /* @__PURE__ */ jsxs(IPOAssetSelector, { children: [
@@ -8709,7 +8638,7 @@ function OfferingProgressCard({
8709
8638
  /* @__PURE__ */ jsx(CountdownUnitLabel, { children: "S" })
8710
8639
  ] })
8711
8640
  ] })
8712
- ] }) : /* @__PURE__ */ jsx(PreLiveStatus, { $statusColor: statusColor, children: ipoStatus === "CLOSED" ? "Sale Completed" : ipoStatus === "CANCELLED" ? "Sale Cancelled" : "Sale Not Yet Open" }),
8641
+ ] }) : /* @__PURE__ */ jsx(PreLiveStatus, { $statusColor: statusColor, children: "Sale Not Yet Open" }),
8713
8642
  /* @__PURE__ */ jsxs("div", { style: { textAlign: "right" }, children: [
8714
8643
  /* @__PURE__ */ jsx(MetricLabel2, { children: "Offering Valuation" }),
8715
8644
  /* @__PURE__ */ jsxs(MetricValue2, { children: [
@@ -8921,7 +8850,16 @@ var ProgressBar = styled23.div`
8921
8850
  transition: width 0.5s ease;
8922
8851
  }
8923
8852
  `;
8924
- function VideoActivitySection({ ipoStarted }) {
8853
+ function VideoActivitySection({
8854
+ ipoStarted,
8855
+ recentOrders = [],
8856
+ ordersAllocated = 0,
8857
+ tokenPrice = 0
8858
+ }) {
8859
+ const sortedOrders = useMemo(
8860
+ () => [...recentOrders].sort((a, b) => b.timestamp - a.timestamp),
8861
+ [recentOrders]
8862
+ );
8925
8863
  return /* @__PURE__ */ jsxs(Section4, { children: [
8926
8864
  /* @__PURE__ */ jsxs(VideoPanel, { children: [
8927
8865
  /* @__PURE__ */ jsx("div", { className: "section-header", children: /* @__PURE__ */ jsx("h3", { children: "Musgrave" }) }),
@@ -8936,15 +8874,15 @@ function VideoActivitySection({ ipoStarted }) {
8936
8874
  /* @__PURE__ */ jsx(LiveIndicatorDot, { $active: ipoStarted }),
8937
8875
  "Recent Order Activity"
8938
8876
  ] }),
8939
- /* @__PURE__ */ jsx("span", { children: ipoStarted ? "Active orders: 1,247" : "Waiting for Offer to Open" })
8877
+ /* @__PURE__ */ jsx("span", { children: ipoStarted ? `Active orders: ${ordersAllocated.toLocaleString()}` : "Waiting for Offer to Open" })
8940
8878
  ] }),
8941
- /* @__PURE__ */ jsx("div", { className: "activity-content", children: ipoStarted ? /* @__PURE__ */ jsx("div", { className: "activity-list", children: recentOrderPurchases.map((purchase, i) => /* @__PURE__ */ jsxs("div", { className: "purchase-row", children: [
8942
- /* @__PURE__ */ jsx("span", { children: purchase.name }),
8879
+ /* @__PURE__ */ jsx("div", { className: "activity-content", children: ipoStarted ? /* @__PURE__ */ jsx("div", { className: "activity-list", children: sortedOrders.map((order) => /* @__PURE__ */ jsxs("div", { className: "purchase-row", children: [
8880
+ /* @__PURE__ */ jsx("span", { children: order.buyerHandle || `${order.buyerAddress.slice(0, 6)}...${order.buyerAddress.slice(-4)}` }),
8943
8881
  /* @__PURE__ */ jsxs("strong", { children: [
8944
8882
  "$",
8945
- purchase.amount.toLocaleString()
8883
+ (tokenPrice * order.quantity).toLocaleString(void 0, { maximumFractionDigits: 0 })
8946
8884
  ] })
8947
- ] }, i)) }) : /* @__PURE__ */ jsxs("div", { className: "activity-empty", children: [
8885
+ ] }, order.txHash)) }) : /* @__PURE__ */ jsxs("div", { className: "activity-empty", children: [
8948
8886
  /* @__PURE__ */ jsx("div", { className: "spinner" }),
8949
8887
  /* @__PURE__ */ jsx("p", { children: "Activity will appear once the Offering opens" })
8950
8888
  ] }) })
@@ -10545,7 +10483,9 @@ function PropertyBuy({
10545
10483
  onDeposit,
10546
10484
  initialUserSubscriptions = [],
10547
10485
  opensAt,
10548
- isPrivateClient = false
10486
+ isPrivateClient = false,
10487
+ recentOrders = [],
10488
+ ordersAllocated = 0
10549
10489
  }) {
10550
10490
  const [sliderValue, setSliderValue] = useState(0);
10551
10491
  const [availableBalance, setAvailableBalance] = useState(walletUsdcBalance ?? 125e3);
@@ -10719,7 +10659,15 @@ function PropertyBuy({
10719
10659
  opensAt
10720
10660
  }
10721
10661
  ),
10722
- /* @__PURE__ */ jsx(VideoActivitySection, { ipoStarted }),
10662
+ /* @__PURE__ */ jsx(
10663
+ VideoActivitySection,
10664
+ {
10665
+ ipoStarted,
10666
+ recentOrders,
10667
+ ordersAllocated,
10668
+ tokenPrice
10669
+ }
10670
+ ),
10723
10671
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
10724
10672
  /* @__PURE__ */ jsx(
10725
10673
  OrderPanel,