@taskon/widget-react 0.0.1-beta.4 → 0.0.1-beta.6

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 (58) hide show
  1. package/README.md +13 -4
  2. package/dist/CommunityTaskList.css +119 -111
  3. package/dist/EligibilityInfo.css +114 -110
  4. package/dist/LeaderboardWidget.css +73 -71
  5. package/dist/PageBuilder.css +5 -0
  6. package/dist/Quest.css +259 -255
  7. package/dist/TaskOnProvider.css +2 -0
  8. package/dist/UserCenterWidget.css +6 -6
  9. package/dist/UserCenterWidget2.css +1626 -1601
  10. package/dist/{dynamic-import-helper.css → WidgetShell.css} +2 -2
  11. package/dist/chunks/{CommunityTaskList-C9Gv8KOF.js → CommunityTaskList-Hde2OKHH.js} +1070 -580
  12. package/dist/chunks/{EligibilityInfo-D-Fuy9GE.js → EligibilityInfo-BV0Z2TgY.js} +1972 -1028
  13. package/dist/chunks/{LeaderboardWidget-BV2D2q1N.js → LeaderboardWidget-BNGRD5Bu.js} +270 -249
  14. package/dist/chunks/{PageBuilder-DQoU4Mwf.js → PageBuilder-C5DSHiW9.js} +5 -5
  15. package/dist/chunks/{Quest-B5NyVr3o.js → Quest-DG9zfXJo.js} +723 -513
  16. package/dist/chunks/{TaskOnProvider-93UxARFo.js → TaskOnProvider-BhamHIyY.js} +98 -68
  17. package/dist/chunks/{ThemeProvider-CPI_roeh.js → ThemeProvider-mXLdLSkq.js} +107 -20
  18. package/dist/chunks/{UserCenterWidget-cADBSVg7.js → UserCenterWidget-D5ttw4hO.js} +1328 -1337
  19. package/dist/chunks/{UserCenterWidget-BRtigY_S.js → UserCenterWidget-jDO5zTN1.js} +358 -254
  20. package/dist/chunks/{dynamic-import-helper-DwXlQC0S.js → WidgetShell-D7yC894Y.js} +447 -457
  21. package/dist/chunks/communitytask-es-CBNnS4o2.js +521 -0
  22. package/dist/chunks/communitytask-ja-GRf9cbdx.js +521 -0
  23. package/dist/chunks/communitytask-ko-Bf24PQKI.js +521 -0
  24. package/dist/chunks/communitytask-ru-CZm2CPoV.js +521 -0
  25. package/dist/chunks/leaderboardwidget-es-vKjrjQaz.js +146 -0
  26. package/dist/chunks/leaderboardwidget-ja-Q6u0HxKG.js +146 -0
  27. package/dist/chunks/leaderboardwidget-ko-CG6SWgxf.js +146 -0
  28. package/dist/chunks/leaderboardwidget-ru-DCcHcJGz.js +146 -0
  29. package/dist/chunks/quest-es-Dyyy0zaw.js +863 -0
  30. package/dist/chunks/quest-ja-Depog33y.js +863 -0
  31. package/dist/chunks/quest-ko-BMu3uRQJ.js +863 -0
  32. package/dist/chunks/quest-ru-xne814Rw.js +863 -0
  33. package/dist/chunks/taskwidget-es-Do9b3Mqw.js +245 -0
  34. package/dist/chunks/taskwidget-ja-CqSu-yWA.js +245 -0
  35. package/dist/chunks/taskwidget-ko-EHgXFV4B.js +245 -0
  36. package/dist/chunks/taskwidget-ru-CMbLQDK4.js +245 -0
  37. package/dist/chunks/usercenter-es-Dz3Wp2vV.js +512 -0
  38. package/dist/chunks/usercenter-ja-CKE4DJC6.js +512 -0
  39. package/dist/chunks/usercenter-ko-Dtpkn2qb.js +512 -0
  40. package/dist/chunks/usercenter-ru-DnBGee45.js +512 -0
  41. package/dist/community-task.d.ts +0 -390
  42. package/dist/community-task.js +2 -7
  43. package/dist/core.d.ts +46 -10
  44. package/dist/core.js +11 -11
  45. package/dist/index.d.ts +46 -667
  46. package/dist/index.js +19 -28
  47. package/dist/leaderboard.d.ts +0 -498
  48. package/dist/leaderboard.js +2 -16
  49. package/dist/page-builder.js +1 -1
  50. package/dist/quest.d.ts +0 -289
  51. package/dist/quest.js +2 -5
  52. package/dist/user-center.d.ts +0 -1608
  53. package/dist/user-center.js +2 -494
  54. package/package.json +5 -2
  55. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +0 -119
  56. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +0 -119
  57. package/dist/chunks/usercenter-ja-B2465c1O.js +0 -326
  58. 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 { p 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, s as useTaskOnPortalContainer } from "./ThemeProvider-CPI_roeh.js";
5
+ import React__default, { useContext, useState, useRef, useMemo, useCallback, useEffect, forwardRef, useImperativeHandle, 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, formatTokenAmount as formatTokenAmount$1, RouletteRewardType, USER_CENTER_PAGE_SIZE, createUserCenterApi, getTxExplorerUrl } from "@taskon/core";
7
+ import { v as TaskOnContext, h as useTaskOnContext, P as Primitive, s as useLayoutEffect2, j as createContextScope, k as useComposedRefs, q as useCallbackRef, m as useControllableState, o as composeEventHandlers, n as Presence, r as Portal$1, l as createSlot, D as DismissableLayer, x as useTaskOnPortalContainer, c as useTranslation, e as createLocaleLoader } from "./ThemeProvider-mXLdLSkq.js";
8
8
  import { d as useToast, u as useWallet, e as createEthereumAdapterFromProvider } from "./useToast-CaRkylKe.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-DwXlQC0S.js";
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, a as usePagination } from "./WidgetShell-D7yC894Y.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,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l53inR274nedqvKqqtptvHtZNVotr+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
  /** 窗口宽度 */
@@ -405,44 +248,315 @@ function useChainMap() {
405
248
  isLoaded: chains.length > 0
406
249
  };
407
250
  }
408
- function getRewardId(item) {
409
- if (typeof item.reward_id === "number") {
410
- return item.reward_id;
411
- }
412
- return void 0;
413
- }
414
- function getTargetType(item) {
415
- if (item.target_type === "campaign" || item.target_type === "event") {
416
- return item.target_type;
251
+ 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,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l53inR274nedqvKqqtptvHtZNVotr+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;
252
+ 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;
253
+ 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;
254
+ 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;
255
+ 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;
256
+ const EVM_WALLETS = [
257
+ {
258
+ id: "metamask",
259
+ name: "MetaMask",
260
+ icon: MetaMaskIcon,
261
+ downloadUrl: "https://metamask.io/download/",
262
+ checkInstalled: () => typeof window !== "undefined" && Boolean(window.ethereum)
263
+ },
264
+ {
265
+ id: "walletconnect",
266
+ name: "WalletConnect",
267
+ icon: WalletConnectIcon,
268
+ downloadUrl: "https://walletconnect.com/",
269
+ checkInstalled: () => false
270
+ // WalletConnect 不需要安装
271
+ },
272
+ {
273
+ id: "onto",
274
+ name: "ONTO",
275
+ icon: OntoIcon,
276
+ downloadUrl: "https://onto.app/",
277
+ checkInstalled: () => typeof window !== "undefined" && Boolean(window.onto)
278
+ },
279
+ {
280
+ id: "bitget",
281
+ name: "Bitget Wallet",
282
+ icon: BitgetIcon,
283
+ downloadUrl: "https://web3.bitget.com/",
284
+ checkInstalled: () => {
285
+ var _a;
286
+ return typeof window !== "undefined" && Boolean((_a = window.bitkeep) == null ? void 0 : _a.ethereum);
287
+ }
288
+ },
289
+ {
290
+ id: "okx",
291
+ name: "OKX Wallet",
292
+ icon: OkxIcon,
293
+ downloadUrl: "https://www.okx.com/web3",
294
+ checkInstalled: () => typeof window !== "undefined" && Boolean(window.okxwallet)
417
295
  }
418
- const campaignType = item.campaign_type;
419
- if (typeof campaignType === "string" && campaignType.toLowerCase() === "event") {
420
- return "event";
296
+ ];
297
+ const DEFAULT_WALLET_CONNECT_PROJECT_ID = "c6e5e73fe203ffc84514a1ad09fe570a";
298
+ function getWalletProvider(walletId) {
299
+ var _a;
300
+ if (typeof window === "undefined") return null;
301
+ switch (walletId) {
302
+ case "metamask":
303
+ return window.ethereum;
304
+ case "onto":
305
+ return window.onto;
306
+ case "bitget":
307
+ return (_a = window.bitkeep) == null ? void 0 : _a.ethereum;
308
+ case "okx":
309
+ return window.okxwallet;
310
+ default:
311
+ return null;
421
312
  }
422
- return "campaign";
423
313
  }
424
- function getClaimType(item, rewardValue) {
425
- if (item.reward_type === RewardType.Nft) {
426
- return NftClaimType.Standard;
427
- }
428
- if (item.reward_type === RewardType.BMintedNft) {
429
- return NftClaimType.Minted;
430
- }
431
- if (item.reward_type === RewardType.Cap) {
432
- return NftClaimType.Cap;
314
+ async function checkWalletConnectAvailable() {
315
+ try {
316
+ await import("@walletconnect/ethereum-provider");
317
+ return true;
318
+ } catch {
319
+ return false;
433
320
  }
434
- return getNftClaimType(rewardValue);
435
- }
436
- const BIND_TEXT = "Confirm to BIND this wallet address.";
437
- const BIND_NOTE = "This signature is for confirmation only.";
438
- function getBindSignText(address, nonce) {
439
- return `${BIND_TEXT}
440
- Address:${address}
441
- Nonce:${nonce}
442
- Note:${BIND_NOTE}`;
443
- }
444
- function isSameAddress$1(left, right) {
445
- return left.trim().toLowerCase() === right.trim().toLowerCase();
321
+ }
322
+ function ConnectLoading({ walletName }) {
323
+ return /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-loading-overlay", children: [
324
+ /* @__PURE__ */ jsx("svg", { className: "taskon-bind-wallet-loading-spinner", viewBox: "0 0 50 50", children: /* @__PURE__ */ jsx(
325
+ "circle",
326
+ {
327
+ cx: "25",
328
+ cy: "25",
329
+ r: "20",
330
+ fill: "none",
331
+ stroke: "currentColor",
332
+ strokeWidth: "4",
333
+ strokeLinecap: "round",
334
+ strokeDasharray: "80 60"
335
+ }
336
+ ) }),
337
+ /* @__PURE__ */ jsxs("p", { className: "taskon-bind-wallet-loading-text", children: [
338
+ "Please log in to ",
339
+ walletName,
340
+ " and sign message to proceed"
341
+ ] })
342
+ ] });
343
+ }
344
+ function WalletItem({
345
+ wallet,
346
+ isInstalled,
347
+ isConnecting,
348
+ isDisabled,
349
+ disabledReason,
350
+ onClick
351
+ }) {
352
+ return /* @__PURE__ */ jsxs(
353
+ "button",
354
+ {
355
+ type: "button",
356
+ className: `taskon-bind-wallet-item ${isConnecting ? "taskon-bind-wallet-item--connecting" : ""} ${isDisabled ? "taskon-bind-wallet-item--disabled" : ""}`,
357
+ onClick,
358
+ disabled: isConnecting || isDisabled,
359
+ title: disabledReason,
360
+ children: [
361
+ /* @__PURE__ */ jsx(
362
+ "img",
363
+ {
364
+ className: "taskon-bind-wallet-item-icon",
365
+ src: wallet.icon,
366
+ alt: wallet.name
367
+ }
368
+ ),
369
+ /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-name", children: wallet.name }),
370
+ 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
371
+ ]
372
+ }
373
+ );
374
+ }
375
+ function BindWalletDialog({
376
+ open,
377
+ onOpenChange,
378
+ onConnect,
379
+ onError
380
+ }) {
381
+ var _a, _b;
382
+ const isMobile = useIsMobile();
383
+ const context = useContext(TaskOnContext);
384
+ const configuredProjectId = (_b = (_a = context == null ? void 0 : context.config) == null ? void 0 : _a.walletConnectProjectId) == null ? void 0 : _b.trim();
385
+ const walletConnectProjectId = configuredProjectId || DEFAULT_WALLET_CONNECT_PROJECT_ID;
386
+ const [connectingWalletId, setConnectingWalletId] = useState(null);
387
+ const [connectingWalletName, setConnectingWalletName] = useState("");
388
+ const [wcAvailable, setWcAvailable] = useState(null);
389
+ const wcProviderRef = useRef(null);
390
+ React__default.useEffect(() => {
391
+ checkWalletConnectAvailable().then(setWcAvailable);
392
+ }, []);
393
+ const isWalletConnectEnabled = useMemo(() => {
394
+ return wcAvailable === true;
395
+ }, [wcAvailable]);
396
+ const wcDisabledReason = useMemo(() => {
397
+ if (wcAvailable === false) {
398
+ return "WalletConnect SDK not installed. Please install @walletconnect/ethereum-provider";
399
+ }
400
+ return void 0;
401
+ }, [wcAvailable]);
402
+ const walletsWithStatus = useMemo(() => {
403
+ const walletList = isMobile ? EVM_WALLETS.filter((w) => w.id === "walletconnect") : EVM_WALLETS;
404
+ return walletList.map((wallet) => ({
405
+ wallet,
406
+ isInstalled: wallet.id === "walletconnect" ? isWalletConnectEnabled : wallet.checkInstalled(),
407
+ isDisabled: wallet.id === "walletconnect" && !isWalletConnectEnabled,
408
+ disabledReason: wallet.id === "walletconnect" ? wcDisabledReason : void 0
409
+ }));
410
+ }, [isMobile, isWalletConnectEnabled, wcDisabledReason]);
411
+ const connectWalletConnect = useCallback(async () => {
412
+ var _a2, _b2, _c;
413
+ setConnectingWalletId("walletconnect");
414
+ setConnectingWalletName("WalletConnect");
415
+ try {
416
+ const { EthereumProvider } = await import("@walletconnect/ethereum-provider");
417
+ const provider = await EthereumProvider.init({
418
+ projectId: walletConnectProjectId,
419
+ chains: [1],
420
+ // Ethereum mainnet
421
+ optionalChains: [56, 137, 42161, 10, 8453],
422
+ // BSC, Polygon, Arbitrum, Optimism, Base
423
+ showQrModal: true,
424
+ qrModalOptions: {
425
+ themeMode: "dark"
426
+ }
427
+ });
428
+ wcProviderRef.current = provider;
429
+ await provider.connect();
430
+ const accounts = provider.accounts;
431
+ const address = accounts[0];
432
+ if (!address) {
433
+ onError == null ? void 0 : onError("No account found");
434
+ setConnectingWalletId(null);
435
+ return;
436
+ }
437
+ await (onConnect == null ? void 0 : onConnect(address, provider));
438
+ } catch (e) {
439
+ const error2 = e;
440
+ if (((_a2 = error2.message) == null ? void 0 : _a2.includes("rejected")) || ((_b2 = error2.message) == null ? void 0 : _b2.includes("denied")) || ((_c = error2.message) == null ? void 0 : _c.includes("User closed"))) {
441
+ onError == null ? void 0 : onError("User rejected the connection");
442
+ } else {
443
+ onError == null ? void 0 : onError(error2.message || "Failed to connect WalletConnect");
444
+ }
445
+ } finally {
446
+ setConnectingWalletId(null);
447
+ }
448
+ }, [walletConnectProjectId, onConnect, onError]);
449
+ const connectWallet = useCallback(async (wallet) => {
450
+ var _a2, _b2;
451
+ const provider = getWalletProvider(wallet.id);
452
+ if (!provider) {
453
+ onError == null ? void 0 : onError(`${wallet.name} provider not found`);
454
+ return;
455
+ }
456
+ setConnectingWalletId(wallet.id);
457
+ setConnectingWalletName(wallet.name);
458
+ try {
459
+ const accounts = await provider.request({
460
+ method: "eth_requestAccounts"
461
+ });
462
+ const address = accounts[0];
463
+ if (!address) {
464
+ onError == null ? void 0 : onError("No account found");
465
+ setConnectingWalletId(null);
466
+ return;
467
+ }
468
+ await (onConnect == null ? void 0 : onConnect(address, provider));
469
+ } catch (e) {
470
+ const error2 = e;
471
+ if (((_a2 = error2.message) == null ? void 0 : _a2.includes("rejected")) || ((_b2 = error2.message) == null ? void 0 : _b2.includes("denied"))) {
472
+ onError == null ? void 0 : onError("User rejected the connection");
473
+ } else {
474
+ onError == null ? void 0 : onError(error2.message || "Failed to connect wallet");
475
+ }
476
+ } finally {
477
+ setConnectingWalletId(null);
478
+ }
479
+ }, [onConnect, onError]);
480
+ const handleWalletClick = useCallback((wallet, isInstalled, isDisabled) => {
481
+ if (isDisabled) {
482
+ return;
483
+ }
484
+ if (wallet.id === "walletconnect") {
485
+ connectWalletConnect();
486
+ return;
487
+ }
488
+ if (isInstalled) {
489
+ connectWallet(wallet);
490
+ } else {
491
+ window.open(wallet.downloadUrl, "_blank", "noopener,noreferrer");
492
+ }
493
+ }, [connectWallet, connectWalletConnect]);
494
+ return /* @__PURE__ */ jsx(
495
+ Dialog,
496
+ {
497
+ open,
498
+ onOpenChange,
499
+ title: "Connect Wallet",
500
+ showCloseButton: true,
501
+ maxWidth: 510,
502
+ children: /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-dialog", children: [
503
+ /* @__PURE__ */ jsx("h2", { className: "taskon-bind-wallet-dialog-title", children: "Please connect wallet" }),
504
+ /* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-chain-label", children: "EVM Chain" }),
505
+ /* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-grid", children: walletsWithStatus.map(({ wallet, isInstalled, isDisabled, disabledReason }) => /* @__PURE__ */ jsx(
506
+ WalletItem,
507
+ {
508
+ wallet,
509
+ isInstalled,
510
+ isConnecting: connectingWalletId === wallet.id,
511
+ isDisabled,
512
+ disabledReason,
513
+ onClick: () => handleWalletClick(wallet, isInstalled, isDisabled)
514
+ },
515
+ wallet.id
516
+ )) }),
517
+ connectingWalletId && /* @__PURE__ */ jsx(ConnectLoading, { walletName: connectingWalletName })
518
+ ] })
519
+ }
520
+ );
521
+ }
522
+ function getRewardId(item) {
523
+ if (typeof item.reward_id === "number") {
524
+ return item.reward_id;
525
+ }
526
+ return void 0;
527
+ }
528
+ function getTargetType(item) {
529
+ if (item.target_type === "campaign" || item.target_type === "event") {
530
+ return item.target_type;
531
+ }
532
+ const campaignType = item.campaign_type;
533
+ if (typeof campaignType === "string" && campaignType.toLowerCase() === "event") {
534
+ return "event";
535
+ }
536
+ return "campaign";
537
+ }
538
+ function getClaimType(item, rewardValue) {
539
+ if (item.reward_type === RewardType.Nft) {
540
+ return NftClaimType.Standard;
541
+ }
542
+ if (item.reward_type === RewardType.BMintedNft) {
543
+ return NftClaimType.Minted;
544
+ }
545
+ if (item.reward_type === RewardType.Cap) {
546
+ return NftClaimType.Cap;
547
+ }
548
+ return getNftClaimType(rewardValue);
549
+ }
550
+ const BIND_TEXT = "Confirm to BIND this wallet address.";
551
+ const BIND_NOTE = "This signature is for confirmation only.";
552
+ function getBindSignText(address, nonce) {
553
+ return `${BIND_TEXT}
554
+ Address:${address}
555
+ Nonce:${nonce}
556
+ Note:${BIND_NOTE}`;
557
+ }
558
+ function isSameAddress$1(left, right) {
559
+ return left.trim().toLowerCase() === right.trim().toLowerCase();
446
560
  }
447
561
  function getPrimaryBoundAddress(userInfo, chainType) {
448
562
  var _a;
@@ -758,7 +872,7 @@ function useNftClaim(options = {}) {
758
872
  const [status, setStatus] = useState("idle");
759
873
  const [error2, setError] = useState(null);
760
874
  const [txHash, setTxHash] = useState(null);
761
- const [claimingNft2, setClaimingNft] = useState(null);
875
+ const [claimingNft, setClaimingNft] = useState(null);
762
876
  const api = useMemo(() => {
763
877
  if (!client) return null;
764
878
  return createNftClaimApi(client);
@@ -767,7 +881,7 @@ function useNftClaim(options = {}) {
767
881
  if (!client) return null;
768
882
  return createUserApi(client);
769
883
  }, [client]);
770
- const claimNft2 = useCallback(
884
+ const claimNft = useCallback(
771
885
  async (item, adapterOverride) => {
772
886
  var _a;
773
887
  if (!api) {
@@ -1018,506 +1132,123 @@ function useNftClaim(options = {}) {
1018
1132
  status,
1019
1133
  error: error2,
1020
1134
  txHash,
1021
- claimingNft: claimingNft2,
1022
- claimNft: claimNft2,
1135
+ claimingNft,
1136
+ claimNft,
1023
1137
  reset,
1024
1138
  clearPending
1025
1139
  };
1026
1140
  }
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" }),
1040
- /* @__PURE__ */ jsx(
1041
- "path",
1042
- {
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();
1141
+ const Input = forwardRef(
1142
+ function Input2({
1143
+ value,
1144
+ onChange,
1145
+ type = "text",
1146
+ inputMode,
1147
+ maxLength,
1148
+ disabled = false,
1149
+ placeholder,
1150
+ hasError = false,
1151
+ error: error2,
1152
+ className,
1153
+ autoFocus = false,
1154
+ onBlur,
1155
+ onFocus,
1156
+ onEnter,
1157
+ rightSlot,
1158
+ formatValue
1159
+ }, ref) {
1160
+ const inputRef = useRef(null);
1161
+ const isError = hasError || !!error2;
1162
+ const focus = useCallback(() => {
1163
+ var _a;
1164
+ (_a = inputRef.current) == null ? void 0 : _a.focus();
1165
+ }, []);
1166
+ const blur = useCallback(() => {
1167
+ var _a;
1168
+ (_a = inputRef.current) == null ? void 0 : _a.blur();
1169
+ }, []);
1170
+ const getElement = useCallback(() => {
1171
+ return inputRef.current;
1172
+ }, []);
1173
+ useImperativeHandle(
1174
+ ref,
1175
+ () => ({
1176
+ focus,
1177
+ blur,
1178
+ getElement
1179
+ }),
1180
+ [focus, blur, getElement]
1181
+ );
1182
+ useEffect(() => {
1183
+ var _a;
1184
+ if (autoFocus) {
1185
+ (_a = inputRef.current) == null ? void 0 : _a.focus();
1186
+ }
1187
+ }, [autoFocus]);
1188
+ const handleChange = useCallback(
1189
+ (e) => {
1190
+ let newValue = e.target.value;
1191
+ if (formatValue) {
1192
+ newValue = formatValue(newValue);
1150
1193
  }
1194
+ onChange(newValue);
1151
1195
  },
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();
1196
+ [onChange, formatValue]
1197
+ );
1198
+ const handleKeyDown = useCallback(
1199
+ (e) => {
1200
+ if (e.key === "Enter" && onEnter) {
1201
+ onEnter(e);
1239
1202
  }
1240
1203
  },
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",
1204
+ [onEnter]
1205
+ );
1206
+ const needWrapper = rightSlot || error2;
1207
+ const inputElement = /* @__PURE__ */ jsx(
1208
+ "input",
1319
1209
  {
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
1360
- }
1361
- ),
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");
1210
+ ref: inputRef,
1211
+ className: `taskon-input ${isError ? "taskon-input--error" : ""} ${!needWrapper ? className || "" : ""}`,
1212
+ type,
1213
+ inputMode,
1214
+ value,
1215
+ onChange: handleChange,
1216
+ maxLength,
1217
+ disabled,
1218
+ placeholder,
1219
+ onBlur,
1220
+ onFocus,
1221
+ onKeyDown: handleKeyDown
1474
1222
  }
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");
1223
+ );
1224
+ if (!needWrapper) {
1225
+ return inputElement;
1491
1226
  }
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,
1227
+ return /* @__PURE__ */ jsxs("div", { className: `taskon-input-wrapper ${className || ""}`, children: [
1228
+ /* @__PURE__ */ jsxs("div", { className: `taskon-input-container ${isError ? "taskon-input-container--error" : ""}`, children: [
1229
+ /* @__PURE__ */ jsx(
1230
+ "input",
1506
1231
  {
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
- }
1232
+ ref: inputRef,
1233
+ className: "taskon-input taskon-input--in-container",
1234
+ type,
1235
+ inputMode,
1236
+ value,
1237
+ onChange: handleChange,
1238
+ maxLength,
1239
+ disabled,
1240
+ placeholder,
1241
+ onBlur,
1242
+ onFocus,
1243
+ onKeyDown: handleKeyDown
1244
+ }
1245
+ ),
1246
+ rightSlot && /* @__PURE__ */ jsx("div", { className: "taskon-input-slot", children: rightSlot })
1247
+ ] }),
1248
+ error2 && /* @__PURE__ */ jsx("p", { className: "taskon-input-error", children: error2 })
1249
+ ] });
1250
+ }
1251
+ );
1521
1252
  const sides = ["top", "right", "bottom", "left"];
1522
1253
  const min = Math.min;
1523
1254
  const max$1 = Math.max;
@@ -4695,453 +4426,667 @@ function Switch({
4695
4426
  }
4696
4427
  );
4697
4428
  }
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
4429
+ const tab_my_rewards = "My Rewards";
4430
+ const tab_identity = "Identity";
4431
+ const tab_activity_history = "Activity History";
4432
+ const tab_rewards = "Rewards";
4433
+ const tab_sprint_odyssey_history = "Sprint & Odyssey History";
4434
+ const section_you_have_earned = "You have earned";
4435
+ const reward_token = "Token";
4436
+ const reward_xp_level = "XP & Level";
4437
+ const reward_nft = "NFT";
4438
+ const reward_whitelist = "Whitelist";
4439
+ const reward_discord_role = "Discord Role";
4440
+ const reward_points = "Points";
4441
+ const withdrawable_assets = "Withdrawable Assets";
4442
+ const token_history = "Token History";
4443
+ const withdraw = "Withdraw";
4444
+ const batch_withdraw = "Batch Withdraw";
4445
+ const frozen_assets = "Frozen Assets";
4446
+ const resend = "Resend";
4447
+ const pending_withdrawals = "You have {count} pending withdrawals";
4448
+ const pending_withdrawals_text = "pending withdrawals";
4449
+ const pending_withdrawals_count_label = "Number of pending withdrawals";
4450
+ const withdraw_confirm = "Confirm Withdrawal";
4451
+ const withdraw_success = "Withdrawal Successful";
4452
+ const withdraw_canceled = "Withdrawal Canceled";
4453
+ const gas_not_enough = "Insufficient Gas";
4454
+ const gas_not_enough_description = "Please ensure you have enough gas to complete this transaction.";
4455
+ const gas_not_enough_description_with_chain = "Please ensure you have enough {chain} gas to complete this transaction.";
4456
+ const retry = "Retry";
4457
+ const confirm_withdraw = "Confirm withdrawal";
4458
+ const withdrawing = "Processing withdrawal...";
4459
+ const confirm = "Confirm";
4460
+ const cancel = "Cancel";
4461
+ const close = "Close";
4462
+ const column_detail = "Detail";
4463
+ const column_duration = "Duration";
4464
+ const activity_name = "Activity Name";
4465
+ const activity_time = "Activity Time";
4466
+ const level = "Level";
4467
+ const total_xp = "Total XP";
4468
+ const default_xp_points_name = "XP";
4469
+ const xp_to_next_level = "XP to next level";
4470
+ const xp_history = "XP History";
4471
+ const total_points = "Total";
4472
+ const empty_points = "No points history yet";
4473
+ const points_history = "Points History";
4474
+ const page = "Page";
4475
+ const of = "of";
4476
+ const previous = "Previous";
4477
+ const next = "Next";
4478
+ const load_more = "Load More";
4479
+ const showing = "Showing {start}-{end} of {total}";
4480
+ const social_accounts = "Social Media Accounts";
4481
+ const wallet_addresses = "Network List";
4482
+ const evm_chain = "EVM Chain";
4483
+ const primary_address = "Primary Address";
4484
+ const secondary_address = "Secondary Address";
4485
+ const email_address = "Email Address";
4486
+ const bind = "Bind";
4487
+ const unbind = "Unbind";
4488
+ const connect_wallet = "Connect Wallet";
4489
+ const binding = "Binding...";
4490
+ const unbinding = "Unbinding...";
4491
+ const bind_social_todo = "OAuth binding will be available soon";
4492
+ const confirm_unbind = "Confirm Unbind";
4493
+ const unbind_warning = "Are you sure you want to unbind this account?";
4494
+ const kyc_warning = "This address has been KYC verified. After unbinding, you will need to re-verify KYC if you bind it again.";
4495
+ const unbind_cooldown = "Cannot unbind within 24 hours of binding";
4496
+ const last_login_method = "Cannot unbind the last login method";
4497
+ const unbind_success = "Unbind successful";
4498
+ const unbind_failed = "Unbind failed";
4499
+ const bind_success = "Bind successful";
4500
+ const bind_failed = "Bind failed";
4501
+ const connecting_wallet = "Connecting wallet...";
4502
+ const signing_message = "Signing message...";
4503
+ const empty_identity = "No identity options configured";
4504
+ const link_email_account = "Link Email Account";
4505
+ const please_enter_email = "Please enter email address";
4506
+ const please_enter_valid_email = "Please enter a valid email address";
4507
+ const verification_code = "Verification Code";
4508
+ const please_enter_code = "Please enter verification code";
4509
+ const please_enter_valid_code = "Please enter a valid verification code";
4510
+ const send_verification_code = "Send Verification Code";
4511
+ const resend_code = "Resend";
4512
+ const email_already_linked = "This email is already linked to another account";
4513
+ const send_code_success = "Verification code sent";
4514
+ const send_code_failed = "Failed to send verification code";
4515
+ const column_token_symbol = "Token Symbol";
4516
+ const column_network = "Network";
4517
+ const column_withdrawable = "Withdrawable";
4518
+ const column_action = "Action";
4519
+ const chain_label = "Chain";
4520
+ const ok = "OK";
4521
+ const copy = "Copy";
4522
+ const copied = "Copied!";
4523
+ const claim_nft = "Claim NFT";
4524
+ const linked = "Linked";
4525
+ const link_platform_account = "Link {platform} Account";
4526
+ const withdraw_canceled_message = "Your withdrawal was canceled. You can retry the transaction.";
4527
+ const missing_resend_payload = "Missing resend payload";
4528
+ const no_tokens_for_resend = "No tokens available for resend";
4529
+ const failed_load_resend_details = "Failed to load resend details";
4530
+ const frozen_type_campaign = "Campaign Locked";
4531
+ const frozen_type_withdraw = "Pending Withdrawal";
4532
+ const frozen_type_referral = "Referral Locked";
4533
+ const frozen_type_benefit = "Benefit Locked";
4534
+ const frozen_type_tg_mini_app = "TG Mini App";
4535
+ const frozen_type_milestone = "Milestone Locked";
4536
+ const loading = "Loading...";
4537
+ const error = "Something went wrong";
4538
+ const empty_rewards = "No rewards yet";
4539
+ const empty_activity_history = "No activity history";
4540
+ const empty_token = "No tokens yet";
4541
+ const empty_nft = "No NFTs yet";
4542
+ const no_data = "No data";
4543
+ const claim = "Claim";
4544
+ const claimed_txn = "Claimed (Txn)";
4545
+ const manual_drop = "Manual Drop";
4546
+ const column_nft = "NFT";
4547
+ const column_whitelist = "Whitelist";
4548
+ const column_discord_role = "Discord Role";
4549
+ const column_time = "Time";
4550
+ const column_status = "Status";
4551
+ const column_amount = "Amount";
4552
+ const deposited = "Deposited";
4553
+ const distributed_by = "Distributed by";
4554
+ const token_history_telegram_spin = "Telegram Spin";
4555
+ const token_history_telegram_spin_bonus = "Telegram Spin Bonus";
4556
+ const column_token_type = "Type";
4557
+ const column_amount_withdrawable = "Amount Withdrawable";
4558
+ const column_withdraw_amount = "Withdraw Amount";
4559
+ const select_token = "Select Token";
4560
+ const token_amount = "Token Amount";
4561
+ const receive_address = "Receive Address";
4562
+ const max = "MAX";
4563
+ const available_balance = "Available";
4564
+ const please_select_token = "Please select a token";
4565
+ const please_enter_amount = "Please enter an amount";
4566
+ const please_enter_valid_amount = "Please enter a valid amount";
4567
+ const amount_exceeds_balance = "Amount exceeds available balance";
4568
+ const token_not_supported = "Token not supported";
4569
+ const withdrawing_tip = "Please wait while your withdrawal is being processed...";
4570
+ const claiming_nft = "Claiming NFT...";
4571
+ const claim_connecting_wallet = "Connecting wallet...";
4572
+ const claim_switching_network = "Switching network...";
4573
+ const claim_getting_signature = "Getting signature...";
4574
+ const claim_confirm_in_wallet = "Please confirm in your wallet";
4575
+ const claim_transaction_pending = "Transaction pending...";
4576
+ const claim_success = "Claim successful!";
4577
+ const claim_failed = "Claim failed";
4578
+ const claim_canceled = "Transaction was rejected by user.";
4579
+ const view_on_explorer = "View on Explorer";
4580
+ const pending_transaction = "Pending Transaction";
4581
+ const pending_tx_message = "You have a pending transaction";
4582
+ const claim_pending_title = "You have already claimed this NFT, please wait for this transaction to be confirmed.";
4583
+ const claim_pending_check_explorer = "You can check this transaction on explorer:";
4584
+ const claim_pending_hash_label = "Transaction hash:";
4585
+ 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.';
4586
+ const claim_pending_receive_address_no_change = "This receive address can’t be changed:";
4587
+ const continue_waiting = "Continue Waiting";
4588
+ const claim_again = "Claim Again";
4589
+ const error_no_wallet = "No wallet found. Please install a wallet extension.";
4590
+ const error_address_mismatch = "Connected wallet address does not match.";
4591
+ const error_network_switch = "Failed to switch network. Please switch manually.";
4592
+ const error_insufficient_gas = "Insufficient gas. Please add more funds to your wallet.";
4593
+ const wallet_not_bind = "Please bind wallet before withdraw";
4594
+ const failed_connect_wallet = "Failed to connect wallet";
4595
+ const confirm_wallet_retry = "Please confirm in your wallet and retry.";
4596
+ const withdraw_failed = "Withdrawal failed";
4597
+ const not_configured = "Not configured";
4598
+ const enMessages = {
4599
+ tab_my_rewards,
4600
+ tab_identity,
4601
+ tab_activity_history,
4602
+ tab_rewards,
4603
+ tab_sprint_odyssey_history,
4604
+ section_you_have_earned,
4605
+ reward_token,
4606
+ reward_xp_level,
4607
+ reward_nft,
4608
+ reward_whitelist,
4609
+ reward_discord_role,
4610
+ reward_points,
4611
+ withdrawable_assets,
4612
+ token_history,
4613
+ withdraw,
4614
+ batch_withdraw,
4615
+ frozen_assets,
4616
+ resend,
4617
+ pending_withdrawals,
4618
+ pending_withdrawals_text,
4619
+ pending_withdrawals_count_label,
4620
+ withdraw_confirm,
4621
+ withdraw_success,
4622
+ withdraw_canceled,
4623
+ gas_not_enough,
4624
+ gas_not_enough_description,
4625
+ gas_not_enough_description_with_chain,
4626
+ retry,
4627
+ confirm_withdraw,
4628
+ withdrawing,
4629
+ confirm,
4630
+ cancel,
4631
+ close,
4632
+ column_detail,
4633
+ column_duration,
4634
+ activity_name,
4635
+ activity_time,
4636
+ level,
4637
+ total_xp,
4638
+ default_xp_points_name,
4639
+ xp_to_next_level,
4640
+ xp_history,
4641
+ total_points,
4642
+ empty_points,
4643
+ points_history,
4644
+ page,
4645
+ of,
4646
+ previous,
4647
+ next,
4648
+ load_more,
4649
+ showing,
4650
+ social_accounts,
4651
+ wallet_addresses,
4652
+ evm_chain,
4653
+ primary_address,
4654
+ secondary_address,
4655
+ email_address,
4656
+ bind,
4657
+ unbind,
4658
+ connect_wallet,
4659
+ binding,
4660
+ unbinding,
4661
+ bind_social_todo,
4662
+ confirm_unbind,
4663
+ unbind_warning,
4664
+ kyc_warning,
4665
+ unbind_cooldown,
4666
+ last_login_method,
4667
+ unbind_success,
4668
+ unbind_failed,
4669
+ bind_success,
4670
+ bind_failed,
4671
+ connecting_wallet,
4672
+ signing_message,
4673
+ empty_identity,
4674
+ link_email_account,
4675
+ please_enter_email,
4676
+ please_enter_valid_email,
4677
+ verification_code,
4678
+ please_enter_code,
4679
+ please_enter_valid_code,
4680
+ send_verification_code,
4681
+ resend_code,
4682
+ email_already_linked,
4683
+ send_code_success,
4684
+ send_code_failed,
4685
+ column_token_symbol,
4686
+ column_network,
4687
+ column_withdrawable,
4688
+ column_action,
4689
+ chain_label,
4690
+ ok,
4691
+ copy,
4692
+ copied,
4693
+ claim_nft,
4694
+ linked,
4695
+ link_platform_account,
4696
+ withdraw_canceled_message,
4697
+ missing_resend_payload,
4698
+ no_tokens_for_resend,
4699
+ failed_load_resend_details,
4700
+ frozen_type_campaign,
4701
+ frozen_type_withdraw,
4702
+ frozen_type_referral,
4703
+ frozen_type_benefit,
4704
+ frozen_type_tg_mini_app,
4705
+ frozen_type_milestone,
4706
+ loading,
4707
+ error,
4708
+ empty_rewards,
4709
+ empty_activity_history,
4710
+ empty_token,
4711
+ empty_nft,
4712
+ no_data,
4713
+ claim,
4714
+ claimed_txn,
4715
+ manual_drop,
4716
+ column_nft,
4717
+ column_whitelist,
4718
+ column_discord_role,
4719
+ column_time,
4720
+ column_status,
4721
+ column_amount,
4722
+ deposited,
4723
+ distributed_by,
4724
+ token_history_telegram_spin,
4725
+ token_history_telegram_spin_bonus,
4726
+ column_token_type,
4727
+ column_amount_withdrawable,
4728
+ column_withdraw_amount,
4729
+ select_token,
4730
+ token_amount,
4731
+ receive_address,
4732
+ max,
4733
+ available_balance,
4734
+ please_select_token,
4735
+ please_enter_amount,
4736
+ please_enter_valid_amount,
4737
+ amount_exceeds_balance,
4738
+ token_not_supported,
4739
+ withdrawing_tip,
4740
+ claiming_nft,
4741
+ claim_connecting_wallet,
4742
+ claim_switching_network,
4743
+ claim_getting_signature,
4744
+ claim_confirm_in_wallet,
4745
+ claim_transaction_pending,
4746
+ claim_success,
4747
+ claim_failed,
4748
+ claim_canceled,
4749
+ view_on_explorer,
4750
+ pending_transaction,
4751
+ pending_tx_message,
4752
+ claim_pending_title,
4753
+ claim_pending_check_explorer,
4754
+ claim_pending_hash_label,
4755
+ claim_pending_claim_again_warn,
4756
+ claim_pending_receive_address_no_change,
4757
+ continue_waiting,
4758
+ claim_again,
4759
+ error_no_wallet,
4760
+ error_address_mismatch,
4761
+ error_network_switch,
4762
+ error_insufficient_gas,
4763
+ wallet_not_bind,
4764
+ failed_connect_wallet,
4765
+ confirm_wallet_retry,
4766
+ withdraw_failed,
4767
+ not_configured
4768
+ };
4769
+ const DEFAULT_CLAIM_MESSAGES = {
4770
+ claimNft: enMessages.claim_nft,
4771
+ claimingNft: enMessages.claiming_nft,
4772
+ claimConnectingWallet: enMessages.claim_connecting_wallet,
4773
+ claimSwitchingNetwork: enMessages.claim_switching_network,
4774
+ claimGettingSignature: enMessages.claim_getting_signature,
4775
+ claimConfirmInWallet: enMessages.claim_confirm_in_wallet,
4776
+ claimTransactionPending: enMessages.claim_transaction_pending,
4777
+ claimSuccess: enMessages.claim_success,
4778
+ claimFailed: enMessages.claim_failed,
4779
+ claimCanceled: enMessages.claim_canceled,
4780
+ viewOnExplorer: enMessages.view_on_explorer,
4781
+ retry: enMessages.retry,
4782
+ close: enMessages.close
4783
+ };
4784
+ function LoadingSpinner() {
4785
+ return /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-spinner", children: /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-spinner__circle" }) });
4786
+ }
4787
+ function SuccessIcon() {
4788
+ return /* @__PURE__ */ jsxs(
4789
+ "svg",
4790
+ {
4791
+ className: "taskon-claim-dialog-icon taskon-claim-dialog-icon--success",
4792
+ viewBox: "0 0 24 24",
4793
+ fill: "none",
4794
+ xmlns: "http://www.w3.org/2000/svg",
4795
+ children: [
4796
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }),
4797
+ /* @__PURE__ */ jsx(
4798
+ "path",
4799
+ {
4800
+ d: "M8 12L11 15L16 9",
4801
+ stroke: "currentColor",
4802
+ strokeWidth: "2",
4803
+ strokeLinecap: "round",
4804
+ strokeLinejoin: "round"
4805
+ }
4806
+ )
4807
+ ]
4808
+ }
4809
+ );
4810
+ }
4811
+ function ErrorIcon() {
4812
+ return /* @__PURE__ */ jsxs(
4813
+ "svg",
4814
+ {
4815
+ className: "taskon-claim-dialog-icon taskon-claim-dialog-icon--error",
4816
+ viewBox: "0 0 24 24",
4817
+ fill: "none",
4818
+ xmlns: "http://www.w3.org/2000/svg",
4819
+ children: [
4820
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }),
4821
+ /* @__PURE__ */ jsx(
4822
+ "path",
4823
+ {
4824
+ d: "M15 9L9 15M9 9L15 15",
4825
+ stroke: "currentColor",
4826
+ strokeWidth: "2",
4827
+ strokeLinecap: "round"
4828
+ }
4829
+ )
4830
+ ]
4831
+ }
4832
+ );
4833
+ }
4834
+ function getStatusMessage(status, messages) {
4835
+ switch (status) {
4836
+ case "checking":
4837
+ return messages.claimingNft;
4838
+ case "connecting":
4839
+ return messages.claimConnectingWallet;
4840
+ case "switching":
4841
+ return messages.claimSwitchingNetwork;
4842
+ case "signing":
4843
+ return messages.claimGettingSignature;
4844
+ case "confirming":
4845
+ return messages.claimConfirmInWallet;
4846
+ case "pending":
4847
+ return messages.claimTransactionPending;
4848
+ case "success":
4849
+ return messages.claimSuccess;
4850
+ case "error":
4851
+ return messages.claimFailed;
4852
+ default:
4853
+ return "";
4854
+ }
4855
+ }
4856
+ function getErrorMessage(error2, messages) {
4857
+ if (error2.isUserCancelled()) {
4858
+ return messages.claimCanceled;
4859
+ }
4860
+ const readableMessage = typeof error2.message === "string" ? error2.message.trim() : "";
4861
+ if (readableMessage && readableMessage !== "[object Object]") {
4862
+ return readableMessage;
4863
+ }
4864
+ return messages.claimFailed || DEFAULT_ERROR_MESSAGES[error2.type] || DEFAULT_ERROR_MESSAGES[NftClaimErrorType.Unknown];
4865
+ }
4866
+ function formatTxHash$1(hash) {
4867
+ if (hash.length <= 16) return hash;
4868
+ return `${hash.slice(0, 10)}...${hash.slice(-6)}`;
4869
+ }
4870
+ function ClaimNftDialog({
4871
+ open,
4872
+ onClose,
4873
+ status,
4874
+ error: error2,
4875
+ txHash,
4876
+ claimingNft,
4877
+ explorerUrl,
4878
+ messages,
4879
+ onRetry
4880
+ }) {
4881
+ const resolvedMessages = {
4882
+ ...DEFAULT_CLAIM_MESSAGES,
4883
+ ...messages
4884
+ };
4885
+ const isLoading = [
4886
+ "checking",
4887
+ "connecting",
4888
+ "switching",
4889
+ "signing",
4890
+ "confirming",
4891
+ "pending"
4892
+ ].includes(status);
4893
+ const canClose = status === "success" || status === "error" || status === "idle";
4894
+ const handleClose = () => {
4895
+ if (canClose) {
4896
+ onClose();
4897
+ }
4898
+ };
4899
+ const handleViewTx = () => {
4900
+ if (explorerUrl) {
4901
+ window.open(explorerUrl, "_blank", "noopener,noreferrer");
4902
+ }
4903
+ };
4904
+ return /* @__PURE__ */ jsx(
4905
+ Dialog,
4906
+ {
4907
+ open,
4908
+ onOpenChange: (isOpen) => {
4909
+ if (!isOpen && canClose) {
4910
+ onClose();
4911
+ }
4912
+ },
4913
+ title: resolvedMessages.claimNft,
4914
+ showCloseButton: canClose,
4915
+ contentClassName: "taskon-claim-dialog",
4916
+ maxWidth: 400,
4917
+ children: /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-content", children: [
4918
+ claimingNft && /* @__PURE__ */ jsx("div", { className: "taskon-claim-dialog-nft", children: claimingNft.item.reward_value.collection_image && /* @__PURE__ */ jsx(
4919
+ "img",
4920
+ {
4921
+ src: claimingNft.item.reward_value.collection_image,
4922
+ alt: "NFT",
4923
+ className: "taskon-claim-dialog-nft__image"
4924
+ }
4925
+ ) }),
4926
+ /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-status", children: [
4927
+ isLoading && /* @__PURE__ */ jsx(LoadingSpinner, {}),
4928
+ status === "success" && /* @__PURE__ */ jsx(SuccessIcon, {}),
4929
+ status === "error" && /* @__PURE__ */ jsx(ErrorIcon, {})
4930
+ ] }),
4931
+ /* @__PURE__ */ jsx("p", { className: "taskon-claim-dialog-message", children: status === "error" && error2 ? getErrorMessage(error2, resolvedMessages) : getStatusMessage(status, resolvedMessages) }),
4932
+ txHash && (status === "pending" || status === "success") && /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-tx", children: [
4933
+ /* @__PURE__ */ jsx("span", { className: "taskon-claim-dialog-tx__label", children: "Tx:" }),
4934
+ /* @__PURE__ */ jsx("span", { className: "taskon-claim-dialog-tx__hash", children: formatTxHash$1(txHash) })
4935
+ ] }),
4936
+ /* @__PURE__ */ jsxs("div", { className: "taskon-claim-dialog-actions", children: [
4937
+ txHash && explorerUrl && /* @__PURE__ */ jsx(
4938
+ "button",
4939
+ {
4940
+ type: "button",
4941
+ className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--secondary",
4942
+ onClick: handleViewTx,
4943
+ children: resolvedMessages.viewOnExplorer
4944
+ }
4945
+ ),
4946
+ status === "error" && onRetry && /* @__PURE__ */ jsx(
4947
+ "button",
4948
+ {
4949
+ type: "button",
4950
+ className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--primary",
4951
+ onClick: onRetry,
4952
+ children: resolvedMessages.retry
4953
+ }
4954
+ ),
4955
+ canClose && /* @__PURE__ */ jsx(
4956
+ "button",
4957
+ {
4958
+ type: "button",
4959
+ className: "taskon-claim-dialog-btn taskon-claim-dialog-btn--primary",
4960
+ onClick: handleClose,
4961
+ children: resolvedMessages.close
4962
+ }
4963
+ )
4964
+ ] })
4965
+ ] })
4966
+ }
4967
+ );
4968
+ }
4969
+ const DEFAULT_PENDING_MESSAGES = {
4970
+ pendingTransaction: enMessages.pending_transaction,
4971
+ claimPendingTitle: enMessages.claim_pending_title,
4972
+ claimPendingCheckExplorer: enMessages.claim_pending_check_explorer,
4973
+ claimPendingHashLabel: enMessages.claim_pending_hash_label,
4974
+ claimPendingClaimAgainWarn: enMessages.claim_pending_claim_again_warn,
4975
+ claimPendingReceiveAddressNoChange: enMessages.claim_pending_receive_address_no_change,
4976
+ claimAgain: enMessages.claim_again,
4977
+ continueWaiting: enMessages.continue_waiting
4993
4978
  };
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,
4979
+ function formatTxHash(hash) {
4980
+ if (hash.length <= 16) return hash;
4981
+ return `${hash.slice(0, 10)}...${hash.slice(-6)}`;
4982
+ }
4983
+ function PendingTxDialog({
4984
+ open,
4985
+ onClose,
4986
+ onClaimAgain,
4987
+ onContinueWaiting,
4988
+ txHash,
4989
+ explorerUrl,
5097
4990
  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" }));
4991
+ messages
4992
+ }) {
4993
+ const resolvedMessages = {
4994
+ ...DEFAULT_PENDING_MESSAGES,
4995
+ ...messages
4996
+ };
4997
+ const title = resolvedMessages.claimPendingTitle;
4998
+ const checkExplorerText = resolvedMessages.claimPendingCheckExplorer;
4999
+ const hashLabel = resolvedMessages.claimPendingHashLabel;
5000
+ const claimAgainWarn = resolvedMessages.claimPendingClaimAgainWarn;
5001
+ const receiveAddressNoChange = resolvedMessages.claimPendingReceiveAddressNoChange;
5002
+ const handleViewTx = () => {
5003
+ if (explorerUrl) {
5004
+ openInNewTab(explorerUrl);
5005
+ }
5006
+ };
5007
+ return /* @__PURE__ */ jsx(
5008
+ Dialog,
5009
+ {
5010
+ open,
5011
+ onOpenChange: (isOpen) => {
5012
+ if (!isOpen) {
5013
+ onClose();
5014
+ }
5015
+ },
5016
+ title: resolvedMessages.pendingTransaction,
5017
+ showCloseButton: true,
5018
+ contentClassName: "taskon-pending-dialog",
5019
+ maxWidth: 460,
5020
+ children: /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-content", children: [
5021
+ /* @__PURE__ */ jsx("p", { className: "taskon-pending-dialog-title", children: title }),
5022
+ txHash && /* @__PURE__ */ jsx("p", { className: "taskon-pending-dialog-desc", children: checkExplorerText }),
5023
+ txHash && /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-hash-wrap", children: [
5024
+ /* @__PURE__ */ jsx("span", { className: "taskon-pending-dialog-hash-label", children: hashLabel }),
5025
+ explorerUrl ? /* @__PURE__ */ jsx(
5026
+ "button",
5027
+ {
5028
+ type: "button",
5029
+ className: "taskon-pending-dialog-hash-link",
5030
+ onClick: handleViewTx,
5031
+ children: formatTxHash(txHash)
5032
+ }
5033
+ ) : /* @__PURE__ */ jsx("span", { className: "taskon-pending-dialog-hash-value", children: formatTxHash(txHash) })
5034
+ ] }),
5035
+ /* @__PURE__ */ jsxs("ul", { className: "taskon-pending-dialog-notice-list", children: [
5036
+ /* @__PURE__ */ jsx("li", { className: "taskon-pending-dialog-notice-item", children: claimAgainWarn }),
5037
+ receiveAddress && /* @__PURE__ */ jsxs("li", { className: "taskon-pending-dialog-notice-item", children: [
5038
+ /* @__PURE__ */ jsx("div", { children: receiveAddressNoChange }),
5039
+ /* @__PURE__ */ jsx("div", { className: "taskon-pending-dialog-receive-address", children: receiveAddress })
5040
+ ] })
5041
+ ] }),
5042
+ /* @__PURE__ */ jsxs("div", { className: "taskon-pending-dialog-actions", children: [
5043
+ /* @__PURE__ */ jsx(
5044
+ "button",
5045
+ {
5046
+ type: "button",
5047
+ className: "taskon-pending-dialog-btn taskon-pending-dialog-btn--secondary",
5048
+ onClick: onClaimAgain,
5049
+ children: resolvedMessages.claimAgain
5050
+ }
5051
+ ),
5052
+ /* @__PURE__ */ jsx(
5053
+ "button",
5054
+ {
5055
+ type: "button",
5056
+ className: "taskon-pending-dialog-btn taskon-pending-dialog-btn--primary",
5057
+ onClick: onContinueWaiting,
5058
+ children: resolvedMessages.continueWaiting
5059
+ }
5060
+ )
5061
+ ] })
5062
+ ] })
5063
+ }
5064
+ );
5065
+ }
5066
+ const loadMessages = createLocaleLoader(
5067
+ enMessages,
5068
+ {
5069
+ ko: () => import("./usercenter-ko-Dtpkn2qb.js").then((module) => ({
5070
+ default: module.default
5071
+ })),
5072
+ ja: () => import("./usercenter-ja-CKE4DJC6.js").then((module) => ({
5073
+ default: module.default
5074
+ })),
5075
+ ru: () => import("./usercenter-ru-DnBGee45.js").then((module) => ({
5076
+ default: module.default
5077
+ })),
5078
+ es: () => import("./usercenter-es-Dz3Wp2vV.js").then((module) => ({
5079
+ default: module.default
5080
+ }))
5081
+ }
5082
+ );
5083
+ function useUserCenterLocale() {
5084
+ return useTranslation({
5085
+ widgetId: "UserCenterWidget",
5086
+ defaultMessages: enMessages,
5087
+ loadMessages
5088
+ });
5089
+ }
5145
5090
  function EmptyState({
5146
5091
  message,
5147
5092
  icon,
@@ -5153,7 +5098,7 @@ function EmptyState({
5153
5098
  ] });
5154
5099
  }
5155
5100
  function LoadingState({
5156
- message = "Loading...",
5101
+ message,
5157
5102
  className = ""
5158
5103
  }) {
5159
5104
  return /* @__PURE__ */ jsxs("div", { className: `taskon-user-center-loading ${className}`, children: [
@@ -5168,10 +5113,10 @@ function Pagination({
5168
5113
  hasNext,
5169
5114
  onPrevious,
5170
5115
  onNext,
5171
- messages,
5172
5116
  className = "",
5173
5117
  showRange
5174
5118
  }) {
5119
+ const { messages } = useUserCenterLocale();
5175
5120
  if (totalPages === 0) {
5176
5121
  return null;
5177
5122
  }
@@ -5202,6 +5147,7 @@ function Pagination({
5202
5147
  function WithdrawPending({
5203
5148
  count,
5204
5149
  text,
5150
+ countAriaLabel,
5205
5151
  onClick
5206
5152
  }) {
5207
5153
  if (count <= 0) {
@@ -5226,7 +5172,7 @@ function WithdrawPending({
5226
5172
  "span",
5227
5173
  {
5228
5174
  className: "taskon-withdraw-pending__count",
5229
- "aria-label": "Number of pending withdrawals",
5175
+ "aria-label": countAriaLabel,
5230
5176
  children: count
5231
5177
  }
5232
5178
  ),
@@ -5266,12 +5212,17 @@ function formatBalance$2(balance) {
5266
5212
  if (num >= 1e3) return `${(num / 1e3).toFixed(2)}K`;
5267
5213
  return num.toLocaleString(void 0, { maximumFractionDigits: 5 });
5268
5214
  }
5215
+ function normalizeImageSrc(src) {
5216
+ if (typeof src !== "string") return null;
5217
+ const trimmed = src.trim();
5218
+ return trimmed.length > 0 ? trimmed : null;
5219
+ }
5269
5220
  function TokenAssetList({
5270
5221
  data,
5271
5222
  loading: loading2,
5272
5223
  error: error2,
5273
5224
  messages,
5274
- pendingWithdrawals: pendingWithdrawals2,
5225
+ pendingWithdrawals,
5275
5226
  onWithdraw,
5276
5227
  onViewFrozen
5277
5228
  }) {
@@ -5282,50 +5233,56 @@ function TokenAssetList({
5282
5233
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5283
5234
  }
5284
5235
  if (!loading2 && data.length === 0) {
5285
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyToken });
5236
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_token });
5286
5237
  }
5287
5238
  const columns = [
5288
5239
  {
5289
5240
  key: "token_symbol",
5290
- title: messages.columnTokenSymbol ?? "Token Symbol",
5241
+ title: messages.column_token_symbol,
5291
5242
  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
- ] })
5243
+ render: (_, row) => {
5244
+ const tokenIconSrc = normalizeImageSrc(row.token_icon);
5245
+ return /* @__PURE__ */ jsxs("div", { className: "taskon-token-assets__symbol-cell", children: [
5246
+ tokenIconSrc && /* @__PURE__ */ jsx(
5247
+ "img",
5248
+ {
5249
+ src: tokenIconSrc,
5250
+ alt: row.token_symbol,
5251
+ className: "taskon-token-assets__token-icon"
5252
+ }
5253
+ ),
5254
+ /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__symbol", children: row.token_symbol })
5255
+ ] });
5256
+ }
5303
5257
  },
5304
5258
  {
5305
5259
  key: "chain",
5306
- title: messages.columnNetwork ?? "Network",
5260
+ title: messages.column_network,
5307
5261
  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
- ] })
5262
+ render: (_, row) => {
5263
+ const chainIconSrc = normalizeImageSrc(row.chain_icon);
5264
+ return /* @__PURE__ */ jsxs("div", { className: "taskon-token-assets__network-cell", children: [
5265
+ chainIconSrc && /* @__PURE__ */ jsx(
5266
+ "img",
5267
+ {
5268
+ src: chainIconSrc,
5269
+ alt: row.chain_label,
5270
+ className: "taskon-token-assets__chain-icon"
5271
+ }
5272
+ ),
5273
+ /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__chain", children: row.chain_label })
5274
+ ] });
5275
+ }
5319
5276
  },
5320
5277
  {
5321
5278
  key: "withdrawable_avail_balance",
5322
- title: messages.columnWithdrawable ?? "Withdrawable",
5279
+ title: messages.column_withdrawable,
5323
5280
  width: 142,
5324
5281
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-token-assets__balance", children: formatBalance$2(row.withdrawable_avail_balance) })
5325
5282
  },
5326
5283
  {
5327
5284
  key: "frozen_balance",
5328
- title: messages.frozenAssets,
5285
+ title: messages.frozen_assets,
5329
5286
  width: 142,
5330
5287
  render: (_, row) => {
5331
5288
  const frozenAmount = formatBalance$2(row.frozen_balance || "0");
@@ -5346,7 +5303,7 @@ function TokenAssetList({
5346
5303
  },
5347
5304
  {
5348
5305
  key: "action",
5349
- title: messages.columnAction ?? "Action",
5306
+ title: messages.column_action,
5350
5307
  align: "right",
5351
5308
  render: (_, row) => {
5352
5309
  const isDisabled = !row.can_withdraw;
@@ -5368,8 +5325,9 @@ function TokenAssetList({
5368
5325
  /* @__PURE__ */ jsx(
5369
5326
  WithdrawPending,
5370
5327
  {
5371
- count: pendingWithdrawals2 ?? 0,
5372
- text: messages.pendingWithdrawals.replace("{count}", "").trim()
5328
+ count: pendingWithdrawals ?? 0,
5329
+ text: messages.pending_withdrawals_text,
5330
+ countAriaLabel: messages.pending_withdrawals_count_label
5373
5331
  }
5374
5332
  ),
5375
5333
  /* @__PURE__ */ jsx(
@@ -5385,7 +5343,7 @@ function TokenAssetList({
5385
5343
  loading: loading2 && data.length > 0,
5386
5344
  loadingText: messages.loading,
5387
5345
  empty: {
5388
- title: messages.emptyToken
5346
+ title: messages.empty_token
5389
5347
  }
5390
5348
  }
5391
5349
  )
@@ -5393,7 +5351,7 @@ function TokenAssetList({
5393
5351
  }
5394
5352
  function formatTime(timestamp) {
5395
5353
  const date = new Date(timestamp);
5396
- return date.toLocaleDateString(void 0, {
5354
+ return date.toLocaleDateString("en-US", {
5397
5355
  year: "numeric",
5398
5356
  month: "short",
5399
5357
  day: "numeric",
@@ -5409,17 +5367,17 @@ function formatAmount$1(amount) {
5409
5367
  function getLockedTypeLabel(type, messages) {
5410
5368
  switch (type) {
5411
5369
  case "Campaign":
5412
- return messages.frozenTypeCampaign ?? "Campaign Locked";
5370
+ return messages.frozen_type_campaign;
5413
5371
  case "Withdraw":
5414
- return messages.frozenTypeWithdraw ?? "Pending Withdrawal";
5372
+ return messages.frozen_type_withdraw;
5415
5373
  case "ReferralReward":
5416
- return messages.frozenTypeReferral ?? "Referral Locked";
5374
+ return messages.frozen_type_referral;
5417
5375
  case "Benefit":
5418
- return messages.frozenTypeBenefit ?? "Benefit Locked";
5376
+ return messages.frozen_type_benefit;
5419
5377
  case "TgMiniApp":
5420
- return messages.frozenTypeTgMiniApp ?? "TG Mini App";
5378
+ return messages.frozen_type_tg_mini_app;
5421
5379
  case "CommunityMilestone":
5422
- return messages.frozenTypeMilestone ?? "Milestone Locked";
5380
+ return messages.frozen_type_milestone;
5423
5381
  default:
5424
5382
  return type;
5425
5383
  }
@@ -5441,18 +5399,18 @@ function FrozenAssetList({
5441
5399
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5442
5400
  }
5443
5401
  if (!loading2 && data.length === 0) {
5444
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.noData });
5402
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.no_data });
5445
5403
  }
5446
5404
  const columns = [
5447
5405
  {
5448
5406
  key: "locked_amount",
5449
- title: messages.columnAmount,
5407
+ title: messages.column_amount,
5450
5408
  width: 120,
5451
5409
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__amount", children: formatAmount$1(row.locked_amount) })
5452
5410
  },
5453
5411
  {
5454
5412
  key: "type",
5455
- title: messages.columnDetail,
5413
+ title: messages.column_detail,
5456
5414
  render: (_, row) => /* @__PURE__ */ jsxs("div", { className: "taskon-frozen-assets__detail-cell", children: [
5457
5415
  /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__type", children: getLockedTypeLabel(row.type, messages) }),
5458
5416
  row.campaign_name && /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__campaign", children: row.campaign_name })
@@ -5460,13 +5418,13 @@ function FrozenAssetList({
5460
5418
  },
5461
5419
  {
5462
5420
  key: "lock_time",
5463
- title: messages.columnTime,
5421
+ title: messages.column_time,
5464
5422
  width: 160,
5465
5423
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-frozen-assets__time", children: formatTime(row.lock_time) })
5466
5424
  },
5467
5425
  {
5468
5426
  key: "action",
5469
- title: messages.columnAction ?? "Action",
5427
+ title: messages.column_action,
5470
5428
  width: 100,
5471
5429
  align: "right",
5472
5430
  render: (_, row) => {
@@ -5486,14 +5444,14 @@ function FrozenAssetList({
5486
5444
  ];
5487
5445
  return /* @__PURE__ */ jsxs("div", { className: "taskon-frozen-assets", children: [
5488
5446
  /* @__PURE__ */ jsxs("div", { className: "taskon-frozen-assets__header", children: [
5489
- /* @__PURE__ */ jsx("h3", { className: "taskon-frozen-assets__title", children: messages.frozenAssets }),
5447
+ /* @__PURE__ */ jsx("h3", { className: "taskon-frozen-assets__title", children: messages.frozen_assets }),
5490
5448
  onClose && /* @__PURE__ */ jsx(
5491
5449
  "button",
5492
5450
  {
5493
5451
  type: "button",
5494
5452
  className: "taskon-frozen-assets__close",
5495
5453
  onClick: onClose,
5496
- "aria-label": "Close",
5454
+ "aria-label": messages.close,
5497
5455
  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
5456
  }
5499
5457
  )
@@ -5510,7 +5468,7 @@ function FrozenAssetList({
5510
5468
  loading: loading2 && data.length > 0,
5511
5469
  loadingText: messages.loading,
5512
5470
  empty: {
5513
- title: messages.noData
5471
+ title: messages.no_data
5514
5472
  }
5515
5473
  }
5516
5474
  ),
@@ -5522,8 +5480,7 @@ function FrozenAssetList({
5522
5480
  onPrevious: pagination.goToPrevious,
5523
5481
  onNext: pagination.goToNext,
5524
5482
  hasPrevious: pagination.hasPrevious,
5525
- hasNext: pagination.hasNext,
5526
- messages
5483
+ hasNext: pagination.hasNext
5527
5484
  }
5528
5485
  )
5529
5486
  ] });
@@ -5664,9 +5621,9 @@ function PointsList({
5664
5621
  loading: loading2,
5665
5622
  error: error2,
5666
5623
  pagination,
5667
- messages,
5668
5624
  className = ""
5669
5625
  }) {
5626
+ const { messages } = useUserCenterLocale();
5670
5627
  if (loading2 && data.length === 0) {
5671
5628
  return /* @__PURE__ */ jsx(LoadingState, { message: messages.loading });
5672
5629
  }
@@ -5674,23 +5631,23 @@ function PointsList({
5674
5631
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5675
5632
  }
5676
5633
  if (!loading2 && data.length === 0) {
5677
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyPoints });
5634
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_points });
5678
5635
  }
5679
5636
  const columns = [
5680
5637
  {
5681
5638
  key: "detail",
5682
- title: messages.columnDetail,
5639
+ title: messages.column_detail,
5683
5640
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-points-list__name", children: row.name })
5684
5641
  },
5685
5642
  {
5686
5643
  key: "time",
5687
- title: messages.columnTime,
5644
+ title: messages.column_time,
5688
5645
  width: 160,
5689
5646
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-points-list__time", children: formatDateTime(row.receive_time) })
5690
5647
  },
5691
5648
  {
5692
5649
  key: "amount",
5693
- title: `${messages.columnAmount} (${pointsInfo.points_name || messages.rewardPoints})`,
5650
+ title: `${messages.column_amount} (${pointsInfo.points_name || messages.reward_points})`,
5694
5651
  width: 160,
5695
5652
  align: "right",
5696
5653
  render: (_, row) => {
@@ -5731,7 +5688,7 @@ function PointsList({
5731
5688
  /* @__PURE__ */ jsx("h3", { className: "taskon-points-list__title", children: pointsInfo.points_name }),
5732
5689
  /* @__PURE__ */ jsxs("div", { className: "taskon-points-list__total", children: [
5733
5690
  /* @__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 })
5691
+ /* @__PURE__ */ jsx("span", { className: "taskon-points-list__total-label", children: messages.total_points })
5735
5692
  ] })
5736
5693
  ] }),
5737
5694
  /* @__PURE__ */ jsx("div", { className: "taskon-points-list__table-wrap", children: /* @__PURE__ */ jsx(
@@ -5745,7 +5702,7 @@ function PointsList({
5745
5702
  loading: loading2 && data.length > 0,
5746
5703
  loadingText: messages.loading,
5747
5704
  empty: {
5748
- title: messages.emptyPoints
5705
+ title: messages.empty_points
5749
5706
  }
5750
5707
  }
5751
5708
  ) }),
@@ -5757,8 +5714,7 @@ function PointsList({
5757
5714
  onPrevious: pagination.goToPrevious,
5758
5715
  onNext: pagination.goToNext,
5759
5716
  hasPrevious: pagination.hasPrevious,
5760
- hasNext: pagination.hasNext,
5761
- messages
5717
+ hasNext: pagination.hasNext
5762
5718
  }
5763
5719
  )
5764
5720
  ] });
@@ -5817,7 +5773,7 @@ function NftTable({
5817
5773
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5818
5774
  }
5819
5775
  if (!loading2 && data.length === 0) {
5820
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyNft });
5776
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_nft });
5821
5777
  }
5822
5778
  const renderStatus = (item) => {
5823
5779
  const nftValue = item.reward_value;
@@ -5832,7 +5788,7 @@ function NftTable({
5832
5788
  onTxClick == null ? void 0 : onTxClick(item);
5833
5789
  },
5834
5790
  title: nftValue.tx_hash,
5835
- children: messages.claimedTxn
5791
+ children: messages.claimed_txn
5836
5792
  }
5837
5793
  );
5838
5794
  }
@@ -5850,12 +5806,12 @@ function NftTable({
5850
5806
  }
5851
5807
  );
5852
5808
  }
5853
- return /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__manual-drop", children: messages.manualDrop });
5809
+ return /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__manual-drop", children: messages.manual_drop });
5854
5810
  };
5855
5811
  const columns = [
5856
5812
  {
5857
5813
  key: "nft",
5858
- title: messages.columnNft,
5814
+ title: messages.column_nft,
5859
5815
  width: 100,
5860
5816
  render: (_, row) => {
5861
5817
  const nftValue = row.reward_value;
@@ -5872,18 +5828,18 @@ function NftTable({
5872
5828
  },
5873
5829
  {
5874
5830
  key: "detail",
5875
- title: messages.columnDetail,
5831
+ title: messages.column_detail,
5876
5832
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__campaign-name", children: row.campaign_name })
5877
5833
  },
5878
5834
  {
5879
5835
  key: "time",
5880
- title: messages.columnTime,
5836
+ title: messages.column_time,
5881
5837
  width: 160,
5882
5838
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__time", children: formatDateTime(row.reward_time) })
5883
5839
  },
5884
5840
  {
5885
5841
  key: "status",
5886
- title: messages.columnStatus,
5842
+ title: messages.column_status,
5887
5843
  width: 120,
5888
5844
  align: "right",
5889
5845
  render: (_, row) => renderStatus(row)
@@ -5901,7 +5857,7 @@ function NftTable({
5901
5857
  loading: loading2 && data.length > 0,
5902
5858
  loadingText: messages.loading,
5903
5859
  empty: {
5904
- title: messages.emptyNft
5860
+ title: messages.empty_nft
5905
5861
  }
5906
5862
  }
5907
5863
  ),
@@ -5913,18 +5869,17 @@ function NftTable({
5913
5869
  onPrevious: pagination.goToPrevious,
5914
5870
  onNext: pagination.goToNext,
5915
5871
  hasPrevious: pagination.hasPrevious,
5916
- hasNext: pagination.hasNext,
5917
- messages
5872
+ hasNext: pagination.hasNext
5918
5873
  }
5919
5874
  )
5920
5875
  ] });
5921
5876
  }
5922
- function getDetailName(item, _messages) {
5877
+ function getDetailName(item, messages) {
5923
5878
  if (item.roulette_reward_type === RouletteRewardType.Spin) {
5924
- return "Telegram Spin";
5879
+ return messages.token_history_telegram_spin;
5925
5880
  }
5926
5881
  if (item.roulette_reward_type === RouletteRewardType.Bonus) {
5927
- return "Telegram Spin Bonus";
5882
+ return messages.token_history_telegram_spin_bonus;
5928
5883
  }
5929
5884
  return item.task_name || item.campaign_name || item.milestone_name || "";
5930
5885
  }
@@ -5942,7 +5897,7 @@ function TokenHistoryTable({
5942
5897
  return /* @__PURE__ */ jsx("div", { className: "taskon-user-center-error", children: /* @__PURE__ */ jsx("p", { className: "taskon-user-center-error__message", children: error2.message }) });
5943
5898
  }
5944
5899
  if (!loading2 && data.length === 0) {
5945
- return /* @__PURE__ */ jsx(EmptyState, { message: messages.emptyToken });
5900
+ return /* @__PURE__ */ jsx(EmptyState, { message: messages.empty_token });
5946
5901
  }
5947
5902
  const renderAmount = (item) => {
5948
5903
  var _a;
@@ -5968,7 +5923,7 @@ function TokenHistoryTable({
5968
5923
  )
5969
5924
  ] }),
5970
5925
  /* @__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 }),
5926
+ /* @__PURE__ */ jsx("span", { className: "taskon-token-history__distributed-label", children: messages.distributed_by }),
5972
5927
  (communityInfo == null ? void 0 : communityInfo.community_avatar) && /* @__PURE__ */ jsx(
5973
5928
  "img",
5974
5929
  {
@@ -5984,18 +5939,18 @@ function TokenHistoryTable({
5984
5939
  const columns = [
5985
5940
  {
5986
5941
  key: "detail",
5987
- title: messages.columnDetail,
5988
- render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__campaign-name", children: getDetailName(row) })
5942
+ title: messages.column_detail,
5943
+ render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__campaign-name", children: getDetailName(row, messages) })
5989
5944
  },
5990
5945
  {
5991
5946
  key: "time",
5992
- title: messages.columnTime,
5947
+ title: messages.column_time,
5993
5948
  width: 160,
5994
5949
  render: (_, row) => /* @__PURE__ */ jsx("span", { className: "taskon-reward-table__time", children: formatDateTime(row.reward_time) })
5995
5950
  },
5996
5951
  {
5997
5952
  key: "amount",
5998
- title: messages.columnAmount,
5953
+ title: messages.column_amount,
5999
5954
  width: 200,
6000
5955
  align: "right",
6001
5956
  render: (_, row) => renderAmount(row)
@@ -6013,7 +5968,7 @@ function TokenHistoryTable({
6013
5968
  loading: loading2 && data.length > 0,
6014
5969
  loadingText: messages.loading,
6015
5970
  empty: {
6016
- title: messages.emptyToken
5971
+ title: messages.empty_token
6017
5972
  }
6018
5973
  }
6019
5974
  ),
@@ -6025,8 +5980,7 @@ function TokenHistoryTable({
6025
5980
  onPrevious: pagination.goToPrevious,
6026
5981
  onNext: pagination.goToNext,
6027
5982
  hasPrevious: pagination.hasPrevious,
6028
- hasNext: pagination.hasNext,
6029
- messages
5983
+ hasNext: pagination.hasNext
6030
5984
  }
6031
5985
  )
6032
5986
  ] });
@@ -6050,7 +6004,7 @@ function useRewardDetails(options) {
6050
6004
  const pagination = usePagination({
6051
6005
  total,
6052
6006
  pageSize,
6053
- initialPage: 1,
6007
+ initialPage: 0,
6054
6008
  mode
6055
6009
  });
6056
6010
  const fetchData = useCallback(
@@ -6065,7 +6019,7 @@ function useRewardDetails(options) {
6065
6019
  const response = await api.listMyCommunityRewardDetails({
6066
6020
  reward_type: rewardType,
6067
6021
  page: {
6068
- page_no: pageNo - 1,
6022
+ page_no: pageNo,
6069
6023
  // API 使用 0-based 索引
6070
6024
  size: pageSize
6071
6025
  }
@@ -6087,20 +6041,23 @@ function useRewardDetails(options) {
6087
6041
  [api, rewardType, pageSize]
6088
6042
  );
6089
6043
  const refresh = useCallback(async () => {
6090
- pagination.goToPage(1);
6091
6044
  setData([]);
6092
- await fetchData(1, false);
6045
+ if (pagination.page === 0) {
6046
+ await fetchData(0, false);
6047
+ return;
6048
+ }
6049
+ pagination.goToPage(0);
6093
6050
  }, [fetchData, pagination]);
6094
6051
  useEffect(() => {
6095
- if (autoLoad) {
6096
- fetchData(1, false);
6052
+ if (!autoLoad) {
6053
+ return;
6097
6054
  }
6098
- }, [autoLoad, rewardType, fetchData]);
6099
- useEffect(() => {
6100
- if (mode === "pagination" && pagination.page > 1) {
6055
+ if (mode === "pagination") {
6101
6056
  fetchData(pagination.page, false);
6057
+ return;
6102
6058
  }
6103
- }, [mode, pagination.page, fetchData]);
6059
+ fetchData(pagination.page, pagination.page > 0);
6060
+ }, [autoLoad, mode, pagination.page, fetchData]);
6104
6061
  return {
6105
6062
  data,
6106
6063
  loading: loading2,
@@ -6121,7 +6078,7 @@ function useTokenAssets(options = {}) {
6121
6078
  const { client } = useTaskOnContext();
6122
6079
  const [data, setData] = useState([]);
6123
6080
  const [total, setTotal] = useState(0);
6124
- const [pendingWithdrawals2, setPendingWithdrawals] = useState(0);
6081
+ const [pendingWithdrawals, setPendingWithdrawals] = useState(0);
6125
6082
  const [loading2, setLoading] = useState(false);
6126
6083
  const [error2, setError] = useState(null);
6127
6084
  const api = useMemo(() => {
@@ -6196,7 +6153,7 @@ function useTokenAssets(options = {}) {
6196
6153
  loading: loading2,
6197
6154
  error: error2,
6198
6155
  total,
6199
- pendingWithdrawals: pendingWithdrawals2,
6156
+ pendingWithdrawals,
6200
6157
  pagination,
6201
6158
  refresh
6202
6159
  };
@@ -6527,7 +6484,7 @@ function useTokenWithdraw(options = {}) {
6527
6484
  evmAdapter,
6528
6485
  onError
6529
6486
  ]);
6530
- const confirmWithdraw2 = useCallback(async () => {
6487
+ const confirmWithdraw = useCallback(async () => {
6531
6488
  if (!api) {
6532
6489
  setError(new Error("TaskOn client not initialized"));
6533
6490
  return;
@@ -6662,7 +6619,7 @@ function useTokenWithdraw(options = {}) {
6662
6619
  initBatchWithdraw,
6663
6620
  initWithdrawTokens,
6664
6621
  checkAndConnect,
6665
- confirmWithdraw: confirmWithdraw2,
6622
+ confirmWithdraw,
6666
6623
  cancelWithdraw,
6667
6624
  reset
6668
6625
  };
@@ -6742,7 +6699,13 @@ function usePointsHistory(options) {
6742
6699
  };
6743
6700
  }
6744
6701
  function useWithdrawForm(options) {
6745
- const { tokenAssets, initialTokenId, initialChain, getDecimals } = options;
6702
+ const {
6703
+ tokenAssets,
6704
+ initialTokenId,
6705
+ initialChain,
6706
+ getDecimals,
6707
+ messages
6708
+ } = options;
6746
6709
  const resolveDecimals = useCallback(
6747
6710
  (tokenAddress) => {
6748
6711
  if (getDecimals) {
@@ -6768,23 +6731,23 @@ function useWithdrawForm(options) {
6768
6731
  const validation = useMemo(() => {
6769
6732
  const errors = {};
6770
6733
  if (!selectedToken) {
6771
- errors.token = "Please select a token";
6734
+ errors.token = messages.please_select_token;
6772
6735
  }
6773
6736
  if (!withdrawAmount || withdrawAmount === "") {
6774
- errors.amount = "Please enter an amount";
6737
+ errors.amount = messages.please_enter_amount;
6775
6738
  } else {
6776
6739
  const amount = parseFloat(withdrawAmount);
6777
6740
  if (isNaN(amount) || amount <= 0) {
6778
- errors.amount = "Please enter a valid amount";
6741
+ errors.amount = messages.please_enter_valid_amount;
6779
6742
  } else if (selectedToken && amount > parseFloat(selectedToken.withdrawable_avail_balance)) {
6780
- errors.amount = "Amount exceeds available balance";
6743
+ errors.amount = messages.amount_exceeds_balance;
6781
6744
  }
6782
6745
  }
6783
6746
  return {
6784
6747
  isValid: Object.keys(errors).length === 0,
6785
6748
  errors
6786
6749
  };
6787
- }, [selectedToken, withdrawAmount]);
6750
+ }, [selectedToken, withdrawAmount, messages]);
6788
6751
  useEffect(() => {
6789
6752
  if (tokenAssets.length === 0) return;
6790
6753
  if (initialTokenId) {
@@ -6960,17 +6923,16 @@ function TokenRewardContent({
6960
6923
  tokenAssets,
6961
6924
  tokenAssetsLoading,
6962
6925
  tokenAssetsError,
6963
- pendingWithdrawals: pendingWithdrawals2,
6964
- tokenHistory: tokenHistory2,
6926
+ pendingWithdrawals,
6927
+ tokenHistory,
6965
6928
  tokenHistoryLoading,
6966
6929
  tokenHistoryError,
6967
6930
  tokenHistoryPagination,
6968
- messages,
6969
6931
  onWithdraw,
6970
6932
  onBatchWithdraw,
6971
6933
  showFrozenAssets = false,
6972
6934
  onViewFrozen,
6973
- frozenAssets: frozenAssets2 = [],
6935
+ frozenAssets = [],
6974
6936
  frozenAssetsLoading = false,
6975
6937
  frozenAssetsError = null,
6976
6938
  frozenAssetsPagination,
@@ -6978,6 +6940,7 @@ function TokenRewardContent({
6978
6940
  onResendFrozenAsset,
6979
6941
  onCloseFrozenAssets
6980
6942
  }) {
6943
+ const { messages } = useUserCenterLocale();
6981
6944
  return /* @__PURE__ */ jsxs("div", { className: "taskon-my-rewards", children: [
6982
6945
  /* @__PURE__ */ jsx("div", { className: "taskon-my-rewards__section", children: /* @__PURE__ */ jsx(
6983
6946
  TokenAssetList,
@@ -6986,7 +6949,7 @@ function TokenRewardContent({
6986
6949
  loading: tokenAssetsLoading,
6987
6950
  error: tokenAssetsError,
6988
6951
  messages,
6989
- pendingWithdrawals: pendingWithdrawals2,
6952
+ pendingWithdrawals,
6990
6953
  onWithdraw,
6991
6954
  onBatchWithdraw,
6992
6955
  onViewFrozen
@@ -6995,7 +6958,7 @@ function TokenRewardContent({
6995
6958
  showFrozenAssets && frozenAssetsPagination && /* @__PURE__ */ jsx("div", { className: "taskon-my-rewards__section", children: /* @__PURE__ */ jsx(
6996
6959
  FrozenAssetList,
6997
6960
  {
6998
- data: frozenAssets2,
6961
+ data: frozenAssets,
6999
6962
  loading: frozenAssetsLoading,
7000
6963
  error: frozenAssetsError,
7001
6964
  pagination: frozenAssetsPagination,
@@ -7006,11 +6969,11 @@ function TokenRewardContent({
7006
6969
  }
7007
6970
  ) }),
7008
6971
  /* @__PURE__ */ jsxs("div", { className: "taskon-my-rewards__section", children: [
7009
- /* @__PURE__ */ jsx("h3", { className: "taskon-my-rewards__section-title", children: messages.tokenHistory }),
6972
+ /* @__PURE__ */ jsx("h3", { className: "taskon-my-rewards__section-title", children: messages.token_history }),
7010
6973
  /* @__PURE__ */ jsx(
7011
6974
  TokenHistoryTable,
7012
6975
  {
7013
- data: tokenHistory2,
6976
+ data: tokenHistory,
7014
6977
  loading: tokenHistoryLoading,
7015
6978
  error: tokenHistoryError,
7016
6979
  pagination: tokenHistoryPagination,
@@ -7025,12 +6988,12 @@ function NftRewardContent({
7025
6988
  loading: loading2,
7026
6989
  error: error2,
7027
6990
  pagination,
7028
- messages,
7029
6991
  onClaim: customOnClaim,
7030
6992
  onTxClick: customOnTxClick,
7031
6993
  onClaimSuccess,
7032
6994
  onClaimError
7033
6995
  }) {
6996
+ const { messages } = useUserCenterLocale();
7034
6997
  const { chainMap } = useChainMap();
7035
6998
  const [isClaimDialogOpen, setIsClaimDialogOpen] = useState(false);
7036
6999
  const [isWalletDialogOpen, setIsWalletDialogOpen] = useState(false);
@@ -7038,11 +7001,11 @@ function NftRewardContent({
7038
7001
  const [pendingTxDialogState, setPendingTxDialogState] = useState(null);
7039
7002
  const [pendingWalletClaimItem, setPendingWalletClaimItem] = useState(null);
7040
7003
  const pendingDecisionResolverRef = useRef(null);
7041
- const resolvePendingDecision = useCallback((claimAgain2) => {
7004
+ const resolvePendingDecision = useCallback((claimAgain) => {
7042
7005
  const resolver = pendingDecisionResolverRef.current;
7043
7006
  if (resolver) {
7044
7007
  pendingDecisionResolverRef.current = null;
7045
- resolver(claimAgain2);
7008
+ resolver(claimAgain);
7046
7009
  }
7047
7010
  }, []);
7048
7011
  useEffect(() => {
@@ -7054,8 +7017,8 @@ function NftRewardContent({
7054
7017
  status: claimStatus,
7055
7018
  error: claimError,
7056
7019
  txHash: claimTxHash,
7057
- claimingNft: claimingNft2,
7058
- claimNft: claimNft2,
7020
+ claimingNft,
7021
+ claimNft,
7059
7022
  reset: resetClaim
7060
7023
  } = useNftClaim({
7061
7024
  onSuccess: (txHash, item) => {
@@ -7066,14 +7029,14 @@ function NftRewardContent({
7066
7029
  },
7067
7030
  onPendingFound: async (pendingKey, txHash, chainName, item) => {
7068
7031
  const rewardValue = item.reward_value;
7069
- const receiveAddress2 = typeof rewardValue.receiver_address === "string" ? rewardValue.receiver_address : void 0;
7032
+ const receiveAddress = typeof rewardValue.receiver_address === "string" ? rewardValue.receiver_address : void 0;
7070
7033
  resolvePendingDecision(false);
7071
7034
  setIsClaimDialogOpen(false);
7072
7035
  setPendingTxDialogState({
7073
7036
  pendingKey,
7074
7037
  txHash,
7075
7038
  chainName,
7076
- receiveAddress: receiveAddress2
7039
+ receiveAddress
7077
7040
  });
7078
7041
  setIsPendingDialogOpen(true);
7079
7042
  return new Promise((resolve) => {
@@ -7086,18 +7049,49 @@ function NftRewardContent({
7086
7049
  }
7087
7050
  });
7088
7051
  const explorerUrl = useMemo(() => {
7089
- if (!claimTxHash || !claimingNft2) return void 0;
7090
- const chainName = claimingNft2.chainName;
7052
+ if (!claimTxHash || !claimingNft) return void 0;
7053
+ const chainName = claimingNft.chainName;
7091
7054
  const chainInfo = chainMap[chainName.toLowerCase()];
7092
7055
  if (!chainInfo) return void 0;
7093
7056
  return getTxExplorerUrl(chainInfo, claimTxHash);
7094
- }, [claimTxHash, claimingNft2, chainMap]);
7057
+ }, [claimTxHash, claimingNft, chainMap]);
7095
7058
  const pendingExplorerUrl = useMemo(() => {
7096
7059
  if (!(pendingTxDialogState == null ? void 0 : pendingTxDialogState.txHash)) return void 0;
7097
7060
  const chainInfo = chainMap[pendingTxDialogState.chainName.toLowerCase()];
7098
7061
  if (!chainInfo) return void 0;
7099
7062
  return getTxExplorerUrl(chainInfo, pendingTxDialogState.txHash);
7100
7063
  }, [pendingTxDialogState, chainMap]);
7064
+ const claimDialogMessages = useMemo(
7065
+ () => ({
7066
+ claimNft: messages.claim_nft,
7067
+ claimingNft: messages.claiming_nft,
7068
+ claimConnectingWallet: messages.claim_connecting_wallet,
7069
+ claimSwitchingNetwork: messages.claim_switching_network,
7070
+ claimGettingSignature: messages.claim_getting_signature,
7071
+ claimConfirmInWallet: messages.claim_confirm_in_wallet,
7072
+ claimTransactionPending: messages.claim_transaction_pending,
7073
+ claimSuccess: messages.claim_success,
7074
+ claimFailed: messages.claim_failed,
7075
+ claimCanceled: messages.claim_canceled,
7076
+ viewOnExplorer: messages.view_on_explorer,
7077
+ retry: messages.retry,
7078
+ close: messages.close
7079
+ }),
7080
+ [messages]
7081
+ );
7082
+ const pendingDialogMessages = useMemo(
7083
+ () => ({
7084
+ pendingTransaction: messages.pending_transaction,
7085
+ claimPendingTitle: messages.claim_pending_title,
7086
+ claimPendingCheckExplorer: messages.claim_pending_check_explorer,
7087
+ claimPendingHashLabel: messages.claim_pending_hash_label,
7088
+ claimPendingClaimAgainWarn: messages.claim_pending_claim_again_warn,
7089
+ claimPendingReceiveAddressNoChange: messages.claim_pending_receive_address_no_change,
7090
+ claimAgain: messages.claim_again,
7091
+ continueWaiting: messages.continue_waiting
7092
+ }),
7093
+ [messages]
7094
+ );
7101
7095
  const handleNftClaim = useCallback(
7102
7096
  (item) => {
7103
7097
  if (customOnClaim) {
@@ -7106,9 +7100,9 @@ function NftRewardContent({
7106
7100
  }
7107
7101
  setPendingWalletClaimItem(item);
7108
7102
  setIsClaimDialogOpen(true);
7109
- void claimNft2(item);
7103
+ void claimNft(item);
7110
7104
  },
7111
- [customOnClaim, claimNft2]
7105
+ [customOnClaim, claimNft]
7112
7106
  );
7113
7107
  const handleNftTxClick = useCallback(
7114
7108
  (item) => {
@@ -7138,7 +7132,7 @@ function NftRewardContent({
7138
7132
  );
7139
7133
  const handleWalletConnect = useCallback(
7140
7134
  async (address, provider) => {
7141
- const targetItem = pendingWalletClaimItem ?? (claimingNft2 == null ? void 0 : claimingNft2.item);
7135
+ const targetItem = pendingWalletClaimItem ?? (claimingNft == null ? void 0 : claimingNft.item);
7142
7136
  if (!targetItem) {
7143
7137
  throw new Error("No pending NFT claim target found");
7144
7138
  }
@@ -7154,9 +7148,9 @@ function NftRewardContent({
7154
7148
  );
7155
7149
  setIsWalletDialogOpen(false);
7156
7150
  setIsClaimDialogOpen(true);
7157
- await claimNft2(targetItem, popupAdapter);
7151
+ await claimNft(targetItem, popupAdapter);
7158
7152
  },
7159
- [pendingWalletClaimItem, claimingNft2, claimNft2]
7153
+ [pendingWalletClaimItem, claimingNft, claimNft]
7160
7154
  );
7161
7155
  const handleWalletError = useCallback((errorMessage) => {
7162
7156
  console.warn("Wallet dialog connect failed:", errorMessage);
@@ -7182,12 +7176,12 @@ function NftRewardContent({
7182
7176
  }, 200);
7183
7177
  }, [resetClaim]);
7184
7178
  const handleRetry = useCallback(() => {
7185
- if (claimingNft2) {
7179
+ if (claimingNft) {
7186
7180
  resetClaim();
7187
- setPendingWalletClaimItem(claimingNft2.item);
7188
- void claimNft2(claimingNft2.item);
7181
+ setPendingWalletClaimItem(claimingNft.item);
7182
+ void claimNft(claimingNft.item);
7189
7183
  }
7190
- }, [claimingNft2, resetClaim, claimNft2]);
7184
+ }, [claimingNft, resetClaim, claimNft]);
7191
7185
  return /* @__PURE__ */ jsxs(Fragment, { children: [
7192
7186
  /* @__PURE__ */ jsx(
7193
7187
  NftTable,
@@ -7209,9 +7203,9 @@ function NftRewardContent({
7209
7203
  status: claimStatus,
7210
7204
  error: claimError,
7211
7205
  txHash: claimTxHash,
7212
- claimingNft: claimingNft2,
7206
+ claimingNft,
7213
7207
  explorerUrl,
7214
- messages,
7208
+ messages: claimDialogMessages,
7215
7209
  onRetry: handleRetry
7216
7210
  }
7217
7211
  ),
@@ -7225,7 +7219,7 @@ function NftRewardContent({
7225
7219
  txHash: pendingTxDialogState == null ? void 0 : pendingTxDialogState.txHash,
7226
7220
  explorerUrl: pendingExplorerUrl,
7227
7221
  receiveAddress: pendingTxDialogState == null ? void 0 : pendingTxDialogState.receiveAddress,
7228
- messages
7222
+ messages: pendingDialogMessages
7229
7223
  }
7230
7224
  ),
7231
7225
  /* @__PURE__ */ jsx(
@@ -7245,14 +7239,17 @@ function formatBalance$1(balance) {
7245
7239
  return num.toLocaleString(void 0, { maximumFractionDigits: 6 });
7246
7240
  }
7247
7241
  function TokenSelect({
7242
+ messages,
7248
7243
  tokens,
7249
7244
  value,
7250
- placeholder = "Select Token",
7245
+ placeholder,
7251
7246
  disabled = false,
7252
7247
  hasError = false,
7253
- notSupportText = "Token not supported",
7248
+ notSupportText,
7254
7249
  onChange
7255
7250
  }) {
7251
+ const placeholderText = placeholder ?? messages.select_token;
7252
+ const notSupportLabel = notSupportText ?? messages.token_not_supported;
7256
7253
  const tokenOptions = useMemo(() => {
7257
7254
  return tokens.map((token) => ({
7258
7255
  label: token.token_symbol,
@@ -7305,18 +7302,18 @@ function TokenSelect({
7305
7302
  canWithdraw: tokenOption.can_withdraw,
7306
7303
  active,
7307
7304
  disabled: tokenOption.disabled,
7308
- notSupportText
7305
+ notSupportText: notSupportLabel
7309
7306
  }
7310
7307
  );
7311
7308
  },
7312
- [notSupportText]
7309
+ [notSupportLabel]
7313
7310
  );
7314
7311
  return /* @__PURE__ */ jsx(
7315
7312
  Select,
7316
7313
  {
7317
7314
  options: tokenOptions,
7318
7315
  value,
7319
- placeholder,
7316
+ placeholder: placeholderText,
7320
7317
  disabled,
7321
7318
  hasError,
7322
7319
  showCheckedIcon: false,
@@ -7386,6 +7383,7 @@ function formatAddress(address, prefixLen = 6, suffixLen = 4) {
7386
7383
  return `${address.slice(0, prefixLen)}...${address.slice(-suffixLen)}`;
7387
7384
  }
7388
7385
  function ReceiverAddress({
7386
+ messages,
7389
7387
  chainIcon,
7390
7388
  chainLabel,
7391
7389
  address
@@ -7396,13 +7394,13 @@ function ReceiverAddress({
7396
7394
  "img",
7397
7395
  {
7398
7396
  src: chainIcon,
7399
- alt: chainLabel || "chain",
7397
+ alt: chainLabel || messages.chain_label,
7400
7398
  className: "taskon-receiver-address__chain-icon"
7401
7399
  }
7402
7400
  ),
7403
- /* @__PURE__ */ jsx("span", { className: "taskon-receiver-address__chain-label", children: chainLabel || "--" })
7401
+ /* @__PURE__ */ jsx("span", { className: "taskon-receiver-address__chain-label", children: chainLabel || messages.no_data })
7404
7402
  ] }),
7405
- /* @__PURE__ */ jsx("div", { className: "taskon-receiver-address__address", children: address ? formatAddress(address) : "--" })
7403
+ /* @__PURE__ */ jsx("div", { className: "taskon-receiver-address__address", children: address ? formatAddress(address) : messages.no_data })
7406
7404
  ] });
7407
7405
  }
7408
7406
  const PAGE_SIZE = 5;
@@ -7662,7 +7660,7 @@ function BatchTokenTable({
7662
7660
  // Token 类型列
7663
7661
  {
7664
7662
  key: "token_symbol",
7665
- title: messages.columnTokenType || "Type",
7663
+ title: messages.column_token_type,
7666
7664
  width: 105,
7667
7665
  align: "center",
7668
7666
  render: (_, row) => /* @__PURE__ */ jsxs("div", { className: "taskon-batch-token-table__token-cell", children: [
@@ -7680,7 +7678,7 @@ function BatchTokenTable({
7680
7678
  // 可提现金额列
7681
7679
  {
7682
7680
  key: "withdrawable_avail_balance",
7683
- title: messages.columnAmountWithdrawable || "Amount Withdrawable",
7681
+ title: messages.column_amount_withdrawable,
7684
7682
  width: 120,
7685
7683
  align: "center",
7686
7684
  render: (_, row) => formatBalance(row.withdrawable_avail_balance)
@@ -7688,7 +7686,7 @@ function BatchTokenTable({
7688
7686
  // 提现金额输入列
7689
7687
  {
7690
7688
  key: "amount",
7691
- title: messages.columnWithdrawAmount || "Withdraw Amount",
7689
+ title: messages.column_withdraw_amount,
7692
7690
  width: 120,
7693
7691
  align: "center",
7694
7692
  render: (_, row) => {
@@ -7773,18 +7771,18 @@ function WithdrawFormInit({
7773
7771
  return /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-form-init", children: [
7774
7772
  /* @__PURE__ */ jsx("h2", { className: "taskon-withdraw-form-init__title", children: messages.withdraw }),
7775
7773
  /* @__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(
7774
+ /* @__PURE__ */ jsx(FormItem, { label: messages.select_token, type: "dialog", error: validationErrors.token, children: /* @__PURE__ */ jsx(
7777
7775
  TokenSelect,
7778
7776
  {
7777
+ messages,
7779
7778
  tokens: withdrawableTokens,
7780
7779
  value: selectedTokenId,
7781
- placeholder: "Select Token",
7782
7780
  disabled: tokenAssetsLoading || submitting,
7783
7781
  hasError: !!validationErrors.token,
7784
7782
  onChange: onTokenChange
7785
7783
  }
7786
7784
  ) }),
7787
- /* @__PURE__ */ jsx(FormItem, { label: "Token Amount", type: "dialog", error: validationErrors.amount, children: /* @__PURE__ */ jsx(
7785
+ /* @__PURE__ */ jsx(FormItem, { label: messages.token_amount, type: "dialog", error: validationErrors.amount, children: /* @__PURE__ */ jsx(
7788
7786
  AmountInput,
7789
7787
  {
7790
7788
  value: withdrawAmount,
@@ -7796,9 +7794,10 @@ function WithdrawFormInit({
7796
7794
  onChange: onAmountChange
7797
7795
  }
7798
7796
  ) }),
7799
- /* @__PURE__ */ jsx(FormItem, { label: "Receive Address", type: "dialog", children: /* @__PURE__ */ jsx(
7797
+ /* @__PURE__ */ jsx(FormItem, { label: messages.receive_address, type: "dialog", children: /* @__PURE__ */ jsx(
7800
7798
  ReceiverAddress,
7801
7799
  {
7800
+ messages,
7802
7801
  chainIcon: selectedToken == null ? void 0 : selectedToken.chain_icon,
7803
7802
  chainLabel: selectedToken == null ? void 0 : selectedToken.chain_label,
7804
7803
  address: userAddress
@@ -7809,7 +7808,7 @@ function WithdrawFormInit({
7809
7808
  {
7810
7809
  checked: batchEnabled,
7811
7810
  onChange: onBatchEnabledChange,
7812
- label: messages.batchWithdraw,
7811
+ label: messages.batch_withdraw,
7813
7812
  disabled: submitting
7814
7813
  }
7815
7814
  ) }) }),
@@ -7854,7 +7853,7 @@ function WithdrawConfirm({
7854
7853
  onCancel
7855
7854
  }) {
7856
7855
  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 }) }),
7856
+ /* @__PURE__ */ jsx("div", { className: "taskon-withdraw-confirm__header", children: /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-confirm__title", children: messages.withdraw_confirm }) }),
7858
7857
  /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-confirm__content", children: [
7859
7858
  /* @__PURE__ */ jsx("div", { className: "taskon-withdraw-confirm__tokens", children: tokens.map((token) => /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-confirm__token", children: [
7860
7859
  /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-confirm__token-info", children: [
@@ -7944,7 +7943,7 @@ function WithdrawSuccess({
7944
7943
  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
7944
  }
7946
7945
  ) }),
7947
- /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-success__title", children: messages.withdrawSuccess }),
7946
+ /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-success__title", children: messages.withdraw_success }),
7948
7947
  txHash && /* @__PURE__ */ jsxs("p", { className: "taskon-withdraw-success__tx-hash", children: [
7949
7948
  "TX: ",
7950
7949
  txHash.slice(0, 10),
@@ -7978,8 +7977,8 @@ function WithdrawCancel({
7978
7977
  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
7978
  }
7980
7979
  ) }),
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." }),
7980
+ /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-cancel__title", children: messages.withdraw_canceled }),
7981
+ /* @__PURE__ */ jsx("p", { className: "taskon-withdraw-cancel__message", children: messages.withdraw_canceled_message }),
7983
7982
  /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-cancel__actions", children: [
7984
7983
  /* @__PURE__ */ jsx(
7985
7984
  Button,
@@ -8005,6 +8004,7 @@ function WithdrawGasNotEnough({
8005
8004
  chainLabel,
8006
8005
  onClose
8007
8006
  }) {
8007
+ const message = chainLabel ? messages.gas_not_enough_description_with_chain.replace("{chain}", chainLabel) : messages.gas_not_enough_description;
8008
8008
  return /* @__PURE__ */ jsxs("div", { className: "taskon-withdraw-gas-not-enough", children: [
8009
8009
  /* @__PURE__ */ jsx("div", { className: "taskon-withdraw-gas-not-enough__icon", children: /* @__PURE__ */ jsx(
8010
8010
  "svg",
@@ -8016,8 +8016,8 @@ function WithdrawGasNotEnough({
8016
8016
  children: /* @__PURE__ */ jsx("path", { d: "M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" })
8017
8017
  }
8018
8018
  ) }),
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." }),
8019
+ /* @__PURE__ */ jsx("h3", { className: "taskon-withdraw-gas-not-enough__title", children: messages.gas_not_enough }),
8020
+ /* @__PURE__ */ jsx("p", { className: "taskon-withdraw-gas-not-enough__message", children: message }),
8021
8021
  /* @__PURE__ */ jsx(
8022
8022
  Button,
8023
8023
  {
@@ -8032,22 +8032,21 @@ function WithdrawGasNotEnough({
8032
8032
  function getDialogTitle(status, messages) {
8033
8033
  switch (status) {
8034
8034
  case "confirm":
8035
- return messages.withdrawConfirm;
8035
+ return messages.withdraw_confirm;
8036
8036
  case "loading":
8037
8037
  return messages.loading;
8038
8038
  case "success":
8039
- return messages.withdrawSuccess;
8039
+ return messages.withdraw_success;
8040
8040
  case "cancel":
8041
- return messages.withdrawCanceled;
8041
+ return messages.withdraw_canceled;
8042
8042
  case "noEnough":
8043
- return messages.gasNotEnough;
8043
+ return messages.gas_not_enough;
8044
8044
  default:
8045
8045
  return messages.withdraw;
8046
8046
  }
8047
8047
  }
8048
8048
  function WithdrawForm({
8049
8049
  open,
8050
- messages,
8051
8050
  tokenAssets,
8052
8051
  tokenAssetsLoading,
8053
8052
  userAddress,
@@ -8058,10 +8057,13 @@ function WithdrawForm({
8058
8057
  onClose,
8059
8058
  onSuccess
8060
8059
  }) {
8060
+ const { messages } = useUserCenterLocale();
8061
8061
  const [submitting, setSubmitting] = useState(false);
8062
8062
  const { toast } = useToast();
8063
8063
  const { userInfo } = useTaskOnContext();
8064
- const isResendMode = Boolean(resend2 && resendTokenItems && resendTokenItems.length > 0);
8064
+ const isResendMode = Boolean(
8065
+ resend2 && resendTokenItems && resendTokenItems.length > 0
8066
+ );
8065
8067
  const { getDecimals } = useTokenDecimals({
8066
8068
  tokenAssets
8067
8069
  });
@@ -8069,8 +8071,9 @@ function WithdrawForm({
8069
8071
  tokenAssets,
8070
8072
  initialTokenId,
8071
8073
  initialChain,
8072
- getDecimals
8074
+ getDecimals,
8073
8075
  // 传入精度获取函数
8076
+ messages
8074
8077
  });
8075
8078
  const resolvedUserAddress = useMemo(() => {
8076
8079
  var _a;
@@ -8089,35 +8092,27 @@ function WithdrawForm({
8089
8092
  switch (errType) {
8090
8093
  case TxErrorType.AccountMismatch: {
8091
8094
  if (error2.message === WITHDRAW_WALLET_NOT_BOUND_MESSAGE) {
8092
- toast.error(
8093
- messages.walletNotBind ?? "Please bind wallet before withdraw"
8094
- );
8095
+ toast.error(messages.wallet_not_bind);
8095
8096
  } else {
8096
- toast.error(
8097
- messages.errorAddressMismatch ?? "Connected wallet address does not match."
8098
- );
8097
+ toast.error(messages.error_address_mismatch);
8099
8098
  }
8100
8099
  break;
8101
8100
  }
8102
8101
  case TxErrorType.ChainMismatch:
8103
- toast.error(
8104
- messages.errorNetworkSwitch ?? "Failed to switch network. Please switch manually."
8105
- );
8102
+ toast.error(messages.error_network_switch);
8106
8103
  break;
8107
8104
  case TxErrorType.BalanceNotEnough:
8108
- toast.error(
8109
- messages.errorInsufficientGas ?? "Insufficient gas. Please add more funds to your wallet."
8110
- );
8105
+ toast.error(messages.error_insufficient_gas);
8111
8106
  break;
8112
8107
  case TxErrorType.ConnectFailed:
8113
- toast.error(error2.message || "Failed to connect wallet");
8108
+ toast.error(messages.failed_connect_wallet);
8114
8109
  break;
8115
8110
  case TxErrorType.Canceled:
8116
8111
  case TxErrorType.TransactionFailed:
8117
- toast.error(error2.message || "Please confirm in your wallet and retry.");
8112
+ toast.error(messages.confirm_wallet_retry);
8118
8113
  break;
8119
8114
  default:
8120
- toast.error(error2.message || "Withdrawal failed");
8115
+ toast.error(messages.withdraw_failed);
8121
8116
  }
8122
8117
  },
8123
8118
  [toast, messages]
@@ -8136,11 +8131,11 @@ function WithdrawForm({
8136
8131
  });
8137
8132
  const handleResendSubmit = useCallback(async () => {
8138
8133
  if (!resolvedUserAddress) {
8139
- toast.error(messages.walletNotBind ?? "Please bind wallet before withdraw");
8134
+ toast.error(messages.wallet_not_bind);
8140
8135
  return;
8141
8136
  }
8142
8137
  if (!resendTokenItems || resendTokenItems.length === 0) {
8143
- toast.error(messages.emptyToken ?? "No tokens available for resend");
8138
+ toast.error(messages.no_tokens_for_resend);
8144
8139
  return;
8145
8140
  }
8146
8141
  try {
@@ -8161,8 +8156,8 @@ function WithdrawForm({
8161
8156
  resendTokenItems,
8162
8157
  withdraw2,
8163
8158
  toast,
8164
- messages.walletNotBind,
8165
- messages.emptyToken
8159
+ messages.wallet_not_bind,
8160
+ messages.no_tokens_for_resend
8166
8161
  ]);
8167
8162
  const handleSubmit = useCallback(async () => {
8168
8163
  if (isResendMode) {
@@ -8173,7 +8168,7 @@ function WithdrawForm({
8173
8168
  return;
8174
8169
  }
8175
8170
  if (!resolvedUserAddress) {
8176
- toast.error(messages.walletNotBind ?? "Please bind wallet before withdraw");
8171
+ toast.error(messages.wallet_not_bind);
8177
8172
  return;
8178
8173
  }
8179
8174
  const tokens = form.buildWithdrawTokens();
@@ -8196,7 +8191,8 @@ function WithdrawForm({
8196
8191
  withdraw2,
8197
8192
  resolvedUserAddress,
8198
8193
  toast,
8199
- messages.walletNotBind
8194
+ messages.wallet_not_bind,
8195
+ messages.no_tokens_for_resend
8200
8196
  ]);
8201
8197
  const handleConfirm = useCallback(async () => {
8202
8198
  await withdraw2.confirmWithdraw();
@@ -8322,37 +8318,32 @@ function WithdrawForm({
8322
8318
  export {
8323
8319
  AssetImage as A,
8324
8320
  BindWalletDialog as B,
8325
- ClaimNftDialog as C,
8321
+ Content2 as C,
8326
8322
  EmptyState as E,
8327
- FrozenAssetList as F,
8328
8323
  Input as I,
8329
8324
  LoadingState as L,
8330
8325
  NftRewardContent as N,
8331
8326
  Pagination as P,
8332
8327
  Root2 as R,
8333
- TokenAssetList as T,
8328
+ TokenRewardContent as T,
8334
8329
  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,
8330
+ useBindSocialAccount as a,
8331
+ buildRewardCards as b,
8332
+ useTokenAssets as c,
8333
+ useRewardDetails as d,
8334
+ usePointsHistory as e,
8335
+ formatDateTime as f,
8336
+ PointsList as g,
8337
+ useIsMobile as h,
8338
+ Trigger as i,
8339
+ Portal as j,
8340
+ Arrow2 as k,
8346
8341
  useChainMap as l,
8347
8342
  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
8343
+ ClaimNftDialog as n,
8344
+ enMessages as o,
8345
+ PendingTxDialog as p,
8346
+ TipPopover as q,
8347
+ InfoIcon as r,
8348
+ useUserCenterLocale as u
8358
8349
  };