@b3dotfun/sdk 0.1.2-alpha.0 → 0.1.2-alpha.2
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/cjs/anyspend/react/components/AnySpend.d.ts +3 -0
- package/dist/cjs/anyspend/react/components/AnySpend.js +12 -6
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -0
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +10 -4
- package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +4 -1
- package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +19 -4
- package/dist/cjs/anyspend/react/components/QRDeposit.d.ts +4 -1
- package/dist/cjs/anyspend/react/components/QRDeposit.js +12 -4
- package/dist/cjs/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +7 -5
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
- package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
- package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.js +15 -6
- package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
- package/dist/cjs/anyspend/react/components/common/OrderDetails.d.ts +3 -0
- package/dist/cjs/anyspend/react/components/common/OrderDetails.js +7 -4
- package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +3 -2
- package/dist/cjs/anyspend/react/components/common/OrderHistory.js +2 -1
- package/dist/cjs/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +2 -2
- package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
- package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.js +3 -2
- package/dist/cjs/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
- package/dist/cjs/anyspend/react/components/common/RecipientSelection.js +5 -2
- package/dist/cjs/anyspend/react/components/common/TabSection.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/TabSection.js +16 -7
- package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
- package/dist/cjs/anyspend/react/components/common/WarningText.d.ts +8 -7
- package/dist/cjs/anyspend/react/components/common/WarningText.js +5 -6
- package/dist/cjs/anyspend/react/components/index.d.ts +1 -0
- package/dist/cjs/anyspend/react/components/types/classes.d.ts +390 -0
- package/dist/cjs/anyspend/react/components/types/classes.js +6 -0
- package/dist/cjs/global-account/react/stores/useModalStore.d.ts +3 -0
- package/dist/esm/anyspend/react/components/AnySpend.d.ts +3 -0
- package/dist/esm/anyspend/react/components/AnySpend.js +12 -6
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -0
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +10 -4
- package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +4 -1
- package/dist/esm/anyspend/react/components/AnySpendDeposit.js +19 -4
- package/dist/esm/anyspend/react/components/QRDeposit.d.ts +4 -1
- package/dist/esm/anyspend/react/components/QRDeposit.js +12 -4
- package/dist/esm/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +7 -5
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
- package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
- package/dist/esm/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/FeeDetailPanel.js +15 -6
- package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
- package/dist/esm/anyspend/react/components/common/OrderDetails.d.ts +3 -0
- package/dist/esm/anyspend/react/components/common/OrderDetails.js +7 -4
- package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +3 -2
- package/dist/esm/anyspend/react/components/common/OrderHistory.js +2 -1
- package/dist/esm/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/PanelOnramp.js +2 -2
- package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
- package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
- package/dist/esm/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/PointsDetailPanel.js +3 -2
- package/dist/esm/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
- package/dist/esm/anyspend/react/components/common/RecipientSelection.js +5 -2
- package/dist/esm/anyspend/react/components/common/TabSection.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/TabSection.js +16 -7
- package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
- package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
- package/dist/esm/anyspend/react/components/common/WarningText.d.ts +8 -7
- package/dist/esm/anyspend/react/components/common/WarningText.js +5 -6
- package/dist/esm/anyspend/react/components/index.d.ts +1 -0
- package/dist/esm/anyspend/react/components/types/classes.d.ts +390 -0
- package/dist/esm/anyspend/react/components/types/classes.js +5 -0
- package/dist/esm/global-account/react/stores/useModalStore.d.ts +3 -0
- package/dist/types/anyspend/react/components/AnySpend.d.ts +3 -0
- package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -0
- package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +4 -1
- package/dist/types/anyspend/react/components/QRDeposit.d.ts +4 -1
- package/dist/types/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/OrderDetails.d.ts +3 -0
- package/dist/types/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/types/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
- package/dist/types/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
- package/dist/types/anyspend/react/components/common/TabSection.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
- package/dist/types/anyspend/react/components/common/WarningText.d.ts +8 -7
- package/dist/types/anyspend/react/components/index.d.ts +1 -0
- package/dist/types/anyspend/react/components/types/classes.d.ts +390 -0
- package/dist/types/global-account/react/stores/useModalStore.d.ts +3 -0
- package/package.json +1 -1
- package/src/anyspend/react/components/AnySpend.tsx +41 -20
- package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +31 -13
- package/src/anyspend/react/components/AnySpendDeposit.tsx +171 -52
- package/src/anyspend/react/components/QRDeposit.tsx +91 -35
- package/src/anyspend/react/components/common/CryptoPaySection.tsx +31 -19
- package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +14 -4
- package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +43 -23
- package/src/anyspend/react/components/common/FeeDetailPanel.tsx +53 -32
- package/src/anyspend/react/components/common/FiatPaymentMethod.tsx +26 -13
- package/src/anyspend/react/components/common/OrderDetails.tsx +16 -3
- package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +5 -1
- package/src/anyspend/react/components/common/OrderHistory.tsx +2 -1
- package/src/anyspend/react/components/common/PanelOnramp.tsx +4 -1
- package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +118 -40
- package/src/anyspend/react/components/common/PointsDetailPanel.tsx +28 -14
- package/src/anyspend/react/components/common/RecipientSelection.tsx +20 -5
- package/src/anyspend/react/components/common/TabSection.tsx +21 -12
- package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +12 -4
- package/src/anyspend/react/components/common/WarningText.tsx +10 -10
- package/src/anyspend/react/components/index.ts +16 -0
- package/src/anyspend/react/components/types/classes.ts +476 -0
- package/src/global-account/react/stores/useModalStore.ts +3 -0
|
@@ -3,11 +3,13 @@ import { cn } from "@b3dotfun/sdk/shared/utils/cn";
|
|
|
3
3
|
import { ChevronDown } from "lucide-react";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { components } from "../../../types/api";
|
|
6
|
+
import type { FeeDetailPanelClasses } from "../types/classes";
|
|
6
7
|
|
|
7
8
|
interface FeeDetailPanelProps {
|
|
8
9
|
fee: components["schemas"]["Fee"];
|
|
9
10
|
transactionAmountUsd?: number;
|
|
10
11
|
onBack: () => void;
|
|
12
|
+
classes?: FeeDetailPanelClasses;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
// Fee tier definitions
|
|
@@ -32,7 +34,7 @@ const WHALE_DISCOUNT_TIERS = [
|
|
|
32
34
|
{ minAny: 1000000, discountPercent: 100, label: "Tier 3: 1M+ $ANY" },
|
|
33
35
|
];
|
|
34
36
|
|
|
35
|
-
export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailPanelProps) {
|
|
37
|
+
export function FeeDetailPanel({ fee, transactionAmountUsd, onBack, classes }: FeeDetailPanelProps) {
|
|
36
38
|
// Detect if this is a fiat onramp order (Stripe) vs regular crypto swap
|
|
37
39
|
// stripeweb2_fee = Stripe/fiat onramp (uses FIAT_FEE_TIERS)
|
|
38
40
|
// standard_fee = Regular crypto swap (uses CRYPTO_FEE_TIERS)
|
|
@@ -83,15 +85,17 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
83
85
|
const [showAllDiscountTiers, setShowAllDiscountTiers] = useState(false);
|
|
84
86
|
|
|
85
87
|
return (
|
|
86
|
-
<div className="mx-auto flex w-[460px] max-w-full flex-col items-center gap-3 px-5">
|
|
88
|
+
<div className={classes?.container || "mx-auto flex w-[460px] max-w-full flex-col items-center gap-3 px-5"}>
|
|
87
89
|
<div className="flex w-full flex-col gap-3">
|
|
88
90
|
<div className="text-center">
|
|
89
|
-
<h3 className="text-as-primary text-lg font-bold">Fee Breakdown</h3>
|
|
91
|
+
<h3 className={classes?.title || "text-as-primary text-lg font-bold"}>Fee Breakdown</h3>
|
|
90
92
|
</div>
|
|
91
93
|
|
|
92
94
|
{/* Base Fee Schedule Section */}
|
|
93
|
-
<div
|
|
94
|
-
|
|
95
|
+
<div
|
|
96
|
+
className={classes?.tierCard || "bg-as-surface-secondary border-as-border-secondary rounded-2xl border p-4"}
|
|
97
|
+
>
|
|
98
|
+
<h4 className={classes?.tierCardTitle || "text-as-primary mb-3 text-sm font-semibold"}>
|
|
95
99
|
{isStripeFee ? "Fiat Fee Schedule" : "Base Fee Schedule"}
|
|
96
100
|
</h4>
|
|
97
101
|
<div className="space-y-1.5">
|
|
@@ -109,12 +113,15 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
109
113
|
<div
|
|
110
114
|
key={idx}
|
|
111
115
|
className={cn(
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
isCurrentTier
|
|
117
|
+
? classes?.tierRowActive ||
|
|
118
|
+
"bg-as-brand/10 text-as-brand flex items-center justify-between rounded-lg px-3 py-2.5 text-sm font-semibold transition-colors"
|
|
119
|
+
: classes?.tierRow ||
|
|
120
|
+
"text-as-primary/60 flex items-center justify-between rounded-lg px-3 py-2.5 text-sm transition-colors",
|
|
114
121
|
)}
|
|
115
122
|
>
|
|
116
|
-
<span>{tier.label}</span>
|
|
117
|
-
<span>Credit Card Fee + {tier.fee}</span>
|
|
123
|
+
<span className={classes?.tierLabel}>{tier.label}</span>
|
|
124
|
+
<span className={classes?.tierValue}>Credit Card Fee + {tier.fee}</span>
|
|
118
125
|
</div>
|
|
119
126
|
);
|
|
120
127
|
})
|
|
@@ -131,12 +138,15 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
131
138
|
<div
|
|
132
139
|
key={idx}
|
|
133
140
|
className={cn(
|
|
134
|
-
|
|
135
|
-
|
|
141
|
+
isCurrentTier
|
|
142
|
+
? classes?.tierRowActive ||
|
|
143
|
+
"bg-as-brand/10 text-as-brand flex items-center justify-between rounded-lg px-3 py-2.5 text-sm font-semibold transition-colors"
|
|
144
|
+
: classes?.tierRow ||
|
|
145
|
+
"text-as-primary/60 flex items-center justify-between rounded-lg px-3 py-2.5 text-sm transition-colors",
|
|
136
146
|
)}
|
|
137
147
|
>
|
|
138
|
-
<span>{tier.label}</span>
|
|
139
|
-
<span>{bpsToPercent(tier.bps)}%</span>
|
|
148
|
+
<span className={classes?.tierLabel}>{tier.label}</span>
|
|
149
|
+
<span className={classes?.tierValue}>{bpsToPercent(tier.bps)}%</span>
|
|
140
150
|
</div>
|
|
141
151
|
);
|
|
142
152
|
})}
|
|
@@ -154,7 +164,10 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
154
164
|
return (
|
|
155
165
|
<button
|
|
156
166
|
onClick={() => setShowAllFeeTiers(!showAllFeeTiers)}
|
|
157
|
-
className=
|
|
167
|
+
className={
|
|
168
|
+
classes?.expandButton ||
|
|
169
|
+
"text-as-primary/60 hover:text-as-primary mt-2 flex w-full items-center justify-center gap-1 text-xs transition-colors"
|
|
170
|
+
}
|
|
158
171
|
>
|
|
159
172
|
<span>{showAllFeeTiers ? "Show less" : "Show higher tiers"}</span>
|
|
160
173
|
<ChevronDown className={cn("h-3.5 w-3.5 transition-transform", showAllFeeTiers && "rotate-180")} />
|
|
@@ -237,11 +250,17 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
237
250
|
|
|
238
251
|
{/* Transaction Summary */}
|
|
239
252
|
{transactionAmountUsd && (
|
|
240
|
-
<div
|
|
253
|
+
<div
|
|
254
|
+
className={
|
|
255
|
+
classes?.summaryCard || "bg-as-surface-secondary border-as-border-secondary rounded-2xl border p-4"
|
|
256
|
+
}
|
|
257
|
+
>
|
|
241
258
|
<div className="space-y-2 text-sm">
|
|
242
|
-
<div className="flex items-center justify-between">
|
|
243
|
-
<span className="text-as-secondary">Transaction</span>
|
|
244
|
-
<span className="text-as-primary font-semibold"
|
|
259
|
+
<div className={classes?.summaryRow || "flex items-center justify-between"}>
|
|
260
|
+
<span className={classes?.summaryLabel || "text-as-secondary"}>Transaction</span>
|
|
261
|
+
<span className={classes?.summaryValue || "text-as-primary font-semibold"}>
|
|
262
|
+
${transactionAmountUsd.toFixed(2)}
|
|
263
|
+
</span>
|
|
245
264
|
</div>
|
|
246
265
|
|
|
247
266
|
{isStripeFee && (
|
|
@@ -267,10 +286,10 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
267
286
|
)}
|
|
268
287
|
</span>
|
|
269
288
|
</div>
|
|
270
|
-
<div className="border-as-border-secondary border-t pt-2">
|
|
271
|
-
<div className="flex items-center justify-between">
|
|
272
|
-
<span className="text-as-primary font-semibold">Total Fee</span>
|
|
273
|
-
<span className="text-as-brand font-semibold">
|
|
289
|
+
<div className={classes?.summaryDivider || "border-as-border-secondary border-t pt-2"}>
|
|
290
|
+
<div className={classes?.totalRow || "flex items-center justify-between"}>
|
|
291
|
+
<span className={classes?.totalLabel || "text-as-primary font-semibold"}>Total Fee</span>
|
|
292
|
+
<span className={classes?.totalValue || "text-as-brand font-semibold"}>
|
|
274
293
|
${((transactionAmountUsd * (fee.finalFeeBps || 0)) / 10000 + (fee.finalFeeUsd || 0)).toFixed(2)}
|
|
275
294
|
</span>
|
|
276
295
|
</div>
|
|
@@ -280,15 +299,17 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
280
299
|
|
|
281
300
|
{!isStripeFee && currentCryptoTier && (
|
|
282
301
|
<>
|
|
283
|
-
<div className="flex items-center justify-between">
|
|
284
|
-
<span className="text-as-secondary"
|
|
285
|
-
|
|
302
|
+
<div className={classes?.summaryRow || "flex items-center justify-between"}>
|
|
303
|
+
<span className={classes?.summaryLabel || "text-as-secondary"}>
|
|
304
|
+
Base Fee ({bpsToPercent(currentCryptoTier.bps)}%)
|
|
305
|
+
</span>
|
|
306
|
+
<span className={classes?.summaryValue || "text-as-primary font-medium"}>
|
|
286
307
|
${((transactionAmountUsd * currentCryptoTier.bps) / 10000).toFixed(2)}
|
|
287
308
|
</span>
|
|
288
309
|
</div>
|
|
289
310
|
|
|
290
311
|
{hasWhaleDiscount && currentWhaleTier && (
|
|
291
|
-
<div className="flex items-center justify-between">
|
|
312
|
+
<div className={classes?.summaryRow || "flex items-center justify-between"}>
|
|
292
313
|
<span className="text-green-600">Discount ({currentWhaleTier.discountPercent}% off)</span>
|
|
293
314
|
<span className="font-medium text-green-600">
|
|
294
315
|
-$
|
|
@@ -298,7 +319,7 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
298
319
|
)}
|
|
299
320
|
|
|
300
321
|
{hasPartnerDiscount && (
|
|
301
|
-
<div className="flex items-center justify-between">
|
|
322
|
+
<div className={classes?.summaryRow || "flex items-center justify-between"}>
|
|
302
323
|
<span className="text-green-600">Partner Discount ({partnerDiscountPercent}% off)</span>
|
|
303
324
|
<span className="font-medium text-green-600">
|
|
304
325
|
-${((transactionAmountUsd * baseFee * partnerDiscountPercent) / 100 / 10000).toFixed(2)}
|
|
@@ -306,10 +327,10 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
306
327
|
</div>
|
|
307
328
|
)}
|
|
308
329
|
|
|
309
|
-
<div className="border-as-border-secondary border-t pt-2">
|
|
310
|
-
<div className="flex items-center justify-between">
|
|
311
|
-
<span className="text-as-primary font-semibold">Total Fee</span>
|
|
312
|
-
<span className="text-as-brand font-semibold">
|
|
330
|
+
<div className={classes?.summaryDivider || "border-as-border-secondary border-t pt-2"}>
|
|
331
|
+
<div className={classes?.totalRow || "flex items-center justify-between"}>
|
|
332
|
+
<span className={classes?.totalLabel || "text-as-primary font-semibold"}>Total Fee</span>
|
|
333
|
+
<span className={classes?.totalValue || "text-as-brand font-semibold"}>
|
|
313
334
|
${((transactionAmountUsd * fee.finalFeeBps) / 10000).toFixed(2)}
|
|
314
335
|
</span>
|
|
315
336
|
</div>
|
|
@@ -323,7 +344,7 @@ export function FeeDetailPanel({ fee, transactionAmountUsd, onBack }: FeeDetailP
|
|
|
323
344
|
<ShinyButton
|
|
324
345
|
accentColor={"hsl(var(--as-brand))"}
|
|
325
346
|
onClick={onBack}
|
|
326
|
-
className={cn("as-main-button !bg-as-brand relative w-full")}
|
|
347
|
+
className={classes?.backButton || cn("as-main-button !bg-as-brand relative w-full")}
|
|
327
348
|
textClassName={cn("text-white")}
|
|
328
349
|
>
|
|
329
350
|
Back to {isStripeFee ? "Payment" : "Swap"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useGeoOnrampOptions } from "@b3dotfun/sdk/anyspend/react";
|
|
4
4
|
import { cn } from "@b3dotfun/sdk/shared/utils/cn";
|
|
5
5
|
import { ChevronLeft, ChevronRight, Loader2 } from "lucide-react";
|
|
6
|
+
import type { FiatPaymentMethodClasses } from "../types/classes";
|
|
6
7
|
|
|
7
8
|
export enum FiatPaymentMethod {
|
|
8
9
|
NONE = "none",
|
|
@@ -25,6 +26,7 @@ interface FiatPaymentMethodProps {
|
|
|
25
26
|
onBack: () => void;
|
|
26
27
|
onSelectPaymentMethod: (method: FiatPaymentMethod) => void;
|
|
27
28
|
srcAmountOnRamp: string;
|
|
29
|
+
classes?: FiatPaymentMethodClasses;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
export function FiatPaymentMethodComponent({
|
|
@@ -33,6 +35,7 @@ export function FiatPaymentMethodComponent({
|
|
|
33
35
|
onBack,
|
|
34
36
|
onSelectPaymentMethod,
|
|
35
37
|
srcAmountOnRamp,
|
|
38
|
+
classes,
|
|
36
39
|
}: FiatPaymentMethodProps) {
|
|
37
40
|
// Load geo-based onramp options like in PanelOnramp
|
|
38
41
|
const {
|
|
@@ -107,12 +110,15 @@ export function FiatPaymentMethodComponent({
|
|
|
107
110
|
// Show loading state while checking geo availability
|
|
108
111
|
if (isLoadingGeoOnramp) {
|
|
109
112
|
return (
|
|
110
|
-
<div className="fiat-payment-method mx-auto w-[460px] max-w-full p-5">
|
|
113
|
+
<div className={classes?.container || "fiat-payment-method mx-auto w-[460px] max-w-full p-5"}>
|
|
111
114
|
<div className="flex flex-col gap-6">
|
|
112
|
-
<div className="flex items-center gap-4">
|
|
115
|
+
<div className={classes?.header || "flex items-center gap-4"}>
|
|
113
116
|
<button
|
|
114
117
|
onClick={onBack}
|
|
115
|
-
className=
|
|
118
|
+
className={
|
|
119
|
+
classes?.backButton ||
|
|
120
|
+
"text-as-quaternary hover:text-as-primary flex h-8 w-8 items-center justify-center rounded-lg transition-colors"
|
|
121
|
+
}
|
|
116
122
|
>
|
|
117
123
|
<ChevronLeft className="h-6 w-6" />
|
|
118
124
|
</button>
|
|
@@ -130,13 +136,16 @@ export function FiatPaymentMethodComponent({
|
|
|
130
136
|
}
|
|
131
137
|
|
|
132
138
|
return (
|
|
133
|
-
<div className="fiat-payment-method mx-auto w-[460px] max-w-full p-5">
|
|
139
|
+
<div className={classes?.container || "fiat-payment-method mx-auto w-[460px] max-w-full p-5"}>
|
|
134
140
|
<div className="flex flex-col gap-6">
|
|
135
141
|
{/* Header */}
|
|
136
|
-
<div className="flex items-center gap-4">
|
|
142
|
+
<div className={classes?.header || "flex items-center gap-4"}>
|
|
137
143
|
<button
|
|
138
144
|
onClick={onBack}
|
|
139
|
-
className=
|
|
145
|
+
className={
|
|
146
|
+
classes?.backButton ||
|
|
147
|
+
"text-as-quaternary hover:text-as-primary flex h-8 w-8 items-center justify-center rounded-lg transition-colors"
|
|
148
|
+
}
|
|
140
149
|
>
|
|
141
150
|
<ChevronLeft className="h-6 w-6" />
|
|
142
151
|
</button>
|
|
@@ -146,7 +155,7 @@ export function FiatPaymentMethodComponent({
|
|
|
146
155
|
</div>
|
|
147
156
|
|
|
148
157
|
{/* Payment Methods */}
|
|
149
|
-
<div className="flex flex-col gap-3">
|
|
158
|
+
<div className={classes?.optionsList || "flex flex-col gap-3"}>
|
|
150
159
|
{availablePaymentMethods.length === 0 ? (
|
|
151
160
|
<div className="fiat-payment-method-no-methods bg-as-surface-secondary border-as-border-secondary rounded-2xl border p-6 text-center">
|
|
152
161
|
<p className="text-as-secondary text-sm">
|
|
@@ -161,12 +170,16 @@ export function FiatPaymentMethodComponent({
|
|
|
161
170
|
setSelectedPaymentMethod(method.id);
|
|
162
171
|
onSelectPaymentMethod(method.id);
|
|
163
172
|
}}
|
|
164
|
-
className={
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
173
|
+
className={
|
|
174
|
+
(selectedPaymentMethod === method.id && classes?.optionItemActive) ||
|
|
175
|
+
classes?.optionItem ||
|
|
176
|
+
cn(
|
|
177
|
+
"fiat-payment-method-item bg-as-surface-secondary border-as-border-secondary flex w-full items-center gap-4 rounded-2xl border p-4 transition-all duration-200",
|
|
178
|
+
selectedPaymentMethod === method.id
|
|
179
|
+
? "border-as-brand bg-as-brand/10"
|
|
180
|
+
: "hover:border-as-brand/50 hover:bg-as-brand/5",
|
|
181
|
+
)
|
|
182
|
+
}
|
|
170
183
|
>
|
|
171
184
|
{/* Icon - matching PanelOnramp style */}
|
|
172
185
|
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-blue-600 text-2xl text-white">
|
|
@@ -43,6 +43,7 @@ import { encodeFunctionData, erc20Abi } from "viem";
|
|
|
43
43
|
import { b3 } from "viem/chains";
|
|
44
44
|
import { useWaitForTransactionReceipt, useWalletClient } from "wagmi";
|
|
45
45
|
import { usePhantomTransfer } from "../../hooks/usePhantomTransfer";
|
|
46
|
+
import type { OrderDetailsClasses } from "../types/classes";
|
|
46
47
|
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "./Accordion";
|
|
47
48
|
import ConnectWalletPayment from "./ConnectWalletPayment";
|
|
48
49
|
import { CryptoPaymentMethodType } from "./CryptoPaymentMethod";
|
|
@@ -69,6 +70,8 @@ interface OrderDetailsProps {
|
|
|
69
70
|
returnToHomeUrl?: string;
|
|
70
71
|
/** Custom label for the return home button (overrides "Return to Home" / "Close") */
|
|
71
72
|
returnHomeLabel?: string;
|
|
73
|
+
/** Custom class names for styling specific elements */
|
|
74
|
+
classes?: OrderDetailsClasses;
|
|
72
75
|
}
|
|
73
76
|
|
|
74
77
|
// Add this helper function near the top or just above the component
|
|
@@ -223,6 +226,7 @@ export const OrderDetails = memo(function OrderDetails({
|
|
|
223
226
|
points,
|
|
224
227
|
returnToHomeUrl,
|
|
225
228
|
returnHomeLabel,
|
|
229
|
+
classes,
|
|
226
230
|
}: OrderDetailsProps) {
|
|
227
231
|
const router = useRouter();
|
|
228
232
|
const searchParams = useSearchParams();
|
|
@@ -411,7 +415,10 @@ export const OrderDetails = memo(function OrderDetails({
|
|
|
411
415
|
// Reusable "Return to Home" / "Close" button
|
|
412
416
|
const returnHomeOrCloseButton = (
|
|
413
417
|
<button
|
|
414
|
-
className=
|
|
418
|
+
className={
|
|
419
|
+
classes?.returnButton ||
|
|
420
|
+
"order-close-button order-details-close-btn bg-as-brand flex w-full items-center justify-center gap-2 rounded-lg p-2 font-semibold text-white"
|
|
421
|
+
}
|
|
415
422
|
onClick={returnToHomeUrl ? handleReturnToHome : mode === "page" ? handleBack : handleCloseModal}
|
|
416
423
|
>
|
|
417
424
|
{returnHomeLabel ? (
|
|
@@ -918,7 +925,10 @@ export const OrderDetails = memo(function OrderDetails({
|
|
|
918
925
|
|
|
919
926
|
{/* <DelayedSupportMessage /> */}
|
|
920
927
|
<button
|
|
921
|
-
className=
|
|
928
|
+
className={
|
|
929
|
+
classes?.backButton ||
|
|
930
|
+
"text-b3-primary-blue hover:text-b3-primary-blue/50 order-details-cancel-btn flex w-full items-center justify-center gap-2 underline"
|
|
931
|
+
}
|
|
922
932
|
onClick={handleBack}
|
|
923
933
|
>
|
|
924
934
|
<RefreshCcw className="ml-2 h-4 w-4" /> Cancel and start over
|
|
@@ -1125,7 +1135,10 @@ export const OrderDetails = memo(function OrderDetails({
|
|
|
1125
1135
|
)}
|
|
1126
1136
|
|
|
1127
1137
|
<button
|
|
1128
|
-
className=
|
|
1138
|
+
className={
|
|
1139
|
+
classes?.backButton ||
|
|
1140
|
+
"text-b3-primary-blue hover:text-b3-primary-blue/50 order-details-cancel-btn flex w-full items-center justify-center gap-2 underline"
|
|
1141
|
+
}
|
|
1129
1142
|
onClick={handleBack}
|
|
1130
1143
|
>
|
|
1131
1144
|
<RefreshCcw className="ml-2 h-4 w-4" /> Cancel and start over
|
|
@@ -12,6 +12,7 @@ import { motion } from "motion/react";
|
|
|
12
12
|
import { memo, useState } from "react";
|
|
13
13
|
|
|
14
14
|
import { b3 } from "viem/chains";
|
|
15
|
+
import type { OrderDetailsCollapsibleClasses } from "../types/classes";
|
|
15
16
|
|
|
16
17
|
type Order = components["schemas"]["Order"];
|
|
17
18
|
type Token = components["schemas"]["Token"];
|
|
@@ -31,6 +32,7 @@ interface OrderDetailsCollapsibleProps {
|
|
|
31
32
|
points?: number;
|
|
32
33
|
isOpen?: boolean;
|
|
33
34
|
onOpenChange?: (isOpen: boolean) => void;
|
|
35
|
+
classes?: OrderDetailsCollapsibleClasses;
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
export const OrderDetailsCollapsible = memo(function OrderDetailsCollapsible({
|
|
@@ -46,6 +48,7 @@ export const OrderDetailsCollapsible = memo(function OrderDetailsCollapsible({
|
|
|
46
48
|
points,
|
|
47
49
|
isOpen,
|
|
48
50
|
onOpenChange,
|
|
51
|
+
classes,
|
|
49
52
|
}: OrderDetailsCollapsibleProps) {
|
|
50
53
|
const [internalOpen, setInternalOpen] = useState(true);
|
|
51
54
|
|
|
@@ -69,7 +72,8 @@ export const OrderDetailsCollapsible = memo(function OrderDetailsCollapsible({
|
|
|
69
72
|
return (
|
|
70
73
|
<div
|
|
71
74
|
className={cn(
|
|
72
|
-
|
|
75
|
+
classes?.container ||
|
|
76
|
+
"order-details-collapsible bg-as-surface-secondary border-as-border-secondary rounded-xl border px-4 py-2",
|
|
73
77
|
className,
|
|
74
78
|
)}
|
|
75
79
|
>
|
|
@@ -13,7 +13,8 @@ interface OrderHistoryProps {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export function OrderHistory({ mode, onBack, onSelectOrder }: OrderHistoryProps) {
|
|
16
|
-
const { address } = useAccountWallet();
|
|
16
|
+
const { connectedEOAWallet, address: smartWalletAddress } = useAccountWallet();
|
|
17
|
+
const address = connectedEOAWallet?.getAccount()?.address || smartWalletAddress;
|
|
17
18
|
const { orderHistory, isLoadingOrderHistory, refetchOrderHistory } = useAnyspendOrderHistory(address);
|
|
18
19
|
|
|
19
20
|
return (
|
|
@@ -11,6 +11,7 @@ import { useRef } from "react";
|
|
|
11
11
|
import { FIAT_PAYMENT_METHOD_DISPLAY, FiatPaymentMethod } from "./FiatPaymentMethod";
|
|
12
12
|
import { OrderTokenAmountFiat } from "./OrderTokenAmountFiat";
|
|
13
13
|
import { PointsBadge } from "./PointsBadge";
|
|
14
|
+
import type { PanelOnrampClasses } from "../types/classes";
|
|
14
15
|
|
|
15
16
|
const ONE_CHAR_WIDTH = 30;
|
|
16
17
|
|
|
@@ -34,6 +35,7 @@ export function PanelOnramp({
|
|
|
34
35
|
onShowFeeDetail,
|
|
35
36
|
customUsdInputValues = ["5", "10", "20", "25"],
|
|
36
37
|
customRecipientLabel,
|
|
38
|
+
classes,
|
|
37
39
|
}: {
|
|
38
40
|
srcAmountOnRamp: string;
|
|
39
41
|
setSrcAmountOnRamp: (amount: string) => void;
|
|
@@ -55,6 +57,7 @@ export function PanelOnramp({
|
|
|
55
57
|
customUsdInputValues?: string[];
|
|
56
58
|
/** Custom label for recipient display (overrides recipientName) */
|
|
57
59
|
customRecipientLabel?: string;
|
|
60
|
+
classes?: PanelOnrampClasses;
|
|
58
61
|
}) {
|
|
59
62
|
// Helper function to get fees from anyspend quote
|
|
60
63
|
const getFeeFromApi = (paymentMethod: FiatPaymentMethod): number | null => {
|
|
@@ -135,7 +138,7 @@ export function PanelOnramp({
|
|
|
135
138
|
};
|
|
136
139
|
|
|
137
140
|
return (
|
|
138
|
-
<div className="panel-onramp bg-as-surface-primary flex w-full flex-col">
|
|
141
|
+
<div className={classes?.container || "panel-onramp bg-as-surface-primary flex w-full flex-col"}>
|
|
139
142
|
{/* Pay Section */}
|
|
140
143
|
<div className="border-as-border-secondary bg-as-surface-secondary relative flex w-full flex-col rounded-2xl border p-4">
|
|
141
144
|
<div className="flex h-7 w-full items-center justify-between">
|