@compass-labs/widgets 0.1.52 → 0.1.53

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
@@ -964,7 +964,7 @@ interface SwapFormProps {
964
964
  declare function SwapForm({ availableFromTokens, availableToTokens, balances, defaultFromToken, defaultToToken, onSwapSuccess, onSwapError, }: SwapFormProps): react_jsx_runtime.JSX.Element;
965
965
 
966
966
  interface CreditEvent {
967
- eventType: 'supply' | 'withdraw' | 'borrow' | 'repay' | 'liquidation';
967
+ eventType: 'supply' | 'withdraw' | 'borrow' | 'repay' | 'liquidation' | 'transfer_in' | 'transfer_out';
968
968
  blockNumber: number;
969
969
  blockTimestamp: string;
970
970
  transactionHash: string;
package/dist/index.d.ts CHANGED
@@ -964,7 +964,7 @@ interface SwapFormProps {
964
964
  declare function SwapForm({ availableFromTokens, availableToTokens, balances, defaultFromToken, defaultToToken, onSwapSuccess, onSwapError, }: SwapFormProps): react_jsx_runtime.JSX.Element;
965
965
 
966
966
  interface CreditEvent {
967
- eventType: 'supply' | 'withdraw' | 'borrow' | 'repay' | 'liquidation';
967
+ eventType: 'supply' | 'withdraw' | 'borrow' | 'repay' | 'liquidation' | 'transfer_in' | 'transfer_out';
968
968
  blockNumber: number;
969
969
  blockTimestamp: string;
970
970
  transactionHash: string;
package/dist/index.js CHANGED
@@ -4634,6 +4634,14 @@ function formatCurrency(amount) {
4634
4634
  maximumFractionDigits: 2
4635
4635
  }).format(amount);
4636
4636
  }
4637
+ function formatTokenAmount(num) {
4638
+ if (num === 0) return "0";
4639
+ const abs = Math.abs(num);
4640
+ const decimals = abs >= 1 ? 2 : Math.max(2, -Math.floor(Math.log10(abs)) + 1);
4641
+ const factor = Math.pow(10, decimals);
4642
+ const floored = Math.floor(abs * factor) / factor;
4643
+ return floored.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: decimals });
4644
+ }
4637
4645
  function PositionCard({ position, chainId }) {
4638
4646
  const [isHistoryExpanded, setIsHistoryExpanded] = react.useState(false);
4639
4647
  const formatShortDate = (dateStr) => {
@@ -4658,7 +4666,7 @@ function PositionCard({ position, chainId }) {
4658
4666
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [
4659
4667
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontWeight: 600, color: "var(--compass-color-text)", fontSize: "0.9375rem" }, children: position.marketName }),
4660
4668
  /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: "var(--compass-color-text-tertiary)", fontSize: "0.75rem" }, children: [
4661
- position.amount.toLocaleString(),
4669
+ formatTokenAmount(position.amount),
4662
4670
  " ",
4663
4671
  position.token
4664
4672
  ] })
@@ -4776,7 +4784,7 @@ function PositionCard({ position, chainId }) {
4776
4784
  color: tx.type === "deposit" ? "var(--compass-color-success)" : "var(--compass-color-error)"
4777
4785
  }, children: [
4778
4786
  tx.type === "deposit" ? "+" : "-",
4779
- tx.amount,
4787
+ formatTokenAmount(tx.amount),
4780
4788
  " ",
4781
4789
  tx.token
4782
4790
  ] }),
@@ -4974,6 +4982,13 @@ function formatCurrency2(amount) {
4974
4982
  maximumFractionDigits: 2
4975
4983
  }).format(floored);
4976
4984
  }
4985
+ function formatAmount2(value) {
4986
+ const num = typeof value === "string" ? parseFloat(value) : value;
4987
+ if (isNaN(num) || num === 0) return "0.00";
4988
+ const abs = Math.abs(num);
4989
+ const decimals = abs >= 1 ? 2 : Math.max(2, -Math.floor(Math.log10(abs)) + 1);
4990
+ return truncate2(num, decimals);
4991
+ }
4977
4992
  function EarnAccount({
4978
4993
  showHeader = true,
4979
4994
  showInterestRate = true,
@@ -6531,7 +6546,7 @@ function EarnAccount({
6531
6546
  children: [
6532
6547
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", flex: 1, marginRight: "12px" }, children: symbol }),
6533
6548
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end", style: { flexShrink: 0 }, children: [
6534
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", whiteSpace: "nowrap" }, children: truncate2(parseFloat(data.balance), 2) }),
6549
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", whiteSpace: "nowrap" }, children: formatAmount2(data.balance) }),
6535
6550
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--compass-color-text-tertiary)", fontSize: "0.75rem", whiteSpace: "nowrap" }, children: formatCurrency2(data.usdValue) })
6536
6551
  ] })
6537
6552
  ]
@@ -6590,7 +6605,7 @@ function EarnAccount({
6590
6605
  {
6591
6606
  isOpen: isEarningsModalOpen,
6592
6607
  onClose: () => setIsEarningsModalOpen(false),
6593
- positions,
6608
+ positions: [...positions].sort((a, b) => b.performance - a.performance || b.amount - a.amount),
6594
6609
  totalEarned,
6595
6610
  isLoading: positionQuery.isLoading,
6596
6611
  chainId: CHAIN_ID
@@ -6861,12 +6876,14 @@ function formatUsd(value) {
6861
6876
  const floored = floorTo(num, 2);
6862
6877
  return `$${floored.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
6863
6878
  }
6864
- function formatNumber(value, decimals = 2) {
6879
+ function formatNumber(value, minSignificant = 2) {
6865
6880
  if (value === null) return "-";
6866
6881
  const num = parseFloat(value);
6867
- if (isNaN(num)) return "-";
6868
- if (Math.abs(num) < 0.01 && num !== 0) return "<0.01";
6882
+ if (isNaN(num) || num === 0) return "0";
6883
+ const abs = Math.abs(num);
6884
+ const decimals = abs >= 1 ? 2 : Math.max(2, -Math.floor(Math.log10(abs)) + (minSignificant - 1));
6869
6885
  const floored = floorTo(num, decimals);
6886
+ if (floored === 0 && num !== 0) return num > 0 ? "<0.01" : ">-0.01";
6870
6887
  return floored.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: decimals });
6871
6888
  }
6872
6889
  function formatApy(value) {
@@ -6901,7 +6918,9 @@ var EVENT_CONFIG = {
6901
6918
  withdraw: { label: "Withdraw", color: "var(--compass-color-warning)", mutedColor: "var(--compass-color-warning-muted)", icon: "out", sign: "-" },
6902
6919
  borrow: { label: "Borrow", color: "var(--compass-color-success)", mutedColor: "var(--compass-color-success-muted)", icon: "in", sign: "+" },
6903
6920
  repay: { label: "Repay", color: "var(--compass-color-warning)", mutedColor: "var(--compass-color-warning-muted)", icon: "out", sign: "-" },
6904
- liquidation: { label: "Liquidation", color: "var(--compass-color-error)", mutedColor: "var(--compass-color-error-muted, rgba(239,68,68,0.1))", icon: "out", sign: "-" }
6921
+ liquidation: { label: "Liquidation", color: "var(--compass-color-error)", mutedColor: "var(--compass-color-error-muted, rgba(239,68,68,0.1))", icon: "out", sign: "-" },
6922
+ transfer_in: { label: "Transfer In", color: "var(--compass-color-success)", mutedColor: "var(--compass-color-success-muted)", icon: "in", sign: "+" },
6923
+ transfer_out: { label: "Transfer Out", color: "var(--compass-color-warning)", mutedColor: "var(--compass-color-warning-muted)", icon: "out", sign: "-" }
6905
6924
  };
6906
6925
  function CreditEventHistory({ events, tokenSymbol }) {
6907
6926
  const [isExpanded, setIsExpanded] = react.useState(false);
@@ -7076,10 +7095,9 @@ function PositionsView({ allowedCollateralTokens, allowedDebtTokens, onBorrow, o
7076
7095
  }
7077
7096
  if (!data) return null;
7078
7097
  const { collateralPositions, debtPositions, accountSummary } = data;
7079
- const visibleCollateral = collateralPositions.filter(
7080
- (p) => p.usdValue !== null && parseFloat(p.usdValue) >= 0.01
7081
- );
7082
- const hasPositions = visibleCollateral.length > 0 || debtPositions.length > 0;
7098
+ const visibleCollateral = collateralPositions.filter((p) => p.usdValue !== null && parseFloat(p.usdValue) >= 0.01).sort((a, b) => parseFloat(b.usdValue ?? "0") - parseFloat(a.usdValue ?? "0"));
7099
+ const sortedDebt = [...debtPositions].sort((a, b) => parseFloat(b.usdValue ?? "0") - parseFloat(a.usdValue ?? "0"));
7100
+ const hasPositions = visibleCollateral.length > 0 || sortedDebt.length > 0;
7083
7101
  const totalCollateralUsd = formatUsd(accountSummary.totalCollateralUsd);
7084
7102
  const totalDebtUsd = formatUsd(accountSummary.totalDebtUsd);
7085
7103
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "10px" }, children: [
@@ -7225,12 +7243,12 @@ function PositionsView({ allowedCollateralTokens, allowedDebtTokens, onBorrow, o
7225
7243
  children: totalDebtUsd
7226
7244
  }
7227
7245
  ),
7228
- debtPositions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
7246
+ sortedDebt.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
7229
7247
  "span",
7230
7248
  {
7231
7249
  className: "text-xs",
7232
7250
  style: { color: "var(--compass-color-text-tertiary)" },
7233
- children: debtPositions.map((p) => p.symbol).join(", ")
7251
+ children: sortedDebt.map((p) => p.symbol).join(", ")
7234
7252
  }
7235
7253
  )
7236
7254
  ] }),
@@ -7328,7 +7346,7 @@ function PositionsView({ allowedCollateralTokens, allowedDebtTokens, onBorrow, o
7328
7346
  ]
7329
7347
  }
7330
7348
  ),
7331
- debtPositions.length > 0 ? debtPositions.map((position) => /* @__PURE__ */ jsxRuntime.jsx(
7349
+ sortedDebt.length > 0 ? sortedDebt.map((position) => /* @__PURE__ */ jsxRuntime.jsx(
7332
7350
  DebtPositionCard,
7333
7351
  {
7334
7352
  position,
@@ -9114,6 +9132,13 @@ function floorTo2(value, decimals) {
9114
9132
  const factor = Math.pow(10, decimals);
9115
9133
  return Math.floor(value * factor) / factor;
9116
9134
  }
9135
+ function formatAmount3(num) {
9136
+ if (num === 0) return "0.00";
9137
+ const abs = Math.abs(num);
9138
+ const decimals = abs >= 1 ? 2 : Math.max(2, -Math.floor(Math.log10(abs)) + 1);
9139
+ const floored = floorTo2(num, decimals);
9140
+ return floored.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: decimals });
9141
+ }
9117
9142
  function formatUsd2(value) {
9118
9143
  if (value === null) return "$0.00";
9119
9144
  const num = typeof value === "string" ? parseFloat(value) : value;
@@ -9161,7 +9186,7 @@ function CreditAccount({
9161
9186
  const price = tokenPrices[b.tokenSymbol];
9162
9187
  const usdValue = amount > 0 && price != null ? amount * price : 0;
9163
9188
  return { ...b, usdValue };
9164
- }).filter((b) => b.usdValue >= 0.01).sort((a, b) => a.tokenSymbol.localeCompare(b.tokenSymbol));
9189
+ }).filter((b) => b.usdValue >= 0.01).sort((a, b) => b.usdValue - a.usdValue);
9165
9190
  const totalIdleUsd = balancesWithUsd.reduce((sum, b) => sum + b.usdValue, 0);
9166
9191
  const { data: walletBalance } = reactQuery.useQuery({
9167
9192
  queryKey: ["embeddedWalletBalance", chainId, address, "USDC"],
@@ -9553,7 +9578,7 @@ function CreditAccount({
9553
9578
  }
9554
9579
  )
9555
9580
  ] }),
9556
- [...positions.collateralPositions].filter((p) => parseFloat(p.usdValue ?? "0") >= 0.01).sort((a, b) => a.symbol.localeCompare(b.symbol)).map((p) => /* @__PURE__ */ jsxRuntime.jsxs(
9581
+ [...positions.collateralPositions].filter((p) => parseFloat(p.usdValue ?? "0") >= 0.01).sort((a, b) => parseFloat(b.usdValue ?? "0") - parseFloat(a.usdValue ?? "0")).map((p) => /* @__PURE__ */ jsxRuntime.jsxs(
9557
9582
  "div",
9558
9583
  {
9559
9584
  className: "flex items-center justify-between",
@@ -9566,10 +9591,7 @@ function CreditAccount({
9566
9591
  children: [
9567
9592
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem" }, children: p.symbol }),
9568
9593
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end", children: [
9569
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", fontFamily: "monospace" }, children: floorTo2(parseFloat(p.amountSupplied ?? "0"), 2).toLocaleString(void 0, {
9570
- minimumFractionDigits: 2,
9571
- maximumFractionDigits: 2
9572
- }) }),
9594
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", fontFamily: "monospace" }, children: formatAmount3(parseFloat(p.amountSupplied ?? "0")) }),
9573
9595
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--compass-color-text-tertiary)", fontSize: "0.75rem" }, children: formatUsd2(p.usdValue) })
9574
9596
  ] })
9575
9597
  ]
@@ -9599,7 +9621,7 @@ function CreditAccount({
9599
9621
  }
9600
9622
  )
9601
9623
  ] }),
9602
- [...positions.debtPositions].filter((p) => parseFloat(p.usdValue ?? "0") >= 0.01).sort((a, b) => a.symbol.localeCompare(b.symbol)).map((p) => /* @__PURE__ */ jsxRuntime.jsxs(
9624
+ [...positions.debtPositions].filter((p) => parseFloat(p.usdValue ?? "0") >= 0.01).sort((a, b) => parseFloat(b.usdValue ?? "0") - parseFloat(a.usdValue ?? "0")).map((p) => /* @__PURE__ */ jsxRuntime.jsxs(
9603
9625
  "div",
9604
9626
  {
9605
9627
  className: "flex items-center justify-between",
@@ -9612,10 +9634,7 @@ function CreditAccount({
9612
9634
  children: [
9613
9635
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem" }, children: p.symbol }),
9614
9636
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end", children: [
9615
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", fontFamily: "monospace" }, children: floorTo2(parseFloat(p.amountBorrowed ?? "0"), 2).toLocaleString(void 0, {
9616
- minimumFractionDigits: 2,
9617
- maximumFractionDigits: 2
9618
- }) }),
9637
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", fontFamily: "monospace" }, children: formatAmount3(parseFloat(p.amountBorrowed ?? "0")) }),
9619
9638
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--compass-color-text-tertiary)", fontSize: "0.75rem" }, children: formatUsd2(p.usdValue) })
9620
9639
  ] })
9621
9640
  ]
@@ -9655,10 +9674,7 @@ function CreditAccount({
9655
9674
  children: [
9656
9675
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem" }, children: b.tokenSymbol }),
9657
9676
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end", children: [
9658
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", fontFamily: "monospace" }, children: floorTo2(parseFloat(b.amount), 2).toLocaleString(void 0, {
9659
- minimumFractionDigits: 2,
9660
- maximumFractionDigits: 2
9661
- }) }),
9677
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem", fontFamily: "monospace" }, children: formatAmount3(parseFloat(b.amount)) }),
9662
9678
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--compass-color-text-tertiary)", fontSize: "0.75rem" }, children: formatUsd2(b.usdValue.toString()) })
9663
9679
  ] })
9664
9680
  ]
@@ -11352,10 +11368,12 @@ function floorTo3(value, decimals) {
11352
11368
  const factor = Math.pow(10, decimals);
11353
11369
  return Math.floor(value * factor) / factor;
11354
11370
  }
11355
- function formatAmount2(value) {
11371
+ function formatAmount4(value) {
11356
11372
  const num = typeof value === "string" ? parseFloat(value) : value;
11357
- if (isNaN(num)) return "0";
11358
- return floorTo3(num, 2).toFixed(2);
11373
+ if (isNaN(num) || num === 0) return "0.00";
11374
+ const abs = Math.abs(num);
11375
+ const decimals = abs >= 1 ? 2 : Math.max(2, -Math.floor(Math.log10(abs)) + 1);
11376
+ return floorTo3(num, decimals).toFixed(decimals);
11359
11377
  }
11360
11378
  function RebalancingWidget({
11361
11379
  showChainSwitcher = true,
@@ -11447,7 +11465,7 @@ function RebalancingWidget({
11447
11465
  if (portfolio && portfolio.positions.length > 0 && !hasInitializedTargets && !isLoading) {
11448
11466
  const origAllocs = {};
11449
11467
  setTargets(
11450
- portfolio.positions.map((p) => {
11468
+ [...portfolio.positions].sort((a, b) => b.usdValue - a.usdValue).map((p) => {
11451
11469
  const pct = parseFloat(p.allocationPercent.toFixed(2));
11452
11470
  origAllocs[`${p.venueType}-${p.venueAddress.toLowerCase()}`] = pct;
11453
11471
  return {
@@ -11493,7 +11511,7 @@ function RebalancingWidget({
11493
11511
  if (!portfolio) return;
11494
11512
  const origAllocs = {};
11495
11513
  setTargets(
11496
- portfolio.positions.map((p) => {
11514
+ [...portfolio.positions].sort((a, b) => b.usdValue - a.usdValue).map((p) => {
11497
11515
  const pct = parseFloat(p.allocationPercent.toFixed(2));
11498
11516
  origAllocs[`${p.venueType}-${p.venueAddress.toLowerCase()}`] = pct;
11499
11517
  return {
@@ -12108,7 +12126,7 @@ function RebalancingWidget({
12108
12126
  className: "font-semibold",
12109
12127
  style: { color: "var(--compass-color-primary)", fontSize: "0.8125rem", background: "none", border: "none", padding: 0 },
12110
12128
  children: [
12111
- formatAmount2(earnBalancesQuery),
12129
+ formatAmount4(earnBalancesQuery),
12112
12130
  " ",
12113
12131
  selectedToken
12114
12132
  ]
@@ -12434,7 +12452,7 @@ function RebalancingWidget({
12434
12452
  children: "Available in Account"
12435
12453
  }
12436
12454
  ),
12437
- portfolio.idleBalances.filter((b) => b.balance >= 5e-3).map((b) => /* @__PURE__ */ jsxRuntime.jsxs(
12455
+ [...portfolio.idleBalances].filter((b) => b.balance >= 5e-3).sort((a, b) => b.usdValue - a.usdValue).map((b) => /* @__PURE__ */ jsxRuntime.jsxs(
12438
12456
  "div",
12439
12457
  {
12440
12458
  className: "flex items-center justify-between",
@@ -12447,7 +12465,7 @@ function RebalancingWidget({
12447
12465
  children: [
12448
12466
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem" }, children: b.token }),
12449
12467
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end", children: [
12450
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem" }, children: floorTo3(b.balance, 2).toFixed(2) }),
12468
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold", style: { color: "var(--compass-color-text)", fontSize: "0.9375rem" }, children: formatAmount4(b.balance) }),
12451
12469
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "var(--compass-color-text-tertiary)", fontSize: "0.75rem" }, children: formatUSD(b.usdValue) })
12452
12470
  ] })
12453
12471
  ]