@loafmarkets/ui 0.1.109 → 0.1.111

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
@@ -11,7 +11,6 @@ import { Newspaper } from 'lucide-react';
11
11
  import * as LightweightCharts from 'lightweight-charts';
12
12
  import { BiChevronUp, BiChevronDown, BiX, BiCoin, BiWallet, BiCreditCard, BiCalendar, BiInfoCircle, BiPencil, BiImages, BiVideo, BiMap } from 'react-icons/bi';
13
13
  import { FaChartLine, FaBitcoin } from 'react-icons/fa';
14
- import { FiExternalLink } from 'react-icons/fi';
15
14
 
16
15
  // src/components/button.tsx
17
16
  function cn(...inputs) {
@@ -11971,8 +11970,8 @@ function PortfolioActivityPanel({
11971
11970
  const pnl = pos.propertyPnl ?? currentValue - costBasis;
11972
11971
  const pnlPercent = pos.propertyPnlPercent ?? pos.percentChange ?? 0;
11973
11972
  const isPositive = pnl >= 0;
11974
- return /* @__PURE__ */ jsxs(PositionsRow, { $hasClose: !!onClosePosition, onClick: () => onPositionClick?.(pos.tokenName, pos.isIpoAllocation), children: [
11975
- /* @__PURE__ */ jsx(PositionsCell, { children: /* @__PURE__ */ jsx(HoldingsProperty, { children: pos.tokenName }) }),
11973
+ return /* @__PURE__ */ jsxs(PositionsRow, { $hasClose: !!onClosePosition, children: [
11974
+ /* @__PURE__ */ jsx(PositionsCell, { children: /* @__PURE__ */ jsx(HoldingsPropertyLink, { onClick: () => onPositionClick?.(pos.tokenName, pos.isIpoAllocation), children: pos.tokenName }) }),
11976
11975
  /* @__PURE__ */ jsx(PositionsCell, { children: /* @__PURE__ */ jsx("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: formatNumber2(pos.quantity) }) }),
11977
11976
  /* @__PURE__ */ jsx(PositionsCell, { children: /* @__PURE__ */ jsx("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: formatCurrency5(currentValue) }) }),
11978
11977
  /* @__PURE__ */ jsx(PositionsCell, { children: /* @__PURE__ */ jsx("span", { style: { color: "rgba(255,255,255,0.7)", fontSize: "0.8rem" }, children: formatCurrency5(pos.averageEntryPrice) }) }),
@@ -12004,60 +12003,58 @@ function PortfolioActivityPanel({
12004
12003
  ] }),
12005
12004
  activeTab === "subscriptions" && /* @__PURE__ */ jsxs(Fragment, { children: [
12006
12005
  offeringOrders.length === 0 && /* @__PURE__ */ jsx(EmptyState, { children: "IPO allocations will appear here once you subscribe." }),
12007
- pageSlice(offeringOrders).map((order) => /* @__PURE__ */ jsxs(ActivityRow, { children: [
12008
- /* @__PURE__ */ jsx(ActivitySideBadge, { $side: "Buy", children: "Buy" }),
12009
- /* @__PURE__ */ jsxs(ActivityInfo, { children: [
12010
- /* @__PURE__ */ jsx(ActivityPrimary, { children: order.tokenName }),
12011
- /* @__PURE__ */ jsxs(ActivitySecondary, { children: [
12012
- formatNumber2(order.quantity),
12013
- " tokens @ ",
12014
- formatCurrency5(order.price),
12015
- " \xB7 ",
12016
- formatTimestamp(order.createdAt)
12017
- ] })
12006
+ offeringOrders.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
12007
+ /* @__PURE__ */ jsxs(GridHeader, { $columns: "1.2fr 0.8fr 1fr 1fr 0.8fr 1fr", children: [
12008
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Asset" }),
12009
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Qty" }),
12010
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Price" }),
12011
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Total" }),
12012
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Status" }),
12013
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Date" })
12018
12014
  ] }),
12019
- /* @__PURE__ */ jsx(ActivityTag, { $color: getOrderStatusMeta(order.status).color, $bg: getOrderStatusMeta(order.status).bg, children: prettyLabel(order.status) }),
12020
- /* @__PURE__ */ jsxs(ActivityActions, { children: [
12021
- /* @__PURE__ */ jsx(ActivityAmount, { children: formatCurrency5(order.price * order.quantity) }),
12022
- order.txHash && /* @__PURE__ */ jsx(
12023
- ActivityRedirectButton,
12024
- {
12025
- href: `${blockExplorerBaseUrl}/${order.txHash}`,
12026
- target: "_blank",
12027
- rel: "noopener noreferrer",
12028
- "aria-label": `View transaction ${order.txHash}`,
12029
- children: /* @__PURE__ */ jsx(FiExternalLink, { size: 14 })
12030
- }
12031
- )
12032
- ] })
12033
- ] }, `${order.tokenName}-${order.txHash}-${order.createdAt}`))
12015
+ pageSlice(offeringOrders).map((order) => {
12016
+ const meta = getOrderStatusMeta(order.status);
12017
+ return /* @__PURE__ */ jsxs(GridRow, { $columns: "1.2fr 0.8fr 1fr 1fr 0.8fr 1fr", children: [
12018
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $primary: true, children: order.tokenName }) }),
12019
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatNumber2(order.quantity) }) }),
12020
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatCurrency5(order.price) }) }),
12021
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatCurrency5(order.price * order.quantity) }) }),
12022
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(ActivityTag, { $color: meta.color, $bg: meta.bg, children: prettyLabel(order.status) }) }),
12023
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(order.createdAt) }) })
12024
+ ] }, `${order.tokenName}-${order.txHash}-${order.createdAt}`);
12025
+ })
12026
+ ] })
12034
12027
  ] }),
12035
12028
  activeTab === "open-orders" && /* @__PURE__ */ jsxs(Fragment, { children: [
12036
12029
  openOrders.length === 0 && /* @__PURE__ */ jsx(EmptyState, { children: "Open orders will appear here while they are working in the market." }),
12037
- pageSlice(openOrders).map((order) => {
12038
- const meta = getOrderStatusMeta(order.status);
12039
- const isMarket = order.type === "MARKET";
12040
- const priceSegment = isMarket || !order.price ? "" : ` \xB7 ${formatCurrency5(order.price)}`;
12041
- const filledPercent = order.quantity > 0 ? Math.round(order.filledQuantity / order.quantity * 100) : 0;
12042
- const amountDisplay = !isMarket && order.price ? formatCurrency5(order.price * order.quantity) : "\u2014";
12043
- const isCancelling = cancellingOrderId === order.id;
12044
- return /* @__PURE__ */ jsxs(ActivityRow, { children: [
12045
- /* @__PURE__ */ jsx(ActivitySideBadge, { $side: sideLabel(order.side), children: sideLabel(order.side) }),
12046
- /* @__PURE__ */ jsxs(ActivityInfo, { children: [
12047
- /* @__PURE__ */ jsx(ActivityPrimary, { children: order.tokenName }),
12048
- /* @__PURE__ */ jsxs(ActivitySecondary, { children: [
12049
- formatNumber2(order.quantity),
12050
- " tokens \xB7 ",
12051
- prettyLabel(order.type),
12052
- priceSegment,
12053
- " \xB7 ",
12030
+ openOrders.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
12031
+ /* @__PURE__ */ jsxs(GridHeader, { $columns: onCancelOrder ? "1.2fr 0.6fr 0.7fr 0.8fr 1fr 0.8fr 0.8fr 70px" : "1.2fr 0.6fr 0.7fr 0.8fr 1fr 0.8fr 0.8fr", children: [
12032
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Asset" }),
12033
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Side" }),
12034
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Type" }),
12035
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Qty" }),
12036
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Price" }),
12037
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Filled" }),
12038
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Status" }),
12039
+ onCancelOrder && /* @__PURE__ */ jsx(GridHeaderCell, {})
12040
+ ] }),
12041
+ pageSlice(openOrders).map((order) => {
12042
+ const meta = getOrderStatusMeta(order.status);
12043
+ const isMarket = order.type === "MARKET";
12044
+ const filledPercent = order.quantity > 0 ? Math.round(order.filledQuantity / order.quantity * 100) : 0;
12045
+ const isCancelling = cancellingOrderId === order.id;
12046
+ return /* @__PURE__ */ jsxs(GridRow, { $columns: onCancelOrder ? "1.2fr 0.6fr 0.7fr 0.8fr 1fr 0.8fr 0.8fr 70px" : "1.2fr 0.6fr 0.7fr 0.8fr 1fr 0.8fr 0.8fr", children: [
12047
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $primary: true, children: order.tokenName }) }),
12048
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(SideBadge, { $side: sideLabel(order.side), children: sideLabel(order.side) }) }),
12049
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: prettyLabel(order.type) }) }),
12050
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatNumber2(order.quantity) }) }),
12051
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: isMarket || !order.price ? "Market" : formatCurrency5(order.price) }) }),
12052
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsxs(CellText, { $muted: true, children: [
12054
12053
  filledPercent,
12055
- "% filled \xB7 ",
12056
- formatTimestamp(order.createdAt)
12057
- ] })
12058
- ] }),
12059
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.35rem" }, children: [
12060
- onCancelOrder && /* @__PURE__ */ jsx(
12054
+ "%"
12055
+ ] }) }),
12056
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(ActivityTag, { $color: meta.color, $bg: meta.bg, children: prettyLabel(order.status) }) }),
12057
+ onCancelOrder && /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(
12061
12058
  CancelButton,
12062
12059
  {
12063
12060
  type: "button",
@@ -12066,102 +12063,94 @@ function PortfolioActivityPanel({
12066
12063
  e.stopPropagation();
12067
12064
  setPendingCancelOrderId(order.id);
12068
12065
  },
12069
- children: isCancelling ? "Cancelling\u2026" : "Cancel"
12066
+ children: isCancelling ? "\u2026" : "Cancel"
12070
12067
  }
12071
- ),
12072
- /* @__PURE__ */ jsx(ActivityTag, { $color: meta.color, $bg: meta.bg, children: prettyLabel(order.status) })
12073
- ] }),
12074
- /* @__PURE__ */ jsx(ActivityAmount, { children: amountDisplay })
12075
- ] }, `open-${order.id}`);
12076
- })
12068
+ ) })
12069
+ ] }, `open-${order.id}`);
12070
+ })
12071
+ ] })
12077
12072
  ] }),
12078
12073
  activeTab === "orders" && /* @__PURE__ */ jsxs(Fragment, { children: [
12079
12074
  orderHistory.length === 0 && /* @__PURE__ */ jsx(EmptyState, { children: "No orders yet. Place a trade to see it appear here." }),
12080
- pageSlice(orderHistory).map((order) => {
12081
- const meta = getOrderStatusMeta(order.status);
12082
- const isMarket = order.type === "MARKET";
12083
- const priceSegment = isMarket || !order.price ? "" : ` \xB7 ${formatCurrency5(order.price)}`;
12084
- const filledPercent = order.quantity > 0 ? Math.round(order.filledQuantity / order.quantity * 100) : 0;
12085
- const amountDisplay = !isMarket && order.price ? formatCurrency5(order.price * order.quantity) : "\u2014";
12086
- return /* @__PURE__ */ jsxs(ActivityRow, { children: [
12087
- /* @__PURE__ */ jsx(ActivitySideBadge, { $side: sideLabel(order.side), children: sideLabel(order.side) }),
12088
- /* @__PURE__ */ jsxs(ActivityInfo, { children: [
12089
- /* @__PURE__ */ jsx(ActivityPrimary, { children: order.tokenName }),
12090
- /* @__PURE__ */ jsxs(ActivitySecondary, { children: [
12091
- formatNumber2(order.quantity),
12092
- " tokens \xB7 ",
12093
- prettyLabel(order.type),
12094
- priceSegment,
12095
- " \xB7 ",
12075
+ orderHistory.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
12076
+ /* @__PURE__ */ jsxs(GridHeader, { $columns: "1.2fr 0.6fr 0.7fr 0.8fr 1fr 0.8fr 0.8fr 1fr", children: [
12077
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Asset" }),
12078
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Side" }),
12079
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Type" }),
12080
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Qty" }),
12081
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Price" }),
12082
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Filled" }),
12083
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Status" }),
12084
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Date" })
12085
+ ] }),
12086
+ pageSlice(orderHistory).map((order) => {
12087
+ const meta = getOrderStatusMeta(order.status);
12088
+ const isMarket = order.type === "MARKET";
12089
+ const filledPercent = order.quantity > 0 ? Math.round(order.filledQuantity / order.quantity * 100) : 0;
12090
+ return /* @__PURE__ */ jsxs(GridRow, { $columns: "1.2fr 0.6fr 0.7fr 0.8fr 1fr 0.8fr 0.8fr 1fr", children: [
12091
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $primary: true, children: order.tokenName }) }),
12092
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(SideBadge, { $side: sideLabel(order.side), children: sideLabel(order.side) }) }),
12093
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: prettyLabel(order.type) }) }),
12094
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatNumber2(order.quantity) }) }),
12095
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: isMarket || !order.price ? "Market" : formatCurrency5(order.price) }) }),
12096
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsxs(CellText, { $muted: true, children: [
12096
12097
  filledPercent,
12097
- "% filled \xB7 ",
12098
- formatTimestamp(order.createdAt)
12099
- ] })
12100
- ] }),
12101
- /* @__PURE__ */ jsx(ActivityTag, { $color: meta.color, $bg: meta.bg, children: prettyLabel(order.status) }),
12102
- /* @__PURE__ */ jsx(ActivityAmount, { children: amountDisplay })
12103
- ] }, order.id);
12104
- })
12098
+ "%"
12099
+ ] }) }),
12100
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(ActivityTag, { $color: meta.color, $bg: meta.bg, children: prettyLabel(order.status) }) }),
12101
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(order.createdAt) }) })
12102
+ ] }, order.id);
12103
+ })
12104
+ ] })
12105
12105
  ] }),
12106
12106
  activeTab === "trades" && /* @__PURE__ */ jsxs(Fragment, { children: [
12107
12107
  tradeHistory.length === 0 && /* @__PURE__ */ jsx(EmptyState, { children: "Completed trades will appear here." }),
12108
- pageSlice(tradeHistory).map((trade) => /* @__PURE__ */ jsxs(ActivityRow, { children: [
12109
- /* @__PURE__ */ jsx(ActivitySideBadge, { $side: sideLabel(trade.side), children: sideLabel(trade.side) }),
12110
- /* @__PURE__ */ jsxs(ActivityInfo, { children: [
12111
- /* @__PURE__ */ jsx(ActivityPrimary, { children: trade.tokenName }),
12112
- /* @__PURE__ */ jsxs(ActivitySecondary, { children: [
12113
- formatNumber2(trade.quantity),
12114
- " tokens @ ",
12115
- formatCurrency5(trade.price),
12116
- " \xB7 ",
12117
- formatTimestamp(trade.executedAt)
12118
- ] })
12108
+ tradeHistory.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
12109
+ /* @__PURE__ */ jsxs(GridHeader, { $columns: "1.2fr 0.6fr 0.8fr 1fr 1fr 0.8fr 1fr", children: [
12110
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Asset" }),
12111
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Side" }),
12112
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Qty" }),
12113
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Price" }),
12114
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Total" }),
12115
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Fee" }),
12116
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Date" })
12119
12117
  ] }),
12120
- /* @__PURE__ */ jsx(
12121
- ActivityTag,
12122
- {
12123
- $color: trade.side === "SELL" ? "#f6465d" : "#0ecb81",
12124
- $bg: trade.side === "SELL" ? "rgba(246,70,93,0.12)" : "rgba(14,203,129,0.12)",
12125
- children: sideLabel(trade.side)
12126
- }
12127
- ),
12128
- /* @__PURE__ */ jsx(ActivityAmount, { children: formatCurrency5(trade.price * trade.quantity) })
12129
- ] }, trade.tradeId))
12118
+ pageSlice(tradeHistory).map((trade) => /* @__PURE__ */ jsxs(GridRow, { $columns: "1.2fr 0.6fr 0.8fr 1fr 1fr 0.8fr 1fr", children: [
12119
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $primary: true, children: trade.tokenName }) }),
12120
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(SideBadge, { $side: sideLabel(trade.side), children: sideLabel(trade.side) }) }),
12121
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatNumber2(trade.quantity) }) }),
12122
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatCurrency5(trade.price) }) }),
12123
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatCurrency5(trade.price * trade.quantity) }) }),
12124
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatCurrency5(trade.fee) }) }),
12125
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(trade.executedAt) }) })
12126
+ ] }, trade.tradeId))
12127
+ ] })
12130
12128
  ] }),
12131
12129
  activeTab === "transfers" && /* @__PURE__ */ jsxs(Fragment, { children: [
12132
12130
  transfers.length === 0 && /* @__PURE__ */ jsx(EmptyState, { children: "Deposits and withdrawals will appear here." }),
12133
- pageSlice(transfers).map((t, idx) => {
12134
- const isDeposit = t.type === "DEPOSIT";
12135
- const statusMeta = getOrderStatusMeta(t.status);
12136
- return /* @__PURE__ */ jsxs(ActivityRow, { children: [
12137
- /* @__PURE__ */ jsx(ActivitySideBadge, { $side: isDeposit ? "Buy" : "Sell", children: isDeposit ? "In" : "Out" }),
12138
- /* @__PURE__ */ jsxs(ActivityInfo, { children: [
12139
- /* @__PURE__ */ jsx(ActivityPrimary, { children: isDeposit ? "Deposit" : "Withdrawal" }),
12140
- /* @__PURE__ */ jsxs(ActivitySecondary, { children: [
12141
- formatAddress(t.address),
12142
- " \xB7 ",
12143
- formatTimestamp(t.createdAt)
12144
- ] })
12145
- ] }),
12146
- /* @__PURE__ */ jsx(ActivityTag, { $color: statusMeta.color, $bg: statusMeta.bg, children: prettyLabel(t.status) }),
12147
- /* @__PURE__ */ jsxs(ActivityActions, { children: [
12148
- /* @__PURE__ */ jsxs(ActivityAmount, { children: [
12131
+ transfers.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
12132
+ /* @__PURE__ */ jsxs(GridHeader, { $columns: "0.8fr 1fr 1.5fr 0.8fr 1fr", children: [
12133
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Type" }),
12134
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Amount" }),
12135
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Address" }),
12136
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Status" }),
12137
+ /* @__PURE__ */ jsx(GridHeaderCell, { children: "Date" })
12138
+ ] }),
12139
+ pageSlice(transfers).map((t, idx) => {
12140
+ const isDeposit = t.type === "DEPOSIT";
12141
+ const statusMeta = getOrderStatusMeta(t.status);
12142
+ return /* @__PURE__ */ jsxs(GridRow, { $columns: "0.8fr 1fr 1.5fr 0.8fr 1fr", children: [
12143
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(SideBadge, { $side: isDeposit ? "Buy" : "Sell", children: isDeposit ? "Deposit" : "Withdraw" }) }),
12144
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsxs(CellText, { $color: isDeposit ? "#0ecb81" : "#f6465d", children: [
12149
12145
  isDeposit ? "+" : "-",
12150
12146
  formatCurrency5(t.amount)
12151
- ] }),
12152
- t.blockchainTxHash && /* @__PURE__ */ jsx(
12153
- ActivityRedirectButton,
12154
- {
12155
- href: `${blockExplorerBaseUrl}/${t.blockchainTxHash}`,
12156
- target: "_blank",
12157
- rel: "noopener noreferrer",
12158
- "aria-label": `View transaction ${t.blockchainTxHash}`,
12159
- children: /* @__PURE__ */ jsx(FiExternalLink, { size: 14 })
12160
- }
12161
- )
12162
- ] })
12163
- ] }, t.blockchainTxHash ?? `transfer-${idx}`);
12164
- })
12147
+ ] }) }),
12148
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatAddress(t.address) }) }),
12149
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(ActivityTag, { $color: statusMeta.color, $bg: statusMeta.bg, children: prettyLabel(t.status) }) }),
12150
+ /* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(t.createdAt) }) })
12151
+ ] }, t.blockchainTxHash ?? `transfer-${idx}`);
12152
+ })
12153
+ ] })
12165
12154
  ] }),
12166
12155
  activityTotalPages > 1 && /* @__PURE__ */ jsxs(PaginationRow, { children: [
12167
12156
  /* @__PURE__ */ jsx(
@@ -12263,7 +12252,7 @@ var TabCount = styled25.span`
12263
12252
  font-weight: 600;
12264
12253
  margin-left: 2px;
12265
12254
  `;
12266
- var ActivityRow = styled25.div`
12255
+ styled25.div`
12267
12256
  display: grid;
12268
12257
  grid-template-columns: auto 1fr auto auto;
12269
12258
  align-items: center;
@@ -12279,7 +12268,7 @@ var ActivityRow = styled25.div`
12279
12268
  background: rgba(255, 255, 255, 0.015);
12280
12269
  }
12281
12270
  `;
12282
- var ActivitySideBadge = styled25.span`
12271
+ styled25.span`
12283
12272
  font-size: 0.6rem;
12284
12273
  font-weight: 700;
12285
12274
  text-transform: uppercase;
@@ -12291,17 +12280,17 @@ var ActivitySideBadge = styled25.span`
12291
12280
  color: ${({ $side }) => $side === "Buy" ? "#0ecb81" : "#f6465d"};
12292
12281
  background: ${({ $side }) => $side === "Buy" ? "rgba(14, 203, 129, 0.1)" : "rgba(246, 70, 93, 0.1)"};
12293
12282
  `;
12294
- var ActivityInfo = styled25.div`
12283
+ styled25.div`
12295
12284
  display: flex;
12296
12285
  flex-direction: column;
12297
12286
  gap: 0.1rem;
12298
12287
  `;
12299
- var ActivityPrimary = styled25.span`
12288
+ styled25.span`
12300
12289
  font-size: 0.8rem;
12301
12290
  color: #fff;
12302
12291
  font-weight: 500;
12303
12292
  `;
12304
- var ActivitySecondary = styled25.span`
12293
+ styled25.span`
12305
12294
  font-size: 0.6rem;
12306
12295
  color: rgba(255, 255, 255, 0.35);
12307
12296
  `;
@@ -12314,20 +12303,20 @@ var ActivityTag = styled25.span`
12314
12303
  background: ${({ $bg }) => $bg || "rgba(255, 255, 255, 0.06)"};
12315
12304
  white-space: nowrap;
12316
12305
  `;
12317
- var ActivityAmount = styled25.span`
12306
+ styled25.span`
12318
12307
  font-size: 0.8rem;
12319
12308
  font-weight: 600;
12320
12309
  color: #fff;
12321
12310
  text-align: right;
12322
12311
  white-space: nowrap;
12323
12312
  `;
12324
- var ActivityActions = styled25.div`
12313
+ styled25.div`
12325
12314
  display: flex;
12326
12315
  align-items: center;
12327
12316
  justify-content: flex-end;
12328
12317
  gap: 0.35rem;
12329
12318
  `;
12330
- var ActivityRedirectButton = styled25.a`
12319
+ styled25.a`
12331
12320
  display: inline-flex;
12332
12321
  align-items: center;
12333
12322
  justify-content: center;
@@ -12402,10 +12391,8 @@ var PositionsRow = styled25.div`
12402
12391
  align-items: center;
12403
12392
  gap: 0 0.75rem;
12404
12393
  padding: 0.5rem 0.5rem;
12405
- cursor: pointer;
12406
12394
  border-bottom: 1px solid rgba(255, 255, 255, 0.03);
12407
12395
  &:last-child { border-bottom: none; }
12408
- &:hover { background: rgba(255, 255, 255, 0.02); }
12409
12396
  `;
12410
12397
  var PositionsCell = styled25.div`
12411
12398
  display: flex;
@@ -12413,10 +12400,12 @@ var PositionsCell = styled25.div`
12413
12400
  align-items: ${(p) => p.$align === "right" ? "flex-end" : "flex-start"};
12414
12401
  gap: 0.1rem;
12415
12402
  `;
12416
- var HoldingsProperty = styled25.div`
12403
+ var HoldingsPropertyLink = styled25.span`
12417
12404
  font-size: 0.8rem;
12418
12405
  font-weight: 600;
12419
12406
  color: #fff;
12407
+ cursor: pointer;
12408
+ &:hover { text-decoration: underline; color: var(--color-accent, #E6C87E); }
12420
12409
  `;
12421
12410
  var PnLAmount = styled25.div`
12422
12411
  font-size: 0.85rem;
@@ -12449,6 +12438,46 @@ var CancelButton = styled25.button`
12449
12438
  cursor: not-allowed;
12450
12439
  }
12451
12440
  `;
12441
+ var GridHeader = styled25.div`
12442
+ display: grid;
12443
+ grid-template-columns: ${(p) => p.$columns};
12444
+ gap: 0 0.75rem;
12445
+ padding: 0.4rem 0.5rem;
12446
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
12447
+ `;
12448
+ var GridHeaderCell = styled25.div`
12449
+ font-size: 0.68rem;
12450
+ font-weight: 500;
12451
+ color: rgba(255, 255, 255, 0.4);
12452
+ white-space: nowrap;
12453
+ `;
12454
+ var GridRow = styled25.div`
12455
+ display: grid;
12456
+ grid-template-columns: ${(p) => p.$columns};
12457
+ align-items: center;
12458
+ gap: 0 0.75rem;
12459
+ padding: 0.5rem 0.5rem;
12460
+ border-bottom: 1px solid rgba(255, 255, 255, 0.03);
12461
+ &:last-child { border-bottom: none; }
12462
+ `;
12463
+ var GridCell = styled25.div`
12464
+ display: flex;
12465
+ align-items: center;
12466
+ min-width: 0;
12467
+ `;
12468
+ var CellText = styled25.span`
12469
+ font-size: 0.8rem;
12470
+ font-weight: ${(p) => p.$primary ? 600 : 400};
12471
+ color: ${(p) => p.$color || (p.$muted ? "rgba(255,255,255,0.5)" : "#fff")};
12472
+ white-space: nowrap;
12473
+ overflow: hidden;
12474
+ text-overflow: ellipsis;
12475
+ `;
12476
+ var SideBadge = styled25.span`
12477
+ font-size: 0.68rem;
12478
+ font-weight: 600;
12479
+ color: ${({ $side }) => $side === "Buy" ? "#0ecb81" : "#f6465d"};
12480
+ `;
12452
12481
  var CancelConfirmOverlay = styled25.div`
12453
12482
  position: fixed;
12454
12483
  inset: 0;