@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.
Files changed (126) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.d.ts +3 -0
  2. package/dist/cjs/anyspend/react/components/AnySpend.js +12 -6
  3. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -0
  4. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +10 -4
  5. package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +4 -1
  6. package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +19 -4
  7. package/dist/cjs/anyspend/react/components/QRDeposit.d.ts +4 -1
  8. package/dist/cjs/anyspend/react/components/QRDeposit.js +12 -4
  9. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  10. package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +7 -5
  11. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
  12. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
  13. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  14. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
  15. package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
  16. package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.js +15 -6
  17. package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
  18. package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
  19. package/dist/cjs/anyspend/react/components/common/OrderDetails.d.ts +3 -0
  20. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +7 -4
  21. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
  22. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +3 -2
  23. package/dist/cjs/anyspend/react/components/common/OrderHistory.js +2 -1
  24. package/dist/cjs/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  25. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +2 -2
  26. package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
  27. package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
  28. package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
  29. package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.js +3 -2
  30. package/dist/cjs/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
  31. package/dist/cjs/anyspend/react/components/common/RecipientSelection.js +5 -2
  32. package/dist/cjs/anyspend/react/components/common/TabSection.d.ts +3 -1
  33. package/dist/cjs/anyspend/react/components/common/TabSection.js +16 -7
  34. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
  35. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
  36. package/dist/cjs/anyspend/react/components/common/WarningText.d.ts +8 -7
  37. package/dist/cjs/anyspend/react/components/common/WarningText.js +5 -6
  38. package/dist/cjs/anyspend/react/components/index.d.ts +1 -0
  39. package/dist/cjs/anyspend/react/components/types/classes.d.ts +390 -0
  40. package/dist/cjs/anyspend/react/components/types/classes.js +6 -0
  41. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +3 -0
  42. package/dist/esm/anyspend/react/components/AnySpend.d.ts +3 -0
  43. package/dist/esm/anyspend/react/components/AnySpend.js +12 -6
  44. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -0
  45. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +10 -4
  46. package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +4 -1
  47. package/dist/esm/anyspend/react/components/AnySpendDeposit.js +19 -4
  48. package/dist/esm/anyspend/react/components/QRDeposit.d.ts +4 -1
  49. package/dist/esm/anyspend/react/components/QRDeposit.js +12 -4
  50. package/dist/esm/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  51. package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +7 -5
  52. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
  53. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
  54. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  55. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
  56. package/dist/esm/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
  57. package/dist/esm/anyspend/react/components/common/FeeDetailPanel.js +15 -6
  58. package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
  59. package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
  60. package/dist/esm/anyspend/react/components/common/OrderDetails.d.ts +3 -0
  61. package/dist/esm/anyspend/react/components/common/OrderDetails.js +7 -4
  62. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
  63. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +3 -2
  64. package/dist/esm/anyspend/react/components/common/OrderHistory.js +2 -1
  65. package/dist/esm/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  66. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +2 -2
  67. package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
  68. package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
  69. package/dist/esm/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
  70. package/dist/esm/anyspend/react/components/common/PointsDetailPanel.js +3 -2
  71. package/dist/esm/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
  72. package/dist/esm/anyspend/react/components/common/RecipientSelection.js +5 -2
  73. package/dist/esm/anyspend/react/components/common/TabSection.d.ts +3 -1
  74. package/dist/esm/anyspend/react/components/common/TabSection.js +16 -7
  75. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
  76. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
  77. package/dist/esm/anyspend/react/components/common/WarningText.d.ts +8 -7
  78. package/dist/esm/anyspend/react/components/common/WarningText.js +5 -6
  79. package/dist/esm/anyspend/react/components/index.d.ts +1 -0
  80. package/dist/esm/anyspend/react/components/types/classes.d.ts +390 -0
  81. package/dist/esm/anyspend/react/components/types/classes.js +5 -0
  82. package/dist/esm/global-account/react/stores/useModalStore.d.ts +3 -0
  83. package/dist/types/anyspend/react/components/AnySpend.d.ts +3 -0
  84. package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +3 -0
  85. package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +4 -1
  86. package/dist/types/anyspend/react/components/QRDeposit.d.ts +4 -1
  87. package/dist/types/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
  88. package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
  89. package/dist/types/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  90. package/dist/types/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
  91. package/dist/types/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
  92. package/dist/types/anyspend/react/components/common/OrderDetails.d.ts +3 -0
  93. package/dist/types/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
  94. package/dist/types/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  95. package/dist/types/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
  96. package/dist/types/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
  97. package/dist/types/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
  98. package/dist/types/anyspend/react/components/common/TabSection.d.ts +3 -1
  99. package/dist/types/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
  100. package/dist/types/anyspend/react/components/common/WarningText.d.ts +8 -7
  101. package/dist/types/anyspend/react/components/index.d.ts +1 -0
  102. package/dist/types/anyspend/react/components/types/classes.d.ts +390 -0
  103. package/dist/types/global-account/react/stores/useModalStore.d.ts +3 -0
  104. package/package.json +1 -1
  105. package/src/anyspend/react/components/AnySpend.tsx +41 -20
  106. package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +31 -13
  107. package/src/anyspend/react/components/AnySpendDeposit.tsx +171 -52
  108. package/src/anyspend/react/components/QRDeposit.tsx +91 -35
  109. package/src/anyspend/react/components/common/CryptoPaySection.tsx +31 -19
  110. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +14 -4
  111. package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +43 -23
  112. package/src/anyspend/react/components/common/FeeDetailPanel.tsx +53 -32
  113. package/src/anyspend/react/components/common/FiatPaymentMethod.tsx +26 -13
  114. package/src/anyspend/react/components/common/OrderDetails.tsx +16 -3
  115. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +5 -1
  116. package/src/anyspend/react/components/common/OrderHistory.tsx +2 -1
  117. package/src/anyspend/react/components/common/PanelOnramp.tsx +4 -1
  118. package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +118 -40
  119. package/src/anyspend/react/components/common/PointsDetailPanel.tsx +28 -14
  120. package/src/anyspend/react/components/common/RecipientSelection.tsx +20 -5
  121. package/src/anyspend/react/components/common/TabSection.tsx +21 -12
  122. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +12 -4
  123. package/src/anyspend/react/components/common/WarningText.tsx +10 -10
  124. package/src/anyspend/react/components/index.ts +16 -0
  125. package/src/anyspend/react/components/types/classes.ts +476 -0
  126. 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 className="bg-as-surface-secondary border-as-border-secondary rounded-2xl border p-4">
94
- <h4 className="text-as-primary mb-3 text-sm font-semibold">
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
- "flex items-center justify-between rounded-lg px-3 py-2.5 text-sm transition-colors",
113
- isCurrentTier ? "bg-as-brand/10 text-as-brand font-semibold" : "text-as-primary/60",
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
- "flex items-center justify-between rounded-lg px-3 py-2.5 text-sm transition-colors",
135
- isCurrentTier ? "bg-as-brand/10 text-as-brand font-semibold" : "text-as-primary/60",
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="text-as-primary/60 hover:text-as-primary mt-2 flex w-full items-center justify-center gap-1 text-xs transition-colors"
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 className="bg-as-surface-secondary border-as-border-secondary rounded-2xl border p-4">
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">${transactionAmountUsd.toFixed(2)}</span>
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">Base Fee ({bpsToPercent(currentCryptoTier.bps)}%)</span>
285
- <span className="text-as-primary font-medium">
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="text-as-quaternary hover:text-as-primary flex h-8 w-8 items-center justify-center rounded-lg transition-colors"
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="text-as-quaternary hover:text-as-primary flex h-8 w-8 items-center justify-center rounded-lg transition-colors"
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={cn(
165
- "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",
166
- selectedPaymentMethod === method.id
167
- ? "border-as-brand bg-as-brand/10"
168
- : "hover:border-as-brand/50 hover:bg-as-brand/5",
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="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"
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="text-b3-primary-blue hover:text-b3-primary-blue/50 order-details-cancel-btn flex w-full items-center justify-center gap-2 underline"
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="text-b3-primary-blue hover:text-b3-primary-blue/50 order-details-cancel-btn flex w-full items-center justify-center gap-2 underline"
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
- "order-details-collapsible bg-as-surface-secondary border-as-border-secondary rounded-xl border px-4 py-2",
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">