@taskon/widget-react 0.0.1-beta.5 → 0.0.1-beta.7

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 (65) hide show
  1. package/README.md +61 -47
  2. package/dist/CommunityTaskList.css +9 -1
  3. package/dist/EligibilityInfo.css +48 -75
  4. package/dist/LeaderboardWidget.css +73 -71
  5. package/dist/PageBuilder.css +5 -0
  6. package/dist/Quest.css +18 -14
  7. package/dist/TaskOnProvider.css +289 -0
  8. package/dist/ThemeProvider.css +227 -0
  9. package/dist/UserCenterWidget.css +6 -6
  10. package/dist/UserCenterWidget2.css +1388 -1621
  11. package/dist/{dynamic-import-helper.css → WidgetShell.css} +0 -227
  12. package/dist/chunks/{CommunityTaskList-CrMvOB8w.js → CommunityTaskList-D0uVD8wD.js} +393 -208
  13. package/dist/chunks/{EligibilityInfo-Beww12QX.js → EligibilityInfo-Cf6hx9-a.js} +459 -679
  14. package/dist/chunks/{LeaderboardWidget-DwuSpVl0.js → LeaderboardWidget-DyoiiNS6.js} +274 -252
  15. package/dist/chunks/{PageBuilder-DsX6Tv0N.js → PageBuilder-DoAFPm6-.js} +5 -5
  16. package/dist/chunks/{Quest-CuD2LElS.js → Quest-ySZlYd4u.js} +74 -57
  17. package/dist/chunks/TaskOnProvider-CxtFIs3n.js +2072 -0
  18. package/dist/chunks/{dynamic-import-helper-WmIF58Sb.js → ThemeProvider-CulHkqqY.js} +1282 -555
  19. package/dist/chunks/UserCenterWidget-BJsc_GSZ.js +3246 -0
  20. package/dist/chunks/{UserCenterWidget-CvU6K4AC.js → UserCenterWidget-STq8kpV4.js} +1174 -1386
  21. package/dist/chunks/WidgetShell-8xn-Jivw.js +659 -0
  22. package/dist/chunks/communitytask-es-CBNnS4o2.js +521 -0
  23. package/dist/chunks/communitytask-ja-GRf9cbdx.js +521 -0
  24. package/dist/chunks/communitytask-ko-Bf24PQKI.js +521 -0
  25. package/dist/chunks/{communitytask-ru-DhySaZL8.js → communitytask-ru-CZm2CPoV.js} +211 -1
  26. package/dist/chunks/leaderboardwidget-es-vKjrjQaz.js +146 -0
  27. package/dist/chunks/leaderboardwidget-ja-Q6u0HxKG.js +146 -0
  28. package/dist/chunks/leaderboardwidget-ko-CG6SWgxf.js +146 -0
  29. package/dist/chunks/leaderboardwidget-ru-DCcHcJGz.js +146 -0
  30. package/dist/chunks/{quest-es-D-b5xcme.js → quest-es-Dyyy0zaw.js} +8 -93
  31. package/dist/chunks/{quest-ja-Dxd2vqBF.js → quest-ja-Depog33y.js} +8 -93
  32. package/dist/chunks/{quest-ko-CSmRWgK_.js → quest-ko-BMu3uRQJ.js} +8 -93
  33. package/dist/chunks/{quest-ru-CkEKv1_F.js → quest-ru-xne814Rw.js} +8 -93
  34. package/dist/chunks/useIsMobile-D6Ybur-6.js +30 -0
  35. package/dist/chunks/useToast-BGJhd3BX.js +93 -0
  36. package/dist/chunks/usercenter-es-Dz3Wp2vV.js +512 -0
  37. package/dist/chunks/usercenter-ja-CKE4DJC6.js +512 -0
  38. package/dist/chunks/usercenter-ko-Dtpkn2qb.js +512 -0
  39. package/dist/chunks/usercenter-ru-DnBGee45.js +512 -0
  40. package/dist/community-task.d.ts +0 -390
  41. package/dist/community-task.js +2 -7
  42. package/dist/core.d.ts +38 -20
  43. package/dist/core.js +9 -10
  44. package/dist/index.d.ts +86 -709
  45. package/dist/index.js +22 -28
  46. package/dist/leaderboard.d.ts +0 -498
  47. package/dist/leaderboard.js +2 -16
  48. package/dist/page-builder.js +1 -1
  49. package/dist/quest.d.ts +0 -971
  50. package/dist/quest.js +2 -7
  51. package/dist/user-center.d.ts +0 -1610
  52. package/dist/user-center.js +2 -494
  53. package/package.json +2 -2
  54. package/dist/chunks/TaskOnProvider-xUeP2Nro.js +0 -1243
  55. package/dist/chunks/ThemeProvider-Bt4UZ33y.js +0 -1334
  56. package/dist/chunks/UserCenterWidget-CB0hnj-L.js +0 -3230
  57. package/dist/chunks/communitytask-es-1zawvXEX.js +0 -311
  58. package/dist/chunks/communitytask-ja-CmW6nP-L.js +0 -311
  59. package/dist/chunks/communitytask-ko-BD0hzQSi.js +0 -311
  60. package/dist/chunks/createLocaleLoader-BameiEhU.js +0 -65
  61. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +0 -119
  62. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +0 -119
  63. package/dist/chunks/useToast-CaRkylKe.js +0 -304
  64. package/dist/chunks/usercenter-ja-B2465c1O.js +0 -326
  65. package/dist/chunks/usercenter-ko-xAEYxqLg.js +0 -326
@@ -2,171 +2,14 @@ import '../UserCenterWidget2.css';var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import * as React from "react";
5
- import React__default, { forwardRef, useRef, useCallback, useImperativeHandle, useEffect, useContext, useState, useMemo, useLayoutEffect, createContext } from "react";
6
- import { createUserApi, createNftClaimApi, NftClaimError, NftClaimErrorType, getNftChainName, generatePendingKey, getPendingHash, NftClaimType, WithdrawNft, ClaimMintedNft, ClaimCapNft, setPendingHash, clearPendingHash, RewardType, isNftClaimed, isNftClaimable, getNftClaimType, ChainType, DEFAULT_ERROR_MESSAGES, openInNewTab, toWei, formatTokenAmount as formatTokenAmount$1, USER_CENTER_REWARD_CARD_TYPES, RouletteRewardType, USER_CENTER_PAGE_SIZE, createUserCenterApi, getTxExplorerUrl } from "@taskon/core";
7
- import { q as TaskOnContext, d as useTaskOnContext, P as Primitive, o as useLayoutEffect2, e as createContextScope, f as useComposedRefs, l as useCallbackRef, h as useControllableState, k as composeEventHandlers, j as Presence, m as Portal$1, g as createSlot, D as DismissableLayer, t as useTaskOnPortalContainer } from "./ThemeProvider-Bt4UZ33y.js";
8
- import { d as useToast, u as useWallet, e as createEthereumAdapterFromProvider } from "./useToast-CaRkylKe.js";
5
+ import { useContext, useState, useRef, useMemo, useCallback, forwardRef, useImperativeHandle, useEffect, useLayoutEffect, createContext } from "react";
6
+ import { createUserApi, createNftClaimApi, NftClaimError, NftClaimErrorType, getNftChainName, generatePendingKey, getPendingHash, NftClaimType, WithdrawNft, ClaimMintedNft, ClaimCapNft, setPendingHash, clearPendingHash, RewardType, isNftClaimed, isNftClaimable, getNftClaimType, ChainType, DEFAULT_ERROR_MESSAGES, openInNewTab, toWei, USER_CENTER_REWARD_CARD_TYPES, UserCenterTabType, filterEnabledCards, formatTokenAmount as formatTokenAmount$1, RouletteRewardType, USER_CENTER_PAGE_SIZE, createUserCenterApi, getTxExplorerUrl } from "@taskon/core";
7
+ import { w as TaskOnContext, h as useTaskOnContext, P as Primitive, v as useLayoutEffect2, k as createContextScope, l as useComposedRefs, r as useCallbackRef, n as useControllableState, x as useId, q as composeEventHandlers, o as Presence, s as Portal$1, y as hideOthers, z as ReactRemoveScroll, m as createSlot, A as useFocusGuards, F as FocusScope, C as DismissableLayer, E as useTaskOnPortalContainer, D as Dialog, c as useTranslation, e as createLocaleLoader } from "./ThemeProvider-CulHkqqY.js";
8
+ import { c as useToast, u as useWallet } from "./useToast-BGJhd3BX.js";
9
9
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
10
- import { D as Dialog, b as useId, h as hideOthers, R as ReactRemoveScroll, d as useFocusGuards, F as FocusScope, P as Pagination$1, B as Button, T as Table, u as usePagination } from "./dynamic-import-helper-WmIF58Sb.js";
10
+ import { P as Pagination$1, B as Button, T as Table, a as usePagination } from "./WidgetShell-8xn-Jivw.js";
11
11
  import * as ReactDOM from "react-dom";
12
12
  import { createPortal } from "react-dom";
13
- const Input = forwardRef(
14
- function Input2({
15
- value,
16
- onChange,
17
- type = "text",
18
- inputMode,
19
- maxLength,
20
- disabled = false,
21
- placeholder,
22
- hasError = false,
23
- error: error2,
24
- className,
25
- autoFocus = false,
26
- onBlur,
27
- onFocus,
28
- onEnter,
29
- rightSlot,
30
- formatValue
31
- }, ref) {
32
- const inputRef = useRef(null);
33
- const isError = hasError || !!error2;
34
- const focus = useCallback(() => {
35
- var _a;
36
- (_a = inputRef.current) == null ? void 0 : _a.focus();
37
- }, []);
38
- const blur = useCallback(() => {
39
- var _a;
40
- (_a = inputRef.current) == null ? void 0 : _a.blur();
41
- }, []);
42
- const getElement = useCallback(() => {
43
- return inputRef.current;
44
- }, []);
45
- useImperativeHandle(
46
- ref,
47
- () => ({
48
- focus,
49
- blur,
50
- getElement
51
- }),
52
- [focus, blur, getElement]
53
- );
54
- useEffect(() => {
55
- var _a;
56
- if (autoFocus) {
57
- (_a = inputRef.current) == null ? void 0 : _a.focus();
58
- }
59
- }, [autoFocus]);
60
- const handleChange = useCallback(
61
- (e) => {
62
- let newValue = e.target.value;
63
- if (formatValue) {
64
- newValue = formatValue(newValue);
65
- }
66
- onChange(newValue);
67
- },
68
- [onChange, formatValue]
69
- );
70
- const handleKeyDown = useCallback(
71
- (e) => {
72
- if (e.key === "Enter" && onEnter) {
73
- onEnter(e);
74
- }
75
- },
76
- [onEnter]
77
- );
78
- const needWrapper = rightSlot || error2;
79
- const inputElement = /* @__PURE__ */ jsx(
80
- "input",
81
- {
82
- ref: inputRef,
83
- className: `taskon-input ${isError ? "taskon-input--error" : ""} ${!needWrapper ? className || "" : ""}`,
84
- type,
85
- inputMode,
86
- value,
87
- onChange: handleChange,
88
- maxLength,
89
- disabled,
90
- placeholder,
91
- onBlur,
92
- onFocus,
93
- onKeyDown: handleKeyDown
94
- }
95
- );
96
- if (!needWrapper) {
97
- return inputElement;
98
- }
99
- return /* @__PURE__ */ jsxs("div", { className: `taskon-input-wrapper ${className || ""}`, children: [
100
- /* @__PURE__ */ jsxs("div", { className: `taskon-input-container ${isError ? "taskon-input-container--error" : ""}`, children: [
101
- /* @__PURE__ */ jsx(
102
- "input",
103
- {
104
- ref: inputRef,
105
- className: "taskon-input taskon-input--in-container",
106
- type,
107
- inputMode,
108
- value,
109
- onChange: handleChange,
110
- maxLength,
111
- disabled,
112
- placeholder,
113
- onBlur,
114
- onFocus,
115
- onKeyDown: handleKeyDown
116
- }
117
- ),
118
- rightSlot && /* @__PURE__ */ jsx("div", { className: "taskon-input-slot", children: rightSlot })
119
- ] }),
120
- error2 && /* @__PURE__ */ jsx("p", { className: "taskon-input-error", children: error2 })
121
- ] });
122
- }
123
- );
124
- const MetaMaskIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='white'/%3e%3crect%20width='24'%20height='24'%20fill='url(%23pattern0)'/%3e%3cdefs%3e%3cpattern%20id='pattern0'%20patternContentUnits='objectBoundingBox'%20width='1'%20height='1'%3e%3cuse%20xlink:href='%23image0_1936_8376'%20transform='scale(0.00227273)'/%3e%3c/pattern%3e%3cimage%20id='image0_1936_8376'%20width='440'%20height='440'%20xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbgAAAG4CAYAAAA3yvKzAAAMbGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkJDQAghICb0JIjWAlBBaAOndRkgCCSXGhKBiL4sKrl1EsaKrIgqWFRALiF1ZFHtfLKgo66IuNlTehAR03Ve+d/LNvX/OnPlPuXPLAUDzA1ciyUO1AMgXF0jjw4IYqWnpDNIzgMCfPvx5c3kyCSs2NgpAGTz/Xd7dgLZQrjopuP45/19Fhy+Q8QBAxkGcyZfx8iFuBgDfwJNICwAgKvSWUwokCjwHYl0pDBDi1QqcrcS7FDhTiY8O2CTGsyG+DIAalcuVZgOgcQ/qGYW8bMij8RliFzFfJAZAcwTE/jwhlw+xIvYR+fmTFLgcYjtoL4EYxgOYmd9xZv+NP3OIn8vNHsLKvAZELVgkk+Rxp/2fpfnfkp8nH/RhAwdVKA2PV+QPa3grd1KkAlMh7hZnRscoag3xBxFfWXcAUIpQHp6ktEeNeTI2rB+84gB14XODIyE2hjhUnBcdpdJnZolCORDD3YJOFRVwEiE2gHiRQBaSoLLZIp0Ur/KF1mVJ2SyV/hxXOuBX4euBPDeJpeJ/IxRwVPyYRpEwMQViCsRWhaLkaIg1IHaW5SZEqmxGFwnZ0YM2Unm8In4riOMF4rAgJT9WmCUNjVfZl+TLBvPFtghFnGgVPlAgTAxX1gc7xeMOxA9zwS4LxKykQR6BLDVqMBe+IDhEmTv2XCBOSlDxfJAUBMUr1+IUSV6syh63EOSFKfQWELvLChNUa/HkArg5lfx4lqQgNlEZJ16Uw42IVcaDLwdRgA2CAQPI4cgEk0AOELV113fDf8qZUMAFUpANBMBJpRlckTIwI4bHBFAE/oBIAGRD64IGZgWgEOq/DGmVRyeQNTBbOLAiFzyFOB9Egjz4Xz6wSjzkLRk8gRrRP7xz4eDBePPgUMz/e/2g9puGBTVRKo180CNDc9CSGEIMJoYTQ4n2uBHuj/viUfAYCIcrzsS9B/P4Zk94SmgnPCJcJ3QQbk8UzZP+EOUY0AH5Q1W1yPy+FrgN5PTAg3A/yA6ZcX3cCDjh7tAPCw+Anj2glq2KW1EVxg/cf8vgu6uhsiO7kFHyMHIg2e7HlRoOGh5DLIpaf18fZayZQ/VmD8386J/9XfX58Bz5oyW2CDuIncVOYOexo1g9YGBNWAPWih1T4KHd9WRgdw16ix+IJxfyiP7hj6vyqaikzKXapcvls3KuQDC1QHHjsSdJpklF2cICBgu+HQQMjpjnPILh6uLqBoDiXaN8fL2NG3iHIPqt33TzfwfAr6m/v//IN11EEwD7veDtf/ibzo4JgLY6AOcO8+TSQqUOVxwI8CmhCe80Q2AKLIEdzMcVeAJfEAhCQASIAYkgDUyAVRbCfS4FU8AMMBcUg1KwHKwB68FmsA3sAnvBAVAPjoIT4Ay4CC6D6+Au3D2d4CXoAe9AH4IgJISG0BFDxAyxRhwRV4SJ+CMhSBQSj6QhGUg2IkbkyAxkPlKKrETWI1uRKmQ/chg5gZxH2pHbyEOkC3mDfEIxlIrqoiaoDToSZaIsNBJNRMej2ehktAhdgC5Fy9FKdA9ah55AL6LX0Q70JdqLAUwd08fMMSeMibGxGCwdy8Kk2CysBCvDKrEarBFe56tYB9aNfcSJOB1n4E5wB4fjSTgPn4zPwpfg6/FdeB1+Cr+KP8R78K8EGsGY4EjwIXAIqYRswhRCMaGMsINwiHAa3kudhHdEIlGfaEv0gvdiGjGHOJ24hLiRWEtsJrYTHxN7SSSSIcmR5EeKIXFJBaRi0jrSHlIT6Qqpk/RBTV3NTM1VLVQtXU2sNk+tTG232nG1K2rP1PrIWmRrsg85hswnTyMvI28nN5IvkTvJfRRtii3Fj5JIyaHMpZRTaiinKfcob9XV1S3UvdXj1EXqc9TL1fepn1N/qP6RqkN1oLKp46hy6lLqTmoz9Tb1LY1Gs6EF0tJpBbSltCraSdoD2gcNuoazBkeDrzFbo0KjTuOKxitNsqa1JktzgmaRZpnmQc1Lmt1aZC0bLbYWV2uWVoXWYa2bWr3adO1R2jHa+dpLtHdrn9d+rkPSsdEJ0eHrLNDZpnNS5zEdo1vS2XQefT59O/00vVOXqGury9HN0S3V3avbptujp6PnrpesN1WvQu+YXoc+pm+jz9HP01+mf0D/hv6nYSbDWMMEwxYPqxl2Zdh7g+EGgQYCgxKDWoPrBp8MGYYhhrmGKwzrDe8b4UYORnFGU4w2GZ026h6uO9x3OG94yfADw+8Yo8YOxvHG0423Gbca95qYmoSZSEzWmZw06TbVNw00zTFdbXrctMuMbuZvJjJbbdZk9oKhx2Ax8hjljFOMHnNj83BzuflW8zbzPgtbiySLeRa1FvctKZZMyyzL1ZYtlj1WZlZjrGZYVVvdsSZbM62F1mutz1q/t7G1SbFZaFNv89zWwJZjW2RbbXvPjmYXYDfZrtLumj3Rnmmfa7/R/rID6uDhIHSocLjkiDp6OoocNzq2jyCM8B4hHlE54qYT1YnlVOhU7fTQWd85ynmec73zq5FWI9NHrhh5duRXFw+XPJftLndH6YyKGDVvVOOoN64OrjzXCtdrbjS3ULfZbg1ur90d3QXum9xvedA9xngs9Gjx+OLp5Sn1rPHs8rLyyvDa4HWTqcuMZS5hnvMmeAd5z/Y+6v3Rx9OnwOeAz5++Tr65vrt9n4+2HS0YvX30Yz8LP67fVr8Of4Z/hv8W/44A8wBuQGXAo0DLQH7gjsBnLHtWDmsP61WQS5A06FDQe7YPeya7ORgLDgsuCW4L0QlJClkf8iDUIjQ7tDq0J8wjbHpYczghPDJ8RfhNjgmHx6ni9ER4RcyMOBVJjUyIXB/5KMohShrVOAYdEzFm1Zh70dbR4uj6GBDDiVkVcz/WNnZy7JE4YlxsXEXc0/hR8TPizybQEyYm7E54lxiUuCzxbpJdkjypJVkzeVxyVfL7lOCUlSkdqSNTZ6ZeTDNKE6U1pJPSk9N3pPeODRm7ZmznOI9xxeNujLcdP3X8+QlGE/ImHJuoOZE78WAGISMlY3fGZ24Mt5Lbm8nJ3JDZw2Pz1vJe8gP5q/ldAj/BSsGzLL+slVnPs/2yV2V3CQOEZcJuEVu0XvQ6Jzxnc8773Jjcnbn9eSl5tflq+Rn5h8U64lzxqUmmk6ZOapc4SoolHZN9Jq+Z3CONlO6QIbLxsoYCXfhR3yq3k/8kf1joX1hR+GFK8pSDU7Wniqe2TnOYtnjas6LQol+m49N501tmmM+YO+PhTNbMrbOQWZmzWmZbzl4wu3NO2Jxdcylzc+f+Ns9l3sp5f81Pmd+4wGTBnAWPfwr7qbpYo1hafHOh78LNi/BFokVti90Wr1v8tYRfcqHUpbSs9PMS3pILP4/6ufzn/qVZS9uWeS7btJy4XLz8xoqAFbtWaq8sWvl41ZhVdasZq0tW/7Vm4przZe5lm9dS1srXdpRHlTess1q3fN3n9cL11yuCKmo3GG9YvOH9Rv7GK5sCN9VsNtlcuvnTFtGWW1vDttZV2lSWbSNuK9z2dHvy9rO/MH+p2mG0o3THl53inR274nedqvKqqtptvHtZNVotr+7aM27P5b3BextqnGq21urXlu4D++T7XuzP2H/jQOSBloPMgzW/Wv+64RD9UEkdUjetrqdeWN/RkNbQfjjicEujb+OhI85Hdh41P1pxTO/YsuOU4wuO9zcVNfU2S5q7T2SfeNwyseXuydST107FnWo7HXn63JnQMyfPss42nfM7d/S8z/nDF5gX6i96Xqxr9Wg99JvHb4faPNvqLnldarjsfbmxfXT78SsBV05cDb565hrn2sXr0dfbbyTduHVz3M2OW/xbz2/n3X59p/BO39059wj3Su5r3S97YPyg8nf732s7PDuOPQx+2Poo4dHdx7zHL5/InnzuXPCU9rTsmdmzqueuz492hXZdfjH2RedLycu+7uI/tP/Y8Mru1a9/Bv7Z2pPa0/la+rr/zZK3hm93/uX+V0tvbO+Dd/nv+t6XfDD8sOsj8+PZTymfnvVN+Uz6XP7F/kvj18iv9/rz+/slXCl34FMAgwPNygLgzU4AaGkA0GHfRhmr7AUHBFH2rwMI/Ces7BcHxBOAGvj9HtcNv25uArBvO2y/IL8m7FVjaQAkegPUzW1oqESW5eaq5KLCPoXwoL//LezZSKsA+LK8v7+vsr//yzYYLOwdm8XKHlQhRNgzbIn+kpmfCf6NKPvT73L88QwUEbiDH8//AlB8kNc164p8AAAAOGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACoAIABAAAAAEAAAG4oAMABAAAAAEAAAG4AAAAAAH7VFcAAEAASURBVHgB7L0HnBzHdSZe3TOzEbsLgNgFsABIgAQBZgWKpEQCTGKQqESKQZKDJNuyrL/P9sm2CMr++fzH+SSKAChZ54vSna1gi0qWxCCREqlAIVDMIikxIRCBCJuAxeYwM133vZ7p3dnZnpmeme6erppX5GJmOlS9+qrqvXqvXr0SghMjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAhEHQEj6gT6Td89t3ZdOzJl3P2WlYn//Oauw/cam4XldxmcHyPACDACUUDgxc3nNgy8fvIPXhpI/8WipsR7P/jt1/dFga6waIiHVVBUytl7wvjw6LS8oGds+ntp2X388B3Glwwpv75i69FXo0Ij08EIMAKMQDUIHPz08guFND6y79CJP/z5a1brdFqK/obJDyDPO6vJV7V360qD2yyEOb6x6xgaqcswhMSncekqU7x5RUwAiOelNL4Ss6xvdH/+6IBqDcn0MgKMQH0jsP/21ctMkfoAeNnH0kKet+uAJX7TkwYoEsmQwhRPbt3e97Z6QqmuBNztV3RuNCxje24DEwDd7YZ45/qY1RIz0AtECh3hXsi+r6x87fDDxncF9RBOjAAjwAhEDoE9f762saFp4r2mIf4AvOs6InBkSpgP7U4Z/aPSnsXnEA0xF1+9ZefRQznXtP5aVwLujo1L/wlN/gm0aCK3VdE5RENMiOvXxcVpHQSJkcSsJ4GJzwA0vXtIs1u57chzue/wd0aAEWAEaoXAwTtOPdeUqd+Xwvg4aFgErpWCgIvvO2GJn+61RMoirY0MUznJwGRdGp/auqP3izlXtf46FwCNq7o5xzzpWk2YLKG+GWSufNupJpS4mZTCt7g0xG488S/xWOpfln+up3/mLn9hBBgB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Rqgqv49VlnCuOBiixLFo0IPFiNWIIbNba86Gv0jh5tiiZsYyEOAILgMUfuV8AhdjzSnEmnPqAhRDbNs+0jq+rn7NA+86v1SZQxIYSoAjuKE8eOQSAovXPvB6RTR+HUZzLzk0y7KQ5McVserrKdwcWsLMVk4CHMHlRMQTnE7gSEvzdVGf6XdSPiG4e269u/H/nJQn5oUESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEiiDw/21fUQrhhQi0AAAAAElFTkSuQmCC'/%3e%3c/defs%3e%3c/svg%3e", import.meta.url).href;
125
- const WalletConnectIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='%23216DFF'/%3e%3cpath%20d='M7.82421%2018.1965C7.54878%2018.1956%207.36404%2018.0185%207.18434%2017.8404C5.61069%2016.2668%204.03201%2014.6965%202.46507%2013.1145C1.83528%2012.4771%201.84871%2012.289%202.48355%2011.6256C3.5584%2010.5046%203.57687%2010.4836%204.71722%2011.5626C5.61741%2012.4141%206.47561%2013.3135%207.32457%2014.2179C7.6739%2014.589%207.91154%2014.5722%208.27682%2014.2229C9.29286%2013.2589%2010.2813%2012.2662%2011.2411%2011.2461C11.8986%2010.5407%2012.1035%2010.5491%2012.803%2011.2385C13.7653%2012.1874%2014.6428%2013.2236%2015.6563%2014.1263C16.1148%2014.5344%2016.3684%2014.6041%2016.8126%2014.1288C17.801%2013.0741%2018.8565%2012.0833%2019.8667%2011.047C20.2488%2010.6557%2020.5679%2010.6389%2020.9727%2011.0168C22.3632%2012.3134%2022.333%2012.4158%2020.9374%2013.7258C19.6005%2014.9812%2018.3435%2016.3264%2017.0553%2017.6355C16.3214%2018.3821%2016.2156%2018.3426%2015.4422%2017.68C14.3573%2016.7496%2013.4731%2015.6244%2012.4696%2014.6167C12.1371%2014.2825%2011.9162%2014.2556%2011.5803%2014.61C10.5684%2015.6739%209.61535%2016.8%208.50187%2017.7607C8.29446%2017.9395%208.11812%2018.1621%207.82421%2018.1973'%20fill='white'/%3e%3cpath%20d='M11.9418%205C14.3342%205.17298%2016.515%205.89179%2018.2373%207.88026C18.6697%208.37906%2018.6823%208.79725%2018.2675%209.27421C18.2028%209.34811%2018.1407%209.42452%2018.0743%209.49758C17.0474%2010.643%2017.0474%2010.643%2015.954%209.58659C13.6666%207.37559%2010.3027%207.39826%208.03205%209.64033C7.87586%209.79484%207.72051%209.95019%207.5702%2010.1106C7.18225%2010.5262%206.86483%2010.5178%206.45084%2010.0711C5.0485%208.5596%205.02247%208.5638%206.51634%207.17237C8.07908%205.71713%209.95167%205.17214%2011.9418%205Z'%20fill='white'/%3e%3c/svg%3e", import.meta.url).href;
126
- const OntoIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='white'/%3e%3cpath%20d='M4%203L6.79044%205.78909C7.92085%204.88432%209.28103%204.31246%2010.7184%204.1377C12.1557%203.96293%2013.6133%204.19216%2014.9276%204.79967C16.2418%205.40718%2017.3608%206.36893%2018.159%207.577C18.9571%208.78507%2019.4028%2010.1917%2019.446%2011.6389V11.8645V21L16.6556%2018.2116C15.5251%2019.1154%2014.1652%2019.6864%2012.7284%2019.8606C11.2917%2020.0349%209.83473%2019.8054%208.52103%2019.198C7.20733%2018.5906%206.08879%2017.6293%205.29085%2016.4218C4.4929%2015.2143%204.04708%2013.8084%204.00339%2012.3618L4%2012.1355V3ZM5.90839%207.6067V12.1355C5.90923%2013.2008%206.19949%2014.2459%206.74817%2015.1591C7.29684%2016.0722%208.08331%2016.8192%209.02353%2017.3201C9.96376%2017.821%2011.0224%2018.057%2012.0864%2018.0029C13.1503%2017.9489%2014.1796%2017.6068%2015.0642%2017.0132L15.2153%2016.9082L6.28099%207.9793L5.90839%207.6067ZM8.38178%206.98683L8.23071%207.09183L17.165%2016.0214L17.5376%2016.394V11.8645C17.5368%2010.7992%2017.2465%209.7541%2016.6978%208.84093C16.1491%207.92777%2015.3627%207.18083%2014.4225%206.67993C13.4822%206.17903%2012.4236%205.943%2011.3596%205.99706C10.2957%206.05111%209.2664%206.39322%208.38178%206.98683Z'%20fill='black'/%3e%3c/svg%3e", import.meta.url).href;
127
- const BitgetIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_2600_5842)'%3e%3cpath%20d='M16%200H8C3.58172%200%200%203.58172%200%208V16C0%2020.4183%203.58172%2024%208%2024H16C20.4183%2024%2024%2020.4183%2024%2016V8C24%203.58172%2020.4183%200%2016%200Z'%20fill='white'/%3e%3cmask%20id='mask0_2600_5842'%20style='mask-type:alpha'%20maskUnits='userSpaceOnUse'%20x='0'%20y='0'%20width='24'%20height='24'%3e%3cpath%20d='M16%200H8C3.58172%200%200%203.58172%200%208V16C0%2020.4183%203.58172%2024%208%2024H16C20.4183%2024%2024%2020.4183%2024%2016V8C24%203.58172%2020.4183%200%2016%200Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_2600_5842)'%3e%3cg%20filter='url(%23filter0_f_2600_5842)'%3e%3cpath%20d='M26.0859%20-6.75C26.0859%204.56321%2016.9148%2013.7344%205.60156%2013.7344C-5.71165%2013.7344%20-14.8828%204.56321%20-14.8828%20-6.75C-14.8828%20-18.0632%20-5.71165%20-27.2344%205.60156%20-27.2344C16.9148%20-27.2344%2026.0859%20-18.0632%2026.0859%20-6.75Z'%20fill='%2333FFF3'/%3e%3c/g%3e%3cg%20filter='url(%23filter1_f_2600_5842)'%3e%3cpath%20d='M9.5625%2022.957C9.5625%2027.4423%205.92657%2031.0781%201.44141%2031.0781C-3.04376%2031.0781%20-6.67969%2027.4423%20-6.67969%2022.957C-6.67969%2018.4719%20-3.04376%2014.8359%201.44141%2014.8359C5.92657%2014.8359%209.5625%2018.4719%209.5625%2022.957Z'%20fill='url(%23paint0_linear_2600_5842)'%20fill-opacity='0.87'/%3e%3c/g%3e%3cg%20filter='url(%23filter2_f_2600_5842)'%3e%3cpath%20d='M49.5%2042.2578C49.5%2053.5711%2040.3289%2062.7422%2029.0156%2062.7422C17.7024%2062.7422%208.53125%2053.5711%208.53125%2042.2578C8.53125%2030.9445%2017.7024%2021.7734%2029.0156%2021.7734C40.3289%2021.7734%2049.5%2030.9445%2049.5%2042.2578Z'%20fill='%2333FFF3'/%3e%3c/g%3e%3cg%20filter='url(%23filter3_f_2600_5842)'%3e%3cpath%20d='M26.0391%20-1.66406C26.0391%201.92147%2023.1324%204.82812%2019.5469%204.82812C15.9613%204.82812%2013.0547%201.92147%2013.0547%20-1.66406C13.0547%20-5.2496%2015.9613%20-8.15625%2019.5469%20-8.15625C23.1324%20-8.15625%2026.0391%20-5.2496%2026.0391%20-1.66406Z'%20fill='%2353C0FB'/%3e%3c/g%3e%3c/g%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M14.1111%203.63526C14.1335%203.61077%2014.1559%203.58628%2014.1786%203.56211L14.1789%203.56139C14.175%203.55316%2014.1707%203.54493%2014.1664%203.53668L14.1664%203.53664C14.1549%203.53544%2014.1434%203.53387%2014.1319%203.53228C14.1088%203.52909%2014.0856%203.52588%2014.0626%203.52588C13.6357%203.5256%2013.2085%203.52196%2012.781%203.51833C11.8354%203.51027%2010.889%203.50221%209.94501%203.53054C9.8897%203.53197%209.82326%203.56389%209.78301%203.60336C9.56315%203.81772%209.34682%204.03562%209.1304%204.25361C9.07987%204.3045%209.02934%204.3554%208.97876%204.40626C8.79524%204.59078%208.61182%204.77547%208.42837%204.96018C8.13468%205.25594%207.84091%205.55175%207.54663%205.84699C7.36675%206.02713%207.18642%206.2068%207.00609%206.3865C6.79569%206.59614%206.5853%206.80579%206.37562%207.01617C6.16108%207.23182%205.94716%207.4481%205.73325%207.6644C5.55501%207.84461%205.37676%208.02485%205.19815%208.20471C5.07098%208.33277%204.94317%208.46015%204.81537%208.58751C4.63886%208.76341%204.46237%208.93931%204.28758%209.11699C4.07528%209.33261%204.01495%209.68202%204.1755%209.93531C4.28216%2010.1044%204.42867%2010.2506%204.5719%2010.3936L4.58357%2010.4053C4.96429%2010.7855%205.3478%2011.1632%205.73133%2011.5408C5.91733%2011.724%206.10335%2011.9072%206.28905%2012.0907C6.47772%2012.2771%206.66613%2012.4639%206.85459%2012.6506C7.00523%2012.7999%207.15588%2012.9492%207.30668%2013.0984C7.38648%2013.1774%207.46624%2013.2565%207.546%2013.3356C7.888%2013.6746%208.22993%2014.0136%208.57537%2014.349C8.61705%2014.3896%208.69031%2014.4179%208.74888%2014.4179C10.0646%2014.4222%2011.3804%2014.4218%2012.6962%2014.4208C12.7156%2014.4205%2012.735%2014.4121%2012.7544%2014.4036C12.7637%2014.3996%2012.773%2014.3956%2012.7824%2014.3924C12.7779%2014.3843%2012.774%2014.3758%2012.7701%2014.3672C12.7622%2014.3496%2012.7542%2014.332%2012.7414%2014.3192C12.629%2014.2059%2012.516%2014.0929%2012.403%2013.98C12.2901%2013.8671%2012.1771%2013.7542%2012.0647%2013.6408C11.8397%2013.4143%2011.6151%2013.1873%2011.3905%2012.9604C11.1659%2012.7333%2010.9413%2012.5063%2010.7162%2012.2797C10.1131%2011.6724%209.50931%2011.0661%208.90512%2010.4598C8.65907%2010.213%208.41194%209.96688%208.16482%209.72114C8.0653%209.62211%208.0646%209.61494%208.15619%209.52311C8.2033%209.47591%208.25004%209.42835%208.29677%209.38078C8.36303%209.31335%208.42931%209.24589%208.49672%209.17943C8.67972%208.99886%208.86305%208.81849%209.04637%208.63814C9.33983%208.34941%209.63334%208.06066%209.92561%207.77097C10.1823%207.51658%2010.438%207.26123%2010.6937%207.00593C10.9067%206.79316%2011.1198%206.58042%2011.3333%206.36826C11.454%206.2484%2011.5756%206.12941%2011.6972%206.01042C11.8249%205.88538%2011.9526%205.76034%2012.0794%205.63425C12.1843%205.5299%2012.2883%205.42455%2012.3923%205.31917C12.5419%205.16765%2012.6915%205.01613%2012.8438%204.8676C13.0639%204.65282%2013.2862%204.43996%2013.5085%204.2271C13.6612%204.08085%2013.8139%203.9346%2013.9659%203.78777C14.0162%203.73902%2014.0636%203.68715%2014.1111%203.63526ZM9.80814%2020.4998C9.80802%2020.4999%209.80793%2020.5%209.80781%2020.5001V20.4998C9.80793%2020.4998%209.80802%2020.4998%209.80814%2020.4998ZM9.80814%2020.4998C10.3735%2020.4998%2010.9515%2020.5036%2011.5319%2020.5074C12.3677%2020.5129%2013.2084%2020.5184%2014.023%2020.5127C14.0809%2020.5123%2014.1531%2020.4951%2014.1933%2020.4582C14.3316%2020.3316%2014.4637%2020.198%2014.5957%2020.0645C14.619%2020.041%2014.6423%2020.0174%2014.6657%2019.9939C14.9028%2019.7551%2015.1397%2019.516%2015.3766%2019.277C15.7318%2018.9185%2016.087%2018.56%2016.443%2018.2023C16.9423%2017.7007%2017.4421%2017.1996%2017.942%2016.6984C18.2275%2016.412%2018.5131%2016.1257%2018.7986%2015.8393C18.882%2015.7557%2018.9656%2015.6724%2019.0493%2015.5892C19.2722%2015.3672%2019.4952%2015.1452%2019.7128%2014.918C19.9028%2014.7196%2019.9495%2014.4814%2019.8719%2014.2138C19.8247%2014.0512%2019.713%2013.9407%2019.6013%2013.8302C19.589%2013.8181%2019.5767%2013.8059%2019.5645%2013.7937C19.3393%2013.5683%2019.1125%2013.3448%2018.8857%2013.1211C18.7261%2012.9638%2018.5665%2012.8065%2018.4075%2012.6485C18.1675%2012.41%2017.9281%2012.1708%2017.6887%2011.9317C17.4893%2011.7324%2017.2898%2011.533%2017.0899%2011.3341C16.9052%2011.1503%2016.7203%2010.9669%2016.5354%2010.7834C16.1823%2010.4331%2015.8293%2010.0828%2015.4778%209.73082C15.4027%209.65584%2015.3266%209.6196%2015.2181%209.62033C14.6488%209.62375%2014.0793%209.62354%2013.51%209.62331C13.3676%209.62324%2013.2253%209.62319%2013.083%209.62319C12.9198%209.6231%2012.7566%209.62286%2012.5934%209.62265C12.1855%209.62209%2011.7775%209.62155%2011.3696%209.62284C11.338%209.62307%2011.3064%209.63404%2011.275%209.64499C11.2601%209.65019%2011.2452%209.65539%2011.2302%209.65943C11.2378%209.67161%2011.2448%209.68443%2011.2518%209.69723C11.2669%209.7251%2011.2821%209.75294%2011.3035%209.77457C11.4959%209.96906%2011.6894%2010.1626%2011.8828%2010.3562C11.9869%2010.4604%2012.0911%2010.5646%2012.1951%2010.6689C12.6498%2011.1253%2013.1042%2011.5818%2013.5586%2012.0384C13.7104%2012.191%2013.8622%2012.3435%2014.0141%2012.4961L14.0177%2012.4997C14.6286%2013.1131%2015.2398%2013.7267%2015.8507%2014.3404C15.9362%2014.4261%2015.9365%2014.4279%2015.8503%2014.514C15.5288%2014.8342%2015.2069%2015.154%2014.8849%2015.4738C14.8043%2015.5539%2014.7236%2015.6339%2014.643%2015.7141L14.6391%2015.7179C13.8821%2016.4693%2013.1255%2017.2203%2012.3689%2017.972C12.2165%2018.1233%2012.0645%2018.2751%2011.9126%2018.4268C11.6509%2018.6881%2011.3892%2018.9493%2011.1254%2019.2083C10.8876%2019.4419%2010.6473%2019.6732%2010.4071%2019.9045C10.2688%2020.0376%2010.1306%2020.1707%209.9928%2020.3042C9.95322%2020.3428%209.91574%2020.3835%209.87362%2020.4292C9.85316%2020.4514%209.83158%2020.4748%209.80814%2020.4998Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cfilter%20id='filter0_f_2600_5842'%20x='-28.9453'%20y='-41.2969'%20width='69.0938'%20height='69.0938'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='7.03125'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3cfilter%20id='filter1_f_2600_5842'%20x='-16.0547'%20y='5.46094'%20width='34.9922'%20height='34.9922'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='4.6875'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3cfilter%20id='filter2_f_2600_5842'%20x='-0.84375'%20y='12.3984'%20width='59.7188'%20height='59.7188'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='4.6875'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3cfilter%20id='filter3_f_2600_5842'%20x='6.02344'%20y='-15.1875'%20width='27.0469'%20height='27.0469'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='3.51562'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3clinearGradient%20id='paint0_linear_2600_5842'%20x1='1.01953'%20y1='21.7852'%20x2='8.66016'%20y2='18.457'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0.442707'%20stop-color='%239D95FE'/%3e%3cstop%20offset='1'%20stop-color='%23E395FE'/%3e%3c/linearGradient%3e%3cclipPath%20id='clip0_2600_5842'%3e%3crect%20width='24'%20height='24'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e", import.meta.url).href;
128
- const OkxIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='white'/%3e%3cpath%20d='M5%205H9.66667V9.66667H5V5ZM14.3333%205H19V9.66667H14.3333V5ZM5%2014.3333H9.66667V19H5V14.3333ZM14.3333%2014.3333H19V19H14.3333V14.3333ZM9.66667%209.66667H14.3333V14.3333H9.66667V9.66667Z'%20fill='%23010101'/%3e%3c/svg%3e", import.meta.url).href;
129
- const EVM_WALLETS = [
130
- {
131
- id: "metamask",
132
- name: "MetaMask",
133
- icon: MetaMaskIcon,
134
- downloadUrl: "https://metamask.io/download/",
135
- checkInstalled: () => typeof window !== "undefined" && Boolean(window.ethereum)
136
- },
137
- {
138
- id: "walletconnect",
139
- name: "WalletConnect",
140
- icon: WalletConnectIcon,
141
- downloadUrl: "https://walletconnect.com/",
142
- checkInstalled: () => false
143
- // WalletConnect 不需要安装
144
- },
145
- {
146
- id: "onto",
147
- name: "ONTO",
148
- icon: OntoIcon,
149
- downloadUrl: "https://onto.app/",
150
- checkInstalled: () => typeof window !== "undefined" && Boolean(window.onto)
151
- },
152
- {
153
- id: "bitget",
154
- name: "Bitget Wallet",
155
- icon: BitgetIcon,
156
- downloadUrl: "https://web3.bitget.com/",
157
- checkInstalled: () => {
158
- var _a;
159
- return typeof window !== "undefined" && Boolean((_a = window.bitkeep) == null ? void 0 : _a.ethereum);
160
- }
161
- },
162
- {
163
- id: "okx",
164
- name: "OKX Wallet",
165
- icon: OkxIcon,
166
- downloadUrl: "https://www.okx.com/web3",
167
- checkInstalled: () => typeof window !== "undefined" && Boolean(window.okxwallet)
168
- }
169
- ];
170
13
  const DEFAULT_OAUTH_TOOL_URL = "https://generalauthservice.com";
171
14
  const OAUTH_POPUP_CONFIG = {
172
15
  /** 窗口宽度 */
@@ -235,8 +78,11 @@ function useBindSocialAccount({
235
78
  }, [onSuccess]);
236
79
  const handleFailed = useCallback((error2) => {
237
80
  var _a2;
238
- toast.error(error2);
239
- onFailed == null ? void 0 : onFailed(error2);
81
+ if (onFailed) {
82
+ onFailed(error2);
83
+ } else {
84
+ toast.error(error2);
85
+ }
240
86
  (_a2 = bindWaitResolveRef.current) == null ? void 0 : _a2.call(bindWaitResolveRef, false);
241
87
  bindWaitResolveRef.current = null;
242
88
  }, [onFailed, toast]);
@@ -360,31 +206,6 @@ function useBindSocialAccount({
360
206
  isBound
361
207
  };
362
208
  }
363
- const VIEWPORT_BREAKPOINTS = {
364
- mobileMax: 750
365
- };
366
- const MOBILE_MAX_WIDTH = VIEWPORT_BREAKPOINTS.mobileMax;
367
- function isMobileViewport(width) {
368
- return width <= MOBILE_MAX_WIDTH;
369
- }
370
- function useIsMobile() {
371
- const [isMobile, setIsMobile] = useState(() => {
372
- if (typeof window === "undefined") return false;
373
- return isMobileViewport(window.innerWidth);
374
- });
375
- const handleResize = useCallback(() => {
376
- setIsMobile(isMobileViewport(window.innerWidth));
377
- }, []);
378
- useEffect(() => {
379
- if (typeof window === "undefined") return;
380
- handleResize();
381
- window.addEventListener("resize", handleResize);
382
- return () => {
383
- window.removeEventListener("resize", handleResize);
384
- };
385
- }, [handleResize]);
386
- return isMobile;
387
- }
388
209
  function useChainMap() {
389
210
  const { chains } = useTaskOnContext();
390
211
  const chainMap = useMemo(() => {
@@ -751,14 +572,14 @@ function parseStandardNftValue(value) {
751
572
  };
752
573
  }
753
574
  function useNftClaim(options = {}) {
754
- const { onSuccess, onError, onPendingFound, onNeedWalletDialog } = options;
575
+ const { onSuccess, onError, onPendingFound } = options;
755
576
  const { client, userId, userInfo, refreshUserInfo } = useTaskOnContext();
756
577
  const { evmAdapter, evmAddress, evmChainId, isEvmConnected, connectEvm } = useWallet();
757
578
  const { chainMap } = useChainMap();
758
579
  const [status, setStatus] = useState("idle");
759
580
  const [error2, setError] = useState(null);
760
581
  const [txHash, setTxHash] = useState(null);
761
- const [claimingNft2, setClaimingNft] = useState(null);
582
+ const [claimingNft, setClaimingNft] = useState(null);
762
583
  const api = useMemo(() => {
763
584
  if (!client) return null;
764
585
  return createNftClaimApi(client);
@@ -767,7 +588,7 @@ function useNftClaim(options = {}) {
767
588
  if (!client) return null;
768
589
  return createUserApi(client);
769
590
  }, [client]);
770
- const claimNft2 = useCallback(
591
+ const claimNft = useCallback(
771
592
  async (item, adapterOverride) => {
772
593
  var _a;
773
594
  if (!api) {
@@ -824,9 +645,10 @@ function useNftClaim(options = {}) {
824
645
  setStatus("connecting");
825
646
  const activeAdapter = adapterOverride ?? evmAdapter;
826
647
  if (!(activeAdapter == null ? void 0 : activeAdapter.invokeContract)) {
827
- onNeedWalletDialog == null ? void 0 : onNeedWalletDialog();
828
- setStatus("idle");
829
- return;
648
+ throw new NftClaimError(
649
+ NftClaimErrorType.ApiError,
650
+ "No available wallet adapter"
651
+ );
830
652
  }
831
653
  let walletAddress = null;
832
654
  if (adapterOverride) {
@@ -994,7 +816,6 @@ function useNftClaim(options = {}) {
994
816
  evmChainId,
995
817
  isEvmConnected,
996
818
  connectEvm,
997
- onNeedWalletDialog,
998
819
  onSuccess,
999
820
  onError,
1000
821
  onPendingFound
@@ -1018,506 +839,123 @@ function useNftClaim(options = {}) {
1018
839
  status,
1019
840
  error: error2,
1020
841
  txHash,
1021
- claimingNft: claimingNft2,
1022
- claimNft: claimNft2,
842
+ claimingNft,
843
+ claimNft,
1023
844
  reset,
1024
845
  clearPending
1025
846
  };
1026
847
  }
1027
- function LoadingSpinner() {
1028
- return /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-spinner", children: /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-spinner__circle" }) });
1029
- }
1030
- function SuccessIcon() {
1031
- return /* @__PURE__ */ jsxs(
1032
- "svg",
1033
- {
1034
- className: "taskon-claim-dialog-icon taskon-claim-dialog-icon--success",
1035
- viewBox: "0 0 24 24",
1036
- fill: "none",
1037
- xmlns: "http://www.w3.org/2000/svg",
1038
- children: [
1039
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }),
848
+ const Input = forwardRef(
849
+ function Input2({
850
+ value,
851
+ onChange,
852
+ type = "text",
853
+ inputMode,
854
+ maxLength,
855
+ disabled = false,
856
+ placeholder,
857
+ hasError = false,
858
+ error: error2,
859
+ className,
860
+ autoFocus = false,
861
+ onBlur,
862
+ onFocus,
863
+ onEnter,
864
+ rightSlot,
865
+ formatValue
866
+ }, ref) {
867
+ const inputRef = useRef(null);
868
+ const isError = hasError || !!error2;
869
+ const focus = useCallback(() => {
870
+ var _a;
871
+ (_a = inputRef.current) == null ? void 0 : _a.focus();
872
+ }, []);
873
+ const blur = useCallback(() => {
874
+ var _a;
875
+ (_a = inputRef.current) == null ? void 0 : _a.blur();
876
+ }, []);
877
+ const getElement = useCallback(() => {
878
+ return inputRef.current;
879
+ }, []);
880
+ useImperativeHandle(
881
+ ref,
882
+ () => ({
883
+ focus,
884
+ blur,
885
+ getElement
886
+ }),
887
+ [focus, blur, getElement]
888
+ );
889
+ useEffect(() => {
890
+ var _a;
891
+ if (autoFocus) {
892
+ (_a = inputRef.current) == null ? void 0 : _a.focus();
893
+ }
894
+ }, [autoFocus]);
895
+ const handleChange = useCallback(
896
+ (e) => {
897
+ let newValue = e.target.value;
898
+ if (formatValue) {
899
+ newValue = formatValue(newValue);
900
+ }
901
+ onChange(newValue);
902
+ },
903
+ [onChange, formatValue]
904
+ );
905
+ const handleKeyDown = useCallback(
906
+ (e) => {
907
+ if (e.key === "Enter" && onEnter) {
908
+ onEnter(e);
909
+ }
910
+ },
911
+ [onEnter]
912
+ );
913
+ const needWrapper = rightSlot || error2;
914
+ const inputElement = /* @__PURE__ */ jsx(
915
+ "input",
916
+ {
917
+ ref: inputRef,
918
+ className: `taskon-input ${isError ? "taskon-input--error" : ""} ${!needWrapper ? className || "" : ""}`,
919
+ type,
920
+ inputMode,
921
+ value,
922
+ onChange: handleChange,
923
+ maxLength,
924
+ disabled,
925
+ placeholder,
926
+ onBlur,
927
+ onFocus,
928
+ onKeyDown: handleKeyDown
929
+ }
930
+ );
931
+ if (!needWrapper) {
932
+ return inputElement;
933
+ }
934
+ return /* @__PURE__ */ jsxs("div", { className: `taskon-input-wrapper ${className || ""}`, children: [
935
+ /* @__PURE__ */ jsxs("div", { className: `taskon-input-container ${isError ? "taskon-input-container--error" : ""}`, children: [
1040
936
  /* @__PURE__ */ jsx(
1041
- "path",
937
+ "input",
1042
938
  {
1043
- d: "M8 12L11 15L16 9",
1044
- stroke: "currentColor",
1045
- strokeWidth: "2",
1046
- strokeLinecap: "round",
1047
- strokeLinejoin: "round"
1048
- }
1049
- )
1050
- ]
1051
- }
1052
- );
1053
- }
1054
- function ErrorIcon() {
1055
- return /* @__PURE__ */ jsxs(
1056
- "svg",
1057
- {
1058
- className: "taskon-claim-dialog-icon taskon-claim-dialog-icon--error",
1059
- viewBox: "0 0 24 24",
1060
- fill: "none",
1061
- xmlns: "http://www.w3.org/2000/svg",
1062
- children: [
1063
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }),
1064
- /* @__PURE__ */ jsx(
1065
- "path",
1066
- {
1067
- d: "M15 9L9 15M9 9L15 15",
1068
- stroke: "currentColor",
1069
- strokeWidth: "2",
1070
- strokeLinecap: "round"
1071
- }
1072
- )
1073
- ]
1074
- }
1075
- );
1076
- }
1077
- function getStatusMessage(status, messages) {
1078
- switch (status) {
1079
- case "checking":
1080
- return (messages == null ? void 0 : messages.claimingNft) ?? "Claiming NFT...";
1081
- case "connecting":
1082
- return (messages == null ? void 0 : messages.claimConnectingWallet) ?? "Connecting wallet...";
1083
- case "switching":
1084
- return (messages == null ? void 0 : messages.claimSwitchingNetwork) ?? "Switching network...";
1085
- case "signing":
1086
- return (messages == null ? void 0 : messages.claimGettingSignature) ?? "Getting signature...";
1087
- case "confirming":
1088
- return (messages == null ? void 0 : messages.claimConfirmInWallet) ?? "Please confirm in your wallet";
1089
- case "pending":
1090
- return (messages == null ? void 0 : messages.claimTransactionPending) ?? "Transaction pending...";
1091
- case "success":
1092
- return (messages == null ? void 0 : messages.claimSuccess) ?? "Claim successful!";
1093
- case "error":
1094
- return (messages == null ? void 0 : messages.claimFailed) ?? "Claim failed";
1095
- default:
1096
- return "";
1097
- }
1098
- }
1099
- function getErrorMessage(error2, messages) {
1100
- if (error2.isUserCancelled()) {
1101
- return (messages == null ? void 0 : messages.claimCanceled) ?? DEFAULT_ERROR_MESSAGES[NftClaimErrorType.WalletRejected];
1102
- }
1103
- const readableMessage = typeof error2.message === "string" ? error2.message.trim() : "";
1104
- if (readableMessage && readableMessage !== "[object Object]") {
1105
- return readableMessage;
1106
- }
1107
- return (messages == null ? void 0 : messages.claimFailed) ?? DEFAULT_ERROR_MESSAGES[error2.type] ?? DEFAULT_ERROR_MESSAGES[NftClaimErrorType.Unknown];
1108
- }
1109
- function formatTxHash$1(hash) {
1110
- if (hash.length <= 16) return hash;
1111
- return `${hash.slice(0, 10)}...${hash.slice(-6)}`;
1112
- }
1113
- function ClaimNftDialog({
1114
- open,
1115
- onClose,
1116
- status,
1117
- error: error2,
1118
- txHash,
1119
- claimingNft: claimingNft2,
1120
- explorerUrl,
1121
- messages,
1122
- onRetry
1123
- }) {
1124
- const isLoading = [
1125
- "checking",
1126
- "connecting",
1127
- "switching",
1128
- "signing",
1129
- "confirming",
1130
- "pending"
1131
- ].includes(status);
1132
- const canClose = status === "success" || status === "error" || status === "idle";
1133
- const handleClose = () => {
1134
- if (canClose) {
1135
- onClose();
1136
- }
1137
- };
1138
- const handleViewTx = () => {
1139
- if (explorerUrl) {
1140
- window.open(explorerUrl, "_blank", "noopener,noreferrer");
1141
- }
1142
- };
1143
- return /* @__PURE__ */ jsx(
1144
- Dialog,
1145
- {
1146
- open,
1147
- onOpenChange: (isOpen) => {
1148
- if (!isOpen && canClose) {
1149
- onClose();
1150
- }
1151
- },
1152
- title: (messages == null ? void 0 : messages.claimNft) ?? "Claim NFT",
1153
- showCloseButton: canClose,
1154
- contentClassName: "taskon-claim-dialog",
1155
- maxWidth: 400,
1156
- children: /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-content", children: [
1157
- claimingNft2 && /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-nft", children: claimingNft2.item.reward_value.collection_image && /* @__PURE__ */ jsx(
1158
- "img",
1159
- {
1160
- src: claimingNft2.item.reward_value.collection_image,
1161
- alt: "NFT",
1162
- className: "taskon-claim-dialog-nft__image"
1163
- }
1164
- ) }),
1165
- /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-status", children: [
1166
- isLoading && /* @__PURE__ */ jsx(LoadingSpinner, {}),
1167
- status === "success" && /* @__PURE__ */ jsx(SuccessIcon, {}),
1168
- status === "error" && /* @__PURE__ */ jsx(ErrorIcon, {})
1169
- ] }),
1170
- /* @__PURE__ */ jsx("p", { className: "taskon-claim-dialog-message", children: status === "error" && error2 ? getErrorMessage(error2, messages) : getStatusMessage(status, messages) }),
1171
- txHash && (status === "pending" || status === "success") && /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-tx", children: [
1172
- /* @__PURE__ */ jsx("span", { className: "taskon-claim-dialog-tx__label", children: "Tx:" }),
1173
- /* @__PURE__ */ jsx("span", { className: "taskon-claim-dialog-tx__hash", children: formatTxHash$1(txHash) })
1174
- ] }),
1175
- /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-actions", children: [
1176
- txHash && explorerUrl && /* @__PURE__ */ jsx(
1177
- "button",
1178
- {
1179
- type: "button",
1180
- className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--secondary",
1181
- onClick: handleViewTx,
1182
- children: (messages == null ? void 0 : messages.viewOnExplorer) ?? "View on Explorer"
1183
- }
1184
- ),
1185
- status === "error" && onRetry && /* @__PURE__ */ jsx(
1186
- "button",
1187
- {
1188
- type: "button",
1189
- className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--primary",
1190
- onClick: onRetry,
1191
- children: (messages == null ? void 0 : messages.retry) ?? "Retry"
1192
- }
1193
- ),
1194
- canClose && /* @__PURE__ */ jsx(
1195
- "button",
1196
- {
1197
- type: "button",
1198
- className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--primary",
1199
- onClick: handleClose,
1200
- children: (messages == null ? void 0 : messages.close) ?? "Close"
1201
- }
1202
- )
1203
- ] })
1204
- ] })
1205
- }
1206
- );
1207
- }
1208
- function formatTxHash(hash) {
1209
- if (hash.length <= 16) return hash;
1210
- return `${hash.slice(0, 10)}...${hash.slice(-6)}`;
1211
- }
1212
- function PendingTxDialog({
1213
- open,
1214
- onClose,
1215
- onClaimAgain,
1216
- onContinueWaiting,
1217
- txHash,
1218
- explorerUrl,
1219
- receiveAddress: receiveAddress2,
1220
- messages
1221
- }) {
1222
- const title = (messages == null ? void 0 : messages.claimPendingTitle) ?? "You have already claimed this NFT, please wait for this transaction to be confirmed.";
1223
- const checkExplorerText = (messages == null ? void 0 : messages.claimPendingCheckExplorer) ?? "You can check this transaction on explorer:";
1224
- const hashLabel = (messages == null ? void 0 : messages.claimPendingHashLabel) ?? "Transaction hash:";
1225
- const claimAgainWarn = (messages == null ? void 0 : messages.claimPendingClaimAgainWarn) ?? '"Claim Again" will send a new transaction it is only recommended when you are sure there is something wrong with the current transaction.';
1226
- const receiveAddressNoChange = (messages == null ? void 0 : messages.claimPendingReceiveAddressNoChange) ?? "This receive address can’t be changed:";
1227
- const handleViewTx = () => {
1228
- if (explorerUrl) {
1229
- openInNewTab(explorerUrl);
1230
- }
1231
- };
1232
- return /* @__PURE__ */ jsx(
1233
- Dialog,
1234
- {
1235
- open,
1236
- onOpenChange: (isOpen) => {
1237
- if (!isOpen) {
1238
- onClose();
1239
- }
1240
- },
1241
- title: (messages == null ? void 0 : messages.pendingTransaction) ?? "Pending Transaction",
1242
- showCloseButton: true,
1243
- contentClassName: "taskon-pending-dialog",
1244
- maxWidth: 460,
1245
- children: /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-content", children: [
1246
- /* @__PURE__ */ jsx("p", { className: "taskon-pending-dialog-title", children: title }),
1247
- txHash && /* @__PURE__ */ jsx("p", { className: "taskon-pending-dialog-desc", children: checkExplorerText }),
1248
- txHash && /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-hash-wrap", children: [
1249
- /* @__PURE__ */ jsx("span", { className: "taskon-pending-dialog-hash-label", children: hashLabel }),
1250
- explorerUrl ? /* @__PURE__ */ jsx(
1251
- "button",
1252
- {
1253
- type: "button",
1254
- className: "taskon-pending-dialog-hash-link",
1255
- onClick: handleViewTx,
1256
- children: formatTxHash(txHash)
1257
- }
1258
- ) : /* @__PURE__ */ jsx("span", { className: "taskon-pending-dialog-hash-value", children: formatTxHash(txHash) })
1259
- ] }),
1260
- /* @__PURE__ */ jsxs("ul", { className: "taskon-pending-dialog-notice-list", children: [
1261
- /* @__PURE__ */ jsx("li", { className: "taskon-pending-dialog-notice-item", children: claimAgainWarn }),
1262
- receiveAddress2 && /* @__PURE__ */ jsxs("li", { className: "taskon-pending-dialog-notice-item", children: [
1263
- /* @__PURE__ */ jsx("div", { children: receiveAddressNoChange }),
1264
- /* @__PURE__ */ jsx("div", { className: "taskon-pending-dialog-receive-address", children: receiveAddress2 })
1265
- ] })
1266
- ] }),
1267
- /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-actions", children: [
1268
- /* @__PURE__ */ jsx(
1269
- "button",
1270
- {
1271
- type: "button",
1272
- className: "taskon-pending-dialog-btn taskon-pending-dialog-btn--secondary",
1273
- onClick: onClaimAgain,
1274
- children: (messages == null ? void 0 : messages.claimAgain) ?? "Claim Again"
1275
- }
1276
- ),
1277
- /* @__PURE__ */ jsx(
1278
- "button",
1279
- {
1280
- type: "button",
1281
- className: "taskon-pending-dialog-btn taskon-pending-dialog-btn--primary",
1282
- onClick: onContinueWaiting,
1283
- children: (messages == null ? void 0 : messages.continueWaiting) ?? "Continue Waiting"
1284
- }
1285
- )
1286
- ] })
1287
- ] })
1288
- }
1289
- );
1290
- }
1291
- function getWalletProvider(walletId) {
1292
- var _a;
1293
- if (typeof window === "undefined") return null;
1294
- switch (walletId) {
1295
- case "metamask":
1296
- return window.ethereum;
1297
- case "onto":
1298
- return window.onto;
1299
- case "bitget":
1300
- return (_a = window.bitkeep) == null ? void 0 : _a.ethereum;
1301
- case "okx":
1302
- return window.okxwallet;
1303
- default:
1304
- return null;
1305
- }
1306
- }
1307
- async function checkWalletConnectAvailable() {
1308
- try {
1309
- await import("@walletconnect/ethereum-provider");
1310
- return true;
1311
- } catch {
1312
- return false;
1313
- }
1314
- }
1315
- function ConnectLoading({ walletName }) {
1316
- return /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-loading-overlay", children: [
1317
- /* @__PURE__ */ jsx("svg", { className: "taskon-bind-wallet-loading-spinner", viewBox: "0 0 50 50", children: /* @__PURE__ */ jsx(
1318
- "circle",
1319
- {
1320
- cx: "25",
1321
- cy: "25",
1322
- r: "20",
1323
- fill: "none",
1324
- stroke: "currentColor",
1325
- strokeWidth: "4",
1326
- strokeLinecap: "round",
1327
- strokeDasharray: "80 60"
1328
- }
1329
- ) }),
1330
- /* @__PURE__ */ jsxs("p", { className: "taskon-bind-wallet-loading-text", children: [
1331
- "Please log in to ",
1332
- walletName,
1333
- " and sign message to proceed"
1334
- ] })
1335
- ] });
1336
- }
1337
- function WalletItem({
1338
- wallet,
1339
- isInstalled,
1340
- isConnecting,
1341
- isDisabled,
1342
- disabledReason,
1343
- onClick
1344
- }) {
1345
- return /* @__PURE__ */ jsxs(
1346
- "button",
1347
- {
1348
- type: "button",
1349
- className: `taskon-bind-wallet-item ${isConnecting ? "taskon-bind-wallet-item--connecting" : ""} ${isDisabled ? "taskon-bind-wallet-item--disabled" : ""}`,
1350
- onClick,
1351
- disabled: isConnecting || isDisabled,
1352
- title: disabledReason,
1353
- children: [
1354
- /* @__PURE__ */ jsx(
1355
- "img",
1356
- {
1357
- className: "taskon-bind-wallet-item-icon",
1358
- src: wallet.icon,
1359
- alt: wallet.name
939
+ ref: inputRef,
940
+ className: "taskon-input taskon-input--in-container",
941
+ type,
942
+ inputMode,
943
+ value,
944
+ onChange: handleChange,
945
+ maxLength,
946
+ disabled,
947
+ placeholder,
948
+ onBlur,
949
+ onFocus,
950
+ onKeyDown: handleKeyDown
1360
951
  }
1361
952
  ),
1362
- /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-name", children: wallet.name }),
1363
- isConnecting ? /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-connecting", children: /* @__PURE__ */ jsx("svg", { className: "taskon-bind-wallet-spinner", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeDasharray: "31.4 31.4" }) }) }) : isDisabled ? /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-unavailable", children: "N/A" }) : isInstalled ? /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-installed", children: "INSTALLED" }) : null
1364
- ]
1365
- }
1366
- );
1367
- }
1368
- function BindWalletDialog({
1369
- open,
1370
- onOpenChange,
1371
- onConnect,
1372
- onError
1373
- }) {
1374
- var _a;
1375
- const isMobile = useIsMobile();
1376
- const context = useContext(TaskOnContext);
1377
- const walletConnectProjectId = (_a = context == null ? void 0 : context.config) == null ? void 0 : _a.walletConnectProjectId;
1378
- const [connectingWalletId, setConnectingWalletId] = useState(null);
1379
- const [connectingWalletName, setConnectingWalletName] = useState("");
1380
- const [wcAvailable, setWcAvailable] = useState(null);
1381
- const wcProviderRef = useRef(null);
1382
- React__default.useEffect(() => {
1383
- checkWalletConnectAvailable().then(setWcAvailable);
1384
- }, []);
1385
- const isWalletConnectEnabled = useMemo(() => {
1386
- return Boolean(walletConnectProjectId) && wcAvailable === true;
1387
- }, [walletConnectProjectId, wcAvailable]);
1388
- const wcDisabledReason = useMemo(() => {
1389
- if (!walletConnectProjectId) {
1390
- return "WalletConnect requires walletConnectProjectId configuration";
1391
- }
1392
- if (wcAvailable === false) {
1393
- return "WalletConnect SDK not installed. Please install @walletconnect/ethereum-provider";
1394
- }
1395
- return void 0;
1396
- }, [walletConnectProjectId, wcAvailable]);
1397
- const walletsWithStatus = useMemo(() => {
1398
- const walletList = isMobile ? EVM_WALLETS.filter((w) => w.id === "walletconnect") : EVM_WALLETS;
1399
- return walletList.map((wallet) => ({
1400
- wallet,
1401
- isInstalled: wallet.id === "walletconnect" ? isWalletConnectEnabled : wallet.checkInstalled(),
1402
- isDisabled: wallet.id === "walletconnect" && !isWalletConnectEnabled,
1403
- disabledReason: wallet.id === "walletconnect" ? wcDisabledReason : void 0
1404
- }));
1405
- }, [isMobile, isWalletConnectEnabled, wcDisabledReason]);
1406
- const connectWalletConnect = useCallback(async () => {
1407
- var _a2, _b, _c;
1408
- if (!walletConnectProjectId) {
1409
- onError == null ? void 0 : onError("WalletConnect projectId not configured");
1410
- return;
1411
- }
1412
- setConnectingWalletId("walletconnect");
1413
- setConnectingWalletName("WalletConnect");
1414
- try {
1415
- const { EthereumProvider } = await import("@walletconnect/ethereum-provider");
1416
- const provider = await EthereumProvider.init({
1417
- projectId: walletConnectProjectId,
1418
- chains: [1],
1419
- // Ethereum mainnet
1420
- optionalChains: [56, 137, 42161, 10, 8453],
1421
- // BSC, Polygon, Arbitrum, Optimism, Base
1422
- showQrModal: true,
1423
- qrModalOptions: {
1424
- themeMode: "dark"
1425
- }
1426
- });
1427
- wcProviderRef.current = provider;
1428
- await provider.connect();
1429
- const accounts = provider.accounts;
1430
- const address = accounts[0];
1431
- if (!address) {
1432
- onError == null ? void 0 : onError("No account found");
1433
- setConnectingWalletId(null);
1434
- return;
1435
- }
1436
- await (onConnect == null ? void 0 : onConnect(address, provider));
1437
- } catch (e) {
1438
- const error2 = e;
1439
- if (((_a2 = error2.message) == null ? void 0 : _a2.includes("rejected")) || ((_b = error2.message) == null ? void 0 : _b.includes("denied")) || ((_c = error2.message) == null ? void 0 : _c.includes("User closed"))) {
1440
- onError == null ? void 0 : onError("User rejected the connection");
1441
- } else {
1442
- onError == null ? void 0 : onError(error2.message || "Failed to connect WalletConnect");
1443
- }
1444
- } finally {
1445
- setConnectingWalletId(null);
1446
- }
1447
- }, [walletConnectProjectId, onConnect, onError]);
1448
- const connectWallet2 = useCallback(async (wallet) => {
1449
- var _a2, _b;
1450
- const provider = getWalletProvider(wallet.id);
1451
- if (!provider) {
1452
- onError == null ? void 0 : onError(`${wallet.name} provider not found`);
1453
- return;
1454
- }
1455
- setConnectingWalletId(wallet.id);
1456
- setConnectingWalletName(wallet.name);
1457
- try {
1458
- const accounts = await provider.request({
1459
- method: "eth_requestAccounts"
1460
- });
1461
- const address = accounts[0];
1462
- if (!address) {
1463
- onError == null ? void 0 : onError("No account found");
1464
- setConnectingWalletId(null);
1465
- return;
1466
- }
1467
- await (onConnect == null ? void 0 : onConnect(address, provider));
1468
- } catch (e) {
1469
- const error2 = e;
1470
- if (((_a2 = error2.message) == null ? void 0 : _a2.includes("rejected")) || ((_b = error2.message) == null ? void 0 : _b.includes("denied"))) {
1471
- onError == null ? void 0 : onError("User rejected the connection");
1472
- } else {
1473
- onError == null ? void 0 : onError(error2.message || "Failed to connect wallet");
1474
- }
1475
- } finally {
1476
- setConnectingWalletId(null);
1477
- }
1478
- }, [onConnect, onError]);
1479
- const handleWalletClick = useCallback((wallet, isInstalled, isDisabled) => {
1480
- if (isDisabled) {
1481
- return;
1482
- }
1483
- if (wallet.id === "walletconnect") {
1484
- connectWalletConnect();
1485
- return;
1486
- }
1487
- if (isInstalled) {
1488
- connectWallet2(wallet);
1489
- } else {
1490
- window.open(wallet.downloadUrl, "_blank", "noopener,noreferrer");
1491
- }
1492
- }, [connectWallet2, connectWalletConnect]);
1493
- return /* @__PURE__ */ jsx(
1494
- Dialog,
1495
- {
1496
- open,
1497
- onOpenChange,
1498
- title: "Connect Wallet",
1499
- showCloseButton: true,
1500
- maxWidth: 510,
1501
- children: /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-dialog", children: [
1502
- /* @__PURE__ */ jsx("h2", { className: "taskon-bind-wallet-dialog-title", children: "Please connect wallet" }),
1503
- /* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-chain-label", children: "EVM Chain" }),
1504
- /* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-grid", children: walletsWithStatus.map(({ wallet, isInstalled, isDisabled, disabledReason }) => /* @__PURE__ */ jsx(
1505
- WalletItem,
1506
- {
1507
- wallet,
1508
- isInstalled,
1509
- isConnecting: connectingWalletId === wallet.id,
1510
- isDisabled,
1511
- disabledReason,
1512
- onClick: () => handleWalletClick(wallet, isInstalled, isDisabled)
1513
- },
1514
- wallet.id
1515
- )) }),
1516
- connectingWalletId && /* @__PURE__ */ jsx(ConnectLoading, { walletName: connectingWalletName })
1517
- ] })
1518
- }
1519
- );
1520
- }
953
+ rightSlot && /* @__PURE__ */ jsx("div", { className: "taskon-input-slot", children: rightSlot })
954
+ ] }),
955
+ error2 && /* @__PURE__ */ jsx("p", { className: "taskon-input-error", children: error2 })
956
+ ] });
957
+ }
958
+ );
1521
959
  const sides = ["top", "right", "bottom", "left"];
1522
960
  const min = Math.min;
1523
961
  const max$1 = Math.max;
@@ -4695,453 +4133,667 @@ function Switch({
4695
4133
  }
4696
4134
  );
4697
4135
  }
4698
- const tabMyRewards = "My Rewards";
4699
- const tabIdentity = "Identity";
4700
- const tabActivityHistory = "Activity History";
4701
- const tabRewards = "Rewards";
4702
- const tabSprintOdysseyHistory = "Sprint & Odyssey History";
4703
- const sectionYouHaveEarned = "You have earned";
4704
- const rewardToken = "Token";
4705
- const rewardXpLevel = "XP & Level";
4706
- const rewardNft = "NFT";
4707
- const rewardWhitelist = "Whitelist";
4708
- const rewardDiscordRole = "Discord Role";
4709
- const rewardPoints = "Points";
4710
- const withdrawableAssets = "Withdrawable Assets";
4711
- const tokenHistory = "Token History";
4712
- const withdraw = "Withdraw";
4713
- const batchWithdraw = "Batch Withdraw";
4714
- const frozenAssets = "Frozen Assets";
4715
- const resend = "Resend";
4716
- const pendingWithdrawals = "You have {count} pending withdrawals";
4717
- const withdrawConfirm = "Confirm Withdrawal";
4718
- const withdrawSuccess = "Withdrawal Successful";
4719
- const withdrawCanceled = "Withdrawal Canceled";
4720
- const gasNotEnough = "Insufficient Gas";
4721
- const retry = "Retry";
4722
- const confirmWithdraw = "Confirm withdrawal";
4723
- const withdrawing = "Processing withdrawal...";
4724
- const confirm = "Confirm";
4725
- const cancel = "Cancel";
4726
- const close = "Close";
4727
- const columnDetail = "Detail";
4728
- const columnDuration = "Duration";
4729
- const activityName = "Activity Name";
4730
- const activityTime = "Activity Time";
4731
- const level = "Level";
4732
- const totalXp = "Total XP";
4733
- const xpToNextLevel = "XP to next level";
4734
- const xpHistory = "XP History";
4735
- const totalPoints = "Total";
4736
- const emptyPoints = "No points history yet";
4737
- const pointsHistory = "Points History";
4738
- const page = "Page";
4739
- const of = "of";
4740
- const previous = "Previous";
4741
- const next = "Next";
4742
- const loadMore = "Load More";
4743
- const showing = "Showing {start}-{end} of {total}";
4744
- const socialAccounts = "Social Media Accounts";
4745
- const walletAddresses = "Network List";
4746
- const emailAddress = "Email Address";
4747
- const bind = "Bind";
4748
- const unbind = "Unbind";
4749
- const connectWallet = "Connect Wallet";
4750
- const binding = "Binding...";
4751
- const unbinding = "Unbinding...";
4752
- const bindSocialTodo = "OAuth binding will be available soon";
4753
- const confirmUnbind = "Confirm Unbind";
4754
- const unbindWarning = "Are you sure you want to unbind this account?";
4755
- const kycWarning = "This address has been KYC verified. After unbinding, you will need to re-verify KYC if you bind it again.";
4756
- const unbindCooldown = "Cannot unbind within 24 hours of binding";
4757
- const lastLoginMethod = "Cannot unbind the last login method";
4758
- const unbindSuccess = "Unbind successful";
4759
- const unbindFailed = "Unbind failed";
4760
- const bindSuccess = "Bind successful";
4761
- const bindFailed = "Bind failed";
4762
- const connectingWallet = "Connecting wallet...";
4763
- const signingMessage = "Signing message...";
4764
- const emptyIdentity = "No identity options configured";
4765
- const linkEmailAccount = "Link Email Account";
4766
- const pleaseEnterEmail = "Please enter email address";
4767
- const pleaseEnterValidEmail = "Please enter a valid email address";
4768
- const verificationCode = "Verification Code";
4769
- const pleaseEnterCode = "Please enter verification code";
4770
- const pleaseEnterValidCode = "Please enter a valid verification code";
4771
- const sendVerificationCode = "Send Verification Code";
4772
- const resendCode = "Resend";
4773
- const emailAlreadyLinked = "This email is already linked to another account";
4774
- const sendCodeSuccess = "Verification code sent";
4775
- const sendCodeFailed = "Failed to send verification code";
4776
- const columnTokenSymbol = "Token Symbol";
4777
- const columnNetwork = "Network";
4778
- const columnWithdrawable = "Withdrawable";
4779
- const columnAction = "Action";
4780
- const ok = "OK";
4781
- const claimNft = "Claim NFT";
4782
- const linked = "Linked";
4783
- const linkPlatformAccount = "Link {platform} Account";
4784
- const withdrawCanceledMessage = "Your withdrawal was canceled. You can retry the transaction.";
4785
- const frozenTypeCampaign = "Campaign Locked";
4786
- const frozenTypeWithdraw = "Pending Withdrawal";
4787
- const frozenTypeReferral = "Referral Locked";
4788
- const frozenTypeBenefit = "Benefit Locked";
4789
- const frozenTypeTgMiniApp = "TG Mini App";
4790
- const frozenTypeMilestone = "Milestone Locked";
4791
- const loading = "Loading...";
4792
- const error = "Something went wrong";
4793
- const emptyRewards = "No rewards yet";
4794
- const emptyActivityHistory = "No activity history";
4795
- const emptyToken = "No tokens yet";
4796
- const emptyNft = "No NFTs yet";
4797
- const noData = "No data";
4798
- const claim = "Claim";
4799
- const claimedTxn = "Claimed (Txn)";
4800
- const manualDrop = "Manual Drop";
4801
- const columnNft = "NFT";
4802
- const columnWhitelist = "Whitelist";
4803
- const columnDiscordRole = "Discord Role";
4804
- const columnTime = "Time";
4805
- const columnStatus = "Status";
4806
- const columnAmount = "Amount";
4807
- const deposited = "Deposited";
4808
- const distributedBy = "Distributed by";
4809
- const columnTokenType = "Type";
4810
- const columnAmountWithdrawable = "Amount Withdrawable";
4811
- const columnWithdrawAmount = "Withdraw Amount";
4812
- const selectToken = "Select Token";
4813
- const tokenAmount = "Token Amount";
4814
- const receiveAddress = "Receive Address";
4815
- const max = "MAX";
4816
- const availableBalance = "Available";
4817
- const pleaseSelectToken = "Please select a token";
4818
- const pleaseEnterValidAmount = "Please enter a valid amount";
4819
- const amountExceedsBalance = "Amount exceeds available balance";
4820
- const withdrawingTip = "Please wait while your withdrawal is being processed...";
4821
- const claimingNft = "Claiming NFT...";
4822
- const claimConnectingWallet = "Connecting wallet...";
4823
- const claimSwitchingNetwork = "Switching network...";
4824
- const claimGettingSignature = "Getting signature...";
4825
- const claimConfirmInWallet = "Please confirm in your wallet";
4826
- const claimTransactionPending = "Transaction pending...";
4827
- const claimSuccess = "Claim successful!";
4828
- const claimFailed = "Claim failed";
4829
- const claimCanceled = "Transaction was rejected by user.";
4830
- const viewOnExplorer = "View on Explorer";
4831
- const pendingTransaction = "Pending Transaction";
4832
- const pendingTxMessage = "You have a pending transaction";
4833
- const claimPendingTitle = "You have already claimed this NFT, please wait for this transaction to be confirmed.";
4834
- const claimPendingCheckExplorer = "You can check this transaction on explorer:";
4835
- const claimPendingHashLabel = "Transaction hash:";
4836
- const claimPendingClaimAgainWarn = '"Claim Again" will send a new transaction it is only recommended when you are sure there is something wrong with the current transaction.';
4837
- const claimPendingReceiveAddressNoChange = "This receive address can’t be changed:";
4838
- const continueWaiting = "Continue Waiting";
4839
- const claimAgain = "Claim Again";
4840
- const errorNoWallet = "No wallet found. Please install a wallet extension.";
4841
- const errorAddressMismatch = "Connected wallet address does not match.";
4842
- const errorNetworkSwitch = "Failed to switch network. Please switch manually.";
4843
- const errorInsufficientGas = "Insufficient gas. Please add more funds to your wallet.";
4844
- const walletNotBind = "Please bind wallet before withdraw";
4845
- const enMessages = {
4846
- tabMyRewards,
4847
- tabIdentity,
4848
- tabActivityHistory,
4849
- tabRewards,
4850
- tabSprintOdysseyHistory,
4851
- sectionYouHaveEarned,
4852
- rewardToken,
4853
- rewardXpLevel,
4854
- rewardNft,
4855
- rewardWhitelist,
4856
- rewardDiscordRole,
4857
- rewardPoints,
4858
- withdrawableAssets,
4859
- tokenHistory,
4860
- withdraw,
4861
- batchWithdraw,
4862
- frozenAssets,
4863
- resend,
4864
- pendingWithdrawals,
4865
- withdrawConfirm,
4866
- withdrawSuccess,
4867
- withdrawCanceled,
4868
- gasNotEnough,
4869
- retry,
4870
- confirmWithdraw,
4871
- withdrawing,
4872
- confirm,
4873
- cancel,
4874
- close,
4875
- columnDetail,
4876
- columnDuration,
4877
- activityName,
4878
- activityTime,
4879
- level,
4880
- totalXp,
4881
- xpToNextLevel,
4882
- xpHistory,
4883
- totalPoints,
4884
- emptyPoints,
4885
- pointsHistory,
4886
- page,
4887
- of,
4888
- previous,
4889
- next,
4890
- loadMore,
4891
- showing,
4892
- socialAccounts,
4893
- walletAddresses,
4894
- emailAddress,
4895
- bind,
4896
- unbind,
4897
- connectWallet,
4898
- binding,
4899
- unbinding,
4900
- bindSocialTodo,
4901
- confirmUnbind,
4902
- unbindWarning,
4903
- kycWarning,
4904
- unbindCooldown,
4905
- lastLoginMethod,
4906
- unbindSuccess,
4907
- unbindFailed,
4908
- bindSuccess,
4909
- bindFailed,
4910
- connectingWallet,
4911
- signingMessage,
4912
- emptyIdentity,
4913
- linkEmailAccount,
4914
- pleaseEnterEmail,
4915
- pleaseEnterValidEmail,
4916
- verificationCode,
4917
- pleaseEnterCode,
4918
- pleaseEnterValidCode,
4919
- sendVerificationCode,
4920
- resendCode,
4921
- emailAlreadyLinked,
4922
- sendCodeSuccess,
4923
- sendCodeFailed,
4924
- columnTokenSymbol,
4925
- columnNetwork,
4926
- columnWithdrawable,
4927
- columnAction,
4928
- ok,
4929
- claimNft,
4930
- linked,
4931
- linkPlatformAccount,
4932
- withdrawCanceledMessage,
4933
- frozenTypeCampaign,
4934
- frozenTypeWithdraw,
4935
- frozenTypeReferral,
4936
- frozenTypeBenefit,
4937
- frozenTypeTgMiniApp,
4938
- frozenTypeMilestone,
4939
- loading,
4940
- error,
4941
- emptyRewards,
4942
- emptyActivityHistory,
4943
- emptyToken,
4944
- emptyNft,
4945
- noData,
4946
- claim,
4947
- claimedTxn,
4948
- manualDrop,
4949
- columnNft,
4950
- columnWhitelist,
4951
- columnDiscordRole,
4952
- columnTime,
4953
- columnStatus,
4954
- columnAmount,
4955
- deposited,
4956
- distributedBy,
4957
- columnTokenType,
4958
- columnAmountWithdrawable,
4959
- columnWithdrawAmount,
4960
- selectToken,
4961
- tokenAmount,
4962
- receiveAddress,
4963
- max,
4964
- availableBalance,
4965
- pleaseSelectToken,
4966
- pleaseEnterValidAmount,
4967
- amountExceedsBalance,
4968
- withdrawingTip,
4969
- claimingNft,
4970
- claimConnectingWallet,
4971
- claimSwitchingNetwork,
4972
- claimGettingSignature,
4973
- claimConfirmInWallet,
4974
- claimTransactionPending,
4975
- claimSuccess,
4976
- claimFailed,
4977
- claimCanceled,
4978
- viewOnExplorer,
4979
- pendingTransaction,
4980
- pendingTxMessage,
4981
- claimPendingTitle,
4982
- claimPendingCheckExplorer,
4983
- claimPendingHashLabel,
4984
- claimPendingClaimAgainWarn,
4985
- claimPendingReceiveAddressNoChange,
4986
- continueWaiting,
4987
- claimAgain,
4988
- errorNoWallet,
4989
- errorAddressMismatch,
4990
- errorNetworkSwitch,
4991
- errorInsufficientGas,
4992
- walletNotBind
4993
- };
4994
- const en = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4995
- __proto__: null,
4996
- activityName,
4997
- activityTime,
4998
- amountExceedsBalance,
4999
- availableBalance,
5000
- batchWithdraw,
5001
- bind,
5002
- bindFailed,
5003
- bindSocialTodo,
5004
- bindSuccess,
5005
- binding,
5006
- cancel,
5007
- claim,
5008
- claimAgain,
5009
- claimCanceled,
5010
- claimConfirmInWallet,
5011
- claimConnectingWallet,
5012
- claimFailed,
5013
- claimGettingSignature,
5014
- claimNft,
5015
- claimPendingCheckExplorer,
5016
- claimPendingClaimAgainWarn,
5017
- claimPendingHashLabel,
5018
- claimPendingReceiveAddressNoChange,
5019
- claimPendingTitle,
5020
- claimSuccess,
5021
- claimSwitchingNetwork,
5022
- claimTransactionPending,
5023
- claimedTxn,
5024
- claimingNft,
5025
- close,
5026
- columnAction,
5027
- columnAmount,
5028
- columnAmountWithdrawable,
5029
- columnDetail,
5030
- columnDiscordRole,
5031
- columnDuration,
5032
- columnNetwork,
5033
- columnNft,
5034
- columnStatus,
5035
- columnTime,
5036
- columnTokenSymbol,
5037
- columnTokenType,
5038
- columnWhitelist,
5039
- columnWithdrawAmount,
5040
- columnWithdrawable,
5041
- confirm,
5042
- confirmUnbind,
5043
- confirmWithdraw,
5044
- connectWallet,
5045
- connectingWallet,
5046
- continueWaiting,
5047
- default: enMessages,
5048
- deposited,
5049
- distributedBy,
5050
- emailAddress,
5051
- emailAlreadyLinked,
5052
- emptyActivityHistory,
5053
- emptyIdentity,
5054
- emptyNft,
5055
- emptyPoints,
5056
- emptyRewards,
5057
- emptyToken,
5058
- error,
5059
- errorAddressMismatch,
5060
- errorInsufficientGas,
5061
- errorNetworkSwitch,
5062
- errorNoWallet,
5063
- frozenAssets,
5064
- frozenTypeBenefit,
5065
- frozenTypeCampaign,
5066
- frozenTypeMilestone,
5067
- frozenTypeReferral,
5068
- frozenTypeTgMiniApp,
5069
- frozenTypeWithdraw,
5070
- gasNotEnough,
5071
- kycWarning,
5072
- lastLoginMethod,
5073
- level,
5074
- linkEmailAccount,
5075
- linkPlatformAccount,
5076
- linked,
5077
- loadMore,
5078
- loading,
5079
- manualDrop,
5080
- max,
5081
- next,
5082
- noData,
5083
- of,
5084
- ok,
5085
- page,
5086
- pendingTransaction,
5087
- pendingTxMessage,
5088
- pendingWithdrawals,
5089
- pleaseEnterCode,
5090
- pleaseEnterEmail,
5091
- pleaseEnterValidAmount,
5092
- pleaseEnterValidCode,
5093
- pleaseEnterValidEmail,
5094
- pleaseSelectToken,
5095
- pointsHistory,
5096
- previous,
5097
- receiveAddress,
5098
- resend,
5099
- resendCode,
5100
- retry,
5101
- rewardDiscordRole,
5102
- rewardNft,
5103
- rewardPoints,
5104
- rewardToken,
5105
- rewardWhitelist,
5106
- rewardXpLevel,
5107
- sectionYouHaveEarned,
5108
- selectToken,
5109
- sendCodeFailed,
5110
- sendCodeSuccess,
5111
- sendVerificationCode,
5112
- showing,
5113
- signingMessage,
5114
- socialAccounts,
5115
- tabActivityHistory,
5116
- tabIdentity,
5117
- tabMyRewards,
5118
- tabRewards,
5119
- tabSprintOdysseyHistory,
5120
- tokenAmount,
5121
- tokenHistory,
5122
- totalPoints,
5123
- totalXp,
5124
- unbind,
5125
- unbindCooldown,
5126
- unbindFailed,
5127
- unbindSuccess,
5128
- unbindWarning,
5129
- unbinding,
5130
- verificationCode,
5131
- viewOnExplorer,
5132
- walletAddresses,
5133
- walletNotBind,
5134
- withdraw,
5135
- withdrawCanceled,
5136
- withdrawCanceledMessage,
5137
- withdrawConfirm,
5138
- withdrawSuccess,
5139
- withdrawableAssets,
5140
- withdrawing,
5141
- withdrawingTip,
5142
- xpHistory,
5143
- xpToNextLevel
5144
- }, Symbol.toStringTag, { value: "Module" }));
4136
+ const tab_my_rewards = "My Rewards";
4137
+ const tab_identity = "Identity";
4138
+ const tab_activity_history = "Activity History";
4139
+ const tab_rewards = "Rewards";
4140
+ const tab_sprint_odyssey_history = "Sprint & Odyssey History";
4141
+ const section_you_have_earned = "You have earned";
4142
+ const reward_token = "Token";
4143
+ const reward_xp_level = "XP & Level";
4144
+ const reward_nft = "NFT";
4145
+ const reward_whitelist = "Whitelist";
4146
+ const reward_discord_role = "Discord Role";
4147
+ const reward_points = "Points";
4148
+ const withdrawable_assets = "Withdrawable Assets";
4149
+ const token_history = "Token History";
4150
+ const withdraw = "Withdraw";
4151
+ const batch_withdraw = "Batch Withdraw";
4152
+ const frozen_assets = "Frozen Assets";
4153
+ const resend = "Resend";
4154
+ const pending_withdrawals = "You have {count} pending withdrawals";
4155
+ const pending_withdrawals_text = "pending withdrawals";
4156
+ const pending_withdrawals_count_label = "Number of pending withdrawals";
4157
+ const withdraw_confirm = "Confirm Withdrawal";
4158
+ const withdraw_success = "Withdrawal Successful";
4159
+ const withdraw_canceled = "Withdrawal Canceled";
4160
+ const gas_not_enough = "Insufficient Gas";
4161
+ const gas_not_enough_description = "Please ensure you have enough gas to complete this transaction.";
4162
+ const gas_not_enough_description_with_chain = "Please ensure you have enough {chain} gas to complete this transaction.";
4163
+ const retry = "Retry";
4164
+ const confirm_withdraw = "Confirm withdrawal";
4165
+ const withdrawing = "Processing withdrawal...";
4166
+ const confirm = "Confirm";
4167
+ const cancel = "Cancel";
4168
+ const close = "Close";
4169
+ const column_detail = "Detail";
4170
+ const column_duration = "Duration";
4171
+ const activity_name = "Activity Name";
4172
+ const activity_time = "Activity Time";
4173
+ const level = "Level";
4174
+ const total_xp = "Total XP";
4175
+ const default_xp_points_name = "XP";
4176
+ const xp_to_next_level = "XP to next level";
4177
+ const xp_history = "XP History";
4178
+ const total_points = "Total";
4179
+ const empty_points = "No points history yet";
4180
+ const points_history = "Points History";
4181
+ const page = "Page";
4182
+ const of = "of";
4183
+ const previous = "Previous";
4184
+ const next = "Next";
4185
+ const load_more = "Load More";
4186
+ const showing = "Showing {start}-{end} of {total}";
4187
+ const social_accounts = "Social Media Accounts";
4188
+ const wallet_addresses = "Network List";
4189
+ const evm_chain = "EVM Chain";
4190
+ const primary_address = "Primary Address";
4191
+ const secondary_address = "Secondary Address";
4192
+ const email_address = "Email Address";
4193
+ const bind = "Bind";
4194
+ const unbind = "Unbind";
4195
+ const connect_wallet = "Connect Wallet";
4196
+ const binding = "Binding...";
4197
+ const unbinding = "Unbinding...";
4198
+ const bind_social_todo = "OAuth binding will be available soon";
4199
+ const confirm_unbind = "Confirm Unbind";
4200
+ const unbind_warning = "Are you sure you want to unbind this account?";
4201
+ const kyc_warning = "This address has been KYC verified. After unbinding, you will need to re-verify KYC if you bind it again.";
4202
+ const unbind_cooldown = "Cannot unbind within 24 hours of binding";
4203
+ const last_login_method = "Cannot unbind the last login method";
4204
+ const unbind_success = "Unbind successful";
4205
+ const unbind_failed = "Unbind failed";
4206
+ const bind_success = "Bind successful";
4207
+ const bind_failed = "Bind failed";
4208
+ const connecting_wallet = "Connecting wallet...";
4209
+ const signing_message = "Signing message...";
4210
+ const empty_identity = "No identity options configured";
4211
+ const link_email_account = "Link Email Account";
4212
+ const please_enter_email = "Please enter email address";
4213
+ const please_enter_valid_email = "Please enter a valid email address";
4214
+ const verification_code = "Verification Code";
4215
+ const please_enter_code = "Please enter verification code";
4216
+ const please_enter_valid_code = "Please enter a valid verification code";
4217
+ const send_verification_code = "Send Verification Code";
4218
+ const resend_code = "Resend";
4219
+ const email_already_linked = "This email is already linked to another account";
4220
+ const send_code_success = "Verification code sent";
4221
+ const send_code_failed = "Failed to send verification code";
4222
+ const column_token_symbol = "Token Symbol";
4223
+ const column_network = "Network";
4224
+ const column_withdrawable = "Withdrawable";
4225
+ const column_action = "Action";
4226
+ const chain_label = "Chain";
4227
+ const ok = "OK";
4228
+ const copy = "Copy";
4229
+ const copied = "Copied!";
4230
+ const claim_nft = "Claim NFT";
4231
+ const linked = "Linked";
4232
+ const link_platform_account = "Link {platform} Account";
4233
+ const withdraw_canceled_message = "Your withdrawal was canceled. You can retry the transaction.";
4234
+ const missing_resend_payload = "Missing resend payload";
4235
+ const no_tokens_for_resend = "No tokens available for resend";
4236
+ const failed_load_resend_details = "Failed to load resend details";
4237
+ const frozen_type_campaign = "Campaign Locked";
4238
+ const frozen_type_withdraw = "Pending Withdrawal";
4239
+ const frozen_type_referral = "Referral Locked";
4240
+ const frozen_type_benefit = "Benefit Locked";
4241
+ const frozen_type_tg_mini_app = "TG Mini App";
4242
+ const frozen_type_milestone = "Milestone Locked";
4243
+ const loading = "Loading...";
4244
+ const error = "Something went wrong";
4245
+ const empty_rewards = "No rewards yet";
4246
+ const empty_activity_history = "No activity history";
4247
+ const empty_token = "No tokens yet";
4248
+ const empty_nft = "No NFTs yet";
4249
+ const no_data = "No data";
4250
+ const claim = "Claim";
4251
+ const claimed_txn = "Claimed (Txn)";
4252
+ const manual_drop = "Manual Drop";
4253
+ const column_nft = "NFT";
4254
+ const column_whitelist = "Whitelist";
4255
+ const column_discord_role = "Discord Role";
4256
+ const column_time = "Time";
4257
+ const column_status = "Status";
4258
+ const column_amount = "Amount";
4259
+ const deposited = "Deposited";
4260
+ const distributed_by = "Distributed by";
4261
+ const token_history_telegram_spin = "Telegram Spin";
4262
+ const token_history_telegram_spin_bonus = "Telegram Spin Bonus";
4263
+ const column_token_type = "Type";
4264
+ const column_amount_withdrawable = "Amount Withdrawable";
4265
+ const column_withdraw_amount = "Withdraw Amount";
4266
+ const select_token = "Select Token";
4267
+ const token_amount = "Token Amount";
4268
+ const receive_address = "Receive Address";
4269
+ const max = "MAX";
4270
+ const available_balance = "Available";
4271
+ const please_select_token = "Please select a token";
4272
+ const please_enter_amount = "Please enter an amount";
4273
+ const please_enter_valid_amount = "Please enter a valid amount";
4274
+ const amount_exceeds_balance = "Amount exceeds available balance";
4275
+ const token_not_supported = "Token not supported";
4276
+ const withdrawing_tip = "Please wait while your withdrawal is being processed...";
4277
+ const claiming_nft = "Claiming NFT...";
4278
+ const claim_connecting_wallet = "Connecting wallet...";
4279
+ const claim_switching_network = "Switching network...";
4280
+ const claim_getting_signature = "Getting signature...";
4281
+ const claim_confirm_in_wallet = "Please confirm in your wallet";
4282
+ const claim_transaction_pending = "Transaction pending...";
4283
+ const claim_success = "Claim successful!";
4284
+ const claim_failed = "Claim failed";
4285
+ const claim_canceled = "Transaction was rejected by user.";
4286
+ const view_on_explorer = "View on Explorer";
4287
+ const pending_transaction = "Pending Transaction";
4288
+ const pending_tx_message = "You have a pending transaction";
4289
+ const claim_pending_title = "You have already claimed this NFT, please wait for this transaction to be confirmed.";
4290
+ const claim_pending_check_explorer = "You can check this transaction on explorer:";
4291
+ const claim_pending_hash_label = "Transaction hash:";
4292
+ const claim_pending_claim_again_warn = '"Claim Again" will send a new transaction it is only recommended when you are sure there is something wrong with the current transaction.';
4293
+ const claim_pending_receive_address_no_change = "This receive address can’t be changed:";
4294
+ const continue_waiting = "Continue Waiting";
4295
+ const claim_again = "Claim Again";
4296
+ const error_no_wallet = "No wallet found. Please install a wallet extension.";
4297
+ const error_address_mismatch = "Connected wallet address does not match.";
4298
+ const error_network_switch = "Failed to switch network. Please switch manually.";
4299
+ const error_insufficient_gas = "Insufficient gas. Please add more funds to your wallet.";
4300
+ const wallet_not_bind = "Please bind wallet before withdraw";
4301
+ const failed_connect_wallet = "Failed to connect wallet";
4302
+ const confirm_wallet_retry = "Please confirm in your wallet and retry.";
4303
+ const withdraw_failed = "Withdrawal failed";
4304
+ const not_configured = "Not configured";
4305
+ const enMessages = {
4306
+ tab_my_rewards,
4307
+ tab_identity,
4308
+ tab_activity_history,
4309
+ tab_rewards,
4310
+ tab_sprint_odyssey_history,
4311
+ section_you_have_earned,
4312
+ reward_token,
4313
+ reward_xp_level,
4314
+ reward_nft,
4315
+ reward_whitelist,
4316
+ reward_discord_role,
4317
+ reward_points,
4318
+ withdrawable_assets,
4319
+ token_history,
4320
+ withdraw,
4321
+ batch_withdraw,
4322
+ frozen_assets,
4323
+ resend,
4324
+ pending_withdrawals,
4325
+ pending_withdrawals_text,
4326
+ pending_withdrawals_count_label,
4327
+ withdraw_confirm,
4328
+ withdraw_success,
4329
+ withdraw_canceled,
4330
+ gas_not_enough,
4331
+ gas_not_enough_description,
4332
+ gas_not_enough_description_with_chain,
4333
+ retry,
4334
+ confirm_withdraw,
4335
+ withdrawing,
4336
+ confirm,
4337
+ cancel,
4338
+ close,
4339
+ column_detail,
4340
+ column_duration,
4341
+ activity_name,
4342
+ activity_time,
4343
+ level,
4344
+ total_xp,
4345
+ default_xp_points_name,
4346
+ xp_to_next_level,
4347
+ xp_history,
4348
+ total_points,
4349
+ empty_points,
4350
+ points_history,
4351
+ page,
4352
+ of,
4353
+ previous,
4354
+ next,
4355
+ load_more,
4356
+ showing,
4357
+ social_accounts,
4358
+ wallet_addresses,
4359
+ evm_chain,
4360
+ primary_address,
4361
+ secondary_address,
4362
+ email_address,
4363
+ bind,
4364
+ unbind,
4365
+ connect_wallet,
4366
+ binding,
4367
+ unbinding,
4368
+ bind_social_todo,
4369
+ confirm_unbind,
4370
+ unbind_warning,
4371
+ kyc_warning,
4372
+ unbind_cooldown,
4373
+ last_login_method,
4374
+ unbind_success,
4375
+ unbind_failed,
4376
+ bind_success,
4377
+ bind_failed,
4378
+ connecting_wallet,
4379
+ signing_message,
4380
+ empty_identity,
4381
+ link_email_account,
4382
+ please_enter_email,
4383
+ please_enter_valid_email,
4384
+ verification_code,
4385
+ please_enter_code,
4386
+ please_enter_valid_code,
4387
+ send_verification_code,
4388
+ resend_code,
4389
+ email_already_linked,
4390
+ send_code_success,
4391
+ send_code_failed,
4392
+ column_token_symbol,
4393
+ column_network,
4394
+ column_withdrawable,
4395
+ column_action,
4396
+ chain_label,
4397
+ ok,
4398
+ copy,
4399
+ copied,
4400
+ claim_nft,
4401
+ linked,
4402
+ link_platform_account,
4403
+ withdraw_canceled_message,
4404
+ missing_resend_payload,
4405
+ no_tokens_for_resend,
4406
+ failed_load_resend_details,
4407
+ frozen_type_campaign,
4408
+ frozen_type_withdraw,
4409
+ frozen_type_referral,
4410
+ frozen_type_benefit,
4411
+ frozen_type_tg_mini_app,
4412
+ frozen_type_milestone,
4413
+ loading,
4414
+ error,
4415
+ empty_rewards,
4416
+ empty_activity_history,
4417
+ empty_token,
4418
+ empty_nft,
4419
+ no_data,
4420
+ claim,
4421
+ claimed_txn,
4422
+ manual_drop,
4423
+ column_nft,
4424
+ column_whitelist,
4425
+ column_discord_role,
4426
+ column_time,
4427
+ column_status,
4428
+ column_amount,
4429
+ deposited,
4430
+ distributed_by,
4431
+ token_history_telegram_spin,
4432
+ token_history_telegram_spin_bonus,
4433
+ column_token_type,
4434
+ column_amount_withdrawable,
4435
+ column_withdraw_amount,
4436
+ select_token,
4437
+ token_amount,
4438
+ receive_address,
4439
+ max,
4440
+ available_balance,
4441
+ please_select_token,
4442
+ please_enter_amount,
4443
+ please_enter_valid_amount,
4444
+ amount_exceeds_balance,
4445
+ token_not_supported,
4446
+ withdrawing_tip,
4447
+ claiming_nft,
4448
+ claim_connecting_wallet,
4449
+ claim_switching_network,
4450
+ claim_getting_signature,
4451
+ claim_confirm_in_wallet,
4452
+ claim_transaction_pending,
4453
+ claim_success,
4454
+ claim_failed,
4455
+ claim_canceled,
4456
+ view_on_explorer,
4457
+ pending_transaction,
4458
+ pending_tx_message,
4459
+ claim_pending_title,
4460
+ claim_pending_check_explorer,
4461
+ claim_pending_hash_label,
4462
+ claim_pending_claim_again_warn,
4463
+ claim_pending_receive_address_no_change,
4464
+ continue_waiting,
4465
+ claim_again,
4466
+ error_no_wallet,
4467
+ error_address_mismatch,
4468
+ error_network_switch,
4469
+ error_insufficient_gas,
4470
+ wallet_not_bind,
4471
+ failed_connect_wallet,
4472
+ confirm_wallet_retry,
4473
+ withdraw_failed,
4474
+ not_configured
4475
+ };
4476
+ const DEFAULT_CLAIM_MESSAGES = {
4477
+ claimNft: enMessages.claim_nft,
4478
+ claimingNft: enMessages.claiming_nft,
4479
+ claimConnectingWallet: enMessages.claim_connecting_wallet,
4480
+ claimSwitchingNetwork: enMessages.claim_switching_network,
4481
+ claimGettingSignature: enMessages.claim_getting_signature,
4482
+ claimConfirmInWallet: enMessages.claim_confirm_in_wallet,
4483
+ claimTransactionPending: enMessages.claim_transaction_pending,
4484
+ claimSuccess: enMessages.claim_success,
4485
+ claimFailed: enMessages.claim_failed,
4486
+ claimCanceled: enMessages.claim_canceled,
4487
+ viewOnExplorer: enMessages.view_on_explorer,
4488
+ retry: enMessages.retry,
4489
+ close: enMessages.close
4490
+ };
4491
+ function LoadingSpinner() {
4492
+ return /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-spinner", children: /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-spinner__circle" }) });
4493
+ }
4494
+ function SuccessIcon() {
4495
+ return /* @__PURE__ */ jsxs(
4496
+ "svg",
4497
+ {
4498
+ className: "taskon-claim-dialog-icon taskon-claim-dialog-icon--success",
4499
+ viewBox: "0 0 24 24",
4500
+ fill: "none",
4501
+ xmlns: "http://www.w3.org/2000/svg",
4502
+ children: [
4503
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }),
4504
+ /* @__PURE__ */ jsx(
4505
+ "path",
4506
+ {
4507
+ d: "M8 12L11 15L16 9",
4508
+ stroke: "currentColor",
4509
+ strokeWidth: "2",
4510
+ strokeLinecap: "round",
4511
+ strokeLinejoin: "round"
4512
+ }
4513
+ )
4514
+ ]
4515
+ }
4516
+ );
4517
+ }
4518
+ function ErrorIcon() {
4519
+ return /* @__PURE__ */ jsxs(
4520
+ "svg",
4521
+ {
4522
+ className: "taskon-claim-dialog-icon taskon-claim-dialog-icon--error",
4523
+ viewBox: "0 0 24 24",
4524
+ fill: "none",
4525
+ xmlns: "http://www.w3.org/2000/svg",
4526
+ children: [
4527
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }),
4528
+ /* @__PURE__ */ jsx(
4529
+ "path",
4530
+ {
4531
+ d: "M15 9L9 15M9 9L15 15",
4532
+ stroke: "currentColor",
4533
+ strokeWidth: "2",
4534
+ strokeLinecap: "round"
4535
+ }
4536
+ )
4537
+ ]
4538
+ }
4539
+ );
4540
+ }
4541
+ function getStatusMessage(status, messages) {
4542
+ switch (status) {
4543
+ case "checking":
4544
+ return messages.claimingNft;
4545
+ case "connecting":
4546
+ return messages.claimConnectingWallet;
4547
+ case "switching":
4548
+ return messages.claimSwitchingNetwork;
4549
+ case "signing":
4550
+ return messages.claimGettingSignature;
4551
+ case "confirming":
4552
+ return messages.claimConfirmInWallet;
4553
+ case "pending":
4554
+ return messages.claimTransactionPending;
4555
+ case "success":
4556
+ return messages.claimSuccess;
4557
+ case "error":
4558
+ return messages.claimFailed;
4559
+ default:
4560
+ return "";
4561
+ }
4562
+ }
4563
+ function getErrorMessage(error2, messages) {
4564
+ if (error2.isUserCancelled()) {
4565
+ return messages.claimCanceled;
4566
+ }
4567
+ const readableMessage = typeof error2.message === "string" ? error2.message.trim() : "";
4568
+ if (readableMessage && readableMessage !== "[object Object]") {
4569
+ return readableMessage;
4570
+ }
4571
+ return messages.claimFailed || DEFAULT_ERROR_MESSAGES[error2.type] || DEFAULT_ERROR_MESSAGES[NftClaimErrorType.Unknown];
4572
+ }
4573
+ function formatTxHash$1(hash) {
4574
+ if (hash.length <= 16) return hash;
4575
+ return `${hash.slice(0, 10)}...${hash.slice(-6)}`;
4576
+ }
4577
+ function ClaimNftDialog({
4578
+ open,
4579
+ onClose,
4580
+ status,
4581
+ error: error2,
4582
+ txHash,
4583
+ claimingNft,
4584
+ explorerUrl,
4585
+ messages,
4586
+ onRetry
4587
+ }) {
4588
+ const resolvedMessages = {
4589
+ ...DEFAULT_CLAIM_MESSAGES,
4590
+ ...messages
4591
+ };
4592
+ const isLoading = [
4593
+ "checking",
4594
+ "connecting",
4595
+ "switching",
4596
+ "signing",
4597
+ "confirming",
4598
+ "pending"
4599
+ ].includes(status);
4600
+ const canClose = status === "success" || status === "error" || status === "idle";
4601
+ const handleClose = () => {
4602
+ if (canClose) {
4603
+ onClose();
4604
+ }
4605
+ };
4606
+ const handleViewTx = () => {
4607
+ if (explorerUrl) {
4608
+ window.open(explorerUrl, "_blank", "noopener,noreferrer");
4609
+ }
4610
+ };
4611
+ return /* @__PURE__ */ jsx(
4612
+ Dialog,
4613
+ {
4614
+ open,
4615
+ onOpenChange: (isOpen) => {
4616
+ if (!isOpen && canClose) {
4617
+ onClose();
4618
+ }
4619
+ },
4620
+ title: resolvedMessages.claimNft,
4621
+ showCloseButton: canClose,
4622
+ contentClassName: "taskon-claim-dialog",
4623
+ maxWidth: 400,
4624
+ children: /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-content", children: [
4625
+ claimingNft && /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-nft", children: claimingNft.item.reward_value.collection_image && /* @__PURE__ */ jsx(
4626
+ "img",
4627
+ {
4628
+ src: claimingNft.item.reward_value.collection_image,
4629
+ alt: "NFT",
4630
+ className: "taskon-claim-dialog-nft__image"
4631
+ }
4632
+ ) }),
4633
+ /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-status", children: [
4634
+ isLoading && /* @__PURE__ */ jsx(LoadingSpinner, {}),
4635
+ status === "success" && /* @__PURE__ */ jsx(SuccessIcon, {}),
4636
+ status === "error" && /* @__PURE__ */ jsx(ErrorIcon, {})
4637
+ ] }),
4638
+ /* @__PURE__ */ jsx("p", { className: "taskon-claim-dialog-message", children: status === "error" && error2 ? getErrorMessage(error2, resolvedMessages) : getStatusMessage(status, resolvedMessages) }),
4639
+ txHash && (status === "pending" || status === "success") && /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-tx", children: [
4640
+ /* @__PURE__ */ jsx("span", { className: "taskon-claim-dialog-tx__label", children: "Tx:" }),
4641
+ /* @__PURE__ */ jsx("span", { className: "taskon-claim-dialog-tx__hash", children: formatTxHash$1(txHash) })
4642
+ ] }),
4643
+ /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-actions", children: [
4644
+ txHash && explorerUrl && /* @__PURE__ */ jsx(
4645
+ "button",
4646
+ {
4647
+ type: "button",
4648
+ className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--secondary",
4649
+ onClick: handleViewTx,
4650
+ children: resolvedMessages.viewOnExplorer
4651
+ }
4652
+ ),
4653
+ status === "error" && onRetry && /* @__PURE__ */ jsx(
4654
+ "button",
4655
+ {
4656
+ type: "button",
4657
+ className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--primary",
4658
+ onClick: onRetry,
4659
+ children: resolvedMessages.retry
4660
+ }
4661
+ ),
4662
+ canClose && /* @__PURE__ */ jsx(
4663
+ "button",
4664
+ {
4665
+ type: "button",
4666
+ className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--primary",
4667
+ onClick: handleClose,
4668
+ children: resolvedMessages.close
4669
+ }
4670
+ )
4671
+ ] })
4672
+ ] })
4673
+ }
4674
+ );
4675
+ }
4676
+ const DEFAULT_PENDING_MESSAGES = {
4677
+ pendingTransaction: enMessages.pending_transaction,
4678
+ claimPendingTitle: enMessages.claim_pending_title,
4679
+ claimPendingCheckExplorer: enMessages.claim_pending_check_explorer,
4680
+ claimPendingHashLabel: enMessages.claim_pending_hash_label,
4681
+ claimPendingClaimAgainWarn: enMessages.claim_pending_claim_again_warn,
4682
+ claimPendingReceiveAddressNoChange: enMessages.claim_pending_receive_address_no_change,
4683
+ claimAgain: enMessages.claim_again,
4684
+ continueWaiting: enMessages.continue_waiting
4685
+ };
4686
+ function formatTxHash(hash) {
4687
+ if (hash.length <= 16) return hash;
4688
+ return `${hash.slice(0, 10)}...${hash.slice(-6)}`;
4689
+ }
4690
+ function PendingTxDialog({
4691
+ open,
4692
+ onClose,
4693
+ onClaimAgain,
4694
+ onContinueWaiting,
4695
+ txHash,
4696
+ explorerUrl,
4697
+ receiveAddress,
4698
+ messages
4699
+ }) {
4700
+ const resolvedMessages = {
4701
+ ...DEFAULT_PENDING_MESSAGES,
4702
+ ...messages
4703
+ };
4704
+ const title = resolvedMessages.claimPendingTitle;
4705
+ const checkExplorerText = resolvedMessages.claimPendingCheckExplorer;
4706
+ const hashLabel = resolvedMessages.claimPendingHashLabel;
4707
+ const claimAgainWarn = resolvedMessages.claimPendingClaimAgainWarn;
4708
+ const receiveAddressNoChange = resolvedMessages.claimPendingReceiveAddressNoChange;
4709
+ const handleViewTx = () => {
4710
+ if (explorerUrl) {
4711
+ openInNewTab(explorerUrl);
4712
+ }
4713
+ };
4714
+ return /* @__PURE__ */ jsx(
4715
+ Dialog,
4716
+ {
4717
+ open,
4718
+ onOpenChange: (isOpen) => {
4719
+ if (!isOpen) {
4720
+ onClose();
4721
+ }
4722
+ },
4723
+ title: resolvedMessages.pendingTransaction,
4724
+ showCloseButton: true,
4725
+ contentClassName: "taskon-pending-dialog",
4726
+ maxWidth: 460,
4727
+ children: /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-content", children: [
4728
+ /* @__PURE__ */ jsx("p", { className: "taskon-pending-dialog-title", children: title }),
4729
+ txHash && /* @__PURE__ */ jsx("p", { className: "taskon-pending-dialog-desc", children: checkExplorerText }),
4730
+ txHash && /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-hash-wrap", children: [
4731
+ /* @__PURE__ */ jsx("span", { className: "taskon-pending-dialog-hash-label", children: hashLabel }),
4732
+ explorerUrl ? /* @__PURE__ */ jsx(
4733
+ "button",
4734
+ {
4735
+ type: "button",
4736
+ className: "taskon-pending-dialog-hash-link",
4737
+ onClick: handleViewTx,
4738
+ children: formatTxHash(txHash)
4739
+ }
4740
+ ) : /* @__PURE__ */ jsx("span", { className: "taskon-pending-dialog-hash-value", children: formatTxHash(txHash) })
4741
+ ] }),
4742
+ /* @__PURE__ */ jsxs("ul", { className: "taskon-pending-dialog-notice-list", children: [
4743
+ /* @__PURE__ */ jsx("li", { className: "taskon-pending-dialog-notice-item", children: claimAgainWarn }),
4744
+ receiveAddress && /* @__PURE__ */ jsxs("li", { className: "taskon-pending-dialog-notice-item", children: [
4745
+ /* @__PURE__ */ jsx("div", { children: receiveAddressNoChange }),
4746
+ /* @__PURE__ */ jsx("div", { className: "taskon-pending-dialog-receive-address", children: receiveAddress })
4747
+ ] })
4748
+ ] }),
4749
+ /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-actions", children: [
4750
+ /* @__PURE__ */ jsx(
4751
+ "button",
4752
+ {
4753
+ type: "button",
4754
+ className: "taskon-pending-dialog-btn taskon-pending-dialog-btn--secondary",
4755
+ onClick: onClaimAgain,
4756
+ children: resolvedMessages.claimAgain
4757
+ }
4758
+ ),
4759
+ /* @__PURE__ */ jsx(
4760
+ "button",
4761
+ {
4762
+ type: "button",
4763
+ className: "taskon-pending-dialog-btn taskon-pending-dialog-btn--primary",
4764
+ onClick: onContinueWaiting,
4765
+ children: resolvedMessages.continueWaiting
4766
+ }
4767
+ )
4768
+ ] })
4769
+ ] })
4770
+ }
4771
+ );
4772
+ }
4773
+ const loadMessages = createLocaleLoader(
4774
+ enMessages,
4775
+ {
4776
+ ko: () => import("./usercenter-ko-Dtpkn2qb.js").then((module) => ({
4777
+ default: module.default
4778
+ })),
4779
+ ja: () => import("./usercenter-ja-CKE4DJC6.js").then((module) => ({
4780
+ default: module.default
4781
+ })),
4782
+ ru: () => import("./usercenter-ru-DnBGee45.js").then((module) => ({
4783
+ default: module.default
4784
+ })),
4785
+ es: () => import("./usercenter-es-Dz3Wp2vV.js").then((module) => ({
4786
+ default: module.default
4787
+ }))
4788
+ }
4789
+ );
4790
+ function useUserCenterLocale() {
4791
+ return useTranslation({
4792
+ widgetId: "UserCenterWidget",
4793
+ defaultMessages: enMessages,
4794
+ loadMessages
4795
+ });
4796
+ }
5145
4797
  function EmptyState({
5146
4798
  message,
5147
4799
  icon,
@@ -5153,7 +4805,7 @@ function EmptyState({
5153
4805
  ] });
5154
4806
  }
5155
4807
  function LoadingState({
5156
- message = "Loading...",
4808
+ message,
5157
4809
  className = ""
5158
4810
  }) {
5159
4811
  return /* @__PURE__ */ jsxs("div", { className: `taskon-user-center-loading ${className}`, children: [
@@ -5168,10 +4820,10 @@ function Pagination({
5168
4820
  hasNext,
5169
4821
  onPrevious,
5170
4822
  onNext,
5171
- messages,
5172
4823
  className = "",
5173
4824
  showRange
5174
4825
  }) {
4826
+ const { messages } = useUserCenterLocale();
5175
4827
  if (totalPages === 0) {
5176
4828
  return null;
5177
4829
  }
@@ -5202,6 +4854,7 @@ function Pagination({
5202
4854
  function WithdrawPending({
5203
4855
  count,
5204
4856
  text,
4857
+ countAriaLabel,
5205
4858
  onClick
5206
4859
  }) {
5207
4860
  if (count <= 0) {
@@ -5226,7 +4879,7 @@ function WithdrawPending({
5226
4879
  "span",
5227
4880
  {
5228
4881
  className: "taskon-withdraw-pending__count",
5229
- "aria-label": "Number of pending withdrawals",
4882
+ "aria-label": countAriaLabel,
5230
4883
  children: count
5231
4884
  }
5232
4885
  ),
@@ -5266,12 +4919,17 @@ function formatBalance$2(balance) {
5266
4919
  if (num >= 1e3) return `${(num / 1e3).toFixed(2)}K`;
5267
4920
  return num.toLocaleString(void 0, { maximumFractionDigits: 5 });
5268
4921
  }
4922
+ function normalizeImageSrc(src) {
4923
+ if (typeof src !== "string") return null;
4924
+ const trimmed = src.trim();
4925
+ return trimmed.length > 0 ? trimmed : null;
4926
+ }
5269
4927
  function TokenAssetList({
5270
4928
  data,
5271
4929
  loading: loading2,
5272
4930
  error: error2,
5273
4931
  messages,
5274
- pendingWithdrawals: pendingWithdrawals2,
4932
+ pendingWithdrawals,
5275
4933
  onWithdraw,
5276
4934
  onViewFrozen
5277
4935
  }) {
@@ -5282,50 +4940,56 @@ function TokenAssetList({
5282
4940
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5283
4941
  }
5284
4942
  if (!loading2 && data.length === 0) {
5285
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyToken });
4943
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_token });
5286
4944
  }
5287
4945
  const columns = [
5288
4946
  {
5289
4947
  key: "token_symbol",
5290
- title: messages.columnTokenSymbol ?? "Token Symbol",
4948
+ title: messages.column_token_symbol,
5291
4949
  width: 120,
5292
- render: (_, row) => /* @__PURE__ */ jsxs("div", { className: "taskon-token-assets__symbol-cell", children: [
5293
- /* @__PURE__ */ jsx(
5294
- "img",
5295
- {
5296
- src: row.token_icon,
5297
- alt: row.token_symbol,
5298
- className: "taskon-token-assets__token-icon"
5299
- }
5300
- ),
5301
- /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__symbol", children: row.token_symbol })
5302
- ] })
4950
+ render: (_, row) => {
4951
+ const tokenIconSrc = normalizeImageSrc(row.token_icon);
4952
+ return /* @__PURE__ */ jsxs("div", { className: "taskon-token-assets__symbol-cell", children: [
4953
+ tokenIconSrc && /* @__PURE__ */ jsx(
4954
+ "img",
4955
+ {
4956
+ src: tokenIconSrc,
4957
+ alt: row.token_symbol,
4958
+ className: "taskon-token-assets__token-icon"
4959
+ }
4960
+ ),
4961
+ /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__symbol", children: row.token_symbol })
4962
+ ] });
4963
+ }
5303
4964
  },
5304
4965
  {
5305
4966
  key: "chain",
5306
- title: messages.columnNetwork ?? "Network",
4967
+ title: messages.column_network,
5307
4968
  width: 164,
5308
- render: (_, row) => /* @__PURE__ */ jsxs("div", { className: "taskon-token-assets__network-cell", children: [
5309
- /* @__PURE__ */ jsx(
5310
- "img",
5311
- {
5312
- src: row.chain_icon,
5313
- alt: row.chain_label,
5314
- className: "taskon-token-assets__chain-icon"
5315
- }
5316
- ),
5317
- /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__chain", children: row.chain_label })
5318
- ] })
4969
+ render: (_, row) => {
4970
+ const chainIconSrc = normalizeImageSrc(row.chain_icon);
4971
+ return /* @__PURE__ */ jsxs("div", { className: "taskon-token-assets__network-cell", children: [
4972
+ chainIconSrc && /* @__PURE__ */ jsx(
4973
+ "img",
4974
+ {
4975
+ src: chainIconSrc,
4976
+ alt: row.chain_label,
4977
+ className: "taskon-token-assets__chain-icon"
4978
+ }
4979
+ ),
4980
+ /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__chain", children: row.chain_label })
4981
+ ] });
4982
+ }
5319
4983
  },
5320
4984
  {
5321
4985
  key: "withdrawable_avail_balance",
5322
- title: messages.columnWithdrawable ?? "Withdrawable",
4986
+ title: messages.column_withdrawable,
5323
4987
  width: 142,
5324
4988
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__balance", children: formatBalance$2(row.withdrawable_avail_balance) })
5325
4989
  },
5326
4990
  {
5327
4991
  key: "frozen_balance",
5328
- title: messages.frozenAssets,
4992
+ title: messages.frozen_assets,
5329
4993
  width: 142,
5330
4994
  render: (_, row) => {
5331
4995
  const frozenAmount = formatBalance$2(row.frozen_balance || "0");
@@ -5346,7 +5010,7 @@ function TokenAssetList({
5346
5010
  },
5347
5011
  {
5348
5012
  key: "action",
5349
- title: messages.columnAction ?? "Action",
5013
+ title: messages.column_action,
5350
5014
  align: "right",
5351
5015
  render: (_, row) => {
5352
5016
  const isDisabled = !row.can_withdraw;
@@ -5368,8 +5032,9 @@ function TokenAssetList({
5368
5032
  /* @__PURE__ */ jsx(
5369
5033
  WithdrawPending,
5370
5034
  {
5371
- count: pendingWithdrawals2 ?? 0,
5372
- text: messages.pendingWithdrawals.replace("{count}", "").trim()
5035
+ count: pendingWithdrawals ?? 0,
5036
+ text: messages.pending_withdrawals_text,
5037
+ countAriaLabel: messages.pending_withdrawals_count_label
5373
5038
  }
5374
5039
  ),
5375
5040
  /* @__PURE__ */ jsx(
@@ -5385,7 +5050,7 @@ function TokenAssetList({
5385
5050
  loading: loading2 && data.length > 0,
5386
5051
  loadingText: messages.loading,
5387
5052
  empty: {
5388
- title: messages.emptyToken
5053
+ title: messages.empty_token
5389
5054
  }
5390
5055
  }
5391
5056
  )
@@ -5393,7 +5058,7 @@ function TokenAssetList({
5393
5058
  }
5394
5059
  function formatTime(timestamp) {
5395
5060
  const date = new Date(timestamp);
5396
- return date.toLocaleDateString(void 0, {
5061
+ return date.toLocaleDateString("en-US", {
5397
5062
  year: "numeric",
5398
5063
  month: "short",
5399
5064
  day: "numeric",
@@ -5409,17 +5074,17 @@ function formatAmount$1(amount) {
5409
5074
  function getLockedTypeLabel(type, messages) {
5410
5075
  switch (type) {
5411
5076
  case "Campaign":
5412
- return messages.frozenTypeCampaign ?? "Campaign Locked";
5077
+ return messages.frozen_type_campaign;
5413
5078
  case "Withdraw":
5414
- return messages.frozenTypeWithdraw ?? "Pending Withdrawal";
5079
+ return messages.frozen_type_withdraw;
5415
5080
  case "ReferralReward":
5416
- return messages.frozenTypeReferral ?? "Referral Locked";
5081
+ return messages.frozen_type_referral;
5417
5082
  case "Benefit":
5418
- return messages.frozenTypeBenefit ?? "Benefit Locked";
5083
+ return messages.frozen_type_benefit;
5419
5084
  case "TgMiniApp":
5420
- return messages.frozenTypeTgMiniApp ?? "TG Mini App";
5085
+ return messages.frozen_type_tg_mini_app;
5421
5086
  case "CommunityMilestone":
5422
- return messages.frozenTypeMilestone ?? "Milestone Locked";
5087
+ return messages.frozen_type_milestone;
5423
5088
  default:
5424
5089
  return type;
5425
5090
  }
@@ -5441,18 +5106,18 @@ function FrozenAssetList({
5441
5106
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5442
5107
  }
5443
5108
  if (!loading2 && data.length === 0) {
5444
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.noData });
5109
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.no_data });
5445
5110
  }
5446
5111
  const columns = [
5447
5112
  {
5448
5113
  key: "locked_amount",
5449
- title: messages.columnAmount,
5114
+ title: messages.column_amount,
5450
5115
  width: 120,
5451
5116
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__amount", children: formatAmount$1(row.locked_amount) })
5452
5117
  },
5453
5118
  {
5454
5119
  key: "type",
5455
- title: messages.columnDetail,
5120
+ title: messages.column_detail,
5456
5121
  render: (_, row) => /* @__PURE__ */ jsxs("div", { className: "taskon-frozen-assets__detail-cell", children: [
5457
5122
  /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__type", children: getLockedTypeLabel(row.type, messages) }),
5458
5123
  row.campaign_name && /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__campaign", children: row.campaign_name })
@@ -5460,13 +5125,13 @@ function FrozenAssetList({
5460
5125
  },
5461
5126
  {
5462
5127
  key: "lock_time",
5463
- title: messages.columnTime,
5128
+ title: messages.column_time,
5464
5129
  width: 160,
5465
5130
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__time", children: formatTime(row.lock_time) })
5466
5131
  },
5467
5132
  {
5468
5133
  key: "action",
5469
- title: messages.columnAction ?? "Action",
5134
+ title: messages.column_action,
5470
5135
  width: 100,
5471
5136
  align: "right",
5472
5137
  render: (_, row) => {
@@ -5486,14 +5151,14 @@ function FrozenAssetList({
5486
5151
  ];
5487
5152
  return /* @__PURE__ */ jsxs("div", { className: "taskon-frozen-assets", children: [
5488
5153
  /* @__PURE__ */ jsxs("div", { className: "taskon-frozen-assets__header", children: [
5489
- /* @__PURE__ */ jsx("h3", { className: "taskon-frozen-assets__title", children: messages.frozenAssets }),
5154
+ /* @__PURE__ */ jsx("h3", { className: "taskon-frozen-assets__title", children: messages.frozen_assets }),
5490
5155
  onClose && /* @__PURE__ */ jsx(
5491
5156
  "button",
5492
5157
  {
5493
5158
  type: "button",
5494
5159
  className: "taskon-frozen-assets__close",
5495
5160
  onClick: onClose,
5496
- "aria-label": "Close",
5161
+ "aria-label": messages.close,
5497
5162
  children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", width: "20", height: "20", children: /* @__PURE__ */ jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }) })
5498
5163
  }
5499
5164
  )
@@ -5510,7 +5175,7 @@ function FrozenAssetList({
5510
5175
  loading: loading2 && data.length > 0,
5511
5176
  loadingText: messages.loading,
5512
5177
  empty: {
5513
- title: messages.noData
5178
+ title: messages.no_data
5514
5179
  }
5515
5180
  }
5516
5181
  ),
@@ -5522,8 +5187,7 @@ function FrozenAssetList({
5522
5187
  onPrevious: pagination.goToPrevious,
5523
5188
  onNext: pagination.goToNext,
5524
5189
  hasPrevious: pagination.hasPrevious,
5525
- hasNext: pagination.hasNext,
5526
- messages
5190
+ hasNext: pagination.hasNext
5527
5191
  }
5528
5192
  )
5529
5193
  ] });
@@ -5561,7 +5225,18 @@ function formatTokenAmount(amount) {
5561
5225
  zeroText: "0"
5562
5226
  });
5563
5227
  }
5564
- function buildRewardCards(rewards, userInfo) {
5228
+ function buildRewardCards(rewards, userInfo, config) {
5229
+ const dataDrivenCards = buildDataDrivenCards(rewards, userInfo);
5230
+ const enabledCardOptions = getEnabledRewardCardOptions(config);
5231
+ if (enabledCardOptions === null) {
5232
+ return dataDrivenCards;
5233
+ }
5234
+ if (enabledCardOptions.length === 0) {
5235
+ return [];
5236
+ }
5237
+ return buildConfigDrivenCards(dataDrivenCards, enabledCardOptions);
5238
+ }
5239
+ function buildDataDrivenCards(rewards, userInfo) {
5565
5240
  var _a;
5566
5241
  const cards = [];
5567
5242
  const xpPointsId = (_a = userInfo == null ? void 0 : userInfo.points_list[0]) == null ? void 0 : _a.points_info.points_id;
@@ -5649,6 +5324,131 @@ function buildRewardCards(rewards, userInfo) {
5649
5324
  }
5650
5325
  return cards;
5651
5326
  }
5327
+ function getEnabledRewardCardOptions(config) {
5328
+ if (!config) {
5329
+ return null;
5330
+ }
5331
+ const rewardTab = config.find((tab) => tab.tab === UserCenterTabType.MyRewards);
5332
+ if (!rewardTab) {
5333
+ return [];
5334
+ }
5335
+ return filterEnabledCards(rewardTab);
5336
+ }
5337
+ function buildConfigDrivenCards(dataDrivenCards, enabledCardOptions) {
5338
+ const usedPointsIds = /* @__PURE__ */ new Set();
5339
+ return enabledCardOptions.map((option, index2) => {
5340
+ var _a;
5341
+ if (option.card === USER_CENTER_REWARD_CARD_TYPES.Points) {
5342
+ const matchedPointsCard = findConfiguredPointsCard(
5343
+ dataDrivenCards,
5344
+ option,
5345
+ usedPointsIds
5346
+ );
5347
+ if (matchedPointsCard) {
5348
+ const matchedPointsId = (_a = matchedPointsCard.pointsData) == null ? void 0 : _a.points_id;
5349
+ if (matchedPointsId != null) {
5350
+ usedPointsIds.add(matchedPointsId);
5351
+ }
5352
+ return {
5353
+ ...matchedPointsCard,
5354
+ visible: true
5355
+ };
5356
+ }
5357
+ return buildFallbackPointsCard(option, index2);
5358
+ }
5359
+ const matchedCard = dataDrivenCards.find(
5360
+ (card) => card.type === option.card && card.type !== USER_CENTER_REWARD_CARD_TYPES.Points
5361
+ );
5362
+ if (matchedCard) {
5363
+ return {
5364
+ ...matchedCard,
5365
+ visible: true
5366
+ };
5367
+ }
5368
+ return buildFallbackCard(option.card);
5369
+ }).filter((card) => card !== null);
5370
+ }
5371
+ function findConfiguredPointsCard(dataDrivenCards, option, usedPointsIds) {
5372
+ const pointsCards = dataDrivenCards.filter(
5373
+ (card) => card.type === USER_CENTER_REWARD_CARD_TYPES.Points && !!card.pointsData
5374
+ );
5375
+ if (option.pointsId != null) {
5376
+ return pointsCards.find(
5377
+ (card) => card.pointsData.points_id === option.pointsId && !usedPointsIds.has(card.pointsData.points_id)
5378
+ ) ?? null;
5379
+ }
5380
+ if (option.pointsName) {
5381
+ return pointsCards.find(
5382
+ (card) => card.pointsData.points_name === option.pointsName && !usedPointsIds.has(card.pointsData.points_id)
5383
+ ) ?? null;
5384
+ }
5385
+ return pointsCards.find((card) => !usedPointsIds.has(card.pointsData.points_id)) ?? null;
5386
+ }
5387
+ function buildFallbackCard(cardType) {
5388
+ switch (cardType) {
5389
+ case USER_CENTER_REWARD_CARD_TYPES.Token:
5390
+ return {
5391
+ type: USER_CENTER_REWARD_CARD_TYPES.Token,
5392
+ value: formatTokenAmount("0"),
5393
+ rawValue: "0",
5394
+ visible: true
5395
+ };
5396
+ case USER_CENTER_REWARD_CARD_TYPES.XpLevel:
5397
+ return {
5398
+ type: USER_CENTER_REWARD_CARD_TYPES.XpLevel,
5399
+ value: "Lv.0",
5400
+ rawValue: 0,
5401
+ visible: true,
5402
+ xpLevelData: {
5403
+ level: 0,
5404
+ currentXp: 0,
5405
+ nextLevelXp: 0,
5406
+ percent: 0,
5407
+ xpPointsId: 0,
5408
+ xpPointsName: "XP",
5409
+ xpPointsIcon: ""
5410
+ }
5411
+ };
5412
+ case USER_CENTER_REWARD_CARD_TYPES.Nft:
5413
+ return {
5414
+ type: USER_CENTER_REWARD_CARD_TYPES.Nft,
5415
+ value: "0",
5416
+ rawValue: 0,
5417
+ visible: true
5418
+ };
5419
+ case USER_CENTER_REWARD_CARD_TYPES.Whitelist:
5420
+ return {
5421
+ type: USER_CENTER_REWARD_CARD_TYPES.Whitelist,
5422
+ value: "0",
5423
+ rawValue: 0,
5424
+ visible: true
5425
+ };
5426
+ case USER_CENTER_REWARD_CARD_TYPES.DiscordRole:
5427
+ return {
5428
+ type: USER_CENTER_REWARD_CARD_TYPES.DiscordRole,
5429
+ value: "0",
5430
+ rawValue: 0,
5431
+ visible: true
5432
+ };
5433
+ default:
5434
+ return null;
5435
+ }
5436
+ }
5437
+ function buildFallbackPointsCard(option, index2) {
5438
+ const fallbackPointsId = option.pointsId ?? -(index2 + 1);
5439
+ return {
5440
+ type: USER_CENTER_REWARD_CARD_TYPES.Points,
5441
+ value: "0",
5442
+ rawValue: 0,
5443
+ visible: true,
5444
+ pointsData: {
5445
+ points_id: fallbackPointsId,
5446
+ points_name: option.pointsName || `Points ${index2 + 1}`,
5447
+ points_icon: "",
5448
+ amount: 0
5449
+ }
5450
+ };
5451
+ }
5652
5452
  function formatNumber(val) {
5653
5453
  if (Math.abs(val) >= 1e6) {
5654
5454
  return `${(val / 1e6).toFixed(1)}M`;
@@ -5664,9 +5464,9 @@ function PointsList({
5664
5464
  loading: loading2,
5665
5465
  error: error2,
5666
5466
  pagination,
5667
- messages,
5668
5467
  className = ""
5669
5468
  }) {
5469
+ const { messages } = useUserCenterLocale();
5670
5470
  if (loading2 && data.length === 0) {
5671
5471
  return /* @__PURE__ */ jsx(LoadingState, { message: messages.loading });
5672
5472
  }
@@ -5674,23 +5474,23 @@ function PointsList({
5674
5474
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5675
5475
  }
5676
5476
  if (!loading2 && data.length === 0) {
5677
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyPoints });
5477
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_points });
5678
5478
  }
5679
5479
  const columns = [
5680
5480
  {
5681
5481
  key: "detail",
5682
- title: messages.columnDetail,
5482
+ title: messages.column_detail,
5683
5483
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-points-list__name", children: row.name })
5684
5484
  },
5685
5485
  {
5686
5486
  key: "time",
5687
- title: messages.columnTime,
5487
+ title: messages.column_time,
5688
5488
  width: 160,
5689
5489
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-points-list__time", children: formatDateTime(row.receive_time) })
5690
5490
  },
5691
5491
  {
5692
5492
  key: "amount",
5693
- title: `${messages.columnAmount} (${pointsInfo.points_name || messages.rewardPoints})`,
5493
+ title: `${messages.column_amount} (${pointsInfo.points_name || messages.reward_points})`,
5694
5494
  width: 160,
5695
5495
  align: "right",
5696
5496
  render: (_, row) => {
@@ -5731,7 +5531,7 @@ function PointsList({
5731
5531
  /* @__PURE__ */ jsx("h3", { className: "taskon-points-list__title", children: pointsInfo.points_name }),
5732
5532
  /* @__PURE__ */ jsxs("div", { className: "taskon-points-list__total", children: [
5733
5533
  /* @__PURE__ */ jsx("span", { className: "taskon-points-list__total-value", children: formatNumber(pointsInfo.amount) }),
5734
- /* @__PURE__ */ jsx("span", { className: "taskon-points-list__total-label", children: messages.totalPoints })
5534
+ /* @__PURE__ */ jsx("span", { className: "taskon-points-list__total-label", children: messages.total_points })
5735
5535
  ] })
5736
5536
  ] }),
5737
5537
  /* @__PURE__ */ jsx("div", { className: "taskon-points-list__table-wrap", children: /* @__PURE__ */ jsx(
@@ -5745,7 +5545,7 @@ function PointsList({
5745
5545
  loading: loading2 && data.length > 0,
5746
5546
  loadingText: messages.loading,
5747
5547
  empty: {
5748
- title: messages.emptyPoints
5548
+ title: messages.empty_points
5749
5549
  }
5750
5550
  }
5751
5551
  ) }),
@@ -5757,8 +5557,7 @@ function PointsList({
5757
5557
  onPrevious: pagination.goToPrevious,
5758
5558
  onNext: pagination.goToNext,
5759
5559
  hasPrevious: pagination.hasPrevious,
5760
- hasNext: pagination.hasNext,
5761
- messages
5560
+ hasNext: pagination.hasNext
5762
5561
  }
5763
5562
  )
5764
5563
  ] });
@@ -5817,7 +5616,7 @@ function NftTable({
5817
5616
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5818
5617
  }
5819
5618
  if (!loading2 && data.length === 0) {
5820
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyNft });
5619
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_nft });
5821
5620
  }
5822
5621
  const renderStatus = (item) => {
5823
5622
  const nftValue = item.reward_value;
@@ -5832,7 +5631,7 @@ function NftTable({
5832
5631
  onTxClick == null ? void 0 : onTxClick(item);
5833
5632
  },
5834
5633
  title: nftValue.tx_hash,
5835
- children: messages.claimedTxn
5634
+ children: messages.claimed_txn
5836
5635
  }
5837
5636
  );
5838
5637
  }
@@ -5850,12 +5649,12 @@ function NftTable({
5850
5649
  }
5851
5650
  );
5852
5651
  }
5853
- return /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__manual-drop", children: messages.manualDrop });
5652
+ return /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__manual-drop", children: messages.manual_drop });
5854
5653
  };
5855
5654
  const columns = [
5856
5655
  {
5857
5656
  key: "nft",
5858
- title: messages.columnNft,
5657
+ title: messages.column_nft,
5859
5658
  width: 100,
5860
5659
  render: (_, row) => {
5861
5660
  const nftValue = row.reward_value;
@@ -5872,18 +5671,18 @@ function NftTable({
5872
5671
  },
5873
5672
  {
5874
5673
  key: "detail",
5875
- title: messages.columnDetail,
5674
+ title: messages.column_detail,
5876
5675
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__campaign-name", children: row.campaign_name })
5877
5676
  },
5878
5677
  {
5879
5678
  key: "time",
5880
- title: messages.columnTime,
5679
+ title: messages.column_time,
5881
5680
  width: 160,
5882
5681
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__time", children: formatDateTime(row.reward_time) })
5883
5682
  },
5884
5683
  {
5885
5684
  key: "status",
5886
- title: messages.columnStatus,
5685
+ title: messages.column_status,
5887
5686
  width: 120,
5888
5687
  align: "right",
5889
5688
  render: (_, row) => renderStatus(row)
@@ -5901,7 +5700,7 @@ function NftTable({
5901
5700
  loading: loading2 && data.length > 0,
5902
5701
  loadingText: messages.loading,
5903
5702
  empty: {
5904
- title: messages.emptyNft
5703
+ title: messages.empty_nft
5905
5704
  }
5906
5705
  }
5907
5706
  ),
@@ -5913,18 +5712,17 @@ function NftTable({
5913
5712
  onPrevious: pagination.goToPrevious,
5914
5713
  onNext: pagination.goToNext,
5915
5714
  hasPrevious: pagination.hasPrevious,
5916
- hasNext: pagination.hasNext,
5917
- messages
5715
+ hasNext: pagination.hasNext
5918
5716
  }
5919
5717
  )
5920
5718
  ] });
5921
5719
  }
5922
- function getDetailName(item, _messages) {
5720
+ function getDetailName(item, messages) {
5923
5721
  if (item.roulette_reward_type === RouletteRewardType.Spin) {
5924
- return "Telegram Spin";
5722
+ return messages.token_history_telegram_spin;
5925
5723
  }
5926
5724
  if (item.roulette_reward_type === RouletteRewardType.Bonus) {
5927
- return "Telegram Spin Bonus";
5725
+ return messages.token_history_telegram_spin_bonus;
5928
5726
  }
5929
5727
  return item.task_name || item.campaign_name || item.milestone_name || "";
5930
5728
  }
@@ -5942,7 +5740,7 @@ function TokenHistoryTable({
5942
5740
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5943
5741
  }
5944
5742
  if (!loading2 && data.length === 0) {
5945
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyToken });
5743
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_token });
5946
5744
  }
5947
5745
  const renderAmount = (item) => {
5948
5746
  var _a;
@@ -5968,7 +5766,7 @@ function TokenHistoryTable({
5968
5766
  )
5969
5767
  ] }),
5970
5768
  /* @__PURE__ */ jsx("div", { className: "taskon-token-history__distribute", children: isDeposited ? /* @__PURE__ */ jsx("span", { className: "taskon-token-history__deposited", children: messages.deposited }) : /* @__PURE__ */ jsxs("div", { className: "taskon-token-history__distributed-by", children: [
5971
- /* @__PURE__ */ jsx("span", { className: "taskon-token-history__distributed-label", children: messages.distributedBy }),
5769
+ /* @__PURE__ */ jsx("span", { className: "taskon-token-history__distributed-label", children: messages.distributed_by }),
5972
5770
  (communityInfo == null ? void 0 : communityInfo.community_avatar) && /* @__PURE__ */ jsx(
5973
5771
  "img",
5974
5772
  {
@@ -5984,18 +5782,18 @@ function TokenHistoryTable({
5984
5782
  const columns = [
5985
5783
  {
5986
5784
  key: "detail",
5987
- title: messages.columnDetail,
5988
- render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__campaign-name", children: getDetailName(row) })
5785
+ title: messages.column_detail,
5786
+ render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__campaign-name", children: getDetailName(row, messages) })
5989
5787
  },
5990
5788
  {
5991
5789
  key: "time",
5992
- title: messages.columnTime,
5790
+ title: messages.column_time,
5993
5791
  width: 160,
5994
5792
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__time", children: formatDateTime(row.reward_time) })
5995
5793
  },
5996
5794
  {
5997
5795
  key: "amount",
5998
- title: messages.columnAmount,
5796
+ title: messages.column_amount,
5999
5797
  width: 200,
6000
5798
  align: "right",
6001
5799
  render: (_, row) => renderAmount(row)
@@ -6013,7 +5811,7 @@ function TokenHistoryTable({
6013
5811
  loading: loading2 && data.length > 0,
6014
5812
  loadingText: messages.loading,
6015
5813
  empty: {
6016
- title: messages.emptyToken
5814
+ title: messages.empty_token
6017
5815
  }
6018
5816
  }
6019
5817
  ),
@@ -6025,8 +5823,7 @@ function TokenHistoryTable({
6025
5823
  onPrevious: pagination.goToPrevious,
6026
5824
  onNext: pagination.goToNext,
6027
5825
  hasPrevious: pagination.hasPrevious,
6028
- hasNext: pagination.hasNext,
6029
- messages
5826
+ hasNext: pagination.hasNext
6030
5827
  }
6031
5828
  )
6032
5829
  ] });
@@ -6050,7 +5847,7 @@ function useRewardDetails(options) {
6050
5847
  const pagination = usePagination({
6051
5848
  total,
6052
5849
  pageSize,
6053
- initialPage: 1,
5850
+ initialPage: 0,
6054
5851
  mode
6055
5852
  });
6056
5853
  const fetchData = useCallback(
@@ -6065,7 +5862,7 @@ function useRewardDetails(options) {
6065
5862
  const response = await api.listMyCommunityRewardDetails({
6066
5863
  reward_type: rewardType,
6067
5864
  page: {
6068
- page_no: pageNo - 1,
5865
+ page_no: pageNo,
6069
5866
  // API 使用 0-based 索引
6070
5867
  size: pageSize
6071
5868
  }
@@ -6087,20 +5884,23 @@ function useRewardDetails(options) {
6087
5884
  [api, rewardType, pageSize]
6088
5885
  );
6089
5886
  const refresh = useCallback(async () => {
6090
- pagination.goToPage(1);
6091
5887
  setData([]);
6092
- await fetchData(1, false);
5888
+ if (pagination.page === 0) {
5889
+ await fetchData(0, false);
5890
+ return;
5891
+ }
5892
+ pagination.goToPage(0);
6093
5893
  }, [fetchData, pagination]);
6094
5894
  useEffect(() => {
6095
- if (autoLoad) {
6096
- fetchData(1, false);
5895
+ if (!autoLoad) {
5896
+ return;
6097
5897
  }
6098
- }, [autoLoad, rewardType, fetchData]);
6099
- useEffect(() => {
6100
- if (mode === "pagination" && pagination.page > 1) {
5898
+ if (mode === "pagination") {
6101
5899
  fetchData(pagination.page, false);
5900
+ return;
6102
5901
  }
6103
- }, [mode, pagination.page, fetchData]);
5902
+ fetchData(pagination.page, pagination.page > 0);
5903
+ }, [autoLoad, mode, pagination.page, fetchData]);
6104
5904
  return {
6105
5905
  data,
6106
5906
  loading: loading2,
@@ -6121,7 +5921,7 @@ function useTokenAssets(options = {}) {
6121
5921
  const { client } = useTaskOnContext();
6122
5922
  const [data, setData] = useState([]);
6123
5923
  const [total, setTotal] = useState(0);
6124
- const [pendingWithdrawals2, setPendingWithdrawals] = useState(0);
5924
+ const [pendingWithdrawals, setPendingWithdrawals] = useState(0);
6125
5925
  const [loading2, setLoading] = useState(false);
6126
5926
  const [error2, setError] = useState(null);
6127
5927
  const api = useMemo(() => {
@@ -6196,7 +5996,7 @@ function useTokenAssets(options = {}) {
6196
5996
  loading: loading2,
6197
5997
  error: error2,
6198
5998
  total,
6199
- pendingWithdrawals: pendingWithdrawals2,
5999
+ pendingWithdrawals,
6200
6000
  pagination,
6201
6001
  refresh
6202
6002
  };
@@ -6527,7 +6327,7 @@ function useTokenWithdraw(options = {}) {
6527
6327
  evmAdapter,
6528
6328
  onError
6529
6329
  ]);
6530
- const confirmWithdraw2 = useCallback(async () => {
6330
+ const confirmWithdraw = useCallback(async () => {
6531
6331
  if (!api) {
6532
6332
  setError(new Error("TaskOn client not initialized"));
6533
6333
  return;
@@ -6662,7 +6462,7 @@ function useTokenWithdraw(options = {}) {
6662
6462
  initBatchWithdraw,
6663
6463
  initWithdrawTokens,
6664
6464
  checkAndConnect,
6665
- confirmWithdraw: confirmWithdraw2,
6465
+ confirmWithdraw,
6666
6466
  cancelWithdraw,
6667
6467
  reset
6668
6468
  };
@@ -6742,7 +6542,13 @@ function usePointsHistory(options) {
6742
6542
  };
6743
6543
  }
6744
6544
  function useWithdrawForm(options) {
6745
- const { tokenAssets, initialTokenId, initialChain, getDecimals } = options;
6545
+ const {
6546
+ tokenAssets,
6547
+ initialTokenId,
6548
+ initialChain,
6549
+ getDecimals,
6550
+ messages
6551
+ } = options;
6746
6552
  const resolveDecimals = useCallback(
6747
6553
  (tokenAddress) => {
6748
6554
  if (getDecimals) {
@@ -6768,23 +6574,23 @@ function useWithdrawForm(options) {
6768
6574
  const validation = useMemo(() => {
6769
6575
  const errors = {};
6770
6576
  if (!selectedToken) {
6771
- errors.token = "Please select a token";
6577
+ errors.token = messages.please_select_token;
6772
6578
  }
6773
6579
  if (!withdrawAmount || withdrawAmount === "") {
6774
- errors.amount = "Please enter an amount";
6580
+ errors.amount = messages.please_enter_amount;
6775
6581
  } else {
6776
6582
  const amount = parseFloat(withdrawAmount);
6777
6583
  if (isNaN(amount) || amount <= 0) {
6778
- errors.amount = "Please enter a valid amount";
6584
+ errors.amount = messages.please_enter_valid_amount;
6779
6585
  } else if (selectedToken && amount > parseFloat(selectedToken.withdrawable_avail_balance)) {
6780
- errors.amount = "Amount exceeds available balance";
6586
+ errors.amount = messages.amount_exceeds_balance;
6781
6587
  }
6782
6588
  }
6783
6589
  return {
6784
6590
  isValid: Object.keys(errors).length === 0,
6785
6591
  errors
6786
6592
  };
6787
- }, [selectedToken, withdrawAmount]);
6593
+ }, [selectedToken, withdrawAmount, messages]);
6788
6594
  useEffect(() => {
6789
6595
  if (tokenAssets.length === 0) return;
6790
6596
  if (initialTokenId) {
@@ -6960,17 +6766,16 @@ function TokenRewardContent({
6960
6766
  tokenAssets,
6961
6767
  tokenAssetsLoading,
6962
6768
  tokenAssetsError,
6963
- pendingWithdrawals: pendingWithdrawals2,
6964
- tokenHistory: tokenHistory2,
6769
+ pendingWithdrawals,
6770
+ tokenHistory,
6965
6771
  tokenHistoryLoading,
6966
6772
  tokenHistoryError,
6967
6773
  tokenHistoryPagination,
6968
- messages,
6969
6774
  onWithdraw,
6970
6775
  onBatchWithdraw,
6971
6776
  showFrozenAssets = false,
6972
6777
  onViewFrozen,
6973
- frozenAssets: frozenAssets2 = [],
6778
+ frozenAssets = [],
6974
6779
  frozenAssetsLoading = false,
6975
6780
  frozenAssetsError = null,
6976
6781
  frozenAssetsPagination,
@@ -6978,6 +6783,7 @@ function TokenRewardContent({
6978
6783
  onResendFrozenAsset,
6979
6784
  onCloseFrozenAssets
6980
6785
  }) {
6786
+ const { messages } = useUserCenterLocale();
6981
6787
  return /* @__PURE__ */ jsxs("div", { className: "taskon-my-rewards", children: [
6982
6788
  /* @__PURE__ */ jsx("div", { className: "taskon-my-rewards__section", children: /* @__PURE__ */ jsx(
6983
6789
  TokenAssetList,
@@ -6986,7 +6792,7 @@ function TokenRewardContent({
6986
6792
  loading: tokenAssetsLoading,
6987
6793
  error: tokenAssetsError,
6988
6794
  messages,
6989
- pendingWithdrawals: pendingWithdrawals2,
6795
+ pendingWithdrawals,
6990
6796
  onWithdraw,
6991
6797
  onBatchWithdraw,
6992
6798
  onViewFrozen
@@ -6995,7 +6801,7 @@ function TokenRewardContent({
6995
6801
  showFrozenAssets && frozenAssetsPagination && /* @__PURE__ */ jsx("div", { className: "taskon-my-rewards__section", children: /* @__PURE__ */ jsx(
6996
6802
  FrozenAssetList,
6997
6803
  {
6998
- data: frozenAssets2,
6804
+ data: frozenAssets,
6999
6805
  loading: frozenAssetsLoading,
7000
6806
  error: frozenAssetsError,
7001
6807
  pagination: frozenAssetsPagination,
@@ -7006,11 +6812,11 @@ function TokenRewardContent({
7006
6812
  }
7007
6813
  ) }),
7008
6814
  /* @__PURE__ */ jsxs("div", { className: "taskon-my-rewards__section", children: [
7009
- /* @__PURE__ */ jsx("h3", { className: "taskon-my-rewards__section-title", children: messages.tokenHistory }),
6815
+ /* @__PURE__ */ jsx("h3", { className: "taskon-my-rewards__section-title", children: messages.token_history }),
7010
6816
  /* @__PURE__ */ jsx(
7011
6817
  TokenHistoryTable,
7012
6818
  {
7013
- data: tokenHistory2,
6819
+ data: tokenHistory,
7014
6820
  loading: tokenHistoryLoading,
7015
6821
  error: tokenHistoryError,
7016
6822
  pagination: tokenHistoryPagination,
@@ -7025,24 +6831,22 @@ function NftRewardContent({
7025
6831
  loading: loading2,
7026
6832
  error: error2,
7027
6833
  pagination,
7028
- messages,
7029
6834
  onClaim: customOnClaim,
7030
6835
  onTxClick: customOnTxClick,
7031
6836
  onClaimSuccess,
7032
6837
  onClaimError
7033
6838
  }) {
6839
+ const { messages } = useUserCenterLocale();
7034
6840
  const { chainMap } = useChainMap();
7035
6841
  const [isClaimDialogOpen, setIsClaimDialogOpen] = useState(false);
7036
- const [isWalletDialogOpen, setIsWalletDialogOpen] = useState(false);
7037
6842
  const [isPendingDialogOpen, setIsPendingDialogOpen] = useState(false);
7038
6843
  const [pendingTxDialogState, setPendingTxDialogState] = useState(null);
7039
- const [pendingWalletClaimItem, setPendingWalletClaimItem] = useState(null);
7040
6844
  const pendingDecisionResolverRef = useRef(null);
7041
- const resolvePendingDecision = useCallback((claimAgain2) => {
6845
+ const resolvePendingDecision = useCallback((claimAgain) => {
7042
6846
  const resolver = pendingDecisionResolverRef.current;
7043
6847
  if (resolver) {
7044
6848
  pendingDecisionResolverRef.current = null;
7045
- resolver(claimAgain2);
6849
+ resolver(claimAgain);
7046
6850
  }
7047
6851
  }, []);
7048
6852
  useEffect(() => {
@@ -7054,8 +6858,8 @@ function NftRewardContent({
7054
6858
  status: claimStatus,
7055
6859
  error: claimError,
7056
6860
  txHash: claimTxHash,
7057
- claimingNft: claimingNft2,
7058
- claimNft: claimNft2,
6861
+ claimingNft,
6862
+ claimNft,
7059
6863
  reset: resetClaim
7060
6864
  } = useNftClaim({
7061
6865
  onSuccess: (txHash, item) => {
@@ -7066,49 +6870,75 @@ function NftRewardContent({
7066
6870
  },
7067
6871
  onPendingFound: async (pendingKey, txHash, chainName, item) => {
7068
6872
  const rewardValue = item.reward_value;
7069
- const receiveAddress2 = typeof rewardValue.receiver_address === "string" ? rewardValue.receiver_address : void 0;
6873
+ const receiveAddress = typeof rewardValue.receiver_address === "string" ? rewardValue.receiver_address : void 0;
7070
6874
  resolvePendingDecision(false);
7071
6875
  setIsClaimDialogOpen(false);
7072
6876
  setPendingTxDialogState({
7073
6877
  pendingKey,
7074
6878
  txHash,
7075
6879
  chainName,
7076
- receiveAddress: receiveAddress2
6880
+ receiveAddress
7077
6881
  });
7078
6882
  setIsPendingDialogOpen(true);
7079
6883
  return new Promise((resolve) => {
7080
6884
  pendingDecisionResolverRef.current = resolve;
7081
6885
  });
7082
- },
7083
- onNeedWalletDialog: () => {
7084
- setIsClaimDialogOpen(false);
7085
- setIsWalletDialogOpen(true);
7086
6886
  }
7087
6887
  });
7088
6888
  const explorerUrl = useMemo(() => {
7089
- if (!claimTxHash || !claimingNft2) return void 0;
7090
- const chainName = claimingNft2.chainName;
6889
+ if (!claimTxHash || !claimingNft) return void 0;
6890
+ const chainName = claimingNft.chainName;
7091
6891
  const chainInfo = chainMap[chainName.toLowerCase()];
7092
6892
  if (!chainInfo) return void 0;
7093
6893
  return getTxExplorerUrl(chainInfo, claimTxHash);
7094
- }, [claimTxHash, claimingNft2, chainMap]);
6894
+ }, [claimTxHash, claimingNft, chainMap]);
7095
6895
  const pendingExplorerUrl = useMemo(() => {
7096
6896
  if (!(pendingTxDialogState == null ? void 0 : pendingTxDialogState.txHash)) return void 0;
7097
6897
  const chainInfo = chainMap[pendingTxDialogState.chainName.toLowerCase()];
7098
6898
  if (!chainInfo) return void 0;
7099
6899
  return getTxExplorerUrl(chainInfo, pendingTxDialogState.txHash);
7100
6900
  }, [pendingTxDialogState, chainMap]);
6901
+ const claimDialogMessages = useMemo(
6902
+ () => ({
6903
+ claimNft: messages.claim_nft,
6904
+ claimingNft: messages.claiming_nft,
6905
+ claimConnectingWallet: messages.claim_connecting_wallet,
6906
+ claimSwitchingNetwork: messages.claim_switching_network,
6907
+ claimGettingSignature: messages.claim_getting_signature,
6908
+ claimConfirmInWallet: messages.claim_confirm_in_wallet,
6909
+ claimTransactionPending: messages.claim_transaction_pending,
6910
+ claimSuccess: messages.claim_success,
6911
+ claimFailed: messages.claim_failed,
6912
+ claimCanceled: messages.claim_canceled,
6913
+ viewOnExplorer: messages.view_on_explorer,
6914
+ retry: messages.retry,
6915
+ close: messages.close
6916
+ }),
6917
+ [messages]
6918
+ );
6919
+ const pendingDialogMessages = useMemo(
6920
+ () => ({
6921
+ pendingTransaction: messages.pending_transaction,
6922
+ claimPendingTitle: messages.claim_pending_title,
6923
+ claimPendingCheckExplorer: messages.claim_pending_check_explorer,
6924
+ claimPendingHashLabel: messages.claim_pending_hash_label,
6925
+ claimPendingClaimAgainWarn: messages.claim_pending_claim_again_warn,
6926
+ claimPendingReceiveAddressNoChange: messages.claim_pending_receive_address_no_change,
6927
+ claimAgain: messages.claim_again,
6928
+ continueWaiting: messages.continue_waiting
6929
+ }),
6930
+ [messages]
6931
+ );
7101
6932
  const handleNftClaim = useCallback(
7102
6933
  (item) => {
7103
6934
  if (customOnClaim) {
7104
6935
  customOnClaim(item);
7105
6936
  return;
7106
6937
  }
7107
- setPendingWalletClaimItem(item);
7108
6938
  setIsClaimDialogOpen(true);
7109
- void claimNft2(item);
6939
+ void claimNft(item);
7110
6940
  },
7111
- [customOnClaim, claimNft2]
6941
+ [customOnClaim, claimNft]
7112
6942
  );
7113
6943
  const handleNftTxClick = useCallback(
7114
6944
  (item) => {
@@ -7136,35 +6966,9 @@ function NftRewardContent({
7136
6966
  },
7137
6967
  [customOnTxClick, chainMap]
7138
6968
  );
7139
- const handleWalletConnect = useCallback(
7140
- async (address, provider) => {
7141
- const targetItem = pendingWalletClaimItem ?? (claimingNft2 == null ? void 0 : claimingNft2.item);
7142
- if (!targetItem) {
7143
- throw new Error("No pending NFT claim target found");
7144
- }
7145
- if (!provider || typeof provider.request !== "function") {
7146
- throw new Error("Invalid wallet provider");
7147
- }
7148
- const popupAdapter = createEthereumAdapterFromProvider(
7149
- provider,
7150
- {
7151
- // 弹窗回调已返回地址,先注入,避免重复 connect
7152
- address
7153
- }
7154
- );
7155
- setIsWalletDialogOpen(false);
7156
- setIsClaimDialogOpen(true);
7157
- await claimNft2(targetItem, popupAdapter);
7158
- },
7159
- [pendingWalletClaimItem, claimingNft2, claimNft2]
7160
- );
7161
- const handleWalletError = useCallback((errorMessage) => {
7162
- console.warn("Wallet dialog connect failed:", errorMessage);
7163
- }, []);
7164
6969
  const handlePendingContinueWaiting = useCallback(() => {
7165
6970
  setIsPendingDialogOpen(false);
7166
6971
  setPendingTxDialogState(null);
7167
- setPendingWalletClaimItem(null);
7168
6972
  resetClaim();
7169
6973
  resolvePendingDecision(false);
7170
6974
  }, [resetClaim, resolvePendingDecision]);
@@ -7178,16 +6982,14 @@ function NftRewardContent({
7178
6982
  setIsClaimDialogOpen(false);
7179
6983
  setTimeout(() => {
7180
6984
  resetClaim();
7181
- setPendingWalletClaimItem(null);
7182
6985
  }, 200);
7183
6986
  }, [resetClaim]);
7184
6987
  const handleRetry = useCallback(() => {
7185
- if (claimingNft2) {
6988
+ if (claimingNft) {
7186
6989
  resetClaim();
7187
- setPendingWalletClaimItem(claimingNft2.item);
7188
- void claimNft2(claimingNft2.item);
6990
+ void claimNft(claimingNft.item);
7189
6991
  }
7190
- }, [claimingNft2, resetClaim, claimNft2]);
6992
+ }, [claimingNft, resetClaim, claimNft]);
7191
6993
  return /* @__PURE__ */ jsxs(Fragment, { children: [
7192
6994
  /* @__PURE__ */ jsx(
7193
6995
  NftTable,
@@ -7209,9 +7011,9 @@ function NftRewardContent({
7209
7011
  status: claimStatus,
7210
7012
  error: claimError,
7211
7013
  txHash: claimTxHash,
7212
- claimingNft: claimingNft2,
7014
+ claimingNft,
7213
7015
  explorerUrl,
7214
- messages,
7016
+ messages: claimDialogMessages,
7215
7017
  onRetry: handleRetry
7216
7018
  }
7217
7019
  ),
@@ -7225,16 +7027,7 @@ function NftRewardContent({
7225
7027
  txHash: pendingTxDialogState == null ? void 0 : pendingTxDialogState.txHash,
7226
7028
  explorerUrl: pendingExplorerUrl,
7227
7029
  receiveAddress: pendingTxDialogState == null ? void 0 : pendingTxDialogState.receiveAddress,
7228
- messages
7229
- }
7230
- ),
7231
- /* @__PURE__ */ jsx(
7232
- BindWalletDialog,
7233
- {
7234
- open: isWalletDialogOpen,
7235
- onOpenChange: setIsWalletDialogOpen,
7236
- onConnect: handleWalletConnect,
7237
- onError: handleWalletError
7030
+ messages: pendingDialogMessages
7238
7031
  }
7239
7032
  )
7240
7033
  ] });
@@ -7245,14 +7038,17 @@ function formatBalance$1(balance) {
7245
7038
  return num.toLocaleString(void 0, { maximumFractionDigits: 6 });
7246
7039
  }
7247
7040
  function TokenSelect({
7041
+ messages,
7248
7042
  tokens,
7249
7043
  value,
7250
- placeholder = "Select Token",
7044
+ placeholder,
7251
7045
  disabled = false,
7252
7046
  hasError = false,
7253
- notSupportText = "Token not supported",
7047
+ notSupportText,
7254
7048
  onChange
7255
7049
  }) {
7050
+ const placeholderText = placeholder ?? messages.select_token;
7051
+ const notSupportLabel = notSupportText ?? messages.token_not_supported;
7256
7052
  const tokenOptions = useMemo(() => {
7257
7053
  return tokens.map((token) => ({
7258
7054
  label: token.token_symbol,
@@ -7305,18 +7101,18 @@ function TokenSelect({
7305
7101
  canWithdraw: tokenOption.can_withdraw,
7306
7102
  active,
7307
7103
  disabled: tokenOption.disabled,
7308
- notSupportText
7104
+ notSupportText: notSupportLabel
7309
7105
  }
7310
7106
  );
7311
7107
  },
7312
- [notSupportText]
7108
+ [notSupportLabel]
7313
7109
  );
7314
7110
  return /* @__PURE__ */ jsx(
7315
7111
  Select,
7316
7112
  {
7317
7113
  options: tokenOptions,
7318
7114
  value,
7319
- placeholder,
7115
+ placeholder: placeholderText,
7320
7116
  disabled,
7321
7117
  hasError,
7322
7118
  showCheckedIcon: false,
@@ -7386,6 +7182,7 @@ function formatAddress(address, prefixLen = 6, suffixLen = 4) {
7386
7182
  return `${address.slice(0, prefixLen)}...${address.slice(-suffixLen)}`;
7387
7183
  }
7388
7184
  function ReceiverAddress({
7185
+ messages,
7389
7186
  chainIcon,
7390
7187
  chainLabel,
7391
7188
  address
@@ -7396,13 +7193,13 @@ function ReceiverAddress({
7396
7193
  "img",
7397
7194
  {
7398
7195
  src: chainIcon,
7399
- alt: chainLabel || "chain",
7196
+ alt: chainLabel || messages.chain_label,
7400
7197
  className: "taskon-receiver-address__chain-icon"
7401
7198
  }
7402
7199
  ),
7403
- /* @__PURE__ */ jsx("span", { className: "taskon-receiver-address__chain-label", children: chainLabel || "--" })
7200
+ /* @__PURE__ */ jsx("span", { className: "taskon-receiver-address__chain-label", children: chainLabel || messages.no_data })
7404
7201
  ] }),
7405
- /* @__PURE__ */ jsx("div", { className: "taskon-receiver-address__address", children: address ? formatAddress(address) : "--" })
7202
+ /* @__PURE__ */ jsx("div", { className: "taskon-receiver-address__address", children: address ? formatAddress(address) : messages.no_data })
7406
7203
  ] });
7407
7204
  }
7408
7205
  const PAGE_SIZE = 5;
@@ -7662,7 +7459,7 @@ function BatchTokenTable({
7662
7459
  // Token 类型列
7663
7460
  {
7664
7461
  key: "token_symbol",
7665
- title: messages.columnTokenType || "Type",
7462
+ title: messages.column_token_type,
7666
7463
  width: 105,
7667
7464
  align: "center",
7668
7465
  render: (_, row) => /* @__PURE__ */ jsxs("div", { className: "taskon-batch-token-table__token-cell", children: [
@@ -7680,7 +7477,7 @@ function BatchTokenTable({
7680
7477
  // 可提现金额列
7681
7478
  {
7682
7479
  key: "withdrawable_avail_balance",
7683
- title: messages.columnAmountWithdrawable || "Amount Withdrawable",
7480
+ title: messages.column_amount_withdrawable,
7684
7481
  width: 120,
7685
7482
  align: "center",
7686
7483
  render: (_, row) => formatBalance(row.withdrawable_avail_balance)
@@ -7688,7 +7485,7 @@ function BatchTokenTable({
7688
7485
  // 提现金额输入列
7689
7486
  {
7690
7487
  key: "amount",
7691
- title: messages.columnWithdrawAmount || "Withdraw Amount",
7488
+ title: messages.column_withdraw_amount,
7692
7489
  width: 120,
7693
7490
  align: "center",
7694
7491
  render: (_, row) => {
@@ -7773,18 +7570,18 @@ function WithdrawFormInit({
7773
7570
  return /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-form-init", children: [
7774
7571
  /* @__PURE__ */ jsx("h2", { className: "taskon-withdraw-form-init__title", children: messages.withdraw }),
7775
7572
  /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-form-init__content", children: [
7776
- /* @__PURE__ */ jsx(FormItem, { label: "Select Token", type: "dialog", error: validationErrors.token, children: /* @__PURE__ */ jsx(
7573
+ /* @__PURE__ */ jsx(FormItem, { label: messages.select_token, type: "dialog", error: validationErrors.token, children: /* @__PURE__ */ jsx(
7777
7574
  TokenSelect,
7778
7575
  {
7576
+ messages,
7779
7577
  tokens: withdrawableTokens,
7780
7578
  value: selectedTokenId,
7781
- placeholder: "Select Token",
7782
7579
  disabled: tokenAssetsLoading || submitting,
7783
7580
  hasError: !!validationErrors.token,
7784
7581
  onChange: onTokenChange
7785
7582
  }
7786
7583
  ) }),
7787
- /* @__PURE__ */ jsx(FormItem, { label: "Token Amount", type: "dialog", error: validationErrors.amount, children: /* @__PURE__ */ jsx(
7584
+ /* @__PURE__ */ jsx(FormItem, { label: messages.token_amount, type: "dialog", error: validationErrors.amount, children: /* @__PURE__ */ jsx(
7788
7585
  AmountInput,
7789
7586
  {
7790
7587
  value: withdrawAmount,
@@ -7796,9 +7593,10 @@ function WithdrawFormInit({
7796
7593
  onChange: onAmountChange
7797
7594
  }
7798
7595
  ) }),
7799
- /* @__PURE__ */ jsx(FormItem, { label: "Receive Address", type: "dialog", children: /* @__PURE__ */ jsx(
7596
+ /* @__PURE__ */ jsx(FormItem, { label: messages.receive_address, type: "dialog", children: /* @__PURE__ */ jsx(
7800
7597
  ReceiverAddress,
7801
7598
  {
7599
+ messages,
7802
7600
  chainIcon: selectedToken == null ? void 0 : selectedToken.chain_icon,
7803
7601
  chainLabel: selectedToken == null ? void 0 : selectedToken.chain_label,
7804
7602
  address: userAddress
@@ -7809,7 +7607,7 @@ function WithdrawFormInit({
7809
7607
  {
7810
7608
  checked: batchEnabled,
7811
7609
  onChange: onBatchEnabledChange,
7812
- label: messages.batchWithdraw,
7610
+ label: messages.batch_withdraw,
7813
7611
  disabled: submitting
7814
7612
  }
7815
7613
  ) }) }),
@@ -7854,7 +7652,7 @@ function WithdrawConfirm({
7854
7652
  onCancel
7855
7653
  }) {
7856
7654
  return /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-confirm", children: [
7857
- /* @__PURE__ */ jsx("div", { className: "taskon-withdraw-confirm__header", children: /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-confirm__title", children: messages.withdrawConfirm }) }),
7655
+ /* @__PURE__ */ jsx("div", { className: "taskon-withdraw-confirm__header", children: /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-confirm__title", children: messages.withdraw_confirm }) }),
7858
7656
  /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-confirm__content", children: [
7859
7657
  /* @__PURE__ */ jsx("div", { className: "taskon-withdraw-confirm__tokens", children: tokens.map((token) => /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-confirm__token", children: [
7860
7658
  /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-confirm__token-info", children: [
@@ -7944,7 +7742,7 @@ function WithdrawSuccess({
7944
7742
  children: /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" })
7945
7743
  }
7946
7744
  ) }),
7947
- /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-success__title", children: messages.withdrawSuccess }),
7745
+ /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-success__title", children: messages.withdraw_success }),
7948
7746
  txHash && /* @__PURE__ */ jsxs("p", { className: "taskon-withdraw-success__tx-hash", children: [
7949
7747
  "TX: ",
7950
7748
  txHash.slice(0, 10),
@@ -7978,8 +7776,8 @@ function WithdrawCancel({
7978
7776
  children: /* @__PURE__ */ jsx("path", { d: "M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z" })
7979
7777
  }
7980
7778
  ) }),
7981
- /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-cancel__title", children: messages.withdrawCanceled }),
7982
- /* @__PURE__ */ jsx("p", { className: "taskon-withdraw-cancel__message", children: messages.withdrawCanceledMessage ?? "Your withdrawal was canceled. You can retry the transaction." }),
7779
+ /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-cancel__title", children: messages.withdraw_canceled }),
7780
+ /* @__PURE__ */ jsx("p", { className: "taskon-withdraw-cancel__message", children: messages.withdraw_canceled_message }),
7983
7781
  /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-cancel__actions", children: [
7984
7782
  /* @__PURE__ */ jsx(
7985
7783
  Button,
@@ -8005,6 +7803,7 @@ function WithdrawGasNotEnough({
8005
7803
  chainLabel,
8006
7804
  onClose
8007
7805
  }) {
7806
+ const message = chainLabel ? messages.gas_not_enough_description_with_chain.replace("{chain}", chainLabel) : messages.gas_not_enough_description;
8008
7807
  return /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-gas-not-enough", children: [
8009
7808
  /* @__PURE__ */ jsx("div", { className: "taskon-withdraw-gas-not-enough__icon", children: /* @__PURE__ */ jsx(
8010
7809
  "svg",
@@ -8016,8 +7815,8 @@ function WithdrawGasNotEnough({
8016
7815
  children: /* @__PURE__ */ jsx("path", { d: "M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" })
8017
7816
  }
8018
7817
  ) }),
8019
- /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-gas-not-enough__title", children: messages.gasNotEnough }),
8020
- /* @__PURE__ */ jsx("p", { className: "taskon-withdraw-gas-not-enough__message", children: chainLabel ? `Please ensure you have enough ${chainLabel} gas to complete this transaction.` : "Please ensure you have enough gas to complete this transaction." }),
7818
+ /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-gas-not-enough__title", children: messages.gas_not_enough }),
7819
+ /* @__PURE__ */ jsx("p", { className: "taskon-withdraw-gas-not-enough__message", children: message }),
8021
7820
  /* @__PURE__ */ jsx(
8022
7821
  Button,
8023
7822
  {
@@ -8032,22 +7831,21 @@ function WithdrawGasNotEnough({
8032
7831
  function getDialogTitle(status, messages) {
8033
7832
  switch (status) {
8034
7833
  case "confirm":
8035
- return messages.withdrawConfirm;
7834
+ return messages.withdraw_confirm;
8036
7835
  case "loading":
8037
7836
  return messages.loading;
8038
7837
  case "success":
8039
- return messages.withdrawSuccess;
7838
+ return messages.withdraw_success;
8040
7839
  case "cancel":
8041
- return messages.withdrawCanceled;
7840
+ return messages.withdraw_canceled;
8042
7841
  case "noEnough":
8043
- return messages.gasNotEnough;
7842
+ return messages.gas_not_enough;
8044
7843
  default:
8045
7844
  return messages.withdraw;
8046
7845
  }
8047
7846
  }
8048
7847
  function WithdrawForm({
8049
7848
  open,
8050
- messages,
8051
7849
  tokenAssets,
8052
7850
  tokenAssetsLoading,
8053
7851
  userAddress,
@@ -8058,10 +7856,13 @@ function WithdrawForm({
8058
7856
  onClose,
8059
7857
  onSuccess
8060
7858
  }) {
7859
+ const { messages } = useUserCenterLocale();
8061
7860
  const [submitting, setSubmitting] = useState(false);
8062
7861
  const { toast } = useToast();
8063
7862
  const { userInfo } = useTaskOnContext();
8064
- const isResendMode = Boolean(resend2 && resendTokenItems && resendTokenItems.length > 0);
7863
+ const isResendMode = Boolean(
7864
+ resend2 && resendTokenItems && resendTokenItems.length > 0
7865
+ );
8065
7866
  const { getDecimals } = useTokenDecimals({
8066
7867
  tokenAssets
8067
7868
  });
@@ -8069,8 +7870,9 @@ function WithdrawForm({
8069
7870
  tokenAssets,
8070
7871
  initialTokenId,
8071
7872
  initialChain,
8072
- getDecimals
7873
+ getDecimals,
8073
7874
  // 传入精度获取函数
7875
+ messages
8074
7876
  });
8075
7877
  const resolvedUserAddress = useMemo(() => {
8076
7878
  var _a;
@@ -8089,35 +7891,27 @@ function WithdrawForm({
8089
7891
  switch (errType) {
8090
7892
  case TxErrorType.AccountMismatch: {
8091
7893
  if (error2.message === WITHDRAW_WALLET_NOT_BOUND_MESSAGE) {
8092
- toast.error(
8093
- messages.walletNotBind ?? "Please bind wallet before withdraw"
8094
- );
7894
+ toast.error(messages.wallet_not_bind);
8095
7895
  } else {
8096
- toast.error(
8097
- messages.errorAddressMismatch ?? "Connected wallet address does not match."
8098
- );
7896
+ toast.error(messages.error_address_mismatch);
8099
7897
  }
8100
7898
  break;
8101
7899
  }
8102
7900
  case TxErrorType.ChainMismatch:
8103
- toast.error(
8104
- messages.errorNetworkSwitch ?? "Failed to switch network. Please switch manually."
8105
- );
7901
+ toast.error(messages.error_network_switch);
8106
7902
  break;
8107
7903
  case TxErrorType.BalanceNotEnough:
8108
- toast.error(
8109
- messages.errorInsufficientGas ?? "Insufficient gas. Please add more funds to your wallet."
8110
- );
7904
+ toast.error(messages.error_insufficient_gas);
8111
7905
  break;
8112
7906
  case TxErrorType.ConnectFailed:
8113
- toast.error(error2.message || "Failed to connect wallet");
7907
+ toast.error(messages.failed_connect_wallet);
8114
7908
  break;
8115
7909
  case TxErrorType.Canceled:
8116
7910
  case TxErrorType.TransactionFailed:
8117
- toast.error(error2.message || "Please confirm in your wallet and retry.");
7911
+ toast.error(messages.confirm_wallet_retry);
8118
7912
  break;
8119
7913
  default:
8120
- toast.error(error2.message || "Withdrawal failed");
7914
+ toast.error(messages.withdraw_failed);
8121
7915
  }
8122
7916
  },
8123
7917
  [toast, messages]
@@ -8136,11 +7930,11 @@ function WithdrawForm({
8136
7930
  });
8137
7931
  const handleResendSubmit = useCallback(async () => {
8138
7932
  if (!resolvedUserAddress) {
8139
- toast.error(messages.walletNotBind ?? "Please bind wallet before withdraw");
7933
+ toast.error(messages.wallet_not_bind);
8140
7934
  return;
8141
7935
  }
8142
7936
  if (!resendTokenItems || resendTokenItems.length === 0) {
8143
- toast.error(messages.emptyToken ?? "No tokens available for resend");
7937
+ toast.error(messages.no_tokens_for_resend);
8144
7938
  return;
8145
7939
  }
8146
7940
  try {
@@ -8161,8 +7955,8 @@ function WithdrawForm({
8161
7955
  resendTokenItems,
8162
7956
  withdraw2,
8163
7957
  toast,
8164
- messages.walletNotBind,
8165
- messages.emptyToken
7958
+ messages.wallet_not_bind,
7959
+ messages.no_tokens_for_resend
8166
7960
  ]);
8167
7961
  const handleSubmit = useCallback(async () => {
8168
7962
  if (isResendMode) {
@@ -8173,7 +7967,7 @@ function WithdrawForm({
8173
7967
  return;
8174
7968
  }
8175
7969
  if (!resolvedUserAddress) {
8176
- toast.error(messages.walletNotBind ?? "Please bind wallet before withdraw");
7970
+ toast.error(messages.wallet_not_bind);
8177
7971
  return;
8178
7972
  }
8179
7973
  const tokens = form.buildWithdrawTokens();
@@ -8196,7 +7990,8 @@ function WithdrawForm({
8196
7990
  withdraw2,
8197
7991
  resolvedUserAddress,
8198
7992
  toast,
8199
- messages.walletNotBind
7993
+ messages.wallet_not_bind,
7994
+ messages.no_tokens_for_resend
8200
7995
  ]);
8201
7996
  const handleConfirm = useCallback(async () => {
8202
7997
  await withdraw2.confirmWithdraw();
@@ -8321,38 +8116,31 @@ function WithdrawForm({
8321
8116
  }
8322
8117
  export {
8323
8118
  AssetImage as A,
8324
- BindWalletDialog as B,
8325
- ClaimNftDialog as C,
8119
+ Content2 as C,
8326
8120
  EmptyState as E,
8327
- FrozenAssetList as F,
8328
8121
  Input as I,
8329
8122
  LoadingState as L,
8330
8123
  NftRewardContent as N,
8331
8124
  Pagination as P,
8332
8125
  Root2 as R,
8333
- TokenAssetList as T,
8126
+ TokenRewardContent as T,
8334
8127
  WithdrawForm as W,
8335
- useTokenAssets as a,
8336
- useTokenWithdraw as b,
8337
- usePointsHistory as c,
8338
- buildRewardCards as d,
8339
- formatDateTime as e,
8340
- formatTokenAmount as f,
8341
- useBindSocialAccount as g,
8342
- PointsList as h,
8343
- TokenRewardContent as i,
8344
- enMessages as j,
8345
- useIsMobile as k,
8346
- useChainMap as l,
8347
- useNftClaim as m,
8348
- PendingTxDialog as n,
8349
- Trigger as o,
8350
- Portal as p,
8351
- Content2 as q,
8352
- Arrow2 as r,
8353
- TipPopover as s,
8354
- toWithdrawItem as t,
8355
- useRewardDetails as u,
8356
- InfoIcon as v,
8357
- en as w
8128
+ useBindSocialAccount as a,
8129
+ buildRewardCards as b,
8130
+ useTokenAssets as c,
8131
+ useRewardDetails as d,
8132
+ usePointsHistory as e,
8133
+ formatDateTime as f,
8134
+ PointsList as g,
8135
+ Trigger as h,
8136
+ Portal as i,
8137
+ Arrow2 as j,
8138
+ useChainMap as k,
8139
+ useNftClaim as l,
8140
+ ClaimNftDialog as m,
8141
+ enMessages as n,
8142
+ PendingTxDialog as o,
8143
+ TipPopover as p,
8144
+ InfoIcon as q,
8145
+ useUserCenterLocale as u
8358
8146
  };