@compass-labs/widgets 0.1.20 → 0.1.21
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 +23 -5
- package/dist/index.d.ts +23 -5
- package/dist/index.js +109 -135
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +110 -136
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.js +6 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +6 -4
- package/dist/server/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { QueryClient, QueryClientProvider, useQueryClient, useQuery } from '@tan
|
|
|
3
3
|
import { CompassApiSDK } from '@compass-labs/api-sdk';
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import { arbitrum, base, mainnet } from 'viem/chains';
|
|
6
|
-
import { Wallet, LogOut, X, ChevronDown, AlertCircle, ArrowRight, Loader2, ArrowDownLeft, ArrowUpRight, ExternalLink, Coins, Search, SlidersHorizontal, TrendingUp,
|
|
6
|
+
import { Wallet, LogOut, X, ChevronDown, AlertCircle, ArrowRight, Loader2, ArrowDownLeft, ArrowUpRight, ExternalLink, Coins, Search, SlidersHorizontal, TrendingUp, Plus, ChevronRight, Minus, Shield, CheckCircle, Calendar, ArrowDownUp, ChevronUp, Inbox, Percent, Clock, TrendingDown } from 'lucide-react';
|
|
7
7
|
|
|
8
8
|
// src/provider/CompassProvider.tsx
|
|
9
9
|
var ApiContext = createContext(null);
|
|
@@ -3779,31 +3779,45 @@ function AaveMarketsList({
|
|
|
3779
3779
|
)
|
|
3780
3780
|
] });
|
|
3781
3781
|
}
|
|
3782
|
-
var
|
|
3783
|
-
{ value: "
|
|
3784
|
-
{ value: "
|
|
3785
|
-
{ value: "pendle", label: "FIXED" }
|
|
3782
|
+
var MARKET_TABS = [
|
|
3783
|
+
{ value: "variable", label: "VARIABLE" },
|
|
3784
|
+
{ value: "fixed", label: "FIXED" }
|
|
3786
3785
|
];
|
|
3786
|
+
var TAB_TO_MARKET_TYPES = {
|
|
3787
|
+
variable: ["aave", "vaults"],
|
|
3788
|
+
fixed: ["pendle"]
|
|
3789
|
+
};
|
|
3787
3790
|
function MarketSelector({
|
|
3788
3791
|
markets,
|
|
3789
3792
|
selectedMarket,
|
|
3790
3793
|
onMarketSelect,
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
isLoading
|
|
3794
|
+
marketTab,
|
|
3795
|
+
onMarketTabChange,
|
|
3796
|
+
isLoading,
|
|
3797
|
+
allowedMarketIds
|
|
3796
3798
|
}) {
|
|
3797
3799
|
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
|
|
3798
|
-
const
|
|
3800
|
+
const dropdownRef = useRef(null);
|
|
3801
|
+
useEffect(() => {
|
|
3802
|
+
function handleClickOutside(e) {
|
|
3803
|
+
if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
|
|
3804
|
+
setIsDropdownOpen(false);
|
|
3805
|
+
}
|
|
3806
|
+
}
|
|
3807
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
3808
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
3809
|
+
}, []);
|
|
3810
|
+
const allowedTypes = TAB_TO_MARKET_TYPES[marketTab];
|
|
3811
|
+
const showTvl = marketTab === "variable";
|
|
3799
3812
|
const filteredMarkets = useMemo(() => {
|
|
3800
|
-
return markets.filter((m) =>
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3813
|
+
return markets.filter((m) => {
|
|
3814
|
+
if (!allowedTypes.includes(m.type)) return false;
|
|
3815
|
+
if (allowedMarketIds !== void 0) {
|
|
3816
|
+
return allowedMarketIds.includes(m.id);
|
|
3817
|
+
}
|
|
3818
|
+
return true;
|
|
3819
|
+
}).sort((a, b) => b.apy - a.apy);
|
|
3820
|
+
}, [markets, allowedTypes, allowedMarketIds]);
|
|
3807
3821
|
const hasMarkets = filteredMarkets.length > 0;
|
|
3808
3822
|
const formatTvl = (value) => {
|
|
3809
3823
|
if (value >= 1e9) return `$${(value / 1e9).toFixed(1)}B`;
|
|
@@ -3842,15 +3856,15 @@ function MarketSelector({
|
|
|
3842
3856
|
border: "1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))",
|
|
3843
3857
|
overflow: "hidden"
|
|
3844
3858
|
},
|
|
3845
|
-
children:
|
|
3859
|
+
children: MARKET_TABS.map((tab) => /* @__PURE__ */ jsx(
|
|
3846
3860
|
"button",
|
|
3847
3861
|
{
|
|
3848
|
-
onClick: () =>
|
|
3862
|
+
onClick: () => onMarketTabChange(tab.value),
|
|
3849
3863
|
style: {
|
|
3850
3864
|
flex: 1,
|
|
3851
3865
|
padding: "6px 8px",
|
|
3852
|
-
backgroundColor:
|
|
3853
|
-
color:
|
|
3866
|
+
backgroundColor: marketTab === tab.value ? "var(--compass-color-primary, #6366f1)" : "var(--compass-color-surface, #12121a)",
|
|
3867
|
+
color: marketTab === tab.value ? "var(--compass-color-primary-text, white)" : "var(--compass-color-text, #e4e4e7)",
|
|
3854
3868
|
border: "none",
|
|
3855
3869
|
cursor: "pointer",
|
|
3856
3870
|
fontSize: "12px",
|
|
@@ -3858,9 +3872,9 @@ function MarketSelector({
|
|
|
3858
3872
|
fontFamily: "var(--compass-font-family)",
|
|
3859
3873
|
transition: "var(--compass-transition-normal, all 0.2s ease)"
|
|
3860
3874
|
},
|
|
3861
|
-
children:
|
|
3875
|
+
children: tab.label
|
|
3862
3876
|
},
|
|
3863
|
-
|
|
3877
|
+
tab.value
|
|
3864
3878
|
))
|
|
3865
3879
|
}
|
|
3866
3880
|
)
|
|
@@ -3878,7 +3892,7 @@ function MarketSelector({
|
|
|
3878
3892
|
children: "Select Market"
|
|
3879
3893
|
}
|
|
3880
3894
|
),
|
|
3881
|
-
/* @__PURE__ */ jsxs("div", { style: { position: "relative" }, children: [
|
|
3895
|
+
/* @__PURE__ */ jsxs("div", { ref: dropdownRef, style: { position: "relative" }, children: [
|
|
3882
3896
|
/* @__PURE__ */ jsxs(
|
|
3883
3897
|
"button",
|
|
3884
3898
|
{
|
|
@@ -3905,7 +3919,7 @@ function MarketSelector({
|
|
|
3905
3919
|
style: {
|
|
3906
3920
|
color: selectedMarket ? "var(--compass-color-text)" : "var(--compass-color-text-secondary)"
|
|
3907
3921
|
},
|
|
3908
|
-
children: isLoading ? "Loading markets..." : !hasMarkets ?
|
|
3922
|
+
children: isLoading ? "Loading markets..." : !hasMarkets ? "No markets available" : selectedMarket ? selectedMarket.name : "Select a market"
|
|
3909
3923
|
}
|
|
3910
3924
|
),
|
|
3911
3925
|
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "var(--compass-spacing-unit)" }, children: [
|
|
@@ -3998,7 +4012,7 @@ function MarketSelector({
|
|
|
3998
4012
|
]
|
|
3999
4013
|
}
|
|
4000
4014
|
),
|
|
4001
|
-
(showTvl || market.expiry) && /* @__PURE__ */ jsxs(
|
|
4015
|
+
(showTvl && market.tvl > 0 || market.expiry) && /* @__PURE__ */ jsxs(
|
|
4002
4016
|
"div",
|
|
4003
4017
|
{
|
|
4004
4018
|
style: {
|
|
@@ -4007,8 +4021,8 @@ function MarketSelector({
|
|
|
4007
4021
|
marginTop: "calc(var(--compass-spacing-unit) * 0.5)"
|
|
4008
4022
|
},
|
|
4009
4023
|
children: [
|
|
4010
|
-
showTvl && `TVL: ${formatTvl(market.tvl)}`,
|
|
4011
|
-
showTvl && market.expiry && " \xB7 ",
|
|
4024
|
+
showTvl && market.tvl > 0 && `TVL: ${formatTvl(market.tvl)}`,
|
|
4025
|
+
showTvl && market.tvl > 0 && market.expiry && " \xB7 ",
|
|
4012
4026
|
market.expiry && `Expires: ${market.expiry}`
|
|
4013
4027
|
]
|
|
4014
4028
|
}
|
|
@@ -4020,56 +4034,6 @@ function MarketSelector({
|
|
|
4020
4034
|
}
|
|
4021
4035
|
)
|
|
4022
4036
|
] })
|
|
4023
|
-
] }),
|
|
4024
|
-
showTvl && /* @__PURE__ */ jsxs("div", { children: [
|
|
4025
|
-
/* @__PURE__ */ jsxs(
|
|
4026
|
-
"div",
|
|
4027
|
-
{
|
|
4028
|
-
style: {
|
|
4029
|
-
display: "flex",
|
|
4030
|
-
justifyContent: "space-between",
|
|
4031
|
-
alignItems: "center",
|
|
4032
|
-
marginBottom: "var(--compass-spacing-unit)"
|
|
4033
|
-
},
|
|
4034
|
-
children: [
|
|
4035
|
-
/* @__PURE__ */ jsx(
|
|
4036
|
-
"label",
|
|
4037
|
-
{
|
|
4038
|
-
style: {
|
|
4039
|
-
fontSize: "var(--compass-font-size-sm)",
|
|
4040
|
-
color: "var(--compass-color-text-secondary)"
|
|
4041
|
-
},
|
|
4042
|
-
children: "Min TVL"
|
|
4043
|
-
}
|
|
4044
|
-
),
|
|
4045
|
-
/* @__PURE__ */ jsx(
|
|
4046
|
-
"span",
|
|
4047
|
-
{
|
|
4048
|
-
style: {
|
|
4049
|
-
fontSize: "var(--compass-font-size-sm)",
|
|
4050
|
-
color: "var(--compass-color-text)"
|
|
4051
|
-
},
|
|
4052
|
-
children: formatTvl(minTvl)
|
|
4053
|
-
}
|
|
4054
|
-
)
|
|
4055
|
-
]
|
|
4056
|
-
}
|
|
4057
|
-
),
|
|
4058
|
-
/* @__PURE__ */ jsx(
|
|
4059
|
-
"input",
|
|
4060
|
-
{
|
|
4061
|
-
type: "range",
|
|
4062
|
-
min: 0,
|
|
4063
|
-
max: maxTvl,
|
|
4064
|
-
step: 1e5,
|
|
4065
|
-
value: minTvl,
|
|
4066
|
-
onChange: (e) => onMinTvlChange(Number(e.target.value)),
|
|
4067
|
-
style: {
|
|
4068
|
-
width: "100%",
|
|
4069
|
-
accentColor: "var(--compass-color-primary)"
|
|
4070
|
-
}
|
|
4071
|
-
}
|
|
4072
|
-
)
|
|
4073
4037
|
] })
|
|
4074
4038
|
]
|
|
4075
4039
|
}
|
|
@@ -4667,12 +4631,15 @@ function EarnAccount({
|
|
|
4667
4631
|
title = "Savings Account",
|
|
4668
4632
|
onDeposit,
|
|
4669
4633
|
onWithdraw,
|
|
4670
|
-
|
|
4671
|
-
|
|
4634
|
+
defaultMarketTab = "variable",
|
|
4635
|
+
allowedVariableMarkets,
|
|
4636
|
+
allowedFixedMarkets,
|
|
4637
|
+
chain: chainProp
|
|
4672
4638
|
}) {
|
|
4673
4639
|
const { address, isConnected, login, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();
|
|
4674
4640
|
const { isDeployed } = useEarnAccount();
|
|
4675
|
-
const { chainId:
|
|
4641
|
+
const { chainId: contextChainId } = useChain();
|
|
4642
|
+
const CHAIN_ID = chainProp || contextChainId;
|
|
4676
4643
|
const queryClient = useQueryClient();
|
|
4677
4644
|
const [activeTab, setActiveTab] = useState("deposit");
|
|
4678
4645
|
const [selectedToken, setSelectedToken] = useState("USDC");
|
|
@@ -4688,9 +4655,8 @@ function EarnAccount({
|
|
|
4688
4655
|
const [fundError, setFundError] = useState(null);
|
|
4689
4656
|
const [fundStatus, setFundStatus] = useState("");
|
|
4690
4657
|
const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);
|
|
4691
|
-
const [
|
|
4658
|
+
const [marketTab, setMarketTab] = useState(defaultMarketTab);
|
|
4692
4659
|
const [selectedMarket, setSelectedMarket] = useState(null);
|
|
4693
|
-
const [minTvl, setMinTvl] = useState(defaultMinTvl);
|
|
4694
4660
|
const [isEarningsModalOpen, setIsEarningsModalOpen] = useState(false);
|
|
4695
4661
|
useEffect(() => {
|
|
4696
4662
|
setSelectedMarket(null);
|
|
@@ -4756,7 +4722,7 @@ function EarnAccount({
|
|
|
4756
4722
|
});
|
|
4757
4723
|
const allPositionData = positionQuery.data || [];
|
|
4758
4724
|
const totalDepositedBalance = allPositionData.reduce((sum, p) => sum + parseFloat(p.balanceUsd || "0"), 0);
|
|
4759
|
-
const earnAccountTotal = parseFloat(earnAccountTotalUsd);
|
|
4725
|
+
const earnAccountTotal = parseFloat(earnAccountTotalUsd) + totalDepositedBalance;
|
|
4760
4726
|
const aaveMarketsQuery = useQuery({
|
|
4761
4727
|
queryKey: ["allAaveMarkets", CHAIN_ID],
|
|
4762
4728
|
queryFn: async () => {
|
|
@@ -5373,7 +5339,7 @@ function EarnAccount({
|
|
|
5373
5339
|
) }),
|
|
5374
5340
|
/* @__PURE__ */ jsx(WalletStatus, { compact: true })
|
|
5375
5341
|
] }),
|
|
5376
|
-
/* @__PURE__ */ jsx(ChainSwitcher, {}),
|
|
5342
|
+
!chainProp && /* @__PURE__ */ jsx(ChainSwitcher, {}),
|
|
5377
5343
|
/* @__PURE__ */ jsxs(EarnAccountGuard, { children: [
|
|
5378
5344
|
/* @__PURE__ */ jsxs(
|
|
5379
5345
|
"div",
|
|
@@ -5385,14 +5351,14 @@ function EarnAccount({
|
|
|
5385
5351
|
padding: compact ? "var(--compass-spacing-card)" : "calc(var(--compass-spacing-card) * 1.25)"
|
|
5386
5352
|
},
|
|
5387
5353
|
children: [
|
|
5388
|
-
/* @__PURE__ */ jsxs(
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5354
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", style: { gap: "calc(var(--compass-spacing-unit) * 0.5)" }, children: [
|
|
5355
|
+
/* @__PURE__ */ jsxs(
|
|
5356
|
+
"button",
|
|
5357
|
+
{
|
|
5358
|
+
onClick: () => setIsBalancesModalOpen(true),
|
|
5359
|
+
className: "flex items-center text-left transition-opacity hover:opacity-80",
|
|
5360
|
+
style: { gap: "calc(var(--compass-spacing-unit) * 0.5)" },
|
|
5361
|
+
children: [
|
|
5396
5362
|
/* @__PURE__ */ jsx(
|
|
5397
5363
|
"span",
|
|
5398
5364
|
{
|
|
@@ -5402,22 +5368,51 @@ function EarnAccount({
|
|
|
5402
5368
|
}
|
|
5403
5369
|
),
|
|
5404
5370
|
/* @__PURE__ */ jsx(ChevronDown, { size: 12, style: { color: "var(--compass-color-text-tertiary)" } })
|
|
5405
|
-
]
|
|
5406
|
-
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
|
|
5412
|
-
|
|
5413
|
-
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
|
-
|
|
5420
|
-
|
|
5371
|
+
]
|
|
5372
|
+
}
|
|
5373
|
+
),
|
|
5374
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
5375
|
+
/* @__PURE__ */ jsx(
|
|
5376
|
+
"button",
|
|
5377
|
+
{
|
|
5378
|
+
onClick: () => setIsBalancesModalOpen(true),
|
|
5379
|
+
className: "transition-opacity hover:opacity-80",
|
|
5380
|
+
children: /* @__PURE__ */ jsx(
|
|
5381
|
+
"span",
|
|
5382
|
+
{
|
|
5383
|
+
className: "font-bold",
|
|
5384
|
+
style: {
|
|
5385
|
+
color: "var(--compass-color-text)",
|
|
5386
|
+
fontSize: compact ? "2rem" : "2.5rem",
|
|
5387
|
+
lineHeight: "1"
|
|
5388
|
+
},
|
|
5389
|
+
children: formatCurrency(earnAccountTotal)
|
|
5390
|
+
}
|
|
5391
|
+
)
|
|
5392
|
+
}
|
|
5393
|
+
),
|
|
5394
|
+
showTopUpButton && /* @__PURE__ */ jsxs(
|
|
5395
|
+
"button",
|
|
5396
|
+
{
|
|
5397
|
+
onClick: () => setIsFundModalOpen(true),
|
|
5398
|
+
className: "flex items-center font-medium transition-all hover:opacity-80",
|
|
5399
|
+
style: {
|
|
5400
|
+
backgroundColor: "var(--compass-color-surface-elevated, var(--compass-color-surface))",
|
|
5401
|
+
border: "1px solid var(--compass-color-border)",
|
|
5402
|
+
color: "var(--compass-color-text-secondary)",
|
|
5403
|
+
borderRadius: "var(--compass-border-radius-md)",
|
|
5404
|
+
padding: "6px 10px",
|
|
5405
|
+
gap: "4px",
|
|
5406
|
+
fontSize: "12px"
|
|
5407
|
+
},
|
|
5408
|
+
children: [
|
|
5409
|
+
/* @__PURE__ */ jsx(Plus, { size: 14 }),
|
|
5410
|
+
"Top Up"
|
|
5411
|
+
]
|
|
5412
|
+
}
|
|
5413
|
+
)
|
|
5414
|
+
] })
|
|
5415
|
+
] }),
|
|
5421
5416
|
/* @__PURE__ */ jsx(
|
|
5422
5417
|
"div",
|
|
5423
5418
|
{
|
|
@@ -5480,14 +5475,13 @@ function EarnAccount({
|
|
|
5480
5475
|
markets: allMarkets,
|
|
5481
5476
|
selectedMarket,
|
|
5482
5477
|
onMarketSelect: setSelectedMarket,
|
|
5483
|
-
|
|
5484
|
-
|
|
5485
|
-
|
|
5478
|
+
marketTab,
|
|
5479
|
+
onMarketTabChange: (tab) => {
|
|
5480
|
+
setMarketTab(tab);
|
|
5486
5481
|
setSelectedMarket(null);
|
|
5487
5482
|
},
|
|
5488
|
-
|
|
5489
|
-
|
|
5490
|
-
isLoading: isMarketsLoading
|
|
5483
|
+
isLoading: isMarketsLoading,
|
|
5484
|
+
allowedMarketIds: marketTab === "variable" ? allowedVariableMarkets : allowedFixedMarkets
|
|
5491
5485
|
}
|
|
5492
5486
|
),
|
|
5493
5487
|
/* @__PURE__ */ jsxs(
|
|
@@ -5747,26 +5741,6 @@ function EarnAccount({
|
|
|
5747
5741
|
] })
|
|
5748
5742
|
]
|
|
5749
5743
|
}
|
|
5750
|
-
),
|
|
5751
|
-
showTopUpButton && /* @__PURE__ */ jsxs(
|
|
5752
|
-
"button",
|
|
5753
|
-
{
|
|
5754
|
-
onClick: () => setIsFundModalOpen(true),
|
|
5755
|
-
className: "w-full font-medium flex items-center justify-center transition-all",
|
|
5756
|
-
style: {
|
|
5757
|
-
backgroundColor: "var(--compass-color-surface)",
|
|
5758
|
-
border: "1px solid var(--compass-color-border)",
|
|
5759
|
-
color: "var(--compass-color-text)",
|
|
5760
|
-
borderRadius: "var(--compass-border-radius-lg)",
|
|
5761
|
-
padding: compact ? "calc(var(--compass-spacing-unit) * 0.75)" : "var(--compass-spacing-card)",
|
|
5762
|
-
gap: "calc(var(--compass-spacing-unit) * 0.5)",
|
|
5763
|
-
transition: "var(--compass-transition-normal)"
|
|
5764
|
-
},
|
|
5765
|
-
children: [
|
|
5766
|
-
/* @__PURE__ */ jsx(Wallet, { size: compact ? 16 : 18 }),
|
|
5767
|
-
"Top Up"
|
|
5768
|
-
]
|
|
5769
|
-
}
|
|
5770
5744
|
)
|
|
5771
5745
|
] }),
|
|
5772
5746
|
/* @__PURE__ */ jsx(
|