@rhinestone/deposit-modal 0.3.0-alpha.2 → 0.3.0-alpha.3
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/{DepositModalReown-VFTXYG2B.mjs → DepositModalReown-6QBOLFNL.mjs} +2 -2
- package/dist/{DepositModalReown-B2XLFH4Z.cjs → DepositModalReown-DVRWDPYV.cjs} +3 -3
- package/dist/{WithdrawModalReown-K52AK53K.cjs → WithdrawModalReown-KGFCNAJP.cjs} +3 -3
- package/dist/{WithdrawModalReown-BDJFCWWM.mjs → WithdrawModalReown-UO7XCJ7K.mjs} +2 -2
- package/dist/{chunk-TWA3SXVV.mjs → chunk-GE3TMZEL.mjs} +17 -291
- package/dist/{chunk-BLAGBBMP.cjs → chunk-IATY2C5R.cjs} +1738 -764
- package/dist/{chunk-AHSVY7AE.mjs → chunk-QLTTDVFU.mjs} +1947 -973
- package/dist/{chunk-XKDZEIB7.mjs → chunk-TFXIQ7YH.mjs} +547 -192
- package/dist/{chunk-ZMNFBFIR.cjs → chunk-UEYFJM5Y.cjs} +69 -343
- package/dist/{chunk-FTMCKJM4.cjs → chunk-V6NJIPSS.cjs} +510 -155
- package/dist/deposit.cjs +3 -3
- package/dist/deposit.d.cts +2 -2
- package/dist/deposit.d.ts +2 -2
- package/dist/deposit.mjs +2 -2
- package/dist/index.cjs +4 -4
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +3 -3
- package/dist/styles.css +13 -1
- package/dist/{types-DRou84ZM.d.cts → types-xSHZSlrT.d.cts} +16 -1
- package/dist/{types-DRou84ZM.d.ts → types-xSHZSlrT.d.ts} +16 -1
- package/dist/withdraw.cjs +3 -3
- package/dist/withdraw.d.cts +2 -2
- package/dist/withdraw.d.ts +2 -2
- package/dist/withdraw.mjs +2 -2
- package/package.json +1 -1
|
@@ -1227,8 +1227,38 @@ function PoweredBy() {
|
|
|
1227
1227
|
}
|
|
1228
1228
|
PoweredBy.displayName = "PoweredBy";
|
|
1229
1229
|
|
|
1230
|
-
// src/components/ui/
|
|
1230
|
+
// src/components/ui/Spinner.tsx
|
|
1231
1231
|
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
1232
|
+
function Spinner({ className }) {
|
|
1233
|
+
return /* @__PURE__ */ jsxs3(
|
|
1234
|
+
"svg",
|
|
1235
|
+
{
|
|
1236
|
+
className: `rs-spinner ${className || ""}`,
|
|
1237
|
+
fill: "none",
|
|
1238
|
+
viewBox: "0 0 20 21",
|
|
1239
|
+
children: [
|
|
1240
|
+
/* @__PURE__ */ jsx4(
|
|
1241
|
+
"path",
|
|
1242
|
+
{
|
|
1243
|
+
d: "M10 0.5C8.02219 0.5 6.08879 1.08649 4.4443 2.1853C2.79981 3.28412 1.51809 4.8459 0.761209 6.67316C0.00433288 8.50043 -0.1937 10.5111 0.192152 12.4509C0.578004 14.3907 1.53041 16.1725 2.92894 17.5711C4.32746 18.9696 6.10929 19.922 8.0491 20.3078C9.98891 20.6937 11.9996 20.4957 13.8268 19.7388C15.6541 18.9819 17.2159 17.7002 18.3147 16.0557C19.4135 14.4112 20 12.4778 20 10.5C20 7.84783 18.9464 5.3043 17.0711 3.42893C15.1957 1.55357 12.6522 0.5 10 0.5ZM10 17.7727C8.56159 17.7727 7.15549 17.3462 5.95949 16.547C4.7635 15.7479 3.83134 14.6121 3.28088 13.2831C2.73042 11.9542 2.5864 10.4919 2.86702 9.08116C3.14764 7.67039 3.8403 6.37451 4.85741 5.3574C5.87452 4.3403 7.17039 3.64764 8.58116 3.36702C9.99193 3.0864 11.4542 3.23042 12.7832 3.78088C14.1121 4.33133 15.2479 5.26349 16.0471 6.45949C16.8462 7.65548 17.2727 9.06159 17.2727 10.5C17.2727 12.4288 16.5065 14.2787 15.1426 15.6426C13.7787 17.0065 11.9288 17.7727 10 17.7727Z",
|
|
1244
|
+
fill: "currentColor",
|
|
1245
|
+
opacity: 0.3
|
|
1246
|
+
}
|
|
1247
|
+
),
|
|
1248
|
+
/* @__PURE__ */ jsx4(
|
|
1249
|
+
"path",
|
|
1250
|
+
{
|
|
1251
|
+
d: "M10 3.22767C11.7423 3.22846 13.4276 3.8412 14.7556 4.95667C16.0837 6.07214 16.9681 7.61784 17.2512 9.31825C17.3012 9.64364 17.4662 9.94096 17.7169 10.1573C17.9677 10.3737 18.2878 10.4951 18.6205 10.5C18.8211 10.5001 19.0193 10.457 19.2012 10.3735C19.3832 10.2901 19.5445 10.1684 19.674 10.017C19.8036 9.86549 19.8981 9.68789 19.9511 9.49656C20.004 9.30523 20.0141 9.10478 19.9807 8.90918C19.5986 6.56305 18.3843 4.42821 16.5554 2.88726C14.7265 1.34631 12.4025 0.5 10 0.5C7.59751 0.5 5.27354 1.34631 3.44461 2.88726C1.61569 4.42821 0.401366 6.56305 0.0192815 8.90918C-0.0141442 9.10478 -0.00402016 9.30523 0.0489472 9.49656C0.101914 9.68789 0.196449 9.86549 0.325956 10.017C0.455463 10.1684 0.616823 10.2901 0.798778 10.3735C0.980732 10.457 1.1789 10.5001 1.37945 10.5C1.71216 10.4951 2.03235 10.3737 2.28307 10.1573C2.5338 9.94096 2.69883 9.64364 2.74882 9.31825C3.03193 7.61784 3.91633 6.07214 5.24436 4.95667C6.57239 3.8412 8.25775 3.22846 10 3.22767Z",
|
|
1252
|
+
fill: "currentColor"
|
|
1253
|
+
}
|
|
1254
|
+
)
|
|
1255
|
+
]
|
|
1256
|
+
}
|
|
1257
|
+
);
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
// src/components/ui/ListRow.tsx
|
|
1261
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1232
1262
|
function ListRow({
|
|
1233
1263
|
leading,
|
|
1234
1264
|
leadingMedia,
|
|
@@ -1239,22 +1269,22 @@ function ListRow({
|
|
|
1239
1269
|
className = "",
|
|
1240
1270
|
...props
|
|
1241
1271
|
}) {
|
|
1242
|
-
return /* @__PURE__ */
|
|
1272
|
+
return /* @__PURE__ */ jsxs4(
|
|
1243
1273
|
"button",
|
|
1244
1274
|
{
|
|
1245
1275
|
type: "button",
|
|
1246
1276
|
className: `rs-list-row ${className}`.trim(),
|
|
1247
1277
|
...props,
|
|
1248
1278
|
children: [
|
|
1249
|
-
leadingMedia ? /* @__PURE__ */
|
|
1250
|
-
/* @__PURE__ */
|
|
1251
|
-
/* @__PURE__ */
|
|
1252
|
-
/* @__PURE__ */
|
|
1253
|
-
subtitle && /* @__PURE__ */
|
|
1279
|
+
leadingMedia ? /* @__PURE__ */ jsx5("span", { className: "rs-list-row-leading rs-list-row-leading--media", children: /* @__PURE__ */ jsx5("img", { src: leadingMedia, alt: "" }) }) : leading ? /* @__PURE__ */ jsx5("span", { className: "rs-list-row-leading", children: leading }) : null,
|
|
1280
|
+
/* @__PURE__ */ jsxs4("div", { className: "rs-list-row-body", children: [
|
|
1281
|
+
/* @__PURE__ */ jsxs4("div", { className: "rs-list-row-text", children: [
|
|
1282
|
+
/* @__PURE__ */ jsx5("span", { className: "rs-list-row-title", children: title }),
|
|
1283
|
+
subtitle && /* @__PURE__ */ jsx5("span", { className: "rs-list-row-subtitle", children: subtitle })
|
|
1254
1284
|
] }),
|
|
1255
|
-
meta && /* @__PURE__ */
|
|
1285
|
+
meta && /* @__PURE__ */ jsx5("div", { className: "rs-list-row-meta", children: meta })
|
|
1256
1286
|
] }),
|
|
1257
|
-
/* @__PURE__ */
|
|
1287
|
+
/* @__PURE__ */ jsx5("span", { className: "rs-list-row-chevron", children: trailing ?? /* @__PURE__ */ jsx5(ChevronRightIcon, {}) })
|
|
1258
1288
|
]
|
|
1259
1289
|
}
|
|
1260
1290
|
);
|
|
@@ -1262,10 +1292,10 @@ function ListRow({
|
|
|
1262
1292
|
ListRow.displayName = "ListRow";
|
|
1263
1293
|
|
|
1264
1294
|
// src/components/ui/WalletBadgeIcons.tsx
|
|
1265
|
-
import { jsx as
|
|
1266
|
-
var RabbyIcon = () => /* @__PURE__ */
|
|
1267
|
-
/* @__PURE__ */
|
|
1268
|
-
/* @__PURE__ */
|
|
1295
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1296
|
+
var RabbyIcon = () => /* @__PURE__ */ jsxs5("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
1297
|
+
/* @__PURE__ */ jsxs5("g", { clipPath: "url(#rs-rabby-clip)", children: [
|
|
1298
|
+
/* @__PURE__ */ jsx6(
|
|
1269
1299
|
"mask",
|
|
1270
1300
|
{
|
|
1271
1301
|
id: "rs-rabby-mask",
|
|
@@ -1275,7 +1305,7 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1275
1305
|
y: "0",
|
|
1276
1306
|
width: "20",
|
|
1277
1307
|
height: "20",
|
|
1278
|
-
children: /* @__PURE__ */
|
|
1308
|
+
children: /* @__PURE__ */ jsx6(
|
|
1279
1309
|
"path",
|
|
1280
1310
|
{
|
|
1281
1311
|
d: "M20 10C20 4.47688 15.5231 0 10 0C4.47688 0 0 4.47688 0 10C0 15.5231 4.47688 20 10 20C15.5231 20 20 15.5231 20 10Z",
|
|
@@ -1284,22 +1314,22 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1284
1314
|
)
|
|
1285
1315
|
}
|
|
1286
1316
|
),
|
|
1287
|
-
/* @__PURE__ */
|
|
1288
|
-
/* @__PURE__ */
|
|
1317
|
+
/* @__PURE__ */ jsxs5("g", { mask: "url(#rs-rabby-mask)", children: [
|
|
1318
|
+
/* @__PURE__ */ jsx6(
|
|
1289
1319
|
"path",
|
|
1290
1320
|
{
|
|
1291
1321
|
d: "M20 10C20 4.47688 15.5231 0 10 0C4.47688 0 0 4.47688 0 10C0 15.5231 4.47688 20 10 20C15.5231 20 20 15.5231 20 10Z",
|
|
1292
1322
|
fill: "#7084FF"
|
|
1293
1323
|
}
|
|
1294
1324
|
),
|
|
1295
|
-
/* @__PURE__ */
|
|
1325
|
+
/* @__PURE__ */ jsx6(
|
|
1296
1326
|
"path",
|
|
1297
1327
|
{
|
|
1298
1328
|
d: "M17.2515 10.8675C17.8265 9.57871 14.9847 5.97871 12.2697 4.47934C10.5584 3.31684 8.77529 3.47684 8.41404 3.98684C7.62154 5.10684 11.039 6.05559 13.3234 7.16184C12.8322 7.37621 12.3697 7.76059 12.0972 8.25184C11.2453 7.31871 9.37529 6.51434 7.18154 7.16246C5.70279 7.59871 4.47404 8.62684 3.99904 10.18C3.85708 10.1175 3.70178 10.0914 3.5472 10.1041C3.39262 10.1168 3.24365 10.1678 3.11376 10.2526C2.98388 10.3373 2.87719 10.4532 2.80336 10.5896C2.72952 10.726 2.69088 10.8786 2.69092 11.0337C2.69092 11.55 3.10717 11.9681 3.62154 11.9681C3.71654 11.9681 4.01467 11.9037 4.01467 11.9037L8.77529 11.9387C6.87154 14.9687 5.36654 15.4118 5.36654 15.9368C5.36654 16.4618 6.80654 16.32 7.34717 16.1243C9.93467 15.1868 12.714 12.2675 13.1909 11.4268C15.1934 11.6775 16.8765 11.7075 17.2515 10.8675Z",
|
|
1299
1329
|
fill: "url(#rs-rabby-grad0)"
|
|
1300
1330
|
}
|
|
1301
1331
|
),
|
|
1302
|
-
/* @__PURE__ */
|
|
1332
|
+
/* @__PURE__ */ jsx6(
|
|
1303
1333
|
"path",
|
|
1304
1334
|
{
|
|
1305
1335
|
fillRule: "evenodd",
|
|
@@ -1308,7 +1338,7 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1308
1338
|
fill: "url(#rs-rabby-grad1)"
|
|
1309
1339
|
}
|
|
1310
1340
|
),
|
|
1311
|
-
/* @__PURE__ */
|
|
1341
|
+
/* @__PURE__ */ jsx6(
|
|
1312
1342
|
"path",
|
|
1313
1343
|
{
|
|
1314
1344
|
fillRule: "evenodd",
|
|
@@ -1317,7 +1347,7 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1317
1347
|
fill: "url(#rs-rabby-grad2)"
|
|
1318
1348
|
}
|
|
1319
1349
|
),
|
|
1320
|
-
/* @__PURE__ */
|
|
1350
|
+
/* @__PURE__ */ jsx6(
|
|
1321
1351
|
"path",
|
|
1322
1352
|
{
|
|
1323
1353
|
d: "M3.94351 11.7048C4.11789 13.1936 4.96101 13.7773 6.68476 13.9498C8.40851 14.1223 9.39664 14.0067 10.7123 14.1273C11.8116 14.2273 12.7929 14.7898 13.1573 14.5954C13.4848 14.4204 13.301 13.7892 12.8629 13.3836C12.2941 12.8586 11.5079 12.4936 10.1241 12.3642C10.3998 11.6061 10.3223 10.5436 9.89414 9.96543C9.27476 9.1298 8.13164 8.7523 6.68476 8.9173C5.17226 9.0898 3.72414 9.83605 3.94351 11.7048Z",
|
|
@@ -1326,8 +1356,8 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1326
1356
|
)
|
|
1327
1357
|
] })
|
|
1328
1358
|
] }),
|
|
1329
|
-
/* @__PURE__ */
|
|
1330
|
-
/* @__PURE__ */
|
|
1359
|
+
/* @__PURE__ */ jsxs5("defs", { children: [
|
|
1360
|
+
/* @__PURE__ */ jsxs5(
|
|
1331
1361
|
"linearGradient",
|
|
1332
1362
|
{
|
|
1333
1363
|
id: "rs-rabby-grad0",
|
|
@@ -1337,12 +1367,12 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1337
1367
|
y2: "12.5875",
|
|
1338
1368
|
gradientUnits: "userSpaceOnUse",
|
|
1339
1369
|
children: [
|
|
1340
|
-
/* @__PURE__ */
|
|
1341
|
-
/* @__PURE__ */
|
|
1370
|
+
/* @__PURE__ */ jsx6("stop", { stopColor: "white" }),
|
|
1371
|
+
/* @__PURE__ */ jsx6("stop", { offset: "1", stopColor: "white" })
|
|
1342
1372
|
]
|
|
1343
1373
|
}
|
|
1344
1374
|
),
|
|
1345
|
-
/* @__PURE__ */
|
|
1375
|
+
/* @__PURE__ */ jsxs5(
|
|
1346
1376
|
"linearGradient",
|
|
1347
1377
|
{
|
|
1348
1378
|
id: "rs-rabby-grad1",
|
|
@@ -1352,12 +1382,12 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1352
1382
|
y2: "2.21365",
|
|
1353
1383
|
gradientUnits: "userSpaceOnUse",
|
|
1354
1384
|
children: [
|
|
1355
|
-
/* @__PURE__ */
|
|
1356
|
-
/* @__PURE__ */
|
|
1385
|
+
/* @__PURE__ */ jsx6("stop", { stopColor: "#8697FF" }),
|
|
1386
|
+
/* @__PURE__ */ jsx6("stop", { offset: "1", stopColor: "#8697FF", stopOpacity: "0" })
|
|
1357
1387
|
]
|
|
1358
1388
|
}
|
|
1359
1389
|
),
|
|
1360
|
-
/* @__PURE__ */
|
|
1390
|
+
/* @__PURE__ */ jsxs5(
|
|
1361
1391
|
"linearGradient",
|
|
1362
1392
|
{
|
|
1363
1393
|
id: "rs-rabby-grad2",
|
|
@@ -1367,12 +1397,12 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1367
1397
|
y2: "9.61626",
|
|
1368
1398
|
gradientUnits: "userSpaceOnUse",
|
|
1369
1399
|
children: [
|
|
1370
|
-
/* @__PURE__ */
|
|
1371
|
-
/* @__PURE__ */
|
|
1400
|
+
/* @__PURE__ */ jsx6("stop", { stopColor: "#8697FF" }),
|
|
1401
|
+
/* @__PURE__ */ jsx6("stop", { offset: "1", stopColor: "#8697FF", stopOpacity: "0" })
|
|
1372
1402
|
]
|
|
1373
1403
|
}
|
|
1374
1404
|
),
|
|
1375
|
-
/* @__PURE__ */
|
|
1405
|
+
/* @__PURE__ */ jsxs5(
|
|
1376
1406
|
"linearGradient",
|
|
1377
1407
|
{
|
|
1378
1408
|
id: "rs-rabby-grad3",
|
|
@@ -1382,23 +1412,23 @@ var RabbyIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20",
|
|
|
1382
1412
|
y2: "15.6773",
|
|
1383
1413
|
gradientUnits: "userSpaceOnUse",
|
|
1384
1414
|
children: [
|
|
1385
|
-
/* @__PURE__ */
|
|
1386
|
-
/* @__PURE__ */
|
|
1415
|
+
/* @__PURE__ */ jsx6("stop", { stopColor: "white" }),
|
|
1416
|
+
/* @__PURE__ */ jsx6("stop", { offset: "0.984", stopColor: "#D1D8FF" })
|
|
1387
1417
|
]
|
|
1388
1418
|
}
|
|
1389
1419
|
),
|
|
1390
|
-
/* @__PURE__ */
|
|
1420
|
+
/* @__PURE__ */ jsx6("clipPath", { id: "rs-rabby-clip", children: /* @__PURE__ */ jsx6("rect", { width: "20", height: "20", fill: "white" }) })
|
|
1391
1421
|
] })
|
|
1392
1422
|
] });
|
|
1393
|
-
var PhantomIcon = () => /* @__PURE__ */
|
|
1394
|
-
/* @__PURE__ */
|
|
1423
|
+
var PhantomIcon = () => /* @__PURE__ */ jsxs5("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
1424
|
+
/* @__PURE__ */ jsx6(
|
|
1395
1425
|
"path",
|
|
1396
1426
|
{
|
|
1397
1427
|
d: "M15.1852 0H4.81481C2.15567 0 0 2.15567 0 4.81481V15.1852C0 17.8443 2.15567 20 4.81481 20H15.1852C17.8443 20 20 17.8443 20 15.1852V4.81481C20 2.15567 17.8443 0 15.1852 0Z",
|
|
1398
1428
|
fill: "#AB9FF2"
|
|
1399
1429
|
}
|
|
1400
1430
|
),
|
|
1401
|
-
/* @__PURE__ */
|
|
1431
|
+
/* @__PURE__ */ jsx6(
|
|
1402
1432
|
"path",
|
|
1403
1433
|
{
|
|
1404
1434
|
fillRule: "evenodd",
|
|
@@ -1408,9 +1438,9 @@ var PhantomIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20"
|
|
|
1408
1438
|
}
|
|
1409
1439
|
)
|
|
1410
1440
|
] });
|
|
1411
|
-
var WalletConnectIcon = () => /* @__PURE__ */
|
|
1412
|
-
/* @__PURE__ */
|
|
1413
|
-
/* @__PURE__ */
|
|
1441
|
+
var WalletConnectIcon = () => /* @__PURE__ */ jsxs5("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
1442
|
+
/* @__PURE__ */ jsx6("rect", { width: "20", height: "20", rx: "2.5", fill: "#3B99FC" }),
|
|
1443
|
+
/* @__PURE__ */ jsx6(
|
|
1414
1444
|
"path",
|
|
1415
1445
|
{
|
|
1416
1446
|
d: "M6.18 7.96a5.36 5.36 0 0 1 7.64 0l.25.26a.26.26 0 0 1 0 .37l-.87.87a.13.13 0 0 1-.19 0l-.35-.35a3.74 3.74 0 0 0-5.32 0l-.38.37a.13.13 0 0 1-.19 0l-.86-.86a.26.26 0 0 1 0-.37l.27-.29Zm9.43 1.79.78.78a.26.26 0 0 1 0 .37l-3.54 3.54a.26.26 0 0 1-.37 0l-2.51-2.5a.07.07 0 0 0-.09 0l-2.51 2.5a.26.26 0 0 1-.37 0L3.46 10.9a.26.26 0 0 1 0-.37l.78-.78a.26.26 0 0 1 .37 0l2.5 2.5a.07.07 0 0 0 .1 0L9.72 9.75a.26.26 0 0 1 .37 0l2.5 2.5a.07.07 0 0 0 .1 0l2.5-2.5a.26.26 0 0 1 .37 0Z",
|
|
@@ -1418,24 +1448,24 @@ var WalletConnectIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height
|
|
|
1418
1448
|
}
|
|
1419
1449
|
)
|
|
1420
1450
|
] });
|
|
1421
|
-
var EthBadgeIcon = () => /* @__PURE__ */
|
|
1422
|
-
/* @__PURE__ */
|
|
1451
|
+
var EthBadgeIcon = () => /* @__PURE__ */ jsxs5("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
1452
|
+
/* @__PURE__ */ jsx6(
|
|
1423
1453
|
"path",
|
|
1424
1454
|
{
|
|
1425
1455
|
d: "M9.99987 19.9319C15.4852 19.9319 19.9319 15.4852 19.9319 9.9999C19.9319 4.51461 15.4852 0.0679016 9.99987 0.0679016C4.51458 0.0679016 0.0678711 4.51461 0.0678711 9.9999C0.0678711 15.4852 4.51458 19.9319 9.99987 19.9319Z",
|
|
1426
1456
|
fill: "#E3E3E3"
|
|
1427
1457
|
}
|
|
1428
1458
|
),
|
|
1429
|
-
/* @__PURE__ */
|
|
1430
|
-
/* @__PURE__ */
|
|
1431
|
-
/* @__PURE__ */
|
|
1432
|
-
/* @__PURE__ */
|
|
1433
|
-
/* @__PURE__ */
|
|
1434
|
-
/* @__PURE__ */
|
|
1459
|
+
/* @__PURE__ */ jsx6("path", { d: "M10.0073 2.18121L14.6948 9.99371L10.0247 7.98052L10.0073 2.18121Z", fill: "#2F3030" }),
|
|
1460
|
+
/* @__PURE__ */ jsx6("path", { d: "M5.31982 9.99371L9.98998 2.18121L10.0073 7.98052L5.31982 9.99371Z", fill: "#828384" }),
|
|
1461
|
+
/* @__PURE__ */ jsx6("path", { d: "M9.98998 12.8062L5.31982 10.047L10.0073 8.11871L9.98998 12.8062Z", fill: "#343535" }),
|
|
1462
|
+
/* @__PURE__ */ jsx6("path", { d: "M14.6948 10.047L10.0247 8.11871L10.0073 12.8062L14.6948 10.047Z", fill: "#131313" }),
|
|
1463
|
+
/* @__PURE__ */ jsx6("path", { d: "M10.0073 14.0046L14.6948 11.2437L10.0073 17.8062V14.0046Z", fill: "#2F3030" }),
|
|
1464
|
+
/* @__PURE__ */ jsx6("path", { d: "M10.0073 14.0046L5.31982 11.2437L10.0073 17.8062V14.0046Z", fill: "#828384" })
|
|
1435
1465
|
] });
|
|
1436
|
-
var SolBadgeIcon = () => /* @__PURE__ */
|
|
1437
|
-
/* @__PURE__ */
|
|
1438
|
-
/* @__PURE__ */
|
|
1466
|
+
var SolBadgeIcon = () => /* @__PURE__ */ jsxs5("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
1467
|
+
/* @__PURE__ */ jsx6("rect", { width: "20", height: "20", rx: "10", fill: "#0C0C0C" }),
|
|
1468
|
+
/* @__PURE__ */ jsx6(
|
|
1439
1469
|
"path",
|
|
1440
1470
|
{
|
|
1441
1471
|
fillRule: "evenodd",
|
|
@@ -1444,7 +1474,7 @@ var SolBadgeIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20
|
|
|
1444
1474
|
fill: "url(#rs-sol-badge-grad)"
|
|
1445
1475
|
}
|
|
1446
1476
|
),
|
|
1447
|
-
/* @__PURE__ */
|
|
1477
|
+
/* @__PURE__ */ jsx6("defs", { children: /* @__PURE__ */ jsxs5(
|
|
1448
1478
|
"linearGradient",
|
|
1449
1479
|
{
|
|
1450
1480
|
id: "rs-sol-badge-grad",
|
|
@@ -1454,15 +1484,15 @@ var SolBadgeIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "20
|
|
|
1454
1484
|
y2: "5.08343",
|
|
1455
1485
|
gradientUnits: "userSpaceOnUse",
|
|
1456
1486
|
children: [
|
|
1457
|
-
/* @__PURE__ */
|
|
1458
|
-
/* @__PURE__ */
|
|
1487
|
+
/* @__PURE__ */ jsx6("stop", { stopColor: "#CB4EE8" }),
|
|
1488
|
+
/* @__PURE__ */ jsx6("stop", { offset: "1", stopColor: "#10F4B1" })
|
|
1459
1489
|
]
|
|
1460
1490
|
}
|
|
1461
1491
|
) })
|
|
1462
1492
|
] });
|
|
1463
|
-
var BaseBadgeIcon = () => /* @__PURE__ */
|
|
1464
|
-
/* @__PURE__ */
|
|
1465
|
-
/* @__PURE__ */
|
|
1493
|
+
var BaseBadgeIcon = () => /* @__PURE__ */ jsxs5("svg", { width: "20", height: "20", viewBox: "0 0 111 111", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
1494
|
+
/* @__PURE__ */ jsx6("circle", { cx: "55.5", cy: "55.5", r: "55.5", fill: "#0052FF" }),
|
|
1495
|
+
/* @__PURE__ */ jsx6(
|
|
1466
1496
|
"path",
|
|
1467
1497
|
{
|
|
1468
1498
|
d: "M54.921 93.4c20.942 0 37.92-16.978 37.92-37.921S75.863 17.558 54.92 17.558c-19.498 0-35.57 14.725-37.655 33.647h49.82v5.548h-49.82C19.351 75.675 35.423 93.4 54.921 93.4z",
|
|
@@ -1470,15 +1500,15 @@ var BaseBadgeIcon = () => /* @__PURE__ */ jsxs4("svg", { width: "20", height: "2
|
|
|
1470
1500
|
}
|
|
1471
1501
|
)
|
|
1472
1502
|
] });
|
|
1473
|
-
var walletBadge = /* @__PURE__ */
|
|
1474
|
-
/* @__PURE__ */
|
|
1475
|
-
/* @__PURE__ */
|
|
1476
|
-
/* @__PURE__ */
|
|
1503
|
+
var walletBadge = /* @__PURE__ */ jsxs5("span", { className: "rs-list-row-meta-icons", children: [
|
|
1504
|
+
/* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6(RabbyIcon, {}) }),
|
|
1505
|
+
/* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6(PhantomIcon, {}) }),
|
|
1506
|
+
/* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6(WalletConnectIcon, {}) })
|
|
1477
1507
|
] });
|
|
1478
|
-
var chainBadge = /* @__PURE__ */
|
|
1479
|
-
/* @__PURE__ */
|
|
1480
|
-
/* @__PURE__ */
|
|
1481
|
-
/* @__PURE__ */
|
|
1508
|
+
var chainBadge = /* @__PURE__ */ jsxs5("span", { className: "rs-list-row-meta-icons", children: [
|
|
1509
|
+
/* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6(EthBadgeIcon, {}) }),
|
|
1510
|
+
/* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6(SolBadgeIcon, {}) }),
|
|
1511
|
+
/* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6(BaseBadgeIcon, {}) })
|
|
1482
1512
|
] });
|
|
1483
1513
|
function WalletBadgeIcons() {
|
|
1484
1514
|
return walletBadge;
|
|
@@ -1490,94 +1520,163 @@ function ChainBadgeIcons() {
|
|
|
1490
1520
|
ChainBadgeIcons.displayName = "ChainBadgeIcons";
|
|
1491
1521
|
|
|
1492
1522
|
// src/components/steps/ConnectStep.tsx
|
|
1493
|
-
import { Fragment, jsx as
|
|
1523
|
+
import { Fragment, jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1524
|
+
function formatBalanceUsd(value) {
|
|
1525
|
+
if (!Number.isFinite(value) || value <= 0) return "$0.00";
|
|
1526
|
+
return `$${value.toFixed(2)}`;
|
|
1527
|
+
}
|
|
1494
1528
|
function shorten(addr) {
|
|
1495
1529
|
return addr.length > 12 ? `${addr.slice(0, 6)}...${addr.slice(-4)}` : addr;
|
|
1496
1530
|
}
|
|
1497
|
-
function renderWalletLeading(
|
|
1498
|
-
if (
|
|
1499
|
-
return /* @__PURE__ */
|
|
1531
|
+
function renderWalletLeading(row) {
|
|
1532
|
+
if (row.icon) {
|
|
1533
|
+
return /* @__PURE__ */ jsx7(
|
|
1500
1534
|
"img",
|
|
1501
1535
|
{
|
|
1502
|
-
src:
|
|
1536
|
+
src: row.icon,
|
|
1503
1537
|
alt: "",
|
|
1504
1538
|
style: { width: 24, height: 24, borderRadius: 6 }
|
|
1505
1539
|
}
|
|
1506
1540
|
);
|
|
1507
1541
|
}
|
|
1508
|
-
return /* @__PURE__ */
|
|
1542
|
+
return /* @__PURE__ */ jsx7(WalletIcon, {});
|
|
1543
|
+
}
|
|
1544
|
+
function renderRowTrailing(state) {
|
|
1545
|
+
if (state === "loading") {
|
|
1546
|
+
return /* @__PURE__ */ jsx7(Spinner, { className: "rs-spinner--sm" });
|
|
1547
|
+
}
|
|
1548
|
+
return void 0;
|
|
1509
1549
|
}
|
|
1510
1550
|
function ConnectStep({
|
|
1511
|
-
|
|
1551
|
+
walletRows,
|
|
1512
1552
|
onConfirmWallet,
|
|
1513
1553
|
onSelectTransferCrypto,
|
|
1554
|
+
transferCryptoState,
|
|
1555
|
+
transferCryptoErrorReason,
|
|
1514
1556
|
onRequestConnect,
|
|
1515
1557
|
onConnect,
|
|
1516
1558
|
onDisconnect,
|
|
1559
|
+
dappImports,
|
|
1560
|
+
onSelectDappImport,
|
|
1517
1561
|
title = "Deposit",
|
|
1518
1562
|
subtitle
|
|
1519
1563
|
}) {
|
|
1520
|
-
const
|
|
1564
|
+
const rows = walletRows ?? [];
|
|
1521
1565
|
const handleConnect = onConnect ?? onRequestConnect;
|
|
1522
|
-
const hasReownWallet =
|
|
1523
|
-
(
|
|
1566
|
+
const hasReownWallet = rows.some(
|
|
1567
|
+
(row) => row.kind === "external" || row.kind === "solana"
|
|
1524
1568
|
);
|
|
1569
|
+
const showDappImports = hasReownWallet && (dappImports?.length ?? 0) > 0;
|
|
1525
1570
|
const extraChainCount = Math.max(0, getSupportedChainIds().length - 3);
|
|
1526
|
-
const chainBadge2 = /* @__PURE__ */
|
|
1527
|
-
/* @__PURE__ */
|
|
1571
|
+
const chainBadge2 = /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
1572
|
+
/* @__PURE__ */ jsx7(ChainBadgeIcons, {}),
|
|
1528
1573
|
extraChainCount > 0 ? `+${extraChainCount} chains` : "All chains"
|
|
1529
1574
|
] });
|
|
1530
1575
|
const defaultSubtitle = onSelectTransferCrypto ? "Add money to your balance" : "Choose a wallet to continue";
|
|
1531
|
-
return /* @__PURE__ */
|
|
1532
|
-
/* @__PURE__ */
|
|
1533
|
-
/* @__PURE__ */
|
|
1576
|
+
return /* @__PURE__ */ jsxs6("div", { className: "rs-screen", children: [
|
|
1577
|
+
/* @__PURE__ */ jsxs6("div", { className: "rs-screen-body rs-screen-body--gap-32", children: [
|
|
1578
|
+
/* @__PURE__ */ jsx7(
|
|
1534
1579
|
BodyHeader,
|
|
1535
1580
|
{
|
|
1536
|
-
icon: /* @__PURE__ */
|
|
1581
|
+
icon: /* @__PURE__ */ jsx7(HandCoinsIcon, {}),
|
|
1537
1582
|
title,
|
|
1538
1583
|
subtitle: subtitle ?? defaultSubtitle
|
|
1539
1584
|
}
|
|
1540
1585
|
),
|
|
1541
|
-
/* @__PURE__ */
|
|
1542
|
-
onSelectTransferCrypto && /* @__PURE__ */
|
|
1586
|
+
/* @__PURE__ */ jsxs6("div", { className: "rs-list", children: [
|
|
1587
|
+
onSelectTransferCrypto && /* @__PURE__ */ jsx7(
|
|
1543
1588
|
ListRow,
|
|
1544
1589
|
{
|
|
1545
|
-
leading: /* @__PURE__ */
|
|
1590
|
+
leading: /* @__PURE__ */ jsx7(CoinsIcon, {}),
|
|
1546
1591
|
title: "Transfer crypto",
|
|
1547
|
-
subtitle: "Instant - No limit",
|
|
1592
|
+
subtitle: transferCryptoState === "loading" ? "Preparing\u2026" : transferCryptoState === "error" ? transferCryptoErrorReason ?? "Couldn't prepare account \u2014 tap to retry" : "Instant - No limit",
|
|
1548
1593
|
meta: chainBadge2,
|
|
1549
|
-
onClick: onSelectTransferCrypto
|
|
1594
|
+
onClick: onSelectTransferCrypto,
|
|
1595
|
+
disabled: transferCryptoState === "loading",
|
|
1596
|
+
trailing: transferCryptoState === "loading" ? /* @__PURE__ */ jsx7(Spinner, { className: "rs-spinner--sm" }) : void 0
|
|
1550
1597
|
}
|
|
1551
1598
|
),
|
|
1552
|
-
|
|
1553
|
-
const
|
|
1554
|
-
|
|
1599
|
+
rows.map((row) => {
|
|
1600
|
+
const collapseToExternal = Boolean(onSelectTransferCrypto) && row.kind !== "solana";
|
|
1601
|
+
const subtitleText = row.state === "loading" ? "Preparing\u2026" : row.state === "error" ? row.errorReason ?? "Couldn't prepare wallet \u2014 tap to retry" : shorten(row.address);
|
|
1602
|
+
return /* @__PURE__ */ jsx7(
|
|
1555
1603
|
ListRow,
|
|
1556
1604
|
{
|
|
1557
|
-
leading: renderWalletLeading(
|
|
1558
|
-
title:
|
|
1559
|
-
subtitle:
|
|
1560
|
-
onClick: () => onConfirmWallet?.(
|
|
1605
|
+
leading: renderWalletLeading(row),
|
|
1606
|
+
title: collapseToExternal ? "External wallet" : row.label,
|
|
1607
|
+
subtitle: subtitleText,
|
|
1608
|
+
onClick: () => onConfirmWallet?.(row.id),
|
|
1609
|
+
disabled: row.state === "loading",
|
|
1610
|
+
trailing: renderRowTrailing(row.state)
|
|
1561
1611
|
},
|
|
1562
|
-
|
|
1612
|
+
row.id
|
|
1563
1613
|
);
|
|
1564
1614
|
}),
|
|
1565
|
-
!hasReownWallet && handleConnect && /* @__PURE__ */
|
|
1615
|
+
!hasReownWallet && handleConnect && /* @__PURE__ */ jsx7(
|
|
1566
1616
|
ListRow,
|
|
1567
1617
|
{
|
|
1568
|
-
leading: /* @__PURE__ */
|
|
1618
|
+
leading: /* @__PURE__ */ jsx7(WalletIcon, {}),
|
|
1569
1619
|
title: "Connect wallet",
|
|
1570
1620
|
subtitle: "Instant - No limit",
|
|
1571
|
-
meta: /* @__PURE__ */
|
|
1572
|
-
/* @__PURE__ */
|
|
1621
|
+
meta: /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
1622
|
+
/* @__PURE__ */ jsx7(WalletBadgeIcons, {}),
|
|
1573
1623
|
"+100 wallets"
|
|
1574
1624
|
] }),
|
|
1575
1625
|
onClick: handleConnect
|
|
1576
1626
|
}
|
|
1577
|
-
)
|
|
1627
|
+
),
|
|
1628
|
+
showDappImports && dappImports?.map((row) => {
|
|
1629
|
+
if (row.status === "loading") {
|
|
1630
|
+
return /* @__PURE__ */ jsx7(
|
|
1631
|
+
ListRow,
|
|
1632
|
+
{
|
|
1633
|
+
leading: row.icon,
|
|
1634
|
+
title: row.label,
|
|
1635
|
+
subtitle: "Checking balance\u2026",
|
|
1636
|
+
disabled: true,
|
|
1637
|
+
trailing: /* @__PURE__ */ jsx7(Spinner, { className: "rs-spinner--sm" })
|
|
1638
|
+
},
|
|
1639
|
+
row.id
|
|
1640
|
+
);
|
|
1641
|
+
}
|
|
1642
|
+
if (row.status.enabled) {
|
|
1643
|
+
return /* @__PURE__ */ jsx7(
|
|
1644
|
+
ListRow,
|
|
1645
|
+
{
|
|
1646
|
+
leading: row.icon,
|
|
1647
|
+
title: row.label,
|
|
1648
|
+
subtitle: formatBalanceUsd(row.status.balanceUsd),
|
|
1649
|
+
onClick: () => onSelectDappImport?.(row.id)
|
|
1650
|
+
},
|
|
1651
|
+
row.id
|
|
1652
|
+
);
|
|
1653
|
+
}
|
|
1654
|
+
if (row.status.retryable) {
|
|
1655
|
+
return /* @__PURE__ */ jsx7(
|
|
1656
|
+
ListRow,
|
|
1657
|
+
{
|
|
1658
|
+
leading: row.icon,
|
|
1659
|
+
title: row.label,
|
|
1660
|
+
subtitle: row.status.reason,
|
|
1661
|
+
onClick: () => onSelectDappImport?.(row.id)
|
|
1662
|
+
},
|
|
1663
|
+
row.id
|
|
1664
|
+
);
|
|
1665
|
+
}
|
|
1666
|
+
return /* @__PURE__ */ jsx7(
|
|
1667
|
+
ListRow,
|
|
1668
|
+
{
|
|
1669
|
+
leading: row.icon,
|
|
1670
|
+
title: row.label,
|
|
1671
|
+
subtitle: row.status.reason,
|
|
1672
|
+
disabled: true
|
|
1673
|
+
},
|
|
1674
|
+
row.id
|
|
1675
|
+
);
|
|
1676
|
+
})
|
|
1578
1677
|
] })
|
|
1579
1678
|
] }),
|
|
1580
|
-
onDisconnect && hasReownWallet && /* @__PURE__ */
|
|
1679
|
+
onDisconnect && hasReownWallet && /* @__PURE__ */ jsx7("div", { className: "rs-screen-tight-row", children: /* @__PURE__ */ jsx7(
|
|
1581
1680
|
"button",
|
|
1582
1681
|
{
|
|
1583
1682
|
type: "button",
|
|
@@ -1586,90 +1685,11 @@ function ConnectStep({
|
|
|
1586
1685
|
children: "Disconnect wallet"
|
|
1587
1686
|
}
|
|
1588
1687
|
) }),
|
|
1589
|
-
/* @__PURE__ */
|
|
1688
|
+
/* @__PURE__ */ jsx7(PoweredBy, {})
|
|
1590
1689
|
] });
|
|
1591
1690
|
}
|
|
1592
1691
|
ConnectStep.displayName = "ConnectStep";
|
|
1593
1692
|
|
|
1594
|
-
// src/components/ui/Spinner.tsx
|
|
1595
|
-
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1596
|
-
function Spinner({ className }) {
|
|
1597
|
-
return /* @__PURE__ */ jsxs6(
|
|
1598
|
-
"svg",
|
|
1599
|
-
{
|
|
1600
|
-
className: `rs-spinner ${className || ""}`,
|
|
1601
|
-
fill: "none",
|
|
1602
|
-
viewBox: "0 0 20 21",
|
|
1603
|
-
children: [
|
|
1604
|
-
/* @__PURE__ */ jsx7(
|
|
1605
|
-
"path",
|
|
1606
|
-
{
|
|
1607
|
-
d: "M10 0.5C8.02219 0.5 6.08879 1.08649 4.4443 2.1853C2.79981 3.28412 1.51809 4.8459 0.761209 6.67316C0.00433288 8.50043 -0.1937 10.5111 0.192152 12.4509C0.578004 14.3907 1.53041 16.1725 2.92894 17.5711C4.32746 18.9696 6.10929 19.922 8.0491 20.3078C9.98891 20.6937 11.9996 20.4957 13.8268 19.7388C15.6541 18.9819 17.2159 17.7002 18.3147 16.0557C19.4135 14.4112 20 12.4778 20 10.5C20 7.84783 18.9464 5.3043 17.0711 3.42893C15.1957 1.55357 12.6522 0.5 10 0.5ZM10 17.7727C8.56159 17.7727 7.15549 17.3462 5.95949 16.547C4.7635 15.7479 3.83134 14.6121 3.28088 13.2831C2.73042 11.9542 2.5864 10.4919 2.86702 9.08116C3.14764 7.67039 3.8403 6.37451 4.85741 5.3574C5.87452 4.3403 7.17039 3.64764 8.58116 3.36702C9.99193 3.0864 11.4542 3.23042 12.7832 3.78088C14.1121 4.33133 15.2479 5.26349 16.0471 6.45949C16.8462 7.65548 17.2727 9.06159 17.2727 10.5C17.2727 12.4288 16.5065 14.2787 15.1426 15.6426C13.7787 17.0065 11.9288 17.7727 10 17.7727Z",
|
|
1608
|
-
fill: "currentColor",
|
|
1609
|
-
opacity: 0.3
|
|
1610
|
-
}
|
|
1611
|
-
),
|
|
1612
|
-
/* @__PURE__ */ jsx7(
|
|
1613
|
-
"path",
|
|
1614
|
-
{
|
|
1615
|
-
d: "M10 3.22767C11.7423 3.22846 13.4276 3.8412 14.7556 4.95667C16.0837 6.07214 16.9681 7.61784 17.2512 9.31825C17.3012 9.64364 17.4662 9.94096 17.7169 10.1573C17.9677 10.3737 18.2878 10.4951 18.6205 10.5C18.8211 10.5001 19.0193 10.457 19.2012 10.3735C19.3832 10.2901 19.5445 10.1684 19.674 10.017C19.8036 9.86549 19.8981 9.68789 19.9511 9.49656C20.004 9.30523 20.0141 9.10478 19.9807 8.90918C19.5986 6.56305 18.3843 4.42821 16.5554 2.88726C14.7265 1.34631 12.4025 0.5 10 0.5C7.59751 0.5 5.27354 1.34631 3.44461 2.88726C1.61569 4.42821 0.401366 6.56305 0.0192815 8.90918C-0.0141442 9.10478 -0.00402016 9.30523 0.0489472 9.49656C0.101914 9.68789 0.196449 9.86549 0.325956 10.017C0.455463 10.1684 0.616823 10.2901 0.798778 10.3735C0.980732 10.457 1.1789 10.5001 1.37945 10.5C1.71216 10.4951 2.03235 10.3737 2.28307 10.1573C2.5338 9.94096 2.69883 9.64364 2.74882 9.31825C3.03193 7.61784 3.91633 6.07214 5.24436 4.95667C6.57239 3.8412 8.25775 3.22846 10 3.22767Z",
|
|
1616
|
-
fill: "currentColor"
|
|
1617
|
-
}
|
|
1618
|
-
)
|
|
1619
|
-
]
|
|
1620
|
-
}
|
|
1621
|
-
);
|
|
1622
|
-
}
|
|
1623
|
-
|
|
1624
|
-
// src/core/session-owner.ts
|
|
1625
|
-
import { isAddress } from "viem";
|
|
1626
|
-
import {
|
|
1627
|
-
generatePrivateKey,
|
|
1628
|
-
privateKeyToAccount
|
|
1629
|
-
} from "viem/accounts";
|
|
1630
|
-
var STORAGE_PREFIX = "rhinestone:session-owner";
|
|
1631
|
-
function storageKey(eoaAddress) {
|
|
1632
|
-
return `${STORAGE_PREFIX}:${eoaAddress.toLowerCase()}`;
|
|
1633
|
-
}
|
|
1634
|
-
function loadSessionOwnerFromStorage(eoaAddress) {
|
|
1635
|
-
if (typeof window === "undefined") return null;
|
|
1636
|
-
const raw = window.localStorage.getItem(storageKey(eoaAddress));
|
|
1637
|
-
if (!raw) return null;
|
|
1638
|
-
try {
|
|
1639
|
-
const parsed = JSON.parse(raw);
|
|
1640
|
-
if (!parsed.privateKey) return null;
|
|
1641
|
-
const account = privateKeyToAccount(parsed.privateKey);
|
|
1642
|
-
return {
|
|
1643
|
-
privateKey: parsed.privateKey,
|
|
1644
|
-
address: account.address
|
|
1645
|
-
};
|
|
1646
|
-
} catch {
|
|
1647
|
-
return null;
|
|
1648
|
-
}
|
|
1649
|
-
}
|
|
1650
|
-
function saveSessionOwnerToStorage(eoaAddress, privateKey, address) {
|
|
1651
|
-
if (typeof window === "undefined") return;
|
|
1652
|
-
if (!isAddress(address)) return;
|
|
1653
|
-
const payload = {
|
|
1654
|
-
privateKey,
|
|
1655
|
-
address,
|
|
1656
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1657
|
-
};
|
|
1658
|
-
window.localStorage.setItem(storageKey(eoaAddress), JSON.stringify(payload));
|
|
1659
|
-
}
|
|
1660
|
-
function createSessionOwnerKey() {
|
|
1661
|
-
const privateKey = generatePrivateKey();
|
|
1662
|
-
const account = privateKeyToAccount(privateKey);
|
|
1663
|
-
return {
|
|
1664
|
-
privateKey,
|
|
1665
|
-
account,
|
|
1666
|
-
address: account.address
|
|
1667
|
-
};
|
|
1668
|
-
}
|
|
1669
|
-
function accountFromPrivateKey(privateKey) {
|
|
1670
|
-
return privateKeyToAccount(privateKey);
|
|
1671
|
-
}
|
|
1672
|
-
|
|
1673
1693
|
// src/core/formatters.ts
|
|
1674
1694
|
var currencyFormatter = new Intl.NumberFormat("en-US", {
|
|
1675
1695
|
style: "currency",
|
|
@@ -2437,7 +2457,6 @@ function ProcessingStep({
|
|
|
2437
2457
|
const sourceChainName = getChainName(displaySourceChain);
|
|
2438
2458
|
const targetChainName = getChainName(targetChain);
|
|
2439
2459
|
const totalTimeText = formatElapsedTime(elapsedSeconds);
|
|
2440
|
-
const feeSymbol = quotedFeeSymbol ?? sourceSymbol;
|
|
2441
2460
|
const feeSponsored = uiConfig?.feeSponsored ?? false;
|
|
2442
2461
|
const feeTooltip = uiConfig?.feeTooltip ?? (feeSponsored ? "Network fees are sponsored for this deposit." : "Network fees apply.");
|
|
2443
2462
|
const stateTitle = isComplete ? `${flowCapitalized} successful` : isFailed ? `${flowCapitalized} failed` : "Processing...";
|
|
@@ -2528,15 +2547,11 @@ function ProcessingStep({
|
|
|
2528
2547
|
/* @__PURE__ */ jsxs9("div", { className: "rs-amount-detail-row", children: [
|
|
2529
2548
|
/* @__PURE__ */ jsx10("span", { children: "Fees" }),
|
|
2530
2549
|
/* @__PURE__ */ jsxs9("span", { className: "rs-amount-detail-value", children: [
|
|
2531
|
-
/* @__PURE__ */
|
|
2550
|
+
/* @__PURE__ */ jsx10(
|
|
2532
2551
|
"span",
|
|
2533
2552
|
{
|
|
2534
2553
|
style: feeSponsored ? { textDecoration: "line-through" } : void 0,
|
|
2535
|
-
children:
|
|
2536
|
-
quotedFeeAmount,
|
|
2537
|
-
" ",
|
|
2538
|
-
feeSymbol
|
|
2539
|
-
]
|
|
2554
|
+
children: "$0.05"
|
|
2540
2555
|
}
|
|
2541
2556
|
),
|
|
2542
2557
|
/* @__PURE__ */ jsx10(Tooltip, { content: feeTooltip, children: /* @__PURE__ */ jsx10("span", { className: "rs-amount-detail-info", "aria-label": "Fee info", children: /* @__PURE__ */ jsx10(InfoIcon, {}) }) })
|
|
@@ -2564,6 +2579,291 @@ function ProcessingStep({
|
|
|
2564
2579
|
] });
|
|
2565
2580
|
}
|
|
2566
2581
|
|
|
2582
|
+
// src/core/safe.ts
|
|
2583
|
+
import {
|
|
2584
|
+
concat,
|
|
2585
|
+
encodeFunctionData,
|
|
2586
|
+
erc20Abi,
|
|
2587
|
+
hashTypedData,
|
|
2588
|
+
pad,
|
|
2589
|
+
parseEventLogs,
|
|
2590
|
+
toHex,
|
|
2591
|
+
zeroAddress
|
|
2592
|
+
} from "viem";
|
|
2593
|
+
var SAFE_ABI = [
|
|
2594
|
+
{
|
|
2595
|
+
type: "function",
|
|
2596
|
+
name: "isOwner",
|
|
2597
|
+
stateMutability: "view",
|
|
2598
|
+
inputs: [{ name: "owner", type: "address" }],
|
|
2599
|
+
outputs: [{ name: "", type: "bool" }]
|
|
2600
|
+
},
|
|
2601
|
+
{
|
|
2602
|
+
type: "function",
|
|
2603
|
+
name: "nonce",
|
|
2604
|
+
stateMutability: "view",
|
|
2605
|
+
inputs: [],
|
|
2606
|
+
outputs: [{ type: "uint256" }]
|
|
2607
|
+
},
|
|
2608
|
+
{
|
|
2609
|
+
type: "function",
|
|
2610
|
+
name: "execTransaction",
|
|
2611
|
+
stateMutability: "payable",
|
|
2612
|
+
inputs: [
|
|
2613
|
+
{ name: "to", type: "address" },
|
|
2614
|
+
{ name: "value", type: "uint256" },
|
|
2615
|
+
{ name: "data", type: "bytes" },
|
|
2616
|
+
{ name: "operation", type: "uint8" },
|
|
2617
|
+
{ name: "safeTxGas", type: "uint256" },
|
|
2618
|
+
{ name: "baseGas", type: "uint256" },
|
|
2619
|
+
{ name: "gasPrice", type: "uint256" },
|
|
2620
|
+
{ name: "gasToken", type: "address" },
|
|
2621
|
+
{ name: "refundReceiver", type: "address" },
|
|
2622
|
+
{ name: "signatures", type: "bytes" }
|
|
2623
|
+
],
|
|
2624
|
+
outputs: [{ name: "success", type: "bool" }]
|
|
2625
|
+
},
|
|
2626
|
+
{
|
|
2627
|
+
type: "event",
|
|
2628
|
+
name: "ExecutionSuccess",
|
|
2629
|
+
inputs: [
|
|
2630
|
+
{ name: "txHash", type: "bytes32", indexed: true },
|
|
2631
|
+
{ name: "payment", type: "uint256", indexed: false }
|
|
2632
|
+
],
|
|
2633
|
+
anonymous: false
|
|
2634
|
+
},
|
|
2635
|
+
{
|
|
2636
|
+
type: "event",
|
|
2637
|
+
name: "ExecutionFailure",
|
|
2638
|
+
inputs: [
|
|
2639
|
+
{ name: "txHash", type: "bytes32", indexed: true },
|
|
2640
|
+
{ name: "payment", type: "uint256", indexed: false }
|
|
2641
|
+
],
|
|
2642
|
+
anonymous: false
|
|
2643
|
+
}
|
|
2644
|
+
];
|
|
2645
|
+
async function executeSafeEthTransfer(params) {
|
|
2646
|
+
const {
|
|
2647
|
+
walletClient,
|
|
2648
|
+
publicClient,
|
|
2649
|
+
safeAddress,
|
|
2650
|
+
recipient,
|
|
2651
|
+
amount,
|
|
2652
|
+
chainId
|
|
2653
|
+
} = params;
|
|
2654
|
+
const account = walletClient.account;
|
|
2655
|
+
const chain = walletClient.chain;
|
|
2656
|
+
if (!account || !chain) {
|
|
2657
|
+
throw new Error("Wallet not connected");
|
|
2658
|
+
}
|
|
2659
|
+
if (chain.id !== chainId) {
|
|
2660
|
+
throw new Error(`Switch to ${getChainName(chainId)} to sign`);
|
|
2661
|
+
}
|
|
2662
|
+
const isOwner = await publicClient.readContract({
|
|
2663
|
+
address: safeAddress,
|
|
2664
|
+
abi: SAFE_ABI,
|
|
2665
|
+
functionName: "isOwner",
|
|
2666
|
+
args: [account.address]
|
|
2667
|
+
});
|
|
2668
|
+
if (!isOwner) {
|
|
2669
|
+
throw new Error("Connected wallet is not a Safe owner");
|
|
2670
|
+
}
|
|
2671
|
+
const safeTx = {
|
|
2672
|
+
to: recipient,
|
|
2673
|
+
value: amount,
|
|
2674
|
+
data: "0x",
|
|
2675
|
+
operation: 0,
|
|
2676
|
+
safeTxGas: 0n,
|
|
2677
|
+
baseGas: 0n,
|
|
2678
|
+
gasPrice: 0n,
|
|
2679
|
+
gasToken: zeroAddress,
|
|
2680
|
+
refundReceiver: zeroAddress
|
|
2681
|
+
};
|
|
2682
|
+
const signature = concat([
|
|
2683
|
+
pad(account.address, { size: 32 }),
|
|
2684
|
+
pad(toHex(0), { size: 32 }),
|
|
2685
|
+
toHex(1, { size: 1 })
|
|
2686
|
+
]);
|
|
2687
|
+
const txHash = await walletClient.writeContract({
|
|
2688
|
+
account,
|
|
2689
|
+
chain,
|
|
2690
|
+
address: safeAddress,
|
|
2691
|
+
abi: SAFE_ABI,
|
|
2692
|
+
functionName: "execTransaction",
|
|
2693
|
+
args: [
|
|
2694
|
+
safeTx.to,
|
|
2695
|
+
safeTx.value,
|
|
2696
|
+
safeTx.data,
|
|
2697
|
+
safeTx.operation,
|
|
2698
|
+
safeTx.safeTxGas,
|
|
2699
|
+
safeTx.baseGas,
|
|
2700
|
+
safeTx.gasPrice,
|
|
2701
|
+
safeTx.gasToken,
|
|
2702
|
+
safeTx.refundReceiver,
|
|
2703
|
+
signature
|
|
2704
|
+
]
|
|
2705
|
+
});
|
|
2706
|
+
const receipt = await publicClient.waitForTransactionReceipt({
|
|
2707
|
+
hash: txHash
|
|
2708
|
+
});
|
|
2709
|
+
const safeLogs = receipt.logs.filter(
|
|
2710
|
+
(log) => log.address.toLowerCase() === safeAddress.toLowerCase()
|
|
2711
|
+
);
|
|
2712
|
+
const parsed = parseEventLogs({
|
|
2713
|
+
abi: SAFE_ABI,
|
|
2714
|
+
logs: safeLogs,
|
|
2715
|
+
strict: false
|
|
2716
|
+
});
|
|
2717
|
+
const failed = parsed.find((log) => log.eventName === "ExecutionFailure");
|
|
2718
|
+
if (failed) {
|
|
2719
|
+
throw new Error("Safe transaction failed");
|
|
2720
|
+
}
|
|
2721
|
+
const succeeded = parsed.find((log) => log.eventName === "ExecutionSuccess");
|
|
2722
|
+
if (!succeeded) {
|
|
2723
|
+
throw new Error("Safe transaction status unavailable");
|
|
2724
|
+
}
|
|
2725
|
+
return { txHash };
|
|
2726
|
+
}
|
|
2727
|
+
async function executeSafeErc20Transfer(params) {
|
|
2728
|
+
const {
|
|
2729
|
+
walletClient,
|
|
2730
|
+
publicClient,
|
|
2731
|
+
safeAddress,
|
|
2732
|
+
tokenAddress,
|
|
2733
|
+
recipient,
|
|
2734
|
+
amount,
|
|
2735
|
+
chainId
|
|
2736
|
+
} = params;
|
|
2737
|
+
const account = walletClient.account;
|
|
2738
|
+
const chain = walletClient.chain;
|
|
2739
|
+
if (!account || !chain) {
|
|
2740
|
+
throw new Error("Wallet not connected");
|
|
2741
|
+
}
|
|
2742
|
+
if (chain.id !== chainId) {
|
|
2743
|
+
throw new Error(`Switch to ${getChainName(chainId)} to sign`);
|
|
2744
|
+
}
|
|
2745
|
+
const isOwner = await publicClient.readContract({
|
|
2746
|
+
address: safeAddress,
|
|
2747
|
+
abi: SAFE_ABI,
|
|
2748
|
+
functionName: "isOwner",
|
|
2749
|
+
args: [account.address]
|
|
2750
|
+
});
|
|
2751
|
+
if (!isOwner) {
|
|
2752
|
+
throw new Error("Connected wallet is not a Safe owner");
|
|
2753
|
+
}
|
|
2754
|
+
const data = encodeFunctionData({
|
|
2755
|
+
abi: erc20Abi,
|
|
2756
|
+
functionName: "transfer",
|
|
2757
|
+
args: [recipient, amount]
|
|
2758
|
+
});
|
|
2759
|
+
const safeTx = {
|
|
2760
|
+
to: tokenAddress,
|
|
2761
|
+
value: 0n,
|
|
2762
|
+
data,
|
|
2763
|
+
operation: 0,
|
|
2764
|
+
safeTxGas: 0n,
|
|
2765
|
+
baseGas: 0n,
|
|
2766
|
+
gasPrice: 0n,
|
|
2767
|
+
gasToken: zeroAddress,
|
|
2768
|
+
refundReceiver: zeroAddress
|
|
2769
|
+
};
|
|
2770
|
+
const signature = concat([
|
|
2771
|
+
pad(account.address, { size: 32 }),
|
|
2772
|
+
pad(toHex(0), { size: 32 }),
|
|
2773
|
+
toHex(1, { size: 1 })
|
|
2774
|
+
]);
|
|
2775
|
+
const txHash = await walletClient.writeContract({
|
|
2776
|
+
account,
|
|
2777
|
+
chain,
|
|
2778
|
+
address: safeAddress,
|
|
2779
|
+
abi: SAFE_ABI,
|
|
2780
|
+
functionName: "execTransaction",
|
|
2781
|
+
args: [
|
|
2782
|
+
safeTx.to,
|
|
2783
|
+
safeTx.value,
|
|
2784
|
+
safeTx.data,
|
|
2785
|
+
safeTx.operation,
|
|
2786
|
+
safeTx.safeTxGas,
|
|
2787
|
+
safeTx.baseGas,
|
|
2788
|
+
safeTx.gasPrice,
|
|
2789
|
+
safeTx.gasToken,
|
|
2790
|
+
safeTx.refundReceiver,
|
|
2791
|
+
signature
|
|
2792
|
+
]
|
|
2793
|
+
});
|
|
2794
|
+
const receipt = await publicClient.waitForTransactionReceipt({
|
|
2795
|
+
hash: txHash
|
|
2796
|
+
});
|
|
2797
|
+
const safeLogs = receipt.logs.filter(
|
|
2798
|
+
(log) => log.address.toLowerCase() === safeAddress.toLowerCase()
|
|
2799
|
+
);
|
|
2800
|
+
const parsed = parseEventLogs({
|
|
2801
|
+
abi: SAFE_ABI,
|
|
2802
|
+
logs: safeLogs,
|
|
2803
|
+
strict: false
|
|
2804
|
+
});
|
|
2805
|
+
const failed = parsed.find((log) => log.eventName === "ExecutionFailure");
|
|
2806
|
+
if (failed) {
|
|
2807
|
+
throw new Error("Safe transaction failed");
|
|
2808
|
+
}
|
|
2809
|
+
const succeeded = parsed.find((log) => log.eventName === "ExecutionSuccess");
|
|
2810
|
+
if (!succeeded) {
|
|
2811
|
+
throw new Error("Safe transaction status unavailable");
|
|
2812
|
+
}
|
|
2813
|
+
return { txHash };
|
|
2814
|
+
}
|
|
2815
|
+
var SAFE_TX_TYPES = {
|
|
2816
|
+
SafeTx: [
|
|
2817
|
+
{ name: "to", type: "address" },
|
|
2818
|
+
{ name: "value", type: "uint256" },
|
|
2819
|
+
{ name: "data", type: "bytes" },
|
|
2820
|
+
{ name: "operation", type: "uint8" },
|
|
2821
|
+
{ name: "safeTxGas", type: "uint256" },
|
|
2822
|
+
{ name: "baseGas", type: "uint256" },
|
|
2823
|
+
{ name: "gasPrice", type: "uint256" },
|
|
2824
|
+
{ name: "gasToken", type: "address" },
|
|
2825
|
+
{ name: "refundReceiver", type: "address" },
|
|
2826
|
+
{ name: "nonce", type: "uint256" }
|
|
2827
|
+
]
|
|
2828
|
+
};
|
|
2829
|
+
async function buildSafeTransaction(params) {
|
|
2830
|
+
const { publicClient, safeAddress, to, value, data, chainId } = params;
|
|
2831
|
+
const nonce = await publicClient.readContract({
|
|
2832
|
+
address: safeAddress,
|
|
2833
|
+
abi: SAFE_ABI,
|
|
2834
|
+
functionName: "nonce"
|
|
2835
|
+
});
|
|
2836
|
+
const message = {
|
|
2837
|
+
to,
|
|
2838
|
+
value,
|
|
2839
|
+
data,
|
|
2840
|
+
operation: 0,
|
|
2841
|
+
safeTxGas: 0n,
|
|
2842
|
+
baseGas: 0n,
|
|
2843
|
+
gasPrice: 0n,
|
|
2844
|
+
gasToken: zeroAddress,
|
|
2845
|
+
refundReceiver: zeroAddress,
|
|
2846
|
+
nonce
|
|
2847
|
+
};
|
|
2848
|
+
const safeTxHash = hashTypedData({
|
|
2849
|
+
domain: { chainId, verifyingContract: safeAddress },
|
|
2850
|
+
types: SAFE_TX_TYPES,
|
|
2851
|
+
primaryType: "SafeTx",
|
|
2852
|
+
message
|
|
2853
|
+
});
|
|
2854
|
+
return {
|
|
2855
|
+
chainId,
|
|
2856
|
+
safeAddress,
|
|
2857
|
+
safeTxHash,
|
|
2858
|
+
typedData: {
|
|
2859
|
+
domain: { chainId, verifyingContract: safeAddress },
|
|
2860
|
+
types: SAFE_TX_TYPES,
|
|
2861
|
+
primaryType: "SafeTx",
|
|
2862
|
+
message
|
|
2863
|
+
}
|
|
2864
|
+
};
|
|
2865
|
+
}
|
|
2866
|
+
|
|
2567
2867
|
// src/core/public-client.ts
|
|
2568
2868
|
import { createPublicClient, http } from "viem";
|
|
2569
2869
|
var clientCache = /* @__PURE__ */ new Map();
|
|
@@ -2580,6 +2880,55 @@ function getPublicClient(chainId) {
|
|
|
2580
2880
|
return client;
|
|
2581
2881
|
}
|
|
2582
2882
|
|
|
2883
|
+
// src/core/session-owner.ts
|
|
2884
|
+
import { isAddress } from "viem";
|
|
2885
|
+
import {
|
|
2886
|
+
generatePrivateKey,
|
|
2887
|
+
privateKeyToAccount
|
|
2888
|
+
} from "viem/accounts";
|
|
2889
|
+
var STORAGE_PREFIX = "rhinestone:session-owner";
|
|
2890
|
+
function storageKey(eoaAddress) {
|
|
2891
|
+
return `${STORAGE_PREFIX}:${eoaAddress.toLowerCase()}`;
|
|
2892
|
+
}
|
|
2893
|
+
function loadSessionOwnerFromStorage(eoaAddress) {
|
|
2894
|
+
if (typeof window === "undefined") return null;
|
|
2895
|
+
const raw = window.localStorage.getItem(storageKey(eoaAddress));
|
|
2896
|
+
if (!raw) return null;
|
|
2897
|
+
try {
|
|
2898
|
+
const parsed = JSON.parse(raw);
|
|
2899
|
+
if (!parsed.privateKey) return null;
|
|
2900
|
+
const account = privateKeyToAccount(parsed.privateKey);
|
|
2901
|
+
return {
|
|
2902
|
+
privateKey: parsed.privateKey,
|
|
2903
|
+
address: account.address
|
|
2904
|
+
};
|
|
2905
|
+
} catch {
|
|
2906
|
+
return null;
|
|
2907
|
+
}
|
|
2908
|
+
}
|
|
2909
|
+
function saveSessionOwnerToStorage(eoaAddress, privateKey, address) {
|
|
2910
|
+
if (typeof window === "undefined") return;
|
|
2911
|
+
if (!isAddress(address)) return;
|
|
2912
|
+
const payload = {
|
|
2913
|
+
privateKey,
|
|
2914
|
+
address,
|
|
2915
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2916
|
+
};
|
|
2917
|
+
window.localStorage.setItem(storageKey(eoaAddress), JSON.stringify(payload));
|
|
2918
|
+
}
|
|
2919
|
+
function createSessionOwnerKey() {
|
|
2920
|
+
const privateKey = generatePrivateKey();
|
|
2921
|
+
const account = privateKeyToAccount(privateKey);
|
|
2922
|
+
return {
|
|
2923
|
+
privateKey,
|
|
2924
|
+
account,
|
|
2925
|
+
address: account.address
|
|
2926
|
+
};
|
|
2927
|
+
}
|
|
2928
|
+
function accountFromPrivateKey(privateKey) {
|
|
2929
|
+
return privateKeyToAccount(privateKey);
|
|
2930
|
+
}
|
|
2931
|
+
|
|
2583
2932
|
export {
|
|
2584
2933
|
Modal,
|
|
2585
2934
|
WalletIcon,
|
|
@@ -2588,6 +2937,7 @@ export {
|
|
|
2588
2937
|
ChevronLeftIcon,
|
|
2589
2938
|
ChevronDownIcon,
|
|
2590
2939
|
CloseIcon,
|
|
2940
|
+
HandCoinsIcon,
|
|
2591
2941
|
CoinsIcon,
|
|
2592
2942
|
HistoryIcon,
|
|
2593
2943
|
InfoIcon,
|
|
@@ -2599,9 +2949,10 @@ export {
|
|
|
2599
2949
|
PlusCircleIcon,
|
|
2600
2950
|
CircleArrowOutUpLeftIcon,
|
|
2601
2951
|
BodyHeader,
|
|
2952
|
+
ListRow,
|
|
2602
2953
|
PoweredBy,
|
|
2603
|
-
ConnectStep,
|
|
2604
2954
|
Spinner,
|
|
2955
|
+
ConnectStep,
|
|
2605
2956
|
Button,
|
|
2606
2957
|
debugLog,
|
|
2607
2958
|
debugError,
|
|
@@ -2613,10 +2964,6 @@ export {
|
|
|
2613
2964
|
isNativeAsset,
|
|
2614
2965
|
buildSessionDetails,
|
|
2615
2966
|
createDepositService,
|
|
2616
|
-
loadSessionOwnerFromStorage,
|
|
2617
|
-
saveSessionOwnerToStorage,
|
|
2618
|
-
createSessionOwnerKey,
|
|
2619
|
-
accountFromPrivateKey,
|
|
2620
2967
|
currencyFormatter,
|
|
2621
2968
|
tokenFormatter,
|
|
2622
2969
|
formatUserError,
|
|
@@ -2626,6 +2973,14 @@ export {
|
|
|
2626
2973
|
txRefsMatch,
|
|
2627
2974
|
useLatestRef,
|
|
2628
2975
|
ProcessingStep,
|
|
2976
|
+
SAFE_ABI,
|
|
2977
|
+
executeSafeEthTransfer,
|
|
2978
|
+
executeSafeErc20Transfer,
|
|
2979
|
+
buildSafeTransaction,
|
|
2629
2980
|
getPublicClient,
|
|
2981
|
+
loadSessionOwnerFromStorage,
|
|
2982
|
+
saveSessionOwnerToStorage,
|
|
2983
|
+
createSessionOwnerKey,
|
|
2984
|
+
accountFromPrivateKey,
|
|
2630
2985
|
applyTheme
|
|
2631
2986
|
};
|