@loafmarkets/ui 0.1.348 → 0.1.350

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.d.mts CHANGED
@@ -586,6 +586,8 @@ type LoginPopupProps = {
586
586
  onSubmitReferralCode?: (code: string) => Promise<void> | void;
587
587
  /** Handler invoked when the user selects "Sign in with Wallet". */
588
588
  onWalletLogin?: () => Promise<void> | void;
589
+ /** Handler invoked when the user selects "Sign in with Passkey". When omitted, the button is hidden. */
590
+ onPasskeyLogin?: () => Promise<void> | void;
589
591
  /** Current KYC status — used to show "Resume Verification" when previously started. */
590
592
  kycStatus?: 'NOT_STARTED' | 'PENDING' | 'ON_HOLD' | 'VERIFIED' | 'REJECTED';
591
593
  };
package/dist/index.d.ts CHANGED
@@ -586,6 +586,8 @@ type LoginPopupProps = {
586
586
  onSubmitReferralCode?: (code: string) => Promise<void> | void;
587
587
  /** Handler invoked when the user selects "Sign in with Wallet". */
588
588
  onWalletLogin?: () => Promise<void> | void;
589
+ /** Handler invoked when the user selects "Sign in with Passkey". When omitted, the button is hidden. */
590
+ onPasskeyLogin?: () => Promise<void> | void;
589
591
  /** Current KYC status — used to show "Resume Verification" when previously started. */
590
592
  kycStatus?: 'NOT_STARTED' | 'PENDING' | 'ON_HOLD' | 'VERIFIED' | 'REJECTED';
591
593
  };
package/dist/index.js CHANGED
@@ -6445,6 +6445,7 @@ var LoginPopup = ({
6445
6445
  onClose,
6446
6446
  onOpenEarlyAccess,
6447
6447
  onWalletLogin,
6448
+ onPasskeyLogin,
6448
6449
  isAuthenticated,
6449
6450
  currentUser,
6450
6451
  onSendEmailCode,
@@ -6555,6 +6556,20 @@ var LoginPopup = ({
6555
6556
  onOpenEarlyAccess();
6556
6557
  }
6557
6558
  };
6559
+ const handlePasskeyLogin = async () => {
6560
+ if (!onPasskeyLogin) return;
6561
+ setError("");
6562
+ setLoading(true);
6563
+ try {
6564
+ await onPasskeyLogin();
6565
+ onClose();
6566
+ } catch (err) {
6567
+ const message = err instanceof Error ? err.message : "Passkey sign-in failed";
6568
+ setError(message);
6569
+ } finally {
6570
+ setLoading(false);
6571
+ }
6572
+ };
6558
6573
  const handleEmailClick = (signUp = false) => {
6559
6574
  setIsSignUp(signUp);
6560
6575
  setView("email");
@@ -6812,6 +6827,10 @@ var LoginPopup = ({
6812
6827
  /* @__PURE__ */ jsxRuntime.jsxs(LoginButton, { onClick: handleWalletLogin, children: [
6813
6828
  /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z" }) }),
6814
6829
  "Sign in with Wallet"
6830
+ ] }),
6831
+ onPasskeyLogin && /* @__PURE__ */ jsxRuntime.jsxs(LoginButton, { onClick: handlePasskeyLogin, disabled: loading, children: [
6832
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2C9.79 2 8 3.79 8 6v4H6c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2h-2V6c0-2.21-1.79-4-4-4zm-2 4c0-1.1.9-2 2-2s2 .9 2 2v4h-4V6zm2 9a2 2 0 100 4 2 2 0 000-4z" }) }),
6833
+ "Sign in with Passkey"
6815
6834
  ] })
6816
6835
  ] }),
6817
6836
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center", marginTop: "0.5rem", marginBottom: "1rem" }, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -13807,7 +13826,9 @@ function PortfolioActivityPanel({
13807
13826
  }
13808
13827
  };
13809
13828
  const mergedOrderHistory = React5.useMemo(() => {
13810
- if (showSubscriptionsTab || offeringOrders.length === 0) return orderHistory;
13829
+ if (showSubscriptionsTab || offeringOrders.length === 0) {
13830
+ return [...orderHistory].sort((a, b) => b.createdAt - a.createdAt);
13831
+ }
13811
13832
  const mapped = offeringOrders.map((o, i) => ({
13812
13833
  id: o.ipoOrderId ?? -(i + 1),
13813
13834
  propertyId: 0,
@@ -13828,6 +13849,22 @@ function PortfolioActivityPanel({
13828
13849
  }));
13829
13850
  return [...orderHistory, ...mapped].sort((a, b) => b.createdAt - a.createdAt);
13830
13851
  }, [showSubscriptionsTab, offeringOrders, orderHistory]);
13852
+ const sortedOpenOrders = React5.useMemo(
13853
+ () => [...openOrders].sort((a, b) => b.createdAt - a.createdAt),
13854
+ [openOrders]
13855
+ );
13856
+ const sortedOfferingOrders = React5.useMemo(
13857
+ () => [...offeringOrders].sort((a, b) => b.createdAt - a.createdAt),
13858
+ [offeringOrders]
13859
+ );
13860
+ const sortedTradeHistory = React5.useMemo(
13861
+ () => [...tradeHistory].sort((a, b) => b.executedAt - a.executedAt),
13862
+ [tradeHistory]
13863
+ );
13864
+ const sortedTransfers = React5.useMemo(
13865
+ () => [...transfers].sort((a, b) => b.createdAt - a.createdAt),
13866
+ [transfers]
13867
+ );
13831
13868
  const positionsCount = positions.length;
13832
13869
  const openOrdersCount = React5.useMemo(
13833
13870
  () => openOrders.filter((o) => o.status === "OPEN" || o.status === "PARTIALLY_FILLED").length,
@@ -13852,25 +13889,25 @@ function PortfolioActivityPanel({
13852
13889
  const activeDataLength = (() => {
13853
13890
  switch (activeTab) {
13854
13891
  case "subscriptions":
13855
- return offeringOrders.length;
13892
+ return sortedOfferingOrders.length;
13856
13893
  case "open-orders":
13857
- return openOrders.length;
13894
+ return sortedOpenOrders.length;
13858
13895
  case "orders":
13859
13896
  return mergedOrderHistory.length;
13860
13897
  case "trades":
13861
- return tradeHistory.length;
13898
+ return sortedTradeHistory.length;
13862
13899
  case "transfers":
13863
- return transfers.length;
13900
+ return sortedTransfers.length;
13864
13901
  default:
13865
13902
  return 0;
13866
13903
  }
13867
13904
  })();
13868
13905
  const totalPages = Math.ceil(activeDataLength / pageSize);
13869
- const pagedOfferingOrders = offeringOrders.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13870
- const pagedOpenOrders = openOrders.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13906
+ const pagedOfferingOrders = sortedOfferingOrders.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13907
+ const pagedOpenOrders = sortedOpenOrders.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13871
13908
  const pagedOrderHistory = mergedOrderHistory.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13872
- const pagedTradeHistory = tradeHistory.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13873
- const pagedTransfers = transfers.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13909
+ const pagedTradeHistory = sortedTradeHistory.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13910
+ const pagedTransfers = sortedTransfers.slice(currentPage * pageSize, (currentPage + 1) * pageSize);
13874
13911
  return /* @__PURE__ */ jsxRuntime.jsxs(Container2, { className, style, children: [
13875
13912
  /* @__PURE__ */ jsxRuntime.jsx(PanelTitle, { children: "Activity" }),
13876
13913
  /* @__PURE__ */ jsxRuntime.jsxs(TabContainer, { children: [